From ee2c66f97bac88474ebebaed154cd7a19a6a1e45 Mon Sep 17 00:00:00 2001 From: Annika Date: Mon, 20 Jul 2026 14:31:28 -0700 Subject: [PATCH] implemented H and V GradientShaders --- STYLEGUIDE.md | 127 ++++++++++++++++++++++++++++ example | Bin 37056 -> 37000 bytes example.cpp | 5 +- shader.cpp | 70 --------------- shaders/hgradientshader.cpp | 13 +-- shaders/shaders.h | 4 +- shaders/vgradientshader.cpp | 13 +-- uwugl.h | 2 +- waymini/libwaymini.a | Bin 22878 -> 23038 bytes waymini/waymini.o | Bin 13776 -> 13936 bytes waymini/xdg-shell-client-protocol.o | Bin 8448 -> 8448 bytes 11 files changed, 147 insertions(+), 87 deletions(-) create mode 100644 STYLEGUIDE.md delete mode 100644 shader.cpp diff --git a/STYLEGUIDE.md b/STYLEGUIDE.md new file mode 100644 index 0000000..43f0e53 --- /dev/null +++ b/STYLEGUIDE.md @@ -0,0 +1,127 @@ +# UwUGL Styleguide + +This document describes the coding conventions used in UwUGL, inferred from the existing codebase. It prioritizes readability and simplicity for a small graphics library. + +--- + +## 1. File Organization + +- **Single monolithic header**: `uwugl.h` is the public entry point and includes all implementation files. +- **Header-like `.cpp` files**: Every implementation file begins with `#pragma once` and is designed to be `#include`d directly by `uwugl.h` (or by other `.cpp` files). There are no traditional separate `.h`/`.cpp` pairs. +- **No separate headers for internal modules**: Classes and structs are declared and defined directly in `.cpp` files. +- **Exception**: `shaders/shaders.h` is a small aggregator file that includes the shader `.cpp` files. +- **Directory layout**: + - `primatives/` — shape classes (`Line`, `Point`, `Rectangle`, `Trapezoid`, `Triangle`) + - `shaders/` — shader classes and base + - `waymini/` — external Wayland helper library (C) + +## 2. Naming Conventions + +- **Namespace**: All library code lives in `namespace UwU`. +- **Classes / structs**: PascalCase (`Buffer`, `ColorShader`, `Rectangle`, `Helpers`). +- **Functions / methods**: camelCase (`drawPixel`, `lerpColor`, `bresenham`, `shouldClose`). +- **Member variables**: lowercase with no prefix (`pixels`, `width`, `x0`, `c`). +- **Template parameters**: PascalCase ending in `T` (`ShaderT`). +- **Enums**: PascalCase type name; UPPER_SNAKE_CASE values (`ShaderType`, `COLOR`, `HGRADIENT`, `VGRADIENT`). +- **Constants in code**: prefer lowercase; UPPER_SNAKE_CASE may be used for local compile-time-ish constants in comments or test code. +- **Filenames**: lowercase and descriptive (`buffer.cpp`, `colorshader.cpp`, `line.cpp`). + +## 3. Formatting + +- **Indentation**: 2 spaces. +- **Brace style**: K&R — opening brace on the same line as the class/function/control statement. +- **Pointer/reference syntax**: attach `*` and `&` to the variable name: + - `uint8_t* pixels` + - `ShaderBase& shader` +- **Empty parameter lists**: use `()` for default constructors, e.g., `Color() {}`. +- **Spacing around operators**: use spaces around binary operators for readability (`x + y` instead of `x+y`). +- **Explicit `return;` at end of void functions**: Acceptable, but not required. +- **Comments**: use `//` for both inline and block-style comments. Keep them informal and focused on intent or known issues. + +## 4. Includes + +Include order within a file: + +1. `#pragma once` +2. C/C++ standard headers (``, ``, ``) +3. Project implementation files via relative paths (`"../datatypes.cpp"`, `"../buffer.cpp"`) + +External C library headers (e.g., `"waymini/waymini.h"`) are included where needed. + +## 5. Code Patterns + +- **Composition over inheritance**: primitives hold data; shaders are passed into `draw()`. +- **CRTP for shaders**: `ShaderBase` uses the Curiously Recurring Template Pattern for static polymorphism. +- **Template `draw` methods**: every primitive's `draw()` is templated on `ShaderT` and takes `(Buffer buffer, ShaderBase& shader)`. +- **Manual memory management**: `new uint8_t[...]` in `Buffer`; no smart pointers. +- **C-style casts**: `(uint16_t)x`, `(uint8_t*)ptr`. +- **Bounds checks**: primitives guard `draw()` with `if (x > buffer.width || y > buffer.height) {return;};`. +- **Unused parameter suppression**: use `(void)param;` to silence warnings. + +## 6. C++ Feature Usage + +### Used + +- Classes and structs +- Namespaces +- Templates (`template `) +- CRTP (Curiously Recurring Template Pattern) +- Function overloading (constructors) +- References +- C-style casts +- `new` / `new[]` for dynamic allocation +- Raw pointers +- Stack-allocated arrays +- C standard headers (``, ``, ``, ``, ``, ``) + +### Not Used but Allowed +- Smart pointers (`std::unique_ptr`, `std::shared_ptr`) +- Standard containers (`std::vector`, `std::array`, etc.) +- `enum class` +- Exceptions +- `std::string` +- `std::chrono` +- `std::function` + +### Not Used + +The following features are intentionally not used. This keeps the codebase small, predictable, and easy to reason about. + +- `auto` +- Range-based `for` loops +- `nullptr` +- Lambda expressions +- `constexpr` / `consteval` +- `using` type aliases +- Move semantics / rvalue references +- Default member initializers +- Delegating constructors +- `override` / `final` +- Named casts (`static_cast`, `reinterpret_cast`, etc.) +- Structured bindings +- Concepts / `requires` (C++20) +- Virtual functions / runtime polymorphism / abstract base classes +- Operator overloading +- RTTI / `dynamic_cast` / `typeid` +- `` (use C-style `printf`/`fflush`) + +## 7. Build System + +- **Makefile-based**. +- C library (`waymini`) compiled with `gcc`. +- Main example compiled with `g++`. +- Flags: `-Wall -Wextra -O3`, plus Wayland client flags from `pkg-config`. + +## 8. Known Inconsistencies and Recommendations + +The codebase currently has a few inconsistencies. The following recommendations aim to improve readability without adding complexity: + +- **Indentation consistency**: some blocks are not aligned (e.g., `line.cpp` inner loop). Keep all indentation strictly at 2 spaces per level. +- **Spacing consistency**: standardize on spaces around binary operators and after commas. +- **Include consistency**: some primitives include `../shaders/shaders.h` while `rectangle.cpp` also includes `../shaders/shaderbase.cpp` directly. Prefer the aggregator `shaders.h` everywhere. +- **`return;` at end of void functions**: acceptable, but can be omitted when it adds no clarity. +- **Bounds check style**: the pattern `if (...) {return;};` has a redundant semicolon. Prefer `if (...) { return; }`. + +--- + +This guide should evolve with the project. When in doubt, favor simplicity and consistency with the existing code. diff --git a/example b/example index 30c8e65d2a639e29837a6bd7ec4f3e2285ab9a32..01d258c51ae34186f9105e5ba54c097257929756 100755 GIT binary patch delta 10143 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 diff --git a/example.cpp b/example.cpp index 1fb0291..b3373d5 100644 --- a/example.cpp +++ b/example.cpp @@ -38,9 +38,10 @@ int main(void) { UwU::Surface surface = UwU::Surface(w, h, onKey); - UwU::ColorShader fuchsia = UwU::ColorShader(UwU::Color(0xb00b69ff)); + // UwU::ColorShader fuchsia = UwU::ColorShader(UwU::Color(0xb00b69ff)); + UwU::VGradientShader bisexual = UwU::VGradientShader(69, 420, UwU::Color(0xff0000ff), UwU::Color(0x0000ffff)); UwU::Rectangle rectangle = UwU::Rectangle(69, 69, 420, 420); - rectangle.draw(surface.buffer, fuchsia); + rectangle.draw(surface.buffer, bisexual); UwU::ColorShader green = UwU::ColorShader(UwU::Color(0x00ff00ff)); UwU::Point point = UwU::Point(187, 37); diff --git a/shader.cpp b/shader.cpp deleted file mode 100644 index c99036b..0000000 --- a/shader.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#pragma once - -#include - -#include "datatypes.cpp" -#include "helpers.cpp" -#include "buffer.cpp" - -namespace UwU { - // shader prototype - class Shader { - public: - //COLOR Shader - Shader(Color color) { - this->shaderType = COLOR; - this->c0 = color; - } - - //HGRADIENT or VGRADIENT shader - Shader(Direction direction, uint16_t uv0, uint16_t uv1, Color c0, Color c1) { - this->c0 = c0; - this->c1 = c1; - switch (direction) { - case H: - shaderType = HGRADIENT; - this->u0 = uv0; - this->scale = 0xffffffff / (1 + (uint32_t)uv1 - (uint32_t)uv0); - break; - case V: - shaderType = VGRADIENT; - this->v0 = uv0; - this->scale = 0xffffffff / (1 + (uint32_t)uv1 - (uint32_t)uv0); - break; - } - } - - // BUFFER shader - Shader(uint16_t u, uint16_t v, Buffer buffer) { - this->shaderType = BUFFER; - this->u0 = u; - this->v0 = v; - this->buffer = buffer; - } - - ShaderType shaderType; - uint16_t u0; - uint16_t v0; - Color c0; - Color c1; - uint32_t scale; - Buffer buffer; - }; - - class ShaderMethods { - public: - static Color gradient(uint16_t uv0, uint32_t scale, Color c0, Color c1, uint16_t xy) { - uint32_t t = (((uint32_t)xy - (uint32_t)uv0) * scale) / 0x01000000; - return Helpers::lerpColor(c0, c1, (uint8_t)t); - } - - static Color buffer(uint16_t u0, uint16_t v0, Buffer buffer, uint16_t x, uint16_t y) { - size_t i = ((size_t)y - (size_t)v0) * buffer.stride + ((size_t)x - (size_t)u0) * 4; - uint8_t b = buffer.pixels[i + 0]; - uint8_t g = buffer.pixels[i + 1]; - uint8_t r = buffer.pixels[i + 2]; - uint8_t a = buffer.pixels[i + 3]; - return Color(r, g, b, a); - } - }; -} \ No newline at end of file diff --git a/shaders/hgradientshader.cpp b/shaders/hgradientshader.cpp index f6bb993..c3f3c5e 100644 --- a/shaders/hgradientshader.cpp +++ b/shaders/hgradientshader.cpp @@ -8,21 +8,22 @@ #include "shaderbase.cpp" namespace UwU { - class HGradienthader : public ShaderBase { + class HGradientShader : public ShaderBase { public: HGradientShader(uint16_t u0, uint16_t u1, Color c0, Color c1) { - this->u0; + this->u0 = (uint32_t)u0; this->uScale = 0xffffffff / (1 + (uint32_t)u1 - (uint32_t)u0); this->c0 = c0; this->c1 = c1; } - uint16_t u0; - uint16_t uScale; + uint32_t u0; + uint32_t uScale; Color c0; Color c1; - Color shade(uint16_t u, uint16_t u) { - uint32_t t = (((uint32_t)u - (uint32_t)u0) * uScale) / 0x01000000; + Color shade(uint16_t u, uint16_t v) { + (void)v; + uint32_t t = (((uint32_t)u - u0) * uScale) / 0x01000000; return Helpers::lerpColor(c0, c1, (uint8_t)t); } }; diff --git a/shaders/shaders.h b/shaders/shaders.h index fc3bb96..47aa080 100644 --- a/shaders/shaders.h +++ b/shaders/shaders.h @@ -1,4 +1,4 @@ #include "shaderbase.cpp" #include "colorshader.cpp" -// #include "hgradientshader.cpp" -// #include "vgradientshader.cpp" \ No newline at end of file +#include "hgradientshader.cpp" +#include "vgradientshader.cpp" \ No newline at end of file diff --git a/shaders/vgradientshader.cpp b/shaders/vgradientshader.cpp index 29c664f..b878c2c 100644 --- a/shaders/vgradientshader.cpp +++ b/shaders/vgradientshader.cpp @@ -8,21 +8,22 @@ #include "shaderbase.cpp" namespace UwU { - class VGradienthader : public ShaderBase { + class VGradientShader : public ShaderBase { public: VGradientShader(uint16_t v0, uint16_t v1, Color c0, Color c1) { - this->v0; + this->v0 = (uint32_t)v0; this->vScale = 0xffffffff / (1 + (uint32_t)v1 - (uint32_t)v0); this->c0 = c0; this->c1 = c1; } - uint16_t v0; - uint16_t vScale; + uint32_t v0; + uint32_t vScale; Color c0; Color c1; - Color shade(uint16_t u, uint16_t u) { - uint32_t t = (((uint32_t)v - (uint32_t)v0) * vScale) / 0x01000000; + Color shade(uint16_t u, uint16_t v) { + (void)u; + uint32_t t = (((uint32_t)v - v0) * vScale) / 0x01000000; return Helpers::lerpColor(c0, c1, (uint8_t)t); } }; diff --git a/uwugl.h b/uwugl.h index 04f1ef9..622401b 100644 --- a/uwugl.h +++ b/uwugl.h @@ -7,4 +7,4 @@ #include "primatives/rectangle.cpp" #include "primatives/trapezoid.cpp" #include "primatives/triangle.cpp" -#include "shader.cpp" \ No newline at end of file +#include "shaders/shaders.h" \ No newline at end of file diff --git a/waymini/libwaymini.a b/waymini/libwaymini.a index 131cff363df2aa8f50a7b8e229a92ebd4043371e..0c521f86d4c7a3de6b9cb17101b8860b7962cb7a 100644 GIT binary patch delta 5173 zcmZ{o4{#J$9mjX~LjJRt@Gn>X<$!CO@F(1bSIYx_TYDlNM$kQ;h;q|jShr&;>2 zwPd8*XW1V#4fM>=8tki9`5zr4vWQ=?lB689ue&5kzN2*VlUg)MQD<3+vt`#fMCfAZ zBcd64Bk!atvj#nFl%~aLmet#%ztl;ca|_nnH&36S1!v@o+C72AP4?SSyEjnRWWVEj zvWF=RZ(p&8BBZ%Cw;;>*SWZpezHMS|ZmdKj1uL<|r+NEs8qU;D(+^Vna@%yX$Vx7C z+>xuDu~a&5njU_`Nn*WaaXFU#2QH_KtMze#!Dy1Qi6$u(s?Zwltnilhk%cHLnBzTm zJDqmSsEIFk?iJ4$%<^p^Hu83-t3~mX<4Ifl#Z>Xb0z z(&=l>v{FWgjY7Ji+de!>mK|0y>(MfrSax6FJ9G^VS=-azzV{q-FmTAZ-m#Lk4n9pw z8N;nqRZLed`e#b+G{4h({mmx(%J!jwSgn1=TOJJ*d7Ca+m#%ut<5B9yKo0?;!O)v$ zZfEnX&RTzwuQ5Kg^Qp^QzALbm+*)?;?}`Rq&_kq97*I*j-ub+oyU9}i$^A|x9oD=_ zPHCH3t!-zIl8a$yCnj0(8BIGuElH1D9P8zMZq9sCnmDhIyzVW{tk(^5f;ZR50n2um zjxBo^Ip%zQW2(wLshi=7P({dJ8LSKk!3#}%RTC23_WScdn-)J^-kI=MB94mfV_leaL9*?)v zx`8$&kJcP=?s8|T{1+?8gmKl}Oob59l+ZTaUK3&`bkI*!U1i)gNyu|!UP_O5XQ zS@l<=V&|m-8}MNErw6bbl9`T{tCvL&7>|kWMGMf?C)Q7VJYFXyGo^%Exkj=U zZqEvHQ13_>#w){Z+`mCRVOYblgwdQoys}{J@T!EH-A-x4S@GcOLCG+aLCMBBTAKKh z_mR}pNtRxG$OYPUx*D3U4Tv0EOecy z`b#KR4q7L<3OZl%SYc}a^q0oPm&+|kPPKV-jPmnCV>9siz-{0QfDZyk{l5Y)2mOy- z9;aSw+CmU`|BlHY*q#OtBF(nnwDws z92jt`qpU<@2k>fItH6gP&-C*u=(8WW6}8Lv^y69>99_RBxQ`p`nFe2Q6HNt<9r_G# z)b9lD>T~~Tya)m`*asW~9088{r+}mWZ-Jx!)ny<+gPXvyLmv4jh{a*yeXJyo(wQKw zAq{ndLclA4w*X%Z{0Q(*0Y3$NsmsOhA1jVyNq>_%yxW$6?Z3blE4>5yyh&8fIoY(J z!Ikolg5qA_pLTiNxrY%DU_z@T=Y%5Q=(C`Y34IMX`q=?~YQc}lb{?Yte~i8l23%P$ z9Xx&v0kE>40>{9=20wLVuR3u_>2rLn;5{(lz-@H!xTXwfj)89i$H2Kcj+yf(x|F6W z@C3>E)^Oao63hevIto3+(NfUI0=^C${pta?-~jLd1o$raLH|D-)2IHUqu0g+n)WC-I{pwxPvw&m zjm$l?5jftm7lD_P-DsT4rLhkLXiy;EP&vTUY~ZS=Cjwsud>Zi8z~=#913bP51ZzR? zJ>ctr{{=WEbPG6r%Z(+f%QuJ20%o{e+?rn=KjOYnI$gxyxY@jeX|OH+(d&kH4dnCS zcM7-7r5wkN^FU0dscPciUA}xwFy7VEir~p&1NHv?1Gr1r_0!`01;;DZZd2NvJs*nm zt1^#!Tmpiq3lJ4NhXH%W9> zO;Ss9U6J@vm5-OFsv^eX@nV!N-yAQNRYweKzUZxv=qJR<>RQ9UK#UTrGsUuS#Aq`e zZ;pA`XSAE*R5+5qSAN(HdBoP%nPPU0&*-WU%W5JmiRd@P$(maIlhmD>3was; PybyQ2Gg2SbZz%a63ewGc delta 5008 zcmZ{odu&tJ9mnsz4#BaLYv<9#Kp+MJgp!9H@}e0|>?Y*8%S74`2uh%=%ThY^k8BGn zT9Iy$6NDAAx;qtPB2puwhlctVk52}H>Y;=NRDpa-GDxmd#=lUG- zjn(|5n{)5ye1DJgyT{kp`6{k{_$xK`LjEd6X_|MOJ)BUr#zyvp=2PAA7qv#!4E6-K z1*3oH={6#F?2&uwzAbIh%SQC>Erl#hr(=oXc4O?5;kEv2NylK!P%jyql0Wnq(c9sP z;pIwO^ro@?@0OaR=4_{MH6qh?n(NyY><{kxmGW^$%l3Y?pvYC$su<(Vmg`u;b+{s4<5;HZ$0<)|^gBkfYS2~I z#zvg0%^UYpDgQNE39a^n^h$!egHK;_m5q>?g5>exZ8!b7z{@lyHgh0~`p2yk9|w!sFbagGFF~jiQiHJ*&*Z9pYQ@1jCrL73j90Fypc5l{s{9y@ z{!fgtlxy^L3*9%yTdd1T_OrY)^9aFoSrfzM?%(i=!_nF3MI-vZLD$`c5xw=9@%q@z zM5rbDCs+8Q)pXbTta9VeH~qhV_ls=fm=QfN?Vk9N>Yqu+8E>Y$ZCL02gfae#RlQ0jb#1lZTkETB@YVV@#ZS9?)SXS_TF(8+_VYg>-94d&bk7l6o9;c771S#t zi`sObw$-6m5DDrYQiODSyHhD5`5xgr$bGlzUhP}D{pWPLpLG}fLiMuy1?$Wqy6&V+ z#BD_u{hB(wr%N-Oic(5x66u`m<-#RT&WijrWf{MH zpMMRr)5n6Fo*opgD;2CzuyPuG?0(@ovscWl5Hl4tJ}+1n?@Um4AJV925nG2&&y9pb z_Yey5_VLKagqELkSm7@ zcc@eG@!}V3IbFheMcldcCH0x1oOBr3kS{4k0eOyOa5vpB&SQehvQ`T|CAe%(gW!oA z_F!4{$}UGbjqK1~F+C)B7W-!Dx!Ms?h3rEK)oLXbTqdm)e99TGTYhwrxk>Ck3aV_N z;{pGOkUa~$68JFiD&Ri>j{0ff>p_1t%}wgHqSU~|4RClA_+7!do6*MWW`aazBk@D^c$&EUXW-N{8{&jPQfYq_$B;F)n=20f3H%Y%?z znA4j|0|6Q6k8>0A_`iVTCb|b47f{VBA>#w;w*XJ;dH>0F!UQ^eA2=o$1&;bj;HZBS zIO^Yf9wyM?ufVZGHx}TZF2KJ6-pI_gC2BQ$b8U&qzqDl6_ld_Emp%skFz{yJuL8%# zoE4n!vu}X@cc2$*EU>!%9ylyzu5~4*58SSS8-Jsb6Z!4(+B8~`Zb`( z7C#1D#4)Y1x*<>t1bP}AFwk?L=iB@M9o+VT9v5~HI4*!?Tc1Y$^`j`QbjTIF3J#d~ zml=us$%orppvT1T0>{LEk#TtbGCE}955WNw-v*9>zLbG7;w)ZFfQ;WVj1vIP zHkd$%0pLM$kos}KdFQ;qkAXe}{0-ob&v7#~0~2j?6RFREv4dg+K=IYv6!^?f_o} z`cD^#W6L2C85U%H{)%8?H3?)vO9baF#e!A>$2XEkAr2PW47?oTx8|h34Xs^@2|B<5 z1N8!51A%r4o>}N^;Ojx}bkGG^7SE6OY{|ok`A<4OaMZsB{3!}3J9irRR^V>|@8&%H z{7a=S!^Adl$P+JZ+zDSTxMfZ(w!&C@@)0_f4g7VQhaOH?KeT&!saNJSH~abOxVtvXecl*x<$o+G|cWP}iWv%GhLGK>N3o z<-3bn^^PKzU0)Y|OiJ1-nQySE|_c#(;JvpOrQR)GpT7)S~vr Vk2hV($@m`yJMCT`KN{Lw@_(V0h(7=T diff --git a/waymini/waymini.o b/waymini/waymini.o index 52701a6c87777714f4517f9002a704617a0da436..f6e37d8ab959163029df0d3d43340deb6737d19f 100644 GIT binary patch delta 3671 zcmZ`*4Qy1$5x#wAjDO#qang6s5blhRa{h_AcNjYq#Xb`|JePAhhoG9osqDnE_(>`Q zrU?ScanA-`4;P#XQA=qB4N@pc6}y)NR1$J0Cxl38%1_l)N)y>tTMABPP)n1LMDEPq zK5KQ7N7~)l@0*#O+1{s!))rK!~`34K8~rFluDq{`uc5#=CppW(Yk&9EKX=uPsHl; z-`8S&7_s*H!!6cF=}6W%Cg&O~a^eazlz%#D({h?TZ`a@eQl|ADB(sB{W|wFVn#cBd z9InCJ3Riuo-bgfLcQDm$##i&e81z6i@!R$=7waYt*9`NU!GSAC*W@fk>ZrMvchs}5)GLGN7VKT?#+JofOhdpU?bO`7A zN{o+ZH^_IrX@L4};qx$==k0$3LB1^C`5xEw`z_YQP;xlhV5MB;5x?8j za>=}UjZ~jG+=p}2g2wx)JK3a#%_pwV7^SY0x?WfLLI1OSsl9)44?n{UG$`8 z`+p#G%BY`b8GoMV+ih0f#S7TgZVtS23S*4ZRWsx1+|Od&GgDV)H%$uTaHPKQ#xAm{ z*IeFoIrdr3I@86PI$~PsSlkzbGY7n$U&Xd1{+54^skPNcwc!f|L$$%$(8|Qig&Wzb zAo}^q8Ra;2O=__DptE&f*1BQk`>}aXjkjKC{zF8~X;y>#vWAs5oZW?H?a=7bSTAgH zy~I4g+{?Cfk~7{qlJ+d@n$&3X!FjF2Sr5hL|I}$7QXbuxt(;Ta*Q%XPH&fdi)u?hz zZ8z0UC8BO_QhV2^&#Y0OWi4v-M;AKPoONn+U-s6#3lHWi9eEd;^D*QiY^UIa+siIO z%3aL$bs|Pt!XkmON~BGiP^7>^%~@hqFJCSlTn&_c_jCERBpWsc2I`+e7xvTC>k4f=3JvlemOu*G z@6EyXaCY|`>hJiAz&?#;=nbyKvW!n9r2U z32%eRGEF}zvEPx{H=)R{!2y3kp}Y(KfJVQj-;#VPB%iNfyI*7Tp=+t8yRwl$p}_I=ocU=Fitoi{=d(cIl&4(FVi@?gW*BpLt)9bc2YKlS=3t+PF=Wq4F?~`d z7hw`t{8aLNKw^~~oS;yiP1x-G{jhzR##TWi_7A`b>>ndU-zDs+-UlW7{oLjS?)56y z{{u!q)3d~%A=#Ho_PNkjuCX#GE!XrK$!3XUvx?hnARE>VBLR(V;mA%%p+3m*BXA4# zqZ~iMqy0{bwp5CChHUijihon8SH6MUU;x?ObFd@C_UDWLd-8oqid-z=>m_`lgl~}W zN(p~h!VgLKMhX8#8i%zNMf#*{l>}hj$)ED$nRg#lhGd zr9tf|bX94yECO8U%^@}jBUQ`s9Zpp(SGqdHOJuty#k?;A50U}OA~DX|i~nvj1GnGz zSDgWhU%633gI*kKQ4qDIG9yXv7(-xg)J)@6yLpYdPThwR^bK?9V!KZa7{qz vRAFmPeePlLxsrsjnmVPo8gA6oE71i|v9g}sge@x@a=)M(it+~BGQ9r>LJ7-z delta 3599 zcmZ`*3v5(X8lH2fw4Isu%(PT*FDNsGsU7HpxkFn(!nC*B(mSMvV(D4~RqEC%>Sl|U zEUP3fX-l}2u7m%^C6UA-Xaq&2PE?FpoNA4`X5-TOz=Z6k$QqPluRfNW)5D-9lS<%ZD_RKHm$3lIZ$G# z4yXE>%;7KkZqm=sxO?J|Ac1g;;LX8_+(zrt)=p!a(fK*^(5Lio5#io5(_a4&1063Z zr<|s7Tg*CV{61#AhdHfp&YVVq<^Jgnf*LQNnEPQ$@6b9Y2Aeajx6+X1GF04C#isRfdLG6d#+`3@{R3$1fbFi5oMUJ+b0!XPS0E=nvBzQD z74@t}{PRt7b8|iMV?H<0aSD5{97nHibEKj)goVtJQm1Hix4KHEHOT6-pZqYo2(DjjEJ-EgYkDNnR&ww%Ey_@e2Bx{c@^Zxh7d7mFg$9&cXzo*}?grv}h6Lb*udKfpzguwgnJme|4kJ9OG|}R}I-6)M?(`AbVc=(ic9?X#(n9ZTq`eJvcLNao2Ny7q`0u{`}#MqTs+Q9XnJrkyBh?yP+&nE!*HUY zY)6M+mIx+<;{yWAVk=`%-#!J`Y|za{m|Q_BX%zm6 z6z~l~ldISi2XQ1|eBnysgV}}6B#~TO^k=85bpdiHOOmgtj}oodmHxD+{WAtHM9%@} z($q*?uy(3txH*hX2;81PBejh!7P*NOANhQ-+IN_5yhV)tH40t^%Bcw+JcSAJ#ciXN(Pw?IRul~p8>K= zCI4Z)_KEOfJ0h>@H6F8y!6=#R2GG&>_IcQyoE@5nJ;K=+=V9MrZ2N~2TZ{SaHM}?v zK06Qoi-fO+%AiWBpfjk#!C;=YOZ=Lc$<0!Z{V*0(wI?N3UY9Yrfb2gcRz7X-KtZVr z{|x4phNXz-CF}JP?uMhKDp?FWu`h*5>~Cg>)|QP%C~TkWu-UV}li6rHB$n;-9&Ai@ z0l7&fdwEO%9rY)9%oEUs`pcXh=kY&~BKXnMj{iSyf0^6-JdaHdjAOJYl$5Dt3)j10 zbD64*gOqVc1)y>MsbEt@ZCDc1pqV_`ja)+)6qKur zcFe=}dZ3}aitK}(<*KHzl|f-?AG97Wb6{pRGmbahMD6eAPj zdrt=LVR^W!