From 7dd9f4e712959619de9b6a332fb867e7f1baeec2 Mon Sep 17 00:00:00 2001 From: yuchengen Date: Thu, 28 May 2026 13:11:33 +0800 Subject: [PATCH 1/3] feat: add TensorRT-LLM 1.2.0 container image for OC9 --- frameworks/tensorrt-llm/1.2.0/Dockerfile | 43 ++++++++ frameworks/tensorrt-llm/1.2.0/README.md | 93 ++++++++++++++++++ frameworks/tensorrt-llm/1.2.0/build.conf | 4 + frameworks/tensorrt-llm/1.2.0/test.sh | 40 ++++++++ frameworks/tensorrt-llm/1.2.0/test_result.png | Bin 0 -> 40914 bytes 5 files changed, 180 insertions(+) create mode 100644 frameworks/tensorrt-llm/1.2.0/Dockerfile create mode 100644 frameworks/tensorrt-llm/1.2.0/README.md create mode 100644 frameworks/tensorrt-llm/1.2.0/build.conf create mode 100644 frameworks/tensorrt-llm/1.2.0/test.sh create mode 100644 frameworks/tensorrt-llm/1.2.0/test_result.png diff --git a/frameworks/tensorrt-llm/1.2.0/Dockerfile b/frameworks/tensorrt-llm/1.2.0/Dockerfile new file mode 100644 index 00000000..5c880465 --- /dev/null +++ b/frameworks/tensorrt-llm/1.2.0/Dockerfile @@ -0,0 +1,43 @@ +FROM opencloudos/opencloudos9-minimal:latest + +LABEL maintainer="stronking 363133710@qq.com" +LABEL org.opencontainers.image.source="https://gitee.com/OpenCloudOS/ai-agent-container" +LABEL org.opencontainers.image.description="TensorRT-LLM on OpenCloudOS 9 with Python 3.12, CUDA 13.0" +ENV NVIDIA_VISIBLE_DEVICES=all +ARG TENSORRTLLM_VERSION=1.2.0 +RUN dnf install -y epol-release \ + && dnf makecache \ + && dnf upgrade -y \ + && dnf clean all + +RUN dnf install -y \ + cuda-toolkit-13-0 \ + cuda-devel-13-0 \ + libcudnn9-cuda-13 \ + libcudnn9-devel-cuda-13 \ + libcudnn9-headers-cuda-13 \ + libcudnn9-static-cuda-13 \ + libnccl-cuda-13-0 \ + libnccl-devel-cuda-13-0 \ + libnccl-static-cuda-13-0 \ + nccl-cuda-13-0 \ + libcublasmp0-cuda-13 \ + libcublasmp0-devel-cuda-13 \ + && dnf clean all \ + && rm -rf /var/cache/yum/* + + +RUN dnf install -y python3.12 python3.12-devel openmpi openmpi-devel +RUN python3.12 -m ensurepip && \ + python3.12 -m venv /home/python3.12 && \ + /home/python3.12/bin/pip install --upgrade pip setuptools wheel packaging build +RUN /home/python3.12/bin/pip install tensorrt-llm==$TENSORRTLLM_VERSION --extra-index-url https://pypi.nvidia.com +ENV LD_LIBRARY_PATH=/usr/lib64/openmpi/lib:$LD_LIBRARY_PATH +ENV PATH=/usr/local/cuda/bin:$PATH +ENV PYTHONUNBUFFERED=1 +RUN printf 'import platform as _p\n_o=_p.python_version\n_p.python_version=lambda:_o().rstrip("+")\n' > /home/python3.12/lib/python3.12/site-packages/sitecustomize.py +RUN echo 'source /home/python3.12/bin/activate' >> /root/.bashrc + +RUN date +"%Y/%m/%d" > /etc/buildinfo + +CMD ["/home/python3.12/bin/python"] \ No newline at end of file diff --git a/frameworks/tensorrt-llm/1.2.0/README.md b/frameworks/tensorrt-llm/1.2.0/README.md new file mode 100644 index 00000000..97570725 --- /dev/null +++ b/frameworks/tensorrt-llm/1.2.0/README.md @@ -0,0 +1,93 @@ +# TensorRT-LLM 1.2.0 on OpenCloudOS 9 + +## 基本信息 + +- **框架版本**:TensorRT-LLM v1.2.0 +- **基础镜像**:opencloudos/opencloudos9-minimal:latest +- **Python 版本**:Python 3.12 +- **CUDA 版本**:CUDA 13.0 或更高 +- **GPU 支持**:需要 NVIDIA GPU 与 NVIDIA Container Toolkit +- **MPI 支持**:已集成 OpenMPI / mpi4py +- **主要用途**: + - TensorRT-LLM Python 环境验证 + - CUDA / PyTorch GPU 功能测试 + - TensorRT-LLM 推理环境基础镜像 + - 后续模型构建、Engine 转换与推理测试 + +## 构建 + +在 Dockerfile 所在目录执行: + +```bash +docker build -t oc9-tensorrt-llm:1.2.0 . +``` + +## 镜像启动命令 + +#### 后台启动容器: +```bash +docker run -d \ + --gpus all \ + --name oc9-tensorrt-llm \ + oc9-tensorrt-llm:1.2.0 \ + sleep infinity +``` +#### 进入容器 +```bash +docker exec -it oc9-tensorrt-llm bash +``` + +## 测试镜像 + +#### 在容器内执行基础验证 +```bash +docker run --rm --gpus all oc9-tensorrt-llm:1.2.0 bash -lc " +nvidia-smi && +python -c 'import torch; print(torch.cuda.is_available()); print(torch.cuda.get_device_name(0))' && +python -c 'import tensorrt_llm; print(tensorrt_llm.__version__)' && +python -c 'from mpi4py import MPI; print(MPI.Get_version())' +" +``` + +## 常见问题 + + + +## 验证内容 + +## 注意事项 + +1. 启动容器时必须添加: + +```bash +--gpus all +``` + +否则容器内无法访问 NVIDIA GPU。 + +2. 宿主机需要安装 NVIDIA Container Toolkit。 + +3. 当前测试只验证基础运行环境,不包含完整模型推理流程。 + +4. TensorRT-LLM 真正推理通常需要额外步骤: + +```text +下载模型 → 转换 checkpoint → 构建 TensorRT engine → 运行推理脚本 +``` + + +## 常见问题 + +### 1. ModuleNotFoundError: No module named 'torch' + +通常是 Python 虚拟环境没有进入默认 PATH。需要确认镜像中包含: + +```dockerfile +ENV VIRTUAL_ENV=/home/python3.12 +ENV PATH=/home/python3.12/bin:$PATH +``` +或者需要确认虚拟环境是否被激活 +```bash +source /home/python3.12/bin/activate +``` + diff --git a/frameworks/tensorrt-llm/1.2.0/build.conf b/frameworks/tensorrt-llm/1.2.0/build.conf new file mode 100644 index 00000000..d7f15d99 --- /dev/null +++ b/frameworks/tensorrt-llm/1.2.0/build.conf @@ -0,0 +1,4 @@ +# TnesorRT-LLM 1.2.0 on OpenCloudOS 9 (GPU) +IMAGE_NAME=oc9-tensorrt-llm +IMAGE_TAG=1.2.0 +GPU_TEST=true \ No newline at end of file diff --git a/frameworks/tensorrt-llm/1.2.0/test.sh b/frameworks/tensorrt-llm/1.2.0/test.sh new file mode 100644 index 00000000..973d8089 --- /dev/null +++ b/frameworks/tensorrt-llm/1.2.0/test.sh @@ -0,0 +1,40 @@ +#!/bin/bash +set -euo pipefail + +IMAGE="${1:?用法: bash test.sh }" + +echo "=== TensorRT-LLM GPU 镜像功能测试 ===" + +echo -n "检查 NVIDIA GPU 驱动 & CUDA... " +docker run --rm --gpus all "$IMAGE" bash -lc ' +nvidia-smi >/dev/null +nvcc --version >/dev/null +/home/python3.12/bin/python -c "import torch; assert torch.cuda.is_available(); print(\"GPU:\", torch.cuda.get_device_name(0))" +' +echo "✓ 通过" + +echo -n "检查 tensorrt_llm import... " +docker run --rm --gpus all "$IMAGE" bash -lc ' +/home/python3.12/bin/python -c "import tensorrt_llm; print(\"tensorrt_llm version:\", tensorrt_llm.__version__)" +' +echo "✓ 通过" + +echo -n "检查 torch CUDA 张量计算... " +docker run --rm --gpus all "$IMAGE" bash -lc ' +/home/python3.12/bin/python - <Ci4gBG9tsKyp^CD+4hjl}1_}yl1P&VVn<|QP zC<;mlii*69-W#){f-b*{-kGRA)OPu(F`Q5RUOX#!3=$A!Brvr?r z^Z_y3FMPMu_DC^g;!-#c{!9=HCT(9_G!fq3-%HUE-T6{S{SI>b`p2XCW;V_`HGyxI z5^yyE)8oZv=0*;TEB1mL$ zn5=pK?4!Ge@my}Pa~K}3rRYPGSPfnd`H|XqLcV;oSG-|8kMFC8gp;Jo;K`3q$EL9< zXFRI*bj)cjHJbIg(a_-iyG=xj%dZ3oi&VIma@`6l8PJZxohjeSs_ctHb76w=>L#Nn zW0|;e`&zh_2bhGmByuos-m2((#_p5f8bXj1uvvuF+zTV!u*~7+qs7r_Ic!Ba8c1zRzr)!Zwp1WDxpID^Vz3DM9zky|8Pu6Q_S0s4z2S%}HH8>eeG^2V$~m^Ttx| zhqv|roXvB$?HXd2;g=4*Q{b^-=w^5ycvV_SN7W_n6q)@bI5_yaWJh-0tOtZnBG}v8 zYoS+ER3w6U?wLAX0;zr}D>TEd4QaQ#f_j4aES{YM(DG zkPm?A@Pq=_VC4tAou(=1AfGYshE^%P<`kho-bJ&37JEyv=#u{JGkbuyr7~zfE4X4* zSxAMaqQ!;Z%YYZtboQ!q*wg@FnqQuNv#({UPIgn{8vawx>JaYpA`)-vm7cmu~sz*%|ElXZD+(o%BK3{L<-zT?V`Q z)A1KY^7R9?K#X*wN7Fyfg%rqgc)?RF%TD{77-#Rbs60Pa2aJ68B(-XC=5u%9pYi;J z_PouB_EzXB%yeam^f*3efO6QqLPcD*{PpLnJQ2$w`&#G|fzBUQ{kfkJD=%zNlyOFq zLsFmWRp$ONnVuMnpbvo&Y13`%G2!ZwnI>fpmZ+C3dZgbShisXnMke;|{ORxu!|C zM-a!4QI3B2tA(zmYZ9s1Q-C%2|A^*AYVO^#I#O1d#jvA);M?)E9;1V#hd(3sU%%xA zX+5)b&Q`N?jvbEN{zTJdI zJ9%EWY>L4H5?vHFwi;zBFB@aT>rq}?hSwLX{c)!O@uouZZA-hJVhS?RemyH}ZdAhC za_ISyhG`rr+!IOvzkIO&w)Mzqf!!i&GSyP)DN7;@lD;<5ufEOu5yubUbY)_xx)ix2+^&#lf(hmX!!rE9R*54oplqSC)L{@G%-!RQjmF zoC~L{Eq0VVeV)mPsuRWRDvbF@IQnY8mgWpjM6*4Mwf!wneRv6zOaj9N3ajE+3dty5 zju(1nW4)TIlN*j9TF6V%OeVF|^-KAW_VellMcP#A;uaD>ESIF<$Q!*Zy@cxV!GrGD z4ricSv!i8v<&gRp*eAC=9@V6^9GFw-oIrBa6VJq+RL|;m>EaGLGNPI~+!jE#;u}I5 z2$z(muTwih_ys%XEPSiPET&~x5zBo~;3SRUBC-{xl^{tEI>UCt39e}QFBh~ho! zsbjIoC(M-#Q)7Ig2+c@1`j+J81%8Qml(CR0kV|*^JXhyYRdsi^+ALIPB{PY7J>M=^pQRC%=Y0}|k%=W<@Aw+jIYI=3>&JKJOD|eyDf+>&n1&>Z+s&dkq zUx_WQyPmoUlg%5SCl8KUx~27XJRl*vhH8HYn)H;vU}J)H$OFznK>vZ?zy8{BHYB+- zQMEKVxdaquNL__ zOhGXlMXq#dM`@%?C*X9ZMvBZzXd1j^elLvRjw-TPocb2H(TCC8Jk+Rv^QYdA7<)0M z5`f87A7P;Vt=J>CkxWpyq3NFt^GoAskZe*(pM%yk22<^LqBnw>;#DKj0EjZrx^|{* zcqXw|OLgGWOI6AGRy_HtF6rnU&)-RL&2a{-vpy4EfieTVNsQD{wgI_5J96o{0Cr9i z1ib;gWC~NofbfFyTdl-LI~S{Z>R1u7D@Aaop0@E~Nm%c4LO%^k#OI}GzFx!~fdwG- z5p|1G_VjA%=@_8T5IykK8Xggtk+mRA8Hb+PNUWzX_Z6oqP`es(yju+d98bt6xTq(U zdT!a#a7i`KD<12hYvud%y5vmWnzh~%a*ZdGxm8Ae^>Tm+XH@Kw)@#c$xmmgVNNw&2b^b>pWK zYiE4DsQ$(?s)4c`R7#BnRm-Y9#p##@)7Xe@pRwSM z=u(Lbq3q~1!Gb;NjJ{+IHp;9)U3m?j&dtV)>IGEGAm*Dg(6l}3ytY;13QvjN;YIaf zx-9lJo>D#o4pX*&A_4{T((H9a)GIjrFj_MNL|K*is~H1JtI1|)i=UyCyBQfWHXeuV zr9QzHVI_MK4!r*kAtqpfb&M42s`8XjEU6RKqly|UgjQ#l`7lkWI&}$=TA8G0%hx~V zlzv-YkvKt!B9Fjy$-)0Xx9VTdn}Ur;gV>Fr3@@Fr~ zlMAYvTFB~rY4zza{o!Vk9T#UU*YpZxdEq4H0d_}Qc6~CnnQ7(rl3J8v@1+j~U4o*# zLGaMR$#zvSANB*0|qzqSiF+panq$cC3By`%aR(ng155K{8KzOIB zV{~zzQv!(I;ohUOj5p5z88CL_36~3NfDWTQp!qR6!&NDIlKSqS#w)gMK&&Hj^9Pfx zy81I(NAwzH+1n*Cm1uNx_z9~QrGBo=Mk_bNo~p#9YW-s`M(c0$d^ki45GeuAXIf4} zuhvAmDS8)SJX_yXl~;e%&>D@?>3>CgzQ%+%XZjO!@I`jxF};ncGi{7#ut|Xuys^Dh z)p+I4<$Up#qGbpa6(we0ZX2!4=abn;D87TtmX$h7Rpv@33rdIZ#KfL_9BYK$&&{2b zSDcJGdU`;YXuD-+GQkmb^-Yq@k<3(VPLq@xcM&9v~Xt!6Rhc8rPl0k?H1*KA#%`r_=BJ?GC4{1r= zoxL&_G;(&kI({bjI21Xmk)mxq6TDOSQ)}ZCQ&A5o_rdAxFimGFS^lZ_xhwFUtJz^U z4ULE;3oW-tXmKXV`6^!s>K9R}vhx3m@2L9Ya7^wC>O*j3_9}|0D#YojzW%hrKX3Hl`%AsKN)Hxpb}o{6*G9P& zPK|ff+2m=jzvmXMj>rl!yBHc@v4H_`^BMKj#ZD;2#+K|{Tmp_Od<8J_tyD$JqQiLo zRD70U&Z*c(Dme69Q1Dy^8nc2zPkuA^!30_S7KYjC&I>NGpsX+lhYQ(h zzZ@;>AX_I0nbdcUeYr>ke(E#i4xcnEC>@_uMomSEtKbu>d{6#6``BR)k5Dn~&^7pO zhHc`DoR9RMZIKYB8-h-Z&DGe_`n<$>5q53ys^<9fQhmhe-Q`*d-zYfY(+?KBY}xeC zoe|tRI=q&S!mOUG;zidR5fk-Uxh6|iI&K46V+XR9Mi3EX5L8ePUs_w(d48yK(pCD* zk_?9bfy~+BP~&;^^W5jr-m8p&=HqY6`Z^Lk9?%lA`?)@nGLx8s=j4NY2Q-sk*}g&} z3~vU?P~HW)=f`V52AGsqL#YAunN5})t>XqLmj(604<1mn|9%)&OMj6`gs29M3us1} z)!@mz|7{7}7uc8&ttKH3b9gMg-XRX!O4UIx%9XV3Pppe5@1OE%_j{+rIvB7lBD_l` zNcLZua2<5dJwvfU=B~y4<)GVy0v!HNf=pkiSrp11JRjrhoIE-nHCyf3<6WT@K8mu- zJ7WjC))w{YGUhEi5B0`o?GDroy&guP;dv9W7fbstBaT7GrD)9^7Q`Ao%4M9`+X(L~ z2M_;Q8a5hE-g;DfJxh@!q;`;l+qXz4s+$qu{LfHpQP%X1c|KkKBwz5v&TQ~XfyLt+ zp&o@}E%V8yq90)UMUOjE0_jEA-9$T%@G>mov(D)1bu&LcyPo85sSht+e+Gcgcm2m6 zv~BM_R%ZjaW2?4>TR94$Rea^j60g}0pX5^IRxizJn-nTcQgJeyxguhe9a-p7X&q;% z(!4?W=;j+qYytGPJ}ksh+uu_$IKCt)#~q73QaEVz-~cfsE-1N;b?RQm*fxp&YyF z1Fcc0Ia4s67Q@BxhAcv_l5C?A;VsG0enOXZ!SBuY5dAl(l{}m~U8RV5>*=KfJmPDs zYWAy@yPzkmgPdCxg|$nMJ&xkQJD9FbgHwYqm}&N!T1z5%NLf}COE=4*%G$Tx+Gyxn zQE`MSc(33sYIaA;H#(ToVimbPnIeb`dD%zRs$S`XQiVFIwbjTd)ZwE5>PQ}5o!w!@ zlOLENo4VMjUPn=_Gs~G^)GwI1mr!5*RN3Vj;+b^S!#^?ohHb-?1h=I)T&nWf$7^A$ z;FU}+yf(isMu6iV=)z;XSBk1Cgp7iD`48gV7`0@@41@ZoqqVhgKPCbcd@S0wK@1$E&UY{07GXq%OBhg$2NR`IqSIW@%d^;S~t&};g75mNAC zY@8_8Wm)+VOO<`cGo7C9Hgd~X)PB;^4Wi5_4i=Q?PY?(ZWNB6_`h7s<2nqw8*eq~# z_jsnv@4vZfpWVs{LQIi&R%OOd`9)72H|D;i=iG?QJEU9pYGsEx6@z-=Nd1_%^`z`22V z=V~Dpg>GbOs|G8rrfoYKtli{-ty^rClf!Gza&^yxK7k6do_jgrOyYc@B&VXfXZ})m zA~#Oau8H0*S6vM`k6)B{7e5xU<84ZxpI5&YNQ6M3GN=dPS`t6M&}&<2;a%bFAjdsH zVq#Y4w9Oi3+m3D3{3Kp5X(1xfk)!Vp+OEE>P<9dUk z6G8s@Uw;1ld2x|WrH;!K@ykb?cJ;qit~O*1>Y)M`L2@4QzY1Q#@Fmzu5ZEnEz4SjT zuakYj*0Fsrf1`cpx2!+a)YR;nSXs%wuuH3+im^C3Ie9a>@law3q@9Na;W=(eoRsmq zlm6S8>J&<}*?*yC-rZz$Q}R`gTV>IhadUrv|N8oRKgHp|=9jRxrc)o1f2BI& z{&8RM{k4T^INL0twpGuw*V%JqeB7Sv!6|({4t&FoP}rv3EC;97eG)i&Y0G^!vb{3H zGlgnYWwGv5EcRqhaVrW}Boo)Z-QxMQO0M;qp~;@-m*$&UtN><}KXEDBZ0sq2xs_r* z@e-(HfO!8Xi=w+O_Vee@XXSBxNyEG}RfO8_!?H7*#d!?_Ci#0|yrW+u7*!`eeEuC# z*Rh7?fiIiA$2C&IyyTFht;hF^=i$)fS_n(1eHae0l3LI+LR0)$q1*eptd9K1ywAnV zXHOKkss~h*|1xCEs>vHYkEg*Vwf?zT4{ZtOkPOP=^R6LjT;{nt)6xB#AQ(y$X>$hh5J<^ zR_H3pXxi|z9HR@Bo33eD3)zDvBK2wQ3`*3R-;#t;_Rpu7qH2h*J(zR2;t zdAr(+HiO|yk#wc+fU}Yr_!V(ZdUpZiL=d;M^aloBPY~str@EBw@UR(5uVN4n{IZ8SFrehVXw!?J%7|HEJN% zKmF}N*ORERanv=f#j8;4u9)l3T> ze79D{;Bw206=%?JH(fWa+JAVk@PDe({}+4xzZIzemuc^Z`MUg^)j8E?VDQJ2`WbH3 zox2`nZ_kv9lJsM;-s&W9cOp$l!I-_N89r1LG6HXdkw3^WoZj3LUHr=GDr`Ix73C zWMc}qG{CCg)EwWSQNeiZc|m`?n@*2Gn1EQ>t#-+<$d>ylSW!R=g98}f_a|uOteL{_ zH~Y0@2rpr*Qd1HYL*@r~cpun@Q0>YcT88+isBuv&Gh` z-JKmCswF+xvG2=$goOt&u@YJQ%d(C}lIV|QkYlbqQ~F0=(YBs^F+5pomIfpG6xvOf zVKlivdE?X?>O)K__&(XYGROdPwL|j}O(o5NM~DnWeam$XUH#@iDPkh;KPtp$*!~A+ z`=FD78|WeODh)iqe*cOr^4Xc;%EDJz%uG|cj!{NDdRd#3D(Gyxe+g4lI-p}-*e@2s zLXk)=ck~8@TLdrq4@w*AR(q=Df_)ap?1reU=7G6=L&YnN_)5Bu8?=W%7y~jP3&SGm zf2D7l7YrpbNa1}iwMJ>ggc&YP2yTLCv)f&GWgxOrD@wx{sQo4dy7 zM==T=8x#5;!GWCEejW+cJ{u?UE^=h~$*)yPwIau&OvG=dxR2v%o52ohUFy>y`bL2q zo9ZA^*PElf0td=$k64J+AD>Ua%O6CI!SzJZ!%(8fkr=u)e^SUw&61QyR$4jCQ6K!y z*!KC%k{?u4t?dXgNFddmrj%nW1gCh{4%lw?Baj&N-i@nZ%_?j+PA&l1z}Er6`dB<= zpwQKc3T};5^4%}CVR}_IaBJhSA~rEDvg0{YVmCF))`pyp8Z=$NIfaWy(%*KzkH`+Qx)J!nmW)IgeLp)l^=U{Wfxl~5PcUypB~;>yczFoL3;?wg&EytAB@D@ODXjVT0rb! zW-3P&(}ExTWKN=gLq-SJ^-Wz;U3YY6!MLS)Mja=ta-}a#ak=b$z^JFub!(yth<*w) zyBOrxHo(q`)bZWgkbw);RIKNYkESr`(X_8_`SbXu9DDT_XS-4@B}oBEWz+=RnsdI|QWhW1gIY3Go4u(mSy>6<&{nbo%v?%V;gUuRggp?JzdCY-Hn zM)Z!*a_H7&xWMeIHWs>CX`bI*%|e4qGVxjsbc3N{i}bEmv-~KMF_$7AdiN3XzTgl= zqkP)34iqFa=!=6%cUf})H0Eoi0hoW|O!B0pt3`UtGXq5Q-GF&WHIonc$5rfOR;gD- z@iKas#$o$+sdVcwzu@4{>eopjZ0OaUphfX5@-NEv@hApGDj5*VwvS6P>7$6k65*-L zcJVhY=*yQ{@tZW0G>48s@633M&G7ECMl?|jubpmQ-#sQaEfBhDK+rLN;uBqzcyk9t zPX*=lK+sJUH(&-IHz@Y2ky11Xv{iYlX3F+4^DG>MUKud;z1Iu6%7#Pu>nFNxzBiWRM!*8FisR##bHPfd=$bIaLG_Hm4hC zH&yo=UM8oPE-rB%tf8g6>cM#vC@S@?AyqtIkVB*^3dyj1h}Bc$>sKaryF4(6Rr=P6 zC>S-P@g&ec^Ph7{De?u6xncVX#Cgyk&zn=-S#6hmK&Pn$c_HdrpF0|}CW1rr8*cbP z08g-K`%eiC&69+Y;YeU5khTWsj%Vk`zU>k6 zj(2s0xz_eBbR^Qh1-<%by>8Z+Iu->5Ocir1$DZt;%fm{5@7Vt}gxS^B@ z-ruP6t0@f){MWG*wD`gXH#axbhu6X`7D>PFYkredK_-KCypIB*i#^+-GUQ$SgLO9R z2t;>pZ=7Wd2>;~^E^w^pQM6@Aiaf0{t|>5#@Hg1Q)eVI=Sv-ae4vbEog7gRHyLNS^ zCF{RYd080LK@H;M`VF)vrZGjLc)td7I9p~E=J!3T$WI$}pl2-o&OH`y#Y%e!=4_MLEmqnp{g6aT^NiE&+ zhN$+3k?C8+@=Le1_85;jCw{&fxV9jy<7cyoPf{T-%|)+%Y-w#jcRE5O(^b3#tZ zKNAJIumN`nR0LRK7nl)j8bG1j%pQBZBwue|y?W~L;j0uXS6EeO$_dglt5pbPHl120 zdkUYmuP%LXw0&)f2?69y8qhloDs({CXU(bhv#?T5tHU`^brXqu*t41;OC_RMY4{T- zJ_b|=zCGFY63|zecrM2(kNnsDP0xLow`KX%*|623{DgGidmK>dk7~;hb|g~AK7&sC zR=nDe{mw`zOczN$2k$2o)Z)5l_!b$6|bmr=t{%4lRmE{4D#5?e?PFL14B%` zG~f`GO?t7FZnm&oUx0lpEfYE<%gUnO;0@9KtnTmux3nwOIl-kj(}=uHTeYp< zAO~sP_m9}2L>d)Vn0BuD)jS&uA5AVIl5O6(3h`jDKjpkIY!hGAEtcr>(fnoQ_jOj%NXH)v}osdZH)*T$@=gO2u^SG6%+B+N)uJ5)+id)Uy z`6buBtbWXA7k=LUu0t8ne~7}C@>wF5+>-m|1kBTR9lFf%C#ZE#w7Ao4!=K+PiMq^`y$^LtU(R&av`b=_CCwt8WeLZc~tM_BrXnv6OQfWE=roJm zzlDKOm^u2xduIf*zpdW*oU%4W0v5& z2Kx)JPAMUk{wtvCw}$u&U98#j>Tu;h#wpY^YwkPmOW|DbzKJvM$*kS-+}KtOwN1VX zLR4yVM}bLgHLVc@ndnRPr9AoAKa4H$tcVxB3dipuKOII7l8hY0hjYJ?BxkgWO}v?C z`xJvr?0066Ui5?CusE;(`V-MocL8TG_*DAokGn4LxNi4Vu(L-0_JJ6MlSkW*qu17> z!$w?V_tudmB^zOG5HGfqlq7lbnNcuh9WEoSDZMC{8#vmei$|I#Nt-mOel1*BjZ*&` zJt#6kA77uG(gpKQY`;;0WtAkZwa|LYhf)it_dN}NFxp>Slu z$In^AOa%0}3UmJn=!PhCq4b)BxwC`$Xx#ao8Ed4jg;-z-xwTL8QexGr7o4gCwXda2LucLmgXSS z3>2*|X_091!_1mNeU;cny_m1(WkGu7@60h{QpytTXjSdFR#CM&1X;oq8q zGAbp6i-j4CLt!FdrUq|u-xME5CHK0V2SJ_2o_3j*Ve`DJv!)&$7GMjUlnk4 zk%%oH#(&TFLm9koCH%I%?{K@d^H-ebYu;7pj_pi=;YX&5tOTL-bYZ?uITRjdaGuhT zy?5!|Xxi9v7~7$F9SX{O7XHiaG+qyI3fU*v%b+?cOFLj_8cOV$MSrgpf0BZJDPcYS z@#89}>AZPk#dn1>7i|#K8pUb25iB{+81{*-N^`*;1OS7z7sjekOWD z&j>8)siDwl8u^M&n)aG7j;nUhvKE6{gaT!}zP1D6eVUTx4(l=6b`1pGcTS_bYg4g3 z%eBfLj-@YKz)9t$%qvgJ08b&;as-0+dHdia6D#$G-WTJE^wf(m>{ zE#}f;eDAXQo2G4Gc7Z&W-icq8g_G6pMMu7(IJ@WkLyjE`$kD*R7?VUch=23HV}vQ# zA^)#1^BdwnYoDaxw~I#)e(2!`2UBaUc{%7xLCNJ=*$2cHw;mgc7^D~`O zRMqvXJmozJ~U1d1&J{L6am6jFG6$6;HwJKPBaek6%IbqO=f^$vO?8)b#bwvWFG3u&%SOpaM4ltX&u+svIjXh@=Kx9vwkYv z6{5ig~;{M>k0hrnn zX)?{Gz3=tn$><%Jg~5Y+nG5mQLNHn)tNm?FFpI5(O)F^f*-Mj^TW`(dNdQKZx`zEB z{KeakadXSyw`OK$@>r=m+uK%dW?jMhojr7CEM$c8S0X6 z@=UR~+T5`wFETp*+e350cJuS+-F((~2PB~)+=#IL#o<&AeWshPS^F}L9G4ZWDJ5`$ z=JjH)!N4ar_GU1liRN*WWixo=$;akn z`)W`MiRe=XLf`vUL_= zV@9|gSS#ipG*-v?`6+UCGpk8u@x-R7ln*C?+=nlnMdY{|urFWWndqbNkE*Om5x;hL z&F?2E%O6^L0TBP&|4qzS+bYn84{~DmjDJ{_Z$1;^Z1yQ@(&H0!y)JPw&f_I=E_m$f z^dTWwEO55k-baz&qMno|7&gkPTe2A9&HZw9wdBeS#P#r}{N#S3a}S54>D29!9rbW> zl4vp`=UkJ_aAz}gh|a%?#^zE;jTQ*-xIEHe_s1n9bZe++VYK2lF)P+>po`xWJ~5^* ztf|HqG8k2~9^|F}^&JA)_TKc7p-pS!o)5^;a*{0lu@cXG@Wds-Os#Al8Qj=3m1*mB0otLn!JW!r(XT)9NSbV&T z!QS0+yYIkVBOj~Z^(^sMrgZ(IvX)o2W#a-_sn0oQxm1brOGOeI$hf&2&qWRk3Schm zh|e!pM2y2}suluSU#!k%0={Rsh!pKiM4n8e_yNDROX#F^7AHy+5v%e3F!b$#_vc4~ zB|j=Ny&Oi?YeD!;wCwCkRVc&oi1XzaTUMz&;*nF#S8>$UK(_V`49ns5Q3s6-Qh;sM z6%klm8Z>tQ4D@bDo-_EG+->2zmkHyZsY`L3N3}B8*!EE-{>yk;&nyu~;Aja(DK7I1 z+fXC@m+HyE(i(&__!0gJ+6)vDd(Xd}zES{@2y2D#%HYDSAs4Oq@RV*)>YiGynfez5 z*MYmTG)Rt~bMSJ6R31R47|!ALUQrC4!vU0{l~yA%;-Kj1Kik(qtpbX@GFD*PPU8fi zk$p#40nNcMGeLF!~OtM*9yfJFzfBSerlTFRwF`SGI@#-KnxcapXYkLCufcz93_ZueeT$ z=xh~~bp&8GofQVQ7;9=;>OZ^QW%P>L*IZ=}ov=y8qk(FJ8>97&4ahXrG2eM*LM~o_#`eABTxxd~BU`=q*PqVYqRB(#g>qah-AIt8sZxGUN#aOtOC;mQrePl2&(CNCb)rma-|4 z@g3QW+TuQQo1f%WPG5Z?Z6Z~vHeA2gf?>j`=<%aECVp0-T^M%SYiD~^r$Zsyud+DM`0m_#ne7ANeMI8W zDqZGwRDMOGcrcwYMP>(Df&Vi?B0lI~-j;ByHP$QHe&??I2d$Z{cREU4G|`~NkwRn+ z2Xi9lQvcpRonv-6(|+*a!|x5P6>5_P^1;2SmQ-@E4YT6nj`Bcc4;{>4;KvDB{^{`L z`?@S^BXq%(R}jjUw)d#z>zdj5fC{L58Jd?uqNMGb=t!LG(qny%=-WD?f-B=K4-2_j z9re243)3}f4RbXCgWW?iO3|&!WhmX-BQ7MoC&l+_8Q6b{GVj|Z6pQ8piv1+tLm;yF zjIVW5&aG&MFf;3S zqr|;#ZE3>6{m~Y>_5aCAea}25r~_&$v{D zeDV>S%GT>CHUSFJF*~Dw7|?wii>Pf7otCOTo0Ovn^A8^eRrqpPY7kb$;>hx!z$rM%1uAv_czQA}GqTfww;dp}GO0v8SR3AF2 z4$*D%iUlu;Ry43%dsam(%0#}o8)%PjoVsZ9YFI(X{eL)Ki!p}k7YnUHmqp31;23vQ ztb;grW@s9fB>J{V1vu^GoKj*!~wIc<}u@FagaX z$r_83JJ9j*5he&Bs~nTcKSs>kkAQ93#&5co{g169!vPDxLN%jj@jiqjb3{dipxC|* zjqxra%hynYH`x1fjmysGok7FOOnqqo60>x-3y_;;TNa@yUo_==I>B};g@(b`7L)t~ z#8>)aC`M@>?F}>h%xACti?B)sB4))uGB%#??;Sj+?^k&g6H$b@09XX2FiRCa`|ig z(>v3)QbIbLK|dA?mD`iCwQ+OvX{B|jSmnh?PORY9MZT)Qgl_1Vzdiw7_OR{*56K!P znH%0 zvdyid7n_%`+Oph*9DW*eJ~y>E=7~EGvsG)d&}}Z7XaO5{XV-?l zA7;KWM_C)*p-izl%v)aNjs!Qbq+k@LS#6^19zq$uccX?jvy;v?Jw%!E+FdtO znQNt;3004q)C~&MLdl^13qvkdtDbNqlUAygdjL@6m=ta+M?Tlc!W9giY%jd}63M6j zfzGHqG`gv0Yn=7efO-hVGNhw2>`#*&-Ham(s+}&wozu~dPBT_XdPch{b15hw6& z!VD`H9Ls{K;G*6T{81bDZdeT?rvPv<>P#O^A+vehBJ&D9UP~DJk!_~JvMyJFC7cs> z8nZE*SutKwkmhS6pTG9t>t(Q!_TuKx)kN+$H%aTAY_QiQvjLfyl@v90UvR7$+BL%C!*4AjD;`9h| zsxm*c`>*RN>9`$UqB>(X$W19f)a=)4_3Siwu#5B+wK^i7fCUEynO%weED+8~k%(rA zH2wcrC2x=Z774T7$%i_{(#$t5$EXdb0ah@J_zcL_Q>vjWOB^?&h{TQ2qAi z9Zd*{rw1}Zy(0g4S3wo<+W3zmGGRUDdQW*Y%})jZe6w>kIi1hj2#c1nI}}Gg$Llne z6mX#1s_nU!v4J!C1_7mI7lEk?8t;QTkUZ6p$Un`J^HlFS9sk*Rq^5+u9< z@5|4j?R-cX0R@A&y3Tk4C&f6Yd0$#rL^br{K%>S9kniFtYqGL;as7bN+pvp@U8n+p z75|$A{a}#KUlK?@^!D{#Q*^@(-67TbW#`O2-KssR&sVs%CjAgDhw!?@hx-JPHa+Ai z4XVI_n74(fI7~0Ye8G*4=}ir~c2>y&d-+36=$Zx67 z|0gD5zv+|n_Y`DrxR)~o!G6%k|FdSF#_sjIpbm^d@0-lJZ@^K@dKrw^- z^bJ(r%sfS5+EF@%CJ{Irt!`xz1#KbP56TME;UphPd1HnhHZj9W`1n3=Zn_hLk~W@i zz&k@&n`ZQQIu3qaUSgcM);SSLRIrg{!Nu#H>ONab7muG2TYrF+2l)BPn9*f7LrV(# z>P5Wa;QzqK3WQeqD*2V1Xu=_$ymh1?fd?w7Na!OV+vm*4Q;m{{_+u~5(nufr6|w$3G2<6RSzu2 zh;>wYpi%?D>%xJ$oyue%5eGSx%2w+zX*Alf8l|Q$L#M8rSPS(|)#RmSwI3F<7EKV% zu2nBe-Y&ZVhD>QdwVJuk>~}&f&FU6%DOl`BLIp3fyj7X8-qlaugSCIizjG?XuXPP= z?x5CAXThcV@!qN_BKP^hE@ioj^OIs;h6V7t!G&>H{UesnuIBfcdvTAKllh$>qVCHQ zKfK>mQZF%!r^~hRNhS%ul!!6dvJO9m=M~duuKA1U=s`DQB0I8h+*B4NBx2y5ru?6` z^lJWsXB9l}>$7rQID|{%W(wp0yTH0!|2p!Pmh3Imd%mKmv50)e_3yHtL&mskeQNFlR11@yI@uR|L()R^ z#*3R1SSg+_L0DNCo$CpB$V}nK*qS~5P$)iZ05U)Q2t9GW&w>EKRkH`0xS)9e$;&}= zyHwJNBGxASa!-?tt`vDbF5wkv622l)rD9dzsfIl>3~_86@h?1ft&~Q;e#Q1(}CeL+7j8Oudkb{tJiOlwMMy3qSZK`VAux1*`{U&Vfq^<d^ z9SdkR;r65kW2=~WMS>)KA!pQ6blTPBiqZPLGhZK)`ia97;K5-m&s z$lV>T3ovvNQ3+jjzcMcBXrnK0zg+7S%6U$9KR_Uj(-DlE>s)0#Gh*PT;}ZJ0`gT_| znsA{kU7UP8|4rSuB}V!26KGhPhjY~v=QlT^ft|uNYC+m_CB0&J_E|WK702&&9htX! zrAT7Ah!zfQnm@Xx7vZH*sg7Bc?`qeQDxeo&&!afMBmcJy z^%u&M^g3OLXeG5U#ehZr1m0!w(q%i)Vi^QIBs|MW4FM&(X!KbZLosa8)lm71Vu=`G zJg4H|8eL`+F0a2qjxC#u3+VO_q00VA^53c*o z&4c6OM%KQ+V?1vnKR;csnz9=HBF7N_bMXb!j)*%J2H8G1zgUl*>g(w_=8nEI9JYTVAEftP{vslUAruKIh>4MZhY(aK z0rLxd^|h;a%3&*9u`gF*4!OP37XsCkSmLj;?>cU9Agdw_JaD z-BA5A`&6U2G$`(6_3cl$^WSO@O;M?F(}I<|CEkF{Bkb!YV?n-Y;?~2j)upG$XaX3Y z&p58UP`{(QuPkGAc``XsEcxvI_A2__VsO#at{LWSBx=zxG@RF+vWw*|gWHyv;nFc? z9@6?6_LKITb%EuVJJJPW%zvrAK~p_ka#3{SfeiAIo1;Ua?FLt zaVvK!?1PgGRD|xM2E2)U4im{@<%a3q^M!dE4@+k(T{9<1DmSX-_IW!UmfrsM9XQrd zddB?W@?IgLO`TPhKz3dl{@t#%EABCu$Pn}Y!`54eMYV(p?gQfJ!$E zHN=c4NOue!f*{fo1JW>n^w2|xNFz#jNW;(|UEc=JIq&;jzjywcYxeBD)_T@jPp#*^ zcW{c$(!}TBd$Mdz^pPo@g<8hE*0m(IzwKO1R43s~IzuV;yO*MA1c_-l4Zo$Z_b}_? zm~i`q+!c_aC4CtBc)v29YnZMr*CrsiRVB)q_Rn$KscJ=wM2aZACs+R&fE7jYhVCVf ztubi9UoZ*#16X5=g;%6vt|Z`MN;}$%z7`0WKJ@&`-`Wy$#7=&cG=6*VTifKp`MGtF z=;@xJ^ZP|fs>#ZTM=@MGbw=}7nFYD1iezaj-8}pv!ndpC;5&aiyo5_HGmS^SUA$it zyUewULr2*+@k4}@?>(wZ$q^b5h});=#xe!SoF!pA+TDk0%h_HW+(9V7M&~L*HZfMb z?6YCNI<3p#+Svm1vPS>*R|0YtMM=|b0pM8&33Tbh%Bs4}lZGF&PNaxfib# z^{1M5nZd|(RCKzgPW$0%+(#b=4-8c*APMs_=Hy}bXl|*nwLacByr)is63Jj9a1@w{ z{6VTscCR5Wx2cZ?iDU~Iq%=A%QTADFL-rv;hkK_%C?g?vnRWeF+*1#$haBe zocpYoC!w*H%!ElRQ|6(g3`yLWDWVpknjnbrJ5el&g9N*aQL&v+KghUs8Ta%3hAsQC zmjW7!nNl3Gu~s^ucmPH7E`Nx~qNUW9b$}=+2@o6Y53sjLOy`U!WVup7*96O2;o0MmJzfrw^Zp$ zp+7=&!delEh2QI&=y_r0O$-Yb(S)LIejk;-XM=>Kr7!f?{@Cgo6(P3KUIG&1>S{_- z4KjhH`CRTrzruV*ogS%L^ilqy?~vco+tvt=**9}ifDNb>Ey)od`Z6eItv*!HCn{nJyhn+b^iERQ9o$#4Lav#o{N;0MglQ?eOQdQ?6* zlm_kMPGh%MkfS?<4AhljD+ zOi0(-HTAZFA2i+IqV6eDm7hH(3X$mA{*jXee-6Z^4<2A+VlS~S3m1zI_s@sUXaiHh zYXL@tOCRSpJ#I%zSRQNhL}EP}{^)L8<+cSirwZN?iGGdGGw2+!3v=Kj2~~9d@&}A1 zJ6vG8@SngElhVf|9|b7E+6M8Uq6-CH`<1`bv&H4$}JVZ|%Nw=>HW0L}Gi zWr8;)XQwL5$ejNNejl6YFGbdI!G%UbQUi&xKBQ20!t%az*R8KL`THM3?x(!;OmT;i z;_MBiKcJeQSn?oxFz!P+2GkNbhxeAODRv^M<6%sc(T4dJbsE@pA!tHz;V3rIHy!Cs zoEjVENYBa^D?C=Bj%xi8@oxak#=6pS^e(7QQSF{w!O8fV)rQ^>kc)q1^%Mm4poS^F z!$`N`|K!MI6w5{)n^~Hj<8FpAjfqbW=r9^K)i9S7kVlO`iS|&Nf`>>NyB}*)N;M+E zCTzt$+u%*>qdL(d8`cx~HOi#8`ZS%L>=C3>)ckTT$-~^+RyGXXa5chi_Jg<~!b}&v zWFh)Fr76SQY#e%Mw1OTY5id3L*Md`WT?O&B8RqNq1z_-)(}0zle+6v3D+ zB*xyS`WQn=ocd}sTJ!OFA)!InDihV? zJ2Zy2nD*j;(11;U1deC2LUC(kHtY41e3`Q;iRnBp#lDOlBY6 z#STG^Eg9uvid1P-dgb1)xabigNJU`_RVYPX^~5BSZ-HxndIoQ+U)kk9OW|Z>>ZbFc zqF|80WXZ`Soy@KhHfZ8t$3Vjs$VBb>b)-qkIBc|nNtc?Pf8(lxHvn93UntPu%G|Lp zmlbne7aj%fH|GOiGGFvc2q$yd*VjW;gP^@DgWz`{GsV@yeq0o6&0&)5n2O>hUgFIH zWRj@l5qLi^W=}sSQo+DP&VU#85XQV28-3)+ukDX|8I&@PaG&{_#?{B4?DGIGabw~G z4g5qtIBc^{V#KTPK0g7BDd=5SEEWR5v&zPDq*2Feqq*{ETqfaG3?z-&;tvQ&V-}m5 z9hT}b@!rk>x^L3@d;eX!j0aK9ahrAP!To5l{<*zN4PN7l>PD+g0FGd9;p*5-8;-=R z!V#@iDpZ<-rW6l$l*CGBs86}>cWT)d^BhbZmfE(>sF|PCJgPoA>Yr3Nhw|Jq>VA51 zDVz$L?r>(pUari5GWEi8(?g0+?;)Q)9t)y*dPkZp*}^`|B?E1I5u1dNV%2!q{F3sk z+(_TMleUffnXRQXLb+JwI~^5*MuwAj#?w!XcW`w_7v&{gn7(Xwduu-3F;^Pyf3$Uz7w-7KgFcC9!X&cF; zNVzI@dDgUQn&90P(|TNw*2RS1ObQuO8;Ve-vbD`rQ!jWGJU- zYc1uCg*nY)VSlbMYlcnX(i_WfkWMM3XHBJmeCLQ^HEe+OTzLX+o|)CMy>N+jof1>o zZ|6?&tQv1G+`;Rp#Wxl^VBz7GH3CHu0ve^K6aa10Aa*h$mbMnv^O3b9lUzIMenL~y z&e!?tG0mgBmq_*M`h~U79Y;^DN~;$IW@0*8_~l0O5A)BE+aaZRk9CF5kd04nl`bqQ z*j=lSwLJ5Cv=tKvGt9wQG|!zr3}DhQhhS+4;fKKaQ+O@pqR7Ybp4p7vz%MZwSb0vQDQi=z20Td>~$An6g~T=+7U6Riv6hbIQnN5LbMbpIKjYRq8pnIdin+UR1fDs9v%|{g$J2l4Z^5#t<38+6dn!LJK zC>nCIs4kRO^=E_E4xAMpeK+k0oaY`iqXFBj_nW(KGT#gc7{$log|$aZHM&}6#7L%% zMPtcL9d9~b{<(CQkN){onku1ckbT#LUhXZNQ31NU6{|+MGNX5^o)9wx?`0>K zWyN3p)H;z*e&J0l83&Y&btbQKlV98kepDWFY0#h|<){K)P$UkdbOZbYp#Gpdx;JnJY|Fz+bHATC-YDC_*&+BJ>urSe)8|M;Tk7| zf-hM3**q=xN`xV1-JUD)!DzU95^Z3M$;R$oHRKijR+eU`cCbf+=2G#8LGmXrT0T^Z z^1D*6*IiAmKkl4vL7qdUFJQ)pgQ~0BrxMBI9P^RADb9Cm*g-r_`R6eEQ~E`@W0U^^ zXHLI=zy1$8#kSY}G)hkr`D%7}eA6X<`qFb3YdZi1?QgU^``Vvzv~|MKulR)s&sW=& zsrAy7{8`d^9AKc%V=*DYOe)O8t|kqm3$Ekm_gxebxr`yPMGyJ`u>0KY&Au|lFee?t zlAY<(jyN5K>VQ!4>g0D{SU_MC9jfV90!iyRt97Do!kxGaq1A4FRj+Q%sHN3z51=?G z_y56!k8*8R!b@5=Ljs!Ep?F-=#Daethjd{eko7`JiOTd_-5$Sg?|($3#nnak8V2LL zbWea1SlNT=P1dC=xJGTN(`izrz+s&wzaS#l2QzZu7N_brfZ?N$ew!){h3nZk-|n|Y zrUBu=Cj;i30(_syjd`3I+&?A*Ha2yp9p@-eLxN5VNtKn(u~i?uZ-53=USq2O9JusQ zz8r#&nrg=cFCYt#ygt_Am>7ODaK`aWY%2WQljWP9oc35JeL^kO5|CGXcUlc0rZ}{Z z=Lo8Vlr+nO${D|l1=r%1PplFm#vw0cW{01=`Oxq);)H6_Dn1ul-g0$knivKyjNU23 zC4wzg>J7i!8+#TrGfYDcAgV$BL1z28$`9ev7bYkb=}E_^&XS-yh{*ZlD1@oPM|Y9~ zhI8aA=Xvz+huLGf8dM*P;eJeN(M&jsX$lrVZnb)j$+vU`Q(o4Apc2t=LilHWy&yoo z`kfdxp*b1IbsfS7bFjL3rG`GTgeMaVrmI&e`R(4A1&f%XRfb<1X(Tsc)yu2UG%Fg?1nCXQtyqY^eI&nKuMPak# z7I5f}px-iE`uuz1z+}WaD!?5Xu!K|V0;}T(4{@2jmp`5=d0@l%fwfC;axre)-58q% z`E#&>jcBtJ^oSNweGvc+m1e{-vhLh&+;V?8_et`3_S-(@FudX5xro8@(6vY2k(`cU zw@3nQn|WoS(d(H;mCQ}%5uNYzZi)L@Q2HxO_TQC;<7|>7RC1qKdFEObqoAE8zhPPM7{*2%uI9}b5HN7!MUO+ii z#0q1&R)4*>j{gZrYXGhg!{B(pY(%{tL|jQNE^H-Ft~Ht>99;`>9c${!5}xdVlB}zs z6%izJ5AXo`k-1jZ9!Lt1e{3R|i@|yjtx7RJM-&_t*_{PVFJS#F4FmBJlKyD;`~oz@ zO)K3`9mpwV2kiA4K)yCZC2m_Pj!cXz#aTcqGHN__h>!uOdI1ry#!k}|Qj@6vc6A!z zD7_Z&I9AcW69tOrZm)y$Z>|)AtOV7E_70?E9wBVB*-y#PoyE zq_$R3O_IR6$F(JsK~>|Ad@aeKpAMsqwb@ISCm!GOb3OIZD5X+pFt@pb?7&Cq_Bf?y zlkg}^=kKCM+89FR>Z$xR8Jt$;lq|yL1!X3yKZ_#f5htI%{Id_%X6$ z8Liq&IoT7j<=e!gS}dflm;oIji5K-K>YtSg|D4=}sNE4B@G6*z(|caw%OJxv^{e{{ zCXS`dw4edUTr>orwSyikLn+w09XBZ+6HD+}w^lB{` zr_(>UdeKg+(D0^^spqq2k!w}|yZ8dQI`-sV%Fc8>mjbu$Va99jmV1*wpCjW&zLxF` zH>Jb5(A_I*2!G=d>xx??+Z0qKBoX3;`3%?qmlNedoMvbl8#xJEz5py^r>t6&y2j%H zU#gmGVR#JQ663zC2Dzj__64y0jU$&D(nGYPYol|ek2U)*u}J_L7USHW#w&vSwY`kG zFX+WvszMleF_($~t}=d3qBz>?hDnc!r8H66ESp$&s-7s4kP-*)sy)YLRKo3l^y5Yk z5Dj4QrBj2!2}z%($1;o`XSV+7b8V$?53bv`47ydiS@e@N57bOA;DiD4e0s!<)gy zyY{i?Cn`HnX)xA*$W=68y)%2Qo=@jPd2PX5i49L#Xn0+(KZJj|&24M!*?Vvg#}d z%*+@9>?J$LfZjlCs_0Lku<`nlp6qEsKZb;xjqa7w*!MK?kEy4K9H~|C&0crH%fza} zEXVAqeKOfAsjB)}9?01Q2ddqLNKUeu$6vzm==l`I*!NxFFF}ukLtc^s1doX5SBqK0 zEv~zOMpa~&&2mqo;Y{${hluo_aOC5c0wtrCLNBQb!u*z%3UjH=jgQyhQvMtzf0E-+ zaZEKNrufcy(MTYU>Y;c{F2QfzmK_wOYvOVnRPcSAxoWJ|zHg*4juaVz6CP$eQ(1w- zJpFl!LK=CfYKx>~)GYr#uQ0gEj?Sx*3c6LBgaWF+Z44k-80G6iBCkRQlA;~!`}P#4 z04J7Y4^kZ*RvK>DlL;-^?rHoLi%etZ=~L0ZO<8^_7A7$?r#O^;z|D4%E|Hbqm?W&q?SI;<2ieuKxUI$>qMhm}FMpvd8TVjJ#*y zutrWuA8(})W3cCLOvQqX_%n#~fBW7zEZ5un(AMzVym8kl0~_xeZWpZ36_+V~HD8l=*ooAQz3ZqX+_*jPfWxsrOHj-rE!-he9ChR&OFQ?TY1Gf zzTzP0ZTJ~~QJ^JnThVmgnIneF>(09X)rq`GO6;fnkyZWxGuE+Qnhcd{nop=>uZu}M z)KVy_6fT0d4@kDz8d`KfFNE&?1OWjiUnN3*C@B=Pab3x85gg>JDqyz=`}Vm4noA5i za~nw7T;h&8h^zQlcM|>P9238Sy&9Gn>Z?2f+zUW^0wtd}M(Fb=kUuD)3g4MjkZO2u zN{q^eW>gx~|CoK3x-vA#odg~lWljs44mL+M+amQMzMT{pfRQKO)pex^3xb4^gaM`16Ld_cZs znUKc?MO&e|xXSn2aREb5dvA0p;GF)l?0^_ym@PzP*NQf;F-J7pkf5(1FmZSFip1?4Z6gph3chZ&ghG#)pgq$YfT=gBy? zZpdr3wGEo`2@*!dTaf#lr7YZLGZA1ELB|#5pO#5QUIWq=U4f+3=;$Z_8!ENU6s0Eg z7={o6nV9B7_PUv9$RXZ?st>ICb~3QHZC8hfA5|0`IoXs-tjxurhvDLBw*X|S`ep5N zmZ*T=8c4$KwGaYFK5F1u#tk^{+P*s}$`j?0S1QFW$`sF43vgrRH_uBD&m6>S7YkB} z=$0w}nj{U5nrtt`bbh6H;rX@T!v-S27^mfqs4n8Nw!JS#Qeae4On#D9Hh+pERSSz)&MzSC43$ z*}ByD7fWdi!*koz^k%4c)~i0OX;kiXAcV%-AB*4oSdx$Wv!YL_dHeH6?X_RH^E|ZQ zOUdx(OQy3HVNpDhW%LRjUPmO4OD}GQw07DsMDe~&et73IvB_3dttdTqt*mpXtZ;hc%^E_mqP+mR23V=X$72}R|-g8ig4xz?+(_bG|F9WJk??$YH|4JQdE zT_a98KH|!54m1HS=RzJ~(IeJx13KuEiDp0iwL>5ueub83Qyi#d?MFLIP_kz?j7(?T ztlY>B90-k`kODWO=EictmIp_EfdKxXBf5F)w!D6F@*9`zNw~U2k}q=+#$)nK91VrI zl@+r!oKCzIMv&bZ*bfnlKgeBC6O#*nvEp-;65#fJ21M zVo1;=z$z*{H8V5Qn$aeXV46I+0s8sSgbJ15Ev&s}t_ziIsf)iNt?H}rvw?clCy^D7 z#bp+Vb6z5H@TY2tejuGQNuQXz)bUv4<%9=e{L|xaIkC| z^SMIFqK&oGMw(fsK|wG#l82?_9E^6{;n>)Acg@tJN2gnH{y+@)6Ik&pbZb8XxTzc7uSS(ny4;xfNe5pJB+ zQ1F_u+}t%*7BqJM5H#x-cPA}ZSUBkuaC8b#=w5edfdHC9@&}wSIQKE*HV?79tio^G zHF^H(P@x;Xuf<+4M-X#_qADQ@okcPEt1k@a>;n zCQzC_2~0^HziAUMtkfGQ?$k#)Cs-%+$>m(5znNtFj3?pE9d~MQonf7%-###nX&;}Q zSft_KjQz=C{#53_Aj~Ib|6zZx2^HOmfQ2N%F5!Rk+|Mt%uxmx@rnfFGrh_E7fqdC1 z6UDzM)%UlZVLM-ooAz&s&CECdy1coA$jJRAc;({aVt-%rh0xX5Cpi|MpL6y*#5bEF z;M|6`Z}>#h%ggIi!T$OA2E*Teo=igehXIzMcslg1%$wEn>|2^@r_&={`^t zJfa+4YFClnDAf9=?N`WE^qU%YAtMUg02abFo90@&BZXGq zX0l@MCHnPCR^D!SooKcw3y_?vo&B*z9a`-W!=%$a)bv+SMD|dy9NB#BoMOaq)O+mo zBZZ0ZcatL*AfVZ8yyNrpA=Wy-Ud*{^AEA@=8B6a4X4mY$3o8IJJ$#ZMd-^$;`Zw(D z4j-eA&SBZ99A&TvFt@qWf5IBi;l}GqjO#x2N6P#2k0PrXYlxU;2yNQ{B1g$TgkiDn zg~}%9k$@AlSm{?~?U;~C=*a(fVM$)U!2=o*_$=Z;;^Q&i4#y%mVwdoJ>DFb7pOKw2 z@JwluLzt6(v{LfjBFczx*>6V}ZsHYn?)3g^RwJEW zOf#E1j$zFcnWu&%6IIQyv(nO3e|rDFF(2{_-!l=@HO_f%#yH7id$W( zHrHMHplKcWm#fi{xb8b)8);C)g;{J2u!074T*G5z~jUYZ&Rr8fODv3pQN{50)jO;Z41ico=yU`@<=}M@ueVkCw_OO>KVutaq_F|%)pBYv*yw)Eq zM-Q?Ku8hhBzj{p-Z7#8p>NzMO(jz^+S^)~sa~g*#~eKCK|pTWnKz)@fL(jH-u~w^0ot#*;6Jl zVg3}C<+t@yqg8iWRZN@-+28WNAo*wc)m2 zaoP+iyP?g4!~y&q)qS3Y#o-fbkJp)daguF*CMU^2}>T>1|*@(i`~>**&g|MmsBxT`sCxP=+ty`sB?_^KJ60Ke7>SiN;R`X?QqhltVTod?qK?| zI2@IeIy4SFDO*EQl-`-XSC^N6*G^L<8xkEgtqU~%{wR|NHq)K-jsOz#93Xfu)Q7KB z4dCCt?$~<*=d6e+hpeB|4tWeC^#$bDKVqQzqeO4MV9e5F5#D?|fBE_EPdnJJ&^Ny{ z-@lcIee>0x&nNN*yS2HVM&i9{c({~I-FjZ-x8f2@? z>3H@Q#{ zFD*zUP?(F}njK3I`D(V%fv%zbM%@uL$+zEhR+YlBeG^+L{F`hO1Mn zV4<^GGCKB8Uz->@0k1j4!1$e0=7O1YlDO<}y6IcfGof->`b$!JRzKBQ@af}xt>IZk zF;*87Evs`G61n>D5Qz#Q9gkrRX4}-^9Q@!cj~s`n7&I(a=p&<`p-d&e1$zvLN++;# zxSAxGBi0 z0RZb`p3U0~ndTYaearpy{$QC$uOYVhQME3W!htAocZXnFayOMlfdhe#l1{UwsYNS9 z2Rl*qDUSJo`I5r*vU;DU$OX$!xGi^Ia^vSN%g+Z_V~2cAgXf;&)bqAh^Y&G~3<^V? z$Dxc7Zd8?%?69x=_l*TbxC%zSE*bM?*tqs`JyLX#jDl%t-3I0byYxsW9aVZ*+VEQU zi|aug3#%*9xNmNHJULmNuGCn+SU7eL(SXH+RPvnCq{G9SGoTPC6v4VxH@8ahwZbU(tew)yBWW6B+E?OZ5CYWL=Px4oC=g3)$^RaBR_49@%^ zX46J5;N&iBQ{rc>FJ|I{HY)eux|<{*Wbb!W@jSA(6AUI{Sm2?LvWL)iMCMK88f5*{ zVy3%{b^R)%Ae28--+AV6(5Ym3En z_CB3eE5ttKm*^nmI`ZIdbo_w|k5+1!Wru08AQh5r50+(A^T90HEnFKT^*IBFLouRt z9EL*Ef(&FCNpFR<3ukQe+3HK`sBZSe6}za$O3)LUfijJR>keQvyDqLMrF3-26}`_l zHw(D=?RUq{e)c~a3;+LBR7C%2v#rN4!l3UT<<0>(COW+t2yGhwDzld@G+93-yu7o0 zGM$4B;q|AGK z^N07LLmF~M3;AuviTIQXG zL+(C4wuZrn$H&ip?fWzpx5zz)NrWB_7635|H=VJKLEsK}XP6k@Qf!#egIwkw=6kyL z&{wbV`F0-VB7A6duuJQAIq*?7;P&|V_@JPm&w$~ZiPF~SXt(mF?U)*2S4`bfZ2S#= zRb;+@^rxoaXj;KQN27z?Ys+FN)T~Hc(-K?zcZDSSI0$aEtlddH^Yga7YoncT+RUKa zI%?TvG{b=J=;Bw}3-nKTYC=!d#Nz3dXI6wI17Q;xOf-eF&&T)Tl#~P$quJ9z4?QMd zL^RtOHR-XiG>-h{Qmvymozm-)X!DiZd79tn>hj{x9|5kmqiF<5Uup}|zbKiPKW=OsuG&^>r{Hm|`Hl5|MI_cMO%xw| zeMX=GS89Mg-8TCu8;1H#=ELswasdpy9v>};E5~-0eU3g|s)#&sTNjSQ&bOnkc`pQG+sYETvPWQQh4lZ8XgK33&unG|`q^uT$&M zs9@(MD`_c8^bbHO8$HknJf4kQSx@f1Z?(VuZ92Tk?&D;w`%iB!pmjHxoI=v-e7e#w;jAs#vF66f9_8CG`rh(!T# zNKxWyZ_BhgY|OMq_I*svTg~ygl>^(Uf!?O%W=BLW10j(#Xd;fGAaqwIA76o7govy0 zgZpQ@C5c)n%f_k?*QhO-$tYEkY#+*KGe6U+spVpip(ib#Y3T51URyJUiedMw^10nS z9ry%LLqFOCgDszaTT!5o7S(>E#1x~?p0}_99!cGtP^Tb**(p^$q-!S^fm=<~zrcCh z3!o%R#qRT3HeCBtznGR#szWB_yNZ+gZhYSZKs7_}y@gZKb2VH{RQeU69{nv*6caXD z4X)IgUrpX^ZRx?T9u3oUi3^FqJHC~B8PR&4YpNM*wGO(nKGk}i?b5x)^k~agmK!z{ zQp<7&17oW*VW>1i54`G5EK>VgwwC!D) zJ;jD!q#n$rPg=XY)fuYiM7eA$&eS7cm#KHb8DG_e)2Yv&pjH0w5V+dRmZ*Z=9cFQdA2D#R1nZM6Xux9=@i`Y2R;O^*c2 zS_}ESdz<=JQiEGNc3ZF4O}Qtb%>KSYCztY%9W9%Ktu0Yml_%f5_g_YlLU1{%9+}Af z8GN#Eq1%<0+->|qJMz;H<49lq3_hb3{)I>xoi54AV_440*|zOR)o;1KEgfg9ujd+2 z@3k0B@B^h?ei!2K3B1fXpVr1_Tbm{?!541e=a<^-FXD`H+RB5Eeu=HH-`-rSgZ1MS zR;v6MJ?`*vsKn1PK(hHqU2SfJ&JNY6BP>~(Or=4C>kt503xvHhwKua7fV=F?2?!$pX zAh~KXj7?lsi-i#Q=gA+_y?vkf*xe+K0hgcw7%se1gu9%tkq;iKL%k)lRnor5K~Y1z ze}YpvVH3+QPJV8rl?XYQY4UIXwPv5a51v`_e=f7b z{WKS-4v7j3rr0!GX*AXfCF{|~Doz@fIuTPXz}?q$7xPtaGNQf5Hm{p2^`ZIGK4||$ z&eJ6uj7)ykTT=&|M36$@zIBVZ81IwI<5kqc*G1wB%FcQ_{LIIfMOjwq`&H@I^3!+- z#|3Sr>z=iaFUzuOTcslM@gBVR-hWXWn}d?bsGFVBVJ+Rgl;#fa2vd zrUY+?8*5p49e{@oXsUV@MRN>ZoaAjNvYDy!V0K8}<9qrpDG-bUO25*+@?gnx%A}|n zib^e%!o>JJGi3LsAo=&g{6Qmpg{NR05i^@~q&%{(-e_U3Pdgy!Ogu~~)7~l4cd%UQ zuKw(GLTa~7jR+@)W4w1bRsTH2r5hV8d%ty~EbJwKA_JFHcp8(j_5biI~Fh zCwTkwtsCF5P#t?XNkR`u-3hcM<3%Hvl9KM$v%;h&CHLHOEc$;I~64F&v8gJgcJBso^+&gT1EC%nMOjT?{2|aWAwcz{uwcn0TpNqhP)=b`S z^UolgTySGt6+`k*aD;`l2lR-)VQu=y7md8kT*2>v<1^KXllMU6A-d1?J2!4^6YEs} z$*^bCdL!hLq4u#z+_`HFN1iUvf{d_Hz?8QhKlw^C&D6#Gr7V7qV}q-;Zxc@L2c7sX zLYkTr(Jl3gudL(waRjS1@&ARj^p^1BTGbNM&5L^;oT)ET75u=&$l>VNQmLZK-+y5FX*h50$uos>t}VaSh?B_bCC9Uk=kR1 z5wVm6-me+jEkIk;KO_R|SdTgyhS`zeNuhN``j#5X?oZ!#ccny0e+Q(MG6ob+{b+u@vx{NGSS5^(=Tb_D6Z^Y!yj zsBAynLdR9@S)fHL-v1j#bY?|JXw;ZGB>oAz5`-gMf19_M{gI&V89)4^Rvh*ynDuWs zK%6i%e(2}l;jh*GanWDz->55NC<;Qs#Y^SzjQXePJFML<>RFWsz?lLvvG(5}kLzCc z&z_!81>y%{uvQV~Hwbf)hYv}sRIV9ucVM>B+78*&8aL@34BNM?FlCF1`F8=Kaqx0c z?fkrcq5lHBr+Eu|%RsFOZIfy`lVS=%xoC^a&Vl3qy1svUDjH9ommn>YqI&=SeLkVN zL%kFW_a{lHf3jxw_+}b%+uo>Ic-o-D7JtEmwXOR%!z+nC)uVYJ^7SR7TYhdps0NGe z^P(Y<0ELXGyTH}~KGi^U&nSe{7yDY19yJtYZ%lz5sMbbTPJ<^_r_}NzbQKmuUG%aY(ukD zz3x-p{Ij`36Ik3UD~E7%AhO*T+devD_qwHVTLQzXpg2%;{-RXM0N>Z$-QCSCcj5Yu z-&Q4xXyBL$2y_J0NV7+kivx=NFEKX4l0prGd^nkTfm~mv?17%finHi=|K`zXu^~+0 z`bIBIZl#n9pJE_ZN$63^CYa1!7-NXoKh%PhYK8&kh|6 zcD5Y}hxy*kM_MNK|4}=CSERiiuF36ksyw8idEz<1po5nq>3NeXz>r7*0*VXv2od|Q zUKMj^jFxhSoe3>isG425(e%uuP>acBD|B%I&eJ!BB~sFIgUZ^+5Nb^uu!t|l?8LF4 zZiX$GxQh4mb&){uxT&^T(**Lc=57jMPwP*8Fk0Ez_-5#Xd1f%gm#6~pbZH!Y$P?Pt znHr@Oi>^g>L-n)uzGd_7K<(v3o;~p;a~-8G2qwB;RYI2rZv?-hi(0r^&APtIoScU@ z()Or_AVnQWT^`32!frN!mk%ZgW_b6nDkaU`%S>(Q8ibCNE-z0*)M9nlh z&Q*PfUZs}CDrc?lSE?OLN0`Xy(1@CHZ#BMEEivI>ITIgh@!W}OPYU@oj9eo;nffZe zOs~Z$j33W8(W^XQF}#?h(MIZuDx!aM$&B~lex3io<@V=5H_jsJeMy>7Tpet6Nt(_m z>qg7$1bFu3oj@Jv1jstgv#87p=!(qoR8ai2xYL)E(Va(vX@c?GTziKkBX!$@^IK=s zG6=H8cfNUoZ|E%QV}qZMyL3b3se6Wk&Q3++wrhAE5c{Mr>=EMO!M*$?EsQ@!pA~}6 z4gN_$f-RzJ`h$Kh?9tv?Ll%^&v6U5Zm%a}dl>+G7Vqs7CR z;JMvH1CAR_a}+PXd6n$O1*Zm&iVBdcI{tB8Ip*w;M=OV__ASm#6$&SLIGSAQ z<{7)^cZz5SPDygZv~mx%u2o9&isNC~S{^aio?az)r;i+BNt~?YWOmw(KsSETzDqw3 zV4U1G^CBOvpSeqv<`#8}@?ZWER{sAPpoAenMfZ_ES^tFlfGcyFmX2;^PoYB;p}f&rY$N+m1NQg{LwpT< z#b=9%zg8IxwE(R01P5T1hlDpC$kGE20`Pew%?v|%2Q8L9hL=65d86|`R+JGei~mCw zV5%>tNO9ypOqL2&;g*&a1pgZBIc0QpJ#gTk*a2|V2WyypFN`Rm@oM(YvIa@`NKbnV&S zjBjCM5Y|7Q3Y+!{(W!QlmDkrv$Mj4;Mz{WU~! zDC+dD7=F80<~eaSE^o3=)2CzxIU%F9|K4QjVSEgm>G zs|n*Vki-1@Ps9I7P5vKKuOy$cu=`BdaL?V#Ysd;O`u;|R;qsbM!q6)M(c}vc`8~^L z-g8ju zv4M0H2}LOq2ql4F2*pq>2okE201`k!0vZemT%^m3Wv#c~dOzTsZ_YV$_MF+XXNGcE z-s3Nu4Uc}zP+Dz??0npH7%4H?7n3O|*fQBDfOQK$Xh3X|e75xiRpB5bFKcwl7nG*NTV@HMq1YWXDDxH#NEn& zy4E-!67~|7>W;}o7l>$pq8iA*jl0&)yH_$I10vW}0Qpad{_#i*lw;1md_u-nCLj~H zvw{eJ{2fsBd~hEEjKEzKg8u&K)7EO+&bE1l&85XbzX~Y@ig$lS&+J-(Sc&BcnF_rq zEfM$&+tI2L`9r@!;9C36_Q#!V9He;tpU}AmgSb7Ig!v|23>C()f3#P3g^!rQ280XE2=w#0npjQh+aP)M1!owdyn=+37-FkqZ3LiFho1GboWPAyd z%6L?xK-Bqd%!}a}b58U{sS2vDTR{D{pStH0Rqq}*$hI}mV3nlxB->}`M?Lp7`4*7+ zAKa!G#p}xN&vrs|960caoiG#54dcAi6%WuAdMBJYzJ=I)26D&G=SXz|tdpCrunvZ%{V)OwU3&n`8iByTThb_{q2hxkYM%g{Og2S8e{#rf5eb{6Vb}CqZyu)c3ene2MAm@^G~bhn04q6*DXMA}1NyeL zx#RMs2%kWK$zy~9AFTlccsR0*RM7Ri3%4#5p2dtZ{h^oyeU5XSw7yJ$duFB~$#WEk zR51Or+k~n;s#9|0c<*Eo%%;_4A)@bZ{(i4!5B^1#7n`^LE^{RJ|3$2ur~WP&)^4A| zT+`g#{`sr&{j&LtYtMqkNV~PaQgrVar%{}_W#lu9{AZY(mWDmObKj1kRV7+ARd3;} zp$qivs);obxm*8~2n4iuw9-~x7gn#aDD{L5W1&NA!{MUYFN8bzNW?WEW=2l1X5^u0 z;Ku1O`wN58kVC}FJ7=<}lFgDeF)R3mOVwGBVbMUJEjF7V5U07g$Yi1TygLeYV;SYV zEdgM0t5gI)yis^X@ibueQ8{Ui&P-<9#zo&_{1RCusAZp!(bdwD8`~_p{yO5DS!-2-#j z5x|&m8752?DdwVD z5*_(yeu?aZ)o#f7WvUvV*b8PP@1^C{$<2R0W=99vn;@VKd2Fj$$Ip*~brKts>|4BZ zQt?8pxn)(efZDLaPRBs;sAJ|{U+qnWi8wC?5@8h};>gzX1q;^;OmiUQso(lTY13L^FbBudD4pney!Tlu(b+`Zs&OJA_Ff;D ziPx)5*>IUqYaHoQE133<6RT$KepvI& zv%+71A*y?*X-9!H@j2zPGa=KR{EVn5lxKstt}l(>%s zJ?`xAwTSn7R?y#KwZ6@nHkoChCn`~|>x^)w<2A6eq112fkVJE(5PltD}}b*$!pElzbAZ3S70vGM)Ow)+=jRL>hJ`nnn- zB`N7%yPl+v@JaRT`YDf@mg^){lY8gKoJcUKCnxH-Q5*2j&iZW)T3m1bZFpwPx2|QH z4Z-89EAsur3{58`rrzQV%iQzs4z62l;ef-d_7wVzh?jjuMKW}d6LLVkxJFh2?*xl; z7PnI1Fw6m(D3W#Rwp4+otiSH4wU|a$H+8pH6KgpD+PH{Ij$b>EA6mi%{yYc6{U)F~P(c zCi5=2zAO1stz~C#&w95wF!2FSyLH~9@Wp5yPNXS#HIiOr{qI35#P!J4Zcet-FUp7iSxfg^0gfSzy$ANt#jO9r~N234slRgqc}Y1AoHoCJI8J9ZSc z=jeEAo~H&V`yg19Qg(ZhL(8IO%!M__HEk9@!bdlXr0w0e4dg#(iGZ#<6zpX`zK~CE zPvJL^FyP5(%2;apVi?M<1gK_SB$iwT`6^{O`}0Y&O&vckB3h(9b8G#vKSR|>Hef}` z@lrxmURK;I4&lAQV-nVBs3nii4`)9eT5mE}9z~02D(ZBOz1=IRp5D7#ZQ&l;@bK}8 z?SOWrWy{%RS$CZid^OD+1$2(jh+*o$EhhJ-38R+moc09zp?E5cWM^deA)OEzlXKJG zRfTY!z50n_m*37wu`hr$5{PMpk?r+Yr_Im@gqL61iC?C`|CE^TEQ&=d^K&09KM#51^@~a>_eV07eDD zMdWj1vBJ$e;@tzs5@THbTqmn11=Vwdb+ zRQplju*$IYJaV;VBVyFU0;zd?98NsABYz0@tasp&fN1?s`VC$7Np(bJ`=($FdZk6s?cMx4xjczpe2Gk|qnCwriH?^F0hz?2&*N~kLY9PloS6qRYO zQcPCAiZ%s`KJ%bSvERZ`nsjr!LPf`u_V3G^?q%vVm$G>FpcUhXr9n|~t~eVv8Z z`V})AK$y1(H%-UE8LATM`YgWM*lzk^gY(&buABZ+@hK^GvvqBo_}fflcOo_jR!WI` z$M6gC6}xQU1a%L~GGfEvwQ2>t3_}^X9>XB41aBHTj+Qs`GHfMDtsm!mH~`_F{0$l> z-u=y@_WP)y*e7$&m)+m?Y>N+(^CIV7-V=3xLw=fisTTUNK&*_@zeIch26ojToL0py zZp`_WJ<+T6gcJ&6w782~F?^x4hu`h3uf3Uf?r#?~)l9)py=!7~9xH*tJ0e3@?PrHC zYG)rKHrYTLe^l<>rl$zf%R;Vb(bU`%=u?^`Az~Y1Ta!yEtpz5bi98&yTr2ZBmx+Kk zo2jk_`5Se}0+NPa*?UaYjfD+_Ypl6V1wZA@(7(sGmFv2+X&RF$`QC&rU zpdZPk^7NmgKF?`D&@rnzw|Bjvhgj6lJtS5*V}0xuN&v;sZ)!sdt<+s;AoDO^GrMKTw4kR$zQd3hQDYcIzec7oXDw2=TI zl^F|ziKDpH<4S&FHj1D?K6iKvzBiQLihU(sqw#Fdn?Op9Qxug_TNmW$ER~;sQeXhq zmi59XWO`TBM@zDH(rCWN=gPW(6(|3MrM+Q+U7Pkj*3iZZYOB;&(@Ft=4L3@!gK@)v zqsvs7#4fs|dHr*|tY!?$SO$8nMc%Zr-e-Y#PbjB@l|2M7<)pZe2;vR-K>dMmb8voP zW^yx_+7BA`9m`y7rS>K7r0%XHX#YaEcNPd?2a%0nNqSVnk#6N9lIlkMPLyIbwN#bk zRdF@41$Vx<&v=_7V@>dmDy5}(_v)VBlfvsK9RqRes%SoD0fmSwGP1Cc_3N%PYr-0Q zi?k_!5p%=r%CvRD=?taOp`tpVSNacRl)wKLoH2uRpc9C`s}+&9eR6sZO+`RkS%R{6 zSk|!&w5zZ#QcS-0B-5~@YGT^n#9+Ok3V>(v=_7fU@j>H@L%8n+HI-a9?Z0_oDZCo0 z434wSRjskce1Q|h_|Lh+p~cj^O!-T=!I2dDC!9fFv0;asCqu2&m2m;}CmPE9?D zzDRUeSQ8P}+!=C}#48HT6fh-0j0UUZP%VNA4Q4bhx8meQ(DIN>ws3$p3O^1jAr_Y7 z{CyKDBzR}bu7R{U3g^M^E{45Jxo2~FC|*)E(b0jNWPe|@%5i~vJ$EA5ZlUUv5#y8) z@Fnuutt!p2>CZDtElIvs%y5HMdz(>#vS6YIZToYqm!bM24fI+5DAQ{DhkmE#9pyTQ zPXwCJ9=adGb9IJPaXA@aGb*q6c(VPB(VnpRsVheOmn)nPw6~4^@Eg9t&X0ui>Lpp1 zK#(wg{0E89cRlz0!wO}q_;nr74H-;hhriX4Ok;lqp0}@NOwNQqr#(qGZseiRWE5G6 zH_sb8wRBN3k{-VgE@tuNc@zl%J##YUB`L=~E711-gE9i-h!P*{Wl$kC!uBRP^GKTvJg8H_1lbWcgZNHA+N7@ zINA2VajK9XU4&dQ9h0;215VlGc2kJ+qMOtKG$c_i`~2$Jl$AWlx;joQv}t*?>L!f(SSK=93? z)7{Eg`5TyZG>-9ARB=7{{D~DewlHkeV)blgWB9)gWG;v|1;0jdgF@9MABHU_qh6~x zco@3!^sr|;MGYA?w(r)hM%L=dFV9wJQ5}M2;rr*`O)i4nwm@h6=5`F<&{Mp%E`3iRe^0weWZl-HBUd zzNvGZXi3tJ1CMEtp3XQ?6t@R>PxY{S)615b&P?3pVne2fcH!IZPbwTl{M?7Q;gY`Y zm9y!NZsdfJ?`@($fj6=P1WT!_a~t3Kb=91?&*oYJ9CI7g^Ok~b%HBuV4lcFXn9ToM zm@VdA?2!o7?6JWvrnBE}w(T19MopjTl zfdV||7ao+nMeKPnlVU+)@s&=Qg!N}DXWq;)E7}S-gprYBy^qKd`>lp+WyhiEW*P-n zAj`XH7muW*$JL>9i)CCF~`U7vsk5&2J zx$a*&Y{Y(l8-5Vg{s4KcS@J@b%;=!@Ia*xTrw516oscI+Wt9cfGHh~llw91VrRe}b z;UI9<2#VcfOl)8Qrzqjt{Y6jcVk}i-Fph&jz$sk`{1@?3n9}#Jt$Jm9)K1-Z(&LiH zT#2i<0`FW9YEVxE2WSq}!zH^;P`)SUP*UlNiDNC!iy6&s>ZHLX@zVHd!vuORPj41+ z#S#WQxbR{)fY0qHh~u(u$c#Fy{%}_a1ZFfmBi9u8av?eaBHDUjNJ7WF0{wp))#r>g zIA_R6hM#MxUW}M5GEdo=Bq}*q^p|9K*^M4$@SU1XsBm(blYu6UO(b?0%sj z4cmvF#X6)_CvMZQW4!(6Pf?3@oDnt`KH+GqFtCqr?aV361a5mt<0Xs5;++GaA$d&o n$NawCYJa$_1%dz1!))n_tlXJ$-M{gh)ip7&)F)rPcISTpTEb%> literal 0 HcmV?d00001 -- Gitee From e73ef787aed57d1350b21f763c1261452b7f41b8 Mon Sep 17 00:00:00 2001 From: yuchengen Date: Thu, 28 May 2026 15:01:38 +0800 Subject: [PATCH 2/3] feat: add TensorRT-LLM 1.2.0 container image for OC9 --- frameworks/tensorrt-llm/1.2.0/build.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frameworks/tensorrt-llm/1.2.0/build.conf b/frameworks/tensorrt-llm/1.2.0/build.conf index d7f15d99..2570924f 100644 --- a/frameworks/tensorrt-llm/1.2.0/build.conf +++ b/frameworks/tensorrt-llm/1.2.0/build.conf @@ -1,4 +1,4 @@ # TnesorRT-LLM 1.2.0 on OpenCloudOS 9 (GPU) IMAGE_NAME=oc9-tensorrt-llm IMAGE_TAG=1.2.0 -GPU_TEST=true \ No newline at end of file +GPU_TEST=false \ No newline at end of file -- Gitee From 7b76733a31ba774a73412ce884db59ff168fea71 Mon Sep 17 00:00:00 2001 From: yuchengen Date: Thu, 28 May 2026 15:03:02 +0800 Subject: [PATCH 3/3] feat: add TensorRT-LLM 1.2.0 container image for OC9 --- frameworks/tensorrt-llm/1.2.0/build.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/frameworks/tensorrt-llm/1.2.0/build.conf b/frameworks/tensorrt-llm/1.2.0/build.conf index 2570924f..5eaab65e 100644 --- a/frameworks/tensorrt-llm/1.2.0/build.conf +++ b/frameworks/tensorrt-llm/1.2.0/build.conf @@ -1,4 +1,5 @@ # TnesorRT-LLM 1.2.0 on OpenCloudOS 9 (GPU) IMAGE_NAME=oc9-tensorrt-llm + IMAGE_TAG=1.2.0 GPU_TEST=false \ No newline at end of file -- Gitee