From a7ad6f7ba02d649821305512884246242943bb0d Mon Sep 17 00:00:00 2001 From: Matiss Jurevics Date: Tue, 13 Jan 2026 19:24:29 +0000 Subject: [PATCH] demo --- Makefile | 35 + font8x8.h | 82 ++ main.cpp | 477 +++++++ main.o | Bin 0 -> 301720 bytes shader-demo | Bin 0 -> 270624 bytes shaders/fractal.frag | 22 + shaders/frag.glsl | 7 + shaders/mandelbrot.frag | 31 + shaders/plasma.frag | 18 + shaders/tunnel.frag | 23 + shaders/vert.glsl | 9 + xdg-shell-client-protocol.h | 2384 +++++++++++++++++++++++++++++++++++ xdg-shell-protocol.c | 184 +++ xdg-shell-protocol.o | Bin 0 -> 8408 bytes 14 files changed, 3272 insertions(+) create mode 100644 Makefile create mode 100644 font8x8.h create mode 100644 main.cpp create mode 100644 main.o create mode 100755 shader-demo create mode 100644 shaders/fractal.frag create mode 100644 shaders/frag.glsl create mode 100644 shaders/mandelbrot.frag create mode 100644 shaders/plasma.frag create mode 100644 shaders/tunnel.frag create mode 100644 shaders/vert.glsl create mode 100644 xdg-shell-client-protocol.h create mode 100644 xdg-shell-protocol.c create mode 100644 xdg-shell-protocol.o diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..d33ef39 --- /dev/null +++ b/Makefile @@ -0,0 +1,35 @@ +# Makefile + +CXX = g++ +CXXFLAGS = -Wall -g -std=c++17 +LIBS = $(shell pkg-config --cflags --libs wayland-client wayland-egl egl glesv2 xkbcommon) + +# Wayland protocols +WAYLAND_PROTOCOLS_DIR = $(shell pkg-config --variable=pkgdatadir wayland-protocols) +WAYLAND_SCANNER = $(shell pkg-config --variable=wayland_scanner wayland-scanner) + +XDG_SHELL_XML = $(WAYLAND_PROTOCOLS_DIR)/stable/xdg-shell/xdg-shell.xml + +all: shader-demo + +# Generate code from xml +xdg-shell-protocol.c: + $(WAYLAND_SCANNER) private-code < $(XDG_SHELL_XML) > $@ + +xdg-shell-client-protocol.h: + $(WAYLAND_SCANNER) client-header < $(XDG_SHELL_XML) > $@ + +# Compile rule +OBJS = main.o xdg-shell-protocol.o + +%.o: %.c + $(CC) -c -o $@ $< $(CFLAGS) + +main.o: main.cpp xdg-shell-client-protocol.h + $(CXX) -c -o $@ $< $(CXXFLAGS) + +shader-demo: $(OBJS) + $(CXX) -o $@ $(OBJS) $(LIBS) + +clean: + rm -f shader-demo *.o xdg-shell-protocol.c xdg-shell-client-protocol.h diff --git a/font8x8.h b/font8x8.h new file mode 100644 index 0000000..c9e53f4 --- /dev/null +++ b/font8x8.h @@ -0,0 +1,82 @@ +#ifndef FONT8X8_H +#define FONT8X8_H + +// Minimal 8x8 font (A-Z only for brevity, 0 for unknown) +// Each byte is a row, top to bottom. +unsigned char font8x8_basic[128][8] = { + {0,0,0,0,0,0,0,0}, // 0-31 control chars (empty) + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, // ... + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, // End control + {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, // 32 SPACE + {0x30, 0x78, 0x78, 0x30, 0x30, 0x00, 0x30, 0x00}, // 33 ! + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 34 " + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 35 # + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 36 $ + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 37 % + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 38 & + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 39 ' + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 40 ( + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 41 ) + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 42 * + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 43 + + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 44 , + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 45 - + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 46 . + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 47 / + {0x3E, 0x63, 0x73, 0x7B, 0x6F, 0x67, 0x3E, 0x00}, // 48 0 + {0x0C, 0x0E, 0x0C, 0x0C, 0x0C, 0x0C, 0x3F, 0x00}, // 49 1 + {0x1E, 0x33, 0x30, 0x1C, 0x06, 0x33, 0x3F, 0x00}, // 50 2 + {0x1E, 0x33, 0x30, 0x1C, 0x30, 0x33, 0x1E, 0x00}, // 51 3 + {0x38, 0x3C, 0x36, 0x33, 0x7F, 0x30, 0x78, 0x00}, // 52 4 + {0x3F, 0x03, 0x1F, 0x30, 0x30, 0x33, 0x1E, 0x00}, // 53 5 + {0x1C, 0x06, 0x03, 0x1F, 0x33, 0x33, 0x1E, 0x00}, // 54 6 + {0x3F, 0x33, 0x30, 0x18, 0x0C, 0x0C, 0x0C, 0x00}, // 55 7 + {0x1E, 0x33, 0x33, 0x1E, 0x33, 0x33, 0x1E, 0x00}, // 56 8 + {0x1E, 0x33, 0x33, 0x3E, 0x30, 0x18, 0x0E, 0x00}, // 57 9 + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 58 : + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 59 ; + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 60 < + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 61 = + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 62 > + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 63 ? + {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, // 64 @ + {0x0C, 0x1E, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x00}, // 65 A + {0x3F, 0x66, 0x66, 0x3E, 0x66, 0x66, 0x3F, 0x00}, // 66 B + {0x3C, 0x66, 0x03, 0x03, 0x03, 0x66, 0x3C, 0x00}, // 67 C + {0x1F, 0x36, 0x66, 0x66, 0x66, 0x36, 0x1F, 0x00}, // 68 D + {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x46, 0x7F, 0x00}, // 69 E + {0x7F, 0x46, 0x16, 0x1E, 0x16, 0x06, 0x0F, 0x00}, // 70 F + {0x3C, 0x66, 0x03, 0x03, 0x73, 0x66, 0x7C, 0x00}, // 71 G + {0x33, 0x33, 0x33, 0x3F, 0x33, 0x33, 0x33, 0x00}, // 72 H + {0x1E, 0x0C, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // 73 I + {0x78, 0x30, 0x30, 0x30, 0x33, 0x33, 0x1E, 0x00}, // 74 J + {0x67, 0x66, 0x36, 0x1E, 0x36, 0x66, 0x67, 0x00}, // 75 K + {0x0F, 0x06, 0x06, 0x06, 0x46, 0x66, 0x7F, 0x00}, // 76 L + {0x63, 0x77, 0x7F, 0x7F, 0x6B, 0x63, 0x63, 0x00}, // 77 M + {0x63, 0x67, 0x6F, 0x7B, 0x73, 0x63, 0x63, 0x00}, // 78 N + {0x1C, 0x36, 0x63, 0x63, 0x63, 0x36, 0x1C, 0x00}, // 79 O + {0x3F, 0x66, 0x66, 0x3E, 0x06, 0x06, 0x0F, 0x00}, // 80 P + {0x1E, 0x33, 0x33, 0x33, 0x3B, 0x1E, 0x38, 0x00}, // 81 Q + {0x3F, 0x66, 0x66, 0x3E, 0x36, 0x66, 0x67, 0x00}, // 82 R + {0x1E, 0x33, 0x07, 0x0E, 0x38, 0x33, 0x1E, 0x00}, // 83 S + {0x3F, 0x2D, 0x0C, 0x0C, 0x0C, 0x0C, 0x1E, 0x00}, // 84 T + {0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x3F, 0x00}, // 85 U + {0x33, 0x33, 0x33, 0x33, 0x33, 0x1E, 0x0C, 0x00}, // 86 V + {0x63, 0x63, 0x63, 0x6B, 0x7F, 0x77, 0x63, 0x00}, // 87 W + {0x63, 0x63, 0x36, 0x1C, 0x36, 0x63, 0x63, 0x00}, // 88 X + {0x33, 0x33, 0x33, 0x1E, 0x0C, 0x0C, 0x1E, 0x00}, // 89 Y + {0x7F, 0x63, 0x31, 0x18, 0x4C, 0x66, 0x7F, 0x00}, // 90 Z + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, + {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0}, {0,0,0,0,0,0,0,0} +}; + +#endif diff --git a/main.cpp b/main.cpp new file mode 100644 index 0000000..3b80d60 --- /dev/null +++ b/main.cpp @@ -0,0 +1,477 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "xdg-shell-client-protocol.h" +#include "font8x8.h" + +// --- Globals & State --- + +struct wl_display *display = nullptr; +struct wl_registry *registry = nullptr; +struct wl_compositor *compositor = nullptr; +struct xdg_wm_base *wm_base = nullptr; +struct wl_seat *seat = nullptr; +struct wl_pointer *pointer = nullptr; + +struct wl_surface *surface = nullptr; +struct xdg_surface *xdg_surface = nullptr; +struct xdg_toplevel *xdg_toplevel = nullptr; +struct wl_egl_window *egl_window = nullptr; + +EGLDisplay egl_display; +EGLContext egl_context; +EGLSurface egl_surface; + +// Text State +GLuint font_texture; +GLuint text_program; + +bool running = true; +int width = 800; +int height = 600; + +// Input state +double cursor_x = 0; +double cursor_y = 0; +bool button_pressed = false; + +// Time state +auto start_time = std::chrono::high_resolution_clock::now(); + +// Shaders +struct ShaderProgram { + GLuint program; + GLint posAttrib; + GLint timeUniform; + GLint resolutionUniform; + std::string name; + float color[3]; // For sidebar button color +}; + +std::vector shaders; +int current_shader_index = 0; +GLuint sidebar_program; // Simple shader for drawing UI quads + +// UI Layout +const int SIDEBAR_WIDTH = 200; +const int BUTTON_HEIGHT = 60; +const int BUTTON_MARGIN = 10; + +// Forward declarations +void render_frame(); +GLuint load_shader_src(const char *source, GLenum type); + +// --- Font & Text Utils --- + +void init_font() { + int tex_w = 128; // 16 chars * 8 px + int tex_h = 64; // 8 chars * 8 px + std::vector pixels(tex_w * tex_h, 0); + + for (int char_idx = 0; char_idx < 128; ++char_idx) { + int grid_x = char_idx % 16; + int grid_y = char_idx / 16; + + for (int row = 0; row < 8; ++row) { + unsigned char bits = font8x8_basic[char_idx][row]; + for (int col = 0; col < 8; ++col) { + if ((bits >> col) & 1) { + int px = grid_x * 8 + col; + int py = grid_y * 8 + row; + pixels[py * tex_w + px] = 255; + } + } + } + } + + glGenTextures(1, &font_texture); + glBindTexture(GL_TEXTURE_2D, font_texture); + glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, tex_w, tex_h, 0, GL_ALPHA, GL_UNSIGNED_BYTE, pixels.data()); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); +} + +void init_text_shader() { + const char* vs = + "#version 100\n" + "attribute vec2 position;\n" + "attribute vec2 texcoord;\n" + "varying vec2 v_tex;\n" + "uniform vec2 u_screen_size;\n" + "void main() {\n" + " vec2 ndc = (position / u_screen_size) * 2.0 - 1.0;\n" + " gl_Position = vec4(ndc.x, -ndc.y, 0.0, 1.0);\n" + " v_tex = texcoord;\n" + "}"; + const char* fs = + "#version 100\n" + "precision mediump float;\n" + "varying vec2 v_tex;\n" + "uniform sampler2D u_tex;\n" + "uniform vec3 u_color;\n" + "void main() {\n" + " float alpha = texture2D(u_tex, v_tex).a;\n" + " if (alpha < 0.5) discard;\n" + " gl_FragColor = vec4(u_color, 1.0);\n" + "}"; + + GLuint v = load_shader_src(vs, GL_VERTEX_SHADER); + GLuint f = load_shader_src(fs, GL_FRAGMENT_SHADER); + text_program = glCreateProgram(); + glAttachShader(text_program, v); + glAttachShader(text_program, f); + glLinkProgram(text_program); +} + +void draw_text(const std::string& text, float x, float y, float scale, float r, float g, float b) { + glUseProgram(text_program); + GLint posLoc = glGetAttribLocation(text_program, "position"); + GLint texLoc = glGetAttribLocation(text_program, "texcoord"); + GLint scrLoc = glGetUniformLocation(text_program, "u_screen_size"); + GLint colLoc = glGetUniformLocation(text_program, "u_color"); + + glUniform2f(scrLoc, (float)width, (float)height); + glUniform3f(colLoc, r, g, b); + + std::vector verts; + float cx = x; + float cy = y; + + for (char c : text) { + if (c < 0 || c > 127) continue; + int grid_x = c % 16; + int grid_y = c / 16; + + float u1 = (float)grid_x / 16.0; + float v1 = (float)grid_y / 8.0; + float u2 = u1 + 1.0/16.0; + float v2 = v1 + 1.0/8.0; + + float w = 8 * scale; + float h = 8 * scale; + + verts.push_back(cx); verts.push_back(cy + h); verts.push_back(u1); verts.push_back(v2); + verts.push_back(cx + w); verts.push_back(cy + h); verts.push_back(u2); verts.push_back(v2); + verts.push_back(cx + w); verts.push_back(cy); verts.push_back(u2); verts.push_back(v1); + + verts.push_back(cx); verts.push_back(cy + h); verts.push_back(u1); verts.push_back(v2); + verts.push_back(cx + w); verts.push_back(cy); verts.push_back(u2); verts.push_back(v1); + verts.push_back(cx); verts.push_back(cy); verts.push_back(u1); verts.push_back(v1); + + cx += w + 2.0f; + } + + glEnableVertexAttribArray(posLoc); + glEnableVertexAttribArray(texLoc); + glVertexAttribPointer(posLoc, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), verts.data()); + glVertexAttribPointer(texLoc, 2, GL_FLOAT, GL_FALSE, 4 * sizeof(float), verts.data() + 2); + + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glDrawArrays(GL_TRIANGLES, 0, verts.size() / 4); + + glDisable(GL_BLEND); +} + +// --- Shader Utilities --- + +GLuint load_shader_src(const char *source, GLenum type) { + GLuint shader = glCreateShader(type); + glShaderSource(shader, 1, &source, nullptr); + glCompileShader(shader); + + GLint compiled; + glGetShaderiv(shader, GL_COMPILE_STATUS, &compiled); + if (!compiled) { + char log[512]; + glGetShaderInfoLog(shader, 512, nullptr, log); + std::cerr << "Shader compile error: " << log << std::endl; + return 0; + } + return shader; +} + +GLuint load_shader_file(const char *path, GLenum type) { + std::ifstream file(path); + if (!file.is_open()) { + std::cerr << "Failed to open shader: " << path << std::endl; + return 0; + } + std::stringstream buffer; + buffer << file.rdbuf(); + std::string source_str = buffer.str(); + return load_shader_src(source_str.c_str(), type); +} + +GLuint create_program(const char* vertPath, const char* fragPath) { + GLuint vert = load_shader_file(vertPath, GL_VERTEX_SHADER); + GLuint frag = load_shader_file(fragPath, GL_FRAGMENT_SHADER); + GLuint prog = glCreateProgram(); + glAttachShader(prog, vert); + glAttachShader(prog, frag); + glLinkProgram(prog); + return prog; +} + +// --- Input Handling (Pointer) --- + +static void pointer_handle_enter(void *data, struct wl_pointer *wl_pointer, uint32_t serial, struct wl_surface *surface, wl_fixed_t sx, wl_fixed_t sy) {} +static void pointer_handle_leave(void *data, struct wl_pointer *wl_pointer, uint32_t serial, struct wl_surface *surface) {} + +static void pointer_handle_motion(void *data, struct wl_pointer *wl_pointer, uint32_t time, wl_fixed_t sx, wl_fixed_t sy) { + cursor_x = wl_fixed_to_double(sx); + cursor_y = wl_fixed_to_double(sy); +} + +static void pointer_handle_button(void *data, struct wl_pointer *wl_pointer, uint32_t serial, uint32_t time, uint32_t button, uint32_t state) { + if (state == WL_POINTER_BUTTON_STATE_PRESSED && button == 0x110) { // Left click + if (cursor_x < SIDEBAR_WIDTH) { + int clicked_index = -1; + for (size_t i = 0; i < shaders.size(); ++i) { + int y_start = BUTTON_MARGIN + i * (BUTTON_HEIGHT + BUTTON_MARGIN); + int y_end = y_start + BUTTON_HEIGHT; + if (cursor_y >= y_start && cursor_y <= y_end && cursor_x >= BUTTON_MARGIN && cursor_x <= SIDEBAR_WIDTH - BUTTON_MARGIN) { + clicked_index = i; + break; + } + } + if (clicked_index != -1) { + current_shader_index = clicked_index; + std::cout << "Switched to shader: " << shaders[current_shader_index].name << std::endl; + } + } + } +} + +static void pointer_handle_axis(void *data, struct wl_pointer *wl_pointer, uint32_t time, uint32_t axis, wl_fixed_t value) {} + +static const struct wl_pointer_listener pointer_listener = { + .enter = pointer_handle_enter, + .leave = pointer_handle_leave, + .motion = pointer_handle_motion, + .button = pointer_handle_button, + .axis = pointer_handle_axis, +}; + +// --- Seat Listener --- + +static void seat_handle_capabilities(void *data, struct wl_seat *wl_seat, uint32_t capabilities) { + if (capabilities & WL_SEAT_CAPABILITY_POINTER) { + pointer = wl_seat_get_pointer(wl_seat); + wl_pointer_add_listener(pointer, &pointer_listener, nullptr); + } +} + +static void seat_handle_name(void *data, struct wl_seat *wl_seat, const char *name) {} + +static const struct wl_seat_listener seat_listener = { + .capabilities = seat_handle_capabilities, + .name = seat_handle_name, +}; + +// --- Wayland/XDG Code --- + +static void xdg_wm_base_ping(void *data, struct xdg_wm_base *xdg_wm_base, uint32_t serial) { xdg_wm_base_pong(xdg_wm_base, serial); } +static const struct xdg_wm_base_listener xdg_wm_base_listener = { .ping = xdg_wm_base_ping }; + +static void xdg_surface_configure(void *data, struct xdg_surface *xdg_surface, uint32_t serial) { + xdg_surface_ack_configure(xdg_surface, serial); +} +static const struct xdg_surface_listener xdg_surface_listener = { .configure = xdg_surface_configure }; + +static void xdg_toplevel_configure(void *data, struct xdg_toplevel *xdg_toplevel, int32_t w, int32_t h, struct wl_array *states) { + if (w > 0 && h > 0) { + width = w; + height = h; + if (egl_window) wl_egl_window_resize(egl_window, width, height, 0, 0); + } +} +static void xdg_toplevel_close(void *data, struct xdg_toplevel *xdg_toplevel) { running = false; } +static const struct xdg_toplevel_listener xdg_toplevel_listener = { .configure = xdg_toplevel_configure, .close = xdg_toplevel_close }; + +static void registry_handle_global(void *data, struct wl_registry *registry, uint32_t name, const char *interface, uint32_t version) { + if (strcmp(interface, wl_compositor_interface.name) == 0) { + compositor = (struct wl_compositor *)wl_registry_bind(registry, name, &wl_compositor_interface, 1); + } else if (strcmp(interface, xdg_wm_base_interface.name) == 0) { + wm_base = (struct xdg_wm_base *)wl_registry_bind(registry, name, &xdg_wm_base_interface, 1); + xdg_wm_base_add_listener(wm_base, &xdg_wm_base_listener, nullptr); + } else if (strcmp(interface, wl_seat_interface.name) == 0) { + seat = (struct wl_seat *)wl_registry_bind(registry, name, &wl_seat_interface, 1); + wl_seat_add_listener(seat, &seat_listener, nullptr); + } +} +static const struct wl_registry_listener registry_listener = { .global = registry_handle_global, .global_remove = [](void*, wl_registry*, uint32_t){} }; + +// --- Rendering --- + +static void frame_handle_done(void *data, struct wl_callback *callback, uint32_t time); +static const struct wl_callback_listener frame_listener = { .done = frame_handle_done }; + +static void frame_handle_done(void *data, struct wl_callback *callback, uint32_t time) { + wl_callback_destroy(callback); + render_frame(); +} + +void draw_quad(float x, float y, float w, float h, float screen_w, float screen_h, float r, float g, float b) { + float x1 = (x / screen_w) * 2.0f - 1.0f; + float y1 = 1.0f - (y / screen_h) * 2.0f; + float x2 = ((x + w) / screen_w) * 2.0f - 1.0f; + float y2 = 1.0f - ((y + h) / screen_h) * 2.0f; + + GLfloat vertices[] = { x1, y1, x1, y2, x2, y2, x2, y2, x2, y1, x1, y1 }; + + GLint posLoc = glGetAttribLocation(sidebar_program, "position"); + GLint colLoc = glGetUniformLocation(sidebar_program, "u_color"); + + glUseProgram(sidebar_program); + glUniform3f(colLoc, r, g, b); + glVertexAttribPointer(posLoc, 2, GL_FLOAT, GL_FALSE, 0, vertices); + glEnableVertexAttribArray(posLoc); + glDrawArrays(GL_TRIANGLES, 0, 6); +} + +void render_frame() { + if (!running) return; + + // 1. Sidebar BG + glViewport(0, 0, width, height); + glUseProgram(sidebar_program); + draw_quad(0, 0, SIDEBAR_WIDTH, height, width, height, 0.2f, 0.2f, 0.2f); + + // 2. Buttons + for (size_t i = 0; i < shaders.size(); ++i) { + float r = shaders[i].color[0]; + float g = shaders[i].color[1]; + float b = shaders[i].color[2]; + + if ((int)i == current_shader_index) { + r = std::min(r + 0.3f, 1.0f); + g = std::min(g + 0.3f, 1.0f); + b = std::min(b + 0.3f, 1.0f); + } + + float by = BUTTON_MARGIN + i * (BUTTON_HEIGHT + BUTTON_MARGIN); + + // Quad + glUseProgram(sidebar_program); + draw_quad(BUTTON_MARGIN, by, SIDEBAR_WIDTH - 2 * BUTTON_MARGIN, BUTTON_HEIGHT, width, height, r, g, b); + + // Text + float text_scale = 2.0f; + float text_h = 8 * text_scale; + float text_y = by + (BUTTON_HEIGHT - text_h) / 2; + float text_x = BUTTON_MARGIN + 10; + draw_text(shaders[i].name, text_x, text_y, text_scale, 0.0f, 0.0f, 0.0f); + } + + // 3. Shader + glViewport(SIDEBAR_WIDTH, 0, width - SIDEBAR_WIDTH, height); + + ShaderProgram &active = shaders[current_shader_index]; + glUseProgram(active.program); + + auto now = std::chrono::high_resolution_clock::now(); + float time = std::chrono::duration(now - start_time).count(); + + if (active.timeUniform != -1) glUniform1f(active.timeUniform, time); + if (active.resolutionUniform != -1) glUniform2f(active.resolutionUniform, (float)(width - SIDEBAR_WIDTH), (float)height); + + GLfloat vertices[] = { -1, 1, -1, -1, 1, -1, 1, -1, 1, 1, -1, 1 }; + glVertexAttribPointer(active.posAttrib, 2, GL_FLOAT, GL_FALSE, 0, vertices); + glEnableVertexAttribArray(active.posAttrib); + glDrawArrays(GL_TRIANGLES, 0, 6); + + struct wl_callback *callback = wl_surface_frame(surface); + wl_callback_add_listener(callback, &frame_listener, nullptr); + + eglSwapBuffers(egl_display, egl_surface); +} + +// --- Init & Main --- + +void init_shaders() { + const char* sidebar_vert = + "#version 100\n" + "attribute vec2 position;\n" + "void main() { gl_Position = vec4(position, 0.0, 1.0); }"; + const char* sidebar_frag = + "#version 100\n" + "precision mediump float;\n" + "uniform vec3 u_color;\n" + "void main() { gl_FragColor = vec4(u_color, 1.0); }"; + + GLuint sv = load_shader_src(sidebar_vert, GL_VERTEX_SHADER); + GLuint sf = load_shader_src(sidebar_frag, GL_FRAGMENT_SHADER); + sidebar_program = glCreateProgram(); + glAttachShader(sidebar_program, sv); + glAttachShader(sidebar_program, sf); + glLinkProgram(sidebar_program); + + auto add_shader = [&](const char* name, const char* fpath, float r, float g, float b) { + GLuint prog = create_program("shaders/vert.glsl", fpath); + if (prog) { + ShaderProgram sp; + sp.program = prog; + sp.name = name; // Now used for text! + sp.posAttrib = glGetAttribLocation(prog, "position"); + sp.timeUniform = glGetUniformLocation(prog, "u_time"); + sp.resolutionUniform = glGetUniformLocation(prog, "u_resolution"); + sp.color[0] = r; sp.color[1] = g; sp.color[2] = b; + shaders.push_back(sp); + } + }; + + add_shader("PLASMA", "shaders/plasma.frag", 0.8f, 0.2f, 0.2f); + add_shader("TUNNEL", "shaders/tunnel.frag", 0.2f, 0.8f, 0.2f); + add_shader("FRACTAL", "shaders/fractal.frag", 0.2f, 0.2f, 0.8f); + add_shader("MANDEL", "shaders/mandelbrot.frag", 0.5f, 0.0f, 0.5f); +} + +int main() { + display = wl_display_connect(nullptr); + if (!display) return 1; + registry = wl_display_get_registry(display); + wl_registry_add_listener(registry, ®istry_listener, nullptr); + wl_display_roundtrip(display); + + egl_display = eglGetDisplay((EGLNativeDisplayType)display); + eglInitialize(egl_display, nullptr, nullptr); + EGLint attribs[] = { EGL_RED_SIZE, 8, EGL_GREEN_SIZE, 8, EGL_BLUE_SIZE, 8, EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, EGL_NONE }; + EGLConfig config; EGLint num; eglChooseConfig(egl_display, attribs, &config, 1, &num); + EGLint ctx_attribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE }; + egl_context = eglCreateContext(egl_display, config, EGL_NO_CONTEXT, ctx_attribs); + + surface = wl_compositor_create_surface(compositor); + xdg_surface = xdg_wm_base_get_xdg_surface(wm_base, surface); + xdg_surface_add_listener(xdg_surface, &xdg_surface_listener, nullptr); + xdg_toplevel = xdg_surface_get_toplevel(xdg_surface); + xdg_toplevel_add_listener(xdg_toplevel, &xdg_toplevel_listener, nullptr); + xdg_toplevel_set_title(xdg_toplevel, "Shader Studio"); + wl_surface_commit(surface); + wl_display_roundtrip(display); + + egl_window = wl_egl_window_create(surface, width, height); + egl_surface = eglCreateWindowSurface(egl_display, config, (EGLNativeWindowType)egl_window, nullptr); + eglMakeCurrent(egl_display, egl_surface, egl_surface, egl_context); + + // Initialize Shaders & Font + init_font(); + init_text_shader(); + init_shaders(); + + render_frame(); + + while (running && wl_display_dispatch(display) != -1) {} + + return 0; +} diff --git a/main.o b/main.o new file mode 100644 index 0000000000000000000000000000000000000000..1ff4c84e603c23557d689083d03e80eef4e8f25b GIT binary patch literal 301720 zcmeFa2|SeF_c%WGB}Kbbnxay&RV2GI4A~+Q3E3lLYqdnmG!&v#S}h@>qLj+gVrxN? zLbMabyA);npZh$|j2Y?uS-zj&_x1h1ULUV!&Rx$v_uO;NJ@-8KnL;Rrx||#wB*q^H zNrNVL8L1I zRuSok03Q+Q#{i!Y>1u#AM7kE>QzBgl@EMV=2l$*wHvoJ=q+bGTB+^X)n~C%*fGtG2 z72sRh=^g@p z2l#_X_Y$xV;7=m`3t&Hy9soEEkwZa1e`!XVSpk;dLjWQ5pXgArvRKvq^A*ZIzUk(Jp-T^k)8=~7LlF}P@G85 z0Z1m&a|t+)fD#0hB;b4kE&#ZYNJ|lL5x~VnS{mRIA}vEeS%7jxS{|SRkzNXL8IfL2 zKt+H`M0y24Wg@*2pbC*z1*k@()d6Y{X-xuZ0n{eas{pPh(mDVsL|PZ19+9R3)F;vg z0M`&{LjoER&={Zzkv0XmmPnfcG$+#Q09p`fO9HM3Xhozq0JJ93HUKvgX5TZzAmja2t{KC7>Tbe>ZFdX1MA{_y6KaoB_z({~JB7G1b zok&Lkj3&~D03IgNF#uzUbR57VL^>W|0+Bun@EDO!1bCcCp8$B0NGAb2MWjy?@C?AS zMEV@S^F%rsU<#2=1(-&pFAy*tUufREr~L8ZN?1r4|ecNKpXUQ8MIDl9S{Od08` z@TL;myQr2L-btp?g4(EbN*k3{hKw_T(37AQmcg1*X_P)_ z)mOoatdB|y=%&&v04e$yb)yzk+G7TOW@C9YGA-a8v~8dnwL-H7DqUWOPI*U1ISa@E zRpFidTS)Yv*7cSYS_wf2qK2K2@Ovr`+v{)f2^VZ+7yuA%%*7n<`i&2 zMRtLWa}4XCKbm#FEeA2KIjo(P6P34sVNFy_hme3Unv6BS)BSkwU93>6=s1HjAS) z{EhIUQkq2postr5DjZQPOf46#MJZDFx9}kb4h^vN)<~lwvyN z7PBNBmE5CK?!jDgLEb3E9Mx3EYJ4j7jM+RO4TnSL@SrTd;FIB$bV#N12_M=#JPhS2 zkV^>>J~R(<49aK^ijcfumYj|e3ni~%hrn$+E2EH*=K(X3>X^B4OaUK+cLwYW`0hX} zrWDV1b(B!l36~2-rwynRa~uKRYCv|0w)G+rKp=OaPOR-=;O@7zv2uzm5EVgnR$5 zrt(L;W3K#IEP{14LgL2|)N&SSzyumeMh8a>(mQH+F$Yr27+`ZcB#NOBJ|d9Kg={%w z;X|UXEEP^D21Sc789)Xil3`jYQA7$~Cfwdp(S{kRPpi=`5CMyd?N~Q?VF$Z|oQ$zL zM4R%{DN+BRN70*c#723C3yeb%Cw$>M3G2RD(#AYWD!iz=N z3~+=zMsxz+dxU?{cm)F=Xg~y-^awSyyP#w2jsBK~(H@k2#|BJ3*-&(F;bp9IVU!`Z zj!fupy*FaD+59mSq9BfRqdYKl^lBaDf%Rc1Xp{lEMGu`a!1QrIMA))WMfgON0phfe zf&g$#p;>fNAta##9-a=(s40esmax|{O7R#9qaV!(xEhT*-Exc44S0qcnkG9j2C1FlKb@0zS2Q6zhf;3(_d9z_ajTH6RmwkP3(m8MOi` zj6#IMmx^2y6f%0p7y&C*U}=Ok_MOA1XQ?Ui6+mOrC`}y_)No202h)Wn4Dw1!n{XUv zzukbs@Svt)e|tKm3Fpw?Xw_Z9*-T`#8Ifn$IY2YORST|xJsSL*#^Xjlb3lZX)*)=@OI3*J!pp$Yw`UCDY{|xT*PHbIbu(&GA%F~SAjqpko3p3&thHeBbupmMr z4~oztv=xCyumv6&W`!YxMnDQCYoeA&jpmva<+ZHGd80xl(0`06&jyR!g#Lf)qs2UJ%qC~>!3tAx04O{we!gz};0)Z6; zhWrDTTmp*~1t|J6syx&TMx02&r~=FrDfgIVXk-dBnMiqvQh;+JrJ7k*$1H1LmNhZU zT2Tta_YS47G1{1AoeVW**b9(Ev<`4u{A0~6yoP8AsEkAqzEHZwJ_y?Uc34G+&S;Bb z%$-E2$96!W6@l<3ir0>E8IgC4yc;4Sf=4?DG1=Q0106;!t?)H$r7%xLIN}my2vx_5 zX*CR|6cL0?m~BpY2KInPIIK4?bG4AGX67m&SB~OAFnJ6sHQGtC50-{o5=zt&W`LM! z5tix@mU<&B^#TeoMx$Mafyk>EH`yrO%800CBHtAq2#5y}BZeL@XvxDM*a7;_O_rl3 z*n#bjSd>wdJ!p%BCg34qbAXdY1bR{q!(e%6gO03Y9>poJ4_TZAA3l-A!a-Z;jFa~p zlCjS0e}{y;EV%%ZvI%-qiMWN)K0-WjHZ#RTSZYvMss|Se=r)@W6-+W1 zL$FB2$Ydu{A|YdhzKGSq!y8c}1sjnuV;C|NY7sF4+lO;0W~A9fO8nTuLya~?+Ki1s ziGkn~u;ep*kfYSd)NOF*h(igAv;OYiq!a#)GCKcYq~hwg_ft7cmR5qRH%hZ8A9XCh zh6X2Jh`Z7mXC_=%AmYSO4R-OP(kLL2NGkE**T`XsS%Molh`>SIDip)5#UI``>_3%A z(=9?-f^vAF5Ne>pSR2-eo(!4<@P--IBRa4L>{uCJ%$h+qo~dZ%tQlnKnKjj{8D#I7 zHOS;MGsx;QGp(!{Wc!&lZLAsOh2+w;xM^je$zY|4M~tJaG|qNLODs2*on|;5pfBU! zA%6zher#8TQ3_bS#0_te;lXzuoUbfK1P_OdVem2E0-a|Qf$QK&M8ZiSluE2dm|@RHwT9hU1hePJ+M=Zg1D}bh>k#^99Q@&M0BA;?OIx9=d(^q~9VR%0 zKaPnb-J+GrHo{O?yc<HVMl$%5Y9Ek0B4SBjn$T=Qx12JTg4#utJ*x{INx%z#UW|KCrdHLBg>K5x-B9vCNGthC(Do( zWaU*+FIP`HQ-V0?2*fUz0vxhCmXKu-+_{7-FDt(UHD83a$0&oABZLRx(`TQ*kFT?% zJI0Nz&Q9(DTYbnbp56}re?Lt>hpj%I&b~`^fauZlUj}84-k#pRW6T^wO?L3~adW^a z^AGTKUaBL7VOc`PNM0oCfYI;nLYBf?s=>?@7m=OZ{Tv<80^rQh^>uJvjmBYcgBX^< zf*=xuw+9{SLMG`tK+cKm?@jjharPqn zVXdIte7n29qZ?ksEW{Ijav)m%vaX(fo`BuoeXBD7UuQpW&j2J;WAXow^2a7NW34`8 zdaMgiMr+I_-+x?R7LonalA%%m0h?h!#?*a09sIUB$hyF~kW3A=&5g8~RsI29Ue2C) z)jA7fV~QcO3Yt6mI}mlcX4_T232?T`00(l*wCzUKIXnfnJgxqFlB z?7YZoWPdkzKN$_AaZ-y2KKuDQsi=UW_U4WOLyQ>!nf}@**uPT8Z$}yY{XeiWQ zjjfr6DtTn^Q79Iul9?j`8c%O9GR)5IUjDYkyyOD>eC6D|96bY^oaG#)rR5Y9WtYk- z$ZdA__mlJU_q4<3EbI2a#0PviOntpweI2&`nGbBuM)85I?w{p@ql1^1w?7$dtpk{E zmX#!XI{3PRM*F)tc!A~Jff-^D3!E=1Dt1Pol-L5Xv2xz(-8R}r+) zglbJG4=>~4VUCGLJpEjx2G0E)ncSpQ?qwtrDzq-=Ad!Z+J9!TXk#dFL$OMIA+5mkh z;n12xyo-}`gp;R{la#}S*NRvIjN&-JagLKz$%&VtUaTJ>X)zLMJPAQEU)?B_4H>*+{hrkc$T%zkK4s%g5c|;3?)HwQ~^7et!q!Kj(!YPX7P% zkKl?txSkCV;jA7N_W^gSn&GBV(G^|v;s|kIhdc!4;Gt?X@(@RE#QgDg5cWKFv{yLd z@nQE0{>JMYyB?!_G}RE@LCev>1D7JYIUZ2DAlQJtNvTz0}9+y&Ib%wTq7 zU2MWV+A;i3wui^yZ6h{}EmP<&y)sO{oRv^4LTp&6xnLnVI*wf=D~&;?A+I0hv-HO2C@Q*;aUf}7Ff(^21GX) z(w!S{Lh!DJv^Q*bLq=Ld2uBHT2~%Z56K%?Y<)f)0SOaXGnSqxMMYhJk4~$DJ;)d=m zn&MqqrEp|u#KbW=;aAFG&2ZA86+ssp?opf#zb9{_y>YBJx-jMFMiPLnBoptLCm5Vy zbUvakf)%c&mh|!BWI`D~Pz#H}WC5OKUmLVCQm`^G47`2=Z*{?KkZM>V5JL-qY*#_3 z@R}K>$855MDFpT^7~o)z)ggv1mSLjIU<;rol5Ej>7#uAbg zDuG?SfIO46h}F!lqtAb%US6TDgyZs&V&QAW@IV#2j_N;;8Jou=ig+;ZP8WoBN2o=* zC<5bv(pNKeRRrjUaz`4~=$H;Vj`RYcmI%6)ye}FIJW&7@7SPZl7e*<7vapu=!GG>FRcRJ9)4^ObUF%oE| z{2h~_A5JNol%uO~46BRF6@Iz06=(oC#6m4>ioujZk$)(ujJHW~)&Sun)&%4Z(1!>0 zAs+QHqfyWXcBwJigZ25nJ!8-N59%Y31Gb>#4ey9fvINC|?fi&dfF!sa8Hj>e-5rR> zFooZ^_`5sdopo{KOX)i&>;Q1>0uv=+lwEw6SgrA1X1hyWS zN$q1ZU)UV9EwwH1o!b=XP6WEqj1!4P2T178bzFZ?0r1=c8iM%Zuj<4A1p48F>l4fp z)30J|st|aAB z;rL>PEHQTimMA68Vd#V3bHxWFbduo+!5fNzwE(!$hp+>8VDXXhKr4tWH_|b*xL`~X zq2Qb|@UEMMcO%vU@f~VR*`v;Ey-fL;5oy-=GolJ#J76@yRaKA@bW<8} zf?=^?EM|X(te_u*!8V>gYMB;4OIie_8Nqzkp5dKZz%-DGfNGEuxW^Y%P4btAai9nj z6ez}=$8ww~v?XAHdmxVKmoa1HIA+F1Oa;sZfO!nllndC9^?3rY0Y*ckphE^$!kl!0 za2$Hy6B^+~G5Z?*CD781z5>a-fzhCU-3_Q-yOOLRAjRYNrVACN=D3x;KY_kNICz!*O(<8{J9dj#9u)@d^O2Car0@i_}5~M2^b zNP~?K-B6?xcM!q#rQ1RgyIY$GxYGf5`ag1OakeuV2**a8I(k0Ab8In~^*95J30-X0pliEAKpzv4~4(71x4@;oz3^$+gXiU15s=t^F;u#T7w2wYk=B}wg&R3 zU-)eVU}+*SG@z<9T$dRIm^HuzgeYN3COZD%y_iL~Y(*0yPWZQ&H7JIKF980+XT%!7 zfrw#x@X-@6npjqVX^2b_u{6SVM6FLh8mw8uPPbg+$#y@-i=jrqeD_`bFG9uoA? z=MJQ-ZNSlPfZYK505Uzv-=eCNV#8>A6aocX!C)GD_yieFnr*8g%^5HwQ$YNJ(}?Q= ze%+rVlQ>fF$pzu9k3L}_xI+k|5V4*(_D=|$gcUI;0C(7L)b%YJXwssH=9EiG^3oDGh#R&;vTcs=^dGiXpJ$r-`Mbr;xBJv@4(%W243o84Q|{ zm7;Ot?cwsS72+u@1B0i`01n#;gp7HJ$Yvt%EBLJ@F!@&YMStHus0Y@c_^F#&H zX(T*ZFs8su!q;SZQt{h)2Ku8Zfk>d2>;1-zaA*Oha#nkZPKE^_$ww*^J>#-#<80$&l>bMciyS?oy>CIetTh*kX0 zp5#WKEU@2Y8&k&Eg^1;hiS~NN36&A40=a-^H4vg;6(BrX#Ue871_qByp@1nwR?#Wg zpA0M*!>fWllA%v*63C7Y7dUYEk=;Q#Bc!aPwE803Gg6{TY4t_LWN(EP@hea6}GkJuQ7{h!7}21#y%WoZTb z(n|7|#>U36AVCHJG=dMMoAur{SZPvB2Y$7gaTaBGcgRxVzv2hoK(a9-iIPyvkYQvC zvCs%xcplKTFRLBC0{55=(9F~K7`j7!Lu$qI{{ z`J2#iexDio6_EVxp#{v#2n_+|lxYDw z^b9d82{Bfz68M1|yapp$i9QVw;nVJzL#4B|sYbN2Gywc)oq-8V@==!QSBNkTED(UZ zBbZU|rejYS`)C+|96xk}90HI-Zam~LfIY836UE*dWE}=E4;X47Po+`i>1N6_Q)R-V z`LECLU!URsiqC*)0EjaY=O(;4a5^wu0xN=SLN!1T=RdehgsEv``pZb?V18Iv&}-Bc zJBVY3l{l?2$76SLP)9~Y0oeqmLNSqJ$o|PVJmcxp|HKC*b_392mRmpg{BTmxJTV7T z5~kSz4?Bggm4oWHLauwnra=y#A7VC{!Kl$E5rj0F5po?hd4_i^!dNec4P-zT{$M9B z#B>ov!dNF>Voq9s3~VFufDE=AXpc4y=!%?EY}uhd=4(PboOsM669$;!A^+jXieY2j zp%8Xv9z~^Du%ZV9Xop7fMi32;G!Z4EV?m5j8O|}ZhwYUF{on?}MD#EaP5@`r?KtP}A z4vj=QOh>CE@&Z}Ki*dGQh!-M38fJiN=ZFL$&kAOQSK*Uqbb)cBe+y+|nuk3jp9fPO z!Gj*Qf*>ND9KDzea4!y=Ff@Ij16w`pk_N2c0~TMejpVP+h81HLa0J#adbtQO0uYQ= zqnnTd5H}`+*gIpx0g24b0T2*VWERChmoc1ere&}KMyG>7pJin(rn|Q3(Dm$y{vt1& zavg>!0NIC$0kiQtZip+0@eKgMMxe+15cWfl7nqzzw~4P~^8n|Td7BtYaN~elvy6mn z0817)k8r`wr4i3q7Qg1iG6al1h818?0DH>l69-!yRs`69Ono1NBnD*q$XcT%5?Z5K zBTYd)(agL5ev@E1P{BB`ozRe5j=AQLW-b}SuK%_#j?t232Pzi6d;-jbg=9Dg%u>wL*-K_4Fjhq(Kwa`r!vc z{0Rr5wxksv-V%bsTn_eO@Er{u*}!eWp7r9F8G`4-Ji&%7Cm!IUhoNZR=qVzrYGRF; zE(fw{Yy&lnW-VqJ&~l>>3Gp)qLp&y%7(NRkc}z_IMtqR5=Ys?>F1DeUbi09p=qDFD zAb^Qkhc-N<%D5-N^0Sj;$7l=CeW^fAFpLF&u6%Szkg-pU2rG<(wPcas4)m*#NHwsV z_Fy%zMfw3fXsJgtZUE(~hSdXx8Wj^0Z0kU=2dF{j2s@sDkTc{H8EdBHgjZ4;w9t=rYGEBz zDb)e@AvNNQvn$qU{S6soCX64`K`b6k@P7~+dUA>X1RmV;*#VED;GT~U2JmOjjOWpW zZKE@uM8h`5xUG^4OhM9G01&YbKIqmqVkIUk=>QvGUw}OOlWJ&N4Rx&mVUqv&88uE9 zY+`65V^R_dC?cUK5+IUplura0!{i%C)c2Yn4O^P}f}RZT*?GG2`0-wK*T)YZ zKYo0=Fx6~#<5!z&jwLP2l)TnN*qQKO75sJae!8)uVL#`(DUbK9E_LTSDP=hSn2cKF z@_9=(th+>2JT7}ig&x&6HEHdVHEGh4UaS1pI9x56(0f=^wZd0PKX0>{-|(-&vBf~rh@I)1X|(RQW3 zGGAS@zFlR$?&rbti*H-6$uYU#bM@NYD|!YFO1bq%gFf1yD2{h}b|`+z``reaUsnKX z1;q{dii(tcIYo>7MfvGl^lIYYJ#ki1d@pxg_QWK)JyO<7QqLP6quyAwa=y8Q)6R^# zH%o0*@()p`R~d>)_TA51Sgs*uxq8j>y4npDzQt2KQhw!IIm$Hatl3`e@0a&=Q^d)= z!jC^{tgTkfm^{TZZ=rGJ)qxw=P8LqvuQ4ys`b=w`yz!cjIni3G2Et2pnt7}w`n)-Y z?`V*Gm**sE^%oD5X}Y~#Dz8>a_;n5qUNEh^meeMnebZxjZL?$O*6`tDHLY6S0gfSKi{h>lXdJQ+dmMW6E7)s{-dosWkh`Rqq0>d;V24pqH8kuW)Nj%oVLY9^)^S7)iakN@bFnkl-}3nc>_= z0yDS{X&&ZZpj;a%(p2I-H%vf!;)?qR)(FcQ2#dxoR48Y0eb9)b6KWKNv;CjlW)f&fCE^}N>GssMP z7~0^hx?TU)txQ?H^iMk^QZalZHD+? zJ5F85yTto&XvW#Rp&xEW7S@#6uRCO(9i_dzw0&QWhT6`&S(;v%76T5cEjFK)9S}H^ z(Q`pRD0@i4V0ckk&o7zOn^g*W%}N>mr2wX7d`r;#Xp-Sqmh89YQ;N=sS3C*Z^XD0L z&DtumBhSFCU$eGt^8V@1euOwhYP3%`Rz4J&ecHOqvO1Qk;Jq~cV%Vi!vrarDtIZhr ztgz#7SloHTaK|a@)GL=4m}<|4%(tn_A3AnB@Tk92=nD(0-yx)N;jFrNxX09Q{5Wv%W!Mn6PvWt?^Pid_3OyVP!~Wx&(t zQ-)$^Zl1C-nARfbthw=ZMEKlJ8^N5}LJmcFrG-4J8{{r^SDfp-uz1e~ss0UuA&T*X zy99@&;s>p*`&Yl{x|FY}vTsn;d03-MB-EPg6)|1t&L!`2K#IqBr8Tm2`bc!ex zgJ(w+bc^z4EpuJ?~)IiK$1;t-q^VZ!oxcQSajETCtBc zpHlKZ?96+)DBDOpo5P@k>KPf_p1iK;pklvsTjE~JzhVtE7aKqSsIHT8u9E7K!Rv3XP%!QsrI8&7n`=OlhQFdEVaFVs^GaIWwXUt|>!`IyV<<@6D6C7u! zxTmo8Ny4v}Jg+QMH8*|o=sRf;672A_V@3QYzX+q8CsNth)vUXuv)7nOXRW(5b4PfE zf#mLjm6E$}Na#=Sca5FZd1>zPk6%81om4UROUuS-&4+!{8)K?ANglY-yX^+2bGwVz zWiF{R{=H_wvHgwO@$}}l6>DX;Nylvb^dV;BhePvz#`h~%TxfnId8|;6ddVjzc4Pa{ zYTtyJ-=|eR^HPlSX!;`g{N`lpCBNq}8@s;Dzfq!YVOTZk78&8_4Ujuqi z-<4|d`54pGrD5_lba(ta?Ov6N70rDTQZ2q0W7OUS&f9r!w*J@I+r=xAzf6cLYq~1g z5)d+fXH!6n_Ri95!>{VsB`S`5v5M;|G>KDt4@mNMM^-)24{m*_cYKNd*QmzCs$fY? ze^;LyC*E!74Uo+VTVkW~()jC~yE;*))*YO5InYenAmxQZ!_h0LYhEfeyl`G~p;6(Y z)Y`{~Zs^bs1`3(yIF-qNuM8B*^gd5=3Jo^rucGgay3+1pCUa3SEvaX(`P|v7Q^S)# z&Q&|UboCq4JqbbwGzR*0_sX1XJ;*IQ?mWNA-UL&@11py%#k?`K)}1%S$7s%sXwGOS zj#{Cbzaoz=@aG)ttC?-kPgUPqSd>2He>I_clR(Si zm-huuujw{iqR!QK!DW2Zw}LkVyalJWG&nq4GS~R^x~N|#zi3jZ3*wbx4!TwCI`lcp zHT}Y(%;u^5x6LR;YEQbKQ->$6n<=MI^@6K#{*v1^O$($NA12z>bgghodPdskl0i)> z<3H7YVPWU2nQL~o-Yh&d?fVI5#kp6z($3dE$v7OEW%Qx6v9Tn%*i(1+fY-^UzozrN zQ^;zgIhLC4&?}rW^!N?A!M9x9a)-EtW8DAZ`}Rmm?8d_UG|U;jfvY4hhngQAtYWKXBxt*qNlpFMr`JK4g-0Sl?EX7A?QuM;Ns zsR})sf330a#hX3Vh3Xksmb%MJ7Z>GJZri3@5XA4!ow}80^K(jpbjeO-+3Y1!qWs-% zM@p9nEgUDz*^{1U8y91lA$?XxX?Fe>sq=I12TxQgjBT7^+yk&bxm*0UUQh8{Y77;pZccM&+x^`K!fZL^W6+{uVpRBo}kq( zF}0j`%jNbm=gFkw$AwP1-@hU4X&sQGze8XkCq`=U5T(Cfz+`g2lyBhuNk^Y?jZ5T< zJ*ht!WU5NfYeDS>J-tez$S|xF#^KFmE>8&k%#S)x(WdF3-4~H+0Bk!!AaQsTIt|MRLy)Emzg+j%T%71fq>FE(t z5UUENZcJ&gvA=rP@zbra!zCYrgad-4pvad~K9zk9@dsw@=JWg^u(a`gG_UcM zO5GP>UpWTsmdZVr+2y-fHPC3W1P>rjV9w)!{XJf6U?Z5;PS;6TI4_Cjp{#Gcz zYr(V@&P+|)E{RhwY)<8To>ZJEb^Q3jED>k_L%^E38nKel|D$hS8j zQ_I!E{h@d0_pT6C8@uF%clDJeB#N%)3CcA#Ep&}hnz29i>%Q$@??0W&Q}w=2FquP7 z_GzR2n|Yg>R2m8vB#xKvO)PZbtK9j;J#Jj{%7QSt>-TKed|k9%4mLJ(*x2l1H@+S+ z@=dV$!d;o~h^1LZ)oY4hiOPH~Unmp=0`n11=n*VRo0y=y17%(TYiAqy#;bsYN6{N;a$?h8O$f_Mi9UR^$uKC+tY~w3LvaW0B^6q=51vl?6{+2}#!uj~%BMazg-1&_+;N-r zbIH@YddDWzzsTekU60B@ z|0Z4U*iu8VPOtBcapk)xX0d!3w_^Ic~7k6{8T=A+k+Es({`0sUO2zT zwR)x5*{ZI#i4~L;kv%8Gl;_Lm%XmgixF?goUtrpEdhn5$K~tYeLqQ*_TlHT^)E(Yd zqw2_Mv9GkMPJPARuL~DT?jd(xKD|?sI^(qJG3COzhe?O^OioST+Idj9{)L^{_YL;9 z1E#K350D9ek-FMDbiYC3i8aS=)~s;$RwH#wP=9vj>4e0#ZP8NV=ep(Hl^ryr|LEG` z`HRgCl@9B>OC?lO11}BDI#{%#*?x!6-5`s(w$F+)q|YB&=b1LEHQ}P*Hz8TaHF`Fj zbw(!&US})}pQy*_aErVxT`b&X^rk&dH2aH|A{71}*|GhN?*(?W?T zpQMQfQ>n^T{EsBHKMS3hkz92#q2%nA{U@{D=g-iXntLFVrvB^Lr#*LgcZ%iOK8sS9 z-L1Rgd1Ors$EUKN?VV;zZ^}r#XyJJ4T5{#Y zKJC97C4YSKOU{NTWO>cyHivybNuE`o7M6MAR+9O1j;-Dt>zaG$Ng;v-b_RDkWlrsi zHXr6ZQMCW;tF)w1f{)Ot(OlY#D<>i-;6}v>_mRCGY zT5xboDAC^m9w7;Hzdgb+r8P2;DlV5sgJ5x4f&3o4{ z)&9tas-7*oJ{L{BF%@>AFB48`)God2r|4*IzwGwW8_B!ff0>lHh3C|CFA6m} zrmV^zsL-@Y=>5zsA2nYn)N4O}$rZJlmp=K>w$g>9O&MDQ|I$1$E`&3%?Cq+9XWFM- z;@Vwc%>TAM$&{~niFT_MqbAy&Tr)&cI%e3Suu4q5QZ8zUb9nfK5>25>E^5l9anI@$J#!CE z^O&kgT6N^6i|X?&mwGupwQT)_JfHP+@pWn+9`ZObWKdkcyXSDVREbr$LlY<=I&WM*aJDXS%1H3AKOzBxHxe2chT@;9nknNV zF*siL%2kr5t)@=V?F$=b@b9bnzS_USPON<`c}bk)XT!;JOjD+ZcDoD?cV7384(3R2 zsh3M{+2a1No45K3@7!P63A&l2eZR&Fe!4zi?3=9pcMp-xDSIZFF1)dOZ?0CHTkVgR zo^PdoebZ{*TB~?>=b_9&F8d&tUl{?v{G)%a$Q4}iuqSM z^{D~&`aNqLAM@0U9cll3_^NeCC-0}V`epIKl;szcv*#pQuS&^$zd&U8k=?kQvwKo9 z$t$a_)L!ioRL(f3TgkghFZ^C&r+kHj;cj_(U8m!doB1DQ9N@4yolw;N(rdSAauIi( zu;AH`9<>HWfALEFygJ-*BCP$^`Sy5Ha5ksE@?eT?7kAz3xoxj(cUnB%$=_$<`msaj z_Rs6ff61Ob&9B{iZJubV{~gXDJDxV5UGCAR8_KU_Dpi{FUOS(Y_LR3Td{tXD<&9wK zvQ2g~Rpj)h9#yG`mbqx) z=vcb;>V(2K6a1W~W{0jk`&Y>4?SVJM>=z%|dvjfF_JG9NqFmw3E!Xxwt`T{b9`t0L z;G%?!TElBIckt=oyf|&&TB9WwbtYe4Vm7_^<=33W$&LAY>r-g*2cP-u{yt-GW;@S5 zj?&Z0=iK@RL)F_#3gwd)+X*!MTJRyS=HzS9_RGB-KhpF<^6F2I3mqgkzHPVGJ(E@= zanjn-z+C&-5t`L4kB29Ux4c?@#^G_(IfZ^sk0_^0`9>dtqgV1-nM}9pcNO!Sp8Kl8 zuF!aRZL%HDr^7rd9pkq27tM&Ob>UfQLv^g@w4|eyp5qU$`g<>rq|>rJW){Mo))wkC0B@rk-yWY?DZ zL=%$7)^A}+w=XI5k~-dnsP>=KEt*i*0uI|!YlU(7xmjj1g1+FhDREo&PvcqHNOhdR zQ9md%^z_9cv7kk!D?VKC`#_4`NwVsi-qxuewR6tUs&9(9LotTlpRdk1@+C6T+kJz( z%y*Y^;A_PtTE6n}4L;MRWgh z!*bHSb7z7VFF)Vde{*$-XfyO-M;x!wZY`f>jJyXhf6}z#}99-Ny|Qb?R8#&+f2R2xV)`jxfgN0*qoud z{ma89{S3a>U7M6DW%FJqXH^~xtT|V3_-ICYEWb&mH3ZZuO5 z`IjA;^zTWJ+3fDegX}J7MrC#gKqopg4|CKoR z^OnvJ!$Zznt4@-rp&y)k8<>IE;8sI-jI1QSi7X6Q#N| z%W~`Xi_upO^@~;9{L(1daii;qXX~M!bDnL+bC18*&{^6T6z1f(;-J&y6*MRF>&q)# zye#5mnx5!i^FMsV^YbQh;npS($;O+SM?60ct+^6j7`J0~^G9l+uid=kZ^g+kUToF6 zLT^0y&em&soNaTkWMN@ZOy}$1s4IaIE1VZrKJeNQXVhfg*JJeA<;$`HJC7CHug7}6 z7MFNYI~e99-D?+@-F$DERAa$$7(+%sFt8)$wyc+T`PBm^^U|7~H`uzR=&}ueM_@owSnA4t$PbN|t)19Y4dQx_CM{`g)BtCC>301_(^anHn>gUaBfT;9UH} z;90~#dg#x|S1z0#2+JreKP~U1rk>G8UiHmg$JIq}TxaeC`O4Oo>muz!T_xQwBQJ1S zmW21#cYg@Y|K2({~s=S~dW4OO4(^TU6ZM08!0CvR!s;n>~FCCW(s z^6{}1Ct|zycI)vaZx?mHseACiW8)6du%2Aq%yIi%;_}R5Ke(r8Xo&~H=&TzWTxeCeXJWyTwzA5|v^(>pdcz+%&i+{!s(RESw}Ph(Z=1xor+B2X4*2JU?mz z-)`CN)1e_Py30#W^luimJ*+wIej|^Qw|0_CU!;)(tzkKzc76ZuyXn2T#dk<2FQ#9! z{e0^1j5~be2YC`T%jB!5XSSqF(n@!WbGr~kIlN(WZ?$p1u8YHk_ZwOc+-T$c9CmWE z-nolM!;{u`MrIF9dQ|vTT%b%q^1_-(0VhY}lF8+piYJ_R?U1uRE%0v16uXHrw=G`p z;rux@wIyI(d z^%+lpWUsBbH2ZC5edOV@1wU=imGh)8o9X$gP;TSP@{ob5eS^M6C%4|qjt$uSxmCgR zrg!H%1EnT~NvyKd(fez@4Hk)=d&u?X7j6r@yi zY}9JDS!amD_13e$9B(gp+-P#^L2*UR&Hx?vfQRi9UJW%RtB$w&_N{%hdqC#`+hbpQ z?#TZ5ZQtHM(bSu-&ZJn98Ht6;_ zublNttD1`k?l>jOUaTqDJ7diqZMVvm0)IirW8J4Y<5tK!eyrMkw8q`?wRC4)-K`7P z+W?t>-g{Tu8z%zNUV_Tc5|&5>?m@vcudUU{mT_*~D0_rB1r zlP!52?F> z*dp;dmA^&qM6J=$9Q*LL=+k>v1@h|DH%Z<;J;z-5(sxyRx$RnlSBE8E*l{VHrl@*Y zJgO3SF+SCM+`U&>t>3vrgsNR9y-I5};%+Iu(>}lT*pyodtvaEVqVmfWwDPiVk|^|F zQy+&v)Zz+ug-B_ zDiOrL&xD(%9`@Go`s9U8GKIt1x+$wugir5UowrB!Z9I3@iF<3qW8IFoEqQ%C<~paY z>(hft_uU_b7e4j%`QS7zKJR1L;ogZREt)2ili$=>ti9sb6zF;=^gYjlOT8ZidJ-m` ziJUacCf-eYk~F!7tK(~p)5n2KujnCxy3buc@d|BoczF6b{ki1c?Vs$_FR63vQ-Yw;dh~JyQGlT3cs;*xnJYCCm`cC73 z2Ls#(bBc?)1Xtw^Y`-GfBR!>MV$9(9H(3#y4H^DTbIX^%REYK+v>)i5ES6aN?9O%b zZO2rt9zUQ62Or+1DRtcKQ*%$<&j?#?J=(Ihi%s5FUOfA5WySz~%WE~=9kX+{OAeK- zT)Fs6E3Yg^-zkUUA-&l$(#jV#vp)Rluq;=-_D$4J#?g|~@`#Ax%QaaaY@1xRpB=B5 zF)TGa!LQ!mUQKpGm2TuAhpf1Pw6^iZ4NI&%->+{I;z zqXT1sn8*Uv0V?GFz!-cej_AxG49sALPkhRX#7D zyyv+1rsROf4v%6LgQPiS0}F4Im}&&ZXm~2W-e$amyErvmP;7nUN)KuIzzItWeGY#p z-BxV8d!w3|>_?w|o8sVjW!ptlwiuVK?Xyq!$bC(2Y<}J;7X3bQ@brsS=WY3vj8?mE zyxwu`nAo(!Wz%Rsd>RaAJ@k04I`?4gp2Hjkb&{>N6~>E-(!cZcg*?iN7tJ3yfAmOq z$g8{(HTO5`?+go_)Z{%m*r5GwxrVUuot-Y4Kk9lsNS1O>>YhC9DJ0cDP1dZ*kqui& z3e3?P-n9Rz^N-ENM?W54?Jiq%eUEB<*VLQ8$Qw!oE|6}K1tQ`jY?HbrLW?S1zVK8z zsS=ZRzF}_e!UOz4DtTUuR}6Pw)W4{a`|`xYRhcDgCmviWYBkwt!J~sw8+09IN%g!( zG7j--q;Vb`;x#=i=5M?>Emni8)FjPl^A)ex*Et$F3cf_oS!|{8%sYGKT(08Gu;R-{ zgudm6e!aAMoJ#N$zj~^@q4GH2)v+i(x zeQwn@?ZPI`mjPFGKb={1>TYD{)37JvE*thbJn&hvyz;0->3YH3Pj>}hJ~2_gav|vR z-e-kcAC~GFTimHAKA~=?Y5d~0SWxWcR}*i!9+*LwS#_P-GhXLN-RYNQi@Q(l{c4gr zvq0tD-2sbd=`E()3trKZ{HWW^IC9*4L}RmQeUHkc_r^%*hwPYUyneik*I-3iswuheX!PoZ?*jPP6JgcUXhhf%m>#u@%Q!SDm)Iz|&UwJt+PC zxU5B={YtF>-QVypbTywV>HS3m|i>ef~Nqspu(TGy8fc$;Ff$CMU=!j^Eb$MTvMRwWmotQmqTp}|GM`sX5_ zP1?fZzp9iV#Vd!xh$N8-*IoH*c zY^|QhXR}#{Z&~O!@)V7Of)=JFkrU3hbdX-|^Jz9&BBMfG?f2Bm#9w5b@!jDvGi~~W zV6F(w@`F)r_I=8ts&AE@To)zj@l}zIF8XVrres=ZfTE9!4t>G|t{q`1%PlOr+gfK8 zPg|pA`&vz;1N76Oz*v>{9+nU(6ZQIz`$;7rdPBz)tw#|)g+x+sp z*Y{)k)T!yIuBxkh?yfpj-3kQwKFBa>(Qe0VH^p;&7T1nQB$5gb8g36~Zsg~e;X6^t zgdR*~uwhK{(1-zh$@`wRTM1~Bt6I27B=wHrSHeQzvL7k;GD>nuf$_IRr|9Fj_yfRx zp(<2-(Z`%1g#9=ql1EQa7Z&bko*!SokQua50R_Mt^t^dW$C1m>mT06or?5O!d|OaR zy<(^m7d8TXR&bz7;C)Nk+_=gH7P~L$oKPkXwhyE@{0F)<}9$-Lv&~tX`t<8G~ zC<#!LNGowDCcGi*VG&5EX-NPw0?9BxQr5g=PPi!_Q+QKX=vUTUG6A;e zLHKA5Ob(rknc?+1f`TCmmz&)3LawcsYk!rmRHElM;}K*TAtg1YhX}_Tg*{H%MBFg` zeyRVED~=x-LAiVj;v64&Q?eH19PIxPocbMTE> z&mcXa((4Ea@?p1JD)&Zvun1M4j%&$5Ln$x_1Ykq$DiaLrg{{|+hFc!G3*bN_m7RNl z+P0S=6QVRr$xo!Qo^4$&m~Vw5+>mU&LgrfRm-J}ZJih0Tbj!R9)=NA>5KtT-Et6!H zfkG7zOz*h>+J9g`&2hHpuh9l02&hr_Cw=Y2fiD4ekxlJO0R8RpT@R5Sa~H^RmG@*m85mF^|2=xo2KNJnjOC#h_b8Ig#YmYXCyoLh z+D26+fT-AHuM&ct)-#hmLki~y@@@gWLhR_-4Q*8Dj+)WL6l6(SYyNM z1~WIbU_fN>y@WQ*SoHTx)1ZeiMl%7_{xJY15BTc-5*)TeWP}p1 z{C!pv&d463--ACv7VWi#-ZH-R%7Ctrf&_RP#$zgeXALh{KR73`um}1$N^s8T=$XPp z2#H_gPc2ZfJ3tS*r8pdoEWh3MPZQg}Z2m!>6%05~2J7()*dH!#SVM^tDx;iZu`>V; zWC^J0A)C#N&`LgWc(aNzD1fYAu40J{AI#f~hgm4S7AsQIS{XLU5;@({3; zfpZGVn5j7ct}n3NJB%_7uAh)+%)70I1*hHL?SS+eNR7*N3(8n0^9SuSV98N%7!Gm| zlyRZ{sK*?%FOD{yZ(FSCzswxkBEhxrJ<5AGt&mSoR7jyCgH;gqYWVgJAsYm#aH|AwJ zu}ccp5NaIW^}zosJRVXM=vX|S5v&PACUMGq#lOLaFYkxub^PfUIMtNw4p+%%*tQX5 z-a;CjDR^V_HgU!YSXK^8E3No7%FfNTfLOt+T_SGYeQ}0Q^j_uEe{te#WRkj5p98_h zcu!k~0+vkqyxd0SB`CXO8zASvhg}4c-hv+{ZAjA)f_^@~0qp$^Nh-~A27oKQ_Kj22 z5-`ZxIe|f-AaMX{fTd?OD_q(t%R}D5Q+-1od7B*sJr;0N=(%}1e-fFfI4JdhVPYQn z->}KKe|8g}5;Jve|BDh~w2h^p$@E?aZXxJr(~Qs(g=Efsa2iDa#I#dBP2OIPSJn@3 z8pf77ZMS+WTkB?$KX#P}d14T5FzH0aRe4JeN^l5k4@oeS?iHpp?-owxr$h1(>REA1s{t&1@zJTcTrKkd{vaydV%EJp-F)m0do7 zhW{0*VWc+|`(~DPyCSUbNHL$42Kz?o{*6db0;S5QcW$@PJG}f}KWcu3c3o1&#rZ)8uZi>AXL|TFpx~j2nMe7>-^~6-*2;ONB7lhrSax#@ zPrZA#6zCa}#$yv6lpq8hN-DwN5>i=5cc;{~nEKXh*rNQIsxR`-ZXtf!b-cyO$}Xl< z0u>1wXA>2(1lg2O0rX;u0DtC7shXls!$#ra7dGMGBks-YX5Kw3%_BR99E0ZO_tEf> zoMWD;>ZY+wiTr(jFmGkgxUleRLuguEU)e;&qY_qv4z7UJ{X$8*QR2QtVcjkCRAiE} zHk8&tcULfO#Uax}ByX4Ptjgi;u8EofdbStU!6f>DksC-Kw5!2;#@{RS^c}%%GeKz1Mu%5OnQYae|1f<;^jf$6>~Q(N|o8>G!^|e7Nj)#b)2f9AfW1gtVG~ zNlg4iUCzEfz9XV;e5LKN_qZL)<_e416eafMJM!;kn-xZ2ng=~ zfXue%P-Yz=ksthkacU_nhEnpCJ;34+i?vEL{@%uLJ=?);hhP%&$VpR?*S@V3T8agv zoW_Yyauq?Ehu@x)3RpBff;tW?l5C*tH8-bS_p3vL+bq_RaclJBZ z!UB6tmdJ&cvI6Z!uUX=K<&~7y82SVH<`Kx1{4JS>>PzqV6etQIRhS!)(vKd*q=qUQ z-#`=42+<3ZIH$URn%AYAi&R-PCPzRQxRxDh!NM8--VBE-cUICJ7S1 z`}_RB!DhszQ;5IU0})7o&^D!I0Z6`rGxcG?E&d(8UHW!V8T^e&uz1W1uqY;Q#yOuE zPb@xp%J>5mx49a@&OV5g_qaFVP{!7@U z?HkC*VsuQk#IRsF99=CTq(=W~2XN>Yxfh_4k;^OegyG_eo7#{Nko^V?hD=6o+u-B!taW=Ldzp6T3M6XM+2HfMD0sRYB`QtTj>g)=8XQZ1Mb0?f zNOBEGAy5AvOBWIIHqq4G6=LIu9Q4S31EV_J6{^6;76*BQ191r63x-rW`eBgvvY!cR zrsx;@2yG3C2A;+_*}gVGjTg}DzvQXjN(3@`?1-MzcR<;8vuar*1?pwkTwR;~`9jXg zr;)#09u`^b&+A8!ztRSQqhRIvmuBs@{wrIQqZYt(GarNu&vV0a{7e46AnaM9?CmFL zD)iSQ@%mQu1BfqSM3sid@l_XEH4zUkFA<$OZ*^zTd6IOCgx0GtxvfkQHt1iaT&o!2 z;CJ#!Yt?}|#or?Rf^9P{T9#PXuuwZ-UBm&pd4FnHswsT&O(o8R9GmP&2#XyhNHPG4m>e3zM{T;*k zKOH4zLHd2Ynd+w9_}SnSNSf&QWn!DELP5-moZz3nTxoP4Y~2fP(p;L8fJ~;-9dkl& zqjgR~y+S+>>C)M#k7UpiA%+@<;H3*eIE|2?5JvJ^H~|s#`|qxXOY`X}mS>XQ69t>M zf2p_x`7y|p%I?2Sf12R>bc3v!FxyFj6S{U^S^e%fg_p{ZNX|6SUOfHN2x{V@XZ`ODTc98(?%p@_4ndor%F62R^f&JViE4}SJR?_S~N9*OCkZa?yov&|Y@LOZ) z+9t*e_r;xXeA)2>y4Y;Vka1ha6sJorr0HTPpiz_;ZfkFJQ%mQHSUaJ}T z!w-V0Vem0za3eWCG@j1RrJ=diB4197NflatP4q;;-hLev7SSN#xSTq}1QP);-_qM!vl1)Yh}oLtC$$e+Z|;%7)zbuq`hbr?EETxy{r& z?a6}4(;MK?lHB~@xlm|=zuJaBfHK>tnfq$_GLf(|5I4 zCRJQhlC4gPS`h|!3snw$coFt75}@P07Kb@)k|SZ#q2k46lS9C}RnKEQ{H#K=!1|#p zI#s2}ww{p9L(Itv)`xB@MN_XIUkW&fwYMxhZxSEzlzUh$dL7P3#-lS=b^8K2l&Ij~ z^HXwL(KQOz^4cH(*q35-$yftE%K=|?6{;8OHO>~g?~nGHt&Do_yWaz$-uw3Vkh^Z0 zDA2A&=I;s}-*K=z?6!6klWv^y7A;PHO34r2G+c3j%Ws|tD7+T2Ga`CYGj;x%w&fJD z6@S5$N8-+I#ndT{ZjlXY8PD$`A;Ms#$@ODCXNLtp>+(8^dXZ|DFd5fkpWFBa9ArNHt z3mqw*kaDdQy~#RvZz$iL%jcMycIGe^C_P!|c@GpX1kEg%uP!ZYk9;Ynk-hg{`5qAg z=P$PsKtp4Xm^!=X1>AihZ?e@l!#fIVI@SHY9X4gMR<`eyau-t86?w)EK28@JEdnpR zowvHj(Dfz4ALOeP=!(#u#%2+yH!E>&ko>6O5vIuz%bt=@06^Ymk%XwiFV)-HB(j;F zxI@3ecFnYMRiww$Ad?(XJhSBA2iuP?<4m(6t;}M}W!F($5zWj(t-qkb=P|@|^oC^X z?rz9L_ZVc;2P9pX>jhUhW8er|@WRmQ$Q1Q0>qF#Sdle#O1c#uZv} zTHx5@^7RZYIo{ts`{E;=5IUg;k04CL4C)$8O6LI6%)z2>20j{tzw%JaMjR1RG!MB# z<4rWYkfuL^Z1F^3J@~f1v2q%AI@$#0shSV2h8hgn2_YdNM9^c*#5CR9l+v&|?0*iC z5Nx60ZDcNv%?~!qF$w>RC>S;@z&Mc@>V%-QkrJr*fDBQlzIqqwz}sp=Cp6W&L;}M>l!n;#fA2hY7QI@5MCOH^F}Kp#%~Oq3lsjbuJ(oXuD#*>L?fP#|#q@(6r~-aE@IX0W zxe%-ra6?^j|G>Xnq5Nx7Y0-4QiVzS;yS(6N+IEer|S> z!Q8J~xB;>3d7}S`6B_-F5G=qe9%?1NYfw|sfF+EL^M|dR0VT7uhwt0L=IJ3ad@KlR zJYbwjMOt%A=GcGVV5#(tGTF?r>+S(R2w}{uV$Dx@fB2)0q2(GmZmoO?IxR;PbWft7 zeFhtGS;`=0KCZpw_0H6AS*`|T$Xot>CBMqUK^QcFH05BGm+AV$3xtYz1T0qw$50Ge zop4-P!E!yW)o@Xa4&_;eVfY~}FU_%-%xv=knjCQPXxD&%%%FVSyi8isrveMNPop^tG<(r+=1TpPFRwaWT>QmcE}EGE{^66?&*cIl58Y2A8P;qH%Fq#~e>9~LRZ1O>@e7HqGjk@-i`D>|CGvqzE zY0f+M4(-TpP9BIdU^%|@wZ7S7mlPqK1I4yPB2(bL{2-Ob1ze9@S4)M!Me45>PE zrm%4*G8@R;eP`Oy)m~CveMp?1Yi-SW?%r-@5st*&1R%K>ezNO-!sP1o9e<`NBvcTt z4<5iKA_f^ad4`$x8%mQUHAl{(c&J67s z+MT#EOtZED3^&RA#DQz~Yt( zk`=CH;5aNA^dl9OknrUO=k%f`YL-s!rxb4}jYz1<36@-(+;SSR#; z3kUTZrd?8&R;B))275zEQkkRlPTWPT?BLBG=X1TOhNWlf9zU*7KQ6-z4eI_J@;Y~{ zuX8q4=Nh=ViJERV2B}F0*U2jq$G*Kx4r+AM48o{QK^D3@7UEI5J6d9L`lH^Z>nG^- zyay2OVf*yDsON0B_7{3(w@5~3GJVEcU8PhL4%rne{xG%#d9_Du1LAi#?QMw$Ea3I8Ndl_O8sw@A-50#x&&M&{CTt$I4J+`n=Z4c^e@KA5Lg$jYN>f4p20tSr!k zkaQc$iJ@yj7lT8mfQJ=>>m=NTjOGXa@bHhjoGBLm>|7_l#QatKr`oKe-nY86!^UUd z!n>GOWS6wk*I4nHVn`x2P#15UK0NLmrqwic?I)op^1gK4`tVIcoG=6Mz%MRN7rE7% z4l4`A6UF&Kvr0&K-)w}WtDlZ!ZHi)-^qMT6U*S(G^X`Gq+`N#}rRoN|nqD*pu(g zlBdx4t<)ssGJw=AN0Yd@qNteG=7c60DH6Oe`M1cU=+#d${KaOj>YG^o6y2$Z>$ zb{K)=Bp_zx1IQz1n$+@fIfUzLWETv0vWJtCZq?j-Hzs164sYjko*_E5PDI{m-u$G~ zCq87dzi8ED?c54*iR&T@EKW0xG0p7FP3kZGE}|A<(i3m0vX^-%ctZ@s$+4382z^7m zN`K)|?p*prY5XE>yjmkHctra9h>>sY@W*<~W>Ma|Rn8a{kCyaz6Ekb~Abw4Sh?~cn zuu*dWA41gX5G7GaF?zx4sEW;+W?SlZhUizu$8BQ0-A)bZn8U7#8FutlIpyjj}-64(vO__`Q3a=mQxaxO7Tn%S#3G9);> zR*8SYS^%9z1}HV^mCmA9Dvso(oq2{(f=Bp;X-02|UfzXK2CwsjTq=%qMn4@3FO2Upyq*1*FL9Eqls) zPI!kS!wQXz5GBbTWpTsh2&PQDLn3wwHD);)|9#Rv^T3lTJ>zB6i2RV8bIlXgWM5@8 z*d<`^+pG)$^uwNOl)2e!kl&1T{ILtF$NdM16Jn1}i4Ic}Uqp7Ms%is0tKsu`X$ z5pyndp-is^Z3n zThkaU)Iy`0JgeEV&u?^*4AE30N@U({q&!SC@RrT75R&pw1r$(CA!y*M~~)QGf{Cm{=ht7 zrxN@tKe#q4)4MIL9mnyJvgY9b+Z@>+R_xYYNPOz2V?7O{_Qav=?ONJaEpxFn*`}2{ zu%`U+SBdLPQ9QD~7_}n_;8I;(gU$>HcGo<_O>MT@H6$ua2|Vkcdz_ut771jffuOFT z#JPeE$v@krK(A*=>5Mb;!)~(YwFPU)x3y@||8fMIDbV+WbJCan{A*tGb~vipyv^B+t8KbHIA*!LWI%*8xI zKKY~%(3;#DW!9!xLObqKEX$F4BA0PVHy;K#f2C~}Fk9YbcPBEtG|%WwJ{bgvP|atV ziK~<#k4NXr8nA2aZz`l2494oLlCm$l1eueW2|8`NE*FBnYqqFB)?L;Q8Ua^8O0r8d zL!tEEL8$|tpt(0{Do7AuvFZb5W#uLV5KF*z$eoxBF;!UG>KNbkFI zZHiG=X^C%nys6{{|HSINVwgO_0Pa%$xVR8!t9_*wS4?sA8#@N-T?Q9_><&!9HuM^l zSGe1Dn6SQSYa)CaF1-gIQ#7(pK87h_J#rgmesR-b`qyLy4Qle)ajJ7=zw6SeHUOF1 z8F<#Zefn;zn7D|OsB;m8^4g8-;=;tfLW%V9y;pxFGq}}#-HJ(cQf3N8?VQ^-!KX(I zbsa~BtH7kY?*2HvPQ8kNV>W}_zw=)?+CQY;H>|$AFUc~JIEv}RdafDHyXT2Q|u7YY+p-jJj(&3_hyAQM!lV9IWLZLYbo0J zB_wSIpx~MNa?`_<;BbbS&lSBT!_F>XE^*OZ_DJz(xgyOCQcjBw&#`f}mz?3Dhn@~E zL)xZbV?Ms2M1px#N_4mGicx(W!i5YgM9yqq0nGZ%%s{HSM~&0$Z!~Ms!-_q875ejK z(rS)h6^+xp3_P|DTu(3Xw4^`&71OSHitr6?Xx$*h#SoUdM1-wJBMwyN>}F03@f0i% zC1VIG;OxK>;)iW@I#|tOZUos38%}YVX>A^>rrq)X)K^nD5U^*3znKt@H4>s+o*2FP z6P)C-Up~80%umY80Gl2JFS`;ch%Kj{rH~PtRWHv)6?Kw#F{jRB*}fklW`LS=L!d8n zO|Nj`MH9ngcMo2ViV!6)K!0i|_WR;Ev>=>Y{am$4AJ5WITQpvtL@!n`uGUMS1pofp zYJLj30`W{9w|zoS4RxBZrPq6HBdG>$fe>uKo3+|og5 z14-)c5S(fnTpU^6Ln@ka@vpLmX1d~!RXYk?LY3Ndc3XN)Xou&Xt684;{F%;WRQ7a4 z!!fOJGXvp8xeEw0&l)F#;e{GJpJv1YP4;+M*OcxS$j|uh3dp}}X#>-~NZGmBYZlKA zT!D6OrlZJZ?{LXxh4q%7E*#El(-!mkmNsjLMp9bX3nXksDf-JW)~8U9JBJB~eqg5pta=s){QUEyCjK zX2hm45rI10WVS2uM|z+gWLKXsE5TSW#xwlRUy6zI5GKUxLEib`)$ zTR9MtlPc2p!nx9C(f5c!olM2&I;B-%p$M@YmI;W%TnxpXzLum7dLb4#{( zwzx?Z?ajEbv}RUPQ!8@lBUA^ggZN@K;YD?NusC5g>G4zwB{qB?Gl)vn0&B=w&z!Q0 zT?GZY*B@%%f19^-e;Ld)@2UUl=Oft-G-|8*av(*kWf7k)ztx)Ie`0S91xMnFB>ji0LxHYdc&mF|JJ~6LvQ21Tl!Fx=)UK4 zMwNm1b*%L=R<+Z6fktY*<~2lRf%pkb_bNC*-(Jr#cDT;}##5*%%^Z=j*WYQxDP2IvCG2S@Kv3EE5a`Bx-*>0m3Xj-gJ?dxwb z*x}Wd*Hy54u1dL{XW6j?e2XH0HCyQPa zwGBnc?f9pUB4BI5`I<*JBi;E1-H4$C?3s@YTEO@K=_fpu`3Wu`gFV>u3lVg;`HvpP z=vGEz$Z_5GAO(;u{>yFJ$&E;K!+J1|=gNX_b;ti-T?5mch^-bULLogLD|e7BMS`9u zCZ6X_b1Z|Ei*LQCp||iZcCQh(&kV9PN=YW>)+ld$$1W$JjeuHDL?xU3i2RD%4C_Jj zuXNixda{t$~Bo| zPG;?MGU7MV?Ol9U*J3R>gSvW>F5j&-*HP+SJXW#u80pOm&eEV90Tg%(#t#e4w3lnY zyI;lK1_9!@V9(|R7JSF8TzZaig5Ul)!l0wgijv7M_8^2lH-gSZa0F)*!pyyMyngh< z0>v^Q!{}*d;ClW^fn|V+(eo!9&qsT-GEN1C-}`WzRDuDF!LNlSz@XLTx;~A;FMECv zYkCHr0>2|`eIp7Qj30MLS%@dNn_;`>PGq~vrCZumcss1(RX$v?J>!8qHmHBF8ZN3 z#9)Vr@$^iF)_t(%8QI>)A-r?xZ%s8s(27QjP?hFbTIw0K^iy#Rs+hHa+lqw!K%^8yiFakL~&HsKAU&Bb63N!916MX;tx+TLJI4C91~wFDUCa34{x2f zNE6SP@;)FfT=`&)JjGD-)O9gphqc$-zclty6_>T|B64dLE=U$_@;d#JKbL)}$`H>f z<;L1-jNkX&(FNg}ub*mxOym7NRvcBQ__C9Gh6Lw_)6se+1eDqw)3^6E7cw?vYK^I? zcg3z>vZemOgYuI+RDXuF$J5MbW11TcRZNHH?@s0P92UBFS+FWP->6U>wku2Shhq7G zqg54v?2$2S$$XN0x&Rwtw`}?thJ?Y<)OaFf(3H zA4G5Bp27wJrLUKtcvndw-Hf#zXqo-pC%NTg?J`g9B4xP?n2l1gGgJ|}+{OLIAI0G_ z^9CvVApZT+t^MZE97*PT4leZ-Ha&3twBRq9bk5~;Eo#;NUpJ}VoT=*X88CyC0V)UG zATjI)mOot;!K2FO`&S9T-{A8>y%v)6f;2Zcz!9r_yn@DR7+ZvWJtLH1WA?T>7?anY zWSVbc4E zGCt(|O2&!Hpjg;;{1O!JWKIB zZ=??iUZ=sQL?8w2%;J?+#rSR_`XN&vkXDQ96GBnADZ@F2d68{JzV@>+Li{f6kMGuy zK}@N)`D>Q4P!gcc$O)z$x_^`cZ#RB?Chpc{=U0)y3uOf^@lCDy5OA ztQe!Y-n@h;ch{cL3mfxu?DLph{%*8%YU5sJx-c=LN0x-1y3 zui;G>wehITnyiNk29W$3{`yb5@*fQDrHwLUJvLoC67pvg3RJe3{T{l7FX+Jdbc>Iz zet)}bd)(x%6*zuyrRGVh4oe2ZG(9*)IPQVhYrkZD>-uEX0JY^DH5;5YhcWbi?~t5fR5$yld&gJz zF?)8Hr7gp^;{&%aPQsG^#Ftksd$d06sjh;sfyTr%rCBV6a$szC#VC?PqGke*&x0TZ0Y4SGUB>BO5XpEMQfLy07U+*1V;rteN3?{o{=emDxIek&+8hT$_mhv4V#}#VL`D>krB*zidS4?eD z+v`|4KYoqvD;Vh~v87p}_rq8*oWChveVB&1tNFw6*TH>I+#YE0rya0-FpS^56l8Xz zb=8VQuMhnE6n-YrZcSG|}!atl*Uy}KvQ*k`BpSw-TeC~H+InvwU*0Dq92 zZ92NJrO(yvM;z@jRZef*ZoD0^FulFvyW@S?_~U*SASP7x2g-P;yrIiAA#`tClrIx>1h>nI&(nOjzY*yb08jc zcFh7|^qn;!=Z2Y~XUsQA)5Xwqhx{^C&Vzo^kr~SvkyW7)Az(F5b8}&%F3rc(c^{^T z$omX*x=cYF*fMT}s#9TRMKO^5UJ1N_wA&?9sMfBGU@XS)zc3}2@OwANc3OLt!Le9x z`g|S2Y5v_^<2ht^R82P3g0r%UBbj6L>%F+-D?H72t0qB*$OdSPSd-|g-ZHd{&{85b z{1obYSGaie4i@_GvP{szbJHo)4Nf`n8F4j*t)3guRR*3wg!hp7Uy$x3UvQVgFLr z|MkVPv>Yqr$146C=%YL2cOG@e2pLc%xj3-wBDTA(UJ@+7-!%7Gw04eGGGOOqW=vjP zT2T=R59?AjatFbCt;p6gQJ4FsrG-bargMq48L_Nl%u0b!t8%?hFHX8oTbJ}gz}v1c z5Ja)-GL0>A;o;Qw$BNOYMQ@)0Fq?EBu^N&-y8h~cKptIZQaNUez|WM&oGpH_*i8i; zCIjt|iS$Sp9cJ5y&l6)+kB+ua%W`Iy?(cqXem*dbYxpvP+o)gblTl%KG$B-=jQYuS z1OL@aM7)?b@soMonnqKv)iheP7aQabG)l8pfQ^v#Ib{mNQ~lm4YnruxRAxj&bv&gu zy?R=Ec3#?(4_#fio5mZrsFS+;mY~&5yOHyit#-l6xEKL?!z|O@pv-${!R*h|ag1A; zy0(LGSKDS*yaR*nu)zgFQg1bW5uH&?3tSk-jpH`Bd*%&XY|3-*#Rpt1!4jZ&+agWf zvQa*@ardp_fE!Li^cM5tm|>{+7aecwh!IGn4@g!tJ~4wv(4W2}{{Wizx9Zy8sk$Jv zKo%%LcJ#HMafIb|5PrcAUz2YkN_6JA(|IL3s}jM3j=ckY#`kiF<%gm1lzHmiUq`eP z2e2cWeZ8>Z2mfHhH?<3L0~}){DD#-?Zi;fXKS7({L%NSB^MW)_x@8u>XfL(;|Nd?I zZPS`&%V8TBQ?mkAP=|^F8ImlBI^ZMF_hV2(S~~QQWor>q4xQ!PdX?++#+5JC*H=A9 ze|4|OwbBGxu2OcPZl1X@sl=6L%WF9O3Q~sWsa@dmm0#0)f=&OfbqM=c71s`Ak;#g_ zAOg67Anp-5V5i^_tglex06v@m@2uah^$+tp%QOrNY>%zh*Uw9f2iLMvDDXjIj!BwD|hgu35rDZF5=H zqQrn2KNn=G@Qhvkhl)G=Hb3FqQRn_~djHh}TDr;17=qrIZRIjfCM?ZaXG(@G{b$13 ziQ-*L|8B#0!C_iDeQO98MxgBaYCIc|+#Ji=9;%{DaU%`G;(*`RQ)}6;kw)h7buynyrp;yWQN4_aTqj4}!@8sU zi^ddZ>$7Wcat+UdKrYq16ux;~V`HN2j8~1pL-o!>l*Q^j&3sX7XENb@jvcNz>#qaF zIsa~@6#u|xGV7nsOr93Iq_Bf+-?@Ieh`DV+xfGCY?_Am1P!_cc=&4@`QY~U^+Lm=% z&WyoqGV8e7>@uf`&)Sp$f$Kv}iI@P4>?S225X1S9<#!FOiuFZ#R z>WzLHxc@{TFPUOa^Ow7eBPySi^Y(ZizZX7e(Zc@OQfxCP9Hmdpb~Pvh@_%)i&~ z)z|^oO@mDkf_@auzju;?;DdZr195*rnNS1O@g;8jpas?GB55wi#X9mL#*zvi3rme; zli3cr%de>K^{x4we;)uGy&#B>SiRUL`t(FLNXQ+Rq**UKG2g35W1#&R7$vL6f zpK~09&a3-QWKB21DN=ynR`8rG`Ub+91@n6LOZ7el2T^7$;n-MS#zl)|+oK5iGQ#^Z zV#ck4etlNesuEWnXMG`!mp^F5dVtiqsO)Se(^;%9=yG4$$qxNG%`}R+-QIPP9WlLx zeqvv@+32z_)TDp8grfAOXR^LtoNP;SN?*^Z((RZ`CiRsMJvUN`B?KRx&3gTw=6qr< zy|$&IvK@qnm1;^xUYy)z(H-T>X$Vd32GVI=Yv#0&l;EB8(x#O6U|E|Zk&G2*5&PyF z5I1(!r&_W%a@jzLT)ed2b8uv47MV zN)wSrR$mXr7{R|DI?M%dMid(v)GH&;d|@m(Uni{?Q2?2YLkecQ(J+sKd5eSjw+*MW z8#!|>h?Z4d`-|Ew=H2%M2#Q@HjCj1dNO}Fk00?o&2T9RgR(DOQVw#^jzJ0XSYhr$F z!=iof>Zwx(6Dlh{Q{*Kz4oz`x|0ZKW9eE z5N{jyg=9yv*d_d~Wz&F-spVLh1#hWUNJmERLb(-f5OrnP)*7ttp<_I6GO9>iYs%6p zJk=J*B{FT`alQp{ex^bydH(xp*57pzvc+m5{<@_NRx{CCPC4!gbKA<~5iuWf#-pgY z^3dPw1KMT}?=h40+Qr?q8B2L8hr;e=j#cGWHc|8rrSX~Yzj-pKKWRL+s{{SZ&>KR@ z@%yIKZQ-tKOWTDlDjWh+`;^?~aJC`gVS1C&&M!$)k!|>#eL%<$o1j-F0r%XJszi&fQ==WfNj)sT(9p1ckGmIw}!4R zM_#%5x-?|KadK7;BD2>z0a{yeLyRl*j+taXNqbO#d zux;37qFK-VSbu7kh9D2nkh;g9nmu$)yay7eX$jzs>v^JKgY4pZB|m!?J(I=B@s1~Y z7tdxtJOXyTvFSLVVtFO83+L%kADs}$|{I!GkH%@m2~xwAdP*C&y4P$Mbp z5XDQw7K*@ABv-CeIoqZ|Sskz`6{JFJ6Ma`15Sq8dyU(RTcvaT1gx`EE!R?^v2<3}S z_9an?PyxOCS>0=)>b8`jw4!GrZq}Ts^fF)xUfomr)u2CTdX>T(=VjN0p>u%S*l~jV zgYM9fho4axj56<(!6sW=MxHswuGR3)U^A;qykcA+Zlq z+6A3k89CUJ+A?sxZ|Bg^(A6rfRzEfCUF&*46PNqOKMd=Xt?ARn?2ytgpp2i!&^U^! zlH}0)0sifWK*B$yQc}5U(nXPnW?{I1%rHtN6ZF%+g9Z1Nn|U^LnawgbKrhy-JebM^ z!K0htb*!q4EyUoSh=g^MzTt_Ov>WJ})z;yADqcFOVyQc}xH4QsB3oqwbg1Ya8btzh zndK^83h_D>Pgw+$=G%15zRfXT)!PS{Nx8l_?_*u5n-RnCkNB#E*Q;7fYHGua}k=U~bw!;GiJQqs)piHs#ASP=oc~pX6Jq z!*QR?gTK?n%+qHEmsCaqP+brd4py>L(i9$U^z`&Tx{R2$MW-s#Ke*T~gB3za4>b~$ zVwnRnCUuq8L5GELirXK7Kj!2`jW_vPw(nX@COhBc)Yz}|4bJ%}q~jRZH`~LW$lNcR z;g9@|E`EFCt-(5pM)+`M77B`t^9HjEwu5UF57k>l{lX+14hN`}Ssm7P7>gzk<&UENc z`0k1B(|y3~`dgKbaM8<;@wuN@jW7qjjTnlQlzAOZ(?>N6@egJ2A>Glx8_;#+@0&pC zcO7OnScMj(I~)0OguM}kjQyVq@5xfXt$!PIqR5JO)3C8=xc=F~L<5B{dol?|_~)1+ z(A*ze{@zL-x7n9_c2y-1ujp?do&{+))TV`E@po+2Pz*Rm@8fjB03mJ^y9!OW!^1Xjduah3A9K%8NoAnI!p*8Fh6Km|Fj3o zaTTsbAyhzsB;nmGE})=R-XTK6*mGWpBMWou|F}AbU{Qi?+iu&oZQHhO+qQMKZQC}^ zwr$(C_0N4T-f!Gi)v88DMrBmYsD(MQwLZ0l+V9?L%=$m&jSJP}bK_WDw9M8z#k&TM zwDfs)yIlpGUrOTWwZnDdBWr|l4RU|`OoY6^v$aO!1GYoS0&^cBGAj1n(%Q2??HX?E zZlNLJ{3M{|Z=lavvP}cuV&ws411Ef#`=U6aI=8Yof9qH{t(@Lb{Q&8P!j+#=rv8V&f)8IIcYe##vjE z8s!{w%&)#lUDA@YO>0WHMeteM4c`YI5&@(5Q2yjUb5W!Ck@rg|e*T+ME1Q`+=^6H%)n~5MjKY4ThNA4`V!U{b|*@KUHTUmb#RG07%~GQXiD?mtGNIp^st3& zhjKKFaJkSV{Sew<%0_%ow%?fYxFKWF5A~KsCPxTw6Ex0NIRBg2LHG_sxCpO|!`1_c z1?xZRa4#zpfDRd8wh1Ck8%8i35v1-Il(aEO@NY2+CLj-ZV`{gw==~i!~?CxjN+Il=6zQt7@WH6CFD+iqjF1gjgCmZQ8)tIu6gSFkM6N-9< zir3F}Jf9MaA3lQXwW&WY3b;xqzwAs%B(_v@e8uxr{D=5amlnYamKU1*mu&4e}R<_y+=j5 zHb@kJ+DZQnV$ylb@NPLP;6StJuAY9^Yu62<1RRxrw6nmX z=GfjdeVOd^!_miEvo9vKrJuQK$w?X*gCrY<6YYvg3&ZBUr-jw#T6cj~TcQaQ^3u_X zGnIoT6{(eqzr9dD>{WTD65#zO<%u}zNo6@Ix;;&E+QS5-+6N62@HbIZjBWjpsnh>m z4;m8_5dCB&0r81e(*T4j2~@1Fty|Y1TZ^jOL{kD-djmRG6hnJ@fZAreMNOCZ4iUx+&;74O%)GVIVrm}D{58Kab=N`24;=QI|GjC2s z742BF-~xN}jbj}`1zI}DhK!Wck~l4be9lAM{!uPja$(l#r9@J$^k1xpmI6G@$@K>m zQ_5k!fv};W_3p-nw0tyl^@luJ;FqUk~D8-xjnHrlT3oy-EvSgPu4Q zw3jagKM%4R7X`YvlUg4TXDXXmC+X4Q7xG6e>4E(`IPVSEy-|>7{Egs z4fIPw{={c+ADr^`FCHZ$VjWTYt|;Xs`69UcJvcD~;;&d7S;4ngu+SmkM^T`qbJD$p zmPj@uOfF5B{$)r!t@t~{j-6ONjv^Wcc;Nl#xZJZWqH~m%F)i?ctH4*9z|d*)$)>NZ z83B;4IskyKiRi;8AK-RziZZHcE7KE%?l%?Gmm#J~w^&v5D`HS zK1Pm}cg%~^$?Cw&?CU&|5E)Lo=xHG0TtEQEEI=vF(L#EUu`Aa_8Xe;;B zItJU2UaX;=xNxrncP%Z^5x#_mN7p%MlgI6^ZeoUXIfmM`tVkS^)4AT_8r7=JdqT9l)KcEEVV_Mh19 zc$stJ3j{27Rx{BB7+v4Joe`t7xR;;k{v)+ZPw#8mOU>cpSYLo@i~RxR=br*az7l@I zX%j%$!qXZm=`}f6|56NfsEV;l%mpD-ZBf+ALXTV2B~E9v+R5Bwd|R2WyZ#KOHPBCb z5EPI0O^1=LQpm(s~PgElQTd{mGMRlQ{WFmEiXSdM=N1`IT zlykc!Ro?85PsZnRvhO5TKSXiKZ(G8U@0fws=WMsHBxTR7j1nkc@BXDk`1oL;K=~Ov zVMV_gk1sZ~J}esbqTzpL-x%XAMPuM`Hh`75##|Mn(9g7v|Z(vuSAy#MxJIs!i!}nUZab zcvF58mC;&Mz4I>|?7~){J>=^tAGRK_7H~@cqf9KCom{mpXkUmb<*;Sn{TO_#5~r@Y z5V^&jbc;h&Pnxy6QUvy5`!w~d?8aeo7Mh0?-=1*kFT2Pmq#REGFebxnjvCej_+V;a zV6x#wh(6{Oc+e#Az!Ace41Sf}*edsq^Z-wZv0`>l1rH)+UuJ_zGWexd`jg?*+g0+1X;BBK@Sl|n zzG~S*uVZZ_zp|ol*02mdg|6xrFV+W$`oO z^~JfjLD<`C89^hyBdRaxs;&j^r#CiZ8|;m@dNa2P_Rn~WGQ0}X&x3|J6n;bR#Q*7_ z91*NsYrA`l7BE!l9jL2fI!6$-p4T(A3Yt=cI6kqTrDpoen^jXZQ*IuWFo0&G7Z2G% zvoB-%BnTY9H(xV|DYksYb-)jw5+T=oakI8PnugJ zhEt22Pfbm7fi|ctTlHbbbcFo^J64u&VCyaH3k+1pmfK*h1-86^K@E+?tz`I#^xkF@?#kjhwSOF}^_+d~qmg1LDV+e5^>NnhGj+H4MwDcijYCf=4f zPB0ma@n6J=$TOgUAcMVsB8|K7vB`2q9N?!6bAQ@nie$4)}MYKU)-| z!l*~^Xfhd>6GEj2kJ(|5I)Y&64_sGvamwTKWKF?>g{KJe?!;loC8bnebU}Y$bd*qe zvHMjL7SEtSHlq>^dP=$y$S0&oo)Am^Y?pO0>Ljzd<=u>E%wyDly0DWGS=17AIBy`! z!_TXzsUOdPwwDF0svggb6Xogwg^jSG@9hAg6&dVy%2xFXz80oUHt+(A475@)#h0RB z9i-&avnIuRk0nGFe)OpXHC+$i(;lajF#do>gN&1q!OQZLdafGJfax1u$@#4 zb3|8{=o9WR0>YbB$ANs~Uwc$)jBivIt5WjpLP@i0Zu}$7-g&?X^Co0+0hZF4MB?ic zn-9OD$Zp|s`n1LuJQDGm-nhmSJi-B%0=4Cd>t27xos@E>vW{F*EkZm^Mm>MV_P|_Y zffQp{ID^saLGEWS?RPIWH$uO2hE((z#SRATS52W>Od{0?-J@I|RXIpEF}7LKHcWA7 z_cL&E5lZVhDde0oC`tj-#TRZ#JrX;!4+X|gzPApu zL$pTb{C-Pk`;veND z73ER4Qg+H+*VgDS_Q0@%gVt|OwK?OA6E!1iowJ$~pXI5~!pwVd&ZA_1#>wfCv6r7* zt&swMV}z8bdDh%^)_aLq{C-Zz6R~8sx&uQRym>R7RmZZHTtN{|W&Ru^ob1s8Uj?;o znoZhgakG44#(TRLTzC`O9QsTpXY%Raay9HTt@dzAkFh+_{_U&t)2C(>ixB7bv9`-d zm?R=_S2UtsIHm+|{1XQ@C-5)TXhkBc;fs?T;4p6-XZ!BVK21oo8 zaHnnfJ#;WEc6QhY4AuNh3w1-`g2e0;ZCi<;me1d`>t0*)E z`$b`N5Tkah_y58e3-*@@h2rM1qp|2BvYQP5`ns zGFZs6H5t16b7y|Fgfm}4o`|%15T}O&w{TQ+UPy5hBm%<`#wTw-Sn#>5&#{02k4ze z0%=FKV@}(ZCOfpm75^zW=^(a z{y9$NSQh9F9zK!u<49oDXkbFNy?)NE#<}Mc#Q|)uKJm%|dqdc6Ua&R>M?NK9Jut4y z3r>UjRhKSj@WDv5QHqy2{+|1X55cX}EMx4egF}{(f9~!hp3tdleH@`h?1@v3zN8NK zhfj$YpC$taw<*y*%pXIT70QrYAVVq`<`TdcA8*wi6%4a5$Gc^!FlMVvGyt?f_St|J zHAHwq@HXqo-lukKIt1fw)8xeg*1ZHJlERhNWseLf;cA;rXL`b5z)c)gle2IDgP#4C z{IQC6y3l_G0z>pQP8={M5H|F6qHSr;>(5x87vi|(?9uo=hYhV>us4|mT92MQ<#0FW z3m{yA<&Vw?*T5vWl0e-(^M;3btP#RrrOT>MDKX|Q$3--}Hd8tA&;aj9RwP~vq1iAm z8Tof#Z_=n-*v)l~C#y9qe5gx|z3!5&8mNBdsC2!Si%9@eOs`uc8Ef5)e|X-O+MB6V zs#C9&jx)l*FC}LvcWE@!T9}bS7Iz;`NX)~?fkVxD3k>kONlx=DQt-OHz7&fqso`)Y z^B7(CiEPyIY|{)lPHx%^vy2)emr_kLbMKkVEaH~zm}DBKE@-sr>6d8HiU4q@$;6Z9 z5>4{5I_w$Fngkqub|xFCYX+tJf`4}6!pA7H6%)UBSc`77Kt)7?{?{|UA7!E>5U1U~ z*aeYR3CE!~8&W76Pv|%cFWe$dN?&;9xVyrCB;tuSUgk73k}o5nF11S;#`zG*Et~7S zPha*jTzQS()NfTYKsk&_wYfyg5CCt6h&D?|K4oLn$;U5!$E{^?^{g-Mw2JOC%kGuB z1U&-zeJbbNzsoMaEB%fgX8?NgmOr7Kt{)*@W-=%dAQ4sKs!KKmn zdZ4LG+}$m+`g02Px6p$<4|%SoRI{pC3iQ*GxF+(jAtDkd93q0ooh~ual|L){1Frr>k@i27 za{z$<o*R$A<*&qFw?SlYe&;Xgf%Cx}7 z!se@f`{>z)%DawxS)X2^`@Euj~2LmP5JC?fJ%hjaNRN> ziaH6k_u}SB87@$Q{VN;v9AyA@X7e3$$dR3u#-Nilq4Fs)S;AP^7!)~@%znpfM^qj3 z95ox18Hd#)K)JrI@N$t&XJtnqBvvjF@Asb*fWAq9Bad!%XJ0TbIS2 z`$%lyy}Ds;w_DRdBm&_6fEoy4IqC%cS*RB$7AULsfEQd8okB})Bx=n_b`e+G*%Ztc zEt`3GHAyHuKq*52NQ!>&ovVUS~ z1ZJgNi+tsiF0cbuwqVYUcrvu_YYCi(GAzw<_2o8Un+g_?^v{A6lvV3dIezbMv?3Fx zlXAgQ(r=wB7q4F(=`%>?qI6cmIW^QA?sASKER-?L=3ke(!Lp^oIm{$lM@YLR`eIIh zqGhR+PIeP!Sd43|p~PC1v(AMK3hbUvxKMa3G}3_QxiH(LM%pR4caA7J2*{q0HM2^2 z>N^tvUF3#{`~ly7Il8u3!~6mP<8_*9zzAePZ!y|9AlcUZikzOUR2Ewp(Xg2c~ z=Vh_QtsX7SAzT1;Z$)L@TM~QH0PAGSdFyKqqUG!2jR{Mg(PP~JXzg!n#~xc_wO&G5 z@?AT2s1^9j%dCez%zPc>Egl~}pe>`3sN8-?Yc!{cYb^C-?)MrERA-?&QDHJ~_%^NI zrbBTLR~6FZDi`fU+~`X;VQbwZ4?!otx{6M8uh5KI>v{G1j#_v2B^Pq)?ZB&m-j#w; zw#=O4FsOy~9E;B7++$PYZPKf92SRdM+EwydWxv~z$~9uPJ(i{<2VgsqLBnlBA|RWA z%p7ztwr{h|>GbXiSdG^07Es;M5#r2A_qbPq*A~c_lO77X1lCjQtN2$x{7lOX;C6i4 zSuc(##~&-eRyINYHIh%-ymHU0JkmaTmH)b z42Mw@R{vQ%%_`JhxvjMR=gNOzkey|07~}?y$hTyJ9(A#noTNL`35@) zKYlK>{V6U?{yUiHk=;9*VTS($_>By4SA-o2Z2I|0o;(?46Z>82`*vwQF@2NK`zDCr z|H%qS!kOzIbzmnp`mmcr0S9^)9v;83@`Lhl|P09yuv@oC6)UVbsw9~ z6Zi|LpLZJZUwXj+_1}8Yvn)*=qKE;oXRINE(tz`-ohTiqG$y1(fz*)Xl-1B^ShPm% z7Z~~g{soH-{VSZ>N(Oz*lhr2q?k0bFnceoNH{; z8MFJ157n_7{Mh}AyS0?Q`R))6e+R8My0VG!cX)Npvn!^jj>&E3lK$#T1DYoez2WxH zySLf)Pgj0#oyPC&TaEbV;K#lHY0UTE& z#?PG}_1f$9XN#WM{U!b^|G-Pt&(KQO?LX|*?f9%Za3?tp+yB?)E3p55&oxWj(!zoW zpnKcXWKe*j(nVmwM1nAU0tyWX_mGhk8=(QS8YNOiLlZ*%YZ_VhUw}a|qJ9Ay zWDy#FYKYD_*&QT~YyMtM&+KHZZ(9we*ITmi%ddU$?eJ*-8b#4@xR`(U)U53(jGWF| zgPHk!5WIC=ec7I|qToz?BzilvB+YEaFvI#2-!>UgFTu133(s+|K)MRhDzKv*C&#|eTtQL#(0T$pk=xDKAB^P+-8L3EZrC7BE@}W&a4cN=1*wJof9h{q9;f ziC_8YbRPps{b5}Z=|?IAzLM9g9?9{j(b6)-q%zr)AR8(!RuDY;H{r&AG71$ZAaBK9 z5s+o1ub2ljc=E7vSc1sBt5_~%@n7FVF2jGH)3uhjgU+(&uJ_FMHZQeh%SKsl>PjN% zdqFtqroo_;9588;E_$XM6t!@f@A@}a%Yfe|3 zoh!#4Laf(`14h{WZi}5KGtN^f*2Y#W_1kDP+et^ulT|XEj9z^*+|sb-MfaB4y_Ng^v3%9vTCO}@^x;ej-i`_SYLYZ6&k8zSD>ZCIM@BVot<)$* zE#r4pXQ;t_D#t#5Bdl_{0bWq!8Iv#Co$y#>I5VsjB3;bQBjL3VSPVwKwQw~?5aFvs z?vHxytuR;jiddU8c)sm2!wz|Ed>>~PO8f`|-Qj54&ezbs%Bb(AB6wKmOc1R?;=Wtc zgoPvWKiw0>ubHHHGUWabt){W5NBPjyV7BzM>atbGsp^|3dv%Y;%X*EPwmo?1?m8?F zHK;y(rU>s}OrFkt)j@H+FCAkjIvvHDF@SnGth#3h^xOj?n^d0<_PDS`+I*sn1on^@ z^V7R-5sDW|lf7OpcoKcQL`HXi0CXT(;s}N|z8%OBF2tQtaFy@G<}ig1VYtYTT5N%~ zmDiBO>#~(X_EWvr|G@RcOaJ}m+jzo0+AKO-vggxd7v{!7z1&Zs)dX3S>)kkvH@a>X zHi=*j=66kg#^|4CVJq>0L zzX9#&CKX#ocn^pv89i?0vQCG6n-?$=ectkX+ntA=0#Mtj4ot&$9{EGd&kFr>;kR+b zf`zt+=ExE~PaECG*DT+kBxq20r@#*w7lC5uJq&_1MB+9^YPl598ID-OErRctb|YtH zkNCYrU;W`|g|FbgJxle3O#K0i@^S8YP~wR-v?Hx&{mdx_WqcTEhGv1b-NWJ!OPL?D zOL#y+n8bey6D+F88py@R6KZDa&+i~|{(N3!`8>1qN%oFHDX}>Idvc@L{1CQ8W0xVC z#1^St40@9?i@A*wn$-fXz#g?jYP*4HE1s_gMj+ZZAO^z8?b zE|FJkz8gIFpj*uoYtTs;?fP%5OsN^p2!>l^4^e0;ju6Yg8dJiFwMad!8qRA%%Hc(x zfU%sj1Z|dt-n5ZWmK?_B@vuf6nAvf;4ce;a)eQjGjK0a(b*Olwu{8y_J{)TkL)cve zV?-UcNyI`P$^E#*fuJ!4LKy>vwi!YpZt+;m1=_gBFGZ|axO` zhF$Im`7)2?R<(>7RNjJ%uuWfqBMwqwZ*$Gt*sGS zZpexO+8`qcN-#46oFO?sf;dGWmh6_QL0H5kDf{l|%QW>^Fe9x6QQhLy4(gyVn4_n< z$nN2R^%33ool+rIzj^q&8vYk&^K?E}B$-ifR4$T9ydSFAVPi*z-T?F2A8D!R>h`Q_ zcpaRQy_PV=Hi4#Waq7#5L2l|I(jX)KOd);-;91_{S>=5c;SY(R~abnFLBx+le!7cDMmmC4^9#KRSU%@xDJ;TF((5Lu!eOCE|+hm>cmil;m zQLMc@Gi?}~B`E8Kll^^J5`U@5=1@=_UnK6*25rz{$}I&5HdhoI3fbrLK-c8zGutk| zPh3y!C40-rq1*f%-@&^g%0Rl6eQ|4`9g@~4!|QMj^Wi;o`MY!$5I3zr3cqf4OHI9(!$96Zonj;qykg5J<=z2c> zpf5MZq(Ye|n1S7SsAp8xOJVdHLk+=N47+SLFtLiivG0Xeq;=jE=x4Z7`Ou3oIj#An5)cY^Jz3JrAH{d zOjcGx)``_FfjVwNBOSG*OBHsQHd3jj_sS?n*g+7necVD`8&zLZs3T@Ii2+c)Of4Gs z?JDIe#FQ-~8^V8u;8*X|;YH^MteK>KP#9@`NYK|Mk~u3D7(6*=e8w3RQV1W7r@}tK z6g|TnC7JehB)O(x+Vw)18O@~S90x(X-Xw{INlF)1oy8B<@CIjKu-c4t!DgPl<|7N@ z9DrqDq~EyTFm=TFx}-+!>D+PNVECv~&6^c^8xLP0WYnkorSh2zI$9!1P;vEAEwYqs zh2YUmfT+t~m6Jr2gNcYFzeYTH|4^8pdQXip#KG=kI%nMZvoxs6y;U$gytRI5yUz$!MODgI0c zzYk1A|BfYl1ZamC*DP+}j%mF=?ZXIt@f5Yc<9HQXNEGmazP>^)JZN#ML~%pe6Gr); zGk6O7s-4351&)9^M;=qz;+k50GqFla`sfr(Cn7+RVSU9iOmS)(dxw8*cmwr>C?VbP z$Ti7tZ0rzq$n>T!3FZP+iq5-5VW>V_BP&leVlqn$*>DC{8;xTnhC-4Z$ZJTgFeipux>Pb zm9K;yPzHP|6L4UCP<1ICi(tPyluVRkt$gc(s|24ax9a{ak5DSAkonXNXS1E?L!_3~ zHvPg$ON6;^f*6$Qe+LTcAu0FE38Yfl<;Cd{0k3*_73+-^SPvpZ$W^6#HxU2?J z-#tXe3)T2;Fm97Kx<^r^Pi$Qh>72sY1@PzH`WMvJ(q_)BLD(1~w3&&EY1(3vV6m8& zeLa0eor1GDo4kC{oEpiN{gZFbE_v=D(InxWMoj~rCWD~5Vwtv_q3_6_lMYcnB_*-d z=zdiv#Ix9Pc>^HiQ{tkZlZB>`Rd0&wpNB^ZSF=p~g-wNLp&fT1pw=(+Fq|nA!CkS8 z`wc~g9V_1mKjBlsJiN-ndcIpbVRV19?O%_8gx0FG@|UyG&T_tkaSQPL^3+AHI*i9t z6hEKQ7RU=8BT)rxV#Mh6+6IyDOEL?uO7-7SAQiE`v^|nhj#o+a2Ilj%;GC zTy+@#^e;kzhv_vrzp$ZImhk77tlqR#yDZ^4Un*baxa-EU9r?=@9B~V{Wi2zA$*Go> zqmJcc;u$U&n9|7mVwpeoNaG~*QqmGyFdx=%^zHzlLhi)zB!e}lx0nxWBGHu;{E~`4 zOl4WmiK|rFTtAvCw#n6!7H9qR9s}hI`?>=Kqc<|;-(!2Zk5fg2U}@DqkuyG~0gtGE zt}9wCi3WA(KUSvBkKgaKn1*^<-|z5w!BUj*`&XDXUtRMIay_ozfoEp)K?Tas9m)rJ;*}weM73*&IW;` z&RxG$m5-pogLc`D0{5uJBf*0nbO}QhGkf(khd;rQ&Lq*S9ph4bbcatr;TrIag36{S zGH240Dc*d;(Jhm?3=jDYxfXl<6^^0|eSVx4def|W&11t5(QND2!T^?Ua#Y;#2U}TG zfs0w1`Qq3%w&6B(*&V}-vE0?ij(2gGdO=+M6svZHe)dI0uJZ_*xPs=B&eV=4W2EmkqgyxY3)d7Tw@1yx4(g#^f6+=sA zdPhA4T8-H!t)6>ya)SwDWzu4J8Nt06%cvqa_S)&LBrK6wv|YQLx1|5z-35ajF4%gzto zuX&F)Ha#XNS76mtDGYsqw0 zHk1Q;AutbRwuih16N7VC)9lDE&`QHvX`4cUg?L_$%=OkaXy%6lFQdw zpzkNBsi82gWzP+)j&YAM3w$P zj)Zau(ePg8tvraJ;W`?ph$Bd*@e5N*nJq_(&gf@dU=?f7_KGx3K&no+eg4Rk!`jGE zM!g+@$y{6#^lyv_Z=kiZ2J1jIhLA63{I;5U4q3Y%?WUi91yvQmgj5oO4&34irGp%( zRZM+*``2VT>6U(o3iVd{wIqP5VHRqb?8+sYGvt^KsX@G!E+j3b)_Ij)gN0WJR4<7` zz|V6>tVzcw$*Qr1lPnEhan z%JyC*wp6`u4lkYp%{Ngve5mStY{j1pUU+RUWC5*i-lz=01MZHqsu;;A{!|}n@!L*W z^vzscK|be?_iX7RpE~S2L6r27h1D_LhA5GMvQ5ciQ9~sjW#Oq+gy7v=r!oe&lBHEM~Z?GCI=hWd4H zg&>IEl|qK8A~H39JRC@!pN>Ddyu1sK*ujCe4w;0N(f53LGkif>bj7ESWemdV-Tj+L zwpq^aB$lEB3~O{BbyR^F@-7Vi#BW6n)Vw0>I&ZO`E%=&JJLJjJEH0i3Bd2a5`bRxx z3`zDK;deoo2sXQ3_v@Cl*lPOxfvisG7q*xQ_g!D5m)^7B=`#^M&0n8Lq6%Cr>VEp= zQVS}FQk&z=TxZ20X;^v84j1!+73oGDLK8e91O{P-(^p1^aooLwXXZ+CVbny^0ZI+m zs~U!!rwWJ~6k?p~82?6re^ybEh>EaPc_b2XlX)g|Il)#`!7t8>YnbyJmk)5Z`l_Oc zY5lwUs{pA2m$hs@F)Sm@KZItOSZuzJUwn=)rdIy&qWNoPQLH~LpUquy>~bdr&?=e; zqiCJ21VwbqYO)`b%pbM!T^81<1;aEbcj=71sCSz@viH<7hBFehltZxy>y2_L2EC^77=|ZVc^E%G6-p-qU8MKg(?soiZ8&AnL1ups8hm}ml;Dcc`2%`j ziBM;>*GIuOg4h9Jh2}iYq3lV#9YFrk^SVa!IYB#h(1>?gF6}}f?HbdX!|u1_<&859 z%{1xT*0a3U;DpzcYuNt^;XLS(&(EdQAR=^W7OG;m6ESOMa<|?mSsnRcEbVWiy2O=6 z3XSLMU{>P44E;kU2#_L6q`QJVJCO3r?)pxuWRp7ibidGoiYrAgV|31oq_YrBoFy&E zY1O|R;NY4nhO)ondxf9k9YAQ!#{fOl4lhzTdsu7InwU)7y4rLc^Rw$KO}3)SEj5r~ zT#9m@ANnyp$@iUvPKD*eYgAzlj9(ub_m5K5o1u~;a2;afkjlH4mrvLSMf}L`c8Ypm zVvb^b)bO*G;}V~y6u>A0{$m~^?&t03*!I1`@h&DyT{ks zdGj9u!7p+q?ceWw*DYd2Raa@zO$RVA z62`>3l#LXbph0O_ojm{a&-?LWHJ}0yWAB$8KO>O1dCfZ*{xJoV> zYqc^@9G~v~&k_63Hr+5yH4#Fe1|NhsA&*q+`%e!iczt;Ip$k<_o<`4h14GTQSsPsb zMjAc(%anE%W6qf(qeq^Os2e^}&qF+9kCX6I*(rVse4apiIkKclCp`K^Rvxon*YQDe zwUXc1bKn?o`J;oE?SZKBXhV4S{zaql3!|jrE)HW&t>t?zIz!aSPK~>N9k`3yY`bJI zeEt5fKDUhYdr8(oilxKF%}ekvH+t zqrUfXcGP(73}`P%7}UXjq6c}#PEmb4ahDv(sM_BdjG|m1XQ}M`rhf9F58Q{WpzDt8 z7k!fE%?7afnR(ovkomULId3hVBBwEEh;S`EQ2Z9|)B9*g2uv__%wVazYRew8IBlH6 zO-N+N0Rr1Ytm%t}NhTE*)KlUVY!%AQ%xz{RrG`!tJm68gp}nAOCU@=EY#v?$d;Gm$ zU$&pjKJMV%+_}FW7&_p^h*f9}Q|VR-#G;sdO!Ac#GUDhOfu0OR%Mw*dFWUXza{|=s zjdh~r9teo0!#mMH0!yMibb|-%b8oIYgR~>jzkKq#8)hfCatF3OwjjUQdw-uyM+E9I z*kx&II@~h(>cLf7n;>c4bahIHjY#yPpCP023O$0eqO?q1%)UMJc*C%n$a1wuYN)l6 zw(KkD2dBYOxV3nB>?m!ndkudTx(0ixRec%*nslX^p)%bXDEjkJBo{#n7P|9d)*Rb} zUljdbFIUNndqO|h`N&f`rI(#CEpn37vus;{au9uUwh{?L^x5$RsRc(tXCz~;V2D#t zFOMP5ARO^s{Pg4exaPyr?HWe2j&R$aoq|TOWjLeSH(hd%hJkP}7Q~O)D)q@7-u5=0 zRw2JXY4xd3~_MQxf@a~A~zux4wa;d@myG^%Cuf8>|h(1DJ)ZE%-i<}jBjzq&y zE0e})w@&?l@9;#f1#cnW)TEI6!@uAF&phLQ!&=!(tr`W1irmz6h!0FlhXli zLp|yEa9D0!F-upjtug*u>n_zZ#+hmjDnhKlkOtUBT3uIxmb?|bu5Y<3*)O1@ss9|K zKThavAT`T(Pw|aBhc^TLK5`P21Sa|drs>rg9k%5Ctf>&;aE>yw_1IT#YbQz|j;1&Q zIc{=A8mbQ$^bW(m|8PM+z7vVK^VdXL_>ABcK^;WVtleFLEVs(^`Qz>7(|gYjZrp`0jl?;D9J#N@^L`rtZdr zp|*_?>?m$DJMPV1JD5qWkY_~K^(BRnZ-+>8m=P=7Yw zvnyarPL@AAI`1?9{Jn?Nc|ZW>eIp*`Z`7+qmARnh+*v8LoyWD~f$J0z%vOdFam(Cn zW!G^kLQtmvzjzSbOaSU!#U#Qlw@)< z9{$pAuPw--dOI(^Hx|ZkeS{i4yW@cpFbp7Xy`ipjk#ks`t6tf%m0n2vw7t8WC;eLC zJ1|65M2mt$1(^X9Z6t~V@T!bHWYr!=k81}c6;Zu|nQetnLpdfMdiof9mSD??x{6L2tWqb*x4U$Y~_fHYThPWU}wOpjsoAt>K=lVD)UoXA@1*DGdzY-h?8c^<_}Q1FLSu zQDY`gk(A9(jz=|C3W?vSI58MFGf_#rL>eyv2I99`?^|@VAzX>ZD#@mXfO#olMq&1X zF}?R%D-UYPKocxhlA}laxN7+*FmS?8APS~nn^y;DklU5M7i^i?q8JBNYn(MRp%2c$ z(AqV-9fR3PGIE|zoTZ2k|c+Kkym9vKhY15zJAh(he# z3b;+XecGb~mys9Zlr38ykLcW^i7_}&kk^=yc8z#zO1LE9*}OSqu3P!_gISngKvp#^ zhgV=`F`2jI+PUfDO+66;l9oEr5te@|AG#8>DgQItOv6L`ZB|<6wN@{Z&UqOCl1z|^ zo+4@!riJu~DY%skm*Kj@_M@Zh-PqpP~cNxIaS8egwmOVzlHTo6(?Hk9Av`j-(CJ9|>PUvMMyFu*5qrFkxtn-MH`ANj$E8_}6_kDCQ~2M1KE4ke;dC&%4LpX*$0G&gv0T1ZyEN25#0i zJg*JP6nFP05yAx1HMhl2cGM7dS(;*H@$o+;?{8GDr6$*f_LCZ~JoTYF+|xru;~S+U zZWz&kFk;(;UF|Ss>V$=t!94KD@P+Fgx!uR>Gtt)TX@y5-lg1 z5j=m(fk2(~Ku@zcDCYD!(nmNl5RVdFZZEiWyLOlbj)5!VQ)N>g)5J^F-w)HOfNpzS zL(OT+mfUi%yG^kkyMz;y^47mDS9D~J-M3D78*KWSq<;{2rBu%DR@4;EgJ+kf>#XH7 zo>mnV%?#PBHrtpCz?~UyI3e606r;xw2g^?lrrnvEtP_0D5Z&i$V9}PpCM9O5;h#Y} zw|jV6BHwUmXBt=qK*vLof_M=lkb}d1cqw5^Ldj#jI97WX<%?>6e*?a;GyfPSsWIbg zQbY*y=2#`bY1WPst)JRiamA=H6M9?cib~p`}PdBgdj+;BAd8 zs;g|yj-r|r{C1h2r6-Pan$l%fMuX{-RVSpJ(9&LD4qTf7&jPL1Wq9{^1fA)pL$myr zi?JJ|ZaO#Tn308I#M_LHtAf!njDrVbEU8^;@QCy!EZLm@&*6sRWH2)*c znD2d&p8;&eg&dc^O_0gmNKk4 zHLThTVEaKBrqPxlpfEH2`>{+Bg;Q&OJ{62yVZep+DL-%3$fY3)$RDXnm`kj&TR=FP zkftcOesyi|3dk;0|5y{PBAYK zTM{@1iUZQv*NPeE z%KOSEk)OBDc3`IG7aJ*+Qh4vmR4%pxGq~3p%?(%Sf;hWRmdK}Ib{Qt+7C~Mx6o@Y~&CH#*RQx4fGPbeUA9Cr(W;m890Z7NWv3?ky0(GJm zLY!GI%oEP_)Dgc2-=jhRsKtjm+IrP7K{@Uz;BIpMz1w`C$kB{Ye-0^uM{mG@m;3fn zvIChQ6xsmQzQ^6K#SO;mq7pR!fK;iV(FiLvSB1I-DuuhKCP(q%%@oNGy54f?bCLQ$ zVyC}4MM@>KUQjXRxw-G!s>%80SekLGR{nF89|@qHaQR1~Ak>;{i2jOdD#>7>7JzQ5 zM6htBmoMfUre>lZA`Xo^iF|IIgtqZJ<>ExWd4ULRTY#Mxmz7=ub#7Ey4P!TMO+9^0 z^O&ac$z2X@6T$UnyRDQUZ6I^|Cx|NsG(v5UBA@_INWB){5cu9w)LVnFzhz3O#Iw@B zTqKx&31oRk{7b8wpkz2bX>m>`W8^SMaSiU{mp*j5gdM!;SO!tatI@NEOo*VoUX;37 zeulSaO9+tBKDQ!qi7}Fw97@cs6fTQ{xH-R!UTXQByo`bWsBtkCrKvt&hCvo8It@SRxkm$TT;P=~r`-CUb^= z)Mm2^^%S&T;omx8KbRQ5S${ojs{z=(rn{lDX;SC7+MW6T9H90B=ZhH!F|Wx0INjy@NHJR=M$~} zA8BU-PsR8D|H~z$Y!xlGBx_{JnzCBB3P7 zR-}j)MCCs-&fI$~^Z9%~|KB_w?wxtQ-sgSJd7ov@EVw-QrqDq?9=|^5>Bi7_tM7jZ z)~k9Q3W6W!s+ApjdudEY&1Y2aU{3M13qDCopH7ElsQ=*ffB0l0gF~HY=UL?gALE$Y zHPxTF^V4ozef5LSy565UKQ;)kxK$gCPmzSV(^RUvUN19zx_JjZ&l4KC_(@UC_laYf z=`{UbwWTpu*2hzFM<(pF^X$@x>G$)R$Xb|rJ-Xdj_S^j3fu5K4u1#(AO>X64&ar!f zxL?|i%9Ji$!}`mK#d?#8@Lvb%2;ork;?q9FJ%;VI&A!adGjf_L%T2uYmYEW^c|2b2 zabF@bCUQrO1#_%9UgFh$Cu^0en+*~6`AkJ$pD4(8zbpTC^Q6%cf64fyy6qoN{!mT% zF|>ncf8@!D=L+klEJr0GZT%Bjxj8P33Na{iSe)s@Ry-Pb&V*Rpj@Kvp5m;CTzW- z$=lX=oh85UtGEBw@Yt~aYt>_xd*sLc`Al4oDi@o(_rR`vqG2#c*N&nkB@gI* zSPi=$Hh1_CHaB%?o0Z26X6INY7HFMJFB^$EI80k7T@zn3tk)_vAgu{OH>uLEr;&dCrw8U-}@qMq@n;q|V z-+9x0iA;h{k(=yUji*Xo^<~CORX2)p_%}+(q&O6$m~zSS#9FxJRmfax_O32vO<|BR zsw;Qa4XyJVvMKk(?-gs0S^1=CXj!7y+uW|&uZ@!&oE)BiYlLnvU%H;%Iv!ye6YO5D%r-m6OvS$7mJ%`*0L`xwJMbY@x7!!rVvtGO+I6?DJe$8pmCk>mBIuuZ*X z{FCdqihQg3ld|HvL(9N(yK+G@-A2FSE9abSa`$vpIvUgMZsi~Exvdwe)?BV}K>VZ- z^Ds@pS={}R6RHZ`3b}z>lMZSA`gT+HgnGa^n^A(g`uC}f!>-a5?pc8%W(9Yhe-ml` zDv2#m*3DYirt(K(yHKg&5pR_xx;5S+XWAU2WDV#l=ovk9>>geFrCA&L>x6{Uhrkm; z7nN#ij{Ow1su1E=EtUO;0br|7TZH&&s_>BkFVpKDt>;a(QEvhZ(j7- zb&WTsi$4S`pbisTr%h0d*3)JyxPom#8>vMo<4K_wC2reJ(3BB zikVz!_h;9Z-CU|&mybhlX^Uj|GM+M?s4(PW;VseWr;};^8~XVG2$Pd z7Zq`Cn4A=4jpa@q9{j-Q-^IjqXceEQZD{5NojAo^IR(pj-s|z$% zKz*U*Qx8s)vQ{cQl6i8E zBjUbbyyNjgHZ~XHdOK!EC7D{8*o@qP4F>#LpP6Is$tbR-Gh(%5pdUWJKd3xargly!`S>QV{t4c6bSE(>Y!6dM8gqk1jd2`rFrUU@ zNrsD!mrESGR$rb9YdJ91aQ;h8g($7Q+B(Ui(Pde#IqRjmGiYxzE?wLxS(f%{L@8+tkf zEfbZ4T^`*IcjU8P@SERedZY zte3-Cr4EFcN^UK04PC=Qe{0J76OQJ@n!EaeK}D+>0yZ)R?@?g6Fud*8Rf$kim|)iq zKhKQaHQNs<9{+B0RZ(2WfsdDNxHZ_pIsdQC+M~by)s7EY&XmqPcFij)i0z0xQTvJ@ z_k6@YeB7>W!(pY-+U9@Pz+aQfiVtKyF5WIsC+Op0(3VIaAiv7% zz>wPpgI6ar>WX$JgspqlWcb9{EuTi{cmEyIz`C|HE>g!8Bkl_UZQOV6O^F8fac0P> zjGx$Azmn;)g3p#Oq~1&GzsNjJIi9xSiNLP0zc*uI?6>P&sp0+oa?jT+j)~}2MT?X` z%|{7Pw7&EREUC1^M*84IC7%oky`z|5wx%{L{5l5FFB*J^n-?&effne7g!xX%Er_b2&fiLX(-qSiZ zK_k}_IvaTd+ON@?bKg9uv!AK$VrRijf}2dM#MNzAq~c$4iY4R$0(o-qGXvYYK49bH*d_1=_^rh}{YIdw#ZB~<-% zaYKzI=;Noet+49$|FLboXDpK{(ymlarS6z`}*&Qs%9n++E2^K2_`Xlim~y31~`_ z1mDod#CW!!IK*)Jp>*l@p7Du^gW77JS_k8lFFoEAs_Tifxq9Ta;~|$Lt!BKx>UW=& zxwd!JTQS?sVxA@eg`#a~U79P>hHL+bv*e6ewAJHCore`4GIFk89@|=U++^?hrayYM zPbB{cUB`!-M%N{d4`=q5h+I;%JlIzA@O&cc*;E<3%eJlxpQf(#r}$4floTGkDE^nN zynh4xD;=Suw>F#;vbZmECj3&}3D?+b9~*B*-P2FjG|e;SqDz(Zp6WX#Hf3-k{qCQg z#h*uc&giz+h3#1(CZZsd7oAtF5@=DfZR4d4&d-iR|18&drU+X`YVzsXEr#^Vo=UfrS8VNMKi1~A?%1s; z+;tzZV|>#m3cZ4)w!9H}%vrdzPBfN2{t?+DVmS}Rd3o=|#K zIjK_dRR`^xkM05l#>N9o_7kx?d#%V{P z!S|{qo=!r?C-hV5%kHjuaMyu*dUr@j1*et6YVmqfh~k@L4ev{aOzzl~eo}5Lj4a2! zCRX%3txnJE=jpqNeUv_ zqCeB+D-LB`b`CQkSic%kU0zU}m0ni1cjM>%S2Ei9zb8Y#gcyF-an!_z<(co6IF`mR z_g(L~MEL#dE+5+=utK3`i>J%-a|ffnp06o^{=N0?sTr1s4FlR7@5gNURUL;`E^ne0 zeYpISQ%^(Fko8)@QT_9D88p2+Po1I7?+v)O?Rdk$-TecMml)QhO-hyME^)l4art)s zo;2;L3%=|Zg{pi+O>C#w<*S~r)>3gg6`&d@wl1Nn{-A@jp7~KZ<6yUtNYBK}5*4Hv z$&mZ&d;Ie!d-Q9>>bll&%SC@ZY#tTju;ef)KgT-p*E5MbiUhMQ$-Q4$boI9fpNUQo zxtJuy`|MjwBQ2vRO{v}mVZA@T9=}cac7Cy}J8{{ky5n1|t3qDyW^Nn#7uT+FD#(?& zU%ewQ!o8LUFYs>d^Hmu<_8iBzCMCGWyDqzPQs=?JJVC)GRjWW}r!%Ui#RP5e< zf6TyayTPR=^QJU=-)iq7qo$z|w-N-s&uil0 zez$m?+$UX9SRa1dBg>-!-;SFro3K=EJtjwSa;7!%EE?_|UXSFujlt9&_- zd^tE(*;hc7g$S4i^j-j_j}wd=tLgDVo9B8`Gt8LnN*1|p8>E$*5UB{DZo z?D>0&t?8Mvjq4+oFWe=YT6{IeK1(Mg9Eg(LFFK|9C$Vaq$wtK!7srD|J`n| z`xWPa+O%s;`!4>qT}4+F4t6w;iQW-+XD#^ZW=^90wlzcD7Vka%@tI1na&QEVmFZZ^ z&NFSV+;0zM+!e}6C5*2x)-X;{P`>?3teJE(RBo-H{41_!E5wBxyo!tWuiUC?^mlAz zeE82%UV~S+t@rGI+x^)4x|jC4rvta5ZkzRg{}>jP_V;;N^OAb^wu}IdSlJiHN;58h zDjBKh$}wddtl6*9FWIwlI#sBUfxIUV&m&i#a`UM*7tpzdVuPk^vXw^g?2^! zlEr&<9GlMO-5aUYuNW?9tMTZ4wpNb0DKusD&mY{f8+@Je15FMjRdLjJUM16X|1)1H$IolJD zt~P(laQx>I!|dn_n}ou~-xWqSRp$#mi3;=ItaQDve|hFdQBb;8oiu`o! z{NFbaBfj%1>}ts*i5q1UXzuD18g7pb(8!__u$T3b=WIDlQ0m;-@uWQ`KD#+&d;hra z#rT?w7l_5fJ<@!ecWSQ5$jJE;{csnf^~r|Ae#huf$eOHa-(5z0n)j$8r9mZk;;KNn z`%O#pPSN0%ELX>KSKheJI5o9v;M@& z)rLup$;X+zKM-H~fAHA!05wF5t`EdJ*?57_(`GSfbY>1oqb#I2XOz<)5 zXX$}8-Dw9CwLA(!NY9(R(rUKocQ}7@{W+Ogu>T|RPudWNXf?f{gD}I#cNY}uFRUJ{ zZJ8PA8RNaHXSRxe^u%2o7xRS9mT)H?0-YnfMf^6Ae3lw%kxK%n{5&g9@9m28`+&Qv zmgUD0{!D18d&`Y;$7t8wY|{#2I$MDk)qfrJ^AgSW>FI0D{jJ?kzL^9av*6ixY1aWG zy`itp$2*vcG%g+~&RVf-tb*v%JyFU@nAG#)nARg!w3%qkI6i0&dcwI>5c)?zrYB2u z4?7c#R{NOtj_+=eb`xEf<+PPii^uU!>~wgwG)L>VLBhD4R2K)EMyY%jmHhKu&s znyq*Q^>018qgA9KVU=(+E;4o1N2W~NuCK(`Z7#;1x~nHti=u5#Y`QKcEOSZW?1W8& zbmPC(X)D(JIiQtSE9^(- z@nx9_v#458n#_-}C7OeZwhX;q#TSeB4f*OW4YL^ubgwe_F1Gb0v%G-#Q@qj24xyN3 zyJe3)U%x+g$(}*KjhCvVo<^VQQRKf*AHK%8?t6N=rB`WS<^H<-3bXAM-CN&FhJ`&m zN))<6W0g9^oO|+d-`Of2ceZaF5FyfO#epr2J>x`NZQd&D3W^N(Sy&-mK6_Z zy#M?3hOr0BABNq0w2}GZYH!<>tcM!*$4>`3$II258?4g3!f+(6m(HWrp>9&8OuMo~ zUBpy|;31e6R>@wb8|IPfP)2;WPT_8T?X$On*=HkHZhv(B?eMoHo7?;CBHT1D-CTL2 zImsnW`E>S>NU-Utvl~*zA6u8iJ@E?Dd~iURBhF1RCwt>V*(b5FY-h_KeZRTaM)lDv z6MfT1gkx+xmny!qOqlQ*2P&UPOt{!^_2rrl`nvYDoGiSyEkl!>$FJoZmfW#bxv`%^ z!YG_sKZ?^s_m@{rkFTswr<-f)E4TM-57KJnOo+n|q+gPJ z?|4|($#C700SBcB)yzRFyl<6?F4HO1OGg`+%*Kwt^DGT(sH|Z0EOhcPd-tg2z~7|X zBiY>yyN(JB>@B;)o-JrYTB(n%1EqPclspVLU# zZqI}Zvi;pZxZkJ+K>sdS$Tq|q~mEz*xG&p+6D=;>+pJ5uL98%^pI6$^B& zxV1%Hr)aNEnSSM)ZGz^U86D%r3Wd$w+huLr))}=`RWP<08-!i{Ny=t9Y#L_vSxGnO zmh0tT6THU;bR4eo<9C)GEy*2vvtILCx);gHJ~BI)joE3{6>B5wyk^#+Jpx{rI{zeh z3rLiB>b|V?j@Lf8zBn~j%CcC~;Wz1Is)?m7i`$X5HqAWk!yBbkRNT(!H*KkT66>k9 zIUT1huC#$^^Rm6!s!Z+$G}ga68_Kr??n#bl`K|PW&==5SEOX^TaC7*8miIt`$eSI$ zykgrWLeshFbUP|F!tWLHv zt{I-|z4npr;6z-;rwOJiTB+58&-v9D-U;|T#>JU#V5?&1q7SIvbu>hlsbY8BrlNJe ztpVFRb6K~oK31~Zm#58w$t{jSbDY~bv+dcgiZ`0JA3tU298b6PusWX4716fy^UmLi z7uuq`I^Xnsw`-HDOKI4@MgHyI1Fv4i3+%k1ee2yaZ=XB$6aWQT#h3+S2UJ`ha2UciXh13Y<%`&m0|p(7ne@;4t2ksdvlS z#G;i^`?fu{n)>6)aq;%nJeCn>-hr4;J$Co9R$W<@e`_E{iX>~1SNFK~&#BSID;rPB zug!TASKiqklGUYW(vtP*3A?=PS0)bO)2#{0MeznxG2HAs)af*%Ok1BumaSb|$JTAQ z<62Gen)O{dr^Al%k32CO(W<+++slHZR9{7q;p)Zw;4dG0S1h@2b3Mt-)6@JI&mo4v zr?hqrxa)LpM(cjJG9FGFl&PnAA76Y`qdLJ#Q!75uPLrwUkZkO(E-&_{M!6EqS^l3} zIC`>MuQdOBc_1Qg)RfLDP4wsshwS3M`0mCF{YC0RH~LGQOR8>27~ehA-Dj1se{G=s zvvnsPY_~YW_IbQsdM%-TdRSjsH$Sv|$pzIzUlS*9lrmNudf9xq{F7EV{jCS|*9oG} zKNmLDOj(t;_vpn4@nqYmsp051R(o|1Z@&_BG5++i{70cmudQ5!MFJX5@8@y)TFboL zIX*1DkTEVR`TJ599o6>IOZ~c+S9^#^98poteYU1jebB4+^FEKPcleeM?T^(Javf*r zaJ~~M<$B7d`D~2Oh^Z%&6mAsLRE@Kx?b*25@F(*x+j=?2E0zXBmo4v@eQ4xm@6L9d zh}}`Ww%f>tS^wE~t+g(z)Y=RJjygU|>>T4sC3Zb#6xY4@GGlqd>31?)M>kszU*gFT zX*52)TcVuhb35rwsWsK{Ww;(WRHk( z?-%+U*%CYYk%()f`<;#o>F^j;scfysE1uzxxzT9jqNU`f&%WQFyYtp4n_Y(YqZJ90kCR=4 zE>G|{{H)FjXlNgP8=5TAkwzG2x!K>VppN^5kK&Nt5-iB$nT&Ui>MXdvrMh_&A(`cc zVdT*RZ49p?vsh($*W5pnzKiKJ;jV+p?@~9_p0Z2Hqq4_NmPquew))Ewb?lN&177{| zbh$Pf&fj8v{>KaYyimE!=sjdp@6Oc1j`qF^;0Ok;=?8=<&)qUP2$kcXrd? z*qDh`!Oyt7Q%>#HDzcH?`R;Bt%SWzcdeXH*o&%e9s_n?}Ok#+03mLe;|LV=t9=S$k zb89-MG8V_mpw}92merQ^@#inO9-MAe!1{}ot#9&^gt}taX~HCTQ6Hh;P4mZ7H`v0D z5>0}o@5qx}CpIsP^D;@r+A-XFN6A4A>)Imf^DJ&*m% zz0Z$B;Kxakb-GMZRvzi$@%v~ptM1$Ba&PDu+EJ%DEWbkO<7L_PuP)_(CLHy;{%uVC zx}Wonj`PQF1dI(P6yAQUlzsGAZ~R^%PUe}vdmpRvdDpTjPFC&xsCebWsM+3Q9Otfu z$Eo?r?%60dTp#Te|9hpWbLc8hBQ5?-C8eUPq=Q*11at>!!iSv(95RPjgpe#gD?Caw z3tJvee5_cv#+6Ra(MGBFV8UU8rfH$6Jj+!LlZQm6o%#YeV%RZxsmx;y5`e4GU*IVf#ql}i`|760}8k?B$Xw3Of zWWvcxmEhC;>rd=>re(Y$tn=#rFk^v)r5E2kKYsIAeR<+ri*xVVnWJUOD{xXSdY_61 z9j1QdL^|gf+~pP#VRY^_VlTFM*_KtDD4<)|p@6$OrY$d_xpgVejxU~{rnvShh;JLd z-u+nKWGdbe;R5#!9z|$bPF+BDZVQy5$)IvW`i!!V)Y}s_{vmf;TkMlJd{LxvXka~K5aI=8Pb5@tvjoP%Dhq-B2Ua(%f%=2akU#jq6{pfH&zRm_`(o{@Nn~w7e z^@^4ib!-t^&qkzG9yrkScl)2w(bxQ&pP1;J_VNq2@)m0=2}$beI~Bmj+Cx`dcOvAI zO4B=w^tEdJR$-ENKC5LEU9Eh%HSBXuL7yrMzjm{TPrDY2?UxhCpnXO+oXk+!O)OJI(^hDH zu=K7Q*J_KqPDkRFtm_dQTBD=K=vdU7eb&n7)2edjE>^c6jfw;3wh^vmRphTA{2&_p zsdL|BJLop4VAR#4{dey<;d$Nu7cxNKdi+C`0e!r7SqmF(=&3TF=RSS>Tx zNC|nz9IgHLMbPn^UHRc6O?#k0_9*zAfBk_2J8mz%P(~|Luw$|{gW;}GmvPhQAsuDC z22RfY5pVhM123LhJTS6g)!M4J^NEVD_dV0*-mez#B5MAWiQbQ~oc_S&pBM6xY35qT z{tL0!w@j_w98NFmDc-vXquiRdVk!wo2Ie+ zm)AN;j$eG?PlM^sX6N|_lT=2Y+)RrhE(w)n?ZVT2_*MVbhIP13ZmC#YPG(9&OzCd{ zdeMw#h{<({`|ia+QgfTe%!ZuIWzdV?xs^pe&tCAC3+r}0{n&M6886YjwbfMDd2c^X@^d_?j?Met zGIy@)`|W4iJvcgfzVs~7?c2Qfh{C7#>!Jx}^yjMjYgtGCEU`K`r7x9N@Yv>F zjRe;viw5FI%GeS%hrH>7Q*TN6tW)X@CMW5_d&c7`zQndz3rar@ZV!Lj_ey2;NuQvH zp-u+2OiO5X25w;FDcg{c`}O3}py!Mh`s0l%ccKkfJ2eFzx|VroYEwnyXmw$t_1lZm zFY9yJhUJ0>q_oS<-SoGA;vPgK&2(FxH7}nQ>|NI>`7<$!klWMs{uX^X%_D)>9rs^9 zKFY$&^CqA|-1hdm?vLRiwA%x5`=!@4N5)qFo}!7karkF*NY%cNfhKp;S`U~Qj$hf% z=f3#JO9!wSg)R?PScQtux`ug(DN%*1IL&FJrW?&vPR%WmJz*ifB>%1wEHR9NIiixFN~yWT88&9|y7Gxe0Bou&{i0(=%h%tsF6_O5J+D`I9%d zsqTsPUnj`Vh~MaD)=aA55%kM^LObGKdU|5>$KYJq5c$NQpz>9JX;#{A;v3(_c+EXC znc3yq>7TR*NThd3X?s=P+m^nYcr1M=Ys1fO{dO@ahGi4w2UaXg;0mVGzZ|?T zIW5;zr^o(y-oMm_$+k=c|D{^<63Y*6uKlNaJ5C5LxvsWKL?r1}KZCMn5Ka0$KCWfn z-a>19p4sK6p3S{{fQ3IVjNNmiZ|_pe=50pxnYdD$M_D)b&}O~+(O2|pYJ`2vyU4gDbGHp=8pZj{z`xJt@iO1Or{Ihf`zFSgJs$-e#&aYe3gzB>kl@Z6 zEIZSq%(difgYWB#=lV3+oHI6&beF`Ni-lD#^{pVaZ#ZHZ-yU3brsQq&F;e}f0l|$8 zCohj1c^2Mr)OWhNb{Wo}nfd(SknPqN+AY^Ig1Z?#om#ncR+!4}vh;j5NWU)lS4@v~ z;O)Lil?#*Zf6R|N(|<_jb6k5+DA-!#DSwpwL+g}xbOK5yDS<{+U$S+2KSwpCJ-yV+ z!Fl10)C3FrQzqw%q@a(Q*c*l0NWI_k0*zqHhM%PREM3uOFh|@1JZfkzy7V~?^)Sr7YVP}N) zN#Rk^`pxZ8Kis#zaC-U5r$L4JS444xwBF~0XFNsRL~rl@;kxJVK8}}_dwLx!6`Ek3 z82YOzd-n0Ja}&?IzrV$`=Ld{DA7bfHX)U@@%pHG6dH?0=`sC?nq_m!MqN?|1b~D^c zGWlH7*D^lwZr4E8cE#ZeA>q&ReNW{YQ@WmWOI=WJ3~pzV9XfCJVoRpL!zbsz4%dvY zez9TAw6}XNW1}6B{iOM32aY9vH~rm7WhQT5umz+$#2B%0-fnANyUP4(_EFw3o<)fW;~u^TK2CrgrsZYVsxD15s!CuXZb z!>6WmRh5A}gK5Siw0o7AHNQrz{E*(tk@xmuu$^@pkG)1sS53o>RnmQ1md za*4U5YgNsuoy$F_pGjQu!P8JYZi0;)K}E+O6>x?Vxk^^rY~>P73KSKj zJ2=#t9)G-A%Pu)|1>;)7&#R=xB?*SkR|Lf6 ztS#NEFF2_-Iy4TNc-=}Y{kcme$uUs*=jz~~)twzVGtm`Ss)m?5*`r?CUA~;4pRfG+ zrPa{er2OHKs7HIYe@NzfJC+;zh;~?ib3mAo&CssukBnDFG)}J4JjXlEIx~~Jd`WpM zN4m57A*Nb&`q;GS9zB(ZbSDq7NyXm7_u?yNdl&SntEs8XFQRK~DatP`Cn+N-%`YP* zBPT5_ErXcQL7)8458NFgBOEP`rUqu{?=jPWVMU$WXf>BF*##Luhp?ssb7(VyKTw@k4>5psTbM(e1pI;O?v(UlFo!k= z_yg5x_mIimr;`BwrR`P0>C`F2qBPM~vBr?;l)zk!bQ95lTbMdzl46XI}N;SW>~ zr06O@SEts)D7r1sd8l<8iXH}Zc52;_qGtjfE54OLx1~-`J6l1x&YeKlpQCFb8NmAQ zfAPhA2X(ah=ByqG^l=2uNMmXGIYFpY!a(z63 zj`&6EOI4qEpkvji=pS_0XDgg9w5dUVGZryL^U#CJE4zeTjvv6!GPwVvHh2aa*Z}s! z4aUVi=zD>m>xkLx{0GkYUT~(UAKKXo4(?yJK*yRt!+_37oqi`Jo|!;jtbg%CX)1y4 zMqLlMZR{vz>;^V#sPnL(Sf&6y4!p z^hls%#qd1Pv0_vM^i|X`z_TF%fXmU5^{1H{GfA>G=a9?KxW5Hvw zzE0JTMBtM?w8hVf^HFj=^??3nP8?ck(Q>*2od`QY>p|;6jzcWa*HY`2lzJ2Z9WFCD zJ(xRS_5#!+0oq4)(LA8>KpQ>lhab`=ft~PtJJ4rgU)*5K@XwElZahAk4!;tvG#q;s zCg=m&7MtJsA?^bF7(x4U$^_O(a9**%CStw~Ty7Fo{Xt$TI!iw8P^T8HB> zyClTHHdld7^L(2+N~~IejU=@Vk)rfv!;5dGgnaOr1X% z+i)AX|3i9yNRI{jIqLLqj8iFfC;~Q%ja!(Z;~pM2bo2d~&-&qq_-`=&HRsz!Q1V(0 z{vVJwwI5nF!~m|3BG8c{q45NL2G(tWE=rw#_H>8zmtdeTHiqH!X+W2xPER$5l>;5C zJ=%e8Or4&pJtl#^So!&(G^^R*ggD$;>hn3gj!r~Q>BzWH0XAP?Lo^0(oApxS=m2c6 z>KO_2#l{UkpHS;?T&gK?2?jPhsBLJq$^9!0=vZ@N zInc$a)4Njqw*x(nTBnU6`=11Q_#8c$tgl8I3Y&=;GN;Pkow;{PGg zrKtT=tylYjE=jFZolEGDi)-wDE(ml>>h!dxHNI#DOI@Vm4 z3v{fx@*&UzsQuIWlFQc*^u^-K52c~wf)nC!@VbHAKJZ*YwPp|jHW%mHq*2DRA+W(J zrzgq%o`kebYcqc@M*Ecu8SYEIuhs*kxQjS*O2P@t`{-vBNSHqRW;jq>& zTmD7206NyWg#>i0@p202Zg3&cIfvGX+@3dqPMo7t?j^JW9c#Y$0d%bSW+ig736jvga@4q|eE?}NVKO=9*72e%jOCk-4sfNy)iC&4jl9}M_LxWLec!~yz_hkjr` zYJj8pUIsj29={8C2jFVZF}yWEKd_&*w8$a3oIQZ+0*?Cs3HYgb_Hb%E?h^d9V8i3` z7cdy$aRnG0uEoL)kGrxELIjU1#^A`RXn}^uU0uMILvexQaDQICga97_+!mzN0DK2@ zO#*MoTm*fa1AY>4v>iPGuK^s5=V8E?BLjru=N#ZxfTMoy03Hpv0h0Ud2Of8g>WH$7 z$K9YDQ0?JyWmHF$T|DkKUQ`aKRfBS?>O_z;gP2XyWi9(QLh z07rOS1qQELz?qqfsQUh>9z`>FM7Xr8w;AlHu0{jZ#$T=Iztrc(%aIOZ^ zEK&|U?%sm(%s}=uRNMwwtb+OhTuyP|XD8sQfTPzAK*l*k9QNY??7(F%E)du!0Ymt{ zH@sy5d*9hZ9NG@If&Hy{_I9=T1>6th`w~7uKpXu01>NwtC+O~+Z#=Gk&M|s` zM`mgCi1LlcHBt_!_VBnDR7aFuJnkjsfNBpqWBX__SXn5Sn0tN#-ZWM!$VeoGl{09dAiNPl@_#_6O!r;F# z_+JdZ=rRh512j|@+3+}8435X(^cb80gTq%)3pYG&DF#R06j+b|kAqhQ3pYHD1%tC< zaCQvNfx%Z`@Rb;x6N7VM@HH5G9R}yY;CvW-Jq8!R;NYKe%nLOhCx~H>u7>9(z~kW6 z+QJQw6T#r37+f5KOJHzG3@(MiWia>_3@(Sk6)?CG2H%Row_$Kq46cU3;Z^a%4Uf~p z;5ryw4}j~AA<*A@IVY6guz2Fcqj%B!{8AZJQ9N+!r;*u9KO0- zxZ!a}F?cKnKZe1Pw}lpDfX5|b*e7G~6bya}gP+FWX&5{MgJ)v!Yzz)xl`q`zxCmh!5?GrCm6gQgFjoqhoN%fa15Yil&?)o;C&_v z0DB$?hwnzt-7*kPUCUX$7UAFlI#rS}gfFKev%Bm_QCJpmF@%GgAyle5!a1nO?5+*M z!9_QfdLH5ERX#=NKsb1CLBY6{$c6lBDl)sf6XDc%UuJm{!of{ps#Nz7j@~_`2;B&W z?`F^4ej%K1E`*MRktX3^z;zM6egSttxcCBo3*oX0I38)*Z43B%gl}KKT@bFifF~nd zeE}~)xaI=hiEyn2oCfJq+6(x4gzs3uEf8+7fcqibZUN6lxZ48Wk8t+|oEhoL-V69f zg!?bxAqXce;8ziTU;*z#c=Q6k1{o@G3%E7Hvleh)gl8|{=@3WnSy78682ljye~ZD# zFgPtVq!-JV3xi8wa1DqHP~GQ8NB$0k=aZ|1yw?F8nIpV_%+Zk+i15o~E(7+?Ap8lL z6Tw~$#1|`n9b$ilY`+!keZsIGL+p#m_UH&%0Tp;L|7$V00>lMyrDQ+gHXkk!gO?%v zD%l>LNxwmSv3waJxEOyAoiEsNxnw`H57uxv9mtp+mq+Hv^aUMlf_`9*9;4rUz#h#5 z65&w%fgw~KWQzry4sg^@BH-wI_$W^W{(V7uG@jXj z2hZdAfJXw3=6eh9*m?H%Aud4mJV+4eGYF^LUqYr?NE3%T(EDbF9%5#CDX z5@7E&hCKr`Q3y~yZ$i(+QW$&}#NmFM4E&<~(Gl=S#w-7!a2$IXxzRcoN|BL3D`42&r6_CFW5LSxFEy@ za9w13w7t|Y?2RzE9pZ;_AKnUh48*WMios7q9FChbvMvL^^9A`T0(=}g&%oO<5Rr!% zep)ej9|j+TxB%62Kr{|~&~qjM9Ob?r8vktwr#v@A?e`(PVz!XbC)(eRBfOi;(SCae z!~PAztH}1KpKlnP8Cvqfak~ZLriQGup?5|hzF2>7#NYuK{1^s5jlnNMTmbixTz+G) z*MsmuGADpNUTA49fEyz7X0WG@@GoR83HF>JzF57&5&IFcJ=!km81|(Yyc~nW?}Q0Z zJ!g>uIrU)Jk6`dg#7{rDoK|3u9l8`*tX}*Wd@}}D#o$I5+yR4oVDO6=yc~mn$KZ6( z1Pk|DT4+52Z}-5s=7IQPaj?hW@Vi}$*~9N_Eyfw4OSr|jG6oNaxB%62QuIo%65%gq z3lDt?gS~MKKk`t*#quRU9F7Bg{)9KL*)LoK#079;;0XNg5Oj0}!%rDv|BY<#3ii4% z>@}c?WwG*DV{jh~9*Du?F?cq_;rez%{Q};Q-$R7Huc929Cy))CHy=Y>fat1{~siz>b^%?EeLd$@88M!s*HOO2Fasse z4#HW;eo!8Z@P*}kgz#37n(|&H9vUD5I1aKObbX?O@K@f<#`Err-JqNe~!q<^GIxpEGoR7@4f&DRrQ=YSH0$zyl4se9Sq3e@cgs&(2 zLECE_;f7=mPUkol=!7VMqdb2X1s=sAzSuml6S3bw_Jhu!5eV-lmj|7nix5tEUXRBA zJ;Hm*_GtWP5KehskH%k81TN=7dt-$6ll`D^a6`BVxtwSmG7wIA{)@)pI>IUMX~+VP zqX?(G4}kp64WtP{ffB$`-UmQez*Y#CAm@w5CmP`k&qr?%E=jgW$3=)3?4R%jl=l|Yf&B)kV+-IY?=6@CZh`QH<2?l7dgOeKfqenO7moKQ z2;V`rmj?Fu&2YX8$Co_97hV@zAe{1i8TAu^aAUH6^vsu!a5FO32l+lkIOV+vBf#Gy zobvtyYQGd}I02j$*^e@?-+^$-dk!*yhalXVY`+cg^9bKV=ID5AMYtWAmje4ygj3#s z@Busks<;5ok!()_d({XhkU1KM34~MLXF%&E2o+cWM|uANje`loDepO;_Qw!TdCvij zLl?sR$oaB>a;}FaA^{xbJqO4P*_;sWO}0nlla6r8^KMaKUyE=Bvb{av^jl#6N@V^7 zaD9YR-j_hnJ1Gd?O19qt>|Z0C@*V{`&#=nD{#D8L&@_T<8xbBz=4gF=5x#JIT|{^Y z*&Z4W$kv8%%KH^)oZ(;M5x`NN@1t=LLpbHV3rpa~2H}xp|Io4r*+LM0h|JOQCn5YC znY#h|+X!FS&nFPRus`!Ez~zi4`$6Mri15Q?9svA%Ae{1^1{&w{2#+P(qw9(hgdZdG zi@=Y(BAhRJHGspR`5r)cBH7*@>^(y`cjoy11WB5EsBv-Wx&txdXx}@0pgcp)ITCZaWr@T+% z4E)qXe6jeCU~q=*i`y@UIP@HWobNdBZ;bHUWF88*8wQVr{nG*?s;>mZ{tnrX70_h}hI>66zEbbrYqGP=%@z~v&b1A8akCHdvUhUyCtwS(BiIlv7Qxn*xfIvyZnc(JjD_fGDWhLT6;fANEEhK}}}A+fZ88TwhCDL*2~Y zT3^dTZx(4-T3DDE+v{oT>*`s|K}PCky86a2l958A;_m3};z_V4z|k@dG?kWuLJKsH z*&|R7B5~1#o&?80!apWNl1b0Y&&!8I^zojb4&*W4*eQTST4?Oy;epgnX`XAxV50wg z#~w)GrR7mmayN!!u?6WhAP~-uzK%{rPa=s(fW0Vyo;I76Jhi1a)HSIrObwio;>aR4 z)EP+2&*?ZsZ#TGj(o_)fE+a)nC<6^HA!3X6Cvuk|djSfS7u1%z7&0=je{x5f<7SRT zB$_Hh)pqpra|}VMq&PRBr;k6<;&T$sw(=aqxtWuv5fErMPah{oPoxe|W~k}`g%PfY zv4Nqq0t(5&FtS{jK-=EgQ`=n1-dx5WN%+5~+hVU{X-t)Lv6M*tw;%5oEqa+TPxu zq=*qkKq?C$5|?W5=t;D>n8_cSNTA-np9p3>UTj}*FTYin!D>3arhYnvHZ*v}@H zma(@YIKvY(JWc9DlMPY}Q$HU!Xj(RR)Q4)Jtxd5adii>4$!S9+gEOb_e@d-MwwDh? z^1{l7VmQySD^w8I|G5~zn&J)3cAhY=vZ(z$OsTDcy}fgAF#NZbk@!Qc=m(8+eP<{R z($4OVe)c3kMXv z&uhzh;YGU`rKo6YxkHjW+-0@B%naPk44|F}x;*Gbz<`o+UQUbl8q9J5Yl=6t91Df{ zL(X;nkOL#lT-tt-L5Pe$W2iRz7WNkK=$ft7e{EZ+vQ)hbs+OsZ|3W5HPuV+gv= zIobW!AvPPZ*;#O2ogm4?{C^82Qc-Bl;OplTJbUF82rUz!6aJj*E96oJy)>FN^>Xxs z))dfnoTsCkKWsdU=U<}DQmU&ibYVEhCAwmP79G%406C-CODHO6zuP;=%M?DpyFlwO zw2JdjaPp4+{zNx#Z8K*xWJwIK1?HUtC&OJ^V75GqS&UwDmcPLh!(`uNXY4|)=v{2cv4 zkR=#c%q-|r|GbitnYWVqkIALyBsci43pqJwp8#(Xv<`z;;|m*n&KjN4;*{%g9JnyX z!B;Xkf}5v(5Ojg>6NK!7y9CHSbO}Ks1kaj)d~onG)E=hrH7)!N_e^-bi1Q2Z_J-C( zxFDhn$sOlTAiBAeaLxgK{?Gz57~KiM&0g$5sR;i51Q#5%9QK2+c%j<>|6y54ndOmF zgbaC6y5Mv(Z|rJoQEca)eC8QaO@?5RjN~Lu&gp+jt@(e-P4mCzMz%-SFBp}g6zks% zVUOVA25v$>=sp6t*nx(R3n3Wi53O&Vp!F}>3+#6*Ay-6jKMBNXSxfp6TqU9L9~^A& z3r&4K-q1A%^nw4h$vym*liLO3=UQ`ee8N|b^D(eb&B51PzuVs;Qf^OD&&(1slAIW72 z-Y)2*H7{05z5)L3&^gh0AGAD0ibv_=AkI`KCU9l6y&a+3$yNkEs5{SwLLJ;jq8c9{ zEoER)+na(rx2P}3sRnf3chL#(Ms91sr$aE#P(S{}Py#YQwV*~t@`J~<7SSIr%iN&} zl4!xb03A%^!85yK?i1h#-Gzo!=ngf}lR%cCmYm%u!fDAz`rfWShCXgkKIWt?&ICU{ zWY5!If8n}E8(z1|&fX#Lfz~qwM=yP63wv#IIeTO&1n%gV=;)YhLl=PR8iv~NIuh~= z1;BH$y9tYVoV|23m!DmN`grpvA!7OKZ=rqnL}$Gb#w&hU+- z|3}_khe>g5;ldx>-QAtQ%s{XNXK)$Z83y;k-GT&y1$TD|76|U{7Th%u2m}Zag5IiL z>m3$v=yO8O_uYSPKjG>0Z&t6W+O=!fuDz?f|5i@_@ZFwD?%A>bu7p3l{~r~whWq8# z=^Q=dyOl*oXUvi7rQeZTk7PNNLb`Nzi~hs$?&V#cv%32h=a}<4;P#0lPmhzlLI3F# z;0$y*M`tzXIyS()%=*w9c809owRQ1B*V$YwIXkX#+xDJ5I3}7tbhe#0d8P?Ih;zpG zcY06GV4zHTxqSdRNp=N|2wmMQBDK6$n|xBJp*{hf?{zHTpECWoBisjB&$ zH@bf)9#p1kiJ+?ab+pRe%d&bOz2Sde(Ez_Zp5=FH*{-oOU)4UOaSI$6x;&>i{?lby z8)t^#Q=9rxVd=12MQ68{aSEWC`<8$JltNXvu2d}=^S~l(0KBS{tL#uYq)wX3j zXAs&QI(HW0{P)pr`uh&b)h?tPt^9}m^~vE1=aTR4ubF#g zSG8Mk`(j<1HFG-T?v~JT_n`|H+OGV=771-OC)8dXF*=^ip?$v3U3_p=j5z$)HpTR7 zFfvC|IiBfs_vpvGxpOt#&Y8ln)X}*RZ{qX^+q;G8bQqj2i95yazAA(Hou=-q;w?g) zNwwmh$zacGPcPqj?Oqj7yCco(hp3vKi}R{FdF~{u5Zt~-e?vyCUE=U#@Up4Ir|CTYqKWk%UP{NdB<;^)>e z_rR^zo{rtBo%02iko(Tc1Uh|2r;q06>7cp2q>o4J?DdDgb1z17XDYy%)(>)KG@KC) z&-k5lIn&bFV%_M!r|=vv?ucPf`_3KRIqE=Xd0r;Vbui+?26=|Oywx&9e@4Z`Xvcp` z={Ebe;x+qpwL`klvn7fTfB0|9`Dgpcxk$JB=yMyJ4?EFZI({g;3eJU_=MW1DZto02 zG$~Wo8QXID_+3l1uY@~aXuJIUn>u5W&aH`_v9K~_-S8^SLgP&(z+&8{KeQ4!;kFX| zZ8GSS9e!sD=`%X~AFjD_;btG_KBP{a-Rr~udA-27 zaG9kCF~x+=(75NozwdMB2&TR6G$HOmtGDXN|Av$aY}~kfBVXr^ozPn*JBK)PoBwXB zoI~AoZk=<||I}Oabe5!LlQZ+b>7{(C8~QKuft(>3zo05kQ{ax|e6r(#Cj0ZMnlml-p@{!hMVdLSg{@9< zKK;ab!rv`aPq)j{;|i@2s8_mjc8cdir$zs0Cva$2VB6f&QE0bPOPChnywl#)<6K96 z=3Pc^)$iEUz1ZpObX}XtI9L_!C;e@uKVIC2vgEb;RNMVu&eqOkfHMU8@r@hq0f>{9 z=foJ~*86{OcKr0ov03>>&h4}ASs{;e-=}+?ZQ~3Q2Lw1BJ$FRZJ^B4lx9_@!n;sPzgx)%~~n`+aYY zI_3T8L)%+wuia47Vf6OikE^-6^jz+LRh*TO<^?s_TY`_a>qEu=`x&Y+H6o#v;Bz~~ z`9d$>|K%WpTVB%i2UKaR&By1igy+;4S_i5)MfNWfd9GB=JzSmv2`^nY&(zZ=dT-Jy z>9~Dc8n^!!ogY6hqefm&rlDsyz2f^Pr(bi!hTL%L?P?3>_)oR^f3IdOsG51sz;2i2 zQ|DLD+4bX-t6S?$%cQ5AkGq3zNe4Uk&QM8zs*~6(AYW)Laauk!;~&rXe|+|EyV0L{ zvikTSl!El^tk6@K+mmqbsdbuG=X~Q{%Xp4-|DY;PhvL)Q{H1f1=!}tJmH*M5;C^N7 zZK(gI>V0Xu5bjNto)d##foSQ8=f0!)!+%)bnYVXMWSA&L5RSi80I#aA| znm89ro^#>9Y&hIjtZf(P(=|@VHT0ZHt+Z2>K3rFR?pDi1sf_iQBZ3xzbM?nZ$R{tD z=$-%Z$e>s(XviY4r0>Vcw1&UL)tssUI1VqbaxNys1air<#Jsf8SvDzGL0} z&X#G5NS7&pYbXChN4*6v!nt?Yng7tEhZcd}^gro7AlAzTp`Ua8g3fYKaFEjqG;=56 zKOS$9%N%F8rBTby-C8;yRMmI5cQrX3%&r)D33NKCI`ranK;=KrC69h0z|=)utq)ze zzyFQ;g8!%$^XFD9cN^#K-7-$cHNgFFo>K_u9ewsO7CS zZmx{mYj+0vOn;j8FjrZ8#OC+>3DIfMm`KFG;(ee^?X*- z^Qj)0W^vC!&N7_xl3@o=jQe>X_YclZ{PJgKyeqU4hBRvBOkO)@JzfpZDbQ&&+=8nX z6zE=4>oH4_o+%p7sgeKSPRKcb2x`(PBuG9m=^kJot_dj~&4hH0osR_s2RV&)cjsf@ z|L9$4kIbk)ExVYdc^T396#kp{ z@^HR(!SitABN?x+?#8>{ZGrf)#-kYj#kh^fH-5Q!Y&^b^#dY`F)Q}(Fti$VxZ@zKY zGn$F-=ls9>;Pu2eOmH52bAy}5{kAqN_lTD~kBr-Li{~bA9=zP5#_jgjHE#1XQFotW znDzPA#M|=RY~1F*=fxxH_hfN7#8P+PmfS2ipNY524K{Aqe}r)xzsa~=&(p?jo-69^ z`ncZ?h5hp0#M}Jo-3@Xcyj_)y+xR}l?fOhJZr5kOahoT3gb&Mgzl96ynb~-8hbEvXE&Zn-CeB!<6n4*&u`*On)m?YrHuDBUfTG0<7JF5_Tp=e zmo@RHjob41&3HKzk9N!5-txx7MRLG-xNh?&HE#2yHE#1{GH&C)R(H!kt@AIs^Ur;h zVt3Zbebh5~Dw_3d@5Q?tuVmu;n*3iFALPYHn>_Bfl%f7i^b$YUOZ;Ll@heSyWs^T@ zWZ7=FeC&G0QFr%?`|V{|pG02bQyO>6`I++`_mSD;sb})|nRvV0e8$~8Z#7RbFL}zD zc$=q+aW_vycLSYAJ(I^h2VuLKns}S1jd3?me9hCjPd@kCKPo98)>8XA}1`H^_{+vBjk-)p?PIqr77(c|_9a{Q#z0rK!#pKg;! zR)0&5JPD)9dSbcoFV)@p*2t`99pmn|c47V78@KTTz4&6|HqTKne#^Mc|H6wWizeIU zuD{LiXWZr~<;ClJ@lIZRvT?iI6~^sycY5((jN3eKjN3eMwISvGmD!6I^5WIJcq=d7 z-;0k_N4<)!_3(j-Z({1tb1xny#)tjreybwtTSnu}jQbn6@wJTG_(sN?n>-ziw=mwv zcuV7BjkhvB-FR!`i;cH2e!z=gGj7kPca7Wg?{CI!d`A7EHMgF$HOqB>XUToI?tUvC z%DJZT5aaEQyWcK}_-V#F7@w<-`jFiHALp^exclvu$g|eualb_pe$b1bP|xb*biYLs z@s~`z`)!f%H^y!Gl!)b7El)XgH}O@CyWi@EJi+SNu3WlZEsWdk>SXfR?HcOEzgOq& znrha6#xEInzts})&y4pm9!|fk&aEfzx4f+!%WT}emPEY! z`%CV_&EtM+CfxnKDfi*}H^y5Vw|V**w|T}Hw|SNtxBLA^*R{B?Y8@SO76qW zZ}XJ$;?<4Y{Pm5y`IBq@=EiM&h;cVQy~YnSUeIjUSarAl3^eZk{*wD}*T0bQ^~T-& z<=g=0vCa4(6MxX;x5w`(6L0fhGH%!N7n5hO$^YE=x5nS7b2|_zo~*CCy|x{wsqSu0 zdXuMt7jJ4jr}G{hkCAo2%gtl^$#IO^esyBwnay(38MpCSjNAOa#%-SB>hAUqG5Kqm z_#BSE*73K##)q2tktWY~#wUA;Ut>ItiQjH~nDJv?^1HwLr+qH=YqPs+z}>^UqT6R z%OS1vFS{PsRlRsOFFwY;<`AGy1SnCy4d}lCHLX3r_EE+xSI#p zp@Alky`HUY;%y%HcbVLWyIgx+|Bdk=v;K>W+kWh7qhN1iL>$n%$%JON3a zjd31s`Ph0`UY(D}Dkk36tA@sHJzQkmEw>_CA6Al=P=Mcq5 z*Z9li7|(e~j`ev(jy&=83#73=~P#%+6b+W0uLz1K|s+{Pc7_)*3qCwFUuoEOF$ zPh@<8@xsR4Z?8wYU0L1TkG9-`jN5V>Z1OZPc}ALew|)j{eV9s)<8cu=;@5ido#e=K zj2w9`kt6;dIpUv_BR*^jx0F8|cko!`$djBL@#WOr`ftz6wT;{JvirMp?!%3@=jF~O ze+EvzhoM#X-{+>Sr^8@KT_)ZNWV>--y`+Z9ayn|fE1$Bxeo^WtNT zS2Ei*+2pt9&6!?&smT*)@~rX_zr{=ZE-O?+jO|AdKm%cri+bDtv*QNKm*tL@tZ zFaCtQn#M;>?JUfBxW(=+x2xulliGRVJmACBQ>6BAsAIVq$dNxAIpRx@kJ0?)$QP>D zBuD-ra^!F7#ru-4(ENkR_oii&r=9?#IqdexXshccqWs7fEWMHxSPMXC%cc&Y~wc1BIEA=9@XP$ zqj6h42aMbLc0!%&+gTHD`-hi}+y3D#<94|ZP5wou9G;nYJC66-i$_c+1rpYIvh_Kh zy1V|1P5z`N-u8de7`OE;vvC`r(~IXZZr7)fy1PD0%=#2JUc`85;}wioFh0w872|f? ztd6={K6ZSjsd2mC+nPK}P5x=dZNFlnaeMu;+~l{{FKdn4{?Znc=WDav-6p=Mvk~YY z9x`t8oHSm{#9ub~iyPN&tf&2nYnGeMDKGco?yq>pb9+=gf$;*y6B*ab2v43o#&ww1 zh&jN3d_jobJdUc9<-T}>Z{JZ)bNoxjoBRYJYIx=urddLwlmMhf+1>Zx@B z$RAhd2^x}TQ*S}uTfIH`_v+or*Qxg>zoI^rysQ@3Z1RTci^)gmc=Rgrjp~`y-Fou9 zDd)UiyrS{ZCccqzdwijs-TYHby!C#@OPD;%j5juJ^V|CKgNe8GZG~}vlV`Q@QpSHY zUe&nG)6V!B6F<~<+^R4`*7Xvmy8}2-){2T zc5kQgk|sW{@$AO;7%yskukl*O_Ze?#e82I|#_e^nt>*_#d@&P$$ap2=HoraY4x4z? zE9cbWxsJOOP7FfIF{?CJ!#zTmukjs z`J6Ux%jb-7TRta@r}J!u)Dv6JOB=Vxb$a7A9_8t-|5=m2u8FsKIvI~?;-?vpWqhCU zbH;6Ze%`n({|m-#eX!%tSbywaZ}s7g?)Rd)K8XKs^}(*^C9^*H%yvyMUemZOH>{_- z8p%w&ZTGCVGI^4k_yNXke%lUTHt{`7yxm_@j9)SF%Z=Opc;1WOGH%;}7sjue{B}QH zGoHi5+jg~(aa(Vz8INu9*!Ienk3H_}`Nf`RZ<2H}&pV;Nva(HO+*#6if zX3fY5W)Ce;H5i{J;Bf+lN=iryIA&uX|2+A8x!oPTg~d`*7W!U)*hUAFjW4{vX#t zU%DIWJY0Wce2j5hA9{JBCEl*jJmYqK&KiGf^4~Q6&bU2}-W%8HV$XWUF`n7vvBzB* z$dxF-Te#)wl}Wx|L()}NXDxek8FIaahv~$aT|ZjxUDA-jN9Y- zv2h#ktv`eP<*vWIzOe0K6elOP*VZ4~&KGqH!FjlOY&)FZqks1=)!o%i>-Iyq5){+D*l=CSRV^*Lrey|rUD-nL_Q{cSsD{r``4ETbtm+m6|BGh5DC zOg!qjTmD&%+w*TW<95G%VcfR2IgH!$m(64QEjdlRy{_>!Uc&4bKjZfJ^*3&hFZZ)h zs6Y06XWM}^CjTu{-|TgnJsxfQW6ztme{PRQv~O-XyVoFCA3H8*_3a z+_sZ;{iB)kA7|oi`P=h_T_1aWXZ=?%dEBuq_rc}h&fUX*a{eFnA-{1ueqP@AW)pAA z&F*)5ynE~S+Hre(9+@G;xwgOYwQ-xjpm7_Y z$dr$5pKbYg>pvGW>u-;jYQ}B-Y;N4v&u@*}`Y_G7J&slwx8tI_jobBaX#D?XIip|d z9@m9T`P=iO-Cwqx?f&}QcyHs|wjC>M)@P9|A5$N08F$Cra2(n5&Q|00II`m{ww?r- z<=T0i9VSm&v)qy<-sZRKqv4_V1KiRBF0%e1s`GpfLC$kb;}@O(e_K=l;{$H|CFh@} z@j*KPmuMfK)cQZJpLhNZ)7NNMUB95_KH)s&y1U#&y2H_*hxhrxjrQ>=DNjD|RM7-5 zKLY{I0bT`LIcEqrtbN$@-6Y4~2?HTkUQl0T9>g_eKa4H6iS zysw_nQjw1>Bk|eDS9~dseh$_%qVAXC6rW1H68XL>lBX{D`nKZD$;WHQzY}@+y%OJ# ze1TTpQRG{-!pqM`0#EA$9Z5q=SG*;iO7HaT09l`Y;Cvmk>3xN_)_GnGKmM1Z&L3? zzEFJvd1}27Ur8QIeHZ!9dSX0Ce)*8B&t-DN-y*-O@h`|<=yCd%ywhFDA3K6Pqnr_+ zh`g`HXC+Um6K;Owhmy(hRe~Jx<;c%yd;{`RrDgq^lF!qQPakr`4EBemVz zN@#FFgIv}sJkhfI-ntYBfw>Wvx&XT7FIpXV+m)H3A9atJpj`(rp+cbV5d5nFso-4?E&lBHCj`)M*Lp1&tc_zJ3drR)89y^jO2lY9@ zKzW^*{QD&0_sk)zB~B^y%3*Fp6DmZvxYp4 z`abfsS`UwrpV0pE4RXZ)N`6`6-;ke6D93g9$g*D8UjL!;IypJw)04kBE%7DDhiLz{ z3HeSf&)($m^n5gkJS0f+Pa;SBEb^Wj|0DY*$+MBXdu;I|{|k9#t+x-! zSK-1giYy1^jQB|8n>9Wu`OnE^f2Ad#-$n9%Nsjn}g0Phz6Ckr@%@(WpD#N9u4p{I-xA() zoh)}aK7n0A^_>JU<-$}ks<4==EeJabnOkP^p=XY|%|4E)-D^Gc>=u=wJ-SsSskB=&Owmjr^_due0Qc zze?`Tk+_c+NIax7GMs~x(i%UC z{15H_OeAjTDAub|_@XUTVmmpo6%kE(~)@iUZvk$bXT(aEcSDV~ZP@tMdQ zYJ36mRLdn#G4j0c#H*7dzCL*|jc-pry0_%%PVTovd^kDc$B`G*_=V(QzLh*H$a^M{ za^6Rd_+#Yjbprem`Lp|yKc4o-v0tht7561S@LD_{dB||_Kyt*_BELFP;@gu?jv(8G z>j|vS?llrW+DrUo@@zjz{3`Mz0pc6TXN(pxuZVapdpt3fi8h zB1e2C@&IkO3zH+h6#1lRQf@)y^SjA=S2&*Ysu%5r}pNBkr5Z!|tkTzMb%%hOKsItuwUJ>MlKM|^tnhZ>)k zyn~rSZ;KUj}=ey!RP%TuM?3csv(}09P$3- z=`}upe7m++7065I{%S~$_!i{VG`<&k^q#Vw1IagQKXV#6;^&dK(el|$en!U=c9SR2 za=S#1_*>+oHU2euCOv+`>G%QmOQLkLUCGE1kM9RYd^)|}`HJEv>v#*k2N>}W21$N= z?jMf$7L+HAmj7V#N7~QC_X8u(*<6wz^D1z}FQz;0Vc+Dk$Z*s)r`)0A+vrQ#_nwR*wwH$Yn$JX}eDmmiskpFT`@`u%aH`cS;2JtB5MRj|VlMkyU@#)AjMiT#;e5sDl z7AOB=s>IhL|H@CiG5Owa#J?rS`ivxR{gcGwdvUS7ep)UoDE^zm62FyvY!-2R|1I(? ztRRl>zlE@T zUKj60@gua~HIO{oLW!S9zW%ZJO!9hz#W$0$c2~f8>?Uv7O8h!`@?PTi$TP{|>k}cl z{2kkca*jbhL;F!#$@}T{`jh9lC3yqL?{^WeNgi9P8ea83S!t3vp zJmV>UKi!Yh$fM}~+CctB_t#$XrU|4%pCU*83*^x*$ojk>Z!$(aoF4aB|EyX+qmqx% z>-6m8zm$_a`N^~CeIrH4AJvoi`s8olh&LfWQB}M*dA_XT1Ic&jak_-uKcbY|X7WGv zdToMeK?@Ih+@^|~hSCL~pZaw*imJ)xQ{HXQ=&yug#^?XD=U$2XwljA<% z7-@Vw50w8s?LWjPuX0}EvXi49l8d~8o~O!@qn)Wjezbt(Z$U4Usgi=EqUP_;t|ryGs-!O9$zWQaem24-oX9R z5$EAgetL}LElXZWkE1H&2bM~FYw}6LKAp(7>Gl2ya`flNlLudvM9az1Km3WkzruHhCmHkK+4aQJ&~O$4n>hgBR9*X*P1i=OVA5?SCC|#5W?3sN?hF$Pth4Q^oqk z)baBTUgCFQ34pEp6?5kijmZsf^l zO8iW6#4jX|epBKPko)R5zzOm_+O9q&NBk@D3p*r#avi6^enEVC@(J4iDMya@s^s%^ zoU;pgNIY3?AM$43iO(WO{37zFdR!bNNBl|h##*B+ohWquMX}iyZM`w7p09 zbkg&3I&#EkBVRj2mRp4!@pZ^w&X)Mz zBAdj&Cr5lFt&dplg!~epg*>d5zaM#=_7Y!)JXWB1P4fO_#G8`idbu5WqPG&?hkW1H z;=x(v8SDQlkGu{c$8}|Ia$K(sBG+o=Go3u-k>p=Nj_ZZZo`>ZAb;O^L&(r>1 z7@c>*enCAQ{200aui}@y_)YTNdY{ZI@`~DCMgBtaVY?no zl-CK!0}hI3A#eGExG#BToewHazG%F}S0eu+qIh$1v&1(h-}_3uHTiFPULHu^MUUU%ugRB0 zm-rxZ#5X6eukFk*a>S1%FQWbOP2`B*MLw&8tj`^C#6KiY_(I|%`pYwyPfYSC+TX}d zj{LdF{m)6>D&&Z-L*Dp;#CInT+giLoc^o|+$CG0mdph}Btsfi75x@_sjpB$93{TgCzbQ`TddNK6+h+ zavnKWJTiHaLgH!25ub(pkj57zKXy{`1duo`eKa>SP*kG4hf z2a{u7sU`V49e?#+;F=P@j~wyG$g@Y2_y^>O|ARbAGKr6! zPo7cEh)+y@J5b`jB#&8Cyde3HH^l3ZBfb%Nb{+rujvVo0$TLNj{A#7b9<7TH=Gq zZ;uymP9A@X_$YG3Pb42(MB+D)BYp>YG40pgBuD&xaz7m>N%)m42jzqKl;juQOI!ds z;wzA^(fboZ$PwR-JYRLmKa(8s3(04EA@K*uC(IE)Ltb9{|5wQ4>Nw1Ma>PgaTJoWM zhWC=!>B$kFo&4epiLXfR|BHAH@`<~|Tao+S7w=|$Pqt>JX<))bBY}C7s+?) zb$vt~r$IR&J|_8$#F8K5Ivih+;^RG)_?G0z-+_FgelBt{IpSxNPnswBkB}q&G>_m>lt~$$MRr_(|l5pG7|Tdx<|xj`*L+&*|rO z-;*OgQenx5?ag&cUgsd+uj7Py$h&L5H<&!*X35i%JaK*T3FH-viO(Pp{6_o$dH?d_ zC&-^A6MsUE`&j-WuQNj8Qx}nElmqUQ$xL2;zr+$667t{5i0>rFeH{nMYebUx$K;5AN#02Jds6Mkp*#_vmi*uo z$zOsT@#V=6>v^ypIqvJ|N`7LpO4ef2H>oKOsl_U*x}Uk^ITD zzN36_Uq?Ff%G)JAfE@7^$bEK6d}ngR_a+~s{g#>Jh+jyaqNn6PK#u!5PLRJkBk@nk z5&w$(sgAR!DK76r`5-&QxeK-;(S1_FRv4lM=m0sj(o;Z@q*;I zKc^%)?$4=2-o#(>G$22!i|;0%^^^Dw za%}H?a%}G({0HrCuOvUE>$#CUUPZ~Xhdlan z@uTDkwH=73?Jo9XSv~J0C&w4?r(^Ff`HPT8SS((FyuV&A)gedzU~+#QzwJwo_5|Mp ziuFf(GKS*Q>iKIbIr8BA!+Dld{BFH2+eAKifNbw}@<_|X50dxWD}Ic8`XljkfB~L$c#1A2FbVuT6k)PD@ zrA6f5rpAagFyU-y22Z z%aXUzd4wwDmkvmLD{{nlB!Amq;=d;^-AQ~B`N^r`E6EYRp1iikpC-q=!)5Z45hVX# zsIqnzh8m)9xDueB4;Nd6?OcyaP1UBt_gm;O_{C3#-Gu53$w^tHtICXf6^ zd^q`_v*NSKJNziVn7qj!;y;n6{6+jA`QBu5{yjxLP+vbLk3K^3ye6Nc?RmJ0@^_Sf z%C7P{Ci#stvfRw%vF=K|A9?2m;`zy2=y+6l@(tl6z8d+20P&{eclCJbM2_|BMV?g8 z@86RneiHeaKC;}EoslDE|QeUNy%Og~ zem$}5uOj5Hf0Ov?I$#MV3 z5%MK5CH@9^Rh_T-l{}lC?_QAOJQ7u}M^Vn`2gW5|P*;|lnjCqukf(?w@de3oo+?R> z^Hg>6o_hXmME-m= z(>#YLPp&f(e~NrtKJjbhSf6|3*sdq!*e;){k`L>H@Ar>Pp4bg=9tqgBzmbwWzV6>l zjNcKB}X5YI3Y+Hgc?IUh*7z zeHuVMvbp51L>^5)Z&j20s+NCaa(wSiEArwkB!3@r#1A5W&_v>=ljD3nkGx%fiQi6+ z@5$LmeoM>w0y)N`ej&&A*gPZ;_eho-wYok#PZynk7{5wHj?V|BCrAEluzt^)YgMPtFKC60`tV<>-Zv$qinOqlaW_AE$&C2wt#pbc|{!;tx1miRN9gw&ouI>dVRE<9N*is zmb|2X-`9R}#2+JnuKV{FavU!Y$?-chQEJL|qulU4KQYL0-J6#D%p7^YFFB5*g5;>5 z0p!p0{)hVH_}o?qIqGe1a^xRG-Z`VJ=Nxi;E_ekw>i;_O)?Z4VQe!=I0(hW7^}H`Rj+X)C zx93Zq(d5XpihQodZzZpy$LS&RrCR^bk&oBUW#1+b=P&E?gdF)_lK)yq;-l4;XY3cm z$0a{gR^qafr_t*^Kk_JpCB6*#X5C*E$RlgLX-1D|q>9}+i@~t`#)sh_X9mtbKmvN7wZ`=_ledW@UY8v6@~z05?v(g$TzP&#vuz3>}|Fxkda|@+2S+cT_wjIojK7hd@l0*_r>dwqn&9(jy#>o ztIn1@)5tsgAU=;gv-)20ZLcK$D0x!7Ub{|?_qWyq1IGWn?3vOb;3(U1C;9C=2O-_zrF5jo;llIM>n%iT|o_~Yacb)4ZLIpUv_ z7u_xS69vgL${F#g$iLO|W>Ip)mmv?hA$gmVBObq#8M@r350pz6yNqhrx z+^5u<9QW;XBA>lM@(d@({Y8_>k!Lpf+q05qJ9!H|e_tVw&_?2)k>hj3VS?rFC^vlm zHwt<9KO`;hj3XUPX2llVvE_#E*I^3$y(K4v3%#(u&5V+qOge-*n1URix6MFaL+5#mkz?Gi5;^kJB)?Nk)}u3d z`yJxF$=_xbpGKa!fcRGO;W|!xfgGRPy+J;0gyi{)9Pwc^AIh!F5{XYjj?e9;A%ajoCTU-pvt_vHAVxJWJK?Szax2 z^c$O!V;;F9Ir8@)A6G~6Pb5cwavnM6(Uy|$9w2#+kYjx20y*ZT@C5l@{d~k#a@4~Il00{`%(TF$4fzu{hpN^ z`TfcFMU(uM$T1IFj~w-<33;J{lBW+j>d#>Eov9^$GCAg9XOoW}Eb(i|F@Cs%9P_Zp z$n$QKJeSBZZ+MR!^O(=cF^?Ixt>nXg!8~Rxa^z1)en96Fvyda+m%M0lSzc*!%wtv} z|0cY|Hz&tDW^3}9IzKy@9QAe#Ip+Hod-0XzDRmrj7di4AByXYjW!)f0{5|q)+JEzD z_wjx~d?fO~=@OTU9Pt^+lcbXP;^dgeEJZ%@7m2S)j`@WagS;rlB3<&K#qCL9ppz6%5u+`jD-XZ^1 z?@xY7j(N<8?Ij<|8S|Ji$$RU#UsiI=WBQXf%O!a$kz*dSCi$Mc65oRy{obMET_Z~T z1aiz{&LPJ<<}&hKM}(bxLxyW4`3blaIV@6UkGZ9Q~z6U;wzo7kmlMkOVGe{#eRCC@!U z;un%*9&-h`zaDqH$kER~NPcR$ve9l&hkE#C*tFg@6vg5UvkV#<|9v` z_dC@fM|=bFs5%bTjU4lsgUB)eID&lP9NC`v-EtK^58=f zAEV31<%xOBq~w@?OiRA7sJy=bd7aearO1(|68Vo)CB8X1<|RYOhwAv%5OTzSPaZy4 z@-HICJmyOBD?0AFpB(d;$H~9d^T=It%wzsezFzZ3>MHAn`iyzZSmfOTBrX#<<}q`U zKRhP!rO0tTSc&{W1&MD?j(N!t@&_p;ekeKON0a+rmG~9pn8#d4K4G%NA0jU_NcGI&(4!Ou7Y{YIOM(b_XV<$V>~JkIp!Y=kr&bXA?uQ3+^GdQ z^0X&^a$eSZBzgNC;uFZjyb@nazFPO=S@K;!O8irD%uBu^KdSXRZg+Vf>NDb#l9wDV zasK3(mn=ZuWR%2LAxC^2@=gaNz9Tv2C3}+B(0PQhUG!8 z1)EGah-)-V&dk9P^mD$s6RC z_|oK<#|$L@?y1DLBgZ^uSMnoa!+75CJ^K;KGl_iF3-O=GF^{>GJfnVZ=XG+-W8Nc= zaz^rp(Rm(}C+0Dukk?Ev@oC60kC}x$rCu+TBgZ^uRdS#8lD`W%<}v$_XRj;qv&b=z zxqv*ge$Ulba?E4yCdcpfo+ZaT=2h}Ik7a%SB*(nuJMwkENqjP`rzn5KrzO8KR^m&L zV_vd6`Q8N*-;x~h9mv~he|Qx6&V!N%zoU-z+!I!O55;5r;b(HpyWJ+QF-h_~CPzQ~ zEjhmTEUI45VSR8Nnur|pr|HS@eP!9mC!CP=DNT<4e06fy?)6`j(9)v_jV_r25IqGu~^7YT;{r=>r&jrYn zm6P}i~_ooFp#xuK+V_tOtIqLr~@-+=*eWsJ6-fkgB{og_UK(7~$kt5F| za^Hlq+}GroSB*SlsX$rJ1NZDVrG^EM~Hq}N~F$T9yilpOQ6qseRNb=e|v#IGbz zruR4QBS$-So*eVM*U8tMlJfbJ9P^TI$s3K6_}GI!-d~7MOg>!i!}BFad_M9Fnm>>n z@wLcnJ&^V2LXP-e^M9ZC^^B3*?yRy+L06ti*@YaYvLV=I^4Bx6}HZ zk{t0F$)}By{DsKTjs=nyv-4<9_|f5kG{ySxU*jfE@A5 z$;;_^{q-jeUm zAf9ZPJY#*jK9<-1w+{egrw@ZO4<>*ZThh zIpWunFVykABjlLpJxv}av8>N;hJ2ZfK-uUE;3rc);a?JDQ zCaiUEfOla&pA~ME+inub;^=&wGjd zbbZPHJ2~cg|0ExOOX6dVkY|)X=6Ms5*S;!oImt24n}>YN3yH5tj`6y>`8ScTE+>A0yrhl~zb22Y*L{gb%KK2Bn72(uUah^v z$J>m{sZ$OUtX5@YMN&HZ9 z#E&LFsppp;$q~Pae93jme}g=9-j=+-&Pzu8UfzdtLwro~c$(jr9P_;S$Oi{W-pb^d z=dDftv(AIGCC5B(7xGjmB>y;a%=1no?|MVx*OKG&s$0lsZkPCr|c~x!C z_mE?r_Yis9OR~K;$uZA+kGySFiGNLwdERhiBfb>* zV?BOal84UQlDF3Dkx}G`pGe+ylB~}fa(rHO2RS~!d5j#NSG`P*`PTd7_`K>%a^&|J z`*Arp*754J|ul zG2Xt6e4388tRX+3?ZbKUCb4CGu8|izBL0LN%Z;Yvf~e2=^m`8Dkr&Z^V;XYgDM60$ zsH)_c_isY}La%>Xl84

)($2++p!fU2b`3>xstlIxfMvi!Y@(%4Ke_?WrkCh`2>?ra0JwPls*KguY zDgH)l@ebq%^mFb#$)o8w>>%>7y8UCw@q21B$g%!Q$kCtwi5$PDww=7O-v4=o9OZeF zymBkq-pAyKk2FF4j&l3yn7ocpj_pcKj_t}$j_t}vj_oQ&{_cb)=AIJxvkv!YUQLhe@qh6gRN4>gAe(QJ1|9~9j|0g-tKb&5F zU_YY#W09l$laTMZFU!qH9y6bKPV)Hb`N%T{N_;W$k*mb3lW%DwUZ1?9w*RBZ_4Md7 zjy#TDpH3m)&|UJ+Az$=Pd68Yit5+9qqXD{*eRsmLR# zXCl9sOqQFQ{PAwdTaX;(T#_8y)r5T6Xvx!td|_7c9^^RQhmv2NF7e~Z!|AyBbn^5% zevaQ2NBQh5FL};Wd`ms=-yz5PJR`q7Sn|9fk5F1X$`pCVa*-!7dDd7Gmx_FnZr4}j z&Ghrp#mGZiNS+4d-`y2&#;)bri5&aAH#zqEU~=sDdF1Pw$a0sFx7;eefgH=-Nsi?n zBFA#?k;m5h_L#h)_8a3&mE~iywlG*IE)^ncP?BXKRt~-Xrmy z$qQ`^cC-0;82X-UxkXqsglJ5=>A4dL%w*RBaXXcUk>EsJah;Ji*SVjCW`TZ{9 z=g6@iZ;-Fn@q$O>xIf`JdF4`)Kguk5#{RA1E3Z?Nr|u+Pi2RE7uWFDtNGb94$=`h? z-jjTUUVnW3hIqE|odF;+Uo<~jc>`%m7kzd;+-hupW9Pu&aw`+(` zCBLAbYnwyfGn~Y)B}ct|OTIs?#3z^|&nV9+VdZrx@-<7uE0WjJ@1qMQZ?i$-TafQt zC*GTUsn(xw$XDv`%M2qQrRVYQ$?I#sbTWA*ZTDu7=UE`@gYR`fIlR(#cp1fCSS#^s z$(Q~hzLEU+EAd_AxG(N!a*R`5Bgf~A9+2Zcy+6q@t`%;sEFas2`x#=9KX@x~$;o@_ zb*n!)`XOJFhv<2sDEV!F$zO>)ZC>$Onmjry*ZBOyUZWw=F7Ol6=%|@do4=pJ`5x?+NNkzE%4< zi^)DhX?QJh| zw6}xFBWb^G968$6>Evi9=ac_lOV(!tIpTMaPn#(5=gCnHcgWGMJ|wTM`#XZRi`c&? z=eXo(SCf*DNE61hLjL4vCkv2Y*6(|-LXP-4 zg&ghb9`c9!`UW}L)koxLS6`3^C6(pI)A1pcKibt~W z$?N&ZejGrKc6AuJpWe4OmmKZtGIF%5o5-i?eG%KqXZDxveL{}*_9gjOMkvo+F)XZ$@&ox7o;NWtP0T$>&;){`^y)8w4`kurGlB2z?PCjLj#5W*E zd)t`YS3l?5h8*o}A9Az<-;tx8nLv*Ab`E)t+p?Z3$kE>JAxC?AjQnH*$@4S$8SS^7 zC$Fj3Yf<(33H1T>Cl2`>9mh*gj{1|0yvuW0pTgv*KPAX(>%30|a@3zH@OS_3CU}gkhmP=h|fcQqqxLZCC718mpr!iSG$wrI2ufj<7g!L z<+QTgrQ|q{ek4!URN{}5<2X9UuIH&|fb3Og=%ETbq29_7j?sBYy}v@((0$6js)AIC(D}ADc{${By{W|0nXssU-ha^6Yw@ zbBG-Ieop^veP7~Rlh2JV-ithjjz0_{ zAE52zO!6r@FR+5V?0Ct)o*a2jl2@7}@i)kK&k?^*jy&O4$=^{vS?kE_q~rx2i)SQX zGg~|_`9WW(R{gXVS z9NtEd*H_7}X`YAV8`a;EkJ54e=z4r0e`@W=#wCxc*U>4-Q=OFc$xQz9SaE;yHQ$JT zO@3S3fl}nLV@Z59@~V1X#_^5yzkE&N+fjT-c=2z@)7%mtMUMQ_$S3Lb{$lcR8zj$9 z)Pb$`bm5X@|$|Rw=SR$osdNB!SR9=o;VzfWFS?<4w)JnLkMe@}j|k$A+7@{DqhI9FcBCtvhR zJT3Xv`QpChL!XEjA|G`^ygd13?I+hEpQ@j8X+hp!$HTjlAIT;82a)G`AU>A7TLrm_jTOfB!5S_HL4=7ACsq?ApVwoMF#OGn?KGo{;j-DO5RZWMXAWwKb3f2 z^4Qvc_?rCK4v8;K9$Q~mBd>Kq;v13=%P&5F{EKhJN0CptFFuw0jIhr#@>$Xn!n*k5(i%IjEOJi8aq<;4TZuO|!RSwL&@-+Re&2asnCD?XEa zyPn6lk*5ik_`P2IiWk4_#ov(k)A9+g=UbE;Jh>N7@5R3+52O3BxEHVM#T$9?p5)Ok zX*qlGsa|}p7vDs_a4e?i_rKaUV@oBSQ+f3l6djzb=O zjCcz2#5crqkiV`gUVz;H5Ajmu@vn$iBd_*aJea(#w*T$OUk{S_UgRY+iVr2f)L(o8 zd9KdlbIB*`cC92&smIqA@*vG~ki4+=!_SgG+AGVwMgDtg@yG0ciN7Tua7aAbc6rAB z?R8mRCndkA<(7#&yq;d5V%3)7KTr^SqV#y5xgjink!|JWsp}d4Sf#0p!KB zfA~H5yOxq?I(dWA;!DW?)cJ#T4p?SEGCPU?Z=CzHtg+mM$}Dn63@z4qIekbkA)B>TvRXnTH)JcIVn?~>Qk z?Y*hsFUI;cgr)%Vah#uou9nupW@ZXW1bfeA@BW4d>Hw6 zx?dKM*DfaUSIEQbJo0_=m(3*pPx2yKPr~n!zhk?;nJ%y6kgsYho|62&j_YP4Z>#5# zeB?uQxdG((9)~LA`SgC{Ao4;pWPLi4*QqH!lzd4?@x|oT`->kSFFsKG9(kL@;_>vn zhjQytMmz`k#YW#f;{sb@rvYw^*T3%JfF@_jV3Ro*LRD_TWUM7iacSUEO!t2c-h=tNb0|kM^}GCUQ^HeB@TbQU8VKBUzhxHQHkqD{)^U=apXC) zyG3#@ys7p>mXc4?fcEN6~f;-nzMXPV!VE#RJLf=<5#TFZ6TDW64)) zJF|qmQ98-LgZw~A@uTFJZ@y0chh7)IAfNtP^29kI&)D9I!SXsic|C2fz9!#tU*a2) zcPJy?j{K4y&x6PlYJVf8UcX{}M*2#gtmIwwdtARFU#b1K8suMoBY8TIR~;ojgnW5f z@&D7>*}z#fb$|RSB`FO;QkoJKsp&$kW30a z6-^37GLckB@)p7%#6zMag#TV=uQl_VHG7+`=YKwR&pqF>*7~iz&p!L?eeRueA60xZ zANQveZ#2)^Z&CboK3{e#-tBj5|F`1za({U84!d9KVHkCCW{FY!m5G*Lrud9$mJe5a zN0#O56`#Q4hb@ZlSZ3|tReb$m%S#pCakb@p6`wKH@<#92wUq1EAMEzois!Voyrbe@ z_Og70;+KAFd4}S@A7%NCic6eniVs;}?dK{!JH_(FijVDT`7Xuf_l^2;|1ITh&g0Ch zm{WS(We0&0m3@t&Hhw19^G`kpJH{#dIlMgu?D?wzf&Fx4KZD!0w-us;XvbCvz5udV$gus;{@VT_5yKRJfX|CG#WVQx?y-u? z_ZV(feAQz%p_z)y_g>~JzNpmN|3`7j^GU_)thV;ADlYb06wl-K{JG*U@^Sr2aTy06 zQe5I6R=o9Sn@^*ib}h%f=^ne?ia8yUi{ZGmSN7i>u=baN{Uu=ETiM@H&+fbu>@NlT z>y-VCKiT-B!M>SA!E2tfuXWJwoTTjeG8LMp?0+n<_H&edEsH}dc$^~j)BQA??2F84 zi!beg$0lWee1Q!lzmF>Ri57=GQT8(4_^*ne!}bT1y^JfWeQXUR{&=>R?;S|~GJZHs z*%z?=xy;30o`X6-@w(4ihdjmKxNh3lu+=&#$?PcX-#vS*iHpOD*4`_^Dki|6cI{n=P-#$4$!h%dM6lqj(*jKc1=h z8s6@$_?CNZoJ_@gyk+@3#mDo3U!{00KJM=+KAAsX{#o(iKic>;_`ZUatNu{STPWVQ zljWBvUVpCTS16wIx8+%iUtMbX?TWw5pUXU;cn7}k^s3^UcH1~R6|dLB^4}HT-p%q; zOYK_9JBY6%9TXqj+1d?Mym}kUM<_mEqUB>1k8N)G48@bVpL|g9AC9s13l;y62jkBu zK7_w-xlZv-9c-Mp6t8oW<=-oQ5zpgVd~Wwk{WQwA+m|YSIgj^-D!zaxH^Z49W!&kO z*_UV9IC;SN6b*LVtK$61?dl1z=OJ=nzh2qP^A%rHeAjJO_kG3t@%8Lm6~Cc14@G@p z-$*@3{AP+v{I-fq{CLIZ#@M*mDV~3x<*Ce%GMhZ54tCtBI3M27S{3I8{+#_qu&-t! zEadwCM%ha~r+sPlrM&Vx3oR8F`->HCKGynQt+?1{DE`X@);^y(m3O;E!Rz13zAPU; z?pF@H<(HOvnx&clpQQ|=cfAK~MfOSz<;A5}cIh80+^ zxY)n%;Xf&!$>WVvzp?SOZY*=ka~qe5R#$oKCn?_YLF+U_#c9N`)+&3+|7{Piw#PbB zK5udiTAjvR=ig0n$!DO7Bl(O0&bL+rm1!!DJV$z#;?j>jsJOKAMT$%Rwn}m7-(FGt zqfA?9d2WZ4SK9wq%KiX*EWo%Ru6Nd-l@2h>np_{9%X|a_g}lF@=|=hT!eZ9 zf6bZ%uVLn*EAb1JeH8nwQufjw)+sK3_xh^hD|2n29g0gowud?8zlk+z^|!K@JnMaL zjl{kM`&;ape4cMR7TQ-%(u7-!B!H^LM}E^1b)E zKiDKBf2sdd6qoa{HFK(;S0Mi$%3kX8dd1~@oS@>!`S=L%mm&VMDvrc|4eU37{g29C z&d0wMm-F$Yz1Eq^MRB@utd1UjrH9|bT-WCvic5Vy3~@?WlUA#hy_EL^?pGwf@Kzpv z3v(*hOA!A)kNuZmzaH#=SN3w9s=m(}Nj`F&s-w7Er%qN}+WA?EOFKVbacSq5DK71N z7;`EwG_hXqHcu{lMmy?+5#}76q?84%iKHm$?OzYnV&@NO>oL z{d3kec%AF9e^l{5p0G|&D;`>6`R9tC!Sf2aAFuP-uk44=q}ePrez9w@k6LQC>oTYE zK5J3%+FaR-Zhyt49!7fj6o~%}#DCCZzf9TpV4rOsen9a-Y#(#bzLE0Ey!%qcCI7*S z%Y1w!bE==!9Gg}*DSPSvrz$S}{|v>Y|DUV4^#6}5F8%+ricA0hn&Q&`?_w_bM{^mf z{c7I`m;S${;?n<5U@rA3^)}1Hmn%MlJC8RZ{wmIeR;L^)&*y32=P}p1-NAk(*kA3j zp9c2DVE>4+m*cfWaryn1=M|UZ^__|@3{{;JGVBg{oyFt3d8}Pnf9zGiQQnsbl(~3v)zEcm|H@Y6qQG6yDm?fP#<@29_ z*p~ujFZD1B?D>)qI4n{2(hk=sF8#)4#iifaskrnTe<=RJbvDma{Vg2*D0?aI&59@FS-qKxzrfeQ`yu}0)--ti0Qh6T_o_Ied;DM4i1H+RIbV7( zm-5Pdu)pFmAHPy@nU9Z9T;}8BnUn5fn?mq9Q`t+Nk0^VYN52ky5ybhz6X$1TFXcVs zZ|h9?JPL8nXD;<1`HWP2X{L3WuDD!(A5vW66e}**-!~K&`_B}AV6xTyhB@WG5c0n` zL?jfv76tF@%V6fZT#1UycsoaN8Q;!UT*kMH6hDz~x~x+CSw6X6VNTgno?~sAq20<} z#>u~f{UdBks}qj0<&|>1%HNY|sQ8r2ty6o&tDkInFXj|&fknaVb;@3j%k_$P>1&#n-g_R^Svr%i_>-#iufVTk-pt*XGZMDbI(Q(W)tPsRwC?F^Wt6mnbgn@CwDH zosUqwJ&Wfl{&jVm)Ktag^Q!w4PvQgrxZ;g^+BnZKm-2G6551x6ujl$NRrd0oxnub6 z7bQ-AdSjM0ijQGF!o%-Wd?wq!sQ41*UnsuR%7$w2_oK;-s#17s#n-ZZn7KZ_(-fEE zxDMjX=NPnlN7>8u^h?F%db(e6xt><9VGAhvyqsi3&Q@Hmr`;5nb~sS+ow+v7Rm@4{ zA&Y|7+myY;S)#aHPoG!35%(i6L;MFJezlsmT=euG`Fay^})xLi*cF{eD|L7vYmd&zUFvX|@WLE!g8oVxt?vbwyDnUgNrOL_YMp9^v1 zxk@_DOch`HndcOjer%KCQm&5`m-b(epT|#mO5aIooy}bGk$F&C#pS%XL~%JUW+*QC zJf!$98^5S_uo$B=O2^qOwjGZT*@V%Q}k6_KBu@&#p%YeCV6;~hyShOOa68F zd1jK&!P~7sOXigSJ&^yU%3k91S6s?9TyZH^j*8!hHD-DE(;ogl@EMS2;$;3lHRVtC z!n*?JrWr&_U|v=aU989m#U;-i#pQZ2MRB86_hwA}8o ze^T)xj`NI)Gv0;?eWL7NX8UUVK?ZG7{&Mf~ED!Im_)8pr5_8=imMAXAeI3NPjbqU2 z9c3@==K$EtT#f9HSIO=WZ3hJ!>4x-+QHUk?s)Yu^v83ahWg6^GYR- z^eHbY``0-BG5ozhvY*V1R%bAm<0a)iPjM;lMT$##2PiK6Mp$v_H*yr0eq*xY(r?UG zT>6bgic7z-nz@u$=F3}@z4RNODEo8C(JV*v{cMTTpZU3pk6|A6@Y@xi$@b4HzJ&Q_ ziZ8Y4gsSm#FUV}N`7gYc;xbSaBJ*|Dd>xlYduS z#_cDcY70)U1?Imjt(i;yl213VpCra+J=9}=r?Qvv_9l=0yNWN`Z$)-NoLfM*Hh+Iv z=h;B ziT{$~d%4lQ#+>q$YdgvRqUaYuJjq`86^e8B5W0!ElvnbLq0_ao$wC#v$vp2jb*GoWGU5#EIeOJW;vGUiybj`Q16gXq+kbHz~fDzi%@I;_xjz z;}r_6RQ3|*CBVL7Xub1+Tv-dx=w>f7e&)`K3(j)Le0~Z?E`!gROlR=2Q!Ll%~SRg=YFui9_*j;*uMhyqrv_okNrvf@C7PY zI@q7XTg02TcOYZ#ibt`=i!e5PvID}TE|@1=i6XE672VQ?0*CMWU!BFYV())FYt!| zO%yL-egSjx8Ub+zD0?~XIm({9fzWuc-)Z8={H4fa|C-`*4!ot}^x&KhD*JnwpV6%R zcqKvp=QEdjko<>$eInRrD*Fas+nwVSuYZi?lN6WlzfDuTG272lTt26GRB`#7VwK`I z9&2^CFsD+7Eec*smA#br55*T~Mv{ZaE-|vcHPSLJ|e0nK+(T!JJ zbh9ANwGihyWnbqwyR$^`Q~$Jli{kQopgRuHn`+c&*dCV!f5s zkK*#Vc6;XJ)r=z42*QM}20qN9;5A3Zk@yo8m+|vr#l?QBhkvQ~N0{t^$m2P*y}k8|!&T=FbbJdM7DWtJxtm*ZZnxE%Mjip%lcuDIBLsQAuaR`)P- zD)luM1+OQa?XHI=ipz27%$&TghByP2z0|`(_CG57OUT$P4O*7xd8I|c zYg^`8_flnlF8gG8>?bO|f(JWOA&y)FDby2+%e-K>iX-*#v*OFSvHT8k5;#X%wQOa} ztIO3%@e5A1PFE=|x+#iJ|a#;w|8v(SD90uGIysv z`<1=KIjXfizEa)>J8Yb0ii>@W;-&n-MrY;}t-lQsybe=b+UHFkzC^_r-Deel>_IE? zf#PESmEyOxwe~g7t5{yKucx?-H<~IQKikG>#hjw`vnY5SqIe75H&JmJOFgPM4{t+n zF_+^ad48h!vrVkPR}iN!ZF%XHczuFq=?%L;`Tg6m7js-l?YO8qOHf!I3IeAe&UAdj~ zRrcd=wf5I2{xQ$fXDR-58*9JH!{7JtZxz4gcpK+W#pQWcHQJRQN6LRkV{6}xxg4+8 zc!Jtiad|FWtm0#zuyG~<-)T@Ci$ha^e`MIqpX`pgz{#GgGqeIY+4pK{?YAo~=kKSA z58!_3YvxpHz6BfvI;Fj>2Pv<_X|DK1+;OyKPF^xcr$Co0`^KAs@Sz07hjDqYf;d$F zr95uQQucdz9#N>cJa2ZP;(sJs-KP~F_@U*mFsJ-Ux441jUn>40^L8C7)=$g-TKn#b z=ka(WLGhK$M=HLQc_DLB>25;@uTLm@IW8}PeK)XwSJ{u|&h-<;>z!krzE=EX=07Sf z_bdKZT<%w#(6M6u99PrEKUMKre_4JybMgv~JNH*v%KrJ2to-_M-b=#pQQ||4>}oTb<4nITVuX)TvvoZhhvWdoJsqtL#PhBE?0wpW^a6 z$k!@<+K*N@nYrkm$htQwd(pj1arxce2Njq8VX5M~_+tCK;+xjmeBMy}>b;h~&0O+a zc7o-5l)dD6NO8%t)`b=8U)nwdTPxyZCC}m&$ zL|d-g6tByCu8Nb^+1f8w{M!P{pHsYhlr8@{6@LWh`Hr%e`usw1sn4GjmwG#+OT~I# z(#hs?CUdEu{;b1KV!z^N%(Z#`!Cdm(5M}v^7gen1Ro_|ORPn(ZERRvV-#p7NQT$V$ z{PkB{#`(h)U;c-Ulce~d(=1PCF8NohXL*6L|8#)mg^G9Lnn<@TAU(4Gu z7hRbTj#BoGd47?hc#~x|PL7K6>@k+#q3j=f!SYp#Kl6*_KPWEa(!+|c;ECUH7gwx@ z!*|#?4HcJhY%9e#ZnySVGM9Qd`dG`yD*GGXw0w%zaz(ArR*1f zZsWhK_%i0_U1G~Cc}krAiZADhbe7^9m=}8ZbBb?g`)`=bxI*Sxe|z|;m)bnVUj9xk zT57g>IvinHx#%a<$r)YEO=FDQN%^R0?6y}`!Wsp6lY+tvV z)tCB_^Qe*Havq(_oV=)h!W^f+;@303R>gUIlFcVW+0S768Hz7uzDe=JT%X@~cZ&WldWrM$Ou|9lD9)A60c^?aqWmw9W7;-8PPg&3#! zU)*m`R`G{${CUb=;xExW$HrfyxQqk0DK5|Vf1kOuhq|o$gR+--@t=yzxbgU&wmzla zVtKrD8gq$X!t;(8WiRpL6_09e%QZ~JxtHVQDtn1@tKzk|er78!^|M6rYYVJyF>}ek zFYCUh>}CG`f#Om>dlVlt%EsTX;_s!#WtQ4;73)*tH&k54=Uo*454YPm=92#gjz3)4 zOZ*JQrQRkgF7@^x#6QKR9=xtp_Hv%St+;$o=_AF({!7K>`Dwo>e)>Qw{wH%PFW=pfEP z#d#PNs@Kbwi(Yvu7}%f9T+T=NUScQ3<$H;}6_?)&7^wKQ9fI(o1m>j6Q@dctL}f3( zBQQnr(=NAh?uIzrWdu8(SN4ewZ8={BduqyaxIOPu_A<}?UU6y9hZUFhd}42_BlWgx zqs_B1bJ|Oiy;!%SvX}c>gB2gZ7oV_-(~#qgQ}z<)cEu(Cxr$5v%N1YAK@%mQrQN>o^ z0CTAazU>h@u5ZQq?B3nlpRTyvzdcuR`MlsF#pUyYVT!-Pomnb#$>(~mhntnX0gl(N0^oQZECi0%>muMdPA&!> z&F^Vd!tbfPP5C{ow)1=9I1eoaj`Q4oz;PZOq5x*0Rkz@sec{`|0q3S4?1%0PhRD5I8sSU~dud{$O7WoG+Qd-V)$^ z3o_u_f%A|k;HALhA^tw#R{#$#a%P)$4+1W~`%OFncr;(fhz|xH1Dw0~U~eq&Az&X5 z{3_sy!1E5F9v=s*p~pu@8NF;9tQhT;EBNZ0Z#%R z;&}$u=Lq0Yz>|ST10M-I26zhaSm3F^~8}e3;cHA@xbo@o(Oyz@EqWG0xtl57w|&h zcLOg1J{@>5@EO2MfZqdrJMfvnOMw>x-v@jaa2Wtmea;3RRnu+|zZZBk@HxO^fZqo^ z7WiD?@*GNve?Rab{v_}c;7A0ACBd0QmF33xU4?ya@O@;KjiCqo!bQ3Gnq`za98Xz)OLb0N)3E z1MtwXc7y8wW#Cc3UjZHsd?WA};I9IY1-=P*Jn+|mCj#FLJO}s|;03_90xtyqI`AUk zZvZa_{wDAe;M;(22mTiDQsCQx?*qOAcrfub+f@JW0FSC|H;BIrye_{dUd{Zke})Co zb```S-i3Jw;3LfY!Mxp5aTyEBeu{s)`Co(Hm}Qh*1@VbbVlHDLu`gmS*Ie49d}NVp z5b=5f&AN!+6OZEew30rJ_zA$}+$Vk_a5+bap9Eam67l-L`;=;J*WJ3jAmaY!+Iz2;SKj{d@d_M32z#j)b z5IEikhzI^W*k1vBBk)1Mw*gN8z7x2dYqa|d;8%kE_rQk$KL{M>??>^;M!RwTejMJuK@c*;KP9@0Z#=!0{9r<$-r*{ zJ`(tCz*B(F1fB}~0pQX%((XmT)4={o;OW4h13ntKe11svb3O3a!Cv}o+Wj8zOtAk9 zcoy()foB8X4?G9>pTNfeKc>3fpgePdp8z}$`02p&fu99@EbtiM44Qf|1mLL)Ze7ZFW zUK;|R0lYczdw{nEJ`?zbzzc!*06q)&<-lhHzY6%hz>|Q_0e(I3`+$!HE@LO!T>u>C z?{@*m`THE;4?z3{z#jy@1USy$p9Vf3?AHOu`TJ|Y7l8c^;Ew>`1-uCOH^3JH{|We` zz~%c{)P5ELuUW%x5MK;D3ixBd8v=hEcyr)S0B-|)3GmLq{{y@`a2e~;?*71+f&CER z%Yi2Xe-ij;;7fJlH=Ad?Rq2 zzi$JM^Y;&duZ1{Y0)HO(Uf?)?{|)#$us^z{-Jo`b^Y`O{%iM%48vuXFx(2V!fR_Mo z4SWOePQYIV9t->x;C+E_1U?w}tH7@Vz6p35@YjIn0^bb$X5d?Z-vN9p@L9lL2mTQ7 zH-J9|{7v91fNul77WiAhHv-=dd>il`z;^`!AZV+pZu#$2xT!rL>KYq9Wd%pXF4r32 zGVhXWf$*_xFMYM}0_M_}3ZKEeMCG%9x%5S1|1|Th%Kl~MaxRPg+sx%06kf{wLltKa zb2$&h{vh)&m3<8!zwS}IKJy#al7|Rq?jW4=a8F^P{+ZNuJ%9*HpX@^Wzkc zXC9?^BJ-0KPh-ws6D&J_^O-kM_7j;mS9}WdR*K)vyp7`Xne(6Nm+3ysytA^Gc@FnB6hDRe zXvG^b&sMw{^L)i)m`_l=GxJ*%k7YhZ@hh0ieK{%bQ0DTzMd334k^6PRN3;F?Dt}N8U`+H(Pm-#YfzmU1y_Y?aS%%4&AFEW?=fnxs(^OuzU7UpuFQ0!&? zvqjl|%=U8sQ0%{D{*JQ$g}K~U6#KuJf1>Q`@c32kH;Vm9%)e3gr!$xPkYeA0`A^C| zhPm9I6#I*q|Do)AFqiA0*bib}gZo|K!{I?_++3vVVek zOXgGzejD`6g>`HPO}w6c8@xURJPP<0;3ojz1N=nbXV$eF6#pdP{ejm9J{I`Nz~=%# z1^8;G6mo-KfP1l|((<-l73PX*o$_#EKffjSRJ#{(Y?{0iWA1D7#5?cM-90qnm8J{WitZp5T}CGa7@hX9`k{3_t`{0WLP6nJ+& z8HisEJQ?^kzzcy71O6g#nQPGQUx8l>_Gj?PM!MGl?+-i-d^GSx;46VA0pAXM1n^8g znMpSp_&vZ!0$&b11^Ao5Wv)cK>u{$)@kfDuEbuhoIl$9_-vfL!@Hc_WT#R=A7kCEP zAA73ZpnNicw*a06JPvp^@Ed^V0G|zf4De@x=K_BlcpmT?4eSQxnGZY~_*me#03QeZ zG2k}F9=o?(rsTzA>G!Rrga?*{%A@ae#7^2M0q%m98K@Oywy0X`G>cHo7;kBPP$6n_@* zuE1vl&jEff@Iv5ofG-1nAMj1U=K>$n)NW8d_XEER_&nh2fjph zF9$v!cqZ_Nf!}tf-Jm!NfbR$X2=H^7m)jQse-8LU;2#2i6nOesc7t>m0e=|yV&HEB ze+>BXXWI>m^EmJhz@Gq~2z&|f0^t7vz5w`A;2!{A2E0ZKyFvLZ2Yx2-CxOQSe+qay z@D;!x2VM;PbKon1S8r)ID4(Z+w*r;BNu{0r+;{^#n}No4){C3?*RTTaCu8{LGr4q&Ec?+eA%X1z=)ol{AoBqplC!!TE;q6$(<#`&3 zip%po3KW;;iWC9oAySY?3GnEE*q2h^O@SYGwB4ZGyYVq15)GX8$#ZyG0q091nTO(m zlf69uCkHrRvI6@;;C$%_crkFk6a;)baEdR_`}z<#)iP zTT|c^hc7FkSm0zY B|Ed((Pm*?yiD0_JxV3FeTe8LjN)TWDQa->Vfp@bZgV(9Ry8~Ygoa#uPYrPS853t`2yeIIZYuOE{XL&w(UEpUMliuvp z8aVmL^Vs_Lk-RS!czZRxvl};8Tc^ZLxD@%q21$wUkmp0fL{lE4e&7Voxl@;9|oQTyipyyLHUmWeim@5 z{{r6E8+bC?w{L^jmcT~?m(NYe z{(9gUV4neeI`B;3%YkPBe*<_n@b7`=0Izer-JpEN0B;RE7kGc*dB8J(=L4S(d@S%{ z;NyUA2afk4KLk$gVJ7<=0zMw%9L0lLDi_(yJ(otnCxCrd;5Pyv4*VwI6M;+LK)dGy zzZvY;0lx+KF5r`Z9|m3kyb%w|sa%tR#{$0<_(2mdeBg6{uLFJ`@Lj;?0+&e_<%#z*qj@q$T;{Um77HBjXC?y2 z`Ir97og(eCEJiwN-26Zk@bW<3)4qrj&D zUj%#!@WsG41Ah$o9^j7yuf^kB%Kr)AErBlq-W<fTsap3Va&yWx$sJUk-dT@F#)q z0sa*5T0GgN{8s>P3A`A1Z{RC|rvZN&_%z_FfG+{Q8u(`5&j8;8{8`|&PPH49|8u}w z178C?9ys35%mI$~GYf&g0C9?euLHgoIQ5fK=AFRtKIb9e>mg2q26ltW^%C&Tz)OG+ z1-=3Jc;GJsp9lOE;A?g@e+TS0 z0)H3yZs4T*CF_RT2{A}=o#fHvW4 zvTn$XA6K?DG9!LmLbz;mKtg`IcFAc;x#9fWr1bo}KFM*NlJfG>M`gtgN*>fNIn<^s zwh863&Pd4`m7f+De+0H2GqcB~#Kk8Y+srBhcTCRCnNVg-g|i8CN>0no&dTmQa%^r= zetLFRpNxe3^Mkj2`e(F@Gyh{`iHnQt(Y{Z{xVX4M{RTss`z7Q@7Ulfp?6Fz-ai$h^ zZL|*$NlDJn&JB-9%1i0fu0ujv(#VwD_}uJKxk;G`NqrJx!f|o!%B<2eb256i|JQ+f zxLiAp3o`JDvro2d7^9Mt!ztsFQ*!ddrVVAJR8^u>Q-;)kQv!DU$BZl6P?A)~ZE~~Q zWMn5NWmL+K4_sz?p8*Ns4&fo~+qKV|ke8p58BR71*T)%pgiRwZp_4f_wn=AaW@cxF z^C#q_^yxb|COo*E+0&6WP0KM6+r{LkXQqU6veUEj`wR{zbT+$bM~`rygr4Dq3(aQv z8CBl8D!Bd6>BhC|6l9T?o|T*uPRYqmPOH?AR0DL>zOryM#tXyYQCVZd$>YaY>KVM} zx+(JoVe8Vay*U-qlf$NOO3xbAC%JM5W13WQT-^DANu?4*9>|7RNqXIZ4~XV=iDeSQLc6eI;1P^D2ADI!TrSK7 z#eID!zfie?dj}omm%x7-`ec|=xh`)NE|8qu0Mo_vF&DkTtJF9W0|su zl33)|l#16n(}Tq)4-Cqx&W3-LWL`>sn6L1aJKl&R#!wZe=jCMQRXD@{MVUL9NTW<{ zNpzJ@GK1|(-P*r6!tL6bsOfq3$oziEc4`QdO@$_?d5*9;Er^%iW(CQ$!0NNIP0OvY%M6`XDM z8V`XgiK*)aORLjK4JVY3T$+M2ePjwZQ!~*ueO86KuUynLx1My2JhCzcO9&^Yr6gY; zPR~jYPEs0bxyD&4QwdO3e@8k2tuUrLa-n}5C`mG%O_NGZ&&UW0lb)18V*naCVl(xW zgIXhX1%q?S+ly!Xz-pCR9E?IFAv#;Aw-4v!=h8?v-i!)p%nj|PtOA1u$itz3)!mbw0Va`G%8na?JR#PhT@AGy{ThJ#z-q4U{SZ zv`;bTU6Prc(s;5@U-BH3%C1tEQ2nA?q56%JRKHfUBeHfKURj!WkEE|@XbtB$0cQqO^KsvfB8)TGwhQ)1(hl$ z(u<|sa&z58lcVJ8blgYHoU(A-r1H&N+zg#eE9bj?_HA~b_~hjNBVx>Lo|xbkM~c~> zZSMd5&*f?t3<6Tjt$^&{GF0J+{)@{;=dx>BsIn|nN&|ND3+=%VqC z<^Nh%|G1H-FPZ-7%fG4G%%t&QnT}P+y?oYI-d`q!%gq1%b;w+tBXXveZjYF`xs;uo zG|F5yDm78nk4nnAA5Bx93Hj|ihQnjC==y3eNh9qwDl44SCq6AREiKMm6wC}M#!QLK zOlgq0=+kVe>>`nn-#OgVwsd13H!iSt?@cY+TcMsEJ!5++ad6!?L$J8af9f8%Gd;3d z|M~8_45oWO_zH!q+jle^R+i;)#0um~h$kB)DdUX%uz@7cTd8 zE4BX!^Dzf?*PYBQSGojdB%E)0doyIAd(w1Wl3NZH+E?VWk)Zp|O$n~)ahcTo)LAn? zU6kw@tp^Iwu$6t;$T@#v!}oX{>51TR4;L*!m8e?1+ z#^AD8@v2y7x7eT z!@;MSG;R-?bNlchb1knjf%DD0#@t6KS2yjx(g(<{Te#-a=hU)KpLHoCZtLgcXn;O* z54z;a*+(2Wn1H3{jUJnoobS9*8)-xu4FA(-{gK8q&4{L^c5<1VoiWnf_Y5vay75GQ zjiZh!b8J417@SwQ$RpZ|V5QIOpj~@9$qMZpTTA7(tRt9ikiTnS+jhsGtFGL(UENQz zIwLDx=?tm(Sx?Yamz~Kx@Ry0HsT|ca$(Zg4FC4CprgQm~IliA7of$nd z-ZzyT3>L#l;dXseQ|Ze96>kXGX@R*PFd{wwhV;A?@t}JKW|%cjZVklKhb{KrfEk9_ zf58-?@<12b0hiG;2&rr+V;rcpju|O=d40^tEG{`C&Rm*2K`wqP`ton@x& zW0Ujy&~Ve-0&04r|CCMqR ztff*ak25RGij`L|3)Y{!qC+KnlRl>u+y+m|%}tuXU}VaOv7^il<3R7TVMcmZio`KzfxIP5-)oTo@@1vq)4eu5uQG8{ z+n8_9j2|D)Ny*L2&NBD5^CyJI#e~`YJchazEO`Asce)AQo!8Ldb2wyb^r zy&eAbBJhuQ_|vl`MOW57{h{n%hu4(<2@&{@bokegz+Vmx>YoyUzx)jf*8eV(layQ5 zzVc7y{L%mP2=u2r%Ku3O`tuzApGM%n*x~yE^>om`dKV_T|q%4_~4Fzm33Oe%A@h|6K(B ziH`jL8-ag@!~gpT{N;J!n14?bQ|e9DzWST$(5Ghti=V80{)Ge$&{OOoVxn=Due~H6CDFXjD9R4FB@R#S{V*MpY;J@3UPtRbMa?9FR{(bC^ z{dal<{)Zg?^vq?^m9C1C=QGcI_Cw{W_ z`A0kS?~6cRp3jT=bWVz{tbO_&Ss(o$j=(?G;lCgP|Nf5h(=)3jZ&~~DAMEg79)Z97 z&Kj0~Wd#0d4*j1ZIQ}_~`dbx&{zQjAJ;Ph-P1e5po94*>xd{9V9r|k`@SpGSUmJn{ z5=Z{@ta2&0tbOG#cKE*#f&UtZ|GEhLOC05YKLY;(Ei?a`0tOvf0x6b#?(^p zvi8;gZb$hyL{R>H4*g#u&_CqR-xz`Z(bbKZS+M^&Xtt%?vi6lf%HjWO1pbX2{)Zy) zZ|U&g6hZkrvOiuw=^6i0Zdv=v-__y&dIbLR`-iCiW(5BI9s0jTP=A9R{=Y}yKb-xs z{k$DP{_^`ISpIh-@XvARe-MHHM2A0(N#(f9+IRe?IqL7j2>c5j`X5K&Ki}cMD+2!| z4*yRh@L%mH|7Q{SuXE^s9)bU6hd=$+gd8_n`;Onc4uAUXUGbB(&tIM|i0z+#6H5GK z?eqWMp-;c{A%3#<`5$6`Jb&mnHN;QWK7TR9{J)GqzYYta|F;qNH*om>5kdbWzZZ)7 zdn3?~ap=>WQ0h(AzWVFx@c%gi|K9A6$8T!{{_zg~_ag9@-~GY*qu+v&a?9FR{*i2e z{xl~RKUw?ya~%G^M&Liu;s09%{?phW>;G^B?XS?G|7QgL^Bw;5n>&ol*1r0a-+jgU z|1$#r)eil?BJeM9`2QV&{~Hc}x+ij^<=^S>|0{y}-|g@}Dgym|4*%*A_#bxoSBt>E zRt-~Fv*7VRIs*Ut?2qmLZxfHxDqH*7Un7S;eWq}v{w*E;$3&2SM@RlOBk=F)(5HK9 zN1A_chyL*q_{Tf^qayGh>d2pd6YNOyAL-CPDguA`y)JBjCq9;Pl-TZem5D`rGKxr{7{b()PFA;ol?z z|6LA$x+i_4`g;P9v4cs)}6P|cwGuF!v1kD&hRIQ-9wKwo~>8qeQW5%@QE z=pP$_e~iPQK9e}o`s?cOkBPv)H~VAzZySMsyhFc11pdPv{_P_0m*4fqe&7+iNIf;myiBON6`Q6bL3wm0{_Df|F{V9uXRl2{`;~B{OddXyE*cY zHZlgw<-&@Z*J$?NduAC5-k20BET@|-I;UeR&`>CfZkC#*sFmG8-`{)Gyp{ftA4eHH z3z{tXc9S(WuTkgPw{jmyc0|h?Ubi-DimCmh+gbzp9vPd5qT~&)+nIGxepN8>=g0Y$ zdD&8xZH6xO__t^MdgZ3UJMBNfq|Q!eR{60)_>11m;P4P?TaA}{^zj&3F63W?SGfYzbpGUufkux6B4Te zN72m+vta$xbA)yI>A1M^Ph@@SA8=7JA^Lr5SN*qi=+iTLwLZ;>UHTJ`P+!KBy8N*Y zeR|HZ*1wqbb-CuT{z&der4Gbjw&|Kc`D_2f7g&o;V#sT<#br4A)4d5?UhZtSsyhBx z89!J34|SA(tqCdlOS`zwqyIJQS9SagJ^DEg{TCeiB_9217uxbyrT>CQf0{%8MTb6p zPEW_A()EY+*Vr`5UZcz2**BkwzT!o!AI}Gz&NF(xw66cdp7QTx{WKLh-j zM>h-2k{G<&{(pmcul0*e!6~M0f3aPxV^#fEBh&a?{)5=R3G2&Br5QTa_`BL~Jl!lc zi?ma!zl~;F=YNSuKlcdrFZAfAIrQmV*7}Ja{n@OaPKAI)mw%W?zkv0*8w#%9n@t?8 zKgXkgnDrZiHoevQGd=pnj`GuU!L|OU9{p1;vck>ns_a$k)9;m;f1y~lW3xm54P&SE z+nM_;uJ+f3^=FhR+c!!k)Y|yF^h;TPJo{7oqvw`u{c#@s&8**|3jHx2{h@TT-Yj_h zx0`LP|AI$`0rzVtpE2N`geHrr?dVoRp{U9(U0a18Qb4ZhyE&$ ze(g)F@Q^C>pYrI>WBuOjPwoFBhyDj1{Y2IuQHA~vkAA76{JR|be|Yp?X8q<>=pXdx z52X*A%!2LjQ?sqxUo$g4bhZDlS--0G-`M!O+Fy=Czto{W%%fkQCbnj&s{Ie~=ucyP zZ2w=Fc)I+zd-O-JepT&nvPXXn>tp-d?a*K9(O<**G(X419@TR4m`6WU%UWXjzcy~V z{0BVxHDj$tO1V_@LJ^826jRCXtWsLR{UH+$fTF0jBFDsQ!sGY}uJNs8P|GnAc z{{{P>A;P@Y<)_~Xb=ChGNBvVrugkyHqaTX1g1xKIZ&t@$f4$j1y9)ot#^06ycFsSM z{i*%X=hr&_e2@Mb*5}(GWm)L@%l7EU(3f@1BKm{zoC!cn;!jrtZz>53X5)k zKY9EQvwxck-j(OyUFx~(@0?!Nu`2yB9{*14KcEWz4CC*rzY<6N(epoa{jKrnPd&o? zKlk|0WdBE0{?yiRq2HTz<-e2j$LrUrj{HxLa@T*G-d3eKikbKN_@83@UHWPK2f%p# zp61XW?9m^@`c;j;272@hSU-{Tr~a3of1-~c{cf(omCoN{*5_daN2y%?Ngn-D){g=G z#t!`z9{mHX&zAwO{!)*A6#cP>Sx~=;L;p*UewRL0(wyEE7Jd91nE{Hc{(7^2s|wzg z>+e#Je=hr1HU7=@_)lg3s`{U09{;D=zpDP{U622I_OGh{dCT~_&YxI5et7|ztQTu7{(7&j@yZmQgVHKO$RoN?tE8Cvn@xP4yN0wRIH#+}(*>%h_2@sv`rM4mve5b;d-OLu z^e=PhH!{B~Zg8dkBXp&etZMvms_}On|5ArOJrhjV{}7M<0M>6;R&x7>a>eBekNzQt zeqV?F{T}^EtZ$}A6&9`kjK}|;BlM@=d#9MX|6aiUe^*eiJpO&hQ~oIWVge)qci1^sjd4clYR@Gt|mdHUGHS zqhHAS(VQ@~-(e2@$sYYp*I4}(6-ryV{Z91g7t+5lm4|1{Usj#vBRumHv7xU zgs8AA^5_qxKNd7gV(@C`KVgS{XEQ;en7aSk&HDLDP`AGh#@}`P*RVeJUr7%A=^p)| zeBc97S^h@cFz088;ALYc3-+zw7wLI`nfK`qMr7*Rg(8_n$uU_-C-czW+*fjmvwU{D(U7&vWG8sV(XyNg{iv6p)|I^I)yV_5vp)Dz1|E4(dPxRNh#j{K)N@;@Wmef;OL{-agspJx1B z$8QPi7qUOqAN{SGuD>xJ{mvt;V^!@Z!=vAs9(G|CZ2!|8`WvF%<-e8n(~J);y8hQ0 ze^>d_SRc!Ok3+vvQ@8$iDOQ!ne7I=+Q;ok%{}AhUW`C;xLi1nOf0pql6W#w08f8^w z{3|(V{dD8+(vN9uEybVoXPf_8|2gAta3%d~(yU@L5$3hlf7sQtO_ImWwSRebZxeooVrho=lD*q@b9vE&cT`unEcECXJC6T+hyJ@B{kg1P)%fqEGu_8; zG5hmrRF-nJvUm2)@y6eE{7O0h-fU0j&m)ffFZ1XhH`+RK8fB`w{-{sM-mth^NI{$9-=r@SAM;iOzr4Ieg z9{uU8U)A|{>RImke~|sFI{!{I{;vA#&H3Z`_oO5Lp&tFCGHv}OtK(-vR9F%``h~2I z=ids4{vwb5NY)=vL9O!qVSz_~iR1Xu^Z#pcJjv^QkN(p~sQ z@aX68jc5KCrz{JtpYPExV0~==YaRMedh|E3{)J`A_KgWqVOiqQ-|Q&=3l9BHJ^FvM zzPUYDVbS^@dh|;j`Y$^4>$EVxt7jCdS5OIsqH`>e_9DAwTh_-I|DgSe0k01^^j~u5 zH#Yu3nIs_lw`BcqCsqus%t8%3`cd?-IkQC3q{S@M{x&%DTY2;w{1CW>TGg~`dDZ$| zJ^sD-TMs?|(f${B@{caIMh`+FY9{u>2tbPgT z)9(j}zv!oU^oMfC_4;Js{2X-yUCiv> zP-vpZe`pVDk)}Ev?LUkC`OoF0SfP?Q>o4}QLvK%)@++M^-`Mg?JyZGVH>Jd1_=}Ri z2=IC{>zmut6&9NnpL1rhxV|)jGx3_@|W$stgrnW z(3eeUQ5~T6|JL}s`k&AquD_FQ7^*+|{RQ!t`Xd#sO&$&C!$Px^@BsK-vsu&Of2^^w lN`ZOV%g+0)|M{1eq2P_B>f7syKpkHG;6Mj#jwoP^0F8A&o}GJ&8Vkq~7Z zVk3g0VjC4LwLVg-G*ZBTk3_3&wA7}StEoku2-Or(Q$_Rr*4}HMIdjNRbh^;bx`g2r;>o5YVL-wb2Uk@T1Z301jBpj6KOPf0h!91_5#pzX*on|8sG6prD!1TcZyw#7?NfL< zms3#LnaSnaUXlW4xQ(2KOF>oN^(eoQ~3!*tjkl^%6>bc8iNVLcQ?Bt*xPE_Gdpn@oJJ zXTn0jMfhYhz8LT(zF!J>Gd?-^EW;-cAG%!l6yoE?XE{D}6-yw#OYmLFcp0D!f9^}c&@ERsnw_ryo-t498O z>|cKIr+zKq4?M~5bqzH#w0PtWP>b$!YO54(S|X~VvsuKC@SyGB1Tr)u71 zv!5J2>cw~K7ytCtEx!I+S09_%C$8UwYdc3?dd!-zgd2u<38# zRP6n1%(r`fGW)eLD-(ZkT|4V@Zq5nd4;bH^8bWwCBcOVsXCZL#&+h`*lbhr;Mt8%EEyP;zk({uu#!Px|+S z@pEmMdVd$j5BG(!XK|Q%UxST3+4DOjub$`=!ss~{!@Vc@sbTCX3)5faVcPqA7(KaR z?3ols&lO?hk0Jr~WdB29{L>Id|KGyU*Mu1t$HK&ae!rgW*%!tSi^9auS7GFTA12NN zVcNSrjGn$>{FxCZKG%lv&%eUZ$AqC@9Y%k082a~N^c04%|7e*0Dhkstabf&y0w}hc zl>_e+#(q~AJ83!Glb*-I$iEzhJ_~w!YF91#_hPM|cK=og;EF*z=~{(6N%TXsSim(z z0&PQ_q&M6v2{V{JndQ@X@nK~>)fm5|=k_8gSj+O?oGs~N9*~3rmj5gKL-MOPOFFH4 z==uv042*Ur;&j!1eU%cmkglb&?8XE4+MiTEe_ zd8~g9(;q;+q(A)|Nl^OV14{baP5Nt?ZZ*+=jd4NxXR<#tS^szJxA(cdk1@RlaYgd4 zZ;^yTZr2L-TVM9`r7YjT^o=Vd!Nc@beWf0AzkCNi*>C-)6jc7nXFJc?BT%EI4mS4bn?q~ncWO+N&uVDY1e51q&N5f7R}f3fJe8{)1um~+g{!RG?I|J2Qjfa?)jPy@ zey&qU=DEvDi*i>v$~+Y%dEPR2DM?BL%2tJnN~L+Oa&MVu6^WIjx=<0N&FLvAaXGz0 zsG^MO3YBwuic3A^Zm-8=jjW2sL-XOYSfova<7p%-JonDcj50?w6LXW51g&OkR1zJJTB3Buzn&yR*mu1SX z02PWC6y_p0W|!o9=6XmltK5}Y<|!!4Ee0|Jo^lttqzrId35AVO*R-;-+*L+R?iIkM z7r9FEW>u6p=^lnIL@O)GTv9Hp#GUUcE1v6d=6WeO3X0~sOO_id6~58yls5}J6=jH- zf})vaxhqAbfe74iJAQxY@aqwM%x6rmib1YuqO-XV%yoF^Lbdv0F zm6dtQGOu-ldpg>a$2u|`&O#T0lJHWKC{quG8&Z zWh_*x@YlIG3lEcvgyj46ih- zl{1n#0@5&)ih62|Eqp`9A(x+yE0dF`M`eyZ-R^+l*TGe%XTSv1uj10AVZ3qpaKHU0 z@152Np_oLjz6I&aYtzR@a+<8)ogcn#8`_Qn6km?no^r=^rLK}KZv`qXjxX4D^^o(ukeh~qEnoc z#_Ks68XN_cm5x#@Gdv|&uy|KFRwS7ldWve3$05RLohZ637Yj1k;M1^B%p{0dbboHq z>4t3Xg8xS6j}=opcYn(Gkf@|ZlB2|>Ch^k@(Bu@yG>UIWp&Ls!$~DgG7Nk<9#X2Dw z{erH>Qp15b#%j-zpX)9{x^OQ@a^U~d>>_=NXPZwcbJm3+PD8vc? zBgVAC>S@Y!F2u|~)}bf*ADic3GWn)trATiG-BWVW*s?qf;L{CMQzWDWBjGfBPU|P9 zr*u_t{d5{iXyTSTK->J&o}f-UY%t$uU_R^~bo{*`X@3#}YzPNTD-;#{|4=eudz z$2kQGW5^M3maZZd&f-!HWme{{D#|U%8;vswdi0-cq&bV+IMX0<5|M4!%+*D%nQL3H zB1OI|09NJlWjLq7>69*9?#**vemSAzsBE!*SKx%1go&!0l77vM8IDxca?RY?(`PtR z#-!}k_yJCetwO5yBms7M==nquILnGnKDF`>z!+;JgjDw`wq zhOm<9oHK&ny1*M2@)Ln~Ht<%4z$5V9hDGOCK<%aV#=8^|c$b1?V)3yEoUj;3l9oRB z5RB0Jif_7;|5f6<7+>|ybFin6HcR1xf0nj@@t+7hMq9@C3W4|1 ze!_UVz@xP)#=WC9;UqUo`zhmY!H?7)22PiHp9ezX%Ct$C^s$7BezjZT<4tsp<6s?_Zl-6O=$0F#o*Wash+n#?H_>aDzQaU+kLe92dI!@RP4xI1WxY)% z`c+JCG10d(z1>9L#q@xQ{t3M-gsam;KUcj#^oisv{}=t1aTDFk^mr3J=W8iH&_u6b zd8>(j7t<3>^eWbqWTN|6e!PkPAk))L^bM@XZlZ5v`Aif2QKn~`=&D^gCi>$nUudE$ zJ*6hP(o zS9VWyRlNgE^qaU|tBJ1X zD-(UI%2y_OA?q1$qL(o}-9)cf`N~9J$?};dx*A8>Cc0`@j*0GPJ%uK^irZ2XUFoSZ z(H~?z8%%Vir_MxIdg@K|$5~H|{XqKW@@iT)YO=a}eUFul-3Z)ZKFCi+p9uQbvB&Gaf0y_5B9Fwwtf`8pF_<ki5~Nf^n>0faC*4F>`NwXeJ6V6G ziLUfyo9G2BpJSpcdkRf-rKi+HFJ?WJCi?A6uQJh(s)?@r(`lkBd%8^Y$Jic?-_MHSFjILW#zc?jIE**Zf5CbN zn&{6n-D;v+Sx>r&uE&pwuIAHB6J50{+eF{V_2!u9%0GoBy3$i>qVHopl_t7cFIAc7 zN>9Cs{s-36V4|yjZ8Fi*8BaVKI^Gpt#d%ltms+2xeU+lu^E|57K{}n|px&fM*}cO| zXFUxjx~f;rw`TpSpA}unH?baijf}UxqM_|!=xUxZ%d2=a)9Va+mT^oI*ztu#dI8{7 zK>cbk(D4eKel;5C19hsVH5usB4fGZReU^dVYM{?H&@&BoPBPF{zNdEK)kpnm=eV$d z;?}7+yW;o$h^~$dh@E4gFEYrh_XJ74(m-!F$Q%1by=O}DMt`RBI41gy20iM1UZQ6i z=vt>ldIM0~)D>f(;{Z&*;th1XvZ!AJ4RoqQT~-5~`dD3w20GQPt|S9p#VGN{8|Y^# zVZd|)J=Q?C8|Zxu^h^UCr-u5KZJ^^oQNMBwboFj3F$)d!cwHL54KvXB$Wm}C4Rk)* z6Z9$reSksF1_NFF1e4fx2Ksph`K<=}`38Eufj-DU-(jGucXx^1V4x2%$Tu43>Nl^% zZZgp69es7R80hLpC_EA^o|CBKSelAZ5{Oje~fUN(mLt{{t)3bm334Jd=ug1zK&9X z-%U78T^%_BUq?7iSsj@Izm;&BsyfmIUPd@gQ5{JFzlCs`nmVikUq(1hNgeS5Urabn zMID;J=Mx@Bc;^owjF>}sJmKvEpH6sx!dnGCk??Z}ZxVP4;WQ<6Gzk1M!f7h%s2BLf zgwqt%Q77=hgwxd1Q6=zm2&XBhqg3FrgwxWjBS+wogwxd1kty(Rp9M}+PDi@Hj}lH( zO-GWzKO>x`m=3GJKO&r_mX3IVzfU+#DIJ=?-zA);l8(;rsr_#fZY8{3;QI-usiUJ+ z;JXN?DWjuF;Lj6IQ$q#O${A&0)L2bni4vy1ip!InhH8f1%5Z- zGzE0z2z(vkl=?d|1%4~xl=3^$1ztutrTUH}f!{(nrT7l3z?TtDsl6j!;EM?#L%1gJ z`Gj9dc;|7^|AbQt?`RkJbi$JfZx#4N!cz!u5_k&Xl&U)#1b!Lel%hN81%5H%l$ty0 z1U{H>O358n0zZfFs|YU@cr4+Rnmcj?9!WT*^%fBOt@O2r-N0zXPPEwww61pXP} zl#)BF0{@6`O2r-V0)L-yO2HkPz~3dDQg27+ccT9ZPba)x;QI-uRNK)i@LhyYC%g$b z<(K4t&i1`?v)%WRz4}mR=0aO?Q}P@3+N&Q&&~zuH{z}u1<&TNGa6O730o7jp;PV75 zn+Qzk@+KfPod+RGO=oqt$6Z)Oa<4Fiyj#eRT}EKk4|ZRtec$I(?fbf->=Ccq-}%8i z017^SN-BuyZqJXq5Q$!uC;O_dcD(?V6{%VF>Z>kXr_F1xRy)9%ZHQu<_cl7!v&2hv}M{?LV!sAgZqA;`A*GTI^5X7?w}^xF>k3CjWo zt1vU%qWRaf->}H$+sB5GHM${B!)DADXvdE5mYl3_g=rMvqMr7Zi29+c6HrML2Rh@PM<#OO3qwx66Wz2tjm7n!q{CNf>k zS_p-<>}1{b_kSC@E5r@W@SSkO&D(phoa)u9?Aw#&r0irh7no~4nearjFk-oa;z`8x zP-SXry)>0Vs=J~+B(!O@pj*5cB@j{Yt|_8~zkL_eRR_WLsgVVduaP{)V# zUoYr9b;lQWg>(Eos**;i>(L$@A2LGkgXn*3!VmCW_$EXf-7@2ZQE{?PdEy&G6J(%L zUSQANC8|}~VYbHwN$g=AepzpHt?EdHxH2tD+f#jxUTSFC)X4?ztM60zu26{_f z-RrhTHNUMP?m62Fc4w!(HsdjSZPugUw^G+F8m?rU1JlP~*WGMGBxA}rfG>a6c3|CK_or`tt<~)jm{hLu+Zt;JyheO* zB3ga6CckaBPT4_}SN*nE(Ut~umaQqG)$VMSO?i)6vjnYqUF)t!;p#O{_rCq%YTFLn z?dTnM&oaye)wb=xwy%x5=VD;6tQ0f0-S_&-6fc2ap{M+or67Uw_kN(v21Pl_Nsgij zc>&I(p)Lz2IMk6=Re!1*qZ{FdhcHb+qUz-E>W8G9|_hD|xBAEdq5WJSaimxfyn*;ZdE+HILN!P{6(f#^`Z=#}S%l?Y=$P z=&>*3`qwO!u$HzMz_-km@DaO&Pt26?8QOA~Mu^|CUe<6gI>m2U2?Pmby=WHMH3wv$ zZ3ALJa%6*vlO#AB{gxS$vrI3u=u0Y7=eLZKoJBfkvfym?Tb5&Z(Awk6xXYUSmK!DZ zHL%Y7xZ98VZFO;pE%|XJ`%zB}{P1O5d@UIdSVN8RZ=t67ZJXl~-w8^7ehi((V|YLI z5G2j6sVU;p?4p`d;C6ovc@SOMh`ws1uDeUb1O_bQuSvY2qXrop#2qwXYnG!_)gJoR z;x;S=CvK;p`Sv$`+q>zr=m?D6xKXWfdz*Z=t;|DySWo$(sViF0w{i1rTVZCuA%$e_ z&HJb~z0j+e+lU!yU{-<&S}h3yT0SeFg4v?rYUZ(w<=r69Rz-zmT*O;`Ef_aaAzQtX zvDLuXZm-=!UXvabspJB91LDGYsMNNd6s$+;#D`L+5PFkbR=b4^G*Cafh^Sdr2GSov zB5ks3vdNMYwXHstDsPZgQu_`1JttPV zi9H{XRFmF!L4`9i(CP7((Jn%=TMW@40-9<)98pK(&R*RVfq}ZC4sPConGTNZcg}3?pkTH*P0eMP?a8%6(Wp z)lgxqQS83I1O^e&pRn#>UF-%>#6I+JFRs9!)n!}{I2;1<~LIMPO$-M1$Z@#1@N zIKGX}z#7u-uO%L8ZAY!UV$fH-W4)RDD#_&Q=b*N_Gh%&{cMi<2S_-*Z%R`Urc6q2< zVZOgc=#%CzCZa##m4|e(t)To4m1rIJQB}1ybZ|oYuM>U|RuGy*4Tm}wsBVg9H=TbN zjM^GHPl2ChY2m*QqyoW!f)8|0Z>lC&-4k zK7+hzy_IwLMiHO7iWyLGI7-q~TkeA%MN`VwLRk-?+(=fVu2%RZ@GC-sp{$N5cuS|R z!07DIXQQoGyS@VJD`;JTZ0PaXj{CEY`EAF=N^2Y_2oZ%|N+?*(foJ3$@Ai3D>dQJ} z$C1QLtng;~G7i@9X-OzoQKf-mFNAWw3>3i;hAjZ)x1#^@?Qyp^*?pF1LnA7hpg`^_qr=xSFdXH0_QxFVG+OiL1E`-*lk! z3={xb{_LRD)|LBKS~}vuYPKCjV(qp!+X574hi`?S0?V6bRX4@@Z0+z_b<<>+i8aU@ zI2+1nCl$9q6{#q*)6#^Fj1Ex^3luq-gszsDr5N>nI6KsLFO(K66!oun`2fMvFe%nExWiUzACQM&Uz%u;jR7M2#AQ3gM zVD0=UXj>uk7rK%0+&LJxVq_p!d>DA7gQ6#4(F1zv%TXHhi@v}Q_9FLH&mHNv9g(}U zWHhIftp8GsM$4D=Q0=!IAyC_I%|=bzMK0!qF$4)iZS)Oi9AWA}oI$y41rkGz{cXZ3Xzp)&Ri~l$cpF6e z+uou(=;Hkp2c6d%mW=&Cqt!93ZumsR64>yu9wv7jsY3x%*T(I%e7sfD#7ZTu=2;6uI^iG) ze#^V~_PwJPrDRZ`4{GpR9>t)B2_?|%w=_TsbHLxQS#R@OekQSZfwlTAn4>Bgi6E)nnive6gh--Jt|30BN4G1ky>^HMfS1C zcoJDnQzS&NLb7aw40aYZe}qq5tl_tEhI?CTrb5Cz zQgVY)2^mDh`6p4b!JtIRpJP-)CX#X>WGoVYWgnW~zqI3A=I|g| zUcU1gW;**>`xSY=ObFPi`z^kQL|iNqL9+FJV_e)RF%cIq=^3{733gV-dJYfiW<5OO z62Fg2JSKwz#V)w!2I2688GwGvG<@S!s3|avPvNPtor`2&Yygr$UzT?TMILW#BtnGH zvV@XZe7`2arK6Vk4CFr9Uv(t*32WNS!E?`pdVKxj917x08qJ~(oNn1R!zKU3hZahI z)5mrbZAuo>GL_C*u~xAQEzN;6QZWH1NOFBM9)az*IJeO7yAj`aeAa^C^6ituo9+Ym zd`KczDo^X0?yb5x14)+;J71i;`e|tX>F-GWXG0!TlKnl&2E*@raqIX*i*9yd|9x%JG&P7-=D74kMK5ErS?oB_xRv z%J-J;g;E=(e9L*vp{#HDm^tl)v@t@t-|__`0YdgNLaPuoJKEO_S0YREBgU7|EG>9U z5V%zL1tbH%{I3)9v8LRD*c)R=sAM7PtOW(p_t-r&fI38=-64Mp5NQv`}PK@5dfg=3~5af-sy6 zJ&=);XZHuB3CD^Fj~mH}a1IW3K)%mN?k~ugo#Q!S%6Xm79{byu&wTm^!R?z*H zVS;i6El7opS%>zsOQV)f;4rl~LFig_tS?C>cLQZSOPB!F#3Y$I(fI%>p1 z!ZL`c%8x$FIa0O{f!cmc)`qU*lgZh5Ut^Ojv-EEQeUH&+3H4ddmnz}`#IP0_ovQc% z{AOG0@Fd!TABcew&9=5n1V;a$0I>Fp1$Ibcfpmc#q2s}3TjzLSsJxMCtIc=;BMup) zqII^fMc*mS6*auNRg`N%15xfRS*`-lI4rA0*{oO9ksDdn@>gNCn^=C!U~bD$YN^k1 zxu7NtmrRRbid^&*auN9FN=9D-wf!u&hq~)Bkr^$Y-wQ5kvJ>jFd`hU_(oUeZ-(S~+ zmU&5**)O;W2d<@}qQ{)7SdAk_QC;u{rsz>=?)RLG85L9+e? zqTBt#A4Rwo>72~Fu1%O%DA@gOl)^&4f9wK*Stb*J=m69fxC;gaK1Q+*9R3bpcOOHL zVsX8pR?~0>I0P2#sgvR(pqZx0-Xii2TN=?Zkg0e_++d>@ay;1#D48-JvH`b|jxrirRvzBMAt^?Tm+9 z*M@k-t3HC%zNU*U_nu8$@&p|vAI8f_5}ONq)scWWCxT z^I1P^rh`@q7bqV6n^5|mp53E(Z^7#Zo)xY;LHBv_;dPI}uFOzAq+Zs|uV^JfbsMJo zR#O6mC9TvyQxIur5xjs&68IR2V}`=%LM^pc3@-YI9?Wq#6%I9?S(rT*v`UHi;=Kvm7d*Wmz=~FEVJqGfOw$;u zelKXdsc&|pq&{!-*fYEO1bc?wDj5$Sw-^l-Yo(5!?zAwtqk)0Xt~Zlf3-oiy%6Phw0o2lhjWAy$L2 zE)AyKVIPGaZpEvdy`-6-#lS42Md5;7(hQ(@MurJOX``M=6bXTzTHyUgoQt-ihtQ-f zK>bkkPgEYSbBTehV(E@pau5v&@lqsA6?OGRSREcrk673(za=?5nW4H5s1OQC8JrIW zqNG$fAI4`u@ma73dXXMPA{2*^z=dnCJYUABP`m(jpi!(Xjy+IF@?o)yN)uwTN29BW{>{=}l=%Lf!D6%(I(>9Cg&G`1O+ngI^tT zARBwjn0#ob!Ik_=I86-(TW6hUu_+Z+zN3~C;d7Zx1CI%H6hkf46>D+YXpcZwqeY@Z zIsDrZE|jD6*Q?G)1%@0&wPeE;JCJ$mQE&&wIE@Ry^muwcza9%D@*xqx$bw*218Qjm ztsan?*96!Ch!0k|J`4McX6Z+=&MJnS`SFq!0=!;LENE4^_nj7QJ20_gA8@FaAk-*vd@X~YMwBR z#}^P*VaDU?baY5lwIKhi2#xtDS9I(KPbPjY3)8#QDT#O#3<0$G_UnGTh$jQeee+bU<>~X4J`i$bx zj*dY1R5TbX6tg!)n+DI(Brc-;A9$TjCeQ}SX$1#i)*N_)IHO*%``$;4;iQ2+dX~P2 zn3S|lgCY{9$q+g*KZ=y9g5q+KzJ!OSEt-}kXYNecy%ly-i??#81M>L!tsFl@fX}la zi14K&6udVF2>bDo;|Z-4oCXB%$$jtdD_xxH|x<3?^JX`X_wrHU_YXb-ygTRNyU;rz6>k)czx9IdNa{D-q6Wd z2;p5_Xl;Zyx=1^`13D!S>OsofBAK=Wc8UhJKmw%<+aN1yL31kFjUgp+au%roOUz0m zvDSUv_KhY<&4F1o`f#KpSFzvlDz*lPYvhlRsBZp!Fsju!CR^dcB=nek#pHY{g~*5( zP}Z3(laL&3?4jUT7$^)E7UCV7A7D;!xj_HEoPEM8a4;5oNQdMF#8!1zoN>q6Lp-xx zI51Una4;v3cRLNfJAsoKx+7D$N|efs(RXXcy%||0`wouA+bLxCBt!|FsgoyE#ztLw zdG>_88Ad{!Om0p`ir4S45knXTV^1$xeIy-DLsV3>B1-T?YfY=>O@am$C?Jc)V~aG3 zrUbF6g>hnCwgiJm-#<#5C>{KV)YJfNlzsjP*oNAu7TRP8N^@YaY;-f8=&Tjcqo@Ot00$iB-s+O&K^qc zU<;>^g(?Qj2M{bXk~&_jtDy)bY1x2W1MgUcCUl~2dW^1xt#0*+vCx$E|(uuDo(?Eg4Gsxi->nsG)5vg-L3D(vKpjL!fONkj-Eeu1J zO!7@`RoNC{lZ?a^QAtgXtXcqHO`*VQMU(wf+W(^9@uWXX#6pdg5UG8NgMhLZ8sg|}a& zM(gWt$}xpV16z@RNfyo$%U?iV2~kIYL7r>}#0RS(zu0l1P)0qxyaT)j@EQOc0r3gH zA`&}_KjOV62(`$pmPL;dd)!gHMDIVbU6_{Sjsn$U6@jbRo`E7NUyKJZW`j174JyWw?KLE$XM_AWDp!+4<*N4(P$DuLj3Z>9u<*$jSQgWe)WhreNPWIqktKXQ zGURAigPz|*VZb7I&0pjSIb!fb8bk?5yk1WZgs#^&Ko~JkAtu)AF7&H;y&i`$B1woA zqCK;O7brkvs| zpm4iPqcTY(5oKSyJVKN6gUAs=(kF97TQEo14^J~~Fj7CI4aQ+R_tf#TDTvz815`>s zqbP5po@);H_u)xRJ|TC!+KNCo?>lI)2H??7z)rv}Kz${7!l|mQX>M%}9f2ZOGzXm6 z>c|l&&=q(d1PvH>OWWuAT$~E{x6E>Rc&V6{PjWJe^LuE)nmiWoKXt*W+Tp&!LUKKC z`_Eo+jv&E;mDqI9a=6^|potp6tD>IPZS8jdK&2v$R7_|S3u*90Oe@S+N~9Acp-R-q&C#@bmXsWLx->?tn0Li_Lo3f9Vt$1I)p&Q>bkO%x^pJi8b*hH&ym{&dd`jyJ7+|XW z9Ao84@B-o#C(Sp$# zFM!A;3KdU^L<}H(gg8XnbXq&PC(kvkpv^lA@fQkCh_POf~~!ba*xpVbCR26YcHoq z!-7%^%3&-n#j=bn(zEf$yT}TCormU&h%q)>opM(<#c;qNXwZ6Fpbi=-nbMhwuJJx- z4DS2FYEy~*B${T2XtJVP0_c`@&kNwDu?Amer1zd z-BG3z(LzNL*&<2OEy!YROZU($jz&UG4n?$!SMx7Mg%HCGAkLuY$4Dda+(w)^yoq0+ z1;d^ifYHK9QdBMefCfAWniwTGRtla$p6Y(E{0d6jVo9d20F%B)xBhqbgI9~aOK=y0 zfTdp~LFag+Py7GOe(+*Z$&cL+juUC`e{VlH@dFw%;;eTEVA%cOaL9?JULtu64m_)q zAT9O8I`oA7ApO!04i@vu>Ffu^8(qAo`=8zq?%7F=Hs*eA3u$GZam#Xs|=cdfCT*R)ZWX#X}Q$Hc9tGb~klId&J&-YUIB zNu?d7l?F;^O;S{}B+ArF+2Z8POFyJ)K?RN8OHqK7;K@uHCV6p>M)Z{vz7J2r{}{+2 zzJ0TONQwBZ9kd+2(C!bB zX(d}(;8!>$hJNa2I6;{IHMSds>RlYKCs-IDmm?ynclyN>#x9=#z+zAg7y)3kj0Yxw z_=OrZRJ=bcs(BC(Mo2=oe@>F!XHW9aAMeW?&#C=X*9_To;t*UjJV);qpTe49#&1M3 z8_7)%{94?Lf#RX^L3KF-g>ypJ3@_rYp5)S}_&i8Gefn{0zzHG!$qTt8m>Cd( zL6011?hr14TPViF0&_UXZFtxjx3dL9pN3AS%xNjlib06yharwK??gyxtvYhm8$aSX zW2DCmZ&7l=;Pz4`1^fapd+5%Wz7**vo=l)oWZv;|o6>0zims+@6{Z}>1B%Q=LD4GO z#;F(gvR^4BqtYT&u3|_&YYR8GepRH&>WceG)9>rhbisCf5t>6_k18X2hOIqo_+f<|RI%ti9)}VKw?sC{6)`<@4Dby5_63v)KKQdm( z0z#fvN@9wkg-%G5ZxdS%p_y2y9ja>6`tv=GIdGsa8hMx=0_i=LX&#ca3N(h7+FSdY z16NYukO`Ng9yyLg1f5TGT3P8ULD_f|StQO05aS_7nf3DYfYKPAkzb4^3q9A-wuN>d z2t-OG(hHO5;g;ykkpNi5T?hfR5q5~)6EA6?2VbWiJX;C}H1E|)>%Xydmd=7l(08?I z@mvE8rrzk}C_uOg2fazwu}Ry>Bv~Cy6qCb@4+V*vC`fZaszZ^G#rEi@^vpqHHye)L zfq(frL$kolUlJLAI}Qzo2Feinjw6wH#tacJG6c^jgT*_9&4DebNsq{Mb3{TXwVFl> zK57JD{uX_t(z%=@u7*ZklU3BE&-7xpM^uR}o4P~q9dypgBolXJhGl7n)Z-dj{rn{jaHnTMul`e@|OI^j^0oAyDsnx#*&IzPp= zez`%Ln)9(%R1eDN2P~a%ApP-?!#Kbc$tWO?ROPDn6!u$<^uE-JsYr~CP}gES5?uEQ z9EBk)!d?Vx>-*$7k?1fI1nDmz9j3pJLPMjSoYKgTLO?(t;s-MFy_F_0pha^07by-^ z^EA{5j~WMUxd;fuw4RQx2^;nFm$q7!A%HzceMFB@-z+RTA?lBAKh3C*ptuej^-&!4 z&c_k;KYNUv0c*wcM68`qXE5ri#Yp(rl!UHS1BdDC0USz4VtaxisN$27waA=1X$eqm zYfGm;TazvdOtQ6ByoNiqX^~Ni!ePem+8$bB33NQlMx%?Dq7^}dLx-t38}zL0VS~1~ zpf-APDgPJ*p6plBlF0XBsQ~hsvw9w_GOv0PjcH81t zATHjg*$S0)G&KCbr?Pc;rdtQi#$S2Fqtm<4Bb^ZaA3U9TOY|Ayg%ZV_q!UhO)DsQV zioj|Pyhn$y;%6J;v>tvs*{>|{aGu^jmql;G3)sP!u%bNyiZJ|f1{D!J^Wp&&MW_hQ z0EJq`f9bD$sRwE-defUiCmkvBzpqfO{zU~SIdh%yz!?vm@xU1mobkXJ51jG984sNC zz!?vm@xU1mobkZ_V-G~op9II%f)9Serr~7)RaWlylvtCKl45hc-ZJ;H3a`t$ z!sSe{mU_zFUhpQF8D3YV)8i@2n-seuw``TWq(I8AaDXu>wxYzH?u788n50Qm zs-Vb`$;P1|j7>{~jxm*2SVt3Fb%ix)Owtu3K1#?7%ODvv9Dgh6#P*k#xtwm{jbc}x zyP~+%nqTC}^`5+$<+;VBMXs`xnK0Vi{#4MMo+3|K4=op}t+_>|g}Kr)Z$+6aWoDw# za)nixJZem?u-~0;O_Y+8(Xz3ltat@fHGIPr>KI0swe-4jlYnv>8bZs^NbyDr9KXc@38%A2-$F5 zMz#J2H={z;^wOf-^5Wbv`RErdbMCYS8Pjx@x1yxPRU}ypv*yjS&DB{DcY1S~H*5a1 z84ITcnZ>y!d9I>mWgf3An=x(POq5+9J8XfsBG2v79F7v}WUIH(T|RmWjkv^7?B{ZC z-o%L*C|*z5WXHnNE3A%bMMWOxl!+6|T=}jtSBcYQ4KIUEFUv*Io0cY$R)=?0scV$= zCUkzG71|JW6(!~Ff)WIRvoN=85^D!t=**?6sQly*u_=?R!OBf4MozNoH9<|02T4XR z>@M*x<#t_JQC@bXyTn;kk>|S7dHLm6CXXGHGA8-TWo~czmF3ZYjogp0+Hv-0gIfV=5>q5PYdryGVwWtGLv=>VGJ%mgPE^VLlFYba z14yt<4imJIOHVYs%!P62baB@Ml%{K1)im7TQ*|}q6nsEamz(d0OW0HZST*(Sx8_35 zK7*tldhkKqmrmETG~ia~sV7}8LuM-2Qxlh$%*%7Zd7f38CLQNc$;nlwm1qSnucI=r zz)@aNmQS{oc#xY*3bYEX6#mwTwX)cOK5%K}5T!w&x!vMEx5QcKDMNQTyU1s@@| z!tGrp?wy_z7=ek_>&VT!rJ~$h>?-jJjwe4Kip4ED-syF(aA~OmEzLz9;3`vDJ=35r z-(7$SN=vN}HX7PQE%JIW2d;1xiRP7hN-IjWlBph#P`lDylIL0JC~$d-UEZ=)8u}cQ zjnWsqGkS%ZF00n2N-bWuw+Jo~8WE@tcOKFv)UtLouR`-w!0KWT8sw?aFx8OnJQWq9 zj0$~;xaERGaooia&C`%zP%k7ICoI3Bs7Nkhm~9{kX?F=ryWP2(v&e&v)7#`&=BX&j zE7#Is7kbs1TbjGfU4%uIt6UqKD;yd0Tv_fi7_A(urJ@bOla4%3iOax&q2wy*<%l6s zleXb)q<0Z~_B*?~TXDbPZv3+?fb0C--Ccn7fCKTK(?0>n0}kHU-JK11D_|wyF95d! z?gwlHjH~VLZUbBb*af%^a3H;;2sj?_yn9d{a0Xx{UNbEP+zR*>U?X6{Pf;FlI$#&z zPXPyF!Py2l9?(*U@_?CuU4XyY)ZLwkpSX;_ue*B(VC92o2jKdLy1P38XW)-A48&`I z4S?eT{{WZ`cnGi(aP%XnA8_-}y1RD+J_C3V@CU%-fc<~o-8~dP5*rUV8PEZ^1n@1u z)qo!XZUgM9M|r@r@#ya$;3UA~fXe`f;@6PN@ECA4;6l8&aS(7X-sy3|`cK6>vV_ zA;2oY=>F&@z(l~|zlFVkWq|ZAXtx1w1bhnbV>A#B*a~lonR-QC?*Jj9y}m<~7(FbA**unO=6zu4hMV>a3)|UU>;!Ky=XUJBH(twC4jF276KjuydN+ce}C*T zz~O+MfHMKV1Iz<_=wawqz&Z(CjwRh+5zhUD*>AT>94}J1AYOhU7%?*|BCW}D*)30w*uw>z5-YUc=r1! z54aw%32-}LJ7DDB5HG`k1117~4rm8l^j{b!fO|hcya2xbA>te`0N4tc(vEQgxCAi% zLQSgyOahGjJH`oMJYXr{O29h6cEAR}%kVO5D_|vHC*ZSy@m5W{?H}kjz%IarfV~c( z-vEmNHv_f;z5qDvWAr;<5#TYvWq3hlAoAQnz-+)2y!*Zya5>;MK)Nt2#1(Ptd@Z6f zK4M7U-Z6C%k`5PYE!ExKBS~UrZ)6UPNqo}qDP0R+(jSpHJAT&L1Lwr`Ss7EMO&vVx zvee=9r_3}ey9A$g>$|(*3asePj=wWLH?W| ze<+Tm-T{B8k$*#wKNnE|E&h!a}xdAz~6cj{ky?`0{m-3?3<Z`sB{{|H)RkO1i!3i`%-@NZlKMxSNU^Sls~`44(7sq5}8 zMj2gCq)c!WU)#Vh1wUN=+zoyS_^2UR{`#Ol4}zZueoyghMUms+*MeVQYzOtt(x8o2 z_@edR?rtmtf^{qm)ce+xdAZ^82Og5|5g|0npD8u`nD{Ce<@ zorK>6{&(Pq^I<#q_D$h^q+$Ow1^fh~52E6Q1IT_W_-WYpg!6Ga_?LknE{ErUe--$b zhG}0F_*1|a$NwtkqrTJYuLr*yZ+jLR%SSqegUG%n@a@?5gv){L;D4~WyZc}0YdyxI zj#x+mm8ZWdJs9P&+z9d)2mNn737=v;24kx9q3-TmDAp&TmsJ~R%oyUR5PF_}82gG4 zKi{Rda|8Ip9_jA>D{_UdBkDk;vU3NOhacQVJ0tUSKeT{<9DFP{gXOb=?FfMXHTYz+ zuAg%u(OS`tZ^5s{ee_+JF;zP-9wMuy9xHfVkjsI;E+sjqL5^dVbPc6(2N^5*WQIZJ znvGG_(NP1a(d7Hp*h4Pa-gE3&!Ow%9Tfoo2eKhs3vWeG7RM!T`Y=+G3B=ey`hV1ql z+K;+EgWMv>1@*{eLAJzT-)co}To%G#Dijbu5&UH*$-Q>)^TF?F99U643FFWUzG%xe z20IPwy^YZEGsuLq@oDf6fIlz9#@WI~s)POxcO>R3myu6?kV`_1WI7=;6Eg3ZWtxM& z8i2j}QOJxj%D994H1IX7JIMdKFAekRLh$K#2uVi%@?d!{_ybPD-wgh6@biu3BXflU z>Wde^zXklBd`X*z~5-(lONXw+d$_$ z@%VAc2%}7nL3#?f9(MO?vwCaz+Vr3Piq@$ zV*vcBlkj6;{A%!1jW(79`ydf~vJasXY@@+`JC`40Q)OzdcNOEBGzo{}lY68_ScAw*=d81TwKt^*nBAEFVB_I2(K#H_|Gk8Os~`gU%bbf!~w;R+PyGpW64Z zaXzOt!98M17vo|zWFnuz8JDpR^7ThSKh{I$O~{06XA}6l!S89@kR9#d?*xB=xeoR< z<*K*Pg`Yqs8vCK>KcI6}zt2;-D(YWkHTg9ONoa3F&+8>C_?gVl!@aIY%=?id0h10d zWPX4ShfyX{F1oCsZ3chJue-ZjjC}IT-k@I^A@dPr<``unZF+pQf#3J}@Hw#y{8;cW zHZgBq@jUQ-Mt>BZHu$qc_%n4MtpI`~%``LYW{jyMSZ zKfq5h^7(wm3fgh-zXm_t7^Qx&;()N^x82>(8FfTHrMDp+{O`f{gz$rNXAbyt8*yG4 z0Rc6xqCEP#zY6^Nm%6)e4Jj`hX$7qw{BOZOSwGMj|9iW__XC~%NB=H-KhQIQF(={E zvx02!!}S9_Lns43TtCpWg`a}oQ$LW8*Mt8U_&w!P;%^7P4t$z#bRQb#npeU94fq!t z`G!5*A@H9+iT-G8ZtKBMGL|>2SBHb&0Dic+WG47~!4DVbdEkEvewI;xWTqZN>%kw2 zXFlP^@^6MS0VynyjO2G6R*n*3W#c4|D5tv>|q7=UL+XYUK|?=0c{oUhwY+|7|0m`rwsdA8dup)K|j$pb`9S;D_@;8~AsF zAI=9|;J*XD(`ZBF&AN{UVnH?F)$sH0c<`r(;Zqy4!7l~>Yoq=-bp8?fDOEywZ8hn5 zt>@fN{B7X>qqe(yx>3iPpdTr3tVa1o;73oupiuD~89di$hmL0Q#-p&Ir*$%^?Cy@}pJDkfN^6U}GvcXe?TP4ANnG3lgMNrU((A6iT0>u)(m-bwscj{D-z+sjN|I zxn`co)PhFzGuIgpobkXJ51jG984sNCz!?wxZ+alpCTqW1EZ%X?_y$@8;(C(dZibc{ zB)uqG!qfe(;qvb>>|hvwqttj6!|e>s_3UE$CyOQL+?zrrihe6`FT|7NLLQy5ARdzi1ANY?mpW25_10E>Jk}5u`7?;!&zr(ff zIo7+2VI#L=597@YRX@EEhJJwQA2V!XJ)bfD1;cixA7%XC3_F?rJ>%xMiG4}7$xJ_= z>E>}eA`E>j(^Y$8zL9!ohLO(-LpOU^^`DdFmA?wYlrLub?I!tkjBhg0w=hoqPiGG8 z+}~<{nEsjBqEI|s|3AihRsY1ZKYqdV=NVd=9;!8nsrH-WekYeV_s>42|EF=SYWM@o zQ~PmprnPf>>7K6i!xEnP{@?Y0%10hN-=Rz4)h7HQ6aJ(Lf6;_DoACEcc)JPzoN+u_ zlvlb0cnmMDoJS=b#CYPz@<@aX7K3u z9CY=PK&xa1%}sPYg|lF~#JLvWK!M@6K@1g8@g4X=Qs{9mU3ONCM=Ro@aY5Jl5@?IC!@obslNQUDW&SJQTVLrnZ4DV!kKf@;( z?qv8n!}l0|!tiT`y=HLx8IEK)j^QkZix}oJT*2^8hW9gklHpEc z*UxYy!*L8}FcUjOsi{c=Q2_F(^gqEVNdv`Gozt?m zFBD8oP1UC6=TFJcpQ=sHkBW-QpR8RtEs!Uw<^RLFU+MYpLRFvAbIpty6RnAO zQZ>pd|DuF7B`IZWa&mHtb_Lcr(hG92vDhXHeSV3Ac0M}d6^OQ&@i^9v--3%vEwySG zPhtLV8K1=XQO0?O)6#B{j0>1QpK)H1X?ctfXZ{Ap)zWXf32!pVA2RW^s{?Z)KcbX{T$RSn%OzmlD;sGro-RUZwIz*>f4=N`E%vO8=9LD}BcqpU3*< z{6yZk7;j+w9mdy{$(u2X&$z1p0OLu_k1m%t3QuD^pZO0luIz1LT)a*KnUP*8cn-^t zXM7{$uQJXnWbHG?=`|0!j*9nMH0>gZY6Dit8x;>D85gflgEf%*VG5SQxD`x#gLag1?Z(P`svmGYcswA&e1{@BR)DAvD|an+wKj4S)UW?Z!| z@-|se*`LX{(tk7K;x#^qekn;1`K{ws{DeE+Tq|A_H!mjCE3d86`2(gumoX8x@v{8h#$GXDq0uV#D_ zH!Owm62?{k#qz*@j`=S!uEt+ttz>w4d~dr);v6>Gc|Vo7vj4m~i7Wf_7+3Z`Yr?x2 zSN5meE6XeUJ&Y^+A7fm_V*}%Ae0<5cil1{fNqtJ*%6O6_YnhCXVf=Q+mA%c3%a>H} z>fn7+Fq!4&F@7=QrHrfidYEw)kDoBkX;NFVSr%0Gu4a5G>wBN^#~5F|McycVuQM)Q z(*tYF1ClRZ%fs#cTP3dY^UofXxU#p2aiuTzA;}*lftF^%mol!#$NP*c{{|Q@;PTf! zEN|S5H!`mL8@Wv~RJ>#|K91$@Wc+Q$7d#?wRQ;`ttNK4+T-9&;nUr^O`5lbUWBh9q zKJ(|2@ip@&*2|k)8GnKCMU2NjDsLt*K7;WgjGMvb*GAxxMnnwJAB~uoj+rw0({rP= zOIYx3h6L4uI(1Bi;vy>1_pwp`MF9(uh;F5edskDx#MIC1Ssg z2WjN_R4{h;aok@z_zt1OGW|o4p7{qzi9;t7`!fW|z)=I9z*?Ba=V(%S|`zr>$iTkt|OX8piEr#x6hYkRJ^bldorzN;gJBK_J+tP*mvFB3n z$NtI^p$!~&E=7K9{ck|OY5*mx*qh<9f#c7mierCs4elolc%JT)({MlW+`V*vEBa&L zqyg{I{e5(AKS$I%w+;8RWxYd}<9@5KEw|M zDL`Mlh|u0Yix9rcCvVez?C0?5pnsTAA^QS8;`@`g9pmC zJ_qj(9wgiMiz?g?mTejaKMfut+tC3(4H-1>BUB#y416kC|*^mk! z3>iA;GP-{gz8rGlpwCI>G5BwYb#O1DzX+cVxoGe(x?c_747qslIJz(F9ia`q@;r)( z*gMdwp~>e8e~dbY`xJRU9_ejps=O~C`N;!Cz*Ld^6zSJQlAkK?uOj($dH>h9a6ea; zZKM0^Bz+5P7`ixNI&6sfC=!*=LnjTr>AZO$Y>&WSqth&z5q&Z-@GeTJ#G&~GOZu*i zf>^{*O}oI+j~H_-&)`0{|CqUO7kE?fnTb#25-_zn7u^DG-q4EelDh<)WjePX{sy5& zO74nqI97-|L}@?pFB-Z{R`&^zkm~+~;fm^ZBg^=}dj_B1;1ii^tS)i5l?bicpdIb`w)HTHGT0|bAH6&IcQ5vR5X598*%w0{3V_~8zSC5 z7jLik88PgNm_Cy*C65?3I;PK+xN+4uH0{Eae%IzME7z=9QQJr2^c?gXQ96QdG|9O> z>RE6u0im2Ybi?01{Xal}4 z$B(BAqn>|FTJSgG2n!@9FKQ1sRPk5D5f%)100Vc}ZBftvU6zTn=w$?FWz-&UNOTl& zWSQR$j?jkP6Ls%^2+`6R!7_q#choj;NOWni%$KuJ&!bT(DYBl`stg+_*pEcLmMSZI zSQTVHIX>u%@UxSIg2bs?yrEg0nlS4jiiSkE)<%D|eS@!+sv|e<=G7C@G5X>#pvZ zshR1SUBa>;VPSzKD?xJ3IY-GTIU^YX1w}!Eh=2-6P{~1ZR0KpsL4p`SLx^(3 z9aLKR2;xFi&}YJF1BkS$7_FqXIZz^>I+Gt)O6`o2LQXg{fsoEnqZ8SRGib-v#(O*HWHNbdf;atXogQA{o^ck-=XeiuZ}jQP3S7bIZim(e=X9b{I%<>@vc|atgmf;)bS|QzQ~u}F(EaeAm<}Vi zoyI^&=Yf#Uq7_((uVSP`P^QCGL}dx$j43FHG6h6hEn-^hFa@UM6;62sas7K*T9xr! z!Z{RHs*-qx>gaQ>Xy_0@JZ>tetePw zG&>SB%IB<}h4(Wtl>Qkr$k5|HXMu*2ktS`Bp}{_9r-n)sL|L^0hdLsKFZ!J8SlN@o zrUa>SVQ7ZWxul`KF@p@@`wxF;=;@fjGiYon>wM1d=as?5F@p@P^f}iwL?0N`DP(Ag z&v7m&txsbHzqtm32YgOLB$rZnJ!X)hy*`JQ#{`93W00ZUJ_j9`p@IadEdRJ02G95$ z+J8e@H3(8!X6Q4Y^R|XM#SAiZ(&wDk(5RTfZL4AMy3e7yB7^figW4+NSAEX&m~#l< z?pf8DXZ(uKX@n&V;h%e^b%KAZ0Q*6|bE=@iZ)dR2xXpmS=v(i$GqV(4zr`5F*u z&5CL5p)ofhX>r==rgJREWs|EW}ud8#U{^?DEQW2NK>InF($|AVJ*DJUuA zL;+E(PNKNT@9&#=(S6b6!S`0M~IX3~3){2)<^awdkaT7*S9P+eu zgp79yInQTROVG=nsxFs4gCDh0280~zvWhjFNvDJxGXKA_?+NhC^0?8gf9 z`VlD^8FIqYl%*EwENOgL$Qhw4cW62zR^SYZKjq1g^DyjEPG)D&XZ(qf^YSK@h>aQa zbJT_Yi3F$EET#WhI(=OnOgft2JY7-UVf>Fsru*tX%%sB!&iOA?OevY;bE+$uNz+13 zH%AqGbs|x^<71i;Xg(9*JpfeI8mnL(ZY0>h9@sOpBqdA?K8atSlz3I*&u^ zqma|#MWvOCAd1uqFmx#7^wv=MnAXr&p!HSAc_>*`L#vn;L#IPdWk8g|K{2f{xJS}t}sr{GI`aGt^&~ss@IUv%y5!1?HBh{~ko!3t&txVaxTvL5p0mfeqJN73^ zwG`o;YlYKnmGV~DxmQ`~w>0{+n6m_lfP{TZIV6=3L{ zu#*!I#kkT_wF1|sL+e!7*>p^49f)Z$bUf_*sH^Fm(Q;B-y7C>%B3Ybe2e$>wPVNAf zkGhjt_H-As?B(v&@*KS?+#@7vOAOIEADERueyg=E^x1~T*QbQmSnlwZOL+-JBsC7?jn|(-2E)K zxaU}IbN^zw-OY25^mn)wS?+YnE#lM;iJOn*DYu4}-B^C=PSo->mY=zAYk2`O zEq_!b`#+?U1d*J|Cy64tKA+?f36z(#{P{!z6?R(w0wRG*IW2!7kwC?pmcN)tQ0m1+ zf>JLb5=ec8_z-JW$RLMM!aVXN43^vnYNA_MZFt0Azcw6>L2+ivPG>de z4sZeEszBII{&%**&Rn?-iOdElmj_$z5i;K+ zS%K?lOTJk`-kWS$q_M|?1QAsl0w>Qwe}Rz4`{IiqAe|=?oy14tN2B(w5VA0GMwkyp z@h=h=&1NCL#yW;bMGc9gqXMx4<*AJJ3OOC^kwWScX))MV?k?zSzUCqoeaZ?_c%UPN z92D|ttcxk&aUyeB2ZE?9-(ex=V}>K&#T?I$GB!i>9@@w9eJnbTR&fNDQDK}E@|7Yg zV6UfOh29P0qcF&sP^evq^k(nXdO!m5tYMjj$65ZspfquVRT zW*DrBfJXrjN>9oE9NF$C$6d9oNr0a7U@Kplxj^dYT!6fYl+_r{+=2386aZ1gdi?Ap zZY|gqbY|tdGz*-DIh#;OzGex+avS7Kr0%1%hswjB;(rg2_Er4cHrjM%vWjX3&}V9{8>3rE9V4Koc6zJ}LR(guw|O>%jpO^&Mas5S*N*);ipE37V1dW;nN zQ*>(tLo+iESdCPRaR8=xpcumGWx|WH_-S-MKyMnDYShZl@XPYekI@VO9Zm;}D!5d6 zO4}_z3<+xlY@SEpRm0<0@;$p4DV!J`3s~f%hns0*qg22m_&b;>buJ-fpWHB9X^Q;$ z@F5@^_C!kKX!_?{Y488qLZLMP)H7g8AxsfzAIW+%v~D**y<%|Yw*eoQ;!O=t1oVu7 z^HEu)Jr$jRG8HL-ZMgVU-aDWuVhwm34L4;oZaUJ=$l@6D$b$F~KgVORpR~W0;}8?W z-vjzN25%zmOY$Ic&2RusD1t-fG3BQ!(Ed>-pzBbniZnpQV=xWaY1d_eqZ+OYsBsLY z)}D4t)~}@Do`Cwt;ECvSX@ANps0AAK#M6ML8JN3d+JxxSR6D*cNPn6wWVpQIh>alb z@yM#mt3Nu@N(+nqmlWj_py$#ve1SqRlTFCqYil!iK={ieS-$y%=MnNQazsfH$@wv4 z;!x$m<4W2Ss>S%Sp!uey3EA`o#SwKtY-GrZ8@2#1F65AvFw`C40|=uopwgT8iUq>M zLO$^cf+hi+k%2&~fV9d&CVURU>j2jq0<~$&N0V7vJt1#S&_(hbxZz zgfChc^wvUVM_VsR^?4gqe*upk$E5i>t+S9V$Ex{St$zZ- z6+?<8CXPN)NDCc+=~hAPRluQ2EuiX1)N{62pv3EHi%*@^dt0PV6qQJ~Yg@#4__YAxA9I%u8VXZkQPp%k=*V zxx1dGXU15NibIuxpsi#4zI$%S@jwC-&3K-e8R~%(%odGi1xl zSYETu*D zKAM>YMVueUznTFv^VqV*6wRy(Rx88Im{_Lgx8-lIY5G7=$N!sd`IekVVvE`GD=b7f zvGc)NVVH4=Wo9W`&d#No`@lM3m~kb`Ol-`nR!lR01nZt*W=t&8E7^EWNz-#+5-x%x zV>1X0rjo5=%YK8^fYT79xKXQcpgHj7b{1L3zh@iJ}d{i6Il*&=dv8^u4OsI zJ<4*Z`xDC%Ztw)z8|gm8a_Y+bpNL znNE_u=iLGM`__5BrrGKfh0DxdC9HRN7~ZfsMOD=Qx|k; z<(`lk8nx{x-NDqRdzQp$wp{j&Wkr!36&XdXVhqp{F7c2p7vuRbrJ)FsmLo-0;2akA ziJ#l@$x|w!bqti7*3yaPZC*_0rhBo(s&YKSqdJHhM>c z5B|a}M6}x@^)c?=>3|$Y4<%S7a5qKSEk+^HkL_2Vu&i~6>1`bLRw^2zsGAhUIccB$ z17iX3^XWNzDcK1RAA}uz+Z|d~kJ~UhCoHW0c}%2$Y9uMZhr}_GvOmXR1U}TYrnYv*@M-`5+YNBD&R{k7uISLHQpkWc|dmm#|_m;O!AM zZY30?VmO`jEK0^oDEU4v&SasK2GB75M71kTzP|^5fY>oRe@Dvc)rPa(=hs-(tCu0r{iJl#{FuK{_(Ghp#5JUX`AH&nKY zdQU!tY9h*E9LI>thH{oV1VbS>abv5!{$pYK$DFY6td1pmC$;C+7ZlATr;(sa~Ty@5h07eg4+NPhIu3_ zX9S%kT1v?AWi0Di1i$D(s$t|z{2O=|A%B{Mc?Q__bhx0Y&dNt4Lv(lnZd5^Hlvum~ zA$^6cmlZBwB;*1DuXw5&9wcN<^t{`E>2uEhl3vDg{(?1n6ie>Ic&eHc!TAWHOj#w~ zN0mjN!d=TjmFG%;YQ*5TFoj_>lV3b-SyaZ40P06Dl^AD9&`4nA9A6E@^S zf-8kM_$G-kRo=Caode;BkWE+7cl|i(yEwAoSD}%>~ z#5ny}IUD>21LZJIql(4=dm4voF@KyS{8Kd6DApj2$6MAbz&0D)7~zu94dhX3!_{F9 zb@c(LU;LYHCGud=$d+$o#1lV(@vFzO>M+(3izze}SsMSD6^BX>yN8r6rlnm;&@BS+ zVME{qE5aySHjjYN2w=B#1eNzVThG~YDte3<3EK1bp>i=PtFPL!Y#~sWg0}lVsA{ZJ z{PniHGX(q-;C^TLrh4P4S8Vy+FQEPbnjf7{W%-|zr~+jx#gTb1zKdJ{iyH#XRqI=pg!=lJEt1pe_PdV~Iv|TX^jJY1m@{uPsI?a*u z(3X7^*9Ks_JX~-kDAHU<-sq-Dr$G4Hkht|L(o#o$_?9O9PK1ZO%yauyq|J_OeqEDt zgHYIzxP%nxwj*nyKXICBfzZ^DsFW-peZMIh@yYT>)a)htfG~(iJbvaIh8Zq8u5J}f zdcs%d5-zg)U$Jr zPPV?m@g1RTN}*+Zn+7W7zX&Po>E`Q4shU{o4pp>|+;7pUKKV?t;)tRkmL#%D75VC- z6UzM=BiHxI0Ivs_D&2ZzhZQ-Pj*K2Qpt%gfSrrsfBai5)GIwYl#2(UUJHLD!FDemHe1e~Iq+yEBA`fYFpuZZ7 zQ^dD$+#?1hK-px*WdF`4Dz;Gy4Ejy{Hfv)PXL=lxatFp@9@hnac@AW6bpeZi|L;m0{ugN*{Gc!c=iB0 z2InUpyotKk-gNh3g*mX4%aIZuB+rl$ntH&WBz0CkI@ zn<>pw%n|{aJWVq{2J3V>rY2Pn$nM{2(oGOVB`>qQvQRnZh$jXly~)Ap%mr28p(T$D!(9H4-M( zm$G^mO)3gPB}0lUH)hVogVOq%*#@j`hN)W0P_&Tfmr|CWuP3>&Aj~o(9<<|ZGQD9? z{#ISnSAn`SJw48Fub}MzkBm zT^>6@J#6T7rtgTJSq#HdQ+WO0>y-l+SwphZUpkiSAl@@-90C1civuwWhvaKxbp$!8 z;-M!FRX7xZCRGW^Wj8db8VJqOkpwdnAHM)|EkbhbUL>q182vq#<$I$hu>K+W^b0ys z&j5SX!(*kdhcu>73ds~l)3<>7$$!ve+B%+vA^F*Ot#}Pee#~BR_01&^SAiVawvgPO zUF+lpzwCeL=qQebIv4rF^2!=bPeQMwH;`j>&(*35R}FKVtgd0% z4zm(R(GdK{?xVxEne^jTd{`FwLhDQb|Kx>G^w3%9G6Zl8&qr)p_`q4U* z!!r9lt@9oD_wJ*^qYnLOovq<)kOoe~$wPvE$+2Uc1{uMcJq z!#4dYuEcV-*nws*U3sh%TvDLUGjwtsDW<7IzO+g#tqGloE7P7-soDUY!$vO_jnT78 zOr2;hMr3($sAUn?n~A|nq-V0xhg@0yJtVdq zXf=t-Yb+`N%hv?!qG%;oc7o@Nqv-@f4*MBs#D_DaKlX{MhogNWJ z_kuZ3GpB;}iebjZ&diIhoP$w}W8Vzc2Zm{4k2ie7m0!dA%=8PO-uO3NJt&RhA3A2; zr45H`!v}*y6+m2K=@DTxb3_hC&9Kd~VAVCuxWqEEd_*Sg)y!^SjWEoNiDf$eTjN$N z3fS;0P#6E3t{#*|@z309jnT}VU>!EhxWv*U!YKap-VUto+2%#CZW?A>VwpKRB3C`6 znJyLv`EaNL$e38BFNw(9e`|VWP#gc7t{#*|w?<@1bQw-UFR(@$W?W+F5n=Sbh& z-&7p`Y6kR(F#14L_IzI3tO8aO!;DKTGpk4Ce!P{(HhY8hgkfe(EYq7sWxq4p@H|kL z|C_EJltz0*S6t}E#IK&TN-8D>BrXRJNBl>Jqe$`re zEk%}k*c^x>HV|mim8hiuK)(W7q5=p_4au0(YZlre5_J>g`wcXmKHl-{f6%$->h8;m z#S-N3D_U_Wl-3$WDmk5)W(jf!-e6ckiFqG{FAXV{m^k{#1bOg9ZSxkWQ7qO~2Gi43 zI&yBuERr=v_y=ItECFg&934k|sPEv_uy3j{w*AsP*KPP`DQxFWLE?f``kmf90)Go^ z{d+uA=2~@MgaRde~jGO4cGkg2kF(P%m0NbA^`pN*@CH;IKoO8wH&S z;#lm=D_TL>&Cd$8GdD-NrvjbjDOkJ#t!M*T?Q#11)_<7+0fp3sZM?A&ON2*|c4fkk^ zM~~kYKc5@t^kA^qcg3l?!Lc?*&HFQg|Y~c(3VU1Nwn?o*XVUfQO_o*e>&kGt647GMF%R{k-ss~ zjRp234toMjYN)bpZ^R@!7r{$BNIb_lJxUBTwQbs+xfR%M54TFis1)wOBm>G+lNs0lqAs;SbxGft3Jm2*!HQ3TK^efFL*c)?0B7F z7>o?C?OQKvBdbAp%Oh$0aoZjboD=yWuunZ)8zCQNV3ckD?bAkn2H~zDamo62P)rkS zJGr+eWkFTu!NJK@Md+(B2&89h`#V%7=cxh+wGC+@7hK2TAWgUJgqxZ~Up45Pp7fH) ziMl#1Xx|o?J2;XxPGkm60MnrU0uFmQ znW)3qdMDeJC$J43!EbqxSVMST?n*11B+6QlK;N*&h;+AOAIB_C0pcuvE|A(=q~YVn z@P%X7z)ZCZA>t2Uex!qARAyCU_}Z~&@7JWfAQVea;!3;h9Ly{%DxS`RQE5Lqe_X*% zcU+>LaI+$Zy&-@BWqXDEvYb4(rK;A=x zrEz09V!q!1@+Q8TxEt6$O4%})hz%eWGT{vf1fTaHv6gXf0GarRW&H;14-eM^$c$px zUJqubme>S~gUu>kHGt5Is6j%^0CEPiF$IXa_-RZ!+bAkCfV8NO*98!b=ml&*4EF|* zZ!m{5J_XqH814-q)i$UkiRHl763$sQ1IQQawf_6SPI!2R0p#W(ZRAG~e(^}L0puCr zoQO~>>^j1sGQI*C(QO6;$ZAv?6^?iagi40QC2Izdt6epz4G7&bkh}pTPd7~(3&Jyo z^ez{iH-LzenzR^%)#*uU02#DUrCJXl^r(|E!EJGa{a}K+^ac>Bq&jKvH_`wya5$V{ zuo*&w;{k*!R%QC#FOlg)n$rS}?1X+Dk>S!{RrQ!Wtb7(w!-`VjF_gy~GSiU8oLfBR zP;ycq!&oN*rxNzULQ-CQWh(H6?>$!~ZWdYn*I=c_+fczOiWKc$r#=s2IBCuALU+7& zOW%cbZ2YP^!!joVe&9~@&RmFJPT(iIkQFLmq(mhDP(+@=|B5m2ZV*~WYajz1!p1nCJcQL2*@*T3?~17YAG)ef#MXyVH1q>t zU_F#{`9u-<5K7~Qj2dhui#Zt1u44$;E_(GIVwHbDr0zj2QiyeAVHMHw6ovq*53xg} z6jrGuz)D?`4}pQv5vqppxmuK>C=ES31$}?8G@bGf;?0K-D{{Q$Fcj%{2MtiMjH75D z5a)-g%UFE7Ond@68D(#b{@t9U=CH6^Shxx__a|As?}bp=m7@)|7DZ~@8uQy*=8d`? zAdLon0uDRhY2?9sqi*11Sa2hBk%x$41bc7P)xm=!^%O zH|okl(Y#S-|DY)19(bX4NJm|Q>CC)Q*PKGUH|pBNw1>+4!!0WrR8bW_4U9IOnK$Yl zVFmq0T^~FS;`j%HGLaN0+k(#ik2mU0A(2Z!dCMrU4bn1i)IEwyW;2HodW?va5%Wgf zl3x^j8OSw*=AVg%q)|*({wlA5x7W^s4pjr37V*6D ziz=$n(xjzx#0mWC66yYlyHDt@sEpA9dNcl|OQEHynBsN$n&0?itHJiDp9Z_B4TYY~ z-2uxJ3NUZ{J$DZtV3_#;huxKv% z;Qco+_e(bBLuv6L zI|?!zn5pp1o@GjOZE7-!+iZJi3k;1=FzrR9liN#eYA=ZkY`aY-^zL{PH?0 zBe=2571UbZUlwPUHI|UZBb4Yk4ZgNgr-7X#*g4Xx3+9=l73t!!ghw%DCG0?N3-${4 z!MT;t3WkHd`68IGuoQ~F4_{;|MmoX%_IkwO12v4pewN}=$WZ&2hUjMqE$Sg+Hp8{C ztO<^>*G;ypYJeIVcpkw|Y(WX#Kr3x$!WU4u6?_LVu`?yuBlPeJq`K+jlAZg)ws1y&xgN_3Db`uupcSBL-8oMqL2^zg+=L}3}`CB9}vuY{evY%GItdUFF_A}g4Kk~ zoKF$AAaIva=(1}i+#jOSKk$Gd@Dl~!4R;%#g7BqBvI-}^4QPT$ z8cvm7qRlQ`O%n2h_u)IF5cD4xM|{q=<0ddT4PPDDh6xQ=DT9-SDxSnc>p+@|7soO| zxjq=J42#RpjN&2k1ygleK^i$z$Grm^c~(Ydg3k+-JgcGvhdK$(YdvK%^^7CJeX2i} z7j*JH^1~;TRz9H|@(HyqK568gEWk+zipvgcrc~l>xP4&L?z5Xv7eD1jVifeZkPhM| zD1!C7xQ1I-tKaIUp(SkjE{Er8T9|_M(JL!YJh@9N-2vi!4ZCM)L;X>We{&BD| zL1$WxUc?FhEOJtn2Pr&}BkEwwpA$jqhL92I^{!LNs5t3;nc%k~J54u1qABGuwtN9u z6^jtE(kS1eWU3rax8-wLuooWK2L``OxH9m9E&qq*u{a0tCqp0u;%{Q*l<(L)geOtct6XKZw z#!SPSkG8G~Ch;Ar$9#^=_W^?50AsbsQlERte9GVI0FrzL@Bu&{d$8bA@{va{Sj&;a zPzOx90>Vv0;-XTd4%qA6N|W3kC@Bq%vnB5m#p4s_&GYY9|Rz(z3z@F}DSb6FD1VOwNyBm!_k#9J1 z_a}-YHiNj6$P&4?cuRBe52rYKJ4Jc|$LEA{t5>McHvoB|2!6(Ki%{0hOB?pZw~S zHr5x|U}H?-C44eRR;@o3*sPd7ZFmk=@W};l>0GY@wjqYohUZ`{pX}dKD_o6Vc2V*#GXb$%C z$tQ)z8vtu&aNepM#D?o>CsB|+5k7=4suLbOEJc`!0yvJKDFElCBM8;5XhU=GE%+E8 z25T)Cn>?1<&>Y<5lYK0mgd@OC60WL%_8kWg`{csAY77@wf!#28e%kPyxsHG37}R}F zv|$`^3Cv4Rx`J0knHtn$X{jXP4v91HUgBY=LWJX!Pi)>MHj^Q{%j94VR zFF9BfDS2L}{Z|m~5{bKr!khZ#-^+DMv-HB`i$j+q?Mn_m0)4c9DkM<`SVh8>KI6Uo zvd$!}-x}B>F@4(i6CB}}w{Kx59W{XAz{bY(86WGH-&L|KzRi9K*sDgLciaZ2`DJF{ z;w^;l_H=b4p)I+=1%7!Ng&8vN3c?8A7SdG#%IXcA*2ju9cn%NVq5$TycDk^5d zfRuMMljiL=(lcYDEbq|_T2j7OK-1p=^>8}6+M^lFE#=mlnsgC_o9Re`vZZ!(1+fj- z|0{As-6#tVm2a9e)UN(u11WD{kP$@yKI9Rs#BXY&(2q$u|7YmbMR;2eQ>z2jf19O( zbwHqml4jcetR2AG48{kB#Z?h2 zqr@(7GG@MQ`yZyU?i^^}8!E9Z-%p4sb1TQcxr-VWY|$5Qf8o&0dB$Df1BL$}nk^Z( zQ-PKCa4tHb>X|hHpISn#qDF!BEHO<#Rj>SYwGQC! zKiC)zl~VgAC~=Fet~F3oYl7b`QUl&QgeG%M6-EsO_XOo2j5hWugnv!Od6=NZq?Ph$ z4&-XPf81J~)H|e$v0rg0pPF;f-?NeCyc|4X4qxxeRmq`J)2C z7BWJm5-dz#ehapgp&V!znR1d|u#L3Wpp=gzmTxJhJb=`4oErx*t(>nD^ATx>#$f~m z>z>E7O3*j|f<2^tw3u3BXGa?H;9x`6JVBAPMlUMvg^9vs(h5$7jl|jWP`nS?(!~yGXM!&9JHGg1gYZ!N@6 z!<&}XVB#ytm0P0@oI2k3$$Vq+c`s0p;ILn#*5G+l6VWxlLFkVjB32UYc~ehgg}e>{ zVgPP^aImtXc;3`9XR$f}RLFykH+2&!dfz9@TtZPqQ}8+vcRRs!X1uBUD8%!oz8}*b zD%(GT1_G*>j-UBPo6d|k^&?i$-qa_a!a9Hg-Uj6;DNwcro&6u))a+AnF96D4MuBaR zmhq;(<|>0C8wxlV4$g@2rhfUPf*%G_$)H@BrC`MhE=Nf>c!ugI^z0E3I#7V|R{nrB z*${-1OU^!yB%AM(t$qnF#2|F8hln!-d)~^zSgCxCfOUX(q^GdA@+~~9J?Moa8RP^n zSNKmvP2S35gWy&1KDR)5Hr~p_Vz3Kt7z}X;X76BU_#{V|@Gym2!L!Jh=N+7|8macYgYAdFF-W;;N)*pK_`-VJ z|H8%rvXjU$YwzGlxV}F}=mifE55(YQb`{JXzXAHkz$r0!h27^>JP$yODLB}!C=i3! z+Nmj)RR&P)bg*C(>>d300_Fn`M2@s~a07A_q?{P+V0VhqQ@ zkf=&A8Smf$s1^iP(%|X6gD*v}7aCaGbht92y@R!}^6d+FxS`aFMFH>N%b3=u0(;5e zT;|3*cooyZDquSePWtibgm>`4ci{#A;hZ5+K7@+N^A0|OXTUc>_}wGLyn`>I9Ae(V zCdctz3WTJf{}jccN=D_}^A6rFjoWWv%?(Z(8N7ql%0syq7()$LTGN+F**kb_g7*CRL1q^qrIk-8hkQb9i%2=u@8{pI!@8A+0-=+Vc$Gn4;ccTS>^*0W?36c`?4(^?e z+koL%gy3LEv?JVj2f5!7XuN~uRH%!9wnl@_v|7A(P`SR~7%V_Hkz+ubnO>z66^e?^ za}1V3+(Du#WjF@My$I4agzPiQ-6@5}F_`)U_P+o-Z}47(D+6#0R>y=dZUgj>@Uln- z1iiW(a||AQ02d&XG$gXZsmtIP+>LRpE?6D!!{iE5F~c#qx-Kl>Ke<^?rKfVtiUr5u zoH=042V;d{eT!zU3dT4FGow|Cx4}5zv5aHzu{Bs`P-4#ly6nM%OUXC}r;pL3e?SP2 z^h$z@$~XqQ!|}_O3W8A5kSIAZ$6))ph^ijIc80(WfNC@57%YuDA2AS&(T2rljAQT^ zCJ5sgoCgOW5yfKsyyO%<6b^hu=qyLSranCV$@FUgbMNMG!W4PxS{I!Y3djRWWaN`)f zl?QQ8K=@R`s2~M3o0wy82dzgJ1Kf~~AXK~Z9D_UOfprj!k33e)G1#K9PQtgqek7b5 z27i!%9D^Irso`5V=nNqo3ilj?{qb3uJP0j9NGyTIF*uDHq30Ouze zaGueCV{pT#iYO+7J(Dyjb-EBd$Kcjm2!8|MhV%sO7~G9Qq~yJi;{-8c$<&U)GHPp$ z9@P2+fju76_Z)+(;I!a-u^GVT#PmJK;NEAD!!w9~9k9)WbNt3J_%l`q;xNKb5ynNJ z8j0r^oLv=!9{}Dmgo!*lJ$?Z_8;-$>KY&0^fkYfC_nu=ggs-IWP*em^MGqF-wKx{z z7(7~B4_d9kdMrJYqce`dS=}{r0$4NCGkH`rj=^pZY353>-cHYqjk3lun0cM1e-7$} zbo7{G@ZNk)`U8Y8W=mCMoFn>)IR?HEi;RaQPH^l7ds&oSt` z3Y*sueus>6u4x@<9E01h=%gl2z`_TI;!r+~W3V08hMe(-f!9gL5ll3W!I`h)2>=NF z42f4y=^cZ!F!xLZVODw)ubE1$dmlaXR?yyQtFd7tNPBSbwj){0Zy9kr|q2xx%A zo{Dl7bS8*nUhrbO-V0vO^0JdBH1!tvsYBrs8K7!857e_#5na!K+e|ibbph zwBEq_1+ODL6nYTAM+T%9yr?wrWF6V5`EyD9q%|idjdE^{yH9y8!bfD*5Q3hB{~L!r zhhp}ehi#i$RxX4V@({6zV9$A&3Aazn5KtX(qx2Ndc~}h7N>@NVJ=i!8ZS)J{JiNJE zQN;7$%_Hs#*cEhUoQE4J#B&~QqYLk!8x%WWS+9dC4&&#P(WW!wJfvOC=ARol=xH4P zT~LB33eL8mv;V_+I28kHQBW!w1-3z2#(DVeB4tptM(86%q>LEn;rbsHJPgQagXVu7 zw-4ARIRF*?212*s;5JUXso8-{p{40cr<5bkdI#6}Yoqp{JNa|?dBM8=FI@^PP1%pv zf&|{*X?fEpSlvMcF?B(g|KYTpaUF$d*c7#j(Ks#3HL@&9LsKH1 zqcSi~%chwGC$z7DjMI_|-#9HP(Y2{5(C*3R-7wZcA$>boixAZgRI+33V6LEs@Ff;1 z={3%g2G@3+247pL?XoHV=o`<*`A3(+#p>;zT#j?&AEgW9AEgW9A8m-c)!GPXh{L`{ zdH4LIJ$}d5GKBW^5OJGf?H}!r?l2zEa|Zr{VD^t*z|1t)g#Sa~R`3tx#`BNPUlZpa z9gXE-Q!2owMDhHiL$Bcj)39-o?D)=7!nA*MDMrQH2(_Tch)9UR%k06AV*ewcyauL^ z^=j=Ec8Ttm^)R672F?+K*V^x5&tq#qkEMh8d%qU@N846}E6f9tBkdpk067X$PKSCT@0ipTgze}*TI(!CGRA%aT~Z2Y6#3n<+9N1r~Xh&K>;$0%t3=-Ju0 z1Db;7heJhV{G<2q(5oPVOL~wfPca$)=whhW1x6o5XVnb5CwpDS;~iil)8Wd9_K!~7 zhuc8FFBwXeSQPM&u6YOkPheXN&Sh@=qcuz7F*vZ(1}FXabizN{WdWZ5fbf?gQ9gu< z$@7o;e!(3OxGg4wJv>1`$wB$y~DoG zG?4j((#j{4Lq4Il#V1p}lhZiqKyk(Vqf>BuOHR;|&mnSN#+ludzkaBe%Z&-*#hdYu z?#7KHX&L`0<=^;6n<53Bq4WwV(n;J;O{yA>$LyY@&JiT8@sHLjs|=h;ugj*`0H?Bt-=r&Rn7nPyM{G(IQROoSG9vpT(YKms}WRV$o{(<0X9wb^2Zv3O%?+7&h(b6{B zKLSP?4LZ|m@&3^ug)288oTQcfAiai=&FS^pQpu<|Jtry6BtfDnWjIOO%>wC5gnVa| zJ5n-@leA1tdWQ|l3dT4|i~J8k z7r?mUv5b?n{&K9yDY5?m3P10a0+*6;lD4g^Nd-YDX-HgD#!0&Jv?etIp{*fNa$-)> zAZ|g#0Dw;z0=ELH&6tyP0q!fri(o7=EH-1Dr2K)dI+sx0*gbiph$0I5_pBd!8Zjqn zuJxWr6;9G5_<@Kce!xZ zwKX(e4_K2J?m0<^&r|(g^aeIChI>xZiRU%`EU*~{H%`)Tu*?^)BYZt!ly^bRCgvn< zN$u)AfTz+Cglbowla$^p5I=x%-DAa^q&L3SNeIrwdJl�&n-^dE8;s7%qwcd&uCP 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 literal 0 HcmV?d00001 diff --git a/shaders/fractal.frag b/shaders/fractal.frag new file mode 100644 index 0000000..1c51977 --- /dev/null +++ b/shaders/fractal.frag @@ -0,0 +1,22 @@ +#version 100 +precision mediump float; +uniform float u_time; +uniform vec2 u_resolution; + +void main() { + vec2 uv = (gl_FragCoord.xy * 2.0 - u_resolution.xy) / u_resolution.y; + vec2 u0 = uv; + vec3 finalColor = vec3(0.0); + + for (float i = 0.0; i < 4.0; i++) { + uv = fract(uv * 1.5) - 0.5; + float d = length(uv) * exp(-length(u0)); + vec3 col = vec3(0.2, 0.5, 0.82); + d = sin(d * 8.0 + u_time) / 8.0; + d = abs(d); + d = pow(0.01 / d, 1.2); + finalColor += col * d; + } + + gl_FragColor = vec4(finalColor, 1.0); +} diff --git a/shaders/frag.glsl b/shaders/frag.glsl new file mode 100644 index 0000000..5bacca3 --- /dev/null +++ b/shaders/frag.glsl @@ -0,0 +1,7 @@ +#version 100 +precision mediump float; +varying vec3 v_color; + +void main() { + gl_FragColor = vec4(v_color, 1.0); +} diff --git a/shaders/mandelbrot.frag b/shaders/mandelbrot.frag new file mode 100644 index 0000000..0af84ac --- /dev/null +++ b/shaders/mandelbrot.frag @@ -0,0 +1,31 @@ +#version 100 +precision mediump float; +uniform float u_time; +uniform vec2 u_resolution; + +void main() { + vec2 uv = (gl_FragCoord.xy * 2.0 - u_resolution.xy) / u_resolution.y; + + // Auto zoom + float zoom = 1.0 + sin(u_time * 0.1) * 0.5; + zoom = pow(zoom, 4.0); + vec2 c = uv / zoom - vec2(0.74364388703, 0.13182590421); // Zoom into a specific interesting point + + vec2 z = vec2(0.0); + float iter = 0.0; + float max_iter = 100.0; + + for (float i = 0.0; i < 100.0; i++) { + z = vec2(z.x * z.x - z.y * z.y, 2.0 * z.x * z.y) + c; + if (length(z) > 4.0) break; + iter += 1.0; + } + + float f = iter / max_iter; + vec3 col = vec3(f); + col = 0.5 + 0.5 * cos(3.0 + f * 10.0 + vec3(0.0, 0.6, 1.0)); + + if (iter >= 99.0) col = vec3(0.0); + + gl_FragColor = vec4(col, 1.0); +} diff --git a/shaders/plasma.frag b/shaders/plasma.frag new file mode 100644 index 0000000..1c4440c --- /dev/null +++ b/shaders/plasma.frag @@ -0,0 +1,18 @@ +#version 100 +precision mediump float; +uniform float u_time; +uniform vec2 u_resolution; + +void main() { + vec2 uv = gl_FragCoord.xy / u_resolution.xy; + float v = 0.0; + vec2 c = uv * 5.0 - vec2(2.5); + v += sin((c.x + u_time)); + v += sin((c.y + u_time) / 2.0); + v += sin((c.x + c.y + u_time) / 2.0); + c += vec2(sin(u_time / 3.0), cos(u_time / 2.0)); + v += sin(sqrt(c.x * c.x + c.y * c.y + 1.0) + u_time); + v = v / 2.0; + vec3 col = vec3(sin(v * 3.14159), sin(v * 3.14159 + 2.09439), sin(v * 3.14159 + 4.18879)); + gl_FragColor = vec4(col * 0.5 + 0.5, 1.0); +} diff --git a/shaders/tunnel.frag b/shaders/tunnel.frag new file mode 100644 index 0000000..ac8a26d --- /dev/null +++ b/shaders/tunnel.frag @@ -0,0 +1,23 @@ +#version 100 +precision mediump float; +uniform float u_time; +uniform vec2 u_resolution; + +void main() { + vec2 p = (2.0 * gl_FragCoord.xy - u_resolution.xy) / u_resolution.y; + float a = atan(p.y, p.x); + float r = length(p); + vec2 uv = vec2(0.5 / r + 0.5 * u_time, a / 3.14159); + + // Simple checkerboard pattern + float f = sin(uv.x * 20.0) * sin(uv.y * 20.0); + vec3 col = vec3(f); + + // Fade to black in center + col *= r; + + // Add some color + col *= vec3(0.5 + 0.5 * sin(u_time), 0.5, 0.5 + 0.5 * cos(u_time)); + + gl_FragColor = vec4(col, 1.0); +} diff --git a/shaders/vert.glsl b/shaders/vert.glsl new file mode 100644 index 0000000..52c6933 --- /dev/null +++ b/shaders/vert.glsl @@ -0,0 +1,9 @@ +#version 100 +attribute vec2 position; +attribute vec3 color; +varying vec3 v_color; + +void main() { + gl_Position = vec4(position, 0.0, 1.0); + v_color = color; +} diff --git a/xdg-shell-client-protocol.h b/xdg-shell-client-protocol.h new file mode 100644 index 0000000..5a2ed89 --- /dev/null +++ b/xdg-shell-client-protocol.h @@ -0,0 +1,2384 @@ +/* Generated by wayland-scanner 1.24.0 */ + +#ifndef XDG_SHELL_CLIENT_PROTOCOL_H +#define XDG_SHELL_CLIENT_PROTOCOL_H + +#include +#include +#include "wayland-client.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @page page_xdg_shell The xdg_shell protocol + * @section page_ifaces_xdg_shell Interfaces + * - @subpage page_iface_xdg_wm_base - create desktop-style surfaces + * - @subpage page_iface_xdg_positioner - child surface positioner + * - @subpage page_iface_xdg_surface - desktop user interface surface base interface + * - @subpage page_iface_xdg_toplevel - toplevel surface + * - @subpage page_iface_xdg_popup - short-lived, popup surfaces for menus + * @section page_copyright_xdg_shell Copyright + *

+ *
+ * Copyright © 2008-2013 Kristian Høgsberg
+ * Copyright © 2013      Rafael Antognolli
+ * Copyright © 2013      Jasper St. Pierre
+ * Copyright © 2010-2013 Intel Corporation
+ * Copyright © 2015-2017 Samsung Electronics Co., Ltd
+ * Copyright © 2015-2017 Red Hat Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ * 
+ */ +struct wl_output; +struct wl_seat; +struct wl_surface; +struct xdg_popup; +struct xdg_positioner; +struct xdg_surface; +struct xdg_toplevel; +struct xdg_wm_base; + +#ifndef XDG_WM_BASE_INTERFACE +#define XDG_WM_BASE_INTERFACE +/** + * @page page_iface_xdg_wm_base xdg_wm_base + * @section page_iface_xdg_wm_base_desc Description + * + * The xdg_wm_base interface is exposed as a global object enabling clients + * to turn their wl_surfaces into windows in a desktop environment. It + * defines the basic functionality needed for clients and the compositor to + * create windows that can be dragged, resized, maximized, etc, as well as + * creating transient windows such as popup menus. + * @section page_iface_xdg_wm_base_api API + * See @ref iface_xdg_wm_base. + */ +/** + * @defgroup iface_xdg_wm_base The xdg_wm_base interface + * + * The xdg_wm_base interface is exposed as a global object enabling clients + * to turn their wl_surfaces into windows in a desktop environment. It + * defines the basic functionality needed for clients and the compositor to + * create windows that can be dragged, resized, maximized, etc, as well as + * creating transient windows such as popup menus. + */ +extern const struct wl_interface xdg_wm_base_interface; +#endif +#ifndef XDG_POSITIONER_INTERFACE +#define XDG_POSITIONER_INTERFACE +/** + * @page page_iface_xdg_positioner xdg_positioner + * @section page_iface_xdg_positioner_desc Description + * + * The xdg_positioner provides a collection of rules for the placement of a + * child surface relative to a parent surface. Rules can be defined to ensure + * the child surface remains within the visible area's borders, and to + * specify how the child surface changes its position, such as sliding along + * an axis, or flipping around a rectangle. These positioner-created rules are + * constrained by the requirement that a child surface must intersect with or + * be at least partially adjacent to its parent surface. + * + * See the various requests for details about possible rules. + * + * At the time of the request, the compositor makes a copy of the rules + * specified by the xdg_positioner. Thus, after the request is complete the + * xdg_positioner object can be destroyed or reused; further changes to the + * object will have no effect on previous usages. + * + * For an xdg_positioner object to be considered complete, it must have a + * non-zero size set by set_size, and a non-zero anchor rectangle set by + * set_anchor_rect. Passing an incomplete xdg_positioner object when + * positioning a surface raises an invalid_positioner error. + * @section page_iface_xdg_positioner_api API + * See @ref iface_xdg_positioner. + */ +/** + * @defgroup iface_xdg_positioner The xdg_positioner interface + * + * The xdg_positioner provides a collection of rules for the placement of a + * child surface relative to a parent surface. Rules can be defined to ensure + * the child surface remains within the visible area's borders, and to + * specify how the child surface changes its position, such as sliding along + * an axis, or flipping around a rectangle. These positioner-created rules are + * constrained by the requirement that a child surface must intersect with or + * be at least partially adjacent to its parent surface. + * + * See the various requests for details about possible rules. + * + * At the time of the request, the compositor makes a copy of the rules + * specified by the xdg_positioner. Thus, after the request is complete the + * xdg_positioner object can be destroyed or reused; further changes to the + * object will have no effect on previous usages. + * + * For an xdg_positioner object to be considered complete, it must have a + * non-zero size set by set_size, and a non-zero anchor rectangle set by + * set_anchor_rect. Passing an incomplete xdg_positioner object when + * positioning a surface raises an invalid_positioner error. + */ +extern const struct wl_interface xdg_positioner_interface; +#endif +#ifndef XDG_SURFACE_INTERFACE +#define XDG_SURFACE_INTERFACE +/** + * @page page_iface_xdg_surface xdg_surface + * @section page_iface_xdg_surface_desc Description + * + * An interface that may be implemented by a wl_surface, for + * implementations that provide a desktop-style user interface. + * + * It provides a base set of functionality required to construct user + * interface elements requiring management by the compositor, such as + * toplevel windows, menus, etc. The types of functionality are split into + * xdg_surface roles. + * + * Creating an xdg_surface does not set the role for a wl_surface. In order + * to map an xdg_surface, the client must create a role-specific object + * using, e.g., get_toplevel, get_popup. The wl_surface for any given + * xdg_surface can have at most one role, and may not be assigned any role + * not based on xdg_surface. + * + * A role must be assigned before any other requests are made to the + * xdg_surface object. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_surface state to take effect. + * + * Creating an xdg_surface from a wl_surface which has a buffer attached or + * committed is a client error, and any attempts by a client to attach or + * manipulate a buffer prior to the first xdg_surface.configure call must + * also be treated as errors. + * + * After creating a role-specific object and setting it up (e.g. by sending + * the title, app ID, size constraints, parent, etc), the client must + * perform an initial commit without any buffer attached. The compositor + * will reply with initial wl_surface state such as + * wl_surface.preferred_buffer_scale followed by an xdg_surface.configure + * event. The client must acknowledge it and is then allowed to attach a + * buffer to map the surface. + * + * Mapping an xdg_surface-based role surface is defined as making it + * possible for the surface to be shown by the compositor. Note that + * a mapped surface is not guaranteed to be visible once it is mapped. + * + * For an xdg_surface to be mapped by the compositor, the following + * conditions must be met: + * (1) the client has assigned an xdg_surface-based role to the surface + * (2) the client has set and committed the xdg_surface state and the + * role-dependent state to the surface + * (3) the client has committed a buffer to the surface + * + * A newly-unmapped surface is considered to have met condition (1) out + * of the 3 required conditions for mapping a surface if its role surface + * has not been destroyed, i.e. the client must perform the initial commit + * again before attaching a buffer. + * @section page_iface_xdg_surface_api API + * See @ref iface_xdg_surface. + */ +/** + * @defgroup iface_xdg_surface The xdg_surface interface + * + * An interface that may be implemented by a wl_surface, for + * implementations that provide a desktop-style user interface. + * + * It provides a base set of functionality required to construct user + * interface elements requiring management by the compositor, such as + * toplevel windows, menus, etc. The types of functionality are split into + * xdg_surface roles. + * + * Creating an xdg_surface does not set the role for a wl_surface. In order + * to map an xdg_surface, the client must create a role-specific object + * using, e.g., get_toplevel, get_popup. The wl_surface for any given + * xdg_surface can have at most one role, and may not be assigned any role + * not based on xdg_surface. + * + * A role must be assigned before any other requests are made to the + * xdg_surface object. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_surface state to take effect. + * + * Creating an xdg_surface from a wl_surface which has a buffer attached or + * committed is a client error, and any attempts by a client to attach or + * manipulate a buffer prior to the first xdg_surface.configure call must + * also be treated as errors. + * + * After creating a role-specific object and setting it up (e.g. by sending + * the title, app ID, size constraints, parent, etc), the client must + * perform an initial commit without any buffer attached. The compositor + * will reply with initial wl_surface state such as + * wl_surface.preferred_buffer_scale followed by an xdg_surface.configure + * event. The client must acknowledge it and is then allowed to attach a + * buffer to map the surface. + * + * Mapping an xdg_surface-based role surface is defined as making it + * possible for the surface to be shown by the compositor. Note that + * a mapped surface is not guaranteed to be visible once it is mapped. + * + * For an xdg_surface to be mapped by the compositor, the following + * conditions must be met: + * (1) the client has assigned an xdg_surface-based role to the surface + * (2) the client has set and committed the xdg_surface state and the + * role-dependent state to the surface + * (3) the client has committed a buffer to the surface + * + * A newly-unmapped surface is considered to have met condition (1) out + * of the 3 required conditions for mapping a surface if its role surface + * has not been destroyed, i.e. the client must perform the initial commit + * again before attaching a buffer. + */ +extern const struct wl_interface xdg_surface_interface; +#endif +#ifndef XDG_TOPLEVEL_INTERFACE +#define XDG_TOPLEVEL_INTERFACE +/** + * @page page_iface_xdg_toplevel xdg_toplevel + * @section page_iface_xdg_toplevel_desc Description + * + * This interface defines an xdg_surface role which allows a surface to, + * among other things, set window-like properties such as maximize, + * fullscreen, and minimize, set application-specific metadata like title and + * id, and well as trigger user interactive operations such as interactive + * resize and move. + * + * A xdg_toplevel by default is responsible for providing the full intended + * visual representation of the toplevel, which depending on the window + * state, may mean things like a title bar, window controls and drop shadow. + * + * Unmapping an xdg_toplevel means that the surface cannot be shown + * by the compositor until it is explicitly mapped again. + * All active operations (e.g., move, resize) are canceled and all + * attributes (e.g. title, state, stacking, ...) are discarded for + * an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to + * the state it had right after xdg_surface.get_toplevel. The client + * can re-map the toplevel by performing a commit without any buffer + * attached, waiting for a configure event and handling it as usual (see + * xdg_surface description). + * + * Attaching a null buffer to a toplevel unmaps the surface. + * @section page_iface_xdg_toplevel_api API + * See @ref iface_xdg_toplevel. + */ +/** + * @defgroup iface_xdg_toplevel The xdg_toplevel interface + * + * This interface defines an xdg_surface role which allows a surface to, + * among other things, set window-like properties such as maximize, + * fullscreen, and minimize, set application-specific metadata like title and + * id, and well as trigger user interactive operations such as interactive + * resize and move. + * + * A xdg_toplevel by default is responsible for providing the full intended + * visual representation of the toplevel, which depending on the window + * state, may mean things like a title bar, window controls and drop shadow. + * + * Unmapping an xdg_toplevel means that the surface cannot be shown + * by the compositor until it is explicitly mapped again. + * All active operations (e.g., move, resize) are canceled and all + * attributes (e.g. title, state, stacking, ...) are discarded for + * an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to + * the state it had right after xdg_surface.get_toplevel. The client + * can re-map the toplevel by performing a commit without any buffer + * attached, waiting for a configure event and handling it as usual (see + * xdg_surface description). + * + * Attaching a null buffer to a toplevel unmaps the surface. + */ +extern const struct wl_interface xdg_toplevel_interface; +#endif +#ifndef XDG_POPUP_INTERFACE +#define XDG_POPUP_INTERFACE +/** + * @page page_iface_xdg_popup xdg_popup + * @section page_iface_xdg_popup_desc Description + * + * A popup surface is a short-lived, temporary surface. It can be used to + * implement for example menus, popovers, tooltips and other similar user + * interface concepts. + * + * A popup can be made to take an explicit grab. See xdg_popup.grab for + * details. + * + * When the popup is dismissed, a popup_done event will be sent out, and at + * the same time the surface will be unmapped. See the xdg_popup.popup_done + * event for details. + * + * Explicitly destroying the xdg_popup object will also dismiss the popup and + * unmap the surface. Clients that want to dismiss the popup when another + * surface of their own is clicked should dismiss the popup using the destroy + * request. + * + * A newly created xdg_popup will be stacked on top of all previously created + * xdg_popup surfaces associated with the same xdg_toplevel. + * + * The parent of an xdg_popup must be mapped (see the xdg_surface + * description) before the xdg_popup itself. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_popup state to take effect. + * @section page_iface_xdg_popup_api API + * See @ref iface_xdg_popup. + */ +/** + * @defgroup iface_xdg_popup The xdg_popup interface + * + * A popup surface is a short-lived, temporary surface. It can be used to + * implement for example menus, popovers, tooltips and other similar user + * interface concepts. + * + * A popup can be made to take an explicit grab. See xdg_popup.grab for + * details. + * + * When the popup is dismissed, a popup_done event will be sent out, and at + * the same time the surface will be unmapped. See the xdg_popup.popup_done + * event for details. + * + * Explicitly destroying the xdg_popup object will also dismiss the popup and + * unmap the surface. Clients that want to dismiss the popup when another + * surface of their own is clicked should dismiss the popup using the destroy + * request. + * + * A newly created xdg_popup will be stacked on top of all previously created + * xdg_popup surfaces associated with the same xdg_toplevel. + * + * The parent of an xdg_popup must be mapped (see the xdg_surface + * description) before the xdg_popup itself. + * + * The client must call wl_surface.commit on the corresponding wl_surface + * for the xdg_popup state to take effect. + */ +extern const struct wl_interface xdg_popup_interface; +#endif + +#ifndef XDG_WM_BASE_ERROR_ENUM +#define XDG_WM_BASE_ERROR_ENUM +enum xdg_wm_base_error { + /** + * given wl_surface has another role + */ + XDG_WM_BASE_ERROR_ROLE = 0, + /** + * xdg_wm_base was destroyed before children + */ + XDG_WM_BASE_ERROR_DEFUNCT_SURFACES = 1, + /** + * the client tried to map or destroy a non-topmost popup + */ + XDG_WM_BASE_ERROR_NOT_THE_TOPMOST_POPUP = 2, + /** + * the client specified an invalid popup parent surface + */ + XDG_WM_BASE_ERROR_INVALID_POPUP_PARENT = 3, + /** + * the client provided an invalid surface state + */ + XDG_WM_BASE_ERROR_INVALID_SURFACE_STATE = 4, + /** + * the client provided an invalid positioner + */ + XDG_WM_BASE_ERROR_INVALID_POSITIONER = 5, + /** + * the client didn’t respond to a ping event in time + */ + XDG_WM_BASE_ERROR_UNRESPONSIVE = 6, +}; +#endif /* XDG_WM_BASE_ERROR_ENUM */ + +/** + * @ingroup iface_xdg_wm_base + * @struct xdg_wm_base_listener + */ +struct xdg_wm_base_listener { + /** + * check if the client is alive + * + * The ping event asks the client if it's still alive. Pass the + * serial specified in the event back to the compositor by sending + * a "pong" request back with the specified serial. See + * xdg_wm_base.pong. + * + * Compositors can use this to determine if the client is still + * alive. It's unspecified what will happen if the client doesn't + * respond to the ping request, or in what timeframe. Clients + * should try to respond in a reasonable amount of time. The + * “unresponsive” error is provided for compositors that wish + * to disconnect unresponsive clients. + * + * A compositor is free to ping in any way it wants, but a client + * must always respond to any xdg_wm_base object it created. + * @param serial pass this to the pong request + */ + void (*ping)(void *data, + struct xdg_wm_base *xdg_wm_base, + uint32_t serial); +}; + +/** + * @ingroup iface_xdg_wm_base + */ +static inline int +xdg_wm_base_add_listener(struct xdg_wm_base *xdg_wm_base, + const struct xdg_wm_base_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) xdg_wm_base, + (void (**)(void)) listener, data); +} + +#define XDG_WM_BASE_DESTROY 0 +#define XDG_WM_BASE_CREATE_POSITIONER 1 +#define XDG_WM_BASE_GET_XDG_SURFACE 2 +#define XDG_WM_BASE_PONG 3 + +/** + * @ingroup iface_xdg_wm_base + */ +#define XDG_WM_BASE_PING_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_wm_base + */ +#define XDG_WM_BASE_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_wm_base + */ +#define XDG_WM_BASE_CREATE_POSITIONER_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_wm_base + */ +#define XDG_WM_BASE_GET_XDG_SURFACE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_wm_base + */ +#define XDG_WM_BASE_PONG_SINCE_VERSION 1 + +/** @ingroup iface_xdg_wm_base */ +static inline void +xdg_wm_base_set_user_data(struct xdg_wm_base *xdg_wm_base, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) xdg_wm_base, user_data); +} + +/** @ingroup iface_xdg_wm_base */ +static inline void * +xdg_wm_base_get_user_data(struct xdg_wm_base *xdg_wm_base) +{ + return wl_proxy_get_user_data((struct wl_proxy *) xdg_wm_base); +} + +static inline uint32_t +xdg_wm_base_get_version(struct xdg_wm_base *xdg_wm_base) +{ + return wl_proxy_get_version((struct wl_proxy *) xdg_wm_base); +} + +/** + * @ingroup iface_xdg_wm_base + * + * Destroy this xdg_wm_base object. + * + * Destroying a bound xdg_wm_base object while there are surfaces + * still alive created by this xdg_wm_base object instance is illegal + * and will result in a defunct_surfaces error. + */ +static inline void +xdg_wm_base_destroy(struct xdg_wm_base *xdg_wm_base) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_wm_base, + XDG_WM_BASE_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_wm_base), WL_MARSHAL_FLAG_DESTROY); +} + +/** + * @ingroup iface_xdg_wm_base + * + * Create a positioner object. A positioner object is used to position + * surfaces relative to some parent surface. See the interface description + * and xdg_surface.get_popup for details. + */ +static inline struct xdg_positioner * +xdg_wm_base_create_positioner(struct xdg_wm_base *xdg_wm_base) +{ + struct wl_proxy *id; + + id = wl_proxy_marshal_flags((struct wl_proxy *) xdg_wm_base, + XDG_WM_BASE_CREATE_POSITIONER, &xdg_positioner_interface, wl_proxy_get_version((struct wl_proxy *) xdg_wm_base), 0, NULL); + + return (struct xdg_positioner *) id; +} + +/** + * @ingroup iface_xdg_wm_base + * + * This creates an xdg_surface for the given surface. While xdg_surface + * itself is not a role, the corresponding surface may only be assigned + * a role extending xdg_surface, such as xdg_toplevel or xdg_popup. It is + * illegal to create an xdg_surface for a wl_surface which already has an + * assigned role and this will result in a role error. + * + * This creates an xdg_surface for the given surface. An xdg_surface is + * used as basis to define a role to a given surface, such as xdg_toplevel + * or xdg_popup. It also manages functionality shared between xdg_surface + * based surface roles. + * + * See the documentation of xdg_surface for more details about what an + * xdg_surface is and how it is used. + */ +static inline struct xdg_surface * +xdg_wm_base_get_xdg_surface(struct xdg_wm_base *xdg_wm_base, struct wl_surface *surface) +{ + struct wl_proxy *id; + + id = wl_proxy_marshal_flags((struct wl_proxy *) xdg_wm_base, + XDG_WM_BASE_GET_XDG_SURFACE, &xdg_surface_interface, wl_proxy_get_version((struct wl_proxy *) xdg_wm_base), 0, NULL, surface); + + return (struct xdg_surface *) id; +} + +/** + * @ingroup iface_xdg_wm_base + * + * A client must respond to a ping event with a pong request or + * the client may be deemed unresponsive. See xdg_wm_base.ping + * and xdg_wm_base.error.unresponsive. + */ +static inline void +xdg_wm_base_pong(struct xdg_wm_base *xdg_wm_base, uint32_t serial) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_wm_base, + XDG_WM_BASE_PONG, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_wm_base), 0, serial); +} + +#ifndef XDG_POSITIONER_ERROR_ENUM +#define XDG_POSITIONER_ERROR_ENUM +enum xdg_positioner_error { + /** + * invalid input provided + */ + XDG_POSITIONER_ERROR_INVALID_INPUT = 0, +}; +#endif /* XDG_POSITIONER_ERROR_ENUM */ + +#ifndef XDG_POSITIONER_ANCHOR_ENUM +#define XDG_POSITIONER_ANCHOR_ENUM +enum xdg_positioner_anchor { + XDG_POSITIONER_ANCHOR_NONE = 0, + XDG_POSITIONER_ANCHOR_TOP = 1, + XDG_POSITIONER_ANCHOR_BOTTOM = 2, + XDG_POSITIONER_ANCHOR_LEFT = 3, + XDG_POSITIONER_ANCHOR_RIGHT = 4, + XDG_POSITIONER_ANCHOR_TOP_LEFT = 5, + XDG_POSITIONER_ANCHOR_BOTTOM_LEFT = 6, + XDG_POSITIONER_ANCHOR_TOP_RIGHT = 7, + XDG_POSITIONER_ANCHOR_BOTTOM_RIGHT = 8, +}; +#endif /* XDG_POSITIONER_ANCHOR_ENUM */ + +#ifndef XDG_POSITIONER_GRAVITY_ENUM +#define XDG_POSITIONER_GRAVITY_ENUM +enum xdg_positioner_gravity { + XDG_POSITIONER_GRAVITY_NONE = 0, + XDG_POSITIONER_GRAVITY_TOP = 1, + XDG_POSITIONER_GRAVITY_BOTTOM = 2, + XDG_POSITIONER_GRAVITY_LEFT = 3, + XDG_POSITIONER_GRAVITY_RIGHT = 4, + XDG_POSITIONER_GRAVITY_TOP_LEFT = 5, + XDG_POSITIONER_GRAVITY_BOTTOM_LEFT = 6, + XDG_POSITIONER_GRAVITY_TOP_RIGHT = 7, + XDG_POSITIONER_GRAVITY_BOTTOM_RIGHT = 8, +}; +#endif /* XDG_POSITIONER_GRAVITY_ENUM */ + +#ifndef XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM +#define XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM +/** + * @ingroup iface_xdg_positioner + * constraint adjustments + * + * The constraint adjustment value define ways the compositor will adjust + * the position of the surface, if the unadjusted position would result + * in the surface being partly constrained. + * + * Whether a surface is considered 'constrained' is left to the compositor + * to determine. For example, the surface may be partly outside the + * compositor's defined 'work area', thus necessitating the child surface's + * position be adjusted until it is entirely inside the work area. + * + * The adjustments can be combined, according to a defined precedence: 1) + * Flip, 2) Slide, 3) Resize. + */ +enum xdg_positioner_constraint_adjustment { + /** + * don't move the child surface when constrained + * + * Don't alter the surface position even if it is constrained on + * some axis, for example partially outside the edge of an output. + */ + XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_NONE = 0, + /** + * move along the x axis until unconstrained + * + * Slide the surface along the x axis until it is no longer + * constrained. + * + * First try to slide towards the direction of the gravity on the x + * axis until either the edge in the opposite direction of the + * gravity is unconstrained or the edge in the direction of the + * gravity is constrained. + * + * Then try to slide towards the opposite direction of the gravity + * on the x axis until either the edge in the direction of the + * gravity is unconstrained or the edge in the opposite direction + * of the gravity is constrained. + */ + XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X = 1, + /** + * move along the y axis until unconstrained + * + * Slide the surface along the y axis until it is no longer + * constrained. + * + * First try to slide towards the direction of the gravity on the y + * axis until either the edge in the opposite direction of the + * gravity is unconstrained or the edge in the direction of the + * gravity is constrained. + * + * Then try to slide towards the opposite direction of the gravity + * on the y axis until either the edge in the direction of the + * gravity is unconstrained or the edge in the opposite direction + * of the gravity is constrained. + */ + XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y = 2, + /** + * invert the anchor and gravity on the x axis + * + * Invert the anchor and gravity on the x axis if the surface is + * constrained on the x axis. For example, if the left edge of the + * surface is constrained, the gravity is 'left' and the anchor is + * 'left', change the gravity to 'right' and the anchor to 'right'. + * + * If the adjusted position also ends up being constrained, the + * resulting position of the flip_x adjustment will be the one + * before the adjustment. + */ + XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_X = 4, + /** + * invert the anchor and gravity on the y axis + * + * Invert the anchor and gravity on the y axis if the surface is + * constrained on the y axis. For example, if the bottom edge of + * the surface is constrained, the gravity is 'bottom' and the + * anchor is 'bottom', change the gravity to 'top' and the anchor + * to 'top'. + * + * The adjusted position is calculated given the original anchor + * rectangle and offset, but with the new flipped anchor and + * gravity values. + * + * If the adjusted position also ends up being constrained, the + * resulting position of the flip_y adjustment will be the one + * before the adjustment. + */ + XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y = 8, + /** + * horizontally resize the surface + * + * Resize the surface horizontally so that it is completely + * unconstrained. + */ + XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_X = 16, + /** + * vertically resize the surface + * + * Resize the surface vertically so that it is completely + * unconstrained. + */ + XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_Y = 32, +}; +#endif /* XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM */ + +#define XDG_POSITIONER_DESTROY 0 +#define XDG_POSITIONER_SET_SIZE 1 +#define XDG_POSITIONER_SET_ANCHOR_RECT 2 +#define XDG_POSITIONER_SET_ANCHOR 3 +#define XDG_POSITIONER_SET_GRAVITY 4 +#define XDG_POSITIONER_SET_CONSTRAINT_ADJUSTMENT 5 +#define XDG_POSITIONER_SET_OFFSET 6 +#define XDG_POSITIONER_SET_REACTIVE 7 +#define XDG_POSITIONER_SET_PARENT_SIZE 8 +#define XDG_POSITIONER_SET_PARENT_CONFIGURE 9 + + +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_SET_SIZE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_SET_ANCHOR_RECT_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_SET_ANCHOR_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_SET_GRAVITY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_SET_CONSTRAINT_ADJUSTMENT_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_SET_OFFSET_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_SET_REACTIVE_SINCE_VERSION 3 +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_SET_PARENT_SIZE_SINCE_VERSION 3 +/** + * @ingroup iface_xdg_positioner + */ +#define XDG_POSITIONER_SET_PARENT_CONFIGURE_SINCE_VERSION 3 + +/** @ingroup iface_xdg_positioner */ +static inline void +xdg_positioner_set_user_data(struct xdg_positioner *xdg_positioner, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) xdg_positioner, user_data); +} + +/** @ingroup iface_xdg_positioner */ +static inline void * +xdg_positioner_get_user_data(struct xdg_positioner *xdg_positioner) +{ + return wl_proxy_get_user_data((struct wl_proxy *) xdg_positioner); +} + +static inline uint32_t +xdg_positioner_get_version(struct xdg_positioner *xdg_positioner) +{ + return wl_proxy_get_version((struct wl_proxy *) xdg_positioner); +} + +/** + * @ingroup iface_xdg_positioner + * + * Notify the compositor that the xdg_positioner will no longer be used. + */ +static inline void +xdg_positioner_destroy(struct xdg_positioner *xdg_positioner) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), WL_MARSHAL_FLAG_DESTROY); +} + +/** + * @ingroup iface_xdg_positioner + * + * Set the size of the surface that is to be positioned with the positioner + * object. The size is in surface-local coordinates and corresponds to the + * window geometry. See xdg_surface.set_window_geometry. + * + * If a zero or negative size is set the invalid_input error is raised. + */ +static inline void +xdg_positioner_set_size(struct xdg_positioner *xdg_positioner, int32_t width, int32_t height) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_SET_SIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, width, height); +} + +/** + * @ingroup iface_xdg_positioner + * + * Specify the anchor rectangle within the parent surface that the child + * surface will be placed relative to. The rectangle is relative to the + * window geometry as defined by xdg_surface.set_window_geometry of the + * parent surface. + * + * When the xdg_positioner object is used to position a child surface, the + * anchor rectangle may not extend outside the window geometry of the + * positioned child's parent surface. + * + * If a negative size is set the invalid_input error is raised. + */ +static inline void +xdg_positioner_set_anchor_rect(struct xdg_positioner *xdg_positioner, int32_t x, int32_t y, int32_t width, int32_t height) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_SET_ANCHOR_RECT, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, x, y, width, height); +} + +/** + * @ingroup iface_xdg_positioner + * + * Defines the anchor point for the anchor rectangle. The specified anchor + * is used derive an anchor point that the child surface will be + * positioned relative to. If a corner anchor is set (e.g. 'top_left' or + * 'bottom_right'), the anchor point will be at the specified corner; + * otherwise, the derived anchor point will be centered on the specified + * edge, or in the center of the anchor rectangle if no edge is specified. + */ +static inline void +xdg_positioner_set_anchor(struct xdg_positioner *xdg_positioner, uint32_t anchor) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_SET_ANCHOR, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, anchor); +} + +/** + * @ingroup iface_xdg_positioner + * + * Defines in what direction a surface should be positioned, relative to + * the anchor point of the parent surface. If a corner gravity is + * specified (e.g. 'bottom_right' or 'top_left'), then the child surface + * will be placed towards the specified gravity; otherwise, the child + * surface will be centered over the anchor point on any axis that had no + * gravity specified. If the gravity is not in the ‘gravity’ enum, an + * invalid_input error is raised. + */ +static inline void +xdg_positioner_set_gravity(struct xdg_positioner *xdg_positioner, uint32_t gravity) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_SET_GRAVITY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, gravity); +} + +/** + * @ingroup iface_xdg_positioner + * + * Specify how the window should be positioned if the originally intended + * position caused the surface to be constrained, meaning at least + * partially outside positioning boundaries set by the compositor. The + * adjustment is set by constructing a bitmask describing the adjustment to + * be made when the surface is constrained on that axis. + * + * If no bit for one axis is set, the compositor will assume that the child + * surface should not change its position on that axis when constrained. + * + * If more than one bit for one axis is set, the order of how adjustments + * are applied is specified in the corresponding adjustment descriptions. + * + * The default adjustment is none. + */ +static inline void +xdg_positioner_set_constraint_adjustment(struct xdg_positioner *xdg_positioner, uint32_t constraint_adjustment) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_SET_CONSTRAINT_ADJUSTMENT, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, constraint_adjustment); +} + +/** + * @ingroup iface_xdg_positioner + * + * Specify the surface position offset relative to the position of the + * anchor on the anchor rectangle and the anchor on the surface. For + * example if the anchor of the anchor rectangle is at (x, y), the surface + * has the gravity bottom|right, and the offset is (ox, oy), the calculated + * surface position will be (x + ox, y + oy). The offset position of the + * surface is the one used for constraint testing. See + * set_constraint_adjustment. + * + * An example use case is placing a popup menu on top of a user interface + * element, while aligning the user interface element of the parent surface + * with some user interface element placed somewhere in the popup surface. + */ +static inline void +xdg_positioner_set_offset(struct xdg_positioner *xdg_positioner, int32_t x, int32_t y) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_SET_OFFSET, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, x, y); +} + +/** + * @ingroup iface_xdg_positioner + * + * When set reactive, the surface is reconstrained if the conditions used + * for constraining changed, e.g. the parent window moved. + * + * If the conditions changed and the popup was reconstrained, an + * xdg_popup.configure event is sent with updated geometry, followed by an + * xdg_surface.configure event. + */ +static inline void +xdg_positioner_set_reactive(struct xdg_positioner *xdg_positioner) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_SET_REACTIVE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0); +} + +/** + * @ingroup iface_xdg_positioner + * + * Set the parent window geometry the compositor should use when + * positioning the popup. The compositor may use this information to + * determine the future state the popup should be constrained using. If + * this doesn't match the dimension of the parent the popup is eventually + * positioned against, the behavior is undefined. + * + * The arguments are given in the surface-local coordinate space. + */ +static inline void +xdg_positioner_set_parent_size(struct xdg_positioner *xdg_positioner, int32_t parent_width, int32_t parent_height) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_SET_PARENT_SIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, parent_width, parent_height); +} + +/** + * @ingroup iface_xdg_positioner + * + * Set the serial of an xdg_surface.configure event this positioner will be + * used in response to. The compositor may use this information together + * with set_parent_size to determine what future state the popup should be + * constrained using. + */ +static inline void +xdg_positioner_set_parent_configure(struct xdg_positioner *xdg_positioner, uint32_t serial) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_positioner, + XDG_POSITIONER_SET_PARENT_CONFIGURE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_positioner), 0, serial); +} + +#ifndef XDG_SURFACE_ERROR_ENUM +#define XDG_SURFACE_ERROR_ENUM +enum xdg_surface_error { + /** + * Surface was not fully constructed + */ + XDG_SURFACE_ERROR_NOT_CONSTRUCTED = 1, + /** + * Surface was already constructed + */ + XDG_SURFACE_ERROR_ALREADY_CONSTRUCTED = 2, + /** + * Attaching a buffer to an unconfigured surface + */ + XDG_SURFACE_ERROR_UNCONFIGURED_BUFFER = 3, + /** + * Invalid serial number when acking a configure event + */ + XDG_SURFACE_ERROR_INVALID_SERIAL = 4, + /** + * Width or height was zero or negative + */ + XDG_SURFACE_ERROR_INVALID_SIZE = 5, + /** + * Surface was destroyed before its role object + */ + XDG_SURFACE_ERROR_DEFUNCT_ROLE_OBJECT = 6, +}; +#endif /* XDG_SURFACE_ERROR_ENUM */ + +/** + * @ingroup iface_xdg_surface + * @struct xdg_surface_listener + */ +struct xdg_surface_listener { + /** + * suggest a surface change + * + * The configure event marks the end of a configure sequence. A + * configure sequence is a set of one or more events configuring + * the state of the xdg_surface, including the final + * xdg_surface.configure event. + * + * Where applicable, xdg_surface surface roles will during a + * configure sequence extend this event as a latched state sent as + * events before the xdg_surface.configure event. Such events + * should be considered to make up a set of atomically applied + * configuration states, where the xdg_surface.configure commits + * the accumulated state. + * + * Clients should arrange their surface for the new states, and + * then send an ack_configure request with the serial sent in this + * configure event at some point before committing the new surface. + * + * If the client receives multiple configure events before it can + * respond to one, it is free to discard all but the last event it + * received. + * @param serial serial of the configure event + */ + void (*configure)(void *data, + struct xdg_surface *xdg_surface, + uint32_t serial); +}; + +/** + * @ingroup iface_xdg_surface + */ +static inline int +xdg_surface_add_listener(struct xdg_surface *xdg_surface, + const struct xdg_surface_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) xdg_surface, + (void (**)(void)) listener, data); +} + +#define XDG_SURFACE_DESTROY 0 +#define XDG_SURFACE_GET_TOPLEVEL 1 +#define XDG_SURFACE_GET_POPUP 2 +#define XDG_SURFACE_SET_WINDOW_GEOMETRY 3 +#define XDG_SURFACE_ACK_CONFIGURE 4 + +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_CONFIGURE_SINCE_VERSION 1 + +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_GET_TOPLEVEL_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_GET_POPUP_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_SET_WINDOW_GEOMETRY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_surface + */ +#define XDG_SURFACE_ACK_CONFIGURE_SINCE_VERSION 1 + +/** @ingroup iface_xdg_surface */ +static inline void +xdg_surface_set_user_data(struct xdg_surface *xdg_surface, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) xdg_surface, user_data); +} + +/** @ingroup iface_xdg_surface */ +static inline void * +xdg_surface_get_user_data(struct xdg_surface *xdg_surface) +{ + return wl_proxy_get_user_data((struct wl_proxy *) xdg_surface); +} + +static inline uint32_t +xdg_surface_get_version(struct xdg_surface *xdg_surface) +{ + return wl_proxy_get_version((struct wl_proxy *) xdg_surface); +} + +/** + * @ingroup iface_xdg_surface + * + * Destroy the xdg_surface object. An xdg_surface must only be destroyed + * after its role object has been destroyed, otherwise + * a defunct_role_object error is raised. + */ +static inline void +xdg_surface_destroy(struct xdg_surface *xdg_surface) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, + XDG_SURFACE_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_surface), WL_MARSHAL_FLAG_DESTROY); +} + +/** + * @ingroup iface_xdg_surface + * + * This creates an xdg_toplevel object for the given xdg_surface and gives + * the associated wl_surface the xdg_toplevel role. + * + * See the documentation of xdg_toplevel for more details about what an + * xdg_toplevel is and how it is used. + */ +static inline struct xdg_toplevel * +xdg_surface_get_toplevel(struct xdg_surface *xdg_surface) +{ + struct wl_proxy *id; + + id = wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, + XDG_SURFACE_GET_TOPLEVEL, &xdg_toplevel_interface, wl_proxy_get_version((struct wl_proxy *) xdg_surface), 0, NULL); + + return (struct xdg_toplevel *) id; +} + +/** + * @ingroup iface_xdg_surface + * + * This creates an xdg_popup object for the given xdg_surface and gives + * the associated wl_surface the xdg_popup role. + * + * If null is passed as a parent, a parent surface must be specified using + * some other protocol, before committing the initial state. + * + * See the documentation of xdg_popup for more details about what an + * xdg_popup is and how it is used. + */ +static inline struct xdg_popup * +xdg_surface_get_popup(struct xdg_surface *xdg_surface, struct xdg_surface *parent, struct xdg_positioner *positioner) +{ + struct wl_proxy *id; + + id = wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, + XDG_SURFACE_GET_POPUP, &xdg_popup_interface, wl_proxy_get_version((struct wl_proxy *) xdg_surface), 0, NULL, parent, positioner); + + return (struct xdg_popup *) id; +} + +/** + * @ingroup iface_xdg_surface + * + * The window geometry of a surface is its "visible bounds" from the + * user's perspective. Client-side decorations often have invisible + * portions like drop-shadows which should be ignored for the + * purposes of aligning, placing and constraining windows. Note that + * in some situations, compositors may clip rendering to the window + * geometry, so the client should avoid putting functional elements + * outside of it. + * + * The window geometry is double-buffered state, see wl_surface.commit. + * + * When maintaining a position, the compositor should treat the (x, y) + * coordinate of the window geometry as the top left corner of the window. + * A client changing the (x, y) window geometry coordinate should in + * general not alter the position of the window. + * + * Once the window geometry of the surface is set, it is not possible to + * unset it, and it will remain the same until set_window_geometry is + * called again, even if a new subsurface or buffer is attached. + * + * If never set, the value is the full bounds of the surface, + * including any subsurfaces. This updates dynamically on every + * commit. This unset is meant for extremely simple clients. + * + * The arguments are given in the surface-local coordinate space of + * the wl_surface associated with this xdg_surface, and may extend outside + * of the wl_surface itself to mark parts of the subsurface tree as part of + * the window geometry. + * + * When applied, the effective window geometry will be the set window + * geometry clamped to the bounding rectangle of the combined + * geometry of the surface of the xdg_surface and the associated + * subsurfaces. + * + * The effective geometry will not be recalculated unless a new call to + * set_window_geometry is done and the new pending surface state is + * subsequently applied. + * + * The width and height of the effective window geometry must be + * greater than zero. Setting an invalid size will raise an + * invalid_size error. + */ +static inline void +xdg_surface_set_window_geometry(struct xdg_surface *xdg_surface, int32_t x, int32_t y, int32_t width, int32_t height) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, + XDG_SURFACE_SET_WINDOW_GEOMETRY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_surface), 0, x, y, width, height); +} + +/** + * @ingroup iface_xdg_surface + * + * When a configure event is received, if a client commits the + * surface in response to the configure event, then the client + * must make an ack_configure request sometime before the commit + * request, passing along the serial of the configure event. + * + * For instance, for toplevel surfaces the compositor might use this + * information to move a surface to the top left only when the client has + * drawn itself for the maximized or fullscreen state. + * + * If the client receives multiple configure events before it + * can respond to one, it only has to ack the last configure event. + * Acking a configure event that was never sent raises an invalid_serial + * error. + * + * A client is not required to commit immediately after sending + * an ack_configure request - it may even ack_configure several times + * before its next surface commit. + * + * A client may send multiple ack_configure requests before committing, but + * only the last request sent before a commit indicates which configure + * event the client really is responding to. + * + * Sending an ack_configure request consumes the serial number sent with + * the request, as well as serial numbers sent by all configure events + * sent on this xdg_surface prior to the configure event referenced by + * the committed serial. + * + * It is an error to issue multiple ack_configure requests referencing a + * serial from the same configure event, or to issue an ack_configure + * request referencing a serial from a configure event issued before the + * event identified by the last ack_configure request for the same + * xdg_surface. Doing so will raise an invalid_serial error. + */ +static inline void +xdg_surface_ack_configure(struct xdg_surface *xdg_surface, uint32_t serial) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_surface, + XDG_SURFACE_ACK_CONFIGURE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_surface), 0, serial); +} + +#ifndef XDG_TOPLEVEL_ERROR_ENUM +#define XDG_TOPLEVEL_ERROR_ENUM +enum xdg_toplevel_error { + /** + * provided value is not a valid variant of the resize_edge enum + */ + XDG_TOPLEVEL_ERROR_INVALID_RESIZE_EDGE = 0, + /** + * invalid parent toplevel + */ + XDG_TOPLEVEL_ERROR_INVALID_PARENT = 1, + /** + * client provided an invalid min or max size + */ + XDG_TOPLEVEL_ERROR_INVALID_SIZE = 2, +}; +#endif /* XDG_TOPLEVEL_ERROR_ENUM */ + +#ifndef XDG_TOPLEVEL_RESIZE_EDGE_ENUM +#define XDG_TOPLEVEL_RESIZE_EDGE_ENUM +/** + * @ingroup iface_xdg_toplevel + * edge values for resizing + * + * These values are used to indicate which edge of a surface + * is being dragged in a resize operation. + */ +enum xdg_toplevel_resize_edge { + XDG_TOPLEVEL_RESIZE_EDGE_NONE = 0, + XDG_TOPLEVEL_RESIZE_EDGE_TOP = 1, + XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM = 2, + XDG_TOPLEVEL_RESIZE_EDGE_LEFT = 4, + XDG_TOPLEVEL_RESIZE_EDGE_TOP_LEFT = 5, + XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_LEFT = 6, + XDG_TOPLEVEL_RESIZE_EDGE_RIGHT = 8, + XDG_TOPLEVEL_RESIZE_EDGE_TOP_RIGHT = 9, + XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_RIGHT = 10, +}; +#endif /* XDG_TOPLEVEL_RESIZE_EDGE_ENUM */ + +#ifndef XDG_TOPLEVEL_STATE_ENUM +#define XDG_TOPLEVEL_STATE_ENUM +/** + * @ingroup iface_xdg_toplevel + * types of state on the surface + * + * The different state values used on the surface. This is designed for + * state values like maximized, fullscreen. It is paired with the + * configure event to ensure that both the client and the compositor + * setting the state can be synchronized. + * + * States set in this way are double-buffered, see wl_surface.commit. + */ +enum xdg_toplevel_state { + /** + * the surface is maximized + * the surface is maximized + * + * The surface is maximized. The window geometry specified in the + * configure event must be obeyed by the client, or the + * xdg_wm_base.invalid_surface_state error is raised. + * + * The client should draw without shadow or other decoration + * outside of the window geometry. + */ + XDG_TOPLEVEL_STATE_MAXIMIZED = 1, + /** + * the surface is fullscreen + * the surface is fullscreen + * + * The surface is fullscreen. The window geometry specified in + * the configure event is a maximum; the client cannot resize + * beyond it. For a surface to cover the whole fullscreened area, + * the geometry dimensions must be obeyed by the client. For more + * details, see xdg_toplevel.set_fullscreen. + */ + XDG_TOPLEVEL_STATE_FULLSCREEN = 2, + /** + * the surface is being resized + * the surface is being resized + * + * The surface is being resized. The window geometry specified in + * the configure event is a maximum; the client cannot resize + * beyond it. Clients that have aspect ratio or cell sizing + * configuration can use a smaller size, however. + */ + XDG_TOPLEVEL_STATE_RESIZING = 3, + /** + * the surface is now activated + * the surface is now activated + * + * Client window decorations should be painted as if the window + * is active. Do not assume this means that the window actually has + * keyboard or pointer focus. + */ + XDG_TOPLEVEL_STATE_ACTIVATED = 4, + /** + * the surface’s left edge is tiled + * + * The window is currently in a tiled layout and the left edge is + * considered to be adjacent to another part of the tiling grid. + * + * The client should draw without shadow or other decoration + * outside of the window geometry on the left edge. + * @since 2 + */ + XDG_TOPLEVEL_STATE_TILED_LEFT = 5, + /** + * the surface’s right edge is tiled + * + * The window is currently in a tiled layout and the right edge + * is considered to be adjacent to another part of the tiling grid. + * + * The client should draw without shadow or other decoration + * outside of the window geometry on the right edge. + * @since 2 + */ + XDG_TOPLEVEL_STATE_TILED_RIGHT = 6, + /** + * the surface’s top edge is tiled + * + * The window is currently in a tiled layout and the top edge is + * considered to be adjacent to another part of the tiling grid. + * + * The client should draw without shadow or other decoration + * outside of the window geometry on the top edge. + * @since 2 + */ + XDG_TOPLEVEL_STATE_TILED_TOP = 7, + /** + * the surface’s bottom edge is tiled + * + * The window is currently in a tiled layout and the bottom edge + * is considered to be adjacent to another part of the tiling grid. + * + * The client should draw without shadow or other decoration + * outside of the window geometry on the bottom edge. + * @since 2 + */ + XDG_TOPLEVEL_STATE_TILED_BOTTOM = 8, + /** + * surface repaint is suspended + * + * The surface is currently not ordinarily being repainted; for + * example because its content is occluded by another window, or + * its outputs are switched off due to screen locking. + * @since 6 + */ + XDG_TOPLEVEL_STATE_SUSPENDED = 9, + /** + * the surface’s left edge is constrained + * + * The left edge of the window is currently constrained, meaning + * it shouldn't attempt to resize from that edge. It can for + * example mean it's tiled next to a monitor edge on the + * constrained side of the window. + * @since 7 + */ + XDG_TOPLEVEL_STATE_CONSTRAINED_LEFT = 10, + /** + * the surface’s right edge is constrained + * + * The right edge of the window is currently constrained, meaning + * it shouldn't attempt to resize from that edge. It can for + * example mean it's tiled next to a monitor edge on the + * constrained side of the window. + * @since 7 + */ + XDG_TOPLEVEL_STATE_CONSTRAINED_RIGHT = 11, + /** + * the surface’s top edge is constrained + * + * The top edge of the window is currently constrained, meaning + * it shouldn't attempt to resize from that edge. It can for + * example mean it's tiled next to a monitor edge on the + * constrained side of the window. + * @since 7 + */ + XDG_TOPLEVEL_STATE_CONSTRAINED_TOP = 12, + /** + * the surface’s bottom edge is constrained + * + * The bottom edge of the window is currently constrained, + * meaning it shouldn't attempt to resize from that edge. It can + * for example mean it's tiled next to a monitor edge on the + * constrained side of the window. + * @since 7 + */ + XDG_TOPLEVEL_STATE_CONSTRAINED_BOTTOM = 13, +}; +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_STATE_TILED_LEFT_SINCE_VERSION 2 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_STATE_TILED_RIGHT_SINCE_VERSION 2 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_STATE_TILED_TOP_SINCE_VERSION 2 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_STATE_TILED_BOTTOM_SINCE_VERSION 2 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_STATE_SUSPENDED_SINCE_VERSION 6 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_STATE_CONSTRAINED_LEFT_SINCE_VERSION 7 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_STATE_CONSTRAINED_RIGHT_SINCE_VERSION 7 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_STATE_CONSTRAINED_TOP_SINCE_VERSION 7 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_STATE_CONSTRAINED_BOTTOM_SINCE_VERSION 7 +#endif /* XDG_TOPLEVEL_STATE_ENUM */ + +#ifndef XDG_TOPLEVEL_WM_CAPABILITIES_ENUM +#define XDG_TOPLEVEL_WM_CAPABILITIES_ENUM +enum xdg_toplevel_wm_capabilities { + /** + * show_window_menu is available + */ + XDG_TOPLEVEL_WM_CAPABILITIES_WINDOW_MENU = 1, + /** + * set_maximized and unset_maximized are available + */ + XDG_TOPLEVEL_WM_CAPABILITIES_MAXIMIZE = 2, + /** + * set_fullscreen and unset_fullscreen are available + */ + XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN = 3, + /** + * set_minimized is available + */ + XDG_TOPLEVEL_WM_CAPABILITIES_MINIMIZE = 4, +}; +#endif /* XDG_TOPLEVEL_WM_CAPABILITIES_ENUM */ + +/** + * @ingroup iface_xdg_toplevel + * @struct xdg_toplevel_listener + */ +struct xdg_toplevel_listener { + /** + * suggest a surface change + * + * This configure event asks the client to resize its toplevel + * surface or to change its state. The configured state should not + * be applied immediately. See xdg_surface.configure for details. + * + * The width and height arguments specify a hint to the window + * about how its surface should be resized in window geometry + * coordinates. See set_window_geometry. + * + * If the width or height arguments are zero, it means the client + * should decide its own window dimension. This may happen when the + * compositor needs to configure the state of the surface but + * doesn't have any information about any previous or expected + * dimension. + * + * The states listed in the event specify how the width/height + * arguments should be interpreted, and possibly how it should be + * drawn. + * + * Clients must send an ack_configure in response to this event. + * See xdg_surface.configure and xdg_surface.ack_configure for + * details. + */ + void (*configure)(void *data, + struct xdg_toplevel *xdg_toplevel, + int32_t width, + int32_t height, + struct wl_array *states); + /** + * surface wants to be closed + * + * The close event is sent by the compositor when the user wants + * the surface to be closed. This should be equivalent to the user + * clicking the close button in client-side decorations, if your + * application has any. + * + * This is only a request that the user intends to close the + * window. The client may choose to ignore this request, or show a + * dialog to ask the user to save their data, etc. + */ + void (*close)(void *data, + struct xdg_toplevel *xdg_toplevel); + /** + * recommended window geometry bounds + * + * The configure_bounds event may be sent prior to a + * xdg_toplevel.configure event to communicate the bounds a window + * geometry size is recommended to constrain to. + * + * The passed width and height are in surface coordinate space. If + * width and height are 0, it means bounds is unknown and + * equivalent to as if no configure_bounds event was ever sent for + * this surface. + * + * The bounds can for example correspond to the size of a monitor + * excluding any panels or other shell components, so that a + * surface isn't created in a way that it cannot fit. + * + * The bounds may change at any point, and in such a case, a new + * xdg_toplevel.configure_bounds will be sent, followed by + * xdg_toplevel.configure and xdg_surface.configure. + * @since 4 + */ + void (*configure_bounds)(void *data, + struct xdg_toplevel *xdg_toplevel, + int32_t width, + int32_t height); + /** + * compositor capabilities + * + * This event advertises the capabilities supported by the + * compositor. If a capability isn't supported, clients should hide + * or disable the UI elements that expose this functionality. For + * instance, if the compositor doesn't advertise support for + * minimized toplevels, a button triggering the set_minimized + * request should not be displayed. + * + * The compositor will ignore requests it doesn't support. For + * instance, a compositor which doesn't advertise support for + * minimized will ignore set_minimized requests. + * + * Compositors must send this event once before the first + * xdg_surface.configure event. When the capabilities change, + * compositors must send this event again and then send an + * xdg_surface.configure event. + * + * The configured state should not be applied immediately. See + * xdg_surface.configure for details. + * + * The capabilities are sent as an array of 32-bit unsigned + * integers in native endianness. + * @param capabilities array of 32-bit capabilities + * @since 5 + */ + void (*wm_capabilities)(void *data, + struct xdg_toplevel *xdg_toplevel, + struct wl_array *capabilities); +}; + +/** + * @ingroup iface_xdg_toplevel + */ +static inline int +xdg_toplevel_add_listener(struct xdg_toplevel *xdg_toplevel, + const struct xdg_toplevel_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) xdg_toplevel, + (void (**)(void)) listener, data); +} + +#define XDG_TOPLEVEL_DESTROY 0 +#define XDG_TOPLEVEL_SET_PARENT 1 +#define XDG_TOPLEVEL_SET_TITLE 2 +#define XDG_TOPLEVEL_SET_APP_ID 3 +#define XDG_TOPLEVEL_SHOW_WINDOW_MENU 4 +#define XDG_TOPLEVEL_MOVE 5 +#define XDG_TOPLEVEL_RESIZE 6 +#define XDG_TOPLEVEL_SET_MAX_SIZE 7 +#define XDG_TOPLEVEL_SET_MIN_SIZE 8 +#define XDG_TOPLEVEL_SET_MAXIMIZED 9 +#define XDG_TOPLEVEL_UNSET_MAXIMIZED 10 +#define XDG_TOPLEVEL_SET_FULLSCREEN 11 +#define XDG_TOPLEVEL_UNSET_FULLSCREEN 12 +#define XDG_TOPLEVEL_SET_MINIMIZED 13 + +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_CONFIGURE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_CLOSE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_CONFIGURE_BOUNDS_SINCE_VERSION 4 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_WM_CAPABILITIES_SINCE_VERSION 5 + +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_SET_PARENT_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_SET_TITLE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_SET_APP_ID_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_SHOW_WINDOW_MENU_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_MOVE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_RESIZE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_SET_MAX_SIZE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_SET_MIN_SIZE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_SET_MAXIMIZED_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_UNSET_MAXIMIZED_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_SET_FULLSCREEN_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_UNSET_FULLSCREEN_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_toplevel + */ +#define XDG_TOPLEVEL_SET_MINIMIZED_SINCE_VERSION 1 + +/** @ingroup iface_xdg_toplevel */ +static inline void +xdg_toplevel_set_user_data(struct xdg_toplevel *xdg_toplevel, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) xdg_toplevel, user_data); +} + +/** @ingroup iface_xdg_toplevel */ +static inline void * +xdg_toplevel_get_user_data(struct xdg_toplevel *xdg_toplevel) +{ + return wl_proxy_get_user_data((struct wl_proxy *) xdg_toplevel); +} + +static inline uint32_t +xdg_toplevel_get_version(struct xdg_toplevel *xdg_toplevel) +{ + return wl_proxy_get_version((struct wl_proxy *) xdg_toplevel); +} + +/** + * @ingroup iface_xdg_toplevel + * + * This request destroys the role surface and unmaps the surface; + * see "Unmapping" behavior in interface section for details. + */ +static inline void +xdg_toplevel_destroy(struct xdg_toplevel *xdg_toplevel) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), WL_MARSHAL_FLAG_DESTROY); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Set the "parent" of this surface. This surface should be stacked + * above the parent surface and all other ancestor surfaces. + * + * Parent surfaces should be set on dialogs, toolboxes, or other + * "auxiliary" surfaces, so that the parent is raised when the dialog + * is raised. + * + * Setting a null parent for a child surface unsets its parent. Setting + * a null parent for a surface which currently has no parent is a no-op. + * + * Only mapped surfaces can have child surfaces. Setting a parent which + * is not mapped is equivalent to setting a null parent. If a surface + * becomes unmapped, its children's parent is set to the parent of + * the now-unmapped surface. If the now-unmapped surface has no parent, + * its children's parent is unset. If the now-unmapped surface becomes + * mapped again, its parent-child relationship is not restored. + * + * The parent toplevel must not be one of the child toplevel's + * descendants, and the parent must be different from the child toplevel, + * otherwise the invalid_parent protocol error is raised. + */ +static inline void +xdg_toplevel_set_parent(struct xdg_toplevel *xdg_toplevel, struct xdg_toplevel *parent) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_SET_PARENT, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, parent); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Set a short title for the surface. + * + * This string may be used to identify the surface in a task bar, + * window list, or other user interface elements provided by the + * compositor. + * + * The string must be encoded in UTF-8. + */ +static inline void +xdg_toplevel_set_title(struct xdg_toplevel *xdg_toplevel, const char *title) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_SET_TITLE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, title); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Set an application identifier for the surface. + * + * The app ID identifies the general class of applications to which + * the surface belongs. The compositor can use this to group multiple + * surfaces together, or to determine how to launch a new application. + * + * For D-Bus activatable applications, the app ID is used as the D-Bus + * service name. + * + * The compositor shell will try to group application surfaces together + * by their app ID. As a best practice, it is suggested to select app + * ID's that match the basename of the application's .desktop file. + * For example, "org.freedesktop.FooViewer" where the .desktop file is + * "org.freedesktop.FooViewer.desktop". + * + * Like other properties, a set_app_id request can be sent after the + * xdg_toplevel has been mapped to update the property. + * + * See the desktop-entry specification [0] for more details on + * application identifiers and how they relate to well-known D-Bus + * names and .desktop files. + * + * [0] https://standards.freedesktop.org/desktop-entry-spec/ + */ +static inline void +xdg_toplevel_set_app_id(struct xdg_toplevel *xdg_toplevel, const char *app_id) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_SET_APP_ID, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, app_id); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Clients implementing client-side decorations might want to show + * a context menu when right-clicking on the decorations, giving the + * user a menu that they can use to maximize or minimize the window. + * + * This request asks the compositor to pop up such a window menu at + * the given position, relative to the local surface coordinates of + * the parent surface. There are no guarantees as to what menu items + * the window menu contains, or even if a window menu will be drawn + * at all. + * + * This request must be used in response to some sort of user action + * like a button press, key press, or touch down event. + */ +static inline void +xdg_toplevel_show_window_menu(struct xdg_toplevel *xdg_toplevel, struct wl_seat *seat, uint32_t serial, int32_t x, int32_t y) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_SHOW_WINDOW_MENU, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, seat, serial, x, y); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Start an interactive, user-driven move of the surface. + * + * This request must be used in response to some sort of user action + * like a button press, key press, or touch down event. The passed + * serial is used to determine the type of interactive move (touch, + * pointer, etc). + * + * The server may ignore move requests depending on the state of + * the surface (e.g. fullscreen or maximized), or if the passed serial + * is no longer valid. + * + * If triggered, the surface will lose the focus of the device + * (wl_pointer, wl_touch, etc) used for the move. It is up to the + * compositor to visually indicate that the move is taking place, such as + * updating a pointer cursor, during the move. There is no guarantee + * that the device focus will return when the move is completed. + */ +static inline void +xdg_toplevel_move(struct xdg_toplevel *xdg_toplevel, struct wl_seat *seat, uint32_t serial) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_MOVE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, seat, serial); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Start a user-driven, interactive resize of the surface. + * + * This request must be used in response to some sort of user action + * like a button press, key press, or touch down event. The passed + * serial is used to determine the type of interactive resize (touch, + * pointer, etc). + * + * The server may ignore resize requests depending on the state of + * the surface (e.g. fullscreen or maximized). + * + * If triggered, the client will receive configure events with the + * "resize" state enum value and the expected sizes. See the "resize" + * enum value for more details about what is required. The client + * must also acknowledge configure events using "ack_configure". After + * the resize is completed, the client will receive another "configure" + * event without the resize state. + * + * If triggered, the surface also will lose the focus of the device + * (wl_pointer, wl_touch, etc) used for the resize. It is up to the + * compositor to visually indicate that the resize is taking place, + * such as updating a pointer cursor, during the resize. There is no + * guarantee that the device focus will return when the resize is + * completed. + * + * The edges parameter specifies how the surface should be resized, and + * is one of the values of the resize_edge enum. Values not matching + * a variant of the enum will cause the invalid_resize_edge protocol error. + * The compositor may use this information to update the surface position + * for example when dragging the top left corner. The compositor may also + * use this information to adapt its behavior, e.g. choose an appropriate + * cursor image. + */ +static inline void +xdg_toplevel_resize(struct xdg_toplevel *xdg_toplevel, struct wl_seat *seat, uint32_t serial, uint32_t edges) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_RESIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, seat, serial, edges); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Set a maximum size for the window. + * + * The client can specify a maximum size so that the compositor does + * not try to configure the window beyond this size. + * + * The width and height arguments are in window geometry coordinates. + * See xdg_surface.set_window_geometry. + * + * Values set in this way are double-buffered, see wl_surface.commit. + * + * The compositor can use this information to allow or disallow + * different states like maximize or fullscreen and draw accurate + * animations. + * + * Similarly, a tiling window manager may use this information to + * place and resize client windows in a more effective way. + * + * The client should not rely on the compositor to obey the maximum + * size. The compositor may decide to ignore the values set by the + * client and request a larger size. + * + * If never set, or a value of zero in the request, means that the + * client has no expected maximum size in the given dimension. + * As a result, a client wishing to reset the maximum size + * to an unspecified state can use zero for width and height in the + * request. + * + * Requesting a maximum size to be smaller than the minimum size of + * a surface is illegal and will result in an invalid_size error. + * + * The width and height must be greater than or equal to zero. Using + * strictly negative values for width or height will result in a + * invalid_size error. + */ +static inline void +xdg_toplevel_set_max_size(struct xdg_toplevel *xdg_toplevel, int32_t width, int32_t height) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_SET_MAX_SIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, width, height); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Set a minimum size for the window. + * + * The client can specify a minimum size so that the compositor does + * not try to configure the window below this size. + * + * The width and height arguments are in window geometry coordinates. + * See xdg_surface.set_window_geometry. + * + * Values set in this way are double-buffered, see wl_surface.commit. + * + * The compositor can use this information to allow or disallow + * different states like maximize or fullscreen and draw accurate + * animations. + * + * Similarly, a tiling window manager may use this information to + * place and resize client windows in a more effective way. + * + * The client should not rely on the compositor to obey the minimum + * size. The compositor may decide to ignore the values set by the + * client and request a smaller size. + * + * If never set, or a value of zero in the request, means that the + * client has no expected minimum size in the given dimension. + * As a result, a client wishing to reset the minimum size + * to an unspecified state can use zero for width and height in the + * request. + * + * Requesting a minimum size to be larger than the maximum size of + * a surface is illegal and will result in an invalid_size error. + * + * The width and height must be greater than or equal to zero. Using + * strictly negative values for width and height will result in a + * invalid_size error. + */ +static inline void +xdg_toplevel_set_min_size(struct xdg_toplevel *xdg_toplevel, int32_t width, int32_t height) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_SET_MIN_SIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, width, height); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Maximize the surface. + * + * After requesting that the surface should be maximized, the compositor + * will respond by emitting a configure event. Whether this configure + * actually sets the window maximized is subject to compositor policies. + * The client must then update its content, drawing in the configured + * state. The client must also acknowledge the configure when committing + * the new content (see ack_configure). + * + * It is up to the compositor to decide how and where to maximize the + * surface, for example which output and what region of the screen should + * be used. + * + * If the surface was already maximized, the compositor will still emit + * a configure event with the "maximized" state. + * + * If the surface is in a fullscreen state, this request has no direct + * effect. It may alter the state the surface is returned to when + * unmaximized unless overridden by the compositor. + */ +static inline void +xdg_toplevel_set_maximized(struct xdg_toplevel *xdg_toplevel) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_SET_MAXIMIZED, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Unmaximize the surface. + * + * After requesting that the surface should be unmaximized, the compositor + * will respond by emitting a configure event. Whether this actually + * un-maximizes the window is subject to compositor policies. + * If available and applicable, the compositor will include the window + * geometry dimensions the window had prior to being maximized in the + * configure event. The client must then update its content, drawing it in + * the configured state. The client must also acknowledge the configure + * when committing the new content (see ack_configure). + * + * It is up to the compositor to position the surface after it was + * unmaximized; usually the position the surface had before maximizing, if + * applicable. + * + * If the surface was already not maximized, the compositor will still + * emit a configure event without the "maximized" state. + * + * If the surface is in a fullscreen state, this request has no direct + * effect. It may alter the state the surface is returned to when + * unmaximized unless overridden by the compositor. + */ +static inline void +xdg_toplevel_unset_maximized(struct xdg_toplevel *xdg_toplevel) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_UNSET_MAXIMIZED, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Make the surface fullscreen. + * + * After requesting that the surface should be fullscreened, the + * compositor will respond by emitting a configure event. Whether the + * client is actually put into a fullscreen state is subject to compositor + * policies. The client must also acknowledge the configure when + * committing the new content (see ack_configure). + * + * The output passed by the request indicates the client's preference as + * to which display it should be set fullscreen on. If this value is NULL, + * it's up to the compositor to choose which display will be used to map + * this surface. + * + * If the surface doesn't cover the whole output, the compositor will + * position the surface in the center of the output and compensate with + * with border fill covering the rest of the output. The content of the + * border fill is undefined, but should be assumed to be in some way that + * attempts to blend into the surrounding area (e.g. solid black). + * + * If the fullscreened surface is not opaque, the compositor must make + * sure that other screen content not part of the same surface tree (made + * up of subsurfaces, popups or similarly coupled surfaces) are not + * visible below the fullscreened surface. + */ +static inline void +xdg_toplevel_set_fullscreen(struct xdg_toplevel *xdg_toplevel, struct wl_output *output) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_SET_FULLSCREEN, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0, output); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Make the surface no longer fullscreen. + * + * After requesting that the surface should be unfullscreened, the + * compositor will respond by emitting a configure event. + * Whether this actually removes the fullscreen state of the client is + * subject to compositor policies. + * + * Making a surface unfullscreen sets states for the surface based on the following: + * * the state(s) it may have had before becoming fullscreen + * * any state(s) decided by the compositor + * * any state(s) requested by the client while the surface was fullscreen + * + * The compositor may include the previous window geometry dimensions in + * the configure event, if applicable. + * + * The client must also acknowledge the configure when committing the new + * content (see ack_configure). + */ +static inline void +xdg_toplevel_unset_fullscreen(struct xdg_toplevel *xdg_toplevel) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_UNSET_FULLSCREEN, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0); +} + +/** + * @ingroup iface_xdg_toplevel + * + * Request that the compositor minimize your surface. There is no + * way to know if the surface is currently minimized, nor is there + * any way to unset minimization on this surface. + * + * If you are looking to throttle redrawing when minimized, please + * instead use the wl_surface.frame event for this, as this will + * also work with live previews on windows in Alt-Tab, Expose or + * similar compositor features. + */ +static inline void +xdg_toplevel_set_minimized(struct xdg_toplevel *xdg_toplevel) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_toplevel, + XDG_TOPLEVEL_SET_MINIMIZED, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_toplevel), 0); +} + +#ifndef XDG_POPUP_ERROR_ENUM +#define XDG_POPUP_ERROR_ENUM +enum xdg_popup_error { + /** + * tried to grab after being mapped + */ + XDG_POPUP_ERROR_INVALID_GRAB = 0, +}; +#endif /* XDG_POPUP_ERROR_ENUM */ + +/** + * @ingroup iface_xdg_popup + * @struct xdg_popup_listener + */ +struct xdg_popup_listener { + /** + * configure the popup surface + * + * This event asks the popup surface to configure itself given + * the configuration. The configured state should not be applied + * immediately. See xdg_surface.configure for details. + * + * The x and y arguments represent the position the popup was + * placed at given the xdg_positioner rule, relative to the upper + * left corner of the window geometry of the parent surface. + * + * For version 2 or older, the configure event for an xdg_popup is + * only ever sent once for the initial configuration. Starting with + * version 3, it may be sent again if the popup is setup with an + * xdg_positioner with set_reactive requested, or in response to + * xdg_popup.reposition requests. + * @param x x position relative to parent surface window geometry + * @param y y position relative to parent surface window geometry + * @param width window geometry width + * @param height window geometry height + */ + void (*configure)(void *data, + struct xdg_popup *xdg_popup, + int32_t x, + int32_t y, + int32_t width, + int32_t height); + /** + * popup interaction is done + * + * The popup_done event is sent out when a popup is dismissed by + * the compositor. The client should destroy the xdg_popup object + * at this point. + */ + void (*popup_done)(void *data, + struct xdg_popup *xdg_popup); + /** + * signal the completion of a repositioned request + * + * The repositioned event is sent as part of a popup + * configuration sequence, together with xdg_popup.configure and + * lastly xdg_surface.configure to notify the completion of a + * reposition request. + * + * The repositioned event is to notify about the completion of a + * xdg_popup.reposition request. The token argument is the token + * passed in the xdg_popup.reposition request. + * + * Immediately after this event is emitted, xdg_popup.configure and + * xdg_surface.configure will be sent with the updated size and + * position, as well as a new configure serial. + * + * The client should optionally update the content of the popup, + * but must acknowledge the new popup configuration for the new + * position to take effect. See xdg_surface.ack_configure for + * details. + * @param token reposition request token + * @since 3 + */ + void (*repositioned)(void *data, + struct xdg_popup *xdg_popup, + uint32_t token); +}; + +/** + * @ingroup iface_xdg_popup + */ +static inline int +xdg_popup_add_listener(struct xdg_popup *xdg_popup, + const struct xdg_popup_listener *listener, void *data) +{ + return wl_proxy_add_listener((struct wl_proxy *) xdg_popup, + (void (**)(void)) listener, data); +} + +#define XDG_POPUP_DESTROY 0 +#define XDG_POPUP_GRAB 1 +#define XDG_POPUP_REPOSITION 2 + +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_CONFIGURE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_POPUP_DONE_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_REPOSITIONED_SINCE_VERSION 3 + +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_GRAB_SINCE_VERSION 1 +/** + * @ingroup iface_xdg_popup + */ +#define XDG_POPUP_REPOSITION_SINCE_VERSION 3 + +/** @ingroup iface_xdg_popup */ +static inline void +xdg_popup_set_user_data(struct xdg_popup *xdg_popup, void *user_data) +{ + wl_proxy_set_user_data((struct wl_proxy *) xdg_popup, user_data); +} + +/** @ingroup iface_xdg_popup */ +static inline void * +xdg_popup_get_user_data(struct xdg_popup *xdg_popup) +{ + return wl_proxy_get_user_data((struct wl_proxy *) xdg_popup); +} + +static inline uint32_t +xdg_popup_get_version(struct xdg_popup *xdg_popup) +{ + return wl_proxy_get_version((struct wl_proxy *) xdg_popup); +} + +/** + * @ingroup iface_xdg_popup + * + * This destroys the popup. Explicitly destroying the xdg_popup + * object will also dismiss the popup, and unmap the surface. + * + * If this xdg_popup is not the "topmost" popup, the + * xdg_wm_base.not_the_topmost_popup protocol error will be sent. + */ +static inline void +xdg_popup_destroy(struct xdg_popup *xdg_popup) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_popup, + XDG_POPUP_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_popup), WL_MARSHAL_FLAG_DESTROY); +} + +/** + * @ingroup iface_xdg_popup + * + * This request makes the created popup take an explicit grab. An explicit + * grab will be dismissed when the user dismisses the popup, or when the + * client destroys the xdg_popup. This can be done by the user clicking + * outside the surface, using the keyboard, or even locking the screen + * through closing the lid or a timeout. + * + * If the compositor denies the grab, the popup will be immediately + * dismissed. + * + * This request must be used in response to some sort of user action like a + * button press, key press, or touch down event. The serial number of the + * event should be passed as 'serial'. + * + * The parent of a grabbing popup must either be an xdg_toplevel surface or + * another xdg_popup with an explicit grab. If the parent is another + * xdg_popup it means that the popups are nested, with this popup now being + * the topmost popup. + * + * Nested popups must be destroyed in the reverse order they were created + * in, e.g. the only popup you are allowed to destroy at all times is the + * topmost one. + * + * When compositors choose to dismiss a popup, they may dismiss every + * nested grabbing popup as well. When a compositor dismisses popups, it + * will follow the same dismissing order as required from the client. + * + * If the topmost grabbing popup is destroyed, the grab will be returned to + * the parent of the popup, if that parent previously had an explicit grab. + * + * If the parent is a grabbing popup which has already been dismissed, this + * popup will be immediately dismissed. If the parent is a popup that did + * not take an explicit grab, an error will be raised. + * + * During a popup grab, the client owning the grab will receive pointer + * and touch events for all their surfaces as normal (similar to an + * "owner-events" grab in X11 parlance), while the top most grabbing popup + * will always have keyboard focus. + */ +static inline void +xdg_popup_grab(struct xdg_popup *xdg_popup, struct wl_seat *seat, uint32_t serial) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_popup, + XDG_POPUP_GRAB, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_popup), 0, seat, serial); +} + +/** + * @ingroup iface_xdg_popup + * + * Reposition an already-mapped popup. The popup will be placed given the + * details in the passed xdg_positioner object, and a + * xdg_popup.repositioned followed by xdg_popup.configure and + * xdg_surface.configure will be emitted in response. Any parameters set + * by the previous positioner will be discarded. + * + * The passed token will be sent in the corresponding + * xdg_popup.repositioned event. The new popup position will not take + * effect until the corresponding configure event is acknowledged by the + * client. See xdg_popup.repositioned for details. The token itself is + * opaque, and has no other special meaning. + * + * If multiple reposition requests are sent, the compositor may skip all + * but the last one. + * + * If the popup is repositioned in response to a configure event for its + * parent, the client should send an xdg_positioner.set_parent_configure + * and possibly an xdg_positioner.set_parent_size request to allow the + * compositor to properly constrain the popup. + * + * If the popup is repositioned together with a parent that is being + * resized, but not in response to a configure event, the client should + * send an xdg_positioner.set_parent_size request. + */ +static inline void +xdg_popup_reposition(struct xdg_popup *xdg_popup, struct xdg_positioner *positioner, uint32_t token) +{ + wl_proxy_marshal_flags((struct wl_proxy *) xdg_popup, + XDG_POPUP_REPOSITION, NULL, wl_proxy_get_version((struct wl_proxy *) xdg_popup), 0, positioner, token); +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/xdg-shell-protocol.c b/xdg-shell-protocol.c new file mode 100644 index 0000000..5a50433 --- /dev/null +++ b/xdg-shell-protocol.c @@ -0,0 +1,184 @@ +/* Generated by wayland-scanner 1.24.0 */ + +/* + * Copyright © 2008-2013 Kristian Høgsberg + * Copyright © 2013 Rafael Antognolli + * Copyright © 2013 Jasper St. Pierre + * Copyright © 2010-2013 Intel Corporation + * Copyright © 2015-2017 Samsung Electronics Co., Ltd + * Copyright © 2015-2017 Red Hat Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include +#include +#include +#include "wayland-util.h" + +#ifndef __has_attribute +# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ +#endif + +#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4) +#define WL_PRIVATE __attribute__ ((visibility("hidden"))) +#else +#define WL_PRIVATE +#endif + +extern const struct wl_interface wl_output_interface; +extern const struct wl_interface wl_seat_interface; +extern const struct wl_interface wl_surface_interface; +extern const struct wl_interface xdg_popup_interface; +extern const struct wl_interface xdg_positioner_interface; +extern const struct wl_interface xdg_surface_interface; +extern const struct wl_interface xdg_toplevel_interface; + +static const struct wl_interface *xdg_shell_types[] = { + NULL, + NULL, + NULL, + NULL, + &xdg_positioner_interface, + &xdg_surface_interface, + &wl_surface_interface, + &xdg_toplevel_interface, + &xdg_popup_interface, + &xdg_surface_interface, + &xdg_positioner_interface, + &xdg_toplevel_interface, + &wl_seat_interface, + NULL, + NULL, + NULL, + &wl_seat_interface, + NULL, + &wl_seat_interface, + NULL, + NULL, + &wl_output_interface, + &wl_seat_interface, + NULL, + &xdg_positioner_interface, + NULL, +}; + +static const struct wl_message xdg_wm_base_requests[] = { + { "destroy", "", xdg_shell_types + 0 }, + { "create_positioner", "n", xdg_shell_types + 4 }, + { "get_xdg_surface", "no", xdg_shell_types + 5 }, + { "pong", "u", xdg_shell_types + 0 }, +}; + +static const struct wl_message xdg_wm_base_events[] = { + { "ping", "u", xdg_shell_types + 0 }, +}; + +WL_PRIVATE const struct wl_interface xdg_wm_base_interface = { + "xdg_wm_base", 7, + 4, xdg_wm_base_requests, + 1, xdg_wm_base_events, +}; + +static const struct wl_message xdg_positioner_requests[] = { + { "destroy", "", xdg_shell_types + 0 }, + { "set_size", "ii", xdg_shell_types + 0 }, + { "set_anchor_rect", "iiii", xdg_shell_types + 0 }, + { "set_anchor", "u", xdg_shell_types + 0 }, + { "set_gravity", "u", xdg_shell_types + 0 }, + { "set_constraint_adjustment", "u", xdg_shell_types + 0 }, + { "set_offset", "ii", xdg_shell_types + 0 }, + { "set_reactive", "3", xdg_shell_types + 0 }, + { "set_parent_size", "3ii", xdg_shell_types + 0 }, + { "set_parent_configure", "3u", xdg_shell_types + 0 }, +}; + +WL_PRIVATE const struct wl_interface xdg_positioner_interface = { + "xdg_positioner", 7, + 10, xdg_positioner_requests, + 0, NULL, +}; + +static const struct wl_message xdg_surface_requests[] = { + { "destroy", "", xdg_shell_types + 0 }, + { "get_toplevel", "n", xdg_shell_types + 7 }, + { "get_popup", "n?oo", xdg_shell_types + 8 }, + { "set_window_geometry", "iiii", xdg_shell_types + 0 }, + { "ack_configure", "u", xdg_shell_types + 0 }, +}; + +static const struct wl_message xdg_surface_events[] = { + { "configure", "u", xdg_shell_types + 0 }, +}; + +WL_PRIVATE const struct wl_interface xdg_surface_interface = { + "xdg_surface", 7, + 5, xdg_surface_requests, + 1, xdg_surface_events, +}; + +static const struct wl_message xdg_toplevel_requests[] = { + { "destroy", "", xdg_shell_types + 0 }, + { "set_parent", "?o", xdg_shell_types + 11 }, + { "set_title", "s", xdg_shell_types + 0 }, + { "set_app_id", "s", xdg_shell_types + 0 }, + { "show_window_menu", "ouii", xdg_shell_types + 12 }, + { "move", "ou", xdg_shell_types + 16 }, + { "resize", "ouu", xdg_shell_types + 18 }, + { "set_max_size", "ii", xdg_shell_types + 0 }, + { "set_min_size", "ii", xdg_shell_types + 0 }, + { "set_maximized", "", xdg_shell_types + 0 }, + { "unset_maximized", "", xdg_shell_types + 0 }, + { "set_fullscreen", "?o", xdg_shell_types + 21 }, + { "unset_fullscreen", "", xdg_shell_types + 0 }, + { "set_minimized", "", xdg_shell_types + 0 }, +}; + +static const struct wl_message xdg_toplevel_events[] = { + { "configure", "iia", xdg_shell_types + 0 }, + { "close", "", xdg_shell_types + 0 }, + { "configure_bounds", "4ii", xdg_shell_types + 0 }, + { "wm_capabilities", "5a", xdg_shell_types + 0 }, +}; + +WL_PRIVATE const struct wl_interface xdg_toplevel_interface = { + "xdg_toplevel", 7, + 14, xdg_toplevel_requests, + 4, xdg_toplevel_events, +}; + +static const struct wl_message xdg_popup_requests[] = { + { "destroy", "", xdg_shell_types + 0 }, + { "grab", "ou", xdg_shell_types + 22 }, + { "reposition", "3ou", xdg_shell_types + 24 }, +}; + +static const struct wl_message xdg_popup_events[] = { + { "configure", "iiii", xdg_shell_types + 0 }, + { "popup_done", "", xdg_shell_types + 0 }, + { "repositioned", "3u", xdg_shell_types + 0 }, +}; + +WL_PRIVATE const struct wl_interface xdg_popup_interface = { + "xdg_popup", 7, + 3, xdg_popup_requests, + 3, xdg_popup_events, +}; + diff --git a/xdg-shell-protocol.o b/xdg-shell-protocol.o new file mode 100644 index 0000000000000000000000000000000000000000..341c4301fc77d8f72b91e44d4855c844a9d27ae7 GIT binary patch literal 8408 zcmeI1PlzN}9mn77#&t~mGl?b)Xt2G+2{_Hnu4|U8n1&@uqq0oEz(A1hn(mtE((bBC zchzoB1Z@z^UX<}RZVy^J(I|E! z2^}SG#V$#_9i^RKHf#;!P9bOk`u4qHbSo+Lz1_)DNg_(pq7`+&Q;v#3oEE+%+uapm zZ%TTdBDod2E8fkcp#)X8yrS~TL~b|PD~A$V`W$IY7*Ubs{rFbg_ruGxyv$wtQkHqy z+ezBZZnyU0Y!Da2eHV4U+nVdmEuIw&y}Gq~sZuGDqAye86{9?FC0#e_iL9#2@Jg4J zlJy{y0cE8d#(wUyvh;lh(YP8Jqz6e#PBcyiGR<9AroM6J!`m(U{gEtWoN6-xmD1ix z61h%4lZBg&skM`pX?NtlEP2VQcA`AmN&50I#3Oe#@)J3qxnZ;;N!!G_D>4Q@ldY~i zI@BVGVydcH{(t(&d{mNoj1oF;51{4`&0q#Fe~$<3{p4bNAE5z#_4HpDVOK=KlN-ss5#0T-d>@=4Yf@B7UEGU38boo0}K?Xy-nx=j2)<-UgI% zT`ur894V_+s{qC0ltite^2>Dx#|2w`HAu^ouHp7Z|Eep#YcHhF5LG- zdDBzpey6;lo0#$63xD#0fA8;{WW z_9OV4sx#4>nhuT=>!V)W@2}^>tjIc9zuxg@3=dnyelF(~I+@B5^vzNZxrQBGfI)w32EUb6yP*9&}I;~H99KBn6wj(F4E3iws^dA)dC z?I8XI^?Ly~ot!x9Oo$_&ud07QoX>qn0dK26B@P`c_tda?URM7;an9!fap>55odoFdG`*Bn};%e^9mp-mS3PCa$J$X%mOe z=T)Z{aC>fZ;;b_v4xM$?xf5{HIUvqDN5r9na~jGqalh}WKMlC$aY7tARvrf2*8P;Y zn!d{!ap>I8eC$gHT=1L9m-Pz>Ty(Yn6D!0K|C+|H2K)`>HR7Dl8gc00T#B+0aMQU) zoOK$+p=0|+GvNEGzeOB6ZMjgki9_f68s85150&?bLuVovN=_U)KhpSdz<;cKLL55w zfAJ1+==@aU4+3uc=OJ;PpCjVXc~^Dr2HbRxiL=go#G&&G)tLs|p2K^@S?4}+==@rB z9t7NUPKdM4L*mf+t?HZx+@9w%;?TJ(moMln1>IpjP@Uy~TRtnqIiFSHF#o7JwSb$> z8gbTX5Qk~|Pcz_uRsAjEtg}rV=HE2F9dOI1N1SzX;xL!AaUAfcluwAW&K=?~pV7vH zfIp}FkT~lc5r_G_HXaklzH0mCG~f;OPl&52y_|a(aGRe~;+)SJahPARM!&hwpDWup zmWd;0?~NqZ+7_+QfMX;#E_c?-8bD&z+(SNVHs zS(jHRc|4S#;r{1>^BLCoQlQibd~@~VZ?5}-SYWy>&Uj;HEgE6}FG@4k{=en}--=b)j!Rn1RSmVN*DxVVV3=X6yAuS<>l^D~B~6&+|lXb8vO)c)c4 zCkpP_^9E5VHUD@1=Z2W)<$tIz!OwIY$RF>9!~EY6hMYF!;?mR?5T9cxw&ibiml%h3 z?F9zIb7JxR5_tvFzG+McbkFU(-fR1K!(Me_KCx^+O`pJD=iat~ XR_<*4>iTzL=k-6(iF?}uAJPAxi0)J= literal 0 HcmV?d00001