From 1dec4fb97c6921203aafdd73cfc2c2c45bb13028 Mon Sep 17 00:00:00 2001 From: Filip Rojek Date: Wed, 21 Dec 2022 14:54:20 +0100 Subject: [PATCH] fuzzymatch patch applyed --- config.def.h | 1 + config.h | 1 + config.mk | 2 +- dmenu | Bin 48320 -> 47992 bytes dmenu.c | 89 ++++++++++++++ dmenu.o | Bin 31832 -> 34088 bytes drw.o | Bin 11168 -> 11120 bytes patches/dmenu-fuzzyhighlight-4.9.diff | 152 ++++++++++++++++++++++++ patches/dmenu-fuzzymatch-4.9.diff | 163 ++++++++++++++++++++++++++ stest | Bin 22104 -> 21368 bytes stest.o | Bin 5296 -> 5232 bytes util.o | Bin 2272 -> 2216 bytes 12 files changed, 407 insertions(+), 1 deletion(-) create mode 100644 patches/dmenu-fuzzyhighlight-4.9.diff create mode 100644 patches/dmenu-fuzzymatch-4.9.diff diff --git a/config.def.h b/config.def.h index 1edb647..51612b9 100644 --- a/config.def.h +++ b/config.def.h @@ -2,6 +2,7 @@ /* Default settings; can be overriden by command line. */ static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ +static int fuzzy = 1; /* -F option; if 0, dmenu doesn't use fuzzy matching */ /* -fn option overrides fonts[0]; default X11 font or font set */ static const char *fonts[] = { "monospace:size=10" diff --git a/config.h b/config.h index 1edb647..51612b9 100644 --- a/config.h +++ b/config.h @@ -2,6 +2,7 @@ /* Default settings; can be overriden by command line. */ static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ +static int fuzzy = 1; /* -F option; if 0, dmenu doesn't use fuzzy matching */ /* -fn option overrides fonts[0]; default X11 font or font set */ static const char *fonts[] = { "monospace:size=10" diff --git a/config.mk b/config.mk index 566348b..fd6ff05 100644 --- a/config.mk +++ b/config.mk @@ -21,7 +21,7 @@ FREETYPEINC = /usr/include/freetype2 # includes and libs INCS = -I$(X11INC) -I$(FREETYPEINC) -LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) +LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) -lm # flags CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS) diff --git a/dmenu b/dmenu index f96d69c8ef6fb3113bd24192aa2ceb888ba925ba..a3067f18ed5db715e7f5111c8aa0e225e11d7260 100755 GIT binary patch literal 47992 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%0Dh6Ttifjr`rhRns{-x7rwZ6Cw4JcXn*aT*Mb?5o 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 #include +#include #include #include #include @@ -32,6 +33,7 @@ struct item { char *text; struct item *left, *right; int out; + double distance; }; static char text[BUFSIZ] = ""; @@ -227,9 +229,94 @@ grabkeyboard(void) die("cannot grab keyboard"); } +int +compare_distance(const void *a, const void *b) +{ + struct item *da = *(struct item **) a; + struct item *db = *(struct item **) b; + + if (!db) + return 1; + if (!da) + return -1; + + return da->distance == db->distance ? 0 : da->distance < db->distance ? -1 : 1; +} + +void +fuzzymatch(void) +{ + /* bang - we have so much memory */ + struct item *it; + struct item **fuzzymatches = NULL; + char c; + int number_of_matches = 0, i, pidx, sidx, eidx; + int text_len = strlen(text), itext_len; + + matches = matchend = NULL; + + /* walk through all items */ + for (it = items; it && it->text; it++) { + if (text_len) { + itext_len = strlen(it->text); + pidx = 0; /* pointer */ + sidx = eidx = -1; /* start of match, end of match */ + /* walk through item text */ + for (i = 0; i < itext_len && (c = it->text[i]); i++) { + /* fuzzy match pattern */ + if (!fstrncmp(&text[pidx], &c, 1)) { + if(sidx == -1) + sidx = i; + pidx++; + if (pidx == text_len) { + eidx = i; + break; + } + } + } + /* build list of matches */ + if (eidx != -1) { + /* compute distance */ + /* add penalty if match starts late (log(sidx+2)) + * add penalty for long a match without many matching characters */ + it->distance = log(sidx + 2) + (double)(eidx - sidx - text_len); + /* fprintf(stderr, "distance %s %f\n", it->text, it->distance); */ + appenditem(it, &matches, &matchend); + number_of_matches++; + } + } else { + appenditem(it, &matches, &matchend); + } + } + + if (number_of_matches) { + /* initialize array with matches */ + if (!(fuzzymatches = realloc(fuzzymatches, number_of_matches * sizeof(struct item*)))) + die("cannot realloc %u bytes:", number_of_matches * sizeof(struct item*)); + for (i = 0, it = matches; it && i < number_of_matches; i++, it = it->right) { + fuzzymatches[i] = it; + } + /* sort matches according to distance */ + qsort(fuzzymatches, number_of_matches, sizeof(struct item*), compare_distance); + /* rebuild list of matches */ + matches = matchend = NULL; + for (i = 0, it = fuzzymatches[i]; i < number_of_matches && it && \ + it->text; i++, it = fuzzymatches[i]) { + appenditem(it, &matches, &matchend); + } + free(fuzzymatches); + } + curr = sel = matches; + calcoffsets(); +} + static void match(void) { + if (fuzzy) { + fuzzymatch(); + return; + } static char **tokv = NULL; static int tokn = 0; @@ -733,6 +820,8 @@ main(int argc, char *argv[]) topbar = 0; else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */ fast = 1; + else if (!strcmp(argv[i], "-F")) /* grabs keyboard before reading stdin */ + fuzzy = 0; else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ fstrncmp = strncasecmp; fstrstr = cistrstr; diff --git a/dmenu.o b/dmenu.o index 5877f8dae78f2c802e63f5f37c0e617d19191901..bfde664e9e3e8a953b46d39164646eecf75e098e 100644 GIT binary patch literal 34088 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 Wb0n&4>MQ?&)mr4qjHJG>^Zz$j;_5*F literal 31832 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 diff --git a/drw.o b/drw.o index eb68575f225ac4cde53650f37425571e2b44c702..86603d2615d88d54d0893b0af7c6fd736fc45df9 100644 GIT binary patch literal 11120 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 B+Xw&v literal 11168 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 I*W3Sp0a@hAJOBUy diff --git a/patches/dmenu-fuzzyhighlight-4.9.diff b/patches/dmenu-fuzzyhighlight-4.9.diff new file mode 100644 index 0000000..58d5c6f --- /dev/null +++ b/patches/dmenu-fuzzyhighlight-4.9.diff @@ -0,0 +1,152 @@ +Author: Chris Noxz +note: This patch is meant to be used together with fuzzymatch + +diff -upN dmenu-4.9/config.def.h dmenu-4.9-fuzzyhighlight/config.def.h +--- dmenu-4.9/config.def.h 2019-02-02 13:55:02.000000000 +0100 ++++ dmenu-4.9-fuzzyhighlight/config.def.h 2020-04-04 10:26:36.990890854 +0200 +@@ -11,6 +11,8 @@ static const char *colors[SchemeLast][2] + /* fg bg */ + [SchemeNorm] = { "#bbbbbb", "#222222" }, + [SchemeSel] = { "#eeeeee", "#005577" }, ++ [SchemeSelHighlight] = { "#ffc978", "#005577" }, ++ [SchemeNormHighlight] = { "#ffc978", "#222222" }, + [SchemeOut] = { "#000000", "#00ffff" }, + }; + /* -l option; if nonzero, dmenu uses vertical list with given number of lines */ +diff -upN dmenu-4.9/dmenu.1 dmenu-4.9-fuzzyhighlight/dmenu.1 +--- dmenu-4.9/dmenu.1 2019-02-02 13:55:02.000000000 +0100 ++++ dmenu-4.9-fuzzyhighlight/dmenu.1 2020-04-04 10:30:16.430054933 +0200 +@@ -20,6 +20,14 @@ dmenu \- dynamic menu + .IR color ] + .RB [ \-sf + .IR color ] ++.RB [ \-nhb ++.IR color ] ++.RB [ \-nhf ++.IR color ] ++.RB [ \-shb ++.IR color ] ++.RB [ \-shf ++.IR color ] + .RB [ \-w + .IR windowid ] + .P +@@ -75,6 +83,18 @@ defines the selected background color. + .BI \-sf " color" + defines the selected foreground color. + .TP ++.BI \-nhb " color" ++defines the normal highlight background color. ++.TP ++.BI \-nhf " color" ++defines the normal highlight foreground color. ++.TP ++.BI \-shb " color" ++defines the selected highlight background color. ++.TP ++.BI \-shf " color" ++defines the selected highlight foreground color. ++.TP + .B \-v + prints version information to stdout, then exits. + .TP +diff -upN dmenu-4.9/dmenu.c dmenu-4.9-fuzzyhighlight/dmenu.c +--- dmenu-4.9/dmenu.c 2019-02-02 13:55:02.000000000 +0100 ++++ dmenu-4.9-fuzzyhighlight/dmenu.c 2020-04-04 10:27:43.888026309 +0200 +@@ -26,7 +26,9 @@ + #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) + + /* enums */ +-enum { SchemeNorm, SchemeSel, SchemeOut, SchemeLast }; /* color schemes */ ++enum { SchemeNorm, SchemeSel, SchemeNormHighlight, SchemeSelHighlight, ++ SchemeOut, SchemeLast }; /* color schemes */ ++ + + struct item { + char *text; +@@ -113,9 +115,49 @@ cistrstr(const char *s, const char *sub) + return NULL; + } + ++static void ++drawhighlights(struct item *item, int x, int y, int maxw) ++{ ++ int i, indent; ++ char *highlight; ++ char c; ++ ++ if (!(strlen(item->text) && strlen(text))) ++ return; ++ ++ drw_setscheme(drw, scheme[item == sel ++ ? SchemeSelHighlight ++ : SchemeNormHighlight]); ++ for (i = 0, highlight = item->text; *highlight && text[i];) { ++ if (*highlight == text[i]) { ++ /* get indentation */ ++ c = *highlight; ++ *highlight = '\0'; ++ indent = TEXTW(item->text); ++ *highlight = c; ++ ++ /* highlight character */ ++ c = highlight[1]; ++ highlight[1] = '\0'; ++ drw_text( ++ drw, ++ x + indent - (lrpad / 2), ++ y, ++ MIN(maxw - indent, TEXTW(highlight) - lrpad), ++ bh, 0, highlight, 0 ++ ); ++ highlight[1] = c; ++ i++; ++ } ++ highlight++; ++ } ++} ++ ++ + static int + drawitem(struct item *item, int x, int y, int w) + { ++ int r; + if (item == sel) + drw_setscheme(drw, scheme[SchemeSel]); + else if (item->out) +@@ -123,7 +165,9 @@ drawitem(struct item *item, int x, int y + else + drw_setscheme(drw, scheme[SchemeNorm]); + +- return drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0); ++ r = drw_text(drw, x, y, w, bh, lrpad / 2, item->text, 0); ++ drawhighlights(item, x, y, w); ++ return r; + } + + static void +@@ -683,7 +727,8 @@ static void + usage(void) + { + fputs("usage: dmenu [-bfiv] [-l lines] [-p prompt] [-fn font] [-m monitor]\n" +- " [-nb color] [-nf color] [-sb color] [-sf color] [-w windowid]\n", stderr); ++ " [-nb color] [-nf color] [-sb color] [-sf color]\n" ++ " [-nhb color] [-nhf color] [-shb color] [-shf color] [-w windowid]\n", stderr); + exit(1); + } + +@@ -724,6 +769,14 @@ main(int argc, char *argv[]) + colors[SchemeSel][ColBg] = argv[++i]; + else if (!strcmp(argv[i], "-sf")) /* selected foreground color */ + colors[SchemeSel][ColFg] = argv[++i]; ++ else if (!strcmp(argv[i], "-nhb")) /* normal hi background color */ ++ colors[SchemeNormHighlight][ColBg] = argv[++i]; ++ else if (!strcmp(argv[i], "-nhf")) /* normal hi foreground color */ ++ colors[SchemeNormHighlight][ColFg] = argv[++i]; ++ else if (!strcmp(argv[i], "-shb")) /* selected hi background color */ ++ colors[SchemeSelHighlight][ColBg] = argv[++i]; ++ else if (!strcmp(argv[i], "-shf")) /* selected hi foreground color */ ++ colors[SchemeSelHighlight][ColFg] = argv[++i]; + else if (!strcmp(argv[i], "-w")) /* embedding window id */ + embed = argv[++i]; + else diff --git a/patches/dmenu-fuzzymatch-4.9.diff b/patches/dmenu-fuzzymatch-4.9.diff new file mode 100644 index 0000000..9fd206d --- /dev/null +++ b/patches/dmenu-fuzzymatch-4.9.diff @@ -0,0 +1,163 @@ +From 94353eb52055927d9079f3d9e33da1c954abf386 Mon Sep 17 00:00:00 2001 +From: aleks +Date: Wed, 26 Jun 2019 13:25:10 +0200 +Subject: [PATCH] Add support for fuzzy-matching + +--- + config.def.h | 1 + + config.mk | 2 +- + dmenu.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 91 insertions(+), 1 deletion(-) + +diff --git a/config.def.h b/config.def.h +index 1edb647..51612b9 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -2,6 +2,7 @@ + /* Default settings; can be overriden by command line. */ + + static int topbar = 1; /* -b option; if 0, dmenu appears at bottom */ ++static int fuzzy = 1; /* -F option; if 0, dmenu doesn't use fuzzy matching */ + /* -fn option overrides fonts[0]; default X11 font or font set */ + static const char *fonts[] = { + "monospace:size=10" +diff --git a/config.mk b/config.mk +index 0929b4a..d14309a 100644 +--- a/config.mk ++++ b/config.mk +@@ -20,7 +20,7 @@ FREETYPEINC = /usr/include/freetype2 + + # includes and libs + INCS = -I$(X11INC) -I$(FREETYPEINC) +-LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) ++LIBS = -L$(X11LIB) -lX11 $(XINERAMALIBS) $(FREETYPELIBS) -lm + + # flags + CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700 -D_POSIX_C_SOURCE=200809L -DVERSION=\"$(VERSION)\" $(XINERAMAFLAGS) +diff --git a/dmenu.c b/dmenu.c +index 6b8f51b..96ddc98 100644 +--- a/dmenu.c ++++ b/dmenu.c +@@ -1,6 +1,7 @@ + /* See LICENSE file for copyright and license details. */ + #include + #include ++#include + #include + #include + #include +@@ -32,6 +33,7 @@ struct item { + char *text; + struct item *left, *right; + int out; ++ double distance; + }; + + static char text[BUFSIZ] = ""; +@@ -210,9 +212,94 @@ grabkeyboard(void) + die("cannot grab keyboard"); + } + ++int ++compare_distance(const void *a, const void *b) ++{ ++ struct item *da = *(struct item **) a; ++ struct item *db = *(struct item **) b; ++ ++ if (!db) ++ return 1; ++ if (!da) ++ return -1; ++ ++ return da->distance == db->distance ? 0 : da->distance < db->distance ? -1 : 1; ++} ++ ++void ++fuzzymatch(void) ++{ ++ /* bang - we have so much memory */ ++ struct item *it; ++ struct item **fuzzymatches = NULL; ++ char c; ++ int number_of_matches = 0, i, pidx, sidx, eidx; ++ int text_len = strlen(text), itext_len; ++ ++ matches = matchend = NULL; ++ ++ /* walk through all items */ ++ for (it = items; it && it->text; it++) { ++ if (text_len) { ++ itext_len = strlen(it->text); ++ pidx = 0; /* pointer */ ++ sidx = eidx = -1; /* start of match, end of match */ ++ /* walk through item text */ ++ for (i = 0; i < itext_len && (c = it->text[i]); i++) { ++ /* fuzzy match pattern */ ++ if (!fstrncmp(&text[pidx], &c, 1)) { ++ if(sidx == -1) ++ sidx = i; ++ pidx++; ++ if (pidx == text_len) { ++ eidx = i; ++ break; ++ } ++ } ++ } ++ /* build list of matches */ ++ if (eidx != -1) { ++ /* compute distance */ ++ /* add penalty if match starts late (log(sidx+2)) ++ * add penalty for long a match without many matching characters */ ++ it->distance = log(sidx + 2) + (double)(eidx - sidx - text_len); ++ /* fprintf(stderr, "distance %s %f\n", it->text, it->distance); */ ++ appenditem(it, &matches, &matchend); ++ number_of_matches++; ++ } ++ } else { ++ appenditem(it, &matches, &matchend); ++ } ++ } ++ ++ if (number_of_matches) { ++ /* initialize array with matches */ ++ if (!(fuzzymatches = realloc(fuzzymatches, number_of_matches * sizeof(struct item*)))) ++ die("cannot realloc %u bytes:", number_of_matches * sizeof(struct item*)); ++ for (i = 0, it = matches; it && i < number_of_matches; i++, it = it->right) { ++ fuzzymatches[i] = it; ++ } ++ /* sort matches according to distance */ ++ qsort(fuzzymatches, number_of_matches, sizeof(struct item*), compare_distance); ++ /* rebuild list of matches */ ++ matches = matchend = NULL; ++ for (i = 0, it = fuzzymatches[i]; i < number_of_matches && it && \ ++ it->text; i++, it = fuzzymatches[i]) { ++ appenditem(it, &matches, &matchend); ++ } ++ free(fuzzymatches); ++ } ++ curr = sel = matches; ++ calcoffsets(); ++} ++ + static void + match(void) + { ++ if (fuzzy) { ++ fuzzymatch(); ++ return; ++ } + static char **tokv = NULL; + static int tokn = 0; + +@@ -702,6 +789,8 @@ main(int argc, char *argv[]) + topbar = 0; + else if (!strcmp(argv[i], "-f")) /* grabs keyboard before reading stdin */ + fast = 1; ++ else if (!strcmp(argv[i], "-F")) /* grabs keyboard before reading stdin */ ++ fuzzy = 0; + else if (!strcmp(argv[i], "-i")) { /* case-insensitive item matching */ + fstrncmp = strncasecmp; + fstrstr = cistrstr; +-- +2.22.0 + diff --git a/stest b/stest index 642efec4e1477ddf90f11b6b1a9a3e2b985c9262..40e4b4cc87db164b369375c4250d5e5c7a530920 100755 GIT binary patch literal 21368 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 L#3qx1iDmx{6SF{+ diff --git a/stest.o b/stest.o index 2d6d18002ec2d58f00b87e0d62d103a31e6c4615..2f98e41c651acafddcb5d4a3a7bbed0b21eddac4 100644 GIT binary patch literal 5232 zcmbuCeQaA-6~M3UH1V3vFKtQ*>;rFgHcu>%xO^-f>J%sL_Pn_?qGUs~S>o6)AJnmp z{oG_@Q!~Zxa6NYu6xNA9+KGRP5K;w*O?(tj?Y4@s3HJ9iDl`GXOf3_u#+YW#x$hkN z=3(;>N4mcE{O&pD-h1x7?>!&c6T8RlatRifxLdR|rb1-+6B9;dH>yVU z^H_yyM&)DJ_$&VW#?7rsqx{}}qx^5<@xPBi_@q(k8Vo|GQ7#680Kl(m1-#O$RI_?Q zwe^<)ugTb=(7pPY(5=6bYV}nj0so-5BE)VnBShg3?K=F>@j|!caV(gO3vTotT^@JKS%dbdoN4hMD0lC5BkTgDRpAT!3%^$yj$L7G)d5FJ33i{gUpG_pqx%q`u_8Yl;;qdax6u`89ZZTzIE5j`Wx~@-c7XRfT2J@d8%!}}Y zv8p_J;RnK#;jc_qGmZU5^&u}D-ykG;!|@#e5URleE=K}h{OL0)-A38o%8JJ*)wJUK zFz3~gA+2;78pkGF#W%F#+sHl`Dr{L@af?E)v3B0ucy0Z4phlw>Ex&1$J)zp(${m5V zE3WXdNdZ3JeX)2^E1m+A=&m=l()XaDoqM->&$lDh!>88XcP-C^S08hUg0{Dk3V8RH z-YIOB>5DdAs&_YDi>_Vpu6~d27!cYORVfAHQfP2TPg?bLVb z!vZg(9|~>-aN!oN8Zt~Hip!yIv$1eJ@@3&#>2qCwZIAb9FouD|4b*oV)?r^?5UOEf zQM{4Bj=Cehfi=&4zTdk&ce;H8fWkg6tQ@)zlI=dU9rN`)<&OFWj(f&@{%Y5lFZkr9 zuy6Qicf>cc)^oq_lHW7v_Kg4v`+{IH<{JQ)F^u)U1lQFi{?TY><7uvXW3NYMX(PJ^ zRLE5m$~A)q`vxKpwruea<_+!HPUZvHC!n|>{tSg$AcvcX`$>PA>RX7{9Q;<|7byez$yuB-n3GSX;aMQOjBgC zW;(f;6FD=U#5$46<|59H9G`K?uTpn)tVD+~f)3xW6cDKTrG@Hg57m z#Q6h+?K8yRAbXr=KNOzldyY7HvcHCEj2c-X$YG)o^ci8`k^glT``_~;@eqZ3)a6ur>_#f}U zZzaxoI7@ML2me0t5had#4)1o@*U0`p#UB6o@V?9{e7nN=4Tar!ZVytN2((dGsA&Wwp0f&Bp(ip+ zOJ*9p(izLt;p=rszIjNWPZ#uT4qhuc>tS*?7pCWO@g}LgqtIxVzbqyUBuMK( z6~}PqZ$B`MISfS=lOBxt?o@@x=NkX3a9g!o;RmY<+t{Xn^+0iM7yCQs#q;N|MT+V4 zKSSf6VMD5&{`ei+E`KNSp$}r%l{|lVkJ+EkAFkawHo8pEh7Qm^;x`%=r$7FGa-Kav eVgWlqerZ?DUuUlIo!HL*63zd3)6;G^{r>~UK44z} literal 5296 zcmbW5Z;Tto6~M>#CFkbS-3v+6qbbFKJ$ezGYhPP*38cEcJ11-EBWd#oRk`5X*z3Df zeD>j8=MGAhLuUs$jzdJDt)ObkpAQI-prUQ~fPzI5l2%1ZY1MwARX(7CWl&NHB^3qS z_r^2lxrz5nU$mZizj^cK&CHwKxg3tfws}1s!o@?rM_L-Egk0%v)rV+xh^Ry%JB{*I zRE^4au?Sa<@>j6(A^yDS69m0MN1GXnxwQ zSamwX)!KQ$i_|&Ecj^mwYeA>Rbf>#Kss(z<6+*U>2}1H0+cgBB;Z(bZA!zs&ciqJ; zHr3aLuNtMxJcbWybB#tr7-)eIwU_|LdvskL)i!phg&i%HUvd|zhmFc_wO3H@_cXCXkv=TUg8T8iHUjxPKM7t_SJ0 zztw9K{k~X*W}d!R-=pu|Q^_`V8I}9}kiC7d#LKd`2LPu1O5^;f=Eume0ua}sxt(R7 zQLL(k&jBqA_N&EDpmKDlr|_;?s3H5bKfh*S-b?ab#^M=&fsB`ARaWzchOq3 zbPi(}=iz~p->{_6HFaV<`R=S=h*c)m8s#p0>Cm^;Sn1Mf0$Ua3Qgf#53RR*|56Pe*)GN^XcoX?VDKYN_QU=A;w~O z?uM1_W8P7v=ZNnf<)YU&=v8{aY*_Kb%%FLk+1|%&AM-|)p5wk@B~a-YR{D;u(3Q}U zm7~hwV(0gjO95ZMR~ZDPD}7)xtn`3;>WjH)Tj2J0kbgJYHTv3qSqSmLzjopSPwm7< zXvQvU`Vwef!9QIiV6cyrbDgdeFkEL3_@BUlL8h7oxe-d_0j8f|Pdzo&Aqoxaq<(E(1F8o;+{-O(i#f6`8 z;cvR|3oe}4j%7Q+1fd^Ff(l8c%}J86=14Z3Br~Rym?FX0NC4d7N`hUnlX$n7)aX=>Kbi{~t*94jb=)#DB{4w8Z&%aC@P`P{m7Xt*5{om-q`xxi*dX@PNN&IQXw+Md3JRFkj ztIVE%-!PsH@bG<43V!e&!8!l3U^Dg^XMXO1Itp^}yzsn2jt}?qA=FX09~=Yaa!CQ-ZlHDrg=K!sltp2#A?;^0OqE$j;1I8R(VCI#v*F*ZuU{!)&docq(Vk zSYiYU6vlJ&?(;v)D0#l^Of^V|N!f5fweRy-NDQ$vOA@&UbS{x=zPwd9G(D|0?#XqB5++t`^fN@Gcp$2UXjFc=xLL=ye(F@J^^(6+Y4|~{8kB1F1GJ1yTp9+t#F^ZNsf-ct?N5)FnfgH@?o~PL!+T3LqxaAXU7a7w{?u$2*dcTKq kgu+J5$|m2Wb5`ak5gqGR*7oEQ%V=5!yCZKnMAJ_&{)ihWG+j1~_m4vm6+B8F)6@YcTQ|=o#r5Di|3U85kNF7*C$dID4`J6B{G* z?U^DcpJ0+;G@snaB+h6DCSAa!H;9xB09q-; zz{v0u>Ig|F9XMH#Szk2X-N)a_(I?*D%`Mn9BtFE^$;UN*vOTjlZz)tA6OiVfT+1vj z$qQut`40h`QDoNwW%-a~Z$M>PfHeQ)yFgh1B-z&}vb-$fl7dLGzma5xC))yLIgn&| z7$MRiles46vP_*U%IY^cgEc~s0VD(j98eWplP|J