From 801bef8dd2e1b703bc4ae9de31f420b85829222d Mon Sep 17 00:00:00 2001 From: antoniovillena Date: Thu, 5 May 2016 01:50:23 +0200 Subject: [PATCH] Arreglo VIC20 --- cores/MasterSystem/make.bat | 10 +- cores/NES/xilinx/NES_ZXUNO.xise | 474 ----------------------- cores/NES/xilinx/make.bat | 8 + cores/SamCoupe/SamCoupe_zxuno_v2.ucf | 2 +- cores/SamCoupe/SamCoupe_zxuno_v3.ucf | 2 +- cores/SamCoupe/SamCoupe_zxuno_v4.ucf | 2 +- cores/VIC20/ise/VIC-20.xise | 436 --------------------- cores/VIC20/ise/VIC20.prj | 17 + cores/VIC20/ise/VIC20.ut | 30 ++ cores/VIC20/ise/VIC20.xst | 52 +++ cores/VIC20/ise/make.bat | 7 + cores/VIC20/ise/vic20.bit | Bin 340694 -> 0 bytes cores/VIC20/source/vic20_zxuno.ucf | 33 -- cores/VIC20/source/vic20_zxuno_Ap.ucf | 92 +++++ cores/VIC20/source/vic20_zxuno_v2_v3.ucf | 92 +++++ cores/VIC20/source/vic20_zxuno_v4.ucf | 92 +++++ 16 files changed, 398 insertions(+), 951 deletions(-) delete mode 100644 cores/NES/xilinx/NES_ZXUNO.xise create mode 100644 cores/NES/xilinx/make.bat delete mode 100644 cores/VIC20/ise/VIC-20.xise create mode 100644 cores/VIC20/ise/VIC20.prj create mode 100644 cores/VIC20/ise/VIC20.ut create mode 100644 cores/VIC20/ise/VIC20.xst create mode 100644 cores/VIC20/ise/make.bat delete mode 100644 cores/VIC20/ise/vic20.bit delete mode 100644 cores/VIC20/source/vic20_zxuno.ucf create mode 100644 cores/VIC20/source/vic20_zxuno_Ap.ucf create mode 100644 cores/VIC20/source/vic20_zxuno_v2_v3.ucf create mode 100644 cores/VIC20/source/vic20_zxuno_v4.ucf diff --git a/cores/MasterSystem/make.bat b/cores/MasterSystem/make.bat index 7e66ca5..de58ae2 100644 --- a/cores/MasterSystem/make.bat +++ b/cores/MasterSystem/make.bat @@ -1,8 +1,8 @@ SET machine=sms_rgb SET ruta_ucf=src\sms_rgb SET ruta_bat=..\ -call ..\genxst.bat -call ..\generar.bat v2 -call ..\generar.bat v3 -call ..\generar.bat v4 -call ..\generar.bat Ap +call %ruta_bat%genxst.bat +call %ruta_bat%generar.bat v2 +call %ruta_bat%generar.bat v3 +call %ruta_bat%generar.bat v4 +call %ruta_bat%generar.bat Ap diff --git a/cores/NES/xilinx/NES_ZXUNO.xise b/cores/NES/xilinx/NES_ZXUNO.xise deleted file mode 100644 index 6f32326..0000000 --- a/cores/NES/xilinx/NES_ZXUNO.xise +++ /dev/null @@ -1,474 +0,0 @@ - - - -
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/cores/NES/xilinx/make.bat b/cores/NES/xilinx/make.bat new file mode 100644 index 0000000..5a7501a --- /dev/null +++ b/cores/NES/xilinx/make.bat @@ -0,0 +1,8 @@ +SET machine=NES_ZXUNO +SET ruta_ucf=..\src\nes +SET ruta_bat=..\..\ +call %ruta_bat%genxst.bat +call %ruta_bat%generar.bat v2 +call %ruta_bat%generar.bat v3 +call %ruta_bat%generar.bat v4 +call %ruta_bat%generar.bat Ap diff --git a/cores/SamCoupe/SamCoupe_zxuno_v2.ucf b/cores/SamCoupe/SamCoupe_zxuno_v2.ucf index 66fd161..a2d927a 100644 --- a/cores/SamCoupe/SamCoupe_zxuno_v2.ucf +++ b/cores/SamCoupe/SamCoupe_zxuno_v2.ucf @@ -1,6 +1,6 @@ # Clocks & debug NET "clk50mhz" LOC="P55" | IOSTANDARD = LVCMOS33 | PERIOD=20.0ns; -NET "testled" LOC="P10" | IOSTANDARD = LVCMOS33; +#NET "testled" LOC="P10" | IOSTANDARD = LVCMOS33; # Video output NET "r<2>" LOC="P93" | IOSTANDARD = LVCMOS33; diff --git a/cores/SamCoupe/SamCoupe_zxuno_v3.ucf b/cores/SamCoupe/SamCoupe_zxuno_v3.ucf index 6e7b14c..679a83e 100644 --- a/cores/SamCoupe/SamCoupe_zxuno_v3.ucf +++ b/cores/SamCoupe/SamCoupe_zxuno_v3.ucf @@ -1,6 +1,6 @@ # Clocks & debug NET "clk50mhz" LOC="P55" | IOSTANDARD = LVCMOS33 | PERIOD=20.0ns; -NET "testled" LOC="P10" | IOSTANDARD = LVCMOS33; +#NET "testled" LOC="P10" | IOSTANDARD = LVCMOS33; # Video output NET "r<2>" LOC="P93" | IOSTANDARD = LVCMOS33; diff --git a/cores/SamCoupe/SamCoupe_zxuno_v4.ucf b/cores/SamCoupe/SamCoupe_zxuno_v4.ucf index bdbc0ec..4daa913 100644 --- a/cores/SamCoupe/SamCoupe_zxuno_v4.ucf +++ b/cores/SamCoupe/SamCoupe_zxuno_v4.ucf @@ -1,6 +1,6 @@ # Clocks & debug NET "clk50mhz" LOC="P55" | IOSTANDARD = LVCMOS33 | PERIOD=20.0ns; -NET "testled" LOC="P11" | IOSTANDARD = LVCMOS33; +#NET "testled" LOC="P11" | IOSTANDARD = LVCMOS33; # Video output NET "r<2>" LOC="P81" | IOSTANDARD = LVCMOS33; diff --git a/cores/VIC20/ise/VIC-20.xise b/cores/VIC20/ise/VIC-20.xise deleted file mode 100644 index bf9609e..0000000 --- a/cores/VIC20/ise/VIC-20.xise +++ /dev/null @@ -1,436 +0,0 @@ - - - -
- - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/cores/VIC20/ise/VIC20.prj b/cores/VIC20/ise/VIC20.prj new file mode 100644 index 0000000..d637632 --- /dev/null +++ b/cores/VIC20/ise/VIC20.prj @@ -0,0 +1,17 @@ +vhdl work "../source/T65_Pack.vhd" +vhdl work "../source/T65_MCode.vhd" +vhdl work "../source/T65_ALU.vhd" +vhdl work "../source/ps2kbd.vhd" +vhdl work "../source/vic20_vic.vhd" +vhdl work "../source/vic20_rams.vhd" +vhdl work "../source/vic20_ram.vhd" +vhdl work "../source/vic20_ps2_if.vhd" +vhdl work "../source/vic20_dblscan.vhd" +vhdl work "../source/vic20_clocks_xilinx.vhd" +vhdl work "../source/T65.vhd" +vhdl work "../source/roms/vic20_kernal.vhd" +vhdl work "../source/roms/vic20_chars.vhd" +vhdl work "../source/roms/vic20_basic.vhd" +vhdl work "../source/m6522.vhd" +vhdl work "../source/dac.vhd" +vhdl work "../source/vic20.vhd" diff --git a/cores/VIC20/ise/VIC20.ut b/cores/VIC20/ise/VIC20.ut new file mode 100644 index 0000000..dfd4060 --- /dev/null +++ b/cores/VIC20/ise/VIC20.ut @@ -0,0 +1,30 @@ +-w +-g Binary:no +-g Compress +-g CRC:Enable +-g Reset_on_err:No +-g ConfigRate:2 +-g ProgPin:PullUp +-g TckPin:PullUp +-g TdiPin:PullUp +-g TdoPin:PullUp +-g TmsPin:PullUp +-g UnusedPin:PullDown +-g UserID:0xFFFFFFFF +-g ExtMasterCclk_en:No +-g SPI_buswidth:1 +-g TIMER_CFG:0xFFFF +-g multipin_wakeup:No +-g StartUpClk:CClk +-g DONE_cycle:4 +-g GTS_cycle:5 +-g GWE_cycle:6 +-g LCK_cycle:NoWait +-g Security:None +-g DonePipe:Yes +-g DriveDone:No +-g en_sw_gsr:No +-g drive_awake:No +-g sw_clk:Startupclk +-g sw_gwe_cycle:5 +-g sw_gts_cycle:4 diff --git a/cores/VIC20/ise/VIC20.xst b/cores/VIC20/ise/VIC20.xst new file mode 100644 index 0000000..f170ef0 --- /dev/null +++ b/cores/VIC20/ise/VIC20.xst @@ -0,0 +1,52 @@ +set -tmpdir "projnav.tmp" +set -xsthdpdir "xst" +run +-ifn VIC20.prj +-ofn VIC20 +-ofmt NGC +-p xc6slx9-3-tqg144 +-top VIC20 +-opt_mode Speed +-opt_level 1 +-power NO +-iuc NO +-keep_hierarchy No +-netlist_hierarchy As_Optimized +-rtlview Yes +-glob_opt AllClockNets +-read_cores YES +-write_timing_constraints NO +-cross_clock_analysis NO +-hierarchy_separator / +-bus_delimiter <> +-case Maintain +-slice_utilization_ratio 100 +-bram_utilization_ratio 100 +-dsp_utilization_ratio 100 +-lc Auto +-reduce_control_sets Auto +-fsm_extract YES -fsm_encoding Auto +-safe_implementation No +-fsm_style LUT +-ram_extract Yes +-ram_style Auto +-rom_extract Yes +-shreg_extract YES +-rom_style Auto +-auto_bram_packing NO +-resource_sharing YES +-async_to_sync NO +-shreg_min_size 2 +-use_dsp48 Auto +-iobuf YES +-max_fanout 100000 +-bufg 16 +-register_duplication YES +-register_balancing No +-optimize_primitives NO +-use_clock_enable Auto +-use_sync_set Auto +-use_sync_reset Auto +-iob Auto +-equivalent_register_removal YES +-slice_utilization_ratio_maxmargin 5 diff --git a/cores/VIC20/ise/make.bat b/cores/VIC20/ise/make.bat new file mode 100644 index 0000000..cbe3bec --- /dev/null +++ b/cores/VIC20/ise/make.bat @@ -0,0 +1,7 @@ +SET machine=VIC20 +SET ruta_ucf=..\source\vic20 +SET ruta_bat=..\..\ +call %ruta_bat%genxst.bat +call %ruta_bat%generar.bat v2_v3 +call %ruta_bat%generar.bat v4 +call %ruta_bat%generar.bat Ap diff --git a/cores/VIC20/ise/vic20.bit b/cores/VIC20/ise/vic20.bit deleted file mode 100644 index c02f0a45b1d12e44581f9ce5952150c4dc8bdda9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 340694 zcmeFa4U8nobtd-mrWAh`j_UY|^ z=_h{tN4DSnSAO>A{_Wkr`tzUqi4T2X`&a&*6zD&s%^&@%pZJv@`)j}SA3ge>_t4MM zTYqHx(f2;G{k})8K1x4F?ML7D{_P)q|MvUn=c)B0pPtm<&QrTLw@36AL643c^=SA3 z@6rAC|NH3gx#a)t?XS^u+he*dXwmQL?e6bCdfU7Go`C2_Ec#a;{n})5HK5kjkld@5 zML)6+{B2w#Tw`2cBf2{Jfq!xJ_Xxn;w||ITki@#aNA`d957>8q;3GO;Z+dX=Ujx6j z0*kk5T5om?$a4xJ&E~%jS!-aefwczK8dz&!t%0=$)*4uAV6A~Sg$5pdQ{-};$+ZU7 z8dz&!t%0=$)*4uAV6B0*2G$x_YhbN`wFcH2SZiRdfwczK8dz&!t%0=$)*4uAV6B0* z2G$x_YhbN`wFcH2SZiRdfwczK8dz&!t%0=$)*4uAV6B0*2G$x_YhbN`wFcfm8fe|G zEOWj=zF*eO@uw10b-Mfg@OdhQdID?zMQGrSy3c^P2xYth)3nG^d|jMqHhIz``vNP< zAi*{peKEK=9nb~p{{nMeN!q7A4e+}-5H^btCl@CH>VYCsxGoGFq^vG1b(3(PP?u?uYi8Lf* zu@c0Y=z{ZHK%s#sM`Glv21=(da^xvGsyS}bfa?j*gP0J4i{gx-&__IdQO9Fj*u zYIY7?F+1#jL#l&9lMs(nGz`Z_ac^YD133^h7}OM#QJtj?34%x}(NRiyxXv=IX5JwN zOdXko%0m%3r!PRY02*b$u-T%6P+ELDSc1Nh$$X?;XN;5zh{x1&2BV{)=*L8P^(Y9= z-X&WHon$y3>xR-li}b=8)0)4fI-#T>02SASGY2#_UEZaH61+{6*w~iK>TIe3ZIqH@ z=Z1ME7udZG>Ro~t_SxJHCX*sDc2DrD!Y};~U5(;Rg{vW_<12G*mf)kmMt3w&;O!#Pf1bwvOrY<$wN1=at@cI#2u;pNgJ;{`>yIbjW#Oe)P*|ACuqx z-SbLsIvq$ryLVQXK;o&+KeS=}o92AV75MwhZ8`iTihrjQ!%3Km38ll({{=31Bkmc5eYLE~`&Y{`>AV zz{N>GbiMj=d7n1YIlX;)3%huhuk}FIRk%n=FE;J-Y!qF(=mqK*FTu>xuGZI?WO;z; zS>)aeaGZYCkqdI6YTS)G3-T8YbPIJwt{U!+ch*$H@L`cJc~#~?A@OdKd%S^X0* zoFApGRZy$O7_MjABU{$#6A<&&OGhfbm1nyw#BPK{FYq(^FtwvZ)=tMrB@~(Abk?W0 z8z?gBl}2`oY75NjI*2p2r)rBPZb>qXd*0Nj%{$AnYE=$JLyXy!s$$P-6<{qD?Tyt? zv=7FkT3GfXr-q*GRkMQ@goMd~CB5-*0olUfId1{VaYgEp#lu^UDU`#cK$Pjv(5(vI zf{suXMk_U?BKB&o?Awsan}Bf#tw9}_R=*m*j5_0+`RCap4U{sc8Xt(GmRG+Wan9>2)+PxE5`@o$&n%aR z`=UxSeg{zIbK}O1-{_WC%9aCHaF^Hn&KUDR0tS|#yb|{M_3MB8v!AU>wL-!6=xdc*KThk|LgDn5H=h6yZ+m(&R_nCt6%-_zu(x9 zR_-k5#Kp7-E7T7;9s8UyYEgP(5y5?gi}c=b7JZifQgWT?%;HiKXrgR{H)Ei+JR?on zxCV0p50!votS_#t2(1TF?;oZmdp8OgcX3IkGw)cCqci1Ne>SB`p9I?nM) znGdwegN63_*UBUvCnu)B`w8Y)*?E4dP-#O@MgpZ)cz~HG_hoXj`eFm1v`H$pjqglN zt_s`&lYyxeiAk-W+QxSt=75rPK%Yp9Bw79Oc_dp(gX@CQeueb0>_VN71e_Kre8Q@2 zHULVhk#U`aX>l58e1JY)Tncu;Z=d6yRN0t2v$Y6%rag6?!1}$F<8-_HU8}j+{S^!s)G9nmkWv6&DH*pGX3Ap)$XL6Bln_ z+1~J?sWX?*3>#-BBWDL)P>6dr>1O@%bD3YMWFg6YnG881bDUA0Gxmk8s{;>_&N0OS z9y)KZuZ(+zMoPQhoJ)TPFU^#t^7QT8Rp4^e**LHo#I@7%7v&_*CI3V+=?|=^U*tTK zA%VjtEY8RfXJsn|DYCIzIT7H`2^8)_wOPh3C2N4ip8dncEC>Gx5o>=hW)v2zci0ZBE)IXb*c&H4@cE^Nlp8gY15`dwe>a zPRix(g-Woy%PZE+-c#iqbh{t>SlNGe?%lsLd9q0YqTSuIOSQsz|M~;XPajbsJ39}r zL)ZeGT?&ghU%Uh?;l=9UjUj<4DPgP&G}Q&Bjil4$&+sATAr-#LP<|Y77@pFi96s%q z)2LIx6mk`=Q((ISi!)SwRf;J0npNvuD8;z3EJl)3_H)(%3B)~j21ZlESM7FCVud~dBD z#Mo9p94@s~`u@{4lBueIDwgdImW!uYSq-iDe9TOX3g)Dq%58DnQ9X~`P%h*adOmI% z-f6TAXtPLfJQn>UnJl4UYlvFV++r6>Uni)Ii7|HWN1)lO(@psoQ%psfM(}!dhAia2 z{qH7|KB3m=vr$5QsAa6B5HUy3>h!dF+;StQoPlizaa_4Ik*_W`b7-}_{aIAcen1b=kn#wYjA zIN=g|jOO)sB^m0WhbCLU`@j5;=lZ^^Xok_K}*BV%B;CwXDr#HZ$ z<$SXGU6l$>@G6ZUE?D&PDEop%Stq~Nz*+-q4Xib=*1%c=YYnV5u-3p@18WT|r2(}R z)mai@9p@U>8dz&!t%0=$)*4uAV6B0*2G$x_YhbN`wFcH2SZiRdfwcyf)KadS^~{ai8pRGWk0V5 z%nLg$IoEvF8dz&!t%0=$)*4uAV6A~Sj|N03tFq)~r^x+r?)r1-;H{bo+rg$=N?T_4 zeq(YMmfw)Xnnt+;Z5K;<6vFNwY_hSPwceIgg4@)_N{2wUu~jKvSE)`~Fakb+@Rv9v zYKozWTQWJH8C6G1QXa117-K5{*3Cm4Ero<%A|`jz%bTjgdm^Z;o2`!?B(p42%yJh= zi^93sRZlNsg#@e=55>>BjYkx#Na6KFj0^S%VO$>~SckAr30M%EDT4&T+|w0~Q#bOp zJQ7eg_PchZ1I0^IZnj4fPKKi3PFN%+A-$tEJ8=w-uAW*Tk&nk(k=tvLjHypjunuBP z$rAKBEEXWMwdei}l|{EQN5!7TW|+*bkgwp;+OYLj=eA=9*frWElAf*NpvT3;!&oT= z=Qu)3z>&WV&}+cWMa8BZQG)3)OiGh0QyY*cb*N;(Wo`RLi=$nl6_EVxV}Vu1PuyPNI)q`V(bL| zp&}Bg9LO=JkHfEhVUo+#o}R9^sti_a*_Ks`1+5AjkBg+o^)N=tBP)?`^eyRfC6rbI zWG5VmzSQv~ybNRNVQ1YHA<^`r5(^DN5DbYY<4{=k(WpJ}Y#z=N#V#0%9ZGxQa@e;z96@_%%~lc9MlImx#o+e& z(L8`plI?qgh>TgO|+Pd#<>=H0v9E?*zSnMdDozw-djKBAqS9ZmZx;E&}WOB3(b zHN)UDkKZjbTG~B1rsFd4v;-R)f8zd$dwg6-@Z~Rmc>@QS(Z=4DD@0xV7(VlOB`am7 zZ*VuC1XdQ2bZ>~Z(@%Ye)%}T2@Nv&H+1%OOao=^N zEWu~#vt>?8yZ5&@=z)S-a_bhpZR~4yE7*SP;rHW~j9vn$V%it)2E9ino&_9jvjNC# z<6G9`^SwZ;=FxYbc;bn2_?_MNzn}fT2`J-F=HA+>?wVfb;sS9DDC6(!Ub@8oORw2~ zT*jZw{XAiF@Z&h16?>~Y*?sU%^BI;&a_`=(c+2A#OF(BV0pHQl+twlvv?<{;4+;20rMy3<91Qm%?SBmD+ZO zSiOhDF);?WVxL_|I!m3shejl$511?y;cNjR|Chrj)Km?3rU`qT9WOnMEV`Z8|5;)%}&L~5R$0(UV{7S{M z99#hi!qC@a76(ZJ&~28m^yyF<50BA{b}Tm90`&lzh|u-%aYcw?#?8hR*&#_gp`MEY ziw;9L2O+y`jp(qiizXr)f*x`RKxuO+LqKk2a+A{+#i<~T)a;ON2Awv>j&SnDY1^nI zh|wmdur*SPl)4sLp5h)~x=d!a{3C<95-j}?-XJzr9U z*5TPY2J_-}wKT{wWn6ev>g*#ori3J8EXAe)O9y22KeIWk>`sYiSq`#7eb=^QYhcH2 zT+s31DqxkkgXoBY&d8D@DdJ9IwFU#}48xJ_N8$(s7{R+3%(oItNHGY*m|U_4S+yz{ z&TtKZmx`29JU~~fAoJ|FjbTbFA%$ufC(gi5R6B?Tw>jIF2P2j614Ip-Kpl`jIN&;~ z--m%w!Dpch$8)P5_z*-WMeM+9Qy33vB*$vp64dS_A`DcZBqz{Phj@aH66P;(6BsKD z+5&Yr1{WG3LmaRaNJ~;Ic~I!nKzJgLlyFh<0|UcacTA&!O|dl^d1!c2+7zMf+2r&Q zvyXccjpG4^z@FEFJTl=S_OjsjZHXJ9kRvdpI4Q@o*rV%I%ip;dtQji@4qp{z?n~1;(A*%4)Fe-Ce>_&02D#OFWoVL?;TDEjh(x?lzt=b(G^c|ND zTqlg%2NZW?D;A(vtybdOqp>=|8zK8BKoJ2MPuB-ld+p)^Sz|+4al{mFM9Z^hBE0traGL^vEJn##L-2@tc~jE`pZ5i}-(DeCeIXlRy4r2(YvS-O1M0pT6f$--ChK6SlM^5~zdy z?6dFNo=jW^3Gd$9zWVIPaW0c{d-IACOgfpgT2Fr9H@@7x`_yBso!!eHcJFO3e`Z-1 zL*ako{u6gXPyQlBVLf&BLxSHHkbuuN{y0nUn?P<}v6N68Jegd-{&x3gf2@1=vrj#@ zv-8~Ki5EV8@7}#_4qFD)K0Ttx&ik}Mf3Fl{pY(iN%=ic3-iL`XcD#SxjI|A(Bbb;i z#UVe)h@}%};wn7p<~8BQ){U(%eBld|Bz?&<`JIn%q7ZnTO>cS2Tj*~0H-2{e-aYuA zyzzsrzxcbKdwnu__U0z;5BCL6(%;D9KhfQ#IF7%5SD(f8LHhXS$2TueE^7&%fBtz$ z@Z}%dzV{DbHxm5e4~uV2CO5BUu}{Osi;}I$H~-`~N$%c_)!pvBS6_blxqpebCu#3z zvBw|(%x6v`b>^}4lUqMInS2#*4!G^#?Kz#`>~I)1a}^PeD`D$2=L=8!4nz}TYyMS++DTH7=nuX zoS{ntP1$q5K=-XnQBLT*-^z4?WcjJc`Swl__w=Hme&KG!vhbDUjEm<)zl6<$PsM>0 zy#Sob8qiuPxMP|NKM(bwuOG-f^Duc$Lmx3PR33Smn(J?&1 zfHZaImc#?0xserlm7w6uNN8NzdnyKtROGX88Rm8W$&v&YRHv59rCUyox$$xU0Xt+V z64nK$>2Pfz6i;Gii@EG|J?Num42*8f+ZRo@(2zwQ?W}Z*NEpTB9xkR5q@(N-2Jue@ zu0SHrT3k=ukd(hNHH!V%4(YwTJBYYnV5u-3p@1K&Lw2<$|!`zT8+w8zzE zA0}TK%oA9o&*|nTYDT-XEi591D+7@_c;u3~Gn-Pn7-8oIN~dH@lW5s(FlTA{sTx@O zNt%#M?bEWnfV;!YHS2_Bc3R3DM2boHwIP6Kcr;{$sTZNZsOGSYrpXqJEY$-;6B-Mq zV!qO_R%sutp0*)YSeV9?Ck4YbAv5iScc)N0<9OyK%XPt<+exz=1r58VvQ`Z?KCE>! z>Mi=K%zt@cNpflW)p)Y%ZSvVjR}cAkbih#XGdkcZ$he3Htf({1xymJg4jIxs*xIwA zQSdSmbH5epcO-L|_PEEcbTnhm5LZ(ah83WCvB*64U4kgptYBMleMrLvh|(-FxuguC zXJt5$XIN4}tsc|N2f@M3sx2bsiZCcqgurEdn3r-fZtHWYDLocsA`!4T53E=UZ#Z)x zM50eU+w1p+38n-`s0($-2hj=Ah7dgnFwjIvJa8Ge0Av_oA`hyZ0ZO$uvgafr9#@=zYM=+!2&+RCyj*dI z2MwfElxwxDISXyZ6iPep^(;wkOIo-)xft#zy($y-;kJ@sQWWKcI!no*ua^sq*)ta; zW{fN=nMpI0bQt?1%)_Ciid7*E^pYD-6l+%g0JXs)iP^z%18Eh7nLIa8Rb0szqNS?w zk&9_H5sKM0R!32!O8{<#UxyBqLx(zKjuGHVhYw`jStR4cNhH=n1V@K$hft_8OQbml zCv9LjJZQCoys0#k1KV{yNn)s;q2GeAI!2Iyfnpx^WIw=UyQ5FO2A zoO8HMvx_})qzAi%uu9@~rH-o4Guc{G#BtG8%Ri1&2;xBX1I zDzusY#ap-Ew)Gc||2fYF@I;8dj+<%A*iY_#aMuR}YpY67aJVSf=5x1h%}e{QU^efa|GE&g+09GK^PYWnI?l#MtMxPg&EtMLhe)DEog74pImSAJ!e|xW+-u^de=*3 zT-p8Xvs=gU_5`!O*RPX^<8s)1_qWabxR_5x#1e?Fi?7e3GZGLa*rwMfue~;lZW_;X z(9_sy%xBu+Rj|gPk-|7-}v{S;JYthU3pHky3TkyeWE}4so!$9FYU}+*}!q) zy}|VllS|3n)g@?3b6K2NmT;O*l~84O2|ddxW(BN<*AK8XioIIYm8p4kQWaFyn?I~; z=owyj3SZ6*_YJCkn({ME73vaJLrcEMxa%pDDC*88(k5IzUfr+zFbO)BGrItI+%FBP zPT8*`mhfwlNEk}l7{LrkPLkh7cFjnu8GV*mURvRMvYy0}8BJ>u_Ysw5Az-E}aJ7G~ z0kt>PfeJ3G3#N!>vD2Zx=9cLYqt02>IUcM3ayRE#vtb4bu7c5Q!2`3!Tz!|Co9ygu{co_oIWjbCc(H!)I?kdvm#1%~TIQ*o>c#{oczm6wNj84-XgG{lfcEf0 z*i7~C5Gv9?4m&?63LaBDt`nQhj+g1=o`#Gua?I6`wE#1KVM`bS+G(Bw1NzKCAqBox zgm^{zf;`aqM_Y)Tw(GkVY6esQh}k#|m|viRlL*sv`WD^<#_(CZd!?CL=jghrGR=yk zeG`u(%@#uFmMB1DnY+LC_pojfD1do17}H>Crk(;j3<|&o3&C|cs>aZ8< zG8K>Lq?(_Y$Hx+G{-hkz zq@Xg#N;WnDTZ%r0-ffFX6B1~XA+MiCX=s$@AeJagO?WcncDgT4KjcZWJ{f<=%-}bW z*{OF~>$X`jyA1hPu6(7wicarRn#bLvujcMEaeUTk+A}-dDd`#r*m6WosF4 z0yuZ7p2cf-Yg(xj+^_%1bT#FFl1ebm?@T4&**$)U?$f*VirIa7m*V|(_OTz-1Grc6 zzB_uqooTt|V_J0SePA5Vr{Z00cCfP8!11S#yHeJhMHYHi_7l5B!#lor+!f-yC3y12 z6T4YWKbdVUzohW_SwPCR=2Wq@7C4>o7>y*WM?OpAg!fmCjmI~ zNUHV}7jAQk*fUQDi00r5R^ZXbzdGf7L0!i`}QwuhC7g-GMLYlfFU@rlPSAfz^=2Pm~3ysujzY8oM+EK#<#Wd7va)F~7G$sd#eG z>IFL2TB#s4C+=iEAezC{gTpLPuog*TA#&Odth_yBtYQ+7%Cjf|r3Pf%D%wp)%dP_o zR~9*qQMOFY5ovt{CxKAJR4EaAtI$sd*djHFd>iXqU8Wr zhT^!ffv1724OPUpm92bE3pOn5nu_6Li=v~Q-t{9Ur~T`UITF`7ec z$w7tMDtuB#wms-4lDEoj`yGT>0|^n}h%6gE5bM$`;w*OQ4C0AI$YtA^F=c+gkhhO!6PT%yNE zPI;TggH zr2rg4CWNhF&sbEqHJVSjc>nvm-Ak{1@b%4mzw^5JJT;ARPS#|Cb3G<>+`UJ~cV5dS zkmr;J|qx$jKHx>^eW9Ot?lh- z`#@ElR1OmS8bmbp~s zSic3)YYJ=jXIT{vp^lG42;ES@GtTVpTN>SLRN^xU zcdUi(!#Id%_SZ!XM8}Ln8lb`<+sf9wE8x6h+$DJ22xgwEqsQ80rE9e#KK>H-NvmY3fgXfDOQvZ zPR0#@H6)sleWAgTlYj$;dKh7;+u<0WHP z$sGO|kcNtn)liDVnwkvb%fOU^U?8Sa&>}8w5+&f`Ppd!)JKM?0O3kuPBkPFN@9Sfo zxN-V;8%ZJzlqX%4hAwTzpp12^f}GF8>&TCUzoGPh%aq z5@DgIC&}&&9WIa@qTDs@5N4D91b1*(2(oS5$X%psaUIUV&0TXGJWiK*X`}EO=WsYS zl#A{Lno8k`fD0vu9}bxn3Xc`9R29N$)#->+hON0|Xy_t!8eZi&_>9IxI6}(oYAeKm zGt&1HG!KL4uoWP`U!gQBFt8*>_E81L9-Cw=^`U7Ax$xtLVkGDI_9`Epf8-j**kFNk z$@EyeX|%q*7n|2Z&_0uJ< z#W!r-5p1}%?8_bcD7RgoT|X!&e_wzo8j5psGR#8z`X&Bi_@EmCOjM|0j*5wW7r~f z_h45Z+IR+JVJQi$I)?o`HIOyRrf`8+hK@*qz79$wxS34z*T~ce%bto`fv>7yW_he; z5oVF6cuUj>gzjJpB+6M+X{e@hjYp=qiiI}My0M>Fha%JX9Z9MBW6cJ>KnQ3uGF!Isi>}C)Nj2;iIGYn$`HcEiphNT)? z&Adnn!&3j9yWfUM7OiD^H%ZPFF3qRNKpxcW$Wk>c=8X@Bho;0>tf={cEx;pP5&;~% z9dlkR5JI4Ea8)4_BD1TZsV}bqnIs0^gGyO>e70t%4+rPeOzFZQxo>VRSh^vj!SeeH z2JZYC$VAK&N%7TQTt;OAd$9Nt=}%`)Yaxp)QvOmI3{wtx*ltK&s82*X$W_{^8a~Kt zFlIl;uYiJ2;fJY9x2hdO=3sitxW?E)muVq}1&qE-2U}ILZtg4yXNoF>h?diuw;8PP z0LAR)lq^M}eL8>2uwgR_kb#a2W1iI$M?wk;a0x^Xb%e}d9D^~nvoK`ggv%(Tr**&q zS_fWw-Z?y2%WDgwn0hcZDAs`mCvQKjZ8k$4W=sy#A%;$eq=v+Lhop=s+{}uGcqj~^ zkP=9^$Ihs49pcm~hXV%8H=%)+9X8{vG{ru9bP;K^_EnAY?V=hY**nA$sYAn)z1a}T zi$|_JV2s3VaEuwzR!lLrB=TBXA!w@nnl2<;F%fh$Yr+%<)OMU)o0`}d0+z(p$H@E; zw$3Z;6k-Z&SB<%P=?iTZGpxgQte5~oq;h0+9NxCdkxY{TG(9Fa^HppCpFqmIC}v85 zZFea8aVT{R#5WBAFBUark8M}yfVlwp-O@nt8QOKQAp#yu+N_32B+M~~+AN0&6tW#) z*e>G$cuSg$T6mQ)Oq1X}rU7}@;BQERNw81>x#T5LHQ?Hz(o9q~if*B7`6ZeNvEWCA zAoG<_0!0uE+XtgIml#J?Tx^Qn4Dd54gV5%bF(m;gSO^-)012jdlTx(K0NZ1eYcM(( z+oZ8qsE*S9PT*p38R}mrecOYVP54bgJV2RY*~L^qig2)w0dFU!f(Kzg8S3vVvY=!v zv@@}cjn=3E4-o+WgD$L3lCG5wm}SWGmhH6o%<0Z z(oC{&_Do)Q?gfpUVcd)FJ>3*^>C$WOe+`?_R>CIml`j*BQ3y6|nmHCa{>ANItZ=D$ zHsj415?p%!C2U4pAup%SZUd0u&K)gThN;-sAG#HTxfq4OC)9y zHAz5kC-2e|mmWU8n;v+Jo3vESp)5gm8tyF475pYm)sHOvqmz%`&D>@Cl~;DRt{!je zN@7-Kd`Nc$+ItxluSZ`R@_o#wV|=vx(P<7d)$q`xf$kt4hAhrdr6bupjjZ47Az6=!g;4F)vvY?vX(_LXs-&__) zikV1&K|p5S!c{%(2Mz_rVEUnM?y}&LxEK;#{G}d`$$gjxMCPd59JK^a56nxTQg?v< zLiRaA8xP#bB5W0@HD~C#H_u~-ba1cj$kzlZ3q!3vEL{$q4b!&|VS6a;%6zBbPy_rj z-%P>cOA4Gx;p(0Uk8DT_r@bjH^8y&*2udwaeVDM+jJN}%BE=f)fe?HJI&Eqh5rhVn0ETqOFi5`8}x+_$jPW4SRT%VhKt~t4&8rew0Lh6|k5O9LWDDe3 zCz+Zk6e+QNZkq)+Y+Pe=q!a|HIH%X#IG~jU=e8&CzDGnN28SMJQA2`p0-9-nk#rOt zkrR$c4$$>a{A369?j z*%YQlA9z0c-r4GFd}M&2j!sc&A{b4eIX4B&!wvN)sWT8l_WT1>h=DyA4B}WOmNZAT zNsd0Y_zYhQLb1XcfU}$4Fm$NZK+}xkp(5J1IBL7L>eErH#TRJVW*>ei^#cI~+7g%)vVni*FYE+PnR#7`ZM?IS{PtS(Vqc1()$0o!bL3m0 zWKssGT}H6YKF;hiE8is;@rain2fk%XX-R=V0~V}a=Be7U?6m};v0Kn^PuN(lO%#uY z7(1d#;uJ0${yk4_lBg(&14) zcFr(a{K5u@YlV;U7-if{_hjo6pSbn%t?e&;8VmThXzSIDd-o=v>V7JVkc|?H@nRNI zw!iwKxRUu_dTH5tCllkCKJkfbFJIf9bgx~50QBm{=H}f`(W(-ZD%sXcr5;-*)*IH| z+a|iXb#rU`)ty%%q&uN+6VIkT^wdM?m|Ty=;ZEnOF;+KgtgpCVe1Nkh#5>->_QvMT z6$VZm!@$k%#%7nglkJTiu5^%KLOh%L5IuC$P|T75m0e3f+Za!4;M~lI*4y$KZcW&F zoY%WwiD@5&kFU)!ul<02w(r6JkiZN%{b)K?|F<^VznECCTq&}uC@(}?3FxLceM-f0@rYbP72F&W6C}{>Z^bAC zn}>ZFBt$ZEb5%*36#5$yT97C<9U6kJ1}SBVjZ`hT!OJ9Zpxn?hbIo`)p!?%y=`gxS zDE)p6lWT#1ni4_Y(5n?j-VxG-JcbR7OG|3QJyXFL`v_!682Zo;*%1+R0*KiF=-BuG zRuVy19{SS!Cc*Pv0;a^9C!}VjGz$*~V9GxpPw-_xxtXhG`@}uv1ie4575!2u#}KN7 zfU{gbSrLtZF}BOa%46;X6jp@_KGkE4vhcknhOBMDK2~~G7vMDO229K%uN)VFe9Z;S z16is>CYe2dpzZP70gqZXFQH(KdqPpqQ1W7Xl(eoThI^8ghRX9T_~Qfa^~xpzI1>h3 z(Gng;?-Fgn)hLNb4BXuCb|Zj=iUkS6h;cU58EQe&Jr}hOLXN?}?M7;C8vkNbSpzFT z*(#$%lqKg5RVoAXYADu49y4pz6C}9$_AzkLInL@2qMihBhE1PSw_;9~>lx3V=U~E& zR#GHn&Vx;zD0$0HS@z6yxBGM;S)bv7t9Y4MuD(2T-S=KNzQVhYP60YMNFYqWlcRD^5t zW}{Mjnn@Uo?b=!ce@v|w_8GvJ`i=}Fc8@C}NCmfQ@uyC0wD8t29D6NMgwJ*<1j*UK zX~I1!GkhhXF^yBNs+hx8_d3wsbD=f^g!D8ZO`LywU&J0nhKx-q7Hu+?_Wn0l+J&8jR$ zW-mEbes1y{W{Z#Ydxqoxeeyg4C zw!sqMtnX8nfX_O=(>vOQ{-jd7l7jrhzP$ojFwISi<&~pjn+Ht#Ne;S7-DFj{)uFx48M5Tvipj zV|_Zg7P_Y=(#JD;N&r#57lc6M;&bSIKo4=zRmnJTx0zQ<8^{txcWqfcWQ>-u2R>&l zY4tEB%X+&akJsnh5aW5Ai1ojMeX4Y^|1=?EuC57bxyKyEGy37TRiJbzreJ{SpQ2~q$TvqOxof^d z2!wOGNl+&=Zx_#C&UID~k{K*eNf|ncwqzz|sw<5= zJp=j5+az<#uk}Psaj%1%}5D3)a@EO}4_eMOp z>QQLXILZRE=qI$3a=ePC9KdcAKdQx88vMvur(mjOd9*-@G8m6_gwP3>jX0kUTn$G< z#$0vv*IxJ#&d^q<0wBeEG}J?Cg?P8aZ)#dX#of^~;G7EP@tmiz08WeZl zPX|IPm}bQJEccYyKVUM29|?28JOxOrcwLCxkK2EqiWVXF!J)-T5h4#zxoc^M?&MCf zH_@>iE_1l(mXL4-{Cojy?GV~s2wK*i4uT;wN3$KxpfLJLvPj^JTF?>g7V3f)MHIRzEjP%6Y2WF7oei;+2$-8ph8#~4K$ zbdsb-tTMmiPa{KxS2dVo!Vrb9RI}q99r0@E7L7m$6lf~qWRaJ$Z8^dKq#f6Y^JlTd zmkPp4T-`OLVN5ateS%tpN~zcCN{k|~OLbD?u)LRV?@{ccY|XD0Gr?U4i$fDGdz1s$ z06I!n=EiLE43$hELM`I*-UDQ&1=Z@Qeu=zRVW5a>fV?Lpe zv``A;P+06ph5{yl%Z}S-g~#k1={R*`ua4NLA@m3(sI1Z5K(B=gI=HUYBCX_&SD?-& z<}!Oa>Z&^}F^71X%}h*|a%N8xo8H21CzHSRw+JUlEv8JbfV%rsmH~A zIW{^53)V$|Un^rLFi7J^69v{N!EHE32wz$j0sH;|szr)y^0Y784WQ5$bp=ALfJ2kC zhRmRDU@#9ABL9YA2dja&lPmR4$FZfhVD#OAJ9bHsh=qk+ezXp<8OG9D!i;_;o9lH3 zg)76PHj9NKVp^`Y6}tNqARG^QA+m-F+cf3awS6~?ym2xb^!#4W<YzJv7><#}5JTwc zYTdKPYIrz6i#<{Yy(3f^#bpq(eJZ6e?i_eymA;N@5FICljj)MyfYRp?x`$T>hY$c2 zSGBaw?)!rA5q6PIYe6HUnA&#F#{LW9pf7tkz0LP!jMpxfh_E`hG0MuwJq#EwA=cjP zn9w=O2YXCigMmNh88dr!q~$}<^PcyG92k9pzVPioh5Z$p{NnNPFQTu^znAXZ>EBsC znc0;5edufnEC6*ceJ~v{;%idSPgoZE_8q`%zRQO27Et%@Wz^H_4zJK{nh0dsn}}}r zeceAr(vv?UdI|RZ?nIoX3JEszy@94BAc!CYFR7mJ3eopX2r{7DPza|a0lrdgZ@Rz7 zYjxkE*Xm~K$n11X9q;p48GBI???IK>*OH9v*;2hmchFvlen|i4QJ*A?B{)8w zeFhmzaEDBz^Ywk{B&nQc9QQPtt$8(TAO;%6UFob~Zw_F}khhL9@;==2p3V2c_P(M{ z%am}x6mUu%g8P#0&wFHa+?N7$nNAfja+Ri(%WSzt7~n9j2e4&<1u{qpPQfZ_o~^l= zL!#@9%~J{cP04yl#a}S1px2)71`W8%NV%v7A`DrB>DFI83C|=)Cl|c;Tl=6=ZN3Ulms&sCbs8t3=Xi6fyNOV2Y6& z&W~9r*&?>VBHWmY?H*yH{is0I6w+q zc^Q5NCg%=v0kQd;S_Izm;FvnKRC6Snr09(!TDNlj%mdpT!of2iaVm$y*KR7<` z3eB3}pB?m&7Hg{xiZq!8a!VP4Kn4&cHsWwYEG`{8@=`{qE$M1+QxCEjovg)@g8)AG zuVu7pb0g*=4>cn;{MdG6+m1U4c2M@C2)hzQzKx@)_-tp}w{3fX3q^<$m`fR4v!#)3O7?p=sEzD_XAffBr9|Hvg33OMr7LltaeUdA+=2xP6;}!pJP0Yb zfW>iBLZV`0-Fw9C-F0k%&=Hy?IEvUEGOYpZMF*A#M@TrvKGwbnaS&MFOE}4R$fqvg zJBA^cNkXZ6iODqAIADAn`5mW>3Jb+=5iN#P2&9J_dJk^AWn<$ey+|asw(bI+qNhp`m3G_ob2RDRyyAI6P}lb# zd#u}i7T-fZ`)s$%63`dvi`$^QNjGnnA|pT3&?S}t9|xdp6PQ|pw;(3rivUt&A^oxh z(;Uth^T;DctCOuwI^O===h%0I#@4;sy}Eht7yj<#?$*_7w?6ty*C3W?dpJ&2(Z=K* zpdx5(o7GZ+t*yoejYofAAb^X42PNOzI#`H7LmsLBuk+1 zWduub{JGCzCA-C~owg>&ECF?m1dL({1}OWD4L*^KA1|{c!1fr|cxP@c0rs!{xtlj{ z?vbFos3XUd)?ZF&8^yW5y}@{# z!NmqZamy|BUf6?Ytu6P}2K}3`Ib#A1c%RJ0y6lEQO8`12H)rj?D zD97R6jbFB14fibh-jAmofGIP#fLfVW;NtOuc|x#hsC?8x^V|?RmejSD`QRa`-95Ms zsLY{lh5BoL6?7U_;FLw0&X@`T?KF_xdgKa<0%A~S!2BBlPf(83LU1dMfMZQv8#o3F zPgeB1adAHQ&-9Wl0AljU9z6^W!azxBG>o2h2yoBAs8msuV{(Utt0!& zqc;+`fgQR6i{+!103S)V)WU__>BBn{{X5Xn9UqL4)Bv4k*Cgmk4>-vQ3>=A`c*uh> zoHYeRTVmiP;l_;#4EqVBbs&(C+GSxie;c=)Kh%~ zlZ+umtSd6tK!*4bT~DQ*Y-pDSQ=<5B!;+qdEq6>k7)cN$kOEZBkeI3hs0V4eNJ2R! zQII(J1$Z|mIaUlqqSkvD1Y?U~yA25vM`ApaPz$+fj`8_3@oKTB+wdBb*(F9AhjVA8_+?WJn_+>{e@Fxq}F8I2pOF z7xiq5Z(fqKD`JT%D#O_32S^H?!Dwh7MWf7L*r9gvP%Tu7@2jc>j8Ygk!+$gm4lwq$ zY3v;e$x2m82W6s0M^1p#pjBI8*p+~^A3Bbb1VbpzQjG`>;|5|NMo}zORxBKVx}+ep zqyxKsFu;+8-Vt7_K|L5RLJiW!>xF|3JV*Eh9z#eV#xCBBsbS~P4iB)wq?5GTiGy2E zn%~E+BA)a5BINVVr^n{(L7!*>qffX*%}X)WJ4|K%x1$ zQbb2l43B#xA&@6p{eIuGI(DlE!EHAgiJ^^(Z$bLlmmyC6@^CM0BgW9iw(Ks+jw@Xs zCb$~#$1(+>u`5v*Wow)y9-bGS(HPV+>fpYQ zKB*N4fp15+9R^4J1h-FoaTKxqwuNo}5^z9aaILk_a&Q^2hd_EQXwiT&C8Q7=F*^=a z?Wkcq2Hsa*=LnU-p;45m#CBS(IHIHWVS5zfo~az%xdMmB*oo)KLs0U5gy_VGRxqN0 zLT$xe%U1$fa}M$*sM=oNRs&(u2Orb|R09f!?SoL^jCnW_CKaLh0AnsUb>xSrWdl02 zqkb=jnk0gb;?Pztgv1cPj||{>p_Cm!O)bX^lm#OJPVAt1JKD|u9H3V|og4cL>|wWoFzQrJ=iV@M*EVk7 z*7$4iM<#{|xt=p(9j4^K^)mb=cBFWuKtUFO!8v{Nn=ieT`Ei0=i^mONIKj96X^%Ig z%g4vxnoOQ#s>$n5-0LPpcP39ycK#81`+)CEew#iIJ7xla$VXP3s!rSlXcHsD-+b77 z$PE8668c6(0;1P-%0`0Y<0Ro|Mgn%e{`zGBW8}kW2am)_D?2v?ilS}y7bB`ue5k{1L3;3{)FgDJ73!Q zgWW&aoqS-@eRAgpUKf0a#|WCk@8J9?hHf_-+veL0VCR6{U2w?96B9_Vg;ym^|67+? z0=}U-&bK_zo9y19dz>fl5jNL?cAx0(QWU+wT)%;fQVD#s zzk$!F9Cmh)2P+qVVx*{nN4O7A?C)QCzwjJ^0|)G3ux71U_fN zI^6wf+-s2MC}M3gFtc4$VlD%Cd7LX5_u@;hzfPZ<9OK;XToGKMyWMYni^Iz>+4|+} zw-%>hAq75VT1)V20tcWQ2{(5}=#`(bz()eu0fSN=bg6A+W{0M~tPlM;9U zFWi{in7jgA(Y>Oeffu5vdB2QZ2*u>dCv}9HVc{`WLm98%?fxrt>5_O@JlySmx=YS0 z}?385-b_m=}j*<;)_?Hisc znXZ-7QECy>S>YNZXlMqYH>!VGu$c^u;APc%*vOg>^JRA(Y#?miviqX+-~pCfdjU+x zP+$$WOhg_z@eCe6qa2i=$u!3@F?_)zGj^kL0*$jyaR+d-Q;1V~!uY`e_iq@qnXn6S z`>^=Zk5O%BMvQP%N`mvl(GpYTI$BOUvAs5kI1C_>jAT2jmO%_3gT#EVG+mmujm-#I zumsgsx@gfM2=clB1Vq9cbR%-0GY5haAUtKIkA>`*xy^yCOmIFefK?<+`q~tX%rvfZ2kA7+LSjS0rYAVM z8|u8J*+_uriwlaO=SJF2v}vkqTu7f{D^^B|8i6_?agH)Mf+;#Nn^3Vt5{%XCf>h! zp!=}^OhunfG!?Ehp|S`*moj`Q0%ckcAJxL^6oMyYGY*n#MU{h|usz7q<8X^TNru79 zH%cd0BLb`84n-2-{7#WU2UaO?7_*DoDWxW0ih8(oQA@lcyp%l0K|sA4B#h6Xv5=B1 zlx{eibdgzP6}HTj)Cifv&I&Mn_}<5;yNykSKq~w)E&VV)JwBWOSMw^Y)jC1YQU+@FFXwMN{xYnAxL~xpVszHf&sM^TpldBaTu61vmO8Og0U8 zkw}&T-X(>fn5F>6V1*?xysCgjbchSdl1eWDE<6`x01lbCGn-#Q#$;ks zgs_WS5ZIzC;bV;e2U`*X_u$}*L1~l6f9zISs)BP}FxHypgIsxv#>Jb;G#0;i1?Wj9 zPb_9fLWny=UD;S z)*;3V{7iKbGk~qTs%Z|)iNt2);|Ud!P$Cj|=g17m7SbjWA~pVjmzJG5weW})n#LHG z&Y{kaouF$77NiLzI)`9l#V(|`@-pFtt5y*|WT6qLPy)(TEWU6E#i$=UifOUlRRW!Y z1?E;qPhLvNB_63mn1pQEN-_})NxcqlfsWVOc%Zj*??n(P)@UzbEN2CIhKC;p>uqC*jrEzxmAAePPH#j+>BUL}~TLL#Cs zg*Os*+a-yjfCte+r^oY~NE)@l6d;>o;3fjuchE_7Fz(@#SKEgw0&@{!E)M@5VnIBY zMPy)Zx^#Lx4kMd=DD0SJwn2n$6N>^yE=W;|oEM2`J-f$o@eZ2HkK=OXLu3-nRP+L@ z_C#~@Z2jURz#L}C>?vdp0FVmp$PMO~D3%Ev4Jd-&k{pjq($r&c1eX24q!6>s3}Qs? z**v#rK)@1)KE=R7BWr1&BApgT3?Ns8MW=ye*)Z=FVW5LWvm}KJghVw$q%ztpsa+E%+r6#zsqWQ0!5Rj$9y@M8d<_dp~8bjq6 zaJLm&G`yK@CqaO_S^|DS5BEg8oxs>zQCkEp7ZYe4wFZ4LYGIA1R535mbdiEMLZ!eI z%c1Qn+jEknEp>QNRczc7`w2w{s7isS1m2k(Ve0G9=}TU9*>aFoN6^7w(2)X)MP*E4 zZ@?9Me8i88;<=j;6c%BpceF@e+VTIh_x7=NB-fo-b$4A(U+T@gz6*La!rGp?5O>Yk zlIO+ND#GGEXI4oL;eg%WK>k=M>T5r@To{fzs9B)Zps2xc~h`x;rV z^Xx2TMgOcIar%l5gm~?xfh;oE3^tS@VWnginYX59Mw+46`TeT;>wdit^6`z<=6UaS zRh>F@>eQ*K?mAV~)gD_+j{1O()kJtHZVq!0d9X)B*2w})GHtiX4g_T856g{TK_X+*8mMNe8z{{7r<8rR?$9(+D5--QamlaF za1qUp+A~}wJ1anOfke)|dbM=>vk3)ykE5(&K7{ZwpxpYQ=rPQ=#NxSjw!?)!yEBh2 z&;8~a0A0@4Bl_==zJk?Nd(t;3K*hf~D88}&jgu!YiMPJ~kH?IB^grvrQY@0d#n%!*j{g9fa6k#%S{tQaAb_~}4PhntuRitx#WYX9 z=iS!D2GR8wUU=bC&prFon)sd7oz)v$C;2{rRW2i;FqDQrhTX3yu3cMSzr@d#t9{AN;!caq(XC*Jd^GF)Z=>IyRo+4qQAK%zM%4=HcR6V0fqEuHMJd+b*tk z4GoWr;=P9Vo{MX^J&QGBVe?V?)stz0bk*@pjA@l>&Xu2@|= z{ka!kI&u1RcKvfN&I_Q43bF2ZuJZ#5-WQ)L&dVpheQ$MrbzR`p{Og_KoVbZ4oi6?@;8zT{eF_B+>qm-yfNz2C#iCE%7QZij_9QJjDT0un?|y>uc7vg_tE zHh$p+5_B?%{<&!9td!sWHd~Lt3ikERwphEfc4r4_IU(G>HtDY^voR<@$`cfPY&|EZt)AH})z=guRz4Sv6sU0*xxsM^YeYrDXawGXYV1uAVhXOyIxT>?l!g*K!TrrRy-?CQw*%9Q-aQo&WZ4M9{*oX zTtCq{{^s#F&#mIi0i^_}G@&dD1($ykAllnW8Kh9_ermQ%k7~DN2ySsLBs_Q2R~o0~_}ThUiF`CTPc1WC~9fX6SyzvS|yM%M4sI zq44Na9#MeEIlKbb3e|WjU~)LcE9-?a zrU0p_Clrj2Lyz3t7?Wlep(RI(MaB#$NRcSS7zBnWq)A<4&!< zn1F`)^-rhFthjdiI0p4@ z!NyjU#)^b(tw>0IsN^2T*wWK17^EyG*fX-|L*N0%#G4Ru;3b|OV~tJZ*bEC}3#}8y zkwON@mRn5`PLMwB4hNW`Ayijn)b}Me8-pQqn0scRg&(6Gz}P?{sWTDbLo7+cYAnr5 z&}tFleW{`46B?a`D67WSHWUynu>$3Xs?24A81NQG@(M7mtM%pr%5|}WNLx=X2B=Va zF?X?X`WF*2h!!7nB#*{^5@MTg2I~p^9km0y zk{b*mRwiM9K`j1CP+6$buEBa4jXcvg8=&1l_cVc_PW*f$7~{3qZV(M{kAmPjjQV~o zbd-kut};fMK5ESP39M^G8(|Xs0MLA=$_Bg;V_^j5`1n&9V*QMk>aYv16# zR_+Hz3uS_i2|61?)yHnk-iF9DE0fa{U95L+^n?DmFAU`A_cgM0Qxk^5n@z!fn3D(Q zBPbZ_I%UPdo=WXb3mZAfl(!{u2axt%0KFN>WZc27RzfC{F}j0HdK+punk14!c?yj| zh;a_-!%+uc{2q&JV+0Uz{UnPfTL1R13;7iHE_ z8>AaK9`g9o``Fve2VUC2j@rx<$O!2sLU!c1gDn8qE}S3($Y4dl3*rP6oFZejx?#j2j2}60;rk*_g6c^jGe-LrA0Ri!Vx~M zu7!fSx<S#t#i1yGS(c87i#u&or@D%N@3{a|dy?hZhkSNaj*j_WgxEP{5zH zE0M=YP}0%E9Gsgb*x7lx`a02*Po6B^Q+xoMH$QF1(3S|7H;a44+M4?h;qRwm7wMedGG->StE7KgH+Ij>A}hJ%aB5f96%}PkhhQ|LRq-e(Kbz z*Dk+?;r{lEUwZLHj=F{T_{YyiH*b;)C5R#^vGecK3?Ikuw~{P*^UZtrAb}z-p^c%= z{nFab=XSE}dTX@4y?yEwDTFX0%dDrkcjMGLtb)~7U%7cxz58olw-RKRGtNQS_YolE zGpCOQDERwq3S5d}W#xP27nE05pMFfB_KK+Zf!E&mnx$D^KX>l(<^SUHJqbgAHb)IK z4T>jzn1v!di&g-7zsYi_^9JR}^9R z=})62vb*@lj~DkuytD0WYSz)Y)%8MbbF1^p>h|?*X!4yOey6RAyV$f%ZbjkQ{pR$) z4}Vv#V9zYtGQ-cTVF&mEn3aGPN3tiM1V7Aw>};2B*oJRV0`d0%ko5TW?{2?>y85uK zi;xOG_YqgWr@~XVUX@Uk;L2;Z)`h?>Y0G&|2-VVA zqV4VAu^`A^!&~?@cw*)F-Q!l9PJ)|X{pwjjTY}@q-+Ys->O}kS3}$FlJB;?laB6Yx zKI;6{RofU|9Ht7+axL)~5L6WVbnCvln4avGuuK-FU?KRsf2dPuOL@4g{iX2_7{L_` z2bI!s$HIuAR(c-~U0|G~6^%<#)41UNu9;=68e%=CbVj<0z>pY&ACU$wV~UC&S1~LA zJ3WkdXkPQi3x5-0=`5ST64+r1?y+G8Y}yCI7^4T7NIo_RIexU2EW|2Qu&!(aRm0_( zgQyM66QJysm#i!wa#;dZeM40D-=^aoTMAvGRO#;FV0;4#s0&jB5fWn~w5GK{fTyZq zZT$?FQqzlJKEYya=@W#YtNR9)UWEL&c*{H&gvvgJ2`?CC@wFdd8VM5 z)6Sr#s+tyCHbAq6!Owy&UF!gkZ2Joaooy;-C+jw97r!;_8Lx9@>Io@ygLqnby%wF=8QHf%r_F0ZwpAZw85ALX_cU8d3x?rRZi! zp&HV(lBd4}R(a=+Z>rtN?Vv!jkpw_Fty2?f9jDwx3N``m!E2-xJTWN<6sRxxCra;6qI zjaI}`@kbd92Gs^vgOee!Pi7Y!1!25;wYI>px z34Sf9IK!=-t>rUXp}n!8D)3R*)TJcQ37XtcYOJT^An7PF$e0L}Lu{;*pvbVol4IDf zRUYyEH&AwbEj4)ck!UZ-YMCH2!Kf-(2u%=rWm&Mj6`^+Xs`bqEFDgpdvcNm=sK?zw z*+gswSdD_T5^JbhE0jz@RXNtyu#jN^I?>>1I!0lA1*onJrN|AI6tMKi%0i2YQe+nfmj)waxV@sHK0<_){)G!BuR?WNt~X{7v3VQ!R1(9O)`l{iK>+_%tQxC zuqG{gkXQLR_o({#)0QU9qG3K540V+QTBPrVL*<0G;#5(UYlNW}QaV7`{tMuZ8R?PX z(KHO%pRtlMfD(fO9)j62)ATGA3Jpe)Td!U7-S>3S>8b6bfmV- z7Gy-6jfHHa>6wY;h+~xybi0F*042!j%!0;dR=bfscQMjaW2`7+88bHrq;&M zKZQrY!UbN-n5$Q-)i)bu2NB2W_%otfodfv=OEJZ)|z`pY(8FIey>T$2&v_1E9OcITUG-*gdT=k)4n@rmLSI~Dc&0maR4 ze8YuVjnlwYw;geJrN%;!kRV!vgYA_Teddf7zw*gHP6qhPV0_@M`nw!=_0f#kQa*j%R=IxhvQT49b63f>yle>G!ICw+(hcheJ~Kt=yCJO1%gSj_|eZ~iz=;K@k0*%ki)?qjBkA0oU99AB%}o2H03WU=iG zE6Y1BX6+|`@+WU3H%Rf2Z7gaEumJ#Hxj6Kzx&;%gVVt} z_O&u*PJ+@R*}+*cl5j4&l}Zor|M??W(5>Ex0P^?*L#|4QJ?! z+ieM|NbEqiu(Pv=1l4V;O1QxF(1NU(ri$E`&@x9ViDNBXs+^ADCF4cpLeXgrlLicn z)Ly4A5?DhN9y>0^hMc#&D(9B*Rg^(G;{uMcZf8)&RK(7m;n0pm{c1kCI1H)kx*cEp zn@RH;Wj+1rAVPeCGWV{m!Y^~GuC%6)D2B51-yMN6J(N!3>pi(q*a8P?H#K3xT0qI$D zyq4fd2dLOtNKnrbIpmOsFvKl7VUAK7o+nArsnaPO3zpkl?q#HPAU~zx6?ED;xXudT z)~+xlWn2v!K9qG!$N{p{@b@5`vV3YH%ee}{_M$hiS8bz|R7j$TUJA%WTVk+BJt^$$ z+w2YHP~?8@ColrXqMJp1?zbt+PG$8i@f=fQG4|?NFKz6(E~#x)bwTUU9J-UGKS(fL zAhwj#tkeTo_FI@&;k$Dg8U+*SPzI&4%H?Td=OG4)3$DDX0plH4`Yco}foPVV2Wkz3 zHZgu4WWqjMU&Lw@sNu#Y--pA*!U+1ZKyi6DsqQER{etlA8nGaAYa zMne=Oc!w|aG)_77J+vv`$2 zhPX|X^PY>?A-ShFhnWTuS>Z7wOEM|x{a0YfR;o`jSB!v~9;#)($ z5D7%fc!Tn>%eF~3?bEqPhohVmlY|_#3tKkLZD`kvwfNB;5}1vN#4bbhAc^-Eq}IOj zH?tg8qsE46G=(V1+|27Dh6YGfouRtwu2NP9G0VX)s=CyZB*rLWO>7KIT9gQ?0CxfG z5&$u5Y{OW1agip2vkyQ+^DT29^ahFXgU81sVFK6vF$&n-0A0_|rLBSl4S`(|x2!*y^M zkEJ{tgW>`jT}=oy*zpu%LM%RH<6UUcm3vn|f9KBU8F%Bx_BQwYiNb{!(YJ9$k=(#( zqc>iA?I)i3vwNqu@7y{2=8YTQTK^W#ApQL3aiZnjH&48IBfGnOce~hGI;uZWyizn0 z2$A7PP9Z*zU4VPRi5n+wi1qlgxRGW46JPnKr?%JD&c1o##J9w^Zi@BKe_pJJm9r<# z-pE$ASGL7+307BMx_ldN`Y}JuCwH)A_1yWhi+5H|%Y@H`oGz}PU&T(%^;iGSS3h|9 z@~Km|Ze5Of-Y>q5vwG{+ODC|wHRij%Jf(ISz)CsyCp(`!TgBfxU99d`g0;1s?5tSD zOMCz5J-;f?A3uM5W#w{=?gvZi+_{yNm+*SzO~H44j{~Y4=3IBGtwZyWXxhyCyCpVO z_hYo3Ya9CF@zu@88=JbaotXtD;1|LHH&-s?u^6crqvx>JI-SElLfoeY%zdVNTau}T zxpGiF{nr_=dte#Yg2I(Q2deT|*JC^HDL!2IXc9SoFq1Ii;R{W09k8>`K^tk@Gp)W3 zgBtkJ4-5a1)IMSy%&nmuW*;K1rD#0S<)5 zSo^`G5pr&{im@q@Z^6 zLZ8*0V3j{LT{)6Eg`NNk#;O!)Cj|+Jr7)C?v^c9O#tIMvdw`kg!7gk(xYBr{0bP0( z>&Wzt9B*b`jtq@J56A;y27zsQ6(Q(z;nmhNf-J{0P;v)hkfW?AM$TE_(F(&Xhb>b@ zfGsp^5uqRVl0MSO4DmS{O@_)zeUZc}%wSS0-nv+)8^*H?x*z~dwE~M-e37g(9bwRo zuMTarwPS^qEUXY25`+5$j)2@20)>eVgRhB{VN7r-v;_Gj&*aw7*KAM@aJCVQ3ms~_0Go{b1Sv6{6X1Q&(NJ&Y_%@JGeW_GeB5RGeSUpb! zJm+c;7zs9OLjWag@h}_=0+Vm{#+$lln71*^n>xd9I&Q1EdWPLM?h0$^^S26)j+jnVinRVUii&_HH} zz?ygxbtYUFRhUE|C(;RRHU+*(Q>S0%!2)bD)I&5ByfT~*apq$WooECN0-{OMq~kmP zDR;2@!(`aEm6u5LHx&&x`Z;dOgiel|ShNvkGV${e4Q4cKI4t&IHU@W9eDnpP;9P1I z1reZV2~O2Afh zy%Ao&+_MiDE7(v>ton?Y;N|3SFw7@d;Mc>Ez2Uh*JqS@tP%qxXRb$~>{hCa~{f>@v zlgC5TfeuEj2K%=a4R9z-ZZp{B0-oJ639Ncdk9KhkgTV<13m4_lkazt6jm;lDAEtk>shQhNdFQAGnN9$ir>UyQuY5Pj1dPH?Zy zwp{I6Cdxx6(}@^veMKc22c56i63lxfGt~Mc$yrV7Vw4j+Jq6 z+48C|+|$E@_r}d@ z*P`2B$^XeMvGvQXwL5%tmS@=P*b|7}@$KSTbnW)9|NSRlzIN@eU?oH#_39*#v7y8urQtHw{8i3@U{lLcDq8$ zRIFnT0iVFd*J6t&U#0}BtKY_#OK;*mO5)C(xr?=TCqbR~``W`=*!dHzuKy`c=$bqu z7{2p=1kY06)Ar?)FLa;h8--sjCgQvQy!) zPd<6A_>IDauZ@`EXMRSk@3tiCnHqv6*0f{Veb{h};39j##hOC2V@dnO0vMG=U{ zZHiO8T8eIq@&YJ3RoJEwe1s$2Uv+m7raA!Zh;NhnG-tS$gEt)|%i#4FJ9SLH)_!wz zntrbkdYrKmRE%d6m>EPJzJ9$^k5DKNoF-AC{pBDh>^@BG5K%jfuw==l`q?RR`; z@Y{F{&cJDWLr4T`GuV9uF&3c&q%3X=V^g@R_43<9_0zJ%SgNcFRPO4G1d0)OQd*b( zDZm5ThKD6KFJ0%P7;;n;7?^RyD-{}>@>S9|WSfG}j%>k4xkT1}_jDO}P$$AbZVo!a zcqYjGDgqD0%3Bpg_+EvA+vc(Rs6m&hkcIV;AI6Gvy2m&SG5nQ)8B)>jBQX6)Zs*qa zGnF*}%H*8>fPw*7mA5X82kRq0TNdr&5$uve8kXPDTHTu{O*5bXB^F}a7~D}>SnFRD zt|P25zz`V-8GFiuFaSzyc_o@U)j&l?hzt*P53U1bZuOlRFZOkboO7IreT!!{mTf6F z7&_H5jGw_CLF}8)K*OVkK#RY$hY^8+59gXk+zZ50LPHCh`eXWsA30lz;vj8?7O&I>+pIJb{ zHrQnLqTIMhV3x9k$nL|}x+KL8Jg8HVFB-lq;!7sc{1qNP?ei&>gy3RIdoIn_wmH)Y4L ztPr~ZI{4-xmYS$3l#F{V6hl%8m8raJBPvvg9pEQAps+r#;|GHn(+>Cos%;0rkNf14 z_aOvjm}uNdoG?rZ$s9DO3RAjRPqwc>h>o$C4(u54N3pp4@7fe!6owYKUsW4mO@>0J zMoDs|ajRWUpx3CAU5XCYm~RmZ=>WXRI>_~~CsJg?*ghB-%LK-VE4iiX;@sLk4g={| z>YmzhUvffvgWrRI%{qW_772x7&w^*;?S)a%a0r`|uMjvGVEb=2;37ZT?R|mUc~U1e zwXgC-QG}C!ZIwblDDM_*zlO{(suix1?Z-9Xrn{KPjCjWb-Z$WG1KEeNRBmPy^2@XHyPtcuw{BIequ~U{OX(_TTfhJb0c2L! z77_b{s7y0NE5L5~!Cb2Hb^+d&(#JGs)@kMo@(gK4aV{i;iG`X=zZarsG?u8PB{K_& zdCQFh1^$-GATPrg9ZEp@RBY-T@dpET^ajw34OiFE2o(Oxy^S_L-c;zZ9o`-YJ#@~A zdtf_+5oO+<3m@Rh86n{+kg0Mn6P&ZHlujH0XyEX#84}(o*LX1khExf;7>pBbyGn)H zpL?~j(VGOv8gJWo!QG?;TniU)Iu+8FaE6@DR-p%QfBxrJi!T;yds<&O7HV~yhY6K{ z&u*?CJNBLXFc>NhmHYEQFLw4L!KqW1FaHfdm2MRh96!Fd@GsA)YyZ0@+orn zC~Q#JWpVEA-Qq4WYk(`5y+A{xQTLD_pW(Z+Uf@(RcXk#fz`;|++Ue;NnXB8?OwxS^ zGwf2?g?J~pgG?>OmjI-^k4NDy83=)|^zI=+mbs5j+ZIP&dsMi>4OAN3UkG!K z!p0M0_#2xxO$v+z9uFHlkgyacgod?jeA7HO`9Ogc(Yh*xXF(yUg_$bK%j^szN#ny{ ziO>fc;5Zh2LW7cj!oxK(x*>osWk~U|Hw;S>xLz#{e9Y7^4o{-U`50=0rPo#jXrdkC zEJk9iDD*UsCi?i(xaM$qbTBc<(GoF9sy$qD$JGzRt%hTJyomu6Pq7t}k~0N>Hv}-M zGgdB)_=G+-QI@S~sv4nbh!KoDAJ#!IOt9tK_b{^Q_Q3*;$DYN^;hXk+V4@IbU1Ivr zSbF4~0P7&b!lNyb3%V70`ZI@UU#-+_1pLyKiPCr)>xPscdKrtrxHESW4J$Il;>pG) zDhswLj520eY63o|g<2v76hYZ*&a2@i;{|@s56MU(UL(k6rF&el>|#NOgD_&PI3|Gw zNHs$tK1L!!A}TcK4I}|*dv)VnSG`y{c5T|mAj{Nwgb%k=QcJwlz&F7YNnQYLuQ*XD z;b*5@KkzaA&__;Df~!WqOFCL7e0i1RhVL_Kyn(I5NTL2Qdd3;D9SW1=mYXdV3&xoR zfyPXrmsV#DUhSjDg{E;O0Y;|8mjgosDUI033{VCd!<8{{AkiBAz6Kg#GZqSe4$4OF zgVIIyiO&)6wVuGsVJ^-|z!l!SlXUz@^p#W+8$a+x6&-6xpT!w;kf0O^l4SVuiPwiN zjfeS!u>lIaGnlvV`2$c|V2EJDpfpa)$|7TXwH7a;8nB5rs<48`@Q*ZYIuDJ32kR;+ zuoDAhc5cE^vLvX8g@V*9Szz7H6y&Sd%JbAF_zKfTRr*1ojd!?aY!8e43 zQO3Z}1Ad7TaPg9{GP<7$lVS@*fNd6iNMOSLromb&n%yS0M1!~kYM7HT4sgK%x+oUk zPo9Ms66%iHs_Z4ZHkkpm2Fu&CA6$T&qEjXUE0tcF1USYR(|Pz-6*{x_P|Iv% z<4pQsfHT;9ctuAEKaat>FS^jiV#qMM%&^nF9owpu8lB@-D57yghdg05d)R={$ugn` z5+a8(M?1hOYqq(GXGZ8}I?)iLn}L2QpiQ-bFNgOV1b1tpKLcT)bR&AbUc{XaIC2@! zqsZX=Zxh*-?=5^}Xkv1a>%Na%{XqxEJ8yJ^78_!06!@?Sqh@BH8;8R#lv#rA_qs9k z+mqcCo4kbSm@>w|10jIKRivp-JBGKrB=!yOkXz$E?j(sn?gS~iY=o^Iz1U8GMmZkt zwo8K5oCLAKq0y%Gpk$R2a6hM$3z_99Yd=gfKSMYlq`3D^WFF?36sQ5zJ!dhZF-K+i zikQGAl@tu{0fvE=xGRakQ{cA*@EniO^y>Kfo$#w}W&3LBUJwHRfUBj=T)7pJ?gdfW zz{f1sQuc|j!X^5E&ZSFCpahP#1qAkr%bN3C0bp}B0&jinAFG`=ihHkL+7T~cP>h!@ z@_Tn*u=XIna$`s7RpNuVdHyd;36RR!dS%|ufdIdZH+^^9tJlRFJNFo167F`cB^VaN zgXH>sKpW(x5Pxh}aeroIpPd=xU@^ID^_hy1@pb(vlAAQ2TWqx+G^DdDAKW)`FIZoks#GhGh?%j$gl_@B0XGVx0 zICuQtKYsky%B_{{?cc$R5EJp55Fd1euhLfbP+tIcisSxv!kC2;$km;nY)Qa(HAuT` zUdIz}y~%jMxqLle$H5M0jno*g=i;-PO=O1)(iw>y;9T+#(}z=|J0+@i-V*oljD<;2 z!q1*KYkf;4=v2EUR#tF_#)qoJ+C3)$c7rhKy7<8b61ZwwBmwUmXu52@fZSeZFScP= zWEBqu+l92$VwFheO2!CfW1Y`df{-jJM>+;B&WY1-1Re^~x(B(`Dr+T*TmD_W9x`N> z9t3fMApk_WYbr*v&o{u(G^UB8&)`=-^NE-NGZU_!+fCt|L>Tp0$_ih(O>$@BH~7kj zLJ^d;7T~E$I2}(N8x(a)a+Ls4>zXE@`f2G5SXvA-Smdk6LqBIfm*&q!UT?hUNh zrK_>@)Out9yAf&9BWq}67Bmppsws_UU;&^mI{1|>5-L~lS6Ayz-6Vze&t2jQQ>hs) zN+y-X_p4akMH(-Cl*`0IZFrjknc80tH-#t+=k=>H#8$vpx@`;YJDp`^M2^R|D=D%u z;9z_+4t>~3LwrKY>8vEJ9putgxiCsHrPHWgG8fAB2#&C0>nn@q99=Q!m!7z;D~Mhz zPJxSS)C<{p%WA*Cn5lg4_^vb#J5c)58)J8mKLetYoKf`%)rLOjDxR5V-Ny( z;Y4}iCW-;Mlts}geb7^wW(XQI6+OVTpBHli(sP81ue(Op4RB(~GmYQ1xpE+)rlXrd_@)$2{>2r%d?J2Af8gUav~zPCKa-3raXL!WS9TNJ!yoi|)? z%S9Kdq8ohU8zS#SXyIj(5SvtZx0{BXL9fI?{~b?kdJ~*{-Or0ns^z;U0<==q{92(eL(Pt!S3GQID0-lVL}9qGpA=q3(v5w_?k6twb91CO?%@ z10^Xz)q3tz2$(jQW{p(b3llW$J~&PR4o~GCs3^tsfRA}1eA^rIf8D^TWueZd(j(yR zGPBq^j8CRuLYf@pCi0~#CEc6zYx1Chc%Ix@f=9I!St>P4idTj`EC2g{65nh zSc3cyZ~fu!yw|ZPPKuANezd*5JeSB?I=~)O0gHDBx7k;g*MTI!9J+Ds_52lEnKK6UvNraopQI6u=Jnz0S7nm+yj9OLl^ zsNy*aPzbkGhjl^x&45iuEFU^HO_`*oG&3pcpaDHzBdf#n9s`t`M^9tC=^#Ss45lm_ zuu&PKXDE&~*vLb@Gc+wRrOd5J+QwJ(#8)M#T*sja*<|GE7&$$>ECi$L22sV=Ss(`y;%m^uUD$Fi!-o(w-cv;M;!(*hZ6Es2a+~*W3UwSK=D0i$v)FIZJ5)1sP-} z$3O^ROH~)m5j1VL3h(JwO|mAe<#%EOpCYpiF6Wq1oKOV{220Rzbycw(4wGYDk9`CP zl}n!!+RXu3|G?4ks0(;BEtX$vmscO9UJbze@jEUfoZcct>G%24t4CV;X;6db5gE6NSy#bznjM&_Cjh zBUul7 ztTSNe*MO_k=#<(JVVXW=$X;e6Em_PNI*qs3nFl{H?atlVWB#F-}MFRt(J{@1&e{r~>) zz2b$~i(;?%i?0XT$>9InUn_-KsWAETzq(gE7JDCtORn(ia%p^~5}xG7A}=Eke@9Z}{}*_f%&+YwN$Ob=oqwUXVJmxfXalI_4$ zp(A#4=4aRj6n#erPT9&1(2g$Gc233ya8*ZL_C|`b$thyc4(!#rHgLF?a1lG>kP|x2 zZ%Wri9K}^J6TU*Igccpy$r(OUFja0IJ$0zU-k-Z~>z(Yom^bmcIYA;ocVTVapCJ27 zH9)xy{_#hH$-4VXc^Fg~EoU(qA#<#484A*;dlX5BHb) zP^g&o2z$!uVv{IbZa2ygh4=oLB*<~I8(Y1X)o`>e0qiS z_D6HCF3ua!xFO}9@-!qlQn+xe%x=~_Iw^2a4=gplJ9p|8yoa}gmqqvS<)=fHkFQ1A zoGAhA#-o=V;E@I%Y2fHJATft` z^tm=U+DDUa!f%Uj(IhfYx%!I^4_+A&Sn&4<9%A2pdO6-eo`}MHfd858~FJ5c7t9dfLern zSUB^r7%${2wV2)Cf3yPd%TM-=o0j2)?%fJ4l>0D|Xp2gcp}ly1=9u%_NN(~}!L@NN z;_$Bq-4VYMe0I$Srb7+>5PhEM7%#(t<=kA3F9T+Fb1@8mp37gIEO?0d&9F*wNR>bI zWvr3?Sff4g2CqeGD#9bs!B%gC&ua}w?tsBWOeRsc+fP*`!kl~PGHp#pI1=A|ud64F z*cjyDppUopj}DB%NhxMSAb0-o7a0S;oe?DNp+l75;{^GLXOk*yAi`5=809(6W>@%= z4?TNy_@1{l9QqTya1v4k95L4w!%4n0Yj0`H{YHdcyli47Wpa}bblUCVc>HB>=n~-D zr<1OGvA{4>(-#9%zxA*{j6;`TBDS`?$g;JAl-!H*bbwEU@lL#G_;=_M@DX%u<`6S` zR=|SdKP1#8bi6z{L+8ds7!Zd z#x>}Q;QjB%EvXIBwRg3H566!KqJQk#wU2+C+~*_^*RDOBT-#i;kK3I!70l&?5BpE-- zWT6HWuzF$4Q6UX7;_v$i^pOk`ZGr806yq|twOG5lzz1)SMjNV`z^O!dSQ+!qzhHvM zxM`%r$ThuRCR)%kD8ZV}Ua#yFM`12tJenyZ4F$+}32_>?UmhJUq$cXHz&(FwxVf)5 z@RUc}3^8h*1Ah*)7h+*f%M%&l{@%VV_T9;794EOQk?gD5z2&93znH8y9uFpL1087N z?SQTr_j(4mBbe(!N2Kr^yyhQB@LY_=gx~!mxNqCwEpZn-nro=N@hHsP4yHq|<9(H3 zp!8-G;#hXrseN269A(cKMfj4qQ5v5a@8QGpS{!+M9A?otPsbi^%pNO&pUuo?Oed$8 zhjqPbzvG3kh6{1wVdb$qUt>P=nHNt-Yr9iD%-G!A`pk{>6Xlnrh4|#3@sxrih2n|l z?iTrxW;vbN6VE;I+;`smle5#s78 zExpZ*5+r|C6sJ!Yr$6_$Nbt2nJazp16VFkc_KeQa>Ee|_oDc=RG!J;Qc(a~UIywm+ zeooQD&*JUQp?scKV!S;=j4F4!svVg2bL6$aYHJg@0irWmtIro#@%tJ_lbCsg80!$+ z$cw&a+~;D5tDzhZ`4FGuR96fowDrFo7llmu+dniVMH+7pP2)4fyTXHy59j(`qko%o zH1}n@E~D78YiM+Er;=i_b~vux%XV2c3VW8tb@i{!z)fm|$9%{AI1z9!ti$KC);MelRZ z1VSYuo?SGL=HjcA_wQ1zjah|5)kC3cMI&-L9_R1dubY$=Wh3uD?`aBYYOU@MRly2hxjc6NLh~)MnML+0)g$+S8rbVgV0*x)Hmis~RMm#ev-#yu~hwW(hWDh+yXx%s#WtITh+*(MXc-aq3C!0%w zCqubxwFe@3J5U*-vpSi6vasdemv5%a~dR?klbR8eMs2G3^4z z6;b7Sm1n7|T+Gzy-z=q`i^za!OE622LkYXZ&(bdoQ-&WGPnITLFw5`#i3TSNoK=fk2W}!Nq?5+ zLBmtr=a^}$Wn3-bX!6o`n9h=F%!aAJCS|NHc%j`rUgbF}G0&_9%%UsuJ>8IBDw_X% z8PXZ1#ct`?&3-UsVOHX#m;I6SrjC0z_eNL7%Xw&ky$>66%4+N&2QHxV*J4uD08Wwh$ir~K8fykmL8qB9Z zW54HB;-{2+VTSm^u^Ghu1d-hg+%9fU&FDY8HHMRa?c}B6^{;$oMgSoc{#x+lLz{3p zsZNT860~xEd%WxG&wOCNIXAm{_nTrrbVn(HUeeQ_IAtZ}9^LkOBg5@E;EUo3@!;o% z?{QZz{-5jru&uY9ooT%nr_Z*dAA2MS7s_}SR4C2B^z$Epquyu`!G~(Sp&4!$@rGaE`LLR(as2T1YlOEPhj{JJ z7ikWeN@!}N!W@#@jf1|XzGKvZ62VrlzXe@{hP}!dbx7Il!Ul%*0NX_C`$d8eT!kh^ z=9Hm+2Xq$>4;&SW4R7Gp%_YN)XcUcLZ%b@i7>*v8|DFsm_w08A-_Bm}h8$s1M{I6Q zwC~B$?531Gx!os0ys09^hQQ_^y4|iA^)tQ>Jv5;q>fwU3nEgnUcR$0oj*SS%z8q~r ziiZ!S1obc_AB2N28hR5k3{rUn&45L`&@QLj!z;wqt3Ivv!!X?2>=*chwRfzwE%)Mk zH*VlQe)cqwCvJ!%c-L+9SDyRpMayQWB!B>S@S!VwYwKY{Q9S-TZ5=Q_hKrlU&7FH% zKkWR4c&+%M&$T5`$nr%Z?i6=EcjMvbj~saF#s3Dkw4t+$;z!Mgg$MVffldAJ0c~J= z)>g)-NnKul?X`!WJ9BvTUQz7eZzeZLaJk-5J`;DyL4K9~)b?fU8h))q)^8S}*cQKp zhA{me>>+2{Vuv@cS1G~TS|dT(8)o&=N_DtiAGTfnaJ~=LdXF?}dHkYm%jeVbM1Ou` zI8fdV4)BytcH=V}r%QyZ4xG*5!ll75OMQRgMOD3o6V<>*X+dM}qVpZ;m2(CB?FSA} zEzy4XWtM1Z4Yrnc+v`Dgb<~b6?G{tZ!)3RW(|&}R(*DAl&<&f?yO3=E`V^h4IwH%m zmRjmTFA-XUahb*3WQL{O|7Bklv43{EQr>@F8hn@39u3I7q2sKL`lY zI^$Xts5Nms3>^MSs0&*mL{9BsE;zNAnRr!`HJ&PyVTIbNG8lG-6h-3~4TbihXICzA zt%j}i_fhYNECH{LV64rzmpGEf>^QF6b2KAMMLu8ULgCMilm;ldn_+}&D#7Zc?d=In zvJm#C{*r3`y}KMtJ&g-XXs8eiwlrB85LyY&1}7BUhnQphTqztyC4)`1Oc6*6y(*rA zkzh*Mr7W)+x(T7ee@?lk#>V|7LaZ^7(@+_nFYK8X5FM_E>#9aA_HXNG0yP9Yn6Q( z^XLpnsF3?6vd$zzUYrFQE?}49I|9K3(1e%aI#FqurXlLX?Tpo^&XkQ{D-2OZJ=@2f zC}rxNM=g4u8sdKt%8aL?4kWTA-~9kGBXm1qf>n*w1V$JGgcQ6QNVP>bHbblh4&Vha z&k9Dd=!czNz%7+A2$`6jl4+-VRh43q3wr#EUcVQL!5F`i$Qa-B1P*-N*f3GBVQ^%M zyDyevmt+EDq8s^}gP}A6XOL0~g0XC!f7x|_+42E!;aV?ssc?VpCVis;O z(Bh@T$K75xG+2k+G|?DKlE9WRWkO1c)3Fg6Af3TNtq?1LOg0F!rG@7W!a!JuqA6(0C_W& zI98`SgGIM03<5`4#(wBb6;t9{;f6!aYFE$4Uj5jscZ>CPOzBV2*~Oku-TD1r|IhC( z*`c^|Y3I`W-;d>qZ`}OG-Mi0UxSPN5!W4^r23Bvc-p08kkl;7boEj*K*NZ#9f9K9# z60C~#Z-{TKtWbh8P}{#r@bc^5e4XFw z*Z(>fkN?=_58>8L4u6ct#>M0B?L1zFySSt61H$iIv1Pk=`rcF-m3sBnS6=yli&s(h zp91X7>TYuP#tNXKAB zzP4v3ue2Sv4?p|muHclS7SU8IM0@gBl=z@H(@ubAxrM}Dr|PQ26F2q5v3Oi6U0YT6 zf#6R_1;a(*J0`6!1m6FdC0;&b$cn#k!z;=zzSA8(yDUwj5z_&SYC0n=> zUO>guh5VSZB1#(BQ8E`^SH?0J`<~AGi0X)LLQX6+2rXAQEl6vBYEb)%C(}rgF_G1P zg1gmIp|Ud*Xc;}c7l%K9<^^73OK2p-^dLz%22!R9qDCH!FUN-x><)HV4KV|>WBf#a zKrQrz8dUwdayc%KOJ;qj)(rZngcKi8>B}S!Ft-_a9T9FQm5Bg`7ic5&01y4d(_Vk6 z7^N-@2$Y7h@Y6!s(h-HGnZpHWdu?5O*hbX06#RAuH3Dxpksd->6n1Riry=eBe2^{# z%oF;NjB*H?*-ERZRO#U@#5Hh>D0K#fYz<);Mqw`#Ll5uFMVZ&p5jNWne0<9!8TgsZ z^CW8}Eg8-@-MBY`dA?<|=norxL*b^Rq+9t*6dV|rv5C5g!IxZUIvbM*{odB5*Z{4e z5oO%%&n8_``idR;fH9~}2r_QTV6!#kCo~-!uF^1w@3x2(x5F^SZqghwV@IQz(1z=Y zt}(IjlWxB0?hw0(U~kjVpnJh{s>4ZSlb{*M%!@SqK7K7oMU)KUA&t5u!k${`Z*9nE z|K*8Fc$ySj1Z*^%L00W0z@F;K=p>Qz2(uFgHVJ8+By1 zOx%xkoEtqE8DFTOK+E#Y7<<1hESCa}C^evA)pZRguWP7UJ+i2AEf4zK7!3%w1^YE4 zy*27?j0{?E7k5;E$#^k*bnOZmCp_F_9<6uQSp}6pZg<8i5}n<{R$APKhItr3^WLzR zN4*GLQz+a*lnA4IDAPSVqh(my*cXI2(_{dz#iMr|6LGtbG&C2gl%OCM;j=LFtu@aS z7l>q-?lO4KtLp{-7=QckzI<;HU9q~lGmk(2b7z0{9N;#hUOMq}KU;k8i?Hp4xC!|1 zhd;cUzjF7LmAh}gIiGSG<8pVS@Hd{jd3`$8g^JZ;fkkls{MoaGxE&RRDqcGA(uv~S zwkXtXQQQ^=5_~v6b@$ZD-MznPar>#;PhGz3Bq*ML;mRTjUi<5d_GxZ!e`|;3rB(ZE z@bx<;d-3|S@z?QHj{-`=JjCVG@vY0ZZ1pVSTH%}o=gu+w{Hssd+Nk0x_ccJ}Z`^I{ zD)q!$g?LLAL2&0zmR-Ld$JkGaFeL~s2l2|~l|3bZ#ruSCwlbg1HFU)BQwV0(jl{T) zs6D~OV0Gp3D6icM2zOlgzkU2n4$jBK{|@pQTf1h^^8DQ0|MGW>pW6KDGtb;x*b-Z$ zdw69Tzy785FVU;i(@*b_#6}nY;XnER{?}LUyz#&im@2nMf?`hzisCho>1dU{XPtKX ze&O+z`OWNWYhrD`=_|S`l?3OnuRf3j8XOINGZO4^OGbk4OVGPZRkb!&o~=M@<<qsYAN4C1gCDN ztEy65c1|{3=FJdBO1654(+KVPxb_W=?3%1~mn^x`>ElPGyBuJfCaSuqvHf~)|kKw)K#;--jUM;RyuAEQi}rk6_$Ke6vtV9^%P=Vb~k2d?s3 znC(PJWMGq9;aH0nfB`o4&BV{ivQMfENXte0Ij5k|4zv|Pc+`MF^m0&$@-@b|@gQcS zDH~2>?DizTu}h2Hl|WLgEj3V{5^Rq#9ISGsLUn}CEyh9)JFw)v(0jv?Wee(5&fx^15)fyJ|LfU?bhV%&*4YiWs0`ncDlv4y; zJC%OTnK%phq%Jg5>t<+_F#`W3^t7}~>Qz_>jdHl?z~rDbQ_TZuLE7O3-iV=ISFr(Q z7H4>!1JlBE#b%a`vKj+h4taJ_@(N(y0vBT|0Nx1|laeKKHX8^S1EU##2DTiOWlRq> z*7FtVHbFE8oCOT=s~`{>R{vyBh1m_EM61UVhb9Zn$7q4TRBMkizNzuc+9QXPJb(57`T8@Vn)dVGGAhK?rHyA{>DLjPGT2UKVLmG~Tyx&W# z+>ek2)_sSO%;g}=5~XE0l)8fz;{jHJ(WNn^lxX{v)P^~IGSIRk>vk|n#HPtiS`+o8 z-|6?7ChW!78Dx5*hhJ>Q!3H#o7T+5g10T(3I;aNJ1Acf(R|)h_r~yHXt68@^j4J_~ zKyuV)T7^Z&$A@ZqaUJ%0iI1teAi$IXCJE3a9B*WREDb`CjxHtxY=%9FIw49L0OIGt z-PKEco`n;1#^&CrZ5=iB z%=4wziu4QM%oMKuMcJ#?_P+X;8iK2K75+kdb^gM!I{GYq7s{Y@9X;-chYpkP;$WrI z_yY`w_=Lx$V*QP;e)|u;@P*>qy?^Z{q-OGkALI#m%rS7{tv$T2VdnnytwIR zXGnr?1{Wv4dGed|&%zsTTzO^|w|kfph}XsI&D;tlICf0_dz)W9d9wSwd`v#Zb@(3v zRGd~<*VlvKv~4#P&bsBBwKb06_7`O@3X#|MD^g)?{XLs*ZT)F`H(-jgIiM@r`2w!N zbKam_i+|eE17+js&cONq`Npel)HdEPt$;Q)p$ZG}%=$Xse2r|ktFZI$=vFbPvGtq$ z_KsUqZ_rb|^FQ|w{zV({--s{P!GCt{pPdu=>6QdPXeB5KqKdGoj|x+{l%TyMpu$&f z@!{`%uku&!xo%mN7TbF%vWkugb}k zK2jJyEFT`QuTJ&X>8yr`#VFnZhbnIim?l>YT^<~ox>r`|%CYQYPcbYO58Ep(1Tu#5 zvGS*tQm7-RhhtPz$}LY1xq0^1+UQXD<2ujL?*&VI57-n-TrXH zU>A8G)PP2O8$9R*`IX?ot&7v6VVt25__5guRW-we2!J8h{up`yFm+l9Upqv9H$&dG zlsQbJIE#hu_cLgVLpCPBm>SppfN3#bNDmE|s^f9a1BcZbjPgacDf$W-_K{y6D2Nog zy8YdBuRT0>`ilRc@SCKDaEF>Ov~9fvhANM;0il1vXVEG!->ep7Q!$1_Bmo zmpcbyOE8sZU#>v~xIbxKW?{S@*IH3t-4PS%se$a2rC(g8shl=;>x$f+Q2|TExe{~= z_E3#2-l!fK`5BIKh$270Qt%`Rv<6=LNH@KhSh1OReUxNh(2$t~2{ur4VE~CquqL0F zi5YbRGuoPnk+02&(T(`ab3hLg9km}y@UXj8Vi=8>WiW=;`=-H`>Cwif+31C4IKp=G zZfv^!a0Gjl)l=U>mP=rptLJ4)DDoPQsglf-m~R0FE3Q~#g=q|PS@dL(42L7^Lh}?nXSzp=JiH-x6|Dm1;f4yuvr8;*e8rF-R`we#SU@%hx%Pl z$2?9bQ*4GnO>Ai`Mq{nVIu*l7ECOu}{(XwDoa~s3x>~NvBUEB8lrF+&NK=LB_RhA# zj=^DFVXyCy7p)okR$)V)6Cbo|@5Ps%6}MNz)#8gEwD`8gb6EM~>>fbHjS}E&q3;yi z#TU8uPAdgA%xbZH&f&2pfB0}&{1T4OdIF4TOcdhTuLpN_qMf&#R=x%eMezUDw)l#; zIc@hHmMrI>bGs$1lpweR2?S19!rJ>&SbK+FieET~-QIS8#R2MJ)|PGrW}nM!5UcVX z_%t!&AGr9VtDO&u-@);#;fg5N;@ukjy9|a%Ftu6gHQtSivV~I_(!Mg>lip5X} zxl8QAG#}W<9{K5nGZL6G*13#aF5fhxGIRp4FycVSEJMaG-gpts1fI`+_8^H*oH%=6 z33NLHgPXK~1ov*e_}{pPh3RxgqRBPrfnk(9$LnqVxgx(_aCUa zE@UVXZOA;rPa0ev61eg+m!*)*#b8qWfuSz{Voqs|W?n8oyl7^zhmd>C-Fg%TMJ3d{ zdFW?Xc=-?!3avnPQp6=Os-q8EdJNA-`aJ5c=7kZP-}ZRC!7F_{r*i5FIQ;M_Fn&9(WmAhL24N`NXFzY^+twd598V@qG}c zelByEaD#BDdzi<`Hmo-GY($45SBeU-|J=zF^!WHv2J;$LghR<;FD7Vs=zNf&oD;0G z=1lLA04ibY|7Y)Q0Gc@R{_)w(1~y@VO$Ztkb@Kv7L<}!#MAS`4Feuuf!D6e|fM9K_ zS5&n2Iq%%OfB_-~q#mff2BaQEuf><^(dxC~MMaGYqOHAZi|F;do@Y_|+IFZ-F<-I<;5%)%8Uu>M(l6=({9*eIH|{YUa1$i&Q!sR!4s zYXA(Iyb>?}KT(ju*4DRX&6>V7eac__LM;CKmy;6y6M6UN;Vl780k}P_a?Kj0@*k#u zn2xmi|K}Rwf9_NtmJ?q0ewlqOC|@0G8S$e_y@Ctdhgl< zwgg~e&!gh~aPk81l!EI7ufx&$c!nLVvzGI4CVbEq|A))zaZ)m5eC0*|AaswT|HJFF zKiOXbI9dJ}v%^1p{{M$kF0RaKgfafp50(lYOlwO#gBBVgE>70W%_m49=#3zv$Wq0jxB$PUYa*m_qRPh zW*`qpDAwCwHSB0rG5|fhuMPu9s+tx52#)fm>0*xzd+=sUvtzdY=I4T4G_RNWv8srI zS;1`K8wz;mg^dAb=X7FRnzh@9dAeX2&YrOa`j_0`gv#wmuG>Dg*L`Pgde0dHaB>G$ zy{*4?P&l&(yrpcYyI4R`FPKDcW->^HUqvup<(BcVyw_w+seSqq0KB{rw>_+ z?MHp={B|<`vd4>qHx_GO4&XEwhEcHcX;=Z(5D)l+LFgWTy2-2l7zg{eI&iGc2Cy=i z9ULOLfrVYi5ABCx=Iqb=-PV6&813?A;r1TCdtloG94W&i^fBIh07JnL0{yImQ_T#t z{)G({>1X@^#|JhDc5givV|SU$NeY|-+FgdbaNNRPC;dpV#r*+G@|}~R;gaPh$SqSl zi<(@Fm4?&MfMFQcez>ZfyWTnlQ|XxXC672SEVGZh^G`8zsAi80yXVhieaa zod;`f0{`HYH?&eOLP&eHt$>CDNOzf?tr&m})c=o^y|*l|is93bffc|M@d}t~_}-)l zUM1B9Wf;49l|!o8dja=HxF5i4un2G%_(UWv0=R%47uew91B-xy?`{~@eq8|V*V%iN zK!T!h>%so2@D}<9JJ2*-PQs?*d3 z_xl&{;b=7DN5i;7{YDCG4l{`3NN zU1Ju&ykqG{Ciw3v^!1Gr0l0yoNQ7bUzWZ+f8w+N=mj?G)-eWBy{@t`6FJ3ShB~rjv z2umP>yHa>_W|)CF?;f@U0Y731sDbV2lBV7IrU(2SOrP%d7JJb4!sSx-U>JNl{CIA? z*AN2$e$Q8I36h{43hT7+$2yk_^mskr`+zXtP2$coL+;ZJWFOCi4o?02OFa~NFyd_r z*9$(>L3^lsiaqFBcn?OG`!ReyvuM| z)*%1UDGVg=?-TFLCL8^}XWPHz_}@?cfiZ8lP-;+xhMhz9*Y5`D9hEYu_(M~sKf!xD zW4B8%ApiHX{kC28r!n|$=Gznpu6O!d&fUJj_HZ}%hX~o=sK6$G|2!L;9L&fK$?bE8 zt%41IpSK9?Ot#vaM*oF2aJhLo{Rb8g+|J_94j%{CDBm^&V5KmHd+X{pI zWCnxmtRd?d@3Frn+^bRDFT1VrDEXc0_wz%{?m!i87r?%d8LSAe@NNw_Ft)K#2AUWY zK1$ANKis+R6yJLX@X8*g@hJJ78Qjm$+{wHvFetb$b5IEBqvUs}-p31LH{HQz{oh^- zYF5JBt)YhD{*DNga-jaBbcI{NPPd9WoSw+alK}^%a6e9Pj~s5jaJPIg z_)w}Dl$rrB0iYiY-sbn4hqLUvHQ?^+{ceyxNIszEBlklf|7Z8(4)Q*U0pL*@kCG3j z^&pz{0f+9Fp|M>9O2i>u3v#>f z6XPM}vOPq0KM{K)L+>Ymy!+%$-=WHislo95+RLEqho-l0z6?y6{r5U#(DVHVt=}ef zJI(ueZfi035q?kBV3oi*Max}D-GwtXAfhM=gMK#*((wPG{Z-1VaQpE1lVSHAgF0c3 z>_#;Zi+=fC<-48BzvgklmUo}Fci%+Zkc%*|6;OlX+to72csPZTAL-a>GiVb1?GUVLNyF!l$NWgv6 z+4k4}0{||mWLOn8{J4%?Dhvk3NB4_khtR`C#85=BKAWBO-sQYQXLudLc^&xKGB@0} z$Oc2-QM)V7y#Y8EbT8{ZVTvsR{0Px~MExxG+I4w*{NBsvfqM59Nbbx1SD3IZ^+VqT zXIJ4xLq7f;4sJa5m^ty7`(FsyK&7*LX0whBGhW~09v*e)W6_6>0wmmm|2~f0PrP5y ze^IgfS=sKR_aK&c@2Lj~@8X+puW!AVZSpeMlo&XYdHfXbO6M^GOTZGiJ5>K1$^+Dk ziu$0=kLLW?5t2>Vt_u$K_kWl! zGa#&TKClEmz?2>|GQ{1SM-07X5l0IUr0Dk$!&*1wxI!p=9s;XeD#sYr%L-BEm<@(>v#bNRKo7oRgPUhc9gN@YxK>2rK-xCMB zC+rJ8E&|MV6eax}*wvCCtY3YHM*lZ9`x)%Wg#8UVuO2lJg0w%Kf79+ha;Fvr zm*`Qjv(cZ>Z3!~qgSKb`zuO|#!wiH5DWC=z4nL7m-1J7abccmIrsPn>)FMgw**Mw*?N2W@VmJEVax(w zolp=H=-}SFG-_e@&SrlS$mzEc_6qwC6g%IDqBMJiKLAgl-_Zl~JA@hJJgBT*{%tMb zt&0AuU@+!g)T?=CTGUH}0fz$(9nms3iWb4Wr_0;};Q|cf_3uS( zk+94Ap#())PFWe3YvTgyc19#lGSFm`ogAVEn2$4b<1v6%mlg3Km2d@CD@;Jb0Wb_W z5@-PoDHq!27s07SXonAfZZ0e)s{tt&#&8X02D4@hh@pTHum}_|Y$>>mm$2RkIfMlb zLJq&t1Q2Lzi_okl3=dM&8;0nzZOY}9umPw6kI+PyhNRzlfrnM$hI|MF4NC;a@sBZ# zM_?oljKxN~FNG48??ON|)L}ITINlgd-f%w?aM^ZI!2S@38td3{KEeqEJgyq)0pbGgvs7KUN%zzyQq9TsQ~G|BgJ*ch(c>5~*sB7s*dd!<&h z+rP6;-A^8JtgeO?#}vVqC;@PLXp~_%D2L&}Z+pX555olvtZ)Vv3hqKh0SY!68~bf5 z$SFW!Gi2Z!v;ilv(NNAoF&@UF83@6^irYc?gJ@H=3(z(m{4N;OutAU^MQpG|d>e*) z?;%j=#=O;lxGk{SSWU=-n()}~*p2Af5aNc^#(LnJ3A$hQu%liGOcYem!}&!vQ}SxR4G5avD< z04VVTb^iq*B>)?+1ri z0R@04iQVfQ+9fLuFy^2$@RO4G{AZpC4i18EBOZy(U^KWe7?!{dO8_0*Xbi5`hB^1- z<#{PIGEGWSBtctLm?LzI_Xv5cb!xw6KZiXU3`t2r!B4>5!oK-?G!;#KD|xgJ+EVZT z`Jc({ez~x)_}u?60`&iI{6Uwj_||35&0ePi<2j$M8Gf89McSUyD` z0zL$M2>1~2A>c#6hky?O9|ArEd_R;6uQNfDZv50zL$M2>1~2A>c#6hky?O9|ArEd_R;6uQNfDZv50zL$M2>1~2A>c#6hky?O9|ArE zd_R;6uQNfDZv50zL$M z2>1~2A>c#6hky?O9|ArEd_R;6uQNfDZv50zL$M2>1~2A>c#c|0n|dkI`QDDQ8vD@QHI0vO62sW{wXlNfYdm zZ#x|Sc3N1upfY9Iq{!B}d2Z8qLTtBJ?kO?xf6v*qF>y~-<&q^~l_iIF{8KSkhLtvb z5r5?17bE=-&N$eu$;2rX;o;Ol`k++Gvy4Yy#Je2PX*@^ghH#-uHnFAB>d5mF9P!MLG8NQTmE3Lv`KqLEbRMmdf%zO-o9IXebP1yUaqQq z>Y1^nEl*vPAME?)ThY?eZuPaU=0=5!ucT_21I5xtdyU2JI$)Q&9JcN+lBNa3bi1eQ zJ!R|W#C_qQFKuY3duLh{@0)J1t?zn5is#Kso3^Wpr}UOyw%%HH;FN4y+kxH#_MWbo z_@gB^-plFx+M5^Wpn@Qu*mUzo40YvXKypykMb)j5@$y-lTsQbVfA00mKYnZ8%3GZZ zbeiXj(-2B*U-s_mx|A?kwdo34+S50M zAJcs4Qd`@BFNQsL^0^&XueLj4`--1)9j%S~XV6z*JRH7hqvYpTYB0)w$8q? ztA6)qE^y8LD``x^@e*0_%xn7&Y#+%aeSNY!u6zHbgZ!~2MO_=I<{0TT+|*1^5mhnS zo4T2r%hx`W*-KM(`+F&;w{g4u8ws)T3@2Xc@kAfvL^pTa-|PxLhK}EHKzuAa zXY+Mo*}8si!eBONN_>db}+qY4ajqkT7C zyXCrtPd_=T=fJJMfG7}9U;ezyQbX0-pSOHow;Q1Gr?MH<)qfV_JBXed`?As=?2ApX z`6cy@o&MFSTb917eP5$7o8r90r7WG#LRfPJ2DopbWVpX&)iScP_Rj6-#BM zL8_IioIf$LUj>xrb-Pl35p3CXiD^6dwOwl8U`5BQ&1#pPF3zSewqM$W4z%Y^Y@L8vkE=ij&{1 z+=_#?;6!0h-COTZT7T@D2F6)uiz+USYbw7|gGWYkD9dZ%oPCiyOMg>F)fT@eE-re@ zb-b;#{}7Hes4!-;`j-s zJKBCw%99o)N#oj5$K&1l-%A9h0%K?fIzL@!OxJOrq%+cWhIvNOSzUzTtT8o1EPbLi zzSe#ACO`hz%+3RjQ$HDbjT6@~PT|-e^<~P=c`aRENrTF*BAKV*WQFi7cB*~J(u30y zrC7bIsPfqBSbfXpo|6aTWs`Pm-=xRlo^_+8N2e?Q;&J?AayBnglwPU78B@&5tw9utFHmpJ zysWvL_l_{}Oz}yJr(xI|V@vHOCExX%v56lZj|Sh^Z@d}xW^jG^OVJ0^ELuxM#0^U-EFI=7ey5|C=uRX)cYkF$5M8n>=nv*yEx%v7 z(>=X))2-}VH`hfgKX1O$unk-K?pVASZy~AiZ;|ie7U`R|lOG4YYzb*Oq1uzD`Wx{~ z^W=m0fq=$M+pXuXuIios&$a`3@TvKJ)aRRuWt)<&B@&x#HB!a?FBFMmH}+btUR7)x z7HNN1s%Wga!mq*YHPYR62c%02;VrICadM2JsLoZRuPK%mp~bSTm;W(6QFd5u&{q-) z{E1+t^#l=}$Ez$&s8P7q7RdrME~ZFTRE$Ov{@!sU{KG{UsU?#Q^rF?I+OvXlz4iPTkJIf7eQEZgc?Wu~otzRs z+td3}-d|5n`PuAmTGl6g(mturakBG3zUP$xq8STUy|!-Q&nK)tv?%>-&Z0#V&K}C> zSiNxd+0YBR)ho^}T(l@O7kWN~o}r6o~uqhQI`>VR+k}Iq|I0z zYMhZF(1|h@g+gwJE`POA5IQ>pDnFSKDquNKG{LCTr7tpuhK8=ztyZTS&l*KK-Pv@l zaZ$#E)lXcz)OX9{ne@_}Yn^>JJ*T)+xJH1`NJgk3;2U$PyHch+#|bpw)Z-0`SFP`y zUM!v%&O2K2+2WUSB%_2XYg}BmzTrgpM=i1}x#JjxwmGCdC22nwM0N&8$8U3YHw>qr zuw~(m34f0c&{vj6Qnr`JNdt@ANiM4-_(tILxMp{O9j4Kkt?IJdBNK^)X6a=q9@o}f zc%#+6)*kOJ>anhfj`UaJ)?3#-j(8G3X~~ZNoBeB)nsRbVyGPkP2^~ADxA#TQzTM!h z(p5Fm%#SKZk4II_ace)@srWr6Z5C2-UDENmosm-I(UCvZ>&=nvaZd+M^RzZ$jl377 zmjdn9UTorLxTo!)=}YZ6nQZalpJsh1rj3e&qB-v{U`|(3% zm2UeDsWjk?+em=x%@iQ)sxxUj zO{vj0M-qr%_NDpD);}wohE!SBD;t`|M|*lZwmAYmn5r)vr*SyWZJZd#tu%}GS8e0% zpLICvZPS9cWxoo>uPdpLppoZ2=l5+;Cb^X@cIl0{XwW{Q-8vo|SsUP%oGO)Bv`L#< z;u=rzdru`f_MkYiy?GkYSK`MxB?5cHv>__eeUP#@G+9(>%t30r^7QxsE8fx)6y0@v zB!M^g=Jm86AHEPTUR-E`qlqd<%3=f@w{YaVgY7`Ojf{)K?M;=;CCTVh#CWAAZQH!a zCF-!vqlnU;aUTaPD-UV??bl>va&}8&n{h>Gx{gi{)haV$2NTf_?|;^R=vv~OH9P;a zFGl{V^l8q{*3FT_{dl>~(2Db)gf{vukS@r{&Ba4)Hc52Sj$7PIj;o7*cd+u5Op^Tm z%C5E#ejD;$>ew5XJa&pZ3ELxEe5T~w&_5Mzv&7{@i-S)b-e%_6kq=|C!DpK%MZXz1 zeuBNK?8KQP)}RH&tUOgDi-=G>!0B-jWtM5!?8*HoG-G z=YnIz--3q7M&CNSXQYg?#`Ni}6W68V^+irw&c$ugk2Y3Xj#hrW+;4eFq=1)mw1U5& zsF7n9nH!_Vrv6;%j9ySQx}bQ=Tn!z`ix1)TG&r40;N$qj-(-_a@1&rA)bF7hdp=zm ztvXs{c@f*z#CsnhrH5=Czagp$b9;|2l{N)#-}q10hA$&W$35E|dHU7L(Yd^<$B(2F z+Nh_KKBBX;dzLN7!^!%oeJ_5^x$`W<{0K zB}AM3{bs4$;~9R_FWclfR}vB<<;_AW_8)A(G-#ak{P}=e(E&lx?zXnkGV%7q(yXe= zHd~k!yr^DKo3$j&Uih)~*~+Jf$O?+Kv}nJmC&$(R3kCjaNi*6gtTwr8broF`TuSr|K9)pPh$^{=U|uSKpa z%uU~tvo>3L$$HURX*W-p+IW(i{bE{C6>ih-HI1Q0H-%L?E@uD9^PB3hMq4>`P+y)s zesZu-Mpj1lOciZhTmC`Uf>+Q>vpTz%32zitT0h9KzcPMr;PvFS z)THS6l}AP|PIZjfqYxhJ*vEWXxJ6PnD|hct@tOq*RYg^Mr8#jYh;t`w%1O#8k|58a zcx4LtBtA~p@@&X@us&Ec+#~2Z(i)yW+@HH-u58&E0cG%uO_sJkJtV%8XK!e)Eg2=n z0+z&wm}GmS6RmITWxfoaGxZkd)8?22r2ySux+Fdl$Vz#oo|KwHmCF`PJmerGBNW?i z15+ij~oYJ?Tbd{4qxIG%*}~oIVmEvRTm2 z*1gj%{fz%E1C||NBK|NF4SC<$qU2neMM+*=_~eYJC~M=6scSn{hMmw}6wI^b&q=tD ztj)sCBpj0TYC}3Ijedtz{+3V4yw($OBaBB(>6L_NefZZKrz`2TgmzROu5@;W&;BDg z#Lc%ZuyxKCdXAJ`dQ};FJ@!vC@>dCsT7T8gkCf31*L|WBbZv<3I&`!3mC+$HszR*V zP|3&~&unsrXz0b!d2ALv}lvt z&u{NhE)4w13Z3zp%^{zG5TzSPNMLVPDz)}_&J=et*4)CprcGu^i z{p99`kL1dH;;BP+siQ4zH{MWOSv{`3c~#gV|JAf0{PmKkx0VHy&$QgaxT%_RWkg*Q=aCWGY`n)$e{@Bi?C#W5=c> z!5^`?mMO{_N`;KMuhTvJuuN2%iuVTGEX;idMW!TcBY zK3BV>mU7xeu^E+-Qi?xQ)^y!jOv+IHitGHeQDs3cF1_a`+PMXSLf8||Fp5HP2QkL^ z_Ic%7L8#rJY|Hd)C31mLEsj3eFnkPXWuCNiek*lj!98W7C%K_*Co*D5MZOMHB4$zn zC`H`M!IML5Vkr*HoSMa++N2W-GaZK_gnDyOdGT&ZK*MN0e@tcV5~+1Ic=VC!co&P5xhwIw2HIIz}3sVaEiZW zM*YfN#7}-1f1M+boo|e;iZmXc@8necEE&9E3A#8hKVLg3v)Np|)-ZQ>d^GI=!ugFm#u!F}<_-C3b$e`bd<3(+M$=aJJR!H|8e|lCKyXH@ z%^Lu^7C6PV&0tB%dE_Vz#ysL z>Exd+8!>`1sF$H>#<9zk>eivn+O++xei&k)pCVGMvZ&&XRIxpNtX!LV)NNTRFp=8A zZ0b2WJTS1yvfW&#^(+V(I89nd=Z_Z?9z%MD>L(dQ4qHV1$U9 zB^Uw5xg!Jcb_rN0>)Bhi^s6xehiA|N&aLK;hrh_ni>qv_tc|Q9el2|}XL(~Z z-u&FYvDC3+NpZyo5d&e+0qu-jO%ti}0E_xumKbw6k+T>#E3`|i4K?r=S@vgghl`Mc z6u>uD%odFU>CPGX{1F1Ju1r0meF7#APZc^1Il4SP@Y7gw6qJSQLP%kR9EfmqCZ8jq z)#ii=fdbN)Pp2dxe#XufOUuI|jj0vQRSmBkjOWqI_XyqT`N$Ceg^RP8-9cl=@+Cq! z&V6cVlU^{Fk-J>s2HW!>7pznZGgAS%UGY;!h@tf;wlL+5IFjdg`WdEXX!v!0HA>^6 zp~Ln!)tA36Zl_2ZryEp&2|)C%0qIq4Z3;KVY;w+|15mjR>ndB{imwP=o2oO2DspQh zIVl*R51;7SVywdr4YQj-BJ9NWog3k*rYTv=cKe6{K@@ zb2YAX?NFn7(OhlL%oTzROw7R=1qhj;f3oai_>&cqpUl8k=xlB}RM%=$myzWPuAf|T-O{{r9pv)=urZ4BjpzLrDcrUsuNzqUVz~U!_&kz9qvEY&4OSJ$5pQal*c7Cw z+a-Mmy&$~^Fda!jUx&q=k$c;P5t~`L7($4pRP#LmZ;_hS(raC=XQu=irc7q z1?(faXv)HXSZfk}ijj3Cp?x5Uc|WecXP}Q1&?cuiV>uHwoP&p~iN%`~h@XP{NBQ%G z6IQ*P^k1bow}pYP!iPRi7YRh33JmOQIFmr);eL^V1>nH6$YrH#Od#iz_R*QhKdfKo z-D-<2OaA?(3k_v4$eUONEzDErMxF|oSoZ5LKd2qLk9Pzt$=Pr;GH!N2%Sh$qsp6N8 z^I|!wkVM`)#}Ds&S$^yJq^KFU$U^<(2~))uO)SUM(j=*9T~0oyR9=(})2xjf;atO! zt86AZT$OH?y{5||M_?Or{HkX7qd#NHY~kUh>yZE~UnDf5+cZtLo;E5kTa3xu#p2;( z0%zo;7e?og40Hx+HSwaP$$|p`Wt=7vxh`q)(FGE#^MyJ7VTH!54(B_SQT4|v_eLtN z9UZkkpjM-ytA5YFhjgu$*Hqg+N44C#4<46N`Ay$y7t|345 z6DbP_eij*p`KiOs5Z z1dWM8iNIzmglrEGAjz5#IVR!<7Fb09q{WSmGqxGp-Lxewsgoyf7a6(`!3-qF@MmHi zXG95>GIup`sF5(4lR2sK9I@gGqq2NLV)76}I3xf~*d>h)OG1#mHoN3Pt2%dB zJvT=^L_W-)FnB5rqDr!mLvhJGu7R*(TM-F(Ue1*9BzRj0-ZuJ>Scw$I#$&<+0d4jd zVAKQ*S&FujI#Q&Q%?#iwMO`6!&I*uMW826k z*Cz!^QzRU*=X63?Fs5eQmyZ^3taMs6O@~wyXVCo}q-UviM4DP5UDn z-4OQ}_e`hA-P%r@_5OrRbW~J^wSQFRZ%!r*M~LwAL^t}h$$4&cgi`GpiL3%06Np7b zQ&YAB6A(uc;-Y||jogl-SW|(Gzz~4R076l5LXtiW+-VL$3;~7$8O~{oA(IIvo5?zg zVtT4ullIz^v9!Muc}c4r;h%9t+n#WK%?hxA2F>%w7T`>{p#z#q>lB zHRC{_Z#Y8i3Qqt~W)wQO%9#}iXrHh+Bo(`W=m0&BIO7n{3n4jqeKwwVc2|~pgIS8rUN3GG0 z94SE6v%$v7S+n^~M;tp0Zbv&H3!XyC)1KNfg?0l0R?)IJF`_^Rl%@hyph#^{r|4hZ zh;$$qBo^aFLwq(Sq^V5Ha9NdhetBKxa*R7W(5ha9F%^`wFm5xK5*_wawCdWoC_uni z{~$36htxY_ld-*~PTI}$JA~>59cj+ZLS4WTrO1f~%Fpv6>Gu3o_yBK7jnmLhr$~;4 z0|kNbBrC16Tpnj&pfFF@fmGvhG`NTro9BsF=U^0b8Bw|DPEwCeA}zMejjBK}Qn*DK zF;4hjGgdTjU6{b}7pX5~trYKc2%W7tlKC{<5Me64QjU?M!%4Yjvy{p)J5);EpF^Hp zTa%Lz)MVV8tM3RC&r*lD=huc7#kuL(0<4`pi4EhJTv8?wN94n_crkksa&;EGivxui`WswzkKsm)aAP%>Igkz9j{lI~-= zLM*hE0?s*@X@|0YxGKkN>mo_e6eUhGHFc+j&Lz{DbRY>+BjZ(1Ab_mocOp5-vFeYQ zp-X_Fgka{o5WUz|3|0UvE0$^o#tF3>%U8_JsX}p`-CZUT@6kv++)!lk z(lF)3S$d6P+QAr4oW+e5zGk+9YUpkgnSZw#T9mS=}L4~GEJrsa)|V!ozi#$MbZrE znGy0dLLkHB2_q$1d#s6gvQ2@tNlbG^ZRtS>eCwffzQu`5h7aGIa~v9swsNw!WR4rj z&Cwqs^N5o~Tn!V%(Ik}uphVVXO-;D8EEZswvMQ34=LDiTuSiaSo|+IPy>fAjB=L2ivC&eTuY5%9`;UA<$?$Nnh!@-HB z6|@`wg=cEfaW@#+wWM9>I^OO=t`Gzjga4PzPmW;NtV3qO3e%a&QTo94hJ0=666KhU zpi8BiLUS~X9PM0d6mXd26zQR*!=n@z?9Vfom6LXHqV*juB;L1Y!0Mx~PjE&pQh%sD zOpVr9Hj*L49rj3k(y?24EH87RAjQmMQspyp#cK|SEl#P_rAYh`x%xa9Ge+TNLb3vK zDpzweG zlnLo}Hq+`q)YUI0hB1en;S_fs;lWcty1r$0#0)%OF&B>-BL9PDBf`^4@|6fUjkKLJ znfN)}w5DTNjFgIZbV#Mnvr_41ejI%NQ-`ZsdCR*EH!G&egEs_AR@Sc2kcrx9&d}P^ zy2v+Cg;eKsDr80`-8`bLZfNKT^Xa)(tQznViZR1(!#ts?9$x;9?RYUFnyIheZc7P~ zmRn}Wt3}mW5jvdgSRkG^V?>6UXC9_V&XDBzEtIZKLq>%8JJRW=8*5&U`dy0IsazOA z3e+>i=|LpPg!7Vz(1Oac1);_QDSQb~lq=vMGRaC0M<~nY%%wNT@>+0*dW%^?^wOId^TT@?mHZp*R=EW{b`!FMEk~S;re8UFCyD_pntFWM70`qGSR*Wm#CmqV`eI(OL4E2Uva+qi-!_N+H3rISl?@Ix82L!<*(`AmOAC-z^IP;2owq~+u_L4zx;L7NkrK?r#KhKNkv zFhKEjU~ju2S|UMCQppNq7FnY^My1w%td*468q$mHTE&!?lJ(V3oy*Dd)6ol0Q_*9h zQOxe2yoStkAlR(s&QxVs7rL@Ai&SG_GX&&JV2Pu}a|IRZ`DJT!$ZAYZWW|PR4e9bQ zK&6*ZScyCgGt4_9K3*I0OKoFUut{?$I13-2eFz*PM_f*sll8~S_Fr)YEgMOLyGc&) zbi~SM^Clib($ky`c2zo+SjVXW1jQ2pO)@=?E1yV%E;JILa>BynF;$F-(RYDT4$+&v z?kEnHfJJdb@Qu+@lsOeY+7q7#j;1nM%a}MV!AF(dv)qpJDq+e3LyAEghG`27POZaA z4UN!ux>5TAdiZi%1bl@`zcM^UyTDXRwzdfBv1UQMCoVuVt3YRZJ4ZM%E-#IApY3Yn z5F4$qQj`1%WYSTm+u)Qd!F)Gq;;d~BB%8TI79-*{aX5NBJ8o&h_*ueq{;*`ZVYr_6 z9HVxoc413FV(W}mYuh|FEEv@qs!i3e26iB!LQi}3e$WOq^cxCgB3@%VdP7OOImB#- zzDexSG7%vlr^935&qcGd5l?e)kmgikBb#{D276DD5nR`&%`Mg{mWD3iCuIG>BpLyp1Afjp zqhWhUDyl=&3ACHc#)3FBu>d59P&MMvswzkc&n!tWlr{6V`=zEw>WR@DDSvwhszN7- zPHQY0(jnJzQqr_Nap33)G|>W|U-)4qMarvwj#leN1kTzu7{(B%l{Q1}gx~Sv z1f%5Xp|G!Klm(hX7bYZ}zcjtd-#J4B0?D&uc$d(C_&Du~?C9#s&Hl9k-orYYvgxJbLrKEFa=~dMR(Le@d7w3X zq0r9d&gcBBfn0dhDsrjQW5s!O^>N9J$C;-Jzc4gQV^+^!o39=r0J#F8STvs!rC=cm zChgn=9iF02Co=K^&(8j=tC#97kdA>bz;bMwp@C<)=kwkabtF^nlBAG>9>PV9Hizw9 z4MeN`X3Rb-9cdBea5^ zq88eI7b)7W6$r1$16({;ab)#;!+h=#kw%Gd>9{3m>##Zh#sU0L=UW&`B&3@%5u1ufavO#=|<(x#Zw+23*tCp zOO?U$Amt%tOS|c_*B;$N@@e=G@FCzsz=wbj0UrWB1bhhi5bz=3L%@fC4*?$nJ_LLS z_z>_R;6uQNfDZv50zL$M2>1~2A>c#6hky?O9|ArEd6p=? zrhbi2s2Bz9$3vK;*#tv0{RTav(-G!El*s+eI)&~55ru8ZVBtpV;E zX@TP@zv8%gg`(kVP|FEwpUFToKrt}xXt8&_8`o82fJR~+QPS0*qM^FI?K0q7ojdrT zX(R6^yj!s=le*W*Zw5Tk1r%y==oS5C8DD`G53O$E3uqhpy5PE6VM);^^(1Wx8dsKL zjHD*cM#3yr%MN}tvX#jc25Oa27=?dsepdU72?*6D?BQPSTXfrIJNVKm8QiSlWko`^ z`uFn`RA29H5e5(=8EWW07kkWNp{&H$$<&p$8{Oyf|Grjgw+}1pvX2#plEw0LeWvhO z1B%IZpxoy7^Nmiip%0>CA;;m|dzy>gpM< z`Si<6HC$Yv$rN0aN1&4dx8BgGim(WI8a?Un+?pL#fi0zSM9LscSCmoq)64b<>ggu6 zbfzdn7nO-=ckICU4M7_J#pZ?z;bFzko0)8!+G7HF0o-PT{4($>Lb4XOQoDGu^R>BF z3wF|<&9vt8x?NUfR7sFwStcF|4Zoij;tDYp9^ii&Jt`074GYzpH5#q8!mlQH#r0M> z^IF9A!?b#}KEpYR(F)bVr9;%h=P&`i5eqMx{v`;%o&oA#nf_JrhE=kwbpV7OqR~%{ zA1@DEXpXkLbZeh{bS+wrjBCvpO(b$&fN;)_9{09xV!ODqJa$y(?6=#?&v}OPK5cF* z-!9URR<0~r?%cS4-z;S;5TX~(^=8JEH6fHDT90#PqKHdNbF(K-GJilLUt071!-FjC zlmovW+~f%E`WYdupUi3D0M6B){Dc#Pm1_dToKsX3Jw+nF)ih+hv!xnDFXbgp4c5k> zbKC!Wdwei9E^ABpCXVtJ-x^L?TNAeb(D;N{&?-!`16WSLFW&RFBAeFyw>MT9SZ9TK%IJg0bnwhwJ`;c69 zPMJcPw3l-%ZTs9{`#U9kJ#tiNbF*_%!7-qS~6YiC`Fw2cJ4U*x|BXb#O2R=1Euu=#Vy`#?q48-2cQlFLRG< z{x8$@3&SUs1Tp3K*F(6L)QH#|6Yn3B(;bSHv}iL3U5h*~#a&#A)N}S;y}M_e-w_TeZ&hv%MtMwmzMZ2@7>;Av zOWkfcaBbYwHJvfNDt8q>eyOKZGmljT&amm}U*g<0UTd?_c_Y92lfa9} zNOgm|x{(+Lc7XFYseIMqS!jB*TVEzGNV8i=4A|k491TfS=z#)o_h)JItIZ*6)bX(b z5l6&rV8nvPAf+YfrfZS}8J`=t7#M`IeJ=cCCN{HQ$n*=c!0Y5H9JOS)y03p2~4 z3Ts=Q%yB$m-4HGC$7bLf?{M6x9o~&6xw`aSDTg) zKM(X8v8ga7CVZBpCB}Ub^@}zalGAK~W_-9?%jk9sE^{4dcHT^9gdkL{4`vXbBw9G(J zD4&!4tdkc_m7BBa#-+sQxCJK&L8|h6LGVlbVD(2|2G0Y32QL}i=X49iU5<|sMOXXV zAz8`pPC2EjnwT7Hq4V<#H-^0eenT}-uH#}?+vs>XSo;xG)K=6Kp`W#4a(UB;(=N)u z1rz9vl6D6=fxD==vg^W^bGu~47*(^hwb2eHrVf#PZKuu!TTYGS;Ca93M84+S?0w0U zJe%L(R`xoQIF+D}#?1Sa!$o3%y3LWd95_dWztW&=O%_fNU{7)2Dnl*;(hgdPMt5`s zF-y&P?`rQ?_+HM+7$>EW|`dwb9K!X1x~e7fq>bze+Py5Uha#kNlPFz&eS!}!i+p2yll5=6O` zbX%(s1A4bixU(|kS)ffWsZMvV&Kt8;TT&gieND=^HHZGY;|9(x5V2=%l*5xJwdp_y z)S(Ebg^QO-1Bv8dqyWKy4ncs)AU5b|@I13#ZJ^TyfU8!kNzwo?KP?Y9#U#Z;0S16R z6~_TwK*7+098?W>>2qlifpYkLee=5Ku8THNjK1D1^^7B#H1QUO$e!$0=Q0;q~l1BEnY&{P=V4$kT7-IT!6Ey z3F)9+Of7K7k~9aiEO7RsQDG&|Z=QK>XFE4ASeK_Yelu>&n?zWPP`OyK#;7T27nygcbA?LRrqY%Ts$xpO91FJ;+sCX3sw;Z8+J5ESu(7G;{jO#e zZwxXswN#^Qt(n42;uN;mgT2|qdChOc@@uz9mG%M`O)QJS5d#1CdRJ2TUjGQop=JUc zX`$LrB{Y29(?D{#+Psy2b$ppeemSRQWqrdZWT+{HZ2$k-yB4S>uDpLU32_J^86wh% zh?5~e2uLGP8Xkotqzd=|b=O6=+XYH3b=CUX#;tB0Lc}3Fq)7eHS~mp55UC>gSt_=M zM>PU9sJlJ3l^VcysZ}0kx40V3cL#)S_iOv@erM0=*>kv@F#oytfA9UzfA0OwFPZyT zkgf?9o=&O5rDQpWH>5ol(QU2C68RVIL+S??G!eDnlAu)Rt7G*owUh}Bi-Nh88B<0z$#Ull1 zB$+{`%cugmq?Kdj{N-(tRHCdCtW{U03uKq<2#PPP3f!+WZWbB5L*}!K2;@s$`J5oC zGd-d%=R~TQN!txF%p~4TA9M}3sMS2LYp;UXEuAts0 zCWU99YEaVW%|f0rvql^y@6$^Lifis&V-^>xB9RI-1I;IEML25+pd{;dTUG92QuGRw z$4tK6=mV$P$OoE*$pUPxHdxEGH!}&)-UO2B_ahNb;E0ghbt@Rz%m}$6PWG6#KqM@DBOV>jxzMQAshxpUo%iF&KfBsFtHL?gbu!FyIQM%1CHSrLuw zbi=B$vKr4a(kOB>ZS7-Ab){P2peX>C=r}6|?aQvp8GA@0DLD+#5UZ3?0U8exCT(_l zE-({>uQs+nR;LROTbcj$zFg|ha^4!I{t8?t=P4dQS9xua_wDuZ27%ddfeBt9TU!VG zlYe&n8I^mG3d`WU6O@&w!c`VGz&nw221`-LVCd|;DYL?84xZYRS|`NnpgKbU<`rizh^sW{S3GE2cNg^wy1 z$l+b2xNs`ge5U-1e3=D4_O#%VM;Mu$DG(q!{eI$T*zW{V0s;77u`G@k#jO=sx2yT# zNAqfx)xz9dRLfDwkmQ76#&b;BW^?z!yD^za_dqiU(s>f#eOzB-e{JUHY*o^XN)aQX zF|S_a+i}4MuF+kU-;*(XC31aRW8b2%jMu#~6z04)$bt}#RQn2}1XtB~#T5wcYjq)c zC{ZLKH#BTNAM}#GJTs-F~s{Phc*Qk}VMVX{Dryquq!r?&=_MIUAr8~@A- zjg*FTirOj~LIxtwEaSAL-@I~Ix?fqNI4l$&Wmhgd5+En>?eTf%XB#?`rNsQzg{>;{ zl8sHMDFtn46Z-EBJX%_67;WHjW%hO+l58)ikeIZwL}l1IoH)kO8_g1TtJK_nA~UnW z92;uZR^y$;)lyzDwIjk;C@o-CvpPnrWXG*;_nDDcaW^=?eQt(zWq5}pJ|3_>y;=tj zqO%XCyoXm-ylnP8taHP)+s_bzbqkLed}>&3(p89=(3{Lse=}8>L|BUmvkVW=igsOY&Cds-8 zJ%U#yTaA*)B6g{WY|c2zDB_$QVAo$dBw0tLF37S`gL-~*7s_3{vltXCM}k;`Ib0`HQfIDO-Jj5 z&Dyx~#kth8zP^-o0i!;W2zsmVy~sEJxO8oxulwr$z%piFM02+qKb}6|>EY@2DgL}+ z_btiud!C92gNrG74t7*2Jh<|r#G|N_xsJQO0QD_0U^}eISilklhtt(Zl?lK`UbXmv zU5FE$Q%$aqRCPe|n@`b0=*wADS^u-{RSOT|gUOQ4dEp<8ZT2&bZhWGxi)6f4^F|ez z4$~f(_Q13Uradt2foTs+dtllF(;k@iz_bUZJuvNoX%9?$VA=!I9{4wTz_$q4+Y51o zkQIS895irov>fONAm;%%Ob9T^1}-6|*Owz?T*_-EsZ)qhBpFt2N9rhqkiewOLL61W z>;M$PjU=ET&WGg?L;y*V6vZVlcu-LkvQC7OL=sA&l*og$1Gp9;kTC&VeObm;hvFzj z!V>uK0}uj70Ryh@&WOQS%OYYyu@NKLnFtPQ34cZ-vd}TE5tcg5i}pK6gfY+_=&gz1as_U)&6B-){b4VEo9&sat|g8e zPj9g8xa{f}b$6*uH*;nr)8WCpBrBlbUT0-}E0#>ung@Hm33aOWHh# ztJ~q?J8kps4s|6B(;hlf`!!tK* zzg+q7Hr!tJbKAS4H=M39)}L&@mHo=;(!gArkzH_CVpzYlp z4)lgbGvl1C1-9nfgE9u>Y6J4EamUk;$uEJ3eiXYwWQy05txz z;()Wn13>&~fQvQyQe-VH@MJKGVFGQn@Cdsy&ZTBDP_+sJEC@%ys?7lI2k0bPnScUU zWC8@O4EKcq+%P6A5cWwgjNJUk9GXF5b7!7LqMg4rZXev`rUpihFnYVe%*V_M8e5L4yf6z>?WcnSvFJR0 zv>EWoAE!NZ3>N^e^reuu(1AJmxS8Te<2-6gndV5u zZRpDJ+Yb)LZM3yqeRmrq43GFlS2dfQy^$@p$^qAi)AjT@h-^EYkFI^&2Q_If#|zsY zUW?mdb2`4<`QY=2VSZQB1K3mIpz?t0)WhM(cWn;`Xx@_Oy5zb$A=rlCWBtMBQmDLd z?5xw3ILt3<{{Y%USCQXucb+50_I5QrvOgLcFA$naUl&aVhF!sNwnyy)PS?G}`}|VJ zqmf6C=p-cataC7~rF6(nSMgnrL{pkcoBPIvbC6=q?X_sOp1w{ScH#X#c%n&kLT?1b zJ1MBcze~tmw;wYrcsUy`yx%_@?`#R!VS|IWVHE+i8BiD*r#*B`q{}u`-3ad>T?Ku+ z#~(LS7&XqLrj%)pln$5W#wHD$yugXEm3mMbT!sTr~bDxPX~7dpTI8gn}A&=qOrPhWB&6|85oU@wV!95aLI)l(gUuM?bv7CIXKdWwNBzUFz;KuCP9rTuyKJzd!2%N!Z6yQ$LHP5N;PZF!=kGZZYykf^{?Ht0 z5-z6DW?cB!@dw_)_o^XkeGmRjHN+ngSRqJC<~i|3>ztH5``ZpshYjK;&f0xK@iSqf zWd$t@f}86t!l2}js&nOgj}o0+V_O(SnWTjUrgFkWnIjB^xdGmIaqEHt&inb&k)20F z?rRSt2#Vr>tp!Le`HdOTr-o>MZ~EJz08f2!ge5fS*UOiT6}Teman49452xkp3CvYQPsqo zTm@cymegYUz1)30*Mthj9tGL+2CMcZ|_U`E=7Q5Bp2Nk|zOqEhb;@;UxAEBZ} z%go(fAuTU{4~(jhct!=1(HJ8+dAFc1#f^a(-dqvrtITOAN;ketS8BLrs@ucR>#)3~ zxmlk@dGpp8mRpn3+}EYdQGjcoteBJ2Rw3}N{5il(9cEQla-}%PgV&eM`lCW6E@Z0k zQ#lJmqH?UCRM*rXJ+qb<)s{mXYe{f@WLt0`=SE{>ts8Iq#4@ z9ph9~t_dl%4q#MH{!)o?p;7zM_U5H{l3rpI8WwyVT+|s_zWJu&*B&*g5`)QL2J<(R zp1NW(-N%q^g*A+0^;c8m9Nns{llAo~WN`s|-zKuz9btAF@Zt((rjG!8+*emYm;uf| zm|1zV^Sm&3uV0VF0x3P}_D+%&7q)qv;(NB|C#Uy-wu^`Y4zCU5!#S4u+9;$l%$;*6 zo1WK(v9uf`rI?!67GE0FU1%;h*W5SHdc`76_XBHpV>lz8+2MWioXvA&b$H1)T(zZg*HbH5i@bkpLL<{{rqRe|{3bRC}m1o>Sk8x53B5S&juc^q~Z)~{I z7uThqFY+NzJ;kn0)f?8DGBSNLwS7kY&RK&#g{+GHW7HXm=g~H|h9eTinmM%!%1E4& zgokd_XBzuzVt*}dDAg10xqtHUE#dx2P*-e>4mwg$E2{;ym62at7Dskl>J4+xlm1)9 z>+gIK^yPW~zFdXu%{gq_W>D3j^bJuleYFNGv5+82jYd3od2OJSQ)uj9tz!uz7{|7R zI%}HR`sJTQEas#H2o-l`AtR}6j%-CVg)Aoh%VvbJ-g@G#3jz7T)b3W+ zjHE6`c+Zoc#3poktUQ0O@KHcZ2@&~~?#z9USk-RB-iEdlAw?&$KmR{S?|7VUE2?1^N-8@x<}(J_wE@`|OO-c4Mvlu+Yz96FN15mv(NM8(#tEG=Iyx9J5HzUY zkX^K-s!A%gq`qOI_GQGHFH+hWLMc~b9G^{)ZAAuC@0<+N@k2pdXIZ5AXVG`j-y+YI zOYl$oJvXpQi0EQ*G=DbxHHIHUvMZa(8CJVjhyvTc`m7C6Fu`$)XybTTByr?1f7nGOLpvHtXAAYSpfj8p8 zWwxS-F8q({BroXq3tqk%_Hj&Bsl4_0_UQQFmpVKC^*nDmm5mNtvE6`a&;~ zY5l%<7`o%xG%bE8H!xUhD*$Kkxu?S3;RU>a-rShLek+x&U5~Nf$JQ-9P+e|MXcc`` zIG8^FT6=6@sYhs={nTkH;@u>(%y7zJVo~hUDy^Me86M>RoBr3uDdq%U_{E3w9J7?A z>MXwe*-q7KtTXKAkRyK9QSlOT!{v`;1=ir(+SmJ|GhPpzbDzv?j0+2j3H_3dSxky$ zH$-u6jBImrfjRKLUgWsbpj|86%A5~gBj=LdOU~Z`-M1YMf0wmMhN(SHv$$3`Jr8^G zG?7WNBN%7r!pU3|m45d2?l^btvoVSwVdWQCC6ZoNAqnCLgFGUMCYdlvfN9m4A`&2Y z0VFJIAbRT@v|t?>bN^3f0c zjPN6bX*y}z1JfRu_Q13Uradt2foTs+djNWXq<_Em0_@4-Pvw*uv>jqFK9*q01_g-% z?bO-#3g4UWdo`ycr#H!e&wF4JpC*t0e9r%$CTzdmFelxP z$B+MNDU2#{Xl!pYWU?4_|ToYk#sTz=0p;WUj~OZn8e$lC^?783H^z N7QtB0NsaG2{tx-iASnO< diff --git a/cores/VIC20/source/vic20_zxuno.ucf b/cores/VIC20/source/vic20_zxuno.ucf deleted file mode 100644 index 6c48d0c..0000000 --- a/cores/VIC20/source/vic20_zxuno.ucf +++ /dev/null @@ -1,33 +0,0 @@ -#UCF for ZX-UNO - -NET I_CLK_REF TNM_NET = clk_ref_grp; -TIMESPEC TS01 = PERIOD : clk_ref_grp : 20.00 : PRIORITY 1; # 50.00 MHz - -NET I_PS2_CLK LOC = "P98" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ; -NET I_PS2_DATA LOC = "P97" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ; - -NET O_HSYNC LOC = "P87" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; -NET O_VSYNC LOC = "P85" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; - -NET O_VIDEO_B(2) LOC = "P81" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; -NET O_VIDEO_B(1) LOC = "P80" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; -NET O_VIDEO_B(0) LOC = "P79" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; - -NET O_VIDEO_G(2) LOC = "P84" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; -NET O_VIDEO_G(1) LOC = "P83" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; -NET O_VIDEO_G(0) LOC = "P82" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; - -NET O_VIDEO_R(2) LOC = "P93" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; -NET O_VIDEO_R(1) LOC = "P92" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; -NET O_VIDEO_R(0) LOC = "P88" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; - - -NET I_RESET LOC = "P51" | IOSTANDARD = LVCMOS33; -NET I_CLK_REF LOC = "P55" | IOSTANDARD = LVCMOS33; - -NET O_AUDIO_L LOC = "P8" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; -NET O_AUDIO_R LOC = "P9" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; - - -NET O_NTSC LOC = "P67" | IOSTANDARD = LVCMOS33; -NET O_PAL LOC = "P66" | IOSTANDARD = LVCMOS33; diff --git a/cores/VIC20/source/vic20_zxuno_Ap.ucf b/cores/VIC20/source/vic20_zxuno_Ap.ucf new file mode 100644 index 0000000..41a92b5 --- /dev/null +++ b/cores/VIC20/source/vic20_zxuno_Ap.ucf @@ -0,0 +1,92 @@ +# Clocks & debug +NET I_CLK_REF LOC="P55" | IOSTANDARD = LVCMOS33 | PERIOD=20.0ns; +#NET "testled" LOC="P2" | IOSTANDARD = LVCMOS33; + +# Video output +NET O_VIDEO_R(2) LOC="P97" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_R(1) LOC="P95" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_R(0) LOC="P94" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_G(2) LOC="P88" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_G(1) LOC="P87" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_G(0) LOC="P85" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_B(2) LOC="P84" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_B(1) LOC="P83" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_B(0) LOC="P82" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_HSYNC LOC="P93" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VSYNC LOC="P92" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_NTSC LOC="P51" | IOSTANDARD = LVCMOS33; +NET O_PAL LOC="P50" | IOSTANDARD = LVCMOS33; + +# Sound input/output +NET O_AUDIO_L LOC="P98" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; +NET O_AUDIO_R LOC="P99" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; +#NET "ear" LOC="P1" | IOSTANDARD = LVCMOS33; + +# Keyboard and mouse +NET I_PS2_CLK LOC="P143" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW; +NET I_PS2_DATA LOC="P142" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW; +#NET "mouseclk" LOC="P57" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "mousedata" LOC="P56" | IOSTANDARD = LVCMOS33 | PULLUP; + +# SRAM +#NET "sram_addr<0>" LOC="P115" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<1>" LOC="P116" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<2>" LOC="P117" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<3>" LOC="P119" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<4>" LOC="P120" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<5>" LOC="P123" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<6>" LOC="P126" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<7>" LOC="P131" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<8>" LOC="P127" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<9>" LOC="P124" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<10>" LOC="P118" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<11>" LOC="P121" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<12>" LOC="P133" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<13>" LOC="P132" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<14>" LOC="P137" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<15>" LOC="P140" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<16>" LOC="P139" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<17>" LOC="P141" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<18>" LOC="P138" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<19>" LOC="P105" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<20>" LOC="P143" | IOSTANDARD = LVCMOS33; + +#NET "sram_data<0>" LOC="P114" | IOSTANDARD = LVCMOS33; +#NET "sram_data<1>" LOC="P112" | IOSTANDARD = LVCMOS33; +#NET "sram_data<2>" LOC="P111" | IOSTANDARD = LVCMOS33; +#NET "sram_data<3>" LOC="P105" | IOSTANDARD = LVCMOS33; +#NET "sram_data<4>" LOC="P104" | IOSTANDARD = LVCMOS33; +#NET "sram_data<5>" LOC="P102" | IOSTANDARD = LVCMOS33; +#NET "sram_data<6>" LOC="P101" | IOSTANDARD = LVCMOS33; +#NET "sram_data<7>" LOC="P100" | IOSTANDARD = LVCMOS33; + +#NET "sram_we_n" LOC="P134" | IOSTANDARD = LVCMOS33; + +# SPI Flash +#NET "flash_cs_n" LOC="P38" | IOSTANDARD = LVCMOS33; +#NET "flash_clk" LOC="P70" | IOSTANDARD = LVCMOS33; +#NET "flash_mosi" LOC="P64" | IOSTANDARD = LVCMOS33; +#NET "flash_miso" LOC="P65" | IOSTANDARD = LVCMOS33; +#NET "flash_ext1" LOC="P62" | IOSTANDARD = LVCMOS33; +#NET "flash_ext2" LOC="P61" | IOSTANDARD = LVCMOS33; + +# SD/MMC +#NET "sd_cs_n" LOC="P78" | IOSTANDARD = LVCMOS33; +#NET "sd_clk" LOC="P80" | IOSTANDARD = LVCMOS33; +#NET "sd_mosi" LOC="P79" | IOSTANDARD = LVCMOS33; +#NET "sd_miso" LOC="P81" | IOSTANDARD = LVCMOS33; + +# JOYSTICK +#NET "joyup" LOC="P74" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joydown" LOC="P67" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyleft" LOC="P59" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyright" LOC="P58" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyfire" LOC="P75" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyfire2" LOC="P8" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyfire3" LOC="P39" | IOSTANDARD = LVCMOS33 | PULLUP; + + +# Otros +NET I_RESET LOC="P44" | IOSTANDARD = LVCMOS33; +NET I_CLK_REF TNM_NET = clk_ref_grp; +TIMESPEC TS01 = PERIOD : clk_ref_grp : 20.00 : PRIORITY 1; # 50.00 MHz diff --git a/cores/VIC20/source/vic20_zxuno_v2_v3.ucf b/cores/VIC20/source/vic20_zxuno_v2_v3.ucf new file mode 100644 index 0000000..21ff0a2 --- /dev/null +++ b/cores/VIC20/source/vic20_zxuno_v2_v3.ucf @@ -0,0 +1,92 @@ +# Clocks & debug +NET I_CLK_REF LOC="P55" | IOSTANDARD = LVCMOS33 | PERIOD=20.0ns; +#NET "testled" LOC="P10" | IOSTANDARD = LVCMOS33; + +# Video output +NET O_VIDEO_R(2) LOC="P93" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_R(1) LOC="P92" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_R(0) LOC="P88" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_G(2) LOC="P84" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_G(1) LOC="P83" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_G(0) LOC="P82" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_B(2) LOC="P81" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_B(1) LOC="P80" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_B(0) LOC="P79" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_HSYNC LOC="P87" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VSYNC LOC="P85" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_NTSC LOC="P67" | IOSTANDARD = LVCMOS33; +NET O_PAL LOC="P66" | IOSTANDARD = LVCMOS33; + +# Sound input/output +NET O_AUDIO_L LOC="P8" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; +NET O_AUDIO_R LOC="P9" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; +#NET "ear" LOC="P105" | IOSTANDARD = LVCMOS33; + +# Keyboard and mouse +NET I_PS2_CLK LOC="P98" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ; +NET I_PS2_DATA LOC="P97" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ; +#NET "mouseclk" LOC="P94" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "mousedata" LOC="P95" | IOSTANDARD = LVCMOS33 | PULLUP; + +# SRAM +#NET "sram_addr<0>" LOC="P115" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<1>" LOC="P116" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<2>" LOC="P117" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<3>" LOC="P119" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<4>" LOC="P120" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<5>" LOC="P123" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<6>" LOC="P126" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<7>" LOC="P131" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<8>" LOC="P127" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<9>" LOC="P124" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<10>" LOC="P118" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<11>" LOC="P121" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<12>" LOC="P133" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<13>" LOC="P132" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<14>" LOC="P137" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<15>" LOC="P140" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<16>" LOC="P139" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<17>" LOC="P141" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<18>" LOC="P138" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<19>" LOC="P111" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<20>" LOC="P138" | IOSTANDARD = LVCMOS33; + +#NET "sram_data<0>" LOC="P114" | IOSTANDARD = LVCMOS33; +#NET "sram_data<1>" LOC="P112" | IOSTANDARD = LVCMOS33; +#NET "sram_data<2>" LOC="P111" | IOSTANDARD = LVCMOS33; +#NET "sram_data<3>" LOC="P99" | IOSTANDARD = LVCMOS33; +#NET "sram_data<4>" LOC="P100" | IOSTANDARD = LVCMOS33; +#NET "sram_data<5>" LOC="P101" | IOSTANDARD = LVCMOS33; +#NET "sram_data<6>" LOC="P102" | IOSTANDARD = LVCMOS33; +#NET "sram_data<7>" LOC="P104" | IOSTANDARD = LVCMOS33; + +#NET "sram_we_n" LOC="P134" | IOSTANDARD = LVCMOS33; + +# SPI Flash +#NET "flash_cs_n" LOC="P38" | IOSTANDARD = LVCMOS33; +#NET "flash_clk" LOC="P70" | IOSTANDARD = LVCMOS33; +#NET "flash_mosi" LOC="P64" | IOSTANDARD = LVCMOS33; +#NET "flash_miso" LOC="P65" | IOSTANDARD = LVCMOS33; +#NET "flash_ext1" LOC="P62" | IOSTANDARD = LVCMOS33; +#NET "flash_ext2" LOC="P61" | IOSTANDARD = LVCMOS33; + +# SD/MMC +#NET "sd_cs_n" LOC="P59" | IOSTANDARD = LVCMOS33; +#NET "sd_clk" LOC="P75" | IOSTANDARD = LVCMOS33; +#NET "sd_mosi" LOC="P74" | IOSTANDARD = LVCMOS33; +#NET "sd_miso" LOC="P78" | IOSTANDARD = LVCMOS33; + +# JOYSTICK +#NET "joyup" LOC="P142" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joydown" LOC="P1" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyleft" LOC="P2" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyright" LOC="P5" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyfire" LOC="P143" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyfire2" LOC="P6" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyfire3" LOC="P7" | IOSTANDARD = LVCMOS33 | PULLUP; + + +# Otros +NET I_RESET LOC="P51" | IOSTANDARD = LVCMOS33; +NET I_CLK_REF TNM_NET = clk_ref_grp; +TIMESPEC TS01 = PERIOD : clk_ref_grp : 20.00 : PRIORITY 1; # 50.00 MHz diff --git a/cores/VIC20/source/vic20_zxuno_v4.ucf b/cores/VIC20/source/vic20_zxuno_v4.ucf new file mode 100644 index 0000000..cd34f8c --- /dev/null +++ b/cores/VIC20/source/vic20_zxuno_v4.ucf @@ -0,0 +1,92 @@ +# Clocks & debug +NET I_CLK_REF LOC="P55" | IOSTANDARD = LVCMOS33 | PERIOD=20.0ns; +#NET "testled" LOC="P10" | IOSTANDARD = LVCMOS33; + +# Video output +NET O_VIDEO_R(2) LOC="P81" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_R(1) LOC="P80" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_R(0) LOC="P79" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_G(2) LOC="P84" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_G(1) LOC="P83" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_G(0) LOC="P82" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_B(2) LOC="P93" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_B(1) LOC="P92" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VIDEO_B(0) LOC="P88" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_HSYNC LOC="P87" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_VSYNC LOC="P85" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = FAST ; +NET O_NTSC LOC="P66" | IOSTANDARD = LVCMOS33; +NET O_PAL LOC="P67" | IOSTANDARD = LVCMOS33; + +# Sound input/output +NET O_AUDIO_L LOC="P10" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; +NET O_AUDIO_R LOC="P9" | IOSTANDARD = LVCMOS33 | SLEW = SLOW | DRIVE = 8; +#NET "ear" LOC="P94" | IOSTANDARD = LVCMOS33; + +# Keyboard and mouse +NET I_PS2_CLK LOC="P99" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ; +NET I_PS2_DATA LOC="P98" | IOSTANDARD = LVCMOS33 | DRIVE = 8 | SLEW = SLOW ; +#NET "mouseclk" LOC="P95" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "mousedata" LOC="P97" | IOSTANDARD = LVCMOS33 | PULLUP; + +# SRAM +#NET "sram_addr<0>" LOC="P141" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<1>" LOC="P139" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<2>" LOC="P137" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<3>" LOC="P134" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<4>" LOC="P133" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<5>" LOC="P120" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<6>" LOC="P118" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<7>" LOC="P116" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<8>" LOC="P114" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<9>" LOC="P112" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<10>" LOC="P104" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<11>" LOC="P102" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<12>" LOC="P101" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<13>" LOC="P100" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<14>" LOC="P111" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<15>" LOC="P131" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<16>" LOC="P138" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<17>" LOC="P140" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<18>" LOC="P142" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<19>" LOC="P105" | IOSTANDARD = LVCMOS33; +#NET "sram_addr<20>" LOC="P143" | IOSTANDARD = LVCMOS33; + +#NET "sram_data<0>" LOC="P132" | IOSTANDARD = LVCMOS33; +#NET "sram_data<1>" LOC="P127" | IOSTANDARD = LVCMOS33; +#NET "sram_data<2>" LOC="P124" | IOSTANDARD = LVCMOS33; +#NET "sram_data<3>" LOC="P123" | IOSTANDARD = LVCMOS33; +#NET "sram_data<4>" LOC="P115" | IOSTANDARD = LVCMOS33; +#NET "sram_data<5>" LOC="P117" | IOSTANDARD = LVCMOS33; +#NET "sram_data<6>" LOC="P119" | IOSTANDARD = LVCMOS33; +#NET "sram_data<7>" LOC="P126" | IOSTANDARD = LVCMOS33; + +#NET "sram_we_n" LOC="P121" | IOSTANDARD = LVCMOS33; + +# SPI Flash +#NET "flash_cs_n" LOC="P38" | IOSTANDARD = LVCMOS33; +#NET "flash_clk" LOC="P70" | IOSTANDARD = LVCMOS33; +#NET "flash_mosi" LOC="P64" | IOSTANDARD = LVCMOS33; +#NET "flash_miso" LOC="P65" | IOSTANDARD = LVCMOS33; +#NET "flash_ext1" LOC="P62" | IOSTANDARD = LVCMOS33; +#NET "flash_ext2" LOC="P61" | IOSTANDARD = LVCMOS33; + +# SD/MMC +#NET "sd_cs_n" LOC="P59" | IOSTANDARD = LVCMOS33; +#NET "sd_clk" LOC="P75" | IOSTANDARD = LVCMOS33; +#NET "sd_mosi" LOC="P74" | IOSTANDARD = LVCMOS33; +#NET "sd_miso" LOC="P78" | IOSTANDARD = LVCMOS33; + +# JOYSTICK +#NET "joyup" LOC="P1" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joydown" LOC="P5" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyleft" LOC="P6" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyright" LOC="P7" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyfire" LOC="P2" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyfire2" LOC="P8" | IOSTANDARD = LVCMOS33 | PULLUP; +#NET "joyfire3" LOC="P39" | IOSTANDARD = LVCMOS33 | PULLUP; + + +# Otros +NET I_RESET LOC="P51" | IOSTANDARD = LVCMOS33; +NET I_CLK_REF TNM_NET = clk_ref_grp; +TIMESPEC TS01 = PERIOD : clk_ref_grp : 20.00 : PRIORITY 1; # 50.00 MHz