From b5b297165eddb2471ce10d919024826183dd7cff Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 30 Sep 2026 14:50:22 +0000 Subject: [PATCH 1/8] build: upgrade Gradle to 9.8.0 and Kotlin to 2.4.20 Kotlin 2.4 no longer supports language/API version 1.8, so the SDK now compiles with language and API version 2.0 (still targeting JVM 1.8). Replaces the blanket -nowarn with -Xsuppress-warning=DEPRECATION. Co-authored-by: Chris Bell --- buildSrc/build.gradle.kts | 3 +- .../src/main/kotlin/knock.kotlin.gradle.kts | 9 +- gradle/wrapper/gradle-wrapper.jar | Bin 43583 -> 47623 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 15 ++- gradlew.bat | 86 +++++++++++------- 6 files changed, 66 insertions(+), 51 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 778c89de..48e20c36 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,6 +1,5 @@ plugins { `kotlin-dsl` - kotlin("jvm") version "1.9.20" id("com.vanniktech.maven.publish") version "0.28.0" } @@ -11,6 +10,6 @@ repositories { dependencies { implementation("com.diffplug.spotless:spotless-plugin-gradle:7.0.2") - implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:1.9.20") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.20") implementation("com.vanniktech:gradle-maven-publish-plugin:0.28.0") } diff --git a/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts b/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts index 3f079128..982cd972 100644 --- a/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts +++ b/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts @@ -17,13 +17,12 @@ kotlin { "-Xjvm-default=all", "-Xjdk-release=1.8", // Suppress deprecation warnings because we may still reference and test deprecated members. - // TODO: Replace with `-Xsuppress-warning=DEPRECATION` once we use Kotlin compiler 2.1.0+. - "-nowarn", + "-Xsuppress-warning=DEPRECATION", ) jvmTarget.set(JvmTarget.JVM_1_8) - languageVersion.set(KotlinVersion.KOTLIN_1_8) - apiVersion.set(KotlinVersion.KOTLIN_1_8) - coreLibrariesVersion = "1.8.0" + languageVersion.set(KotlinVersion.KOTLIN_2_0) + apiVersion.set(KotlinVersion.KOTLIN_2_0) + coreLibrariesVersion = "2.0.0" } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index a4b76b9530d66f5e68d973ea569d8e19de379189..5097068a8d375f5bf0d15693fb5b3615c972a801 100644 GIT binary patch delta 39621 zcmXuKRX`jI)3ux6GPn)y?(PuW-QC^YnP7vvYjB6)4#C~s3GNbt6X3Al?>{$lHCNrW zs#ZO<`qv^v_#H%@9WuxxP6VN!1y$lPXp3;bjX6*q zG=23Rh=gW6CbsAJExP2OZiZReHjK;ImrCCYPc73~bqjSlS%ZhNIV?7j)Ia>$>|yus z)rO-f?V7F+C!EK64>??k^LSK4sG32vZMK@|7>2SOEF4r8Tyf=>FJGXNMNkQomym@) ziVAWA-%xWM>~zfpX}tfmQ8z0TS(B=x6`xd;VRt!kCA(ig+sQW^Mdx5pB1+N;)qRd%xGYG=~l9bX&=R50Q^~AGHnhwxOA0jWs zqOp7Val87a&y@-lR)Zh7|9eu!-IFL7U%!0O`g~HVAU!1v5zKdR8k0l1+=RqUaGRlZ zK?zAdRt)nXqRdw_c&Pmecdrh@Rk_AaiP*%!AG^#qI^^gatU|B+|1f$YtZ)+14K1g6 z|K?uv|DF2x@9#bTcU}gzu8j>p&A_6iwjOcNl4$WEj6-U`<*m;kr7CX2~zkc*h z9QW1VfglwpxPTF-wVoE`<1}Uj-35mAE}az85%+FGc1zpP`*G^G`!ov`6D@C{des5} zPGL^|pWT-bX3`p4X=Tw;^XLGxTB|hqc>FY)(=-Og_LeEaA~M4IWq_3`s@2KHQD>LA z%LqfwQcD;SjWi35W9SX;3q4vsmUPu!=xb~x9O$Hn?r}1WF~|7LBe|F@RV|G&`c+6| z9(?1WBq;z`;}Yk*DK=QYNri>5!>r=H^2D~<>nBDbqX8(j0DzZ`c+VflZlCG zF7szo9RWraD6T1ilO*H52O&07aRR1Cf+h$2xvwch(a;y=i;QloCc~1<1!~N>ZSqL& zgYvkTVEgwu6Ttl zqDRcVd%K#R4}E?4W#WAPMeG&$9!me(_9FbtGr|Qten1)pxMpP&nF9=Xd8IfpzqMxR z8I4XJ`7wf$kx!BJ1o=;8cmr0qKxSW&&Fyiz{W!1P?fCeolkgV-@wnan-QDP0zkvfy zHR%m)&gu>o7KR-=UM3VmBW%GP>;tWSECJM}_KA?fW_nPy?SLCVqR_sZopno>sjq{GTU+T3s~lyIkc}lhxDZX z@@p0+_z!3#&b^-+AeT9JbHOFXk-Vk&O-eKzTmeOe8gB-m1>3|EX9O>n*LeZJYw{NH z*ME~HEQ-{TQpxe{)(FA0M(-gTxWV}7KAOAFQFm~#XQER69BgN)_Oc%}0yxzsX(E6H zt_Jm@66C0h)VriOUj0(LyTejuCA+`w+DISqc_0&$6l0_n+@w8&@}~~lCPC7H?^i$5 zI|%t4Z477wm0g0J8H2Jj;`d>&ftKJe9Kc2D&6XLC-n4e=>I6KJAPI)kwpe~ZJ(8~+ zpdv0}s>KT7J}JBQTUM5A5zf?TArU#fWJ{b(7Wc_UP$(0Y$rF zeC^EPFd?C}`>%;7)b2eTmd^FRykcD?Y!m`U^clTkPXA?Z!q*bq2Wi32LLR{_lgb>~ zhVl*9{L|VD2)LuJSL`%1AL%^hPeBt0LH<`}wl3l*G7w+BWG4ra6DIGFP$pCVpa3;% zI4CVBV+Jyj5PFmYc8siYky}zL;K=?W-E4iO>oFf5-1P9$E3r#&!HAvv?0H_G?|5N@ zlxN%+pcLPAMQHFMv!zX^-<8{Rz*YMU@8iZ}{Esg=y$axTX2VT9zf#P0F6PN3wpwco z$|7scnp*tLB}TOx9ZC^TJzy|@Fo>#ZQ>D3b_9$0!N@aLr(^*`yLTeH4XH^HzzID4k z10g;7GSTayks}ZWmk4pApxhjYkB5s#q>?Aq3q0VhGO^oBa)bk`Ow^jwb1~zRRpI)2 zj#n5QM3w)HtktwzeIwAhPo#PP4tv>Z{ov*rNqb8GxIvb2ADPOu%jg0!ShEKfYE zI+A(D^A86458wiHxjh~k1`dOqpKL>&m>35RVXh_7M3hjtNbtg9V%aF{O;4KTO|3h> zI)PsypQZk>&fslUn;+}zanrYZP8idaXp*HJet#%_FVd=u3I&SY?mTVYKQw7b3b(Kh z4x}a4g_txR{ydZyLJDTN1HlI2*E*X2bS~qYI&Y`(H1R_5G({0J+Gq+50OVrrvJvPg zy0<(@TQikZOkoav9kjR@>GSY`@kwxw&~_Q9!@kP+TiR?4;~5^b6~D(4=RKJOC=<5Lh!Qyh+f^O_a8x0gxiW5&sp(_BUH5dr7s7(2X^YGK$^yJW$pdWWT0n`_=MO5;S zdl(8$s@^#!BeucGNLw^Md^~-1KU1^3>ESCyT=s%^_Qv2Oaa(HYhrZ8e#GvIA+8*BX zdGI88M*uXdm3$_5n{f63Vp6U&!ERM#|7u(B$>hD!sBp<@@8!nzVAl=c{J!D{UQpr= z5S`z6dcH9iwvXTNfx4J$XpZmW1bW}7*Ywj}kbJo*2SAsY4MVgoo4u*G*p@yP% zf7PeofdPx;lpTGmX+l3O=6@lxeE#}@CE?xYQ6fqaPEk%2tkUY9Yr;nux;sxdWR!?o zW-+|Gig*m}YD%+Cm?yo7Hg<|01s^Q23;ab2S>CX$RC{bdzp+deiV-;QWQFA!cUQBi zz=#Slm_+3$X4L5{JrRwMrpGv}9!_ZK>CT647%Tq%hEv63W-qZb&oJHlCr?2tAeYE2 z^1y@=xm)gx8ziA);8!lR6`&6x#e)nUJ1Cy;b-1 zFq!MO^SXH)uzfiF2m;-6exLY5JJ2l^w>cXqq<^|1y=?hs0TTZPabg?cyKI4 zSWR)1`9z=VH}f*am3sYbS|W-8m;s92U!P*6&^0f{wBhU>yP zD;`y+VDOvew(K8+tZCd@mKu4zVbujbC%IEyz4XkfN=d!~ zT>p66wN2d(hm3tmBaq_FU&|N5rCoFgK>Bp2Ph3DW(0n2H%8OxYl%7=pg{ft&MWGi$v43 zJ*EV1sQ~79qFf>uSd)Y{Xv*55432RdluoRNI*wAwXqe;RtC1I)KngdJYAnmD#mnT{ zxl9WKf6G*&hEG>Uu6(cXqjtqSQC{ma=&;?$w&3_2HVP3e47`nPGmG=+rhuUCF+qNd zCWIoMbzs^wsFcYBa!Bu3av0YoY?E=HO`mA6WL5gwmQTS(^~z;umNd_mtMww?1$sTK zSgQjf5tcVM+FyUC>l?4R{cswIOm`~j%MQOB>8cOUP(W<0DUVZ&6#s2j-ceepBKSd3 zYrv~@lcUCuwvT!y)CYwvZ5I~QU{LR<{kvs4N(wZu*@oFV5{SHh~3al#0|Ic zPSS$7JkfdNnMr4(k(|WUUIQ#G;yI(yQa6+2+w;LF$t?F+a`k;S2`B3(v3XD=t$f{CVDA`8=RLyuZ_AQ%76bo~9-i5qcJEZ?7@P1t zYhaI~RW0p^`}n2(4o^}N6AMe+U*uA$pR~i-cPh*(TT#VEb(qsioVI9%G%bRnNJ^1| zwvZE{sv$s~Lj``Z;;h{F)nC{tm%RJPX&EaFr0KK*X z>~kJl3zBZDLY8t4tVnHt+pybuWO2Vc@Q^CPW+$($iE)emk=pgBl4_0Isy;$-ubEOg zC}`3utRy7x9Txg9{BuoOp%f4uQzYgm`)eTp?i=#Plo~S%p|V`b+krF}2%-+#Qp1b` z#aJA`lngyIByt2pcNy<);MCxcQhu1dcB{xDVT zpf&8P5+N9{I|!wYVcc)?`i)QFGrh+Zxvr(_E5~s7hl`Up+G>h5>ZG%9=U2qz=z6y7 zjP{Sa>K&YOcVeiH6Y}_7eYDMOf6oX#klzyNA6hTuB^%o&sj2pBIF*I;lZ8gGq&w~c z4MnZ#qYO^{Yq8yGz9};(fS?17Y?PD=QY6y)x4l?L!T9Oy&M>i7N7@T%WJ%;jBf&7cs1u^{Yg$v3%!}Oq*d29kq?GC;3r%-Z zEFl+Ojkm}fzI3DR2}S2>GT17a;4dy)@r*(%hFNB{8y5OnvlGw~o4$ZsS^{~=(u5ZV zvXf~7k!(yH5IoWlJUU~93!DuA^s=gFt!T`hVkQ@q45tnf2%&&)D7eha63JpH2piP6 zBGp(@CZXlI7b@W{V7v?p3D%_hm`gYY13I%Zuh zq^CM}r@qOq4ARTYg90T+ET2Kx2jL4U4~nzx=K3BlLtK@PREB&VxA>t6dh4dHJE72} z+w=I)SGoUAbQKv8If9$2W|ktU#O^N_@S}I1OiEGlwfMnB>*@cZAiRT7=;Y(O#dt{7A9 zsxAi=Lew;?Qnb}dsvbSE_dYocO3DH6qD#;8&>!5gTf%d_nkKkFJG*XKQ|naWaNAbP;TDEKgpo?xG(aDSvtf7c0~mAk54nR$HG|KWGFa!oA! zm7!qx#>VMd<8O$gvzydtTu))PL3e3(?Lwv5jG6Mr zRWJLH+XOb?(ctIGiBFeVG}uNjmUG3W?V^c+*3fkZXL}QI;*oJ}<0PElfA4<%D@tfE zJb1l+J%m)V7^v!a&|kO62h#LIy-66LJ0;egM<8MqpvfK1?;1;BNaf}%pH-(BwUs7M z?xQHhbwvg_!I5~ArR=M_sPVTQ>89ihgaj_y*u=`1lwi%u;@^<(AQffz8%(UgI?lK!uM_4z&co3 zE(QaX`pC)E?DFldTd74mfqYC=)QA`k$x$x9;c%_n!k$@<9Qb0aAIT5d*Gw|Bi}dJuW0>buTV*#PX`4HcfO1m!SlJ!1b?nG)*!W0MGO_pcP8jkMhn_( z5+w2n1u@`p8Q%u|t)J0-^ywJ8k}^bypY zr4n4z`QaV3tU<4eL#~U@5Zr`lS`$N|Llf`=`x!Ktw=d>-b!;9sM&%h)@W`R=5vfoW ze=`46;NB+_$B?$^R7xv!vB~$b=p_xAtGI4q%1m)2(Nj+BwdAqd*H4#_AB^g*Au_%N zO(2eyP8byAXOeEuK1E5;i)B9$_vc&IqN(rt5>7#gRe?I~c*rqY^PSrM&PIbB+T;K~ z$zyk8x1@H$P{sAWFrFCSNObwZ8Hmuph5wf7UASX$*ZD`oOrvzVd^R+TGj{O@GLNI( zK;E%qzAhSZ?hznsz7|O}Y!_etMX=2z6l>TqAQC*J zh%;(eV-gpPIdBr2*cI?wGy}yHd9mOK%Xb!#n@6Wte=B1ai3f0lS zosl#MEBSEQ)RVt~nk56_9_QdRqB!RhclAW;`>XG@|3vHq`i4}6bFOx<19sZ^1CbCn zP1V|=Wb1Xn`&&L9k5~?ox4Hc*R5vv+HkY);BY65cW0P;-Vp(a@AwKbpAlm4I^Q}t;Eh?(EC}{^w9r9L8nyGp#P!U=H?oWjTetQbOH7H z;h&;560^bHG#b_3H!U($r|VNx_FNLEi0>3i!JqD5ST;vp+-Z-<(sO&-@2}^!u;I>^ z->Az#0R<|p8rX^5E4WmvX2zA)7DjFaGtzdnMBC8B@KC#yQH==YimCsm7`2hpbF5&_lEms>w5pA6DVK9x6t}2eo8I#^iw4ks>nplTxdML{8_m=BpaB4IYljMitP>Ku>A7O9;!G2El)^#7 zgpn77@>(WTIc+n1gFhNq4rL3GEsm&CAikc8LVm;&%iyYz>z?@}2 zVPqIdL@f9B8g2O5oWBQBsrEaHuxRXQ*484=OqVGloEWEN1tBk4{OC5&jd#r#lMoYu zvMynj9^(vRt%k<$nM?ppTI^C5@^uIX(Uv|0^|E#txrMHr-Noc09>{j3|6T^Pu|BRB z^d}$Yh4_D9P86i)g#HPMVNhw9RP(WF($8APOBk%1;B8`2xc*eMNXjGiWUN_ycX&)& zD`6g{dIx}ler7ds%ncI%j#r&wLS;6l@_U%{V){Gfb@Up~yz>d=LU!NA#-f+?G>(T8 zojcCbZ0{C3Y};C_bOl%pq#CzsN%RrqoQ;&7djqC`aG?EB;`N@6rTsMKv&xkf`zssE z)qTUCWnS0kDfD^^FWa*Xa6H)aWwlUEc-gVA*=L;`K(W$G)O3~t7&yX@DO0+wLRB!COkDjvx25%I=v&de;e*&XYHAZ` zH~%U5xQFQBR)4zKUcvZbrTH1T+#sr{R;+3hL6E(RR3Cbp*w4w{6GIK~ATm-ODbA-t ztVBnc~@?HEwI!e2I6o6tBQny*{0I>wk(Z6?GtJ>4n38BQTyo@H!*(-EhDuv3K z=2GcNO)`G#WHW_5auJ)*cQf-l+W1;gp=^ z(f;2{!Y{}L3OA(duS1kAzM;q_sBw$FGpI@W8@InbhyYS94c=iTCPI!}*I# zko$XK38VR?3dXQtKXeBzgwB$I1p1$hn1(JGMQa3|j{O)6y$m6;@hI(#?FbigW#Nvh z-vvVcMJki=S|n_&_ZWndO{V96p)3sl*C!&&J!X-DJ(dsZSbASNp^_~B?fn`jqEiLx z>V)rt&%CUljDh~Zbe%L7sfyFwQOZ?#nRnm)NW!XlSDsECF>aB-FsaLd$Q3!sZ{Lj* zx7{abrZ#Zvop($$D6$R_kekcZ(gw~2_3^Fw!?4Thg|Zc^X$K!pY8g|S)x1lmG-f=| zER;niS|I<=f=2_+CcEA07 zTygq>!a8!};BSBR#?fsm{jSfxX|EZ?Blrh2O#1?`=9?DW4uZS-7^+k zKQWGI;oxsRNXR&3S%h;>XpXY3STDxrux%o1B$t^oA~{h`fK7w_Lj8uXNefy)pGryh)NG z*f+1?g<)4_5^luO3sf&U=*AGKq-rpqT;204fVZJR#6kP|J7Jx(+lmh{sF6yM-_XS4GDTmY{ z>NoUbddZq=D8BfO0)ihC>$tIoKSJ7o%j6*3>RtF;>Q+d#Kq5|<5yy6hV5KAWG#U)9U3+=OZlS3v~ zCeHO$H3m?F^^zr#Lqr17s_y=X++Bl=NkL}O6zUyBL14FTdPt6)%O1kgzx=Xbj=R?L z-D5 z=xJeSVZO(~D@N4I-pp%PlP*y~iK;h|c}JtsV?ki0NY9e(P>pe-G-> zAb#DGTRD@!w>Ox0XlD*MV?MdIJ{7_U*0*4!I=*C2p4<9F9Vy zfBFl5%*{g*7&iJ%oKe!3tWu}KmJj5`u^_EJ8BEei>E7oc!aT95SZ+};z1kc_h)d(T zg)Nw9ORKWG6iUU5j1&FbpD18b^M3Sfs<1NVETzp=pH%Sc(c5X~&u9QKFa*?Jty9@n zei}?_uUle1wg+uMp{$Ij#sUx@LJM0{ ze5?|3yoGD#;)$}O04Fc6JLLc>o=YF6)IxF^O=SB4j~9UnZixFHNo%Cqk*(3Jecp;h zP>_Mus)?q-`SUaU$b1aCiPnw&o~KWW7A540hucFXt64_lu=YM+U|H=G|5*VA>TB)3 zUi2yoV>Yoi)$A+JUX3s{L4#0xA2gecQ9`aUOSVZ?|L`p|DfZF9v0l)^={1UzE&&4j zcNM2Rw+v8z6S_auqr5`im}M6W^vN zzX`++nmbJla42ibszItXWB@B`MXXvLglX3CzGYkR8T1C!D&Bz?o@aX(JI|G) z+-%Ym|lf=s92XMedNi4+}p@J*K1(oMdG z&;~=4&8BTh7Brgau@GfQU!K5*w-mxpW$<0FKD7YAycRhqzJvnViW_{sLr-#y5Fp29 zIt`x>j&pE!4)3!|FmYf^cSSZv{)_&|JJoI*Yy5`4`J&LQtKfn1cxdeXjcMU7)^t^o zTs^nIM}Srsg2T%qm91IUP`eh|fujTS#nl%rDH*Ve3rgBgWpHqHU0@#2yV@3`&w9H1 zm*jcf;YR|TVIp}#?`%lNspEe~e0Ya?J|5VZScP2OGu;Sb^yoSdxC87OA3&SVpgMj3 zCBp5CXY3gq*OG8~eWg_7V^ zXVWY6AjJ4g!HP+&`$v=xcw`l)Y{>vD?93o$LhXC@WO{bGCoCweYN~gWkawK_FB*Fo zd+xYYPJ#!<-IJ*hLl3iwrVXB(B2f0L7F?$?ji9_rmdXRL>|i@cBj z_0Ia2e(jrW?&IXZ_;!!2i0;(Kz8XBNv zhoxBzEU{g4?)G7e=!N)+hEy7+zk5*{RoaP}N!2<6L=|ZmSnXNL5^>2Tsv^7^Bt~u> zghrJ%c(}`LHY%EI@=EfGIhip64xAc|6xcy)q#WV$-Iq!z@iZQ(g8yAb| za&>b9nJT{Y-)5_C-wczJv#QgRxe-Aq-g9Z62gP(1tn!-ZbKVX0d$xhRrhV;34Mrb@ zmNa(Pdx8Pur337h%WTF+$5w*YuYIFubQ^5G!9 z-jn=QKJrNRN*{`qQP&Oo+5wcEzg#Cxve&hQx0^$B4qkIO)tT_oN3HIjLDjFp<@&Ld ziVv=2&$-G8T?>{7QExg1C=~JZw=n72v6hY|0vK0Gb zKkXbz%o-hufBYf3d!*?6UPzLShku$MM8i0ti~n*ME^!rS7WuNmM<>6fUmD;_R*mne zy-NvEApi7-x#3{X=pzR(9=tx=yjtMFAcrN@!d;vYMOWY^=<3%6+mGii; zG3NPEYi4xeM_~Ose-5?!Nk!fmJaJ=~blL+(-ccbZkHU>U+Y2PdQ-W^i#83A5gj{C*>GI+{f7P^? zLsk6{@kD7;nDmp*i&V9%Kz&cr&iH^1n2UuO_el(-^%O2{`CHqTc{UqZ$a0j@hEW}f zdRUN@^AGF9@g1{SlY@IR@q?GaH_3!UQU6zO2W&LHVgr}Lt28m`SdKPI*T?_p=SEAp z$vM<#W=ID<`46uqNZCLR;=iy^R+Z(m#!tZuv6OPX6cTI^sBQ`%bWr^M#RVVVYu{uo zYT~TY8EI&6;5T79ys&NG_8h7}J(~h|LR+6^mVm6e9efVi~<^wzvS$MQ%*2*8Tg@ zo4l;pWcxhT5^A?%tJ}JVAp!|hNjQ&M%nsZbJhCZPTTo%%0aJ2+caf~yH6OAVo)0A2 zACrdlNy)f;z7n@HSv=?~XMsb8=0xhznTp9as#W~zdj_oeZq+Cuq)^3~*j-U^vTlkx zdt&ncvXd_~D9HlC$jSXhIbKGf);biu}k`1)qe7tCDu`Yj6tI)gutgB<8ufk{F-H zWddg`L+`4>wRI!~*eP2g>f#k--~G<}p*qzd&B7$`Ls@2aXJe(ajM-BG+AQKAC(9}# zxs(#v0)Un+R`!7?fSU} zMI!5w&nbstZsjYyv$lW3Zh{d1nXs3$R2$Hl+@AHb&)c#4#Fo#V78GQj7Mn|84FdW6 zcU|LQAsy9q^6 z_>zTg$dv|>PcWKTi8#pG_M}5~B6gNs{smNt1u(MIEUL`xC+jSfae=NZX7k+D>*9%Y zu!HQ)*DKaURzu}6-*{%@-hjs1*fSi-yqF@y$Z8n!dr8&3!S4OenL4~Be<2K0uB46& zg-W#&KHbMh_+TnY6o&R%+&+&?fjv4)btH4OesVhY&;&7+Qec@m(#J@wz~ltP$H%jg*iPT&|qP5qqotWedAIpE#rw zx)?YFQrNb0RcCPR6Z&KpbWvHlavBkq4?x0M|9)R zYwBpaFeN+;1VLW6?h5*UiwH{gpbAYdefwu!!PsP&WJ|njCKHmKavy4glM8P&R5p0X z!DzpZGYDm7pU`RLBf@l;s=8l z#M`4wR6*S4&DQXMIic0DgXc`9`vGk8Uyp+_=WnHJPwW-lq{8^W!qZzz>+T)*R|Z$u z+cJKLkb-tNE3wK*&sfgeIAU4HyYc8G(TlP$Y`aVt6RfP2{ZP}65&5KMTdtfa)CYA! zDt9XLL$2H*knE9vVG(FqS0DdkeQgFXDlp#QJaCpzH}t4Beq|8vO}}f+ys#m&Hff!` zwHv~9?UI;!fu_GnaHkt)owG-GZy<%Lo}>CTa8Kd)R2QezG*d3NV|vg1ZFPH@<#8GG zzn(dzJZSo#J?DZ;MiaIJsVFF6il7Ee1p*lOnGl~`{;*N6)&V40@L8z9C-59meQrul zQ?vFnQXN)YpSjgv!|c?Bu<=AsD%Mj_`+Y*{THU_)FC{NW4> zIE(D@E@0`9TOd-)!nhh1eYh0=(y}^^CAbexv7Zi~#Vk&0R3JWp%xnl8pe5K8Em)VE zhZPB=7O2tOE)TB#^>GJ!bE?fWV5m0yHk2NNnWIr5x|6#aq73cCAYj`S`Ul4=3Y4uV z*W|NUjx?=ZITv)$dtQp=5AV8gy(=(zy%^Xt6YgiRwRzLsaPh__TjzKy=Ebz~U-hjz z{7GlmR|PK3(BuR`-Y4(?H6OIOf-%DGDvs16(cgW;D&&QK>ug3xXZwz5lRrWPH!)7i zJ1)$iOO!?7nIxXlp3VG2cO|x7-91g%zyg;crV; zUkh6%{s?KsKV$oQNv>%3?1gT*UU1bJ>k_{c-mejQu)IJsgYF2cAa-Woy@!mmWrUV_ z{YIgP5r6U4rHueXYL3>H|96moP>o^!@j2({|Br_*A)_Soi(rAoTrJEk9Nle9?A@5m z>`mOoY93k?%|I>mU}R!cp5;KR{?4TxojisV zBX7B9URb!a?C80ZzOe5W&n%=I4^vZCqjZ<^&L7Y)qV}>Svnm$Pu)FQ_wzcyZ@OZoO z>(@K7F?XPOTOjCiJ@QTK^SVX2FG;mXq}o`poM3x&n^n7-Wh3rp2~OVJp(&9H7WVlL$?A1F}kUG9HztNK{rZ<1U^3 z6!#`Az{vP!-BM?)j!XYOrn6pZ^~z%PpRh)1-4DLB@8|n&|EA7Qpxfxlgx6j2v6=Ts za&)V!2Bv4FFF&ib$ix9J-iv6!0;eXDz#XEOyC@WCUr9nrIYi`i%_Gb>V z5~H73tR89OX5p$yVO8~h#uQA=G3ggHwig_nbF>KvPH?HXxGB?DwJvDR;O|y`b1GZ; z!OI=DO(6niLesr$c(+bRWOC4Rx~J<*ctL~cVC#$aM%;|c*!$guT#c$5nCT~HJSVnM zH#Giv=nYkMy@c(bhqrw3$F353GUuBWL7|P&OqH@y>NfaRZ1X}i%2vw!FL4lC0fm8E zX%^_VcpKJTt}|S&q;^gO98VEZ_7AEP6=Y%0%TbRHeX^`SX z26F22^?WKs<|1p%f{Pyze>6gxwY69|XhHcb0#r)7 z##IE?h=BCE=g%nmjsG6$r?Q>vEYNExFW{O|>*z(J(H{hR3$VOH!Rn?6L_UR_tD;eH zxTjFi=1+M-kj4u<;|Nx3|b9Zt!OKPI4#f{Iru%4k%B|0U<` zkd&x0weJv~{)%sPsvprv{ziGwtPu_&;7}DkcO{P{L=$ zB)}LgwfRng39-T$4rS4pk4-CENffn+QI4MITkh-Q(iI)@C}tQ=gqrvQYIC+JA$oy) zDXQ!V)l`m*mdfL1CldU4dE2M{zOst(#P{RJR^O6U=gN?e{y1T^M-Xb>+LbaKO@CsUFnxcmgvp~juuE4TE5R6GBI>cMn*TDt|q zkV&eCioY#h@9II`FE_)ZI=RCG)6_xB0b{+h42Q9+`Cd2e+?0AEZ@+XOu~8JhGLw$X ziyC*nsaqp4*BK09dqQa{d3#tJ$4@(|`9JKgf-PZKc09TNE%-)c-Rq?tf*N^zO*TzpDmotDc!0mNiyVAqPx4DU) zXTgAPxst&y|4Z0epNO{yq;>k5Mgk(y?-LVA7bMc0%wuWoZzIN=Ft`GnP6Jm{g^1M& zGR+D$F14-rLXm8l_dDy)lg#v>NG&L(90Fb5FAD$MqXI*gZ})pKwFtFX7TG9%B*GerT zF$y3yeD9zK1yGw>!L+7I_W+YdQ#JdD$LjkN-h6n9R>UDg)L%ZiJfTR=CKwL(;w{cV zkGK`a0~N7%=9O(iNHrK7PJkkcAyKS^VxyJ?#`@u4ui~_o0yAw}DcsxTXxo|yDVMhS zB0;!l5!%|?G%gTZ`nog`I8n>4W4b6W3PZhe=33giNX7Pq=C=V7H7ny=T-kp2@k0fu zrVR@^&Z>%MD&NtK8{5vnws4h(^CPpJAw)Myj7)b&ht*^ zF8DxJ#*DoA!zx2ybz{o#_ccZPkH-4~FkV{Z`7^2htP5a-lPuy%@#idaAIrMCfD8GR zm$@ohYkiPPS|pBlW2WM%*B`?K1iIv2d!ZjZ`Xe$o~a3*kuG!68cVOSuAVV6 z)?b)B{D_BzEM2qwI#&!;iSi}e#=34HD-XLwU&Ia9MlOh^4=mGCjFiXd{dl~hqdp>b z?SzY#nS@2(Y)oF>ApvqvyV0TDl+n#U-=gf>Sya2j&nB^@n`P z^xS2A;C?7CBujrlKP#|f$;~8a6cjHMf#wYl+Q>OB;PKqRv)N<6E6klLe*JG1QZL3L z{`UEq2lW5Nw;rX%{@+)nrO+)5dNtl6U7h)khz=s+Xg{^ZF_l$ASD%baH*7jPwrU#n z5`hZ;$c0|2CFK?epNb=eWd-$mn^MJzJ(-UEkNI}ih=qj%zBm$5LyeWxK|ey#PHf6$S%6H0Zf&uYelWOhU<~*+r&QnA z&LjB8V1Ax(t@G+!O(%M^8y(OE(B{d1Qe;TSmJJWzAEU9rc#PG^s7-3O7)!S|q%g@C z)=Btk+}di4-ZgcetuiqKm}DPM*VU((5l33(uR2vlU;@(diqhh_UQ4{t?4kuImKtU zVihmUPnh9BiGJIa^oR<(6^h`m6Nf;a91;~ff=yi1nRD5?z2qZWe1_ct>%PhOfPOSN$b5hHp_Y)5%l2jA{ zbQ>l6T)=txCiC|O3(dF>_P86Hv?b~OGKOQHVFry8p1#?Y+HTFpi{Shf!IJ)ODTd6( zk!r@$c%aUgjn`5^Xc=P~XI6Pkc@0QgMn6%>1k;G8D;Vto>4eB26|gm;17-{wV>z}h z$joh%|2e$>PH)dKiX&#<9wm00_e{r66JeVDVpZBKnidU}Kf*R08226`iBPL-6~L`_ zp*gsKU_OA%DP?bUf+f+w-9CTWDHzc_F6~eTo{} z?B~u=Y6@X$2|DU2s(QTLw9=nai8wXs-||k@9+~2f?K-j%{65Pp@J+j57@9Z`j})O) zx#TO^W;yFW{QsuVP2~nZ+^0lj|4$-P^2{J@#P9l68t;m1jgMCs9IqJyd@}2bEwoz~ z><-e&it8!%>-H^~_VX8x^D>aTR~K7bGDl1N>^@B#$|R$DVXDQqn4HjP8(EW%9n!(F z!4Xj!k=n!&2y|o-8X}PAURSwmxd9v`M=l>9IUgT0pzY&-e}{+#KXktQO!(|RG8R%&4&mH`*sJ(%IIVDi{s7Ia9F8GN$1`T0u}PYANd4{W zND)m}MbE|hzt7riMs@76|E|I!w4Sv6ehQjmsf8hQc}=^_JB|K05SYRuVxRzBcI9vH z7imkEc6jRXI{trLy=6=v-xuwTQ=quJySr;~EyW#*ySq$rcXxMpcPsYA-HSUE_uJq9 zd6JvlWRjD~oc-p!+OyW$pQD{nk1*N@n)NqX17RURoD}=GQ?ic@sP`){E~C`BZ~BcN zR}*sA2beEsewqGZ-8&KBuNH77c_GHhyxdw<`Nz!6R1SrEX9P@rk4kiJGA3KyFG>Jk zlU#G7!45!~aBv2j(xm?~wWVGc@}tFH4u%q6T(5WQ{ zv*yXARYzDES4^8S&9|;Ik|;vmaXRCFA8_u?CYHabL>^?4+;J-{n);D6SmTv#&%O7xm#9*zl4K!%_h0} z4P0Shr&hb8kfKnI*`Sv|%|BBxffnM4AfzuXZ^95mBDxNH&2Q_@^`Q_vVc$d-3PtUG z6;MbS7FVrt1&o8mY7*nU|LhxXxygS8l(7p>ZE7_|un}a1zUojC8`;p+`*1e1iXJsn zY*gyBVj>v3{52VH&LKaos`pe@!J@+KQ!Z*B-t3#X%5WB#Xi92DFx_PBPqv&|KSlGw zQ3T^w2sr!6mq?#!H0dcIt-qBOgYJVWao7y#My zpbVV}Y#0;S*)QGvDc}xU-b3v8>)|;}7X^JoW&fBdXyBV?!SC|W>hU`lbpf?~uwHT= zgEFku^QjfViSd^3le+)z!(~*!yGw-`z+Tj?PW(tr4{-g{gAT`E8axj+aW;+%@fy)2 zx>lq8=^65h6iI2%^W(RqQ%YhhKwf10r#oQDI+By+&?MHng@OI92W%^ly1ZkzA+ep) zFa=tWCjDZLtW&~Tqz=z`r`)Ngm7rp!atJZG=?5>?5bRApm>(*!nWQW+p(5WiiBJST z<~?iwn%}xna4e5o{;>(oGRWV*JLqq_O~?S{3cNTul@O6Q>L|q55d+jG0AaP?x4xoN zAjG)q>}!s?1Q5{NJs{!kXfot>zAHEkk%*0HtizzvJJO&!b#%UHuuR6L;j_4A4|Q!R zFo?&}sO{U(b=D3h6ug~92*wI|lqRM5%C_E^{?$2P9kD8ld~g!474jaH+lYK;p=CunBI_N0C9oaI?7u5&l7jxQ;j<7n1OW~spPc<$Zxw%P{F^I|(b`mOZCR@0TI-aqqU-UL2W z>W=g6Ah$~guW_1B?LEtM5JrGK0HQ6RvJsDs&BogNlbotXe0H|!Aph{;8e^+Se{S^Kb;EnZhHCw|;7l=$9T< z-*3+ZN>Qev?%KF+`p?bvHV+o8?iT|>XFGjkS?|C+qnC#M>v_j><$AShMJ|)rkx#MB z*WWPhg*}p7vorDxwD7B1o0uJhMwkLWCfhvgt))E0*xY5C!Y?Ocs{PUg8xslWPRH{S z*$ys=*Dsh2%VekN8J%J?KGe1TG zWL*Km>lQn6+GRS6;$u7hV>_SAyA?HPi|fyst?npUEHB(K#S=v7*p1ruw+7J9WIH<} zx{$ls_i>00+n)2{kcqHvb)o6yr#jl#CN!H~GprQwk;<=ZULjRJZ23c8?BrT1NFI82 z(5Ojm>j&eaUV*Q_Sq@O>ksuRJGgPwZPCfy{@A~ASkSjDkM?pw7>&wgQ%jme1*0K(n ztSTWJIgwQG<1EDHN!jrP=Pj#`yzvbePepg`^zJ3swsA3&m+E9%wtuU>CaQ0l9WH`u zeiSq(S5tt#AWL}Z-bz*Y*0VP(zq8839xVEj4O_yzroYD|xJGiDW$%+;2J@%)+?N8$ zn2lSv^T;M^?2Ne0WZR(`%xozYZbT4?DTjrnLoK&T<1IMsX?cu-|j5H z2B^DvNNCx`*I<6U%pM|MhGVqw!*Sz>*t+KiRoGIHH7GFs5b}6wRWKlO1q+CkioP|x zORZzK${A(qH(iij;0b)G+a2im8T4+%Zj)4Z)R$g2 z#NvSTI=$O3LlD&(y|;Me@I+8mA`VxW>ZrG}owR?Bc1rD-6gnE8F0!lT)GfU=b|tzX zzYBxI2@_fBAAQ+t2ATPbxB!^w<0305D_rx$@8Z4og(|H}9$ygFg(%U@7TX%0Mq?<6 zfgY{{1pa+uPlDox0>bL62{$j>z^&&MRSLI`N=O1ekwn7MaB zw{{k`$$k+l`I2B7*e3Y~QGL+R_LOi$^4CMh8;+QEHx-HF-6>bx7wukYM?>z(L_nK8 zTxm8d@yVsjmtZ<(&jxOKbgxrq{h7Pw=s(Rb!|%ueuGbw)9S+#>>wV+xx(2^%G8jUj zeA9ZXk@VRuEaMG~1`?mFe9)LjGzc$oMh#N0?@M}_cQbc0&_3FO?4$P#n1%)<7u;bC zm}0N&V^gnxENrg?Os6eu0h@a3dYxlmU)N=yjNW4U3SxJ5f*6=&rc_qyH*^~r9A3V+ zHjn8V6Q1hRNp?JhBj?+-x4+z>D;Zgy;T4=;Hu7}6+&MK;0R45dEgo8V6bb_EW9LHb z_cEp|6mrRlEP_q<3=hF3o-zZJT6ziiInl~tni3I??W`2>5n!a2hfRxWeaqh(Qou~D z@Kbe|RM9)2oRqALazQ>6Yi{7y3t@A?R~^Rq)y*&$OjU&g7smtWL9VKeTQQ>8OUk>j zjw`{gs!v~t05>B-Ot&XBO{rkvu-Nvx7(K646vDSo>X`f2I!4$Ho2jB#lWhhdR1685M*&dUJo z1dTlDmxo?ONA+N4`=fF9QjM={{F%T4n|psB@(_3QBe;f^2!06;<1O6Z?}l6N;!G0J zp%hgXvBkqI74=2RhhHusN*CoQ8n-A18|Q<d4-yy*ezltxS+ zaS6;_vdM%fkUjX{j6kohTkde~uDSze_n&p2EZ=_lZJ{uZeIQNmz9#)xSVm2N^_-TV zOUQH!_4PGJv7{gScGL6MR-S{#4Y+u2A8ug2Df+{POFNeM8r$ixlV8XwEXSIT&QSRZeLTekAYqHeM#mWf7U5kPmWzh~S z%VKMeS+X-Nl*{}Jg9*ae88@XlD&oT>xU?sD+XvfA>xFI0adk-bj^PJ@k`W`+qAiYq zpE)~HQ<3}9sUIDa+iaN%gcJ}u-H}XAW-XMxNBICk{ zeQV^i`mGj|7sO^V!te6)xRlDqi>qX>OBvSw=Re$>{Zlly&%-Og4|+_v4o zvsI(fg#E~NjmD(0b6(@a~jfAO-Qu z-_kU5`7o)}17?)|gf~M-QUs4ay;qx8D%Eyx1F!8#7(5t!lJ?+?ZZU5(UKzEJ|PH*(QmuzgbOi4Z4}h9m7+fmPH& zr;DnD#m0R2e~mJnb6V+0q3IA&;Jd*}ZbtYY_?nm?rnw@;cb8_Wn#9!d`5z(eYr>h# zyN6#ql`A38hsjDDGL8PycGF(?!Na_hOP(j;>rlzk%=@NxVamrrGx+sSR>r1Ps|y?L zLM>NtAM^O%gS&4*8f*H4;4u9D7t}jxGeaNyC%UKqU!(m$;ayV`6`&9`cCoa#`+tmf z&X|7Lf3Us~^XQDV#OXSZ?=~F~SYr12cN76)f=XPCmTL-bs|pn)SU!x%LcfqH6&XNA zX`h+Tz~SrBEdp4L5yOsgr|;ypiNBYEE$z_{eBSsq&YqT)#hNKR4YXU46c#k*R2=qh z3ZOg27yV!(FPbC1XB_WNOVC6YM*M>%1(KJrUe7-W>hu9y5#m~ui z#zjX5&EZn4xZ+na zY{wN33$LIK3(qf%5HuUy{#h2$0bk?<1H}K-pz#=5*5iNi0`&jo?L;-XfhjF-AC-gW zPa&C%#2gqJT1*Itd<-vz%Ca!g1u+EGxdEE*kTh9TrM47f;R%13F!rl9vMXY8X(?$-9m&f^l7X>Y|jDqHRA$K_Zh%W2Q;BhRfPKhJ6B zQDSe1zVwtI1Fjkd-JZjk0H&U-Lo6PG+7n&CCgwe+DB~J-42_p&q-UYF^uc`_o^o=~ zcxJck0RFjJpf}o>MZv&wwK$rUuY^G?cg3COV8Dpw=B8f$d?yZ94_V}Pc9gh>Q7xVl zi<-XXtb_U>uDP1-0T}8&5+g2hh4mn6^7ry#Z#?fmvNQ!;myz_ofUi}TWA@FOWluBh zZWxJSO>lXw2S<2#;=540t9DTT8+^x#x|}B;xhko zctH(BYTFpgE>r_=oYqv)5vO>Gl46Kddq&;8jslai)LCg%g;4Ww2qhuOeR#Peu+>J{ z|0dlOvmJ(3n9$wx0r?U6NwUfGud)NQL1Od`%HSb8(&*^9|;AAGVEFVj-h!7ZtIim0HEbGAKGpPX1o#r;-qi`Rh~FzWP`x!YBv)e=za+LJeaWgG(JK^V z!bm{}0b}%&HdYbj0;}Pb4lyh389QT+Q-&0i&un;VKS_o8VaX|i_H^lKY!e&_YmQjd z$xv;#msWDpT9{jAXXvQO{|w#wZD>xi5bv}S0kC$5E`|yBROu0|8j()guOw%3XY7er ztI!CsfRo?kye2mBKqxdfaeBgQG;So2RGl~EouG{6CkGIRE=*<_NBay?2*)U4>={2% zumkCkxqoy4Ew-vtB%ch848o_c_}sI(GmB*!X)FGnJfS!y30^#N$H>%eWqvVr4c`_4 zbfRJB-4?D`xT~=?@!nGHptKHy@CS(nuh>@JHRcv|iPuNE_#*8=Qb+Dwv>)jG9z2EQ z8l)O+*pG1fy>X1FFt7?YZFAEn?{Z`!=mEq72?B^mQpYsw^4Akj5mBNW!pgZJ2tiIw zbi1PJJ2=7jvIVIUDc5RtIPw!z>W`T~RYT*`E$MoakkBQn03E?WACy=Z<1Pt;Aq@qo z7-#A_r#3}_S)w((C2lB-xPu0E2rKyxD=xCJW)trRoUXYDQR)p!4he&>GL34D`f89F zi#tUp+bdcQMO9_afTO~B@*XJ_4fo*mJX_8Hcfb$l^}PolGdX4eUztt*{e znYT2_S9zr4(E=rPBOLUCE^GR6GJ~0YBAhG89a|7&@BFZr(xSIni!Tul`N8i|55>IG zxzRKfb?|mbwP&x`6?6sHmbz+CC<~;HQxD%q<03O_R-`}CKlw))KapZ1)GqrIJJ<8% zlPGLX+EG!**f#F+WjO9B;HzW<4eElpysU4#Y{j zQL2GSYXnbPzqR;dmbyW`kE!y-;fZhoz$bfQY7#;lp2QcVf(T!HUM^mrOK^C}f z!O59_7U-K4A{fq^UxcjINGtL$pQSI?6h*;S>`(zoX7V??H)RUMpLJSdiAp z&l!qN_93R&fNL5P!J}r*(uIuxMa%Dn^TuJyIz^NcVVWTE%m8P#5g%k6j%d}Jm{p)5 zEI$9_QyXYjH{Pb`>;#O%pA@BgC|@73nV1{3xg1v{n&HZpIDwK;IhP6_@mN<+i&i;8 zT_x;}2jlss1sh9A@A6g^_b^(b+=(}bMG})eZ@^jP9_FS%QN1K$DC}k{89dClKkNLMqVT#XT+sx1}%T8LPFLq6+b0 ziAx!BXOge&Fu?3IC(b*;4NKP@luDlkuBIeD6e;jwV*Q&$x%0R-suH?T!)cD{(%q8$ zW{90JRw0~k@`SPfhII{yvF8wXbe~gS`W{|Ol^)yE_sjAtGwERyb8v` zhz>;_(rgt21HDX6u^J}^zN$*ApcAo{-P3ui#iE^Yi{d6oC059Uj#b;F-P>UImR!g* zl#pd5Waun$+1}f)HrqL?H1?V7P;S>htsYFq@;0_0e zYrYrn0pIsFe={mG$+Nqea zzc`;s+KVrbxpX_Ix`QJ=H|G$c@?T*mn|Gd^5yzcKc7$K|fJ&w=sxQt2ss&juuf%c; z+467itgRNw-!}g}=wllMH@XC8NRJfIHauJaIOxc6hH(SA(L_NHj&UHc%TZ0V6;FlS zH|$nP{LFDqs!qMmA+v31b^0V~^VXPbmwR>;4imcQw=Q-QPAgv@S!P=E#zF4dBWOJ161?q$I=7CRrZ=q)@6=WQF#Y*HK` z?vCxYE2c`>ks6q7{_LymGo9j~x+uOxRpV@s$BZ@adq+urq+oTKTwS7Tka9xwB1_AK zY9^Irp&?y9+51_(Kj5GvDz?Yb(=fw0yMKheW;Ipu)0A{Ds^rpE(JPK9L0Q}&+o&{j zm3RaRY4pL$dqJ|7R5r7Mep5Cs{VWwYR*pG5UV+%vwBsy!)^=Nl+6D6E|oO-Gs`RhNlidHb9&xw`RlAV+Km$@4P%3vPn63|CrFZZQ5JVKV!7uGsvXzJrYY^-GZZQ_nshvR{Di@yA z|1cBM!qL$2Q%|b{#SXjXQs2T2UKK45na2#@sn|J;=!KZF`hk*7o5m(rQL&lYw~`u% zyWSG~DCe1vmlee)OSj>*-1Y&}bg1>FwJTGvWc_JtwAQ-@@OG!S_)Z|$kd3K^b*lJA z1L=^i@doByt3((T+3f)ChLE=8Ry>n>XybIOJ+F5*6XN|U2-;>eM1C7zIicQ=`LV}L z9)X_kICsD<$}*0{j-bRQhwU-?4y&87>DC@LmVCstF&!KZJBuVo0ivB^&#JZU@A&@r zl6NM;RAn)8Pe@ClBolxXL~7T1tf36g z{)0xzNFP2D;sc{Xmy?zQDX+!ui#Z{TlKF>d+dnr4!=h3ypEvsc-mm^dIBF_LDzu)G zCCb)6+qF{{yBJk^_mARo4Mqo_%J=zWp$1Wrg_8QCFAP5WE>N?Po@L^kpwMA91t0Se z+aLoi-%1Jw7#V;E2m+saq%wqJ+lyfIyJLa)cBfr}zYv6DBe`WTHQn&^*93md3Hz4c zCa~F6>(cn`lTBkFSw3GlnqH-CS?1H*Zq0U6(f@nM}8l9 zBZqysmPG~6bND}jqwWeIEtsFlA~Lf+H$ENfR4aeK?tRY_REX4dFDd&=vRG7>Go@jo zjej@68y~)e-7p*r*&aSgr7cF4Lwlg^YqH}Wd+d%8t z_%V>hkZFakyhn2S^di#f= zgpkJ$jlEpY=QTPW+3(Ya&uHuS1HqHn!*0Z8ofjjSoD!rZle9)Cr!20p<7M0myX1#^ zL^mG4Uih9TN#~+(C!kw}utFR+5@LNvbR+@q&@v!l6L%ycyZrix+cL&d-25n(dAXMA zHxPZSSOemK8D?hB&(=Y`ti{0k0cDMSCNAudV{M}X{E(9okXgcqK1E+UJ^VhU57QPWetiRYpPuwJ{4m^++kmm`{KXVo5vtdte|JCP+WCE=Z zB#0#^A6~89m#ki2J;e9Ft?$J_{F^=`G`+iDBlY@0A**O2$yc=QaQfvk*rY^w?}!f$ zS%!yd7kY<~A@zIf^<)KVQuu<5JD8YxWlpN#LNy6G&E#rXwKFt}zFY?iy){191$i`G# zX*B8;vJRqjMYgVwMUHJGk>RN)o@dZ7>^Oj#tlNnCF;Sgn>50fRflt%e6$xl9@zS({ zMroHM(rj(}2+m~Ns?S)LJMeF-HhC7kC=YdNhat`yH7$J6iPmW~O>}<2>kwkC<0)J6 zd#u*~fA+RD@s?8-#wF*ogtUd9KDI8d!HD?EN|K>LDx zmEwTXrtXN*rIOh|f{y7*IAs3-N-BPuoi)7CvF0CVpmf~}fOa+{6zi8L&@hCoLAwM^ ziO#Pdvs4}aq@OaXoHDLtG^x}ZxWXzl-`P&VeOrbr;HbI-6BI*!`yXNG_v1!KEE*Wt z6V?Ah&;7PIiTd)`0B4kf-M_m-f=3Ui%jl72l9wq;tm4U*FwrVyFW{&ic%Z22P0=+; z;@Z@)1x1k67BT-YZvF8V7Vb6J2D^qw2Vb5zC=?ijzmMS~PyM08o4D58W3<6tGofQn zb0Z>;LmP}A)xH(CHQW>JWEoFBRaAS6<-7F;OjcJvdh(PG|M`i^swv<$0I86wk{h|pXCiAUx7^;i(P+0S`2hA`u62teWhSeG|v(F`*HIEV~9NQH5M6J zV~W3Yv>PAwJ{xlMHoIeQ*oX{M$&`R|ppCh#HW+Q=3m<{Q{58x#C+px053G=e)Q76qLt@n`pl8y-a()3E(qdZvPxo2ehPn^&2Qd)d{ z<}-5nu5)>aw(b{W4-xU=duz*5ZAox*Rr$z12km#S_Sh8Ft ztn7ibNwyd)nWhL|6RGcTXjF`5VdcL|VwfI8(UMr!}lkU{?wNhiG-fog9!!>mQe&&l<@SGVRC%83Ro;<}!? znB*Yv39~862`;P@lb@?$(6EgO|9%rSI)5Us2Z->>f63=1Ou&OsBq^W6_(5VuY23#l zgNSHp@nenv5zg|rC_L@dViM2sXXfJtrRTw2?kDjisORypo7>)OYtnuzqqgUEp;6qW z2k>H^w{6{M@ZD6H@FMs1uJZV7m}%(oH|;m|4d0EoU`U9e`V&1E?uYO$LvJSW0}CdU ztbC-0w9;OQjy+2o3omTwhq}Y+Z^JzYlOk3+>nwJbnf2Zd?5;7_=V!=t&98*s)h6(j z1;%>w|60@~hR#(Av%hZCY-2*!&Kzc}jDS1^Y$j}C{72ei7c(v{ZhgYk#f>T-S|ski zNkx}X1NR(3%G4HeKDdFd%JOXzbO4!Q(58U8&! z^=pNh_U9)_n<%G#hSH)?hJv%eegV6WNrF@l<6V3z-TwMd;^%+SdHzI8p*IRXmJZeo zS?a=WT*sk{aPbUFYunHkKaN?3b)f2s=0%KKb1(4hY&>VnEf%>oz0 z=3+F5*7u{*w<$o~%aS)+aQNgr`fG)0#cX#R^U_92*zitd9Ea(5!NgHKBAHk>L(Y=+ zW>-Q9#S@*YLK04|a{r7zyl=5#zkDmL&T7)V#EG-NRZ2uSryt7Wvmg7EoC1I5s>e*k zuPnburY=S7(iN0P&r(pxQAqi^`1|IeAmN;h5|));r1@noP4qJtMVbf+*gmNCBX%T> zg_UrPo%l5QtE+#fZ)RmotI0!5x2Q6R>V;d^ExABFW@fc8OqNMiNF=fUcHwoQzb2nL zNcD4&C&-pz)Js;w&fvH@kPk2oXDWG6^Zy7+h95#d5iuaki4ouPm-fNFmzS__YHDnGJ;qz3Z1LcpKU8~GDRD>>Hw2!h1<&lN1TBh( zWiMPyy&_`C7U;bn{F$*XILFYg0t{VE6}!Q?aSmgnT*T@wT`0n78h$p5e$$VLC|yzz z^bufV$fsZgFP}_aA?F`X1JScqpQFo+r^8DkCEW-RFz83IwzsXM$XUu;kGHMnav|7B zJfv4(?18vl4p2}9lKI%J~M40fFLTV3Ub!2l)uXbA0Yf~FO=L*l852?FZH+u z>n?@-=U3%J2I8OVt5WYS7wmURj5yqr*rI$X$Zr=HPBKE$#Ap{jJiS#*=P~&vKMjgB z0^X(S6%82T8+`6q$DG_}yERJ<=&|`pzuI5VQXkiv#D8;2-OX1UPF{kA84xl@dbcGo-<+=6v;&^`#B6d|4qm%%+0erhR94?cirtp`auhIx0X_LGY7i=B@zf1$D}o4J$2Oy^QohNTSRel=x%#3aAU-n?4mhPe9= ziL~RR;e_>hy~}BgXp9X0GBfoIAusgL|E*6yW36=~!p8|7ueu$r!j$ zl#LSma+ON!FO61kaLIaC(mJ7l{FMTI@C)RL2^HlHQ?b8UB0&{~9+VrEaem)8hL`gh z6dzhk#Q7y4);IZW`@7-d_(DbU%~B7?*B^6)zY%qD6(r{U^Ig0sFs(qt15|L4yfk`H zvr}mG=N3g0%wNM?(ID&8F!+-ykWssQ`lMD7kA=;0DAM}-`Y#Qa?l*D7!;8Mf5Md@Ua_QF&HtPn*Fk@`I4GEC zOQoX7o`$$S21P|tpn@1S4%uZ}nRLHrALkSp>+?w~L6WTsAyJT{SXyz^bmBd7miVhH zfD0;M-tfM7-+VBW;w0g6AJYqYrNnrH3n`H>nEc_Elu859Wkw-%>hnT>7)jnP&Z6Q= z`!z=aaeVf`lpOP%FsZ!OO%ugWs!t4yHrgEAmV~tnl6$$k>4DE^TKwcXoIB>W)3Q-M zbQx=vNxYGYu&>)_@(*n9^bjf=Yq=mq`B1uGj1R(>nmPb^buVepCLpa4#+Mk4yugK& z{Ph?XO-4VT7$SB`6J2_8H9ktZ8M}TrI%pgq26rqagXAL{)0Q{?tVJOVdSmTAECxz* ze}lkkFLwoh(ej*4U&KA~ky+?(;Fl@hz_QiYFbe#r$2%WwrkZ@uT0m;m2v&2!VMgs_8=h4bBC4 z>m=-c&JgeK>8A(l9$i3Y>Xs+@eom0I5M`cz7fKs@Hr-SmWr}r}nBu@m?y2SA5=G|K z(>XcJUSD5+UFlaurgvj)cA+de%*D2+ zx05kZ>RYc7@1jSC^w8BPdE@PtI;;f{HR`4(^mCGH$(*HFJdjQyHCq|6WOn^Dl-gZ7 z&=V^)PpxWNu987Bx`E!q$pX3InF>OXt=N+e34Yd}E&jNtMQ+5*`x0S2U1_w}rSRT? z%G%yP(zlXwF86+kB=G4+FlNf@GdIVr$rtwX=gV3aJ4Y%V_>vu;?Frt1T45$#1+pDE`GQn`Slpk=;J124uw> zM$b#*s#>Qp_;CZutEnpL`1Sw>vE-(X=jy{!G-0OO)%jMF?_-K>cBXufJX5dwHYh21 zBO#83$6MQT@WQ7(box*A%pvA_t6opJZRl9GCeo_TMy=+|Em!7kgyq~SQ}ZTP5&i^8 zQP_~smgS?K<>RW4#;WhG>BNv1=g9QKxhF2(Y2E>GRTpAT*%x& zykIqS0_J9e{F_$f`zKJJ8`Jn@piCuE1W#Krde_HC@G4zy2*oZ1$%T!H|AhyHYGS7- z{Q{HXz%~5xkoMKXT~UV&QoJ(PstEx`@~-L6pg33=C&_e-o2Vfh+DgK_?9c11awU&K z8ki77$qSp2f8u`3aou~AQ+uraerA`z_?2V)8@u^nG18yZ+z9|1G_&HS$;@ig>tNM2 z+IsMaJvqaT5k6Y2DQn#_WryP_xemEZ;CMp^F5G(4&0-}lPyMucpusG8LUvcMvQaWx>-i_tww%9c2qL59y9U& zpS5-?^_-V_cnge{9AnIECSY7Uif^b+Hb@pl^ysd9M*OQq_aWW@*Gzn5wK5~ufPQ`w zRo#Bm7mC8CHknCQ>XV2# z{)FFogcfNPQ*jfN`11#^4Wp?kRS$KHyxHHQQUN>+YXC>mvb*g#M`Vkp0xAjmJSu|X z1-j$~cRO}Gi6{9D=afv6@o>>JR5hEGxLf3t#{XLSr0{nOnrOp!Uu6_QblCJ?;|Fn6 z!q6mqd&p2Q!i-n0aQmy~<(m`J*Nz*37c8Nwom8LQ7k=%JRK$Q5%BScDd`JG0kac77 zB|ciM0HB8wuYp6w_6&{VZBLO>4>dfQYc;ET8cgk%Y;ZRR`Nmn&?7vn7jg3WLbB-*H znGU}OZ9_p6w=GpwkV_kCFyr12+EM?-BXA=$&^QOhsb;eJjf5*NZ?ZIp2H#SDWv*IwCuNo^bYHC=rU}d5wNh)JhAR-;!dRMiMRX(?;JF{{j=3r1>o>a4~DAt ze*C;6h>J6VbsobjvGNZ=FQ;m+DA6_-UNngJF1{;A>4x#iTRKY2eVv%ik66Eq5d7s?uv5QPucIY`C2?%RHp3?GOtFpviwTi@c20 z>?KV(E?F-y?fN_>X*_P!<-0|~$DMLhCkSDZ*6EjerDH9Cp0o>If=4s{I-i)mzoe(A zAbBmu3Ec1>)Gw49)M;i6UqRsGa`7*`znu zi578T3?T&n0(&KM6O+&{{TxzECK_gK%d&@Fbdkb{rw}v}YWrjWB;0hkJ(cHmwd_a1 zuM(k*;uD(;$WziusmR3(3+SY_$bTi{lb-5M7~}jxynoOD=1ET!a}(jKIX1_Pp4Rg9yK6pDTII2aLz8eS7%bg*|b03eU%6TF2c-s6O?XSLXhP-N?S=m)ducaS6=aGGn$SFKH)+Iu6Uz#SwDHZ+V7iJZx zol@LyjDcxXE9K3z;TdoUmFwykAs{;1ZoI#Lq_j!ncq$3}tw@4ASPJd7QUiGbQ7J~>YM}2A@C97!Z&zs!Mfvt8ql3}J- z8h+ZZmY=0KhgX4G$VSD}KL?o&o0t6=Fg-OtKEk9D96(Xq!)@WuwXnI=M|+6QD(D<* z$;Fw3(=!Hu{7g1!Y2mP%nv7B=se7~>Vac!U6L<3y$X%@Ez(jk_m(3Wwm1}b2#M=HB z*mn@R$xF7@i-&Q_C4zhSxERQ><8u`&wQyK3kdvsOWCZWgQ;oxO0?L<@*oAHPGd-_G6m zafA8|1UEiFf^M|3ckCEn`eTA!((L_`K~M!Ch|q!(wj0j3F4vmpe8PAUd~tuvY~45- zJIW{;HnGrQSkA=_y!;t>i8YudgJ)I{I^*hqrtPj^OzD*=kjP;_j^~aqGVtq#+SMDa zwUGxvth7yOHcxCc33*61GvZHMN3qS_QUiFJ5hg>x?ArPQ9sIBMI;H#y$2M-4=}JxL6Z+_UmtLd=<+bh}J$zF}BsI@$fET`t^0jzm|6*ElVYkbjQCurNVOmolo+ULDnJ1OC$jJBRNLJc? zrEzima);t8+bS#<`(1f8l=7Fz9!z)D`>q7*hi4u0*dyBX1S0+&e9xEpA5N)vJ>b2w zIj>yVtl_FV3kZ3_ts$g31PlzPNxu_;btr4z$U?p_g$-+TvA-833``x|rj#zEvRSazJ#XS5f=uqK}1bKf{$8@r&)-YC%ErXD)2Hb7?$ zU0<Ni~E1z|T*r0HPdvbCQT($IpC}w!z7112Q zXSWCM=+d#L2`$n#j^)7pN-|4qKfc=%Kg$rGEVc)g^bu8(fW5*qGUi*)2>Avo+lWOD zu`eIjjn1*R#&3)3&i4?8Ws*w5UBY1K;ZGBZwiX6Ug54a4-;>N*q;hW2%FWx8wH}RC zD{5EVcyddfUZ-B|wKW5CQomyXTtD}^U0NclH9EW{+FD5EWT`t*MBnc{qSH#4B|mvK z!q?r1tC3D8c_u(n-yK9CDi|d=&EvpO{cmq$h>jF5Gj=kMZWsp_ea^Dun-!7T-!G5K z`Iq^(pX-(84vl@hc?bgPw?iARH?=-~@$^XzWKYkd^>#W2Tn*>adF_G#xE>&?OXvL( z#2NuBYPdH>jRHpI_Xx*F9af|QBoQ0(ZkDo0x%IXZjlHwt(w*#q_B{I?|5*7+=RPel z04*7#;`Sp+&I_>4Vi;!63R#c#cb=>__K{W4Fvc)2*#Q;LSEr-T;d>mZ2~7s?)WWjd zvzr-yVMHk7!uz>&CPaYhCv`Ag@QY5Fl$xb>@nQL5-fgnMJi9UsyzTc&&Tid{?^wr* zJHRf$&C>Z@j*_EWw3u_Va;x-2@YE>Z&0@E-+$@19VSk?uhY~36Hy@*3tPg^_lF1lN zZ0j|}agw1`JWOI0G@P5=a5#t>eVaWd`oA;#1Y zl2d0o0o@=lF}oZcSjTYybu)||5BoVae?3_9c2|>-G(kI3t{Vz}Hjsw&@?`(+t^fS3 z6s2!vMFE%z|Kf}#6B9;g``3DgaK|nAMMnMg&KOiv9YZLKU@mI!g1g_q()5Y5 zdZNmh7A}I8oyDcWey5W~SS)Ok?hYob*gv2OrJq~*b{a~E*bnFT_r^iP_vs7ccxXgn z@OR~@(QDjEZuJ#z%8BWNHvIl~%H2bN<|}xop{Xh^*aA?cLOKUBgRG|WoNu7~E}DhZ z)0fKFZXlLC;piBx0wH|>JpH38>@z~(qLC8y8Op6Fx zyT$r6pGO}koZm@ z#`fTs-%$eIHzbqsP+0A+o|{fhdin67+e5Pgn@qjfquz@K{(DA&p%x&YWu~Du&$q&3 z?PYLCmMgN}Tb?AJUt3DTp&7!`k5(^^Uh?y!CzybOLGdz&Z=zpyxouYHh1h8E=MIco z#50sQhPP%Y<{rgqd7`T6H9Pf*4WfVMIf^lR|A3+(r}i5CCw1UgI1F0Tk^`G4e?J3~$_yJ|&M43CwgAhnt zU_1bi=GBGUt$5$ocuLg8{`@R|39`b`P}s9_RnLyC_)!hq z;5%*CVhVzgjrcl7eg}So*nSlpMTnPWYSWH1UVp5WcbT*F^YVcB9q(;laW=qs7^tgb zyzvP7;g3>4a}%ZL7*&H_Rj~+-emX$C5K^_KTis%!7AmR6yw0g)+^!WL=7bTcG6|rl4wf)nl*oJf&;>VciRTNhpVM*0VO#llPU2chGs&JL z$>uo+Maj47?c*o1yt@mEW^33X84Hp~5wiv+PSt)liZ21M8#k@J6rCls_ft`S0!OvB zsHsVWDal}zXy)mXNaRyUGE0|q4ngrRv>RGqMQ7y2~(e;B!z?oG?tPm8)dNb8s_AZ?tN(Ni;Mytaxqx;CXRp@m>6JJ(ZF^3@wwL zlgy)?@pDZ1dRNIJ=g4E%Ao7LEHHOD|ip2X$nPHK+L!$kH&ZlHh1T^m5fd~|8(FA=9 z-pg|8?CV4{wrYe<+3qzLYm4Q}m7#3Q6pJpJrSee+*~**|cjQQzIm0CCaG8AC=s}Qr zbUc>eYf(}UEuJ6xbGGO-_0L%_L*b0#u>UWR(Z~daJH1GmDE|ek`?zk!ihEf|6jrHl zzrk}(YN#JB)dxptr_(K>K?wcc1HGKCJTbmO>(tW|*BUIhZ6NRRgLk0Ym17^pO|xt* z0}lgMMf0~rDaw|j`n^|EIEFO5bpx@L_*X!S`zf-K6-k0GtPt|L><9kF=r%;ODy~jhvrM74CLVl?El?Rt>nu>k7RYf+S9{INC@9FQ5>& z!T4>FgC7w58DMFMtwngGEhWAPogt7gpV-XYDX&5r_>XdDWu3R(~QA?!~yL15NT7a+og%O0?BlSXhx)W)u6V-w`yJ&wIZj(I%yH zX|`^on}SU+Hm)V*23&K|TsgrY&bgn?Y)~V+E9B+M;>PnqKY>yRIFgmB^>Tek&4a3I%1DS9E$FsX0)iSPqQ&4N z7w+{Bp06&I#oATXTQ+ei@WHt9WAnJkUT0f9^7ET8a~z9SU*+^;R-nFk9A@Zi*qVs> zXdrMU&^rC(C!U09;-0pVwwXs;?s%HyLBR@iz#jBj;gZM_henI z?SHoE7cnVOFl0)YtHH_xH6E)`Vw~>cTN*l^J4({1sQi6)k(9y~7a^W#%~8shB*W(!eaXR0wWOf|StftMI8r2Ug!Zig-PK)T2pf}cwsaHc zYug*Hz?O*ZKHSg(Mg0D`ffo5Ybvp)oD(0Ve%H<7AP9tnL`Dn1Zt$iZrMnu|Qr)B|b z^jk7iu-Bd068l+V4Drjk?2{g7(gSxjf<)l;Y^zx&PAu@^Z*fS3o+Im8 z>g?u#&@H8cJ~Om1p*NzqB+}*3R@7)o(eHVmN24h4iXUFz(3pZRF3)bN**^Bi#wq<% z-0err0c$Qyr>sB2<&GM3kf{wD;oy!l`g6h#nq%6$md6@(6ZVcrP2iO*@b<#*%ViS) zHR`dU`|LRFWk)QfXy^-zo+)2V!JcH{xk{>(E~ZSe?VjQ~-@q-X>ja@9w4oI?g52>qIs&h_}Y5Y z{gDpQ#IRZji{vv~N+ro|p|RPoua|$Za9W~d$|+xSls7O4;f7lE;0}oRW;7bxOU`+^ zz==Z^v3dcc&`i3AhCOeGbiY`{)Em)wi z<6-jm6vZ*vvA}m13KJZgx&!^qEEmxyiPbT5-8@ZaTV{R7N|px5MJc7JVD3g=TnTgg zmX*pyjRIEGnN`R?X^PH^i$tld^3Eby4-TIk6h2RLZ1Uauu*A&;0w|29!d<~z z&dCSRVhp~s=R#$#xvPDJY_<5Tj|uCzCJDWyrPf;;>E|jud3kzc7EAWMeGAy3nXSCc z6&L-Jgztw9ZS(FgXjF>F(%rwn`OR-N^wnKbq(@>ep*~GAU;ik&dpnJq=i`nu(9!Ak z=;|^SKh(}o<#cG}109w1LHW%sY%24bUiGCtHJEa=K%`dCy@D)~#T8{j&akI@K$KIA zaLV8#$j(mz)jb08z7RW{VY>MW=+{lFxE1i`PI(Ydb)VN32$C|hJ3$A?VLyhuTl+%c$zO!$%L85WYw0a_F59Y(Dx z=T!v`#W5!IAe?_kB>q4bfmuJ=5fyK%93D(j5Fr05!HzEg`dF>29n->IqdjuVlYxBI zP^i*I9qInK)3YI7Kq$ih?!}s)?|m7~PjTv)X-+t_xCIn5z6_ky-o<1L0qTRIqV}8e zE9mPC)tSGN7|JB>F%D{XoiWr(-yJ-nOA%JNXfq}J=4%MFRM3sQL|fQClifqf>Maao z_){WZnl}MM5qr}nm6*UT=gE`wUtLU#+q-qUDgH?t{h>Mg**-Zw9$@J2ixYx322Q{Q zZSBl)L6@|3CEMdMLL-T>{4(i+8fULT-;I$EYj`6?)mV_5>^QUhYnV_Zu@&@t89g>i zOVhCTVkA02!*Ox`@HS2Nc1_hcm7-_j-P1#@wM{f`4J6+Au4Y-+JU2-z>KMDDC}g0EE|jOfx0Wy+_*giShW|K%Ab1dCGdUF>`>6W=&|+4I|9)^7J7@)*y=0n-IHuvPLv)xW-#8Ca6)e!FG@ zG=?CWOXcwpO_YU7#XP3KY1x~!_LxWV3PjYHjrlg*V-pnLm5lA9!J|to8Vazm5(=8+ zbk6s%uLg!JmeE2CU+tcXI>SXD!8P=<6B2Ju7S?GFa|GUgd)RPsq5X0n)5Lp{qdBQf ztn0<&Il`$6H|E<4Y|L_9E^e?Wv!h3_5s1xCs)Bux-9HvE_>`kAWT+bejDNgFq0c3t zu5KU`%1aOb$+~%MM8Mu`Au>w~G;_8y;Wt;T{iRtOF(K+d;+9++Q%bu%P{}zzH~neg z{XHgU`qkLya(L`d6rU)TV6jA>GV{^JFqInO#W3Ms-eP9nEg*v?CI+aBhCmz{st|;V zyqhn4wjhHiTP-Wu!FNwK(wH!s37Bx9GLRpix;AxGdk;4X^#)YV3Z_FuNk5wx!Og}P zMtL|jj0f`O#o>_;#3b(^O%T&~tkPz$Qp<)fUq7gzi*YJS&x30L9Krt?oVE}fd6o1B}W4wb@XCb@4RChfW*78@x)R!dL{d$j^rb@?~}<)!S_ zmi_T8Sete_^Wil9`3>HLb6s6y3~(yf zAh>+i%7NNx!Rn*;?`1?kuP_?Oy7{CsRAQxWrf1Ae!q9tIyUtDOn84RppkXpwZITqj z`q3mQWq*wb)=hWI6KIe@HP6#=lnXiX+k`PzwXq7xt3B6tIEhD+H9gjtDkHuJ>%FBE zGrzLR^#UHbs2QcHr_pa(RabRe^nFI+-B;Of>OE;(_y1lqPxqFpo}j{`@$OBA8<+V- zD_9eP0^sTm^EE}jr`qps8jC&QQpd-tRVjBVQSTG-TOxWwd1tFjyw_EPDrysIM*_j0 z)fdWcJsZ6-^HX3Bh!n1~oEr8kxbMJzaPJ0$V0Om7?^$MnL`|*iyTk=v&+2pFe8HN$CzliXFv+#McqW|X2oQEeYqSL;yb=1<&?ThtDf7QXTj4wz)|w{(f$DqF2yaf{wdHNXD=OW4R?`M^|6hYgS1M>K#7&CB;F9 zQA8us$Op!S7tKt`Zc3(SHd6JPkh|J>z3@Q=?b-g`Y*Z#=QMfs-QMNsyzyMJyLxD{- zX$~2#v2WW)n4d?owEZqt4)CjJj$P7dZpJ9XQr9}cDiE)ZDZ8sKdBZ5rs*U{vZV~P;kObJggE#9XXl4v3+mA>x ztT|QrE0;Y8rD=&aiysRH+wbN_e>VdO)JjK#YZHF(w-ri%ZhK#Y4NZkei*3tN@9@+1 zgQIrhD>fo!88WM1afe!pZ*JqW`CByD3FtRwN4u41txX#{Kbb$qviseZW_8NGf6wm#H&gd#7A$UTW(Deaw=` z4pt59_uc#*CKn5UFqA5x=V6SgBh?of<43BFH5_-I`HkZ0JX`{b=Tf(k?N24I9do|D z)C{4TaZF5CNSKfg53XDs4bWVtyrexK9$dT(`z?bll5r_-N7eRdXQEJrIE?yzLe~jIcYh-(p`jY;)e}qdDK%8>Icg z)fn?xvNyJ&mmwJHnMUJj9U^TNNX_Wq%Pj75Cw@^6A`_?cSJY3skL#CMS?gzG#j=>jO+VX>5d6L0t;;nF)!yr)xp!84zIOaZZ-lRF zKBgH)3Co`o{4vqRxIqD+0N~={qG}PC0o6?f2%Zr$>YMSX>@fsAxkt0D#OjkcA2ja^{MH48W%;eW)%y zLaG1AUW4{%(NJct7-)ThAX*ZY5{627J(3_Z8Y0RQ1?k-8vwDMqcu`h7*CTylMM2z% zK2|1lyU@1wsNuMSf+eq|B;rJaXL&sIS5D@C_woQCkJJHO8EOLnBG-cW^P-zHfaC%F zx9RcSYmf~;8j{GD0A0Cz{yp$=LMVvkk2&(6b~F6P^A2Ts_c!=b41ge!V*cX@iYEVc zaYOZz?^@n%sXwGRdK|8Ni~jCnstkg(kRE0Gb{lkMl!IDoxfY5*5d~Q?T$vsG{RLxD z1|S3#mq`gICf;0093raN7BVYcM%Ac?)pU{ zBO47ZmGFVCp5OogfoqXebN)d8yKKY(y1JSFyB~}B=)f;aZ-f5(^2c>8uyGL@A}He^ RVnGd)JUYm2IQr|^4RUXF=*21SmEe)9L!FICogj_rfn-%KMi6ABXyGK|nj zrx3H0{UTku7Cfqw{UZ8cJStr5BHSC78y9FOWx3A?_I1KSU!kC&M4%Eym5CBX&_uvW z6SA;u=s69IRgDIpSV&w|*Dh4gjH}3{XVjFKJe7XUadM9`k2+us2!}cD$Xsv3J}K`q z((=Q?ZcY95^X~*h_28d#c&<2Dj$#=iv`VJlvZcyx9?w=7QeEJa~IHa8d?i<~!NjEWt? zy~O1N5($MxhebQl=OkB8<9?hdz)vt-xH(U3Uwgh-X5%gBq|!XP~WO0oG3w5dDc^CHHL|QC!7#)jNpC9p5=@bvIBWlcv(p zX34RUC=^pP`|KCSKw~jOFpGX>eS068bmVPu`g3}ML%9CM1r!ieaoXssCYTgsly>X8 zR_o`$*T+h1UFjJO?@`6hrjeoY3keg@zvi1ti0WZqsJe!0QI?l0dSfEq17_8Yfv!^K zA2KDG|4B|sp?x%LMO17aduzDkiCNy0&W)QMh za@=nvRs*gQjjHA97=xVnx+kYI$7_B9#i-%nD2hBQ7~o9l%-9M{phhWQoKlQyDcUY& zrZdXYTuTI@eG1kilFL3b%Anc}eN^rrF$w57>wT4?!*yPv#ly=NJd>ONj2(yU zr$!1MoZlFP&5RJcOE>$X`X6iYq8?WAb{Lwgq*+2YF_U;SnpW6sU^#zU&UZvJazpE3 z^8VejUBIBc8Q~zw7{EAfk&0hqCe|P#wgfqo1&#HEcx3`M>dJJNgZXmr_Tw%Yv~EVL zL@H+K89EAcVS(>&@;-_ukKMg{ITYI6EdpJqju<%%gC7xPVi;gVx@U{a@R0XN`d=9K zr(&i%z(7I$f`v*HQzlHT5kyPOWx!3W#v%sWE6pim`!mCiwXuEu z_?S!D4J9ZZzcV*8Gk*KIfA^s)E~d_Anai}dwm)y@S@1#38a|(5q$Zfflaf~ZDBc>p z6w*n`6*Qt<GKpB)18h zPhKJMe!F{Xvf?%naN~>+CAx*0IfgqWXvmtD?;=;d8^a>obd}8A_hoywT)6~KPeN>> za>*pWi6H!18YI#$rX;&&H!O%t0FMu5f4~p!Ez^^p4iq?=tz-iTKNR7K7^h7Uz{;@&yzR*hymKIxeZQtnro;VyWMlr6UF>wn!cU z$0n3>9uBRWN!|^;AtwfbT5nb-KSYL2PIV7)=QE8>Pq5l*MdzkFCtcFjh z1Yobk=cZNS# zCph^mUR>j9G`OuN;YqqowzxGmlG`Bc;i;qu{N1*dt%pdiIm(`&PWF^}%jW&KeO%}4 z`Qv?mtXTSf^{4MtYGRI`{^DkZ=ewHM)7RsW?`1t~IdEG!pi(PxpOaP+NEy7C1$ebh z=qt6nshP|;hhKR6cWK&H%2^rn;#q@zei94_wDxVlCp@;YP&TkPyx{boiA>~8inoqp zymlB9zDq#Pf@bc!@!eY*Vp0h+w5A~s-_HXJz79FyV?MCD@p99-y(#nb_ig{C==wcJ z-8_EML0ZJ!jE^6YG%r2SMx-piidxmDPwB=n;89{J9A=#xMRLzRP|y_b^urijqqa4k z>5a*6e2hrEDltbK24;-+Spv0L?lo`Xr~PE-sHJ-m z2h511wwn0+1*LgqDq5`h86MB6)^zGX>!wD?NQ%Z^lyNPAvGV8euPE7k1GV2i`nL*% zcsvpVDOE4#MG1nIE5zbS3JAegerLgd6vm~0Oe)=OH6=Q4RA2v#uq_dMhB<`1)YfsrkU^No!$v%&G%B7btrPxL1{gVUW6 zd;A>Eb&q`rv-s|D>={~Ej;7q5-_80;oGwmG;2VC)MTvCJndO_NJvfrdWroC*>)hn@ zOK038SI&1JL__brO&C(nZ!0NB74GpzArEWmg#WATiG(wzO zu-2K6`;s9pUL+vOpSb)(uJ}x$G_S3qszNagiMeI6<*Mu#Z6?QFpnQrmZ=wHfkfG4a z=lkDiX|969O1pkP+Y%uTfEzijKYmx8SFXA33q0L_kC34&Ut=*Es#zwDGg>{Va6qw}n zJbr>H>(C$ab?)-eA0I`VC^(o35J^8kWsDEfNUT`~4!Bgt)uI1sEE}T7=PJW-TpC3v zQ0$;%H`Alo6l2HT*1h>Iq)}r2eKp-TC6gJXl{l4`pOLN|5O~;H0!okOKvYnVwb@zh zsw1N6?AqUT0J&$O;u|;27vN(+z;GO)ZzR#XWusy-fLEuyr8wc*A)2h&t``Rj!9 zg_pHb3l8`^yCq+mb}e3NYzUI&tp_@TLOoY6tTtIp30L8YiAhAUMJKllxE-xBD2Uk| zdSkw*_%VRSlbIsvmc1w^kcr$4Fyqk_#CZB26xDWCvII)7>C`1Pq()a3!C}?T3i$PQ z#nXN&LB0(Bd-Q}$0)*deYZH0Nk}GAOH#Nz&KGUPCR#TbcU1G~$c187@EO?r?(u6S& z;5WG$LdO>9tgFb6Yv}!9)lzrmrxsfUh2v$HtvaBI>|#m*5-!iN>wKPz1UI7n$dzOu znHCdrVje_&hj?UO41i$~@U(c>X{(d<&j{e>z~f<|Ph9;Q0veVj>AOOUS0i!k747{I zL)i^gKC|DI^nzdkcUBu@$A>Vxq0KP45_Dn$*xC?maV?&e!E}VbFkJvkFXH_A zrV{FrvYIgFmc03g2uUcVxM+b1>W1GLje{d16Gm(EXPs#AMtKA4zDVAnr~iih;)Nm2 zj~HE9&)>b4P~=;t#G8!WQGtG7qkk9kWY0mbw;-}?u^0-TrxK*Pt+399^iD6U@7Aud z1H>4-S*qMj#8hIl$2IJ3kUe*q&AjIJvJExpTrDv-u zlC2Xp-VYsOIEC%&n)>4w+Pam%tCS5mK8e2s26)Pwc}UD6sn@t{qK1wp)FZqBe(s)x zSIR`xh|D$pC)k~#BFLTHtn(Ij47r4P+=(|lxx*|(H++k}sWX_Ivm0V(O?;yrFwI>?3lgNfmlUv~jte0@!QaG&R5+%6`eHCJ%=kqVk zuk)fordakU;lfToRalz%Iu|1KFNLfVeUw)BHWMGZN@b#qG2Z+S{eW_m(A>dlpV2fG zj8EVgl`hizz+=~+G@Ip(6wF|33$e79fN4G6#$->x`o3q=0RAXCLtzbQ|I4BMN>>Gs$=)Om{m&85Q_vtv^M0Idv zm2Sa*I*xA1BcxJS(Sz=*#}h!(#-ud8*E5VTr+d>80*7~D#j)gx;N*y%>S_0+e{W9` zLyw_yY5$>DSpc>b5_>c?>~)Wt3_g=6t}gD;`BWjC@g1A8xS-IxZr0EAfl20Yjzh<0 zohSONnpJ|-kvFXjx9$;vpyE;qo?rSI=2EWlbBWUj?`-+QX^qMf(5f;=+#-((C%i0*ImKyFYmBDnjVvRRcGV zM@T~h&cwMD*Tj8i_1^8sP4Uii$`|k#ytjev0Fd}2I5hd0G zg~lT6q0{_lr}%0fTiDgTUMkTJDi5wncmpw=__lOrhYvXd9o{qHo!lKtKc>&>D-jTs zfA9#SCg`l!>okmZ-bU;+j^jS(etOn*iOk+MnR7SER8vSa(xZ<%jN%KsFq{ z{X1YUFKA}ZaV@Y&v>|&g@v2o|lt4)m zYo!FjQKQ9iBEbU=`99|b*v#?SV%0E87s0r_Y#w&cQ9d|^or!BDECKy*472!3#~l4 z^K$|A>U;{18YQk1n)L(VR((Sznft{BksAo|-JuKbD`(fR*@5H&x?b7O5RQc!T7OAB zUxjIXSqToxa0%H)x9ZrFSi~C1DMp=?+H(AI&x|nqdedYU+6U)O-Lt)+(j>mfR(0-l z_Pe^u)llKMB$a21@Rjml=^9jeQ$&A+^#7q75RGqv{J*&+_5bD;00C9vbqy6bME(Cy zFN8_aWKo$v%9KTUn%Eu2S`gAdp&+8dhzA;u==jivG*Ofii$(oK2M3YPJIQd~eEx5E z!KY27vQ5mHJM!B+>db0>dpjCtfhtThee(6~$apKmZRw)X17)lJvFEBfm9X5ZZ*|1c zpP(ZMbfUBC6%rjHzO)9v#7sYSBu&IHg-nnK{!!i?E3{W1?fzne?BesW`!K<)=|3Otk%Qzi>qYdtGV>! z;%_vu-$@MbRM&~iGU$1WJ+NGT<~tI0@(QnfUdKb~1DsS$@(6-Yfduy-*zoQrDLrr- zEz}$n%12k)1|Lpv57|!8K0_`{;FKMO0{%|#r~P(dfmK)@?jx`-d=M%upAQM{26&2r zC|?DbKoy}!pjUr6fUq^tq!73c;beT5fj|kFtL?sBS873`NjvG#wjXaPHaHu|m7{`K(ijc3wzuG*R_$ znFJCO6G)kKazu!OB4{w~^K&yhAtCkNubvPW0~J2F?YWwDFs ze&3G0?7H|fbc@OQV!sxVfH*p27v~wRvMYvYb9j|uy@#I`0$s%%?`pNjp-v~rV&GqPSh-| zkmR2e)X-hB@$4`z3(M7xL)C&jS%bg23Z|)vi5cy0Nl&HTF9xxanUSoo%V!tRxy7X1 z)2()qwOH(0Nexrou~{!nR}|^;PhDRl+v8iD=t$W*4c~-Go8KaZ!|%WMPGB`;8+~zy z%nu=EbeWp%0k8-~*jo9dOI&~ZzLm}^=r%UQ#yL{ZHK@2`2j3eEAm}Gyy&(T5vJFY! z3YTCKYt_Ca($YwSl?d6;iI3U?Aj-0Q&c_v@MJ765go=K|=~9Xp)8>_o zskU6Med1@?c3`2o9Za(!`m>H0B*?By0h z|A5+QwR_>Il5!~K!oYq|suML}n>2!wzw@*J29K|)AOrhsvhCIBeToW-PZ7kOQd@ltJTy~*5`zulr0FBz!m;^ z;CxI7=0mV3xOI-WMhrHGD<4$>K6$eAvIS8CubEv!cop?#)qff>s8iA7dW-wrdOOTw z1Ung*j(&XG)be_HVx$d@NNA-lIZx>5a3)#usqHC@-ZeZWMT4(+kVD&*x}O|H1-z3# zFlI|oiF!HzqqY2GvuKH*jH0sZ4Vqyqd-MD4sp=**3nSCPk)p-5&50-*Q!AWptu{9w zpD#2avhRuK82y}n;H}Vqm*)P>TcqG0X7)?Gp*8&fgc)S}?bOB^`e$ANgY369&M-8b zD71tp@!+t4Bs`9GfeqAiEsJJ9wp)>Vw5JNhBylY850Np?W~Q4$uEgJ)e6CaJK2w{d zBHjL>6CQ1&RaiS~FC`9*f7%@23~2R9#(Q`=dT@goc92LA+s>~?YWe%X z{NZf|MUG9agyC%@{E%S~h?=0!_ho>ahgOS=<@uue3=`eGr7oxFDds*zdDa8r0ug8C zTQJWO_hJTw$@}HMI_NKQOfT1wRBglxbHGV7Xs^Y|sKwm`JGIx<36k~shx3@OATkrL z&IOqg8ODcckDmPpU31G^u^~8?@nBH0@@h75}hx!n>0;U?9) z$I3&*kY~hVjaW`bBevLYEfdP`kM9y%ZB5EL>u+d&)4iR7DNeca+s4waqTod(S>hnc z-ERaWMtt#}WyYv?G7Wt_Wi|95?@a2z{J6hOTKZGirzkx70q*Rya;|(KCc8uug9FXb zePz_q4;uVTS;*Tj~)?DN)B(;h9VK`yG@|1)rKmrjUK{uMJ2?EmON9D^u$ z{GWe=-C5VTVAI&8#Z08vFzb9>SB9oXizKE}x7(+0arm8Jf|81ZDeO4(39tGSp8pS0 zs?GVAz(CkUSJ$c0*3nMKE0!9lT2y2J2`R~>tw+pM5TSbhuZvF#rKg|x9gs)W@{w@H-g(`P_%DP-T#Yq%6ER6i(z@&V zzc6tSL#%=$XxAhXm6^ttGW_ozjG{Y8vUDoqPz44UP-a#3=@@hW}ig107d0l2h_g}cRymguz-g<=4~OkYWm z0QCoZW9HBhd%cL~s#r7g*}0~RPeH9NZ^Je5tK(Pd)j;gVm%?^}JVK}X_bXT7f6T!q zv^PzYM%OQSmDH{HBl<%(rQwB&Po2zt_s7tX(JZwhe_iZh;49`Yx%n)?WtPvszsD@{ zttw!!_w6KG0)6UzM`!o^yyKm?%9QY!CXBkSMA=YmV5swXSY7IQQ8{khpbmWNq<9KZfS z``m7*-^P%C?OE^mEluZGl@P}AOM!#^nZyRtTgKVVG74-zn!Tt$onSA8XfH7d{vtT0 z_MxDS^dxd^JyKkyh7U4j3;D?_?!MEdpIxe_Bi!q_Bos?DgUVx}A-mlYfIf>tbbE=6 zuflYjDtA|0Zyf3O=E?&ESqN3i$q70O_12=x4!cn{3mNO?*j5L3O~JN{$+NUX1!s8^ zpTq6E8da4Pk-jdPl0Tz13~vxm|kicBgD3AsrzKuE0IlIaphYVkfPg9A2; zby{CG$@-8!q}LU5cBC9U&=j7h|5w*tOZ!IEUk(I4hyTxAGOwH#FgeyD*F5vr7}4rD zMf^QWJA0pjHBzBJP51L*9^BACRZkaZazEEB-YnBbGm47Cy+!SBWb}d#8U#fFLxHcT zoX%R#RmmGtDe)Jw{`P~_rX4urO(x}i7!LlnAvDfEnbzI81#i&aeqb})TN%6l3Wz^K zQJwGU^pIlRET|AqUn)W}Vx&fX0}sA1U>6j9f#%T);SEY3O@R^CU9hN8P!CJT7Q9d48Ae_wfF(x%KyE>YvtR zNn{(J?DW^=yxw3gS%ef1zwWNecW_j%EMyqFOo3~w)E5@vR)~#}E|FF%op_2hg1OHY ze>!wHLNcq5qn5_X>1&DsC!i$nsgq)dK7JwFBg@kg8TjTtHA~6?dcqX+7~|woej1|G zOL8A2Ee|avSv=R9&t$9+r`~FTj24TuK+(o*m$q}K4Q%TP&RLyy-GdZi`5ejCJtQg7 zIPlK4zVPrr8b5a8ds00u2=@v^J&+pyeAjxSXJKaK&B-Aw%$i~vhVr`IW|?L!l{6^k zo#d0_RO!#}9MQh7mauKWrDwn%GTGz6K~!to^=HhaHxVEGdt&a{dR5eQ#(j^%Tu!(3 zgziH}vSXI=qy&NY`WOB*rU`VGO(L^R|GrrmBUW77#~ZGZo$U-%C- zoGyG$Jo`C+pKa!YaK%Qn7D5eo#X%eWJs+kRv!9TRtL4OTD|r_|aW9BfF`p?A9h_mt zdLgb9qzAbRAIqe$`?&jjVh=qsF7toEA4SQ zs7)&nAA7IgtRwdSw7Y4<#e9B2APsd!JqnMaf3)H!f?Q54+l2_gIoB{VDx7~EmEJ>F znT-^dk@-N)stLr_)9W6J-mYgn22=U=p>MS~Omj-4XX2OY)gX-%YEK6%#RM_{5_KGO zno3>twFu3A+Lvx{C%4l#FEVE6=^hrejTMhg=!U3iP5-v3kUVjUt~j2RudpxY{$Sf! z#Oc$Z--)_V_62kbOmnq@xS9&dTOdkQ#Y-M!8@X9ieIq7e`Bz{IN;ZE!@PZe8X;dZ* ziLup$Bfr@+*&K$Rp}IR8$gdcS_CxZ|Xib8TX;t{&3Ui`RmRV)oFpNu7LS{A>{yLxc zcQVAnbH`mx;9lAn3>mu(`+Wm|DS%QkqLZ5On?%`{qEfnbYw~@(wfm4J9ABA06J_F7 zOSN$l1v^x8rv*ht+3CJ*@Rzqphb=8uknyx784Yd+0=?BrEIR;_Cjk%X4}ZAelVU|y z+pQ>)Z{+Xw{+>3+^ElSVK*+^6_INzT=;t7fZ?56;$3}*CPqoDvG9Zy3Yk65~n#>1r7KlK@XHNg6#j{gf4UXvJrZVBZYnuO3lBC`vB5XACV`k{@&PV)Pn)qN z3N6)%0yip0Uvdg_R)m}`8ZRZ@E3m{7=KSPL#E|?O;2o)$7ds3Nc_v^V8BlHX)Xem- z&ipWg@~U0OJ9`5onOkFY%U6<01`+W8r>``;IYl_uH&?u=g*~d-<4)8$UGMF8KDlhM z@BK-Cnj8GjElIzOlYDyrpRN%{rJvONlQmO>|G%k$l}IFjk?2|fpRBEY$I<}4e^2~A zd!lWXr~H*tTy~9!zz1p$Yk84;x=5m6{;QC@#rIij8V+ZRS-5ek@z2+A`*1CTjW)0r z<$7K_w{RWz5|tm5(3pwE59A+PB3t0qt!5AZ*R$bVX!(9K&)cV)jeV`1tcnX~Ikc(J zMqggs#dDKUR*k7zaFyrGBHtjfgUiCf{Xxv>P$O~mMe9KUVb0Xgl5x`=RWbv0IcL!P zc5ADS5D!S3X65%(szM^nWehl>T?519EdUqZTU173X;=x_+E=zetF==Mqpc+M`_1IkuNa*jcHU4KNyqZU#I} zQ|pt#??<2qBjk0HcJgin6qsO6j_@)lv%`NnRe+P-@QHjlWzPwYi;5)QLjfSIuK}R@ z_hL?0V$wVd%=f=VKLrM==;3A$0RywQ|xt99vk-7O);s&y!bbdF7|E#7! zjBHRVmuH|H7T`IKa?`&fs74msGF9$kTq7}Tx?gKDW|MD@FylK)7~*tX;8qwbOkb;5 z_)H$2{cdSjY?sDQL%o?=N8Nu4D3_I2JI-gx> znF($J%aAd>*s<2uL0!f{1lzsNR=pgs)tvC~<8R{waVp1(1lvAyL^BAG61bb@KfG$h zHX4dyAa7$42s#Q#Bm>jW*q?&HrTYuwk2hb3Fq_Kt{7@l-)koJK*isEo(l$lY%=9M} z;VgMb3j4r5COeEfxCOhM{#8&k&nE@J==pEpkRi#9x;S$mvg{*kC_nZe9q1mZC$?x4 zF#yz{>RtNIg|vdX)Z@qAShAarI37xpxC{+~l$=n4z)cOJ(kY>rt8ZhcRIdu02@?)l zP6ZJ=b`^nYGo-AlgE~986d%5k;QWZlKD0#e3Ho07F|s_nZzz>Z3BG|zQ^d~|H@GV> ziAewy;SK-xajbMlfOf_ssnLFv$oH^=s!}PiKibU_OYnReqg>+4NC|~TrTG#=%Z{OM zz&F5&cHzc+tM)J5Q^b8~r#JM>Zw*q{pdIl+sf|BO!a^@XE@82`3#$Oc1MXGE=@n4SMK za1jOg!EqC^{a>*|rhxXVKzn=lGje1VHb_O}Q_vSU9$aj=-UH57g<-`6_C##)dr@Cx zJaXFq`gdNs7FXBS$1KOm?DVVLSQaQBZF5gA|1MP0PUzU7q`}R2Jd{pima)0;xDIr$ z!%{DKNiE87TlT{+TM+^k&PDTz&O)-(jPD&_ncY&~-AMW%_|VTcMq9P?e+5Jsi#Y>H zoV&k~>5#LNQ`HZYsj04>vwOF+cN4y_DRh?d1A|->Q|Sv_$-<2(v}EFFN#u~o=>i$5 zIR`rh6})gC6*dow+UlddAd5n|w_k4=5t%tiS|g3hNi7)e>jT<^HZYA|C!~w8{h5K|IJI4|F?EmBls2U zu4d~xCy6aYm?_QX01chbR7|@YFFt^YZj~*SZ`3!}KQ0IvPHpT+f%8t=aG#YgeJ1^b zX4U=urPq86YU^1ApkWrJ6 zclMi4H08c9?Tl8=R%Q_+SPlcZ`V$=3M{gl82O+0Iv>9}g#fdSzNo+;c&XE?#^5YW)eBGe`~+ZL+UmwbU0csD-M1PAdq{laXBoA@3-T0IEEUv#D*NK zTLX#&V%E%!|E4{X{>`ckmE@2OuLY6{Z#$C&%OF=aZOqj4-kc<3j9`i*!)f%lG(*hW@VG%PlH|*C5#_c**rv!`EHIv$m+~Jf8 z-jF%0wBgu+vR@WW)Mi0;O|3MfmX38a8uN8=Q;pIUO9c&yRdiV6fJv~$X)-S^S?tuP zQ(TyO&0m5re+PTmf8h6o!e%ulDcfT8@Vf&bb36~P3Mn(;peOR?t&^#DUvjFQDD0}rkmheoeg#Gak z1!eu;{6;0F1Xfm1TKkIb_YG5COjX+Y8Tt~AJZf;53{JgV>_A+jQTo2aKq-sr%)P-@ zDzD;i+rY;ot!u(zAD-2OU+C(RW637Gy17OoK{wG)Du)iU@vFckLa~7?puf-D z`OwUUcCm@lvN(KLey~JYttmppfL_f@$dN#pR$>#JplPuW)9^`?WnXVdvi{c9MYIA? zOIzz%1g>JXsDg9*|zpmMWAQZl4hC~n2n-r}{Fcf;TbmIn|!&f_fmZlU!+~DQ?X7F`>+{w3p;m5D-b&^e! z=MoIJY0yWw|EqWnfOMMleTX5z(8{mfxOT8W7}tPf)X>fs?;Ym9I^osmF&6qyyI}ug zJY(3S62;nIH-RgKtYA5=sV7_ zVhdSpu(v@4Rqef+?i2@=Ko5bmF<3y-(x5yI*grEe4r-1uSbU0x=&xjdBZS;B6Fnt% zrO2|}VL9V!&2%20vV1P(Q|OJNd$n4wV29+3x!rc2t9)BlQUDrrZ> z=S=&{ZQl1Q`?r)w1tAYddn7vc-pPkElAu@1i@Z_RM?G3&1J;JskLhlYon0|3o8%z^lUrhp7H~-$jO7Xnvh_cXM5Y4sTiNM1WU2{^d$VB)rA>39+#;tLNP{ zdMdT{3#6E$0UnJXOHW{60`Zc>4OMZT>y^mD|9>H1QVJi@`|m~z|E1|aqx)0h6D@9H zkE}3w+yP4zy^<`JYv?NpWx&6R8Pj2q?!<~XMkbvV7*{(0?QDJ3w6ynovf5(k@W)8# zHHu!#kAVQR?LzcURD`$|dFzUw6+YfwA5SkRJ)m{9Cnv9GmwV>1*!I0NtYy4RkM$&gJ@z&4-zS6+GZR- z+>E2p{Ut|h$?lC~F`23_Moe85y)3Ov$_yXaa($wJ?Ld6qHMn z@2c0E;F7n8cJS8!eyS|{*7EkVgW;BosJE>9*Bkz4QZ1Oqf}(4z|I#%}Vm2e@-(8XX z56u?KD}z-W=QOe3nXOM3UFBp6Y1QKv3K zRmFJpj`QeHp&J;q>k*DwU3%)?9B%7ZrMXEiR{nu$yV0X{*KVIK*U6*TVM7)J7~bd_ zAjw91vu3MlQ%fVA@0uQaRTH1Bu4wa-x1bAbH+UY!PSp7yss)K=5|gA<#?*56w-9E? z*tAFb6LseC!Vp6v*HiaA3j)8ERsG8~C(p*2YV zmi9BrZieRyHGu6n`b$bm%c*x@K7n-UxwL~%K?jvr4UO5eZ0&&$baSjBhCPYT%-Wx3 zcCb?sLVp{fWFMYtKNQF!=+SFsuS?Cq-X4KrmUV>n7%ql_vS0lT_R}A;Ut_Fha|lEv zDr9)VpZ<0yD_4Mo=w2MqLqCi@ah*s3DkcA9dHC_XBo)3(XN z7)YV`!a*}mgC@f~VE?*2#xzaSd5PzGP6a?mC-Vq^*F&m)@# ztQWSMZwz_=&d0eMjU@K~THQ61%7&a1pXgl*O_&*~IWbihIXL0( zt(0;pj!nSMh`@mExs-#JuiqM`kUI;fZ!c?Wb1)$>z8w{vL8Oc3FgZQt$vS!pfau?f zw;S)jpAWK}gIw(0mH20UjM6WW`rrBWqaAl0(TIg#OpSEj;j0 z@7B!kV|2u1f;-DcGM4=No!EFfg9MPL%BJYD zzGC4eBZLb@{tVae)ioi!*GSo6#}Sg{;FEm^{Am{zev2LDR0YHSmqI`0sNm`Tt+wv} z*O3^4*Hr)gkf8rLE(JaB%kCSl^4x5s-n?puC+h`Rat({>hhsXeE{sSFZ(jBgm} z_Ah>2$#iGmS$vT(=g`PGO$$min$b<$tHw!ThUY)8XFO1Q+D4x3T{&{yi%9F9WJGG? zR+1`_wvcb-y4;UUOET(uYRY;@-<*_`>wk9!gH>>ckZUw=8sy{Ga>8sER15lkA~GD4 zA*m%=7zfs}cYZUhT;Yc6U{{KQLoYSs6O$gNQ*o1!j%}gMQB<;0?AIsR4XW3tt00v_7^JR%K1DN>hv9A7-b$8R^=yHkcXQAm+kDqsF3_4-;h!w z@J^|&OEv(*apF!QguXn{5ivI3(HYtBj!D2hSF04CzeYFaz|ayn{mo^@9P(YLtx_zY z;!7|Ijoj- zB)9wNQ8-j*c}VcP<4A%Lq|&<_qO6|&t*a5jIyl|VWV%FW949bh^N$~W3`>%& z=Z(HNH2pq^O7e})2gM3cRHXG*1_J6iM}>y&INLAIz9Bi77)Xe~2L`o+4s>4f*d(dZ zW|V?eAc9It_V<-}nTtO6+~VLXdp9kUXO#OGf60B=z@H+=4M93mpI1+qP2B;01K}RD zL$~f(<%u7{Wc7$bA}@BZGyIsabh@X&k3cuVE{eqN4_LK2&FKZ)={_YlR6WDxfeAsC z--C!AuYPv09$Svq#^28Etv>!2`W}T%)Cd2nJOqQA3mqOljk=BUl2z9w!q_mK?wWT*-2Y+A^AA)r&3(Cp)wN(r;782>W^0h0f;S#;0ur{_4tJAV@L$Nu4 z#Je-b9NC-<8Su%$qh}1NH%6*5a2jMmXm*=G!sV|%(L+QZM*Q(#0{MzQErm1b>Mii{ zs52?fV>qN0MIJ}zqvQ`6Ma8PGpF^8oL;f^i90<&RveYgoyn(dj4}dW{jOUeA=^Qxi z=A;^fs|P4sfU=Ja6tW<(nO&46)bk@1IWa_#j9Bb&tLR^1xKD1&krM-1?Ds9b3co;H zOx1`G24uEGabFm^m#Vr|KGD*1u>V7!lrf6$91x`15y442ty~Q#I zz+;6>btx14;*gWEI(TV>LDMtmN870&;t_6!?d?cAw(AIn0e38IuM%^s*n+w(GRWCo zp&M7L*x+ypkD5&=<>V}mDcD&*)8KZn9G_r0s5{lVao84BX&t_MH$$>US zk(nuXa4n@c5elD0FA6U&uvY}EFGdw4p1w3V%(!-X=GOwS1>+VXEdZD&s9B~)C&!@@ z^dkA|YI2NM7`L<>@Msdy$-x7y3zNfs+6)ieM#L+2C&qI7M|!QO$@>mHk}Q;Ziaz0; zhB8I1Xe=(DI1}ROFn$l6K2uMWVmGuSPLR`Uu~ya?d~rn{=&UL+)YiNV`W%Vd8~xMo z+Bp2l#@Omz1e~DT#|>FPPT$*~LuF|)Ek!e6#MNE%)s8?O&=TmUN?HrD5wv$o5a#aU zvPV&IC|7CUdYYz7n2BaaYAFZY3WFNCR!fUit&h*F$DbKO*`IEm5rqJewA99@YBET& zHDT&NKgxu%cDK1(<7SXg9q4Qkg{Ed?_N-2-@_eEiOuHC|#^U__%GJbAKZ7udF#<$n zq%A){48c^I74;3{b34^8KYb2&6;5jUh@QCd)1xIdX?a@rR>~mC+Fu(k5Txp0G#1h5 zM-5rEk#BP2D+W@hj=Gaj0&Vb`+B`<4rIG_aO`Xnl03nJOTq5v0&J(Ibx7eG~*$yN1 zs`*J^1n=BY6tv$u8+{In))8WQoay68*owXE_=C$PQASzbKjRz^8F+ipb!pd*sPm3F zdDK2vH1@;M*QRc+=MpCwm0Q#KW*<;9RAsOpxD@x53fERe zo{PU77ie?1?7@18eZZg5?r>Nj%(W)&$TCQ_kM4WARLDDEU$H(tJMH_6GB=CQLA(Nj1Cl?;FX)6 zpeZ)&3+wo6?UY|}zKDiJVP&gf!tzUfhcNhUM}lh`sW&ZnhJ9MJkFVYyp9qDXDqQIr zqrRC4GqUV22{8!^hSx;if4~PZaz}*>C4^7^s2CJm! zW~wLw?veP?bU#nnh+=lhF@|FEDG0G1+yS*&+$v6ZuITY^^)Cd~@YuN-J@HL^Vk(dQ8 z_=u5S(rqM2BuuAY_^|9VxPYcd7wujCQ7U;w*?eq4!{XPQVdCRSuOVF_ygNm?wkvzZ z*LS>;vUI)&$ESAbDDX7VhHN;~Cha}4oF-84`U9$Pxy)jWSA#e zecliNx4VKdM?b!&_K^x>c{3Zi$0Gb0M~lnj%&$_LSkb>Tb}>vk=C(4e%9=WaEA1Yb zS_{O(i!Xat*+UP~J{y$Z7f6P=e#R711liKqT}m7ex$9hhL%@>i0NW7kgvG^)f&~gY z<0kJeq6e*tUt=bKtfdDy?VO<8``&CzBK z^@ioi?LX@FdELuDCvpU-NftVvM0C#L6NtHx8~_MDm3Tkn3~5mk@34 z^G8=ey^YMZaA2wZrU(fbfY<_>q+K;jb={asq4vyI$U|R#JOkV|%3P zn_fiHdZpe-ZSnpRzbna`^eN?JMu}(Wy_W+>Zoq9%Wb3)$-a-Y35Bvb|ri5qF@<#|O z2CReRxGKC7x<?%@ie{+VB~ zOG}Gz#Csf1JHc2DmRWgBebBcvbbmiJ@5G^??Ku!`2EE$xiuz+*tJpM4e9A2{pxsvU zT!l<+>k#sT-&sln^XW_e(iimL?(wx~v(1cMtJ(dAe`4+UUcb&1D-xs!lE4$B=Rt z-pgvBnACMoshsZ;K&RjY{5`3v%J_+%|MFkyHzsHutSJ~25D*n|qQ56|BB3!2fO^X} zPeV~b#YB|?Y9o4ISkx#$X*VByK?@}}78F{MS+ejq)w z^GufWb({O~#`BE+ug#H&-j0I?VZJH|Lz*?e1f(dnN0?Uk6E%|v_B-q z`xE(5aMlvb6mp*$JGc_`fD%_;Cs=*4kj$gJuK@@*Kww+Ntu(&`Z>+xuMYIX`0Gp6Q=zl`#Ib|N&S~vAR>ipzlvt#g(pcJHr0qrQX?;uJ~ftT(PWq8YP96P zP`;*qha|C|WVIQ>kw!)iEbe_CKtfHax3RZh&e^?V!*g!K+Wxu`kkMsVx_0%CfX5nI zMY{(ro5cA^LSUnThutA@1h{Q|UE2S(M^avC<*y`~0#e#`h66Q6tP>P-E1`nSnwHP# zHjB>3fa(c_+$jBSg1}n-VHE?LS1eyf}x+8oG*q!`q{rvPsNh^t5|o zVhHkh=gyG@nzA=AdXK^JlK7-rWp15Az{OH#XO_UXANRF?IL*ifsuTZz(QrX$45+oA z@J+*i;hPXMc0jQvlsC>%GQi$t(xOTy1&>%Lz#%~_hBgy)G=CRSUovY{F3dQ<32}IS z6+NCsOdJ^`IG7D=-PAvLKBQqQ1-~RIg*qONE=UPGW?qPL3%HnlLdlbswwSiji zR=|(G!o>I+O9E37?}C!I#@Z4u(?^R7@oeF@*TR}eJJo98(1NF}D!`sF{}I9{AY{Ai z{L%ity|Gv6SHfj9sVgs<^plZmZjRIeO;v3bccq;vVa0XjTbpZDW(-`qFg^I@F|kEWaqTNl00s~weW#502pUUw8VzD3TdDTPnXMd8C<0cOHC9n z)>P?ZF{h$PH)Brrw;2sf8xAsp7D@Ch>9)3p3_6ZeFIGNPA$xwoOP4ctGKs3GwoRN} z_hZYIQ@6x_jhI_EsW5Wdo0NNz05(!VRT#0}kcF{~mx4JJu9HHDs*LLywL;I5kxt8c z`+5H_n99ZcEOS+rmF}(ODZo@q3V1fAj>ydCU{i0jS|tc#Jc(oAA-nuvMnup|(V-C5 z6Q?xEDf4SGM~Tm-TJR}MAxH6rp1;C0emzNPsftlkXv|9cikCR2o9syw?w7Epyqx$i zx7C}_{51>kDAYSE5wlV%_s^hhvYS)#1TYGq?xfAVm^2GNUTV06rNehXJU@%ID$N!7i+C0j>2t z)NSmRm-2R381M+Sh90A$jU!-bk++rV`F5*Q#Q38DYI!pfz26118FTicV-X2h#4N1p z%a*ee2#?TqZ*mlYV6+RQb-^j;Q)GDowjiH3rJDIrl#nC`Ne***z}nvBLZ6W1(tjCw z3l*TLX`%aqOwasX#NrJI-|V84Y)sV|6=U(CA%oN`2uKQL0*1ETuDX}2I8 zP21r$w;HV4Eqjg7VvwmqY*yYJH%HD;`X#?yk%??39_$f&RUmb&VgNiXQ(`=Jq|S(K z;dW|gVsGwbwLL6RM}J!?TzGwy77J!cYVHYhmCm%@SQhROphJRXJ!9h=`rDW{vUgI? z+)5t5P&lfCyF7^pNsf+R0d2y?GqV8HgaXTs=BS+cc2TEyc`{NmU(=|hIIGTp^}7p& znUk|=rZ-%le1T#M{Stbj%>1s?Sp<{G8?jUPd0o>7(>LgIk$D}u8uCBajtlB%_`jZ6 zOV$w8)0E3uoDHe&?Gi=q%WIsyHYMiz{N!uU)xpcTs=Z zlKy>UKXd%`No%6_Ta)BpOd`!M0*VSzhb&*m%a*e=g|$SPiLXE2={aI-6Mv~c3K+ql zW*%}u>4$W@LvvKmumEp#Wv?^R>L-tD3N0e}CwcQ4OceyHn;`Uock7!EKAwW7=Mep= z8zo972wqFHJlBf>f}U+B|`@O=vS&J$=z9t*~~&an8+h(iHSt z4A%wuYUF3;qH`WGgBF1o(R_ZES4$d$<`O01UEkt)>jIY)Q9zUlc(jFQBHwPwim0&b z?@xpUN)%Dc@!@?%MF1drKM?38TFO3Rd64q$n#9T?ujoZN&cCRqlphlLJMtr*u}YTx zQ;~(qem>WL<^fV766~@4Y{n&Zc9OefIe+-8HAnFJMt!0a07C9KiJs2K4Csx!p4$md z{`!R#Z4w%P4S?Bn(Xn{pgA`iihGR|6B8$Q(m{DMn0US~ZQ#i1ipS!+#@&}GVIpM2Fck&uFw=Xtqp{OWT z$z(j}upc+V$<43I0oVv^6*17&U{0n1&-qpw2ai z_+aJ84A|915P9fqQe&EG(s;~Ad_!LIAOpvE)~puK?iWl}5BKBdML=VHXr#9^0qT~2 zwjBEfgBk~SI$nyK))5E6mUj(@HN0)pGl?m3+}K!SeF<&5@z>YdSh~zrUfuj+nHPtx zrKPwv+HLeEp5W@qDC{$0Pqhr zO;Vg?zL@13z^X1Vi5Z(aYioBa?rKk2qYe|ATHAAq@5%RpMA{FmKe}jLENL5cwNqGz zR+*S$lTzBPrO0JhNi6{J=k9TBwr(O zr2WbIVoQX*bgdnCzxOE!_0;L)CB&vY3`jqiS}7`4Y>Nr2vU7lMUTtu_A6`DTg+`F~ zW3jJ%F@$jfjY}PRqrDWbY7(zzg}Gw1{+AgB`YAw?BRlexuHF(I52>zZanFn|an)4q~^bl+Nf}B!?+8l%qyPa`yea;hGhb_CLLQn>i!DK@XdOu%#x zBHCLjJTkzHrMd~J=S9Qt$*;YoAOjm}BH`GF!niX|=^gE>Y1}?615gF6`e->;6vN~g z0@ysV8Pt-^WSa;SaP2wTfm+;Qp5i7dn@poSl(8ZNr4(&Xk7!(l*y6v-Rq>77G1L0| zzEMtRESzMrN6$DA)8g0HSs#KJZUB*EXCDMIXR8Jr^^|{L__kP_uP#IU&3F02D<{TV zdGtm4!~uJG_trTA03^~3E|EOSv=boDb}7fyZXy!y#*mLOIKNp(XvflANJ@)(V{SEC zh|4KHNO`)(7?>oWwR&Fqji&c8HB-kEw3AE1FZUyUn}_}0Jy{w;N?k-2;>1!^aFc7L zNi~yT-cy^e>Mu(Felh?Thg5~OO5)j9T21{%M{<(>JMVS1w$mwIvlvKXnj z$Y6msmprIQaAQijD~;>$&@=N^CuPgxId$1uOTA+yJs^dKCYC8+W0{qoiV{@B&9{jevZV+v$l^fmicRP?JigFi1H$-<~ z_oo&O2qE)(?6Os^nHhurFhisu;v%Cnr)VF>HD=?ucYPzhwU3cv(Y@nCS_(tmlOP7> zq|dS{2_Wctu*!9RLNq9_z9$X@Nko@|aUM*j>Gk{^2j{U0nskwi?J46oGJL;BQwdfZ zytJZBbh!vk`8#p{)|+Cl4CDRSWQ(HotEbXW2Ar|Llih?`!z#3OjPsXu2dH%i46RwW z^(n4|StE$Cs`|R}%ck}GDT7R|{hZe_)|$y;JHS1$u|GKyiW#0Wz=n=*w*Wj+IxEJe zKwI7xg=ZG)kZ_HrHjGp0CYCgN^bvl0JS=JLCl~=^ADVMO=KY06} z7c#N_E(+6gd%_>2wK_Q{M)Orj*x)q+cmOP(FPde7u{q<=Q5Y7i@jw04*JE?aoNs!w zj2<8Om;CluE8(B%aGaiwZ9r9^r?E7%QlXzl_y59iKQ##dLCnj`kmL$9#QJ-ho?xz~ zK%AbmEZ_ot&x5+bE3H9xq2m{P^I-#F69z&TJyCIb9w4ehYVCLRZcGZ~xXqI0=>W(U z#XDn=Jee_qsjU${VQHDOc%KSb2Bv z1`J-5sa#^fNK&IIFXkB~s78!xO?KjdhN(jZ^zPmk)+MSENo=fy!7qoae5xx=^GwlFj zLeqmfrxFKG?<(xA7}F%&OfJrW48Ia{6L5nl9@_fMaBWMl2ignL6v_!F4SWB^E9|`n zsgGnQei(g|On6p?wO|Vo z6;$u7^w14Z5PoV;{5j{ZlSlTw!uj=H6z(g zWZ75Oh)EvkNk~pRWT(ktaxY=->RI%+z8jgENiD^N$+vnfClUJ^!;?9cea#AJxzj{L zi(Z8-{LdAK)+{3+>L7ky=AbhtQ3$_WSYu7K=#JDspjm9L^Bh06aY!l>-|_2Qd=`87~6KL~U?;6J%=G+TFmhChjkMQ)=v2*4<@%`Gr zOXgg4ZiI1J4}6zxlm4CkPFbEKvbHU6yLj#?^VCgiKKl4tB>4wM-j~`Kw)Czksssy| zH4BI}N%0w!-{f$4_ifO;GgGIoS0u>_a%a?sC0-WTTha?>oEd`jvodOy=&8zW53F|* z2+F}ONmRvv5zA&<{A{E9Iou86yY-4Ql?|s1YwMB)8*Pi6>e%Cr1ef-Ig@=E2#m!fJ z1yq~eE&R8{VE!@DHq7K9tW8+fZ^`?5(W-9Dl#o85sTkWAX}t%d)?Jryc?F&SgE*6U z$FMB-iA!0#F8+I2JG=Jeev13<)rkB18G1xW>kM*MooXZ<)unOHYQ&6dB|Z;)giq@L zGw&WZx1=e?t9(vVP<9$^@v<{oE2~Ah^4?U7ytef54z5wqH)s7&-Lmk5%_TSbr^4LQ?ze@WTux_ChvO9)_hmH zU0{vvInWN}ixT~eK4o2=bJ2WcDWv)PsaA{r7BDAJeS=2^bGILL1*{<=gjMq?+0La00=!o6?lWb!)7W$ zx}xJ@mh3lv4ZKQdd*wx?uv*nh)On2M&?h6c&8$a%7fJ%salq1?CM%htdPav`Sc5{lLVjfAS9mQ0111`hQwxG z^gtRLot5S`G#W6qlv;rZtksb$6BMOtwuqQ!MoJtVAA}!+9qj|v)v_YN(mZG@9xHZ2 zqo6>@;8@tLX&-fdD{-)t=Y`w%?6b_8acC$+S zM5HU~C?B{%g{kbq{2bQ(ZcGG?(|TXKosy{MPP=q0_Ut3z@QgXPlY@q1 zJlR9W4UTIadMO31AfY6${QR^YGOs;Zz-uRF=qd&nx6Gn|%ce%o%i86xO_H8X}#qI(#i!Q@)D>e#AO065D_5H}MAEblXCL z8H)`G>Y`Pd@gsD&^@8!R2F(0~WEue+O;tSc6k}K@*avGUJ&(7&7+Sc7UvQNz66cPA ztx~;)fNRwQ6}_AZn5zac1NSvl%sjC$hCv_)y(}P;DFN7&w0XQY=Xz*NWBPAtTwBSM zQl~~dK9{TkFlR@>M00`Uh(81so3J`$le zwUePa&SoQ0WF3a7%NsN+v)UqQKCN*bIssTztZHR#U5cAxSQFt$3ja66d!6WjnZh!L zsAbSn;$T9?pNkQrKGGMKiw+hqY^CuC5uwz5G;gtiqbLwNUR-=Ks&WaEI#;jyaXiG%v3p zA94TQkxZSLeCyXX#)rNo*1Sg<*F6ZXPNMncFrry}uVgmT3+lnOw=vO#2T1_1LTgi? zNK4{1Xlt4KLxGrPlnC)Hn$@MG9Uaj@NP5Pn4SKvXCrR1X;m>5u4hh-5B-$5D;3qVS zHySyC3BiZt*!UwTz`+;GHFxxiw?zW~M*DHG#A!t3tvyh^utMQ&r8AS#zsp0mUa)kL z5|HhRr)MHhI7~Wjot1DRwAcXA9|4*ETQ8(-t2U&CdljumDz40gI1~j^8`K;BVw_4yD*MFfEs?)gtyfFau{W~|?r|T3)R4?RM zhZ@yt1gbEeAW@h})W2&533m0dw?}%$y7-v!o8N5EzVjs%g)dLdvU)wOYV4 z2TtW9)vc0GCL6z5z%L)gM{W0(MEo(unaW!vICOBGbf+lz$EeA|!aEy+?A8ny zA}9_JPfPwrOn^LE(CR7DQL!*e%9L0Ml^p3Xw-0h|*<5|zL+1j@4rP_a(U_327w|%} zb8Et}8gg^2XQC?ux_P#o)C@FpShN6xSp>9cEb5VKB-)dPVA5hoP)F>#)}pxbKskSO zi$jOq7S0qCSmhV33d9x_vGU==-fB#0572ypfv{}}U$A}wZ8%g!(TY)=-N028P$Mzh z`qHk$Lb|LCdaD7X1Mmu`P7}LoG$=M;1gqVS!k$>iT8)RJ7FvR$^wuuJhB7Sn=h=B9 z@x@xHS~OH$6Itd3uGCc0+18XrXE>R4L?4BwS<8symWV*aP@*3KCgiX8PpJH|kY z_964yGD@D|l2Y{SKy+IAA(9XKdXhS{|DF-E6>&D}`qb-C&|JA0i+#zdKDimE)LT)Q z!5J_3ZuFrl7`eM@9U#s~&aN)3LK)dtwYdE#DJOBnbnBX(5g!w>bNiu+WgqB+ivu;- z{Kiq`wn6|yu9PhH!XW?3^Yl#_f>nhr;Br{~oC9pVcF){nYdZ+=NKAa7J)!qv)(sp$ zs!Pz6*TETR6$CbbgF(`eU_H*2PtPy~X!2S!Rpgc9^`+D&mTYIwKf41^>F&@$2)vg{!BleJfVyeozFPGRaL{j8RzUId<3L#&zHx97bC)&SZ4tRgr(9^1 zT5TcS-F|vxT;9Xx@dtZ-@R>qBHyDB(it+1RQ_$aS#+-PMC$4JKtAl|=pq4uLDPta< z@&V$KTdDKlrK|atN?)0O!l|`cxqlO;{ehXHw))^Y59W3m@X28y>PsKW1$mgm%#~L$ z6qG%-OTm+T8y$Niym{(6_|hIF&S-q%d9eGbDKF_iKZ#lz?ybzvF6Ix|5oE*tlxB-k zFxu!~+0eF#fsf9gV!0bA1$r!%R(UzY2>~oQ@Ziude$wAOK|PzXfTA12GjU4z=28NB ziBy$j&Afk4;^8mRy zI;rqBmz3JZM`PkoD$QBP2gN-C2MUT z!%rv_&eAEsb)5zDohc?N`PK3D!(2*uvD5VzlcUnHjU_(J*_lHkhkTYy_4`)Bws184 z!Y>}eGvmbv#;r(mQXi~$QXe=75`a(QIz$P9(mzruR<%SI++_NaWTTX#C8P2p@<`T% zVUb!7)huEe^6|SaNP_wJN8W|t7_+Hw>IKrz;frwv<);zwprh;1oF0{eX++#w7Q&^Ovoy^Y5IMN@@*Ycy$%SasQM zMhB>I!|S0x2H*&yq6!K+q)%tb6{f?CHPVR?47NBB1;7yWh9b|Xh>E};X5F7~1BC9r zZr{KSK%9YN5fDzMxLZgAaioOYN8r}&2H@s7l(mkjWIH+F!d-elEs;+_{^2_jTPOjO|-|KjVt(J!W& zrkYAHlxDgJ{1MA^igZzC^XEzGk}^hPqhMKITg1$;u)aC!+ZH`_8H6pht~Mr3inS@6C>)zPsRZYOzXty**^de%;lKH zxe;QrmKSPr&%u^Xs^%28&>Q(QjeV5lu8>eiHBKh8icLXnt4LS%b3#tJKE1ir9isj! z)#kWpxo3T5l#eN2)#}-#)!1cf)iA^KO=l(Z1p;8);c41%Ggo%Z(?UAbXAAc>PQA3@ ztYz`%H|z07=I(!U(%AEpjiT7`qZgqyN)hq1La*O{&u++1L06Xy6M|X(0eQ8MjRRin z)prM#%s2gL`aumIR!nKP*rBm#-3OS4UP(%sW2=!9s9i~}z;{Gt@cwJj>}=b7Vw72H zDFn1{q%Po!D>%1yS)L>+D%8Dc@Hh1nz5N+*#Ivju4`@tZM_m_rhO~+= z09zS#ebQ{hy#a^i_JxMAn!P``5<$KIWmT0+O5h0r`HiYtmTiPMWf+7o02RIWgmQn4 zR|J24cyCa9+@|Ykqn)_%ZrLHkz3MXoTMF2z%MUV@2emYpoS?I)HU&CMad0wpxZK;g zEZFMgBeEFs#`|>1CG6RQy%7y)OkGcz`+V@r8zD#_Q)fnOh>i!=*V>vtwoznGxhg9; zs<51JVI5Fmbp|#f&4%4NQ-GL`Ei5!wSyB2MlCJo8ueClUTee|#M8*ZY$V{Ik{RMbZ zCeVp*y6gncyn?3(9}LH4*P%fx`sJyR@9QZsn{tgP=!=coNcoWxmbAxGG|MLieaAJ7 z(hfRh5C=ai$hJcy@|bW;tv%)MNW=OKXxcKwg=+je0SMl8pkXK`~W`; z^!vQi5z%aB= zwYKH|n1#NMr{0)Rn#_9y<1w(?V<9JC=oVdEbD zn_d95z5^Xx;GCEXe9+Az!1aXQ$11011C@RRKhu4%OZmKtSXO1fqQz{3H4na4JtYPy zc9b(hEEhG4x(+e*DHXDobnK z331rjUosV~8}m9F(MWxUilG0OPpanYr_LA1vaf}vs~&1y@pkY)l=8`79_@~()Kd9 zM7tCjI>G|l??BWeiq}F*<3g??asZmEN*w8tPQx{RPe`3y3BKfj*vZC>f-D%4T9yH~ zG;RnTICd~Tu~cPygakOM(RD~W!qt3sy%~C|q<3DNCS7EMC_M66EK+4swDd?Jqb9Wy zQj*SGOLW_dt1xWhah!C3RmXGQawMPAH0y;Y8*m!qR=;#(B1#?=tKj4A+pcf8N%lvn zn1a~GpG>J@{UO-Fz)u#ITk0UMRHH|i$J9udmW5o@HO*iH5dtW#N);TZ4gWdxxkPuy zXvq+qxca`OgPr;4ab>8Sf_WmDia~i(AXy=f{f0cxqEXW_qmFy+^$q76uKVza^NsP< z6J&gbQV{9$?gzTxRApwKu3zkwf}-XkU>ufST4D{ZVRnCYT{xm4r(mhoz-EB?vz4+P z46n>Gbw@w5Q45e7lxIg&^vJnvvGE}+J*lS#zFE*|_l~d&u#@@h)Xves?Em|En|h|M z@u42Cj&8{d#7h40a50PN?*(*5CsFIr>l>m6R!^fT;A}xq&+2<@QJfF}b;GV`%cZ3T z&Ua0EnsXhNk#}f6XO89>?VBkt7OkGkABYX){+W&Z*BkK5MZ;0Zo+$IkgI~j;@~;0H zs=aVs_TC(zpHE+}FXWt4jZPtafq?o({7FP5o(^Pg4(1w?*d(joHu*sl{QklC3Dxl= zzn829@pd)?)Z#3W!|$?fhNN?^qN9izNtE;ZYD(}f zj*W?0TjsP4+WWj#fNiEMeJA`R7e3-Y?Wst7?E5LnCm1d4A97ZAUoe&iODXTj7DqrB z@70R=hv2U&+wvf!hi0d*;J)Vz9Ea!{1>?84!U%|Aq9gPM(g&cSK?D&rP21`v`_2Ka zGV8^zhvab&z%-`sz(tr6mqCis=*KyvR!vqS*JwbIhpQ%!X#A1yu?TppaeZ)TI4>w3 zBZ1eU)k2-4S)SBSd5Gi&QY<2yb}>7P2N%+<^Rc5I!1=f|yDGyABv6To)BVGDHftto!Di;By9*9HR2W7&1^8 z6cqj(r=an?=ks9k=8l`VJ9GCG7 z40Rox#()-0KWfR;MVZib}+=8 z6H>hOC8c5AAbo3#1|`Nhi`#-y_W)d-=Lnq9#RiXkc`MPJ?1}*veNI{Y6i@Ydp@8FW z*CRkjy#A&5bS0{sM`#;ZsXZ*llBsTwJ%QIj9!F6a$o@ZrhPC)zReg7!T9~nZpl1ci>hOA%?z+X$-EjJ2QrnGLn~HX#8}5$-9nez zn9~u?f?Kuw!|W$N37CjY{EELcT7Yp@q0nt&7^y6{a6=f)#(*(SWVBsb``qMTST!=( zCBAua1atp>ccR$}tKAH2;9DK`$n90ef3uNp5YmcYK)|ZaN;w=`J~Rt#N4oitxH?5- z*v+0V&Z0Jn)GVx@xZD za-ncx)BjSULWN~1B|G<9;R%2oTzL1X%!Lbos;rL z%*zR7y#S$geo<4m)`N`jC(U~ zqpKaBH{rhHBX5}wTRl`>0Xi_ht!p6?@=VA zYtB&Lrj?Ix^I?I=eheT)Uu2M*n;ow;*$YhD7~{5Yh7*_5W;=2{t?56M3Gw<_?;Uf^zA z+H|)-gKDF-5*Ke~C-0(s(YH*KW}Y0&ojIx_^5uo~*Qhs{s~^BUy% zB6o8=>)8J;wICAR4RQe`rAzBXiYhTBg%*hJQD#HhU;w~qUi-`x_1C4^&&O}?1nZTj zi2V{vh9U|qs!r>^fHH9=NqH{i;%_2?>*cor9GB7K zDJdl3E&P_0yTRSEvoH~$pIcI{O?ESnU3qGMG>L-?1@2Y2`-Ro9O0yGWrM4HI2Q#dp zoS5Mx{6M{Ln>*A4YXi>B7CpAVfDm+Ul}2ul89-OdF;BxpDlJ|zcq;QaU8~@?=Sy^W zMDKAFJqjCakt7$1WH|c7_`)WCVw$Ucm0LP|CXxhljFfiF&EaM6Yl@+AU9ytXt5XDF@@LP~HPD*n_um zItfU(Cdy(VOC*2`2B}Voo$XXR5o^y0Hl8&m+~mM>d3^SB?J79wlMmnhcHFRx`Beqv z9XIcS*<0Hfd}Yjfj1lPz?F-UE!I8HUMM!@aS_z>@Jq|i38t{DE^?aLF6JJQvO40lu znSQ1a+yJmL#GOV)&4cZ|>Zf0ohOm^u6Y*OXR1eVwoh1Mh4UKv9%T zjl#m9ABNy~uvO1cD%fOYTn@2%9`#NKa3;uFcD8>Aj=Hc94FSbO=;n*JsljpZx3dp2 zs%n7hl~u5Ney>R~`_{x@rSgl~-s*0S6(Z&Vd1c1riBV7wbK36QZqFZ`0~`sAo$o=F zD~OUFAzjT$gXYRHSJuR#>oh*mHypc~X2*A()&Oa4UBi6pNw=T_yuB{>A$nX?jT6Qp z`#K53=Z;mXkXLXsuGOIal$4Fp=Kx`I1H(G~n&>9ID1={yL4mC0*)uWDvje*V#DMt$*zL|?? z5W(3Fr|NKlztm{3zi(%@bGW25{?wS(7{sGW#G8n`T$iyTGpQV>iCNC zU%8lR-xX#l1+iTm?YeX4R9EuTMVL_PINN@2?|upwwA|Rqs2Kw$}Ix2W!>VrA3$VisC!U z3F~H?P>ALeY}r~W$kcwMO$-tnhn+g?eyzt1S$vG%9#d)$$C( z3>)bJ0@Ywo7Vdd%H>k@DnA86mbJu0}<38iSbg~XOd?1zynq#(Gb-3Ly4hV2L)5mbc zoQ3Vdg?RMH!wnQ!y>AS~oquuw#26|LIOG_zR-L<2Q$rHDhLcNgedS48mf*+zQ9H}` zSc+X4UiFae&m?wjL&6SjsRqht!`Gy%p$Jb6qOc9mu ztADF&{K=}`f2I2O7(q1h8lMgDEvfJinRD^=xrVHKx(xx6`!(8KOyF~k)hu_4^tc-_ z#u?)aQAcp4q;5#FFRXw8C}#sl_-p=uXv*qo5{Te3@;!p~zFk~#^eO4+nMt0CCT!X3 zGL4?%Nwv-sW*y8!^L>hS?Kk99tM_@eYBec&({=12*~?EQ_D!r)kH@g*-;rj<~&Rb$ApIusxo_Bz#7*Lmrj^e@xvoskpBC3oeX* zWMpsWrNJ?qd6{%h@PUKmkA-``r2rvZ*v%{f$YLjwnhxkoso_UI;XoT z7*NiP_GxSI(?J{<`$Az4KZw@N@$O#K0cDwm5pmdKqpphJy`pGki zFl~PO&vb6QF_d;ykpRS_WOMDFqnsIj;iNhk`i@p>w|XNpf~Yh+Z=C&5M4lDFN7AFz zUaYFZkiTiCUF30n;HKGv-R|4H@?9+zc78dvhP(fLB$p3Jt1^C2L2}^#33Kh+e*ffB zY=3^eh$H6tvr4h^=!ivBPGLTNO8I_Af^p=@phJxT{&8`(9bNc3*BKqwk}P+EAF$oC zgTsRuzCip*j?M0+#k@9&KmI@8_HOQG&nwpi{J#wFo1whh+sDoL!v1Kr8dxdnAil8>ejHl66B2O=;+wE#`N!cX6PBr zmQfetR6PWJw0tB(_%~o60FZ!={vUF2Ba$AxPjlqiXz^%l}H_ zL&A>;^C=L+?m$h?gx&qgeFgyU+_CmI6{6P7hk?qE!0u5HAqwf#U25pr{AITWC;+XK zUZD35ACke~PXUl1q~moykRj&b_HSSiaAxWJo(Iy3Q&M!*KKK#%J-OGFfoh{tCfzvKD|yA}XKZBT1CMk5eW zOs}O0!z%<19xEG3-X@m73O2tmb3K+t&yVqdA6fn~sPxw6z&enVCly1VqnmIW`2n&A zL6&;8d8hf;2K*{|=1$|PXQSZ5P05}+jJV~b)T|iF$Vh4Fjv96>kF7PO4`v9-R ze2cnY$~oX7J;2|=gx~;2Zb8iU8-&@+G`rqLlwAKJJcRrsm!NW+roZuuJe8-!S znwQqVnYM!ic)sfhdXAR@?(W@P>6(|IKz_#&a$KH+2zjoT25!EyUFy2?0C}J00qdJa zkXQqETyH!!otv^i{ys&cBCu!=AXZL^D`&#<>!UtPqNyV>idWXB97 zuP}Y&*!fMJMU;0|E+LhQ3>_PFszf&MI7%dbg@1HgRenaN!bAh$A%l}f5>--;zw$Tc zv1?b5En#XG%P5(I3n9g8mRn9rmY7-ma0___qa8W(7FS*-Hj=?!a+H-Frwj>+Sv#=& z>)Oyhl@HW3T4BRCuAr`ORqKrl2Z2R(jsx$>NC3m@kRKBFd^!~@ioaMe3`2iBC5V>d zu{Vr++cXJ-a2x@sMT6bm=g`p*6}(eiV}RRm&Bb^=_=TW0AdgFtkwg)6A_@eOV+l3cn#%vv)|p2&aqV$@p!$%8XIK)b%|Hlbp&<#oMFBBDWRuN`ASd_$5y+DO z(ZT}+B9+uyhzNs#xB!ArB?$sT1Qj^!SSkX+3i^PEE5(Xdi%7M7lhG1})0~q(l6>;L z_cu4Q+TTJIL}kL-j8A)ZccRS z!F6oJmerk!%*!))~n_C;4wnJHN)q4m>ykX7jopGl%2vir0R-N3k_PmOlJwY%XRjJ)r3I&CVN}I=rn~ zY-5s}rnG+pP8S*Mqx#$wIo)>hXw5Nu2HE)!NBM8fwCCgeTpuX&arcdXT|EC{Ev@hn zv9!}kp{*4_sUiKsN;n#~IFz;FW|Ndh98R&?_8D%Y(AIrV=C#tej${3K^QmHZK2da` zk#3*;gSFIjK#Rih_o9}k_*@_Ad3#AjO3FM-YBaUX!x{{h;-ADpB|)Ik3xn!#3wGiT zhcC(|ssv{QWw&4HRIX=A$nR=m7CBWfpIklJKJ@*2?{MGWXMg%E*)QP~YvzT2P5U^ADLKV_OQO;p zJK5*?w%;e1yO2{!uZ@cu$fB}N1_;iSanCl^BnUGG>*QRCg|Mwnm(?CUHh%8yVG3p7 zy?Miir^M;LU+9Zso%{js6SQ{?Ve-jtcH88?Fw~S!Q`*l-yqM#Pgp59AgUi=6j@@1> z!VraP$a$Zg%96?z;f4AkJ^4D%^QsBkar=wE_41shXU!{V@7zQntNk}P1yK3uz#!$F zkm|P3O3vBgR~3ur=bs#sS=!C{Q zcf7041PVo>3!+19=Xt4)S5imcFvQa>K_i_u7#`-yT4;WxTL z+t~ZY$%8!`3GN+&>x70E^`iP&a^Le~liZPAtH!!VKA|0c#&LLV-a<+JWFXUsk&$dP zSuv+6sgA#Nq@Nf0Xp*j%C9UfG4=HS2-eMcC8tfIkTuWN_N3{^U^J3*(kGy)XbL>=k z?vH-bd(`u~x5=j)6b{D}31)mfvCyh{49lURc1YrdN79BcFZ+C$RSDsBRU|(8K|-VcnWFu=OwrsJjA{N;#kM>o>V< zhTm`npeIr`2t}lalHdth68y9QU`v&y$F;Q(yAJ+bW({_g=$}Y{&t;e4D?2I*^3X+~ zei;RfKHF*<219b#L*EVsVGUr&9I7=SKnG>IpgJiX0Gv^v0*`>jwf5lhELj&6v~L{( zXx)e)d8m3mAOD1k&qn*0!&2mn5?jUQSq#~cQ~fQV!w0xkvh!G$=Yn!QDZ!LLAd zP}|BXl@^H7cpU{?iUWgHY*8v9mPo%`>gnKzpe9vLlWH)QZ~0gz0+lmqNT1ZnCo8vp zpfwDdsiK`!ps_l^U?s?P03aPF5}cMoG*)}>0{{cn?yC(dYCY1Z+J$^&oi$F-!OH~b zM`v>cT(ZN4Yh|P43|wK5YrNbnc@qlIX9JL{2g&g7-LoN$CK9;h-V3W+p}y?p4r$2o z&>bHN(hapo>B??6a}cntX${o9)e3=^yE@vVR42Ta;EX^s1V+q;5U(NCUbK9im|H)> zG;qnL2JR;l1^pZhLtdczj~1|N5elG%!T`Ky$T3iD3^I_Q`gSV-FhjxT`Kl%ho3%8_ zHjqF@1ef0&gl_m@+D8<+mJTA7s8>Y+z!W9haNq+=1=Xuu06;`BK(2~`EXweRn0h5= z<&UjEjDWIc2B@A60)RD2O+Q}+;s18&2O0UluAc+p!x_3T0|?PiY_S8EAMY$s`g@8$ dLR!$#b4G@NzN=v!)c}$J{eJ?0(P`DI{{x>J%EbTx diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a793..9b7cb4af 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.8.0-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index f3b75f3b..249efbb0 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -20,7 +20,7 @@ ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -29,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: @@ -57,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -114,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -172,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -205,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 9d21a218..3185a43f 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -19,12 +19,39 @@ @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions + +@rem Catch executions from older scripts and ensure they exit cleanly. +@rem This can be removed once we can be reasonably confident that few people +@rem will be migrating directly to this new wrapper. +goto afterSafetyNet +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +goto exitWithErrorLevel +:afterSafetyNet set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -45,13 +72,14 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -59,36 +87,26 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. 1>&2 -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 -echo. 1>&2 -echo Please set the JAVA_HOME variable in your environment to match the 1>&2 -echo location of your Java installation. 1>&2 +1>&2 echo. +1>&2 echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +1>&2 echo. +1>&2 echo Please set the JAVA_HOME variable in your environment to match the +1>&2 echo location of your Java installation. -goto fail +"%COMSPEC%" /c exit 1 +goto exitWithErrorLevel :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel & goto exitWithErrorLevel -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega +@rem This label must not be changed. We rely on old scripts being able to jump to this point. +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% From 285acaa5e8a1e6118be0ecb10b3147a5ff5b93de Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 30 Sep 2026 14:57:45 +0000 Subject: [PATCH 2/8] build: target Kotlin language/API 2.2 and clear compiler warnings Language versions below 2.2 are deprecated in Kotlin 2.4. Also replaces the deprecated -Xjvm-default and -Xsuppress-warning flags with their current equivalents and silences the redundant-conversion diagnostic emitted by generated validity() code. Co-authored-by: Chris Bell --- buildSrc/src/main/kotlin/knock.kotlin.gradle.kts | 13 ++++++++----- .../kotlin/app/knock/api/core/ObjectMappersTest.kt | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts b/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts index 982cd972..d5ddae10 100644 --- a/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts +++ b/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts @@ -1,4 +1,5 @@ import com.diffplug.gradle.spotless.SpotlessExtension +import org.jetbrains.kotlin.gradle.dsl.JvmDefaultMode import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion @@ -14,15 +15,17 @@ kotlin { compilerOptions { freeCompilerArgs = listOf( - "-Xjvm-default=all", "-Xjdk-release=1.8", // Suppress deprecation warnings because we may still reference and test deprecated members. - "-Xsuppress-warning=DEPRECATION", + "-Xwarning-level=DEPRECATION:disabled", + // Generated `validity()` implementations call `toInt()` on values that are already `Int`. + "-Xwarning-level=REDUNDANT_CALL_OF_CONVERSION_METHOD:disabled", ) jvmTarget.set(JvmTarget.JVM_1_8) - languageVersion.set(KotlinVersion.KOTLIN_2_0) - apiVersion.set(KotlinVersion.KOTLIN_2_0) - coreLibrariesVersion = "2.0.0" + jvmDefault.set(JvmDefaultMode.NO_COMPATIBILITY) + languageVersion.set(KotlinVersion.KOTLIN_2_2) + apiVersion.set(KotlinVersion.KOTLIN_2_2) + coreLibrariesVersion = "2.2.0" } } diff --git a/knock-java-core/src/test/kotlin/app/knock/api/core/ObjectMappersTest.kt b/knock-java-core/src/test/kotlin/app/knock/api/core/ObjectMappersTest.kt index a8b91d68..75f1e3a2 100644 --- a/knock-java-core/src/test/kotlin/app/knock/api/core/ObjectMappersTest.kt +++ b/knock-java-core/src/test/kotlin/app/knock/api/core/ObjectMappersTest.kt @@ -29,7 +29,7 @@ internal class ObjectMappersTest { assertThat(json).isEqualTo("{\"is_active\":true}") } - internal class Class(@get:JsonProperty("field") @JsonProperty("field") val field: String) + internal class Class(@get:JsonProperty("field") @param:JsonProperty("field") val field: String) enum class ShapeTestCase(val value: Any, val kClass: KClass<*>) { STRING("Hello World!", String::class), From 45158e4ddaee3478e0b7a8f8cf5e7d19227caed2 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 30 Sep 2026 14:57:45 +0000 Subject: [PATCH 3/8] build(deps): upgrade runtime dependencies - Jackson 2.18.2 -> 2.22.3 (jackson-annotations 2.22) - OkHttp 4.12.0 -> 5.5.0 (depend on okhttp-jvm directly) - Apache HttpClient 5.3.1 -> 5.6.4, HttpCore 5.2.4 -> 5.4.4 - error_prone_annotations 2.33.0 -> 2.50.0 Co-authored-by: Chris Bell --- knock-java-client-okhttp/build.gradle.kts | 4 ++-- knock-java-core/build.gradle.kts | 18 +++++++++--------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/knock-java-client-okhttp/build.gradle.kts b/knock-java-client-okhttp/build.gradle.kts index b9be04b8..b7fc4e62 100644 --- a/knock-java-client-okhttp/build.gradle.kts +++ b/knock-java-client-okhttp/build.gradle.kts @@ -6,8 +6,8 @@ plugins { dependencies { api(project(":knock-java-core")) - implementation("com.squareup.okhttp3:okhttp:4.12.0") - implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") + implementation("com.squareup.okhttp3:okhttp-jvm:5.5.0") + implementation("com.squareup.okhttp3:logging-interceptor:5.5.0") testImplementation(kotlin("test")) testImplementation("org.assertj:assertj-core:3.25.3") diff --git a/knock-java-core/build.gradle.kts b/knock-java-core/build.gradle.kts index b142bbfd..a865d87f 100644 --- a/knock-java-core/build.gradle.kts +++ b/knock-java-core/build.gradle.kts @@ -17,16 +17,16 @@ configurations.all { } dependencies { - api("com.fasterxml.jackson.core:jackson-core:2.18.2") - api("com.fasterxml.jackson.core:jackson-databind:2.18.2") - api("com.google.errorprone:error_prone_annotations:2.33.0") + api("com.fasterxml.jackson.core:jackson-core:2.22.3") + api("com.fasterxml.jackson.core:jackson-databind:2.22.3") + api("com.google.errorprone:error_prone_annotations:2.50.0") - implementation("com.fasterxml.jackson.core:jackson-annotations:2.18.2") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.18.2") - implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.18.2") - implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.18.2") - implementation("org.apache.httpcomponents.core5:httpcore5:5.2.4") - implementation("org.apache.httpcomponents.client5:httpclient5:5.3.1") + implementation("com.fasterxml.jackson.core:jackson-annotations:2.22") + implementation("com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.22.3") + implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.22.3") + implementation("com.fasterxml.jackson.module:jackson-module-kotlin:2.22.3") + implementation("org.apache.httpcomponents.core5:httpcore5:5.4.4") + implementation("org.apache.httpcomponents.client5:httpclient5:5.6.4") testImplementation(kotlin("test")) testImplementation(project(":knock-java-client-okhttp")) From 8ed79f9979dc12691714e441674bc72e12fd0a4f Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 30 Sep 2026 15:01:28 +0000 Subject: [PATCH 4/8] build(deps): upgrade test dependencies - JUnit 5.9.3 -> 6.1.3, junit-pioneer 1.9.1 -> 2.3.0 - WireMock 2.35.2 (wiremock-jre8) -> 3.13.2 (wiremock-standalone, which shades its own Jackson so tests keep running against the 2.13.4 floor) - AssertJ 3.25.3 -> 3.27.7, Mockito 5.14.2 -> 5.24.0, mockito-kotlin 4.1.0 -> 6.4.0 These require Java 17, so test sources now compile for 17. Published artifacts still target Java 8. Co-authored-by: Chris Bell --- buildSrc/src/main/kotlin/knock.java.gradle.kts | 5 +++++ buildSrc/src/main/kotlin/knock.kotlin.gradle.kts | 8 ++++++++ knock-java-client-okhttp/build.gradle.kts | 2 +- knock-java-core/build.gradle.kts | 16 ++++++++-------- .../kotlin/app/knock/api/TestServerExtension.kt | 2 +- 5 files changed, 23 insertions(+), 10 deletions(-) diff --git a/buildSrc/src/main/kotlin/knock.java.gradle.kts b/buildSrc/src/main/kotlin/knock.java.gradle.kts index dfbacb86..8f5e81ff 100644 --- a/buildSrc/src/main/kotlin/knock.java.gradle.kts +++ b/buildSrc/src/main/kotlin/knock.java.gradle.kts @@ -33,6 +33,11 @@ tasks.withType().configureEach { options.release.set(8) } +// Test-only dependencies (JUnit 6, WireMock 3) require a newer JVM. Published artifacts still target Java 8. +tasks.named("compileTestJava") { + options.release.set(17) +} + tasks.named("jar") { manifest { attributes(mapOf( diff --git a/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts b/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts index d5ddae10..3be289e3 100644 --- a/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts +++ b/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts @@ -2,6 +2,7 @@ import com.diffplug.gradle.spotless.SpotlessExtension import org.jetbrains.kotlin.gradle.dsl.JvmDefaultMode import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.dsl.KotlinVersion +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("knock.java") @@ -29,6 +30,13 @@ kotlin { } } +tasks.named("compileTestKotlin") { + compilerOptions { + freeCompilerArgs = freeCompilerArgs.get().map { if (it == "-Xjdk-release=1.8") "-Xjdk-release=17" else it } + jvmTarget.set(JvmTarget.JVM_17) + } +} + configure { kotlin { ktfmt().kotlinlangStyle() diff --git a/knock-java-client-okhttp/build.gradle.kts b/knock-java-client-okhttp/build.gradle.kts index b7fc4e62..597117b9 100644 --- a/knock-java-client-okhttp/build.gradle.kts +++ b/knock-java-client-okhttp/build.gradle.kts @@ -10,5 +10,5 @@ dependencies { implementation("com.squareup.okhttp3:logging-interceptor:5.5.0") testImplementation(kotlin("test")) - testImplementation("org.assertj:assertj-core:3.25.3") + testImplementation("org.assertj:assertj-core:3.27.7") } diff --git a/knock-java-core/build.gradle.kts b/knock-java-core/build.gradle.kts index a865d87f..733c2c18 100644 --- a/knock-java-core/build.gradle.kts +++ b/knock-java-core/build.gradle.kts @@ -30,12 +30,12 @@ dependencies { testImplementation(kotlin("test")) testImplementation(project(":knock-java-client-okhttp")) - testImplementation("com.github.tomakehurst:wiremock-jre8:2.35.2") - testImplementation("org.assertj:assertj-core:3.25.3") - testImplementation("org.junit.jupiter:junit-jupiter-api:5.9.3") - testImplementation("org.junit.jupiter:junit-jupiter-params:5.9.3") - testImplementation("org.junit-pioneer:junit-pioneer:1.9.1") - testImplementation("org.mockito:mockito-core:5.14.2") - testImplementation("org.mockito:mockito-junit-jupiter:5.14.2") - testImplementation("org.mockito.kotlin:mockito-kotlin:4.1.0") + testImplementation("org.wiremock:wiremock-standalone:3.13.2") + testImplementation("org.assertj:assertj-core:3.27.7") + testImplementation("org.junit.jupiter:junit-jupiter-api:6.1.3") + testImplementation("org.junit.jupiter:junit-jupiter-params:6.1.3") + testImplementation("org.junit-pioneer:junit-pioneer:2.3.0") + testImplementation("org.mockito:mockito-core:5.24.0") + testImplementation("org.mockito:mockito-junit-jupiter:5.24.0") + testImplementation("org.mockito.kotlin:mockito-kotlin:6.4.0") } diff --git a/knock-java-core/src/test/kotlin/app/knock/api/TestServerExtension.kt b/knock-java-core/src/test/kotlin/app/knock/api/TestServerExtension.kt index 1e667214..e70ab4ee 100644 --- a/knock-java-core/src/test/kotlin/app/knock/api/TestServerExtension.kt +++ b/knock-java-core/src/test/kotlin/app/knock/api/TestServerExtension.kt @@ -9,7 +9,7 @@ import org.junit.jupiter.api.extension.ExtensionContext class TestServerExtension : BeforeAllCallback, ExecutionCondition { - override fun beforeAll(context: ExtensionContext?) { + override fun beforeAll(context: ExtensionContext) { try { URL(BASE_URL).openConnection().connect() } catch (e: Exception) { From d06ae24ebc3116df130372fc872bff64fb647ccc Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 30 Sep 2026 15:08:22 +0000 Subject: [PATCH 5/8] build(deps): upgrade Dokka to 2.2.0 (V2) and maven-publish to 0.37.0 - Migrate from the removed Dokka V1 plugin to V2's Javadoc format. V2 can't aggregate Javadoc across modules, so knock-java documents the core and OkHttp sources directly, matching the old collector output. - Pin Dokka's build-only Jackson/jsoup classpath to secure releases. - vanniktech maven-publish 0.37.0 removes SonatypeHost (Central Portal is the default) and in-memory signing properties, so configure signing explicitly from the same GPG_* environment variables. Co-authored-by: Chris Bell --- build.gradle.kts | 26 +++++++++++------ buildSrc/build.gradle.kts | 4 +-- .../src/main/kotlin/knock.publish.gradle.kts | 20 +++++++------ gradle.properties | 2 ++ knock-java/build.gradle.kts | 28 +++++++------------ 5 files changed, 43 insertions(+), 37 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index b19b5516..382bbb72 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - id("org.jetbrains.dokka") version "2.0.0" + id("org.jetbrains.dokka-javadoc") version "2.2.0" apply false } repositories { @@ -9,15 +9,23 @@ repositories { allprojects { group = "app.knock.api" version = "1.0.0" // x-release-please-version -} -subprojects { - apply(plugin = "org.jetbrains.dokka") + // Dokka's isolated build-tool classpaths otherwise resolve Jackson and jsoup versions with known + // vulnerabilities. This doesn't affect the SDK's published or test dependencies. + configurations.matching { it.name.startsWith("dokka") }.configureEach { + resolutionStrategy.eachDependency { + if (requested.group == "com.fasterxml.jackson" || requested.group.startsWith("com.fasterxml.jackson.")) { + // Jackson annotations uses a two-component version starting with 2.20. + useVersion(if (requested.name == "jackson-annotations") "2.22" else "2.22.3") + because("Dokka's build-only Jackson classpath must use a secure aligned release") + } else if (requested.group == "org.jsoup" && requested.name == "jsoup") { + useVersion("1.23.2") + because("Dokka's build-only jsoup classpath must use a secure release") + } + } + } } -// Avoid race conditions between `dokkaJavadocCollector` and `dokkaJavadocJar` tasks -tasks.named("dokkaJavadocCollector").configure { - subprojects.flatMap { it.tasks } - .filter { it.project.name != "knock-java" && it.name == "dokkaJavadocJar" } - .forEach { mustRunAfter(it) } +subprojects { + apply(plugin = "org.jetbrains.dokka-javadoc") } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 48e20c36..529f3ad9 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,6 +1,6 @@ plugins { `kotlin-dsl` - id("com.vanniktech.maven.publish") version "0.28.0" + id("com.vanniktech.maven.publish") version "0.37.0" } repositories { @@ -11,5 +11,5 @@ repositories { dependencies { implementation("com.diffplug.spotless:spotless-plugin-gradle:7.0.2") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.20") - implementation("com.vanniktech:gradle-maven-publish-plugin:0.28.0") + implementation("com.vanniktech:gradle-maven-publish-plugin:0.37.0") } diff --git a/buildSrc/src/main/kotlin/knock.publish.gradle.kts b/buildSrc/src/main/kotlin/knock.publish.gradle.kts index d9b68306..2e8ac122 100644 --- a/buildSrc/src/main/kotlin/knock.publish.gradle.kts +++ b/buildSrc/src/main/kotlin/knock.publish.gradle.kts @@ -1,7 +1,8 @@ import com.vanniktech.maven.publish.JavadocJar import com.vanniktech.maven.publish.KotlinJvm import com.vanniktech.maven.publish.MavenPublishBaseExtension -import com.vanniktech.maven.publish.SonatypeHost +import com.vanniktech.maven.publish.SourcesJar +import org.gradle.plugins.signing.SigningExtension plugins { id("com.vanniktech.maven.publish") @@ -12,19 +13,22 @@ repositories { mavenCentral() } -extra["signingInMemoryKey"] = System.getenv("GPG_SIGNING_KEY") -extra["signingInMemoryKeyId"] = System.getenv("GPG_SIGNING_KEY_ID") -extra["signingInMemoryKeyPassword"] = System.getenv("GPG_SIGNING_PASSWORD") - configure { signAllPublications() - publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL) + configure { + useInMemoryPgpKeys( + System.getenv("GPG_SIGNING_KEY_ID"), + System.getenv("GPG_SIGNING_KEY"), + System.getenv("GPG_SIGNING_PASSWORD"), + ) + } + publishToMavenCentral() coordinates(project.group.toString(), project.name, project.version.toString()) configure( KotlinJvm( - javadocJar = JavadocJar.Dokka("dokkaJavadoc"), - sourcesJar = true, + javadocJar = JavadocJar.Dokka("dokkaGeneratePublicationJavadoc"), + sourcesJar = SourcesJar.Sources(), ) ) diff --git a/gradle.properties b/gradle.properties index ff76593f..c8e4fa33 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,6 +2,8 @@ org.gradle.caching=true org.gradle.configuration-cache=true org.gradle.parallel=true org.gradle.daemon=false +org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled +org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true # These options improve our compilation and test performance. They are inherited by the Kotlin daemon. org.gradle.jvmargs=\ -Xms1g \ diff --git a/knock-java/build.gradle.kts b/knock-java/build.gradle.kts index 11d153b9..1436524a 100644 --- a/knock-java/build.gradle.kts +++ b/knock-java/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.dokka.gradle.DokkaExtension + plugins { id("knock.kotlin") id("knock.publish") @@ -7,23 +9,13 @@ dependencies { api(project(":knock-java-client-okhttp")) } -// Redefine `dokkaJavadoc` to: -// - Depend on the root project's task for merging the docs of all the projects -// - Forward that task's output to this task's output -tasks.named("dokkaJavadoc").configure { - actions.clear() - - val dokkaJavadocCollector = rootProject.tasks["dokkaJavadocCollector"] - dependsOn(dokkaJavadocCollector) - - val outputDirectory = project.layout.buildDirectory.dir("dokka/javadoc") - doLast { - copy { - from(dokkaJavadocCollector.outputs.files) - into(outputDirectory) - duplicatesStrategy = DuplicatesStrategy.INCLUDE - } +// Dokka's Javadoc format doesn't support multi-module aggregation, so document the sources of all the +// projects in this project's Javadoc directly. +configure { + dokkaSourceSets.named("main") { + sourceRoots.from( + project(":knock-java-core").layout.projectDirectory.dir("src/main/kotlin"), + project(":knock-java-client-okhttp").layout.projectDirectory.dir("src/main/kotlin"), + ) } - - outputs.dir(outputDirectory) } From b83efef9a208d249e61a7b48dfe39cc7ab4a25c3 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 30 Sep 2026 15:12:50 +0000 Subject: [PATCH 6/8] build(deps): upgrade Spotless to 8.10.3 Pin ktfmt to 0.61, the version generated code is formatted with, so the upgrade doesn't reformat the codebase. Co-authored-by: Chris Bell --- buildSrc/build.gradle.kts | 2 +- buildSrc/src/main/kotlin/knock.kotlin.gradle.kts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 529f3ad9..a87d00f1 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -9,7 +9,7 @@ repositories { } dependencies { - implementation("com.diffplug.spotless:spotless-plugin-gradle:7.0.2") + implementation("com.diffplug.spotless:spotless-plugin-gradle:8.10.3") implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:2.4.20") implementation("com.vanniktech:gradle-maven-publish-plugin:0.37.0") } diff --git a/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts b/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts index 3be289e3..d083d921 100644 --- a/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts +++ b/buildSrc/src/main/kotlin/knock.kotlin.gradle.kts @@ -39,7 +39,8 @@ tasks.named("compileTestKotlin") { configure { kotlin { - ktfmt().kotlinlangStyle() + // Match the ktfmt version used to format generated code to avoid formatting churn. + ktfmt("0.61").kotlinlangStyle() toggleOffOn() } } From 743f36fd57f3ae28d9fccf818d27ed29ca9c5607 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 30 Sep 2026 15:13:19 +0000 Subject: [PATCH 7/8] ci: update GitHub Actions and publish JDK - actions/checkout v4 -> v7, actions/setup-java v3/v4 -> v6 - Replace deprecated gradle/gradle-build-action@v2 with gradle/actions/setup-gradle@v6 - Publish with JDK 21 (the build toolchain) instead of 17 Co-authored-by: Chris Bell --- .github/workflows/ci.yml | 12 ++++++------ .github/workflows/publish-sonatype.yml | 8 ++++---- .github/workflows/release-doctor.yml | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4c5f0ee6..1e9c20c9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,10 +15,10 @@ jobs: runs-on: ${{ github.repository == 'stainless-sdks/knock-java' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Set up Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v6 with: distribution: temurin java-version: | @@ -27,7 +27,7 @@ jobs: cache: gradle - name: Set up Gradle - uses: gradle/actions/setup-gradle@v4 + uses: gradle/actions/setup-gradle@v6 - name: Run lints run: ./scripts/lint @@ -36,10 +36,10 @@ jobs: name: test runs-on: ${{ github.repository == 'stainless-sdks/knock-java' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Set up Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v6 with: distribution: temurin java-version: | @@ -48,7 +48,7 @@ jobs: cache: gradle - name: Set up Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/actions/setup-gradle@v6 - name: Run tests run: ./scripts/test diff --git a/.github/workflows/publish-sonatype.yml b/.github/workflows/publish-sonatype.yml index bc7ecefd..5c493fc9 100644 --- a/.github/workflows/publish-sonatype.yml +++ b/.github/workflows/publish-sonatype.yml @@ -14,19 +14,19 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Set up Java - uses: actions/setup-java@v3 + uses: actions/setup-java@v6 with: distribution: temurin java-version: | 8 - 17 + 21 cache: gradle - name: Set up Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/actions/setup-gradle@v6 - name: Publish to Sonatype run: |- diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml index 3f0b91ce..d5cb8dac 100644 --- a/.github/workflows/release-doctor.yml +++ b/.github/workflows/release-doctor.yml @@ -12,7 +12,7 @@ jobs: if: github.repository == 'knocklabs/knock-java' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Check release environment run: | From 0671601898bddcd949b71da25be8c60fe3967f8c Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Wed, 30 Sep 2026 15:15:05 +0000 Subject: [PATCH 8/8] docs: document 2.0.0 dependency updates Co-authored-by: Chris Bell --- MIGRATION.md | 9 +++++++++ README.md | 6 +++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/MIGRATION.md b/MIGRATION.md index 9e2c1bba..2f474d97 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -102,6 +102,15 @@ BulkAddSubscriptionsParams.Subscription.builder() `ScheduleCreateParams.repeats()` returns `Optional>`, because a schedule can be created with only `scheduled_at`. +### Dependency updates + +The SDK still supports Java 8, but its dependencies have moved to their current major versions: + +- **OkHttp 5.** `knock-java-client-okhttp` (and so `knock-java`) now depends on OkHttp 5.5.0, via the `com.squareup.okhttp3:okhttp-jvm` artifact. OkHttp 5 is binary compatible with OkHttp 4 for most uses. If your build pins `com.squareup.okhttp3:okhttp` to 4.x, remove the pin or move it to 5.x. In Maven, depend on `okhttp-jvm` rather than `okhttp`, because the `okhttp` artifact is empty in OkHttp 5. +- **Kotlin.** The SDK is compiled with language and API version 2.2 and depends on `kotlin-stdlib` 2.2 or later (OkHttp 5 already requires `kotlin-stdlib` 2.x). Java projects aren't affected beyond the newer transitive `kotlin-stdlib`. Kotlin projects need the Kotlin 2.1 compiler or later. +- **Jackson.** The default Jackson version is 2.22.3. The minimum supported version is still 2.13.4. +- **Apache HttpClient.** The transitive `httpclient5` and `httpcore5` versions are 5.6.4 and 5.4.4. + ## New functionality - `workflowRecipientRuns()` with `list` and `get` diff --git a/README.md b/README.md index 33b30d4d..b5c542b8 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ implementation("app.knock.api:knock-java:1.0.0") ## Requirements -This library requires Java 8 or later. +This library requires Java 8 or later. Kotlin projects need Kotlin 2.1 or later. ## Usage @@ -323,7 +323,7 @@ $ export KNOCK_LOG=debug ## Jackson -The SDK depends on [Jackson](https://github.com/FasterXML/jackson) for JSON serialization/deserialization. It is compatible with version 2.13.4 or higher, but depends on version 2.18.2 by default. +The SDK depends on [Jackson](https://github.com/FasterXML/jackson) for JSON serialization/deserialization. It is compatible with version 2.13.4 or higher, but depends on version 2.22.3 by default. The SDK throws an exception if it detects an incompatible Jackson version at runtime (e.g. if the default version was overridden in your Maven or Gradle config). @@ -426,7 +426,7 @@ The SDK consists of three artifacts: This structure allows replacing the SDK's default HTTP client without pulling in unnecessary dependencies. -#### Customized [`OkHttpClient`](https://square.github.io/okhttp/3.x/okhttp/okhttp3/OkHttpClient.html) +#### Customized [`OkHttpClient`](https://javadoc.io/doc/com.squareup.okhttp3/okhttp-jvm/latest/okhttp3/OkHttpClient.html) > [!TIP] > Try the available [network options](#network-options) before replacing the default client.