This commit is contained in:
Rose 2024-05-03 14:03:59 +01:00 committed by GitHub
commit dfe5cfb8ed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 17047 additions and 9 deletions

23
.gitignore vendored
View File

@ -1,2 +1,25 @@
build/
bin/
# User-specific files
*.rsuser
*.suo
*.user
*.userosscache
*.sln.docstates
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/
[Aa][Rr][Mm]64/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/
[Ll]ogs/

144
ShapeUpWin.vcxproj Normal file
View File

@ -0,0 +1,144 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<VCProjectVersion>17.0</VCProjectVersion>
<Keyword>Win32Proj</Keyword>
<ProjectGuid>{01b70e71-8a13-4d13-858e-3ded3f60bdf5}</ProjectGuid>
<RootNamespace>ShapeUpWin</RootNamespace>
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v143</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="Shared">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<IncludePath>$(VC_IncludePath);$(WindowsSDK_IncludePath);C:\Users\rosie\source\repos\ShapeUpWin\ShapeUpWin\lib\raylib-4.5.0_win64_msvc16\include</IncludePath>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalLibraryDirectories>C:\Users\rosie\source\repos\ShapeUpWin\ShapeUpWin\lib\raylib-4.5.0_win64_msvc16\lib</AdditionalLibraryDirectories>
<AdditionalDependencies>raylib.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="src\main.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\dark.h" />
<ClInclude Include="src\shaders.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,30 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="src\main.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="src\dark.h">
<Filter>Source Files</Filter>
</ClInclude>
<ClInclude Include="src\shaders.h">
<Filter>Source Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,16 @@
Copyright (c) 2013-2023 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.

View File

