52 Commits

Author SHA1 Message Date
Kbz-8
39501f2940 update logo size 2023-11-25 12:48:16 +01:00
Kbz-8
372f818da4 working on readme 2023-11-25 12:47:07 +01:00
Kbz-8
1651f9ba97 working on readme 2023-11-25 12:31:09 +01:00
Kbz-8
c7e09f1d8c adding logo 2023-11-25 12:23:57 +01:00
Kbz-8
82529d6dc9 update readme 2023-11-25 10:44:51 +01:00
Kbz-8
4e30bd02bf adding screenshot te readme 2023-11-25 10:44:24 +01:00
Kbz-8
f8c2abb20b adding screenshot te readme 2023-11-25 10:44:00 +01:00
Kbz-8
880ac98ca9 adding screenshot te readme 2023-11-25 10:43:05 +01:00
Kbz-8
49c211cebc transparency management added 2023-11-25 10:31:06 +01:00
Kbz-8
38768c85c9 improving font management 2023-11-24 19:34:15 +01:00
Kbz-8
c7433ec419 removing gdb history 2023-11-23 14:37:58 +01:00
Kbz-8
d6b6dd955c new feature, font loading 2023-11-23 14:37:42 +01:00
kbz_8
c125dde951 Update README.md 2023-11-21 07:14:32 +01:00
kbz_8
9934b34bba Update README.md 2023-11-21 07:14:08 +01:00
kbz_8
3e3f20513f moving to MIT license 2023-11-21 07:13:15 +01:00
Kbz-8
c93d7854d0 fixing compilation error 2023-11-20 07:29:36 +01:00
Kbz-8
9fdb514541 fixing spaces in indentaions 2023-11-20 07:28:03 +01:00
kbz_8
35f5f41258 fixed error message for image file loading 2023-11-18 17:57:06 +01:00
Kbz-8
f6201014aa cleaning renderpass, framebuffers and swapchain code, setting all vulkan resources to NULL after destroy 2023-11-18 17:25:30 +01:00
Kbz-8
c583f1abc8 fixing GCC warning 2023-11-16 14:07:02 +01:00
Kbz-8
f7cf64cbb9 removing a trash file 2023-11-16 14:05:16 +01:00
Kbz-8
b882771a18 removing all memory dump strings informations in release mode 2023-11-16 14:04:51 +01:00
Kbz-8
39aa8009a4 fixing memory management issue, VMA uses custom asserts 2023-11-14 12:46:51 +01:00
Kbz-8
5dce6a2c8e updating readme, improving buffer transfer to GPU 2023-11-14 07:46:06 +01:00
Kbz-8
52929e215c fixing macos warning 2023-11-14 07:22:38 +01:00
Kbz-8
ad60a17da9 fixing rendering issues 2023-11-14 07:07:43 +01:00
kbz_8
d29cd56044 removing vim command in code 2023-11-11 03:32:43 +01:00
Kbz-8
d6795f97ef fixing physical device pick issues 2023-11-11 03:30:29 +01:00
Kbz-8
2fa7e2d4a9 fixing GCC CI 2023-11-10 09:21:58 +01:00
Kbz-8
85c43dabf4 fixing compilation issues, adding profile 2023-11-10 09:19:47 +01:00
Kbz-8
e6ed390e84 working on buffers 2023-11-09 22:17:25 +01:00
Kbz-8
6cd3422337 deleting clangd garbage 2023-11-09 09:07:30 +01:00
Kbz-8
c0f539b57f adding debug messages to renderer, working on VMA implementation 2023-11-09 09:07:03 +01:00
kbz_8
497879a0bc Merge pull request #1 from 27network/feature/better-readme
Improve project's README.
2023-10-30 14:13:09 +01:00
kbz_8
5b43b47f90 Update README.md 2023-10-30 14:10:48 +01:00
xtrm
ab4ebc34d5 Change the names of the workflows to look better in the README
Signed-off-by: xtrm <oss@xtrm.me>
2023-10-30 01:28:00 +01:00
killian
587e71b940 Rework README.md and add better formatting and form 2023-10-30 01:26:35 +01:00
Kbz-8
11073a2cbc debugging CI 2023-10-20 03:33:31 +02:00
Kbz-8
c1898fb8dd debugging CI 2023-10-19 23:48:00 +02:00
Kbz-8
453ee0850b debugging CI 2023-10-19 23:44:52 +02:00
Kbz-8
3dd055b406 debugging CI 2023-10-19 23:31:36 +02:00
Kbz-8
08cbbfa836 debugging CI 2023-10-19 22:58:07 +02:00
Kbz-8
ce7e3ac88d debugging CI 2023-10-19 21:38:11 +02:00
Kbz-8
cc810368aa debugging CI 2023-10-19 21:37:08 +02:00
Kbz-8
ec757ab292 debugging CI 2023-10-19 21:23:53 +02:00
Kbz-8
fc9fa1a980 debugging CI 2023-10-19 21:21:52 +02:00
Kbz-8
469716e72b debugging CI 2023-10-19 21:21:33 +02:00
Kbz-8
254f80b442 debugging CI 2023-10-19 21:20:18 +02:00
Kbz-8
4d19598ac2 debugging CI 2023-10-19 21:17:31 +02:00
Kbz-8
774f7c41b0 debugging CI 2023-10-19 21:08:10 +02:00
Kbz-8
4f8dbc794c debugging CI 2023-10-19 20:44:40 +02:00
Kbz-8
281bf2dcd2 CI 2023-10-19 20:35:17 +02:00
73 changed files with 25819 additions and 3986 deletions

42
.github/workflows/linux_clang.yml vendored git.filemode.normal_file
View File

@@ -0,0 +1,42 @@
name: Linux (clang)
on:
pull_request:
push:
paths-ignore:
- '.gitignore'
- 'LICENSE'
- 'README.md'
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
arch: [x86_64]
mode: [release]
runs-on: ${{ matrix.os }}
if: "!contains(github.event.head_commit.message, 'ci skip')"
steps:
- name: Get current date as package key
id: cache_key
run: echo "key=$(date +'%W')" >> $GITHUB_OUTPUT
- name: Checkout repository
uses: actions/checkout@v4
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get -y install mesa-common-dev clang libsdl2-2.0-0 libsdl2-dev build-essential libvulkan-dev
# Build the lib
- name: Build MacroLibX
run: make -j
# Build the test
- name: Build Test
run: cd test && clang main.c ../libmlx.so -lSDL2

43
.github/workflows/linux_gcc.yml vendored git.filemode.normal_file
View File

@@ -0,0 +1,43 @@
name: Linux (gcc)
on:
pull_request:
push:
paths-ignore:
- '.gitignore'
- 'LICENSE'
- 'README.md'
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest]
arch: [x86_64]
mode: [release]
runs-on: ${{ matrix.os }}
if: "!contains(github.event.head_commit.message, 'ci skip')"
steps:
- name: Get current date as package key
id: cache_key
run: echo "key=$(date +'%W')" >> $GITHUB_OUTPUT
- name: Checkout repository
uses: actions/checkout@v4
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get -y install mesa-common-dev libsdl2-2.0-0 libsdl2-dev build-essential libvulkan-dev
# Build the lib
- name: Build MacroLibX
run: make TOOLCHAIN=gcc -j
# Build the test
- name: Build Test
run: cd test && gcc main.c ../libmlx.so -lSDL2

49
.github/workflows/macos_x86.yml vendored git.filemode.normal_file
View File

@@ -0,0 +1,49 @@
name: macOS
on:
pull_request:
push:
paths-ignore:
- '.gitignore'
- 'LICENSE'
- 'README.md'
jobs:
build:
strategy:
fail-fast: false
matrix:
os: [macOS-latest]
arch: [x86_64]
mode: [release]
runs-on: ${{ matrix.os }}
if: "!contains(github.event.head_commit.message, 'ci skip')"
steps:
- name: Get current date as package key
id: cache_key
run: echo "key=$(date +'%W')" >> $GITHUB_OUTPUT
- name: Checkout repository
uses: actions/checkout@v4
# Install system dependencies
- name: Install Vulkan SDK
uses: humbletim/install-vulkan-sdk@v1.1.1
with:
version: 1.3.204.1
cache: true
- name: Install Dependancies
run: |
brew install SDL2
# Build the lib
- name: Build MacroLibX
run: make -j
# Build the test
- name: Build Test
run: cd test && clang main.c ../libmlx.so -lSDL2

2
.gitignore vendored
View File

@@ -4,3 +4,5 @@
*.a *.a
*.so *.so
*.out *.out
.cache/
test/.gdb_history

354
LICENSE
View File

