From 55d446c212bfa0825bec9b80450ab7625e711f21 Mon Sep 17 00:00:00 2001 From: luozhu20 <1393302983@qq.com> Date: Thu, 17 Aug 2023 11:17:02 +0800 Subject: [PATCH] add luv Signed-off-by: luozhu20 <1393302983@qq.com> --- thirdparty/luv/HPKBUILD | 109 ++++++++++++++++++++ thirdparty/luv/HPKCHECK | 33 ++++++ thirdparty/luv/OAT.xml | 22 ++++ thirdparty/luv/README.OpenSource | 11 ++ thirdparty/luv/README_zh.md | 11 ++ thirdparty/luv/SHA512SUM | 2 + thirdparty/luv/docs/hap_ingtegrate.md | 82 +++++++++++++++ thirdparty/luv/docs/pic/luv_install_dir.png | Bin 0 -> 21623 bytes thirdparty/luv/docs/pic/luv_test.png | Bin 0 -> 10861 bytes thirdparty/luv/docs/pic/luv_usage.png | Bin 0 -> 46871 bytes thirdparty/luv/luv_oh_pkg.patch | 21 ++++ 11 files changed, 291 insertions(+) create mode 100644 thirdparty/luv/HPKBUILD create mode 100644 thirdparty/luv/HPKCHECK create mode 100644 thirdparty/luv/OAT.xml create mode 100644 thirdparty/luv/README.OpenSource create mode 100644 thirdparty/luv/README_zh.md create mode 100644 thirdparty/luv/SHA512SUM create mode 100644 thirdparty/luv/docs/hap_ingtegrate.md create mode 100644 thirdparty/luv/docs/pic/luv_install_dir.png create mode 100644 thirdparty/luv/docs/pic/luv_test.png create mode 100644 thirdparty/luv/docs/pic/luv_usage.png create mode 100644 thirdparty/luv/luv_oh_pkg.patch diff --git a/thirdparty/luv/HPKBUILD b/thirdparty/luv/HPKBUILD new file mode 100644 index 00000000..e6acd0fa --- /dev/null +++ b/thirdparty/luv/HPKBUILD @@ -0,0 +1,109 @@ +# 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: Ding Qian <1052888395@qq.com> +# Maintainer: Ding Qian <1052888395@qq.com> +pkgname=luv +pkgver=1.45.0-0 +pkgrel=0 +pkgdesc="Bare libuv bindings for lua" +url="https://github.com/luvit/luv" +archs=("armeabi-v7a" "arm64-v8a") +license=("Apache License 2.0") +depends=("libuv" "LuaJIT") +makedepends=() +source="https://github.com/luvit/$pkgname/archive/refs/tags/$pkgver.tar.gz" + +autounpack=true +downloadpackage=true +patchflag=true +syncsubmodule=true +builddir=$pkgname-${pkgver} +packagename=$builddir.tar.gz +buildtools="cmake" + +prepare() { + if $patchflag + then + cd $builddir + # 在编译时在CMakeLists.txt中无法link到LuaJIT,导致编译不通过. + patch -p1 < `pwd`/../luv_oh_pkg.patch + # patch只需要打一次,关闭打patch + patchflag=false + cd $OLDPWD + fi + + if [ $syncsubmodule == true ] + then + cd $builddir + # 同步子模块,这里采用git submodule update容易失败,进行git clone下载 + git clone https://github.com/libuv/libuv.git deps/libuv >> `pwd`/build.log 2>&1 + if [ $? != 0 ] + then + return -1 + fi + git clone https://github.com/LuaJIT/LuaJIT.git deps/luajit >> `pwd`/build.log 2>&1 + if [ $? != 0 ] + then + return -2 + fi + git clone https://github.com/lua/lua deps/lua >> `pwd`/build.log 2>&1 + if [ $? != 0 ] + then + return -3 + fi + git clone https://github.com/keplerproject/lua-compat-5.3.git deps/lua-compat-5.3 >> `pwd`/build.log 2>&1 + if [ $? != 0 ] + then + return -4 + fi + cd $OLDPWD + syncsubmodule=false + fi + + cd $builddir + mkdir $ARCH-build + cd $OLDPWD +} + +build() { + cd $builddir + ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" -B$ARCH-build -DBUILD_MODULE=OFF -DBUILD_SHARED_LIBS=ON -DWITH_SHARED_LIBUV=ON \ + -DWITH_LUA_ENGINE=LuaJIT -DLUA_BUILD_TYPE=Dynamic -DLUA_COMPAT53_DIR=deps/lua-compat-5.3 -DWITH_AMALG=OFF -DOHOS_ARCH=$ARCH -DLUA_BUILD_TYPE=System \ + -B $ARCH-build -S. -L > `pwd`/$ARCH-build/build.log 2>&1 + make VERBOSE=1 -j4 -C $ARCH-build >> `pwd`/$ARCH-build/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +package() { + cd $builddir + make -C $ARCH-build install >> `pwd`/$ARCH-build/build.log 2>&1 + ret=$? + cd $OLDPWD + return $ret +} + +check() { + echo "The test must be on an OpenHarmony device!" + # 测试:使用LuaJIT来执行当前测试目录中的run.lua + # ./LuaJIT tests/run.lua + # 注意环境变量的配置. +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir #${PWD}/$packagename +return 0 +} + diff --git a/thirdparty/luv/HPKCHECK b/thirdparty/luv/HPKCHECK new file mode 100644 index 00000000..0fb4df54 --- /dev/null +++ b/thirdparty/luv/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: luozhu <1393302983@qq.com> +# Maintainer: luozhu <1393302983@qq.com> + +source HPKBUILD > /dev/null 2>&1 +logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log + +openharmonycheck() { + res=0 + cd $builddir + mkdir /usr/local/lib -p + cp ${LYCIUM_ROOT}/../lycium/usr/${pkgname}/${ARCH}/lib/*.so* /usr/local/lib + cp ${LYCIUM_ROOT}/../lycium/usr/libuv/${ARCH}/lib/*.so* /usr/local/lib + cp ${LYCIUM_ROOT}/../lycium/usr/LuaJIT/${ARCH}/lib/*.so* /usr/local/lib + mkdir /usr/local/lib/lua/5.1/ -p + ln /usr/local/lib/libluv.so.1 /usr/local/lib/lua/5.1/luv.so + ${LYCIUM_ROOT}/../lycium/usr/LuaJIT/${ARCH}/bin/luajit-2.1.0-beta3 tests/run.lua > ${logfile} 2>&1 + rm -rf /usr/local/lib + res=$? + cd $OLDPWD + return $res +} \ No newline at end of file diff --git a/thirdparty/luv/OAT.xml b/thirdparty/luv/OAT.xml new file mode 100644 index 00000000..7670fedf --- /dev/null +++ b/thirdparty/luv/OAT.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/luv/README.OpenSource b/thirdparty/luv/README.OpenSource new file mode 100644 index 00000000..0c4a7cc1 --- /dev/null +++ b/thirdparty/luv/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "luv", + "License": "Apache License 2.0", + "License File": "https://www.apache.org/licenses/LICENSE-2.0.txt", + "Version Number": "1.45.0-0", + "Owner": "1393302983@qq.com", + "Upstream URL": "https://github.com/luvit/luv/archive/refs/tags/1.45.0-0.tar.gz", + "Description": "Bare libuv bindings for lua." + } +] diff --git a/thirdparty/luv/README_zh.md b/thirdparty/luv/README_zh.md new file mode 100644 index 00000000..72c848e2 --- /dev/null +++ b/thirdparty/luv/README_zh.md @@ -0,0 +1,11 @@ +# luv三方库说明 +## 功能简介 +luv是一个用于lua的libuv裸绑定的库 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Release +- SDK版本:ohos_sdk_public 4.0.8.1 (API Version 10 Release) +- 三方库版本:1.45.0-0 +- 当前适配的功能:使libuv可用于lua脚本。 + +## 集成方式 ++ [应用hap包集成](docs/hap_ingtegrate.md) \ No newline at end of file diff --git a/thirdparty/luv/SHA512SUM b/thirdparty/luv/SHA512SUM new file mode 100644 index 00000000..b2447eba --- /dev/null +++ b/thirdparty/luv/SHA512SUM @@ -0,0 +1,2 @@ +50460573377bc9386a90aa75f7d4938571b04f74ca6f63e32fa2b2f8951e799465abb78b4270f22be511c4d328ce582c38ec3e3da1061310fcfee630b647854d luv-1.45.0-0.tar.gz +ea598ce9f36b54e5549dd20f7934ff213d80cb108dbe2e6c5b749cbae2c2bec9842d77152d3791cf3c8a90b4a59024c835854b4ae0a1702a103c191655c54cb1 luv_oh_pkg.patch diff --git a/thirdparty/luv/docs/hap_ingtegrate.md b/thirdparty/luv/docs/hap_ingtegrate.md new file mode 100644 index 00000000..55c94416 --- /dev/null +++ b/thirdparty/luv/docs/hap_ingtegrate.md @@ -0,0 +1,82 @@ +# luv集成到应用hap + +本库是在RK3568开发板上基于OpenHarmony3.2 Release版本的镜像验证的,如果是从未使用过RK3568,可以先查看[润和RK3568开发板标准系统快速上手](https://gitee.com/openharmony-sig/knowledge_demo_temp/tree/master/docs/rk3568_helloworld)。 + +## 开发环境 + +- ubuntu20.04 +- [OpenHarmony3.2Release镜像](https://gitee.com/link?target=https%3A%2F%2Frepo.huaweicloud.com%2Fopenharmony%2Fos%2F3.2-Release%2Fdayu200_standard_arm32.tar.gz) +- [ohos_sdk_public 4.0.8.1 (API Version 10 Release)](https://gitee.com/link?target=http%3A%2F%2Fdownload.ci.openharmony.cn%2Fversion%2FMaster_Version%2FOpenHarmony_4.0.8.1%2F20230608_091058%2Fversion-Master_Version-OpenHarmony_4.0.8.1-20230608_091058-ohos-sdk-public.tar.gz) +- [DevEco Studio 3.1 Release](https://gitee.com/link?target=https%3A%2F%2Fcontentcenter-vali-drcn.dbankcdn.cn%2Fpvt_2%2FDeveloperAlliance_package_901_9%2F81%2Fv3%2FtgRUB84wR72nTfE8Ir_xMw%2Fdevecostudio-windows-3.1.0.501.zip%3FHW-CC-KV%3DV1%26HW-CC-Date%3D20230621T074329Z%26HW-CC-Expire%3D315360000%26HW-CC-Sign%3D22F6787DF6093ECB4D4E08F9379B114280E1F65DA710599E48EA38CB24F3DBF2) +- [准备三方库构建环境](../../../lycium/README.md#1编译环境准备) +- [准备三方库测试环境](../../../lycium/README.md#3ci环境准备) + +## 编译三方库 + +- 下载本仓库 + ``` + git clone https://gitee.com/openharmony-sig/tpc_c_cplusplus.git --depth=1 + ``` +- 三方库目录结构 + ``` + tpc_c_cplusplus/thirdparty/luv # 三方库luv的目录结构如下 + ├── docs # 三方库相关文档的文件夹 + ├── HPKBUILD # 编译脚本 + ├── HPKCHECK # 测试脚本 + ├── OAT.xml # OAT开源审查文本 + ├── luv_oh_pkg.patch # patch文件 + ├── README.OpenSource # 说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md # 三方库说明文档 + ├── SHA512SUM # 三方库校验文件 + ``` + +- 在lycium目录下编译三方库 + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + ``` + cd lycium + ./build.sh luv + ``` +- 三方库头文件及生成的库 + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + ``` + luv/arm64-v8a luv/armeabi-v7a + libuv/arm64-v8a libuv/armeabi-v7a + LuaJIT/arm64-v8a LuaJIT/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的头文件拷贝到该目录下,将编译生成的三方库全部(动态库名字带版本号和不带版本号的都需要)拷贝到工程的libs目录下,如下图所示 +   +![thirdparty_install_dir](pic/luv_install_dir.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libluv.so) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libuv_a.a) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/../../../libs/${OHOS_ARCH}/libluajit-5.1.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE CMAKECURRENTSOURCEDIR/thirdparty/luv/{OHOS_ARCH}/include) + target_include_directories(entry PRIVATE CMAKECURRENTSOURCEDIR/thirdparty/libuv/{OHOS_ARCH}/include) + target_include_directories(entry PRIVATE CMAKECURRENTSOURCEDIR/thirdparty/LuaJIT/{OHOS_ARCH}/include) + + ``` + +![luv_usage](pic/luv_usage.png) + +## 测试三方库 +三方库的测试使用原库自带的测试用例来做测试,[准备三方库测试环境](../../../lycium/README.md#3ci环境准备) + +- 将编译生成的可执行文件及生成的动态库准备好 + +- 将准备好的文件推送到开发板,进入到构建的目录添加执行文件权限和lib库环境执行../../../lycium/usr/LuaJIT/${ARCH}/bin/luajit-2.1.0-beta3 tests/run.lua + ![luv_test](pic/luv_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) +- [通过DevEco Studio开发一个NAPI工程](https://gitee.com/openharmony-sig/knowledge_demo_temp/blob/master/docs/napi_study/docs/hello_napi.md) diff --git a/thirdparty/luv/docs/pic/luv_install_dir.png b/thirdparty/luv/docs/pic/luv_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..07329d41a920082dfec74e6cda6afc811535aecf GIT binary patch literal 21623 zcmeFZXIPV2+cg|;kQoseP(Z0;5RtAFk&Y4sK>_JKD7{JV1aKIni3n1pqe$-{H9%B) zml}Emq)8J(fFuy!9i5r`p8I*9<9pus*LQr!=i!f#yQ(m42!sL;fl#jgObOoEt7ZEY0{IPc7j{e6H+^F^*wthOv5gnG+>>M%U3Fhp zmA_M?gzE;~g_ByQnoB|AB~H1Xbypr1;Ixi;#YiMh?)0&&skxY=bD~9nBy&;tn$-Y+~+9fJPo;8T^P-BrhDbSb^UpW zqIDb&Vu7%dgM4}YxS?=3S?eBnZOCOr4;e>mtS5 z6}-M4pX1fIr>R-KCVN5*KBO<^#0Ha+PpSrr1uN5B8tu_rv(Q~qq0Wi|{_Sw`OO?3l zmg7iX8rj`d>>%?&4n+cHt~r1U@nuNJYc)yWa1gf`Nt-fi#f5f{`(t~UD(0F zfq~_gy>2`=Il}-b<^Rz?+LTP7=%f!lRTIl_21{jWn=<2 zmXc34x#YY~5C_Ltg%fP*K$CTEQs>mP&*l^lRK|Pbru*J%UtixH;jw1{*yxyaUUZTW zEqodUhk0+!*gtG2(%MEd9kUJn&vm_NcUizeggH^ zj(W04I~@bawIPMZj$#8iVOnp_Egl%p~@Gt)iy!ACEE@Jx|0IEt-7Ioyeoqz zyL~CMNS{)^^*W62;vz?^OhW6CH@eI$_%J;9+s7^%7KLL^ZUd7&DuRH4jb;;mnRHB) zbe_5lRe4VO#)49f>@xF_;&MDOV`%WleT|gFG`aH(ihSI43|{Dd8n8tiQFgpJ)}9^` z8-Z%IzI^)hIr||>IgYZv;zCu7t9D;7b-^pV*8s)Z;U~qJBj-4o!>{%E{X9_8mg{nQ zSfhRC{oundTyvi$>aC83M@KOV#Dgr;f{wIp#mJd=i&w(kt++C~X$dpD4#M!3ro0jJ zqrH)B#P-ST;Zh=@FteedAy_KtsCL=~xv5^48=P??)EpMH6Fu4z&gmZbVW+qnMMz%k zq)~WSC{lmx%drk)pw)p7bzepKgg=6AY2V=~rz9*PqW;MEZMg#U(Vbd3`BBF!_2U<} z*818IPnlQkB~B9qXs-ur{`8C#(Q;@8Weg5RINr=MJ+!j&{qpIxqPMdK3=B9tY{ zT{!%Gu?(3$DZ$>!!VYy`A212_I3X=6;O{;;NK*Iwkd}1_?-%LwLu~a=m?3=(F0WeO zZDToPwhZikUuAvKxfNYA5zdtvw3cg$Ia=P1>QWcsAbx8dQ6@pMnbW0lB#?#zL6)#h z-ssnhaI%^8#P-)A*3=dJj`P8|+BFr9iKvt9$$;u@)Cs9$yFW^GKc$y8lehTwL+mlV ztcCD+beH8O3b{QW4r`n5I!c;)XFmcy_*N|$q)&TbW1BDR%qWH16+n^}2I*fZAyG_$ zUlI+>%Qn19Vd$4Vn+JUguL>KQAwwxBYQDx#?l4&Di=&w*jw#NUqR;BwZhSk z!PBE}&bc&8h=~P!i&MGbGS_r8)}Qu0yQQQ|f=_D3#RmKOn!eGWxGuCsf}Bl$sg;m@ z5~>uQbo5~Cbbp^IzI$g8>b}2Wgw6b;b^cl?X?Lj?cxEOrHR+FK&ftd^ZvTB!S1 zq~_61R+jJd5vr^31Ko*0VslC2TAchZd!Au(%XMIn#LE=>TYcg@;~lQt7N{D$X2Cx! zDG0qg`*Z2>oKung(^U?6O+`i%GNZvkFZcmF9NoZ^!Lk2GEZpA^5 zj_#V7nTb8w;fi+8Xb6@jQiszq?Jy7}HPa8j?b%~p3OPaL0C~{+`pN9cuKFY@m%oSF zd1j;GU1@!@?xv=!(Pu2KeTMttkjG6(53f(`AJZ--WoQ_Z@|{>Nc$ait@=RbZgMc$IyL<)@8?3w1L(otUp7y-}0_vgK%lY-uzsP8vGPQw|H{pL?zOY#oL`Mzjd3%M~^^C!n6;}vk$#WA& z5G2@8yeF{2=#JV=g7>?IcXUpXcu%`?Hl;WEzD`f3f?Ufdu`t7#p zQq}M1%a!Ie!2CjI=QFolHIoe@&6pk{IU$B`ZoxS5*cC3nrO1Gze3;ciT_zVEt8;MF z?IWX)vPK43)A%!#DxV8an!T+8^FS`FpR^Wx1{O$`QTa<#rgHMFa`bvHm=XwtgD(^z zlwb#c>ni)8kcl}zKk9R`_`d8^Z_;*j$?J!`?cFrF^!^?T=}~*Q0~-=XRh#+Bl(50F zK=_JVxmw1k0jI&%3k4q!tJVvHb)m}=J_~&wQ%!6hl!}!p#Q6<=ED87W<;zxXk%U7f z7|c{Sf0bLR+V}YF9D}RfmjAnd-Fb^dJ>g} zAZ@xtswQs3=^=)(rx_TeBtD~pvp*V8Las6a7)k1eH!;c99E#*8RV=X5K@4xr528`K zAc^^G^SAO)K=^ZReR}ZXDb2r+q;y=h&CVYI_+Wwmi;qpG8EH$=8}kTJ zFIjf`R-F>pb5&bKBKoacxcbFP2NIOr{kLKHfi1JhzI}@Qn*A_U~Sjfa-QwgcS)$3 zSHJY(W*C{JxId{ZCC*dz$&w19SN6zA1gfJmBEl(EwSyHu>O8US?n*p4a`8ZA!1D&( z%eF(~yA$jNm}4IrK>gikb88@4Hi>-%QPs|KcQx~SUz(h$cc`r2J&kN8xVi*R3iyli zX&{$9BN(EqLr!Je7zQb%>sqM*FQPZ*Cd_nveOwc@0;VH}a7dpyiiXA&uAfaC`Y0}7)Ci|>SF#%Zxad^g5)gl`| zM4BU~*b>dxMwmd$yCSC`6`VROG}3*$gQk>_E`LbDDRR36e@#SV_SwdWb-L(p+mBPb zf{xe5`dtvUxY=G40be0pv)AH>qIqfKRKSR+dlk! z>{E{Tc5Fgp_El=fXz@(B9d#D|fcgM=u<5g%G^zq8WRa42TimzmgEXu(0}f7nR}Kr8 zpYw2+$HtT|QB#KC(vJ2#Dof=Z%X4x5Bje7~P0pKHf$m#}3eCm@%@I2J5jX74>uvVI zE$kM$GM?8_6|`RK94qgw3cKMR;7z;l5O9TY zkQ4r{bSXeZWnXp#_wGV@u#4}bFb2rgq+T%t$)I@S9)dfy97H!9lykZ5!?lro8d)Ww z*)(Un3HP;yF!!Gj)x>Vw#(jzCXKULMNUk}@=MKbu0fxzuIr5lnV|!aLUTK5&!dw&~ zMcV2IHX?A+(eZ&cm?FL-q4g%o>BA-Dc1>0=u^)av7A1LwUSY>2kT^@+pPut0#h6SX z>F44P!@0hmvkl@q@MdpvKAOom3F`j&z=q=d(8gE;hs^G_sq6g5Fm;_|ng&V79XUow z_PAMQgMW-fIy@FGXcha%Qx3`5rmwejSVT(jUm*~^oTTw}3dp+B_^A-wU(NWB23+Ou zw`$&T4M=~Iq=9IgUk4qM$=@!2TbPh-b&^Y^~Po(;TrJ^q~NV_DtZKb zcU?yvOW+s!EnQWXxcM4AS;wi!RGeFqToe-kDR^A-?x`ig$zOW^>k#IEYwiSBJH*Ao zx1?fEowarijlsxF1v}k)J9+%&A#TKl9>psKU!hwLD39oBdt)O2NQ9|gLKUum%O3q4 zfjoH?0e*X9v&Z1DIO_D~XE6@=X6j70OM z2b>8MR1p=bQQ$~Z7(^B>z}X=s%0kw1h-yfMd`$vwX+4dJAx_T6VVR|$$b~_t`-_Na zy0qjP!QT3nd$fm(v($_hA&42d%~}w{`$DDYV1Kt=l}_`k)1A${QzL_(5fQ3iUo{vi z#QEauvE8k+MA(%MZ2<+FLN1vix!JkncM%aggq?)*Eu>Qr9t%etX}^g2zFCtZMi8P4 zdqA*pw5O#8L;0Hx`MwxT1onZpe4ggB5XB%518euNl|BPj_;bI%D3kAB8XLy+mnjj? zY1*JjPG5?}#kGK)UrAd1SPLrp=Bi?lup^)9jF+V3lkK_TIR_HcY%+vQ_;&|=}E zD6qprsc1ji*VIy2xYm=HQdp?$lflMTCn4^XlAbPjBFH_Z%Zz@HyNfj9_xs-FCq+ z76vzRDFr_jc72S4Xem2fS?A&1%90NBU6^Tzr#==HMlr9g$C3-mzE2~-f1s7Q2XJ77 zFJ!F5X596j%}i`eOrpZ7^5u&eS+(ntujZYGV9$2k+)j%QeuXF|7UlXi+dDWA+PPKu z5llw@Z#5;ey3Pu4-{^`lg^U$+EaMWF+^sn)e0(_%ibn66!5R>$5f^eom98uC1t^!( zL-e%*u!J*eQOsN2;-73Dx3WgQ%a_?;VPHVKH7Nf)M)5xC%x0SNj0Sm~-_MLW;`%k< zZ(Numzd^xLkDjXHgp|aVP(#+a*8wO78NNdP@3$7WZLrz7%pvX9%Hi$C#tszOYDR(P z@M57FW7~=C^KsV4yyUs!KT<|s6lk5Q5DTVBngyQo!HHy(Q(dF}_7V4$DeyNtN zk+M(9W`cy6Or~dKy@qAY(JzNLvbCrR44AXf$;jLrgQ<~ZekTxi#39Um{o2i~O?!zq zeEr+ruR2w28m>5(^dux3kJhW&o1te-u0F)5iQ^q>LX&*GO}iuge0!L zifA`E=1hFX_QqcLxW?QvH~J?Fw=|cN9>5`rd*HD`XcwW@v4oF(eTkKoJ|@P-L7)R) zTU)#RJ4pjQOO+WYh{vXHCv2zfAAUXvzM$E5mg$@09aG6KPs?TZKDW|O-XW3*cu5U7 z&NrjHf~)RpDEN=pgOwZw~x? z8j+|M=iTfy!bwvhao8el(JjG`%9I5XxOm)>g#jIRoY8f3I$et4;N52l!e&954!=E) za1W4Bibct=ZgXV>&n|86v*NQF?sc4-)2K6maovDjF3lg#)Xy63_d`TqS-h*Xu?01~ z9Ad0A&Jvp$;n&zV>0_+PbY%5~v19df#MiYm0Wetn0}raa_jP%mZULPtq6Zc+ZHl^K zp|j@Q>HKe^RUZg5D#pA9Tdar`WcQHYU;N29|7Vf=o@#^D_4otK;2i2C*}4I(<>lvh zPFmaze##EIUM>>ZTvjfO5%kb-VrsYm`E5N~#N|_TL|^}sj492YXCn;Opd@D|5ArF? z2Hls*+#pidN9(}`S9b_5LLwb%a(&hDN$UvHZr{o6Pb&U7y#e>e4Si{{rC;EbZzLVz z7bstv`mNxw00F|^bQx5;4s5X4XzG)s`H|XdOdh8A-_6Vu)rKvpMt`en>0+LJmLVx8 zk?6lt>d{f&8!YE2@wi0%q2wKEqDue$#9n`8NK{CPNW)s;8an8xC$YT7g}@b5eCx~C z!4to&n)!yw$=uE#Id<}NvD4;gmHxyGcXCj3z3L63!!k{CyKFv6#tD#+$>OgB!p%%c zTNM$i{KLu9xq1)>rziY(#*c8g=%@;TnYhDH!W7+|I=2a`j!fP3+moE*l1u zUbJ;h3A~_S><70u#@vH`a2Z)&dBb++3P-Ten!Q&ctnrgc#pnd3UJSUw|t|KgTOo;|dhwRSd3Go4Y2d9>4O#qR%_8wI^yE9f?9_TXW(_orHy}^;$ z+05_dZhu8mCP6h%OdlrdTsIU3o%GUrj*sxh%b4Ebw=dbZ2-+Wm21PYojoz?SsE&`d*Y z5B>>V|JpU}#ib)vh+brgNEP{_VfEVb+Ng*otmaZZ9pFHGqTWIgjz&=w77t41A&Pne zJ*;$t^N|0*JZJmu( zQ7yHuFnJ(+^mB2#)`+Pn!==?H@t4-s%Y+FwiPPID5qq>tfsbsgQD{?!Vd+-64E&;b zgHn*K=+q!3otCr}qI*mkQ*vEicuP?e{n1an-}*9h63O6@5A>=pR33#M&%B~iivp|N zxSH0Vu7>}8_Mvs#>F_&PcFPOVb;CY*v$JOW3V+$CSjW1~j$?Vb$*Vdoc`gBN$gfhOr{$ z8wTD+x<`n88fpHC%c5Z$>GK=)RS9i z6=?Ucw>l=_17*ceTm4Bhf5g?+SP^V&W6$2*g*yqs;W)EsqD_X7A7`)8J;3;`X+wJo zh1M!XJ38Ahc9kX%i=zW0$5`bl75hP~yIX%vV*>Qg{FttGI%Dv|owEoz>k3H8AAX4L z#6lPS%NI2xmiHartUv8)?6IIQJP#(5&lyt^ae>clW^N~Lj;FBsxu_vz{IgYW+K`zvq5m>{T;v(2 z1z|e=HEoPiZua#CvpvLtc^#*0lh|VPT@K@K@C?2WkpR0!w0N(dH7E2q2Pzy~S2vtY zX|dQvh$n}BJD6e>Fs`V@Ij8O+Nt*11SLkGRaBu$S;2FoXF&iJnND#p=KLj51LD|}? zX+rP0O`mu3#Nsk1pvT+7zZx zm5_Hj>-P7zuT-^si5izw?-vZgLBWbAAgV|ED6fLvPrdBjkJk_^Azr`@BPdY~(eG>m zU!VH%bqkQK*fz;`dG9|2vJM#E)iT^(|5Vv@CHDEW?xGWcg)qtY&>XH${wREX6S+TS zt3a}Qa|t=2{v)dSA1}`o`V4Bi%;Li~e*W>0SEC0-(&5r=faU(K;r?sA#wOZqswbUp zFmxY<|M}2oCWF>z15(8XXE1)TN_h&y-GumS(}hV1N#qF?6wdTpX-jEWDw#k3_mYAM zp|X$w?-<1#^ix)V8R&9o0{cONydOTaOs0z=IU4f$kMtl(il7{|6Kup12Dyh?NS-7e zGol`Z8AKF0@{i5)T=Zc#q9=@7go~|@7g{FEnD58?^-_Att+{|2Vw|3;*1p@<6EjpW z|IIT@%uBbhrs>RkD2R<>QxL^gNp_dXxagIDf}<}}h~Bq8>+VFPi}x=`_Y08)4cS=; zgMA}XQ#oY?`!a4xXRF2NB^j#RmV0cpTXx%=%7O{xP;zRBas&-#@3nFfZgLg?vuKsL zm1gG4k7?t^D#}%v)mg4^)D?D2?uqPG>)aks)-fX3;8eMW=tdjS#>)5X2fP%q1;g~gE&6D-QGv@S= zlF0s}tov32V7-90T%u6!;^6Rg!?&r@ZJIFGQnT|E$u(1_;>fq9$JBbJ<{eFQ4dm;{ zzR7mWc4ol#bWRy^z->kDV9sZSrPesuJQxs2`*|ForBnUV09r^~#+S0BfGvjxTl}E} z$-Rgm1@Qgg8_X|9^Gp`MunabNEc7j0TDLv^&Q6;C=4uz}1{XWCReHZO+s{U1L^l~$lja{C)ZF%qfvH3K1X*I&r-(!L8>8dV>cyz$u4 z#U<;e&(;_h%D9T&s1oV*T2^12VF~y4G=VSzS}zR8xQajVX}_;md-%&YRQ|>>A4uj( zeIaxgjv1Om#L9=617d89m#{Zq?#!pV*k@Cfs4Z4%tgWkl zO332Y_#nZZ3bE5@64UnaYtPexCab~TqyBfou_g;jG^i*$@GH9r2R3Z1wWjG!TF-f1 zqlRaT$c1n~L1KH?r?Jd$naRN(+l#(eTw~Yq=8Z9{9fd#@sVT_a-QD*~n0uhMTcZiC zD_idT23@r3^73ZQKze@CK5LTX2tU&7ipDbY*svmvAp;0;t+A+KNylReb_j%Q;`pAt zjZWqSA)_4AUNYWuZfOqb_fKvs$nb>OBCs*JO@fg3XM_h;N6rv^C7fTbsrQDL*KJQZ zW*r~qL_XcH905q?U!h)2!%hCVJuqngX!z1H8Oejj^8}f81yJPvURaYXXT-toI61C$ zVM6`uE;Dm`GSpm{M&}G`Zpp`g@||pxOe%o2Lboi_rf0hb$YjZHnB#Nag${ad@%4s5 zDnbB*1#b}bXx--k1mS8f_aNd%^FUXS>-1>obY4>INk8vWq$}jAR2p6(tt-9XrnR(YVB}Pt0&b&@$h+??4`{8uiLRraExFEcjLFWI zsSmc&U+hkNI$*HGexy;@Pl#(W4Wg1=A^)OOe7%9+{|EBP%np%4Ihay=-^kcevP|+ zEN3sD47>|XH(l(R8?3`#M%UUxcQy=d4x4>+s!$c`Og!PpgMRvZ;sO`h6hyYbN;i|5 zUk9S1Afp+8)fJ^e1a&lc@W}h!sy++^JaCXm<;~$3OU$_PXiMv?rX<^C`4D4&x_qGT z&Fsqu1+U>v;_n$YZe#Qhag&TD*<4MW^=^FXfV zQ(^z)4g2jGZfO4&B0#zAo}X85V{kO2A_|1s59+XIm|cKS>C*ebwlQ;{ zDLZPs=va=i%*We7#;`WuV_&ttpR!b&0%!1F=C=^gbC!kH$*;MHnaAC&%g8>H572Xw z9z%$YvP_Xh%?bIy%BqCp$XGF9GXy#+(T<`bTOvA=zB|3Usnw zGE`oM4$@T>3HI%z6Eq&L*G z*@KfHGLgH$y|C?iG4ja=nDIMB&2V)XYDuq+fPW!(Ks+q;$R9o#C@2`x8#}Mfp`40i4Zh16=WLnj$NE^G zcRwQnO`q{}bHs(k#f7tbp7_x>^H!cWUy{gO@^G@DLf3y$0TJCk>BG7FezH}|KuqD z1$aqGXCQ)|-m}j$d}i`kZAVa_1~q;$%3=|!fjCU!_RRt|tGR;3hd#gJdPHl>#N$$^ zxAm!tR)WF;c*ZjP4?=g=Cc_w_2iNTjskDOSQLaI2FWOgd5}&jkFP|n%h+R~)H%wG;aQJ$#iiHXVy1= zW)v0VM&AO~KP5JR!SCz0hkVu?4G|Gn%T?YWj+=)PdNCZ{Yt7(g=r239F4ZA+?D z_DIdqCOqDoXySb@`(Am zR=oJLKf$G(exa<(U=vR++kmz?FN9|L2P_Vl`V$tf12XQOP)+fJEv-*NJFn;DTTL4a zzu_PidC|6WQf@XoFK}qrq6jmoXE5={5fQ)wqA$k@iF#|kjMKZN*(PiDnzJtAEl#&_ zIQdj|5LvX*ivg>pcOqK3RfB&?KZEn1onF$U-F%;PTspjq%F z$rxfdl&8)c{Oy>lMNa;um~KOHq4~Q}$^z?^xshOm-wtS${SxYO^b);jI@*g{|Sd0~rEdpQaa;nrZGYsKHEwgoe>v3=Dwy z*!INH@+y~Ir-Pv1vkpY{)pN122{>~!A?C zV!mg9N9P#QoJaERdw3Xh6VyfkUD{gA18t13lOH^^GljJ+4a3mNZS#IJ#oCiz_{0th zi@8!~%$b?$u_HpaEhpn*)=5%H`As=dJ9;W)E088sF%=EwS>M?pZ0Mx&k4sXxXpfd+ znd#$j%GD&)3*cEpMCOKe&(GPlgc`6?ha|cIhVlpXUtQxL955D|Cv0vv(~@)6;1tC0 z(bm_o@1mo6zGhZti)ZDFm)FSHevu5UYNe)^^q`3bc$9@kw+_c-g#xLB__)_xZ$F5G(?eT+R-Uz_5QKPRWq?6tyD#chSS zo>-i#AG;Sr{N0TI@s;u`Z<@Z=%(XlOzo}v@e{ZPW#n7&hN$Atar6H2}Ec-Uy1eT*# z%ceMxGjbo7Z@si^;^#d7=v_xe=UN1tJwtMD$}{?Ndy12Y?*Mb$HL3*cMc|~U7luB1 zyBFxVMkip^*DouU6PT&2 z`YLxJ+v}Nt>abz% z2SOW?>&`KTvOH3QYRi1pfH&1NDCiV|+RN2^TnN}|zdU>gdSi~Gg7I%RIY=IDDDHlf^6(6q=0?g6_Q<4ilF7C|KG77WKL``r8gA@ zGKT~p9kAoW+Qpy>n#E7wQO`ZE#q#Q3u^X0Hm+NhAG;K$r%V`9E2;%MPsj8NbeVhUe zzx+fux#=yosy=6*J9EinUS0{X@Zo^Hlfyb5G*DZ$=!0U|^>U3LXoerLJntYy&o>)6 z>gI4`#4WVov(`8u?e!5YL9pXspD z>E?qDeCsGi=p5I5(*e3ToZjo(LNyoh4mQ|s?{5D5yw!NBBJ{t&&h2pnn(ExzqgyCu z!d)}_RCha#NZyH>3kCXF@S6$c!4)>_1U%`=)?VqLc@2~X&&Dp=nivKFvnXQG~V1~V-{SX<(>R@$J0gH5H z%t5^r$f+{QRu305@GQWQyblb>O%(|51Q~Hm0&sq*Oqg9X1RUJUsi~>d)Kqs#q+~D6 z4?7cofU^K#c{we!U3~poBU?wlGV;~qVKhI@E)J0>W{;MJ){OTYPbqSi%#Xfhbt=@8 z*Yt3@2~SLPC)VgXIeTF7G09$XQm6yb5Jx~`z3k&GR{X5>o9pW8P|oJ&ruOjeM_I=! zKye`#4WIgFZSOzV*X55z|WB4-c76Zf5x@T-BaYWds zMOqNhgZBQ*7C>Non+xpLmA=K8oOm}S@%~&?(xgR77>9-Rf6*MXUB$!n|;C7vim8NUcriOleoTu zxrw-|8@=)&d~6Lx?A<>3q(u=NKA5!1!5+D`TLDjtTJK2aatL1iQ0RLCr{yIJkuJ>- zg0Z1|Zul&})z;T2gr!=;3_QgjYs;k})bgT`K2MjZ6hmOk7m4&g%nslu9cMl7rG*E5 zT5%)FKF;dR9ETHuJSkv$+2R)u4;k+-7(LR*Fd73J;b>|wY7~7y9-_uf|r7Hk^1Q;++IllforYsEC0Yki|^=LoKirL{A?4D16goJ|+ z^+x2A)%bhkAUK4ve}pRKG-mGAHR?izH16ji|3cl;_Agt z853_lEiQa}lZSMBcmp;HXS?QZuBXdBawtPyN)X3YCPEp9*WAgZjufqc+>hh!`Ka_5h_kxizd zaN6rK405INxoKDe^ZkyOPbX%{H|PJ3QIGbDtTRO#6o~o9u1d%NYUD|QiuS27wd%&{+ychMr z&zD;y{a11S&VU{Mfqto@AP_&IU`;0+ytq*A@f?Is)rpm%J12>c;>)dZbPnjyz!pBY zGCw>(uGe1w~FP#H_v34D-+IjBznDnP%MFNrhSW*PiOYU?Zkj32mzDv03yxR-!za zc((_l7!xSeKKBo8H;ao^EiJmxRrNkq5K>p)P?p66RO51gIA{~;{mnG_>kPzDLxGt* zgY(~&K`C$iPS1+lvP^9K5tYJgdc(AT)|9^Wb>IN~@~w*|vE>X9kV5yhDr5wq@lkuU zA|+_HKZQXSiO#Qa1(egH0h%7mlj;9$^!Ul?19HHE z0*qZ9Pq3*zuB2(NCX3j1#m)4Jzgz>c0AvANB#5a(MT$%9)rw5Nt*_G|suek)>+5lo zlGA~`Le3aF0em>0PXVuwi66jQ99wI22NmA*3H0kYT)_sSn&uyP-P*sEB7qr8Xw;cx z{b=PWKZAqyxz=8*q3-#;q+En~1E`V^^4c`HjDzU>@xSf`G-z3eYc{5t3*13g%f9tlK+>vVp@W}f|wNhIXlddGh z@d__SGrG}oC8h*@DrC%QE)X}Y!WFAIXr6Jran#m+KPCoU3BWY77}1`vm%p4`TN)GN zk!4o@5s>U94kP-V&d&w75VC%W0LZ9UnfYKhkuId8R{Bl_7SLY3k7BJ2wm)ET=0ctH zb_+mn0~g(rlf%(M*>qhd@pEWouSd$IAN#tw5dZY)Q?{)ppZtgjQ@In;iORSo&It^#<-V(J8JWWf*W3@XJF< zbjfiS0KirT2b}>{UxyK6SYtD8Qfl5ULIbW_xk2dz@Mx&e z{?PS>)Y7obpl-33-SkM%YnvuB=UmQ8&AwE9tSCZZki z+uXTq8Xi{POU*n!n8J$Q%r0+CJo)M`-T^CcH31%Jod65kF0j-cEk<&~`O#P56*48y z+9R`+8kBC;wT1f=&w`BO8m1yDCLjeFk0fv0Kty%V<_N6q0tb84MYTzTn|)>Mcc842 zu(sDy9DcE&A$JcDldD+(l((8|b4U$&8iCVKg3(^nXF>!DC8%zz^{)Fvm)FkV>Xm^L zMgLX9dfcsms}mf|3|Nx$jtEP|O(5L>aGT@eEkzD1f+5iPiYMRI;K!$1>Mf_2i?cLY zZG-GhQ?1D{RNe2^Iq(#_y{@2u4>BI*ka4jhXKWkna&fXe!8g!<|LcbB3a{{E2dAdz zWL)-YQgb9104nrycajI z3p>^T#`mndNiWGyzMnznxoQE01 zz9XGH1MeRKOaN(MVr;O4_t71L=quej8_|<|C|cM&-tmUh3E29r4|)0CCv%vFU-#qNoSdZiv>ef13*b zh5rBf)**5-73LxMqd_aGmjdn(fWIH!zklDLtWR(fRRZ)YrPd_iB>Xt2W9U(0bgk-1 zD%pf`y>FA>jP$tty7;e>rX*{<&jeMM1pZ&Mqh8>c#=*bQ(FCMfZiCSdD3e`Xs@CPD zion`g9udL3I;5cuq15FWcje#6O@4k?lm?x4RktUGm~ z{JjL_#0AixcPid=oXY(I$gOhtposHCV;=f|1S_MGMG-FUea3RA#Xq+0D8{yQ0- z9G}FpY$OKg<>aWpPN#M@%az^{&&AKuVJ~zGqTlu>UR)ZzoC_N8RKc@R5m({)0kU&h z-VIpX6#xH|xAR3Me!qOC^6M?JWCe`-@wlid?HNfi4{N85*`%Z-%nT~n-@oxiHfqGn z=Ls(tFz2nvED`hMWD;7%k<6X&?$26Lmb)0SyNd5I1vAOKb$i?>fmI|6`I%EN*ZUwNh-WzOg>2omuDwT zOXel?9w!z`1_Q(90!<3RLajz&v;gHsh%X4IZ_Ho7oUGN)d|RSMaMlej?l)}MAJ=3d zZq@(;&tx5JJA1Y z`=&HU!~2>SxSCRSp&9}7VA+TIN~c_sO;#sgk3F+RWW>ysg`Xji^H<1!7r@T!q0n{U ztKC~FL#^`S=*sir7ZMI>?p8BD2zGwo<)_DY(T8~+N&)!iN>;M5;Yk=_G7^{Grn)w~ zbny1{!qck&3-28wb9P8Wcr6{#QE>DPnH6P1<2h`=eU)kAGzd%4CdrA#qcxxlxpSO1``JgrwgDB zdi2;&MCv$f$p+N3r{fhn7egKan5(h0$f-C9a9Aujs1?g8M*zp5$XM5H>~5`-AWKrmvh-%{z!%s2@Vk!D(iEZcg59YlfV6-g14}b>t-y0>J+qzGT!$ z&7Rkip1%t`c-!K(Y^+Bs^HmPeUWwm$O!E_6WY?X?gUoiXU+4qlvTg5hr~5O*yrdh- z3^%p3tq=%4TW~xYv^)rVaPY)!_x9xPbN>dCQTy`{wJ-pOtbeHYRS44`=k+3hI}p1r z1?hQC2FnjYHGqizck0dG#Q>PjE6;%SpaIz*-h-AzE}I((eX0%|SxkJsd6s(i`Nu)p zQMrG|rAq?8y)|GixB^--;JPgUj-F96hAf*CKx!$ckvaZkl-mwksxvy`!ep?hpcMT{ z0%R9V^@B-*%?e++e`%eIA;@%rGx_u}tUny>U(F(Hh!TU@fF-;2zw4GFTT*)zACvcP>NtyIJsICA31Dp?v|&e&g#-*=s5m%TiY)3ya0 z(F^}}j-Z$Us7rXyj3iR@FY4chY4f9hGvI17UR%@|kd4ffi#f&>WD&+qE?&tq?-Op2Ckc4#o272B9 zIHB?%U=o#9$}Qgcolh<;vh#4d%LjV6Y#}c1@PcBhalkT{{(E8twkxvw7Ffq%U2a(yC@@YhnR$v!lpnokaIyiNn| zazo1CNDw>?VM_n`vLRmqqdv?}uJB0<=^gnXQ8+FRZ*Ej4AfMicxoGk}g(X(R@>z$D zdF%*-MW`jGmMbPpNLxJ(w{)T9C z6%g}1uil-)`gD{9*~l@7H5!ZGeQpcy)4<1o_PC&o_qbFzQ8ijer*Pt`|Lw@VL_~Hjxv2-*%^N(Z3_6p2!_B2uKe1e@ z_J!Jn-qPkXGkhO7{;l=>__rDHR;rckrPS%-$TC}EZw+&Q7rs_ifl8|ys7c>j5#3*q z1fyNgjE^`ys+4BqYolM60b%ssJ@eOKWn4mzPE%mM6`U;yevFRORUC zXfphp-DCZk@p1hR#grD;tq@_&d&Aee`JVM}skuBqrT73e8A;RhkL#v;4HV+d>IVZ$ z13zqOo7y#e8=NA2+F-+D}pFVJJ)x!?7ep#PB`LlyNyk6~4&IXc;#h1;2+IjFzE z4W}f$7vhaoS}SrdmK1N{rmWi58b=S*E+Y)Dg&IaV_1N)IDBIB+bsYW5M)mNG6ryX~ z;!fD3pG__$z~b1)8-t9Zyj;32I95HAIEb*ZjOo3$+9l-X;CEkiqBZekI zd)bU5BVccLY~ClANW)D1UtNKtXt$k+es)qXxJ;cmIJ zi~O`&n1|*5av$W|uM=Q~t78)}n56@sm}k#CJv{-uU@6lQdzfhvV&D2@Jt2%UdSzzb zJFZVvzTN)$>)Q=i9QAEpslPdEK!h^(b6ti$;w+CJIbBr+E%kh)dF{8Ij~4l?Ki^F; zG}Uz6lux{v`rF-jeBwurR}UsA3}+>4olhPQ-8$Gt9Jfhk6@7Hb_B_~DsP|eQ0bMN@ z>S(vG?;hW+69hhtkr!nhSoQfLcEiVR$Aink-}o9zlaZBWw7%IHy;VzVIV8qX9;12A zQO{@7W^ua(v8D9ks6}J&bhCnd`trMJ-X#g)Oy_mG=|uGDxw~uj8c4)u8Xh;edztvW zc9xUSS|j^1aTCAJg&7brS0z=;uG=|&Mt9^#ZjvJ7(F4a4Dlvmwy9H4yda_mAz2$*{ zGN>LXMaed)x!hi9=M3#W&Z}=`c6%DRy{nQeFxjN_j3-Qo7N%RRADB7p>ax)wM zBvZ!Tw^9r`f&96Prz}6Rvww?z@)O)E4x-pa@VE6YEZvZL#dwDQEiF!k>N?MP!D8vm zbG`gH6S<=3R|4nt&rrWrgbiD|$uXE22G2|S<(oV@-Jpv6Uv*rGQ&VXkd@N=xge*oD z7*_;EKu&QGeu17AcMCEH<= z>$aSfMq7v+3NU?0k|`s)^tT&YUyX2#4}O;M4@v)8N-x9W?G2G}PI74zJ?$x}>`)B6Dy*>(V-(Vaw>}0%Wv<5=ea&gXZ)Wyc1~)1Lnvy&Gow~I2s)y6a`y;b&1~OI1(y*qzX8C{}y!Fp(CF0*0>CqrR8aX%q|1*cfkO% zcE0#R7b3yJ4A+WFAl+sa&m(4@z+cD4Z6@A}C*^bK?+a7q%EEr)B>*Ej0rWLPql-## zwv%mUWK8q}>Jk#F`dsSUl9VFsgL4cku^}1JXc~91o#MSzN7ykjtq|N7aNlhxoaMY5 zQ})#gpwmZGmvusH;8+8M_o_Q!z8D@l=3N*YIlqu|53RCo{43ZMH}1TZ%BIiIgr64I z>yE-gr&cB#TJM*kc73Arca*e6io3wY1U#L-z{ub2Uw5nbhQN-OIa7z}Oz?k{c!Zq3 z#otZc#vr}QaGCey9?X24kD6!oR9spVaz#Hn!*f`dJXnP$?xQXe*Nm^M8RLQjqvWqk z0zmL4yOc5r$}Iq{3jshh@c>NVg_y|C-i7C%9GI&o06;la%*jgj16x%73`>=7#?p3o zlww198-%Ulx5EAn!tYhdVEWR)*9W5y+IrIil2GW=9^9TA^npGXyMl8Kmhx98Oz6nL z+-zovDKOa9p*^wd8-ausWd9LaW%kU_cHPWOw!LT9Qc%y+1<{z|GYmdLv_Vc^M@)VO zid<_bZ*yYfG{}usws8cH-OO7UTQ1N$jIo{XEcgGeA0gQ^NvI6vQ<1u z4b#4qU7}UeqXX2ab5}#bnC`=w8M}Q5G=yA^yvU{%D!jfPvL;da7ZgUn9t!qm$b*v( zVGG+i6>uXNEb1J0q2RNGaW8wp2n8Xo6?tRyK_8)F*3rn5Xzi-TcCfY0JCw!;MqSY@ zza{Irc=#CsK#hi|>E8by$LUoG;FauuF#|Y);4{lg(!Rfd(p9A$ol#A7pBx$xR6~eH zZ48EYaTFJwk3RL{+^+NaEJ-PL0F(=cDky!||lW;xD3jLCnzlp%sNA0DJ*g=^Sh#1ZjySNq1RToDL!6C{W*NL`EY$0p<-@lp*!fk3()--TuhuT`&qKZpxO2+U@oD>jai)4Ii8gvw z*X&=}%`hLIL|FmSEwH)g=blsDDq)Hn|BSN^wA$;iiqAP8MQ*6Od9}CEJ;zNBb(7jI z6RHVs3CSsbsbKCU^4y0x#eWp7so9y;TJfD~l5}AnP4QQ|PcX9c3QBd3T@+Xxp{h#m zCHHoBh1(naaAb!TgbX@<#=Eu8(mr7E3F!wW99ieo-Pr|Ff)xz^`~&h_I3 zU6nSIgJO>lSo{&-mKr8|11QH#j8o2T6Cp(A@b410_+ux2C`x<+7K#E6cFwl1ZG7YZ0Gn3)`Tzg` literal 0 HcmV?d00001 diff --git a/thirdparty/luv/docs/pic/luv_test.png b/thirdparty/luv/docs/pic/luv_test.png new file mode 100644 index 0000000000000000000000000000000000000000..ad6b34e97fdc7673915d0802c95b062dfe4ff749 GIT binary patch literal 10861 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 literal 0 HcmV?d00001 diff --git a/thirdparty/luv/docs/pic/luv_usage.png b/thirdparty/luv/docs/pic/luv_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..1d70a7b76a8c5775b5ad3e09397adf5c3c7fa85c GIT binary patch literal 46871 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 literal 0 HcmV?d00001 diff --git a/thirdparty/luv/luv_oh_pkg.patch b/thirdparty/luv/luv_oh_pkg.patch new file mode 100644 index 00000000..cb7a2825 --- /dev/null +++ b/thirdparty/luv/luv_oh_pkg.patch @@ -0,0 +1,21 @@ +--- luv-1.45.0-0-old/CMakeLists.txt 2023-05-30 15:27:25.000000000 +0800 ++++ luv-1.45.0-0/CMakeLists.txt 2023-07-06 11:12:23.773570014 +0800 +@@ -244,7 +244,7 @@ + endif() + + foreach(TARGET_NAME ${ACTIVE_TARGETS}) +- if(WIN32 OR CYGWIN) ++ if(WIN32 OR CYGWIN OR OHOS) + if (LUA) + target_link_libraries(${TARGET_NAME} ${LIBUV_LIBRARIES} ${LUA_LIBRARIES}) + else (LUA) +--- luv-1.45.0-0-old/tests/test-dns.lua 2023-05-30 15:27:25.000000000 +0800 ++++ luv-1.45.0-0/tests/test-dns.lua 2023-08-03 11:12:40.587973091 +0800 +@@ -161,7 +161,6 @@ + p{err=err,hostname=hostname,service=service} + assert(not err, err) + assert(hostname) +- assert(service == "http") + end))) + end) + -- Gitee