@ -0,0 +1,144 @@
<img align="left" src="https://github.com/raysan5/raylib/blob/master/logo/raylib_logo_animation.gif" width="288px">
**raylib is a simple and easy-to-use library to enjoy videogames programming.**
raylib is highly inspired by Borland BGI graphics lib and by XNA framework and it's specially well suited for prototyping, tooling, graphical applications, embedded systems and education.
*NOTE for ADVENTURERS: raylib is a programming library to enjoy videogames programming; no fancy interface, no visual helpers, no debug button... just coding in the most pure spartan-programmers way.*
Ready to learn? Jump to [code examples!](https://www.raylib.com/examples.html)
---
<br>
[![GitHub Releases Downloads](https://img.shields.io/github/downloads/raysan5/raylib/total)](https://github.com/raysan5/raylib/releases)
[![GitHub Stars](https://img.shields.io/github/stars/raysan5/raylib?style=flat&label=stars)](https://github.com/raysan5/raylib/stargazers)
[![GitHub commits since tagged version](https://img.shields.io/github/commits-since/raysan5/raylib/4.2.0)](https://github.com/raysan5/raylib/commits/master)
[![GitHub Sponsors](https://img.shields.io/github/sponsors/raysan5?label=sponsors)](https://github.com/sponsors/raysan5)
[![Packaging Status](https://repology.org/badge/tiny-repos/raylib.svg)](https://repology.org/project/raylib/versions)
[![License](https://img.shields.io/badge/license-zlib%2Flibpng-blue.svg)](LICENSE)
[![Discord Members](https://img.shields.io/discord/426912293134270465.svg?label=Discord&logo=discord)](https://discord.gg/raylib)
[![Subreddit Subscribers](https://img.shields.io/reddit/subreddit-subscribers/raylib?label=reddit%20r%2Fraylib&logo=reddit)](https://www.reddit.com/r/raylib/)
[![Youtube Subscribers](https://img.shields.io/youtube/channel/subscribers/UC8WIBkhYb5sBNqXO1mZ7WSQ?style=flat&label=Youtube&logo=youtube)](https://www.youtube.com/c/raylib)
[![Twitch Status](https://img.shields.io/twitch/status/raysan5?style=flat&label=Twitch&logo=twitch)](https://www.twitch.tv/raysan5)
[![Windows](https://github.com/raysan5/raylib/workflows/Windows/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3AWindows)
[![Linux](https://github.com/raysan5/raylib/workflows/Linux/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3ALinux)
[![macOS](https://github.com/raysan5/raylib/workflows/macOS/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3AmacOS)
[![Android](https://github.com/raysan5/raylib/workflows/Android/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3AAndroid)
[![WebAssembly](https://github.com/raysan5/raylib/workflows/WebAssembly/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3AWebAssembly)
[![CMakeBuilds](https://github.com/raysan5/raylib/workflows/CMakeBuilds/badge.svg)](https://github.com/raysan5/raylib/actions?query=workflow%3ACMakeBuilds)
[![Windows Examples](https://github.com/raysan5/raylib/actions/workflows/windows_examples.yml/badge.svg)](https://github.com/raysan5/raylib/actions/workflows/windows_examples.yml)
[![Linux Examples](https://github.com/raysan5/raylib/actions/workflows/linux_examples.yml/badge.svg)](https://github.com/raysan5/raylib/actions/workflows/linux_examples.yml)
features
--------
- **NO external dependencies**, all required libraries are [bundled into raylib](https://github.com/raysan5/raylib/tree/master/src/external)
- Multiple platforms supported: **Windows, Linux, MacOS, RPI, Android, HTML5... and more!**
- Written in plain C code (C99) using PascalCase/camelCase notation
- Hardware accelerated with OpenGL (**1.1, 2.1, 3.3, 4.3 or ES 2.0**)
- **Unique OpenGL abstraction layer** (usable as standalone module): [rlgl](https://github.com/raysan5/raylib/blob/master/src/rlgl.h)
- Multiple **Fonts** formats supported (TTF, Image fonts, AngelCode fonts)
- Multiple texture formats supported, including **compressed formats** (DXT, ETC, ASTC)
- **Full 3D support**, including 3D Shapes, Models, Billboards, Heightmaps and more!
- Flexible Materials system, supporting classic maps and **PBR maps**
- **Animated 3D models** supported (skeletal bones animation) (IQM)
- Shaders support, including model and **postprocessing** shaders.
- **Powerful math module** for Vector, Matrix and Quaternion operations: [raymath](https://github.com/raysan5/raylib/blob/master/src/raymath.h)
- Audio loading and playing with streaming support (WAV, OGG, MP3, FLAC, XM, MOD)
- **VR stereo rendering** support with configurable HMD device parameters
- Huge examples collection with [+120 code examples](https://github.com/raysan5/raylib/tree/master/examples)!
- Bindings to [+60 programming languages](https://github.com/raysan5/raylib/blob/master/BINDINGS.md)!
- **Free and open source**.
basic example
--------------
This is a basic raylib example, it creates a window and it draws the text `"Congrats! You created your first window!"` in the middle of the screen. Check this example [running live on web here](https://www.raylib.com/examples/core/loader.html?name=core_basic_window).
```c
#include "raylib.h"
int main(void)
{
InitWindow(800, 450, "raylib [core] example - basic window");
while (!WindowShouldClose())
{
BeginDrawing();
ClearBackground(RAYWHITE);
DrawText("Congrats! You created your first window!", 190, 200, 20, LIGHTGRAY);
EndDrawing();
}
CloseWindow();
return 0;
}
```
build and installation
----------------------
raylib binary releases for Windows, Linux, macOS, Android and HTML5 are available at the [Github Releases page](https://github.com/raysan5/raylib/releases).
raylib is also available via multiple [package managers](https://github.com/raysan5/raylib/issues/613) on multiple OS distributions.
#### Installing and building raylib on multiple platforms
[raylib Wiki](https://github.com/raysan5/raylib/wiki#development-platforms) contains detailed instructions on building and usage on multiple platforms.
- [Working on Windows](https://github.com/raysan5/raylib/wiki/Working-on-Windows)
- [Working on macOS](https://github.com/raysan5/raylib/wiki/Working-on-macOS)
- [Working on GNU Linux](https://github.com/raysan5/raylib/wiki/Working-on-GNU-Linux)
- [Working on Chrome OS](https://github.com/raysan5/raylib/wiki/Working-on-Chrome-OS)
- [Working on FreeBSD](https://github.com/raysan5/raylib/wiki/Working-on-FreeBSD)
- [Working on Raspberry Pi](https://github.com/raysan5/raylib/wiki/Working-on-Raspberry-Pi)
- [Working for Android](https://github.com/raysan5/raylib/wiki/Working-for-Android)
- [Working for Web (HTML5)](https://github.com/raysan5/raylib/wiki/Working-for-Web-(HTML5))
- [Working anywhere with CMake](https://github.com/raysan5/raylib/wiki/Working-with-CMake)
*Note that the Wiki is open for edit, if you find some issues while building raylib for your target platform, feel free to edit the Wiki or open an issue related to it.*
#### Setup raylib with multiple IDEs
raylib has been developed on Windows platform using [Notepad++](https://notepad-plus-plus.org/) and [MinGW GCC](https://www.mingw-w64.org/) compiler but it can be used with other IDEs on multiple platforms.
[Projects directory](https://github.com/raysan5/raylib/tree/master/projects) contains several ready-to-use **project templates** to build raylib and code examples with multiple IDEs.
*Note that there are lots of IDEs supported, some of the provided templates could require some review, so please, if you find some issue with a template or you think they could be improved, feel free to send a PR or open a related issue.*
learning and docs
------------------
raylib is designed to be learned using [the examples](https://github.com/raysan5/raylib/tree/master/examples) as the main reference. There is no standard API documentation but there is a [**cheatsheet**](https://www.raylib.com/cheatsheet/cheatsheet.html) containing all the functions available on the library a short description of each one of them, input parameters and result value names should be intuitive enough to understand how each function works.
Some additional documentation about raylib design can be found in raylib GitHub Wiki. Here are the relevant links:
- [raylib cheatsheet](https://www.raylib.com/cheatsheet/cheatsheet.html)
- [raylib architecture](https://github.com/raysan5/raylib/wiki/raylib-architecture)
- [raylib library design](https://github.com/raysan5/raylib/wiki)
- [raylib examples collection](https://github.com/raysan5/raylib/tree/master/examples)
- [raylib games collection](https://github.com/raysan5/raylib-games)
contact and networks
---------------------
raylib is present in several networks and raylib community is growing everyday. If you are using raylib and enjoying it, feel free to join us in any of these networks. The most active network is our [Discord server](https://discord.gg/raylib)! :)
- Webpage: [https://www.raylib.com](https://www.raylib.com)
- Discord: [https://discord.gg/raylib](https://discord.gg/raylib)
- Twitter: [https://www.twitter.com/raysan5](https://www.twitter.com/raysan5)
- Twitch: [https://www.twitch.tv/raysan5](https://www.twitch.tv/raysan5)
- Reddit: [https://www.reddit.com/r/raylib](https://www.reddit.com/r/raylib)
- Patreon: [https://www.patreon.com/raylib](https://www.patreon.com/raylib)
- YouTube: [https://www.youtube.com/channel/raylib](https://www.youtube.com/c/raylib)
license
-------
raylib is licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE) for further details.
raylib uses internally some libraries for window/graphics/inputs management and also to support different file formats loading, all those libraries are embedded with and are available in [src/external](https://github.com/raysan5/raylib/tree/master/src/external) directory. Check [raylib dependencies LICENSES](https://github.com/raysan5/raylib/wiki/raylib-dependencies) on raylib Wiki for details.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -8,6 +8,7 @@
#define DEMO_VIDEO_FEATURES 0
#ifdef PLATFORM_WEB
#include <emscripten.h>
#endif
@ -199,6 +200,7 @@ Vector3 NearestPointOnLine(Vector3 p1,
float numer,denom;
const float EPS = 0.001;
Vector3 zeroV;
p13.x = p1.x - p3.x;
p13.y = p1.y - p3.y;
@ -207,12 +209,12 @@ Vector3 NearestPointOnLine(Vector3 p1,
p43.y = p4.y - p3.y;
p43.z = p4.z - p3.z;
if (fabs(p43.x) < EPS && fabs(p43.y) < EPS && fabs(p43.z) < EPS)
return(Vector3){};
return zeroV;
p21.x = p2.x - p1.x;
p21.y = p2.y - p1.y;
p21.z = p2.z - p1.z;
if (fabs(p21.x) < EPS && fabs(p21.y) < EPS && fabs(p21.z) < EPS)
return(Vector3){};
return zeroV;
d1343 = p13.x * p43.x + p13.y * p43.y + p13.z * p43.z;
d4321 = p43.x * p21.x + p43.y * p21.y + p43.z * p21.z;
@ -222,7 +224,7 @@ Vector3 NearestPointOnLine(Vector3 p1,
denom = d2121 * d4343 - d4321 * d4321;
if (fabs(denom) < EPS)
return (Vector3){};
return zeroV;
numer = d1343 * d4321 - d1321 * d4343;
mua = numer / denom;
@ -278,7 +280,7 @@ int GuiFloatValueBox(Rectangle bounds, const char *text, float *value, float min
// Update control
//--------------------------------------------------------------------
if ((state != STATE_DISABLED) && !guiLocked && !guiSliderDragging)
if ((state != STATE_DISABLED) && !guiLocked)
{
Vector2 mousePoint = GetMousePosition();
@ -586,12 +588,28 @@ void add_shape(void) {
needs_rebuild = true;
}
#ifdef _MSC_VER
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
void append_format(char** data, int* size, int* capacity, _Printf_format_string_ const char* format, ...) {
va_list arg_ptr;
va_start(arg_ptr, format);
int added = vsnprintf(*data + *size, *capacity - *size, format, arg_ptr);
*size += MIN(added, *capacity - *size);
assert(*size < *capacity);
va_end(arg_ptr);
}
#else
#define MIN(x,y) ({ \
__typeof(x) xv = (x);\
__typeof(y) yv = (y); \
xv < yv ? xv : yv;\
})
__attribute__((format(printf, 4, 5)))
void append_format(char **data, int *size, int *capacity, const char *format, ...) {
@ -604,7 +622,7 @@ void append_format(char **data, int *size, int *capacity, const char *format, ..
va_end(arg_ptr);
}
#endif
Vector3 VertexInterp(Vector4 p1,Vector4 p2, float threshold) {
if (fabsf(threshold-p1.w) < 0.00001)
@ -1245,10 +1263,12 @@ int main(void){
SetTargetFPS(60);
# ifndef PLATFORM_WEB
# ifndef _MSC_VER
void swizzleWindow(void);
swizzleWindow();
void makeWindowKey(void);
makeWindowKey();
# endif
# endif
const int gamepad = 0;
@ -1494,7 +1514,7 @@ int main(void){
#endif
UpdateCameraPro(&camera, (Vector3){0, -delta.x/10, 0}, Vector3Zero(), 0);
}
} else if (IsMouseButtonDown(MOUSE_LEFT_BUTTON) && !guiSliderDragging && mouseAction == CONTROL_NONE && Vector2Distance(mouseDownPosition, GetMousePosition()) > 1) {
} else if (IsMouseButtonDown(MOUSE_LEFT_BUTTON) && mouseAction == CONTROL_NONE && Vector2Distance(mouseDownPosition, GetMousePosition()) > 1) {
mouseAction = CONTROL_ROTATE_CAMERA;
}
@ -1512,12 +1532,15 @@ int main(void){
}
}
#ifndef PLATFORM_WEB
#ifndef PLATFORM_WEB
#ifndef _MSC_VER
extern float magnification;
if (mouseAction == CONTROL_NONE ) {
CameraMoveForward(&camera, 8*magnification, false);
}
magnification = 0;
#endif
#endif
}
@ -1892,7 +1915,7 @@ int main(void){
BeginScissorMode((int)view_area.x, (int)view_area.y, (int)view_area.width, (int)view_area.height); {
const int first_visible = (int)floorf(-scroll_offset.y / row_height);
const int last_visible = first_visible + (int)ceilf(view_area.height / row_height);
for (int i=first_visible; i < MIN(last_visible+1,num_spheres); i++) {
for (int i=first_visible; i < __min(last_visible+1,num_spheres); i++) {
Sphere *s = &spheres[i];
const char *text = TextFormat("%c Shape %i", s->subtract ? '-' : '+', i+1);

768
src/shaders.h Normal file
View File

@ -0,0 +1,768 @@
unsigned char shader_base_fs[] = {
0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x61, 0x73, 0x74, 0x52, 0x61, 0x79,
0x28, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x6f,
0x2c, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x64,
0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66,
0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x69, 0x6e, 0x20, 0x3d, 0x20,
0x30, 0x2e, 0x31, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c,
0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x61, 0x78, 0x20, 0x3d, 0x20, 0x33,
0x30, 0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x74,
0x6d, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65,
0x63, 0x33, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28,
0x2d, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f,
0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x3d, 0x30, 0x3b, 0x20,
0x69, 0x3c, 0x36, 0x34, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x20, 0x29, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x70, 0x72,
0x65, 0x63, 0x69, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x30, 0x30,
0x31, 0x2a, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d,
0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x74,
0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x20,
0x72, 0x6f, 0x2b, 0x72, 0x64, 0x2a, 0x74, 0x20, 0x29, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x20,
0x72, 0x65, 0x73, 0x2e, 0x78, 0x3c, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73,
0x20, 0x7c, 0x7c, 0x20, 0x74, 0x3e, 0x74, 0x6d, 0x61, 0x78, 0x20, 0x29,
0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x72, 0x65,
0x73, 0x2e, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73, 0x2e, 0x67, 0x62,
0x61, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x20, 0x74, 0x3e, 0x74,
0x6d, 0x61, 0x78, 0x20, 0x29, 0x20, 0x6d, 0x3d, 0x76, 0x65, 0x63, 0x33,
0x28, 0x2d, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x20,
0x74, 0x2c, 0x20, 0x6d, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a,
0x0d, 0x0a, 0x0d, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x61,
0x6c, 0x63, 0x53, 0x6f, 0x66, 0x74, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77,
0x28, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x6f,
0x2c, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x64,
0x2c, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d,
0x69, 0x6e, 0x74, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x20, 0x74, 0x6d, 0x61, 0x78, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x72,
0x65, 0x73, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x20, 0x3d,
0x20, 0x6d, 0x69, 0x6e, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x3d, 0x30,
0x3b, 0x20, 0x69, 0x3c, 0x31, 0x36, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x20,
0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20,
0x68, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64,
0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c,
0x64, 0x28, 0x20, 0x72, 0x6f, 0x20, 0x2b, 0x20, 0x72, 0x64, 0x2a, 0x74,
0x20, 0x29, 0x2e, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x72, 0x65, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x69, 0x6e,
0x28, 0x20, 0x72, 0x65, 0x73, 0x2c, 0x20, 0x38, 0x2e, 0x30, 0x2a, 0x68,
0x2f, 0x74, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x74, 0x20, 0x2b, 0x3d, 0x20, 0x63, 0x6c, 0x61, 0x6d,
0x70, 0x28, 0x20, 0x68, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x32, 0x2c, 0x20,
0x30, 0x2e, 0x31, 0x30, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x20, 0x68, 0x3c, 0x30,
0x2e, 0x30, 0x30, 0x31, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x3e, 0x74, 0x6d,
0x61, 0x78, 0x20, 0x29, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70,
0x28, 0x20, 0x72, 0x65, 0x73, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20,
0x31, 0x2e, 0x30, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d,
0x0a, 0x76, 0x65, 0x63, 0x33, 0x20, 0x63, 0x61, 0x6c, 0x63, 0x4e, 0x6f,
0x72, 0x6d, 0x61, 0x6c, 0x28, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63,
0x33, 0x20, 0x70, 0x6f, 0x73, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x65, 0x20, 0x3d,
0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x2d, 0x31,
0x2e, 0x30, 0x29, 0x2a, 0x30, 0x2e, 0x35, 0x37, 0x37, 0x33, 0x2a, 0x30,
0x2e, 0x30, 0x30, 0x30, 0x35, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
0x6c, 0x69, 0x7a, 0x65, 0x28, 0x20, 0x65, 0x2e, 0x78, 0x79, 0x79, 0x2a,
0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61,
0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x20, 0x70,
0x6f, 0x73, 0x20, 0x2b, 0x20, 0x65, 0x2e, 0x78, 0x79, 0x79, 0x20, 0x29,
0x2e, 0x78, 0x20, 0x2b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x65, 0x2e, 0x79, 0x79, 0x78, 0x2a, 0x73, 0x69,
0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63,
0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x20, 0x70, 0x6f, 0x73,
0x20, 0x2b, 0x20, 0x65, 0x2e, 0x79, 0x79, 0x78, 0x20, 0x29, 0x2e, 0x78,
0x20, 0x2b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x65, 0x2e, 0x79, 0x78, 0x79, 0x2a, 0x73, 0x69, 0x67, 0x6e,
0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f,
0x66, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x20, 0x70, 0x6f, 0x73, 0x20, 0x2b,
0x20, 0x65, 0x2e, 0x79, 0x78, 0x79, 0x20, 0x29, 0x2e, 0x78, 0x20, 0x2b,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x65, 0x2e, 0x78, 0x78, 0x78, 0x2a, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64,
0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69,
0x65, 0x6c, 0x64, 0x28, 0x20, 0x70, 0x6f, 0x73, 0x20, 0x2b, 0x20, 0x65,
0x2e, 0x78, 0x78, 0x78, 0x20, 0x29, 0x2e, 0x78, 0x20, 0x29, 0x3b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2a, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x65, 0x70, 0x73, 0x20, 0x3d, 0x20,
0x76, 0x65, 0x63, 0x33, 0x28, 0x20, 0x30, 0x2e, 0x30, 0x30, 0x30, 0x35,
0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x20, 0x29,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20,
0x6e, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x69, 0x67,
0x6e, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65,
0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x70, 0x6f, 0x73, 0x2b, 0x65,
0x70, 0x73, 0x2e, 0x78, 0x79, 0x79, 0x29, 0x2e, 0x78, 0x20, 0x2d, 0x20,
0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61,
0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x70, 0x6f,
0x73, 0x2d, 0x65, 0x70, 0x73, 0x2e, 0x78, 0x79, 0x79, 0x29, 0x2e, 0x78,
0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73,
0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e,
0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x70, 0x6f, 0x73,
0x2b, 0x65, 0x70, 0x73, 0x2e, 0x79, 0x78, 0x79, 0x29, 0x2e, 0x78, 0x20,
0x2d, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x73,
0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x28,
0x70, 0x6f, 0x73, 0x2d, 0x65, 0x70, 0x73, 0x2e, 0x79, 0x78, 0x79, 0x29,
0x2e, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x74,
0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x70,
0x6f, 0x73, 0x2b, 0x65, 0x70, 0x73, 0x2e, 0x79, 0x79, 0x78, 0x29, 0x2e,
0x78, 0x20, 0x2d, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64,
0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c,
0x64, 0x28, 0x70, 0x6f, 0x73, 0x2d, 0x65, 0x70, 0x73, 0x2e, 0x79, 0x79,
0x78, 0x29, 0x2e, 0x78, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6e, 0x6f, 0x72, 0x6d,
0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x6e, 0x6f, 0x72, 0x29, 0x3b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x2a, 0x2f, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a,
0x0d, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x61, 0x6c, 0x63,
0x41, 0x4f, 0x28, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20,
0x70, 0x6f, 0x73, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33,
0x20, 0x6e, 0x6f, 0x72, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6f, 0x63, 0x63,
0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x63, 0x61, 0x20, 0x3d,
0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66,
0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x3d, 0x30, 0x3b,
0x20, 0x69, 0x3c, 0x35, 0x3b, 0x20, 0x69, 0x2b, 0x2b, 0x20, 0x29, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x68, 0x72,
0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x31, 0x20, 0x2b, 0x20, 0x30, 0x2e,
0x31, 0x32, 0x2a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69, 0x29, 0x2f,
0x34, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x61, 0x6f, 0x70, 0x6f, 0x73,
0x20, 0x3d, 0x20, 0x20, 0x6e, 0x6f, 0x72, 0x20, 0x2a, 0x20, 0x68, 0x72,
0x20, 0x2b, 0x20, 0x70, 0x6f, 0x73, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x64,
0x64, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64,
0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c,
0x64, 0x28, 0x20, 0x61, 0x6f, 0x70, 0x6f, 0x73, 0x20, 0x29, 0x2e, 0x78,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f,
0x63, 0x63, 0x20, 0x2b, 0x3d, 0x20, 0x2d, 0x28, 0x64, 0x64, 0x2d, 0x68,
0x72, 0x29, 0x2a, 0x73, 0x63, 0x61, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x63, 0x61, 0x20, 0x2a, 0x3d, 0x20,
0x30, 0x2e, 0x39, 0x35, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e,
0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x20, 0x31, 0x2e, 0x30, 0x20,
0x2d, 0x20, 0x33, 0x2e, 0x30, 0x2a, 0x6f, 0x63, 0x63, 0x2c, 0x20, 0x30,
0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x29, 0x3b, 0x0d, 0x0a,
0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x65,
0x6e, 0x64, 0x65, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63,
0x33, 0x20, 0x72, 0x6f, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63,
0x33, 0x20, 0x72, 0x64, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x63, 0x6f, 0x6c, 0x6f,
0x72, 0x20, 0x3d, 0x0d, 0x0a, 0x23, 0x69, 0x66, 0x64, 0x65, 0x66, 0x20,
0x46, 0x41, 0x4c, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f,
0x4d, 0x4f, 0x44, 0x45, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65,
0x63, 0x33, 0x28, 0x30, 0x2e, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6c,
0x73, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33,
0x28, 0x30, 0x2e, 0x34, 0x2c, 0x20, 0x30, 0x2e, 0x35, 0x2c, 0x20, 0x30,
0x2e, 0x36, 0x29, 0x20, 0x2b, 0x72, 0x64, 0x2e, 0x79, 0x2a, 0x30, 0x2e,
0x34, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x72, 0x65, 0x73,
0x75, 0x6c, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x73, 0x74, 0x52, 0x61,
0x79, 0x28, 0x72, 0x6f, 0x2c, 0x72, 0x64, 0x29, 0x3b, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x20, 0x3d,
0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x78, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6d, 0x20, 0x3d,
0x20, 0x72, 0x65, 0x73, 0x75, 0x6c, 0x74, 0x2e, 0x79, 0x7a, 0x77, 0x3b,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x20, 0x6d, 0x2e,
0x72, 0x3e, 0x2d, 0x30, 0x2e, 0x35, 0x20, 0x29, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x6f, 0x73, 0x20, 0x3d, 0x20,
0x72, 0x6f, 0x20, 0x2b, 0x20, 0x74, 0x2a, 0x72, 0x64, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33,
0x20, 0x6e, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x63, 0x4e,
0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x28, 0x20, 0x70, 0x6f, 0x73, 0x20, 0x29,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f,
0x2f, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x65, 0x66, 0x20, 0x3d,
0x20, 0x72, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x28, 0x20, 0x72, 0x64,
0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6d,
0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d,
0x20, 0x6d, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x20, 0x46,
0x41, 0x4c, 0x53, 0x45, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x5f, 0x4d,
0x4f, 0x44, 0x45, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x69,
0x6e, 0x67, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x2f, 0x2f, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6f, 0x63, 0x63,
0x20, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x63, 0x41, 0x4f, 0x28, 0x20, 0x70,
0x6f, 0x73, 0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x20, 0x29, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33,
0x20, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x20,
0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28,
0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x63, 0x6f, 0x73, 0x28, 0x2d, 0x30,
0x2e, 0x34, 0x29, 0x2c, 0x20, 0x73, 0x69, 0x6e, 0x28, 0x30, 0x2e, 0x37,
0x29, 0x2c, 0x20, 0x2d, 0x30, 0x2e, 0x36, 0x29, 0x20, 0x29, 0x3b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63,
0x33, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72,
0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x20, 0x6c, 0x69, 0x67, 0x68,
0x74, 0x5f, 0x64, 0x69, 0x72, 0x2d, 0x72, 0x64, 0x20, 0x29, 0x3b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f,
0x61, 0x74, 0x20, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x20, 0x3d,
0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x20, 0x30, 0x2e, 0x35, 0x2b,
0x30, 0x2e, 0x35, 0x2a, 0x6e, 0x6f, 0x72, 0x2e, 0x79, 0x2c, 0x20, 0x30,
0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x29, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x20, 0x64, 0x69, 0x66, 0x66, 0x75, 0x73, 0x65, 0x20, 0x3d, 0x20,
0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x20,
0x6e, 0x6f, 0x72, 0x2c, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x64,
0x69, 0x72, 0x20, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31,
0x2e, 0x30, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x62, 0x61, 0x63,
0x6b, 0x5f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3d, 0x20, 0x63, 0x6c,
0x61, 0x6d, 0x70, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x20, 0x6e, 0x6f,
0x72, 0x2c, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65,
0x28, 0x76, 0x65, 0x63, 0x33, 0x28, 0x2d, 0x6c, 0x69, 0x67, 0x68, 0x74,
0x5f, 0x64, 0x69, 0x72, 0x2e, 0x78, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x2d,
0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x64, 0x69, 0x72, 0x2e, 0x7a, 0x29,
0x29, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x31, 0x2e, 0x30,
0x20, 0x29, 0x2a, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x20, 0x31, 0x2e,
0x30, 0x2d, 0x70, 0x6f, 0x73, 0x2e, 0x79, 0x2c, 0x30, 0x2e, 0x30, 0x2c,
0x31, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f,
0x3a, 0x20, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20,
0x6f, 0x6e, 0x20, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x73, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69, 0x66, 0x66,
0x75, 0x73, 0x65, 0x20, 0x2a, 0x3d, 0x20, 0x63, 0x61, 0x6c, 0x63, 0x53,
0x6f, 0x66, 0x74, 0x73, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x28, 0x20, 0x70,
0x6f, 0x73, 0x2c, 0x20, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x64, 0x69,
0x72, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x32, 0x2c, 0x20, 0x32, 0x2e, 0x35,
0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x70, 0x65,
0x20, 0x3d, 0x20, 0x70, 0x6f, 0x77, 0x28, 0x20, 0x63, 0x6c, 0x61, 0x6d,
0x70, 0x28, 0x20, 0x64, 0x6f, 0x74, 0x28, 0x20, 0x6e, 0x6f, 0x72, 0x2c,
0x20, 0x68, 0x61, 0x6c, 0x20, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c,
0x20, 0x31, 0x2e, 0x30, 0x20, 0x29, 0x2c, 0x31, 0x36, 0x2e, 0x30, 0x29,
0x2a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64,
0x69, 0x66, 0x66, 0x75, 0x73, 0x65, 0x20, 0x2a, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x28, 0x30, 0x2e, 0x30, 0x34, 0x20,
0x2b, 0x20, 0x30, 0x2e, 0x39, 0x36, 0x2a, 0x70, 0x6f, 0x77, 0x28, 0x20,
0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x31, 0x2e, 0x30, 0x2b, 0x64, 0x6f,
0x74, 0x28, 0x68, 0x61, 0x6c, 0x2c, 0x72, 0x64, 0x29, 0x2c, 0x30, 0x2e,
0x30, 0x2c, 0x31, 0x2e, 0x30, 0x29, 0x2c, 0x20, 0x35, 0x2e, 0x30, 0x20,
0x29, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6c, 0x69, 0x6e, 0x20,
0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x29, 0x3b,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x69,
0x6e, 0x20, 0x2b, 0x3d, 0x20, 0x31, 0x2e, 0x33, 0x30, 0x2a, 0x64, 0x69,
0x66, 0x66, 0x75, 0x73, 0x65, 0x2a, 0x76, 0x65, 0x63, 0x33, 0x28, 0x31,
0x2e, 0x30, 0x30, 0x2c, 0x30, 0x2e, 0x38, 0x30, 0x2c, 0x30, 0x2e, 0x35,
0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x6c, 0x69, 0x6e, 0x20, 0x2b, 0x3d, 0x20, 0x30, 0x2e, 0x34, 0x30,
0x2a, 0x61, 0x6d, 0x62, 0x69, 0x65, 0x6e, 0x74, 0x2a, 0x76, 0x65, 0x63,
0x33, 0x28, 0x30, 0x2e, 0x34, 0x30, 0x2c, 0x30, 0x2e, 0x36, 0x30, 0x2c,
0x31, 0x2e, 0x30, 0x30, 0x29, 0x3b, 0x2f, 0x2f, 0x2a, 0x6f, 0x63, 0x63,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c,
0x69, 0x6e, 0x20, 0x2b, 0x3d, 0x20, 0x30, 0x2e, 0x35, 0x30, 0x2a, 0x62,
0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x67, 0x68, 0x74, 0x2a, 0x76, 0x65,
0x63, 0x33, 0x28, 0x30, 0x2e, 0x32, 0x35, 0x2c, 0x30, 0x2e, 0x32, 0x35,
0x2c, 0x30, 0x2e, 0x32, 0x35, 0x29, 0x3b, 0x2f, 0x2f, 0x2a, 0x6f, 0x63,
0x63, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x6c, 0x6f,
0x72, 0x2a, 0x6c, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x2b, 0x3d,
0x20, 0x31, 0x30, 0x2e, 0x30, 0x30, 0x2a, 0x73, 0x70, 0x65, 0x2a, 0x76,
0x65, 0x63, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x30, 0x2c, 0x30, 0x2e, 0x39,
0x30, 0x2c, 0x30, 0x2e, 0x37, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x65,
0x63, 0x33, 0x28, 0x20, 0x63, 0x6c, 0x61, 0x6d, 0x70, 0x28, 0x63, 0x6f,
0x6c, 0x6f, 0x72, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x29,
0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x6d, 0x61,
0x74, 0x33, 0x20, 0x73, 0x65, 0x74, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61,
0x28, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x6f,
0x2c, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, 0x61,
0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x72, 0x20, 0x29,
0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63,
0x33, 0x20, 0x63, 0x77, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
0x6c, 0x69, 0x7a, 0x65, 0x28, 0x74, 0x61, 0x2d, 0x72, 0x6f, 0x29, 0x3b,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x63,
0x70, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x73, 0x69, 0x6e,
0x28, 0x63, 0x72, 0x29, 0x2c, 0x20, 0x63, 0x6f, 0x73, 0x28, 0x63, 0x72,
0x29, 0x2c, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x63, 0x75, 0x20, 0x3d, 0x20, 0x6e,
0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x20, 0x63, 0x72,
0x6f, 0x73, 0x73, 0x28, 0x63, 0x77, 0x2c, 0x63, 0x70, 0x29, 0x20, 0x29,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20,
0x63, 0x76, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69,
0x7a, 0x65, 0x28, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x28, 0x63, 0x75,
0x2c, 0x63, 0x77, 0x29, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x33,
0x28, 0x20, 0x63, 0x75, 0x2c, 0x20, 0x63, 0x76, 0x2c, 0x20, 0x63, 0x77,
0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x2f, 0x2f,
0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x78, 0x79, 0x7a, 0x20, 0x6d,
0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
0x6c, 0x69, 0x7a, 0x65, 0x64, 0x0d, 0x0a, 0x66, 0x6c, 0x6f, 0x61, 0x74,
0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x73,
0x65, 0x63, 0x74, 0x28, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33,
0x20, 0x72, 0x6f, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x33,
0x20, 0x72, 0x64, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x34,
0x20, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x20, 0x29, 0x20, 0x20, 0x7b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
0x2d, 0x28, 0x64, 0x6f, 0x74, 0x28, 0x72, 0x6f, 0x2c, 0x70, 0x6c, 0x61,
0x6e, 0x65, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x2b, 0x70, 0x6c, 0x61, 0x6e,
0x65, 0x2e, 0x77, 0x29, 0x2f, 0x64, 0x6f, 0x74, 0x28, 0x72, 0x64, 0x2c,
0x70, 0x6c, 0x61, 0x6e, 0x65, 0x2e, 0x78, 0x79, 0x7a, 0x29, 0x3b, 0x0d,
0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d,
0x61, 0x69, 0x6e, 0x28, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, 0x6f, 0x74, 0x20, 0x3d,
0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d,
0x0a, 0x2f, 0x2f, 0x20, 0x54, 0x4f, 0x44, 0x4f, 0x3a, 0x20, 0x20, 0x74,
0x75, 0x72, 0x6e, 0x20, 0x62, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x6e, 0x20,
0x41, 0x41, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20,
0x41, 0x41, 0x20, 0x31, 0x0d, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x41, 0x41,
0x3e, 0x31, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x28,
0x20, 0x69, 0x6e, 0x74, 0x20, 0x6d, 0x3d, 0x30, 0x3b, 0x20, 0x6d, 0x3c,
0x41, 0x41, 0x3b, 0x20, 0x6d, 0x2b, 0x2b, 0x20, 0x29, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20,
0x6e, 0x3d, 0x30, 0x3b, 0x20, 0x6e, 0x3c, 0x41, 0x41, 0x3b, 0x20, 0x6e,
0x2b, 0x2b, 0x20, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2f, 0x2f, 0x20,
0x70, 0x69, 0x78, 0x65, 0x6c, 0x20, 0x63, 0x6f, 0x6f, 0x72, 0x64, 0x69,
0x6e, 0x61, 0x74, 0x65, 0x73, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6f, 0x20, 0x3d, 0x20,
0x76, 0x65, 0x63, 0x32, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x6d,
0x29, 0x2c, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x6e, 0x29, 0x29, 0x20,
0x2f, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x41, 0x41, 0x29, 0x20,
0x2d, 0x20, 0x30, 0x2e, 0x35, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x70, 0x20, 0x3d,
0x20, 0x28, 0x2d, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f,
0x6e, 0x2e, 0x78, 0x79, 0x20, 0x2b, 0x20, 0x32, 0x2e, 0x30, 0x2a, 0x28,
0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6f, 0x72, 0x64,
0x2e, 0x78, 0x79, 0x2b, 0x6f, 0x29, 0x29, 0x2f, 0x72, 0x65, 0x73, 0x6f,
0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x79, 0x3b, 0x0d, 0x0a, 0x23,
0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x70, 0x20, 0x3d, 0x20, 0x28,
0x2d, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e,
0x78, 0x79, 0x20, 0x2b, 0x20, 0x32, 0x2e, 0x30, 0x2a, 0x67, 0x6c, 0x5f,
0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x79,
0x29, 0x2f, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e,
0x2e, 0x79, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d,
0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76,
0x65, 0x63, 0x33, 0x20, 0x72, 0x6f, 0x20, 0x3d, 0x20, 0x76, 0x69, 0x65,
0x77, 0x45, 0x79, 0x65, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, 0x61, 0x20, 0x3d,
0x20, 0x76, 0x69, 0x65, 0x77, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b,
0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x6d, 0x61, 0x74, 0x33, 0x20, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f,
0x74, 0x6f, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x20, 0x3d, 0x20, 0x73,
0x65, 0x74, 0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x28, 0x20, 0x72, 0x6f,
0x2c, 0x20, 0x74, 0x61, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x20, 0x29, 0x3b,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65,
0x63, 0x33, 0x20, 0x72, 0x61, 0x79, 0x5f, 0x64, 0x69, 0x72, 0x65, 0x63,
0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d, 0x20, 0x63, 0x61, 0x6d, 0x65, 0x72,
0x61, 0x5f, 0x74, 0x6f, 0x5f, 0x77, 0x6f, 0x72, 0x6c, 0x64, 0x20, 0x2a,
0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x20,
0x76, 0x65, 0x63, 0x33, 0x28, 0x70, 0x2e, 0x78, 0x79, 0x2c, 0x32, 0x2e,
0x30, 0x29, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x63, 0x6f,
0x6c, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x28, 0x20,
0x72, 0x6f, 0x2c, 0x20, 0x72, 0x61, 0x79, 0x5f, 0x64, 0x69, 0x72, 0x65,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x20,
0x3d, 0x20, 0x70, 0x6f, 0x77, 0x28, 0x20, 0x63, 0x6f, 0x6c, 0x2c, 0x20,
0x76, 0x65, 0x63, 0x33, 0x28, 0x30, 0x2e, 0x34, 0x35, 0x34, 0x35, 0x29,
0x20, 0x29, 0x3b, 0x20, 0x2f, 0x2f, 0x20, 0x67, 0x61, 0x6d, 0x6d, 0x61,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28,
0x76, 0x69, 0x73, 0x75, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x72, 0x20, 0x3e,
0x20, 0x30, 0x2e, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x20, 0x64, 0x69, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x6c, 0x61,
0x6e, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x73, 0x65, 0x63, 0x74, 0x28,
0x72, 0x6f, 0x2c, 0x20, 0x72, 0x61, 0x79, 0x5f, 0x64, 0x69, 0x72, 0x65,
0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28,
0x30, 0x2c, 0x30, 0x2c, 0x31, 0x2e, 0x2c, 0x30, 0x29, 0x29, 0x3b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x69, 0x66, 0x20, 0x28, 0x64, 0x69, 0x73, 0x74, 0x20, 0x3e, 0x20,
0x30, 0x2e, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76,
0x65, 0x63, 0x33, 0x20, 0x74, 0x20, 0x3d, 0x20, 0x72, 0x6f, 0x20, 0x2b,
0x20, 0x64, 0x69, 0x73, 0x74, 0x2a, 0x72, 0x61, 0x79, 0x5f, 0x64, 0x69,
0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x64, 0x66, 0x5f,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x67, 0x6e,
0x65, 0x64, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f,
0x66, 0x69, 0x65, 0x6c, 0x64, 0x28, 0x74, 0x29, 0x2e, 0x78, 0x3b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x66, 0x69,
0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20,
0x28, 0x73, 0x64, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x3c,
0x20, 0x30, 0x2e, 0x20, 0x3f, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34,
0x28, 0x31, 0x2e, 0x2c, 0x30, 0x2e, 0x2c, 0x30, 0x2e, 0x2c, 0x20, 0x73,
0x69, 0x6e, 0x28, 0x73, 0x64, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x2a, 0x38, 0x2e, 0x2b, 0x72, 0x75, 0x6e, 0x54, 0x69, 0x6d, 0x65, 0x2a,
0x32, 0x2e, 0x29, 0x2f, 0x34, 0x2e, 0x20, 0x2b, 0x20, 0x30, 0x2e, 0x32,
0x35, 0x29, 0x3a, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30,
0x2e, 0x31, 0x35, 0x2c, 0x20, 0x30, 0x2e, 0x31, 0x35, 0x2c, 0x30, 0x2e,
0x38, 0x2c, 0x73, 0x69, 0x6e, 0x28, 0x73, 0x64, 0x66, 0x5f, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x2a, 0x38, 0x2e, 0x2d, 0x72, 0x75, 0x6e, 0x54, 0x69,
0x6d, 0x65, 0x2a, 0x32, 0x2e, 0x29, 0x2f, 0x34, 0x2e, 0x20, 0x2b, 0x20,
0x30, 0x2e, 0x32, 0x35, 0x20, 0x29, 0x29, 0x20, 0x3b, 0x0d, 0x0a, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x6c, 0x20, 0x3d, 0x20, 0x6d,
0x69, 0x78, 0x28, 0x63, 0x6f, 0x6c, 0x2c, 0x20, 0x66, 0x69, 0x65, 0x6c,
0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x2c,
0x20, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72,
0x2e, 0x61, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x6f, 0x74, 0x20, 0x2b, 0x3d,
0x20, 0x63, 0x6f, 0x6c, 0x3b, 0x0d, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x41,
0x41, 0x3e, 0x31, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x74, 0x6f, 0x74, 0x20, 0x2f, 0x3d, 0x20, 0x66,
0x6c, 0x6f, 0x61, 0x74, 0x28, 0x41, 0x41, 0x2a, 0x41, 0x41, 0x29, 0x3b,
0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c,
0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x20, 0x74,
0x6f, 0x74, 0x2c, 0x20, 0x31, 0x2e, 0x30, 0x20, 0x29, 0x3b, 0x0d, 0x0a,
0x7d, 0x0d, 0x0a, 0x00
};
unsigned int shader_base_fs_len = 5308;
unsigned char shader_prefix_fs[] = {
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x64, 0x52, 0x6f, 0x75, 0x6e,
0x64, 0x42, 0x6f, 0x78, 0x28, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70,
0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x62, 0x2c, 0x20, 0x66, 0x6c,
0x6f, 0x61, 0x74, 0x20, 0x72, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a,
0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x71, 0x20, 0x3d, 0x20, 0x61,
0x62, 0x73, 0x28, 0x70, 0x29, 0x20, 0x2d, 0x20, 0x62, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x65, 0x6e,
0x67, 0x74, 0x68, 0x28, 0x6d, 0x61, 0x78, 0x28, 0x71, 0x2c, 0x30, 0x2e,
0x30, 0x29, 0x29, 0x20, 0x2b, 0x20, 0x6d, 0x69, 0x6e, 0x28, 0x6d, 0x61,
0x78, 0x28, 0x71, 0x2e, 0x78, 0x2c, 0x6d, 0x61, 0x78, 0x28, 0x71, 0x2e,
0x79, 0x2c, 0x71, 0x2e, 0x7a, 0x29, 0x29, 0x2c, 0x30, 0x2e, 0x30, 0x29,
0x20, 0x2d, 0x20, 0x72, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a,
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x6f, 0x75, 0x6e, 0x64, 0x42,
0x6f, 0x78, 0x28, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x2c, 0x20,
0x76, 0x65, 0x63, 0x33, 0x20, 0x62, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x20, 0x72, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20,
0x76, 0x65, 0x63, 0x33, 0x20, 0x71, 0x20, 0x3d, 0x20, 0x61, 0x62, 0x73,
0x28, 0x70, 0x29, 0x20, 0x2d, 0x20, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6c, 0x65, 0x6e, 0x67, 0x74,
0x68, 0x28, 0x6d, 0x61, 0x78, 0x28, 0x71, 0x2c, 0x30, 0x2e, 0x30, 0x29,
0x29, 0x20, 0x2b, 0x20, 0x6d, 0x69, 0x6e, 0x28, 0x6d, 0x61, 0x78, 0x28,
0x71, 0x2e, 0x78, 0x2c, 0x6d, 0x61, 0x78, 0x28, 0x71, 0x2e, 0x79, 0x2c,
0x71, 0x2e, 0x7a, 0x29, 0x29, 0x2c, 0x30, 0x2e, 0x30, 0x29, 0x20, 0x2d,
0x20, 0x72, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a,
0x76, 0x65, 0x63, 0x34, 0x20, 0x6f, 0x70, 0x53, 0x6d, 0x6f, 0x6f, 0x74,
0x68, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x76, 0x65, 0x63, 0x34,
0x20, 0x61, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x62, 0x2c, 0x20,
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x20,
0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c,
0x6f, 0x61, 0x74, 0x20, 0x68, 0x20, 0x3d, 0x20, 0x20, 0x6d, 0x61, 0x78,
0x28, 0x20, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x2d, 0x61, 0x62, 0x73, 0x28,
0x61, 0x2e, 0x78, 0x2d, 0x62, 0x2e, 0x78, 0x29, 0x2c, 0x20, 0x30, 0x2e,
0x30, 0x20, 0x29, 0x2f, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x20,
0x3d, 0x20, 0x68, 0x2a, 0x68, 0x2a, 0x30, 0x2e, 0x35, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x20,
0x3d, 0x20, 0x6d, 0x2a, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x2a, 0x28, 0x31,
0x2e, 0x30, 0x2f, 0x32, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x61, 0x2e,
0x78, 0x3c, 0x62, 0x2e, 0x78, 0x29, 0x20, 0x3f, 0x20, 0x76, 0x65, 0x63,
0x34, 0x28, 0x61, 0x2e, 0x78, 0x2d, 0x73, 0x2c, 0x6d, 0x69, 0x78, 0x28,
0x61, 0x2e, 0x67, 0x62, 0x61, 0x2c, 0x62, 0x2e, 0x67, 0x62, 0x61, 0x2c,
0x6d, 0x29, 0x29, 0x20, 0x3a, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x62,
0x2e, 0x78, 0x2d, 0x73, 0x2c, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x2e, 0x67,
0x62, 0x61, 0x2c, 0x62, 0x2e, 0x67, 0x62, 0x61, 0x2c, 0x31, 0x2e, 0x30,
0x2d, 0x6d, 0x29, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a,
0x76, 0x65, 0x63, 0x34, 0x20, 0x42, 0x6c, 0x6f, 0x62, 0x62, 0x79, 0x4d,
0x69, 0x6e, 0x28, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61, 0x2c, 0x20,
0x76, 0x65, 0x63, 0x34, 0x20, 0x62, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x20, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x20, 0x29, 0x0d, 0x0a, 0x7b,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20,
0x68, 0x20, 0x3d, 0x20, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x20, 0x62, 0x6c,
0x65, 0x6e, 0x64, 0x2d, 0x61, 0x62, 0x73, 0x28, 0x61, 0x2e, 0x78, 0x2d,
0x62, 0x2e, 0x78, 0x29, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x20, 0x29, 0x2f,
0x62, 0x6c, 0x65, 0x6e, 0x64, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x68, 0x2a,
0x68, 0x2a, 0x30, 0x2e, 0x35, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x2a,
0x62, 0x6c, 0x65, 0x6e, 0x64, 0x2a, 0x28, 0x31, 0x2e, 0x30, 0x2f, 0x32,
0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
0x74, 0x75, 0x72, 0x6e, 0x20, 0x28, 0x61, 0x2e, 0x78, 0x3c, 0x62, 0x2e,
0x78, 0x29, 0x20, 0x3f, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x61, 0x2e,
0x78, 0x2d, 0x73, 0x2c, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x2e, 0x67, 0x62,
0x61, 0x2c, 0x62, 0x2e, 0x67, 0x62, 0x61, 0x2c, 0x6d, 0x29, 0x29, 0x20,
0x3a, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x62, 0x2e, 0x78, 0x2d, 0x73,
0x2c, 0x6d, 0x69, 0x78, 0x28, 0x61, 0x2e, 0x67, 0x62, 0x61, 0x2c, 0x62,
0x2e, 0x67, 0x62, 0x61, 0x2c, 0x31, 0x2e, 0x30, 0x2d, 0x6d, 0x29, 0x29,
0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x65, 0x63, 0x34,
0x20, 0x4d, 0x69, 0x6e, 0x28, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x61,
0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x62, 0x20, 0x29, 0x0d, 0x0a,
0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
0x6e, 0x20, 0x28, 0x61, 0x2e, 0x78, 0x3c, 0x62, 0x2e, 0x78, 0x29, 0x20,
0x3f, 0x20, 0x61, 0x20, 0x3a, 0x20, 0x62, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d,
0x0a, 0x0d, 0x0a, 0x76, 0x65, 0x63, 0x34, 0x20, 0x6f, 0x70, 0x53, 0x6d,
0x6f, 0x6f, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x65,
0x70, 0x70, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x20, 0x76,
0x65, 0x63, 0x34, 0x20, 0x61, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20,
0x62, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x62, 0x6c, 0x65,
0x6e, 0x64, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x68, 0x20, 0x3d, 0x20, 0x20,
0x6d, 0x61, 0x78, 0x28, 0x20, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x2d, 0x61,
0x62, 0x73, 0x28, 0x61, 0x2e, 0x78, 0x2d, 0x62, 0x2e, 0x78, 0x29, 0x2c,
0x20, 0x30, 0x2e, 0x30, 0x20, 0x29, 0x2f, 0x62, 0x6c, 0x65, 0x6e, 0x64,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74,
0x20, 0x6d, 0x20, 0x3d, 0x20, 0x68, 0x2a, 0x68, 0x2a, 0x30, 0x2e, 0x35,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74,
0x20, 0x73, 0x20, 0x3d, 0x20, 0x6d, 0x2a, 0x62, 0x6c, 0x65, 0x6e, 0x64,
0x2a, 0x28, 0x31, 0x2e, 0x30, 0x2f, 0x32, 0x2e, 0x30, 0x29, 0x3b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
0x28, 0x61, 0x2e, 0x78, 0x3c, 0x62, 0x2e, 0x78, 0x29, 0x20, 0x3f, 0x20,
0x76, 0x65, 0x63, 0x34, 0x28, 0x61, 0x2e, 0x78, 0x2d, 0x73, 0x2c, 0x61,
0x2e, 0x67, 0x62, 0x61, 0x29, 0x20, 0x3a, 0x20, 0x76, 0x65, 0x63, 0x34,
0x28, 0x62, 0x2e, 0x78, 0x2d, 0x73, 0x2c, 0x62, 0x2e, 0x67, 0x62, 0x61,
0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x65, 0x63,
0x34, 0x20, 0x6f, 0x70, 0x53, 0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x53, 0x75,
0x62, 0x74, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x20, 0x76,
0x65, 0x63, 0x34, 0x20, 0x64, 0x31, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x34,
0x20, 0x64, 0x32, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x6b,
0x20, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c,
0x6f, 0x61, 0x74, 0x20, 0x64, 0x69, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x6f,
0x70, 0x53, 0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x6f, 0x6e,
0x28, 0x64, 0x31, 0x2c, 0x76, 0x65, 0x63, 0x34, 0x28, 0x2d, 0x64, 0x32,
0x2e, 0x78, 0x2c, 0x20, 0x64, 0x32, 0x2e, 0x67, 0x62, 0x61, 0x29, 0x2c,
0x6b, 0x29, 0x2e, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x2d,
0x64, 0x69, 0x73, 0x74, 0x2c, 0x20, 0x64, 0x32, 0x2e, 0x67, 0x62, 0x61,
0x29, 0x3b, 0x20, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x65,
0x63, 0x34, 0x20, 0x6f, 0x70, 0x53, 0x28, 0x20, 0x76, 0x65, 0x63, 0x34,
0x20, 0x64, 0x31, 0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x64, 0x32,
0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x6d,
0x61, 0x78, 0x28, 0x2d, 0x64, 0x32, 0x2e, 0x78, 0x2c, 0x64, 0x31, 0x2e,
0x78, 0x29, 0x2c, 0x20, 0x64, 0x31, 0x2e, 0x67, 0x62, 0x61, 0x29, 0x3b,
0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x65, 0x63, 0x34, 0x20,
0x6f, 0x70, 0x55, 0x28, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x64, 0x31,
0x2c, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x64, 0x32, 0x20, 0x29, 0x0d,
0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
0x72, 0x6e, 0x20, 0x28, 0x64, 0x31, 0x2e, 0x78, 0x3c, 0x64, 0x32, 0x2e,
0x78, 0x29, 0x20, 0x3f, 0x20, 0x64, 0x31, 0x20, 0x3a, 0x20, 0x64, 0x32,
0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x65, 0x63, 0x33,
0x20, 0x6f, 0x70, 0x53, 0x79, 0x6d, 0x58, 0x28, 0x20, 0x76, 0x65, 0x63,
0x33, 0x20, 0x70, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x70, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x61, 0x62, 0x73, 0x28,
0x70, 0x2e, 0x78, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d,
0x0a, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6f, 0x70, 0x53, 0x79, 0x6d, 0x59,
0x28, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x20, 0x29, 0x0d, 0x0a,
0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x2e, 0x79, 0x20, 0x3d,
0x20, 0x61, 0x62, 0x73, 0x28, 0x70, 0x2e, 0x79, 0x29, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70,
0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6f,
0x70, 0x53, 0x79, 0x6d, 0x5a, 0x28, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20,
0x70, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x70, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x61, 0x62, 0x73, 0x28, 0x70, 0x2e,
0x7a, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
0x75, 0x72, 0x6e, 0x20, 0x70, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x76,
0x65, 0x63, 0x33, 0x20, 0x6f, 0x70, 0x53, 0x79, 0x6d, 0x58, 0x59, 0x28,
0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x20, 0x29, 0x0d, 0x0a, 0x7b,
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x2e, 0x78, 0x79, 0x20, 0x3d,
0x20, 0x61, 0x62, 0x73, 0x28, 0x70, 0x2e, 0x78, 0x79, 0x29, 0x3b, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20,
0x70, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x76, 0x65, 0x63, 0x33, 0x20,
0x6f, 0x70, 0x53, 0x79, 0x6d, 0x58, 0x5a, 0x28, 0x20, 0x76, 0x65, 0x63,
0x33, 0x20, 0x70, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x70, 0x2e, 0x78, 0x7a, 0x20, 0x3d, 0x20, 0x61, 0x62, 0x73,
0x28, 0x70, 0x2e, 0x78, 0x7a, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x3b, 0x0d, 0x0a,
0x7d, 0x0d, 0x0a, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6f, 0x70, 0x53, 0x79,
0x6d, 0x59, 0x5a, 0x28, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x20,
0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x2e,
0x79, 0x7a, 0x20, 0x3d, 0x20, 0x61, 0x62, 0x73, 0x28, 0x70, 0x2e, 0x79,
0x7a, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74,
0x75, 0x72, 0x6e, 0x20, 0x70, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x76,
0x65, 0x63, 0x33, 0x20, 0x6f, 0x70, 0x53, 0x79, 0x6d, 0x58, 0x59, 0x5a,
0x28, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70, 0x20, 0x29, 0x0d, 0x0a,
0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x70, 0x2e, 0x78, 0x79, 0x7a,
0x20, 0x3d, 0x20, 0x61, 0x62, 0x73, 0x28, 0x70, 0x2e, 0x78, 0x79, 0x7a,
0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
0x72, 0x6e, 0x20, 0x70, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a,
0x76, 0x65, 0x63, 0x33, 0x20, 0x6f, 0x70, 0x52, 0x6f, 0x74, 0x61, 0x74,
0x65, 0x58, 0x59, 0x5a, 0x28, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x70,
0x2c, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x74, 0x68, 0x65, 0x74, 0x61,
0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c,
0x6f, 0x61, 0x74, 0x20, 0x63, 0x7a, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x73,
0x28, 0x74, 0x68, 0x65, 0x74, 0x61, 0x2e, 0x7a, 0x29, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x7a,
0x20, 0x3d, 0x20, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x68, 0x65, 0x74, 0x61,
0x2e, 0x7a, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c,
0x6f, 0x61, 0x74, 0x20, 0x63, 0x79, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x73,
0x28, 0x74, 0x68, 0x65, 0x74, 0x61, 0x2e, 0x79, 0x29, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x79,
0x20, 0x3d, 0x20, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x68, 0x65, 0x74, 0x61,
0x2e, 0x79, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c,
0x6f, 0x61, 0x74, 0x20, 0x63, 0x78, 0x20, 0x3d, 0x20, 0x63, 0x6f, 0x73,
0x28, 0x74, 0x68, 0x65, 0x74, 0x61, 0x2e, 0x78, 0x29, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x78,
0x20, 0x3d, 0x20, 0x73, 0x69, 0x6e, 0x28, 0x74, 0x68, 0x65, 0x74, 0x61,
0x2e, 0x78, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x6d, 0x61, 0x74, 0x33, 0x20, 0x6d, 0x61, 0x74, 0x20, 0x3d, 0x20, 0x6d,
0x61, 0x74, 0x33, 0x28, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x7a,
0x2a, 0x63, 0x79, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x7a,
0x2a, 0x73, 0x79, 0x2a, 0x73, 0x78, 0x20, 0x2d, 0x20, 0x63, 0x78, 0x2a,
0x73, 0x7a, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x73, 0x7a, 0x2a,
0x73, 0x78, 0x20, 0x2b, 0x20, 0x63, 0x7a, 0x2a, 0x63, 0x78, 0x2a, 0x73,
0x79, 0x2c, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x79,
0x2a, 0x73, 0x7a, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x7a,
0x2a, 0x63, 0x78, 0x20, 0x2b, 0x20, 0x73, 0x7a, 0x2a, 0x73, 0x79, 0x2a,
0x73, 0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x78, 0x2a,
0x73, 0x7a, 0x2a, 0x73, 0x79, 0x20, 0x2d, 0x20, 0x63, 0x7a, 0x2a, 0x73,
0x78, 0x2c, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x2d, 0x73,
0x79, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x79, 0x2a, 0x73,
0x78, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x79, 0x2a, 0x63,
0x78, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72,
0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x2a, 0x70, 0x3b,
0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x0d, 0x0a, 0x0d, 0x0a, 0x00
};
unsigned int shader_prefix_fs_len = 2446;
unsigned char slicer_body_fs[] = {
0x69, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x66, 0x72, 0x61, 0x67,
0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a, 0x6f,
0x75, 0x74, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x66, 0x69, 0x6e, 0x61,
0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69,
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x7a,
0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61,
0x69, 0x6e, 0x28, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x73, 0x64, 0x66, 0x5f, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65,
0x64, 0x5f, 0x64, 0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66,
0x69, 0x65, 0x6c, 0x64, 0x28, 0x76, 0x65, 0x63, 0x33, 0x28, 0x66, 0x72,
0x61, 0x67, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2c, 0x20,
0x7a, 0x29, 0x29, 0x2e, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x66, 0x69, 0x6e, 0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d,
0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x76, 0x65, 0x63, 0x33, 0x28,
0x73, 0x64, 0x66, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x2c, 0x20,
0x31, 0x2e, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a, 0x00
};
unsigned int slicer_body_fs_len = 202;
unsigned char selection_fs[] = {
0x6f, 0x75, 0x74, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x66, 0x69, 0x6e,
0x61, 0x6c, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x3b, 0x0d, 0x0a, 0x2f, 0x2f,
0x20, 0x69, 0x6e, 0x74, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65,
0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69,
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x69,
0x65, 0x77, 0x45, 0x79, 0x65, 0x3b, 0x20, 0x0d, 0x0a, 0x75, 0x6e, 0x69,
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x76, 0x69,
0x65, 0x77, 0x43, 0x65, 0x6e, 0x74, 0x65, 0x72, 0x3b, 0x20, 0x0d, 0x0a,
0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x76, 0x65, 0x63, 0x32,
0x20, 0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x3b,
0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x61, 0x73,
0x74, 0x52, 0x61, 0x79, 0x28, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63,
0x33, 0x20, 0x72, 0x6f, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x76, 0x65, 0x63,
0x33, 0x20, 0x72, 0x64, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x69,
0x6e, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x31, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74, 0x6d, 0x61, 0x78,
0x20, 0x3d, 0x20, 0x33, 0x30, 0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x0d,
0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x74,
0x20, 0x3d, 0x20, 0x74, 0x6d, 0x69, 0x6e, 0x3b, 0x0d, 0x0a, 0x20, 0x20,
0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x76,
0x65, 0x63, 0x33, 0x28, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6f, 0x72, 0x28, 0x20, 0x69, 0x6e, 0x74, 0x20, 0x69, 0x3d,
0x30, 0x3b, 0x20, 0x69, 0x3c, 0x36, 0x34, 0x3b, 0x20, 0x69, 0x2b, 0x2b,
0x20, 0x29, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7b, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74,
0x20, 0x70, 0x72, 0x65, 0x63, 0x69, 0x73, 0x20, 0x3d, 0x20, 0x30, 0x2e,
0x30, 0x30, 0x30, 0x31, 0x2a, 0x74, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x72, 0x65,
0x73, 0x20, 0x3d, 0x20, 0x73, 0x69, 0x67, 0x6e, 0x65, 0x64, 0x5f, 0x64,
0x69, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x65, 0x6c,
0x64, 0x28, 0x20, 0x72, 0x6f, 0x2b, 0x72, 0x64, 0x2a, 0x74, 0x20, 0x29,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69,
0x66, 0x28, 0x20, 0x72, 0x65, 0x73, 0x2e, 0x78, 0x3c, 0x70, 0x72, 0x65,
0x63, 0x69, 0x73, 0x20, 0x7c, 0x7c, 0x20, 0x74, 0x3e, 0x74, 0x6d, 0x61,
0x78, 0x20, 0x29, 0x20, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x74, 0x20, 0x2b, 0x3d,
0x20, 0x72, 0x65, 0x73, 0x2e, 0x78, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x72, 0x65, 0x73,
0x2e, 0x67, 0x62, 0x61, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x7d,
0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x20,
0x74, 0x3e, 0x74, 0x6d, 0x61, 0x78, 0x20, 0x29, 0x20, 0x6d, 0x3d, 0x76,
0x65, 0x63, 0x33, 0x28, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x76, 0x65, 0x63, 0x34,
0x28, 0x20, 0x74, 0x2c, 0x20, 0x6d, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x7d,
0x0d, 0x0a, 0x0d, 0x0a, 0x6d, 0x61, 0x74, 0x33, 0x20, 0x73, 0x65, 0x74,
0x43, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x28, 0x20, 0x69, 0x6e, 0x20, 0x76,
0x65, 0x63, 0x33, 0x20, 0x72, 0x6f, 0x2c, 0x20, 0x69, 0x6e, 0x20, 0x76,
0x65, 0x63, 0x33, 0x20, 0x74, 0x61, 0x2c, 0x20, 0x66, 0x6c, 0x6f, 0x61,
0x74, 0x20, 0x63, 0x72, 0x20, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20,
0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x63, 0x77, 0x20, 0x3d,
0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x74,
0x61, 0x2d, 0x72, 0x6f, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x76, 0x65, 0x63, 0x33, 0x20, 0x63, 0x70, 0x20, 0x3d, 0x20, 0x76, 0x65,
0x63, 0x33, 0x28, 0x73, 0x69, 0x6e, 0x28, 0x63, 0x72, 0x29, 0x2c, 0x20,
0x63, 0x6f, 0x73, 0x28, 0x63, 0x72, 0x29, 0x2c, 0x30, 0x2e, 0x30, 0x29,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20,
0x63, 0x75, 0x20, 0x3d, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69,
0x7a, 0x65, 0x28, 0x20, 0x63, 0x72, 0x6f, 0x73, 0x73, 0x28, 0x63, 0x77,
0x2c, 0x63, 0x70, 0x29, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x63, 0x76, 0x20, 0x3d, 0x20, 0x6e,
0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x69, 0x7a, 0x65, 0x28, 0x20, 0x63, 0x72,
0x6f, 0x73, 0x73, 0x28, 0x63, 0x75, 0x2c, 0x63, 0x77, 0x29, 0x20, 0x29,
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
0x6e, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x28, 0x20, 0x63, 0x75, 0x2c, 0x20,
0x63, 0x76, 0x2c, 0x20, 0x63, 0x77, 0x20, 0x29, 0x3b, 0x0d, 0x0a, 0x7d,
0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69,
0x6e, 0x28, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
0x76, 0x65, 0x63, 0x32, 0x20, 0x70, 0x20, 0x3d, 0x20, 0x28, 0x2d, 0x72,
0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x78, 0x79,
0x20, 0x2b, 0x20, 0x32, 0x2e, 0x30, 0x2a, 0x67, 0x6c, 0x5f, 0x46, 0x72,
0x61, 0x67, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x79, 0x29, 0x2f,
0x72, 0x65, 0x73, 0x6f, 0x6c, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x79,
0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x61, 0x74,
0x33, 0x20, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x74, 0x6f, 0x5f,
0x77, 0x6f, 0x72, 0x6c, 0x64, 0x20, 0x3d, 0x20, 0x73, 0x65, 0x74, 0x43,
0x61, 0x6d, 0x65, 0x72, 0x61, 0x28, 0x20, 0x76, 0x69, 0x65, 0x77, 0x45,
0x79, 0x65, 0x2c, 0x20, 0x76, 0x69, 0x65, 0x77, 0x43, 0x65, 0x6e, 0x74,
0x65, 0x72, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x20, 0x29, 0x3b, 0x0d, 0x0a,
0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x72, 0x61, 0x79,
0x5f, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x3d,
0x20, 0x63, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x5f, 0x74, 0x6f, 0x5f, 0x77,
0x6f, 0x72, 0x6c, 0x64, 0x20, 0x2a, 0x20, 0x6e, 0x6f, 0x72, 0x6d, 0x61,
0x6c, 0x69, 0x7a, 0x65, 0x28, 0x20, 0x76, 0x65, 0x63, 0x33, 0x28, 0x70,
0x2e, 0x78, 0x79, 0x2c, 0x32, 0x2e, 0x30, 0x29, 0x20, 0x29, 0x3b, 0x0d,
0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6e, 0x61, 0x6c,
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34,
0x28, 0x63, 0x61, 0x73, 0x74, 0x52, 0x61, 0x79, 0x28, 0x20, 0x76, 0x69,
0x65, 0x77, 0x45, 0x79, 0x65, 0x2c, 0x20, 0x72, 0x61, 0x79, 0x5f, 0x64,
0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x29, 0x2e, 0x67,
0x62, 0x61, 0x2c, 0x20, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a,
0x20, 0x0d, 0x0a, 0x00
};
unsigned int selection_fs_len = 1096;