From 6d8916014b63cbb81941071a5da591f3353c962a Mon Sep 17 00:00:00 2001 From: NEU-lab <2942375747@qq.com> Date: Wed, 16 Oct 2024 20:16:09 +0800 Subject: [PATCH 1/2] =?UTF-8?q?yyjson-0.6.0:=E6=96=B0=E5=A2=9E=E4=B8=89?= =?UTF-8?q?=E6=96=B9=E5=BA=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: NEU-lab <2942375747@qq.com> --- thirdparty/yyjson-0.6.0/HPKBUILD | 74 ++++++++++++++++ thirdparty/yyjson-0.6.0/HPKCHECK | 33 ++++++++ thirdparty/yyjson-0.6.0/README.OpenSource | 11 +++ thirdparty/yyjson-0.6.0/README_zh.md | 9 ++ thirdparty/yyjson-0.6.0/SHA512SUM | 1 + thirdparty/yyjson-0.6.0/docs/hap_integrate.md | 79 ++++++++++++++++++ .../docs/pic/yyjson_install_dir.png | Bin 0 -> 11125 bytes .../yyjson-0.6.0/docs/pic/yyjson_test.png | Bin 0 -> 46235 bytes .../yyjson-0.6.0/yyjson-0.6.0_oh_pkg.patch | 12 +++ 9 files changed, 219 insertions(+) create mode 100644 thirdparty/yyjson-0.6.0/HPKBUILD create mode 100644 thirdparty/yyjson-0.6.0/HPKCHECK create mode 100644 thirdparty/yyjson-0.6.0/README.OpenSource create mode 100644 thirdparty/yyjson-0.6.0/README_zh.md create mode 100644 thirdparty/yyjson-0.6.0/SHA512SUM create mode 100644 thirdparty/yyjson-0.6.0/docs/hap_integrate.md create mode 100644 thirdparty/yyjson-0.6.0/docs/pic/yyjson_install_dir.png create mode 100644 thirdparty/yyjson-0.6.0/docs/pic/yyjson_test.png create mode 100644 thirdparty/yyjson-0.6.0/yyjson-0.6.0_oh_pkg.patch diff --git a/thirdparty/yyjson-0.6.0/HPKBUILD b/thirdparty/yyjson-0.6.0/HPKBUILD new file mode 100644 index 00000000..60133ca9 --- /dev/null +++ b/thirdparty/yyjson-0.6.0/HPKBUILD @@ -0,0 +1,74 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. + +# Contributor: wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangyihao<2471389@stu.neu.edu.cn>, wangying +# Maintainer: wangyihao<2471389@stu.neu.edu.cn>, wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangying + +pkgname=yyjson-0.6.0 +pkgver=0.6.0 +pkgrel=0 +pkgdesc="yyjson is a high performance JSON library written in ANSI C." +url="https://github.com/ibireme/yyjson/tree/0.6.0" +archs=("armeabi-v7a" "arm64-v8a") +license=("MIT license") +depends=() +makedepends=() +source="https://github.com/ibireme/yyjson/archive/refs/tags/0.6.0.zip" + +downloadpackage=true +autounpack=true +buildtools=cmake +patchflag=true + +builddir=yyjson-0.6.0 +packagename=yyjson-0.6.0.zip + +# 为编译设置环境,如设置环境变量,创建编译目录等 +prepare() { + if $patchflag + then + cd $builddir + patch -p1 < `pwd`/../yyjson-0.6.0_oh_pkg.patch + # patch只需要打一次,关闭打patch + patchflag=false + cd $OLDPWD + fi + + mkdir -p $builddir/$ARCH-build +} + +build() { + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -DCMAKE_C_FLAGS="-Wno-unused-command-line-argument" \ + -DCMAKE_CXX_FLAGS="-Wno-unused-command-line-argument" -B$ARCH-build -S./ > $buildlog 2>&1 + $MAKE VERBOSE=1 -C $ARCH-build >> $buildlog 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir + $MAKE -C $ARCH-build install >> $buildlog 2>&1 + cd $OLDPWD +} + + +check() { + echo "The test must be on an OpenHarmony device!" +} + + +cleanbuild() { + rm -rf ${PWD}/$builddir +} \ No newline at end of file diff --git a/thirdparty/yyjson-0.6.0/HPKCHECK b/thirdparty/yyjson-0.6.0/HPKCHECK new file mode 100644 index 00000000..45087f23 --- /dev/null +++ b/thirdparty/yyjson-0.6.0/HPKCHECK @@ -0,0 +1,33 @@ +# Copyright (c) 2023 Huawei Device Co., Ltd. +# 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. + +# Contributor: wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangyihao<2471389@stu.neu.edu.cn>, wangying +# Maintainer: wangyihao<2471389@stu.neu.edu.cn>, wangjialun<2271411@stu.neu.edu.cn>, zhangqian<2371418@stu.neu.edu.cn>, wangying + +source HPKBUILD > /dev/null 2>&1 # 导入HPKBUILD文件 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${OHOS_SDK_VER}_test.log + + +# 在OH环境执行测试的接口 +openharmonycheck() { + res=0 + cd ${builddir}/${ARCH}-build # 进入到测试目录 + ctest > $logfile 2>&1 + res=$? + if [ $res -ne 0 ];then + mkdir ${LYCIUM_FAULT_PATH}/${pkgname} + cp Testing/Temporary/LastTest.log ${LYCIUM_FAULT_PATH}/${pkgname}/ + fi + cd $OLDPWD + return $res +} \ No newline at end of file diff --git a/thirdparty/yyjson-0.6.0/README.OpenSource b/thirdparty/yyjson-0.6.0/README.OpenSource new file mode 100644 index 00000000..30ee4f04 --- /dev/null +++ b/thirdparty/yyjson-0.6.0/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "yyjson-0.6.0", + "License": "MIT License", + "License File": "https://github.com/ibireme/yyjson/blob/master/LICENSE", + "Version Number": "0.6.0", + "Owner": "2942375747@qq.com", + "Upstream URL": "https://github.com/ibireme/yyjson", + "Description": "yyjson is a high performance JSON library written in ANSI C." + } +] \ No newline at end of file diff --git a/thirdparty/yyjson-0.6.0/README_zh.md b/thirdparty/yyjson-0.6.0/README_zh.md new file mode 100644 index 00000000..7c71e7dc --- /dev/null +++ b/thirdparty/yyjson-0.6.0/README_zh.md @@ -0,0 +1,9 @@ +# yyjson-0.6.0三方库说明 +## 功能简介 +yyjson是一个用ANSI C编写的高性能JSON库。 +## 三方库版本: +- 0.6.0 +## 使用约束: +- [IDE和SDK版本](../../docs/constraint.md) +## 集成方式 ++ [应用hap包集成](docs/hap_integrate.md) \ No newline at end of file diff --git a/thirdparty/yyjson-0.6.0/SHA512SUM b/thirdparty/yyjson-0.6.0/SHA512SUM new file mode 100644 index 00000000..ead0ea9e --- /dev/null +++ b/thirdparty/yyjson-0.6.0/SHA512SUM @@ -0,0 +1 @@ +a2ca7d5af295b4e162b72c1dd5a1e1a5d8a6c472fbe98fdb9621c9d1c1dbb81d9a8d78a7b4be0313c87d2d90da2042928446ee2c12002514dc9afc8e915f6460 yyjson-0.6.0.zip \ No newline at end of file diff --git a/thirdparty/yyjson-0.6.0/docs/hap_integrate.md b/thirdparty/yyjson-0.6.0/docs/hap_integrate.md new file mode 100644 index 00000000..4a7f016f --- /dev/null +++ b/thirdparty/yyjson-0.6.0/docs/hap_integrate.md @@ -0,0 +1,79 @@ +# yyjson集成到应用hap + +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- [开发环境准备](../../../docs/hap_integrate_environment.md) + +## 编译三方库 + +- 下载本仓库 + + ```shell + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` + +- 三方库目录结构 + + ```shell + tpc_c_cplusplus/thirdparty/yyjson-0.6.0 #三方库yyjson-0.6.0的目录结构如下 + ├── docs #三方库相关文档的文件夹 + ├── HPKBUILD #构建脚本 + ├── HPKCHECK #测试脚本 + ├── SHA512SUM #三方库校验文件 + ├── README.OpenSource #说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md #三方库简介 + ├── yyjson-0.6.0_oh_pkg.patch #用于yyjson-0.6.0库编译的补丁 + ``` + +- 在lycium目录下编译三方库 + + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + + ```shell + cd lycium + ./build.sh yyjson-0.6.0 + ``` + +- 三方库头文件及生成的库 + + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + + ```shell + yyjson-0.6.0/arm64-v8a yyjson-0.6.0/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +- 编译出可执行的文件进行测试,[准备三方库测试环境](../../../lycium/README.md#3ci环境准备) +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的头文件拷贝到该目录下,将编译生成的三方库以及依赖库全部(动态库名字带版本号和不带版本号的都需要)拷贝到工程的libs目录下,如下图所示: +   + +  ![thirdparty_install_dir](pic/yyjson_install_dir.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/yyjson/${OHOS_ARCH}/lib/libyyjson.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/yyjson/${OHOS_ARCH}/include) + ``` + +## 测试三方库 +进入到构建目录运行测试用例(注意arm64-v8a为构建64位的目录,armeabi-v7a为构建32位的目录)。执行结果如图所示 + +```shell + cd /data/tpc_c_cplusplus/thirdparty/yyjson-0.6.0/yyjson-0.6.0/arm64-v8a-build/ + ./ctest +``` + ![yyjson_test](pic/yyjson_test.png) + +## 参考资料 + +- [润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld) +- [OpenHarmony三方库地址](https://gitee.com/openharmony-tpc) +- [OpenHarmony知识体系](https://gitee.com/openharmony-sig/knowledge) \ No newline at end of file diff --git a/thirdparty/yyjson-0.6.0/docs/pic/yyjson_install_dir.png b/thirdparty/yyjson-0.6.0/docs/pic/yyjson_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..ef17c35dc00773f239c4493b3e46000ed240a9f6 GIT binary patch literal 11125 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 I^EXld2dNc->;M1& literal 0 HcmV?d00001 diff --git a/thirdparty/yyjson-0.6.0/docs/pic/yyjson_test.png b/thirdparty/yyjson-0.6.0/docs/pic/yyjson_test.png new file mode 100644 index 0000000000000000000000000000000000000000..a19dffbd6079bf2abd04b32981203842bd95e17a GIT binary patch literal 46235 zcmagG2UHVXw?B*(6ai5I=_(>kL{v(EfS`bYfTB_YBmyFx&|5-LL8PNJX+fly5PImL z_ufK}^cFe^5ZXWB^Stl9-@0pkti>XkndIy_b7t@TD}&!FHAR}sESD)LC}@;kJlCM0 zI0vJkILk(Lk-SA+1zkk`bH-jnQH~;~lWmdw=Ddllsw@RXUI_Jp!3FaBOExcb>?tU& zIh_2SnfS=*LP1gZQ0cksTNm)kVON(_SL8e;(6d@ftM69**}Qxmom&PB+M>=QqM!p z7y6h@>MO9YY0`zbS03jXjN6$vd8dD%;dA%p4SluQU3f`b*P{6RsBeK5kHz9?@D%v(DBNLBg5GiHy8@pf zdpTb4;IbRN zGIhDn4}K$JIgEMKRDQOu3Fc|5Fr8k9_aX4Z zRWZ+;nisG=T1x6=`bzcq;YZiZ;NWtgO_8iCmvy}T?-zYx`;dp>YBBsS8EvE zEK*Ha6`I@eEpqs~M2O^hI9g9WW)>u#7iv6kwm%vz%MXp|>MsAOD7`z-WCtfHXO?>e z*BMVy_y6Zo1=tf$qoDW${6CiC`G4kN{p&5_FXrKl!kvl+tr`8+GyC30XmwMus|%F3 zy6N7lllNY-Ko0^pAIy5W%N>vM6tYrnpCj+h6}t-S_LgekXOF$zWXKkBlpYjji$zmRFkXbdQHeq`hF53=@`!;w6H)JuUWe zj(65_>vV?`fPq^*QgzmN*CTO+JA}b^6%;JFw6^a;Bs>Is+e8P>79B#Zjut50yXiRU zV%z|6^>h`VG+j^tCD46dcRb@Hxs&v zqzOVL?_7%*SyT%VzN|Y4S$>oK@apPfb{Bt>BoU*?b-g*uukxqK{2JmYE$rj`%zEb^w5nYa!P#_AxyRLeKywD z-M(t!w@m`pVj5%i@*@Uai?FyMH!#7lOT;5?ukaH`Piaw~b-#E*wI(5LLsa55m&9^G ztL$+(XFV7J+s8$QX$hhDhzKLG_e$D=e#-*eQ6fg_jre8{jHu`K7wHAckVG^X&MegF zRBmT^pD5=J+VY-*r5U0kz@ABOAzbT*>J!32{M-yM5-q+lzLo_JQ*3n<-)1ca7iY`R zlaTRi6P=`Ny9$eA*pte}l^&_bo;yU0NLW-oY^d5AC)ugEb-z4Mr0NjtES2KzVF0kT z7)iTKU>_)tPl`T2R~W4njqEkvn@#=dJ~Ln z8#Q*@8Jr(blk`Z?4CUVZv8x~6!mDV1$UT{S)LR3{Khh}NVn7%QF3U?_cJgG6e>c%n zr8g?K>7?rkoHg|mN_`s~>7cv+?pMmVn~MXya+YQ$FjjA8vE32m7Loi>3=H(-+abyr zAS&+Wgcb*u8oNG0np$elR(2hY2X9Rf(}Qq`gQ9-iSmbA@`Wn7{5_w4!YmMAMsye?; zO&0VXJVINdM_mQ_3yO79AVpVOBRP$#1p8ossof{22#!-jx%vB*6s&OMHzFvs;bb)F-oe*Z|&Fe%())dHkmU?*$?rr zk6w1!bJKAe%-RSX(L)(;f&>(yaJdY&Pa0*&LuHg>v2Kt_J@(DS&mXo0OV}72_))9V z^uSh>9rQSMEp0Z!k1xSGr@{yiu~Z)&O)@?p&Ir9iVlr?|u08psQcbRY-^J}$23c@1 z4(BwZLHm%Z@wu`-x52WVm3y=)U}v?DV<>ohz_TBUtzv1eqw_f{2s6$A3-|+Q;^Ayr zxE5Q!-sp^WtPH8N2T3eU&hBxm+{~i;fOyk_jd3z+<-u1BMnXbQLzd_mL}E z20^7wJ1xfS?byRL`F5q!seQROhlCmR+Omz?bPwg?WSbiZQ*|ju%f;4)cOjZMB|e|> zV*LhB4kgUcV}8XKo=HB!wJncI-uacfz&6-x>0)->Mr@zp`wb4S3rgy{gA5!x#|SqI zxI_jad>C>Pc}i)T2yQ=6{UWiNJu=BuO2kE`);%#duGTirIbHj0!o^ogaqfpy_2Lu}1zk7RMIx=qEv)9uajROry@-9`6fn{jMeqTuFr)OXY6W_x3Y6dULV&NE9`*I}cGGQXFw_JOy`; z;JVTUI9;QxS7I?*No&dBwPyQc$uQkCu0=*zDa>sC+KkfY)yoc+F2_UZ+afblc@kkR*te9dCqI`mju*W86-$V%x4&3*?uk=VxdaAU^IX z6KDh}QiX6ZvNO&k$RvPAD~wZKFKYqh$}|)D_Bu?buchqv+7;&B^V~j1`qbS^=S}a_ zF%PXmxyHcjcEJ{vrX}@a>V4YJMohAgEIT+oE=cqVu`Z!5WXVv2qIw(!^pMtfX|p=t zC{Kds2fk-tgBi4JU(B*gnSAibOE0eTVTww{C%x(I9|28v5_ZAO1dqfX3k*YcMPWb0 zbUTuk;pRKfd>|A@AP0i7aR$8PW#g>>mBc)#@bta1>*Z7M5*D>cUY83xp6&5dA& zsJKoq%biR@M59)Rb%ooJH*z0h+BG)wDmHwH*tII8S%zHc5%Cb%3&)jg ztiUugwLV8t6S|TUpgqz!=V42S{Nj3PZTMp&E1`>T5+_t<7lKfl!9PKVv#ZMl-j$+huBOwQ;$;gJ zXk#ESGqiveg^;P7&w&mf_ijXLoXi2rDsH*x1@D_qDZb+S(rhO zfl+G_1Ovpvm0VZK4H|gNQWc5@tSjJ09NouHf@)`8@uRv8kF!bJg#4H26rkIRtjf{Z zB2xL+*iDbpvAH_jnk8Bp{)s#*A7jOcm_b(yRSdsDk!{YnZubEThDPlp9O*MiUKn># z+g~C*LIt8Q6HqLiGkQ8;w6(${SwAc438KgpV|%D08d}O{ayv*qT4MS1CNZlVI;_$Y z`?1qo!NThk(8jsGn8OMcgde_38=}5=>*%M(m5?jnO6=g=WncYKN+p3CC8GEnRRnk9 z4cwj{x8hzH4|veabn&JAxpuS7lJr)%F6nO;Ne+MleaM6SVr+HsJvaa%&$C0GhYE{4=6fSpBkW?}z`YcUnAdT9iJ0)lQZUps1hJ7d$-2puJ^%?+EBwlJYr8o1mA_D` zh+eg&eWhsB8=oi)HCmsW^AY?VSF+p0e(|cR9<;YiYYPF`ktcfKJ`% z>mYKn4aN1+fk-u`<#W@qZ7Ievn-LQh$fz3$zM}&rV7cKwxAF;W)!gQfZA^pSsLn~E zy+5m)8cU)~$LAmSX-@Sk<4L$($kfUXyk@{s!jwLL(); zeB?TSmM1>zmC|O7txCx?t)!I2(Y-D9hcjmPMjz&!^WK>f(R-4sY%0-s%QQoV#(8CZ z*5(sE!P$X5r=j#3yt3U@lB0h8TiyI7vxMy!Ev?Kio^ugbDxPMrAvXx&T(4fD6CwI_ zPJhciXd){QGg*98_x%3C&0bttS>(~9hEemA-id1;*9+cr>9g}u+Lzc<+_{mF#V6CY z`>~Y>y*%G)9lSM2{I;eN)403R0r@p>q;ycaZ!v_YW_J&XKqq$It`vf}rgn%;PO{|8e?JkR*<+p=I>NdWKmz7UC_OTUrpKoQ-q1nV9 zqaDW{p@Qr6hDRSu{Q7axg>l618rNa#f|td^AE-{oS(g+K0u{Kj0u_gGW>y5^&EU)Rn3hVDkI9=0p*Xv>`>8MU4GwM@1BXqOJ zP+dAExQnecPFkNgAX!gkFaO+W<;cbdmL774ef{yuw2mVEGNU z@NcQ&14mw}FfqWIgUsX$U!LTBcku%@HaD;NFAWns1NKjy9$V7eA}0|wkC#s)vy|4r zXBfHV$;VSk>*8A?o4c;w?o!g~798MwK$I>(>;j~gGE~$p&O7LV znQYUu^yr*ECPY~OlE*JPyKk1wdr5iN0oQc!!1AM$k5tbYL8iAm%?_(IXm||oHP~1Z zSgUJ4rQf+bJDRoC09fg}jpdK5h5iov@3smW&d%2K7`FwR+GQ>vOL=$Bx>E!R#@3P zTQ+`Q>pCoYKfm?{b>f)V2TGp1#f&iI;jLeo(l_|U%dtJ0i;h-($#ID?jf7s^V9;UF zocaPY=gEnN&QCXhpF)KDunnuadp!&RNuKN-n6pt#Fii=*r02~nZ*ShDB}Eo~yQs3R z?HZxQU_79yxs$mfT7u9e$^N=KWoS29n>h^F8+^N_RQkKno)DE(#Fj!@Zb<+y-~4BY zXJV$`lP*{)K0=>;ef^vVcT0f0I|1)<01)Q^VDh7!kBk%oLOHxUjZR#!Ex z?Qyx6l9o!-IL|kJt89PfpN>+(?4YU#`<4V1Gmb!8T4g7UC&eK=eaODkM4^5rZZQ8b zY@aQsx+#!B> z`aqp8#RfnhH5hed_3aVg+Tu(dl24IbyS8|?15fXX=B+#&eh+&l{uwLvC0A8JuCplG z1qY#tg=cKK<7V9eWX*6y5ahr*VXDxd3z*h7-5%LHevP4CL(xZz^TIfb%+}>u7V}w} zEHzvGeZj*p8-D3XS2~<=jKIrtr>CUwtumD8+LNHqe)q7wH3=0}ibL@!R*sKsrWr^! zo+g2rJ?*@-&IMud+&c#qxqN`#t>F(*2?djQaMw9|7e!Y$c54v#>oeDS{nG)Y6bD6n zcORjaq}gx_7oM~Aew^GyZ;)%{RY7ztln$UJbXh9{Lw~Y5=xE`QhZr7&cCNCd3q~V&n-K9Zu891oLnw4ODY7x>~}zZiv4~29s@sQ zFr>SsawO7vqe}Q>(R*Rf{)Z)#lE=5q@eVf9|2_KQS2CG7*VVzQn}}+N=Y%=2o^G#B z+aQ$7NJWc*x{>{oKDvts`5<`y>`_G}Y={=YP^-Cpke}{xC``Qv?HDW+D!lFJDc)K$ z%>%r6+tUNAOU`^l7YV@Bq!_hE020-1ipda>-rwao5b-kUcJD-7ad4EVyR~}t++ZeH z9qx9O6XO_yVz&B32tO;yr8u&&MEritQ|-5J()Gm6dGQP)9I1i2w{jo8>+Xu#rhVlNPafy z4_ME3xM2GO^jy!P#ALmlbj}O=XWzx?vnjx{Dj*y**j4M%_fhy zY7{XMYh?e&*Yal{&Q`li zy~O)@Wiq$u!E1hM@7$k$Gp$?o$-g$uP#y6cG-Yx_10k{p4oEQ7chj*vH`ZH4>ermQ z`6^NotMW%@@gng75uxu%vCi_LVS-hhR6{o$Fhsq_J|{NLjFY7D@T%OrnwO^Vdy)ZF zF|_r$*3N+-=FDOpepY&)y$7Y<7 zI5fFmJRiJ<_qUOGYSu1M)$4bDn?0L~DDiERidQ|KV3V zhaz2W&j5x6vzPm#?M;^`P|q~+%vjx(4*~3Jm$Aa0?L_4&Ne9pJgH=WRUa4z1&Osec znYWT-wMxHVH;T69IPXHq!9|RF4HXV8-9_*b>u-Jggb{zn$)*~e-222`+@w9&UP?O7 z>W{-FEO#rW3X$3AC@WQ1y!OJJu(`BiyAtx6#SM8CJtpK=@|15(N&#NE@SJhe?v0SO zq5XfWiOinnTc--iGLI!xIj;G`>gKNv9@q0;*jkn}-=yp%*I4_?K~o55#RXClxyNOK zx(Wks>@n!mzuEjXj3@`)#8pY_S&@Tf5@mu(q{r1UvaYk0?kcb%!+#H5KlffdZxQ+= zM4<$q`Xt%~{hZ9*T}f(tW;SJRhU@8HnjIK@wse2oa75i@PdXFRvW@wvA+B%mc!a+) z$0{bgZyq`<=GOL_jEW8}-Ij?`C_h79LL+A!SB8xGEVIq+jE~*sog0j7 zT`kW+X0ee(c2y*p*vm0>vw7IX?ZfAnc0SVlu3ZGoPrZ_d(%HrRcJgLXq%wI6fHDCa zCR5p%Or5Key`lHJp{j6XBhm)B<;y^u=L~_Txc>4%jxzm;AAXC^u*JJbBm@ZE)LBMc z8G*%b_f}(f<3BwT?v2pWtcA@Q{>*l6@adWQ?VaEibO6a?Uk2@4%Ob(xN}z+>n>6E* z*=?78Da+FQd7jthG}CFb25d#i1G>Q)%(~{e~x8^mk$*bTOz*z4} zR97=LbhNr=;|bY5CQ`Pe_=(^m;8crEkGjB=ao`XuIv<_-Pw9S!KZCz!A(fV06eiaZ zOlddihKH~`(8C1`T~DsyI!qnhoguVti|EUG%2cP7q`CVH+EA?3el%34@w$EuNUJL> z9ZwZ`ZnUiUYj1VetWr?N9U-DEjSi*$y@qB}|7UP1YZEvec0b5rb-(Co2C(?IrVwh3 zqx4AI-q6lfna`(v5y_$>;Z>Fpg^OxTJ=phTHjtC|VO+^u zzGhKzs^#+{^(OBJ9CMCzP5so}Y3R3Fq^>UsiTOqhCA$l3-Kv(%1L0jaZk-!pHZi*D z-y^iL{Zk`A{i^Tli|Jz+mK#RzcQmfSZpZKPMcm||&!_&9*17saxwzuMCjxw*~~OVmETo}i5p6U$4#K79n;E^w%AeSKL> z^3ImK>!xdg`Nx?atcsM*PE^u_wbfov4l0#|}f*KZ}f<4}~Q zy$nfVEa&}}@i__8Hkh$hImX9P zDQwo~&Bv~Nu`GJ64l{Kzxz%7Ad<`Z?UY4amc-igBZpCNu6PGgq&`-ud^w+-JUdFzi zD{`ZIuY)ZQeF`^czhxAYbKk`4xW0<7Y= zz;KT|O~s3}?0-(nZaUk#I!;RBNG|sTJ>IBe%>C5YQ95dbw8_DJD%~Qeiny2apB${X z{X#XoriJRXwEuZC^!y*ZQ*BR1J~x^%3ekp`xf21LV*UPAviN=S13l5|7S!AS_5&2T zkSdRzSjnj)mxz(E>Z}OPG?JfTJix2Es6oaWwxKwEdWhU z{HvBcW+s646N#6^bdzs%i2E0;&PhR~)2y z`x!-!eswlU>V~N8xKshPMW`Yb*=F{G3E7<_GuK~0_{Ahr1c!LYiBj#Qb`qP67_{Os zxMJwH+W7=Q;>-kWcTj8e0>#_|KaqX6Y}l4=hjAkXD&@j1Uof~W_wppJZN(*@FG@|5|;78v()F1RMMdPl_igqF# z(5d%>o4%cZDjv6qr*l)a+AF43Pqa!ws2epf%R{?+}WzltH zK(odaEse{mtV0`)5MRgh7-tkIs$+I0lVH~p1hjbj0B%?NM(E5JEQ%A47|qH_u~qu| zUxh;KClN>YH&TqO7-2hTA#%KMT229Cea&UHFlR)Y+MAUYlB}4pj)c3LASoz2k}aeu zVY;OuMGa+tzoFC_)3Y0d<$+B4Rf+!&*#)boM`(?907jxr39sYU3RmIc^!M$n+)DyY z$8!<9DybFRIc93OLXrpm!VCTb-I1g; zobT@E=CVd1S6f@}C!k&{`T7)pWX4hLP0gOgrQ3`@1*fG_i)7jadQAE>T%i2hyHzxS1H>Q z{20K5)__Vz9;C>)U}z!dVT?Ai0$?J|c=wF{_i%;`qr?3I!DRrGv!EwfTTm-9XXkEb zI#kEZ`yJQv4!2u9SRGcl4J%-4EJ8TwHW$5CYc2}3r-||t>*iNe{C8k-Z=)pfflbY} z>b^hg#FMX_2U9H$d|r*v>Ua|ZOF?NB|~8cI)trn?A#W!R{EEezKi~VCfW(8 zkOxv3(>$uk&5w5tddzrRfyJWXDQd{VDrC?@2$kPjb0k}lf>OO~u`e5}$J#&`lk6mb z?@c_l04V%>s^$4n`-9v&EZR$!etobjS#(SI@y00ov%2x%#PC%{(~0|OT5<3su)-Sw zXtDeA`|<=-to4TxtX&Q|+obO`v>l>$C7JL(b%P=gJHp|HOvG8-+)M3BkNruW-`pj2 z?Qs1qoHTh@6;ILL2%EG%(G}{GgjCn$QNW{C=#juA3Eq^@R5%Z2FIxmxeE;g~6(w*r ze0H9^ZD47y*RH_2v+ zt!qQC&iHfzI`p${F_ARk=bw6@8-)#j-CgK~Ay+0**nRhJP!I0DqntdRamK16t0pX}?Xo?p*1RFBUwvg!Y9q~mnM5#~e#gH=U{JGK?n z)Vop#XE~2mJOlWaeieEC_9fr=_w!AUJ0R7JN`26ae!xUcu%n&8%G~I);>?iRcT3PL zw?QZ8LjzkRmnW#HbB}J)x-(CATRk$ zB`H_7DPvz1>W`Fd=O(N|}=EEpL z?(DSQzP};xuK0Z~L;fea8yY!=(4^fHn+W2JA>I319tTW_e9h=%x>Ni za3L_P!%i(A)smlw&hfs26*=B>t9;tFxkU{vnNUu(*Gj+7pLarvF4=HK_Zd|CD2G6p!=yOpxl z_GIGo)&4ct--4~v1sT7Btr@QkkYV#WkrfFWVWMcfGfggkfYIiQk0`pHx`!;Lr}lLQ z1DIFD2#s1>%M|ZnWeo`2S^X;r+(TK)Dr=ipxS?v$z?+)MD^1*%=C2=K-cWNVN$z!A z=CV6n`H*ex(x<<-9hhsHL=D+#%b)10vS}N`BFZ-|;iJA#0T-X)87~V3atIrBq(yIW z?|4&1+Az*dbQZGBid_IrZB@y~LMSOlx5xmVbbU*KmU&^3alxP(TddH9TxuCyvUAC2 z`5yQ>w>TGl0)dxeF|2`YGg?K(&h3@L@a!!o0b+7?o77le6_<-bC6#V!Rwv1?W%WAq z07{(YEU}uf5S^Yt0yrMidj6!`xl2?asmhUcN)L7lsZ%mRsGSwy@P{SqM$wrSEkbLj z^5VK#kc_RUW0*}(`J*b+^7>k5)&1b9?}Tex z*$$JH`nUJ6@F(e>wFA{VNf!=*O4;g~0nR zdM_o+CJ3z2G!2Mw6V)p06b~p09J!aF2i;$Kqw8n%REI-f=o7LpVt4jZn&aBLp0s>A z%P-C!K49eVH5|?UmF-Jih|rA+o;;>a$#y7+nbVN&&z?g7klNi%|KW`JT^6u$YXDG) z_kLa?rgY0M@n+_aR|K`#-ReujF^XK7@ z_hJpS$#5s zYoqR2Ec!gAVd8LwI+sBw&qNQ(tSA=}Z+RJODi-Oa)flrsI_oTB*froA4h_W>idMxz zux;x^tK4!j^0=DEb1s!P@)St}lGb15@m!R>a=;B*`Ju$G+UI+n(lxlrx9!{AQWJ3x z-5*tmC9RFk6~^?U6Cj=6M9iJC?!b-hxVz3ed(_31R^(q!!#Zq+i4tu+B_&ah7uGs#iwk|{)HVC`kGHV;Y>$*w;ATU7Rk!kUHdMfRY`25R_7r*^IiACe zqt8aaI(@Qyhn)0RRNtmmdEl%1MiLrUBU&e?mA25w1J_)HdN=Mj*M$d&_w|fTNCY43 zn&yQ8CzqVKpw9HL%8f-}9ctMCzE83dDW_h406$!T9<^8W_}|?5@xEJ@o80hTeAUSt zC<@|}C!cb)&0sIilq1MySk>&&hP9t~A$1+El~#0#`HEx=s1lzC%qDj{X#&q1f4)Fj zu*`WETW&EPxWsxgg|uyhEnrl#ak~sJB-KCai-50ZpB9_$e8t6P+@j`mm0mGT>+Ivu zMj`DxovpYL;)S8hIQ4idkWKm7afx8i$_M)rg>r-7wo{Zo)dy>28?1Xa66I^M-bfDn zq<0l;uFkx4hNjPy&0fKvut%8>@U4`L)g3Rq)O;FDSc|t)FjEQ6=fBE|Rvs-ZTr)kr zG|dhAZIFc>O;)qG*BErK_Hx{=!{}+x@iO%zAkYH1SR87R6c-v+MlivVtxA@x;Q?Z= z@`1u!qfGAw3KN{#n*^uR2ZGVw7DcR@;`I|{yMrS$;iu?*k3?A8;mmyS?KSE$P&ha! z%T2D6_dJ)yc$loNT`Gu|1|EcC7QfD=?|CosrZiL9;6E{Bv`%YY94|YT+>eVb0a|0?gbzHczT5XIe5| zX6LA$U0n+}^4vRPZ*j^#5QjJfZFTpyYFnKiJn7W-zG>#Ykymum=P>5+G-m;Nwd(H1 zSFLhquTTQ)tZrcK)73Kqh^sbznsvrT?)ThKLwMllg#Uvj*n|nJ z_Pd6WB-OH*b^nYS4O=hnud?LixueM}0nC!_v_;B+rjlEv+g4SzfS%&u#&>a=i{O_h z-BLqz*u!4+pfbNjCG>@?BX9ZP$HdgPIjKjM$pVvVX;vertD-n?qtUkCoJY5=XoN-} z4(-0r0@c)?U&8o^Y|JiI_^OVeYgW%zQ0p6ZNisc3H~w?KXD7pGdO6Ue%fgEVEiGc# zC~fql_6>I_CtEx$=-aCk?!d)S_DTrVuush!6U%64nkd`G95Qn-aShDX-O%|b%AgQIk=*&W1^1lf4tqe``%YX-2&;a?Hs(k|?k!^=E%v^*cIBVJ(rG1&3 z)%*R+BdI^E8x*d0&JEN7sbzxAjVj#PL`GW%ZGxP*W^DH)N-J#tc(SH#Efwyn0uM8r z=(Y&=CZnwS+B8>m3&?p@E^TP*-1ETC@=^;Lx4%!D-?yGBKdkg-=%KHzKj%m@K`)S& zG1>pVW6{4yiRN>?qZ78vR(zf}^8A`!q+JQU=_vQbJxzQOdW|5~`E&_-O>vupd{d)| z-Q@Y$M;w^3mn-plt8~$9(rSLILz|66YL3o!w@B491ku}`C#%84oT8>jo{uAqZW~NX zbo;CHJ(QSI26_3wP3v#L(9S5}c4Bw$Yx4HO53a(s-;n$dm!S(l{KvR7Z!6VKe z5n^sbneK`moD`_eB^r?OUpnFs^TP8ODu$8=%G=2-t@S7>9}7F)@*=MJ7pK5`J@^)p;&MOOD&7x_3V=X*u$~B^ zTW)Oz4I5P342fa*e8$;DLrl(_-)R+T4a+7}WTQTX3+I1G4yylC11_n7+Dmz29oFcX zC{V$00bWHZwh*52;C%*k@reSoFq_nXV2fdcp0@=gcm(szue;~wZs?9Rl`E;S2HQAP z^UrO4J?YoNH%uP40MsV#k)u3u*6(WP@#rF(1T@R2e{tkS1LjrYYnq@PM+*+f$CC%P zXG4Zl*4dZ$Y{Kn%=-X-wM$nYZ=T1d67s?YYxGow{p>x7+eDGOjzB7}zm`SD93!Blg zP0;8{XysU9J|#BRYJL5I^EPvu>v6dN_9(18+t)e-=VG$7z%PGYxAqv z8h!_NK|k&>GwmcTuAbYLm|V_HIiAgp$rK|q{o&YvuY0#Fb^HoPdazaw?~5%$wuXIz zrbhD-Ot!kSrp*v4p4hM6HXC9QM^$TDn;nZa108I|#}Dml=0}T4D?BpY-;Bs)Ze`pj zwL-Vi2ZN}yzPNT*Hl41c$!Fh;Jg9`z@?MsUK6vwY0sO7twG|ty-`-QH<&pV}&UlHR z7n=Gdt5kS2P=ag*^AFpCJ=1bE=HlFKSI41tStev^;EvNsS5p(9s%X=^9ME)V7lT3H zFp)+|a;lwgi*x3*<~x5@cd&rL+2ZJcf16Bal>JL*%!%EkH%P_CYwK>2Rzx}$V>NLh z++ZchYKQHJvF=wt=679Ho~e%9j^=?ittBtN@BefCs*aNA7+{~CRg`JCOhN2524r6b z^RCk_YIwI}x#8oB;~L(Dzp|9``8R(_^|!{B3uQ^Q=%kHyI<>ZNE7F^_ zEo!77(XA^jm`gJ`JUw=vsy z%qlSJR%!d+`2Tii8=Wpq-HZl-B(myxbx7B^je?R zraF=7);e7$WjLUrUDd^JtF8fYm6S3gENHU!-?&MmC(7mo^V<25PE-6)W3pPNcwv*7 zJtMV*nr;zvFl(D+=UVu)<}?m+9#$hy^vY0XE6Yg4+hP6?GkL2K;G; ze~KU1?P5t-jwMxEg;Q2y0T0fVN}oJ(kt-&>83(Mv&@QmmXuoJ))@P=7alDG6T|aOS zb+(Rw!-2fj+$iLMR=4FJKjxaxQ^7Ozj-PeJCt)wiKQz^6?kt>eo(<1Wqdf+Z_3E?t zax4xfG@KIyYctY+PM3ad`<6gvv2HvM+M{+Cn4ljRbMIH4rZ-ey7Cai=fep93bH1v& zWa9wzCFOBa?81=KkGxK~Qs+tXvm_GHO@DU%*0(;V&bV}%l#e4I_tfx&ii)f+0A#po z=ei@qoy0k9vT}a*Si&G2Q=5}WPI#{bQ2sxa%lC+(NmRdWB1of|h@$c9!o6WK$mzv$ z>Dxdpn_*N1RfYdAKaQGtPVbkt8RA=>Dl+{-b1**G24oL z^gu*U1M=7&a00oBjb!%MOOYNGcnZL!F4uEZKRw`&&Hkn;piuTm6m{!A+n;_qSa#>@ zSq|&5__FBi+VvaFrpczexwLnpbq{g<=Sig*K0|d;MOUAJ6Hc03Qk-We4b>r7!-7+) zo5D+#-1XsC+DA2)l;_PC8MiLnUg&}c6uYjyV1kz`#p@pr3NAn~pUTqQ&k(-_`qaIq zb&=V#KTF9`d4^(N;S}e;nJ-Q0`dEnTXN7d2&UvkneZTxSf2;BwFu%9%7Q6D%;+^^h zUvVv2y&F>-zOenrjoZ#ai>Z2^lFV7G7ZJ=m%IV(%;Jju2Y+>Jl}D9g2YalSJkc7@#@dWBPfA4j?uob5$E$==}ZP~4s?nc z&i5oIbyh~d1fHqqcq)TUGWor6_<-)pfK#a*UI`zx9qWzQ1szCGxLi3DfOYI2* zD0Pqt9&Qm}mu5%Y6YPx-grbb@?FGrJ-zR$aW~CTcSH516eQp>wZX1RQ2GZ z^1-HeU)fIP!kgh5$Bk^_%7r}2+~DjX*q?KC$gBHB{~O(p2@+}Z%^fn3O8~B(^(9R( z-c{BB@SYSanQ+rTksshZp%mc|CmRMAPx|O5dtBDarbgR8_^yB#YJQ{c@F%5swT9Nl z^OWm04OG|>=kTHBjHt@Orhke2+MPRc2dXKUH7#o)iN+7vKDoRu51Ktur}l zpttjHbPk4Mk0WtzX%7xQc1}0Dfu$>cHXX$^K3e%g?Rn_*yiacs;vY_(N7=1@s){!m zpMrT|&-+#x|3LY!j--RsqK(DMGlo!?{d<#ltAH|r6ue}mu0d^lPunT5z8ihBIqtPf z>d^Hsw=Nz{U2(TjHvXa9w>?=eiZAI-cR{Iu{p0UiM1n%{y{mP>b(iU?`hi9bqkxXV*fwb zJnP;6iOq{GTkgUu#nKUVAL4V~rqK!AU0WRd1LmEx`g(NFh>qe`2>My4s9=eE-7iPI z;*pj)8|MA6PEPYJYy1eZ!_~Ngonu}M8Kl0(Y_Cm6X9k%*bEmre;aqHG3zfFQtBa5< z+jeH39t8nzk@JE(*%kgje`w)n7T=g#YA66IfhYR;$dG8tU;TWDqqM|gFDodk1gC43 z?WhJXLkSYSpX9`aG9^ElxdL<_f5!p7Vfi&&jBH-KrEVT&UKrR$7B;Vuh0WaB+r+_! zsKFIbvGs{;{cY&_hxO!hpdh2^OhhP|6l(_UJQ?w%O)b=Lf; zx#A~SPO*2&(UUgw|B1cjd%~qIobm(7i;dHdDoxUKn|G?+Xghtw)sLY=ER{KGGYy_N zTPgGSf_%z{9PBunJHMUDbF~3FxtK#8{TK14vie{nxi7q=TP##9*+*997F|gspI=|@ zGj|*A!mb##@M<@H=>HW_qGAYDJ@_H!N-4Dis(z7%{#rGWdLpnBaE^SZQ2WTMG|e6T z>jbifM3x{A8Vu*|Rn+g1lRDL*#^%q+$KjB*roCwqH80f{D?b`WZ29`}F1MI+jE|`H zRO)<|Vf3)iBTelUxs8oTKWOq0HJRd+vmi^Pi7I#>Su08Bwwfe^_)uQv)o?QWpGYgt zK_)&~w|CVrDrgRH*L&7!`!XJ!Q8#TXIX!&>qQ%zAoeS4A`q?cZilX}m{zKtOc zX(7K`=IuEA`{&nV4n!UOv!A4vjl9KkU$2Bxi=A1nJA+kFVh_%lentS<-yg)TVhx|AyMB4eBOKrkh5!Y`k&*|H8)SqyE9h>9#6Y>~exYBVxBMYQ(R|8mg0dq=}JdJekR>u+20_ zDfhHn$@3RoDFx~$N1wd>IO!Jhr|*A4W7^=)U%ywFjpW>KIWO5HQ;guQ(%XXreWfU4 z=`GdnYJ`zu@|s=*nE>{@3-$_ax^B$~zRCx5Oy~EgISu!H-FsG-F&~NTjYUA21YSk+z4Q zoJNHNCm*q2w!I>T_j4B`EI;Mw@$=?_UV@{8bZg{p$PHM+yDl5f!V_b`Qv?|kxt`(5 z(n*`%ETc-8-iu0raNyrc3+T&&ap4hN8v2)Tl%+EFLe@ZC*N!J2e&k+eUnkgl0%iV= zh5r=d9@Ho4M>vNP(c9L?G1S%cLn){!%>zQE61rsO1FmaKUbUuInG|~+2V4wRfZ*bK zUCFhX59Pc$8==douxVbDgc=3J6*leRYZW%Ebh-jckakaIguEpMTP=13_U5+#EPbSf z=@812t3EPM1?;EQJ68muB4uc}_WTI}OGOJ}xCcSg8@u*Wr6v6t4zwxaJF8+Wm^?Fi!EwQF5M!iYB^f5MKChd7 z;tA!uBS}W0owJhHc%BmYsWtB&S3Gi@%pTluT+M-WBm159>cob%}GR#6OAJaUQ+ zJvSf=ef(Z};Le^_XO$xjhk>CRu*2D#J&?gb6>@N1K(bgU^hfJKJs^T-x4v)wDzT1?DL7XcVwNr#@);K5X$IAmWVvFcqrC z4DOnTo$^MfN}gr7<@e>t+_1~8_X5Lhr3qt4Wlbw%LiUI?>!3Z@CVXpt*`xG_QzehB zf_s}XSGKth2KBwo{(vHh$5Z%S9`<#xp7c53VTy^~3D&}Yq8tCkjgftBE&qG&Eh&OU zh>^gMJN+8t-ipEx2iqtMj(>Nd)Nc(n39?y8Y;Z+yrrgBzt#zeF=q~H#S4R@`{L8~J zKf2ZSLn9iE>cP54h8%)KM)$k-RMU+99f1MXsnk(n80lz7t!8YaAb+=5JOrp_+z~w< z^Wz!jf?y|1jW_%i8HIxPSFpgsdMk3ObRTVvj%d7RD5Q)g$BoL(H~I7zg-si25$$jk zIwLmTp8&9K()QuYy9%2o+2oD<^F>~(wC zH}n*rvRFJPR2g;sedTO=k?sRdGtZvC4s4gl(!^Ncv0K!2;XET=l>VIPXR6>oWRvuZ zI_f*~+Y)Jy#N+=FuN8NWn@d-&!F(JzKdD2C$IyLOB%gq4-_sOrUTl*23pt@=$Vqhy zIsLxUkRj*8Q^+a3d23u%qfW;gckemDdH47NctCX>U(PIEjK3&Zfxr(*x0L${f6v`UcPf*Z;b)2)x)r}+`gMW zt6rzqBq!Go9gLiwILdcAy@KSlBtWF#kY6M}H8@KS@)G&qbdb3~DKg0VwEOP&UXdI| zj#L8WP&~at6hkuP9cLFUyj_1|X{WIaLIvxvd%#)o7Udbj+To>lCm&uvWkSd=CPLG` z0f*UU88jtNwv#tR_yz#o<1I~MPY)!o(4ca%2CPweSdQr3GcNOi$xGpKU{U#Bt<}o4xbq(7mwufrT#HuETw|!;}WPthMzW}pT7r$7%85Aq7o#n=VFK)8L zTUGF~f-Id}Lg)JCon$uYCIUJvuWVA)`F4N7`0s)`_;^&?$X^Ay^*8CwFKLR2>oQu; zw-zGu<|C!g(choU?wok6lF-46;p@JZup>A^#&|=B@_GbL6MWG=_GUA3$(@r{hSK*R z(HK&Wti(mz99h5WrJ>~AKldB${QN{WPOo5qX$-MNMhl~~_T0}Y2#Z3^|8@QIa=X4fp-Mg(RP+$J1 zcUt>8q=gLA{~u%T9Z%)|$N$rkWJfZ~NM(g=M}r6)6K@$2>ST-`6?nJwD&}@Am!quQ<+iu5&rB>+yO#9`|Q!zUERJUbJIL|Bxx!Y37fn z(tO63-tZQzXtZRslu_PZPmKtGI8($0B!@k69++|E^7w4OU{qmIH-PESD5YriDip7T zp3=(TSnr@zM2)jgp{9>qJXAgL@#1p^s|*Deo|Cy2{aamvR;+1x#_KU=Oy8qB)uvIG zU7=6Zl|nX!93^-!Nj`UJpG}mLZM|}*&5xrBRR2-8Y=uRhXsLC6uFg`vxNXQdkuRsy zOc_<0@*K(VJ5UWBHY6{59^!lO)@ss~{JyI3G}r5=%MC$TlCYR%VB6ctbw@-a+x&=&P){6nx3+97d0$&5cV;oR3kqS-t zL`stU_^HVUiG*ywZ&xsrOO-#{R=+B~*mL%twvWF z_RPkGro~DHlzNSx_RCrY@H~zb9jdJ6WTXMh^23%KF3esB@8`N#m4(Br zEq-+??W~GE@=DV@k!SH<=BzW5hHj3mzOtV{12n9X+Y5%aHrQWVO==w}Ei9(rdT)pGP^ zB+9u2ze}QN`g>@d-BQ^Q5SPK2t0lG%$j-m3somLxzT|#2du>^4=vZKbtv@A?L8-{SenbT*e1fBOHY2zakl!wDpa(bFtxJ=>&{utCY)(G_F zy&3_JJ6)MTUXD&D%%JJTUO;vO!%EwO%f@YH&>$hg^B9A-txUU3%~u*aSz@hW!s{_& z+N#x1GJKkY-Tz2a?i6!ihRhm{Vzso_mym_-css+*|%iUdO0O#`LBbq=}!t$G{LuZ1~8+FQ6*W(`e7>nO1Dcm0*Wz>bz#gGp-TCnXXF<{4~oz zhr=QVDNl0S{X(w15B<8Y95FVk^IeGMy&~|6Z6$nAi?VJ;VH{s~KlkUOCjYGyVJV3d zmdGP74Nt9CNUm4bUnMj!7i!}0<)+Ys*(?%ldVr2qr297}Ps64c%oYZHX z)ArCHK`5y10|V(yL&>1``?@>YZ6r0o`bvQ4@Q3F8r7*jz@zzMpuVeb~gs=Ua7LLMs zvX#g&ZP0haNasux@5)eS*i)D3f(1z(+~kKgH6{`cQwB*k&r^lWP!}H)|^IO z?S~V1<7QGm;e$jAO-vDiljPT`ZaXd7ac|^J+9-Y*7@@Cy=rrc7_)JzO4Y{TxS$5{h=mIg)|tmcOHGmSRx$R>G!y+AU|}(wIk$d_ zx6k8a@p-~YQ_c(4&3~o3%elN0jbZt7cFn)kL#Bpw?zT=!u~G%i;|y1vsLTomaSy)@ zX@2`3tJv3OMw*xzUb)(ay$MNt18zbRMAfg6Af@&Bh!C!4lasY|;!PzooPt~i@}mw+ zVn>BT_d17dMn`m`7rI8LpVU>-Tutb#^1%kXUx#=1iv%U zDlQMx&pEw6XghuTvd0fCrqFxsS{vBRy1bi)Yw~)5sd;}b*CgKf>nb%2=RcL?c(yH- zE64Sh*t-xXVnK3OyyO5~w(yL4C~KQ{XbDnAoD!!t>yNP6??<{U-zjSxXzFS|!;i&v zZ*N6T7dtTo!f3D$$6WYNcNF_AJTD;tULrzkUEhWwNv(J)JGXzr!rVU}V>jvTfVfm5 z@eJt>ufmpOd#(FLZm+(voVhkXM^7T8KKbc8XA&ZjXLF&+_}Y3t_7NXLK`5}W#LbN+ zGw*7qipi?PFVaP~1J%t?MWJ^P)HsV%tBVBv>}Z>NV$rtTs}bR^K{!O&uW6R%Bu7RI zW%j?7reSZ?rlOKK*)d3a51%x9bEYLhWOd1w!^y9=v+VwqIb(O7_`&-H<5Z5>yN>T5 z&Yg%kqVphYs(Y=j`Axvht)efJa-xM6joQJh=PtC67%& z&4#u^z${%|xUG}0thW68bNIu$T?dnIU2kOAQxAL@y4Ekvj~_};C)4+=xgIL8js48@ z=KMVU3nj_0_@tCz21GwCgywT}6Y$RKOG%~fZcM%)Xsyt3FaI8};=5&z^&0CgKw=Q4 zq|0i<2r15h+sVT#PBzS~+%W$nkKtiPu4&0{F^)Genms!FX8V>_EV)oA|sdDN{ zE|ttGsSyMd+xFm8rd!okV9h=GyA~iUysl4l4|z;&0O!^DWL%BCYN{!ju<7f?Slb(` zI=kxzCN8;((;e8{b+y1)ZkvAyP}F838*c)9SUu4J$vMOAiy9?kf;scmw{On#M1GLVQ~h;XL#p!^9SXSBs>};MH*K=BwJ7X4X4e&#O9>=FDSvL2Fvtp%uxc#WJX!^OGwYLq#VE*$i|6 zhie5at`MHg)>SM#H8~=<`gk0qrukeGx}R32_$Q)gx2k{9DCAbBAx=;CYvTOP2&5LX zeusDY`8QxmG@9BYDNi zI#W^@biP_NsJF(6C3qsJh3?63casmen|?K|yPRoNXPIfIxR#ooG4@9DYGs8&&_pfy z-0J)FP4>A+twrugWnrqjw&Dn@E9<}>j(?B?ay&o$_p|mbdKkMYT)CEi@=NrfO%Hmv z-O>Byx}}?^J!{GYUcEW%EDY=D(F@5>T4X%9K(n<>M?nF8d~~ zu2R-lrVU9rW)r8w4V7Q89Wg)Prl={gLxf2wGj>xCZ;9w+ZxFAZ4t=SBJwBzn z!4&rmy!tA%RY3+kqCn#WmRO%|7g%Fe8?{xV)PY$6p=G;{tv6(m#q-PSjhN*eveM7- zZ>6?SBR0Fi12xM;w<#DlddY9H?=j(tzlMx_`soqj9u&fWMAKxn(leaJE6X8sg}!GX z@uSOG;~n^t6hLJBZsx}ef%9#LG>}nOQNyKMau+6T|7m50g#_io_cyPuY%LR&eRmHI zRvMTfmD>)vKuU)Py$mt9o+ux6D7NcbDw%R{{XP?oOnit=x0JwC)ll5kATejlT2OX{wRhuu) z_8)Q_tIezimUe6{jI{qHG#@YkuUaC%3A(VCG?>CbyC6hZDH;R%M>1Qpu}b(*-=nA+ zsT(ECr@p*owKd?OVMiqyeK&Pu3I%sR|28rYq)fkw%fD`vl$oW{a`GJuMl)$r*!^XK_{_NW=Ryj}GdCJCT zOKFdeE;9*>v6%ceFBc!;)MXekP?uM&QuC(#<=7`uYk@ZVPw%qR=ilBX;rfEy+MQB2 zsH8-Uk%>j9w**zv)DNfV**}YxqAJ(exD8&t`-|oz>zY=^;^DS*D~1i3Kn9oRrI>gh z??H97`2tU}jBLT3;g%`S9M4}O)$S2i6v!kdX}m~vcFc?S3f`&&kDIODeFAk}fIduh zGnnA%`a#h8`KTR2I@)Q2`z@^AUlMIe7Q8k*2SfMLA`c?mQ2Td-OheIK zF9G_J1DJ9)sa?kRPE5-;xxvx1R|i%!oT+%zsuV;D{wT|7k+?@d!7?(o`YgGV~RyljSNHO-urIdAr z1@k{KVG!@|xIIQP;FM4BLJyk~{+J)s`;V0H#%iWaO%h_+rCJL=ou%zCeyA=G{rAPEoY8i{lM)bG*q%`9R8RrV&Gf0y8zM~5zrKsRWLJm@~aUn8;e zuNl2sn(&ku@(Sx|YA#D> zGq~92RCe`y2H#E|?c%S6S}qPfVxfKuG4H9B6~Wn>eaUyd)G|E1sg1u+=b9UlE#N5z z7ZV|hmaAwf{4>@9eAD^U+y%rrF3QNsF1@vz%Fr-ylKRGdF;jG;quQ)IsK`BWFnuj+ zjW(EeCN-}I1~_Jz8ed1FOOmiFT>>~Oc5);9@%!LE!jpD-*?|IMUos$4F(CU%M{9U` z@uHMI39U5!DSzalC#|Q6vw+9t7`JYgy3l0-Qbjt-8!4HVLNV!cO>tRIQJvLYeN13tAM1Cw)lzOZ3)t?v!qlskDW+amo?AT=-P>ms-g-laS2S8OONP2> zGC`k%aJ+(Z){5oHbTrM5HeE?E?B2yxnoi~a@-#;i*fUPjzOmmMwiv&b1;MV*pD!+x zxfByJb{o^n-u-l3ByakDgU%>SyE^PwZrX@e2zAnIHD#Bt6WZ@|_H_UG}OB>!n-K8|kX34#RR zNstba>|2Q+(d*QOFX!o6qp;ieUXIfsm}U?CzCJ_WLyG)3^-`uSE6JtH^mJ&_Zp!D~ zA|Z)&W2QC$Wa7Dog9w+-8#X6hi2Y@y3_i5JreFkj$2Axnt(-VQ6%nh$v5YqEdlllp z>VG=s80)Y>th=E1x)@Ggo_RN-?r8P6V=mZHnqfbXYf)-#2w0?jp1$Xu%`08-b|~Ag z>_oa8y*N4e&`A{2k=SvT^K@c?Dm-tSBqLb`UHSQ4Bd|FA0zb-RpdRMSua4GU*m8eg zNgsiep2t@AM$i0t_}|J?$i26$9;ZAf?^%$CqdR+crxM1j&X>JQTZ_K|y2LV*5A%&-CjEv!Ae99a@>8 zu(dlDUd&T+39j4msPr3IDY~+btZD@rbSB?V-7X;9+sK17`}sx@ zWeWdiOx#7EtMnmS*nME?iQ4L0c9OdBQ@tK(?wv3%n-6>F?e&@APHq_Sq2k7Mo^a!o zP_=&?)WJ_8KPUUNd}hEvTCA7G_J8%E0q=J!ec*wC#_u2;5c>%+=&H8-^ChE|jxQ>l zSBp7ciYx`cEX^_ISQ$82F#Vvs3ifYV*q!*@D}9capH84I7%=y^?75$yyVqzWpi5^r zpNqIt0Wg_Xvlocbt_1!aqm5=}HG)2@v~S|#EjU|(PXElU=dbMCui{7!VO;!^qva{~ zEBXAP)Gx}HZP4Y>^mjs|PiaVkKkqY3Gobf@1^t7TY?eQM-P7sj&$XwV#gD#4@9##{ z2u?necVq>@6$GsDX%KR^aq_U;VlP+g`-x?F7s(jsM=Hxy*i){x^w2=%7?vZoy}6Hv z+qVJlTIL{SYrh8@?|f_wJ!axr;3I9}kt@pEl?E{G*3KG&*_3ESOCz}N1-HwNmJjVa z&?UgM4qsdYnxAok^YyKSaJ1ynm1A=3`!4tXJHgT8(MA@VHv}t@*)}^mwK1;pyaC}!D+LwZj*k979@krU2A*=jzUgWsj$XZCO$bO9Ndl|I&QM{J!nJ|e zx*ugzDLmiDWODBSzSB*2Exqlnzt2+6po;Mk4ZR9ESS8y@j@(K|mUoSqspo7L-kcUE z%#gjIqb5sX8UnjH#`PrZeV;t19JM|{Ahtfs;c4&34dPtF=LV}UTkmggHxus-Ye0cYyg*`o^d|oX%~{BKcTvN~ zp6qoR`cipyi9!9ur@Mn(*)|^+e`~|oduk1o;56bg_7mD&p^IwMov?sl4f>0me_h@Qh)+ux4c>+Cem8Jh@%GDou(c=-n?Z@*Q)6gcUiG=Q~P;L+@II(V`V4rlUS-H2L z`N~d&x-ip5S3Ir1ui6aS0H!EZlkum-x^Z(?*X{jM(1-u>ApcT{nYD=G)f)u}6&_cU z(1)X{BDCns4R2Q;p3z7Q?x0isN5WM@fvL-Z@&HIt#u?_e`+|ODu-ZL#8+e#q6B#AV* zYAZb%XP|WP4b4s<|K?YX7<9VHo>doNh*TJ<@!ih8HkjAPU)S6r&mTT`woTCP5S>iHTF78@*w$ zs+{tYKmP6Zc&v>$5O`SpO5Qq5@;Ay!+&UMBa>6DDam5Y={zXVlo=Gg_aABtwVZ`KT zPgYWbGYgj&21Y<8wKetVI@o5_t8)^YG4FjdB6JaZx1DHCf)Mun<>qKu1hbgppq#Vq z7%<%xJ;Vio#oYb;is9>CloLAYhqUvZkj9~l2(4hllWuF)wO19!v(K9%S2Uf)M`=#1 zL#)7yDAnlwm%xMMtVe*gtEHw(meyGD22pr)!Y8on)K1y^Ko@Hu3IYCHmd=--210;# zC0{QN>8V@NnFVKRzpXIC+o`^-ps!U1e#OplZRq(hTBT@Zu7uA)o0FxzP$?xox>e z<1-9vqh|PQ__t}@4;7OW+M5>ZP)|pZ>)XyX%T;Gf?0y$K1Dgjxv&7c0fc;mw?cx2F zm$XWwy3`A3TK0OGa3I)993(Swa;@Wl93A6JgxF@roGC%ZIqL@#Ln)Du3NHVlJ3WXQ zqy$BIU)A7ycRuz5cTkyc^d?)1UX7B4j+Ug!#5_8+&)Ze;WldWFIzA^TBx(iw?lXY;csz4caPEZjHoi3eUwKd zJ0PnGRCD}Kxk+nR7+uV3wrJsaD*Zpat3;5_wsgWqubD=mD*9IL#5poDn8 zFT2+^cV{G6T5QNjiEfURIK#n_#8&*#5jQuS`@k1A8I+FmHM!PJ7-W{kin_*OzkR>w z25?`J@0SyT@RD9Drh={{cAX#m0HUPz8B=OQb5T$J@A#-kECtwO{_XYs+KO%rzc z_W$McMUU*TUlfPp8aQ~Rxb~wWLvoQLw*8nfEdzVh$)GBaZVij%cDHdd zy5#eH*sbdNX>9G0Lw#NU~aDOZsep#!}f1;>4$vo@$A~|}{&WLJt?gOP)s3`jiaQWJQ;Nr8} zI0$a|3Ck(6I`78Rnv=(YkXg5!kTmK`egpb%rG=#UnH&HQb%WGBsKXv2s8?bH6jvV) zkX8>^{d9C!yD0Ol4xf`glj{N6P2xC#Cni~5*hj1B>5jrBW2H*1r~9fPZ~#)ImrtYH zb4hLgX5x}f($=L{8bNq|a~)QSZ@|akGx5FN+3_MdW>xK|@S8{XAAJiA0g^8G~ZoQLuMS3tYl}l?DEy^&5xzLv8(& z_9pb9GKbt7suG=h=(P7zWdoACnYYk= ztu|qhDCie~87^%M$O$JL-KZDMtm$)ZUry6m>@a_8f1s}Xu5k}VQOnH@@I(IThaZDA zPCaM8Ypbj3V}SqZP4oGf{UfUmmr}roNY1mnV(}jAZ-&=8P({W`=scJr<*2kivM=Ez zH-#K(&@f~8wtGFUZq8vd$rCy|P6d~LsLgI}agT`Pi6rCeIERg$n=KIy=HbC;CaewE zmDSrMlmYdjoix>-;Z;4wo?Tk#qH0k_j1u8_+`dZ$_%>$6C!NLyFqwmee`@cUzQ~pu zd5Vb}_W7=1T=wq6j=+LXg(A}80myU8Iiese&rIRw-j4J7Ic9bLyhN3W{ZVH!OC|@j$(v@*kiI|;RLMBtaRpJh29}1(qCW9^ zVxRD&wOdd7Msd|B;d}VTl>}3Ae=fzBp&J^uE@ch#>+9LqxD-7UZm8qzzxHB4kppUN zHIBno?UQqOu&#DpG!;L)-0ZQCeljaYb01)Iz^|2v3e_3vaPN3gbMAU-SB7vS=s5-_ z+-?_%gLD}KL9=c!waejZ^6!!(VKAUm1#7_tK-$z4n>H<%Tq4xpdhD^fpOY8^<&84) zj#WOq2e<$8#tgzR)hwtpnoIZE&0?@UN16=Rb!pnEcZ(tZUAq^%vQG3Hd+*=+P1(5e z{?dXfhFkkYx{=+s)VqQ_Wdhfjksrb9#mEsJyB+*bAYm%DGb>voarGhXA0~5(`@99c%F&v(<>pj2!-a`xb~iN zb~TjPzfpSF6A9Cum;c(=o9r!IMX38r2#||QPX1_hz$YES+6@~xJvNn$XHJMi83~wp z9R8?#pssrj=hV>v@c74jd!jFrer>hw*f)1@9wf@k_<%iHGm= zVi~fHcN^lB8qiE8SdsQRv-R2R46-FCg=2Ix1aSoR)-!(A70ycyb(S<_$KmtP zw0Ffz9JW0^Ke_PiU_W6!D=Z*MeTk53w&Jq(3 zzasTI{JX%|2cw8Le^*JCJX^KvidKDpKn*Sl&Xw_x4~g$JQaX`e1gs)TS2ja~D@C-( zuC=BJ#aoye*_r67w{p0wY4hq@WHotS30$HiO88vl?9VNVK~Ww5zm}}K*-SW7ZM?ld zRqer2Pf`=~+v@GQtRKD=J53o8u)XRhV8>EC5af+7&V5){N$F)hZ)?y^bO9wBc{JC> z?rV@Kr&LkBadSb~`}(exbSH)Pk$sd%0)1v~Hh^yS-SFM#CABi|Eqyv|(dYO$_x}f~ z$ljt1y^z}t)-;zVR}b~LBWA8?@+P%>bkU zXyqXnQBIfQZNwN|mtLrp1J=KZ{1}qEZlBzBJUSE|@6w#)o17O+=Gr(SM998=O?pzN zLVn4aAkXqPuEeNz$+b4f#&g`dU97$XNA^u8jhVM9eccP9rd==hMAJnZ&+>xC)Bm`E zQAmae2_9tiqCnz7YOs3(vejOxx7S~UG3En|DvCKlyRuMjWiP5bbU*QN?TVx3-1qXx z9XV1pAM!&ziz7TehJo^MnB7)VKuhSW+`%VU({33fnGbudhfzUNbkNYK6H(tV zi{ss8f(Kw3(_7Sv!eZD2QxT%BWVF0T(+4yuR= z+jb?5OC%}6zqm&bz@AUANWW93{nB8$UCq6-Vy!r}7b!}r^u)+UVH%al%C@3eM>|9s z``Z|N7cAPoQjMmq%qga+vnZM70(O!wAOp{biPW#=-8|LZY`wNcv8dFmV39vJD?wLn zzkjNlKf4*)MoydwaKRreMNA*uE*yYdDc%-cNP7)mCuoc|NX;H;*KK-VDcnysy!%C@ zh-IBJKkS&JOu9S`^az^)#dE^xC+0@8PP?wjo5#s-aOv1rV4?2t?m#%xvJ9Bjm_SXx z3BwhNS@y9v26_ylmUJy2h6Sk{FCUw3t!I|r7E;t&cH+_w96Rs8U!uHE={mBf@Opy7 zXAkXu^^2N!iG8^d_E1sH(8gYyE1M8+QFhFk4&h+hVhTs@ke(U}T;owqM!?vCwMX>` zix!$HS1PaL**hK~jnx`erjqqoY+pgvVY3s>1}lIX zl7dZ@&}${~)L*&VwCnQKh^LERww|uA;sR6}9%9E(h&%Pu@zLu1my9K^)~V!3xe-=M z`xnd(&wJGrLYK0XyXhnZZYVz56jo;|FuoE=&C>hefAwdP!Nt(l<)BblXxdLDq+@7S z$?xi8SW7PAp9*v`Av5Ln7XICVrRri~6W$8JcUSsJH#LnxsWs*ep@Cx>3#F&e&MFd6w&ABU{Xz59s?^t`Z*9~TX(2AVi+T(@z03$gHI{3b!%zbdpaudmiR+`!k_}N4)4mRazCD{^8qxtEVLrdtSKbR^3>p zpnyGJB3>joa?w4K^RZU$xQorG@{5iZJrR3$#q4W(v*GqfL$&tnb@s=}?Fe)B_+^vn zgRnuJ!$cw$Bvm_X+76mXU6)m&yNgMj$3L#Be77OEQ|Q7y{KXyCpff=9)Jts+m3-8T z{2*kS>MfB5;KO+>t;E%AWpy$6=rGIkl%#zEPN$zKsx)SOO6~;+;%KcYG*a;4WK;P+ ztBAd())_XhdEz0b=1_P5yt$QNR zeh1&!l@9%HAsY|sz+{Kb8F-Yj$SP=dj-trW)HjCcVaK0&vuvI7$v3KdP1&oKOd1b9 zP4=yH=^se5UXD@wM@SV68lsJX$JmJRxN}}xb({g@A1#oFIIZh>gg`Yx2^nH}gs zpH6&4c`}tCUqJV`>e#9p$NMquIVkSEJ2cZzhP}tZ)pJfQpx!$lWZ$Hf@X#qhf9OcT zavpIZsDGxTwwUrpKb}OP@Srhp&poAMrGJb_IM$o}w76EgV-b?FS`MA5;?ED`N)44k zylnfli+!fGA-BUlZ-Dgy!WQ4wx(f{~#d%VP*h9jd@^<8dB#m90hY`Cqg>n{Zs76y>lGoH+M-2da;YgSzJb z469D}Y;B=Cx_6!82U1AR9s9V9pE}8Vr2_9Jg1?pT^NQ7;2%CY7)cZVh$Y7j@bY;b+ z)RG2=2f8LU2`P9rH2GO~t{W4Hg7X6$)cIa}Yi-Ly;{IL>3oZ9v-f95byP5tU4K3Fz z*V}dvY-@!lFOf`A7hLk7Y#xeOc~ngnZ8ulF?>4dkSk;i(t*OV*iY zr`K=F94O3vb0JygKzcB0Gb$m(p&ngfPX?a%uoCa)9(&k%oS)p7J0d~OEYxH!t*^oj zcw~k4FnnMpSCR*gvjOh_gI_L-G+(9?EK{_8Y%$v;wkB_#fiUpXrr(-gpLepc&Z1nV ze?`s&3X#V%>V8NREGge0#hzaT!wj7rk>(hs2F*yc19tMu9`TE4;2ruu36P5R?a28> zl4)$AYhg-OTk)z zV+)VEdyV=5zVmZsP>ZyO4_kUK4h691q;shbez$TAfUq2U2w2sQt9U{VFJXT>G!*F7 zW|8A71cEw*gndn3qDU-`XFNoPJzS2%wG6=}?f;&-+ADv<$p1AL7U3+Ts?Wt)kb1x(rZ(ge(U`gFD_L0x-tu7Z5*_e7)Cfvcpfw{2j@=U^X zVMaCmcO3PLbX0eMF)4>D^~n?%_YG|R)D~mIp`OLh)rGMhK4=tc{#|gCiMa4C);M=5 zZML&C^j*abBw91CB!IoHtf?#0rBn*R-wdsMI;QFALX7)_$T!0k8b#x60k`ZLT<4|K zME`n?==g>-)A;(4QNjH{pf81l$c={%?^4j{7{K4JP-ng>&x&aXh&8t|tUgs9t?BG- z6@VIsu}1i)tn;@5n)186-SJo#OKR5-P}YI;BjzgOMa8%km%2eM#uB|{iD6C8BNx}d zuaqRw4VhKFZX{K@Qt<9 zT|HyevE%G|pi6E1_C5ndi0g~4=iKme*~{%>9&yGiLNX%U)8Z>T0Fu0xxysAXZ^zeV zGImYIX_EUX4EenmbvQ6{8+|J*3^R<{y zu_q|dCP(cpZtkdY{W@*PzWK)U>N-=&Sj^FD%-OAelDmF1j_yiZ1Z&*jsmZkmCfjc{ z-STBE`?3wW^5!YM=?e;P1FXQz7lx}g8=;kQE!C=|4Sz>U2mW>mjnl*~P%VIq*@^i` zf70e?({|BtE|lx1NJEq%%pk3~&a@d#`k5n9M2$#;33khFf|7X=V@8A>)6P7jf8 z7V>KbND@Dv`mQOR{uYpL&*l7O6`qi9cm5{dW~Z6`HTp#ippWpx>ExH9@>cz80&42t ziD)0*PGL~Fc5{la7LH(?P{a4?{1OG}$hsu?ltPE^hZ*QE24PEBvuKqmK)KScBXM2_w@*GE%v+A2YXy`!%@y%{w4*}Iyf(p*wNFoe6VOu zLQ>;fMr|vtZyAh2amsL(d^`$%Jac!qE>=kH+tr^@f((yB0`SQtk$gXFTYkkE@I-D= zKswQM(VSQq4sU3J3$ZcX*C7$zjPE2x?`QyvUR_q^YX(1wzPX~#;*B%G{0_Vu z;%4KC-wYP6k)igqN`$hO&5NcxCux_HhllC*m(HFtfJra*y6DlT*n1dPlA0h*YUSsj zcsc5QvrIVhe`j%~pXLs2YXUDiWZ9zf&CyHAf|x2`J| zv{(VQ58@*{@Nq^}@#qLWKlwA-Xh-dq`24s76znq!vei06fCtHBSd0yA7Tn{1(8!Tk z_D3%!1HD)#HC%ap(?>gTyAY=k6RWHPyiMqAdNnRh4;I{d&o7PT;k@`Uj!KOIRYgzt z2XT5Lh&}fx4!OD?QbIUS`+MgEXQiqlE{%-ttZ(rYA{lcB+zW#bWu9gPy)bk zo6H)M{41t)&qj3)IHp=th8GiRPG-qqcm~aypo}K-)Su?(v#jk)apKS206uXL*Og7< z6LKHQCoTG}cZYyj)4z%pGtk8296?nu+WzjjuGY2XIh^e{%sO#Y`|CJkwLo;lk;rtR z+Qn6UU0v}FgJtz#FH#EOx(F{<9S7^Fwq9L=?)>s^zD^Be;Yi2&+G!@*4nY%h-| zmj}0sT7E4vsmLApTkjbdbu*S{T~luS1;U{z>U`4CKWU5}$(_C%!!95gSUuP(@NG4> zTxDK+5#u!4wF9D|0r(qLel3`>0L>cgv3!dkE;UE2e=$)Xj}7|kHX`;$y8`K$bo*3s7Eyk zzU{W4=ey8BlYv|#%w48?&)0tD6)pt|CL}dx#0LmVE}6L4ChqZ-`*-xGt+3AJWxU}| z`qtwrp))k@GGsYPHD;Ata&)kjrFgD5drqfAwUiJGvmu^@65aKTwD2v{$-5Xv3N5B}=%z~MMj3G( zM9o?e`ueILz}mGp$>@wx6Y!HUi2dl3qube8s-t1?^~qlCos^ zmCH|l&zjMT8qEH5dgClR3+_(COG*E?#KXhuo<->%cONlqoWuLZacx#j?PWB)8TV7- zbbnP`{yPF{nP1jC=UVJ2RhlKicu3usA=do>doSdLm`Z6LpL)zkC6JLky|D9>&f?vV z-p1OL#urHz zzcTbUJ8zaG#vEFQRJT|frwtbmfd^Ibep8lDcwAoHowve1p?Q}~0AzJ^_+-RP!bF9* zq>niFSVAU|!324>Yx0wBxU|NSyJZdbbuA^rkDERBVDW%7$zzHYa+SLdvI+X`QR`n7 zS5taxY8y-f^u(CZv>%fsg@BNI3LdSvWbvGbV)g4UL+r1(9Szq#K4OX$8fRE-O7aY$ z%1~+akCo-6*E>A-M72IoKN{4@+2=R9cWtacw|f?)8r(d%9#F(SrYx?41F@1FC&pR* zZBCvH>D6sYmVYS@#p!;@gh z{xsxdj7(R7?W>1w<;YhD5sma7@Vcy2vG6sJND*?quP1($36Ms9T3MfB^C1sQ97rUc zKcmb_;fC!YdbxnWRz;q>$g_H1iAyn!-_$Dkau-Z>DS2HT5bkkxiB59Ot`cM4%@W?a zX!ItZy>dBvkn&R|v&StN8u?pS`EfW%FL6NqIOTEnt5{W9RP6_vCj^2bpX&otwfqpc zX`jmSj(4ENUCeFpzJ!F^9^?fv6+9fu1zt~-4SmFf^$Wo$zv5zeUcwdRy>vvbTbcm? zYf%N-hvVK@^defKyVkcnQfPieg|CTz zz>-(N1kl`t5UDdiw;lzU^sAue$mxoowZ{ikdIh{@^(>TQ%`Rou&R!PGPcmDkQ$-X` z-CE>Vtt~WIy*`@zu4oZ>&Sv1*o-bWl*u7)fN`Za4nO%Tk?Xs}+em5E*-?^~GA@@o-FLl54_CZVlW4R|F(~i%5UH4Ft3wZQiQ#{ zRfHS#0zU|8;0L19vrVY{JTH}?UyjH$X>)qKC<=YNuld061*EJPrdXUlE5DJ3Pz`{5 z{c@K{H-4}PT$p!>Dg?=LY|d9WVE2Q-oBcaQ`W>4h<>m(|(jOp28Z7aqh#vNXnXYbU zOrn|4;W#v5gu6iPkt0#xP>7F@=#cMwVxL3`E&_MJy@9G_e6Ac=<+8urej_2k7n>s; zy)aPkVrhcZ&}%+aTJ+czV?t;j*XAg4%6djH2sGMDvT7LcD5y0)M#jh`wrr(s(=Dc@ zRRc`Xe0vp*ylnCr?6C=gnMGN>E*IZC_5qA`Y(;U|0b5b5-l)*KALL{#Cj4bQEU{6$ z@g+SHJ4@!>22--W+VH1mG=K#N28Q0di5(a^)NmI&Fw_-QQRZH<(x8}6(bfOyIRa`W zqyH?wLR|5bV_e>4o%?-nQAA%e78JLO-P4i->ce@h;}P05n~_52yW`ig?nMdDYKkY_ zn#Ns0=HS5a>rvKJuHK9|?dZmbRXtZuu7GJQc?_H0?>*|I9c+SUw{xUaS7H;ZR!o1B zR#8mHLrn2PrBZ@2H!b!~aw2%!>svye8(^XWZnmfh50H!COHaP`$mZ=}QRtOdT3H-e z_L$>?hS>hzi-r;vJphNI;I$NDQVk#J=Xm5*!^t6Igo_IUXa9Rr?=OPfDt z@(uMn&(EoD)sp%pd#AA8%425TtFg~Ln~dD8x-Tmf*~TPXQ^T?tJZboFHg_J`tHxl&B7f)o!);>5v{$T@20`*8R!z`L`oL|rU{a06sW~&VIFiT z*50~S*LaW~wGJd^QnzGN5;k)B6^%0^+rn^WWcYTE3U}M_l=llY#otp?>VDn&KtwmI zfVw#vdS&T})*~GF#`qbs`;seU3;kvJ+Loiv{lvZ0Zf}N+Q6l8)^M#AFF^${Hv#V}& zvO5)t4=OJ+81fA~NWhfwb=a{5?Tc9(;8rm;8U27(`VO><@eLXJ&>8DJ-%DVtI4P>e zyUO7(U4FT_=jg2Fl9L)RBU4_o>&E@`=pEkK9LFmV`e!k5i`H0l5Ki)HW|V71EM@$6 z6qQFf>$34L$)OiGm}5Um-0_Jr^k+=2+b*)j0JfKl#jDnSM=FY^O+k|LmYX86D={zM%iQ(r z5fzHHDk2SMawFWXg8{Ch>eEohsb2@=oy!Pku|frx<(7exq4iqqaLeRGw}&t8eH0h&>O$may|be=tJn#qO*8+OD*Dxw*Aj8O3v#(Q>3G=|}Wr zu{&&PgHjg`meEKdY4j6%Sc_9BnivoMmZ`4G7mHWDXK`=l6$;iLk}8lKS4|*q6Wi{dgNbA~O>37~17;yTq3D*>aVl8tDHfF0~yFq(` zU5y%)Z@Ypo5E87k|Mq`_uH+DE>B_yapARo42dcacPlQvmyIeY9t}bQ91RY?Q%>DStT`f3=Q==L0kn)yAdB!3_jZ;%79mWT_*mHp4T4&Wd-2>^n_CY)nt zc7ympJE?Dw6K%kRcyDX2lA%h!^M|i0{m&sKuR^Ia*bwtQ=(OD)GmhpYFq1D7uCS!B z)$?>bR-5j;s)&zv)#-ZF$LX@`gM1sMMlv9dY*wDYAPYFF+HK&Y=nrN!IDZU_!0CPj z5IEoY*E}`@Ap&z7^#k_}FWM0rTkIz_29lFgbqyK^Ns}?y+!Zclp|AfR0!}KHfJ0&I zS}UYruHq!`6f6Z8qrc0D#E-5RohrUKPm6m~%Uhmjh7MW3yM8Noe|ELUzb~d=!D^+f za$3DSZ#Flu=8n$Yl^6X8go(DUOWh}^W;r-YliJ97r8HDC>c_;Q_Afa+^;)=@rDse(?~b&N9!Y96h}GUcab;ZWT=UIvIb zdA;CGTu89o#m-e>tIer_i=W4iZ7uaV?L^?~RuuF3M0h$`fKhU9C2{u}@>u>2o*9ma zffsbTfZ)khcLu)hN`#8u%UxO;q$2jGMv4Axs1yHlLml@Eyo6>@-ADKatGz$C(jp9L z3^YqsvFHn+J?Bucqq*c*Aqjku91#iQRU3&zdZpH~(N`=95Ej1%Q)eOrSau^y-*s*y zcoM(PE|kOW&?Lr8JyFy0fRhHD@$1#&^L4aC(QTaSiaU9Hq?tx@A9sCs{3@5a_v zNB1oLsj0-pinqpTxVx^^Zmf@^H?O(|iio||&N@vYY;Q_mX4?TC!8=hDl$&YqFu9sq z^lIp;YPUeCoZ1vbT#pLZK!U~t-|~%PVfUWS2m8ApCqJ+5<}zQj@0Swf*+sElBah4m;1ri1LRLW(2dxEXqFk; zvC=-u2zggae;slZ2tu_*oo{6<`{PxJQ_ndp8V$#?H-Cbr7C{e^lEL?r0EX3_6K5l& zdUG&`y6c5y+X!gV)TA--ms-En&N27Pp$2zM`)r%^%T(S20MMt}jF}aA-G>E%WW0h- z0m0@FyZun(Q)jYNDB0$lkAc4t^V&#w6Y7lY!-e|(!)CYe{6AV z82!z5Yk|5;K+I!bVsUc|8*Rf*^61f+t*5K`YEcUKg-M4bp6KC9Y$u>RTCR$#b;t7= zs=CTiTMI_}!QmNL;me4O^RHX765#iJ+0g+IXe}72J+MtMA7Vf}XeEp&LU7VAfoWeg zc5!R5k8zd97uq?h@qN)R9Vg*I9iK~z%S}gJ?X= zhzl6WGt}nVpRRT}IAhCepC)HFM2-TysHPf$gLlF4ozXyZVa3a^Oi}3gT=lXuLi1ZM zJXvM4B;Af-7=I$o%#FEF=hu+C5csf8i>V9L;+A59H8=ckK4BMTe}k;%IH31ly52L3 zh$Gv2bvPzeczn2IxKRXzXF|R?!SNnzkm;W#i-T`2u3ukUv94WubfXU7c7M?j6towv z8vEq#2Ad@XVCs+r)IBwv6zk`cRokV+;_U~oXOc$Os|28)br9KTt)g?atFBi|8iuKY z_bY#V-L%aQkw0fACbf&7cmklJS(rcSL3QfYf9WJa3`71$Z* zIop}FFRGG_I}2kfL){DO4Q}Ee44mr}Lv~iY<`pwVTYqH#k|!J#D>f@W(_)W^mf%io z19Tio&Ur_Hhu?GLHP*?)Zq>xM(btihiFcayJ<<@*9_VR&6iM*z0?1CSYdy!|V=+8? z>s8wngv?}fIVu||d3|n3t*NNzXKeDeA_mCcfXBn2DkRs>vXwZhrTK{m6E>0f#S_HG z9eC8VHFkfhAg5&cw-u0#*~N84QDVQ`*shma?BR9c2HtIMQQ&D_%+x(UzbW=y!}4#V zg|7ogP=%wrHqNfx@)La35n#y*l4BpEdF-Ej+&1M*GdyxTqWfmSK@L^@$n0?j&Xfe# z+2pQvFsklX|9w+;@KslAhR=fbcXiSA-m z(E5Ftztkx}(;F8G=XK8#kedqrkS|82WWn=3}()O zg8+AtBYMd<(={<@`tf0p73Q2*QIK^(`lP=_2I@$XPm|wj-Mp!V$dQ+#V8xo*o zlW2S~wiY(cieZHGZt%TOp1DtHh!CWdM;IB1a@k!@!OGdmo1awACrB> zR@2gjpkAH@$YgxmM!(Lr&_KMhwQrA<#7LC|uC>6*BG+l2ls<9(9y@FAIPGYyr23zl<_|eH3Lu zOJn||Y)ES)U3*;Hm!A@x)!|v3*1{YyE( zyPQj`JK*17J*DQGrf+Htg!{e%>pTaUaY-oEKH;1A9-L4_G#dGg&Hfp^QpKM~7dO@8 z`kfW9d9ftPrZ&X;it7VT#MPZwRroVY8Hl*P_-ysi6)ItgSFS7$5)y-u@8Va4p!`p8 z&RMqUde6)smmP7s!rgeLjL7DQk$C6Ee`*`UyOHXWBxRIs?3noW(rt)pR^r}rVvH?Vh0GtVgFN;R>JV(Q(Uk)k z(Fvt)P?%s7angr_;ECZ?H=_rCU_?f1w2QK=0TBSXYQ3%>J|!~ar#^;wGly@Zy&PsB z+Q)QK-W}foB;FI}t8Qn)-a*DB^5FTMMfi=n0_Lb0)M`KGBJ7XR)DiVgL*&I1sN5Oy z(0Z_>2Tat$I+CMiL8cU-SllY2-VRs3#N8NDt-Ff5^hqyoG`2Z2HrEFp&L$j1m;3-4 zM3ip)u`cuBqW#9omxDB#F3TO3#wZSQ1IQ%dW5*6j_k~1Yg{MRg&sp1--vQU}XM1cknLB*&<^d4sRy?!H`3z)=#^Gta!Xi7a4 z-D8wF`)FLrX7UD_md|b-6n>&M5Ov!3O=y$orMj%VxQjciBD{Gkg97PP?D1cawAPKg zGT+3qQG3cnM?$OyH+9WoZELNN*DHG3P0hIFl%IPjvuhS1In+Fdq8CqMT-UF<)+F5x zUD(n|h7SUB9g?Y&uc-ibOjS9`;8bJ+vIhm=5>gXG!tVm{+aV5Q=ayxCX=PV~x_O!Z z(F!-NbG1riLT1`2y!MkjgwO1Koz^=?o#4Hvc9&NsFs@G|*HLYX(=I4XFgu^c#_DcY z#2`xMEe}iqsd*q?${TgGs~h*+=hPK5W9v7=$YSx|CbK0eQ;D?ORYL6T* z>vKgH5r~Y?I{G2!zEi*6{)-@V2U)2b+WVaTB2kcQfYjI<+E|!KyJF8NAsQ_M-s{go zgi)V`OWSi67k_Xx4A|<3yZbN_9YstWd+!C53{p!*22;GByk$+MGTZ`(mYuL|klr z?`veo=C2<^n=S@EpT2=XsYHK$fi-zP)5z?IzQ)XCwDN%W)0i|S4nL0b#WzxLquB3} zn48B`^x+w8i`nZ%^AU?A(2`0M8Gq$e?3|21W%l~5Ok#niHmGPf6sAH zkRGoRXJ0)#f-YXb1JA(Lmk#N6w+_n2gIZkn`b$&CeD?~seLeI_<`zp(Q|_1l)CgGl zAk?06+%GFE5f=aKo|9@c4fv0(pbgr}mwv8{roChx<6Xqo?)dEtkY-H;ThkmoG2-1q z&{g*a@tQria6;+UfEqb2xugZ;aZEn4-%Hs#Az+2hw8}~@{qj=m&8mdBnWwhyBEoue zX7T_yHPUu2Q<|KN6a3Y{cl=vV6Jthtjc~5{AfR^=w=08Dy!? zkx9sj0h|=#S;8_tAPY6vcfK?DpWyT#j1dE?3E*RJjB3y-FzOR?ixVKvj-Z)IiJ04g!0IR;+t#bRX2z z{MKp2Llna&JoJs#?vjH75)uCtbfWv<4NiH->qN=ZxoGUbA|O z8DdZ(Ace#pr>Q!|(N(ti`nq3Z{*(aseQ(bfQsIIZlJe)8)Y^15lsh87qHLcURBIv4 zyk0{mtg;KSvQwtZI63Obg4)_{NyFVAW&$&@oo%TfAr+~tr8=r>o)YZ2)n@4lQDO=k z_L}GqD8+i)_}lo{`#K5>?o8l{+kKVav^Tj{aZU4WT_jIki64-rb6p{ zk>HjNOxe~9s0?F)e$N7WZek$KS*6W~DG8wJRpRD!l>_{5(`4B1Mmq^$KuNyLSNq{o zc3#T_7R^}Lwh&tbQt2qQx3#I8Pm5N(XJ9@X4Zo?NW$^>OtiVoR} zu|k{G_#c86VtFk1zBIfz1IM;MwfWiZF1SmJRM~fSkI(K~e#1%9!fU=iU0Xm9Eo=Nx z459~KjC0<+@hCI`yU-5)voZwwqlME{F4ktE^2E}{-?<~^jXE>YTM=_Er{`KMfV4Y0 zOdI|2HmUtrDy+o4I~-8Cu4pySHC-%B{zB;h8E8d@ zo;O>3)NED$o~~JjNkLsH3BkOH_3r%pxzz&LIFvdq-Ff{H+Icknvg*@r?GS-m5D?)` zVT-x69CfNL)}%BtC{@|ELhms}F&|)4_mHPZtU6Km*CG?J!smz=hzwef6sI1m|CQmM z=;v0!B}vU!78?}j={w+_RRi9oh$de%>M=QLcuDIiAOlj+3$U|?^{yZQF<5<`BOzl^ zh~(FyXJ0gky(4ra-*1v%ZD44;5&lr=10@tC2tz&TMm#u?VH41mSih;VZ;I;lCl?5#g5XW(iX&GMM1z-X#6&DezO zML8Rzvc;3w zAkTD2Q%-3-Iz2ZuQk^`+uwCIj1O=Mm#^g60x(;nW=QV&NMbbj`gT3Ex@#|ZNc=a=} z2`jt>bEoC3@G20qI)_8fM?8056>N+Oh~6C)AxO%9A-yjZc*bt~-wi(XxObW`xV~?? zCSRpe_X)Y^yh|6@NX=^AvZ)s0dHBH_L+9{hFmJ(&M?g+b&&!j~`s9IS``0GjF7+bP z?@Iy?+JRma(azcXp?Bgkfy%r;o*i%DQ&&J@vFsS z;g_0k8)!jPWhzPo9|%eXdNvw_<6{OdN#ZixmV;3>d`fXCcag3YWXlEfl8PyKWr%fq zm3#iLD$c^39ZnaQS&S^gZXTD>m-q%X%i(xF+B=%ZyXlw9{53O0;aQwy&NE&I_qN&m z)A&LCNXpZboZW&?|Kn&){iio3YQ~|@1N!3sn}heiI!^zb^1t|QZ{RSWt?Di|)i$tw z0V6{NTf-oM)q0?8r z)sA*~{MME*OwA^fl)^zqti)iLF^i!s0qX|597PmkvbI=s7S~3WFzPskdiuHOvjRUf z=sf3EmCjNdav!RiKYx)(IdeH4xZ<#O{GPUQA>XbGCU|5mhXQ;(2r!))pp=xgdgvqpaVZ2G0Dg{$ezOfVRwFwcl6I za&j8dsRSz?Xh_r?az^=2KkQtsx>yGan$(am(jjWhuL$a=H*|ak-8NvEkVre=-mQ)@ z6D`Yi+!x#Wm$3aLt4{_Z85@7@;rRIigqEyer-N#b3wQZ@@L{cFZXd1uE_c~K7Qx#& z+A$k6{2?p*rT=)f=orL#4u;|0=iYPd)Wb!KqUNBGm)K;}hIGhF((KE;;*DD&faWW( zIW%As-4mpo*pgT8Vh z4lE1qU(TwXkOlkr2tBgNSn_dt}HAl+U{mh2#_TiJ67SK}? zNx^JhkZZXM3BDQ}zG)U1V$*G(g3(keRz=?*ex+(XpC{@JhM4NVd>O1loL4Po(A8;k z@Siv{CVU7!o}AEVFt0B2#CLbVQ?j6QRUDWXVAFr=L36QT&%`egZe_&Gv$ZSPGey^> zy8~yED@V@0Qm3wt{@B|GNyf$beCV9!#Yz4w5|!fXTix)GN}34>Rvq1O6cIEi3@+U& zbzKNgX(o(**Z5R;>6euvvHGz`rqqLdo`FJ6Hmj*0f4xV^Z)UfCoiuGlNbhuN zUSD%fTQPduJtmpT{F*vM8XbXOQ*~zb64(~~nG68yv~%3b{s`U0-JXJ_gUI2hzE#$; zF^D@rQ{tzu&f%RQ?rQ*dpr4y#nU^$GeBlvqrD`ziO=zN`J7lYB5$4GZ*=M|xtIXLN`ps71l;81KHW<**u_$JF;WTP(Sl{)75S@J=xWhHr?m@OO~di z*JGoA*5b|tj0msgUX39X6jG9E76ho4faBS6x}cNG#uD;|-tJpfv#`9-!55MyZ&Nkl z6^?~d{!T7~_H4yNZ~sP*O`!j&Cqo_`_YfcE?3Rdhm0@Pp@P?+_Av>S(-< z*X3_T#f$A)o$Y3EUUOx8`u%l=s^gyf3qVyUf;C@ltWrK>J8AqmN-%2*>bE#fF1k$q zu>4vuOis(<_Q+*>R|KZj-2n9-Op!2`1TMn`SyyMJqpgR(A|bsCVW3>dDf96Wgpjc^ z{iaOyPSek+N^8wPeZec2ur#a9>KKF-d%%#$j=*5ikH}*0-^Gpxtw^qR@ke7TVB-dE zj4JA;d>cEwz9I*P(c`!9KU?1BzO5JCAC~qYJj%o`L;30tH6Q7WrDM0Jf2J5@d_RM$ zC5U?k$`5vm14A|=>zPILNGU($oH#arrv%0$PaiF3P4~f6DoW!b4~&49&!DKp zuCPStz?dN-ItM!E*0z{zBm)#SSnru7ed7Meqvd&3qu2Ku@K>Yc#*Y&wG8ACN zVa+nHdtJ4y00RK+Do}gO>Y3O0ITzQl^QmNU1@c*NA!w+FJyDG#)%;xgp(T{^l#HmF z@y@mCD+XIt^DyltN~5D<*Yv@huP1*cm~6fs@XZ-_xVHYdtRO@RcIWylV1Byr$04T) zP*x~=$$~ds17?ow#-3Azd$IjO*?P$uPG^t5&gNgpC~F>0ybLFPyk#>l5g2)PoT{m6 zbYkqz@SI|=4X7Pmd4O-Y`GhQ7F*2i5!(zxKqL(R#HdJ1R&7V`xZ8c3T^r!L2ax;e>ZE2@j2t!C8uPMuN$k*u>oxSc z>kpl%wjVxFweL8h#YPRs-2dbO{5i~Otbclp=^L@P5e_0^OE*o+z^9L1A z0J=XMZ-VQawnY?z5J<1fZx}xeU;F#Z^$p1_1dD`TVUELYu~f5Co#wZRcmZ{pb_{C* zOqXOb%(sXvsG~`WnDUeDKM n+8Bg)ab6q1id{tZ58Yz1?on#N?sspp&vZ-I@J8u1yBGfhqo!bb literal 0 HcmV?d00001 diff --git a/thirdparty/yyjson-0.6.0/yyjson-0.6.0_oh_pkg.patch b/thirdparty/yyjson-0.6.0/yyjson-0.6.0_oh_pkg.patch new file mode 100644 index 00000000..90c7a154 --- /dev/null +++ b/thirdparty/yyjson-0.6.0/yyjson-0.6.0_oh_pkg.patch @@ -0,0 +1,12 @@ +diff -urN yyjson-0.6.0_old/CMakeLists.txt yyjson-0.6.0/CMakeLists.txt +--- yyjson-0.6.0_old/CMakeLists.txt 2022-12-12 19:15:37.000000000 +0800 ++++ yyjson-0.6.0/CMakeLists.txt 2024-10-16 18:53:21.472406536 +0800 +@@ -21,7 +21,7 @@ + + # ------------------------------------------------------------------------------ + # Build Options for tests and docs +-option(YYJSON_BUILD_TESTS "Build all tests" OFF) ++option(YYJSON_BUILD_TESTS "Build all tests" ON) + option(YYJSON_BUILD_FUZZER "Build fuzzer" OFF) + option(YYJSON_BUILD_MISC "Build misc" OFF) + option(YYJSON_BUILD_DOC "Build documentation with doxygen" OFF) \ No newline at end of file -- Gitee From cfddee0f751147d10418e2bf39197c5686aa60e8 Mon Sep 17 00:00:00 2001 From: NEU-lab <2942375747@qq.com> Date: Thu, 17 Oct 2024 16:37:11 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E6=94=B9HPKBUILD=E5=8F=8A.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: NEU-lab <2942375747@qq.com> --- thirdparty/yyjson-0.6.0/HPKBUILD | 11 ++++++----- thirdparty/yyjson-0.6.0/docs/hap_integrate.md | 5 +++-- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/thirdparty/yyjson-0.6.0/HPKBUILD b/thirdparty/yyjson-0.6.0/HPKBUILD index 60133ca9..7803806d 100644 --- a/thirdparty/yyjson-0.6.0/HPKBUILD +++ b/thirdparty/yyjson-0.6.0/HPKBUILD @@ -37,11 +37,12 @@ packagename=yyjson-0.6.0.zip prepare() { if $patchflag then - cd $builddir - patch -p1 < `pwd`/../yyjson-0.6.0_oh_pkg.patch - # patch只需要打一次,关闭打patch - patchflag=false - cd $OLDPWD + cd $builddir + #打开构建测试用例的开关 + patch -p1 < `pwd`/../yyjson-0.6.0_oh_pkg.patch + # patch只需要打一次,关闭打patch + patchflag=false + cd $OLDPWD fi mkdir -p $builddir/$ARCH-build diff --git a/thirdparty/yyjson-0.6.0/docs/hap_integrate.md b/thirdparty/yyjson-0.6.0/docs/hap_integrate.md index 4a7f016f..c24c12b9 100644 --- a/thirdparty/yyjson-0.6.0/docs/hap_integrate.md +++ b/thirdparty/yyjson-0.6.0/docs/hap_integrate.md @@ -46,7 +46,7 @@ - [测试三方库](#测试三方库) -- 编译出可执行的文件进行测试,[准备三方库测试环境](../../../lycium/README.md#3ci环境准备) + ## 应用中使用三方库 - 在IDE的cpp目录下新增thirdparty目录,将编译生成的头文件拷贝到该目录下,将编译生成的三方库以及依赖库全部(动态库名字带版本号和不带版本号的都需要)拷贝到工程的libs目录下,如下图所示: @@ -64,11 +64,12 @@ ``` ## 测试三方库 +- 编译出可执行的文件,使用原库自带的测试用例来做测试 [准备三方库测试环境](../../../lycium/README.md#3ci环境准备) 进入到构建目录运行测试用例(注意arm64-v8a为构建64位的目录,armeabi-v7a为构建32位的目录)。执行结果如图所示 ```shell cd /data/tpc_c_cplusplus/thirdparty/yyjson-0.6.0/yyjson-0.6.0/arm64-v8a-build/ - ./ctest + ctest ```  ![yyjson_test](pic/yyjson_test.png) -- Gitee