From 30ea6d99dbb2f6ad0642ad88c33c0dca16399419 Mon Sep 17 00:00:00 2001 From: luozhu20 <1393302983@qq.com> Date: Thu, 17 Aug 2023 11:17:02 +0800 Subject: [PATCH 1/4] 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..f17e16f3 --- /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/$ARCH-build + 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 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 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 From 1e5f46114b14dbc95491db6ca557322bdb6ec657 Mon Sep 17 00:00:00 2001 From: luozhu20 <1393302983@qq.com> Date: Tue, 22 Aug 2023 10:00:54 +0800 Subject: [PATCH 2/4] add libmediasoupclient Signed-off-by: luozhu20 <1393302983@qq.com> --- thirdparty/libmediasoupclient/HPKBUILD | 83 ++++++ thirdparty/libmediasoupclient/HPKCHECK | 27 ++ thirdparty/libmediasoupclient/OAT.xml | 20 ++ .../libmediasoupclient/README.OpenSource | 11 + thirdparty/libmediasoupclient/README_zh.md | 11 + thirdparty/libmediasoupclient/SHA512SUM | 2 + .../libmediasoupclient/docs/hap_ingtegrate.md | 78 ++++++ .../pic/libmediasoupclient_install_dir.png | Bin 0 -> 16303 bytes .../docs/pic/libmediasoupclient_test.png | Bin 0 -> 31515 bytes .../docs/pic/libmediasoupclient_usage.png | Bin 0 -> 37417 bytes .../libmediasoupclient_oh_pkg.patch | 247 ++++++++++++++++++ 11 files changed, 479 insertions(+) create mode 100644 thirdparty/libmediasoupclient/HPKBUILD create mode 100644 thirdparty/libmediasoupclient/HPKCHECK create mode 100644 thirdparty/libmediasoupclient/OAT.xml create mode 100644 thirdparty/libmediasoupclient/README.OpenSource create mode 100644 thirdparty/libmediasoupclient/README_zh.md create mode 100644 thirdparty/libmediasoupclient/SHA512SUM create mode 100644 thirdparty/libmediasoupclient/docs/hap_ingtegrate.md create mode 100644 thirdparty/libmediasoupclient/docs/pic/libmediasoupclient_install_dir.png create mode 100644 thirdparty/libmediasoupclient/docs/pic/libmediasoupclient_test.png create mode 100644 thirdparty/libmediasoupclient/docs/pic/libmediasoupclient_usage.png create mode 100644 thirdparty/libmediasoupclient/libmediasoupclient_oh_pkg.patch diff --git a/thirdparty/libmediasoupclient/HPKBUILD b/thirdparty/libmediasoupclient/HPKBUILD new file mode 100644 index 00000000..acac5fb7 --- /dev/null +++ b/thirdparty/libmediasoupclient/HPKBUILD @@ -0,0 +1,83 @@ +# 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=libmediasoupclient +pkgver=3.4.0 +pkgrel=0 +pkgdesc="C++ client side library for building mediasoup based applications." +url="https://github.com/versatica/libmediasoupclient" +archs=("armeabi-v7a" "arm64-v8a") +license=("ISC License") +depends=() +makedepends=() +source="https://github.com/versatica/$pkgname/archive/refs/tags/$pkgver.tar.gz" + +autounpack=true +downloadpackage=true +patchflag=true +builddir=$pkgname-${pkgver} +packagename=$builddir.tar.gz +buildtools="cmake" + +prepare() { + if $patchflag + then + cd $builddir + # 增加编译开关,默认关闭webrtc开关.若后期支持,则在编译选项中增加两个开关即可MEDIASOUPCLIENT_SUPPORT_WEBRTC=ON SUPPORT_WEBRTC_TEST=ON + # 当前webtrc不支持,需要剔除掉关于webtrc的依赖 + patch -p1 < `pwd`/../libmediasoupclient_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 "$@" -DOHOS_ARCH=$ARCH -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() { + if [ $ARCH == "armeabi-v7a" ];then + cp -af $OHOS_SDK/native/llvm/lib/arm-linux-ohos/libc++_shared.so $builddir/$ARCH-build/ + elif [ $ARCH == "arm64-v8a" ];then + cp -af $OHOS_SDK/native/llvm/lib/aarch64-linux-ohos/libc++_shared.so $builddir/$ARCH-build/ + else + echo "$ARCH not support" + return -1 + fi + echo "The test must be on an OpenHarmony device!" + # ctest +} + +# 清理环境 +cleanbuild(){ + rm -rf ${PWD}/$builddir $builddir-armeabi-v7a-build $builddir-arm64-v8a-build +} + diff --git a/thirdparty/libmediasoupclient/HPKCHECK b/thirdparty/libmediasoupclient/HPKCHECK new file mode 100644 index 00000000..058f0bee --- /dev/null +++ b/thirdparty/libmediasoupclient/HPKCHECK @@ -0,0 +1,27 @@ +# 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/${ARCH}-build/catch + ctest > ${logfile} 2>&1 + res=$? + cd $OLDPWD + return $res +} \ No newline at end of file diff --git a/thirdparty/libmediasoupclient/OAT.xml b/thirdparty/libmediasoupclient/OAT.xml new file mode 100644 index 00000000..c2cd820f --- /dev/null +++ b/thirdparty/libmediasoupclient/OAT.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/libmediasoupclient/README.OpenSource b/thirdparty/libmediasoupclient/README.OpenSource new file mode 100644 index 00000000..966d2aea --- /dev/null +++ b/thirdparty/libmediasoupclient/README.OpenSource @@ -0,0 +1,11 @@ +[ + { + "Name": "libmediasoupclient", + "License": "ISC License", + "License File": "https://github.com/versatica/libmediasoupclient/blob/v3/LICENSE", + "Version Number": "3.4.0", + "Owner": "1393302983@qq.com", + "Upstream URL": "https://github.com/versatica/libmediasoupclient/archive/refs/tags/3.4.0.tar.gz", + "Description": "C++ client side library for building mediasoup based applications." + } +] diff --git a/thirdparty/libmediasoupclient/README_zh.md b/thirdparty/libmediasoupclient/README_zh.md new file mode 100644 index 00000000..387d6c2c --- /dev/null +++ b/thirdparty/libmediasoupclient/README_zh.md @@ -0,0 +1,11 @@ +# libmediasoupclient三方库说明 +## 功能简介 +libmediasoupclient是一个C++客户端库,用于构建基于 mediasoup 的应用程序。 +## 使用约束 +- IDE版本:DevEco Studio 3.1 Release +- SDK版本:ohos_sdk_public 4.0.8.1 (API Version 10 Release) +- 三方库版本:3.4.0 +- 当前适配的功能:mediasoup的初始化,版本号查询在数据传输时进行JSON格式的解析 + +## 集成方式 ++ [应用hap包集成](docs/hap_ingtegrate.md) \ No newline at end of file diff --git a/thirdparty/libmediasoupclient/SHA512SUM b/thirdparty/libmediasoupclient/SHA512SUM new file mode 100644 index 00000000..b5657e39 --- /dev/null +++ b/thirdparty/libmediasoupclient/SHA512SUM @@ -0,0 +1,2 @@ +ffcb21b97dc277f2556d671990f231caf8c3faf719966f13c62580e4d79b82251b35a3bded1a794397e6c5a007985dde9037533aacb6e78d3552761044a4bc83 libmediasoupclient-3.4.0.tar.gz +ba705ccb33989c3663ac08603cd54c196d2e5ebe77970ca0f7c11e26dcdab79992d76b37592d1b298bf75f1aa576fe675aa61309240c49bda2cb4bec8d5512fc libmediasoupclient_oh_pkg.patch diff --git a/thirdparty/libmediasoupclient/docs/hap_ingtegrate.md b/thirdparty/libmediasoupclient/docs/hap_ingtegrate.md new file mode 100644 index 00000000..2b975378 --- /dev/null +++ b/thirdparty/libmediasoupclient/docs/hap_ingtegrate.md @@ -0,0 +1,78 @@ +# libmediasoupclient集成到应用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/libmediasoupclient # 三方库libmediasoupclient的目录结构如下 + ├── docs # 三方库相关文档的文件夹 + ├── HPKBUILD # 编译脚本 + ├── HPKCHECK # 测试脚本 + ├── OAT.xml # OAT开源审查文本 + ├── libmediasoupclient_oh_pkg.patch # patch文件 + ├── README.OpenSource # 说明三方库源码的下载地址,版本,license等信息 + ├── README_zh.md # 三方库说明文档 + ├── SHA512SUM # 三方库校验文件 + ``` + +- 在lycium目录下编译三方库 + libmediasoupclient库不需要依赖其它库,所以在build时只需要编译libmediasoupclient库即可 + 编译环境的搭建参考[准备三方库构建环境](../../../lycium/README.md#1编译环境准备) + ``` + cd lycium + ./build.sh libmediasoupclient + ``` +- 三方库头文件及生成的库 + 在lycium目录下会生成usr目录,该目录下存在已编译完成的32位和64位三方库 + ``` + libmediasoupclient/arm64-v8a libmediasoupclient/armeabi-v7a + ``` + +- [测试三方库](#测试三方库) + +## 应用中使用三方库 + +- 在IDE的cpp目录下新增thirdparty目录,将编译生成的库和依赖库拷贝到该目录下,如下图所示 +   +![thirdparty_install_dir](pic/libmediasoupclient_install_dir.png) + +- 在最外层(cpp目录下)CMakeLists.txt中添加如下语句 + ```shell + #将三方库加入工程中 + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libmediasoupclient/${OHOS_ARCH}/lib/libmediasoupclient.a) + target_link_libraries(entry PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/libmediasoupclient/${OHOS_ARCH}/lib/libsdptransform.a) + #将三方库的头文件加入工程中 + target_include_directories(entry PRIVATE CMAKECURRENTSOURCEDIR/thirdparty/libmediasoupclient/${OHOS_ARCH}/include) + + ``` + +![libmediasoupclient_usage](pic/libmediasoupclient_usage.png) + +## 测试三方库 +三方库的测试使用自己编写的测试用例来做测试,[准备三方库测试环境](../../../lycium/README.md#3ci环境准备) + +- 将编译生成的可执行文件及生成的动态库准备好 + +- 将准备好的文件推送到开发板,进入到构建的目录添加执行文件权限和lib库环境执行ctest + ![libmediasoupclient_test](pic/libmediasoupclient_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/libmediasoupclient/docs/pic/libmediasoupclient_install_dir.png b/thirdparty/libmediasoupclient/docs/pic/libmediasoupclient_install_dir.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a3fa035375ed235b4dca823b451a5967fdb8f7 GIT binary patch literal 16303 zcmb7rXIxX+-t|FLq9_<0ic*3>#Sx^aNEIxUu^>7QBnVQBh|&_Imn0}rP)f#eL5xEZN)q3?8iXI%IbU01Ak*0*_VT z@fyrePJsX*S10)=)r5X_0sNiSQL970gt<=k)9-9UU_S=jFIJo|^dV_hxuPQL>7Mg`~fizSPw^A&R!GMaVG7IziB81I`KiB!J= z0PZ4J{)g_0QdPXqO^7sr`6*5x_@iiGHYqfPes2|YH4vl-{-*(juLDxj%CAt;-+^Gsz=y!Q zT!4IUb>T+)-%PcmX!vgEY-I$T4XQn9Jf;u*kEyS>c{( z2~JH3d+Z2!^aeMvV6Ldx-ut);Q0`PGhUbQ z++QtUGV}70s2=JD`z`JUCkc!z(-mgH3!z1s)8`_Im3<^poeeJ8Z_f_?EAmp$FQ%KA znxWVlKRmleILQ$Cef|);Lw+Z8^&5xK3>+fluJ-K%A#*3n`(^4ZlMQ-p7w)123zvV2 z5{>S~r{4F9i;8=?CSO^LDr)A&$8=Bdrd{;h?CnclrwID)Y7afv^!0;z1`)C^JxO{d zCSJQNIsyPXb2w6;{{o^WgLr*F@)TDR1}tuFLPtKOSI-U4g@5wuy*OzmyOD8uh0b}+ zs6kO^g^)!#Bk~_O3Ck5`%T3hf)2z)^pc14X0o-b=P#1CK|?i_Q_v7 zC!E{cE3n6N%Cii5cc2RGjrYq5BkS`=W=vH)ux1}@%M^Rz>BT9y(a%?4YRo7%!_tc8 z;*mAnPP!K7W2MELMfK}ofB?voRwLozyqg?_KdUQ!G~R^9y;i@|M89&~{3%3Myk56UIeNG$ zb7zAJD`dV|bn`a_mw1aE`}_&)$?${1$>H0u)@F4Czw26F8kriM%C(C?GUSQ-Jc>F6wa(p`r z(gGGQ%%Xp%HTajU$;7sytI1XbDZqG}l`;@*1r`C|rp^U|C4N%du=>IAsfk9DKsNxW z7<;1`HFx#Q)aw>RUqAQ3z9tj_y0E|9O`j_R{1GpAfVz?4m4VgWdpRx_Xv!biXq)sP zfXkHpmcknE|DZKp&!y_57 z2t@ZHd0fJ<;!C*W&QCs$DK=y|Z7VUvcqp@XMR!2{n%tP!| z+&xz9w=uR4qj$-YOjTmK_e_;Kpm=N^GD(R!m>fI9uMl+5OXUxSX%j}Hp6?1OT z>z&@*D*J4C?lhOybW$`K>vd`5Xdn{ACj>z81X-eRyN4REX zZUWw@$!=!W{k)pA^}OE@``1AeDS&;5V5>m|qQl`-%?%zvjXBf<05)!=0>HMzV5s~= z_*Xzly2C*@c!8O;{0OsqeZ7f+BV+&wqWx^uLpQb*DEuxt$g)8yqA#5-J5%fqBcCc1^@v@Lf}z>)imi)RkJGTa}FcTo7?vpfhACU?Tcx!iZZ2Uigh`~xyaucB)!%Z>wxHOP{oY{ z58^9PGDzfAS`JEwd5!NH;*gEDRgxWv?et5)VD6?(Ya!lPeBxLyN&(qFIuV|FTu0o& zo~)X&-*JFQ%%?cywC$maZt>4{sLKF3Pwpn=b29QN#}X4U;pr|1jI7I2e9)PemsbG4 zIGR$av4Ouq#!IbfVLIr0%fV8t(+%QvG3jngvjG`GV z3M^?gSHjtyL#LDXQ_s~#)<v+wv*GSCzJKaCTdzz7>sw@V~0T1}21Q?<^Rsqqa^H9Zi zH+t6kuJh3afU3K3`6)Z<9oJ}|IFWeig{;rw6$LEI)=M%)vM*KSb)z8 zsLYTD@{wg5liVdKeh;Dh5v}92^XlD6+mfXt<3BjlrGWU$+u`PR%Tw0nGVtuzrGv4@ zx9sp47~v|Z=8@~ta&%!%Yc1%$9{A#ejz5Mbz5vJVbj9o;^3%=p@J+*?p_lOKK4 zT#C13wKc-w6Vf@PJkEzYoC@$qq$8aAZY3D%iO_abe^M8H$F2N;@%!{nAYVDzg8FXt zm#>a|dDO5ByjI_i^ruy7{Ui}NEVmTam((s^_gZ}~T(vJrH!}tzeUSC9q0X3lQOY1$ z9CWCEKds5+pdw?0AMyxA;W7v^Eh;9CTefj^wDrONREhp!3Tz>iHQA+suOIXqdrip# z2XnxfFsGPB3`KF&-WYf@csXRP4`+L%fP4Y?{QYOGC8&7UahQjJUtF$a+}0?$J}cSe z0U)ilp&kZyUp|x+ML$ot&Ph^k<+zc51y}$^!Zt0>$_+5{E$=~-XJf879ai(KuJ<+w)OKAHG1GzQhT@ITj2$&pNvvfoXft;eMmXcrtxUxl_cAsC z`DNb?>fXzQI=^~lAi3_X?YEKTgalERDpBF`NJi3t?s?w^2^;`_Qv~J<*nP(DVknG7 zW_BBnb9J|x4^T5GN%;R<&j0fuY7!U(8om5eyMOv#?kYf|OLA|9T6F-f#0_>IpX(W_ z==Cc3Odq~4_c^KKxE@G9_Ao^%ghec?LL+)HinD< z(GI15&5!!{g8%NHFV=j3=Wx-uzNNmdvJZ-C%vuA{F~prk7Jof8uN?|F_JTw7;cMSX zJ%S`$+4(RQ%7hMWvN2BA`ZQ#pAeB=giNY^!UtN1BIbXj2l$Dn<^BF78-}YWsj&)h8 z^8h`U(cEPjTUs1nP^(I>6+~D9NJFp^IOR(kWs7Yy;|UFRvbib9%1enkHXA2@as5M= z#PvzzG?F(b_Qk?#k77yo6uKii&d3)=h@dc2>1c=V^T!on`duJ$&q%o!{Fhd5Wqf$i z4*4B0JP&0;JP6f^?5IgN;C|(}nuk+W)@A1EUfrQCJW+obvfA(X@yvoL|4d>|vcDPAH1l?GDDT^AbcBHVEci zlG;~Qy>?!iGP9y)?(9v7?3(HJhW-L+o#pB`>(Qpzijd_X5L9ov zBlZv$sF`!R53#RXexlRocq0Zos6c*d9A@PgEEO^z0zIqdx|iDEP{i0lEG;)&4;;S^ zv0WZ~pCUKxo3TGK@x8GMOy9@_^($lwjsi9q)nycON-9xKIRL~HA+|FGw5=s2#mneQ7RXtA7R;RQWZoHIxM%+xwwkk8F&~Lwd zTIIcaMehPKhqKV4-8TXmH(5P9phX4r?Lpk)BAzMwXj;w z-~`+FD*LGpE4EIpTiZNC0q96`mgb_aT=-Qk@wYwq1InOh5YAJ#e|gaRH() zS{XzC7VNL7<>17~Qk~9ycBFGkN&+bB0sSpd*MrN02u9~m@enZem^$pa>dK2{XTyMaFGZh z2094*aI_9;pIclKStg|EuVLt#wA_Wn&^HE!-vrEne~KM({+764UywlKtPtBxN1c z^^|GF)9$V>aeAcVwv3V6S_9{|m<=s5ME_yv)bl^(;)`RmM~9m{`Ig&CA8~%Z$uSXD zZDh`bS>|cJxaajA#VoMws~pL2^iaq;9D^jp$U}B1>G~aUd?wywpMo zNZAgr`uMkO^4fW!c5*bTO5H=P^n))Io@*j+v37Km}hQ#SmUa zU9N?j6$-rt82AL*n(y4q$)4zJTJqb7F>w`f5NtqS-YV?+auRO3;rjyO)ihQyJ+eCbo17`~x!hIJPH-x6r`^^EhBxy?zwZNDrJ;?7O%fonh!H?v z&q`U=a{!vG?OtwpU|QP`*zgZ&yPV&R@Bbb~yR4MY$V$p63_UAd?R{EweRG>za5&OC z-u78w;lkv@C*AKsN{FdR)t>ky{dCK{gTGJi@lU*-12jQcTd761gscAGcfQ;?2X1Ro z$NK9?^_Gy$-E;{qfwn)2In5YIgg6hK>z+?NxocRwJKEEVfJpf((V6B}VGD8kZ~Uyn z8a|I^xH`kkzCt{v^V5coVew2$Sn-K0`9ruqGJW7T)Qf3c*Kzom!tFUB?Mkd>qm?iu zNa3Ymc7_L`n4b@+ve=PA*?+Me#@&JpY?;1`)*gYd&|zwGlQG>z2)yt{JNBx0Xyxcy zc*36gZgijOx4S)YUj%5^wj-VmhpETzNw$s>QpKF|TQxsS$B${7SrX;aToGZT=}Qg- zZ`P*zb~d~Fq2*xNQCH~$p(XYu*f3E_ca~^rm_H_*X9Hk{*w|1j0|P?8t*TRF3f zy3RL;F5@Po)td9>w|Upn9tNEIcHdx(q*DwLp@HkE#v1#_aDS{(`e$_@)fym;bWKfS+?Wz zY%dg%SkD`qS;cTwtDF#v7-30_N#Q9)wtRn5UYpy4P+@37`1<*BHw=B)!7tdA=JR2} zbhO((gHFNGriX~q`X=y%=gTSaPBmc=zbJEirqm7_^ zM5<|dkEQB0sWmG;uKfYzHkFY8`0u;F-w3)Bs!Tq9x>648Yg1EPi_h)C&QP1*u#y_P z7c77OVrXo<1fLP;_faFq8Nn>|QZU;*4-z^zgLtj2qaS4MqOENS2E}_R___o029YPe zLlgriam?#;X7}XfTrsfli3qHqV7gKdrdo!^&PEnb7M#S*$xJzqMLwVit}h9IWH4*r z=UGI)J5VVW{u}xjIl3Zh=AI>HdObC}nj4RQ&;arl{Am8n#SSlmdd;9FH6``0gz0i& zUzsbIF7FTyyH$2z3r*sB9VRs1X7ZOVAgJMl?9maTt)*6UgB8JGlWE2D(x=2P$S!}x zyW&Bb?Js$I*x7dF53wEB)51TIPpN70$DP|Po|xt{kyz3Al%^(pg8Odh3TJ|pKg^ml z89uf+&LAZXI~wNii_^c@7`wQXIQtbUzFxuQjD-}CAB+z@MNco$DHhQdWQ(Zq`CCKr z1$)MNk->Lg)S2y~!p-!=>AME@jG($#!oaSj$~#YH@KI9h_!%JS~_MHaVmKRlAk}?`vtF-`m_LJHFhc< z_gms-jQB=H;aKHj{ST?~#blw5N=FW!(EbI&#lCgBi5nl+Yn?b&7SSiFefA8Z z#M6 zNm;m?I?%p7G-N2fTn~6`MdLE7c4YVhVLIK zB$y10yeg2L`f!Nhr>-Jiln}cT$eH#Lxja;7wvju``7RgVZg7@Lg0_Q;%~lnt4eJX( zl2iWV5JBqYR_f^E%ZGg>>`^y3)zSN{lph5D`%)7`!HlGK%~Y9Sh94J%z}LW~C5_x0 zR$Tu_!e_{MIkh}@=z3DVAqDRb#K%J(-KoHAH&srnptHSdIQP>bD<4GTSTg&nxjhNT$z~~4 z!Pe=>EHkyR7cTVsHeW~shf0bPWge0fQyn8i1H1N%k}eH&IFKZ8A${OAt=b6luP`& z=B{$&G5yI7}f1w5Rr=eDB+MKC!a+V|os@^4Vv@;)PWe2@vVsLDAQJ-w{_q zEnKXWTR^>MlXB9`nGxJ!nMdSm6=+FgW!`7Q2fs9no!yI}9)DOXyZA-23L_WKsZ6y; zPVFTsEQ6F}Q1v~FoK>KkA^Ik{ebY&P_}32>7l?c2*q!w095u_R@t2F`0vK+y<<5K7 z^IKmL>7jJzD<>>;Q5#QDrd_8`%$U>6AAOHmoQ%rNU16JA-Bk9nh>`1a%7?klr3!%r zwo#QFZ=rU)H=BYx!txh1y?)lcGG(>o{!)rpRz>;pj*(ylS3 zf00dg$x0pyS8YZr&K?+bd&SLdb6EK#%R@qWJdz|8**!~7n&uWARATvG;O zGwRy>vZ0JSQ;TfN=D~4p+hOybCq%Sd1xs1=ovfylr50s+;A5X4rB!o!`#ttE z%n0jY<9ma{)ZwQ2bU)Ie{iRFQV*$E2M;2^KFQ_IBu0s@>G>^}HJhI2uqH7@)c&9-< zD63tSI&lYk(1***LK&Rh?7@MptJ$^n>lc9&)Teuy1 zs{KbD3^L(G?S7UE_qAO$au)mXU+6vzn1ooI}bW z%>(}A9Sd93RvdSWHIAp;Rx8FFLX48|pQf)}RRyDU6p-zG0+WUJ={heS#4`2)@O39H z7*p-<^Vg^`mlpOxPjYrU6fVZNUS0!$r(dt7m4xb6#xjbTQ&lVrHu4Z5&`Md^hHzEU zF{)vqT_KczfLn>8yIs*D3m+v2qUIOOe46ALNxC>))Xt&0L%(@kyVtmOs`ps&^i-Y?Dh%Po6eW*1-O$AzZNly;?P3#8<~;sryp{q ze_o!$n!%*VlNCc9;+^p%hLP;7`|?dppF}usegMY|TWq`yx9Tcc2p=En5@iHCq-7$4 zPx5B12`cSQ@8P~eIn8zhn0#jF{1BK?t2DO5*S*YNp>wh?y!#EgiG)R8gvyoj^3`kz zZ1yjmIS)dWEltSkmX=SG0$d33j84<1Yc$QrLOc0VKW>mjvO5^b5rZM26Gd);TDTec zsnK#`R}wltUsUv9q9g1*nQpU_&AXww#ilG^Km)@Z@^#+udTG`}@M#gAv7V(vd;~fN z1oAg$!qZ?ZQs68*j?vJu{_$bS6owi0vU+SYFErlZU%Jo+oXtf8w>$x4uf$m7{tFtDn7v8@M>cT^-oqy2j{1Q4$81-uh_4fo1#- zLR>s2=sO6mVlORAg@y8$CM_(3eAhbG07081<&sIekcm>Vc(8_O2jVjjH%jlt2%b}3 zBT=!5UylEo_8Lu?nMOzcOS;Wp2cqCXa3$P#=N_r7a@y>2QWHe7ekPHZFsF-!lX;?4 zYai8`D{yMcnw!&mJ1p+q-&gM#4eEKpZB_6IinM9HQm_OoqAosJ|3$k$7l>q>|5GV0 zzfmek7TS2iZj(f|$|1b(RvLo-TrV(8aX=Ft2!dOT+LDUlvpQT%8 zyEW{LKU1#gul{oBLopbpoUr)CrD9C5Mr?OJCt&x8IxC#B7zeq>Ut*u>a7r@r^D%}| z$5QJer4NTuH-~PgMDdGfLCD;Na z^*?X$Xs!P$1}HaA2;Vtb8}rL?f{TuZkwuHzk?Es$n4g zD6x8c4^RFX$1oKXaqM6IVyN{at-=nqu`5%J+Pf)=P(U9B9tU5h!GW3!AjOroU!w97 z*vNP|0DOQlR~h}KnCWkZSFQXXirKs>4ttK`G9b?l>1)?`6>&A3k~bM+3)4M+&hlcI z)1hKPMyhRB9f$6uq*Sv^2_JFJevMDrGT+J^0bhqeDaw|gp>0vn_{uTt~zb&=c z{%GJTS-{XrInV=}dLPt7)u4^7JbI&t?@fK+{XfVu38|WB(~JHx5^CP&a|wMaz!uMu z<0c!CU#o&2Dnf0TgvfsUVss?kzMB33$D?$p)A?#-CowiaWDVB=q%;n|6I%UB9|Tc& z?0fxm{NRx(P4S#kUx88I#VMt^cwGYH^F&?m%MYi^_j$CuIC}mq#7NDSAQiL<+E}xO z+lVk98JPJ^sqeKCw@*pj+fiQBOUo}tH;}~Hnp*TZ4xSB6O|p(}85<%Le>`%>$=0}W zTT`R@-nMWlq^_0nlpQ)Mt#Z&J>d(ekOuJ%R)uW`-)2xx%cSIU_ z%nR?@Yq5*!@oNkA8Y*q!T@H&amfAC4xrMdLowI>?H-uU}GR*4NcAK~37U^MIh0S`D zhU%qm*U#joxA<`pE0;1Vn%YkJG$3AEzD3=_(Y8U==)Ca{nkcz(@1pc>lynpi2{$2rfPpzwa=GF+GTgo^GiMAluQZE5`J;iYre9SvR#BH}R{ z-bGDC5Il8Z;}}=9muGcrCqjW zY%5iJjAKhI&x~Z?gT#W5Ze`BmrrfD6ippYbji}~KX~jL4Dq6MRh+c?%zwpddD@lCK z3`d6ss^5G{Uau;8kS}Ma`0#umOy$P&st4wf%VFDHRvSPnqA+$y&Ob zPbgGHuvq9se&EZ6cThPZufDj}WHlwzQa7Cr(pa>^1jPH>LrwkJ43Q~!thl=ZVQGws z_&6!emG3jcpqUxn74#&b~8X&ZJ?H@uLe)} zZDmi>{&o2bIUof*N{|Ot*Cf(_|7GXatfRPev3K*Bmya8Ow6Rhy2KYT=O%avXK^5mh zoc;;$nj`irRAL}{2HItc;~->}awmhTPSG`=f+Ph`LL{y5M)7vpq5zP_b}PeM5$aI$ zruAEWMBco*C1hEv$2(&nXbsdx6L!cau|F!O;#ilD^!SXNI9>0Cn?-ES0bfGT2P1}S z4kNoRZ{(6ncc9ckZ>z91YLpNZoM|3%DIOvdFN);RKo0@!yqFgF%j^QZaI%ry8-l`D z=lb=brK5EZX1WBrQIgwRp1A<$??XVUv= zg1Io~YONebn(O!^2+94Gxpd$US#TugPGe~g&>br#V8<~B#siG))eoCddxvyVyJ8`Cpin&?)7aik13uVf!`2yTzKr4uO+|0W4sE@x_^2v8bQvOoQ zlz>0@;8*{PaGW}m_%mn_vd1$%=O$D2UrLS^Dc&bQIEMQ`UmhzN5evOr@jgK9k+A6 z4@K^#Y>|VzxTwLNU6KamWS~XU8SbZi24kLkD#yh95|LbD)7ETUp;bpM_YXip9GB1pm}JoKX(HChX`igsT-UnE*Qf# zAV(JvhlzdQ>KqD+J3*k7-Zr}fgjvWyUhz%g&#@p|>CGq8r#L<+rl`4*KN3C``(z{pKV zXzLe~9)V3j+$=UwAPEZUcUw>oAJ#r}4?m80Puo3sTB@y)R&o@slfwq0>kbmkE`D*A zX~{bsK&D~U%0I)?8v-cPc?wOQ^lLL-9_v=TIO3#|sZZ?+2WmXPI`KuxHh1reeVnSP zL)@O!3o@dovO&{~%*lZmS|{iBd`GEKoaod+8M+{BQpk*hwBVNd<|AwE5W;0i^5{{) z{L?#UJ~xMhh9xWI*963~=Rw2fK#n>*VcVzXGyZFwOP|S~L4c~3_kVL)&1_uzH(T0I zu@F7b&p*%@uBZh>>u#m0!Q+kg?e5c{d-iRS{c5UAfx-K>g7S9iapmT}`#ji^bZByn z?fKBv_{CyVBiO)9>io`Tz%-|QsN_{palD$W;;^*FTbwvg{#BjGo@|mrPSbVQhF5w< zDX^BowLtPF=#<9aEH*?U#;?uQDTor5p2&6h#RnDcj{Uu*{1${h4rTF+UO=NAz<53O zH)$|P+19Tp?`)BVO#G*Dzqukyn>*Pau$hUm^0<9~jwV?2mf79Q@%a>mNwns;c25c< zc4({ErCzzF5WYNLplZM8ns977e)vV{XYbPeios?T>Wgi-fC-HedToHj52XlpjAdo+ z%xcUATYP1Ytt0VX>2EUp&)h4V*pgQHi_Zg2%U>xzC$VW@_8sHR&bpKa|w{dQC1l3D1a9fZ9Kqg8v z^n29upr_9DqN@I z^6r>RYA}CxhgM)R{e2&xFKeY7d)}DppuxVbzWTH)`s@Tg9}R7YGG`cNX5%R^=Hs`GKF`a@Bbmpkg|VlF$+@Kx(av) zKK`~t2bMl+8j=_vLMS-CaC^9*qRqY>(I31kGD;a*l80%*YQp=1qLi5!usVaT0OiCe zf>0rEBu0B%4O%pT{}JXKXl+{-cPZHL?8-N`#>yS6Jc_(d$DL}+3F77I{s%Ca4Kj%? z*RHv4A8-OB>~F7ha9hQHwN{O3WWG=q$$1^jO|`Wc1v_?2y7qo*FDkgjxN>QNMsj68 zbA&yd^Z1?h?EJa_g^K_FeSnn-~t)IC?7N5X3&;Z}yYGV0D#il%$P!eyFJ;fmk z3rv&%cV!Tu+{`9#>^js1#kKX?aaBUA+Nzi4D~srF!3|8&9+Ee?(BuhPnnAkme~$-A zGXWd#z10(cSy>ce(2Uz(d&J-rdHS)5x~9ZVltDVaQsNizvKr)r-U81ZAYUTs2|)Ce zCUx(=W!tI5I}`-|zTm5L^`&2{rvG~fAh3V&VT|~&ZurbD{mB!&y++kz-rL<9dMdX= zMg5FQOY+K>Fk+y^*XIn^JS3t@qH)l}_ypGzmh}DbUmXc`fe;p( z-gLkSK(4k5vw5=qi#g0I9q<+z!>UFgN<(`SX3AI>C#8Y-8<37y-cMQO@(+A z`LQ%;I0w7!(P*r19RQkKq8qFUX3bwy+J5WB+Eusl!=6GPT{?kbyB=r(pY2yU5Ln}K zN}uMBLc18DZQRq+Ki!1rLDU$N4~~Ny*y=Q750Bo>0yGrBmTy`%0K;8uIuNwbKUM!A z)RUiHrYSbM?ir`wvUSDi3h)e%XiFhatN$E#VA^8ovt>YLrQnwmqJUpukH5HKs4_OG zW2jVO*&CMHZo1JPFI!S#gDJtYuUuz_mDu~)F}?9Z;{=Q`G1zcR`%|=9cd~_QKs&GJ zBX@een2ft=J#Gvb`&yO7P$8L>Gtf{`9W2z|CHzA_t^+&u>3L|G*;Khvqz=7q2>VC# zDaBdNG*&M5Ewao~S-zXAW<>Q=j^{?$l8jtbH?^Ld+7#Z-VRYj%o#3!Q2YG-EHs_rQ zGnE5eDQ>0(r>Xbuj3$w6Ne>B`A%Pn`n6q`YJ~-e0vt3vBHPK2&A@WJHh|IHLhUQTM zjVFf=I(LMRa_<%_snP;CSgDWtAe?S!`;F85Ly&*irvVPbk zZ~KfF5ctL>!5%C>>c@@UN^&7N#DH-Vc_G@s*3xVKLcAR zoSc(9&z?LYOrd`!KvWdq(`{R#%q>l9(ddG^v_0q_0R1AZnjpKAlKMz-wzh*_%XUOm z__1>EZfc`@{d0SC=W~NWXPulZbm|X%D!Xc9o;q>Sy-Nc_>-kvbDm?ZJKFk}v!EyYU zahjH_FUQ=oM+L5f+IW;g5k(H1W|<54G))}?J)&j}un|sGd#tH5A4#2a&G)^-y^%Js z$rbbsNV(tt^7!Oj`ECm}EQ8LtE#&jE7oI*++MMaQI{z5RVf{*xkrSUpsypMgs^SE@ zr)M0E0iC`7P1x-?xENafoujwvE^+3y%*k>sJ-2{RM(A5rBGd-l%;Sb_8`L4VH9-KR zuQtr%@7!^ z5{ZS{T29qDJI9tz_9Sm#kqcqbUudJTcj^0Jpb>Nf5h8zL(^sRgV%x{D0!53xx2y?| zlGIjKF+)l=GtYZI`jtSwYyl3}tm9uB7~ZMAg}>Zn-IMeQV?GHf?f+Sh#U_G`+)HO3 zxLaeIKnLyQ*)3Vl&DIcbFVSQVr>Q>#YNP%8MMAs@2M2PKnNN7&8l!$FWPaVUmwmX7 zg%*yi^N9f7R9q)*?z2 zURe(SJFE!`Yx0SH%I*|3AlhjwbrsAV=B(ycjXlfjKIrIXxY=wqfV8j*J18k-mR7kxa!Lt;NuZ-fg9Z-6{=(ucED&1A!z!OZD1nMI~H9Wp@50l2yQD(+2f`$`6O zLUT%V#%F4AGPInpZVb9P=C-mCr50fxgza(Qk`SBYnQ^|4G?dM-UqBs^707hZ$&Lny z&k|2?Sk2lQI?Qyay^0@Nm`R!EP+p1dHg(OORjh>n-UXJB(l(S$QCxm-PK2&@{*?sE ziZ016JlpjW?X z3sf${-gki=I7^fQimVATR0xbRl&4dnHC0x*E?=Nc9A?dgft!eCN98Z_%5pgiY~kvm zBe2#jh8=Mb7LomIiQWuS1#?XqI16Z!G;lE6$CcFUH{3%6m==ny_qEOHL1^M^bPwWsL(b_k0xg;lkGNI*#EpXhJ`sMT@xssGQoz}q)^+gmo&x_tU2pySz&7MRcgAx)d1JhsZzCU0eJgw_ z-V-OmtFNuTEhSJI>-*gXhe_mmMzrqw7TDm&=eN#RJ5T*v*G@#_*{pkohIu5S*M zLe_vq|6Q;JTh&t)&-D+?wFemvtjT@Xkj5O~%RM&zdNl>y3DoVl^}xU>&R;riSTI>E zQPOzd9NO{9!#A|zYl4X;Joj-KU7j-mpX_zDceNM)jw~rXe8Ax7R@yq7-iCdti|WJB zCE1Ww95*`0kro=xE|TyBxn+xaKCs?Dl22X)hegSJ<6Gy;${QqA-oEjv8w=~VDl4)R z>lRnmZ#5RucLwr1MkP&RhPRV`SUoOxDw-M>O)}a}mU26?x7RndHNS9bE3MMxP7_?L zgE$?kS-!dBkR;jzz9Zom-Y_&SMqBYEkz)nMHTg4+v5IhNE;NreU$$+6xZOl3$&}i_ zurdsG(b*3ZsU5=#5XGimE z<)Q`gVMvlQmbViObiFs+w+(lud|~B{^)+PVw|sS5^KTQD@kf{kkvHh~4<_NMc;qu` z{pH*m*bW{$-cX^2dz2sw(0fSn_8M) zA=?Z|+W4F5DqCn2yUc*woS-<0=28#X2gb}pQ=58k!i7F@Oo}&%xj)MMQH=S*kbfx= zuG@8`*)Fse%uX8#2RY9W^upK45+;6e9K1u;z3NtsJu<1+3(9hkC;v;+iaA~;QyEjQ zR({{ZP|;VNYP-N@0kfX7CD1h{%jZc4*d_*=MAp((bT@6cTTFqXuo(>uRST7dMy^7) zZXI~#?765>4w=m2?rXYRFtI&4f#S{DRkFhUv%byvx-*bxv75T(%=k=$P^9(eTSyIX zRgV?pdqFfm)e#QgdFiRpsW|7c>OW~V>K*NC{k=q(8^ z35k8b56-=L`@zgZ-8~f_3bO{D9FJ3f(Cxl$7xW0!WEmFKf!he=23-EoU7fd9`gEF^+U=L*PU=M9OQ+n z<&s>An^sTj)kiUxmnx8}Y7T;1s*YV_!TbNEQq(?mGS|^$D^jo_3H77>s`J6l$wdN) zHGw0l7tBjUFG)MPT4qq5$C}0j6K{SXr}?13g@GvuInOmZnC8yhZOX=)x*0{E-JYuF zPkd>VWPF_aeSB_eKQWS4)TVdh2G80E6JuwF4~{G4w6BbiQ{>6fD_haL-6eaxQN3@& zYo+fYQ_Q^FiHrBpS7kjF{^!L)Y@IUOEgWf0Ah>i#*?7j}#(W;0`Ox!hxS~DxWz~$T zDF(m%4X|qpwC36th@DjSsa#d9%HCKCO*Ej6RoHLsE{UgjO{v*Lg-K>&n}+&q#O~Me z?}OB^L^6%N1b=S{*+5LM+O0UEYKokO6Bjo)T1EO1u~_YFPoA6${zjCcsGIQ)j2ToV z6n9>W42x@qhsG4K_Vx;1xuLV=$SxK;_yZzVoD1b`u@j|@AGO(5yaasKVoEi0j2_9F z)4}FZJ zb>K2TGRJ{rzE;?`4YROd%Yi-`=4>euT>wL@@6WB-Sy4gjC|+1dsqV&)fr!X8YA7{^ z#MjRzw3q%{baXV)_|wq#gWza0qHTfl_a_q5J{e@e)rgFelv{J?+{GDc=WFRs#gV`b zFh6b^R`Oyaqb5|W!g#$QB_25k+WOA?3jW@Og$1(+?0Fg&-;hvIAsTq@V6Q&Uu?bxI zY06M_XWPbke{!A=Jp!1_5lnNMa^nkc?HBHl2MP01y z{(Y47UC8~sUIMVnk^T>SQxvOM)1|^q(%sHkLl?FzIiGWo@ym zFp=!#n&(Bum6+blrFS?t+xd6*6zdFK_Se%2JJl-pM3Y7td0KbyJ^kBQBuZ4XVAWlW zuO|tSA?!)3{c1eaDmEc!a2h?oHGjZr%Q3}FqL&C_cmCed7eu~Xg6M7>A#xI@&h_~5 z?elO}qNeUJslkzKL~tkSlwg`tbJ-NE3%#g2>CLF8^5uBFL>D=|zCmJ0Q_{5T?zZ*C zN-WWl=z7}wuauhTxGMG4X4fnuOCuL7)U|!#?H;L?(w`r8o zwVfwg#6yAfNtgYN#NCA)a=(501TAvk?wCXFdpI+0?mo_ZNQ%!#hP{pt><()hp6_^q zK$*KFJq)GI{ITs|9b5>1u*Roz(uUpa1FHd#L`Wt8P5iQs`M2CvxBtF+6g$c;O#+0TvlbnPN| zqp+J3H11@`*Wl2lrCJqgf){*k&Txp7^T?|KP_Ah;da$UFEVE@6r%d;btJY#Ygvw3h zK54l>S(1Xaza&rDjciFb`SVJnSm|v(fkNyiT0rh~HR-4vajv7!-$(3QEk(9^r8Ah9 ze5FXHe%Z0ycXQeVHo=SHBut{nHzCm>PyBS|P~4yz#Ors4bUF-6(c8YXF3=}p-DUEm zt;i7Rob~EXF+Ly$@s&wU5;U|9=(4ewPnf-^~K`& z?(PeWfbcDBWSf8W)`s6tV*SyUtCUSdDc#x;CA+nZEvstnZte54kzv*fYWugvw1OAW zr_L4pO4U8pH%ScS$jkiNydmvI zIOQU~1`K};!qmALtSH*JLpUj1wYiZgal3Bg@zGOt6k43!*uFy~nLX~f|8P@`p6Zne z0XT(YV~UVTd2m?8$MoMnJ>-EM;KYx57|LFWm15FVPHxKOMD8sc1mZfS++h*(^0Z_= z!GN6a>5bdp^>eT99Ja`{h)A`)cuQ7g;VuUe(i-yS2CtM19+E=RR<`{~*33 zNyI%T3Dfc)1pkCp??(d`J1OJmqgpbb8#|xXw2nLFf(Nk%WHir;7od9y3$K+OZNFvwEh{DC}=ad zY<-NRo@0E$HD!3o`uH!O#vOj__H(&40wT}C2sYtGqkd=T`C>DfTEKFKo~n<=nWH=P zeF3AK831>48Z};3L;t3ZYH(-7onpG zhHWV$p0zPEkx8`QV2Ws2;rg8_#q98M(;203pBGEGdb!E&89D}|UiphY8g*?5;0`EG zj8qg~tjhU2$4zQ=Wq)YNo|5U^lPTu%T=qT9x)_KQN}8SSR@QdEB3gXcM(}2j7AZ?8 z)qL`h@IoL~LQrz*F*-^l>=mXo6F}*+D!%$cvrBi@2U$^fG;6+ZpuD|{1GkQ1JLS!G zUDfxAN_8ymATMXSo4)My@Rd%_z%iH@<%XEEBjV(dDwR95zZMpR2BMg13ifg`NQ5h%0)tD4t( zU{OC~a-eA@$5F#}TxMr(0=m5;P<%Mb4%47bm4{$)PUCbx6crTeCulwL(fNLxTpFse z)n=Jb(tDF!0^MHYvN(oNt7q4W@s8zl-L!J{&g#=KI}dI&i8c= z#tbwA{bJw1jELl-9r*lW+;mcV8vVI+}!#wqWj959X}f)UEW2 zrSECmmGS|5DL%?0VNvY?aR3ZLW&Y-hp*2zniVwVQuI}O4qUcK8vxwKlC{la1qPw^Mso8x zPIji7q_u^(jph&J~-DCw!XJ+{e$KlFRY)lS4XeR zKl#y$d%h>=*M!3)%ITWt*65-;MjY%@FAh!gu+OXd{q|L&6?Z~6HC!tR#{`nHC?ZDK z-yd+B{+<~M7U)-A(#!jhPdh@vnU#yJ?s0`Y#oSIz5h2k|bATyR2?INEVM@ST-DxT? zXh7&=sOHf=$h4}mKoiBwu7z|uPMc>It5$95;r3p z)XdpehpDqc+Iqb_ECFRUUa$A3i^70=gD7_5DVVBu4-M6mRSK0=lrr5eaA&(r`c@FJ z2Tl5BR}&UVc~qHvrJ=ktco%12v; z%vIR2K4J(X{8O}*h;7w}&+3CVIULjHN1K_U;eE|U0U>BSUuRVoSGB;VU`?@EK%EKp z@dcG#v(X~>q?f`8_N{=3(T9Y|Nx;NS7IzLg36!xce0_Ver+`)uB5=0E6Bx60I@2td zO{oq^aoreza04U&hXK{}V$n)YXP>P-Io{>U-_o9{%}R*#_)88I7Pp9*DPE3v%K+H; z7)03OB8c<~`$t_DhN=LkwMSB%Qk_s&2&IfVM4dy$Z$MUbeP9=%TDeOkQO8z$I~&L` z4OA?lzv(Eu*5&r@sioDkqDegloA?p8b|vw>Xq8)xo6dmJ2y*8Ont#_;iFx05)_B!; za-gZH`G2-2;M$FxqjJ!I1XBVd9*5zA|?7Zy%skpc9xKHp{U83g+6Jty*6Q! zVt9RcOjgQ;ByQ+fgT!8@7BfK%n$kiXXp=$!s9lLuG3+cQT84eJoi4}JbUP!EHw(Ka zRh)6;*If!z@Wf$yM=`X#Fk1|rmo`8Qi}twMmQu|j6&X5lfGQBTS21>%FcvUDTZ#l3 zKF846+MFRA`4rRINCfnQGv9HZ-AXZ06XHfyWP6h5B)U^p!0Al+yOqu;(C=?=uR372 zV*ux&cA{zW{a0*WuUghsHfy>vT!Oo+ZyItqlCfqik1%ReH)#1wB%@H4 z*j%ktkGmyJMlJgttCV0~@``tf3OT0jt-azv4x=BfIa-~KU$$G63gJifvba&aPBaPV zXD3N%7x+v$AA(1aXt+;8SA;&K=P~fhnj}qTb++CqMe&N1W?~zv90i38Swe0>h5B1!EC0gUW!9IMho2HSu6!SJ{UjX&*Mdb zn>Vh=?KT%MdnD7-%qlf2ByNE6-!ZY`-Cj($RHnPbwy?5H%VTLJMTze2VUm5exQ+`( zCrugzCz>Sxh*)a!X3b*XWb}vH+xVuY6^w!uR}@N_+_-ikd8OB7ZWl}$yQ|P*+}mKH ztXKtO*#?uECRjmlwiD2GQ%X5KOBn={u`gDm)L|~Fsby~h!W)aWh;+-?TUqq?I zCY8QR!CI<7J2L6Q#7R2fTP&AjKplci<1PTyN_!gNlYwYe3|`OBQ@~d`{j00d!-A~`9P_N8=Q9ajdy*O(t$!C0EWU&fJ8;4( zD`e0sxZRaEF#@82=t*-37fa%a!Fm&*e&a@?kyEx71y!`m$b~cpcjnhqv&$2YI#g3Q zzFCmLykf&0j2VS!iE?MX^sr+!A)&RXD^QlJ6*p;!U4j#$sm&$g*42e|<#{jNk!G*s z#Jl_qTOFr(&>Umb4Tq#f^e&pK#5OCN=PbkUk?Of!BGTSzg^JQn55#&30eTA^srD&d zMP14!2i;+@r&tIYaaz@-SQkA_FD}aBO~3^{@gr<&E81U22G?le$f_j1S6DPPc*Sz- z30(&X-tJQZ$M6mQD{^PP*4Ak$^c94iWxU;T1=*O&kbByv1c2D+duG4-CxD49iuWpy zb#fC*67*J*$QHjxG{*4VTpTG7xt5AaCNtHbE}G*!OC|8e@ z9KPN*o3UfZ^peA(jw@2ng7CN%O>_8+Qe2U+kc6)X0pona!0N4edvvcY0~T*l9C3T! z)t*xIx~lndhCyu^NCoWq0edZjwqYyQ_|RayPwf!Ik5mwJ(yFrW`? z=aGl~bSl){YLN=blG%@}1WJp|?eTfKFid!H9yQCseP^wli}VuL%N_2+E1oPCAkvXdQFqVCeB{+ zgE^5WJX2|ruSyRW65jbK%up$jn)AZi*{%6-+DZ@S^7_J)*YDa5P?SMDxhOCNZED*Y zV|p5-P^U5`$C)6)lFAFI8b-wyu;1(FRB8qF+pv zb4Bmqkt9X?pi9gXPpj%g%lpTrw$WSQay){I2o-RO0yAm|91a?7S3cb>Hg;3tpA{0qSv?H$;m*X-sNVLjE6ws-7n?*E zB{t+#CJcSs;_N#XY|RU?)ih`;gNp5>_o(z2oc0t}wrH7xJ!?A$N+mCiW?DQuA`Z28 zzi<{X2iLfhQxkw2U;=GqBs62^gh-jIawQ)vE)iGR(0=^N;0Yt0oe9sn_O2 zr>77PT((6A6itz69)7JT)!F$2Ov`x7y|Mr3PH#i*T1qr@@Md0MPy8tNb7}pjs3GxcPx1gVpy=3W{ zG1QmMy0M*%oYA&iisWSfRfHA$nC&oc&^|x^&#n1=32^kUgiXF5*wD;kOI@3Op?y2p z=(hZe)Leet;5zj^@FVIp{(k_|$ozXpm9o_PUsFZTLSfxHnyL>^Si9u>)~c+%g{r3@IXR)61U-&g#{z}gQq_QaMt{!YAu!m5`Np~m8UXh)CQx&Hdz zB*D?hTvugx+mhZUK{&`^8phN4$Ft$W($}=~K)UYn(8zG@5|PzvRrz7NMeh6-id`!L z_6)vZQQbP?oMU7MRHa^HOAz1_T>GKc$~S?DKwV}K7a4@m3-yFxrfHV8b6_^Mc>&D) zGId^MF}Fe{e%$r*)%+^c4hpf?Hm&8fR6y=MHWFRvD&TtE@=)6dr==?E8PuuSj<~@( z%3lfk4=0Cp)*+?dY!sM-%cjt<&xA$YF29rayeuYK|8fFH zs1p6cs$h}yA8Y|U1ewwhP%51jhYCBdI?u_8%3MH>NWIdf8O z24_6yioKS}*qtV7wYiNaMQ4I0&WEgBcN(K`Da2a1ojb}gzg)`)5Kdn#uYi3mZeohN z2^Np7&3GS2V92^;@Tcjzsk602*Rn9WvzWmGafp z$yQGwkZv$Lh;H?yBavVpPPy!7cpSoStzR+i*3|9RV=xT;#(|>T3|_8AKF#qOQKu`* zSMr{>w`ww$laDfHhsQRLo5=LlV~-Xpm{d4BxL_9GIxy2#8wp}xTp>vT5X#l|-Gr*3Ah47BJ~P843t z{vOOvPC$NLPxwNn21+Ng+nsR$R@SD&p}BFrT14|C)3nE6p zK;i~RJ-yl;H#jnG&cbz59NJ=){zo8Mh(XyF{N&xvCLi7-@wc|H6pASQ&#`s=CeDIe z)>9eLVBS*OT-zl6uC6v)yA4pTd7fu!gTuygu3h3M95C`eN&0jL35$fC1d}RIDqJ+? z;ukwDG&e@3L+W{87LIyT+>OgqghlX#*&~3*ovT zA82dy_D-sa$c(aQ27;W!FusIjG6+BFFXIj^A;|45--FC7Z%WaN1s8Wvl>tGMSme|% zJ4G{roG~;>H05$(#(e@raWQeEG~fAgBs2eEH6d>BUE5KRZlP|g_0sG5eY~rU@PPl- zt3;?3R7M1H#M4ED_juX($)kmvagACAmM{xFYqwWPW?UDpzh6ET&;Us_M+0IUSS)4>>p|J=y07__0(swle^%dqj{%iLj)!D}1sH*y&~r4j>QP5lB06vYbA-uw6>+>QU9Q zXJI;cM|f$$3mot6A=h0tQNuN@LqXJO*NJtUx;{AgH!yxM?c;^Smg1tq+{S=#kE+^y z&?v7;7rq0~H$gKJ6~J2?03pIL$p~5*7HF7}H<}^RDw3z|K$7bN(+^_ambdR#bQa+f zyLOvXh#Xa~K1)`Wdk8zKa|^~?+z_;z0KTdn0f`P%6))rdf=I)|sU-q|b+voRXAEIZ z>gP?q=f}xklC7JZ4qXm&5_to>DPsE3v@@JZiS4@TEKW9G`*#yi7Lp<<6{86lRlz#9 ziiNsvzQqMc`jc=yPgd2^oqk~4ArjJ7Q!~e{y@BoY6jdXf`k*Y3*!K~$wv^as*QyG; z5+yGgrT1(%^ePO|`YX*KoxOHvCg3=JDgY2{Da6C@i(y<=?xNWHOa`2u>@hkM{UyUon`5nnwEfnNL{v-HuD;j>&e}GlLBQ z_3>Tk`AV}0%3ZX%)2wo~CBaTW()zbheY&-QYk>ilzglH$o=h^1kyYuQRG&$nd=zTY z*J0<$UrgfXZKBC8r5yV%%d`$&`P&3KkDJP^aV^haagzQK$l5$+4l;x4GOvmHI7)Xe z7YI@_od<#gSi2iulKn^5Q3&Y5S=>Y2D%KWCCY;X5rB8m)VrvbcRe@-)dW(AlEa*;h zTb(5;08mQE>iL2)ZC2%i=8-cw;HJ4h)QS1hlnlo?=JFZRSpPoUB4aQ}FIr%+Dbg=3 z6jmyYY(wTEIjvJI>lq22KNEvda#zhdQ2~`<4G3?QdxeES8UYTuT8{jE?D$=h%J-tD zFiJt*#fkt(Pk622&v6SIVTd+b9e?N9Fz*m?Vk|mCG@KdnjW`Fs)N3;Zk`OOo*0cSJ zfuOBM+OXu$Bf~iz^VEq_BC-1og9{W}?$nE!3WldG=Y4=VD)4ajMgpssp8}@I7kT4} zdOT0P6p|ePc7T1ZWhW6BqsHjPVj*1E;>N&;6*ll6*4RZGQilE2*S>YWRm0~NhsQ;Q zN**MxR7j`Ii-Jg=0MzTiG4f$jwnO+i-CbKR<*dbiPv@7gH@3ig&s4 z_ZHzl@`x^CzlZ}KVEplZmEJ-UI$&UA%uVFY$&gdIj-;M9z2_JWpxUZdDTGH1$AQfLME}>M|06$Ye(EB~bnsD|;{{i=TPDcSSh0Y!y8)l-!4!wqM0+Tv__xixZY|G-|X zUb&?Hl}z29%U@I}if&dms&q-dW5yb>Xjxy3_@C7>nWFEKzomO*6N^)R(eBJoTg+|5 zo4S!C_}MCZ?k=+>Qj$=WCA^jQ909@hrH^rJsj$ImwT>wfxaD0@5i z3lz9RamYZ);Ty2)xAq#+9A39dg(VvZfxX?J*Qv^SA0w z|G7(k?F;tAc*QX?qpMf2)0Jmc%=mmQ0o4?+N-6sQn`$CrEr1P>s z@xH`;J%%$?Ylcf*9(IVCF6?L`f&v!U`PDd9{DE;Ybbf4j?7U`1L?(7;jt3>#g62X~ zXrC*~ZQMnn7&_xDwxp4+V()K|fLfK^e3$NhSFg%Fq`kQOSnl69@z#ORKo0t8ZXzhR z)I-1wtmDpq%>8$MDC*?uj&U${t4H2{)|LQB)I$$JyBic&u`&@;vij5{+Bj`GoZ_n5 zoKV^ItyBMnUtbBN>lv`!prx3;i(1=tIBpOsf6i3?;<))Y>D+vqaMWI5&MaiCU{pa8 zceV5(2lx^=9qpWYJUK0Ry*}05t@nax?J1?y?=`;e(F@>$`EaRMa9}(g15@)u#awK z;8;Dp3N8a&;f|irnU#gDmB?Y}!cjvDRggSBp>xmpp2vtxqg7GeAKwE(5Unw0Pc`BJ z=-+Q_hTbootmbQK6Y5zQq-42HnfAr2s`7b>y!Qe*jhZRQI?c!VW=yG!&@dl$nmXfW z)I@8p4R3w5{IAHSe%014lA@4U3r!$77+J z3quZDX9`r_>uR>dqk*ZM4>ByLD@Fotp^7e8=C7*e z58`oe_VB8>o>YcIADMNvSi5@U9&{J;a)7YqdDTgCZ&C%Xt8N8-@xD&AqSCuA_3R;v z%J=iURyd$EF+@+JUh!^;8|+LmZBC;jeuAbEc^jRfp99j#l5SMjG?5iN$tz-n7iJB4 z_rekKu5jK-1WFzN!;CSa_1!Q%^r5p zUobv|ZwGZaD2V#MXMJcLegm`+Nb4Ng@Nw;E1%cR|4q8$O{Uca&9h^-X&=ReNQ6Xbs~-DJ6-!2h?K)S3x&M z1XqSIgS)=G4o3phwXI)n-UEK+^*4Dq_Zj^b4gFD5_?}{VhVMfQnm`fvUKwo^5ABC8 z+r$>T8uU`M0!uGSdc71Mw$(2zM|o z=w6i~yq1%b8W;5Xq6F-a$i5T|X&pc*EtC+1oQNNwpHUxQCg5Iy`^H zK5cZ^ZAr~X#nQ?`AeP*&<3u3FpX_S>hY^|}{g&b-F>k2g@bd6Kq6+%Ze7%s$$mTB} zN%s_>5hQYOe36fo@u%_LPxA+u8BV&FsrttRf*Q^DdI>GX(V!8AW-WkkDV&mIN!mrk zM9o%;IQRNl++{{50e3JF*sQ^{#hFA#6Ry|Wec_&906;2@GOYzY6oB4_g7F}Tq%9&~ zsWT4ZUX9O_T4|D;dK750!_)1;i zGb99IV)@eQaV=G>&Z>N~F^*7M2-?L6z$mu22$OF8!vHV(HTV)8E+J}OrLz4Fmo7K!Gko8}5m5aw zdlG$6Zr8kx92Kw;dvhr?>%Mi0t;Fx7SU)3ZY}0IGXx_cxOniT-{HLZ}S6KUiuMb~u z8gOL=R5LbG1OJP~j-o_wdl!-NmS#; z)QJH7@SDIYsKL$K_k1Q2o{^@%8t zk97#4dp<*rG=t_7;ikHsozcx1fZ-&iMYt@8)6qe9L zD(uQXXspw&DU~`)Y9lq>`uk>Z?0+nJQ0+YSXdC6DR?Rg$6_4OM=M=4rI^uHbdIJZQ z`l&_2UI{4ez6xy#hWj+~{Xj3Om&q~Fk|80DvKYysz0Q*7+{2n*3j``FwVT-MXV>{u zIJw#2PzOpuXK2r<`1A0%`Nb#|AQ%a0i^Sz+-70X(%3c{ax&9FZBYF`bH=#ZT%#R^| z1gJq#>6SV7t1jUq$s?ux+vF7K3zDJP7j^BQ=T(XVj#B)h`T*p(`$(uP0(Z*xPWG4W z6Z_c*miUu|+LiuIMEc1fIGtggQ|HBYnw?l6soOxu*X}^>ORSb91>K#oJepdhO7^rp zkGj)$85e(k?Y|Jl8g-`~^l(2RoD0i8K6_ujZEn*qZ^*Z0Unnvk^eA$))hmhN;H$84 z3&bk!!bu91>LbMdZ2Q{wglV86--H9l;2X)CtP{%utau9${v|V+{b!rVSt%X9RG@B_ zEv;U$b*92?O0f^Pb4w#y%JsyE`QhA5BB#=Om&)e`mH()oEDO~$CyCmVG(^pfl@vxe z9rmv`q?P_wk7lk{kpstm4V<<&Qrh3%anB#Y!aK}9wo3m$is^7>#%G`u!Ei5tElY>d zNAv{`;2%l9&?gJOp`GTh(1412it|%YK7u}Y0Hi)A!q9)WqbewM;9^L3Iw zTjGIM%U)au6N5$+-3Akd<^`=Crx{+5=tuoUGXHP)jRHDs05p$FP50KHDZ>D#FhzDoRIT5X{Vpyi+?(nEbDA`vNa zEC>q*UWLzlHNZ*&F;r^c;ZBXu6R^muraoFtlQ&m`_VKi;7SP4ZEk9@KU42e2Ke_Gi6|4r&U-HPgqB_TZq~lPoeH$LdyfU+Ddcm_rMvvX(A-e#=hA= z3#j@swN%yy;F8#192J{3Mc4q+JD^PtA&CG)f-V_CAK&jA5$N|;--1OvoV!{7@*-p@FF>0@OC(?@=?)|_fLKQLJ{nUk-!Gt$ z#-gpXKs2U7R!;2!@w2q7y-Qb5`VS0c9NH03`RZm2%1;hoq;%tT-#{hLQ*&!RtxlCF z*~MMappF!CK^A>!1BU8W&jMj-4}KZ$KOsZl2a7z*AEW9O7)dHUHk#G79hgy!7ndp) z3!dm7HqhWBB3sXlH_d$kkXxY*9*P>eTPZ&%AF0uEfS5@;4?uC#hyVFXc5J7c5LQ|7 zcAclUDm!5}mA$1z*T@{=%A!jw;6ZsR-qj@Tm)d|mXmoYHn~ByaDkJIa0rK2uyi zmX9CHbJBb-X)+x>l@f)j?>z_cYe2A_37WRtD|ViD{dGE>p>~}K(p{tj!vx@x4czj+ zVMM2ix^0TFOwP!o(q$X{IbTvN-*0gK5Uf8D`Y(-WZNa)q=~=$`Xu8)|kY;CM6d<&l zZ%0V83bRKm2q!amSCxXtxx9??A;7~sKZ zJKKT7tjVd>H6{NVPW5a^1cm!WaH`JkmrvZQBdZMzW?nSNwU~fdlMmdiBbUUjpwawD zwQ*-DrAITe|Iz7t!BXFdgqvSkJi9s`Vflbt))?H(Z~`@F?O8x>_DRb>7MI()VkZfd z83BA_YUi9W+wBGJ95w|I+h2<_lg3RV4YYqE_HS!mZdMH^a*T<;8z&Jow!6%z7T}nD zM5(=gX?-Lw<)C~TXY4%5!Ki@bN3DFbJ}qLdS$mb@%j;_^cPh)H_L>C=b;3=pdi06a z-Y)*QHTj-Lk@gU8&BF<^4I7il^8XfOcqXdjg?+e9pSx0*t{T$Q2ncQ=o@T~DC6(`#U{kKdkH zZ5|c#FMviMjB!SHo{@nK*NM^`nD(zW^E@nA6pK7CS??*+TSe9dqtZt}$3Ko*KmWJt z6=(St;Dc%D*4>i@aX)eBiy=h;sYf%4iFhRqwB_nv<@qk@6!wq))^4c~irTQc5&2_8 zY;ly`RmF&K*bx`JsIYqsVos#2*f*rS9&|Wev;%c-iH%mx>w@(sX!l66IbZ-eQ@QDD zh8U~-ZOSOl3K;{tnQ_j^D&e_3o%10kF(_?7jhLyLY-@u(L9=kPpoB zgy5d$W!wV`aDvJs-L(Jy)lzxu>Jc|6PEO`75;UC$6Uu$Z@7I~jp|cpqPk7je zv1E=h5!acp^?@sBhi2OlMGD2u0vm5@WgR&qV%HHlH2)4K+jF7yVEfXpuU|8Qn&8;H z#$qe!`$TQD;8Pe6)W)IkOYnzVOuaE9h>cj0E<7%-+C_7c_4~heMOiv$OAZ~k+Izo3 zgj^r1?gY#HjCtGqgq6~W{U<%ua|1CC9sDZukSo=qu!7#oC`>~g)>wm}LETAE-6e+% z3njf(QapUr8E9dS0WikPX4OZ$$NpZ!MPlKgRlOT^Ckd?2g6EwOEsp^El0`<2X0@z4 zPwB?>H-TqLgdP8CLlK+0-{q2|Lg}E4wCjd#5tm}5>;T z7=mx3u9e-*>$^eeQw35dt@d&9-wJxfv|e%h`dO287_{h&|F6R)P%aTh>Y@JO4oiPo z?InPR^Ey=DLamFL=|;GuYsxI4(ZNkfpUD5RdyOd_P!3>}fNF^Y2XWK@3G> zTaE>dBFt9AAQP!viH3{@KmbK*0L9b?8-_-pIf@T!3xZ@<84_h8qNh_KJ@7{zf^)t} z3FJwWH%8?P6t;iDl?*~P6$=ExP)tHObr5k>&cT~)fTTQ4St0O-jzEp|hY0tU$x{(j zc%AU;m8=@c)YIT@KDnV}{*_>!_>_`q;tZaoc#Vp$NszUHB^r^_j~k2%43@1vZMK2- z0f5RzHw9WT#IFg;Uh3pAz!FG+myAf6y$__!M|3UFSKr0F0D>yZZb=!-LnMF5_rKzj8yqQO)eHO*`+vyR{& z(O1O-YeNBd2k5V2N+a$o(mOW9cz?as|9OUNqK-OUdhzQNa)^TjOypNTi^|f1FEzCO z)2Ixnm}_3JUItlKK#<+4x#TzVd6rWhN4UQOU8s-bQ2dHYjZ7?B!LOLlWc0U@gHvf1 zALDV92COoa3`7R=jj;-vX@eaT=qs#`(3J4D(nqwAC<)_G#D9&v(0@)~gaW=NU2FN* zar$8e%`GX)djhq#^Kkejnz#9Iz2pH&29X%J-%T|_=|agPI3QCkl3fXPFr!};dDA1{ zP2V;3o1`ZVGd`D9-WTz2JwQodaWR$oNXutn*`=z+Si9x@FQTJ+4N?iFW{=@E+I?zTA?nMhl2csJt{?dz71VUoTae368-8o4q|01pLis{axh|x~BK*G*o@g zqK&_AfZ$Hs2Y{s+bW{)TqX`^hTgGyR;hK)8O}pP_^#zK|j@X;4R>2Z2Kr}U`0yos; zFgh(wXg%X*JhE^5ONz-z-0Bv{tu|B8d*b0&}afJf1fwI{53dVzhM7ZGb=V%m=m@6MZm_dn35dhs0F@p zeZQq|58@I-oi_A35V7{NrfvrJ{FyKB&H9wB`{5|8S-HPDJjuc4r}+Gzn7ya@8hd2` zYtpFzCwMI45(CS~4m`kL!%pW|y(pP@ammRj7IT$2g^E|TNP)j6f4Y20P#!;9F?%NI7PP>3sw}Q$%}HAZ0>A#ZqMNi zw29d{8Ih<#&r}`d1`+>0e8c~0ccNvZ;e7plGar}(`d3R2?67_f(ZMybB$RngU(wGc z*6+u|FVz|M)nfO23zb}MA9&?2Uv33Azsf1XYY_>8@xVQDpAdVns4rMIxJDCnMW?{V zx!lWD7}LzstmZaOmBDEh-dZA?!gnK!s=1aUOxIoW-L%lS$Yl#bC3JVO^O?G!v2tK) zbDi~Co)Twojx;)%KW@#f5rqcB?LjL3sxpnOL#K2UY^6>Ah>}Bh_ATE3QW)a?zE*Z<9Y!`d&); z3z?21dY&>V2$f(t5mUdoFfbt{ks2lb?@0M?Qc;0X7M zOAl%tGcS79SYVXfb!hmaLd1dgjdSoK_!2#pH6k<&z zy2}S@KIK6z0XwNQfdK#|_<3*vTBWBch5WMCl?{!(rPt-=g9SgRU0lPOioUyc$m8Dg_GiEW5I(qyHtyrY{;NW|bNe&Q%tPGTCQ>Gt=Vl-2{W@#YWXc&{2p^8U z-nw>!^5*Q4PsR<>E#@V#+*D}R5jSWmj~yqQb}beZ4P^!lxnM;y4Or)<6;mQ^)~?1- z(=VnF@7}FUag2+0uf1xsnpELq>_~g_G@sY1e;T#MItt1H@?kK}9?@iysgg-{vc${# zxUEy>#cX}o*?;mSx-QSeZO!WlFu@vhJZmJ^||0 zo54$9#R+o6QPYBG$3VbxGNqv#=#$i;oPX+tyHm1k{q0t_;6Vpfq$xRguY>9u3>IhC zT#!7F%IpjL7NzwdbGBVz0&SF0igB>0tU_uyG7Iyi@+Q&ptkGT)Z#K>gEaF`yrn1{a z$NJ2Xeig1K{o(GQqv7+w-o1ul95RmGU(1cMS$`m6o1Q3WqJzi#g4J^&^_?jjPm$iBX1=5L##br*^M-`dVSDy=hJ$jmJMYFMz1T};&CI`CHhXXOx4&<{@ALegt0gcz1(x5L*v-HM!tYuxtL9rR zE8a2t9kmb6%jO=_cTClqKt}Gg&RluX*r90~K1On$Ams&~K;3RieGZEI8^(WA`jIh# zfFQiL`bD?CcnMIdyN?%+m2B-TTg5}bdU5PZK`b0Ya1Cd4Kx&7r6C}33ZYuZC=*#<`U#vX6J zBvt6Tbp!mwm%M|?gHQ1O?LqN*9&d$(5i34LU}BFGm-0V&J0D{Y}0b)KWazoGP-p-cVT zTtg;xMKv8Zx6|}LWV8CD*>9e!>!tgETbP9F2D5GWlB>%0YT{maug^fJt-U zUcbC=%cTFHI$7ot-@9*%kRlwd3z-v~G6x=H{AycX*69%`580^pb8z+`2*DxQ;gSYh z5R`INB<^3DN_*rRGk{_=x_{yyWb_sF5BW>eq(5xWcJC;=*o-I_132%BBpw%pHX9;o zz2=(SPrxA{dxmR@9FT4+P7BcYs_Fm>S%7-pMoJmeRmRFj0s%xiT_)U}&Jadw`BvMP z=cS9qhZN&BVPkZ)Z>4IqXs=NvE@dz-fQ0BE`rb&QW}+$sQ{X3UHlPNi6@vu@TtflG z3m{bYFP(ENIGXQopYz%{?NYoeuS(MpT}|L5_`t}Qyw-{zfw}DtnWyavp0lxXXxhg_$71V&ICo@c3)eDmtfa661MMEk^pp z)Df7|%nU`WOR_IbW$bfHg+2jmHk+-_%kvq+LO^G8Xs2s8ZRHFg1^9uurD+5YBJiF? zY(&AK<@MI!AeZ%H_T|!_(T9m#<&XJ zoC(HS%v%1RnOo=zoTV%0qL2I(hE&}0LvVY-@jVL1qH>sr+_jeTH&}tNdH=l`%ezZ( z`Ih`ZNiU)V)?8In;H}cpN?z|lG?mn7dyJD$MT^2u2M|YR%y*vP4QcK>Y0IcfY0y(z zLkmh~0v!-6AZ2$ zQAD`f=C4VJ8Vb*-0CiXGXMk@!G#^>&mx`L*G__;;o=U7tI#`S}UO>%}E*?QZL!+g* zO7uc;JmwrJW!YZg8rjj%RyC13^X#JhOMy4^u7DJ;P2K7T{dO({SvX$8m4ZC89{~!G zs}aPE?e-%!H?P88kEyPM4>(l1pq>BqMHm4(+h36rp|zA8boaft&Eo}qT|<(iN}bfr zB02MeS*Qx&F#fIzw!W98!%QdPfALX(ytf5Gv!!AJPQL6i( z$clu(RjVrW{IF{--rVr2_LqDHK4P#Bn)aSnAI2^Q(KWEs0@OT7vUJE~p3a;MbjdQ; z*xtlG2+6?Y=c0fBv5ZyPC9My|)eNp*dC|e^L9+iITU}y5L+UW#NxjZ>Vug}%2p}f6 zijYOtQmY4Z)dYVlK>F*XiudMq70p8!=Vnuejq`R$IAgUWtlV;6oPq@);?-?zAa8tW zwo9~62liMPu3LatB>sTD=6$`AFo#PS;g15|U#@M9^X)3%WP_6x1|i z+x=Zqq@&@E2}i&51q!W~Uv$S%e`VZT!cf$mCC&VuH{=(nQ8e_9#f&E-(uLVGNYPQq zJYp_1$?+BGo+{4c=?2lZvKTU_JbY?p1FNqM6sZc0@y>V@_`c$ES3qc=$75X7<20kY z@44mz()`i>Iv@|91As69p|9)#hx;5yY2A|tmi1DB_#KOlJTbuj8&;AH(L81&?Q@u6 zz)I#g3qeXRM56D?|0E=~;RPLZ-KmYM;%4k!_gy{sR;&o-$RD*4yTrj$NGUE0^*hBI zlb02o0hr0*DGFN)IZ|@`O(6H(N;CIOgR$UU|*LQm$*RyhXO4+R0a(NFH?+&g-6}5HnC>5mfc!9BL^$E(dTXu1>F73zV!4X zfB?AYNRd@bIkG^RgzT5LgMAzn;QO%c;4Pbaoi(VF$n2{xzkS^x6my3t?Nia0+^(x^ z4tcL^sJW-hK~WCik{8U}P=``kuDkB)VhY0W{Y#0#5v=AzC%n07lfUzIJr=jbO!8MR z$jUVSDhX`FEM*LzAT_2>(R_p8ZOvGa5~Owc?Z7dO)hGHD;b(2l#(XZr*s@yL&afRn zyST-i_u+lxiv=`Ne7*{*|uc7Ca$Lw?2uopM;zFgYilzqc@9BNRS zv~V+Rz{Lh`;^DNE(K@z+*|9Cnhn$@-N-1Lu-B4tEuzu_^c%S-_`n~i*!0lqWGT`_u zi#DVz@0&RNT=Iw5Sqg%#X8ryM@yKSa#rp8KYiagj(R*?0KZ-)=lJ>8;QC>;!Z_p1H zH`gk!MTAPbZ0n`G+!sO^MBlITX!@6Z^nNp75JC+QMaI^rtk?Nl{y1`!eb-L5z8m#o z=psDX1TY=9l}3T{TYGIalqfNHc(^oyi zbWJb~bi#7C-)r7Sk{ENZP}y$ry3^ane$giWjCTKey~FO+M4#c??Ni)~Zl`TN?xgK_ z5PafKkD%cuK;v`-O|2jJ3Oh?VyN@rF3_Zc;7Op;OpGsRVi<4l#?T6nE)w2(@*j7$O zp$mvH(Po=sb(QiFFy|yqb&@n`8RRiW7BKk>&rWGaxO8zwQm;qc4Wy8=2G`Q9;jaMXO4{w65-x7C5$$U0tMb=0qOdk?2&9D(i2fhHf6S=RvuKKPdJAgOU=V!IfLn@b?j zLdfo~RZdWMefu$!n5Yy61+>%WP)zG?`iL6fVMt%zFbXDX;A$2HF zBSFthc9u}sg=$vMfk@hdf%A#u4N5QTM8e6iqV~vk zmZqT(WxKVWaL|>LR86ch{>fr@aRo_4b)qSm~njtOGkS6_}tTwE;jTg zAicgmA)b-E;k}4440JEzXkf#?lYZB16?z zZZr|s;5K_x{ab#~G=w4r?VuTsCwijKv3YwZ;#C^ASWYVX|7Q)p_Csv#l+K7Y#-5M znS=w1A=(+B@Z06(xxl8zaH~jN6Y31kF1fi~St44MDH6NkL@R;c6&+{Q;8>7uB+{&T zS{Jjlw%{lxm|12==C0f@b;)n#W(Y)|$amv{>`G*tGsQVh7>2DX04@`g%&Aq;%O!|o zKes`&AIbpZ)F69&Rc!Ty=P9t6bsWYj^RGy7N+F315cI%K5-q{I9euWpS7G$H=57Nk zCa6KxS3e*c=4l#gNttLXCP_q7Eg{%bq16!7>JNY_D2{K3h8IcOMz3Cb%jHv_BUZDs z(8w$E0>(LP$5>JQ}76o0;->QWFJ zx`Sce7cHf_FJeo~?wS3fYg@yaf33MbEL;(0p;5VYUPuc(VlhkBJQFwcQ?K|yC^Ebe zOG5pX3rn;TPzhtYj|ltII12)*qH-hPS$mi9XT&NBKT4CtJNnr8(T`33dWQ)U5Z5&E zLmd-j{YR12z_^BBBPn>g;eaQS-g+ba2sN5np93E{NuIe<^Ow8tCL*6g4JWv*8gXyX z0@#&(vI5|Ng+lmu8?#c0vPb(}Fk=B7Z>V0M%6RX~^4 z@`C-_n}&2Z3@a+;!KRo&2%3jX=u|-gOX_J=6*Cl&Ax4_IHpT#tVp;l!E@^(+Zf`B9 z>wy|ivb3xYs04P8j_1@lJAqFOksDdCGt1-HXg!jJvoGC%hKPYBslyBA&8kUt^Jq0m zDzxlz(tJsIRTbCc&BFH`-0LF729@a4VZb-*{{3l2)Hg2A%^yz5wh$U>56Hp)}-v;uKZjek#zgU*FO z*(X_wQ5@6C6pw_s)vmIRQ2n$sO@SFbi-FCiOElth*0w8=B?=METzn(+R)%f9=OC7z zg$3II>wG~}c&z3cc6}~Cx24jzr4fIDKk!sA`u?uSgN^VFh~PT8h4_F){1yJb=>|45 h<1VoSgeVey*r`skN0yJ)W3RpXa_&p=U%&nP{|6Mz^~V4J literal 0 HcmV?d00001 diff --git a/thirdparty/libmediasoupclient/docs/pic/libmediasoupclient_usage.png b/thirdparty/libmediasoupclient/docs/pic/libmediasoupclient_usage.png new file mode 100644 index 0000000000000000000000000000000000000000..9295ad661a6222f8bc4908e89e060e8e44f15b45 GIT binary patch literal 37417 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

