From 8d75ede0ab6404acf5a868c90d7709a23e3ec8a0 Mon Sep 17 00:00:00 2001 From: saphid <4596216+saphid@users.noreply.github.com> Date: Mon, 28 Sep 2026 16:29:06 +1000 Subject: [PATCH] OpenXR compat layer: keep the current refresh rate when SteamVR refuses a request Quest apps ask for 72/90/120/144 Hz; SteamVR offers only the current rate and Wolvic aborted on XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB. Verified on the Frame: Wolvic's Quest build now reaches XR_SESSION_STATE_SYNCHRONIZED. Co-Authored-By: Claude Opus 5.5 (1M context) --- frame/openxr-compat/README.md | 2 +- frame/openxr-compat/layer.cpp | 14 ++++++++++++++ .../arm64-v8a/libXrApiLayer_FRAME_compat.so | Bin 98248 -> 98936 bytes 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/frame/openxr-compat/README.md b/frame/openxr-compat/README.md index 6c366c9..4d5eb60 100644 --- a/frame/openxr-compat/README.md +++ b/frame/openxr-compat/README.md @@ -238,7 +238,7 @@ from the binary; runtime execution of those paths remains unverified. Prebuilt library SHA-256: ``` -57abbcec6fbc6df7c79e2b9a46db1a5d8613b4db3c0d7e49bf87cb3172280d10 +aace99b7bcdb3c79fa844d75a9483f8f4b16bd6e669fb3003515df8c673ce54b ``` APK SHA-256: diff --git a/frame/openxr-compat/layer.cpp b/frame/openxr-compat/layer.cpp index 3d6f9df..a5433a7 100644 --- a/frame/openxr-compat/layer.cpp +++ b/frame/openxr-compat/layer.cpp @@ -21,6 +21,7 @@ struct Dispatch { PFN_xrPathToString pathToString{}; PFN_xrSuggestInteractionProfileBindings suggest{}; PFN_xrSetAndroidApplicationThreadKHR thread{}; + PFN_xrRequestDisplayRefreshRateFB refresh{}; frame::Names enabled, stubbed; XrInstance instance{}; bool promote{}, palm{}; @@ -131,6 +132,17 @@ XrResult XRAPI_CALL threadSettings(XrSession s, XrAndroidThreadTypeKHR type, uin } return d->thread ? d->thread(s, type, tid) : XR_ERROR_FUNCTION_UNSUPPORTED; } GUARD_END +// SteamVR offers only the current refresh rate; Quest apps ask for 72/90/120 Hz +// and abort on the error, so keep the current rate and report success. +XrResult XRAPI_CALL requestRefreshRate(XrSession s, float hz) try { + auto d = get(s); if (!d) return XR_ERROR_HANDLE_INVALID; + auto r = d->refresh(s, hz); + if (r == XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB) { + LOG("xrRequestDisplayRefreshRateFB %.1f Hz unsupported; keeping the current rate", hz); + return XR_SUCCESS; + } + return r; +} GUARD_END XrResult XRAPI_CALL stringToPath(XrInstance i, const char* path, XrPath* out) try { auto d = get(i); if (!d) return XR_ERROR_HANDLE_INVALID; if (!path) return XR_ERROR_VALIDATION_FAILURE; @@ -224,6 +236,7 @@ XrResult XRAPI_CALL createLayer(const XrInstanceCreateInfo* info, const XrApiLay LOAD(suggest, xrSuggestInteractionProfileBindings); if (frame::has(d->enabled, "XR_KHR_locate_spaces")) LOAD(locate, xrLocateSpacesKHR); if (frame::has(d->enabled, frame::stubs[0])) LOAD(thread, xrSetAndroidApplicationThreadKHR); + if (frame::has(d->enabled, "XR_FB_display_refresh_rate")) LOAD(refresh, xrRequestDisplayRefreshRateFB); #undef LOAD if (!d->createSession || !d->destroySession || !d->stringToPath || !d->pathToString || !d->suggest) { d->destroy(*instance); *instance = XR_NULL_HANDLE; return XR_ERROR_INITIALIZATION_FAILED; @@ -249,6 +262,7 @@ XrResult XRAPI_CALL gipa(XrInstance i, const char* name, PFN_xrVoidFunction* out RETURN_PROC("xrSuggestInteractionProfileBindings", suggest) if (d->locate && d->promote) { RETURN_PROC("xrLocateSpaces", locateSpaces) } if (frame::has(d->stubbed, frame::stubs[0])) { RETURN_PROC("xrSetAndroidApplicationThreadKHR", threadSettings) } + if (d->refresh) { RETURN_PROC("xrRequestDisplayRefreshRateFB", requestRefreshRate) } #undef RETURN_PROC // Includes xrGetInstanceProperties: report the actual runtime's identity. return d->gipa(i, name, out); diff --git a/frame/openxr-compat/prebuilt/arm64-v8a/libXrApiLayer_FRAME_compat.so b/frame/openxr-compat/prebuilt/arm64-v8a/libXrApiLayer_FRAME_compat.so index e58d223fe68c2b5c12c44da3652ca3ab908612a9..a58721a065638dde82d73ca8f733cde852743df4 100755 GIT binary patch delta 24450 zcmc({dstM}7e2oC87>2&3@}{eHp4{)yrH7veHhHhOifKOQSpwK6czKDGhQl6Gp3CV z_Ax`#Lee5Z!B3WGR`kgXOO47BFBPd7CMIL*eBXU8ay<3?e*b;H^E}gg*1OhTd+oLN z*?XNcWR2UidA(Obg0O6*BWb>^U>+s>qad+}BH^r;iZ9qB+bQTP+2saFsBLFnD%qQF zJ%~B7d37uCf`!t6z~)7gP4hklSzp?Iyb{v?U)NG2LPq|aH{AnX=Z%#5(4x^>;*I48 zX$NY2G~}_h@9kZ2P=C4a568U!p821xbADzgX=J%UH{OG;EuZ7PS{I=7t>cdIDPU6q zLv1?;NK&z!3`M)hBJm{}zHo@dmudLAeiC1$;n$^0e6@yO-&f>qq(-CoG)-zytKp;N z4(c@gT6qBV8a{WhSL`hsemAC)_fIl33Z+4& zhR>JfYz@D&PU<*E!&k_Bu7+=r`DJ^l*#G@0xb&Ok$gXKn`<=uq0Vq?D`@S?K1seM< zk4W}K8s7Y_WM6!rm-;8)%ZsSwzCv>FMSls)H2gJXwQKlq21)kS8vg3T5?`a?*V^Qc zYc&dGmDXu^Wii%kcxBNwXn199HEQ^ukQPu2JO44e~X7g4{uohOd(4Vhum|mK0Elh94&LWg?H|t4vVUU8#ZM zP~nw(q*~)BUCwKbhR-jP?vYvzulT7`^M2@aqU@-i#e}s?h_?Gibu+YDDz|FZ@JhGj zy$5$&Wj*ON{5IK7n8e%e=ObS>G;11M`di9Vf`<3FBk{=^K1Jp&8a`K+GaleEAxZ}$ zA5ajIB|FO0@Ec`5Tf-|O&e8Cn$Rkz)cp%e!KU=10@U`5)uHlsoDfoaR_$koXUy=P3 zX?P{@67anL`%};;83c?DuTasx@d7$+8@#;gw97HT*F-&;$*yWJ2+$bgbN* zsWwdmpJC#_iABRJBOR&Xb7eVG!z+PiYxpKP&>We!DG@1=Dh?H1iFBF9QMeqaUBfGZ zDs!#%Q}Cd@jdYY96+NgR_gATguaV_44X>=BDh(fhPs(VuhL_e5)}P`~8)>bk!2mhX zIt{Okv|ht2nQPGSqhvpgoagIb={Q+=2GKN791;1%RqPkbj`SK{2_#IzH_LvNjf(pb z@4rm9l%fPpgIt+U*6`UfpQ_<=WZt6TiTFr|x>dsuHpunlNR47oE9th()bJTPiO_;!70XCO_QO z$|F-oq6DOjs7h%d+i#ZVzFNa8b6l(8!{oJ9r{Qf%it06rS~*1x8eYjzqlQ;9)U4r^ z3=ug1WnicL#7x+TUZd#mC8fxq;ir2@yfPBSk&+>^#{R!@h7vTqk|F7Cv$foQW;yay zO@s5YqmdeZUQa2YObwqW^Vu4HmCWa;dGt@JWks%90luV{)WI?hzpS^!+co?~na|ho zTV=jL!|wsl`zJ*jMNO*IL9vE6^pW@y4Ie4L+zjqiL{H z=4&;4_8J~OA$1ylq|DcA_^Noxf5UxV96uq`J4lMg`wGc%^;rq4DkQzK=#u5Fv|7U} z$8L>=*UR>`8a~%1S1NTHg;JE(YxrE*QG-`Oz#x(?PlPu8`zv z`1;#Y$IDuH>Hbp`_7;WMW4$1VXqQJ!ar%Wyv55bzl6e8V8pOcfuj;Fiq@nI@HSH-uz&!hikDnVmb;*%ir1_7PAcA@;ybJOuu9f9KFW5< zQ@2$x)Ozan2!4A!bsKet5-_@}*dizqoHLa}x(1zJp;4Fbp)U^7UG*>&2I)#X4QGwICQn11QCIC{IAzq;dZCE4 zZS@W-2+|$XdlVRTHG2FiP~Z~}mlZylglzQfzcWbJ>}%KCQHsIo8Hd7f4UF@jDer^Zhwf>+e?^NYDEF z9SWp&g9WaS8~S)aQD+E)P!Q;`)2Q1S7*=7_9SSVKh>izEHe-xIxMl1{k9;FtZ{#Hd z&r9J+wz}OAVc1FbX}j)1*hzM~-F%^>md$D3UC66t+u9Eo;%nKp_D>2mU$LPbl7y{a zv8Ow9Nt*YSHk<9Je<%HVL1*dTNOi0D?>5~3;IGQx>hQE*d3?%4er+>HO&(&MJbm`! z+<8-$PhK=*=As#kb0#mEl2<;<@+FO0wrJFhg-d2E&KoRQjFJpSP05=v#9H3N`jN+@ z|DPu2c3ry7G-s?ZFPXo1Np9|fMR_x(_cPC(F(Y^O{8{F_oEhe6OBOAfF+b0YE@zZC z4mn55Ycq0n{In<^H0*b3d-}TDo!#JeuWxd@rvYPt-(GgRyEVJrDfo{0-R&;8;db}N z_3KyN?s({T|K@f-4=lLic8C7qb|>JP!Dh3|?VkUu+g%9W3E6rZHh;R^C*Y$KY{uPm zyD9V+@lA&8ec5euH#EB4N)Ves{@?xDS~}c-&I=LkOk|-LBTa$)H6nlQmfP)%jLZh# z8(d#xVjiwPgzakx-V>wQf{{BRzYZLNQAZ#vMaaT(WcS0rV0X>!&PAJFVY}@YxBE@_ zzk;?~Z7|x4bml=xBXs=?IA+gdaxNtkl7Q8#V?%^WtL9cs#iQ z^%Kw`8tw$<0#mcVVRuWJgwB9jlhG0QJ-~Wk!c;=SaMZ_7M<>7(U@kBNSOEJX;6}(b zzzX0U;3;6mOhP*O;=oAFAtW0$!5-jNpm{b%1{^tukg7yPJC6`Q)CSGKJCHM;LZ^_I z0ppVp=zI(SczhAsfFHaVB`7cxxDz-JSPi`;j}VWJ$lfZ*;QM2P%w_rS2?Swiw4cY2PHGN1+62tG9*ok7k3)&o}o^(aQBzW@$6510ikdJ+CQq1{IG z0eK9t40sB-9(?jkgq*d3nCF0F;Km|!4n;jM5=Bhd7B~c&fmy(1z#`y!;8oc9y@udA z6H*ME2Tb@60*BsjE3yV0^Ex^~(NhAP4qWyI0sz{9$AE``wkBNMDaNQ!1vPGm12{75 zz^EYi2i8N*0+vAD^Cmh59s&|nNAWueF?K=QUFZy0_Z9*IUk|hZ4R0ebU@~wk^hLmp zkZXWdz>*Toe z0FME)fRTF<3~(5*3YZBz4$KEO1FL}XDDxVCBY{`nMP`9bzyjbM8!mR@!s9&{15<#P zfYX5n)PaS-{=kYdEJonjeaIGYdO3msHUsN`wfm7dJWFgmh`R}B`2cNzIfu|Gu<#@J z#$i}@7y|~LtwyGRwoAA$wuKQe0oVl02a+S0GhjS0vMV|VW&#aIp$Db_%b?#0JOtVA zV~i4V4$u#E=SE-?_+`hC#bjjb6RZvJwZLr1nV$i}G5_mvQ3PUr4LX6r$P*YD&<<<> zCe&hN5imZ9Q3Hp4gDC>$18afDfQ_6#1=~nu510jPK7&yM*ME!50xN*WxgJ;#G}a-& zNX)h5n51}NvJzuGm)M8a;@<)0srfgt;U_x6;^4N!CO~Dn32$4u1 zj-Bu=W7o$9(Vgs(as8NOoSxpnRXQERUK-a`s2;#R8rNMoHi``$7tZ`L!#q2UMi$v) z?`Oe z0lNEQv6C7d=4TSy^knzw+A06;Kgh#Ga*8#n8gN82p9IuVoy#8 z_dK49)c{>6E0_=_6fI$;69#%VKaI7_j%0;0kF0nhbvaAQ>f1eU`9C}2IXvWv#lNy8 zuY7Q|;Idb;SF_p+^H#EtvIe#_uEI)$hJRA<9p(iYTqkxiGn{pu*jCuNnhl*8E^J-R zW=>2B8D_%@#Sr)>0pEJq=dELJO-vFFy~w_XMGX!}#bYWghIu2F7g^w>zTtIH`SF(c z@XoeEmA4VM2VwJPg){r4Fv0v1du`HC&&W+!S8U;wFh(bb3jH^+@X13%s$XvL%vVSS zx~X`Xt(e@!ldCLjN_H5lU#4eYPBsaL3fQ&DR-cUyX*Chn+7{t!L8~GkEN=&!lx+>E zdZi^jd@zkrRlLFuWG98}+}zR^S0($R`{mJmd4z6yE| zHf36zFCS+KB>k&w{*+!xWv{mQ<+IcT)lP8YQj{C(TXBw^n36R15LCQB<-?l{gSuMP zgmc;8h_l5F=kmZMt2i?_UP2{1+3=~cvBQe~J$$}Sj>BwN5&Q4dXjV2=FJ$n`q$CSk z=%M8w-T^PGQox0Yj5P2JaH&PeQ&LiYsJI#baLgA~51MZU*PolW53j)`??GwO2~EyQ z>K)U%2-792)YdqRU0N|;$*Kelue%g0J|&01tuJElPH*qkfJ<1u zJ3UF*C^E0i@DK`$nAeP?fjL_q9HhMsW?RD*f*Yygxcd@tgSW8xGm?aiExZ?24X4Al z@FgQIf=>Rt5&LsSFCq0cmNc_(Qv6ngA&x>CbpW;E+PtDEQgH<5Qp!EEiUXs^7TSnUGaHYtvMKFj2p`4(b=GK%@;bP?=Cj8(j4D`BO&Tlf$<`aS9fZT7j%bI9AD?1z(u;* zpEUXRV&(zlwnb^6;nsu812-6Y{xRcQ1a9Xs zHYqn&$oYh=&5a#m{Pe*vnqa{>W!N0`;gD6F1zaRJKX8$#KX9xZnIFXN=5`o(2~-9c z{^3n|of`JpgKIROyHj!Tu-ghw{~4RQu)W~-8GCVI-z4Mb54JK!Kvr?QmjrMgpR;QV zhYHibWPKM66&k-~&n=1-$ak!C(E+c_?{P=y*hlk2*s8^ygsnfa(!~RX_;c*?;-Ow! z8&JzhH}=FllaO$QtW3sE~V&Jqg(O2YYMDz=0W!Ez4Co zNa%`@!$uLhD!SFy8Fro$WG2GTL@c=AAt?z(y2ED_0$I|Y;xrx};1c)Z~(^9K%T}Lc-ZXCywmJRjgFHW+!aYwd#*+Acf z9=O4{=+8b~)@wB1C=KZ7EOw9tPTx|(Ycq0;UsM7U3OzP^ZPUN*>zU!_D;)AOjU3a4 zd~@pbPd|EP3~nV3dL-JH^~J3LU;1-#7>Sg;}UxIWv~9BmY%T)f+=xAF(5fi^J>UxFNvD>6?jH7@Eu1~OD%Aff_&V@~+_tyGe*(UfHxlxc zZ0{}cp3j7~nFqdqo^+e*`>{#S#0Fx5Nipa#3f&cSd;e3Q^iSh9=h2QXW9*r3ZH!3G zS#ZUi>%hK#rmue%sEx}|8t?$dl_9XG-ez2H1V4QR3JcD!+$Uv|*K17JhV+TGS{ZB# zVZ$TP&)vrstd8yUU^!Oy-S>*ybtlm_?vN~ z<)FsQ=fnJr`$+W91a}FwAK~1`Qv1&Kj;*W5`xx5xCC16|y3?E44EvzgzsC_{z0O!l zJ?*0|v-j;LTFg$`BWMHr-9EbYrz-8oqIS8cJpyf8wqs3fK*>*clk0V~^t?`A+N2Xo zKW3-b>`Bg#bUf1Sh1X1G-RT!8-Ws^wjn*--4xin0H|G-D5`&%CN3{wd2YrHxtAM?~ zwzq9fAgQM7vAfMZ2l6tM-xGcIsji$%(uZkYXq6smNt=hl*ic zl*o++M-;m|29X=i9qLJnKFH$2{!*cjv-UB0l7&aGT*ZznLPfj5uq%e0$QASgM;u@H zw1UGospC9^?d?o3F&w-O)Uop1w(JeOKeYE!*+^v z?HaV*<2uE4@Cz2#=`_sgOBPo?u%>U?LEN<|H9IUWeHt-VoDU){zDnKC6PGx#{Ug}4 z=MsgszHHNTW9b_9^K)H&m#30KQ#^TJ=+B~`kEVCofagv0GMo5(SNb`7>G`mJ!S+!X zdSfA6A`3o$#o}_g&%M%z)c=`}XL9|To{mAZ?Uma|h@KEv1Mq_Ljd0T)vYXgn=+Ek( zZ`Z{x^l3=Ps-338Lee?TwjqT#zjGj4Z%o0L4*z7_OBmV$3kA{V8Bf;-spb4 z9sK4##~yoOn&6Yb_Px;FH>U&HU;XDZ-;C+aF1*k_pc-Su_Eb@?3&AoCEq#u)eKE2V z99%$v*8B+3!9`tAQZWqcfq2(syb?iN*yfEv#2$E)O?j~geVuK7v13GiXmjsu!Qu+> zNA^v`MMlUoaH%_UZwRqrV)S98LcF<LINRKAs+~+uVl7uS{Q2v^agA_9BHh zbjG9*Oqrq=*T>*?^7I;$xc(6A@SttvdE`4M->z^Yu?;WzKBBnHj}@Dg!L%H+Umt35 z*|B^YA}|eCQ}kqvTNmhH z^_Rm~$|l1j=e=-a_>saKc-^g=+-#ygSJJ?B3wn^-?n%ZB_aTLRN8$;v^lxQ&8-qu| z&flRMz1Xvxx(b8M?7*g8G?V?lsY5$|tdA$eJV+ZE&i?zG+Ls6#F9VF%S)Z5Fg+Mb~ z{c?C)zA*U+c43D22)1w;BXF|!Uk;7JG6QQw@1$@izBXU7Fa!A@p84U=v!7ocH!yAH z-DDo0fKK`1yBYdMINwP*cT;Cd;&In^YGsH)+?dE(E@wjy@f_^x5XM#%3`CX=7Q7vk z^rhY~cKPh)zjgW~lg@Yr4*+9aa6r-tc9xLRa<;}XnjT=M9kYbko^0SNqv$&3cqLSL z*u+X->3V-NsE!n8ZX)~b6&rn=&1Mq>Vq%}NNzvyp#0DJ8`e3Ae-6SdPI4LW@x9Z8P zh1S-!(b9MuflHX9a8O*fPb))%H*tA{at(1%Y9EEMx!%W2^YQ4V8dR*?PQtoW&t5yMBeemjALX3$`bC$+mPIqk%w751< z;(7z;f!>pxY`Cm*EkQxBJ(l1-qy3dPS+}Byfmg7;l+x>mC?o?da|qcl&I@iVac-{q z8WIpz6K=dbcvvHQcqxtze?6R@X1j{I(qGu=q7G4{!PmeKOb?jz)C~2M+@FB!(X8#3 zl^rb?eGR9AF>2gt%9vajlO2nUcghz@DKPYAIy=0@DqK%zy4S`Bh4&zZ3E0qYLVXD8 ztsk4%g4f!$x`)&EAmlz5P3(==me__NHMd~HU4`9Dce#bIE3-Ywn1*}LeA5t2_PenE z*X!DrUg$1$*9=>7J>3;{UFWLD-OR^(;9FlqjTi3f>(6`>hQR9(>H+vWv%`c% zDd_@ye2dHuM_ix7HW77QgBK}h|Dlv#Wt+E}W8u{VuY8ZF`72%Yb~ut0p8HG3w=Z#k z-)`;B2iWTM@PxbRu0&7b@VToKb8h+6*Ko`D&zxtm$6k-XFAcL_XWeEaxi=6$PovdK zeDcGME$s{D!@h=(&>l~NBF8t+eAaneoTmjNdX7D@EiUPAM8hZPcbzmz3nBl7uX0BR z;f}7r;tcg`U;=`pC$Z%m9? ziU@f|&HH=}WB+9|AFz{eL8l{q<%v#e|J`#dUx3llI4+@?O;|lD>>NOwFBc}7%BRkTgFX7fq z;QRGDdB4WS@i69L5n>4TV5K{T#Po!V;%VgMSHeFBFcP}cEZ|LBOfnk%r6Wo9@aEnP zu~NN$9+gt@MRM}Il{yx)_uq^UP~x1|MT|4L8~f$Wwe&Wdy|Z7U1);?7;bLd0$B?6t z_=a^BsaC+QQ_l}6)CwQ5FL#cnS6IxhPWQ(h7UH<5izvOM3okv)rtF$P*Rl_Hh0;~* z^sZ?_Tr%tXR#L#GWKxLd$clPhB$j{M(lKnwTMIg;hGX8>Wu;>7djXq^*G+8Zy>tg( zj!9UI&0>nYSzKWOZ$}6{46MuBL!*5$pAC3I5Vu|Bv_tkvkceK%?A5nd3s>8+k9LIw z|I(He;(o7aXvLo=B1OJ;da#Cev@uCEWJyV#7~gOc`jm6jpDGx%0!hJWqa z+m624hqDvApQGE@6Q$|&8MdXgAAa^bU21AO6%K53Qc{~nSa<(5E^YVSl^>T>>n5K$ z##+DAuX`s1cMBWow_d0QJ?x`?=t2r>5R~50%VAnZ`Vd+@fS#}Jk1cutt+)4Y{)Mf0 zXHn8$I4e!MwpX&TEKt2EW2v>0PsgRWy+_VfsD zKu35I7f)e+NAR&d!OrgqvYmnN2^f+3zW*8by*r(rYzQKE@BS_9zKL3|X@tk_yKfSQ z-eQh^qPE{@zSoq5pcvDcnj7HpJuLDDUYrTYdpi_SY369Y@9<(uzhLty*eB&|tXgEk ztBV*M<>W|gG{(}eWiUBW;$RLS)En4jn=t7WIE;9OvKY^STvp$VgT?WsY{UZwk3*@O zP>qe@^?K8Y!H642?%&qk4MCQ>7>|Qb#OrX+PVGsdzcQb_CK^$mxc42w<7{WJXB)y; z<9j7Et$a&aCiOn+=RnE|ndKKF^V=8Ym1T8Vv#qS_zTl_|Y@>Hqezf}r_P@L0QX!?i zTT9zr4x6&i;*|sAc~}dV866gbm2$9dllir z5fl5OVqX+a0{#q#)8HgO4b*40JA%Eoe=YrqISxdy)B~CH2(D%c_1D<#119b*qEb9i zP;^i;TUfcyCkvYlFEGAlcPo2`KiN@SYz6u?M#twUm-%AT`&e8tZQ1ZDlR)~h1y$qy zD`7=ik(6pIOOofyzO5RMr<`sFi|8@-zk^33cfe<7*xX%tcsC!qXtyz-B~^$18|9UY z(dSv&x&H=7=fhr`s#bW@z&H8^#sWW>KrL+k2jL;lCZUQK57$r>ilnqH3EglniEaBJ zlv>$=4_@``4o@Gl#}6g@#2gubyQV<@JA3g^QtxZQZvO#Gy+Ba~Y9m0-^>W88huTToaM*Akq?`=|C`-+s864rfn&v=o{9 z`J+eae^|G}CQ8}khZo?f=g8r5&jh}$vE|hxD12APCBK#^zUouwp#XnfykNtjRrEn*m%{dxPd$Sjg4x;6YZh8PnuCHLGtO}g+ac$J9d9bD>8U~@hmj?Mhw$Ajo>(fBLY_E=Z?8GGc| zAo`HVyu)@MOQ)UK@5fB^71sKb#qUk2=-GrhJnxob_W@zS%|7nd4Lk`VKpIsvk{aH&2;p0Si9O|J(EQJN{py!pTHI zpMz2eFG|=Sr^AEszJza+dO}>C@d}V{hsb*L8B=SE#lQjc2?JWR+E{IMtFTK6~cCNVBCjV|^BY%mB%*O_@(du&Gl^d@LdFDpo znm?@UU@!e*5^DOecYhf|OW4g{vLiQJ`5Q0?&oh4$Oz>dJcMvk2I5x0_zeZs5jcJHu zWxwj_IQCeBNvGdpWk38H)%ph<|BB^I(egAbJJRm3ijUm#pxc8gN+!+F$NVy@Xsm*Z$6d;juE z+NQko75oEA$MBeG(FJcv(}iu|4;j_$iK~y&y=?o{j=?*i+YcAnx=^?Xfs5eM*V*~2 zbLn&JvER?pp{(;YQ@|;lOy}{K!aLw28^R`DTT0{E>1&e_R?j~=QcpJJk5GDxE&rnj z4P<-&Fd;i%{t+5HW$NwZUMP14#pzBf8`urz`r~07T4{|D{3T(dIr&68N4{X`qo<_j z4qi=F`HB@bwcAHs)P*E9p%OTW5cot@3FP3rY;R*f+L`^3J&WscA2;J_b@72ZG@44Py94#8eiWmu{X0f~)aqJy)WZ?MTz~g#ZNOo?29gDDB?4I5 z9aEpyV2bfJ#h)WD9y�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 delta 23881 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 ABLDyZ