From 608f0869b22afaf3b360ac2067732b6141bd82aa Mon Sep 17 00:00:00 2001
From: smallchi <564952747@qq.com>
Date: Mon, 14 Oct 2019 18:38:51 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=96=B0=E7=94=A8=E6=88=B7?=
=?UTF-8?q?=E8=BF=9B=E6=9D=A5=E9=A6=96=E5=8C=85=E5=8A=A0=E8=BD=BDsize?=
=?UTF-8?q?=E5=87=BA=E9=94=99=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../Configs/nlog.unix.config | 4 ++++
.../JT1078WSFlv/JT1078WSFlvHostedService.cs | 22 ++++++++++++++++--
.../dll/JT1078.Flv.dll | Bin 34816 -> 35840 bytes
3 files changed, 24 insertions(+), 2 deletions(-)
diff --git a/src/JT1078.DotNetty.TestHosting/Configs/nlog.unix.config b/src/JT1078.DotNetty.TestHosting/Configs/nlog.unix.config
index 5031aff..0a5efae 100644
--- a/src/JT1078.DotNetty.TestHosting/Configs/nlog.unix.config
+++ b/src/JT1078.DotNetty.TestHosting/Configs/nlog.unix.config
@@ -20,6 +20,9 @@
+
@@ -41,6 +44,7 @@
+
diff --git a/src/JT1078.DotNetty.TestHosting/JT1078WSFlv/JT1078WSFlvHostedService.cs b/src/JT1078.DotNetty.TestHosting/JT1078WSFlv/JT1078WSFlvHostedService.cs
index 86a8a5a..c90dcc4 100644
--- a/src/JT1078.DotNetty.TestHosting/JT1078WSFlv/JT1078WSFlvHostedService.cs
+++ b/src/JT1078.DotNetty.TestHosting/JT1078WSFlv/JT1078WSFlvHostedService.cs
@@ -35,12 +35,14 @@ namespace JT1078.DotNetty.TestHosting
private readonly JT1078WSFlvDataService jT1078WSFlvDataService;
private readonly FlvEncoder FlvEncoder = new FlvEncoder();
private readonly ILogger logger;
+ private readonly ILogger flvEncodingLogger;
public JT1078WSFlvHostedService(
ILoggerFactory loggerFactory,
JT1078WSFlvDataService jT1078WSFlvDataServic,
JT1078HttpSessionManager jT1078HttpSessionManager)
{
logger = loggerFactory.CreateLogger("JT1078WSFlvHostedService");
+ flvEncodingLogger = loggerFactory.CreateLogger("FlvEncoding");
this.jT1078WSFlvDataService = jT1078WSFlvDataServic;
this.jT1078HttpSessionManager = jT1078HttpSessionManager;
}
@@ -51,9 +53,18 @@ namespace JT1078.DotNetty.TestHosting
{
try
{
+ Stopwatch stopwatch = new Stopwatch();
foreach (var item in jT1078WSFlvDataService.JT1078Packages.GetConsumingEnumerable())
{
+ stopwatch.Start();
var flv3 = FlvEncoder.CreateFlvFrame(item);
+ stopwatch.Stop();
+ if(flvEncodingLogger.IsEnabled(LogLevel.Debug))
+ {
+ long times = stopwatch.ElapsedMilliseconds;
+ flvEncodingLogger.LogDebug($"flv encoding {times.ToString()}ms");
+ }
+ stopwatch.Reset();
if (flv3 == null) continue;
if (jT1078HttpSessionManager.GetAll().Count() > 0)
{
@@ -63,9 +74,16 @@ namespace JT1078.DotNetty.TestHosting
{
exists.TryAdd(session.Channel.Id.AsShortText(), 0);
string key = item.GetKey();
- session.SendBinaryWebSocketAsync(FlvEncoder.GetFirstFlvFrame(key, flv3));
+ //ws-flv
+ //session.SendBinaryWebSocketAsync(FlvEncoder.GetFirstFlvFrame(key, flv3));
+ //http-flv
+ session.SendHttpFirstChunkAsync(FlvEncoder.GetFirstFlvFrame(key, flv3));
+ continue;
}
- session.SendBinaryWebSocketAsync(flv3);
+ //ws-flv
+ //session.SendBinaryWebSocketAsync(flv3);
+ //http-flv
+ session.SendHttpOtherChunkAsync(flv3);
}
}
}
diff --git a/src/JT1078.DotNetty.TestHosting/dll/JT1078.Flv.dll b/src/JT1078.DotNetty.TestHosting/dll/JT1078.Flv.dll
index dc79ec39d51e96782e198688d44062ac306f5dc5..438350ed0fc472713b06dec3a31a657dbf97e23d 100644
GIT binary patch
delta 15401
zcmch833yahw)H;uR^6JDno=2xkc6=y2_^ypG9?NklY$~9VkBWuQJ|1PK_E8)oFk20
zIH1xdPB_wNT5WBg1hwsS>+?CbvxY~vt!Rt0;(%}MeNO=WzV5ca|Leb?R;{)7KKtx*
z?x}lE-KsQgGMcV4HeEV7dEyhFk$!Yhui}8JAld+fhIsY4yIx}H)JkXy?q^Eobckz
zgR02a1%@8z^32<+SAHEb^5b|s4RX_OCKGKs1>I%tYZ`XTG{dD@GSjWIW4Y;#T(m3Q
zg_oEs>Pqd;d|(Z?&2&hSl{lbc?uffAN#1mS1f*{Pm}w7O=}p{@O7nm0avySe&2)fO
zFAhAc{W2K*>CHc}rZX_O(jNiSy~!p&xy#~i(PcsBbz|ayS*j8-D`J)PJUpYcbz;yK
zO)09psTaA2s7n0-uQAWt0SqUFIYrTLMmz(ndpOg@v%FLhHR2fn=SQ-_wrD6O6R{C;
zrC_)GNM)spkUjMjWIPxT#W7#*137t|$V~TvD`pLU26>`ZsxK=KMLg+`5gqe-%Pe2q
zDc=|IjcDO+8ofAv5pUF=?#I!ANT3Xdv-BKl^w{utW$-D?yFdLVCkaMFk)Y_*z0lE6
zYCD_VQPqe-U5@9!VIm`{B3`GxPqIYZsa$sGE+g)A3TgWh4`X-%N=BhwoGcQJr1lfp
zRxBI|$Fd{YxwYd_CRPy9tA{;Vzkp{ap6HT>W45W$=L{$-J%9%kjYLP>1v5pmkp4ZS
zPkXT-9J!aJCDN1r5F(P5_CeMzip3&Xc3)XLkyuSSc(4garTr{1ysWedmU;#@GPr|?
zE0qHgi^CZ|Y%bu7Z(NXe9Zd5sr^#Ze>qSIXdZ5flX*A*qmWCp>CsgWyzI+
z*6O2xsbK)Z*`~XFD$Z7ki@FkCK9YVcYwwu8!HFXq}ks8YDU^HmJ@@!o2d}<8GcsTK4#ZZyo
zNy#N!CmB&H3ON36p*dw{Q)s=;IQHMmSpAPO)@OBRocQxH26T;+yE6uVQe#E-`YFz+
zPySgMd+LO^VmO2L{UqTJ*&Fnr>wZ?kqAZCeqP3GopC{T#_&%v
zwno-Zb_RXk&&pV+6E4#Ud;U0I`{L+_N{wxw75~Jg#%8AG_wZC<$pll?nI-uH#vB7K
z7tjKbh-IXH~EjmTV6*h`JcJX~0!j?TORJTCJ+a9F0OXRquDoZVP64XZs{rN(Ba^}I5N
z-ynHd`_5Y>0fu)<=F^@hpME?%i30{Mp?<3@O@^7qJKajNIrS$n!c|NxSatqDX)exe
zlfZ&xc+P&ntT<+^{t)x5+dn{w?h
z3p=mrDJZ}hV$fT5BDc&SDm@kEP-&m2nK}V1=E4;NXDnyXpod*82r+2qFMkoEGYbnL)jJW|Io@xqB^DZs${ZW>T*eI6Zgt8Z_h3>3QIsBL9^*cdEY6U4TQA!twDp
zO$U?nsYSzZx-aIf#WEQE{zM>=SauRv&`jg)iPLGwA*ueEV|tgD&48^u;9ZS3BL=5<
z3*?D-%Ic^f=Ed1EUzSlL5?~;i8+s>gURDur>J1+Hso=P{y8GtV#N6o`DD3fgiKh4Q
z{88zMpL(5+ysNoehu7AmY9V6&sQ>V$!^?5Pj=DTQDgberp?&(zcY1Q#=ht|gbhY`l
zQtVGNS%!%`x#G(|tZt7dzt))<8h#ZP0)m`3O(W)sN88b7z~sYwDmd6v!N2aQ;72_b
zpr_1`zNs^AKu0BVbUwih`LW+Uji+l5PZz{27N;}(ORJ3fb8p|FXMGM+dbij^rQ{oktE`IaTek&u^zpMcm$PJcGgvpzl12v(%5Hz<&
zi!el<7WvM~;LUNAJTRx{W+wG3R`W9F_DfdHL*v?zPgZ5jm58|$!P1cwaeET!`EX&M
z?~nM)!m#iRtaYm#Z9oxE}WZkS|79@p5>6SJ6q-
z%=4+Cv(ktO8wtN_DUSA%WO@m-d;oG$9zKu+JUN&sp5YKSTIa!O)#l9#kSFgntHv?Z
z2E91{$on%!E~}`*yKE`q(#tXp17i8hL5sqv6?nPP%B%7Fa%)2Tspq`Rl>>(4O7CPy
z;=EaMsIW~rKlAE*;TH^1L7Ct=&AGA9m9
zrRp(5v=pmrNop1Q5`oebHL}%{JIC@A%qz;Co!Q!0pSfw^sYkOpoAhGKo#XN4r7lDx
zrw?CVO~`85p?0t5PY3_@T?uIaW2fn{yCVQuEo(v;=wkTZKrlQE`ic{7@A7_tXmJ0z1=
zRxz5eUG5F%LcCV=06%&8(glmp!lr=e#!2{Cj+0*RQ%<7rvXC1TVom%R(bet%Z)2tH}s;o)(M%Ci|?6PzNrH;XME;T?jPiDjUq
z9va>mMF&}oWucu>KdmF?3f)+=Sn%%rozW~>Oci++y-d>!EV@WK?nI=YE|mDKWVe_X
z(8dIh>o)(EXq5gI{5|S@D$3~wB^WQG7Sp1-0Q1MC*|EX{iW3#(F`l3MT+*T$QdU8P
zz|V|u{LM+mGvkb7^LQrap>32()D~Et&e~(6-cuy>{sInalrC3FgLuwPo^3i$=2h{u
z<9eQ#wLNz{xT8MDm{=L&8;{vxWs(<>XC;EksZcICn0H2l$vSxau!N~S$;w4`2ogs>
zhb2C%k`E1+LrukJyrhJ-=CUtHg`#p*z^tPfm5JILW0j!6qPB!t70_r=PlQ_#i@ZZZ2hw~|=SJ8$h|;3Q_*orEt3XwQ8Q-7$onw2j_T=KQ4y`agCbfNb$p~0)Qr#@xff9bnWA1cS
z$Yqe|pDx6+jxK;QP}*a7@72*tC==cH#F*=-k-{p5DEz0X)I>4#*E2Bzce8%sJHcH^
z_e7_IUv1R@AGBt6hN?CUTuakLt
z$+I0i&vidAWIY1>!nG4P*!85lgf@CR!N*8nDMp*l5OJ%EJ9|U0NGA4ai&Kxm5mj_S
z;(u_=jx%QCSl&g9KL8ay?PDC}eGzE7c=Ge4=+E4*fERlBpi~Qf?|Bpa3Kz%El$;$d
z&TLOWH5y~oE`-Ky34
zf=;{@?-AAP-CW?t$@T%qM~!|rPN{zobyeO?iT!RDy(H=ysw(&%>JzOpano{>Dj_^B
z_I8H-mWO;LxOdF*&2ScER6D;2$1E=uX!U(K530ALWQ0B{6XkU1qfL&F-VgM&d{o?9
zx}Zk`{j4BO!QK%)(1Adug-?L}990$^ZAEEi3inQlnrTsRq7|np1G=53TKUwX)uiBT
zD@nt#XF?k3zL3TpRA*U*bg83gWpa^KL|-||`*Lsv)DK#{9b66N<;?_!Yh(1q6lP^Z
zwqW$dl&_s1#r;+Zm1y-{JPT@|RxcOqGkejITD@Da&gw-YwR+3+TfOO6t@fH(P*b$p
zZd_vZp&43r7%fnBqHJ_;{L<=6^R;uUaV^whN6C2mQH%C{8Qf>~qs>~Gp>{gTmM#X+|A>6ow>9#aIe=c#>b}ShYXEg=
z)f#xm97ykJwLK7~f%J)1Tv{pZ*NRIkB?I?-iQe_qh99uX$gkDh@WW7XN8$XFSY(yc
z29eJ3EvK7wC>K*s+qB|h%4vsIT+AT)tyWyjAljuB7jp#tQ7bOy2zo&)E~bKB*J`ef
zYAWb2j#OMsCCw=3x}9PwDJ{yGnM%4qD=wyznzZ6#j-*Sq;$n`ZtF+=`2GbU;xR}9o
zvsSfX`vGeR-K8Z@%@F#HqokOj)CW83?qY`0SW!+fLurCmT+C3KrWF@+6xC?O#T-Qq
zT5&PMXn|HJ#DM}vi>aoEwBll_sY5F+<`}X&wd87!q35;YVveQPwBllprT^86iy23Iwc=vN(dUkm
zV#d>)N**%i1lpn1qiAK2l%*#)O`Kt;#$TcCca(I064%WAKNaF-;z(A!Ob#htCb)kmkEcSsN)9Pr
zB{L5Cc$FMdyh?BnRJY?*a!|SXG&hre$HnmVFC5wj`2NQdP%E?
zOv7_3y`|L>!{@1?ziQQJWI=u8C>dcb9nik_au!*&gcG0iu;1UQYAH*U-Runp+*C`s
z+SwD%)2K*Pv$sF?H>Xib`-%dcY8F*!UnSbjq7jY{9mYMU(>zDfH>%K6N5#XXL#n{{
zpmp?~R*Uo9P-l-2pG}>4y*y`7kE5N?fkvmAO;>C6Cw#J*P2043P1K`WJ+A!LZ0geL
z1;y>+Bb_WyN9RCQXf-yx&zwzDw0flAGpMt*vWMZiJ)1UY`Frf{X4A`#@(wrmnf3IR
zRujy1Rz1C|)l&Ex=p(Ic_!{UdtuD#;TXX0Kt+wQ6L3u|>Y2L<2rz0eS!dGKS~aL0xX<~JR{w>s
z!_TJIv^qug_bi}qwYrb&EbAO99PLb7T{7-DmyXx!{dk#YA+=~VDc-3T(>+>E!8Us_
zdB-^IqUu^}F+HQz_T*qsnp|TYpF5IgEulNK8lkeR^XO}>E{l(_Jxgg^l@oeNZi}^?
zHfZ&%Kg+X%)>J#b5&l10=hFbWBkSyYFQ9RvE~cb0)^h<}I*uco>6_3b&q}Ho@3b40
zd#YzO^*v6MyernwAV+!oVh-&!bd;7Ol8;$yXslKfavD5qX@XWWbIydCrqy2cj@d{x
zT78NS=8e>#RelaGsikx+pO-r@Fphh8B97Y+A2nD*Bn(Ojl?%HoC)V
zrp;Q-gl`?)sMSLF*3oTReH8!7Tu=9E^i2NcWX7%
z>{ORhyH@i|H(g4PYBeX+sV<`@Z7r9E+_=&9oTzK)#K1Do<>bPbeMHyLagjz(3#GKW
zBCx@8C4H{d{M;)&SJ9e@PUHoFjOUkhk0@slS5t73xT)4e{S4ZQZ(UyZ>OMEkOp2406(YC25y*
z;FR*8M*BbA!N16F%Tf6kLI1%RtiSH1@nsHkXMuct*kbwT#T~x5{!!#MtN_kzU`^D?
z!R>)1rRaA_tbaujSw4pvcL!aAuL~6I_A{O?*nSWV+K6&ZnktLeDg97}?jika3-15@
z^PqBB`A*E$()|*YWzci^+R}$}d9XrpEK}mTpyeKhufNRS*a!mic
z2**1_QXd6$9*VRjbHVr`o9}%^XiLIP`9MV_KtJKGZz4=11gixn3QiZS6>Jb(Ab6hO
zD#2!;qN{*8bRRHD&jU+vo@RTHR{F~Yhv5sNZ|uO)S`;3sdLVur
z_;=pSpN%Hpr0nQ)Mn++PUZrG7P&~QS<=>@ib0B?N6bz
zmHubU{lwdq{WM7JF)vemZP`z}N!d@ltJqJx@7Pa#v1*YHdZ2B>)gpOXq@Whb)egt|a=A+V8ZL86-VXkV`8XD&c$|$#}ehCg;;;(mYQLjhN
z1oCuk!F((Rzq?>L@bt)qNOV%T32jHmu6J#g`Foh0Zmvi^;^Mjd6C$@HUU3;%+-`S>
z%4vk#i!VQp0WJ`tPQ~-FR3IkhJ
z4)9i00K7vL0q;?LfIHN;E;s#F4M3|$RVlDTl>?ttM*urjCGa^l82FN{hT`Q_HOxH-
z-<$=2F`DijgzwN!1NNp>z*1TV98A{&N7A#vV`&d?GJOO*nM~gxe4^?DoJ*C!b7?$q
z8L%4P%Ld%lbOoK_J68Cy_#!Xho-2GVxE*jei@+WdLFJ_XXTt;w2>=s0^LqYZl(DI8UqaHjQlQ5WY(zTe_Ir?%iVAEzQW_bV?%!l?X2}
zm{$w07TzGdL3p$9X5nqZ+l22DzDxLS;k$+JF?cY03?7WFOzF~;&V-i;?`?8WZ|sp9
zebr*G7JGy62I0-Zn}xRuZ_~)xZZY|Qc8Fz{Mz%j8_AasPww)JAK`tppBZn3XFVV=B
zD&f@{*-|gOK_gq5gg0ws%X;Chf^8bv-r=&j%UxpHakXI6EltjWyG)f}j)f(ASFT6n`TbhJ7Yh+8C@HQ{=UBY(>?-FkB
zmY3aPBA*nYksA~XFVV=BD&f@{*-|gOK_gq5gg0wsORMlUjcn-fDBU@U9w`pWchwv^z
z3QKW=H|ta4M2?MKT}4s|4$d_$t>V*dbV7%#lrkt%4nbU4m31
zc?7FUWc}BRXcBA{>=0DghT!i;@Y|pH`1!)K^ag!OXR1flGsVMWlG$qD(UBRD$UE$Y(p~&07wV^%0O=6)Ow(l)?ANY~U
z{7K{Qz&7JkpeMxkn+n+ec;YMI0}=i^nEM0RWNPoSuoqnH_CIp`f3o8bfw*3$q7^ab
z+XN#$n7<q#gp#0`|vOjcMGg-fYuW+C?8wkvc*xQP-+%s@hy+-f4zix41Uk
zO!yg?tBLO|9R3K(-Gf7xzq{}QL_A!0$}h<9`ghm6h;nSWMJJEHyDIXSaJKG@eTcS1
z+1M8|+YitF_?Uh!eU0&btzN}omRkp`l=#I>bri{oE!zgrHInfoW&|T(9hyWfoJQ{f<=+DX&MT
z&dgrj%QUP&rg`;A{y?!==ti>W!ps}1+hX2ga{BibE9J2EHESxB&zsVY%)M*-xXcui
zKEL(~b!6efy>F44I*q6Q96YaU!*e~)we#RZfcr+6aoh~Tp*A*THrl&cl8yY5JByt~_o+;v|cam((Dre8Mn=ugi0#dNgqew@p^_^OhGQFn9u
mSxwtirb@*#S?flsj`m6G9x{Ec&R^>`9oZhac%Qne!t;Lt5}ghJ
delta 14275
zcmcgz33yahmOl4wwI{VCl}ZJ&5CR2BAZ!A%B@#e3*<-?5VHH6N1ZC${08v0`@S#HE
zk|?$`qOD&Bl@^`Q*lN3X1Ko7XVC9p>MsdMG6vu%%=e!HVo|$i)Z|3Xzc>nwVbIv{Y
z-1~05twM5#lH96ny=VBQS6b8QAw+X$Te^l5Td8PgqCM^s
zPatF^wy;G_r~*xGNN9-^?m}8ni+yXoWAqx;B3?_JMPFhRY{kcEl#JH>ibv(gQ{~
zhC{)LIT6r13P083g-)GlR4$g5JP?vUPVnE(jtu|iS?1dPNN
zl+)oXFJGR|a9)c0Vm)iHUoBRI=GePbgc1}1
zhm%WoF$T0)7CF|Kc9MXWXou15Aj6yC>-8;`i2d^D{Xu^WwGm1Wq=(W1X<0RcunEpB
z!2T8+=|S8U#E=Jjd9oT_3CiRR`T|}%
z(=(`pzSy%S*|lOX*Veikw78w84p>u#a%)$45AX
z-iq$_O2ibf84uwLxTPbf53Nv|wKviB0dBkqP>0H_6>g6(tPSo?qR86sZew0MXohpk
z+||o*AUsHIv5o^SGFFns9=vhMaG-55_UKNO(C7`7%Ug{{L0jWS(Cm0)C0Q1iVhlEN
zQln1Ps53Rf+Cyb3VEI_1RprSLW!5}TPj44=dK@KpfU&Zx^{l5=+pcK9g@g4M5$oOfrMFy^U5`qku8c$ukR3?tI7WElF>GI+3t%Pljs@~<0Vj{;9gKVcNP_PoRbcDa(_Ig#)+Y`LiB4Kl6g)O{jA>6R*wF7V7;*c*5qi1{^iK|gd9Z@FqGI+m?l<%
z0#8`{&GtcY1}L##pq&DZXpGwUKyk%xuntFmE&5w)atg)3#>aDBP;jNzooJk_zv
zs?oRrv#jTG!=kVCWNv}zWxat|X`MmrVR`b}qz|H=?7(yp>u2@NyDyVkM{wQR%RGz>
zSGjdEZ`|a;=m}p^@RaQ~N)n)`i87iaGRNLR26)nE%Mi49inH+Saw9S?D9!|4$qf7C
zji<&KE;)B;3QtGkQrO3*qsII4dx=(Dd7gjfAFlSV=CYs?nhW}037F9`fCUBgX){z0
zl_~HGYh#-NGaHm}>?oCmg>Iwnk8_R1i`2w@$g(a8JROWA@6X7~p=!cHUgEX)Tf%&S
z@;XZjDU4iO=GsG*vc-8EPa|2N%1g1LT9XUYtyP7K@jUodVW;ue&VwDN=eh60lawg>
z;7&Y1v0*qD$uY>#7Qzc@PdvNk;{^*A4@ZwX>;8TsaE&;Y)(9r;dQ5WC}z>&Y%{~j?sEqGnRTPvfgf+W0DRyV;|yR64))Ck^*{B
zR&_{EV2~Sc4rnbVK1Vl>sQ2G{?T(x)sau=ZRLAi9j~DEqyJgc}rFdcuYK|WjfN|EW
zqIR?Fp6vG7)ebvdO?C|z`}dg)Ma4W>?8|OZx5JTLW6uoq!sAPw+24*eSPzZ%tD+9W
zTlN&a+Ees@?kW1Co}$>3HM3o8%ogmZfRE0XI74njO^m1M`k1B*1)kg7i7J9mq~&H3
zf0d$|#Ai~}kT_#~+OEf#uhEofX1lK#T)YxAID>uRO;iBryNSW>#S;-dS>EEIXmZ9T
zp&C-!8fjLw6n+#D6jq{rSWLDyw9lW6=Tcf2e3#{=RCIhpuHqSnBSF3zpNp4cNDGJb
zu(!Am1awC@F%@0dif+UFXrTpy)@f+PiZo}s2Yp
zqNsWCX*n}u7o^CW7WG?@COlv(OX1Bg-Z<*zq@oKhQW#wf0
z?zB){Uh*1H|Da;8&BGYC{%%5Eb@_mdC=H8$J2+#zBB-Z&)YSgkwu7;p=$RJ&bS)jlw&*`GUhui>si;jEEKd?@h7
zAc4UiJQ~-5GcpAapU+j&4h&~x65gFhVhhnrmxD`TKb<`nwdervda|m$PRwV`F7Dth
zN0(bshiS3PVC^c7#qbDfa62xog|XYo7xom#U=3LvS+ibY@=qH0zNy)2z>mZ|+3q
zbdW18Yr4Y~i7m!Pb|0=twa;l>(r8{vk2n@Du@;uxP(@7?=eGRIbU6RVCYUUw7vuWs
zhzD{hHsu4!1P#ls7?xQhN@Iq7t7xq#%?S}*-5pz}D+=EXuI_5>DJ|>Q9q$_p*WmLP
z?$72RAGhT8xeMlC(E#`2#mI{%rNRm0UAHgIa@ZSeeXBmBQyORJ|$_4&oLG<9!ewoNydlR5@#+rwb#Eah#jO6s=j4G
zH>?HX$9)^I%R$(g0W-6g1=C;woXIla7`USbOy-W?#7H+j=urG4V6Ih{!Vs)02&>#<
zgF$%Jy9OJWL2`eRNw^W#ss?oT5dRG~i!%2JN_0GnuyfYN90Q8EtaJVY*jc{-#ZSs1
z%*!DBE{o=)54H_Lff$RH$I~7*(Nw~r^P&{gGfdcp8@!816S|1!RnU~4A=D`lf)Z9wgh+*<8>@wWQc>u~>gPUExiEy))@)L3
zU<|7RDyeob$z*AAXh)dE>V^P0J3)d~rkhk(Sk7uMt8%yx8nEn4Oao8}53+Ai7DZO#
zQl>%l%sdzviJkv~RU(7ba5%^_bAf%M;dL-+GR9^O5>sF-{Dsp56M-fcSx;t7foX7&)mu`1j|!kq(Dq#dd=7?U-}bD#AdZ~W+bXG=WAtutzuTOILA6Pn8#tH!+d=3
z!tO!!28;mQ+n!V%RC-$*A&AGW_==4P)Uz@-K!LZL5rq*Q*vZ|ug6gZPkI@PqwiR^A
zsW5WE(~%>c`@BO@g{0c=9fhiuR8=_oJZLM`3>@S^L
zqDR#N7%bIe(JG?=MoD!yMNluD?|P4_MX*Pzzj&*RB6wb^STv=#g9B1^jh;gF8>wc67a8s0Evc4<
zSD-p#E1uC9e9Y>!Yf0d^8iUWIy2lKxH)3#J%B7yy)DG~2RCjs&&;jsv5kIG0R9Z*C
z$0b%&T1N;=Rp#Gl6hp35*Zc276|?!*en$lQwH0mqGGzh!%|T(UEoQnsF<$sj8s%iS9n1xDyAE}Disye4c@dB7h`sZ
zUZq#7!MCX6SlPvNhe=XVG2LONR8&k4m@gF-(*y31ii)`oR!c?2Tn8JZqGEc&7OAM1
zo+j+DC0El69G$Ke(+k?LvWw{j9i^gTdOc+M=C0&H&jYR#as^~q@rT3hY3F%(92d_OgZdfWfxNphh-!cQx0!SMa7iEQK_hy3OFGZ
z6;lC!m5PeF0Y2}H=YOi3s<{C!NGBCD5H3kY#S8>z8Aoz4m2f93yO>JYW-DhPbX2W`
zoliE;yX{j8MgJLLrAyvDG4nyHvsqV^rKph5`QStT9%Dmqg
z2F@-t!VS(rk)!Hx@Jlr#Qe_N>Y^mmA!x2y*)lzIX0!pM(lq$Sao?|OM>y3o9(wFJm
zVT^=LQnmLzipnBI*S{)nO1}wqN$0KJQ>b=Jbs+SlF$(rcbu6?O)qbhQD-Won;T5T-
zDEAw9M{g_cehiHVKd<{}m0VM_O0FpLbssGgd~L>`*L}21t|?k3_;yYDXq8-3v`WTb
z_0cN1s&qQ(PJs9AVw|6NpF{O0slM^PfGTAx)7hZDVpPH3r1Kf|FsgG>%~swrZib6e
zEm7V_rF5k}?WI=@L0dT+u)}JIO7(&Jps0p6tm>Q}<1I`z6ieSXu7jcmx=EjT$)!UL
z^p(yF*l;3LN~hDK!$cTq`*2E+8Ixd{t>Alc(wGe0@eMW>0}i*qXQUsbYM-s6TGh+;
z)kQuwra)P5TXj?pimC8Rsopa2*<~ucEajhBeIV6uL`t6u=cW3CpoX#Q?KJCyRj4YZ
z3j2?$Qz0(Z;^=WytEBoWo3iYXY7O4pO@%YIa&}V9qv|v`CuKji%9sYku
zhdXrMfxb9+q$C`c$#X
z;|{pU%D(Tt6EZ4nUycHfJE3|YsXF+*&*NAM=UHulZ^9AB3OG~Ak^H@1318dFc{2Kd
zx)Q#Z>g(wJ#!A4mFn%^TA+wER6__3=(=*$n%#i9+@tV3CT1oXaK6As4~{TbyB_SeNQ!^zf^zmmO4xrB2_bhr3}t
zs|TT-r@P}GcuA_(fdP(9a6+o-oO|AGvnIFQlSJuAT5JsnUZf{pawaR7Js4sG3mW
z`0Z2aF8H187!1iKdaP)a!3PdGJ7_;7%*HplN*pm)wS
zuN^Z3y$UpD`~50B?<4O8d}pVa@EPt@*p@-2^@s`-(aSuT7N$gYQV+hMR3M2-Rc@wn
zD_yqQjBK|X)|Jn2pwU|7C|IjXf)FU4MD@XDFw}@Zy`mk5V
z8!cAJ-}OT8KU2u
zf$g>JG&c$y#V?x*d*zqy?=3A0?Z_EQ5bckED;6(|2On-}V5Np+@H>D2j1B9MjVPc1
z(Txw7WAW#v-i#HDLm9^~)-cvG&ShN0xSX*LQNT9DOn4qK2Y!!OfWIY>-3z1KrHnoC
zx0Tb;}(P5H-G)&=xHl@s&GacSbLq%H9usIkGQ&qrQpn
zy(_~}F#;}ScNA@*(%)IM!kAvjzg82N;2ew%n~Tu>vTv!F
zjKUH#5f_Q>Y^j78z8mY#jVHrd_=~6z<1$WS900=Y^LG^+F;TRECO|g4qfc
zSE$s8l&C<=%o>9B=HN)B70ktZqgvq$?Lz)hP6Og7_g+((E7s@i$Dk*JP0Auc(>_$Z
z6AY-WU|dFy+Lw#y%j28RG4>24
zf=^@4QSRqejKoX)Md&2nRLzZouG<%ZuIv|qF2xstuGXtKbt@d%x5z2QDlTOeTAoHr
z8D1yHh>XB%>Q2!++t3=%L>=YkmQsfYKg|<^X9~gp2
z^Rd&!5syMKGdcmWTVN6<>fo>C6f3p$G)2k*u)C?u*`?8JJ&loL!!KzHF4@zX4`0nh
z@g3q&C`6pacozPoIpHfffp{L85x-;n0a1tb;xytt;%|uNz2Z}JZx?3~cZhR{4~q+k
z_2SEVhLMTNnhU*Z!nJ^r8ePAu(KzImoI6RIx4qil@1ji9)z+VyP!9~Qy
zh!yy|$62icHiOGGkoiFTW$UaqgZT{RbX_FF>a3o5gG914F+U`cEGg#A63GGzWfKy~Qoy`GL2kM#SX7X3
z)iSSTUdOzSc?0tX=7*RcV&2TWnfb>`6ubFYp}`2e^TjSz?u>Z>^Fozk3h}P7tE+`lxMNhHf*<|)QziDU=e^8$%vDQ8|Gku3Ghn;27!
z;N(0KIS=y!iD)rhBQc#?EtwgdUnb%1qO9S%;C-Fnf4>3Gxw73rc%lo^9G4zX<~jz
zB3V+*!Al+IGnO;fGd3}%7y)l%Fov<5G0vFu@%m4(fHV$bEN6@}CK>A)n;4rVQV}AZ
z$DK|*pLscBoH5B*&)CG6Vgx_;g^1_>au#vMBx5~e6Jv@I0^ESHoUxv1YLW_3%qixOf!x&cX{VJl#u<~0O&N4SYGR&Zo?;G}+)XBV^O=`3#@P~Q
zp0qKGVv<=DU(eXYmL}#YMiU|w1QAZkSk9Jm=5fX(TawJ{8Jlt_KE(*FxGiHjW1KO`
zSkKtRm|}$19M4#8@-EJpWURL>xl~p>mqL?_^=zqU-o%(s4uH0RH2n=-L*N|CT+V`uf3|hW*r$n+#HL)El$8r
zmb!n2e_W-92**SpLVVG`3-OfyF~sq{-H3D8av+23Pek{US0(;ywazeTjY!~DOyV#lYe|Jv~nvYRa{>J*~dUwR*qkw-nq$TMgy5;A$
z_{fa!lQ#6MQYPZ9oilXkeZ$EVXd
za8@+n_B-6(#tmmLck)EVRav{F78cK1GOcm*)MthDt9ZC^eEb8YvHy%W+?H!W2W!TH
zP~)@(U%Lb}j#}mu{>|fi+!lFv`@okTx-}ZC8vU|0fBA>qeGa3w9+(-7DS?Hp^$v~<
zR`Y}N1M$qjauGz9rUc?jFu5H)lbz1MLZ$KU6_tviJ5)tctkkM?jdNDND6Dp78wE_)6Vo5ngxbLkq;n(KH3O;?MD+_N|-JRT@{6N+YHE