From 0a614e171654a504fe23b497087f1ce86444a3cd Mon Sep 17 00:00:00 2001 From: Jasmine Cha Date: Wed, 15 Feb 2023 15:06:50 +0800 Subject: [PATCH] audio: update playback tuning and volume curve Merge notes: * Update full volume curve for sound quality (bass, depth, stereo) * Updated max volume for louder, punchier, more powerful experience * Updated volume curve to pass power budgets (based on volume 20-25 = P10 + 300mW and volume 1-19 = P10). - Power testing only based on speaker load (not full monsoon battery testing). - Only risk at volume 22, over power budget by ~50mW, very small increase but can deal with it next iteration before dogfood. * Update volume curve top volumes to pass heat budget at 41-42C skin temp for nominal use case (13dB CF pink noise). Tuning gaps: * No thermal throttle merged (2nd LL) yet (next iteration pre dogfood), so TMO use case unknown still. * No BAACL tuning merged yet (next iteration pre dogfood) * Still some bass distortion at top volume steps (need to address bass and piano distortion still). Not clean but very natural vocals w/ decent pitch reproduction. Bug: 269384043 Test: manual test from 269384043#comment10 Change-Id: I01edeb0f5d56d2978f13523fe7ee7dd0f9e253b0 Signed-off-by: Jasmine Cha --- audio/shiba/audio-tables.mk | 3 +- audio/shiba/config/audio_policy_volumes.xml | 241 ++++++++++++++++++++ audio/shiba/tuning/waves/waves_preset.mps | Bin 142598 -> 148838 bytes 3 files changed, 243 insertions(+), 1 deletion(-) create mode 100644 audio/shiba/config/audio_policy_volumes.xml diff --git a/audio/shiba/audio-tables.mk b/audio/shiba/audio-tables.mk index 91f4cc3..7c54626 100644 --- a/audio/shiba/audio-tables.mk +++ b/audio/shiba/audio-tables.mk @@ -24,7 +24,8 @@ PRODUCT_COPY_FILES += \ device/google/shusky/audio/$(AUDIO_TABLE_FOLDER)/config/audio_policy_configuration_a2dp_offload_disabled.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_configuration_a2dp_offload_disabled.xml \ device/google/shusky/audio/$(AUDIO_TABLE_FOLDER)/config/audio_platform_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_platform_configuration.xml \ device/google/shusky/audio/$(AUDIO_TABLE_FOLDER)/config/sound_trigger_configuration.xml:$(TARGET_COPY_OUT_VENDOR)/etc/sound_trigger_configuration.xml \ - device/google/shusky/audio/$(AUDIO_TABLE_FOLDER)/config/bluetooth_with_le_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth_with_le_audio_policy_configuration_7_0.xml + device/google/shusky/audio/$(AUDIO_TABLE_FOLDER)/config/bluetooth_with_le_audio_policy_configuration_7_0.xml:$(TARGET_COPY_OUT_VENDOR)/etc/bluetooth_with_le_audio_policy_configuration_7_0.xml \ + device/google/shusky/audio/$(AUDIO_TABLE_FOLDER)/config/audio_policy_volumes.xml:$(TARGET_COPY_OUT_VENDOR)/etc/audio_policy_volumes.xml # AudioEffectHAL Configuration PRODUCT_COPY_FILES += \ diff --git a/audio/shiba/config/audio_policy_volumes.xml b/audio/shiba/config/audio_policy_volumes.xml new file mode 100644 index 0000000..3fe738d --- /dev/null +++ b/audio/shiba/config/audio_policy_volumes.xml @@ -0,0 +1,241 @@ + + + + + + + 0,-4200 + 33,-2800 + 66,-1400 + 100,0 + + + 0,-2400 + 33,-1600 + 66,-800 + 100,0 + + + 0,-2400 + 33,-1600 + 66,-800 + 100,0 + + + + + 1,-3000 + 33,-2600 + 66,-2200 + 100,-1800 + + + + + + + + 1,-2970 + 33,-2010 + 66,-1020 + 100,0 + + + + + + + 1,-6438 + 4,-6438 + 8,-5961 + 12,-5543 + 16,-5167 + 20,-4743 + 24,-4391 + 28,-4061 + 32,-3871 + 36,-3673 + 40,-3471 + 44,-3273 + 48,-3065 + 52,-2850 + 56,-2618 + 60,-2355 + 64,-2060 + 68,-1773 + 72,-1482 + 76,-1205 + 80,-989 + 84,-791 + 88,-578 + 92,-374 + 96,-137 + 100,0 + + + + + + + 0,-2970 + 33,-2010 + 66,-1020 + 100,0 + + + + + + + 1,-2970 + 33,-2010 + 66,-1020 + 100,0 + + + + + + 0,-4200 + 33,-2800 + 66,-1400 + 100,0 + + + 0,-2400 + 33,-1600 + 66,-800 + 100,0 + + + 0,-4200 + 33,-2800 + 66,-1400 + 100,0 + + + + + 1,-3000 + 33,-2600 + 66,-2200 + 100,-1800 + + + + + + + 1,-3000 + 33,-2600 + 66,-2200 + 100,-1800 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/audio/shiba/tuning/waves/waves_preset.mps b/audio/shiba/tuning/waves/waves_preset.mps index 8212799672feb7b62bc17e8d33fa5519552d8a5c..fd6d8f465321fcf29a3dfbbac94d1f51fb32774b 100644 GIT binary patch literal 148838 zcmeI53w#yD^~Xe;iar+4aF zzfpR|taQojX%}=ZoG{~(ikay#^UCKA-}97NlgiGWS&=@zY+A+XmBmGxOJ-j@tFTM5 z`)OsFit_H7>UXNxdz*jcJ&UQ@9fwUAK0H0C;=;7DsWD&_wvJYSv1+a%eZ0MxsHrsgr|LlofWzD3hNT4@%bC4~Ix;uc_^w2FNH5ty!rnk7r#s6ANL034!WfItxrbP%0}gBX@B;pO1yP==>RF32pa*<=R0 z&8VV>2^8TF0mQ=v0ERMHYtNfudd+YR)SK#Cy8dDu!BCuAx<*I1HP91}6o}2|1ptl` zn1DwM030Kb!jS?1$11?%1j=xf0DxhzO?cO!tclHN0e~?Ar8rgqphO^r;{>RmYB<3` zwhG5HSReeuoXBwC!p*0y?(>oPg4>MF!WRVqP7W1OO&zIMqS+J2;WS z)}UK-8pFUTi`KqBpb#gy&8P;a3jmxUki|0v0KP1c!m|VbzM^5WgQ7V&g~2+$b96St zk1CHVd~U_wc#hkQYA{uRu6BXNSSA2)u0RT>2>_I9sBrM?a?CKStK;SG<~#;_7Tz+` z-DXsS83F+33)J8R0su1wQh1>Nz$^{31y*4tgZ05jwR0F&_u-E4si~69Vl!6&pju!R z&JzH*NFaq53jkcA;Zg_t*5YLjXkfjZA-SCA%bM7HRRG{?0ue3{0LTiY@aqBqS17=5 zIH+5VS2~~?EM!PVq;JZa*nCR>@G61zc(nk)w;2)x-_dKntKo+lt`msO^$uvXyukrX z#3cf;St^i@ZWI_2-6Q~bGebuJJau-d`mD*P!! zCbxWS9(HS}xjz$#%_9N;KNpD2FErE&9Ep*G=nP!LVExt&*D`#tb!+XJ!v;lq0Pq`uB7Dk0X%^Qr zT;AiJ6JEURFnpS!6F|-HhwK&o)@?>jct#*L8w3D;r{P%#*=z7QhU6^#-mM{P&kMxn z4;ucc;ZFhpe-;>oFF44K$G9z$+SFb+G<> zxQQWY!fS2~S$ka|Hg5<3{#770n*{*g6ez;C98}(hZ!_dB)8mHVI}FqWGh)HWD0Z9C zLEjaK&EEt7-qY}R2V1^{?=w95KKG+R2{p-ra*x1b2M~JAlrE@c4A1*Lg!=+8`(vGrtSiCM1k1sCIC?A zAbTe6?f?d17lz!W(4!0P;nrl2iS~3r2kj~ln<4>#ZW{J-kY0)18ImUSaBIlg-U6}N zM*v`7f!OpE0O;i)I|=s_I2-q8upOxj_I7KaC^|p@ppQUo4ium-2Mq@$kiG4H@pBAG z6Z$4=_$>4jh|R$Q0R07GbBF-I0D-AE&_Q+<4r0j7XBT$HL){uW&R`9P3B+cIKq@+% zAvZa_Z)h}B)&LCCFkC~ih9d-GbEH5DKQEAujuHSkTEj6Kz9bNv2?7A83dClTKoOqq zpr#zpV6cww6P+or$$Z&uMib4m1Zd(cFaswGbiyeN$t>+`SreOc1OTQwpqs8z*{54n z#*mxsPuU00b(>KQrU}r*S>S4{V6aX2)MR8$3eOXW&2#~P84l8Ac)kPb2Ny8dnRjev z%9_|*C;&Li!RjC4YzBMB@}8-5YaoSl1Y%Pq05Dge5~~@kftSrZ23vzI<|5fFHWv%f z#981hyp+NEpfI|OAvp_|%Vx2eF97gW2Q^pV*Brop(E}}r*<|ncS;C2Oghl74Uz&jmK4enxiIrkLj19P{miOoF%fcH8W z{|K&P_;BmishP~D=D!(|j`TlnGwKKT2>{-oK=#gG;{yrMmq+v<1K*+?SNNKFNY=z= zWk*_Lml1fch6gnKLc^~GXnL%nPQyA4zYzdhG~O-{n>z&P4oo06cR9#rqPrc?`ME~`;9dc` z9TNa}SRgh()9{FfpKJJqhFT4ghBX@2YIsz`V;UaU@JkK9((t4J-Tw&m#-}u_*YLE4 z-)eY9!v=vN_&b5#_^gKKH2hw}^BVr3;YESiyrkh(2K$8RU9(Bnr0_KXx-Svf2j38g z&0ihh0^IC?y4afnv3W}X@NEU~j)PSXV(b8l@Lhov{!Jh@?>WG!_;&|1Ucay50|q+` zc8@+}utVA=vqi%{Wgmb~9pG%->VT>Pg=8RE3It-)!NJIfv7-apr;`9cXAQeB*e|^| z&8`ed-BKEM)B6-^*j+;x1vo$f3>27vg9HE$6-eP=0f6BeiUlfhgaE)10x3LFfF5&e zI8IqYM1d53L4Y1IYdBRP!ifR^rwOERk^oJ0HB1(m zfKvnj&K5}FIRZ3O)leZ&i5UTa^8`{jU4Wj@YM3ps7%K$;<_M&)N`U5x8ZH%Bg_jA? z16F|)&KIEPqZ+;;5aE>q^n6qxh2IpQS(=9L3iQD52>>k8a2-Q3slVPq|8aPOY?i_$ z0yMAEaHEEsG~BFVnE=2o8fr8w*Kn(bI|O2Lr$8r+8R(hn)J*>`VrP2Mnv5E-XFc$% zGSij8w)6v2q&MrPVJ{8c1!A+ez=_yXAU3@;>?Z)QzlPo#4$#m?!+{#o8V=I%ISqXk z;9v!Cn1&$&lkji{^j$Jk;9eZg@Fu;CTDZA87BkqHT|XS*HlwM>5gLxv@OceK3D7OJ zhGR60)NrhZ<1~!YU^LJxTsiflHH^_PRzrzEZyYDE(Ht)TFiC)3hzZaOF%4%r`04}r zWd{2QWV1QTt)b5O6@l1H766zc5Sz0F0L~FO8mBs_DaBF-`|!65mbo?AVbQq`=%CXC zVpA>vP@y5?;J@z2^BC+U(+Q`$HDqmuKy1#}aDj%I8ZHzVgtHvb)1ui7_BnY^taNK& zR5V9`pE`EDw(ul6dI1%>>T?U-N7BypZgj@1iZXg-#++MlPDw#_UJ1ZuRCA&NBTb*gge6|XrnafJ_n z-@BFo?nAaFlg+6m5KW^pv)=yP`eSS)`&`na$qbbuD*QPqL+SHXqoEOhrfDbb1J@39 zZr0VERGSpqoGNe6%_ROvB{|On>9e-Q=PI{w-En#epCfy&myH47azB;TRHlthZ2Ep4 zMFzCZeD$k83jIk(OPBPD5?kf;FS>s8ny-PaU6UQ7lc|0aZT(ccNjX8jV}Eklh}Ne_ zpNG2sNeyanjAh<2Iwr>;yWI9Ei#iy(yBJmY+%$SDZ~ZvMvvG@OV;5(m-iNA=3pYPK zs<^l#CS~E~0$jBA2-nx>9a4k()p)k)F_m4i8|YejovxWr_`0Ef){V-(R1Tohm&!mY zhm((vpuZ!jjHYq|73(|5oO>2_AF_X3}ppsl;^op`UALeVrF1^StC32lLu$>xBdyURy9;ANKoyMZ) z&APg4sGMYS`!;et(`(8G$8y&*UCRyYo{ng+qB4N$-jhnDtH1Ayjh@Z?zF1GTHrCtQ z7$v^&ZP5$72KCEtYcF#DkEl+MQK@nD@~=61lh(jia{hB;R`x=#y-2pWjHfbz3ZJ(t z*CgYPKQ7YCl?JvGKjv&VI8RiG+`@e!O*W5mHtFOx=m+O}Hj_Tj=f#e(*3!DV!BJ8# z-+%Pjyg|Lhe|oHbg2rbq*HX#4?~!V+KJ?7Hfvw%_;pzW3(s*+J*xYv+k1N?CD*T;B zV@mFOe=)VwmUVU2^qKt{NA#CUvOF~v^2`Ok?;TU>FV|HjvkAEr7tclV1tz|rgE#Oe zJuPlf|HPlk7?RXvU0s((ZP4@HCfT6+n4}(lU!h074QwQRCHekL>Qh|&p5a2*9sRv8 zSLm5)&QE^Z=#g*(n@QVTUzu|H@sN~y8`paNp(n`=Z0wOZgy$#O-i?13@SLT=cR%-Q zE=5#e&C(^^)?_mK(BEFfJ#(Me)pc4^T)ca(rcI{a&r)9xy8%bV2B`w5$ZMiX7I6z@Nmlg5%|or^)xNIzla;*Enwq`FzT70qD`~xM zlg2eJc}?LRvRR{&*DcF;jO4Ylx*a92G<_+}WP0u7lGo^_^NLz2d7b}IJ4#+R^Gl4C z{h}9jw|q&UX_D7VzTJ+J*8;kN>#o5ddF|Zpl2_PgCy~6u=td>416n6}g^wTFev;ST zO7a>_ZMo#te$S;aCwaA6q9fZ>@(Nn=+FwgvW3#;^uXt`7NnWj>e_di;x*(GM*OP)T0tX}CTMZ76w#sA-Z{ zfPW!*wIl4i&6d34;HRzR)%u`oqmoyWdy3#RNM5-o2FWY^W>D0PvH3TaywZ>KbW69J z>%{oJK(C9e=9uR-$4!}?AvdFAQ@bithD)lLaY zb~4Fpt_4VOaI{8lXOX;OD`pSb`rS#>9cOremO(*za~l;p(zqZ zmaSw-<_0AF%95nY$&^{*Hh`oleb=n3>z$LWu!Lplk~c_t`qPM{IMKSgyP`~HCGip} zR};@9KAt}J;`O!kw>GJAqkrrBg73#P?V#JP{g_CD=wT%t(-x8l)j}h-S|+WveT5v; z;GFo&(Q}=a}&? ze&6+3|GKN87HD7V>yG8E3pWpQ`}%EJ?(OUQgC(g0r<^jH)FEC zq|}>`i-Tgueg2v^VxEVX(_ddC6Z5&95nw}?MqDa^?Pb|{laZr z93{5=zS}%$Y5w}OOq!Yhd^JtxXZM{vkYZZWm(AH73g}u&O_*I(T~#)N#j3eW*|wif z8ei9Tp(`_i5WEs7rck=xAt88WeGfTCdPoRfNxlfdE6E4bq*H|8m3*OGq8)OngP`Qg zjUv}MhtU1!^$tStO8Ol@2wuruXpa z3NaK(_Z(sKJKB{6zjsn^WbjEno1`x)_T2>(?@&m$g;SRi%>n*%x}XE{38#Mu~Tf zrV7Dq3`J|h7u)zku+I`tH6BCJ+TP&RuZCEk@0}}#Vt$`5_u7fCA`GU6me)VH0T3h}#*K&c|1gaySw<}5Dmfw%Qz>UAdcu9nv$@iB1SN{L1 z2wV(BYttWRnkRJ2@4uGCP_(vKmR3L|8C$n+48?b*L7url%Y=IQ{n@-2iur9cFNUJE z;a_vDi=k-!h7!1>x*oXF`JLN@S_ z4V-@s9I}D8Q)tAXt_FG)etgNhYZ!+4?>3OcF$0K?EHdb z=Xdj!N-a}YT3i0xd43$Om1emY?|k+-bEeBsoxdI}Q&(DB^XUj$nX+TlmHFF|rn+b! zuz_87jBrFrT~Yr|K1wT-&c+TP&#pvF7j zJD0jLzt5L@ZTf6=WqzNxjk?m>_Q$N2sVl9m9iy(a$MUb|)~PG=`(mSauJVmH^kyn* zsIJU!t7Ym+YsPlE>ghg-K!&161pb^_|`oxipTsI3S3HJX4r zHX#8uCE=DV#6e|AT?XIQ4tdAHss}N407dw&KnnjR5S#ZL;M8_ciX0o46d6W7+^nR? zl)sLaH`_KTGKQqcAt^GC%sX*X{^NGCq{tufmuvqo>ZHgah9!5)!z65F zh+)YN8LJ%_7#VO9OLYee}f$3>Q)yZgv1OXF+)g9zOqxeNCrE)JJS$CVup~I zAtWYWCG8~EeAtN_=~nS)8XnQ`a}B@HP^%%*utvjL4UcMgOvB?EeyQPC8lDsY_>Dks zd`iQ54Nq(Mt%hebY!DcNzZ2+<&uVy1!|ydbui+0GLio`Tel&z1<)JQw9}VG0xgWGk z_)!3QxtV(!5t6&}NuXtjh(behcXmh+#{OptV^8^G!6|>N^F?MY6UJIwzOaG^9xk7q z+&zCiS|*IOw&v3@S)`F9#@#W(*!=BCQ$4f~IuYj2dT?K|A{c~T5Ii(1@%9=?L%`Q_wKT6$t^$mw&H@7BR7Ik+(b?c#lW(8te1tmQ= z>Md&k4iFfDX$JDaElZa4iVl`F0EcK8AW(!fW2`?;b|wyDpzl^%4vr3GNMf7}cAHT} z4-+WDAp(ep3jhpdu-2Y8!}OZr8j2mPzZgd_*pMDwqa)lJ=!r)Pgw*fcl|xX{*i4m9 z0Z=LsM6W^g$^-uP6TRZ8c!TS2+0$`}1G+Sq3Z$bO1%^a72>{aFa0=-Apys+i_eZ*I zwPAtw82J}N_n#@CZ_Cml170yT3?FaZ`j`2&g-CZ=DWEBP^u^6X@m2;K$>dLl?w@jN zYW5oYviT8%T^bd=QZ&BXWV18yCk`s-;_VJdve1;Eq+6Enn4qMU)$JIRlzwzmn#uIq z$%B$cH=S1${Z>vez%v4|*&qP$I}Oh|nEwzy$B-ySfA7{%r+Z!?Hh<9YM-6`x0Qj@O zAbi0=c0B%t!A>Iv;zowe9N%MQzvxA`86ET`f!Mq(0Pu>2R~=mP?RFHs(v4eGcMV3d zs}42cU4hvAO#t9M4S#pA6O@>A-NWMxHWVZ_7;fEJ_0Qey~1eRpA8&W_}q%h%$ic@C;pZ5VCiHb{s0sZ9Vso$nK!1VQ93lWPK%h4cbP!F&K@1Bw zpSrrw!p=y~Ws!BLx6IFVH_aN+32z z3jiFW;Y$LsnION@!x#>Dv zHjB+U0svDT&`npV?9(kOW1!K5hLom7C?!#U1@B{P@Jwy{MJTmS{M1ys#?jnmjzDax z1OVm=RAM!QZNkfD9)s;~Tg*kWS!^yApeSDsN~hzc4Awv|yv(hk8mK(*0P|%Hz*imA zT!CM60Q*G?80>{!h*?<^o39H1Tp^G}dH^UFQ!YX&UA(lUP(>&O2oXxRUxd>B584Q& zwjaD#dn=!k@h@K1w7lJ;!O{=w3hM_HoVdPO(O~UZ^-SAFgM|>1eP!kLVTqh!_>%Kn-aP2Wj}6Ky3O701j3VqQO$n7^5As zL!!aXydA&H2epqtHk-3_4Zb1}o5=zIQv_mjwgA960!QOi2Q{Tw%5XW|d%SpA7c6sY zvcsZt9gq*E3B;ycVCNFOUbU+)`l7cax#>V6E@jRwN>~ZdV+_63r_ztg`q2diUH7E_ zZu5l>zUZ|>VvEFWOM7)1%cTIi?n(b`voGI_aY^c-_k|6QkAo-P7?&K^Z$ooMu9Pzx z8?)t$T(v*wX-J8Ul9wG#Z|>_$sq@DtRDXJA?F6%=NNCWe{fKi*cEec6zCIS<6Dkyi zFX~2RUn&Psp-6nuKq`k*IfBYaDx;~KK;`5Tz=;&G?+mKPWcoXm{%sololblq{hdR_ ziV5lI;uTSU2Ba#0F5?xPMGp)WOhQ$|x3GCN_Nk(96pPHWL3N zB2KomaP!ln=y9EyxcVG3{>AURKI>n1HJ&Yf?a)(jT)26d+t+W)a&O;Qdyvy_{neETFrXf7CHv^ zi^QMYKk2m=m7~@G^rZ60nxy`I+c%N{ZL?w9*OQG)8r|0yoi^NeFLLWEZeRa=e(D`J zIiI<{nWb^2L3=ntD3|e6N~tWS^2D0NPkz7mMW*@sJsrM&;WjRg5?g-XZJxN)o;SZf z-!EwBijhW0Qq|K#FTgUp8lVD4>3nnlQVnx~gnO zHMd*3DV;O{x-t_8;VVP?=-d{Li;1y;#NqVQW*f2FTg^3BP;@cpw@@{zUl zGw;6IBqbjl(ljMsNH6~WfNn?=#1w?|;`KAG>^1GEBV`n5Yme`RlElwy*R*GR=j8BgN0E}yq8EQm3S{UZ7JT1%@v}?nqkFz^rOF! zUYsvrNJTfWckGO~D=raNZ9nl|O-L^u(u;HFI~{9SC1rBZYaQ1;aaf}o79 z`k5kJi_L`sgK(CE>@1wkK&lM-fm=_kbZcN#G)I8-4;`;9^k1m+3v_;Jnh3e_y-;r` zD0_kgRHF{1{|5WEd_h@ai-ib@pn^qZ>+1F#OGhP9)tIq~E&t^_*Gbol-Z0cJl=jpK z%<|WxxdOALOP(aLjI}kNjzSs(Clv7oW)wxoE}W7TITfoCc2PTXqAn*q+lVY)qqiQT zX(uX0RQPjJSd@0vXlTTrY1&EqAn~UbJ8T<8(YC`EyiiP>2DY5wg+*zJu!clT0L#YM zazFiDO=a5H#_HEHp_i>+In}3tN+QVdgFWUEIvCRzl>!nGUL(331GH<1v_+L}q*7Enq0@b(d~*<<z6pjU?vF?^j>Ymfsc&+kQlL9-~s@>g8W^Ef=^= zAiI3tt|Wn5en0vGw`5%0cDy0yM`;UHy-N?D97eVI6>L+M? z=5j5Stot5eSsLx``X&8{x`D0Ta_!*%wMBaIQHMgFxxn|mW9B>m+Y0rpFMNM4_iXuN zNYb2jbzLwy&%O=%0dWH#G-iY9WD*`%rt5=R>@B#NNF_vH$Zlh{vw zy_y$A(b~9{8cbDj=eK>MDB5%8&)=FRuC)73VR2=e#g%*}cRQ(UR{7j%WtA07JRaGF zRtnJROCYE#gSwJ?NKjV>btU(Mpsoz+O6~_iT}d;9kQ|(P!p~*05R!w3PntYHWscAV26b33+hVlia}jTlesU5hBBxtxl`=K;rfyY*tu|hIp{xbCkxj{Kb)SL z>HkF?t}m!7xmyNxWl&dgKlt|u*Vk6+%BT7jJk_tSug+n$K|XcPXR9l%E&uI2+tIdi zFW&h?u&TtVEA!W*W$H?6Yd#%8D;IW*x-x$|(o`4igM12=ZPk_5mahzHow_oA{aU83 zw6@AUKew&A(jLQCvNTU!X>IsQueMQFTH6~uAJll~d*@PD=J)w>uT8$HsiC?uzt2~A zHd>~xw6^^*YprKH-!*2#0%~=owY6i^mG)Tv_1rpjWqx05Y?3d0b!C2AEmK!oTmCiI zHtNd!er%n((%SULndYf0^ZT!5>Pl;?n$DyC4%@!!%BT84p1DBF)Rp=D**tY+ejCkG zS6UnXHP40jmkm2cEX0=V`o3bW0-x2`4N+75#xrh9i9WpSN zVR9E-Dc%V&EZIA?;*cXTauA)tamW+Dg&3A}{lT-&J0XT8xg$24okIxU6ez;C98k8_ zw;611(IH58$0?vNoMyy=ks%v(=e5|06(06I+Q+7|(|(XgcM*uqt^(vif!ORO08r>4 zdnWGg00v?FovZ^I#Mj$aWod2s3X#^SEc4fo zUPk}R`XyBcm#o;@DyJ1%3DmYKOM8qG?-IKom8CtFe?7NOWtra>8=K?{UuBu!R?AeD)|P+Ged^UKIsdshlb@NSS;w%< z@5k1uEUis{oN1oQGQa;?rn0oQNM_MsY~8*p%SE-2XD-k(m1TZ^Hcw@l-$wIPmez)U z&9zQtY5nB)mFB4|t&MBF^V_~EOY19t{?;^=rQLS`6m;ad02hEgPN|wvF{`?)ddBQo zQ-{F>_iBn?T79k{H$Y!X)4>AhcJjQrGp41-lvP((R9%`rX*LOm>}bw^bM|;>w+rnd zK;J?FWKn?TunCMn8fX##ps3mc^r;@MdIl*btgN9R=K{M6#HNb?wNe93SY@BC0+S+| ze#)9|4zgtt<&aI*#HNP;08JZ`H2}>NXXbo$ur|;XaVDS@XC}Trlno?etijsaVFE=s zL;&${0g6M;kQf-I*9_NCEHD8_2ml-*kisJc06wqbD1jD*z=Y$(KxrOvrgcaPQ8vrP zvX}ESM%J`eoC%dyoSB@3oH#S7ff8o|Y%g&pWO1Uj2jDb;6w+ua%|2bj83I{6Qvl%0 z0x3L80N^VcCJQV^nmx#I&K5}FIRXGvHIxdpHUuWrU`DI~oF|aN=>h;VG@LI`gBJ(@ z&@3})PYN#-0GOp=w!kW^6abhbkiseffbAvDgeZ?VGwF%*bq%(cIFlk+Ua60>kRgva z6JW=PGXbub>YS((jGw3zi~}r{&C=100z;yk1OVxFIq4K9+63d)y&G+UaSO4jkH||jYt2ErN;Q>)AU1yz0Qj>&5x(Gnn(!9~ z)P#)!0558INyEz;UeWNXKo&PKBxm6@Sp)F8Ky2O+0Qjpw)5Mw7gtzrR?+DQ2VGZwU z_?w3JH2hs)F}}}`G~okT1Ms0hY__f77I7y1OJgB0DYuSP6rh`iy#!WacZTFF^pG_) zj~9r|J^}#y3dE+T06;H+BHYgbHDP}TbQXFG(66*K^wDsjhO~x*1S0$#L(+u4vId}^ zKx_^c0O&6en?nRBH;OxL5-{-b-p-X|s*f!E;M4+qnIh zLX~YCppk6jbkp@Uu?Da}Aca{0fUj$~LLh6ijn`KIu9P(?TqpqWO%2}?Sd3Q*09-AQ z!fy)zd`H7I0epTP=nVCP~szjl+HFz6LeWaIe-LK z;Y|VnHw&b2nE_kA8lKkhTMf@>*dQ7*Ya2Cb_ zfbR;#=5GQ3?>WGy@b3<2hW{ZY@>diiNfU|L{1DeN!Xx-?I zfQAkZ@ZM$#VUsV)UD-fVx0Ht6oN3y&P{ZyTbTW4spw|o(n1F)>01g#M;a~xpwrVIA zsKgNh^k`gw9*qkC9IN3tfyFpV0Kf>)lWhTt8ld3>fmJwO0N_M{5N?!ifw4*)vQrCT zlgUCZ+-P!@+#rpksgwXsr8L~AK?z}LDy7$KZy{__>&{vLNiQ>#84BgO&`_kIn})qK zbQg%t-U26LPXW4n*RY?4{WbK~aDawB8V=Nu)^L!9&uQqZVX%e}ZnS0LMki?}p042x z4QC2OHh+8aK;HO{EZT@z9(Z)vQZ>QH@vJXoE zI`-^v4QbV3Q#=gx-g86^$!lq=0yF5)M=KAQ5#QsKWF zsYI%*rq5hfQK_L)GNz!w)}fpZL?2yUxE{JLyXGpw|5G{AlVfwF(fIjsTrx{v8kf1_ zg>mc3Um6D|y)ur5%W-U&Z68ZTA0thykI{kHE|-;1uGLyD$-XDi3cWAAB5JTN`!2WS za-duN3ZhafrboEo(!1}`g+sb6FixOMMr3-VLUqTKkfPGJ^tSGynqUyA=OhwR^1Z@dt zM;&21m+e4D2n1~j`2xQn4hh;4?ju2460{}U4}!KNXiK;s1Z_#smT*4^+LE9xAz?_+ zme92jv?Tzo)Rx4iiGja@wj^jv`1>blO8~wnGJ>Y%S`FF~>N!DM0x$xDwj?%p$jfzr zI|X8MmxF93y4wN0TDV65;9h~)tP%hS+LGQFv?TyRTSC7!<(J+;Tf(o2>=Lvk^n*XG zgqSU`7%K(n&8I-nmT>P0+LE9x;doj{iXvj0V)u z>L6=DTk^4Ke{IR*X$neFL_&=Y1tcFxO_*I(T~#)tng<^F`XXt8Kt~NEJ&-jdg-9TT zpI{FjA`YRSh6&J5!vsS334joOf^s;8@Dm~Y1PvM?`~(l3*U11G!cXw@FNB{6;V0-P zz9IYsT??D_;P9q^&J9Ki@eqCjfTs1yoE#v8p9tY6_`BraE&N1?I1wUF(6>N{I6*#G zqzC-P8vaWlM4Sk!0KUr#ssR2v+>WY%5CtJbLEztDg(wISPLwyh6kS(68co$s5cvY4kk z7Bdt+x1#d6!hSeH-Ui3!2o2#)b%=t%^QxKBDMA#4sT7rAS_yDl3@e`Df5E0QA-lIY3|prUd{F)(~_IDIBRCLcvL-R~;u1bPPeq zz(Y<*qY-or+z*0|fqf9tXoNHx+z&z;jgUrz?+Zg34SKdDFXKWQ4ek^njYe#Ojv?q6 z=w>qL7=n(0rb{7n#vZ7yv>xhf^ujM9Ah4vN`bmcKF48 z&@pg72s(zKW1#T@auU*cT09ne_Oog%p z(0_0Z75*DCLCmTsqm=LseHD?fsMPz)_wx_QZ~W#qzn>wZRW7rFpQT}ix3A06@NbYs z;&|3iV4|PsHnHNOimJI4>7b*q-G$CPE&FQ-Itt1gtQ~Tczyv&60N@ybprasP;3?t| z5{GLzRUpKJ2s#QLbwWG{_CkmU5p)#%nsBWQkRcvKhzG$#Lx=~#Uf8NH47&XheJW+` z6A1AjVzZBS$i4!x=_x=#Ck2XdKL-?8WPbj1?bm13UHQ#D{64I0~&-X1yVRi0H8|4T!Big z766zhkiv@u04~;Wi9jV@DiE?n@K-^|5&>|lbc&#(2s#SBEP{@LeejkjMgZQ{5Hc5p z%mqAiKphJqWG)Cg3hopk9z@Vl00tdJ&{1S)2|5aX=da^A;2hFvuvX*s(Ev|S;lCTH zM5?T&&sfF$Goz1A)4>nyv`%4HV!KQ(0sq*1-1zx%Trx{v8kf1_ zg>mc3Um6D|y)q8q=5dW_A<|?}A0y}}tcO?9iO_y=IuAO>1=)G^=h<$%uI{8!nap)g iGco`QI`Mhr0VY*rStof`Ts8pUJ7my4ChE)1xo1eDZLjJ-qs%J`v7u=u@jN9?&!@ucqvp;(MRR+n)qFK}$Zp*~q953L z_h8$D=!W`>p0xr z{ex0}uGw3|vtR1h%=edC-LG=}-(uK#K9>)l?AK4(t1A8ato@i@YZq+1*)I}}KlaML zli&0Piz9k*BoCp*5f#-U#5g8|Bq_u#5n}Cx*ozSACPG|vLg+n082E)SO9>(L3h}O_ z5W-M|c%c*GOoZ&=j1ZTc5c*M*6ylZ$p*9U6#toqZsH+1y7j_-hW%qE6HJ+;vg7Br! z^y6W%C)c)G?$$H=%^%a>tzPcY@9hifTe`mWK0NDNDyqekam*7*(vw@_$=Z3c7f;kp zJh|vR(R(~G@OxsG@p^1vKLR(O+2~iJkfhRG4Ok0mhwdC_2gYi zPlWK~h0c>R@wA6Co?LRC=+mCu5>M3P$yhv5Pc%G#xu##;gXfIWGwKU?&L|bt;>kGX zi6rUCE%9XSJlTsU>L#9Cbe`xvo*4K&F-v(O^m_8Hq$fgn@prTp?8OH>XBn7!8f~=h& zdl5w4M39S45WPnb1HT|XoM-e%l+&*YtetO$g1`R8)%)Y-M4*F1V?AZ(smx$A5e~;wb441?Pwb(Fj*yK@H2f~h{ zde}Ww|NkyiTGplI9XOVjRaA>3i6p7XEzxA{G}((L>L!|8beiZrni%*sF-vJ8^lI|1q$WaW@8BH!ZP4sC^Ziyyp(PS)|s3!)(pRehWJ!sBV^jzg8H0LTRszsA=OcO~`lUt(6 z+G(;EP1H>^x#%>}do(fdYhsqtMCjGzT}e%Z(By?qlQYq@hclX7a+>JVn%oji)S}5) O{tKdBeeR|{z4RaPxkC#8