From 87f65526e1a911dfbee066046b74c2a480258a11 Mon Sep 17 00:00:00 2001 From: Tana M Berry Date: Tue, 29 Aug 2023 11:57:29 -0500 Subject: [PATCH 01/22] website/docs: Enterprise docs (#6632) * new ent docs * first drafts WIP * Optimised images with calibre/image-actions * more details added * further updates * tweaks * better image * Optimised images with calibre/image-actions * fix typos * final edits * fixed formatting fail --------- Co-authored-by: Tana Berry Co-authored-by: authentik-automation[bot] <135050075+authentik-automation[bot]@users.noreply.github.com> --- website/docs/enterprise/entsupport.md | 15 ++ website/docs/enterprise/get-started.md | 28 ++++ website/docs/enterprise/index.md | 13 ++ .../docs/enterprise/licenses-page-admin.png | Bin 0 -> 188891 bytes website/docs/enterprise/manage-enterprise.md | 132 ++++++++++++++++++ website/sidebars.js | 16 ++- 6 files changed, 203 insertions(+), 1 deletion(-) create mode 100644 website/docs/enterprise/entsupport.md create mode 100644 website/docs/enterprise/get-started.md create mode 100644 website/docs/enterprise/index.md create mode 100644 website/docs/enterprise/licenses-page-admin.png create mode 100644 website/docs/enterprise/manage-enterprise.md diff --git a/website/docs/enterprise/entsupport.md b/website/docs/enterprise/entsupport.md new file mode 100644 index 000000000..40e7179d6 --- /dev/null +++ b/website/docs/enterprise/entsupport.md @@ -0,0 +1,15 @@ +--- +title: Support +--- + +Enterprise authentik provides dedicated support, with a Support center where you can open a request and view the progress and communications for your current requests. + +### Managing tickets and requests + +To access the Requests page, where you can open a request and view current requests, go to the Customer Portal and then click **Support** in the top menu. + +You can also bookmark the direct link to your Requests page, using the following URL: + +> . + +You can also always reach out to us via email, using email address. diff --git a/website/docs/enterprise/get-started.md b/website/docs/enterprise/get-started.md new file mode 100644 index 000000000..cf87defaa --- /dev/null +++ b/website/docs/enterprise/get-started.md @@ -0,0 +1,28 @@ +--- +title: Get started +--- + +Installing authentik is exactly the same process for both Enterprise version and our free [open source](https://github.com/goauthentik/authentik) version. + +> This **_Preview_** version of Enterprise authentik is available with our 2023.8.x release. Send us feedback through the Customer portal or to . + +## Install Enterprise + +To get started working with Enterprise authentik, upgrade to the [2023.8.x](../releases) version or later. For installation steps, refer to our [technical documentation](../installation/index.md) for instructions to install and configure authentik. + +- [Docker Compose installation](../installation/docker-compose.md) +- [Kubernetes installation](../installation/kubernetes.md) + +## Access Enterprise + +Access your Enterprise features by first [purchasing a license](./manage-enterprise.md#buy-a-license) for the organization. + +To open the Customer portal and buy a license, go to the Admin interface and in the left pane, navigate to **Enterprise -> Licenses**, and then click **Go to Customer portal**. + +The license key provides direct access to the Customer portal, where you define your organization and its members, manage billing, and access our Support center. + +## Visit the Support center + +Enterprise authentik provides dedicated support, with a Support center where you can open a request and view the progress and communications for your current requests. + +To learn about our Support center, see ["Enterprise support"](./entsupport.md). diff --git a/website/docs/enterprise/index.md b/website/docs/enterprise/index.md new file mode 100644 index 000000000..d8961250f --- /dev/null +++ b/website/docs/enterprise/index.md @@ -0,0 +1,13 @@ +--- +title: Welcome to authentik Enterprise +--- + +The Enterprise release of authentik provides all of the functionality that we have spent years building in our open source product, with a full support plan and an expanded feature set. + +Refer to our Enterprise documentation for information about creating and managing your organization, purchasing and activating a license, support, and managing billing and organization members. + +- [Get started with Enterprise](./get-started.md) +- [Manage you Enterprise account](./manage-enterprise.md) +- [Support for Enterprise accounts](./entsupport.md) + +Our standard technical documentation covers how to configure, customize, and use authentik, whether the open source version that we have built our reputation on, or our Enterprise version with dedicated support. diff --git a/website/docs/enterprise/licenses-page-admin.png b/website/docs/enterprise/licenses-page-admin.png new file mode 100644 index 0000000000000000000000000000000000000000..92b264a193c559a47acfcfdf81e1a388297c15cd GIT binary patch literal 188891 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 taya^lq!(K|ST#{^#_K+y&?CC5%z1O-an=1NpbD zLt-LRryIQ$VeO+~aSrcp-#o~(O?_zAvl;vAs%}PR*;@i>RWkdUC-~`Brh$=eIIY>g z(BG00@*ocS@=E(;OgtGmS^SGvx@@l=^w)Z5jK3%3&>a){^_L@;K0J8zf$+O&g_gU& ze1%4|UfvnCdmqJ1r=KMWb|x+=k~?$Dj@5E@1_lHKBvo5g?a(sBytvymy1sC!m2;X6 zl`XX$WK!l@x8dt%HJrQM)nw8KY*hrhahN6BYUMk$wuO=Q^S21un8idPFR93A`n8no zK<)a0o&Talx?fBN)c4IqJiUj5Ze1|KL8B?K3gn#BF68zsJ8TEi*O~xFr&@LqafP`gPn>Aw3k=%scm{SSsBTQQyj0orb73 z;XcxEMIm@@tz;HTQI5Zc&|GOPVf)4$c@&u^7zLh_2?*A`ZPYFPWopm8V#C z>Eo(Qi%bZ8ILQZEIzrDa0f#E>tE8wlx} zrTX^IDJPyKK2hG;cK}R!BV<;U)ELzO#a(2)yK8dP@J)NBC-OEbN(g%=^9+ClIeuLuq)M6GRPq^GRwBmmS24zs8hO@0 z=Lbk@sa$OqxK;et0TllKMCJR*vyT$N1GAMMoEEGpiF6hPKKx@?jPwT9 zI~WYUpQo~u0x{`ml1JNPr_4K5Ojjn`?470mb+|b*0$*lXvTO`otv z9>6;Ey(Yw5D7*7$b&qh?c7i}A4w{Kpz(oLMc;yyh-%hhq^>(XS(`C&SkNO%H$y?k} z)NHsb8qhq`#g2til1}$I=Ucg!H`axV)yaJ_3WYblsRhmzsT$oP zOig$bYUGo^lo+O`{mt1Ed!l;L2r`oOtuGOZ~I~CE1j- zMiF7SX*9dsWij!>LHAXF;tWkC$yqr@Q=90w0q1U*a~1~)zckwFGrl9eSg&I2DTQ~ zhZE9hib5a7o=#1*WcP_>lFAl zDfVUr-J@)!RP~rRE-y5gLB3v`MGj>(+ld;YrmL#wR%SPU=%Vb`>$WUm9R7ux@La>H zf?CU56#b=kmdUSrPud7F#`C9ytKSif=eKn-+^*BhUfvQm)2a}VbrADz|3o}cu0=e|OVxAwn{8_xEme0f1d zbEpy3X-Cu-bizsVTlN+@-PCTErG-t;c8c*z6YSUr(^4qt!EiCdsHAHQE$p*&V^8RA z6gu>_m(+nxnprRxqP+z4$$o+oP9=n9XUB(7lfosEPyEd=at>V)1o^`$&GlKOp>@Q; z)Uhc#qn+~z%M#6H%LyuZVchqD7NiS&FUp4PCyK%@Ye~r@iWu$kiV1yIuEX;^9wjJKCEx2|UvED)ED`_LZ0O4v-`H$nU{dE9+z*CA=>R&3I^ zdl2>Qa5Ztf+A)WDx^s`;Wl}>m19t>7eR>ao4^T%3mYYSlYXzLzE>8NbU4NE|i_WWD z4R?k_9YNC(1EF7`NS$G)@mD2W^mZI^z|lcT2QRmW?7Zf90^`$uUE>zX1K$&l1y=7P z)}7-#>3r<|F?04+rEHIvyNkJUjAxfUX4g0+v%FX9cLeRP>x#7=SUI#jR>%l*KaebX z+$=JC`_rt6H|Cy?xPbw6(@-+-7v&^a`#s_tE-D$0D5U3(5-OHddL9tBC>HMRCbGX; zQ{s%2P1-nAVd2jQsma|Yh~r7Y7~<)y*84fd-><8RioJ}TwZqO$hHMtO-3S%yj<`?FpyH)rsFVTAGWJ~#WEZ%pk!T*CSBp*rS3)B-FA7w8eof7V7^9*UMM$U+KSK$Xv|?S72GG(t|)TeEFWv7 zXHnnr({i4T;4qcmmlsGCjgphGp`+tym=|$~lsx--k0wLS@nzJaUaKBKACyS7-QDhCyMGee40OrhxN4lVRB4^ zOM&%3@3n|hWG&{7?U$MJW-8+!IzVUtn;fl7~ZRK z-=0L@GykAdzt|Yg-T5SvIeA>Ce){@0N-Ehpi*;3xq7c5YuUA7m3FsgO4oelf69>Fb zVHcBqYjRSD+w&VX#F{C3g5o6Exh?aVjmy+9*q)@GP9n}#jM4sGGP>MJaG)w&PEW3?=jR$F zBLk~`^}9sn@u~XLMebbZkdf=5W$T}otZ{Ydy1H&o$X0?%x`UeK73a2Gy*PiOmt9)U z=BJC-cE!h8lsnqt^=F~nJTc$06aOD0LB^HjAk0<*XFltcIo0~wqramBM8PM@8$Nw>a6 zJA$q-tS^dpA)%$Jdj5uCAO&O8GN-z@yoWf5B<+(vJc!uQm-~4^Kv0AqOWZutW*2aK z(@Cbe$V9uclfj~Hdo^ExIGiy2bfF!63G8irHhQ*fTi#zAqEX8ifdNtVV?fOJWPleR z=jl0j_x-S?*)IDdgHs$$5tk^Rq&Zqd!}h@Lz4`_JMOjl0cD=!D3u>8=R<#{eDjIaEKM`OLTU6r(`9!9Pd~5D>&c~nV zrY>mUmU7@)#*W-2j33S&Je$%x{mQN-DYbs$eNcomCzm>BUntF9^2<+9cBX_nNWvcN zm+R?XAxV@%JpJt6^;LUsaOOG&CN8oNN|Wn~d$~WBq#p$qvHUpCU$AJTfwh+1Yl1IJnT~q68k{3eSD+=!E`DIvtAn zx@UHpm0P_U9_>cklq$*?DK=0a=POMKQ_u5R6(r)+O%-viDvib5%`pOyl*c)DqYEtb z4cwP?no8PgTny-nET23-Kd6T~<8< zx(AbKCOH=a6<%*RNqfrFfb2BqURS!gw|V0;uU}LvM(Zs5C8`hIW|sM$roKM8%AC{d zMjD*-30DVa{OYsMV|e|V$6bh<)V~=|-RDtD?NlesUf*RJ^W2e&V zP+jLj3IH-f@*KX`# zsUQDzLGbG5wc^4f@01arBBu5T3)Y82M~D#^_xwbZVzxrhVNbB$HRw$GnwA(KjHm{D z1x9&dYo38$uo5F-^W1UkDrltpiTD9K3s{B^V993Z=aFtLd;Kq`zkQSc*VEe62>=J#gPa4 zx6{?t>i>1RxLE$bPXE`vFG34Gzbx@{_CYftvsB}7oFENR@cdu;?!UVB|D*4qYrDD< z|6jUR6J!MbSLhToL@r}r#i-`m^!htpO;2>lO4j2{EVhtwvDn9cMFQh*3V zO{q&dNa#}ga{_-Ol(q%~Np_J{<{cs_$jYd`peC5SDzwrhZw>5~5J&N-7YE+y(p9NXDnN&nJ-@wuLo-wVYL; zq$6Z2Q$wcHhsXZl2gb&N<^j(+ClN`7I346bFIW6eUuX z^`!t}#-%eTP!blaj*f9hMm0$m)ma$0yV8tE zf~v@vv&aa+uJ7&9R08W>x}o&Zv_a8(Ga{Bmd!p9hkJBMo%turGeI zN{pRvZxJFgJ_9HyAP~2J2o;5Ns+cHL70WMMfOtU!-KA-NBEM!Gpm!VCUaH(2HQt86 zpUX;dv_LQJ4+|sUpwij2_K$|?@b^7;jcc}(>PLZH9xvt~P>|%7V@I!8EbCv2NyuQ!SAL zI@K#pv>w%qqm>+(AwWdVtBt|X==o#w%^`jB*QdLJOhpfrNr+b>mI{qj7; zcrA9z&Mq#>!m#?wqNs7_9v}6_zN zGfvI6+cF@ZBnzI9`_v%A_4AmT>)!g2zEX`Ew_3l(xH?_bQlbb zSEE$KDn2iwCv3n_{F7DmwNr@&l|X*%VQT!>L@X(ctKVu)kg61YFE<@2`wC6H{M^k# z>4_SUl-AD=LnW~V$k-9I>R$D}@%^03cXw@=8b`w#3H-FSh38ar!A9x!RqD20;W$QE z9BC8#KP&)vJq6YwQJIwp{<(TBs(Hqx&8N09f14bfkn znEzVoU?J@5Oa0e{5KfPc<^I>{|MHOjZ>ua=ya%{{Ht68aAf6z+>HnK+g~V`S)Cc^@ znEvi5{^O+h{q*eY;kW^G^@s zd`S@JJ8bCNa19RnA1=|KMlKl}i*rJ&p2V_>vY{tLl9fvju&!Uyat~zJ(EZJ+1~>D= z3{iN&;ab~g0EuvzgwyV~u--lPJEQ5xIDDezPj@F&1(TcdKi6+jj&ZceMEU9aQlKf- z24nm47KAtJ6v)u0fAe7xC*EqhBq?T ze%l>@J%M;MAlM-W94YEsr;uVPa-aYa1uci5+e!tG`S|$C$d?C6wVo5=)Kq z%By{Ljgf`^0vr<;;SVP8YvHfJ&usKei0vS_?8gJEwKkxlJPJdUzjMp@*etK(9B{~L7D;XR96Cj@FD9X{H49-e>k|xvNTk77B>l>n}Q6< zchO?PH)wG~FE6jhw&ZFUt<&eVUJzdLt1BM$|NAdk1&Anxj*hCqY!k}t{HfK{D1l!{`0j9nWi{s7`=Z!q#moQ$H8QKr-6*@KOe5*;^N3u z`sZ_IX1V`z4w)VQ@Z2FuKQd z2Q`0hLBv4of`f6tba$mW7|{ubRm1o1@ACM>VK3ShfFGp10zxHJ;C>6Kf%Mvu)P|T6 z2-yUbR>s&kVzG_^_RT^8DAYK2k0QdPdxq=z3?MzYk6NWkC%h1SuBe|zDT*%BhZRK!V%UcpW?$|+5`iHjz6UXxsb8Ygns zt&gNQwp04ng9fQO#bmvuK{lmaSR=-e7;2QSS_v&;AR<2L^VgRS5pQVKa2off(#1}N zK$HvC)V^2WBTQ4~U>NBgp7b9C4SKk4D;&pJ)2z+EJD=S5F^;(iD zKtb%SZ&5b5HzwW#F$4^1Dz*b`y^lqR9N5RTG};zbaud?I%5%gcnJi`!_n zsz5{?8{bSkBpxD6;aA}ron|eb?MCq+gudZ}g*lH5P4uMYnDb_jv!f;k&0b$N%|L6a zJdB0{xx%?3FP$!(1PMeg3tzY+d5DsJ9{ka4yZcPoc6dV~;Ub&CKwC=%Qi&Z8j)nLM zK5gv3F7a2hm*kW{I&cAd0wIj1WmdKBk>yVn1p*C@#gr)142Sz;+ikX}pq0CQD$<37 z#M9o77BsLY5Xz%%m?#SCsDzHIEMvW(;-q6U0lW*yEGH_MA*L8W_&D?jsCoLNE(Y+u zC=GNo-{(%B+&~CQB}T6;SisC}s@;=lLu4CbzJVMJwetD4)Zx8d@L6SUtA;O8xrbIC zVXxG_s(w=P@AlB(_1fB+l>mTOK8uPxffbXM-2_OZ1`L>*m!Vew1RdeDNHKyudm1(Z z)wBf?Pg>i(uHIr(Hm%Z#rVK-f4T6vwVkF6pb3k921IukufyPyqd#(qVF^00(i1bac zF}GUUu2Rf(qLv_3kv~a5rxdcc2Z&2yWE&5vuk{{^{!j?SqsPLX%0Eawl9D1Gr$+4} zxH63xqm9i^KtF0&#RWr^PN|Q23t=00KMbv>7~x&IhGgi)ik)}qeCnV&_SP`Zwwu)g z8$?j}!_7ga;&SLGt;l|QAdFyGpxqw2%0hY6s?3fnYs15LceV2G7WdPPs9+1Ab;@Jo zPL)Jo61zvnAs!+L8&gvAx(gmeL?ZP9z9^HbuVwHw8Q2q`P0+L@YV8u!CwQwJa>g-lB)!)om{i>9Rzt{h48l7bJ>V?}`HP#9R{|IEhK4lOHV zjyY%JD8@dUw6Mm~b}x~U!!n)v@pN;Iq-KsBV}ONuh>r*q7H3P`7HcO+Ug&O%;qYy$ z?=fwM4djUhQY>9Yxxe==QTD7CkzXQS)a3|dtB#tshmG-xm>yPj#(+)(Jnzi=NMyDd zI6F9KFZ%&s<<_GM#X;2H(Cf+5uNB>uB^d+UjQ1@7bfmn#Q2}D4XG{)ChS%70Kwp=P zmQYag9v7XiYJjE{g;~Y2z~_aJ$hAccWxovnD1nn3;*0jW*@ zQ;%uUzneywIZyL|iR>$4IfS1`X3$aLRBxk9l8NlQ+{{~^b3}k+s2xs_za>XQ*zly> zefuNn{+k%r@j7q1TZGfNrP~(9nd=)HXO%`x`D?b2qH{4vD6T)Dn!9VAqf&~}thu+; zAgt*s+-|#&*KoOYCpwPE;m+l0tPo%PzdJEkgsgan$~2-Gk_0|)HB!Z8ML1n3wL*Up zz(JF_tW*wf&(jeKc5!eWDC))Z1i6{J=uRW1Bz+Ol#M4GLXNj-5-#&SJ=axO(4ToZ^ z-@Eo1o}U)w%vymV%cInBZt-?fmJ4iBjAsp)xHkMNO5#>1%BUj|+LT6M9Z;tp?m-1$ zHP!#aVvtD3^w3C|z;Cs_$HAiRf?z=sJZI#T9)C_TKtlGxktje-Dzo{ zS&H!VDVE!0U%v591&Dbd4IPTkJp`2RB^>TNgVX$^nC{KjPhXd zOt>L~=SWOPn5$aOT8JUHdq)P#VJYaTENSG7?b8QKC=LUULg$YAuW zo)xUwf?!FTSQG$5RP#lEu*pIJ2c3-3S9*}EM~Y3@ics}jnAH6H6bfttr`)97Z5gT# z0`cEg9qfJUD_nrV8%>9SwLYAVu;F$oEMjR6_mOa?&3$XfmF1%a)U8I!;yXEt(ZOmn!_-`%Q8fL}@tnD(dMZr+|Bqm7{~WXLQO+ zS445qff3F&umT+odrf4Apa>V7n1U^4vnr6FE9iyMb6A>%O#yq-WlUzs3&K8$5=PXb-Bnz6^0_2i6gRYbEaof?n!J?*T{DP}x7t z390)`_NGJlep#q%+W6$`xr`^|ml*`HHBjQvffEp+&&2 zZpzSm(q^GQ-v8u3>@7PldoLM4f4v6llvM$niveQYcu<CtzQ$5|5C} z=a$iFvQDk-GSOPxoppw+NGhV^5Dmx*9W(jeMPOEZ3}pM+^(WqGaB6$^nf-OYL&PP? zxby&Ki$T0Kcvko#C4li-<%WPrti;W+*pUK5NdEemfDGgAfu5O=19CME_!*fXbVmJ<034qL}e?^g!#`9l0p(l6P&Pd zpERwY|=Skl57+f@xXevVzP5=9_5lLy8AhGHn$Mg8^HtdP2 zDsE_}AGx+4pZ~b=A40)DuYV;4K|$CoVm;_XBBwtN4eCP6nv(y;8{y>7<8(5-=jIfT?G|8!k;Xqv zIRCitzZ-vZlNNpwUfg3uPFoFwIdDV9e zgPcXRKanN|zqRu_Ti6=KMg@|}kCBAoZH4y_k|@0QZf#`tSHqp3_v%l(ng59CA?;gk zgh9fRfB<&1UG?-}eybVV9o289d61XuZH3mdN`qBS(Bqdh=B(4!nmoRHXW%#V#b7Ww zIyn67y5YBrCmvv`FKapuE@j7mztwt~aDJq3yt=*pKpCagrzU>9Lvy*rr$K&ynN^9J zp!r!i(yPy>kVb=%GSO?ygEe?icz&qM#%#1Moj6oGdA82wPK3}wRWAR4WFFxwHO{uq zpyi}1B#FExKn^RM%e>&dcNTe)Xy{5LTV>k1arE7uI&L19$>vmKrNS$t%M(`WzLByo zzFc@+{F&J|Z@{A!@zhWtbc%nw22?IFqY$G2~l4hWS??sYyx7&*Nin6f}~6CW;rXO0Zr-!dBJ zMn$Apiw8xkSTb zJ+uP)AwS3RfBqgd%Re-7tY#K9A+H`NL>x|ycaq5S{RZIp&)++IzTXGue?6bfA1uzF zy5|dTjaQkrv)#|9_5zzV}kjE%`pEFt47AI za{eBc{z2a(WAUL%d!IbO+r)_0C>+|1=K_(?O7B`>Ir^{P`=9yx&*w`<)(PGJ%k2BI)82#C_VBB0VidI?rmX$k_;RTPve zy%SIgMi4}#h9ZRCVkm)-gnZ{^cmH?y-uun`XTFcwnVr!X-uG8ddCqg56Uk|M>>#;DRSB%a9ycC`z{2Rw-!yms8+MDAj>ic-smgUJTMU zjRbko$Pm&|XQ(M4=RL?ziWE7k1Yp&O7J5~G9;R@sQ=zlP{J49nqU%xHsxGbn^2N)4 zFrG@nP9toER37~uDl_kqSi{*z<N2!LtMWik?Eq_Tgbp!`@Gt#5p56V9%C zu0%haXOr!O(^ecpabjUPmIX!>5T99y`uM#fAx3^E?>TlcK$_*pBw=uk67t&xl{knn z*7pnfZl3^LtKnV|(gKDzH&QP4Fg>Ik+}epULIqK6Tdi_-*af)iOO92 z!}}A!xSiRdbZ{MHG`4S@o8ck?1{;kKQSp%Zs9s>b@dz1HqBQ*b0p(ZMa}Z;qAV}*2 zKx(Ak_}-GhfOe{%_bs`r!y|f>*xVBwGPhEjvH=!wo?l2~sw(}eV~YVq{ZLO$fX~+^ zoS$ui$qA_gQrUzuhjLJdlZfotfz%|R0Zkk61-Y(tl{MZ>Lo+F<_F#+t8%HuzJ(sH< z^jtZhpw6)B;tOX+6^+|1>+e3Ktw$nIm*?pNQM)z~^`~B&59scojlRmFPVt0o8?PEG zSi%>1mIciVUGweCHIohcSW1yVF^7jrdRC=P%i2%ge5Ov()b3eKa7fdZqK?M$cuw*d zi!uHC%SSTI4;^Asx`}w`QFs`%SBx=783|{4S&3j6(@hsXAPZQxlZwFOFfU0A5~`eO z`QV8|_R#SIgagU4zH53%3qY2fuk@>IqoA!V%Qrd4&Ybg5E66Vn!kg5C&2&B7oT#Qy z;rHS7hg0}Po1Z=7QRjob;CHuFktCko=*k`ZSs!(3+5ImrfXVPvE#cPEE`I_$YG{1k z?5s%n?Th60w6)?4u6;yR=mRKpH$7k~C&a1I1yW51k(=-(vMmn=DW8hRu1;k)NeRUB z$2+6*oQj`aAz`Qtrxc+8+iVCJ+zBc_KWy@H{fMc)eN~Q@vL<3(Mr@RB>d~jETiF zuR71Kgy-U2Gn~$O&#slvmX_Rg4^UlSyMjjM^BQK(@v=VUBMB-#d4Gf--|p)qo#0Vt z7v{t&mqDU=T5MK6je0R|m!4|D%ciO6>Gig@$mhP|bLnri;}1aA{aMnU(X0_ST2 z4W(1OVC*9sGw-^G0zt~=?d{WltXY2SK#-4@M?-#IF7@Zg{lWe?030>BK4TzW4}Um5 z@Bb<1<0y{%UTk<%Y*_mzJMU@AcJyjn)EAfd!#ldNF5?xY2*DN!cim^H(&JcDld{8f z_0?V)QbIQb+IpgpYGchBO7mF^lZhv zVwpT{?dv|@_hVco%SILQppjad@Wu5j#^6$ajaZz$`@U4Qou`ds*2b@cX2E$EEQ7*r z9)H*t;Sb}th$TOn0oi2@y8)21I|dlHgXZ-b@7dniKx&hJVD(hE_!dpA6K{K%=3%F2UPN6R+4YqWW zOYDHKh%9B($Bs`yE5mnFUoA8;m}Rp853kp#_tq#>r852TA0oRux8i2W-2xGthy+r3 z_KY74Lx`nM#w;(yxMDr)Xe%nD+A`a%IO&?jt{MMBI<=NaFwxrw^Z85wds==`N!F3t{^Z;CMO&wEjj#Rk?RW5vIuDPRC z29#EE90X;Op-yJ3b7sd$+y7bREZKGq?24WD$+<2fPE0@|{LHnS`Bee==mqJ@*AqWS z;v`8v45B`)FMfPp(*g*TJdHa?FW~OQh8=KE=&w{mx8`WdCBvG0EJ~KKLv}ZVF~*GTRN5m&LD~{Vs3E}UOL6Ps0L21Nk7rLast^T(ZP&u4m%Ezdw z)TCM$I6kn3F5e!n#+i(g$GW|IwZ9%X^^gL`Rq(_pwAJA&jj|z!#T#>QkQ2UlDfLtk z6o(f8$ne+CRi6S$apz23X?_V*)DwspVVFpoB~Bz%@N&C?a-{OqTc?EbcI}4UbF!lW zX1{bi``jCOpq2_1X&Dt#f03Ex&u{B`V*x zA|W*MLz>#oU7KueuBSB#=xbk9l;rR79DtJzQU>!O&K?Bkvg3h%1x}Nr4PM<*O;?~+ zVk9H92YT>6KIItjP4FuMfHA%`cR=zStdTE0O3#j+m{GH8X4y2?TT(SF(CPwN zarlU*U-~V{9Z?hy@{R6PS#ym^Z_{$Os~_X}n&PaiEJ7LO)!x!5=D7U$p-kOiF{M@O zcu^*S`Ie;2oP6AX=l99ExHj75D#|1;DxCo=b18gUX`#gsuaIw=NDpm?WXq=<>L&ta zvtQzrZp{3AQ;u~WjA{0-Li=IMC|yqhW^}jA$995kvF&J=}eC~ zla^ZUykO*_$D23sbcX(Rb%Z;1E3RM%nW?RA8rmOFxm*)}*Bw}{pTVie6t&dIm{UrX z0NBbOkDOk*otHbih<*2MKClFVccEqa-AUrC{!Occ-Kz zirJ24T<1zh(>0LSEnhPl!~=XOZ@M`Fgo+Y?q9Ms45jhpE4No+ z^k=N3@S9PjbgZp>&!gElnHg{}HRsIkXI#n?FJ|VYDn_EOgNX5icjHKb=)-7Zb4v;D zd)5gn1V!!`ZoP51VeAN!XOw(kaILAUpvs(j%+FK~2nWh-HlyMxw2AbnJ!a}SM;J~f z-CQX+XyIb8{X=}duZo`|_3`!bmZ_q9jNHue7=<2*ZD=0@oi}&gcfThxZEFZaV)sKR zfl{uTlA^>mD=8sP!a|reeK^Fqy?OOh;hT8AuB&LNe9NskH3Cze_uRG;1=SLfo?c`6 z$|Jdk5k?}YPT}&jekZo5G1bL%KFL=<0_N06hnS;u1@;+vrtSQfLOY_i z=cc~;!l4+3+}U>u3^BksC`bi~ufw3XXE zD~7Lb6`_E?kPkKaeeONYKHN-pf~Z^OLgTNDXhi(h<=94(kwy& z4;hmGzKLjdHtne7ux4wve%k@_YG3k;M#(E*cZWOj$SXE_fy$+efeY={=rABB0W6%a z2p4dFpiQK3sIb{YLAfLA(JNOa_kD5~$|vm%S2v&9?c4s{g|1+IF##$^ZI#a?*3RBs z2Kw#S76r)1UbRDKmcEIU!hu1c$UaRG>r9WnZK>^G))MA*PFg~$Ectl?6(|B159uaP z^l*k0HiIkb3m;F#$f`W2OxWseuTP56!QX!r6XPjeT|QCQFD->t_Vf6XwiOP@`S6Cg zniAED*~qGxBB*5kw7Dv{J?Q7lL9w8;?O9Ea$k+S_%*FbRP(B0hU1}QfQjTEDHKNq3+}BBO_&8cPbf@#}Zz7*M{3O|LMrG1j4>RzcV? z=LBgKw)ibY`Zi-VN?>=m%B2IFh*j!6W$kvsa_&E!6pIEYrN!&wo5ouch1smkTv<#AP^99a4kxX8eMgpVRO0`bt9rf@EjMEo594mBHO>nFUoL zD1psN@tOJ+0DoJz;t;lsW6$%QlQ58|)x{wZCPI{dMKh&12o7HsXCjH3$K+9Ee6IM(h(0xHBnb<1!jo#ZL{5( z-`j^XbHo!Myz#D0k5tZ@C=RS&0Y{r_;{7OL9B~*k)v-dCpeHpAszoy%Rxs@R z^Lr2S)zH00C{!dgz5=k2yK~b3{Z26-lYY75yQ>JsPi zy)xmyk!a@ZR+_aof}-Q0%wMi-aX=0rMy&p@7^*Z|`!!*U&$CR6n*z?gv2{SuNyzZG z@kvrPZnkte#uI*~1`LkDy1@a+Vl~9M*lp;;Luu(a$(m{mH6BwSZ2Zk-6VWNBFu--b zuNo`rFi;_`G@WONx7OYos~>%|CcGmFol{^T98hh2He$Th_duSbY9fC19}7 z#bJJ?&-uZpqaUcI58AO>^9?Jo?igm8XAwj0!Z-cfk@6PeUu1TT>W!7*`R25RC!?)k&$_M*Qo>NyQ(P}ZO zzkYtiEAfSY)eXZm$|fKZDHdAKFlm9eE{H6nS1x(iO5{}@q6H)x4N9&1P4)B|8^Oja zAe)na;#kZt(8AliJ51XX=>bYQ5u|*x?Pg}mi5vARkW%<*yAYs2nQA$9Lpf4^rMdV* zg(9}*txnk=QF(j2?PlU)eHu2$L!KQot}=*kDS|9%hUA`^iHQ4rUa{HySTV8vB6+tIY&z0^`Tdy_%Mv$I~f7DVEdo+{41|h{pP4S zC+WY0g>=SR0*Yi*ekJPR?n>(gl-zhYgsE9mV8cCu`kFGEhXq`%RHNq)6g%zOGxV?x ztF9IIiXYsI!B&=DI+?2E=so`_=E~MC{ddX9P{*4V6dgJITfS9IhFc2N^to++1mi_j zMCo1kw+JBeSkxBSNl3?KBe}5ZHP~U zUakto3k`3E$-HGEYSz!zsvdwN-G*BpSUy=wm)v!TC*_1^XU<5Dr*yNfwB)3weQQFD z#S)%2sy9d)G&Qa-H|*ku2|if+@q}Yk%Hy(%*sga-;{DOKm@nKFx{!13(|~Xa^~-0Q zkfB0OJxKSK49)$bZ-rA&;py|hOd3=QJM9@LCHyEMinxd*;xzNu7K3?K?U{P5P?6p6 z?I~|#PHdQYz8Sv!X=>e#*EXuB;Z2QH6Vjmnqi3`s#&7_J=ftLXe?KpVJn&faOz~kZ zy%gn=TP=`@&d{k`_ESeth`U>&7?&!FceGakH<+9}+~gIXE=bTYyR>9Tj_rFud=Q$|2VP@w{-AAx#NKJ+J>PkMd;7EXh;GKYX(Rb zWk*#=?VhEag2oCa!0y>N-VpwAk~&~AU`!5_Hws)Weg@L?V8z*o240>93e3&wAf4&yJXGSuSjn%69Al9-B1a)57t4U=F2sDndQ2n}lfS=8dtD z`WzU32B>Y&)_4Xq13CZL%l;OUz_0zkw}Cu!z3=DZN*g-N_q!hN10*@V6z>j0W4p{6 z&{@>Tgaa0IoO$2zrVv6a@qj%CRP!S+&q9GX!e{TCR~)G&=zdo2>WBNUdg53oTxPBQ z+HT6&-3R#G7?*6bV=b+yYM1`i!uW-{GuYM^z6T>0Uj3dd-AAENI%`_=)EE~V_Iuu} z_r-tzqVZ57zd}l7@EKaod`UU|wS_X#qt>R{X6V)9rdnCg&P?{Zr0T|9du|uB8Oh|8 zSg4w5;||oQ5#!_3fjPp}txNXPteH={^P1W>u5SFi=0mWBRTWP-yTp%yUq3R@Y6{Mi znRYm)?`kp_TYh~-p~<^srrKCLxvO^>efduxH`b2;)m7eH^j8DSN?QL+U|6RCGg;oA zq|++UKwu@3H*du;Tk|E*p}6L{Nou43Ht^f*e2u%S-FOs#@)e|1NLh~O?N}Z-1jo`e zQsNQ+^Y(?klqLAr_Ap(|o)!etnzCE(2Qo9|MfChu z_5O3$L9WWRzp}*bVwqXuto5kF3ZtGY_|kLJa-%A5NG{c&r&2ss`jC<`(z5x=_1#Oz z)3N*d$H;@-aq0Sk`Nnd(X8u^?-qeCz6%9zaZGV&BM8xpvl~Z3iub$-@jVR6$$Q*Zg zylr_9gVE<-7DH3de|^LieffZ)%nsRmgFyL=P4@1+$q94hZW*C|k-9fVw?}!P=)G|w2vrFY&R^KYNmW!4Cm~rf065Bv7La)gAxu2gs zF@0|r2Ce_Kd^ow1ot4O3&f`2jZvJe`yq0hIK&eKU7w?#LCHd3d%R+vh#(46gu`%X( zB);7h^E79m5Uu1J$&SESm;Tw;qAC@h=-#Zw_zLIF1F9;Ts~v>6yG;hNLbD zmhFM$dXeCZG0Sf5J7rv2R#NC({3R{T>_Bx?ER|S$2s{E9{PEc5QNvI~vc48dNBu zIFA+usV>uVgd%j(S&5fW*lCxQSiTdePpjH8MVUjxYrJxETtxn|Z;=;1cHrJUy?`tE z&;S*jR!Ig3@*IQJJT;jrB(EpA zx_==-?R@ZB_gLkE)`O9^7p?MCScxly-7<3mY@#-*ho;P zeS0gJ=bp*);QCE`i@yDgBR0t;K&~9Fe7K!|m}iI0&ajx&J3FOzz+>@aYk$MyA}(Mb zY;#$VtN-bo7Su`H=7UXGyMg!b?d^?eO!dtgqw9-MyL|fEr$gKg)TNsFhDK8-bn6sL z&FfGTT=mVG9~xw9p8BmSU+=TNn^)HFZT{7L6-?z5I`DnZtHX&Lrr@x|g6Bq#6-h3Y zc=x^s^}A&vc?}Gw=COo0m&k3V#HR41 z^2mp5I326Z5MU%F3-)uO%Dy8Ec)~8`?4%bJ6jyl8d<^9h&Ql>Fo&Cu^O>y6=G>=Qz z2o6p&TbWdJ*z}`Io~a!C%gr|1_(E0L!_z;Mhqx!e%yvH7*Uf%f5qk_h6N*}tvlRz{ z$Mqw9sZ`uXHE`vZRTLgLdDa%fEcXaV{k$(U>|ThwCoW$)*QBCyWWN;*pLCY4a9f_P znsY8^xU>-(f+@2E>&u2mdf|}CbBbua^&Rf$GTa!M#4TerPqS0o!^LX5&ozHE;$fI= z?Oe0U^Fe`+KqmYyeLcX8yV8i(grzr)z%TU??2_r;fE%4PPd7S=TnZMPW>U9~VlCCoB7q zuDDdd!ZU()22ha;6=#jhE>3ow==={GxT;;J_#tSJHn9BN`O#Kf(h27&cWb1{O12px z(pE00gPKA^)`!NX+KV?e>l9b3A+QP~EI`0DGOx%jHr$5m_sp=FC_{GA~$I*X~Hs4OnnfX$`? zML2Pf(dK=F!!<|Ehoqv0hWFX@C6lMMRlEbOs!u9VJFWSI(f*4!$mD>zq)y_Rb)tNJ zck43(=|VQYajKZJp7cJ-37hKRkC_cr`;+%xLQ&oXSkljt2`*M58~cufNLBRl zsloCCmadSS zbiHaKKDK$UMdFc;1NC%TUO#4pG;(2t~k9l z$|a9q#;WvPk-f06ixRnk#tdSZu@Vbyo!^78^{t;O9j@jM`MSCPj9~nO$u?5`$438Z zOSopC9MimGDFrKGaS@YM(|UBBK{?u|@y)EnK>F&)CCBH5juqgm!}0R^U?A;oG{vtEsEb85wg7)k0H_&ZG}8 z)*IA`3uea=o^Hz(Nr_HE2pL*9ugoxkJtMHQQ9JjEyMsd}Is>!IRu=WKL8O(H2&&6> zxMk+fhrMu?bT5Dm4g%YbQOenp>UUQ%PZZC=3{<0y$w_-#jJ&G@fvpo8(@K^#tm2JS5y4siAKQ^`&n&Yg?0Loxi0qG4nBL2M1R>%PQ%8%rxc#Mi*ku$N2+VrI}4@qt{F2#C-H~YKr}GrefFy&Z$D_O)eV6@jZ6BVce1Gt2hd zR9|ba9j<1seYe9mX=8Jg2gd`r#NyZNugrJ$eo@I$C3nspTdeZ6oZb4h=R%8TTx$7r zN{GAq8fBgrTC2o7$6B=W=%b&a-N>8@{T4n6ZN_VbubHtD#zxJ24=xM&ue3owL)x5o zUAgJ>@01o55-*L~aR0pIp!9m^>9;CpBiO|Xwe;`NPh5wpzLnpzv`~>M20^gbT~7rh z$98v|OMi0qC26uflW&_L7~8)PN5@z=W7G9}d z7bKp4hl;7^mD=IA1EnRSTE*n7NlCl`Z^qzA;z0 zpn71rqBY&@bt<@H!}|}iYkCmL!>L*a%$?sBz9uWlD?tlJw#&k=p^r%Csow)Oo0Hr~ zth&^h*I%VAC8wFBLh7ijFO|ENk=O}jIG`%Zurc-U8-50_D0DtdxNlg;6Xp~ zXa$~*2}-|aw(;(^CQ#{qGgbPDtJz+4!Q#pW9HBJGNN&fr0SgnaS{-XOW z>wP&PIoEf~*34;)&KdzjbHxub`UgdUt)?vmO(7#tIhQgW19z?W@e`vWx*&v%he(-e zcGJcapSc(RdeBAtp{`jBeWW%5?jN`!AV3Cy`tj zuNMRAj?Xsyx^Z8(QMFQu>eTx3JJF)fw{FsI+}o<7 zqv%7fc{jCrgZiEd5z*D;bg7RYb2(6<*{QvkJybu*>3>~WPV>&dwC_qAFzZ`ealIeC z?F32Lq+muH%ajWWoHoV?L{(QvP=(8aF3&GN<-D{FHBNNRM{f=%Hh$1gQ6yya1v|*O z(6I)A1A3T^^bUufTlKw80h6OjqD`NaQxnM-j3A2yYBQRc;84XQ+(Nj3sNP zR{=_+!3U+b9o4whJ2z(>$d@7pBW5pR9is{)q)`oBN)4zaR5~iVem_{T8-s2WrMeb% z0RRKGF9zwkc=c}wVu&^pa4c%SFw8dcqBenyllMXBI}YCS%qU}T$ejyysTT*V=V`^K-HIDXwehNyPgg`2EFp86Z``YrMX9HsGi$gy|?&qNe%%o7tO! z9837D{gwEa7OZdgke<5}+kd+Fu;IR%Xua$YoX&TY66m^aR5lVr}$Vt*$L6m zEW1|@!o)6RSn~*RJd=!GYm5%QhD|ro*lm{eW~WT#HQxTVm=Jd-;StMJHr&(WJWxX2 zyqA?Y7H(biiR)EiY=}UOB7Z&6fB!}cj`mJRZnwyj9u+sabn~Apoc`LwY<>7F01^>v zC(TXcniOWN@wh_GU3b630X_3PHL05ynaiic9gHit@@u^z)~nAkWNieQQfX^;ja_`3 z_J19^LAMWbXN}Y1n>{NMgAvPg+n7z_f+Nv+w zYqy!f+G>a7m8{4!*_}ra(EZqz-7QG7-FL_DCl^MQZ2CGo55b>rS6|Om?PJl2hYRB6rqOF6f*AoG+WRVC8Vj9%T~<1)WI(w$`N``?3pOgT(~Wy znz(r~KCoB+GItfWyL#GYek`%{*hx%Il21qY)-Ty>@1^}5odfo$s*mL**951K92rO4 z{0j-}!bi_r`7M=%pd38kXKd8RZ&+TorWTG+8)1cEwx)z@;*w_G0ayqZ>LJT4+B`fE~I z@(&j0`wzN;7u_q@VnlGh?Z%BJB?WVn$6jEteAiS33?;4yLJ-cm>Mq>OYO7O++RVlZ zajOE-6EJQ77wa=WaOFjT14Ie!@N7efjn1>77RuHDYJoaxRN-mx+Ks?9E$&W-C$7O7u6>&k0t zECFCa1+K@7EF;XCoy41c0eUhSNs@o187MRxB)PvEw1`T3Vs-U@|KlCfyJbc~HzdgJjaUkG7-Vlj*kcauh;QYBRdzJ@w{Xe|b1*n>aB(DcL ztWOZ@lj%-Ut2aS*F14u$eSsB(Wq+SbgPV6Vw2Dizk;%b&R+8$@MMRjis zhyTGxUu4b;%D6Z>u0N*m-?s1n^)X?G_Bs47cBr%z9-GDH*Z>18m1dnZpb9JOENNDGpd9U8s*0t5_52EU=KsUxdcdym%0sACM6?Pko6u%4zh>l zKR0E~e!g)-p;^AUpjL#CV}AakKbx2~z2^9;LhmgYP_)yxL)Slyh;#@|D8Xv|`~KIw zTR`(Y>G1C#R-F1$j8W;_Kk@dlY_SzRh377#ea{L!g=LlZmg-w#H4X0U@GXlLaEkZt z-TPlov0xU;F*nc3A~>f3lU|thLiU(7-LhfOm_o|MUTQG8QiHVY&5I(T67sKKz#X8G z13ZUF(MQS#-`q^h7%ldbR7hoeSwkKpt?JbIF67-ijWdh-*x*iA>^$adLysu!eR(GI zet1a?uT&%vX~3FDf%8fr5CC{sKd(L;-yYLxpC7D_6KK7&TW(G-qlKx;na&7pir+GJ z^SHU7uzT_+^7kw4f{uxu^VqhVHGjV18`f{ga-)nK&BBOBBC{21;oC#TK7-N7&4nwn zZZ!UC!Mh=f@GxO3kT*hpLX5ryZ6a20a)MtD|M~ZBT{k-Ge|O`}Usvil@|U}0c-M^# z@^>#1;0nQkyI4DPWFyOFf%SW}{*TO#{B4;K>w)~7lt6r5TbszAKJSk|1^K?quqV#W z&VTO7zdnvss-MWiAOHDN9F3GK!E*lVBZwITlm9>cmATKrpald}{b|q;8;AUSy8sr6 z)L#V<)IV3^e_n2V{r|Qeuy9312%L>r+y7ZO$~$R^gwq#2>Hx=eqvutp97#kdOEDAR!47di>+#v$M1Ru?_#1Z;ys2 zJ=wys?nnMuW8`1HD1=V^5twzXlUFrYiO3*T^s)cj!9W0$y)x>-bYH|n9^>#D0i9|` zbP;q1j{qr`!nRLq|0Ozf6YZk{!k$n{0u3BI$Tg)_F?Rmz@WsO6i#+jj0}j}j+K2!J zOnc8k1&bF0{BoRM&Hwg1JcTHL+1`tkryRscl-G@8&CKi{KK{sCV3ONd6L0(I2 zd{XdlYd#{vez9)l+siX}Adnbw`)74L}mJUT1dFZVjBq z{o4}4NoG4>Qw;>1ES@kumD%Ev`6g*SNI{ar_Z%1Jm%DzhK^3~fXX0taAVf0)tTjEU z@}GAR9FJ`(>d=nr8PE3s5C)e;08!%np^ML-Sbz*t#Q;}`y)rDB2cV=}zyITzU*B~X z1}>z#M%^Sdg6UG``psosH>QL3-(~K|N@#1L^#`kwKkaIm4GR*yu|J#!^hQzO`A^3a zd_bGvwJioziO2oXEQ!vrmUtg5t-mic905cB_(ALi?Hf!$ypZ)mQq7}y*Rhb;+VC#W3`a720my^p zvsJCZ@4$6KsnZSVT2Xl%78<@@pMK}YOXOEa3#xeMC^Fybr{8*5TsZq(TROK=4f+7i z;Uf1YA(d~@1ulNMgX_|D&=2^dFP?+MJBCHt1EB~brqJhhM#CD;eK4Xo79Avr4i0Px zM3TM^*(1L*qNoUK`teQf&&bp=@zrqND2>sn?yg&r!syh8t%!yf#nO4k7W?Jncc>%W zx-pZED7>!VNwY|un#|Ef!c^RTY<=j^oXPK9wVP0J3o5w z@p8(gh5|J^!~S@u-UKn_kwE1Px{_eidg$2$9j7?Ao;7iT-r?q8`ANnwAZ0Tj#AH08~kce|g%$w{d zWPXR_Hd3kSza5?2T*)+6B1p@{8#p^>*l!F!(8n(VrCU&wJp?K(df7i}p#=>OOwh}} zHCqw-WEk1gX86axN$foIg`6I|y|83*zirZ*$DLON?Zep_Ai? zDdlCT(1k|P)krUpdT3Agck?S501dEm)V^9!j)wfk_dsqrG%+PB6 z?E6PdIgVOF5mslm3UU@M^_3SZDi4f!sGtr2(P~Tr{s0|JO=U*&? zTE^jr_C?n$d!}mOx*bih61rBypb#Whf46b=wrrb&m3d4ZjuJ61Scblitmm0VG74Gp zd_qxd#fco-qd>(xDDR8LCB@Ti`lFSJ^FiH!6?Ra!5)jMNrM7u$Q@Ht3-=|vRX|c!> z=pq*j+xj=N`V0mdaDm>;wuW!t5t77@TBrdA!}z1HC}}8XX%X6P)cMYj;2WribP^59 zS~=MG#v&e_4?*&83%Uihe5cDAQ-iXo z1pT(eULS~6n&PFU)sf2dLG~Sj6BKVKEJbELdGNSIKcy_SI}%DX2ArSl&*Z>RHNUUw zNI58(gct^;K@hfhybu98HP`%eZRXairHI&=BOV@+^g$UpcUcRN)dd!&CAonn7vFdg zKy@{z*(77T5VFGNKdto(#N4{Ly0$vhDGL0Ab@=)Na^j7rx5fHyV{PYnsJ{5^3?3S7 zQiP6L-aKdn#o3`@RX)qx`e$f9z}4c3$Gd2yi*(Ke##?xt{|cM>Qf3g$yhKLV)-go< zM|7z8ISJJGE+Bd;Ip$?jN**KU&d@5r@2|_|Beb4K8Yra1AlwSuQkYV9jVasGv3SC! zkFQn77i>`2LM>FftX|%U!+Vx1{yl_15=Z?Gi_PJ-#3GT5mX?-`rG9w&-9{daU<>Hr&!lb)j}k^( zU4Bqz7WM@Xx_0j>2f)T31X_1ig;S3725jyQ)N+I8E>O_phr-F|ypWVsvi9E|N&H_% zP%~1{bi14yW3gRly3CZ7==QVj&bn|ATS3VO9NG8&wI(kGn?R&Xsu&ZcI)4tk1I3qP zja5&Ov%BD4drMM$mxIRnIfQ_FJr(rr_VEL~ZjZRo2`3W`VKHQ9Q;r2!`j~ z^D-#d)eP};vSJK2P+sBg{X=f-Xm~Z z2toMN#D)tZ_icnliGB4Y(BNllz<+KPO*54p#`?5MKTHg!6s36uP{EHK1p1h`-_g5Y z9;j=Dqx5~KKnE!TtsP4X@6S&}c-moSLWe$v@}23_kFHFGIDkjuNId&B8hH9XPKCZp zGXbFd*3j6hy3jmqGBb$9j?IIVv9n)Yx%40Fv-;X$-+kZ@{4=lyOI6E;Bb2#HZ&6?j z^I^|rZ&VmYWS!#qm2clTzeIf7V!{!R!$6c^UK9lmfTCz4Sjal*0qm^1o3`DexWggh z8wX0KNB@!^;n5-H&{-nWbyLt&bno^&B?(_%tlaT$bV|K5g+VwH$?W^ zEo2J1r!c}f`STXCAjwM53^HM9i;@OUH^-As4>&H@q3kZ&6fUGzc|G;5g~f9)0OiMS zTg<`86^Y3M0x|<-uGV{0Yi3Ic-!aAuK(p-NENFr0nB6`GGr6Ldhq+xOn`toR$~c9z z?q&u6kbicOB+ZKG?Te%sk(8<@Gm^3%=G#_PZ4HDXPx*B!R9R0SAG)!0dTeO}PK;Ku zWdrVHw#KG4Vfs(@iXH!P(jYpgvxk3#9=Ncp{inljm2wLP11Y`zo8A4}pszafI4cZ^ zLH2C?Y6dYUUKLRfLzIuM_g8x1k!z1AJT1m>7TZe*Xw@x((*1d(9FwOzR@sFEpY%b` z=*`&v52}cQV}m-_w}6Jp0$2Ta3gXMPP_4#S`z>4;i(t08G=Vy4GKAU^md5vu^Pxx? zJz1bOx_YKg@pMk>|GZaxn2fXE=Ss6M7RQpu%?uG6!5~Con=`_EX8IwgfcR=I@0yfwJb(n={4%Ms zwwhnPv=qw+f)~NZLu|a~@0l-TWr7a^u(D55!#Nx@j}tk5c5ZdoEMG)40zj#&%?_hq zQmQ&4(4^IXL)Z*ls=rQlgt&W~zq;j7;x-8(czf38r9jx($-vPjD`>Yf9FMwy)fXuX z3?efNE^bV7eDuPr=A>Iakb8ivr**PYW)P-Ch-dJ9_^FStu(;oF;BYeM1_$$vRmhd{ zq+RPP;(4`AGK)`(hltFi5DxQm+^c;hBNzpZ?wovz>cFF8}?egt()5 zcy1q9tb)i3(aXgb+BJRuc}wq;O|D77{+6}Iket$dr@Ff55XA-P zH9TKfpXRx zTcJC@QoG^8RjxsRm>J}C`}X23%;xW&Y)>5i_H+n3@wA@tFmoph%IV*+08}GgMS&JAOwerjNI`j&^TwVZ&$u^b1=jWG53J#QP~P#CBB#) z{g);E7LO#=>qQAbj)NR~i*Gi#xfk)Ah91#BzcZvZ`X3O>axR$C43VGq22xUdL7IdA z_Ca&=BxHpETwc!QV9{!FWPU4Uns^M=q#eSbM`MZ`u*AQ9`Qb~@!j3?vw73vizcTyj zwGjcdx!Lz&ScS2at{)r3EnQy?2q^vsyv5(+K zo&+u=4PHbN{-dUa2jgk)0c${H`H;EK(ekaT@>FQ&R4rg(xzqq|H3mTqKuP*av{5jKviim_F#E=cRaNSW0o4&7W_&0wlETj zDGmXZNmn|Mrx$Y2DvL3QiN#IFAa<2`a`Fn2E{}L+w4J#A`AP9L6U=)^8je|5+&G{a z{(0210DyyNhA(ZlZ0`%eD<2`kjw5vRhidSuQ+x!t+69XX=O}$jcY{u@{S(Ov(ym)^ zJcG-Z+VXa-14^q}k)7Dl$?yj2XGe=>x0Rin+J+o!G3Zb`Aj*e@iAMvYa?n!mkCy}H zL-d`EiQ>WKPl8e=byeJcp2T*C&fB;cFu$f7v4<0Bg_)`T;uWAd7z4Ses8-~P>VMYZm(j7P&b%^i7 z7zoLvLPS=09UuMBtS_+~{V2?j;ha=?29n2+H5*vr?LP&~(I|LZko`V!IOr_$y|uio6*Ef2 zSYsJF0wBelk8y*&S0+8*r-gc$xX z>^b#*_xEFzqgGu{DZl;s{)j@y?H)wu6DYU2N=!u659|&v0onPiQvhsT%mbB%;P{vHMD&M$jQk(^mV@dT| zIAV(hzLt;tkU^N&L0flnS#9Y$?J$NBChqv)CV3CvD=eaxop9{t;z*2M zT(W#H%-zN#V~3*~_n+btK3hk9_D6k0HyrWxk)E9AikL~t=*K*3bNO&Ht{TF*{dwOAK$Fi3PTlVl%cRt%bBez2G@~|DeFHEJ31i0!xy!RlEvUht914)c zW~6|FE0lvnbE3Rc`IW|Df6%<%v2)@;4JWFRivyABk5&f=?~0tBg(@17N$oNGLzcp( z#s^4r_||aZz@yzu%V}Mc#you=qrfWUxqIKy-AR zRz=1MIIg+n(HAr}KFeO>w%tAcb#&NlNrTVQz_b6%!|mrWGN`mOAxNmUUg$!skR)&@ zUd%n#p^2Z)PIE$EDs0|H>VjItq~c`-lVoS^LsHNYpq0%lB~@&#S|M8D+nZ52z4G<$ zmyp{AXXnIO_RbR0jeq2{^a&#|M)J2AxTfE3j%=_fp1+XnPL`0e_bRcl_&scE!xH6y z)aO`fV-6HDZRzDKG80X3-#0CP0ht{Du^yeY1=K^7?@Rgz7jJ(9(w8hA)wew2pN-IY zom$4MMBpPDEDDHBAcGx73Vb>94pF45)FSS0*q;*!_~MD`v{A@|68k1R3b32hI8m)> zXza^T(7IK}oMmBQJKL9VARv#AwR@*X-wf58&XF6p^3tP5Sl+?hKtdh-iS`B@S?%0` zG}gOXF;Yd)_X*;8cY7jk6e%D7dFWR%uP9_h z^(&1>iN5T3KK||Lu8t1-pi9uTuz$t;IR!g6@Z@6f)c`Y{73tuLto=J_y^qncN6mrT zKv`%!Ar>Xsmtt{y5SMuBr(+uJXl^pSt1CB`vyM77m*~5_u0nuSjZJ56O$4+169+0ruE&%!a`854g@*8S;f`?_ZmnT}nF77qM%%53&SSF0}2qM=IAYZiu9b<=s@`vFa^>=v^hFiu+Zb0RK{7V2tNnP0NE zDeRGHsdcgP?y;{=w#N21*R{NV*+w*1Uq^Z}Gr>+F&1~%KO5E=V$rGaLB z6n>TvdJ>Gt!}|@u$iK(!!~WO2&FB*qi4Zfr8uN3daxsRh9x3LNz~a>)!~(5`s4U`~ z9+Fb6?mgcZaX>{x3Lgs_QNd{Z30DFkO>Ar&j?9A6bERU#L zhlt%7942gHh-*i0N9qZGI}eH*s)ts{2dPPT;rNZljcNsN%A04nYI7ikUdlXxhoI+R z3VW1M4r%nwn7BN& z_&=n*1yoe;7CuafASzf0k~S&|7)XbS1&DNmq=59$!+?mWq(P@3UD6$bfYhMWPy+(O z2m?b8F~qkI_x|qh-uu7*wZ3nCvs|vF3(lPLp7-7HJkQ>Hfk*pWQD`+8divJpJhQ=acV+^y_MeKlx3&&)0>xQVzER*SvO=5Z-4$wfae~2L|vx zz*3*G)Z)huw6wd8NeJ;_)yN@GwKSZsSBKh-T?Pd&#z}8-B`6nkQpQ=+6kJCX&bOH>Eyf})fc*xb_zTSK#CoD2ch)X`f384a-mKf?y+J(oWb2qY2DoCvv-RD7Yif&ZB z3#yQ(O~@6i=@F>s0e?$r&6Fd0@6b$wsWe5SSUS-N^C)7|-45_5wGGca_e{?zBrW5S zLtFqb&$h#d1h+J^JZ;0vEv@f6FC%qc>{aOb6&)l}e~I|`h*^(!gF;TS3%#}Yrdpwy zXNA8$edsw7CP^SKpJ_p{faI&b4;6$-zoNfEQ4oJP5s~j;ZQHMq5~?awHMusUqBU({ z5X&>vD{U=%0SVG;4TB_A?dGSTgm=a+0(yLRWv1Fg&t{dEE2FjD&^;_l_0ZeB>h#Rq znG)4l?F0UP1~B(fp*wU2AfDMv{CeDi*+qc|;@Z;b_Km5=A9VLSpyxt&{MTe|p+x)mVOo#QkB9EpTvM?s9?K*58m= zT6+R|zh#IH_ZM1}?_-k{IhkJFNV%~q>=eTSd~cGMk7Wp9!SlA+=}bl4m{p)DGS;~d z7KdT6#SW8CFpq#pSM_KNrssA(zR7)RAkVAc42gK}^VqiK3eF%k7Pp%4-2(+~o@~(JDG*0^9hpE_Iq_ zIj|%j0QVA=iI1ze4g*)qacEt{9pv0uzThatF34ZKf4(7rgJUWYH2O9mY75EawX$bN z#wWe6xt*x;9jIu+%N> z&-0x$)18L26d<057Etm{3$}qe57%PuLhTkVtNmQ!-GFo`)&Z3_(QX4M@XWl+ADbYL z`di3G>4DDhom4iJd&!b42z(H@#m`Y9xlL;JocFrb_+AO4$llE5xY-Yjvx0MS;Hz-U zgNnfb5e~;d^kn+xOis^o%Rim;s{i}SUrmQi9Hyh1_h{G4{Lz~O&{FZ8>ZNR_ zpHmQIKOjg$zR)zL*yjBE`#YT?q?KDe$`KGfS?diXFz#{wF8pN-al zG3nOE0k4Bg6#smrYcHEG-QJ_8k!Yblh&q2JRLjbi>gKC|s$d3-A^8e@<;hWsvU9o< z_tPmev6^^6pHpfuuiEOK2#4Sn<$T=7M{c88_$HneZut}xNHJBVw|Y`p&_@NUrqV8* z33(I5)sC|*hw_Wx{ield4x3ua@o%;zza^aH_Iq|&p>;2np!zqT^o70m`)ssJ_j6oV ze(6PgGiP)0FpE@v@udIJZjrrtEItX%W==qTM6<;8AszC6BT3&%iYm(F*Y9U0H6kA8 z9?#MOt?3Gc0Z#Gl`(4PCXeqBcOW=8D{k!jg%17joHE2giuSTPbck4 zU8% z7GmIRbogZfuw0|*ruFYj`iUUzdKTH!sR{*f#YhtP%5(3DF%xAds$m=%HQU*+f?Ik{ z)~TYyn>pyA$3VMrbGtOIr=!tONC-3+kr|HNH2i5XnoZ0&- z2(2n2(Lls;0;A)I?%NtGEEjL)6Oc`fk7VHNVq`O|tGk@tZ8R**4rDt`^Z2Ms^H#~3 zDr+K^vJ1T1LFp&h*i-V*xP!DYkG|u$#c-NO-0@-z85qovN9CY2$sp&#kjo`;FLQQD z(=4Yzo&n|XqfTmR{pCF;(YMSp~CK&~j@8Z-5EJ4~z`&#CYik1bcQA zXf^6JB??l#thF_5RzID%jc6OTXLSlerC%gT3`Obe_CIw*+j*lsM>}LUD&KKy(#Ed2 zHv|@1%Hg-V-IRc8*rRHX3De0jx`$FT_Xux19mw-rzf75}EP?S^q@mh(cKlQS&0qZd z{CAAoQ+3w>M^aW^3E2B|JOnfPLR)+8t)G6M*85kfCeiy}8`qh^T+M8THsiX=gA9Rw zFXmV4n5DIInL&?$@Y?u5aE3<&M0(2N$MdG98gOC41>g&F@=u^Tl~r<7-iTVE2DuasN;XiE zWLrp~CzqVj2vyG4^8pfRM^ntTCtG6yt5O#!WqOzNH$Y$!vc%(5c;V&C{I9bM`rkne z@vchRc*PXDdQ65lUP`5=`ku2O9{f$HC;Q{Jvnvd=m>ip5JMJd0xk_ztLWYA->0{p^ zB0U5EdQiItF=i|bGkl=?&6xPd1Klsiu0CEP_?4VePK*;^1k7vf>Z9oV#-Nj70(!c+ zgTM_xtoi_5JLN%bC~_ecQ>Vm0weLD0Znu<=1v39oe3n`KX%v9w=3C>VFYeMd7&r~Q z`;Ejbc+Yw0M)2{G-&PI+UPaNBzsGnu*xwf^5uj-}LG!JfrgWIQGT|u&QHeHfdCOAT z7Fh-sR+OYBuV`~FE~U&sOs>&f=NM4HfHSVIFD#K!<(}|M4?j5MCu8TR`LaH*nU98r z-`qH3<48aBk)vHE~T9Elh>!Hw%XzA68xU%hs(*+#dsvhJ?YZiDOtb zX(xi;e+`*Z)=O0L>>^B&uL+MlYZYmE10*F?w_0Ko4QL!;7 z>EX#GeL#R&zp+s37x1+^D%oV|@4NlmD-F?Mi`&F>>29d>o)Oo4@~I@Fhn0Fv5K5pg z)PC#kukXBmhKqh(jV&=FIM)Wk_V9Y2YzCarp&`G$nn)ychiBdgRp@8jty$=&axlB{e2+0cHCKi%&E1n#%SwKum&NFEk+47KE0E2%!`>a`yIgiDb!zJsx>K2kG z)q512)R%x+)o+)PK0lJ&L&13+r#iEx=)w&94TyWrAabcN zLO#ec(5|ehB=@RwX4mw!XE&rtOf=EK5S=MMWBo@aX}IpaEj3^FRB*Z0P5QZ6#KMJo zC{|gouZ;^ljg%hVnG>pQwZ;s-L(0MH8?n{p4l$=@)%BvUPp=oM;D%LdRy(=qANFv3 z`eW|s?jo{=xB$(NHD6(mkE&v%9CIIkA3tiUDuDfp3YrxP&4X?E+EOhK$JtK3nbT0- zo#i;f|H2GLQfFx$6CqhX(bc%7sl5B`0liN&&w7xdd{?Xs_uA6gdd)*oaF*t=(gPmZ zMNGebPlB`<)NRk4<2R0e?{19}&KVU-x8eJ>;I}g0?}!y8eB3y2qLz9-QuSd`5TySZ zM*Tn)Yd)E&RJ7$IETD&gPRnU<1Bi6;Qc`}%1Y{-C1&3_i!&IQmpFG|70b-y}Pook} zYQDURxFYw9wM>OWZs~Ns`ChLxk+9Re=9DgOwqz{uca0bA)@v#%yY!8G*Fv6!?k66) zVxU@lKWUqF9b4B@o%6b#I@j`g@Zbmgp1aujvBkUYzKS#0)3zjJRLjbr#XC1(=Ma8t zfQsV*Qi=Lj{1J=PFfuxg|c0QEmK@lrf|NJa? zI|n%TpmAzx%E{N9ti4Y;gsq3PZ8?S zd3U!GH(e5gveZ);zIw9ti^t~rQf10J9@lTKJ9TpC2M1`VJV~pdlI!64*1eYn^1s52 zs!`dV`Ix4rEvb_)2IkQZryF6Hk~}@d5MAWI^!kSJ#U~%T1JK`jRvWasGNpH|qz75= z265{g67+z`MnVHke87l6Os+bHENpkexx2TTuNSR5%2`R-g{w`+t!h|BDj(i^1Gc znEx$;|4$M2|10%6wB-KR{lmAzGyJ7l|NkrN{{NuX{)|j8`42tx|Dpf>i_}H#5&7&W z-~TU?>k6k?UD)~YZomhIXhWaACZyr<^iZXE7zLrt{_*)+Q_r~*cteEu2#6L#L3SGe zwm;|RFMiHm1i5PyfRFp6WO)2!=9xX_ynjaxZ*LZUB1-@MejVL_ewl z=uF5PFPMuZCAuBXuw{@HG-V(G_vu^IH|IvC)1W)ql<(8 zTg~m}Mmc5G8T6MHpoW1h4y3nDFi;VfwIfc`qiI+U0LWaV=dvo|@)n?1df3ZAxYbCc z78^&51e)o-{-yOw2yj0jPyx&#)p`%0QT68pTQXZXh(o)j5w$X^x>FtBBh~Un49gqyS!fXb9Q*U!% z(=s(8kU4?~Y5ia#$i_}6CED(R*d`bl@=Kbf4#-(Q%);EdQs)0&ND%Haut7JceqESZ zGAbfVRWh^$L$y}Sb-;uhvECn!7qyBmmO|v(F_!qnozw8A?1tFL=E|^u)E4ZBp6QhQ{Hth^ z;YR+zp+w?oZ&6nu5$$wm``~mdKL)@= z<<@+pd(;vP%uZTeWl_^sbeAYPMT0%~MF*-&*_8w1tqfe1CuZJ=lvwy=Sc5h@`K8~j zm(N-#(!j922PLhf3!+7XmeVOC`0U$-6VT-0sFuON*jk$u_a&`OVTwcmRDSFaL8h2; zwS%rZ(dc4gj;2azPU%GCd$b5BC_687*tQPAT{i&%%16%EtSON=$3=`2vQR~E%rhV) z;NN2;JMhKeR@1^|)xN1FMPpY`N{dY1AOi2gA;hYQLUl>KJ2IovHkP3Pk(i3iKyp_fYytGE98A7F z`C5g$KL#e$+G_5Ks`H|ye^6Urc-zJSlKLh%?{3$6fDpU5C*iK&cFpZzK< zC;D$rr$1Rj6lVvlUwS02+p95d#sGbxgQWn^-o1~hagp0#q}CCUc(W{i^!;q1k{H+s zqE^}9N&C* z9c6a;b39XAE(`?-$#PZrMf37)RDW#+=wi=D9A&ZH#*j%%qHo39S2i~ebJ@lX(tFtO zh>YGoaCM|aPW<&m!+~3ZXGQ9MT&p`E$jKhaVQKb-S~$7>Y0dSh{U#}w^^baA-p{s= zt@FnfiroPkp{KIDPoF3_@wtQMY12U5^jcE>g9sIkDCIQQ>XTIlN+D}4g&t?#22~ly zD*5UZ19{dT6vTG9wm2%2rgox~S0T1HNYZ`vhl?dF`!VT8#xEC~r%+O;>?7wE6IgHm zu%AduPHxaFwM*(Qcba{PQyCcn$y(!ncHYB+^0z;kJFS>hyEO@1n@+a+=F!3}YWK}W ze&vn?iK(AahXaxYdv2UFRq*~dwe{7j^#ao?8QOn4{2jO7cVxoT*3i&!We*$Q9D5GG zcF8Ys)e6ttGXBWp7PoHQ8bm*l9RXFab6}EHvF?ZgUS?t*_N17BA?gq6D%Z>I8#w2! z4VSKY(*cFS z#{Td)G4^P;e@L_N0MyJ_cG;In59$;eiZeAn2{WzU(LKiyKq`CCDH?3KXbarm50^o% zSKQ#A(HI(;vpz!F7ys7gA&(R+x68l$wfIhdpn`^ly-3t7KJYlK_xRu^ZTyi}H(x-CcdET6dz|c zQ?KjK*LpST#Bc(FGuw#I(=>nt&oNdURBT*bWWE)Pujsh+&cZ#JQEt-^#^oj;$|8LxxCs8UzJTT9lP>P_*ar) zh+AEBA`JI>&VvLvns8)a&mBPw%#ALt^slX)$c0`${XufkB0u}2a{|A)KKl9_G?Ahw zOmd$1;*WP_i6|0G@YAH{X)U=}90WC^9Fc9Ike!JRRJg5J`4Zr^VZaDJbunq2S1!_s z{!N?YXf~FSEeH&=O&YCZCKNbZ3|FDaTkAdn%g$)D4*9*YDAn|rCF^BK{)tG7mBErw*>GXIrc{cNl#R10i8J+V$SSHjK zGg7;uRs)i3GBsqqo=G#_FK=}6eOj0W9c<-GS)t_bfbeau)B4)V%12m=Ds9K^`Wi2t zRQod^pr83X>L2^3dW_CrPR)F#TrE|CtF5h#JU@jRBPnw&ZP5f*U*kzzbm^_Dzxl6_ z23c>aokOmqbeP(3elOcYc-olw6iundME#t}14N-vv8G5gh>l+!_7}SG)DTcdtet6l zENTk_0oi??s9OCAHsvXai0|OuqQ~Lb@HlD2d;l-t$Pj@B2Y7!rBXAbH*Zmv^GvRHanRsf?9txN)s>;Gk`tt>51 z>tBSk0^~t%ehlcf1xX?>Cd@We#kscy>LjE2OV6&dmv0LR31LM@HeYJv(`=mZDun*q zT_ZggbLQrt%4>{&xWC`rSE+LkTb!tUgN74i%3e5e=ehWN-8d<EY-FF?dB*LV>CC*!TC%i#MdisU-aVhZfOkXoQIy#tIO1;zPYxAMUSiW~Q z3kyqZJ70LZRhbDV{&Q3G;cn2-qi;1Zo>GXs)|4ML4lH&StAOsVe%%{4ZgiD-@7|x6 zty4ZxUQtF{PFt1^=#mS+McIRlF5_Om9-$UQvGxN^U=gfxo=;e;c+m#tf02^_-dB;r z%^?^nJnY`-;sLZm6(u{k5IYQ3Jb~N#*|Xf7#BA@aVLwvTacWB{!KD^{L>ijC4jjT_aZ`YcP9WQxm@A>!SUwy^tfSA8=w9~kfl%BR6~pNdNIf8a4tbyoMBKW zpMIu%^VtmxQb?f%P7`ct5jIZR`gwmr6Z;jT*Vedcu#vJ^8H?)L+Ln6E`0_Fj61KC+ zF=lsgb=NZt=-PTfNvuT59`61hmQK~`y=QKSi2g-4^7I=dSXfl6E(K1QVINP&^d2@Nhu`GArp zQ#t_7H<2u?+ZKM=yN^>w7b(d9`{QZJ2n=m$sb~eYAu6v;xu(~_OGOyx+}zSKL(0$n zq_pV*xwvEeRR*UoNKhBs0%KTCUU*30Za{C$Zb7Q-0#(v6W@rUT% zFbv3=`%<=Oj=>)ZzK*vQ(5(pXx-Jw-^Bc(F#r+}{15-z|6&2svNcfboUef$6DnDJ7 zcJ<4i=<ruOdw6 zG{;zu9O>1`*bLP9I!R5t+d1~3Pgr3bRj~E{dL^5*VS+A<&xb(m$n-iiB&2>ueX!3# z(eLfs>4m*9$q$4}8&r-jLu|Vz47c~@2*ClV9VciGsHAQ{hU!S1Q7$MbP*=;*Ev#z? zHY89yFt)R(AX@BB%EOVR$jHdl#v}a9hXfs!Sf@rupAum@*ZCMFHEn46!}-)H1^_9d8|{zz#|)$&A?wdUsfa=!R67$85;UxhAThAk$4 zh|1yMf8AxWAiX~aJ3De&&y9aYwl^xA*J{(BXXKKu;R_y2`DNJ)rDPsv-kViR@0*nv z;(P9G!a~tCW^<{oiqtj5#m^HD+oF&M*y3-c9=msX$9ewd`Rl9Z7MJdnqpH_rGg3*M zCvLt?NImjkF=axrEd_o>Mr!ZQnTbGL!guMvR{sETzH>LRIkAQ7h20d^CF#?*3x0z| z+y%;-sOKn*7CD#YnRUXsx6K0`5~*vC7ZWCA+df1J7!n@0Wkl)$JnHEVVR`P`or{Y9 zby5A>{Tx~E*GK=5q6!JqHG_$~K@5kU9JzBwF;Z9vW6q6g&xkY?8b-#SubqY`Nlu1n z5u&Z_ze+?s2hA(E@z3%?z4_0jUTDv1Aj-$fZ7X~aN;sEJyx=ImbL~?*@9)H4o8owN zi8yQ69jn8nL|Aut>_@yvGav_3xN+g@*LUi@){u5c$VX-?)$Ba4_9Mk3EH8p{CoJH< z;>Gs>I(q2M&RYKcgC5SXKzp+B<`wec@bwqyA1>xcWC&Tq1L<=MT~i-$+GvW@6&zT% zqcCL@6$O5v`5g`q9TgSz-wz#~A!Fq_Je=1~`mwqZK>D8=sEfhkpI}ib&e3)_VRYOPk&Pq_dBi|MO zoSY8JQ6h^hM~D0K39Gg-81XvbFWcy0BWR?6w)QO1G0-v=)meY^kVfCm>boiLD&&ryh2u{uRGW{?^pfXHO8f zOsU+AD16%8UqbXKMboqH`uFQU2{SmnTME5i0CwR+L1PyidyD_Wo%acQ7&n%(U!K0T ztVoQ;?Z_R)6BpVBOqg))OjI)A=d`2W=;x+2Rd0K%ti?BTmuFWEMN&p+h`&D7k>d{g z_@}V8PQ0KJJ^r6|K*s_&Gx-vc&PU(X2mY}vYm;!e9R+6|+}dLx39suw=!CT!_x8Zf z*BGVS=T6~QlC>as%x_dFDbXiu6H006nfrno_a3tzp6BIf2&RP`2=WQot1iB;>5KJJ_z#jS~J&e2@XTE3r?f#M(H&$Ck1 zE#{U+51yyE<&d*cKY}v+` zF^M{;W8?XRT^o^#>gAnefFUrLSE!Wf*=>GK4*tOX$E4lJt(v9lL5l5d(UR@1T{Xhg zRHexJ|C{w9X);n})QWkW#UsTDfU9Og^@Nr*rLR5Ob-7zD3nu!iFT+gi0Kh1Zx%oqB zbp1M@qBJ>9KufuCsUWToJmpn`-&AzEZI$yN2zX^aETC64JzajY!$8oy>l^{q+tbsq zpMgq-YQnS~`q9{4x$;OlF)A+Q%6!Y~_3<3&x2hrOy7Xo5pFooEwi$iLTl4mDOB*YN zpYp_Q${#|Hfb=?MX5DP~V#egN^%G;>1ZMT^>&yFz+grukeCe)1Zuow8vqUZldB;}6 zGt%lgOq-bLvgKbUz66hIyS(ldr|m%lw>V7sSu3-JyY(oGi85(t(k!Np+dQWFUH>x0 zl5ogPZ+kfg^Tt)1;6(W;kX6jO-Lt-Cy>;H)t)D)o{P-B(M+rBymt>WO-T-B0<7W@f zXMi@QUAbMOLUSu635&W=u@P24N~A2WMCZQGdY||3{&V8Dkg=ZM#)lKL@8<|(tfU>M znwx6IKD+6N+3OKC&9jp9Fy@=GUvm;j)SDVBIk5`H+g0l=MK5tF?E}>X4g73|S-pj= z>4DDMG_Pv=NGNj5*4c50u$Q%wXp}ile6k^YmnwpF z2X#6HJlBrta=Jv*fSJ8l4l=mZ$GK|fKiiJf`h0HS7Z51MT{S#c!`b!v;HiWnJ$3c( zFW=GHN$NwyIKuHwCAD{&0v%y)*;cU>T&B3gF^%p`dG+emN6ZK~QLO%u_=mOeBBMW1 z50>n$q?(m$N-{HB5mv{y+MWupsE8k?eP;Y_;1dIDl%}hh!4#KYoK(>*Z_<|pnoQcW zE5y0*vhuT6$<`AAUvOMY6l$!Y&^vZu5QxZk)E^=GcNA9pGvT(tVKFum+V8^?C@`%jKTwa|9(kG*oV!(BwRMn{ z=KBeV2C1kRjsb|oH%!~W$jZzm*0n~z39zIlw5R!!tygV@@p)H8<1*eHqKNnJHoo{e zH1uc&*fB*fuXyUQ=H_N518=DF7Bu+nslA^qgSMEYFoO%=5S9o_OH0e$y^l@b>6?@r z+43BA1xk1feEoT$kI`XDXO5mUg%cq92v%BPY>lt#OE{6V-KK$^oER^KT*JBP{TapT z@8Fg2dd5nLksAkXNroqf?V(lB$B~%a3O15JxkEp5o z;DP6syh`~)u^-B#<#VU{r?_XMK9tWK$f1d5C(BPi=~cgM(8Jz%g{0Gv(>8 zD_$C0hCi5ETO9dq$!a&8V}ie1R$<-4lbyQ^!6gO0D53aNr4#>dwU;)Gdyx9NfR2VXWyYWY}tD7 zbklGPDylMjdQ{tuvC*Pq8;O|UoJdt04KMw}Y>#b3BRuCJbBU2z9If|@d5-JpStzc` z-lAXN+|R~$#G2e9pzpsFL3IF5u?&BUNlovDKTI*G^h9*VGxkWXJTp`YRlsFg{YC8J zuN|`|lv8W#)0Z1nQ?6yxd`PyKEl^RS@v&xku>VTYWJ!j6N-`y5%c6`LV{22{y;Shi z9^bD0>5&gp+ZaUwV<=6omfi}m79Mv)twaYFY+n~rpVOrLB+Tgb6CY__k-E^8mg}&u z@qx#jq%Y}*u_c2FM%C0nG9~v&%~JnXW;5eNYdWrzsu+qV z*_Rt;gl@y|v8=am8BH?*qJa0n4-Md}k@(>yHK@m%AX^WBmChHJ6P`KVAM)z`V;?^? zPL1~qy{y)(n@2dSh?v2t1C}qoPc5*Yt}t)Vp|mxJ6E0*~jH?}X{3=Am%;VRYV%}}u zEYdY-Dhus@NpV{mRfu`pt{22aFxTUe@HpVKc~wn;vil4EQ#-IjExSS}Tco%|NO|3` z6`@>GMCoX%lAC=x2L-QF4!Bj!H}86ml1_Ka8Mf<|V~%lCHCS;r7*x)AXgWj8q8CQ% zDdZ;cf6t96xymJ|DyOp*m|w9*_X1GhjZ2Hs+iGFs@m%fFy@FQ_sSVo*kvO4hTB-xP zCwKcR?P0ZW$)ev0V>8=NZF@arfS_+bvZ-rC-Y}mSa&6g?-G+p-L5BoNSb3S6mj^z8 zsP$+SabNCVT7aWs#Nmpy6=tIEzGF|fHDZEUUXw0@9>cLl<5Rz-nVH!aJ*BiCE{{`H z$BQwH7GWVF8bD>7pG_>gOC*~3WB0KU*=C2Ut<@5Uu>qdB6A}Rwh(td&re_H|kIv<~&F43W z^|Q&v-yp9ma2a(!7aGb-=9_y(OFR@S&ZhZ*4A2fq67fwHAmw@)iO*(_{g?t6+Yv8U+9Sk$1 zG-!A4vnfh@oD_;H0*vOlbWes_P7T4TFVC1P20bwfyxIEceUjQ%b1KP^LZ~TaO5ymO z0TjI`)Z9JGG353`Ujjs~gZ-LW@M6Ujh*An^FGH(~hb7gFOGp*EXx!PstiTQc>8hy5 z9z|nH-PiKa?cstM6n1xLv4FJ$+`>=nZuOIUnuC<=UPK=%kpw81d3*^0G zQ5KmL)f4d%S4|z+Zsl;HQ3_X%UefFuS^kAm_!HYLRaTs$Uo|X|C6l}7Ug<-e#!8sD z;OE8IKb$;JiL9af^)r-Bs{`~i`z1O%u~xV2=o`|aQBc#5HAn|?5w4J_kqk;Z%Byvj ziyW7q-tI!D;MyR4aMz2X@*MolDk#5PX)@W7v}btl@>Th>Lt2B3Ek+kL%5W?7fC4K{NMZ)HJBafO{<*Tv{r zKP4qQ{p|N*yOjkIFT9~Nomo!IgI+E*9oxd`%=Ycz4iBB2k_l+m(qM!ehG;n7W9&nt zSKU{z?jJg~tfbeIOmV&7AjN_(ZYI{Xwu4`BeZ;+acGy8m*`hBOb}Z(YV2_ZZu>SK| zT<12v*wALyHb+*cT9VgEl#*s2C8#~cxK`GVIh%uQ$)wy5rM!$i^7dlcOaD61A-*Y zUH;y{l$R_9ZLMPj%7h=K-Wbt#qA!84XllybR2*Pz6t}g7h5ZW_s3us@8Q!JMQZlFX z__4k~B2_l-@;)9Z2`lGsoQbt>Z?wgT<_LhP$+wJRs zKLHiMA|VW-pyb>WYB^uz6Wmg)hpVbqz5(ipE>3weH!O$WV^}wkOPsuHFVOI+yK)MI zoY>Xel@i=4`_-cSr(%spgJr0UTaR1$u8j}r^;MzW22lmfrr78a-=kCvd#XKc(`SXC zU);0Wm7AOXAKt7SU2)q6Ve-Jp<~1d0H>1(bel9`BxJ2j;au!v|z?LX3KL6zhQvw9D z#;0$mJsy>%n237m`}nZ1V{ex@cmGT}w%08ia)>>P&!zLaN#EHy_^-#lV@IV~8EeLv%URln$abL|3lGS7_C49dc9?&6SuuF~<*af98j%?~p+8s%(yZ0v zBi6WqU9v3MO9}BQlXmI)FRHlvE}7M+$0*5_948Yax?Q>?QsPs?9B8wl0MnoGy>5xk z*Dbm4d3jgFKN6XAJ|7aiUTD;Gh+>h=LVoOA?~o=m!bF#aAH2a7A~q5uVp}UU3p6wt zb0@~T?aGvinzFJHedTh$3PEpW3o#IN9vAe9Ls+OEnF(wZqesYN#!{nG`qNCKW*2>8 zmQi@fr+Yx_p7{6nkT1aT9So?Vy3vOY;-BCLK25zaq9V6EH`EZz5SltLJWwKyS1F+I=KnWof)S~{igPs*J8Y9RjlD90DM z!ccC_-VJme@xjA}1#v9B1m@QtE9T=&;J+?W} zB|JU8z0z2H{~6}UxoZR3TPfden4=U_xcJt-u5Szo$%iXa-km$AF`qiv7uq8y9FLxA zzCRpq`eSY(MeouBv2ga^(dP@EVFSuY4I~9qI)95O3}f^<{?wHF3`^ei6T>6bf1${T}bWVpcF8e#^^`&}M2j_FqA zeX4b_`r5-R?qDwu`*=-zv24N#^2OtQo|i|S##0i#0R@%${tuHkro>R|{ydL{7DNHD zEt7noQ=vKc$)4*sPZu1Mq`*x440macyYOtEzrOnJE#mVyf^-RxM#;pr~BFt+< zbbs9pikcx>ohVAK2Xq>JGYVdY`FiVOb^<^NuWQ;aMpumv_=!_hW41loEv6wY@g*JW zq!aH$Hl6xcI|0U@k;bhSYB$a=hBwS5pqJgUqAWhoxm@TU7>HSnpL=pPuu1)k{*79G z{JJrtSL(KFWl=#OC1V0mD1m!5A|Wg6m#GcWi7&z&h7lJDb*X1Y+8H9Y z`c6fxSUA=6a+c%f&jMqBkGN@;{)p~8{Ux`$tH(J7jDV3F?Uk=5S!I$mzZl0Zr_LzW zULK4w2-+?boJ5!C+P3Wx<11M$$vQD2rc25AViWu;b@EEa^WBsE>{^s|lAoAtZo5EV zZm$Q4P`#E?V`wFwcP4GlBG^8eKkw{n7JsSkjd>6KW^b)<0qgbA5l3?y>+6o zo{dQwn?Y?^kbh+Agjtd@bY)G-g?R=Uu3@_=N%wu<<6$zHn!*6CLFY~}zdA)8V^~>j zZr)`vGdh#-65QFnLi-?(F9s%E3rOA?TCL_JFa{}2!~l}c7|}Gm^z+(~p$F{7Gx#4i zjiMx@57Zo1nw+s1$?AmD@S&}M^A`s})G-1i3$ZQdw23T5*E;r;L^8E9DmnYu2S99_ z%qd77u)g)x#GYwM^XlM@Kt8o>=j;rs0FC5?gjy$#DI?2Jd*2wAN0)JTx>>K?Mt50{E>-w49(j{WNH?v<_0dJ!t$xFd~IJ9f5ae;ho5!baXWxjOyPPwk%^7|yiOxTNhr2P zK7C6khwXJGf~|dA&u#N)iUE23MXJ>R;-c0rfD_t28zNt_dP5}yMILmK7db%lH?DtD ze_BpQ9z<)?8@C|E8sdp8uinxaQI`gD0Bo)wV>luZx|LQJrI8H$XdN3^1UZ`p5O}_J zv&uUr=;(9;u%XOF=iuXwFmC*rbk6qKgqpXZD#H4PAc~M*dAf-DrJKhhsCrK}2hxmp@OtF&oWPc|Y{oA-rWmpXRe}S( zn|ApZ>bc^%r9B2cDkFbvER46rSPe#qokd@AOJM5KU2+vB;!Euti=hFqn`tR&Zit== zuOminSiKV2yP^mYPTB0G8yKtBu6FJ|=W6+*)P@eGKFmx5C$8nhn>FJ#w>O@}2iqpt z%tuxm@oHy!#=WRJYw5CD>%@lRm<_^&qayZStc9^+&8oMr*KdW(??c1C-e(# z{385KZO)DMzDP+v8XsTrQ~H?)()zHFM1RoL`(%_QZioF+L);*=>J1Q67p+XS!ye6M zkmT}nQXu*k+sOW6l}yu6)?N^_Slqg}Kc7P9&&P2g8rKSbCXZ*pdCuOnPdt0G)u=`t zr}mdCFsoTL8_E4xSHIHIl6AgwOTSXm_6jd2gBKFdSXcggJmW?IWFiLhdpOt7mv9Br zWckM`N!SwTzfQi`>EaB%XRwCr`)?&yRSg~EH3R8EVx3eHyG?g)xGhWeYu+eO2&q=S zz}|SlIbo3rdY5P$%%ftH6`WPnoFjA^AIpx)^33hqcD}Lf+yNp*2_xYF;vh5#}^fVbX`xU5UtRC{}Pp|xS;@>xU+E&C#=B;_eT%>9EgO!)KSm132wC%C| zD%lcw*Q~xfV}*P$~m<(Xt4t|dM+`lJ(3$SvDu(dhAK6!@RszRx> z$6p$*Q9jAomo=ic)aOD2EpZa3cjh-4})Z8Z{gKOk$-NQ`G?6ECe5vOmP@MeNjd zP9t}phlLeo4**yR)ZWO?N9#!Y_-;1i*EBFv4qGyJXA1$fNi2HT%oaDJJ?hZOR2Dcn zS7F}1kf|4DIh|2090$gaVTLCHql(dh!@UN@lyY8QAy+W8Wf{ zyDPF0Du2eT8u5kY6%`U`7SVjvhPU(vvWeNbhI(;jaZ6zi)s#*FeQhl*;voG55s%3C zFm3A~JQ24%rPTPFiH-NL>|4dvZ zzL!s>V!n&$Lhkym&?dLpL14>>Qv0%nBwgOVXEV*sN|~y3@>6Gw!&+SE?pgl+9{o+n ztv~)gd+lmA7E}NSl8+vCLu@~Ya&DIbOW_$(6k__A#Ey|Qf%oHol z3(EoR6)EfOD|4kY{+_wI(i5USi<@N$rdR$wNP~{on+X#HI{pk&E7a{| z=Lf0@Pu`{;11?RJ7$=5GudDoQH4eghlLp#`GOGz&x)kpY+wju!Luh6yhOq2?hzIU~ zZsnHMdc1xJy7_+nsrYNvqopw+g0oYJEp`{Qr%C<*4dfi+$E0QUYHZcEZ69791OP0W zaDh97zTcy>^KQ9)n#QdDEAa{b-t|w`-|ePfTqfHCHy2Pdc3%1U&EzS4_sUVtc*AR6 zMmh2JmglD}vA#6vld<^%OxeZaT=eI!CS$`~GPBQI#aFcJijVo{V5`ys6G=Z!qFKsA z&uDw}VVn-C;!15F)K;ytL zVJi4vuXMg+9A4>%V>~h>2KyTIIN2RR!VWWhQh(#Hle#_>bRXM40F4-0xmTc_`JcJy zn*k=}jI5^@mL`>Wf3tDi12JClX2}a4j}4k^QjS+3uKqe0SEt^@q2&{D;BgU0Xq=vr zfiC`}pQS+pDLr=dVM~tK-)$zfyEBetSw}((z zn7{c?Gm1!Yyv@|uALJdK(pe1CKQV^VU}9}_ysOgKdAsGpOUs*>DRoP3YxjlTJr-vV zn`uMLe02yI%nyv~yEWv$Dh6Z;=2C3wyg%&s>nZFKJE83(EHG5X=8P%k>RV9yl{ful z(75rEd#A2E?hf_bqnP~T<1a(oJ)-6*(+F0y$Aph63adVQk!#i;pv>9w=-AFHnvM`I z=eg?SRpw01S&&hkpZ4#$HEz;({KP7j30w`BPPfX?D*!tE3#>eFjVf~v4Bx0x1AVag ze{%R8I4V9WP{V!j56ZeMR8;hiICz7>=j@Tp@1LE)%WOd%}|s395=H5&Hea#G+;z9ZxVF`VAul=}oP848h!hZTkT*?8Zm5GR2{`#57Q3nbxW*h5 zB)hdMtW+j}R=v-)x@Q;z?Ks|7=_2;HyQsVOMgeHD^4OdGw}j$3A?5~zH+2~KHqHzVtoUCP#yC6lFtrrAtI13?}Ux%NHX zAac~WZpgR6?oiqM>g`MFp36J|1$D!^UN(}Zq2;dC*DOHDKvofY*5qs&QGH~)&pslN zm07&yk?!@&X~ZrN!aB*Ca21>4M)v(Xdbn#pl|tl|OOrOXSN<~2!>&7GpB>|zrCZt0 zL|rakYVx+BtGE9yzmj0*%iWZvNkjU%Bcy9M?GbvVvaNONybYQL_7=R5=sCL6ZLZM9 z&w<;?_a#ecw_U>VEU`0DHd%U3J-~8^wFhyEb}&Vz8|J;pg(gf6wYh1#{pAoxU1m=R zw+cWUBwe z`A7R3x2z?w5R28%2d)!bW-d*<`Tc)Kq13Evc zt2nO-D7Hsos}d)emv>*2)XL?DaTA?8vrF z>5mIJ)wBL+kjpIpOcupnL1R|h6}jxYH`N={2&yw0u{L@vPp=!?>&_k%A0y?E>-lb% z%~}(F_*27Xed(zrw~xAJ{U0ty8c?L|3*E-sZTXKX zSgm%N;*e$jTUdYrH5n&kY=qN6xm~tfpnZRnufz`U{~9m93TkOSPqbZ9k#2?L&-ePp+J0`gt-Hku9)}Jc zQgNpj+O_w~-}5h+BuMfvmNC_gB&@=^Y`ZggmZp5G<3xi!F@+h<@e@d`=+(A-`M_~4 zXb9y56#Ecmh#-3i0SiygJMSS*U(8Gl3SBG(#MJ>0;}$*r9jX%8OY^eLE4A5AM*MPz z!IH5_uG?0ZSbfR-gV(JXFWF~U94mush26#w&`x|?RC<~CR$_8JNGUV%1u86_ymare z#WtuB=v+hNIg_59v$t04!ieX}8=E6xPi+;#xtK~lJiuLLnT>Yy} z3k)esGfpk;r&P`U%CGPbhrnT|L~X1>SloswDwjV(i+yOLtn?=;R<7PNGH~=AEDD>0wLAh;@(v!|L!@1B@AptL0`#26bM0ab^{Z z_0ulC8h??_l>I8K5~H2-K> z!*-dyl{js$ud*jhFw|@q5F=kV?0uRPP|l><02wxOP22*5D@ER{MI&|NiAld^o)N80TQHPmC@4GBfI%s75IZ?@kn)QjJye# zjen^p*6p3_-C9w?T)pJ0=r+83r>gVf0M50wBEw~NY?g)Jzs8dz!@xPC&lHu4KMS3U zCjlEm$j?rXMQ`G@-AjaUiJ!qQ2XF;~+OU3>q}RsH2|^nU&oL^I$xsc!XEP_a?UvAI zl=$H3J5)^;o7P>@+@p_SWEsDY6u+A$2QT05{IasLcf{+~k53EWwmNhb_wj{@lxyk#_4yLC@hj_yX(s*Q9*57&0iWTTsh_NDQp?sPEdbv3J>jmT6b-6*Iu zSK9q)_TsA@CmPOL8$2BS0&>j;vTtkylzN}sWXVU4#9NFXy?+(~k3|@?X)tGO?6yJ@2HHcID~dt@@srTKM>}pc(Ca+hgY@ zL1^o^SI8nb4+@1n56=E_8+_!4QBU{T|3hm90o~)>k?ZR5Z$&CzNzIJ;uae^$6EHCe zQu^NAE6MzF@wonYc+j)l!+^JSXq(Evd25-s8F+}SyJJ#O3TiHiJ2;|-H#kGJs z-c1FO;QM=JP^uyI;D8!EbdA z_!u&M{o+9(NE(3r`6h%GA|q<}HOscx*T7v@ z0I5@dSZ8x1RBXit9kv*y7mc2Ir zJQ$?2P6ce#gW?dmbu)v?XP9mVnTsbXI0D*XYoEbyc@7?S6lnUcNs|$=y&vcc^$yiz zso5W5d?mN8ef#|UKdso#4VF(|Ad-FPTR-O9mxh!O!;DN!99V-3La966!#JZ%m*vZe zN(0FIb%3%Z%XhifcZ>JOs2{hN;hQ!YCG zaaJV)ya^AQ%F-7#r_;QQTNN;iJK?i_6oRkr!XJ;8*?5C-|3S=|dRS1zY6C!_yDJk} zGtt}Ue*fVO$|F=6I6$<=PBuq=A9DOqtCRB3`jlCz11QjUZs_Z)(6CFl@zn_ zX;DaDlyKv0Ez4NsM&9cJyqC1J^pH-KF4)L2ktbXa4Z5XW?TMd1t5U!s>ZW7C5=}qU zW}vTc^DHtlwLtL}8Rl|o>*+<$f==@!1rb+;W|M7i-5P)D!ou+JmKo=+^#S4Vge9hm zb!0)vp??lFB)4GzB#3G6labFms0nW`n23n5K9~CC-UcW*9*0nIf<$YAcOG?4s6M>-S9HC0aCkMeSQ7g^U}Z-hvMM$5Gc9+ zRM?8-zRyj-Q<}ex!S!X%y04gOUh83V=w28Ly$wf*3LGIPxlWU| zeQE=oyr6c~M+RHU_S&YAbBTr5K|*FsfTm^KtpCOkWQ0N5czXVKgrnnF4)nfy&V62N zp4s5w99S*^)s0g_z+9cTT3{x_3(BADyXHrlg@)$VY+`U3KmOz$2BSkwP0ca~@8xKT z4|=}fPu6H);oyyZL3wd1U@ZG1a=w8JF$*NRUV11lYI}Za{%t7aj0xt-(QHZpu`DL+ zS72Vt+2EZ8zFPUCrKO_q5Rp1cTvCmor54Oi8ue(_)9oWwSD!9z8E89_M3)T5Tz{tu z3In+F z=6S9Y@qJgb&V2SbK;(!I-@1SNg{|A);Fe;MDQp3(e=iGT=41Bk4tpk z1RIeGj*$#hA6W`K!iPsoEaZ4Gr8$v^Srh+3uFt3CKW#_kL7|>D)N-e-ygVf(rMMOf za|1NPMgVVvXMO;PM!aY*1m5tRzC^)l%IUn~dF0g&VS?A*SXvykHbZu8V!-J_Yf#K* zax(>PoNQ6g`k^A|;yF8NDJ`s$GNbpW#Jk%GG?*BWqWC;UWsjm~3*s{Nj)%OqnhiO7 z;m_5xRmH*ZBzJ@RF@FU(ORo|(?-n<%^eLZMKr)j2E)egKslnB6mU0NLOm59V)mCvZ z;P5pH@4q1gWgca@kz@B$$1mU!lCQ%wI|~ne=9RLG%3lUymYl)_)j4w&^4P4Ld%^WI z{`GI};}*#+-)W^U0olkIlMPa13=B~fYw(4vaMTZcq77-38JJG#60m-VF&qXzo^HM4 zw3KP)m0Z2m{0609)>yy%?IVM@2M5>_Ab*yW`N;kz{`x%q}KXJUXiK z?CDdBv58bGnzVh_$GYjn2Y$IRrcss6u~xi4&v3t)K=8RWHbzu3l7UqqN3lIp1WIg@ zS+@lyFRy7=?d>Q&zV1usBK&eo^Igo$%w9MF=V(OMK9A8ni?Z?^S5ngMq0S##PrmK_ z2l7q*^8H(cu`S?%zSvwezH(2JsV1E@q_y`YoCpNKgk-85=s)r77pLttSW3;k)uSRA z$p8RI6MU*KTWSfFEe0wK2WEOkaG3~a>l%GWa{UuF?c9wBRU%|V2qMPE%gLjuGhOq5 z0u!HRILR}@*?0X%NEMBAc`W}h-2*+5_0 zo<7)G2(6yc5M&H8L3Z3=2f}^VYVa?0lZ$G{~XLC*5PXse1U8$pL^G4MAzY63=#2v$4HzU ze9a}UbbBFZ8hz2bG`gp!Ppwz0av`HJyQk+eNz1^1Pckg#GK`CES}By7cV1FJ)VdWk z8HN zC8|Cz{ob9KQ*U;i5jcWzIi~%m#ycGBRGTMIyKJ0ez1ah$3j5b;y|QcjoXsekUoTLA2gyd^tYi z2@JPdUv4S_$adQ3mn(N+_zbZP>nb4Y{CYwTa{oFYlgC-Ma_@ILaz@}GC14n$?uMZr zPs&m2J>HwL`9z;9i37DJe0*yrK(Pj8@h$0^@lGwf-Z#L>`s#E&;!e*AQF>2Q=8YPd z+2>}*6LO8YhPstZN~Xhpb(BsXqhKrdj{aVdh&(GS-9cemq;ilA3c_q}MyD^$550z` z$907h=K(WboV=CNo2)T|i?F`r!fU0j^UArV<#(kf`q)UGIMEg!85wzjB`#9bsKacv zi(}W9qDG32egZ@s@0Q|p6KiAW#HFPp z#7s=1(^&2zN<2Z++aDm_3A0olj*b9oLQ&Y>+z~ZO&BlKsC{N>FZFiRSB>b+Y+;c zpW5y9g25Du#8MwRE47DMoNC+w@3`?r-G#lq|IE(nXkZ1`+vv+~|JP?))Rf%^%j5(yOW^Mm~<`Um_* zLg+?SaZV0kW2g>+n)w^J;AW6-Jl{|)X?nj@LRU?0-7$K41K z5fKF0q6f0`0_Yf9O9yPLRB!yXRJ&ki-Cr6Ex&odew`1|d&qalW`bg6UAv>EPMWN1yz1M^eVP#k=#Z!@0&nZ(ThG{n20F^G7(vGaGE! zc=rp91lUgBS%lfeGW!_(Le}bCaJQep-{1Ymdmk5rvW=TT`vtlqdq^CPn!&WiLpC8G z1i>1XNQ@TGW;u^;%Ci3qF;a+U*w2G=8|PYX2jGH_ic8|%%SnN%q~`$UKCpfP5wg+j zywWF5=z{gv5jVH-=E(>^j#y=885E_wF=^-IEhQp}E8V&XARzjHO#E?GP{~q*r44wd z4Iz&VS~R`^*UMSy2yBxFgjg6NoPNfHP_@^-?*{!<{E$DI+LfE47Tv$R2pF3L3dj%< zcjm~wWyn!p&mZjs&89V8hN7*ly_Eec0N)e|2mfre5Tp6GKyZYdMg4gUa^C7sj0_fg zeyo!?huxHy z?puU?(9Kcj5~teyH>mTt%2e2~hJaKk9z~m_SSJdgT%{g9d>HovCBbOk%&6a~2KqeY zc|fjeL&%*ijX~cKz7jh-dnRa3@GB?xGWgm344hzJ`}CCX2x7EAy;&1%1Iz5VwUr_^ z!U0HEibWbAH9C@{UIChWwPF)U{wUk7fFTR zUr)`a1%6k|7Z3>K-0AVr`0_E*mUw8@-dWu&Qp$Uq$JF>rkIM@WV9!y0N_iFQdL zqtItLtKr_>>UhubV@T`kLr5(+Xl)w@7uDJqGi(evJ~L>&b@Y+p0Mv&a!zmJcD)|U& zsnYy|+Yzb_JC{kRTRjeP!KSypx=;qnOHlU3b09Sp_~VMG{k>%u11Jv^f#N{; zU_HNbgteE~Fhc8I_4ObB_b>fBGUmrmtbLFJ+t-#9(lPk^U$oHtxgR569Gh2F@$1)t zhy(Y3{qJ+%-%vAxrfOAD|MSP-KY}=G-UdO{!I!j&H|Xd;S990eb0KK)Dp|`yY-N*U%*xM~ZDZB1fy~{Pbp>`&K!>#TFZ-^7$ zmKxJ-bva`9YTmr{dwViTJAc!*fNdY|w|;za_uT1C=^IWnJt8K~{F9=}c+GOfIm?7? zB*|gm7nN!KvewoZh^qbx)A`#a|C^z-{?gjl`CquA_1D(+ny#)cwY4qn-|u%2uvl=o z|7=+Ncqfbhudfohmxz<*zc#b3rlx;krq+MeKQ@MMEkvRLQWhP=$J;`t5;(>C@0A4i z7eJcjVy4UeA2w4UQ|*doV6eEu^r3R86`PqzAG3C&PeoR~fk=-BNB&ioSbH>P02n54+2xJqf(sH?bE)GOy!CX*XC=w#&TO|E)EMj7aNI^~_4=jhv@2dRzbtAi} zxmFr8!VV>X?YeYB{IU&57PYmsxY0)$7!Lb29OE%&6~3TL7_V^Fi@5OGYUo^V$g>6 zi`TjTx++-9ih@$TC%`vMfyrbEb#AV%x{#?9EzOPdar<9Qlh#2N>AM=!J#qgWm9iv&XM~PVvYn(A}D&EUEVcUc&T;2<3$e#rcS5dOZmFbs*=jy{_ zgd|ODx*>#S_>Q!jfE4v^m$)&c6kOLk0E&K~AOA0u_J1jZcTXeC8-& zA}fzIIdBuuwyqwkPmH-BnYh*(IRd-w^XJdu@}Yd_EmY+S{j<1^A}F>P076sS!=nTR z-{D&KK-=%4QG91dM^guyv;#8o9I&+WNe5;Ph#HsO5NZLRh{%_H5K67z!uzvn<)3gf z->*l$h{L%U+hpWq{L!O_-b>Wm+Oc;zXKcSn)7R7g^$~0EFJp8hE7vaVzMs?9HfSDj z8S4W$_%peMK#(Js!SrSV6dn6Tds$18j9 z`2u~h+st}YBuE;nK>EZ0d3oFlzQ(ixR*u~k+&g#HDDE5&m$gD7uJQ!0ID{Ys-3Pqf zW$v?)$#DKK{B`!!wM3-?1ga}q2L#CmVaSmWGWaQQ6MnB+-bZ0pm{++9IGWX&bp9x> zg_(V)5G33I)#;SM%k@cA53T9UK?C?^1QU_WW#gNdTX-?Hx$m$@`lW?0F;$)lU zptgph&E1lZD+N9v26`R%X+&^G!~p$(xn4NSJRuPTtkcD+eU?RSj*}4Xj*rJfqK^1D zTMB2;sJ&s9Of@O@IQeZ7i;$2Mbcn(1MzNeEi{ksqfzbRS{W31^8pF*)=om659zF`wrT0SHDP%K8MtjLf#4Z74NZ0Vv$lk<4#PX@{4v|&+F z(z~VQ>4q$*op>r$TGs8f-oowfMn|}4b}1&$UQL=yTsudf(N+u!S{gg|PCE<2*EdVNSbj2BcoKS`Y=`-3$)+a3;q-<&jvX3s#t-u?t zS|g2_RR^X;WR*f<_KKkByHYmYg`5E)S&msF&U^R@QCNAaFT6-QVZ+sGO45M64{ZOG=$E^Lhey6I6(o4)6^U(a zAR$|;E|P)WjNU5%==6y;P)-mkylI)x4qCbwI$K=GB?8r>asl?`in$KkI~Vz*NJy-4 zwUw{>7fo7FS;5A^+20m!!S+D}qxiOI*>2FLz7ux4sGv)i2x0NQxmNfXTki_<)YiuD zem`i3S{~fu0Ht$gx&oQ?*wiv$DB^}LUc5M73wz*@LLt;dt2zN+R{$GNCNzsWPZ=Mt z0WcBn2*SS^Yd>zi>uyvtQZ8{Hw!B;bYqzBw)S+pU{R` zXv?{Ibd&lJs0g(9OZl@U%?#=C+#DPn_+sOIU4pP-g5-v4!FzeZ>GM!H+!?`EF;CCG z5yNME0Ku3}6WTNZGK{+~PME}oO#?8|#GL$2wD0=qnv?cOdI6x_+fY`S;zwHLR=eSu zplghuQt+61zgxjQhbvGHf|f{2$iu0weA;Pluw~(=AS_a~t*lqVT!%8HG0pP!@?2o)XtfnZX-b4 z)&)0`{nX70DVH@MWAAv?+cOD$*U=w~U-mH~SVvcJsue^CM*f#zs}Acl(tVi<(U(l! zJRFfl%sKw=jpKLO+S)2c5@p!OgqJDODFn&*h}OF@1W-lAjl-O>hIyGCkG1a;kCfhC zbe4DIzc>Us0B!=b3KVLQWKHE6ZfbQ@r;;6oP}k?nK${~sekIrBrrp}bM)U~pt{eC3 zDB3EvtpmAQjho$s!3Z{D=%7dx6=JG20f)?tYn2)C2wusJ!6!XhI1ocwYY{4$P$HtqfW{b}Bs zy2z}yxhX_qk5FY;)9R!PCB(c0 zCGVKIsNHAGqn$=9klhWQcF&gXZ?09h8|VD0_QF|; zWItoQPJiq_A97#+@=If7WQXuCexPb*EjFsQhc8Mh+53SO&?ABZxNcoG_Z*i;R$0Y< z)2@72S_6T>$Lj+_3XlT}N(YIeie)!gn?)tHwh@rqWOj3-A%D=PR{`DIyN@>MzK_f=zgo@0=zJ1l5-3kWGQfvIp$G`hKhUt;rt!ro z0t^Jm!sGEL%`+%i`PZ>G%AqK&ix9(+C?d$IywDehkrbO7R@`nk7Ih=R3UwF7#@>R5 zIN|L#B-n%T5d~oWS0q9K&Emz$@6h3524Yti;K`qW*pHd1M)6`I!^>@s2jzHbo1%6b zbZ&|b3*)3MjRw04&aLt-y@nVwMfcA?|9siG3MoWq;%Tm(ORGJ|s0Wh`EFfmP2`%6P zCHjmeO>=HxX~U+J^89xrx7!=tl&#;nu!_v-t$NiTvb{9Pjwwl!O)^)uvCR|JG0FSv zkWjQ+pAR?SPA%%n&u%d++?{yh-XCRcP2F}z*isvkkE48+lYKW0pRx4vs?n<3yQ7rS zQt8YK8_Q{(%ujVnnO+TAon&6$CGzPz__oAbQCf&GRA8C_n@Ks=so81 z@;YQOT*x=eXsV@K+wdC6t^gv9Rx+!8s&w;oqR-d1wy36J1h`(?DE1I4*hjv5UI^b? zK-3tCBwSt8-yNM=g(;DS7K%WIcO`)B^C#H<3VLgcEgvl7gcPNi5$;{p?eX*!){jTL zL+vXPKED^+KN?vHFeMA=#9pqEMgy%P9|zW^&%0G!q-2Ux?ILGa=_5P@<&}}u0?K9D zVA~zyn=^IRfa{!^6Cte9#a4B$ak!Ip2+z;(jrTg`neW9cl+I42t=4Aqp|jB*)U9`$ zvrbj6riykN6#1e)n~?{6^+xUT7y5f18~cuxeVxNiWYNuCH_18o=oeBnhdlBtmuL&h zp#`GXp0Vy;eV-vI%Av{e zjKb@BM0s_7)n33>f4(W2j+azPaozivL`YmMBrS!98;9c#u1?pln$;UA*KxA5@(aaN znn<*aDrI3w@z7Q(mI4e0%XPj$8IWRs)>H#mtDHqX+M`J z14B8mx)RP+E!3JE=>%}lgpgxY6EPWPNL;kBqd$(PQS?}%0uV}TQlW{V;g=uuPAIhh zpm)M}v(xMJ&dkd(pICrzw%oIWA)@(n}hX1{3`Oi3yeynTJC^ z?_K6q!92Xp^AIqH$w5l$nAp+xcgacB8SHdn6<%5tE*Y?$lxdR!BL7Md7|>@QdCHgZ z@mT=2Q%Aa6U9N3(@0nF~D|$XrH6FF9@Alqfd7N+P`c4!7?HaD~3KEF+Zr z48_bkOwbSZE#aPja?6jebW(5OMO`YmNlG<|?}~R+E?2$NWO4eduiRO)}fg{dcv&9)#$%H;0-WASnin*#d z5mP&E!ndlP+o1m04dCF0 z&+~q{)gNHqx^uU)f0ktito2UW>(2ov z9tV@*4U0ScGjC?PC3t;bxHFsRr6b#b@p5SVJ~}XZ5%1}x?laV7H*xUxc(~Tet&$c`qUJ^~zogzwROdWVL1iP!TPd=b z2jc~Dku7^-AF9hO=o%T7r#^&pov&EQTE=S3_ZRMu9VfPz50-*i*0(_3Aa=-vW~$ap zR0j&+{PZK29@lgu-_?BYikT%xv}xG56b$K5A56HaqU=VxHgV>+|H=YJyPq($8|{6$ zKkl~Rg|BamrEkAW&u`{*0r$xf;VT*%8gHTD_k!mSIF^S^?b-$Y%EU@Ek_jR}F53+l292w2{{)%mJ z#cFU>^{}ZSYC_(+{MLm+nQ)Qfn>AY7I&6(tu3pm7L*1GiRkEwm-llt}vCWby)syRE z^t}P^%x+#fe~C;nggx5pg`jPO6qU#>slft*BXX+-TtY&lcS zMYPXjM;g1Z7s^_FXr<|w893sBpHp7n^;T8^(Qn_FWgl|Zln?XuQb7@ZL}(*}pYcO@ zKA}Tk&MWg#EI)LwqMTz?HR;h9G<5MeK&F6Zp-8^aW)X(lG{Qt2RE>VV6~~kFTlbsB z^&sDUwV$8U9NhgeXd{%j*FUGYZ5zL;c@7w=B4Iu;Q*A?)BDBLYx9e7mx!q5kvOrzp z*uEf1&R)zAA1slhsMZezGM>+0NpTvEDH7;XKWthyJk6qR-FA;~FKq~K zw2BS9L#ig##m|~2#+EGc1I2OA9N!tETlF5=e$Dhae6$>MZD&w(6e3no-B_Nr&dPS{9=xG6Jiof5 znCuQMTds{#cZPfuD?KoHhukS#u~?+QGXBgolh$X#9xe09q?d70C&klpjA?TRqr?s zF3>zPJG)TiE2`mqm99%d4N!(|el~AuZPkMg>E{l`Z>Y;73(%To?jgt2fpYZbs^TLU z048To@&!3S;e3{S*r##WW#=SY5G&P?* z!zw=Zs0`x~&&FaekMOebCP`y%94QL8q4j8D>JRXxUilihu#B6IkuYoFU?m*fgC0m2 z$j-4bQl(iH@^tb`7IvLF+dM7W&8NGfP0B@;-yJU%7zuyD#@DzI2p z8-X3$r76NWqeWc-wOixDKCnL!F1|gg`d1Na2#6W{3MNuJfXfJRUDHk-I7{9UuiS4pPdQG@1DASv>C`PDl`$Ui3PbNt?U4m0 z*av(yQg{3a}NA%w*l_4O=#oA^%ev$F_@SPP@A2c^Fe0s|6H`)mmD z+Q~@nRnzJ7_h;&{?AmvE-U;U3Av220$6zQxa0B8`3jMb)N?~76XBs3~wyj>kGzr9`Qp?~K(SA=t9c0N@M zZK^V)_*GU38DLfB{}&J^3+`>%)nqAabm4Bf>(T9`p-+3CyqtzO`MPbDAEQy&I0@Y| z%P}jWJ2#5Ko+qI_NdPeWFkb-C{v{tq^0gjYs9nZ*__Cxg zt!d)*ddX*;2W+JV-s1_-+#RmR6C%O6FCR{k*!jYadZUoA1DmrlAEQBd`_OwA2M^C) zqnNps!@M_7-yW@^6m?BHgwuBzmS26GlawRJX4@`HS&0G!XjXYYAVAObgr%NKl&>3K zqNxu}!ec{qbj*8ctl6v_JG#LwDVzLBEI!wv)i+UQ+X#CFRk>U`-P22m+b*dLoI8#OS%Y~%ya<`*gh_ap6uq=U?TH#zH=L9TS@WB42IC3BqM^7xI&a;Y_ zkd6o9VMKPGbrk3sUpgt6%E4uGMTSUX1o86%{8qdhOqd;1=q3;bH;ByCx%;S9Y2DeZ zoNra17pcKOr0_yg$|bFEJxs&w!wVSR%q+BHJD+C=2P4cVOQ~C;3I?6d&ZR^XUojQQ z)jnVnhb(uBM1-k+=kA(bhiO;Hjccf^E@jU@(BX^P(o&!b3hW4V7~1GxpZhkh?JBFo z@dToz_V=!?iNTnfdxquJau2BSAbMNu<^t*0EGa?tt*Uq@u`=uB@{B8h+mcBpg19>&medJ#h4z*uz5t8OE7*&5riTw_#)1|Trp_Tp+ zbn>9HDs5(R$k(~%3fc&3*>$IFF}5e%Q#9HyH;m}2uJv8&8C`4Mh)Y5%wR3p7^viMg zJy;~gD#yoQ*_p9PtM@&|Fp&5dU4 z;S*O{HHyw(^UrD7a!`!||`n4)Tc|7FeZT#UVPB64^b31=J4@j8zUv=5#DP$as z?8$od>Q&kc3>$s8O$%DSco+7@nA-Z1N5DBz98yw7iY-NSAeYO(8C7z-+sI{P9?$2J zXtM|HNKXn^QeEnXp^;MaPYd_su;7^6h7v257mFn(`Jcnp*2^}njP4%p!npR_$KR2S zJQ!65jj1%3vAw>KR?bn(L71gM+J)k8-PJipgs$#!H?>zLXB}DJOU{p?Qi%7d;fUC^ zp~P3?)KC@w3nJxw?dwSZyza?gQJcw~1pM)~1Ez6byh2YG4k|X>X7XEct>nQ46pxe@ zz4y6v%%NL>X3ID2TdU?h4!l2rJT8E}YL0kSF6Hs#Z*oh3|8vm3J#?S{Y%oV#ivGo| z-d%tGK!cVYNji0z}PVMmC%>%J6NQvlR$&VtSU_XUH|P z=lGBbb9j1H3PB^N?V5l8pONaGqMEKNspdvdY3QkPD};TtY6M5elqz6Fiw-*O?$qlH zysaGE?pxWUYh}P*X}yGVt*xLg(Gufp%_mTm`cp&a{$fo7Lb@3J`h)z-iSJ!sgu!y# z;VLzKacqyl?Y^|*&yB;QxA58;{G_md+8Dyd!(5Jtcb9w)AiaZKm{NJub${9uK;-sv0u_TlDUvscj*2`XP`@mnJb-!g#>|FE2 zEFJ79)_=mRh2v&?<3TzRnnVj|8YPfccF0K4lEe4UZwC)TIJb1e$o`7*V&?BAzVw12 z$vFcP;+gr75&!tH@-=>P3D4ad^%8>xm={ky)Xd$#RxFhh>Lsr(C~))h^W#0PxF6=K zwK!r}EN&KQPtWr^t=+Npt8JC5V@skj_GlJ)CC!83Bo%xW>I3EH)d1d<*83;W+vkZp zU^ceOg5>Fx$~l!mgo`XyOGTBz2&wZ9DcfR%HTQk)ODyl-wJnTCf=YFCvP-?rH5{CE z*I=l#ulB5Yv3%Cv)j}Cyh3b2K09I(%a#~ip?S-aV4)yzbjOy4%7eoPRDOI@HwlSv2 zDJ;Ky|4_vwM{-4Ze|?pCMTu)(dDz_1k5eXz?L4Tgvgaj+Mk8^Z(n<-YtaV<(rgr#6 zG2_)Bf$UV@+V5@n8Y%;o=Yu?xLqp(K(w$i~AjwfFsq#GXLn6a6o#FPEUv5`< z%)k;vmcd+kjmi#j_4)D-W%HCsTFYJKc&wP_V#j{23F4QvbDs6q1LX~v`ON#B4|FVXCo$&sjZUe)Qj(5nBXq4bDtd0T zD(gEY8}oeE49z!hbpNc;yFStmKyqrVO!pKD71)!XoVPY&F$%~|HMO@R4%(SSs!=g= z8)Av)8l766b=mcZqzQhg=##(fhGF{R2saiR`o zljpBh&A_llBUS$HFA{Lb7}cl<_1gG90dmm8UpP^h!H_kaDD)J^hGwn*V9&gvhhmnJ za_Am&6_XNRrT%FEn~&?v0_-)KIO}FMkZia1kdN`lnKx)g*utdUZ@+1xU?0gR=dqoS ze(^@mUqp@jHQ5xNvGGXbB1GR{f<1Vm5;|C^eCU+0zXa+M(wGZ)%Dd}5A=j8ey2kQ# zv-jqe7>37zQ%Nf)zOM*hVhL&Xc3@jVnWt3DeXOCO@_>jgEdsh9&X*o6Cp5FTeT}vs zvWPomShnQQ&c-8hBcnHmP0SP3d$iOE&t{$h4T7mXl%;sv!z{vD=-7$2mlj;A*NRAI z?{vHO^+Ai+|Jm`l@2+`75`S-8rBm31vxAs#v#}MFq3_g6o%({-so+PKO!qvKHG1F+ z6_bRwX8c5?79IIDk4VY(L?=@3!NAZDhSn_c0d9m@_TKCTi8kBQeflnj>{)KLs82H$ z!uQ7m?=p9%UaZu8?0QHRy42)yrByB4aiZ<*fI5gq`-6R5YGk!1(X`wLn``CGEa!7A zg-tV${bZp-#WDC{c=8_6?CkVhs~yWh)snKd=%t>a!u!ZcM;+Ebe34!}ZE3`wB$R(0o@ds`lq+7~j_Sgn#-TGw`h?-3pf#`88#Xiqov zLr&*V5WQsXlPmZ6d%AqnH#}bsy9s?l zJQ;^SRpNVd-;JBfK%Y7au-YE4&_{>X@OQw2pM<+U_~Wk2I~BEYz5=02#Mdj9eP5HE z&eTj-#5@x;EK{&0S**VCNZ?W^*Y;{fm(U*3)Wv6za->W2R_S`w>AR!dyIlqLD%j`L zA~4Z>qVt7@)mFAWHYPjv&WWJE>#Qn$`x;-2n=H)lN(rDmk#iVzvmalEn zKnRQq2y>8=#deW>$5G|3*_U*SveWS{B`}*qjwa_duGZsH=sF|>^|Z^BT&VO|&iH74 zSGcjziEUBTr8MYkZo9FV;ngGCso*l;O2A%}nuD@}etbnhNbOFrNQqpM`1bDprlobK6qK@_NiD%`;_6}cJ7n+IXPX4dxzUV?!@?&VX_B1#OJeE8}>M36G9u zsnMxVg7J4qZ-=~7E2azwp$#ZBmZ40(tA0sb;n`K*6Poie{@+rPu(+eCa`-Q;69>5c zQLK2BeZGfLUIA8X-a#(h3$-g8P3keA)yA>&mcCnLuZi`NnL|BI{}%;zmapglzv%Pm z{K1X8e-J4-z91DzKZIdtjQ~b%iK0V6vD>gwN#JLu!TAw*Ml6%K=Y^y1S;(^cREAE+lo9r}K0JUDOM6H>)DhL}fc zp$Cg#@Q+?CCf4ZoG|Omv8McWk zLYD;yh4Mfs^jX6^&scGX4!CX05}q>Bt}a6k<#fkfCT}0onex%oS|$0*C6rZegf40u zKV&07*w9gdTUmMO2%~pyDMI<-qS3w95gC=}W2`Gwf%w|J3O>E;rAm&tRnay%+>YL>4oQn7rbZz_?V*qc8J4PBf9*0G2!e3UnvVEjNn0q+#yGRXOd z2t#JAzgsuQRXEx=?Kp5bW%E?J$e(vgH`Tfc<7ZHx1}jDjt}_jcF2~-8dwfwSeq2~3 z{vx9}e=yt5*ruu6I%FgMP51|R?7v8(%9KA5%{rJx*4lVN)SN1?hf3@&MdG$3dM^fI@IwuOS}m`|73_kjA5IDYQOK3m%EOyYcHWRvkxKMg(G<9|1VXeDd7r}M2Y>CO|jiy7v*9%YLo`-PU% z!m>^kl{->yTbGGFL|e=h$2Cqx(-RtOy{w{R=lxkebE`&&H;6A5fql}f9vZvrL!v_YaEvmSWDq|jk|Fw@pAs4_By(!uEPo+VNbhjz7sKb?*o9tDZU*+=uYp&m zn5)>g3h{}mTis?T3HT`|r|K>7nzH!8Frk>qT*;Igf|PT-{HB+Uf&SdlJCKPm0qt|p zx@QWN2B_mN)F_Y+L@A_lFXCut5f)IRKwx(w80DDW0n})E`ltVm8pU9O|No#yL5W+a z++X8BGiJ0vR~4tFeRMIZ^vf*+Kn30fnRHLVlose&fz2v`D6<6_B&bSRLahn}MvK-M z^M9z9LW{>Hc-NlBiHB08X(XLR#uw{gy%D}NSvMdGOL^O)iXk*g=7l`|9-Oi!|LLEwLKdT z2HN3;T>T>Do;BzaXbZ;qS=udJ*=H=Y;4Y#oLsOp5b|&aSbH65BL<7d4Q?y=4d~`43 zvzI-kaaYPgxj4RMWwLx4lA0&hR!Fpe^uZG{koL&?rHbL}C3P0wKFzLNQF{(VSo4z7gRIGZuk|L# z;mU6RgER`ZRoRAcetE)wlSbjh2A6dTLK=m#59*(!QK-cHB8|e}1u{Y!1!G}oN4Qa` zTl-7ic;@)vHu8NA-c+xZB8MKT0@l0LiLzJYJB+=XCV=cU-n$ga?k%{O$S*kd`Y4xS zV^J9J(QtT!MM4iyXk4%erv+;5ZVAoa{pe5^MQAJ4?@2w~O7*(bfWTJutU(lORCDd4 zO2bHjsoXhWQXXu&ZB5V-G;q295}FFVYH&Ct7Mmo=DY2v%gfUIP2$E!%F+@sBKm=>Q zNuzM!wEdGbO8i9{y}U*mMb45n(&(z@d!KlOG&*AyFD5rG7&F?}9HhqqEKs&xSQ_oK z{brt6(lY=Lw=bRPa~<-yD@Kl&9uLsbg*gk8aJ*TvYR|_lOQbtt ziAJazZ`<|>=By-dfrV1vH^fDY+S&yEyQ>4^I&n@AL|mYZ6ma~;w6=}OUsq1QMbv~`tk0eM);3;)#vhQ#Sk7e_a* zPxgb2&ScrLh+jfG3OS+(OQ8mtP$w#Q_%OU(nNJN3+uwe$n0SXjLpH&+dMV;r;AfKB zM^2%U5&>;z@-&$Y^A@Q5h~wG>Ep=f+0ZX8<>L<^A)p4U<-lON1gf(SdmvtXoZj{$rAMJT=>dOyZ#=G6+q=W)URQ`?t-L%l}->$>H( zpxsWpQlZ7Z)zzkMv{(zn6$)XJeHkjbWo@IfRg&x^`!Y&Q*~>C^nTe^yG{g*s`JZy3T%!0K zLs$FWthBE4tbWc)?>(bvvTf9N;fhN^biu|<`#OD^ad?lhW_L{gJdSp$@Ofm=qg;!$ zK3b>!Q;>b}V6nUql^E?YaBVP0_2C8q0M=XYsBF$GL5{*_qWwB|n?xjy-EDNTulgSa zocog3rb^2{t|F>Y;Q;Q)`;-aY3F023bM55$@h)pip}HuG_O@4(W7li_=v>8@3${BZ z4+$pP(+95fCgf)jWez)uJ@Hgjhykpr)VY?*+7ge=6tgh&4ZNH*NcS&Yn2J-kzAS_7 zV&qWv&{N9}vnfWkz9br3rl(dkjgE`kZ4i;Bg1^P<#@>17@RVK4q#Kn}KqXOxN~JgY zIHZBu&jTgX)7P`JxR8cP`Q*piv?Suwz@m*G1m~;Vf=Xwv!j|B@X(4OXBi_g7jchVQ zR6`TDZ{LPMft4rp_4!wQtnD0HR=Y?q!66<~tW!^O?uHV!^A;zknjPcogkT4#HPd+4 zt#9*{-VU|-q5wLGHjGpQ%J|nndfh2i+1>vtQWIjV*L_w_T9f83)?jKk!5ne&?ofW> zeKhG}4Sustza!>zx{CHSqsP)u6O>fU9$a>I> zJ8zWukI1d?MySfxZ()=2Fi-Qdp!-{E2hyu+Mk$5W*Df{0U$o=m__kzM7{Tl2p(h>I zsA6EZr{r*N8(1WlJdWPD27Z@uFVC)*^MUjtVgF7*BPk0%1}2=wvv!0u9&6d&)gcml zIypV@U<+<|UrtkdtX{j`Q8{wc`2}kT9ML>@x@*aa?KsR zxvQsbDC3XRxRk6XiK&W92>H>C9y(|JO4|u3j-7^z%?SnL=ii@ya>2;W3M1u(d&^@> zC^D8A1_+z8aCKpMK~x=}(RGdqc;WXA$qEfSreo9~t#0X7kO|`vH>YHR!{xjsTfLSYLkGUwNz+T_dAN2z9i;X=m%jksnxDTPMSXGyK^kzFN=G zG1D{pPi__ezgrhA-*S=47eE}U8;|KVQC(e>|4HQtA@qw3*h92jwVk3I9CD5oweAtB z^Y&uue1{4*-l7uS@C{P8=l$2%(QL}~PMiBY-F^4B)?21zh)YX8c}G0CmDhI6nX3?2 zw~(V>K5zRl|~1(GV6sR`DZdVTgT5+eTY4(BFh9dak@M9XqS^iA?@>aJKj<>XxO za(}zu3di?>tG>mgAnG)Z!kSn=zP@8Eu}>CVa>H8DhJ7`|h|*VtdhdUZ2uaE-xWIjx zcwH(?LF9shm^T06!EBXamNYv=d45LE#nU-#Qcq+>vhyd`WIr|QgQzr>=#%0`gKujV zuio~T@+JfZfOy9Qw}eMjhd~0_(#FA0#R(?qf5#n}DA>Gmte_|HZ}Fwcl2wL;_c9jM z_!f%o;6v^RUJ1&P>5ypm;eKis5aa@7=a2O3J^c`Bcva+2uTQaINg#&xf$b?B0=JU^ zRW<;7^SPMZJaV|4-2%}cJf4uMrxY>VSF#wt||Avl{@=_7fviw#sGzHei@I< z#_|xQ@1^yS7f?h4ktyvKALE0M_kRhrOoC_r&5`k_7X$SC0Rv8Lr3o}+zWs|e_0(Wy&v|&_K{gb=V8=Ml%6}dxi5cFclxCs$?{X4KIVs#JLeaUO4I9$C1K1wn z!5^8*YjE|dDNdKH;U4_!C-zXeg`QmGwD~rZ>E0){vu!DO8c0K%FGS8J4J|whoo8oa zql($b|NOx?_{|GtAMJ(gBX+{iboLPnWC2mHUW9-|>4 z=*i`=t|tfMdXCcz5?pl$x5Jl1w0^+5Z1KUdwD-9CEyqt?rBC-nBtQyme{pxn`0FTx3sP`MSg7W_kUpq_AWFwRlGq`}3O zT`qdtX<<29sB1@1531teuX|Jxe{O87FMIo|O{MZK-AD1)Oa!Yi4?uzh2(Nt!wDq3N$tfel79}HosKx2e|CUB#ZgzU@ zX*lx55}P-tsj`?3nhPeI3Q-3YXf{#B8BNH?O%5}5+Y%3Ht?R@k)q&CP3}kexWvDX0 zmOLkX22B()?vj8ms)cwCG}Q=`$;Q^~p9-vk)~7mrrn*83Z^LDHD;|#inTulR8q3Pc zDo|#j8=Lb2-fR3(3QEt&fjSE4;-#z?s})^Ef2eW`_BY;Yk*CDUS3P{ z1VFO`158VZas+R`xOP%?>C{|%fBOY#2XOd#K+17vUu%)uP{N9<8%-kIigPkD>QMeu zCZv;&adAPU3mcO{op_8$A^`Pg-%6}0QXwchm;ux|LHm)li#~^tFM6)HxwoRs8*6Qy zSlAEbSSKfN-6&Oqm0B7@%M|h4r7F;ZhipoSp=y7osHjMi?B$cz)%*8+eqo`?C-V9! zB8SH)!Rtp3zjr105IsP36JMhYaRQyJl6%G0uuOfmDF))kkfOgYa1iDp5psfHKzr&h zAY25}4$1k!;Kz6#b{fzYktPucV9V$SDg4D8xGhP_x`u`}k&2Gxf~Zcj69gMria_x? z2O%lr0+frJ1krC4k34I}*Dhr8Q1Sq?hSG&ftqtkoQ(}yR%>W3=;%pt7`JLfor+7P0 z8QYU4FV_f}jsQKug$ID_MiJ>EXKIuTlv&NG(27)S$Y@Pn__aDprIklMyc^^8X(Irw zwxT^W=T1*Kt9wm-P!}YlLY4<8v&?gWw&|kl7ig|%4EVl!<=Y^f=E6?)@kDEZSnuSQ zgO_{e<_lWL53HMSz$_a;T&6WcLxEN+&g!h8qj)I?#1QuPv(s5NSW&&#`mx37t`ktK zsG2O1jc|vG?FP?YSy@><6HASczqUwT$|&!7#l$_1)OcY1K82EQ@_7>d{c@m&0iq6o zM7fNxDC`^o42uUH1!P|s_!b3hVR9N z#+g<+^$r$lWkDjn`S9W|&Jl}_hMTXJG`w4{0P&^HjX+TJlrrHuKj7r-Gc@{5_J;xp zv*BF{{9W`;Tqj72!Q?gd@$#~F4UZr1%J%@;%!NESz~>sFKb}V-Z)LW@hJMt@yZk*A z-E#_-ap?J{hO+AK6krAe?yzLwuF?m9Cku|+7Yb8x?^Gf*3hjj{{y_wUsOKQtNXvbj zXI;w=!Z5%Mg`Va=%ZE}_{4xi?vGyeVnO?CA&?Rc75sehZAO`A($e1MOm~IdV!mtJg z2HH7JD2JX4BLyU3;Nvk{wQ}W#B%oZ{ANW>e9vNjykVSzZwSC#C_S--;#Yfw=-g7Dz zVCXxU7W^zcNx1=Lw+iGpS~S$x+e65J!gmt#Gnx?T1@0zYz-A*-3O5}CMp@-fN8mgw z4afxg#@oYNTLEdvTOqFboYglBdCrNzLo;=yEZvDxu>KZeS7OSSe|!p#YIlF%rbVm6 z#ddxa`T$D6?(Zt10+20k-KPYV*TnZhIgF#$5L8%=XP0;~4)LY|yJ&>%YpW|ENx+^3 zgus1Cr}gwG`I3|RH4MX$ZE`EC3rSD(gxft*T`k!RdHvGPc5(*k|L(8PO-)YjehlgJ zE5B>xKUl7 zz~EC-BANCM$VX2U>l-~hIh*|tDAEd{prxHt!s7iq9U&busjn4eLNW**BFb8I@nyaT zWwbi;9k0-dPs{({cpWI^R)1V#)hVg4OX-t$%^HV)id`W6&q-hQP;Ndqs<1IK(e+s4 z)}t~fuKx-Zm-ey__qaOlDZ;Ue#u-pAC?>Q{Jn>%l^XShZZOzT+xSSEANB-grFx0x1c(<*@}K5BroP)xeFw1 zp^&=oq@ZSX+q61)OqdIz8HQCX;;Ydj(IbuF5w*F~eFZoPW=QJs3;jkt-y zXf7TBYlZDpV+{FRTNKd#p|9@*U_@1eD`1t$s`=-u%z$F0sP!1pG$TTBG%vmakxb;< z#H6RESI7fV#8*Sz_8a4uUTiAPKl^rF=ePqz$zHRC@^fV;w6#|@#OudWWzglqb10k; zB&s5KmQ|@xN82=ZZQmx70wCtJwMVanJ|cYud4kE?P$o*<9o-v8`EVSgn(H8Q@%k8dTXgc@_}z zz~mc(3)yz*rT>lPgOH1P{;^x?(JIYOdx9Vnwt;n(?g2Ju0; zqaSlQ`AQBBM4be77>ySadp`%rxDK4j-}(wVnf&51*FoQh#!&Iv8sID^xg~P*9WHx) zi&oTn_0C05PppJ5zYt<@o5g4p3S76<15i>i8|iHjBqLIV!O!E_{mhr!Vaai}|Q-Wf05Nw*Ba>wP;S&ul=knHMkr9|ee?E*FApd<0< zCKC@(a-N>wY7$FZo}3L#88x12Ud)_~N=Wd}zv4T7sR)R-GYOmT2oUx zIjLAS>l>EKqm!RL#ZdH1W}L6x-hbR=$sN){vs6BO_A9J(d7e^^>W{+(JFd__J>xNscWO>TetX_L3~kXw~z5 z%^3ti$U3ec1jn^WBUDQGbD;p##@@N|2YK)JfqC0Jx{T$;!uh)?0?J^UqSKeVRQ>c9 ztpd9&^g$i`_zbvhdLLcN21k#+ktcb}wrv;7+#$QNZ}IX9kq-?y{oWV83|a`MdeRlE z7p~YOzxI7o_^EdPcFOt=uZZ6Y!kfA(wntWrjlY3+#0}W|gdk?qUkLPfvefAa-Iw6Cg4sH-s2D*G5 zM}SVl)6-L%@~_cS6btMa3Kb2#>K)P}uN3BSyNkpDB0vAqez^<F?b& z$lwz52>GUBk7y6Q9h4VIhnoY}^4(mJ5b;+69JU*7n=&pYyApB~!ln;pDe~uYrWtnt zt&wFj_?lfMS8OoxfMv9dfFR~q?N2UMSyY12vk&NLM^i9()qeRm!f~k5oq-pC!~&fu zK@}n=G-W+xk+*al`dex=4CfOn3gVbMcJXmMUVASDD|ywQZA?yYLAL1!lu8}Tq>YO_ zTu+&8Tv5aLi zeDV))<)3VYgpiC#($w1e>Ey)?~lpIQpC;n+TFioiJ{ktr82KmKg zZ>Cwpj_iEV3P%BwFqN^SSC3VVJB;AAsg`eE!tbxR*m?w|fT~2r_kG?Zj3}Gat;PV# z%mU@wqsHM`Y!H#d`&;Q^0m=nL#PD4oX1`*ZcQ7`Nv+Of?r>s-wOC-lN)*XP5V@Qm8 zV^yqQ9}A>MT*Uk(myU9(;_K?kn(kHe^zixp9V;SHmw>0vNR8mrk?EZ&h7HQ{udme|1x+w`r z-dh}=O;is3ykQaj@;Vcnp?}z(X#q=cjc%d3%U&)50pl1dwQbv%tiHT0^2%px*I152 zjyfe5OhqNc3%yHd-X0#0<11Is-FQrQG2x}#;ttDfyKPnL3@kv{u)uxm z8o}WHvJD4uF99}kke0Q%&8AUm>(;?GKUjsP$Y97^zci)!O|B#2-c#8C;SXQ}JBFUK zvKkPv20!HSdCdS&x=8977@Ru_!4P@CZ4*X0!9AMrL^JZUKzYN#)?oe}FAe%3`=Y$b z$*jh1?_M7nENNe2R#u~fQD3y;-teKJbq?Xurk4iW7&NkH4IS&i983#qYN8?)ohOMkt#B`ML%nv1 zZ)0x{iW#5`{&FZB4nAH3u)Tv9tp(bkgXgzGc$|R4+eiCRt**lMjYmTFIqEicLOMZy zz#VXC5-~WDOep|@(-1XjA6jx?s?BVl-y-r~P;70cJFdae6$p|Wf!HPq_HE1Be!xBy zYqmZG28v%@SP8?BfhiH2mU;ua4fnQZHWW<}%uJHJ^mpps;gLw^4pedEQKOd3$5v2$ zo@!PY$J(c2{@VgJiKCF$SYI}$NdBcJ&@*Vln8@h%y=U+zmKr=XM_i9Toeo`HndcA- zNg@Tz4^UE6j35B(d2&uG1YBg>={LF1NWSf>nym8y{h%8jZ1?bk%L2gMzD!~gkSDmL z#7P!f7&s~iiOYUWw0GFMcW>B(^p|-6PG{EmN1w?G|HzC23sw-Uymn9dVa8AsBpD@v zeNftdH3|dtaP3u!PD^~_EuoZQ^EJ3Uqvv+0*u0vZX+0`-88U{Y7sZ_Rqg#JDmwa zO*PE!I0zRML#5foSq3x9W;;cAu|$;a575&Z6XC4c zQsRQp|0{9lFG*2>a0SivbiuC4p|RN^_1WkEiYJ*GFZwV0x>9t1A8+an)jst$E%9{b6N98gT_Lqz%WGneH=L5oHfPzMwr<$(e`5Q7gUnOd+SRcn zIm4pAUdzo}^&wp3z?FHXZq>Q#x+@CQqUkT(BbAnvRN7N3RUE`>J}moGSxAX+53zdb zAG1N@<_3)uDq9DNbAU3gSpVh*8O(w*_}!0x36}ds`7I4BOtxveTd0tqg8(m7TjU z2*Phc*_;uYFDSbl;j@FoWOi!@QeJbCH)t$@9mZ)kXW-9Z;2GO?!Es*_z&(516)p-w+=vz|VVOvb~u@5>((M@2!T7COvx!*XzObhQgqJ zGYdD^L$#SbSiz|^`OQNbH~D`#bx|hDuLanDnbBhns}IUATtX(NXXd7;f4$1pB*OgO zuX=C_^&nn*=kMke_R=pFBJF=(2+fdy2LX{`u>vqb&UOR;Vui{cxVd|8_V) z%;$r>alR>S?Y7fdm9Vz6&q)2A@6$m$CZOi!AwTlrRtaFMst@Q=kg^qF|8ik2ief$c z({pR!IYWs%O9K4Lb@Ytx1YfRE9s4q`P%Y?s1t-}j==Qwg;wE&Mrw>48Ds1N0#W@c+ z$pAfHb*NF13lLV=iKt2sn9be!3*zC+yN_}Q_$#tkW7ZPhb-hGeW69p9vv%nX5F+vw zJ2}Y~0{nJR?PVJj$7NY#I_uuPT?R!jS9EyN+vi1RXJ*Q5!xSk)0%(j@YA`-TH`Q3A z!(*_DNf=ik?n#yFxaATEcFgt<(aSlCXOAIJ2hK3sh}d z{B7{aKf!1SS51T#7kRi>s@7>($aI}0)A=_cgaczm9!2J(WM{ymL_dOpURE6${^1DFBY?g)kapRR-i;MGu!>}1h+!0hv(?0I65Pb@qq#+ zvjAz{oLej?7j{BzW8-STrsY2n-?g*|R;#g?_H9^#j-gYtIj5p-sJSVWzv$A!jn<_x z6i($kou61*Rb8!#t8>~4Qo)X-a-DwIGx7VS>^E4}4MU-+mf&UR!mx%g?!rQZRDj9(Kg{XliOYP1d^~HM zTB0^VR=Wz}#Hy^+r@T7YfDz!?ym~}3cSFR*cN#io9a6ZF3R8d$)h`$Urn(q6mW?~@ zsB*lZx@fgnn>@J6?BQ(dijZ%g)LaO`?2;dv= z``&;7HPD;){?cMMkIy^iC^Yph<3LDR&Xr=sm8!-Xsqy=8iln|0+(r&f|7GXt6?SaL; zw@8H_KZyzmh^er(jvTrVmbi=xTdkQwM$&_@J0W?fI42PjV0)<7N;*#&QQuxIgUxio z>x&qRL0I5Ax1SGybMnDX+dwTz(Q+Re$OLVftia1{jLe+y>zwTjjEP!rQien)9w<(@ zhDN!Nk5MF^KYLF?b{(eDtQ2q~%5#5h03 zVxL>qh~jfpw{-ZgZx>%r?wEPJH)%%b1FM9V@>}v4Na5RR^K+QrIvKp_4BVIQxIgTg z(jF4%rMS&DZ8_;rILTmh`avRxFfAiA`d<$?*196S`YCb~mJ3Mqpxq?JzUOrVW(3?* z!JoF3+3M&&JYYjyg}Yqs@wrn1FL_FfUBHYpef8h6uE)1D7r{-`OOwI62yx|g@8~z- z!P@0?U1dh#=*~D|D!p_Wb|k(M>(JQT+)VE6&mjkuQ?9$G9Z1Q>VsAthE9;-{ENXx4 z!T~ygFldUjV)-C56sRDM{jW952kY^No$DGQPu5sx4U1PP=t3t*j;~E-!QGU=&U_Fw zTdAj?ozdu4p)D*5R-15{;4Nen%D<14J%4Iq$mL7_VSLNHWk_nZ64VBXZ0>&_K z`_p)B_|Xt^)JVs&q&Uf&dCUQGZ0@BM!To&|V#0Didtw*F%Ugc*K%Adf%mJpfVw7jYuN`;7|k_ajUn`+Y%DEEM2Y!_;^6~j<3D88 zVPf2eVIAQm^xe`?yDT+>DgWW`+U0hKCd3JZ`IXbeRs*N8N)Z*V7H%k0&}~}ME?-{Vr{_Z^~a;ljO=ob}x zMa8QA=~qyHs+Z2aVHfExTTm9PI(pXJM408@H@>Cf+1GZeSN4EH1!>b4A1=|q07%yX z3fs}%L}TJD5O|L_MI#jNj#-(fevG-HVK^*9lsH%;CFUl|O{CXOa3!h)op;Xw1t`tr z#icZ;Z@O3LSgD%Mid08%42^rSpld;4z$q2QI`=@nZJ54zj%l_k;M}v-D!-ov0^N@a_G6jFI^RFRU$$mF{eKzzc z6nZqwdNFC+O)I^RMXf;lF>-F#5$KXU_55iK)!z&c{wM7Y_fAiGx0aeJ0EAF6$Vhd$ zB#sJf>8S-$Joh2@E81U6HK>yX#U~6$PSuac6FAQS5_)G4og8k*8nw}n>&Ya=`qtO- z9S*D9O@yOEZGSS`-laW-?Fz&>2?6$KrM(KB*|%xg4m&Lr2$fjyBsR7?joN8n!p-S+ zVc=~G+{W@i;6G>s18VAlxH=}_`wGS(MKs#Y&eIJqUr0~Yg|$tpMqYnp3@8z@mc1?)&1il{Hdoh6Lxm=RYB~; z0*|BEiw0gVso=XG9luD-?)1vPAVMP)4kcp7C2&T{7)wjb2D+7swC2snJI{)Oe+Y^u zn5nZ0P0zrd@*gvXxiSDVcdl{1Tlq7!m;u;uLT|DBgs7cxXPH@q+voU)F)=ZngtI`^ zYDfTjU3bs(MDdMwNau9V6z0bPwRBffMs-5KJ@T>qzu?X~4W%XF>aX{~GCBYJ*)Znz zA61f0vFz*XyVH9OC-TwT5!|?U-hKs^aW~ICNXe8)g#(&AYMi{F4ES?-!6TR)As%$! z|Mm@9@lMHp+^?+Q$5B?dLHdqTK=%&C9PzkB1CJt?N0M`gYuwHrBiMJTsYs9CsB z%a^24f+aJP(>%22&&r&^;A z4NN>eg$W3H@GI?ID;sWe|X>u6i;9+gU|+ z2M->caL1cNY*jfTe%?d42Ij>^L)`e#9V!wODxzdKB(!s- z-DHe&yJMkO%I1n^FPSQJo@a!qaS8tPS2;N>bUWhC3;n#swh5NQGM&P@UTM|SGsNzX z4rampUAd*H7*8Yz3d%^>wC80K=)4zAJb*{k3zs5)Rq_OE71O?!%#lKWb*v5_Rii+T zCR*wqTZ9J5RR7~wTMTYE@DbYA)`qB)|;+C5Tc2 zHiu?i{m%_(ocJvs^1p$SeuoMHmKAr->L+mpc;D}^tXz;Zw>Iqf9r#oItn!!rM!==E z#Lt3bgGPe+|Ii5pyKK1jOW4NZH-Hu!xmgrC8&&*_P(>uTj@*3QQ!yK@7)oLzE(lUJ zngci@NEOY`?;uq)5rB$Th0S@}J#ln4S8baEM()x=-O@9!{bWYYb19kx}V)*vi< zHtNYnq7ml!tJy|tdxH&a=l$PwB?`Ubm%T@u_;2XmY`;(w2ged^g*kf}c@+K!U_B^k@Z@H2 zL~Q@XW51gww2nwn{pyTXu0Y`ZPsjQ<2W_fzzgi6R79^h83k>I*)y0eZx&r$8;~dn# zFAY3+{KuZUt|;9BX~46N_=$Pfg@SX2Hj~&$D*Gs{I&aeU_U#Q;MGxS3U=Jil@0ro& z;{{T-%B05iwyLDzm_w)UAa@1Y=ja}S=(3-`3vV4p9+vvstFR^o0JNroGLr_?Vwh?V z(}7be4K(?$)k@SWKuWRryEn^w?MgXeY{fD;5p3%+IZd_nJzi5}Fq(4zO)o9kL z2qJeeZ?;#)`!`>;)D*Mr$)sm4eY9PNW;S(Miruw(vq90tF`J@}H$k_UOK2IhzORc`VzgxOLpdFH?c?C%kbN3eEw!b z#ZM$tIrOFNUI%7>2|Qyt+m%k2FwU`5Z3w02v|VL25;Lc|UXSgK>Mx>*bC02(Bq7;2 zB~JEuZUnJpSl?4H@;AQ>E#Qd&KcPlYEo0`w9#e}lF|5t%?+{FhbaSi=@UI|Q21U=B zxTm~Y(voNED5`B2Va6EEv({&nz2(lHZ^_zW=tPY@sw5p0tQXvNk! zl4Iof`Ectx7SDQjmhy|7J%#PVPK=ghO!COFZ1cBu4VM#xZ(dclaHbi*a$gspQwYu` zQwZ8Og<#LFUC|@|$ah^?kr3fRy7n+OmJ)Xd$_lE0`)m{VZmi@^P9KV6>tXI5MBQb% z7)AXV(XYX)M9kr0X_bg%h|{7DNmzihix<^B{ZChDREuY@eEmY7~gyyiSAw^_TxGTOXt-*$)sBzGKMo zK-siZ^lmu>*Fnx-o_G6~@U>yRs<`qhWViRyJjQsxSWmV=>o_E#2?2)On9+A(qq`+l zX|GnOL)EkB1!c2a`uOpqw6x^k6|&osN93J9Y+qmEbD2wm!l;{2(}^4$j3D{UDC7>gk9y9dFTY zvdEijP8V1QRQ9(dOkKxamX?hfD>7*?F! z)RKSLhwfwfo6h)8o9WGRQSpisL>yCVgh*h1{o>K4XX{SLTB~A#dF8(T90RQV9LCv_ zt_cQ{q9%rFRh7+{q0tw`IUJsY)r+ka%eVJ!*9mGLHa*=y&-!AMtVoyha(fXX@}pbr zc+6suG}G7U$9!Z5`PY7IJwUVxaqp|QP6!$wq)?MbCvJCYrHoG4b-Fkm3ToDaN!~eo z5cLO8Tuq=c0D1D{#?*S7koEI1e4zRnp1ISn&VdY~A!}l8-RElitvI2F8_6@gLDo+W!r9%<=Za%GDEhzgO`!+i; zRx5|nC=m&24(B4K|DBof_^toZqd%@7h zE*tHMRpXz6&LMQv4E<)>)#YN<;*x)$ApmX!S`^hIF54HFQ=37X+Gg1 zw;H1=`SOLziR<(O@4gD~<6*63MEFo53NN^(FOX;S*i#$njQ+KO!5#LM>TL!UUV4s| zTO36H%C2F&SavjOd@zBCADhVAt6+gEom_5+2OhkEWxClF(E{!G`DQHk=QUt+k=N}$ z*Qi2Je$}2qk140UQ#lviamzD8Cvc+3saLPp>qobEzsa{pexCx{oM}zzLG(?)6D0rE zlDd!mXMG#3E+tX1!{G>y7)P&i9rR70tH@J)@u@!V?r{F}_((!Wwj;gqM;oD17-N|Q2zYxbPrEn>q$7>{ApGdNsrSCgIyDw*FJn?~46c9iT$${85^1m}K!#=o8AB*>> zsXkcN|Kz;TR>H?GUzS*Q%I0CHtVR_+9V0^ZnS(|_3L!PCsn;I=D+`h2U%?6FR17$u zs7vvzUB!h|3BFhe2j{`$4<&L6l6VgO<}#@?C6mA@x#Ris=ie9|kn!aQ1>rsf%p7Ls zEwrU?djcpnv?czhPpM6!VJUBJ>!PhGp_JC5lB++nL+XTL7ye=9 zGlQpL^&|0+abEGVn0UAz@1h7`OK7`;rX^{tuT5mZN4LDh*dv24Fj z4q`lfEMoRm4}Ia(wZ=yZHqFweu#W-dY_mby-al}0GKM|FxJT3Ef3_E3Sr%BqEhr5- zTTT}q&&QT+vJydrAj*G~>y+EGI-rL-u;?c{$4qn;!R(b;sacuXEOoy$1X+d&y_+4c zm{-DRSht%S{DC8N{(MjXLN`f&S&;vFA*~%K7=a<;uIW3B4~@nj|UWvqF)16U-fiFN-( zDL21HQNB}1koP8j>9}+EgZ+U)UeKaC;$E;n5P03-4M1rd_HEIuk!Zgan(}MgAYZZz z@?Ni^NZ=n3){?=s7lipxf$sT>SAS3o(vl1!y_Uya!U_u4^!4{#7> zH}mh|n;XPdTNzCj;dw*`$FjoFEa;}s{z^-7T^@1eBD`?FiN{2!wK{2Lo5`;?-JxrK#xIwut zhv+fGQWX5<2ho}e%m&Q3&IBIC_94ElG~i+I2yp?+oZr8FD?7caq*pU7lN8Fq^ihy>O@`-oy; zox~x`I}$NpG=mwHGV@_}D~_A6ZZIxajeUEyr`!GUf;s;a+|7K;)vEf}=?=Ta;T^5Q z9R_&GZ3el!D?P_EzqW>1_-?^RtnSaTK2b#X1hWU7^OBdoi%Wq2!U3%&;T4uk7(#YZ hkAv?UN{5%QI5Fqmtoc?HUWq1GW54FUl)p_b{V$Mii$4GW literal 0 HcmV?d00001 diff --git a/website/docs/enterprise/manage-enterprise.md b/website/docs/enterprise/manage-enterprise.md new file mode 100644 index 000000000..f3ac3c015 --- /dev/null +++ b/website/docs/enterprise/manage-enterprise.md @@ -0,0 +1,132 @@ +--- +title: Manage your Enterprise account +--- + +## Organization management + +Your organization defines the members, their roles, the license associated with the organization, and account management for billing, payment methods, and invoice history. + +### Create an Organization + +1. To create a new organization, log in to the [Customer portal](./get-started#access-enterprise). + +2. On the **My organizations** page, click **Create an organization**. + +3. Specify the organization's name and notification email address, and then click **Create**. + + Your new organization page displays. + +:::info +If you need to delete an organization open a ticket in the Support center. +::: + +### Add/remove members of an organization + +In the Customer portal you can remove members and invite new members to the organization. When you invite new members, you can specify the role for the new member. + +- **Member**: can view licenses, including the license key. +- **Owner**: can do everything the Member role can do, plus: add and remove members, order and renew licenses, and edit the organization. + +1. To manage membership in an organization, log in to the [Customer portal](./get-started#access-enterprise). + +2. On the **My organizations** page, click the name of the organization you want to edit membership in. + + Your organization page displays. + + - To remove a member, scroll down to the **Membership** area and then click **Remove** beside the name of the member. + + - To invite a new member, scroll down to the **Pending invitations** area, and enter the email address for the person, select the role, and then click **Invite**. + + A message appears that the invitation has been sent. When the recipient accepts the invitation by clicking a link in the email, they will be added to the organization. + +## License management + +### Buy a license + +:::info +[Learn more](#about-users) about **internal** and **external** users, and how we forecast the number of users. +::: + +1. To get a license key, log in to your authentik account with your admin credentials, and then click **Admin interface** in the upper right. + +!["Admin interface licenses page"](./licenses-page-admin.png) + +2. On the **Admin interface**, navigate to **Enterprise → Licenses** in the left menu, and then click **Go to Customer portal** under the **Get a license** section. + +3. In the Authentik login screen, sign up and then log in to the Customer Portal. + + In the Customer Portal, if you have not already created an Organization (nor been invited to join one), you are first prompted to create an organization. + +4. On the **My organizations** page, click **Create an organization**. + +5. Specify the organization's name and notification email address, and then click **Create**. + + Your new organization page displays. + +6. Click **Purchase license**, and then on the **Purchase a license** page, review the pricing plans and (optionally) change the name of the license. The name is simply a nickname, a convenient way to label the license. + +7. Click **Continue** to display the checkout page. Select the number of users, provide your payment information, and then click **Subscribe**. + + When payment verification is complete, you are redirected to the **My organizations** page, where you should see a message saying "Successful purchase. Your license will appear here once we've validated your payment. If it doesn't, please contact us." + + When ready, the license displays on the organization's page. + +:::info +If you access the checkout page directly from the Customer portal, and not through the admin interface, you are prompted to provide the Install ID for your authentik installation. This ID can be found in the Admin interface on the **Licenses** page; click **Install** to view the **Install ID** number. +::: + +8. To retrieve your license key, click on **Details** beside the license name and copy the key to your clipboard. + +9. Go back to the Admin interface, navigate to **Enterprise -> Licenses** page, click on **Install**, paste the key, and then click **Install**. + +#### License verification + +To verify that the license was successfully installed, confirm that the expriry date on the **Enterprise --> Licenses** page displays a date one year later. + +### How to view your license key + +You can view the list of licenses that are applied to your organization on either the Admin interface, on the **Enterprise -> Licenses** page, or in the Customer portal, under your organization's page. + +### About the license expiry date + +The **Enterprise -> Licenses** page shows your current licenses' **Cumulative license expiry**. Expiry date calculation works by verifying the individual expiry date for all valid licenses and then picking the lowest expiry date. After the date of the earliest expiring license, all calculations will be updated without that license, by selecting the next earliest date. + +### License violation notifications + +The following events occur when a license expeires and is not renewed within two weeks. + +- After 2 weeks of the expiry date administrators see a warning banner on the Admin interface + +- After another 2 weeks, users get a warning banner + +- After another 2 weeks, the authentik Enterprise instance becomes “read-only” + +### About users and licenses + +License usage is calculated based on total user counts and log-in data data that authentik regularly captures. This data is checked against all valid licenses, and the sum total of all users. + +- The **_default user_** count is calculated based on actual users assigned to the organization. + +- The **_external user_** count is calculated based on how many external users were active (i.e. logged in) since the start of the current month. + +:::info +An **internal** user is typically a team member, such as company employees, who gets access to the full Enterprise feature set. An **external** user might be an external consultant or a B2C customer who logged onto your website to shop. These users don't get access to enterprise features. +::: + +## Manage Billing + +Billing is based on each individual organization. + +1. To manage your billing, go to the Customer portal and click "My organizations" in the top menu bar. + +2. Select the organization for which you want to manage bulling. + + The organization detail page displays. + +3. Click **Manage Billing** in the top left of the page. + + On the billing page you can: + + - update your account information (address, name, phone number, and tax ID) + - add a payment method + - view your invoice and payment history diff --git a/website/sidebars.js b/website/sidebars.js index 6f5307144..79a8886fe 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -32,7 +32,7 @@ const docsSidebar = { { type: "category", label: "Core Concepts", - collapsed: false, + collapsed: true, items: [ "core/terminology", "core/applications", @@ -42,6 +42,20 @@ const docsSidebar = { "core/architecture", ], }, + { + type: "category", + label: "Enterprise", + collapsed: true, + link: { + type: "doc", + id: "enterprise/index", + }, + items: [ + "enterprise/get-started", + "enterprise/manage-enterprise", + "enterprise/entsupport", + ], + }, { type: "category", label: "Providers", From aa874dd92a770d5f8cd8f265b7cdd31cd73a4599 Mon Sep 17 00:00:00 2001 From: Jens L Date: Tue, 29 Aug 2023 19:07:49 +0200 Subject: [PATCH 02/22] security: fix CVE-2023-39522 (#6665) * stages/email: don't disclose whether a user exists or not when recovering Signed-off-by: Jens Langhammer * update website Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer --- authentik/stages/email/stage.py | 7 +++- authentik/stages/email/tests/test_sending.py | 39 +++++++++++++++++++- authentik/stages/identification/stage.py | 4 ++ authentik/stages/identification/tests.py | 34 ++++++++++++++++- website/docs/releases/2023/v2023.5.md | 4 ++ website/docs/releases/2023/v2023.6.md | 4 ++ website/docs/security/CVE-2023-39522.md | 27 ++++++++++++++ website/sidebars.js | 1 + 8 files changed, 116 insertions(+), 4 deletions(-) create mode 100644 website/docs/security/CVE-2023-39522.md diff --git a/authentik/stages/email/stage.py b/authentik/stages/email/stage.py index f116f7de0..a28fb3f39 100644 --- a/authentik/stages/email/stage.py +++ b/authentik/stages/email/stage.py @@ -12,7 +12,7 @@ from rest_framework.fields import CharField from rest_framework.serializers import ValidationError from authentik.flows.challenge import Challenge, ChallengeResponse, ChallengeTypes -from authentik.flows.models import FlowToken +from authentik.flows.models import FlowDesignation, FlowToken from authentik.flows.planner import PLAN_CONTEXT_IS_RESTORED, PLAN_CONTEXT_PENDING_USER from authentik.flows.stage import ChallengeStageView from authentik.flows.views.executor import QS_KEY_TOKEN @@ -82,6 +82,11 @@ class EmailStageView(ChallengeStageView): """Helper function that sends the actual email. Implies that you've already checked that there is a pending user.""" pending_user = self.get_pending_user() + if not pending_user.pk and self.executor.flow.designation == FlowDesignation.RECOVERY: + # Pending user does not have a primary key, and we're in a recovery flow, + # which means the user entered an invalid identifier, so we pretend to send the + # email, to not disclose if the user exists + return email = self.executor.plan.context.get(PLAN_CONTEXT_EMAIL_OVERRIDE, None) if not email: email = pending_user.email diff --git a/authentik/stages/email/tests/test_sending.py b/authentik/stages/email/tests/test_sending.py index b1c2aea15..424d474ce 100644 --- a/authentik/stages/email/tests/test_sending.py +++ b/authentik/stages/email/tests/test_sending.py @@ -5,18 +5,20 @@ from unittest.mock import MagicMock, PropertyMock, patch from django.core import mail from django.core.mail.backends.locmem import EmailBackend from django.urls import reverse -from rest_framework.test import APITestCase +from authentik.core.models import User from authentik.core.tests.utils import create_test_admin_user, create_test_flow from authentik.events.models import Event, EventAction from authentik.flows.markers import StageMarker from authentik.flows.models import FlowDesignation, FlowStageBinding from authentik.flows.planner import PLAN_CONTEXT_PENDING_USER, FlowPlan +from authentik.flows.tests import FlowTestCase from authentik.flows.views.executor import SESSION_KEY_PLAN +from authentik.lib.generators import generate_id from authentik.stages.email.models import EmailStage -class TestEmailStageSending(APITestCase): +class TestEmailStageSending(FlowTestCase): """Email tests""" def setUp(self): @@ -44,6 +46,13 @@ class TestEmailStageSending(APITestCase): ): response = self.client.post(url) self.assertEqual(response.status_code, 200) + self.assertStageResponse( + response, + self.flow, + response_errors={ + "non_field_errors": [{"string": "email-sent", "code": "email-sent"}] + }, + ) self.assertEqual(len(mail.outbox), 1) self.assertEqual(mail.outbox[0].subject, "authentik") events = Event.objects.filter(action=EventAction.EMAIL_SENT) @@ -54,6 +63,32 @@ class TestEmailStageSending(APITestCase): self.assertEqual(event.context["to_email"], [self.user.email]) self.assertEqual(event.context["from_email"], "system@authentik.local") + def test_pending_fake_user(self): + """Test with pending (fake) user""" + self.flow.designation = FlowDesignation.RECOVERY + self.flow.save() + plan = FlowPlan(flow_pk=self.flow.pk.hex, bindings=[self.binding], markers=[StageMarker()]) + plan.context[PLAN_CONTEXT_PENDING_USER] = User(username=generate_id()) + session = self.client.session + session[SESSION_KEY_PLAN] = plan + session.save() + + url = reverse("authentik_api:flow-executor", kwargs={"flow_slug": self.flow.slug}) + with patch( + "authentik.stages.email.models.EmailStage.backend_class", + PropertyMock(return_value=EmailBackend), + ): + response = self.client.post(url) + self.assertEqual(response.status_code, 200) + self.assertStageResponse( + response, + self.flow, + response_errors={ + "non_field_errors": [{"string": "email-sent", "code": "email-sent"}] + }, + ) + self.assertEqual(len(mail.outbox), 0) + def test_send_error(self): """Test error during sending (sending will be retried)""" plan = FlowPlan(flow_pk=self.flow.pk.hex, bindings=[self.binding], markers=[StageMarker()]) diff --git a/authentik/stages/identification/stage.py b/authentik/stages/identification/stage.py index a54de07d9..3a6a5bd25 100644 --- a/authentik/stages/identification/stage.py +++ b/authentik/stages/identification/stage.py @@ -118,8 +118,12 @@ class IdentificationChallengeResponse(ChallengeResponse): username=uid_field, email=uid_field, ) + self.pre_user = self.stage.executor.plan.context[PLAN_CONTEXT_PENDING_USER] if not current_stage.show_matched_user: self.stage.executor.plan.context[PLAN_CONTEXT_PENDING_USER_IDENTIFIER] = uid_field + if self.stage.executor.flow.designation == FlowDesignation.RECOVERY: + # When used in a recovery flow, always continue to not disclose if a user exists + return attrs raise ValidationError("Failed to authenticate.") self.pre_user = pre_user if not current_stage.password_stage: diff --git a/authentik/stages/identification/tests.py b/authentik/stages/identification/tests.py index cdd7bf0e9..dabdea050 100644 --- a/authentik/stages/identification/tests.py +++ b/authentik/stages/identification/tests.py @@ -188,7 +188,7 @@ class TestIdentificationStage(FlowTestCase): ], ) - def test_recovery_flow(self): + def test_link_recovery_flow(self): """Test that recovery flow is linked correctly""" flow = create_test_flow() self.stage.recovery_flow = flow @@ -226,6 +226,38 @@ class TestIdentificationStage(FlowTestCase): ], ) + def test_recovery_flow_invalid_user(self): + """Test that an invalid user can proceed in a recovery flow""" + self.flow.designation = FlowDesignation.RECOVERY + self.flow.save() + response = self.client.get( + reverse("authentik_api:flow-executor", kwargs={"flow_slug": self.flow.slug}), + ) + self.assertStageResponse( + response, + self.flow, + component="ak-stage-identification", + user_fields=["email"], + password_fields=False, + show_source_labels=False, + primary_action="Continue", + sources=[ + { + "challenge": { + "component": "xak-flow-redirect", + "to": "/source/oauth/login/test/", + "type": ChallengeTypes.REDIRECT.value, + }, + "icon_url": "/static/authentik/sources/default.svg", + "name": "test", + } + ], + ) + form_data = {"uid_field": generate_id()} + url = reverse("authentik_api:flow-executor", kwargs={"flow_slug": self.flow.slug}) + response = self.client.post(url, form_data) + self.assertEqual(response.status_code, 200) + def test_api_validate(self): """Test API validation""" self.assertTrue( diff --git a/website/docs/releases/2023/v2023.5.md b/website/docs/releases/2023/v2023.5.md index f879b205e..5ec1d2f68 100644 --- a/website/docs/releases/2023/v2023.5.md +++ b/website/docs/releases/2023/v2023.5.md @@ -152,6 +152,10 @@ image: - \*: fix [CVE-2023-36456](../security/CVE-2023-36456), Reported by [@thijsa](https://github.com/thijsa) +## Fixed in 2023.5.6 + +- \*: fix [CVE-2023-39522](../security/CVE-2023-39522), Reported by [@markrassamni](https://github.com/markrassamni) + ## API Changes #### What's Changed diff --git a/website/docs/releases/2023/v2023.6.md b/website/docs/releases/2023/v2023.6.md index a81ade848..7032044d0 100644 --- a/website/docs/releases/2023/v2023.6.md +++ b/website/docs/releases/2023/v2023.6.md @@ -88,6 +88,10 @@ helm upgrade authentik authentik/authentik -f values.yaml --version ^2023.6 - sources/ldap: fix more errors (#6191) - sources/ldap: fix page size (#6187) +## Fixed in 2023.6.2 + +- \*: fix [CVE-2023-39522](../security/CVE-2023-39522), Reported by [@markrassamni](https://github.com/markrassamni) + ## API Changes #### What's New diff --git a/website/docs/security/CVE-2023-39522.md b/website/docs/security/CVE-2023-39522.md new file mode 100644 index 000000000..18f09b134 --- /dev/null +++ b/website/docs/security/CVE-2023-39522.md @@ -0,0 +1,27 @@ +# CVE-2023-39522 + +_Reported by [@markrassamni](https://github.com/markrassamni)_ + +## Username enumeration attack + +### Summary + +Using a recovery flow with an identification stage an attacker is able to determine if a username exists. + +### Patches + +authentik 2023.5.6 and 2023.6.2 fix this issue. + +### Impact + +Only setups configured with a recovery flow are impacted by this. + +### Details + +An attacker can easily enumerate and check users' existence using the recovery flow, as a clear message is shown when a user doesn't exist. Depending on configuration this can either be done by username, email, or both. + +### For more information + +If you have any questions or comments about this advisory: + +- Email us at [security@goauthentik.io](mailto:security@goauthentik.io) diff --git a/website/sidebars.js b/website/sidebars.js index 79a8886fe..01f84ba55 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -361,6 +361,7 @@ const docsSidebar = { }, items: [ "security/policy", + "security/CVE-2023-39522", "security/CVE-2023-36456", "security/2023-06-cure53", "security/CVE-2023-26481", From 782341441a3013e0934f91b25d5893f750fc2758 Mon Sep 17 00:00:00 2001 From: Jens L Date: Tue, 29 Aug 2023 19:57:14 +0200 Subject: [PATCH 03/22] website: update 2023.8 release notes (#6666) * update main release notes Signed-off-by: Jens Langhammer * update sidebar Signed-off-by: Jens Langhammer * Apply suggestions from code review Co-authored-by: Tana M Berry Signed-off-by: Jens L. --------- Signed-off-by: Jens Langhammer Signed-off-by: Jens L. Co-authored-by: Tana M Berry --- SECURITY.md | 2 +- website/docs/releases/2023/v2023.8.md | 28 ++++++++++++++++++++++++--- website/sidebars.js | 3 ++- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index 0e3b00b9e..0d9d6a673 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -16,8 +16,8 @@ Even if the issue is not a CVE, we still greatly appreciate your help in hardeni | Version | Supported | | --- | --- | -| 2023.5.x | ✅ | | 2023.6.x | ✅ | +| 2023.8.x | ✅ | ## Reporting a Vulnerability diff --git a/website/docs/releases/2023/v2023.8.md b/website/docs/releases/2023/v2023.8.md index 3075d54df..cc0426fdc 100644 --- a/website/docs/releases/2023/v2023.8.md +++ b/website/docs/releases/2023/v2023.8.md @@ -23,9 +23,17 @@ slug: "/releases/2023.8" ## New features +- Enterprise (preview) + + This is the first release to include the _Enterprise_ section, where you can acquire a license in our Customer Portal and get enterprise licenses for your authentik instance. See more info [here](../../enterprise/index.md) + +- Config reloading + + For better security and to better support running in a cloud-native environment, authentik now supports dynamic PostgreSQL and Email credentials. In previous versions, both the authentik server and worker containers required restarting to detect the new credentials. In 2023.8, these credentials are automatically refreshed just before they are used. This means you can use something like [Hashicorp Vault](https://vaultproject.io) to manage short-term credentials that are rotated once a day or even more frequently without needing to restart authentik. + ## Upgrading -This release does not introduce any new requirements. +This release changes the PostgreSQL dependency to require Version 12 or later, which only affects Kubernetes installs. See [here](../../troubleshooting/postgres/upgrade_kubernetes.md) for more info on upgrading. ### docker-compose @@ -50,11 +58,14 @@ image: ## Minor changes/fixes +- \*: fix api errors raised in general validate() to specify a field (#6663) - api: optimise pagination in API schema (#6478) - blueprints: fix blueprint importer logging potentially sensitive data (#6567) +- blueprints: fix tag values not resolved correctly (#6653) - blueprints: prevent duplicate password stage in default flow when using combined identification stage (#6432) - core: bump django from 4.1.7 to 4.2 (#5238) - core: fix UUID filter field for users api (#6203) +- core: fix filtering users by type attribute (#6638) - core: rework recursive group membership (#6017) - enterprise: add more info to enterprise forecast (#6292) - enterprise: initial enterprise (#5721) @@ -63,15 +74,18 @@ image: - outposts/ldap: add more tests (#6188) - outposts/ldap: add test for attribute filtering (#6189) - outposts: Fix infinite self-recursion in traefik reconciler (#6336) -- outposts: fix patch processing (#6338) +- outposts: fix Kubernetes patch processing (#6338) - outposts: make metrics compliant with Prometheus best-practices (#6398) - outposts: support json patch for Kubernetes (#6319) - providers/oauth2: fix aud (Audience) field type which can be a list of… (#6447) - providers/oauth2: fix grant_type password raising an exception (#6333) +- providers/oauth2: fix id_token being saved incorrectly leading to lost claims (#6645) +- providers/proxy: fix JWKS URL in embedded outpost (#6644) - providers/proxy: only intercept auth header when a value is set (#6488) - providers/proxy: set outpost session cookie to httponly and secure wh… (#6482) -- root: add get_int to config loader instead of casting to int everywhere (#6436) - root: always use persistent database connections (#6560) +- root: config: config discovery parity between Go and Python +- root: config: remove redundant default configs - root: migrate bootstrap to blueprints (#6433) - root: partial Live-updating config (#5959) - root: replace builtin psycopg libpq binary implementation with distro… (#6448) @@ -85,14 +99,22 @@ image: - web/admin: fix admin overview layout (#6220) - web/admin: fix user sorting by active field (#6485) - web/admin: hide pagination when no data is loaded yet (#6353) +- web/admin: make version clickable for stable releases (#6626) +- web/admin: only show token expiry when token is set to expire (#6643) +- web/admin: set required flag to false for user attributes (#6418) +- web/common: make API errors more prominent in developer tools (#6637) +- web/elements: improve table error handling, prevent infinite loading … (#6636) - web/flows: fix identification stage band color (#6489) - web/flows: update flow background (#6579) - web/user: fix alignment between image icons and fallback text icons (#6416) - web/user: fix app icon size for user interface - web/user: fix background alignment (#6383) - web/user: fix user settings colours on dark theme (#6499) +- web/user: fix user settings elements not being in cards (#6608) +- web/user: only render expand element when required (#6641) - web: fix app icon rendering, style refinements (#6409) - web: refactor locale handler into top-level context handler (#6022) +- web: replace deprecated terser rollup plugin, remove unused plugin (#6615) - web: rework and expand tooltips (#6435) ## API Changes diff --git a/website/sidebars.js b/website/sidebars.js index 01f84ba55..6b8a56bdf 100644 --- a/website/sidebars.js +++ b/website/sidebars.js @@ -272,13 +272,14 @@ const docsSidebar = { description: "Release notes for recent authentik versions", }, items: [ + "releases/2023/v2023.8", "releases/2023/v2023.6", "releases/2023/v2023.5", - "releases/2023/v2023.4", { type: "category", label: "Previous versions", items: [ + "releases/2023/v2023.4", "releases/2023/v2023.3", "releases/2023/v2023.2", "releases/2023/v2023.1", From bfa78afd548a41ba7b00adb65aff3ea41b0858e6 Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Tue, 29 Aug 2023 19:58:42 +0200 Subject: [PATCH 04/22] release: 2023.8.0 --- .bumpversion.cfg | 2 +- authentik/__init__.py | 2 +- docker-compose.yml | 4 ++-- internal/constants/constants.go | 2 +- pyproject.toml | 2 +- schema.yml | 2 +- web/src/common/constants.ts | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index cc4a5bc17..87a144d88 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2023.6.1 +current_version = 2023.8.0 tag = True commit = True parse = (?P\d+)\.(?P\d+)\.(?P\d+) diff --git a/authentik/__init__.py b/authentik/__init__.py index 941d9e88b..91ed62f20 100644 --- a/authentik/__init__.py +++ b/authentik/__init__.py @@ -2,7 +2,7 @@ from os import environ from typing import Optional -__version__ = "2023.6.1" +__version__ = "2023.8.0" ENV_GIT_HASH_KEY = "GIT_BUILD_HASH" diff --git a/docker-compose.yml b/docker-compose.yml index 16d873d0b..14870ec0c 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,7 +32,7 @@ services: volumes: - redis:/data server: - image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.6.1} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.8.0} restart: unless-stopped command: server environment: @@ -53,7 +53,7 @@ services: - postgresql - redis worker: - image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.6.1} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.8.0} restart: unless-stopped command: worker environment: diff --git a/internal/constants/constants.go b/internal/constants/constants.go index f47f80b29..bf6b69575 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -29,4 +29,4 @@ func UserAgent() string { return fmt.Sprintf("authentik@%s", FullVersion()) } -const VERSION = "2023.6.1" +const VERSION = "2023.8.0" diff --git a/pyproject.toml b/pyproject.toml index 8c88bed32..62af50295 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -113,7 +113,7 @@ filterwarnings = [ [tool.poetry] name = "authentik" -version = "2023.6.1" +version = "2023.8.0" description = "" authors = ["authentik Team "] diff --git a/schema.yml b/schema.yml index daf3a9eba..8355ad81b 100644 --- a/schema.yml +++ b/schema.yml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: title: authentik - version: 2023.6.1 + version: 2023.8.0 description: Making authentication simple. contact: email: hello@goauthentik.io diff --git a/web/src/common/constants.ts b/web/src/common/constants.ts index 782ecb016..f3eb582a5 100644 --- a/web/src/common/constants.ts +++ b/web/src/common/constants.ts @@ -3,7 +3,7 @@ export const SUCCESS_CLASS = "pf-m-success"; export const ERROR_CLASS = "pf-m-danger"; export const PROGRESS_CLASS = "pf-m-in-progress"; export const CURRENT_CLASS = "pf-m-current"; -export const VERSION = "2023.6.1"; +export const VERSION = "2023.8.0"; export const TITLE_DEFAULT = "authentik"; export const ROUTE_SEPARATOR = ";"; From b43068bfa3fbfa6c2a4acb4ec288fc2fee78250e Mon Sep 17 00:00:00 2001 From: "authentik-automation[bot]" <135050075+authentik-automation[bot]@users.noreply.github.com> Date: Tue, 29 Aug 2023 19:48:01 +0000 Subject: [PATCH 05/22] web: bump API Client version (#6669) Signed-off-by: GitHub Co-authored-by: authentik-automation[bot] <135050075+authentik-automation[bot]@users.noreply.github.com> --- web/package-lock.json | 8 ++++---- web/package.json | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 028accd89..00ad2983c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -17,7 +17,7 @@ "@codemirror/theme-one-dark": "^6.1.2", "@formatjs/intl-listformat": "^7.4.0", "@fortawesome/fontawesome-free": "^6.4.2", - "@goauthentik/api": "^2023.6.1-1692789666", + "@goauthentik/api": "^2023.8.0-1693337284", "@lit-labs/context": "^0.4.0", "@lit-labs/task": "^3.0.1", "@lit/localize": "^0.11.4", @@ -2904,9 +2904,9 @@ } }, "node_modules/@goauthentik/api": { - "version": "2023.6.1-1692789666", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2023.6.1-1692789666.tgz", - "integrity": "sha512-nzHb5P5wLChtDWeKVQZbVo8OayouncrIs4W0WXT9LD62H9fFg/9IUf9bNm/gUW7MjqUre/QF9miHyHZ58sZzXQ==" + "version": "2023.8.0-1693337284", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2023.8.0-1693337284.tgz", + "integrity": "sha512-M2tWPmNZ4ti7GNR+cOzGVHo6UGTLC7t/eKI/ahjv+dldcNrzL9gPyEpxv+CMfsF51yPFYMcGN/tWgSOGtomMSQ==" }, "node_modules/@hcaptcha/types": { "version": "1.0.3", diff --git a/web/package.json b/web/package.json index f0e90cb65..db1fee039 100644 --- a/web/package.json +++ b/web/package.json @@ -34,7 +34,7 @@ "@codemirror/theme-one-dark": "^6.1.2", "@formatjs/intl-listformat": "^7.4.0", "@fortawesome/fontawesome-free": "^6.4.2", - "@goauthentik/api": "^2023.6.1-1692789666", + "@goauthentik/api": "^2023.8.0-1693337284", "@lit-labs/context": "^0.4.0", "@lit-labs/task": "^3.0.1", "@lit/localize": "^0.11.4", @@ -75,8 +75,8 @@ "@rollup/plugin-commonjs": "^25.0.4", "@rollup/plugin-node-resolve": "^15.2.1", "@rollup/plugin-replace": "^5.0.2", - "@rollup/plugin-typescript": "^11.1.3", "@rollup/plugin-terser": "^0.4.3", + "@rollup/plugin-typescript": "^11.1.3", "@storybook/addon-essentials": "^7.4.0", "@storybook/addon-links": "^7.4.0", "@storybook/blocks": "^7.1.1", From aaf58e57413e9948e0ef9017489112a2a093c930 Mon Sep 17 00:00:00 2001 From: Jens L Date: Tue, 29 Aug 2023 22:05:23 +0200 Subject: [PATCH 06/22] website: remove enterprise waitlist (#6670) --- website/src/pages/pricing/index.jsx | 9 ++++++--- website/src/pages/pricing/waitlist/enterprise.jsx | 11 ----------- 2 files changed, 6 insertions(+), 14 deletions(-) delete mode 100644 website/src/pages/pricing/waitlist/enterprise.jsx diff --git a/website/src/pages/pricing/index.jsx b/website/src/pages/pricing/index.jsx index 11cb4e635..1d3e4ded2 100644 --- a/website/src/pages/pricing/index.jsx +++ b/website/src/pages/pricing/index.jsx @@ -2,6 +2,7 @@ import React from "react"; import Layout from "@theme/Layout"; import Link from "@docusaurus/Link"; import Card from "../../components/PricingQuestions/Card"; +import useBaseUrl from "@docusaurus/useBaseUrl"; export default function pricingPage() { return ( @@ -64,10 +65,12 @@ export default function pricingPage() { /external user/month - Join waitlist + Get Started diff --git a/website/src/pages/pricing/waitlist/enterprise.jsx b/website/src/pages/pricing/waitlist/enterprise.jsx deleted file mode 100644 index 5035945ea..000000000 --- a/website/src/pages/pricing/waitlist/enterprise.jsx +++ /dev/null @@ -1,11 +0,0 @@ -import React from "react"; -import { WaitListForm } from "../../../components/Waitlist"; -import Layout from "@theme/Layout"; - -export default function waitListEnterprise() { - return ( - - - - ); -} From bcf9a01a34199eeecaff704c156c4476c36ade4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Aug 2023 22:05:42 +0200 Subject: [PATCH 07/22] web: bump prettier from 3.0.2 to 3.0.3 in /web (#6671) --- web/package-lock.json | 8 ++++---- web/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index 00ad2983c..b4c342b8f 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -80,7 +80,7 @@ "eslint-plugin-storybook": "^0.6.13", "lit-analyzer": "^1.2.1", "npm-run-all": "^4.1.5", - "prettier": "^3.0.2", + "prettier": "^3.0.3", "pyright": "^1.1.324", "react": "^18.2.0", "react-dom": "^18.2.0", @@ -18932,9 +18932,9 @@ } }, "node_modules/prettier": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", - "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" diff --git a/web/package.json b/web/package.json index db1fee039..5568d1a27 100644 --- a/web/package.json +++ b/web/package.json @@ -97,7 +97,7 @@ "eslint-plugin-storybook": "^0.6.13", "lit-analyzer": "^1.2.1", "npm-run-all": "^4.1.5", - "prettier": "^3.0.2", + "prettier": "^3.0.3", "pyright": "^1.1.324", "react": "^18.2.0", "react-dom": "^18.2.0", From d291d16aacff9c16ea76a3d2e747ff593e75d1d7 Mon Sep 17 00:00:00 2001 From: Tana M Berry Date: Tue, 29 Aug 2023 16:49:40 -0500 Subject: [PATCH 08/22] website/docs: fix typos (#6672) fix typos Co-authored-by: Tana Berry --- website/docs/enterprise/index.md | 2 +- website/docs/enterprise/manage-enterprise.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/enterprise/index.md b/website/docs/enterprise/index.md index d8961250f..2a963f517 100644 --- a/website/docs/enterprise/index.md +++ b/website/docs/enterprise/index.md @@ -7,7 +7,7 @@ The Enterprise release of authentik provides all of the functionality that we ha Refer to our Enterprise documentation for information about creating and managing your organization, purchasing and activating a license, support, and managing billing and organization members. - [Get started with Enterprise](./get-started.md) -- [Manage you Enterprise account](./manage-enterprise.md) +- [Manage your Enterprise account](./manage-enterprise.md) - [Support for Enterprise accounts](./entsupport.md) Our standard technical documentation covers how to configure, customize, and use authentik, whether the open source version that we have built our reputation on, or our Enterprise version with dedicated support. diff --git a/website/docs/enterprise/manage-enterprise.md b/website/docs/enterprise/manage-enterprise.md index f3ac3c015..b1f0eee7b 100644 --- a/website/docs/enterprise/manage-enterprise.md +++ b/website/docs/enterprise/manage-enterprise.md @@ -4,7 +4,7 @@ title: Manage your Enterprise account ## Organization management -Your organization defines the members, their roles, the license associated with the organization, and account management for billing, payment methods, and invoice history. +Your organization defines the members, their roles, the licenses associated with the organization, and account management for billing, payment methods, and invoice history. ### Create an Organization From ce0e1c1ef98324f1f30ec2f30ffa14aed28a23b3 Mon Sep 17 00:00:00 2001 From: Jens L Date: Wed, 30 Aug 2023 00:07:36 +0200 Subject: [PATCH 09/22] web: fix notification drawer scrolling (#6675) Signed-off-by: Jens Langhammer --- web/src/elements/notifications/APIDrawer.ts | 3 +++ web/src/elements/notifications/NotificationDrawer.ts | 1 + web/src/flow/FlowInspector.ts | 3 +++ 3 files changed, 7 insertions(+) diff --git a/web/src/elements/notifications/APIDrawer.ts b/web/src/elements/notifications/APIDrawer.ts index b42e63ead..8f93bd8d2 100644 --- a/web/src/elements/notifications/APIDrawer.ts +++ b/web/src/elements/notifications/APIDrawer.ts @@ -38,6 +38,9 @@ export class APIDrawer extends AKElement { white-space: pre-wrap; font-family: monospace; } + .pf-c-notification-drawer__body { + overflow-x: hidden; + } `, ]; } diff --git a/web/src/elements/notifications/NotificationDrawer.ts b/web/src/elements/notifications/NotificationDrawer.ts index e3cdeb7c1..d8d11c664 100644 --- a/web/src/elements/notifications/NotificationDrawer.ts +++ b/web/src/elements/notifications/NotificationDrawer.ts @@ -34,6 +34,7 @@ export class NotificationDrawer extends AKElement { } .pf-c-notification-drawer__body { flex-grow: 1; + overflow-x: hidden; } .pf-c-notification-drawer__header { height: 114px; diff --git a/web/src/flow/FlowInspector.ts b/web/src/flow/FlowInspector.ts index 3e8f02bea..377fc4ad9 100644 --- a/web/src/flow/FlowInspector.ts +++ b/web/src/flow/FlowInspector.ts @@ -45,6 +45,9 @@ export class FlowInspector extends AKElement { overflow-x: hidden; white-space: break-spaces; } + .pf-c-notification-drawer__body { + overflow-x: hidden; + } `, ]; } From e1a49e1f4edab7c4dc595c79ae947fb18456d60d Mon Sep 17 00:00:00 2001 From: Jens L Date: Wed, 30 Aug 2023 00:07:48 +0200 Subject: [PATCH 10/22] web/admin: fix version link to release notes (#6676) Signed-off-by: Jens Langhammer --- web/src/admin/admin-overview/cards/VersionStatusCard.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/web/src/admin/admin-overview/cards/VersionStatusCard.ts b/web/src/admin/admin-overview/cards/VersionStatusCard.ts index 77b075467..01689aede 100644 --- a/web/src/admin/admin-overview/cards/VersionStatusCard.ts +++ b/web/src/admin/admin-overview/cards/VersionStatusCard.ts @@ -43,7 +43,9 @@ export class VersionStatusCard extends AdminStatusCard { renderValue(): TemplateResult { let text = this.value?.versionCurrent; - let link = `https://goauthentik.io/docs/releases/${this.value?.versionCurrent}`; + const versionFamily = this.value?.versionCurrent.split("."); + versionFamily?.pop(); + let link = `https://goauthentik.io/docs/releases/${versionFamily?.join(".")}`; if (this.value?.buildHash) { text = this.value.buildHash?.substring(0, 7); link = `https://github.com/goauthentik/authentik/commit/${this.value.buildHash}`; From 1ffb7efed6c3d2c243496794bcb1c9e29e1133af Mon Sep 17 00:00:00 2001 From: Jens L Date: Wed, 30 Aug 2023 00:08:04 +0200 Subject: [PATCH 11/22] blueprints: fix policy exception causing password stage to be skipped after upgrade (#6674) * blueprints: fix policy exception causing password stage to be skipped after upgrade * make policy more fault tolerant Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer --- blueprints/default/flow-default-authentication-flow.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/blueprints/default/flow-default-authentication-flow.yaml b/blueprints/default/flow-default-authentication-flow.yaml index 47cf27863..123c4e5a7 100644 --- a/blueprints/default/flow-default-authentication-flow.yaml +++ b/blueprints/default/flow-default-authentication-flow.yaml @@ -51,6 +51,8 @@ entries: order: 20 stage: !KeyOf default-authentication-password target: !KeyOf flow + attrs: + re_evaluate_policies: true id: default-authentication-flow-password-binding model: authentik_flows.flowstagebinding - identifiers: @@ -69,10 +71,12 @@ entries: name: default-authentication-flow-password-stage attrs: expression: | - flow_plan = request.context["flow_plan"] + flow_plan = request.context.get("flow_plan") + if not flow_plan: + return True # If the user does not have a backend attached to it, they haven't # been authenticated yet and we need the password stage - return not hasattr(flow_plan.context["pending_user"], "backend") + return not hasattr(flow_plan.context.get("pending_user"), "backend") - model: authentik_policies.policybinding identifiers: order: 10 From 95458570425223a82285bb3ea04ae233aedba54d Mon Sep 17 00:00:00 2001 From: Jens L Date: Wed, 30 Aug 2023 00:13:53 +0200 Subject: [PATCH 12/22] root/revert persistent connections (#6677) Revert "root: always use persistent database connections (#6560)" This reverts commit 1d99ec95b5a7f0e5a5e4d6bf6c524e179ee24662. --- authentik/root/settings.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/authentik/root/settings.py b/authentik/root/settings.py index 4e6514144..0302b3116 100644 --- a/authentik/root/settings.py +++ b/authentik/root/settings.py @@ -279,15 +279,14 @@ DATABASES = { "SSLROOTCERT": CONFIG.get("postgresql.sslrootcert"), "SSLCERT": CONFIG.get("postgresql.sslcert"), "SSLKEY": CONFIG.get("postgresql.sslkey"), - # https://docs.djangoproject.com/en/4.0/ref/databases/#persistent-connections - "CONN_MAX_AGE": None, - "CONN_HEALTH_CHECKS": True, } } if CONFIG.get_bool("postgresql.use_pgbouncer", False): # https://docs.djangoproject.com/en/4.0/ref/databases/#transaction-pooling-server-side-cursors DATABASES["default"]["DISABLE_SERVER_SIDE_CURSORS"] = True + # https://docs.djangoproject.com/en/4.0/ref/databases/#persistent-connections + DATABASES["default"]["CONN_MAX_AGE"] = None # persistent # Email # These values should never actually be used, emails are only sent from email stages, which From 6246537e17a0b9a221cbb679349921ea69abb627 Mon Sep 17 00:00:00 2001 From: Jens L Date: Wed, 30 Aug 2023 00:31:26 +0200 Subject: [PATCH 13/22] website: bump 2023.8.1 release notes (#6678) Signed-off-by: Jens Langhammer --- website/docs/releases/2023/v2023.8.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/website/docs/releases/2023/v2023.8.md b/website/docs/releases/2023/v2023.8.md index cc0426fdc..0e992cb0c 100644 --- a/website/docs/releases/2023/v2023.8.md +++ b/website/docs/releases/2023/v2023.8.md @@ -117,6 +117,13 @@ image: - web: replace deprecated terser rollup plugin, remove unused plugin (#6615) - web: rework and expand tooltips (#6435) +## Fixed in 2023.8.1 + +- blueprints: fix policy exception causing password stage to be skipped after upgrade (#6674) +- root: revert persistent connections causing postgres out of connections errors (#6677) +- web: fix notification drawer scrolling (#6675) +- web/admin: fix version link to release notes (#6676) + ## API Changes #### What's New From be3cfaee560a7d6fac157d61ae7186a92a279c9c Mon Sep 17 00:00:00 2001 From: Jens Langhammer Date: Wed, 30 Aug 2023 00:31:45 +0200 Subject: [PATCH 14/22] release: 2023.8.1 --- .bumpversion.cfg | 2 +- authentik/__init__.py | 2 +- docker-compose.yml | 4 ++-- internal/constants/constants.go | 2 +- pyproject.toml | 2 +- schema.yml | 2 +- web/src/common/constants.ts | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.bumpversion.cfg b/.bumpversion.cfg index 87a144d88..1adaaa2cb 100644 --- a/.bumpversion.cfg +++ b/.bumpversion.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 2023.8.0 +current_version = 2023.8.1 tag = True commit = True parse = (?P\d+)\.(?P\d+)\.(?P\d+) diff --git a/authentik/__init__.py b/authentik/__init__.py index 91ed62f20..f36d231ff 100644 --- a/authentik/__init__.py +++ b/authentik/__init__.py @@ -2,7 +2,7 @@ from os import environ from typing import Optional -__version__ = "2023.8.0" +__version__ = "2023.8.1" ENV_GIT_HASH_KEY = "GIT_BUILD_HASH" diff --git a/docker-compose.yml b/docker-compose.yml index 14870ec0c..68970fcfa 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -32,7 +32,7 @@ services: volumes: - redis:/data server: - image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.8.0} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.8.1} restart: unless-stopped command: server environment: @@ -53,7 +53,7 @@ services: - postgresql - redis worker: - image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.8.0} + image: ${AUTHENTIK_IMAGE:-ghcr.io/goauthentik/server}:${AUTHENTIK_TAG:-2023.8.1} restart: unless-stopped command: worker environment: diff --git a/internal/constants/constants.go b/internal/constants/constants.go index bf6b69575..d2d1aec48 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -29,4 +29,4 @@ func UserAgent() string { return fmt.Sprintf("authentik@%s", FullVersion()) } -const VERSION = "2023.8.0" +const VERSION = "2023.8.1" diff --git a/pyproject.toml b/pyproject.toml index 62af50295..714ad0600 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -113,7 +113,7 @@ filterwarnings = [ [tool.poetry] name = "authentik" -version = "2023.8.0" +version = "2023.8.1" description = "" authors = ["authentik Team "] diff --git a/schema.yml b/schema.yml index 8355ad81b..bc53d9eb9 100644 --- a/schema.yml +++ b/schema.yml @@ -1,7 +1,7 @@ openapi: 3.0.3 info: title: authentik - version: 2023.8.0 + version: 2023.8.1 description: Making authentication simple. contact: email: hello@goauthentik.io diff --git a/web/src/common/constants.ts b/web/src/common/constants.ts index f3eb582a5..cd5c58e2a 100644 --- a/web/src/common/constants.ts +++ b/web/src/common/constants.ts @@ -3,7 +3,7 @@ export const SUCCESS_CLASS = "pf-m-success"; export const ERROR_CLASS = "pf-m-danger"; export const PROGRESS_CLASS = "pf-m-in-progress"; export const CURRENT_CLASS = "pf-m-current"; -export const VERSION = "2023.8.0"; +export const VERSION = "2023.8.1"; export const TITLE_DEFAULT = "authentik"; export const ROUTE_SEPARATOR = ";"; From 9572613c56e9a31e8bbb2fa3017fa7ce5e648fb0 Mon Sep 17 00:00:00 2001 From: "authentik-automation[bot]" <135050075+authentik-automation[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 02:43:28 +0200 Subject: [PATCH 15/22] web: bump API Client version (#6680) --- web/package-lock.json | 8 ++++---- web/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index b4c342b8f..a9613b82c 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -17,7 +17,7 @@ "@codemirror/theme-one-dark": "^6.1.2", "@formatjs/intl-listformat": "^7.4.0", "@fortawesome/fontawesome-free": "^6.4.2", - "@goauthentik/api": "^2023.8.0-1693337284", + "@goauthentik/api": "^2023.8.1-1693356037", "@lit-labs/context": "^0.4.0", "@lit-labs/task": "^3.0.1", "@lit/localize": "^0.11.4", @@ -2904,9 +2904,9 @@ } }, "node_modules/@goauthentik/api": { - "version": "2023.8.0-1693337284", - "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2023.8.0-1693337284.tgz", - "integrity": "sha512-M2tWPmNZ4ti7GNR+cOzGVHo6UGTLC7t/eKI/ahjv+dldcNrzL9gPyEpxv+CMfsF51yPFYMcGN/tWgSOGtomMSQ==" + "version": "2023.8.1-1693356037", + "resolved": "https://registry.npmjs.org/@goauthentik/api/-/api-2023.8.1-1693356037.tgz", + "integrity": "sha512-I1puw6j3BDoKpYMYESwi7KYyR+QnHcENdhifWdQbcPrCRd3JMNWWbBvG6XgCF16364Exsndwt5R1PllZSDQznA==" }, "node_modules/@hcaptcha/types": { "version": "1.0.3", diff --git a/web/package.json b/web/package.json index 5568d1a27..eb8d7a060 100644 --- a/web/package.json +++ b/web/package.json @@ -34,7 +34,7 @@ "@codemirror/theme-one-dark": "^6.1.2", "@formatjs/intl-listformat": "^7.4.0", "@fortawesome/fontawesome-free": "^6.4.2", - "@goauthentik/api": "^2023.8.0-1693337284", + "@goauthentik/api": "^2023.8.1-1693356037", "@lit-labs/context": "^0.4.0", "@lit-labs/task": "^3.0.1", "@lit/localize": "^0.11.4", From 5b5a63f16758edcf428e29a9530d0d5aabdeb31f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:31:50 +0200 Subject: [PATCH 16/22] web: bump pyright from 1.1.324 to 1.1.325 in /web (#6685) Bumps [pyright](https://github.com/Microsoft/pyright/tree/HEAD/packages/pyright) from 1.1.324 to 1.1.325. - [Release notes](https://github.com/Microsoft/pyright/releases) - [Commits](https://github.com/Microsoft/pyright/commits/1.1.325/packages/pyright) --- updated-dependencies: - dependency-name: pyright dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- web/package-lock.json | 8 ++++---- web/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/web/package-lock.json b/web/package-lock.json index a9613b82c..32083a7be 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -81,7 +81,7 @@ "lit-analyzer": "^1.2.1", "npm-run-all": "^4.1.5", "prettier": "^3.0.3", - "pyright": "^1.1.324", + "pyright": "^1.1.325", "react": "^18.2.0", "react-dom": "^18.2.0", "rollup": "^3.28.1", @@ -19165,9 +19165,9 @@ } }, "node_modules/pyright": { - "version": "1.1.324", - "resolved": "https://registry.npmjs.org/pyright/-/pyright-1.1.324.tgz", - "integrity": "sha512-/Ng8G2Gb17dzQEHKgPa+Z5a6LPCLYNA4BVno1UdpDjnC9iLw0VAn5k/RNuaGkB/mhA82lV0OBcd5JEdaWcA3qg==", + "version": "1.1.325", + "resolved": "https://registry.npmjs.org/pyright/-/pyright-1.1.325.tgz", + "integrity": "sha512-hMvcY5G9WTRbvEKGiiqTepyORAppNPXZDUer5GZ15t1DYB79WwP3M0Tec6S0an7FDoY6eaJ5CtK+diJbmISIBQ==", "dev": true, "bin": { "pyright": "index.js", diff --git a/web/package.json b/web/package.json index eb8d7a060..c2407691f 100644 --- a/web/package.json +++ b/web/package.json @@ -98,7 +98,7 @@ "lit-analyzer": "^1.2.1", "npm-run-all": "^4.1.5", "prettier": "^3.0.3", - "pyright": "^1.1.324", + "pyright": "^1.1.325", "react": "^18.2.0", "react-dom": "^18.2.0", "rollup": "^3.28.1", From 097f48ec2010048f739573e39628f29374cd279b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:31:59 +0200 Subject: [PATCH 17/22] core: bump sentry-sdk from 1.29.2 to 1.30.0 (#6682) Bumps [sentry-sdk](https://github.com/getsentry/sentry-python) from 1.29.2 to 1.30.0. - [Release notes](https://github.com/getsentry/sentry-python/releases) - [Changelog](https://github.com/getsentry/sentry-python/blob/master/CHANGELOG.md) - [Commits](https://github.com/getsentry/sentry-python/compare/1.29.2...1.30.0) --- updated-dependencies: - dependency-name: sentry-sdk dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 97640bbab..d8cf8ee2a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3458,13 +3458,13 @@ urllib3 = {version = ">=1.26,<3", extras = ["socks"]} [[package]] name = "sentry-sdk" -version = "1.29.2" +version = "1.30.0" description = "Python client for Sentry (https://sentry.io)" optional = false python-versions = "*" files = [ - {file = "sentry-sdk-1.29.2.tar.gz", hash = "sha256:a99ee105384788c3f228726a88baf515fe7b5f1d2d0f215a03d194369f158df7"}, - {file = "sentry_sdk-1.29.2-py2.py3-none-any.whl", hash = "sha256:3e17215d8006612e2df02b0e73115eb8376c37e3f586d8436fa41644e605074d"}, + {file = "sentry-sdk-1.30.0.tar.gz", hash = "sha256:7dc873b87e1faf4d00614afd1058bfa1522942f33daef8a59f90de8ed75cd10c"}, + {file = "sentry_sdk-1.30.0-py2.py3-none-any.whl", hash = "sha256:2e53ad63f96bb9da6570ba2e755c267e529edcf58580a2c0d2a11ef26e1e678b"}, ] [package.dependencies] @@ -3487,6 +3487,7 @@ httpx = ["httpx (>=0.16.0)"] huey = ["huey (>=2)"] loguru = ["loguru (>=0.5)"] opentelemetry = ["opentelemetry-distro (>=0.35b0)"] +opentelemetry-experimental = ["opentelemetry-distro (>=0.40b0,<1.0)", "opentelemetry-instrumentation-aiohttp-client (>=0.40b0,<1.0)", "opentelemetry-instrumentation-django (>=0.40b0,<1.0)", "opentelemetry-instrumentation-fastapi (>=0.40b0,<1.0)", "opentelemetry-instrumentation-flask (>=0.40b0,<1.0)", "opentelemetry-instrumentation-requests (>=0.40b0,<1.0)", "opentelemetry-instrumentation-sqlite3 (>=0.40b0,<1.0)", "opentelemetry-instrumentation-urllib (>=0.40b0,<1.0)"] pure-eval = ["asttokens", "executing", "pure-eval"] pymongo = ["pymongo (>=3.1)"] pyspark = ["pyspark (>=2.4.4)"] From f852a399a18094eb0156ee65556a6d79fbe5c844 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:32:22 +0200 Subject: [PATCH 18/22] website: bump postcss from 8.4.28 to 8.4.29 in /website (#6684) Bumps [postcss](https://github.com/postcss/postcss) from 8.4.28 to 8.4.29. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.28...8.4.29) --- updated-dependencies: - dependency-name: postcss dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- website/package-lock.json | 14 +++++++------- website/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index 6a83cad30..6e9e2eb60 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -15,7 +15,7 @@ "@mdx-js/react": "^1.6.22", "clsx": "^2.0.0", "disqus-react": "^1.1.5", - "postcss": "^8.4.28", + "postcss": "^8.4.29", "rapidoc": "^9.3.4", "react": "^17.0.2", "react-before-after-slider-component": "^1.1.8", @@ -9406,9 +9406,9 @@ } }, "node_modules/postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "version": "8.4.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", + "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", "funding": [ { "type": "opencollective", @@ -20579,9 +20579,9 @@ } }, "postcss": { - "version": "8.4.28", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.28.tgz", - "integrity": "sha512-Z7V5j0cq8oEKyejIKfpD8b4eBy9cwW2JWPk0+fB1HOAMsfHbnAXLLS+PfVWlzMSLQaWttKDt607I0XHmpE67Vw==", + "version": "8.4.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.29.tgz", + "integrity": "sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==", "requires": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", diff --git a/website/package.json b/website/package.json index 295051de5..b3ca5a4b6 100644 --- a/website/package.json +++ b/website/package.json @@ -22,7 +22,7 @@ "@mdx-js/react": "^1.6.22", "clsx": "^2.0.0", "disqus-react": "^1.1.5", - "postcss": "^8.4.28", + "postcss": "^8.4.29", "rapidoc": "^9.3.4", "react": "^17.0.2", "react-before-after-slider-component": "^1.1.8", From 08d349379a0db4756f891a9f4fd65939b4380adf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:32:32 +0200 Subject: [PATCH 19/22] website: bump prettier from 3.0.2 to 3.0.3 in /website (#6683) Bumps [prettier](https://github.com/prettier/prettier) from 3.0.2 to 3.0.3. - [Release notes](https://github.com/prettier/prettier/releases) - [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md) - [Commits](https://github.com/prettier/prettier/compare/3.0.2...3.0.3) --- updated-dependencies: - dependency-name: prettier dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- website/package-lock.json | 14 +++++++------- website/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/website/package-lock.json b/website/package-lock.json index 6e9e2eb60..3fe80746f 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -26,7 +26,7 @@ "remark-github": "^11.2.4" }, "devDependencies": { - "prettier": "3.0.2" + "prettier": "3.0.3" } }, "node_modules/@algolia/autocomplete-core": { @@ -10008,9 +10008,9 @@ } }, "node_modules/prettier": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", - "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -20927,9 +20927,9 @@ "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, "prettier": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.2.tgz", - "integrity": "sha512-o2YR9qtniXvwEZlOKbveKfDQVyqxbEIWn48Z8m3ZJjBjcCmUy3xZGIv+7AkaeuaTr6yPXJjwv07ZWlsWbEy1rQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", + "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", "dev": true }, "pretty-error": { diff --git a/website/package.json b/website/package.json index b3ca5a4b6..654488d7c 100644 --- a/website/package.json +++ b/website/package.json @@ -45,6 +45,6 @@ ] }, "devDependencies": { - "prettier": "3.0.2" + "prettier": "3.0.3" } } From 8192b3155d86f72d4fdb5b1887f24d906aff774f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Aug 2023 11:32:42 +0200 Subject: [PATCH 20/22] core: bump goauthentik.io/api/v3 from 3.2023061.13 to 3.2023081.1 (#6681) Bumps [goauthentik.io/api/v3](https://github.com/goauthentik/client-go) from 3.2023061.13 to 3.2023081.1. - [Release notes](https://github.com/goauthentik/client-go/releases) - [Commits](https://github.com/goauthentik/client-go/compare/v3.2023061.13...v3.2023081.1) --- updated-dependencies: - dependency-name: goauthentik.io/api/v3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 24e205327..68d230a48 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/sirupsen/logrus v1.9.3 github.com/spf13/cobra v1.7.0 github.com/stretchr/testify v1.8.4 - goauthentik.io/api/v3 v3.2023061.13 + goauthentik.io/api/v3 v3.2023081.1 golang.org/x/exp v0.0.0-20230210204819-062eb4c674ab golang.org/x/oauth2 v0.11.0 golang.org/x/sync v0.3.0 diff --git a/go.sum b/go.sum index 431d21471..ac5de0546 100644 --- a/go.sum +++ b/go.sum @@ -1071,8 +1071,8 @@ go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqe go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= -goauthentik.io/api/v3 v3.2023061.13 h1:0V5XrryJdMrOug/5wWazmH+D3Y/dDGPyLDhWcbJ5Gm0= -goauthentik.io/api/v3 v3.2023061.13/go.mod h1:sP1/Ak/vGw96xNgpyoObHgXfyAElcTN5CbbC+VdPQXk= +goauthentik.io/api/v3 v3.2023081.1 h1:kXD9ZxOEjVxTK+qGeB0I13A5TzvO/PlAQqVQOCYevUM= +goauthentik.io/api/v3 v3.2023081.1/go.mod h1:sP1/Ak/vGw96xNgpyoObHgXfyAElcTN5CbbC+VdPQXk= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= From b6a57ffd4f43c72e32caeeeeaaa53adbad55e297 Mon Sep 17 00:00:00 2001 From: Jens L Date: Wed, 30 Aug 2023 12:46:42 +0200 Subject: [PATCH 21/22] events: fix missing application names from most used applications (#6689) Signed-off-by: Jens Langhammer --- authentik/events/api/events.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/authentik/events/api/events.py b/authentik/events/api/events.py index fda11c090..e3226c407 100644 --- a/authentik/events/api/events.py +++ b/authentik/events/api/events.py @@ -4,7 +4,7 @@ from json import loads import django_filters from django.db.models.aggregates import Count -from django.db.models.fields.json import KeyTextTransform +from django.db.models.fields.json import KeyTextTransform, KeyTransform from django.db.models.functions import ExtractDay from drf_spectacular.types import OpenApiTypes from drf_spectacular.utils import OpenApiParameter, extend_schema @@ -134,11 +134,11 @@ class EventViewSet(ModelViewSet): """Get the top_n events grouped by user count""" filtered_action = request.query_params.get("action", EventAction.LOGIN) top_n = int(request.query_params.get("top_n", "15")) - return Response( + events = ( get_objects_for_user(request.user, "authentik_events.view_event") .filter(action=filtered_action) .exclude(context__authorized_application=None) - .annotate(application=KeyTextTransform("authorized_application", "context")) + .annotate(application=KeyTransform("authorized_application", "context")) .annotate(user_pk=KeyTextTransform("pk", "user")) .values("application") .annotate(counted_events=Count("application")) @@ -146,6 +146,7 @@ class EventViewSet(ModelViewSet): .values("unique_users", "application", "counted_events") .order_by("-counted_events")[:top_n] ) + return Response(EventTopPerUserSerializer(instance=events, many=True).data) @extend_schema( methods=["GET"], From bfd0fb66b306303f417cce704e05e83943ef627c Mon Sep 17 00:00:00 2001 From: Jens L Date: Wed, 30 Aug 2023 12:46:58 +0200 Subject: [PATCH 22/22] web/admin: fix ak-toggle-group for policy and blueprint uses (#6687) * web/admin: fix ak-toggle-group for policy and blueprint uses Signed-off-by: Jens Langhammer * fix and re-enable lit-analyse Signed-off-by: Jens Langhammer --------- Signed-off-by: Jens Langhammer --- Makefile | 3 +-- web/src/admin/blueprints/BlueprintForm.ts | 7 ++++--- web/src/admin/policies/PolicyBindingForm.ts | 9 +++++---- web/src/components/ak-toggle-group.ts | 2 ++ 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Makefile b/Makefile index 3343c9968..fb08cc604 100644 --- a/Makefile +++ b/Makefile @@ -148,8 +148,7 @@ web-lint-fix: web-lint: cd web && npm run lint - # TODO: The analyzer hasn't run correctly in awhile. - # cd web && npm run lit-analyse + cd web && npm run lit-analyse web-check-compile: cd web && npm run tsc diff --git a/web/src/admin/blueprints/BlueprintForm.ts b/web/src/admin/blueprints/BlueprintForm.ts index 3176ddb0e..d8d34dd82 100644 --- a/web/src/admin/blueprints/BlueprintForm.ts +++ b/web/src/admin/blueprints/BlueprintForm.ts @@ -1,6 +1,7 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { docLink } from "@goauthentik/common/global"; import { first } from "@goauthentik/common/utils"; +import "@goauthentik/components/ak-toggle-group"; import "@goauthentik/elements/CodeMirror"; import "@goauthentik/elements/forms/FormGroup"; import "@goauthentik/elements/forms/HorizontalFormElement"; @@ -18,9 +19,9 @@ import PFContent from "@patternfly/patternfly/components/Content/content.css"; import { BlueprintFile, BlueprintInstance, ManagedApi } from "@goauthentik/api"; enum blueprintSource { - file, - oci, - internal, + file = "file", + oci = "oci", + internal = "internal", } @customElement("ak-blueprint-form") diff --git a/web/src/admin/policies/PolicyBindingForm.ts b/web/src/admin/policies/PolicyBindingForm.ts index 098a57546..a69638a43 100644 --- a/web/src/admin/policies/PolicyBindingForm.ts +++ b/web/src/admin/policies/PolicyBindingForm.ts @@ -1,5 +1,6 @@ import { DEFAULT_CONFIG } from "@goauthentik/common/api/config"; import { first, groupBy } from "@goauthentik/common/utils"; +import "@goauthentik/components/ak-toggle-group"; import "@goauthentik/elements/forms/HorizontalFormElement"; import { ModelForm } from "@goauthentik/elements/forms/ModelForm"; import "@goauthentik/elements/forms/SearchSelect"; @@ -24,9 +25,9 @@ import { } from "@goauthentik/api"; enum target { - policy, - group, - user, + policy = "policy", + group = "group", + user = "user", } @customElement("ak-policy-binding-form") @@ -51,7 +52,7 @@ export class PolicyBindingForm extends ModelForm { @property() targetPk?: string; - @property({ type: Number }) + @state() policyGroupUser: target = target.policy; @property({ type: Boolean }) diff --git a/web/src/components/ak-toggle-group.ts b/web/src/components/ak-toggle-group.ts index be3382891..2e5b4f90e 100644 --- a/web/src/components/ak-toggle-group.ts +++ b/web/src/components/ak-toggle-group.ts @@ -6,6 +6,7 @@ import { customElement, property } from "lit/decorators.js"; import { classMap } from "lit/directives/class-map.js"; import PFToggleGroup from "@patternfly/patternfly/components/ToggleGroup/toggle-group.css"; +import PFBase from "@patternfly/patternfly/patternfly-base.css"; type Pair = [string, string]; @@ -26,6 +27,7 @@ type Pair = [string, string]; export class AkToggleGroup extends CustomEmitterElement(AKElement) { static get styles() { return [ + PFBase, PFToggleGroup, css` .pf-c-toggle-group {