From df366b8aba66c29acabcc2c19bc1c8f5ee004988 Mon Sep 17 00:00:00 2001 From: gfhopper <gage@gages.blog> Date: Fri, 9 May 2025 14:25:25 -0400 Subject: [PATCH] Test new codebase in Fedora VM and push upstream --- Makefile | 17 ++++++ cursor.png => assets/cursor.png | Bin include/panes/compositor.h | 20 ++++++ include/panes/input.h | 0 include/panes/renderer.h | 4 ++ main.c | 105 -------------------------------- panes | Bin 29632 -> 36080 bytes src/compositor.c | 102 +++++++++++++++++++++++++++++++ src/compositor.o | Bin 0 -> 23472 bytes src/input.c | 0 src/main.c | 17 ++++++ src/main.o | Bin 0 -> 10856 bytes src/renderer.c | 24 ++++++++ src/renderer.o | Bin 0 -> 8576 bytes 14 files changed, 184 insertions(+), 105 deletions(-) create mode 100644 Makefile rename cursor.png => assets/cursor.png (100%) create mode 100644 include/panes/compositor.h create mode 100644 include/panes/input.h create mode 100644 include/panes/renderer.h delete mode 100644 main.c create mode 100644 src/compositor.c create mode 100644 src/compositor.o create mode 100644 src/input.c create mode 100644 src/main.c create mode 100644 src/main.o create mode 100644 src/renderer.c create mode 100644 src/renderer.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..405f995 --- /dev/null +++ b/Makefile @@ -0,0 +1,17 @@ +CC = cc +CFLAGS = -g -std=c11 -DWLR_USE_UNSTABLE $(shell pkg-config --cflags wlroots-0.18 wayland-server) -Iinclude +LDFLAGS = $(shell pkg-config --libs wlroots-0.18 wayland-server) +SRC = src/main.c src/compositor.c src/renderer.c +OBJ = $(SRC:.c=.o) +BIN = panes + +all: $(BIN) + +$(BIN): $(OBJ) + $(CC) -o $@ $^ $(LDFLAGS) + +%.o: %.c + $(CC) -c $< -o $@ $(CFLAGS) + +clean: + rm -f $(OBJ) $(BIN) diff --git a/cursor.png b/assets/cursor.png similarity index 100% rename from cursor.png rename to assets/cursor.png diff --git a/include/panes/compositor.h b/include/panes/compositor.h new file mode 100644 index 0000000..c5a76a3 --- /dev/null +++ b/include/panes/compositor.h @@ -0,0 +1,20 @@ +#pragma once +#include <wlr/backend.h> +#include <wlr/render/wlr_renderer.h> +#include <wlr/render/allocator.h> +#include <wlr/types/wlr_scene.h> +#include <wlr/types/wlr_output_layout.h> +#include <wayland-server-core.h> + +struct compositor_state { + struct wl_display *display; + struct wlr_backend *backend; + struct wlr_renderer *renderer; + struct wlr_allocator *allocator; + struct wlr_scene *scene; + struct wlr_output_layout *layout; + struct wl_listener new_output; +}; + +void compositor_init(struct compositor_state *state); +void handle_new_output(struct wl_listener *listener, void *data); diff --git a/include/panes/input.h b/include/panes/input.h new file mode 100644 index 0000000..e69de29 diff --git a/include/panes/renderer.h b/include/panes/renderer.h new file mode 100644 index 0000000..903ba12 --- /dev/null +++ b/include/panes/renderer.h @@ -0,0 +1,4 @@ +#pragma once +#include <wlr/types/wlr_scene.h> + +void renderer_set_background(struct wlr_scene *scene, uint32_t hex_color); diff --git a/main.c b/main.c deleted file mode 100644 index 4e9dc3a..0000000 --- a/main.c +++ /dev/null @@ -1,105 +0,0 @@ -#define WLR_USE_UNSTABLE -#include <wlr/backend.h> -#include <wlr/backend/multi.h> -#include <wlr/types/wlr_output.h> -#include <wlr/types/wlr_output_layout.h> -#include <wlr/types/wlr_scene.h> -#include <wlr/types/wlr_compositor.h> -#include <wlr/types/wlr_cursor.h> -#include <wlr/types/wlr_data_device.h> -#include <wlr/render/allocator.h> -#include <wlr/render/wlr_renderer.h> -#include <wlr/util/log.h> -#include <wayland-server-core.h> -#include <stdlib.h> -#include <string.h> - -struct server { - struct wl_display *display; - struct wlr_backend *backend; - struct wlr_renderer *renderer; - struct wlr_allocator *allocator; - struct wlr_scene *scene; - struct wlr_output_layout *layout; - struct wl_listener new_output; -}; - -static void handle_new_output(struct wl_listener *listener, void *data) { - struct server *server = wl_container_of(listener, server, new_output); - struct wlr_output *output = data; - - // Pick the first available mode - if (!wl_list_empty(&output->modes)) { - struct wlr_output_mode *mode = wl_container_of(output->modes.next, mode, link); - - struct wlr_output_state state; - memset(&state, 0, sizeof(state)); - state.committed = WLR_OUTPUT_STATE_ENABLED | WLR_OUTPUT_STATE_MODE; - state.enabled = true; - state.mode_type = WLR_OUTPUT_STATE_MODE_FIXED; - state.mode = mode; - - if (!wlr_output_commit_state(output, &state)) { - wlr_log(WLR_ERROR, "Failed to commit output state"); - return; - } - } - - wlr_output_layout_add_auto(server->layout, output); - wlr_scene_output_create(server->scene, output); - - float bg[4] = {0.1f, 0.1f, 0.1f, 1.0f}; - struct wlr_scene_rect *rect = - wlr_scene_rect_create(&server->scene->tree, 1, 1, bg); - wlr_scene_node_lower_to_bottom(&rect->node); -} - -int main(void) { - wlr_log_init(WLR_DEBUG, NULL); - struct server server = {0}; - - server.display = wl_display_create(); - struct wl_event_loop *loop = wl_display_get_event_loop(server.display); - - // Create the backend first - server.backend = wlr_backend_autocreate(loop, NULL); // Automatically choose the backend - if (!server.backend) { - wlr_log(WLR_ERROR, "Failed to create backend"); - return 1; - } - - // Create the renderer after the backend - server.renderer = wlr_renderer_autocreate(server.backend); - if (!server.renderer) { - wlr_log(WLR_ERROR, "Failed to create renderer"); - return 1; - } - - // Now create the allocator with the valid renderer - server.allocator = wlr_allocator_autocreate(server.backend, server.renderer); - if (!server.allocator) { - wlr_log(WLR_ERROR, "Failed to create allocator"); - return 1; - } - - // Create the compositor with the renderer - wlr_compositor_create(server.display, 4, server.renderer); - wlr_data_device_manager_create(server.display); - - server.scene = wlr_scene_create(); - server.layout = wlr_output_layout_create(server.display); - - server.new_output.notify = handle_new_output; - wl_signal_add(&server.backend->events.new_output, &server.new_output); - - // Start the backend - if (!wlr_backend_start(server.backend)) { - wlr_log(WLR_ERROR, "Failed to start backend"); - return 1; - } - - wlr_log(WLR_INFO, "Panes compositor running (wlroots 0.18)..."); - wl_display_run(server.display); - wl_display_destroy(server.display); - return 0; -} diff --git a/panes b/panes index 380a9ae9b34f02301f1090758cb68374d05c7e48..5e1f12b4740c547e827a3b094bf6cec02faac70b 100755 GIT binary patch literal 36080 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 literal 29632 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 diff --git a/src/compositor.c b/src/compositor.c new file mode 100644 index 0000000..b0b6e53 --- /dev/null +++ b/src/compositor.c @@ -0,0 +1,102 @@ +#include <stdlib.h> +#include <wlr/backend.h> +#include <wlr/render/wlr_renderer.h> +#include <wlr/render/allocator.h> +#include <wlr/types/wlr_scene.h> +#include <wlr/types/wlr_output_layout.h> +#include <wlr/util/log.h> +#include <wlr/types/wlr_output.h> +#include <panes/renderer.h> +#include <panes/compositor.h> +#include <ctype.h> +#include <string.h> +#include <wlr/types/wlr_compositor.h> +#include <wlr/types/wlr_data_device.h> +#include <wlr/backend/headless.h> // Add this to the top of the file + +static bool parse_hex_color(const char *hex_str, float *rgba_out) { + if (!hex_str) return false; + + if (hex_str[0] == '#') hex_str++; + else if (hex_str[0] == '0' && tolower(hex_str[1]) == 'x') hex_str += 2; + + if (strlen(hex_str) != 6) return false; + + char r_str[3] = { hex_str[0], hex_str[1], '\0' }; + char g_str[3] = { hex_str[2], hex_str[3], '\0' }; + char b_str[3] = { hex_str[4], hex_str[5], '\0' }; + + int r = strtol(r_str, NULL, 16); + int g = strtol(g_str, NULL, 16); + int b = strtol(b_str, NULL, 16); + + rgba_out[0] = r / 255.0f; + rgba_out[1] = g / 255.0f; + rgba_out[2] = b / 255.0f; + rgba_out[3] = 1.0f; + + return true; +} + +void compositor_init(struct compositor_state *state) { + state->display = wl_display_create(); + struct wl_event_loop *loop = wl_display_get_event_loop(state->display); + + state->backend = wlr_backend_autocreate(loop, NULL); + state->renderer = wlr_renderer_autocreate(state->backend); + state->allocator = wlr_allocator_autocreate(state->backend, state->renderer); + state->layout = wlr_output_layout_create(state->display); + state->scene = wlr_scene_create(); + + // Add headless output if applicable (nested testing) + if (wlr_backend_is_headless(state->backend)) { + struct wlr_output *headless_output = wlr_headless_add_output(state->backend, 800, 600); + if (!headless_output) { + wlr_log(WLR_ERROR, "Failed to create headless output"); + } else { + struct wlr_output_state pending; + memset(&pending, 0, sizeof(pending)); + pending.committed = WLR_OUTPUT_STATE_ENABLED | WLR_OUTPUT_STATE_MODE; + pending.enabled = true; + pending.mode_type = WLR_OUTPUT_STATE_MODE_CUSTOM; + pending.custom_mode.width = 800; + pending.custom_mode.height = 600; + pending.custom_mode.refresh = 60000; + + if (!wlr_output_commit_state(headless_output, &pending)) { + wlr_log(WLR_ERROR, "Failed to commit headless output state"); + } + } + } + + wlr_compositor_create(state->display, 4, state->renderer); + wlr_data_device_manager_create(state->display); + + wl_signal_add(&state->backend->events.new_output, &state->new_output); + state->new_output.notify = handle_new_output; +} + +void handle_new_output(struct wl_listener *listener, void *data) { + struct compositor_state *state = wl_container_of(listener, state, new_output); + struct wlr_output *output = data; + + if (!wl_list_empty(&output->modes)) { + struct wlr_output_mode *mode = wl_container_of(output->modes.next, mode, link); + + struct wlr_output_state pending; + memset(&pending, 0, sizeof(pending)); + pending.committed = WLR_OUTPUT_STATE_ENABLED | WLR_OUTPUT_STATE_MODE; + pending.enabled = true; + pending.mode_type = WLR_OUTPUT_STATE_MODE_FIXED; + pending.mode = mode; + + if (!wlr_output_commit_state(output, &pending)) { + wlr_log(WLR_ERROR, "Failed to commit output"); + return; + } + } + + wlr_output_layout_add_auto(state->layout, output); + wlr_scene_output_create(state->scene, output); + renderer_set_background(state->scene, 0x018281); // Hex color +} diff --git a/src/compositor.o b/src/compositor.o new file mode 100644 index 0000000000000000000000000000000000000000..03ab5254fd7f1df2b810d1b06355ed40bb3c2921 GIT binary patch literal 23472 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 literal 0 HcmV?d00001 diff --git a/src/input.c b/src/input.c new file mode 100644 index 0000000..e69de29 diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..242c13f --- /dev/null +++ b/src/main.c @@ -0,0 +1,17 @@ +#include <wlr/util/log.h> +#include <panes/compositor.h> + +int main() { + struct compositor_state state = {0}; + compositor_init(&state); + + if (!wlr_backend_start(state.backend)) { + wlr_log(WLR_ERROR, "Failed to start backend"); + return 1; + } + + wlr_log(WLR_INFO, "Panes compositor running..."); + wl_display_run(state.display); + wl_display_destroy(state.display); + return 0; +} diff --git a/src/main.o b/src/main.o new file mode 100644 index 0000000000000000000000000000000000000000..ff8ce7a34a151476179dfa0f0841adc0ad183d77 GIT binary patch literal 10856 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 literal 0 HcmV?d00001 diff --git a/src/renderer.c b/src/renderer.c new file mode 100644 index 0000000..e088314 --- /dev/null +++ b/src/renderer.c @@ -0,0 +1,24 @@ +#include <wlr/types/wlr_scene.h> +#include <wlr/types/wlr_output.h> +#include <wlr/types/wlr_output_layout.h> +#include <wlr/render/wlr_renderer.h> +#include <wlr/render/allocator.h> +#include <wlr/types/wlr_compositor.h> +#include <wlr/util/log.h> +#include <stdlib.h> +#include <string.h> +#include <panes/renderer.h> +#include <stdio.h> +#include <stdint.h> +#include <ctype.h> + +void renderer_set_background(struct wlr_scene *scene, uint32_t hex_color) { + float rgba[4]; + rgba[0] = ((hex_color >> 16) & 0xFF) / 255.0f; + rgba[1] = ((hex_color >> 8) & 0xFF) / 255.0f; + rgba[2] = ( hex_color & 0xFF) / 255.0f; + rgba[3] = 1.0f; + + struct wlr_scene_rect *rect = wlr_scene_rect_create(&scene->tree, 1, 1, rgba); + wlr_scene_node_lower_to_bottom(&rect->node); +} diff --git a/src/renderer.o b/src/renderer.o new file mode 100644 index 0000000000000000000000000000000000000000..2c8e0b34deee522066ada9a0bdd05dcb3e541b88 GIT binary patch literal 8576 zcmbuEc|4R`AHbgpqX;9iRH9V3T!|>6MOQQ-OQn=$W{fei42{94Boc-crLwiBMaz|> zT_bCyXt~;MC26@uDN4)R?R}n^-zoQ8{qw%(^O-s4_dUPu`JM9|^E?t9U7h;TXas6B zVmk3dLX;q+Lw}6zWkY*Hm(U@+n3AW=HSP9HNqoH|x;l`Vp*VUhInR_hezcHgI96A_ zU}%&}B~s>EsaQ2g<Bhb7sbM00rO%XHWL|%{riI2Fa1r5)T^iofE)9kn6`)JQzp_h1 z)3HV7r2qftq>Xg)|9N;p=A|UhOVhEPnc-N^%=BtuO0J)w%2h#qF(q{`C=K%3?~n?2 zkeo#d9|M`c$}1yMk||xPA~h2n2x9dN$_CYZADxnZ$l}8A&5iC_GqvmZL9zEc1iIx- zhWF<&G)FR+D)k!1S@c;Jwao6M+BHt2j6BRoXsY*f(#qbXraUz_SNt@Io+CE*)KVWl zcU?l_+kjS@z`wBP;k9xL!HvA0JnOD)Jr5fMthIWUde(U>Tbpi`CTzDn7Z_^gsl{m* zy>xvkPFqPA*^FA!s#WUpqE^JYZWuE6!;}2d#T}EXN?r0R`W@sI*KIz+Z?#PH(_&S= zxAoA@A9uamF-9*hv_WE=OJ{2*$L~<Gau2*wywtN!ToSUln_05eHuv}d;}1gRjKre* zF566LTb53UE$trjI$g!G^<&n&&UJ$=uKeK^y8FX{vNsN%%4S<78YUS{8*Z8FF!+0i zckUdSpW&dr@Kj#Hg58f7`YW}}ADVrsTBpbHs$b8cvYObt;u$<H`*`A{zX#6>dEL3U zlh<&2YWd)_{0Q-Tnp5#In!@HHj|TUZ=HBn`vTCZicOUP{bR6<<&W!a=Zr<Lr3=gbV z%>3ZOFbXa`IWxZ{u>aBY*-c?<ytnLB+I2O*ke%J!lvws9Phlc^p}j$#Lg)phG|kfs zYa#|`KmAPGv;X1xr&f=+i@38I^3Ts_$BYziIMms$-ES>_|DKX+Zh+50am?+qeL68u zd|9O@eV>Yk1YN31W&au6XnZ27%=)2GQtp=Bekn(%?r&v(Y1*%ARix9===HML`Fdj5 z$?jWP0|Qdx72`~wjji<Pr=GB`C2X&simT?j+{h_9xd#US%~5q(elv1Lei4W5pd0MH zUUI5U&*)s$gGHkq^|oscw=PdQeXTynxn|0u?QKan6ZFLN5Zg7QwpEI1J?7ZPxvo`t zGjQ#Q{N<sNDOI^%drp{M?Vo$q>ghT4?6&@9Y`3_ijB%&57brg$4tw}^nF{afX}aCU z=Vz?FRG!jbn`H>Sx3_OT_x4esXV|0Dr*+dFyi<1xIO!Rd$u3n7nr3_|WB<ECcKKhq z-R+D9PVHGmrQ~TzamgoLrK2xyyS?p~grse^uiO-;*DUFzv9cVK)U>wLFTcpIQ#rWR z$v#EDFuQdZ{Ud92$^gcZUF=h_bJQyvSHINX>8!SLSgv@2@^SC&&I2`uzyDUrS}=3# z8iNz9f1Au3?mzv=sk2Me+U_y(#;zYR`glq9*!2@X=n_5YzW=z-cESya?n7~*SJoA` zDszV8o9bm;y?4b+hu(DlgK59GGDXSCi&K!$+IZJIW@B;tZcA(a(NyQ$m-W*U-nGoo zs}CtTRjKeyvw=T(aF+WxyZwh9*O^YuOP}&}!ulNTSHBvzn9=N%1pZbf^J|XSK6oGG zW*;`;!l#DU8{P5@;zwU^*|TrZ_|7r(1LvLGXu(sDS#h_T2Ho@Bx}%7FNjV{BqPotq zlCn$A=WlryM6XWR!Dwu&DB6Gd_}z$}@#8as6b|ppuwftJ-&j@fT$CzsOl4dhv1*-~ zq5ogMHY~DBo}VA_t*UZ^IJR=wvOjwse0@>Ssl4Twv8E|mi+-|t^p}03FFRBY1itrZ z;vNtriwn=zN~O}v(#j_KUVVN2gs!(qW1ScprbdmI>=oGoIsDe=+|@6V2Du(kv`k}j z2p?tRJNAlpg*CJ>-skmg^4N6CE{o}$&8upQb83ruRhO>>npK+^NE+s+2max#U}?N~ zv-`19;mRQ1pI1kzi)@Kwu4>F5=jCeI8T~^R7e+6*@Akx;@qT}saynDDsiKpx%GrEp zWc180Hp2Ef0gvxwPdMLx`^}xd*6N6Z2itvUn8LqyX^CBDKeeP|gJ#~JWZPdSWN1>y zVy<7~8h&Q^)RLLu%LP)-p~Ign)=Ha2erJZ)Mwyyu362KO2vZL9|LU+@XQ5BsI<?}v zr574qK6ZJGH}O8#U~(#9#md85TzzipeA=L5zIwqgw|lllkBDehQKKz3?6lRUB|8ky zI&rVr*N|1}kjTBTIQrY<)VmMfoQ+d*zwpexv3rGqe)qZcYMqS2Vy^u+$-%Zn%Ofjy zwyNJyIMVP%f7s;6*<)w4kMZo<=vH^N!gI~oP_u^|ucVT%JFT2!gaKZ!_wwiQcKb(i zxoqX^<{{@o)Q<U&`#mJHVRGi|GpncDoGr>&)wELe%ZV3Rwy$5R9*uU&l1SW^&Z%D< znP$q}=kG9ZM>4ys#^<fa7RR`FPyd{nZsGFyxJl>D#>A)5Bku3rFsQ7}O?0wghxMj{ zLjgB*v<%yhjJ=Y*y3At481?6yhKA>MXw4m&R?0AlJ$!QBBo%|Vq2gP#56x3=c1UAW z&y^2N`g&|*i-N96n7-h*4+~O@J1!pEVXMEZ+O~Y}{6-%|JH;D`f-pA!)tw1Tr*F@! zcrtIvCSR33k9J9%_72=zTUM~GEAtoK2^r}f@v4zS615@?4;CHoX@1!ic;4(#diJ37 zlqqx*Wy{7dMvt$hvhEqg1lj%dXB3Z_y?Ido%)seqQdBRiews6Du4i()Q_-f1*=oms zzwx{!RCm?>`qCu}GxXyPo1Iexzq3m99I9UB47uGr)%x;f2NmhVaoan>ny-tahgdvr zsogN*K{k&oFgSWm$#<c~@7>Kzk#?NPzyTqz!mQp!?HyOb(yt+SO<DFS4KW{1G_b!Z z47mHH_{V;2h8yX}{gml(T~K8-ut6g+wan}5&{@(sSyCf~@XtM}bIXe~HhpGaimkA_ zn=;xlIc~|kYxP-b9DNlZ_Ndf#rX9q$V0!S{%1vrlN35&ZvS`egNkayO@Yfh}%5|Dw zIkKiZmX8#N9LhbI_<5sqvEdV!%N)1n<VP(lT5>`(4d?mU*=&h-xmT<aG2oSP1b_R( z$dDbDrw10<x_gB=CLAz`oRRR{z|AMhdIP&&Qc*QPr)_9yiDVhq&x-ph<caUgm^x2) z$)1B}*c}zp&!6nhhrXX{5O$0??a9z2;l6xgwu6JM(b(B;UgL}`CYf27Sr|<;pE$|f zYT_j7NKqs|M&yUOok<<?bfQTqhU!8Cc>u|%rY-LX+VXh>P0XMT9jM$ti&P#)a_U1h z*=aUYosrVdL5;33nMSI}C;IrN;wTbtzx6RiD16W2pR)?GZ2!q9Nr8YLb=Z^w(RX|W zLKV}LiwcD7hw;DW6bSWyv4JER)GJSPl8+)e<6qhYVfz!l_$QnY@&tiAAx~(={XS$x z@kFcu4mXr9jEEKl60u=IRuq>f;IV`}u874I@;D-1FDi%#<gvmcVtGQAD1sFbAreJ| z6D(Ggh;+f?28XhOI7`DI*M-nif29=2&wswjTftBGgP-u%7zdGHz{aBXm<stp{*8KZ zYE=-Q)QeNKMjWju<pcf{kt5>!%28aI{FuxC+>&b~Zxp9&2ZO8wJ>nn|LtsFK2NyD8 z0-VzCz1u8$aVl;B7};QaH&s-!$sR_?p7KNKs{(f-$5cbyfGQN(=E}S8{5kkvfbkt5 zQ~QZ($WJc#N9&Auj$Dmc4n5)}Q1=9kKLtM<FwO^#{2@PCz;|N$w?RIPaW|09VEh5p z;R43#z^`Cj7xKS@@leozhH-ny^F78-07sAR=(_Gf{jDJm;^V>I0pmuX?}73E0Qbju zC&U$ET>fjCe454hFA#Sf##4ZA!uT?Xn~U)<h+BklI^1N(F&+%O4&w{KPY1>iL;XKv z+!o~ikQb`wQpjH)<JI7QIL6~aHpcjA@Q=;|<lhwdEKDD*w+F`eLH>RiSA={*FrE+o zV=;aZ<YbJqpq|+nzXE=?WBeh+ZN_*F<k^aGchK*|I69Beenj;_`Rjlk;$2{GjPaWg zcQVGq;kr<K+>bA&ZwTuigYg?shh&UfgMW11Apf=CXB(z}5O^`h--CP-<E3!DXx}0K z)8TrrWBL<-qxC`h_aOgQn0_Saf5iAp&{u_d<R=igCB{=B&zTs%41Q;0Tovjz7vqso zA0LdP`Y*+}7vvL-@kQV#3FB^{zX9Xu94N&2DUdH<9Iaym#?kqC7vpIEJ;Qhv<kO9D zUy#v{3{-zDsIwZ>4{;^nMi|$F`kP@~1l$VaDG=8d<1J9nnHawcd@jb-A)h4}*8|SS zcskTUgz<}@pNMf6kk?~;7x*c_INE;)Fy02&dlus}z)u~<QT=aW9G%aPF^<mX*BIwQ z-57NF0IefnVl2i>U}8ST4Z-gc;8faBGMPm<rauSPeFetRxhcW8?4gYGv=!qthznTu zdk<|{DlmEm!Sfj@%S!(HkorA53gj^up8~Q8#;1X7hH-b0Ct{oj@??x}2AO&;q8e3y zDxckyK(^`f?mI{O{5On$0NEAe=()lZ<G;ebLeD!W?quLTnErI&Y>c}CN7sk^_y7;V z^wGH;f$?zA7h!xQ@HmWb1ilL61;E!}d=Kz6jF$n=#Q0_4TY*zz@BM59oMOE>VHOn^ zF5(1`y+|nUgV9LH3*(rHcw!M@7RV8C2(y5wD8ft_As1w`fxLidK5MBUD1y|HjX41U zLS781Mi~PVas+%HW%`4KEfw&P2^kL!DNH`-k}@|UJe(&WLkl8AJTvlD$9UQEFUWjB zv{|GuB9bQ*#erX5Fe^yN2}cVH*ZaSAMx-HCLv)`aKlU&{?+p-#@*|O;{w+w|*Y@9u zd~kqzC??whc_({6L)lXI5Y_bL9YNjK6o+F6C_${i1HlZAO-WAq{9o;<=VQv}KlTbK zqy3HYC6TQ4KEo(LoddF*FvT=TGzv=$QzNKztgrfcs8Qa@a}r(!X_I4WjgUR6pEJq& zijRI5&>;^}P1cY-lKsd5rXri7!-g<NiqPY_-X!lUe>NnD?5X^zcXcQ}%6}Qj`pVx1 z;;$#?dpBf{SQt6zD}ELPu!n`E;!~wW_9%Wl$*B0|Xo4J5tsdf6U>gIep*p0Ix_#NF zQ5Q?LxAN}$H*TLx&dBV)Ysd$2)PYSl^zKqFL9Ivu#oyIyjC81eGuZcL)EL<zevBMY z?|HDxByzzXtsl}y`6KxfIiP&v_Vr+IgA}31?W;-N*ZMWVi!QWI)cR5H%8)(ceZ`iA tg8Rk>E|_|+*4O@{7<P-w%x&QO3Xw@azVP~K{>1(T<bU&rsceMX{}*T+;sXEx literal 0 HcmV?d00001