6Phos4rh!E# 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 J^r3n1e**xr;R*l% literal 0 HcmV?d00001 diff --git a/thirdparty/libmediasoupclient/libmediasoupclient_oh_pkg.patch b/thirdparty/libmediasoupclient/libmediasoupclient_oh_pkg.patch new file mode 100644 index 00000000..306cb311 --- /dev/null +++ b/thirdparty/libmediasoupclient/libmediasoupclient_oh_pkg.patch @@ -0,0 +1,247 @@ +--- libmediasoupclient-3.4.0/deps/catch/CMakeLists.txt 2022-06-14 18:28:27.000000000 +0800 ++++ catch_CMakeLists.txt 2023-08-11 11:48:39.454980680 +0800 +@@ -26,7 +26,7 @@ + option(CATCH_USE_VALGRIND "Perform SelfTests with Valgrind" OFF) + option(CATCH_BUILD_TESTING "Build SelfTest project" ON) + option(CATCH_BUILD_EXAMPLES "Build documentation examples" OFF) +-option(CATCH_BUILD_EXTRA_TESTS "Build extra tests" OFF) ++option(CATCH_BUILD_EXTRA_TESTS "Build extra tests" ON) + option(CATCH_ENABLE_COVERAGE "Generate coverage for codecov.io" OFF) + option(CATCH_ENABLE_WERROR "Enable all warnings as errors" ON) + option(CATCH_INSTALL_DOCS "Install documentation alongside library" ON) +--- libmediasoupclient-3.4.0-old/deps/catch/include/internal/catch_fatal_condition.cpp 2022-06-14 18:28:27.000000000 +0800 ++++ libmediasoupclient-3.4.0/deps/catch/include/internal/catch_fatal_condition.cpp 2023-08-11 11:50:22.846527308 +0800 +@@ -94,7 +94,8 @@ + int id; + const char* name; + }; +- ++ #undef MINSIGSTKSZ ++ #define MINSIGSTKSZ 16384 + // 32kb for the alternate stack seems to be sufficient. However, this value + // is experimentally determined, so that's not guaranteed. + static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ; +--- libmediasoupclient-3.4.0-old/deps/catch/single_include/catch2/catch.hpp 2022-06-14 18:28:27.000000000 +0800 ++++ libmediasoupclient-3.4.0/deps/catch/single_include/catch2/catch.hpp 2023-08-11 11:51:39.030193656 +0800 +@@ -10729,7 +10729,8 @@ + int id; + const char* name; + }; +- ++ #undef MINSIGSTKSZ ++ #define MINSIGSTKSZ 16384 + // 32kb for the alternate stack seems to be sufficient. However, this value + // is experimentally determined, so that's not guaranteed. + static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ; +--- libmediasoupclient-3.4.0-old/deps/libsdptransform/test/include/catch.hpp 2022-06-14 18:28:27.000000000 +0800 ++++ libmediasoupclient-3.4.0/deps/libsdptransform/test/include/catch.hpp 2023-08-11 11:53:10.313794327 +0800 +@@ -10711,7 +10711,8 @@ + int id; + const char* name; + }; +- ++ #undef MINSIGSTKSZ ++ #define MINSIGSTKSZ 16384 + // 32kb for the alternate stack seems to be sufficient. However, this value + // is experimentally determined, so that's not guaranteed. + static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ; + +--- libmediasoupclient-3.4.0/test/CMakeLists.txt 2022-06-14 18:28:27.000000000 +0800 ++++ test_CMakeLists.txt 2023-08-14 10:59:36.339720845 +0800 +@@ -1,17 +1,22 @@ ++option(SUPPORT_WEBRTC_TEST "Enable WebRtc support" OFF) ++message(STATUS "LIBWEBRTC_SUPPORT TEST : " ${SUPPORT_WEBRTC_TEST}) ++ + set( + SOURCE_FILES ++ if (${SUPPORT_WEBRTC_TEST}) + src/Device.test.cpp + src/Handler.test.cpp + src/PeerConnection.test.cpp +- src/RemoteSdp.test.cpp + src/SdpUtils.test.cpp + src/mediasoupclient.test.cpp + src/MediaStreamTrackFactory.cpp + src/ortc.test.cpp +- src/fakeParameters.cpp + src/scalabilityMode.test.cpp +- src/tests.cpp + include/FakeTransportListener.hpp ++ endif() ++ src/tests.cpp ++ src/RemoteSdp.test.cpp ++ src/fakeParameters.cpp + include/MediaStreamTrackFactory.hpp + include/helpers.hpp + include/fakeParameters.hpp +@@ -62,9 +67,11 @@ + target_link_libraries(test_mediasoupclient PRIVATE ${CMAKE_DL_LIBS}) + + # Source Dependencies. +-add_subdirectory(deps/libwebrtc "${CMAKE_CURRENT_BINARY_DIR}/libwebrtc") ++if (${SUPPORT_WEBRTC_TEST}) ++ add_subdirectory(deps/libwebrtc "${CMAKE_CURRENT_BINARY_DIR}/libwebrtc") + +-# Public (interface) dependencies. +-target_link_libraries(test_mediasoupclient PUBLIC +- webrtc +-) ++ # Public (interface) dependencies. ++ target_link_libraries(test_mediasoupclient PUBLIC ++ webrtc ++ ) ++endif() +--- libmediasoupclient-3.4.0/CMakeLists.txt 2022-06-14 18:28:27.000000000 +0800 ++++ lib_CMakeLists.txt 2023-08-14 11:50:50.621458901 +0800 +@@ -21,17 +21,20 @@ + option(MEDIASOUPCLIENT_BUILD_TESTS "Build unit tests" OFF) + option(MEDIASOUPCLIENT_LOG_TRACE "Enable MSC_LOG_TRACE (See Logger.hpp)" OFF) + option(MEDIASOUPCLIENT_LOG_DEV "Enable MSC_LOG_DEV (See Logger.hpp)" OFF) ++option(MEDIASOUPCLIENT_SUPPORT_WEBRTC "Enable WebRtc support" OFF) + +-# Project configuration. +-set(LIBWEBRTC_INCLUDE_PATH "" CACHE STRING "libwebrtc include path") +-set(LIBWEBRTC_BINARY_PATH "" CACHE STRING "libwebrtc binary path") ++if (${MEDIASOUPCLIENT_SUPPORT_WEBRTC}) ++ # Project configuration. ++ set(LIBWEBRTC_INCLUDE_PATH "" CACHE STRING "libwebrtc include path") ++ set(LIBWEBRTC_BINARY_PATH "" CACHE STRING "libwebrtc binary path") ++ ++ if(NOT LIBWEBRTC_INCLUDE_PATH) ++ message(FATAL_ERROR "LIBWEBRTC_INCLUDE_PATH not provided") ++ endif() + +-if(NOT LIBWEBRTC_INCLUDE_PATH) +- message(FATAL_ERROR "LIBWEBRTC_INCLUDE_PATH not provided") +-endif() +- +-if(NOT LIBWEBRTC_BINARY_PATH) ++ if(NOT LIBWEBRTC_BINARY_PATH) + message(FATAL_ERROR "LIBWEBRTC_BINARY_PATH not provided") ++ endif() + endif() + + message("\n=========== libmediasoupclient Build Configuration ===========\n") +@@ -40,6 +43,7 @@ + message(STATUS "MEDIASOUPCLIENT_LOG_DEV : " ${MEDIASOUPCLIENT_LOG_DEV}) + message(STATUS "LIBWEBRTC_INCLUDE_PATH : " ${LIBWEBRTC_INCLUDE_PATH}) + message(STATUS "LIBWEBRTC_BINARY_PATH : " ${LIBWEBRTC_BINARY_PATH}) ++message(STATUS "LIBWEBRTC_SUPPORT : " ${MEDIASOUPCLIENT_SUPPORT_WEBRTC}) + message("") + + # GCC >= 4.9 is required due to std::regex use. +@@ -56,10 +60,20 @@ + set(HEADER_FILES + include/mediasoupclient.hpp + ) +- +-set( +- SOURCE_FILES +- src/Consumer.cpp ++if (${MEDIASOUPCLIENT_SUPPORT_WEBRTC}) ++ set( ++ SUPPORT_WEBRTC_SOURCE_FILES ++ src/scalabilityMode.cpp ++ src/sdp/MediaSection.cpp ++ src/sdp/RemoteSdp.cpp ++ include/Logger.hpp ++ include/MediaSoupClientErrors.hpp ++ include/mediasoupclient.hpp ++ include/scalabilityMode.hpp ++ include/sdp/MediaSection.hpp ++ include/sdp/RemoteSdp.hpp ++ include/sdp/Utils.hpp ++ src/Consumer.cpp + src/DataConsumer.cpp + src/DataProducer.cpp + src/Device.cpp +@@ -70,28 +84,36 @@ + src/Transport.cpp + src/mediasoupclient.cpp + src/ortc.cpp +- src/scalabilityMode.cpp +- src/sdp/MediaSection.cpp +- src/sdp/RemoteSdp.cpp +- src/sdp/Utils.cpp ++ src/sdp/Utils.cpp + include/Consumer.hpp + include/Device.hpp + include/Handler.hpp +- include/Logger.hpp +- include/MediaSoupClientErrors.hpp +- include/PeerConnection.hpp ++ include/PeerConnection.hpp + include/Producer.hpp + include/Transport.hpp +- include/mediasoupclient.hpp + include/ortc.hpp +- include/scalabilityMode.hpp +- include/sdp/MediaSection.hpp +- include/sdp/RemoteSdp.hpp +- include/sdp/Utils.hpp ++ ) ++endif() ++set ( ++ SOURCE_FILES ++ src/scalabilityMode.cpp ++ src/sdp/MediaSection.cpp ++ src/sdp/RemoteSdp.cpp ++ include/Logger.hpp ++ include/MediaSoupClientErrors.hpp ++ include/mediasoupclient.hpp ++ include/scalabilityMode.hpp ++ include/sdp/MediaSection.hpp ++ include/sdp/RemoteSdp.hpp ++ include/sdp/Utils.hpp + ) +- + # Create target. +-add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES}) ++ ++if (${MEDIASOUPCLIENT_SUPPORT_WEBRTC}) ++ add_library(${PROJECT_NAME} STATIC ${SUPPORT_WEBRTC_SOURCE_FILES}) ++else() ++ add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES}) ++endif() + + if(${MEDIASOUPCLIENT_LOG_TRACE}) + target_compile_definitions(${PROJECT_NAME} +@@ -107,7 +129,7 @@ + + # Source Dependencies. + add_subdirectory(deps/libsdptransform "${CMAKE_CURRENT_BINARY_DIR}/libsdptransform") +- ++add_subdirectory(deps/catch "${CMAKE_CURRENT_BINARY_DIR}/catch") + # Add some compile flags to our source files. + if(MSVC) + set_source_files_properties(${SOURCE_FILES} +@@ -130,17 +152,21 @@ + # Public (interface) dependencies. + target_link_libraries(${PROJECT_NAME} PUBLIC + sdptransform +- ${LIBWEBRTC_BINARY_PATH}/libwebrtc${CMAKE_STATIC_LIBRARY_SUFFIX} ++ if (${MEDIASOUPCLIENT_SUPPORT_WEBRTC}) ++ ${LIBWEBRTC_BINARY_PATH}/libwebrtc${CMAKE_STATIC_LIBRARY_SUFFIX} ++ endif() + ) + + # Compile definitions for libwebrtc. +-target_compile_definitions(${PROJECT_NAME} PUBLIC +- $<$>:WEBRTC_POSIX> +- $<$:WEBRTC_WIN> +- $<$:NOMINMAX> +- $<$:WIN32_LEAN_AND_MEAN> +- $<$:WEBRTC_MAC> +-) ++if (${MEDIASOUPCLIENT_SUPPORT_WEBRTC}) ++ target_compile_definitions(${PROJECT_NAME} PUBLIC ++ $<$>:WEBRTC_POSIX> ++ $<$:WEBRTC_WIN> ++ $<$:NOMINMAX> ++ $<$:WIN32_LEAN_AND_MEAN> ++ $<$:WEBRTC_MAC> ++ ) ++endif() + + install(TARGETS mediasoupclient DESTINATION lib) + install(FILES ${HEADER_FILES} DESTINATION include/mediasoupclient) -- Gitee From 35c4e2af52532b2d417d8c0cc882818c4913fa33 Mon Sep 17 00:00:00 2001 From: luozhu20 <1393302983@qq.com> Date: Thu, 24 Aug 2023 01:56:49 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20thir?= =?UTF-8?q?dparty/luv/HPKBUILD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- thirdparty/luv/HPKBUILD | 109 ---------------------------------------- 1 file changed, 109 deletions(-) delete mode 100644 thirdparty/luv/HPKBUILD diff --git a/thirdparty/luv/HPKBUILD b/thirdparty/luv/HPKBUILD deleted file mode 100644 index f17e16f3..00000000 --- a/thirdparty/luv/HPKBUILD +++ /dev/null @@ -1,109 +0,0 @@ -# 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/$ARCH-build - 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 -} - -- Gitee From 4c74eaf01de575a8a29d9bcd38deb31a921b14b4 Mon Sep 17 00:00:00 2001 From: luozhu20 <1393302983@qq.com> Date: Thu, 24 Aug 2023 02:06:31 +0000 Subject: [PATCH 4/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=20thir?= =?UTF-8?q?dparty/luv/HPKCHECK?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- thirdparty/luv/HPKCHECK | 33 --------------------------------- 1 file changed, 33 deletions(-) delete mode 100644 thirdparty/luv/HPKCHECK diff --git a/thirdparty/luv/HPKCHECK b/thirdparty/luv/HPKCHECK deleted file mode 100644 index 0fb4df54..00000000 --- a/thirdparty/luv/HPKCHECK +++ /dev/null @@ -1,33 +0,0 @@ -# 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 -- Gitee