From d5b20738eccd59bf7fcdc009dadcb44e3aaf0960 Mon Sep 17 00:00:00 2001 From: hnhx Date: Sat, 11 Mar 2023 19:24:39 +0100 Subject: [PATCH] added bar padding and change alpha of the bar --- suckless/dwm/config.def.h | 2 + suckless/dwm/config.def.h.orig | 9 ++++ suckless/dwm/config.def.h.rej | 11 +++++ suckless/dwm/config.h | 9 ++-- suckless/dwm/drw.o | Bin 11192 -> 11176 bytes suckless/dwm/dwm.c | 31 ++++++------ suckless/dwm/dwm.c.orig | 83 +++++++++++++++++++++++++++------ suckless/dwm/dwm.c.rej | 24 ++++++++++ suckless/dwm/util.o | Bin 2256 -> 2216 bytes 9 files changed, 138 insertions(+), 31 deletions(-) create mode 100644 suckless/dwm/config.def.h.rej create mode 100644 suckless/dwm/dwm.c.rej diff --git a/suckless/dwm/config.def.h b/suckless/dwm/config.def.h index fa10db2..daa5811 100644 --- a/suckless/dwm/config.def.h +++ b/suckless/dwm/config.def.h @@ -6,6 +6,8 @@ static const unsigned int gappx = 5; /* gaps between windows */ static const unsigned int snap = 32; /* snap pixel */ static const int showbar = 1; /* 0 means no bar */ static const int topbar = 1; /* 0 means bottom bar */ +static const int vertpad = 10; /* vertical padding of bar */ +static const int sidepad = 10; /* horizontal padding of bar */ static const char *fonts[] = { "monospace:size=10" }; static const char dmenufont[] = "monospace:size=10"; static const char col_gray1[] = "#222222"; diff --git a/suckless/dwm/config.def.h.orig b/suckless/dwm/config.def.h.orig index a1ef4f7..daa5811 100644 --- a/suckless/dwm/config.def.h.orig +++ b/suckless/dwm/config.def.h.orig @@ -6,6 +6,8 @@ static const unsigned int gappx = 5; /* gaps between windows */ static const unsigned int snap = 32; /* snap pixel */ static const int showbar = 1; /* 0 means no bar */ static const int topbar = 1; /* 0 means bottom bar */ +static const int vertpad = 10; /* vertical padding of bar */ +static const int sidepad = 10; /* horizontal padding of bar */ static const char *fonts[] = { "monospace:size=10" }; static const char dmenufont[] = "monospace:size=10"; static const char col_gray1[] = "#222222"; @@ -13,11 +15,18 @@ static const char col_gray2[] = "#444444"; static const char col_gray3[] = "#bbbbbb"; static const char col_gray4[] = "#eeeeee"; static const char col_cyan[] = "#005577"; +static const unsigned int baralpha = 0xd0; +static const unsigned int borderalpha = OPAQUE; static const char *colors[][3] = { /* fg bg border */ [SchemeNorm] = { col_gray3, col_gray1, col_gray2 }, [SchemeSel] = { col_gray4, col_cyan, col_cyan }, }; +static const unsigned int alphas[][3] = { + /* fg bg border */ + [SchemeNorm] = { OPAQUE, baralpha, borderalpha }, + [SchemeSel] = { OPAQUE, baralpha, borderalpha }, +}; /* tagging */ static const char *tags[] = { "1", "2", "3", "4", "5", "6", "7", "8", "9" }; diff --git a/suckless/dwm/config.def.h.rej b/suckless/dwm/config.def.h.rej new file mode 100644 index 0000000..1117863 --- /dev/null +++ b/suckless/dwm/config.def.h.rej @@ -0,0 +1,11 @@ +--- config.def.h ++++ config.def.h +@@ -5,6 +5,8 @@ static const unsigned int borderpx = 1; /* border pixel of windows */ + static const unsigned int snap = 32; /* snap pixel */ + static const int showbar = 1; /* 0 means no bar */ + static const int topbar = 1; /* 0 means bottom bar */ ++static const int horizpadbar = 2; /* horizontal padding for statusbar */ ++static const int vertpadbar = 0; /* vertical padding for statusbar */ + static const char *fonts[] = { "monospace:size=10" }; + static const char dmenufont[] = "monospace:size=10"; + static const char col_gray1[] = "#222222"; diff --git a/suckless/dwm/config.h b/suckless/dwm/config.h index dbfaa63..67fb188 100644 --- a/suckless/dwm/config.h +++ b/suckless/dwm/config.h @@ -3,11 +3,15 @@ /* appearance */ static const unsigned int borderpx = 3; /* border pixel of windows */ static const unsigned int gappx = 10; /* gaps between windows */ -static const unsigned int baralpha = 0xd0; +static const unsigned int baralpha = 0xA0; static const unsigned int borderalpha = OPAQUE; static const unsigned int snap = 32; /* snap pixel */ static const int showbar = 1; /* 0 means no bar */ static const int topbar = 1; /* 0 means bottom bar */ +static const int vertpad = 8; /* vertical padding of bar */ +static const int sidepad = 5; /* horizontal padding of bar */ +static const int horizpadbar = 0; /* horizontal padding for statusbar */ +static const int vertpadbar = 9; /* vertical padding for statusbar */ static const char *fonts[] = { "Hack:size=13" }; static const char dmenufont[] = "Hack:size=13"; static const char col_gray1[] = "#222222"; @@ -35,8 +39,7 @@ static const Rule rules[] = { * WM_NAME(STRING) = title */ /* class instance title tags mask isfloating monitor */ - { "Gimp", NULL, NULL, 0, 1, -1 }, - { "Firefox", NULL, NULL, 1 << 8, 0, -1 }, + { "a", NULL, NULL, 0, 1, -1 } }; /* layout(s) */ diff --git a/suckless/dwm/drw.o b/suckless/dwm/drw.o index 7d35a7c78701de2226ad67dfb1db9b14f303545f..fa293939fe41cf8ee3104c99494dbc6c15434a6b 100644 GIT binary patch delta 2397 zcmZ{le@vBC7{}jp`E`K{uUBC&FSEG7z5H?^S8)g-a2v#X7bMIKSjuEA&}sz=8(T0% zxvSe7=H2s0E&p(2Gc(&_w>j3NU<=!tYr95Pw$c_`ph@8-YP#K?=iKwQGn!{R&pGe+ z^E~JGd(LFr>9%7`lSJHAc|LGJ;s_bs51~e{|M=WXZmm6osE{ zo7q5Ejr-Qd7U9=~ys8Tciqa6csg6!z#W-@XMH%Q=oS=Fjs*axG;*i^=sH5*;y~*rp z@lH1f=GD=$a8+U%V^`s&q$>77_*9a|R=Py1Vh*{pViUQFpAFt)rN4Td|do zQS%-8gQHwKJtZ8jUsu?<}adVK_CPHHODia~L?& zGvNKSN5a22hFQwfJBwZ3O{JSk%TB(P&R7GCsRgV!{F(X{v$ZF}Q8gEiJGU}dc+Pn~ z4sj@RJ1d2WOpR5M_155E)+$UnW25y~l=ZPf*)H@8LN60~J4NYx1YHsIc|l(#+BG6* zM_f!E5%ieQuLwOw=qH3eze@i^=u1NXNcf-Qx8?GMo?j_;I5twI{~PN=_RE9Z!v^-dLgR;w`+$?GU#nx5v3X z%k7uke#h-Rw|BTrg_#VEWpP`~Z8ce_)9v~t(T_Eo-M9`kItO&=8(DKWq&Ksq?%w_T zUg_@+-^f;N3EjN|{RhJL);BVC4t$Sl`Zu^RlxUywFh9T(MJWP(NPiTRRwQ4d*I^v# z{fETbAc8cRn#8m^HWOHmrn>~Cg0|V}*8|=hjg>k!eG=jsm&rOYLR^O z5^)Tu#}bKdg=M7MBWsgN`2Kyv;=05Zjq=@qCQwg>X+yf65R>8 z`I^34qV*E(gI1&?5`9vlK^Q^$p+p-cidRv-=AROjW|Se(St-hp^vjZ-E$KFJx;6bV z@!L~tw1W@Ce^?Gaq}30hozRE$sGziZ@>!jQaks|qb6Wrrx8|vFpbIAQdia#W}fLH$Eh(WEB&M>z>K0nE|@v@3LM;CTS6DY2i_yex@f^i>x%X{%oqgH2N7e!ls8P zR{uswRCs33vx#Z&xaIj}TI6Y$)vxc!)bzk2Z=^Zdn{EWIV|)mSX%*Kc2+`vbP5=d)GO z{`6cH9nE-;c{X=+Z{6xpJr$k`wYAgZ_Efr6k6PZPIyzN%2?q{Sr_Db4;(d&*gUz-= zwmiDucABwPXtF=YilU#|PbMMRlKmvBf^FF{TSZ>2!|7&8OgdqqbV*tgucT+V{vFrd zTyLQ)rH#|1q`16^(;lM1H#lwMG{os)u3zJN8rMJO`fP$8<@y}gKjHBwjrpH9{13)_ zrg`K?$?=dH9yv=C0&+5RXD?J3u7%cmg-7k+QCSd@WmZ65S(U5}jGnz}Od{E|rxFxG7}x2Ax>$ z;z1+31VN-faY}oUFVNp%0BI5>p(W;~!5GpUP7`yTFpIQY$fZ|oj_ZNET$y>H34Oca z$6+{EhIeu^V1I6ga#QHFSjf9YQA#yG1TM3A(vNA5@(rY$z z&x49|UkXZSluP&Mqx67w1cG_8FUBd2`w$j0cb=7E;#o9eGT+k%u2cLYSj_ka7{jsJ zQc*&q;00Jr`Wnn4eVbFtrHkF9laS|>SKb!rV**X#UpHmd3cA8|8p{s-P8s$)Gn8^6 zdX*4e4Z}`ZSuIenK-a<)()9veEzpf%&zF^#1zIQ2*TIYQO@THD^e}8g`nf=#5a?Gh zm@oUzaY`#$D9}kED__uO1bwlf=KyobikE-z)Em9IyZrmqKt&q(AKC>$q#trhdo7;P zNfTO5mt3$;plbx$CFp**=gMa>$SaVQ?bHn#RpN<11WiaM1zLp> z=2$x+RPX^i0eOY8&-|tMh5N}^H7y%$M}lttMn)3!YY-}w74xTI-e=Skl{pwjYW@)V zNJ2B|6_`S5Uh-9ZWRo5Tdy)L_6}&5fI>1{bvmk6J`jz#9ueh28AXHrYR*CiK*Tsxg xLon-p__4&rbYP{m>>zm2k3tCj5R8@9ruJsVC$j=l%c|K3c*|-T{yWNw{s9oIhm-&S diff --git a/suckless/dwm/dwm.c b/suckless/dwm/dwm.c index bacbc23..15765ac 100644 --- a/suckless/dwm/dwm.c +++ b/suckless/dwm/dwm.c @@ -247,6 +247,8 @@ static int screen; static int sw, sh; /* X display screen geometry width, height */ static int bh; /* bar height */ static int lrpad; /* sum of left and right padding for text */ +static int vp; /* vertical padding for bar */ +static int sp; /* side padding for bar */ static int (*xerrorxlib)(Display *, XErrorEvent *); static unsigned int numlockmask = 0; static void (*handler[LASTEvent]) (XEvent *) = { @@ -581,7 +583,7 @@ configurenotify(XEvent *e) for (c = m->clients; c; c = c->next) if (c->isfullscreen) resizeclient(c, m->mx, m->my, m->mw, m->mh); - XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); + XMoveResizeWindow(dpy, m->barwin, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh); } focus(NULL); arrange(NULL); @@ -722,8 +724,8 @@ drawbar(Monitor *m) /* draw status first so it can be overdrawn by tags later */ if (m == selmon) { /* status is only drawn on selected monitor */ drw_setscheme(drw, scheme[SchemeNorm]); - tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); + tw = TEXTW(stext); + drw_text(drw, m->ww - tw, 0, tw, bh, lrpad / 2, stext, 0); } for (c = m->clients; c; c = c->next) { @@ -749,12 +751,12 @@ drawbar(Monitor *m) if ((w = m->ww - tw - x) > bh) { if (m->sel) { drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); + drw_text(drw, x, 0, w - 2 * sp, bh, lrpad / 2, m->sel->name, 0); if (m->sel->isfloating) drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); } else { drw_setscheme(drw, scheme[SchemeNorm]); - drw_rect(drw, x, 0, w, bh, 1, 1); + drw_rect(drw, x, 0, w - 2 * sp, bh, 1, 1); } } drw_map(drw, m->barwin, 0, 0, m->ww, bh); @@ -1577,9 +1579,12 @@ setup(void) drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap); if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) die("no fonts could be loaded."); - lrpad = drw->fonts->h; - bh = drw->fonts->h + 2; + lrpad = drw->fonts->h + horizpadbar; + bh = drw->fonts->h + vertpadbar; + sp = sidepad; + vp = (topbar == 1) ? vertpad : - vertpad; updategeom(); + /* init atoms */ utf8string = XInternAtom(dpy, "UTF8_STRING", False); wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); @@ -1733,7 +1738,7 @@ togglebar(const Arg *arg) { selmon->showbar = !selmon->showbar; updatebarpos(selmon); - XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); + XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww - 2 * sp, bh); arrange(selmon); } @@ -1846,7 +1851,7 @@ updatebars(void) for (m = mons; m; m = m->next) { if (m->barwin) continue; - m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, depth, + m->barwin = XCreateWindow(dpy, root, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh, 0, depth, InputOutput, visual, CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa); XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); @@ -1861,11 +1866,11 @@ updatebarpos(Monitor *m) m->wy = m->my; m->wh = m->mh; if (m->showbar) { - m->wh -= bh; - m->by = m->topbar ? m->wy : m->wy + m->wh; - m->wy = m->topbar ? m->wy + bh : m->wy; + m->wh = m->wh - vertpad - bh; + m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad; + m->wy = m->topbar ? m->wy + bh + vp : m->wy; } else - m->by = -bh; + m->by = -bh - vp; } void diff --git a/suckless/dwm/dwm.c.orig b/suckless/dwm/dwm.c.orig index a20fb1d..4fadab5 100644 --- a/suckless/dwm/dwm.c.orig +++ b/suckless/dwm/dwm.c.orig @@ -57,6 +57,8 @@ #define TAGMASK ((1 << LENGTH(tags)) - 1) #define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad) +#define OPAQUE 0xffU + /* enums */ enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ enum { SchemeNorm, SchemeSel }; /* color schemes */ @@ -235,6 +237,7 @@ static Monitor *wintomon(Window w); static int xerror(Display *dpy, XErrorEvent *ee); static int xerrordummy(Display *dpy, XErrorEvent *ee); static int xerrorstart(Display *dpy, XErrorEvent *ee); +static void xinitvisual(); static void zoom(const Arg *arg); /* variables */ @@ -244,6 +247,8 @@ static int screen; static int sw, sh; /* X display screen geometry width, height */ static int bh; /* bar height */ static int lrpad; /* sum of left and right padding for text */ +static int vp; /* vertical padding for bar */ +static int sp; /* side padding for bar */ static int (*xerrorxlib)(Display *, XErrorEvent *); static unsigned int numlockmask = 0; static void (*handler[LASTEvent]) (XEvent *) = { @@ -271,6 +276,11 @@ static Drw *drw; static Monitor *mons, *selmon; static Window root, wmcheckwin; +static int useargb = 0; +static Visual *visual; +static int depth; +static Colormap cmap; + /* configuration, allows nested code to access above variables */ #include "config.h" @@ -573,7 +583,7 @@ configurenotify(XEvent *e) for (c = m->clients; c; c = c->next) if (c->isfullscreen) resizeclient(c, m->mx, m->my, m->mw, m->mh); - XMoveResizeWindow(dpy, m->barwin, m->wx, m->by, m->ww, bh); + XMoveResizeWindow(dpy, m->barwin, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh); } focus(NULL); arrange(NULL); @@ -715,7 +725,7 @@ drawbar(Monitor *m) if (m == selmon) { /* status is only drawn on selected monitor */ drw_setscheme(drw, scheme[SchemeNorm]); tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); + drw_text(drw, m->ww - tw - 2 * sp, 0, tw, bh, 0, stext, 0); } for (c = m->clients; c; c = c->next) { @@ -741,12 +751,12 @@ drawbar(Monitor *m) if ((w = m->ww - tw - x) > bh) { if (m->sel) { drw_setscheme(drw, scheme[m == selmon ? SchemeSel : SchemeNorm]); - drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->name, 0); + drw_text(drw, x, 0, w - 2 * sp, bh, lrpad / 2, m->sel->name, 0); if (m->sel->isfloating) drw_rect(drw, x + boxs, boxs, boxw, boxw, m->sel->isfixed, 0); } else { drw_setscheme(drw, scheme[SchemeNorm]); - drw_rect(drw, x, 0, w, bh, 1, 1); + drw_rect(drw, x, 0, w - 2 * sp, bh, 1, 1); } } drw_map(drw, m->barwin, 0, 0, m->ww, bh); @@ -1565,12 +1575,16 @@ setup(void) sw = DisplayWidth(dpy, screen); sh = DisplayHeight(dpy, screen); root = RootWindow(dpy, screen); - drw = drw_create(dpy, screen, root, sw, sh); + xinitvisual(); + drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap); if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) die("no fonts could be loaded."); lrpad = drw->fonts->h; bh = drw->fonts->h + 2; + sp = sidepad; + vp = (topbar == 1) ? vertpad : - vertpad; updategeom(); + /* init atoms */ utf8string = XInternAtom(dpy, "UTF8_STRING", False); wmatom[WMProtocols] = XInternAtom(dpy, "WM_PROTOCOLS", False); @@ -1593,7 +1607,7 @@ setup(void) /* init appearance */ scheme = ecalloc(LENGTH(colors), sizeof(Clr *)); for (i = 0; i < LENGTH(colors); i++) - scheme[i] = drw_scm_create(drw, colors[i], 3); + scheme[i] = drw_scm_create(drw, colors[i], alphas[i], 3); /* init bars */ updatebars(); updatestatus(); @@ -1724,7 +1738,7 @@ togglebar(const Arg *arg) { selmon->showbar = !selmon->showbar; updatebarpos(selmon); - XMoveResizeWindow(dpy, selmon->barwin, selmon->wx, selmon->by, selmon->ww, bh); + XMoveResizeWindow(dpy, selmon->barwin, selmon->wx + sp, selmon->by + vp, selmon->ww - 2 * sp, bh); arrange(selmon); } @@ -1828,16 +1842,18 @@ updatebars(void) Monitor *m; XSetWindowAttributes wa = { .override_redirect = True, - .background_pixmap = ParentRelative, + .background_pixel = 0, + .border_pixel = 0, + .colormap = cmap, .event_mask = ButtonPressMask|ExposureMask }; XClassHint ch = {"dwm", "dwm"}; for (m = mons; m; m = m->next) { if (m->barwin) continue; - m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->ww, bh, 0, DefaultDepth(dpy, screen), - CopyFromParent, DefaultVisual(dpy, screen), - CWOverrideRedirect|CWBackPixmap|CWEventMask, &wa); + m->barwin = XCreateWindow(dpy, root, m->wx + sp, m->by + vp, m->ww - 2 * sp, bh, 0, depth, + InputOutput, visual, + CWOverrideRedirect|CWBackPixel|CWBorderPixel|CWColormap|CWEventMask, &wa); XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor); XMapRaised(dpy, m->barwin); XSetClassHint(dpy, m->barwin, &ch); @@ -1850,11 +1866,11 @@ updatebarpos(Monitor *m) m->wy = m->my; m->wh = m->mh; if (m->showbar) { - m->wh -= bh; - m->by = m->topbar ? m->wy : m->wy + m->wh; - m->wy = m->topbar ? m->wy + bh : m->wy; + m->wh = m->wh - vertpad - bh; + m->by = m->topbar ? m->wy : m->wy + m->wh + vertpad; + m->wy = m->topbar ? m->wy + bh + vp : m->wy; } else - m->by = -bh; + m->by = -bh - vp; } void @@ -2135,6 +2151,43 @@ xerrorstart(Display *dpy, XErrorEvent *ee) return -1; } +void +xinitvisual() +{ + XVisualInfo *infos; + XRenderPictFormat *fmt; + int nitems; + int i; + + XVisualInfo tpl = { + .screen = screen, + .depth = 32, + .class = TrueColor + }; + long masks = VisualScreenMask | VisualDepthMask | VisualClassMask; + + infos = XGetVisualInfo(dpy, masks, &tpl, &nitems); + visual = NULL; + for(i = 0; i < nitems; i ++) { + fmt = XRenderFindVisualFormat(dpy, infos[i].visual); + if (fmt->type == PictTypeDirect && fmt->direct.alphaMask) { + visual = infos[i].visual; + depth = infos[i].depth; + cmap = XCreateColormap(dpy, root, visual, AllocNone); + useargb = 1; + break; + } + } + + XFree(infos); + + if (! visual) { + visual = DefaultVisual(dpy, screen); + depth = DefaultDepth(dpy, screen); + cmap = DefaultColormap(dpy, screen); + } +} + void zoom(const Arg *arg) { diff --git a/suckless/dwm/dwm.c.rej b/suckless/dwm/dwm.c.rej new file mode 100644 index 0000000..0db7768 --- /dev/null +++ b/suckless/dwm/dwm.c.rej @@ -0,0 +1,24 @@ +--- dwm.c ++++ dwm.c +@@ -708,8 +708,8 @@ drawbar(Monitor *m) + /* draw status first so it can be overdrawn by tags later */ + if (m == selmon) { /* status is only drawn on selected monitor */ + drw_setscheme(drw, scheme[SchemeNorm]); +- tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */ +- drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0); ++ tw = TEXTW(stext); ++ drw_text(drw, m->ww - tw, 0, tw, bh, lrpad / 2, stext, 0); + } + + for (c = m->clients; c; c = c->next) { +@@ -1548,8 +1548,8 @@ setup(void) + drw = drw_create(dpy, screen, root, sw, sh); + if (!drw_fontset_create(drw, fonts, LENGTH(fonts))) + die("no fonts could be loaded."); +- lrpad = drw->fonts->h; +- bh = drw->fonts->h + 2; ++ lrpad = drw->fonts->h + horizpadbar; ++ bh = drw->fonts->h + vertpadbar; + updategeom(); + /* init atoms */ + utf8string = XInternAtom(dpy, "UTF8_STRING", False); diff --git a/suckless/dwm/util.o b/suckless/dwm/util.o index 5c8f13da222ed986ea9aff1cee1fd950a9c04def..6ab501f771232ee94bd1d5e3f8348ea759683421 100644 GIT binary patch delta 427 zcmca0xI%D(2BXGA%}z~^Zd(Q*@aVkf(c7Z(0nBt!k?`mZQ4#Rybx|=m?xG^V0TiD2 zpq<+B_a_Uoh)cf4A^UZ*BT)7?k}MCBUiQg_EaHqjlRH`LfgU`` z@|;m<@*fbb}Ca+|(=Zs>67%4pYBbzx>E>tDE y22g7zyFKHA$t!_m#pIXl_DmlbCu?!oacVF_bT~~ectLQ224lcP%}%|2j0_A69=$#)0v?^WJbGJHK7jb$wm_2MxQmJa2Z-D0q9WnZ z>!M;X@pijjYFtHlR2aMT4aw5ro z0Lgm(LXzb|k_EaE3_v#WAc^xp#hHL&%t+#blM`9&f!iGj@<}#x#%Yro+3kU99f9PD$&EmA!Q_MN_Dm8?lbJZ|I0Ha- R0D;G3PY!d&3zHi;)B(${h))0j