+
+
+
+接下来将使用 Vivado 2020 或 2022 版本,更高版本应当也适用。您将在命令行调用这些工具,如果您已经将其所在目录添加到系统变量 PATH 中,则可直接在命令行中输入 `vivado` 进行调用,如目录 `E:\Xilinx\Vivado\2020.1\bin\vivado` 。
+若还没有添加,可以使用 E:\Xilinx\Vivado\2020.1\bin\vivado 来代替。
+
+若您使用 2020.1 或较久版本的 Xilinx 工具,在 Windows Powershell 中执行将在额外弹出的窗口中运行 `vivado` 和 `xsct`。您可以在命令前添加 `cmd /c` 以指定其在 cmd 中运行并保留输出至本窗口。
+
+**以下操作均默认在 `vivado/z710v1.3` 目录下打开终端并执行,您可以使用 cd 命令切换目录。**
+
+
+## 1. 生成 Vivado 项目
+
+执行指令
+
+```pwsh
+vivado -mode batch -source ./rv-z710v1.3-20.tcl
+```
+
+这将生成 Vivado 项目,成功后应能看见 `rv-z710v1.3-20\rv-z710v1.3-20.xpr` 文件,注意中途输出有无报错。
+
+## 2. 生成比特流文件
+
+执行指令
+
+```pwsh
+vivado -mode batch -source ./generate_bitstream.tcl
+```
+
+这可能耗费较长时间,成功后,您应看见 `vivado\z710v1.3\rv-z710v1.3-20\rv-z710v1.3-20.runs\impl_1\design_1_wrapper.bit` 文件,或成功的输出信息(可能略有不同):
+
+```text
+...
+Creating bitmap...
+Creating bitstream...
+Writing bitstream ./design_1_wrapper.bit...
+INFO: [Vivado 12-1842] Bitgen Completed Successfully.
+INFO: [Project 1-120] WebTalk data collection is mandatory when using a WebPACK part without a full Vivado license. To see the specific WebTalk data collected for your design, open the usage_statistics_webtalk.html or usage_statistics_webtalk.xml file in the implementation directory.
+INFO: [Common 17-83] Releasing license: Implementation
+128 Infos, 1 Warnings, 0 Critical Warnings and 0 Errors encountered.
+write_bitstream completed successfully
+write_bitstream: Time (s): cpu = 00:00:07 ; elapsed = 00:00:08 . Memory (MB): peak = 2220.910 ; gain = 419.598
+INFO: [Common 17-206] Exiting Vivado at Mon Nov 18 17:22:21 2024...
+[Mon Nov 18 17:22:26 2024] impl_1 finished
+wait_on_run: Time (s): cpu = 00:00:00 ; elapsed = 00:01:05 . Memory (MB): peak = 1074.246 ; gain = 0.000
+INFO: [Common 17-206] Exiting Vivado at Mon Nov 18 17:22:26 2024...
+```
+
+## 3. 烧录至开发板
+
+确认您的开发板已调整跳线为使用 UART3 接口,见 [预先准备](#0-预先准备)。
+
+将您的开发板连接至电脑,包括连接 USB-UART 的 type-C 口线缆 和 JTAG 烧录接口共两个口。若成功连接,您可在设备管理器 - 端口(COM 和 LPT)中看到 `USB Serial Port (COMx)` 端口,其中 `x` 为端口号,后面打开串口时就使用这个 COM 口。
+
+然后执行指令
+
+```pwsh
+vivado -mode batch -source ./program_device.tcl
+```
+
+若烧录成功,您应看见开发板中央的核心小板亮起绿灯,见 [预先准备](#0-预先准备) 图中的序号④。随后打开 PL_SW1 以开启时钟信号。
+
+使用软件打开串口,您可以使用 MobaXTerm、XCom 或 Vitis 等来打开串口,设置 baud rate 为 115200,数据位 8、停止位 1、无校验位,即可收到 CPU 的输出 UART 信息,切换 PL_SW2 以发送 reset 信号重置 CPU 打印。
+
+
+
+## For Maintainers
+
+Zybo Z710 的时钟信号大抵不是 125MHz 而是 100MHz,因而 UART 模块使用的 frequency 参数要细调。
+本板子 Zynq7010 Soc 引了 PL 到 UART3,因此可以直连而不必通过 ARM 核心转发 UART 信号。但有以下需要注意的:
+
+- reset 信号在 Vivado 2020 中不要连接至 button 或使用 Utility Vector Logic 做 NOT 门,否则会导致乱码输出,原因未知,好像可以将 TX 输出连接到一个 ILA debug 模块使输出正常。在 Vivado 2022 中使用则无问题。
+- `say_goodbye.c` 中打印间隔调大,因为时钟信号只有 50MHz
+- 其他引线等资源参考 resources 下的内容
+- 其他可参考 Z710 的 README.md
diff --git a/lab3/vivado/z710v1.3/generate_bitstream.tcl b/lab3/vivado/z710v1.3/generate_bitstream.tcl
new file mode 100644
index 0000000..bc67b1f
--- /dev/null
+++ b/lab3/vivado/z710v1.3/generate_bitstream.tcl
@@ -0,0 +1,63 @@
+# Copyright 2021 Howard Lau
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+# setup variables
+set project_dir "./rv-z710v1.3-20"
+set project_name "rv-z710v1.3-20"
+
+open_project $project_dir/$project_name.xpr
+
+update_module_reference design_1_Top_0_0
+
+while 1 {
+ if { [catch {launch_runs synth_1 -jobs 4 } ] } {
+ regexp {ERROR: \[Common (\d+-\d+)]} $errorInfo -> code
+ if { [string equal $code "12-978"] } {
+ puts "Already generated and up-to-date"
+ break
+ } elseif { [string equal $code "17-69"] } {
+ puts "Out of date, reset runs"
+ reset_runs synth_1
+ continue
+ } else {
+ puts "UNKNOWN ERROR!!! $errorInfo"
+ exit
+ }
+ }
+ break
+}
+
+wait_on_run synth_1
+
+while 1 {
+ if { [catch {launch_runs impl_1 -jobs 4 -to_step write_bitstream } ] } {
+ regexp {ERROR: \[Vivado (\d+-\d+)]} $errorInfo -> code
+ if { [string equal $code "12-978"] } {
+ puts "Already generated and up-to-date"
+ break
+ } elseif { [string equal $code "12-1088"] } {
+ puts "Out of date, reset runs"
+ reset_runs impl_1
+ continue
+ } else {
+ puts "UNKNOWN ERROR!!! $errorInfo"
+ exit
+ }
+ }
+ break
+}
+
+wait_on_run impl_1
+
diff --git a/lab3/vivado/z710v1.3/program_device.tcl b/lab3/vivado/z710v1.3/program_device.tcl
new file mode 100644
index 0000000..e1badd3
--- /dev/null
+++ b/lab3/vivado/z710v1.3/program_device.tcl
@@ -0,0 +1,24 @@
+# Copyright 2021 Howard Lau
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+
+open_hw_manager
+connect_hw_server -allow_non_jtag
+open_hw_target
+current_hw_device [get_hw_devices xc7z010_1]
+refresh_hw_device -update_hw_probes false [lindex [get_hw_devices xc7z010_1] 0]
+set_property PROGRAM.FILE {./rv-z710v1.3-20/rv-z710v1.3-20.runs/impl_1/design_1_wrapper.bit} [get_hw_devices xc7z010_1]
+program_hw_devices [get_hw_devices xc7z010_1]
+refresh_hw_device [lindex [get_hw_devices xc7z010_1] 0]
+close_hw_target
diff --git a/lab3/vivado/z710v1.3/resources/ZYNQ 7010 IO引脚分配总表_V1.1_20240604.xlsx b/lab3/vivado/z710v1.3/resources/ZYNQ 7010 IO引脚分配总表_V1.1_20240604.xlsx
new file mode 100644
index 0000000000000000000000000000000000000000..3a190a8cb7d3ed0a8d26cec74e1c7dacc6600808
GIT binary patch
literal 22042
zcmeFYbCf1elPKKgboaDv+jjS~ZQHhO+qP}nwmofY+WLCl-|o5l?S1b#_y4_hs_LmH
zA}dd1WS}B4LskM91PK5P00IC203Tq<8U4Wv5C8xY3;+NT00Kxu(8k))$l6gy(aqM#
zL5s%K$`UUh1c)pb0O-5@|2zH%b6`+$%(|cMXP3$u@2_skJlNPF-opL;}`b;?R}Zkx<=7gnN_d|xx|v0xGQa> z^GwP@OOizDgKD}VtGSn+WQzw)MHGRjR}MagkJWgR7Y9fo>Ne9L6(f$Q)R2kGy>;^DRrpyV9uC05C`;(ZFOBPvJy^~;fH$Lwt`qi0&Gi%1W-;{Oyr|U-` zsPuv_WTOELgfa^YWzSbZ89=b;G0uoa?w{T-r?DIOC16HSLsp|7c4t6h&|D~uZbijr zImK!)g4;t8aIV1~K5vF2naV01Mm5ms0+Vs+(S^WK1kr92c@!a4^Q=+JI0+UaS@C%? z+7EJ o!A{H*g7}TKC zuZEjECu=K{%WgHv^~gy6wx5;jL4}5QP#8|t?AULG-A8YY4ia{>#&s=SEo}pI8J1_N zDKagg=93sC^^cw{qo2X0XO1+5*z=MQU|M`^osMf?5S(PMG!11JMuVXT-_FNBlGI`v z%;XIiqc<6gXS0&o4K8W2(2%TdYQ!Y2a(n~U5s6DKx9d|d&`und+QUjRou!^ 3 =7VFZ^z+Hvwyw;%NaAZ6?DUxYOL0vtq+s6KUSJj9=TS#~ zZb!{;9G5z6zrGGwzc?8aoruu^eIkt<63{dZ?-Df?RG2Py>w^NMx eywUaSF$?7=0 C~d}9g!37`I!to%p$!9O)D|Emb$UllBYF@53vbVx!^ zz@LJy9tq1qKLiz630jqof%RY4!8TH2pO8L08nBFd4-ai;4p}nZxXLh%VdJP4+kt`( z3{XvLZ#>qid-&_v&Nh)CskvhH7HGQDfu*Iz!$x9Nk)i8? Y^dbVtJ0% z#KPR@#$F;YXDiFit?qQd8)>DRuBi^ZR024-<<&kfqP=jrtP6UkMek+;#n@wYdGbZs zM};o$eD(RyT^_S7ykJ3!ttKb#A0hu82M`CT5c~gcIPkBHH~+~2^Y695U)MqJ0jnNF zoFTH|#5&^mD C4- z?rq4JI!iUM9@YSFW+`BUK_AjJ=1Q+ AVN_!TdQtpfkO%^aX?FD;YRYS$tP9+dE-6||Yj*I%>1Qk4 zNoCa(73HLi6~pWxw|E2yM5Q614vZji>=*ba#NcrJL}acv2Yn5w0lB3;*Gft&=V@2j z+N(~eRqEyEAKOpIUOU%b*GoBT6lRU$v l>T$e^**MGtzp+<4 z)F0!_$91%e{E*CEO8~aaCY(PX=8(uPJZrO=B~TtS%G9bXlK2Dqilx4Bq9tq*lw6w* zqF#KV#(&O0ghE7Vnl|f$zMi6YPwiUS_K8QaPSYfq2ilAo#)m3r*uibC^yh9EtVxUW zCw>bH*MuWTlCz~spuU7fl4y+X0<^?5Uf?0Y()g=#-l`?0a9-;Y*&^i#Q!+zTRe7_L zxw($n(sKDQ!dPDq7acYyM{fDn#$Kp@G6c8D&$Vm`7}}EzSaR+Z6jaV`DRr|> bK rc7z!m{xmVyfg)? i%KKeYhCi-O2y%zqk`_h>^oOYb- zwpFM@g@rI-f~>3>kvm*!YA8`iQxYFaQpikGXvERw0UJMmyqnmwdWD!GoCXNpdGJwz zD!D{s6tt+7H(Ft);A7%e0DGMpt_{n%Nsz{P3pIJGNr*JM!Mc65_BVP7+KF?{G4J;D zFIk7n(cx@o$~BerC@A9B8bx*CD#g`ZC`~8J94-Ak7b$S1F#u1sj^Ndp-V#dFDlG|T zjkb{Hhw)_PS&Ay^E@wpPgsJL-JPKuCMTklwG-Twx`@q8Cjc!8OuiH(d(EV0FrQj;o zRbuo>(Uf2`P@8(iez?b2_|srFyys6oDUicd@Phf&dH?-E!@HWJ+id?SYgNGJ4Lxue zl4xefP5)r*A0Q}7WcmIEPnyiJ?`nrgU_7pVCrL^6++HXz16k+84Yh9fTyrV5O`ngi zFE2iw8m%9iH=pY>-glQ?f4=U2%n`<7Q*^Iozu_f+kat78gH0p(pj=*4v_?KYA#L)% zfwR$rbY+ijD;|iL`T$MK`}hEML&To(20S)E(d2(9fL_;P#jKTmJgHUh>HzM5Nq>AG zKU;zFMm;+GEWWGgwE-^t 0cRNlk^6CChNmm#F@DDk6Yg{jx?EI+TLmC_NVQA!roQv0e#Q*?*aC_ ztdsN(IfOJW!L570Rh@PPtkd)$z`W+zk1=^x+C7K*gtt}e>j9|-a^QMrc;wuL5&DET zK+;Q}Q939mfBv}&AblC*%ZmJxgU*|_#v7&C12y@IYMboWldOwF1Q3n%u@RXwe!&Z} zt#Z@j+f%kX6Hp O3sYn!7J=lix|z19-8k;alE9(F5FCOQBcD%`T1IgB@uUAHAc&7gz)G z-nGlb&D_66Reoblc!vGUcAX6D`HoarLC}#0X14?)hNcra&QGYL#E>N-IemrdwLnd( zVbq?Z%!z^UD(rj!5Ux10=I4&B^z=$)y18+~dZe*Sx>E9<>(s5 XzF?ZV6>G$SITocBuFFTZmd){e|{hi)S(E8 %|oa5 zqg$=; UOX7~T=K(rPvR zGCv{2b(Yo~p&n*We>yrS-W|uo@3qpo^h(+8jLQCG^sH=`;u=DdXsJonlzl3Z3Oj6i z8#ooHy)xSEqJ^e`AB%V~X%P5c)NUk$Di&PddyMn~OP|L`8_0p*7^b~0@UuPr10%q_ zZ9#9|0^D!hH6%Z^r0!&ntv4H{KE(S)usR%(J@37dcm+RMAtgp=N8A3;bqGx75?8!@ zip0+dPTKLn6>uG#>%n&jbkg#UdY$rLLc^`N&mOV@K)*SllJ>lm&*Z}ma9{aQ2ZvmC z$JPLE$J{x^);whTW%_~7^fCzSKD9_ZH~fF?oclji`5(t88MkBylSW#L WD|{nB9Euc2ruw_L`pT(S+C9>}_1r?8Wy5X-p5 Q+VzXRE3zl`a_YEx=Fme7bZ`=U{0TqvRZ>w_@7k0 z#kVo~T8Io6AJbGo;e%8cs;4G5pB_J?$^jGnKEWpnk@dE7g;UtSEidMNp6#nnk>y|N zye2;)kIA*Yp@k)R^sGf~7{>&v<@icBAgb5>F1VNKPQx{(gW~7&*XIxwHG^$qT(N6D zj?}@HY4l@Vk=T1WMJU>j;veH#*hhO6>Tb3OQ(Wfqh7@T{tR|)PSF8zSUumH`r~3?S zrL<(r$jD|q!?=UF m D>I<8zZXDJQ6W<-I4!7=8-|V^BZO!g4@RfPQe> zn?(h(-_1hsGzX&%aQ&Tt{0mNCpTE5)#=ytZ%NL39^l|w7cRUap^L2YaaO!T}B?04- z@Q4865y20cuXS#xis>{aC>gRw3&9>Zj1qauxceh3Pn;;Jf7#YHZmhzj*Bxmrpt+7; z{}V4MI-b%-!ggxHB{b~LCo;zzvCPwm@xXG2gsWhF8Iwc8vz-nz#Z^2H3r~@il(U?D z#OMx1bR;E5o25U>sdB)T*`X6(F_H;*1!QG*-?twb(vr`0L*GOta!b|!pm(bAY$sA# zXh2ADHgVz}nGb?R_#{3otha-WeOCfK)t+@QuG{yL9VKVBGHwv-+ZU4& e1giDE*V; z8?)5j!Cy(jt50T1bz@Tx5BXM)5gYZY`7ABTB4V-H@HPAQT3tANlRbj_gMr#Jl+BbI z@|}Fc){7Hr>>FOMU^*%a3!DMB3R_59sPg?MHO&^y^fQ2}lm^x;*zT&d^YZ#ylt4A^ zJn(lrE&)kCO^cz6rSCi{OgP2+qgI)rjS<8Vj6d;kZp&R9dbU3dDG+-74}n!C>t%PT zRfJ=$=@T}#5y#2()l~-(H&>NzLsqh+D_8kIj1Hsbz~%G{>T9Hp6kV M~B8K{h)h75MQDd++64O+Z39q4wlp|JHUtT#K~*$ysr^J z;u}~Kc-@JGk`a*^ur^=9IhnPyw#)+gIXUWz9cIxPT*Br@Z}{={^@(()FB!ZQ&W7u; zh8-v`<#ai_mI*+>zi}va Bzi;Q z_$E{ZljrS %m v>Hf8<|E_5WBs-}C{agm|IiKoc%enT1DhuU-_$sptDq;!& zNava(KW7V1UyItR *s4soa$Csar@izaE5@%8hFPf> 0@(l@PC)#BqKCj7aP$nFgkt~aL+m)gbPpIz0dHBPQ#6k4OWF2O z!4&Xj13INkXqy7wdH@E1ha~9$bBS#LePj|W1& #IsNA6tC zfAiGAK(HxI2R=RbFF?9Q4F-ZOUOKQ=bsGpWc=t7Y!BFts5FI+9^ AAdvrQxWV$hz0huX(B)n7oz4iX-utt&Tdk+ROO5&GN5}vT1-`JK+b$Ty2$<0= IGyHt?7ef=A(EtDd literal 0 HcmV?d00001 diff --git a/lab3/vivado/z710v1.3/resources/ZYNQ 7010开发板硬件资源.pdf b/lab3/vivado/z710v1.3/resources/ZYNQ 7010开发板硬件资源.pdf new file mode 100644 index 0000000000000000000000000000000000000000..75b2812dcbd232a13287c3846451c83fcc8ea011 GIT binary patch literal 2687524 zcmeFZ3p`YB-!Hs0B&115j-v=AM5K^Wa!N%cr Yi$EQfLoMN*V09f&l^shq}{ zQlXrM8Hb#ik;5=EYxdRudG7o9-~aCS-S_kEcYpTY&mJGEX3Uy3*YBF|^*elj-)n8P zJZP+ QwVR&k?#jT*cf3|@!0g?Kh>R^Pu`_?Qdt7GDvK&^u4o$Q{V5618fj%I`XTDU6SQ zqu3^KiLDBXO53(;YVFqEvscIPppmhOso5dx<2EO3?d%;~&zwEy=I-Hn`HJ6F|A1?O z;WutZL`Fr&BqrTWzL#?UL2Aa+XU|_`X1&aQn_o~^RQ&FJNp($aU4292hmT*swY7J2 zc6Ikq28V`6evFQdPtfLm&Mz!3(U(_#*~JB+{>`kvTlN>bgn(VExVcf>yua+?TIK)C za3OA<&FZT+>_5iq;w!vGBXo_(fjdv~s`%t~Sy4q#UuxywD6dJ`O8aHnAC~=VhK2oq zvh44M{fAvW&{`B1`0`Lf5Ef!tXT&H$oP#q591L(Uz`+0q0~`!+Fu=h82Ll`oa4^8Z z00#pc3~(^O!2kyX91L(Uz`+0q0~`!+Fu=h82Ll`oa4^8Z00#pc3~(^O!2kyX91L(U zz`+0q0~`!+Fu=h82Ll`oa4^8Z00#pc3~(^O!2kyX91L(Uz`+0q0~`!+Fu=h82Ll`o za4^8Z00#pc3~(^O!2kyX91L(Uz`+0q0~`!+Fu=h82Ll`oa4^8Z00#pc3~(^O!2kyX z91L(Uz`+0q0~`!+Fu=jU|A82IPl&G2|AvS%b!ghR3hjQR9c|I R*|SDX1fRKBzcg++yI*aNHzbNX_sQ&Zp0mPa;QH<|8quJW)-Q> zzls v7ti?d(OoViriDQKkfV8Y0dVUHX#G_zXqJ; zr-S}X5l6BcxQvXK%sQG$w9k&hX@z5g--X6)HL}%>E~2v62e`Df@P3`QZD2#xMRa#D z62UTLL) +DZYq)5*+Z78XyfWXW+Vdr zj~{0PGV21>LgyvRFW2hirbj=u&+>{hw0z_ew%$%jb;`if43*Rt1GQ(ohXsPHskrz9 z1VK7!KMnFJWu?5Vx=eUcuhnMBWhC-H`4FWNnfm5rHRdwCh7IvtWJ9zSh>;ybw?!~p zsbWYF(}fL%y@Tnj;CxEorQTWu^Gz#u=ioQX!k8H$*_!irP_Io~!<10QF-nhDaSqNL za4^8Zz<&w@+XZ^x%`^7SypT6q>n%q 8%#4MmnA&DeP%8ZW{(z;yrXbJVm0=VE`K#Q#NeHryNuQ>_O=2SkGWo&=a2 zAax9PXyr6cd2b9>d1@&4Q0ZJVYTx9f4y2S3^Y=q}S8cy+0hJK3;C q zhDxQ}of3v$6ikj_>DxN%wCFg7G`-F>?IVeXNue-~J@onc;b$a^ZZ?Jrq1rMx>XL1v znC}*He1rpzS}*l8EF7auS|9tL#*$Z+|E$6ljaK?Z$=J0b+v#4Pl4cCEoCWwCySCQX zEB1;LM D z)p>`x-@l&E>(-`dnGBu~j4$rkA3>bA38W;}Xc4$tnIX(HO~#$?yxr?TyEWwh$Zx|Q zHdG-%s3s8tSueqbTIhvW;BG=qiG;plhn~s0k%fp&3Rl@s!zUYht^p4oOhT1(km?F% zDrO}%;!EM6KvS&>tJdyu 8NPUuM_WV><%xd!u0noZjo({{TMH=hDLUT_zIj%F3 zsWqtlS + z-h)PcQmNl>JW_2hIlD&o`%X4==Ej)6wz9Je0|iVtRv2tppGa38x>{6x+spR+icj=w zq0JkUO5ujGUIUvONpnT3t1sdY@Z((r5^72^Z)i;$9_)Cf_;n#z-@m9dzvMuo;r53b zZ}zR(lAncI$;u!pW62K&sK<^BbYpodlqQ0hMd?yBp5BG2dzbT=+!umxvmrtJ%a(td zSmBzrnIbsE!f`N@bz=(~`s(hr0sxSP@T;>S#ax;-QY{3JYie@+yosLxqu&A#f7T>1 z*5cUESQYN34I>96n$c`1N%JddN*!iHPkEr=%zv7~`N}BKhp3}fx@?HDnYI+6xux9J zszZg0J**q=)u?9=QZZT9!!jA-A|bj+Y>v1}MWJVKK5t%7 )hHjEy&v~aVApGz&SmV|*wt`elJ#<==Q-SSYhMrn&D@yNAVw0^yxyC@ zJFeqaL!VI(e%8CoB3NFqY6~Ui<(0-$t7PR*Q7>V&l^&xf)GGV;v>;mp49#dJ5rv!l zyajBE9n;Jk*PS?s&5|7!)eBoAyWZ$RCxyrqc3T`zS@fla(G}~(UJVHPm4-ezvsYqY zlkX^zrE!5fwwJ46b2xrzzn;HkgQmugmc}PvO}jMS-nqSBdcO$QR*_={Jm3)ZJ7U#r z_;prG`oIrmWr01;gM&Z(`J~h{?)jh7 F>Eu@_=ITu%y+4JHZU6Ksk!S{NbGV9 P_AhXt2%xlkIixvu;Dsl)*usVLt>eSV)XG@+e3?0R|93;(pTG8x9fko=vh=+KY zrdqdE)QVw0oA_=E)+M*c=-@w>V#H4abQQ6N+E%6*g?J;-yM=KfZ~LS~f&2H|SBDR- zsc9Wq%ZBWDbMdkC-g*a qj@zJtkeBKfEM^-ghpkmu?kr6u&p z4IO>SI1qG>W|H7%+4>>JNvyc&TyuBsUG4}WWXkjLowl&+ExZp$rQ!vHtr@5zG~L0- z>CI%)8h2+M+KJ?h*gL`5uL-YC8cKB4L?+uQhekri8tM-=R-7Pq6X y>dew(G!HAE F!RXrK|^!@uMURCm?Er-Jz;-Bnq z;%DBXD}n{ALvN?1)vrY4WqbJyJ(4?KdcBk->~Q;jvF_Q5FXVFr6{4%F`qnAOu}ZWE zu@zhBtXC7*O$A=%D979Pr!<$Ab7k{S=sP&PTRwB^%t+g#Pj-a+smn7V*bKNka*<4T zWgNGYcb00$=IdGBnSD>~$U33hNYy`g%S~7onG+6;t1_z#M&X*)rDXSy1tu3gdC`B; zV`=g2jyFyYA6w0Z!*4fE?6*Q65X9fXf5cJkRD7zdn`#IWDqCqA@0Fgm5biS8?^`pr zmbP|BrT^I)@`i&qT6iZ%M85=K>CqHIOuA@3P4R|bDR#ZPzpJ`)SEDrFOlHZO=Ixa` z_0}st1xc{-Pi2I^ong#0r_0e$mAjpJXz|Y}v5wQKgI@PvIT<8(SfZrD8%4NQyo_L- z0qOvuK$|6+upS<0V?%==jf-Hio{+{~1%x9=CL0nqz_cC_Wlq91cznyi{0Y7NYzVey zL(xwW$)AfL=w###q8Td$<`D=s(zN}V3tas&!w_z@qw%s>7KlOu-KV)n5{YSu!p=^> zG)*p+NGtA3F;jbVT96GHxz=Kq7O?bGEQN%1_gPVvk!3?95R7YEc;~JEPaL3ECkVG{ zy@o?@JnYdNQGw~Kke_sT5tlV->Dbr(-SoLaT*CGNwL=i=<3B9>5oc0%3}Q0|5yywf zqs&AM2-RKufKV~}O1dA2r0cJPKWwIASs}0B`A15qH~;o#<`^C1>O9xk&`mj7Y+VI6 zcyNSO$O;cy#PwjPiPvQC--G&b-I6}eX$c)6SferGM-m marj4Ov0a^gkWuy z{)@d{Uc86}uKE#NV;gijwvs^2g((|OC)b zUc3!U-3IEV5bR4G<>m8i=tjOH8+!cZ2^$KvKs4cMd$2ZI+$`BpC0JJy5b|t{IFgTS z`0Rs(>qH_vSb8hSE6x>z((4f*&sGtb?x>Zd4AQ-3y15o yMXC(=ns8Gry#z}+PsbpUYT(V}uV_S-bbq_j zf1UGQoUj+sxc#wab7 ?MgcdFpU>|N043h)+c3?KS#z@Yh?}oUd94LEZEw8kGpkp(*74uI z#x2t>4Z&6pVzC8kBH|HoxgIO;BYn~qC9{6a{d{<#=jg8RTPqSB#L=G!UpdHBYOu&R z2dR`LeUpeFvp8X!{) cg~&L7xCf1hQ8aRT-e~sUt1GghW4EW&Fk!A%N>sue4RGu z7Vba#=EcxM!A}Owya}E)zrlg|5X7L5_!a^+g?Y49Uu4{0cfMJmUae5eaIT#BVQ$;P z9K|JkQaAi7Y41P9Q(FtuYc+N=d<{Ii8wkaMimf*9m>BXyzHJR8bch9xL!=!QpDABD3Pm*S7wlOFNUFu@LgjZ zhpR*B6ih^6Q?p_fUOiyyLaH&V?|Hvz@w?Fwjr!esg0DBRsthot$H8z#{&a|@ybj1T zqSpHA=jU{JY*XK|yW+j6;hi?YS~qcNWh;_8iTn b@;73hCDnTUQO}zdW z-dVYp Ct=ww7mb&;zu&~2u7v9KN}?^* z5qN@>--_YYY3E`oQR4o}o}I0ZDVV8 2VKe+ zZ?G9@j`MGH{2`AW`mB&<*?j4$`5Mf@Whf}dOI+3Az zPT2wHuAcg8;}Sx5bXvdG#Urx>7u-M6)U7l;2jnf1Sm$f{Yr#-o8;JDiAsKU&!_UtD!FX zYY NSXH|CUP;U>;XvYn%!~;3PmANZSDc}(g!yhIC+>ol3NF-?=p7tk# z&=<1_(G0+n)k1xO9EZG5tH_xaEgvubtWtYpL*Bvgl&e+M2?vfs@_2Qmoj^SfM`NYc zX08xdJM}SjsVD3=3|KsT&gz-()0_M_3^(m*bT-|(0t#tTU2{(-g}0KVqb3o+F#S3^ z$mls^#d )MrMRDXpvEt9!1jiMTN(S F!YcZx32p6&f11*TRZiI} zg{9NUChw1ZEmtKaPf9W#sm=*BDM#n3l6~cE*Y7oxJ9SCi?$VkC(IwJU0{EcQw9M+# zCMVS3v(9u~YSPaAFB^Lo%!OFf!))l8TK4 ty*zfSo~<|7QX=ttYWxZ#9>A! !y8nwl=7ILk?ZxLMnvWWO)9nlTu=DzM=sGqK zVk{00D(hZzOFtgA=5AS{X_bx0+C(!lq}!?fPr^Ndv|@_Iz!&K9yohESmHMq_ijh*& zqm$+(Ix4FX=5X?=#x9{=QSx0bmOdM*?gq8;I%f=EjGtkcPJTj%lWG%dC*?1olwUTU z0!hLkDLES D|8AZ7Y8hPt$$;wL nDG)`pfQ3a>c3S@GtEQBJRGv8jTpGFYDDQF%Vr?ZdfZ( z-mua;eQ0F#LHX(*^5m=1JP^J!=pa}-l|j7Jprrj7yGcWiH@Di%m!cI`)wIt@>`L%E z!F*5L_70pw32<>_VJIhZw~xL`Eii>QixV3slu(OmH89oDCsI2lTBei=xRxH9{EO$_ zruI+0Tsq-SUy))+tT v%UUI*VvB|QSy zTFE@I?#bN h% zLyl|vU-VeacXB!+U09&>)m-zFsGNa@eKZ;3l21)7BP 28+0~ P5Kr=jCvb#9b^Yfb3HhHD-r$a_1i;`}U7v^&V znE 7PgCvJPq*f@&leCmb<}OWNFNvA7XH8pXOlMyY-F$TUR!Hrc z6F$G??wupr%#D-Cp`{uEgX;(zdcK;pd+h)JVhE3mLHN#b1-U-n5XhDNt7tg!JR!DV z-?6anNr&KG?fpD$7c7Romc27Vu-P%n%f2m4-$CqJjiNZ>M5?)3pO<9!X1Vdgn}Gvi z@P&kg0rc>RuXyEvcpK|lhuqG^TdrMO8*g(>@j$Tg726^08Vp@Uv37P{+4_Lq>K?J! zskV@%jo0THMbaN!DzKHt$}`O&1EBL5hLu(*{#IXx2y~8AzkV=ys;H{>h1^5+=(mBZ zs^U$W3@|5JO E1+;>BQ|=A!mi6cYAMevk)PxTd7VOGnRm)0AVz%|VbFHkg?gRB zmx|rUG;Yx>&AR- B+#VjpJBa4^x#+VfY7m(pj1`dStz=13p2)pjC6r`Bz~C z%2~q_Fr!ZP&E)~W0}TfxAp(L7?AZCi4`s&&rOQy69-C3{z_J`sqk}{)?q3^r-UG9? zuy-tfiRib+J8jM;X}NQFD jho_c zj<(o^9Oc@xs0Gs9zc?MgWw16t7G1|Gr(vrxg0DvVydK-{&J2nP(AMS^%0VBGMxi|> ze_jZ|W)A#Ty5yu<)S?9@J3pL#5s+ls<|DPCXfdVLTn^GOwK;v12Ucw#$K=Cx(G{zi zSE(lPPtOUB^*ppbc|+W-$n`CSxAfqg+K>U}8;_`HZku+;oA13J^LsyqnU35VaWZX` zUE)4o@DD}s3ELRbux$r+@{11(>d18qNEBBM(# y9Sj!y%a^ln*K8^mvnu^YoF2}vD0nbEqw>RwC=yj?ze(oC`u#HP z4k7%?Efq3A!Xk{{F_!NovzDq*J{YVj8Bv({(>yOR;NDrA(>L$BUbHn#Fcxk5&59P@ zm{#ZZ-%K(2s})c{uIM!GucrJDU2Z~uC+i-f7KEjaj7I61Q3q;EWTMZBzV;KC)-in& zwTs*8lksZ%yTPVJ)n5&vt}6pwlSA=&nLPvDK}xi+?!=#4ZG=_)4mMx7OkbVEvEay bX5@7)={i%Y5sc%#14A??S<%Cj$F(E*7Oar+KMN_tmhvp2P{1VoqgSP;j3BKhK6@ zv E!7nUj{H M`!Ll v*<8*hU z`YG4p7%d}~i0#ijhA3U0X~=q|FFIC%OOy2KSh{R-YbK_zqE%MEZi^?9koC8(1Vus9 zw<%8XVy1bXe5UbM7MY3F#_dMW$C}<%TWl{`x1J4s^Fs~$45D0+4Www>jdR`K&ADlM zyK3v? !i(O4>^78lD(zKTP-XyMV#2yq*vg=I_gMPk|QII*% zkPNa)DXiyZ+x4V}1l~QNKX_UxpzC5xyigYWgx5kn;HOAngwzJ%>FnQ1BIV^DAXT~r zYS|z#@HaPbD@O!jLoMb{xXKtiyil zHNkeE> zTuCO9Z05Y*022&Oc2J933cc4^)4%3hXTC{hpKe0kYg3kTcqdHG87PR)E1l|Bd()as zifAw@*s~(;dU>U@QPYyQY;vGDWtw-;$k(6dReO78a#7%k+w!%|>U7&=dfK4>tst*= z^vJr@A7zfSu*Zb;$ dL z^N7wuy!hs~#Xi~DyAUheucURb%RnfGpPAW$-!!K1L*HuFI%GmP2flXZo$5!pZ%YUk z(wAWh(Zgw{&n8q=@OK6s67bd-F9~{E8_9aPYWmnrt!+DLEldW*xD?afC9T%gh`KfH z)SEV<(dRGU`dq^UN4p;dFB88jxy1L2#K_wX8u3Sk^FO`_N#E2D(O*Yb0Y+S>8&Ve? zug{7*PvC?Km8gep-KMTeMjqIFYZhyA=kAi|l4{&jy8wT)w_gi#l!J8-zrCq4eSX?i zsE*t8$uS`l{>Km`4dvVga}Au!ala 8IDk%^gEH*-EC?wvU9t= z*;>>pjlHXh#|$tr*a9qbgYF>cVEAZB`&a8c!-~9merHBu`+!^fro0`WXr^^% +8Fd zy7Bv{F9?I1Y!21w(Wc*p?;CvJD-TmQiq9HgKGkj4HJ%u&b2@6ct%|pUWC6P;(B;;> ze8I{&LEk&LIj5>AVcq0R-bwW0>GzP_3YY9*uBIg1LpHR&LYz*dXh$ow=($p+4Qm2x zPo_B?SRMD^a>#_mx=bmJM6{~`<_PkIL_KbC3%ly`>qj|YIaSwC%j~Q(C%@*OtPd}+ zJy}8vLCsq7@+&VmE}mgkREQvLLN%^WCn61Ku4qC{;I|#NJ4|p}^NU>Cn2}dk+n*q% z#{>y~@Y1|&C}*U3URpjb=Ixuk+(Iqk2AFmgQF t7@|ci6%~L6pC_OMui(!S)aWs=^HY8q#enBs->M3yO2+i8&uA0GfbpPh$ WM0o$h5gkF%k-KGpU<-szGADKGxTo^=ET$)ym%&JAkJpRuxpS#_Hs zUs=?U4}Ayk^u?5KMpW$@v9yevLuE8gYVq13G*2dF?jwTOeKF)`7Uq=vD24}}JlT+K z`-LBETDr^q6B9F(SToJnb&tB1 O|qex?f>|Une)HujHZ0x$p^h~)H@GUD}=k?Q@f$UNPD
{QGeWrdm#_DF>3pnQ-e+#9IKD|bZxrnbM _=?je0aMg|=SE{Bn{V8R LM_{7kS@XJE$CZk!$|I{%W2wSamAr!*A>R)1BU7eS?@=eXj#ir zgk{fgy~K~BnM0BF7NN*)I% LJ6nZz|%qFGT#%Bb%)aAGw3hPDk@{3mHhT zAqe(>qp {PFKy*I}-}W^M9Btw_|EF_tyB{-sF;^=*7=^!iop&(u{s?*2~Ss zEwfA#FLS>@M62qH)ymbpDqfpG>W14vY0%p#nM2)OLbypnGtFq$gB!ys7HfK%{0H|P z9p9X9djF;E 5Ili4YQurW_uOqnh^m&d~d~4Qdprg@O;2y z^yfoLL?TSSkL4;8U>pp>cj{@=cnv|9A>62l+Ft)el-M&`)T`6ykWn$_w25-oH_Z3v z6|yC7<8j;BC8o~M;%QJ4xv`;S7Eq8R0@+pMN&F|={9&*nNZIfl=+{84IMM)hGNC&b zi6$Vn3l@mkQ$*UAp$@n1VnZJhAd>o^$wfyQ;ejHn<~8=5+KK|ajBCd(1I?9R!&Ds` zItbja@=7Kfl5gQ93yLz5Xeo;uS-163Ozn2& kIGB=fD;J2fPBDj z&vWb(t6X%bOS|&!4Nd>4p4-@mD@GoF85W42?! IQODI+LY^3Mz~?qfM@Bg)Ka z;lh1usA^u8|J4 ! z)a1jPajkx^4z@UjnXXtzWUTwlya@$>(zuK8Hi0SZRSWj+Rgdd=KchDsYRR>>OtWC9 zj1;`pA8X%KWP3|`XznpOevJ5)K)-~E$BsRx!(c&WK1HM=hZ0t{;Q_;4xor&f(; 179b&NrD;#)(JC-f6BWC@`Zbx(Gh%mnxOwlmbm6wDq)Pp2 z(0<|mRW1^_S>@Q_FBK|q*E*jcg|mKSLNS5)pc70v*JmaWzdhQnl#{ysRcc+#o3*)m zr@}PWd{ Y1{38$1{1Zu2W-a!0*>?w&>Lvgq{7G=Z *E)pCFM9 zNj^oyCn-3Vumyk-IieGY$69!Qsu{t6>}bXTvBX$v02Y|Mo5Z|O);n~Aknc7%^kh7h zREy>d*kzd4cA+l06t33ho|!Gk)0K-(^9*g`3cWL-!NsH=!?kwS5c!cW17ezlX*C|Y zKczW(s*-2m$hRFY)JOBPjx+|}M>+ZbHm1kuAI>odP+ zPQZczwg;*6of3uBM--AX4bOj7y0Ly!{ZqMpad_(%-WKc|fJWPDn6Xw3i48=eCzrce zA=u%$3Spqdbb;p`JLfI_5T^eUr*n?~JLdq?)ckh^SneMRFt4R15VXSVkS`_mnf|aJ zMS1Cc$%E14h{CH}S5JSsC_j|wNo4B4i{3y{V`vF{LEiwV5Fewf0+p9QOvf^I1F_Q+ zpeCJ}Wkd1DKsY3@(%>;mpeXhC2m6ndP*mp_7H~9?7RYDPypkt|u3HM+%w4z!1ov|T zD q3--pF75s9pu0bXeYLj{!s*qD7&5F{zQ{xI`W2$pAz z*q=bZ!iJ`L+0cQAC!q2xB_Vr3nEj_iog~neibL@HL6Y prCimD|pTe$U!Y+V#+FM^4oV(K#(h^gS8JJ&E0*=lV3jv8KZ!YcjB~?dsKgtqa$r z$Y&N&FBL<$6hrO&RsfU19m%>4Hs**@Cxgz@jPCWho`}w6>aK12T>fCt{Gm*oS|7-i z^s4ltl~D7MM)|?oCV2(7bIg3Webt?BWQX`p*Es>wgsBO>i8uH!SZXHhu1JeW_8JNB zYLHyund{^eoV&C545)E8+6RAn#oI@W%2`ojfo#z24C^`g7bg_p+0T 8s zet9ur!`Ki*(*Aq*)pSwIw*;KVF3F^Cmv>4lFHaDQVR90-K#jQ_+p|qi?&Zm4XBk?x z!o%J)0qMC!ZydsHKe)6@?Ky-W`L$2%Z*5OoQCj9;dJ5H?Vi6PM_v+4~;JSMAr!vzo zJa~m_(M#zEqV{#!dg1P20GZPx+*C|$uKK)v^heT#_qkEc)UYORz7>MTflNl8%skg} z=#bAQPr~{#ms~o*@tw9qecm;dh3|c-_EM#%u8Qlet67!jo)Myd56t3q1kB=BYym#{ z1+MoRva!|om6v0R61BeOjAG~K+ZjTg9+&i|;RCX#POasq&mw$&j6HC54C~>m!be9t z8)>$;nB~q(ft11G?f53X*=qGm=*=%&dMfJvkW8V$K9|4g$wbTkT~CHDg{v-Nhtq>p zL6(&}ibThgwz&Ty9#KpA2;Wm67^^X6@)dvcOC#ylBf@s`tiz4ni4#&nK9_>cw @x{6ldJeFmMJM{?6MD6re911to5>R(xoE1pd*fQjx~XS7Vv(<0EvZOs zfz!E$T8DiRxi6edf?o_&Nw?>=sk~Q+Zqv|7C%*(cwpLC5+1=w^!5B%yW^}MlT_gdA zCn|`4*!e@7DJFm%B;3R-3Xy;{mMy%)H^JL5tv-KMjDb8Q90qyHhF=1I%#ZfjKkEze zpw6f|iuJjM@QxFy4V7ZmSm}uqj6#*8yvy^k{+R7AbSz}|@@A__=4^)e7@)CIbrh`N zu-umcC`!=c3Ms*|K&&V4n9A$;K5+v*^F7FHpW#yRdMlC?kZY8?HOR i yHsb?K|AOHmG%hUQu0 zx0}@V)g*sMzmo-76~+iCB`$-{*9+Q4>wDFSLlf2Xr6)J-xE(FCSZzG-KJ24@>3R J>d>C>POgeneQ2Isb>BAjj!HC(;-9=o>Qp&y$T~i@i_9CX6 zxR^r&ZnJQ3xI+( IJf5p4$^W5 z;}5iS?N1M9eBI6EUvIafWFw Ef8cP3Lv!+;M+eY@9dA z-6E5)+3qLUz(Q j*oS|5MYzoMn-8->aPl-WJ zDugXna-ZZE$MpBhhxLmHHHdhM9y6%4eRYB2i>Z6W2g@UFb>q=9laZ8X4)%0O^@ZPy1Gtn>YV>@d?8q-rdGnKBQ4wB zal*l`?VMz+ZsR?>a|d?Xw1%!-Gi40eFV_r`If?vufO^=J$(1<)Z$Q>}n<6ry4nwxo z+H3xK27K41e H z(qUykVT(aA%>x}e$Y$3mFBN ?3 z-6`|P2(Yek7XG>r``O} LCU5zsGDqpr02w;04E-&9 zfQ7m-fC#1S#g6pW6y53ZUNH{`{dZC_ki$_O)t2}8aKl}%2rIU}xJUC`IfFi8UKN^c zgk!XIg;`!D;jGE>qZ8)Q7VY1YRyu3|^YI7!(Z*X%T2{~pjlehi2uRc+1UI=7@~c9Y zZ>YvB^5z5A!)G9E^d~d^sHN~A%p4~9loDf8k*8E*rT;WK^h)<9o%AOc04uiXonhFM zNXIKKm1DyfhIxo@fYmQag?9;DcywlXnQo9b(|c&maH#yvysgPm%jfP3E!pRfJXyNR zyA2odM;r@gtVSwzI;WjLt9Fv;`y@!~P1@NnPd3%|+z6L^T-?}zsoTu0dXY;HLO)=l zs7-YPqFM=41l|BI8`|!tAr1rP1=qSofLy_w*OT#(e?`m$d}mJhuO)S<-xDIkK1=&= z@AulM{(e#E-1p4x5MrNN1kBIeO7*F}S|LGo4tJwWZycEEwSS?#8&aLZyIl@VIc>M3 z)ed6SBbwwQplqqx^ V+yCbN85JnE>|mT58`j{(WE6`^#j*o`vo7TFD~D z!rskvg{2!{kN7l5m1-;27Zp&8YYR`@bvhWP>ur +j@_ z=NA_CC4Zbw+$J)I&YD?64qGEH)nNoQP;lPBw9ONwgTR-|JmMnZu`=>h;E0zg`d!aS z*S*d^v@sg$)3>jkAo>wUT^BK|EH(Hn9PfaOlJRh??g@1i#DCT}c< Ls+mhr(&s1i>{>|ukjf7PKo0^)ke~k^cAm1lj5iE|J*dh)0>%l zUF(m{82EkQA{R)*#Gt)krHc%#SbF`uKr+LUi*a+d6@VD+;`d=GX)PB6s>F60T-lW& z&fM@TZz`q^)#`7i`({k^^gnt2s?)YuC@;~izs9%5uTq4I9%=*|VW^dGelu$W45+gK zP~;9~0oDn{N{7di=rF >P1K @SB9` CcWoopDo-0?p)vb@8@k)+Bb8T;t# zX6q_;wU_ zre9B-s3BK0opgCgcw2MXFAa$Yg+=YSK(zUXbO31TYBoZ^os52pI$n)+Soqo*!RwHOeL1S z GMSNg0@u zq@pP|+%*#-bfnuR*^rt;o1#?;wqNif4kR}IqSGr!qchz%dU-tWau_el`6^&~LLOse z3G{EOyT(%EUb*~uQxd(V(PQ&jAjCNYws{Zfc~Kn!DPMczPLK^b0UZ$4xU>1?`0X!j z$nw*(@R@b)sO6Xp(nWnuxJnig4BB6q4)bb(y(*7f-Zm~;74|)FWzn~uAL^Fo!MozW z4ZO*$!*rh;bR@0!@XDdve&Rz%UwQb!{nEvZV{t8cWS2_rhss(|5Dn*zuOU&be1wrN z#U1)0v{y@bCAw$bX}i9%rrfQ87m5|{-SUrm=$qVgNpjF3XuY|g=EWMxBbv8_ l%1_G5 z!jI;s&rBQ->sixdfA%)zn8=yDeIZb4Y6Zw8!tMuw 49i8*TZQ!9Uq_5-K z74b7_#UTIkB;bM!L5`zrL8}>xj4Sg~KV8z1xnprsvETgSRf9-Y*F7+!A)Sv}ozOKz zp8g {7| z*iFh*3k8EQDg&Q&8Uc>_S!)Zg_n(_>|MB?4i})UKg;b*$rMA+>VICWld}1J^gdz{n zm1i3$)B& 3OW8UE+WAqD(7&(csVm`c_LTwIbOlG6zL@t$P)^Rr$q;G zqBXnp!@-EojpY?xEIPJ9C}iK-8)eU~Y6$g|Z3&StDoULjRK6aNer?28%Gdb$gRX}> z5ZKw1vw{W9($x(N9pnpwrdk`n%y#UFeRQmoH+YIvmUd?;EdM+&Bdc(ED_}35u^z#c zOZZkxdZu;Z&oXUtNb1Aqo!hpK%R4kItj$$p<)O;) d!?YwVZZvf=j3}ATW{6k3;c~-Vs;keu O#1HajxcW)Q z>k8!nfup_T;6p(ZCEjm?N{%!Y57=O?@@=AZZ<;1+gf5Tb+P;)O@#t4-^_dTL{wQs3 zP70lV{c6Ti@AAP3n>%+GxHl;O%mnvfFvjtX6C||CU2A)oshKrd7s{qFH62sqzB|sW zo|}0=zIosfGxBoCrni@#0kvUQ!lE0!ik3EbE@==G@xn*Y=t;kP^N_%8tB%i|iP^r4 zQCV{B`^NM7qS3^$-5*rt@ }nDe^hqSCKsf2v!@%@HiyFN6*C5Hq zU1O;m)4ZOJEviR(zdG+?_v9w8k&PuJn)#=;j_pW2$c}i*kh+cqK`bIddbDUBt-@@k zA1a#Zsk@wzC*>x+%K(!#Z##lxVs()$0^$U->P-Ih*Z`BA{F@H20uV5fqj0-0AR~!v z=v~gwro~%y@J9j05H6-d7TiAsKE;MEoCM@q_kah( egoKaG~?e z2COy(=QNI^ni0BdEE;b*qUr}pkw^DwV% zxIX*OTXLW1c+*||rng3FJyAf)Q`Dq||K6`; 7Ydh0ues?H{Izo1HaMQFoECZW>86afb;JqlMxff(Vjb)JL?}#|LQ#hn zUltH7ON(U0Y3~jj4m$1L{9`YQzgUQ>=={j^6vP!m4#983e}wb#?-^D>u3v-1pGB)o z-DhRmv?X6E+U;rbU^BqU@b>trk9)-BR+OmdP)&;neSy}pZIseY^L=R3B6CM`cMxzz z{1i)t@9ntu-`IQia47foeRxDoNlmgR#;z1eL}WLqRY; 0zv5Vxx~SZVuDsrXuFu>{P0@=ziMI{J^raK^fy-Uo-$gE9yZEa(D8TF#%s=<< zsu_kK^S%EOGQ9?0+#IbbM{Yl5$WyPry*XPjalsF(^lewbvuH!9w~{A1$JLmlXOqyC z_+qyv10;yMJ0YpMU~<;lW4q&+Y_ieYz$d&Dty_t{s>(fKRJJU#ujQI1d{czw@i0 z_m51HNGDTLbg#EI4<#CnALo->MAG)g%|XP`0V4}aZxMy(go{_bx>hBBN@>%ApPlpj zOYd)y%N6%05QE+6#9QYS$sQO6RC`!kz`|dd8RsvhslWw{l9ZeYNhfN9e9rX|q{ ^OnE^>2SX0XE$w4* zd!}zWt2<9T_Y|=&NfO*$FTVD|eMWud7)QtmXyy+_mxeQVa+}bFZ9VJM#2Xa1`d88o zzLn=OtY#U`R6V>`QjqwX;P^r!KVAn ZFN!L>L zh$W&vwhvu1kIBQn-y10tNlNC|8{)IQ7GFcw5pC2C hDm#9u(2Avi_P-Q|w z(|PiNM!pn?x}ARoffxX=4DM!}6GPIFV@M92LxVW(naKq^cwW_O+hDD)X&dKJh4uvv zw63+5)pCdkbV>4LxSQ&uY?`i7$Qk2oS^KN@kE%017GT#W(0s;Q%0hwvseW%Bw!W-9 zG&WB HnLxybFf>RpcZ?~>$eVM!W_(k!Jy%Wi zZ?E|XwB9z5E#kGt%;aH?LABr_+b28WTs{&I3jzLit*HD z(b?5=f4U9);X1%6r+S65FJbJl_f)TnrM&Dmk?Z;ax8ie;9tpg3{|S4e&A;}m!aVMp zANX5`+27h)VICfgT*ANUYxQ8%0u>ujyp66&Tf+gmBl?HpZ9hYb_L5iug^F#DLJLeQ z8i+;O=EuFN5xR6dFnIed2lg-1`6ev>c97~%-v;$HYX`W_q-hX1{%Vi|o0(nfWLDz8 zQnZ0y%hT =)9`DL6M>4{Sf56shpr$&(cP4)tS`zO50h=YEm|H;` ziRwSgmwTZc>6>9UXsHcp=n#LcSI*_bE9y5AvIeWZ3{TX%#0n;WYI+4G%mVbSOZz~s zG3dKdw)PGb%Bz&m4lC@qyLOK2Xw9;ef{ye(S2v^N+b1~JLCZ@J-Mf(zXO=o<9_YcY z5PWy={>(sf1tYEGqZs#AddKPdW77-lJNYiLd^)zog){VXy^Su0n09 w!wtcM^_?^P->C1+w(b7hy_xG< z#aF9|NZBbhc2p|*V+UOXmld4yr5UK-wp&2~7&ZHBk&mdAc64L3aBP zk8YbYofW)ENDWVv>{kK4Md2o#-57J W`nSqjps$AXpg$dz<{VDHxLNnsv%Y{K z^A%+FH|l_4Xh}?RrDuv~=fT64bwRt;dSI_#tHEF}_O8m4)Wgh&D~tW+#Msm^hXxZ` z@RY#71j7d9P+=$XK#Y>XCeVN9egV$wcW@5B4MgqN=%P5r0n~sb;EJtqNn>#$K4~wj z8|zMaZl#-|R|gMb^#euaR YcDKmc8`v q4 zW0>?}_-0ZylyQ6#Roy2``4q;^7RDJV@g37@-4C~5CjJRNa>WUF=bk02hI+(tJFCjs zXF48D9JLx!)gys6Qp|C}vI%97)SC_dvl> 62`S)d@E>>Fdjn= zSW;s;?rIF$sD>#QG4t{gl|V-b*9mAg_d%SfXA$?R^VAt8NY;bRS)Y;QOvv63;&w`@ zHj2`8nE=0yfZ)qQ^j}Ajw>Tnh-4I{NKoljP*l)&Wb{fVGyU_W&g%;)pNPzy-SiSsR zW99sPkhL9zZ0Y4OFJ`C$YUQlQ8qaZ2Y%LTnMFJL8+q`AydJa2 ;i2|HYpZx{34zsWkxE6) z? (F$zlZ=6?g-Rak4iLQ5 zX#lCcx*vLMUe)oFJl}|d5dbPF&U#8e$UyY^Uvr-@dh *y?jEZ?UQT~B$T3>3AbDz8RlIbcgW*YYD%}rMijX^&R4IkHq1?fxI z%7V7HNEOt*&iR_C2ivKyvI7Iar&=k {J+6ywW$)ARTpT75+|5JXQyGpW70&p^jl0yxUpZ z#&R&NtKHt+wUO?x{T0g}$iesNulNX#**y5}5UHk*xXt%|pq(NLU0_L)7ao!3;l`aR zxq>QMQpNzEocoDS62nfzbHoYDqx3tNkE>8&YSZBSPL4G6HYYz^@%EN&*QsBZc~pHQ zWgHhyH;sb^pme!!MturYTop69TIDi&c<78j&zr)_&eZ6{>ho#_f%wsgf@`s7Qqd$_ z+BEQKjrzPadZ8$Iq04*0#Z~I^^)!C2L@BP^1ABJqaB$C>nAePw_1p&37>2aH9^^&y z3Z+@rb~(|qhy6Zx`?oC>q*q&RiHqH|cCsp9`4^1xR|)n-FVO# Dir2FOUGb(FM=jQT&-nvo3_JX)A}S`bW8u+Gx|Z3R|?Z} zcU|=hZjJJmLAHN>mUCr>Ku|3!+dVvT HwpMP6I(!Lj+@Z5x|?msj-e@qnC9N7V5yABiDhrbJ=$0Jn1JLVIX z0O-TKOmarbk&sammk;eWTU(hu5*9m{Zq|;FF?#HT{qBPT;ucWF*y3qc5MO(P!mj?c zYA&+>thB!Dgo4K|_EX66rmYE8jJG;m&eWwpt0qlz>Id2)a&CgI;a$ vu^ 5FSif3 z`5oSU7LniOU%+a0J}yT1M`p}!8)Fxf(4&61UXCjmVS^5W$QKa(`luV|*b9cw1_H1( zBQgl+#cM=je~?%}&JS4r&5!2H$X&N}aHCFZ1}si{@(G3e;8Mp$z6={}>t!6oljAR` z-!GLgnaX~(V_RzM+^cWLk%7rLB4E>JFdUQ{F(gBN;(*h-A@KG{!jTO`!cVRRHQE9h zYj<2NDk{ybY4Kh)AEh@b$S(hquE#_OcHarbgTJk326fP1<&WT1@x*APAR ;Kz^x(&<>0$ddN0y-G8 z9r*I=A-8)YPP6Jd@CEa()h*Ol`6%DX<89UUo>LCvYNTp&+&dHzsEn4p;jG44B$LyE zh6&{Sn`M~!GANY6S_X 9V=WT4+*8+{51ScFPG=m6Uljh%>&rbF<`=mzdA16}{bRe2?0sn!E!5 zSNULaNhvzbF^- 5SC=q?IQyU}t}Szhdmi_6tL@h@@}S^KUV z91$~6lu1HA#gk7#K@`Vo1jVb-Z`N&P{v0%?rKGzjuh`Gp6Kx;=oOxAc-Q~|M37H0w zFCqH16?nYQA!Drf6tZ9H{37pvJRYaYZyOp#4Epl?I&XS~pe;$A5rUfm12lxX{T;`i zTGp>O7LI&V&&w=T^<3<_WP2hud*;n4=*Xy0weX0)D6N1r$}zg&9JAddy+N;ji>a>U zG40sLm;4TA>{P *Nl25aKqAX#{4If~KW@GZRa|82p=PFZAa2UN;lzp-{^ zU>2B}5`up0v91qN5>VDBR*|PzH73wE9b8*EX#bR927-|(7=VBE2|+8WxT)*-=TIM< zb(S!OVg{uGcVl1J`j%gQ?M@V_tPZu+-<9k#6 1Y+!ak<-?>%=-P{$yQE{9+eGd^ zQHs~i!)#{_p$k6a=#u_tEjK5+nAE0~uB{kaoLYOtww95~E_T!B%6Qo3OE!DW*9CDf zW_dM-C8h%^LPZzzI2FxaJldA)uo(ALLHx8Gr=Ob@1?jj02C4UeMT{XpwMdM%Aq7c1 z_mU`oac; VX#D_ zmqzHPV1KxT81P| `rj??4Cg83?N*o4CY%L z #j(D_((n1jrG|KD8e z^)tM;)Lj#MiBq?&;Nsa_j>R9~ux0je@V5-)wPBi|!X_O3lK=HW@|Uv5j$?ybWxkU+ z(TycJC=Y$GP8m7JrsRY9a@Ti}5rHd+Ffl||rTkcc(hj6f*VrzL{=xgQ`)BlLTJ@z1 zTCM|D!GZlLkUDP%J?Hq4aq?)8@_uDMh2;EwNUg@9K%3SylVy$DzT_jJFn8 `g;XullOTh&)d{O;&d4o0acJ}LYzWW9mhf-b3Av`w5Lt)H^}9Frb|3SD`e zNsk^_Kc&^qD1>LM(Vrn--Hm!?3j0gj`=6-YMt^8<*M{`tUJ_|Fw0h5gQF(X$#VzX; zUO=aQ`OKM%FbkEs2E58*Fm*E)F{N?Y!|0LLlwQvQ<>fYsx@O_v*5*E#A#?;QR(;?K z! {>)WsnEAz37T*4YNY1`1 zPD`#xg@>j(Ti3%Ms)4|Z`9g`ofcErSJ{BKT2fDVJ#I)XryR=7?s1%gm*z?%g45frU zd9VwBR#(C^GPv+Gd0_N2Zxmj=i5B9r)2_>HqU+GG?!E)vt@q0cL7PKm$=VKd=hXa5 zauG{FX0D7PQqNsKHPZ63#m6?#E~f20Ps59jq6UHKCj1k1*dhzYFnv$kOUbTHKUS*n zl*c4&(l+i*y#38iphg+DN7MMAv+9^ )$LpZ4h8vylDx5 z_&xOUC-J-4YO(nTY)t{V8#QOwg9p4XF^8R6#M)W}*xFo@5q*y %1@ z$l L2EIX+jkQ=hK>jI(d;Tid$|?~I%;)5-`iU#6iKGHb3mQSU})c#S{C0L zJJ@aUQ2nANNW6aQZa~sR;5744%m9jPx&ui~qY3#Dcd*x~XNP~qSCysBOj0M0agRkZ z+5#1hDIK(DZE{{7_ 47ZYkWWF=3H)ZclUwZJUFG7J{_q( zu6bYL)D-=vw*0?8jPw87e$fBvPYP(GYx~<40e*TX?G9-tHmg1J^6dFf(w<)DaMIWI zdB2ydZMlza!api!g+jz9ifiZsR9)>4*tsKRQyz+}Vz!m18`^m2ko7TuFbp;zsk=ZD z*O`azalss+C9$@CqTnu3_+LSYC{2#H!&V0B2h&2QufCZGR4bYdIgWg~Vm=B2*@O`Q zDOQv>bg{KDt3O~8oq#bm-SCq-X#}7PhTtf)BntCqI~B0(1qyXEt=q;~rL8%-TCCoU zQ#ny@J%-GgVVlGX2j&Otg`wBkx4_14eMVHl_VSwdB8#vL9vhO|{4w(9(PnLag1^kQ z%(go!uj_M%hjrB)J_{zt4im(%Kz4{d1tcE-=Btr^Kf(@p^Jvi`BNZ1mN>%!XUpEtl z49#eCas_MaDkZfR#iJ=jl3V2Q=C_oWGB4_pi5+2m&vYO?lD?WT0J{{b*21pUhyfb6 zWf%H2sD;1)dqqK+DY(U7$$gL`0IvsyHT55``zY$s8SJ{*UZ2gt%Mz*;gTA&CSWVj( znOkJ(!PQ6*VKl)$hQ%@O3yiLFnXPXA6ZrYng#O?Eec5^+ Z`WeK1B>AF35Spu@ci?EY-#F7ui9?+OIXzb4`Yy?ddr=JRwTASq zm=OZDR5iNNFB|Rc)Lz%&&|xw3t+!*Sq@nBdyzEE2_)s{ S!%0h=pKcHQDXP5StzKvm62B zpq#izdG$g(yWx@XL-RpN9RPra!8Z9LXi{TF{flFt9})5JOWWlSwRvgcLR5Mhb}YB{ ztvxMhncjFGd-czPs@j2Bfp=!AQjKT^T3_CDw2xO^6C2g(9^4VB81_B^ntI{`XJ!pl zwZM?upxWywM;gOs+)$NB4f2|FOc#x}o^|8#FGMSm)VyaWq;^9C@gX10Cx bafsl@0pctp~eQOx(vA+^43 zwJr+A?~}G=Ss$Aa#8z-+znaD^-xB(;CNi!%*F6rh2w&7a6_k(zF8i|g3nQx&P3QEk zEL}?qDzv+B-*|~Vc8&cLu&4n;6lGDwCn)j-hnw?v+e1+TD(AV}LrXg
+EwdIv2jtTYnPs3>>xro~4QoUNMG) zmPoCTpJo7fWAHh9!Hz7FgF_MD;ENvcC$%7=R74&n2qp4$=0EsQb1UN^S;@PFgop3X z*ntzFRT$HP#^t>l){E0!v)_yw P(=4FNNNR~D=N=|3=<0}&HJ))hk_R`IfJ z^kO2eZnzM*0T%*&5Fj>;PQu?}fd7Ch7)2$$;XmL3S}|c8y_kI{U_v1B9l_WQ JUykHD1XeGe>H{<-gH}kTA)$rfW2ef88^&cM|^2BA M?v8p^6ZU8G)AU(fs&1xau;% zRPMfB03uI`JQS;13V3LQUihm@16Vs7cK)nsl^kD`g-#^*?tgLN^TMsyuoh`5FKnHW z`FkkV6Yp{HaJz@)R8cs(P1Ry{WM5IzgvVE{yrP{MD?V(sLS`SNdu15BM_8OUS&CLh zW2tpJ^j~xcs+1OxqHolrcgAck@(j;$ge!F3dV-&Hf$?5k4f5YiQi!bHUqqe?z3bfO zcct>6ctOGa7OD9Qt?qrGe})Xhf&2tCHGy%9Nwg3aQ)Z*7Nz7o(EpkMWtn#L}T7+`r z{TSU5+m<4#a3QT 8=DfxA4E}* a+t &qW7YgaPn9Flz0OVFL%jCu3gW(68gr>OmFK;!{Ap4ix7hc zN7XRuw;4NDL2x0tMQBT!zWb6XXyYg-6x(Upsbs)id)r6Cv;*FIcLU*a1b4X`{_8{k zBLFgPY-dIAt-;Ya;N7~owhze#_8-MN;Not^==_f>(XSNO|NQ;4Q~F;!r~mfc{62u6 zi^G!W@(jLSO?zl!$mtS&UqW_;&3tM;A|<`z^!5T#K9M~{V|W9eY~DVwOqVePc8>g2 zjq@a350Y~PddvQE!g6P0Lum=kt0#7ze2Z)G?WK4{tGJ2MUYJq%EByAocr%l#WNkHk z7UO8=d9ZE1Wm-*ivn?nVUn9wS$bLkt7j1&{SRvW}lM$C?Yn9Ofl}W8?ha}d(o?BVf z;>=jo4J#w+D_Z|c?{h;2ZqMqYhuw_tL(L^=Z-+yetJ0G6Quk05=5Cr>eYyQTO;pyj zulxfGSD>P6c67Agw83i1O2!=rQnHu-Aj~!hbU3k{!MC024g`lhbY1J2bvs zm$}kIyXAsMzZu76-rvJkb2;7<7w5db6YT$C7~pf$Ia-7%17aDx1Lb1)Q=8L$@4eDg zG>Br=wst)`AD8lU;jzN7KC)Z1hY^fccA9c1`j(4IfaH?gtbX$bPiC^91Q(rMH>ZhG zY|hfA$Z>Vm8eNA=eJ7%>JUr=o*kIM}9@aF$3Q?ZMvX%R8&e~c+KW^)tOQgQK)2+U6 zzYw{4VNwE1w-X0og`rU%4D)IuZv8$g-q77$R>zG~NIK;-XHJG~flLN_l>vGK9x}tA zkRj+Im4(pkp*3v@N>OQ?Tfy6J&Sk2%12hYzs7GD_e71d1V7zCvIDCEw2`>~WTKq_c zE|wtj)yGrO?iz9B;1LPrNJ4I74siVmVcr7@RdXhQ?i}z4@7pt5QtMOXnYnqT+UUaH zY96+LNnNoQQ0OP=Uzps@!Y74wg%7%CaK3&4V*{6+_jiFSf@Xp$8p0g>;^L3x@gDuu zV>|NB`{r?!T^x(!4an#QjS<7RQine>H1=iHU!*5)sFgG3Uk(4_1N0A#iUa#I+MQR> zb;b#D^|PmV+b{C=?OFZF_?M6Yik~Goy+IUt$JGimtZyXc^;czP!Yq`0^aW52v3!K# zQ_$hg51o4X;m!v>NEP5_?&w!rnHUsR8CAG*o>iRwi1-frR#Zu4^;Y)8#fCU;Z@GqD zYwFdJ-qa+}YZkKf;r&ehODm&WHG~7`H%Rhjw|?w=8YYf{`>ljIk4w#@1)i?5k>Mxo zSh;>(ddaInos)shKy-pUS#=& 2CZwhYkQF9OeabR50f zby%B%>-S}uzj4dITQTeR>Dbqjin4?oVcwT=n`U$_UO2|FYpYZj9#j#1cc^J)%vai* zzKKbtU22Y;bI*1zZ3!xz=e=>fD)E%0PM@pX=kDW3oj+Ow&Hv_1MEKVB)58dK=>2YD z1Y{b(#0ZAb+W;P!{H$6$NU^p-bDI&%POIf)qdrxjjU7{920mlCSg-z0^?A3?hf-ca z_CUGQ+%%#TdyPNa&9-;IUh{EFT=F*d>fWngArIlIH2k5BesEsRr^vDP`U;=-@6rN% zsp9T|AuVOv#8d!lRfA|~tS@CKrBS3&Fx1*Coz# 6f0nU8ygC8{rD QHF0md5EW7pb>hD|Bxln7byZcP-|` z^ZhHFFoxXnN!C^@*;NC@ n#|a2RjNgzZVoL> z@9~4O9S`MWQPrO&56_m^%uV7?Rv+>|*U92y9HGd>d|%V7k~>-G_uh1u@QE$ERoW>U z$){GYq1(b6-6Ad8n-n5gl3-lbzU7htSIWXvt%ixrM9iJe^CzCie#|h29{`QDqinNi zUVryzG=uuytX0ci*YTo~@Qg!KLN@)!TjcvT`I&2>UyqVcL;WxPtL(?E%N$ep8Oqd; zTwf7A E4~wk zJNXkL+Q6d=G~G!Nn%qR(F7Mb` E?HJ|@DxNmfq!Aa08+bPS(>N^HV%w;{Owh> z7D9)vX^-@Dj!boiMt6Ng5zXjF{-n+~pY*Zc`OHx(uhl@Sc)HVoH$-*@IL$3=RZ-z( zV>B|HXnv}7ZqXx0$hNgb&t_JSZf*NA9(&ppda?f^!#NsP2odwN;b=Ik-(q4$CRHG! z_>;VqDHqq;jo~;FwH1>|XzF33A{o2mNSA2=^lJ|MN}neBz0*HWoq8-2)B4=u-FKxE zQK(TB`X_X&d99l;G8`$W$xX^*SxlD?r)SKwT1{TO)o$2?5@tPR<6?u0cWnBX<;F&H z10*!4$dYPMRE0}G!F_>H|9utC;778IKxx`n1(2a<251Bb7yr&B2Kwm|Q~!%gjNz}j z4F<3^wQkybAE`iLqljmz+qndUzYn2DMn-;vlb05t#n;TMxEcUB$fm~N#||@#{n4BB zCoQK_sJ^DUT1RUN)fmz#IyB(IymH<;oUTq2!tC?+rTL9H^0bzHDVdeK+;oJV^2ooN zwr?D~Yej&*k8v2e1)xHU;TZ12(SEr*Bn2w(b6uY~KXnEAdRZC=ytV!$sN^WRK(a+{ z@HV0*c4=C