| ⭐⭐☆☆ | 5.5 | 5.5 | [Tim Little](https://github.com/timlittle) |
| [models_rotating_cube](models/models_rotating_cube.c) |
| ⭐☆☆☆ | 5.6-dev | 5.6-dev | [Jopestpe](https://github.com/jopestpe) |
-### category: shaders [31]
+### category: shaders [32]
Examples using raylib shaders functionality, including shaders loading, parameters configuration and drawing using them (model shaders and postprocessing shaders). This functionality is directly provided by raylib [rlgl](../src/rlgl.c) module.
@@ -233,6 +233,7 @@ Examples using raylib shaders functionality, including shaders loading, paramete
| [shaders_rounded_rectangle](shaders/shaders_rounded_rectangle.c) |
| ⭐⭐⭐☆ | 5.5 | 5.5 | [Anstro Pleuton](https://github.com/anstropleuton) |
| [shaders_depth_rendering](shaders/shaders_depth_rendering.c) |
| ⭐⭐⭐☆ | 5.6-dev | 5.6-dev | [Luís Almeida](https://github.com/luis605) |
| [shaders_mandelbrot_set](shaders/shaders_mandelbrot_set.c) |
| ⭐⭐⭐☆ | 5.6 | 5.6 | [Jordi Santonja](https://github.com/JordSant) |
+| [shaders_color_correction](shaders/shaders_color_correction.c) |
| ⭐⭐☆☆ | 5.6 | 5.6 | [Jordi Santonja](https://github.com/JordSant) |
### category: audio [8]
diff --git a/examples/examples_list.txt b/examples/examples_list.txt
index 4805a37ec..f24cb9905 100644
--- a/examples/examples_list.txt
+++ b/examples/examples_list.txt
@@ -163,6 +163,7 @@ shaders;shaders_texture_outline;★★★☆;4.0;4.0;2021;2025;"Serenity Skiff";
shaders;shaders_texture_waves;★★☆☆;2.5;3.7;2019;2025;"Anata";@anatagawa
shaders;shaders_julia_set;★★★☆;2.5;4.0;2019;2025;"Josh Colclough";@joshcol9232
shaders;shaders_mandelbrot_set;★★★☆;5.6;5.6;2025;2025;"Jordi Santonja";@JordSant
+shaders;shaders_color_correction;★★☆☆;5.6;5.6;2025;2025;"Jordi Santonja";@JordSant
shaders;shaders_eratosthenes_sieve;★★★☆;2.5;4.0;2019;2025;"ProfJski";@ProfJski
shaders;shaders_fog_rendering;★★★☆;2.5;3.7;2019;2025;"Chris Camacho";@chriscamacho
shaders;shaders_simple_mask;★★☆☆;2.5;3.7;2019;2025;"Chris Camacho";@chriscamacho
diff --git a/examples/shaders/raygui.h b/examples/shaders/raygui.h
new file mode 100644
index 000000000..a3fc51f0f
--- /dev/null
+++ b/examples/shaders/raygui.h
@@ -0,0 +1,5757 @@
+/*******************************************************************************************
+*
+* raygui v4.5-dev - A simple and easy-to-use immediate-mode gui library
+*
+* DESCRIPTION:
+* raygui is a tools-dev-focused immediate-mode-gui library based on raylib but also
+* available as a standalone library, as long as input and drawing functions are provided.
+*
+* FEATURES:
+* - Immediate-mode gui, minimal retained data
+* - +25 controls provided (basic and advanced)
+* - Styling system for colors, font and metrics
+* - Icons supported, embedded as a 1-bit icons pack
+* - Standalone mode option (custom input/graphics backend)
+* - Multiple support tools provided for raygui development
+*
+* POSSIBLE IMPROVEMENTS:
+* - Better standalone mode API for easy plug of custom backends
+* - Externalize required inputs, allow user easier customization
+*
+* LIMITATIONS:
+* - No editable multi-line word-wraped text box supported
+* - No auto-layout mechanism, up to the user to define controls position and size
+* - Standalone mode requires library modification and some user work to plug another backend
+*
+* NOTES:
+* - WARNING: GuiLoadStyle() and GuiLoadStyle{Custom}() functions, allocate memory for
+* font atlas recs and glyphs, freeing that memory is (usually) up to the user,
+* no unload function is explicitly provided... but note that GuiLoadStyleDefault() unloads
+* by default any previously loaded font (texture, recs, glyphs).
+* - Global UI alpha (guiAlpha) is applied inside GuiDrawRectangle() and GuiDrawText() functions
+*
+* CONTROLS PROVIDED:
+* # Container/separators Controls
+* - WindowBox --> StatusBar, Panel
+* - GroupBox --> Line
+* - Line
+* - Panel --> StatusBar
+* - ScrollPanel --> StatusBar
+* - TabBar --> Button
+*
+* # Basic Controls
+* - Label
+* - LabelButton --> Label
+* - Button
+* - Toggle
+* - ToggleGroup --> Toggle
+* - ToggleSlider
+* - CheckBox
+* - ComboBox
+* - DropdownBox
+* - TextBox
+* - ValueBox --> TextBox
+* - Spinner --> Button, ValueBox
+* - Slider
+* - SliderBar --> Slider
+* - ProgressBar
+* - StatusBar
+* - DummyRec
+* - Grid
+*
+* # Advance Controls
+* - ListView
+* - ColorPicker --> ColorPanel, ColorBarHue
+* - MessageBox --> Window, Label, Button
+* - TextInputBox --> Window, Label, TextBox, Button
+*
+* It also provides a set of functions for styling the controls based on its properties (size, color).
+*
+*
+* RAYGUI STYLE (guiStyle):
+* raygui uses a global data array for all gui style properties (allocated on data segment by default),
+* when a new style is loaded, it is loaded over the global style... but a default gui style could always be
+* recovered with GuiLoadStyleDefault() function, that overwrites the current style to the default one
+*
+* The global style array size is fixed and depends on the number of controls and properties:
+*
+* static unsigned int guiStyle[RAYGUI_MAX_CONTROLS*(RAYGUI_MAX_PROPS_BASE + RAYGUI_MAX_PROPS_EXTENDED)];
+*
+* guiStyle size is by default: 16*(16 + 8) = 384*4 = 1536 bytes = 1.5 KB
+*
+* Note that the first set of BASE properties (by default guiStyle[0..15]) belong to the generic style
+* used for all controls, when any of those base values is set, it is automatically populated to all
+* controls, so, specific control values overwriting generic style should be set after base values.
+*
+* After the first BASE set we have the EXTENDED properties (by default guiStyle[16..23]), those
+* properties are actually common to all controls and can not be overwritten individually (like BASE ones)
+* Some of those properties are: TEXT_SIZE, TEXT_SPACING, LINE_COLOR, BACKGROUND_COLOR
+*
+* Custom control properties can be defined using the EXTENDED properties for each independent control.
+*
+* TOOL: rGuiStyler is a visual tool to customize raygui style: github.com/raysan5/rguistyler
+*
+*
+* RAYGUI ICONS (guiIcons):
+* raygui could use a global array containing icons data (allocated on data segment by default),
+* a custom icons set could be loaded over this array using GuiLoadIcons(), but loaded icons set
+* must be same RAYGUI_ICON_SIZE and no more than RAYGUI_ICON_MAX_ICONS will be loaded
+*
+* Every icon is codified in binary form, using 1 bit per pixel, so, every 16x16 icon
+* requires 8 integers (16*16/32) to be stored in memory.
+*
+* When the icon is draw, actually one quad per pixel is drawn if the bit for that pixel is set.
+*
+* The global icons array size is fixed and depends on the number of icons and size:
+*
+* static unsigned int guiIcons[RAYGUI_ICON_MAX_ICONS*RAYGUI_ICON_DATA_ELEMENTS];
+*
+* guiIcons size is by default: 256*(16*16/32) = 2048*4 = 8192 bytes = 8 KB
+*
+* TOOL: rGuiIcons is a visual tool to customize/create raygui icons: github.com/raysan5/rguiicons
+*
+* RAYGUI LAYOUT:
+* raygui currently does not provide an auto-layout mechanism like other libraries,
+* layouts must be defined manually on controls drawing, providing the right bounds Rectangle for it.
+*
+* TOOL: rGuiLayout is a visual tool to create raygui layouts: github.com/raysan5/rguilayout
+*
+* CONFIGURATION:
+* #define RAYGUI_IMPLEMENTATION
+* Generates the implementation of the library into the included file.
+* If not defined, the library is in header only mode and can be included in other headers
+* or source files without problems. But only ONE file should hold the implementation.
+*
+* #define RAYGUI_STANDALONE
+* Avoid raylib.h header inclusion in this file. Data types defined on raylib are defined
+* internally in the library and input management and drawing functions must be provided by
+* the user (check library implementation for further details).
+*
+* #define RAYGUI_NO_ICONS
+* Avoid including embedded ricons data (256 icons, 16x16 pixels, 1-bit per pixel, 2KB)
+*
+* #define RAYGUI_CUSTOM_ICONS
+* Includes custom ricons.h header defining a set of custom icons,
+* this file can be generated using rGuiIcons tool
+*
+* #define RAYGUI_DEBUG_RECS_BOUNDS
+* Draw control bounds rectangles for debug
+*
+* #define RAYGUI_DEBUG_TEXT_BOUNDS
+* Draw text bounds rectangles for debug
+*
+* VERSIONS HISTORY:
+* 4.5-dev (Sep-2024) Current dev version...
+* ADDED: guiControlExclusiveMode and guiControlExclusiveRec for exclusive modes
+* ADDED: GuiValueBoxFloat()
+* ADDED: GuiDropdonwBox() properties: DROPDOWN_ARROW_HIDDEN, DROPDOWN_ROLL_UP
+* ADDED: GuiListView() property: LIST_ITEMS_BORDER_WIDTH
+* ADDED: Multiple new icons
+* REVIEWED: GuiTabBar(), close tab with mouse middle button
+* REVIEWED: GuiScrollPanel(), scroll speed proportional to content
+* REVIEWED: GuiDropdownBox(), support roll up and hidden arrow
+* REVIEWED: GuiTextBox(), cursor position initialization
+* REVIEWED: GuiSliderPro(), control value change check
+* REVIEWED: GuiGrid(), simplified implementation
+* REVIEWED: GuiIconText(), increase buffer size and reviewed padding
+* REVIEWED: GuiDrawText(), improved wrap mode drawing
+* REVIEWED: GuiScrollBar(), minor tweaks
+* REVIEWED: Functions descriptions, removed wrong return value reference
+* REDESIGNED: GuiColorPanel(), improved HSV <-> RGBA convertion
+*
+* 4.0 (12-Sep-2023) ADDED: GuiToggleSlider()
+* ADDED: GuiColorPickerHSV() and GuiColorPanelHSV()
+* ADDED: Multiple new icons, mostly compiler related
+* ADDED: New DEFAULT properties: TEXT_LINE_SPACING, TEXT_ALIGNMENT_VERTICAL, TEXT_WRAP_MODE
+* ADDED: New enum values: GuiTextAlignment, GuiTextAlignmentVertical, GuiTextWrapMode
+* ADDED: Support loading styles with custom font charset from external file
+* REDESIGNED: GuiTextBox(), support mouse cursor positioning
+* REDESIGNED: GuiDrawText(), support multiline and word-wrap modes (read only)
+* REDESIGNED: GuiProgressBar() to be more visual, progress affects border color
+* REDESIGNED: Global alpha consideration moved to GuiDrawRectangle() and GuiDrawText()
+* REDESIGNED: GuiScrollPanel(), get parameters by reference and return result value
+* REDESIGNED: GuiToggleGroup(), get parameters by reference and return result value
+* REDESIGNED: GuiComboBox(), get parameters by reference and return result value
+* REDESIGNED: GuiCheckBox(), get parameters by reference and return result value
+* REDESIGNED: GuiSlider(), get parameters by reference and return result value
+* REDESIGNED: GuiSliderBar(), get parameters by reference and return result value
+* REDESIGNED: GuiProgressBar(), get parameters by reference and return result value
+* REDESIGNED: GuiListView(), get parameters by reference and return result value
+* REDESIGNED: GuiColorPicker(), get parameters by reference and return result value
+* REDESIGNED: GuiColorPanel(), get parameters by reference and return result value
+* REDESIGNED: GuiColorBarAlpha(), get parameters by reference and return result value
+* REDESIGNED: GuiColorBarHue(), get parameters by reference and return result value
+* REDESIGNED: GuiGrid(), get parameters by reference and return result value
+* REDESIGNED: GuiGrid(), added extra parameter
+* REDESIGNED: GuiListViewEx(), change parameters order
+* REDESIGNED: All controls return result as int value
+* REVIEWED: GuiScrollPanel() to avoid smallish scroll-bars
+* REVIEWED: All examples and specially controls_test_suite
+* RENAMED: gui_file_dialog module to gui_window_file_dialog
+* UPDATED: All styles to include ISO-8859-15 charset (as much as possible)
+*
+* 3.6 (10-May-2023) ADDED: New icon: SAND_TIMER
+* ADDED: GuiLoadStyleFromMemory() (binary only)
+* REVIEWED: GuiScrollBar() horizontal movement key
+* REVIEWED: GuiTextBox() crash on cursor movement
+* REVIEWED: GuiTextBox(), additional inputs support
+* REVIEWED: GuiLabelButton(), avoid text cut
+* REVIEWED: GuiTextInputBox(), password input
+* REVIEWED: Local GetCodepointNext(), aligned with raylib
+* REDESIGNED: GuiSlider*()/GuiScrollBar() to support out-of-bounds
+*
+* 3.5 (20-Apr-2023) ADDED: GuiTabBar(), based on GuiToggle()
+* ADDED: Helper functions to split text in separate lines
+* ADDED: Multiple new icons, useful for code editing tools
+* REMOVED: Unneeded icon editing functions
+* REMOVED: GuiTextBoxMulti(), very limited and broken
+* REMOVED: MeasureTextEx() dependency, logic directly implemented
+* REMOVED: DrawTextEx() dependency, logic directly implemented
+* REVIEWED: GuiScrollBar(), improve mouse-click behaviour
+* REVIEWED: Library header info, more info, better organized
+* REDESIGNED: GuiTextBox() to support cursor movement
+* REDESIGNED: GuiDrawText() to divide drawing by lines
+*
+* 3.2 (22-May-2022) RENAMED: Some enum values, for unification, avoiding prefixes
+* REMOVED: GuiScrollBar(), only internal
+* REDESIGNED: GuiPanel() to support text parameter
+* REDESIGNED: GuiScrollPanel() to support text parameter
+* REDESIGNED: GuiColorPicker() to support text parameter
+* REDESIGNED: GuiColorPanel() to support text parameter
+* REDESIGNED: GuiColorBarAlpha() to support text parameter
+* REDESIGNED: GuiColorBarHue() to support text parameter
+* REDESIGNED: GuiTextInputBox() to support password
+*
+* 3.1 (12-Jan-2022) REVIEWED: Default style for consistency (aligned with rGuiLayout v2.5 tool)
+* REVIEWED: GuiLoadStyle() to support compressed font atlas image data and unload previous textures
+* REVIEWED: External icons usage logic
+* REVIEWED: GuiLine() for centered alignment when including text
+* RENAMED: Multiple controls properties definitions to prepend RAYGUI_
+* RENAMED: RICON_ references to RAYGUI_ICON_ for library consistency
+* Projects updated and multiple tweaks
+*
+* 3.0 (04-Nov-2021) Integrated ricons data to avoid external file
+* REDESIGNED: GuiTextBoxMulti()
+* REMOVED: GuiImageButton*()
+* Multiple minor tweaks and bugs corrected
+*
+* 2.9 (17-Mar-2021) REMOVED: Tooltip API
+* 2.8 (03-May-2020) Centralized rectangles drawing to GuiDrawRectangle()
+* 2.7 (20-Feb-2020) ADDED: Possible tooltips API
+* 2.6 (09-Sep-2019) ADDED: GuiTextInputBox()
+* REDESIGNED: GuiListView*(), GuiDropdownBox(), GuiSlider*(), GuiProgressBar(), GuiMessageBox()
+* REVIEWED: GuiTextBox(), GuiSpinner(), GuiValueBox(), GuiLoadStyle()
+* Replaced property INNER_PADDING by TEXT_PADDING, renamed some properties
+* ADDED: 8 new custom styles ready to use
+* Multiple minor tweaks and bugs corrected
+*
+* 2.5 (28-May-2019) Implemented extended GuiTextBox(), GuiValueBox(), GuiSpinner()
+* 2.3 (29-Apr-2019) ADDED: rIcons auxiliar library and support for it, multiple controls reviewed
+* Refactor all controls drawing mechanism to use control state
+* 2.2 (05-Feb-2019) ADDED: GuiScrollBar(), GuiScrollPanel(), reviewed GuiListView(), removed Gui*Ex() controls
+* 2.1 (26-Dec-2018) REDESIGNED: GuiCheckBox(), GuiComboBox(), GuiDropdownBox(), GuiToggleGroup() > Use combined text string
+* REDESIGNED: Style system (breaking change)
+* 2.0 (08-Nov-2018) ADDED: Support controls guiLock and custom fonts
+* REVIEWED: GuiComboBox(), GuiListView()...
+* 1.9 (09-Oct-2018) REVIEWED: GuiGrid(), GuiTextBox(), GuiTextBoxMulti(), GuiValueBox()...
+* 1.8 (01-May-2018) Lot of rework and redesign to align with rGuiStyler and rGuiLayout
+* 1.5 (21-Jun-2017) Working in an improved styles system
+* 1.4 (15-Jun-2017) Rewritten all GUI functions (removed useless ones)
+* 1.3 (12-Jun-2017) Complete redesign of style system
+* 1.1 (01-Jun-2017) Complete review of the library
+* 1.0 (07-Jun-2016) Converted to header-only by Ramon Santamaria.
+* 0.9 (07-Mar-2016) Reviewed and tested by Albert Martos, Ian Eito, Sergio Martinez and Ramon Santamaria.
+* 0.8 (27-Aug-2015) Initial release. Implemented by Kevin Gato, Daniel Nicolás and Ramon Santamaria.
+*
+* DEPENDENCIES:
+* raylib 5.0 - Inputs reading (keyboard/mouse), shapes drawing, font loading and text drawing
+*
+* STANDALONE MODE:
+* By default raygui depends on raylib mostly for the inputs and the drawing functionality but that dependency can be disabled
+* with the config flag RAYGUI_STANDALONE. In that case is up to the user to provide another backend to cover library needs.
+*
+* The following functions should be redefined for a custom backend:
+*
+* - Vector2 GetMousePosition(void);
+* - float GetMouseWheelMove(void);
+* - bool IsMouseButtonDown(int button);
+* - bool IsMouseButtonPressed(int button);
+* - bool IsMouseButtonReleased(int button);
+* - bool IsKeyDown(int key);
+* - bool IsKeyPressed(int key);
+* - int GetCharPressed(void); // -- GuiTextBox(), GuiValueBox()
+*
+* - void DrawRectangle(int x, int y, int width, int height, Color color); // -- GuiDrawRectangle()
+* - void DrawRectangleGradientEx(Rectangle rec, Color col1, Color col2, Color col3, Color col4); // -- GuiColorPicker()
+*
+* - Font GetFontDefault(void); // -- GuiLoadStyleDefault()
+* - Font LoadFontEx(const char *fileName, int fontSize, int *codepoints, int codepointCount); // -- GuiLoadStyle()
+* - Texture2D LoadTextureFromImage(Image image); // -- GuiLoadStyle(), required to load texture from embedded font atlas image
+* - void SetShapesTexture(Texture2D tex, Rectangle rec); // -- GuiLoadStyle(), required to set shapes rec to font white rec (optimization)
+* - char *LoadFileText(const char *fileName); // -- GuiLoadStyle(), required to load charset data
+* - void UnloadFileText(char *text); // -- GuiLoadStyle(), required to unload charset data
+* - const char *GetDirectoryPath(const char *filePath); // -- GuiLoadStyle(), required to find charset/font file from text .rgs
+* - int *LoadCodepoints(const char *text, int *count); // -- GuiLoadStyle(), required to load required font codepoints list
+* - void UnloadCodepoints(int *codepoints); // -- GuiLoadStyle(), required to unload codepoints list
+* - unsigned char *DecompressData(const unsigned char *compData, int compDataSize, int *dataSize); // -- GuiLoadStyle()
+*
+* CONTRIBUTORS:
+* Ramon Santamaria: Supervision, review, redesign, update and maintenance
+* Vlad Adrian: Complete rewrite of GuiTextBox() to support extended features (2019)
+* Sergio Martinez: Review, testing (2015) and redesign of multiple controls (2018)
+* Adria Arranz: Testing and implementation of additional controls (2018)
+* Jordi Jorba: Testing and implementation of additional controls (2018)
+* Albert Martos: Review and testing of the library (2015)
+* Ian Eito: Review and testing of the library (2015)
+* Kevin Gato: Initial implementation of basic components (2014)
+* Daniel Nicolas: Initial implementation of basic components (2014)
+*
+*
+* LICENSE: zlib/libpng
+*
+* Copyright (c) 2014-2024 Ramon Santamaria (@raysan5)
+*
+* This software is provided "as-is", without any express or implied warranty. In no event
+* will the authors be held liable for any damages arising from the use of this software.
+*
+* Permission is granted to anyone to use this software for any purpose, including commercial
+* applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+* 1. The origin of this software must not be misrepresented; you must not claim that you
+* wrote the original software. If you use this software in a product, an acknowledgment
+* in the product documentation would be appreciated but is not required.
+*
+* 2. Altered source versions must be plainly marked as such, and must not be misrepresented
+* as being the original software.
+*
+* 3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#ifndef RAYGUI_H
+#define RAYGUI_H
+
+#define RAYGUI_VERSION_MAJOR 4
+#define RAYGUI_VERSION_MINOR 5
+#define RAYGUI_VERSION_PATCH 0
+#define RAYGUI_VERSION "4.5-dev"
+
+#if !defined(RAYGUI_STANDALONE)
+ #include "raylib.h"
+#endif
+
+// Function specifiers in case library is build/used as a shared library (Windows)
+// NOTE: Microsoft specifiers to tell compiler that symbols are imported/exported from a .dll
+#if defined(_WIN32)
+ #if defined(BUILD_LIBTYPE_SHARED)
+ #define RAYGUIAPI __declspec(dllexport) // We are building the library as a Win32 shared library (.dll)
+ #elif defined(USE_LIBTYPE_SHARED)
+ #define RAYGUIAPI __declspec(dllimport) // We are using the library as a Win32 shared library (.dll)
+ #endif
+#endif
+
+// Function specifiers definition
+#ifndef RAYGUIAPI
+ #define RAYGUIAPI // Functions defined as 'extern' by default (implicit specifiers)
+#endif
+
+//----------------------------------------------------------------------------------
+// Defines and Macros
+//----------------------------------------------------------------------------------
+// Allow custom memory allocators
+#ifndef RAYGUI_MALLOC
+ #define RAYGUI_MALLOC(sz) malloc(sz)
+#endif
+#ifndef RAYGUI_CALLOC
+ #define RAYGUI_CALLOC(n,sz) calloc(n,sz)
+#endif
+#ifndef RAYGUI_FREE
+ #define RAYGUI_FREE(p) free(p)
+#endif
+
+// Simple log system to avoid printf() calls if required
+// NOTE: Avoiding those calls, also avoids const strings memory usage
+#define RAYGUI_SUPPORT_LOG_INFO
+#if defined(RAYGUI_SUPPORT_LOG_INFO)
+ #define RAYGUI_LOG(...) printf(__VA_ARGS__)
+#else
+ #define RAYGUI_LOG(...)
+#endif
+
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+// NOTE: Some types are required for RAYGUI_STANDALONE usage
+//----------------------------------------------------------------------------------
+#if defined(RAYGUI_STANDALONE)
+ #ifndef __cplusplus
+ // Boolean type
+ #ifndef true
+ typedef enum { false, true } bool;
+ #endif
+ #endif
+
+ // Vector2 type
+ typedef struct Vector2 {
+ float x;
+ float y;
+ } Vector2;
+
+ // Vector3 type // -- ConvertHSVtoRGB(), ConvertRGBtoHSV()
+ typedef struct Vector3 {
+ float x;
+ float y;
+ float z;
+ } Vector3;
+
+ // Color type, RGBA (32bit)
+ typedef struct Color {
+ unsigned char r;
+ unsigned char g;
+ unsigned char b;
+ unsigned char a;
+ } Color;
+
+ // Rectangle type
+ typedef struct Rectangle {
+ float x;
+ float y;
+ float width;
+ float height;
+ } Rectangle;
+
+ // TODO: Texture2D type is very coupled to raylib, required by Font type
+ // It should be redesigned to be provided by user
+ typedef struct Texture2D {
+ unsigned int id; // OpenGL texture id
+ int width; // Texture base width
+ int height; // Texture base height
+ int mipmaps; // Mipmap levels, 1 by default
+ int format; // Data format (PixelFormat type)
+ } Texture2D;
+
+ // Image, pixel data stored in CPU memory (RAM)
+ typedef struct Image {
+ void *data; // Image raw data
+ int width; // Image base width
+ int height; // Image base height
+ int mipmaps; // Mipmap levels, 1 by default
+ int format; // Data format (PixelFormat type)
+ } Image;
+
+ // GlyphInfo, font characters glyphs info
+ typedef struct GlyphInfo {
+ int value; // Character value (Unicode)
+ int offsetX; // Character offset X when drawing
+ int offsetY; // Character offset Y when drawing
+ int advanceX; // Character advance position X
+ Image image; // Character image data
+ } GlyphInfo;
+
+ // TODO: Font type is very coupled to raylib, mostly required by GuiLoadStyle()
+ // It should be redesigned to be provided by user
+ typedef struct Font {
+ int baseSize; // Base size (default chars height)
+ int glyphCount; // Number of glyph characters
+ int glyphPadding; // Padding around the glyph characters
+ Texture2D texture; // Texture atlas containing the glyphs
+ Rectangle *recs; // Rectangles in texture for the glyphs
+ GlyphInfo *glyphs; // Glyphs info data
+ } Font;
+#endif
+
+// Style property
+// NOTE: Used when exporting style as code for convenience
+typedef struct GuiStyleProp {
+ unsigned short controlId; // Control identifier
+ unsigned short propertyId; // Property identifier
+ int propertyValue; // Property value
+} GuiStyleProp;
+
+/*
+// Controls text style -NOT USED-
+// NOTE: Text style is defined by control
+typedef struct GuiTextStyle {
+ unsigned int size;
+ int charSpacing;
+ int lineSpacing;
+ int alignmentH;
+ int alignmentV;
+ int padding;
+} GuiTextStyle;
+*/
+
+// Gui control state
+typedef enum {
+ STATE_NORMAL = 0,
+ STATE_FOCUSED,
+ STATE_PRESSED,
+ STATE_DISABLED
+} GuiState;
+
+// Gui control text alignment
+typedef enum {
+ TEXT_ALIGN_LEFT = 0,
+ TEXT_ALIGN_CENTER,
+ TEXT_ALIGN_RIGHT
+} GuiTextAlignment;
+
+// Gui control text alignment vertical
+// NOTE: Text vertical position inside the text bounds
+typedef enum {
+ TEXT_ALIGN_TOP = 0,
+ TEXT_ALIGN_MIDDLE,
+ TEXT_ALIGN_BOTTOM
+} GuiTextAlignmentVertical;
+
+// Gui control text wrap mode
+// NOTE: Useful for multiline text
+typedef enum {
+ TEXT_WRAP_NONE = 0,
+ TEXT_WRAP_CHAR,
+ TEXT_WRAP_WORD
+} GuiTextWrapMode;
+
+// Gui controls
+typedef enum {
+ // Default -> populates to all controls when set
+ DEFAULT = 0,
+
+ // Basic controls
+ LABEL, // Used also for: LABELBUTTON
+ BUTTON,
+ TOGGLE, // Used also for: TOGGLEGROUP
+ SLIDER, // Used also for: SLIDERBAR, TOGGLESLIDER
+ PROGRESSBAR,
+ CHECKBOX,
+ COMBOBOX,
+ DROPDOWNBOX,
+ TEXTBOX, // Used also for: TEXTBOXMULTI
+ VALUEBOX,
+ SPINNER, // Uses: BUTTON, VALUEBOX
+ LISTVIEW,
+ COLORPICKER,
+ SCROLLBAR,
+ STATUSBAR
+} GuiControl;
+
+// Gui base properties for every control
+// NOTE: RAYGUI_MAX_PROPS_BASE properties (by default 16 properties)
+typedef enum {
+ BORDER_COLOR_NORMAL = 0, // Control border color in STATE_NORMAL
+ BASE_COLOR_NORMAL, // Control base color in STATE_NORMAL
+ TEXT_COLOR_NORMAL, // Control text color in STATE_NORMAL
+ BORDER_COLOR_FOCUSED, // Control border color in STATE_FOCUSED
+ BASE_COLOR_FOCUSED, // Control base color in STATE_FOCUSED
+ TEXT_COLOR_FOCUSED, // Control text color in STATE_FOCUSED
+ BORDER_COLOR_PRESSED, // Control border color in STATE_PRESSED
+ BASE_COLOR_PRESSED, // Control base color in STATE_PRESSED
+ TEXT_COLOR_PRESSED, // Control text color in STATE_PRESSED
+ BORDER_COLOR_DISABLED, // Control border color in STATE_DISABLED
+ BASE_COLOR_DISABLED, // Control base color in STATE_DISABLED
+ TEXT_COLOR_DISABLED, // Control text color in STATE_DISABLED
+ BORDER_WIDTH, // Control border size, 0 for no border
+ //TEXT_SIZE, // Control text size (glyphs max height) -> GLOBAL for all controls
+ //TEXT_SPACING, // Control text spacing between glyphs -> GLOBAL for all controls
+ //TEXT_LINE_SPACING // Control text spacing between lines -> GLOBAL for all controls
+ TEXT_PADDING, // Control text padding, not considering border
+ TEXT_ALIGNMENT, // Control text horizontal alignment inside control text bound (after border and padding)
+ //TEXT_WRAP_MODE // Control text wrap-mode inside text bounds -> GLOBAL for all controls
+} GuiControlProperty;
+
+// TODO: Which text styling properties should be global or per-control?
+// At this moment TEXT_PADDING and TEXT_ALIGNMENT is configured and saved per control while
+// TEXT_SIZE, TEXT_SPACING, TEXT_LINE_SPACING, TEXT_ALIGNMENT_VERTICAL, TEXT_WRAP_MODE are global and
+// should be configured by user as needed while defining the UI layout
+
+// Gui extended properties depend on control
+// NOTE: RAYGUI_MAX_PROPS_EXTENDED properties (by default, max 8 properties)
+//----------------------------------------------------------------------------------
+// DEFAULT extended properties
+// NOTE: Those properties are common to all controls or global
+// WARNING: We only have 8 slots for those properties by default!!! -> New global control: TEXT?
+typedef enum {
+ TEXT_SIZE = 16, // Text size (glyphs max height)
+ TEXT_SPACING, // Text spacing between glyphs
+ LINE_COLOR, // Line control color
+ BACKGROUND_COLOR, // Background color
+ TEXT_LINE_SPACING, // Text spacing between lines
+ TEXT_ALIGNMENT_VERTICAL, // Text vertical alignment inside text bounds (after border and padding)
+ TEXT_WRAP_MODE // Text wrap-mode inside text bounds
+ //TEXT_DECORATION // Text decoration: 0-None, 1-Underline, 2-Line-through, 3-Overline
+ //TEXT_DECORATION_THICK // Text decoration line thickness
+} GuiDefaultProperty;
+
+// Other possible text properties:
+// TEXT_WEIGHT // Normal, Italic, Bold -> Requires specific font change
+// TEXT_INDENT // Text indentation -> Now using TEXT_PADDING...
+
+// Label
+//typedef enum { } GuiLabelProperty;
+
+// Button/Spinner
+//typedef enum { } GuiButtonProperty;
+
+// Toggle/ToggleGroup
+typedef enum {
+ GROUP_PADDING = 16, // ToggleGroup separation between toggles
+} GuiToggleProperty;
+
+// Slider/SliderBar
+typedef enum {
+ SLIDER_WIDTH = 16, // Slider size of internal bar
+ SLIDER_PADDING // Slider/SliderBar internal bar padding
+} GuiSliderProperty;
+
+// ProgressBar
+typedef enum {
+ PROGRESS_PADDING = 16, // ProgressBar internal padding
+} GuiProgressBarProperty;
+
+// ScrollBar
+typedef enum {
+ ARROWS_SIZE = 16, // ScrollBar arrows size
+ ARROWS_VISIBLE, // ScrollBar arrows visible
+ SCROLL_SLIDER_PADDING, // ScrollBar slider internal padding
+ SCROLL_SLIDER_SIZE, // ScrollBar slider size
+ SCROLL_PADDING, // ScrollBar scroll padding from arrows
+ SCROLL_SPEED, // ScrollBar scrolling speed
+} GuiScrollBarProperty;
+
+// CheckBox
+typedef enum {
+ CHECK_PADDING = 16 // CheckBox internal check padding
+} GuiCheckBoxProperty;
+
+// ComboBox
+typedef enum {
+ COMBO_BUTTON_WIDTH = 16, // ComboBox right button width
+ COMBO_BUTTON_SPACING // ComboBox button separation
+} GuiComboBoxProperty;
+
+// DropdownBox
+typedef enum {
+ ARROW_PADDING = 16, // DropdownBox arrow separation from border and items
+ DROPDOWN_ITEMS_SPACING, // DropdownBox items separation
+ DROPDOWN_ARROW_HIDDEN, // DropdownBox arrow hidden
+ DROPDOWN_ROLL_UP // DropdownBox roll up flag (default rolls down)
+} GuiDropdownBoxProperty;
+
+// TextBox/TextBoxMulti/ValueBox/Spinner
+typedef enum {
+ TEXT_READONLY = 16, // TextBox in read-only mode: 0-text editable, 1-text no-editable
+} GuiTextBoxProperty;
+
+// Spinner
+typedef enum {
+ SPIN_BUTTON_WIDTH = 16, // Spinner left/right buttons width
+ SPIN_BUTTON_SPACING, // Spinner buttons separation
+} GuiSpinnerProperty;
+
+// ListView
+typedef enum {
+ LIST_ITEMS_HEIGHT = 16, // ListView items height
+ LIST_ITEMS_SPACING, // ListView items separation
+ SCROLLBAR_WIDTH, // ListView scrollbar size (usually width)
+ SCROLLBAR_SIDE, // ListView scrollbar side (0-SCROLLBAR_LEFT_SIDE, 1-SCROLLBAR_RIGHT_SIDE)
+ LIST_ITEMS_BORDER_WIDTH // ListView items border width
+} GuiListViewProperty;
+
+// ColorPicker
+typedef enum {
+ COLOR_SELECTOR_SIZE = 16,
+ HUEBAR_WIDTH, // ColorPicker right hue bar width
+ HUEBAR_PADDING, // ColorPicker right hue bar separation from panel
+ HUEBAR_SELECTOR_HEIGHT, // ColorPicker right hue bar selector height
+ HUEBAR_SELECTOR_OVERFLOW // ColorPicker right hue bar selector overflow
+} GuiColorPickerProperty;
+
+#define SCROLLBAR_LEFT_SIDE 0
+#define SCROLLBAR_RIGHT_SIDE 1
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition
+//----------------------------------------------------------------------------------
+// ...
+
+//----------------------------------------------------------------------------------
+// Module Functions Declaration
+//----------------------------------------------------------------------------------
+
+#if defined(__cplusplus)
+extern "C" { // Prevents name mangling of functions
+#endif
+
+// Global gui state control functions
+RAYGUIAPI void GuiEnable(void); // Enable gui controls (global state)
+RAYGUIAPI void GuiDisable(void); // Disable gui controls (global state)
+RAYGUIAPI void GuiLock(void); // Lock gui controls (global state)
+RAYGUIAPI void GuiUnlock(void); // Unlock gui controls (global state)
+RAYGUIAPI bool GuiIsLocked(void); // Check if gui is locked (global state)
+RAYGUIAPI void GuiSetAlpha(float alpha); // Set gui controls alpha (global state), alpha goes from 0.0f to 1.0f
+RAYGUIAPI void GuiSetState(int state); // Set gui state (global state)
+RAYGUIAPI int GuiGetState(void); // Get gui state (global state)
+
+// Font set/get functions
+RAYGUIAPI void GuiSetFont(Font font); // Set gui custom font (global state)
+RAYGUIAPI Font GuiGetFont(void); // Get gui custom font (global state)
+
+// Style set/get functions
+RAYGUIAPI void GuiSetStyle(int control, int property, int value); // Set one style property
+RAYGUIAPI int GuiGetStyle(int control, int property); // Get one style property
+
+// Styles loading functions
+RAYGUIAPI void GuiLoadStyle(const char *fileName); // Load style file over global style variable (.rgs)
+RAYGUIAPI void GuiLoadStyleDefault(void); // Load style default over global style
+
+// Tooltips management functions
+RAYGUIAPI void GuiEnableTooltip(void); // Enable gui tooltips (global state)
+RAYGUIAPI void GuiDisableTooltip(void); // Disable gui tooltips (global state)
+RAYGUIAPI void GuiSetTooltip(const char *tooltip); // Set tooltip string
+
+// Icons functionality
+RAYGUIAPI const char *GuiIconText(int iconId, const char *text); // Get text with icon id prepended (if supported)
+#if !defined(RAYGUI_NO_ICONS)
+RAYGUIAPI void GuiSetIconScale(int scale); // Set default icon drawing size
+RAYGUIAPI unsigned int *GuiGetIcons(void); // Get raygui icons data pointer
+RAYGUIAPI char **GuiLoadIcons(const char *fileName, bool loadIconsName); // Load raygui icons file (.rgi) into internal icons data
+RAYGUIAPI void GuiDrawIcon(int iconId, int posX, int posY, int pixelSize, Color color); // Draw icon using pixel size at specified position
+#endif
+
+// Controls
+//----------------------------------------------------------------------------------------------------------
+// Container/separator controls, useful for controls organization
+RAYGUIAPI int GuiWindowBox(Rectangle bounds, const char *title); // Window Box control, shows a window that can be closed
+RAYGUIAPI int GuiGroupBox(Rectangle bounds, const char *text); // Group Box control with text name
+RAYGUIAPI int GuiLine(Rectangle bounds, const char *text); // Line separator control, could contain text
+RAYGUIAPI int GuiPanel(Rectangle bounds, const char *text); // Panel control, useful to group controls
+RAYGUIAPI int GuiTabBar(Rectangle bounds, const char **text, int count, int *active); // Tab Bar control, returns TAB to be closed or -1
+RAYGUIAPI int GuiScrollPanel(Rectangle bounds, const char *text, Rectangle content, Vector2 *scroll, Rectangle *view); // Scroll Panel control
+
+// Basic controls set
+RAYGUIAPI int GuiLabel(Rectangle bounds, const char *text); // Label control
+RAYGUIAPI int GuiButton(Rectangle bounds, const char *text); // Button control, returns true when clicked
+RAYGUIAPI int GuiLabelButton(Rectangle bounds, const char *text); // Label button control, returns true when clicked
+RAYGUIAPI int GuiToggle(Rectangle bounds, const char *text, bool *active); // Toggle Button control
+RAYGUIAPI int GuiToggleGroup(Rectangle bounds, const char *text, int *active); // Toggle Group control
+RAYGUIAPI int GuiToggleSlider(Rectangle bounds, const char *text, int *active); // Toggle Slider control
+RAYGUIAPI int GuiCheckBox(Rectangle bounds, const char *text, bool *checked); // Check Box control, returns true when active
+RAYGUIAPI int GuiComboBox(Rectangle bounds, const char *text, int *active); // Combo Box control
+
+RAYGUIAPI int GuiDropdownBox(Rectangle bounds, const char *text, int *active, bool editMode); // Dropdown Box control
+RAYGUIAPI int GuiSpinner(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Spinner control
+RAYGUIAPI int GuiValueBox(Rectangle bounds, const char *text, int *value, int minValue, int maxValue, bool editMode); // Value Box control, updates input text with numbers
+RAYGUIAPI int GuiValueBoxFloat(Rectangle bounds, const char *text, char *textValue, float *value, bool editMode); // Value box control for float values
+RAYGUIAPI int GuiTextBox(Rectangle bounds, char *text, int textSize, bool editMode); // Text Box control, updates input text
+
+RAYGUIAPI int GuiSlider(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue); // Slider control
+RAYGUIAPI int GuiSliderBar(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue); // Slider Bar control
+RAYGUIAPI int GuiProgressBar(Rectangle bounds, const char *textLeft, const char *textRight, float *value, float minValue, float maxValue); // Progress Bar control
+RAYGUIAPI int GuiStatusBar(Rectangle bounds, const char *text); // Status Bar control, shows info text
+RAYGUIAPI int GuiDummyRec(Rectangle bounds, const char *text); // Dummy control for placeholders
+RAYGUIAPI int GuiGrid(Rectangle bounds, const char *text, float spacing, int subdivs, Vector2 *mouseCell); // Grid control
+
+// Advance controls set
+RAYGUIAPI int GuiListView(Rectangle bounds, const char *text, int *scrollIndex, int *active); // List View control
+RAYGUIAPI int GuiListViewEx(Rectangle bounds, const char **text, int count, int *scrollIndex, int *active, int *focus); // List View with extended parameters
+RAYGUIAPI int GuiMessageBox(Rectangle bounds, const char *title, const char *message, const char *buttons); // Message Box control, displays a message
+RAYGUIAPI int GuiTextInputBox(Rectangle bounds, const char *title, const char *message, const char *buttons, char *text, int textMaxSize, bool *secretViewActive); // Text Input Box control, ask for text, supports secret
+RAYGUIAPI int GuiColorPicker(Rectangle bounds, const char *text, Color *color); // Color Picker control (multiple color controls)
+RAYGUIAPI int GuiColorPanel(Rectangle bounds, const char *text, Color *color); // Color Panel control
+RAYGUIAPI int GuiColorBarAlpha(Rectangle bounds, const char *text, float *alpha); // Color Bar Alpha control
+RAYGUIAPI int GuiColorBarHue(Rectangle bounds, const char *text, float *value); // Color Bar Hue control
+RAYGUIAPI int GuiColorPickerHSV(Rectangle bounds, const char *text, Vector3 *colorHsv); // Color Picker control that avoids conversion to RGB on each call (multiple color controls)
+RAYGUIAPI int GuiColorPanelHSV(Rectangle bounds, const char *text, Vector3 *colorHsv); // Color Panel control that updates Hue-Saturation-Value color value, used by GuiColorPickerHSV()
+//----------------------------------------------------------------------------------------------------------
+
+#if !defined(RAYGUI_NO_ICONS)
+
+#if !defined(RAYGUI_CUSTOM_ICONS)
+//----------------------------------------------------------------------------------
+// Icons enumeration
+//----------------------------------------------------------------------------------
+typedef enum {
+ ICON_NONE = 0,
+ ICON_FOLDER_FILE_OPEN = 1,
+ ICON_FILE_SAVE_CLASSIC = 2,
+ ICON_FOLDER_OPEN = 3,
+ ICON_FOLDER_SAVE = 4,
+ ICON_FILE_OPEN = 5,
+ ICON_FILE_SAVE = 6,
+ ICON_FILE_EXPORT = 7,
+ ICON_FILE_ADD = 8,
+ ICON_FILE_DELETE = 9,
+ ICON_FILETYPE_TEXT = 10,
+ ICON_FILETYPE_AUDIO = 11,
+ ICON_FILETYPE_IMAGE = 12,
+ ICON_FILETYPE_PLAY = 13,
+ ICON_FILETYPE_VIDEO = 14,
+ ICON_FILETYPE_INFO = 15,
+ ICON_FILE_COPY = 16,
+ ICON_FILE_CUT = 17,
+ ICON_FILE_PASTE = 18,
+ ICON_CURSOR_HAND = 19,
+ ICON_CURSOR_POINTER = 20,
+ ICON_CURSOR_CLASSIC = 21,
+ ICON_PENCIL = 22,
+ ICON_PENCIL_BIG = 23,
+ ICON_BRUSH_CLASSIC = 24,
+ ICON_BRUSH_PAINTER = 25,
+ ICON_WATER_DROP = 26,
+ ICON_COLOR_PICKER = 27,
+ ICON_RUBBER = 28,
+ ICON_COLOR_BUCKET = 29,
+ ICON_TEXT_T = 30,
+ ICON_TEXT_A = 31,
+ ICON_SCALE = 32,
+ ICON_RESIZE = 33,
+ ICON_FILTER_POINT = 34,
+ ICON_FILTER_BILINEAR = 35,
+ ICON_CROP = 36,
+ ICON_CROP_ALPHA = 37,
+ ICON_SQUARE_TOGGLE = 38,
+ ICON_SYMMETRY = 39,
+ ICON_SYMMETRY_HORIZONTAL = 40,
+ ICON_SYMMETRY_VERTICAL = 41,
+ ICON_LENS = 42,
+ ICON_LENS_BIG = 43,
+ ICON_EYE_ON = 44,
+ ICON_EYE_OFF = 45,
+ ICON_FILTER_TOP = 46,
+ ICON_FILTER = 47,
+ ICON_TARGET_POINT = 48,
+ ICON_TARGET_SMALL = 49,
+ ICON_TARGET_BIG = 50,
+ ICON_TARGET_MOVE = 51,
+ ICON_CURSOR_MOVE = 52,
+ ICON_CURSOR_SCALE = 53,
+ ICON_CURSOR_SCALE_RIGHT = 54,
+ ICON_CURSOR_SCALE_LEFT = 55,
+ ICON_UNDO = 56,
+ ICON_REDO = 57,
+ ICON_REREDO = 58,
+ ICON_MUTATE = 59,
+ ICON_ROTATE = 60,
+ ICON_REPEAT = 61,
+ ICON_SHUFFLE = 62,
+ ICON_EMPTYBOX = 63,
+ ICON_TARGET = 64,
+ ICON_TARGET_SMALL_FILL = 65,
+ ICON_TARGET_BIG_FILL = 66,
+ ICON_TARGET_MOVE_FILL = 67,
+ ICON_CURSOR_MOVE_FILL = 68,
+ ICON_CURSOR_SCALE_FILL = 69,
+ ICON_CURSOR_SCALE_RIGHT_FILL = 70,
+ ICON_CURSOR_SCALE_LEFT_FILL = 71,
+ ICON_UNDO_FILL = 72,
+ ICON_REDO_FILL = 73,
+ ICON_REREDO_FILL = 74,
+ ICON_MUTATE_FILL = 75,
+ ICON_ROTATE_FILL = 76,
+ ICON_REPEAT_FILL = 77,
+ ICON_SHUFFLE_FILL = 78,
+ ICON_EMPTYBOX_SMALL = 79,
+ ICON_BOX = 80,
+ ICON_BOX_TOP = 81,
+ ICON_BOX_TOP_RIGHT = 82,
+ ICON_BOX_RIGHT = 83,
+ ICON_BOX_BOTTOM_RIGHT = 84,
+ ICON_BOX_BOTTOM = 85,
+ ICON_BOX_BOTTOM_LEFT = 86,
+ ICON_BOX_LEFT = 87,
+ ICON_BOX_TOP_LEFT = 88,
+ ICON_BOX_CENTER = 89,
+ ICON_BOX_CIRCLE_MASK = 90,
+ ICON_POT = 91,
+ ICON_ALPHA_MULTIPLY = 92,
+ ICON_ALPHA_CLEAR = 93,
+ ICON_DITHERING = 94,
+ ICON_MIPMAPS = 95,
+ ICON_BOX_GRID = 96,
+ ICON_GRID = 97,
+ ICON_BOX_CORNERS_SMALL = 98,
+ ICON_BOX_CORNERS_BIG = 99,
+ ICON_FOUR_BOXES = 100,
+ ICON_GRID_FILL = 101,
+ ICON_BOX_MULTISIZE = 102,
+ ICON_ZOOM_SMALL = 103,
+ ICON_ZOOM_MEDIUM = 104,
+ ICON_ZOOM_BIG = 105,
+ ICON_ZOOM_ALL = 106,
+ ICON_ZOOM_CENTER = 107,
+ ICON_BOX_DOTS_SMALL = 108,
+ ICON_BOX_DOTS_BIG = 109,
+ ICON_BOX_CONCENTRIC = 110,
+ ICON_BOX_GRID_BIG = 111,
+ ICON_OK_TICK = 112,
+ ICON_CROSS = 113,
+ ICON_ARROW_LEFT = 114,
+ ICON_ARROW_RIGHT = 115,
+ ICON_ARROW_DOWN = 116,
+ ICON_ARROW_UP = 117,
+ ICON_ARROW_LEFT_FILL = 118,
+ ICON_ARROW_RIGHT_FILL = 119,
+ ICON_ARROW_DOWN_FILL = 120,
+ ICON_ARROW_UP_FILL = 121,
+ ICON_AUDIO = 122,
+ ICON_FX = 123,
+ ICON_WAVE = 124,
+ ICON_WAVE_SINUS = 125,
+ ICON_WAVE_SQUARE = 126,
+ ICON_WAVE_TRIANGULAR = 127,
+ ICON_CROSS_SMALL = 128,
+ ICON_PLAYER_PREVIOUS = 129,
+ ICON_PLAYER_PLAY_BACK = 130,
+ ICON_PLAYER_PLAY = 131,
+ ICON_PLAYER_PAUSE = 132,
+ ICON_PLAYER_STOP = 133,
+ ICON_PLAYER_NEXT = 134,
+ ICON_PLAYER_RECORD = 135,
+ ICON_MAGNET = 136,
+ ICON_LOCK_CLOSE = 137,
+ ICON_LOCK_OPEN = 138,
+ ICON_CLOCK = 139,
+ ICON_TOOLS = 140,
+ ICON_GEAR = 141,
+ ICON_GEAR_BIG = 142,
+ ICON_BIN = 143,
+ ICON_HAND_POINTER = 144,
+ ICON_LASER = 145,
+ ICON_COIN = 146,
+ ICON_EXPLOSION = 147,
+ ICON_1UP = 148,
+ ICON_PLAYER = 149,
+ ICON_PLAYER_JUMP = 150,
+ ICON_KEY = 151,
+ ICON_DEMON = 152,
+ ICON_TEXT_POPUP = 153,
+ ICON_GEAR_EX = 154,
+ ICON_CRACK = 155,
+ ICON_CRACK_POINTS = 156,
+ ICON_STAR = 157,
+ ICON_DOOR = 158,
+ ICON_EXIT = 159,
+ ICON_MODE_2D = 160,
+ ICON_MODE_3D = 161,
+ ICON_CUBE = 162,
+ ICON_CUBE_FACE_TOP = 163,
+ ICON_CUBE_FACE_LEFT = 164,
+ ICON_CUBE_FACE_FRONT = 165,
+ ICON_CUBE_FACE_BOTTOM = 166,
+ ICON_CUBE_FACE_RIGHT = 167,
+ ICON_CUBE_FACE_BACK = 168,
+ ICON_CAMERA = 169,
+ ICON_SPECIAL = 170,
+ ICON_LINK_NET = 171,
+ ICON_LINK_BOXES = 172,
+ ICON_LINK_MULTI = 173,
+ ICON_LINK = 174,
+ ICON_LINK_BROKE = 175,
+ ICON_TEXT_NOTES = 176,
+ ICON_NOTEBOOK = 177,
+ ICON_SUITCASE = 178,
+ ICON_SUITCASE_ZIP = 179,
+ ICON_MAILBOX = 180,
+ ICON_MONITOR = 181,
+ ICON_PRINTER = 182,
+ ICON_PHOTO_CAMERA = 183,
+ ICON_PHOTO_CAMERA_FLASH = 184,
+ ICON_HOUSE = 185,
+ ICON_HEART = 186,
+ ICON_CORNER = 187,
+ ICON_VERTICAL_BARS = 188,
+ ICON_VERTICAL_BARS_FILL = 189,
+ ICON_LIFE_BARS = 190,
+ ICON_INFO = 191,
+ ICON_CROSSLINE = 192,
+ ICON_HELP = 193,
+ ICON_FILETYPE_ALPHA = 194,
+ ICON_FILETYPE_HOME = 195,
+ ICON_LAYERS_VISIBLE = 196,
+ ICON_LAYERS = 197,
+ ICON_WINDOW = 198,
+ ICON_HIDPI = 199,
+ ICON_FILETYPE_BINARY = 200,
+ ICON_HEX = 201,
+ ICON_SHIELD = 202,
+ ICON_FILE_NEW = 203,
+ ICON_FOLDER_ADD = 204,
+ ICON_ALARM = 205,
+ ICON_CPU = 206,
+ ICON_ROM = 207,
+ ICON_STEP_OVER = 208,
+ ICON_STEP_INTO = 209,
+ ICON_STEP_OUT = 210,
+ ICON_RESTART = 211,
+ ICON_BREAKPOINT_ON = 212,
+ ICON_BREAKPOINT_OFF = 213,
+ ICON_BURGER_MENU = 214,
+ ICON_CASE_SENSITIVE = 215,
+ ICON_REG_EXP = 216,
+ ICON_FOLDER = 217,
+ ICON_FILE = 218,
+ ICON_SAND_TIMER = 219,
+ ICON_WARNING = 220,
+ ICON_HELP_BOX = 221,
+ ICON_INFO_BOX = 222,
+ ICON_PRIORITY = 223,
+ ICON_LAYERS_ISO = 224,
+ ICON_LAYERS2 = 225,
+ ICON_MLAYERS = 226,
+ ICON_MAPS = 227,
+ ICON_HOT = 228,
+ ICON_229 = 229,
+ ICON_230 = 230,
+ ICON_231 = 231,
+ ICON_232 = 232,
+ ICON_233 = 233,
+ ICON_234 = 234,
+ ICON_235 = 235,
+ ICON_236 = 236,
+ ICON_237 = 237,
+ ICON_238 = 238,
+ ICON_239 = 239,
+ ICON_240 = 240,
+ ICON_241 = 241,
+ ICON_242 = 242,
+ ICON_243 = 243,
+ ICON_244 = 244,
+ ICON_245 = 245,
+ ICON_246 = 246,
+ ICON_247 = 247,
+ ICON_248 = 248,
+ ICON_249 = 249,
+ ICON_250 = 250,
+ ICON_251 = 251,
+ ICON_252 = 252,
+ ICON_253 = 253,
+ ICON_254 = 254,
+ ICON_255 = 255,
+} GuiIconName;
+#endif
+
+#endif
+
+#if defined(__cplusplus)
+} // Prevents name mangling of functions
+#endif
+
+#endif // RAYGUI_H
+
+/***********************************************************************************
+*
+* RAYGUI IMPLEMENTATION
+*
+************************************************************************************/
+
+#if defined(RAYGUI_IMPLEMENTATION)
+
+#include Pb2TOFr{p4(z5KS>wJ^j ziu60aH6%%m0gl07@?covO{StYxFJ4 z35@P`Qu)d%mX>!fYHYrkml^a y)bhE+4#_>)m8_WA+s zVL;9HOSYl_rhYOENBLGSu(7FPn?{+Z&}#i|q$23H13D6qy5>*M#N5PQ`jK>c8U3VM z?%8 V!~J*|f`Si74&Mb0#`z#7iW=E`e}pqs1XeBvsc~(# zJ}eF!P!W~0c2*D1OiTrJDkXoGHqPjQVV6fFwIdfhYwq$C%4bjQJ)Q$Z{u6ddbEFWr zVSP3C=*0AkJkjs&;D#Q6529Q^>uuI}n$!;4fJ%vTts^)Lu5@cK0k?WKvep|pq!J?< z78%T9uB+$~d+e& N49B6_Zp+p0(y|D!^j7@{ z63=g&Rgkk;w7%snIU$Iii+&7Rx4%*-V_wk|vd1WXhZ|5O{`y(EPBGXSwYWuS@$D3R zp~R@!`GMxuzPtqa-R&*#^Gf%2gv}3WUb?jNIopbhed>M7ZC~#{(@`1BKQ^0-U2DQ7 zBhvjIRc0s`)o{vh!LFM-iO(Uo_rIAtbDmPRA9|90SM!Q3A=&FBjZ!nY(@{ja5jfWu zPK{`sHP;=#IngndSVDa7rpo5_IIO(L=JL`~zn?{S#&r0BI!Lu%3FOOXDt0^fae4mU zfh~uA(2$E(Kkw*OL1Y>N)|NWA!q8DHU=ztC7HItzOTI>T55m27o`X!=`B_J5r{)BT zUN5;5j(RQdtqX|qdK++{qq?tiT}R;ZT+`TQ3up+5Y@$ea-lckMY9%Z++fOYX?F-@i zA2gG>u%|*KkBoe|!RV%LjeN8 `mG=CJ%3* zC7AD#hjingZYjn*F{&Sp@t=-b>-q0n=iuV#cF$h9aaZiP3Vxgm`s4l)?Lo~|$>+wW zk7O=hq&H;^%e>5V8HBlDWQ48i?CAJ*{!n5QK_@PgJUcrp5mu$pEC#!MppG41jXr5` zy?qr({{ub(XgLo0Leo0H?qZF7wnL1pW+-=wsy%SHVHV-jgLl1?3o*e>rL@ZDyN{OT zwor@#*ECTgIY^!7S=_EQhd`b>`>59F;KfLY{lh(HK`m>wRTTp7$fak?!A v%~Kr?~gRDyilCntfaeJ;O5SP7bdJL|92&b|QxLaz-sSI8oxd z#*3C*7f!)AKd5$3)i6ih;#@LuSdz3TgmN1A5!LGXhUZ3ZeR0EZ)B`yo^GxqI-fCA5 zbfV#)5t^WEJi^84inEC_8acILb2|;Kz&4YWVq>IKax=@iaA%Ei?d6MBeJ3YH5nWiC zUS!&@&UQXA9Ao6XdNl~~mG06*>C33-)(rR8W?B0a#z)F|L}GL{z{H-?h4nRR5SgDi zg6s47W*wZ5&kyI&;m65e_#MfC(% 9WedT5fmSLY&;OPZz7XW+REhpt={i zBnwkA2t?tMZwX^VRuek;UcapV`|-$cZ-tkunfkV{S4!wE`$KrRH$QI|jl$*OQtD~9 zn<8T1t4PNw#~FLvnFi3ux}oNp$9u=8o8sMrsfu`y4F%UAI27J_U<|*SZrS8C{Oq>% zLI?9GyZpVdP)OJD;1`ZR;?AtS8w6LFu!}Gxx6g4;(&4jS&b)J0t|L_2dgLUAw~9td z=QT14t)UM`iDc@>AM^s1MoeB8<1#^I2GjHiL`2pz5$}L-2KfOp`JF06EQ3;ab`5ip zRo_7?Qnb~FluDJ_!+Cd)Ux~=sP$68=OD}+VU>qeGTJr(1Cr}~}QTd$`q@=%cb5>2P z)TbpPGs29@e0T+^`GA@bNEAi9NV<}yHS>J@3dSXJ);4gQutNIEyH82if_R8&iS%Ge z&q6oUY>E{OFWJ9!{`=s@jgmVtoS(Q%H-gA1t@Sl!0iV3`2D!PaDr%U+8jC=bI47Ye z7$FY&%|(5g1u>BiHAe$E=mzX4+~I_sMLpynO{$!1BC>y4vYj~h$^ZSi8;Xj&(W1ro zhGed$Hie_tm@*o3dc5>bUz}^x+eEv$%3V3EgIWv?FO3=#`|w#U890A>tx`y=m6NF! z1FyFzN=E^rSj74q9^N57L>e%>#f^orUy7H7j3=zp6kMaJhY<4o`JOzM`tO_b?+X3? zAbE7~fd9ww_v|4?A<214(6avPg5DMLu&a3vSsbS#+lm93jwUCCK8b; $ zsnBeVXb$mW#yvB(k6!dj*k1iFloF>2G1l+=KdS$(|0gYk^d+YOgYuFxD`E=+8f%E< zY#NVw0!ABx4#RD-5qEc4#qJ8tVB3e98oP#X#`wvk{g#dL%~lxPvORAFvVE~ d@~38*V~vl-7J_8*7%#E0`BuypkneqcxuDlj0%n_Rf*^%!pUn(NnvGdqHIL-Q zhr!fXH=#9gOP3*0OkdPunob_y(qL{FJX@9Kdx@*B;~E7esJQ+1AhEaPVu-w*o-o7! z?~2~GqeCl}YYrZssgueJPZ^jDMaUL6#&9TkAq2==H z$ABVna}I0UT|jxqdsOkqvqN&_=7O5htvd;F C)T2vsmB@MV*V1?sg890V~kD9piIT;ihyUWBpc>EzaPun#>;avVn@ z8_t^1O7E}5v|HxhobV+g!zc<1plMs`*?`-(!?rpFX%ysG=1qK}%0NmA_P{JM-bbw% zyfKK8Mj|ECVsW4^a9@arA+qR-C$WcwBEzaYLzb @~8!%wP9k|H{ -4- zkieKvYn{L8cx$^=N)YkgxzZL)K~>!PBOJmPhX81bVnT++g^viqAv6@Hf85u20bHXx zm#J|<;NgDZ=O~qZc)YXD@07cAj2x2BqC6HCzhfjvY0g!n$6{G#GwDw|qS(_h5k;7D zlTTlzlI0KuonejaX-y$Az!!u8U9R91T+-@E%R@+-`Q^b54e29UW3DIsjkfK{B}eaG z_BSv&JD+(KF$UDsFzJOxwlqw`-L9qISFenk5$mrc$d|6Z ?l-#PiKX^Ll?|=!d8IftkLsG%S4R+Wh}Ql(xdCI1 zgx%W%%V~^Ux&d>)k0%a8Humkux%P>^SvEh}vsI+X9E$PSTK`ndjtly%rE5P1I@Mm4 z-@R>!Dt<&nWk RdgXv2<%P=10)JSLV zT !SmRY}mH}fxI$_!D_RJHL^ zwLw8rd0`QDPrA?XJA=F$9#oKje3TT9lK5QWPJK>zC->A+N;}H_PA%&sGIyyb2Gwz3 z?9APaYAOUlU2LqSbT8I)7#_TsYwwJ(Oq`;SwhpSAOZSNzw0hC^GgAgu8PIV9-@D0K zRaZtnMq21S#)!|(Ixm`gsfRgzVnbOs{uBP~#Cu8i_Ron4j8W#T-$fzbHyE1HJbSDu zUJi?J5+9PPBALiNy1Gz$RHL=39E%3x_osS|mwv*64eolR`V9{Iw%WHu2rmlVcJ|F$ z+5Ji90PzC0I8n%cS*E(Egrj3Q5WZ)XCK5bhK$+hgXu`5;OmJ#4(mL_M(aqR97qlWB zb0(WcbwZZfv`qj-r|$%|pRGx@Yb2~bQ+46IkiDurcm)$OCs2~Xf827-mw$cYpEdPb z^|sLl{W~3n(_xA0w?gbLv4Cg%%!-vT0)1pjH6iril>jAI1YhWl>G +qg!G zMX-MeVHmx?{#Kxhtyo99J=9++NQXYPpH6};;%Q*q;{B<}7*Ih4`Nb80 < z1vHM=%oKBsRSo;vbN1Hoh(Sdr>uZQaY=FgJi%hRI)9fx=lxdLp7@k-BKDjJ%v+WP* z)Nn#x Qn^DeA2kqcXZ1K2l-jAJ1cn9Ij+d16=rSrZ?w&+B;k>kIn z=0C0_>*Y67_i9XI>9b4Qj_NiQYpgraVit)0b! z&DFEEjw9WuoX?1Ge6Agp8|vh-JvAu~HSDXJ6oK`AgN}vlrW@5Rtp|~pS}QBwh#Gx$ z?t9P~$_roUt;F5!bBDfd !$Whcqkq_Xa+=S6>(jFY#z;ftJVdj7e(y1J@y z)8zu+<~EipP7hnpf6zB1e_I#2>D~6LX>V4hjL GsXVK;vl;Zv0I4CH;eE(9LAuqI3 z_%J iXk6tShQRos*s;GgQO_Br)+0q5OEhEP^18J+d2;hc@W4YdW#z>pk!K~=%R zs9k( hNyr{Ljr@BObDfZ#17yG_PDm z@dUE8A%ww+Odw#F$%WgcBwr&XE6bD?=k1yuqsJH~miIa`z#}!IWP@l~f+1suUX@{J z6uNsO ^-Vxwx#Ucq7n5m zY)bbMw_%CdrDNd$jt?+LI9 &y%({x zitkBB{CL4`KOubw^3fMBo3DfUgIojmNB5kLm-_y6T=QkeFr})dMKnrQs5``=f5Hoo zf_(FEp?0N05vdlL$XCC9ZFXT%aN`LSd8K)FO5KfxM?;7_2# -WG?wo2?+54kcWV2?m&9Hv&}~BrD@C znavr@6tx%!z*s%*cS}RkYMjC7^ko$~1SIS=GPbdKAf<^0%_uElV=^%c;2tugF1x0Q zN%kg15b!Exv9ghZ-==U7e6KqsOmZ-RO4G3nmH}ri tRvwcu)h9Z6B_rWT`W;x%&H(&N2Jg_Qc0;g23XTX?XBy8KC!XW;2(;s z9tzMN-8<2@m*C%C5%DrD&?P*EPOiws$LrOdzMBZDE<=f#G~}Cz|5ob_$${(ZRT}yq z)u?*A=&3}_0b?_^$yXH@V`R-Yc4yx-`ERszUi?QL`Lqy|5hqcM-$U?Z%)K-kBFFE> zSA)RxzH0#?;z;Ky6&FWWNxXNCi%*I4W204Rg4{S0`*+x*pAr6@HwRgMaiNt?SL9R} z2pVJK)Ij3?OX6lw__*E*WJN`uYf>!ntrK=&coH5v3*@=$Zs9ItA6rxB>r%QiGfo8+ zzQdwg#u6ej8}%~J<;5#ywV#KGC=S~CK?&Z?ViMPTc+;z}Gf806&;0ikE%}+arTWL1 zM)aK5BGCaAFBN-FLf&_FoHZ;Jvt7!5#{VXHS$|-6Gw%!Cd`pW^ES0t!Nc>=;=i4kd z=(>3bN2(^7VjgbhNZvs>QTtqjEXuS6Rw$^4T`#>)6WhnURX1|dlzxeQ-IT?a_9cBf z-TU#qPhC1}KzZYS^hVI7J+^v_?Y~CX{?`1gxZb589grDwi4wf}DJB5q DTe4l9RSV zy()Lek0WpV!*;eB1o%9oBm3!ez_w8OFibHQ%DCNWeEnH;=!UmYhS@-XDJ3Wl9+`K# zxl21cnz;4q?0DO!^?vm%mKt>MZ&{5n@Lu6Yl !d@5z zd{^N&eef9yd&>G1C^XwVc_d3MP4K&DmQqdzXM1d}C?cj_;Ns5JjF+1(7-;R+HnkZ% z?|eyVrHz_He8pcYi#5EAR u33j*wEIt ;JVz{ELTc8%N*RJ zxxRnVqPCbcTm9%g{l`mrU)3IUz5GM-{JU{;99`!=6|pg^Qq{;~ 6HLfj(JQBljln8kV?(+blfzCyxtBg@2QG$e9(Iyy>6C(0%g#*Y0d}-^ThcA!PEZ zax{~0(XDSvLfU^fU;TOSa!5H X#n)+iw`D)bwcT`5+q3ykcVHjjN{pjRR>%#ny@ L{sc5sZZiKdb!1& zS5GdHyodm=B@ao`gT-)_ked-g9F1-rYC6ReZtJy%cQYQk@(lSId!b$EA0<02oiz~* zF(nCb88=nutAh$cbti*lM{ z|~|2G0-RNM4xmotxSHHPGD z;%WJaT?u>NoWY B_Mg$zvzgQHG`P%{8Y{Y zC=QACKHbvroZ3uK84~4K;d(nC;96;DyL+1QZ*HzLL8lA+vvcq(-0w3`Rn3KL@-w(6 zA@M39S9Jsidltrz7@w2nifDHOo`(~O8dz-hCN?K8?`!^sd><-y3|!=f93*npaO& zR#}A4`wm{6E(R=jJ$&@OqoWDSxi&lT9yb`6gD%x%fA#D4`pGW^sR7y$zWL4U>>De- zXA4QY-Y7;Nw)n%;oXb1K_R16XWuF>!zisOApgB0iB1^Cjf@Ek?uLZYp=&NOk+xV1M z=hgq|tl&_GvU$j5ej`pWIA|HMO`|>Cpf)k6l?6(}F2!2}REA7p?Q}nAswHg2fsV$X z{36z-1val10qw LPW-!Y8 4*{Rv=5y>}CLEL;U>jnx5^| zbS6=j)+poay1eP$s>ZOLdC-%8j_K|FDZuZ;zUqG|IOR>T07%^Nl@Ge*mnJv$M|g0C z*^1Z2JNL~a|JlY@JjhQ-DER@uc)uIZE@bxA=QmQaBFZc`EMx}RL&XbV7Qcn_G|JAQ z0r~;g6 PfJg%`fJYWi&v?j96V+p;_RpkQN(1%N&rU;>L$a3 zms7Wb&h@ulKFU0L|M&1u^{byNF|*aP eoE9oMD$8d!)$@K;kl;b2kdv h!VLsRyP7;bSY{u#0C*HA)?^oroltLhS4$xMEoFuVA&b_%3iR9 z?d$#VBgM^P1C#WOvQ#flw?~hD6+18MdOEKsVWnbrf{jMn1COK+*Uz=x*Plu4{ ||QK|a4uTmJWXeW1k#|>*}4I}+oKYC;Q{wxW) z`Yf&Myus|T?jC2_kBiGrlwN5ju Xvdi$d*`MUl|k=e7MKw+tj wGwMY)U~h1*{rO%Q!aJ=j z6pou&yb pZ^Wgj!<9GtQcLIo?Zl;i(B*v%D;lfS%y z&OBeVl^H9 v0q9$P5aQNHL!JunS3?H `ucIJx$%Qs~&hca4uV)S78_BmLo;w=zvzqlI1L$R%NQUso_IJgsU)yM- zZ}V)L_UKl*2O6@ZZM8=V<(ixHJP+T`_utao`Z;Q}C58R9Xr=LSoeai+|D`DX1R<{M zDL-=s8-^Qn@hU$kAe zW+Q?J14vxo`coXTx1$3+I@Z;nCXlf)^znyXjrJASaaTeW9>>*L&&av2B|zMsb<3n3 zbh(%Y*1w7`X-bZZp?BkSEAE|4ZSj1ATv>h5f}s4kQDktc0u#gGd*jyUw$^DkMzf~M zawnT)1B!q}`8cq4UFvm$^ZWO~Cg9hwiOb)oFK550&FZIpEG*_owmLWNJkYtFn92`v z_5R-7e^rjaTbQyF=Oe-t-(+~Uezg0V@Za{WbI(R^VNK%T_oG{X#b4}KC9nRTX 1;NLc WWMS|{c#0}Nq{!~;F1EPR4EZlHI zE`WM(>GE7Mcjnk@Zq|Pw T_G_1R zboqY(w?Ih0L>>{>>y>lLWqWyf`O}|&`t<3$kKcTIdHV1aaU93>^N%)9hSVeTa=FZ@ zfQ)g@7)eHzH#$5)%sR&qRqc&c%27@ToYd~=ugUCHOoW|soU!dxF}=)8!goIw>b(<9 z3E@q(2nW+9$)>7ArMD;#KxJm~JdQ({b=#JBx`g8@r8}3_h&iAM3QD=VmR13(1VJJS zw};Q+@{|Ktq@f5x03^~gUE3z4k7)4w4S#oL`wK?W8}d?_;>>TZRIB=sxCJ44?_nz> ztLBb(;mZrmiKMbgctk2!m=}@%mGRYEYnJ${(2jeJs;3 &gaXA zm+R;2m-CyC-~9N~&p-e9_uqW~8^IPnL?j;qWl;$y?b4&^Qp`+qW@gbyN{|Z9F&-aX zM1)%=M*U$?_!tmg0khi5`$AYF9iS3wp5qoXssKesHA>~=JAFlLcj+tLRps $ofw(CL`m*$KIrjqz+0;2-I>?N7*dw( zm86Cx59)o7urUT$D%PEuFI%Vbx@LX|;@q?J4q0gj1h1fk+VO##c4me!5hYTZmOpA{ zS`atQ^B|U{ZGs}G^<5i(`|Zc4%l6Yh{y2x{{N;STp4S^q^K*Xr^5ylo?aJHJ &n3E+k0WvoyDvzotDqU9W zl{rvhEfk=UE(ruFvnO#mkP!2tjwa>Zb(eyLm5C}JvQ(f $kCZ=Uh^&t=c( zix%)`f6R>TW7j>-w4B41^9Bo%bD89o?7(b@NG1b{kOHZYWm%Q-Uw1e4Cn-es9{K*u z)S!Za`0h`}L;+qSn{cPhh$^=C85VSpGt1%+tZm@Eq`G^=C_5A)tsYKQiNxGnQ{6h5 z39I(4umFpA{_rHJuh*}c**7hofPl~Q+yp=V{7X}Q-rAr3@psbn)Att^1+%%iJHS~4 zJZ<11+&MFHnENJ0r1I8UEs9vX_GUB2oK3a0rqS;(YNadFT!gP3%mQ(rehw#+49+6d z*gZFGvGscE1nImCA}Tgg!RaAwj|hG@jIRo~+6`U?)sWK5u(YSk^VR0<>o3TP80tt; z)(ASy5ocX5=Gtnv;=bMON65_Gy@AQYmwgJ{XZfIvIg5W!5OB}(%vy#`q8{&Kbqldt zF?T}bRN;HEs7%r}F&j4h;i_|<=Qz)je}`uhR8^W@U%!0&>HF_LeWML?y!`kNzyHTS z{por8;K%j$dcA#pvD;ZzjS!x%x7S}@)bQ>0!LHYrbLKFK`OA+#lg%jGY377;Z`;#{ zHf`RbZDnC AMYjq}RL)=ESxnac(JA-pC=MY&aOVYw7Nn1Odw zGtNx2S%wnj2V6`@ccY~#L#^1>>7g}vXArN%Y`J64i=%i4rQ%3c zin~T>8S7AzDi_`z`RKn^u6)>}40l6>l%J0qu$*4wp4&;_>Cswq_kG`c>yad?%!tg$ z*!$DAH4$7c+sn(>d7i)e?g!O&Tz{Hl-mbS#-+uFYd+{WeZNGeoN(WvR5N vn(&9lG8PQu~hM<|bnfJayrL`@ITH8oC!P&^W`h~ zxZQ4Z% !QM3g{*8U8WH5*{+oZ1MANJ_iWn-GHpU#qvDvo9tU?@- zOgyKts `z3vtXO(jSnth=JcC74HOldlKv6+-ndwc-2_Ho0y;rtm@)i}x z88g#W!Ahz^F)P9Wr1y%GKxsV6rsFLT^ w*=Zp78b#@t7`h3aZDv9x)Rc?>}9ryG@C30^6)8yO;s2% zZJ05$LYs7oWbn4_mH*v(5$D2flxep>D527dmf4#g$92w=1*|&FRhxU1okEm#7prPd zD2P;g(@HL@5NReDC<(cs$n=Qth(MbjZU#_>&v6ow3Y?P|EX||r&sq|xat5n5m5q`g z^jaX5P+CT?o)(v +3O2YqF=~ybfgl)i*!rwvCL>x353^ zli!GH*X_Jn%oD=WdoV^AR6KKrLHjv9BDei%+qPnhY)>0+%{*l5(02LsvF)ut?c39a zeZ$uD>8b4(ZVF^)?B&fxF3M0?m_8zI&SSRL=A3orysi(^oI?xwt@{}?=cKaNySqcw zL`M~wKy $P7){L1m0S;P0;tT|>Cd=2)Rh3pUWzHG!kzo`zJf8Q 3IjXbA$?A_BQ7n$8FztM%ww3?&kXX@})KT?$dJ%d)oL W1dJ#bC#yPE4MnaiDenQ zn{^V(SSIi*SEy1omu?G5RvD@Q<~dX~Vr=^pc~BNHnwG_SI?FQiVJ@6#4fAP{2n5%3 zvphQH+_sh90$_FZchTd2l@gtgWjx*_^7L*~hIfm6R2V#Hm2yH^kJ+GNZPwx zKmYWbUwwGF-Hu=W#N!;C-~alz(k@6EBLv{40*@&yP-XY@mBN?qiDVDI%UNU2QJ b6U!MG|rC zlr8Etb&Nq?Wh;rKs}hloDJ1t~7P6?wqtb#P((5dSnW|13x7%xJm;jvTIp+i@$UM&N z^7P$@Z@&5P(c}E%-~WH-FMr-3bUpI*_$Qx!_4UUeudlCsMc>-fuRrCcU(aj1YykN* zNPGG6b#Hq4?%Of!m}j_; )@Dk z&N*4iktXiu552MkJl59Z{?sCoG5}x683Nk2?n#wV?KYOhL`GPlxxpa!xv0go#AqHy zE=iddL6ag{Q)VWXhikos1Bv9jEp*2Fec3YOUWRvnwIEynUhpbEG-YcUe}C}C8?Puc zv-RD^F^eNn0&5{rQ1a(retCL&A`i>dreh3u@0WcM8t+9-L@|Za!sfhwJ *=faoUgn<==6fAAa>ud;4fa8Su1u-n_yiArTRU z;-PZW?tz7OeoI7(!j>|g7rBvWoTjR}_1ZkfBWtH2A{g8+J0j;iv+#9c5PPP)**R73 zLsDVKJ}omz5`|S!5(HXF*~^TA3fWDf0H>;^YKR2jbDWf^JG3Qn)5f%Bc}iFWO8}CI z6@wi~6rLU|+!>+-W=jAU*)k6C!tc0yr^wRuF>7X|&2qG2N}+Tc!?WG-piHmGQ>1H? z+wC^zS^vx383NFL`IL0d{HmKg$ TuwFF*bH z$LHtgS08`-{criwfBgI-34i+b+lbJ{(`;*^%yTRfRsc_z?d7MR{G0Fg58rU#sLA!X zjr02HdB44$ec!gr)Af2oQ`wV~xoeA |@J7 z8D^gJem4xJ%06Y(Ix)i+*N#&Olopv@v7UDoD}lKzNkPV3iepJi1P8@~3h>^aDF6Q~ z&U{UdZ{1LhTFcpeO_WJgF1Z8}*4{JDFq=nAPs@b(INWF2T;`idAbXQ>J1U1Oy@t4b z>rI8f{^Ngwn<9>vFF*d_cgM?Do-uy #^a)ihQ`AS0Lm3h=tJ$=1x>-z% zyYUkMkds?7mnCjcs&=3Pdh77y3 AP>Ye!JcD^xNmp*NFDbH^2FB{`Sv*{8NRWdd9v#RhFslTd??WRT*RKTW4mc3@6Pj z4b$Os+cx3WTDNc!cAxv+DN~hM!5nh;_sdLWvOt!si$>ydgP^ff)0=z1Z!=Z&z5fz#RVN^B0i)?LYf(fk?v7 zKmHujJ^u9Vw}12B{dfQCudnC$^3&&Y{_xv>0-)_ZS%%$w&Im6`9ta31c(~o;Dg`7I z@C=|ac$`x%dT*Rrlrw#puZ-Zj#!lQSj%F*`q?qxPL3X`(7@ zR5A95^pd5n&p%h^@}Rk%=N#uGr;5j}z#Lh9a)5Q|fyNmj%v#yQ0JJxvm>zE46!(PU z$_-+RSpn-F#;KWOMcPI>O;A##&v7SDa6PKij538Y-Gkibd7ihYrza82Ia_P3Z5c~N z1X7Xy-1MW;>!1Jd_y7L?{pbJqpT2+k+j+I0e*E%bzr1|?+FJYc-M8FSzW?_1^Jh+L zNp`ylT|!&T`E !zgo>tJRijXCEWwF=D$8)s6g$QT0|899y{ zOLzA%Mv;tAezYKgR-}aRvcpg* HR+o0$NQ_>D-AZ zX>m{QHi21P9s@z{X6Yt(@qK!13}!yAw-q=Jj?D9RT(--c(_=Q3CKO>ACX{}CdHwq3 zr+@sD9fuMjCC@mn2m8Fe9+%5=@0}uFU%$p_yXyYw`^&bUx7R=Z!{2QJB5!R!j)Rkv zBEmB(O)}jrA`@ZewJBF^MPg{W5!lS-?qe_IR#43l3xkS|816(^7EDAHzf~V_(dFw| zdDr(LGZA?=$c3=fldedf839V-1^f^NMYvBl6Ph-RJYraknO+DZak00X5>xHt%W*hz z8GSHwxzdASHlLrr5z)SFEX=~w%xz?P5;KTJ!z(CcmSSnnL4bRJp(+tz7G}zd)0&gH z)^exKF~`xg0f;bF5m7TILhpOhi11DHNhPjde){{r``y3)5Ak|-`Si!%|8Wyh&dc6K zsO@d<+ZZ#)eBS$UyoTVLZ@(oGkuECdaRkM__2qD&TEY=x`tad{&6(lb)3YbP4u5{S z44avBd3uTr?Oj+~YvA%~NbP;wH|b4Owdv)lZ`-EI5wZ2w8w)cK%)QRQy0?hSKgZ@R zBc)6y0r|iDPyhWGW8e2_M`nPs_vYzyoXjwvL{!mBmDp_=W%R4kit`SnFu(%Bm?uYo zG0hf#2Xq{Vdn7F_SaI-+_R7qZBCO0SbCeLOEW+Tn?zlDVtY}l+8iXU0RVY$bmPQKv z*7*~JrRH<4KPM6G^-}I3ttnGxqz8yZMO)(%k!1p?>^u==EEs4R< ^K>Hrq go<82LBgbJzzx(~~8T{S1A1`}9uPGBvi8!@i8>($PA zzFx=msQp80J?`BNgtawQxzo5@M0@LC_E{nrBB1FGFiV{d4x8KFwylda4-fY_M#Z^N z#(AD*Mu|BLBCU6iAcjCHg2`+$Wrp3ZuWlp5n>0``*v*dH*|dFl`jC++hg*ESeDve` zhrjy|KmM1$`}~JLeWM@0el>F2H{CnmZeN~1Jol~Njw5gOeAz6<8TPBc`GH%fl&8zn zm+LR &p5a^XlsWCN=_QP=kDAH0PFvr| zoNfI0pZ}Nfhu?kq`+vCpd`#CTA>r^0Zmn&X@Bikv*XuEdKR>tIabs;CK7QA?OXV-y z@gk5-TU|wDrdx(}Vf4P~{`&cr3F(?hA^P<6{Q2{bxAXep( t45 zn>`?a#oAD1(N?)y1Y&TwyBo6r6zOGiF51C}41n$=CID3Y%R4FlP18@|(kcfM%#fyF z-g=9q$B4uW>A3&42#0v&8WSFN9Vp(TuNDdM_KYBYFQdP|&Po@?TBjw0K^g0~Lj_C( zfg&o`EHlEL39Yr(`mjkEA`(f%qV;}Jp64-MzmDs5-i~z3M>Lnmho}9rZ8_)dxc>6_ z7ij<0_dmS6ykbr}&OiO(?|<{#A3pu++r#|j%S(rE&mTeAd-q7)cJ13R6OnDdlxivC z;U%eHQR(ZOW!8XJ zC5z`ZLMONZB7F9 z-pprGn$0?6m3A57W1OuwpCf&OGR@EPnqf?^F)YdqKtx;9jUbdH!Zyw3InF~>iDI6| z9D|s)y@OC_Ju|6@yV;n#%JuV)zyEjtpD%y-<9t2c@;r@^?naEQcLFkKoae_6AAkAf zr@rkUzWK^7m?sLxG8Ub#uqT{rpM?XDXSaG}E62cHsal&@FwB7|0;fZAB zFkf6J+$9bwsuErXs$ga;#E0CyX`{PaO4z6oxb~sNu~?n&zx_A=V@)bv(uu|QVNnHh zPzp<>v4N}AZFeLnki|Ql9xK;XRVkT@>@mHJUzx#RKx#S!pxQ*2)lH5473jiiTSV_t zy?n(2M2IL=4k@i9x6H8VgcM=0+=rd2cc79u#5=rZ4SLH4rr+bwnVFb9yd1k8a{)*| zyrPcp-p=oKVGq^nU&v+ua{2XEdh%hJNN-kWTp-b^WdA?5{-nv4Bu&%9zDZTh&fxBM zjEIcL?CPxQBAW!kVM7YB!XMy@3kpaK4N@q=LC`~0fqxJyfD{OUZlG(-%oy+J! 4e$HB;o;adlL78(YN+kXHG>F8#FPgh?6M4&!So7oi` Ks8A>3s2&E!v2tXvtxe&5rko2G%=m~Mi1l{9e-c`{^NVtxY zas67l@|%b wjb9MA9=$dz0NYk`(Ud24N7Pb ` 9`oh2 zzM7nn1%d&HiE~QLYJ`KUY0F6 }aXxb2 80FJ->fvhp8Us z*1#b4`<;U?%W`{rGY-S)cp{{5@X#`hK(y2b0pR9p6p Jz?=0 zxagg wc;l=V1ZPD#4TFdPti*$?X+N4VR7x?EX=MG{{3S^dkN zsl!O!y}r&W0R#Wuuj_7W9W*m@E;%Atn238&=ku|MfGcUN6NsNDQ3%n2W!EwD^H#ny zWB)$GsAp`zGhz1U7XU!lb8Y>3qx+@7L#?S=Be#A=N$PR#9YN`R;DSV)hH !jJ)>>s+-S9}1vP5`JB8Z!D7yv%};ctHYtAA||k9MfXr&&F=`z;IAwrn?B zMySgI4nkZ~2?~}(!u`44>SAi)mLxGzV(u3pGYheWi%>YEoX@9|E^{fx)H&sp#`8Rl z+pXk0FAFmRLJ)>|N=ZaIWG%vhAm`LWc%O6idi)%$AFbg!>s({Fy7jW3C!L?e|KdOU zKk TT35%qh zljL4M^K+q&xRUVA-NFgFwyxL8$bc9iEZA*RSO4c)s9a Pg4oJ*f`BU3N1nR_5~FMrnh<>z%3;;P!Y&ZGnUc?G}TGuW|Y5b $Vg!MN_HM_kaE0AAbCy9nQW$I46;DGagTe%`h;aX)`rb%Q>ItIhT}jDWx#8 zskUViA_549Br?s@JWXj$NwcvG2vM~miM2YWJeHyn05a@%KvXsxlr9g<9m0)Q{6NQb zx_d7`wc6Uc3SOmH-kB!PITXG5>W~}&oacGnNFegR`WOEpK(w|96GS9V{k&Rf@I;6p zDY0aSK%!g Cn?(|7131`CIgmp+Gb&zYy(p}}x$h0o*0Kk-UA7DLisUi#@SR_eOSBwx5 zk7&($er%8CMZh&f4!bEbx@YSbV(2~>pw)NU|B5xT*`G5Jt|=PN2atA{@roR{9zb1+ z2>=$*I}wCH3JSFFaP85~y%$Czmf{|gGD>!j#6-G0ef|)abEtajI6((DK}^K%rmcm$ zNX{Z!TbpMg8n(rO0`txOZaE+CKfQbT`jw2s&1Q4HoTq8tY #VN1@K2@<2p$ zOL^#hT>t<3CO+J-Z|D&rEL_n8J9#o3dLv0Jxm%QhMS4CxGa+C{!SwJvmh_DG?KN`$ z;26;(nl|YAB)1;x-u*(zIh9dTl9VMqM|z-{N)qd_MMP$nBm*Les5T)Oh1e^bK7Rj) z@BZqq>^S+wAlL!TEzBfKT^3jM*2XeO&Zl`wDQ|ZpF`IjB8WBvGS+rI{?pIDOWf({5 zk+uj30mSC8*^Y(fd^(X7E@RmYc^qU@s#{9WECepYVA1_9oy;ppXl6Y#D%Ob2Rq)y8 zJ!?^9Jq~u2?RO<~*HQxj|L1@H&yf18#N93B1Q-w~iSTOGhO6`QDiwum;x{5O<;=t@ zHQ8Ypw%h}jSF0Xz>KzjjvoKp=Q{$A%Fp9{EI$R&tt9eQ!bp~CZ^)PibR0kM3VUGc& zu<)>sQw@7&A@)pU=n>}6al_qdin!KCYKDaF+Ud>RhaoBV@}_H#u6By(IF9aG{KWy( zD;-{eNAP_6d0(?bce}2q*t0U|I%x0ep SOjZ?VP%7y^VFcA*m>5mQPS zz$qiKs$w|Q^L%`aWh#=pVBLEF1Au8wJ!=sO)|_lWjJ7Pxd?rdH83As# |5qP=|06d+ w%Z8v73R-FE(Bp}by-RoYO5(FNvXC52%M9uIyjF*H}bb>dVF}2 zag=eR;G86HMnx1BcVH33RF?{XOr2K~?%v~$@n`6oxjO`zx_fXh=i! L@6d(H(L$1%Jwk)<1OSaK=jFl>5St@iRYNynbnTBm91 zW*N6uO6k_K>+~n(oVgpau0Id6grjOF=}^ZBc1(4EscP3;^faYqS!`uF)3c7Y9|&t2 zT*N=HN;rgh>&x`sl;%`cQ^?h@MbCIvu=vHV|37Z{zmH7(IR-Z3A6i(!@qb_+Tf1lP zf#~#$89V}Y9b6%nj-Y=o6{){th{UNI>o&s(*5NXBWu%Ivlo-&O_RPHV`CMyFDW#N# zAt!|M;l57C^W|7g-@Lf{^!vX({O+$me|~s*d$%e1{@uI7rw`<2T06kEvoL @VFg&wu70aB}+v z&};tgw(qZJ9LIhc6AE;X2+EMMh-h07ahd0C9D$&4hCa#cm|MxuErzzWr|5T3Gre49 zRV|yb1OI`EL`V``xf`XFE}-&0)szlbBIdN)-jp&jbCyKz9RBp_!_&ui?J`qj;vtoh zB!(ex%5Xj$wXJv1JkR51^XkoO?xJ7BQpz}v9SYu-x*f-Po>$N2FN{k40m+ifX6!%6 zFbrLqcRoBFkB1&ZrXEdwD4Xt*O{uKjOqA pWJzypv)-H9<=iBJd=vDVrLX4EIXJ-o2T^@UkD z0oB%p&Zx^G2&oKRSQuf<;t(Rj9ZB2MYAjl7L{!S4ssZj{{q!^U09RKeD8r_y^_w)v ziGhW}4G0`8&^bwMm4z+3Qcn7N(UXgxvw+Br0U?3_rBm0y2_XWR1d-M@Dli-ggkV4< zK#i!e(h)J7)t0rs>6lP>KJ9!xraBG*)=@TdLFDM|8+jmDSO5k{tV3zDs2GZ&L_s8~ zN`zWx)#d>#8KvYhiZBxgcus`Acs 8B+Om*pou)v1@#c%!(O`MJ|NJMv{cT;QkMDli?{_lpf)d!mLfR^E2W2 zItG_K?94?tGjV_LF()LkAoT?xYO7ioB1lYT+G=ajI3*BN56(iu%;e#T1W{5dNaTTl z5zr9b+#(#qA>8!J)hFt3GC`=zVyz{S-hu%Nai%1>lx8X{f_XD+F;Q(A9%kSHUE3KE zDGRx^^HhXdn+k)T9zXy7clE=B2BqXy8<_9P=-MQ~d_K0h-QK)t>Zy#cUcWvbPnYxY z)!l8IXKPIW+dNxSB0& V bppuffFK(AukOTbm+Ulj5(jzYy1rJW2!r+H*20;;JX?GxYVre%12#$w*)DVb>wx zTH17dQ=gkWC#K>02cDO7-TABTs;xy>#)z;!DNB-Ap1)@hF(9Dp05Bb&U|yJ*kxVsl zN?AzQ!mKS!lvC aM!!5CJYppGdn{^%VGEcSEQikZZi>@YMVG?GpS^+TSA}qakb+;AWzeXgr zB8YAI^zFAFzy0p%(<76F!*rfE e&+*yOY!f_~NaQD`<=ig{JGJ`uJ!79NcVm8xdSyB&xWl9|^`R9N3&uASh{9MX* zbLNU(25~c3XDI+-EGdbs>Ef_zje51;*A%r@i0B)xKKRHb2a;*)l5kEUsU*qn!Gt*_ zaD<2~2?18^0CXQ|mstC1JG&Bst{O#wfR3jzjU;(BrefcM{cHkw2B-B?tj`n;)<}we z!<15pIZ5fJGeins4+USDzU$!mSuOc2nEYjW;q_v*>(}_qkG{?#f6jNlZt|%MVXyfD zfZ^eah}J5)K{Rj&Q&%MscLN};wbrF0*BG3wz5nq$nC39gL}Aev2*5#zDdm+n9FTj& zXhdtOEzYNNYdUT=c^Ci@JnGzFski(6r%#_Yo6W1&FMs&{d$V}?; +xS2Mq3%d8MS{eJU9atol+^=gj3m_nroRNC;Zr^g?bs+;kYg4fY zy{Nk YU F#Q*AF{3m^ZN`(IaG|{IL!YKmQxJWlQ?de9$ zD=CVY;2EQ%x+!C;bxp!pXXe5z%TkGX*bF^M)qx}l35O$-T 3($z0_ z{s+-uSD(uBcxXjFcHB(AHT&rN?@xm8=hgm|W4%(1tO119YPRS+nKcM=Hz77R3~sFk zL|^k25%D%XJ=o!-%OX8|HNqoms{x^=s@~_>LgHa=rnQ1&5;2JLbU7Z*rZ$#wzuDR{ zA&?VRYd1H0V*2#?A?JaHTyhDBrWWqqOR3rbWhFOVnb@o6%e22OiPqH7USpfBd)a55 zdjE7H9AE{LugZHCLNafvio_}9AT}i8L@8ZY1k`Ex@q7t;K$vUOx^&()IP~=+5tm`; z87 *7DaO%X69Q3K8?=OK{FFb49vK0^{- zb3kdO`ns@$nbyU0DGW4SzW>XAyL`N#pN N^aa!S+X zLPEDMU*@4y)w0 zRRq9m>&p!Rz W zuIsa(17N|-GysjSxmD;5yOLBC9gvI|MG6qM)&MLnmy!k~yr_dm8B^~n(2$wdh=Qie zbZN_^^CUo}6dJO7WC$Xf=6e76^L$zEZg0npJU%||UcZXg=IQ*+ufE#9^5cA_DOc)F zSayI~S%jDw*9H`NuAjSiuOP1_QNT*q?^17i2CAsWa}o|S_eizqba6@D@zT?7;}>sQ z&p~B?a9Rb Sa%6a`&gFr^D&E+idr{+hN=t&ZljD@%GJ^#BiSHA*Fgb*SU@3X207DrMfKB zG@1K$yF~)-R!M_0l)%sxEJfSxc5ZVQC#S@l&2Twhn7L3uSUnxfcC*=z#N5j?M&hy> zwpwdos !1|kYdKTpu>`uJM!c0?cwcWadx z&6?S|p3sihMxm>iu2&;w7J;47Nkl;?gb3{Jt!k0f+;pktF>W%K0Rk?UOUlD~d0n?E zeaRJTgY&aKXyqB2ty2adRsA^|1HHC+<LGOefX{e43Q{$fh~bLZPvZxPlFm)_4N z4?^s{h1C`jNP;MRf8=IOn`yn=KTU^&KOL*K)OiC4Dd(|dPN`G%y=%NZs-!ku=1WEF zpIT#*aTwmdeseq?Pp8vdQ32oG|MjacUzZ`9+5YXXP|{^OUs{!695*-B1GEMvAp}A* z3y%OLPH_dWK681@48h$Df_er~_q+F<$TQ(zYwc{HAnYeMhBE=B#3`-85}mw**w VqCQf}^Uf%x;`@x`l`Nq9P+m+69L$N6}>-3_;Lb8~Y#oqqc1r*Rx5b&-)Y zx0GaAmbuj)Ux5JI?KW6a;%fc*txSmpmpTbx%84QlAKvZXyfn+pG%<-J0YC?eXl5E= zY4wL%-}C4yo(gv_rOfl(zpS+ZcuA?VA`M_!7B!WWrJLd+pgTx^5i1(caWqY5a_Usz zo)OpALt)<4uFq2qH(-`=Tyrwb0{V>u;Sj2thr&q~vsx<#AZH7Z)NlN2%H7&6X-d7e z*S_;}_s}4sYIEQ7B}yGN-yfgLGMOm=MYNPw8IhSXr{@N>S30Y<0Is`U3<~d3BdZIh zLP&t<5k&IrHHH7dKD|$num1J*a)+xI;ff53K05t*P`#E&@w0W~y4CI?8v@qOU?y?{ zYrZUtYmKJV-yw^H)ZKm78t0T!N{pKG#T-2_uJMh}r!CRaTGy~f#3rZlW|y-7;rTQz z^Xy9tluK>BC%V1eIQd+4Xm `TB)}vns#;I2Kf|Evq7^BpgjPM=0l+jCQ=*>*B3Bg3I?`IP1!me@ zTXpwb#*XyOl>0Vj{Y#_QGum_O+#*poe{1N{&hYfpj~~DNE@t&W7pYa}xvJ_g40#w5 zbCSF)%XYsVhT-Aip`@IFk}&W2aysc`j}M2Gc^t=a9JjmC%$8+oZatW^H(=qxNtn^X zrt`(oQpsj5!V=MLGhQysrepv-o=@S*jKmoNtr 80P@lli8te>w$4{|Rc)=Aufv*txzt+W8u- -Mn#dhsYOU6AXQE+9{pRnpEkYoKW(}}=4xiCK;bG5i z_+O^Ncb{5Qg)8HRMToB__%9SIbfp4y<@9rG^y->f=^Xt&L zUM2v0vkXynAr^N}2+7)XcpU27s H kQ2ceA_Q9#1D^xlEVV^k#os+fwTitIz~$Z2*DLqeo2D z5s@%{;TQ^c&wU*ev06N1O>P*<764UE!@6Nhby01xegqiI%&A$Z2a9w^O7z7nI-+|t zvl?n@EljN~b)LYjOI u!katMx_j+T0_=3qE{R?t z1={m}M8pHSfIgQ&13F{O%(_^y!_0aR9T5XWJv~v_@x%M~fA@Fw@kj<$ s%#4^MryyjeaWix; zp_(Bh3oo^nR9s!Pd9(e^?mSPH*hIE3UpjEDjaG_$7yfjWABUMbb`k**hXWBaNo_ig zqpEs9PB|s%3c#)zUW=Q)n)vfS|7WV*X_LNbrbvMkkVa}Pk0Xr^kz zFjmv0RxYVoTWTw#n6{L1mt8^tOEK>r!i>m>yeu`P+*e}(&CC+fGEc5f-C@lXfog$0 za|$R}EKpK0|K*VE=bgHH&jpOY2!PHaLSjZF fkyYN2FRG3HPu0AXqBotkJKVRKIzXcj3K zB<=z6u1bVReqAm#63itru&NSEl8pGwi=*(q>=mIz$b=w>rpg>z7prr$)}xr+0FXl* z7?FijazJA7AS4MQT1_p&9K( *s`GcEq+$i?=U!<8ZluNZ3P@OeDA2ZE3lbrZCS mc~Igg95bHZf 4sF}Jit*S-U767gmfB+PLeJRoJ zpQeh$l9FmH^P=Vf2uOfvj;%#)+PxZqU=c}p(GCe@wGRJ4H>j(n&TF;4taS@_b5$nx zuFQsj2qa`CcMbD3W2YDTNamh|dx#kQZ0UfMvbmXAuY~)Kqi3!@?}mFVEh+sR6LoDr z|DL`Uf59-k#!C^BX@l#=2Z`bes_)w9>!5+IV-EcL_{5)6#=wCH9o$SkB8f0DBhK@a zo0=&&XkF%c>e3-Xip)sRg}mU}j!( 6>X_;K-3F!954Kc_h#^Uq)Nqgt=)mAA6mLBzARf$Qw)L&8#iQi` zmm}!aa>b7)jTufLL 5qGdM_(!<8;knO$qwyjJs9yoPlIdkde`6{RUV7Il~JOPIP=P_U}@9o zI+l4aP}0Z(< +JdQ5H7w@5zibyCXpVRpjQ8a7Hw zQI|9nKO=;CEccXk`2 !`1z+`*$&@o2&C_1o#y_f=sZRz`U))Z{kd z10&3q_pVr8_cNTCs|>Ey+GZB<96e$jU1D{9#^s1WSlQztA64+fd`p`17rVS97fz zqXK$)!29qSFVot;q$e-NqoLAPVLX>5(UW7WpI_dT)bx~TcB=nw4H(;ZM>Uf+4w{qu zar1sHhLogzoMgiB0^p>3?h_k&;tS9(&&|F(3!eEV&Wy1g$t-@!GNsvmUqNUHs`-y= zgI1L`?$^wh|D--&3cK-KW39e5Biv&+jjLy{I552}lrfPTFLv#+PQ72i!{Xe&=c2Ef zfT&;VO=2VnnQ&W!r%+{`$GW^MkJ+Vaj6@iZvJM3l8=TJ1yh$!?*rfgGKesU;R(V`0 z@FakKPd#tXaR?Y%P-I#NK}%E&u_Bz>!l)&+Li0?1h)}^qoLShw_dWfT_|;Sk)PZ>; zTw$%>>B28eKRoPcN0^2{j8f$7^QY`A4pWW*nxK}d%4b{*_6iMkd-ygLesgn^Up?ke z(a2LNeq*MhWTEhN-Ws7BA3(uwWMw;scV2yhobeEE??<80{-GxuXUTcQ!|aa?!GP&R zaQWMudp}DUaUxP8yL`1mdihGMiy3D$2nZwR)74DXxPK*&EL*Nz-Y0-8VOw3tsEhcf z+s{4h-Zsa8fK1{w_&=~wM>$#tgzh(OYz4oe%Maze{Y)n({3DpETvOp2;JoBreg&Ez zAC9cE@~GE @rp z9 G&)XWoTmlLKaOmeO0?QIMGM z#bEJi&PgVnC?h)~?mxfqu+!~;7#agXwiPi$JZiXgEWe(`iG^5ypO5tmwC#ONx)RGP zu|d0g7G3?xdu1=s==}sw>0lWx_+X+XuK*Q{ZEGc 6>HpSJJ6k}80vk2e73$t+8jAZF3Zd$`p+^o_fx)-d^a}uHh{`GZQ<@G zz_F8F;{67ehNvs_zJ2NCZwJ (;a8L`8C}?m`V8#?Olz`I}npb{D2zL8(1!OmgIpx>2G{adp^n_6JL(_wL zKOP1o3sTVv2Hm=waMRduz@q2n<999XKNhWJY6u q_4(%IH6QoS zd;VZJAIAn5#y3zPHj^({om;e(g(P*zU;0}z9>>SZU21Gd?udeH?eRp+)-{*fjrQT0 zJeiEu +sMQIWkKNFgf zc1vtL$eQe)KT6y^-uMcyHygvvhc#oj<4*dMDa(hL*xmlJ<>h(5_KuT)dXhuw3u;+c z1|z+IA+b-@*RM@ZX=WR(qYW<2-w`LiubDI=XjPem0uM?p@)7)4>{^Lp0ybec!&lyaC~>P~Ea0vg~8@)6eGK+9ocQ z&0TExUF>enJ0YvkbLuLjj+T3cCdHeZbM4_Ll{GQ114ELNM-TAj$ob^}rnoZ_iBxGp zF^xT5CIz)+eNE+*D5bcfmtbkV141sE^B|e}3=|Ax=JJjp$>ajgY#o`m>thsl+wu#3 z6{Nzu a#s_jQF5;hG=CmO3Ux=us_gW08no36DKm&0nn!CCnKSumR0ZZ-J zic^~E<1toNt0(2OWu{M9ua^ly!CX$NV>fKA0zhQx+J_1>)vX4)T&rXR*OP~`X2snX zbq3NlH&$7s#PY|NSec<@+kg>ulkgZpnu|;7ti?;;&g4|?eU1&WtI>V4`umNWu30Rh za=vE<+_B{ODPFyc#ZbNS^d1OiWY;ko4Nd#R$IqYZe*9;#(sXCuk6|tA{ijm9#0R}+ ztVHp^dkzCHjLL?UP<0)o_=h}o70~(*Ki$kbq#ekuFB~5z*0Y%E2}3jb%`hmHT+<}w zi4&7z0LLbImxhNctIV!Btoz#Qzs+9U_{w<;$IKt2F+uXV^1Gtyeg4l+ADqFfP_f#J zzlBqhf8)`R*5V|1u2tP%xSe0ulv_2XQMlylJcQ+J84?c?b=&KHE&C_VZh^Bx--#xJ zWn4tTMGy||a~gpDTz9BQM*|xec>Qu^3sR_hIN97`zx`UD&-oJ(=h6Zi!5)vi$QE>x z%@Whf?IL?(dEo7mG% aaD88 *m)!>*|B!5(s$G zu%u+YJ>!!eWGYKG11`TX`#}pG-0vW_<~$e%Z`-K*QgzS3f=NsLS!DL8+}q2rL!SGt zqKo$Siv?!-q}lCZhlyLqo{4OoRDM*|r%>osjm$$UK{kuyXnuT^i^#5nqrISjvfagH z6e8wN%~dm)g2NP>lM?+ZTQzYxC`x(FH>5c<6xF)_Q
aVF{tXhVJ)`GdGUpvR_} z&6uFB)-F>ivC#?G>SH;li(@XDJ+7gfPoh~Wm1wHCv@GM%3A_m$Oan9 j5} zA>HG-gb?CS6+=j^c>e)^=UMZ`{^9xZ`T6!&(w(QB_ kg&xu%EhCh z3KB`SrS9R|z==Ft#{yzupvu y)$X4EB>9+tOo*QdvV+t6s_j#HCB|7i$vdIX+ZP|3tLXx`UVSJwH15 zj6u+u>o2ETT(7*V{Ep7+eSRS|;w}9!8WH)kbXPJk-|`O-wWs7e!_0@FWQ?@y^G! zOt1I(v;2wq?Z=b!Hji6|wLU*YSJy4RDw(yKLoRcmd{^s@&R2(%@MSYW&x#5tLqfKx zxam$y{*yMLrKyVxwm%e=?d6X}o)OLJ%@)6OJi*u1FYkW(wec@=%&@YlZ?g?+`@pa_ zA*_(`k^1g;5{ZgCk)HbT9Wl2mM$)P@VBW##O4%WJYAEwF-I7KAA)uys??Zx%_73x? z)}@p4pZc)4<4u1^dSN-=A~ki#8!e2IZS_Z7L?LggT7yeW6O@) X%@{t z$oge8_gDocH2<(oyf!Hw{HDTi<}u1us@@tEbG-Y510=+H@UIPmaAb21P@r(kBIt~t z;~SrVUTUOTaxfN4ZAB@k_-TekTx@J7^NSx8XYiLPPjE^&sNHzm=kGOU-w{pO-IX;W zK9pBDiB2AS)6aj7?NXWpq#rxOm@~eVQ55BbKX#`S;~%znyiTa(L<%v7+mla{PY8+) zO+nGz?7R7)y#1sWLBYUHFPH$&FfDpW@*}(8tFQCRdZtsIEhmSEwH+Pv>(%x8H{Mj# z`RTjc--g=X5#Y!^*JghdwtCc%mM6R@C_|AdxAvu=D-0ZF}*q$-h3yCg|=710)1 zDR)w8wHia%CV`MbVgobuAM>(*zi!YcmCSl@IB7!G{RAMAG7yBZLC+GSa!C50`dG$l zP^Ep`xfi?DSW@)hM=^T69;N3gG6KPRtoFktTiQNv12H!%O9|bwKfg>b9|Fr@`x(;T zY0gZOOo-#}$2;(W;q8C3Q)m4VXoc2ijVfN7_FWa^>Wo|2ffJqvBd|0kAGN!w)Gdi0 z@Is|btZ5(k9G}%Ue$7$@VdU@6u7y%ut5Z2A^Af`;5!;JFCxouZ`Z<-Et}Bfsg56kR z-n-Tl8WxTrO`wPaCd|gPf0xR6f&DZlwu H34v#SDr HN;VE7{=xMi8c7Iy*w~Z(HjMqwLjOd>C8#=yAn5r+V1wt=}I8Tab> 9DX818Y zw_rwY>3m6vD#0?rlnwglHJ8c!NP?2y1+Z$n19iOxH5BX3Gu8B?fl&=w36(UMu2S1J zw%TxC2I8kcAht(kPW22`9?5o>Z?;EFl4P?^nx!|B!mc{C^ xLds*RlDf`TuE@#NE=!ji zIYey}TCiC47$z^Rsc{eE7^B|Y(kUC4&>BiX9_vT(z$$Oo5vwd+yIf?pWXN;(g9oXS zE{-4vBF=nTKVtAxm1fJhL815)&dQvJj!`p9?`8=kGWox 5OW2%r(;kcIX;=DHV0Z2qrb_(|NYQqRoMS}1{Qg^63MN!INDDgpqN6XUNmU}Ik zN`)Kh>M@7A%gM#F(I+md7P$d|p^+*D8ev>Iba>&=m{<`}Q+d}zY}c_3>ty=$_*6`@ z#TaFgfdwZyGc(&Bu@}IrQ#GC&p~gR2My%z|l7ytRrhOgL49=H;)Xr@p^kDgwt#r?; zMI+WelXYGS1s8kRi3fgU@uf8(^Y`=pojX(JN`t0kLj8T2ZhD-1aN5Dk~z)aELl* zx4k4I2kH!wv f%9MY7outY)mD z@c7;|BdrfEv&u5=cJHCVc}G)*0Hz1ucs8x(`FAND0G*IfF#&`!$=2@fj9yrxGF<|; zW+|;? Jj3wWJ`mndY*{XB>@_GaxXeq!!Y8Ut_l Ol5O4Vk*S73pd=*QPY1#I&YUeO0a4@5kzLz#d0mui^# zUU?CT`F{I;qOyUk=ar<(I;C=5+1=>zAic5IpCi$39AFq_3jGhh0Wy^aJ<`vJ>hSs- zQRM_=OD`Qowee;W7iX-myp#3P_yLc+lP$#9ng)_2 rftD2Kk MT3NS!MJ_QeIjbxX)_SGV-Dx+hf2E^u#!BA)TKtso*ME{K? CSs;@wEHd_T15_aO z>F%4?->b|qD2i1->2AuKODv9xEl;WnMc)>t{T&hAD^+5_C>eNo5DJ7$%;YA3XPjlI z_Ifr8HSESg8$P(RV3a6r*Kik<^#SRBL)2v``|>MLTm>fLu;R-4jqef4^X)1fCt-&{ zdE%Yi2W75DHRq`pe@re8o850gq$E%lHTFPuV&BQKsYx=x2#&GRcW=u}O5Qw(1Pv_I zl6)}c=Bh;!N=j@c`0+Q5xu#P{Fsn%>Gve2ZSOSZb5m7NW&T+6HKwJ-IDh~N&XfBc4 zi; >po-FE^xg+UkcIR42Z^T|Cw5s5~rk6;zG@ZnQ_1EBd4Du!oQY+WazRzsU5Ym zVKgmb1_|HIZD5{W0&FjK`wckPUs<*wKv^trL+_{C9hoN~=JQNf6pI=^;`ZPhH~eI7 zP{F0lWem_@Nnt&DSoNHcCJYuM+GZ!i^y>Il&%|Upou(s8T={auiXe|Y`#r=x*qN2U zIi7kY+Xtj88Z7 3fC z-0E21qG+le_!|$_Ff|j_?G?f*s>UJuc(**wg~nDKRX|~$i?Qh2!Ni_oC_!xnD69o$ zfA=VUm;eN?cbx5< RdHTrTzCWX?Dpw d_Apv%E*si&d)d$x)TT0X}`ik)S? z0dE3@zV_5M4V7-WcXQjp`I-eIUxmd7-JSvZtd#pOHhM&sWEM+G)eAeF-m3_%J20+d z#&_3We^~)lcFptf(`1>h47ItfX^l)i@eZ^t|K?fyeUv+6bhj2_cI_#Z-zFFX(zt$C zbM^TrA_4>w)6*}ne^u@PXJI1Mi;Ue?3oM=AL`(j$X1=7DsKZP{Ybi?gJ?CR2^7VTg zw+|(65r|4by+1P#QP#d2_F^2HF{ksx680TOe};i@m%qBYwpAm+lck@VUtrH-tjR)N zMx?2%oj(Trv0lmkR=IVP4B5uXE_6+;C$81d@a8UIWO8zUX7Q$3_B5x2I3-HC&{Q8| zn&f{vaY2Yp<#M q-}ihkD=CqB+_U_ X980@ +Cemuo?|3xYofA|$=|*#{PP3@z0!OZ1Na_7VA;aP zlkg-}BxKe+c^MSv$0W <-y)SmSJbR} z1!T<|{9c-VFuU)ysI(ts CP)*(3%?}tK_>oXxlUM zXfUtqtOxom%U!D4tec6L=mCLfuR2!Tc^x8L@TkcUtZm2t+^G1~<7eQFJB{ObmX?c7 zbJw?(C$clwNrL(4N6$tBw7R$Ao;fl$2#=&1Aq;7XxCUn)1$cZ5aY2{5^X_Ae@+Foq z^ZQ>h5)yM~KK8dq0&i>a$rIiI?$#OC4BwVo6y6tgwdYW{qr|D_q-K&+AuX_2hadjq z&6On4dAvg`Gs(=%G~e69D8vDGeq~b^>Fng @-vPThzMrLV+b9KVF0TFmt*d*ZdY?eKrVo{fY=e zFn3wS$ZV{9rEZ!eq$hf 1XZbJ0N+E(c)!cLj7B9`FTt<;vv&sD(#an`dsFela+5wZYo!UaeJ& zn}mBaBb7j#M>+zj*b}*kW{XsD)2(`0^lhsX{`+;|Aw$2*yN8=07a4L-f;X|45rZxs zpBp`1X^@sA;V%+^IO4{{Pwb@&Ww<8P-*@#D$qf45DUA4F<*WDI+#b2dS{R#3PGMS6 zJ?t$wS0lF_v9Q@jTY fJI$cmd%9%UE#74#_`|9h73O?fd@q_%C0X3W$AlNJm zK%q?~cZaFs7Zl(1hqp-r(W9#T85{O}@w%T@7FDRbhdFBw6cmzi^YdG>3^<=qqIG0g zi;2~FN9^X@iNr w<%?$R8B0R z5A0F(dxWNx;6WWkDWyeIBpIS#o3hq_C}o1rBDGgc@V0$?-(SnP2|iaW9>ow!QUCrM z1S13c+H+JC1^k!Gipt%qysfM~m)yAzZ0J^y9}4#7As#e^t} gU^EB*SZ;;p*{EKLiL-c&0d zolu_sR|G-f!AbMcWZ@AQSW8qWFHqhxKu}LimxFXLovS=4&CjoXak##jS*)HJj(3MG z3-Q9q>x7v4$t=l>BZpH5(Zv!gy}v7vEKB{N-%jR kei1b( z?e7D@Apar}5s^3HXkk~q$zXpozbvHb?Ui3DmTZ5)w^)aR6TM*r1zci|ud}o^O{oIJ z;~lSuB3SM1I47Ruz4L@Td1U5n47C~?9J3bwXK%Y+dGp=BT0-aYies3~`?-1UnRp?O z**%ddC{^R6^n|hFO9YZlWXh|r^V_C;gPP8ZB^jRT{YMkxW1CEM)|^|n9h>mKDiXCn zj_IKWQNoXn%x!*WnGR8;wP>WSylT5)_Q-|o_$27kT`QU`z+((Bo=fHQ%~_Z~*GrN@ zP}@SlIZBDN@1BiizeK7?7?k$HhU@T@c9IwC_pzRtF;QoApRyw=E^_JoG>PfjNWTo# zTGO;_Mwx5Kyn;h)w6gumygTYBOlkArL_s11RhGPdOGg(=itCircGkn)5`Aq7+6#!9 za;-Z;3bM)UoytC=U)T!bZ`1e{rPSD#w@M;h=@*-}knVKkGkn24^BNQE?M6qB0n;Az zhG>L7tYIG;^4N=NwI$=`&*v%Bin@MK?KmVmEVaAnMe}1j@@=Tg5W}0MzfO*<=GW*i zTU-%W&~WEEFs;M1iRKscZ2)`+ACKU1S9(us7tF}s?(X@?<_Q0YcRYU=Fqb)q%ayjq zoDmcn#l2I?h-ib!*_pyJ?znwyhg>Y>D~dnn*ze*TfKW1o>PYR!D+bc1=hK@@!$R5O zWy4YEFFpB z(;jKOO)Fj{`pf6u6Z6T 9sp<8XsdVoS^vYWQs-uC0#Iu|7dC6#-;^%bECT0KBrv9~f zuG8MF7f)YDS9kxktJ8bZ9$u`q*lR~7Ui8hT+D%CC+1+F`{(U{>sr7W781b*swvxrz z{8aBHnNZ_rpo$6s+D{ReEP`cd#gvKx>HhLTS8N~ vnP_)a#}~P6NT 1a; z>zmsCQz%H<-WO+dVTpg>?BQ)a^)48VaxEvSn4lI~-EaJf``3i2@U|ikFK>li9G#yp z5Vt>jcpaShWBL2jsS6~Q9&qZp`&>U6#EYeXop~>_X5ha4#I$1HD;UoNKgCK3@1#p6 z-X$*X?gBdRWNS~pCTJb^Fo{rIWJ26#Y3w-J(8)iYr{uUpP`G&@SR$FQbxuldYAEH= zaELk*X7x?po RCtYWD`tJ4IjqVt?s>YG}O5;ou zfU+QM5~%OqHEl2M7CN`yXR1Gxf e-?hEn$@fvOC48gF!%0NT6C(%Vk3`2Vh`AqOw2d=na9#7 zwb 8XaUD@glBt&6hW6HZ~_%^9y zxd(YH)=GSS?@LqUebd``jjJo(={I2saYd>f4IWE5 pagDCAgn4h$-% zqj%)jy+i}OVj$;B@M*^A)LtBS9bKFg)zA3Pa%#GchPzIOUr7m0xbh@9;lF}2GyC1E z0d}#>&4Hiah0nMjE(t>m6t9p4CtC%<^@?8lqRBX7>k%B-YwZW96dD6YSyZzZTf~^0 z&SNrvp+rAmF?ij%{cvaXY~$ KAToDt_-jU2EWVkd0!ja=i(Ys{d1|j5@<*YB*pL}DB- ^%V+!aEGDQ0xF7ts1aa=7+OX`!n1+i>tkh>!KeT*ADM4{a6;b}RFXjX>hj zTwq9B1PiU73HPNP5Lqa@NCDP`Kcxjh1y@`gyUr)%bkC0-sF|RY^}P$D6c|GVnI^(3 zI&MZ}5C#8iWb-Rf(~MBo{y@VAgc5>_Bp;agyfK!B)5b}gj`_tET{UYI%=z1^$EAn( zLakyMmok%v9xIKh-LFD>FsEJZaU^qGp?=Y(ZFlEWsZ-TL{mgr<%mhmeo0i!n1y*|5 zn *TFN8V%9 jJ@F)woGJBJY7L< z$@NjUQ2txrYxNeynYBdSzvuS9vljkdCsu;2h6$!YqrxIoRIk$*nsydsvS`m{0r>b0 zKD7>PLFod~NxATbWF~I7Spf$()T|nrBDWfCcAhm|FXataGu&(8EjIqLyz!OMjUjH> zm5G{J-@RpWF8Xlmt@yB|{Qr4e;Yc7=PI@SHq9(~HugswGwb+M&