From 520a029f98e601172d23510281a2ac03ae831d9f Mon Sep 17 00:00:00 2001 From: unisound Date: Tue, 3 Mar 2026 11:29:56 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E7=A7=BB=E6=A4=8D=E4=BA=91=E7=9F=A5?= =?UTF-8?q?=E5=A3=B0=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: unisound --- vendor/unisound/build_config.json | 5 + vendor/unisound/demo/haisi_kws/LICENSE | 21 + vendor/unisound/demo/haisi_kws/Makefile | 98 + vendor/unisound/demo/haisi_kws/MakefileOLD | 31 + vendor/unisound/demo/haisi_kws/README.md | 15 + ...4\344\273\266\345\274\200\345\217\221.pdf" | Bin 0 -> 988132 bytes .../unisound/demo/haisi_kws/include/asrfix.h | 70592 +++++++++++++ .../unisound/demo/haisi_kws/include/grammar.h | 21470 ++++ .../demo/haisi_kws/include/grammarXinbao.h | 415 + .../unisound/demo/haisi_kws/include/model.h | 86697 ++++++++++++++++ .../demo/haisi_kws/include/ofa_consts.h | 264 + .../demo/haisi_kws/include/osal/osal-assert.h | 47 + .../demo/haisi_kws/include/osal/osal-audio.h | 102 + .../demo/haisi_kws/include/osal/osal-camera.h | 156 + .../demo/haisi_kws/include/osal/osal-errno.h | 22 + .../demo/haisi_kws/include/osal/osal-json.h | 385 + .../demo/haisi_kws/include/osal/osal-list.h | 266 + .../demo/haisi_kws/include/osal/osal-log.h | 222 + .../demo/haisi_kws/include/osal/osal-map.h | 180 + .../haisi_kws/include/osal/osal-memory-pool.h | 109 + .../demo/haisi_kws/include/osal/osal-memory.h | 56 + .../demo/haisi_kws/include/osal/osal-mmap.h | 88 + .../demo/haisi_kws/include/osal/osal-mutex.h | 78 + .../demo/haisi_kws/include/osal/osal-queue.h | 106 + .../demo/haisi_kws/include/osal/osal-rbtree.h | 226 + .../demo/haisi_kws/include/osal/osal-rec.h | 114 + .../haisi_kws/include/osal/osal-ring-buffer.h | 135 + .../demo/haisi_kws/include/osal/osal-sem.h | 89 + .../include/osal/osal-static-memory-pool.h | 79 + .../demo/haisi_kws/include/osal/osal-stdio.h | 158 + .../demo/haisi_kws/include/osal/osal-string.h | 182 + .../haisi_kws/include/osal/osal-thread-pool.h | 113 + .../demo/haisi_kws/include/osal/osal-thread.h | 143 + .../demo/haisi_kws/include/osal/osal-time.h | 124 + .../demo/haisi_kws/include/osal/osal-types.h | 32 + .../demo/haisi_kws/include/osal/osal-video.h | 148 + .../demo/haisi_kws/include/osal/osal-wav.h | 117 + .../demo/haisi_kws/include/osal/osal.h | 44 + .../haisi_kws/include/sspPCM_testDoubleMic.h | 61434 +++++++++++ .../haisi_kws/include/sspPcm_testMiCRef.h | 30722 ++++++ .../unisound/demo/haisi_kws/include/testPCM.h | 1235 + .../demo/haisi_kws/include/testPCM2.h | 11770 +++ .../unisound/demo/haisi_kws/include/testSSP.h | 11535 ++ .../demo/haisi_kws/include/ual-ssp-args.h | 34 + .../demo/haisi_kws/include/ual-ssp-errno.h | 30 + .../demo/haisi_kws/include/ual-ssp-id.h | 191 + .../demo/haisi_kws/include/ual-ssp-mode.h | 59 + .../unisound/demo/haisi_kws/include/ual-ssp.h | 128 + .../unisound/demo/haisi_kws/include/ual_ofa.h | 477 + .../unisound/demo/haisi_kws/include/uni_kws.h | 52 + .../unisound/demo/haisi_kws/include/uni_ssp.h | 39 + vendor/unisound/demo/haisi_kws/lib/libkws.a | Bin 0 -> 233716 bytes vendor/unisound/demo/haisi_kws/lib/libos.a | Bin 0 -> 20626 bytes vendor/unisound/demo/haisi_kws/lib/libssp.a | Bin 0 -> 115240 bytes vendor/unisound/demo/haisi_kws/lib/libumd.a | Bin 0 -> 61220 bytes vendor/unisound/demo/haisi_kws/src/main.c | 367 + vendor/unisound/demo/haisi_kws/src/uni_kws.c | 493 + vendor/unisound/demo/haisi_kws/src/uni_ssp.c | 200 + .../unisound/demo/haisi_kws/tool/model1.bin | Bin 0 -> 1965880 bytes .../unisound/demo/haisi_kws/tool/xinbao.pcm | Bin 0 -> 532666 bytes .../demo/haisi_kws/tool/xinbao_2mic.pcm | Bin 0 -> 448856 bytes 61 files changed, 301895 insertions(+) create mode 100644 vendor/unisound/build_config.json create mode 100644 vendor/unisound/demo/haisi_kws/LICENSE create mode 100644 vendor/unisound/demo/haisi_kws/Makefile create mode 100644 vendor/unisound/demo/haisi_kws/MakefileOLD create mode 100644 vendor/unisound/demo/haisi_kws/README.md create mode 100644 "vendor/unisound/demo/haisi_kws/doc/\346\265\267\346\200\235\350\212\257\347\211\207kws\347\273\204\344\273\266\345\274\200\345\217\221.pdf" create mode 100644 vendor/unisound/demo/haisi_kws/include/asrfix.h create mode 100644 vendor/unisound/demo/haisi_kws/include/grammar.h create mode 100644 vendor/unisound/demo/haisi_kws/include/grammarXinbao.h create mode 100644 vendor/unisound/demo/haisi_kws/include/model.h create mode 100644 vendor/unisound/demo/haisi_kws/include/ofa_consts.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-assert.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-audio.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-camera.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-errno.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-json.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-list.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-log.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-map.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-memory-pool.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-memory.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-mmap.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-mutex.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-queue.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-rbtree.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-rec.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-ring-buffer.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-sem.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-static-memory-pool.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-stdio.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-string.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-thread-pool.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-thread.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-time.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-types.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-video.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal-wav.h create mode 100644 vendor/unisound/demo/haisi_kws/include/osal/osal.h create mode 100644 vendor/unisound/demo/haisi_kws/include/sspPCM_testDoubleMic.h create mode 100644 vendor/unisound/demo/haisi_kws/include/sspPcm_testMiCRef.h create mode 100644 vendor/unisound/demo/haisi_kws/include/testPCM.h create mode 100644 vendor/unisound/demo/haisi_kws/include/testPCM2.h create mode 100644 vendor/unisound/demo/haisi_kws/include/testSSP.h create mode 100644 vendor/unisound/demo/haisi_kws/include/ual-ssp-args.h create mode 100644 vendor/unisound/demo/haisi_kws/include/ual-ssp-errno.h create mode 100644 vendor/unisound/demo/haisi_kws/include/ual-ssp-id.h create mode 100644 vendor/unisound/demo/haisi_kws/include/ual-ssp-mode.h create mode 100644 vendor/unisound/demo/haisi_kws/include/ual-ssp.h create mode 100644 vendor/unisound/demo/haisi_kws/include/ual_ofa.h create mode 100644 vendor/unisound/demo/haisi_kws/include/uni_kws.h create mode 100644 vendor/unisound/demo/haisi_kws/include/uni_ssp.h create mode 100644 vendor/unisound/demo/haisi_kws/lib/libkws.a create mode 100644 vendor/unisound/demo/haisi_kws/lib/libos.a create mode 100644 vendor/unisound/demo/haisi_kws/lib/libssp.a create mode 100644 vendor/unisound/demo/haisi_kws/lib/libumd.a create mode 100644 vendor/unisound/demo/haisi_kws/src/main.c create mode 100644 vendor/unisound/demo/haisi_kws/src/uni_kws.c create mode 100644 vendor/unisound/demo/haisi_kws/src/uni_ssp.c create mode 100644 vendor/unisound/demo/haisi_kws/tool/model1.bin create mode 100644 vendor/unisound/demo/haisi_kws/tool/xinbao.pcm create mode 100644 vendor/unisound/demo/haisi_kws/tool/xinbao_2mic.pcm diff --git a/vendor/unisound/build_config.json b/vendor/unisound/build_config.json new file mode 100644 index 0000000..e0816db --- /dev/null +++ b/vendor/unisound/build_config.json @@ -0,0 +1,5 @@ +{ + "buildTarget": "main", // 编译使用的target + "relativePath": "demo/haisi_kws", // 编译案例路径 + +} \ No newline at end of file diff --git a/vendor/unisound/demo/haisi_kws/LICENSE b/vendor/unisound/demo/haisi_kws/LICENSE new file mode 100644 index 0000000..7aec0e0 --- /dev/null +++ b/vendor/unisound/demo/haisi_kws/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 yunzhisheng + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/vendor/unisound/demo/haisi_kws/Makefile b/vendor/unisound/demo/haisi_kws/Makefile new file mode 100644 index 0000000..b8c99b8 --- /dev/null +++ b/vendor/unisound/demo/haisi_kws/Makefile @@ -0,0 +1,98 @@ +CC := arm-v01c02-linux-musleabi-gcc +SRC_DIR ?= src +INC_DIR ?= include +# ====== 核心修改1:指定库目录为 当前Makefile同级的lib目录 ====== +LIB_DIR ?= ./lib +LIBS ?= +OUT_DIR ?= kws_deps_test/ +TARGET ?= main +# 默认编译为可执行程序 +TYPE ?= bin + +# -------------------------- 固定配置 ------------------------------- +SRCS := src/main.c +SRCS += src/uni_kws.c +SRCS += src/uni_ssp.c + +# 目标文件 +OBJS := $(patsubst $(SRC_DIR)/%.c, $(OUT_DIR)/%.o, $(SRCS)) +DEPS := $(OBJS:.o=.d) +# 最终输出文件路径 +ifeq ($(TYPE), static) + FINAL_TARGET := $(OUT_DIR)/lib$(TARGET).a +else ifeq ($(TYPE), bin) + FINAL_TARGET := $(OUT_DIR)/$(TARGET) +else + $(error 必须指定 TYPE=bin 或 TYPE=static,例如 make TYPE=bin) +endif + +# 编译选项 +CFLAGS ?= \ + -Wall \ + -Dhi3516cv610 \ + -DOT_XXXX \ + -DISP_V2 \ + -Wextra \ + -Wno-unused-parameter \ + -Wno-missing-field-initializers \ + -fsigned-char \ + -fstack-protector-strong \ + -fPIC \ + -ffunction-sections \ + -fdata-sections \ + -Os \ + -mthumb \ + -fno-aggressive-loop-optimizations \ + -mcpu=cortex-a7 \ + -mfloat-abi=softfp \ + -mfpu=neon-vfpv4 \ + -fPIE \ + -DVER_X=1 \ + -DVER_Y=0 \ + -DVER_Z=0 \ + -DVER_P=0 \ + -DVER_B=10 \ + -DUSER_BIT_32 \ + -DKERNEL_BIT_32 \ + -DOT_RELEASE \ + -Wno-date-time \ + -DBOARD_TYPE=DMEB_QFN \ + +CFLAGS += -I$(INC_DIR) + +# ====== 核心修改2:链接参数完善,自动加载lib目录+系统依赖库 ====== +LDFLAGS := -pie -s -lstdc++ -lpthread -lm -ldl -lkws -lssp -lumd -los +# 如果lib目录存在,则自动添加库搜索路径 +ifneq ($(LIB_DIR),) +LDFLAGS += -L$(LIB_DIR) +endif +# 如果需要链接lib目录下的指定.a库,直接在这里追加,例如 -lxxx 代表链接 libxxx.a +LDFLAGS += $(LIBS) + +# -------------------------- 编译规则 ------------------------------- +all: $(FINAL_TARGET) + +$(OUT_DIR): + @mkdir -p $(OUT_DIR) + +$(OUT_DIR)/%.o: $(SRC_DIR)/%.c | $(OUT_DIR) + @mkdir -p $(dir $@) + $(CC) $(CFLAGS) -c $< -o $@ + @echo "编译: $< → $@" + +# 生成可执行文件 +$(OUT_DIR)/$(TARGET): $(OBJS) + $(CC) $(OBJS) $(CFLAGS) $(LDFLAGS) -o $@ + @echo "✅ 生成可执行程序完成: $@" + +# 静态库规则(保留备用) +$(OUT_DIR)/lib$(TARGET).a: $(OBJS) + arm-v01c02-linux-musleabi-ar rcs $@ $(OBJS) + @echo "生成静态库: $@" + +clean: + rm -rf $(OUT_DIR) + @echo "清理完成" + +-include $(DEPS) +.PHONY: all clean \ No newline at end of file diff --git a/vendor/unisound/demo/haisi_kws/MakefileOLD b/vendor/unisound/demo/haisi_kws/MakefileOLD new file mode 100644 index 0000000..f599202 --- /dev/null +++ b/vendor/unisound/demo/haisi_kws/MakefileOLD @@ -0,0 +1,31 @@ + +include ../Makefile.param + +SMP_SRCS := $(wildcard main.c ) + + +TARGET := $(SMP_SRCS:%.c=%) + +SMP_SRCS += $(wildcard $(PWD)/adp/*.c) + +TARGET_PATH := $(PWD) + +LIBS_LD_CFLAGS += -L$(REL_LIB) -lsecurec -lmp3_enc -lmp3_lame -lmp3_dec -lkws + +# compile linux or liteos +include $(PWD)/../$(ARM_ARCH)_$(OSTYPE).mak + + +#################################### +include ../Makefile.param + +SMP_SRCS := $(wildcard adc_ctrl.c) + +TARGET := $(SMP_SRCS:%.c=%) + +TARGET_PATH := $(PWD) + +LIBS_LD_CFLAGS += -L$(REL_LIB) -lsecurec -lmp3_enc -lmp3_lame -lmp3_dec + +# compile linux or liteos +include $(PWD)/../$(ARM_ARCH)_$(OSTYPE).mak diff --git a/vendor/unisound/demo/haisi_kws/README.md b/vendor/unisound/demo/haisi_kws/README.md new file mode 100644 index 0000000..ac85fbb --- /dev/null +++ b/vendor/unisound/demo/haisi_kws/README.md @@ -0,0 +1,15 @@ +haisi_kws介绍 +haisi_kws是基于海思平台移植云知声kws、ssp组件,实现语音识别。 + +目录 +├── doc # 资料 +├── include # 头文件 +├── kws_deps_test # 编译产物路径 +├── lib # 库 +├── src # 源码 +├── tool # 移植至海思平台的挂载目录,包含ssp模型和音频文件 +├── LICENSE # 许可 +├── Makefile # 构建文件 +└── README.md # 说明文档 + +使用参考:doc\海思芯片kws组件开发.pdf diff --git "a/vendor/unisound/demo/haisi_kws/doc/\346\265\267\346\200\235\350\212\257\347\211\207kws\347\273\204\344\273\266\345\274\200\345\217\221.pdf" "b/vendor/unisound/demo/haisi_kws/doc/\346\265\267\346\200\235\350\212\257\347\211\207kws\347\273\204\344\273\266\345\274\200\345\217\221.pdf" new file mode 100644 index 0000000000000000000000000000000000000000..3d435ff9c7bda0b3c8e6ce44ff3adb22050e0ae5 GIT binary patch literal 988132 zcmcG#1z4L+*DjhCT1ug`P~3~VyA~*32<}px5JGU5mKIvPc=1wPf|KCT;x0jhdvS;2 zC-3+D*ZKdw_xt|m?0uc{M6M*y%*xzrX4b4(>mEjpHwv7*T*6Noe^qx+KYPkg%R>vb zba*Bq!7bzAZVz>(WpT1_0$YGsX}RT~5QvSFyBjUbzrQ$JIQjhhv#X7TI|%CZ#=_l( zmgS8Y9}k}p4?hn-FE0;|AP+l_2r~~4^IvuTD)*PjyL*5>Km(u+ptbpItdG8$y|C1yQSE#jzl?_@Hy0SLZ!_~?LT?=Fjva$Z}8ldfA>0o2!{;yg(Aa_S} zYti*}TrHfP(G|HBEF9fzq@)lUC#}y*ff&wVf@j z&^6!Kc!I2Kv=n90tpPc@qY-kyk<)o&V+FNF-&L{!+1b0(@`?!1a=*24vU9hm72x9) z6-Dd7!_xgU0LC4Kgcl%I+u z{{&En5smSH4)75F0S5kq`wjpNx}A?6{Obbz$MxVL2Iiy3SWmE@;-CxEz5qOYfPwK4 z6XVe%OiXm?0Q7wTCjKLWSG+QhUus%l(YX-veTdC|LN8nSlSpgykb&RQH5mITF$pOd zIU^G@3oDy|ppdYLsF>Uvc?Cr!Wfg55T|IpRLnA9|8(TYjkb|4Mho_gfkMGA%A)%kY zgoVe&CnP2%e@jXIk&~O3Ur<<7Tvc6D3rEz|H~ebv=Fpasj!#TZP0yf~S60{7 zH#UE7Z66(r69W_LFI*2EdZAw!_?VAg z@jfPy(ZsTFc}d6j;R&H^Y+7mK!I2Ub+Wd5<~6*JEemAAC`GF3dnD>i)?>4rNaRyeMpFB2?i!y;UiiLPfI)z&I_}! z&PL*}FhC;v$kL(DHmhOCs34I##R*TnCPX+5%AC~0I}8ZMro|6_Cg)b#4YlNYL(tm{ zR|wa4YjHu44Y^GrvBn~J>ht7zvjHa){>#Ua#7EHAWx|ASU2V-QVelj5%inW zsFu)kq|-(47ZYQey=U(xm2`%xT4S)@Qa35QV{gf0MCR2vT}Xm~KF z8tit|+f09ivjQ~b^_2Ica~L@7;1e2rb3Whqq5FH=QZ;SW@C4CyY5{(PvjBb+ zI$R~6>waiBZdzQRgUllic*usH!^{gHTqKh}(WNjrPc4MM#OtO8tdPRx@CGoMOY9^v zn_Cn0q$q&34sVm=Iw6HDCv;x`x{Y7w&Nd~yU?_H7BXD{0HamR^6a!>o_%8Emo=UbS z7WjerdIn3nub}ZTFxijm^5&SBF_eM8!cs$I_8u@b2%Ye2-0{Q5u8)70sv9Py<+}NO zrDTUF?N3H$KcThUGP{V@T0qsEGV>Q%+c=G(qVz=V=m&)qZ72gh1LhWlqDB>i_LB15 zxy`Q^TP>;83#p%w^UN1Zz`&IQ*@~lBDB$h7gA@HIKFDTJ* z#(~DEzDa4NL+IE?)^su8{pEYoJ*2depqkvZ*bJ5BNq&-iI19qc?QG3!@qxzRm< zc)6c~3=#Nz?7(JGI#afzq9gb%hYA)&(ADLSfB1LksPeGJAi^<>H#Baj= zv85M!MDKJ*e+?aWjVZ48^x-hM)vU&5o?b~+>Pmkxsf2euTKst0IO8?E`L&XRmo^@U z;6vBqU5owaUwY1YJ=ZojaljX!1{tz5v_;tpC^7Vh3SwSxC9a*puNBi8Z((&^(k7E3 z)C(}!;CI)qO}@X?wY!EKRc({=n?|cBS=v*;JDmg__0rAUjIJL^=)tdN^`BGhzfQOR zZ$68*J_q;{otQ{Ad~|+WG=Y_RN&ivD$uc~EVB6C#tkq@Bh`zH%0T!}N$ZFNC{xQaA z?63yP{b@yM!``GNmf6Rz(p22G zy$ z0BqJl)_@^=$LHH5iJ8YhzSnCn@RV0E77{P0Y80a6JSgK02MPInT$>yV?*a1+&JGUY z8w=u%AkKBnZn{KAN=h2vxM*fzMa>vD#}F)c&Uk@LSMN?dG)~lfqJCBClU``SyVT@p zdPJ(S-phgw`6&1SwcR{}TTDTo>BnD5v2*PlQ>h`SUq4sFH&%Vw@jl_|#Ud@l+Qu)G zH@`?k)l+!x5Bb_jM>%Yi2Wc~6**4?)T`S#iE<@yNzHh}h%ZS5?e;u7to}>nR{#5f# zzIlY8-@VcLS~;a^vkWNm6SkEdy+RUd{hXpmPml5i7;o{HC%h^<{2rk7flpw%T zwoCSVhY_;%>tw{T26j3Psbz0m1K}cMFoG3EYu;If`}aa_9TnOAE=d9XTwULbT zjJaN}ZG{8g>LSBtXLu3$D3BR%3%n|#@AK}LSuf%>L=jU14wV#@^q!Qqc)$=ITOr?T~TnoWL#}CG(cTm7v%nA0G zKPoLq=9$*Yrl{`z6N&j*KRZg>j7Kf?p2@_hdSpoHNR2fLx`4gjNsEjX;Sh+RrO8~bnFbk!%MP-fx!E|?3B6{z z2@)qp2Jjhrq!iRg%TcbXM-#9%|@rh@R;vG52hE^WLZD1 zTic<^hZPUDzV={t&SzrZ^r#8OEQl{&t8$L*#qTlM_Gi{htUhiaZ$lhrz)A}(TgN{= zSx%bWWA3BeB<%)vA-3}m#=o(=W%=QnAg54dfLyJ{