From e5bb102ab184b3bd3911d6c3526fee17d806c839 Mon Sep 17 00:00:00 2001
From: Svilen Markov <7613769+svilenmarkov@users.noreply.github.com>
Date: Tue, 15 Oct 2024 18:05:29 +0100
Subject: [PATCH] Add split-column widget
---
docs/configuration.md | 60 +++++++++++++++++++-
docs/images/split-column-widget-preview.png | Bin 0 -> 335405 bytes
internal/assets/static/js/main.js | 2 +
internal/assets/templates.go | 1 +
internal/assets/templates/split-column.html | 11 ++++
internal/widget/container.go | 8 +--
internal/widget/group.go | 14 +++--
internal/widget/split-column.go | 42 ++++++++++++++
internal/widget/widget.go | 2 +
9 files changed, 129 insertions(+), 11 deletions(-)
create mode 100644 docs/images/split-column-widget-preview.png
create mode 100644 internal/assets/templates/split-column.html
create mode 100644 internal/widget/split-column.go
diff --git a/docs/configuration.md b/docs/configuration.md
index 242e9ea..d5856ca 100644
--- a/docs/configuration.md
+++ b/docs/configuration.md
@@ -15,6 +15,7 @@
- [Reddit](#reddit)
- [Search](#search-widget)
- [Group](#group)
+ - [Split Column](#split-column)
- [Extension](#extension)
- [Weather](#weather)
- [Monitor](#monitor)
@@ -890,7 +891,7 @@ url: https://www.amazon.com/s?k={QUERY}
```
### Group
-Group multiple widgets into one using tabs. Widgets are defined using a `widgets` property exactly as you would on a page column. The only limitation is that you cannot place a group widget within a group widget.
+Group multiple widgets into one using tabs. Widgets are defined using a `widgets` property exactly as you would on a page column. The only limitation is that you cannot place a group widget or a split column widget within a group widget.
Example:
@@ -933,6 +934,63 @@ Example:
<<: *shared-properties
```
+### Split Column
+Splits a full sized column in half, allowing you to place widgets side by side. This is converted to a single column on mobile devices or if not enough width is available. Widgets are defined using a `widgets` property exactly as you would on a page column.
+
+Example of a full page with an effective 4 column layout using two split column widgets inside of two full sized columns:
+
+View config
+
+```yaml
+shared:
+ - &reddit-props
+ type: reddit
+ collapse-after: 4
+ show-thumbnails: true
+
+pages:
+ - name: Split Column Demo
+ width: wide
+ columns:
+ - size: full
+ widgets:
+ - type: split-column
+ widgets:
+ - subreddit: gaming
+ <<: *reddit-props
+ - subreddit: worldnews
+ <<: *reddit-props
+ - subreddit: lifeprotips
+ <<: *reddit-props
+ show-thumbnails: false
+ - subreddit: askreddit
+ <<: *reddit-props
+ show-thumbnails: false
+
+ - size: full
+ widgets:
+ - type: split-column
+ widgets:
+ - subreddit: todayilearned
+ <<: *reddit-props
+ collapse-after: 2
+ - subreddit: aww
+ <<: *reddit-props
+ - subreddit: science
+ <<: *reddit-props
+ - subreddit: showerthoughts
+ <<: *reddit-props
+ show-thumbnails: false
+```
+
+
+Preview:
+
+
+
### Extension
Display a widget provided by an external source (3rd party). If you want to learn more about developing extensions, checkout the [extensions documentation](extensions.md) (WIP).
diff --git a/docs/images/split-column-widget-preview.png b/docs/images/split-column-widget-preview.png
new file mode 100644
index 0000000000000000000000000000000000000000..f1931f82d03cd84aeb3fc8c5aa01d2409fbf5448
GIT binary patch
literal 335405
zcmeEtWl&u2mnOj-f
>e^@WMeBJxe@k-3UMd99@ILq03i3F6qGAAc zVv(>rf$n{itRS;ES2L+*qSu{LVm;H$%L@x2RYXObn|b$aZ2HYVe3L1d(lgQnH>mJc zlDRqy`(03#r*18qbCfs+Fy$$MQVPwN2$3Y(2)yR z5)$z94en-VS3GvC*o>z~y^}P+Q~bdtAJT)o4;48VaN)l$>4$z%+BSZ UA`^?2LQ zhotO624O9oYP>yNw9ZP_a7r|@c%tZ2fzJu!1h1&0hP0y8?pu7Rb!xr7ot>Qsg&rOw z$v+ki4`AqC#{C&-js%l>0B^E5u>D;e>ks;POT3eih5<#rw=AI6_!}|0WKJ)bLPmmT zp#0ZsV_{B(D^F>e?}1ZnsS|xWt*Ld3Dh0d%m#obr?f2t_{VM#UWad1NL3-*J?KcTZ z>v;}_93AT00Sff>ND%{CbaokoTM55?eaUnMTC~h_0fKSQ^E2T{fLz6cyZ> zIV`-7F*{r5Tiqg9kWXe_Ms7#YN-|BJS8!Y}b<828AaRjp! 2dw}yYh^2e!%PFCh^4I~juY`Ifs=%q=Vf0>R?hneDDLup zq(Wz0uhw{aarW1hu`ExDS{XnSNS&|_2 ~&+IJ-{f~8*~$xn|BXdU3JZhp8oS8LuJT2;u$N}xzP 0xSp*ZpJ`4q$n{%Y8&|A8%Hc_MR z3oO(V&v=$Gf+J!wT~mFC(Bvyh6;*jbV+~!-2NY-{|0D4*XMp!?XzT(6m{S!QQp>-C zVnvEqhZLBY-S@i~U7;R+uSyzFMu_%*Gp6~%3#(V>;-QC2+b#2sdZ{&{tjvcuOAzb* zd(-6>f#_qB87mSk0+72IZ=Ro_hA7JMc*VkJ7u%b7+H4EV19WAWtW=r)jNe4bP!H+x z3o^&0cr`-?JF*F=05xl&zX1K;D~X1$K)6w17PmZf|0wong*7M{75+KFrlq+VXk_Ns z)2ORiPu2r(Z*S2d(HcfZtBb3Z5JM2o+3B(RU@Dd?weqdso)aHxr9_<%8EVQNkO~nC z^;n-%bsF_^7X00e5JpjNvvb*!a{N$^=rJAR@(@EtT3F<#%@ z1&Wvwx#b#nT4`dd95HxQ?njSo6&!sVeQTHWO%|t~C=g6 &r8i-a3IOd2!v%neepYQX5ci7rL90q_ZN2~t z0*5e9zXVoxW?_$ebG|M2sS#3xbT2$+#3>jv@mZx84_(km9sK_4Pl_<9y$-= }atTg9OH~>bdq+GSV5NI^of+?%Y;v;a>*Ju<=oI0Qr&tQe_;`}#`O2Zx~ z!w7olmk5)AwzixP0l>R#
QsP6 >6iomL3uhF(`m1`thgY4Bn>vw4BZ63noBY+qbE>Cp^`3YVuE<^ zi7fu2=TqvJG?9N!ICT>HqTjvt yd%@e-0}*yYQ}QEi2dux1c!f5e96a#3h+%yOd73#$)0 z 3-3^PV{MNo@9ah29+*7dmUr39K)-o1-o~Fe5QWX?6Fz#6|0t-^*i>w$ mRgvtF2SYwS{t2ZMh)YhNDa!7Ka@e+qyV#pP^OY&*2hQ!Vjn7 znt~GpB FB; zAsc4VF8aN6bY3MECowrqXHje}BNS)&0%A?W=w>69bpZeC&mHC#W*Swb?I4-`H~0Q! zM^N&Ftya>J)a}~Jh9C#o;>c8DT@svQhhmR+#_@OV-8(+sxq32w4w2uU#=06*cQyvP zI=mWGUk}FysDVE3m;`5Zx4u}uA*)F*{he4r<`Z6hQJ0g&c=(U;^dGa3{xAzL&uo^H zNV28#G)KIG!0we|gZ#xv(dNPBQ+KolIHjW$Ic20V7r^1+)d4YkAESQ*50Wmy dLGYN-#^r! zk0*#q`IQMglfmZPaWZq2L&%eqc&pGsx-Gcjev-X%)bO#Xv5Y-UO|pwe1>8jCNH322 z%N lvJ+Xy5KG0JZ%UAw;iua8msIto~$f`E;luDZ1 9-|r7)k~L^>eqKFsq8fS21>UXG(Im#V$jpkdwdD2h;8r_;o}jh zvL~?ymH;I `|szerS*1Ns$!kLm(H225Xv{R)O zS1Gdo3bH >8?au=xKUBb?N6=A!m78&?6cXuH)G51rp|-#+Nf zhlTY&J_ala3|}@;2 2R73#!+TkxPHp!T83e6Fy1GP5GSb@}U(H2N0b?+00iy=bl zVqN3jJ!nRwqN%ZaxKsmRXdQ=vp2iF^($yv0XF35>4we&7py7PkSCDWq?Ycg4WEVVG zJLMD7+N6n@eHbm_hI}ikDB)XfQ81r;aiJ_Xq!(q8mZ3`o zcq9mDp6wf_)FD?aRz~zC6Ls B62# zzM$Dqx#vHFs6<>tJW2lt^UN$x8@HR|Gh``lyxrRRJm?{rILwTc{tJZv)h=%crM5UH zzLtqmmRPRU4|V@2;k_>0UY(iSQfX=FQAPGi{kl`vu!X)3KdbIpJOp_j Cs)iID=Z+D#fqtNB*ra!Bo%!3q-&Wn$J!&?$+t?0!vetyL> zRZvT6Yv=2#%d0TrMbx{ANZg`FZ#KxyVxomV;%0GEbF0>?PA^`5dZXVlz};d++TzRz z0qt%Ayz+E=$qsa4_da$$z6D)vxh{(7^D6{cpn0xhmJ>=#_LIbEs6)s(?nXFh$qP zhLI|oi{B#^5_8I1df3QjffP+^5h h$GifvIPCcE0%IV+Z$Q@U>N|^D vSJuiU*j{XW!trte(|;@iO(~xb zMs M=bUY`a+OZ=Bn{_-{N-}wei}tdx1*6d_@uMwIoE;0eJ}bWsTQ5FIy+uGjid3z{ zfrLbt#VA{GP?hyK2ESV@>|pkb7gHK^#FS#7Zi`a|w}{ie-y#$3rE98Q3-T?)4mRb# zZSiVG#QHtxQ(;#Zbiqg*CNv=|Ow1QYsw_`XD;b-FNbzJNl(ACUcHAMFPO*#SVxrkb znc#QKNTv!sH$=sNhh_}=L1daAF9NjKz@kr1^Ik?nV;4<&R!3HYcXTJ!kD3#QJuccX zJ6q%(A^MY4NP7_r9yHKkl`&DKD@EVLR6~a%S+J$3O9T(24=>D)d3^j`NCD`gnKun+ zhOQhO#=!ltpQjG6owyxyIyR3_iB L$Doiz`E-yV5n58g#*TsskcKu@ zPxL^bU|<0MAj;UPOZ-ZGLkRHJ-+lpcj!UkTtL;{HAd&>R@o0HDs%T&W2@bpyz5c`A z+SA |Dw? z`Tevo1=0}L0No;L@$@0Cx=7SN`tK=FuX^r}9KF}E=)(4vRQSf-supScG8vJ|{W`jv zUq-^fX*PSnO1`4z=H_;2hqi 3rPFNL$D>wSCb3Q_!K?w?M(DLksfe#Pz_ z0t*XmYP+7PT&&%!bKUF&@Z38<9H#oh++1@Dh5N9&qi2(c|4xIg>(cC!@s!cBc4(mU z5^fT)sX4LQ4T_po)G+7Q$>iT#<}}OvMRxH$HPoW^aKYH`@j$&D+4DHVm|V1ZSf;8* zZUA@Y*I7vxU+#B3OL&dN31D~LVxu3xg^f$ML5MU46Y3 X$goFs4bP z_!{AcHrnBw{Ifu*RAvZctf yy>@t4?ysEczA-Z zi+#-kAo2@Ug19qx`T1&@OEV4E*^VyD-GRa;`*Z!KVy~A|re4!&u&}{Eyn+|aTI!nD z?65dAnRKyMytk|C??`fl*Q1R2!>a4sHNKwl!ObJo6_fF(O#EdJ$Uyll21E#H>YqTN zV?g2&Fc~FSa{(M~vARposqXKUl@Sz8e@kDI5;S)OjDv4f^~{2~pVt9-CfJ>Or1p%% z?Co)LkFYdxpwaT|X^`PnBxhoGijK!~Utxm`8utPl0S3Ek;Gv}kEwkfY1X}xFhL^et ztj+Q#>1ZpsSi}|{!$wH&@>dZ<;YAV{M!6Jofu*0HVtROgQiVeb<4TJGph(jtpca4n zrg~hOtYTw%Y0ZeEST@^5wUSW$GuB=|-TCJ3MzAGKv22tL4HjXnX!--A`9}bTOoRj| z+yak}kH*KC1`7X#S#_7?^M~H#$MyPdeoe0PJx<{Bor%xd2(C8O^_|Ki{X6RP_F*i~ z3x(o&o8c9juPo-h+Ws*7N8$0}62|woijhS+Sk?N iE*|7B26$5-jHtZ11L~7>!tax^Yim-CIR-+B#^(;UDmmJd>I@5 zU!WogXIi1DOQeG7D1E|cpPyexdoF2cToA-ek3Ufo3L1&wRh_U+(`JHS3 xB$r#eD(vnp^%I)JD&YVVq_>Sq{HwBsJUS3qMa|V|R=d zS+dPI?e@wM%80k{im+iKB`0sxb%BZ$<3oRnvG_Q_%V5Hee=TT~rd&N*#9&LImxKTk zz8v-m6IWH5P^P}3L4*wL2e&=aNRq}?$s)}Xj!4{v_ybw8w^W#fzkxp^(YHbgYZwYm zcm0znJ=2_^l%Q4T0^@p1=bl%u0N4M9s}bH?t_3=b9bARpHim9r`UwjeLcVG8i@_f+ zx-zn}haTkduU{6ibzdI=VHFcz=sN~>d2h*yYhH(cHlF*lqINindtPsPb8^x^xH@cK zU!=`^mgg%f$VA!}$)~dNt}JfTfaNiSuwZ7 zQ|o2pGDd4lJgR XZOr#L*c^e56MZBZu;{2+JIVfcLr6)c+ z+MF^$PC?$IqA086jO3m8plggfoJKgu89@i5Kp3A>+sE^bX-a1k-}P!*+6W*;YNW;4 z6(|$ n}1ujV8W%i0qB1i%`7e1i=8ZQmXW-p=xTHvmlhr}|--*R$s4 zt1Tq3Oxptx3On@&Vt%|Z;kBJ7yvc|5{2%dz{nIT4eOTgw_xhH>0&`$j0~yLAb@az* zQ(XdbzcJxXrS*XI5LZn z@)a8;88r5M5>Hkt!`GSRRk*ZBOmd5RM|tsNVUlivbLl6PjCLQC{sR-^+R#Tgg?M(Z zc$$l@av&ktG|}i#YgRn-xA;^OWL-}ycp0CNEy~XKd2a1(gmm)_f+~FL)d%>xte*0h z)l}?>x3&`!?fBkIJ^Qa;)9ePE(%sG|zuMaw5Wr0uzYU=bDt?|!`ZnOjpqKIcN(zLt zCqUq#m#M5*X#RH~JqoznB1eM(np7w>wZOQ}O%ibP%LmHa*=3YEh}DX>QlZuxZAG#` zj%YmZFOqwDdSDSTW=I@9Uz8ww*07P@+V6E}M+f(R)SB(OniTdmofSbZ{YV0F16Qw! zweyaXZk-<{{MMm$Z<8RdFZr8LKoCp$upBfx+gXb_NX*NNOa62Ao^Hw}B?cD`DK;MD z(V!4wA(X7p>VuJuhWb#wc+Sj@$(&_vAaIiQ%ZYw8rF5u0B%L^6ca(3`bu?m}SDHR7 zEloy};8#`3G&;FdR|UxhL#x6kU;WkVQA?}f8|W|85yDp@O-^(R%D>eX*%zOj`zfpw zomSIphyjO+9^izN#pc^12*3f7bO5?@_x<15vwN@3z4XMpTc3gMi+oXG_Kw3?AZx{U z$Zt~U_!$VPn+|kndurQD?*wwo4)R)&&prT|v~<2At(OBr>3>NJvNxai34sW6aX0z> z=$qrIz}sbphUIu+F=lVopKX9wq7z7cs$IjrHU)w_1ebw3$)Earh2I~vMe~sTUnnFe z9TpT86tcs6t7?Qty*^UNBN?Wgz=cQa>An 17~p2EVK$S0 4b59;a%15wIb6yKX~fbQ;Bm;V(&=b>h)G4Qk%p%6|}M llfnYAIvi!ia(KP18QcZwV%kn|nPgY&@ zhS7 wq$Du$}%~{*dEFd_8F@As+2+d?)0ukyS%MJ4p5y4(h zZfnqqNYqu!*~CwLE?v8^%ry}a%j@ffj0TxVMxUex97`&9bMV1BM?iRR#MfH0P_f^l zX;TUGLKu1`-Y@@B3NutPk=T!bl;jAzOjMgsy$VLFoS8j9NSeOW$GKsH;@w2pT+Hm! z{lIs`clUk$k)2~eYQ12NDwsM7_dip1vL+xK3I4X(WnIuMd)@!Q4$Asxo823X-U^mv zepX0j6TbzOIM-~u^&hi7 cZR@Y`Onet-L~#N_ 9F$wSq1A z^8yQ-?o6*~kJLEob#$>!n{HFtA%;Ubt^FMh9Ubwxq|oaR qhrud zg^uYKD7i?(W5-uRJD0TN(y6ZBIFm&Y11aw(bp3pW?Pjje97n?|(Ct|LcJg*+XILt` zg%MT-9aU!sN@L$1dP6b6;KIIjl`+7x#0(mBEpcq*Zm{Jq4J?C|@;|eF!K|<)~Bk zVZBhVX5;)XIBM2>cf9|L1Mn=7C1n`TPfv#r=`Hxti;`0LVq-8v0H;Zn7!yRjLT|F0 zN@9@-TVG#Q<+M(0S7p?CmJ-Kq&=MpYye=X;da~Nt+S@ChrI1ZuJ~A?|k-C`@KHd$A z?esZSqQl+W+q0_@hAr}Q;kTA=cfe-Ip$j7!`=F;si4kLAG7H+gp%+g*UE+8K5}MTL z=@SDHCif|QxlDszE&%FmP81)svHU(Tl+O%$eRd4%E|)jg2A_W@q3TLh@bquEIEr>8 zTG;mgJk|xOgN3d4y=&p)<3}#aj4zXhDX=)~8hPx3=C7Xv?2ZG0A^Pex#XYV;jU@#( zQz#9)A86@6+ElZ@v}wPZD#BXiquo$2C#g}NUP^>*3Wi~i%VzDDaK@1@oD2!z?DFj_ zX0hsz9UQ2+u4tT8L1~-qnA8QK{^Ow3-5i&WtBdWIr`uDHVPe~f?8X@gUUzU!O$}?v zogvwpeT{zoem`QU(s}aszDD{U4gZdtd?;Y;1k$JbpvzACfVFXa@h5O2HuYKN1p?6V zy7l1Qi~@j^Jc5OKyv=)=*6#mq17B_^$>)s$6Xm^Un>$;T&iA3}Ki^S-^&~iAL-^pl z|H`>uetk=QV(4oI2 2;7`s1NZmk|C_Qcp8M@=qy#=9OqkCZ z&tUZc8=<4~X*H46^(P8at^)@-?R!-$LKc&v)hc+-Z(&5rVmFP7!j_W_PP1Iz(sxMj zj*}eF+QjO}vf%r>cMdhY{px Q#hpm|zPoqgZp`37$z8C%w 5f`Qvl{tv8Zr@CUZ`z-k!&`AxLhsgF@nypd z%C&J!v7O*H9_r3g=$I`m^wC_xK2rBW(*SQ^aBKHV+v0IIbd2;+&C`f!S!Ni<=Mrf1 zc5}WazToybKKv!@)d*U=zyW+<`KPO`1MZ&)J@&H>{-x*=B^<~M$58zKz-VkFjA;tx zU0i# AK?kF*`ar=_4?Cz4kOf*n@z$eX$MeMh2wE(_)HVQ-UwlvbI2x zkc->`c(9w8gvC|>LY(NE$b(zpdWYw>KUW#9(0ha1KIdLxkFip+)G0Afn?OgSz(58W z?XUx>{yyLyRDXKf$|8M-5Z+ D z4a38+*GjUaISA%{3RRD4BuP;fDbgVNIY^N{2Oa($2%FHaRvsf};ERB d9 zhqy{MfxyB=+7=&-O`yGe_!XP^(aao(HSYnU5*}9=S+JC?3qssCrzk?!^Y~#H` N7<1Y>tLYQT) p{mZyaz-&~r|2ScwF9XsDx!Z}`H5d61Brb*PE*pPw)m9 `@5wJvZMs6Y+2jJHM?6T5#I?v}ig8)`%1;OrbJd Be_ zv|r$_9EfMN)4XhStjAH=d!7eS!Izo#L?!&s##D5a1NFOcAq^np4+x2%+08Rr?cP9`axVyUq9o)h|a0%`bG(aFoaG3;mf_rcX?*0zn z@78 `rJPyYTMCSWs=clF &^s M z?UaVM$@M>uxJ1fl2Q?3VhpEN|CSDhEay|h=(UdQ0)fh7!Z6jYPr^84hRr`5xWVH zo8#+}_!<0CBk{Q5!};+~D2a9)bH$<|YMl>sg%_db)|<)#Dvo0~#DZK3c@^aMhlA zRzR*yXH(=cjjk|6rw|YqV%YHQ$2@ ^2E&%}4T z1ss475C0_^aM~2e;2F+{PIf_ffN8oQEo7ijj!Z`y|L(_~IY4>+c`R~y 8suQspGcE2n4rhgrRHu#n&82VdJRi%x-UOqarBceSrA~c zX)5e8_!Z5aaV@@^XO&bSVd>YbqauhFCX%7~%b1%A{!NgDrlwkBT&-5VH&t;isNq-B zruTaUWL{}dr?-Op-gp@A?RFCM_JR^XODGY;MLhsD76%y`>fOel9IA}2TvTglZ*S!{ z&^A`rBxPcWq){wVo`s-{ChvgB#(k|8*e -FVw^&QL{3ON0AdVZ8U2Jf3~V$19sHfUiNu4AZDV%ycU9qR~_uPUA51YKmm+&2e5 zh=0mfH#H{K1>ioo A#H5dLRm;r}nOt}*BVVW15 z-utb2Z50QUjEA;b#fdhFMgV~YZ&iKV=KJ8k4RoBg#0P_@yl!MDd&*J!t5|6 zc2o3YY!M}NCil}$yA}7$oP=2hkR@kjXJJvY<*r29bb4DwKW!h(h%k8g3?B&!*J5-_ zT&T}MNz%nrI3e2dkR&Z?vixDd@3@47P7E~BT5>IMEBZMb?8^c%I!cZj!RKxYfEJ4E z#V&M4o(inB*Xxg`SnGN*Gc?pSb YRu_Aw$-B&Zjf;2J3c1qA#8sT!Tsk7jd^=UDC7NS6hA zqoXaBZ-7QoB|bolQud)}%xDEc;45cyvxM*5=%Fr0m4~hJ`px(WBw{0v7_yP+Li~2B zMNN91ip`ugFV_k+=60zzfR5zs>9UaRdrx4bpL{AO&N;h%&GR6KNubL`Pn>OY000U- zg}-SVk{3E&UH6}KUM)Ww@O%U@Bul^sJ#AgH2(bB-?cg!Vt61Chua3 MlXBJr)vdm1#9sS*f394p5j=gQQMY+m$nvPxD6tE9a9y-UR(- z^&!>JrN#Pb;c$1 ~%|_SVnz`n7B=scO0V5Rpmy~7iD5(4lfa=Hj ZSnKy>&>5w9loC75-;@H&U+(EOCDpQ<7IQS<-4g#=>} sHLnW16973+1#;eys-kE|G23hHg2R(A;o&z(*;q{U} zP&y_vm>Vvs&*R~tMjPnsV`ye&69Pl%ds)KvzXvk%SHG>PtQ@0^^jQlOY35hg(E(=q z8t%z2E+w>Ss(vBEj0d`~C+|3uDk~QsKQuc(OiR^NR1BYZo~-&1vg#?99d438e#D<; zh2|1&X z>Gl}nO@?I7j($6$V`H%vVp^F{9zHx%45M;``=t~0aEfiVS<2>CVoE24M-~qV+ki{( z#4=|zDwDLU8*IwciZhxl=3BSvG>Cz2^>G;;%sJSob4U#-(o@B(CY)>D+Vk}bekV0- z4z_2=?DAxSOJA5CE-3lCiK)cz_)qIA{{7_n`+If~KPGauq8~*lDX=lmud;!$@@>vb z*{3?8h-Q9XUToE7Y(?M0w9^!8D>mF@gI%xA6su?>BUjQMql+d&Ol04^TLPGI__;!W zQu+*u{iw1-rRqs$MwBN3L|szKkt}QTADYuy^- $>7Z^<)WxrFmIc_vf5((8zyA45 cU^Mog5jw^t2niSW$@%Gp+t{jvc7(n`z z{}@%RgoqO~ogZZHx@Lx>BbqGoM=NO#@$J1P0aKr>&2cS=o@_?&4c`Cl2Ey_1&T|0w zOS+}B>{PRp!5cQrr?w-g;EAY?qpjj$rwx}Y <^$K7hHrYFavOKg6}Ikq~LtabYQW&Z0Iqfix`FImPg{ zxg}K|85N5nqh$`}v}2$L5@P+X=Tv@)I%Ra?dcX7lReW_}Mdp;%dEvV|zT20EaGnIQ zJC4Vaj{VqyYd!l2#ei-a+&F{r|M&nF1OXej8fm=(^#7WV^Ise^B#_;=jbG3Z!?g>D z62v=FnwZ&Y20EkL*@gd;*0sESmDY9I8qubEODJ*f>G@BIqOmrT!r%W77un5;_A=nj z->b#2B($s!7ygVs0 zvhn1^WFJ9gHE**VA?CVT@>rCDr-!EEbTUSeb|P;3?Ag;~EI4Y}={=0%XER1Uowt5Z z1PljF@K`AUpKN8yAz=2XF#DudY&{)yUWFFx1YigWGs}>pW985=O%TTdyi>n7S#UQc zQ_MM>Yewm4;+nYm;K@_Vnz>Mgk>Q`q@ =Fs-Q`3~4& Zbp zD;}LW ?6$=SGW z85q4CN_7M{GJ8OhfpIm+e;9~kmWgry@TpiW3r8}MMb?#8jTJUt4agB1!y+G*W*;+} zSc>1JBs#cCtS;=&)=8e7%YF5L%{jf>gxSX+huMk@{t!z*QNEwN_V!Wed^GXt+02}H zi-`|BItN(j7!iB#QH||-Ohsl6Nfb}LS&Ix1nfm#YaQ3#42qB4Lm$axvjzU67D)=oa z5b;d`EkDd@9~h=H^=Qadt14o%2ALDr-ivZ1uL=s~kJBcfBnws+B}QXHLl{u@Am)7< z6;=i+rTF0P=rhl^c|*TaGLvNAW~$>>00LChdKYl-#0}_F@_iNYHr~UKenbyMLp#(~ zDyn?XEO!n$K4x;+NHaVh3jS@0MuoX!I6UPhY5CFF*;w@W`I0jC1N>0VdG^}l-~BSm z;=tu)@aEASA@`6K<~cw^L0&E-UbaJ#pS>Qgt09F@e6Hpwbe&K$-pp}(TZ7I8KGD@c zpKOsvJU2|}@TZuC)6;H%-m2}mE OBZkmyodXlm{Kgj1Xy zT~CeZJ3Ob9Tug?U!x3pDJ072 z&UO=XBg$BsUK#hm0eOT`4ddkKCTdK-LT(rRnInDIb8YokF`y$#qtE8ILn^}-pPhn? z=hw4E7WX)p#~Qscb+x~o;v#Mq`FsvprOf+_gsz10q2p5>*n4KG^|cw Mn2ws^N6CwDP=Wg@C-xXsT||7Eo+1xSMk!Q;7Y!z2yK~FM_s(bAkIG zj=M*OJklPnjNgdDTTNQpI@))og)A4VumVjbQ(FWvLGCj7l;V>wAace>HHMeY;ztwr zL$9gE_lOK#MI^6dL_B<4Ld;M!sfecZfA^e^i(k@{aCM&D4V$4EcL2@?K)ZW9VxBPk z?m&}smKAkBpM$BVW< +Yu)d*W6(p!(>O@j8+cj{gc%Wl>*>qJm$? zD$EGC; |d+2`3D{Fh>c|7n1gmDE0AZ!2T?<|@7fM-LOJHaRUE|ChxpFb$H z6O4?FABI>;)`q3g36phlI67}5i(6dfD23cZ00>al?f4(4e0iJ}6U*J+*7jNPN)WLG z0VXIMzInVs-0vHZHdX&}{!U&U@5Mj(t@DtV%JlJ{Loy&;`t==!?|OHr*r1gK6cPjE z>V5$sJDqB;s9)2>22e=*y&RYP4y)m&!-jYSurub_NOaAK7w)3yT 8;%NI`%@KzaL*s-6V}7)+y+ z)I08ATG3cNqkD8B=4g6!e$f%^oIg98wy1NMVsO<`fP#;RuO*2s73KsB2V2kJ({=N2 z_eIPnK9a~?l|ULKNZCI;;?s08B9tj&dz^D3sThWW`OJ+Ahw%5ata6%_r5a>|cxSJ5 zY$Db?BfJn0lL@x}x7PIl#S+LD1x8wk;wz;s4}BC}G+yHAi_HXI&0Hi=Is=UjmQqs5 zzuHAF%7QLsjLL#joaelgepjh6q8w18!r`y7gfz)S#)n8D$d|{FnmXH+lZrp0@f?c^ zA8lzpg@n{mbWUNC%}37Wvc3I~qoL_hpZi^A@fupGy(S+x!}5fSLR8FVM81dSCU$II zqG7#la!aGy$-#p%I9}G$614jvLndG%Mi &o3$B&)^k2A &eB4B3wN8WNqh;@L}7b(0rdB^ct`C{`7f@UNG zEfxMI5gsS0AQLGm6B~Iy7jFX4A79@VUi;;xQMS=gvxyDwI#E?MW#d3Vpt(Cetq|AK zz#zVelWu=NVO;sb_}5IiKoilprJcZbqLffR`CYHU(v#0v-7JC97*8Ph?(AainFl*| zJj)0T CNC1__-+vb<=viHf4^~9IZlW{Bv?%uYMn}Xe>>iu_Qhxz71_w6e0@f%9s z&F(kSnloTgOrCiU$6t_l3@J)jobOW22egyBFo=HGd_fYIFg4=jq5dZ69=ON|i{zoN zEvNqm->veaw4%E?F%A(?)reZ$*%I|_92>a)TX|)YJRTj<_XKj0=i{~$mnECL7SE*b z$C7TP<+L`-m-8G;dVh~CYS_ bH3Q&3h`F zh)NnF`*k-zH`8`>@8GWfa9Xq)$$z;{@Y^$2LD{pF3_(g;dnVw1pIT05)$hVsWAZ)P zj}o_Aj^Ia4%@zGfsNnAV$OUE@(qUB2k%O!{0&`Yuk*NTCOyqaCevCwR4lYIZS(}2~ zcQ^%kWOek48u*qU7v`m >^X4xii}K#(9ZM N1*5Ji2 zGHY^d55iF)Vi~LhQ(;HR(@rYT;bFd`cKXKkI&A)zXVwG=-mT `R=7F{(B_O_Clf^{-8?pF&iQoJ62VnMpfVq~8!I(2a|OxM>Iz@(1# 81v1BorY)CC=-it?sy<}j&&t|q&?|^{V9j+r$xcc{RGLWL> zU}S{bxV!miIHAERNc1tFllQcMev|f{IDBK7N*fa0#mDv-H@|#7IH-(`Rn`);bHsOPMEN4cR sX z;o=~@rhkVYY}1uzF-dih^t%g}P}wPs?C3(>{T@>x`;pylyNb^+F0rBYXiz3lv^0&> zG+lpkj=5 UuF)S!F%Y>55I5f)EQxiLQN^g0eyjELU%i};Qjhrx>z&c8 1u7S44_&>=?`m+A5BMOl4?V7& zv~OcK{`aEM>2MPu(UTEFQu@y;qnCu?WWR56S`ilJtWRWe@GH6{B6Qv&>5@b!?yibY zR9b^JkUJ)VNin_%+gv$6C3_`S^#`_=hPyq&vkFBB#t%oDJOz{@ytqEn?5x8B((B`; zE^}y~syHxBAQbo^Vx>pqC^az&@?yiO(bbgXT}P|7yVU`3NYLgc@;nhsgnCyq=p{?s z?gnzu6%q-TMrODm dN)4TTz&}w>6-Flg@|IM%# 30KF@93zV?oVU`f&fUS24(CY$vLbvj-#Kb}1WBCY~8LIuWYdvsIBxa_-i9913 zT8^;S>|jcth|G$y *t&mncq4p{T B5Zn`1wh`FXbnjg4(^9-`3jNhw#*+ z^BSNZX1(*?g>Sf|cw^Bk(3HQLo6Ruc6lvY2Tccz#vogE4tzhQe_=*mW{_gXq JJ zp3S(a 9z+Rb8xOUn2CpnGz^!) z D!r?(uxsF=-hBAg16}PLkv077UC%P9*2W zOA=->zd`0@hc}Gj27f->U4+I*e8k?a$1%*3VW5)PS6F>DVlcEZUUXqh@5AKdYP8Uv zPRB%EWFw#qx9aK@_hoI8@)N{pp_90m|Ax@`Muf~V!dcfRjv6fcb$(7Lz^yeF5WWB0 z0t(?0YAc`;@cn}Od#Vqms-pf|9dB-K(uX%B?=)HEPWyIjFiKlYYUjWzOM2c^DJPD& zAgd`}a)_JMWh?pJLgr`2*j{SnehuCu$Q|#fJWZV>6@m -4zBLtOA1N&3jECC>414**FbFwUFv2^!R8U8i-`_xT4 zQM6{|i+3pP42JdByOjPkIt1dpS!E{W0qHY6<%4m@n1T)M&9M#*HH|G-r{l*0Hd2aq z|IRBM0p6Axu4Q9dq$3KKhkC3+_GzCtfA;QW+TuvWisx$UM@`??nsShCZydV|nT=V8 z2p`C*=n`(SOT@19^f}aXt;NY%$}_eo6w(&s_pLkr6aT>ea8PM8;@)HV3uaf@syk}z zt?`t6S)E{Y&nH5NZ^l_~hSNYH$|wNVzA+s3LF_EE-?<;=)Y zjXK^5hbcWR#rO)kRP0}B=NV2?IObFl3*WLH8z+do6f@v2L`Ca7Kq|x# zp$*FNH_1{noO+}&Jbm|&x=75oOM`NtgyH=VtE@^Pvc881wRA2ofj)<;iKI%v{+)87 zjE@aObb-nAU17%)PN}dk#YDqo9MPkCdqZzlZq$~33tFwfRkKAE*;TXY`Guv3Hxq(X zhk)|x8>w)Jw8cQZ?fBS-{GY{><>To{`^cDN?dIVvf00rt1iz0POnhIxhEV++OtICw zFYY%dU02N91b-oF#KUVc;0=1*x>@zFS}~An4#AXC{i{ZW*JeE|PZ!z$SX0aQ)xbkx z25aRjvLj}}#W#HqYIH$5U!W>NJ*K+{KN3M<_0 <)6=~Z*l70^03t|fD?NNz za=0wXzg(7Y^@nd}4;B)sp_2#1f_R8I!4gyxNLK2i&DEqX##I-EHwAYJn5j)o{Gr&! zA15#d+b{#JGCJu3yXrxS3k%+m!KDq))}+927g)_j-h7|QZ&g#dj|*8TqkLt^yZ3>j zh!@i-qvlC}<>Se#lfNiW -64 zOiS7M>UlnIi~MW0&pg7HRfS&mPRpY^HI)y1i}KmbB23F`r{TR?IC5%t?wfd7^z#e7 zv{br^($c>4Jayf*^_{(*mP~QvT4saoPF2xL!GU}N&8w^a>|S-NfX(wBV4AAe+|%K# zn5zWL70v0>*`aAZPkMZh88+undK|HQhlb*Q%lf6G*a!n&;~9XMUN=n`=Blx 2`8=m{L#yr%ME|0OQ zY;if#p>G^!V9^I4K&x>CHUCgYRCSqV!0`3m>}>6u_*Vh#)5d$*O1g5^%@_Gq$_^F| zbX+n&d|L39B1Lnb&I|r~t;+1!6kzulg^^G(pygtSL1?0BqVccmDbi6SS5flaUHgYW zGTDXcGVEbBD(jm@p}DT z2e8^q&4&l 3Hk$%|Tm`*f`f!nd zy409IeM%m~-|vQb$?PKCBDh1t-Yz`u92-%9$Y>2xdK%~PuIwSld1)rR)lXT1I3 +Ffo#gd#dU&o#ddpj?4v2VtQ5h!L;JI)TqF(?YsO1w zEzT1p5#3n9QoakFzAX7L648~FE(fQzgKu@2*C}M)HDIs}nsB@Fl7OH|2+OC~SC_6j zI&%$9;C{7=m|&m1s;%`&zX3$+F(3vHw$^FWFgHyPbd|)$;M;vc^qRlmS3y!;YAukI z`ZB3t2RtitP2F)c*~?>c>u{ADX)UZ{Xp<=;x~-}C3h6Z=qJkHbzgvt6&SeU$5HvsV zX|79GE$7g^KCaQLSpLgieZ$U8@O AJT*e;94|<9mu3vZabX8{Uc6*X%tn}XMPEYLZkY_PQO)8|#9c|fZ)51;u zlule|X>m9&=-Qc0tUNRU>M=h9wY9Oav5Sia+S >$2 zE3Bj4%B>ZJc{6;WC974a5u0!&0@__hM1pPuQE#?g+b5y9-^I*^zUVJCn;KOG5RH6A z8DYcUUUu9kQ~=~uLN; `kQP+7j5!*|>Qma=8;d>8X#$Hg1v;{r zPg3UEX|x+Ch4vp9K)aY3CjAy4< 3xra-TULPZK>)T{GP3m(4YJbljaI|T2wELo_$@+Tyc9lb*a8ZU2hqaD&tf8 zwMaGEtz0o@!6^i 2EW^RuTZ%^K zFxpXyeIx{#e4D@DY$}N5&msS?NTj HGs@f1Z)qIS{epmhw7pmqilZx*ZRknyUemC*;J*EEs-juzB zL%+DfYdRf>0t(xkf1tG@+S>)IhhSze|1i8vF31NBM6>1zdxvaJ)&J;#M&jc{KR1`X zJU=5-T7h#)aJn1 6m3SB3#D!(JyTN`AL}~Io*Cp-(;SdM!awAPsKbdPH{pAMg zTa%Y4+J54qh2IT@y=cIQzV*o+2Is~0nBBvJC69&EXF~!mM%SX`Wk>}&9UvUs|9zUp z(?|KZ?YA`u2{4rTz8Blb+_x}!!~6K^pwhXXU?%4tOYYY{;hu&7SK@p^ZvXk;E1{@s zCs_1iuQHiN0t{Dpi+*?`+KkzS5!vGj^Q>f#PLaYz1S-uBLAC;}yf3l--#6@ct^4x4 zUXAiJ