@@ -1,340 +1,20 @@
GNU GENERAL PUBLIC LICENSE MIT License
Version 2, June 1991 Copyright (c) 2022-2023 kbz_8
Copyright (C) 1989, 1991 Free Software Foundation, Inc., Permission is hereby granted, free of charge, to any person obtaining a copy
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA of this software and associated documentation files (the "Software"), to deal
Everyone is permitted to copy and distribute verbatim copies in the Software without restriction, including without limitation the rights
of this license document, but changing it is not allowed. to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
Preamble The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@@ -3,10 +3,10 @@
# ::: :::::::: # # ::: :::::::: #
# Makefile :+: :+: :+: # # Makefile :+: :+: :+: #
# +:+ +:+ +:+ # # +:+ +:+ +:+ #
# By: vvaas <vvaas@student.42.fr> +#+ +:+ +#+ # # By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ #
# +#+#+#+#+#+ +#+ # # +#+#+#+#+#+ +#+ #
# Created: 2022/10/04 16:43:41 by maldavid #+# #+# # # Created: 2022/10/04 16:43:41 by maldavid #+# #+# #
# Updated: 2023/08/09 13:51:08 by maldavid ### ########.fr # # Updated: 2023/11/24 10:03:17 by maldavid ### ########.fr #
# # # #
# **************************************************************************** # # **************************************************************************** #
@@ -17,13 +17,19 @@ SRCS += $(wildcard $(addsuffix /*.cpp, ./src/platform))
SRCS += $(wildcard $(addsuffix /*.cpp, ./src/renderer)) SRCS += $(wildcard $(addsuffix /*.cpp, ./src/renderer))
SRCS += $(wildcard $(addsuffix /*.cpp, ./src/renderer/**)) SRCS += $(wildcard $(addsuffix /*.cpp, ./src/renderer/**))
OBJS = $(SRCS:.cpp=.o) OBJ_DIR = objs
OBJS = $(addprefix $(OBJ_DIR)/, $(SRCS:.cpp=.o))
OS = $(shell uname -s)
DEBUG ?= false DEBUG ?= false
TOOLCHAIN ?= clang TOOLCHAIN ?= clang
IMAGES_OPTIMIZED ?= true IMAGES_OPTIMIZED ?= true
FORCE_INTEGRATED_GPU ?= false
GRAPHICS_MEMORY_DUMP ?= false
CXX = clang++ MODE = "release"
CXX = clang++
ifeq ($(TOOLCHAIN), gcc) ifeq ($(TOOLCHAIN), gcc)
CXX = g++ CXX = g++
@@ -32,32 +38,53 @@ endif
CXXFLAGS = -std=c++17 -O3 -fPIC CXXFLAGS = -std=c++17 -O3 -fPIC
INCLUDES = -I./includes -I./src -I./third_party INCLUDES = -I./includes -I./src -I./third_party
LDLIBS =
ifeq ($(OS), Darwin)
LDLIBS += -lSDL2
endif
ifeq ($(DEBUG), true) ifeq ($(DEBUG), true)
CXXFLAGS += -g -D DEBUG CXXFLAGS += -g -D DEBUG
MODE = "debug"
endif
ifeq ($(FORCE_INTEGRATED_GPU), true)
CXXFLAGS += -D FORCE_INTEGRATED_GPU
endif endif
ifeq ($(IMAGES_OPTIMIZED), true) ifeq ($(IMAGES_OPTIMIZED), true)
CXXFLAGS += -D IMAGE_OPTIMIZED CXXFLAGS += -D IMAGE_OPTIMIZED
endif endif
RM = rm -f ifeq ($(GRAPHICS_MEMORY_DUMP), true)
CXXFLAGS += -D GRAPHICS_MEMORY_DUMP
endif
%.o: %.cpp RM = rm -rf
@echo "\e[1;32m[compiling... "$(CXX)"]\e[1;00m "$<
$(OBJ_DIR)/%.o: %.cpp
@printf "\033[1;32m[compiling... "$(MODE)" "$(CXX)"]\033[1;00m "$<"\n"
@$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@ @$(CXX) $(CXXFLAGS) $(INCLUDES) -c $< -o $@
all: $(NAME) all: $(NAME)
$(NAME): $(OBJS) $(NAME): $(OBJ_DIR) $(OBJS)
@echo "\e[1;32m[linking ...]\e[1;00m "$@ @printf "\033[1;32m[linking ... "$(MODE)"]\033[1;00m "$@"\n"
@$(CXX) -shared -o $(NAME) $(OBJS) @$(CXX) -shared -o $(NAME) $(OBJS) $(LDLIBS)
@echo "\e[1;32m[build finished]\e[1;00m" @printf "\033[1;32m[build finished]\033[1;00m\n"
$(OBJ_DIR):
@mkdir -p $(sort $(addprefix $(OBJ_DIR)/, $(dir $(SRCS))))
@printf "\033[1;32m[created objs directory]\033[1;00m\n"
clean: clean:
@$(RM) $(OBJS) @$(RM) $(OBJ_DIR)
@printf "\033[1;32m[object files removed]\033[1;00m\n"
fclean: clean fclean: clean
@$(RM) $(NAME) @$(RM) $(NAME)
@printf "\033[1;32m["$(NAME)" removed]\033[1;00m\n"
re: fclean all re: fclean all

101
README.md
View File

@@ -1,48 +1,89 @@
# MacroLibX <div align="center">
<img src="./res/logo.png" alt="drawing" width="200"/>
<div align="center">
<a href="https://github.com/420verfl0w/MacroLibX/actions/workflows/linux_clang.yml"><img src="https://github.com/420verfl0w/MacroLibX/actions/workflows/linux_clang.yml/badge.svg"></a>
<a href="https://github.com/420verfl0w/MacroLibX/actions/workflows/linux_gcc.yml"><img src="https://github.com/420verfl0w/MacroLibX/actions/workflows/linux_gcc.yml/badge.svg"></a>
<a href="https://github.com/420verfl0w/MacroLibX/actions/workflows/macos_x86.yml"><img src="https://github.com/420verfl0w/MacroLibX/actions/workflows/macos_x86.yml/badge.svg"></a>
</div>
</div>
A rewrite of School 42's MiniLibX using SDL2 and Vulkan. The goal of this version is to give a light, fast and modern graphical tool while keeping the same API as the version currently used at 42. ###### MacroLibX a rewrite of 42 School's MiniLibX using SDL2 and Vulkan.
The goal of this version is to provide a light, fast, and modern graphical tool while keeping the same API.
# Installation ## 🖥️ Installation
## Linux ### Dependencies
Dependances :
For Ubuntu/Debian You first need to install the proper dependencies for your operating-system.
```bash
~ sudo apt update #### 🐧 Linux
~ sudo apt install libsdl2-2.0-0 libsdl2-dev build-essential
Here are a few common cases for different Linux distributions:
<details>
<summary>
For <a href="https://ubuntu.com">Ubuntu</a>/<a href="https://debian.org">Debian</a>-based distros:
</summary>
<pre><code><!--
-->sudo apt update
sudo apt install libsdl2-2.0-0 libsdl2-dev build-essential
</code></pre>
</details>
<details>
<summary>
For <a href="https://archlinux.org">ArchLinux</a>-based distros:
</summary>
<pre><code>sudo pacman -S sdl2</code></pre>
</details>
#### 🍎 macOS
[MacroLibX](#) on macOS requires [SDL2](#) and [MoltenVK](https://github.com/KhronosGroup/MoltenVK). You can install both using the [Homebrew](https://brew.sh) package manager:
```sh
brew install molten-vk
brew install SDL2
``` ```
For Arch based distros ### Clone and Build
Finally, you can clone the Git repository. When inside it, run the GNU `make` command to compile MacroLibX.
```bash ```bash
~ sudo pacman -S sdl2 git clone https://github.com/420verfl0w/MacroLibX.git
cd MacroLibX
make
``` ```
### MacOS If you want to build using GCC you can add `TOOLCHAIN=gcc` to your `make` command
Dependances :
* [MoltenVK](https://github.com/KhronosGroup/MoltenVK/)
* SDL2 `brew install SDL2`
# Get MacroLibX
```bash ```bash
~ git clone https://github.com/420verfl0w/MacroLibX.git make TOOLCHAIN=gcc
~ cd MacroLibX
~ make
``` ```
# Compile your project ## 🔨 Compile your project
```bash To compile your project with MacroLibX, you just provide the shared library path in your compilation/linking command:
clang myApp.c MacroLibX/libmlx.so -lSDL2
```sh
clang myApp.c /path/to/MacroLibX/libmlx.so -lSDL2
``` ```
## /!\ If you run into glitches when writing or reading pixels from images /!\ And you can enjoy your project
You need to add `IMAGES_OPTIMIZED=false` to your make mlx command <p align="center">
<img src="./res/screenshot_test.png" alt="drawing" width="400"/>
</p>
```bash ### ⚠️ Troubleshooting
~ git clone https://github.com/420verfl0w/MacroLibX.git
~ cd MacroLibX #### If you run into glitches when writing or reading pixels from images
~ make IMAGES_OPTIMIZED=false
You need to add `IMAGES_OPTIMIZED=false` to your `make` command:
```sh
# In your cloned environment, inside the MacroLibX folder
make IMAGES_OPTIMIZED=false
``` ```
## License
This project and all its files, except the [`third_party`](./third_party) directory or unless otherwise mentionned, are licenced under the [MIT license](./LICENSE).

642
compile_commands.json git.filemode.normal_file
View File

@@ -0,0 +1,642 @@
[
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/text_pipeline.o",
"src/renderer/text_pipeline.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/text_pipeline.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/text_pipeline.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/buffers/vk_vbo.o",
"src/renderer/buffers/vk_vbo.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/buffers/vk_vbo.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/buffers/vk_vbo.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/pixel_put.o",
"src/renderer/pixel_put.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/pixel_put.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/pixel_put.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/core/graphics.o",
"src/core/graphics.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/core/graphics.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/core/graphics.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/buffers/vk_ubo.o",
"src/renderer/buffers/vk_ubo.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/buffers/vk_ubo.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/buffers/vk_ubo.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/platform/inputs.o",
"src/platform/inputs.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/platform/inputs.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/platform/inputs.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/renderer.o",
"src/renderer/renderer.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/renderer.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/renderer.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/text_library.o",
"src/renderer/text_library.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/text_library.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/text_library.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/buffers/vk_buffer.o",
"src/renderer/buffers/vk_buffer.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/buffers/vk_buffer.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/buffers/vk_buffer.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/command/cmd_manager.o",
"src/renderer/command/cmd_manager.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/command/cmd_manager.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/command/cmd_manager.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/core/vk_device.o",
"src/renderer/core/vk_device.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_device.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_device.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/command/vk_cmd_buffer.o",
"src/renderer/command/vk_cmd_buffer.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/command/vk_cmd_buffer.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/command/vk_cmd_buffer.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/core/render_core.o",
"src/renderer/core/render_core.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/render_core.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/render_core.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/command/vk_cmd_pool.o",
"src/renderer/command/vk_cmd_pool.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/command/vk_cmd_pool.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/command/vk_cmd_pool.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/core/vk_instance.o",
"src/renderer/core/vk_instance.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_instance.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_instance.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/core/vk_semaphore.o",
"src/renderer/core/vk_semaphore.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_semaphore.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_semaphore.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/core/vk_queues.o",
"src/renderer/core/vk_queues.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_queues.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_queues.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/core/vk_validation_layers.o",
"src/renderer/core/vk_validation_layers.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_validation_layers.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_validation_layers.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/core/vk_surface.o",
"src/renderer/core/vk_surface.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_surface.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_surface.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/core/vk_fence.o",
"src/renderer/core/vk_fence.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_fence.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/core/vk_fence.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/descriptors/vk_descriptor_pool.o",
"src/renderer/descriptors/vk_descriptor_pool.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/descriptors/vk_descriptor_pool.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/images/texture_atlas.o",
"src/renderer/images/texture_atlas.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/images/texture_atlas.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/images/texture_atlas.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/descriptors/vk_descriptor_set.o",
"src/renderer/descriptors/vk_descriptor_set.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/descriptors/vk_descriptor_set.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/descriptors/vk_descriptor_set.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/swapchain/vk_framebuffer.o",
"src/renderer/swapchain/vk_framebuffer.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/swapchain/vk_framebuffer.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/swapchain/vk_framebuffer.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/pipeline/pipeline.o",
"src/renderer/pipeline/pipeline.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/pipeline/pipeline.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/pipeline/pipeline.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/images/vk_image.o",
"src/renderer/images/vk_image.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/images/vk_image.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/images/vk_image.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/descriptors/vk_descriptor_set_layout.o",
"src/renderer/descriptors/vk_descriptor_set_layout.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/descriptors/vk_descriptor_set_layout.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/descriptors/vk_descriptor_set_layout.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/swapchain/vk_imageview.o",
"src/renderer/swapchain/vk_imageview.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/swapchain/vk_imageview.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/swapchain/vk_imageview.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/swapchain/vk_swapchain.o",
"src/renderer/swapchain/vk_swapchain.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/swapchain/vk_swapchain.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/swapchain/vk_swapchain.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/swapchain/vk_render_pass.o",
"src/renderer/swapchain/vk_render_pass.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/swapchain/vk_render_pass.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/swapchain/vk_render_pass.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/platform/window.o",
"src/platform/window.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/platform/window.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/platform/window.o"
},
{
"arguments": [
"/usr/bin/clang++",
"-std=c++17",
"-O3",
"-fPIC",
"-D",
"IMAGE_OPTIMIZED",
"-I./includes",
"-I./src",
"-I./third_party",
"-c",
"-o",
"src/renderer/images/texture.o",
"src/renderer/images/texture.cpp"
],
"directory": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX",
"file": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/images/texture.cpp",
"output": "/home/kbz_8/Documents/Programmation/42/other/MacroLibX/src/renderer/images/texture.o"
}
]

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/04 16:56:35 by maldavid #+# #+# */ /* Created: 2022/10/04 16:56:35 by maldavid #+# #+# */
/* Updated: 2023/04/25 15:09:04 by maldavid ### ########.fr */ /* Updated: 2023/11/23 14:32:06 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -274,6 +274,30 @@ void* mlx_bmp_file_to_image(void* mlx, char* filename, int* width, int* height);
int mlx_string_put(void* mlx, void* win, int x, int y, int color, char* str); int mlx_string_put(void* mlx, void* win, int x, int y, int color, char* str);
/**
* @brief Loads a font to be used by `mlx_string_put`
*
* @param mlx Internal MLX application
* @param win Internal window
* @param filepath Filepath to the font
*
* @return (void)
*/
void mlx_set_font(void* mlx, void* win, char* filepath);
/**
* @brief Loads a font to be used by `mlx_string_put` and scales it
*
* @param mlx Internal MLX application
* @param win Internal window
* @param filepath Filepath to the font
* @param scale Scale to apply to the font
*
* @return (void)
*/
void mlx_set_font_scale(void* mlx, void* win, char* filepath, float scale);
/** /**
* @brief Clears the given window (resets all rendered data) * @brief Clears the given window (resets all rendered data)
* *

BIN
res/logo.png git.filemode.normal_file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

BIN
res/screenshot_test.png git.filemode.normal_file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/04 22:10:52 by maldavid #+# #+# */ /* Created: 2022/10/04 22:10:52 by maldavid #+# #+# */
/* Updated: 2023/08/28 10:19:53 by maldavid ### ########.fr */ /* Updated: 2023/11/20 07:29:12 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -15,7 +15,7 @@
#include <renderer/core/render_core.h> #include <renderer/core/render_core.h>
#include <array> #include <array>
#include <core/errors.h> #include <core/errors.h>
#include <utils/endian.h> #include <core/profile.h>
namespace mlx::core namespace mlx::core
{ {
@@ -43,7 +43,11 @@ namespace mlx::core
void* Application::newTexture(int w, int h) void* Application::newTexture(int w, int h)
{ {
_textures.emplace_front().create(nullptr, w, h, VK_FORMAT_R8G8B8A8_UNORM); #ifdef DEBUG
_textures.emplace_front().create(nullptr, w, h, VK_FORMAT_R8G8B8A8_UNORM, "__mlx_unamed_user_texture");
#else
_textures.emplace_front().create(nullptr, w, h, VK_FORMAT_R8G8B8A8_UNORM, nullptr);
#endif
return &_textures.front(); return &_textures.front();
} }
@@ -55,7 +59,7 @@ namespace mlx::core
void Application::destroyTexture(void* ptr) void Application::destroyTexture(void* ptr)
{ {
vkDeviceWaitIdle(Render_Core::get().getDevice().get()); vkDeviceWaitIdle(Render_Core::get().getDevice().get());
Texture* texture = static_cast<Texture*>(ptr); Texture* texture = static_cast<Texture*>(ptr);
texture->destroy(); texture->destroy();
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/04 21:49:46 by maldavid #+# #+# */ /* Created: 2022/10/04 21:49:46 by maldavid #+# #+# */
/* Updated: 2023/08/28 10:19:35 by maldavid ### ########.fr */ /* Updated: 2023/11/23 14:25:43 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -55,7 +55,9 @@ namespace mlx::core
inline void loopHook(int (*f)(void*), void* param); inline void loopHook(int (*f)(void*), void* param);
inline void loopEnd() noexcept; inline void loopEnd() noexcept;
inline void loadFont(void* win, const std::filesystem::path& filepath, float scale);
void run() noexcept; void run() noexcept;
~Application(); ~Application();

View File

@@ -42,7 +42,7 @@ namespace mlx::core
void* Application::newGraphicsSuport(std::size_t w, std::size_t h, std::string title) void* Application::newGraphicsSuport(std::size_t w, std::size_t h, std::string title)
{ {
_graphics.emplace_back(std::make_unique<GraphicsSupport>(w, h, std::move(title), _graphics.size())); _graphics.emplace_back(std::make_unique<GraphicsSupport>(w, h, title, _graphics.size()));
_in->addWindow(_graphics.back()->getWindow()); _in->addWindow(_graphics.back()->getWindow());
return static_cast<void*>(&_graphics.back()->getID()); return static_cast<void*>(&_graphics.back()->getID());
} }
@@ -67,6 +67,11 @@ namespace mlx::core
_graphics[*static_cast<int*>(win)]->stringPut(x, y, color, str); _graphics[*static_cast<int*>(win)]->stringPut(x, y, color, str);
} }
void Application::loadFont(void* win, const std::filesystem::path& filepath, float scale)
{
_graphics[*static_cast<int*>(win)]->loadFont(filepath, scale);
}
void Application::texturePut(void* win, void* img, int x, int y) void Application::texturePut(void* win, void* img, int x, int y)
{ {
Texture* texture = static_cast<Texture*>(img); Texture* texture = static_cast<Texture*>(img);

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/04 17:35:20 by maldavid #+# #+# */ /* Created: 2022/10/04 17:35:20 by maldavid #+# #+# */
/* Updated: 2023/04/25 15:23:05 by maldavid ### ########.fr */ /* Updated: 2023/11/25 10:12:36 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -20,8 +20,18 @@ extern "C"
{ {
void* mlx_init() void* mlx_init()
{ {
static bool init = false;
if(init)
{
mlx::core::error::report(e_kind::error, "MLX cannot be initialized multiple times");
return NULL;
}
mlx::Render_Core::get().init(); mlx::Render_Core::get().init();
return new mlx::core::Application(); mlx::core::Application* app = new mlx::core::Application;
if(app == nullptr)
mlx::core::error::report(e_kind::fatal_error, "Tout a pété");
init = true;
return app;
} }
void* mlx_new_window(mlx::core::Application* mlx, int w, int h, const char* title) void* mlx_new_window(mlx::core::Application* mlx, int w, int h, const char* title)
@@ -90,8 +100,8 @@ extern "C"
unsigned char color_bits[4]; unsigned char color_bits[4];
color_bits[0] = (color & 0x00FF0000) >> 16; color_bits[0] = (color & 0x00FF0000) >> 16;
color_bits[1] = (color & 0x0000FF00) >> 8; color_bits[1] = (color & 0x0000FF00) >> 8;
color_bits[2] = color & 0x000000FF; color_bits[2] = (color & 0x000000FF);
color_bits[3] = 0xFF; color_bits[3] = (color & 0xFF000000) >> 24;
mlx->setTexturePixel(img, x, y, *reinterpret_cast<unsigned int*>(color_bits)); mlx->setTexturePixel(img, x, y, *reinterpret_cast<unsigned int*>(color_bits));
} }
@@ -123,7 +133,7 @@ extern "C"
std::filesystem::path file(filename); std::filesystem::path file(filename);
if(file.extension() != ".jpg" && file.extension() != ".jpeg") if(file.extension() != ".jpg" && file.extension() != ".jpeg")
{ {
mlx::core::error::report(e_kind::error, "PNG loader : not a jpg file '%s'", filename); mlx::core::error::report(e_kind::error, "JPG loader : not a jpg file '%s'", filename);
return nullptr; return nullptr;
} }
return mlx->newStbTexture(filename, width, height); return mlx->newStbTexture(filename, width, height);
@@ -134,7 +144,7 @@ extern "C"
std::filesystem::path file(filename); std::filesystem::path file(filename);
if(file.extension() != ".bmp" && file.extension() != ".dib") if(file.extension() != ".bmp" && file.extension() != ".dib")
{ {
mlx::core::error::report(e_kind::error, "PNG loader : not a jpg file '%s'", filename); mlx::core::error::report(e_kind::error, "BMP loader : not a bmp file '%s'", filename);
return nullptr; return nullptr;
} }
return mlx->newStbTexture(filename, width, height); return mlx->newStbTexture(filename, width, height);
@@ -162,6 +172,28 @@ extern "C"
return 0; return 0;
} }
void mlx_set_font(mlx::core::Application* mlx, void* win, char* filepath)
{
std::filesystem::path file(filepath);
if(file.extension() != ".ttf" && file.extension() != ".tte")
{
mlx::core::error::report(e_kind::error, "TTF loader : not a truetype font file '%s'", filepath);
return;
}
mlx->loadFont(win, file, 16.f);
}
void mlx_set_font_scale(mlx::core::Application* mlx, void* win, char* filepath, float scale)
{
std::filesystem::path file(filepath);
if(file.extension() != ".ttf" && file.extension() != ".tte")
{
mlx::core::error::report(e_kind::error, "TTF loader : not a truetype font file '%s'", filepath);
return;
}
mlx->loadFont(win, file, scale);
}
int mlx_clear_window(mlx::core::Application* mlx, void* win) int mlx_clear_window(mlx::core::Application* mlx, void* win)
{ {
mlx->clearGraphicsSupport(win); mlx->clearGraphicsSupport(win);

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/04 17:48:06 by maldavid #+# #+# */ /* Created: 2022/10/04 17:48:06 by maldavid #+# #+# */
/* Updated: 2023/04/23 13:07:56 by maldavid ### ########.fr */ /* Updated: 2023/11/14 07:14:57 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -17,15 +17,17 @@
#include "errors.h" #include "errors.h"
constexpr const int BUFFER_SIZE = 4096;
namespace mlx::core::error namespace mlx::core::error
{ {
void report(e_kind kind, std::string msg, ...) void report(e_kind kind, std::string msg, ...)
{ {
char buffer[4096]; char buffer[BUFFER_SIZE];
va_list al; va_list al;
va_start(al, msg); va_start(al, msg);
std::vsprintf(buffer, msg.c_str(), al); std::vsnprintf(buffer, BUFFER_SIZE, msg.c_str(), al);
va_end(al); va_end(al);
switch(kind) switch(kind)

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/02 15:13:55 by maldavid #+# #+# */ /* Created: 2023/04/02 15:13:55 by maldavid #+# #+# */
/* Updated: 2023/04/08 00:19:18 by maldavid ### ########.fr */ /* Updated: 2023/11/24 20:42:15 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -14,8 +14,8 @@
namespace mlx namespace mlx
{ {
GraphicsSupport::GraphicsSupport(std::size_t w, std::size_t h, std::string title, int id) : GraphicsSupport::GraphicsSupport(std::size_t w, std::size_t h, const std::string& title, int id) :
_window(std::make_shared<MLX_Window>(w, h, std::move(title))), _window(std::make_shared<MLX_Window>(w, h, title)),
_renderer(std::make_unique<Renderer>()), _text_put_pipeline(std::make_unique<TextPutPipeline>()), _renderer(std::make_unique<Renderer>()), _text_put_pipeline(std::make_unique<TextPutPipeline>()),
_id(id) _id(id)
{ {
@@ -29,8 +29,10 @@ namespace mlx
{ {
auto cmd_buff = _renderer->getActiveCmdBuffer().get(); auto cmd_buff = _renderer->getActiveCmdBuffer().get();
std::vector<VkDescriptorSet> sets; static std::array<VkDescriptorSet, 2> sets = {
sets.push_back(_renderer->getVertDescriptorSet().get()); _renderer->getVertDescriptorSet().get(),
VK_NULL_HANDLE
};
for(auto& data : _textures_to_render) for(auto& data : _textures_to_render)
{ {
@@ -38,34 +40,42 @@ namespace mlx
data.texture->setDescriptor(_renderer->getFragDescriptorSet().duplicate()); data.texture->setDescriptor(_renderer->getFragDescriptorSet().duplicate());
if(!data.texture->hasBeenUpdated()) if(!data.texture->hasBeenUpdated())
data.texture->updateSet(0); data.texture->updateSet(0);
sets.push_back(data.texture->getSet()); sets[1] = data.texture->getSet();
vkCmdBindDescriptorSets(cmd_buff, VK_PIPELINE_BIND_POINT_GRAPHICS, _renderer->getPipeline().getPipelineLayout(), 0, sets.size(), sets.data(), 0, nullptr); vkCmdBindDescriptorSets(cmd_buff, VK_PIPELINE_BIND_POINT_GRAPHICS, _renderer->getPipeline().getPipelineLayout(), 0, sets.size(), sets.data(), 0, nullptr);
data.texture->render(*_renderer, data.x, data.y); data.texture->render(*_renderer, data.x, data.y);
sets.pop_back();
} }
_pixel_put_pipeline.present(); _pixel_put_pipeline.present();
sets.push_back(_pixel_put_pipeline.getDescriptorSet()); sets[1] = _pixel_put_pipeline.getDescriptorSet();
vkCmdBindDescriptorSets(cmd_buff, VK_PIPELINE_BIND_POINT_GRAPHICS, _renderer->getPipeline().getPipelineLayout(), 0, sets.size(), sets.data(), 0, nullptr); vkCmdBindDescriptorSets(cmd_buff, VK_PIPELINE_BIND_POINT_GRAPHICS, _renderer->getPipeline().getPipelineLayout(), 0, sets.size(), sets.data(), 0, nullptr);
_pixel_put_pipeline.render(*_renderer); _pixel_put_pipeline.render(*_renderer);
sets.pop_back();
sets.push_back(_text_put_pipeline->getDescriptorSet()); sets[1] = _text_put_pipeline->getDescriptorSet();
vkCmdBindDescriptorSets(cmd_buff, VK_PIPELINE_BIND_POINT_GRAPHICS, _renderer->getPipeline().getPipelineLayout(), 0, sets.size(), sets.data(), 0, nullptr); vkCmdBindDescriptorSets(cmd_buff, VK_PIPELINE_BIND_POINT_GRAPHICS, _renderer->getPipeline().getPipelineLayout(), 0, sets.size(), sets.data(), 0, nullptr);
_text_put_pipeline->render(); _text_put_pipeline->render();
_renderer->endFrame(); _renderer->endFrame();
for(auto& data : _textures_to_render) for(auto& data : _textures_to_render)
data.texture->resetUpdate(); data.texture->resetUpdate();
#ifdef GRAPHICS_MEMORY_DUMP
// dump memory to file every two seconds
static uint64_t timer = SDL_GetTicks64();
if(SDL_GetTicks64() - timer > 2000)
{
Render_Core::get().getAllocator().dumpMemoryToJson();
timer += 2000;
}
#endif
} }
GraphicsSupport::~GraphicsSupport() GraphicsSupport::~GraphicsSupport()
{ {
vkDeviceWaitIdle(Render_Core::get().getDevice().get()); vkDeviceWaitIdle(Render_Core::get().getDevice().get());
_pixel_put_pipeline.destroy();
_text_put_pipeline->destroy(); _text_put_pipeline->destroy();
_pixel_put_pipeline.destroy();
_renderer->destroy(); _renderer->destroy();
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/02 14:49:49 by maldavid #+# #+# */ /* Created: 2023/04/02 14:49:49 by maldavid #+# #+# */
/* Updated: 2023/04/21 18:43:38 by maldavid ### ########.fr */ /* Updated: 2023/11/25 09:59:39 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -32,24 +32,24 @@ namespace mlx
class GraphicsSupport : public non_copyable class GraphicsSupport : public non_copyable
{ {
public: public:
GraphicsSupport(std::size_t w, std::size_t h, std::string title, int id); GraphicsSupport(std::size_t w, std::size_t h, const std::string& title, int id);
inline int& getID() noexcept; inline int& getID() noexcept;
inline std::shared_ptr<MLX_Window> getWindow(); inline std::shared_ptr<MLX_Window> getWindow();
inline void beginRender() noexcept; inline void beginRender() noexcept;
void endRender() noexcept;
inline void clearRenderData() noexcept; inline void clearRenderData() noexcept;
inline void pixelPut(int x, int y, uint32_t color) noexcept; inline void pixelPut(int x, int y, uint32_t color) noexcept;
inline void stringPut(int x, int y, int color, std::string str); inline void stringPut(int x, int y, int color, std::string str);
inline void texturePut(Texture* texture, int x, int y); inline void texturePut(Texture* texture, int x, int y);
inline void loadFont(const std::filesystem::path& filepath, float scale);
void endRender() noexcept;
~GraphicsSupport(); ~GraphicsSupport();
private: private:
std::unordered_set<TextureRenderData> _textures_to_render; std::vector<TextureRenderData> _textures_to_render;
PixelPutPipeline _pixel_put_pipeline; PixelPutPipeline _pixel_put_pipeline;
glm::mat4 _proj = glm::mat4(1.0); glm::mat4 _proj = glm::mat4(1.0);
std::shared_ptr<MLX_Window> _window; std::shared_ptr<MLX_Window> _window;

View File

@@ -10,7 +10,9 @@
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "renderer/images/texture.h"
#include <core/graphics.h> #include <core/graphics.h>
#include <type_traits>
namespace mlx namespace mlx
{ {
@@ -44,6 +46,21 @@ namespace mlx
void GraphicsSupport::texturePut(Texture* texture, int x, int y) void GraphicsSupport::texturePut(Texture* texture, int x, int y)
{ {
_textures_to_render.emplace(texture, x, y); _textures_to_render.emplace_back(texture, x, y);
std::size_t hash = std::hash<TextureRenderData>{}(_textures_to_render.back());
_textures_to_render.back().hash = hash;
auto it = std::find_if(_textures_to_render.begin(), _textures_to_render.end() - 1, [=](const TextureRenderData& rhs)
{
return rhs.hash == hash;
});
if(it != _textures_to_render.end() - 1)
_textures_to_render.erase(it);
}
void GraphicsSupport::loadFont(const std::filesystem::path& filepath, float scale)
{
_text_put_pipeline->loadFont(filepath, scale);
} }
} }

60
src/core/profile.h git.filemode.normal_file
View File

@@ -0,0 +1,60 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* profile.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/11/10 08:49:17 by maldavid #+# #+# */
/* Updated: 2023/11/10 09:05:56 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef __MLX_PROFILE__
#define __MLX_PROFILE__
// Try to identify the compiler
#if defined(__BORLANDC__)
#define MLX_COMPILER_BORDLAND
#elif defined(__clang__)
#define MLX_COMPILER_CLANG
#ifdef __MINGW32__
#define MLX_COMPILER_MINGW
#ifdef __MINGW64_VERSION_MAJOR
#define MLX_COMPILER_MINGW_W64
#endif
#endif
#elif defined(__GNUC__) || defined(__MINGW32__)
#define MLX_COMPILER_GCC
#ifdef __MINGW32__
#define MLX_COMPILER_MINGW
#ifdef __MINGW64_VERSION_MAJOR
#define MLX_COMPILER_MINGW_W64
#endif
#endif
#elif defined(__INTEL_COMPILER) || defined(__ICL)
#define MLX_COMPILER_INTEL
#elif defined(_MSC_VER)
#define MLX_COMPILER_MSVC
#else
#define MLX_COMPILER_UNKNOWN
#warning "This compiler is not fully supported"
#endif
// Checking common assumptions
#include <climits>
#include <cstdint>
static_assert(CHAR_BIT == 8, "CHAR_BIT is expected to be 8");
static_assert(sizeof(int8_t) == 1, "int8_t is not of the correct size" );
static_assert(sizeof(int16_t) == 2, "int16_t is not of the correct size");
static_assert(sizeof(int32_t) == 4, "int32_t is not of the correct size");
static_assert(sizeof(int64_t) == 8, "int64_t is not of the correct size");
static_assert(sizeof(uint8_t) == 1, "uint8_t is not of the correct size" );
static_assert(sizeof(uint16_t) == 2, "uint16_t is not of the correct size");
static_assert(sizeof(uint32_t) == 4, "uint32_t is not of the correct size");
static_assert(sizeof(uint64_t) == 8, "uint64_t is not of the correct size");
#endif

View File

@@ -6,27 +6,44 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/04 17:36:44 by maldavid #+# #+# */ /* Created: 2022/10/04 17:36:44 by maldavid #+# #+# */
/* Updated: 2023/04/12 18:45:05 by maldavid ### ########.fr */ /* Updated: 2023/11/25 11:48:26 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include <platform/window.h> #include <platform/window.h>
#include <core/errors.h> #include <core/errors.h>
#include <utils/icon_mlx.h>
namespace mlx namespace mlx
{ {
MLX_Window::MLX_Window(std::size_t w, std::size_t h, std::string title) : _width(w), _height(h) #if SDL_BYTEORDER == SDL_BIG_ENDIAN
constexpr const uint32_t rmask = 0xff000000;
constexpr const uint32_t gmask = 0x00ff0000;
constexpr const uint32_t bmask = 0x0000ff00;
constexpr const uint32_t amask = 0x000000ff;
#else
constexpr const uint32_t rmask = 0x000000ff;
constexpr const uint32_t gmask = 0x0000ff00;
constexpr const uint32_t bmask = 0x00ff0000;
constexpr const uint32_t amask = 0xff000000;
#endif
MLX_Window::MLX_Window(std::size_t w, std::size_t h, const std::string& title) : _width(w), _height(h)
{ {
_win = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, SDL_WINDOW_VULKAN | SDL_WINDOW_SHOWN); _win = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, SDL_WINDOW_VULKAN | SDL_WINDOW_SHOWN);
if(!_win) if(!_win)
core::error::report(e_kind::fatal_error, std::string("unable to open a new window, ") + SDL_GetError()); core::error::report(e_kind::fatal_error, std::string("unable to open a new window, ") + SDL_GetError());
_id = SDL_GetWindowID(_win); _id = SDL_GetWindowID(_win);
_icon = SDL_CreateRGBSurfaceFrom(static_cast<void*>(logo_mlx), logo_mlx_width, logo_mlx_height, 32, 4 * logo_mlx_width, rmask, gmask, bmask, amask);
SDL_SetWindowIcon(_win, _icon);
} }
void MLX_Window::destroy() noexcept void MLX_Window::destroy() noexcept
{ {
if(_win) if(_win)
SDL_DestroyWindow(_win); SDL_DestroyWindow(_win);
if(_icon)
SDL_FreeSurface(_icon);
} }
MLX_Window::~MLX_Window() MLX_Window::~MLX_Window()

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/04 21:53:12 by maldavid #+# #+# */ /* Created: 2022/10/04 21:53:12 by maldavid #+# #+# */
/* Updated: 2023/04/12 19:06:24 by maldavid ### ########.fr */ /* Updated: 2023/11/25 11:33:32 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -21,7 +21,7 @@ namespace mlx
class MLX_Window class MLX_Window
{ {
public: public:
MLX_Window(std::size_t w, std::size_t h, std::string title); MLX_Window(std::size_t w, std::size_t h, const std::string& title);
inline SDL_Window* getNativeWindow() const noexcept { return _win; } inline SDL_Window* getNativeWindow() const noexcept { return _win; }
inline int getWidth() const noexcept { return _width; } inline int getWidth() const noexcept { return _width; }
@@ -33,6 +33,7 @@ namespace mlx
~MLX_Window(); ~MLX_Window();
private: private:
SDL_Surface* _icon = nullptr;
SDL_Window* _win = nullptr; SDL_Window* _win = nullptr;
int _width = 0; int _width = 0;
int _height = 0; int _height = 0;

View File

@@ -6,19 +6,23 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/08 18:55:57 by maldavid #+# #+# */ /* Created: 2022/10/08 18:55:57 by maldavid #+# #+# */
/* Updated: 2023/04/23 12:37:32 by maldavid ### ########.fr */ /* Updated: 2023/11/16 13:54:25 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "vk_buffer.h" #include "vk_buffer.h"
#include <renderer/command/vk_cmd_pool.h> #include <renderer/command/vk_cmd_pool.h>
#include <renderer/command/vk_cmd_buffer.h>
#include <renderer/core/render_core.h> #include <renderer/core/render_core.h>
#include <vma.h>
#include <cstring> #include <cstring>
#include <iostream>
namespace mlx namespace mlx
{ {
void Buffer::create(Buffer::kind type, VkDeviceSize size, VkBufferUsageFlags usage, const void* data) void Buffer::create(Buffer::kind type, VkDeviceSize size, VkBufferUsageFlags usage, const char* name, const void* data)
{ {
_usage = usage;
if(type == Buffer::kind::constant) if(type == Buffer::kind::constant)
{ {
if(data == nullptr) if(data == nullptr)
@@ -26,31 +30,21 @@ namespace mlx
core::error::report(e_kind::warning, "Vulkan : trying to create constant buffer without data (constant buffers cannot be modified after creation)"); core::error::report(e_kind::warning, "Vulkan : trying to create constant buffer without data (constant buffers cannot be modified after creation)");
return; return;
} }
_usage = usage | VK_BUFFER_USAGE_TRANSFER_SRC_BIT; _usage |= VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
_flags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
}
else if(type == Buffer::kind::uniform)
{
_usage = usage;
_flags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
}
else
{
_usage = usage;
_flags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
} }
_size = size; VmaAllocationCreateInfo alloc_info{};
alloc_info.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT;
alloc_info.usage = VMA_MEMORY_USAGE_AUTO;
createBuffer(_usage, _flags); createBuffer(_usage, alloc_info, size, name);
if(type == Buffer::kind::constant || data != nullptr) if(data != nullptr)
{ {
void* mapped = nullptr; void* mapped = nullptr;
mapMem(&mapped); mapMem(&mapped);
std::memcpy(mapped, data, _size); std::memcpy(mapped, data, size);
unmapMem(); unmapMem();
if(type == Buffer::kind::constant) if(type == Buffer::kind::constant)
pushToGPU(); pushToGPU();
} }
@@ -58,80 +52,66 @@ namespace mlx
void Buffer::destroy() noexcept void Buffer::destroy() noexcept
{ {
vkDestroyBuffer(Render_Core::get().getDevice().get(), _buffer, nullptr); if(_is_mapped)
vkFreeMemory(Render_Core::get().getDevice().get(), _memory, nullptr); unmapMem();
if(_buffer != VK_NULL_HANDLE)
Render_Core::get().getAllocator().destroyBuffer(_allocation, _buffer);
_buffer = VK_NULL_HANDLE;
} }
void Buffer::createBuffer(VkBufferUsageFlags usage, VkMemoryPropertyFlags properties) void Buffer::createBuffer(VkBufferUsageFlags usage, VmaAllocationCreateInfo info, VkDeviceSize size, const char* name)
{ {
VkBufferCreateInfo bufferInfo{}; VkBufferCreateInfo bufferInfo{};
bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; bufferInfo.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
bufferInfo.size = _size; bufferInfo.size = size;
bufferInfo.usage = usage; bufferInfo.usage = usage;
bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; bufferInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
auto device = Render_Core::get().getDevice().get(); #ifdef DEBUG
_name = name;
if(vkCreateBuffer(device, &bufferInfo, nullptr, &_buffer) != VK_SUCCESS) std::string alloc_name = _name;
core::error::report(e_kind::fatal_error, "Vulkan : failed to create buffer"); if(usage & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
alloc_name.append("_index_buffer");
VkMemoryRequirements memRequirements; else if(usage & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
vkGetBufferMemoryRequirements(device, _buffer, &memRequirements); alloc_name.append("_vertex_buffer");
else if((usage & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) != 1)
VkMemoryAllocateInfo allocInfo{}; alloc_name.append("_buffer");
allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO; _allocation = Render_Core::get().getAllocator().createBuffer(&bufferInfo, &info, _buffer, alloc_name.c_str());
allocInfo.allocationSize = memRequirements.size; #else
allocInfo.memoryTypeIndex = *RCore::findMemoryType(memRequirements.memoryTypeBits, properties); _allocation = Render_Core::get().getAllocator().createBuffer(&bufferInfo, &info, _buffer, nullptr);
#endif
if(vkAllocateMemory(device, &allocInfo, nullptr, &_memory) != VK_SUCCESS) _size = size;
core::error::report(e_kind::fatal_error, "Vulkan : failed to allocate buffer memory");
if(vkBindBufferMemory(device, _buffer, _memory, _offset) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : unable to bind device memory to a buffer object");
} }
void Buffer::pushToGPU() noexcept void Buffer::pushToGPU() noexcept
{ {
VmaAllocationCreateInfo alloc_info{};
alloc_info.usage = VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE;
Buffer newBuffer; Buffer newBuffer;
newBuffer._size = _size; newBuffer._usage = (_usage & 0xFFFFFFFC) | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
newBuffer._usage = (this->_usage & 0xFFFFFFFC) | VK_BUFFER_USAGE_TRANSFER_DST_BIT; #ifdef DEBUG
newBuffer._flags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT; std::string new_name = _name + "_GPU";
newBuffer.createBuffer(newBuffer._usage, newBuffer._flags); newBuffer.createBuffer(newBuffer._usage, alloc_info, _size, new_name.c_str());
#else
newBuffer.createBuffer(newBuffer._usage, alloc_info, _size, nullptr);
#endif
CmdPool cmdpool; CmdPool cmdpool;
cmdpool.init(); cmdpool.init();
auto device = Render_Core::get().getDevice().get(); CmdBuffer cmdBuffer;
cmdBuffer.init(&cmdpool);
VkCommandBufferAllocateInfo allocInfo{}; cmdBuffer.beginRecord(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT);
allocInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
allocInfo.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY;
allocInfo.commandPool = cmdpool.get();
allocInfo.commandBufferCount = 1;
VkCommandBuffer commandBuffer;
vkAllocateCommandBuffers(device, &allocInfo, &commandBuffer);
VkCommandBufferBeginInfo beginInfo{};
beginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
beginInfo.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT;
vkBeginCommandBuffer(commandBuffer, &beginInfo);
VkBufferCopy copyRegion{}; VkBufferCopy copyRegion{};
copyRegion.size = _size; copyRegion.size = _size;
vkCmdCopyBuffer(commandBuffer, _buffer, newBuffer._buffer, 1, &copyRegion); vkCmdCopyBuffer(cmdBuffer.get(), _buffer, newBuffer._buffer, 1, &copyRegion);
vkEndCommandBuffer(commandBuffer); cmdBuffer.endRecord();
cmdBuffer.submitIdle();
VkSubmitInfo submitInfo{};
submitInfo.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
submitInfo.commandBufferCount = 1;
submitInfo.pCommandBuffers = &commandBuffer;
auto graphicsQueue = Render_Core::get().getQueue().getGraphic();
vkQueueSubmit(graphicsQueue, 1, &submitInfo, VK_NULL_HANDLE);
vkQueueWaitIdle(graphicsQueue);
cmdBuffer.destroy();
cmdpool.destroy(); cmdpool.destroy();
this->swap(newBuffer); this->swap(newBuffer);
@@ -145,6 +125,10 @@ namespace mlx
_buffer = buffer._buffer; _buffer = buffer._buffer;
buffer._buffer = temp_b; buffer._buffer = temp_b;
VmaAllocation temp_a = buffer._allocation;
buffer._allocation = _allocation;
_allocation = temp_a;
VkDeviceSize temp_size = buffer._size; VkDeviceSize temp_size = buffer._size;
buffer._size = _size; buffer._size = _size;
_size = temp_size; _size = temp_size;
@@ -153,26 +137,13 @@ namespace mlx
buffer._offset = _offset; buffer._offset = _offset;
_offset = temp_offset; _offset = temp_offset;
VkDeviceMemory temp_memory = buffer._memory;
buffer._memory = _memory;
_memory = temp_memory;
VkBufferUsageFlags temp_u = _usage; VkBufferUsageFlags temp_u = _usage;
_usage = buffer._usage; _usage = buffer._usage;
buffer._usage = temp_u; buffer._usage = temp_u;
VkMemoryPropertyFlags temp_f = _flags;
_flags = buffer._flags;
buffer._flags = temp_f;
} }
void Buffer::flush(VkDeviceSize size, VkDeviceSize offset) void Buffer::flush(VkDeviceSize size, VkDeviceSize offset)
{ {
VkMappedMemoryRange mappedRange{}; Render_Core::get().getAllocator().flush(_allocation, size, offset);
mappedRange.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
mappedRange.memory = _memory;
mappedRange.offset = offset;
mappedRange.size = size;
vkFlushMappedMemoryRanges(Render_Core::get().getDevice().get(), 1, &mappedRange);
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 23:18:52 by maldavid #+# #+# */ /* Created: 2022/10/06 23:18:52 by maldavid #+# #+# */
/* Updated: 2023/04/22 19:51:47 by maldavid ### ########.fr */ /* Updated: 2023/11/16 13:56:19 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -23,40 +23,38 @@ namespace mlx
public: public:
enum class kind { dynamic, uniform, constant }; enum class kind { dynamic, uniform, constant };
void create(kind type, VkDeviceSize size, VkBufferUsageFlags usage, const void* data = nullptr); void create(kind type, VkDeviceSize size, VkBufferUsageFlags usage, const char* name, const void* data = nullptr);
void destroy() noexcept; void destroy() noexcept;
inline void mapMem(void** data = nullptr, VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0) noexcept inline void mapMem(void** data) noexcept { Render_Core::get().getAllocator().mapMemory(_allocation, data); _is_mapped = true; }
{
if(vkMapMemory(Render_Core::get().getDevice().get(), _memory, _offset + offset, size, 0, data) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to map a buffer");
_is_mapped = true;
}
inline bool isMapped() const noexcept { return _is_mapped; } inline bool isMapped() const noexcept { return _is_mapped; }
inline void unmapMem() noexcept { vkUnmapMemory(Render_Core::get().getDevice().get(), _memory); _is_mapped = false; } inline void unmapMem() noexcept { Render_Core::get().getAllocator().unmapMemory(_allocation); _is_mapped = false; }
void flush(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0); void flush(VkDeviceSize size = VK_WHOLE_SIZE, VkDeviceSize offset = 0);
inline unsigned int getSize() noexcept { return _size; }
inline unsigned int getOffset() noexcept { return _offset; }
inline VkDeviceMemory getDeviceMemory() noexcept { return _memory; }
inline VkBuffer& operator()() noexcept { return _buffer; } inline VkBuffer& operator()() noexcept { return _buffer; }
inline VkBuffer& get() noexcept { return _buffer; } inline VkBuffer& get() noexcept { return _buffer; }
inline VkDeviceSize getSize() const noexcept { return _size; }
inline VkDeviceSize getOffset() const noexcept { return _offset; }
protected: protected:
void pushToGPU() noexcept; void pushToGPU() noexcept;
void swap(Buffer& buffer) noexcept; void swap(Buffer& buffer) noexcept;
VkDeviceMemory _memory = VK_NULL_HANDLE; protected:
VkDeviceSize _offset = 0; VmaAllocation _allocation;
VkDeviceSize _size = 0;
VkBuffer _buffer = VK_NULL_HANDLE; VkBuffer _buffer = VK_NULL_HANDLE;
VkDeviceSize _offset = 0;
VkDeviceSize _size = 0;
private: private:
void createBuffer(VkBufferUsageFlags usage, VkMemoryPropertyFlags properties); void createBuffer(VkBufferUsageFlags usage, VmaAllocationCreateInfo info, VkDeviceSize size, const char* name);
private:
#ifdef DEBUG
std::string _name;
#endif
VkBufferUsageFlags _usage = 0; VkBufferUsageFlags _usage = 0;
VkMemoryPropertyFlags _flags = 0;
bool _is_mapped = false; bool _is_mapped = false;
}; };
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/01/25 15:05:05 by maldavid #+# #+# */ /* Created: 2023/01/25 15:05:05 by maldavid #+# #+# */
/* Updated: 2023/04/22 19:51:54 by maldavid ### ########.fr */ /* Updated: 2023/11/14 03:25:59 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -22,7 +22,7 @@ namespace mlx
class C_IBO : public Buffer class C_IBO : public Buffer
{ {
public: public:
inline void create(uint32_t size, const uint16_t* data) { Buffer::create(Buffer::kind::constant, size, VK_BUFFER_USAGE_INDEX_BUFFER_BIT, data); } inline void create(uint32_t size, const uint16_t* data, const char* name) { Buffer::create(Buffer::kind::constant, size, VK_BUFFER_USAGE_INDEX_BUFFER_BIT, name, data); }
inline void bind(Renderer& renderer) noexcept { vkCmdBindIndexBuffer(renderer.getActiveCmdBuffer().get(), _buffer, _offset, VK_INDEX_TYPE_UINT16); } inline void bind(Renderer& renderer) noexcept { vkCmdBindIndexBuffer(renderer.getActiveCmdBuffer().get(), _buffer, _offset, VK_INDEX_TYPE_UINT16); }
}; };
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:45:52 by maldavid #+# #+# */ /* Created: 2022/10/06 18:45:52 by maldavid #+# #+# */
/* Updated: 2023/04/22 19:51:56 by maldavid ### ########.fr */ /* Updated: 2023/11/16 13:57:42 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -16,13 +16,19 @@
namespace mlx namespace mlx
{ {
void UBO::create(Renderer* renderer, uint32_t size) void UBO::create(Renderer* renderer, uint32_t size, const char* name)
{ {
_renderer = renderer; _renderer = renderer;
for(int i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) for(int i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
{ {
_buffers[i].create(Buffer::kind::uniform, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT); #ifdef DEBUG
std::string name_frame = name;
name_frame.append(std::to_string(i));
_buffers[i].create(Buffer::kind::uniform, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, name_frame.c_str());
#else
_buffers[i].create(Buffer::kind::uniform, size, VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, nullptr);
#endif
_buffers[i].mapMem(&_maps[i]); _buffers[i].mapMem(&_maps[i]);
if(_maps[i] == nullptr) if(_maps[i] == nullptr)
core::error::report(e_kind::fatal_error, "Vulkan : unable to map a uniform buffer"); core::error::report(e_kind::fatal_error, "Vulkan : unable to map a uniform buffer");
@@ -50,11 +56,6 @@ namespace mlx
return _buffers[_renderer->getActiveImageIndex()].getOffset(); return _buffers[_renderer->getActiveImageIndex()].getOffset();
} }
VkDeviceMemory UBO::getDeviceMemory() noexcept
{
return _buffers[_renderer->getActiveImageIndex()].getDeviceMemory();
}
VkBuffer& UBO::operator()() noexcept VkBuffer& UBO::operator()() noexcept
{ {
return _buffers[_renderer->getActiveImageIndex()].get(); return _buffers[_renderer->getActiveImageIndex()].get();

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:45:29 by maldavid #+# #+# */ /* Created: 2022/10/06 18:45:29 by maldavid #+# #+# */
/* Updated: 2023/04/22 19:51:59 by maldavid ### ########.fr */ /* Updated: 2023/11/14 03:26:10 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -22,7 +22,7 @@ namespace mlx
class UBO class UBO
{ {
public: public:
void create(class Renderer* renderer, uint32_t size); void create(class Renderer* renderer, uint32_t size, const char* name);
void setData(uint32_t size, const void* data); void setData(uint32_t size, const void* data);
void setDynamicData(uint32_t size, const void* data); void setDynamicData(uint32_t size, const void* data);
@@ -37,7 +37,6 @@ namespace mlx
inline unsigned int getSize(int i) noexcept { return _buffers[i].getSize(); } inline unsigned int getSize(int i) noexcept { return _buffers[i].getSize(); }
inline unsigned int getOffset(int i) noexcept { return _buffers[i].getOffset(); } inline unsigned int getOffset(int i) noexcept { return _buffers[i].getOffset(); }
inline VkDeviceMemory getDeviceMemory(int i) noexcept { return _buffers[i].getDeviceMemory(); }
inline VkBuffer& operator()(int i) noexcept { return _buffers[i].get(); } inline VkBuffer& operator()(int i) noexcept { return _buffers[i].get(); }
inline VkBuffer& get(int i) noexcept { return _buffers[i].get(); } inline VkBuffer& get(int i) noexcept { return _buffers[i].get(); }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:28:08 by maldavid #+# #+# */ /* Created: 2022/10/06 18:28:08 by maldavid #+# #+# */
/* Updated: 2022/12/19 15:38:45 by maldavid ### ########.fr */ /* Updated: 2023/11/10 08:33:52 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -17,8 +17,8 @@ namespace mlx
{ {
void VBO::setData(uint32_t size, const void* data) void VBO::setData(uint32_t size, const void* data)
{ {
if(size > _size) if(size > getSize())
core::error::report(e_kind::error, "Vulkan : trying to store to much data in a vertex buffer (%d bytes in %d bytes)", size, _size); core::error::report(e_kind::error, "Vulkan : trying to store to much data in a vertex buffer (%d bytes in %d bytes)", size, getSize());
if(data == nullptr) if(data == nullptr)
core::error::report(e_kind::warning, "Vulkan : mapping null data in a vertex buffer"); core::error::report(e_kind::warning, "Vulkan : mapping null data in a vertex buffer");

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:27:38 by maldavid #+# #+# */ /* Created: 2022/10/06 18:27:38 by maldavid #+# #+# */
/* Updated: 2023/04/22 19:52:05 by maldavid ### ########.fr */ /* Updated: 2023/11/14 04:53:36 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -21,17 +21,15 @@ namespace mlx
class VBO : public Buffer class VBO : public Buffer
{ {
public: public:
inline void create(uint32_t size) { Buffer::create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT); } inline void create(uint32_t size, const char* name) { Buffer::create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, name); }
void setData(uint32_t size, const void* data); void setData(uint32_t size, const void* data);
inline void bind(Renderer& renderer) noexcept { vkCmdBindVertexBuffers(renderer.getActiveCmdBuffer().get(), 0, 1, &_buffer, &_offset); } inline void bind(Renderer& renderer) noexcept { vkCmdBindVertexBuffers(renderer.getActiveCmdBuffer().get(), 0, 1, &_buffer, &_offset); }
}; };
class C_VBO : public Buffer class C_VBO : public Buffer
{ {
public: public:
inline void create(uint32_t size, const void* data) { Buffer::create(Buffer::kind::constant, size, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, data); } inline void create(uint32_t size, const void* data, const char* name) { Buffer::create(Buffer::kind::constant, size, VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, name, data); }
inline void bind(Renderer& renderer) noexcept { vkCmdBindVertexBuffers(renderer.getActiveCmdBuffer().get(), 0, 1, &_buffer, &_offset); } inline void bind(Renderer& renderer) noexcept { vkCmdBindVertexBuffers(renderer.getActiveCmdBuffer().get(), 0, 1, &_buffer, &_offset); }
}; };
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:26:06 by maldavid #+# #+# */ /* Created: 2022/10/06 18:26:06 by maldavid #+# #+# */
/* Updated: 2023/04/23 15:19:08 by maldavid ### ########.fr */ /* Updated: 2023/11/08 20:17:49 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -34,6 +34,9 @@ namespace mlx
if(vkAllocateCommandBuffers(Render_Core::get().getDevice().get(), &allocInfo, &_cmd_buffer) != VK_SUCCESS) if(vkAllocateCommandBuffers(Render_Core::get().getDevice().get(), &allocInfo, &_cmd_buffer) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to allocate command buffer"); core::error::report(e_kind::fatal_error, "Vulkan : failed to allocate command buffer");
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new command buffer");
#endif
_fence.init(); _fence.init();
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:24:33 by maldavid #+# #+# */ /* Created: 2022/10/06 18:24:33 by maldavid #+# #+# */
/* Updated: 2022/12/18 22:56:26 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:23:38 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -29,5 +29,6 @@ namespace mlx
void CmdPool::destroy() noexcept void CmdPool::destroy() noexcept
{ {
vkDestroyCommandPool(Render_Core::get().getDevice().get(), _cmd_pool, nullptr); vkDestroyCommandPool(Render_Core::get().getDevice().get(), _cmd_pool, nullptr);
_cmd_pool = VK_NULL_HANDLE;
} }
} }

160
src/renderer/core/memory.cpp git.filemode.normal_file
View File

@@ -0,0 +1,160 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* memory.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: kbz_8 <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/10/20 22:02:37 by kbz_8 #+# #+# */
/* Updated: 2023/11/14 12:45:29 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#include <core/profile.h>
#include <core/errors.h>
#include <cstdio>
#define VMA_STATIC_VULKAN_FUNCTIONS 0
#define VMA_DYNAMIC_VULKAN_FUNCTIONS 0
#define VMA_VULKAN_VERSION 1002000
#define VMA_ASSERT(expr) (static_cast<bool>(expr) ? void(0) : mlx::core::error::report(e_kind::fatal_error, "Graphics allocator : an assertion has been catched : '%s'", #expr))
#define VMA_IMPLEMENTATION
#ifdef MLX_COMPILER_CLANG
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wnullability-completeness"
#include <renderer/core/memory.h>
#pragma clang diagnostic pop
#else
#include <renderer/core/memory.h>
#endif
#include <renderer/core/render_core.h>
#include <fstream>
namespace mlx
{
void GPUallocator::init() noexcept
{
VmaVulkanFunctions vma_vulkan_func{};
vma_vulkan_func.vkAllocateMemory = vkAllocateMemory;
vma_vulkan_func.vkBindBufferMemory = vkBindBufferMemory;
vma_vulkan_func.vkBindImageMemory = vkBindImageMemory;
vma_vulkan_func.vkCreateBuffer = vkCreateBuffer;
vma_vulkan_func.vkCreateImage = vkCreateImage;
vma_vulkan_func.vkDestroyBuffer = vkDestroyBuffer;
vma_vulkan_func.vkDestroyImage = vkDestroyImage;
vma_vulkan_func.vkFlushMappedMemoryRanges = vkFlushMappedMemoryRanges;
vma_vulkan_func.vkFreeMemory = vkFreeMemory;
vma_vulkan_func.vkGetBufferMemoryRequirements = vkGetBufferMemoryRequirements;
vma_vulkan_func.vkGetImageMemoryRequirements = vkGetImageMemoryRequirements;
vma_vulkan_func.vkGetPhysicalDeviceMemoryProperties = vkGetPhysicalDeviceMemoryProperties;
vma_vulkan_func.vkGetPhysicalDeviceProperties = vkGetPhysicalDeviceProperties;
vma_vulkan_func.vkInvalidateMappedMemoryRanges = vkInvalidateMappedMemoryRanges;
vma_vulkan_func.vkMapMemory = vkMapMemory;
vma_vulkan_func.vkUnmapMemory = vkUnmapMemory;
vma_vulkan_func.vkCmdCopyBuffer = vkCmdCopyBuffer;
vma_vulkan_func.vkGetBufferMemoryRequirements2KHR = vkGetBufferMemoryRequirements2;
vma_vulkan_func.vkGetImageMemoryRequirements2KHR = vkGetImageMemoryRequirements2;
vma_vulkan_func.vkBindBufferMemory2KHR = vkBindBufferMemory2;
vma_vulkan_func.vkBindImageMemory2KHR = vkBindImageMemory2;
vma_vulkan_func.vkGetPhysicalDeviceMemoryProperties2KHR = vkGetPhysicalDeviceMemoryProperties2;
VmaAllocatorCreateInfo allocatorCreateInfo{};
allocatorCreateInfo.vulkanApiVersion = VK_API_VERSION_1_2;
allocatorCreateInfo.physicalDevice = Render_Core::get().getDevice().getPhysicalDevice();
allocatorCreateInfo.device = Render_Core::get().getDevice().get();
allocatorCreateInfo.instance = Render_Core::get().getInstance().get();
allocatorCreateInfo.pVulkanFunctions = &vma_vulkan_func;
if(vmaCreateAllocator(&allocatorCreateInfo, &_allocator) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create graphics memory allocator");
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new allocator");
#endif
}
VmaAllocation GPUallocator::createBuffer(const VkBufferCreateInfo* binfo, const VmaAllocationCreateInfo* vinfo, VkBuffer& buffer, const char* name) noexcept
{
VmaAllocation allocation;
if(vmaCreateBuffer(_allocator, binfo, vinfo, &buffer, &allocation, nullptr) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to allocate a buffer");
if(name != nullptr)
vmaSetAllocationName(_allocator, allocation, name);
#ifdef DEBUG
core::error::report(e_kind::message, "Graphics Allocator : created new buffer");
#endif
return allocation;
}
void GPUallocator::destroyBuffer(VmaAllocation allocation, VkBuffer buffer) noexcept
{
vkDeviceWaitIdle(Render_Core::get().getDevice().get());
vmaDestroyBuffer(_allocator, buffer, allocation);
#ifdef DEBUG
core::error::report(e_kind::message, "Graphics Allocator : destroyed buffer");
#endif
}
VmaAllocation GPUallocator::createImage(const VkImageCreateInfo* iminfo, const VmaAllocationCreateInfo* vinfo, VkImage& image, const char* name) noexcept
{
VmaAllocation allocation;
if(vmaCreateImage(_allocator, iminfo, vinfo, &image, &allocation, nullptr) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to allocate an image");
if(name != nullptr)
vmaSetAllocationName(_allocator, allocation, name);
#ifdef DEBUG
core::error::report(e_kind::message, "Graphics Allocator : created new image");
#endif
return allocation;
}
void GPUallocator::destroyImage(VmaAllocation allocation, VkImage image) noexcept
{
vkDeviceWaitIdle(Render_Core::get().getDevice().get());
vmaDestroyImage(_allocator, image, allocation);
#ifdef DEBUG
core::error::report(e_kind::message, "Graphics Allocator : destroyed image");
#endif
}
void GPUallocator::mapMemory(VmaAllocation allocation, void** data) noexcept
{
if(vmaMapMemory(_allocator, allocation, data) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Graphics allocator : unable to map GPU memory to CPU memory");
}
void GPUallocator::unmapMemory(VmaAllocation allocation) noexcept
{
vmaUnmapMemory(_allocator, allocation);
}
void GPUallocator::dumpMemoryToJson()
{
static uint32_t id = 0;
std::string name("memory_dump");
name.append(std::to_string(id) + ".json");
std::ofstream file(name);
if(!file.is_open())
{
core::error::report(e_kind::error, "Graphics allocator : unable to dump memory to a json file");
return;
}
char* str = nullptr;
vmaBuildStatsString(_allocator, &str, true);
file << str;
vmaFreeStatsString(_allocator, str);
file.close();
id++;
}
void GPUallocator::flush(VmaAllocation allocation, VkDeviceSize size, VkDeviceSize offset) noexcept
{
vmaFlushAllocation(_allocator, allocation, offset, size);
}
void GPUallocator::destroy() noexcept
{
vmaDestroyAllocator(_allocator);
}
}

49
src/renderer/core/memory.h git.filemode.normal_file
View File

@@ -0,0 +1,49 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* memory.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/10/20 02:13:03 by maldavid #+# #+# */
/* Updated: 2023/11/14 09:46:32 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef __MLX_VK_MEMORY__
#define __MLX_VK_MEMORY__
#include <volk.h>
#include <vma.h>
namespace mlx
{
class GPUallocator
{
public:
GPUallocator() = default;
void init() noexcept;
void destroy() noexcept;
VmaAllocation createBuffer(const VkBufferCreateInfo* binfo, const VmaAllocationCreateInfo* vinfo, VkBuffer& buffer, const char* name = nullptr) noexcept;
void destroyBuffer(VmaAllocation allocation, VkBuffer buffer) noexcept;
VmaAllocation createImage(const VkImageCreateInfo* iminfo, const VmaAllocationCreateInfo* vinfo, VkImage& image, const char* name = nullptr) noexcept;
void destroyImage(VmaAllocation allocation, VkImage image) noexcept;
void mapMemory(VmaAllocation allocation, void** data) noexcept;
void unmapMemory(VmaAllocation allocation) noexcept;
void dumpMemoryToJson();
void flush(VmaAllocation allocation, VkDeviceSize size, VkDeviceSize offset) noexcept;
~GPUallocator() = default;
private:
VmaAllocator _allocator;
};
}
#endif

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/17 23:33:34 by maldavid #+# #+# */ /* Created: 2022/12/17 23:33:34 by maldavid #+# #+# */
/* Updated: 2023/04/23 19:09:21 by maldavid ### ########.fr */ /* Updated: 2023/11/20 12:04:51 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -24,7 +24,7 @@
#include <mutex> #include <mutex>
#ifdef DEBUG #ifdef DEBUG
#warning "MLX is being compiled in debug mode, this activates Vulkan's validation layers and debug messages and may impact rendering performances" #warning "MLX is being compiled in debug mode, this activates Vulkan's validation layers and debug messages which may impact rendering performances"
#endif #endif
namespace mlx namespace mlx
@@ -57,6 +57,7 @@ namespace mlx
_device.init(); _device.init();
volkLoadDevice(_device.get()); volkLoadDevice(_device.get());
_queues.init(); _queues.init();
_allocator.init();
_is_init = true; _is_init = true;
} }
@@ -67,6 +68,7 @@ namespace mlx
vkDeviceWaitIdle(_device()); vkDeviceWaitIdle(_device());
_allocator.destroy();
_device.destroy(); _device.destroy();
_layers.destroy(); _layers.destroy();
_instance.destroy(); _instance.destroy();

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/08 19:16:32 by maldavid #+# #+# */ /* Created: 2022/10/08 19:16:32 by maldavid #+# #+# */
/* Updated: 2023/04/23 12:31:42 by maldavid ### ########.fr */ /* Updated: 2023/11/20 07:20:43 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -20,6 +20,7 @@
#include "vk_device.h" #include "vk_device.h"
#include "vk_instance.h" #include "vk_instance.h"
#include "vk_validation_layers.h" #include "vk_validation_layers.h"
#include "memory.h"
#include <utils/singleton.h> #include <utils/singleton.h>
#include <core/errors.h> #include <core/errors.h>
@@ -32,37 +33,39 @@ namespace mlx
} }
#ifdef DEBUG #ifdef DEBUG
constexpr const bool enableValidationLayers = true; constexpr const bool enableValidationLayers = true;
#else #else
constexpr const bool enableValidationLayers = false; constexpr const bool enableValidationLayers = false;
#endif #endif
const std::vector<const char*> validationLayers = { "VK_LAYER_KHRONOS_validation" }; const std::vector<const char*> validationLayers = { "VK_LAYER_KHRONOS_validation" };
constexpr const int MAX_FRAMES_IN_FLIGHT = 2; constexpr const int MAX_FRAMES_IN_FLIGHT = 3;
class Render_Core : public Singleton<Render_Core> class Render_Core : public Singleton<Render_Core>
{ {
public: public:
Render_Core() = default; Render_Core() = default;
void init(); void init();
void destroy(); void destroy();
inline Instance& getInstance() noexcept { return _instance; } inline Instance& getInstance() noexcept { return _instance; }
inline Device& getDevice() noexcept { return _device; } inline Device& getDevice() noexcept { return _device; }
inline Queues& getQueue() noexcept { return _queues; } inline Queues& getQueue() noexcept { return _queues; }
inline GPUallocator& getAllocator() noexcept { return _allocator; }
inline ValidationLayers& getLayers() noexcept { return _layers; } inline ValidationLayers& getLayers() noexcept { return _layers; }
~Render_Core() = default; ~Render_Core() = default;
private: private:
ValidationLayers _layers; ValidationLayers _layers;
Queues _queues; Queues _queues;
Device _device; Device _device;
Instance _instance; Instance _instance;
bool _is_init = false; GPUallocator _allocator;
}; bool _is_init = false;
};
} }
#endif // __MLX_RENDER_CORE__ #endif // __MLX_RENDER_CORE__

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/08 19:14:29 by maldavid #+# #+# */ /* Created: 2022/10/08 19:14:29 by maldavid #+# #+# */
/* Updated: 2022/12/18 22:56:47 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:22:02 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -16,6 +16,7 @@
#include <SDL2/SDL.h> #include <SDL2/SDL.h>
#include <SDL2/SDL_vulkan.h> #include <SDL2/SDL_vulkan.h>
#include <iostream> #include <iostream>
#include <algorithm>
namespace mlx namespace mlx
{ {
@@ -57,6 +58,9 @@ namespace mlx
if(vkCreateDevice(_physicalDevice, &createInfo, nullptr, &_device) != VK_SUCCESS) if(vkCreateDevice(_physicalDevice, &createInfo, nullptr, &_device) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create logcal device"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create logcal device");
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new logical device");
#endif
} }
void Device::pickPhysicalDevice() void Device::pickPhysicalDevice()
@@ -78,32 +82,57 @@ namespace mlx
if(SDL_Vulkan_CreateSurface(window, Render_Core::get().getInstance().get(), &surface) != SDL_TRUE) if(SDL_Vulkan_CreateSurface(window, Render_Core::get().getInstance().get(), &surface) != SDL_TRUE)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create a surface to pick physical device"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create a surface to pick physical device");
std::vector<std::pair<int, VkPhysicalDevice>> devices_score;
for(const auto& device : devices) for(const auto& device : devices)
{ devices_score.emplace_back(deviceScore(device, surface), device);
if(isDeviceSuitable(device, surface))
{
_physicalDevice = device;
break;
}
}
vkDestroySurfaceKHR(Render_Core::get().getInstance().get(), surface, nullptr); vkDestroySurfaceKHR(Render_Core::get().getInstance().get(), surface, nullptr);
SDL_DestroyWindow(window); SDL_DestroyWindow(window);
using device_pair = std::pair<int, VkPhysicalDevice>;
std::sort(devices_score.begin(), devices_score.end(), [](const device_pair& a, const device_pair& b)
{
return a.first > b.first;
});
if(devices_score.front().first > 0)
_physicalDevice = devices_score.front().second;
if(_physicalDevice == VK_NULL_HANDLE) if(_physicalDevice == VK_NULL_HANDLE)
core::error::report(e_kind::fatal_error, "Vulkan : failed to find a suitable GPU"); core::error::report(e_kind::fatal_error, "Vulkan : failed to find a suitable GPU");
#ifdef DEBUG
VkPhysicalDeviceProperties props;
vkGetPhysicalDeviceProperties(_physicalDevice, &props);
core::error::report(e_kind::message, "Vulkan : picked a physical device, %s", props.deviceName);
#endif
} }
bool Device::isDeviceSuitable(VkPhysicalDevice device, VkSurfaceKHR surface) int Device::deviceScore(VkPhysicalDevice device, VkSurfaceKHR surface)
{ {
Queues::QueueFamilyIndices indices = Render_Core::get().getQueue().findQueueFamilies(device, surface); Queues::QueueFamilyIndices indices = Render_Core::get().getQueue().findQueueFamilies(device, surface);
bool extensionsSupported = checkDeviceExtensionSupport(device); bool extensionsSupported = checkDeviceExtensionSupport(device);
uint32_t formatCount = 0; uint32_t formatCount = 0;
if(extensionsSupported) if(extensionsSupported)
vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, nullptr); vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, nullptr);
return indices.isComplete() && extensionsSupported && formatCount != 0;
VkPhysicalDeviceProperties props;
vkGetPhysicalDeviceProperties(device, &props);
if(!indices.isComplete() || !extensionsSupported || formatCount == 0)
return -1;
int score = 0;
#ifndef FORCE_INTEGRATED_GPU
if(props.deviceType == VK_PHYSICAL_DEVICE_TYPE_DISCRETE_GPU)
score += 1000;
#else
if(props.deviceType != VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU)
return -1;
#endif
score += props.limits.maxImageDimension2D;
score += props.limits.maxBoundDescriptorSets;
return score;
} }
bool Device::checkDeviceExtensionSupport(VkPhysicalDevice device) bool Device::checkDeviceExtensionSupport(VkPhysicalDevice device)
@@ -125,5 +154,6 @@ namespace mlx
void Device::destroy() noexcept void Device::destroy() noexcept
{ {
vkDestroyDevice(_device, nullptr); vkDestroyDevice(_device, nullptr);
_device = VK_NULL_HANDLE;
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/08 19:13:42 by maldavid #+# #+# */ /* Created: 2022/10/08 19:13:42 by maldavid #+# #+# */
/* Updated: 2022/12/18 22:55:30 by maldavid ### ########.fr */ /* Updated: 2023/11/11 01:51:26 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -28,12 +28,13 @@ namespace mlx
inline VkDevice& get() noexcept { return _device; } inline VkDevice& get() noexcept { return _device; }
inline VkPhysicalDevice& getPhysicalDevice() noexcept { return _physicalDevice; } inline VkPhysicalDevice& getPhysicalDevice() noexcept { return _physicalDevice; }
private: private:
void pickPhysicalDevice(); void pickPhysicalDevice();
bool isDeviceSuitable(VkPhysicalDevice device, VkSurfaceKHR surface);
bool checkDeviceExtensionSupport(VkPhysicalDevice device); bool checkDeviceExtensionSupport(VkPhysicalDevice device);
int deviceScore(VkPhysicalDevice device, VkSurfaceKHR surface);
private:
VkPhysicalDevice _physicalDevice = VK_NULL_HANDLE; VkPhysicalDevice _physicalDevice = VK_NULL_HANDLE;
VkDevice _device = VK_NULL_HANDLE; VkDevice _device = VK_NULL_HANDLE;
}; };

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/02 17:53:06 by maldavid #+# #+# */ /* Created: 2023/04/02 17:53:06 by maldavid #+# #+# */
/* Updated: 2023/04/02 17:54:14 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:07:21 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -25,6 +25,9 @@ namespace mlx
if(vkCreateFence(Render_Core::get().getDevice().get(), &fenceInfo, nullptr, &_fence) != VK_SUCCESS) if(vkCreateFence(Render_Core::get().getDevice().get(), &fenceInfo, nullptr, &_fence) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create CPU synchronization object"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create CPU synchronization object");
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new fence");
#endif
} }
void Fence::wait() noexcept void Fence::wait() noexcept
@@ -39,6 +42,8 @@ namespace mlx
void Fence::destroy() noexcept void Fence::destroy() noexcept
{ {
vkDestroyFence(Render_Core::get().getDevice().get(), _fence, nullptr); if(_fence != VK_NULL_HANDLE)
vkDestroyFence(Render_Core::get().getDevice().get(), _fence, nullptr);
_fence = VK_NULL_HANDLE;
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/08 19:04:21 by maldavid #+# #+# */ /* Created: 2022/10/08 19:04:21 by maldavid #+# #+# */
/* Updated: 2023/01/25 15:28:18 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:21:42 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -19,25 +19,25 @@ namespace mlx
{ {
void Instance::init() void Instance::init()
{ {
VkApplicationInfo appInfo{}; VkApplicationInfo appInfo{};
appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO; appInfo.sType = VK_STRUCTURE_TYPE_APPLICATION_INFO;
appInfo.pApplicationName = "MacroLibX"; appInfo.pApplicationName = "MacroLibX";
appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0); appInfo.applicationVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.pEngineName = "MacroLibX"; appInfo.pEngineName = "MacroLibX";
appInfo.engineVersion = VK_MAKE_VERSION(0, 0, 1); appInfo.engineVersion = VK_MAKE_VERSION(1, 0, 0);
appInfo.apiVersion = VK_API_VERSION_1_2; appInfo.apiVersion = VK_API_VERSION_1_2;
VkInstanceCreateInfo createInfo{}; VkInstanceCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; createInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO;
createInfo.pApplicationInfo = &appInfo; createInfo.pApplicationInfo = &appInfo;
auto extensions = getRequiredExtensions(); auto extensions = getRequiredExtensions();
createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size()); createInfo.enabledExtensionCount = static_cast<uint32_t>(extensions.size());
createInfo.ppEnabledExtensionNames = extensions.data(); createInfo.ppEnabledExtensionNames = extensions.data();
VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo; VkDebugUtilsMessengerCreateInfoEXT debugCreateInfo;
if constexpr(enableValidationLayers) if constexpr(enableValidationLayers)
{ {
if(Render_Core::get().getLayers().checkValidationLayerSupport()) if(Render_Core::get().getLayers().checkValidationLayerSupport())
{ {
createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size()); createInfo.enabledLayerCount = static_cast<uint32_t>(validationLayers.size());
@@ -45,45 +45,49 @@ namespace mlx
Render_Core::get().getLayers().populateDebugMessengerCreateInfo(debugCreateInfo); Render_Core::get().getLayers().populateDebugMessengerCreateInfo(debugCreateInfo);
createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo; createInfo.pNext = (VkDebugUtilsMessengerCreateInfoEXT*) &debugCreateInfo;
} }
} }
else else
{ {
createInfo.enabledLayerCount = 0; createInfo.enabledLayerCount = 0;
createInfo.pNext = nullptr; createInfo.pNext = nullptr;
} }
VkResult res; VkResult res;
if((res = vkCreateInstance(&createInfo, nullptr, &_instance)) != VK_SUCCESS) if((res = vkCreateInstance(&createInfo, nullptr, &_instance)) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create Vulkan instance"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create Vulkan instance");
volkLoadInstance(_instance); volkLoadInstance(_instance);
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new instance");
#endif
} }
std::vector<const char*> Instance::getRequiredExtensions() std::vector<const char*> Instance::getRequiredExtensions()
{ {
unsigned int count = 0; unsigned int count = 0;
SDL_Window* window = SDL_CreateWindow("", 0, 0, 1, 1, SDL_WINDOW_VULKAN | SDL_WINDOW_HIDDEN); SDL_Window* window = SDL_CreateWindow("", 0, 0, 1, 1, SDL_WINDOW_VULKAN | SDL_WINDOW_HIDDEN);
if(!window) if(!window)
core::error::report(e_kind::fatal_error, "Vulkan : cannot get instance extentions from window : %s", SDL_GetError()); core::error::report(e_kind::fatal_error, "Vulkan : cannot get instance extentions from window : %s", SDL_GetError());
if(!SDL_Vulkan_GetInstanceExtensions(window, &count, nullptr)) if(!SDL_Vulkan_GetInstanceExtensions(window, &count, nullptr))
core::error::report(e_kind::fatal_error, "Vulkan : cannot get instance extentions from window : %s", SDL_GetError()); core::error::report(e_kind::fatal_error, "Vulkan : cannot get instance extentions from window : %s", SDL_GetError());
std::vector<const char*> extensions = { VK_EXT_DEBUG_REPORT_EXTENSION_NAME }; std::vector<const char*> extensions = { VK_EXT_DEBUG_REPORT_EXTENSION_NAME };
size_t additional_extension_count = extensions.size(); size_t additional_extension_count = extensions.size();
extensions.resize(additional_extension_count + count); extensions.resize(additional_extension_count + count);
if(!SDL_Vulkan_GetInstanceExtensions(window, &count, extensions.data() + additional_extension_count)) if(!SDL_Vulkan_GetInstanceExtensions(window, &count, extensions.data() + additional_extension_count))
core::error::report(e_kind::error, "Vulkan : cannot get instance extentions from window : %s", SDL_GetError()); core::error::report(e_kind::error, "Vulkan : cannot get instance extentions from window : %s", SDL_GetError());
if constexpr(enableValidationLayers) if constexpr(enableValidationLayers)
extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME); extensions.push_back(VK_EXT_DEBUG_UTILS_EXTENSION_NAME);
SDL_DestroyWindow(window); SDL_DestroyWindow(window);
return extensions; return extensions;
} }
void Instance::destroy() noexcept void Instance::destroy() noexcept
{ {
vkDestroyInstance(_instance, nullptr); vkDestroyInstance(_instance, nullptr);
} _instance = VK_NULL_HANDLE;
}
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/08 19:01:08 by maldavid #+# #+# */ /* Created: 2022/10/08 19:01:08 by maldavid #+# #+# */
/* Updated: 2023/04/02 17:55:58 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:22:29 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -24,11 +24,16 @@ namespace mlx
if( vkCreateSemaphore(Render_Core::get().getDevice().get(), &semaphoreInfo, nullptr, &_imageAvailableSemaphores) != VK_SUCCESS || if( vkCreateSemaphore(Render_Core::get().getDevice().get(), &semaphoreInfo, nullptr, &_imageAvailableSemaphores) != VK_SUCCESS ||
vkCreateSemaphore(Render_Core::get().getDevice().get(), &semaphoreInfo, nullptr, &_renderFinishedSemaphores) != VK_SUCCESS) vkCreateSemaphore(Render_Core::get().getDevice().get(), &semaphoreInfo, nullptr, &_renderFinishedSemaphores) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create GPU synchronization object"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create GPU synchronization object");
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new semaphore");
#endif
} }
void Semaphore::destroy() noexcept void Semaphore::destroy() noexcept
{ {
vkDestroySemaphore(Render_Core::get().getDevice().get(), _renderFinishedSemaphores, nullptr); vkDestroySemaphore(Render_Core::get().getDevice().get(), _renderFinishedSemaphores, nullptr);
_renderFinishedSemaphores = VK_NULL_HANDLE;
vkDestroySemaphore(Render_Core::get().getDevice().get(), _imageAvailableSemaphores, nullptr); vkDestroySemaphore(Render_Core::get().getDevice().get(), _imageAvailableSemaphores, nullptr);
_imageAvailableSemaphores = VK_NULL_HANDLE;
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/08 18:58:49 by maldavid #+# #+# */ /* Created: 2022/10/08 18:58:49 by maldavid #+# #+# */
/* Updated: 2022/12/18 22:20:57 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:22:38 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -22,6 +22,9 @@ namespace mlx
{ {
if(SDL_Vulkan_CreateSurface(renderer.getWindow()->getNativeWindow(), Render_Core::get().getInstance().get(), &_surface) != SDL_TRUE) if(SDL_Vulkan_CreateSurface(renderer.getWindow()->getNativeWindow(), Render_Core::get().getInstance().get(), &_surface) != SDL_TRUE)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create a surface : %s", SDL_GetError()); core::error::report(e_kind::fatal_error, "Vulkan : failed to create a surface : %s", SDL_GetError());
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new surface");
#endif
} }
VkSurfaceFormatKHR Surface::chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats) VkSurfaceFormatKHR Surface::chooseSwapSurfaceFormat(const std::vector<VkSurfaceFormatKHR>& availableFormats)
@@ -38,5 +41,6 @@ namespace mlx
void Surface::destroy() noexcept void Surface::destroy() noexcept
{ {
vkDestroySurfaceKHR(Render_Core::get().getInstance().get(), _surface, nullptr); vkDestroySurfaceKHR(Render_Core::get().getInstance().get(), _surface, nullptr);
_surface = VK_NULL_HANDLE;
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <marvin@42.fr> +#+ +:+ +#+ */ /* By: maldavid <marvin@42.fr> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/19 14:05:25 by maldavid #+# #+# */ /* Created: 2022/12/19 14:05:25 by maldavid #+# #+# */
/* Updated: 2022/12/19 14:11:12 by maldavid ### ########.fr */ /* Updated: 2023/11/20 07:21:57 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -28,34 +28,38 @@ namespace mlx
populateDebugMessengerCreateInfo(createInfo); populateDebugMessengerCreateInfo(createInfo);
if(createDebugUtilsMessengerEXT(&createInfo, nullptr) != VK_SUCCESS) if(createDebugUtilsMessengerEXT(&createInfo, nullptr) != VK_SUCCESS)
core::error::report(e_kind::error, "Vulkan : failed to set up debug messenger"); core::error::report(e_kind::error, "Vulkan : failed to set up debug messenger");
#ifdef DEBUG
else
core::error::report(e_kind::message, "Vulkan : enabled validation layers");
#endif
} }
bool ValidationLayers::checkValidationLayerSupport() bool ValidationLayers::checkValidationLayerSupport()
{ {
uint32_t layerCount; uint32_t layerCount;
vkEnumerateInstanceLayerProperties(&layerCount, nullptr); vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
std::vector<VkLayerProperties> availableLayers(layerCount); std::vector<VkLayerProperties> availableLayers(layerCount);
vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data()); vkEnumerateInstanceLayerProperties(&layerCount, availableLayers.data());
for(const char* layerName : validationLayers) for(const char* layerName : validationLayers)
{ {
bool layerFound = false; bool layerFound = false;
for(const auto& layerProperties : availableLayers) for(const auto& layerProperties : availableLayers)
{ {
if(std::strcmp(layerName, layerProperties.layerName) == 0) if(std::strcmp(layerName, layerProperties.layerName) == 0)
{ {
layerFound = true; layerFound = true;
break; break;
} }
} }
if(!layerFound) if(!layerFound)
return false; return false;
} }
return true; return true;
} }
void ValidationLayers::destroy() void ValidationLayers::destroy()
{ {
@@ -67,16 +71,16 @@ namespace mlx
VkResult ValidationLayers::createDebugUtilsMessengerEXT(const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator) VkResult ValidationLayers::createDebugUtilsMessengerEXT(const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator)
{ {
auto func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(Render_Core::get().getInstance().get(), "vkCreateDebugUtilsMessengerEXT"); auto func = (PFN_vkCreateDebugUtilsMessengerEXT)vkGetInstanceProcAddr(Render_Core::get().getInstance().get(), "vkCreateDebugUtilsMessengerEXT");
return func != nullptr ? func(Render_Core::get().getInstance().get(), pCreateInfo, pAllocator, &_debugMessenger) : VK_ERROR_EXTENSION_NOT_PRESENT; return func != nullptr ? func(Render_Core::get().getInstance().get(), pCreateInfo, pAllocator, &_debugMessenger) : VK_ERROR_EXTENSION_NOT_PRESENT;
} }
void ValidationLayers::populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo) void ValidationLayers::populateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo)
{ {
createInfo = {}; createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT; createInfo.sType = VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT;
createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT; createInfo.messageSeverity = VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT; createInfo.messageType = VK_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT | VK_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
createInfo.pfnUserCallback = ValidationLayers::debugCallback; createInfo.pfnUserCallback = ValidationLayers::debugCallback;
} }
VKAPI_ATTR VkBool32 VKAPI_CALL ValidationLayers::debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData) VKAPI_ATTR VkBool32 VKAPI_CALL ValidationLayers::debugCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageType, const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData, void* pUserData)

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/01/23 18:34:23 by maldavid #+# #+# */ /* Created: 2023/01/23 18:34:23 by maldavid #+# #+# */
/* Updated: 2023/01/23 18:44:51 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:23:05 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -30,5 +30,6 @@ namespace mlx
void DescriptorPool::destroy() noexcept void DescriptorPool::destroy() noexcept
{ {
vkDestroyDescriptorPool(Render_Core::get().getDevice().get(), _pool, nullptr); vkDestroyDescriptorPool(Render_Core::get().getDevice().get(), _pool, nullptr);
_pool = VK_NULL_HANDLE;
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/01/23 18:40:44 by maldavid #+# #+# */ /* Created: 2023/01/23 18:40:44 by maldavid #+# #+# */
/* Updated: 2023/04/22 19:52:08 by maldavid ### ########.fr */ /* Updated: 2023/11/12 01:14:52 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -37,6 +37,9 @@ namespace mlx
if(vkAllocateDescriptorSets(device, &allocInfo, _desc_set.data()) != VK_SUCCESS) if(vkAllocateDescriptorSets(device, &allocInfo, _desc_set.data()) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to allocate descriptor set"); core::error::report(e_kind::fatal_error, "Vulkan : failed to allocate descriptor set");
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new descriptor set");
#endif
} }
void DescriptorSet::writeDescriptor(int binding, UBO* ubo) noexcept void DescriptorSet::writeDescriptor(int binding, UBO* ubo) noexcept

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/01/23 18:37:28 by maldavid #+# #+# */ /* Created: 2023/01/23 18:37:28 by maldavid #+# #+# */
/* Updated: 2023/03/31 16:37:09 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:23:16 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -41,5 +41,6 @@ namespace mlx
void DescriptorSetLayout::destroy() noexcept void DescriptorSetLayout::destroy() noexcept
{ {
vkDestroyDescriptorSetLayout(Render_Core::get().getDevice().get(), _layout, nullptr); vkDestroyDescriptorSetLayout(Render_Core::get().getDevice().get(), _layout, nullptr);
_layout = VK_NULL_HANDLE;
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/03/31 18:03:35 by maldavid #+# #+# */ /* Created: 2023/03/31 18:03:35 by maldavid #+# #+# */
/* Updated: 2023/08/09 13:51:35 by maldavid ### ########.fr */ /* Updated: 2023/11/16 14:01:47 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -29,13 +29,9 @@
namespace mlx namespace mlx
{ {
void Texture::create(uint8_t* pixels, uint32_t width, uint32_t height, VkFormat format) void Texture::create(uint8_t* pixels, uint32_t width, uint32_t height, VkFormat format, const char* name, bool dedicated_memory)
{ {
Image::create(width, height, format, TILING, Image::create(width, height, format, TILING, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, name, dedicated_memory);
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
{ VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT }
);
Image::createImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT); Image::createImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT);
Image::createSampler(); Image::createSampler();
@@ -48,14 +44,24 @@ namespace mlx
std::vector<uint16_t> indexData = { 0, 1, 2, 2, 3, 0 }; std::vector<uint16_t> indexData = { 0, 1, 2, 2, 3, 0 };
_vbo.create(sizeof(Vertex) * vertexData.size(), vertexData.data()); #ifdef DEBUG
_ibo.create(sizeof(uint16_t) * indexData.size(), indexData.data()); _vbo.create(sizeof(Vertex) * vertexData.size(), vertexData.data(), name);
_ibo.create(sizeof(uint16_t) * indexData.size(), indexData.data(), name);
_name = name;
#else
_vbo.create(sizeof(Vertex) * vertexData.size(), vertexData.data(), nullptr);
_ibo.create(sizeof(uint16_t) * indexData.size(), indexData.data(), nullptr);
#endif
if(pixels != nullptr) if(pixels != nullptr)
{ {
Buffer staging_buffer; Buffer staging_buffer;
std::size_t size = width * height * formatSize(format); std::size_t size = width * height * formatSize(format);
staging_buffer.create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, pixels); #ifdef DEBUG
staging_buffer.create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, name, pixels);
#else
staging_buffer.create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, nullptr, pixels);
#endif
Image::copyFromBuffer(staging_buffer); Image::copyFromBuffer(staging_buffer);
staging_buffer.destroy(); staging_buffer.destroy();
} }
@@ -89,10 +95,13 @@ namespace mlx
#ifdef DEBUG #ifdef DEBUG
core::error::report(e_kind::message, "Texture : enabling CPU mapping"); core::error::report(e_kind::message, "Texture : enabling CPU mapping");
#endif #endif
std::size_t size = getWidth() * getHeight() * formatSize(getFormat()); std::size_t size = getWidth() * getHeight() * formatSize(getFormat());
_buf_map.emplace(); _buf_map.emplace();
_buf_map->create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT); #ifdef DEBUG
_buf_map->create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, _name.c_str());
#else
_buf_map->create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT, nullptr);
#endif
Image::copyToBuffer(*_buf_map); Image::copyToBuffer(*_buf_map);
_buf_map->mapMem(&_map); _buf_map->mapMem(&_map);
_cpu_map = std::vector<uint32_t>(getWidth() * getHeight(), 0); _cpu_map = std::vector<uint32_t>(getWidth() * getHeight(), 0);
@@ -139,7 +148,11 @@ namespace mlx
if(stbi_is_hdr(filename.c_str())) if(stbi_is_hdr(filename.c_str()))
core::error::report(e_kind::fatal_error, "Texture : unsupported image format '%s'", filename.c_str()); core::error::report(e_kind::fatal_error, "Texture : unsupported image format '%s'", filename.c_str());
data = stbi_load(filename.c_str(), w, h, &channels, 4); data = stbi_load(filename.c_str(), w, h, &channels, 4);
texture.create(data, *w, *h, VK_FORMAT_R8G8B8A8_UNORM); #ifdef DEBUG
texture.create(data, *w, *h, VK_FORMAT_R8G8B8A8_UNORM, filename.c_str());
#else
texture.create(data, *w, *h, VK_FORMAT_R8G8B8A8_UNORM, nullptr);
#endif
stbi_image_free(data); stbi_image_free(data);
return texture; return texture;
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/03/08 02:24:58 by maldavid #+# #+# */ /* Created: 2023/03/08 02:24:58 by maldavid #+# #+# */
/* Updated: 2023/08/02 12:32:27 by maldavid ### ########.fr */ /* Updated: 2023/11/25 10:01:35 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -29,7 +29,7 @@ namespace mlx
public: public:
Texture() = default; Texture() = default;
void create(uint8_t* pixels, uint32_t width, uint32_t height, VkFormat format); void create(uint8_t* pixels, uint32_t width, uint32_t height, VkFormat format, const char* name, bool dedicated_memory = false);
void render(class Renderer& renderer, int x, int y); void render(class Renderer& renderer, int x, int y);
void destroy() noexcept override; void destroy() noexcept override;
@@ -50,6 +50,9 @@ namespace mlx
private: private:
C_VBO _vbo; C_VBO _vbo;
C_IBO _ibo; C_IBO _ibo;
#ifdef DEBUG
std::string _name;
#endif
DescriptorSet _set; DescriptorSet _set;
std::vector<uint32_t> _cpu_map; std::vector<uint32_t> _cpu_map;
std::optional<Buffer> _buf_map = std::nullopt; std::optional<Buffer> _buf_map = std::nullopt;
@@ -63,6 +66,7 @@ namespace mlx
struct TextureRenderData struct TextureRenderData
{ {
Texture* texture; Texture* texture;
std::size_t hash = 0;
int x; int x;
int y; int y;

View File

@@ -6,22 +6,23 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/07 16:40:09 by maldavid #+# #+# */ /* Created: 2023/04/07 16:40:09 by maldavid #+# #+# */
/* Updated: 2023/04/23 12:55:22 by maldavid ### ########.fr */ /* Updated: 2023/11/14 05:36:46 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include <renderer/images/texture_atlas.h> #include <renderer/images/texture_atlas.h>
#ifdef IMAGE_OPTIMIZED
#define TILING VK_IMAGE_TILING_OPTIMAL
#else
#define TILING VK_IMAGE_TILING_LINEAR
#endif
namespace mlx namespace mlx
{ {
void TextureAtlas::create(uint8_t* pixels, uint32_t width, uint32_t height, VkFormat format) void TextureAtlas::create(uint8_t* pixels, uint32_t width, uint32_t height, VkFormat format, const char* name, bool dedicated_memory)
{ {
Image::create(width, height, format, Image::create(width, height, format, TILING, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, name, dedicated_memory);
VK_IMAGE_TILING_OPTIMAL,
VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_SAMPLED_BIT,
{ VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT }
);
Image::createImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT); Image::createImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT);
Image::createSampler(); Image::createSampler();
@@ -29,7 +30,7 @@ namespace mlx
{ {
Buffer staging_buffer; Buffer staging_buffer;
std::size_t size = width * height * formatSize(format); std::size_t size = width * height * formatSize(format);
staging_buffer.create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, pixels); staging_buffer.create(Buffer::kind::dynamic, size, VK_BUFFER_USAGE_TRANSFER_SRC_BIT, name, pixels);
Image::copyFromBuffer(staging_buffer); Image::copyFromBuffer(staging_buffer);
staging_buffer.destroy(); staging_buffer.destroy();
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/07 16:36:33 by maldavid #+# #+# */ /* Created: 2023/04/07 16:36:33 by maldavid #+# #+# */
/* Updated: 2023/04/11 12:04:16 by maldavid ### ########.fr */ /* Updated: 2023/11/14 05:36:30 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -24,7 +24,7 @@ namespace mlx
public: public:
TextureAtlas() = default; TextureAtlas() = default;
void create(uint8_t* pixels, uint32_t width, uint32_t height, VkFormat format); void create(uint8_t* pixels, uint32_t width, uint32_t height, VkFormat format, const char* name, bool dedicated_memory = false);
void render(class Renderer& renderer, int x, int y, uint32_t ibo_size); void render(class Renderer& renderer, int x, int y, uint32_t ibo_size);
void destroy() noexcept override; void destroy() noexcept override;

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/01/25 11:59:07 by maldavid #+# #+# */ /* Created: 2023/01/25 11:59:07 by maldavid #+# #+# */
/* Updated: 2023/04/23 14:59:41 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:21:14 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -18,7 +18,125 @@
namespace mlx namespace mlx
{ {
void Image::create(uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, std::vector<VkMemoryPropertyFlags> properties) bool isStencilFormat(VkFormat format)
{
switch(format)
{
case VK_FORMAT_D32_SFLOAT_S8_UINT:
case VK_FORMAT_D24_UNORM_S8_UINT:
return true;
default: return false;
}
}
bool isDepthFormat(VkFormat format)
{
switch(format)
{
case VK_FORMAT_D16_UNORM:
case VK_FORMAT_D32_SFLOAT:
case VK_FORMAT_D32_SFLOAT_S8_UINT:
case VK_FORMAT_D24_UNORM_S8_UINT:
case VK_FORMAT_D16_UNORM_S8_UINT:
return true;
default: return false;
}
}
VkFormat bitsToFormat(uint32_t bits)
{
switch(bits)
{
case 8: return VK_FORMAT_R8_UNORM;
case 16: return VK_FORMAT_R8G8_UNORM;
case 24: return VK_FORMAT_R8G8B8_UNORM;
case 32: return VK_FORMAT_R8G8B8A8_UNORM;
case 48: return VK_FORMAT_R16G16B16_SFLOAT;
case 64: return VK_FORMAT_R16G16B16A16_SFLOAT;
case 96: return VK_FORMAT_R32G32B32_SFLOAT;
case 128: return VK_FORMAT_R32G32B32A32_SFLOAT;
default:
core::error::report(e_kind::fatal_error, "Vulkan : unsupported image bit-depth");
return VK_FORMAT_R8G8B8A8_UNORM;
}
}
VkPipelineStageFlags layoutToAccessMask(VkImageLayout layout, bool isDestination)
{
VkPipelineStageFlags accessMask = 0;
switch(layout)
{
case VK_IMAGE_LAYOUT_UNDEFINED:
if(isDestination)
core::error::report(e_kind::error, "Vulkan : the new layout used in a transition must not be VK_IMAGE_LAYOUT_UNDEFINED");
break;
case VK_IMAGE_LAYOUT_GENERAL: accessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT; break;
case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL: accessMask = VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT; break;
case VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL: accessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT; break;
case VK_IMAGE_LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL:
accessMask = VK_ACCESS_SHADER_READ_BIT; // VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT;
break;
case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL: accessMask = VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT; break;
case VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL: accessMask = VK_ACCESS_TRANSFER_READ_BIT; break;
case VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL: accessMask = VK_ACCESS_TRANSFER_WRITE_BIT; break;
case VK_IMAGE_LAYOUT_PREINITIALIZED:
if(!isDestination)
accessMask = VK_ACCESS_HOST_WRITE_BIT;
else
core::error::report(e_kind::error, "Vulkan : the new layout used in a transition must not be VK_IMAGE_LAYOUT_PREINITIALIZED");
break;
case VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL: accessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; break;
case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL: accessMask = VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT; break;
case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR: accessMask = VK_ACCESS_MEMORY_READ_BIT; break;
default: core::error::report(e_kind::error, "Vulkan : unexpected image layout"); break;
}
return accessMask;
}
VkPipelineStageFlags accessFlagsToPipelineStage(VkAccessFlags accessFlags, VkPipelineStageFlags stageFlags)
{
VkPipelineStageFlags stages = 0;
while(accessFlags != 0)
{
VkAccessFlagBits AccessFlag = static_cast<VkAccessFlagBits>(accessFlags & (~(accessFlags - 1)));
if(AccessFlag == 0 || (AccessFlag & (AccessFlag - 1)) != 0)
core::error::report(e_kind::fatal_error, "Vulkan : an error has been caught during access flag to pipeline stage operation");
accessFlags &= ~AccessFlag;
switch(AccessFlag)
{
case VK_ACCESS_INDIRECT_COMMAND_READ_BIT: stages |= VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT; break;
case VK_ACCESS_INDEX_READ_BIT: stages |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT; break;
case VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT: stages |= VK_PIPELINE_STAGE_VERTEX_INPUT_BIT; break;
case VK_ACCESS_UNIFORM_READ_BIT: stages |= stageFlags | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; break;
case VK_ACCESS_INPUT_ATTACHMENT_READ_BIT: stages |= VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT; break;
case VK_ACCESS_SHADER_READ_BIT: stages |= stageFlags | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; break;
case VK_ACCESS_SHADER_WRITE_BIT: stages |= stageFlags | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT; break;
case VK_ACCESS_COLOR_ATTACHMENT_READ_BIT: stages |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; break;
case VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT: stages |= VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT; break;
case VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT: stages |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; break;
case VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT: stages |= VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT; break;
case VK_ACCESS_TRANSFER_READ_BIT: stages |= VK_PIPELINE_STAGE_TRANSFER_BIT; break;
case VK_ACCESS_TRANSFER_WRITE_BIT: stages |= VK_PIPELINE_STAGE_TRANSFER_BIT; break;
case VK_ACCESS_HOST_READ_BIT: stages |= VK_PIPELINE_STAGE_HOST_BIT; break;
case VK_ACCESS_HOST_WRITE_BIT: stages |= VK_PIPELINE_STAGE_HOST_BIT; break;
case VK_ACCESS_MEMORY_READ_BIT: break;
case VK_ACCESS_MEMORY_WRITE_BIT: break;
default: core::error::report(e_kind::error, "Vulkan : unknown access flag"); break;
}
}
return stages;
}
void Image::create(uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, const char* name, bool dedicated_memory)
{ {
_width = width; _width = width;
_height = height; _height = height;
@@ -40,30 +158,15 @@ namespace mlx
imageInfo.samples = VK_SAMPLE_COUNT_1_BIT; imageInfo.samples = VK_SAMPLE_COUNT_1_BIT;
imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE; imageInfo.sharingMode = VK_SHARING_MODE_EXCLUSIVE;
if(vkCreateImage(Render_Core::get().getDevice().get(), &imageInfo, nullptr, &_image) != VK_SUCCESS) VmaAllocationCreateInfo alloc_info{};
core::error::report(e_kind::fatal_error, "Vulkan : failed to create an image"); alloc_info.usage = VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE;
if(dedicated_memory)
VkMemoryRequirements memRequirements;
vkGetImageMemoryRequirements(Render_Core::get().getDevice().get(), _image, &memRequirements);
std::optional<uint32_t> memTypeIndex;
for(auto prop : properties)
{ {
memTypeIndex = RCore::findMemoryType(memRequirements.memoryTypeBits, prop, false); alloc_info.flags = VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
if(memTypeIndex.has_value()) alloc_info.priority = 1.0f;
break;
} }
if(!memTypeIndex.has_value())
core::error::report(e_kind::fatal_error, "Vulkan : failed to find suitable memory type for an image");
VkMemoryAllocateInfo allocInfo{};
allocInfo.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
allocInfo.allocationSize = memRequirements.size;
allocInfo.memoryTypeIndex = *memTypeIndex;
if(vkAllocateMemory(Render_Core::get().getDevice().get(), &allocInfo, nullptr, &_memory) != VK_SUCCESS) _allocation = Render_Core::get().getAllocator().createImage(&imageInfo, &alloc_info, _image, name);
core::error::report(e_kind::fatal_error, "Vulkan : failed to allocate memory for an image");
vkBindImageMemory(Render_Core::get().getDevice().get(), _image, _memory, 0);
_pool.init(); _pool.init();
} }
@@ -87,7 +190,7 @@ namespace mlx
void Image::createSampler() noexcept void Image::createSampler() noexcept
{ {
VkSamplerCreateInfo info = {}; VkSamplerCreateInfo info{};
info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
info.magFilter = VK_FILTER_NEAREST; info.magFilter = VK_FILTER_NEAREST;
info.minFilter = VK_FILTER_NEAREST; info.minFilter = VK_FILTER_NEAREST;
@@ -112,7 +215,7 @@ namespace mlx
_transfer_cmd.reset(); _transfer_cmd.reset();
_transfer_cmd.beginRecord(); _transfer_cmd.beginRecord();
VkImageMemoryBarrier copy_barrier = {}; VkImageMemoryBarrier copy_barrier{};
copy_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; copy_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
copy_barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; copy_barrier.dstAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
copy_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; copy_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
@@ -125,7 +228,7 @@ namespace mlx
copy_barrier.subresourceRange.layerCount = 1; copy_barrier.subresourceRange.layerCount = 1;
vkCmdPipelineBarrier(_transfer_cmd.get(), VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &copy_barrier); vkCmdPipelineBarrier(_transfer_cmd.get(), VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &copy_barrier);
VkBufferImageCopy region = {}; VkBufferImageCopy region{};
region.bufferOffset = 0; region.bufferOffset = 0;
region.bufferRowLength = 0; region.bufferRowLength = 0;
region.bufferImageHeight = 0; region.bufferImageHeight = 0;
@@ -138,7 +241,7 @@ namespace mlx
vkCmdCopyBufferToImage(_transfer_cmd.get(), buffer.get(), _image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region); vkCmdCopyBufferToImage(_transfer_cmd.get(), buffer.get(), _image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region);
VkImageMemoryBarrier use_barrier = {}; VkImageMemoryBarrier use_barrier{};
use_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; use_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
use_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT; use_barrier.srcAccessMask = VK_ACCESS_TRANSFER_WRITE_BIT;
use_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; use_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
@@ -164,7 +267,7 @@ namespace mlx
_transfer_cmd.reset(); _transfer_cmd.reset();
_transfer_cmd.beginRecord(); _transfer_cmd.beginRecord();
VkImageMemoryBarrier copy_barrier = {}; VkImageMemoryBarrier copy_barrier{};
copy_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; copy_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
copy_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT; copy_barrier.dstAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
copy_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED; copy_barrier.oldLayout = VK_IMAGE_LAYOUT_UNDEFINED;
@@ -177,7 +280,7 @@ namespace mlx
copy_barrier.subresourceRange.layerCount = 1; copy_barrier.subresourceRange.layerCount = 1;
vkCmdPipelineBarrier(_transfer_cmd.get(), VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &copy_barrier); vkCmdPipelineBarrier(_transfer_cmd.get(), VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, 0, 0, nullptr, 0, nullptr, 1, &copy_barrier);
VkBufferImageCopy region = {}; VkBufferImageCopy region{};
region.bufferOffset = 0; region.bufferOffset = 0;
region.bufferRowLength = 0; region.bufferRowLength = 0;
region.bufferImageHeight = 0; region.bufferImageHeight = 0;
@@ -190,7 +293,7 @@ namespace mlx
vkCmdCopyImageToBuffer(_transfer_cmd.get(), _image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, buffer.get(), 1, &region); vkCmdCopyImageToBuffer(_transfer_cmd.get(), _image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, buffer.get(), 1, &region);
VkImageMemoryBarrier use_barrier = {}; VkImageMemoryBarrier use_barrier{};
use_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER; use_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
use_barrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT; use_barrier.srcAccessMask = VK_ACCESS_TRANSFER_READ_BIT;
use_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT; use_barrier.dstAccessMask = VK_ACCESS_SHADER_READ_BIT;
@@ -208,18 +311,79 @@ namespace mlx
_transfer_cmd.submitIdle(); _transfer_cmd.submitIdle();
} }
void Image::destroy() noexcept void Image::transitionLayout(VkImageLayout new_layout)
{
if(new_layout == _layout)
return;
if(!_transfer_cmd.isInit())
_transfer_cmd.init(&_pool);
_transfer_cmd.reset();
_transfer_cmd.beginRecord();
VkImageMemoryBarrier barrier{};
barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
barrier.oldLayout = _layout;
barrier.newLayout = new_layout;
barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
barrier.image = _image;
barrier.subresourceRange.aspectMask = isDepthFormat(_format) ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT;
barrier.subresourceRange.baseMipLevel = 0;
barrier.subresourceRange.levelCount = 1;
barrier.subresourceRange.baseArrayLayer = 0;
barrier.subresourceRange.layerCount = 1;
barrier.srcAccessMask = layoutToAccessMask(_layout, false);
barrier.dstAccessMask = layoutToAccessMask(new_layout, true);
if(isStencilFormat(_format))
barrier.subresourceRange.aspectMask |= VK_IMAGE_ASPECT_STENCIL_BIT;
VkPipelineStageFlags sourceStage = 0;
if(barrier.oldLayout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)
sourceStage = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
else if(barrier.srcAccessMask != 0)
sourceStage = accessFlagsToPipelineStage(barrier.srcAccessMask, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT);
else
sourceStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
VkPipelineStageFlags destinationStage = 0;
if(barrier.newLayout == VK_IMAGE_LAYOUT_PRESENT_SRC_KHR)
destinationStage = VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT;
else if(barrier.dstAccessMask != 0)
destinationStage = accessFlagsToPipelineStage(barrier.dstAccessMask, VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT);
else
destinationStage = VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT;
vkCmdPipelineBarrier(_transfer_cmd.get(), sourceStage, destinationStage, 0, 0, nullptr, 0, nullptr, 1, &barrier);
_transfer_cmd.endRecord();
_transfer_cmd.submitIdle();
_layout = new_layout;
}
void Image::destroySampler() noexcept
{ {
if(_sampler != VK_NULL_HANDLE) if(_sampler != VK_NULL_HANDLE)
vkDestroySampler(Render_Core::get().getDevice().get(), _sampler, nullptr); vkDestroySampler(Render_Core::get().getDevice().get(), _sampler, nullptr);
_sampler = VK_NULL_HANDLE;
}
void Image::destroyImageView() noexcept
{
if(_image_view != VK_NULL_HANDLE) if(_image_view != VK_NULL_HANDLE)
vkDestroyImageView(Render_Core::get().getDevice().get(), _image_view, nullptr); vkDestroyImageView(Render_Core::get().getDevice().get(), _image_view, nullptr);
_image_view = VK_NULL_HANDLE;
}
vkFreeMemory(Render_Core::get().getDevice().get(), _memory, nullptr); void Image::destroy() noexcept
vkDestroyImage(Render_Core::get().getDevice().get(), _image, nullptr); {
if(_transfer_cmd.isInit()) destroySampler();
_transfer_cmd.destroy(); destroyImageView();
_pool.destroy(); destroyCmdPool();
if(_image != VK_NULL_HANDLE)
Render_Core::get().getAllocator().destroyImage(_allocation, _image);
_image = VK_NULL_HANDLE;
} }
uint32_t formatSize(VkFormat format) uint32_t formatSize(VkFormat format)

View File

@@ -6,12 +6,12 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/01/25 11:54:21 by maldavid #+# #+# */ /* Created: 2023/01/25 11:54:21 by maldavid #+# #+# */
/* Updated: 2023/04/23 14:17:11 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:10:05 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#ifndef __VK_IMAGE__ #ifndef __MLX_VK_IMAGE__
#define __VK_IMAGE__ #define __MLX_VK_IMAGE__
#include <volk.h> #include <volk.h>
#include <cstddef> #include <cstddef>
@@ -25,19 +25,30 @@ namespace mlx
class Image class Image
{ {
friend class SwapChain;
public: public:
Image() = default; Image() = default;
void create(uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, std::vector<VkMemoryPropertyFlags> properties); inline void create(VkImage image, VkFormat format, uint32_t width, uint32_t height, VkImageLayout layout = VK_IMAGE_LAYOUT_UNDEFINED) noexcept
{
_image = image;
_format = format;
_width = width;
_height = height;
_layout = layout;
_pool.init();
}
void create(uint32_t width, uint32_t height, VkFormat format, VkImageTiling tiling, VkImageUsageFlags usage, const char* name, bool decated_memory = false);
void createImageView(VkImageViewType type, VkImageAspectFlags aspectFlags) noexcept; void createImageView(VkImageViewType type, VkImageAspectFlags aspectFlags) noexcept;
void createSampler() noexcept; void createSampler() noexcept;
void copyFromBuffer(class Buffer& buffer); void copyFromBuffer(class Buffer& buffer);
void copyToBuffer(class Buffer& buffer); void copyToBuffer(class Buffer& buffer);
void transitionLayout(VkImageLayout new_layout);
virtual void destroy() noexcept; virtual void destroy() noexcept;
inline VkImage get() noexcept { return _image; } inline VkImage get() noexcept { return _image; }
inline VkImage operator()() noexcept { return _image; } inline VkImage operator()() noexcept { return _image; }
inline VkDeviceMemory getDeviceMemory() noexcept { return _memory; }
inline VkImageView getImageView() noexcept { return _image_view; } inline VkImageView getImageView() noexcept { return _image_view; }
inline VkFormat getFormat() noexcept { return _format; } inline VkFormat getFormat() noexcept { return _format; }
inline VkImageTiling getTiling() noexcept { return _tiling; } inline VkImageTiling getTiling() noexcept { return _tiling; }
@@ -47,15 +58,21 @@ namespace mlx
virtual ~Image() = default; virtual ~Image() = default;
private:
void destroySampler() noexcept;
void destroyImageView() noexcept;
inline void destroyCmdPool() noexcept { _transfer_cmd.destroy(); _pool.destroy(); }
private: private:
CmdBuffer _transfer_cmd; CmdBuffer _transfer_cmd;
CmdPool _pool; CmdPool _pool;
VmaAllocation _allocation;
VkImage _image = VK_NULL_HANDLE; VkImage _image = VK_NULL_HANDLE;
VkDeviceMemory _memory = VK_NULL_HANDLE;
VkImageView _image_view = VK_NULL_HANDLE; VkImageView _image_view = VK_NULL_HANDLE;
VkSampler _sampler = VK_NULL_HANDLE; VkSampler _sampler = VK_NULL_HANDLE;
VkFormat _format; VkFormat _format;
VkImageTiling _tiling; VkImageTiling _tiling;
VkImageLayout _layout = VK_IMAGE_LAYOUT_UNDEFINED;
uint32_t _width = 0; uint32_t _width = 0;
uint32_t _height = 0; uint32_t _height = 0;
}; };

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/18 21:27:38 by maldavid #+# #+# */ /* Created: 2022/12/18 21:27:38 by maldavid #+# #+# */
/* Updated: 2023/04/13 14:52:57 by maldavid ### ########.fr */ /* Updated: 2023/11/25 10:23:20 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -183,21 +183,21 @@ namespace mlx
core::error::report(e_kind::fatal_error, "Vulkan : failed to create a fragment shader module"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create a fragment shader module");
VkPipelineShaderStageCreateInfo vertShaderStageInfo{}; VkPipelineShaderStageCreateInfo vertShaderStageInfo{};
vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; vertShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT; vertShaderStageInfo.stage = VK_SHADER_STAGE_VERTEX_BIT;
vertShaderStageInfo.module = vshader; vertShaderStageInfo.module = vshader;
vertShaderStageInfo.pName = "main"; vertShaderStageInfo.pName = "main";
VkPipelineShaderStageCreateInfo fragShaderStageInfo{}; VkPipelineShaderStageCreateInfo fragShaderStageInfo{};
fragShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO; fragShaderStageInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO;
fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT; fragShaderStageInfo.stage = VK_SHADER_STAGE_FRAGMENT_BIT;
fragShaderStageInfo.module = fshader; fragShaderStageInfo.module = fshader;
fragShaderStageInfo.pName = "main"; fragShaderStageInfo.pName = "main";
std::vector<VkPipelineShaderStageCreateInfo> stages = {vertShaderStageInfo, fragShaderStageInfo}; std::array<VkPipelineShaderStageCreateInfo, 2> stages = {vertShaderStageInfo, fragShaderStageInfo};
auto bindingDescription = Vertex::getBindingDescription(); auto bindingDescription = Vertex::getBindingDescription();
auto attributeDescriptions = Vertex::getAttributeDescriptions(); auto attributeDescriptions = Vertex::getAttributeDescriptions();
VkPipelineVertexInputStateCreateInfo vertexInputStateCreateInfo{}; VkPipelineVertexInputStateCreateInfo vertexInputStateCreateInfo{};
vertexInputStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO; vertexInputStateCreateInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
@@ -206,10 +206,10 @@ namespace mlx
vertexInputStateCreateInfo.vertexAttributeDescriptionCount = static_cast<uint32_t>(attributeDescriptions.size()); vertexInputStateCreateInfo.vertexAttributeDescriptionCount = static_cast<uint32_t>(attributeDescriptions.size());
vertexInputStateCreateInfo.pVertexAttributeDescriptions = attributeDescriptions.data(); vertexInputStateCreateInfo.pVertexAttributeDescriptions = attributeDescriptions.data();
VkPipelineInputAssemblyStateCreateInfo inputAssembly{}; VkPipelineInputAssemblyStateCreateInfo inputAssembly{};
inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO; inputAssembly.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST; inputAssembly.topology = VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST;
inputAssembly.primitiveRestartEnable = VK_FALSE; inputAssembly.primitiveRestartEnable = VK_FALSE;
VkDynamicState states[] = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR }; VkDynamicState states[] = { VK_DYNAMIC_STATE_VIEWPORT, VK_DYNAMIC_STATE_SCISSOR };
@@ -219,54 +219,60 @@ namespace mlx
dynamicStates.dynamicStateCount = statesCount; dynamicStates.dynamicStateCount = statesCount;
dynamicStates.pDynamicStates = states; dynamicStates.pDynamicStates = states;
VkViewport viewport{}; VkViewport viewport{};
viewport.x = 0.0f; viewport.x = 0.0f;
viewport.y = 0.0f; viewport.y = 0.0f;
viewport.width = (float)renderer.getSwapChain()._swapChainExtent.width; viewport.width = (float)renderer.getSwapChain().getExtent().width;
viewport.height = (float)renderer.getSwapChain()._swapChainExtent.height; viewport.height = (float)renderer.getSwapChain().getExtent().height;
viewport.minDepth = 0.0f; viewport.minDepth = 0.0f;
viewport.maxDepth = 1.0f; viewport.maxDepth = 1.0f;
VkRect2D scissor{}; VkRect2D scissor{};
scissor.offset = { 0, 0 }; scissor.offset = { 0, 0 };
scissor.extent = renderer.getSwapChain()._swapChainExtent; scissor.extent = renderer.getSwapChain().getExtent();
VkPipelineViewportStateCreateInfo viewportState{}; VkPipelineViewportStateCreateInfo viewportState{};
viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO; viewportState.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
viewportState.viewportCount = 1; viewportState.viewportCount = 1;
viewportState.pViewports = &viewport; viewportState.pViewports = &viewport;
viewportState.scissorCount = 1; viewportState.scissorCount = 1;
viewportState.pScissors = &scissor; viewportState.pScissors = &scissor;
VkPipelineRasterizationStateCreateInfo rasterizer{}; VkPipelineRasterizationStateCreateInfo rasterizer{};
rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO; rasterizer.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
rasterizer.depthClampEnable = VK_FALSE; rasterizer.depthClampEnable = VK_FALSE;
rasterizer.rasterizerDiscardEnable = VK_FALSE; rasterizer.rasterizerDiscardEnable = VK_FALSE;
rasterizer.polygonMode = VK_POLYGON_MODE_FILL; rasterizer.polygonMode = VK_POLYGON_MODE_FILL;
rasterizer.lineWidth = 1.0f; rasterizer.lineWidth = 1.0f;
rasterizer.cullMode = VK_CULL_MODE_NONE; rasterizer.cullMode = VK_CULL_MODE_NONE;
rasterizer.frontFace = VK_FRONT_FACE_CLOCKWISE; rasterizer.frontFace = VK_FRONT_FACE_CLOCKWISE;
rasterizer.depthBiasEnable = VK_FALSE; rasterizer.depthBiasEnable = VK_FALSE;
VkPipelineMultisampleStateCreateInfo multisampling{}; VkPipelineMultisampleStateCreateInfo multisampling{};
multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO; multisampling.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
multisampling.sampleShadingEnable = VK_FALSE; multisampling.sampleShadingEnable = VK_FALSE;
multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT; multisampling.rasterizationSamples = VK_SAMPLE_COUNT_1_BIT;
VkPipelineColorBlendAttachmentState colorBlendAttachment{}; VkPipelineColorBlendAttachmentState colorBlendAttachment{};
colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT; colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
colorBlendAttachment.blendEnable = VK_FALSE; colorBlendAttachment.blendEnable = VK_TRUE;
colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
colorBlendAttachment.colorBlendOp = VK_BLEND_OP_ADD;
colorBlendAttachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
colorBlendAttachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
colorBlendAttachment.alphaBlendOp = VK_BLEND_OP_ADD;
VkPipelineColorBlendStateCreateInfo colorBlending{}; VkPipelineColorBlendStateCreateInfo colorBlending{};
colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
colorBlending.logicOpEnable = VK_FALSE; colorBlending.logicOpEnable = VK_FALSE;
colorBlending.logicOp = VK_LOGIC_OP_COPY; colorBlending.logicOp = VK_LOGIC_OP_COPY;
colorBlending.attachmentCount = 1; colorBlending.attachmentCount = 1;
colorBlending.pAttachments = &colorBlendAttachment; colorBlending.pAttachments = &colorBlendAttachment;
colorBlending.blendConstants[0] = 0.0f; colorBlending.blendConstants[0] = 1.0f;
colorBlending.blendConstants[1] = 0.0f; colorBlending.blendConstants[1] = 1.0f;
colorBlending.blendConstants[2] = 0.0f; colorBlending.blendConstants[2] = 1.0f;
colorBlending.blendConstants[3] = 0.0f; colorBlending.blendConstants[3] = 1.0f;
VkDescriptorSetLayout layouts[] = { VkDescriptorSetLayout layouts[] = {
renderer.getVertDescriptorSetLayout().get(), renderer.getVertDescriptorSetLayout().get(),
@@ -274,42 +280,44 @@ namespace mlx
}; };
VkPipelineLayoutCreateInfo pipelineLayoutInfo{}; VkPipelineLayoutCreateInfo pipelineLayoutInfo{};
pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; pipelineLayoutInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
pipelineLayoutInfo.setLayoutCount = 2; pipelineLayoutInfo.setLayoutCount = 2;
pipelineLayoutInfo.pSetLayouts = layouts; pipelineLayoutInfo.pSetLayouts = layouts;
pipelineLayoutInfo.pushConstantRangeCount = 1; pipelineLayoutInfo.pushConstantRangeCount = 1;
pipelineLayoutInfo.pPushConstantRanges = &push_constant; pipelineLayoutInfo.pPushConstantRanges = &push_constant;
if(vkCreatePipelineLayout(Render_Core::get().getDevice().get(), &pipelineLayoutInfo, nullptr, &_pipelineLayout) != VK_SUCCESS) if(vkCreatePipelineLayout(Render_Core::get().getDevice().get(), &pipelineLayoutInfo, nullptr, &_pipelineLayout) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create a graphics pipeline layout"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create a graphics pipeline layout");
VkGraphicsPipelineCreateInfo pipelineInfo{}; VkGraphicsPipelineCreateInfo pipelineInfo{};
pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO; pipelineInfo.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
pipelineInfo.stageCount = stages.size(); pipelineInfo.stageCount = stages.size();
pipelineInfo.pStages = stages.data(); pipelineInfo.pStages = stages.data();
pipelineInfo.pVertexInputState = &vertexInputStateCreateInfo; pipelineInfo.pVertexInputState = &vertexInputStateCreateInfo;
pipelineInfo.pInputAssemblyState = &inputAssembly; pipelineInfo.pInputAssemblyState = &inputAssembly;
pipelineInfo.pViewportState = &viewportState; pipelineInfo.pViewportState = &viewportState;
pipelineInfo.pRasterizationState = &rasterizer; pipelineInfo.pRasterizationState = &rasterizer;
pipelineInfo.pMultisampleState = &multisampling; pipelineInfo.pMultisampleState = &multisampling;
pipelineInfo.pColorBlendState = &colorBlending; pipelineInfo.pColorBlendState = &colorBlending;
pipelineInfo.pDynamicState = &dynamicStates; pipelineInfo.pDynamicState = &dynamicStates;
pipelineInfo.layout = _pipelineLayout; pipelineInfo.layout = _pipelineLayout;
pipelineInfo.renderPass = renderer.getRenderPass().get(); pipelineInfo.renderPass = renderer.getRenderPass().get();
pipelineInfo.subpass = 0; pipelineInfo.subpass = 0;
pipelineInfo.basePipelineHandle = VK_NULL_HANDLE; pipelineInfo.basePipelineHandle = VK_NULL_HANDLE;
if(vkCreateGraphicsPipelines(Render_Core::get().getDevice().get(), VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &_graphicsPipeline) != VK_SUCCESS) if(vkCreateGraphicsPipelines(Render_Core::get().getDevice().get(), VK_NULL_HANDLE, 1, &pipelineInfo, nullptr, &_graphicsPipeline) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create a graphics pipeline"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create a graphics pipeline");
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new graphic pipeline");
#endif
vkDestroyShaderModule(Render_Core::get().getDevice().get(), fshader, nullptr); vkDestroyShaderModule(Render_Core::get().getDevice().get(), fshader, nullptr);
vkDestroyShaderModule(Render_Core::get().getDevice().get(), vshader, nullptr); vkDestroyShaderModule(Render_Core::get().getDevice().get(), vshader, nullptr);
} }
void GraphicPipeline::destroy() noexcept void GraphicPipeline::destroy() noexcept
{ {
vkDestroyPipeline(Render_Core::get().getDevice().get(), _graphicsPipeline, nullptr); vkDestroyPipeline(Render_Core::get().getDevice().get(), _graphicsPipeline, nullptr);
vkDestroyPipelineLayout(Render_Core::get().getDevice().get(), _pipelineLayout, nullptr); vkDestroyPipelineLayout(Render_Core::get().getDevice().get(), _pipelineLayout, nullptr);
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/03/31 15:14:50 by maldavid #+# #+# */ /* Created: 2023/03/31 15:14:50 by maldavid #+# #+# */
/* Updated: 2023/08/02 05:28:49 by maldavid ### ########.fr */ /* Updated: 2023/11/16 13:44:58 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -17,10 +17,10 @@ namespace mlx
{ {
void PixelPutPipeline::init(uint32_t width, uint32_t height, Renderer& renderer) noexcept void PixelPutPipeline::init(uint32_t width, uint32_t height, Renderer& renderer) noexcept
{ {
_texture.create(nullptr, width, height, VK_FORMAT_R8G8B8A8_UNORM); _texture.create(nullptr, width, height, VK_FORMAT_R8G8B8A8_UNORM, "__mlx_pixel_put_pipeline_texture", true);
_texture.setDescriptor(renderer.getFragDescriptorSet().duplicate()); _texture.setDescriptor(renderer.getFragDescriptorSet().duplicate());
_buffer.create(Buffer::kind::dynamic, sizeof(uint32_t) * (width * height), VK_BUFFER_USAGE_TRANSFER_SRC_BIT); _buffer.create(Buffer::kind::dynamic, sizeof(uint32_t) * (width * height), VK_BUFFER_USAGE_TRANSFER_SRC_BIT, "__mlx_pixel_put_pipeline_texture");
_buffer.mapMem(&_buffer_map); _buffer.mapMem(&_buffer_map);
_cpu_map = std::vector<uint32_t>(height * width, 0); _cpu_map = std::vector<uint32_t>(height * width, 0);
_width = width; _width = width;

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/18 17:25:16 by maldavid #+# #+# */ /* Created: 2022/12/18 17:25:16 by maldavid #+# #+# */
/* Updated: 2023/04/21 20:56:51 by maldavid ### ########.fr */ /* Updated: 2023/11/20 07:25:47 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -20,14 +20,20 @@ namespace mlx
{ {
_surface.create(*this); _surface.create(*this);
_swapchain.init(this); _swapchain.init(this);
_pass.init(this); _pass.init(_swapchain.getImagesFormat());
_swapchain.initFB();
_cmd.init(); _cmd.init();
for(int i = 0; i < _swapchain.getImagesNumber(); i++)
_framebuffers.emplace_back().init(_pass, _swapchain.getImage(i));
for(int i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) for(int i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
_semaphores[i].init(); _semaphores[i].init();
_uniform_buffer.reset(new UBO); _uniform_buffer.reset(new UBO);
_uniform_buffer->create(this, sizeof(glm::mat4)); #ifdef DEBUG
_uniform_buffer->create(this, sizeof(glm::mat4), "__mlx_matrices_uniform_buffer_");
#else
_uniform_buffer->create(this, sizeof(glm::mat4), nullptr);
#endif
VkDescriptorPoolSize pool_sizes[] = { VkDescriptorPoolSize pool_sizes[] = {
{ VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 4096 }, { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 4096 },
@@ -51,15 +57,15 @@ namespace mlx
_framebufferResized = false; _framebufferResized = false;
} }
bool Renderer::beginFrame() bool Renderer::beginFrame()
{ {
auto device = Render_Core::get().getDevice().get(); auto device = Render_Core::get().getDevice().get();
_cmd.getCmdBuffer(_active_image_index).waitForExecution(); _cmd.getCmdBuffer(_current_frame_index).waitForExecution();
_cmd.getCmdBuffer(_active_image_index).reset(); _cmd.getCmdBuffer(_current_frame_index).reset();
VkResult result = vkAcquireNextImageKHR(device, _swapchain(), UINT64_MAX, _semaphores[_active_image_index].getImageSemaphore(), VK_NULL_HANDLE, &_image_index); VkResult result = vkAcquireNextImageKHR(device, _swapchain(), UINT64_MAX, _semaphores[_current_frame_index].getImageSemaphore(), VK_NULL_HANDLE, &_image_index);
if(result == VK_ERROR_OUT_OF_DATE_KHR) if(result == VK_ERROR_OUT_OF_DATE_KHR)
{ {
@@ -69,36 +75,37 @@ namespace mlx
else if(result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR) else if(result != VK_SUCCESS && result != VK_SUBOPTIMAL_KHR)
core::error::report(e_kind::fatal_error, "Vulkan error : failed to acquire swapchain image"); core::error::report(e_kind::fatal_error, "Vulkan error : failed to acquire swapchain image");
_cmd.getCmdBuffer(_active_image_index).beginRecord(); _cmd.getCmdBuffer(_current_frame_index).beginRecord();
_pass.begin(); auto& fb = _framebuffers[_image_index];
_pass.begin(getActiveCmdBuffer(), fb);
_pipeline.bindPipeline(_cmd.getCmdBuffer(_active_image_index)); _pipeline.bindPipeline(_cmd.getCmdBuffer(_current_frame_index));
VkViewport viewport{}; VkViewport viewport{};
viewport.x = 0.0f; viewport.x = 0.0f;
viewport.y = 0.0f; viewport.y = 0.0f;
viewport.width = (float)_swapchain._swapChainExtent.width; viewport.width = static_cast<float>(fb.getWidth());
viewport.height = (float)_swapchain._swapChainExtent.height; viewport.height = static_cast<float>(fb.getHeight());
viewport.minDepth = 0.0f; viewport.minDepth = 0.0f;
viewport.maxDepth = 1.0f; viewport.maxDepth = 1.0f;
vkCmdSetViewport(_cmd.getCmdBuffer(_active_image_index).get(), 0, 1, &viewport); vkCmdSetViewport(_cmd.getCmdBuffer(_current_frame_index).get(), 0, 1, &viewport);
VkRect2D scissor{}; VkRect2D scissor{};
scissor.offset = { 0, 0 }; scissor.offset = { 0, 0 };
scissor.extent = _swapchain._swapChainExtent; scissor.extent = _swapchain.getExtent();
vkCmdSetScissor(_cmd.getCmdBuffer(_active_image_index).get(), 0, 1, &scissor); vkCmdSetScissor(_cmd.getCmdBuffer(_current_frame_index).get(), 0, 1, &scissor);
return true; return true;
} }
void Renderer::endFrame() void Renderer::endFrame()
{ {
_pass.end(); _pass.end(getActiveCmdBuffer());
_cmd.getCmdBuffer(_active_image_index).endRecord(); _cmd.getCmdBuffer(_current_frame_index).endRecord();
_cmd.getCmdBuffer(_active_image_index).submit(_semaphores[_active_image_index]); _cmd.getCmdBuffer(_current_frame_index).submit(_semaphores[_current_frame_index]);
VkSwapchainKHR swapchain = _swapchain(); VkSwapchainKHR swapchain = _swapchain();
VkSemaphore signalSemaphores[] = { _semaphores[_active_image_index].getRenderImageSemaphore() }; VkSemaphore signalSemaphores[] = { _semaphores[_current_frame_index].getRenderImageSemaphore() };
VkPresentInfoKHR presentInfo{}; VkPresentInfoKHR presentInfo{};
presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; presentInfo.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
@@ -118,12 +125,12 @@ namespace mlx
else if(result != VK_SUCCESS) else if(result != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan error : failed to present swap chain image"); core::error::report(e_kind::fatal_error, "Vulkan error : failed to present swap chain image");
_active_image_index = (_active_image_index + 1) % MAX_FRAMES_IN_FLIGHT; _current_frame_index = (_current_frame_index + 1) % MAX_FRAMES_IN_FLIGHT;
} }
void Renderer::destroy() void Renderer::destroy()
{ {
vkDeviceWaitIdle(Render_Core::get().getDevice().get()); vkDeviceWaitIdle(Render_Core::get().getDevice().get());
_pipeline.destroy(); _pipeline.destroy();
_uniform_buffer->destroy(); _uniform_buffer->destroy();
@@ -131,9 +138,10 @@ namespace mlx
_frag_layout.destroy(); _frag_layout.destroy();
_cmd.destroy(); _cmd.destroy();
_desc_pool.destroy(); _desc_pool.destroy();
_swapchain.destroyFB();
_pass.destroy(); _pass.destroy();
_swapchain.destroy(); _swapchain.destroy();
for(auto& fb : _framebuffers)
fb.destroy();
for(int i = 0; i < MAX_FRAMES_IN_FLIGHT; i++) for(int i = 0; i < MAX_FRAMES_IN_FLIGHT; i++)
_semaphores[i].destroy(); _semaphores[i].destroy();
_surface.destroy(); _surface.destroy();

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/12/18 17:14:45 by maldavid #+# #+# */ /* Created: 2022/12/18 17:14:45 by maldavid #+# #+# */
/* Updated: 2023/04/11 12:33:33 by maldavid ### ########.fr */ /* Updated: 2023/11/20 07:26:12 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -24,7 +24,8 @@
#include <renderer/pipeline/pipeline.h> #include <renderer/pipeline/pipeline.h>
#include <renderer/command/cmd_manager.h> #include <renderer/command/cmd_manager.h>
#include <renderer/swapchain/vk_swapchain.h> #include <renderer/swapchain/vk_swapchain.h>
#include <renderer/swapchain/vk_render_pass.h> #include <renderer/renderpass/vk_render_pass.h>
#include <renderer/renderpass/vk_framebuffer.h>
#include <renderer/descriptors/vk_descriptor_set.h> #include <renderer/descriptors/vk_descriptor_set.h>
#include <renderer/descriptors/vk_descriptor_pool.h> #include <renderer/descriptors/vk_descriptor_pool.h>
#include <renderer/descriptors/vk_descriptor_set_layout.h> #include <renderer/descriptors/vk_descriptor_set_layout.h>
@@ -81,59 +82,60 @@ namespace mlx
public: public:
Renderer() = default; Renderer() = default;
void init(); void init();
bool beginFrame(); bool beginFrame();
void endFrame(); void endFrame();
void destroy(); void destroy();
inline class MLX_Window* getWindow() { return _window; }
inline void setWindow(class MLX_Window* window) { _window = window; }
inline Surface& getSurface() noexcept { return _surface; } inline class MLX_Window* getWindow() { return _window; }
inline void setWindow(class MLX_Window* window) { _window = window; }
inline Surface& getSurface() noexcept { return _surface; }
inline CmdPool& getCmdPool() noexcept { return _cmd.getCmdPool(); } inline CmdPool& getCmdPool() noexcept { return _cmd.getCmdPool(); }
inline UBO* getUniformBuffer() noexcept { return _uniform_buffer.get(); } inline UBO* getUniformBuffer() noexcept { return _uniform_buffer.get(); }
inline SwapChain& getSwapChain() noexcept { return _swapchain; } inline SwapChain& getSwapChain() noexcept { return _swapchain; }
inline Semaphore& getSemaphore(int i) noexcept { return _semaphores[i]; } inline Semaphore& getSemaphore(int i) noexcept { return _semaphores[i]; }
inline RenderPass& getRenderPass() noexcept { return _pass; } inline RenderPass& getRenderPass() noexcept { return _pass; }
inline GraphicPipeline& getPipeline() noexcept { return _pipeline; } inline GraphicPipeline& getPipeline() noexcept { return _pipeline; }
inline CmdBuffer& getCmdBuffer(int i) noexcept { return _cmd.getCmdBuffer(i); } inline CmdBuffer& getCmdBuffer(int i) noexcept { return _cmd.getCmdBuffer(i); }
inline CmdBuffer& getActiveCmdBuffer() noexcept { return _cmd.getCmdBuffer(_active_image_index); } inline CmdBuffer& getActiveCmdBuffer() noexcept { return _cmd.getCmdBuffer(_current_frame_index); }
inline DescriptorSet& getVertDescriptorSet() noexcept { return _vert_set; } inline DescriptorSet& getVertDescriptorSet() noexcept { return _vert_set; }
inline DescriptorSet& getFragDescriptorSet() noexcept { return _frag_set; } inline DescriptorSet& getFragDescriptorSet() noexcept { return _frag_set; }
inline DescriptorSetLayout& getVertDescriptorSetLayout() noexcept { return _vert_layout; } inline DescriptorSetLayout& getVertDescriptorSetLayout() noexcept { return _vert_layout; }
inline DescriptorSetLayout& getFragDescriptorSetLayout() noexcept { return _frag_layout; } inline DescriptorSetLayout& getFragDescriptorSetLayout() noexcept { return _frag_layout; }
inline uint32_t getActiveImageIndex() noexcept { return _active_image_index; } inline uint32_t getActiveImageIndex() noexcept { return _current_frame_index; }
inline uint32_t getImageIndex() noexcept { return _image_index; } inline uint32_t getImageIndex() noexcept { return _image_index; }
constexpr inline void requireFrameBufferResize(int index) noexcept { _framebufferResized = true; } constexpr inline void requireFrameBufferResize(int index) noexcept { _framebufferResized = true; }
~Renderer() = default; ~Renderer() = default;
private: private:
GraphicPipeline _pipeline; GraphicPipeline _pipeline;
CmdManager _cmd; CmdManager _cmd;
RenderPass _pass; RenderPass _pass;
Surface _surface; Surface _surface;
SwapChain _swapchain; SwapChain _swapchain;
std::array<Semaphore, MAX_FRAMES_IN_FLIGHT> _semaphores; std::array<Semaphore, MAX_FRAMES_IN_FLIGHT> _semaphores;
std::vector<FrameBuffer> _framebuffers;
DescriptorPool _desc_pool; DescriptorPool _desc_pool;
DescriptorSetLayout _vert_layout; DescriptorSetLayout _vert_layout;
DescriptorSetLayout _frag_layout; DescriptorSetLayout _frag_layout;
DescriptorSet _vert_set; DescriptorSet _vert_set;
DescriptorSet _frag_set; DescriptorSet _frag_set;
std::unique_ptr<UBO> _uniform_buffer; std::unique_ptr<UBO> _uniform_buffer;
class MLX_Window* _window = nullptr; class MLX_Window* _window = nullptr;
uint32_t _active_image_index = 0; uint32_t _current_frame_index = 0;
uint32_t _image_index = 0; uint32_t _image_index = 0;
bool _framebufferResized = false; bool _framebufferResized = false;
}; };
} }

View File

@@ -6,35 +6,43 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:18:06 by maldavid #+# #+# */ /* Created: 2022/10/06 18:18:06 by maldavid #+# #+# */
/* Updated: 2022/12/18 20:01:51 by maldavid ### ########.fr */ /* Updated: 2023/11/20 07:24:26 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include <volk.h> #include <volk.h>
#include <renderer/core/render_core.h> #include <renderer/core/render_core.h>
#include <renderer/renderer.h> #include <renderer/renderer.h>
#include <renderer/images/vk_image.h>
namespace mlx namespace mlx
{ {
void FrameBuffer::init(Renderer& renderer, ImageView& image) void FrameBuffer::init(RenderPass& renderpass, Image& image)
{ {
VkImageView attachments[] = { image() }; VkImageView attachments[] = { image.getImageView() };
_width = image.getWidth();
_height = image.getHeight();
VkFramebufferCreateInfo framebufferInfo{}; VkFramebufferCreateInfo framebufferInfo{};
framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; framebufferInfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
framebufferInfo.renderPass = renderer.getRenderPass().get(); framebufferInfo.renderPass = renderpass.get();
framebufferInfo.attachmentCount = 1; framebufferInfo.attachmentCount = 1;
framebufferInfo.pAttachments = attachments; framebufferInfo.pAttachments = attachments;
framebufferInfo.width = renderer.getSwapChain()._swapChainExtent.width; framebufferInfo.width = _width;
framebufferInfo.height = renderer.getSwapChain()._swapChainExtent.height; framebufferInfo.height = _height;
framebufferInfo.layers = 1; framebufferInfo.layers = 1;
if(vkCreateFramebuffer(Render_Core::get().getDevice().get(), &framebufferInfo, nullptr, &_framebuffer) != VK_SUCCESS) if(vkCreateFramebuffer(Render_Core::get().getDevice().get(), &framebufferInfo, nullptr, &_framebuffer) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create a framebuffer"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create a framebuffer");
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new framebuffer");
#endif
} }
void FrameBuffer::destroy() noexcept void FrameBuffer::destroy() noexcept
{ {
vkDestroyFramebuffer(Render_Core::get().getDevice().get(), _framebuffer, nullptr); vkDestroyFramebuffer(Render_Core::get().getDevice().get(), _framebuffer, nullptr);
_framebuffer = VK_NULL_HANDLE;
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:19:44 by maldavid #+# #+# */ /* Created: 2022/10/06 18:19:44 by maldavid #+# #+# */
/* Updated: 2022/12/18 19:53:00 by maldavid ### ########.fr */ /* Updated: 2023/11/18 16:44:16 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -17,18 +17,22 @@
namespace mlx namespace mlx
{ {
class FrameBuffer class FrameBuffer
{ {
public: public:
void init(class Renderer& renderer, class ImageView& image); void init(class RenderPass& renderpass, class Image& image);
void destroy() noexcept; void destroy() noexcept;
inline VkFramebuffer& operator()() noexcept { return _framebuffer; } inline VkFramebuffer& operator()() noexcept { return _framebuffer; }
inline VkFramebuffer& get() noexcept { return _framebuffer; } inline VkFramebuffer& get() noexcept { return _framebuffer; }
inline uint32_t getWidth() const noexcept { return _width; }
inline uint32_t getHeight() const noexcept { return _height; }
private: private:
VkFramebuffer _framebuffer = VK_NULL_HANDLE; VkFramebuffer _framebuffer = VK_NULL_HANDLE;
}; uint32_t _width = 0;
uint32_t _height = 0;
};
} }
#endif // __MLX_VK_FRAMEBUFFER__ #endif // __MLX_VK_FRAMEBUFFER__

View File

@@ -6,24 +6,24 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:21:36 by maldavid #+# #+# */ /* Created: 2022/10/06 18:21:36 by maldavid #+# #+# */
/* Updated: 2022/12/19 00:06:34 by maldavid ### ########.fr */ /* Updated: 2023/11/20 07:24:40 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#include "vk_render_pass.h" #include "vk_render_pass.h"
#include <renderer/core/render_core.h> #include <renderer/core/render_core.h>
#include <renderer/renderer.h> #include <renderer/renderer.h>
#include <renderer/renderpass/vk_framebuffer.h>
#include <vulkan/vulkan_core.h>
namespace mlx namespace mlx
{ {
static const VkClearValue clearColor = { 0.0f, 0.0f, 0.0f, 1.0f }; static const VkClearValue clearColor = { 0.0f, 0.0f, 0.0f, 1.0f };
void RenderPass::init(Renderer* renderer) void RenderPass::init(VkFormat attachement_format)
{ {
_renderer = renderer;
VkAttachmentDescription colorAttachment{}; VkAttachmentDescription colorAttachment{};
colorAttachment.format = renderer->getSwapChain()._swapChainImageFormat; colorAttachment.format = attachement_format;
colorAttachment.samples = VK_SAMPLE_COUNT_1_BIT; colorAttachment.samples = VK_SAMPLE_COUNT_1_BIT;
colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR; colorAttachment.loadOp = VK_ATTACHMENT_LOAD_OP_CLEAR;
colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE; colorAttachment.storeOp = VK_ATTACHMENT_STORE_OP_STORE;
@@ -50,9 +50,12 @@ namespace mlx
if(vkCreateRenderPass(Render_Core::get().getDevice().get(), &renderPassInfo, nullptr, &_renderPass) != VK_SUCCESS) if(vkCreateRenderPass(Render_Core::get().getDevice().get(), &renderPassInfo, nullptr, &_renderPass) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create render pass"); core::error::report(e_kind::fatal_error, "Vulkan : failed to create render pass");
#ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new render pass");
#endif
} }
void RenderPass::begin() void RenderPass::begin(class CmdBuffer& cmd, class FrameBuffer& fb)
{ {
if(_is_running) if(_is_running)
return; return;
@@ -60,28 +63,29 @@ namespace mlx
VkRenderPassBeginInfo renderPassInfo{}; VkRenderPassBeginInfo renderPassInfo{};
renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO; renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
renderPassInfo.renderPass = _renderPass; renderPassInfo.renderPass = _renderPass;
renderPassInfo.framebuffer = _renderer->getSwapChain()._framebuffers[_renderer->getImageIndex()].get(); renderPassInfo.framebuffer = fb.get();
renderPassInfo.renderArea.offset = { 0, 0 }; renderPassInfo.renderArea.offset = { 0, 0 };
renderPassInfo.renderArea.extent = _renderer->getSwapChain()._swapChainExtent; renderPassInfo.renderArea.extent = { fb.getWidth(), fb.getHeight() };
renderPassInfo.clearValueCount = 1; renderPassInfo.clearValueCount = 1;
renderPassInfo.pClearValues = &clearColor; renderPassInfo.pClearValues = &clearColor;
vkCmdBeginRenderPass(_renderer->getActiveCmdBuffer().get(), &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE); vkCmdBeginRenderPass(cmd.get(), &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);
_is_running = true; _is_running = true;
} }
void RenderPass::end() void RenderPass::end(class CmdBuffer& cmd)
{ {
if(!_is_running) if(!_is_running)
return; return;
vkCmdEndRenderPass(_renderer->getActiveCmdBuffer().get()); vkCmdEndRenderPass(cmd.get());
_is_running = false; _is_running = false;
} }
void RenderPass::destroy() noexcept void RenderPass::destroy() noexcept
{ {
vkDestroyRenderPass(Render_Core::get().getDevice().get(), _renderPass, nullptr); vkDestroyRenderPass(Render_Core::get().getDevice().get(), _renderPass, nullptr);
_renderPass = VK_NULL_HANDLE;
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:22:00 by maldavid #+# #+# */ /* Created: 2022/10/06 18:22:00 by maldavid #+# #+# */
/* Updated: 2022/12/18 20:33:28 by maldavid ### ########.fr */ /* Updated: 2023/11/20 07:24:48 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -20,18 +20,17 @@ namespace mlx
class RenderPass class RenderPass
{ {
public: public:
void init(class Renderer* renderer); void init(VkFormat attachement_format);
void destroy() noexcept; void destroy() noexcept;
void begin(); void begin(class CmdBuffer& cmd, class FrameBuffer& fb);
void end(); void end(class CmdBuffer& cmd);
inline VkRenderPass& operator()() noexcept { return _renderPass; } inline VkRenderPass& operator()() noexcept { return _renderPass; }
inline VkRenderPass& get() noexcept { return _renderPass; } inline VkRenderPass& get() noexcept { return _renderPass; }
private: private:
VkRenderPass _renderPass = VK_NULL_HANDLE; VkRenderPass _renderPass = VK_NULL_HANDLE;
class Renderer* _renderer = nullptr;
bool _is_running = false; bool _is_running = false;
}; };
} }

View File

@@ -1,44 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* vk_imageview.cpp :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:20:49 by maldavid #+# #+# */
/* Updated: 2022/12/18 19:55:03 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#include "vk_swapchain.h"
#include "vk_imageview.h"
#include <renderer/core/render_core.h>
namespace mlx
{
void ImageView::init(SwapChain& swapchain, VkImage& image)
{
VkImageViewCreateInfo createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
createInfo.image = image;
createInfo.viewType = VK_IMAGE_VIEW_TYPE_2D;
createInfo.format = swapchain._swapChainImageFormat;
createInfo.components.r = VK_COMPONENT_SWIZZLE_IDENTITY;
createInfo.components.g = VK_COMPONENT_SWIZZLE_IDENTITY;
createInfo.components.b = VK_COMPONENT_SWIZZLE_IDENTITY;
createInfo.components.a = VK_COMPONENT_SWIZZLE_IDENTITY;
createInfo.subresourceRange.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
createInfo.subresourceRange.baseMipLevel = 0;
createInfo.subresourceRange.levelCount = 1;
createInfo.subresourceRange.baseArrayLayer = 0;
createInfo.subresourceRange.layerCount = 1;
if(vkCreateImageView(Render_Core::get().getDevice().get(), &createInfo, nullptr, &_image) != VK_SUCCESS)
core::error::report(e_kind::fatal_error, "Vulkan : failed to create an image view");
}
void ImageView::destroy() noexcept
{
vkDestroyImageView(Render_Core::get().getDevice().get(), _image, nullptr);
}
}

View File

@@ -1,34 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* vk_imageview.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:20:19 by maldavid #+# #+# */
/* Updated: 2022/12/18 19:54:44 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef __MLX_VK_IMAGE_VIEW__
#define __MLX_VK_IMAGE_VIEW__
#include <volk.h>
namespace mlx
{
class ImageView
{
public:
void init(class SwapChain& swapchain, VkImage& image);
void destroy() noexcept;
inline VkImageView& operator()() noexcept { return _image; }
inline VkImageView& get() noexcept { return _image; }
private:
VkImageView _image = VK_NULL_HANDLE;
};
}
#endif // __MLX_VK_IMAGE_VIEW__

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:22:28 by maldavid #+# #+# */ /* Created: 2022/10/06 18:22:28 by maldavid #+# #+# */
/* Updated: 2023/01/25 11:39:01 by maldavid ### ########.fr */ /* Updated: 2023/11/18 17:15:10 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -18,138 +18,137 @@
namespace mlx namespace mlx
{ {
void SwapChain::init(Renderer* renderer) void SwapChain::init(Renderer* renderer)
{ {
VkDevice device = Render_Core::get().getDevice().get();
_renderer = renderer; _renderer = renderer;
_swapChainSupport = querySwapChainSupport(Render_Core::get().getDevice().getPhysicalDevice());
_swapChainSupport = querySwapChainSupport(Render_Core::get().getDevice().getPhysicalDevice()); VkSurfaceFormatKHR surfaceFormat = renderer->getSurface().chooseSwapSurfaceFormat(_swapChainSupport.formats);
VkPresentModeKHR presentMode = chooseSwapPresentMode(_swapChainSupport.presentModes);
_extent = chooseSwapExtent(_swapChainSupport.capabilities);
VkSurfaceFormatKHR surfaceFormat = renderer->getSurface().chooseSwapSurfaceFormat(_swapChainSupport.formats); uint32_t imageCount = _swapChainSupport.capabilities.minImageCount + 1;
VkPresentModeKHR presentMode = VK_PRESENT_MODE_IMMEDIATE_KHR; // change this to set vsync (if the driver supports it) if(_swapChainSupport.capabilities.maxImageCount > 0 && imageCount > _swapChainSupport.capabilities.maxImageCount)
VkExtent2D extent = chooseSwapExtent(_swapChainSupport.capabilities); imageCount = _swapChainSupport.capabilities.maxImageCount;
uint32_t imageCount = _swapChainSupport.capabilities.minImageCount + 1; Queues::QueueFamilyIndices indices = Render_Core::get().getQueue().findQueueFamilies(Render_Core::get().getDevice().getPhysicalDevice(), renderer->getSurface().get());
if(_swapChainSupport.capabilities.maxImageCount > 0 && imageCount > _swapChainSupport.capabilities.maxImageCount) uint32_t queueFamilyIndices[] = { indices.graphicsFamily.value(), indices.presentFamily.value() };
imageCount = _swapChainSupport.capabilities.maxImageCount;
VkSwapchainCreateInfoKHR createInfo{}; VkSwapchainCreateInfoKHR createInfo{};
createInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR; createInfo.sType = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR;
createInfo.surface = renderer->getSurface().get(); createInfo.surface = renderer->getSurface().get();
createInfo.minImageCount = imageCount;
createInfo.minImageCount = imageCount; createInfo.imageFormat = surfaceFormat.format;
createInfo.imageFormat = surfaceFormat.format; createInfo.imageColorSpace = surfaceFormat.colorSpace;
createInfo.imageColorSpace = surfaceFormat.colorSpace; createInfo.imageExtent = _extent;
createInfo.imageExtent = extent; createInfo.imageArrayLayers = 1;
createInfo.imageArrayLayers = 1; createInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
createInfo.imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT; createInfo.preTransform = _swapChainSupport.capabilities.currentTransform;
createInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR;
Queues::QueueFamilyIndices indices = Render_Core::get().getQueue().findQueueFamilies(Render_Core::get().getDevice().getPhysicalDevice(), renderer->getSurface().get()); createInfo.presentMode = presentMode;
uint32_t queueFamilyIndices[] = {indices.graphicsFamily.value(), indices.presentFamily.value()}; createInfo.clipped = VK_TRUE;
createInfo.oldSwapchain = VK_NULL_HANDLE;
if(indices.graphicsFamily != indices.presentFamily) if(indices.graphicsFamily != indices.presentFamily)
{ {
createInfo.imageSharingMode = VK_SHARING_MODE_CONCURRENT; createInfo.imageSharingMode = VK_SHARING_MODE_CONCURRENT;
createInfo.queueFamilyIndexCount = 2; createInfo.queueFamilyIndexCount = 2;
createInfo.pQueueFamilyIndices = queueFamilyIndices; createInfo.pQueueFamilyIndices = queueFamilyIndices;
} }
else else
createInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE; createInfo.imageSharingMode = VK_SHARING_MODE_EXCLUSIVE;
createInfo.preTransform = _swapChainSupport.capabilities.currentTransform; if(vkCreateSwapchainKHR(device, &createInfo, nullptr, &_swapChain) != VK_SUCCESS)
createInfo.compositeAlpha = VK_COMPOSITE_ALPHA_OPAQUE_BIT_KHR; core::error::report(e_kind::fatal_error, "Vulkan : failed to create the swapchain");
createInfo.presentMode = presentMode;
createInfo.clipped = VK_TRUE;
createInfo.oldSwapchain = VK_NULL_HANDLE; std::vector<VkImage> tmp;
vkGetSwapchainImagesKHR(device, _swapChain, &imageCount, nullptr);
_images.resize(imageCount);
tmp.resize(imageCount);
vkGetSwapchainImagesKHR(device, _swapChain, &imageCount, tmp.data());
VkDevice device = Render_Core::get().getDevice().get(); for(int i = 0; i < imageCount; i++)
{
_images[i].create(tmp[i], surfaceFormat.format, _extent.width, _extent.height);
_images[i].transitionLayout(VK_IMAGE_LAYOUT_PRESENT_SRC_KHR);
_images[i].createImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT);
}
if(vkCreateSwapchainKHR(device, &createInfo, nullptr, &_swapChain) != VK_SUCCESS) _swapChainImageFormat = surfaceFormat.format;
core::error::report(e_kind::fatal_error, "Vulkan : failed to create swapchain"); #ifdef DEBUG
core::error::report(e_kind::message, "Vulkan : created new swapchain");
#endif
}
vkGetSwapchainImagesKHR(device, _swapChain, &imageCount, nullptr); SwapChain::SwapChainSupportDetails SwapChain::querySwapChainSupport(VkPhysicalDevice device)
_swapChainImages.resize(imageCount); {
vkGetSwapchainImagesKHR(device, _swapChain, &imageCount, _swapChainImages.data()); SwapChain::SwapChainSupportDetails details;
VkSurfaceKHR surface = _renderer->getSurface().get();
_swapChainImageFormat = surfaceFormat.format; if(vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface, &details.capabilities) != VK_SUCCESS)
_swapChainExtent = extent; core::error::report(e_kind::fatal_error, "Vulkan : unable to retrieve surface capabilities");
_imageViews.resize(_swapChainImages.size()); uint32_t formatCount = 0;
vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, nullptr);
for(size_t i = 0; i < _swapChainImages.size(); i++) if(formatCount != 0)
_imageViews[i].init(*this, _swapChainImages[i]); {
} details.formats.resize(formatCount);
vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, details.formats.data());
}
void SwapChain::initFB() uint32_t presentModeCount;
{ vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, nullptr);
_framebuffers.resize(_imageViews.size());
for(size_t i = 0; i < _imageViews.size(); i++) if(presentModeCount != 0)
_framebuffers[i].init(*_renderer, _imageViews[i]); {
} details.presentModes.resize(presentModeCount);
vkGetPhysicalDeviceSurfacePresentModesKHR(device, surface, &presentModeCount, details.presentModes.data());
}
SwapChain::SwapChainSupportDetails SwapChain::querySwapChainSupport(VkPhysicalDevice device) return details;
{ }
SwapChain::SwapChainSupportDetails details;
VkSurfaceKHR surface = _renderer->getSurface().get();
vkGetPhysicalDeviceSurfaceCapabilitiesKHR(device, surface, &details.capabilities); VkPresentModeKHR SwapChain::chooseSwapPresentMode([[maybe_unused]] const std::vector<VkPresentModeKHR>& availablePresentModes)
{
// in the future, you may choose to activate vsync or not
return VK_PRESENT_MODE_IMMEDIATE_KHR;
}
uint32_t formatCount = 0; VkExtent2D SwapChain::chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities)
vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, nullptr); {
if(capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max())
return capabilities.currentExtent;
if(formatCount != 0) int width, height;
{ SDL_Vulkan_GetDrawableSize(_renderer->getWindow()->getNativeWindow(), &width, &height);
details.formats.resize(formatCount);
vkGetPhysicalDeviceSurfaceFormatsKHR(device, surface, &formatCount, details.formats.data());
}
return details;
}
VkExtent2D SwapChain::chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities) VkExtent2D actualExtent = { static_cast<uint32_t>(width), static_cast<uint32_t>(height) };
{
if(capabilities.currentExtent.width != std::numeric_limits<uint32_t>::max())
return capabilities.currentExtent;
int width, height; actualExtent.width = std::clamp(actualExtent.width, capabilities.minImageExtent.width, capabilities.maxImageExtent.width);
SDL_Vulkan_GetDrawableSize(_renderer->getWindow()->getNativeWindow(), &width, &height); actualExtent.height = std::clamp(actualExtent.height, capabilities.minImageExtent.height, capabilities.maxImageExtent.height);
VkExtent2D actualExtent = { static_cast<uint32_t>(width), static_cast<uint32_t>(height) }; return actualExtent;
}
actualExtent.width = std::clamp(actualExtent.width, capabilities.minImageExtent.width, capabilities.maxImageExtent.width); void SwapChain::recreate()
actualExtent.height = std::clamp(actualExtent.height, capabilities.minImageExtent.height, capabilities.maxImageExtent.height); {
destroy();
init(_renderer);
}
return actualExtent; void SwapChain::destroy() noexcept
} {
if(_swapChain == VK_NULL_HANDLE)
void SwapChain::recreate() return;
{ vkDeviceWaitIdle(Render_Core::get().getDevice().get());
destroyFB(); vkDestroySwapchainKHR(Render_Core::get().getDevice().get(), _swapChain, nullptr);
destroy(); _swapChain = VK_NULL_HANDLE;
_renderer->getRenderPass().destroy(); for(Image& img : _images)
{
init(_renderer); img.destroyImageView();
_renderer->getRenderPass().init(_renderer); img.destroyCmdPool();
initFB(); }
} }
void SwapChain::destroyFB() noexcept
{
vkDeviceWaitIdle(Render_Core::get().getDevice().get());
for(size_t i = 0; i < _framebuffers.size(); i++)
_framebuffers[i].destroy();
}
void SwapChain::destroy() noexcept
{
vkDeviceWaitIdle(Render_Core::get().getDevice().get());
for(size_t i = 0; i < _imageViews.size(); i++)
_imageViews[i].destroy();
if(_swapChain != VK_NULL_HANDLE)
vkDestroySwapchainKHR(Render_Core::get().getDevice().get(), _swapChain, nullptr);
_swapChain = VK_NULL_HANDLE;
}
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/06 18:23:27 by maldavid #+# #+# */ /* Created: 2022/10/06 18:23:27 by maldavid #+# #+# */
/* Updated: 2022/12/18 22:08:36 by maldavid ### ########.fr */ /* Updated: 2023/11/20 07:25:30 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -15,52 +15,53 @@
#include <vector> #include <vector>
#include <volk.h> #include <volk.h>
#include "vk_imageview.h" #include <renderer/images/vk_image.h>
#include "vk_framebuffer.h"
namespace mlx namespace mlx
{ {
class SwapChain class SwapChain
{ {
friend class FrameBuffer; friend class GraphicPipeline;
friend class ImageView; friend class RenderPass;
friend class GraphicPipeline;
friend class RenderPass;
friend class Renderer; friend class Renderer;
public: public:
struct SwapChainSupportDetails struct SwapChainSupportDetails
{ {
VkSurfaceCapabilitiesKHR capabilities; VkSurfaceCapabilitiesKHR capabilities;
std::vector<VkSurfaceFormatKHR> formats; std::vector<VkSurfaceFormatKHR> formats;
}; std::vector<VkPresentModeKHR> presentModes;
};
void init(class Renderer* renderer); public:
void initFB(); SwapChain() = default;
void destroy() noexcept;
void destroyFB() noexcept;
void recreate(); void init(class Renderer* renderer);
void recreate();
void destroy() noexcept;
SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device); SwapChainSupportDetails querySwapChainSupport(VkPhysicalDevice device);
VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities); VkExtent2D chooseSwapExtent(const VkSurfaceCapabilitiesKHR& capabilities);
VkPresentModeKHR chooseSwapPresentMode([[maybe_unused]] const std::vector<VkPresentModeKHR> &availablePresentModes);
inline SwapChainSupportDetails getSupport() noexcept { return _swapChainSupport; } inline VkSwapchainKHR get() noexcept { return _swapChain; }
inline VkSwapchainKHR& operator()() noexcept { return _swapChain; } inline VkSwapchainKHR operator()() noexcept { return _swapChain; }
inline VkSwapchainKHR& get() noexcept { return _swapChain; } inline size_t getImagesNumber() const noexcept { return _images.size(); }
inline FrameBuffer& getFrameBuffer(int i) { return _framebuffers[i]; } inline Image& getImage(std::size_t i) noexcept { return _images[i]; }
inline size_t getImagesNumber() const noexcept { return _swapChainImages.size(); } inline SwapChainSupportDetails getSupport() noexcept { return _swapChainSupport; }
inline VkExtent2D getExtent() noexcept { return _extent; }
inline VkFormat getImagesFormat() const noexcept { return _swapChainImageFormat; }
private: ~SwapChain() = default;
SwapChainSupportDetails _swapChainSupport;
std::vector<VkImage> _swapChainImages; private:
std::vector<FrameBuffer> _framebuffers; SwapChainSupportDetails _swapChainSupport;
std::vector<ImageView> _imageViews; VkSwapchainKHR _swapChain;
VkSwapchainKHR _swapChain; std::vector<Image> _images;
VkFormat _swapChainImageFormat; VkFormat _swapChainImageFormat;
VkExtent2D _swapChainExtent; VkExtent2D _extent;
class Renderer* _renderer = nullptr; class Renderer* _renderer = nullptr;
}; };
} }
#endif // __MLX_VK_SWAPCHAIN__ #endif // __MLX_VK_SWAPCHAIN__

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/10 11:59:57 by maldavid #+# #+# */ /* Created: 2023/04/10 11:59:57 by maldavid #+# #+# */
/* Updated: 2023/04/19 13:43:43 by maldavid ### ########.fr */ /* Updated: 2023/11/16 13:45:31 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -20,8 +20,13 @@ namespace mlx
void TextData::init(std::string text, std::vector<Vertex> vbo_data, std::vector<uint16_t> ibo_data) void TextData::init(std::string text, std::vector<Vertex> vbo_data, std::vector<uint16_t> ibo_data)
{ {
_text = std::move(text); _text = std::move(text);
_vbo.create(sizeof(Vertex) * vbo_data.size(), vbo_data.data()); #ifdef DEBUG
_ibo.create(sizeof(uint16_t) * ibo_data.size(), ibo_data.data()); _vbo.create(sizeof(Vertex) * vbo_data.size(), vbo_data.data(), _text.c_str());
_ibo.create(sizeof(uint16_t) * ibo_data.size(), ibo_data.data(), _text.c_str());
#else
_vbo.create(sizeof(Vertex) * vbo_data.size(), vbo_data.data(), nullptr);
_ibo.create(sizeof(uint16_t) * ibo_data.size(), ibo_data.data(), nullptr);
#endif
} }
void TextData::bind(Renderer& renderer) noexcept void TextData::bind(Renderer& renderer) noexcept

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/06 16:41:13 by maldavid #+# #+# */ /* Created: 2023/04/06 16:41:13 by maldavid #+# #+# */
/* Updated: 2023/04/19 13:43:49 by maldavid ### ########.fr */ /* Updated: 2023/11/25 10:40:39 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -14,11 +14,17 @@
#include <fstream> #include <fstream>
#include <utils/dogica_ttf.h> #include <utils/dogica_ttf.h>
#include <iostream>
#include <cstdio> #include <cstdio>
#define STB_RECT_PACK_IMPLEMENTATION
#include <stb_rect_pack.h>
#define STB_TRUETYPE_IMPLEMENTATION #define STB_TRUETYPE_IMPLEMENTATION
#include <stb_truetype.h> #include <stb_truetype.h>
constexpr const int RANGE = 1024;
namespace mlx namespace mlx
{ {
TextDrawData::TextDrawData(std::string _text, int _color, int _x, int _y) : TextDrawData::TextDrawData(std::string _text, int _color, int _x, int _y) :
@@ -26,7 +32,7 @@ namespace mlx
text(std::move(_text)) text(std::move(_text))
{} {}
void TextDrawData::init(TextLibrary& library, std::array<stbtt_bakedchar, 96>& cdata) noexcept void TextDrawData::init(TextLibrary& library, std::array<stbtt_packedchar, 96>& cdata) noexcept
{ {
std::vector<Vertex> vertexData; std::vector<Vertex> vertexData;
std::vector<uint16_t> indexData; std::vector<uint16_t> indexData;
@@ -40,7 +46,7 @@ namespace mlx
continue; continue;
stbtt_aligned_quad q; stbtt_aligned_quad q;
stbtt_GetBakedQuad(cdata.data(), 512, 512, c - 32, &stb_x, &stb_y, &q, 1); stbtt_GetPackedQuad(cdata.data(), RANGE, RANGE, c - 32, &stb_x, &stb_y, &q, 1);
std::size_t index = vertexData.size(); std::size_t index = vertexData.size();
@@ -59,25 +65,65 @@ namespace mlx
std::shared_ptr<TextData> text_data = std::make_shared<TextData>(); std::shared_ptr<TextData> text_data = std::make_shared<TextData>();
text_data->init(text, std::move(vertexData), std::move(indexData)); text_data->init(text, std::move(vertexData), std::move(indexData));
id = library.addTextToLibrary(text_data); id = library.addTextToLibrary(text_data);
#ifdef DEBUG
core::error::report(e_kind::message, "Text put : registered new text to render");
#endif
} }
void TextPutPipeline::init(Renderer* renderer) noexcept void TextPutPipeline::init(Renderer* renderer) noexcept
{ {
_renderer = renderer; _renderer = renderer;
uint8_t tmp_bitmap[512 * 512]; uint8_t tmp_bitmap[RANGE * RANGE];
uint8_t vulkan_bitmap[(512 * 512) * 4]; uint8_t vulkan_bitmap[RANGE * RANGE * 4];
stbtt_BakeFontBitmap(dogica_ttf, 0, 6.0f, tmp_bitmap, 512, 512, 32, 96, _cdata.data()); stbtt_pack_context pc;
for(int i = 0, j = 0; i < 512 * 512; i++, j += 4) stbtt_PackBegin(&pc, tmp_bitmap, RANGE, RANGE, RANGE, 1, nullptr);
stbtt_PackFontRange(&pc, dogica_ttf, 0, 6.0, 32, 96, _cdata.data());
stbtt_PackEnd(&pc);
for(int i = 0, j = 0; i < RANGE * RANGE; i++, j += 4)
{ {
vulkan_bitmap[j + 0] = tmp_bitmap[i]; vulkan_bitmap[j + 0] = tmp_bitmap[i];
vulkan_bitmap[j + 1] = tmp_bitmap[i]; vulkan_bitmap[j + 1] = tmp_bitmap[i];
vulkan_bitmap[j + 2] = tmp_bitmap[i]; vulkan_bitmap[j + 2] = tmp_bitmap[i];
vulkan_bitmap[j + 3] = tmp_bitmap[i]; vulkan_bitmap[j + 3] = tmp_bitmap[i];
} }
_atlas.create(vulkan_bitmap, 512, 512, VK_FORMAT_R8G8B8A8_UNORM); _atlas.create(vulkan_bitmap, RANGE, RANGE, VK_FORMAT_R8G8B8A8_UNORM, "__mlx_texts_pipeline_texture_atlas", true);
_atlas.setDescriptor(renderer->getFragDescriptorSet().duplicate()); _atlas.setDescriptor(renderer->getFragDescriptorSet().duplicate());
} }
void TextPutPipeline::loadFont(const std::filesystem::path& filepath, float scale)
{
uint8_t tmp_bitmap[RANGE * RANGE];
uint8_t vulkan_bitmap[RANGE * RANGE * 4];
std::ifstream file(filepath, std::ios::binary);
if(!file.is_open())
{
core::error::report(e_kind::error, "Font load : cannot open font file, %s", filepath.string().c_str());
return;
}
std::ifstream::pos_type fileSize = std::filesystem::file_size(filepath);
file.seekg(0, std::ios::beg);
std::vector<uint8_t> bytes(fileSize);
file.read(reinterpret_cast<char*>(bytes.data()), fileSize);
file.close();
stbtt_pack_context pc;
stbtt_PackBegin(&pc, tmp_bitmap, RANGE, RANGE, RANGE, 1, nullptr);
stbtt_PackFontRange(&pc, bytes.data(), 0, scale, 32, 96, _cdata.data());
stbtt_PackEnd(&pc);
for(int i = 0, j = 0; i < RANGE * RANGE; i++, j += 4)
{
vulkan_bitmap[j + 0] = tmp_bitmap[i];
vulkan_bitmap[j + 1] = tmp_bitmap[i];
vulkan_bitmap[j + 2] = tmp_bitmap[i];
vulkan_bitmap[j + 3] = tmp_bitmap[i];
}
destroy();
_atlas.create(vulkan_bitmap, RANGE, RANGE, VK_FORMAT_R8G8B8A8_UNORM, "__mlx_texts_pipeline_texture_atlas", true);
_atlas.setDescriptor(_renderer->getFragDescriptorSet().duplicate());
}
void TextPutPipeline::put(int x, int y, int color, std::string str) void TextPutPipeline::put(int x, int y, int color, std::string str)
{ {
auto res = _drawlist.emplace(std::move(str), color, x, y); auto res = _drawlist.emplace(std::move(str), color, x, y);
@@ -99,6 +145,7 @@ namespace mlx
void TextPutPipeline::destroy() noexcept void TextPutPipeline::destroy() noexcept
{ {
_library.clearLibrary(); _library.clearLibrary();
_drawlist.clear();
_atlas.destroy(); _atlas.destroy();
} }
} }

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/06 16:24:11 by maldavid #+# #+# */ /* Created: 2023/04/06 16:24:11 by maldavid #+# #+# */
/* Updated: 2023/04/12 13:25:33 by maldavid ### ########.fr */ /* Updated: 2023/11/24 19:08:04 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -32,7 +32,7 @@ namespace mlx
std::string text; std::string text;
TextDrawData(std::string text, int _color, int _x, int _y); TextDrawData(std::string text, int _color, int _x, int _y);
void init(TextLibrary& library, std::array<stbtt_bakedchar, 96>& cdata) noexcept; void init(TextLibrary& library, std::array<stbtt_packedchar, 96>& cdata) noexcept;
bool operator==(const TextDrawData& rhs) const { return text == rhs.text && x == rhs.x && y == rhs.y && color == rhs.color; } bool operator==(const TextDrawData& rhs) const { return text == rhs.text && x == rhs.x && y == rhs.y && color == rhs.color; }
}; };
} }
@@ -60,13 +60,14 @@ namespace mlx
void put(int x, int y, int color, std::string str); void put(int x, int y, int color, std::string str);
inline VkDescriptorSet getDescriptorSet() noexcept { return _atlas.getSet(); } inline VkDescriptorSet getDescriptorSet() noexcept { return _atlas.getSet(); }
inline void clear() { _drawlist.clear(); } inline void clear() { _drawlist.clear(); }
void loadFont(const std::filesystem::path& filepath, float scale);
void render(); void render();
void destroy() noexcept; void destroy() noexcept;
~TextPutPipeline() = default; ~TextPutPipeline() = default;
private: private:
std::array<stbtt_bakedchar, 96> _cdata; std::array<stbtt_packedchar, 96> _cdata;
TextureAtlas _atlas; TextureAtlas _atlas;
TextLibrary _library; TextLibrary _library;
std::unordered_set<TextDrawData> _drawlist; std::unordered_set<TextDrawData> _drawlist;

File diff suppressed because it is too large Load Diff

View File

@@ -1,27 +0,0 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* endian.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/04/06 15:33:15 by maldavid #+# #+# */
/* Updated: 2023/04/06 15:35:25 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef __MLX_ENDIAN__
#define __MLX_ENDIAN__
namespace mlx
{
inline bool isSystemBigEndian()
{
const int value = 0x01;
const void* address = static_cast<const void*>(&value);
const unsigned char* least_significant_address = static_cast<const unsigned char*>(address);
return (*least_significant_address != 0x01);
}
}
#endif

525
src/utils/icon_mlx.h git.filemode.normal_file
View File

@@ -0,0 +1,525 @@
/* ************************************************************************** */
/* */
/* ::: :::::::: */
/* icon_mlx.h :+: :+: :+: */
/* +:+ +:+ +:+ */
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2023/11/25 11:23:16 by maldavid #+# #+# */
/* Updated: 2023/11/25 11:55:51 by maldavid ### ########.fr */
/* */
/* ************************************************************************** */
#ifndef __ICON_MLX__
#define __ICON_MLX__
#include <cstdint>
constexpr const int logo_mlx_height = 125;
constexpr const int logo_mlx_width = 125;
constexpr const int logo_mlx_size = logo_mlx_height * logo_mlx_width * 4;
inline static uint8_t logo_mlx[logo_mlx_size] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4,
0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4,
0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4,
0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0xe4, 0xe4, 0xe4, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b,
0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b,
0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b,
0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37,
0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37,
0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37,
0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x37, 0x37, 0x37, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00,
0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00,
0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00,
0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
#endif

BIN
test/font.ttf git.filemode.normal_file

Binary file not shown.

View File

@@ -6,7 +6,7 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/04 17:55:21 by maldavid #+# #+# */ /* Created: 2022/10/04 17:55:21 by maldavid #+# #+# */
/* Updated: 2023/08/28 10:52:33 by maldavid ### ########.fr */ /* Updated: 2023/11/25 11:57:57 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -19,6 +19,7 @@ typedef struct s_mlx
void *mlx; void *mlx;
void *win; void *win;
void *logo; void *logo;
void *img;
} t_mlx; } t_mlx;
int update(t_mlx *mlx) int update(t_mlx *mlx)
@@ -28,6 +29,7 @@ int update(t_mlx *mlx)
int k; int k;
mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo, 100, 100); mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo, 100, 100);
mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->img, 150, 60);
mlx_string_put(mlx->mlx, mlx->win, 20, 50, 0xFFFFFFFF, "that's a text"); mlx_string_put(mlx->mlx, mlx->win, 20, 50, 0xFFFFFFFF, "that's a text");
j = 0; j = 0;
k = 0; k = 0;
@@ -41,7 +43,10 @@ int update(t_mlx *mlx)
} }
i++; i++;
if (i == 5000) if (i == 5000)
{
mlx_clear_window(mlx->mlx, mlx->win); mlx_clear_window(mlx->mlx, mlx->win);
mlx_set_font_scale(mlx->mlx, mlx->win, "font.ttf", 16.f);
}
return (0); return (0);
} }
@@ -60,7 +65,7 @@ void *create_image(t_mlx *mlx)
pixel[0] = i[0]; pixel[0] = i[0];
pixel[1] = i[1]; pixel[1] = i[1];
pixel[2] = i[2]; pixel[2] = i[2];
pixel[3] = 0xFF; pixel[3] = 0x99;
mlx_set_image_pixel(mlx->mlx, img, i[1], i[2], *((int *)pixel)); mlx_set_image_pixel(mlx->mlx, img, i[1], i[2], *((int *)pixel));
} }
i[0] += 4; i[0] += 4;
@@ -102,13 +107,12 @@ int main(void)
mlx.logo = mlx_png_file_to_image(mlx.mlx, "42_logo.png", &w, &h); mlx.logo = mlx_png_file_to_image(mlx.mlx, "42_logo.png", &w, &h);
mlx_pixel_put(mlx.mlx, mlx.win, 200, 10, 0xFFFF00FF); mlx_pixel_put(mlx.mlx, mlx.win, 200, 10, 0xFFFF00FF);
mlx_put_image_to_window(mlx.mlx, mlx.win, mlx.logo, 200, 200); mlx_put_image_to_window(mlx.mlx, mlx.win, mlx.logo, 200, 200);
img = create_image(&mlx); mlx.img = create_image(&mlx);
mlx_string_put(mlx.mlx, mlx.win, 20, 20, 0xFFFF2000, \ mlx_string_put(mlx.mlx, mlx.win, 20, 20, 0xFFFF2000, \
"that text will disappear"); "that text will disappear");
mlx_put_image_to_window(mlx.mlx, mlx.win, img, 200, 20);
mlx_loop_hook(mlx.mlx, update, &mlx); mlx_loop_hook(mlx.mlx, update, &mlx);
mlx_loop(mlx.mlx); mlx_loop(mlx.mlx);
mlx_destroy_image(mlx.mlx, img); mlx_destroy_image(mlx.mlx, mlx.img);
mlx_destroy_image(mlx.mlx, mlx.logo); mlx_destroy_image(mlx.mlx, mlx.logo);
mlx_destroy_window(mlx.mlx, mlx.win); mlx_destroy_window(mlx.mlx, mlx.win);
mlx_destroy_display(mlx.mlx); mlx_destroy_display(mlx.mlx);

623
third_party/stb_rect_pack.h vendored git.filemode.normal_file
View File

@@ -0,0 +1,623 @@
// stb_rect_pack.h - v1.01 - public domain - rectangle packing
// Sean Barrett 2014
//
// Useful for e.g. packing rectangular textures into an atlas.
// Does not do rotation.
//
// Before #including,
//
// #define STB_RECT_PACK_IMPLEMENTATION
//
// in the file that you want to have the implementation.
//
// Not necessarily the awesomest packing method, but better than
// the totally naive one in stb_truetype (which is primarily what
// this is meant to replace).
//
// Has only had a few tests run, may have issues.
//
// More docs to come.
//
// No memory allocations; uses qsort() and assert() from stdlib.
// Can override those by defining STBRP_SORT and STBRP_ASSERT.
//
// This library currently uses the Skyline Bottom-Left algorithm.
//
// Please note: better rectangle packers are welcome! Please
// implement them to the same API, but with a different init
// function.
//
// Credits
//
// Library
// Sean Barrett
// Minor features
// Martins Mozeiko
// github:IntellectualKitty
//
// Bugfixes / warning fixes
// Jeremy Jaussaud
// Fabian Giesen
//
// Version history:
//
// 1.01 (2021-07-11) always use large rect mode, expose STBRP__MAXVAL in public section
// 1.00 (2019-02-25) avoid small space waste; gracefully fail too-wide rectangles
// 0.99 (2019-02-07) warning fixes
// 0.11 (2017-03-03) return packing success/fail result
// 0.10 (2016-10-25) remove cast-away-const to avoid warnings
// 0.09 (2016-08-27) fix compiler warnings
// 0.08 (2015-09-13) really fix bug with empty rects (w=0 or h=0)
// 0.07 (2015-09-13) fix bug with empty rects (w=0 or h=0)
// 0.06 (2015-04-15) added STBRP_SORT to allow replacing qsort
// 0.05: added STBRP_ASSERT to allow replacing assert
// 0.04: fixed minor bug in STBRP_LARGE_RECTS support
// 0.01: initial release
//
// LICENSE
//
// See end of file for license information.
//////////////////////////////////////////////////////////////////////////////
//
// INCLUDE SECTION
//
#ifndef STB_INCLUDE_STB_RECT_PACK_H
#define STB_INCLUDE_STB_RECT_PACK_H
#define STB_RECT_PACK_VERSION 1
#ifdef STBRP_STATIC
#define STBRP_DEF static
#else
#define STBRP_DEF extern
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef struct stbrp_context stbrp_context;
typedef struct stbrp_node stbrp_node;
typedef struct stbrp_rect stbrp_rect;
typedef int stbrp_coord;
#define STBRP__MAXVAL 0x7fffffff
// Mostly for internal use, but this is the maximum supported coordinate value.
STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects);
// Assign packed locations to rectangles. The rectangles are of type
// 'stbrp_rect' defined below, stored in the array 'rects', and there
// are 'num_rects' many of them.
//
// Rectangles which are successfully packed have the 'was_packed' flag
// set to a non-zero value and 'x' and 'y' store the minimum location
// on each axis (i.e. bottom-left in cartesian coordinates, top-left
// if you imagine y increasing downwards). Rectangles which do not fit
// have the 'was_packed' flag set to 0.
//
// You should not try to access the 'rects' array from another thread
// while this function is running, as the function temporarily reorders
// the array while it executes.
//
// To pack into another rectangle, you need to call stbrp_init_target
// again. To continue packing into the same rectangle, you can call
// this function again. Calling this multiple times with multiple rect
// arrays will probably produce worse packing results than calling it
// a single time with the full rectangle array, but the option is
// available.
//
// The function returns 1 if all of the rectangles were successfully
// packed and 0 otherwise.
struct stbrp_rect
{
// reserved for your use:
int id;
// input:
stbrp_coord w, h;
// output:
stbrp_coord x, y;
int was_packed; // non-zero if valid packing
}; // 16 bytes, nominally
STBRP_DEF void stbrp_init_target (stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes);
// Initialize a rectangle packer to:
// pack a rectangle that is 'width' by 'height' in dimensions
// using temporary storage provided by the array 'nodes', which is 'num_nodes' long
//
// You must call this function every time you start packing into a new target.
//
// There is no "shutdown" function. The 'nodes' memory must stay valid for
// the following stbrp_pack_rects() call (or calls), but can be freed after
// the call (or calls) finish.
//
// Note: to guarantee best results, either:
// 1. make sure 'num_nodes' >= 'width'
// or 2. call stbrp_allow_out_of_mem() defined below with 'allow_out_of_mem = 1'
//
// If you don't do either of the above things, widths will be quantized to multiples
// of small integers to guarantee the algorithm doesn't run out of temporary storage.
//
// If you do #2, then the non-quantized algorithm will be used, but the algorithm
// may run out of temporary storage and be unable to pack some rectangles.
STBRP_DEF void stbrp_setup_allow_out_of_mem (stbrp_context *context, int allow_out_of_mem);
// Optionally call this function after init but before doing any packing to
// change the handling of the out-of-temp-memory scenario, described above.
// If you call init again, this will be reset to the default (false).
STBRP_DEF void stbrp_setup_heuristic (stbrp_context *context, int heuristic);
// Optionally select which packing heuristic the library should use. Different
// heuristics will produce better/worse results for different data sets.
// If you call init again, this will be reset to the default.
enum
{
STBRP_HEURISTIC_Skyline_default=0,
STBRP_HEURISTIC_Skyline_BL_sortHeight = STBRP_HEURISTIC_Skyline_default,
STBRP_HEURISTIC_Skyline_BF_sortHeight
};
//////////////////////////////////////////////////////////////////////////////
//
// the details of the following structures don't matter to you, but they must
// be visible so you can handle the memory allocations for them
struct stbrp_node
{
stbrp_coord x,y;
stbrp_node *next;
};
struct stbrp_context
{
int width;
int height;
int align;
int init_mode;
int heuristic;
int num_nodes;
stbrp_node *active_head;
stbrp_node *free_head;
stbrp_node extra[2]; // we allocate two extra nodes so optimal user-node-count is 'width' not 'width+2'
};
#ifdef __cplusplus
}
#endif
#endif
//////////////////////////////////////////////////////////////////////////////
//
// IMPLEMENTATION SECTION
//
#ifdef STB_RECT_PACK_IMPLEMENTATION
#ifndef STBRP_SORT
#include <stdlib.h>
#define STBRP_SORT qsort
#endif
#ifndef STBRP_ASSERT
#include <assert.h>
#define STBRP_ASSERT assert
#endif
#ifdef _MSC_VER
#define STBRP__NOTUSED(v) (void)(v)
#define STBRP__CDECL __cdecl
#else
#define STBRP__NOTUSED(v) (void)sizeof(v)
#define STBRP__CDECL
#endif
enum
{
STBRP__INIT_skyline = 1
};
STBRP_DEF void stbrp_setup_heuristic(stbrp_context *context, int heuristic)
{
switch (context->init_mode) {
case STBRP__INIT_skyline:
STBRP_ASSERT(heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight || heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight);
context->heuristic = heuristic;
break;
default:
STBRP_ASSERT(0);
}
}
STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_out_of_mem)
{
if (allow_out_of_mem)
// if it's ok to run out of memory, then don't bother aligning them;
// this gives better packing, but may fail due to OOM (even though
// the rectangles easily fit). @TODO a smarter approach would be to only
// quantize once we've hit OOM, then we could get rid of this parameter.
context->align = 1;
else {
// if it's not ok to run out of memory, then quantize the widths
// so that num_nodes is always enough nodes.
//
// I.e. num_nodes * align >= width
// align >= width / num_nodes
// align = ceil(width/num_nodes)
context->align = (context->width + context->num_nodes-1) / context->num_nodes;
}
}
STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes)
{
int i;
for (i=0; i < num_nodes-1; ++i)
nodes[i].next = &nodes[i+1];
nodes[i].next = NULL;
context->init_mode = STBRP__INIT_skyline;
context->heuristic = STBRP_HEURISTIC_Skyline_default;
context->free_head = &nodes[0];
context->active_head = &context->extra[0];
context->width = width;
context->height = height;
context->num_nodes = num_nodes;
stbrp_setup_allow_out_of_mem(context, 0);
// node 0 is the full width, node 1 is the sentinel (lets us not store width explicitly)
context->extra[0].x = 0;
context->extra[0].y = 0;
context->extra[0].next = &context->extra[1];
context->extra[1].x = (stbrp_coord) width;
context->extra[1].y = (1<<30);
context->extra[1].next = NULL;
}
// find minimum y position if it starts at x1
static int stbrp__skyline_find_min_y(stbrp_context *c, stbrp_node *first, int x0, int width, int *pwaste)
{
stbrp_node *node = first;
int x1 = x0 + width;
int min_y, visited_width, waste_area;
STBRP__NOTUSED(c);
STBRP_ASSERT(first->x <= x0);
#if 0
// skip in case we're past the node
while (node->next->x <= x0)
++node;
#else
STBRP_ASSERT(node->next->x > x0); // we ended up handling this in the caller for efficiency
#endif
STBRP_ASSERT(node->x <= x0);
min_y = 0;
waste_area = 0;
visited_width = 0;
while (node->x < x1) {
if (node->y > min_y) {
// raise min_y higher.
// we've accounted for all waste up to min_y,
// but we'll now add more waste for everything we've visted
waste_area += visited_width * (node->y - min_y);
min_y = node->y;
// the first time through, visited_width might be reduced
if (node->x < x0)
visited_width += node->next->x - x0;
else
visited_width += node->next->x - node->x;
} else {
// add waste area
int under_width = node->next->x - node->x;
if (under_width + visited_width > width)
under_width = width - visited_width;
waste_area += under_width * (min_y - node->y);
visited_width += under_width;
}
node = node->next;
}
*pwaste = waste_area;
return min_y;
}
typedef struct
{
int x,y;
stbrp_node **prev_link;
} stbrp__findresult;
static stbrp__findresult stbrp__skyline_find_best_pos(stbrp_context *c, int width, int height)
{
int best_waste = (1<<30), best_x, best_y = (1 << 30);
stbrp__findresult fr;
stbrp_node **prev, *node, *tail, **best = NULL;
// align to multiple of c->align
width = (width + c->align - 1);
width -= width % c->align;
STBRP_ASSERT(width % c->align == 0);
// if it can't possibly fit, bail immediately
if (width > c->width || height > c->height) {
fr.prev_link = NULL;
fr.x = fr.y = 0;
return fr;
}
node = c->active_head;
prev = &c->active_head;
while (node->x + width <= c->width) {
int y,waste;
y = stbrp__skyline_find_min_y(c, node, node->x, width, &waste);
if (c->heuristic == STBRP_HEURISTIC_Skyline_BL_sortHeight) { // actually just want to test BL
// bottom left
if (y < best_y) {
best_y = y;
best = prev;
}
} else {
// best-fit
if (y + height <= c->height) {
// can only use it if it first vertically
if (y < best_y || (y == best_y && waste < best_waste)) {
best_y = y;
best_waste = waste;
best = prev;
}
}
}
prev = &node->next;
node = node->next;
}
best_x = (best == NULL) ? 0 : (*best)->x;
// if doing best-fit (BF), we also have to try aligning right edge to each node position
//
// e.g, if fitting
//
// ____________________
// |____________________|
//
// into
//
// | |
// | ____________|
// |____________|
//
// then right-aligned reduces waste, but bottom-left BL is always chooses left-aligned
//
// This makes BF take about 2x the time
if (c->heuristic == STBRP_HEURISTIC_Skyline_BF_sortHeight) {
tail = c->active_head;
node = c->active_head;
prev = &c->active_head;
// find first node that's admissible
while (tail->x < width)
tail = tail->next;
while (tail) {
int xpos = tail->x - width;
int y,waste;
STBRP_ASSERT(xpos >= 0);
// find the left position that matches this
while (node->next->x <= xpos) {
prev = &node->next;
node = node->next;
}
STBRP_ASSERT(node->next->x > xpos && node->x <= xpos);
y = stbrp__skyline_find_min_y(c, node, xpos, width, &waste);
if (y + height <= c->height) {
if (y <= best_y) {
if (y < best_y || waste < best_waste || (waste==best_waste && xpos < best_x)) {
best_x = xpos;
STBRP_ASSERT(y <= best_y);
best_y = y;
best_waste = waste;
best = prev;
}
}
}
tail = tail->next;
}
}
fr.prev_link = best;
fr.x = best_x;
fr.y = best_y;
return fr;
}
static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, int width, int height)
{
// find best position according to heuristic
stbrp__findresult res = stbrp__skyline_find_best_pos(context, width, height);
stbrp_node *node, *cur;
// bail if:
// 1. it failed
// 2. the best node doesn't fit (we don't always check this)
// 3. we're out of memory
if (res.prev_link == NULL || res.y + height > context->height || context->free_head == NULL) {
res.prev_link = NULL;
return res;
}
// on success, create new node
node = context->free_head;
node->x = (stbrp_coord) res.x;
node->y = (stbrp_coord) (res.y + height);
context->free_head = node->next;
// insert the new node into the right starting point, and
// let 'cur' point to the remaining nodes needing to be
// stiched back in
cur = *res.prev_link;
if (cur->x < res.x) {
// preserve the existing one, so start testing with the next one
stbrp_node *next = cur->next;
cur->next = node;
cur = next;
} else {
*res.prev_link = node;
}
// from here, traverse cur and free the nodes, until we get to one
// that shouldn't be freed
while (cur->next && cur->next->x <= res.x + width) {
stbrp_node *next = cur->next;
// move the current node to the free list
cur->next = context->free_head;
context->free_head = cur;
cur = next;
}
// stitch the list back in
node->next = cur;
if (cur->x < res.x + width)
cur->x = (stbrp_coord) (res.x + width);
#ifdef _DEBUG
cur = context->active_head;
while (cur->x < context->width) {
STBRP_ASSERT(cur->x < cur->next->x);
cur = cur->next;
}
STBRP_ASSERT(cur->next == NULL);
{
int count=0;
cur = context->active_head;
while (cur) {
cur = cur->next;
++count;
}
cur = context->free_head;
while (cur) {
cur = cur->next;
++count;
}
STBRP_ASSERT(count == context->num_nodes+2);
}
#endif
return res;
}
static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
{
const stbrp_rect *p = (const stbrp_rect *) a;
const stbrp_rect *q = (const stbrp_rect *) b;
if (p->h > q->h)
return -1;
if (p->h < q->h)
return 1;
return (p->w > q->w) ? -1 : (p->w < q->w);
}
static int STBRP__CDECL rect_original_order(const void *a, const void *b)
{
const stbrp_rect *p = (const stbrp_rect *) a;
const stbrp_rect *q = (const stbrp_rect *) b;
return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
}
STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects)
{
int i, all_rects_packed = 1;
// we use the 'was_packed' field internally to allow sorting/unsorting
for (i=0; i < num_rects; ++i) {
rects[i].was_packed = i;
}
// sort according to heuristic
STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_height_compare);
for (i=0; i < num_rects; ++i) {
if (rects[i].w == 0 || rects[i].h == 0) {
rects[i].x = rects[i].y = 0; // empty rect needs no space
} else {
stbrp__findresult fr = stbrp__skyline_pack_rectangle(context, rects[i].w, rects[i].h);
if (fr.prev_link) {
rects[i].x = (stbrp_coord) fr.x;
rects[i].y = (stbrp_coord) fr.y;
} else {
rects[i].x = rects[i].y = STBRP__MAXVAL;
}
}
}
// unsort
STBRP_SORT(rects, num_rects, sizeof(rects[0]), rect_original_order);
// set was_packed flags and all_rects_packed status
for (i=0; i < num_rects; ++i) {
rects[i].was_packed = !(rects[i].x == STBRP__MAXVAL && rects[i].y == STBRP__MAXVAL);
if (!rects[i].was_packed)
all_rects_packed = 0;
}
// return the all_rects_packed status
return all_rects_packed;
}
#endif
/*
------------------------------------------------------------------------------
This software is available under 2 licenses -- choose whichever you prefer.
------------------------------------------------------------------------------
ALTERNATIVE A - MIT License
Copyright (c) 2017 Sean Barrett
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
of the Software, and to permit persons to whom the Software is furnished to do
so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
------------------------------------------------------------------------------
ALTERNATIVE B - Public Domain (www.unlicense.org)
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or distribute this
software, either in source code form or as a compiled binary, for any purpose,
commercial or non-commercial, and by any means.
In jurisdictions that recognize copyright laws, the author or authors of this
software dedicate any and all copyright interest in the software to the public
domain. We make this dedication for the benefit of the public at large and to
the detriment of our heirs and successors. We intend this dedication to be an
overt act of relinquishment in perpetuity of all present and future rights to
this software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------------------------------------------
*/

19558
third_party/vma.h vendored git.filemode.normal_file

File diff suppressed because it is too large Load Diff