diff --git a/CMake/macros.cmake b/CMake/macros.cmake index 145e344509e..df8e7515e67 100644 --- a/CMake/macros.cmake +++ b/CMake/macros.cmake @@ -43,9 +43,9 @@ MACRO(SETUP_LIBDIRS) CMAKE_POLICY(SET CMP0003 NEW) endif(COMMAND cmake_policy) LINK_DIRECTORIES(${PYTHON_LIBPATH} ${SDL_LIBPATH} ${JPEG_LIBPATH} ${PNG_LIBPATH} ${ZLIB_LIBPATH} ${ICONV_LIBPATH} ${OPENEXR_LIBPATH} ${QUICKTIME_LIBPATH} ${FFMPEG_LIBPATH}) + LINK_DIRECTORIES(${FREETYPE_LIBPATH}) IF(WITH_INTERNATIONAL) LINK_DIRECTORIES(${GETTEXT_LIBPATH}) - LINK_DIRECTORIES(${FREETYPE_LIBPATH}) ENDIF(WITH_INTERNATIONAL) IF(WITH_OPENAL) LINK_DIRECTORIES(${OPENAL_LIBPATH}) @@ -62,6 +62,7 @@ MACRO(SETUP_LIBLINKS TARGET_LINK_LIBRARIES(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${PYTHON_LIB} ${PYTHON_LINKFLAGS} ${JPEG_LIB} ${PNG_LIB} ${ZLIB_LIB} ${SDL_LIB} ${LLIBS}) TARGET_LINK_LIBRARIES(${target} ${OPENGL_gl_LIBRARY} ${OPENGL_glu_LIBRARY} ${PYTHON_LINKFLAGS} ${JPEG_LIB} ${PNG_LIB} ${ZLIB_LIB} ${SDL_LIB} ${LLIBS}) + TARGET_LINK_LIBRARIES(${target} ${FREETYPE_LIB}) # since we are using the local libs for python when compiling msvc projects, we need to add _d when compiling debug versions @@ -78,7 +79,6 @@ MACRO(SETUP_LIBLINKS ENDIF(WIN32) IF(WITH_INTERNATIONAL) - TARGET_LINK_LIBRARIES(${target} ${FREETYPE_LIB}) TARGET_LINK_LIBRARIES(${target} ${GETTEXT_LIB}) ENDIF(WITH_INTERNATIONAL) IF(WITH_OPENAL) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d11ea02aa4..f2bf65dfb57 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -436,10 +436,6 @@ ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") #----------------------------------------------------------------------------- # Common. -SET(FTGL ${CMAKE_SOURCE_DIR}/extern/bFTGL) -SET(FTGL_INC ${FTGL}/include) -SET(FTGL_LIB extern_ftgl) - set(OPENJPEG ${CMAKE_SOURCE_DIR}/extern/libopenjpeg) set(OPENJPEG_INC ${OPENJPEG}) set(OPENJPEG_LIb extern_libopenjpeg) diff --git a/SConstruct b/SConstruct index 63bc4cd1625..f7986ec8789 100644 --- a/SConstruct +++ b/SConstruct @@ -281,7 +281,6 @@ if 'blenderlite' in B.targets: target_env_defs['WITH_BF_QUICKTIME'] = False target_env_defs['WITH_BF_YAFRAY'] = False target_env_defs['WITH_BF_REDCODE'] = False - target_env_defs['WITH_BF_FTGL'] = False target_env_defs['WITH_BF_DDS'] = False target_env_defs['WITH_BF_ZLIB'] = False target_env_defs['WITH_BF_SDL'] = False diff --git a/blenderplayer/CMakeLists.txt b/blenderplayer/CMakeLists.txt index b9ac3c7a8c6..5b13a5f4521 100644 --- a/blenderplayer/CMakeLists.txt +++ b/blenderplayer/CMakeLists.txt @@ -100,14 +100,11 @@ IF(UNIX) extern_bullet bf_guardedalloc bf_memutil - bf_bmfont bf_blenlib bf_cineon bf_openexr extern_libopenjpeg bf_dds - bf_ftfont - extern_ftgl bf_readblenfile blenkernel_blc bf_quicktime diff --git a/config/darwin-config.py b/config/darwin-config.py index 8ac83ce4a0d..78a8c71b7dd 100644 --- a/config/darwin-config.py +++ b/config/darwin-config.py @@ -138,11 +138,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include' BF_GETTEXT_LIB = 'intl' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' -WITH_BF_FTGL = True -BF_FTGL = '#extern/bFTGL' -BF_FTGL_INC = '${BF_FTGL}/include' -BF_FTGL_LIB = 'extern_ftgl' - WITH_BF_GAMEENGINE=True WITH_BF_PLAYER=True diff --git a/config/irix6-config.py b/config/irix6-config.py index 711d16e623c..1ef271b5074 100644 --- a/config/irix6-config.py +++ b/config/irix6-config.py @@ -77,11 +77,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include' BF_GETTEXT_LIB = 'gettextpo intl' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' -WITH_BF_FTGL = 'true' -BF_FTGL = '#extern/bFTGL' -BF_FTGL_INC = '${BF_FTGL}/include' -BF_FTGL_LIB = 'extern_ftgl' - WITH_BF_GAMEENGINE='false' WITH_BF_ODE = 'false' diff --git a/config/linux2-config.py b/config/linux2-config.py index d7c09258152..eb93d8084f1 100644 --- a/config/linux2-config.py +++ b/config/linux2-config.py @@ -71,11 +71,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include' BF_GETTEXT_LIB = 'gettextlib' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' -WITH_BF_FTGL = True -BF_FTGL = '#extern/bFTGL' -BF_FTGL_INC = '${BF_FTGL}/include' -BF_FTGL_LIB = 'extern_ftgl' - WITH_BF_GAMEENGINE=False WITH_BF_ODE = False diff --git a/config/linuxcross-config.py b/config/linuxcross-config.py index 4214ca52aac..4b17224eacc 100644 --- a/config/linuxcross-config.py +++ b/config/linuxcross-config.py @@ -74,11 +74,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include' BF_GETTEXT_LIB = 'gnu_gettext' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' -WITH_BF_FTGL = True -BF_FTGL = LIBDIR + '/ftgl' -BF_FTGL_INC = '${BF_FTGL}/include' -BF_FTGL_LIB = 'extern_ftgl' - WITH_BF_GAMEENGINE = False WITH_BF_ODE = True diff --git a/config/openbsd3-config.py b/config/openbsd3-config.py index 3a36f8df663..6a7518a7928 100644 --- a/config/openbsd3-config.py +++ b/config/openbsd3-config.py @@ -59,11 +59,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include' BF_GETTEXT_LIB = 'intl iconv' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' -WITH_BF_FTGL = True -BF_FTGL = '#extern/bFTGL' -BF_FTGL_INC = '${BF_FTGL}/include' -BF_FTGL_LIB = 'extern_ftgl' - WITH_BF_GAMEENGINE=False WITH_BF_ODE = False diff --git a/config/sunos5-config.py b/config/sunos5-config.py index 6fa9529e1cd..25f200fe346 100644 --- a/config/sunos5-config.py +++ b/config/sunos5-config.py @@ -67,11 +67,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include' BF_GETTEXT_LIB = 'gettextlib' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' -WITH_BF_FTGL = True -BF_FTGL = '#extern/bFTGL' -BF_FTGL_INC = '${BF_FTGL}/include' -BF_FTGL_LIB = 'extern_ftgl' - WITH_BF_GAMEENGINE=False WITH_BF_ODE = False diff --git a/config/win32-mingw-config.py b/config/win32-mingw-config.py index 80082002b21..a579d21a544 100644 --- a/config/win32-mingw-config.py +++ b/config/win32-mingw-config.py @@ -75,11 +75,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include' BF_GETTEXT_LIB = 'gnu_gettext' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' -WITH_BF_FTGL = True -BF_FTGL = LIBDIR + '/ftgl' -BF_FTGL_INC = '${BF_FTGL}/include' -BF_FTGL_LIB = 'extern_ftgl' - WITH_BF_GAMEENGINE = False WITH_BF_ODE = True diff --git a/config/win32-vc-config.py b/config/win32-vc-config.py index b5ad19890e1..b94a9c4effe 100644 --- a/config/win32-vc-config.py +++ b/config/win32-vc-config.py @@ -87,11 +87,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include' BF_GETTEXT_LIB = 'gnu_gettext' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' -WITH_BF_FTGL = True -BF_FTGL = LIBDIR + '/ftgl' -BF_FTGL_INC = '${BF_FTGL}/include' -BF_FTGL_LIB = 'extern_ftgl' - WITH_BF_GAMEENGINE = True WITH_BF_PLAYER = True diff --git a/config/win64-vc-config.py b/config/win64-vc-config.py index 62440baae56..945efecdc3c 100644 --- a/config/win64-vc-config.py +++ b/config/win64-vc-config.py @@ -90,11 +90,6 @@ BF_GETTEXT_INC = '${BF_GETTEXT}/include' BF_GETTEXT_LIB = 'gettext' BF_GETTEXT_LIBPATH = '${BF_GETTEXT}/lib' -WITH_BF_FTGL = False -BF_FTGL = LIBDIR + '/ftgl' -BF_FTGL_INC = '${BF_FTGL}/include' -BF_FTGL_LIB = 'extern_ftgl' - WITH_BF_GAMEENGINE = True WITH_BF_PLAYER = False diff --git a/extern/CMakeLists.txt b/extern/CMakeLists.txt index b81efb52de9..45778e235cd 100644 --- a/extern/CMakeLists.txt +++ b/extern/CMakeLists.txt @@ -32,14 +32,6 @@ IF(WITH_BULLET) SUBDIRS(bullet2) ENDIF(WITH_BULLET) -IF(WITH_INTERNATIONAL) - SUBDIRS(bFTGL) -ENDIF(WITH_INTERNATIONAL) - -IF(WITH_VERSE) - SUBDIRS(verse) -ENDIF(WITH_VERSE) - IF(CMAKE_SYSTEM_NAME MATCHES "Linux") SUBDIRS(binreloc) ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") diff --git a/extern/Makefile b/extern/Makefile index 38bec4b73dd..582d158b66f 100644 --- a/extern/Makefile +++ b/extern/Makefile @@ -32,10 +32,6 @@ SOURCEDIR = extern DIR = $(OCGDIR)/extern DIRS = qhull/src solid glew/src -ifeq ($(WITH_FREETYPE2), true) - DIRS += bFTGL/src -endif - ifeq ($(WITH_FFMPEG), true) ifeq ($(NAN_FFMPEG), $(LCGDIR)/ffmpeg) DIRS += ffmpeg @@ -45,10 +41,6 @@ ifeq ($(NAN_FFMPEG), $(LCGDIR)/gcc/ffmpeg) endif endif -ifeq ($(WITH_VERSE), true) - DIRS += verse -endif - ifneq ($(NAN_NO_KETSJI), true) DIRS += bullet2 endif diff --git a/extern/SConscript b/extern/SConscript index 716aee8991f..126f40b00b3 100644 --- a/extern/SConscript +++ b/extern/SConscript @@ -11,9 +11,6 @@ if env['WITH_BF_GAMEENGINE']: if env['WITH_BF_BULLET']: SConscript(['bullet2/src/SConscript']) -if env['WITH_BF_INTERNATIONAL']: - SConscript(['bFTGL/SConscript']) - if env['WITH_BF_FFMPEG'] and env['BF_FFMPEG_LIB'] == '': SConscript(['x264/SConscript']) SConscript(['libmp3lame/SConscript']) diff --git a/extern/bFTGL/CMakeLists.txt b/extern/bFTGL/CMakeLists.txt deleted file mode 100644 index 529dc74a4d2..00000000000 --- a/extern/bFTGL/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# $Id$ -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The Original Code is Copyright (C) 2006, Blender Foundation -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): Jacques Beaurain. -# -# ***** END GPL LICENSE BLOCK ***** - -SET(INC include src ${FREETYPE_INC}) - -FILE(GLOB SRC src/*.cpp) -ADD_DEFINITIONS(-DFTGL_LIBRARY_STATIC) -BLENDERLIB(extern_ftgl "${SRC}" "${INC}") -#, libtype=['international','player'], priority=[5, 210]) diff --git a/extern/bFTGL/COPYING.txt b/extern/bFTGL/COPYING.txt deleted file mode 100644 index 92b8903ff3f..00000000000 --- a/extern/bFTGL/COPYING.txt +++ /dev/null @@ -1,481 +0,0 @@ - GNU LIBRARY GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is - numbered 2 because it goes with version 2 of the ordinary GPL.] - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -Licenses are intended to guarantee your freedom to share and change -free software--to make sure the software is free for all its users. - - This license, the Library General Public License, applies to some -specially designated Free Software Foundation software, and to any -other libraries whose authors decide to use it. You can use it for -your libraries, 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 library, or if you modify it. - - For example, if you distribute copies of the library, whether gratis -or for a fee, you must give the recipients all the rights that we gave -you. You must make sure that they, too, receive or can get the source -code. If you link a program with the library, you must provide -complete object files to the recipients so that they can relink them -with the library, after making changes to the library and recompiling -it. And you must show them these terms so they know their rights. - - Our method of protecting your rights has two steps: (1) copyright -the library, and (2) offer you this license which gives you legal -permission to copy, distribute and/or modify the library. - - Also, for each distributor's protection, we want to make certain -that everyone understands that there is no warranty for this free -library. If the library is modified by someone else and passed on, we -want its recipients to know that what they have is not the original -version, 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 companies distributing free -software will individually obtain patent licenses, thus in effect -transforming the program into proprietary software. To prevent this, -we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - - Most GNU software, including some libraries, is covered by the ordinary -GNU General Public License, which was designed for utility programs. This -license, the GNU Library General Public License, applies to certain -designated libraries. This license is quite different from the ordinary -one; be sure to read it in full, and don't assume that anything in it is -the same as in the ordinary license. - - The reason we have a separate public license for some libraries is that -they blur the distinction we usually make between modifying or adding to a -program and simply using it. Linking a program with a library, without -changing the library, is in some sense simply using the library, and is -analogous to running a utility program or application program. However, in -a textual and legal sense, the linked executable is a combined work, a -derivative of the original library, and the ordinary General Public License -treats it as such. - - Because of this blurred distinction, using the ordinary General -Public License for libraries did not effectively promote software -sharing, because most developers did not use the libraries. We -concluded that weaker conditions might promote sharing better. - - However, unrestricted linking of non-free programs would deprive the -users of those programs of all benefit from the free status of the -libraries themselves. This Library General Public License is intended to -permit developers of non-free programs to use free libraries, while -preserving your freedom as a user of such programs to change the free -libraries that are incorporated in them. (We have not seen how to achieve -this as regards changes in header files, but we have achieved it as regards -changes in the actual functions of the Library.) The hope is that this -will lead to faster development of free libraries. - - The precise terms and conditions for copying, distribution and -modification follow. Pay close attention to the difference between a -"work based on the library" and a "work that uses the library". The -former contains code derived from the library, while the latter only -works together with the library. - - Note that it is possible for a library to be covered by the ordinary -General Public License rather than by this special one. - - GNU LIBRARY GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any software library which -contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Library -General Public License (also called "this License"). Each licensee is -addressed as "you". - - A "library" means a collection of software functions and/or data -prepared so as to be conveniently linked with application programs -(which use some of those functions and data) to form executables. - - The "Library", below, refers to any such software library or work -which has been distributed under these terms. A "work based on the -Library" means either the Library or any derivative work under -copyright law: that is to say, a work containing the Library or a -portion of it, either verbatim or with modifications and/or translated -straightforwardly into another language. (Hereinafter, translation is -included without limitation in the term "modification".) - - "Source code" for a work means the preferred form of the work for -making modifications to it. For a library, 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 library. - - Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running a program using the Library is not restricted, and output from -such a program is covered only if its contents constitute a work based -on the Library (independent of the use of the Library in a tool for -writing it). Whether that is true depends on what the Library does -and what the program that uses the Library does. - - 1. You may copy and distribute verbatim copies of the Library's -complete 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 distribute a copy of this License along with the -Library. - - 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 Library or any portion -of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. - - b) You must cause the files modified to carry prominent notices - stating that you changed the files and the date of any change. - - c) You must cause the whole of the work to be licensed at no - charge to all third parties under the terms of this License. - - d) If a facility in the modified Library refers to a function or a - table of data to be supplied by an application program that uses - the facility, other than as an argument passed when the facility - is invoked, then you must make a good faith effort to ensure that, - in the event an application does not supply such function or - table, the facility still operates, and performs whatever part of - its purpose remains meaningful. - - (For example, a function in a library to compute square roots has - a purpose that is entirely well-defined independent of the - application. Therefore, Subsection 2d requires that any - application-supplied function or table used by this function must - be optional: if the application does not supply it, the square - root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Library, -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 Library, 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 Library. - -In addition, mere aggregation of another work not based on the Library -with the Library (or with a work based on the Library) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may opt to apply the terms of the ordinary GNU General Public -License instead of this License to a given copy of the Library. To do -this, you must alter all the notices that refer to this License, so -that they refer to the ordinary GNU General Public License, version 2, -instead of to this License. (If a newer version than version 2 of the -ordinary GNU General Public License has appeared, then you can specify -that version instead if you wish.) Do not make any other change in -these notices. - - Once this change is made in a given copy, it is irreversible for -that copy, so the ordinary GNU General Public License applies to all -subsequent copies and derivative works made from that copy. - - This option is useful when you wish to copy part of the code of -the Library into a program that is not a library. - - 4. You may copy and distribute the Library (or a portion or -derivative of it, under Section 2) in object code or executable form -under the terms of Sections 1 and 2 above provided that you 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. - - If distribution of 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 satisfies the requirement to -distribute the source code, even though third parties are not -compelled to copy the source along with the object code. - - 5. A program that contains no derivative of any portion of the -Library, but is designed to work with the Library by being compiled or -linked with it, is called a "work that uses the Library". Such a -work, in isolation, is not a derivative work of the Library, and -therefore falls outside the scope of this License. - - However, linking a "work that uses the Library" with the Library -creates an executable that is a derivative of the Library (because it -contains portions of the Library), rather than a "work that uses the -library". The executable is therefore covered by this License. -Section 6 states terms for distribution of such executables. - - When a "work that uses the Library" uses material from a header file -that is part of the Library, the object code for the work may be a -derivative work of the Library even though the source code is not. -Whether this is true is especially significant if the work can be -linked without the Library, or if the work is itself a library. The -threshold for this to be true is not precisely defined by law. - - If such an object file uses only numerical parameters, data -structure layouts and accessors, and small macros and small inline -functions (ten lines or less in length), then the use of the object -file is unrestricted, regardless of whether it is legally a derivative -work. (Executables containing this object code plus portions of the -Library will still fall under Section 6.) - - Otherwise, if the work is a derivative of the Library, you may -distribute the object code for the work under the terms of Section 6. -Any executables containing that work also fall under Section 6, -whether or not they are linked directly with the Library itself. - - 6. As an exception to the Sections above, you may also compile or -link a "work that uses the Library" with the Library to produce a -work containing portions of the Library, and distribute that work -under terms of your choice, provided that the terms permit -modification of the work for the customer's own use and reverse -engineering for debugging such modifications. - - You must give prominent notice with each copy of the work that the -Library is used in it and that the Library and its use are covered by -this License. You must supply a copy of this License. If the work -during execution displays copyright notices, you must include the -copyright notice for the Library among them, as well as a reference -directing the user to the copy of this License. Also, you must do one -of these things: - - a) Accompany the work with the complete corresponding - machine-readable source code for the Library including whatever - changes were used in the work (which must be distributed under - Sections 1 and 2 above); and, if the work is an executable linked - with the Library, with the complete machine-readable "work that - uses the Library", as object code and/or source code, so that the - user can modify the Library and then relink to produce a modified - executable containing the modified Library. (It is understood - that the user who changes the contents of definitions files in the - Library will not necessarily be able to recompile the application - to use the modified definitions.) - - b) Accompany the work with a written offer, valid for at - least three years, to give the same user the materials - specified in Subsection 6a, above, for a charge no more - than the cost of performing this distribution. - - c) If distribution of the work is made by offering access to copy - from a designated place, offer equivalent access to copy the above - specified materials from the same place. - - d) Verify that the user has already received a copy of these - materials or that you have already sent this user a copy. - - For an executable, the required form of the "work that uses the -Library" must include any data and utility programs needed for -reproducing the executable from it. 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. - - It may happen that this requirement contradicts the license -restrictions of other proprietary libraries that do not normally -accompany the operating system. Such a contradiction means you cannot -use both them and the Library together in an executable that you -distribute. - - 7. You may place library facilities that are a work based on the -Library side-by-side in a single library together with other library -facilities not covered by this License, and distribute such a combined -library, provided that the separate distribution of the work based on -the Library and of the other library facilities is otherwise -permitted, and provided that you do these two things: - - a) Accompany the combined library with a copy of the same work - based on the Library, uncombined with any other library - facilities. This must be distributed under the terms of the - Sections above. - - b) Give prominent notice with the combined library of the fact - that part of it is a work based on the Library, and explaining - where to find the accompanying uncombined form of the same work. - - 8. You may not copy, modify, sublicense, link with, or distribute -the Library except as expressly provided under this License. Any -attempt otherwise to copy, modify, sublicense, link with, or -distribute the Library 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. - - 9. 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 Library or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Library (or any work based on the -Library), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - - 10. Each time you redistribute the Library (or any work based on the -Library), the recipient automatically receives a license from the -original licensor to copy, distribute, link with or modify the Library -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. - - 11. 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 Library at all. For example, if a patent -license would not permit royalty-free redistribution of the Library 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 Library. - -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. - - 12. If the distribution and/or use of the Library is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Library 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. - - 13. The Free Software Foundation may publish revised and/or new -versions of the Library 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 Library -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 Library does not specify a -license version number, you may choose any version ever published by -the Free Software Foundation. - - 14. If you wish to incorporate parts of the Library into other free -programs whose distribution conditions are incompatible with these, -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 - - 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO -WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. -EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE LIBRARY "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 -LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. 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 LIBRARY 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 -LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries - - If you develop a new library, and you want it to be of the greatest -possible use to the public, we recommend making it free software that -everyone can redistribute and change. You can do so by permitting -redistribution under these terms (or, alternatively, under the terms of the -ordinary General Public License). - - To apply these terms, attach the following notices to the library. 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. - - - Copyright (C) - - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Library General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - - This library 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 - Library General Public License for more details. - - You should have received a copy of the GNU Library General Public - License along with this library; if not, write to the Free - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the library, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - library `Frob' (a library for tweaking knobs) written by James Random Hacker. - - , 1 April 1990 - Ty Coon, President of Vice - -That's all there is to it! diff --git a/extern/bFTGL/README.txt b/extern/bFTGL/README.txt deleted file mode 100644 index a679d86c22e..00000000000 --- a/extern/bFTGL/README.txt +++ /dev/null @@ -1,51 +0,0 @@ -FTGL 2.0.11 -16 August 2004 - -DESCRIPTION: - -FTGL is a free open source library to enable developers to use arbitrary -fonts in their OpenGL (www.opengl.org) applications. -Unlike other OpenGL font libraries FTGL uses standard font file formats -so doesn't need a preprocessing step to convert the high quality font data -into a lesser quality, proprietary format. -FTGL uses the Freetype (www.freetype.org) font library to open and 'decode' -the fonts. It then takes that output and stores it in a format most efficient -for OpenGL rendering. - -Rendering modes supported are -- Bit maps -- Antialiased Pix maps -- Texture maps -- Outlines -- Polygon meshes -- Extruded polygon meshes - -FTGL is designed to be used in commercial quality software. It has been -written with performance, robustness and simplicity in mind. - -USAGE: - - FTGLPixmapFont font( "Fonts:Arial"); - - font.FaceSize( 72); - - font.render( "Hello World!"); - -This library was inspired by gltt, Copyright (C) 1998-1999 Stephane Rehel -(http://gltt.sourceforge.net) -Bezier curve code contributed by Jed Soane. -Demo, Linux port, extrusion code and gltt maintainance by Gerard Lanois -Linux port by Matthias Kretz -Windows port by Andrew Ellerton & Max Rheiner -Bug fixes by Robert Osfield, Marcelo E. Magallon, Markku Rontu, Mark A. Fox, -Patrick Rogers -Containers and optimisations by Sebastien Barre -Autoconf Marcelo E. Magallon. - - -Please contact me if you have any suggestions, feature requests, or problems. - -Henry Maddocks -ftgl@opengl.geek.nz -http://homepages.paradise.net.nz/henryj/ - diff --git a/extern/bFTGL/SConscript b/extern/bFTGL/SConscript deleted file mode 100644 index 03a17a62a17..00000000000 --- a/extern/bFTGL/SConscript +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/python -import sys -import os - -Import('env') - -incs = 'include src ' + env['BF_FREETYPE_INC'] + ' ' + env['BF_OPENGL_INC'] -defs = '' - -sources = env.Glob('src/*.cpp') - -env.BlenderLib ( 'extern_ftgl', sources, Split(incs), Split(defs), libtype=['extern'], priority=[5]) diff --git a/extern/bFTGL/cleanup b/extern/bFTGL/cleanup deleted file mode 100755 index c6d24edb287..00000000000 --- a/extern/bFTGL/cleanup +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -fx -# script to get rid of the grabage that MAC OSX drops in all the directories - -find . -name .DS_Store -print -exec rm {} \; diff --git a/extern/bFTGL/include/FTBBox.h b/extern/bFTGL/include/FTBBox.h deleted file mode 100644 index 7ff530166ca..00000000000 --- a/extern/bFTGL/include/FTBBox.h +++ /dev/null @@ -1,124 +0,0 @@ -#ifndef __FTBBox__ -#define __FTBBox__ - -#include -#include FT_FREETYPE_H -//#include FT_GLYPH_H -#include FT_OUTLINE_H - -#include "FTGL.h" -#include "FTPoint.h" - - -/** - * FTBBox is a convenience class for handling bounding boxes. - */ -class FTGL_EXPORT FTBBox -{ - public: - /** - * Default constructor. Bounding box is set to zero. - */ - FTBBox() - : lowerX(0.0f), - lowerY(0.0f), - lowerZ(0.0f), - upperX(0.0f), - upperY(0.0f), - upperZ(0.0f) - {} - - /** - * Constructor. - */ - FTBBox( float lx, float ly, float lz, float ux, float uy, float uz) - : lowerX(lx), - lowerY(ly), - lowerZ(lz), - upperX(ux), - upperY(uy), - upperZ(uz) - {} - - /** - * Constructor. Extracts a bounding box from a freetype glyph. Uses - * the control box for the glyph. FT_Glyph_Get_CBox() - * - * @param glyph A freetype glyph - */ - FTBBox( FT_GlyphSlot glyph) - : lowerX(0.0f), - lowerY(0.0f), - lowerZ(0.0f), - upperX(0.0f), - upperY(0.0f), - upperZ(0.0f) - { - FT_BBox bbox; - FT_Outline_Get_CBox( &(glyph->outline), &bbox); - - lowerX = static_cast( bbox.xMin) / 64.0f; - lowerY = static_cast( bbox.yMin) / 64.0f; - lowerZ = 0.0f; - upperX = static_cast( bbox.xMax) / 64.0f; - upperY = static_cast( bbox.yMax) / 64.0f; - upperZ = 0.0f; - - } - - /** - * Destructor - */ - ~FTBBox() - {} - - - /** - * Move the Bounding Box by a vector. - * - * @param distance The distance to move the bbox in 3D space. - */ - FTBBox& Move( FTPoint distance) - { - lowerX += distance.x; - lowerY += distance.y; - lowerZ += distance.z; - upperX += distance.x; - upperY += distance.y; - upperZ += distance.z; - return *this; - } - - FTBBox& operator += ( const FTBBox& bbox) - { - lowerX = bbox.lowerX < lowerX? bbox.lowerX: lowerX; - lowerY = bbox.lowerY < lowerY? bbox.lowerY: lowerY; - lowerZ = bbox.lowerZ < lowerZ? bbox.lowerZ: lowerZ; - upperX = bbox.upperX > upperX? bbox.upperX: upperX; - upperY = bbox.upperY > upperY? bbox.upperY: upperY; - upperZ = bbox.upperZ > upperZ? bbox.upperZ: upperZ; - - return *this; - } - - void SetDepth( float depth) - { - upperZ = lowerZ + depth; - } - - - /** - * The bounds of the box - */ - // Make these ftPoints & private - float lowerX, lowerY, lowerZ, upperX, upperY, upperZ; - protected: - - - private: - -}; - - -#endif // __FTBBox__ - diff --git a/extern/bFTGL/include/FTBitmapGlyph.h b/extern/bFTGL/include/FTBitmapGlyph.h deleted file mode 100644 index 89154a97fac..00000000000 --- a/extern/bFTGL/include/FTBitmapGlyph.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef __FTBitmapGlyph__ -#define __FTBitmapGlyph__ - - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" -#include "FTGlyph.h" - - -/** - * FTBitmapGlyph is a specialisation of FTGlyph for creating bitmaps. - * - * It provides the interface between Freetype glyphs and their openGL - * Renderable counterparts. This is an abstract class and derived classes - * must implement the Render function. - * - * @see FTGlyphContainer - * - */ -class FTGL_EXPORT FTBitmapGlyph : public FTGlyph -{ - public: - /** - * Constructor - * - * @param glyph The Freetype glyph to be processed - */ - FTBitmapGlyph( FT_GlyphSlot glyph); - - /** - * Destructor - */ - virtual ~FTBitmapGlyph(); - - /** - * Renders this glyph at the current pen position. - * - * @param pen The current pen position. - * @return The advance distance for this glyph. - */ - virtual float Render( const FTPoint& pen); - - private: - /** - * The width of the glyph 'image' - */ - unsigned int destWidth; - - /** - * The height of the glyph 'image' - */ - unsigned int destHeight; - - /** - * The pitch of the glyph 'image' - */ - unsigned int destPitch; - - /** - * Vector from the pen position to the topleft corner of the bitmap - */ - FTPoint pos; - - /** - * Pointer to the 'image' data - */ - unsigned char* data; - -}; - - -#endif // __FTBitmapGlyph__ - diff --git a/extern/bFTGL/include/FTBufferGlyph.h b/extern/bFTGL/include/FTBufferGlyph.h deleted file mode 100644 index 9795f4de5d4..00000000000 --- a/extern/bFTGL/include/FTBufferGlyph.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef __FTBufferGlyph__ -#define __FTBufferGlyph__ - - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" -#include "FTGlyph.h" - - -/** - * FTBufferGlyph is a specialisation of FTGlyph for creating pixmaps. - * - * @see FTGlyphContainer - * - */ -class FTGL_EXPORT FTBufferGlyph : public FTGlyph -{ - public: - /** - * Constructor - * - * @param glyph The Freetype glyph to be processed - */ - FTBufferGlyph( FT_GlyphSlot glyph, unsigned char* clientBuffer); - - /** - * Destructor - */ - virtual ~FTBufferGlyph(); - - /** - * Renders this glyph at the current pen position. - * - * @param pen The current pen position. - * @return The advance distance for this glyph. - */ - virtual float Render( const FTPoint& pen); - - // attributes - - private: - /** - * The width of the glyph 'image' - */ - int destWidth; - - /** - * The height of the glyph 'image' - */ - int destHeight; - - /** - * The pitch of the glyph 'image' - */ - unsigned int destPitch; - - /** - * Vector from the pen position to the topleft corner of the pixmap - */ - FTPoint pos; - - /** - * Pointer to the 'image' data - */ - unsigned char* data; - - - unsigned char* buffer; - -}; - - -#endif // __FTBufferGlyph__ diff --git a/extern/bFTGL/include/FTCharToGlyphIndexMap.h b/extern/bFTGL/include/FTCharToGlyphIndexMap.h deleted file mode 100644 index 6e40d3c9574..00000000000 --- a/extern/bFTGL/include/FTCharToGlyphIndexMap.h +++ /dev/null @@ -1,130 +0,0 @@ -#ifndef __FTCharToGlyphIndexMap__ -#define __FTCharToGlyphIndexMap__ - -#include - -#include "FTGL.h" - -/** - * Provides a non-STL alternative to the STL map - * which maps character codes to glyph indices inside FTCharmap. - * - * Implementation: - * - NumberOfBuckets buckets are considered. - * - Each bucket has BucketSize entries. - * - When the glyph index for the character code C has to be stored, the - * bucket this character belongs to is found using 'C div BucketSize'. - * If this bucket has not been allocated yet, do it now. - * The entry in the bucked is found using 'C mod BucketSize'. - * If it is set to IndexNotFound, then the glyph entry has not been set. - * - Try to mimic the calls made to the STL map API. - * - * Caveats: - * - The glyph index is now a signed long instead of unsigned long, so - * the special value IndexNotFound (= -1) can be used to specify that the - * glyph index has not been stored yet. - */ -class FTGL_EXPORT FTCharToGlyphIndexMap -{ - public: - - typedef unsigned long CharacterCode; - typedef signed long GlyphIndex; - - enum - { - NumberOfBuckets = 256, - BucketSize = 256, - IndexNotFound = -1 - }; - - FTCharToGlyphIndexMap() - { - this->Indices = 0; - } - - virtual ~FTCharToGlyphIndexMap() - { - if( this->Indices) - { - // Free all buckets - this->clear(); - - // Free main structure - delete [] this->Indices; - this->Indices = 0; - } - } - - void clear() - { - if(this->Indices) - { - for( int i = 0; i < FTCharToGlyphIndexMap::NumberOfBuckets; i++) - { - if( this->Indices[i]) - { - delete [] this->Indices[i]; - this->Indices[i] = 0; - } - } - } - } - - const GlyphIndex find( CharacterCode c) - { - if( !this->Indices) - { - return 0; - } - - // Find position of char code in buckets - div_t pos = div( c, FTCharToGlyphIndexMap::BucketSize); - - if( !this->Indices[pos.quot]) - { - return 0; - } - - const FTCharToGlyphIndexMap::GlyphIndex *ptr = &this->Indices[pos.quot][pos.rem]; - if( *ptr == FTCharToGlyphIndexMap::IndexNotFound) - { - return 0; - } - - return *ptr; - } - - void insert( CharacterCode c, GlyphIndex g) - { - if( !this->Indices) - { - this->Indices = new GlyphIndex* [FTCharToGlyphIndexMap::NumberOfBuckets]; - for( int i = 0; i < FTCharToGlyphIndexMap::NumberOfBuckets; i++) - { - this->Indices[i] = 0; - } - } - - // Find position of char code in buckets - div_t pos = div(c, FTCharToGlyphIndexMap::BucketSize); - - // Allocate bucket if does not exist yet - if( !this->Indices[pos.quot]) - { - this->Indices[pos.quot] = new GlyphIndex [FTCharToGlyphIndexMap::BucketSize]; - for( int i = 0; i < FTCharToGlyphIndexMap::BucketSize; i++) - { - this->Indices[pos.quot][i] = FTCharToGlyphIndexMap::IndexNotFound; - } - } - - this->Indices[pos.quot][pos.rem] = g; - } - - private: - GlyphIndex** Indices; -}; - - -#endif // __FTCharToGlyphIndexMap__ diff --git a/extern/bFTGL/include/FTCharmap.h b/extern/bFTGL/include/FTCharmap.h deleted file mode 100644 index 74ca6f2cacb..00000000000 --- a/extern/bFTGL/include/FTCharmap.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifndef __FTCharmap__ -#define __FTCharmap__ - - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTCharToGlyphIndexMap.h" - -#include "FTGL.h" - - -/** - * FTCharmap takes care of specifying the encoding for a font and mapping - * character codes to glyph indices. - * - * It doesn't preprocess all indices, only on an as needed basis. This may - * seem like a performance penalty but it is quicker than using the 'raw' - * freetype calls and will save significant amounts of memory when dealing - * with unicode encoding - * - * @see "Freetype 2 Documentation" - * - */ - -class FTFace; - -class FTGL_EXPORT FTCharmap -{ - public: - /** - * Constructor - */ - FTCharmap( FTFace* face); - - /** - * Destructor - */ - virtual ~FTCharmap(); - - /** - * Queries for the current character map code. - * - * @return The current character map code. - */ - FT_Encoding Encoding() const { return ftEncoding;} - - /** - * Sets the character map for the face. - * Valid encodings as at Freetype 2.0.4 - * ft_encoding_none - * ft_encoding_symbol - * ft_encoding_unicode - * ft_encoding_latin_2 - * ft_encoding_sjis - * ft_encoding_gb2312 - * ft_encoding_big5 - * ft_encoding_wansung - * ft_encoding_johab - * ft_encoding_adobe_standard - * ft_encoding_adobe_expert - * ft_encoding_adobe_custom - * ft_encoding_apple_roman - * - * @param encoding the Freetype encoding symbol. See above. - * @return true if charmap was valid and set - * correctly. If the requested encoding is - * unavailable it will be set to ft_encoding_none. - */ - bool CharMap( FT_Encoding encoding); - - /** - * Get the FTGlyphContainer index of the input character. - * - * @param characterCode The character code of the requested glyph in - * the current encoding eg apple roman. - * @return The FTGlyphContainer index for the character or zero - * if it wasn't found - */ - unsigned int GlyphListIndex( const unsigned int characterCode); - - /** - * Get the font glyph index of the input character. - * - * @param characterCode The character code of the requested glyph in - * the current encoding eg apple roman. - * @return The glyph index for the character. - */ - unsigned int FontIndex( const unsigned int characterCode); - - /** - * Set the FTGlyphContainer index of the character code. - * - * @param characterCode The character code of the requested glyph in - * the current encoding eg apple roman. - * @param containerIndex The index into the FTGlyphContainer of the - * character code. - */ - void InsertIndex( const unsigned int characterCode, const unsigned int containerIndex); - - /** - * Queries for errors. - * - * @return The current error code. Zero means no error. - */ - FT_Error Error() const { return err;} - - private: - /** - * Current character map code. - */ - FT_Encoding ftEncoding; - - /** - * The current Freetype face. - */ - const FT_Face ftFace; - - /** - * A structure that maps glyph indices to character codes - * - * < character code, face glyph index> - */ - typedef FTCharToGlyphIndexMap CharacterMap; - CharacterMap charMap; - - /** - * Current error code. - */ - FT_Error err; - -}; - - -#endif // __FTCharmap__ diff --git a/extern/bFTGL/include/FTContour.h b/extern/bFTGL/include/FTContour.h deleted file mode 100644 index 895d9edeff8..00000000000 --- a/extern/bFTGL/include/FTContour.h +++ /dev/null @@ -1,88 +0,0 @@ -#ifndef __FTContour__ -#define __FTContour__ - -#include "FTPoint.h" -#include "FTVector.h" -#include "FTGL.h" - - -/** - * FTContour class is a container of points that describe a vector font - * outline. It is used as a container for the output of the bezier curve - * evaluator in FTVectoriser. - * - * @see FTOutlineGlyph - * @see FTPolyGlyph - * @see FTPoint - */ -class FTGL_EXPORT FTContour -{ - public: - /** - * Constructor - * - * @param contour - * @param pointTags - * @param numberOfPoints - */ - FTContour( FT_Vector* contour, char* pointTags, unsigned int numberOfPoints); - - /** - * Destructor - */ - ~FTContour() - { - pointList.clear(); - } - - /** - * Return a point at index. - * - * @param index of the point in the curve. - * @return const point reference - */ - const FTPoint& Point( unsigned int index) const { return pointList[index];} - - /** - * How many points define this contour - * - * @return the number of points in this contour - */ - size_t PointCount() const { return pointList.size();} - - private: - /** - * Add a point to this contour. This function tests for duplicate - * points. - * - * @param point The point to be added to the contour. - */ - inline void AddPoint( FTPoint point); - - inline void AddPoint( float x, float y); - - /** - * De Casteljau (bezier) algorithm contributed by Jed Soane - * Evaluates a quadratic or conic (second degree) curve - */ - inline void evaluateQuadraticCurve(); - - /** - * De Casteljau (bezier) algorithm contributed by Jed Soane - * Evaluates a cubic (third degree) curve - */ - inline void evaluateCubicCurve(); - - /** - * The list of points in this contour - */ - typedef FTVector PointVector; - PointVector pointList; - - /** - * 2D array storing values of de Casteljau algorithm. - */ - float controlPoints[4][2]; -}; - -#endif // __FTContour__ diff --git a/extern/bFTGL/include/FTExtrdGlyph.h b/extern/bFTGL/include/FTExtrdGlyph.h deleted file mode 100644 index 01e7c9e1d76..00000000000 --- a/extern/bFTGL/include/FTExtrdGlyph.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef __FTExtrdGlyph__ -#define __FTExtrdGlyph__ - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" -#include "FTGlyph.h" - -class FTVectoriser; - -/** - * FTExtrdGlyph is a specialisation of FTGlyph for creating tessellated - * extruded polygon glyphs. - * - * @see FTGlyphContainer - * @see FTVectoriser - * - */ -class FTGL_EXPORT FTExtrdGlyph : public FTGlyph -{ - public: - /** - * Constructor. Sets the Error to Invalid_Outline if the glyphs isn't an outline. - * - * @param glyph The Freetype glyph to be processed - * @param depth The distance along the z axis to extrude the glyph - */ - FTExtrdGlyph( FT_GlyphSlot glyph, float depth); - - /** - * Destructor - */ - virtual ~FTExtrdGlyph(); - - /** - * Renders this glyph at the current pen position. - * - * @param pen The current pen position. - * @return The advance distance for this glyph. - */ - virtual float Render( const FTPoint& pen); - - private: - /** - * Calculate the normal vector to 2 points. This is 2D and ignores - * the z component. The normal will be normalised - * - * @param a - * @param b - * @return - */ - FTPoint GetNormal( const FTPoint &a, const FTPoint &b); - - - /** - * OpenGL display list - */ - GLuint glList; - - /** - * Distance to extrude the glyph - */ - float depth; - -}; - - -#endif // __FTExtrdGlyph__ - diff --git a/extern/bFTGL/include/FTFace.h b/extern/bFTGL/include/FTFace.h deleted file mode 100644 index 26bb3966462..00000000000 --- a/extern/bFTGL/include/FTFace.h +++ /dev/null @@ -1,149 +0,0 @@ -#ifndef __FTFace__ -#define __FTFace__ - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" -#include "FTPoint.h" -#include "FTSize.h" - -/** - * FTFace class provides an abstraction layer for the Freetype Face. - * - * @see "Freetype 2 Documentation" - * - */ -class FTGL_EXPORT FTFace -{ - public: - /** - * Opens and reads a face file. Error is set. - * - * @param filename font file name. - */ - FTFace( const char* filename); - - /** - * Read face data from an in-memory buffer. Error is set. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - */ - FTFace( const unsigned char *pBufferBytes, size_t bufferSizeInBytes ); - - /** - * Destructor - * - * Disposes of the current Freetype Face. - */ - virtual ~FTFace(); - - /** - * Attach auxilliary file to font (e.g., font metrics). - * - * @param filename auxilliary font file name. - * @return true if file has opened - * successfully. - */ - bool Attach( const char* filename); - - /** - * Attach auxilliary data to font (e.g., font metrics) from memory - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - * @return true if file has opened - * successfully. - */ - bool Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - /** - * Disposes of the face - */ - void Close(); - - /** - * Get the freetype face object.. - * - * @return pointer to an FT_Face. - */ - FT_Face* Face() const { return ftFace;} - - /** - * Sets the char size for the current face. - * - * This doesn't guarantee that the size was set correctly. Clients - * should check errors. - * - * @param size the face size in points (1/72 inch) - * @param res the resolution of the target device. - * @return FTSize object - */ - const FTSize& Size( const unsigned int size, const unsigned int res); - - unsigned int UnitsPerEM() const; - - /** - * Get the number of character maps in this face. - * - * @return character map count. - */ - unsigned int CharMapCount(); - - /** - * Get a list of character maps in this face. - * - * @return pointer to the first encoding. - */ - FT_Encoding* CharMapList(); - - /** - * Gets the kerning vector between two glyphs - */ - FTPoint KernAdvance( unsigned int index1, unsigned int index2); - - /** - * Loads and creates a Freetype glyph. - */ - FT_GlyphSlot Glyph( unsigned int index, FT_Int load_flags); - - /** - * Gets the number of glyphs in the current face. - */ - unsigned int GlyphCount() const { return numGlyphs;} - - /** - * Queries for errors. - * - * @return The current error code. - */ - FT_Error Error() const { return err; } - - private: - /** - * The Freetype face - */ - FT_Face* ftFace; - - /** - * The size object associated with this face - */ - FTSize charSize; - - /** - * The number of glyphs in this face - */ - int numGlyphs; - - FT_Encoding* fontEncodingList; - - /** - * Current error code. Zero means no error. - */ - FT_Error err; -}; - - -#endif // __FTFace__ diff --git a/extern/bFTGL/include/FTFont.h b/extern/bFTGL/include/FTFont.h deleted file mode 100644 index 5b3d9e46f68..00000000000 --- a/extern/bFTGL/include/FTFont.h +++ /dev/null @@ -1,260 +0,0 @@ -#ifndef __FTFont__ -#define __FTFont__ - -#include -#include FT_FREETYPE_H - -#include "FTFace.h" -#include "FTGL.h" - -class FTGlyphContainer; -class FTGlyph; - - -/** - * FTFont is the public interface for the FTGL library. - * - * Specific font classes are derived from this class. It uses the helper - * classes FTFace and FTSize to access the Freetype library. This class - * is abstract and deriving classes must implement the protected - * MakeGlyph function to create glyphs of the - * appropriate type. - * - * It is good practice after using these functions to test the error - * code returned. FT_Error Error() - * - * @see FTFace - * @see FTSize - * @see FTGlyphContainer - * @see FTGlyph - */ -class FTGL_EXPORT FTFont -{ - public: - /** - * Open and read a font file. Sets Error flag. - * - * @param fontname font file name. - */ - FTFont( const char* fontname); - - /** - * Open and read a font from a buffer in memory. Sets Error flag. - * The buffer is owned by the client and is NOT copied by FTGL. The - * pointer must be valid while using FTGL. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - */ - FTFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - /** - * Destructor - */ - virtual ~FTFont(); - - /** - * Attach auxilliary file to font e.g font metrics. - * - * Note: not all font formats implement this function. - * - * @param filename auxilliary font file name. - * @return true if file has been attached - * successfully. - */ - bool Attach( const char* filename); - - /** - * Attach auxilliary data to font e.g font metrics, from memory - * - * Note: not all font formats implement this function. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - * @return true if file has been attached - * successfully. - */ - bool Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - /** - * Set the character map for the face. - * - * @param encoding Freetype enumerate for char map code. - * @return true if charmap was valid and - * set correctly - */ - bool CharMap( FT_Encoding encoding ); - - /** - * Get the number of character maps in this face. - * - * @return character map count. - */ - unsigned int CharMapCount(); - - /** - * Get a list of character maps in this face. - * - * @return pointer to the first encoding. - */ - FT_Encoding* CharMapList(); - - /** - * Set the char size for the current face. - * - * @param size the face size in points (1/72 inch) - * @param res the resolution of the target device. - * @return true if size was set correctly - */ - virtual bool FaceSize( const unsigned int size, const unsigned int res = 72); - - /** - * Get the current face size in points. - * - * @return face size - */ - unsigned int FaceSize() const; - - /** - * Set the extrusion distance for the font. Only implemented by - * FTGLExtrdFont - * - * @param d The extrusion distance. - */ - virtual void Depth( float d){} - - /** - * Get the global ascender height for the face. - * - * @return Ascender height - */ - float Ascender() const; - - /** - * Gets the global descender height for the face. - * - * @return Descender height - */ - float Descender() const; - - /** - * Get the bounding box for a string. - * - * @param string a char string - * @param llx lower left near x coord - * @param lly lower left near y coord - * @param llz lower left near z coord - * @param urx upper right far x coord - * @param ury upper right far y coord - * @param urz upper right far z coord - */ - void BBox( const char* string, float& llx, float& lly, float& llz, float& urx, float& ury, float& urz); - - /** - * Get the bounding box for a string. - * - * @param string a wchar_t string - * @param llx lower left near x coord - * @param lly lower left near y coord - * @param llz lower left near z coord - * @param urx upper right far x coord - * @param ury upper right far y coord - * @param urz upper right far z coord - */ - void BBox( const wchar_t* string, float& llx, float& lly, float& llz, float& urx, float& ury, float& urz); - - /** - * Get the advance width for a string. - * - * @param string a wchar_t string - * @return advance width - */ - float Advance( const wchar_t* string); - - /** - * Get the advance width for a string. - * - * @param string a char string - * @return advance width - */ - float Advance( const char* string); - - /** - * Render a string of characters - * - * @param string 'C' style string to be output. - */ - virtual void Render( const char* string ); - - /** - * Render a string of characters - * - * @param string wchar_t string to be output. - */ - virtual void Render( const wchar_t* string ); - - /** - * Queries the Font for errors. - * - * @return The current error code. - */ - FT_Error Error() const { return err;} - - protected: - /** - * Construct a glyph of the correct type. - * - * Clients must overide the function and return their specialised - * FTGlyph. - * - * @param g The glyph index NOT the char code. - * @return An FT****Glyph or null on failure. - */ - virtual FTGlyph* MakeGlyph( unsigned int g) = 0; - - /** - * Current face object - */ - FTFace face; - - /** - * Current size object - */ - FTSize charSize; - - /** - * Current error code. Zero means no error. - */ - FT_Error err; - - private: - /** - * Render a character - * This function does an implicit conversion on it's arguments. - * - * @param chr current character - * @param nextChr next character - */ - inline void DoRender( const unsigned int chr, const unsigned int nextChr); - - /** - * Check that the glyph at chr exist. If not load it. - * - * @param chr character index - */ - inline void CheckGlyph( const unsigned int chr); - - /** - * An object that holds a list of glyphs - */ - FTGlyphContainer* glyphList; - - /** - * Current pen or cursor position; - */ - FTPoint pen; -}; - - -#endif // __FTFont__ - diff --git a/extern/bFTGL/include/FTGL.h b/extern/bFTGL/include/FTGL.h deleted file mode 100644 index 2b76de8b8bd..00000000000 --- a/extern/bFTGL/include/FTGL.h +++ /dev/null @@ -1,100 +0,0 @@ -#ifndef __FTGL__ -#define __FTGL__ - - -typedef double FTGL_DOUBLE; -typedef float FTGL_FLOAT; - -// Fixes for deprecated identifiers in 2.1.5 -#ifndef FT_OPEN_MEMORY - #define FT_OPEN_MEMORY (FT_Open_Flags)1 -#endif - -#ifndef FT_RENDER_MODE_MONO - #define FT_RENDER_MODE_MONO ft_render_mode_mono -#endif - -#ifndef FT_RENDER_MODE_NORMAL - #define FT_RENDER_MODE_NORMAL ft_render_mode_normal -#endif - - -#ifdef WIN32 - - // Under windows avoid including is overrated. - // Sure, it can be avoided and "name space pollution" can be - // avoided, but why? It really doesn't make that much difference - // these days. - #define WIN32_LEAN_AND_MEAN - #include - - #ifndef __gl_h_ - #include - #include - #endif - -#else - - // Non windows platforms - don't require nonsense as seen above :-) - #ifndef __gl_h_ - #ifdef __APPLE_CC__ - #include - #include - #else - #include - #if defined (__sun__) && !defined (__sparc__) - #include - #else - #include - #endif - #endif - - #endif - - // Required for compatibility with glext.h style function definitions of - // OpenGL extensions, such as in src/osg/Point.cpp. - #ifndef APIENTRY - #define APIENTRY - #endif -#endif - -// Compiler-specific conditional compilation -#ifdef _MSC_VER // MS Visual C++ - - // Disable various warning. - // 4786: template name too long - #pragma warning( disable : 4251 ) - #pragma warning( disable : 4275 ) - #pragma warning( disable : 4786 ) - - // The following definitions control how symbols are exported. - // If the target is a static library ensure that FTGL_LIBRARY_STATIC - // is defined. If building a dynamic library (ie DLL) ensure the - // FTGL_LIBRARY macro is defined, as it will mark symbols for - // export. If compiling a project to _use_ the _dynamic_ library - // version of the library, no definition is required. - #ifdef FTGL_LIBRARY_STATIC // static lib - no special export required - # define FTGL_EXPORT - #elif FTGL_LIBRARY // dynamic lib - must export/import symbols appropriately. - # define FTGL_EXPORT __declspec(dllexport) - #else - # define FTGL_EXPORT __declspec(dllimport) - #endif - -#else - // Compiler that is not MS Visual C++. - // Ensure that the export symbol is defined (and blank) - #define FTGL_EXPORT -#endif - - -// lifted from glext.h, to remove dependancy on glext.h -#ifndef GL_EXT_texture_object - #define GL_TEXTURE_PRIORITY_EXT 0x8066 - #define GL_TEXTURE_RESIDENT_EXT 0x8067 - #define GL_TEXTURE_1D_BINDING_EXT 0x8068 - #define GL_TEXTURE_2D_BINDING_EXT 0x8069 - #define GL_TEXTURE_3D_BINDING_EXT 0x806A -#endif - -#endif // __FTGL__ diff --git a/extern/bFTGL/include/FTGLBitmapFont.h b/extern/bFTGL/include/FTGLBitmapFont.h deleted file mode 100644 index 12feae00cb6..00000000000 --- a/extern/bFTGL/include/FTGLBitmapFont.h +++ /dev/null @@ -1,65 +0,0 @@ -#ifndef __FTGLBitmapFont__ -#define __FTGLBitmapFont__ - -#include "FTFont.h" -#include "FTGL.h" - - -class FTGlyph; - -/** - * FTGLBitmapFont is a specialisation of the FTFont class for handling - * Bitmap fonts - * - * @see FTFont - */ -class FTGL_EXPORT FTGLBitmapFont : public FTFont -{ - public: - /** - * Open and read a font file. Sets Error flag. - * - * @param fontname font file name. - */ - FTGLBitmapFont( const char* fontname); - - /** - * Open and read a font from a buffer in memory. Sets Error flag. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - */ - FTGLBitmapFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - /** - * Destructor - */ - ~FTGLBitmapFont(); - - /** - * Renders a string of characters - * - * @param string 'C' style string to be output. - */ - void Render( const char* string); - - /** - * Renders a string of characters - * - * @param string 'C' style wide string to be output. - */ - void Render( const wchar_t* string); - - // attributes - - private: - /** - * Construct a FTBitmapGlyph. - * - * @param g The glyph index NOT the char code. - * @return An FTBitmapGlyph or null on failure. - */ - inline virtual FTGlyph* MakeGlyph( unsigned int g); - -}; -#endif // __FTGLBitmapFont__ diff --git a/extern/bFTGL/include/FTGLBufferFont.h b/extern/bFTGL/include/FTGLBufferFont.h deleted file mode 100644 index 2f74b5cdef9..00000000000 --- a/extern/bFTGL/include/FTGLBufferFont.h +++ /dev/null @@ -1,76 +0,0 @@ -#ifndef __FTGLBufferFont__ -#define __FTGLBufferFont__ - - -#include "FTFont.h" -#include "FTGL.h" - - -class FTGlyph; - - -/** - * FTGLBufferFont is a specialisation of the FTFont class for handling - * Pixmap (Grey Scale) fonts - * - * @see FTFont - */ -class FTGL_EXPORT FTGLBufferFont : public FTFont -{ - public: - /** - * Open and read a font file. Sets Error flag. - * - * @param fontname font file name. - */ - FTGLBufferFont( const char* fontname); - - /** - * Open and read a font from a buffer in memory. Sets Error flag. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - */ - FTGLBufferFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - - void SetClientBuffer( unsigned char* b) - { - buffer = b; - } - - - /** - * Destructor - */ - ~FTGLBufferFont(); - - /** - * Renders a string of characters - * - * @param string 'C' style string to be output. - */ - void Render( const char* string); - - /** - * Renders a string of characters - * - * @param string wchar_t string to be output. - */ - void Render( const wchar_t* string); - - private: - /** - * Construct a FTBufferGlyph. - * - * @param g The glyph index NOT the char code. - * @return An FTBufferGlyph or null on failure. - */ - inline virtual FTGlyph* MakeGlyph( unsigned int g); - - unsigned char* buffer; -}; - - -#endif // __FTGLBufferFont__ - diff --git a/extern/bFTGL/include/FTGLExtrdFont.h b/extern/bFTGL/include/FTGLExtrdFont.h deleted file mode 100644 index dc784bbb5b0..00000000000 --- a/extern/bFTGL/include/FTGLExtrdFont.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef __FTGLExtrdFont__ -#define __FTGLExtrdFont__ - -#include "FTFont.h" -#include "FTGL.h" - -class FTGlyph; - -/** - * FTGLExtrdFont is a specialisation of the FTFont class for handling - * extruded Polygon fonts - * - * @see FTFont - * @see FTGLPolygonFont - */ -class FTGL_EXPORT FTGLExtrdFont : public FTFont -{ - public: - /** - * Open and read a font file. Sets Error flag. - * - * @param fontname font file name. - */ - FTGLExtrdFont( const char* fontname); - - /** - * Open and read a font from a buffer in memory. Sets Error flag. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - */ - FTGLExtrdFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - /** - * Destructor - */ - ~FTGLExtrdFont(); - - void Depth( float d) { depth = d;} - - private: - /** - * Construct a FTPolyGlyph. - * - * @param glyphIndex The glyph index NOT the char code. - * @return An FTExtrdGlyph or null on failure. - */ - inline virtual FTGlyph* MakeGlyph( unsigned int glyphIndex); - - float depth; -}; - - -#endif // __FTGLExtrdFont__ - diff --git a/extern/bFTGL/include/FTGLOutlineFont.h b/extern/bFTGL/include/FTGLOutlineFont.h deleted file mode 100644 index a7f4b23092d..00000000000 --- a/extern/bFTGL/include/FTGLOutlineFont.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef __FTGLOutlineFont__ -#define __FTGLOutlineFont__ - - -#include "FTFont.h" -#include "FTGL.h" - -class FTGlyph; - - -/** - * FTGLOutlineFont is a specialisation of the FTFont class for handling - * Vector Outline fonts - * - * @see FTFont - */ -class FTGL_EXPORT FTGLOutlineFont : public FTFont -{ - public: - /** - * Open and read a font file. Sets Error flag. - * - * @param fontname font file name. - */ - FTGLOutlineFont( const char* fontname); - - /** - * Open and read a font from a buffer in memory. Sets Error flag. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - */ - FTGLOutlineFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - /** - * Destructor - */ - ~FTGLOutlineFont(); - - /** - * Renders a string of characters - * - * @param string 'C' style string to be output. - */ - void Render( const char* string); - - /** - * Renders a string of characters - * - * @param string wchar_t string to be output. - */ - void Render( const wchar_t* string); - - private: - /** - * Construct a FTOutlineGlyph. - * - * @param g The glyph index NOT the char code. - * @return An FTOutlineGlyph or null on failure. - */ - inline virtual FTGlyph* MakeGlyph( unsigned int g); - -}; -#endif // __FTGLOutlineFont__ diff --git a/extern/bFTGL/include/FTGLPixmapFont.h b/extern/bFTGL/include/FTGLPixmapFont.h deleted file mode 100644 index f781ddf68dd..00000000000 --- a/extern/bFTGL/include/FTGLPixmapFont.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef __FTGLPixmapFont__ -#define __FTGLPixmapFont__ - - -#include "FTFont.h" -#include "FTGL.h" - - -class FTGlyph; - - -/** - * FTGLPixmapFont is a specialisation of the FTFont class for handling - * Pixmap (Grey Scale) fonts - * - * @see FTFont - */ -class FTGL_EXPORT FTGLPixmapFont : public FTFont -{ - public: - /** - * Open and read a font file. Sets Error flag. - * - * @param fontname font file name. - */ - FTGLPixmapFont( const char* fontname); - - /** - * Open and read a font from a buffer in memory. Sets Error flag. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - */ - FTGLPixmapFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - /** - * Destructor - */ - ~FTGLPixmapFont(); - - /** - * Renders a string of characters - * - * @param string 'C' style string to be output. - */ - void Render( const char* string); - - /** - * Renders a string of characters - * - * @param string wchar_t string to be output. - */ - void Render( const wchar_t* string); - - private: - /** - * Construct a FTPixmapGlyph. - * - * @param g The glyph index NOT the char code. - * @return An FTPixmapGlyph or null on failure. - */ - inline virtual FTGlyph* MakeGlyph( unsigned int g); - -}; - - -#endif // __FTGLPixmapFont__ - diff --git a/extern/bFTGL/include/FTGLPolygonFont.h b/extern/bFTGL/include/FTGLPolygonFont.h deleted file mode 100644 index 54e624a1893..00000000000 --- a/extern/bFTGL/include/FTGLPolygonFont.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef __FTGLPolygonFont__ -#define __FTGLPolygonFont__ - - -#include "FTFont.h" -#include "FTGL.h" - -class FTGlyph; - - -/** - * FTGLPolygonFont is a specialisation of the FTFont class for handling - * tesselated Polygon Mesh fonts - * - * @see FTFont - */ -class FTGL_EXPORT FTGLPolygonFont : public FTFont -{ - public: - /** - * Open and read a font file. Sets Error flag. - * - * @param fontname font file name. - */ - FTGLPolygonFont( const char* fontname); - - /** - * Open and read a font from a buffer in memory. Sets Error flag. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - */ - FTGLPolygonFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - /** - * Destructor - */ - ~FTGLPolygonFont(); - - private: - /** - * Construct a FTPolyGlyph. - * - * @param g The glyph index NOT the char code. - * @return An FTPolyGlyph or null on failure. - */ - inline virtual FTGlyph* MakeGlyph( unsigned int g); - -}; - - -#endif // __FTGLPolygonFont__ - diff --git a/extern/bFTGL/include/FTGLTextureFont.h b/extern/bFTGL/include/FTGLTextureFont.h deleted file mode 100644 index f0575143f4b..00000000000 --- a/extern/bFTGL/include/FTGLTextureFont.h +++ /dev/null @@ -1,151 +0,0 @@ -#ifndef __FTGLTextureFont__ -#define __FTGLTextureFont__ - -#include "FTFont.h" -#include "FTVector.h" -#include "FTGL.h" - -class FTTextureGlyph; - - -/** - * FTGLTextureFont is a specialisation of the FTFont class for handling - * Texture mapped fonts - * - * @see FTFont - */ -class FTGL_EXPORT FTGLTextureFont : public FTFont -{ - public: - /** - * Open and read a font file. Sets Error flag. - * - * @param fontname font file name. - */ - FTGLTextureFont( const char* fontname); - - /** - * Open and read a font from a buffer in memory. Sets Error flag. - * - * @param pBufferBytes the in-memory buffer - * @param bufferSizeInBytes the length of the buffer in bytes - */ - FTGLTextureFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes); - - /** - * Destructor - */ - virtual ~FTGLTextureFont(); - - /** - * Set the char size for the current face. - * - * @param size the face size in points (1/72 inch) - * @param res the resolution of the target device. - * @return true if size was set correctly - */ - virtual bool FaceSize( const unsigned int size, const unsigned int res = 72); - - /** - * Renders a string of characters - * - * @param string 'C' style string to be output. - */ - virtual void Render( const char* string); - - /** - * Renders a string of characters - * - * @param string wchar_t string to be output. - */ - virtual void Render( const wchar_t* string); - - - private: - /** - * Construct a FTTextureGlyph. - * - * @param glyphIndex The glyph index NOT the char code. - * @return An FTTextureGlyph or null on failure. - */ - inline virtual FTGlyph* MakeGlyph( unsigned int glyphIndex); - - /** - * Get the size of a block of memory required to layout the glyphs - * - * Calculates a width and height based on the glyph sizes and the - * number of glyphs. It over estimates. - */ - inline void CalculateTextureSize(); - - /** - * Creates a 'blank' OpenGL texture object. - * - * The format is GL_ALPHA and the params are - * GL_TEXTURE_WRAP_S = GL_CLAMP - * GL_TEXTURE_WRAP_T = GL_CLAMP - * GL_TEXTURE_MAG_FILTER = GL_LINEAR - * GL_TEXTURE_MIN_FILTER = GL_LINEAR - * Note that mipmapping is NOT used - */ - inline GLuint CreateTexture(); - - /** - * The maximum texture dimension on this OpenGL implemetation - */ - GLsizei maxTextSize; - - /** - * The minimum texture width required to hold the glyphs - */ - GLsizei textureWidth; - - /** - * The minimum texture height required to hold the glyphs - */ - GLsizei textureHeight; - - /** - *An array of texture ids - */ - FTVector textureIDList; - - /** - * The max height for glyphs in the current font - */ - int glyphHeight; - - /** - * The max width for glyphs in the current font - */ - int glyphWidth; - - /** - * A value to be added to the height and width to ensure that - * glyphs don't overlap in the texture - */ - unsigned int padding; - - /** - * - */ - unsigned int numGlyphs; - - /** - */ - unsigned int remGlyphs; - - /** - */ - int xOffset; - - /** - */ - int yOffset; - -}; - - -#endif // __FTGLTextureFont__ - - diff --git a/extern/bFTGL/include/FTGlyph.h b/extern/bFTGL/include/FTGlyph.h deleted file mode 100644 index c38d51e728e..00000000000 --- a/extern/bFTGL/include/FTGlyph.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef __FTGlyph__ -#define __FTGlyph__ - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTBBox.h" -#include "FTPoint.h" -#include "FTGL.h" - - -/** - * FTGlyph is the base class for FTGL glyphs. - * - * It provides the interface between Freetype glyphs and their openGL - * renderable counterparts. This is an abstract class and derived classes - * must implement the render function. - * - * @see FTGlyphContainer - * @see FTBBox - * @see FTPoint - * - */ -class FTGL_EXPORT FTGlyph -{ - public: - /** - * Constructor - */ - FTGlyph( FT_GlyphSlot glyph); - - /** - * Destructor - */ - virtual ~FTGlyph(); - - /** - * Renders this glyph at the current pen position. - * - * @param pen The current pen position. - * @return The advance distance for this glyph. - */ - virtual float Render( const FTPoint& pen) = 0; - - /** - * Return the advance width for this glyph. - * - * @return advance width. - */ - float Advance() const { return advance;} - - /** - * Return the bounding box for this glyph. - * - * @return bounding box. - */ - const FTBBox& BBox() const { return bBox;} - - /** - * Queries for errors. - * - * @return The current error code. - */ - FT_Error Error() const { return err;} - - protected: - /** - * The advance distance for this glyph - */ - float advance; - - /** - * The bounding box of this glyph. - */ - FTBBox bBox; - - /** - * Current error code. Zero means no error. - */ - FT_Error err; - - private: - -}; - - -#endif // __FTGlyph__ - diff --git a/extern/bFTGL/include/FTGlyphContainer.h b/extern/bFTGL/include/FTGlyphContainer.h deleted file mode 100644 index de668b61dbd..00000000000 --- a/extern/bFTGL/include/FTGlyphContainer.h +++ /dev/null @@ -1,127 +0,0 @@ -#ifndef __FTGlyphContainer__ -#define __FTGlyphContainer__ - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" -#include "FTBBox.h" -#include "FTPoint.h" -#include "FTVector.h" - -class FTFace; -class FTGlyph; -class FTCharmap; - -/** - * FTGlyphContainer holds the post processed FTGlyph objects. - * - * @see FTGlyph - */ -class FTGL_EXPORT FTGlyphContainer -{ - typedef FTVector GlyphVector; - public: - /** - * Constructor - * - * @param face The Freetype face - */ - FTGlyphContainer( FTFace* face); - - /** - * Destructor - */ - ~FTGlyphContainer(); - - /** - * Sets the character map for the face. - * - * @param encoding the Freetype encoding symbol. See above. - * @return true if charmap was valid - * and set correctly - */ - bool CharMap( FT_Encoding encoding); - - /** - * Get the font index of the input character. - * - * @param characterCode The character code of the requested glyph in the - * current encoding eg apple roman. - * @return The font index for the character. - */ - unsigned int FontIndex( const unsigned int characterCode ) const; - - /** - * Adds a glyph to this glyph list. - * - * @param glyph The FTGlyph to be inserted into the container - * @param characterCode The char code of the glyph NOT the glyph index. - */ - void Add( FTGlyph* glyph, const unsigned int characterCode); - - /** - * Get a glyph from the glyph list - * - * @param characterCode The char code of the glyph NOT the glyph index - * @return An FTGlyph or null is it hasn't been - * loaded. - */ - const FTGlyph* const Glyph( const unsigned int characterCode) const; - - /** - * Get the bounding box for a character. - * @param characterCode The char code of the glyph NOT the glyph index - */ - FTBBox BBox( const unsigned int characterCode) const; - - /** - * Returns the kerned advance width for a glyph. - * - * @param characterCode glyph index of the character - * @param nextCharacterCode the next glyph in a string - * @return advance width - */ - float Advance( const unsigned int characterCode, const unsigned int nextCharacterCode); - - /** - * Renders a character - * @param characterCode the glyph to be Rendered - * @param nextCharacterCode the next glyph in the string. Used for kerning. - * @param penPosition the position to Render the glyph - * @return The distance to advance the pen position after Rendering - */ - FTPoint Render( const unsigned int characterCode, const unsigned int nextCharacterCode, FTPoint penPosition); - - /** - * Queries the Font for errors. - * - * @return The current error code. - */ - FT_Error Error() const { return err;} - - private: - /** - * The FTGL face - */ - FTFace* face; - - /** - * The Character Map object associated with the current face - */ - FTCharmap* charMap; - - /** - * A structure to hold the glyphs - */ - GlyphVector glyphs; - - /** - * Current error code. Zero means no error. - */ - FT_Error err; -}; - - -#endif // __FTGlyphContainer__ diff --git a/extern/bFTGL/include/FTLibrary.h b/extern/bFTGL/include/FTLibrary.h deleted file mode 100644 index 1e5ed6b1a08..00000000000 --- a/extern/bFTGL/include/FTLibrary.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef __FTLibrary__ -#define __FTLibrary__ - -#include -#include FT_FREETYPE_H -//#include FT_CACHE_H - -#include "FTGL.h" - - -/** - * FTLibrary class is the global accessor for the Freetype library. - * - * This class encapsulates the Freetype Library. This is a singleton class - * and ensures that only one FT_Library is in existence at any one time. - * All constructors are private therefore clients cannot create or - * instantiate this class themselves and must access it's methods via the - * static FTLibrary::Instance() function. - * - * Just because this class returns a valid FTLibrary object - * doesn't mean that the Freetype Library has been successfully initialised. - * Clients should check for errors. You can initialse the library AND check - * for errors using the following code... - * err = FTLibrary::Instance().Error(); - * - * @see "Freetype 2 Documentation" - * - */ -class FTGL_EXPORT FTLibrary -{ - public: - /** - * Global acces point to the single FTLibrary object. - * - * @return The global FTLibrary object. - */ - static FTLibrary& Instance(); - - /** - * Gets a pointer to the native Freetype library. - * - * @return A handle to a FreeType library instance. - */ - const FT_Library* const GetLibrary() const { return library;} - - /** - * Queries the library for errors. - * - * @return The current error code. - */ - FT_Error Error() const { return err;} - - /** - * Destructor - * - * Disposes of the Freetype library - */ - ~FTLibrary(); - - private: - /** - * Default constructors. - * - * Made private to stop clients creating there own FTLibrary - * objects. - */ - FTLibrary(); - FTLibrary( const FT_Library&){} - FTLibrary& operator=( const FT_Library&) { return *this; } - - /** - * Initialises the Freetype library - * - * Even though this function indicates success via the return value, - * clients can't see this so must check the error codes. This function - * is only ever called by the default c_stor - * - * @return true if the Freetype library was - * successfully initialised, false - * otherwise. - */ - bool Initialise(); - - /** - * Freetype library handle. - */ - FT_Library* library; -// FTC_Manager* manager; - - /** - * Current error code. Zero means no error. - */ - FT_Error err; - -}; - -#endif // __FTLibrary__ diff --git a/extern/bFTGL/include/FTList.h b/extern/bFTGL/include/FTList.h deleted file mode 100644 index 34992168103..00000000000 --- a/extern/bFTGL/include/FTList.h +++ /dev/null @@ -1,112 +0,0 @@ -#ifndef __FTList__ -#define __FTList__ - -#include "FTGL.h" - -/** -* Provides a non-STL alternative to the STL list - */ -template -class FTGL_EXPORT FTList -{ - public: - typedef FT_LIST_ITEM_TYPE value_type; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef size_t size_type; - - /** - * Constructor - */ - FTList() - : listSize(0), - tail(0) - { - tail = NULL; - head = new Node; - } - - /** - * Destructor - */ - ~FTList() - { - Node* next; - - for( Node *walk = head; walk; walk = next) - { - next = walk->next; - delete walk; - } - } - - /** - * Get the number of items in the list - */ - size_type size() const - { - return listSize; - } - - /** - * Add an item to the end of the list - */ - void push_back( const value_type& item) - { - Node* node = new Node( item); - - if( head->next == NULL) - { - head->next = node; - } - - if( tail) - { - tail->next = node; - } - tail = node; - ++listSize; - } - - /** - * Get the item at the front of the list - */ - reference front() const - { - return head->next->payload; - } - - /** - * Get the item at the end of the list - */ - reference back() const - { - return tail->payload; - } - - private: - struct Node - { - Node() - : next(NULL) - {} - - Node( const value_type& item) - : next(NULL) - { - payload = item; - } - - Node* next; - - value_type payload; - }; - - size_type listSize; - - Node* head; - Node* tail; -}; - -#endif // __FTList__ - diff --git a/extern/bFTGL/include/FTOutlineGlyph.h b/extern/bFTGL/include/FTOutlineGlyph.h deleted file mode 100644 index 7dd0ba042b9..00000000000 --- a/extern/bFTGL/include/FTOutlineGlyph.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef __FTOutlineGlyph__ -#define __FTOutlineGlyph__ - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" -#include "FTGlyph.h" - -class FTVectoriser; - - -/** - * FTOutlineGlyph is a specialisation of FTGlyph for creating outlines. - * - * @see FTGlyphContainer - * @see FTVectoriser - * - */ -class FTGL_EXPORT FTOutlineGlyph : public FTGlyph -{ - public: - /** - * Constructor. Sets the Error to Invalid_Outline if the glyphs isn't an outline. - * - * @param glyph The Freetype glyph to be processed - */ - FTOutlineGlyph( FT_GlyphSlot glyph); - - /** - * Destructor - */ - virtual ~FTOutlineGlyph(); - - /** - * Renders this glyph at the current pen position. - * - * @param pen The current pen position. - * @return The advance distance for this glyph. - */ - virtual float Render( const FTPoint& pen); - - private: - /** - * OpenGL display list - */ - GLuint glList; - -}; - - -#endif // __FTOutlineGlyph__ - diff --git a/extern/bFTGL/include/FTPixmapGlyph.h b/extern/bFTGL/include/FTPixmapGlyph.h deleted file mode 100644 index 9d43d6c58b3..00000000000 --- a/extern/bFTGL/include/FTPixmapGlyph.h +++ /dev/null @@ -1,68 +0,0 @@ -#ifndef __FTPixmapGlyph__ -#define __FTPixmapGlyph__ - - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" -#include "FTGlyph.h" - - -/** - * FTPixmapGlyph is a specialisation of FTGlyph for creating pixmaps. - * - * @see FTGlyphContainer - * - */ -class FTGL_EXPORT FTPixmapGlyph : public FTGlyph -{ - public: - /** - * Constructor - * - * @param glyph The Freetype glyph to be processed - */ - FTPixmapGlyph( FT_GlyphSlot glyph); - - /** - * Destructor - */ - virtual ~FTPixmapGlyph(); - - /** - * Renders this glyph at the current pen position. - * - * @param pen The current pen position. - * @return The advance distance for this glyph. - */ - virtual float Render( const FTPoint& pen); - - // attributes - - private: - /** - * The width of the glyph 'image' - */ - int destWidth; - - /** - * The height of the glyph 'image' - */ - int destHeight; - - /** - * Vector from the pen position to the topleft corner of the pixmap - */ - FTPoint pos; - - /** - * Pointer to the 'image' data - */ - unsigned char* data; - -}; - - -#endif // __FTPixmapGlyph__ diff --git a/extern/bFTGL/include/FTPoint.h b/extern/bFTGL/include/FTPoint.h deleted file mode 100644 index bb1772c4c18..00000000000 --- a/extern/bFTGL/include/FTPoint.h +++ /dev/null @@ -1,85 +0,0 @@ -#ifndef __FTPoint__ -#define __FTPoint__ - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" - -/** - * FTPoint class is a basic 3 dimensional point or vector. - */ -class FTGL_EXPORT FTPoint -{ - public: - /** - * Default constructor. Point is set to zero. - */ - FTPoint() - : x(0), y(0), z(0) - {} - - /** - * Constructor. - * - * @param X - * @param Y - * @param Z - */ - FTPoint( const FTGL_DOUBLE X, const FTGL_DOUBLE Y, const FTGL_DOUBLE Z) - : x(X), y(Y), z(Z) - {} - - /** - * Constructor. This converts an FT_Vector to an FT_Point - * - * @param ft_vector A freetype vector - */ - FTPoint( const FT_Vector& ft_vector) - : x(ft_vector.x), y(ft_vector.y), z(0) - {} - - /** - * Operator += - * - * @param point - * @return this plus point. - */ - FTPoint& operator += ( const FTPoint& point) - { - x += point.x; - y += point.y; - z += point.z; - - return *this; - } - - /** - * Operator == Tests for eqaulity - * - * @param a - * @param b - * @return - */ - friend bool operator == ( const FTPoint &a, const FTPoint &b); - - /** - * Operator != Tests for non equality - * - * @param a - * @param b - * @return - */ - friend bool operator != ( const FTPoint &a, const FTPoint &b); - - /** - * The point data - */ - FTGL_DOUBLE x, y, z; // FIXME make private - - private: -}; - -#endif // __FTPoint__ - diff --git a/extern/bFTGL/include/FTPolyGlyph.h b/extern/bFTGL/include/FTPolyGlyph.h deleted file mode 100644 index c8faeffceb6..00000000000 --- a/extern/bFTGL/include/FTPolyGlyph.h +++ /dev/null @@ -1,55 +0,0 @@ -#ifndef __FTPolyGlyph__ -#define __FTPolyGlyph__ - - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" -#include "FTGlyph.h" - -class FTVectoriser; - -/** - * FTPolyGlyph is a specialisation of FTGlyph for creating tessellated - * polygon glyphs. - * - * @see FTGlyphContainer - * @see FTVectoriser - * - */ -class FTGL_EXPORT FTPolyGlyph : public FTGlyph -{ - public: - /** - * Constructor. Sets the Error to Invalid_Outline if the glyphs isn't an outline. - * - * @param glyph The Freetype glyph to be processed - */ - FTPolyGlyph( FT_GlyphSlot glyph); - - /** - * Destructor - */ - virtual ~FTPolyGlyph(); - - /** - * Renders this glyph at the current pen position. - * - * @param pen The current pen position. - * @return The advance distance for this glyph. - */ - virtual float Render( const FTPoint& pen); - - private: - /** - * OpenGL display list - */ - GLuint glList; - -}; - - -#endif // __FTPolyGlyph__ - diff --git a/extern/bFTGL/include/FTSize.h b/extern/bFTGL/include/FTSize.h deleted file mode 100644 index 31f6bb66db1..00000000000 --- a/extern/bFTGL/include/FTSize.h +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef __FTSize__ -#define __FTSize__ - - -#include -#include FT_FREETYPE_H - -#include "FTGL.h" - - - -/** - * FTSize class provides an abstraction layer for the Freetype Size. - * - * @see "Freetype 2 Documentation" - * - */ -class FTGL_EXPORT FTSize -{ - public: - /** - * Default Constructor - */ - FTSize(); - - /** - * Destructor - */ - virtual ~FTSize(); - - /** - * Sets the char size for the current face. - * - * This doesn't guarantee that the size was set correctly. Clients - * should check errors. - * - * @param face Parent face for this size object - * @param point_size the face size in points (1/72 inch) - * @param x_resolution the horizontal resolution of the target device. - * @param y_resolution the vertical resolution of the target device. - * @return true if the size has been set. Clients should check Error() for more information if this function returns false() - */ - bool CharSize( FT_Face* face, unsigned int point_size, unsigned int x_resolution, unsigned int y_resolution); - - /** - * get the char size for the current face. - * - * @return The char size in points - */ - unsigned int CharSize() const; - - /** - * Gets the global ascender height for the face in pixels. - * - * @return Ascender height - */ - float Ascender() const; - - /** - * Gets the global descender height for the face in pixels. - * - * @return Ascender height - */ - float Descender() const; - - /** - * Gets the global face height for the face. - * - * If the face is scalable this returns the height of the global - * bounding box which ensures that any glyph will be less than or - * equal to this height. If the font isn't scalable there is no - * guarantee that glyphs will not be taller than this value. - * - * @return height in pixels. - */ - float Height() const; - - /** - * Gets the global face width for the face. - * - * If the face is scalable this returns the width of the global - * bounding box which ensures that any glyph will be less than or - * equal to this width. If the font isn't scalable this value is - * the max_advance for the face. - * - * @return width in pixels. - */ - float Width() const; - - /** - * Gets the underline position for the face. - * - * @return underline position in pixels - */ - float Underline() const; - - unsigned int XPixelsPerEm() const; - - unsigned int YPixelsPerEm() const; - - /** - * Queries for errors. - * - * @return The current error code. - */ - FT_Error Error() const { return err; } - - private: - /** - * The current Freetype face that this FTSize object relates to. - */ - FT_Face* ftFace; - - /** - * The Freetype size. - */ - FT_Size ftSize; - - /** - * The size in points. - */ - unsigned int size; - - /** - * Current error code. Zero means no error. - */ - FT_Error err; - -}; - -#endif // __FTSize__ - diff --git a/extern/bFTGL/include/FTTextureGlyph.h b/extern/bFTGL/include/FTTextureGlyph.h deleted file mode 100644 index 389e6f778da..00000000000 --- a/extern/bFTGL/include/FTTextureGlyph.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef __FTTextureGlyph__ -#define __FTTextureGlyph__ - - -#include -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#include "FTGL.h" -#include "FTGlyph.h" - - -/** - * FTTextureGlyph is a specialisation of FTGlyph for creating texture - * glyphs. - * - * @see FTGlyphContainer - * - */ -class FTGL_EXPORT FTTextureGlyph : public FTGlyph -{ - public: - /** - * Constructor - * - * @param glyph The Freetype glyph to be processed - * @param id The id of the texture that this glyph will be - * drawn in - * @param xOffset The x offset into the parent texture to draw - * this glyph - * @param yOffset The y offset into the parent texture to draw - * this glyph - * @param width The width of the parent texture - * @param height The height (number of rows) of the parent texture - */ - FTTextureGlyph( FT_GlyphSlot glyph, int id, int xOffset, int yOffset, GLsizei width, GLsizei height); - - /** - * Destructor - */ - virtual ~FTTextureGlyph(); - - /** - * Renders this glyph at the current pen position. - * - * @param pen The current pen position. - * @return The advance distance for this glyph. - */ - virtual float Render( const FTPoint& pen); - - private: - /** - * The width of the glyph 'image' - */ - int destWidth; - - /** - * The height of the glyph 'image' - */ - int destHeight; - - /** - * Vector from the pen position to the topleft corner of the pixmap - */ - FTPoint pos; - - /** - * The texture co-ords of this glyph within the texture. - */ - FTPoint uv[2]; - - /** - * The texture index that this glyph is contained in. - */ - int glTextureID; - - /** - * The texture index of the currently active texture - * - * We call glGetIntegerv( GL_TEXTURE_2D_BINDING, activeTextureID); - * to get the currently active texture to try to reduce the number - * of texture bind operations - */ - GLint activeTextureID; - -}; - - -#endif // __FTTextureGlyph__ diff --git a/extern/bFTGL/include/FTVector.h b/extern/bFTGL/include/FTVector.h deleted file mode 100644 index 6147f522c08..00000000000 --- a/extern/bFTGL/include/FTVector.h +++ /dev/null @@ -1,190 +0,0 @@ -#ifndef __FTVector__ -#define __FTVector__ - -#include "FTGL.h" - -/** - * Provides a non-STL alternative to the STL vector - */ -template -class FTGL_EXPORT FTVector -{ - public: - typedef FT_VECTOR_ITEM_TYPE value_type; - typedef value_type& reference; - typedef const value_type& const_reference; - typedef value_type* iterator; - typedef const value_type* const_iterator; - typedef size_t size_type; - - FTVector() - { - Capacity = Size = 0; - Items = 0; - } - - - virtual ~FTVector() - { - clear(); - } - - FTVector& operator =(const FTVector& v) - { - reserve(v.capacity()); - - iterator ptr = begin(); - const_iterator vbegin = v.begin(); - const_iterator vend = v.end(); - - while( vbegin != vend) - { - *ptr++ = *vbegin++; - } - - Size = v.size(); - return *this; - } - - size_type size() const - { - return Size; - } - - size_type capacity() const - { - return Capacity; - } - - iterator begin() - { - return Items; - } - - const_iterator begin() const - { - return Items; - } - - iterator end() - { - return begin() + size(); - } - - const_iterator end() const - { - return begin() + size(); - } - - bool empty() const - { - return size() == 0; - } - - reference operator [](size_type pos) - { - return( *(begin() + pos)); - } - - const_reference operator []( size_type pos) const - { - return( *(begin() + pos)); - } - - void clear() - { - if( Capacity) - { - delete [] Items; - Capacity = Size = 0; - Items = 0; - } - } - - void reserve( size_type n) - { - if( capacity() < n) - { - expand(n); - } - } - - void push_back(const value_type& x) - { - if( size() == capacity()) - { - expand(); - } - - ( *this)[size()] = x; - ++Size; - } - - void resize(size_type n, value_type x) - { - if( n == size()) - { - return; - } - - reserve(n); - iterator begin, end; - - if( n >= Size) - { - begin = this->end(); - end = this->begin() + n; - } - else - { - begin = this->begin() + n; - end = this->end(); - } - - while( begin != end) - { - *begin++ = x; - } - - Size = n; - } - - - private: - void expand(size_type capacity_hint = 0) - { - size_type new_capacity =( capacity() == 0) ? 256 : capacity()* 2; - if( capacity_hint) - { - while( new_capacity < capacity_hint) - { - new_capacity *= 2; - } - } - - value_type *new_items = new value_type[new_capacity]; - - iterator begin = this->begin(); - iterator end = this->end(); - value_type *ptr = new_items; - - while( begin != end) - { - *ptr++ = *begin++; - } - - if( Capacity) - { - delete [] Items; - } - - Items = new_items; - Capacity = new_capacity; - } - - size_type Capacity; - size_type Size; - value_type* Items; -}; - -#endif // __FTVector__ diff --git a/extern/bFTGL/include/FTVectoriser.h b/extern/bFTGL/include/FTVectoriser.h deleted file mode 100644 index 7150560ce07..00000000000 --- a/extern/bFTGL/include/FTVectoriser.h +++ /dev/null @@ -1,275 +0,0 @@ -#ifndef __FTVectoriser__ -#define __FTVectoriser__ - - -#include "FTContour.h" -#include "FTList.h" -#include "FTPoint.h" -#include "FTVector.h" -#include "FTGL.h" - - -#ifndef CALLBACK -#define CALLBACK -#endif - - -/** - * FTTesselation captures points that are output by OpenGL's gluTesselator. - */ -class FTGL_EXPORT FTTesselation -{ - public: - /** - * Default constructor - */ - FTTesselation( GLenum m) - : meshType(m) - { - pointList.reserve( 128); - } - - /** - * Destructor - */ - ~FTTesselation() - { - pointList.clear(); - } - - /** - * Add a point to the mesh. - */ - void AddPoint( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z) - { - pointList.push_back( FTPoint( x, y, z)); - } - - /** - * The number of points in this mesh - */ - size_t PointCount() const { return pointList.size();} - - /** - * - */ - const FTPoint& Point( unsigned int index) const { return pointList[index];} - - /** - * Return the OpenGL polygon type. - */ - GLenum PolygonType() const { return meshType;} - - private: - /** - * Points generated by gluTesselator. - */ - typedef FTVector PointVector; - PointVector pointList; - - /** - * OpenGL primitive type from gluTesselator. - */ - GLenum meshType; -}; - - -/** - * FTMesh is a container of FTTesselation's that make up a polygon glyph - */ -class FTGL_EXPORT FTMesh -{ - typedef FTVector TesselationVector; - typedef FTList PointList; - - public: - /** - * Default constructor - */ - FTMesh(); - - /** - * Destructor - */ - ~FTMesh(); - - /** - * - */ - void AddPoint( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z); - - /** - * - */ - FTGL_DOUBLE* Combine( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z); - - /** - * - */ - void Begin( GLenum meshType); - - /** - * - */ - void End(); - - /** - * - */ - void Error( GLenum e) { err = e;} - - /** - * - */ - unsigned int TesselationCount() const { return tesselationList.size();} - - /** - * - */ - const FTTesselation* const Tesselation( unsigned int index) const; - - /** - * - */ - const PointList& TempPointList() const { return tempPointList;} - - /** - * Get the GL ERROR returned by the glu tesselator - */ - GLenum Error() const { return err;} - - private: - /** - * The current sub mesh that we are constructing. - */ - FTTesselation* currentTesselation; - - /** - * Holds each sub mesh that comprises this glyph. - */ - TesselationVector tesselationList; - - /** - * Holds extra points created by gluTesselator. See ftglCombine. - */ - PointList tempPointList; - - /** - * GL ERROR returned by the glu tesselator - */ - GLenum err; - -}; - -const FTGL_DOUBLE FTGL_FRONT_FACING = 1.0; -const FTGL_DOUBLE FTGL_BACK_FACING = -1.0; - -/** - * FTVectoriser class is a helper class that converts font outlines into - * point data. - * - * @see FTExtrdGlyph - * @see FTOutlineGlyph - * @see FTPolyGlyph - * @see FTContour - * @see FTPoint - * - */ -class FTGL_EXPORT FTVectoriser -{ - public: - /** - * Constructor - * - * @param glyph The freetype glyph to be processed - */ - FTVectoriser( const FT_GlyphSlot glyph); - - /** - * Destructor - */ - virtual ~FTVectoriser(); - - /** - * Build an FTMesh from the vector outline data. - * - * @param zNormal The direction of the z axis of the normal - * for this mesh - */ - void MakeMesh( FTGL_DOUBLE zNormal = FTGL_FRONT_FACING); - - /** - * Get the current mesh. - */ - const FTMesh* const GetMesh() const { return mesh;} - - /** - * Get the total count of points in this outline - * - * @return the number of points - */ - size_t PointCount(); - - /** - * Get the count of contours in this outline - * - * @return the number of contours - */ - size_t ContourCount() const { return ftContourCount;} - - /** - * Return a contour at index - * - * @return the number of contours - */ - const FTContour* const Contour( unsigned int index) const; - - /** - * Get the number of points in a specific contour in this outline - * - * @param c The contour index - * @return the number of points in contour[c] - */ - size_t ContourSize( int c) const { return contourList[c]->PointCount();} - - /** - * Get the flag for the tesselation rule for this outline - * - * @return The contour flag - */ - int ContourFlag() const { return contourFlag;} - - private: - /** - * Process the freetype outline data into contours of points - */ - void ProcessContours(); - - /** - * The list of contours in the glyph - */ - FTContour** contourList; - - /** - * A Mesh for tesselations - */ - FTMesh* mesh; - - /** - * The number of contours reported by Freetype - */ - short ftContourCount; - - /** - * A flag indicating the tesselation rule for the glyph - */ - int contourFlag; - - /** - * A Freetype outline - */ - FT_Outline outline; -}; - - -#endif // __FTVectoriser__ diff --git a/extern/bFTGL/license.txt b/extern/bFTGL/license.txt deleted file mode 100644 index b9fd0dbb580..00000000000 --- a/extern/bFTGL/license.txt +++ /dev/null @@ -1,27 +0,0 @@ -FTGL - -Herewith is a license. I've also chucked in a gnu (see COPYING.txt) license -for those that are that way inclined. Basically I want you to use this -software and if you think this license is preventing you from doing so -let me know. - -Copyright (C) 2001-3 Henry Maddocks - -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. diff --git a/extern/bFTGL/make/msvc_7_0/ftgl_static_lib.vcproj b/extern/bFTGL/make/msvc_7_0/ftgl_static_lib.vcproj deleted file mode 100644 index a2dcf685ed2..00000000000 --- a/extern/bFTGL/make/msvc_7_0/ftgl_static_lib.vcproj +++ /dev/null @@ -1,406 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj b/extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj deleted file mode 100644 index eefbecb3653..00000000000 --- a/extern/bFTGL/make/msvc_9_0/ftgl_static_lib.vcproj +++ /dev/null @@ -1,537 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/extern/bFTGL/src/FTBitmapGlyph.cpp b/extern/bFTGL/src/FTBitmapGlyph.cpp deleted file mode 100644 index 5db33f10c79..00000000000 --- a/extern/bFTGL/src/FTBitmapGlyph.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include - -#include "FTBitmapGlyph.h" - -FTBitmapGlyph::FTBitmapGlyph( FT_GlyphSlot glyph) -: FTGlyph( glyph), - destWidth(0), - destHeight(0), - data(0) -{ - err = FT_Render_Glyph( glyph, FT_RENDER_MODE_MONO); - if( err || ft_glyph_format_bitmap != glyph->format) - { - return; - } - - FT_Bitmap bitmap = glyph->bitmap; - - unsigned int srcWidth = bitmap.width; - unsigned int srcHeight = bitmap.rows; - unsigned int srcPitch = bitmap.pitch; - - destWidth = srcWidth; - destHeight = srcHeight; - destPitch = srcPitch; - - if( destWidth && destHeight) - { - data = new unsigned char[destPitch * destHeight]; - unsigned char* dest = data + (( destHeight - 1) * destPitch); - - unsigned char* src = bitmap.buffer; - - for( unsigned int y = 0; y < srcHeight; ++y) - { - memcpy( dest, src, srcPitch); - dest -= destPitch; - src += srcPitch; - } - } - - pos.x = glyph->bitmap_left; - pos.y = static_cast(srcHeight) - glyph->bitmap_top; -} - - -FTBitmapGlyph::~FTBitmapGlyph() -{ - delete [] data; -} - - -float FTBitmapGlyph::Render( const FTPoint& pen) -{ - if( data) - { - glBitmap( 0, 0, 0.0, 0.0, pen.x + pos.x, pen.y - pos.y, (const GLubyte*)0 ); - - glPixelStorei( GL_UNPACK_ROW_LENGTH, destPitch * 8); - glBitmap( destWidth, destHeight, 0.0f, 0.0, 0.0, 0.0, (const GLubyte*)data); - - glBitmap( 0, 0, 0.0, 0.0, -pen.x - pos.x, -pen.y + pos.y, (const GLubyte*)0 ); - } - - return advance; -} diff --git a/extern/bFTGL/src/FTBufferGlyph.cpp b/extern/bFTGL/src/FTBufferGlyph.cpp deleted file mode 100644 index 27310103152..00000000000 --- a/extern/bFTGL/src/FTBufferGlyph.cpp +++ /dev/null @@ -1,59 +0,0 @@ -#include "FTBufferGlyph.h" - -FTBufferGlyph::FTBufferGlyph( FT_GlyphSlot glyph, unsigned char* b) -: FTGlyph( glyph), - destWidth(0), - destHeight(0), - data(0), - buffer(b) -{ - err = FT_Render_Glyph( glyph, FT_RENDER_MODE_NORMAL); - if( err || ft_glyph_format_bitmap != glyph->format) - { - return; - } - - FT_Bitmap bitmap = glyph->bitmap; - - unsigned int srcWidth = bitmap.width; - unsigned int srcHeight = bitmap.rows; - unsigned int srcPitch = bitmap.pitch; - - destWidth = srcWidth; - destHeight = srcHeight; - destPitch = srcPitch; - - if( destWidth && destHeight) - { - data = new unsigned char[destPitch * destHeight]; - unsigned char* dest = data + (( destHeight - 1) * destPitch); - - unsigned char* src = bitmap.buffer; - - for( unsigned int y = 0; y < srcHeight; ++y) - { - memcpy( dest, src, srcPitch); - dest -= destPitch; - src += srcPitch; - } - } - - pos.x = glyph->bitmap_left; - pos.y = srcHeight - glyph->bitmap_top; -} - - -FTBufferGlyph::~FTBufferGlyph() -{ - delete [] data; -} - - -float FTBufferGlyph::Render( const FTPoint& pen) -{ - if( data && buffer) - { - } - - return advance; -} diff --git a/extern/bFTGL/src/FTCharmap.cpp b/extern/bFTGL/src/FTCharmap.cpp deleted file mode 100644 index 00e8cfceca5..00000000000 --- a/extern/bFTGL/src/FTCharmap.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include "FTFace.h" -#include "FTCharmap.h" - - -FTCharmap::FTCharmap( FTFace* face) -: ftFace( *(face->Face())), - err(0) -{ - if( !ftFace->charmap) - { - err = FT_Set_Charmap( ftFace, ftFace->charmaps[0]); - } - - ftEncoding = ftFace->charmap->encoding; -} - - -FTCharmap::~FTCharmap() -{ - charMap.clear(); -} - - -bool FTCharmap::CharMap( FT_Encoding encoding) -{ - if( ftEncoding == encoding) - { - return true; - } - - err = FT_Select_Charmap( ftFace, encoding ); - - if( !err) - { - ftEncoding = encoding; - } - else - { - ftEncoding = ft_encoding_none; - } - - charMap.clear(); - return !err; -} - - -unsigned int FTCharmap::GlyphListIndex( const unsigned int characterCode ) -{ - return charMap.find( characterCode); -} - - -unsigned int FTCharmap::FontIndex( const unsigned int characterCode ) -{ - return FT_Get_Char_Index( ftFace, characterCode); -} - - -void FTCharmap::InsertIndex( const unsigned int characterCode, const unsigned int containerIndex) -{ - charMap.insert( characterCode, containerIndex); -} diff --git a/extern/bFTGL/src/FTContour.cpp b/extern/bFTGL/src/FTContour.cpp deleted file mode 100644 index 6b0cf8a23e1..00000000000 --- a/extern/bFTGL/src/FTContour.cpp +++ /dev/null @@ -1,149 +0,0 @@ -#include "FTContour.h" - -static const float BEZIER_STEP_SIZE = 0.2f; - - -void FTContour::AddPoint( FTPoint point) -{ - if( pointList.empty() || point != pointList[pointList.size() - 1]) - { - pointList.push_back( point); - } -} - - -void FTContour::AddPoint( float x, float y) -{ - AddPoint( FTPoint( x, y, 0.0f)); -} - - -void FTContour::evaluateQuadraticCurve() -{ - for( unsigned int i = 0; i <= ( 1.0f / BEZIER_STEP_SIZE); i++) - { - float bezierValues[2][2]; - - float t = static_cast(i) * BEZIER_STEP_SIZE; - - bezierValues[0][0] = (1.0f - t) * controlPoints[0][0] + t * controlPoints[1][0]; - bezierValues[0][1] = (1.0f - t) * controlPoints[0][1] + t * controlPoints[1][1]; - - bezierValues[1][0] = (1.0f - t) * controlPoints[1][0] + t * controlPoints[2][0]; - bezierValues[1][1] = (1.0f - t) * controlPoints[1][1] + t * controlPoints[2][1]; - - bezierValues[0][0] = (1.0f - t) * bezierValues[0][0] + t * bezierValues[1][0]; - bezierValues[0][1] = (1.0f - t) * bezierValues[0][1] + t * bezierValues[1][1]; - - AddPoint( bezierValues[0][0], bezierValues[0][1]); - } -} - -void FTContour::evaluateCubicCurve() -{ - for( unsigned int i = 0; i <= ( 1.0f / BEZIER_STEP_SIZE); i++) - { - float bezierValues[3][2]; - - float t = static_cast(i) * BEZIER_STEP_SIZE; - - bezierValues[0][0] = (1.0f - t) * controlPoints[0][0] + t * controlPoints[1][0]; - bezierValues[0][1] = (1.0f - t) * controlPoints[0][1] + t * controlPoints[1][1]; - - bezierValues[1][0] = (1.0f - t) * controlPoints[1][0] + t * controlPoints[2][0]; - bezierValues[1][1] = (1.0f - t) * controlPoints[1][1] + t * controlPoints[2][1]; - - bezierValues[2][0] = (1.0f - t) * controlPoints[2][0] + t * controlPoints[3][0]; - bezierValues[2][1] = (1.0f - t) * controlPoints[2][1] + t * controlPoints[3][1]; - - bezierValues[0][0] = (1.0f - t) * bezierValues[0][0] + t * bezierValues[1][0]; - bezierValues[0][1] = (1.0f - t) * bezierValues[0][1] + t * bezierValues[1][1]; - - bezierValues[1][0] = (1.0f - t) * bezierValues[1][0] + t * bezierValues[2][0]; - bezierValues[1][1] = (1.0f - t) * bezierValues[1][1] + t * bezierValues[2][1]; - - bezierValues[0][0] = (1.0f - t) * bezierValues[0][0] + t * bezierValues[1][0]; - bezierValues[0][1] = (1.0f - t) * bezierValues[0][1] + t * bezierValues[1][1]; - - AddPoint( bezierValues[0][0], bezierValues[0][1]); - } -} - - -FTContour::FTContour( FT_Vector* contour, char* pointTags, unsigned int numberOfPoints) -{ - for( unsigned int pointIndex = 0; pointIndex < numberOfPoints; ++ pointIndex) - { - char pointTag = pointTags[pointIndex]; - - if( pointTag == FT_Curve_Tag_On || numberOfPoints < 2) - { - AddPoint( contour[pointIndex].x, contour[pointIndex].y); - continue; - } - - FTPoint controlPoint( contour[pointIndex]); - FTPoint previousPoint = ( 0 == pointIndex) - ? FTPoint( contour[numberOfPoints - 1]) - : pointList[pointList.size() - 1]; - - FTPoint nextPoint = ( pointIndex == numberOfPoints - 1) - ? pointList[0] - : FTPoint( contour[pointIndex + 1]); - - if( pointTag == FT_Curve_Tag_Conic) - { - char nextPointTag = ( pointIndex == numberOfPoints - 1) - ? pointTags[0] - : pointTags[pointIndex + 1]; - - while( nextPointTag == FT_Curve_Tag_Conic) - { - nextPoint = FTPoint( static_cast( controlPoint.x + nextPoint.x) * 0.5f, - static_cast( controlPoint.y + nextPoint.y) * 0.5f, - 0); - - controlPoints[0][0] = previousPoint.x; controlPoints[0][1] = previousPoint.y; - controlPoints[1][0] = controlPoint.x; controlPoints[1][1] = controlPoint.y; - controlPoints[2][0] = nextPoint.x; controlPoints[2][1] = nextPoint.y; - - evaluateQuadraticCurve(); - ++pointIndex; - - previousPoint = nextPoint; - controlPoint = FTPoint( contour[pointIndex]); - nextPoint = ( pointIndex == numberOfPoints - 1) - ? pointList[0] - : FTPoint( contour[pointIndex + 1]); - nextPointTag = ( pointIndex == numberOfPoints - 1) - ? pointTags[0] - : pointTags[pointIndex + 1]; - } - - controlPoints[0][0] = previousPoint.x; controlPoints[0][1] = previousPoint.y; - controlPoints[1][0] = controlPoint.x; controlPoints[1][1] = controlPoint.y; - controlPoints[2][0] = nextPoint.x; controlPoints[2][1] = nextPoint.y; - - evaluateQuadraticCurve(); - continue; - } - - if( pointTag == FT_Curve_Tag_Cubic) - { - FTPoint controlPoint2 = nextPoint; - - FTPoint nextPoint = ( pointIndex == numberOfPoints - 2) - ? pointList[0] - : FTPoint( contour[pointIndex + 2]); - - controlPoints[0][0] = previousPoint.x; controlPoints[0][1] = previousPoint.y; - controlPoints[1][0] = controlPoint.x; controlPoints[1][1] = controlPoint.y; - controlPoints[2][0] = controlPoint2.x; controlPoints[2][1] = controlPoint2.y; - controlPoints[3][0] = nextPoint.x; controlPoints[3][1] = nextPoint.y; - - evaluateCubicCurve(); - ++pointIndex; - continue; - } - } -} diff --git a/extern/bFTGL/src/FTExtrdGlyph.cpp b/extern/bFTGL/src/FTExtrdGlyph.cpp deleted file mode 100644 index 0b120e68709..00000000000 --- a/extern/bFTGL/src/FTExtrdGlyph.cpp +++ /dev/null @@ -1,141 +0,0 @@ -#include - -#include "FTExtrdGlyph.h" -#include "FTVectoriser.h" - - -FTExtrdGlyph::FTExtrdGlyph( FT_GlyphSlot glyph, float d) -: FTGlyph( glyph), - glList(0), - depth(d) -{ - bBox.SetDepth( -depth); - - if( ft_glyph_format_outline != glyph->format) - { - err = 0x14; // Invalid_Outline - return; - } - - FTVectoriser vectoriser( glyph); - if ( ( vectoriser.ContourCount() < 1) || ( vectoriser.PointCount() < 3)) - { - return; - } - - unsigned int tesselationIndex; - glList = glGenLists(1); - glNewList( glList, GL_COMPILE); - - vectoriser.MakeMesh( 1.0); - glNormal3d(0.0, 0.0, 1.0); - - const FTMesh* mesh = vectoriser.GetMesh(); - for( tesselationIndex = 0; tesselationIndex < mesh->TesselationCount(); ++tesselationIndex) - { - const FTTesselation* subMesh = mesh->Tesselation( tesselationIndex); - unsigned int polyonType = subMesh->PolygonType(); - - glBegin( polyonType); - for( unsigned int pointIndex = 0; pointIndex < subMesh->PointCount(); ++pointIndex) - { - glVertex3f( subMesh->Point( pointIndex).x / 64.0f, - subMesh->Point( pointIndex).y / 64.0f, - 0.0f); - } - glEnd(); - } - - vectoriser.MakeMesh( -1.0); - glNormal3d(0.0, 0.0, -1.0); - - mesh = vectoriser.GetMesh(); - for( tesselationIndex = 0; tesselationIndex < mesh->TesselationCount(); ++tesselationIndex) - { - const FTTesselation* subMesh = mesh->Tesselation( tesselationIndex); - unsigned int polyonType = subMesh->PolygonType(); - - glBegin( polyonType); - for( unsigned int pointIndex = 0; pointIndex < subMesh->PointCount(); ++pointIndex) - { - glVertex3f( subMesh->Point( pointIndex).x / 64.0f, - subMesh->Point( pointIndex).y / 64.0f, - -depth); - } - glEnd(); - } - - int contourFlag = vectoriser.ContourFlag(); - - for( size_t c = 0; c < vectoriser.ContourCount(); ++c) - { - const FTContour* contour = vectoriser.Contour(c); - unsigned int numberOfPoints = contour->PointCount(); - - glBegin( GL_QUAD_STRIP); - for( unsigned int j = 0; j <= numberOfPoints; ++j) - { - unsigned int index = ( j == numberOfPoints) ? 0 : j; - unsigned int nextIndex = ( index == numberOfPoints - 1) ? 0 : index + 1; - - FTPoint normal = GetNormal( contour->Point(index), contour->Point(nextIndex)); - glNormal3f( normal.x, normal.y, 0.0f); - - if( contourFlag & ft_outline_reverse_fill) - { - glVertex3f( contour->Point(index).x / 64.0f, contour->Point(index).y / 64.0f, 0.0f); - glVertex3f( contour->Point(index).x / 64.0f, contour->Point(index).y / 64.0f, -depth); - } - else - { - glVertex3f( contour->Point(index).x / 64.0f, contour->Point(index).y / 64.0f, -depth); - glVertex3f( contour->Point(index).x / 64.0f, contour->Point(index).y / 64.0f, 0.0f); - } - } - glEnd(); - } - - glEndList(); -} - - -FTExtrdGlyph::~FTExtrdGlyph() -{ - glDeleteLists( glList, 1); -} - - -float FTExtrdGlyph::Render( const FTPoint& pen) -{ - if( glList) - { - glTranslatef( pen.x, pen.y, 0); - glCallList( glList); - glTranslatef( -pen.x, -pen.y, 0); - } - - return advance; -} - - -FTPoint FTExtrdGlyph::GetNormal( const FTPoint &a, const FTPoint &b) -{ - float vectorX = a.x - b.x; - float vectorY = a.y - b.y; - - float length = sqrt( vectorX * vectorX + vectorY * vectorY ); - - if( length > 0.0f) - { - length = 1 / length; - } - else - { - length = 0.0f; - } - - return FTPoint( -vectorY * length, - vectorX * length, - 0.0f); -} - diff --git a/extern/bFTGL/src/FTFace.cpp b/extern/bFTGL/src/FTFace.cpp deleted file mode 100644 index 0385e234d6c..00000000000 --- a/extern/bFTGL/src/FTFace.cpp +++ /dev/null @@ -1,154 +0,0 @@ -#include "FTFace.h" -#include "FTLibrary.h" - -#include FT_TRUETYPE_TABLES_H - -FTFace::FTFace( const char* filename) -: numGlyphs(0), - fontEncodingList(0), - err(0) -{ - const FT_Long DEFAULT_FACE_INDEX = 0; - ftFace = new FT_Face; - - err = FT_New_Face( *FTLibrary::Instance().GetLibrary(), filename, DEFAULT_FACE_INDEX, ftFace); - - if( err) - { - delete ftFace; - ftFace = 0; - } - else - { - numGlyphs = (*ftFace)->num_glyphs; - } -} - - -FTFace::FTFace( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -: numGlyphs(0), - err(0) -{ - const FT_Long DEFAULT_FACE_INDEX = 0; - ftFace = new FT_Face; - - err = FT_New_Memory_Face( *FTLibrary::Instance().GetLibrary(), (FT_Byte *)pBufferBytes, bufferSizeInBytes, DEFAULT_FACE_INDEX, ftFace); - - if( err) - { - delete ftFace; - ftFace = 0; - } - else - { - numGlyphs = (*ftFace)->num_glyphs; - } -} - - -FTFace::~FTFace() -{ - Close(); -} - - -bool FTFace::Attach( const char* filename) -{ - err = FT_Attach_File( *ftFace, filename); - return !err; -} - - -bool FTFace::Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -{ - FT_Open_Args open; - - open.flags = FT_OPEN_MEMORY; - open.memory_base = (FT_Byte *)pBufferBytes; - open.memory_size = bufferSizeInBytes; - - err = FT_Attach_Stream( *ftFace, &open); - return !err; -} - - -void FTFace::Close() -{ - if( ftFace) - { - FT_Done_Face( *ftFace); - delete ftFace; - ftFace = 0; - } -} - - -const FTSize& FTFace::Size( const unsigned int size, const unsigned int res) -{ - charSize.CharSize( ftFace, size, res, res); - err = charSize.Error(); - - return charSize; -} - - -unsigned int FTFace::CharMapCount() -{ - return (*ftFace)->num_charmaps; -} - - -FT_Encoding* FTFace::CharMapList() -{ - if( 0 == fontEncodingList) - { - fontEncodingList = new FT_Encoding[CharMapCount()]; - for( size_t encodingIndex = 0; encodingIndex < CharMapCount(); ++encodingIndex) - { - fontEncodingList[encodingIndex] = (*ftFace)->charmaps[encodingIndex]->encoding; - } - } - - return fontEncodingList; -} - - -unsigned int FTFace::UnitsPerEM() const -{ - return (*ftFace)->units_per_EM; -} - - -FTPoint FTFace::KernAdvance( unsigned int index1, unsigned int index2) -{ - float x, y; - x = y = 0.0f; - - if( FT_HAS_KERNING((*ftFace)) && index1 && index2) - { - FT_Vector kernAdvance; - kernAdvance.x = kernAdvance.y = 0; - - err = FT_Get_Kerning( *ftFace, index1, index2, ft_kerning_unfitted, &kernAdvance); - if( !err) - { - x = static_cast( kernAdvance.x) / 64.0f; - y = static_cast( kernAdvance.y) / 64.0f; - } - } - - return FTPoint( x, y, 0.0); -} - - -FT_GlyphSlot FTFace::Glyph( unsigned int index, FT_Int load_flags) -{ - err = FT_Load_Glyph( *ftFace, index, load_flags); - if( err) - { - return NULL; - } - - return (*ftFace)->glyph; -} - diff --git a/extern/bFTGL/src/FTFont.cpp b/extern/bFTGL/src/FTFont.cpp deleted file mode 100644 index c06d883104b..00000000000 --- a/extern/bFTGL/src/FTFont.cpp +++ /dev/null @@ -1,271 +0,0 @@ -#include "FTFace.h" -#include "FTFont.h" -#include "FTGlyphContainer.h" -#include "FTBBox.h" - - -FTFont::FTFont( const char* fontname) -: face( fontname), - glyphList(0) -{ - err = face.Error(); - if( err == 0) - { - glyphList = new FTGlyphContainer( &face); - } -} - - -FTFont::FTFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -: face( pBufferBytes, bufferSizeInBytes), - glyphList(0) -{ - err = face.Error(); - if( err == 0) - { - glyphList = new FTGlyphContainer( &face); - } -} - - -FTFont::~FTFont() -{ - delete glyphList; -} - - -bool FTFont::Attach( const char* filename) -{ - if( face.Attach( filename)) - { - err = 0; - return true; - } - else - { - err = face.Error(); - return false; - } -} - - -bool FTFont::Attach( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -{ - if( face.Attach( pBufferBytes, bufferSizeInBytes)) - { - err = 0; - return true; - } - else - { - err = face.Error(); - return false; - } -} - - -bool FTFont::FaceSize( const unsigned int size, const unsigned int res ) -{ - charSize = face.Size( size, res); - - if( face.Error()) - { - return false; - } - - if( glyphList != NULL) - { - delete glyphList; - } - - glyphList = new FTGlyphContainer( &face); - return true; -} - - -unsigned int FTFont::FaceSize() const -{ - return charSize.CharSize(); -} - - -bool FTFont::CharMap( FT_Encoding encoding) -{ - bool result = glyphList->CharMap( encoding); - err = glyphList->Error(); - return result; -} - - -unsigned int FTFont::CharMapCount() -{ - return face.CharMapCount(); -} - - -FT_Encoding* FTFont::CharMapList() -{ - return face.CharMapList(); -} - - -float FTFont::Ascender() const -{ - return charSize.Ascender(); -} - - -float FTFont::Descender() const -{ - return charSize.Descender(); -} - - -void FTFont::BBox( const char* string, - float& llx, float& lly, float& llz, float& urx, float& ury, float& urz) -{ - FTBBox totalBBox; - - if((NULL != string) && ('\0' != *string)) - { - const unsigned char* c = (unsigned char*)string; - - CheckGlyph( *c); - - totalBBox = glyphList->BBox( *c); - float advance = glyphList->Advance( *c, *(c + 1)); - ++c; - - while( *c) - { - CheckGlyph( *c); - FTBBox tempBBox = glyphList->BBox( *c); - tempBBox.Move( FTPoint( advance, 0.0f, 0.0f)); - totalBBox += tempBBox; - advance += glyphList->Advance( *c, *(c + 1)); - ++c; - } - } - - llx = totalBBox.lowerX; - lly = totalBBox.lowerY; - llz = totalBBox.lowerZ; - urx = totalBBox.upperX; - ury = totalBBox.upperY; - urz = totalBBox.upperZ; -} - - -void FTFont::BBox( const wchar_t* string, - float& llx, float& lly, float& llz, float& urx, float& ury, float& urz) -{ - FTBBox totalBBox; - - if((NULL != string) && ('\0' != *string)) - { - const wchar_t* c = string; - - CheckGlyph( *c); - - totalBBox = glyphList->BBox( *c); - float advance = glyphList->Advance( *c, *(c + 1)); - ++c; - - while( *c) - { - CheckGlyph( *c); - FTBBox tempBBox = glyphList->BBox( *c); - tempBBox.Move( FTPoint( advance, 0.0f, 0.0f)); - totalBBox += tempBBox; - advance += glyphList->Advance( *c, *(c + 1)); - ++c; - } - } - - llx = totalBBox.lowerX; - lly = totalBBox.lowerY; - llz = totalBBox.lowerZ; - urx = totalBBox.upperX; - ury = totalBBox.upperY; - urz = totalBBox.upperZ; -} - - -float FTFont::Advance( const wchar_t* string) -{ - const wchar_t* c = string; - float width = 0.0f; - - while( *c) - { - CheckGlyph( *c); - width += glyphList->Advance( *c, *(c + 1)); - ++c; - } - - return width; -} - - -float FTFont::Advance( const char* string) -{ - const unsigned char* c = (unsigned char*)string; - float width = 0.0f; - - while( *c) - { - CheckGlyph( *c); - width += glyphList->Advance( *c, *(c + 1)); - ++c; - } - - return width; -} - - -void FTFont::Render( const char* string ) -{ - const unsigned char* c = (unsigned char*)string; - pen.x = 0; pen.y = 0; - - while( *c) - { - DoRender( *c, *(c + 1)); - ++c; - } -} - - -void FTFont::Render( const wchar_t* string ) -{ - const wchar_t* c = string; - pen.x = 0; pen.y = 0; - - while( *c) - { - DoRender( *c, *(c + 1)); - ++c; - } -} - - -void FTFont::DoRender( const unsigned int chr, const unsigned int nextChr) -{ - CheckGlyph( chr); - - FTPoint kernAdvance = glyphList->Render( chr, nextChr, pen); - - pen.x += kernAdvance.x; - pen.y += kernAdvance.y; -} - - -void FTFont::CheckGlyph( const unsigned int characterCode) -{ - if( NULL == glyphList->Glyph( characterCode)) - { - unsigned int glyphIndex = glyphList->FontIndex( characterCode); - glyphList->Add( MakeGlyph( glyphIndex), characterCode); - } -} - diff --git a/extern/bFTGL/src/FTGLBitmapFont.cpp b/extern/bFTGL/src/FTGLBitmapFont.cpp deleted file mode 100644 index 7e982a608da..00000000000 --- a/extern/bFTGL/src/FTGLBitmapFont.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "FTGLBitmapFont.h" -#include "FTBitmapGlyph.h" - - -FTGLBitmapFont::FTGLBitmapFont( const char* fontname) -: FTFont( fontname) -{} - - -FTGLBitmapFont::FTGLBitmapFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -: FTFont( pBufferBytes, bufferSizeInBytes) -{} - - -FTGLBitmapFont::~FTGLBitmapFont() -{} - - -FTGlyph* FTGLBitmapFont::MakeGlyph( unsigned int g) -{ - FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_DEFAULT); - - if( ftGlyph) - { - FTBitmapGlyph* tempGlyph = new FTBitmapGlyph( ftGlyph); - return tempGlyph; - } - - err = face.Error(); - return NULL; -} - - -void FTGLBitmapFont::Render( const char* string) -{ - glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT); - glPushAttrib( GL_ENABLE_BIT); - - glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE); - glPixelStorei( GL_UNPACK_ALIGNMENT, 1); - - glDisable( GL_BLEND); - - FTFont::Render( string); - - glPopAttrib(); - glPopClientAttrib(); -} - - -void FTGLBitmapFont::Render( const wchar_t* string) -{ - glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT); - glPushAttrib( GL_ENABLE_BIT); - - glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE); - glPixelStorei( GL_UNPACK_ALIGNMENT, 1); - - glDisable( GL_BLEND); - - FTFont::Render( string); - - glPopAttrib(); - glPopClientAttrib(); -} - diff --git a/extern/bFTGL/src/FTGLBufferFont.cpp b/extern/bFTGL/src/FTGLBufferFont.cpp deleted file mode 100644 index b8af0fcb05f..00000000000 --- a/extern/bFTGL/src/FTGLBufferFont.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "FTGLBufferFont.h" -#include "FTBufferGlyph.h" - - -FTGLBufferFont::FTGLBufferFont( const char* fontname) -: FTFont( fontname), - buffer(0) -{} - - -FTGLBufferFont::FTGLBufferFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -: FTFont( pBufferBytes, bufferSizeInBytes), - buffer(0) -{} - - -FTGLBufferFont::~FTGLBufferFont() -{} - - -FTGlyph* FTGLBufferFont::MakeGlyph( unsigned int g) -{ - FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING); - - if( ftGlyph) - { - FTBufferGlyph* tempGlyph = new FTBufferGlyph( ftGlyph, buffer); - return tempGlyph; - } - - err = face.Error(); - return NULL; -} - - -void FTGLBufferFont::Render( const char* string) -{ - if( NULL != buffer) - { - FTFont::Render( string); - } -} - - -void FTGLBufferFont::Render( const wchar_t* string) -{ - if( NULL != buffer) - { - FTFont::Render( string); - } -} - - diff --git a/extern/bFTGL/src/FTGLExtrdFont.cpp b/extern/bFTGL/src/FTGLExtrdFont.cpp deleted file mode 100644 index 37d89333a60..00000000000 --- a/extern/bFTGL/src/FTGLExtrdFont.cpp +++ /dev/null @@ -1,35 +0,0 @@ -#include "FTGLExtrdFont.h" -#include "FTExtrdGlyph.h" - - -FTGLExtrdFont::FTGLExtrdFont( const char* fontname) -: FTFont( fontname), - depth( 0.0f) -{} - - -FTGLExtrdFont::FTGLExtrdFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -: FTFont( pBufferBytes, bufferSizeInBytes), - depth( 0.0f) -{} - - -FTGLExtrdFont::~FTGLExtrdFont() -{} - - -FTGlyph* FTGLExtrdFont::MakeGlyph( unsigned int glyphIndex) -{ - FT_GlyphSlot ftGlyph = face.Glyph( glyphIndex, FT_LOAD_NO_HINTING); - - if( ftGlyph) - { - FTExtrdGlyph* tempGlyph = new FTExtrdGlyph( ftGlyph, depth); - return tempGlyph; - } - - err = face.Error(); - return NULL; -} - - diff --git a/extern/bFTGL/src/FTGLOutlineFont.cpp b/extern/bFTGL/src/FTGLOutlineFont.cpp deleted file mode 100644 index b9fd187e862..00000000000 --- a/extern/bFTGL/src/FTGLOutlineFont.cpp +++ /dev/null @@ -1,66 +0,0 @@ -#include "FTGLOutlineFont.h" -#include "FTOutlineGlyph.h" - - -FTGLOutlineFont::FTGLOutlineFont( const char* fontname) -: FTFont( fontname) -{} - - -FTGLOutlineFont::FTGLOutlineFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -: FTFont( pBufferBytes, bufferSizeInBytes) -{} - - -FTGLOutlineFont::~FTGLOutlineFont() -{} - - -FTGlyph* FTGLOutlineFont::MakeGlyph( unsigned int g) -{ - FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING); - - if( ftGlyph) - { - FTOutlineGlyph* tempGlyph = new FTOutlineGlyph( ftGlyph); - return tempGlyph; - } - - err = face.Error(); - return NULL; -} - - -void FTGLOutlineFont::Render( const char* string) -{ - glPushAttrib( GL_ENABLE_BIT | GL_HINT_BIT | GL_LINE_BIT | GL_COLOR_BUFFER_BIT); - - glDisable( GL_TEXTURE_2D); - - glEnable( GL_LINE_SMOOTH); - glHint( GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glEnable(GL_BLEND); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE - - FTFont::Render( string); - - glPopAttrib(); -} - - -void FTGLOutlineFont::Render( const wchar_t* string) -{ - glPushAttrib( GL_ENABLE_BIT | GL_HINT_BIT | GL_LINE_BIT | GL_COLOR_BUFFER_BIT); - - glDisable( GL_TEXTURE_2D); - - glEnable( GL_LINE_SMOOTH); - glHint( GL_LINE_SMOOTH_HINT, GL_DONT_CARE); - glEnable(GL_BLEND); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE - - FTFont::Render( string); - - glPopAttrib(); -} - diff --git a/extern/bFTGL/src/FTGLPixmapFont.cpp b/extern/bFTGL/src/FTGLPixmapFont.cpp deleted file mode 100644 index 2654b85e31e..00000000000 --- a/extern/bFTGL/src/FTGLPixmapFont.cpp +++ /dev/null @@ -1,68 +0,0 @@ -#include "FTGLPixmapFont.h" -#include "FTPixmapGlyph.h" - - -FTGLPixmapFont::FTGLPixmapFont( const char* fontname) -: FTFont( fontname) -{} - - -FTGLPixmapFont::FTGLPixmapFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -: FTFont( pBufferBytes, bufferSizeInBytes) -{} - - -FTGLPixmapFont::~FTGLPixmapFont() -{} - - -FTGlyph* FTGLPixmapFont::MakeGlyph( unsigned int g) -{ - FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); - - if( ftGlyph) - { - FTPixmapGlyph* tempGlyph = new FTPixmapGlyph( ftGlyph); - return tempGlyph; - } - - err = face.Error(); - return NULL; -} - - -void FTGLPixmapFont::Render( const char* string) -{ - glPushAttrib( GL_ENABLE_BIT | GL_PIXEL_MODE_BIT | GL_COLOR_BUFFER_BIT); - glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT); - - glEnable(GL_BLEND); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glDisable( GL_TEXTURE_2D); - - FTFont::Render( string); - - glPopClientAttrib(); - glPopAttrib(); -} - - -void FTGLPixmapFont::Render( const wchar_t* string) -{ - //glPushAttrib( GL_ENABLE_BIT | GL_PIXEL_MODE_BIT | GL_COLOR_BUFFER_BIT); - // glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT); - - glEnable(GL_BLEND); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glDisable( GL_TEXTURE_2D); - - FTFont::Render( string); - - glDisable(GL_BLEND); - // glPopClientAttrib(); - // glPopAttrib(); -} - - diff --git a/extern/bFTGL/src/FTGLPolygonFont.cpp b/extern/bFTGL/src/FTGLPolygonFont.cpp deleted file mode 100644 index 2d4dfa1f26a..00000000000 --- a/extern/bFTGL/src/FTGLPolygonFont.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "FTGLPolygonFont.h" -#include "FTPolyGlyph.h" - - -FTGLPolygonFont::FTGLPolygonFont( const char* fontname) -: FTFont( fontname) -{} - - -FTGLPolygonFont::FTGLPolygonFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -: FTFont( pBufferBytes, bufferSizeInBytes) -{} - - -FTGLPolygonFont::~FTGLPolygonFont() -{} - - -FTGlyph* FTGLPolygonFont::MakeGlyph( unsigned int g) -{ - FT_GlyphSlot ftGlyph = face.Glyph( g, FT_LOAD_NO_HINTING); - - if( ftGlyph) - { - FTPolyGlyph* tempGlyph = new FTPolyGlyph( ftGlyph); - return tempGlyph; - } - - err = face.Error(); - return NULL; -} - - diff --git a/extern/bFTGL/src/FTGLTextureFont.cpp b/extern/bFTGL/src/FTGLTextureFont.cpp deleted file mode 100644 index 92f14be50f2..00000000000 --- a/extern/bFTGL/src/FTGLTextureFont.cpp +++ /dev/null @@ -1,178 +0,0 @@ -#include // For memset - -#include "FTGLTextureFont.h" -#include "FTTextureGlyph.h" - - -inline GLuint NextPowerOf2( GLuint in) -{ - in -= 1; - - in |= in >> 16; - in |= in >> 8; - in |= in >> 4; - in |= in >> 2; - in |= in >> 1; - - return in + 1; -} - - -FTGLTextureFont::FTGLTextureFont( const char* fontname) -: FTFont( fontname), - maxTextSize(0), - textureWidth(0), - textureHeight(0), - glyphHeight(0), - glyphWidth(0), - padding(3), - xOffset(0), - yOffset(0) -{ - remGlyphs = numGlyphs = face.GlyphCount(); -} - - -FTGLTextureFont::FTGLTextureFont( const unsigned char *pBufferBytes, size_t bufferSizeInBytes) -: FTFont( pBufferBytes, bufferSizeInBytes), - maxTextSize(0), - textureWidth(0), - textureHeight(0), - glyphHeight(0), - glyphWidth(0), - padding(3), - xOffset(0), - yOffset(0) -{ - remGlyphs = numGlyphs = face.GlyphCount(); -} - - -FTGLTextureFont::~FTGLTextureFont() -{ - glDeleteTextures( textureIDList.size(), (const GLuint*)&textureIDList[0]); -} - - -FTGlyph* FTGLTextureFont::MakeGlyph( unsigned int glyphIndex) -{ - FT_GlyphSlot ftGlyph = face.Glyph( glyphIndex, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); - - if( ftGlyph) - { - glyphHeight = static_cast( charSize.Height()); - glyphWidth = static_cast( charSize.Width()); - - if( textureIDList.empty()) - { - textureIDList.push_back( CreateTexture()); - xOffset = yOffset = padding; - } - - if( xOffset > ( textureWidth - glyphWidth)) - { - xOffset = padding; - yOffset += glyphHeight; - - if( yOffset > ( textureHeight - glyphHeight)) - { - textureIDList.push_back( CreateTexture()); - yOffset = padding; - } - } - - FTTextureGlyph* tempGlyph = new FTTextureGlyph( ftGlyph, textureIDList[textureIDList.size() - 1], - xOffset, yOffset, textureWidth, textureHeight); - xOffset += static_cast( tempGlyph->BBox().upperX - tempGlyph->BBox().lowerX + padding); - - --remGlyphs; - return tempGlyph; - } - - err = face.Error(); - return NULL; -} - - -void FTGLTextureFont::CalculateTextureSize() -{ - if( !maxTextSize) - { - glGetIntegerv( GL_MAX_TEXTURE_SIZE, (GLint*)&maxTextSize); - } - - textureWidth = NextPowerOf2( (remGlyphs * glyphWidth) + ( padding * 2)); - if( textureWidth > maxTextSize) - { - textureWidth = maxTextSize; - } - - int h = static_cast( (textureWidth - ( padding * 2)) / glyphWidth); - - textureHeight = NextPowerOf2( (( numGlyphs / h) + 1) * glyphHeight); - textureHeight = textureHeight > maxTextSize ? maxTextSize : textureHeight; -} - - -GLuint FTGLTextureFont::CreateTexture() -{ - CalculateTextureSize(); - - int totalMemory = textureWidth * textureHeight; - unsigned char* textureMemory = new unsigned char[totalMemory]; - memset( textureMemory, 0, totalMemory); - - GLuint textID; - glGenTextures( 1, (GLuint*)&textID); - - glBindTexture( GL_TEXTURE_2D, textID); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - - glTexImage2D( GL_TEXTURE_2D, 0, GL_ALPHA, textureWidth, textureHeight, 0, GL_ALPHA, GL_UNSIGNED_BYTE, textureMemory); - - delete [] textureMemory; - - return textID; -} - - -bool FTGLTextureFont::FaceSize( const unsigned int size, const unsigned int res) -{ - if( !textureIDList.empty()) - { - glDeleteTextures( textureIDList.size(), (const GLuint*)&textureIDList[0]); - remGlyphs = numGlyphs = face.GlyphCount(); - } - - return FTFont::FaceSize( size, res); -} - - -void FTGLTextureFont::Render( const char* string) -{ -// glPushAttrib( GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT); - - glEnable(GL_BLEND); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE - - FTFont::Render( string); - -// glPopAttrib(); -} - - -void FTGLTextureFont::Render( const wchar_t* string) -{ -// glPushAttrib( GL_ENABLE_BIT | GL_COLOR_BUFFER_BIT); - - glEnable(GL_BLEND); - glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE - - FTFont::Render( string); - -// glPopAttrib(); -} - diff --git a/extern/bFTGL/src/FTGlyph.cpp b/extern/bFTGL/src/FTGlyph.cpp deleted file mode 100644 index c68632949c2..00000000000 --- a/extern/bFTGL/src/FTGlyph.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "FTGlyph.h" - - -FTGlyph::FTGlyph( FT_GlyphSlot glyph) -: advance(0.0f), - err(0) -{ - if( glyph) - { - bBox = FTBBox( glyph); - advance = static_cast( glyph->advance.x) / 64.0f; - } -} - - -FTGlyph::~FTGlyph() -{} diff --git a/extern/bFTGL/src/FTGlyphContainer.cpp b/extern/bFTGL/src/FTGlyphContainer.cpp deleted file mode 100644 index 2c1881bbfff..00000000000 --- a/extern/bFTGL/src/FTGlyphContainer.cpp +++ /dev/null @@ -1,93 +0,0 @@ -#include "FTGlyphContainer.h" -#include "FTGlyph.h" -#include "FTFace.h" -#include "FTCharmap.h" - - -FTGlyphContainer::FTGlyphContainer( FTFace* f) -: face(f), - err(0) -{ - glyphs.push_back( NULL); - charMap = new FTCharmap( face); -} - - -FTGlyphContainer::~FTGlyphContainer() -{ - GlyphVector::iterator glyphIterator; - for( glyphIterator = glyphs.begin(); glyphIterator != glyphs.end(); ++glyphIterator) - { - delete *glyphIterator; - } - - glyphs.clear(); - delete charMap; -} - - -bool FTGlyphContainer::CharMap( FT_Encoding encoding) -{ - bool result = charMap->CharMap( encoding); - err = charMap->Error(); - return result; -} - - -unsigned int FTGlyphContainer::FontIndex( const unsigned int characterCode) const -{ - return charMap->FontIndex( characterCode); -} - - -void FTGlyphContainer::Add( FTGlyph* tempGlyph, const unsigned int characterCode) -{ - charMap->InsertIndex( characterCode, glyphs.size()); - glyphs.push_back( tempGlyph); -} - - -const FTGlyph* const FTGlyphContainer::Glyph( const unsigned int characterCode) const -{ - signed int index = charMap->GlyphListIndex( characterCode); - return glyphs[index]; -} - - -FTBBox FTGlyphContainer::BBox( const unsigned int characterCode) const -{ - return glyphs[charMap->GlyphListIndex( characterCode)]->BBox(); -} - - -float FTGlyphContainer::Advance( const unsigned int characterCode, const unsigned int nextCharacterCode) -{ - unsigned int left = charMap->FontIndex( characterCode); - unsigned int right = charMap->FontIndex( nextCharacterCode); - - float width = face->KernAdvance( left, right).x; - width += glyphs[charMap->GlyphListIndex( characterCode)]->Advance(); - - return width; -} - - -FTPoint FTGlyphContainer::Render( const unsigned int characterCode, const unsigned int nextCharacterCode, FTPoint penPosition) -{ - FTPoint kernAdvance; - float advance = 0; - - unsigned int left = charMap->FontIndex( characterCode); - unsigned int right = charMap->FontIndex( nextCharacterCode); - - kernAdvance = face->KernAdvance( left, right); - - if( !face->Error()) - { - advance = glyphs[charMap->GlyphListIndex( characterCode)]->Render( penPosition); - } - - kernAdvance.x = advance + kernAdvance.x; -// kernAdvance.y = advance.y + kernAdvance.y; - return kernAdvance; -} diff --git a/extern/bFTGL/src/FTLibrary.cpp b/extern/bFTGL/src/FTLibrary.cpp deleted file mode 100644 index 29ab5ae2693..00000000000 --- a/extern/bFTGL/src/FTLibrary.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "FTLibrary.h" - - -FTLibrary& FTLibrary::Instance() -{ - static FTLibrary ftlib; - return ftlib; -} - - -FTLibrary::~FTLibrary() -{ - if( library != 0) - { - FT_Done_FreeType( *library); - - delete library; - library= 0; - } - -// if( manager != 0) -// { -// FTC_Manager_Done( manager ); -// -// delete manager; -// manager= 0; -// } -} - - -FTLibrary::FTLibrary() -: library(0), - err(0) -{ - Initialise(); -} - - -bool FTLibrary::Initialise() -{ - if( library != 0) - return true; - - library = new FT_Library; - - err = FT_Init_FreeType( library); - if( err) - { - delete library; - library = 0; - return false; - } - -// FTC_Manager* manager; -// -// if( FTC_Manager_New( lib, 0, 0, 0, my_face_requester, 0, manager ) -// { -// delete manager; -// manager= 0; -// return false; -// } - - return true; -} diff --git a/extern/bFTGL/src/FTOutlineGlyph.cpp b/extern/bFTGL/src/FTOutlineGlyph.cpp deleted file mode 100644 index 340c7804140..00000000000 --- a/extern/bFTGL/src/FTOutlineGlyph.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "FTOutlineGlyph.h" -#include "FTVectoriser.h" - - -FTOutlineGlyph::FTOutlineGlyph( FT_GlyphSlot glyph) -: FTGlyph( glyph), - glList(0) -{ - if( ft_glyph_format_outline != glyph->format) - { - err = 0x14; // Invalid_Outline - return; - } - - FTVectoriser vectoriser( glyph); - - size_t numContours = vectoriser.ContourCount(); - if ( ( numContours < 1) || ( vectoriser.PointCount() < 3)) - { - return; - } - - glList = glGenLists(1); - glNewList( glList, GL_COMPILE); - for( unsigned int c = 0; c < numContours; ++c) - { - const FTContour* contour = vectoriser.Contour(c); - - glBegin( GL_LINE_LOOP); - for( unsigned int p = 0; p < contour->PointCount(); ++p) - { - glVertex2f( contour->Point(p).x / 64.0f, contour->Point(p).y / 64.0f); - } - glEnd(); - } - glEndList(); -} - - -FTOutlineGlyph::~FTOutlineGlyph() -{ - glDeleteLists( glList, 1); -} - - -float FTOutlineGlyph::Render( const FTPoint& pen) -{ - if( glList) - { - glTranslatef( pen.x, pen.y, 0); - glCallList( glList); - glTranslatef( -pen.x, -pen.y, 0); - } - - return advance; -} - diff --git a/extern/bFTGL/src/FTPixmapGlyph.cpp b/extern/bFTGL/src/FTPixmapGlyph.cpp deleted file mode 100644 index b051a06b6e3..00000000000 --- a/extern/bFTGL/src/FTPixmapGlyph.cpp +++ /dev/null @@ -1,109 +0,0 @@ -#include "FTPixmapGlyph.h" - -FTPixmapGlyph::FTPixmapGlyph( FT_GlyphSlot glyph) -: FTGlyph( glyph), - destWidth(0), - destHeight(0), - data(0) -{ - err = FT_Render_Glyph( glyph, FT_RENDER_MODE_NORMAL); - if( err || ft_glyph_format_bitmap != glyph->format) - { - return; - } - - FT_Bitmap bitmap = glyph->bitmap; - - //check the pixel mode - //ft_pixel_mode_grays - - int srcWidth = bitmap.width; - int srcHeight = bitmap.rows; - - // FIXME What about dest alignment? - destWidth = srcWidth; - destHeight = srcHeight; - - if( destWidth && destHeight) - { - data = new unsigned char[destWidth * destHeight * 4]; - - // Get the current glColor. - float ftglColour[4]; -// glGetFloatv( GL_CURRENT_COLOR, ftglColour); - ftglColour[0] = ftglColour[1] = ftglColour[2] = ftglColour[3] = 1.0; - - unsigned char redComponent = static_cast( ftglColour[0] * 255.0f); - unsigned char greenComponent = static_cast( ftglColour[1] * 255.0f); - unsigned char blueComponent = static_cast( ftglColour[2] * 255.0f); - - unsigned char* src = bitmap.buffer; - - unsigned char* dest = data + ((destHeight - 1) * destWidth) * 4; - size_t destStep = destWidth * 4 * 2; - - if( ftglColour[3] == 1.0f) - { - for( int y = 0; y < srcHeight; ++y) - { - for( int x = 0; x < srcWidth; ++x) - { - *dest++ = redComponent; - *dest++ = greenComponent; - *dest++ = blueComponent; - *dest++ = *src++; - } - dest -= destStep; - } - } - else - { - for( int y = 0; y < srcHeight; ++y) - { - for( int x = 0; x < srcWidth; ++x) - { - *dest++ = redComponent; - *dest++ = greenComponent; - *dest++ = blueComponent; - *dest++ = static_cast(ftglColour[3] * *src++); - } - dest -= destStep; - } - } - - destHeight = srcHeight; - } - - pos.x = glyph->bitmap_left; - pos.y = srcHeight - glyph->bitmap_top; -} - - -FTPixmapGlyph::~FTPixmapGlyph() -{ - delete [] data; -} - -#include -float FTPixmapGlyph::Render( const FTPoint& pen) -{ - if( data) - { - float dx, dy; - - dx= floor( (pen.x + pos.x ) ); - dy= ( (pen.y - pos.y ) ); - - // Move the glyph origin - glBitmap( 0, 0, 0.0f, 0.0f, dx, dy, (const GLubyte*)0); - - glPixelStorei( GL_UNPACK_ROW_LENGTH, 0); - - glDrawPixels( destWidth, destHeight, GL_RGBA, GL_UNSIGNED_BYTE, (const GLvoid*)data); - - // Restore the glyph origin - glBitmap( 0, 0, 0.0f, 0.0f, -dx, -dy, (const GLubyte*)0); - } - - return advance; -} diff --git a/extern/bFTGL/src/FTPoint.cpp b/extern/bFTGL/src/FTPoint.cpp deleted file mode 100644 index e4678bc9564..00000000000 --- a/extern/bFTGL/src/FTPoint.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "FTPoint.h" - - -bool operator == ( const FTPoint &a, const FTPoint &b) -{ - return((a.x == b.x) && (a.y == b.y) && (a.z == b.z)); -} - -bool operator != ( const FTPoint &a, const FTPoint &b) -{ - return((a.x != b.x) || (a.y != b.y) || (a.z != b.z)); -} - - diff --git a/extern/bFTGL/src/FTPolyGlyph.cpp b/extern/bFTGL/src/FTPolyGlyph.cpp deleted file mode 100644 index 7e0d695493c..00000000000 --- a/extern/bFTGL/src/FTPolyGlyph.cpp +++ /dev/null @@ -1,62 +0,0 @@ -#include "FTPolyGlyph.h" -#include "FTVectoriser.h" - - -FTPolyGlyph::FTPolyGlyph( FT_GlyphSlot glyph) -: FTGlyph( glyph), - glList(0) -{ - if( ft_glyph_format_outline != glyph->format) - { - err = 0x14; // Invalid_Outline - return; - } - - FTVectoriser vectoriser( glyph); - - if(( vectoriser.ContourCount() < 1) || ( vectoriser.PointCount() < 3)) - { - return; - } - - vectoriser.MakeMesh( 1.0); - - glList = glGenLists( 1); - glNewList( glList, GL_COMPILE); - - const FTMesh* mesh = vectoriser.GetMesh(); - for( unsigned int index = 0; index < mesh->TesselationCount(); ++index) - { - const FTTesselation* subMesh = mesh->Tesselation( index); - unsigned int polyonType = subMesh->PolygonType(); - - glBegin( polyonType); - for( unsigned int x = 0; x < subMesh->PointCount(); ++x) - { - glVertex3f( subMesh->Point(x).x / 64.0f, - subMesh->Point(x).y / 64.0f, - 0.0f); - } - glEnd(); - } - glEndList(); -} - - -FTPolyGlyph::~FTPolyGlyph() -{ - glDeleteLists( glList, 1); -} - - -float FTPolyGlyph::Render( const FTPoint& pen) -{ - if( glList) - { - glTranslatef( pen.x, pen.y, 0); - glCallList( glList); - glTranslatef( -pen.x, -pen.y, 0); - } - - return advance; -} diff --git a/extern/bFTGL/src/FTSize.cpp b/extern/bFTGL/src/FTSize.cpp deleted file mode 100644 index 5fb8ffba157..00000000000 --- a/extern/bFTGL/src/FTSize.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include "FTSize.h" - - -FTSize::FTSize() -: ftFace(0), - ftSize(0), - size(0), - err(0) -{} - - -FTSize::~FTSize() -{} - - -bool FTSize::CharSize( FT_Face* face, unsigned int point_size, unsigned int x_resolution, unsigned int y_resolution ) -{ - err = FT_Set_Char_Size( *face, 0L, point_size * 64, x_resolution, y_resolution); - - if( !err) - { - ftFace = face; - size = point_size; - ftSize = (*ftFace)->size; - } - else - { - ftFace = 0; - size = 0; - ftSize = 0; - } - - return !err; -} - - -unsigned int FTSize::CharSize() const -{ - return size; -} - - -float FTSize::Ascender() const -{ - return ftSize == 0 ? 0.0f : static_cast( ftSize->metrics.ascender) / 64.0f; -} - - -float FTSize::Descender() const -{ - return ftSize == 0 ? 0.0f : static_cast( ftSize->metrics.descender) / 64.0f; -} - - -float FTSize::Height() const -{ - if( 0 == ftSize) - { - return 0.0f; - } - - if( FT_IS_SCALABLE((*ftFace))) - { - return ( (*ftFace)->bbox.yMax - (*ftFace)->bbox.yMin) * ( (float)ftSize->metrics.y_ppem / (float)(*ftFace)->units_per_EM); - } - else - { - return static_cast( ftSize->metrics.height) / 64.0f; - } -} - - -float FTSize::Width() const -{ - if( 0 == ftSize) - { - return 0.0f; - } - - if( FT_IS_SCALABLE((*ftFace))) - { - return ( (*ftFace)->bbox.xMax - (*ftFace)->bbox.xMin) * ( static_cast(ftSize->metrics.x_ppem) / static_cast((*ftFace)->units_per_EM)); - } - else - { - return static_cast( ftSize->metrics.max_advance) / 64.0f; - } -} - - -float FTSize::Underline() const -{ - return 0.0f; -} - -unsigned int FTSize::XPixelsPerEm() const -{ - return ftSize == 0 ? 0 : ftSize->metrics.x_ppem; -} - -unsigned int FTSize::YPixelsPerEm() const -{ - return ftSize == 0 ? 0 : ftSize->metrics.y_ppem; -} - diff --git a/extern/bFTGL/src/FTTextureGlyph.cpp b/extern/bFTGL/src/FTTextureGlyph.cpp deleted file mode 100644 index b8267dcce89..00000000000 --- a/extern/bFTGL/src/FTTextureGlyph.cpp +++ /dev/null @@ -1,87 +0,0 @@ -#include "FTTextureGlyph.h" - - -FTTextureGlyph::FTTextureGlyph( FT_GlyphSlot glyph, int id, int xOffset, int yOffset, GLsizei width, GLsizei height) -: FTGlyph( glyph), - destWidth(0), - destHeight(0), - glTextureID(id), - activeTextureID(0) -{ - err = FT_Render_Glyph( glyph, FT_RENDER_MODE_NORMAL); - if( err || glyph->format != ft_glyph_format_bitmap) - { - return; - } - - FT_Bitmap bitmap = glyph->bitmap; - - destWidth = bitmap.width; - destHeight = bitmap.rows; - - if( destWidth && destHeight) - { - glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT); - glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE); - glPixelStorei( GL_UNPACK_ROW_LENGTH, 0); - glPixelStorei( GL_UNPACK_ALIGNMENT, 1); - - glBindTexture( GL_TEXTURE_2D, glTextureID); - glTexSubImage2D( GL_TEXTURE_2D, 0, xOffset, yOffset, destWidth, destHeight, GL_ALPHA, GL_UNSIGNED_BYTE, bitmap.buffer); - - glPopClientAttrib(); - } - - -// 0 -// +----+ -// | | -// | | -// | | -// +----+ -// 1 - - uv[0].x = static_cast(xOffset) / static_cast(width); - uv[0].y = static_cast(yOffset) / static_cast(height); - uv[1].x = static_cast( xOffset + destWidth) / static_cast(width); - uv[1].y = static_cast( yOffset + destHeight) / static_cast(height); - - pos.x = glyph->bitmap_left; - pos.y = glyph->bitmap_top; -} - - -FTTextureGlyph::~FTTextureGlyph() -{} - -#include - -float FTTextureGlyph::Render( const FTPoint& pen) -{ - float dx; - - glGetIntegerv( GL_TEXTURE_2D_BINDING_EXT, &activeTextureID); - if( activeTextureID != glTextureID) - { - glBindTexture( GL_TEXTURE_2D, (GLuint)glTextureID); - } - - dx= floor( (pen.x + pos.x ) ); - - glBegin( GL_QUADS); - glTexCoord2f( uv[0].x, uv[0].y); - glVertex2f( dx, pen.y + pos.y); - - glTexCoord2f( uv[0].x, uv[1].y); - glVertex2f( dx, pen.y + pos.y - destHeight); - - glTexCoord2f( uv[1].x, uv[1].y); - glVertex2f( dx + destWidth, pen.y + pos.y - destHeight); - - glTexCoord2f( uv[1].x, uv[0].y); - glVertex2f( dx + destWidth, pen.y + pos.y); - glEnd(); - - return advance; -} - diff --git a/extern/bFTGL/src/FTVectoriser.cpp b/extern/bFTGL/src/FTVectoriser.cpp deleted file mode 100644 index 82dcb0c0f51..00000000000 --- a/extern/bFTGL/src/FTVectoriser.cpp +++ /dev/null @@ -1,229 +0,0 @@ -#include "FTVectoriser.h" -#include "FTGL.h" - -#ifndef CALLBACK -#define CALLBACK -#endif - -#if defined(__APPLE_CC__) - #if __APPLE_CC__ >= 5465 - typedef GLvoid (*GLUTesselatorFunction)(); - #else - typedef GLvoid (*GLUTesselatorFunction)(...); - #endif -#elif defined( __mips ) || defined( __linux__ ) || defined( __FreeBSD__ ) || defined( __OpenBSD__ ) || defined( __sun ) || defined (__CYGWIN__) - typedef GLvoid (*GLUTesselatorFunction)(); -#elif defined ( WIN32) - typedef GLvoid (CALLBACK *GLUTesselatorFunction)( ); -#else - #error "Error - need to define type GLUTesselatorFunction for this platform/compiler" -#endif - - -void CALLBACK ftglError( GLenum errCode, FTMesh* mesh) -{ - mesh->Error( errCode); -} - - -void CALLBACK ftglVertex( void* data, FTMesh* mesh) -{ - FTGL_DOUBLE* vertex = static_cast(data); - mesh->AddPoint( vertex[0], vertex[1], vertex[2]); -} - - -void CALLBACK ftglCombine( FTGL_DOUBLE coords[3], void* vertex_data[4], GLfloat weight[4], void** outData, FTMesh* mesh) -{ - FTGL_DOUBLE* vertex = static_cast(coords); - *outData = mesh->Combine( vertex[0], vertex[1], vertex[2]); -} - - -void CALLBACK ftglBegin( GLenum type, FTMesh* mesh) -{ - mesh->Begin( type); -} - - -void CALLBACK ftglEnd( FTMesh* mesh) -{ - mesh->End(); -} - - -FTMesh::FTMesh() -: currentTesselation(0), - err(0) -{ - tesselationList.reserve( 16); -} - - -FTMesh::~FTMesh() -{ - for( size_t t = 0; t < tesselationList.size(); ++t) - { - delete tesselationList[t]; - } - - tesselationList.clear(); -} - - -void FTMesh::AddPoint( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z) -{ - currentTesselation->AddPoint( x, y, z); -} - - -FTGL_DOUBLE* FTMesh::Combine( const FTGL_DOUBLE x, const FTGL_DOUBLE y, const FTGL_DOUBLE z) -{ - tempPointList.push_back( FTPoint( x, y,z)); - return &tempPointList.back().x; -} - - -void FTMesh::Begin( GLenum meshType) -{ - currentTesselation = new FTTesselation( meshType); -} - - -void FTMesh::End() -{ - tesselationList.push_back( currentTesselation); -} - - -const FTTesselation* const FTMesh::Tesselation( unsigned int index) const -{ - return ( index < tesselationList.size()) ? tesselationList[index] : NULL; -} - - -FTVectoriser::FTVectoriser( const FT_GlyphSlot glyph) -: contourList(0), - mesh(0), - ftContourCount(0), - contourFlag(0) -{ - if( glyph) - { - outline = glyph->outline; - - ftContourCount = outline.n_contours;; - contourList = 0; - contourFlag = outline.flags; - - ProcessContours(); - } -} - - -FTVectoriser::~FTVectoriser() -{ - for( size_t c = 0; c < ContourCount(); ++c) - { - delete contourList[c]; - } - - delete [] contourList; - delete mesh; -} - - -void FTVectoriser::ProcessContours() -{ - short contourLength = 0; - short startIndex = 0; - short endIndex = 0; - - contourList = new FTContour*[ftContourCount]; - - for( short contourIndex = 0; contourIndex < ftContourCount; ++contourIndex) - { - FT_Vector* pointList = &outline.points[startIndex]; - char* tagList = &outline.tags[startIndex]; - - endIndex = outline.contours[contourIndex]; - contourLength = ( endIndex - startIndex) + 1; - - FTContour* contour = new FTContour( pointList, tagList, contourLength); - - contourList[contourIndex] = contour; - - startIndex = endIndex + 1; - } -} - - -size_t FTVectoriser::PointCount() -{ - size_t s = 0; - for( size_t c = 0; c < ContourCount(); ++c) - { - s += contourList[c]->PointCount(); - } - - return s; -} - - -const FTContour* const FTVectoriser::Contour( unsigned int index) const -{ - return ( index < ContourCount()) ? contourList[index] : NULL; -} - - -void FTVectoriser::MakeMesh( FTGL_DOUBLE zNormal) -{ - if( mesh) - { - delete mesh; - } - - mesh = new FTMesh; - - GLUtesselator* tobj = gluNewTess(); - - gluTessCallback( tobj, GLU_TESS_BEGIN_DATA, (GLUTesselatorFunction)ftglBegin); - gluTessCallback( tobj, GLU_TESS_VERTEX_DATA, (GLUTesselatorFunction)ftglVertex); - gluTessCallback( tobj, GLU_TESS_COMBINE_DATA, (GLUTesselatorFunction)ftglCombine); - gluTessCallback( tobj, GLU_TESS_END_DATA, (GLUTesselatorFunction)ftglEnd); - gluTessCallback( tobj, GLU_TESS_ERROR_DATA, (GLUTesselatorFunction)ftglError); - - if( contourFlag & ft_outline_even_odd_fill) // ft_outline_reverse_fill - { - gluTessProperty( tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_ODD); - } - else - { - gluTessProperty( tobj, GLU_TESS_WINDING_RULE, GLU_TESS_WINDING_NONZERO); - } - - - gluTessProperty( tobj, GLU_TESS_TOLERANCE, 0); - gluTessNormal( tobj, 0.0f, 0.0f, zNormal); - gluTessBeginPolygon( tobj, mesh); - - for( size_t c = 0; c < ContourCount(); ++c) - { - const FTContour* contour = contourList[c]; - - gluTessBeginContour( tobj); - - for( size_t p = 0; p < contour->PointCount(); ++p) - { - FTGL_DOUBLE* d = const_cast(&contour->Point(p).x); - gluTessVertex( tobj, d, d); - } - - gluTessEndContour( tobj); - } - - gluTessEndPolygon( tobj); - - gluDeleteTess( tobj); -} - diff --git a/extern/bFTGL/src/Makefile b/extern/bFTGL/src/Makefile deleted file mode 100644 index d91bcb2559d..00000000000 --- a/extern/bFTGL/src/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*- -# vim: tabstop=8 -# -# $Id$ -# -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): GSR -# -# ***** END GPL LICENSE BLOCK ***** -# -# - -LIBNAME = ftgl -DIR = $(OCGDIR)/extern/$(LIBNAME) - -CCFLAGS += $(LEVEL_1_CPP_WARNINGS) - -CSRCS = -CCSRCS = FTBitmapGlyph.cpp FTCharmap.cpp FTContour.cpp FTExtrdGlyph.cpp \ - FTFace.cpp FTFont.cpp FTGLBitmapFont.cpp FTGLExtrdFont.cpp \ - FTGLOutlineFont.cpp FTGLPixmapFont.cpp FTGLPolygonFont.cpp \ - FTGLTextureFont.cpp FTGlyph.cpp FTGlyphContainer.cpp FTLibrary.cpp \ - FTOutlineGlyph.cpp FTPixmapGlyph.cpp FTPoint.cpp FTPolyGlyph.cpp \ - FTSize.cpp FTTextureGlyph.cpp FTVectoriser.cpp - -include nan_compile.mk -CPPFLAGS += -I../include -CPPFLAGS += -I$(NAN_FREETYPE)/include -I$(NAN_FREETYPE)/include/freetype2 -CPPFLAGS += -I$(OPENGL_HEADERS) - -install: $(ALL_OR_DEBUG) - @[ -d $(NAN_FTGL) ] || mkdir -p $(NAN_FTGL) - @[ -d $(NAN_FTGL)/include ] || mkdir -p $(NAN_FTGL)/include - @[ -d $(NAN_FTGL)/lib/$(DEBUG_DIR) ] || mkdir -p $(NAN_FTGL)/lib/$(DEBUG_DIR) - @$(NANBLENDERHOME)/intern/tools/cpifdiff.sh $(DIR)/$(DEBUG_DIR)lib$(LIBNAME).a $(NAN_FTGL)/lib/$(DEBUG_DIR) -ifeq ($(OS),darwin) - ranlib $(NAN_FTGL)/lib/$(DEBUG_DIR)lib$(LIBNAME).a -endif - @$(NANBLENDERHOME)/intern/tools/cpifdiff.sh ../include/*.h $(NAN_FTGL)/include/ - diff --git a/extern/bFTGL/win32_vcpp/README_WIN32.txt b/extern/bFTGL/win32_vcpp/README_WIN32.txt deleted file mode 100644 index bc92bbb9591..00000000000 --- a/extern/bFTGL/win32_vcpp/README_WIN32.txt +++ /dev/null @@ -1,206 +0,0 @@ -FTGL 1.31 - -NOTES FOR COMPILING ON WINDOWS - -14 Feb 2002 - -Ellers, ellers@iinet.net.au - - - - - -SUPPORTED COMPILERS - - - -I have rebuilt the FTGL project files for Visual C++ (version 6). There are - -presently no other compilers or environments supported but feel free to - -contribute them. - - - - - -QUICK GUIDE: COMPILING FTGL - - - - - Start up MSVC++ with ftgl.dsw. - - - Tell MSVC++ where FreeType is. You'll need to do something like this: - - - - * select Project>Settings - - * select ftgl_static (for a start) - - * select "All Configurations" - - * go to the tab C++ > PreProcessor - - * Set additional include directories appropriately. For me it is: - - D:\cots\freetype-2.0.5\include - - * repeat for all configurations of ftgl_dll - - - - - -QUICK GUIDE: COMPILING/RUNNING SUPPLIED DEMO PROGRAM - - - - - The program expects the first argument to be the name of a truetype file. - - I copied timesbi.ttf from the windows directory to C:\TEMP and then edit - - the settings of the project: - - - - * select Project>Settings - - * select Demo project - - * select panel Debug>General - - * set Program Arguments to be "C:\TEMP\timesbi.ttf" - - - - - -QUICK GUIDE: COMPILING YOUR PROGRAM TO USE FTGL - - - - - Choose dynamic or static library linkage - - * if you want to link to a static FTGL library ensure that - - FTGL_LIBRARY_STATIC is defined in the preprocessor section - - - - - -CONFIGURATION / CODE GENERATION / C LIBRARIES - - - -FTGL can be built in various configurations (inspired by Freetype and libpng): - - - - - static library (.lib) - - - dynamic library (.dll) - - - -MSVC++ requires selection of "code generation" option, which seems to be - -mostly to do with which version of the Standard C library is linked with the - -library. - - - -The following modes are supported: - - - - - static/dynamic - - - single threaded (ST) or multithreaded (MT) - - NOTE: the multithreaded DLL (MD) mode was NOT included, as freetype itself - - doesn't support that mode so I figure there's no point yet. - - - debug/release (debug has _d suffix) - - - -So the static multithreaded release library is: - - - - ftgl_static_MT.lib - - - -The same library built in DEBUG mode: - - - - ftgl_static_MT_d.lib - - - -If you're not sure which one is appropriate (and if you're a novice don't - -been too put off...) start with making the decision about debug or release. - -This should be easy because if you're building the debug version of your - -app its probably a good idea to link with the debug version of FTGL (but - -not compulsory). Once thats done, you may get errors like: - - - - LIBCMTD.lib(crt0init.obj) : warning LNK4098: defaultlib "libcmt.lib" conflicts with use of other libs; use /NODEFAULTLIB:library - - - -This will happen, for example, when you link a glut app with an FTGL library - -compiled with different codegen options than the GLUT library. - - - -MSVC++ "sort of" - -requires that all libs be linked with the same codegen option. GLUT is built - -in XXX mode, so if you're linking with GLUT, you can get rid of the warning - -by linking with the XXX version of FTGL. The various versions are particularly - -useful if you're doing std C stuff, like printf etc. - - - - - - - -FAQ - - - -Q: "But... do I HAVE to use all these DIFFERENT build modes, like multi- - - threaded, debug single threaded, etc?" - - - -A: No. Sometimes library makers only generate one style anyway. It depends - - on your needs. Unless you're linking with standard C stuff (e.g. printf) - - then it probably won't make a great deal of difference. If you get - - warnings about "default lib libcmt.lib conflicts" etc, then you can make - - use of the different libraries. - - - diff --git a/extern/bFTGL/win32_vcpp/ftgl.dsw b/extern/bFTGL/win32_vcpp/ftgl.dsw deleted file mode 100644 index 17b8fbe6f12..00000000000 --- a/extern/bFTGL/win32_vcpp/ftgl.dsw +++ /dev/null @@ -1,92 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "ftgl_demo"=".\ftgl_demo\ftgl_demo.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name ftgl_dll - End Project Dependency - Begin Project Dependency - Project_Dep_Name ftgl_static_lib - End Project Dependency -}}} - -############################################################################### - -Project: "ftgl_demo_2"=".\ftgl_demo\ftgl_demo_2.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name ftgl_dll - End Project Dependency - Begin Project Dependency - Project_Dep_Name ftgl_static_lib - End Project Dependency -}}} - -############################################################################### - -Project: "ftgl_dll"=".\ftgl_dll\ftgl_dll.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "ftgl_static_lib"=".\ftgl_static_lib\ftgl_static_lib.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Project: "unit_tests"=".\unit_tests\unit_tests.dsp" - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name ftgl_static_lib - End Project Dependency -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/extern/bFTGL/win32_vcpp/ftgl_dll/ftgl_dll.dsp b/extern/bFTGL/win32_vcpp/ftgl_dll/ftgl_dll.dsp deleted file mode 100644 index 7e297df9111..00000000000 --- a/extern/bFTGL/win32_vcpp/ftgl_dll/ftgl_dll.dsp +++ /dev/null @@ -1,357 +0,0 @@ -# Microsoft Developer Studio Project File - Name="ftgl_dll" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 - -CFG=ftgl_dll - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "ftgl_dll.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "ftgl_dll.mak" CFG="ftgl_dll - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ftgl_dll - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "ftgl_dll - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "ftgl_dll - Win32 Release MT" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE "ftgl_dll - Win32 Debug MT" (based on "Win32 (x86) Dynamic-Link Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -MTL=midl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ftgl_dll - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_ST" -# PROP BASE Intermediate_Dir "Release_ST" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../Build" -# PROP Intermediate_Dir "Release_ST" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "../Build" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_DLL_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_LIBRARY" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib freetype204.lib /nologo /dll /machine:I386 /out:"../Build/ftgl_dynamic_MT.dll" /libpath:"D:\cots\freetype-2.0.5\objs" - -!ELSEIF "$(CFG)" == "ftgl_dll - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_ST" -# PROP BASE Intermediate_Dir "Debug_ST" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../Build" -# PROP Intermediate_Dir "Debug_ST" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "../Build" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_DLL_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_LIBRARY" /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib freetype204_D.lib /nologo /dll /pdb:"Debug_ST/ftgl_dynamic_ST_d.pdb" /debug /machine:I386 /out:"../Build/ftgl_dynamic_MT_d.dll" /pdbtype:sept /libpath:"D:\cots\freetype-2.0.5\objs" -# SUBTRACT LINK32 /pdb:none - -!ELSEIF "$(CFG)" == "ftgl_dll - Win32 Release MT" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_MT" -# PROP BASE Intermediate_Dir "Release_MT" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../Build" -# PROP Intermediate_Dir "Release_MT" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "../Build" -# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_DLL_EXPORTS" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_LIBRARY" /YX /FD /c -# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib freetype204MT.lib /nologo /dll /machine:I386 /out:"../Build/ftgl_dynamic_MTD.dll" /libpath:"D:\cots\freetype-2.0.5\objs" - -!ELSEIF "$(CFG)" == "ftgl_dll - Win32 Debug MT" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_MT" -# PROP BASE Intermediate_Dir "Debug_MT" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../Build" -# PROP Intermediate_Dir "Debug_MT" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "../Build" -# ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_DLL_EXPORTS" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "FTGL_LIBRARY" /YX /FD /GZ /c -# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept -# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib freetype204MT_D.lib /nologo /dll /pdb:"Debug_ST/ftgl_dynamic_MT_d.pdb" /debug /machine:I386 /out:"../Build/ftgl_dynamic_MTD_d.dll" /pdbtype:sept /libpath:"D:\cots\freetype-2.0.5\objs" -# SUBTRACT LINK32 /pdb:none - -!ENDIF - -# Begin Target - -# Name "ftgl_dll - Win32 Release" -# Name "ftgl_dll - Win32 Debug" -# Name "ftgl_dll - Win32 Release MT" -# Name "ftgl_dll - Win32 Debug MT" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\..\src\FTBitmapGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTCharmap.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTContour.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTExtrdGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTFace.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLBitmapFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLExtrdFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLOutlineFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLPixmapFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLPolygonFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLTextureFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGlyphContainer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTLibrary.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTOutlineGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTPixmapGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTPoint.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTPolyGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTSize.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTTextureGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTVectoriser.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\FTBBox.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTBitmapGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTCharmap.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTCharToGlyphIndexMap.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTContour.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTExtrdGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTFace.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGL.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLBitmapFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLExtrdFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLOutlineFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLPixmapFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLPolygonFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLTextureFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGlyphContainer.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTLibrary.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTList.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTOutlineGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTPixmapGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTPoint.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTPolyGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTSize.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTTextureGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTVector.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTVectoriser.h -# End Source File -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/extern/bFTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.dsp b/extern/bFTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.dsp deleted file mode 100644 index bc2c77cb0b6..00000000000 --- a/extern/bFTGL/win32_vcpp/ftgl_static_lib/ftgl_static_lib.dsp +++ /dev/null @@ -1,342 +0,0 @@ -# Microsoft Developer Studio Project File - Name="ftgl_static_lib" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=ftgl_static_lib - Win32 Debug MT -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "ftgl_static_lib.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "ftgl_static_lib.mak" CFG="ftgl_static_lib - Win32 Debug MT" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "ftgl_static_lib - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "ftgl_static_lib - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE "ftgl_static_lib - Win32 Debug MT" (based on "Win32 (x86) Static Library") -!MESSAGE "ftgl_static_lib - Win32 Release MT" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "ftgl_static_lib - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_ST" -# PROP BASE Intermediate_Dir "Release_ST" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_ST" -# PROP Intermediate_Dir "Release_ST" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "..\..\..\..\lib\windows\freetype\include" /I "..\..\include" /I "..\..\..\..\..\lib\windows\freetype\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\Build\ftgl_static_ST.lib" -# Begin Special Build Tool -SOURCE="$(InputPath)" -PostBuild_Cmds=ECHO Copying lib to lib\windows\ftgl\lib XCOPY /Y ..\Build\*lib ..\..\..\..\..\lib\windows\ftgl\lib -# End Special Build Tool - -!ELSEIF "$(CFG)" == "ftgl_static_lib - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_ST" -# PROP BASE Intermediate_Dir "Debug_ST" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_ST" -# PROP Intermediate_Dir "Debug_ST" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\Build\ftgl_static_MT_d.lib" - -!ELSEIF "$(CFG)" == "ftgl_static_lib - Win32 Debug MT" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug_MT" -# PROP BASE Intermediate_Dir "Debug_MT" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug_MT" -# PROP Intermediate_Dir "Debug_MT" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "_DEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\Build\ftgl_static_MTD_d.lib" - -!ELSEIF "$(CFG)" == "ftgl_static_lib - Win32 Release MT" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release_MT" -# PROP BASE Intermediate_Dir "Release_MT" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release_MT" -# PROP Intermediate_Dir "Release_MT" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "D:\cots\freetype-2.0.5\include" /I "..\..\include" /D "NDEBUG" /D "WIN32" /D "_MBCS" /D "_LIB" /D "FTGL_LIBRARY_STATIC" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\Build\ftgl_static_MTD.lib" - -!ENDIF - -# Begin Target - -# Name "ftgl_static_lib - Win32 Release" -# Name "ftgl_static_lib - Win32 Debug" -# Name "ftgl_static_lib - Win32 Debug MT" -# Name "ftgl_static_lib - Win32 Release MT" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\..\src\FTBitmapGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTCharmap.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTContour.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTExtrdGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTFace.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLBitmapFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLExtrdFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLOutlineFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLPixmapFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLPolygonFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGLTextureFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTGlyphContainer.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTLibrary.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTOutlineGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTPixmapGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTPoint.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTPolyGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTSize.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTTextureGlyph.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\src\FTVectoriser.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\include\FTBBox.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTBitmapGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTCharmap.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTCharToGlyphIndexMap.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTContour.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTExtrdGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTFace.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGL.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLBitmapFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLExtrdFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLOutlineFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLPixmapFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLPolygonFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGLTextureFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTGlyphContainer.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTLibrary.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTList.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTOutlineGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTPixmapGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTPoint.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTPolyGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTSize.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTTextureGlyph.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTVector.h -# End Source File -# Begin Source File - -SOURCE=..\..\include\FTVectoriser.h -# End Source File -# End Group -# End Target -# End Project diff --git a/extern/bFTGL/win32_vcpp/unit_tests/unit_tests.dsp b/extern/bFTGL/win32_vcpp/unit_tests/unit_tests.dsp deleted file mode 100644 index f68dfe9b2d8..00000000000 --- a/extern/bFTGL/win32_vcpp/unit_tests/unit_tests.dsp +++ /dev/null @@ -1,168 +0,0 @@ -# Microsoft Developer Studio Project File - Name="unit_tests" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=unit_tests - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "unit_tests.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "unit_tests.mak" CFG="unit_tests - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "unit_tests - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "unit_tests - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "unit_tests - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "Release" -# PROP Intermediate_Dir "Release" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c -# ADD CPP /nologo /MD /W3 /GX /O2 /I "$(MIC_COTS_CPPUNIT_DIR)/include" /I "../../include" /I "../../extras" /I "D:\cots\freetype-2.0.5\include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "FTGL_LIBRARY_STATIC" /FD /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 freetype204MT.lib ftgl_static_MT.lib cppunit.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib /nologo /subsystem:console /machine:I386 /libpath:"..\Build" /libpath:"D:\cots\freetype-2.0.5\objs" /libpath:"D:\cots\cppunit-1.9.8\lib" - -!ELSEIF "$(CFG)" == "unit_tests - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "Debug" -# PROP Intermediate_Dir "Debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c -# ADD CPP /nologo /MDd /W3 /Gm /GX /ZI /Od /I "$(MIC_COTS_CPPUNIT_DIR)/include" /I "../../include" /I "../../extras" /I "D:\cots\freetype-2.0.5\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /D "FTGL_LIBRARY_STATIC" /FD /GZ /c -# SUBTRACT CPP /YX /Yc /Yu -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 freetype204MT_D.lib ftgl_static_MT_d.lib cppunitd.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"..\Build" /libpath:"D:\cots\freetype-2.0.5\objs" /libpath:"D:\cots\cppunit-1.9.8\lib" - -!ENDIF - -# Begin Target - -# Name "unit_tests - Win32 Release" -# Name "unit_tests - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE="..\..\test\FTBBox-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTCharmap-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTContour-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTFace-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTFont-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTGlyphContainer-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTLibrary-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTList-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTMesh-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTPoint-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTSize-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTTesselation-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTVector-Test.cpp" -# End Source File -# Begin Source File - -SOURCE="..\..\test\FTVectoriser-Test.cpp" -# End Source File -# Begin Source File - -SOURCE=..\..\test\HPGCalc_afm.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\test\HPGCalc_pfb.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\test\TestMain.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Source File - -SOURCE=..\..\test\Fontdefs.h -# End Source File -# End Group -# End Target -# End Project diff --git a/intern/CMakeLists.txt b/intern/CMakeLists.txt index 81ef8c121d1..1c0d795448c 100644 --- a/intern/CMakeLists.txt +++ b/intern/CMakeLists.txt @@ -24,7 +24,7 @@ # # ***** END GPL LICENSE BLOCK ***** -SUBDIRS(SoundSystem string ghost guardedalloc bmfont moto container memutil decimation iksolver boolop opennl) +SUBDIRS(SoundSystem string ghost guardedalloc moto container memutil decimation iksolver boolop opennl) IF(WITH_ELBEEM) SUBDIRS(elbeem) diff --git a/intern/Makefile b/intern/Makefile index 357e28309e3..995dc56c7d3 100644 --- a/intern/Makefile +++ b/intern/Makefile @@ -31,7 +31,7 @@ SOURCEDIR = intern # include nan_subdirs.mk -ALLDIRS = string ghost guardedalloc bmfont moto container memutil +ALLDIRS = string ghost guardedalloc moto container memutil ALLDIRS += decimation iksolver bsp SoundSystem opennl elbeem boolop all:: diff --git a/intern/SConscript b/intern/SConscript index 82c7739bf42..bb8525d5ce5 100644 --- a/intern/SConscript +++ b/intern/SConscript @@ -5,7 +5,6 @@ SConscript(['SoundSystem/SConscript', 'string/SConscript', 'ghost/SConscript', 'guardedalloc/SConscript', - 'bmfont/SConscript', 'moto/SConscript', 'container/SConscript', 'memutil/SConscript/', diff --git a/intern/bmfont/BMF_Api.h b/intern/bmfont/BMF_Api.h deleted file mode 100644 index 252f60623a7..00000000000 --- a/intern/bmfont/BMF_Api.h +++ /dev/null @@ -1,162 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** - - * $Id$ - * Copyright (C) 2001 NaN Technologies B.V. - * - * API of the OpenGL bitmap font library. - * Currently draws fonts using the glBitmap routine. - * This implies that drawing speed is heavyly dependant on - * the 2D capabilities of the graphics card. - */ - -#ifndef __BMF_API_H -#define __BMF_API_H - -#ifdef __cplusplus -extern "C" { -#endif - -#include "BMF_Fonts.h" - -/** - * Returns the font for a given font type. - * @param font The font to retrieve. - * @return The font (or nil if not found). - */ -BMF_Font* BMF_GetFont(BMF_FontType font); - -/** - * Draws a character at the current raster position. - * @param font The font to use. - * @param c The character to draw. - * @return Indication of success (0 == error). - */ -int BMF_DrawCharacter(BMF_Font* font, char c); - -/** - * Draws a string at the current raster position. - * @param font The font to use. - * @param str The string to draw. - * @return Indication of success (0 == error). - */ -int BMF_DrawString(BMF_Font* font, char* str); - -/** - * Returns the width of a character in pixels. - * @param font The font to use. - * @param c The character. - * @return The length. - */ -int BMF_GetCharacterWidth(BMF_Font* font, char c); - -/** - * Returns the width of a string of characters. - * @param font The font to use. - * @param str The string. - * @return The length. - */ -int BMF_GetStringWidth(BMF_Font* font, char* str); - -/** - * Returns the bounding box of a string of characters. - * @param font The font to use. - * @param str The string. - * @param llx Lower left x coord - * @param lly Lower left y coord - * @param urx Upper right x coord - * @param ury Upper right y coord - */ -void BMF_GetStringBoundingBox(BMF_Font* font, char* str, float*llx, float *lly, float *urx, float *ury); - - -/** - * Returns the bounding box of the font. The width and - * height represent the bounding box of the union of - * all glyps. The minimum and maximum values of the - * box represent the extent of the font and its positioning - * about the origin. - */ -void BMF_GetFontBoundingBox(BMF_Font* font, int *xmin_r, int *ymin_r, int *xmax_r, int *ymax_r); - -/** - * Same as GetFontBoundingBox but only returns the height - */ -int BMF_GetFontHeight(BMF_Font* font); - -/** - * Convert the given @a font to a texture, and return the GL texture - * ID of the texture. If the texture ID is bound, text can - * be drawn using the texture by calling DrawStringTexture. - * - * @param font The font to create the texture from. - * @return The GL texture ID of the new texture, or -1 if unable - * to create. - */ -int BMF_GetFontTexture(BMF_Font* font); - -/** - * Draw the given @a str at the point @a x, @a y, @a z, using - * texture coordinates. This assumes that an appropriate texture - * has been bound, see BMF_BitmapFont::GetTexture(). The string - * is drawn along the positive X axis. - * - * @param font The font to draw with. - * @param string The c-string to draw. - * @param x The x coordinate to start drawing at. - * @param y The y coordinate to start drawing at. - * @param z The z coordinate to start drawing at. - */ -void BMF_DrawStringTexture(BMF_Font* font, char* string, float x, float y, float z); - - /** - * Draw the given @a string at the point @a xpos, @a ypos using - * char and float buffers. - * - * @param string The c-string to draw. - * @param xpos The x coordinate to start drawing at. - * @param ypos The y coordinate to start drawing at. - * @param fgcol The forground color. - * @param bgcol The background color. - * @param buf Unsigned char image buffer, when NULL to not operate on it. - * @param fbuf float image buffer, when NULL to not operate on it. - * @param w image buffer width. - * @param h image buffer height. - * @param channels number of channels in the image (3 or 4 - currently) - */ -void BMF_DrawStringBuf(BMF_Font* font, char *str, int posx, int posy, float *col, unsigned char *buf, float *fbuf, int w, int h, int channels); - - -#ifdef __cplusplus -} -#endif - -#endif /* __BMF_API_H */ - diff --git a/intern/bmfont/BMF_Fonts.h b/intern/bmfont/BMF_Fonts.h deleted file mode 100644 index 00a902573fb..00000000000 --- a/intern/bmfont/BMF_Fonts.h +++ /dev/null @@ -1,74 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** - - * $Id$ - * Copyright (C) 2001 NaN Technologies B.V. - * Defines the names of the fonts in the library. - */ - -#ifndef __BMF_FONTS_H -#define __BMF_FONTS_H - -#include "BMF_Settings.h" - -typedef enum -{ - BMF_kHelvetica10 = 0, -#if BMF_INCLUDE_HELV12 - BMF_kHelvetica12, -#endif -#if BMF_INCLUDE_HELVB8 - BMF_kHelveticaBold8, -#endif -#if BMF_INCLUDE_HELVB10 - BMF_kHelveticaBold10, -#endif -#if BMF_INCLUDE_HELVB12 - BMF_kHelveticaBold12, -#endif -#if BMF_INCLUDE_HELVB14 - BMF_kHelveticaBold14, -#endif -#if BMF_INCLUDE_SCR12 - BMF_kScreen12, -#endif -#if BMF_INCLUDE_SCR14 - BMF_kScreen14, -#endif -#if BMF_INCLUDE_SCR15 - BMF_kScreen15, -#endif - BMF_kNumFonts -} BMF_FontType; - -typedef struct BMF_Font BMF_Font; - -#endif /* __BMF_FONTS_H */ - diff --git a/intern/bmfont/BMF_Settings.h b/intern/bmfont/BMF_Settings.h deleted file mode 100644 index b599c97d6ee..00000000000 --- a/intern/bmfont/BMF_Settings.h +++ /dev/null @@ -1,67 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** - - * $Id$ - * Copyright (C) 2001 NaN Technologies B.V. - * Allows you to determine which fonts to include in the library. - */ - -#ifndef __BMF_SETTINGS_H -#define __BMF_SETTINGS_H - -/* This font is included always */ -#define BMF_INCLUDE_HELV10 1 - -#ifndef BMF_MINIMAL - -/* These fonts are included with the minimal setting defined */ -#define BMF_INCLUDE_HELV12 1 -#define BMF_INCLUDE_HELVB8 1 -#define BMF_INCLUDE_HELVB10 1 -#define BMF_INCLUDE_HELVB12 1 -#define BMF_INCLUDE_HELVB14 1 -#define BMF_INCLUDE_SCR12 1 -#define BMF_INCLUDE_SCR14 1 -#define BMF_INCLUDE_SCR15 1 - -#else /* BMF_MINIMAL */ -#define BMF_INCLUDE_HELV12 0 -#define BMF_INCLUDE_HELVB8 0 -#define BMF_INCLUDE_HELVB10 0 -#define BMF_INCLUDE_HELVB12 0 -#define BMF_INCLUDE_HELVB14 0 -#define BMF_INCLUDE_SCR12 0 -#define BMF_INCLUDE_SCR14 0 -#define BMF_INCLUDE_SCR15 0 - -#endif /* BMF_MINIMAL */ - -#endif /* __BMF_SETTINGS_H */ - diff --git a/intern/bmfont/CMakeLists.txt b/intern/bmfont/CMakeLists.txt deleted file mode 100644 index 3ae636a6097..00000000000 --- a/intern/bmfont/CMakeLists.txt +++ /dev/null @@ -1,32 +0,0 @@ -# $Id$ -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The Original Code is Copyright (C) 2006, Blender Foundation -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): Jacques Beaurain. -# -# ***** END GPL LICENSE BLOCK ***** - -SET(INC . intern) - -FILE(GLOB SRC intern/*.cpp) - -BLENDERLIB(bf_bmfont "${SRC}" "${INC}") -#, libtype=['intern','player'], priority = [20, 185] ) diff --git a/intern/bmfont/Makefile b/intern/bmfont/Makefile deleted file mode 100644 index de0fc715884..00000000000 --- a/intern/bmfont/Makefile +++ /dev/null @@ -1,52 +0,0 @@ -# -*- mode: gnumakefile; tab-width: 8; indent-tabs-mode: t; -*- -# vim: tabstop=8 -# -# $Id$ -# -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): Hans Lambermont, GSR -# -# ***** END GPL LICENSE BLOCK ***** -# bmfont main makefile. -# - -include nan_definitions.mk - -LIBNAME = bmfont -SOURCEDIR = intern/$(LIBNAME) -DIR = $(OCGDIR)/$(SOURCEDIR) -DIRS = intern -#not ready yet TESTDIRS = test - -include nan_subdirs.mk - -install: $(ALL_OR_DEBUG) - @[ -d $(NAN_BMFONT) ] || mkdir $(NAN_BMFONT) - @[ -d $(NAN_BMFONT)/include ] || mkdir $(NAN_BMFONT)/include - @[ -d $(NAN_BMFONT)/lib/$(DEBUG_DIR) ] || mkdir $(NAN_BMFONT)/lib/$(DEBUG_DIR) - @../tools/cpifdiff.sh $(DIR)/$(DEBUG_DIR)libbmfont.a $(NAN_BMFONT)/lib/$(DEBUG_DIR) -ifeq ($(OS),darwin) - ranlib $(NAN_BMFONT)/lib/$(DEBUG_DIR)libbmfont.a -endif - @../tools/cpifdiff.sh *.h $(NAN_BMFONT)/include/ - diff --git a/intern/bmfont/SConscript b/intern/bmfont/SConscript deleted file mode 100644 index 4febe2735e7..00000000000 --- a/intern/bmfont/SConscript +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/python -Import ('env') - -sources = env.Glob('intern/*.cpp') - -incs = '. intern' -incs += ' ' + env['BF_OPENGL_INC'] -defs = '' - -env.BlenderLib ('bf_bmfont', sources, Split(incs), Split(defs), libtype=['intern','player'], priority = [20, 185] ) diff --git a/intern/bmfont/intern/BDF2BMF.py b/intern/bmfont/intern/BDF2BMF.py deleted file mode 100644 index 15b9e5b8eb4..00000000000 --- a/intern/bmfont/intern/BDF2BMF.py +++ /dev/null @@ -1,177 +0,0 @@ -#!/usr/bin/python - -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# ***** END GPL LICENCE BLOCK ***** -# -------------------------------------------------------------------------- - -HELP_TXT = \ -''' -Convert BDF pixmap fonts into C++ files Blender can read. -Use to replace bitmap fonts or add new ones. - -Usage - python bdf2bmf.py -name=SomeName myfile.bdf - -Blender currently supports fonts with a maximum width of 8 pixels. -''' - -# -------- Simple BDF parser -import sys -def parse_bdf(f, MAX_CHARS=256): - lines = [l.strip().upper().split() for l in f.readlines()] - - is_bitmap = False - dummy = {'BITMAP':[]} - char_data = [dummy.copy() for i in xrange(MAX_CHARS)] - context_bitmap = [] - - for l in lines: - if l[0]=='ENCODING': enc = int(l[1]) - elif l[0]=='BBX': bbx = [int(c) for c in l[1:]] - elif l[0]=='DWIDTH': dwidth = int(l[1]) - elif l[0]=='BITMAP': is_bitmap = True - elif l[0]=='ENDCHAR': - if enc < MAX_CHARS: - char_data[enc]['BBX'] = bbx - char_data[enc]['DWIDTH'] = dwidth - char_data[enc]['BITMAP'] = context_bitmap - - context_bitmap = [] - enc = bbx = None - is_bitmap = False - else: - # None of the above, Ok, were reading a bitmap - if is_bitmap and enc < MAX_CHARS: - context_bitmap.append( int(l[0], 16) ) - - return char_data -# -------- end simple BDF parser - -def bdf2cpp_name(path): - return path.split('.')[0] + '.cpp' - -def convert_to_blender(bdf_dict, font_name, origfilename, MAX_CHARS=256): - - # first get a global width/height, also set the offsets - xmin = ymin = 10000000 - xmax = ymax = -10000000 - - bitmap_offsets = [-1] * MAX_CHARS - bitmap_tot = 0 - for i, c in enumerate(bdf_dict): - if c.has_key('BBX'): - bbx = c['BBX'] - xmax = max(bbx[0], xmax) - ymax = max(bbx[1], ymax) - xmin = min(bbx[2], xmin) - ymin = min(bbx[3], ymin) - - bitmap_offsets[i] = bitmap_tot - bitmap_tot += len(c['BITMAP']) - - c['BITMAP'].reverse() - - # Now we can write. Ok if we have no .'s in the path. - f = open(bdf2cpp_name(origfilename), 'w') - - f.write(''' -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_FontData.h" - -#include "BMF_Settings.h" -''') - - f.write('#if BMF_INCLUDE_%s\n\n' % font_name.upper()) - f.write('static unsigned char bitmap_data[]= {') - newline = 8 - - for i, c in enumerate(bdf_dict): - - for cdata in c['BITMAP']: - # Just formatting - newline+=1 - if newline >= 8: - newline = 0 - f.write('\n\t') - # End formatting - - f.write('0x%.2hx,' % cdata) # 0x80 <- format - - f.write("\n};\n") - - f.write("BMF_FontData BMF_font_%s = {\n" % font_name) - f.write('\t%d, %d,\n' % (xmin, ymin)) - f.write('\t%d, %d,\n' % (xmax, ymax)) - - f.write('\t{\n') - - - for i, c in enumerate(bdf_dict): - if bitmap_offsets[i] == -1 or c.has_key('BBX') == False: - f.write('\t\t{0,0,0,0,0, -1},\n') - else: - bbx = c['BBX'] - f.write('\t\t{%d,%d,%d,%d,%d, %d},\n' % (bbx[0], bbx[1], -bbx[2], -bbx[3], c['DWIDTH'], bitmap_offsets[i])) - - f.write(''' - }, - bitmap_data -}; - -#endif -''') - -def main(): - # replace "[-name=foo]" with "[-name] [foo]" - args = [] - for arg in sys.argv: - for a in arg.replace('=', ' ').split(): - args.append(a) - - name = 'untitled' - done_anything = False - for i, arg in enumerate(args): - if arg == '-name': - if i==len(args)-1: - print 'no arg given for -name, aborting' - return - else: - name = args[i+1] - - elif arg.lower().endswith('.bdf'): - try: - f = open(arg) - print '...Writing to:', bdf2cpp_name(arg) - except: - print 'could not open "%s", aborting' % arg - - - bdf_dict = parse_bdf(f) - convert_to_blender(bdf_dict, name, arg) - done_anything = True - - if not done_anything: - print HELP_TXT - print '...nothing to do' - -if __name__ == '__main__': - main() - diff --git a/intern/bmfont/intern/BMF_Api.cpp b/intern/bmfont/intern/BMF_Api.cpp deleted file mode 100644 index 1699393e53d..00000000000 --- a/intern/bmfont/intern/BMF_Api.cpp +++ /dev/null @@ -1,183 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** - - * $Id$ - * Copyright (C) 2001 NaN Technologies B.V. - * - * Implementation of the API of the OpenGL bitmap font library. - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_Api.h" - -#include "BMF_BitmapFont.h" - - -#if BMF_INCLUDE_HELV10 -extern BMF_FontData BMF_font_helv10; -static BMF_BitmapFont bmfHelv10(&BMF_font_helv10); -#endif // BMF_INCLUDE_HELV10 -#if BMF_INCLUDE_HELV12 -extern BMF_FontData BMF_font_helv12; -static BMF_BitmapFont bmfHelv12(&BMF_font_helv12); -#endif // BMF_INCLUDE_HELV12 -#if BMF_INCLUDE_HELVB8 -extern BMF_FontData BMF_font_helvb8; -static BMF_BitmapFont bmfHelvb8(&BMF_font_helvb8); -#endif // BMF_INCLUDE_HELVB8 -#if BMF_INCLUDE_HELVB10 -extern BMF_FontData BMF_font_helvb10; -static BMF_BitmapFont bmfHelvb10(&BMF_font_helvb10); -#endif // BMF_INCLUDE_HELVB10 -#if BMF_INCLUDE_HELVB12 -extern BMF_FontData BMF_font_helvb12; -static BMF_BitmapFont bmfHelvb12(&BMF_font_helvb12); -#endif // BMF_INCLUDE_HELVB12 -#if BMF_INCLUDE_HELVB14 -extern BMF_FontData BMF_font_helvb14; -static BMF_BitmapFont bmfHelvb14(&BMF_font_helvb14); -#endif // BMF_INCLUDE_HELVB14 -#if BMF_INCLUDE_SCR12 -extern BMF_FontData BMF_font_scr12; -static BMF_BitmapFont bmfScreen12(&BMF_font_scr12); -#endif // BMF_INCLUDE_SCR12 -#if BMF_INCLUDE_SCR14 -extern BMF_FontData BMF_font_scr14; -static BMF_BitmapFont bmfScreen14(&BMF_font_scr14); -#endif // BMF_INCLUDE_SCR14 -#if BMF_INCLUDE_SCR15 -extern BMF_FontData BMF_font_scr15; -static BMF_BitmapFont bmfScreen15(&BMF_font_scr15); -#endif // BMF_INCLUDE_SCR15 - - -BMF_Font* BMF_GetFont(BMF_FontType font) -{ - switch (font) - { -#if BMF_INCLUDE_HELV10 - case BMF_kHelvetica10: return (BMF_Font*) &bmfHelv10; -#endif // BMF_INCLUDE_HELV10 -#if BMF_INCLUDE_HELV12 - case BMF_kHelvetica12: return (BMF_Font*) &bmfHelv12; -#endif // BMF_INCLUDE_HELV12 -#if BMF_INCLUDE_HELVB8 - case BMF_kHelveticaBold8: return (BMF_Font*) &bmfHelvb8; -#endif // BMF_INCLUDE_HELVB8 -#if BMF_INCLUDE_HELVB10 - case BMF_kHelveticaBold10: return (BMF_Font*) &bmfHelvb10; -#endif // BMF_INCLUDE_HELVB10 -#if BMF_INCLUDE_HELVB12 - case BMF_kHelveticaBold12: return (BMF_Font*) &bmfHelvb12; -#endif // BMF_INCLUDE_HELVB12 -#if BMF_INCLUDE_HELVB14 - case BMF_kHelveticaBold14: return (BMF_Font*) &bmfHelvb14; -#endif // BMF_INCLUDE_HELVB12 -#if BMF_INCLUDE_SCR12 - case BMF_kScreen12: return (BMF_Font*) &bmfScreen12; -#endif // BMF_INCLUDE_SCR12 -#if BMF_INCLUDE_SCR14 - case BMF_kScreen14: return (BMF_Font*) &bmfScreen14; -#endif // BMF_INCLUDE_SCR14 -#if BMF_INCLUDE_SCR15 - case BMF_kScreen15: return (BMF_Font*) &bmfScreen15; -#endif // BMF_INCLUDE_SCR15 - default: - break; - } - return 0; -} - - -int BMF_DrawCharacter(BMF_Font* font, char c) -{ - char str[2] = {c, '\0'}; - return BMF_DrawString(font, str); -} - - -int BMF_DrawString(BMF_Font* font, char* str) -{ - if (!font) return 0; - ((BMF_BitmapFont*)font)->DrawString(str); - return 1; -} - - -int BMF_GetCharacterWidth(BMF_Font* font, char c) -{ - char str[2] = {c, '\0'}; - return BMF_GetStringWidth(font, str); -} - - -int BMF_GetStringWidth(BMF_Font* font, char* str) -{ - if (!font) return 0; - return ((BMF_BitmapFont*)font)->GetStringWidth(str); -} - -void BMF_GetStringBoundingBox(BMF_Font* font, char* str, float*llx, float *lly, float *urx, float *ury){ - if (!font){ - *llx = *lly = *urx = *ury = 0; - }else{ - ((BMF_BitmapFont*)font)->GetStringBoundingBox(str, llx, lly, urx, ury); - } -} - -void BMF_GetFontBoundingBox(BMF_Font* font, int *xmin_r, int *ymin_r, int *xmax_r, int *ymax_r) -{ - if (!font) return; - ((BMF_BitmapFont*)font)->GetFontBoundingBox(*xmin_r, *ymin_r, *xmax_r, *ymax_r); -} - -int BMF_GetFontHeight(BMF_Font* font) -{ - if (!font) return -1; - return ((BMF_BitmapFont*)font)->GetFontHeight(); -} - -int BMF_GetFontTexture(BMF_Font* font) { - if (!font) return -1; - return ((BMF_BitmapFont*)font)->GetTexture(); -} - -void BMF_DrawStringTexture(BMF_Font* font, char *string, float x, float y, float z) { - if (!font) return; - ((BMF_BitmapFont*)font)->DrawStringTexture(string, x, y, z); -} - -void BMF_DrawStringBuf(BMF_Font* font, char *str, int posx, int posy, float *col, unsigned char *buf, float *fbuf, int w, int h, int channels) { - if (!font) return; - ((BMF_BitmapFont*)font)->DrawStringBuf(str, posx, posy, col, buf, fbuf, w, h, channels); -} diff --git a/intern/bmfont/intern/BMF_BitmapFont.cpp b/intern/bmfont/intern/BMF_BitmapFont.cpp deleted file mode 100644 index 0111e9c3f93..00000000000 --- a/intern/bmfont/intern/BMF_BitmapFont.cpp +++ /dev/null @@ -1,323 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** - - * $Id$ - * Copyright (C) 2001 NaN Technologies B.V. - */ - - -#include - - - -#include - -#ifdef HAVE_CONFIG_H -#include -#endif - -#if defined(WIN32) || defined(__APPLE__) - #ifdef WIN32 - #if !defined(__CYGWIN32__) - #pragma warning(disable:4244) - #endif /* __CYGWIN32__ */ - #include - #include - #else // WIN32 - // __APPLE__ is defined - #include - #endif // WIN32 -#else // defined(WIN32) || defined(__APPLE__) - #include -#endif // defined(WIN32) || defined(__APPLE__) - -#include "BMF_BitmapFont.h" - - -BMF_BitmapFont::BMF_BitmapFont(BMF_FontData* fontData) -: m_fontData(fontData) -{ -} - - -BMF_BitmapFont::~BMF_BitmapFont(void) -{ -} - -void BMF_BitmapFont::DrawString(char* str) -{ - GLint alignment; - unsigned char c; - - glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - while ( (c = (unsigned char) *str++) ) { - BMF_CharData & cd = m_fontData->chars[c]; - - if (cd.data_offset==-1) { - GLubyte nullBitmap = 0; - - glBitmap(1, 1, 0, 0, cd.advance, 0, &nullBitmap); - } else { - GLubyte *bitmap = &m_fontData->bitmap_data[cd.data_offset]; - - glBitmap(cd.width, cd.height, cd.xorig, cd.yorig, cd.advance, 0, bitmap); - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, alignment); -} - - -int BMF_BitmapFont::GetStringWidth(char* str) -{ - unsigned char c; - int length = 0; - - while ( (c = (unsigned char) *str++) ) { - length += m_fontData->chars[c].advance; - } - - return length; -} - -void BMF_BitmapFont::GetFontBoundingBox(int & xMin, int & yMin, int & xMax, int & yMax) -{ - xMin = m_fontData->xmin; - yMin = m_fontData->ymin; - xMax = m_fontData->xmax; - yMax = m_fontData->ymax; -} - -int BMF_BitmapFont::GetFontHeight( void ) -{ - return m_fontData->ymax - m_fontData->ymin; -} - -void BMF_BitmapFont::GetStringBoundingBox(char* str, float*llx, float *lly, float *urx, float *ury) -{ - unsigned char c; - int length = 0; - int ascent = 0; - int descent = 0; - - while ( (c = (unsigned char) *str++) ) { - length += m_fontData->chars[c].advance; - int d = m_fontData->chars[c].yorig; - int a = m_fontData->chars[c].height - m_fontData->chars[c].yorig; - if(a > ascent) ascent = a; - if(d > descent) descent = d; - } - *llx = (float)0; - *lly = (float)-descent; - *urx = (float)length; - *ury = (float)ascent; -} - - -int BMF_BitmapFont::GetTexture() -{ - int fWidth = m_fontData->xmax - m_fontData->xmin; - int fHeight = m_fontData->ymax - m_fontData->ymin; - - if (fWidth>=16 || fHeight>=16) { - return -1; - } - - int cRows = 16, cCols = 16; - int cWidth = 16, cHeight = 16; - int iWidth = cCols*cWidth; - int iHeight = cRows*cHeight; - GLubyte *img = new GLubyte [iHeight*iWidth]; - GLuint texId; - - int baseLine = -(m_fontData->ymin); - - memset(img, 0, iHeight*iWidth); - for (int i = 0; i<256; i++) { - BMF_CharData & cd = m_fontData->chars[i]; - - if (cd.data_offset != -1) { - int cellX = i%16; - int cellY = i/16; - - for (int y = 0; ybitmap_data[cd.data_offset + ((cd.width+7)/8)*y]; - - for (int x = 0; xymin); - - glBegin(GL_QUADS); - while ( (c = (unsigned char) *str++) ) { - BMF_CharData & cd = m_fontData->chars[c]; - - if (cd.data_offset != -1) { - float cellX = (c%16)/16.0; - float cellY = (c/16)/16.0; - - glTexCoord2f(cellX + 1.0/16.0, cellY); - glVertex3f(x + pos + 16.0, -baseLine + y + 0.0, z); - - glTexCoord2f(cellX + 1.0/16.0, cellY + 1.0/16.0); - glVertex3f(x + pos + 16.0, -baseLine + y + 16.0, z); - - glTexCoord2f(cellX, cellY + 1.0/16.0); - glVertex3f(x + pos + 0.0, -baseLine + y + 16.0, z); - - glTexCoord2f(cellX, cellY); - glVertex3f(x + pos + 0.0, -baseLine + y + 0.0, z); - } - - pos += cd.advance; - } - glEnd(); -} - -#define FTOCHAR(val) val<=0.0f?0: (val>=1.0f?255: (char)(255.0f*val)) -void BMF_BitmapFont::DrawStringBuf(char *str, int posx, int posy, float *col, unsigned char *buf, float *fbuf, int w, int h, int channels) -{ - int x, y; - - if (buf==0 && fbuf==0) - return; - - /*offset for font*/ - posx -= m_fontData->xmin; - posy -= m_fontData->ymin; - - if (buf) { - unsigned char colch[4]; - unsigned char *max, *pixel; - unsigned char c; - - for (x=0; x<4; x++) { - colch[x] = FTOCHAR(col[x]); - } - - max = buf + (4 * (w * h)); - while ((c = (unsigned char) *str++)) { - BMF_CharData & cd = m_fontData->chars[c]; - if (cd.data_offset != -1) { - for (y = 0; y < cd.height; y++) { - unsigned char* chrRow = &m_fontData->bitmap_data[cd.data_offset + ((cd.width+7)/8)*y]; - for (x = cd.xorig; x < cd.width; x++) { - pixel = buf + 4 * (((posy + y - cd.yorig) * w) + (posx + x)); - if ((pixel < max) && (pixel > buf)) { - int byteIdx = x/8; - int bitIdx = 7 - (x%8); - - if (chrRow[byteIdx]&(1<chars[c]; - if (cd.data_offset != -1) { - for (yi = 0; yi < cd.height; yi++) { - unsigned char* chrRow = &m_fontData->bitmap_data[cd.data_offset + ((cd.width+7)/8)*yi]; - for (xi = cd.xorig; xi < cd.width; xi++) { - pixel = fbuf + 4 * (((posy + yi - cd.yorig) * w) + (posx + xi)); - if ((pixel < max) && (pixel > fbuf)) { - int byteIdx = xi/8; - int bitIdx = 7 - (xi%8); - - if (chrRow[byteIdx]&(1< -#endif - -#include "BMF_FontData.h" - -#include "BMF_Settings.h" - -#if BMF_INCLUDE_HELV10 - -static unsigned char bitmap_data[]= { - 0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80, - 0xa0,0xa0,0x50,0x50,0xf8,0x28,0x7c,0x28, - 0x28,0x20,0x70,0xa8,0x28,0x70,0xa0,0xa8, - 0x70,0x20,0x26,0x29,0x16,0x10,0x08,0x68, - 0x94,0x64,0x64,0x98,0x98,0xa4,0x60,0x50, - 0x50,0x20,0x80,0x40,0x40,0x20,0x40,0x40, - 0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x80, - 0x40,0x40,0x20,0x20,0x20,0x20,0x40,0x40, - 0x80,0xa0,0x40,0xa0,0x20,0x20,0xf8,0x20, - 0x20,0x80,0x40,0x40,0xf8,0x80,0x80,0x80, - 0x40,0x40,0x40,0x40,0x20,0x20,0x70,0x88, - 0x88,0x88,0x88,0x88,0x88,0x70,0x40,0x40, - 0x40,0x40,0x40,0x40,0xc0,0x40,0xf8,0x80, - 0x40,0x30,0x08,0x08,0x88,0x70,0x70,0x88, - 0x08,0x08,0x30,0x08,0x88,0x70,0x10,0x10, - 0xf8,0x90,0x50,0x50,0x30,0x10,0x70,0x88, - 0x08,0x08,0xf0,0x80,0x80,0xf8,0x70,0x88, - 0x88,0xc8,0xb0,0x80,0x88,0x70,0x40,0x40, - 0x20,0x20,0x10,0x10,0x08,0xf8,0x70,0x88, - 0x88,0x88,0x70,0x88,0x88,0x70,0x70,0x88, - 0x08,0x68,0x98,0x88,0x88,0x70,0x80,0x00, - 0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x00, - 0x00,0x00,0x00,0x40,0x20,0x40,0x80,0x40, - 0x20,0xf0,0x00,0xf0,0x80,0x40,0x20,0x40, - 0x80,0x40,0x00,0x40,0x40,0x20,0x10,0x90, - 0x60,0x3e,0x00,0x40,0x00,0x9b,0x00,0xa4, - 0x80,0xa4,0x80,0xa2,0x40,0x92,0x40,0x4d, - 0x40,0x20,0x80,0x1f,0x00,0x82,0x82,0x7c, - 0x44,0x28,0x28,0x10,0x10,0xf0,0x88,0x88, - 0x88,0xf0,0x88,0x88,0xf0,0x78,0x84,0x80, - 0x80,0x80,0x80,0x84,0x78,0xf0,0x88,0x84, - 0x84,0x84,0x84,0x88,0xf0,0xf8,0x80,0x80, - 0x80,0xf8,0x80,0x80,0xf8,0x80,0x80,0x80, - 0x80,0xf0,0x80,0x80,0xf8,0x74,0x8c,0x84, - 0x8c,0x80,0x80,0x84,0x78,0x84,0x84,0x84, - 0x84,0xfc,0x84,0x84,0x84,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x60,0x90,0x10, - 0x10,0x10,0x10,0x10,0x10,0x88,0x88,0x90, - 0x90,0xe0,0xa0,0x90,0x88,0xf0,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x92,0x92,0x92, - 0xaa,0xaa,0xc6,0xc6,0x82,0x8c,0x8c,0x94, - 0x94,0xa4,0xa4,0xc4,0xc4,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x78,0x80,0x80,0x80, - 0x80,0xf0,0x88,0x88,0xf0,0x02,0x7c,0x8c, - 0x94,0x84,0x84,0x84,0x84,0x78,0x88,0x88, - 0x88,0x88,0xf0,0x88,0x88,0xf0,0x70,0x88, - 0x88,0x08,0x70,0x80,0x88,0x70,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0xf8,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x28, - 0x28,0x44,0x44,0x44,0x82,0x82,0x22,0x00, - 0x22,0x00,0x22,0x00,0x55,0x00,0x49,0x00, - 0x49,0x00,0x88,0x80,0x88,0x80,0x88,0x88, - 0x50,0x50,0x20,0x50,0x88,0x88,0x10,0x10, - 0x10,0x28,0x28,0x44,0x44,0x82,0xf8,0x80, - 0x40,0x20,0x20,0x10,0x08,0xf8,0xc0,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0, - 0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80, - 0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0xc0,0x88,0x50,0x50,0x20,0x20,0xfc, - 0x80,0x80,0x40,0x68,0x90,0x90,0x70,0x10, - 0xe0,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80, - 0x80,0x60,0x90,0x80,0x80,0x90,0x60,0x68, - 0x98,0x88,0x88,0x98,0x68,0x08,0x08,0x60, - 0x90,0x80,0xf0,0x90,0x60,0x40,0x40,0x40, - 0x40,0x40,0xe0,0x40,0x30,0x70,0x08,0x68, - 0x98,0x88,0x88,0x98,0x68,0x88,0x88,0x88, - 0x88,0xc8,0xb0,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x80,0x90,0x90, - 0xa0,0xc0,0xa0,0x90,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x92,0x92, - 0x92,0x92,0x92,0xec,0x88,0x88,0x88,0x88, - 0xc8,0xb0,0x70,0x88,0x88,0x88,0x88,0x70, - 0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0, - 0x08,0x08,0x68,0x98,0x88,0x88,0x98,0x68, - 0x80,0x80,0x80,0x80,0xc0,0xa0,0x60,0x90, - 0x10,0x60,0x90,0x60,0x60,0x40,0x40,0x40, - 0x40,0xe0,0x40,0x40,0x70,0x90,0x90,0x90, - 0x90,0x90,0x20,0x20,0x50,0x50,0x88,0x88, - 0x28,0x28,0x54,0x54,0x92,0x92,0x88,0x88, - 0x50,0x20,0x50,0x88,0x80,0x40,0x40,0x60, - 0xa0,0xa0,0x90,0x90,0xf0,0x80,0x40,0x20, - 0x10,0xf0,0x20,0x40,0x40,0x40,0x40,0x80, - 0x40,0x40,0x40,0x20,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x40, - 0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80, - 0x98,0x64,0x80,0x80,0x80,0x80,0x80,0x80, - 0x00,0x80,0x40,0x70,0xa8,0xa0,0xa0,0xa8, - 0x70,0x10,0xb0,0x48,0x40,0x40,0xe0,0x40, - 0x48,0x30,0x90,0x60,0x90,0x90,0x60,0x90, - 0x20,0xf8,0x20,0xf8,0x50,0x50,0x88,0x88, - 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80, - 0x80,0x80,0x70,0x88,0x18,0x70,0xc8,0x98, - 0x70,0xc0,0x88,0x70,0xa0,0x38,0x44,0x9a, - 0xa2,0x9a,0x44,0x38,0xe0,0x00,0xa0,0x20, - 0xe0,0x28,0x50,0xa0,0x50,0x28,0x08,0x08, - 0xf8,0xe0,0x38,0x44,0xaa,0xb2,0xba,0x44, - 0x38,0xe0,0x60,0x90,0x90,0x60,0xf8,0x00, - 0x20,0x20,0xf8,0x20,0x20,0xe0,0x40,0xa0, - 0x60,0xc0,0x20,0x40,0xe0,0x80,0x40,0x80, - 0x80,0xf0,0x90,0x90,0x90,0x90,0x90,0x28, - 0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8, - 0x7c,0xc0,0xc0,0x40,0x40,0x40,0xc0,0x40, - 0xe0,0x00,0xe0,0xa0,0xe0,0xa0,0x50,0x28, - 0x50,0xa0,0x21,0x00,0x17,0x80,0x13,0x00, - 0x09,0x00,0x48,0x00,0x44,0x00,0xc4,0x00, - 0x42,0x00,0x27,0x12,0x15,0x0b,0x48,0x44, - 0xc4,0x42,0x21,0x00,0x17,0x80,0x13,0x00, - 0x09,0x00,0xc8,0x00,0x24,0x00,0x44,0x00, - 0xe2,0x00,0x60,0x90,0x80,0x40,0x20,0x20, - 0x00,0x20,0x82,0x82,0x7c,0x44,0x28,0x28, - 0x10,0x10,0x00,0x10,0x20,0x82,0x82,0x7c, - 0x44,0x28,0x28,0x10,0x10,0x00,0x10,0x08, - 0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10, - 0x00,0x28,0x10,0x82,0x82,0x7c,0x44,0x28, - 0x28,0x10,0x10,0x00,0x28,0x14,0x82,0x82, - 0x7c,0x44,0x28,0x28,0x10,0x10,0x00,0x28, - 0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10, - 0x10,0x28,0x10,0x8f,0x80,0x88,0x00,0x78, - 0x00,0x48,0x00,0x2f,0x80,0x28,0x00,0x18, - 0x00,0x1f,0x80,0x30,0x10,0x78,0x84,0x80, - 0x80,0x80,0x80,0x84,0x78,0xf8,0x80,0x80, - 0x80,0xf8,0x80,0x80,0xf8,0x00,0x20,0x40, - 0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8, - 0x00,0x20,0x10,0xf8,0x80,0x80,0xf8,0x80, - 0x80,0x80,0xf8,0x00,0x50,0x20,0xf8,0x80, - 0x80,0x80,0xf8,0x80,0x80,0xf8,0x00,0x50, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x00,0x80,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0x00,0xa0,0x78,0x44,0x42,0x42,0xf2, - 0x42,0x44,0x78,0x8c,0x8c,0x94,0x94,0xa4, - 0xa4,0xc4,0xc4,0x00,0x50,0x28,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x10, - 0x20,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x78,0x00,0x10,0x08,0x78,0x84,0x84,0x84, - 0x84,0x84,0x84,0x78,0x00,0x28,0x10,0x78, - 0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x00, - 0x50,0x28,0x78,0x84,0x84,0x84,0x84,0x84, - 0x84,0x78,0x00,0x48,0x88,0x50,0x20,0x50, - 0x88,0x80,0x78,0xc4,0xa4,0xa4,0x94,0x94, - 0x8c,0x78,0x04,0x78,0x84,0x84,0x84,0x84, - 0x84,0x84,0x84,0x00,0x10,0x20,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x20, - 0x10,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x00,0x28,0x10,0x78,0x84,0x84,0x84, - 0x84,0x84,0x84,0x84,0x00,0x48,0x10,0x10, - 0x10,0x28,0x28,0x44,0x44,0x82,0x00,0x10, - 0x08,0x80,0x80,0xf0,0x88,0x88,0xf0,0x80, - 0x80,0xa0,0x90,0x90,0x90,0xa0,0x90,0x90, - 0x60,0x68,0x90,0x90,0x70,0x10,0xe0,0x00, - 0x20,0x40,0x68,0x90,0x90,0x70,0x10,0xe0, - 0x00,0x20,0x10,0x68,0x90,0x90,0x70,0x10, - 0xe0,0x00,0x50,0x20,0x68,0x90,0x90,0x70, - 0x10,0xe0,0x00,0xa0,0x50,0x68,0x90,0x90, - 0x70,0x10,0xe0,0x00,0x50,0x68,0x90,0x90, - 0x70,0x10,0xe0,0x20,0x50,0x20,0x6c,0x92, - 0x90,0x7e,0x12,0xec,0x60,0x20,0x60,0x90, - 0x80,0x80,0x90,0x60,0x60,0x90,0x80,0xf0, - 0x90,0x60,0x00,0x20,0x40,0x60,0x90,0x80, - 0xf0,0x90,0x60,0x00,0x40,0x20,0x60,0x90, - 0x80,0xf0,0x90,0x60,0x00,0x50,0x20,0x60, - 0x90,0x80,0xf0,0x90,0x60,0x00,0x50,0x40, - 0x40,0x40,0x40,0x40,0x40,0x00,0x40,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, - 0xa0,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x00,0xa0,0x70,0x88,0x88,0x88,0x88,0x78, - 0x90,0x60,0x50,0x90,0x90,0x90,0x90,0x90, - 0xe0,0x00,0xa0,0x50,0x70,0x88,0x88,0x88, - 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88, - 0x88,0x88,0x70,0x00,0x20,0x10,0x70,0x88, - 0x88,0x88,0x88,0x70,0x00,0x50,0x20,0x70, - 0x88,0x88,0x88,0x88,0x70,0x00,0x50,0x28, - 0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x50, - 0x20,0x00,0xf8,0x00,0x20,0x70,0x88,0xc8, - 0xa8,0x98,0x74,0x70,0x90,0x90,0x90,0x90, - 0x90,0x00,0x20,0x40,0x70,0x90,0x90,0x90, - 0x90,0x90,0x00,0x40,0x20,0x70,0x90,0x90, - 0x90,0x90,0x90,0x00,0x50,0x20,0x70,0x90, - 0x90,0x90,0x90,0x90,0x00,0x50,0x80,0x40, - 0x40,0x60,0xa0,0xa0,0x90,0x90,0x00,0x20, - 0x10,0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8, - 0xb0,0x80,0x80,0x80,0x40,0x40,0x60,0xa0, - 0xa0,0x90,0x90,0x00,0x50, -}; - -BMF_FontData BMF_font_helv10 = { - -1, -2, - 10, 11, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 12, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 3, -1}, - {1, 8, -1, 0, 3, 0}, - {3, 2, -1, -6, 4, 8}, - {6, 7, 0, 0, 6, 10}, - {5, 9, 0, 1, 6, 17}, - {8, 8, 0, 0, 9, 26}, - {6, 8, -1, 0, 8, 34}, - {2, 3, -1, -5, 3, 42}, - {3, 10, 0, 2, 4, 45}, - {3, 10, -1, 2, 4, 55}, - {3, 3, 0, -5, 4, 65}, - {5, 5, 0, -1, 6, 68}, - {2, 3, 0, 2, 3, 73}, - {5, 1, -1, -3, 7, 76}, - {1, 1, -1, 0, 3, 77}, - {3, 8, 0, 0, 3, 78}, - {5, 8, 0, 0, 6, 86}, - {2, 8, -1, 0, 6, 94}, - {5, 8, 0, 0, 6, 102}, - {5, 8, 0, 0, 6, 110}, - {5, 8, 0, 0, 6, 118}, - {5, 8, 0, 0, 6, 126}, - {5, 8, 0, 0, 6, 134}, - {5, 8, 0, 0, 6, 142}, - {5, 8, 0, 0, 6, 150}, - {5, 8, 0, 0, 6, 158}, - {1, 6, -1, 0, 3, 166}, - {2, 8, 0, 2, 3, 172}, - {3, 5, -1, -1, 6, 180}, - {4, 3, 0, -2, 5, 185}, - {3, 5, -1, -1, 6, 188}, - {4, 8, -1, 0, 6, 193}, - {10, 10, 0, 2, 11, 201}, - {7, 8, 0, 0, 7, 221}, - {5, 8, -1, 0, 7, 229}, - {6, 8, -1, 0, 8, 237}, - {6, 8, -1, 0, 8, 245}, - {5, 8, -1, 0, 7, 253}, - {5, 8, -1, 0, 6, 261}, - {6, 8, -1, 0, 8, 269}, - {6, 8, -1, 0, 8, 277}, - {1, 8, -1, 0, 3, 285}, - {4, 8, 0, 0, 5, 293}, - {5, 8, -1, 0, 7, 301}, - {4, 8, -1, 0, 6, 309}, - {7, 8, -1, 0, 9, 317}, - {6, 8, -1, 0, 8, 325}, - {6, 8, -1, 0, 8, 333}, - {5, 8, -1, 0, 7, 341}, - {7, 9, -1, 1, 8, 349}, - {5, 8, -1, 0, 7, 358}, - {5, 8, -1, 0, 7, 366}, - {5, 8, 0, 0, 5, 374}, - {6, 8, -1, 0, 8, 382}, - {7, 8, 0, 0, 7, 390}, - {9, 8, 0, 0, 9, 398}, - {5, 8, -1, 0, 7, 414}, - {7, 8, 0, 0, 7, 422}, - {5, 8, -1, 0, 7, 430}, - {2, 10, -1, 2, 3, 438}, - {3, 8, 0, 0, 3, 448}, - {2, 10, 0, 2, 3, 456}, - {5, 5, 0, -3, 6, 466}, - {6, 1, 0, 2, 6, 471}, - {2, 3, 0, -5, 3, 472}, - {5, 6, 0, 0, 5, 475}, - {5, 8, 0, 0, 6, 481}, - {4, 6, 0, 0, 5, 489}, - {5, 8, 0, 0, 6, 495}, - {4, 6, 0, 0, 5, 503}, - {4, 8, 0, 0, 4, 509}, - {5, 8, 0, 2, 6, 517}, - {5, 8, 0, 0, 6, 525}, - {1, 8, 0, 0, 2, 533}, - {1, 9, 0, 1, 2, 541}, - {4, 8, 0, 0, 5, 550}, - {1, 8, 0, 0, 2, 558}, - {7, 6, 0, 0, 8, 566}, - {5, 6, 0, 0, 6, 572}, - {5, 6, 0, 0, 6, 578}, - {5, 8, 0, 2, 6, 584}, - {5, 8, 0, 2, 6, 592}, - {3, 6, 0, 0, 4, 600}, - {4, 6, 0, 0, 5, 606}, - {3, 8, 0, 0, 4, 612}, - {4, 6, 0, 0, 5, 620}, - {5, 6, 0, 0, 6, 626}, - {7, 6, 0, 0, 8, 632}, - {5, 6, 0, 0, 6, 638}, - {4, 8, 0, 2, 5, 644}, - {4, 6, 0, 0, 5, 652}, - {3, 10, 0, 2, 3, 658}, - {1, 10, -1, 2, 3, 668}, - {3, 10, 0, 2, 3, 678}, - {6, 2, 0, -3, 7, 688}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 3, -1}, - {1, 8, -1, 2, 3, 690}, - {5, 8, 0, 1, 6, 698}, - {5, 8, 0, 0, 6, 706}, - {4, 6, 0, -1, 5, 714}, - {5, 8, 0, 0, 6, 720}, - {1, 10, -1, 2, 3, 728}, - {5, 10, 0, 2, 6, 738}, - {3, 1, 0, -7, 3, 748}, - {7, 7, -1, 0, 9, 749}, - {3, 5, 0, -3, 4, 756}, - {5, 5, 0, 0, 6, 761}, - {5, 3, -1, -2, 7, 766}, - {3, 1, 0, -3, 4, 769}, - {7, 7, -1, 0, 9, 770}, - {3, 1, 0, -7, 3, 777}, - {4, 4, 0, -3, 4, 778}, - {5, 7, 0, 0, 6, 782}, - {3, 4, 0, -3, 3, 789}, - {3, 4, 0, -3, 3, 793}, - {2, 2, 0, -6, 3, 797}, - {4, 8, 0, 2, 5, 799}, - {6, 10, 0, 2, 6, 807}, - {2, 1, 0, -3, 3, 817}, - {2, 2, 0, 2, 3, 818}, - {2, 4, 0, -3, 3, 820}, - {3, 5, 0, -3, 4, 824}, - {5, 5, 0, 0, 6, 829}, - {9, 8, 0, 0, 9, 834}, - {8, 8, 0, 0, 9, 850}, - {9, 8, 0, 0, 9, 858}, - {4, 8, -1, 2, 6, 874}, - {7, 11, 0, 0, 7, 882}, - {7, 11, 0, 0, 7, 893}, - {7, 11, 0, 0, 7, 904}, - {7, 11, 0, 0, 7, 915}, - {7, 10, 0, 0, 7, 926}, - {7, 11, 0, 0, 7, 936}, - {9, 8, 0, 0, 10, 947}, - {6, 10, -1, 2, 8, 963}, - {5, 11, -1, 0, 7, 973}, - {5, 11, -1, 0, 7, 984}, - {5, 11, -1, 0, 7, 995}, - {5, 10, -1, 0, 7, 1006}, - {2, 11, 0, 0, 3, 1016}, - {2, 11, -1, 0, 3, 1027}, - {3, 11, 0, 0, 3, 1038}, - {3, 10, 0, 0, 3, 1049}, - {7, 8, 0, 0, 8, 1059}, - {6, 11, -1, 0, 8, 1067}, - {6, 11, -1, 0, 8, 1078}, - {6, 11, -1, 0, 8, 1089}, - {6, 11, -1, 0, 8, 1100}, - {6, 11, -1, 0, 8, 1111}, - {6, 10, -1, 0, 8, 1122}, - {5, 5, 0, -1, 6, 1132}, - {6, 10, -1, 1, 8, 1137}, - {6, 11, -1, 0, 8, 1147}, - {6, 11, -1, 0, 8, 1158}, - {6, 11, -1, 0, 8, 1169}, - {6, 10, -1, 0, 8, 1180}, - {7, 11, 0, 0, 7, 1190}, - {5, 8, -1, 0, 7, 1201}, - {4, 8, 0, 0, 5, 1209}, - {5, 9, 0, 0, 5, 1217}, - {5, 9, 0, 0, 5, 1226}, - {5, 9, 0, 0, 5, 1235}, - {5, 9, 0, 0, 5, 1244}, - {5, 8, 0, 0, 5, 1253}, - {5, 9, 0, 0, 5, 1261}, - {7, 6, 0, 0, 8, 1270}, - {4, 8, 0, 2, 5, 1276}, - {4, 9, 0, 0, 5, 1284}, - {4, 9, 0, 0, 5, 1293}, - {4, 9, 0, 0, 5, 1302}, - {4, 8, 0, 0, 5, 1311}, - {2, 9, 1, 0, 2, 1319}, - {2, 9, 0, 0, 2, 1328}, - {3, 9, 1, 0, 2, 1337}, - {3, 8, 0, 0, 2, 1346}, - {5, 9, 0, 0, 6, 1354}, - {4, 9, 0, 0, 5, 1363}, - {5, 9, 0, 0, 6, 1372}, - {5, 9, 0, 0, 6, 1381}, - {5, 9, 0, 0, 6, 1390}, - {5, 9, 0, 0, 6, 1399}, - {5, 8, 0, 0, 6, 1408}, - {5, 5, 0, -1, 6, 1416}, - {6, 6, 0, 0, 6, 1421}, - {4, 9, 0, 0, 5, 1427}, - {4, 9, 0, 0, 5, 1436}, - {4, 9, 0, 0, 5, 1445}, - {4, 8, 0, 0, 5, 1454}, - {4, 11, 0, 2, 5, 1462}, - {5, 10, 0, 2, 6, 1473}, - {4, 10, 0, 2, 5, 1483}, - }, - bitmap_data -}; - -#endif - diff --git a/intern/bmfont/intern/BMF_font_helv12.cpp b/intern/bmfont/intern/BMF_font_helv12.cpp deleted file mode 100644 index 29b08b659ee..00000000000 --- a/intern/bmfont/intern/BMF_font_helv12.cpp +++ /dev/null @@ -1,525 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_FontData.h" -#include "BMF_Settings.h" - -#if BMF_INCLUDE_HELV12 - -static unsigned char bitmap_data[]= { - 0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0xa0,0xa0,0xa0,0x50,0x50,0x50,0xfc, - 0x28,0xfc,0x28,0x28,0x20,0x70,0xa8,0xa8, - 0x28,0x70,0xa0,0xa8,0x70,0x20,0x23,0x00, - 0x14,0x80,0x14,0x80,0x13,0x00,0x08,0x00, - 0x68,0x00,0x94,0x00,0x94,0x00,0x62,0x00, - 0x72,0x8c,0x84,0x8a,0x50,0x30,0x48,0x48, - 0x30,0x80,0x40,0xc0,0x20,0x40,0x40,0x80, - 0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20, - 0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20, - 0x20,0x40,0x40,0x80,0xa0,0x40,0xa0,0x20, - 0x20,0xf8,0x20,0x20,0x80,0x40,0x40,0xf8, - 0x80,0x80,0x80,0x40,0x40,0x40,0x20,0x20, - 0x10,0x10,0x70,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x70,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0xe0,0x20,0xf8,0x80,0x80,0x40, - 0x20,0x10,0x08,0x88,0x70,0x70,0x88,0x88, - 0x08,0x08,0x30,0x08,0x88,0x70,0x08,0x08, - 0xfc,0x88,0x48,0x28,0x28,0x18,0x08,0x70, - 0x88,0x88,0x08,0x08,0xf0,0x80,0x80,0xf8, - 0x70,0x88,0x88,0x88,0xc8,0xb0,0x80,0x88, - 0x70,0x40,0x40,0x20,0x20,0x20,0x10,0x10, - 0x08,0xf8,0x70,0x88,0x88,0x88,0x88,0x70, - 0x88,0x88,0x70,0x70,0x88,0x08,0x08,0x78, - 0x88,0x88,0x88,0x70,0x80,0x00,0x00,0x00, - 0x00,0x80,0x80,0x40,0x40,0x00,0x00,0x00, - 0x00,0x40,0x0c,0x30,0xc0,0x30,0x0c,0xf8, - 0x00,0xf8,0xc0,0x30,0x0c,0x30,0xc0,0x20, - 0x00,0x20,0x20,0x10,0x10,0x88,0x88,0x70, - 0x3e,0x00,0x40,0x00,0x9b,0x00,0xa6,0x80, - 0xa2,0x40,0xa2,0x40,0x92,0x40,0x4d,0x40, - 0x60,0x80,0x1f,0x00,0x82,0x82,0x82,0x7c, - 0x44,0x44,0x28,0x28,0x10,0xf8,0x84,0x84, - 0x84,0xf8,0x84,0x84,0x84,0xf8,0x3c,0x42, - 0x80,0x80,0x80,0x80,0x80,0x42,0x3c,0xf8, - 0x84,0x82,0x82,0x82,0x82,0x82,0x84,0xf8, - 0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80, - 0xfc,0x80,0x80,0x80,0x80,0xf8,0x80,0x80, - 0x80,0xfc,0x3a,0x46,0x82,0x82,0x8e,0x80, - 0x80,0x42,0x3c,0x82,0x82,0x82,0x82,0xfe, - 0x82,0x82,0x82,0x82,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x70,0x88,0x88, - 0x08,0x08,0x08,0x08,0x08,0x08,0x82,0x84, - 0x88,0x90,0xe0,0xa0,0x90,0x88,0x84,0xf8, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x88,0x80,0x88,0x80,0x94,0x80,0x94,0x80, - 0xa2,0x80,0xa2,0x80,0xc1,0x80,0xc1,0x80, - 0x80,0x80,0x82,0x86,0x8a,0x8a,0x92,0xa2, - 0xa2,0xc2,0x82,0x3c,0x42,0x81,0x81,0x81, - 0x81,0x81,0x42,0x3c,0x80,0x80,0x80,0x80, - 0xf8,0x84,0x84,0x84,0xf8,0x3d,0x42,0x85, - 0x89,0x81,0x81,0x81,0x42,0x3c,0x84,0x84, - 0x84,0x88,0xf8,0x84,0x84,0x84,0xf8,0x78, - 0x84,0x84,0x04,0x18,0x60,0x80,0x84,0x78, - 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, - 0xfe,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x84,0x10,0x10,0x28,0x28,0x44,0x44, - 0x44,0x82,0x82,0x22,0x00,0x22,0x00,0x22, - 0x00,0x55,0x00,0x55,0x00,0x49,0x00,0x88, - 0x80,0x88,0x80,0x88,0x80,0x82,0x44,0x44, - 0x28,0x10,0x28,0x44,0x44,0x82,0x10,0x10, - 0x10,0x10,0x28,0x44,0x44,0x82,0x82,0xfe, - 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0xfe, - 0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0xc0,0x10,0x10,0x20,0x20, - 0x20,0x40,0x40,0x80,0x80,0xc0,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0xc0,0x88,0x50,0x20,0xfe,0xc0,0x80,0x40, - 0x74,0x88,0x88,0x78,0x08,0x88,0x70,0xb0, - 0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80, - 0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x68, - 0x98,0x88,0x88,0x88,0x98,0x68,0x08,0x08, - 0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x40, - 0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30, - 0x70,0x88,0x08,0x68,0x98,0x88,0x88,0x88, - 0x98,0x68,0x88,0x88,0x88,0x88,0x88,0xc8, - 0xb0,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x00,0x80,0x80,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x40, - 0x88,0x90,0xa0,0xc0,0xc0,0xa0,0x90,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x92,0x92,0x92,0x92,0x92,0xda, - 0xa4,0x88,0x88,0x88,0x88,0x88,0xc8,0xb0, - 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x80, - 0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8, - 0xb0,0x08,0x08,0x08,0x68,0x98,0x88,0x88, - 0x88,0x98,0x68,0x80,0x80,0x80,0x80,0x80, - 0xc0,0xa0,0x60,0x90,0x10,0x60,0x80,0x90, - 0x60,0x60,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x40,0x40,0x68,0x98,0x88,0x88,0x88,0x88, - 0x88,0x20,0x20,0x50,0x50,0x88,0x88,0x88, - 0x22,0x00,0x22,0x00,0x55,0x00,0x49,0x00, - 0x49,0x00,0x88,0x80,0x88,0x80,0x84,0x84, - 0x48,0x30,0x30,0x48,0x84,0x80,0x40,0x20, - 0x20,0x50,0x50,0x90,0x88,0x88,0x88,0xf0, - 0x80,0x40,0x40,0x20,0x10,0xf0,0x30,0x40, - 0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40, - 0x40,0x30,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x20, - 0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20, - 0x20,0xc0,0x98,0x64,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x80,0x40,0x70, - 0xc8,0xa0,0xa0,0xa0,0xa8,0x70,0x10,0xb0, - 0x48,0x20,0x20,0xf0,0x40,0x40,0x48,0x30, - 0x84,0x78,0x48,0x48,0x78,0x84,0x20,0x20, - 0xf8,0x20,0xf8,0x20,0x50,0x88,0x88,0x80, - 0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80, - 0x80,0x80,0x70,0x88,0x08,0x30,0x48,0x88, - 0x88,0x90,0x60,0x80,0x88,0x70,0xa0,0x3e, - 0x00,0x41,0x00,0x9c,0x80,0xa2,0x80,0xa0, - 0x80,0xa2,0x80,0x9c,0x80,0x41,0x00,0x3e, - 0x00,0xe0,0x00,0xa0,0x20,0xe0,0x28,0x50, - 0xa0,0x50,0x28,0x04,0x04,0x04,0xfc,0xf0, - 0x3e,0x00,0x41,0x00,0x94,0x80,0x94,0x80, - 0x98,0x80,0x94,0x80,0x9c,0x80,0x41,0x00, - 0x3e,0x00,0xf0,0x60,0x90,0x90,0x60,0xf8, - 0x00,0x20,0x20,0xf8,0x20,0x20,0xf0,0x40, - 0x20,0x90,0x60,0xc0,0x20,0x40,0x20,0xe0, - 0x80,0x40,0x80,0x80,0x80,0xe8,0x98,0x88, - 0x88,0x88,0x88,0x88,0x28,0x28,0x28,0x28, - 0x28,0x28,0x68,0xe8,0xe8,0xe8,0x68,0x3c, - 0x80,0xc0,0x20,0x20,0x40,0x40,0x40,0x40, - 0xc0,0x40,0xe0,0x00,0xe0,0xa0,0xe0,0xa0, - 0x50,0x28,0x50,0xa0,0x41,0x00,0x27,0x80, - 0x15,0x00,0x13,0x00,0x49,0x00,0x44,0x00, - 0x44,0x00,0xc2,0x00,0x41,0x00,0x47,0x80, - 0x22,0x00,0x11,0x00,0x14,0x80,0x4b,0x00, - 0x48,0x00,0x44,0x00,0xc2,0x00,0x41,0x00, - 0x21,0x00,0x17,0x80,0x15,0x00,0x0b,0x00, - 0xc9,0x00,0x24,0x00,0x44,0x00,0x22,0x00, - 0xe1,0x00,0x70,0x88,0x88,0x40,0x40,0x20, - 0x20,0x00,0x20,0x82,0x82,0x82,0x7c,0x44, - 0x44,0x28,0x10,0x10,0x00,0x10,0x20,0x82, - 0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10, - 0x00,0x10,0x08,0x82,0x82,0x82,0x7c,0x44, - 0x44,0x28,0x10,0x10,0x00,0x28,0x10,0x82, - 0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10, - 0x00,0x28,0x14,0x82,0x82,0x82,0x7c,0x44, - 0x44,0x28,0x10,0x10,0x00,0x28,0x82,0x82, - 0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x10, - 0x28,0x10,0x8f,0x80,0x88,0x00,0x88,0x00, - 0x78,0x00,0x4f,0x80,0x48,0x00,0x28,0x00, - 0x28,0x00,0x1f,0x80,0x30,0x08,0x08,0x3c, - 0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c, - 0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80, - 0xfc,0x00,0x10,0x20,0xfc,0x80,0x80,0x80, - 0xfc,0x80,0x80,0x80,0xfc,0x00,0x10,0x08, - 0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80, - 0xfc,0x00,0x28,0x10,0xfc,0x80,0x80,0x80, - 0xfc,0x80,0x80,0x80,0xfc,0x00,0x28,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x80,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x00,0xa0,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x00,0xa0,0x7c,0x42, - 0x41,0x41,0xf1,0x41,0x41,0x42,0x7c,0x82, - 0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82, - 0x00,0x28,0x14,0x3c,0x42,0x81,0x81,0x81, - 0x81,0x81,0x42,0x3c,0x00,0x08,0x10,0x3c, - 0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c, - 0x00,0x08,0x04,0x3c,0x42,0x81,0x81,0x81, - 0x81,0x81,0x42,0x3c,0x00,0x14,0x08,0x3c, - 0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c, - 0x00,0x28,0x14,0x3c,0x42,0x81,0x81,0x81, - 0x81,0x81,0x42,0x3c,0x00,0x24,0x88,0x50, - 0x20,0x50,0x88,0x80,0x00,0x5e,0x00,0x21, - 0x00,0x50,0x80,0x48,0x80,0x44,0x80,0x44, - 0x80,0x42,0x80,0x21,0x00,0x1e,0x80,0x00, - 0x40,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x84,0x00,0x10,0x20,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x10, - 0x08,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x84,0x00,0x28,0x10,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x48, - 0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82, - 0x82,0x00,0x10,0x08,0x80,0x80,0xf8,0x84, - 0x84,0x84,0xf8,0x80,0x80,0xb0,0x88,0x88, - 0x88,0xb0,0x88,0x88,0x88,0x70,0x74,0x88, - 0x88,0x78,0x08,0x88,0x70,0x00,0x10,0x20, - 0x74,0x88,0x88,0x78,0x08,0x88,0x70,0x00, - 0x20,0x10,0x74,0x88,0x88,0x78,0x08,0x88, - 0x70,0x00,0x50,0x20,0x74,0x88,0x88,0x78, - 0x08,0x88,0x70,0x00,0x50,0x28,0x74,0x88, - 0x88,0x78,0x08,0x88,0x70,0x00,0x50,0x74, - 0x88,0x88,0x78,0x08,0x88,0x70,0x30,0x48, - 0x30,0x77,0x00,0x88,0x80,0x88,0x00,0x7f, - 0x80,0x08,0x80,0x88,0x80,0x77,0x00,0x60, - 0x10,0x20,0x70,0x88,0x80,0x80,0x80,0x88, - 0x70,0x70,0x88,0x80,0xf8,0x88,0x88,0x70, - 0x00,0x20,0x40,0x70,0x88,0x80,0xf8,0x88, - 0x88,0x70,0x00,0x20,0x10,0x70,0x88,0x80, - 0xf8,0x88,0x88,0x70,0x00,0x50,0x20,0x70, - 0x88,0x80,0xf8,0x88,0x88,0x70,0x00,0x50, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, - 0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x00,0x80,0x40,0x40,0x40,0x40,0x40, - 0x40,0x40,0x40,0x00,0xa0,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x00,0xa0,0x70, - 0x88,0x88,0x88,0x88,0x78,0x08,0x50,0x30, - 0x68,0x88,0x88,0x88,0x88,0x88,0xc8,0xb0, - 0x00,0x50,0x28,0x70,0x88,0x88,0x88,0x88, - 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88, - 0x88,0x88,0x88,0x70,0x00,0x20,0x10,0x70, - 0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x50, - 0x20,0x70,0x88,0x88,0x88,0x88,0x88,0x70, - 0x00,0x50,0x28,0x70,0x88,0x88,0x88,0x88, - 0x88,0x70,0x00,0x50,0x20,0x00,0xf8,0x00, - 0x20,0xb8,0x44,0x64,0x54,0x4c,0x44,0x3a, - 0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x00, - 0x20,0x40,0x68,0x98,0x88,0x88,0x88,0x88, - 0x88,0x00,0x20,0x10,0x68,0x98,0x88,0x88, - 0x88,0x88,0x88,0x00,0x50,0x20,0x68,0x98, - 0x88,0x88,0x88,0x88,0x88,0x00,0x50,0x80, - 0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88, - 0x88,0x00,0x20,0x10,0x80,0x80,0x80,0xb0, - 0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80, - 0xc0,0x20,0x20,0x20,0x30,0x50,0x50,0x48, - 0x88,0x88,0x00,0x50, -}; - -BMF_FontData BMF_font_helv12 = { - 0, -3, - 11, 12, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 16, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 4, -1}, - {1, 9, -1, 0, 3, 0}, - {3, 3, -1, -6, 5, 9}, - {6, 8, 0, 0, 7, 12}, - {5, 10, -1, 1, 7, 20}, - {9, 9, -1, 0, 11, 30}, - {7, 9, -1, 0, 9, 48}, - {2, 3, -1, -6, 3, 57}, - {3, 12, -1, 3, 4, 60}, - {3, 12, 0, 3, 4, 72}, - {3, 3, -1, -6, 5, 84}, - {5, 5, -1, -1, 7, 87}, - {2, 3, -1, 2, 4, 92}, - {5, 1, -1, -3, 8, 95}, - {1, 1, -1, 0, 3, 96}, - {4, 9, 0, 0, 4, 97}, - {5, 9, -1, 0, 7, 106}, - {3, 9, -1, 0, 7, 115}, - {5, 9, -1, 0, 7, 124}, - {5, 9, -1, 0, 7, 133}, - {6, 9, 0, 0, 7, 142}, - {5, 9, -1, 0, 7, 151}, - {5, 9, -1, 0, 7, 160}, - {5, 9, -1, 0, 7, 169}, - {5, 9, -1, 0, 7, 178}, - {5, 9, -1, 0, 7, 187}, - {1, 6, -1, 0, 3, 196}, - {2, 8, 0, 2, 3, 202}, - {6, 5, 0, -1, 7, 210}, - {5, 3, -1, -2, 7, 215}, - {6, 5, -1, -1, 7, 218}, - {5, 9, -1, 0, 7, 223}, - {10, 10, -1, 1, 12, 232}, - {7, 9, -1, 0, 9, 252}, - {6, 9, -1, 0, 8, 261}, - {7, 9, -1, 0, 9, 270}, - {7, 9, -1, 0, 9, 279}, - {6, 9, -1, 0, 8, 288}, - {6, 9, -1, 0, 8, 297}, - {7, 9, -1, 0, 9, 306}, - {7, 9, -1, 0, 9, 315}, - {1, 9, -1, 0, 3, 324}, - {5, 9, -1, 0, 7, 333}, - {7, 9, -1, 0, 8, 342}, - {5, 9, -1, 0, 7, 351}, - {9, 9, -1, 0, 11, 360}, - {7, 9, -1, 0, 9, 378}, - {8, 9, -1, 0, 10, 387}, - {6, 9, -1, 0, 8, 396}, - {8, 9, -1, 0, 10, 405}, - {6, 9, -1, 0, 8, 414}, - {6, 9, -1, 0, 8, 423}, - {7, 9, 0, 0, 7, 432}, - {6, 9, -1, 0, 8, 441}, - {7, 9, -1, 0, 9, 450}, - {9, 9, -1, 0, 11, 459}, - {7, 9, -1, 0, 9, 477}, - {7, 9, -1, 0, 9, 486}, - {7, 9, -1, 0, 9, 495}, - {2, 12, -1, 3, 3, 504}, - {4, 9, 0, 0, 4, 516}, - {2, 12, 0, 3, 3, 525}, - {5, 3, 0, -5, 6, 537}, - {7, 1, 0, 2, 7, 540}, - {2, 3, 0, -6, 3, 541}, - {6, 7, -1, 0, 7, 544}, - {5, 9, -1, 0, 7, 551}, - {5, 7, -1, 0, 7, 560}, - {5, 9, -1, 0, 7, 567}, - {5, 7, -1, 0, 7, 576}, - {4, 9, 0, 0, 3, 583}, - {5, 10, -1, 3, 7, 592}, - {5, 9, -1, 0, 7, 602}, - {1, 9, -1, 0, 3, 611}, - {2, 12, 0, 3, 3, 620}, - {5, 9, -1, 0, 6, 632}, - {1, 9, -1, 0, 3, 641}, - {7, 7, -1, 0, 9, 650}, - {5, 7, -1, 0, 7, 657}, - {5, 7, -1, 0, 7, 664}, - {5, 10, -1, 3, 7, 671}, - {5, 10, -1, 3, 7, 681}, - {3, 7, -1, 0, 4, 691}, - {4, 7, -1, 0, 6, 698}, - {3, 9, 0, 0, 3, 705}, - {5, 7, -1, 0, 7, 714}, - {5, 7, -1, 0, 7, 721}, - {9, 7, 0, 0, 9, 728}, - {6, 7, 0, 0, 6, 742}, - {5, 10, -1, 3, 7, 749}, - {4, 7, -1, 0, 6, 759}, - {4, 12, 0, 3, 4, 766}, - {1, 12, -1, 3, 3, 778}, - {4, 12, 0, 3, 4, 790}, - {6, 2, 0, -3, 7, 802}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 4, -1}, - {1, 10, -1, 3, 3, 804}, - {5, 9, -1, 1, 7, 814}, - {5, 9, -1, 0, 7, 823}, - {6, 6, 0, -1, 7, 832}, - {5, 9, -1, 0, 7, 838}, - {1, 11, -1, 2, 3, 847}, - {5, 12, 0, 3, 6, 858}, - {3, 1, 0, -8, 3, 870}, - {9, 9, -1, 0, 11, 871}, - {3, 5, -1, -4, 5, 889}, - {5, 5, -1, -1, 7, 894}, - {6, 4, -1, -2, 8, 899}, - {4, 1, 0, -3, 5, 903}, - {9, 9, -1, 0, 11, 904}, - {4, 1, 0, -8, 4, 922}, - {4, 4, 0, -4, 5, 923}, - {5, 7, -1, 0, 7, 927}, - {4, 5, 0, -3, 4, 934}, - {3, 5, 0, -3, 4, 939}, - {2, 2, 0, -8, 2, 944}, - {5, 10, -1, 3, 7, 946}, - {6, 12, 0, 3, 7, 956}, - {1, 1, -1, -3, 3, 968}, - {3, 4, 0, 3, 3, 969}, - {2, 5, -1, -3, 4, 973}, - {3, 5, -1, -4, 5, 978}, - {5, 5, -1, -1, 7, 983}, - {9, 9, 0, 0, 10, 988}, - {9, 9, 0, 0, 10, 1006}, - {9, 9, 0, 0, 10, 1024}, - {5, 9, -1, 3, 7, 1042}, - {7, 12, -1, 0, 9, 1051}, - {7, 12, -1, 0, 9, 1063}, - {7, 12, -1, 0, 9, 1075}, - {7, 12, -1, 0, 9, 1087}, - {7, 11, -1, 0, 9, 1099}, - {7, 12, -1, 0, 9, 1110}, - {9, 9, -1, 0, 11, 1122}, - {7, 12, -1, 3, 9, 1140}, - {6, 12, -1, 0, 8, 1152}, - {6, 12, -1, 0, 8, 1164}, - {6, 12, -1, 0, 8, 1176}, - {6, 11, -1, 0, 8, 1188}, - {2, 12, 0, 0, 3, 1199}, - {2, 12, -1, 0, 3, 1211}, - {3, 12, 0, 0, 3, 1223}, - {3, 11, 0, 0, 3, 1235}, - {8, 9, 0, 0, 9, 1246}, - {7, 12, -1, 0, 9, 1255}, - {8, 12, -1, 0, 10, 1267}, - {8, 12, -1, 0, 10, 1279}, - {8, 12, -1, 0, 10, 1291}, - {8, 12, -1, 0, 10, 1303}, - {8, 11, -1, 0, 10, 1315}, - {5, 5, -1, -1, 7, 1326}, - {10, 11, 0, 1, 10, 1331}, - {6, 12, -1, 0, 8, 1353}, - {6, 12, -1, 0, 8, 1365}, - {6, 12, -1, 0, 8, 1377}, - {6, 11, -1, 0, 8, 1389}, - {7, 12, -1, 0, 9, 1400}, - {6, 9, -1, 0, 8, 1412}, - {5, 9, -1, 0, 7, 1421}, - {6, 10, -1, 0, 7, 1430}, - {6, 10, -1, 0, 7, 1440}, - {6, 10, -1, 0, 7, 1450}, - {6, 10, -1, 0, 7, 1460}, - {6, 9, -1, 0, 7, 1470}, - {6, 10, -1, 0, 7, 1479}, - {9, 7, -1, 0, 11, 1489}, - {5, 10, -1, 3, 7, 1503}, - {5, 10, -1, 0, 7, 1513}, - {5, 10, -1, 0, 7, 1523}, - {5, 10, -1, 0, 7, 1533}, - {5, 9, -1, 0, 7, 1543}, - {2, 10, 0, 0, 3, 1552}, - {2, 10, -1, 0, 3, 1562}, - {3, 10, 0, 0, 3, 1572}, - {3, 9, 0, 0, 3, 1582}, - {5, 10, -1, 0, 7, 1591}, - {5, 10, -1, 0, 7, 1601}, - {5, 10, -1, 0, 7, 1611}, - {5, 10, -1, 0, 7, 1621}, - {5, 10, -1, 0, 7, 1631}, - {5, 10, -1, 0, 7, 1641}, - {5, 9, -1, 0, 7, 1651}, - {5, 5, -1, -1, 7, 1660}, - {7, 7, 0, 0, 7, 1665}, - {5, 10, -1, 0, 7, 1672}, - {5, 10, -1, 0, 7, 1682}, - {5, 10, -1, 0, 7, 1692}, - {5, 9, -1, 0, 7, 1702}, - {5, 13, -1, 3, 7, 1711}, - {5, 12, -1, 3, 7, 1724}, - {5, 12, -1, 3, 7, 1736}, - }, - bitmap_data -}; - -#endif - diff --git a/intern/bmfont/intern/BMF_font_helvb10.cpp b/intern/bmfont/intern/BMF_font_helvb10.cpp deleted file mode 100644 index cdd3656c5c0..00000000000 --- a/intern/bmfont/intern/BMF_font_helvb10.cpp +++ /dev/null @@ -1,492 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_FontData.h" -#include "BMF_Settings.h" - -#if BMF_INCLUDE_HELVB10 - -static unsigned char bitmap_data[]= { - 0x00,0xc0,0x00,0x80,0x80,0xc0,0xc0,0xc0, - 0xc0,0xa0,0xa0,0xa0,0x50,0x50,0xfc,0x28, - 0x7e,0x28,0x28,0x20,0x70,0xa8,0x28,0x38, - 0x70,0xe0,0xa8,0x70,0x20,0x8c,0x56,0x2c, - 0x10,0x10,0x68,0xb4,0x62,0x76,0xdc,0xcc, - 0xde,0x70,0xd8,0xd8,0x70,0x80,0x40,0xc0, - 0xc0,0x20,0x60,0x40,0xc0,0xc0,0xc0,0xc0, - 0x40,0x60,0x20,0x80,0xc0,0x40,0x60,0x60, - 0x60,0x60,0x40,0xc0,0x80,0xa0,0x40,0xa0, - 0x30,0x30,0xfc,0x30,0x30,0x80,0x40,0xc0, - 0xc0,0xf8,0xc0,0xc0,0x80,0x80,0x40,0x40, - 0x20,0x20,0x10,0x10,0x70,0xd8,0xd8,0xd8, - 0xd8,0xd8,0xd8,0x70,0x60,0x60,0x60,0x60, - 0x60,0x60,0xe0,0x60,0xf8,0xc0,0x60,0x30, - 0x18,0x18,0xd8,0x70,0x70,0xd8,0x18,0x18, - 0x30,0x18,0xd8,0x70,0x18,0x18,0xfc,0x98, - 0x58,0x38,0x18,0x08,0x70,0xd8,0x98,0x18, - 0xf0,0xc0,0xc0,0xf8,0x70,0xd8,0xd8,0xd8, - 0xf0,0xc0,0xd8,0x70,0x60,0x60,0x60,0x30, - 0x30,0x18,0x18,0xf8,0x70,0xd8,0xd8,0xd8, - 0x70,0xd8,0xd8,0x70,0x70,0xd8,0x18,0x78, - 0xd8,0xd8,0xd8,0x70,0xc0,0xc0,0x00,0x00, - 0xc0,0xc0,0x80,0x40,0xc0,0xc0,0x00,0x00, - 0xc0,0xc0,0x30,0x60,0xc0,0x60,0x30,0xf8, - 0x00,0xf8,0xc0,0x60,0x30,0x60,0xc0,0x60, - 0x00,0x60,0x60,0x30,0x18,0xd8,0x70,0x3e, - 0x00,0x40,0x00,0x9b,0x00,0xa4,0x80,0xa2, - 0x40,0x92,0x40,0x4d,0x40,0x60,0x80,0x1f, - 0x00,0xc6,0xc6,0xfe,0x6c,0x6c,0x6c,0x38, - 0x38,0xf8,0xcc,0xcc,0xcc,0xf8,0xcc,0xcc, - 0xf8,0x3c,0x66,0xc2,0xc0,0xc0,0xc2,0x66, - 0x3c,0xf0,0xd8,0xcc,0xcc,0xcc,0xcc,0xd8, - 0xf0,0xf8,0xc0,0xc0,0xc0,0xf8,0xc0,0xc0, - 0xf8,0xc0,0xc0,0xc0,0xc0,0xf0,0xc0,0xc0, - 0xf8,0x3a,0x66,0xc6,0xce,0xc0,0xc2,0x66, - 0x3c,0xcc,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc, - 0xcc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0x70,0xd8,0x18,0x18,0x18,0x18,0x18, - 0x18,0xc6,0xcc,0xd8,0xf0,0xe0,0xf0,0xd8, - 0xcc,0xf8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc9,0x80,0xc9,0x80,0xdd,0x80,0xd5, - 0x80,0xf7,0x80,0xe3,0x80,0xe3,0x80,0xc1, - 0x80,0xc6,0xce,0xce,0xd6,0xd6,0xe6,0xe6, - 0xc6,0x38,0x6c,0xc6,0xc6,0xc6,0xc6,0x6c, - 0x38,0xc0,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc, - 0xf8,0x02,0x3c,0x6c,0xd6,0xc6,0xc6,0xc6, - 0x6c,0x38,0xcc,0xcc,0xcc,0xf8,0xcc,0xcc, - 0xcc,0xf8,0x78,0xcc,0x8c,0x1c,0x78,0xe0, - 0xcc,0x78,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0xfc,0x78,0xcc,0xcc,0xcc,0xcc,0xcc, - 0xcc,0xcc,0x10,0x38,0x38,0x6c,0x6c,0x6c, - 0xc6,0xc6,0x33,0x00,0x33,0x00,0x7f,0x80, - 0x6d,0x80,0x6d,0x80,0xcc,0xc0,0xcc,0xc0, - 0xcc,0xc0,0xc6,0xc6,0x6c,0x38,0x38,0x6c, - 0xc6,0xc6,0x18,0x18,0x18,0x3c,0x66,0x66, - 0xc3,0xc3,0xfc,0xc0,0x60,0x70,0x30,0x18, - 0x0c,0xfc,0xe0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xe0,0x10,0x10,0x20,0x20, - 0x40,0x40,0x80,0x80,0xe0,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0xe0,0x90,0x90, - 0xf0,0x60,0xfc,0xc0,0xc0,0x80,0x40,0x6c, - 0xd8,0xd8,0x78,0x98,0x70,0xf0,0xd8,0xd8, - 0xd8,0xd8,0xf0,0xc0,0xc0,0x70,0xd0,0xc0, - 0xc0,0xd0,0x70,0x78,0xd8,0xd8,0xd8,0xd8, - 0x78,0x18,0x18,0x70,0xd8,0xc0,0xf8,0xd8, - 0x70,0x60,0x60,0x60,0x60,0x60,0xf0,0x60, - 0x38,0x70,0x18,0x78,0xd8,0xd8,0xd8,0xd8, - 0x68,0xd8,0xd8,0xd8,0xd8,0xd8,0xf0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00, - 0xc0,0xc0,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x00,0x60,0xcc,0xd8,0xf0,0xe0,0xf0, - 0xd8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xdb,0xdb,0xdb,0xdb,0xdb, - 0xb6,0xd8,0xd8,0xd8,0xd8,0xd8,0xb0,0x70, - 0xd8,0xd8,0xd8,0xd8,0x70,0xc0,0xc0,0xf0, - 0xd8,0xd8,0xd8,0xd8,0xb0,0x18,0x18,0x78, - 0xd8,0xd8,0xd8,0xd8,0x68,0xc0,0xc0,0xc0, - 0xc0,0xe0,0xb0,0x70,0xd8,0x18,0x70,0xd8, - 0x70,0x30,0x60,0x60,0x60,0x60,0xf0,0x60, - 0x60,0x68,0xd8,0xd8,0xd8,0xd8,0xd8,0x20, - 0x70,0x50,0xd8,0xd8,0xd8,0x6c,0x6c,0x6c, - 0xd6,0xd6,0xd6,0xcc,0xcc,0x78,0x30,0x78, - 0xcc,0x60,0x30,0x30,0x78,0xd8,0xd8,0xd8, - 0xd8,0xf8,0xc0,0x60,0x30,0x18,0xf8,0x30, - 0x60,0x60,0x60,0x60,0xc0,0x60,0x60,0x60, - 0x30,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0xc0,0x60,0x60,0x60,0x60, - 0x30,0x60,0x60,0x60,0xc0,0xb0,0x68,0x00, - 0xc0,0xc0,0xc0,0xc0,0x40,0x40,0x00,0xc0, - 0x40,0x70,0xd8,0xa0,0xa0,0xd8,0x70,0x10, - 0xd8,0x68,0x60,0x60,0xf0,0x60,0x68,0x38, - 0x84,0x78,0x48,0x48,0x78,0x84,0x30,0xfc, - 0x30,0xfc,0x48,0xcc,0x84,0x84,0x80,0x80, - 0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80, - 0x70,0x98,0x38,0x70,0xc8,0x98,0x70,0xe0, - 0xc8,0x70,0xa0,0x3c,0x42,0x9d,0xa1,0xa5, - 0x99,0x42,0x3c,0xe0,0x00,0xa0,0x20,0xe0, - 0x6c,0xd8,0x6c,0x08,0x08,0xf8,0xf0,0x3c, - 0x42,0xa5,0xb9,0xa5,0xbd,0x42,0x3c,0xe0, - 0xc0,0xa0,0x60,0xfc,0x00,0x30,0x30,0xfc, - 0x30,0x30,0xe0,0x40,0xa0,0x60,0xc0,0x20, - 0x40,0xe0,0x80,0x40,0xc0,0xc0,0xe8,0xd8, - 0xd8,0xd8,0xd8,0xd8,0x28,0x28,0x28,0x28, - 0x28,0x68,0xe8,0xe8,0xe8,0x7c,0xc0,0xc0, - 0x40,0x40,0x40,0xc0,0x40,0xe0,0x00,0xe0, - 0xa0,0xe0,0xd8,0x6c,0xd8,0x42,0x2f,0x26, - 0x12,0x48,0x48,0xc4,0x44,0x4e,0x24,0x2a, - 0x16,0x48,0x48,0xc4,0x44,0x42,0x2f,0x26, - 0x12,0xc8,0x28,0x44,0xe4,0x70,0xd8,0xc0, - 0x60,0x30,0x30,0x00,0x30,0xc6,0xc6,0xfe, - 0x6c,0x6c,0x6c,0x38,0x38,0x00,0x10,0x20, - 0xc6,0xc6,0xfe,0x6c,0x6c,0x6c,0x38,0x38, - 0x00,0x10,0x08,0xc6,0xc6,0xfe,0x6c,0x6c, - 0x6c,0x38,0x38,0x00,0x28,0x10,0xc6,0xc6, - 0xfe,0x6c,0x6c,0x6c,0x38,0x38,0x00,0x28, - 0x14,0xc6,0xc6,0xfe,0x6c,0x6c,0x6c,0x38, - 0x38,0x00,0x28,0xc6,0xc6,0xfe,0x6c,0x6c, - 0x6c,0x38,0x38,0x10,0x28,0x10,0xcf,0x80, - 0xcc,0x00,0xfc,0x00,0x6c,0x00,0x6f,0x80, - 0x6c,0x00,0x3c,0x00,0x3f,0x80,0x30,0x10, - 0x3c,0x66,0xc2,0xc0,0xc0,0xc2,0x66,0x3c, - 0xf8,0xc0,0xc0,0xc0,0xf8,0xc0,0xc0,0xf8, - 0x00,0x20,0x40,0xf8,0xc0,0xc0,0xc0,0xf8, - 0xc0,0xc0,0xf8,0x00,0x20,0x10,0xf8,0xc0, - 0xc0,0xc0,0xf8,0xc0,0xc0,0xf8,0x00,0x50, - 0x20,0xf8,0xc0,0xc0,0xc0,0xf8,0xc0,0xc0, - 0xf8,0x00,0x50,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0x00,0x40,0x80,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x80, - 0x40,0x60,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x00,0xa0,0x40,0x60,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x00,0x90,0x78,0x6c, - 0x66,0x66,0xf6,0x66,0x6c,0x78,0xc6,0xce, - 0xce,0xd6,0xd6,0xe6,0xe6,0xc6,0x00,0x28, - 0x14,0x38,0x6c,0xc6,0xc6,0xc6,0xc6,0x6c, - 0x38,0x00,0x08,0x10,0x38,0x6c,0xc6,0xc6, - 0xc6,0xc6,0x6c,0x38,0x00,0x10,0x08,0x38, - 0x6c,0xc6,0xc6,0xc6,0xc6,0x6c,0x38,0x00, - 0x28,0x10,0x38,0x6c,0xc6,0xc6,0xc6,0xc6, - 0x6c,0x38,0x00,0x28,0x14,0x38,0x6c,0xc6, - 0xc6,0xc6,0xc6,0x6c,0x38,0x00,0x28,0xcc, - 0x78,0x30,0x78,0xcc,0xb8,0x6c,0xe6,0xd6, - 0xd6,0xce,0x6c,0x3a,0x78,0xcc,0xcc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0x00,0x10,0x20,0x78, - 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x00, - 0x10,0x08,0x78,0xcc,0xcc,0xcc,0xcc,0xcc, - 0xcc,0xcc,0x00,0x50,0x20,0x78,0xcc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x48,0x18, - 0x18,0x18,0x3c,0x66,0x66,0xc3,0xc3,0x00, - 0x08,0x04,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc, - 0xf8,0xc0,0xd0,0xc8,0xc8,0xc8,0xd0,0xc8, - 0xc8,0x70,0x6c,0xd8,0xd8,0x78,0x98,0x70, - 0x00,0x10,0x20,0x6c,0xd8,0xd8,0x78,0x98, - 0x70,0x00,0x20,0x10,0x6c,0xd8,0xd8,0x78, - 0x98,0x70,0x00,0x50,0x20,0x6c,0xd8,0xd8, - 0x78,0x98,0x70,0x00,0x50,0x28,0x6c,0xd8, - 0xd8,0x78,0x98,0x70,0x00,0x50,0x6c,0xd8, - 0xd8,0x78,0x98,0x70,0x20,0x50,0x20,0x6e, - 0xdb,0xd8,0x7f,0x9b,0x7e,0x60,0x20,0x70, - 0xd0,0xc0,0xc0,0xd0,0x70,0x70,0xd8,0xc0, - 0xf8,0xd8,0x70,0x00,0x20,0x40,0x70,0xd8, - 0xc0,0xf8,0xd8,0x70,0x00,0x20,0x10,0x70, - 0xd8,0xc0,0xf8,0xd8,0x70,0x00,0x50,0x20, - 0x70,0xd8,0xc0,0xf8,0xd8,0x70,0x00,0x50, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x40, - 0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00, - 0x80,0x40,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0x00,0xa0,0x40,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0x00,0xa0,0x70,0xd8,0xd8,0xd8,0xd8, - 0x70,0xa0,0x60,0x50,0xd8,0xd8,0xd8,0xd8, - 0xd8,0xb0,0x00,0xa0,0x50,0x70,0xd8,0xd8, - 0xd8,0xd8,0x70,0x00,0x20,0x40,0x70,0xd8, - 0xd8,0xd8,0xd8,0x70,0x00,0x20,0x10,0x70, - 0xd8,0xd8,0xd8,0xd8,0x70,0x00,0x50,0x20, - 0x70,0xd8,0xd8,0xd8,0xd8,0x70,0x00,0xa0, - 0x50,0x70,0xd8,0xd8,0xd8,0xd8,0x70,0x00, - 0x50,0x30,0x00,0xfc,0x00,0x30,0xb8,0x6c, - 0x6c,0x7c,0x6c,0x3a,0x68,0xd8,0xd8,0xd8, - 0xd8,0xd8,0x00,0x20,0x40,0x68,0xd8,0xd8, - 0xd8,0xd8,0xd8,0x00,0x20,0x10,0x68,0xd8, - 0xd8,0xd8,0xd8,0xd8,0x00,0x50,0x20,0x68, - 0xd8,0xd8,0xd8,0xd8,0xd8,0x00,0x50,0x60, - 0x30,0x30,0x78,0xd8,0xd8,0xd8,0xd8,0x00, - 0x20,0x10,0xc0,0xc0,0xf0,0xd8,0xc8,0xc8, - 0xd8,0xf0,0xc0,0xc0,0x60,0x30,0x30,0x78, - 0xd8,0xd8,0xd8,0xd8,0x00,0x50, -}; - -BMF_FontData BMF_font_helvb10 = { - -1, -2, - 10, 11, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 12, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 3, 0}, - {2, 8, -1, 0, 4, 1}, - {3, 3, -1, -5, 5, 9}, - {7, 7, 1, 0, 6, 12}, - {5, 10, 0, 1, 6, 19}, - {7, 8, 0, 0, 8, 29}, - {7, 8, 0, 0, 8, 37}, - {2, 4, 0, -4, 3, 45}, - {3, 10, 0, 2, 4, 49}, - {3, 10, 0, 2, 4, 59}, - {3, 3, 0, -5, 4, 69}, - {6, 5, 0, -1, 6, 72}, - {2, 4, 0, 2, 3, 77}, - {5, 1, -1, -3, 7, 81}, - {2, 2, 0, 0, 3, 82}, - {4, 8, 0, 0, 4, 84}, - {5, 8, 0, 0, 6, 92}, - {3, 8, -1, 0, 6, 100}, - {5, 8, 0, 0, 6, 108}, - {5, 8, 0, 0, 6, 116}, - {6, 8, 0, 0, 6, 124}, - {5, 8, 0, 0, 6, 132}, - {5, 8, 0, 0, 6, 140}, - {5, 8, 0, 0, 6, 148}, - {5, 8, 0, 0, 6, 156}, - {5, 8, 0, 0, 6, 164}, - {2, 6, 0, 0, 3, 172}, - {2, 8, 0, 2, 3, 178}, - {4, 5, 0, -1, 5, 186}, - {5, 3, 0, -2, 6, 191}, - {4, 5, 0, -1, 5, 194}, - {5, 8, 0, 0, 6, 199}, - {10, 9, 0, 1, 11, 207}, - {7, 8, 0, 0, 8, 225}, - {6, 8, 0, 0, 7, 233}, - {7, 8, 0, 0, 8, 241}, - {6, 8, 0, 0, 7, 249}, - {5, 8, 0, 0, 6, 257}, - {5, 8, 0, 0, 6, 265}, - {7, 8, 0, 0, 8, 273}, - {6, 8, 0, 0, 7, 281}, - {2, 8, 0, 0, 3, 289}, - {5, 8, 0, 0, 6, 297}, - {7, 8, 0, 0, 7, 305}, - {5, 8, 0, 0, 6, 313}, - {9, 8, 0, 0, 10, 321}, - {7, 8, 0, 0, 8, 337}, - {7, 8, 0, 0, 8, 345}, - {6, 8, 0, 0, 7, 353}, - {7, 9, 0, 1, 8, 361}, - {6, 8, 0, 0, 7, 370}, - {6, 8, 0, 0, 7, 378}, - {6, 8, 0, 0, 7, 386}, - {6, 8, 0, 0, 7, 394}, - {7, 8, 0, 0, 8, 402}, - {10, 8, 0, 0, 11, 410}, - {7, 8, 0, 0, 8, 426}, - {8, 8, 0, 0, 9, 434}, - {6, 8, 0, 0, 7, 442}, - {3, 10, 0, 2, 4, 450}, - {4, 8, 0, 0, 4, 460}, - {3, 10, 0, 2, 4, 468}, - {4, 4, 0, -4, 5, 478}, - {6, 1, 0, 2, 6, 482}, - {2, 4, 0, -4, 3, 483}, - {6, 6, 0, 0, 6, 487}, - {5, 8, 0, 0, 6, 493}, - {4, 6, 0, 0, 5, 501}, - {5, 8, 0, 0, 6, 507}, - {5, 6, 0, 0, 6, 515}, - {5, 8, 1, 0, 4, 521}, - {5, 8, 0, 2, 6, 529}, - {5, 8, 0, 0, 6, 537}, - {2, 8, 0, 0, 3, 545}, - {3, 10, 1, 2, 3, 553}, - {6, 8, 0, 0, 6, 563}, - {2, 8, 0, 0, 3, 571}, - {8, 6, 0, 0, 9, 579}, - {5, 6, 0, 0, 6, 585}, - {5, 6, 0, 0, 6, 591}, - {5, 8, 0, 2, 6, 597}, - {5, 8, 0, 2, 6, 605}, - {4, 6, 0, 0, 4, 613}, - {5, 6, 0, 0, 6, 619}, - {4, 8, 1, 0, 4, 625}, - {5, 6, 0, 0, 6, 633}, - {5, 6, 0, 0, 6, 639}, - {7, 6, 0, 0, 8, 645}, - {6, 6, 0, 0, 7, 651}, - {5, 8, 0, 2, 6, 657}, - {5, 6, 0, 0, 6, 665}, - {4, 10, 0, 2, 5, 671}, - {1, 10, -1, 2, 3, 681}, - {4, 10, 0, 2, 5, 691}, - {5, 2, 0, -3, 6, 701}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 3, 703}, - {2, 8, -1, 2, 4, 704}, - {5, 8, 0, 1, 6, 712}, - {5, 8, 0, 0, 6, 720}, - {6, 6, 0, -1, 6, 728}, - {6, 8, 0, 0, 7, 734}, - {1, 10, -1, 2, 3, 742}, - {5, 10, 0, 2, 6, 752}, - {3, 1, 0, -7, 3, 762}, - {8, 8, -1, 0, 10, 763}, - {3, 5, -1, -3, 5, 771}, - {6, 3, 0, -1, 7, 776}, - {5, 3, -1, -2, 7, 779}, - {4, 1, 0, -3, 5, 782}, - {8, 8, -1, 0, 10, 783}, - {3, 1, 0, -7, 3, 791}, - {3, 3, 0, -5, 4, 792}, - {6, 7, 0, 0, 6, 795}, - {3, 4, 0, -4, 3, 802}, - {3, 4, 0, -4, 3, 806}, - {2, 2, 0, -7, 3, 810}, - {5, 8, 0, 2, 6, 812}, - {6, 10, 0, 2, 6, 820}, - {2, 1, 0, -3, 3, 830}, - {2, 2, 0, 2, 3, 831}, - {2, 4, 0, -4, 3, 833}, - {3, 5, -1, -3, 5, 837}, - {6, 3, 0, -1, 7, 842}, - {8, 8, 0, 0, 9, 845}, - {7, 8, 0, 0, 9, 853}, - {8, 8, 0, 0, 9, 861}, - {5, 8, 0, 2, 6, 869}, - {7, 11, 0, 0, 8, 877}, - {7, 11, 0, 0, 8, 888}, - {7, 11, 0, 0, 8, 899}, - {7, 11, 0, 0, 8, 910}, - {7, 10, 0, 0, 8, 921}, - {7, 11, 0, 0, 8, 931}, - {9, 8, 0, 0, 10, 942}, - {7, 10, 0, 2, 8, 958}, - {5, 11, 0, 0, 6, 968}, - {5, 11, 0, 0, 6, 979}, - {5, 11, 0, 0, 6, 990}, - {5, 10, 0, 0, 6, 1001}, - {2, 11, 0, 0, 3, 1011}, - {2, 11, 0, 0, 3, 1022}, - {3, 11, 1, 0, 3, 1033}, - {4, 10, 1, 0, 3, 1044}, - {7, 8, 1, 0, 7, 1054}, - {7, 11, 0, 0, 8, 1062}, - {7, 11, 0, 0, 8, 1073}, - {7, 11, 0, 0, 8, 1084}, - {7, 11, 0, 0, 8, 1095}, - {7, 11, 0, 0, 8, 1106}, - {7, 10, 0, 0, 8, 1117}, - {6, 5, 0, -1, 6, 1127}, - {7, 8, 0, 0, 8, 1132}, - {6, 11, 0, 0, 7, 1140}, - {6, 11, 0, 0, 7, 1151}, - {6, 11, 0, 0, 7, 1162}, - {6, 10, 0, 0, 7, 1173}, - {8, 11, 0, 0, 9, 1183}, - {6, 8, 0, 0, 7, 1194}, - {5, 8, 0, 0, 6, 1202}, - {6, 9, 0, 0, 6, 1210}, - {6, 9, 0, 0, 6, 1219}, - {6, 9, 0, 0, 6, 1228}, - {6, 9, 0, 0, 6, 1237}, - {6, 8, 0, 0, 6, 1246}, - {6, 9, 0, 0, 6, 1254}, - {8, 6, 0, 0, 9, 1263}, - {4, 8, 0, 2, 5, 1269}, - {5, 9, 0, 0, 6, 1277}, - {5, 9, 0, 0, 6, 1286}, - {5, 9, 0, 0, 6, 1295}, - {5, 8, 0, 0, 6, 1304}, - {2, 9, 0, 0, 3, 1312}, - {2, 9, 0, 0, 3, 1321}, - {3, 9, 0, 0, 3, 1330}, - {3, 8, 0, 0, 3, 1339}, - {5, 9, 0, 0, 6, 1347}, - {5, 9, 0, 0, 6, 1356}, - {5, 9, 0, 0, 6, 1365}, - {5, 9, 0, 0, 6, 1374}, - {5, 9, 0, 0, 6, 1383}, - {5, 9, 0, 0, 6, 1392}, - {5, 8, 0, 0, 6, 1401}, - {6, 5, 0, -1, 6, 1409}, - {7, 6, 1, 0, 6, 1414}, - {5, 9, 0, 0, 6, 1420}, - {5, 9, 0, 0, 6, 1429}, - {5, 9, 0, 0, 6, 1438}, - {5, 8, 0, 0, 6, 1447}, - {5, 11, 0, 2, 6, 1455}, - {5, 10, 0, 2, 6, 1466}, - {5, 10, 0, 2, 6, 1476}, - }, - bitmap_data -}; - -#endif - diff --git a/intern/bmfont/intern/BMF_font_helvb12.cpp b/intern/bmfont/intern/BMF_font_helvb12.cpp deleted file mode 100644 index 8b56bdceee7..00000000000 --- a/intern/bmfont/intern/BMF_font_helvb12.cpp +++ /dev/null @@ -1,565 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_FontData.h" -#include "BMF_Settings.h" - -#if BMF_INCLUDE_HELVB12 - -static unsigned char bitmap_data[]= { - 0x00,0xc0,0xc0,0x00,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xa0,0xa0,0xa0,0x6c, - 0x00,0x6c,0x00,0x6c,0x00,0xff,0x00,0x36, - 0x00,0x36,0x00,0x36,0x00,0x7f,0x80,0x1b, - 0x00,0x1b,0x00,0x1b,0x00,0x30,0x30,0x78, - 0xec,0xac,0x3c,0x38,0x70,0xf0,0xd4,0xdc, - 0x78,0x30,0x63,0x80,0x37,0xc0,0x36,0xc0, - 0x1f,0xc0,0x1b,0x80,0x0c,0x00,0x76,0x00, - 0xfe,0x00,0xdb,0x00,0xfb,0x00,0x71,0x80, - 0x73,0x80,0xff,0x00,0xce,0x00,0xcf,0x00, - 0xdd,0x80,0x79,0x80,0x38,0x00,0x6c,0x00, - 0x6c,0x00,0x7c,0x00,0x38,0x00,0x80,0x40, - 0xc0,0xc0,0x30,0x60,0x60,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0x60,0x60,0x30, - 0xc0,0x60,0x60,0x30,0x30,0x30,0x30,0x30, - 0x30,0x30,0x30,0x60,0x60,0xc0,0xd8,0x70, - 0x70,0xf8,0x20,0x30,0x30,0xfc,0xfc,0x30, - 0x30,0x80,0x40,0xc0,0xc0,0xfc,0xfc,0xc0, - 0xc0,0xc0,0xc0,0xc0,0x60,0x60,0x60,0x20, - 0x30,0x30,0x30,0x18,0x18,0x18,0x78,0xfc, - 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xfc, - 0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0xf0,0xf0,0x30,0xfc,0xfc,0xc0,0x60, - 0x70,0x38,0x18,0xcc,0xcc,0xfc,0x78,0x78, - 0xfc,0xcc,0xcc,0x0c,0x38,0x38,0x0c,0xcc, - 0xfc,0x78,0x0c,0x0c,0xfe,0xfe,0xcc,0x6c, - 0x6c,0x3c,0x3c,0x1c,0x1c,0x78,0xfc,0xcc, - 0xcc,0x0c,0xfc,0xf8,0xc0,0xc0,0xfc,0xfc, - 0x78,0xfc,0xcc,0xcc,0xcc,0xfc,0xf8,0xc0, - 0xcc,0xfc,0x78,0x60,0x60,0x60,0x30,0x30, - 0x30,0x18,0x18,0x0c,0xfc,0xfc,0x78,0xfc, - 0xcc,0xcc,0xcc,0x78,0x78,0xcc,0xcc,0xfc, - 0x78,0x78,0xfc,0xcc,0x0c,0x7c,0xfc,0xcc, - 0xcc,0xcc,0xfc,0x78,0xc0,0xc0,0x00,0x00, - 0x00,0x00,0xc0,0xc0,0x80,0x40,0xc0,0xc0, - 0x00,0x00,0x00,0x00,0xc0,0xc0,0x0c,0x38, - 0xe0,0xe0,0x38,0x0c,0xfc,0xfc,0x00,0xfc, - 0xfc,0xc0,0x70,0x1c,0x1c,0x70,0xc0,0x30, - 0x30,0x00,0x30,0x30,0x38,0x1c,0xcc,0xcc, - 0xfc,0x78,0x1f,0x00,0x71,0x80,0x40,0x00, - 0xdd,0x80,0xb6,0xc0,0xb2,0x40,0xb3,0x60, - 0xdb,0x20,0x4d,0xa0,0x60,0x40,0x39,0xc0, - 0x0f,0x00,0xc3,0xc3,0xff,0x7e,0x66,0x66, - 0x3c,0x3c,0x3c,0x18,0x18,0xf8,0xfc,0xcc, - 0xcc,0xcc,0xf8,0xf8,0xcc,0xcc,0xfc,0xf8, - 0x78,0xfc,0xcc,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xcc,0xfc,0x78,0xf8,0xfc,0xce,0xc6,0xc6, - 0xc6,0xc6,0xc6,0xce,0xfc,0xf8,0xfc,0xfc, - 0xc0,0xc0,0xc0,0xf8,0xf8,0xc0,0xc0,0xfc, - 0xfc,0xc0,0xc0,0xc0,0xc0,0xc0,0xf8,0xf8, - 0xc0,0xc0,0xfc,0xfc,0x76,0xfe,0xc6,0xc6, - 0xde,0xde,0xc0,0xc0,0xc6,0xfe,0x7c,0xc6, - 0xc6,0xc6,0xc6,0xc6,0xfe,0xfe,0xc6,0xc6, - 0xc6,0xc6,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0x70,0xf8,0xd8, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0xc6,0xce,0xcc,0xd8,0xf8,0xf0,0xf0,0xd8, - 0xcc,0xcc,0xc6,0xfc,0xfc,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc9,0x80, - 0xc9,0x80,0xdd,0x80,0xdd,0x80,0xf7,0x80, - 0xf7,0x80,0xe3,0x80,0xe3,0x80,0xe3,0x80, - 0xc1,0x80,0xc1,0x80,0xc6,0xc6,0xce,0xce, - 0xde,0xd6,0xf6,0xe6,0xe6,0xc6,0xc6,0x7c, - 0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, - 0xfe,0x7c,0xc0,0xc0,0xc0,0xc0,0xfc,0xfe, - 0xc6,0xc6,0xc6,0xfe,0xfc,0x06,0x7e,0xfc, - 0xce,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xfe, - 0x7c,0xc6,0xc6,0xc6,0xce,0xfc,0xfc,0xc6, - 0xc6,0xc6,0xfe,0xfc,0x78,0xfc,0xcc,0x0c, - 0x1c,0x78,0xe0,0xc0,0xcc,0xfc,0x78,0x30, - 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0xfc,0xfc,0x7c,0xfe,0xc6,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0xc6,0xc6,0x18,0x18,0x18, - 0x3c,0x3c,0x3c,0x66,0x66,0x66,0xc3,0xc3, - 0x33,0x00,0x33,0x00,0x33,0x00,0x3b,0x00, - 0x7f,0x80,0x6d,0x80,0x6d,0x80,0x6d,0x80, - 0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,0xc3,0xc3, - 0x66,0x7e,0x3c,0x18,0x3c,0x7e,0x66,0xc3, - 0xc3,0x18,0x18,0x18,0x18,0x18,0x3c,0x3c, - 0x66,0x66,0xc3,0xc3,0xfe,0xfe,0xc0,0x60, - 0x60,0x30,0x18,0x18,0x0c,0xfe,0xfe,0xe0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xe0,0x30,0x30,0x30, - 0x70,0x60,0x60,0x60,0xe0,0xc0,0xc0,0xc0, - 0xe0,0x60,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0xe0,0x88,0xd8, - 0x70,0x70,0x20,0xfe,0xc0,0xc0,0x80,0x40, - 0x76,0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78, - 0xd8,0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,0xd8, - 0xc0,0xc0,0xc0,0x78,0xfc,0xcc,0xc0,0xc0, - 0xcc,0xfc,0x78,0x6c,0xfc,0xcc,0xcc,0xcc, - 0xcc,0xfc,0x6c,0x0c,0x0c,0x0c,0x78,0xfc, - 0xc0,0xfc,0xfc,0xcc,0xfc,0x78,0x60,0x60, - 0x60,0x60,0x60,0x60,0xf0,0xf0,0x60,0x70, - 0x30,0x78,0xfc,0x0c,0x6c,0xfc,0xcc,0xcc, - 0xcc,0xcc,0xfc,0x6c,0xcc,0xcc,0xcc,0xcc, - 0xcc,0xec,0xfc,0xd8,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00, - 0xc0,0xc0,0xc0,0x60,0x60,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0x00,0x60,0x60, - 0xcc,0xd8,0xd8,0xf0,0xe0,0xf0,0xd8,0xcc, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xcc,0xc0, - 0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,0xcc,0xc0, - 0xee,0xc0,0xff,0xc0,0xbb,0x80,0xcc,0xcc, - 0xcc,0xcc,0xcc,0xec,0xfc,0xd8,0x78,0xfc, - 0xcc,0xcc,0xcc,0xcc,0xfc,0x78,0xc0,0xc0, - 0xc0,0xd8,0xfc,0xcc,0xcc,0xcc,0xcc,0xfc, - 0xd8,0x0c,0x0c,0x0c,0x6c,0xfc,0xcc,0xcc, - 0xcc,0xcc,0xfc,0x6c,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xe0,0xb0,0x78,0xfc,0xcc,0x1c, - 0x78,0xe0,0xfc,0x78,0x30,0x70,0x60,0x60, - 0x60,0x60,0xf0,0xf0,0x60,0x60,0x6c,0xfc, - 0xdc,0xcc,0xcc,0xcc,0xcc,0xcc,0x30,0x30, - 0x78,0x78,0x78,0xcc,0xcc,0xcc,0x24,0x24, - 0x76,0x76,0x7e,0xdb,0xdb,0xdb,0xcc,0xcc, - 0x78,0x38,0x70,0x78,0xcc,0xcc,0xe0,0xf0, - 0x30,0x30,0x38,0x78,0x78,0x48,0xcc,0xcc, - 0xcc,0xfc,0xfc,0x60,0x30,0x30,0x18,0xfc, - 0xfc,0x30,0x60,0x60,0x60,0x60,0x60,0x40, - 0x80,0x40,0x60,0x60,0x60,0x60,0x30,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0xc0,0x60,0x60,0x60, - 0x60,0x60,0x20,0x10,0x20,0x60,0x60,0x60, - 0x60,0xc0,0x98,0xfc,0x64,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0xc0,0xc0, - 0xc0,0x78,0xfc,0xec,0xe0,0xd0,0xd4,0xfc, - 0x78,0x0c,0xdc,0xfe,0x60,0x30,0x30,0xfc, - 0x30,0x60,0x64,0x7c,0x38,0xcc,0x78,0xcc, - 0xcc,0x78,0xcc,0x18,0x18,0x18,0x7e,0x18, - 0x7e,0x3c,0x66,0x66,0xc3,0xc3,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80, - 0x80,0x80,0x80,0x78,0xfc,0xcc,0x1c,0x38, - 0x6c,0xcc,0xcc,0xd8,0x70,0xe0,0xcc,0xfc, - 0x78,0xd8,0xd8,0x1f,0x00,0x71,0xc0,0x6e, - 0xc0,0xdb,0x60,0xdb,0x60,0xd8,0x60,0xdb, - 0x60,0xdb,0x60,0x6e,0xc0,0x71,0xc0,0x1f, - 0x00,0xf0,0x00,0xd0,0xb0,0x70,0xb0,0x60, - 0x36,0x6c,0xd8,0x6c,0x36,0x0c,0x0c,0xfc, - 0xfc,0xe0,0xe0,0x1f,0x00,0x71,0xc0,0x7b, - 0xc0,0xdb,0x60,0xdf,0x60,0xde,0x60,0xdb, - 0x60,0xdb,0x60,0x7e,0xc0,0x71,0xc0,0x1f, - 0x00,0xf0,0xf0,0x60,0x90,0x90,0x60,0xfc, - 0xfc,0x00,0x30,0x30,0xfc,0xfc,0x30,0x30, - 0xf0,0x40,0x20,0x10,0x90,0x60,0x60,0x90, - 0x10,0x20,0x90,0x60,0xc0,0x70,0x30,0xc0, - 0xc0,0xc0,0xec,0xfc,0xdc,0xcc,0xcc,0xcc, - 0xcc,0xcc,0x36,0x36,0x36,0x36,0x36,0x36, - 0x36,0x36,0x76,0xf6,0xf6,0xf6,0xfe,0x7e, - 0xc0,0xc0,0xc0,0x60,0x40,0x40,0x40,0x40, - 0x40,0xc0,0x40,0xf8,0x00,0x70,0xd8,0xd8, - 0xd8,0x70,0xd8,0x6c,0x36,0x6c,0xd8,0x20, - 0x80,0x27,0xc0,0x12,0x80,0x12,0x80,0x09, - 0x80,0x4c,0x80,0x44,0x00,0x42,0x00,0x42, - 0x00,0xc1,0x00,0x41,0x00,0x23,0xc0,0x21, - 0x00,0x10,0x80,0x10,0x40,0x0a,0x40,0x4d, - 0x80,0x44,0x00,0x42,0x00,0x42,0x00,0xc1, - 0x00,0x41,0x00,0x20,0x80,0x27,0xc0,0x12, - 0x80,0x12,0x80,0x09,0x80,0x6c,0x80,0x94, - 0x00,0x12,0x00,0x22,0x00,0x91,0x00,0x61, - 0x00,0x78,0xfc,0xcc,0xcc,0xe0,0x70,0x30, - 0x30,0x00,0x30,0x30,0xc3,0xc3,0x7e,0x7e, - 0x24,0x3c,0x18,0x18,0x00,0x0c,0x38,0x30, - 0xc3,0xc3,0x7e,0x7e,0x24,0x3c,0x18,0x18, - 0x00,0x30,0x1c,0x0c,0xc3,0xc3,0x7e,0x7e, - 0x24,0x3c,0x18,0x18,0x00,0x66,0x3c,0x18, - 0xc3,0xc3,0x7e,0x7e,0x24,0x3c,0x18,0x18, - 0x00,0x2c,0x3e,0x1a,0xc3,0xc3,0x7e,0x7e, - 0x24,0x3c,0x18,0x18,0x00,0x6c,0x6c,0xc3, - 0xc3,0x7e,0x7e,0x24,0x3c,0x18,0x18,0x00, - 0x18,0x34,0x18,0xc7,0xe0,0xc7,0xe0,0xfe, - 0x00,0x7e,0x00,0x66,0x00,0x67,0xc0,0x37, - 0xc0,0x36,0x00,0x3e,0x00,0x1f,0xe0,0x1f, - 0xe0,0x60,0x30,0x20,0x78,0xfc,0xcc,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xcc,0xfc,0x78,0xfc, - 0xfc,0xc0,0xf8,0xf8,0xc0,0xfc,0xfc,0x00, - 0x18,0x70,0x60,0xfc,0xfc,0xc0,0xf8,0xf8, - 0xc0,0xfc,0xfc,0x00,0x60,0x38,0x18,0xfc, - 0xfc,0xc0,0xf8,0xf8,0xc0,0xfc,0xfc,0x00, - 0xcc,0x78,0x30,0xfc,0xfc,0xc0,0xf8,0xf8, - 0xc0,0xfc,0xfc,0x00,0xd8,0xd8,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x30, - 0xe0,0xc0,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x60,0x00,0xc0,0x70,0x30,0x30,0x30, - 0x30,0x30,0x30,0x30,0x30,0x30,0x00,0xcc, - 0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0x30,0x00,0xd8,0xd8,0x7c,0x7e,0x67, - 0x63,0x63,0xfb,0xfb,0x63,0x67,0x7e,0x7c, - 0xc6,0xce,0xce,0xde,0xf6,0xe6,0xe6,0xc6, - 0x00,0x58,0x7c,0x34,0x7c,0xfe,0xc6,0xc6, - 0xc6,0xc6,0xfe,0x7c,0x00,0x18,0x70,0x60, - 0x7c,0xfe,0xc6,0xc6,0xc6,0xc6,0xfe,0x7c, - 0x00,0x30,0x1c,0x0c,0x7c,0xfe,0xc6,0xc6, - 0xc6,0xc6,0xfe,0x7c,0x00,0xcc,0x78,0x30, - 0x7c,0xfe,0xc6,0xc6,0xc6,0xc6,0xfe,0x7c, - 0x00,0x58,0x7c,0x34,0x7c,0xfe,0xc6,0xc6, - 0xc6,0xc6,0xfe,0x7c,0x00,0x6c,0x6c,0xcc, - 0x78,0x30,0x30,0x78,0xcc,0xde,0x00,0x7f, - 0x00,0x63,0x00,0x73,0x00,0x7b,0x00,0x6b, - 0x00,0x6f,0x00,0x67,0x00,0x63,0x00,0x7f, - 0x00,0x3d,0x80,0x7c,0xfe,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0x00,0x18,0x70,0x60,0x7c, - 0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00, - 0x30,0x1c,0x0c,0x7c,0xfe,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0x00,0xcc,0x78,0x30,0x7c, - 0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00, - 0x6c,0x6c,0x18,0x18,0x18,0x18,0x3c,0x7e, - 0xe7,0xc3,0x00,0x30,0x1c,0x0c,0xc0,0xc0, - 0xfc,0xfe,0xc6,0xc6,0xc6,0xfe,0xfc,0xc0, - 0xc0,0xd8,0xdc,0xcc,0xcc,0xcc,0xd8,0xd8, - 0xcc,0xcc,0xfc,0x78,0x76,0xfc,0xcc,0xfc, - 0x7c,0x8c,0xfc,0x78,0x00,0x18,0x70,0x60, - 0x76,0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78, - 0x00,0x60,0x38,0x18,0x76,0xfc,0xcc,0xfc, - 0x7c,0x8c,0xfc,0x78,0x00,0xcc,0x78,0x30, - 0x76,0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78, - 0x00,0x58,0x7c,0x34,0x76,0xfc,0xcc,0xfc, - 0x7c,0x8c,0xfc,0x78,0x00,0xd8,0xd8,0x76, - 0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78,0x00, - 0x30,0x68,0x30,0x77,0x80,0xff,0xc0,0xcc, - 0x00,0xff,0xc0,0x7f,0xc0,0x8c,0xc0,0xff, - 0xc0,0x7b,0x80,0x60,0x30,0x20,0x78,0xfc, - 0xcc,0xc0,0xc0,0xcc,0xfc,0x78,0x78,0xfc, - 0xc0,0xfc,0xfc,0xcc,0xfc,0x78,0x00,0x18, - 0x70,0x60,0x78,0xfc,0xc0,0xfc,0xfc,0xcc, - 0xfc,0x78,0x00,0x60,0x38,0x18,0x78,0xfc, - 0xc0,0xfc,0xfc,0xcc,0xfc,0x78,0x00,0xcc, - 0x78,0x30,0x78,0xfc,0xc0,0xfc,0xfc,0xcc, - 0xfc,0x78,0x00,0xd8,0xd8,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0x00,0x30,0xe0, - 0xc0,0x60,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x00,0xc0,0x70,0x30,0x30,0x30,0x30, - 0x30,0x30,0x30,0x30,0x30,0x00,0xcc,0x78, - 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0x00,0xd8,0xd8,0x78,0xfc,0xcc,0xcc, - 0xcc,0xcc,0xfc,0x78,0xb0,0x60,0xd0,0xcc, - 0xcc,0xcc,0xcc,0xcc,0xec,0xfc,0xd8,0x00, - 0xb0,0xf8,0x68,0x78,0xfc,0xcc,0xcc,0xcc, - 0xcc,0xfc,0x78,0x00,0x18,0x70,0x60,0x78, - 0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,0x78,0x00, - 0x60,0x38,0x18,0x78,0xfc,0xcc,0xcc,0xcc, - 0xcc,0xfc,0x78,0x00,0xcc,0x78,0x30,0x78, - 0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,0x78,0x00, - 0xb0,0xf8,0x68,0x78,0xfc,0xcc,0xcc,0xcc, - 0xcc,0xfc,0x78,0x00,0xd8,0xd8,0x30,0x30, - 0x00,0xfc,0xfc,0x00,0x30,0x30,0xc0,0x78, - 0xfc,0xcc,0xec,0xdc,0xcc,0xfc,0x78,0x0c, - 0x6c,0xfc,0xdc,0xcc,0xcc,0xcc,0xcc,0xcc, - 0x00,0x18,0x70,0x60,0x6c,0xfc,0xdc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0x00,0x60,0x38,0x18, - 0x6c,0xfc,0xdc,0xcc,0xcc,0xcc,0xcc,0xcc, - 0x00,0xcc,0x78,0x30,0x6c,0xfc,0xdc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0x00,0xd8,0xd8,0xe0, - 0xf0,0x30,0x30,0x38,0x78,0x78,0x48,0xcc, - 0xcc,0xcc,0x00,0x60,0x38,0x18,0xc0,0xc0, - 0xc0,0xd8,0xfc,0xcc,0xcc,0xcc,0xcc,0xfc, - 0xd8,0xc0,0xc0,0xc0,0xe0,0xf0,0x30,0x30, - 0x38,0x78,0x78,0x48,0xcc,0xcc,0xcc,0x00, - 0xd8,0xd8, -}; - -BMF_FontData BMF_font_helvb12 = { - -1, -3, - 11, 12, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 12, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 3, 0}, - {2, 11, -1, 0, 4, 1}, - {3, 3, 0, -8, 4, 12}, - {9, 11, 1, 0, 7, 15}, - {6, 13, 0, 2, 7, 37}, - {10, 11, 0, 0, 11, 50}, - {9, 11, 0, 0, 9, 72}, - {2, 4, 0, -7, 3, 94}, - {4, 14, 0, 3, 4, 98}, - {4, 14, 1, 3, 4, 112}, - {5, 5, 0, -6, 6, 126}, - {6, 6, 0, -1, 7, 131}, - {2, 4, 0, 2, 3, 137}, - {6, 2, -1, -3, 9, 141}, - {2, 2, 0, 0, 3, 143}, - {5, 13, 1, 2, 4, 145}, - {6, 11, 0, 0, 7, 158}, - {4, 11, 0, 0, 6, 169}, - {6, 11, 0, 0, 7, 180}, - {6, 11, 0, 0, 7, 191}, - {7, 11, 0, 0, 7, 202}, - {6, 11, 0, 0, 7, 213}, - {6, 11, 0, 0, 7, 224}, - {6, 11, 0, 0, 7, 235}, - {6, 11, 0, 0, 7, 246}, - {6, 11, 0, 0, 7, 257}, - {2, 8, -1, 0, 4, 268}, - {2, 10, -1, 2, 4, 276}, - {6, 6, 0, -1, 7, 286}, - {6, 5, 0, -2, 7, 292}, - {6, 6, 0, -1, 7, 297}, - {6, 11, 0, 0, 7, 303}, - {11, 12, 0, 1, 12, 314}, - {8, 11, 0, 0, 8, 338}, - {6, 11, -1, 0, 8, 349}, - {6, 11, -1, 0, 8, 360}, - {7, 11, -1, 0, 9, 371}, - {6, 11, -1, 0, 8, 382}, - {6, 11, -1, 0, 7, 393}, - {7, 11, -1, 0, 9, 404}, - {7, 11, -1, 0, 9, 415}, - {2, 11, -2, 0, 6, 426}, - {5, 11, 0, 0, 6, 437}, - {7, 11, -1, 0, 8, 448}, - {6, 11, -1, 0, 7, 459}, - {9, 11, -1, 0, 11, 470}, - {7, 11, -1, 0, 9, 492}, - {7, 11, -1, 0, 9, 503}, - {7, 11, -1, 0, 9, 514}, - {7, 12, -1, 1, 9, 525}, - {7, 11, -1, 0, 9, 537}, - {6, 11, -1, 0, 8, 548}, - {6, 11, 0, 0, 6, 559}, - {7, 11, -1, 0, 9, 570}, - {8, 11, 0, 0, 8, 581}, - {10, 11, 0, 0, 10, 592}, - {8, 11, 0, 0, 8, 614}, - {8, 11, 0, 0, 8, 625}, - {7, 11, 0, 0, 7, 636}, - {3, 14, 0, 3, 4, 647}, - {4, 11, 0, 0, 5, 661}, - {3, 14, 0, 3, 4, 672}, - {5, 5, 0, -6, 7, 686}, - {7, 1, 0, 2, 7, 691}, - {2, 4, 0, -7, 3, 692}, - {7, 8, 0, 0, 7, 696}, - {6, 11, 0, 0, 7, 704}, - {6, 8, 0, 0, 7, 715}, - {6, 11, 0, 0, 7, 723}, - {6, 8, 0, 0, 7, 734}, - {4, 11, 0, 0, 5, 742}, - {6, 11, 0, 3, 7, 753}, - {6, 11, 0, 0, 7, 764}, - {2, 11, -1, 0, 5, 775}, - {3, 14, 0, 3, 5, 786}, - {6, 11, 0, 0, 6, 800}, - {2, 11, -1, 0, 5, 811}, - {10, 8, 0, 0, 11, 822}, - {6, 8, 0, 0, 7, 838}, - {6, 8, 0, 0, 7, 846}, - {6, 11, 0, 3, 7, 854}, - {6, 11, 0, 3, 7, 865}, - {4, 8, 0, 0, 4, 876}, - {6, 8, 0, 0, 7, 884}, - {4, 10, 0, 0, 5, 892}, - {6, 8, 0, 0, 7, 902}, - {6, 8, 0, 0, 7, 910}, - {8, 8, 0, 0, 9, 918}, - {6, 8, 0, 0, 7, 926}, - {6, 11, 0, 3, 7, 934}, - {6, 8, 0, 0, 7, 945}, - {4, 14, 0, 3, 4, 953}, - {1, 13, -1, 2, 3, 967}, - {4, 14, 0, 3, 4, 980}, - {6, 3, 0, -3, 7, 994}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {2, 11, 0, 3, 3, 997}, - {6, 10, 0, 1, 7, 1008}, - {7, 11, 0, 0, 7, 1018}, - {6, 6, 0, -3, 7, 1029}, - {8, 11, 1, 0, 7, 1035}, - {1, 13, -1, 2, 3, 1046}, - {6, 14, 0, 3, 7, 1059}, - {5, 2, 0, -9, 5, 1073}, - {11, 11, 0, 0, 12, 1075}, - {4, 7, 0, -4, 5, 1097}, - {7, 5, 0, -2, 8, 1104}, - {6, 4, -1, -3, 9, 1109}, - {3, 2, 0, -3, 4, 1113}, - {11, 11, 0, 0, 12, 1115}, - {4, 2, 0, -9, 4, 1137}, - {4, 4, -1, -7, 6, 1139}, - {6, 9, 0, -1, 7, 1143}, - {4, 6, 0, -5, 4, 1152}, - {4, 6, 0, -5, 4, 1158}, - {4, 3, -1, -9, 4, 1164}, - {6, 11, 0, 3, 7, 1167}, - {7, 14, -1, 3, 10, 1178}, - {2, 2, 0, -5, 3, 1192}, - {3, 3, -1, 3, 5, 1194}, - {2, 6, 0, -5, 4, 1197}, - {5, 7, 0, -4, 6, 1203}, - {7, 5, 0, -2, 8, 1210}, - {10, 11, 0, 0, 11, 1215}, - {10, 11, 0, 0, 11, 1237}, - {10, 11, 0, 0, 11, 1259}, - {6, 11, 0, 3, 7, 1281}, - {8, 12, 0, 0, 8, 1292}, - {8, 12, 0, 0, 8, 1304}, - {8, 12, 0, 0, 8, 1316}, - {8, 12, 0, 0, 8, 1328}, - {8, 11, 0, 0, 8, 1340}, - {8, 12, 0, 0, 8, 1351}, - {11, 11, 0, 0, 12, 1363}, - {6, 14, -1, 3, 8, 1385}, - {6, 12, -1, 0, 8, 1399}, - {6, 12, -1, 0, 8, 1411}, - {6, 12, -1, 0, 8, 1423}, - {6, 11, -1, 0, 8, 1435}, - {4, 12, -1, 0, 6, 1446}, - {4, 12, -1, 0, 6, 1458}, - {6, 12, 0, 0, 6, 1470}, - {5, 11, 0, 0, 6, 1482}, - {8, 11, 0, 0, 9, 1493}, - {7, 12, -1, 0, 9, 1504}, - {7, 12, -1, 0, 9, 1516}, - {7, 12, -1, 0, 9, 1528}, - {7, 12, -1, 0, 9, 1540}, - {7, 12, -1, 0, 9, 1552}, - {7, 11, -1, 0, 9, 1564}, - {6, 6, 0, -1, 7, 1575}, - {9, 11, 0, 0, 9, 1581}, - {7, 12, -1, 0, 9, 1603}, - {7, 12, -1, 0, 9, 1615}, - {7, 12, -1, 0, 9, 1627}, - {7, 11, -1, 0, 9, 1639}, - {8, 12, 0, 0, 8, 1650}, - {7, 11, -1, 0, 9, 1662}, - {6, 11, 0, 0, 7, 1673}, - {7, 12, 0, 0, 7, 1684}, - {7, 12, 0, 0, 7, 1696}, - {7, 12, 0, 0, 7, 1708}, - {7, 12, 0, 0, 7, 1720}, - {7, 11, 0, 0, 7, 1732}, - {7, 12, 0, 0, 7, 1743}, - {10, 8, 0, 0, 11, 1755}, - {6, 11, 0, 3, 7, 1771}, - {6, 12, 0, 0, 7, 1782}, - {6, 12, 0, 0, 7, 1794}, - {6, 12, 0, 0, 7, 1806}, - {6, 11, 0, 0, 7, 1818}, - {4, 12, 0, 0, 5, 1829}, - {4, 12, 0, 0, 5, 1841}, - {6, 12, 1, 0, 5, 1853}, - {5, 11, 1, 0, 5, 1865}, - {6, 11, 0, 0, 7, 1876}, - {6, 12, 0, 0, 7, 1887}, - {6, 12, 0, 0, 7, 1899}, - {6, 12, 0, 0, 7, 1911}, - {6, 12, 0, 0, 7, 1923}, - {6, 12, 0, 0, 7, 1935}, - {6, 11, 0, 0, 7, 1947}, - {6, 8, 0, 0, 7, 1958}, - {6, 10, 0, 1, 7, 1966}, - {6, 12, 0, 0, 7, 1976}, - {6, 12, 0, 0, 7, 1988}, - {6, 12, 0, 0, 7, 2000}, - {6, 11, 0, 0, 7, 2012}, - {6, 15, 0, 3, 7, 2023}, - {6, 14, 0, 3, 7, 2038}, - {6, 14, 0, 3, 7, 2052}, - }, - bitmap_data -}; - -#endif - diff --git a/intern/bmfont/intern/BMF_font_helvb14.cpp b/intern/bmfont/intern/BMF_font_helvb14.cpp deleted file mode 100644 index c6d3e0ec701..00000000000 --- a/intern/bmfont/intern/BMF_font_helvb14.cpp +++ /dev/null @@ -1,623 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_FontData.h" -#include "BMF_Settings.h" - -#if BMF_INCLUDE_HELVB14 - -static unsigned char bitmap_data[]= { - 0x00,0xc0,0xc0,0x00,0x00,0x80,0x80,0x80, - 0xc0,0xc0,0xc0,0xc0,0xc0,0x90,0xd8,0xd8, - 0xd8,0x48,0x48,0x48,0xfe,0xfe,0x24,0x24, - 0x7f,0x7f,0x12,0x12,0x12,0x10,0x10,0x38, - 0x7c,0xd6,0xd6,0x16,0x3c,0x78,0xd0,0xd6, - 0xd6,0x7c,0x38,0x10,0x30,0xc0,0x11,0xe0, - 0x19,0x20,0x09,0x20,0x0d,0xe0,0x64,0xc0, - 0xf6,0x00,0x92,0x00,0x93,0x00,0xf1,0x00, - 0x61,0x80,0x71,0x80,0xff,0x00,0xce,0x00, - 0xc6,0x00,0xcf,0x00,0x79,0x00,0x30,0x00, - 0x38,0x00,0x6c,0x00,0x6c,0x00,0x7c,0x00, - 0x38,0x00,0x80,0x40,0xc0,0xc0,0x30,0x20, - 0x60,0x40,0x40,0xc0,0xc0,0xc0,0xc0,0xc0, - 0x40,0x40,0x60,0x20,0x30,0xc0,0x40,0x60, - 0x20,0x20,0x30,0x30,0x30,0x30,0x30,0x20, - 0x20,0x60,0x40,0xc0,0xd8,0x50,0x20,0xf8, - 0x20,0x20,0x30,0x30,0x30,0xfc,0xfc,0x30, - 0x30,0x30,0x80,0x40,0x40,0xc0,0xc0,0xfe, - 0xfe,0xc0,0xc0,0x80,0x80,0xc0,0x40,0x40, - 0x60,0x20,0x20,0x30,0x10,0x10,0x30,0x78, - 0x48,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x48, - 0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0x30,0x30,0xf0,0x30,0x10,0xfc,0xfc, - 0x60,0x60,0x30,0x18,0x18,0x0c,0xcc,0xcc, - 0x78,0x30,0x30,0x78,0xcc,0xcc,0x0c,0x38, - 0x38,0x0c,0xcc,0xcc,0x78,0x30,0x18,0x18, - 0xfc,0xfc,0x98,0x58,0x58,0x38,0x38,0x38, - 0x18,0x18,0x70,0xf8,0xcc,0x0c,0x0c,0xcc, - 0xfc,0xd8,0x60,0x60,0x7c,0x7c,0x30,0x78, - 0xcc,0xcc,0xcc,0xcc,0xfc,0xd8,0xc0,0x4c, - 0x7c,0x38,0x60,0x60,0x60,0x20,0x30,0x30, - 0x10,0x18,0x08,0x0c,0xfc,0xfc,0x70,0xf8, - 0xcc,0xcc,0xcc,0x78,0x30,0x78,0xcc,0xcc, - 0x7c,0x38,0x70,0xf8,0xc8,0x0c,0x6c,0xfc, - 0xcc,0xcc,0xcc,0xcc,0x78,0x30,0xc0,0xc0, - 0x00,0x00,0x00,0x00,0xc0,0xc0,0x80,0x40, - 0x40,0xc0,0xc0,0x00,0x00,0x00,0x00,0xc0, - 0xc0,0x02,0x0e,0x3c,0xf0,0xf0,0x3c,0x0e, - 0x02,0xfc,0xfc,0x00,0x00,0xfc,0xfc,0x80, - 0xe0,0x78,0x1e,0x1e,0x78,0xe0,0x80,0x30, - 0x30,0x00,0x30,0x30,0x18,0x18,0x0c,0xcc, - 0xcc,0x7c,0x38,0x0f,0x80,0x38,0x60,0x60, - 0x00,0x4d,0xc0,0xd3,0x20,0x93,0x30,0x91, - 0x10,0x91,0x90,0xc9,0x90,0x46,0x90,0x60, - 0x30,0x30,0x20,0x1c,0xc0,0x07,0x80,0xe1, - 0xc0,0x61,0x80,0x7f,0x80,0x7f,0x80,0x33, - 0x00,0x33,0x00,0x33,0x00,0x1e,0x00,0x1e, - 0x00,0x1e,0x00,0x0c,0x00,0x0c,0x00,0xfc, - 0xfe,0xc7,0xc3,0xc7,0xfe,0xfc,0xc6,0xc3, - 0xc7,0xfe,0xfc,0x3c,0x7e,0x63,0xc3,0xc0, - 0xc0,0xc0,0xc0,0xc3,0x63,0x7e,0x3c,0xfc, - 0xfe,0xc6,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3, - 0xc6,0xfe,0xfc,0xfe,0xfe,0xc0,0xc0,0xc0, - 0xfe,0xfe,0xc0,0xc0,0xc0,0xfe,0xfe,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xfc,0xfc,0xc0,0xc0, - 0xc0,0xfe,0xfe,0x3e,0x80,0x7f,0x80,0x63, - 0x80,0xc1,0x80,0xc7,0x80,0xc7,0x80,0xc0, - 0x00,0xc0,0x00,0xc1,0x80,0x63,0x80,0x7f, - 0x00,0x3e,0x00,0xc3,0xc3,0xc3,0xc3,0xc3, - 0xff,0xff,0xc3,0xc3,0xc3,0xc3,0xc3,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0x78,0xfc,0xcc,0xcc,0xcc, - 0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0xc3, - 0x80,0xc7,0x00,0xc6,0x00,0xcc,0x00,0xdc, - 0x00,0xf8,0x00,0xf0,0x00,0xd8,0x00,0xcc, - 0x00,0xce,0x00,0xc7,0x00,0xc3,0x00,0xfe, - 0xfe,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xcc,0xc0,0xcc,0xc0,0xcc, - 0xc0,0xde,0xc0,0xde,0xc0,0xd2,0xc0,0xd2, - 0xc0,0xf3,0xc0,0xf3,0xc0,0xe1,0xc0,0xe1, - 0xc0,0xe1,0xc0,0xc3,0xc7,0xc7,0xcf,0xcf, - 0xdb,0xdb,0xf3,0xf3,0xe3,0xe3,0xc3,0x3e, - 0x00,0x7f,0x00,0x63,0x00,0xc1,0x80,0xc1, - 0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1, - 0x80,0x63,0x00,0x7f,0x00,0x3e,0x00,0xc0, - 0xc0,0xc0,0xc0,0xf8,0xfc,0xce,0xc6,0xc6, - 0xce,0xfc,0xf8,0x01,0x80,0x3d,0x80,0x7f, - 0x00,0x67,0x00,0xcd,0x80,0xcd,0x80,0xc1, - 0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63, - 0x00,0x7f,0x00,0x3e,0x00,0xc3,0xc3,0xc3, - 0xc3,0xc7,0xfe,0xfe,0xc7,0xc3,0xc7,0xfe, - 0xfc,0x3c,0x7e,0xe7,0xc3,0x07,0x1e,0x78, - 0xe0,0xc3,0xe7,0x7e,0x3c,0x18,0x18,0x18, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xff, - 0xff,0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0xc3, - 0xc3,0xc3,0xc3,0xc3,0xc3,0x18,0x18,0x18, - 0x3c,0x3c,0x24,0x66,0x66,0x66,0xc3,0xc3, - 0xc3,0x30,0xc0,0x30,0xc0,0x30,0xc0,0x39, - 0xc0,0x79,0xe0,0x69,0x60,0x6f,0x60,0x6f, - 0x60,0xc6,0x30,0xc6,0x30,0xc6,0x30,0xc6, - 0x30,0xe3,0x80,0x63,0x00,0x63,0x00,0x36, - 0x00,0x36,0x00,0x1c,0x00,0x1c,0x00,0x36, - 0x00,0x36,0x00,0x63,0x00,0x63,0x00,0xe3, - 0x80,0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c, - 0x00,0x0c,0x00,0x1e,0x00,0x1e,0x00,0x33, - 0x00,0x33,0x00,0x61,0x80,0x61,0x80,0xe1, - 0xc0,0xff,0xff,0x60,0x70,0x30,0x18,0x18, - 0x0c,0x0e,0x06,0xff,0xff,0xe0,0xe0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xe0,0xe0,0x10,0x10,0x30,0x20, - 0x20,0x60,0x40,0x40,0xc0,0x80,0x80,0xe0, - 0xe0,0x60,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0xe0,0xe0,0xcc,0xcc, - 0x48,0x78,0x78,0x30,0x30,0xfe,0xc0,0xc0, - 0x80,0x40,0x6c,0xfc,0xcc,0xcc,0x7c,0x1c, - 0xcc,0xfc,0x78,0xd8,0xfc,0xee,0xc6,0xc6, - 0xc6,0xee,0xfc,0xd8,0xc0,0xc0,0xc0,0x38, - 0x7c,0xec,0xc0,0xc0,0xc0,0xec,0x7c,0x38, - 0x36,0x7e,0xee,0xc6,0xc6,0xc6,0xee,0x7e, - 0x36,0x06,0x06,0x06,0x38,0x7c,0xcc,0xc0, - 0xfc,0xcc,0xcc,0x78,0x30,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0xf0,0xf0,0x60,0x70, - 0x30,0x78,0xfc,0xc6,0x36,0x7e,0xee,0xc6, - 0xc6,0xc6,0xee,0x7e,0x36,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0xe6,0xfe,0xdc,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0x00,0xc0,0xc0,0xc0,0xe0,0x60, - 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x00,0x60,0x60,0xce,0xcc,0xd8,0xd8, - 0xf0,0xf0,0xd8,0xd8,0xcc,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xcc,0xc0,0xcc,0xc0, - 0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,0xcc,0xc0, - 0xcc,0xc0,0xff,0xc0,0xdb,0x80,0xc6,0xc6, - 0xc6,0xc6,0xc6,0xc6,0xe6,0xfe,0xdc,0x38, - 0x7c,0xee,0xc6,0xc6,0xc6,0xee,0x7c,0x38, - 0xc0,0xc0,0xc0,0xd8,0xfc,0xee,0xc6,0xc6, - 0xc6,0xee,0xfc,0xd8,0x06,0x06,0x06,0x36, - 0x7e,0xee,0xc6,0xc6,0xc6,0xee,0x7e,0x36, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xe0,0xf8, - 0xd0,0x78,0xfc,0xcc,0x1c,0x78,0xe0,0xcc, - 0xfc,0x78,0x30,0x70,0x60,0x60,0x60,0x60, - 0x60,0xf0,0xf0,0x60,0x60,0x76,0xfe,0xce, - 0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x30,0x30, - 0x30,0x78,0x78,0x48,0xcc,0xcc,0xcc,0x33, - 0x00,0x33,0x00,0x33,0x00,0x73,0x80,0x7f, - 0x80,0x4c,0x80,0x4c,0x80,0xcc,0xc0,0xcc, - 0xc0,0xc6,0xee,0x6c,0x38,0x38,0x38,0x6c, - 0xee,0xc6,0x60,0x70,0x10,0x18,0x38,0x38, - 0x2c,0x6c,0x6c,0xc6,0xc6,0xc6,0xfc,0xfc, - 0x60,0x60,0x30,0x18,0x18,0xfc,0xfc,0x30, - 0x70,0x60,0x60,0x60,0x60,0x60,0xc0,0x60, - 0x60,0x60,0x60,0x60,0x70,0x30,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0xc0,0xe0,0x60, - 0x60,0x60,0x60,0x60,0x30,0x60,0x60,0x60, - 0x60,0x60,0xe0,0xc0,0x98,0xfc,0x64,0xc0, - 0xc0,0xc0,0xc0,0xc0,0x80,0x80,0x80,0x00, - 0x00,0xc0,0xc0,0x20,0x20,0x38,0x7c,0xec, - 0xe0,0xd0,0xd0,0xdc,0x7c,0x38,0x08,0x08, - 0xcc,0xfe,0x70,0x30,0x30,0xf8,0x60,0xc0, - 0xcc,0xcc,0x7c,0x38,0xcc,0x78,0xcc,0xcc, - 0xcc,0xcc,0x78,0xcc,0x18,0x18,0x18,0x7e, - 0x18,0x7e,0x18,0x3c,0x24,0x66,0x42,0xc3, - 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00, - 0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x38, - 0x7c,0x6c,0x0c,0x18,0x7c,0xe6,0xc6,0xce, - 0x7c,0x30,0x60,0x6c,0x7c,0x38,0xd8,0xd8, - 0x1e,0x00,0x33,0x00,0x40,0x80,0xde,0xc0, - 0xb3,0x40,0xa0,0x40,0xa0,0x40,0xb3,0x40, - 0xde,0xc0,0x40,0x80,0x33,0x00,0x1e,0x00, - 0xf0,0x00,0xd0,0xb0,0x70,0xb0,0x60,0x24, - 0x6c,0xd8,0xd8,0x6c,0x24,0x06,0x06,0x06, - 0xfe,0xfe,0xe0,0xe0,0x1e,0x00,0x33,0x00, - 0x40,0x80,0xd2,0xc0,0x96,0x40,0x9c,0x40, - 0x92,0x40,0x92,0x40,0xdc,0xc0,0x40,0x80, - 0x33,0x00,0x1e,0x00,0xf0,0x60,0x90,0x90, - 0x90,0x60,0xfc,0xfc,0x00,0x30,0x30,0x30, - 0xfc,0xfc,0x30,0x30,0x30,0xf0,0x80,0x40, - 0x20,0x90,0xb0,0x60,0x60,0xb0,0x10,0x60, - 0x30,0x90,0x60,0xc0,0x60,0xc0,0xc0,0xc0, - 0xf6,0xfe,0xce,0xc6,0xc6,0xc6,0xc6,0xc6, - 0xc6,0x14,0x14,0x14,0x14,0x14,0x14,0x14, - 0x14,0x74,0xf4,0xf4,0xf4,0xf4,0x74,0x3e, - 0xc0,0xc0,0xc0,0x60,0x40,0x20,0x20,0x20, - 0x20,0x20,0xe0,0x20,0xf0,0x00,0x60,0x90, - 0x90,0x90,0x60,0x90,0xd8,0x6c,0x6c,0xd8, - 0x90,0x20,0x40,0x10,0x40,0x13,0xe0,0x0a, - 0x40,0x09,0x40,0x24,0xc0,0x24,0x40,0x22, - 0x00,0x22,0x00,0x21,0x00,0xe1,0x00,0x20, - 0x80,0x21,0xe0,0x11,0x00,0x10,0x80,0x08, - 0x40,0x09,0x20,0x25,0x60,0x24,0xc0,0x22, - 0x00,0x22,0x00,0x21,0x00,0xe1,0x00,0x20, - 0x80,0x20,0x40,0x10,0x40,0x13,0xe0,0x0a, - 0x40,0x09,0x40,0x64,0xc0,0xb4,0x40,0x12, - 0x00,0x62,0x00,0x31,0x00,0x91,0x00,0x60, - 0x80,0x70,0xf8,0xcc,0xcc,0xc0,0x60,0x60, - 0x30,0x30,0x00,0x30,0x30,0xe1,0xc0,0x61, - 0x80,0x7f,0x80,0x3f,0x00,0x33,0x00,0x33, - 0x00,0x12,0x00,0x1e,0x00,0x1e,0x00,0x0c, - 0x00,0x0c,0x00,0x00,0x00,0x0c,0x00,0x18, - 0x00,0xe1,0xc0,0x61,0x80,0x7f,0x80,0x3f, - 0x00,0x33,0x00,0x33,0x00,0x12,0x00,0x1e, - 0x00,0x1e,0x00,0x0c,0x00,0x0c,0x00,0x00, - 0x00,0x0c,0x00,0x06,0x00,0xe1,0xc0,0x61, - 0x80,0x7f,0x80,0x3f,0x00,0x33,0x00,0x33, - 0x00,0x12,0x00,0x1e,0x00,0x1e,0x00,0x0c, - 0x00,0x0c,0x00,0x00,0x00,0x36,0x00,0x1c, - 0x00,0xe1,0xc0,0x61,0x80,0x7f,0x80,0x3f, - 0x00,0x33,0x00,0x33,0x00,0x12,0x00,0x1e, - 0x00,0x1e,0x00,0x0c,0x00,0x0c,0x00,0x00, - 0x00,0x16,0x00,0x0d,0x00,0xe1,0xc0,0x61, - 0x80,0x7f,0x80,0x3f,0x00,0x33,0x00,0x33, - 0x00,0x12,0x00,0x1e,0x00,0x1e,0x00,0x0c, - 0x00,0x0c,0x00,0x00,0x00,0x36,0x00,0x36, - 0x00,0xe1,0xc0,0x61,0x80,0x7f,0x80,0x3f, - 0x00,0x33,0x00,0x33,0x00,0x12,0x00,0x1e, - 0x00,0x1e,0x00,0x0c,0x00,0x0c,0x00,0x0c, - 0x00,0x0a,0x00,0x06,0x00,0xe3,0xf8,0x63, - 0xf8,0x7f,0x00,0x7f,0x00,0x33,0x00,0x33, - 0xf8,0x3b,0xf8,0x1b,0x00,0x1b,0x00,0x1f, - 0x00,0x0f,0xf8,0x0f,0xf8,0x18,0x0c,0x08, - 0x3c,0x7e,0x63,0xc3,0xc0,0xc0,0xc0,0xc0, - 0xc3,0x63,0x7e,0x3c,0xfe,0xfe,0xc0,0xc0, - 0xc0,0xfe,0xfe,0xc0,0xc0,0xfe,0xfe,0x00, - 0x18,0x30,0xfe,0xfe,0xc0,0xc0,0xc0,0xfe, - 0xfe,0xc0,0xc0,0xfe,0xfe,0x00,0x18,0x0c, - 0xfe,0xfe,0xc0,0xc0,0xc0,0xfe,0xfe,0xc0, - 0xc0,0xfe,0xfe,0x00,0x6c,0x38,0xfe,0xfe, - 0xc0,0xc0,0xc0,0xfe,0xfe,0xc0,0xc0,0xfe, - 0xfe,0x00,0x6c,0x6c,0x60,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x00, - 0x60,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0xc0,0x60, - 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0x30,0x30,0x00,0xd8,0x70,0x30,0x30, - 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0x00,0xd8,0xd8,0x7e,0x00,0x7f,0x00, - 0x63,0x00,0x61,0x80,0x61,0x80,0xf9,0x80, - 0xf9,0x80,0x61,0x80,0x61,0x80,0x63,0x00, - 0x7f,0x00,0x7e,0x00,0xc3,0xc7,0xc7,0xcf, - 0xcb,0xdb,0xd3,0xf3,0xe3,0xe3,0xc3,0x00, - 0x2c,0x1a,0x3e,0x00,0x7f,0x00,0x63,0x00, - 0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80, - 0xc1,0x80,0x63,0x00,0x7f,0x00,0x3e,0x00, - 0x00,0x00,0x0c,0x00,0x18,0x00,0x3e,0x00, - 0x7f,0x00,0x63,0x00,0xc1,0x80,0xc1,0x80, - 0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x00, - 0x7f,0x00,0x3e,0x00,0x00,0x00,0x18,0x00, - 0x0c,0x00,0x3e,0x00,0x7f,0x00,0x63,0x00, - 0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80, - 0xc1,0x80,0x63,0x00,0x7f,0x00,0x3e,0x00, - 0x00,0x00,0x36,0x00,0x1c,0x00,0x3e,0x00, - 0x7f,0x00,0x63,0x00,0xc1,0x80,0xc1,0x80, - 0xc1,0x80,0xc1,0x80,0xc1,0x80,0x63,0x00, - 0x7f,0x00,0x3e,0x00,0x00,0x00,0x2c,0x00, - 0x1a,0x00,0x3e,0x00,0x7f,0x00,0x63,0x00, - 0xc1,0x80,0xc1,0x80,0xc1,0x80,0xc1,0x80, - 0xc1,0x80,0x63,0x00,0x7f,0x00,0x3e,0x00, - 0x00,0x00,0x36,0x00,0x36,0x00,0x84,0xcc, - 0x78,0x30,0x30,0x78,0xcc,0x84,0xbe,0x00, - 0xff,0x00,0x63,0x00,0xf1,0x80,0xd1,0x80, - 0xc9,0x80,0xc9,0x80,0xc5,0x80,0xc7,0x80, - 0x63,0x00,0x7f,0x80,0x3e,0x80,0x3c,0x7e, - 0xe7,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3, - 0xc3,0x00,0x18,0x30,0x3c,0x7e,0xe7,0xc3, - 0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x00, - 0x18,0x0c,0x3c,0x7e,0xe7,0xc3,0xc3,0xc3, - 0xc3,0xc3,0xc3,0xc3,0xc3,0x00,0x6c,0x38, - 0x3c,0x7e,0xe7,0xc3,0xc3,0xc3,0xc3,0xc3, - 0xc3,0xc3,0xc3,0x00,0x6c,0x6c,0x0c,0x00, - 0x0c,0x00,0x0c,0x00,0x0c,0x00,0x0c,0x00, - 0x1e,0x00,0x1e,0x00,0x33,0x00,0x33,0x00, - 0x61,0x80,0xe1,0xc0,0x00,0x00,0x0c,0x00, - 0x06,0x00,0xc0,0xc0,0xf8,0xfc,0xce,0xc6, - 0xc6,0xce,0xfc,0xf8,0xc0,0xc0,0xd8,0xdc, - 0xc6,0xc6,0xc6,0xdc,0xd8,0xcc,0xcc,0xcc, - 0x7c,0x38,0x6c,0xfc,0xcc,0xcc,0x7c,0x1c, - 0xcc,0xfc,0x78,0x00,0x30,0x60,0x6c,0xfc, - 0xcc,0xcc,0x7c,0x1c,0xcc,0xfc,0x78,0x00, - 0x30,0x18,0x6c,0xfc,0xcc,0xcc,0x7c,0x1c, - 0xcc,0xfc,0x78,0x00,0xd8,0x70,0x6c,0xfc, - 0xcc,0xcc,0x7c,0x1c,0xcc,0xfc,0x78,0x00, - 0x58,0x34,0x6c,0xfc,0xcc,0xcc,0x7c,0x1c, - 0xcc,0xfc,0x78,0x00,0xd8,0xd8,0x6c,0xfc, - 0xcc,0xcc,0x7c,0x1c,0xcc,0xfc,0x78,0x00, - 0x30,0x28,0x18,0x73,0x80,0xff,0xc0,0xcc, - 0xc0,0xcc,0x00,0x7f,0xc0,0x1c,0xc0,0xcc, - 0xc0,0xff,0xc0,0x73,0x80,0x30,0x18,0x10, - 0x38,0x7c,0xec,0xc0,0xc0,0xc0,0xec,0x7c, - 0x38,0x38,0x7c,0xcc,0xc0,0xfc,0xcc,0xcc, - 0x78,0x30,0x00,0x30,0x60,0x38,0x7c,0xcc, - 0xc0,0xfc,0xcc,0xcc,0x78,0x30,0x00,0x30, - 0x18,0x38,0x7c,0xcc,0xc0,0xfc,0xcc,0xcc, - 0x78,0x30,0x00,0x6c,0x38,0x38,0x7c,0xcc, - 0xc0,0xfc,0xcc,0xcc,0x78,0x30,0x00,0xd8, - 0xd8,0x60,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x60,0x00,0x60,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0xc0, - 0x60,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0x30,0x00,0xd8,0x70,0x30,0x30,0x30, - 0x30,0x30,0x30,0x30,0x30,0x30,0x00,0xd8, - 0xd8,0x38,0x7c,0xee,0xc6,0xc6,0xc6,0xee, - 0x7c,0x3c,0xf8,0x38,0x6c,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0xe6,0xfe,0xdc,0x00,0x58, - 0x34,0x38,0x7c,0xee,0xc6,0xc6,0xc6,0xee, - 0x7c,0x38,0x00,0x18,0x30,0x38,0x7c,0xee, - 0xc6,0xc6,0xc6,0xee,0x7c,0x38,0x00,0x30, - 0x18,0x38,0x7c,0xee,0xc6,0xc6,0xc6,0xee, - 0x7c,0x38,0x00,0x6c,0x38,0x38,0x7c,0xee, - 0xc6,0xc6,0xc6,0xee,0x7c,0x38,0x00,0x58, - 0x34,0x38,0x7c,0xee,0xc6,0xc6,0xc6,0xee, - 0x7c,0x38,0x00,0x6c,0x6c,0x30,0x30,0x00, - 0xfc,0xfc,0x00,0x30,0x30,0xb8,0x7c,0xee, - 0xe6,0xd6,0xce,0xee,0x7c,0x3a,0x76,0xfe, - 0xce,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00, - 0x18,0x30,0x76,0xfe,0xce,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0x00,0x30,0x18,0x76,0xfe, - 0xce,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00, - 0x6c,0x38,0x76,0xfe,0xce,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0x00,0x6c,0x6c,0x60,0x70, - 0x10,0x18,0x38,0x38,0x2c,0x6c,0x6c,0xc6, - 0xc6,0xc6,0x00,0x30,0x18,0xc0,0xc0,0xc0, - 0xd8,0xfc,0xee,0xc6,0xc6,0xc6,0xee,0xfc, - 0xd8,0xc0,0xc0,0xc0,0x60,0x70,0x10,0x18, - 0x38,0x38,0x2c,0x6c,0x6c,0xc6,0xc6,0xc6, - 0x00,0x6c,0x6c, -}; - -BMF_FontData BMF_font_helvb14 = { - -2, -3, - 12, 14, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 12, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 3, 0}, - {2, 12, -1, 0, 4, 1}, - {5, 4, 0, -8, 6, 13}, - {8, 12, 1, 0, 7, 17}, - {7, 15, 0, 2, 7, 29}, - {11, 11, 0, 0, 12, 44}, - {9, 12, 0, 0, 9, 66}, - {2, 4, -1, -8, 4, 90}, - {4, 15, 0, 3, 4, 94}, - {4, 15, 1, 3, 4, 109}, - {5, 6, 0, -6, 5, 124}, - {6, 8, -1, 0, 8, 130}, - {2, 5, 0, 3, 3, 138}, - {7, 2, 0, -3, 8, 143}, - {2, 2, 0, 0, 3, 145}, - {4, 11, 0, 0, 4, 147}, - {6, 12, 0, 0, 7, 158}, - {4, 12, 0, 0, 7, 170}, - {6, 12, 0, 0, 7, 182}, - {6, 12, 0, 0, 7, 194}, - {6, 12, 0, 0, 7, 206}, - {6, 12, 0, 0, 7, 218}, - {6, 12, 0, 0, 7, 230}, - {6, 12, 0, 0, 7, 242}, - {6, 12, 0, 0, 7, 254}, - {6, 12, 0, 0, 7, 266}, - {2, 8, -1, 0, 4, 278}, - {2, 11, -1, 3, 4, 286}, - {7, 8, 0, 0, 8, 297}, - {6, 6, -1, -1, 8, 305}, - {7, 8, 0, 0, 8, 311}, - {6, 12, -1, 0, 8, 319}, - {12, 14, 0, 2, 13, 331}, - {10, 12, 1, 0, 9, 359}, - {8, 12, 0, 0, 9, 383}, - {8, 12, 0, 0, 9, 395}, - {8, 12, 0, 0, 9, 407}, - {7, 12, 0, 0, 8, 419}, - {7, 12, -1, 0, 8, 431}, - {9, 12, 0, 0, 10, 443}, - {8, 12, 0, 0, 9, 467}, - {2, 12, -1, 0, 5, 479}, - {6, 12, 0, 0, 7, 491}, - {9, 12, -1, 0, 10, 503}, - {7, 12, -1, 0, 8, 527}, - {10, 12, 0, 0, 11, 539}, - {8, 12, 0, 0, 9, 563}, - {9, 12, 0, 0, 10, 575}, - {7, 12, -1, 0, 9, 599}, - {9, 13, 0, 1, 10, 611}, - {8, 12, 0, 0, 9, 637}, - {8, 12, 0, 0, 9, 649}, - {8, 12, 0, 0, 9, 661}, - {8, 12, 0, 0, 9, 673}, - {8, 12, 0, 0, 9, 685}, - {12, 12, 0, 0, 13, 697}, - {9, 12, 0, 0, 10, 721}, - {10, 12, 1, 0, 9, 745}, - {8, 12, 0, 0, 9, 769}, - {3, 15, 0, 3, 4, 781}, - {4, 11, 0, 0, 4, 796}, - {3, 15, 0, 3, 4, 807}, - {6, 7, -1, -4, 8, 822}, - {7, 1, 0, 3, 7, 829}, - {2, 4, -1, -8, 4, 830}, - {6, 9, 0, 0, 7, 834}, - {7, 12, 0, 0, 8, 843}, - {6, 9, 0, 0, 7, 855}, - {7, 12, 0, 0, 8, 864}, - {6, 9, 0, 0, 7, 876}, - {4, 12, 0, 0, 5, 885}, - {7, 12, 0, 3, 8, 897}, - {7, 12, 0, 0, 8, 909}, - {2, 12, 0, 0, 3, 921}, - {3, 15, 1, 3, 3, 933}, - {7, 12, 0, 0, 7, 948}, - {2, 12, 0, 0, 3, 960}, - {10, 9, 0, 0, 11, 972}, - {7, 9, 0, 0, 8, 990}, - {7, 9, 0, 0, 8, 999}, - {7, 12, 0, 3, 8, 1008}, - {7, 12, 0, 3, 8, 1020}, - {5, 9, 0, 0, 5, 1032}, - {6, 9, 0, 0, 7, 1041}, - {4, 11, 0, 0, 5, 1050}, - {7, 9, 0, 0, 8, 1061}, - {6, 9, 0, 0, 7, 1070}, - {10, 9, 0, 0, 11, 1079}, - {7, 9, 0, 0, 8, 1097}, - {7, 12, 0, 3, 8, 1106}, - {6, 9, 0, 0, 7, 1118}, - {4, 15, 0, 3, 5, 1127}, - {1, 15, -1, 3, 4, 1142}, - {4, 15, 0, 3, 5, 1157}, - {6, 3, -1, -3, 8, 1172}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {2, 12, -1, 3, 4, 1175}, - {6, 13, 0, 2, 7, 1187}, - {7, 12, 0, 0, 7, 1200}, - {6, 8, 0, -2, 7, 1212}, - {8, 12, 1, 0, 7, 1220}, - {1, 15, -1, 3, 4, 1232}, - {7, 15, 0, 3, 7, 1247}, - {5, 2, 1, -10, 4, 1262}, - {10, 12, 0, 0, 10, 1264}, - {4, 7, 0, -5, 5, 1288}, - {6, 6, 0, -1, 7, 1295}, - {7, 5, 0, -2, 8, 1301}, - {3, 2, 0, -3, 4, 1306}, - {10, 12, 0, 0, 10, 1308}, - {4, 1, 0, -11, 4, 1332}, - {4, 5, 0, -7, 5, 1333}, - {6, 11, -1, 0, 8, 1338}, - {4, 7, 0, -5, 4, 1349}, - {4, 7, 0, -5, 4, 1356}, - {3, 2, -1, -10, 4, 1363}, - {7, 12, 0, 3, 8, 1365}, - {7, 15, 0, 3, 7, 1377}, - {2, 2, 0, -5, 3, 1392}, - {3, 3, 0, 3, 4, 1394}, - {3, 7, 0, -5, 4, 1397}, - {4, 7, 0, -5, 5, 1404}, - {6, 6, 0, -1, 7, 1411}, - {11, 12, 1, 0, 11, 1417}, - {11, 12, 1, 0, 11, 1441}, - {11, 12, 0, 0, 11, 1465}, - {6, 12, -1, 3, 8, 1489}, - {10, 14, 1, 0, 9, 1501}, - {10, 14, 1, 0, 9, 1529}, - {10, 14, 1, 0, 9, 1557}, - {10, 14, 1, 0, 9, 1585}, - {10, 14, 1, 0, 9, 1613}, - {10, 14, 1, 0, 9, 1641}, - {13, 12, 1, 0, 13, 1669}, - {8, 15, 0, 3, 9, 1693}, - {7, 14, 0, 0, 8, 1708}, - {7, 14, 0, 0, 8, 1722}, - {7, 14, 0, 0, 8, 1736}, - {7, 14, 0, 0, 8, 1750}, - {3, 14, 0, 0, 5, 1764}, - {3, 14, -1, 0, 5, 1778}, - {5, 14, 1, 0, 5, 1792}, - {5, 14, 1, 0, 5, 1806}, - {9, 12, 1, 0, 9, 1820}, - {8, 14, 0, 0, 9, 1844}, - {9, 14, 0, 0, 10, 1858}, - {9, 14, 0, 0, 10, 1886}, - {9, 14, 0, 0, 10, 1914}, - {9, 14, 0, 0, 10, 1942}, - {9, 14, 0, 0, 10, 1970}, - {6, 8, -1, 0, 8, 1998}, - {9, 12, 0, 0, 10, 2006}, - {8, 14, 0, 0, 9, 2030}, - {8, 14, 0, 0, 9, 2044}, - {8, 14, 0, 0, 9, 2058}, - {8, 14, 0, 0, 9, 2072}, - {10, 14, 1, 0, 9, 2086}, - {7, 12, -1, 0, 9, 2114}, - {7, 12, 0, 0, 8, 2126}, - {6, 12, 0, 0, 7, 2138}, - {6, 12, 0, 0, 7, 2150}, - {6, 12, 0, 0, 7, 2162}, - {6, 12, 0, 0, 7, 2174}, - {6, 12, 0, 0, 7, 2186}, - {6, 13, 0, 0, 7, 2198}, - {10, 9, 0, 0, 11, 2211}, - {6, 12, 0, 3, 7, 2229}, - {6, 12, 0, 0, 7, 2241}, - {6, 12, 0, 0, 7, 2253}, - {6, 12, 0, 0, 7, 2265}, - {6, 12, 0, 0, 7, 2277}, - {3, 12, 1, 0, 3, 2289}, - {3, 12, 0, 0, 3, 2301}, - {5, 12, 2, 0, 3, 2313}, - {5, 12, 2, 0, 3, 2325}, - {7, 12, 0, 0, 8, 2337}, - {7, 12, 0, 0, 8, 2349}, - {7, 12, 0, 0, 8, 2361}, - {7, 12, 0, 0, 8, 2373}, - {7, 12, 0, 0, 8, 2385}, - {7, 12, 0, 0, 8, 2397}, - {7, 12, 0, 0, 8, 2409}, - {6, 8, -1, 0, 8, 2421}, - {7, 9, 0, 0, 8, 2429}, - {7, 12, 0, 0, 8, 2438}, - {7, 12, 0, 0, 8, 2450}, - {7, 12, 0, 0, 8, 2462}, - {7, 12, 0, 0, 8, 2474}, - {7, 15, 0, 3, 8, 2486}, - {7, 15, 0, 3, 8, 2501}, - {7, 15, 0, 3, 8, 2516}, - }, - bitmap_data -}; - -#endif - diff --git a/intern/bmfont/intern/BMF_font_helvb8.cpp b/intern/bmfont/intern/BMF_font_helvb8.cpp deleted file mode 100644 index fb56049c8fe..00000000000 --- a/intern/bmfont/intern/BMF_font_helvb8.cpp +++ /dev/null @@ -1,455 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_FontData.h" -#include "BMF_Settings.h" - -#if BMF_INCLUDE_HELVB8 - -static unsigned char bitmap_data[]= { - 0x00,0x80,0x00,0x80,0x80,0x80,0x80,0xa0, - 0xa0,0xa0,0x50,0xf8,0x50,0xf8,0x50,0x40, - 0xe0,0x10,0x60,0x80,0x70,0x20,0x5c,0x54, - 0x2c,0xd0,0xa8,0xe8,0x58,0xb0,0xa8,0x48, - 0xa0,0x40,0x80,0x80,0x80,0x40,0x80,0x80, - 0x80,0x80,0x80,0x40,0x80,0x40,0x40,0x40, - 0x40,0x40,0x80,0x40,0xe0,0x40,0x20,0x20, - 0xf8,0x20,0x20,0x80,0x40,0x40,0xf0,0x80, - 0x80,0x80,0x80,0x80,0x40,0x40,0x40,0x60, - 0x90,0x90,0x90,0x90,0x60,0x40,0x40,0x40, - 0x40,0xc0,0x40,0xf0,0x40,0x20,0x10,0x90, - 0x60,0xc0,0x20,0x20,0xc0,0x20,0xc0,0x20, - 0x20,0xf0,0x60,0x20,0x20,0xc0,0x20,0x20, - 0xc0,0x80,0xe0,0x60,0x90,0x90,0xe0,0x80, - 0x70,0x40,0x40,0x40,0x20,0x10,0xf0,0x60, - 0x90,0x90,0x60,0x90,0x60,0x60,0x10,0x70, - 0x90,0x90,0x60,0x80,0x00,0x00,0x80,0x80, - 0x40,0x40,0x00,0x00,0x40,0x20,0x40,0x80, - 0x40,0x20,0xe0,0x00,0xe0,0x80,0x40,0x20, - 0x40,0x80,0x40,0x00,0x40,0x20,0xc0,0x78, - 0x80,0x9e,0xa5,0x99,0x41,0x3e,0x88,0x88, - 0x70,0x50,0x20,0x20,0xe0,0x90,0x90,0xe0, - 0x90,0xe0,0x70,0x88,0x80,0x80,0x88,0x70, - 0xf0,0x88,0x88,0x88,0x88,0xf0,0xf0,0x80, - 0x80,0xe0,0x80,0xf0,0x80,0x80,0x80,0xe0, - 0x80,0xf0,0x70,0x88,0x88,0x98,0x80,0x70, - 0x88,0x88,0x88,0xf8,0x88,0x88,0x80,0x80, - 0x80,0x80,0x80,0x80,0x40,0xa0,0x20,0x20, - 0x20,0x20,0x90,0x90,0xe0,0xc0,0xa0,0x90, - 0xe0,0x80,0x80,0x80,0x80,0x80,0xa8,0xa8, - 0xa8,0xa8,0xd8,0x88,0x88,0x98,0xa8,0xa8, - 0xc8,0x88,0x70,0x88,0x88,0x88,0x88,0x70, - 0x80,0x80,0xe0,0x90,0x90,0xe0,0x10,0x20, - 0x70,0x88,0x88,0x88,0x88,0x70,0x90,0x90, - 0xe0,0x90,0x90,0xe0,0xe0,0x10,0x10,0xe0, - 0x80,0x70,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x70,0x88,0x88,0x88,0x88,0x88,0x40,0xa0, - 0x90,0x90,0x90,0x90,0x48,0x48,0x6c,0x92, - 0x92,0x92,0x90,0x90,0x60,0x60,0x90,0x90, - 0x20,0x20,0x30,0x48,0x48,0xc8,0xf0,0x80, - 0x40,0x20,0x10,0xf0,0xc0,0x80,0x80,0x80, - 0x80,0x80,0xc0,0x40,0x40,0x40,0x40,0x80, - 0x80,0x80,0xc0,0x40,0x40,0x40,0x40,0x40, - 0xc0,0x88,0x50,0x20,0xf8,0x80,0x80,0x80, - 0xd0,0xa0,0xe0,0x20,0xc0,0xe0,0x90,0x90, - 0x90,0xe0,0x80,0x80,0x60,0x80,0x80,0x80, - 0x60,0x70,0x90,0x90,0x90,0x70,0x10,0x10, - 0x60,0x80,0xe0,0xa0,0x40,0x40,0x40,0x40, - 0x40,0xe0,0x40,0x20,0x60,0x10,0x70,0x90, - 0x90,0x70,0x90,0x90,0x90,0x90,0xe0,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80, - 0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x00, - 0x40,0xa0,0xa0,0xc0,0xc0,0xa0,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xa8, - 0xa8,0xa8,0xa8,0xf0,0x90,0x90,0x90,0x90, - 0xe0,0x60,0x90,0x90,0x90,0x60,0x80,0xe0, - 0x90,0x90,0x90,0xe0,0x10,0x70,0x90,0x90, - 0x90,0x70,0x80,0x80,0x80,0xc0,0xa0,0xc0, - 0x20,0x60,0x80,0x60,0x40,0x40,0x40,0x40, - 0xe0,0x40,0x40,0x60,0xa0,0xa0,0xa0,0xa0, - 0x40,0xa0,0x90,0x90,0x90,0x50,0x50,0xa8, - 0xa8,0xa8,0x90,0x90,0x60,0x90,0x90,0x80, - 0x40,0x60,0x90,0x90,0x90,0xe0,0x80,0x40, - 0x20,0xe0,0x20,0x40,0x40,0xc0,0x40,0x40, - 0x20,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x40,0x40,0x60,0x40,0x40,0x80,0xb0, - 0x48,0x00,0x80,0x80,0x80,0x80,0x80,0x00, - 0x80,0x40,0x40,0xa0,0x80,0xa0,0x40,0x40, - 0xf0,0x40,0x40,0xe0,0x40,0x30,0x88,0x70, - 0x50,0x70,0x88,0x20,0x20,0xf8,0x50,0x88, - 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0xe0, - 0x10,0x30,0x60,0x90,0x60,0x80,0x70,0x90, - 0x78,0x84,0xb4,0xa4,0xb4,0x84,0x78,0xe0, - 0x00,0xe0,0x20,0xc0,0x50,0xa0,0x50,0x10, - 0x10,0xf0,0xc0,0x78,0x84,0xac,0xb4,0xb4, - 0x84,0x78,0xe0,0x40,0xa0,0x40,0xf0,0x00, - 0x20,0xf0,0x20,0xc0,0x80,0x40,0x80,0xc0, - 0x20,0x60,0xe0,0x80,0x40,0x80,0x80,0xe0, - 0xa0,0xa0,0xa0,0x50,0x50,0x50,0x50,0xd0, - 0xd0,0xd0,0x78,0x80,0x80,0x80,0x40,0x40, - 0x40,0xc0,0x40,0xe0,0x00,0xe0,0xa0,0xe0, - 0xa0,0x50,0xa0,0x04,0x5e,0x2c,0x54,0x48, - 0xc4,0x40,0x0e,0x44,0x22,0x5c,0x48,0xc4, - 0x40,0x04,0x5e,0x2c,0xd4,0x28,0x64,0xe0, - 0x60,0x90,0x40,0x20,0x00,0x20,0x88,0x88, - 0x70,0x50,0x20,0x20,0x00,0x20,0x40,0x88, - 0x88,0x70,0x50,0x20,0x20,0x00,0x20,0x10, - 0x88,0x88,0x70,0x50,0x20,0x20,0x00,0x50, - 0x20,0x88,0x88,0x70,0x50,0x20,0x20,0x00, - 0x50,0x28,0x88,0x88,0x70,0x50,0x20,0x20, - 0x00,0x50,0x88,0x88,0x70,0x50,0x20,0x20, - 0x20,0x50,0x20,0x9e,0x90,0x7c,0x50,0x30, - 0x3e,0x80,0x40,0x70,0x88,0x80,0x88,0x88, - 0x70,0xf0,0x80,0x80,0xe0,0x80,0xf0,0x00, - 0x20,0x40,0xf0,0x80,0x80,0xe0,0x80,0xf0, - 0x00,0x40,0x20,0xf0,0x80,0x80,0xe0,0x80, - 0xf0,0x00,0xa0,0x40,0xf0,0x80,0x80,0xe0, - 0x80,0xf0,0x00,0xa0,0x40,0x40,0x40,0x40, - 0x40,0x40,0x00,0x40,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x00,0x80,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x00,0xa0,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x00,0xa0,0x70, - 0x48,0x48,0xe8,0x48,0x70,0x88,0x98,0xa8, - 0xa8,0xc8,0x88,0x00,0x50,0x28,0x70,0x88, - 0x88,0x88,0x88,0x70,0x00,0x20,0x40,0x70, - 0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x10, - 0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x50, - 0x20,0x70,0x88,0x88,0x88,0x88,0x70,0x00, - 0x50,0x28,0x70,0x88,0x88,0x88,0x88,0x70, - 0x00,0x50,0x90,0x60,0x60,0x90,0x80,0xf0, - 0xc8,0xa8,0x98,0x88,0x78,0x08,0x70,0x88, - 0x88,0x88,0x88,0x88,0x00,0x20,0x40,0x70, - 0x88,0x88,0x88,0x88,0x88,0x00,0x20,0x10, - 0x70,0x88,0x88,0x88,0x88,0x88,0x00,0x50, - 0x20,0x70,0x88,0x88,0x88,0x88,0x88,0x00, - 0x50,0x20,0x20,0x30,0x48,0x48,0xc8,0x00, - 0x10,0x08,0x80,0xf0,0x88,0x88,0xf0,0x80, - 0x80,0xa0,0x90,0x90,0xa0,0x90,0x60,0xd0, - 0xa0,0xe0,0x20,0xc0,0x00,0x40,0x80,0xd0, - 0xa0,0xe0,0x20,0xc0,0x00,0x40,0x20,0xd0, - 0xa0,0xe0,0x20,0xc0,0x00,0xa0,0x40,0x68, - 0x50,0x70,0x10,0x60,0x00,0xb0,0x68,0xd0, - 0xa0,0xe0,0x20,0xc0,0x00,0xa0,0xd0,0xa0, - 0xe0,0x20,0xc0,0x40,0xa0,0x40,0xd8,0xa0, - 0xf8,0x28,0xd0,0x80,0x40,0x60,0x80,0x80, - 0x80,0x60,0x60,0x80,0xe0,0xa0,0x40,0x00, - 0x20,0x40,0x60,0x80,0xe0,0xa0,0x40,0x00, - 0x40,0x20,0x60,0x80,0xe0,0xa0,0x40,0x00, - 0xa0,0x40,0x60,0x80,0xe0,0xa0,0x40,0x00, - 0xa0,0x40,0x40,0x40,0x40,0x40,0x00,0x40, - 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80, - 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0, - 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0, - 0x60,0x90,0x90,0x90,0x70,0xa0,0x60,0x90, - 0x90,0x90,0x90,0x90,0xe0,0x00,0xa0,0x50, - 0x60,0x90,0x90,0x90,0x60,0x00,0x20,0x40, - 0x60,0x90,0x90,0x90,0x60,0x00,0x20,0x10, - 0x60,0x90,0x90,0x90,0x60,0x00,0xa0,0x40, - 0x60,0x90,0x90,0x90,0x60,0x00,0xa0,0x50, - 0x60,0x90,0x90,0x90,0x60,0x00,0x90,0x20, - 0x00,0xf0,0x00,0x20,0x80,0x70,0x68,0x58, - 0x48,0x3c,0x02,0x60,0xa0,0xa0,0xa0,0xa0, - 0x00,0x40,0x80,0x60,0xa0,0xa0,0xa0,0xa0, - 0x00,0x40,0x20,0x60,0xa0,0xa0,0xa0,0xa0, - 0x00,0xa0,0x40,0x60,0xa0,0xa0,0xa0,0xa0, - 0x00,0xa0,0x80,0x40,0x60,0x90,0x90,0x90, - 0x00,0x20,0x10,0x80,0xe0,0x90,0x90,0x90, - 0xe0,0x80,0x80,0x40,0x60,0x90,0x90,0x90, - 0x00,0x50, -}; - -BMF_FontData BMF_font_helvb8 = { - 0, -2, - 9, 9, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 8, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 2, 0}, - {1, 6, -1, 0, 2, 1}, - {3, 3, -1, -3, 3, 7}, - {5, 5, 0, 0, 5, 10}, - {4, 7, -1, 1, 5, 15}, - {6, 6, -1, 0, 7, 22}, - {5, 6, -1, 0, 6, 28}, - {1, 3, -1, -3, 2, 34}, - {2, 7, -1, 1, 3, 37}, - {2, 7, -1, 1, 3, 44}, - {3, 3, -1, -2, 3, 51}, - {5, 5, -1, 0, 5, 54}, - {2, 3, 0, 2, 2, 59}, - {4, 1, -2, -2, 6, 62}, - {1, 1, -1, 0, 2, 63}, - {2, 7, -1, 1, 2, 64}, - {4, 6, -1, 0, 5, 71}, - {2, 6, -2, 0, 5, 77}, - {4, 6, -1, 0, 5, 83}, - {3, 6, -2, 0, 5, 89}, - {4, 6, -1, 0, 5, 95}, - {3, 6, -2, 0, 5, 101}, - {4, 6, -1, 0, 5, 107}, - {4, 6, -1, 0, 5, 113}, - {4, 6, -1, 0, 5, 119}, - {4, 6, -1, 0, 5, 125}, - {1, 4, -1, 0, 2, 131}, - {2, 6, 0, 2, 2, 135}, - {3, 5, -1, 0, 5, 141}, - {3, 3, -1, -1, 4, 146}, - {3, 5, -2, 0, 5, 149}, - {3, 5, -2, 0, 5, 154}, - {8, 7, -1, 1, 9, 159}, - {5, 6, -1, 0, 6, 166}, - {4, 6, -2, 0, 6, 172}, - {5, 6, -1, 0, 6, 178}, - {5, 6, -1, 0, 6, 184}, - {4, 6, -2, 0, 6, 190}, - {4, 6, -2, 0, 5, 196}, - {5, 6, -1, 0, 6, 202}, - {5, 6, -1, 0, 6, 208}, - {1, 6, -1, 0, 2, 214}, - {3, 6, -1, 0, 4, 220}, - {4, 6, -2, 0, 6, 226}, - {3, 6, -2, 0, 5, 232}, - {5, 6, -2, 0, 7, 238}, - {5, 6, -1, 0, 6, 244}, - {5, 6, -1, 0, 6, 250}, - {4, 6, -2, 0, 6, 256}, - {5, 8, -1, 2, 6, 262}, - {4, 6, -2, 0, 6, 270}, - {4, 6, -2, 0, 6, 276}, - {3, 6, -1, 0, 4, 282}, - {5, 6, -1, 0, 6, 288}, - {4, 6, -2, 0, 6, 294}, - {7, 6, -1, 0, 7, 300}, - {4, 6, -2, 0, 6, 306}, - {5, 6, -1, 0, 6, 312}, - {4, 6, -2, 0, 6, 318}, - {2, 7, -1, 1, 2, 324}, - {2, 7, 0, 1, 2, 331}, - {2, 7, 0, 1, 2, 338}, - {5, 3, 0, -2, 5, 345}, - {5, 1, 0, 1, 5, 348}, - {1, 3, -1, -3, 2, 349}, - {4, 5, -1, 0, 4, 352}, - {4, 7, -1, 0, 5, 357}, - {3, 5, -1, 0, 4, 364}, - {4, 7, -1, 0, 5, 369}, - {3, 5, -1, 0, 4, 376}, - {3, 7, -1, 0, 3, 381}, - {4, 6, -1, 1, 5, 388}, - {4, 7, -1, 0, 5, 394}, - {1, 7, -1, 0, 2, 401}, - {2, 9, 0, 2, 2, 408}, - {3, 7, -1, 0, 4, 417}, - {1, 7, -1, 0, 2, 424}, - {5, 5, -1, 0, 6, 431}, - {4, 5, -1, 0, 5, 436}, - {4, 5, -1, 0, 5, 441}, - {4, 6, -1, 1, 5, 446}, - {4, 6, -1, 1, 5, 452}, - {3, 5, -1, 0, 3, 458}, - {3, 5, -1, 0, 4, 463}, - {3, 7, -1, 0, 3, 468}, - {3, 5, -1, 0, 4, 475}, - {4, 5, -1, 0, 5, 480}, - {5, 5, -1, 0, 6, 485}, - {4, 5, -1, 0, 5, 490}, - {4, 6, -1, 1, 4, 495}, - {3, 5, -1, 0, 4, 501}, - {3, 7, 0, 1, 2, 506}, - {1, 7, -1, 1, 2, 513}, - {3, 7, 0, 1, 2, 520}, - {5, 2, -1, -2, 6, 527}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 2, 529}, - {1, 7, -1, 2, 2, 530}, - {3, 7, -1, 1, 5, 537}, - {4, 6, -1, 0, 5, 544}, - {5, 5, 0, 0, 4, 550}, - {5, 5, -1, 0, 6, 555}, - {1, 7, -1, 1, 2, 560}, - {4, 8, -1, 2, 5, 567}, - {4, 1, 0, -5, 2, 575}, - {6, 7, -1, 1, 7, 576}, - {3, 5, 0, -1, 3, 583}, - {4, 3, -1, -1, 5, 588}, - {4, 3, -1, -1, 6, 591}, - {2, 1, 0, -2, 3, 594}, - {6, 7, -1, 1, 7, 595}, - {3, 1, 0, -5, 2, 602}, - {3, 3, -1, -3, 3, 603}, - {4, 5, -1, 0, 5, 606}, - {2, 4, -1, -2, 2, 611}, - {3, 4, 0, -2, 2, 615}, - {2, 2, 0, -4, 2, 619}, - {3, 6, -1, 2, 4, 621}, - {5, 8, 0, 2, 5, 627}, - {1, 2, -1, -1, 2, 635}, - {2, 2, 0, 2, 2, 637}, - {2, 4, 0, -2, 2, 639}, - {3, 5, 0, -1, 3, 643}, - {4, 3, -1, -1, 5, 648}, - {7, 7, 0, 1, 7, 651}, - {7, 7, 0, 1, 7, 658}, - {7, 7, 0, 1, 7, 665}, - {4, 6, -1, 1, 5, 672}, - {5, 9, -1, 0, 6, 678}, - {5, 9, -1, 0, 6, 687}, - {5, 9, -1, 0, 6, 696}, - {5, 9, -1, 0, 6, 705}, - {5, 8, -1, 0, 6, 714}, - {5, 9, -1, 0, 6, 722}, - {7, 6, -1, 0, 8, 731}, - {5, 8, -1, 2, 6, 737}, - {4, 9, -2, 0, 6, 745}, - {4, 9, -2, 0, 6, 754}, - {4, 9, -2, 0, 6, 763}, - {4, 8, -2, 0, 6, 772}, - {2, 9, 0, 0, 2, 780}, - {2, 9, -1, 0, 2, 789}, - {3, 9, 0, 0, 2, 798}, - {3, 8, 0, 0, 2, 807}, - {5, 6, -1, 0, 6, 815}, - {5, 9, -1, 0, 6, 821}, - {5, 9, -1, 0, 6, 830}, - {5, 9, -1, 0, 6, 839}, - {5, 9, -1, 0, 6, 848}, - {5, 9, -1, 0, 6, 857}, - {5, 8, -1, 0, 6, 866}, - {4, 4, -1, 0, 5, 874}, - {5, 8, -1, 1, 6, 878}, - {5, 9, -1, 0, 6, 886}, - {5, 9, -1, 0, 6, 895}, - {5, 9, -1, 0, 6, 904}, - {5, 8, -1, 0, 6, 913}, - {5, 9, -1, 0, 6, 921}, - {5, 6, -1, 0, 6, 930}, - {4, 7, -2, 1, 6, 936}, - {4, 8, -1, 0, 4, 943}, - {4, 8, -1, 0, 4, 951}, - {4, 8, -1, 0, 4, 959}, - {5, 8, 0, 0, 4, 967}, - {4, 7, -1, 0, 4, 975}, - {4, 8, -1, 0, 4, 982}, - {5, 5, -1, 0, 6, 990}, - {3, 7, -1, 2, 4, 995}, - {3, 8, -1, 0, 4, 1002}, - {3, 8, -1, 0, 4, 1010}, - {3, 8, -1, 0, 4, 1018}, - {3, 7, -1, 0, 4, 1026}, - {2, 8, 0, 0, 2, 1033}, - {2, 8, -1, 0, 2, 1041}, - {3, 8, 0, 0, 2, 1049}, - {3, 7, 0, 0, 2, 1057}, - {4, 8, -1, 0, 5, 1064}, - {4, 8, -1, 0, 5, 1072}, - {4, 8, -1, 0, 5, 1080}, - {4, 8, -1, 0, 5, 1088}, - {4, 8, -1, 0, 5, 1096}, - {4, 8, -1, 0, 5, 1104}, - {4, 7, -1, 0, 5, 1112}, - {4, 5, -1, 0, 5, 1119}, - {7, 7, 0, 1, 5, 1124}, - {3, 8, -1, 0, 4, 1131}, - {3, 8, -1, 0, 4, 1139}, - {3, 8, -1, 0, 4, 1147}, - {3, 7, -1, 0, 4, 1155}, - {4, 9, -1, 1, 4, 1162}, - {4, 7, -1, 1, 5, 1171}, - {4, 8, -1, 1, 4, 1178}, - }, - bitmap_data -}; - -#endif - diff --git a/intern/bmfont/intern/BMF_font_scr12.cpp b/intern/bmfont/intern/BMF_font_scr12.cpp deleted file mode 100644 index be0be544474..00000000000 --- a/intern/bmfont/intern/BMF_font_scr12.cpp +++ /dev/null @@ -1,484 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_FontData.h" -#include "BMF_Settings.h" - -#if BMF_INCLUDE_SCR12 - -static unsigned char bitmap_data[]= { - 0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80, - 0xa0,0xa0,0xa0,0xa0,0x50,0x50,0xfc,0x28, - 0x28,0x7e,0x14,0x14,0x20,0x70,0xa8,0x28, - 0x70,0xa0,0xa8,0x70,0x20,0x98,0x54,0x54, - 0x2c,0xd0,0xa8,0xa8,0x64,0x74,0x88,0x8c, - 0x50,0x20,0x50,0x48,0x30,0x80,0x40,0x20, - 0x20,0x20,0x40,0x40,0x80,0x80,0x80,0x80, - 0x40,0x40,0x20,0x80,0x40,0x40,0x20,0x20, - 0x20,0x20,0x40,0x40,0x80,0x20,0xa8,0x70, - 0xa8,0x20,0x20,0x20,0xf8,0x20,0x20,0x80, - 0x40,0x40,0xc0,0xf8,0x80,0x80,0x80,0x80, - 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08, - 0x70,0x88,0x88,0xc8,0xa8,0x98,0x88,0x70, - 0xe0,0x40,0x40,0x40,0x40,0x40,0xc0,0x40, - 0xf8,0x80,0x40,0x20,0x10,0x08,0x88,0x70, - 0x70,0x88,0x08,0x08,0x70,0x08,0x88,0x70, - 0x10,0x10,0x10,0xf8,0x90,0x50,0x30,0x10, - 0x70,0x88,0x08,0x08,0xf0,0x80,0x80,0xf8, - 0x70,0x88,0x88,0x88,0xf0,0x80,0x88,0x70, - 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0xf8, - 0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x70, - 0x70,0x88,0x08,0x78,0x88,0x88,0x88,0x70, - 0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x40, - 0x40,0xc0,0x00,0x00,0x40,0x40,0x08,0x10, - 0x20,0x40,0x80,0x40,0x20,0x10,0x08,0xf8, - 0x00,0xf8,0x80,0x40,0x20,0x10,0x08,0x10, - 0x20,0x40,0x80,0x20,0x00,0x20,0x20,0x10, - 0x88,0x88,0x70,0x38,0x40,0x98,0xa8,0xa8, - 0x98,0x48,0x30,0x88,0x88,0xf8,0x88,0x50, - 0x50,0x20,0x20,0xf0,0x88,0x88,0x88,0xf0, - 0x88,0x88,0xf0,0x70,0x88,0x80,0x80,0x80, - 0x80,0x88,0x70,0xf0,0x88,0x88,0x88,0x88, - 0x88,0x88,0xf0,0xf8,0x80,0x80,0x80,0xf0, - 0x80,0x80,0xf8,0x80,0x80,0x80,0x80,0xf0, - 0x80,0x80,0xf8,0x68,0x98,0x88,0x88,0x98, - 0x80,0x88,0x70,0x88,0x88,0x88,0x88,0xf8, - 0x88,0x88,0x88,0xe0,0x40,0x40,0x40,0x40, - 0x40,0x40,0xe0,0x70,0x88,0x88,0x08,0x08, - 0x08,0x08,0x08,0x88,0x88,0x90,0xa0,0xc0, - 0xa0,0x90,0x88,0xf8,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x88,0x88,0xa8,0xa8,0xd8, - 0xd8,0x88,0x88,0x88,0x98,0x98,0xa8,0xa8, - 0xc8,0xc8,0x88,0x70,0x88,0x88,0x88,0x88, - 0x88,0x88,0x70,0x80,0x80,0x80,0x80,0xf0, - 0x88,0x88,0xf0,0x08,0x10,0x70,0xa8,0x88, - 0x88,0x88,0x88,0x88,0x70,0x88,0x90,0x90, - 0xa0,0xf0,0x88,0x88,0xf0,0x70,0x88,0x88, - 0x08,0x70,0x80,0x88,0x70,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0xf8,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x20,0x20,0x50, - 0x50,0x50,0x88,0x88,0x88,0x50,0x50,0xf8, - 0xa8,0xa8,0xa8,0x88,0x88,0x88,0x88,0x50, - 0x20,0x20,0x50,0x88,0x88,0x20,0x20,0x20, - 0x20,0x50,0x50,0x88,0x88,0xf8,0x80,0x40, - 0x40,0x20,0x10,0x08,0xf8,0xe0,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0xe0,0x08,0x08, - 0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80, - 0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0xe0,0x88,0x50,0x20,0xfe,0x20,0x40,0x80, - 0x80,0x68,0x98,0x88,0x78,0x08,0x70,0xb0, - 0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,0x70, - 0x88,0x80,0x80,0x88,0x70,0x68,0x98,0x88, - 0x88,0x98,0x68,0x08,0x08,0x70,0x88,0x80, - 0xf8,0x88,0x70,0x40,0x40,0x40,0x40,0x40, - 0xf0,0x40,0x38,0xf0,0x08,0x68,0x98,0x88, - 0x88,0x98,0x68,0x88,0x88,0x88,0x88,0xc8, - 0xb0,0x80,0x80,0x20,0x20,0x20,0x20,0x20, - 0xe0,0x00,0x20,0x60,0x90,0x10,0x10,0x10, - 0x10,0x10,0x70,0x00,0x10,0x88,0x90,0xa0, - 0xc0,0xa0,0x90,0x80,0x80,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0xa8,0xa8,0xa8, - 0xa8,0xa8,0xd0,0x88,0x88,0x88,0x88,0xc8, - 0xb0,0x70,0x88,0x88,0x88,0x88,0x70,0x80, - 0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x08, - 0x08,0x68,0x98,0x88,0x88,0x98,0x68,0x80, - 0x80,0x80,0x80,0xc8,0xb0,0x70,0x88,0x10, - 0x60,0x88,0x70,0x30,0x40,0x40,0x40,0x40, - 0xf0,0x40,0x68,0x98,0x88,0x88,0x88,0x88, - 0x20,0x20,0x50,0x50,0x88,0x88,0x50,0xa8, - 0xa8,0xa8,0x88,0x88,0x88,0x88,0x50,0x20, - 0x50,0x88,0xf0,0x08,0x68,0x98,0x88,0x88, - 0x88,0x88,0xf8,0x80,0x40,0x20,0x10,0xf8, - 0x18,0x20,0x20,0x20,0x20,0xc0,0x20,0x20, - 0x20,0x18,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0xc0,0x20,0x20,0x20, - 0x20,0x18,0x20,0x20,0x20,0xc0,0x98,0xb4, - 0x64,0x80,0x80,0x80,0x80,0x80,0x00,0x80, - 0x80,0x20,0x20,0x70,0x88,0x80,0x88,0x70, - 0x20,0x20,0xb0,0x48,0x40,0xf0,0x40,0x40, - 0x48,0x30,0x90,0x60,0x90,0x90,0x60,0x90, - 0x20,0x70,0x20,0x70,0x20,0x50,0x88,0x88, - 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80, - 0x80,0x80,0x70,0x88,0x10,0x28,0x48,0x90, - 0xa0,0x40,0x88,0x70,0xa0,0x78,0x84,0xb4, - 0xa4,0xb4,0x84,0x78,0xf0,0x90,0x70,0x10, - 0x60,0x14,0x28,0x50,0xa0,0x50,0x28,0x14, - 0x08,0xf8,0xf0,0x78,0x84,0xac,0xb4,0xb4, - 0x84,0x78,0xe0,0x60,0x90,0x60,0xf8,0x00, - 0x20,0x20,0xf8,0x20,0x20,0xe0,0x40,0x20, - 0xa0,0x40,0xc0,0x20,0x40,0x20,0xc0,0x80, - 0x40,0x80,0xe8,0x90,0x90,0x90,0x90,0x28, - 0x28,0x28,0x28,0x68,0xa8,0xa8,0xa8,0x7c, - 0x80,0x80,0xc0,0x40,0xe0,0x40,0x40,0xc0, - 0x40,0xf0,0x60,0x90,0x90,0x60,0xa0,0x50, - 0x28,0x14,0x28,0x50,0xa0,0x08,0x38,0xa8, - 0x58,0x28,0xf0,0x48,0x40,0xc0,0x40,0x38, - 0x10,0x88,0x68,0x30,0xf0,0x48,0x40,0xc0, - 0x40,0x08,0x38,0xa8,0x58,0x28,0xd0,0x28, - 0x40,0x20,0xc0,0x70,0x88,0x88,0x40,0x20, - 0x20,0x00,0x20,0x88,0x88,0xf8,0x88,0x50, - 0x50,0x20,0x00,0x20,0x40,0x88,0x88,0xf8, - 0x50,0x50,0x20,0x20,0x00,0x20,0x10,0x88, - 0x88,0xf8,0x50,0x50,0x20,0x20,0x00,0x50, - 0x20,0x88,0x88,0xf8,0x50,0x50,0x20,0x20, - 0x00,0xb0,0x68,0x88,0x88,0xf8,0x50,0x50, - 0x20,0x20,0x00,0x50,0x88,0x88,0xf8,0x50, - 0x50,0x20,0x20,0x20,0x50,0x20,0x9c,0x90, - 0xf0,0x50,0x5c,0x30,0x30,0x1c,0x60,0x20, - 0x70,0x88,0x80,0x80,0x80,0x80,0x88,0x70, - 0xf8,0x80,0x80,0xf0,0x80,0x80,0xf8,0x00, - 0x20,0x40,0xf8,0x80,0x80,0xf0,0x80,0x80, - 0xf8,0x00,0x20,0x10,0xf8,0x80,0x80,0xf0, - 0x80,0x80,0xf8,0x00,0x50,0x20,0xf8,0x80, - 0x80,0xf0,0x80,0x80,0xf8,0x00,0x50,0xe0, - 0x40,0x40,0x40,0x40,0x40,0xe0,0x00,0x40, - 0x80,0xe0,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x00,0x40,0x20,0xe0,0x40,0x40,0x40,0x40, - 0x40,0xe0,0x00,0xa0,0x40,0xe0,0x40,0x40, - 0x40,0x40,0x40,0xe0,0x00,0xa0,0x78,0x44, - 0x44,0xf4,0x44,0x44,0x44,0x78,0x88,0x98, - 0x98,0xa8,0xc8,0xc8,0x88,0x00,0xb0,0x68, - 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00, - 0x20,0x40,0x70,0x88,0x88,0x88,0x88,0x88, - 0x70,0x00,0x20,0x10,0x70,0x88,0x88,0x88, - 0x88,0x88,0x70,0x00,0x50,0x20,0x70,0x88, - 0x88,0x88,0x88,0x88,0x70,0x00,0xb0,0x68, - 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00, - 0x50,0x88,0x50,0x20,0x50,0x88,0xb8,0x44, - 0x64,0x54,0x4c,0x44,0x3a,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x00,0x20,0x40,0x70, - 0x88,0x88,0x88,0x88,0x88,0x88,0x00,0x20, - 0x10,0x70,0x88,0x88,0x88,0x88,0x88,0x88, - 0x00,0x50,0x20,0x70,0x88,0x88,0x88,0x88, - 0x88,0x88,0x00,0x50,0x20,0x20,0x20,0x50, - 0x50,0x88,0x88,0x00,0x20,0x10,0x80,0x80, - 0xf0,0x88,0x88,0x88,0xf0,0x80,0x80,0xb0, - 0x88,0x88,0x88,0x90,0xa0,0x90,0x60,0x78, - 0x88,0x78,0x08,0x70,0x00,0x20,0x40,0x78, - 0x88,0x78,0x08,0x70,0x00,0x20,0x10,0x78, - 0x88,0x78,0x08,0x70,0x00,0x50,0x20,0x78, - 0x88,0x78,0x08,0x70,0x00,0xb0,0x68,0x78, - 0x88,0x78,0x08,0x70,0x00,0x50,0x78,0x88, - 0x78,0x08,0x70,0x00,0x20,0x50,0x20,0x6c, - 0x90,0x7c,0x12,0x6c,0x60,0x20,0x70,0x88, - 0x80,0x80,0x88,0x70,0x78,0x80,0xf8,0x88, - 0x70,0x00,0x20,0x40,0x78,0x80,0xf8,0x88, - 0x70,0x00,0x20,0x10,0x78,0x80,0xf8,0x88, - 0x70,0x00,0x50,0x20,0x78,0x80,0xf8,0x88, - 0x70,0x00,0x50,0x20,0x20,0x20,0x20,0xe0, - 0x00,0x40,0x80,0x20,0x20,0x20,0x20,0xe0, - 0x00,0x40,0x20,0x20,0x20,0x20,0x20,0xe0, - 0x00,0xa0,0x40,0x20,0x20,0x20,0x20,0xe0, - 0x00,0xa0,0x70,0x88,0x88,0x88,0x78,0x08, - 0x90,0x60,0xd0,0x88,0x88,0x88,0xc8,0xb0, - 0x00,0xb0,0x68,0x70,0x88,0x88,0x88,0x70, - 0x00,0x20,0x40,0x70,0x88,0x88,0x88,0x70, - 0x00,0x20,0x10,0x70,0x88,0x88,0x88,0x70, - 0x00,0x50,0x20,0x70,0x88,0x88,0x88,0x70, - 0x00,0xb0,0x68,0x70,0x88,0x88,0x88,0x70, - 0x00,0x50,0x20,0x00,0xf8,0x00,0x20,0xb8, - 0x64,0x54,0x4c,0x3a,0x68,0x98,0x88,0x88, - 0x88,0x00,0x20,0x40,0x68,0x98,0x88,0x88, - 0x88,0x00,0x20,0x10,0x68,0x98,0x88,0x88, - 0x88,0x00,0x50,0x20,0x68,0x98,0x88,0x88, - 0x88,0x00,0x50,0xf0,0x08,0x68,0x98,0x88, - 0x88,0x88,0x00,0x20,0x10,0x80,0x80,0xb0, - 0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,0xf0, - 0x08,0x68,0x98,0x88,0x88,0x88,0x00,0xd8, -}; - -BMF_FontData BMF_font_scr12 = { - 0, -2, - 7, 10, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 16, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 7, -1}, - {1, 8, -3, 0, 7, 0}, - {3, 4, -2, -5, 7, 8}, - {7, 8, 0, 0, 7, 12}, - {5, 9, -1, 1, 7, 20}, - {6, 8, 0, 0, 7, 29}, - {6, 8, 0, 0, 7, 37}, - {3, 4, -2, -5, 7, 45}, - {3, 10, -2, 2, 7, 49}, - {3, 10, -2, 2, 7, 59}, - {5, 5, -1, -3, 7, 69}, - {5, 5, -1, -1, 7, 74}, - {2, 4, -2, 2, 7, 79}, - {5, 1, -1, -3, 7, 83}, - {1, 2, -3, 0, 7, 84}, - {5, 10, -1, 1, 7, 86}, - {5, 8, -1, 0, 7, 96}, - {3, 8, -2, 0, 7, 104}, - {5, 8, -1, 0, 7, 112}, - {5, 8, -1, 0, 7, 120}, - {5, 8, -1, 0, 7, 128}, - {5, 8, -1, 0, 7, 136}, - {5, 8, -1, 0, 7, 144}, - {5, 8, -1, 0, 7, 152}, - {5, 8, -1, 0, 7, 160}, - {5, 8, -1, 0, 7, 168}, - {1, 6, -3, 0, 7, 176}, - {2, 8, -2, 2, 7, 182}, - {5, 9, -1, 1, 7, 190}, - {5, 3, -1, -2, 7, 199}, - {5, 9, -1, 1, 7, 202}, - {5, 8, -1, 0, 7, 211}, - {5, 8, -1, 0, 7, 219}, - {5, 8, -1, 0, 7, 227}, - {5, 8, -1, 0, 7, 235}, - {5, 8, -1, 0, 7, 243}, - {5, 8, -1, 0, 7, 251}, - {5, 8, -1, 0, 7, 259}, - {5, 8, -1, 0, 7, 267}, - {5, 8, -1, 0, 7, 275}, - {5, 8, -1, 0, 7, 283}, - {3, 8, -2, 0, 7, 291}, - {5, 8, -1, 0, 7, 299}, - {5, 8, -1, 0, 7, 307}, - {5, 8, -1, 0, 7, 315}, - {5, 8, -1, 0, 7, 323}, - {5, 8, -1, 0, 7, 331}, - {5, 8, -1, 0, 7, 339}, - {5, 8, -1, 0, 7, 347}, - {5, 10, -1, 2, 7, 355}, - {5, 8, -1, 0, 7, 365}, - {5, 8, -1, 0, 7, 373}, - {5, 8, -1, 0, 7, 381}, - {5, 8, -1, 0, 7, 389}, - {5, 8, -1, 0, 7, 397}, - {5, 8, -1, 0, 7, 405}, - {5, 8, -1, 0, 7, 413}, - {5, 8, -1, 0, 7, 421}, - {5, 8, -1, 0, 7, 429}, - {3, 9, -2, 1, 7, 437}, - {5, 10, -1, 1, 7, 446}, - {3, 9, -2, 1, 7, 456}, - {5, 3, -1, -5, 7, 465}, - {7, 1, 0, 1, 7, 468}, - {3, 4, -2, -5, 7, 469}, - {5, 6, -1, 0, 7, 473}, - {5, 8, -1, 0, 7, 479}, - {5, 6, -1, 0, 7, 487}, - {5, 8, -1, 0, 7, 493}, - {5, 6, -1, 0, 7, 501}, - {5, 8, -1, 0, 7, 507}, - {5, 8, -1, 2, 7, 515}, - {5, 8, -1, 0, 7, 523}, - {3, 8, -2, 0, 7, 531}, - {4, 10, -1, 2, 7, 539}, - {5, 8, -1, 0, 7, 549}, - {3, 8, -2, 0, 7, 557}, - {5, 6, -1, 0, 7, 565}, - {5, 6, -1, 0, 7, 571}, - {5, 6, -1, 0, 7, 577}, - {5, 8, -1, 2, 7, 583}, - {5, 8, -1, 2, 7, 591}, - {5, 6, -1, 0, 7, 599}, - {5, 6, -1, 0, 7, 605}, - {4, 7, -1, 0, 7, 611}, - {5, 6, -1, 0, 7, 618}, - {5, 6, -1, 0, 7, 624}, - {5, 6, -1, 0, 7, 630}, - {5, 6, -1, 0, 7, 636}, - {5, 8, -1, 2, 7, 642}, - {5, 6, -1, 0, 7, 650}, - {5, 10, -1, 2, 7, 656}, - {1, 10, -3, 1, 7, 666}, - {5, 10, -1, 2, 7, 676}, - {6, 3, 0, -2, 7, 686}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 8, -3, 2, 7, 689}, - {5, 9, -1, 0, 7, 697}, - {5, 8, -1, 0, 7, 706}, - {4, 6, -1, -2, 7, 714}, - {5, 8, -1, 0, 7, 720}, - {1, 10, -3, 1, 7, 728}, - {5, 10, -1, 1, 7, 738}, - {3, 1, -2, -7, 7, 748}, - {6, 7, 0, 0, 7, 749}, - {4, 5, -1, -4, 7, 756}, - {6, 7, 0, 0, 7, 761}, - {5, 2, -1, -3, 7, 768}, - {4, 1, -1, -3, 7, 770}, - {6, 7, 0, 0, 7, 771}, - {3, 1, -2, -7, 7, 778}, - {4, 3, -1, -4, 7, 779}, - {5, 7, -1, 0, 7, 782}, - {3, 5, -2, -4, 7, 789}, - {3, 5, -2, -4, 7, 794}, - {2, 2, -2, -7, 7, 799}, - {5, 6, -1, 1, 7, 801}, - {6, 9, 0, 1, 7, 807}, - {1, 2, -3, -3, 7, 816}, - {2, 2, -2, 2, 7, 818}, - {3, 5, -2, -4, 7, 820}, - {4, 5, -1, -4, 7, 825}, - {6, 7, 0, 0, 7, 830}, - {5, 10, -1, 1, 7, 837}, - {5, 10, -1, 1, 7, 847}, - {5, 10, -1, 1, 7, 857}, - {5, 8, -1, 2, 7, 867}, - {5, 10, -1, 0, 7, 875}, - {5, 10, -1, 0, 7, 885}, - {5, 10, -1, 0, 7, 895}, - {5, 10, -1, 0, 7, 905}, - {5, 9, -1, 0, 7, 915}, - {5, 10, -1, 0, 7, 924}, - {6, 8, 0, 0, 7, 934}, - {5, 10, -1, 2, 7, 942}, - {5, 10, -1, 0, 7, 952}, - {5, 10, -1, 0, 7, 962}, - {5, 10, -1, 0, 7, 972}, - {5, 9, -1, 0, 7, 982}, - {3, 10, -2, 0, 7, 991}, - {3, 10, -2, 0, 7, 1001}, - {3, 10, -2, 0, 7, 1011}, - {3, 9, -2, 0, 7, 1021}, - {6, 8, 0, 0, 7, 1030}, - {5, 10, -1, 0, 7, 1038}, - {5, 10, -1, 0, 7, 1048}, - {5, 10, -1, 0, 7, 1058}, - {5, 10, -1, 0, 7, 1068}, - {5, 10, -1, 0, 7, 1078}, - {5, 9, -1, 0, 7, 1088}, - {5, 5, -1, -1, 7, 1097}, - {7, 7, 0, 0, 7, 1102}, - {5, 10, -1, 0, 7, 1109}, - {5, 10, -1, 0, 7, 1119}, - {5, 10, -1, 0, 7, 1129}, - {5, 9, -1, 0, 7, 1139}, - {5, 10, -1, 0, 7, 1148}, - {5, 9, -1, 0, 7, 1158}, - {5, 8, -1, 0, 7, 1167}, - {5, 8, -1, 0, 7, 1175}, - {5, 8, -1, 0, 7, 1183}, - {5, 8, -1, 0, 7, 1191}, - {5, 8, -1, 0, 7, 1199}, - {5, 7, -1, 0, 7, 1207}, - {5, 9, -1, 0, 7, 1214}, - {7, 5, 0, 0, 7, 1223}, - {5, 8, -1, 2, 7, 1228}, - {5, 8, -1, 0, 7, 1236}, - {5, 8, -1, 0, 7, 1244}, - {5, 8, -1, 0, 7, 1252}, - {5, 7, -1, 0, 7, 1260}, - {3, 8, -2, 0, 7, 1267}, - {3, 8, -2, 0, 7, 1275}, - {3, 8, -2, 0, 7, 1283}, - {3, 7, -2, 0, 7, 1291}, - {5, 9, -1, 0, 7, 1298}, - {5, 8, -1, 0, 7, 1307}, - {5, 8, -1, 0, 7, 1315}, - {5, 8, -1, 0, 7, 1323}, - {5, 8, -1, 0, 7, 1331}, - {5, 8, -1, 0, 7, 1339}, - {5, 7, -1, 0, 7, 1347}, - {5, 5, -1, -1, 7, 1354}, - {7, 5, 0, 0, 7, 1359}, - {5, 8, -1, 0, 7, 1364}, - {5, 8, -1, 0, 7, 1372}, - {5, 8, -1, 0, 7, 1380}, - {5, 7, -1, 0, 7, 1388}, - {5, 10, -1, 2, 7, 1395}, - {5, 10, -1, 2, 7, 1405}, - {5, 9, -1, 2, 7, 1415}, - }, - bitmap_data -}; - -#endif - diff --git a/intern/bmfont/intern/BMF_font_scr14.cpp b/intern/bmfont/intern/BMF_font_scr14.cpp deleted file mode 100644 index 596442885e1..00000000000 --- a/intern/bmfont/intern/BMF_font_scr14.cpp +++ /dev/null @@ -1,510 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_FontData.h" -#include "BMF_Settings.h" - -#if BMF_INCLUDE_SCR14 - -static unsigned char bitmap_data[]= { - 0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80, - 0x80,0xa0,0xa0,0xa0,0xa0,0x50,0x50,0xfc, - 0x28,0x28,0x28,0x7e,0x14,0x14,0x20,0x70, - 0xa8,0x28,0x30,0x60,0xa0,0xa8,0x70,0x20, - 0x98,0x54,0x54,0x2c,0x10,0x68,0x54,0x54, - 0x32,0x74,0x88,0x8c,0x90,0x60,0x20,0x50, - 0x48,0x30,0x80,0x40,0x20,0x20,0x20,0x40, - 0x40,0x80,0x80,0x80,0x80,0x80,0x40,0x40, - 0x20,0x80,0x40,0x40,0x20,0x20,0x20,0x20, - 0x20,0x40,0x40,0x80,0x20,0xa8,0x70,0x70, - 0xa8,0x20,0x20,0x20,0xf8,0x20,0x20,0x80, - 0x40,0x40,0xc0,0xf8,0x80,0x80,0x80,0x80, - 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08, - 0x70,0x88,0x88,0xc8,0xa8,0x98,0x88,0x88, - 0x70,0xe0,0x40,0x40,0x40,0x40,0x40,0x40, - 0xc0,0x40,0xf8,0x80,0x40,0x20,0x10,0x08, - 0x88,0x88,0x70,0x70,0x88,0x08,0x08,0x70, - 0x08,0x08,0x88,0x70,0x10,0x10,0x10,0xf8, - 0x90,0x50,0x50,0x30,0x10,0x70,0x88,0x08, - 0x08,0x08,0xf0,0x80,0x80,0xf8,0x70,0x88, - 0x88,0x88,0x88,0xf0,0x80,0x88,0x70,0x40, - 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0xf8, - 0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x88, - 0x70,0x70,0x88,0x08,0x08,0x78,0x88,0x88, - 0x88,0x70,0x80,0x80,0x00,0x00,0x80,0x80, - 0x80,0x40,0x40,0xc0,0x00,0x00,0x40,0x40, - 0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10, - 0x08,0xf8,0x00,0xf8,0x80,0x40,0x20,0x10, - 0x08,0x10,0x20,0x40,0x80,0x20,0x20,0x00, - 0x20,0x20,0x10,0x88,0x88,0x70,0x38,0x40, - 0x98,0xa8,0xa8,0x98,0x88,0x48,0x30,0x88, - 0x88,0xf8,0x88,0x50,0x50,0x50,0x20,0x20, - 0xf0,0x88,0x88,0x88,0xf0,0x88,0x88,0x88, - 0xf0,0x70,0x88,0x80,0x80,0x80,0x80,0x80, - 0x88,0x70,0xf0,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0xf0,0xf8,0x80,0x80,0x80,0xf0, - 0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0x80, - 0xf0,0x80,0x80,0x80,0xf8,0x68,0x98,0x88, - 0x88,0x98,0x80,0x80,0x88,0x70,0x88,0x88, - 0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xe0, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x70,0x88,0x88,0x08,0x08,0x08,0x08,0x08, - 0x08,0x88,0x88,0x90,0xa0,0xc0,0xa0,0x90, - 0x88,0x88,0xf8,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x88,0x88,0x88,0xa8,0xa8, - 0xd8,0xd8,0x88,0x88,0x88,0x98,0x98,0xa8, - 0xa8,0xc8,0xc8,0x88,0x88,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x70,0x80,0x80, - 0x80,0x80,0xf0,0x88,0x88,0x88,0xf0,0x08, - 0x10,0x70,0xa8,0x88,0x88,0x88,0x88,0x88, - 0x88,0x70,0x88,0x88,0x90,0xa0,0xf0,0x88, - 0x88,0x88,0xf0,0x70,0x88,0x08,0x08,0x70, - 0x80,0x80,0x88,0x70,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0xf8,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x20,0x20, - 0x50,0x50,0x50,0x88,0x88,0x88,0x88,0x50, - 0x50,0xf8,0xa8,0xa8,0x88,0x88,0x88,0x88, - 0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88, - 0x88,0x20,0x20,0x20,0x20,0x20,0x50,0x50, - 0x88,0x88,0xf8,0x80,0x40,0x40,0x20,0x10, - 0x10,0x08,0xf8,0xf0,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0xf0,0x08,0x08, - 0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80, - 0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10, - 0x10,0x10,0xf0,0x88,0x50,0x20,0xfe,0x20, - 0x40,0x80,0x80,0x68,0x98,0x88,0x78,0x08, - 0x88,0x70,0xb0,0xc8,0x88,0x88,0x88,0xc8, - 0xb0,0x80,0x80,0x70,0x88,0x80,0x80,0x80, - 0x88,0x70,0x68,0x98,0x88,0x88,0x88,0x98, - 0x68,0x08,0x08,0x70,0x88,0x80,0xf8,0x88, - 0x88,0x70,0x40,0x40,0x40,0x40,0x40,0x40, - 0xf0,0x40,0x38,0x70,0x88,0x08,0x68,0x98, - 0x88,0x88,0x88,0x98,0x68,0x88,0x88,0x88, - 0x88,0x88,0xc8,0xb0,0x80,0x80,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0x00,0x20,0x60, - 0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10, - 0x70,0x00,0x10,0x88,0x88,0x90,0xe0,0xa0, - 0x90,0x88,0x80,0x80,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0xa8,0xa8,0xa8, - 0xa8,0xa8,0xa8,0xd0,0x88,0x88,0x88,0x88, - 0x88,0xc8,0xb0,0x70,0x88,0x88,0x88,0x88, - 0x88,0x70,0x80,0x80,0x80,0xb0,0xc8,0x88, - 0x88,0x88,0xc8,0xb0,0x08,0x08,0x08,0x68, - 0x98,0x88,0x88,0x88,0x98,0x68,0x80,0x80, - 0x80,0x80,0x80,0xc8,0xb0,0x70,0x88,0x08, - 0x70,0x80,0x88,0x70,0x30,0x40,0x40,0x40, - 0x40,0x40,0xf0,0x40,0x40,0x68,0x98,0x88, - 0x88,0x88,0x88,0x88,0x20,0x20,0x50,0x50, - 0x88,0x88,0x88,0x50,0xa8,0xa8,0xa8,0xa8, - 0x88,0x88,0x88,0x88,0x50,0x20,0x50,0x88, - 0x88,0x70,0x88,0x08,0x68,0x98,0x88,0x88, - 0x88,0x88,0x88,0xf8,0x80,0x40,0x20,0x10, - 0x08,0xf8,0x18,0x20,0x20,0x20,0x20,0x20, - 0xc0,0x20,0x20,0x20,0x20,0x18,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0xc0,0x20,0x20,0x20,0x20,0x20, - 0x18,0x20,0x20,0x20,0x20,0xc0,0x98,0xb4, - 0x64,0x80,0x80,0x80,0x80,0x80,0x80,0x00, - 0x80,0x80,0x20,0x20,0x70,0x88,0x80,0x80, - 0x88,0x70,0x20,0x20,0xb0,0x48,0x40,0x40, - 0xf0,0x40,0x40,0x48,0x30,0x88,0x70,0x88, - 0x88,0x70,0x88,0x70,0x20,0xf8,0x20,0xf8, - 0x50,0x50,0x88,0x88,0x80,0x80,0x80,0x80, - 0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x80, - 0x70,0x88,0x10,0x28,0x48,0x88,0x90,0xa0, - 0x40,0x88,0x70,0xd8,0x38,0x44,0x92,0xaa, - 0xa2,0xaa,0x92,0x44,0x38,0xf8,0x00,0x68, - 0x90,0x70,0x10,0x60,0x12,0x24,0x48,0x90, - 0x48,0x24,0x12,0x08,0x08,0xf8,0xf0,0x38, - 0x44,0xaa,0xaa,0xb2,0xaa,0xb2,0x44,0x38, - 0xe0,0x60,0x90,0x90,0x60,0xf8,0x00,0x20, - 0x20,0xf8,0x20,0x20,0xe0,0x40,0x20,0xa0, - 0x40,0xc0,0x20,0x40,0x20,0xc0,0x80,0x40, - 0x80,0x80,0xb4,0xc8,0x88,0x88,0x88,0x88, - 0x28,0x28,0x28,0x28,0x28,0x68,0xa8,0xa8, - 0xa8,0x7c,0x80,0x80,0xc0,0x20,0x40,0xe0, - 0x40,0x40,0xc0,0x40,0xf8,0x00,0x70,0x88, - 0x88,0x88,0x70,0x90,0x48,0x24,0x12,0x24, - 0x48,0x90,0x04,0x9e,0x54,0x2c,0x14,0xe8, - 0x44,0x40,0xc0,0x40,0x1c,0x08,0x84,0x54, - 0x28,0x10,0xe8,0x44,0x40,0xc0,0x40,0x04, - 0x9e,0x54,0x2c,0xd4,0x28,0x44,0x20,0xc0, - 0x70,0x88,0x80,0x40,0x20,0x20,0x00,0x00, - 0x20,0x20,0x88,0x88,0xf8,0x88,0x50,0x50, - 0x20,0x20,0x00,0x20,0x40,0x88,0x88,0xf8, - 0x88,0x50,0x50,0x20,0x20,0x00,0x20,0x10, - 0x88,0x88,0xf8,0x88,0x50,0x50,0x20,0x20, - 0x00,0x50,0x20,0x88,0x88,0xf8,0x88,0x50, - 0x50,0x20,0x20,0x00,0xb0,0x68,0x88,0x88, - 0xf8,0x88,0x50,0x50,0x20,0x20,0x00,0xd8, - 0x88,0x88,0xf8,0x88,0x50,0x50,0x20,0x20, - 0x20,0x50,0x20,0x9c,0x90,0xf0,0x90,0x5c, - 0x50,0x30,0x30,0x1c,0x60,0x10,0x20,0x70, - 0x88,0x80,0x80,0x80,0x80,0x80,0x88,0x70, - 0xf8,0x80,0x80,0x80,0xf0,0x80,0x80,0xf8, - 0x00,0x20,0x40,0xf8,0x80,0x80,0x80,0xf0, - 0x80,0x80,0xf8,0x00,0x20,0x10,0xf8,0x80, - 0x80,0x80,0xf0,0x80,0x80,0xf8,0x00,0x50, - 0x20,0xf8,0x80,0x80,0x80,0xf0,0x80,0x80, - 0xf8,0x00,0xd8,0xe0,0x40,0x40,0x40,0x40, - 0x40,0x40,0xe0,0x00,0x40,0x80,0xe0,0x40, - 0x40,0x40,0x40,0x40,0x40,0xe0,0x00,0x40, - 0x20,0xe0,0x40,0x40,0x40,0x40,0x40,0x40, - 0xe0,0x00,0xa0,0x40,0x70,0x20,0x20,0x20, - 0x20,0x20,0x20,0x70,0x00,0xd8,0x78,0x44, - 0x44,0x44,0xf4,0x44,0x44,0x44,0x78,0x88, - 0x98,0x98,0xa8,0xa8,0xc8,0xc8,0x88,0x00, - 0xb0,0x68,0x70,0x88,0x88,0x88,0x88,0x88, - 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x10, - 0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70, - 0x00,0x50,0x20,0x70,0x88,0x88,0x88,0x88, - 0x88,0x88,0x70,0x00,0xb0,0x68,0x70,0x88, - 0x88,0x88,0x88,0x88,0x88,0x70,0x00,0xd8, - 0x88,0x50,0x20,0x50,0x88,0xb8,0x44,0x64, - 0x64,0x54,0x4c,0x4c,0x44,0x3a,0x70,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x00,0x20, - 0x40,0x70,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x00,0x20,0x10,0x70,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x00,0x50,0x20,0x70, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x00, - 0xd8,0x20,0x20,0x20,0x20,0x50,0x50,0x88, - 0x88,0x00,0x20,0x10,0xe0,0x40,0x78,0x44, - 0x44,0x44,0x78,0x40,0xe0,0xb0,0x88,0x88, - 0x88,0x90,0xa0,0x90,0x90,0x60,0x68,0x98, - 0x88,0x78,0x08,0x88,0x70,0x00,0x20,0x40, - 0x68,0x98,0x88,0x78,0x08,0x88,0x70,0x00, - 0x20,0x10,0x68,0x98,0x88,0x78,0x08,0x88, - 0x70,0x00,0x50,0x20,0x68,0x98,0x88,0x78, - 0x08,0x88,0x70,0x00,0xb0,0x68,0x68,0x98, - 0x88,0x78,0x08,0x88,0x70,0x00,0xd8,0x68, - 0x98,0x88,0x78,0x08,0x88,0x70,0x00,0x20, - 0x50,0x20,0x6c,0x92,0x90,0x7e,0x12,0x92, - 0x6c,0x60,0x10,0x20,0x70,0x88,0x80,0x80, - 0x80,0x88,0x70,0x70,0x88,0x80,0xf8,0x88, - 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x80, - 0xf8,0x88,0x88,0x70,0x00,0x20,0x10,0x70, - 0x88,0x80,0xf8,0x88,0x88,0x70,0x00,0x50, - 0x20,0x70,0x88,0x80,0xf8,0x88,0x88,0x70, - 0x00,0xd8,0x20,0x20,0x20,0x20,0x20,0x20, - 0xe0,0x00,0x20,0x40,0x20,0x20,0x20,0x20, - 0x20,0x20,0xe0,0x00,0x20,0x10,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0x00,0xa0,0x40, - 0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x00, - 0xd8,0x70,0x88,0x88,0x88,0x88,0x88,0x78, - 0x10,0xd0,0x20,0xd0,0x88,0x88,0x88,0x88, - 0x88,0xc8,0xb0,0x00,0xb0,0x68,0x70,0x88, - 0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x40, - 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00, - 0x20,0x10,0x70,0x88,0x88,0x88,0x88,0x88, - 0x70,0x00,0x50,0x20,0x70,0x88,0x88,0x88, - 0x88,0x88,0x70,0x00,0xb0,0x68,0x70,0x88, - 0x88,0x88,0x88,0x88,0x70,0x00,0xd8,0x10, - 0x10,0x00,0xfe,0x00,0x10,0x10,0xb8,0x44, - 0x64,0x54,0x4c,0x44,0x3a,0x68,0x98,0x88, - 0x88,0x88,0x88,0x88,0x00,0x20,0x40,0x68, - 0x98,0x88,0x88,0x88,0x88,0x88,0x00,0x20, - 0x10,0x68,0x98,0x88,0x88,0x88,0x88,0x88, - 0x00,0x50,0x20,0x68,0x98,0x88,0x88,0x88, - 0x88,0x88,0x00,0xd8,0x70,0x88,0x08,0x68, - 0x98,0x88,0x88,0x88,0x88,0x88,0x00,0x20, - 0x10,0xe0,0x40,0x58,0x64,0x44,0x44,0x44, - 0x64,0x58,0x40,0xc0,0x70,0x88,0x08,0x68, - 0x98,0x88,0x88,0x88,0x88,0x88,0x00,0xd8, -}; - -BMF_FontData BMF_font_scr14 = { - 0, -3, - 7, 11, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 16, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 7, -1}, - {1, 9, -3, 0, 7, 0}, - {3, 4, -2, -5, 7, 9}, - {7, 9, 0, 0, 7, 13}, - {5, 10, -1, 1, 7, 22}, - {7, 9, 0, 0, 7, 32}, - {6, 9, 0, 0, 7, 41}, - {3, 4, -2, -5, 7, 50}, - {3, 11, -2, 1, 7, 54}, - {3, 11, -2, 1, 7, 65}, - {5, 6, -1, -2, 7, 76}, - {5, 5, -1, -2, 7, 82}, - {2, 4, -2, 2, 7, 87}, - {5, 1, -1, -4, 7, 91}, - {1, 2, -3, 0, 7, 92}, - {5, 10, -1, 0, 7, 94}, - {5, 9, -1, 0, 7, 104}, - {3, 9, -2, 0, 7, 113}, - {5, 9, -1, 0, 7, 122}, - {5, 9, -1, 0, 7, 131}, - {5, 9, -1, 0, 7, 140}, - {5, 9, -1, 0, 7, 149}, - {5, 9, -1, 0, 7, 158}, - {5, 9, -1, 0, 7, 167}, - {5, 9, -1, 0, 7, 176}, - {5, 9, -1, 0, 7, 185}, - {1, 6, -3, 0, 7, 194}, - {2, 8, -2, 1, 7, 200}, - {5, 9, -1, 0, 7, 208}, - {5, 3, -1, -3, 7, 217}, - {5, 9, -1, 0, 7, 220}, - {5, 9, -1, 0, 7, 229}, - {5, 9, -1, 0, 7, 238}, - {5, 9, -1, 0, 7, 247}, - {5, 9, -1, 0, 7, 256}, - {5, 9, -1, 0, 7, 265}, - {5, 9, -1, 0, 7, 274}, - {5, 9, -1, 0, 7, 283}, - {5, 9, -1, 0, 7, 292}, - {5, 9, -1, 0, 7, 301}, - {5, 9, -1, 0, 7, 310}, - {3, 9, -2, 0, 7, 319}, - {5, 9, -1, 0, 7, 328}, - {5, 9, -1, 0, 7, 337}, - {5, 9, -1, 0, 7, 346}, - {5, 9, -1, 0, 7, 355}, - {5, 9, -1, 0, 7, 364}, - {5, 9, -1, 0, 7, 373}, - {5, 9, -1, 0, 7, 382}, - {5, 11, -1, 2, 7, 391}, - {5, 9, -1, 0, 7, 402}, - {5, 9, -1, 0, 7, 411}, - {5, 9, -1, 0, 7, 420}, - {5, 9, -1, 0, 7, 429}, - {5, 9, -1, 0, 7, 438}, - {5, 9, -1, 0, 7, 447}, - {5, 9, -1, 0, 7, 456}, - {5, 9, -1, 0, 7, 465}, - {5, 9, -1, 0, 7, 474}, - {4, 11, -2, 1, 7, 483}, - {5, 10, -1, 0, 7, 494}, - {4, 11, -1, 1, 7, 504}, - {5, 3, -1, -6, 7, 515}, - {7, 1, 0, 2, 7, 518}, - {3, 4, -2, -5, 7, 519}, - {5, 7, -1, 0, 7, 523}, - {5, 9, -1, 0, 7, 530}, - {5, 7, -1, 0, 7, 539}, - {5, 9, -1, 0, 7, 546}, - {5, 7, -1, 0, 7, 555}, - {5, 9, -1, 0, 7, 562}, - {5, 10, -1, 3, 7, 571}, - {5, 9, -1, 0, 7, 581}, - {3, 9, -2, 0, 7, 590}, - {4, 12, -1, 3, 7, 599}, - {5, 9, -1, 0, 7, 611}, - {3, 9, -2, 0, 7, 620}, - {5, 7, -1, 0, 7, 629}, - {5, 7, -1, 0, 7, 636}, - {5, 7, -1, 0, 7, 643}, - {5, 10, -1, 3, 7, 650}, - {5, 10, -1, 3, 7, 660}, - {5, 7, -1, 0, 7, 670}, - {5, 7, -1, 0, 7, 677}, - {4, 9, -1, 0, 7, 684}, - {5, 7, -1, 0, 7, 693}, - {5, 7, -1, 0, 7, 700}, - {5, 7, -1, 0, 7, 707}, - {5, 7, -1, 0, 7, 714}, - {5, 10, -1, 3, 7, 721}, - {5, 7, -1, 0, 7, 731}, - {5, 12, -1, 2, 7, 738}, - {1, 12, -3, 2, 7, 750}, - {5, 12, -1, 2, 7, 762}, - {6, 3, 0, -3, 7, 774}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 9, -3, 2, 7, 777}, - {5, 10, -1, 0, 7, 786}, - {5, 9, -1, 0, 7, 796}, - {5, 6, -1, -3, 7, 805}, - {5, 9, -1, 0, 7, 811}, - {1, 12, -3, 2, 7, 820}, - {5, 11, -1, 2, 7, 832}, - {5, 1, -1, -8, 7, 843}, - {7, 9, 0, 0, 7, 844}, - {5, 7, -1, -2, 7, 853}, - {7, 7, 0, 0, 7, 860}, - {5, 3, -1, -3, 7, 867}, - {4, 1, -1, -4, 7, 870}, - {7, 9, 0, 0, 7, 871}, - {3, 1, -2, -8, 7, 880}, - {4, 4, -1, -4, 7, 881}, - {5, 7, -1, 0, 7, 885}, - {3, 5, -2, -5, 7, 892}, - {3, 5, -2, -5, 7, 897}, - {2, 2, -3, -8, 7, 902}, - {6, 8, -1, 2, 7, 904}, - {6, 10, 0, 1, 7, 912}, - {1, 2, -3, -3, 7, 922}, - {3, 3, -2, 3, 7, 924}, - {3, 5, -2, -5, 7, 927}, - {5, 7, -1, -2, 7, 932}, - {7, 7, 0, 0, 7, 939}, - {7, 10, 0, 0, 7, 946}, - {6, 11, 0, 1, 7, 956}, - {7, 9, 0, -1, 7, 967}, - {5, 10, -1, 3, 7, 976}, - {5, 11, -1, 0, 7, 986}, - {5, 11, -1, 0, 7, 997}, - {5, 11, -1, 0, 7, 1008}, - {5, 11, -1, 0, 7, 1019}, - {5, 10, -1, 0, 7, 1030}, - {5, 11, -1, 0, 7, 1040}, - {6, 9, 0, 0, 7, 1051}, - {5, 12, -1, 3, 7, 1060}, - {5, 11, -1, 0, 7, 1072}, - {5, 11, -1, 0, 7, 1083}, - {5, 11, -1, 0, 7, 1094}, - {5, 10, -1, 0, 7, 1105}, - {3, 11, -2, 0, 7, 1115}, - {3, 11, -2, 0, 7, 1126}, - {3, 11, -2, 0, 7, 1137}, - {5, 10, -1, 0, 7, 1148}, - {6, 9, 0, 0, 7, 1158}, - {5, 11, -1, 0, 7, 1167}, - {5, 11, -1, 0, 7, 1178}, - {5, 11, -1, 0, 7, 1189}, - {5, 11, -1, 0, 7, 1200}, - {5, 11, -1, 0, 7, 1211}, - {5, 10, -1, 0, 7, 1222}, - {5, 5, -1, -1, 7, 1232}, - {7, 9, 0, 0, 7, 1237}, - {5, 11, -1, 0, 7, 1246}, - {5, 11, -1, 0, 7, 1257}, - {5, 11, -1, 0, 7, 1268}, - {5, 10, -1, 0, 7, 1279}, - {5, 11, -1, 0, 7, 1289}, - {6, 9, 0, 0, 7, 1300}, - {5, 9, -1, 0, 7, 1309}, - {5, 10, -1, 0, 7, 1318}, - {5, 10, -1, 0, 7, 1328}, - {5, 10, -1, 0, 7, 1338}, - {5, 10, -1, 0, 7, 1348}, - {5, 9, -1, 0, 7, 1358}, - {5, 11, -1, 0, 7, 1367}, - {7, 7, 0, 0, 7, 1378}, - {5, 10, -1, 3, 7, 1385}, - {5, 10, -1, 0, 7, 1395}, - {5, 10, -1, 0, 7, 1405}, - {5, 10, -1, 0, 7, 1415}, - {5, 9, -1, 0, 7, 1425}, - {3, 10, -2, 0, 7, 1434}, - {4, 10, -2, 0, 7, 1444}, - {3, 10, -2, 0, 7, 1454}, - {5, 9, -2, 0, 7, 1464}, - {5, 11, -1, 0, 7, 1473}, - {5, 10, -1, 0, 7, 1484}, - {5, 10, -1, 0, 7, 1494}, - {5, 10, -1, 0, 7, 1504}, - {5, 10, -1, 0, 7, 1514}, - {5, 10, -1, 0, 7, 1524}, - {5, 9, -1, 0, 7, 1534}, - {7, 7, 0, 0, 7, 1543}, - {7, 7, 0, 0, 7, 1550}, - {5, 10, -1, 0, 7, 1557}, - {5, 10, -1, 0, 7, 1567}, - {5, 10, -1, 0, 7, 1577}, - {5, 9, -1, 0, 7, 1587}, - {5, 13, -1, 3, 7, 1596}, - {6, 11, 0, 2, 7, 1609}, - {5, 12, -1, 3, 7, 1620}, - }, - bitmap_data -}; - -#endif - diff --git a/intern/bmfont/intern/BMF_font_scr15.cpp b/intern/bmfont/intern/BMF_font_scr15.cpp deleted file mode 100644 index 8490e999bdb..00000000000 --- a/intern/bmfont/intern/BMF_font_scr15.cpp +++ /dev/null @@ -1,525 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include "BMF_FontData.h" -#include "BMF_Settings.h" - -#if BMF_INCLUDE_SCR15 - -static unsigned char bitmap_data[]= { - 0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x90,0x90,0x90,0x90,0x48,0x48, - 0x48,0xfe,0x24,0x24,0x24,0x7f,0x12,0x12, - 0x20,0x70,0xa8,0xa8,0x28,0x30,0x60,0xa0, - 0xa8,0xa8,0x70,0x20,0x8c,0x52,0x52,0x2c, - 0x10,0x10,0x68,0x94,0x94,0x62,0x72,0x8c, - 0x84,0x8a,0x50,0x20,0x30,0x48,0x48,0x30, - 0x80,0x40,0x60,0x60,0x10,0x20,0x40,0x40, - 0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20, - 0x10,0x80,0x40,0x20,0x20,0x10,0x10,0x10, - 0x10,0x10,0x20,0x20,0x40,0x80,0x20,0xa8, - 0x70,0x70,0xa8,0x20,0x10,0x10,0x10,0xfe, - 0x10,0x10,0x10,0x80,0x40,0x20,0x60,0x60, - 0xfc,0xc0,0xc0,0x80,0x80,0x40,0x40,0x20, - 0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x78, - 0x84,0x84,0xc4,0xa4,0x94,0x8c,0x84,0x84, - 0x78,0xe0,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0xc0,0x40,0xfc,0x80,0x40,0x20,0x10, - 0x08,0x04,0x84,0x84,0x78,0x78,0x84,0x04, - 0x04,0x04,0x38,0x04,0x04,0x84,0x78,0x08, - 0x08,0x08,0xfc,0x88,0x48,0x48,0x28,0x18, - 0x08,0x78,0x84,0x04,0x04,0x04,0xf8,0x80, - 0x80,0x80,0xfc,0x78,0x84,0x84,0x84,0x84, - 0xf8,0x80,0x80,0x84,0x78,0x20,0x20,0x20, - 0x10,0x10,0x08,0x08,0x04,0x04,0xfc,0x78, - 0x84,0x84,0x84,0x84,0x78,0x84,0x84,0x84, - 0x78,0x78,0x84,0x04,0x04,0x7c,0x84,0x84, - 0x84,0x84,0x78,0xc0,0xc0,0x00,0x00,0x00, - 0xc0,0xc0,0x80,0x40,0xc0,0xc0,0x00,0x00, - 0x00,0xc0,0xc0,0x04,0x08,0x10,0x20,0x40, - 0x80,0x40,0x20,0x10,0x08,0x04,0xfc,0x00, - 0x00,0xfc,0x80,0x40,0x20,0x10,0x08,0x04, - 0x08,0x10,0x20,0x40,0x80,0x10,0x10,0x00, - 0x10,0x10,0x08,0x04,0x84,0x84,0x78,0x38, - 0x44,0x80,0x98,0xa4,0xa4,0x9c,0x84,0x48, - 0x30,0x84,0x84,0xfc,0x84,0x48,0x48,0x48, - 0x30,0x30,0x30,0xf8,0x84,0x84,0x84,0x84, - 0xf8,0x84,0x84,0x84,0xf8,0x78,0x84,0x84, - 0x80,0x80,0x80,0x80,0x84,0x84,0x78,0xf0, - 0x88,0x84,0x84,0x84,0x84,0x84,0x84,0x88, - 0xf0,0xfc,0x80,0x80,0x80,0x80,0xf8,0x80, - 0x80,0x80,0xfc,0x80,0x80,0x80,0x80,0x80, - 0xf8,0x80,0x80,0x80,0xfc,0x74,0x8c,0x84, - 0x84,0x84,0x9c,0x80,0x80,0x84,0x78,0x84, - 0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84, - 0x84,0xe0,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0x40,0xe0,0x70,0x88,0x88,0x08,0x08, - 0x08,0x08,0x08,0x08,0x08,0x84,0x84,0x88, - 0x90,0xa0,0xc0,0xa0,0x90,0x88,0x84,0xfc, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x82,0x82,0x92,0x92,0xaa,0xaa,0xc6, - 0xc6,0x82,0x82,0x84,0x8c,0x8c,0x94,0x94, - 0xa4,0xa4,0xc4,0xc4,0x84,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x80, - 0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0x84, - 0xf8,0x04,0x08,0x10,0x78,0xa4,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x78,0x84,0x84, - 0x88,0x90,0xf8,0x84,0x84,0x84,0x84,0xf8, - 0x78,0x84,0x84,0x04,0x18,0x60,0x80,0x84, - 0x84,0x78,0x10,0x10,0x10,0x10,0x10,0x10, - 0x10,0x10,0x10,0xfe,0x78,0x84,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x30,0x30, - 0x30,0x48,0x48,0x48,0x84,0x84,0x84,0x84, - 0x44,0x44,0x44,0xaa,0xaa,0xaa,0x92,0x92, - 0x92,0x82,0x84,0x84,0x48,0x48,0x30,0x30, - 0x48,0x48,0x84,0x84,0x10,0x10,0x10,0x10, - 0x10,0x28,0x44,0x44,0x82,0x82,0xfc,0x80, - 0x40,0x40,0x20,0x10,0x08,0x08,0x04,0xfc, - 0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0xf0,0x04,0x04,0x08, - 0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80, - 0x80,0xf0,0x10,0x10,0x10,0x10,0x10,0x10, - 0x10,0x10,0x10,0x10,0x10,0xf0,0x88,0x50, - 0x20,0xff,0x20,0x40,0xc0,0xc0,0x74,0x88, - 0x88,0x78,0x08,0x88,0x70,0xb8,0xc4,0x84, - 0x84,0x84,0xc4,0xb8,0x80,0x80,0x80,0x78, - 0x84,0x80,0x80,0x80,0x84,0x78,0x74,0x8c, - 0x84,0x84,0x84,0x8c,0x74,0x04,0x04,0x04, - 0x78,0x84,0x80,0xfc,0x84,0x84,0x78,0x20, - 0x20,0x20,0x20,0x20,0x20,0xf8,0x20,0x20, - 0x1c,0x78,0x84,0x04,0x04,0x74,0x8c,0x84, - 0x84,0x84,0x8c,0x74,0x84,0x84,0x84,0x84, - 0x84,0xc4,0xb8,0x80,0x80,0x80,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0x00,0x20,0x20, - 0x70,0x88,0x08,0x08,0x08,0x08,0x08,0x08, - 0x08,0x08,0x38,0x00,0x08,0x08,0x84,0x88, - 0x90,0xe0,0xa0,0x90,0x88,0x80,0x80,0x80, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0xe0,0x92,0x92,0x92,0x92,0x92,0x92, - 0xec,0x84,0x84,0x84,0x84,0x84,0xc4,0xb8, - 0x78,0x84,0x84,0x84,0x84,0x84,0x78,0x80, - 0x80,0x80,0x80,0xb8,0xc4,0x84,0x84,0x84, - 0xc4,0xb8,0x04,0x04,0x04,0x04,0x74,0x8c, - 0x84,0x84,0x84,0x8c,0x74,0x80,0x80,0x80, - 0x80,0x80,0xc4,0xb8,0x78,0x84,0x04,0x78, - 0x80,0x84,0x78,0x1c,0x20,0x20,0x20,0x20, - 0x20,0xf8,0x20,0x20,0x74,0x8c,0x84,0x84, - 0x84,0x84,0x84,0x30,0x30,0x48,0x48,0x84, - 0x84,0x84,0x6c,0x92,0x92,0x92,0x92,0x82, - 0x82,0x84,0x84,0x48,0x30,0x48,0x84,0x84, - 0x78,0x84,0x04,0x04,0x74,0x8c,0x84,0x84, - 0x84,0x84,0x84,0xfc,0x80,0x40,0x20,0x10, - 0x08,0xfc,0x1c,0x20,0x20,0x20,0x20,0x20, - 0xc0,0x20,0x20,0x20,0x20,0x20,0x1c,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0xe0,0x10,0x10, - 0x10,0x10,0x10,0x0c,0x10,0x10,0x10,0x10, - 0x10,0xe0,0x98,0xb4,0x64,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x20, - 0x20,0x70,0x88,0x80,0x80,0x88,0x70,0x20, - 0x20,0xb8,0x44,0x40,0x40,0xf0,0x40,0x40, - 0x40,0x48,0x30,0x84,0x78,0x84,0x84,0x84, - 0x78,0x84,0x38,0x10,0x7c,0x10,0x7c,0x28, - 0x44,0x44,0x82,0x82,0x80,0x80,0x80,0x80, - 0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80, - 0x80,0x80,0x78,0x84,0x04,0x18,0x24,0x44, - 0x84,0x88,0x90,0x60,0x80,0x84,0x78,0xd8, - 0x38,0x44,0x92,0xaa,0xa2,0xaa,0x92,0x44, - 0x38,0xf8,0x00,0x68,0x90,0x70,0x10,0x60, - 0x09,0x12,0x24,0x48,0x90,0x48,0x24,0x12, - 0x09,0x04,0x04,0xfc,0xfc,0x38,0x44,0xaa, - 0xaa,0xb2,0xaa,0xb2,0x44,0x38,0xf0,0x60, - 0x90,0x90,0x60,0xfe,0x00,0x10,0x10,0x10, - 0xfe,0x10,0x10,0x10,0xf0,0x40,0x20,0x90, - 0x60,0xe0,0x10,0x60,0x10,0xe0,0x80,0x40, - 0x80,0x80,0x80,0xb4,0xc8,0x88,0x88,0x88, - 0x88,0x88,0x24,0x24,0x24,0x24,0x24,0x24, - 0x64,0xa4,0xa4,0xa4,0xa4,0x7e,0xc0,0xc0, - 0x20,0x40,0xe0,0x40,0x40,0xc0,0x40,0xf8, - 0x00,0x70,0x88,0x88,0x88,0x70,0x90,0x48, - 0x24,0x12,0x09,0x12,0x24,0x48,0x90,0x04, - 0x9e,0x54,0x2c,0x14,0xe8,0x44,0x42,0xc0, - 0x40,0x1e,0x08,0x84,0x52,0x2c,0x10,0xe8, - 0x44,0x42,0xc0,0x40,0x04,0x9e,0x54,0x2c, - 0xd4,0x28,0x44,0x22,0xc0,0x78,0x84,0x84, - 0x80,0x40,0x20,0x20,0x00,0x20,0x20,0x84, - 0x84,0xfc,0x84,0x48,0x48,0x30,0x30,0x00, - 0x20,0x40,0x84,0x84,0xfc,0x84,0x48,0x48, - 0x30,0x30,0x00,0x10,0x08,0x84,0x84,0xfc, - 0x84,0x48,0x48,0x30,0x30,0x00,0x48,0x30, - 0x84,0x84,0xfc,0x84,0x48,0x48,0x30,0x30, - 0x00,0x98,0x64,0x84,0x84,0xfc,0x84,0x48, - 0x48,0x30,0x30,0x00,0x6c,0x84,0x84,0xfc, - 0x84,0x48,0x48,0x30,0x30,0x30,0x48,0x30, - 0x9e,0x90,0x90,0xf0,0x90,0x5c,0x50,0x50, - 0x30,0x1e,0x30,0x08,0x10,0x78,0x84,0x84, - 0x80,0x80,0x80,0x80,0x84,0x84,0x78,0xfc, - 0x80,0x80,0x80,0xf8,0x80,0x80,0xfc,0x00, - 0x20,0x40,0xfc,0x80,0x80,0x80,0xf8,0x80, - 0x80,0xfc,0x00,0x10,0x08,0xfc,0x80,0x80, - 0x80,0xf8,0x80,0x80,0xfc,0x00,0x48,0x30, - 0xfc,0x80,0x80,0x80,0xf8,0x80,0x80,0xfc, - 0x00,0x6c,0xe0,0x40,0x40,0x40,0x40,0x40, - 0x40,0xe0,0x00,0x40,0x80,0xe0,0x40,0x40, - 0x40,0x40,0x40,0x40,0xe0,0x00,0x40,0x20, - 0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x00,0x90,0x60,0x70,0x20,0x20,0x20,0x20, - 0x20,0x20,0x70,0x00,0xd8,0x78,0x44,0x42, - 0x42,0x42,0xf2,0x42,0x42,0x44,0x78,0x84, - 0x8c,0x94,0x94,0xa4,0xa4,0xc4,0x84,0x00, - 0x98,0x64,0x78,0x84,0x84,0x84,0x84,0x84, - 0x84,0x78,0x00,0x20,0x40,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x78,0x00,0x10,0x08, - 0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78, - 0x00,0x48,0x30,0x78,0x84,0x84,0x84,0x84, - 0x84,0x84,0x78,0x00,0x98,0x64,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x6c, - 0x84,0x48,0x30,0x30,0x48,0x84,0xbc,0x42, - 0x62,0x52,0x52,0x4a,0x4a,0x46,0x42,0x3d, - 0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84, - 0x00,0x20,0x40,0x78,0x84,0x84,0x84,0x84, - 0x84,0x84,0x84,0x00,0x10,0x08,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x48, - 0x30,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x00,0x6c,0x10,0x10,0x10,0x10,0x28, - 0x44,0x44,0x82,0x00,0x10,0x08,0xe0,0x40, - 0x7c,0x42,0x42,0x42,0x42,0x7c,0x40,0xe0, - 0x98,0xa4,0x84,0x84,0x84,0x88,0xb0,0x88, - 0x88,0x70,0x74,0x88,0x88,0x78,0x08,0x88, - 0x70,0x00,0x20,0x40,0x74,0x88,0x88,0x78, - 0x08,0x88,0x70,0x00,0x20,0x10,0x74,0x88, - 0x88,0x78,0x08,0x88,0x70,0x00,0x48,0x30, - 0x74,0x88,0x88,0x78,0x08,0x88,0x70,0x00, - 0x98,0x64,0x74,0x88,0x88,0x78,0x08,0x88, - 0x70,0x00,0xd8,0x74,0x88,0x88,0x78,0x08, - 0x88,0x70,0x00,0x30,0x48,0x30,0x6c,0x92, - 0x90,0x7e,0x12,0x92,0x6c,0x30,0x08,0x10, - 0x78,0x84,0x80,0x80,0x80,0x84,0x78,0x78, - 0x84,0x80,0xfc,0x84,0x84,0x78,0x00,0x20, - 0x40,0x78,0x84,0x80,0xfc,0x84,0x84,0x78, - 0x00,0x10,0x08,0x78,0x84,0x80,0xfc,0x84, - 0x84,0x78,0x00,0x48,0x30,0x78,0x84,0x80, - 0xfc,0x84,0x84,0x78,0x00,0x6c,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0x00,0x40,0x80, - 0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x00, - 0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0xe0,0x00,0x90,0x60,0x10,0x10,0x10,0x10, - 0x10,0x10,0x70,0x00,0xd8,0x78,0x84,0x84, - 0x84,0x84,0x84,0x7c,0x04,0xc8,0x30,0xc8, - 0x84,0x84,0x84,0x84,0x84,0xc4,0xb8,0x00, - 0x98,0x64,0x78,0x84,0x84,0x84,0x84,0x84, - 0x78,0x00,0x20,0x40,0x78,0x84,0x84,0x84, - 0x84,0x84,0x78,0x00,0x10,0x08,0x78,0x84, - 0x84,0x84,0x84,0x84,0x78,0x00,0x48,0x30, - 0x78,0x84,0x84,0x84,0x84,0x84,0x78,0x00, - 0x98,0x64,0x78,0x84,0x84,0x84,0x84,0x84, - 0x78,0x00,0x00,0x6c,0x30,0x00,0x00,0xfc, - 0x00,0x00,0x30,0xbc,0x62,0x52,0x4a,0x46, - 0x42,0x3d,0x74,0x8c,0x84,0x84,0x84,0x84, - 0x84,0x00,0x20,0x40,0x74,0x8c,0x84,0x84, - 0x84,0x84,0x84,0x00,0x20,0x10,0x74,0x8c, - 0x84,0x84,0x84,0x84,0x84,0x00,0x48,0x30, - 0x74,0x8c,0x84,0x84,0x84,0x84,0x84,0x00, - 0x00,0x6c,0x78,0x84,0x04,0x04,0x74,0x8c, - 0x84,0x84,0x84,0x84,0x84,0x00,0x20,0x10, - 0xe0,0x40,0x40,0x5c,0x62,0x42,0x42,0x42, - 0x62,0x5c,0x40,0x40,0xc0,0x78,0x84,0x04, - 0x04,0x74,0x8c,0x84,0x84,0x84,0x84,0x84, - 0x00,0x00,0x6c, -}; - -BMF_FontData BMF_font_scr15 = { - 0, -4, - 8, 11, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 20, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 8, -1}, - {1, 10, -3, 0, 8, 0}, - {4, 4, -2, -6, 8, 10}, - {8, 10, 0, 0, 8, 14}, - {5, 12, -1, 1, 8, 24}, - {7, 10, 0, 0, 8, 36}, - {7, 10, 0, 0, 8, 46}, - {3, 4, -2, -6, 8, 56}, - {4, 13, -2, 2, 8, 60}, - {4, 13, -2, 2, 8, 73}, - {5, 6, -1, -2, 8, 86}, - {7, 7, 0, -1, 8, 92}, - {3, 5, -2, 3, 8, 99}, - {6, 1, -1, -4, 8, 104}, - {2, 2, -3, 0, 8, 105}, - {6, 12, -1, 1, 8, 107}, - {6, 10, -1, 0, 8, 119}, - {3, 10, -3, 0, 8, 129}, - {6, 10, -1, 0, 8, 139}, - {6, 10, -1, 0, 8, 149}, - {6, 10, -1, 0, 8, 159}, - {6, 10, -1, 0, 8, 169}, - {6, 10, -1, 0, 8, 179}, - {6, 10, -1, 0, 8, 189}, - {6, 10, -1, 0, 8, 199}, - {6, 10, -1, 0, 8, 209}, - {2, 7, -3, 0, 8, 219}, - {2, 9, -3, 2, 8, 226}, - {6, 11, -1, 1, 8, 235}, - {6, 4, -1, -3, 8, 246}, - {6, 11, -1, 1, 8, 250}, - {6, 10, -1, 0, 8, 261}, - {6, 10, -1, 0, 8, 271}, - {6, 10, -1, 0, 8, 281}, - {6, 10, -1, 0, 8, 291}, - {6, 10, -1, 0, 8, 301}, - {6, 10, -1, 0, 8, 311}, - {6, 10, -1, 0, 8, 321}, - {6, 10, -1, 0, 8, 331}, - {6, 10, -1, 0, 8, 341}, - {6, 10, -1, 0, 8, 351}, - {3, 10, -2, 0, 8, 361}, - {5, 10, -1, 0, 8, 371}, - {6, 10, -1, 0, 8, 381}, - {6, 10, -1, 0, 8, 391}, - {7, 10, 0, 0, 8, 401}, - {6, 10, -1, 0, 8, 411}, - {6, 10, -1, 0, 8, 421}, - {6, 10, -1, 0, 8, 431}, - {6, 13, -1, 3, 8, 441}, - {6, 10, -1, 0, 8, 454}, - {6, 10, -1, 0, 8, 464}, - {7, 10, 0, 0, 8, 474}, - {6, 10, -1, 0, 8, 484}, - {6, 10, -1, 0, 8, 494}, - {7, 10, 0, 0, 8, 504}, - {6, 10, -1, 0, 8, 514}, - {7, 10, 0, 0, 8, 524}, - {6, 10, -1, 0, 8, 534}, - {4, 13, -2, 2, 8, 544}, - {6, 12, -1, 1, 8, 557}, - {4, 13, -2, 2, 8, 569}, - {5, 3, -1, -6, 8, 582}, - {8, 1, 0, 3, 8, 585}, - {3, 4, -2, -6, 8, 586}, - {6, 7, -1, 0, 8, 590}, - {6, 10, -1, 0, 8, 597}, - {6, 7, -1, 0, 8, 607}, - {6, 10, -1, 0, 8, 614}, - {6, 7, -1, 0, 8, 624}, - {6, 10, -1, 0, 8, 631}, - {6, 11, -1, 4, 8, 641}, - {6, 10, -1, 0, 8, 652}, - {3, 10, -2, 0, 8, 662}, - {5, 14, -1, 4, 8, 672}, - {6, 10, -1, 0, 8, 686}, - {3, 10, -2, 0, 8, 696}, - {7, 7, 0, 0, 8, 706}, - {6, 7, -1, 0, 8, 713}, - {6, 7, -1, 0, 8, 720}, - {6, 11, -1, 4, 8, 727}, - {6, 11, -1, 4, 8, 738}, - {6, 7, -1, 0, 8, 749}, - {6, 7, -1, 0, 8, 756}, - {6, 9, -1, 0, 8, 763}, - {6, 7, -1, 0, 8, 772}, - {6, 7, -1, 0, 8, 779}, - {7, 7, 0, 0, 8, 786}, - {6, 7, -1, 0, 8, 793}, - {6, 11, -1, 4, 8, 800}, - {6, 7, -1, 0, 8, 811}, - {6, 13, -1, 2, 8, 818}, - {1, 14, -3, 3, 8, 831}, - {6, 13, -1, 2, 8, 845}, - {6, 3, -1, -3, 8, 858}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 8, -1}, - {1, 10, -3, 3, 8, 861}, - {5, 10, -1, 0, 8, 871}, - {6, 10, -1, 0, 8, 881}, - {6, 7, -1, -2, 8, 891}, - {7, 10, 0, 0, 8, 898}, - {1, 14, -3, 3, 8, 908}, - {6, 13, -1, 3, 8, 922}, - {5, 1, -1, -9, 8, 935}, - {7, 9, 0, 0, 8, 936}, - {5, 7, -1, -3, 8, 945}, - {8, 9, 0, 0, 8, 952}, - {6, 3, -1, -3, 8, 961}, - {6, 1, -1, -4, 8, 964}, - {7, 9, 0, 0, 8, 965}, - {4, 1, -2, -9, 8, 974}, - {4, 4, -2, -4, 8, 975}, - {7, 9, 0, 0, 8, 979}, - {4, 5, -2, -5, 8, 988}, - {4, 5, -2, -5, 8, 993}, - {2, 2, -3, -9, 8, 998}, - {6, 10, -1, 3, 8, 1000}, - {7, 12, 0, 2, 8, 1010}, - {2, 1, -3, -4, 8, 1022}, - {3, 3, -3, 3, 8, 1023}, - {3, 5, -3, -5, 8, 1026}, - {5, 7, -1, -3, 8, 1031}, - {8, 9, 0, 0, 8, 1038}, - {7, 10, 0, 0, 8, 1047}, - {7, 11, 0, 1, 8, 1057}, - {7, 9, 0, -1, 8, 1068}, - {6, 10, -1, 2, 8, 1077}, - {6, 11, -1, 0, 8, 1087}, - {6, 11, -1, 0, 8, 1098}, - {6, 11, -1, 0, 8, 1109}, - {6, 11, -1, 0, 8, 1120}, - {6, 10, -1, 0, 8, 1131}, - {6, 11, -1, 0, 8, 1141}, - {7, 10, 0, 0, 8, 1152}, - {6, 13, -1, 3, 8, 1162}, - {6, 11, -1, 0, 8, 1175}, - {6, 11, -1, 0, 8, 1186}, - {6, 11, -1, 0, 8, 1197}, - {6, 10, -1, 0, 8, 1208}, - {3, 11, -2, 0, 8, 1218}, - {3, 11, -2, 0, 8, 1229}, - {4, 11, -2, 0, 8, 1240}, - {5, 10, -1, 0, 8, 1251}, - {7, 10, 0, 0, 8, 1261}, - {6, 11, -1, 0, 8, 1271}, - {6, 11, -1, 0, 8, 1282}, - {6, 11, -1, 0, 8, 1293}, - {6, 11, -1, 0, 8, 1304}, - {6, 11, -1, 0, 8, 1315}, - {6, 10, -1, 0, 8, 1326}, - {6, 6, -1, -1, 8, 1336}, - {8, 10, 0, 0, 8, 1342}, - {6, 11, -1, 0, 8, 1352}, - {6, 11, -1, 0, 8, 1363}, - {6, 11, -1, 0, 8, 1374}, - {6, 10, -1, 0, 8, 1385}, - {7, 11, 0, 0, 8, 1395}, - {7, 10, 0, 0, 8, 1406}, - {6, 10, -1, 0, 8, 1416}, - {6, 10, -1, 0, 8, 1426}, - {6, 10, -1, 0, 8, 1436}, - {6, 10, -1, 0, 8, 1446}, - {6, 10, -1, 0, 8, 1456}, - {6, 9, -1, 0, 8, 1466}, - {6, 11, -1, 0, 8, 1475}, - {7, 7, 0, 0, 8, 1486}, - {6, 10, -1, 3, 8, 1493}, - {6, 10, -1, 0, 8, 1503}, - {6, 10, -1, 0, 8, 1513}, - {6, 10, -1, 0, 8, 1523}, - {6, 9, -1, 0, 8, 1533}, - {3, 10, -2, 0, 8, 1542}, - {3, 10, -2, 0, 8, 1552}, - {4, 10, -2, 0, 8, 1562}, - {5, 9, -1, 0, 8, 1572}, - {6, 11, -1, 0, 8, 1581}, - {6, 10, -1, 0, 8, 1592}, - {6, 10, -1, 0, 8, 1602}, - {6, 10, -1, 0, 8, 1612}, - {6, 10, -1, 0, 8, 1622}, - {6, 10, -1, 0, 8, 1632}, - {6, 10, -1, 0, 8, 1642}, - {6, 7, -1, 0, 8, 1652}, - {8, 7, 0, 0, 8, 1659}, - {6, 10, -1, 0, 8, 1666}, - {6, 10, -1, 0, 8, 1676}, - {6, 10, -1, 0, 8, 1686}, - {6, 10, -1, 0, 8, 1696}, - {6, 14, -1, 4, 8, 1706}, - {7, 13, 0, 3, 8, 1720}, - {6, 14, -1, 4, 8, 1733}, - }, - bitmap_data -}; - -#endif - diff --git a/intern/bmfont/intern/Makefile b/intern/bmfont/intern/Makefile deleted file mode 100644 index f420cfcf1e6..00000000000 --- a/intern/bmfont/intern/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -# -# $Id$ -# -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): none yet. -# -# ***** END GPL LICENSE BLOCK ***** -# bmfont intern Makefile -# - -LIBNAME = bmfont -DIR = $(OCGDIR)/intern/$(LIBNAME) - -include nan_compile.mk - -CCFLAGS += $(LEVEL_2_CPP_WARNINGS) - -CPPFLAGS += -I. -CPPFLAGS += -I.. -CPPFLAGS += -I$(OPENGL_HEADERS) - diff --git a/intern/bmfont/make/msvc_6_0/bmfont.dsp b/intern/bmfont/make/msvc_6_0/bmfont.dsp deleted file mode 100644 index b7ff7774fa1..00000000000 --- a/intern/bmfont/make/msvc_6_0/bmfont.dsp +++ /dev/null @@ -1,176 +0,0 @@ -# Microsoft Developer Studio Project File - Name="bmfont" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Static Library" 0x0104 - -CFG=bmfont - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "bmfont.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "bmfont.mak" CFG="bmfont - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "bmfont - Win32 Release" (based on "Win32 (x86) Static Library") -!MESSAGE "bmfont - Win32 Debug" (based on "Win32 (x86) Static Library") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "bmfont - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "..\..\..\..\obj\windows\intern\bmfont" -# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\bmfont" -# PROP Target_Dir "" -LINK32=link.exe -lib -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD CPP /nologo /MT /W3 /GX /O2 /I "../.." /I "../../intern" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\bmfont\libbmfont.lib" -# Begin Special Build Tool -SOURCE="$(InputPath)" -PostBuild_Desc=Copying BMFONT files library (release target) to lib tree. -PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\bmfont\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\bmfont\*.lib ..\..\..\..\..\lib\windows\bmfont\lib\*.a ECHO Done -# End Special Build Tool - -!ELSEIF "$(CFG)" == "bmfont - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "..\..\..\..\obj\windows\intern\bmfont\debug" -# PROP Intermediate_Dir "..\..\..\..\obj\windows\intern\bmfont\debug" -# PROP Target_Dir "" -LINK32=link.exe -lib -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../.." /I "../../intern" /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LIB32=link.exe -lib -# ADD BASE LIB32 /nologo -# ADD LIB32 /nologo /out:"..\..\..\..\obj\windows\intern\bmfont\debug\libbmfont.lib" -# Begin Special Build Tool -SOURCE="$(InputPath)" -PostBuild_Desc=Copying BMFONT files library (debug target) to lib tree. -PostBuild_Cmds=ECHO Copying header files XCOPY /Y ..\..\*.h ..\..\..\..\..\lib\windows\bmfont\include\ ECHO Copying lib XCOPY /Y ..\..\..\..\obj\windows\intern\bmfont\debug\*.lib ..\..\..\..\..\lib\windows\bmfont\lib\debug\*.a ECHO Done -# End Special Build Tool - -!ENDIF - -# Begin Target - -# Name "bmfont - Win32 Release" -# Name "bmfont - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\..\intern\BMF_Api.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_BitmapFont.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_font_helv10.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_font_helv12.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_font_helvb10.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_font_helvb12.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_font_helvb14.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_font_helvb8.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_font_scr12.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_font_scr14.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_font_scr15.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# Begin Group "intern" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\intern\BMF_BitmapFont.h -# End Source File -# Begin Source File - -SOURCE=..\..\intern\BMF_FontData.h -# End Source File -# End Group -# Begin Group "extern" - -# PROP Default_Filter "" -# Begin Source File - -SOURCE=..\..\BMF_Api.h -# End Source File -# Begin Source File - -SOURCE=..\..\BMF_Fonts.h -# End Source File -# Begin Source File - -SOURCE=..\..\BMF_Settings.h -# End Source File -# End Group -# End Group -# End Target -# End Project diff --git a/intern/bmfont/make/msvc_6_0/bmfont.dsw b/intern/bmfont/make/msvc_6_0/bmfont.dsw deleted file mode 100644 index 265738bc0fe..00000000000 --- a/intern/bmfont/make/msvc_6_0/bmfont.dsw +++ /dev/null @@ -1,29 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "bmfont"=.\bmfont.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/intern/bmfont/make/msvc_7_0/bmfont.sln b/intern/bmfont/make/msvc_7_0/bmfont.sln deleted file mode 100644 index 7f1979a8273..00000000000 --- a/intern/bmfont/make/msvc_7_0/bmfont.sln +++ /dev/null @@ -1,21 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 7.00 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "bmfont", "bmfont.vcproj", "{8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}" -EndProject -Global - GlobalSection(SolutionConfiguration) = preSolution - ConfigName.0 = Debug - ConfigName.1 = Release - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - EndGlobalSection - GlobalSection(ProjectConfiguration) = postSolution - {8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}.Debug.ActiveCfg = Debug|Win32 - {8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}.Debug.Build.0 = Debug|Win32 - {8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}.Release.ActiveCfg = Release|Win32 - {8CDFE9DC-F28C-4E1F-9389-3066BB0AB09F}.Release.Build.0 = Release|Win32 - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - EndGlobalSection - GlobalSection(ExtensibilityAddIns) = postSolution - EndGlobalSection -EndGlobal diff --git a/intern/bmfont/make/msvc_7_0/bmfont.vcproj b/intern/bmfont/make/msvc_7_0/bmfont.vcproj deleted file mode 100644 index 089130bc5e0..00000000000 --- a/intern/bmfont/make/msvc_7_0/bmfont.vcproj +++ /dev/null @@ -1,314 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/intern/bmfont/make/msvc_9_0/bmfont.vcproj b/intern/bmfont/make/msvc_9_0/bmfont.vcproj deleted file mode 100644 index 91d6e6afc1a..00000000000 --- a/intern/bmfont/make/msvc_9_0/bmfont.vcproj +++ /dev/null @@ -1,413 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/intern/bmfont/test/Makefile b/intern/bmfont/test/Makefile deleted file mode 100644 index 135db74f38b..00000000000 --- a/intern/bmfont/test/Makefile +++ /dev/null @@ -1,60 +0,0 @@ -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): none yet. -# -# ***** END GPL LICENSE BLOCK ***** -# Test the bmfont module -# - -LIBNAME = bmfont -SOURCEDIR = intern/$(LIBNAME)/test -DIR = $(OCGDIR)/$(SOURCEDIR) -DIRS = simpletest - -include nan_subdirs.mk -include nan_compile.mk -include nan_link.mk - -TESTLIBS = $(OCGDIR)/intern/$(LIBNAME)/$(DEBUG_DIR)lib$(LIBNAME).a -TESTLIBS += $(NAN_STRING)/lib/$(DEBUG_DIR)libstring.a -TESTLIBS += $(LCGDIR)/ghost/$(DEBUG_DIR)lib/libghost.a - - -ifeq ($(OS),$(findstring $(OS), "beos darwin linux freebsd openbsd")) - TESTLIBS += -L/usr/X11R6/lib -lglut -pthread -endif - -ifeq ($(OS),$(findstring $(OS), "solaris")) - TESTLIBS += -L/usr/openwin/lib -lglut -lX11 -lGL -lGLU -lXmu -endif - - -all debug:: - @echo "****> linking $@ in $(SOURCEDIR)" - $(CCC) $(LDFLAGS) -o $(DIR)/$(DEBUG_DIR)BMF_Test $(DIR)/BMF_Test.o $(TESTLIBS) - -clean:: - $(RM) $(DIR)/BMF_Test $(DIR)/debug/BMF_Test - -test:: $(DIR)/BMF_Test - $(DIR)/BMF_Test $(NAN_TEST_VERBOSITY) - diff --git a/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsp b/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsp deleted file mode 100644 index d178f5b4dc1..00000000000 --- a/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsp +++ /dev/null @@ -1,109 +0,0 @@ -# Microsoft Developer Studio Project File - Name="BMF_Test" - Package Owner=<4> -# Microsoft Developer Studio Generated Build File, Format Version 6.00 -# ** DO NOT EDIT ** - -# TARGTYPE "Win32 (x86) Console Application" 0x0103 - -CFG=BMF_Test - Win32 Debug -!MESSAGE This is not a valid makefile. To build this project using NMAKE, -!MESSAGE use the Export Makefile command and run -!MESSAGE -!MESSAGE NMAKE /f "BMF_Test.mak". -!MESSAGE -!MESSAGE You can specify a configuration when running NMAKE -!MESSAGE by defining the macro CFG on the command line. For example: -!MESSAGE -!MESSAGE NMAKE /f "BMF_Test.mak" CFG="BMF_Test - Win32 Debug" -!MESSAGE -!MESSAGE Possible choices for configuration are: -!MESSAGE -!MESSAGE "BMF_Test - Win32 Release" (based on "Win32 (x86) Console Application") -!MESSAGE "BMF_Test - Win32 Debug" (based on "Win32 (x86) Console Application") -!MESSAGE - -# Begin Project -# PROP AllowPerConfigDependencies 0 -# PROP Scc_ProjName "" -# PROP Scc_LocalPath "" -CPP=cl.exe -RSC=rc.exe - -!IF "$(CFG)" == "BMF_Test - Win32 Release" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 0 -# PROP BASE Output_Dir "Release" -# PROP BASE Intermediate_Dir "Release" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 0 -# PROP Output_Dir "../../../../../../obj/windows/intern/BMF_bmfont/test" -# PROP Intermediate_Dir "../../../../../../obj/windows/intern/BMF_bmfont/test" -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD CPP /nologo /W3 /GX /O2 /I "../../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/ghost/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c -# ADD BASE RSC /l 0x409 /d "NDEBUG" -# ADD RSC /l 0x409 /d "NDEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 -# ADD LINK32 kernel32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libstring.a libghost.a glu32.lib opengl32.lib user32.lib gdi32.lib /nologo /subsystem:console /machine:I386 /libpath:"../../../../../lib/windows/string/lib" /libpath:"../../../../../lib/windows/ghost/lib" - -!ELSEIF "$(CFG)" == "BMF_Test - Win32 Debug" - -# PROP BASE Use_MFC 0 -# PROP BASE Use_Debug_Libraries 1 -# PROP BASE Output_Dir "Debug" -# PROP BASE Intermediate_Dir "Debug" -# PROP BASE Target_Dir "" -# PROP Use_MFC 0 -# PROP Use_Debug_Libraries 1 -# PROP Output_Dir "../../../../../../obj/windows/intern/BMF_bmfont/test/debug" -# PROP Intermediate_Dir "../../../../../../obj/windows/intern/BMF_bmfont/test/debug" -# PROP Ignore_Export_Lib 0 -# PROP Target_Dir "" -# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../../" /I "../../../../../lib/windows/string/include" /I "../../../../../lib/windows/ghost/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c -# ADD BASE RSC /l 0x409 /d "_DEBUG" -# ADD RSC /l 0x409 /d "_DEBUG" -BSC32=bscmake.exe -# ADD BASE BSC32 /nologo -# ADD BSC32 /nologo -LINK32=link.exe -# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept -# ADD LINK32 glu32.lib opengl32.lib libstring.a libghost.a user32.lib gdi32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept /libpath:"../../../../../lib/windows/string/lib" /libpath:"../../../../../lib/windows/ghost/lib" - -!ENDIF - -# Begin Target - -# Name "BMF_Test - Win32 Release" -# Name "BMF_Test - Win32 Debug" -# Begin Group "Source Files" - -# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" -# Begin Source File - -SOURCE=..\..\..\intern\BMF_glut_helb8.c -# End Source File -# Begin Source File - -SOURCE=..\..\..\intern\BMF_glut_helb8.cpp -# End Source File -# Begin Source File - -SOURCE=..\..\BMF_Test.cpp -# End Source File -# End Group -# Begin Group "Header Files" - -# PROP Default_Filter "h;hpp;hxx;hm;inl" -# End Group -# Begin Group "Resource Files" - -# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" -# End Group -# End Target -# End Project diff --git a/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsw b/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsw deleted file mode 100644 index 321de497224..00000000000 --- a/intern/bmfont/test/make/msvc_6_0/BMF_Test.dsw +++ /dev/null @@ -1,44 +0,0 @@ -Microsoft Developer Studio Workspace File, Format Version 6.00 -# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! - -############################################################################### - -Project: "BMF_Test"=.\BMF_Test.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ - Begin Project Dependency - Project_Dep_Name BMF_bmfont - End Project Dependency -}}} - -############################################################################### - -Project: "BMF_bmfont"=..\..\..\make\msvc_6_0\BMF_bmfont.dsp - Package Owner=<4> - -Package=<5> -{{{ -}}} - -Package=<4> -{{{ -}}} - -############################################################################### - -Global: - -Package=<5> -{{{ -}}} - -Package=<3> -{{{ -}}} - -############################################################################### - diff --git a/intern/bmfont/test/simpletest/BMF_Test.cpp b/intern/bmfont/test/simpletest/BMF_Test.cpp deleted file mode 100644 index 93a55042a4f..00000000000 --- a/intern/bmfont/test/simpletest/BMF_Test.cpp +++ /dev/null @@ -1,226 +0,0 @@ -/** - * $Id$ - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. - * All rights reserved. - * - * The Original Code is: all of this file. - * - * Contributor(s): none yet. - * - * ***** END GPL LICENSE BLOCK ***** - */ - -/** - - * $Id$ - * Copyright (C) 2001 NaN Technologies B.V. - * Simple test file for the bitmap font library using GHOST. - * @author Maarten Gribnau - * @date November 15, 2001 - */ - -#include - -#ifdef HAVE_CONFIG_H -#include -#endif - -#define FALSE 0 -#define TRUE 1 - -#if defined(WIN32) || defined(__APPLE__) -#ifdef WIN32 -#include -#include -#else // WIN32 -// __APPLE__ is defined -#include -#endif // WIN32 -#else // defined(WIN32) || defined(__APPLE__) -#include -#endif // defined(WIN32) || defined(__APPLE__) - - -#include "STR_String.h" -#include "GHOST_Rect.h" - -#include "GHOST_ISystem.h" -#include "GHOST_IEvent.h" -#include "GHOST_IEventConsumer.h" - -#include "BMF_Api.h" - -static class Application* fApp; -static GHOST_ISystem* fSystem = 0; - - -static void drawGL() -{ - GLint x = 10, y = 10; - - ::glRasterPos2i(x, y); - BMF_Font *font = BMF_GetFont(BMF_kHelvetica10); - BMF_DrawString(font, "Helvetica 10 point"); - y += 14; - ::glRasterPos2i(x, y); - font = BMF_GetFont(BMF_kHelvetica12); - BMF_DrawString(font, "Helvetica 12 point"); - y += 16; - ::glRasterPos2i(x, y); - font = BMF_GetFont(BMF_kHelveticaBold8); - BMF_DrawString(font, "Helvetica Bold 8 point"); - y += 12; - ::glRasterPos2i(x, y); - font = BMF_GetFont(BMF_kHelveticaBold10); - BMF_DrawString(font, "Helvetica Bold 10 point"); - y += 14; - ::glRasterPos2i(x, y); - font = BMF_GetFont(BMF_kHelveticaBold12); - BMF_DrawString(font, "Helvetica Bold 12 point"); - y += 16; - ::glRasterPos2i(x, y); - font = BMF_GetFont(BMF_kHelveticaBold14); - BMF_DrawString(font, "Helvetica Bold 14 point"); - y += 18; - ::glRasterPos2i(x, y); - font = BMF_GetFont(BMF_kScreen12); - BMF_DrawString(font, "Screen 12 point"); - y += 16; - ::glRasterPos2i(x, y); - font = BMF_GetFont(BMF_kScreen14); - BMF_DrawString(font, "Screen 14 point"); - y += 18; - ::glRasterPos2i(x, y); - font = BMF_GetFont(BMF_kScreen15); - BMF_DrawString(font, "Screen 15 point"); -} - - -static void setViewPortGL(GHOST_IWindow* window) -{ - window->activateDrawingContext(); - GHOST_Rect bnds; - window->getClientBounds(bnds); - - ::glViewport(0, 0, bnds.getWidth(), bnds.getHeight()); - - ::glMatrixMode(GL_PROJECTION); - ::glLoadIdentity(); - ::glOrtho(0, bnds.getWidth(), 0, bnds.getHeight(), -10, 10); - - ::glClearColor(.2f,0.0f,0.0f,0.0f); - ::glClear(GL_COLOR_BUFFER_BIT); -} - - - -class Application : public GHOST_IEventConsumer { -public: - Application(GHOST_ISystem* system); - virtual bool processEvent(GHOST_IEvent* event); - - GHOST_ISystem* m_system; - GHOST_IWindow* m_mainWindow; - bool m_exitRequested; -}; - - -Application::Application(GHOST_ISystem* system) - : m_system(system), m_mainWindow(0), m_exitRequested(false) -{ - fApp = this; - - // Create the main window - STR_String title1 ("gears - main window"); - m_mainWindow = system->createWindow(title1, 10, 64, 320, 200, GHOST_kWindowStateNormal, GHOST_kDrawingContextTypeOpenGL,FALSE); - if (!m_mainWindow) { - std::cout << "could not create main window\n"; - exit(-1); - } -} - - -bool Application::processEvent(GHOST_IEvent* event) -{ - bool handled = true; - - switch (event->getType()) { - case GHOST_kEventWindowClose: - { - GHOST_IWindow* window2 = event->getWindow(); - if (window2 == m_mainWindow) { - exit(0); - } else { - m_system->disposeWindow(window2); - } - } - break; - - case GHOST_kEventWindowActivate: - handled = false; - break; - case GHOST_kEventWindowDeactivate: - handled = false; - break; - case GHOST_kEventWindowUpdate: - { - GHOST_IWindow* window2 = event->getWindow(); - if (!m_system->validWindow(window2)) break; - { - setViewPortGL(window2); - drawGL(); - window2->swapBuffers(); - } - } - break; - - default: - handled = false; - break; - } - return handled; -} - - -int main(int /*argc*/, char** /*argv*/) -{ - // Create the system - GHOST_ISystem::createSystem(); - fSystem = GHOST_ISystem::getSystem(); - - if (fSystem) { - // Create an application object - Application app (fSystem); - - // Add the application as event consumer - fSystem->addEventConsumer(&app); - - // Enter main loop - while (!app.m_exitRequested) { - fSystem->processEvents(TRUE); - fSystem->dispatchEvents(); - } - } - - // Dispose the system - GHOST_ISystem::disposeSystem(); - - return 0; -} - diff --git a/intern/bmfont/test/simpletest/Makefile b/intern/bmfont/test/simpletest/Makefile deleted file mode 100644 index 5c5e32f2ed2..00000000000 --- a/intern/bmfont/test/simpletest/Makefile +++ /dev/null @@ -1,42 +0,0 @@ -# ***** BEGIN GPL LICENSE BLOCK ***** -# -# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. -# All rights reserved. -# -# The Original Code is: all of this file. -# -# Contributor(s): none yet. -# -# ***** END GPL LICENSE BLOCK ***** -# Test the bmfont module -# - -LIBNAME = bmfont -DIR = $(OCGDIR)/intern/$(LIBNAME)/test - -# we don't want a library here, only object files: -ALLTARGETS = $(OBJS) - -include nan_compile.mk - -CCFLAGS += $(LEVEL_2_CPP_WARNINGS) - -CPPFLAGS = -I../.. -CPPFLAGS += -I../../intern -CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_STRING)/include -CPPFLAGS += -I$(NAN_GHOST)/include diff --git a/intern/ghost/test/multitest/Makefile b/intern/ghost/test/multitest/Makefile index e67faf012d2..1ecbcd98e2b 100644 --- a/intern/ghost/test/multitest/Makefile +++ b/intern/ghost/test/multitest/Makefile @@ -41,7 +41,6 @@ CCFLAGS += $(LEVEL_1_CPP_WARNINGS) CPPFLAGS += -I$(OPENGL_HEADERS) CPPFLAGS += -I$(NAN_STRING)/include -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I../.. @@ -49,7 +48,6 @@ OCGGHOST = $(OCGDIR)/intern/ghost LIBS = $(OCGGHOST)/$(DEBUG_DIR)libghost.a SLIBS += $(LCGDIR)/string/lib/libstring.a -SLIBS += $(LCGDIR)/bmfont/lib/libbmfont.a SLIBS += $(LCGDIR)/guardedalloc/lib/libguardedalloc.a all:: diff --git a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj index d072d37a1f1..e66693cc86f 100644 --- a/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj +++ b/projectfiles_vc9/blender/BPY_python/BPY_python.vcproj @@ -346,10 +346,6 @@ RelativePath="..\..\..\source\blender\python\intern\bpy_operator_wrap.c" > - - diff --git a/projectfiles_vc9/blender/blender.sln b/projectfiles_vc9/blender/blender.sln index 3ce6569a929..315adc06723 100644 --- a/projectfiles_vc9/blender/blender.sln +++ b/projectfiles_vc9/blender/blender.sln @@ -3,7 +3,6 @@ Microsoft Visual Studio Solution File, Format Version 10.00 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blender", "blender.vcproj", "{F78B7FC9-DE32-465E-9F26-BB0B6B7A2EAF}" ProjectSection(ProjectDependencies) = postProject {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F} = {E5F2F004-C704-4DCC-A08F-6EB1E38EAB9F} - {F9850C15-FF0A-429E-9D47-89FB433C9BD8} = {F9850C15-FF0A-429E-9D47-89FB433C9BD8} {A90C4918-4B21-4277-93BD-AF65F30951D9} = {A90C4918-4B21-4277-93BD-AF65F30951D9} {FB88301F-F725-401B-ACD7-D2ABBF333B71} = {FB88301F-F725-401B-ACD7-D2ABBF333B71} {98330220-47A6-42E0-9DE4-AD0FF5D204D6} = {98330220-47A6-42E0-9DE4-AD0FF5D204D6} @@ -28,7 +27,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blender", "blender.vcproj", {106AE171-0083-41D6-A949-20DB0E8DC251} = {106AE171-0083-41D6-A949-20DB0E8DC251} {670EC17A-0548-4BBF-A27B-636C7C188139} = {670EC17A-0548-4BBF-A27B-636C7C188139} {4C3AB78A-52CA-4276-A041-39776E52D8C8} = {4C3AB78A-52CA-4276-A041-39776E52D8C8} - {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5} {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} = {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} {76D90B92-ECC7-409C-9F98-A8814B90F3C0} = {76D90B92-ECC7-409C-9F98-A8814B90F3C0} {9C71A793-C177-4CAB-8EC5-923D500B39F8} = {9C71A793-C177-4CAB-8EC5-923D500B39F8} @@ -150,7 +148,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "blenderplayer", "..\gameeng {415BFD6E-64CF-422B-AF88-C07F040A7292} = {415BFD6E-64CF-422B-AF88-C07F040A7292} {670EC17A-0548-4BBF-A27B-636C7C188139} = {670EC17A-0548-4BBF-A27B-636C7C188139} {4C3AB78A-52CA-4276-A041-39776E52D8C8} = {4C3AB78A-52CA-4276-A041-39776E52D8C8} - {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5} {6B801390-5F95-4F07-81A7-97FBA046AACC} = {6B801390-5F95-4F07-81A7-97FBA046AACC} {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} = {CAE37E91-6570-43AC-A4B4-7A37A4B0FC94} {76D90B92-ECC7-409C-9F98-A8814B90F3C0} = {76D90B92-ECC7-409C-9F98-A8814B90F3C0} @@ -243,21 +240,16 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_solid", "..\..\extern\s EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_bullet2", "..\..\extern\bullet2\make\msvc_9_0\Bullet.vcproj", "{FFD3C64A-30E2-4BC7-BC8F-51818C320400}" EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_ftgl_static_lib", "..\..\extern\bFTGL\make\msvc_9_0\ftgl_static_lib.vcproj", "{F9850C15-FF0A-429E-9D47-89FB433C9BD8}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_glew", "..\..\extern\glew\make\msvc_9_0\glew.vcproj", "{BAC615B0-F1AF-418B-8D23-A10FD8870D6A}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_qhull", "..\..\extern\qhull\make\msvc_9_0\qhull.vcproj", "{6461F05D-4698-47AB-A8E8-1CA2ACC9948B}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "EXT_build_install_all", "..\..\extern\make\msvc_9_0\build_install_all.vcproj", "{9C71A793-C177-4CAB-8EC5-923D500B39F8}" ProjectSection(ProjectDependencies) = postProject - {F9850C15-FF0A-429E-9D47-89FB433C9BD8} = {F9850C15-FF0A-429E-9D47-89FB433C9BD8} {FFD3C64A-30E2-4BC7-BC8F-51818C320400} = {FFD3C64A-30E2-4BC7-BC8F-51818C320400} {D696C86B-0B53-4471-A50D-5B983A6FA4AD} = {D696C86B-0B53-4471-A50D-5B983A6FA4AD} EndProjectSection EndProject -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_bmfont", "..\..\intern\bmfont\make\msvc_9_0\bmfont.vcproj", "{E784098D-3ED8-433A-9353-9679415DDDC5}" -EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_boolop", "..\..\intern\boolop\make\msvc_9_0\boolop.vcproj", "{EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}" ProjectSection(ProjectDependencies) = postProject {4B6AFCC5-968C-424A-8F20-76E41B3BEF74} = {4B6AFCC5-968C-424A-8F20-76E41B3BEF74} @@ -310,7 +302,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_build_install_all", ".. {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8} = {C66F722C-46BE-40C9-ABAE-2EAC7A697EB8} {FAF46346-65CC-4DB2-85C4-B99826F79D0C} = {FAF46346-65CC-4DB2-85C4-B99826F79D0C} {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E} = {B093415D-C0F6-4E76-8F5A-6BC1917BCE9E} - {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5} {76D90B92-ECC7-409C-9F98-A8814B90F3C0} = {76D90B92-ECC7-409C-9F98-A8814B90F3C0} {542A9FA1-B7FF-441C-AE15-054DB31D3488} = {542A9FA1-B7FF-441C-AE15-054DB31D3488} {213356A9-3A1F-41DA-9819-1297BCD17DEE} = {213356A9-3A1F-41DA-9819-1297BCD17DEE} @@ -325,7 +316,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "INT_build_install_all", ".. EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WM_windowmanager", "windowmanager\windowmanager.vcproj", "{884D8731-654C-4C7F-9A75-8F37A305BE1E}" ProjectSection(ProjectDependencies) = postProject - {E784098D-3ED8-433A-9353-9679415DDDC5} = {E784098D-3ED8-433A-9353-9679415DDDC5} {DFE7F3E3-E62A-4677-B666-DF0DDF70C359} = {DFE7F3E3-E62A-4677-B666-DF0DDF70C359} EndProjectSection EndProject @@ -999,20 +989,6 @@ Global {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Debug|Win32.Build.0 = 3D Plugin Debug|Win32 {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Release|Win32.ActiveCfg = 3D Plugin Release|Win32 {FFD3C64A-30E2-4BC7-BC8F-51818C320400}.Release|Win32.Build.0 = 3D Plugin Release|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.3D Plugin Debug|Win32.ActiveCfg = 3D Plugin Debug|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.3D Plugin Debug|Win32.Build.0 = 3D Plugin Debug|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.3D Plugin Release|Win32.ActiveCfg = 3D Plugin Release|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.3D Plugin Release|Win32.Build.0 = 3D Plugin Release|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Debug|Win32.Build.0 = Blender Debug|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Release|Win32.ActiveCfg = Blender Release|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Blender Release|Win32.Build.0 = Blender Release|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Debug|Win32.ActiveCfg = 3D Plugin Debug|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Debug|Win32.Build.0 = 3D Plugin Debug|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Release|Win32.ActiveCfg = 3D Plugin Release|Win32 - {F9850C15-FF0A-429E-9D47-89FB433C9BD8}.Release|Win32.Build.0 = 3D Plugin Release|Win32 {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.3D Plugin Debug|Win32.ActiveCfg = Blender Release|Win32 {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.3D Plugin Debug|Win32.Build.0 = Blender Release|Win32 {BAC615B0-F1AF-418B-8D23-A10FD8870D6A}.3D Plugin Release|Win32.ActiveCfg = Blender Release|Win32 @@ -1057,22 +1033,6 @@ Global {9C71A793-C177-4CAB-8EC5-923D500B39F8}.Debug|Win32.Build.0 = 3D Plugin Debug|Win32 {9C71A793-C177-4CAB-8EC5-923D500B39F8}.Release|Win32.ActiveCfg = 3D Plugin Release|Win32 {9C71A793-C177-4CAB-8EC5-923D500B39F8}.Release|Win32.Build.0 = 3D Plugin Release|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.3D Plugin Debug|Win32.ActiveCfg = 3DPlugin Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.3D Plugin Debug|Win32.Build.0 = 3DPlugin Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.3D Plugin Release|Win32.ActiveCfg = 3DPlugin Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.3D Plugin Release|Win32.Build.0 = 3DPlugin Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Debug|Win32.ActiveCfg = Blender Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Debug|Win32.Build.0 = Blender Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Release|Win32.ActiveCfg = Blender Release|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.Blender Release|Win32.Build.0 = Blender Release|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Debug|Win32.ActiveCfg = Blender Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Debug|Win32.Build.0 = Blender Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Release|Win32.ActiveCfg = Blender Release|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.BlenderPlayer Release|Win32.Build.0 = Blender Release|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.Debug|Win32.ActiveCfg = 3DPlugin Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.Debug|Win32.Build.0 = 3DPlugin Debug|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.Release|Win32.ActiveCfg = 3DPlugin Release|Win32 - {E784098D-3ED8-433A-9353-9679415DDDC5}.Release|Win32.Build.0 = 3DPlugin Release|Win32 {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.3D Plugin Debug|Win32.ActiveCfg = 3DPlugin Debug|Win32 {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.3D Plugin Debug|Win32.Build.0 = 3DPlugin Debug|Win32 {EB75F4D6-2970-4A3A-8D99-2BAD7201C0E9}.3D Plugin Release|Win32.ActiveCfg = 3DPlugin Debug|Win32 diff --git a/projectfiles_vc9/blender/blenfont/BLF_blenfont.vcproj b/projectfiles_vc9/blender/blenfont/BLF_blenfont.vcproj index adf35f3446c..7b92276d4b8 100644 --- a/projectfiles_vc9/blender/blenfont/BLF_blenfont.vcproj +++ b/projectfiles_vc9/blender/blenfont/BLF_blenfont.vcproj @@ -44,7 +44,7 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\intern\guardedalloc;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\blenfont;..\..\..\source\blender\ftfont;..\..\..\..\lib\windows\freetype\include;..\..\..\source\blender\editors\include;..\..\..\..\build\msvc_9\extern\glew\include" - PreprocessorDefinitions="WIN32;NDEBUG;_LIB;WITH_BF_INTERNATIONAL;WITH_FREETYPE2" + PreprocessorDefinitions="WIN32;NDEBUG;_LIB;WITH_BF_INTERNATIONAL" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -120,7 +120,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\intern\guardedalloc;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\blenfont;..\..\..\source\blender\ftfont;..\..\..\..\lib\windows\freetype\include;..\..\..\source\blender\editors\include;..\..\..\..\build\msvc_9\extern\glew\include" - PreprocessorDefinitions="WIN32,_DEBUG,_LIB,WITH_BF_INTERNATIONAL,WITH_FREETYPE2" + PreprocessorDefinitions="WIN32,_DEBUG,_LIB,WITH_BF_INTERNATIONAL" BasicRuntimeChecks="3" RuntimeLibrary="1" UsePrecompiledHeader="0" @@ -189,10 +189,6 @@ RelativePath="..\..\..\source\blender\blenfont\intern\blf_glyph.c" > - - diff --git a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj index 9d011cfbc3a..cc464b9101a 100644 --- a/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj +++ b/projectfiles_vc9/blender/blenkernel/BKE_blenkernel.vcproj @@ -119,7 +119,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu" - PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2;WITH_OPENEXR;WITH_DDS;WITH_BULLET;WITH_FFMPEG" + PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_OPENEXR;WITH_DDS;WITH_BULLET;WITH_FFMPEG" BasicRuntimeChecks="3" RuntimeLibrary="1" DefaultCharIsUnsigned="true" @@ -194,7 +194,7 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu" - PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_FREETYPE2;UNWRAPPER;WITH_OPENEXR;WITH_DDS;WITH_BULLET=1;WITH_FFMPEG" + PreprocessorDefinitions="NDEBUG;WIN32;_LIB;UNWRAPPER;WITH_OPENEXR;WITH_DDS;WITH_BULLET=1;WITH_FFMPEG" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -344,7 +344,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu" - PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2;WITH_FFMPEG" + PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FFMPEG" BasicRuntimeChecks="3" RuntimeLibrary="1" DefaultCharIsUnsigned="true" @@ -419,7 +419,7 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\sdl\include;..\..\..\..\lib\windows\ffmpeg\include;..\..\..\..\build\msvc_9\intern\bmfont\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\makesrna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\intern\opennl\include;..\..\..\..\build\msvc_9\extern\bullet\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu" - PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_FREETYPE2;UNWRAPPER;WITH_FFMPEG" + PreprocessorDefinitions="NDEBUG;WIN32;_LIB;UNWRAPPER;WITH_FFMPEG" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -613,6 +613,10 @@ RelativePath="..\..\..\source\blender\blenkernel\intern\font.c" > + + diff --git a/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj index 502f7cb86b4..e31436b9280 100644 --- a/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj +++ b/projectfiles_vc9/blender/blenlib/BLI_blenlib.vcproj @@ -44,7 +44,7 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel" - PreprocessorDefinitions="NDEBUG,WIN32,_LIB,WITH_FREETYPE2" + PreprocessorDefinitions="NDEBUG,WIN32,_LIB" StringPooling="true" RuntimeLibrary="2" EnableFunctionLevelLinking="true" @@ -120,7 +120,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel" - PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2;_CRT_SECURE_NO_WARNINGS" + PreprocessorDefinitions="_DEBUG;WIN32;_LIB;_CRT_SECURE_NO_WARNINGS" BasicRuntimeChecks="3" RuntimeLibrary="1" DefaultCharIsUnsigned="true" @@ -196,7 +196,7 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel" - PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_FREETYPE2" + PreprocessorDefinitions="NDEBUG;WIN32;_LIB" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" @@ -347,7 +347,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel" - PreprocessorDefinitions="_DEBUG,WIN32,_LIB,WITH_FREETYPE2" + PreprocessorDefinitions="_DEBUG,WIN32,_LIB" BasicRuntimeChecks="3" RuntimeLibrary="1" DefaultCharIsUnsigned="true" @@ -423,7 +423,7 @@ Name="VCCLCompilerTool" InlineFunctionExpansion="1" AdditionalIncludeDirectories="..\..\..\..\lib\windows\zlib\include;..\..\..\..\lib\windows\pthreads\include;..\..\..\..\lib\windows\freetype\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\source\blender\include;..\..\..\source\blender\blenlib;..\..\..\source\blender\python;..\..\..\source\blender\makesdna;..\..\..\source\blender\blenkernel" - PreprocessorDefinitions="NDEBUG,WIN32,_LIB,WITH_FREETYPE2" + PreprocessorDefinitions="NDEBUG,WIN32,_LIB" StringPooling="true" RuntimeLibrary="0" EnableFunctionLevelLinking="true" diff --git a/projectfiles_vc9/blender/editors/ED_editors.vcproj b/projectfiles_vc9/blender/editors/ED_editors.vcproj index be9f7223a12..a7deb22555e 100644 --- a/projectfiles_vc9/blender/editors/ED_editors.vcproj +++ b/projectfiles_vc9/blender/editors/ED_editors.vcproj @@ -482,6 +482,10 @@ RelativePath="..\..\..\source\blender\editors\space_view3d\view3d_snap.c" > + + @@ -714,14 +718,6 @@ RelativePath="..\..\..\source\blender\editors\space_buttons\buttons_intern.h" > - - - - @@ -1034,6 +1030,10 @@ RelativePath="..\..\..\source\blender\editors\object\object_intern.h" > + + @@ -1275,7 +1275,7 @@ > + + diff --git a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj index d0a4e694c12..65aa5e6f3f4 100644 --- a/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj +++ b/projectfiles_vc9/blender/makesrna/RNA_rna.vcproj @@ -214,6 +214,10 @@ RelativePath="..\..\..\source\blender\makesrna\intern\rna.crna_curve_gen.c" > + + diff --git a/projectfiles_vc9/blender/nodes/nodes.vcproj b/projectfiles_vc9/blender/nodes/nodes.vcproj index a289fffb3c2..cbe1954c14e 100644 --- a/projectfiles_vc9/blender/nodes/nodes.vcproj +++ b/projectfiles_vc9/blender/nodes/nodes.vcproj @@ -43,7 +43,7 @@ Name="VCCLCompilerTool" Optimization="0" AdditionalIncludeDirectories="..\..\..\..\lib\windows\python\include\python2.5;..\..\..\..\lib\windows\zlib\include;..\..\..\..\build\msvc_9\intern\bsp\include;..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\build\msvc_9\intern\decimation\include;..\..\..\..\build\msvc_9\intern\elbeem\include;..\..\..\..\build\msvc_9\intern\iksolver\include;..\..\..\source\blender;..\..\..\source\blender\avi;..\..\..\source\blender\imbuf;..\..\..\source\blender\editors\include;..\..\..\source\blender\python;..\..\..\source\blender\blenlib;..\..\..\source\blender\blenkernel;..\..\..\source\blender\makesdna;..\..\..\source\blender\nodes;..\..\..\source\blender\blenloader;..\..\..\source\kernel\gen_system;..\..\..\source\blender\renderconverter;..\..\..\source\blender\render\extern\include;..\..\..\source\gameengine\SoundSystem;..\..\..\..\build\msvc_9\extern\verse\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\blender\gpu" - PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_FREETYPE2" + PreprocessorDefinitions="_DEBUG;WIN32;_LIB" MinimalRebuild="false" BasicRuntimeChecks="3" RuntimeLibrary="1" @@ -113,7 +113,7 @@ #include -#ifdef WITH_FREETYPE2 - #include #include FT_FREETYPE_H #include FT_GLYPH_H -#endif /* WITH_FREETYPE2 */ - #include "MEM_guardedalloc.h" #include "DNA_listBase.h" @@ -75,14 +71,20 @@ int global_font_num= 0; /* Current font. */ int global_font_cur= 0; +/* Default size and dpi, for BLF_draw_default. */ +int global_font_default= -1; +int global_font_points= 11; +int global_font_dpi= 72; -int BLF_init(void) +int BLF_init(int points, int dpi) { int i; for (i= 0; i < BLF_MAX_FONT; i++) global_font[i]= NULL; + global_font_points= points; + global_font_dpi= dpi; return(blf_font_init()); } @@ -93,8 +95,8 @@ void BLF_exit(void) for (i= 0; i < global_font_num; i++) { font= global_font[i]; - if(font && font->free) - (*font->free)(font); + if (font) + blf_font_free(font); } blf_font_exit(); @@ -126,8 +128,6 @@ int BLF_load(char *name) i= blf_search(name); if (i >= 0) { font= global_font[i]; - font->ref++; - printf("Increment reference (%d): %s\n", font->ref, name); return(i); } @@ -142,7 +142,6 @@ int BLF_load(char *name) return(-1); } -#ifdef WITH_FREETYPE2 font= blf_font_new(name, filename); MEM_freeN(filename); @@ -155,9 +154,15 @@ int BLF_load(char *name) i= global_font_num; global_font_num++; return(i); -#endif /* WITH_FREETYPE2 */ +} - return(-1); +void BLF_metrics_attach(unsigned char *mem, int mem_size) +{ + FontBLF *font; + + font= global_font[global_font_cur]; + if (font) + blf_font_attach_from_mem(font, mem, mem_size); } int BLF_load_mem(char *name, unsigned char *mem, int mem_size) @@ -171,8 +176,6 @@ int BLF_load_mem(char *name, unsigned char *mem, int mem_size) i= blf_search(name); if (i >= 0) { font= global_font[i]; - font->ref++; - printf("Increment reference (%d): %s\n", font->ref, name); return(i); } @@ -181,21 +184,15 @@ int BLF_load_mem(char *name, unsigned char *mem, int mem_size) return(-1); } - font= blf_internal_new(name); + if (!mem || !mem_size) { + printf("Can't load font: %s from memory!!\n", name); + return(-1); + } + + font= blf_font_new_from_mem(name, mem, mem_size); if (!font) { -#ifdef WITH_FREETYPE2 - if (!mem || !mem_size) { - printf("Can't load font, %s from memory!!\n", name); - return(-1); - } - - font= blf_font_new_from_mem(name, mem, mem_size); -#endif /* WITH_FREETYPE2 */ - - if (!font) { - printf("Can't load font, %s from memory!!\n", name); - return(-1); - } + printf("Can't load font: %s from memory!!\n", name); + return(-1); } global_font[global_font_num]= font; @@ -276,8 +273,8 @@ void BLF_size(int size, int dpi) FontBLF *font; font= global_font[global_font_cur]; - if (font && font->size_set) - (*font->size_set)(font, size, dpi); + if (font) + blf_font_size(font, size, dpi); } void BLF_blur(int size) @@ -289,6 +286,41 @@ void BLF_blur(int size) font->blur= size; } +void BLF_draw_default(float x, float y, float z, char *str) +{ + FontBLF *font; + int old_font, old_point, old_dpi; + + if (!str) + return; + + if (global_font_default == -1) + global_font_default= blf_search("default"); + + if (global_font_default == -1) { + printf("Warning: Can't found default font!!\n"); + return; + } + + font= global_font[global_font_cur]; + if (font) { + old_font= global_font_cur; + old_point= font->size; + old_dpi= font->dpi; + } + + global_font_cur= global_font_default; + BLF_size(global_font_points, global_font_dpi); + BLF_position(x, y, z); + BLF_draw(str); + + /* restore the old font. */ + if (font) { + global_font_cur= old_font; + BLF_size(old_point, old_dpi); + } +} + void BLF_draw(char *str) { FontBLF *font; @@ -299,7 +331,7 @@ void BLF_draw(char *str) */ font= global_font[global_font_cur]; - if (font && font->draw) { + if (font) { if (font->mode == BLF_MODE_BITMAP) { glPushClientAttrib(GL_CLIENT_PIXEL_STORE_BIT); glPushAttrib(GL_ENABLE_BIT); @@ -308,7 +340,7 @@ void BLF_draw(char *str) glDisable(GL_BLEND); glRasterPos3f(font->pos[0], font->pos[1], font->pos[2]); - (*font->draw)(font, str); + blf_font_draw(font, str); glPopAttrib(); glPopClientAttrib(); @@ -325,7 +357,7 @@ void BLF_draw(char *str) if (font->flags & BLF_ROTATION) glRotatef(font->angle, 0.0f, 0.0f, 1.0f); - (*font->draw)(font, str); + blf_font_draw(font, str); glPopMatrix(); glDisable(GL_BLEND); @@ -339,8 +371,8 @@ void BLF_boundbox(char *str, rctf *box) FontBLF *font; font= global_font[global_font_cur]; - if (font && font->boundbox_get) - (*font->boundbox_get)(font, str, box); + if (font) + blf_font_boundbox(font, str, box); } float BLF_width(char *str) @@ -348,21 +380,87 @@ float BLF_width(char *str) FontBLF *font; font= global_font[global_font_cur]; - if (font && font->width_get) - return((*font->width_get)(font, str)); + if (font) + return(blf_font_width(font, str)); return(0.0f); } +float BLF_width_default(char *str) +{ + FontBLF *font; + float width; + int old_font, old_point, old_dpi; + + if (global_font_default == -1) + global_font_default= blf_search("default"); + + if (global_font_default == -1) { + printf("Error: Can't found default font!!\n"); + return(0.0f); + } + + font= global_font[global_font_cur]; + if (font) { + old_font= global_font_cur; + old_point= font->size; + old_dpi= font->dpi; + } + + global_font_cur= global_font_default; + BLF_size(global_font_points, global_font_dpi); + width= BLF_width(str); + + /* restore the old font. */ + if (font) { + global_font_cur= old_font; + BLF_size(old_point, old_dpi); + } + return(width); +} + float BLF_height(char *str) { FontBLF *font; font= global_font[global_font_cur]; - if (font && font->height_get) - return((*font->height_get)(font, str)); + if (font) + return(blf_font_height(font, str)); return(0.0f); } +float BLF_height_default(char *str) +{ + FontBLF *font; + float height; + int old_font, old_point, old_dpi; + + if (global_font_default == -1) + global_font_default= blf_search("default"); + + if (global_font_default == -1) { + printf("Error: Can't found default font!!\n"); + return(0.0f); + } + + font= global_font[global_font_cur]; + if (font) { + old_font= global_font_cur; + old_point= font->size; + old_dpi= font->dpi; + } + + global_font_cur= global_font_default; + BLF_size(global_font_points, global_font_dpi); + height= BLF_height(str); + + /* restore the old font. */ + if (font) { + global_font_cur= old_font; + BLF_size(old_point, old_dpi); + } + return(height); +} + void BLF_rotation(float angle) { FontBLF *font; diff --git a/source/blender/blenfont/intern/blf_dir.c b/source/blender/blenfont/intern/blf_dir.c index 1216c610515..92dfe8457b0 100644 --- a/source/blender/blenfont/intern/blf_dir.c +++ b/source/blender/blenfont/intern/blf_dir.c @@ -29,15 +29,11 @@ #include #include -#ifdef WITH_FREETYPE2 - #include #include FT_FREETYPE_H #include FT_GLYPH_H -#endif /* WITH_FREETYPE2 */ - #include "MEM_guardedalloc.h" #include "DNA_listBase.h" @@ -177,3 +173,37 @@ int blf_dir_split(const char *str, char *file, int *size) } return(0); } + +/* Some font have additional file with metrics information, + * in general, the extension of the file is: .afm or .pfm + */ +char *blf_dir_metrics_search(char *filename) +{ + char *mfile; + char *s; + + mfile= BLI_strdup(filename); + s= strrchr(mfile, '.'); + if (s) { + if (strlen(s) < 4) { + MEM_freeN(mfile); + return(NULL); + } + s++; + s[0]= 'a'; + s[1]= 'f'; + s[2]= 'm'; + + /* first check .afm */ + if (BLI_exist(s)) + return(s); + + /* and now check .pfm */ + s[0]= 'p'; + + if (BLI_exist(s)) + return(s); + } + MEM_freeN(mfile); + return(NULL); +} diff --git a/source/blender/blenfont/intern/blf_font.c b/source/blender/blenfont/intern/blf_font.c index 9a4c0fdfa30..1a96dbc13bc 100644 --- a/source/blender/blenfont/intern/blf_font.c +++ b/source/blender/blenfont/intern/blf_font.c @@ -30,15 +30,11 @@ #include #include -#ifdef WITH_FREETYPE2 - #include #include FT_FREETYPE_H #include FT_GLYPH_H -#endif /* WITH_FREETYPE2 */ - #include "MEM_guardedalloc.h" #include "DNA_listBase.h" @@ -58,8 +54,6 @@ #include "blf_internal.h" -#ifdef WITH_FREETYPE2 - /* freetype2 handle. */ FT_Library global_ft_lib; @@ -78,7 +72,7 @@ void blf_font_size(FontBLF *font, int size, int dpi) GlyphCacheBLF *gc; FT_Error err; - err= FT_Set_Char_Size((FT_Face)font->engine, 0, (size * 64), dpi, dpi); + err= FT_Set_Char_Size(font->face, 0, (size * 64), dpi, dpi); if (err) { /* FIXME: here we can go through the fixed size and choice a close one */ printf("The current font don't support the size, %d and dpi, %d\n", size, dpi); @@ -105,7 +99,6 @@ void blf_font_draw(FontBLF *font, char *str) unsigned int c; GlyphBLF *g, *g_prev; FT_Vector delta; - FT_Face face; FT_UInt glyph_index, g_prev_index; int pen_x, pen_y; int i, has_kerning; @@ -113,11 +106,10 @@ void blf_font_draw(FontBLF *font, char *str) if (!font->glyph_cache) return; - face= (FT_Face)font->engine; i= 0; pen_x= 0; pen_y= 0; - has_kerning= FT_HAS_KERNING(face); + has_kerning= FT_HAS_KERNING(font->face); g_prev= NULL; g_prev_index= 0; @@ -126,7 +118,7 @@ void blf_font_draw(FontBLF *font, char *str) if (c == 0) break; - glyph_index= FT_Get_Char_Index(face, c); + glyph_index= FT_Get_Char_Index(font->face, c); g= blf_glyph_search(font->glyph_cache, c); if (!g) g= blf_glyph_add(font, glyph_index, c); @@ -150,7 +142,7 @@ void blf_font_draw(FontBLF *font, char *str) delta.x= 0; delta.y= 0; - FT_Get_Kerning(face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta); + FT_Get_Kerning(font->face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta); pen_x += delta.x >> 6; } @@ -169,7 +161,6 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box) GlyphBLF *g, *g_prev; FT_Vector delta; FT_UInt glyph_index, g_prev_index; - FT_Face face; rctf gbox; int pen_x, pen_y; int i, has_kerning; @@ -177,7 +168,6 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box) if (!font->glyph_cache) return; - face= (FT_Face)font->engine; box->xmin= 32000.0f; box->xmax= -32000.0f; box->ymin= 32000.0f; @@ -186,7 +176,7 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box) i= 0; pen_x= 0; pen_y= 0; - has_kerning= FT_HAS_KERNING(face); + has_kerning= FT_HAS_KERNING(font->face); g_prev= NULL; g_prev_index= 0; @@ -195,7 +185,7 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box) if (c == 0) break; - glyph_index= FT_Get_Char_Index(face, c); + glyph_index= FT_Get_Char_Index(font->face, c); g= blf_glyph_search(font->glyph_cache, c); if (!g) g= blf_glyph_add(font, glyph_index, c); @@ -219,7 +209,7 @@ void blf_font_boundbox(FontBLF *font, char *str, rctf *box) delta.x= 0; delta.y= 0; - FT_Get_Kerning(face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta); + FT_Get_Kerning(font->face, g_prev_index, glyph_index, FT_KERNING_UNFITTED, &delta); pen_x += delta.x >> 6; } @@ -284,7 +274,7 @@ void blf_font_free(FontBLF *font) blf_glyph_cache_free(gc); } - FT_Done_Face((FT_Face)font->engine); + FT_Done_Face(font->face); if (font->filename) MEM_freeN(font->filename); if (font->name) @@ -294,9 +284,7 @@ void blf_font_free(FontBLF *font) void blf_font_fill(FontBLF *font) { - font->type= BLF_FONT_FREETYPE2; font->mode= BLF_MODE_TEXTURE; - font->ref= 1; font->aspect= 1.0f; font->pos[0]= 0.0f; font->pos[1]= 0.0f; @@ -312,75 +300,75 @@ void blf_font_fill(FontBLF *font) font->cache.first= NULL; font->cache.last= NULL; font->glyph_cache= NULL; + font->blur= 0; glGetIntegerv(GL_MAX_TEXTURE_SIZE, (GLint *)&font->max_tex_size); - - font->size_set= blf_font_size; - font->draw= blf_font_draw; - font->boundbox_get= blf_font_boundbox; - font->width_get= blf_font_width; - font->height_get= blf_font_height; - font->free= blf_font_free; } FontBLF *blf_font_new(char *name, char *filename) { FontBLF *font; FT_Error err; - FT_Face face; + char *mfile; - err= FT_New_Face(global_ft_lib, filename, 0, &face); - if (err) - return(NULL); - - err= FT_Select_Charmap(face, ft_encoding_unicode); + font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new"); + err= FT_New_Face(global_ft_lib, filename, 0, &font->face); if (err) { - printf("Can't set the unicode character map!\n"); - FT_Done_Face(face); + MEM_freeN(font); return(NULL); } - font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new"); + err= FT_Select_Charmap(font->face, ft_encoding_unicode); + if (err) { + printf("Can't set the unicode character map!\n"); + FT_Done_Face(font->face); + MEM_freeN(font); + return(NULL); + } + + mfile= blf_dir_metrics_search(filename); + if (mfile) { + err= FT_Attach_File(font->face, mfile); + MEM_freeN(mfile); + } + font->name= BLI_strdup(name); font->filename= BLI_strdup(filename); - font->engine= (void *)face; blf_font_fill(font); return(font); } +void blf_font_attach_from_mem(FontBLF *font, const unsigned char *mem, int mem_size) +{ + FT_Open_Args open; + + open.flags= FT_OPEN_MEMORY; + open.memory_base= (FT_Byte *)mem; + open.memory_size= mem_size; + FT_Attach_Stream(font->face, &open); +} + FontBLF *blf_font_new_from_mem(char *name, unsigned char *mem, int mem_size) { FontBLF *font; FT_Error err; - FT_Face face; - err= FT_New_Memory_Face(global_ft_lib, mem, mem_size, 0, &face); - if (err) - return(NULL); - - err= FT_Select_Charmap(face, ft_encoding_unicode); + font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new_from_mem"); + err= FT_New_Memory_Face(global_ft_lib, mem, mem_size, 0, &font->face); if (err) { - printf("Can't set the unicode character map!\n"); - FT_Done_Face(face); + MEM_freeN(font); + return(NULL); + } + + err= FT_Select_Charmap(font->face, ft_encoding_unicode); + if (err) { + printf("Can't set the unicode character map!\n"); + FT_Done_Face(font->face); + MEM_freeN(font); return(NULL); } - font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_font_new_from_mem"); font->name= BLI_strdup(name); font->filename= NULL; - font->engine= (void *)face; blf_font_fill(font); return(font); } - -#else /* !WITH_FREETYPE2 */ - -int blf_font_init(void) -{ - return(0); -} - -void blf_font_exit(void) -{ -} - -#endif /* WITH_FREETYPE2 */ diff --git a/source/blender/blenfont/intern/blf_font_helv10.h b/source/blender/blenfont/intern/blf_font_helv10.h deleted file mode 100644 index 7a0a48d83bc..00000000000 --- a/source/blender/blenfont/intern/blf_font_helv10.h +++ /dev/null @@ -1,487 +0,0 @@ -/** - * $Id: - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2009 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef BLF_FONT_HELV10_H -#define BLF_FONT_HELV10_H - -static unsigned char helv10_bitmap_data[]= { - 0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80, - 0xa0,0xa0,0x50,0x50,0xf8,0x28,0x7c,0x28, - 0x28,0x20,0x70,0xa8,0x28,0x70,0xa0,0xa8, - 0x70,0x20,0x26,0x29,0x16,0x10,0x08,0x68, - 0x94,0x64,0x64,0x98,0x98,0xa4,0x60,0x50, - 0x50,0x20,0x80,0x40,0x40,0x20,0x40,0x40, - 0x80,0x80,0x80,0x80,0x40,0x40,0x20,0x80, - 0x40,0x40,0x20,0x20,0x20,0x20,0x40,0x40, - 0x80,0xa0,0x40,0xa0,0x20,0x20,0xf8,0x20, - 0x20,0x80,0x40,0x40,0xf8,0x80,0x80,0x80, - 0x40,0x40,0x40,0x40,0x20,0x20,0x70,0x88, - 0x88,0x88,0x88,0x88,0x88,0x70,0x40,0x40, - 0x40,0x40,0x40,0x40,0xc0,0x40,0xf8,0x80, - 0x40,0x30,0x08,0x08,0x88,0x70,0x70,0x88, - 0x08,0x08,0x30,0x08,0x88,0x70,0x10,0x10, - 0xf8,0x90,0x50,0x50,0x30,0x10,0x70,0x88, - 0x08,0x08,0xf0,0x80,0x80,0xf8,0x70,0x88, - 0x88,0xc8,0xb0,0x80,0x88,0x70,0x40,0x40, - 0x20,0x20,0x10,0x10,0x08,0xf8,0x70,0x88, - 0x88,0x88,0x70,0x88,0x88,0x70,0x70,0x88, - 0x08,0x68,0x98,0x88,0x88,0x70,0x80,0x00, - 0x00,0x00,0x00,0x80,0x80,0x40,0x40,0x00, - 0x00,0x00,0x00,0x40,0x20,0x40,0x80,0x40, - 0x20,0xf0,0x00,0xf0,0x80,0x40,0x20,0x40, - 0x80,0x40,0x00,0x40,0x40,0x20,0x10,0x90, - 0x60,0x3e,0x00,0x40,0x00,0x9b,0x00,0xa4, - 0x80,0xa4,0x80,0xa2,0x40,0x92,0x40,0x4d, - 0x40,0x20,0x80,0x1f,0x00,0x82,0x82,0x7c, - 0x44,0x28,0x28,0x10,0x10,0xf0,0x88,0x88, - 0x88,0xf0,0x88,0x88,0xf0,0x78,0x84,0x80, - 0x80,0x80,0x80,0x84,0x78,0xf0,0x88,0x84, - 0x84,0x84,0x84,0x88,0xf0,0xf8,0x80,0x80, - 0x80,0xf8,0x80,0x80,0xf8,0x80,0x80,0x80, - 0x80,0xf0,0x80,0x80,0xf8,0x74,0x8c,0x84, - 0x8c,0x80,0x80,0x84,0x78,0x84,0x84,0x84, - 0x84,0xfc,0x84,0x84,0x84,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x60,0x90,0x10, - 0x10,0x10,0x10,0x10,0x10,0x88,0x88,0x90, - 0x90,0xe0,0xa0,0x90,0x88,0xf0,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x92,0x92,0x92, - 0xaa,0xaa,0xc6,0xc6,0x82,0x8c,0x8c,0x94, - 0x94,0xa4,0xa4,0xc4,0xc4,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x78,0x80,0x80,0x80, - 0x80,0xf0,0x88,0x88,0xf0,0x02,0x7c,0x8c, - 0x94,0x84,0x84,0x84,0x84,0x78,0x88,0x88, - 0x88,0x88,0xf0,0x88,0x88,0xf0,0x70,0x88, - 0x88,0x08,0x70,0x80,0x88,0x70,0x20,0x20, - 0x20,0x20,0x20,0x20,0x20,0xf8,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x10,0x28, - 0x28,0x44,0x44,0x44,0x82,0x82,0x22,0x00, - 0x22,0x00,0x22,0x00,0x55,0x00,0x49,0x00, - 0x49,0x00,0x88,0x80,0x88,0x80,0x88,0x88, - 0x50,0x50,0x20,0x50,0x88,0x88,0x10,0x10, - 0x10,0x28,0x28,0x44,0x44,0x82,0xf8,0x80, - 0x40,0x20,0x20,0x10,0x08,0xf8,0xc0,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0, - 0x20,0x20,0x40,0x40,0x40,0x40,0x80,0x80, - 0xc0,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0xc0,0x88,0x50,0x50,0x20,0x20,0xfc, - 0x80,0x80,0x40,0x68,0x90,0x90,0x70,0x10, - 0xe0,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x80, - 0x80,0x60,0x90,0x80,0x80,0x90,0x60,0x68, - 0x98,0x88,0x88,0x98,0x68,0x08,0x08,0x60, - 0x90,0x80,0xf0,0x90,0x60,0x40,0x40,0x40, - 0x40,0x40,0xe0,0x40,0x30,0x70,0x08,0x68, - 0x98,0x88,0x88,0x98,0x68,0x88,0x88,0x88, - 0x88,0xc8,0xb0,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x80,0x90,0x90, - 0xa0,0xc0,0xa0,0x90,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x92,0x92, - 0x92,0x92,0x92,0xec,0x88,0x88,0x88,0x88, - 0xc8,0xb0,0x70,0x88,0x88,0x88,0x88,0x70, - 0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0, - 0x08,0x08,0x68,0x98,0x88,0x88,0x98,0x68, - 0x80,0x80,0x80,0x80,0xc0,0xa0,0x60,0x90, - 0x10,0x60,0x90,0x60,0x60,0x40,0x40,0x40, - 0x40,0xe0,0x40,0x40,0x70,0x90,0x90,0x90, - 0x90,0x90,0x20,0x20,0x50,0x50,0x88,0x88, - 0x28,0x28,0x54,0x54,0x92,0x92,0x88,0x88, - 0x50,0x20,0x50,0x88,0x80,0x40,0x40,0x60, - 0xa0,0xa0,0x90,0x90,0xf0,0x80,0x40,0x20, - 0x10,0xf0,0x20,0x40,0x40,0x40,0x40,0x80, - 0x40,0x40,0x40,0x20,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x40, - 0x40,0x40,0x40,0x20,0x40,0x40,0x40,0x80, - 0x98,0x64,0x80,0x80,0x80,0x80,0x80,0x80, - 0x00,0x80,0x40,0x70,0xa8,0xa0,0xa0,0xa8, - 0x70,0x10,0xb0,0x48,0x40,0x40,0xe0,0x40, - 0x48,0x30,0x90,0x60,0x90,0x90,0x60,0x90, - 0x20,0xf8,0x20,0xf8,0x50,0x50,0x88,0x88, - 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80, - 0x80,0x80,0x70,0x88,0x18,0x70,0xc8,0x98, - 0x70,0xc0,0x88,0x70,0xa0,0x38,0x44,0x9a, - 0xa2,0x9a,0x44,0x38,0xe0,0x00,0xa0,0x20, - 0xe0,0x28,0x50,0xa0,0x50,0x28,0x08,0x08, - 0xf8,0xe0,0x38,0x44,0xaa,0xb2,0xba,0x44, - 0x38,0xe0,0x60,0x90,0x90,0x60,0xf8,0x00, - 0x20,0x20,0xf8,0x20,0x20,0xe0,0x40,0xa0, - 0x60,0xc0,0x20,0x40,0xe0,0x80,0x40,0x80, - 0x80,0xf0,0x90,0x90,0x90,0x90,0x90,0x28, - 0x28,0x28,0x28,0x28,0x68,0xe8,0xe8,0xe8, - 0x7c,0xc0,0xc0,0x40,0x40,0x40,0xc0,0x40, - 0xe0,0x00,0xe0,0xa0,0xe0,0xa0,0x50,0x28, - 0x50,0xa0,0x21,0x00,0x17,0x80,0x13,0x00, - 0x09,0x00,0x48,0x00,0x44,0x00,0xc4,0x00, - 0x42,0x00,0x27,0x12,0x15,0x0b,0x48,0x44, - 0xc4,0x42,0x21,0x00,0x17,0x80,0x13,0x00, - 0x09,0x00,0xc8,0x00,0x24,0x00,0x44,0x00, - 0xe2,0x00,0x60,0x90,0x80,0x40,0x20,0x20, - 0x00,0x20,0x82,0x82,0x7c,0x44,0x28,0x28, - 0x10,0x10,0x00,0x10,0x20,0x82,0x82,0x7c, - 0x44,0x28,0x28,0x10,0x10,0x00,0x10,0x08, - 0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10, - 0x00,0x28,0x10,0x82,0x82,0x7c,0x44,0x28, - 0x28,0x10,0x10,0x00,0x28,0x14,0x82,0x82, - 0x7c,0x44,0x28,0x28,0x10,0x10,0x00,0x28, - 0x82,0x82,0x7c,0x44,0x28,0x28,0x10,0x10, - 0x10,0x28,0x10,0x8f,0x80,0x88,0x00,0x78, - 0x00,0x48,0x00,0x2f,0x80,0x28,0x00,0x18, - 0x00,0x1f,0x80,0x30,0x10,0x78,0x84,0x80, - 0x80,0x80,0x80,0x84,0x78,0xf8,0x80,0x80, - 0x80,0xf8,0x80,0x80,0xf8,0x00,0x20,0x40, - 0xf8,0x80,0x80,0x80,0xf8,0x80,0x80,0xf8, - 0x00,0x20,0x10,0xf8,0x80,0x80,0xf8,0x80, - 0x80,0x80,0xf8,0x00,0x50,0x20,0xf8,0x80, - 0x80,0x80,0xf8,0x80,0x80,0xf8,0x00,0x50, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x00,0x80,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0x00,0xa0,0x78,0x44,0x42,0x42,0xf2, - 0x42,0x44,0x78,0x8c,0x8c,0x94,0x94,0xa4, - 0xa4,0xc4,0xc4,0x00,0x50,0x28,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x10, - 0x20,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x78,0x00,0x10,0x08,0x78,0x84,0x84,0x84, - 0x84,0x84,0x84,0x78,0x00,0x28,0x10,0x78, - 0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x00, - 0x50,0x28,0x78,0x84,0x84,0x84,0x84,0x84, - 0x84,0x78,0x00,0x48,0x88,0x50,0x20,0x50, - 0x88,0x80,0x78,0xc4,0xa4,0xa4,0x94,0x94, - 0x8c,0x78,0x04,0x78,0x84,0x84,0x84,0x84, - 0x84,0x84,0x84,0x00,0x10,0x20,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x20, - 0x10,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x00,0x28,0x10,0x78,0x84,0x84,0x84, - 0x84,0x84,0x84,0x84,0x00,0x48,0x10,0x10, - 0x10,0x28,0x28,0x44,0x44,0x82,0x00,0x10, - 0x08,0x80,0x80,0xf0,0x88,0x88,0xf0,0x80, - 0x80,0xa0,0x90,0x90,0x90,0xa0,0x90,0x90, - 0x60,0x68,0x90,0x90,0x70,0x10,0xe0,0x00, - 0x20,0x40,0x68,0x90,0x90,0x70,0x10,0xe0, - 0x00,0x20,0x10,0x68,0x90,0x90,0x70,0x10, - 0xe0,0x00,0x50,0x20,0x68,0x90,0x90,0x70, - 0x10,0xe0,0x00,0xa0,0x50,0x68,0x90,0x90, - 0x70,0x10,0xe0,0x00,0x50,0x68,0x90,0x90, - 0x70,0x10,0xe0,0x20,0x50,0x20,0x6c,0x92, - 0x90,0x7e,0x12,0xec,0x60,0x20,0x60,0x90, - 0x80,0x80,0x90,0x60,0x60,0x90,0x80,0xf0, - 0x90,0x60,0x00,0x20,0x40,0x60,0x90,0x80, - 0xf0,0x90,0x60,0x00,0x40,0x20,0x60,0x90, - 0x80,0xf0,0x90,0x60,0x00,0x50,0x20,0x60, - 0x90,0x80,0xf0,0x90,0x60,0x00,0x50,0x40, - 0x40,0x40,0x40,0x40,0x40,0x00,0x40,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, - 0xa0,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x00,0xa0,0x70,0x88,0x88,0x88,0x88,0x78, - 0x90,0x60,0x50,0x90,0x90,0x90,0x90,0x90, - 0xe0,0x00,0xa0,0x50,0x70,0x88,0x88,0x88, - 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88, - 0x88,0x88,0x70,0x00,0x20,0x10,0x70,0x88, - 0x88,0x88,0x88,0x70,0x00,0x50,0x20,0x70, - 0x88,0x88,0x88,0x88,0x70,0x00,0x50,0x28, - 0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x50, - 0x20,0x00,0xf8,0x00,0x20,0x70,0x88,0xc8, - 0xa8,0x98,0x74,0x70,0x90,0x90,0x90,0x90, - 0x90,0x00,0x20,0x40,0x70,0x90,0x90,0x90, - 0x90,0x90,0x00,0x40,0x20,0x70,0x90,0x90, - 0x90,0x90,0x90,0x00,0x50,0x20,0x70,0x90, - 0x90,0x90,0x90,0x90,0x00,0x50,0x80,0x40, - 0x40,0x60,0xa0,0xa0,0x90,0x90,0x00,0x20, - 0x10,0x80,0x80,0xb0,0xc8,0x88,0x88,0xc8, - 0xb0,0x80,0x80,0x80,0x40,0x40,0x60,0xa0, - 0xa0,0x90,0x90,0x00,0x50, -}; - -FontDataBLF blf_font_helv10 = { - -1, -2, - 10, 11, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 12, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 3, -1}, - {1, 8, -1, 0, 3, 0}, - {3, 2, -1, -6, 4, 8}, - {6, 7, 0, 0, 6, 10}, - {5, 9, 0, 1, 6, 17}, - {8, 8, 0, 0, 9, 26}, - {6, 8, -1, 0, 8, 34}, - {2, 3, -1, -5, 3, 42}, - {3, 10, 0, 2, 4, 45}, - {3, 10, -1, 2, 4, 55}, - {3, 3, 0, -5, 4, 65}, - {5, 5, 0, -1, 6, 68}, - {2, 3, 0, 2, 3, 73}, - {5, 1, -1, -3, 7, 76}, - {1, 1, -1, 0, 3, 77}, - {3, 8, 0, 0, 3, 78}, - {5, 8, 0, 0, 6, 86}, - {2, 8, -1, 0, 6, 94}, - {5, 8, 0, 0, 6, 102}, - {5, 8, 0, 0, 6, 110}, - {5, 8, 0, 0, 6, 118}, - {5, 8, 0, 0, 6, 126}, - {5, 8, 0, 0, 6, 134}, - {5, 8, 0, 0, 6, 142}, - {5, 8, 0, 0, 6, 150}, - {5, 8, 0, 0, 6, 158}, - {1, 6, -1, 0, 3, 166}, - {2, 8, 0, 2, 3, 172}, - {3, 5, -1, -1, 6, 180}, - {4, 3, 0, -2, 5, 185}, - {3, 5, -1, -1, 6, 188}, - {4, 8, -1, 0, 6, 193}, - {10, 10, 0, 2, 11, 201}, - {7, 8, 0, 0, 7, 221}, - {5, 8, -1, 0, 7, 229}, - {6, 8, -1, 0, 8, 237}, - {6, 8, -1, 0, 8, 245}, - {5, 8, -1, 0, 7, 253}, - {5, 8, -1, 0, 6, 261}, - {6, 8, -1, 0, 8, 269}, - {6, 8, -1, 0, 8, 277}, - {1, 8, -1, 0, 3, 285}, - {4, 8, 0, 0, 5, 293}, - {5, 8, -1, 0, 7, 301}, - {4, 8, -1, 0, 6, 309}, - {7, 8, -1, 0, 9, 317}, - {6, 8, -1, 0, 8, 325}, - {6, 8, -1, 0, 8, 333}, - {5, 8, -1, 0, 7, 341}, - {7, 9, -1, 1, 8, 349}, - {5, 8, -1, 0, 7, 358}, - {5, 8, -1, 0, 7, 366}, - {5, 8, 0, 0, 5, 374}, - {6, 8, -1, 0, 8, 382}, - {7, 8, 0, 0, 7, 390}, - {9, 8, 0, 0, 9, 398}, - {5, 8, -1, 0, 7, 414}, - {7, 8, 0, 0, 7, 422}, - {5, 8, -1, 0, 7, 430}, - {2, 10, -1, 2, 3, 438}, - {3, 8, 0, 0, 3, 448}, - {2, 10, 0, 2, 3, 456}, - {5, 5, 0, -3, 6, 466}, - {6, 1, 0, 2, 6, 471}, - {2, 3, 0, -5, 3, 472}, - {5, 6, 0, 0, 5, 475}, - {5, 8, 0, 0, 6, 481}, - {4, 6, 0, 0, 5, 489}, - {5, 8, 0, 0, 6, 495}, - {4, 6, 0, 0, 5, 503}, - {4, 8, 0, 0, 4, 509}, - {5, 8, 0, 2, 6, 517}, - {5, 8, 0, 0, 6, 525}, - {1, 8, 0, 0, 2, 533}, - {1, 9, 0, 1, 2, 541}, - {4, 8, 0, 0, 5, 550}, - {1, 8, 0, 0, 2, 558}, - {7, 6, 0, 0, 8, 566}, - {5, 6, 0, 0, 6, 572}, - {5, 6, 0, 0, 6, 578}, - {5, 8, 0, 2, 6, 584}, - {5, 8, 0, 2, 6, 592}, - {3, 6, 0, 0, 4, 600}, - {4, 6, 0, 0, 5, 606}, - {3, 8, 0, 0, 4, 612}, - {4, 6, 0, 0, 5, 620}, - {5, 6, 0, 0, 6, 626}, - {7, 6, 0, 0, 8, 632}, - {5, 6, 0, 0, 6, 638}, - {4, 8, 0, 2, 5, 644}, - {4, 6, 0, 0, 5, 652}, - {3, 10, 0, 2, 3, 658}, - {1, 10, -1, 2, 3, 668}, - {3, 10, 0, 2, 3, 678}, - {6, 2, 0, -3, 7, 688}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 3, -1}, - {1, 8, -1, 2, 3, 690}, - {5, 8, 0, 1, 6, 698}, - {5, 8, 0, 0, 6, 706}, - {4, 6, 0, -1, 5, 714}, - {5, 8, 0, 0, 6, 720}, - {1, 10, -1, 2, 3, 728}, - {5, 10, 0, 2, 6, 738}, - {3, 1, 0, -7, 3, 748}, - {7, 7, -1, 0, 9, 749}, - {3, 5, 0, -3, 4, 756}, - {5, 5, 0, 0, 6, 761}, - {5, 3, -1, -2, 7, 766}, - {3, 1, 0, -3, 4, 769}, - {7, 7, -1, 0, 9, 770}, - {3, 1, 0, -7, 3, 777}, - {4, 4, 0, -3, 4, 778}, - {5, 7, 0, 0, 6, 782}, - {3, 4, 0, -3, 3, 789}, - {3, 4, 0, -3, 3, 793}, - {2, 2, 0, -6, 3, 797}, - {4, 8, 0, 2, 5, 799}, - {6, 10, 0, 2, 6, 807}, - {2, 1, 0, -3, 3, 817}, - {2, 2, 0, 2, 3, 818}, - {2, 4, 0, -3, 3, 820}, - {3, 5, 0, -3, 4, 824}, - {5, 5, 0, 0, 6, 829}, - {9, 8, 0, 0, 9, 834}, - {8, 8, 0, 0, 9, 850}, - {9, 8, 0, 0, 9, 858}, - {4, 8, -1, 2, 6, 874}, - {7, 11, 0, 0, 7, 882}, - {7, 11, 0, 0, 7, 893}, - {7, 11, 0, 0, 7, 904}, - {7, 11, 0, 0, 7, 915}, - {7, 10, 0, 0, 7, 926}, - {7, 11, 0, 0, 7, 936}, - {9, 8, 0, 0, 10, 947}, - {6, 10, -1, 2, 8, 963}, - {5, 11, -1, 0, 7, 973}, - {5, 11, -1, 0, 7, 984}, - {5, 11, -1, 0, 7, 995}, - {5, 10, -1, 0, 7, 1006}, - {2, 11, 0, 0, 3, 1016}, - {2, 11, -1, 0, 3, 1027}, - {3, 11, 0, 0, 3, 1038}, - {3, 10, 0, 0, 3, 1049}, - {7, 8, 0, 0, 8, 1059}, - {6, 11, -1, 0, 8, 1067}, - {6, 11, -1, 0, 8, 1078}, - {6, 11, -1, 0, 8, 1089}, - {6, 11, -1, 0, 8, 1100}, - {6, 11, -1, 0, 8, 1111}, - {6, 10, -1, 0, 8, 1122}, - {5, 5, 0, -1, 6, 1132}, - {6, 10, -1, 1, 8, 1137}, - {6, 11, -1, 0, 8, 1147}, - {6, 11, -1, 0, 8, 1158}, - {6, 11, -1, 0, 8, 1169}, - {6, 10, -1, 0, 8, 1180}, - {7, 11, 0, 0, 7, 1190}, - {5, 8, -1, 0, 7, 1201}, - {4, 8, 0, 0, 5, 1209}, - {5, 9, 0, 0, 5, 1217}, - {5, 9, 0, 0, 5, 1226}, - {5, 9, 0, 0, 5, 1235}, - {5, 9, 0, 0, 5, 1244}, - {5, 8, 0, 0, 5, 1253}, - {5, 9, 0, 0, 5, 1261}, - {7, 6, 0, 0, 8, 1270}, - {4, 8, 0, 2, 5, 1276}, - {4, 9, 0, 0, 5, 1284}, - {4, 9, 0, 0, 5, 1293}, - {4, 9, 0, 0, 5, 1302}, - {4, 8, 0, 0, 5, 1311}, - {2, 9, 1, 0, 2, 1319}, - {2, 9, 0, 0, 2, 1328}, - {3, 9, 1, 0, 2, 1337}, - {3, 8, 0, 0, 2, 1346}, - {5, 9, 0, 0, 6, 1354}, - {4, 9, 0, 0, 5, 1363}, - {5, 9, 0, 0, 6, 1372}, - {5, 9, 0, 0, 6, 1381}, - {5, 9, 0, 0, 6, 1390}, - {5, 9, 0, 0, 6, 1399}, - {5, 8, 0, 0, 6, 1408}, - {5, 5, 0, -1, 6, 1416}, - {6, 6, 0, 0, 6, 1421}, - {4, 9, 0, 0, 5, 1427}, - {4, 9, 0, 0, 5, 1436}, - {4, 9, 0, 0, 5, 1445}, - {4, 8, 0, 0, 5, 1454}, - {4, 11, 0, 2, 5, 1462}, - {5, 10, 0, 2, 6, 1473}, - {4, 10, 0, 2, 5, 1483}, - }, - helv10_bitmap_data, - 0 -}; - -#endif /* BLF_FONT_HELV10_H */ diff --git a/source/blender/blenfont/intern/blf_font_helv12.h b/source/blender/blenfont/intern/blf_font_helv12.h deleted file mode 100644 index 8ba38ca1cee..00000000000 --- a/source/blender/blenfont/intern/blf_font_helv12.h +++ /dev/null @@ -1,519 +0,0 @@ -/** - * $Id: - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2009 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef BLF_FONT_HELV12_H -#define BLF_FONT_HELV12_H - -static unsigned char helv12_bitmap_data[]= { - 0x80,0x00,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0xa0,0xa0,0xa0,0x50,0x50,0x50,0xfc, - 0x28,0xfc,0x28,0x28,0x20,0x70,0xa8,0xa8, - 0x28,0x70,0xa0,0xa8,0x70,0x20,0x23,0x00, - 0x14,0x80,0x14,0x80,0x13,0x00,0x08,0x00, - 0x68,0x00,0x94,0x00,0x94,0x00,0x62,0x00, - 0x72,0x8c,0x84,0x8a,0x50,0x30,0x48,0x48, - 0x30,0x80,0x40,0xc0,0x20,0x40,0x40,0x80, - 0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20, - 0x80,0x40,0x40,0x20,0x20,0x20,0x20,0x20, - 0x20,0x40,0x40,0x80,0xa0,0x40,0xa0,0x20, - 0x20,0xf8,0x20,0x20,0x80,0x40,0x40,0xf8, - 0x80,0x80,0x80,0x40,0x40,0x40,0x20,0x20, - 0x10,0x10,0x70,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0x70,0x20,0x20,0x20,0x20,0x20, - 0x20,0x20,0xe0,0x20,0xf8,0x80,0x80,0x40, - 0x20,0x10,0x08,0x88,0x70,0x70,0x88,0x88, - 0x08,0x08,0x30,0x08,0x88,0x70,0x08,0x08, - 0xfc,0x88,0x48,0x28,0x28,0x18,0x08,0x70, - 0x88,0x88,0x08,0x08,0xf0,0x80,0x80,0xf8, - 0x70,0x88,0x88,0x88,0xc8,0xb0,0x80,0x88, - 0x70,0x40,0x40,0x20,0x20,0x20,0x10,0x10, - 0x08,0xf8,0x70,0x88,0x88,0x88,0x88,0x70, - 0x88,0x88,0x70,0x70,0x88,0x08,0x08,0x78, - 0x88,0x88,0x88,0x70,0x80,0x00,0x00,0x00, - 0x00,0x80,0x80,0x40,0x40,0x00,0x00,0x00, - 0x00,0x40,0x0c,0x30,0xc0,0x30,0x0c,0xf8, - 0x00,0xf8,0xc0,0x30,0x0c,0x30,0xc0,0x20, - 0x00,0x20,0x20,0x10,0x10,0x88,0x88,0x70, - 0x3e,0x00,0x40,0x00,0x9b,0x00,0xa6,0x80, - 0xa2,0x40,0xa2,0x40,0x92,0x40,0x4d,0x40, - 0x60,0x80,0x1f,0x00,0x82,0x82,0x82,0x7c, - 0x44,0x44,0x28,0x28,0x10,0xf8,0x84,0x84, - 0x84,0xf8,0x84,0x84,0x84,0xf8,0x3c,0x42, - 0x80,0x80,0x80,0x80,0x80,0x42,0x3c,0xf8, - 0x84,0x82,0x82,0x82,0x82,0x82,0x84,0xf8, - 0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80, - 0xfc,0x80,0x80,0x80,0x80,0xf8,0x80,0x80, - 0x80,0xfc,0x3a,0x46,0x82,0x82,0x8e,0x80, - 0x80,0x42,0x3c,0x82,0x82,0x82,0x82,0xfe, - 0x82,0x82,0x82,0x82,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x70,0x88,0x88, - 0x08,0x08,0x08,0x08,0x08,0x08,0x82,0x84, - 0x88,0x90,0xe0,0xa0,0x90,0x88,0x84,0xf8, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x88,0x80,0x88,0x80,0x94,0x80,0x94,0x80, - 0xa2,0x80,0xa2,0x80,0xc1,0x80,0xc1,0x80, - 0x80,0x80,0x82,0x86,0x8a,0x8a,0x92,0xa2, - 0xa2,0xc2,0x82,0x3c,0x42,0x81,0x81,0x81, - 0x81,0x81,0x42,0x3c,0x80,0x80,0x80,0x80, - 0xf8,0x84,0x84,0x84,0xf8,0x3d,0x42,0x85, - 0x89,0x81,0x81,0x81,0x42,0x3c,0x84,0x84, - 0x84,0x88,0xf8,0x84,0x84,0x84,0xf8,0x78, - 0x84,0x84,0x04,0x18,0x60,0x80,0x84,0x78, - 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, - 0xfe,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x84,0x10,0x10,0x28,0x28,0x44,0x44, - 0x44,0x82,0x82,0x22,0x00,0x22,0x00,0x22, - 0x00,0x55,0x00,0x55,0x00,0x49,0x00,0x88, - 0x80,0x88,0x80,0x88,0x80,0x82,0x44,0x44, - 0x28,0x10,0x28,0x44,0x44,0x82,0x10,0x10, - 0x10,0x10,0x28,0x44,0x44,0x82,0x82,0xfe, - 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0xfe, - 0xc0,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0xc0,0x10,0x10,0x20,0x20, - 0x20,0x40,0x40,0x80,0x80,0xc0,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0xc0,0x88,0x50,0x20,0xfe,0xc0,0x80,0x40, - 0x74,0x88,0x88,0x78,0x08,0x88,0x70,0xb0, - 0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80, - 0x70,0x88,0x80,0x80,0x80,0x88,0x70,0x68, - 0x98,0x88,0x88,0x88,0x98,0x68,0x08,0x08, - 0x70,0x88,0x80,0xf8,0x88,0x88,0x70,0x40, - 0x40,0x40,0x40,0x40,0x40,0xe0,0x40,0x30, - 0x70,0x88,0x08,0x68,0x98,0x88,0x88,0x88, - 0x98,0x68,0x88,0x88,0x88,0x88,0x88,0xc8, - 0xb0,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x00,0x80,0x80,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x40, - 0x88,0x90,0xa0,0xc0,0xc0,0xa0,0x90,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x92,0x92,0x92,0x92,0x92,0xda, - 0xa4,0x88,0x88,0x88,0x88,0x88,0xc8,0xb0, - 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x80, - 0x80,0x80,0xb0,0xc8,0x88,0x88,0x88,0xc8, - 0xb0,0x08,0x08,0x08,0x68,0x98,0x88,0x88, - 0x88,0x98,0x68,0x80,0x80,0x80,0x80,0x80, - 0xc0,0xa0,0x60,0x90,0x10,0x60,0x80,0x90, - 0x60,0x60,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x40,0x40,0x68,0x98,0x88,0x88,0x88,0x88, - 0x88,0x20,0x20,0x50,0x50,0x88,0x88,0x88, - 0x22,0x00,0x22,0x00,0x55,0x00,0x49,0x00, - 0x49,0x00,0x88,0x80,0x88,0x80,0x84,0x84, - 0x48,0x30,0x30,0x48,0x84,0x80,0x40,0x20, - 0x20,0x50,0x50,0x90,0x88,0x88,0x88,0xf0, - 0x80,0x40,0x40,0x20,0x10,0xf0,0x30,0x40, - 0x40,0x40,0x40,0x40,0x80,0x40,0x40,0x40, - 0x40,0x30,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0x20, - 0x20,0x20,0x20,0x20,0x10,0x20,0x20,0x20, - 0x20,0xc0,0x98,0x64,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x80,0x40,0x70, - 0xc8,0xa0,0xa0,0xa0,0xa8,0x70,0x10,0xb0, - 0x48,0x20,0x20,0xf0,0x40,0x40,0x48,0x30, - 0x84,0x78,0x48,0x48,0x78,0x84,0x20,0x20, - 0xf8,0x20,0xf8,0x20,0x50,0x88,0x88,0x80, - 0x80,0x80,0x80,0x00,0x00,0x00,0x80,0x80, - 0x80,0x80,0x70,0x88,0x08,0x30,0x48,0x88, - 0x88,0x90,0x60,0x80,0x88,0x70,0xa0,0x3e, - 0x00,0x41,0x00,0x9c,0x80,0xa2,0x80,0xa0, - 0x80,0xa2,0x80,0x9c,0x80,0x41,0x00,0x3e, - 0x00,0xe0,0x00,0xa0,0x20,0xe0,0x28,0x50, - 0xa0,0x50,0x28,0x04,0x04,0x04,0xfc,0xf0, - 0x3e,0x00,0x41,0x00,0x94,0x80,0x94,0x80, - 0x98,0x80,0x94,0x80,0x9c,0x80,0x41,0x00, - 0x3e,0x00,0xf0,0x60,0x90,0x90,0x60,0xf8, - 0x00,0x20,0x20,0xf8,0x20,0x20,0xf0,0x40, - 0x20,0x90,0x60,0xc0,0x20,0x40,0x20,0xe0, - 0x80,0x40,0x80,0x80,0x80,0xe8,0x98,0x88, - 0x88,0x88,0x88,0x88,0x28,0x28,0x28,0x28, - 0x28,0x28,0x68,0xe8,0xe8,0xe8,0x68,0x3c, - 0x80,0xc0,0x20,0x20,0x40,0x40,0x40,0x40, - 0xc0,0x40,0xe0,0x00,0xe0,0xa0,0xe0,0xa0, - 0x50,0x28,0x50,0xa0,0x41,0x00,0x27,0x80, - 0x15,0x00,0x13,0x00,0x49,0x00,0x44,0x00, - 0x44,0x00,0xc2,0x00,0x41,0x00,0x47,0x80, - 0x22,0x00,0x11,0x00,0x14,0x80,0x4b,0x00, - 0x48,0x00,0x44,0x00,0xc2,0x00,0x41,0x00, - 0x21,0x00,0x17,0x80,0x15,0x00,0x0b,0x00, - 0xc9,0x00,0x24,0x00,0x44,0x00,0x22,0x00, - 0xe1,0x00,0x70,0x88,0x88,0x40,0x40,0x20, - 0x20,0x00,0x20,0x82,0x82,0x82,0x7c,0x44, - 0x44,0x28,0x10,0x10,0x00,0x10,0x20,0x82, - 0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10, - 0x00,0x10,0x08,0x82,0x82,0x82,0x7c,0x44, - 0x44,0x28,0x10,0x10,0x00,0x28,0x10,0x82, - 0x82,0x82,0x7c,0x44,0x44,0x28,0x10,0x10, - 0x00,0x28,0x14,0x82,0x82,0x82,0x7c,0x44, - 0x44,0x28,0x10,0x10,0x00,0x28,0x82,0x82, - 0x82,0x7c,0x44,0x44,0x28,0x10,0x10,0x10, - 0x28,0x10,0x8f,0x80,0x88,0x00,0x88,0x00, - 0x78,0x00,0x4f,0x80,0x48,0x00,0x28,0x00, - 0x28,0x00,0x1f,0x80,0x30,0x08,0x08,0x3c, - 0x42,0x80,0x80,0x80,0x80,0x80,0x42,0x3c, - 0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80, - 0xfc,0x00,0x10,0x20,0xfc,0x80,0x80,0x80, - 0xfc,0x80,0x80,0x80,0xfc,0x00,0x10,0x08, - 0xfc,0x80,0x80,0x80,0xfc,0x80,0x80,0x80, - 0xfc,0x00,0x28,0x10,0xfc,0x80,0x80,0x80, - 0xfc,0x80,0x80,0x80,0xfc,0x00,0x28,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x00,0x40,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x80,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, - 0x00,0xa0,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x00,0xa0,0x7c,0x42, - 0x41,0x41,0xf1,0x41,0x41,0x42,0x7c,0x82, - 0x86,0x8a,0x8a,0x92,0xa2,0xa2,0xc2,0x82, - 0x00,0x28,0x14,0x3c,0x42,0x81,0x81,0x81, - 0x81,0x81,0x42,0x3c,0x00,0x08,0x10,0x3c, - 0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c, - 0x00,0x08,0x04,0x3c,0x42,0x81,0x81,0x81, - 0x81,0x81,0x42,0x3c,0x00,0x14,0x08,0x3c, - 0x42,0x81,0x81,0x81,0x81,0x81,0x42,0x3c, - 0x00,0x28,0x14,0x3c,0x42,0x81,0x81,0x81, - 0x81,0x81,0x42,0x3c,0x00,0x24,0x88,0x50, - 0x20,0x50,0x88,0x80,0x00,0x5e,0x00,0x21, - 0x00,0x50,0x80,0x48,0x80,0x44,0x80,0x44, - 0x80,0x42,0x80,0x21,0x00,0x1e,0x80,0x00, - 0x40,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x84,0x00,0x10,0x20,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x10, - 0x08,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x84,0x00,0x28,0x10,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x48, - 0x10,0x10,0x10,0x10,0x28,0x44,0x44,0x82, - 0x82,0x00,0x10,0x08,0x80,0x80,0xf8,0x84, - 0x84,0x84,0xf8,0x80,0x80,0xb0,0x88,0x88, - 0x88,0xb0,0x88,0x88,0x88,0x70,0x74,0x88, - 0x88,0x78,0x08,0x88,0x70,0x00,0x10,0x20, - 0x74,0x88,0x88,0x78,0x08,0x88,0x70,0x00, - 0x20,0x10,0x74,0x88,0x88,0x78,0x08,0x88, - 0x70,0x00,0x50,0x20,0x74,0x88,0x88,0x78, - 0x08,0x88,0x70,0x00,0x50,0x28,0x74,0x88, - 0x88,0x78,0x08,0x88,0x70,0x00,0x50,0x74, - 0x88,0x88,0x78,0x08,0x88,0x70,0x30,0x48, - 0x30,0x77,0x00,0x88,0x80,0x88,0x00,0x7f, - 0x80,0x08,0x80,0x88,0x80,0x77,0x00,0x60, - 0x10,0x20,0x70,0x88,0x80,0x80,0x80,0x88, - 0x70,0x70,0x88,0x80,0xf8,0x88,0x88,0x70, - 0x00,0x20,0x40,0x70,0x88,0x80,0xf8,0x88, - 0x88,0x70,0x00,0x20,0x10,0x70,0x88,0x80, - 0xf8,0x88,0x88,0x70,0x00,0x50,0x20,0x70, - 0x88,0x80,0xf8,0x88,0x88,0x70,0x00,0x50, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00, - 0x40,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x00,0x80,0x40,0x40,0x40,0x40,0x40, - 0x40,0x40,0x40,0x00,0xa0,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x00,0xa0,0x70, - 0x88,0x88,0x88,0x88,0x78,0x08,0x50,0x30, - 0x68,0x88,0x88,0x88,0x88,0x88,0xc8,0xb0, - 0x00,0x50,0x28,0x70,0x88,0x88,0x88,0x88, - 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88, - 0x88,0x88,0x88,0x70,0x00,0x20,0x10,0x70, - 0x88,0x88,0x88,0x88,0x88,0x70,0x00,0x50, - 0x20,0x70,0x88,0x88,0x88,0x88,0x88,0x70, - 0x00,0x50,0x28,0x70,0x88,0x88,0x88,0x88, - 0x88,0x70,0x00,0x50,0x20,0x00,0xf8,0x00, - 0x20,0xb8,0x44,0x64,0x54,0x4c,0x44,0x3a, - 0x68,0x98,0x88,0x88,0x88,0x88,0x88,0x00, - 0x20,0x40,0x68,0x98,0x88,0x88,0x88,0x88, - 0x88,0x00,0x20,0x10,0x68,0x98,0x88,0x88, - 0x88,0x88,0x88,0x00,0x50,0x20,0x68,0x98, - 0x88,0x88,0x88,0x88,0x88,0x00,0x50,0x80, - 0x40,0x20,0x20,0x50,0x50,0x90,0x88,0x88, - 0x88,0x00,0x20,0x10,0x80,0x80,0x80,0xb0, - 0xc8,0x88,0x88,0x88,0xc8,0xb0,0x80,0x80, - 0xc0,0x20,0x20,0x20,0x30,0x50,0x50,0x48, - 0x88,0x88,0x00,0x50, -}; - -FontDataBLF blf_font_helv12 = { - 0, -3, - 11, 12, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 16, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 4, -1}, - {1, 9, -1, 0, 3, 0}, - {3, 3, -1, -6, 5, 9}, - {6, 8, 0, 0, 7, 12}, - {5, 10, -1, 1, 7, 20}, - {9, 9, -1, 0, 11, 30}, - {7, 9, -1, 0, 9, 48}, - {2, 3, -1, -6, 3, 57}, - {3, 12, -1, 3, 4, 60}, - {3, 12, 0, 3, 4, 72}, - {3, 3, -1, -6, 5, 84}, - {5, 5, -1, -1, 7, 87}, - {2, 3, -1, 2, 4, 92}, - {5, 1, -1, -3, 8, 95}, - {1, 1, -1, 0, 3, 96}, - {4, 9, 0, 0, 4, 97}, - {5, 9, -1, 0, 7, 106}, - {3, 9, -1, 0, 7, 115}, - {5, 9, -1, 0, 7, 124}, - {5, 9, -1, 0, 7, 133}, - {6, 9, 0, 0, 7, 142}, - {5, 9, -1, 0, 7, 151}, - {5, 9, -1, 0, 7, 160}, - {5, 9, -1, 0, 7, 169}, - {5, 9, -1, 0, 7, 178}, - {5, 9, -1, 0, 7, 187}, - {1, 6, -1, 0, 3, 196}, - {2, 8, 0, 2, 3, 202}, - {6, 5, 0, -1, 7, 210}, - {5, 3, -1, -2, 7, 215}, - {6, 5, -1, -1, 7, 218}, - {5, 9, -1, 0, 7, 223}, - {10, 10, -1, 1, 12, 232}, - {7, 9, -1, 0, 9, 252}, - {6, 9, -1, 0, 8, 261}, - {7, 9, -1, 0, 9, 270}, - {7, 9, -1, 0, 9, 279}, - {6, 9, -1, 0, 8, 288}, - {6, 9, -1, 0, 8, 297}, - {7, 9, -1, 0, 9, 306}, - {7, 9, -1, 0, 9, 315}, - {1, 9, -1, 0, 3, 324}, - {5, 9, -1, 0, 7, 333}, - {7, 9, -1, 0, 8, 342}, - {5, 9, -1, 0, 7, 351}, - {9, 9, -1, 0, 11, 360}, - {7, 9, -1, 0, 9, 378}, - {8, 9, -1, 0, 10, 387}, - {6, 9, -1, 0, 8, 396}, - {8, 9, -1, 0, 10, 405}, - {6, 9, -1, 0, 8, 414}, - {6, 9, -1, 0, 8, 423}, - {7, 9, 0, 0, 7, 432}, - {6, 9, -1, 0, 8, 441}, - {7, 9, -1, 0, 9, 450}, - {9, 9, -1, 0, 11, 459}, - {7, 9, -1, 0, 9, 477}, - {7, 9, -1, 0, 9, 486}, - {7, 9, -1, 0, 9, 495}, - {2, 12, -1, 3, 3, 504}, - {4, 9, 0, 0, 4, 516}, - {2, 12, 0, 3, 3, 525}, - {5, 3, 0, -5, 6, 537}, - {7, 1, 0, 2, 7, 540}, - {2, 3, 0, -6, 3, 541}, - {6, 7, -1, 0, 7, 544}, - {5, 9, -1, 0, 7, 551}, - {5, 7, -1, 0, 7, 560}, - {5, 9, -1, 0, 7, 567}, - {5, 7, -1, 0, 7, 576}, - {4, 9, 0, 0, 3, 583}, - {5, 10, -1, 3, 7, 592}, - {5, 9, -1, 0, 7, 602}, - {1, 9, -1, 0, 3, 611}, - {2, 12, 0, 3, 3, 620}, - {5, 9, -1, 0, 6, 632}, - {1, 9, -1, 0, 3, 641}, - {7, 7, -1, 0, 9, 650}, - {5, 7, -1, 0, 7, 657}, - {5, 7, -1, 0, 7, 664}, - {5, 10, -1, 3, 7, 671}, - {5, 10, -1, 3, 7, 681}, - {3, 7, -1, 0, 4, 691}, - {4, 7, -1, 0, 6, 698}, - {3, 9, 0, 0, 3, 705}, - {5, 7, -1, 0, 7, 714}, - {5, 7, -1, 0, 7, 721}, - {9, 7, 0, 0, 9, 728}, - {6, 7, 0, 0, 6, 742}, - {5, 10, -1, 3, 7, 749}, - {4, 7, -1, 0, 6, 759}, - {4, 12, 0, 3, 4, 766}, - {1, 12, -1, 3, 3, 778}, - {4, 12, 0, 3, 4, 790}, - {6, 2, 0, -3, 7, 802}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 4, -1}, - {1, 10, -1, 3, 3, 804}, - {5, 9, -1, 1, 7, 814}, - {5, 9, -1, 0, 7, 823}, - {6, 6, 0, -1, 7, 832}, - {5, 9, -1, 0, 7, 838}, - {1, 11, -1, 2, 3, 847}, - {5, 12, 0, 3, 6, 858}, - {3, 1, 0, -8, 3, 870}, - {9, 9, -1, 0, 11, 871}, - {3, 5, -1, -4, 5, 889}, - {5, 5, -1, -1, 7, 894}, - {6, 4, -1, -2, 8, 899}, - {4, 1, 0, -3, 5, 903}, - {9, 9, -1, 0, 11, 904}, - {4, 1, 0, -8, 4, 922}, - {4, 4, 0, -4, 5, 923}, - {5, 7, -1, 0, 7, 927}, - {4, 5, 0, -3, 4, 934}, - {3, 5, 0, -3, 4, 939}, - {2, 2, 0, -8, 2, 944}, - {5, 10, -1, 3, 7, 946}, - {6, 12, 0, 3, 7, 956}, - {1, 1, -1, -3, 3, 968}, - {3, 4, 0, 3, 3, 969}, - {2, 5, -1, -3, 4, 973}, - {3, 5, -1, -4, 5, 978}, - {5, 5, -1, -1, 7, 983}, - {9, 9, 0, 0, 10, 988}, - {9, 9, 0, 0, 10, 1006}, - {9, 9, 0, 0, 10, 1024}, - {5, 9, -1, 3, 7, 1042}, - {7, 12, -1, 0, 9, 1051}, - {7, 12, -1, 0, 9, 1063}, - {7, 12, -1, 0, 9, 1075}, - {7, 12, -1, 0, 9, 1087}, - {7, 11, -1, 0, 9, 1099}, - {7, 12, -1, 0, 9, 1110}, - {9, 9, -1, 0, 11, 1122}, - {7, 12, -1, 3, 9, 1140}, - {6, 12, -1, 0, 8, 1152}, - {6, 12, -1, 0, 8, 1164}, - {6, 12, -1, 0, 8, 1176}, - {6, 11, -1, 0, 8, 1188}, - {2, 12, 0, 0, 3, 1199}, - {2, 12, -1, 0, 3, 1211}, - {3, 12, 0, 0, 3, 1223}, - {3, 11, 0, 0, 3, 1235}, - {8, 9, 0, 0, 9, 1246}, - {7, 12, -1, 0, 9, 1255}, - {8, 12, -1, 0, 10, 1267}, - {8, 12, -1, 0, 10, 1279}, - {8, 12, -1, 0, 10, 1291}, - {8, 12, -1, 0, 10, 1303}, - {8, 11, -1, 0, 10, 1315}, - {5, 5, -1, -1, 7, 1326}, - {10, 11, 0, 1, 10, 1331}, - {6, 12, -1, 0, 8, 1353}, - {6, 12, -1, 0, 8, 1365}, - {6, 12, -1, 0, 8, 1377}, - {6, 11, -1, 0, 8, 1389}, - {7, 12, -1, 0, 9, 1400}, - {6, 9, -1, 0, 8, 1412}, - {5, 9, -1, 0, 7, 1421}, - {6, 10, -1, 0, 7, 1430}, - {6, 10, -1, 0, 7, 1440}, - {6, 10, -1, 0, 7, 1450}, - {6, 10, -1, 0, 7, 1460}, - {6, 9, -1, 0, 7, 1470}, - {6, 10, -1, 0, 7, 1479}, - {9, 7, -1, 0, 11, 1489}, - {5, 10, -1, 3, 7, 1503}, - {5, 10, -1, 0, 7, 1513}, - {5, 10, -1, 0, 7, 1523}, - {5, 10, -1, 0, 7, 1533}, - {5, 9, -1, 0, 7, 1543}, - {2, 10, 0, 0, 3, 1552}, - {2, 10, -1, 0, 3, 1562}, - {3, 10, 0, 0, 3, 1572}, - {3, 9, 0, 0, 3, 1582}, - {5, 10, -1, 0, 7, 1591}, - {5, 10, -1, 0, 7, 1601}, - {5, 10, -1, 0, 7, 1611}, - {5, 10, -1, 0, 7, 1621}, - {5, 10, -1, 0, 7, 1631}, - {5, 10, -1, 0, 7, 1641}, - {5, 9, -1, 0, 7, 1651}, - {5, 5, -1, -1, 7, 1660}, - {7, 7, 0, 0, 7, 1665}, - {5, 10, -1, 0, 7, 1672}, - {5, 10, -1, 0, 7, 1682}, - {5, 10, -1, 0, 7, 1692}, - {5, 9, -1, 0, 7, 1702}, - {5, 13, -1, 3, 7, 1711}, - {5, 12, -1, 3, 7, 1724}, - {5, 12, -1, 3, 7, 1736}, - }, - helv12_bitmap_data, - 0 -}; - -#endif /* BLF_FONT_HELV12_H */ diff --git a/source/blender/blenfont/intern/blf_font_helvb10.h b/source/blender/blenfont/intern/blf_font_helvb10.h deleted file mode 100644 index 35744946ef0..00000000000 --- a/source/blender/blenfont/intern/blf_font_helvb10.h +++ /dev/null @@ -1,487 +0,0 @@ -/** - * $Id: - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2009 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef BLF_FONT_HELVB10_H -#define BLF_FONT_HELVB10_H - -static unsigned char helvb10_bitmap_data[]= { - 0x00,0xc0,0x00,0x80,0x80,0xc0,0xc0,0xc0, - 0xc0,0xa0,0xa0,0xa0,0x50,0x50,0xfc,0x28, - 0x7e,0x28,0x28,0x20,0x70,0xa8,0x28,0x38, - 0x70,0xe0,0xa8,0x70,0x20,0x8c,0x56,0x2c, - 0x10,0x10,0x68,0xb4,0x62,0x76,0xdc,0xcc, - 0xde,0x70,0xd8,0xd8,0x70,0x80,0x40,0xc0, - 0xc0,0x20,0x60,0x40,0xc0,0xc0,0xc0,0xc0, - 0x40,0x60,0x20,0x80,0xc0,0x40,0x60,0x60, - 0x60,0x60,0x40,0xc0,0x80,0xa0,0x40,0xa0, - 0x30,0x30,0xfc,0x30,0x30,0x80,0x40,0xc0, - 0xc0,0xf8,0xc0,0xc0,0x80,0x80,0x40,0x40, - 0x20,0x20,0x10,0x10,0x70,0xd8,0xd8,0xd8, - 0xd8,0xd8,0xd8,0x70,0x60,0x60,0x60,0x60, - 0x60,0x60,0xe0,0x60,0xf8,0xc0,0x60,0x30, - 0x18,0x18,0xd8,0x70,0x70,0xd8,0x18,0x18, - 0x30,0x18,0xd8,0x70,0x18,0x18,0xfc,0x98, - 0x58,0x38,0x18,0x08,0x70,0xd8,0x98,0x18, - 0xf0,0xc0,0xc0,0xf8,0x70,0xd8,0xd8,0xd8, - 0xf0,0xc0,0xd8,0x70,0x60,0x60,0x60,0x30, - 0x30,0x18,0x18,0xf8,0x70,0xd8,0xd8,0xd8, - 0x70,0xd8,0xd8,0x70,0x70,0xd8,0x18,0x78, - 0xd8,0xd8,0xd8,0x70,0xc0,0xc0,0x00,0x00, - 0xc0,0xc0,0x80,0x40,0xc0,0xc0,0x00,0x00, - 0xc0,0xc0,0x30,0x60,0xc0,0x60,0x30,0xf8, - 0x00,0xf8,0xc0,0x60,0x30,0x60,0xc0,0x60, - 0x00,0x60,0x60,0x30,0x18,0xd8,0x70,0x3e, - 0x00,0x40,0x00,0x9b,0x00,0xa4,0x80,0xa2, - 0x40,0x92,0x40,0x4d,0x40,0x60,0x80,0x1f, - 0x00,0xc6,0xc6,0xfe,0x6c,0x6c,0x6c,0x38, - 0x38,0xf8,0xcc,0xcc,0xcc,0xf8,0xcc,0xcc, - 0xf8,0x3c,0x66,0xc2,0xc0,0xc0,0xc2,0x66, - 0x3c,0xf0,0xd8,0xcc,0xcc,0xcc,0xcc,0xd8, - 0xf0,0xf8,0xc0,0xc0,0xc0,0xf8,0xc0,0xc0, - 0xf8,0xc0,0xc0,0xc0,0xc0,0xf0,0xc0,0xc0, - 0xf8,0x3a,0x66,0xc6,0xce,0xc0,0xc2,0x66, - 0x3c,0xcc,0xcc,0xcc,0xcc,0xfc,0xcc,0xcc, - 0xcc,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0x70,0xd8,0x18,0x18,0x18,0x18,0x18, - 0x18,0xc6,0xcc,0xd8,0xf0,0xe0,0xf0,0xd8, - 0xcc,0xf8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc9,0x80,0xc9,0x80,0xdd,0x80,0xd5, - 0x80,0xf7,0x80,0xe3,0x80,0xe3,0x80,0xc1, - 0x80,0xc6,0xce,0xce,0xd6,0xd6,0xe6,0xe6, - 0xc6,0x38,0x6c,0xc6,0xc6,0xc6,0xc6,0x6c, - 0x38,0xc0,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc, - 0xf8,0x02,0x3c,0x6c,0xd6,0xc6,0xc6,0xc6, - 0x6c,0x38,0xcc,0xcc,0xcc,0xf8,0xcc,0xcc, - 0xcc,0xf8,0x78,0xcc,0x8c,0x1c,0x78,0xe0, - 0xcc,0x78,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0xfc,0x78,0xcc,0xcc,0xcc,0xcc,0xcc, - 0xcc,0xcc,0x10,0x38,0x38,0x6c,0x6c,0x6c, - 0xc6,0xc6,0x33,0x00,0x33,0x00,0x7f,0x80, - 0x6d,0x80,0x6d,0x80,0xcc,0xc0,0xcc,0xc0, - 0xcc,0xc0,0xc6,0xc6,0x6c,0x38,0x38,0x6c, - 0xc6,0xc6,0x18,0x18,0x18,0x3c,0x66,0x66, - 0xc3,0xc3,0xfc,0xc0,0x60,0x70,0x30,0x18, - 0x0c,0xfc,0xe0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xe0,0x10,0x10,0x20,0x20, - 0x40,0x40,0x80,0x80,0xe0,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0xe0,0x90,0x90, - 0xf0,0x60,0xfc,0xc0,0xc0,0x80,0x40,0x6c, - 0xd8,0xd8,0x78,0x98,0x70,0xf0,0xd8,0xd8, - 0xd8,0xd8,0xf0,0xc0,0xc0,0x70,0xd0,0xc0, - 0xc0,0xd0,0x70,0x78,0xd8,0xd8,0xd8,0xd8, - 0x78,0x18,0x18,0x70,0xd8,0xc0,0xf8,0xd8, - 0x70,0x60,0x60,0x60,0x60,0x60,0xf0,0x60, - 0x38,0x70,0x18,0x78,0xd8,0xd8,0xd8,0xd8, - 0x68,0xd8,0xd8,0xd8,0xd8,0xd8,0xf0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00, - 0xc0,0xc0,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x00,0x60,0xcc,0xd8,0xf0,0xe0,0xf0, - 0xd8,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xdb,0xdb,0xdb,0xdb,0xdb, - 0xb6,0xd8,0xd8,0xd8,0xd8,0xd8,0xb0,0x70, - 0xd8,0xd8,0xd8,0xd8,0x70,0xc0,0xc0,0xf0, - 0xd8,0xd8,0xd8,0xd8,0xb0,0x18,0x18,0x78, - 0xd8,0xd8,0xd8,0xd8,0x68,0xc0,0xc0,0xc0, - 0xc0,0xe0,0xb0,0x70,0xd8,0x18,0x70,0xd8, - 0x70,0x30,0x60,0x60,0x60,0x60,0xf0,0x60, - 0x60,0x68,0xd8,0xd8,0xd8,0xd8,0xd8,0x20, - 0x70,0x50,0xd8,0xd8,0xd8,0x6c,0x6c,0x6c, - 0xd6,0xd6,0xd6,0xcc,0xcc,0x78,0x30,0x78, - 0xcc,0x60,0x30,0x30,0x78,0xd8,0xd8,0xd8, - 0xd8,0xf8,0xc0,0x60,0x30,0x18,0xf8,0x30, - 0x60,0x60,0x60,0x60,0xc0,0x60,0x60,0x60, - 0x30,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0xc0,0x60,0x60,0x60,0x60, - 0x30,0x60,0x60,0x60,0xc0,0xb0,0x68,0x00, - 0xc0,0xc0,0xc0,0xc0,0x40,0x40,0x00,0xc0, - 0x40,0x70,0xd8,0xa0,0xa0,0xd8,0x70,0x10, - 0xd8,0x68,0x60,0x60,0xf0,0x60,0x68,0x38, - 0x84,0x78,0x48,0x48,0x78,0x84,0x30,0xfc, - 0x30,0xfc,0x48,0xcc,0x84,0x84,0x80,0x80, - 0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80, - 0x70,0x98,0x38,0x70,0xc8,0x98,0x70,0xe0, - 0xc8,0x70,0xa0,0x3c,0x42,0x9d,0xa1,0xa5, - 0x99,0x42,0x3c,0xe0,0x00,0xa0,0x20,0xe0, - 0x6c,0xd8,0x6c,0x08,0x08,0xf8,0xf0,0x3c, - 0x42,0xa5,0xb9,0xa5,0xbd,0x42,0x3c,0xe0, - 0xc0,0xa0,0x60,0xfc,0x00,0x30,0x30,0xfc, - 0x30,0x30,0xe0,0x40,0xa0,0x60,0xc0,0x20, - 0x40,0xe0,0x80,0x40,0xc0,0xc0,0xe8,0xd8, - 0xd8,0xd8,0xd8,0xd8,0x28,0x28,0x28,0x28, - 0x28,0x68,0xe8,0xe8,0xe8,0x7c,0xc0,0xc0, - 0x40,0x40,0x40,0xc0,0x40,0xe0,0x00,0xe0, - 0xa0,0xe0,0xd8,0x6c,0xd8,0x42,0x2f,0x26, - 0x12,0x48,0x48,0xc4,0x44,0x4e,0x24,0x2a, - 0x16,0x48,0x48,0xc4,0x44,0x42,0x2f,0x26, - 0x12,0xc8,0x28,0x44,0xe4,0x70,0xd8,0xc0, - 0x60,0x30,0x30,0x00,0x30,0xc6,0xc6,0xfe, - 0x6c,0x6c,0x6c,0x38,0x38,0x00,0x10,0x20, - 0xc6,0xc6,0xfe,0x6c,0x6c,0x6c,0x38,0x38, - 0x00,0x10,0x08,0xc6,0xc6,0xfe,0x6c,0x6c, - 0x6c,0x38,0x38,0x00,0x28,0x10,0xc6,0xc6, - 0xfe,0x6c,0x6c,0x6c,0x38,0x38,0x00,0x28, - 0x14,0xc6,0xc6,0xfe,0x6c,0x6c,0x6c,0x38, - 0x38,0x00,0x28,0xc6,0xc6,0xfe,0x6c,0x6c, - 0x6c,0x38,0x38,0x10,0x28,0x10,0xcf,0x80, - 0xcc,0x00,0xfc,0x00,0x6c,0x00,0x6f,0x80, - 0x6c,0x00,0x3c,0x00,0x3f,0x80,0x30,0x10, - 0x3c,0x66,0xc2,0xc0,0xc0,0xc2,0x66,0x3c, - 0xf8,0xc0,0xc0,0xc0,0xf8,0xc0,0xc0,0xf8, - 0x00,0x20,0x40,0xf8,0xc0,0xc0,0xc0,0xf8, - 0xc0,0xc0,0xf8,0x00,0x20,0x10,0xf8,0xc0, - 0xc0,0xc0,0xf8,0xc0,0xc0,0xf8,0x00,0x50, - 0x20,0xf8,0xc0,0xc0,0xc0,0xf8,0xc0,0xc0, - 0xf8,0x00,0x50,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0x00,0x40,0x80,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x80, - 0x40,0x60,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x00,0xa0,0x40,0x60,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x00,0x90,0x78,0x6c, - 0x66,0x66,0xf6,0x66,0x6c,0x78,0xc6,0xce, - 0xce,0xd6,0xd6,0xe6,0xe6,0xc6,0x00,0x28, - 0x14,0x38,0x6c,0xc6,0xc6,0xc6,0xc6,0x6c, - 0x38,0x00,0x08,0x10,0x38,0x6c,0xc6,0xc6, - 0xc6,0xc6,0x6c,0x38,0x00,0x10,0x08,0x38, - 0x6c,0xc6,0xc6,0xc6,0xc6,0x6c,0x38,0x00, - 0x28,0x10,0x38,0x6c,0xc6,0xc6,0xc6,0xc6, - 0x6c,0x38,0x00,0x28,0x14,0x38,0x6c,0xc6, - 0xc6,0xc6,0xc6,0x6c,0x38,0x00,0x28,0xcc, - 0x78,0x30,0x78,0xcc,0xb8,0x6c,0xe6,0xd6, - 0xd6,0xce,0x6c,0x3a,0x78,0xcc,0xcc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0x00,0x10,0x20,0x78, - 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0x00, - 0x10,0x08,0x78,0xcc,0xcc,0xcc,0xcc,0xcc, - 0xcc,0xcc,0x00,0x50,0x20,0x78,0xcc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0xcc,0x00,0x48,0x18, - 0x18,0x18,0x3c,0x66,0x66,0xc3,0xc3,0x00, - 0x08,0x04,0xc0,0xc0,0xf8,0xcc,0xcc,0xcc, - 0xf8,0xc0,0xd0,0xc8,0xc8,0xc8,0xd0,0xc8, - 0xc8,0x70,0x6c,0xd8,0xd8,0x78,0x98,0x70, - 0x00,0x10,0x20,0x6c,0xd8,0xd8,0x78,0x98, - 0x70,0x00,0x20,0x10,0x6c,0xd8,0xd8,0x78, - 0x98,0x70,0x00,0x50,0x20,0x6c,0xd8,0xd8, - 0x78,0x98,0x70,0x00,0x50,0x28,0x6c,0xd8, - 0xd8,0x78,0x98,0x70,0x00,0x50,0x6c,0xd8, - 0xd8,0x78,0x98,0x70,0x20,0x50,0x20,0x6e, - 0xdb,0xd8,0x7f,0x9b,0x7e,0x60,0x20,0x70, - 0xd0,0xc0,0xc0,0xd0,0x70,0x70,0xd8,0xc0, - 0xf8,0xd8,0x70,0x00,0x20,0x40,0x70,0xd8, - 0xc0,0xf8,0xd8,0x70,0x00,0x20,0x10,0x70, - 0xd8,0xc0,0xf8,0xd8,0x70,0x00,0x50,0x20, - 0x70,0xd8,0xc0,0xf8,0xd8,0x70,0x00,0x50, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x40, - 0x80,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00, - 0x80,0x40,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0x00,0xa0,0x40,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0x00,0xa0,0x70,0xd8,0xd8,0xd8,0xd8, - 0x70,0xa0,0x60,0x50,0xd8,0xd8,0xd8,0xd8, - 0xd8,0xb0,0x00,0xa0,0x50,0x70,0xd8,0xd8, - 0xd8,0xd8,0x70,0x00,0x20,0x40,0x70,0xd8, - 0xd8,0xd8,0xd8,0x70,0x00,0x20,0x10,0x70, - 0xd8,0xd8,0xd8,0xd8,0x70,0x00,0x50,0x20, - 0x70,0xd8,0xd8,0xd8,0xd8,0x70,0x00,0xa0, - 0x50,0x70,0xd8,0xd8,0xd8,0xd8,0x70,0x00, - 0x50,0x30,0x00,0xfc,0x00,0x30,0xb8,0x6c, - 0x6c,0x7c,0x6c,0x3a,0x68,0xd8,0xd8,0xd8, - 0xd8,0xd8,0x00,0x20,0x40,0x68,0xd8,0xd8, - 0xd8,0xd8,0xd8,0x00,0x20,0x10,0x68,0xd8, - 0xd8,0xd8,0xd8,0xd8,0x00,0x50,0x20,0x68, - 0xd8,0xd8,0xd8,0xd8,0xd8,0x00,0x50,0x60, - 0x30,0x30,0x78,0xd8,0xd8,0xd8,0xd8,0x00, - 0x20,0x10,0xc0,0xc0,0xf0,0xd8,0xc8,0xc8, - 0xd8,0xf0,0xc0,0xc0,0x60,0x30,0x30,0x78, - 0xd8,0xd8,0xd8,0xd8,0x00,0x50, -}; - -FontDataBLF blf_font_helvb10 = { - -1, -2, - 10, 11, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 12, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 3, 0}, - {2, 8, -1, 0, 4, 1}, - {3, 3, -1, -5, 5, 9}, - {7, 7, 1, 0, 6, 12}, - {5, 10, 0, 1, 6, 19}, - {7, 8, 0, 0, 8, 29}, - {7, 8, 0, 0, 8, 37}, - {2, 4, 0, -4, 3, 45}, - {3, 10, 0, 2, 4, 49}, - {3, 10, 0, 2, 4, 59}, - {3, 3, 0, -5, 4, 69}, - {6, 5, 0, -1, 6, 72}, - {2, 4, 0, 2, 3, 77}, - {5, 1, -1, -3, 7, 81}, - {2, 2, 0, 0, 3, 82}, - {4, 8, 0, 0, 4, 84}, - {5, 8, 0, 0, 6, 92}, - {3, 8, -1, 0, 6, 100}, - {5, 8, 0, 0, 6, 108}, - {5, 8, 0, 0, 6, 116}, - {6, 8, 0, 0, 6, 124}, - {5, 8, 0, 0, 6, 132}, - {5, 8, 0, 0, 6, 140}, - {5, 8, 0, 0, 6, 148}, - {5, 8, 0, 0, 6, 156}, - {5, 8, 0, 0, 6, 164}, - {2, 6, 0, 0, 3, 172}, - {2, 8, 0, 2, 3, 178}, - {4, 5, 0, -1, 5, 186}, - {5, 3, 0, -2, 6, 191}, - {4, 5, 0, -1, 5, 194}, - {5, 8, 0, 0, 6, 199}, - {10, 9, 0, 1, 11, 207}, - {7, 8, 0, 0, 8, 225}, - {6, 8, 0, 0, 7, 233}, - {7, 8, 0, 0, 8, 241}, - {6, 8, 0, 0, 7, 249}, - {5, 8, 0, 0, 6, 257}, - {5, 8, 0, 0, 6, 265}, - {7, 8, 0, 0, 8, 273}, - {6, 8, 0, 0, 7, 281}, - {2, 8, 0, 0, 3, 289}, - {5, 8, 0, 0, 6, 297}, - {7, 8, 0, 0, 7, 305}, - {5, 8, 0, 0, 6, 313}, - {9, 8, 0, 0, 10, 321}, - {7, 8, 0, 0, 8, 337}, - {7, 8, 0, 0, 8, 345}, - {6, 8, 0, 0, 7, 353}, - {7, 9, 0, 1, 8, 361}, - {6, 8, 0, 0, 7, 370}, - {6, 8, 0, 0, 7, 378}, - {6, 8, 0, 0, 7, 386}, - {6, 8, 0, 0, 7, 394}, - {7, 8, 0, 0, 8, 402}, - {10, 8, 0, 0, 11, 410}, - {7, 8, 0, 0, 8, 426}, - {8, 8, 0, 0, 9, 434}, - {6, 8, 0, 0, 7, 442}, - {3, 10, 0, 2, 4, 450}, - {4, 8, 0, 0, 4, 460}, - {3, 10, 0, 2, 4, 468}, - {4, 4, 0, -4, 5, 478}, - {6, 1, 0, 2, 6, 482}, - {2, 4, 0, -4, 3, 483}, - {6, 6, 0, 0, 6, 487}, - {5, 8, 0, 0, 6, 493}, - {4, 6, 0, 0, 5, 501}, - {5, 8, 0, 0, 6, 507}, - {5, 6, 0, 0, 6, 515}, - {5, 8, 1, 0, 4, 521}, - {5, 8, 0, 2, 6, 529}, - {5, 8, 0, 0, 6, 537}, - {2, 8, 0, 0, 3, 545}, - {3, 10, 1, 2, 3, 553}, - {6, 8, 0, 0, 6, 563}, - {2, 8, 0, 0, 3, 571}, - {8, 6, 0, 0, 9, 579}, - {5, 6, 0, 0, 6, 585}, - {5, 6, 0, 0, 6, 591}, - {5, 8, 0, 2, 6, 597}, - {5, 8, 0, 2, 6, 605}, - {4, 6, 0, 0, 4, 613}, - {5, 6, 0, 0, 6, 619}, - {4, 8, 1, 0, 4, 625}, - {5, 6, 0, 0, 6, 633}, - {5, 6, 0, 0, 6, 639}, - {7, 6, 0, 0, 8, 645}, - {6, 6, 0, 0, 7, 651}, - {5, 8, 0, 2, 6, 657}, - {5, 6, 0, 0, 6, 665}, - {4, 10, 0, 2, 5, 671}, - {1, 10, -1, 2, 3, 681}, - {4, 10, 0, 2, 5, 691}, - {5, 2, 0, -3, 6, 701}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 3, 703}, - {2, 8, -1, 2, 4, 704}, - {5, 8, 0, 1, 6, 712}, - {5, 8, 0, 0, 6, 720}, - {6, 6, 0, -1, 6, 728}, - {6, 8, 0, 0, 7, 734}, - {1, 10, -1, 2, 3, 742}, - {5, 10, 0, 2, 6, 752}, - {3, 1, 0, -7, 3, 762}, - {8, 8, -1, 0, 10, 763}, - {3, 5, -1, -3, 5, 771}, - {6, 3, 0, -1, 7, 776}, - {5, 3, -1, -2, 7, 779}, - {4, 1, 0, -3, 5, 782}, - {8, 8, -1, 0, 10, 783}, - {3, 1, 0, -7, 3, 791}, - {3, 3, 0, -5, 4, 792}, - {6, 7, 0, 0, 6, 795}, - {3, 4, 0, -4, 3, 802}, - {3, 4, 0, -4, 3, 806}, - {2, 2, 0, -7, 3, 810}, - {5, 8, 0, 2, 6, 812}, - {6, 10, 0, 2, 6, 820}, - {2, 1, 0, -3, 3, 830}, - {2, 2, 0, 2, 3, 831}, - {2, 4, 0, -4, 3, 833}, - {3, 5, -1, -3, 5, 837}, - {6, 3, 0, -1, 7, 842}, - {8, 8, 0, 0, 9, 845}, - {7, 8, 0, 0, 9, 853}, - {8, 8, 0, 0, 9, 861}, - {5, 8, 0, 2, 6, 869}, - {7, 11, 0, 0, 8, 877}, - {7, 11, 0, 0, 8, 888}, - {7, 11, 0, 0, 8, 899}, - {7, 11, 0, 0, 8, 910}, - {7, 10, 0, 0, 8, 921}, - {7, 11, 0, 0, 8, 931}, - {9, 8, 0, 0, 10, 942}, - {7, 10, 0, 2, 8, 958}, - {5, 11, 0, 0, 6, 968}, - {5, 11, 0, 0, 6, 979}, - {5, 11, 0, 0, 6, 990}, - {5, 10, 0, 0, 6, 1001}, - {2, 11, 0, 0, 3, 1011}, - {2, 11, 0, 0, 3, 1022}, - {3, 11, 1, 0, 3, 1033}, - {4, 10, 1, 0, 3, 1044}, - {7, 8, 1, 0, 7, 1054}, - {7, 11, 0, 0, 8, 1062}, - {7, 11, 0, 0, 8, 1073}, - {7, 11, 0, 0, 8, 1084}, - {7, 11, 0, 0, 8, 1095}, - {7, 11, 0, 0, 8, 1106}, - {7, 10, 0, 0, 8, 1117}, - {6, 5, 0, -1, 6, 1127}, - {7, 8, 0, 0, 8, 1132}, - {6, 11, 0, 0, 7, 1140}, - {6, 11, 0, 0, 7, 1151}, - {6, 11, 0, 0, 7, 1162}, - {6, 10, 0, 0, 7, 1173}, - {8, 11, 0, 0, 9, 1183}, - {6, 8, 0, 0, 7, 1194}, - {5, 8, 0, 0, 6, 1202}, - {6, 9, 0, 0, 6, 1210}, - {6, 9, 0, 0, 6, 1219}, - {6, 9, 0, 0, 6, 1228}, - {6, 9, 0, 0, 6, 1237}, - {6, 8, 0, 0, 6, 1246}, - {6, 9, 0, 0, 6, 1254}, - {8, 6, 0, 0, 9, 1263}, - {4, 8, 0, 2, 5, 1269}, - {5, 9, 0, 0, 6, 1277}, - {5, 9, 0, 0, 6, 1286}, - {5, 9, 0, 0, 6, 1295}, - {5, 8, 0, 0, 6, 1304}, - {2, 9, 0, 0, 3, 1312}, - {2, 9, 0, 0, 3, 1321}, - {3, 9, 0, 0, 3, 1330}, - {3, 8, 0, 0, 3, 1339}, - {5, 9, 0, 0, 6, 1347}, - {5, 9, 0, 0, 6, 1356}, - {5, 9, 0, 0, 6, 1365}, - {5, 9, 0, 0, 6, 1374}, - {5, 9, 0, 0, 6, 1383}, - {5, 9, 0, 0, 6, 1392}, - {5, 8, 0, 0, 6, 1401}, - {6, 5, 0, -1, 6, 1409}, - {7, 6, 1, 0, 6, 1414}, - {5, 9, 0, 0, 6, 1420}, - {5, 9, 0, 0, 6, 1429}, - {5, 9, 0, 0, 6, 1438}, - {5, 8, 0, 0, 6, 1447}, - {5, 11, 0, 2, 6, 1455}, - {5, 10, 0, 2, 6, 1466}, - {5, 10, 0, 2, 6, 1476}, - }, - helvb10_bitmap_data, - 0 -}; - -#endif - diff --git a/source/blender/blenfont/intern/blf_font_helvb12.h b/source/blender/blenfont/intern/blf_font_helvb12.h deleted file mode 100644 index c8ac2d224b4..00000000000 --- a/source/blender/blenfont/intern/blf_font_helvb12.h +++ /dev/null @@ -1,559 +0,0 @@ -/** - * $Id: - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2009 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef BLF_FONT_HELVB12_H -#define BLF_FONT_HELVB12_H - -static unsigned char helvb12_bitmap_data[]= { - 0x00,0xc0,0xc0,0x00,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xa0,0xa0,0xa0,0x6c, - 0x00,0x6c,0x00,0x6c,0x00,0xff,0x00,0x36, - 0x00,0x36,0x00,0x36,0x00,0x7f,0x80,0x1b, - 0x00,0x1b,0x00,0x1b,0x00,0x30,0x30,0x78, - 0xec,0xac,0x3c,0x38,0x70,0xf0,0xd4,0xdc, - 0x78,0x30,0x63,0x80,0x37,0xc0,0x36,0xc0, - 0x1f,0xc0,0x1b,0x80,0x0c,0x00,0x76,0x00, - 0xfe,0x00,0xdb,0x00,0xfb,0x00,0x71,0x80, - 0x73,0x80,0xff,0x00,0xce,0x00,0xcf,0x00, - 0xdd,0x80,0x79,0x80,0x38,0x00,0x6c,0x00, - 0x6c,0x00,0x7c,0x00,0x38,0x00,0x80,0x40, - 0xc0,0xc0,0x30,0x60,0x60,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0x60,0x60,0x30, - 0xc0,0x60,0x60,0x30,0x30,0x30,0x30,0x30, - 0x30,0x30,0x30,0x60,0x60,0xc0,0xd8,0x70, - 0x70,0xf8,0x20,0x30,0x30,0xfc,0xfc,0x30, - 0x30,0x80,0x40,0xc0,0xc0,0xfc,0xfc,0xc0, - 0xc0,0xc0,0xc0,0xc0,0x60,0x60,0x60,0x20, - 0x30,0x30,0x30,0x18,0x18,0x18,0x78,0xfc, - 0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xcc,0xfc, - 0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0xf0,0xf0,0x30,0xfc,0xfc,0xc0,0x60, - 0x70,0x38,0x18,0xcc,0xcc,0xfc,0x78,0x78, - 0xfc,0xcc,0xcc,0x0c,0x38,0x38,0x0c,0xcc, - 0xfc,0x78,0x0c,0x0c,0xfe,0xfe,0xcc,0x6c, - 0x6c,0x3c,0x3c,0x1c,0x1c,0x78,0xfc,0xcc, - 0xcc,0x0c,0xfc,0xf8,0xc0,0xc0,0xfc,0xfc, - 0x78,0xfc,0xcc,0xcc,0xcc,0xfc,0xf8,0xc0, - 0xcc,0xfc,0x78,0x60,0x60,0x60,0x30,0x30, - 0x30,0x18,0x18,0x0c,0xfc,0xfc,0x78,0xfc, - 0xcc,0xcc,0xcc,0x78,0x78,0xcc,0xcc,0xfc, - 0x78,0x78,0xfc,0xcc,0x0c,0x7c,0xfc,0xcc, - 0xcc,0xcc,0xfc,0x78,0xc0,0xc0,0x00,0x00, - 0x00,0x00,0xc0,0xc0,0x80,0x40,0xc0,0xc0, - 0x00,0x00,0x00,0x00,0xc0,0xc0,0x0c,0x38, - 0xe0,0xe0,0x38,0x0c,0xfc,0xfc,0x00,0xfc, - 0xfc,0xc0,0x70,0x1c,0x1c,0x70,0xc0,0x30, - 0x30,0x00,0x30,0x30,0x38,0x1c,0xcc,0xcc, - 0xfc,0x78,0x1f,0x00,0x71,0x80,0x40,0x00, - 0xdd,0x80,0xb6,0xc0,0xb2,0x40,0xb3,0x60, - 0xdb,0x20,0x4d,0xa0,0x60,0x40,0x39,0xc0, - 0x0f,0x00,0xc3,0xc3,0xff,0x7e,0x66,0x66, - 0x3c,0x3c,0x3c,0x18,0x18,0xf8,0xfc,0xcc, - 0xcc,0xcc,0xf8,0xf8,0xcc,0xcc,0xfc,0xf8, - 0x78,0xfc,0xcc,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xcc,0xfc,0x78,0xf8,0xfc,0xce,0xc6,0xc6, - 0xc6,0xc6,0xc6,0xce,0xfc,0xf8,0xfc,0xfc, - 0xc0,0xc0,0xc0,0xf8,0xf8,0xc0,0xc0,0xfc, - 0xfc,0xc0,0xc0,0xc0,0xc0,0xc0,0xf8,0xf8, - 0xc0,0xc0,0xfc,0xfc,0x76,0xfe,0xc6,0xc6, - 0xde,0xde,0xc0,0xc0,0xc6,0xfe,0x7c,0xc6, - 0xc6,0xc6,0xc6,0xc6,0xfe,0xfe,0xc6,0xc6, - 0xc6,0xc6,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0x70,0xf8,0xd8, - 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, - 0xc6,0xce,0xcc,0xd8,0xf8,0xf0,0xf0,0xd8, - 0xcc,0xcc,0xc6,0xfc,0xfc,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc9,0x80, - 0xc9,0x80,0xdd,0x80,0xdd,0x80,0xf7,0x80, - 0xf7,0x80,0xe3,0x80,0xe3,0x80,0xe3,0x80, - 0xc1,0x80,0xc1,0x80,0xc6,0xc6,0xce,0xce, - 0xde,0xd6,0xf6,0xe6,0xe6,0xc6,0xc6,0x7c, - 0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, - 0xfe,0x7c,0xc0,0xc0,0xc0,0xc0,0xfc,0xfe, - 0xc6,0xc6,0xc6,0xfe,0xfc,0x06,0x7e,0xfc, - 0xce,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xfe, - 0x7c,0xc6,0xc6,0xc6,0xce,0xfc,0xfc,0xc6, - 0xc6,0xc6,0xfe,0xfc,0x78,0xfc,0xcc,0x0c, - 0x1c,0x78,0xe0,0xc0,0xcc,0xfc,0x78,0x30, - 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0xfc,0xfc,0x7c,0xfe,0xc6,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0xc6,0xc6,0x18,0x18,0x18, - 0x3c,0x3c,0x3c,0x66,0x66,0x66,0xc3,0xc3, - 0x33,0x00,0x33,0x00,0x33,0x00,0x3b,0x00, - 0x7f,0x80,0x6d,0x80,0x6d,0x80,0x6d,0x80, - 0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,0xc3,0xc3, - 0x66,0x7e,0x3c,0x18,0x3c,0x7e,0x66,0xc3, - 0xc3,0x18,0x18,0x18,0x18,0x18,0x3c,0x3c, - 0x66,0x66,0xc3,0xc3,0xfe,0xfe,0xc0,0x60, - 0x60,0x30,0x18,0x18,0x0c,0xfe,0xfe,0xe0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xe0,0x30,0x30,0x30, - 0x70,0x60,0x60,0x60,0xe0,0xc0,0xc0,0xc0, - 0xe0,0x60,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0xe0,0x88,0xd8, - 0x70,0x70,0x20,0xfe,0xc0,0xc0,0x80,0x40, - 0x76,0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78, - 0xd8,0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,0xd8, - 0xc0,0xc0,0xc0,0x78,0xfc,0xcc,0xc0,0xc0, - 0xcc,0xfc,0x78,0x6c,0xfc,0xcc,0xcc,0xcc, - 0xcc,0xfc,0x6c,0x0c,0x0c,0x0c,0x78,0xfc, - 0xc0,0xfc,0xfc,0xcc,0xfc,0x78,0x60,0x60, - 0x60,0x60,0x60,0x60,0xf0,0xf0,0x60,0x70, - 0x30,0x78,0xfc,0x0c,0x6c,0xfc,0xcc,0xcc, - 0xcc,0xcc,0xfc,0x6c,0xcc,0xcc,0xcc,0xcc, - 0xcc,0xec,0xfc,0xd8,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00, - 0xc0,0xc0,0xc0,0x60,0x60,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0x00,0x60,0x60, - 0xcc,0xd8,0xd8,0xf0,0xe0,0xf0,0xd8,0xcc, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xcc,0xc0, - 0xcc,0xc0,0xcc,0xc0,0xcc,0xc0,0xcc,0xc0, - 0xee,0xc0,0xff,0xc0,0xbb,0x80,0xcc,0xcc, - 0xcc,0xcc,0xcc,0xec,0xfc,0xd8,0x78,0xfc, - 0xcc,0xcc,0xcc,0xcc,0xfc,0x78,0xc0,0xc0, - 0xc0,0xd8,0xfc,0xcc,0xcc,0xcc,0xcc,0xfc, - 0xd8,0x0c,0x0c,0x0c,0x6c,0xfc,0xcc,0xcc, - 0xcc,0xcc,0xfc,0x6c,0xc0,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xe0,0xb0,0x78,0xfc,0xcc,0x1c, - 0x78,0xe0,0xfc,0x78,0x30,0x70,0x60,0x60, - 0x60,0x60,0xf0,0xf0,0x60,0x60,0x6c,0xfc, - 0xdc,0xcc,0xcc,0xcc,0xcc,0xcc,0x30,0x30, - 0x78,0x78,0x78,0xcc,0xcc,0xcc,0x24,0x24, - 0x76,0x76,0x7e,0xdb,0xdb,0xdb,0xcc,0xcc, - 0x78,0x38,0x70,0x78,0xcc,0xcc,0xe0,0xf0, - 0x30,0x30,0x38,0x78,0x78,0x48,0xcc,0xcc, - 0xcc,0xfc,0xfc,0x60,0x30,0x30,0x18,0xfc, - 0xfc,0x30,0x60,0x60,0x60,0x60,0x60,0x40, - 0x80,0x40,0x60,0x60,0x60,0x60,0x30,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0xc0,0x60,0x60,0x60, - 0x60,0x60,0x20,0x10,0x20,0x60,0x60,0x60, - 0x60,0xc0,0x98,0xfc,0x64,0xc0,0xc0,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0xc0,0xc0, - 0xc0,0x78,0xfc,0xec,0xe0,0xd0,0xd4,0xfc, - 0x78,0x0c,0xdc,0xfe,0x60,0x30,0x30,0xfc, - 0x30,0x60,0x64,0x7c,0x38,0xcc,0x78,0xcc, - 0xcc,0x78,0xcc,0x18,0x18,0x18,0x7e,0x18, - 0x7e,0x3c,0x66,0x66,0xc3,0xc3,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80, - 0x80,0x80,0x80,0x78,0xfc,0xcc,0x1c,0x38, - 0x6c,0xcc,0xcc,0xd8,0x70,0xe0,0xcc,0xfc, - 0x78,0xd8,0xd8,0x1f,0x00,0x71,0xc0,0x6e, - 0xc0,0xdb,0x60,0xdb,0x60,0xd8,0x60,0xdb, - 0x60,0xdb,0x60,0x6e,0xc0,0x71,0xc0,0x1f, - 0x00,0xf0,0x00,0xd0,0xb0,0x70,0xb0,0x60, - 0x36,0x6c,0xd8,0x6c,0x36,0x0c,0x0c,0xfc, - 0xfc,0xe0,0xe0,0x1f,0x00,0x71,0xc0,0x7b, - 0xc0,0xdb,0x60,0xdf,0x60,0xde,0x60,0xdb, - 0x60,0xdb,0x60,0x7e,0xc0,0x71,0xc0,0x1f, - 0x00,0xf0,0xf0,0x60,0x90,0x90,0x60,0xfc, - 0xfc,0x00,0x30,0x30,0xfc,0xfc,0x30,0x30, - 0xf0,0x40,0x20,0x10,0x90,0x60,0x60,0x90, - 0x10,0x20,0x90,0x60,0xc0,0x70,0x30,0xc0, - 0xc0,0xc0,0xec,0xfc,0xdc,0xcc,0xcc,0xcc, - 0xcc,0xcc,0x36,0x36,0x36,0x36,0x36,0x36, - 0x36,0x36,0x76,0xf6,0xf6,0xf6,0xfe,0x7e, - 0xc0,0xc0,0xc0,0x60,0x40,0x40,0x40,0x40, - 0x40,0xc0,0x40,0xf8,0x00,0x70,0xd8,0xd8, - 0xd8,0x70,0xd8,0x6c,0x36,0x6c,0xd8,0x20, - 0x80,0x27,0xc0,0x12,0x80,0x12,0x80,0x09, - 0x80,0x4c,0x80,0x44,0x00,0x42,0x00,0x42, - 0x00,0xc1,0x00,0x41,0x00,0x23,0xc0,0x21, - 0x00,0x10,0x80,0x10,0x40,0x0a,0x40,0x4d, - 0x80,0x44,0x00,0x42,0x00,0x42,0x00,0xc1, - 0x00,0x41,0x00,0x20,0x80,0x27,0xc0,0x12, - 0x80,0x12,0x80,0x09,0x80,0x6c,0x80,0x94, - 0x00,0x12,0x00,0x22,0x00,0x91,0x00,0x61, - 0x00,0x78,0xfc,0xcc,0xcc,0xe0,0x70,0x30, - 0x30,0x00,0x30,0x30,0xc3,0xc3,0x7e,0x7e, - 0x24,0x3c,0x18,0x18,0x00,0x0c,0x38,0x30, - 0xc3,0xc3,0x7e,0x7e,0x24,0x3c,0x18,0x18, - 0x00,0x30,0x1c,0x0c,0xc3,0xc3,0x7e,0x7e, - 0x24,0x3c,0x18,0x18,0x00,0x66,0x3c,0x18, - 0xc3,0xc3,0x7e,0x7e,0x24,0x3c,0x18,0x18, - 0x00,0x2c,0x3e,0x1a,0xc3,0xc3,0x7e,0x7e, - 0x24,0x3c,0x18,0x18,0x00,0x6c,0x6c,0xc3, - 0xc3,0x7e,0x7e,0x24,0x3c,0x18,0x18,0x00, - 0x18,0x34,0x18,0xc7,0xe0,0xc7,0xe0,0xfe, - 0x00,0x7e,0x00,0x66,0x00,0x67,0xc0,0x37, - 0xc0,0x36,0x00,0x3e,0x00,0x1f,0xe0,0x1f, - 0xe0,0x60,0x30,0x20,0x78,0xfc,0xcc,0xc0, - 0xc0,0xc0,0xc0,0xc0,0xcc,0xfc,0x78,0xfc, - 0xfc,0xc0,0xf8,0xf8,0xc0,0xfc,0xfc,0x00, - 0x18,0x70,0x60,0xfc,0xfc,0xc0,0xf8,0xf8, - 0xc0,0xfc,0xfc,0x00,0x60,0x38,0x18,0xfc, - 0xfc,0xc0,0xf8,0xf8,0xc0,0xfc,0xfc,0x00, - 0xcc,0x78,0x30,0xfc,0xfc,0xc0,0xf8,0xf8, - 0xc0,0xfc,0xfc,0x00,0xd8,0xd8,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0x60,0x00,0x30, - 0xe0,0xc0,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x60,0x00,0xc0,0x70,0x30,0x30,0x30, - 0x30,0x30,0x30,0x30,0x30,0x30,0x00,0xcc, - 0x78,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0x30,0x00,0xd8,0xd8,0x7c,0x7e,0x67, - 0x63,0x63,0xfb,0xfb,0x63,0x67,0x7e,0x7c, - 0xc6,0xce,0xce,0xde,0xf6,0xe6,0xe6,0xc6, - 0x00,0x58,0x7c,0x34,0x7c,0xfe,0xc6,0xc6, - 0xc6,0xc6,0xfe,0x7c,0x00,0x18,0x70,0x60, - 0x7c,0xfe,0xc6,0xc6,0xc6,0xc6,0xfe,0x7c, - 0x00,0x30,0x1c,0x0c,0x7c,0xfe,0xc6,0xc6, - 0xc6,0xc6,0xfe,0x7c,0x00,0xcc,0x78,0x30, - 0x7c,0xfe,0xc6,0xc6,0xc6,0xc6,0xfe,0x7c, - 0x00,0x58,0x7c,0x34,0x7c,0xfe,0xc6,0xc6, - 0xc6,0xc6,0xfe,0x7c,0x00,0x6c,0x6c,0xcc, - 0x78,0x30,0x30,0x78,0xcc,0xde,0x00,0x7f, - 0x00,0x63,0x00,0x73,0x00,0x7b,0x00,0x6b, - 0x00,0x6f,0x00,0x67,0x00,0x63,0x00,0x7f, - 0x00,0x3d,0x80,0x7c,0xfe,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0x00,0x18,0x70,0x60,0x7c, - 0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00, - 0x30,0x1c,0x0c,0x7c,0xfe,0xc6,0xc6,0xc6, - 0xc6,0xc6,0xc6,0x00,0xcc,0x78,0x30,0x7c, - 0xfe,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x00, - 0x6c,0x6c,0x18,0x18,0x18,0x18,0x3c,0x7e, - 0xe7,0xc3,0x00,0x30,0x1c,0x0c,0xc0,0xc0, - 0xfc,0xfe,0xc6,0xc6,0xc6,0xfe,0xfc,0xc0, - 0xc0,0xd8,0xdc,0xcc,0xcc,0xcc,0xd8,0xd8, - 0xcc,0xcc,0xfc,0x78,0x76,0xfc,0xcc,0xfc, - 0x7c,0x8c,0xfc,0x78,0x00,0x18,0x70,0x60, - 0x76,0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78, - 0x00,0x60,0x38,0x18,0x76,0xfc,0xcc,0xfc, - 0x7c,0x8c,0xfc,0x78,0x00,0xcc,0x78,0x30, - 0x76,0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78, - 0x00,0x58,0x7c,0x34,0x76,0xfc,0xcc,0xfc, - 0x7c,0x8c,0xfc,0x78,0x00,0xd8,0xd8,0x76, - 0xfc,0xcc,0xfc,0x7c,0x8c,0xfc,0x78,0x00, - 0x30,0x68,0x30,0x77,0x80,0xff,0xc0,0xcc, - 0x00,0xff,0xc0,0x7f,0xc0,0x8c,0xc0,0xff, - 0xc0,0x7b,0x80,0x60,0x30,0x20,0x78,0xfc, - 0xcc,0xc0,0xc0,0xcc,0xfc,0x78,0x78,0xfc, - 0xc0,0xfc,0xfc,0xcc,0xfc,0x78,0x00,0x18, - 0x70,0x60,0x78,0xfc,0xc0,0xfc,0xfc,0xcc, - 0xfc,0x78,0x00,0x60,0x38,0x18,0x78,0xfc, - 0xc0,0xfc,0xfc,0xcc,0xfc,0x78,0x00,0xcc, - 0x78,0x30,0x78,0xfc,0xc0,0xfc,0xfc,0xcc, - 0xfc,0x78,0x00,0xd8,0xd8,0x60,0x60,0x60, - 0x60,0x60,0x60,0x60,0x60,0x00,0x30,0xe0, - 0xc0,0x60,0x60,0x60,0x60,0x60,0x60,0x60, - 0x60,0x00,0xc0,0x70,0x30,0x30,0x30,0x30, - 0x30,0x30,0x30,0x30,0x30,0x00,0xcc,0x78, - 0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, - 0x30,0x00,0xd8,0xd8,0x78,0xfc,0xcc,0xcc, - 0xcc,0xcc,0xfc,0x78,0xb0,0x60,0xd0,0xcc, - 0xcc,0xcc,0xcc,0xcc,0xec,0xfc,0xd8,0x00, - 0xb0,0xf8,0x68,0x78,0xfc,0xcc,0xcc,0xcc, - 0xcc,0xfc,0x78,0x00,0x18,0x70,0x60,0x78, - 0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,0x78,0x00, - 0x60,0x38,0x18,0x78,0xfc,0xcc,0xcc,0xcc, - 0xcc,0xfc,0x78,0x00,0xcc,0x78,0x30,0x78, - 0xfc,0xcc,0xcc,0xcc,0xcc,0xfc,0x78,0x00, - 0xb0,0xf8,0x68,0x78,0xfc,0xcc,0xcc,0xcc, - 0xcc,0xfc,0x78,0x00,0xd8,0xd8,0x30,0x30, - 0x00,0xfc,0xfc,0x00,0x30,0x30,0xc0,0x78, - 0xfc,0xcc,0xec,0xdc,0xcc,0xfc,0x78,0x0c, - 0x6c,0xfc,0xdc,0xcc,0xcc,0xcc,0xcc,0xcc, - 0x00,0x18,0x70,0x60,0x6c,0xfc,0xdc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0x00,0x60,0x38,0x18, - 0x6c,0xfc,0xdc,0xcc,0xcc,0xcc,0xcc,0xcc, - 0x00,0xcc,0x78,0x30,0x6c,0xfc,0xdc,0xcc, - 0xcc,0xcc,0xcc,0xcc,0x00,0xd8,0xd8,0xe0, - 0xf0,0x30,0x30,0x38,0x78,0x78,0x48,0xcc, - 0xcc,0xcc,0x00,0x60,0x38,0x18,0xc0,0xc0, - 0xc0,0xd8,0xfc,0xcc,0xcc,0xcc,0xcc,0xfc, - 0xd8,0xc0,0xc0,0xc0,0xe0,0xf0,0x30,0x30, - 0x38,0x78,0x78,0x48,0xcc,0xcc,0xcc,0x00, - 0xd8,0xd8, -}; - -FontDataBLF blf_font_helvb12 = { - -1, -3, - 11, 12, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 12, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 3, 0}, - {2, 11, -1, 0, 4, 1}, - {3, 3, 0, -8, 4, 12}, - {9, 11, 1, 0, 7, 15}, - {6, 13, 0, 2, 7, 37}, - {10, 11, 0, 0, 11, 50}, - {9, 11, 0, 0, 9, 72}, - {2, 4, 0, -7, 3, 94}, - {4, 14, 0, 3, 4, 98}, - {4, 14, 1, 3, 4, 112}, - {5, 5, 0, -6, 6, 126}, - {6, 6, 0, -1, 7, 131}, - {2, 4, 0, 2, 3, 137}, - {6, 2, -1, -3, 9, 141}, - {2, 2, 0, 0, 3, 143}, - {5, 13, 1, 2, 4, 145}, - {6, 11, 0, 0, 7, 158}, - {4, 11, 0, 0, 6, 169}, - {6, 11, 0, 0, 7, 180}, - {6, 11, 0, 0, 7, 191}, - {7, 11, 0, 0, 7, 202}, - {6, 11, 0, 0, 7, 213}, - {6, 11, 0, 0, 7, 224}, - {6, 11, 0, 0, 7, 235}, - {6, 11, 0, 0, 7, 246}, - {6, 11, 0, 0, 7, 257}, - {2, 8, -1, 0, 4, 268}, - {2, 10, -1, 2, 4, 276}, - {6, 6, 0, -1, 7, 286}, - {6, 5, 0, -2, 7, 292}, - {6, 6, 0, -1, 7, 297}, - {6, 11, 0, 0, 7, 303}, - {11, 12, 0, 1, 12, 314}, - {8, 11, 0, 0, 8, 338}, - {6, 11, -1, 0, 8, 349}, - {6, 11, -1, 0, 8, 360}, - {7, 11, -1, 0, 9, 371}, - {6, 11, -1, 0, 8, 382}, - {6, 11, -1, 0, 7, 393}, - {7, 11, -1, 0, 9, 404}, - {7, 11, -1, 0, 9, 415}, - {2, 11, -2, 0, 6, 426}, - {5, 11, 0, 0, 6, 437}, - {7, 11, -1, 0, 8, 448}, - {6, 11, -1, 0, 7, 459}, - {9, 11, -1, 0, 11, 470}, - {7, 11, -1, 0, 9, 492}, - {7, 11, -1, 0, 9, 503}, - {7, 11, -1, 0, 9, 514}, - {7, 12, -1, 1, 9, 525}, - {7, 11, -1, 0, 9, 537}, - {6, 11, -1, 0, 8, 548}, - {6, 11, 0, 0, 6, 559}, - {7, 11, -1, 0, 9, 570}, - {8, 11, 0, 0, 8, 581}, - {10, 11, 0, 0, 10, 592}, - {8, 11, 0, 0, 8, 614}, - {8, 11, 0, 0, 8, 625}, - {7, 11, 0, 0, 7, 636}, - {3, 14, 0, 3, 4, 647}, - {4, 11, 0, 0, 5, 661}, - {3, 14, 0, 3, 4, 672}, - {5, 5, 0, -6, 7, 686}, - {7, 1, 0, 2, 7, 691}, - {2, 4, 0, -7, 3, 692}, - {7, 8, 0, 0, 7, 696}, - {6, 11, 0, 0, 7, 704}, - {6, 8, 0, 0, 7, 715}, - {6, 11, 0, 0, 7, 723}, - {6, 8, 0, 0, 7, 734}, - {4, 11, 0, 0, 5, 742}, - {6, 11, 0, 3, 7, 753}, - {6, 11, 0, 0, 7, 764}, - {2, 11, -1, 0, 5, 775}, - {3, 14, 0, 3, 5, 786}, - {6, 11, 0, 0, 6, 800}, - {2, 11, -1, 0, 5, 811}, - {10, 8, 0, 0, 11, 822}, - {6, 8, 0, 0, 7, 838}, - {6, 8, 0, 0, 7, 846}, - {6, 11, 0, 3, 7, 854}, - {6, 11, 0, 3, 7, 865}, - {4, 8, 0, 0, 4, 876}, - {6, 8, 0, 0, 7, 884}, - {4, 10, 0, 0, 5, 892}, - {6, 8, 0, 0, 7, 902}, - {6, 8, 0, 0, 7, 910}, - {8, 8, 0, 0, 9, 918}, - {6, 8, 0, 0, 7, 926}, - {6, 11, 0, 3, 7, 934}, - {6, 8, 0, 0, 7, 945}, - {4, 14, 0, 3, 4, 953}, - {1, 13, -1, 2, 3, 967}, - {4, 14, 0, 3, 4, 980}, - {6, 3, 0, -3, 7, 994}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {2, 11, 0, 3, 3, 997}, - {6, 10, 0, 1, 7, 1008}, - {7, 11, 0, 0, 7, 1018}, - {6, 6, 0, -3, 7, 1029}, - {8, 11, 1, 0, 7, 1035}, - {1, 13, -1, 2, 3, 1046}, - {6, 14, 0, 3, 7, 1059}, - {5, 2, 0, -9, 5, 1073}, - {11, 11, 0, 0, 12, 1075}, - {4, 7, 0, -4, 5, 1097}, - {7, 5, 0, -2, 8, 1104}, - {6, 4, -1, -3, 9, 1109}, - {3, 2, 0, -3, 4, 1113}, - {11, 11, 0, 0, 12, 1115}, - {4, 2, 0, -9, 4, 1137}, - {4, 4, -1, -7, 6, 1139}, - {6, 9, 0, -1, 7, 1143}, - {4, 6, 0, -5, 4, 1152}, - {4, 6, 0, -5, 4, 1158}, - {4, 3, -1, -9, 4, 1164}, - {6, 11, 0, 3, 7, 1167}, - {7, 14, -1, 3, 10, 1178}, - {2, 2, 0, -5, 3, 1192}, - {3, 3, -1, 3, 5, 1194}, - {2, 6, 0, -5, 4, 1197}, - {5, 7, 0, -4, 6, 1203}, - {7, 5, 0, -2, 8, 1210}, - {10, 11, 0, 0, 11, 1215}, - {10, 11, 0, 0, 11, 1237}, - {10, 11, 0, 0, 11, 1259}, - {6, 11, 0, 3, 7, 1281}, - {8, 12, 0, 0, 8, 1292}, - {8, 12, 0, 0, 8, 1304}, - {8, 12, 0, 0, 8, 1316}, - {8, 12, 0, 0, 8, 1328}, - {8, 11, 0, 0, 8, 1340}, - {8, 12, 0, 0, 8, 1351}, - {11, 11, 0, 0, 12, 1363}, - {6, 14, -1, 3, 8, 1385}, - {6, 12, -1, 0, 8, 1399}, - {6, 12, -1, 0, 8, 1411}, - {6, 12, -1, 0, 8, 1423}, - {6, 11, -1, 0, 8, 1435}, - {4, 12, -1, 0, 6, 1446}, - {4, 12, -1, 0, 6, 1458}, - {6, 12, 0, 0, 6, 1470}, - {5, 11, 0, 0, 6, 1482}, - {8, 11, 0, 0, 9, 1493}, - {7, 12, -1, 0, 9, 1504}, - {7, 12, -1, 0, 9, 1516}, - {7, 12, -1, 0, 9, 1528}, - {7, 12, -1, 0, 9, 1540}, - {7, 12, -1, 0, 9, 1552}, - {7, 11, -1, 0, 9, 1564}, - {6, 6, 0, -1, 7, 1575}, - {9, 11, 0, 0, 9, 1581}, - {7, 12, -1, 0, 9, 1603}, - {7, 12, -1, 0, 9, 1615}, - {7, 12, -1, 0, 9, 1627}, - {7, 11, -1, 0, 9, 1639}, - {8, 12, 0, 0, 8, 1650}, - {7, 11, -1, 0, 9, 1662}, - {6, 11, 0, 0, 7, 1673}, - {7, 12, 0, 0, 7, 1684}, - {7, 12, 0, 0, 7, 1696}, - {7, 12, 0, 0, 7, 1708}, - {7, 12, 0, 0, 7, 1720}, - {7, 11, 0, 0, 7, 1732}, - {7, 12, 0, 0, 7, 1743}, - {10, 8, 0, 0, 11, 1755}, - {6, 11, 0, 3, 7, 1771}, - {6, 12, 0, 0, 7, 1782}, - {6, 12, 0, 0, 7, 1794}, - {6, 12, 0, 0, 7, 1806}, - {6, 11, 0, 0, 7, 1818}, - {4, 12, 0, 0, 5, 1829}, - {4, 12, 0, 0, 5, 1841}, - {6, 12, 1, 0, 5, 1853}, - {5, 11, 1, 0, 5, 1865}, - {6, 11, 0, 0, 7, 1876}, - {6, 12, 0, 0, 7, 1887}, - {6, 12, 0, 0, 7, 1899}, - {6, 12, 0, 0, 7, 1911}, - {6, 12, 0, 0, 7, 1923}, - {6, 12, 0, 0, 7, 1935}, - {6, 11, 0, 0, 7, 1947}, - {6, 8, 0, 0, 7, 1958}, - {6, 10, 0, 1, 7, 1966}, - {6, 12, 0, 0, 7, 1976}, - {6, 12, 0, 0, 7, 1988}, - {6, 12, 0, 0, 7, 2000}, - {6, 11, 0, 0, 7, 2012}, - {6, 15, 0, 3, 7, 2023}, - {6, 14, 0, 3, 7, 2038}, - {6, 14, 0, 3, 7, 2052}, - }, - helvb12_bitmap_data, - 0 -}; - -#endif /* BLF_FONT_HELVB12_H */ diff --git a/source/blender/blenfont/intern/blf_font_helvb8.h b/source/blender/blenfont/intern/blf_font_helvb8.h deleted file mode 100644 index 1e4682f1f5b..00000000000 --- a/source/blender/blenfont/intern/blf_font_helvb8.h +++ /dev/null @@ -1,449 +0,0 @@ -/** - * $Id: - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2009 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef BLF_FONT_HELVB8_H -#define BLF_FONT_HELVB8_H - -static unsigned char helvb8_bitmap_data[]= { - 0x00,0x80,0x00,0x80,0x80,0x80,0x80,0xa0, - 0xa0,0xa0,0x50,0xf8,0x50,0xf8,0x50,0x40, - 0xe0,0x10,0x60,0x80,0x70,0x20,0x5c,0x54, - 0x2c,0xd0,0xa8,0xe8,0x58,0xb0,0xa8,0x48, - 0xa0,0x40,0x80,0x80,0x80,0x40,0x80,0x80, - 0x80,0x80,0x80,0x40,0x80,0x40,0x40,0x40, - 0x40,0x40,0x80,0x40,0xe0,0x40,0x20,0x20, - 0xf8,0x20,0x20,0x80,0x40,0x40,0xf0,0x80, - 0x80,0x80,0x80,0x80,0x40,0x40,0x40,0x60, - 0x90,0x90,0x90,0x90,0x60,0x40,0x40,0x40, - 0x40,0xc0,0x40,0xf0,0x40,0x20,0x10,0x90, - 0x60,0xc0,0x20,0x20,0xc0,0x20,0xc0,0x20, - 0x20,0xf0,0x60,0x20,0x20,0xc0,0x20,0x20, - 0xc0,0x80,0xe0,0x60,0x90,0x90,0xe0,0x80, - 0x70,0x40,0x40,0x40,0x20,0x10,0xf0,0x60, - 0x90,0x90,0x60,0x90,0x60,0x60,0x10,0x70, - 0x90,0x90,0x60,0x80,0x00,0x00,0x80,0x80, - 0x40,0x40,0x00,0x00,0x40,0x20,0x40,0x80, - 0x40,0x20,0xe0,0x00,0xe0,0x80,0x40,0x20, - 0x40,0x80,0x40,0x00,0x40,0x20,0xc0,0x78, - 0x80,0x9e,0xa5,0x99,0x41,0x3e,0x88,0x88, - 0x70,0x50,0x20,0x20,0xe0,0x90,0x90,0xe0, - 0x90,0xe0,0x70,0x88,0x80,0x80,0x88,0x70, - 0xf0,0x88,0x88,0x88,0x88,0xf0,0xf0,0x80, - 0x80,0xe0,0x80,0xf0,0x80,0x80,0x80,0xe0, - 0x80,0xf0,0x70,0x88,0x88,0x98,0x80,0x70, - 0x88,0x88,0x88,0xf8,0x88,0x88,0x80,0x80, - 0x80,0x80,0x80,0x80,0x40,0xa0,0x20,0x20, - 0x20,0x20,0x90,0x90,0xe0,0xc0,0xa0,0x90, - 0xe0,0x80,0x80,0x80,0x80,0x80,0xa8,0xa8, - 0xa8,0xa8,0xd8,0x88,0x88,0x98,0xa8,0xa8, - 0xc8,0x88,0x70,0x88,0x88,0x88,0x88,0x70, - 0x80,0x80,0xe0,0x90,0x90,0xe0,0x10,0x20, - 0x70,0x88,0x88,0x88,0x88,0x70,0x90,0x90, - 0xe0,0x90,0x90,0xe0,0xe0,0x10,0x10,0xe0, - 0x80,0x70,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x70,0x88,0x88,0x88,0x88,0x88,0x40,0xa0, - 0x90,0x90,0x90,0x90,0x48,0x48,0x6c,0x92, - 0x92,0x92,0x90,0x90,0x60,0x60,0x90,0x90, - 0x20,0x20,0x30,0x48,0x48,0xc8,0xf0,0x80, - 0x40,0x20,0x10,0xf0,0xc0,0x80,0x80,0x80, - 0x80,0x80,0xc0,0x40,0x40,0x40,0x40,0x80, - 0x80,0x80,0xc0,0x40,0x40,0x40,0x40,0x40, - 0xc0,0x88,0x50,0x20,0xf8,0x80,0x80,0x80, - 0xd0,0xa0,0xe0,0x20,0xc0,0xe0,0x90,0x90, - 0x90,0xe0,0x80,0x80,0x60,0x80,0x80,0x80, - 0x60,0x70,0x90,0x90,0x90,0x70,0x10,0x10, - 0x60,0x80,0xe0,0xa0,0x40,0x40,0x40,0x40, - 0x40,0xe0,0x40,0x20,0x60,0x10,0x70,0x90, - 0x90,0x70,0x90,0x90,0x90,0x90,0xe0,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80, - 0x80,0x40,0x40,0x40,0x40,0x40,0x40,0x00, - 0x40,0xa0,0xa0,0xc0,0xc0,0xa0,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xa8, - 0xa8,0xa8,0xa8,0xf0,0x90,0x90,0x90,0x90, - 0xe0,0x60,0x90,0x90,0x90,0x60,0x80,0xe0, - 0x90,0x90,0x90,0xe0,0x10,0x70,0x90,0x90, - 0x90,0x70,0x80,0x80,0x80,0xc0,0xa0,0xc0, - 0x20,0x60,0x80,0x60,0x40,0x40,0x40,0x40, - 0xe0,0x40,0x40,0x60,0xa0,0xa0,0xa0,0xa0, - 0x40,0xa0,0x90,0x90,0x90,0x50,0x50,0xa8, - 0xa8,0xa8,0x90,0x90,0x60,0x90,0x90,0x80, - 0x40,0x60,0x90,0x90,0x90,0xe0,0x80,0x40, - 0x20,0xe0,0x20,0x40,0x40,0xc0,0x40,0x40, - 0x20,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x40,0x40,0x60,0x40,0x40,0x80,0xb0, - 0x48,0x00,0x80,0x80,0x80,0x80,0x80,0x00, - 0x80,0x40,0x40,0xa0,0x80,0xa0,0x40,0x40, - 0xf0,0x40,0x40,0xe0,0x40,0x30,0x88,0x70, - 0x50,0x70,0x88,0x20,0x20,0xf8,0x50,0x88, - 0x80,0x80,0x80,0x00,0x80,0x80,0x80,0xe0, - 0x10,0x30,0x60,0x90,0x60,0x80,0x70,0x90, - 0x78,0x84,0xb4,0xa4,0xb4,0x84,0x78,0xe0, - 0x00,0xe0,0x20,0xc0,0x50,0xa0,0x50,0x10, - 0x10,0xf0,0xc0,0x78,0x84,0xac,0xb4,0xb4, - 0x84,0x78,0xe0,0x40,0xa0,0x40,0xf0,0x00, - 0x20,0xf0,0x20,0xc0,0x80,0x40,0x80,0xc0, - 0x20,0x60,0xe0,0x80,0x40,0x80,0x80,0xe0, - 0xa0,0xa0,0xa0,0x50,0x50,0x50,0x50,0xd0, - 0xd0,0xd0,0x78,0x80,0x80,0x80,0x40,0x40, - 0x40,0xc0,0x40,0xe0,0x00,0xe0,0xa0,0xe0, - 0xa0,0x50,0xa0,0x04,0x5e,0x2c,0x54,0x48, - 0xc4,0x40,0x0e,0x44,0x22,0x5c,0x48,0xc4, - 0x40,0x04,0x5e,0x2c,0xd4,0x28,0x64,0xe0, - 0x60,0x90,0x40,0x20,0x00,0x20,0x88,0x88, - 0x70,0x50,0x20,0x20,0x00,0x20,0x40,0x88, - 0x88,0x70,0x50,0x20,0x20,0x00,0x20,0x10, - 0x88,0x88,0x70,0x50,0x20,0x20,0x00,0x50, - 0x20,0x88,0x88,0x70,0x50,0x20,0x20,0x00, - 0x50,0x28,0x88,0x88,0x70,0x50,0x20,0x20, - 0x00,0x50,0x88,0x88,0x70,0x50,0x20,0x20, - 0x20,0x50,0x20,0x9e,0x90,0x7c,0x50,0x30, - 0x3e,0x80,0x40,0x70,0x88,0x80,0x88,0x88, - 0x70,0xf0,0x80,0x80,0xe0,0x80,0xf0,0x00, - 0x20,0x40,0xf0,0x80,0x80,0xe0,0x80,0xf0, - 0x00,0x40,0x20,0xf0,0x80,0x80,0xe0,0x80, - 0xf0,0x00,0xa0,0x40,0xf0,0x80,0x80,0xe0, - 0x80,0xf0,0x00,0xa0,0x40,0x40,0x40,0x40, - 0x40,0x40,0x00,0x40,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x00,0x80,0x40,0x40,0x40, - 0x40,0x40,0x40,0x40,0x00,0xa0,0x40,0x40, - 0x40,0x40,0x40,0x40,0x40,0x00,0xa0,0x70, - 0x48,0x48,0xe8,0x48,0x70,0x88,0x98,0xa8, - 0xa8,0xc8,0x88,0x00,0x50,0x28,0x70,0x88, - 0x88,0x88,0x88,0x70,0x00,0x20,0x40,0x70, - 0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x10, - 0x70,0x88,0x88,0x88,0x88,0x70,0x00,0x50, - 0x20,0x70,0x88,0x88,0x88,0x88,0x70,0x00, - 0x50,0x28,0x70,0x88,0x88,0x88,0x88,0x70, - 0x00,0x50,0x90,0x60,0x60,0x90,0x80,0xf0, - 0xc8,0xa8,0x98,0x88,0x78,0x08,0x70,0x88, - 0x88,0x88,0x88,0x88,0x00,0x20,0x40,0x70, - 0x88,0x88,0x88,0x88,0x88,0x00,0x20,0x10, - 0x70,0x88,0x88,0x88,0x88,0x88,0x00,0x50, - 0x20,0x70,0x88,0x88,0x88,0x88,0x88,0x00, - 0x50,0x20,0x20,0x30,0x48,0x48,0xc8,0x00, - 0x10,0x08,0x80,0xf0,0x88,0x88,0xf0,0x80, - 0x80,0xa0,0x90,0x90,0xa0,0x90,0x60,0xd0, - 0xa0,0xe0,0x20,0xc0,0x00,0x40,0x80,0xd0, - 0xa0,0xe0,0x20,0xc0,0x00,0x40,0x20,0xd0, - 0xa0,0xe0,0x20,0xc0,0x00,0xa0,0x40,0x68, - 0x50,0x70,0x10,0x60,0x00,0xb0,0x68,0xd0, - 0xa0,0xe0,0x20,0xc0,0x00,0xa0,0xd0,0xa0, - 0xe0,0x20,0xc0,0x40,0xa0,0x40,0xd8,0xa0, - 0xf8,0x28,0xd0,0x80,0x40,0x60,0x80,0x80, - 0x80,0x60,0x60,0x80,0xe0,0xa0,0x40,0x00, - 0x20,0x40,0x60,0x80,0xe0,0xa0,0x40,0x00, - 0x40,0x20,0x60,0x80,0xe0,0xa0,0x40,0x00, - 0xa0,0x40,0x60,0x80,0xe0,0xa0,0x40,0x00, - 0xa0,0x40,0x40,0x40,0x40,0x40,0x00,0x40, - 0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x80, - 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0, - 0x40,0x40,0x40,0x40,0x40,0x40,0x00,0xa0, - 0x60,0x90,0x90,0x90,0x70,0xa0,0x60,0x90, - 0x90,0x90,0x90,0x90,0xe0,0x00,0xa0,0x50, - 0x60,0x90,0x90,0x90,0x60,0x00,0x20,0x40, - 0x60,0x90,0x90,0x90,0x60,0x00,0x20,0x10, - 0x60,0x90,0x90,0x90,0x60,0x00,0xa0,0x40, - 0x60,0x90,0x90,0x90,0x60,0x00,0xa0,0x50, - 0x60,0x90,0x90,0x90,0x60,0x00,0x90,0x20, - 0x00,0xf0,0x00,0x20,0x80,0x70,0x68,0x58, - 0x48,0x3c,0x02,0x60,0xa0,0xa0,0xa0,0xa0, - 0x00,0x40,0x80,0x60,0xa0,0xa0,0xa0,0xa0, - 0x00,0x40,0x20,0x60,0xa0,0xa0,0xa0,0xa0, - 0x00,0xa0,0x40,0x60,0xa0,0xa0,0xa0,0xa0, - 0x00,0xa0,0x80,0x40,0x60,0x90,0x90,0x90, - 0x00,0x20,0x10,0x80,0xe0,0x90,0x90,0x90, - 0xe0,0x80,0x80,0x40,0x60,0x90,0x90,0x90, - 0x00,0x50, -}; - -FontDataBLF blf_font_helvb8 = { - 0, -2, - 9, 9, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 8, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 2, 0}, - {1, 6, -1, 0, 2, 1}, - {3, 3, -1, -3, 3, 7}, - {5, 5, 0, 0, 5, 10}, - {4, 7, -1, 1, 5, 15}, - {6, 6, -1, 0, 7, 22}, - {5, 6, -1, 0, 6, 28}, - {1, 3, -1, -3, 2, 34}, - {2, 7, -1, 1, 3, 37}, - {2, 7, -1, 1, 3, 44}, - {3, 3, -1, -2, 3, 51}, - {5, 5, -1, 0, 5, 54}, - {2, 3, 0, 2, 2, 59}, - {4, 1, -2, -2, 6, 62}, - {1, 1, -1, 0, 2, 63}, - {2, 7, -1, 1, 2, 64}, - {4, 6, -1, 0, 5, 71}, - {2, 6, -2, 0, 5, 77}, - {4, 6, -1, 0, 5, 83}, - {3, 6, -2, 0, 5, 89}, - {4, 6, -1, 0, 5, 95}, - {3, 6, -2, 0, 5, 101}, - {4, 6, -1, 0, 5, 107}, - {4, 6, -1, 0, 5, 113}, - {4, 6, -1, 0, 5, 119}, - {4, 6, -1, 0, 5, 125}, - {1, 4, -1, 0, 2, 131}, - {2, 6, 0, 2, 2, 135}, - {3, 5, -1, 0, 5, 141}, - {3, 3, -1, -1, 4, 146}, - {3, 5, -2, 0, 5, 149}, - {3, 5, -2, 0, 5, 154}, - {8, 7, -1, 1, 9, 159}, - {5, 6, -1, 0, 6, 166}, - {4, 6, -2, 0, 6, 172}, - {5, 6, -1, 0, 6, 178}, - {5, 6, -1, 0, 6, 184}, - {4, 6, -2, 0, 6, 190}, - {4, 6, -2, 0, 5, 196}, - {5, 6, -1, 0, 6, 202}, - {5, 6, -1, 0, 6, 208}, - {1, 6, -1, 0, 2, 214}, - {3, 6, -1, 0, 4, 220}, - {4, 6, -2, 0, 6, 226}, - {3, 6, -2, 0, 5, 232}, - {5, 6, -2, 0, 7, 238}, - {5, 6, -1, 0, 6, 244}, - {5, 6, -1, 0, 6, 250}, - {4, 6, -2, 0, 6, 256}, - {5, 8, -1, 2, 6, 262}, - {4, 6, -2, 0, 6, 270}, - {4, 6, -2, 0, 6, 276}, - {3, 6, -1, 0, 4, 282}, - {5, 6, -1, 0, 6, 288}, - {4, 6, -2, 0, 6, 294}, - {7, 6, -1, 0, 7, 300}, - {4, 6, -2, 0, 6, 306}, - {5, 6, -1, 0, 6, 312}, - {4, 6, -2, 0, 6, 318}, - {2, 7, -1, 1, 2, 324}, - {2, 7, 0, 1, 2, 331}, - {2, 7, 0, 1, 2, 338}, - {5, 3, 0, -2, 5, 345}, - {5, 1, 0, 1, 5, 348}, - {1, 3, -1, -3, 2, 349}, - {4, 5, -1, 0, 4, 352}, - {4, 7, -1, 0, 5, 357}, - {3, 5, -1, 0, 4, 364}, - {4, 7, -1, 0, 5, 369}, - {3, 5, -1, 0, 4, 376}, - {3, 7, -1, 0, 3, 381}, - {4, 6, -1, 1, 5, 388}, - {4, 7, -1, 0, 5, 394}, - {1, 7, -1, 0, 2, 401}, - {2, 9, 0, 2, 2, 408}, - {3, 7, -1, 0, 4, 417}, - {1, 7, -1, 0, 2, 424}, - {5, 5, -1, 0, 6, 431}, - {4, 5, -1, 0, 5, 436}, - {4, 5, -1, 0, 5, 441}, - {4, 6, -1, 1, 5, 446}, - {4, 6, -1, 1, 5, 452}, - {3, 5, -1, 0, 3, 458}, - {3, 5, -1, 0, 4, 463}, - {3, 7, -1, 0, 3, 468}, - {3, 5, -1, 0, 4, 475}, - {4, 5, -1, 0, 5, 480}, - {5, 5, -1, 0, 6, 485}, - {4, 5, -1, 0, 5, 490}, - {4, 6, -1, 1, 4, 495}, - {3, 5, -1, 0, 4, 501}, - {3, 7, 0, 1, 2, 506}, - {1, 7, -1, 1, 2, 513}, - {3, 7, 0, 1, 2, 520}, - {5, 2, -1, -2, 6, 527}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 1, 0, 0, 2, 529}, - {1, 7, -1, 2, 2, 530}, - {3, 7, -1, 1, 5, 537}, - {4, 6, -1, 0, 5, 544}, - {5, 5, 0, 0, 4, 550}, - {5, 5, -1, 0, 6, 555}, - {1, 7, -1, 1, 2, 560}, - {4, 8, -1, 2, 5, 567}, - {4, 1, 0, -5, 2, 575}, - {6, 7, -1, 1, 7, 576}, - {3, 5, 0, -1, 3, 583}, - {4, 3, -1, -1, 5, 588}, - {4, 3, -1, -1, 6, 591}, - {2, 1, 0, -2, 3, 594}, - {6, 7, -1, 1, 7, 595}, - {3, 1, 0, -5, 2, 602}, - {3, 3, -1, -3, 3, 603}, - {4, 5, -1, 0, 5, 606}, - {2, 4, -1, -2, 2, 611}, - {3, 4, 0, -2, 2, 615}, - {2, 2, 0, -4, 2, 619}, - {3, 6, -1, 2, 4, 621}, - {5, 8, 0, 2, 5, 627}, - {1, 2, -1, -1, 2, 635}, - {2, 2, 0, 2, 2, 637}, - {2, 4, 0, -2, 2, 639}, - {3, 5, 0, -1, 3, 643}, - {4, 3, -1, -1, 5, 648}, - {7, 7, 0, 1, 7, 651}, - {7, 7, 0, 1, 7, 658}, - {7, 7, 0, 1, 7, 665}, - {4, 6, -1, 1, 5, 672}, - {5, 9, -1, 0, 6, 678}, - {5, 9, -1, 0, 6, 687}, - {5, 9, -1, 0, 6, 696}, - {5, 9, -1, 0, 6, 705}, - {5, 8, -1, 0, 6, 714}, - {5, 9, -1, 0, 6, 722}, - {7, 6, -1, 0, 8, 731}, - {5, 8, -1, 2, 6, 737}, - {4, 9, -2, 0, 6, 745}, - {4, 9, -2, 0, 6, 754}, - {4, 9, -2, 0, 6, 763}, - {4, 8, -2, 0, 6, 772}, - {2, 9, 0, 0, 2, 780}, - {2, 9, -1, 0, 2, 789}, - {3, 9, 0, 0, 2, 798}, - {3, 8, 0, 0, 2, 807}, - {5, 6, -1, 0, 6, 815}, - {5, 9, -1, 0, 6, 821}, - {5, 9, -1, 0, 6, 830}, - {5, 9, -1, 0, 6, 839}, - {5, 9, -1, 0, 6, 848}, - {5, 9, -1, 0, 6, 857}, - {5, 8, -1, 0, 6, 866}, - {4, 4, -1, 0, 5, 874}, - {5, 8, -1, 1, 6, 878}, - {5, 9, -1, 0, 6, 886}, - {5, 9, -1, 0, 6, 895}, - {5, 9, -1, 0, 6, 904}, - {5, 8, -1, 0, 6, 913}, - {5, 9, -1, 0, 6, 921}, - {5, 6, -1, 0, 6, 930}, - {4, 7, -2, 1, 6, 936}, - {4, 8, -1, 0, 4, 943}, - {4, 8, -1, 0, 4, 951}, - {4, 8, -1, 0, 4, 959}, - {5, 8, 0, 0, 4, 967}, - {4, 7, -1, 0, 4, 975}, - {4, 8, -1, 0, 4, 982}, - {5, 5, -1, 0, 6, 990}, - {3, 7, -1, 2, 4, 995}, - {3, 8, -1, 0, 4, 1002}, - {3, 8, -1, 0, 4, 1010}, - {3, 8, -1, 0, 4, 1018}, - {3, 7, -1, 0, 4, 1026}, - {2, 8, 0, 0, 2, 1033}, - {2, 8, -1, 0, 2, 1041}, - {3, 8, 0, 0, 2, 1049}, - {3, 7, 0, 0, 2, 1057}, - {4, 8, -1, 0, 5, 1064}, - {4, 8, -1, 0, 5, 1072}, - {4, 8, -1, 0, 5, 1080}, - {4, 8, -1, 0, 5, 1088}, - {4, 8, -1, 0, 5, 1096}, - {4, 8, -1, 0, 5, 1104}, - {4, 7, -1, 0, 5, 1112}, - {4, 5, -1, 0, 5, 1119}, - {7, 7, 0, 1, 5, 1124}, - {3, 8, -1, 0, 4, 1131}, - {3, 8, -1, 0, 4, 1139}, - {3, 8, -1, 0, 4, 1147}, - {3, 7, -1, 0, 4, 1155}, - {4, 9, -1, 1, 4, 1162}, - {4, 7, -1, 1, 5, 1171}, - {4, 8, -1, 1, 4, 1178}, - }, - helvb8_bitmap_data, - 0 -}; - -#endif /* BLF_FONT_HELVB8_H */ diff --git a/source/blender/blenfont/intern/blf_font_scr12.h b/source/blender/blenfont/intern/blf_font_scr12.h deleted file mode 100644 index 6460cf6f501..00000000000 --- a/source/blender/blenfont/intern/blf_font_scr12.h +++ /dev/null @@ -1,479 +0,0 @@ -/** - * $Id: - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2009 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef BLF_FONT_SCR12_H -#define BLF_FONT_SCR12_H - -static unsigned char scr12_bitmap_data[]= { - 0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80, - 0xa0,0xa0,0xa0,0xa0,0x50,0x50,0xfc,0x28, - 0x28,0x7e,0x14,0x14,0x20,0x70,0xa8,0x28, - 0x70,0xa0,0xa8,0x70,0x20,0x98,0x54,0x54, - 0x2c,0xd0,0xa8,0xa8,0x64,0x74,0x88,0x8c, - 0x50,0x20,0x50,0x48,0x30,0x80,0x40,0x20, - 0x20,0x20,0x40,0x40,0x80,0x80,0x80,0x80, - 0x40,0x40,0x20,0x80,0x40,0x40,0x20,0x20, - 0x20,0x20,0x40,0x40,0x80,0x20,0xa8,0x70, - 0xa8,0x20,0x20,0x20,0xf8,0x20,0x20,0x80, - 0x40,0x40,0xc0,0xf8,0x80,0x80,0x80,0x80, - 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08, - 0x70,0x88,0x88,0xc8,0xa8,0x98,0x88,0x70, - 0xe0,0x40,0x40,0x40,0x40,0x40,0xc0,0x40, - 0xf8,0x80,0x40,0x20,0x10,0x08,0x88,0x70, - 0x70,0x88,0x08,0x08,0x70,0x08,0x88,0x70, - 0x10,0x10,0x10,0xf8,0x90,0x50,0x30,0x10, - 0x70,0x88,0x08,0x08,0xf0,0x80,0x80,0xf8, - 0x70,0x88,0x88,0x88,0xf0,0x80,0x88,0x70, - 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0xf8, - 0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x70, - 0x70,0x88,0x08,0x78,0x88,0x88,0x88,0x70, - 0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x40, - 0x40,0xc0,0x00,0x00,0x40,0x40,0x08,0x10, - 0x20,0x40,0x80,0x40,0x20,0x10,0x08,0xf8, - 0x00,0xf8,0x80,0x40,0x20,0x10,0x08,0x10, - 0x20,0x40,0x80,0x20,0x00,0x20,0x20,0x10, - 0x88,0x88,0x70,0x38,0x40,0x98,0xa8,0xa8, - 0x98,0x48,0x30,0x88,0x88,0xf8,0x88,0x50, - 0x50,0x20,0x20,0xf0,0x88,0x88,0x88,0xf0, - 0x88,0x88,0xf0,0x70,0x88,0x80,0x80,0x80, - 0x80,0x88,0x70,0xf0,0x88,0x88,0x88,0x88, - 0x88,0x88,0xf0,0xf8,0x80,0x80,0x80,0xf0, - 0x80,0x80,0xf8,0x80,0x80,0x80,0x80,0xf0, - 0x80,0x80,0xf8,0x68,0x98,0x88,0x88,0x98, - 0x80,0x88,0x70,0x88,0x88,0x88,0x88,0xf8, - 0x88,0x88,0x88,0xe0,0x40,0x40,0x40,0x40, - 0x40,0x40,0xe0,0x70,0x88,0x88,0x08,0x08, - 0x08,0x08,0x08,0x88,0x88,0x90,0xa0,0xc0, - 0xa0,0x90,0x88,0xf8,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x88,0x88,0xa8,0xa8,0xd8, - 0xd8,0x88,0x88,0x88,0x98,0x98,0xa8,0xa8, - 0xc8,0xc8,0x88,0x70,0x88,0x88,0x88,0x88, - 0x88,0x88,0x70,0x80,0x80,0x80,0x80,0xf0, - 0x88,0x88,0xf0,0x08,0x10,0x70,0xa8,0x88, - 0x88,0x88,0x88,0x88,0x70,0x88,0x90,0x90, - 0xa0,0xf0,0x88,0x88,0xf0,0x70,0x88,0x88, - 0x08,0x70,0x80,0x88,0x70,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0xf8,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x20,0x20,0x50, - 0x50,0x50,0x88,0x88,0x88,0x50,0x50,0xf8, - 0xa8,0xa8,0xa8,0x88,0x88,0x88,0x88,0x50, - 0x20,0x20,0x50,0x88,0x88,0x20,0x20,0x20, - 0x20,0x50,0x50,0x88,0x88,0xf8,0x80,0x40, - 0x40,0x20,0x10,0x08,0xf8,0xe0,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0xe0,0x08,0x08, - 0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80, - 0xe0,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0xe0,0x88,0x50,0x20,0xfe,0x20,0x40,0x80, - 0x80,0x68,0x98,0x88,0x78,0x08,0x70,0xb0, - 0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,0x70, - 0x88,0x80,0x80,0x88,0x70,0x68,0x98,0x88, - 0x88,0x98,0x68,0x08,0x08,0x70,0x88,0x80, - 0xf8,0x88,0x70,0x40,0x40,0x40,0x40,0x40, - 0xf0,0x40,0x38,0xf0,0x08,0x68,0x98,0x88, - 0x88,0x98,0x68,0x88,0x88,0x88,0x88,0xc8, - 0xb0,0x80,0x80,0x20,0x20,0x20,0x20,0x20, - 0xe0,0x00,0x20,0x60,0x90,0x10,0x10,0x10, - 0x10,0x10,0x70,0x00,0x10,0x88,0x90,0xa0, - 0xc0,0xa0,0x90,0x80,0x80,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0xa8,0xa8,0xa8, - 0xa8,0xa8,0xd0,0x88,0x88,0x88,0x88,0xc8, - 0xb0,0x70,0x88,0x88,0x88,0x88,0x70,0x80, - 0x80,0xb0,0xc8,0x88,0x88,0xc8,0xb0,0x08, - 0x08,0x68,0x98,0x88,0x88,0x98,0x68,0x80, - 0x80,0x80,0x80,0xc8,0xb0,0x70,0x88,0x10, - 0x60,0x88,0x70,0x30,0x40,0x40,0x40,0x40, - 0xf0,0x40,0x68,0x98,0x88,0x88,0x88,0x88, - 0x20,0x20,0x50,0x50,0x88,0x88,0x50,0xa8, - 0xa8,0xa8,0x88,0x88,0x88,0x88,0x50,0x20, - 0x50,0x88,0xf0,0x08,0x68,0x98,0x88,0x88, - 0x88,0x88,0xf8,0x80,0x40,0x20,0x10,0xf8, - 0x18,0x20,0x20,0x20,0x20,0xc0,0x20,0x20, - 0x20,0x18,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0xc0,0x20,0x20,0x20, - 0x20,0x18,0x20,0x20,0x20,0xc0,0x98,0xb4, - 0x64,0x80,0x80,0x80,0x80,0x80,0x00,0x80, - 0x80,0x20,0x20,0x70,0x88,0x80,0x88,0x70, - 0x20,0x20,0xb0,0x48,0x40,0xf0,0x40,0x40, - 0x48,0x30,0x90,0x60,0x90,0x90,0x60,0x90, - 0x20,0x70,0x20,0x70,0x20,0x50,0x88,0x88, - 0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x80, - 0x80,0x80,0x70,0x88,0x10,0x28,0x48,0x90, - 0xa0,0x40,0x88,0x70,0xa0,0x78,0x84,0xb4, - 0xa4,0xb4,0x84,0x78,0xf0,0x90,0x70,0x10, - 0x60,0x14,0x28,0x50,0xa0,0x50,0x28,0x14, - 0x08,0xf8,0xf0,0x78,0x84,0xac,0xb4,0xb4, - 0x84,0x78,0xe0,0x60,0x90,0x60,0xf8,0x00, - 0x20,0x20,0xf8,0x20,0x20,0xe0,0x40,0x20, - 0xa0,0x40,0xc0,0x20,0x40,0x20,0xc0,0x80, - 0x40,0x80,0xe8,0x90,0x90,0x90,0x90,0x28, - 0x28,0x28,0x28,0x68,0xa8,0xa8,0xa8,0x7c, - 0x80,0x80,0xc0,0x40,0xe0,0x40,0x40,0xc0, - 0x40,0xf0,0x60,0x90,0x90,0x60,0xa0,0x50, - 0x28,0x14,0x28,0x50,0xa0,0x08,0x38,0xa8, - 0x58,0x28,0xf0,0x48,0x40,0xc0,0x40,0x38, - 0x10,0x88,0x68,0x30,0xf0,0x48,0x40,0xc0, - 0x40,0x08,0x38,0xa8,0x58,0x28,0xd0,0x28, - 0x40,0x20,0xc0,0x70,0x88,0x88,0x40,0x20, - 0x20,0x00,0x20,0x88,0x88,0xf8,0x88,0x50, - 0x50,0x20,0x00,0x20,0x40,0x88,0x88,0xf8, - 0x50,0x50,0x20,0x20,0x00,0x20,0x10,0x88, - 0x88,0xf8,0x50,0x50,0x20,0x20,0x00,0x50, - 0x20,0x88,0x88,0xf8,0x50,0x50,0x20,0x20, - 0x00,0xb0,0x68,0x88,0x88,0xf8,0x50,0x50, - 0x20,0x20,0x00,0x50,0x88,0x88,0xf8,0x50, - 0x50,0x20,0x20,0x20,0x50,0x20,0x9c,0x90, - 0xf0,0x50,0x5c,0x30,0x30,0x1c,0x60,0x20, - 0x70,0x88,0x80,0x80,0x80,0x80,0x88,0x70, - 0xf8,0x80,0x80,0xf0,0x80,0x80,0xf8,0x00, - 0x20,0x40,0xf8,0x80,0x80,0xf0,0x80,0x80, - 0xf8,0x00,0x20,0x10,0xf8,0x80,0x80,0xf0, - 0x80,0x80,0xf8,0x00,0x50,0x20,0xf8,0x80, - 0x80,0xf0,0x80,0x80,0xf8,0x00,0x50,0xe0, - 0x40,0x40,0x40,0x40,0x40,0xe0,0x00,0x40, - 0x80,0xe0,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x00,0x40,0x20,0xe0,0x40,0x40,0x40,0x40, - 0x40,0xe0,0x00,0xa0,0x40,0xe0,0x40,0x40, - 0x40,0x40,0x40,0xe0,0x00,0xa0,0x78,0x44, - 0x44,0xf4,0x44,0x44,0x44,0x78,0x88,0x98, - 0x98,0xa8,0xc8,0xc8,0x88,0x00,0xb0,0x68, - 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00, - 0x20,0x40,0x70,0x88,0x88,0x88,0x88,0x88, - 0x70,0x00,0x20,0x10,0x70,0x88,0x88,0x88, - 0x88,0x88,0x70,0x00,0x50,0x20,0x70,0x88, - 0x88,0x88,0x88,0x88,0x70,0x00,0xb0,0x68, - 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00, - 0x50,0x88,0x50,0x20,0x50,0x88,0xb8,0x44, - 0x64,0x54,0x4c,0x44,0x3a,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x00,0x20,0x40,0x70, - 0x88,0x88,0x88,0x88,0x88,0x88,0x00,0x20, - 0x10,0x70,0x88,0x88,0x88,0x88,0x88,0x88, - 0x00,0x50,0x20,0x70,0x88,0x88,0x88,0x88, - 0x88,0x88,0x00,0x50,0x20,0x20,0x20,0x50, - 0x50,0x88,0x88,0x00,0x20,0x10,0x80,0x80, - 0xf0,0x88,0x88,0x88,0xf0,0x80,0x80,0xb0, - 0x88,0x88,0x88,0x90,0xa0,0x90,0x60,0x78, - 0x88,0x78,0x08,0x70,0x00,0x20,0x40,0x78, - 0x88,0x78,0x08,0x70,0x00,0x20,0x10,0x78, - 0x88,0x78,0x08,0x70,0x00,0x50,0x20,0x78, - 0x88,0x78,0x08,0x70,0x00,0xb0,0x68,0x78, - 0x88,0x78,0x08,0x70,0x00,0x50,0x78,0x88, - 0x78,0x08,0x70,0x00,0x20,0x50,0x20,0x6c, - 0x90,0x7c,0x12,0x6c,0x60,0x20,0x70,0x88, - 0x80,0x80,0x88,0x70,0x78,0x80,0xf8,0x88, - 0x70,0x00,0x20,0x40,0x78,0x80,0xf8,0x88, - 0x70,0x00,0x20,0x10,0x78,0x80,0xf8,0x88, - 0x70,0x00,0x50,0x20,0x78,0x80,0xf8,0x88, - 0x70,0x00,0x50,0x20,0x20,0x20,0x20,0xe0, - 0x00,0x40,0x80,0x20,0x20,0x20,0x20,0xe0, - 0x00,0x40,0x20,0x20,0x20,0x20,0x20,0xe0, - 0x00,0xa0,0x40,0x20,0x20,0x20,0x20,0xe0, - 0x00,0xa0,0x70,0x88,0x88,0x88,0x78,0x08, - 0x90,0x60,0xd0,0x88,0x88,0x88,0xc8,0xb0, - 0x00,0xb0,0x68,0x70,0x88,0x88,0x88,0x70, - 0x00,0x20,0x40,0x70,0x88,0x88,0x88,0x70, - 0x00,0x20,0x10,0x70,0x88,0x88,0x88,0x70, - 0x00,0x50,0x20,0x70,0x88,0x88,0x88,0x70, - 0x00,0xb0,0x68,0x70,0x88,0x88,0x88,0x70, - 0x00,0x50,0x20,0x00,0xf8,0x00,0x20,0xb8, - 0x64,0x54,0x4c,0x3a,0x68,0x98,0x88,0x88, - 0x88,0x00,0x20,0x40,0x68,0x98,0x88,0x88, - 0x88,0x00,0x20,0x10,0x68,0x98,0x88,0x88, - 0x88,0x00,0x50,0x20,0x68,0x98,0x88,0x88, - 0x88,0x00,0x50,0xf0,0x08,0x68,0x98,0x88, - 0x88,0x88,0x00,0x20,0x10,0x80,0x80,0xb0, - 0xc8,0x88,0x88,0xc8,0xb0,0x80,0x80,0xf0, - 0x08,0x68,0x98,0x88,0x88,0x88,0x00,0xd8, -}; - -FontDataBLF blf_font_scr12 = { - 0, -2, - 7, 10, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 16, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 7, -1}, - {1, 8, -3, 0, 7, 0}, - {3, 4, -2, -5, 7, 8}, - {7, 8, 0, 0, 7, 12}, - {5, 9, -1, 1, 7, 20}, - {6, 8, 0, 0, 7, 29}, - {6, 8, 0, 0, 7, 37}, - {3, 4, -2, -5, 7, 45}, - {3, 10, -2, 2, 7, 49}, - {3, 10, -2, 2, 7, 59}, - {5, 5, -1, -3, 7, 69}, - {5, 5, -1, -1, 7, 74}, - {2, 4, -2, 2, 7, 79}, - {5, 1, -1, -3, 7, 83}, - {1, 2, -3, 0, 7, 84}, - {5, 10, -1, 1, 7, 86}, - {5, 8, -1, 0, 7, 96}, - {3, 8, -2, 0, 7, 104}, - {5, 8, -1, 0, 7, 112}, - {5, 8, -1, 0, 7, 120}, - {5, 8, -1, 0, 7, 128}, - {5, 8, -1, 0, 7, 136}, - {5, 8, -1, 0, 7, 144}, - {5, 8, -1, 0, 7, 152}, - {5, 8, -1, 0, 7, 160}, - {5, 8, -1, 0, 7, 168}, - {1, 6, -3, 0, 7, 176}, - {2, 8, -2, 2, 7, 182}, - {5, 9, -1, 1, 7, 190}, - {5, 3, -1, -2, 7, 199}, - {5, 9, -1, 1, 7, 202}, - {5, 8, -1, 0, 7, 211}, - {5, 8, -1, 0, 7, 219}, - {5, 8, -1, 0, 7, 227}, - {5, 8, -1, 0, 7, 235}, - {5, 8, -1, 0, 7, 243}, - {5, 8, -1, 0, 7, 251}, - {5, 8, -1, 0, 7, 259}, - {5, 8, -1, 0, 7, 267}, - {5, 8, -1, 0, 7, 275}, - {5, 8, -1, 0, 7, 283}, - {3, 8, -2, 0, 7, 291}, - {5, 8, -1, 0, 7, 299}, - {5, 8, -1, 0, 7, 307}, - {5, 8, -1, 0, 7, 315}, - {5, 8, -1, 0, 7, 323}, - {5, 8, -1, 0, 7, 331}, - {5, 8, -1, 0, 7, 339}, - {5, 8, -1, 0, 7, 347}, - {5, 10, -1, 2, 7, 355}, - {5, 8, -1, 0, 7, 365}, - {5, 8, -1, 0, 7, 373}, - {5, 8, -1, 0, 7, 381}, - {5, 8, -1, 0, 7, 389}, - {5, 8, -1, 0, 7, 397}, - {5, 8, -1, 0, 7, 405}, - {5, 8, -1, 0, 7, 413}, - {5, 8, -1, 0, 7, 421}, - {5, 8, -1, 0, 7, 429}, - {3, 9, -2, 1, 7, 437}, - {5, 10, -1, 1, 7, 446}, - {3, 9, -2, 1, 7, 456}, - {5, 3, -1, -5, 7, 465}, - {7, 1, 0, 1, 7, 468}, - {3, 4, -2, -5, 7, 469}, - {5, 6, -1, 0, 7, 473}, - {5, 8, -1, 0, 7, 479}, - {5, 6, -1, 0, 7, 487}, - {5, 8, -1, 0, 7, 493}, - {5, 6, -1, 0, 7, 501}, - {5, 8, -1, 0, 7, 507}, - {5, 8, -1, 2, 7, 515}, - {5, 8, -1, 0, 7, 523}, - {3, 8, -2, 0, 7, 531}, - {4, 10, -1, 2, 7, 539}, - {5, 8, -1, 0, 7, 549}, - {3, 8, -2, 0, 7, 557}, - {5, 6, -1, 0, 7, 565}, - {5, 6, -1, 0, 7, 571}, - {5, 6, -1, 0, 7, 577}, - {5, 8, -1, 2, 7, 583}, - {5, 8, -1, 2, 7, 591}, - {5, 6, -1, 0, 7, 599}, - {5, 6, -1, 0, 7, 605}, - {4, 7, -1, 0, 7, 611}, - {5, 6, -1, 0, 7, 618}, - {5, 6, -1, 0, 7, 624}, - {5, 6, -1, 0, 7, 630}, - {5, 6, -1, 0, 7, 636}, - {5, 8, -1, 2, 7, 642}, - {5, 6, -1, 0, 7, 650}, - {5, 10, -1, 2, 7, 656}, - {1, 10, -3, 1, 7, 666}, - {5, 10, -1, 2, 7, 676}, - {6, 3, 0, -2, 7, 686}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 8, -3, 2, 7, 689}, - {5, 9, -1, 0, 7, 697}, - {5, 8, -1, 0, 7, 706}, - {4, 6, -1, -2, 7, 714}, - {5, 8, -1, 0, 7, 720}, - {1, 10, -3, 1, 7, 728}, - {5, 10, -1, 1, 7, 738}, - {3, 1, -2, -7, 7, 748}, - {6, 7, 0, 0, 7, 749}, - {4, 5, -1, -4, 7, 756}, - {6, 7, 0, 0, 7, 761}, - {5, 2, -1, -3, 7, 768}, - {4, 1, -1, -3, 7, 770}, - {6, 7, 0, 0, 7, 771}, - {3, 1, -2, -7, 7, 778}, - {4, 3, -1, -4, 7, 779}, - {5, 7, -1, 0, 7, 782}, - {3, 5, -2, -4, 7, 789}, - {3, 5, -2, -4, 7, 794}, - {2, 2, -2, -7, 7, 799}, - {5, 6, -1, 1, 7, 801}, - {6, 9, 0, 1, 7, 807}, - {1, 2, -3, -3, 7, 816}, - {2, 2, -2, 2, 7, 818}, - {3, 5, -2, -4, 7, 820}, - {4, 5, -1, -4, 7, 825}, - {6, 7, 0, 0, 7, 830}, - {5, 10, -1, 1, 7, 837}, - {5, 10, -1, 1, 7, 847}, - {5, 10, -1, 1, 7, 857}, - {5, 8, -1, 2, 7, 867}, - {5, 10, -1, 0, 7, 875}, - {5, 10, -1, 0, 7, 885}, - {5, 10, -1, 0, 7, 895}, - {5, 10, -1, 0, 7, 905}, - {5, 9, -1, 0, 7, 915}, - {5, 10, -1, 0, 7, 924}, - {6, 8, 0, 0, 7, 934}, - {5, 10, -1, 2, 7, 942}, - {5, 10, -1, 0, 7, 952}, - {5, 10, -1, 0, 7, 962}, - {5, 10, -1, 0, 7, 972}, - {5, 9, -1, 0, 7, 982}, - {3, 10, -2, 0, 7, 991}, - {3, 10, -2, 0, 7, 1001}, - {3, 10, -2, 0, 7, 1011}, - {3, 9, -2, 0, 7, 1021}, - {6, 8, 0, 0, 7, 1030}, - {5, 10, -1, 0, 7, 1038}, - {5, 10, -1, 0, 7, 1048}, - {5, 10, -1, 0, 7, 1058}, - {5, 10, -1, 0, 7, 1068}, - {5, 10, -1, 0, 7, 1078}, - {5, 9, -1, 0, 7, 1088}, - {5, 5, -1, -1, 7, 1097}, - {7, 7, 0, 0, 7, 1102}, - {5, 10, -1, 0, 7, 1109}, - {5, 10, -1, 0, 7, 1119}, - {5, 10, -1, 0, 7, 1129}, - {5, 9, -1, 0, 7, 1139}, - {5, 10, -1, 0, 7, 1148}, - {5, 9, -1, 0, 7, 1158}, - {5, 8, -1, 0, 7, 1167}, - {5, 8, -1, 0, 7, 1175}, - {5, 8, -1, 0, 7, 1183}, - {5, 8, -1, 0, 7, 1191}, - {5, 8, -1, 0, 7, 1199}, - {5, 7, -1, 0, 7, 1207}, - {5, 9, -1, 0, 7, 1214}, - {7, 5, 0, 0, 7, 1223}, - {5, 8, -1, 2, 7, 1228}, - {5, 8, -1, 0, 7, 1236}, - {5, 8, -1, 0, 7, 1244}, - {5, 8, -1, 0, 7, 1252}, - {5, 7, -1, 0, 7, 1260}, - {3, 8, -2, 0, 7, 1267}, - {3, 8, -2, 0, 7, 1275}, - {3, 8, -2, 0, 7, 1283}, - {3, 7, -2, 0, 7, 1291}, - {5, 9, -1, 0, 7, 1298}, - {5, 8, -1, 0, 7, 1307}, - {5, 8, -1, 0, 7, 1315}, - {5, 8, -1, 0, 7, 1323}, - {5, 8, -1, 0, 7, 1331}, - {5, 8, -1, 0, 7, 1339}, - {5, 7, -1, 0, 7, 1347}, - {5, 5, -1, -1, 7, 1354}, - {7, 5, 0, 0, 7, 1359}, - {5, 8, -1, 0, 7, 1364}, - {5, 8, -1, 0, 7, 1372}, - {5, 8, -1, 0, 7, 1380}, - {5, 7, -1, 0, 7, 1388}, - {5, 10, -1, 2, 7, 1395}, - {5, 10, -1, 2, 7, 1405}, - {5, 9, -1, 2, 7, 1415}, - }, - scr12_bitmap_data, - 0 -}; - -#endif - diff --git a/source/blender/blenfont/intern/blf_font_scr14.h b/source/blender/blenfont/intern/blf_font_scr14.h deleted file mode 100644 index d9cc0b84e14..00000000000 --- a/source/blender/blenfont/intern/blf_font_scr14.h +++ /dev/null @@ -1,504 +0,0 @@ -/** - * $Id: - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2009 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef BLF_FONT_SCR14_H -#define BLF_FONT_SCR14_H - -static unsigned char scr14_bitmap_data[]= { - 0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80, - 0x80,0xa0,0xa0,0xa0,0xa0,0x50,0x50,0xfc, - 0x28,0x28,0x28,0x7e,0x14,0x14,0x20,0x70, - 0xa8,0x28,0x30,0x60,0xa0,0xa8,0x70,0x20, - 0x98,0x54,0x54,0x2c,0x10,0x68,0x54,0x54, - 0x32,0x74,0x88,0x8c,0x90,0x60,0x20,0x50, - 0x48,0x30,0x80,0x40,0x20,0x20,0x20,0x40, - 0x40,0x80,0x80,0x80,0x80,0x80,0x40,0x40, - 0x20,0x80,0x40,0x40,0x20,0x20,0x20,0x20, - 0x20,0x40,0x40,0x80,0x20,0xa8,0x70,0x70, - 0xa8,0x20,0x20,0x20,0xf8,0x20,0x20,0x80, - 0x40,0x40,0xc0,0xf8,0x80,0x80,0x80,0x80, - 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0x08, - 0x70,0x88,0x88,0xc8,0xa8,0x98,0x88,0x88, - 0x70,0xe0,0x40,0x40,0x40,0x40,0x40,0x40, - 0xc0,0x40,0xf8,0x80,0x40,0x20,0x10,0x08, - 0x88,0x88,0x70,0x70,0x88,0x08,0x08,0x70, - 0x08,0x08,0x88,0x70,0x10,0x10,0x10,0xf8, - 0x90,0x50,0x50,0x30,0x10,0x70,0x88,0x08, - 0x08,0x08,0xf0,0x80,0x80,0xf8,0x70,0x88, - 0x88,0x88,0x88,0xf0,0x80,0x88,0x70,0x40, - 0x40,0x40,0x20,0x20,0x10,0x10,0x08,0xf8, - 0x70,0x88,0x88,0x88,0x70,0x88,0x88,0x88, - 0x70,0x70,0x88,0x08,0x08,0x78,0x88,0x88, - 0x88,0x70,0x80,0x80,0x00,0x00,0x80,0x80, - 0x80,0x40,0x40,0xc0,0x00,0x00,0x40,0x40, - 0x08,0x10,0x20,0x40,0x80,0x40,0x20,0x10, - 0x08,0xf8,0x00,0xf8,0x80,0x40,0x20,0x10, - 0x08,0x10,0x20,0x40,0x80,0x20,0x20,0x00, - 0x20,0x20,0x10,0x88,0x88,0x70,0x38,0x40, - 0x98,0xa8,0xa8,0x98,0x88,0x48,0x30,0x88, - 0x88,0xf8,0x88,0x50,0x50,0x50,0x20,0x20, - 0xf0,0x88,0x88,0x88,0xf0,0x88,0x88,0x88, - 0xf0,0x70,0x88,0x80,0x80,0x80,0x80,0x80, - 0x88,0x70,0xf0,0x88,0x88,0x88,0x88,0x88, - 0x88,0x88,0xf0,0xf8,0x80,0x80,0x80,0xf0, - 0x80,0x80,0x80,0xf8,0x80,0x80,0x80,0x80, - 0xf0,0x80,0x80,0x80,0xf8,0x68,0x98,0x88, - 0x88,0x98,0x80,0x80,0x88,0x70,0x88,0x88, - 0x88,0x88,0xf8,0x88,0x88,0x88,0x88,0xe0, - 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x70,0x88,0x88,0x08,0x08,0x08,0x08,0x08, - 0x08,0x88,0x88,0x90,0xa0,0xc0,0xa0,0x90, - 0x88,0x88,0xf8,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x88,0x88,0x88,0xa8,0xa8, - 0xd8,0xd8,0x88,0x88,0x88,0x98,0x98,0xa8, - 0xa8,0xc8,0xc8,0x88,0x88,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x70,0x80,0x80, - 0x80,0x80,0xf0,0x88,0x88,0x88,0xf0,0x08, - 0x10,0x70,0xa8,0x88,0x88,0x88,0x88,0x88, - 0x88,0x70,0x88,0x88,0x90,0xa0,0xf0,0x88, - 0x88,0x88,0xf0,0x70,0x88,0x08,0x08,0x70, - 0x80,0x80,0x88,0x70,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0xf8,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x20,0x20, - 0x50,0x50,0x50,0x88,0x88,0x88,0x88,0x50, - 0x50,0xf8,0xa8,0xa8,0x88,0x88,0x88,0x88, - 0x88,0x88,0x50,0x50,0x20,0x50,0x50,0x88, - 0x88,0x20,0x20,0x20,0x20,0x20,0x50,0x50, - 0x88,0x88,0xf8,0x80,0x40,0x40,0x20,0x10, - 0x10,0x08,0xf8,0xf0,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0xf0,0x08,0x08, - 0x10,0x10,0x20,0x20,0x40,0x40,0x80,0x80, - 0xf0,0x10,0x10,0x10,0x10,0x10,0x10,0x10, - 0x10,0x10,0xf0,0x88,0x50,0x20,0xfe,0x20, - 0x40,0x80,0x80,0x68,0x98,0x88,0x78,0x08, - 0x88,0x70,0xb0,0xc8,0x88,0x88,0x88,0xc8, - 0xb0,0x80,0x80,0x70,0x88,0x80,0x80,0x80, - 0x88,0x70,0x68,0x98,0x88,0x88,0x88,0x98, - 0x68,0x08,0x08,0x70,0x88,0x80,0xf8,0x88, - 0x88,0x70,0x40,0x40,0x40,0x40,0x40,0x40, - 0xf0,0x40,0x38,0x70,0x88,0x08,0x68,0x98, - 0x88,0x88,0x88,0x98,0x68,0x88,0x88,0x88, - 0x88,0x88,0xc8,0xb0,0x80,0x80,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0x00,0x20,0x60, - 0x90,0x10,0x10,0x10,0x10,0x10,0x10,0x10, - 0x70,0x00,0x10,0x88,0x88,0x90,0xe0,0xa0, - 0x90,0x88,0x80,0x80,0x20,0x20,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0xa8,0xa8,0xa8, - 0xa8,0xa8,0xa8,0xd0,0x88,0x88,0x88,0x88, - 0x88,0xc8,0xb0,0x70,0x88,0x88,0x88,0x88, - 0x88,0x70,0x80,0x80,0x80,0xb0,0xc8,0x88, - 0x88,0x88,0xc8,0xb0,0x08,0x08,0x08,0x68, - 0x98,0x88,0x88,0x88,0x98,0x68,0x80,0x80, - 0x80,0x80,0x80,0xc8,0xb0,0x70,0x88,0x08, - 0x70,0x80,0x88,0x70,0x30,0x40,0x40,0x40, - 0x40,0x40,0xf0,0x40,0x40,0x68,0x98,0x88, - 0x88,0x88,0x88,0x88,0x20,0x20,0x50,0x50, - 0x88,0x88,0x88,0x50,0xa8,0xa8,0xa8,0xa8, - 0x88,0x88,0x88,0x88,0x50,0x20,0x50,0x88, - 0x88,0x70,0x88,0x08,0x68,0x98,0x88,0x88, - 0x88,0x88,0x88,0xf8,0x80,0x40,0x20,0x10, - 0x08,0xf8,0x18,0x20,0x20,0x20,0x20,0x20, - 0xc0,0x20,0x20,0x20,0x20,0x18,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0xc0,0x20,0x20,0x20,0x20,0x20, - 0x18,0x20,0x20,0x20,0x20,0xc0,0x98,0xb4, - 0x64,0x80,0x80,0x80,0x80,0x80,0x80,0x00, - 0x80,0x80,0x20,0x20,0x70,0x88,0x80,0x80, - 0x88,0x70,0x20,0x20,0xb0,0x48,0x40,0x40, - 0xf0,0x40,0x40,0x48,0x30,0x88,0x70,0x88, - 0x88,0x70,0x88,0x70,0x20,0xf8,0x20,0xf8, - 0x50,0x50,0x88,0x88,0x80,0x80,0x80,0x80, - 0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x80, - 0x70,0x88,0x10,0x28,0x48,0x88,0x90,0xa0, - 0x40,0x88,0x70,0xd8,0x38,0x44,0x92,0xaa, - 0xa2,0xaa,0x92,0x44,0x38,0xf8,0x00,0x68, - 0x90,0x70,0x10,0x60,0x12,0x24,0x48,0x90, - 0x48,0x24,0x12,0x08,0x08,0xf8,0xf0,0x38, - 0x44,0xaa,0xaa,0xb2,0xaa,0xb2,0x44,0x38, - 0xe0,0x60,0x90,0x90,0x60,0xf8,0x00,0x20, - 0x20,0xf8,0x20,0x20,0xe0,0x40,0x20,0xa0, - 0x40,0xc0,0x20,0x40,0x20,0xc0,0x80,0x40, - 0x80,0x80,0xb4,0xc8,0x88,0x88,0x88,0x88, - 0x28,0x28,0x28,0x28,0x28,0x68,0xa8,0xa8, - 0xa8,0x7c,0x80,0x80,0xc0,0x20,0x40,0xe0, - 0x40,0x40,0xc0,0x40,0xf8,0x00,0x70,0x88, - 0x88,0x88,0x70,0x90,0x48,0x24,0x12,0x24, - 0x48,0x90,0x04,0x9e,0x54,0x2c,0x14,0xe8, - 0x44,0x40,0xc0,0x40,0x1c,0x08,0x84,0x54, - 0x28,0x10,0xe8,0x44,0x40,0xc0,0x40,0x04, - 0x9e,0x54,0x2c,0xd4,0x28,0x44,0x20,0xc0, - 0x70,0x88,0x80,0x40,0x20,0x20,0x00,0x00, - 0x20,0x20,0x88,0x88,0xf8,0x88,0x50,0x50, - 0x20,0x20,0x00,0x20,0x40,0x88,0x88,0xf8, - 0x88,0x50,0x50,0x20,0x20,0x00,0x20,0x10, - 0x88,0x88,0xf8,0x88,0x50,0x50,0x20,0x20, - 0x00,0x50,0x20,0x88,0x88,0xf8,0x88,0x50, - 0x50,0x20,0x20,0x00,0xb0,0x68,0x88,0x88, - 0xf8,0x88,0x50,0x50,0x20,0x20,0x00,0xd8, - 0x88,0x88,0xf8,0x88,0x50,0x50,0x20,0x20, - 0x20,0x50,0x20,0x9c,0x90,0xf0,0x90,0x5c, - 0x50,0x30,0x30,0x1c,0x60,0x10,0x20,0x70, - 0x88,0x80,0x80,0x80,0x80,0x80,0x88,0x70, - 0xf8,0x80,0x80,0x80,0xf0,0x80,0x80,0xf8, - 0x00,0x20,0x40,0xf8,0x80,0x80,0x80,0xf0, - 0x80,0x80,0xf8,0x00,0x20,0x10,0xf8,0x80, - 0x80,0x80,0xf0,0x80,0x80,0xf8,0x00,0x50, - 0x20,0xf8,0x80,0x80,0x80,0xf0,0x80,0x80, - 0xf8,0x00,0xd8,0xe0,0x40,0x40,0x40,0x40, - 0x40,0x40,0xe0,0x00,0x40,0x80,0xe0,0x40, - 0x40,0x40,0x40,0x40,0x40,0xe0,0x00,0x40, - 0x20,0xe0,0x40,0x40,0x40,0x40,0x40,0x40, - 0xe0,0x00,0xa0,0x40,0x70,0x20,0x20,0x20, - 0x20,0x20,0x20,0x70,0x00,0xd8,0x78,0x44, - 0x44,0x44,0xf4,0x44,0x44,0x44,0x78,0x88, - 0x98,0x98,0xa8,0xa8,0xc8,0xc8,0x88,0x00, - 0xb0,0x68,0x70,0x88,0x88,0x88,0x88,0x88, - 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x88, - 0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x10, - 0x70,0x88,0x88,0x88,0x88,0x88,0x88,0x70, - 0x00,0x50,0x20,0x70,0x88,0x88,0x88,0x88, - 0x88,0x88,0x70,0x00,0xb0,0x68,0x70,0x88, - 0x88,0x88,0x88,0x88,0x88,0x70,0x00,0xd8, - 0x88,0x50,0x20,0x50,0x88,0xb8,0x44,0x64, - 0x64,0x54,0x4c,0x4c,0x44,0x3a,0x70,0x88, - 0x88,0x88,0x88,0x88,0x88,0x88,0x00,0x20, - 0x40,0x70,0x88,0x88,0x88,0x88,0x88,0x88, - 0x88,0x00,0x20,0x10,0x70,0x88,0x88,0x88, - 0x88,0x88,0x88,0x88,0x00,0x50,0x20,0x70, - 0x88,0x88,0x88,0x88,0x88,0x88,0x88,0x00, - 0xd8,0x20,0x20,0x20,0x20,0x50,0x50,0x88, - 0x88,0x00,0x20,0x10,0xe0,0x40,0x78,0x44, - 0x44,0x44,0x78,0x40,0xe0,0xb0,0x88,0x88, - 0x88,0x90,0xa0,0x90,0x90,0x60,0x68,0x98, - 0x88,0x78,0x08,0x88,0x70,0x00,0x20,0x40, - 0x68,0x98,0x88,0x78,0x08,0x88,0x70,0x00, - 0x20,0x10,0x68,0x98,0x88,0x78,0x08,0x88, - 0x70,0x00,0x50,0x20,0x68,0x98,0x88,0x78, - 0x08,0x88,0x70,0x00,0xb0,0x68,0x68,0x98, - 0x88,0x78,0x08,0x88,0x70,0x00,0xd8,0x68, - 0x98,0x88,0x78,0x08,0x88,0x70,0x00,0x20, - 0x50,0x20,0x6c,0x92,0x90,0x7e,0x12,0x92, - 0x6c,0x60,0x10,0x20,0x70,0x88,0x80,0x80, - 0x80,0x88,0x70,0x70,0x88,0x80,0xf8,0x88, - 0x88,0x70,0x00,0x20,0x40,0x70,0x88,0x80, - 0xf8,0x88,0x88,0x70,0x00,0x20,0x10,0x70, - 0x88,0x80,0xf8,0x88,0x88,0x70,0x00,0x50, - 0x20,0x70,0x88,0x80,0xf8,0x88,0x88,0x70, - 0x00,0xd8,0x20,0x20,0x20,0x20,0x20,0x20, - 0xe0,0x00,0x20,0x40,0x20,0x20,0x20,0x20, - 0x20,0x20,0xe0,0x00,0x20,0x10,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0x00,0xa0,0x40, - 0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x00, - 0xd8,0x70,0x88,0x88,0x88,0x88,0x88,0x78, - 0x10,0xd0,0x20,0xd0,0x88,0x88,0x88,0x88, - 0x88,0xc8,0xb0,0x00,0xb0,0x68,0x70,0x88, - 0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x40, - 0x70,0x88,0x88,0x88,0x88,0x88,0x70,0x00, - 0x20,0x10,0x70,0x88,0x88,0x88,0x88,0x88, - 0x70,0x00,0x50,0x20,0x70,0x88,0x88,0x88, - 0x88,0x88,0x70,0x00,0xb0,0x68,0x70,0x88, - 0x88,0x88,0x88,0x88,0x70,0x00,0xd8,0x10, - 0x10,0x00,0xfe,0x00,0x10,0x10,0xb8,0x44, - 0x64,0x54,0x4c,0x44,0x3a,0x68,0x98,0x88, - 0x88,0x88,0x88,0x88,0x00,0x20,0x40,0x68, - 0x98,0x88,0x88,0x88,0x88,0x88,0x00,0x20, - 0x10,0x68,0x98,0x88,0x88,0x88,0x88,0x88, - 0x00,0x50,0x20,0x68,0x98,0x88,0x88,0x88, - 0x88,0x88,0x00,0xd8,0x70,0x88,0x08,0x68, - 0x98,0x88,0x88,0x88,0x88,0x88,0x00,0x20, - 0x10,0xe0,0x40,0x58,0x64,0x44,0x44,0x44, - 0x64,0x58,0x40,0xc0,0x70,0x88,0x08,0x68, - 0x98,0x88,0x88,0x88,0x88,0x88,0x00,0xd8, -}; - -FontDataBLF blf_font_scr14 = { - 0, -3, - 7, 11, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 16, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 7, -1}, - {1, 9, -3, 0, 7, 0}, - {3, 4, -2, -5, 7, 9}, - {7, 9, 0, 0, 7, 13}, - {5, 10, -1, 1, 7, 22}, - {7, 9, 0, 0, 7, 32}, - {6, 9, 0, 0, 7, 41}, - {3, 4, -2, -5, 7, 50}, - {3, 11, -2, 1, 7, 54}, - {3, 11, -2, 1, 7, 65}, - {5, 6, -1, -2, 7, 76}, - {5, 5, -1, -2, 7, 82}, - {2, 4, -2, 2, 7, 87}, - {5, 1, -1, -4, 7, 91}, - {1, 2, -3, 0, 7, 92}, - {5, 10, -1, 0, 7, 94}, - {5, 9, -1, 0, 7, 104}, - {3, 9, -2, 0, 7, 113}, - {5, 9, -1, 0, 7, 122}, - {5, 9, -1, 0, 7, 131}, - {5, 9, -1, 0, 7, 140}, - {5, 9, -1, 0, 7, 149}, - {5, 9, -1, 0, 7, 158}, - {5, 9, -1, 0, 7, 167}, - {5, 9, -1, 0, 7, 176}, - {5, 9, -1, 0, 7, 185}, - {1, 6, -3, 0, 7, 194}, - {2, 8, -2, 1, 7, 200}, - {5, 9, -1, 0, 7, 208}, - {5, 3, -1, -3, 7, 217}, - {5, 9, -1, 0, 7, 220}, - {5, 9, -1, 0, 7, 229}, - {5, 9, -1, 0, 7, 238}, - {5, 9, -1, 0, 7, 247}, - {5, 9, -1, 0, 7, 256}, - {5, 9, -1, 0, 7, 265}, - {5, 9, -1, 0, 7, 274}, - {5, 9, -1, 0, 7, 283}, - {5, 9, -1, 0, 7, 292}, - {5, 9, -1, 0, 7, 301}, - {5, 9, -1, 0, 7, 310}, - {3, 9, -2, 0, 7, 319}, - {5, 9, -1, 0, 7, 328}, - {5, 9, -1, 0, 7, 337}, - {5, 9, -1, 0, 7, 346}, - {5, 9, -1, 0, 7, 355}, - {5, 9, -1, 0, 7, 364}, - {5, 9, -1, 0, 7, 373}, - {5, 9, -1, 0, 7, 382}, - {5, 11, -1, 2, 7, 391}, - {5, 9, -1, 0, 7, 402}, - {5, 9, -1, 0, 7, 411}, - {5, 9, -1, 0, 7, 420}, - {5, 9, -1, 0, 7, 429}, - {5, 9, -1, 0, 7, 438}, - {5, 9, -1, 0, 7, 447}, - {5, 9, -1, 0, 7, 456}, - {5, 9, -1, 0, 7, 465}, - {5, 9, -1, 0, 7, 474}, - {4, 11, -2, 1, 7, 483}, - {5, 10, -1, 0, 7, 494}, - {4, 11, -1, 1, 7, 504}, - {5, 3, -1, -6, 7, 515}, - {7, 1, 0, 2, 7, 518}, - {3, 4, -2, -5, 7, 519}, - {5, 7, -1, 0, 7, 523}, - {5, 9, -1, 0, 7, 530}, - {5, 7, -1, 0, 7, 539}, - {5, 9, -1, 0, 7, 546}, - {5, 7, -1, 0, 7, 555}, - {5, 9, -1, 0, 7, 562}, - {5, 10, -1, 3, 7, 571}, - {5, 9, -1, 0, 7, 581}, - {3, 9, -2, 0, 7, 590}, - {4, 12, -1, 3, 7, 599}, - {5, 9, -1, 0, 7, 611}, - {3, 9, -2, 0, 7, 620}, - {5, 7, -1, 0, 7, 629}, - {5, 7, -1, 0, 7, 636}, - {5, 7, -1, 0, 7, 643}, - {5, 10, -1, 3, 7, 650}, - {5, 10, -1, 3, 7, 660}, - {5, 7, -1, 0, 7, 670}, - {5, 7, -1, 0, 7, 677}, - {4, 9, -1, 0, 7, 684}, - {5, 7, -1, 0, 7, 693}, - {5, 7, -1, 0, 7, 700}, - {5, 7, -1, 0, 7, 707}, - {5, 7, -1, 0, 7, 714}, - {5, 10, -1, 3, 7, 721}, - {5, 7, -1, 0, 7, 731}, - {5, 12, -1, 2, 7, 738}, - {1, 12, -3, 2, 7, 750}, - {5, 12, -1, 2, 7, 762}, - {6, 3, 0, -3, 7, 774}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {1, 9, -3, 2, 7, 777}, - {5, 10, -1, 0, 7, 786}, - {5, 9, -1, 0, 7, 796}, - {5, 6, -1, -3, 7, 805}, - {5, 9, -1, 0, 7, 811}, - {1, 12, -3, 2, 7, 820}, - {5, 11, -1, 2, 7, 832}, - {5, 1, -1, -8, 7, 843}, - {7, 9, 0, 0, 7, 844}, - {5, 7, -1, -2, 7, 853}, - {7, 7, 0, 0, 7, 860}, - {5, 3, -1, -3, 7, 867}, - {4, 1, -1, -4, 7, 870}, - {7, 9, 0, 0, 7, 871}, - {3, 1, -2, -8, 7, 880}, - {4, 4, -1, -4, 7, 881}, - {5, 7, -1, 0, 7, 885}, - {3, 5, -2, -5, 7, 892}, - {3, 5, -2, -5, 7, 897}, - {2, 2, -3, -8, 7, 902}, - {6, 8, -1, 2, 7, 904}, - {6, 10, 0, 1, 7, 912}, - {1, 2, -3, -3, 7, 922}, - {3, 3, -2, 3, 7, 924}, - {3, 5, -2, -5, 7, 927}, - {5, 7, -1, -2, 7, 932}, - {7, 7, 0, 0, 7, 939}, - {7, 10, 0, 0, 7, 946}, - {6, 11, 0, 1, 7, 956}, - {7, 9, 0, -1, 7, 967}, - {5, 10, -1, 3, 7, 976}, - {5, 11, -1, 0, 7, 986}, - {5, 11, -1, 0, 7, 997}, - {5, 11, -1, 0, 7, 1008}, - {5, 11, -1, 0, 7, 1019}, - {5, 10, -1, 0, 7, 1030}, - {5, 11, -1, 0, 7, 1040}, - {6, 9, 0, 0, 7, 1051}, - {5, 12, -1, 3, 7, 1060}, - {5, 11, -1, 0, 7, 1072}, - {5, 11, -1, 0, 7, 1083}, - {5, 11, -1, 0, 7, 1094}, - {5, 10, -1, 0, 7, 1105}, - {3, 11, -2, 0, 7, 1115}, - {3, 11, -2, 0, 7, 1126}, - {3, 11, -2, 0, 7, 1137}, - {5, 10, -1, 0, 7, 1148}, - {6, 9, 0, 0, 7, 1158}, - {5, 11, -1, 0, 7, 1167}, - {5, 11, -1, 0, 7, 1178}, - {5, 11, -1, 0, 7, 1189}, - {5, 11, -1, 0, 7, 1200}, - {5, 11, -1, 0, 7, 1211}, - {5, 10, -1, 0, 7, 1222}, - {5, 5, -1, -1, 7, 1232}, - {7, 9, 0, 0, 7, 1237}, - {5, 11, -1, 0, 7, 1246}, - {5, 11, -1, 0, 7, 1257}, - {5, 11, -1, 0, 7, 1268}, - {5, 10, -1, 0, 7, 1279}, - {5, 11, -1, 0, 7, 1289}, - {6, 9, 0, 0, 7, 1300}, - {5, 9, -1, 0, 7, 1309}, - {5, 10, -1, 0, 7, 1318}, - {5, 10, -1, 0, 7, 1328}, - {5, 10, -1, 0, 7, 1338}, - {5, 10, -1, 0, 7, 1348}, - {5, 9, -1, 0, 7, 1358}, - {5, 11, -1, 0, 7, 1367}, - {7, 7, 0, 0, 7, 1378}, - {5, 10, -1, 3, 7, 1385}, - {5, 10, -1, 0, 7, 1395}, - {5, 10, -1, 0, 7, 1405}, - {5, 10, -1, 0, 7, 1415}, - {5, 9, -1, 0, 7, 1425}, - {3, 10, -2, 0, 7, 1434}, - {4, 10, -2, 0, 7, 1444}, - {3, 10, -2, 0, 7, 1454}, - {5, 9, -2, 0, 7, 1464}, - {5, 11, -1, 0, 7, 1473}, - {5, 10, -1, 0, 7, 1484}, - {5, 10, -1, 0, 7, 1494}, - {5, 10, -1, 0, 7, 1504}, - {5, 10, -1, 0, 7, 1514}, - {5, 10, -1, 0, 7, 1524}, - {5, 9, -1, 0, 7, 1534}, - {7, 7, 0, 0, 7, 1543}, - {7, 7, 0, 0, 7, 1550}, - {5, 10, -1, 0, 7, 1557}, - {5, 10, -1, 0, 7, 1567}, - {5, 10, -1, 0, 7, 1577}, - {5, 9, -1, 0, 7, 1587}, - {5, 13, -1, 3, 7, 1596}, - {6, 11, 0, 2, 7, 1609}, - {5, 12, -1, 3, 7, 1620}, - }, - scr14_bitmap_data, - 0 -}; - -#endif /* BLF_FONT_SCR14_H */ diff --git a/source/blender/blenfont/intern/blf_font_scr15.h b/source/blender/blenfont/intern/blf_font_scr15.h deleted file mode 100644 index f7719cdd051..00000000000 --- a/source/blender/blenfont/intern/blf_font_scr15.h +++ /dev/null @@ -1,519 +0,0 @@ -/** - * $Id: - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2009 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#ifndef BLF_FONT_SCR15_H -#define BLF_FONT_SCR15_H - -static unsigned char scr15_bitmap_data[]= { - 0x80,0x80,0x00,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x90,0x90,0x90,0x90,0x48,0x48, - 0x48,0xfe,0x24,0x24,0x24,0x7f,0x12,0x12, - 0x20,0x70,0xa8,0xa8,0x28,0x30,0x60,0xa0, - 0xa8,0xa8,0x70,0x20,0x8c,0x52,0x52,0x2c, - 0x10,0x10,0x68,0x94,0x94,0x62,0x72,0x8c, - 0x84,0x8a,0x50,0x20,0x30,0x48,0x48,0x30, - 0x80,0x40,0x60,0x60,0x10,0x20,0x40,0x40, - 0x80,0x80,0x80,0x80,0x80,0x40,0x40,0x20, - 0x10,0x80,0x40,0x20,0x20,0x10,0x10,0x10, - 0x10,0x10,0x20,0x20,0x40,0x80,0x20,0xa8, - 0x70,0x70,0xa8,0x20,0x10,0x10,0x10,0xfe, - 0x10,0x10,0x10,0x80,0x40,0x20,0x60,0x60, - 0xfc,0xc0,0xc0,0x80,0x80,0x40,0x40,0x20, - 0x20,0x10,0x10,0x08,0x08,0x04,0x04,0x78, - 0x84,0x84,0xc4,0xa4,0x94,0x8c,0x84,0x84, - 0x78,0xe0,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0xc0,0x40,0xfc,0x80,0x40,0x20,0x10, - 0x08,0x04,0x84,0x84,0x78,0x78,0x84,0x04, - 0x04,0x04,0x38,0x04,0x04,0x84,0x78,0x08, - 0x08,0x08,0xfc,0x88,0x48,0x48,0x28,0x18, - 0x08,0x78,0x84,0x04,0x04,0x04,0xf8,0x80, - 0x80,0x80,0xfc,0x78,0x84,0x84,0x84,0x84, - 0xf8,0x80,0x80,0x84,0x78,0x20,0x20,0x20, - 0x10,0x10,0x08,0x08,0x04,0x04,0xfc,0x78, - 0x84,0x84,0x84,0x84,0x78,0x84,0x84,0x84, - 0x78,0x78,0x84,0x04,0x04,0x7c,0x84,0x84, - 0x84,0x84,0x78,0xc0,0xc0,0x00,0x00,0x00, - 0xc0,0xc0,0x80,0x40,0xc0,0xc0,0x00,0x00, - 0x00,0xc0,0xc0,0x04,0x08,0x10,0x20,0x40, - 0x80,0x40,0x20,0x10,0x08,0x04,0xfc,0x00, - 0x00,0xfc,0x80,0x40,0x20,0x10,0x08,0x04, - 0x08,0x10,0x20,0x40,0x80,0x10,0x10,0x00, - 0x10,0x10,0x08,0x04,0x84,0x84,0x78,0x38, - 0x44,0x80,0x98,0xa4,0xa4,0x9c,0x84,0x48, - 0x30,0x84,0x84,0xfc,0x84,0x48,0x48,0x48, - 0x30,0x30,0x30,0xf8,0x84,0x84,0x84,0x84, - 0xf8,0x84,0x84,0x84,0xf8,0x78,0x84,0x84, - 0x80,0x80,0x80,0x80,0x84,0x84,0x78,0xf0, - 0x88,0x84,0x84,0x84,0x84,0x84,0x84,0x88, - 0xf0,0xfc,0x80,0x80,0x80,0x80,0xf8,0x80, - 0x80,0x80,0xfc,0x80,0x80,0x80,0x80,0x80, - 0xf8,0x80,0x80,0x80,0xfc,0x74,0x8c,0x84, - 0x84,0x84,0x9c,0x80,0x80,0x84,0x78,0x84, - 0x84,0x84,0x84,0x84,0xfc,0x84,0x84,0x84, - 0x84,0xe0,0x40,0x40,0x40,0x40,0x40,0x40, - 0x40,0x40,0xe0,0x70,0x88,0x88,0x08,0x08, - 0x08,0x08,0x08,0x08,0x08,0x84,0x84,0x88, - 0x90,0xa0,0xc0,0xa0,0x90,0x88,0x84,0xfc, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x82,0x82,0x92,0x92,0xaa,0xaa,0xc6, - 0xc6,0x82,0x82,0x84,0x8c,0x8c,0x94,0x94, - 0xa4,0xa4,0xc4,0xc4,0x84,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x78,0x80, - 0x80,0x80,0x80,0xf8,0x84,0x84,0x84,0x84, - 0xf8,0x04,0x08,0x10,0x78,0xa4,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x78,0x84,0x84, - 0x88,0x90,0xf8,0x84,0x84,0x84,0x84,0xf8, - 0x78,0x84,0x84,0x04,0x18,0x60,0x80,0x84, - 0x84,0x78,0x10,0x10,0x10,0x10,0x10,0x10, - 0x10,0x10,0x10,0xfe,0x78,0x84,0x84,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x30,0x30, - 0x30,0x48,0x48,0x48,0x84,0x84,0x84,0x84, - 0x44,0x44,0x44,0xaa,0xaa,0xaa,0x92,0x92, - 0x92,0x82,0x84,0x84,0x48,0x48,0x30,0x30, - 0x48,0x48,0x84,0x84,0x10,0x10,0x10,0x10, - 0x10,0x28,0x44,0x44,0x82,0x82,0xfc,0x80, - 0x40,0x40,0x20,0x10,0x08,0x08,0x04,0xfc, - 0xf0,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0xf0,0x04,0x04,0x08, - 0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x80, - 0x80,0xf0,0x10,0x10,0x10,0x10,0x10,0x10, - 0x10,0x10,0x10,0x10,0x10,0xf0,0x88,0x50, - 0x20,0xff,0x20,0x40,0xc0,0xc0,0x74,0x88, - 0x88,0x78,0x08,0x88,0x70,0xb8,0xc4,0x84, - 0x84,0x84,0xc4,0xb8,0x80,0x80,0x80,0x78, - 0x84,0x80,0x80,0x80,0x84,0x78,0x74,0x8c, - 0x84,0x84,0x84,0x8c,0x74,0x04,0x04,0x04, - 0x78,0x84,0x80,0xfc,0x84,0x84,0x78,0x20, - 0x20,0x20,0x20,0x20,0x20,0xf8,0x20,0x20, - 0x1c,0x78,0x84,0x04,0x04,0x74,0x8c,0x84, - 0x84,0x84,0x8c,0x74,0x84,0x84,0x84,0x84, - 0x84,0xc4,0xb8,0x80,0x80,0x80,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0x00,0x20,0x20, - 0x70,0x88,0x08,0x08,0x08,0x08,0x08,0x08, - 0x08,0x08,0x38,0x00,0x08,0x08,0x84,0x88, - 0x90,0xe0,0xa0,0x90,0x88,0x80,0x80,0x80, - 0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0x20,0xe0,0x92,0x92,0x92,0x92,0x92,0x92, - 0xec,0x84,0x84,0x84,0x84,0x84,0xc4,0xb8, - 0x78,0x84,0x84,0x84,0x84,0x84,0x78,0x80, - 0x80,0x80,0x80,0xb8,0xc4,0x84,0x84,0x84, - 0xc4,0xb8,0x04,0x04,0x04,0x04,0x74,0x8c, - 0x84,0x84,0x84,0x8c,0x74,0x80,0x80,0x80, - 0x80,0x80,0xc4,0xb8,0x78,0x84,0x04,0x78, - 0x80,0x84,0x78,0x1c,0x20,0x20,0x20,0x20, - 0x20,0xf8,0x20,0x20,0x74,0x8c,0x84,0x84, - 0x84,0x84,0x84,0x30,0x30,0x48,0x48,0x84, - 0x84,0x84,0x6c,0x92,0x92,0x92,0x92,0x82, - 0x82,0x84,0x84,0x48,0x30,0x48,0x84,0x84, - 0x78,0x84,0x04,0x04,0x74,0x8c,0x84,0x84, - 0x84,0x84,0x84,0xfc,0x80,0x40,0x20,0x10, - 0x08,0xfc,0x1c,0x20,0x20,0x20,0x20,0x20, - 0xc0,0x20,0x20,0x20,0x20,0x20,0x1c,0x80, - 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x80,0xe0,0x10,0x10, - 0x10,0x10,0x10,0x0c,0x10,0x10,0x10,0x10, - 0x10,0xe0,0x98,0xb4,0x64,0x80,0x80,0x80, - 0x80,0x80,0x80,0x80,0x00,0x80,0x80,0x20, - 0x20,0x70,0x88,0x80,0x80,0x88,0x70,0x20, - 0x20,0xb8,0x44,0x40,0x40,0xf0,0x40,0x40, - 0x40,0x48,0x30,0x84,0x78,0x84,0x84,0x84, - 0x78,0x84,0x38,0x10,0x7c,0x10,0x7c,0x28, - 0x44,0x44,0x82,0x82,0x80,0x80,0x80,0x80, - 0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80, - 0x80,0x80,0x78,0x84,0x04,0x18,0x24,0x44, - 0x84,0x88,0x90,0x60,0x80,0x84,0x78,0xd8, - 0x38,0x44,0x92,0xaa,0xa2,0xaa,0x92,0x44, - 0x38,0xf8,0x00,0x68,0x90,0x70,0x10,0x60, - 0x09,0x12,0x24,0x48,0x90,0x48,0x24,0x12, - 0x09,0x04,0x04,0xfc,0xfc,0x38,0x44,0xaa, - 0xaa,0xb2,0xaa,0xb2,0x44,0x38,0xf0,0x60, - 0x90,0x90,0x60,0xfe,0x00,0x10,0x10,0x10, - 0xfe,0x10,0x10,0x10,0xf0,0x40,0x20,0x90, - 0x60,0xe0,0x10,0x60,0x10,0xe0,0x80,0x40, - 0x80,0x80,0x80,0xb4,0xc8,0x88,0x88,0x88, - 0x88,0x88,0x24,0x24,0x24,0x24,0x24,0x24, - 0x64,0xa4,0xa4,0xa4,0xa4,0x7e,0xc0,0xc0, - 0x20,0x40,0xe0,0x40,0x40,0xc0,0x40,0xf8, - 0x00,0x70,0x88,0x88,0x88,0x70,0x90,0x48, - 0x24,0x12,0x09,0x12,0x24,0x48,0x90,0x04, - 0x9e,0x54,0x2c,0x14,0xe8,0x44,0x42,0xc0, - 0x40,0x1e,0x08,0x84,0x52,0x2c,0x10,0xe8, - 0x44,0x42,0xc0,0x40,0x04,0x9e,0x54,0x2c, - 0xd4,0x28,0x44,0x22,0xc0,0x78,0x84,0x84, - 0x80,0x40,0x20,0x20,0x00,0x20,0x20,0x84, - 0x84,0xfc,0x84,0x48,0x48,0x30,0x30,0x00, - 0x20,0x40,0x84,0x84,0xfc,0x84,0x48,0x48, - 0x30,0x30,0x00,0x10,0x08,0x84,0x84,0xfc, - 0x84,0x48,0x48,0x30,0x30,0x00,0x48,0x30, - 0x84,0x84,0xfc,0x84,0x48,0x48,0x30,0x30, - 0x00,0x98,0x64,0x84,0x84,0xfc,0x84,0x48, - 0x48,0x30,0x30,0x00,0x6c,0x84,0x84,0xfc, - 0x84,0x48,0x48,0x30,0x30,0x30,0x48,0x30, - 0x9e,0x90,0x90,0xf0,0x90,0x5c,0x50,0x50, - 0x30,0x1e,0x30,0x08,0x10,0x78,0x84,0x84, - 0x80,0x80,0x80,0x80,0x84,0x84,0x78,0xfc, - 0x80,0x80,0x80,0xf8,0x80,0x80,0xfc,0x00, - 0x20,0x40,0xfc,0x80,0x80,0x80,0xf8,0x80, - 0x80,0xfc,0x00,0x10,0x08,0xfc,0x80,0x80, - 0x80,0xf8,0x80,0x80,0xfc,0x00,0x48,0x30, - 0xfc,0x80,0x80,0x80,0xf8,0x80,0x80,0xfc, - 0x00,0x6c,0xe0,0x40,0x40,0x40,0x40,0x40, - 0x40,0xe0,0x00,0x40,0x80,0xe0,0x40,0x40, - 0x40,0x40,0x40,0x40,0xe0,0x00,0x40,0x20, - 0xe0,0x40,0x40,0x40,0x40,0x40,0x40,0xe0, - 0x00,0x90,0x60,0x70,0x20,0x20,0x20,0x20, - 0x20,0x20,0x70,0x00,0xd8,0x78,0x44,0x42, - 0x42,0x42,0xf2,0x42,0x42,0x44,0x78,0x84, - 0x8c,0x94,0x94,0xa4,0xa4,0xc4,0x84,0x00, - 0x98,0x64,0x78,0x84,0x84,0x84,0x84,0x84, - 0x84,0x78,0x00,0x20,0x40,0x78,0x84,0x84, - 0x84,0x84,0x84,0x84,0x78,0x00,0x10,0x08, - 0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x78, - 0x00,0x48,0x30,0x78,0x84,0x84,0x84,0x84, - 0x84,0x84,0x78,0x00,0x98,0x64,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x78,0x00,0x6c, - 0x84,0x48,0x30,0x30,0x48,0x84,0xbc,0x42, - 0x62,0x52,0x52,0x4a,0x4a,0x46,0x42,0x3d, - 0x78,0x84,0x84,0x84,0x84,0x84,0x84,0x84, - 0x00,0x20,0x40,0x78,0x84,0x84,0x84,0x84, - 0x84,0x84,0x84,0x00,0x10,0x08,0x78,0x84, - 0x84,0x84,0x84,0x84,0x84,0x84,0x00,0x48, - 0x30,0x78,0x84,0x84,0x84,0x84,0x84,0x84, - 0x84,0x00,0x6c,0x10,0x10,0x10,0x10,0x28, - 0x44,0x44,0x82,0x00,0x10,0x08,0xe0,0x40, - 0x7c,0x42,0x42,0x42,0x42,0x7c,0x40,0xe0, - 0x98,0xa4,0x84,0x84,0x84,0x88,0xb0,0x88, - 0x88,0x70,0x74,0x88,0x88,0x78,0x08,0x88, - 0x70,0x00,0x20,0x40,0x74,0x88,0x88,0x78, - 0x08,0x88,0x70,0x00,0x20,0x10,0x74,0x88, - 0x88,0x78,0x08,0x88,0x70,0x00,0x48,0x30, - 0x74,0x88,0x88,0x78,0x08,0x88,0x70,0x00, - 0x98,0x64,0x74,0x88,0x88,0x78,0x08,0x88, - 0x70,0x00,0xd8,0x74,0x88,0x88,0x78,0x08, - 0x88,0x70,0x00,0x30,0x48,0x30,0x6c,0x92, - 0x90,0x7e,0x12,0x92,0x6c,0x30,0x08,0x10, - 0x78,0x84,0x80,0x80,0x80,0x84,0x78,0x78, - 0x84,0x80,0xfc,0x84,0x84,0x78,0x00,0x20, - 0x40,0x78,0x84,0x80,0xfc,0x84,0x84,0x78, - 0x00,0x10,0x08,0x78,0x84,0x80,0xfc,0x84, - 0x84,0x78,0x00,0x48,0x30,0x78,0x84,0x80, - 0xfc,0x84,0x84,0x78,0x00,0x6c,0x20,0x20, - 0x20,0x20,0x20,0x20,0xe0,0x00,0x40,0x80, - 0x20,0x20,0x20,0x20,0x20,0x20,0xe0,0x00, - 0x40,0x20,0x20,0x20,0x20,0x20,0x20,0x20, - 0xe0,0x00,0x90,0x60,0x10,0x10,0x10,0x10, - 0x10,0x10,0x70,0x00,0xd8,0x78,0x84,0x84, - 0x84,0x84,0x84,0x7c,0x04,0xc8,0x30,0xc8, - 0x84,0x84,0x84,0x84,0x84,0xc4,0xb8,0x00, - 0x98,0x64,0x78,0x84,0x84,0x84,0x84,0x84, - 0x78,0x00,0x20,0x40,0x78,0x84,0x84,0x84, - 0x84,0x84,0x78,0x00,0x10,0x08,0x78,0x84, - 0x84,0x84,0x84,0x84,0x78,0x00,0x48,0x30, - 0x78,0x84,0x84,0x84,0x84,0x84,0x78,0x00, - 0x98,0x64,0x78,0x84,0x84,0x84,0x84,0x84, - 0x78,0x00,0x00,0x6c,0x30,0x00,0x00,0xfc, - 0x00,0x00,0x30,0xbc,0x62,0x52,0x4a,0x46, - 0x42,0x3d,0x74,0x8c,0x84,0x84,0x84,0x84, - 0x84,0x00,0x20,0x40,0x74,0x8c,0x84,0x84, - 0x84,0x84,0x84,0x00,0x20,0x10,0x74,0x8c, - 0x84,0x84,0x84,0x84,0x84,0x00,0x48,0x30, - 0x74,0x8c,0x84,0x84,0x84,0x84,0x84,0x00, - 0x00,0x6c,0x78,0x84,0x04,0x04,0x74,0x8c, - 0x84,0x84,0x84,0x84,0x84,0x00,0x20,0x10, - 0xe0,0x40,0x40,0x5c,0x62,0x42,0x42,0x42, - 0x62,0x5c,0x40,0x40,0xc0,0x78,0x84,0x04, - 0x04,0x74,0x8c,0x84,0x84,0x84,0x84,0x84, - 0x00,0x00,0x6c, -}; - -FontDataBLF blf_font_scr15 = { - 0, -4, - 8, 11, - { - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 20, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 8, -1}, - {1, 10, -3, 0, 8, 0}, - {4, 4, -2, -6, 8, 10}, - {8, 10, 0, 0, 8, 14}, - {5, 12, -1, 1, 8, 24}, - {7, 10, 0, 0, 8, 36}, - {7, 10, 0, 0, 8, 46}, - {3, 4, -2, -6, 8, 56}, - {4, 13, -2, 2, 8, 60}, - {4, 13, -2, 2, 8, 73}, - {5, 6, -1, -2, 8, 86}, - {7, 7, 0, -1, 8, 92}, - {3, 5, -2, 3, 8, 99}, - {6, 1, -1, -4, 8, 104}, - {2, 2, -3, 0, 8, 105}, - {6, 12, -1, 1, 8, 107}, - {6, 10, -1, 0, 8, 119}, - {3, 10, -3, 0, 8, 129}, - {6, 10, -1, 0, 8, 139}, - {6, 10, -1, 0, 8, 149}, - {6, 10, -1, 0, 8, 159}, - {6, 10, -1, 0, 8, 169}, - {6, 10, -1, 0, 8, 179}, - {6, 10, -1, 0, 8, 189}, - {6, 10, -1, 0, 8, 199}, - {6, 10, -1, 0, 8, 209}, - {2, 7, -3, 0, 8, 219}, - {2, 9, -3, 2, 8, 226}, - {6, 11, -1, 1, 8, 235}, - {6, 4, -1, -3, 8, 246}, - {6, 11, -1, 1, 8, 250}, - {6, 10, -1, 0, 8, 261}, - {6, 10, -1, 0, 8, 271}, - {6, 10, -1, 0, 8, 281}, - {6, 10, -1, 0, 8, 291}, - {6, 10, -1, 0, 8, 301}, - {6, 10, -1, 0, 8, 311}, - {6, 10, -1, 0, 8, 321}, - {6, 10, -1, 0, 8, 331}, - {6, 10, -1, 0, 8, 341}, - {6, 10, -1, 0, 8, 351}, - {3, 10, -2, 0, 8, 361}, - {5, 10, -1, 0, 8, 371}, - {6, 10, -1, 0, 8, 381}, - {6, 10, -1, 0, 8, 391}, - {7, 10, 0, 0, 8, 401}, - {6, 10, -1, 0, 8, 411}, - {6, 10, -1, 0, 8, 421}, - {6, 10, -1, 0, 8, 431}, - {6, 13, -1, 3, 8, 441}, - {6, 10, -1, 0, 8, 454}, - {6, 10, -1, 0, 8, 464}, - {7, 10, 0, 0, 8, 474}, - {6, 10, -1, 0, 8, 484}, - {6, 10, -1, 0, 8, 494}, - {7, 10, 0, 0, 8, 504}, - {6, 10, -1, 0, 8, 514}, - {7, 10, 0, 0, 8, 524}, - {6, 10, -1, 0, 8, 534}, - {4, 13, -2, 2, 8, 544}, - {6, 12, -1, 1, 8, 557}, - {4, 13, -2, 2, 8, 569}, - {5, 3, -1, -6, 8, 582}, - {8, 1, 0, 3, 8, 585}, - {3, 4, -2, -6, 8, 586}, - {6, 7, -1, 0, 8, 590}, - {6, 10, -1, 0, 8, 597}, - {6, 7, -1, 0, 8, 607}, - {6, 10, -1, 0, 8, 614}, - {6, 7, -1, 0, 8, 624}, - {6, 10, -1, 0, 8, 631}, - {6, 11, -1, 4, 8, 641}, - {6, 10, -1, 0, 8, 652}, - {3, 10, -2, 0, 8, 662}, - {5, 14, -1, 4, 8, 672}, - {6, 10, -1, 0, 8, 686}, - {3, 10, -2, 0, 8, 696}, - {7, 7, 0, 0, 8, 706}, - {6, 7, -1, 0, 8, 713}, - {6, 7, -1, 0, 8, 720}, - {6, 11, -1, 4, 8, 727}, - {6, 11, -1, 4, 8, 738}, - {6, 7, -1, 0, 8, 749}, - {6, 7, -1, 0, 8, 756}, - {6, 9, -1, 0, 8, 763}, - {6, 7, -1, 0, 8, 772}, - {6, 7, -1, 0, 8, 779}, - {7, 7, 0, 0, 8, 786}, - {6, 7, -1, 0, 8, 793}, - {6, 11, -1, 4, 8, 800}, - {6, 7, -1, 0, 8, 811}, - {6, 13, -1, 2, 8, 818}, - {1, 14, -3, 3, 8, 831}, - {6, 13, -1, 2, 8, 845}, - {6, 3, -1, -3, 8, 858}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0,0,0,0,0, -1}, - {0, 0, 0, 0, 8, -1}, - {1, 10, -3, 3, 8, 861}, - {5, 10, -1, 0, 8, 871}, - {6, 10, -1, 0, 8, 881}, - {6, 7, -1, -2, 8, 891}, - {7, 10, 0, 0, 8, 898}, - {1, 14, -3, 3, 8, 908}, - {6, 13, -1, 3, 8, 922}, - {5, 1, -1, -9, 8, 935}, - {7, 9, 0, 0, 8, 936}, - {5, 7, -1, -3, 8, 945}, - {8, 9, 0, 0, 8, 952}, - {6, 3, -1, -3, 8, 961}, - {6, 1, -1, -4, 8, 964}, - {7, 9, 0, 0, 8, 965}, - {4, 1, -2, -9, 8, 974}, - {4, 4, -2, -4, 8, 975}, - {7, 9, 0, 0, 8, 979}, - {4, 5, -2, -5, 8, 988}, - {4, 5, -2, -5, 8, 993}, - {2, 2, -3, -9, 8, 998}, - {6, 10, -1, 3, 8, 1000}, - {7, 12, 0, 2, 8, 1010}, - {2, 1, -3, -4, 8, 1022}, - {3, 3, -3, 3, 8, 1023}, - {3, 5, -3, -5, 8, 1026}, - {5, 7, -1, -3, 8, 1031}, - {8, 9, 0, 0, 8, 1038}, - {7, 10, 0, 0, 8, 1047}, - {7, 11, 0, 1, 8, 1057}, - {7, 9, 0, -1, 8, 1068}, - {6, 10, -1, 2, 8, 1077}, - {6, 11, -1, 0, 8, 1087}, - {6, 11, -1, 0, 8, 1098}, - {6, 11, -1, 0, 8, 1109}, - {6, 11, -1, 0, 8, 1120}, - {6, 10, -1, 0, 8, 1131}, - {6, 11, -1, 0, 8, 1141}, - {7, 10, 0, 0, 8, 1152}, - {6, 13, -1, 3, 8, 1162}, - {6, 11, -1, 0, 8, 1175}, - {6, 11, -1, 0, 8, 1186}, - {6, 11, -1, 0, 8, 1197}, - {6, 10, -1, 0, 8, 1208}, - {3, 11, -2, 0, 8, 1218}, - {3, 11, -2, 0, 8, 1229}, - {4, 11, -2, 0, 8, 1240}, - {5, 10, -1, 0, 8, 1251}, - {7, 10, 0, 0, 8, 1261}, - {6, 11, -1, 0, 8, 1271}, - {6, 11, -1, 0, 8, 1282}, - {6, 11, -1, 0, 8, 1293}, - {6, 11, -1, 0, 8, 1304}, - {6, 11, -1, 0, 8, 1315}, - {6, 10, -1, 0, 8, 1326}, - {6, 6, -1, -1, 8, 1336}, - {8, 10, 0, 0, 8, 1342}, - {6, 11, -1, 0, 8, 1352}, - {6, 11, -1, 0, 8, 1363}, - {6, 11, -1, 0, 8, 1374}, - {6, 10, -1, 0, 8, 1385}, - {7, 11, 0, 0, 8, 1395}, - {7, 10, 0, 0, 8, 1406}, - {6, 10, -1, 0, 8, 1416}, - {6, 10, -1, 0, 8, 1426}, - {6, 10, -1, 0, 8, 1436}, - {6, 10, -1, 0, 8, 1446}, - {6, 10, -1, 0, 8, 1456}, - {6, 9, -1, 0, 8, 1466}, - {6, 11, -1, 0, 8, 1475}, - {7, 7, 0, 0, 8, 1486}, - {6, 10, -1, 3, 8, 1493}, - {6, 10, -1, 0, 8, 1503}, - {6, 10, -1, 0, 8, 1513}, - {6, 10, -1, 0, 8, 1523}, - {6, 9, -1, 0, 8, 1533}, - {3, 10, -2, 0, 8, 1542}, - {3, 10, -2, 0, 8, 1552}, - {4, 10, -2, 0, 8, 1562}, - {5, 9, -1, 0, 8, 1572}, - {6, 11, -1, 0, 8, 1581}, - {6, 10, -1, 0, 8, 1592}, - {6, 10, -1, 0, 8, 1602}, - {6, 10, -1, 0, 8, 1612}, - {6, 10, -1, 0, 8, 1622}, - {6, 10, -1, 0, 8, 1632}, - {6, 10, -1, 0, 8, 1642}, - {6, 7, -1, 0, 8, 1652}, - {8, 7, 0, 0, 8, 1659}, - {6, 10, -1, 0, 8, 1666}, - {6, 10, -1, 0, 8, 1676}, - {6, 10, -1, 0, 8, 1686}, - {6, 10, -1, 0, 8, 1696}, - {6, 14, -1, 4, 8, 1706}, - {7, 13, 0, 3, 8, 1720}, - {6, 14, -1, 4, 8, 1733}, - }, - scr15_bitmap_data, - 0 -}; - -#endif /* BLF_FONT_SCR15_H */ diff --git a/source/blender/blenfont/intern/blf_glyph.c b/source/blender/blenfont/intern/blf_glyph.c index 063093efb1d..142d2145ab2 100644 --- a/source/blender/blenfont/intern/blf_glyph.c +++ b/source/blender/blenfont/intern/blf_glyph.c @@ -31,16 +31,12 @@ #include #include -#ifdef WITH_FREETYPE2 - #include #include FT_FREETYPE_H #include FT_GLYPH_H #include FT_OUTLINE_H -#endif /* WITH_FREETYPE2 */ - #include "MEM_guardedalloc.h" #include "DNA_listBase.h" @@ -59,8 +55,6 @@ #include "blf_internal.h" -#ifdef WITH_FREETYPE2 - GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi) { GlyphCacheBLF *p; @@ -78,10 +72,8 @@ GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi) GlyphCacheBLF *blf_glyph_cache_new(FontBLF *font) { GlyphCacheBLF *gc; - FT_Face face; int i; - face= (FT_Face)font->engine; gc= (GlyphCacheBLF *)MEM_mallocN(sizeof(GlyphCacheBLF), "blf_glyph_cache_new"); gc->next= NULL; gc->prev= NULL; @@ -100,23 +92,23 @@ GlyphCacheBLF *blf_glyph_cache_new(FontBLF *font) gc->y_offs= 0; gc->pad= 3; - gc->num_glyphs= face->num_glyphs; - gc->rem_glyphs= face->num_glyphs; - gc->ascender= ((float)face->size->metrics.ascender) / 64.0f; - gc->descender= ((float)face->size->metrics.descender) / 64.0f; + gc->num_glyphs= font->face->num_glyphs; + gc->rem_glyphs= font->face->num_glyphs; + gc->ascender= ((float)font->face->size->metrics.ascender) / 64.0f; + gc->descender= ((float)font->face->size->metrics.descender) / 64.0f; - if (FT_IS_SCALABLE(face)) { - gc->max_glyph_width= (float)((face->bbox.xMax - face->bbox.xMin) * - (((float)face->size->metrics.x_ppem) / - ((float)face->units_per_EM))); + if (FT_IS_SCALABLE(font->face)) { + gc->max_glyph_width= (float)((font->face->bbox.xMax - font->face->bbox.xMin) * + (((float)font->face->size->metrics.x_ppem) / + ((float)font->face->units_per_EM))); - gc->max_glyph_height= (float)((face->bbox.yMax - face->bbox.yMin) * - (((float)face->size->metrics.y_ppem) / - ((float)face->units_per_EM))); + gc->max_glyph_height= (float)((font->face->bbox.yMax - font->face->bbox.yMin) * + (((float)font->face->size->metrics.y_ppem) / + ((float)font->face->units_per_EM))); } else { - gc->max_glyph_width= ((float)face->size->metrics.max_advance) / 64.0f; - gc->max_glyph_height= ((float)face->size->metrics.height) / 64.0f; + gc->max_glyph_width= ((float)font->face->size->metrics.max_advance) / 64.0f; + gc->max_glyph_height= ((float)font->face->size->metrics.height) / 64.0f; } gc->p2_width= 0; @@ -203,7 +195,6 @@ GlyphBLF *blf_glyph_texture_add(FontBLF *font, FT_UInt index, unsigned int c) GlyphCacheBLF *gc; GlyphBLF *g; GlyphTextureBLF *gt; - FT_Face face; FT_Error err; FT_Bitmap bitmap; FT_BBox bbox; @@ -222,13 +213,12 @@ GlyphBLF *blf_glyph_texture_add(FontBLF *font, FT_UInt index, unsigned int c) else do_new= 1; - face= (FT_Face)font->engine; - err= FT_Load_Glyph(face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); + err= FT_Load_Glyph(font->face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); if (err) return(NULL); /* get the glyph. */ - slot= face->glyph; + slot= font->face->glyph; err= FT_Render_Glyph(slot, FT_RENDER_MODE_NORMAL); if (err || slot->format != FT_GLYPH_FORMAT_BITMAP) @@ -317,7 +307,6 @@ GlyphBLF *blf_glyph_bitmap_add(FontBLF *font, FT_UInt index, unsigned int c) GlyphCacheBLF *gc; GlyphBLF *g; GlyphBitmapBLF *gt; - FT_Face face; FT_Error err; FT_Bitmap bitmap; FT_BBox bbox; @@ -339,13 +328,12 @@ GlyphBLF *blf_glyph_bitmap_add(FontBLF *font, FT_UInt index, unsigned int c) else do_new= 1; - face= (FT_Face)font->engine; - err= FT_Load_Glyph(face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); + err= FT_Load_Glyph(font->face, index, FT_LOAD_NO_HINTING | FT_LOAD_NO_BITMAP); if (err) return(NULL); /* get the glyph. */ - slot= face->glyph; + slot= font->face->glyph; err= FT_Render_Glyph(slot, FT_RENDER_MODE_MONO); if (err || slot->format != FT_GLYPH_FORMAT_BITMAP) @@ -433,7 +421,7 @@ void blf_glyph_free(GlyphBLF *g) MEM_freeN(g); } -static void blf_glyph_texture_draw(float uv[2][2], float dx, float y1, float dx1, float y2) +static void blf_texture_draw(float uv[2][2], float dx, float y1, float dx1, float y2) { glBegin(GL_QUADS); @@ -452,7 +440,7 @@ static void blf_glyph_texture_draw(float uv[2][2], float dx, float y1, float dx1 } -static void blf_glyph_texture5_draw(float uv[2][2], float x1, float y1, float x2, float y2) +static void blf_texture5_draw(float uv[2][2], float x1, float y1, float x2, float y2) { float soft[25]= { 1/60.0f, 1/60.0f, 2/60.0f, 1/60.0f, 1/60.0f, @@ -469,14 +457,14 @@ static void blf_glyph_texture5_draw(float uv[2][2], float x1, float y1, float x2 for(dx=-2; dx<3; dx++) { for(dy=-2; dy<3; dy++, fp++) { glColor4f(color[0], color[1], color[2], fp[0]*color[3]); - blf_glyph_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy); + blf_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy); } } glColor4fv(color); } -static void blf_glyph_texture3_draw(float uv[2][2], float x1, float y1, float x2, float y2) +static void blf_texture3_draw(float uv[2][2], float x1, float y1, float x2, float y2) { float soft[9]= {1/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 4/16.0f, 2/16.0f, 1/16.0f, 2/16.0f, 1/16.0f}; float color[4], *fp= soft; @@ -487,15 +475,13 @@ static void blf_glyph_texture3_draw(float uv[2][2], float x1, float y1, float x2 for(dx=-1; dx<2; dx++) { for(dy=-1; dy<2; dy++, fp++) { glColor4f(color[0], color[1], color[2], fp[0]*color[3]); - blf_glyph_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy); + blf_texture_draw(uv, x1+dx, y1+dy, x2+dx, y2+dy); } } glColor4fv(color); } - - int blf_glyph_texture_render(FontBLF *font, GlyphBLF *g, float x, float y) { GlyphTextureBLF *gt; @@ -525,11 +511,11 @@ int blf_glyph_texture_render(FontBLF *font, GlyphBLF *g, float x, float y) glBindTexture(GL_TEXTURE_2D, gt->tex); if (font->blur==3) - blf_glyph_texture3_draw(gt->uv, dx, y1, dx1, y2); + blf_texture3_draw(gt->uv, dx, y1, dx1, y2); else if (font->blur==5) - blf_glyph_texture5_draw(gt->uv, dx, y1, dx1, y2); + blf_texture5_draw(gt->uv, dx, y1, dx1, y2); else - blf_glyph_texture_draw(gt->uv, dx, y1, dx1, y2); + blf_texture_draw(gt->uv, dx, y1, dx1, y2); return(1); } @@ -543,6 +529,17 @@ int blf_glyph_bitmap_render(FontBLF *font, GlyphBLF *g, float x, float y) if (!gt->image) return(1); + if (font->flags & BLF_CLIPPING) { + if (!BLI_in_rctf(&font->clip_rec, x + font->pos[0], y + font->pos[1])) + return(0); + if (!BLI_in_rctf(&font->clip_rec, x + font->pos[0], y + gt->height + font->pos[1])) + return(0); + if (!BLI_in_rctf(&font->clip_rec, x + gt->width + font->pos[0], y + gt->height + font->pos[1])) + return(0); + if (!BLI_in_rctf(&font->clip_rec, x + gt->width + font->pos[0], y + font->pos[1])) + return(0); + } + glBitmap(0, 0, 0.0, 0.0, x + font->pos[0], y - font->pos[1], (const GLubyte *)&null_bitmap); glPixelStorei(GL_UNPACK_ROW_LENGTH, gt->pitch * 8); glBitmap(gt->width, gt->height, 0.0, gt->pos_y, 0.0, 0.0, (const GLubyte *)gt->image); @@ -556,5 +553,3 @@ int blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y) return(blf_glyph_bitmap_render(font, g, x, y)); return(blf_glyph_texture_render(font, g, x, y)); } - -#endif /* WITH_FREETYPE2 */ diff --git a/source/blender/blenfont/intern/blf_internal.c b/source/blender/blenfont/intern/blf_internal.c deleted file mode 100644 index d868a0fa32a..00000000000 --- a/source/blender/blenfont/intern/blf_internal.c +++ /dev/null @@ -1,392 +0,0 @@ -/** - * $Id: - * - * ***** BEGIN GPL LICENSE BLOCK ***** - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * The Original Code is Copyright (C) 2009 Blender Foundation. - * All rights reserved. - * - * - * Contributor(s): Blender Foundation - * - * ***** END GPL LICENSE BLOCK ***** - */ - -#include -#include -#include - -#ifdef WITH_FREETYPE2 - -#include - -#include FT_FREETYPE_H -#include FT_GLYPH_H - -#endif /* WITH_FREETYPE2 */ - -#include "MEM_guardedalloc.h" - -#include "DNA_listBase.h" -#include "DNA_vec_types.h" - -#include "BKE_utildefines.h" - -#include "BLI_blenlib.h" -#include "BLI_linklist.h" /* linknode */ -#include "BLI_string.h" -#include "BLI_arithb.h" - -#include "BIF_gl.h" -#include "BLF_api.h" - -#include "blf_internal_types.h" -#include "blf_internal.h" -#include "blf_font_helv10.h" - -#ifndef BLF_INTERNAL_MINIMAL -#include "blf_font_helv12.h" -#include "blf_font_helvb8.h" -#include "blf_font_helvb10.h" -#include "blf_font_helvb12.h" -#include "blf_font_scr12.h" -#include "blf_font_scr14.h" -#include "blf_font_scr15.h" -#endif - -int blf_internal_get_texture(FontBLF *font) -{ - FontDataBLF *data; - CharDataBLF *cd; - int width; - int height; - int c_rows, c_cols, c_width, c_height; - int i_width, i_height; - GLubyte *img, *img_row, *chr_row, *img_pxl; - int base_line, i, cell_x, cell_y, y, x; - int byte_idx, bit_idx; - - data= (FontDataBLF *)font->engine; - if (data->texid != 0) - return(0); - - width= data->xmax - data->xmin; - height= data->ymax - data->ymin; - c_rows= 16; - c_cols= 16; - c_width= 16; - c_height= 16; - i_width= c_cols * c_width; - i_height= c_rows * c_height; - base_line= -(data->ymin); - img= (GLubyte *)malloc(i_height * i_width); - memset((void *)img, 0, i_height * i_width); - - if (width >= 16 || height >= 16) { - printf("Warning: Bad font size for: %s\n", font->name); - return(-1); - } - - for (i= 0; i < 256; i++) { - cd= &data->chars[i]; - - if (cd->data_offset != -1) { - cell_x= i%16; - cell_y= i/16; - - for (y= 0; y < cd->height; y++) { - img_row = &img[(cell_y*c_height + y + base_line - cd->yorig)*i_width]; - chr_row = &data->bitmap_data[cd->data_offset + ((cd->width+7)/8)*y]; - - for (x= 0; x < cd->width; x++) { - img_pxl= &img_row[(cell_x*c_width + x - cd->xorig)]; - byte_idx= x/8; - bit_idx= 7 - (x%8); - - if (chr_row[byte_idx]&(1<texid); - glBindTexture(GL_TEXTURE_2D, data->texid); - glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA4, i_width, i_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, img); - if (glGetError()) { - glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE4_ALPHA4, i_width, i_height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, img); - } - - glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - free((void *)img); - return(0); -} - -void blf_internal_size(FontBLF *font, int size, int dpi) -{ - return; -} - -void blf_internal_texture_draw(FontBLF *font, char *str) -{ - FontDataBLF *data; - CharDataBLF *cd; - unsigned char c; - float pos, cell_x, cell_y, x, y, z; - int base_line; - GLint cur_tex; - float dx, dx1, dy, dy1; - - data= (FontDataBLF *)font->engine; - base_line= -(data->ymin); - pos= 0; - x= 0.0f; - y= 0.0f; - z= 0.0f; - - glGetIntegerv(GL_TEXTURE_2D_BINDING_EXT, &cur_tex); - if (cur_tex != data->texid) - glBindTexture(GL_TEXTURE_2D, data->texid); - - while ((c= (unsigned char) *str++)) { - cd= &data->chars[c]; - - if (cd->data_offset != -1) { - cell_x= (c%16)/16.0; - cell_y= (c/16)/16.0; - - dx= x + pos + 16.0; - dx1= x + pos + 0.0; - dy= -base_line + y + 0.0; - dy1= -base_line + y + 16.0; - - if (font->flags & BLF_CLIPPING) { - if (!BLI_in_rctf(&font->clip_rec, dx + font->pos[0], dy + font->pos[1])) - return; - if (!BLI_in_rctf(&font->clip_rec, dx + font->pos[0], dy1 + font->pos[1])) - return; - if (!BLI_in_rctf(&font->clip_rec, dx1 + font->pos[0], dy1 + font->pos[1])) - return; - if (!BLI_in_rctf(&font->clip_rec, dx1 + font->pos[0], dy + font->pos[1])) - return; - } - - glBegin(GL_QUADS); - glTexCoord2f(cell_x + 1.0/16.0, cell_y); - glVertex3f(dx, dy, z); - - glTexCoord2f(cell_x + 1.0/16.0, cell_y + 1.0/16.0); - glVertex3f(dx, dy1, z); - - glTexCoord2f(cell_x, cell_y + 1.0/16.0); - glVertex3f(dx1, dy1, z); - - glTexCoord2f(cell_x, cell_y); - glVertex3f(dx1, dy, z); - glEnd(); - } - - pos += cd->advance; - } -} - -void blf_internal_bitmap_draw(FontBLF *font, char *str) -{ - FontDataBLF *data; - CharDataBLF *cd; - unsigned char c; - GLint alignment; - - data= (FontDataBLF *)font->engine; - - glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment); - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - while ((c= (unsigned char) *str++)) { - cd= &data->chars[c]; - - if (cd->data_offset==-1) { - GLubyte nullBitmap= 0; - glBitmap(1, 1, 0, 0, cd->advance, 0, &nullBitmap); - } else { - GLubyte *bitmap= &data->bitmap_data[cd->data_offset]; - glBitmap(cd->width, cd->height, cd->xorig, cd->yorig, cd->advance, 0, bitmap); - } - } - - glPixelStorei(GL_UNPACK_ALIGNMENT, alignment); -} - -void blf_internal_draw(FontBLF *font, char *str) -{ - if (font->mode == BLF_MODE_BITMAP) - blf_internal_bitmap_draw(font, str); - else - blf_internal_texture_draw(font, str); -} - -void blf_internal_boundbox(FontBLF *font, char *str, rctf *box) -{ - FontDataBLF *data; - unsigned char c; - int length= 0; - int ascent= 0; - int descent= 0; - int a=0, d=0; - - data= (FontDataBLF *)font->engine; - while ((c= (unsigned char) *str++)) { - length += data->chars[c].advance; - d = data->chars[c].yorig; - a = data->chars[c].height - data->chars[c].yorig; - if (a > ascent) - ascent= a; - if (d > descent) - descent= d; - } - box->xmin = (float)0; - box->ymin = (float)-descent * font->aspect; - box->xmax = (float)length * font->aspect; - box->ymax = (float)ascent * font->aspect; -} - -float blf_internal_width(FontBLF *font, char *str) -{ - FontDataBLF *data; - unsigned char c; - int length= 0; - - data= (FontDataBLF *)font->engine; - while ((c= (unsigned char) *str++)) { - length += data->chars[c].advance; - } - - return((float)(length * font->aspect)); -} - -float blf_internal_height(FontBLF *font, char *str) -{ - FontDataBLF *data; - - data= (FontDataBLF *)font->engine; - return(((float)(data->ymax - data->ymin)) * font->aspect); -} - -void blf_internal_free(FontBLF *font) -{ - FontDataBLF *data; - - data= (FontDataBLF *)font->engine; - if (data->texid != 0) { - glDeleteTextures(1, &data->texid); - data->texid= 0; - } - - MEM_freeN(font->name); - MEM_freeN(font); -} - -FontBLF *blf_internal_new(char *name) -{ - FontBLF *font; - - font= (FontBLF *)MEM_mallocN(sizeof(FontBLF), "blf_internal_new"); - font->name= BLI_strdup(name); - font->filename= NULL; - - if (!strcmp(name, "helv10")) { - font->engine= (void *)&blf_font_helv10; - font->size= 10; - } -#ifndef BLF_INTERNAL_MINIMAL - else if (!strcmp(name, "helv12")) { - font->engine= (void *)&blf_font_helv12; - font->size= 12; - } - else if (!strcmp(name, "helvb8")) { - font->engine= (void *)&blf_font_helvb8; - font->size= 8; - } - else if (!strcmp(name, "helvb10")) { - font->engine= (void *)&blf_font_helvb10; - font->size= 10; - } - else if (!strcmp(name, "helvb12")) { - font->engine= (void *)&blf_font_helvb12; - font->size= 12; - } - else if (!strcmp(name, "scr12")) { - font->engine= (void *)&blf_font_scr12; - font->size= 12; - } - else if (!strcmp(name, "scr14")) { - font->engine= (void *)&blf_font_scr14; - font->size= 14; - } - else if (!strcmp(name, "scr15")) { - font->engine= (void *)&blf_font_scr15; - font->size= 15; - } -#endif - else - font->engine= NULL; - - if (!font->engine) { - MEM_freeN(font->name); - MEM_freeN(font); - return(NULL); - } - - font->type= BLF_FONT_INTERNAL; - font->ref= 1; - font->mode= BLF_MODE_TEXTURE; - font->aspect= 1.0f; - font->pos[0]= 0.0f; - font->pos[1]= 0.0f; - font->angle= 0.0f; - Mat4One(font->mat); - font->clip_rec.xmin= 0.0f; - font->clip_rec.xmax= 0.0f; - font->clip_rec.ymin= 0.0f; - font->clip_rec.ymax= 0.0f; - font->flags= 0; - font->dpi= 72; - font->cache.first= NULL; - font->cache.last= NULL; - font->glyph_cache= NULL; - glGetIntegerv(GL_MAX_TEXTURE_SIZE, (GLint *)&font->max_tex_size); - - font->size_set= blf_internal_size; - font->draw= blf_internal_draw; - font->boundbox_get= blf_internal_boundbox; - font->width_get= blf_internal_width; - font->height_get= blf_internal_height; - font->free= blf_internal_free; - - if (font->mode == BLF_MODE_TEXTURE) { - if (blf_internal_get_texture(font) != 0) { - MEM_freeN(font->name); - MEM_freeN(font); - return(NULL); - } - } - - return(font); -} diff --git a/source/blender/blenfont/intern/blf_internal.h b/source/blender/blenfont/intern/blf_internal.h index 87d5938db9c..c9bdc428ebb 100644 --- a/source/blender/blenfont/intern/blf_internal.h +++ b/source/blender/blenfont/intern/blf_internal.h @@ -33,17 +33,22 @@ unsigned int blf_hash(unsigned int val); int blf_utf8_next(unsigned char *buf, int *iindex); char *blf_dir_search(const char *file); +char *blf_dir_metrics_search(char *filename); int blf_dir_split(const char *str, char *file, int *size); int blf_font_init(void); void blf_font_exit(void); -FontBLF *blf_internal_new(char *name); - -#ifdef WITH_FREETYPE2 - FontBLF *blf_font_new(char *name, char *filename); FontBLF *blf_font_new_from_mem(char *name, unsigned char *mem, int mem_size); +void blf_font_attach_from_mem(FontBLF *font, const unsigned char *mem, int mem_size); + +void blf_font_size(FontBLF *font, int size, int dpi); +void blf_font_draw(FontBLF *font, char *str); +void blf_font_boundbox(FontBLF *font, char *str, rctf *box); +float blf_font_width(FontBLF *font, char *str); +float blf_font_height(FontBLF *font, char *str); +void blf_font_free(FontBLF *font); GlyphCacheBLF *blf_glyph_cache_find(FontBLF *font, int size, int dpi); GlyphCacheBLF *blf_glyph_cache_new(FontBLF *font); @@ -55,5 +60,4 @@ GlyphBLF *blf_glyph_add(FontBLF *font, FT_UInt index, unsigned int c); void blf_glyph_free(GlyphBLF *g); int blf_glyph_render(FontBLF *font, GlyphBLF *g, float x, float y); -#endif /* WITH_FREETYPE2 */ #endif /* BLF_INTERNAL_H */ diff --git a/source/blender/blenfont/intern/blf_internal_types.h b/source/blender/blenfont/intern/blf_internal_types.h index cf42dc69f77..1c55499b568 100644 --- a/source/blender/blenfont/intern/blf_internal_types.h +++ b/source/blender/blenfont/intern/blf_internal_types.h @@ -140,15 +140,9 @@ typedef struct FontBLF { /* filename or NULL. */ char *filename; - /* font type, can be freetype2 or internal. */ - int type; - /* draw mode, texture or bitmap. */ int mode; - /* reference count. */ - int ref; - /* aspect ratio or scale. */ float aspect; @@ -185,36 +179,10 @@ typedef struct FontBLF { /* current glyph cache, size and dpi. */ GlyphCacheBLF *glyph_cache; - /* engine data. */ - void *engine; - - /* engine functions. */ - void (*size_set)(struct FontBLF *, int, int); - void (*draw)(struct FontBLF *, char *); - void (*boundbox_get)(struct FontBLF *, char *, rctf *); - float (*width_get)(struct FontBLF *, char *); - float (*height_get)(struct FontBLF *, char *); - void (*free)(struct FontBLF *); + /* freetype2 face. */ + FT_Face face; } FontBLF; -typedef struct CharDataBLF { - signed char width, height; - signed char xorig, yorig; - signed char advance; - - short data_offset; -} CharDataBLF; - -typedef struct FontDataBLF { - int xmin, ymin; - int xmax, ymax; - - CharDataBLF chars[256]; - unsigned char *bitmap_data; - - GLuint texid; -} FontDataBLF; - typedef struct DirBLF { struct DirBLF *next; struct DirBLF *prev; @@ -223,12 +191,4 @@ typedef struct DirBLF { char *path; } DirBLF; -/* font->clip_mode */ -#define BLF_CLIP_DISABLE 0 -#define BLF_CLIP_OUT 1 - -/* font->type */ -#define BLF_FONT_FREETYPE2 0 -#define BLF_FONT_INTERNAL 1 - #endif /* BLF_INTERNAL_TYPES_H */ diff --git a/source/blender/blenfont/intern/blf_lang.c b/source/blender/blenfont/intern/blf_lang.c index c871435ff0f..024172d6db4 100644 --- a/source/blender/blenfont/intern/blf_lang.c +++ b/source/blender/blenfont/intern/blf_lang.c @@ -107,7 +107,7 @@ void BLF_lang_init(void) } } -void BLF_lang_set(char *str) +void BLF_lang_set(const char *str) { #if defined (_WIN32) || defined(__APPLE__) char envstr[12]; @@ -140,14 +140,13 @@ void BLF_lang_set(char *str) setlocale(LC_NUMERIC, "C"); #endif - + textdomain(DOMAIN_NAME); bindtextdomain(DOMAIN_NAME, global_messagepath); /* bind_textdomain_codeset(DOMAIN_NAME, global_encoding_name); */ - textdomain(DOMAIN_NAME); strcpy(global_language, str); } -void BLF_lang_encoding(char *str) +void BLF_lang_encoding(const char *str) { strcpy(global_encoding_name, str); /* bind_textdomain_codeset(DOMAIN_NAME, encoding_name); */ diff --git a/source/blender/blenfont/intern/blf_util.c b/source/blender/blenfont/intern/blf_util.c index a4ccbedc38b..03e1066caa1 100644 --- a/source/blender/blenfont/intern/blf_util.c +++ b/source/blender/blenfont/intern/blf_util.c @@ -30,6 +30,8 @@ #include #include +#include "BIF_gl.h" + unsigned int blf_next_p2(unsigned int x) { @@ -74,34 +76,30 @@ int blf_utf8_next(unsigned char *buf, int *iindex) * * Returns 0 to indicate an error (e.g. invalid UTF8) */ - int index= *iindex, r; - unsigned char d= buf[index++], d2, d3, d4; + int index= *iindex, len, r; + unsigned char d, d2, d3, d4; + d= buf[index++]; if (!d) return(0); - if (d < 0x80) { - *iindex= index; - return(d); - } + while (buf[index] && ((buf[index] & 0xc0) == 0x80)) + index++; - if ((d & 0xe0) == 0xc0) { + len= index - *iindex; + if (len == 1) + r= d; + else if (len == 2) { /* 2 byte */ - d2= buf[index++]; - if ((d2 & 0xc0) != 0x80) - return(0); + d2= buf[*iindex + 1]; r= d & 0x1f; /* copy lower 5 */ r <<= 6; r |= (d2 & 0x3f); /* copy lower 6 */ } - else if ((d & 0xf0) == 0xe0) { + else if (len == 3) { /* 3 byte */ - d2= buf[index++]; - d3= buf[index++]; - - if ((d2 & 0xc0) != 0x80 || (d3 & 0xc0) != 0x80) - return(0); - + d2= buf[*iindex + 1]; + d3= buf[*iindex + 2]; r= d & 0x0f; /* copy lower 4 */ r <<= 6; r |= (d2 & 0x3f); @@ -110,14 +108,9 @@ int blf_utf8_next(unsigned char *buf, int *iindex) } else { /* 4 byte */ - d2= buf[index++]; - d3= buf[index++]; - d4= buf[index++]; - - if ((d2 & 0xc0) != 0x80 || (d3 & 0xc0) != 0x80 || - (d4 & 0xc0) != 0x80) - return(0); - + d2= buf[*iindex + 1]; + d3= buf[*iindex + 2]; + d4= buf[*iindex + 3]; r= d & 0x0f; /* copy lower 4 */ r <<= 6; r |= (d2 & 0x3f); diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h index 5a374802d36..795c7585b9c 100644 --- a/source/blender/blenkernel/BKE_blender.h +++ b/source/blender/blenkernel/BKE_blender.h @@ -55,6 +55,9 @@ int BKE_read_file_from_memfile(struct bContext *C, struct MemFile *memfile, stru void free_blender(void); void initglobals(void); +/* load new userdef from file, exit blender */ +void BKE_userdef_free(void); + /* set this callback when a UI is running */ void set_blender_test_break_cb(void (*func)(void) ); int blender_test_break(void); diff --git a/source/blender/blenkernel/BKE_fcurve.h b/source/blender/blenkernel/BKE_fcurve.h index 3dd083476ce..9b8a2990fe5 100644 --- a/source/blender/blenkernel/BKE_fcurve.h +++ b/source/blender/blenkernel/BKE_fcurve.h @@ -68,6 +68,8 @@ typedef struct FModifierTypeInfo { void (*verify_data)(struct FModifier *fcm); /* evaluation */ + /* evaluate time that the modifier requires the F-Curve to be evaluated at */ + float (*evaluate_modifier_time)(struct FCurve *fcu, struct FModifier *fcm, float cvalue, float evaltime); /* evaluate the modifier for the given time and 'accumulated' value */ void (*evaluate_modifier)(struct FCurve *fcu, struct FModifier *fcm, float *cvalue, float evaltime); } FModifierTypeInfo; @@ -125,7 +127,7 @@ void copy_fcurves(ListBase *dst, ListBase *src); struct FCurve *list_find_fcurve(ListBase *list, const char rna_path[], const int array_index); /* test if there is a keyframe at cfra */ -int on_keyframe_fcurve(struct FCurve *fcu, float cfra); +short on_keyframe_fcurve(struct FCurve *fcu, float cfra); /* get the time extents for F-Curve */ void calc_fcurve_range(struct FCurve *fcu, float *min, float *max); diff --git a/source/blender/blenkernel/BKE_global.h b/source/blender/blenkernel/BKE_global.h index ac161caeb2e..4b7ddf43647 100644 --- a/source/blender/blenkernel/BKE_global.h +++ b/source/blender/blenkernel/BKE_global.h @@ -45,7 +45,6 @@ extern "C" { struct Main; struct Object; struct bSoundListener; -struct BMF_Font; struct BME_Glob; typedef struct Global { @@ -53,9 +52,6 @@ typedef struct Global { /* active pointers */ struct Main *main; - /* fonts, allocated global data */ - struct BMF_Font *font, *fonts, *fontss; - /* strings: lastsaved */ char ima[256], sce[256], lib[256]; diff --git a/source/blender/blenkernel/BKE_library.h b/source/blender/blenkernel/BKE_library.h index 212e9f08c35..e598394cc60 100644 --- a/source/blender/blenkernel/BKE_library.h +++ b/source/blender/blenkernel/BKE_library.h @@ -61,6 +61,7 @@ void free_main(struct Main *mainvar); void splitIDname(char *name, char *left, int *nr); void rename_id(struct ID *id, char *name); void test_idbutton(char *name); +void text_idbutton(struct ID *id, char *text); void all_local(struct Library *lib, int untagged_only); struct ID *find_id(char *type, char *name); void clear_id_newpoins(void); diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h index 8ac3b4b0b51..4797616a471 100644 --- a/source/blender/blenkernel/BKE_screen.h +++ b/source/blender/blenkernel/BKE_screen.h @@ -38,6 +38,7 @@ struct bScreen; struct ListBase; struct Panel; struct Header; +struct Menu; struct ScrArea; struct SpaceType; struct wmNotifier; @@ -136,6 +137,9 @@ typedef struct ARegionType { /* header type definitions */ ListBase headertypes; + /* menu type definitions */ + ListBase menutypes; + /* hardcoded constraints, smaller than these values region is not visible */ int minsizex, minsizey; /* default keymaps to add */ @@ -183,6 +187,27 @@ typedef struct HeaderType { void (*py_free)(void *py_data); } HeaderType; +/* menu types */ + +typedef struct MenuType { + struct MenuType *next, *prev; + + char idname[BKE_ST_MAXNAME]; /* unique name */ + char label[BKE_ST_MAXNAME]; /* for button text */ + int space_type; + + /* verify if the menu should draw or not */ + int (*poll)(const struct bContext *, struct MenuType *); + /* draw entirely, view changes should be handled here */ + void (*draw)(const struct bContext *, struct Menu *); + + /* python integration */ + void *py_data; + struct StructRNA *py_srna; + int (*py_call)(struct PointerRNA *, struct FunctionRNA *, struct ParameterList *); + void (*py_free)(void *py_data); +} MenuType; + /* spacetypes */ struct SpaceType *BKE_spacetype_from_id(int spaceid); struct ARegionType *BKE_regiontype_from_id(struct SpaceType *st, int regionid); diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt index 5a612df2589..ebe0ea74c28 100644 --- a/source/blender/blenkernel/CMakeLists.txt +++ b/source/blender/blenkernel/CMakeLists.txt @@ -31,7 +31,7 @@ SET(INC ../render/extern/include ../../../intern/decimation/extern ../imbuf ../avi ../../../intern/elbeem/extern ../../../intern/opennl/extern ../../../intern/iksolver/extern ../blenloader ../quicktime - ../../../intern/bmfont ../../../extern/bullet2/src + ../../../extern/bullet2/src ../nodes ../../../extern/glew/include ../gpu ../makesrna ../../../intern/bsp/extern ${SDL_INC} @@ -66,10 +66,6 @@ ELSE(WITH_PYTHON) ADD_DEFINITIONS(-DDISABLE_PYTHON) ENDIF(WITH_PYTHON) -IF(WITH_INTERNATIONAL) - ADD_DEFINITIONS(-DWITH_FREETYPE2) -ENDIF(WITH_INTERNATIONAL) - IF(NOT WITH_ELBEEM) ADD_DEFINITIONS(-DDISABLE_ELBEEM) ENDIF(NOT WITH_ELBEEM) diff --git a/source/blender/blenkernel/SConscript b/source/blender/blenkernel/SConscript index 86ff3a43045..19d150b34a8 100644 --- a/source/blender/blenkernel/SConscript +++ b/source/blender/blenkernel/SConscript @@ -8,7 +8,6 @@ incs += ' ../render/extern/include #/intern/decimation/extern ../makesrna' incs += ' ../imbuf ../avi #/intern/elbeem/extern ../nodes' incs += ' #/intern/iksolver/extern ../blenloader' incs += ' #/extern/bullet2/src' -incs += ' #/intern/bmfont' incs += ' #/intern/opennl/extern #/intern/bsp/extern' incs += ' ../gpu #/extern/glew/include' @@ -33,9 +32,6 @@ if env['WITH_BF_SDL']: else: defs.append('DISABLE_SDL') -if env['WITH_BF_INTERNATIONAL']: - defs.append('WITH_FREETYPE2') - if env['WITH_BF_OPENEXR']: defs.append('WITH_OPENEXR') diff --git a/source/blender/blenkernel/intern/Makefile b/source/blender/blenkernel/intern/Makefile index 6554c93662d..1528ec1c86e 100644 --- a/source/blender/blenkernel/intern/Makefile +++ b/source/blender/blenkernel/intern/Makefile @@ -59,8 +59,6 @@ CPPFLAGS += -I../../editors/include # to include the render stuff: CPPFLAGS += -I../../render/extern/include -# for image stamping -CPPFLAGS += -I$(NAN_BMFONT)/include # for sound #CPPFLAGS += -I../../../kernel/gen_system CPPFLAGS += $(NAN_SDLCFLAGS) @@ -85,12 +83,8 @@ CPPFLAGS += -I.. # path to bullet2, for cloth CPPFLAGS += -I../../../../extern/bullet2/src - -ifeq ($(WITH_FREETYPE2), true) - CPPFLAGS += -DWITH_FREETYPE2 - CPPFLAGS += -I$(NAN_FREETYPE)/include - CPPFLAGS += -I$(NAN_FREETYPE)/include/freetype2 -endif +CPPFLAGS += -I$(NAN_FREETYPE)/include +CPPFLAGS += -I$(NAN_FREETYPE)/include/freetype2 ifeq ($(WITH_FFMPEG),true) CPPFLAGS += -DWITH_FFMPEG diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c index 2033250585d..3169905b7f5 100644 --- a/source/blender/blenkernel/intern/blender.c +++ b/source/blender/blenkernel/intern/blender.c @@ -325,8 +325,8 @@ static void setup_app_data(bContext *C, BlendFileData *bfd, char *filename) if (bfd->user) { /* only here free userdef themes... */ - BLI_freelistN(&U.themes); - + BKE_userdef_free(); + U= *bfd->user; MEM_freeN(bfd->user); } @@ -414,6 +414,15 @@ static void handle_subversion_warning(Main *main) } +void BKE_userdef_free(void) +{ + + BLI_freelistN(&U.uistyles); + BLI_freelistN(&U.uifonts); + BLI_freelistN(&U.themes); + +} + /* returns: 0: no load file 1: OK diff --git a/source/blender/blenkernel/intern/depsgraph.c b/source/blender/blenkernel/intern/depsgraph.c index 8bd848ea9e6..dfe3b7ea279 100644 --- a/source/blender/blenkernel/intern/depsgraph.c +++ b/source/blender/blenkernel/intern/depsgraph.c @@ -33,8 +33,6 @@ #include "BLI_winstuff.h" #endif -//#include "BMF_Api.h" - #include "BLI_blenlib.h" #include "BLI_arithb.h" diff --git a/source/blender/blenkernel/intern/fcurve.c b/source/blender/blenkernel/intern/fcurve.c index b4cec927e30..cade555a07a 100644 --- a/source/blender/blenkernel/intern/fcurve.c +++ b/source/blender/blenkernel/intern/fcurve.c @@ -19,6 +19,7 @@ #include "BLI_blenlib.h" #include "BLI_arithb.h" +#include "BLI_noise.h" #include "BKE_fcurve.h" #include "BKE_curve.h" @@ -174,15 +175,16 @@ FCurve *list_find_fcurve (ListBase *list, const char rna_path[], const int array return NULL; } -int on_keyframe_fcurve(FCurve *fcu, float cfra) +short on_keyframe_fcurve(FCurve *fcu, float cfra) { BezTriple *bezt; - int i; + unsigned i; bezt= fcu->bezt; - for (i=0; itotvert; i++, bezt++) - if(IS_EQ(bezt->vec[1][0], cfra)) + for (i=0; itotvert; i++, bezt++) { + if (IS_EQ(bezt->vec[1][0], cfra)) return 1; + } return 0; } @@ -1252,47 +1254,11 @@ static FModifierTypeInfo FMI_MODNAME = { fcm_modname_copy, /* copy data */ fcm_modname_new_data, /* new data */ fcm_modname_verify, /* verify */ + fcm_modname_time, /* evaluate time */ fcm_modname_evaluate /* evaluate */ }; #endif -/* Utilities For F-Curve Modifiers ---------------------- */ - -/* Recalculate the F-Curve at evaltime, as modified by the given F-Curve */ -// TODO: this isn't really such an elegant solution for time-modifying F-Modifiers, but it gets too difficult otherwise for now... -static float fcm_reevaluate_fcurve (FCurve *fcu, FModifier *fcm, float cvalue, float evaltime) -{ - ListBase modifiers = {NULL, NULL}; - float new_value = 0.0f; - - /* sanity checking */ - if ELEM(NULL, fcu, fcm) - return cvalue; - - /* unlink given modifier from previous modifiers, keeping the previous ones on the F-Curve, - * but ones after off the F-Curve (so that we avoid the infinitely re-entrant situation). - */ - modifiers.first= fcm; - modifiers.last= fcu->modifiers.last; - - if (fcm->prev) { - fcm->prev->next= NULL; - fcu->modifiers.last= fcm->prev; - } - else - fcu->modifiers.first= fcu->modifiers.last= NULL; - fcm->prev= NULL; - - /* re-enter the evaluation loop (but without the burden of evaluating any modifiers, so 'should' be relatively quick) */ - new_value= evaluate_fcurve(fcu, evaltime); - - /* restore modifiers (don't assume everything is still ok after being re-entrant) */ - addlisttolist(&fcu->modifiers, &modifiers); - - /* return the new value */ - return new_value; -} - /* Generator F-Curve Modifier --------------------------- */ /* Generators available: @@ -1544,7 +1510,7 @@ static void fcm_generator_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, /* execute function callback to set value if appropriate */ if (fn) { - float value= data->coefficients[0]*fn(arg) + data->coefficients[3]; + float value= (float)(data->coefficients[0]*fn(arg) + data->coefficients[3]); if (data->flag & FCM_GENERATOR_ADDITIVE) *cvalue += value; @@ -1573,6 +1539,7 @@ static FModifierTypeInfo FMI_GENERATOR = { fcm_generator_copy, /* copy data */ fcm_generator_new_data, /* new data */ fcm_generator_verify, /* verify */ + NULL, /* evaluate time */ fcm_generator_evaluate /* evaluate */ }; @@ -1679,6 +1646,7 @@ static FModifierTypeInfo FMI_ENVELOPE = { fcm_envelope_copy, /* copy data */ fcm_envelope_new_data, /* new data */ fcm_envelope_verify, /* verify */ + NULL, /* evaluate time */ fcm_envelope_evaluate /* evaluate */ }; @@ -1694,6 +1662,11 @@ static FModifierTypeInfo FMI_ENVELOPE = { * as appropriate */ +/* temp data used during evaluation */ +typedef struct tFCMED_Cycles { + float cycyofs; /* y-offset to apply */ +} tFCMED_Cycles; + static void fcm_cycles_new_data (void *mdata) { FMod_Cycles *data= (FMod_Cycles *)mdata; @@ -1701,8 +1674,8 @@ static void fcm_cycles_new_data (void *mdata) /* turn on cycles by default */ data->before_mode= data->after_mode= FCM_EXTRAPOLATE_CYCLIC; } - -static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) + +static float fcm_cycles_time (FCurve *fcu, FModifier *fcm, float cvalue, float evaltime) { FMod_Cycles *data= (FMod_Cycles *)fcm->data; float prevkey[2], lastkey[2], cycyofs=0.0f; @@ -1713,7 +1686,7 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo // FIXME... if (fcm->prev) { fcm->flag |= FMODIFIER_FLAG_DISABLED; - return; + return evaltime; } /* calculate new evaltime due to cyclic interpolation */ @@ -1738,7 +1711,7 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo lastkey[1]= lastfpt->vec[1]; } else - return; + return evaltime; /* check if modifier will do anything * 1) if in data range, definitely don't do anything @@ -1759,11 +1732,12 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo } } if ELEM(0, side, mode) - return; + return evaltime; /* find relative place within a cycle */ { float cycdx=0, cycdy=0, ofs=0; + float cycle= 0; /* ofs is start frame of cycle */ ofs= prevkey[0]; @@ -1774,19 +1748,22 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo /* check if cycle is infinitely small, to be point of being impossible to use */ if (cycdx == 0) - return; + return evaltime; + /* calculate the 'number' of the cycle */ + cycle= ((float)side * (evaltime - ofs) / cycdx); + /* check that cyclic is still enabled for the specified time */ if (cycles == 0) { /* catch this case so that we don't exit when we have cycles=0 * as this indicates infinite cycles... */ } - else if ( ((float)side * (evaltime - ofs) / cycdx) > (cycles+1) ) { + else if (cycle > (cycles+1)) { /* we are too far away from range to evaluate * TODO: but we should still hold last value... */ - return; + return evaltime; } /* check if 'cyclic extrapolation', and thus calculate y-offset for this cycle */ @@ -1796,12 +1773,49 @@ static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, flo } /* calculate where in the cycle we are (overwrite evaltime to reflect this) */ - evaltime= (float)(fmod(evaltime-ofs, cycdx) + ofs); + if ((mode == FCM_EXTRAPOLATE_MIRROR) && ((int)(cycle) % 2)) { + /* when 'mirror' option is used and cycle number is odd, this cycle is played in reverse + * - for 'before' extrapolation, we need to flip in a different way, otherwise values past + * then end of the curve get referenced (result of fmod will be negative, and with different phase) + */ + if (side < 0) + evaltime= (float)(prevkey[0] - fmod(evaltime-ofs, cycdx)); + else + evaltime= (float)(lastkey[0] - fmod(evaltime-ofs, cycdx)); + } + else { + /* the cycle is played normally... */ + evaltime= (float)(fmod(evaltime-ofs, cycdx) + ofs); + } if (evaltime < ofs) evaltime += cycdx; } - /* reevaluate F-Curve at the new time that we've decided on */ - *cvalue= fcm_reevaluate_fcurve(fcu, fcm, *cvalue, evaltime) + cycyofs; + /* store temp data if needed */ + if (mode == FCM_EXTRAPOLATE_CYCLIC_OFFSET) { + tFCMED_Cycles *edata; + + /* for now, this is just a float, but we could get more stuff... */ + fcm->edata= edata= MEM_callocN(sizeof(tFCMED_Cycles), "tFCMED_Cycles"); + edata->cycyofs= cycyofs; + } + + /* return the new frame to evaluate */ + return evaltime; +} + +static void fcm_cycles_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + tFCMED_Cycles *edata= (tFCMED_Cycles *)fcm->edata; + + /* use temp data */ + if (edata) { + /* add cyclic offset - no need to check for now, otherwise the data wouldn't exist! */ + *cvalue += edata->cycyofs; + + /* free temp data */ + MEM_freeN(edata); + fcm->edata= NULL; + } } static FModifierTypeInfo FMI_CYCLES = { @@ -1815,12 +1829,48 @@ static FModifierTypeInfo FMI_CYCLES = { NULL, /* copy data */ fcm_cycles_new_data, /* new data */ NULL /*fcm_cycles_verify*/, /* verify */ + fcm_cycles_time, /* evaluate time */ fcm_cycles_evaluate /* evaluate */ }; /* Noise F-Curve Modifier --------------------------- */ -#if 0 // XXX not yet implemented +static void fcm_noise_new_data (void *mdata) +{ + FMod_Noise *data= (FMod_Noise *)mdata; + + /* defaults */ + data->size= 1.0f; + data->strength= 1.0f; + data->phase= 1.0f; + data->depth = 0; + data->modification = FCM_NOISE_MODIF_REPLACE; +} + +static void fcm_noise_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + FMod_Noise *data= (FMod_Noise *)fcm->data; + float noise; + + noise = BLI_turbulence(data->size, evaltime, data->phase, 0.f, data->depth); + + switch (data->modification) { + case FCM_NOISE_MODIF_ADD: + *cvalue= *cvalue + noise * data->strength; + break; + case FCM_NOISE_MODIF_SUBTRACT: + *cvalue= *cvalue - noise * data->strength; + break; + case FCM_NOISE_MODIF_MULTIPLY: + *cvalue= *cvalue * noise * data->strength; + break; + case FCM_NOISE_MODIF_REPLACE: + default: + *cvalue= *cvalue + (noise - 0.5f) * data->strength; + break; + } +} + static FModifierTypeInfo FMI_NOISE = { FMODIFIER_TYPE_NOISE, /* type */ sizeof(FMod_Noise), /* size */ @@ -1832,9 +1882,9 @@ static FModifierTypeInfo FMI_NOISE = { NULL, /* copy data */ fcm_noise_new_data, /* new data */ NULL /*fcm_noise_verify*/, /* verify */ + NULL, /* evaluate time */ fcm_noise_evaluate /* evaluate */ }; -#endif // XXX not yet implemented /* Filter F-Curve Modifier --------------------------- */ @@ -1850,6 +1900,7 @@ static FModifierTypeInfo FMI_FILTER = { NULL, /* copy data */ NULL, /* new data */ NULL /*fcm_filter_verify*/, /* verify */ + NULL, /* evlauate time */ fcm_filter_evaluate /* evaluate */ }; #endif // XXX not yet implemented @@ -1905,21 +1956,30 @@ static FModifierTypeInfo FMI_PYTHON = { fcm_python_copy, /* copy data */ fcm_python_new_data, /* new data */ NULL /*fcm_python_verify*/, /* verify */ + NULL /*fcm_python_time*/, /* evaluate time */ fcm_python_evaluate /* evaluate */ }; /* Limits F-Curve Modifier --------------------------- */ -static void fcm_limits_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +static float fcm_limits_time (FCurve *fcu, FModifier *fcm, float cvalue, float evaltime) { FMod_Limits *data= (FMod_Limits *)fcm->data; - /* time limits first */ + /* check for the time limits */ if ((data->flag & FCM_LIMIT_XMIN) && (evaltime < data->rect.xmin)) - *cvalue= fcm_reevaluate_fcurve(fcu, fcm, *cvalue, data->rect.xmin); + return data->rect.xmin; if ((data->flag & FCM_LIMIT_XMAX) && (evaltime > data->rect.xmax)) - *cvalue= fcm_reevaluate_fcurve(fcu, fcm, *cvalue, data->rect.xmax); + return data->rect.xmax; + + /* modifier doesn't change time */ + return evaltime; +} + +static void fcm_limits_evaluate (FCurve *fcu, FModifier *fcm, float *cvalue, float evaltime) +{ + FMod_Limits *data= (FMod_Limits *)fcm->data; /* value limits now */ if ((data->flag & FCM_LIMIT_YMIN) && (*cvalue < data->rect.ymin)) @@ -1938,7 +1998,8 @@ static FModifierTypeInfo FMI_LIMITS = { NULL, /* free data */ NULL, /* copy data */ NULL, /* new data */ - NULL /*fcm_python_verify*/, /* verify */ + NULL, /* verify */ + fcm_limits_time, /* evaluate time */ fcm_limits_evaluate /* evaluate */ }; @@ -1958,7 +2019,7 @@ static void fmods_init_typeinfo () fmodifiersTypeInfo[1]= &FMI_GENERATOR; /* Generator F-Curve Modifier */ fmodifiersTypeInfo[2]= &FMI_ENVELOPE; /* Envelope F-Curve Modifier */ fmodifiersTypeInfo[3]= &FMI_CYCLES; /* Cycles F-Curve Modifier */ - fmodifiersTypeInfo[4]= NULL/*&FMI_NOISE*/; /* Apply-Noise F-Curve Modifier */ // XXX unimplemented + fmodifiersTypeInfo[4]= &FMI_NOISE; /* Apply-Noise F-Curve Modifier */ fmodifiersTypeInfo[5]= NULL/*&FMI_FILTER*/; /* Filter F-Curve Modifier */ // XXX unimplemented fmodifiersTypeInfo[6]= &FMI_PYTHON; /* Custom Python F-Curve Modifier */ fmodifiersTypeInfo[7]= &FMI_LIMITS; /* Limits F-Curve Modifier */ @@ -2178,9 +2239,11 @@ void fcurve_set_active_modifier (FCurve *fcu, FModifier *fcm) float evaluate_fcurve (FCurve *fcu, float evaltime) { FModifier *fcm; - float cvalue = 0.0f; + float cvalue= 0.0f; + float devaltime; /* if there is a driver (only if this F-Curve is acting as 'driver'), evaluate it to find value to use as "evaltime" + * since drivers essentially act as alternative input (i.e. in place of 'time') for F-Curves * - this value will also be returned as the value of the 'curve', if there are no keyframes */ if (fcu->driver) { @@ -2188,11 +2251,37 @@ float evaluate_fcurve (FCurve *fcu, float evaltime) evaltime= cvalue= evaluate_driver(fcu->driver, evaltime); } - /* evaluate curve-data */ + /* evaluate time modifications imposed by some F-Curve Modifiers + * - this step acts as an optimisation to prevent the F-Curve stack being evaluated + * several times by modifiers requesting the time be modified, as the final result + * would have required using the modified time + * - modifiers only ever recieve the unmodified time, as subsequent modifiers should be + * working on the 'global' result of the modified curve, not some localised segment, + * so nevaltime gets set to whatever the last time-modifying modifier likes... + * - we start from the end of the stack, as only the last one matters for now + */ + devaltime= evaltime; + + for (fcm= fcu->modifiers.last; fcm; fcm= fcm->prev) { + FModifierTypeInfo *fmi= fmodifier_get_typeinfo(fcm); + + /* only evaluate if there's a callback for this */ + // TODO: implement the 'influence' control feature... + if (fmi && fmi->evaluate_modifier_time) { + if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) + devaltime= fmi->evaluate_modifier_time(fcu, fcm, cvalue, evaltime); + break; + } + } + + /* evaluate curve-data + * - 'devaltime' instead of 'evaltime', as this is the time that the last time-modifying + * F-Curve modifier on the stack requested the curve to be evaluated at + */ if (fcu->bezt) - cvalue= fcurve_eval_keyframes(fcu, fcu->bezt, evaltime); + cvalue= fcurve_eval_keyframes(fcu, fcu->bezt, devaltime); else if (fcu->fpt) - cvalue= fcurve_eval_samples(fcu, fcu->fpt, evaltime); + cvalue= fcurve_eval_samples(fcu, fcu->fpt, devaltime); /* evaluate modifiers */ for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { @@ -2201,7 +2290,7 @@ float evaluate_fcurve (FCurve *fcu, float evaltime) /* only evaluate if there's a callback for this */ // TODO: implement the 'influence' control feature... if (fmi && fmi->evaluate_modifier) { - if ((fcm->flag & FMODIFIER_FLAG_DISABLED) == 0) + if ((fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) == 0) fmi->evaluate_modifier(fcu, fcm, &cvalue, evaltime); } } diff --git a/source/blender/blenkernel/intern/font.c b/source/blender/blenkernel/intern/font.c index ced8d3bdebb..b94652eb7c3 100644 --- a/source/blender/blenkernel/intern/font.c +++ b/source/blender/blenkernel/intern/font.c @@ -355,11 +355,7 @@ static VFontData *vfont_get_data(VFont *vfont) } if (pf) { -#ifdef WITH_FREETYPE2 vfont->data= BLI_vfontdata_from_freetypefont(pf); -#else - vfont->data= BLI_vfontdata_from_psfont(pf); -#endif if (pf != vfont->packedfile) { freePackedFile(pf); } @@ -398,12 +394,7 @@ VFont *load_vfont(char *name) if (pf) { VFontData *vfd; -#ifdef WITH_FREETYPE2 vfd= BLI_vfontdata_from_freetypefont(pf); -#else - vfd= BLI_vfontdata_from_psfont(pf); -#endif - if (vfd) { vfont = alloc_libblock(&G.main->vfont, ID_VF, filename); vfont->data = vfd; @@ -755,21 +746,22 @@ struct chartrans *BKE_text_to_curve(Scene *scene, Object *ob, int mode) che = che->next; } -#ifdef WITH_FREETYPE2 - // The character wasn't in the current curve base so load it - // But if the font is then do not try loading since whole font is in the memory already + /* + * The character wasn't in the current curve base so load it + * But if the font is then do not try loading since + * whole font is in the memory already + */ if(che == NULL && strcmp(vfont->name, "")) { BLI_vfontchar_from_freetypefont(vfont, ascii); } - // Try getting the character again from the list + /* Try getting the character again from the list */ che = vfd->characters.first; while(che) { if(che->index == ascii) break; che = che->next; } -#endif /* No VFont found */ if (vfont==0) { diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c index 99ec7ce1cc8..6086aa58d40 100644 --- a/source/blender/blenkernel/intern/gpencil.c +++ b/source/blender/blenkernel/intern/gpencil.c @@ -33,8 +33,6 @@ #include "MEM_guardedalloc.h" -#include "BMF_Api.h" - #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c index 53b805f5f4c..629f34518b9 100644 --- a/source/blender/blenkernel/intern/image.c +++ b/source/blender/blenkernel/intern/image.c @@ -77,9 +77,6 @@ #include "RE_pipeline.h" -/* for stamp drawing to an image */ -#include "BMF_Api.h" - #include "GPU_extensions.h" #include "GPU_draw.h" @@ -1069,6 +1066,9 @@ static void stampdata(Scene *scene, StampData *stamp_data, int do_prefix) void BKE_stamp_buf(Scene *scene, unsigned char *rect, float *rectf, int width, int height, int channels) { +#if 0 +// XXX +// This go back when BLF_draw_buffer is implemented - Diego struct StampData stamp_data; int x=1,y=1; @@ -1188,7 +1188,7 @@ void BKE_stamp_buf(Scene *scene, unsigned char *rect, float *rectf, int width, i buf_rectfill_area(rect, rectf, width, height, scene->r.bg_stamp, x-1, y-1, x+text_width+text_pad+1, y+font_height+1); BMF_DrawStringBuf(font, stamp_data.strip, x+(text_pad/2), y, scene->r.fg_stamp, rect, rectf, width, height, channels); } - +#endif // 0 XXX } void BKE_stamp_info(Scene *scene, struct ImBuf *ibuf) diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 5728b844a88..d0e4c1a15bc 100644 --- a/source/blender/blenkernel/intern/library.c +++ b/source/blender/blenkernel/intern/library.c @@ -1102,6 +1102,27 @@ void test_idbutton(char *name) if(idtest) if( new_id(lb, idtest, name)==0 ) sort_alpha_id(lb, idtest); } +void text_idbutton(struct ID *id, char *text) +{ + if(id) { + if(GS(id->name)==ID_SCE) + strcpy(text, "SCE: "); + else if(GS(id->name)==ID_SCE) + strcpy(text, "SCR: "); + else if(GS(id->name)==ID_MA && ((Material*)id)->use_nodes) + strcpy(text, "NT: "); + else { + text[0]= id->name[0]; + text[1]= id->name[1]; + text[2]= ':'; + text[3]= ' '; + text[4]= 0; + } + } + else + strcpy(text, ""); +} + void rename_id(ID *id, char *name) { ListBase *lb; diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c index f43dc287062..e25e4be90c8 100644 --- a/source/blender/blenkernel/intern/screen.c +++ b/source/blender/blenkernel/intern/screen.c @@ -54,6 +54,8 @@ static void spacetype_free(SpaceType *st) { ARegionType *art; PanelType *pt; + HeaderType *ht; + MenuType *mt; for(art= st->regiontypes.first; art; art= art->next) { BLI_freelistN(&art->drawcalls); @@ -62,8 +64,17 @@ static void spacetype_free(SpaceType *st) if(pt->py_free) pt->py_free(pt->py_data); + for(ht= art->headertypes.first; ht; ht= ht->next) + if(ht->py_free) + ht->py_free(ht->py_data); + + for(mt= art->menutypes.first; mt; mt= mt->next) + if(mt->py_free) + mt->py_free(mt->py_data); + BLI_freelistN(&art->paneltypes); BLI_freelistN(&art->headertypes); + BLI_freelistN(&art->menutypes); } BLI_freelistN(&st->regiontypes); diff --git a/source/blender/blenkernel/intern/text.c b/source/blender/blenkernel/intern/text.c index 47a33bdee66..8e3d59bbc58 100644 --- a/source/blender/blenkernel/intern/text.c +++ b/source/blender/blenkernel/intern/text.c @@ -1282,24 +1282,28 @@ void txt_insert_buf(Text *text, char *in_buffer) /* Undo functions */ /******************/ -#define MAX_UNDO_TEST(x) \ - while (text->undo_pos+x >= text->undo_len) { \ - if(text->undo_len*2 > TXT_MAX_UNDO) { \ - error("Undo limit reached, buffer cleared\n"); \ - MEM_freeN(text->undo_buf); \ - text->undo_len= TXT_INIT_UNDO; \ - text->undo_buf= MEM_mallocN(text->undo_len, "undo buf"); \ - text->undo_pos=-1; \ - return; \ - } else { \ - void *tmp= text->undo_buf; \ - text->undo_buf= MEM_callocN(text->undo_len*2, "undo buf"); \ - memcpy(text->undo_buf, tmp, text->undo_len); \ - text->undo_len*=2; \ - MEM_freeN(tmp); \ - } \ +static int max_undo_test(Text *text, int x) +{ + while (text->undo_pos+x >= text->undo_len) { + if(text->undo_len*2 > TXT_MAX_UNDO) { + /* XXX error("Undo limit reached, buffer cleared\n"); */ + MEM_freeN(text->undo_buf); + text->undo_len= TXT_INIT_UNDO; + text->undo_buf= MEM_mallocN(text->undo_len, "undo buf"); + text->undo_pos=-1; + return 0; + } else { + void *tmp= text->undo_buf; + text->undo_buf= MEM_callocN(text->undo_len*2, "undo buf"); + memcpy(text->undo_buf, tmp, text->undo_len); + text->undo_len*=2; + MEM_freeN(tmp); + } } + return 1; +} + static void dump_buffer(Text *text) { int i= 0; @@ -1445,7 +1449,8 @@ void txt_print_undo(Text *text) static void txt_undo_add_op(Text *text, int op) { - //XXX MAX_UNDO_TEST(2); + if(!max_undo_test(text, 2)) + return; text->undo_pos++; text->undo_buf[text->undo_pos]= op; @@ -1458,7 +1463,8 @@ static void txt_undo_add_block(Text *text, int op, char *buf) length= strlen(buf); - //XXX MAX_UNDO_TEST(length+11); + if(!max_undo_test(text, length+11)) + return; text->undo_pos++; text->undo_buf[text->undo_pos]= op; @@ -1492,7 +1498,8 @@ static void txt_undo_add_block(Text *text, int op, char *buf) void txt_undo_add_toop(Text *text, int op, unsigned int froml, unsigned short fromc, unsigned int tol, unsigned short toc) { - //XXX MAX_UNDO_TEST(15); + if(!max_undo_test(text, 15)) + return; if (froml==tol && fromc==toc) return; @@ -1535,7 +1542,8 @@ void txt_undo_add_toop(Text *text, int op, unsigned int froml, unsigned short fr static void txt_undo_add_charop(Text *text, int op, char c) { - //XXX MAX_UNDO_TEST(4); + if(!max_undo_test(text, 4)) + return; text->undo_pos++; text->undo_buf[text->undo_pos]= op; diff --git a/source/blender/blenlib/CMakeLists.txt b/source/blender/blenlib/CMakeLists.txt index b22e7b1dd70..334c8e6906b 100644 --- a/source/blender/blenlib/CMakeLists.txt +++ b/source/blender/blenlib/CMakeLists.txt @@ -40,10 +40,6 @@ SET(INC ) ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux") -IF(WITH_INTERNATIONAL) - ADD_DEFINITIONS(-DWITH_FREETYPE2) -ENDIF(WITH_INTERNATIONAL) - IF(WIN32) SET(INC ${INC} ${PTHREADS_INC}) ENDIF(WIN32) diff --git a/source/blender/blenlib/SConscript b/source/blender/blenlib/SConscript index d0084be0d56..e0411a6fc80 100644 --- a/source/blender/blenlib/SConscript +++ b/source/blender/blenlib/SConscript @@ -12,9 +12,6 @@ defs = '' if env['WITH_BF_SDL']: incs += ' ' + env['BF_SDL_INC'] -if env['WITH_BF_INTERNATIONAL']: - defs = 'WITH_FREETYPE2' - if env['OURPLATFORM'] == 'linux2': cflags='-pthread' incs += ' ../../../extern/binreloc/include' diff --git a/source/blender/blenlib/intern/Makefile b/source/blender/blenlib/intern/Makefile index f92fa0a7e25..f729a4e3fe0 100644 --- a/source/blender/blenlib/intern/Makefile +++ b/source/blender/blenlib/intern/Makefile @@ -53,9 +53,6 @@ CPPFLAGS += -I$(NAN_ZLIB)/include ifdef NAN_PTHREADS CPPFLAGS += -I$(NAN_PTHREADS)/include endif -ifeq ($(WITH_FREETYPE2), true) - CPPFLAGS += -DWITH_FREETYPE2 -endif ifeq ($(OS),linux) CPPFLAGS += -I$(OCGDIR)/extern/binreloc/include endif diff --git a/source/blender/blenlib/intern/freetypefont.c b/source/blender/blenlib/intern/freetypefont.c index 4b7b5914b60..0f2a6179964 100644 --- a/source/blender/blenlib/intern/freetypefont.c +++ b/source/blender/blenlib/intern/freetypefont.c @@ -30,8 +30,6 @@ * Code that uses exotic character maps is present but commented out. */ -#ifdef WITH_FREETYPE2 - #ifdef WIN32 #pragma warning (disable:4244) #endif @@ -514,10 +512,6 @@ int BLI_vfontchar_from_freetypefont(VFont *vfont, unsigned long character) return TRUE; } -#endif // WITH_FREETYPE2 - - - #if 0 // Freetype2 Outline struct diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index 5c176c4a72b..fd9da2059e1 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -178,7 +178,7 @@ READ - read associated 'direct data' - link direct data (internal and to LibBlock) - read FileGlobal -- read USER data, only when indicated (file is ~/.B.blend) +- read USER data, only when indicated (file is ~/.B.blend or .B25.blend) - free file - per Library (per Main) - read file @@ -1723,6 +1723,7 @@ static void direct_link_fcurves(FileData *fd, ListBase *list) for (fcm= fcu->modifiers.first; fcm; fcm= fcm->next) { /* relink general data */ fcm->data = newdataadr(fd, fcm->data); + fcm->edata= NULL; /* do relinking of data for specific types */ switch (fcm->type) { @@ -3862,6 +3863,8 @@ static void direct_link_scene(FileData *fd, Scene *sce) sce->theDag = NULL; sce->dagisvalid = 0; + sce->obedit= NULL; + /* set users to one by default, not in lib-link, this will increase it for compo nodes */ sce->id.us= 1; @@ -4087,6 +4090,10 @@ static void direct_link_gpencil(FileData *fd, bGPdata *gpd) bGPDframe *gpf; bGPDstroke *gps; + /* we must firstly have some grease-pencil data to link! */ + if (gpd == NULL) + return; + /* relink layers */ link_list(fd, &gpd->layers); @@ -4522,7 +4529,6 @@ static void view3d_split_250(View3D *v3d, ListBase *regions) rv3d->dist= v3d->dist; VECCOPY(rv3d->ofs, v3d->ofs); QUATCOPY(rv3d->viewquat, v3d->viewquat); - Mat4One(rv3d->twmat); } } } diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index f93ad5eaf2b..b690c708dc3 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -2240,8 +2240,7 @@ int BLO_write_file(Main *mainvar, char *dir, int write_flags, ReportList *report return 0; } - BLI_make_file_string(G.sce, userfilename, BLI_gethome(), ".B.blend"); - + BLI_make_file_string(G.sce, userfilename, BLI_gethome(), ".B25.blend"); write_user_block= BLI_streq(dir, userfilename); err= write_file_handle(mainvar, file, NULL,NULL, write_user_block, write_flags); diff --git a/source/blender/editors/CMakeLists.txt b/source/blender/editors/CMakeLists.txt index 06b0fb4ab41..914fdaa4bc6 100644 --- a/source/blender/editors/CMakeLists.txt +++ b/source/blender/editors/CMakeLists.txt @@ -30,7 +30,7 @@ SET(INC ../windowmanager ../editors/include ../../../intern/guardedalloc ../../../intern/memutil ../blenlib ../makesdna ../makesrna ../blenkernel - ../include ../../../intern/bmfont ../imbuf ../render/extern/include + ../include ../imbuf ../render/extern/include ../../../intern/bsp/extern ../radiosity/extern/include ../../../intern/decimation/extern ../blenloader ../python ../../kernel/gen_system ../../../intern/SoundSystem ../readstreamglue @@ -43,9 +43,7 @@ SET(INC ../windowmanager ) IF(WITH_INTERNATIONAL) - SET(INC ${INC} ../ftfont) ADD_DEFINITIONS(-DINTERNATIONAL) - ADD_DEFINITIONS(-DFTGL_STATIC_LIBRARY) ENDIF(WITH_INTERNATIONAL) IF(WITH_OPENEXR) diff --git a/source/blender/editors/animation/anim_filter.c b/source/blender/editors/animation/anim_filter.c index 881d2d95ca4..67f89b3358d 100644 --- a/source/blender/editors/animation/anim_filter.c +++ b/source/blender/editors/animation/anim_filter.c @@ -291,7 +291,10 @@ short ANIM_animdata_get_context (const bContext *C, bAnimContext *ac) /* get useful default context settings from context */ ac->scene= scene; - ac->obact= (scene && scene->basact)? scene->basact->object : NULL; + if (scene) { + ac->markers= &scene->markers; + ac->obact= (scene->basact)? scene->basact->object : NULL; + } ac->sa= sa; ac->ar= ar; ac->spacetype= (sa) ? sa->spacetype : 0; @@ -1195,7 +1198,7 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int if (base->object) { Object *ob= base->object; Key *key= ob_get_key(ob); - short actOk, keyOk, dataOk, matOk; + short actOk=1, keyOk=1, dataOk=1, matOk=1; /* firstly, check if object can be included, by the following fanimors: * - if only visible, must check for layer and also viewport visibility @@ -1204,8 +1207,8 @@ static int animdata_filter_dopesheet (ListBase *anim_data, bDopeSheet *ads, int */ // TODO: if cache is implemented, just check name here, and then if (filter_mode & ANIMFILTER_VISIBLE) { - /* layer visibility */ - if ((ob->lay & sce->lay)==0) continue; + /* layer visibility - we check both object and base, since these may not be in sync yet */ + if ((sce->lay & (ob->lay|base->lay))==0) continue; /* outliner restrict-flag */ if (ob->restrictflag & OB_RESTRICT_VIEW) continue; diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c index 58e3aa8e172..2abec6b831c 100644 --- a/source/blender/editors/animation/anim_markers.c +++ b/source/blender/editors/animation/anim_markers.c @@ -31,6 +31,7 @@ #include "MEM_guardedalloc.h" +#include "DNA_action_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" @@ -45,6 +46,7 @@ #include "BKE_context.h" #include "BKE_global.h" +#include "BKE_fcurve.h" #include "BKE_utildefines.h" #include "WM_api.h" @@ -82,6 +84,141 @@ static ListBase *context_get_markers(const bContext *C) return &CTX_data_scene(C)->markers; } +/* Get the marker that is closest to this point */ +TimeMarker *ED_markers_find_nearest_marker (ListBase *markers, float x) +{ + TimeMarker *marker, *nearest=NULL; + float dist, min_dist= 1000000; + + if (markers) { + for (marker= markers->first; marker; marker= marker->next) { + dist = ABS((float)marker->frame - x); + + if (dist < min_dist) { + min_dist= dist; + nearest= marker; + } + } + } + + return nearest; +} + +/* Return the time of the marker that occurs on a frame closest to the given time */ +int ED_markers_find_nearest_marker_time (ListBase *markers, float x) +{ + TimeMarker *nearest= ED_markers_find_nearest_marker(markers, x); + return (nearest) ? (nearest->frame) : (int)floor(x + 0.5f); +} + + +void ED_markers_get_minmax (ListBase *markers, short sel, float *first, float *last) +{ + TimeMarker *marker; + float min, max; + int selcount = 0; + + /* sanity check */ + printf("markers = %p - %p, %p \n", markers, markers->first, markers->last); + if (markers == NULL) { + *first = 0.0f; + *last = 0.0f; + return; + } + + if (markers->first && markers->last) { + TimeMarker *fm= markers->first; + TimeMarker *lm= markers->last; + + min= (float)fm->frame; + max= (float)lm->frame; + } + else { + *first = 0.0f; + *last = 0.0f; + return; + } + + /* count how many markers are usable - see later */ + if (sel) { + for (marker= markers->first; marker; marker= marker->next) { + if (marker->flag & SELECT) + selcount++; + } + } + else + selcount= BLI_countlist(markers); + + /* if only selected are to be considered, only consider the selected ones + * (optimisation for not searching list) + */ + if (selcount > 1) { + for (marker= markers->first; marker; marker= marker->next) { + if (sel) { + if (marker->flag & SELECT) { + if (marker->frame < min) + min= (float)marker->frame; + if (marker->frame > max) + max= (float)marker->frame; + } + } + else { + if (marker->frame < min) + min= (float)marker->frame; + if (marker->frame > max) + max= (float)marker->frame; + } + } + } + + /* set the min/max values */ + *first= min; + *last= max; +} + +/* Adds a marker to list of cfra elems */ +void add_marker_to_cfra_elem(ListBase *lb, TimeMarker *marker, short only_sel) +{ + CfraElem *ce, *cen; + + /* should this one only be considered if it is selected? */ + if ((only_sel) && ((marker->flag & SELECT)==0)) + return; + + /* insertion sort - try to find a previous cfra elem */ + for (ce= lb->first; ce; ce= ce->next) { + if (ce->cfra == marker->frame) { + /* do because of double keys */ + if (marker->flag & SELECT) + ce->sel= marker->flag; + return; + } + else if (ce->cfra > marker->frame) break; + } + + cen= MEM_callocN(sizeof(CfraElem), "add_to_cfra_elem"); + if (ce) BLI_insertlinkbefore(lb, ce, cen); + else BLI_addtail(lb, cen); + + cen->cfra= marker->frame; + cen->sel= marker->flag; +} + +/* This function makes a list of all the markers. The only_sel + * argument is used to specify whether only the selected markers + * are added. + */ +void ED_markers_make_cfra_list(ListBase *markers, ListBase *lb, short only_sel) +{ + TimeMarker *marker; + + if (markers == NULL) + return; + + for (marker= markers->first; marker; marker= marker->next) + add_marker_to_cfra_elem(lb, marker, only_sel); +} + /* ************* Marker Drawing ************ */ /* function to draw markers */ @@ -96,12 +233,13 @@ static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag) ypixels= v2d->mask.ymax-v2d->mask.ymin; UI_view2d_getscale(v2d, &xscale, &yscale); - glScalef(1.0/xscale, 1.0, 1.0); + glScalef(1.0f/xscale, 1.0f, 1.0f); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); /* vertical line - dotted */ + // NOTE: currently only used for sequencer if (flag & DRAW_MARKERS_LINES) { setlinestyle(3); @@ -111,8 +249,8 @@ static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag) glColor4ub(0, 0, 0, 96); glBegin(GL_LINES); - glVertex2f((xpos*xscale)+0.5, 12); - glVertex2f((xpos*xscale)+0.5, 34*yscale); /* a bit lazy but we know it cant be greater then 34 strips high*/ + glVertex2f((xpos*xscale)+0.5f, 12.0f); + glVertex2f((xpos*xscale)+0.5f, 34.0f*yscale); /* a bit lazy but we know it cant be greater then 34 strips high */ glEnd(); setlinestyle(0); @@ -129,7 +267,7 @@ static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag) ICON_MARKER; } - UI_icon_draw(xpos*xscale-5.0, 16.0, icon_id); + UI_icon_draw(xpos*xscale-5.0f, 16.0f, icon_id); glBlendFunc(GL_ONE, GL_ZERO); glDisable(GL_BLEND); @@ -138,25 +276,26 @@ static void draw_marker(View2D *v2d, TimeMarker *marker, int cfra, int flag) if (marker->name && marker->name[0]) { float x, y; - if(marker->flag & SELECT) { + if (marker->flag & SELECT) { UI_ThemeColor(TH_TEXT_HI); - x= xpos*xscale+4.0; - y= (ypixels<=39.0)?(ypixels-10.0):29.0; + x= xpos*xscale + 4.0f; + y= (ypixels <= 39.0f)? (ypixels-10.0f) : 29.0f; } else { UI_ThemeColor(TH_TEXT); if((marker->frame <= cfra) && (marker->frame+5 > cfra)) { - x= xpos*xscale+4.0; - y= (ypixels<=39.0)?(ypixels-10.0):29.0; + x= xpos*xscale + 4.0f; + y= (ypixels <= 39.0f)? (ypixels - 10.0f) : 29.0f; } else { - x= xpos*xscale+4.0; - y= 17.0; + x= xpos*xscale + 4.0f; + y= 17.0f; } } UI_DrawString(x, y, marker->name); } - glScalef(xscale, 1.0, 1.0); + + glScalef(xscale, 1.0f, 1.0f); } /* Draw Scene-Markers in time window */ @@ -166,22 +305,22 @@ void draw_markers_time(const bContext *C, int flag) View2D *v2d= UI_view2d_fromcontext(C); TimeMarker *marker; - if(markers == NULL) + if (markers == NULL) return; /* unselected markers are drawn at the first time */ for (marker= markers->first; marker; marker= marker->next) { - if (!(marker->flag & SELECT)) draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag); + if ((marker->flag & SELECT) == 0) + draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag); } /* selected markers are drawn later */ for (marker= markers->first; marker; marker= marker->next) { - if (marker->flag & SELECT) draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag); + if (marker->flag & SELECT) + draw_marker(v2d, marker, CTX_data_scene(C)->r.cfra, flag); } } - - /* ************************** add markers *************************** */ /* add TimeMarker at curent frame */ @@ -191,13 +330,14 @@ static int ed_marker_add(bContext *C, wmOperator *op) TimeMarker *marker; int frame= CTX_data_scene(C)->r.cfra; - if(markers == NULL) + if (markers == NULL) return OPERATOR_CANCELLED; /* two markers can't be at the same place */ - for(marker= markers->first; marker; marker= marker->next) - if(marker->frame == frame) + for (marker= markers->first; marker; marker= marker->next) { + if (marker->frame == frame) return OPERATOR_CANCELLED; + } /* deselect all */ for(marker= markers->first; marker; marker= marker->next) @@ -298,9 +438,13 @@ static void ed_marker_move_exit(bContext *C, wmOperator *op) { MarkerMove *mm= op->customdata; + /* free data */ MEM_freeN(mm->oldframe); MEM_freeN(op->customdata); op->customdata= NULL; + + /* clear custom header prints */ + ED_area_headerprint(CTX_wm_area(C), NULL); } static int ed_marker_move_invoke(bContext *C, wmOperator *op, wmEvent *evt) @@ -365,7 +509,7 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt) case ESCKEY: ed_marker_move_cancel(C, op); return OPERATOR_CANCELLED; - + case LEFTMOUSE: case MIDDLEMOUSE: case RIGHTMOUSE: @@ -377,7 +521,6 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt) break; case MOUSEMOVE: - dx= v2d->mask.xmax-v2d->mask.xmin; dx= (v2d->cur.xmax-v2d->cur.xmin)/dx; @@ -415,12 +558,11 @@ static int ed_marker_move_modal(bContext *C, wmOperator *op, wmEvent *evt) sprintf(str, "Marker %.2f offset %.2f", FRA2TIME(selmarker->frame), FRA2TIME(offs)); } else if (mm->slink->spacetype == SPACE_ACTION) { -#if 0 -XXX if (saction->flag & SACTION_DRAWTIME) + SpaceAction *saction= (SpaceAction *)mm->slink; + if (saction->flag & SACTION_DRAWTIME) sprintf(str, "Marker %.2f offset %.2f", FRA2TIME(selmarker->frame), FRA2TIME(offs)); else sprintf(str, "Marker %.2f offset %.2f", (double)(selmarker->frame), (double)(offs)); -#endif } else { sprintf(str, "Marker %.2f offset %.2f", (double)(selmarker->frame), (double)(offs)); @@ -435,21 +577,20 @@ XXX if (saction->flag & SACTION_DRAWTIME) else sprintf(str, "Marker offset %.2f ", FRA2TIME(offs)); } -#if 0 -XXX else if (mm->slink->spacetype == SPACE_ACTION) { + else if (mm->slink->spacetype == SPACE_ACTION) { + SpaceAction *saction= (SpaceAction *)mm->slink; if (saction->flag & SACTION_DRAWTIME) sprintf(str, "Marker offset %.2f ", FRA2TIME(offs)); else sprintf(str, "Marker offset %.2f ", (double)(offs)); } -#endif else { sprintf(str, "Marker offset %.2f ", (double)(offs)); } } WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); - // headerprint(str); XXX + ED_area_headerprint(CTX_wm_area(C), str); } } @@ -511,19 +652,23 @@ static void ed_marker_duplicate_apply(bContext *C, wmOperator *op) ListBase *markers= context_get_markers(C); TimeMarker *marker, *newmarker; - if(markers == NULL) return; + if (markers == NULL) + return; /* go through the list of markers, duplicate selected markers and add duplicated copies - * to the begining of the list (unselect original markers) */ - for(marker= markers->first; marker; marker= marker->next) { - if(marker->flag & SELECT){ + * to the begining of the list (unselect original markers) + */ + for (marker= markers->first; marker; marker= marker->next) { + if (marker->flag & SELECT) { /* unselect selected marker */ marker->flag &= ~SELECT; + /* create and set up new marker */ newmarker = MEM_callocN(sizeof(TimeMarker), "TimeMarker"); newmarker->flag= SELECT; newmarker->frame= marker->frame; BLI_strncpy(newmarker->name, marker->name, sizeof(marker->name)); + /* new marker is added to the begining of list */ BLI_addhead(markers, newmarker); } @@ -572,12 +717,13 @@ static void select_timeline_marker_frame(ListBase *markers, int frame, unsigned TimeMarker *marker; int select=0; - for(marker= markers->first; marker; marker= marker->next) { + for (marker= markers->first; marker; marker= marker->next) { /* if Shift is not set, then deselect Markers */ - if(!shift) marker->flag &= ~SELECT; + if (!shift) marker->flag &= ~SELECT; + /* this way a not-shift select will allways give 1 selected marker */ - if((marker->frame == frame) && (!select)) { - if(marker->flag & SELECT) + if ((marker->frame == frame) && (!select)) { + if (marker->flag & SELECT) marker->flag &= ~SELECT; else marker->flag |= SELECT; @@ -586,24 +732,6 @@ static void select_timeline_marker_frame(ListBase *markers, int frame, unsigned } } -int find_nearest_marker_time(ListBase *markers, float dx) -{ - TimeMarker *marker, *nearest= NULL; - float dist, min_dist= 1000000; - - for(marker= markers->first; marker; marker= marker->next) { - dist = ABS((float)marker->frame - dx); - if(dist < min_dist){ - min_dist= dist; - nearest= marker; - } - } - - if(nearest) return nearest->frame; - else return (int)floor(dx); /* hrmf? */ -} - - static int ed_marker_select(bContext *C, wmEvent *evt, int extend) { ListBase *markers= context_get_markers(C); @@ -619,7 +747,7 @@ static int ed_marker_select(bContext *C, wmEvent *evt, int extend) UI_view2d_region_to_view(v2d, x, y, &viewx, NULL); - cfra= find_nearest_marker_time(markers, viewx); + cfra= ED_markers_find_nearest_marker_time(markers, viewx); if (extend) select_timeline_marker_frame(markers, cfra, 1); @@ -822,9 +950,9 @@ static int ed_marker_delete_exec(bContext *C, wmOperator *op) } } - if(changed) { + if (changed) WM_event_add_notifier(C, NC_SCENE|ND_MARKERS, NULL); - } + return OPERATOR_FINISHED; } diff --git a/source/blender/editors/animation/keyframes_edit.c b/source/blender/editors/animation/keyframes_edit.c index bef44448829..8243629b4a6 100644 --- a/source/blender/editors/animation/keyframes_edit.c +++ b/source/blender/editors/animation/keyframes_edit.c @@ -382,6 +382,20 @@ short bezt_calc_average(BeztEditData *bed, BezTriple *bezt) return 0; } +/* helper callback for columnselect__keys() -> populate list CfraElems with frame numbers from selected beztriples */ +short bezt_to_cfraelem(BeztEditData *bed, BezTriple *bezt) +{ + /* only if selected */ + if (bezt->f2 & SELECT) { + CfraElem *ce= MEM_callocN(sizeof(CfraElem), "cfraElem"); + BLI_addtail(&bed->list, ce); + + ce->cfra= bezt->vec[1][0]; + } + + return 0; +} + /* ******************************************* */ /* Transform */ @@ -412,22 +426,22 @@ static short snap_bezier_cframe(BeztEditData *bed, BezTriple *bezt) static short snap_bezier_nearmarker(BeztEditData *bed, BezTriple *bezt) { - //if (bezt->f2 & SELECT) - // bezt->vec[1][0]= (float)find_nearest_marker_time(bezt->vec[1][0]); // XXX missing function! + if (bezt->f2 & SELECT) + bezt->vec[1][0]= (float)ED_markers_find_nearest_marker_time(&bed->list, bezt->vec[1][0]); return 0; } static short snap_bezier_horizontal(BeztEditData *bed, BezTriple *bezt) { if (bezt->f2 & SELECT) { - bezt->vec[0][1]= bezt->vec[2][1]= bezt->vec[1][1]; + bezt->vec[0][1]= bezt->vec[2][1]= (float)floor(bezt->vec[1][1] + 0.5f); if ((bezt->h1==HD_AUTO) || (bezt->h1==HD_VECT)) bezt->h1= HD_ALIGN; if ((bezt->h2==HD_AUTO) || (bezt->h2==HD_VECT)) bezt->h2= HD_ALIGN; } return 0; } -// calchandles_ipocurve + BeztEditFunc ANIM_editkeyframes_snap(short type) { /* eEditKeyframes_Snap */ diff --git a/source/blender/editors/animation/keyframing.c b/source/blender/editors/animation/keyframing.c index c341e32db8c..b09cc3b78e1 100644 --- a/source/blender/editors/animation/keyframing.c +++ b/source/blender/editors/animation/keyframing.c @@ -989,22 +989,24 @@ static int insert_key_menu_invoke (bContext *C, wmOperator *op, wmEvent *event) { Scene *scene= CTX_data_scene(C); KeyingSet *ks; - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; int i = 0; - head= uiPupMenuBegin("Insert Keyframe", 0); + pup= uiPupMenuBegin("Insert Keyframe", 0); + layout= uiPupMenuLayout(pup); /* active Keying Set */ - uiMenuItemIntO(head, "Active Keying Set", 0, "ANIM_OT_insert_keyframe_menu", "type", i++); - uiMenuSeparator(head); + uiItemIntO(layout, "Active Keying Set", 0, "ANIM_OT_insert_keyframe_menu", "type", i++); + uiItemS(layout); /* user-defined Keying Sets * - these are listed in the order in which they were defined for the active scene */ if (scene->keyingsets.first) { for (ks= scene->keyingsets.first; ks; ks= ks->next) - uiMenuItemIntO(head, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i++); - uiMenuSeparator(head); + uiItemIntO(layout, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i++); + uiItemS(layout); } /* builtin Keying Sets */ @@ -1013,11 +1015,11 @@ static int insert_key_menu_invoke (bContext *C, wmOperator *op, wmEvent *event) for (ks= builtin_keyingsets.first; ks; ks= ks->next) { /* only show KeyingSet if context is suitable */ if (keyingset_context_ok_poll(C, ks)) { - uiMenuItemIntO(head, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i--); + uiItemIntO(layout, ks->name, 0, "ANIM_OT_insert_keyframe_menu", "type", i--); } } - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/armature/Makefile b/source/blender/editors/armature/Makefile index f8cbb5ab37e..6c7ce81a8a1 100644 --- a/source/blender/editors/armature/Makefile +++ b/source/blender/editors/armature/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_OPENNL)/include # not very neat.... diff --git a/source/blender/editors/armature/SConscript b/source/blender/editors/armature/SConscript index e4e42a27b36..f96d25b0fe0 100644 --- a/source/blender/editors/armature/SConscript +++ b/source/blender/editors/armature/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' ../../render/extern/include #/intern/guardedalloc #intern/bmfont' +incs += ' ../../render/extern/include #/intern/guardedalloc' incs += ' ../../gpu ../../makesrna #/intern/opennl/extern' env.BlenderLib ( 'bf_editors_armature', sources, Split(incs), [], libtype=['core'], priority=[44] ) diff --git a/source/blender/editors/armature/editarmature.c b/source/blender/editors/armature/editarmature.c index 80f51f3797c..98f51a4015d 100644 --- a/source/blender/editors/armature/editarmature.c +++ b/source/blender/editors/armature/editarmature.c @@ -33,8 +33,6 @@ #include "MEM_guardedalloc.h" -#include "BMF_Api.h" - #include "DNA_action_types.h" #include "DNA_armature_types.h" #include "DNA_constraint_types.h" @@ -3460,11 +3458,13 @@ void ARMATURE_OT_subdivide_multi(wmOperatorType *ot) static int armature_subdivs_invoke(bContext *C, wmOperator *op, wmEvent *event) { - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; - head= uiPupMenuBegin("Subdivision Type", 0); - uiMenuItemsEnumO(head, "ARMATURE_OT_subdivs", "type"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Subdivision Type", 0); + layout= uiPupMenuLayout(pup); + uiItemsEnumO(layout, "ARMATURE_OT_subdivs", "type"); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } @@ -3744,7 +3744,8 @@ static int armature_parent_set_exec(bContext *C, wmOperator *op) static int armature_parent_set_invoke(bContext *C, wmOperator *op, wmEvent *event) { EditBone *actbone = CTX_data_active_bone(C); - uiMenuItem *head= uiPupMenuBegin("Make Parent ", 0); + uiPopupMenu *pup= uiPupMenuBegin("Make Parent ", 0); + uiLayout *layout= uiPupMenuLayout(pup); int allchildbones = 0; CTX_DATA_BEGIN(C, EditBone *, ebone, selected_editable_bones) { @@ -3754,13 +3755,13 @@ static int armature_parent_set_invoke(bContext *C, wmOperator *op, wmEvent *even } CTX_DATA_END; - uiMenuItemEnumO(head, "", 0, "ARMATURE_OT_parent_set", "type", ARM_PAR_CONNECT); + uiItemEnumO(layout, NULL, 0, "ARMATURE_OT_parent_set", "type", ARM_PAR_CONNECT); /* ob becomes parent, make the associated menus */ if (allchildbones) - uiMenuItemEnumO(head, "", 0, "ARMATURE_OT_parent_set", "type", ARM_PAR_OFFSET); + uiItemEnumO(layout, NULL, 0, "ARMATURE_OT_parent_set", "type", ARM_PAR_OFFSET); - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/armature/poselib.c b/source/blender/editors/armature/poselib.c index fc5b98b1690..43590346299 100644 --- a/source/blender/editors/armature/poselib.c +++ b/source/blender/editors/armature/poselib.c @@ -301,7 +301,7 @@ static void poselib_get_builtin_keyingsets (void) /* ----- */ -static void poselib_add_menu_invoke__replacemenu (bContext *C, uiMenuItem *head, void *arg) +static void poselib_add_menu_invoke__replacemenu (bContext *C, uiLayout *layout, void *arg) { Object *ob= CTX_data_active_object(C); bAction *act= ob->poselib; @@ -309,7 +309,7 @@ static void poselib_add_menu_invoke__replacemenu (bContext *C, uiMenuItem *head, /* add each marker to this menu */ for (marker= act->markers.first; marker; marker= marker->next) - uiMenuItemIntO(head, marker->name, ICON_ARMATURE_DATA, "POSELIB_OT_pose_add", "frame", marker->frame); + uiItemIntO(layout, marker->name, ICON_ARMATURE_DATA, "POSELIB_OT_pose_add", "frame", marker->frame); } static int poselib_add_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt) @@ -318,29 +318,31 @@ static int poselib_add_menu_invoke (bContext *C, wmOperator *op, wmEvent *evt) Object *ob= CTX_data_active_object(C); bArmature *arm= (ob) ? ob->data : NULL; bPose *pose= (ob) ? ob->pose : NULL; - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; /* sanity check */ if (ELEM3(NULL, ob, arm, pose)) return OPERATOR_CANCELLED; /* start building */ - head= uiPupMenuBegin(op->type->name, 0); - uiMenuContext(head, WM_OP_EXEC_DEFAULT); + pup= uiPupMenuBegin(op->type->name, 0); + layout= uiPupMenuLayout(pup); + uiLayoutContext(layout, WM_OP_EXEC_DEFAULT); /* add new (adds to the first unoccupied frame) */ - uiMenuItemIntO(head, "Add New", 0, "POSELIB_OT_pose_add", "frame", poselib_get_free_index(ob->poselib)); + uiItemIntO(layout, "Add New", 0, "POSELIB_OT_pose_add", "frame", poselib_get_free_index(ob->poselib)); /* check if we have any choices to add a new pose in any other way */ if ((ob->poselib) && (ob->poselib->markers.first)) { /* add new (on current frame) */ - uiMenuItemIntO(head, "Add New (Current Frame)", 0, "POSELIB_OT_pose_add", "frame", CFRA); + uiItemIntO(layout, "Add New (Current Frame)", 0, "POSELIB_OT_pose_add", "frame", CFRA); /* replace existing - submenu */ - uiMenuLevel(head, "Replace Existing...", poselib_add_menu_invoke__replacemenu); + uiItemMenuF(layout, "Replace Existing...", 0, poselib_add_menu_invoke__replacemenu); } - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); /* this operator is only for a menu, not used further */ return OPERATOR_CANCELLED; @@ -449,7 +451,8 @@ static int poselib_stored_pose_menu_invoke (bContext *C, wmOperator *op, wmEvent Object *ob= CTX_data_active_object(C); bAction *act= (ob) ? ob->poselib : NULL; TimeMarker *marker; - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; int i; /* sanity check */ @@ -457,14 +460,15 @@ static int poselib_stored_pose_menu_invoke (bContext *C, wmOperator *op, wmEvent return OPERATOR_CANCELLED; /* start building */ - head= uiPupMenuBegin(op->type->name, 0); - uiMenuContext(head, WM_OP_EXEC_DEFAULT); + pup= uiPupMenuBegin(op->type->name, 0); + layout= uiPupMenuLayout(pup); + uiLayoutContext(layout, WM_OP_EXEC_DEFAULT); /* add each marker to this menu */ for (marker=act->markers.first, i=0; marker; marker= marker->next, i++) - uiMenuItemIntO(head, marker->name, ICON_ARMATURE_DATA, op->idname, "index", i); + uiItemIntO(layout, marker->name, ICON_ARMATURE_DATA, op->idname, "index", i); - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); /* this operator is only for a menu, not used further */ return OPERATOR_CANCELLED; diff --git a/source/blender/editors/armature/reeb.c b/source/blender/editors/armature/reeb.c index 5a636672f29..7e6c84764ae 100644 --- a/source/blender/editors/armature/reeb.c +++ b/source/blender/editors/armature/reeb.c @@ -53,8 +53,6 @@ //#include "BDR_editobject.h" -#include "BMF_Api.h" - #include "ED_mesh.h" #include "ED_armature.h" //#include "BIF_interface.h" diff --git a/source/blender/editors/curve/Makefile b/source/blender/editors/curve/Makefile index b27749ce6fd..6b1f628f231 100644 --- a/source/blender/editors/curve/Makefile +++ b/source/blender/editors/curve/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I$(NAN_ELBEEM)/include diff --git a/source/blender/editors/curve/SConscript b/source/blender/editors/curve/SConscript index 92c982db611..3a1930899d3 100644 --- a/source/blender/editors/curve/SConscript +++ b/source/blender/editors/curve/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu' +incs += ' #/intern/guardedalloc ../../gpu' incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern' env.BlenderLib ( 'bf_editors_curve', sources, Split(incs), [], libtype=['core'], priority=[45] ) diff --git a/source/blender/editors/curve/curve_ops.c b/source/blender/editors/curve/curve_ops.c index c27c498f55e..49d86d08db2 100644 --- a/source/blender/editors/curve/curve_ops.c +++ b/source/blender/editors/curve/curve_ops.c @@ -67,16 +67,18 @@ static int specials_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) { - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; - head= uiPupMenuBegin("Specials", 0); - uiMenuItemO(head, 0, "CURVE_OT_subdivide"); - uiMenuItemO(head, 0, "CURVE_OT_switch_direction"); - uiMenuItemO(head, 0, "CURVE_OT_spline_weight_set"); - uiMenuItemO(head, 0, "CURVE_OT_radius_set"); - uiMenuItemO(head, 0, "CURVE_OT_smooth"); - uiMenuItemO(head, 0, "CURVE_OT_smooth_radius"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Specials", 0); + layout= uiPupMenuLayout(pup); + uiItemO(layout, NULL, 0, "CURVE_OT_subdivide"); + uiItemO(layout, NULL, 0, "CURVE_OT_switch_direction"); + uiItemO(layout, NULL, 0, "CURVE_OT_spline_weight_set"); + uiItemO(layout, NULL, 0, "CURVE_OT_radius_set"); + uiItemO(layout, NULL, 0, "CURVE_OT_smooth"); + uiItemO(layout, NULL, 0, "CURVE_OT_smooth_radius"); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/curve/editcurve.c b/source/blender/editors/curve/editcurve.c index 72806a79c50..c60007680ba 100644 --- a/source/blender/editors/curve/editcurve.c +++ b/source/blender/editors/curve/editcurve.c @@ -38,8 +38,6 @@ #include #include "MEM_guardedalloc.h" -#include "BMF_Api.h" - #include "BLI_blenlib.h" #include "BLI_arithb.h" #include "BLI_dynstr.h" @@ -3562,15 +3560,17 @@ static int toggle_cyclic_invoke(bContext *C, wmOperator *op, wmEvent *event) { Object *obedit= CTX_data_edit_object(C); ListBase *editnurb= curve_get_editcurve(obedit); - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; Nurb *nu; for(nu= editnurb->first; nu; nu= nu->next) { if(nu->pntsu>1 || nu->pntsv>1) { if(nu->type==CU_NURBS) { - head= uiPupMenuBegin("Direction", 0); - uiMenuItemsEnumO(head, op->type->idname, "direction"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Direction", 0); + layout= uiPupMenuLayout(pup); + uiItemsEnumO(layout, op->type->idname, "direction"); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } } @@ -4507,18 +4507,21 @@ static int delete_exec(bContext *C, wmOperator *op) static int delete_invoke(bContext *C, wmOperator *op, wmEvent *event) { Object *obedit= CTX_data_edit_object(C); - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; if(obedit->type==OB_SURF) { - head= uiPupMenuBegin("Delete", 0); - uiMenuItemEnumO(head, "", 0, op->type->idname, "type", 0); - uiMenuItemEnumO(head, "", 0, op->type->idname, "type", 2); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Delete", 0); + layout= uiPupMenuLayout(pup); + uiItemEnumO(layout, NULL, 0, op->type->idname, "type", 0); + uiItemEnumO(layout, NULL, 0, op->type->idname, "type", 2); + uiPupMenuEnd(C, pup); } else { - head= uiPupMenuBegin("Delete", 0); - uiMenuItemsEnumO(head, op->type->idname, "type"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Delete", 0); + layout= uiPupMenuLayout(pup); + uiItemsEnumO(layout, op->type->idname, "type"); + uiPupMenuEnd(C, pup); } return OPERATOR_CANCELLED; diff --git a/source/blender/editors/datafiles/blenderbuttons.c b/source/blender/editors/datafiles/blenderbuttons.c index f998fde739c..e3fdee554f7 100644 --- a/source/blender/editors/datafiles/blenderbuttons.c +++ b/source/blender/editors/datafiles/blenderbuttons.c @@ -1,4123 +1,4571 @@ /* DataToC output of file */ -int datatoc_blenderbuttons_size= 131741; +int datatoc_blenderbuttons_size= 146052; char datatoc_blenderbuttons[]= { -137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2, 0, 8, 6, 0, 0, 0, - 94,187, 18, 70, 0, 0, 1, 57,105, 67, 67, 80, 80,104,111,116,111,115,104,111,112, 32, 73, 67, 67, 32,112,114,111,102,105,108, -101, 0, 0,120,218,173,145,177, 74,195, 80, 20,134,191, 27, 69,197,161, 86, 8,226,224,112, 39, 81, 80,108,213,193,140, 73, 91, -138, 32, 88,171, 67,146,173, 73, 67,149,210, 36,220,220,170,125, 8, 71,183, 14, 46,238, 62,129,147,163,224,160,248, 4,190,129, -226,212,193, 33, 72,112, 18,193,111,250,206,207,225,112,224, 7,163, 98,215,157,134, 81,134, 65,172, 85,187,233, 72,215,243,229, -236, 19, 51, 76, 1, 64, 39,204, 82,187,213, 58, 0,136,147, 56,226, 39, 2, 62, 95, 17, 0,207,155,118,221,105,240, 55,230,195, - 84,105, 96, 2,108,119,163, 44, 4, 81, 1,250, 23, 58,213, 32,198,128, 25,244, 83, 13,226, 14, 48,213, 73,187, 6,226, 1, 40, -245,114,127, 1, 74, 65,238,111, 64, 73,185,158, 15,226, 3, 48,123,174,231,131, 49, 7,152, 65,238, 43,128,169,163, 75, 13, 80, - 75,210,145, 58,235,157,106, 89,181, 44, 75,218,221, 36,136,228,241, 40,211,209, 32,147,251,113,152,168, 52, 81, 29, 29,117,129, -252, 63, 0, 22,243,197,118,211,145,107, 85,203,218, 91,231,159,113, 61, 95,230,246,126,132, 0,196,210, 99,145, 21,132, 67,117, -254,221,133,177,243,251, 92,220, 24, 47,195,225, 45, 76, 79,138,108,247, 10,110, 54, 96,225,186,200, 86,171, 80,222,130,251,241, - 23,194,179, 79,254, 28, 9,179, 39, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189,167,147, 0, 0, 0, 9,112, - 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 7,116, 73, 77, 69, 7,217, 4, 20, 16, 14, 38,131, -182,138, 76, 0, 0, 32, 0, 73, 68, 65, 84,120,218,236, 93,119,120, 84, 85,226, 61,247,181,201,180,132, 20,146, 64, 40, 65,138, - 72, 9, 93,138, 32, 29,130, 16, 84, 64, 84,196, 31,224,234,162,171,162,226,170, 65, 69,176,145,192, 42, 32,184,148,197, 93, 68, - 41, 10, 22, 52, 40, 44, 69,138, 52, 33,184, 2, 34,132, 22, 4, 66, 73, 34,144, 76, 50,153,246,230,254,254,200,188,231,100,152, -242, 6, 38, 8,120,207,247,205, 55, 51,111,222, 59,115,251, 61,247,220,251,238, 35,148, 82, 84, 23, 8, 33,105,148,210,125,140, -147,113, 50, 78,198,201, 56, 25, 39,227,100,156,127, 38,112, 87,144,168, 17, 87,100,132, 16,234,121,245,184,222, 57,171, 49,238, - 52,130,156, 61, 60,156,147,111,144,112,246,184, 94, 57,149,248, 70,146,215, 59, 13, 35,149,158, 94,225,164,145, 14,103,117,113, - 70,186, 94, 70,178,140,250,201,247,201, 55, 72, 56,123, 92,111,156,190,229, 39, 18,188,254,202,228,213,166,167,159,112,210, 72, -135,179,186, 56, 35,221, 95, 70,170,140, 6,201,251,136,245, 77,215, 51,132, 63, 90, 96, 0, 0,165,148,120,241,147,235,149,211, - 59, 29, 20,254, 72,134, 53,130,216, 24,105, 78,159,244,140, 20, 38, 83, 74, 9, 33,100, 19,128, 30,145,140,123, 36,242,221, 39, -174, 17,225,173, 78,113, 21,201,114, 95,221,156,145,170, 75,190,156,145, 40,247,254,242,189, 26,243, 40, 82,225,140, 72, 93,170, -142, 50,239,167,252, 92, 53,175, 47,103, 36,234,146, 47,103, 36,202,253,181,224,140, 68, 93,242,199, 25,137,114, 31, 40,239,153, -131,117,109,132,128,111,197,238,121, 61, 11,161,106,118,177,122,220, 8,156, 17,206,163,201, 30,206, 72,142,102,122, 70, 42,143, -124,203, 78, 36, 70, 93,222,156,145, 42,155,126,194,121,213,249,228,143,243,106,195, 27, 32,156, 17,143,251,213,150,251,107,197, - 25,225, 60,138, 72, 93,242,225,236, 25,225, 65, 64,207, 72,214, 37,111,206, 72,213, 37, 63,225,188,234,124,242,199,121,181,225, - 13, 16,206,136,199, 61,130,142,104,196,121,111, 58, 7,171, 58,197, 85,117,136, 55,101,148, 20,233,142, 44,146, 34,171,186,156, -182, 72,185, 56,126,120, 55, 69,144,110, 99,164,195,233, 9, 31,169, 14, 33, 76, 41,157, 76, 8,153,116, 61, 87,104, 86,151, 88, - 93,186,222,234,146,191,114,115,181,117,169,186, 6,207,222,156,145, 18, 66,126,226,126, 85,117,201,247,218, 72,212,165, 16,156, -164, 58,226, 31,233,250,116, 61,130,187, 94, 2, 82, 13,235,123,104,117,184, 98,213, 24,239, 72,134,179,231,141, 16,247,234, 8, - 39, 33,100,114, 53,197,253, 70, 73, 83, 86,151, 88, 93,186,238,234,146, 79,153,236, 25, 41,103, 40,210, 3, 41, 95,206, 72,174, - 67,138,100, 25,173,238,184, 71,178, 46, 85, 71,222,223, 40, 8,219,193,170,174,209,241,141,192, 89, 29,220,213, 20,247, 77,213, - 49, 58,168,134,117, 93, 17, 15, 39,165,116, 50, 34, 56,229,168,196, 57,146, 97,173,206,105,194,234, 40,155,213, 89,222, 35,185, -206,163,154,226,126,163,228,123,196,195, 25,169,186,228, 39,207,175, 58,172,254,210, 47,210, 83,216,145, 44,155,213,201, 25, 9, -238,234, 8,103,117,229,253,141, 4, 82,157,219, 52, 48, 48, 48, 48, 48, 48, 48, 48,252, 25,225,215,193, 74, 75, 75,219,208,177, - 99,199,166, 63,254,248,163,131, 82, 10, 66, 8, 8, 33,224, 56, 14,132, 16,184,221,238, 51,187,119,239,190,131, 37, 31, 3, 3, -131,166,145, 28, 33, 28,126, 95,146,224,174, 28,204,178,209, 29, 3, 3,195, 77,220,238,249,107,227, 90,183,110,157,247,227,143, - 63,214,249,239,127,255, 11,131,193, 0,147,201, 4,147,201, 4,179,217, 12,147,201,132, 65,131, 6,157,221,178,101, 75,163,112, -255,236,150, 91,110, 57,228,114,185,106,133,165, 0, 5,161, 48, 63, 63,191, 41,165, 84,246,247,123,237,218,181, 15, 17, 66,234, -134,217,216, 23, 23, 20, 20, 52,164,148,186,174, 21,103,199,142, 29,243,101, 89, 78, 12,135, 83,167,211,157,218,182,109, 91, 83, - 86, 76,175, 13,238,184,227,142, 67, 78,167, 51,236,242, 89,167, 78,157,166,203,151, 47,247, 91, 62, 59,117,234,116,220,237,118, - 39,104, 44, 67, 0, 0,142,227,142,239,220,185,179, 77, 32, 1,210,174, 93,187,176,203, 39,128,194,220,220,220, 6,129,126,108, -211,166,205, 33,158,231, 35,202,169,160,125,251,246, 98,237,218,181, 23, 0,184, 47,216,121,162, 40, 22, 95,184,112,161,225,198, -141, 27, 93,172, 52, 50, 48, 48,220,232,240,235, 96,185,221,238,211,143, 63,254,184,105,207,158, 61,129, 28,172,243, 87,242,103, -118,187,189,110,254,186,117, 16,146,147, 65,237,118,184,226,226, 64, 41,133,219,237, 6,159,151, 7,234,112, 0, 14, 7, 92,109, -218, 0, 0,156, 78, 39,218,183,111,159,148,154,154, 42, 2,144, 3,208,214, 26, 55,110, 28,162,163,163, 81, 81, 81,129,138,138, - 10,216,108, 54,216,108, 54,216,237,118,216,237,118, 56, 28, 14, 56, 28, 14, 56,157, 78,216,108, 54,236,217,179, 39, 54, 53, 53, - 85, 0, 16,168, 33,175,245,244,211, 79,195,108, 54,171,124,202,187,194,225,205,103,179,217,240,211, 79, 63, 5,229,148,101, 57, -113,211,166, 77, 48,153, 76,112,187,221,144,101, 25,178, 44,195,237,118,195,237,118, 43,233,238,125, 62,210,211,211,107,177, 34, -122,237, 96,183,219,235,110,121,251,109,240, 53,107,130, 58,157,112, 53,111,174,230,143,248,253,247,128,211, 9,234,116,194,217, -175,159, 90,110,239,190,251,238,164,162,162,162,128,229,211,229,114, 37,109,122,225, 5,112,209,209,160, 21, 21, 48, 14, 25, 2, - 84,218, 55, 40,157, 57, 19,212,233, 4,117, 56, 96,206,204, 4,165, 20, 69, 69, 69,214,180,180,180,253,168, 92,167, 64, 3, 8, -177, 90,235,215,175, 87,203, 12,165, 20,138, 22, 83,234, 41,207,243,234,235,135, 31,126,192,243,207, 63, 31, 84,220,243, 60, 95, -107,244,232,209,112, 56, 28,106,221, 81, 62, 59,157, 78,181,188,187, 92, 46, 56,157, 78,216,237,118,156, 58,117, 42,228,128, 65, - 17, 87,245,234,213, 27, 48,125,250,116,228,228,228,224,150, 91,110,129, 36, 73,106,248,148,240, 62,251,236,179,177,158, 54,137, - 9, 44, 6, 6,134,155, 83, 96,237,219,183,175, 55, 0, 12, 29, 58,116, 67, 90, 90, 90,211, 95,126,249,197,161, 52,222,158, 87, -237,135, 30,122, 40, 95,105,204, 41,165,103, 62,254,248, 99, 77, 83,134, 66,114, 50,242,227,227, 1, 0,151,114,115,149, 17, 59, -162,219,182, 85,207,113,252,242, 11, 56,142, 67, 74, 74,138, 58,170, 15, 6,179,217,140,254,253,251, 67,167,211,161,125,251,246, -144, 36, 9,162, 40, 6,124,105,129,209,104,196,235,175,191,174,184, 20, 48,233,163,240,183, 59, 59, 67, 79,128,255,252,244, 11, -108,178, 27,130, 32, 64, 16, 4,205,156, 38,147, 9,159,126,250, 41, 36, 73,242,251, 90,191,126, 61,238,185,231, 30, 72,146,132, -248,248,120,252,153, 54,100,187, 94,192,215,172,137,211,237,218, 93, 94, 62, 7, 15,190,172,124, 38, 37, 37,105, 42,159, 92,116, - 52,206,222,117, 23, 0,160, 96,243,102,232,116, 58, 72,146,132,152, 55,223, 4, 21, 69,112,146, 4,199, 99,143,193, 98,177, 88, - 71,143, 30,189,221,104, 52,174,253,237,183,223,130,114,202,178,140,157, 59,119, 66,146, 36, 68, 69, 69, 93,246,210,233,116,136, -138,138,194,178,101,203,112,242,228, 73, 77,113,183, 90,173,120,251,237,183, 65, 8,169, 82,135, 2,125,214,224,200,113, 3, 7, - 14,156, 91,183,110,221,126,211,167, 79, 55, 73,146,132, 57,115,230, 64, 16, 4, 12, 26, 52, 8,241,241,241, 88,187,118, 45, 36, - 73,194, 11, 47,188,192, 10, 31, 3, 3,195,205, 47,176,188, 26,200, 58,175,190,250,106,141,197,139, 23, 35, 42, 42, 10, 6,131, - 1, 70,163, 17, 70,163,177,202,231, 87, 94,121, 69,214,250,135,212,110,175,218,249,112, 28, 56,142, 11,120, 76, 75, 7,102,183, -219, 49,124,248,112, 0, 8, 41,174,180,138, 33,155,205, 6, 65, 16,208,168,126, 34, 94, 29,222, 1, 93,121, 10,107, 49,128,162, - 50,140,174, 45,224,127,117,111,197,236, 95,139,113,162,196, 2, 65,208,118, 51,166, 44,203, 1,197,149, 36, 73,248,248,227,143, - 49,124,248,112, 72,146,116, 89,154, 48, 92, 27, 80,167, 51,172,242,169,137,179,162, 66,177,137, 84,113,165,211,233, 0,157, 14, -156, 40,130, 72, 18, 44, 22,139,117,232,208,161,187, 12, 6,195,146,196,196,196,130, 80,162,136, 82,138,168,168,168,203, 4,150, - 78,167, 83,197,213,242,229,203,177,120,241, 98,116,234,212, 73,115,153,151, 36, 9, 79, 61,245,212,101,191,173, 92,185, 82, 21, - 88,130, 32, 64,146,164, 80,226,138, 0,224, 68, 81,188,255, 31,255,248, 7,167,156,159,144,144, 0, 81, 20,145,150,150, 6,179, -217,140,173, 91,183,170,245,130,129,129,129, 33, 8, 68, 0,109, 0, 36,162,114,198,160, 20, 64,172,215,239,133,158,247, 68,175, -239,187,252,240,220,238, 57, 71,249, 93,249,110, 7,160,243,115,188, 24,128,193,243,178, 1,216, 6,160,165,215,255, 40,215,193, -247,127, 5, 79, 99,216, 3,192, 70, 0, 61,189, 55,191,163,148,158,126,235,173,183, 76,126, 28,172, 42,211,134,148, 82,205, 83, -134,114,124,188,234, 12,212,104,223,254,247,198,253,231,159,213,142, 75,236,218, 21,196,104, 4,222,121, 71, 19,167,221,110,199, -249,243,231, 47, 27,121, 95,169,192, 34,132,192,233,116,194, 96,136,194,119,243,187,227,204, 49, 23,222,206, 57,137,149, 63, 28, -135, 32, 8,200,184,173, 9,134,185,128,236,120, 61,198,186,100, 56,220,218,214,234,186, 92, 46,191, 78,128,242, 34,132, 84,249, -204,112,237,225,106,222, 92,115,249, 36, 47,191,172,137,211, 56,100, 8,206,108,217, 2, 73,146,144,208,175, 31,224,113,173,132, - 93,187, 32, 73, 18,202,202,202,172, 15,116,236,248,253, 5,189,126,241,160, 65,131,142,175, 93,187,214, 24, 82,180, 81, 90, 69, - 76,121,187, 86,222,226, 74, 20, 69, 56,125, 68, 99, 48,129, 21,168,126, 40,229, 53, 28, 7, 11, 0,220,110, 55,253,246,219,111, - 49,103,206, 28, 36, 36, 36,160,127,255,254,168, 85,171, 22,150, 47, 95, 14, 74, 41,158,122,234, 41, 24, 12, 6, 24, 12, 6, 86, -230, 25, 24,254,164, 8,164, 65,124,208,125,194,132, 9, 29,178,179,179,167,116,233,210,101,217,182,109,219,150, 18, 66,114,188, -218,196, 12, 15, 87,142,215,247,219,125, 68,150, 8, 32,145, 16,146,163,156,239,253,221,235,120, 95, 0, 58,229,251,132, 9, 19, - 90,102,103,103, 79,201,204,204,124, 57, 43, 43, 75,154, 48, 97, 66,171,236,236,236, 41,202,255,248, 11,135,183,131,229,119, 23, -224,207, 63,255,188,183,111, 12,155, 55,111,190,161,115,231,206, 77,247,236,217,227, 45,186,106,223,126,251,237,249,148,210,144, -119, 23, 42,107,186, 2,185, 2, 28,199,129,152, 76,128,201,164, 53, 99,224,116, 58, 33, 8, 2, 56,142,195,218,181,107, 97, 48, - 24, 48,112,224,192,128, 2, 75,171, 43,166,211, 73, 16, 98, 57,252,223,244,221, 40,186, 80,174, 78, 9,174,203, 63,137, 31,244, -122,188,218,162, 53,204,150,124,148,216,236, 97, 57, 88, 58,157, 78,237,172, 36, 73,194,147, 79, 62, 9,187,221, 14,142,227,212, - 99, 30,225,202,122,156, 63,166,178,107, 42,159, 84,163,139,229,118,187,127,119,173, 36, 9,156, 36,129,120,242,185,172,172,204, - 58,100,200,144, 93, 23,244,250,197,167, 78,157,250, 1,128, 94,171,192, 82, 68,149,194,237, 79, 92, 9,130, 0,135,195,161,121, -160, 18,200, 73, 10, 87, 96,209,202, 6,197, 13,128, 54,104,208, 64,189, 38, 57, 57, 25,177,177,177,234,218, 54,189, 94, 15,131, -193,192, 28, 44, 6,134, 63, 55,180, 60,137, 32, 42, 59, 59,123,138,183,128,241, 21, 52,222,194,201, 71, 68,121,139,180,150, 33, -218,255, 28, 95,209,164,252, 47, 33, 36, 39, 43, 43, 43, 35, 68, 56, 10,125, 5,150,230,109,246,121,158,175, 51,127,254,252, 26, - 95,126,249, 37,204,102, 51, 98, 99, 99, 17, 19, 19,131,216,216, 88, 12, 27, 54, 44,228, 84,161,219,237, 14, 56,237,194,243,124, -165, 96, 51,155, 43, 59, 49,141, 29,152,195,225,128, 40,138,224, 56, 14, 79, 60,241,132,186, 46,234,106,166, 8,237,118, 59,120, -142, 7,162,110, 1,197, 78, 85, 92,169, 47,157, 14,249,245, 91,131,156, 61, 13, 65,208, 54, 67,234,118,187,213, 78, 79, 20, 69, -188,246,218,107,120,247,221,119,171,220, 64, 32,138, 34,218,182,109,139,188,188, 60, 86,229,254, 0,132, 85, 62, 5, 65,147, 88, - 87,220, 38, 73,146,192,233,116, 32, 30,129, 85, 86, 86,102, 29, 49, 98,196,247, 37, 37, 37,139,155, 54,109,122, 4,149,219, 24, -104, 18,213,132, 16,149, 83,175,215, 7, 20, 87,130, 32,104,118,176,148,122,228,141,191,254,245,175, 85,222, 1,224,169,167,158, -210, 90,143, 40, 0,136,162,136,190,125,251,162, 85,171, 86, 88,185,114, 37,220,110, 55,158,124,242, 73, 24, 12, 6,204,156, 57, - 19, 46,151, 11, 83,167, 78,101,133,143,129,225,207, 61,176, 13,165, 65,172,153,153,153, 47, 19, 66,114, 60, 78,210,254, 32, 66, -202, 31,110,247, 17,105,133, 1,218,235, 12,127, 34,203,251,179,130, 9, 19, 38,180,244, 19,142, 93,151, 9, 44, 47,245, 24,170, - 3, 58, 61,118,236, 88,147,178, 71,150, 34, 12,120,158,215,116,119, 33,119,232, 16,204,158, 5,237,246, 3, 7,126, 23, 22,221, -187,131,152, 76, 32, 70, 35,184, 85,171, 42, 59,174,216, 88,224,165,151, 66,166,154,211,233, 84, 5, 86,113,113,113, 68,214, 96, - 57,157, 78,240,146,136, 29,102, 17, 84,228,171,136, 43, 81, 20,193, 9, 34,242, 19,111, 5, 17,254, 11, 65,214,118,211,147, 34, -176,148, 23,199,113,120,246,217,103,213, 52,224, 56, 14, 93,187,118, 85,132, 44,171,113,127, 0,132, 45, 91, 96,206,200,208, 84, - 62, 73,116, 52,240,239,127,135,228, 44,155, 51, 7,209,111,191, 13, 34,138, 16,118,236,128, 78,167,131,197, 98,177,222,211,182, -237, 46, 75,108,236,226, 19, 39, 78,252, 0,128, 27, 62,124,120,141, 14, 29, 58,240, 26, 27, 35,191,211,130, 75,151, 46,173, 34, -174, 4, 65,128,203,165,173,124, 6,115,176,252,185, 89, 26,132, 37,189,251,238,187,193,243, 60,106,212,168,129,232,232,104,245, -238, 75,197,185,114,185, 92,112,185, 92,154,215, 49, 50, 48, 48,220,156,208,160, 65,108, 89, 89, 89,251,179,178,178, 84, 39,201, -215,193, 10,128, 65, 30, 49,149,168,136, 51, 84,174,165,218, 21, 36, 44, 25,129,132,151,247,177,236,236,236, 41,126,194,161, 78, - 75, 6,220,104,180, 83,167, 78, 77,189,183,105,224,121, 30,178, 44,159,249,249,231,159,175,106,131, 81,234, 53, 93,225, 45,206, - 20, 87,128,152, 76, 97, 47, 34, 86,166, 8,121,158, 87,197,203,162, 69,139, 96, 54,155, 49,102,204,152,171, 16, 88, 60,190,146, -242, 0, 73,184,204,193,226, 69, 17,191,214,168, 7, 78, 20, 33,200, 78, 77, 78, 70, 73, 73, 9, 36, 73,194,123,239,189,135, 87, - 94,121, 69, 73, 83,213, 29,241, 22, 90, 12,127, 80, 37,247,114,123, 66,149, 79,158,231,161,105,175, 76,151, 11,144, 36,192, 51, -149,103,177, 88,172, 35, 70,140,248,222, 18, 27,187,184,113,227,198,138,115,197, 25,141, 70,240, 60,175,201,193,226, 56,206,175, -184, 82,234,129, 90, 78,121, 62, 44, 7, 75,146, 36,172, 90,181, 74,173, 43,222,206, 85,184, 2,203, 59,172,155, 55,111,198,158, - 61,123,240,196, 19, 79,192, 96, 48, 96,214,172, 89,112,185, 92,120,227,141, 55, 96, 48, 24, 42,167, 79, 25, 24, 24, 24, 2, 35, - 78, 17, 56, 30,145, 84,197, 89,162,148,102,120,139,160, 64, 83,133, 30,199,105,115,136,255, 90,229, 17,102,126,161, 56,105, 62, -131,222, 28, 95,113, 38, 40,202,209,251,157,227,184, 58,243,230,205,171,177,121,243,102, 24,141, 70,117,163,209, 17, 35, 70,200, - 87,157, 68,138,192,242, 76,183,168,194,194,211,129,113, 94, 29,152,214, 69,175,138,131,229, 45,176, 38, 77,154, 4, 65, 16,176, - 96,193, 2, 0,192,223,255,254,247,176, 4,150,195,225, 0,117, 3,219,228,141, 72,153,211, 26,244, 67, 61,206,109,254, 5,162, - 40,162, 86,199,126,112,119, 24,134, 98, 93, 12, 76,212,173,121,244,125,225,194, 5, 28, 56,112, 0,132, 16,188,254,250,235, 85, -246, 0,242, 94,227, 3, 0,107,215,174, 5,254, 68,207,108,186,238, 4,150,134,242,169, 56, 73, 90, 56,137, 78, 7,222, 35,174, -134, 12, 25,178,171,164,164,100,241,137, 19, 39,118, 1, 32, 35, 71,142,172, 97, 52, 26,177,112,225, 66, 43, 0,113,197,138, 21, - 6, 45,162,197,159,184,242, 39,176,100, 89, 14,171, 30,133, 26,140, 92,137,192, 34,132, 64,150,101,213,185,114, 58,157,234,247, -168,168, 40, 86,240, 24, 24,254,228,238,149,247,123, 0, 20,250,172,115, 34, 62, 78, 83,161, 63, 97,229, 61, 29,232,245,217,233, -135,215,238, 51,117,232,123, 92,121, 47,206,202,202,250, 78,113,174,188,142, 87, 9, 71, 64, 7,139, 82,170,110, 52,170,116, 34, - 28,199, 65,150,229,243, 87,155,144,174, 54,109,224, 60,120, 16, 60,207, 67,234,217,179,114, 45,139,209, 8,110,229,202,223, 59, -174, 73,147, 64, 77, 38,208, 1, 3,180,113,122,238,206,243, 22, 88, 23, 47, 94,132, 40,138,120,235,173,183,192,113, 28,166, 78, -157,138, 58,117,234,224,204,153, 51, 88,189,122,181, 38, 78,206,205, 65, 63, 58, 30,250,177,209,224,158,104,140,150,131,199,226, - 82,105, 3,236,181,155,208,172, 44, 15,113, 27, 38,193, 33,107,159,222,112, 58,157,234,222, 69,148, 82,213,189, 82,166, 77,100, - 89, 86, 55,117,156, 54,109, 26,216,147, 68,174, 61, 28,125,250,104, 46,159,238,158,218, 30, 8,111,120,246, 89, 56, 70,143,134, -197, 98,177, 62,208,165,203,214, 18,189,254,227,230,205,155,171,107,174,140, 70, 35,244,122, 61, 81,156, 44, 45,156,202, 77, 29, -161,196,149,242, 89,107,249,244,222,134, 33, 18, 2, 75,105, 59,198,140, 25,131,218,181,107, 99,246,236,217, 85,156,171,151, 95, -126, 25, 78,167, 19, 51,103,206,100,133,143,129,129, 33, 24,118,133,113,238,237, 94, 98,105,215, 21,242,238,186,218, 0,251,109, -121,247,238,221,219, 59,208, 5,222,211,135, 74, 3, 74, 41, 61,179,103,207,158, 59,252, 52,174,105,148,210,125,222,199,100, 89, -254,125, 81,183,201, 84,233, 12, 24,141, 85, 28, 28,106, 54,131, 51,155, 1, 63,119,252,249,227, 84, 4, 22,199,113, 85, 70,223, -130, 32,224,210,165, 75, 16, 69, 17,179,103,207, 70, 76, 76, 12,108, 54, 27,180,132,211,225,112,128,231,121,148,159, 40,199,241, -137,123, 17,101, 58,130,166,253,162, 17, 45, 30, 69,147, 45, 95,194,229,178, 3, 94, 83,134, 90, 56, 27, 54,108,136,241,227,199, -171,139,147,125, 95,222,113,165,148,226,246,219,111, 15,201,121,181, 96,156, 85, 57,189,239,114, 13, 85, 62, 57,159, 60, 11, 22, - 78,229,110,193, 50,147,233,227, 19,199,142,237, 2,192,141, 28, 57, 50,198,104, 52, 98,254,252,249, 86, 0,220,155,111,190,105, -104,208,160, 1,175, 37,156, 60,207, 95, 38,174,194, 17, 88,129,234,145,239,246, 33,207, 60,243,204,101, 27,141, 6, 18, 88,129, -226,206,243, 60,106,214,172, 9,163,209, 8,151,203,165, 58, 87,122,189, 94,221, 29, 62,208, 96,130,149, 79,198,201, 56,255, 60, -156,127,144, 24,171, 54,132,189,178, 84,153, 62,220,177, 99, 7,162,163,163, 81,163, 70,141,176,166, 14,157, 78, 39, 18, 19, 19, - 65, 41,133,144,157, 13,160,242,201,175,118, 81, 84, 31,249, 33,246,238, 13, 55,199,193, 82, 94, 14,135,195, 17,114, 26,198,106, -181, 86, 89,128,174,136, 43,239,142,193, 98,177,168,155,135,106,129,194,169,184, 98, 68,166, 56,182,110,197,229,119, 19,134,177, -147,187, 44,203, 72, 74, 74,170,178,134, 71,233, 4,253,116,212, 0,155, 34,188,230,112, 58,157,136,243, 60,194, 73,204,204, 4, - 8, 1, 37, 4, 54,143,211,232,114,185, 32,118,233, 2,202,243, 40,177, 90,225,112, 56,160,215,235,131,114, 22, 23, 23, 91, 31, -124,240,193,239, 41,165, 31, 13, 30, 60, 56, 15,149, 11, 44,169,201,100,210,241, 60, 79, 1,252, 6,128,158, 63,127,190,198,185, -115,231,220, 46,151,171, 94,168,112,238,216,177, 3,199,142, 29, 67,187,118,237,212,199,215, 40, 47,229, 17, 76, 87,226, 96,249, -219,163,237, 74,119,114,247,106, 51, 80,163, 70, 13,232,116, 58,188,245,214, 91,144, 36, 9, 6, 67,229, 44,232,204,153, 51, 43, -211, 58, 12, 62, 6, 6, 6,134, 27, 1, 97, 11, 44,101,250,240,199, 31,127,116, 40,141,167,214,141, 70, 37, 73, 42,108,213,170, - 85, 88, 15, 60,150, 36,233,226,137, 19, 39, 92, 65, 84,244,217,141, 27, 55,134,245,144, 90,158,231, 67,114,238,216,177, 35, 44, - 78,142,227,130,114,138,162, 88,152,158,158, 30, 86,220,163,162,162,206,179, 34,122,237, 32,138, 98,225,160, 65,131,252,231,209, -172, 89,129,174,185,136, 32,207,206, 19, 69,241, 88,203,150, 45,127, 49,153, 76,223, 38, 36, 36,252,182,101,203,150,132,118,237, -218, 85,121,248,115,187,118,237,106,249,148, 37, 59, 2, 60,135,208,131,179, 47,190,248, 98,184,229,179, 48,196,104,244,236,217, -179,103,195,173, 71,133, 33, 27, 24, 65, 56, 59,110,220,184,186, 90,235, 58,216,115, 8, 25, 24, 24,254,172, 2, 43,216,244, 97, - 40,228,231,231, 55,136,116, 4, 78,159, 62,221,244, 70,224,220,177, 99, 71, 3, 86,220,174,111, 84, 71, 30,237,216,177, 35, 45, -210,156,185,185,185, 17, 47,159,187,119,239,110, 90, 29,105,250,217,103,159, 53,101, 37,139,129,129,225,207, 8,182, 31, 0, 3, - 3, 3, 3, 3, 3, 3, 3, 19, 88, 12, 12, 12, 12, 12, 12, 12, 12,215, 55, 8, 0,191, 83, 24,225,220, 29, 64, 8, 9,123, 26, - 36, 20, 63,227,100,156,140,147,113, 50, 78,198,201, 56,111, 62,206, 80,220,215,241,221,137,225, 9,172,234,220,107,137,221,194, -202, 56, 25, 39,227,100,156,140,147,113, 50,206, 63, 35,216, 20, 33, 3, 3, 3, 3, 3, 3, 3, 3, 19, 88, 55, 7,136,214,231, - 0, 49, 48, 48, 48, 48, 48, 48,220,112, 8,184, 77, 67,199,142, 29,243,101, 89, 14,107,223, 38, 81, 20, 11,181,222,234, 78, 8, - 17, 82, 82, 82,134, 24, 12,134, 30,162, 40,118, 1, 0,167,211,185,221,106,181,110, 42, 40, 40,248,130, 82,122, 69,251,225, 36, - 39, 39, 55,224, 56,238, 33, 66,200,112, 0,160,148, 46,119,187,221, 75,206,157, 59,151,127,189, 8, 43, 73,146, 38,222,121,231, -157,119, 18, 66, 22, 82, 74,151, 68,144,251,130,191,227,148,210,184, 43,229,172, 95,191,126,172,203,229,234, 0,160,173,231,208, -143,130, 32,236,254,245,215, 95, 47,178,234,115,115,224, 74,234, 58, 80,185,175,221,246,237,219, 27, 68,146, 83,167,211,157,218, -182,109,155,223,173, 29, 58,117,234,116,200,229,114,213,141,100, 56, 59,117,234,148,239,114,185,194, 14,103, 84, 84,212,169,173, - 91,183, 54,141, 36,231,181, 14,103, 32,116,232,208,225,115, 74,105,186,167, 77, 89,179,123,247,238,161,172,150, 48, 48, 68, 80, - 96,201,178,156,184,105,211, 38,152, 76, 38,165,147,134, 44,203,234, 46,209,110,183, 91,125,134,158,178,195,117,255,254,253, 53, - 53, 0,245,234,213,107,209,180,105,211,197, 79, 61,245, 84,189,193,131, 7,235,146,147,147, 65, 8,193,217,179,103, 27,231,228, -228, 60, 48,123,246,236,151,235,213,171, 55,242,228,201,147, 63,107,225, 75, 76, 76, 52, 73,146,116, 47,165,116,100,235,214,173, -239,120,225,133, 23, 72,215,174, 93, 33,203, 50, 54,108,216, 48, 97,250,244,233,153, 41, 41, 41,219, 8, 33,139, 29, 14,199,151, -133,133,133,101,127, 96,154,247, 30, 55,110,220, 3,127,251,219,223,106, 62,250,232,163,255, 7, 96, 73, 4,185,117, 17, 20,107, - 66,237,218,181,199, 3,200,244,229,117,185, 92,246,148,148,148,236, 51,103,206, 76,191, 82, 33,204,112,253,192,187,174, 43,207, -196,116,185, 92,106,221,150,101, 89,125,202,130, 98,188, 82, 74,209,183,111,223,196,112, 56,149,118, 67,225, 5, 0,183,219,237, -125, 13,210,211,211,107, 5,226,116,187,221,181, 20, 78,239,112, 41,124,190,235, 73,149,176,222,121,231,157, 1,195,233,114,185, - 18,191,255,254,123,232,245,122,149,203, 55,140,222,188,202, 67,171,123,245,234, 85, 43, 92, 78,229,179, 63, 78, 0,232,218,181, -235, 53, 13,167,151,120, 75,114,185, 92,179, 8, 33, 58,158,231, 95,160,148,166,175, 94,189, 26,178, 44, 99,208,160, 65,233,157, - 58,117,106, 44,203,242, 63,140, 70,163,219,102,179, 61,177,115,231, 78,182, 1, 50, 3,195,213, 8, 44, 0, 48,153, 76, 88,186, -116,169,250,120, 12,223, 71,209,120,127, 78, 77, 77,213,244,135,181,107,215,110,215,160, 65,131, 53, 95,124,241,133, 33, 41, 41, - 73, 61,238,112, 56, 16, 19, 19,131, 49, 99,198,232,250,246,237,219,120,228,200,145, 27,107,215,174,157,126,230,204,153, 61,193, -248,234,212,169,243,120, 82, 82,210,155,227,199,143, 55,220,125,247,221,136,139,171,106,214,100,100,100, 96,224,192,129,228,216, -177, 99, 93,151, 47, 95,222,245,163,143, 62,122,183, 78,157, 58,175,157, 62,125,122, 94,168,176,214,173, 91, 55, 78,175,215,191, -159,156,156,156,118,252,248,241,109, 58,157,238,197,138,138,138,167,106,215,174, 61,194, 98,177,156,180,217,108, 79,254,250,235, -175,199,195, 17, 45,241,241,241,127, 31, 59,118,108,124,105,105,169,156,155,155,123, 88, 57,174,215,235,159,239,220,185,115,199, -239,190,251,110, 9,165,244,243, 43,113,174, 92, 46,215,238, 96,191,107,117,178, 90,180,104, 33,213,174, 93,123, 13,128,142,131, - 7, 15, 62, 49,121,242,100, 26, 27, 27, 27,205,113, 28, 41, 46, 46,190, 48,109,218, 52,233,211, 79, 63,157, 84,187,118,237,244, - 22, 45, 90,164,255,252,243,207, 14, 86,149,110,108,152, 76, 38,124,242,201, 39, 85, 30,135,227,253,220, 65,223,199,229,196,199, -199, 87, 11, 39,165, 52,232,212,185,193, 96,192,134, 13, 27, 46,123, 52, 86,160,151,217,108, 6, 33, 4,132, 16, 66, 3,220,209, -163,215,235,177,110,221, 58,245, 65,215,161, 56,141, 70, 35, 16, 98,121, 69,184,156,102,179, 57,100,122, 94, 97, 56, 67, 46, 69, -112,185, 92,179,166, 77,155, 54, 40, 58, 58, 26, 47,189,244,210,255, 82, 83, 83, 17, 19, 19,131,249,243,231, 35, 46, 46, 14,178, - 44,255,239,157,119,222, 33, 39, 79,158,196,204,153, 51,231, 2, 24,194,106, 12, 3,195, 85, 10, 44, 0, 85, 26,193, 96, 2,203, - 31,124,239, 48,104,208,160, 65,148,217,108, 94,242,213, 87, 95, 25, 18, 18,126,127, 90,136,221,110, 71,105,105, 41, 44, 22, 11, - 74, 75, 75, 97, 50,153, 48,103,206, 28,195, 67, 15, 61,180,164, 65,131, 6,173,243,243,243,109,129, 56, 41,165,217, 63,253,244, -147,232,114,185,160,211,249, 55,112, 56,142, 67,227,198,141,241,204, 51,207,160, 91,183,110,198, 7, 31,124, 48, 27,192,188, 64, -156, 94,194,228,195, 45, 91,182,116, 73, 74, 74,210,127,249,229,151,250, 57,115,230,228, 13, 28, 56,208, 50,106,212,168,218, 23, - 47, 94,172,157,145,145,241, 53,128, 22, 90,226,238,193, 3,227,199,143,111, 17, 23, 23,199, 77,155, 54,237, 98,105,105,233, 7, -158,227, 79,205,156, 57,115, 84,143, 30, 61,106, 62,250,232,163,110, 66,200, 23,254, 58,131, 32,119,108,232, 60,241, 20,194,117, -182,252,113, 94,188,120,241,101, 0, 29, 23, 45, 90,180,175, 79,159, 62,245, 41,165,197, 0,206, 2, 64, 82, 82,146,126,250,244, -233,198, 30, 61,122,252,248,196, 19, 79,116,244,156, 59, 89, 99, 56,175, 24,140,179,122, 57,221,110, 55, 68, 81,196,176, 97,195, - 64, 8,169,242, 28, 67,165,158,111,217,178, 5,253,251,247,135, 40,138,120,244,209, 71, 53,115, 62,248,224,131,112,185, 92,151, -113,174, 95,191,190,138,208,226, 56, 78, 51,167,242,140,208, 80, 47,173,156, 90, 69,203,245,194,217,171, 87, 47,236,220,185,243, -170, 57,149,102,254,167,159,126, 66,235,214,173,177,120,241, 98,194,243, 60,118,238,220, 9,131,193,128,209,163, 71, 35, 45, 45, -141, 24, 12, 6, 28, 59,118, 12, 22,139,133,176,122,196, 56,171,139, 51, 4, 68, 0,109, 0, 36, 2,144, 1,148, 2,136, 5, 96, -247,244,113,197, 0, 12,158,151, 13,128, 5, 64, 77,207,181, 69,158,193,134,247, 99,202, 10, 81,245,161,208,183,123,184,149, 71, -128,121, 59,202,118,159,126, 84,249,238,251, 94,133, 91,240, 8, 9,165, 51,239, 73, 41,221,228,149,128,154,196,149, 40,138,208, -178,102,219,237,118,143,205,204,204, 76,242, 22, 87, 54,155,173,138,184,178, 88, 44, 40, 40, 40, 64,253,250,245, 49,124,248,240, -164, 69,139, 22,141, 5,240, 94,176, 68,231,121, 30, 63,252,240, 3,206,159, 63,143, 86,173, 90,225,150, 91,110,169,114,194,209, -163, 71,241,205, 55,223,224,194,133, 11,104,223,190,189,146, 81,126,145,146,146,146, 16, 27, 27, 59,142,227,184,251, 59,117,234, -148, 82, 88, 88, 72,206,158, 61,139,212,212,212,228, 47,190,248, 2,123,247,238, 53,231,230,230,194,225,112, 72, 93,186,116,169, -223,188,121,243, 19,162, 40,174, 58,119,238,220,187,193,214,121, 17, 66,248,186,117,235,190,252,248,227,143,235, 10, 10, 10,220, - 31,125,244,209,119,148,210,189,132,144,251, 95,121,229,149,199,210,211,211,107,238,217,179,167,116,215,174, 93, 59,168,198,189, - 51,252, 56, 87,130,111,131,108,177, 88,112,226,196,137,221, 37, 37, 37,156,231,124, 59,165,180, 86, 16,215,174, 17,128,241,247, -223,127,255, 97,143,184,250,213, 83,152, 1, 0,178, 44, 59, 75, 75, 75,203,122,244,232, 81,187,111,223,190, 7,215,173, 91, 55, -190,110,221,186,139, 79,157, 58,117,148,141, 87,110, 92,184, 92, 46,136,162,136,111,191,253, 54,168,219,180,117,235, 86,213,113, - 89,177, 98,133, 38,206,175,190,250, 42,164,131, 21, 70, 27,162,138, 7,223,135,174,207,157, 59, 23,227,198,141,171,114,204,227, - 94, 81, 79,227, 74, 3,113, 6, 18, 66,183, 52,108,136,179,103,206, 84,225,228, 56,174,202,212,102, 48,206,143, 62,250, 8, 25, - 25, 25,200,201,201, 9,250,126,215, 93,119,105,138,187, 34,174, 28, 14,135, 26,198, 35, 71,142,248,229,253,231, 63,255, 9, 45, - 77, 9,207,243,227,151, 45, 91,246,211,133, 11, 23,132,220,220, 92,232,245,122, 24, 12, 6,245,253,236,217,179,176,219,237,248, -244,211, 79, 93, 28,199, 61,207,106, 11, 67,164, 17, 72,131,248,160,251,132, 9, 19, 58,100,103,103, 79,233,210,165,203,178,109, -219,182, 45, 37,132,228, 80, 74, 51,148,247, 9, 19, 38,180,204,206,206,158,146,153,153,249,114, 86, 86,214,126, 66, 72, 14, 0, -248,126,247,232,155, 12, 31,241,150,168,240,120,194, 84,229, 92,127,223,125,223,125,185, 5,175, 3,196,171, 33, 82, 58, 83,205, - 2,203,223,104,201, 23,209,209,209, 3, 6, 12, 24, 32, 5, 19, 87,165,165,165, 40, 45, 45,197,161, 67,135,144,150,150, 38, 69, - 71, 71, 15, 8, 33,176, 42,149,133, 32, 32, 37, 37, 5, 69, 69, 69,216,183,111, 31, 82, 83, 83,225,116, 58,177,102,205, 26, 92, -188,120, 81,109,216,237,118,123, 80,158,164,164,164,217, 15, 61,244,208,192,177, 99,199,242,255,253,239,127,209,172, 89, 51,220, -114,203, 45,216,182,109, 27, 28, 14, 7,234,213,171,135, 46, 93,186, 96,197,138, 21,104,211,166, 13,247,215,191,254,181,230,254, -253,251, 71,207,154, 53,171, 51,128,118, 65,168,219, 12, 29, 58,180,102,116,116, 52,198,141, 27, 71,237,118,251, 12, 66, 72,218, -176, 97,195, 38, 63,253,244,211, 9,249,249,249,142,199, 30,123,108,187,221,110,159, 31, 70,185, 12,232, 92,185, 92, 46, 88, 44, - 22,148,148,148,160,180,180, 84, 40, 41, 41,225,160, 97,141,150,219,237,190, 19, 0, 63,113,226, 68, 80, 74,127,243, 22, 87,118, -187, 29, 22,139, 5, 22,139,197, 45,203,242,165,177, 99,199, 90,215,173, 91,199,123,174, 97, 2,235, 6,134, 82,215,135, 14, 29, - 90,197, 29, 90,191,126, 61, 50, 50, 50, 46,155,230,211, 34, 8, 20,206, 7, 30,120, 64, 21, 70, 74,155,177,122,245,106, 77,142, - 75, 32,145,225,207,193,226, 56,206,239,177, 80, 34, 67,225,244,247, 2,112, 25,167, 86, 33, 40, 8, 2,198,142, 29, 11, 81, 20, -241,220,115,207, 65, 20, 69,164,165,165, 65, 20, 69,116,234,212, 9,162, 40,162, 87,175, 94, 97,115,110,222,188, 25,157, 59,119, - 86,195,152,150,150,134,118,237,218, 65, 20, 69,116,235,214, 13,162, 40,162,127,255,254,154, 56,149, 5,237,105,105,105,120,226, -137, 39,240,197, 23, 95, 96,209,162, 69,234,239,195,134, 13,195,208,161, 67, 97,177, 88,144,156,156, 44, 20, 20, 20,236,239,208, -161, 3, 91,248,206, 16,113,248,211, 32, 62,136,202,206,206,158,226, 35,140,170, 64,249,157, 16,146,147,149,149,149,225, 45,134, -188,191,123,185, 76,222,226,173,165,183, 3,229, 45,158, 2,136, 50,223,240,123,159, 95, 88, 69, 96,121, 34,214,211, 95, 3, 41, - 73,146,218,160, 5, 18, 90, 90, 80, 81, 81,209, 74,113,175, 42, 42, 42,170, 8, 42, 79,199,173,126,182,219,237,104,216,176, 33, - 42, 42, 42, 90,133,169,132, 81,187,118,109, 56, 28, 14, 44, 88,176, 64, 21, 86, 10, 28, 14, 71,168, 76,174,221,187,119,111, 62, - 63, 63, 31,167, 79,159,134,219,237,198,246,237,219, 33,138, 34,172, 86, 43,108, 54, 27, 86,172, 88, 1,158,231,113,244,232, 81, -232,245,122,180,110,221,154,200,178, 28, 27, 34,104, 61,122,247,238, 13, 66, 8, 86,175, 94,125,156, 82,154,103, 52, 26, 23, 78, -153, 50, 37,206,102,179,185, 71,141, 26,117,252,183,223,126,123, 25,128, 75,175,215, 79,236,209,163, 71,215,117,235,214,125,236, -114,185, 22,135, 91, 80,109, 54, 91,149,180, 44, 41, 41,193,165, 75,151,180, 94,222, 22, 0, 98, 98, 98,106, 2, 56,163, 28, 44, - 47, 47, 71,121,121, 57, 74, 74, 74, 80, 94, 94, 14,171,213,234, 48, 26,141, 58,175,107,254,195,154,136, 27, 95, 96,173, 94,189, -186,138,203, 36,138, 34, 54,108,216,112,153, 3,165,211,233,176,106,213, 42, 77,110,211,215, 95,127, 29,212,185,242,110, 99, 66, -173,193,242, 22, 67, 31,124, 80, 57,195,254,204, 51,207,248,157, 54,244, 94,186,112,223,125,247,145, 80,225, 20, 69, 17,105,111, -114, 0,100,252,250,142, 65,109,215,124, 57,181,184, 66, 10,231,252,249,243, 53, 57, 88, 3, 7, 14,212,204,233, 27,174,125,251, -246,249,229,157, 59,119,110,200,244, 84, 22,180,199,196,196,168,211,130, 0,144,145,145,241,188,217,108,238, 86, 81, 81,113, 79, - 78, 78, 14, 46, 94,188,136,134, 13, 27, 34, 41, 41, 9, 59,119,238, 76,103, 53,134,161,154, 92,172,158, 65, 78,177,102,102,102, -190, 76, 8,201, 81, 28, 41, 95,167,201,223,119, 63,255,163,136, 32,101,122,240,118, 31,241,166, 76, 29, 14, 10,114,173,221, 71, - 80,249, 78, 17,238, 10,233, 96, 41,115,254,222, 13, 87, 32,129,165,101,244, 73, 41,229, 9, 33, 85, 4, 64, 32, 7,203,233,116, -162,184,184, 24,148, 82, 62,146,153, 24, 74, 96, 21, 23, 23,191,240,212, 83, 79,173,156, 49, 99, 70,204, 3, 15, 60,128,239,191, -255, 30,205,155, 55,135,205,102, 67, 66, 66, 2,142, 31, 63, 14,158,231,145,151,151,135,212,212, 84,152, 76, 38,188,246,218,107, - 22,171,213,250, 90, 48, 94, 73,146,122,118,239,222, 29,185,185,185,184,112,225,194,122, 66, 72,227,199, 30,123,236,174,186,117, -235,114,111,191,253,182,237,240,225,195,211, 0, 92, 52,155,205,239,125,244,209, 71,253,218,181,107,103, 26, 53,106, 20, 37,132, - 44,163,148,202, 90,227, 87, 86, 86,118,153,184, 82,190,107, 28, 69,136,132, 16, 74, 8, 81,231, 64, 20,241,171,188, 74, 74, 74, - 96,179,217,168,211,233,228, 42, 47,161, 34,107, 30,110,108, 40,157,247,240,225,195, 47,155, 46,147, 36, 9,107,214,172,193,208, -161, 67,161,211,233, 32, 73,146, 50,213, 30,170, 44, 65, 20, 69,140, 24, 49, 66, 21, 4, 95,125,245,149, 95,113,165,184, 82, 90, - 57,121,158,199,211, 79, 63, 13, 81, 20, 49,103,206, 28, 60,251,236,179,224, 56, 14,211,167, 79, 7,207,243,152, 56,113,162,191, -233,135,160,156,162, 40,226,104, 86,229,123,253,191, 91, 80, 52,167,242, 38,156,152, 26, 53, 42,207, 11, 49, 45,232,143,211,159, -115, 37, 8, 2,122,246,236, 9, 81, 20, 53, 9, 43,127,225, 60,112,224,128,250,185, 83,167, 78,232,218,181, 43, 68, 81, 68,191, -126,253, 84, 94,173, 79,233,144,101, 25,243,231,207, 87,167, 5, 61,121,213,121,252,248,241,247,248, 59,191, 69,139, 22,172,194, - 48,252, 17, 14,150, 45, 43, 43,107,127, 86, 86,150, 95,135,202,215, 73, 10,230, 52,121, 9,171, 93,240, 76, 13,102,102,102,190, -140,202,181, 91,187, 52, 92,171,243,157, 34,244,119,190,175,131,245,122,160,209, 98, 48,129,165,172, 75, 8, 5,163,209,184,191, -168,168,168, 83, 84, 84,148,218,241,251, 19, 39, 80,170,230, 0, 0, 32, 0, 73, 68, 65, 84, 87, 22,139, 5, 60,207,227,252,249, -243, 48, 26,141,251, 35,153,137,161,166, 8, 79,157, 58,181,171,110,221,186,143,252,245,175,127, 29,111,183,219, 91, 10,130, 32, -217,108, 54,221,215, 95,127, 77,214,172, 89,131, 90,181,106,225,153,103,158,161, 22,139,197, 65, 8,177,139,162,120,188,172,172, -108,222,241,227,199,131, 58, 77,141, 27, 55,190,213,100, 50, 97,235,214,173, 0,176, 3,192,195, 79, 60,241, 4,231,116, 58, 49, -119,238,220,115, 0,182,198,198,198,126,188,124,249,242, 14,173, 91,183,214,173, 93,187,214,178,115,231,206,117, 90,197,149,178, -222,202, 59, 13,189,211,184,164,164, 68, 83,250,112, 28,247, 63, 74,233,200,242,242,242, 18,131,193,160, 47, 41, 41,113,120, 59, -140, 22,139, 5,101,101,101,144,101, 89, 56,119,238,220, 41, 0,205, 56,142,251, 31,107, 30,110, 14,129,181,106,213,170,128,110, -147,226,110, 41, 3,170, 53,107,214,104,114,197, 86,174, 92,121,153, 43,230,235, 10,105,157, 38,163,148, 86, 89,115, 5, 64, 29, - 0,114, 28,135,204,204, 76,232,245,122,188,245,214, 91,200,204,204, 84, 93,172,162,162, 34,162,133,179,209, 4,155,167,141,133, -122,173,195,110,175, 12, 31,199,105, 22, 89,222,156,190, 47,239,184,135,217, 1, 85,225,136, 4, 39,128, 85,131, 6, 13, 26, 20, - 23, 23,135,209,163, 71,195,104, 52, 98,200,144, 33,168,168,168, 24, 6, 0,217,217,217,152, 48, 97, 2, 0, 96,210,164, 73,152, - 60,121, 50,202,203,203,109,172,198, 48, 84,147,131,245,122,144, 83,226,188,215, 84,133,193,155,227,125,190,194,225, 43,138, 60, -142,216,230, 80, 92,254,174, 13, 4, 65, 81,142,193, 42,116, 40,247, 74, 25, 81,106,112, 87, 54,110,220,184,177,253,189,247,222, - 43,120,119,252,190, 66,203, 51,223,143,163, 71,143,186,202,202,202, 54,106, 25,129, 69,202,193,242,136,172, 53, 0,212,222, 35, - 33, 33, 97,137,197, 98, 25,152,148,148, 36,218,237,118, 92,186,116,233,232,145, 35, 71, 90,135, 83,120, 76, 38,147, 30, 0, 46, - 94,188, 8, 0, 23, 1, 52,185,245,214, 91,145,155,155,139,223,126,251, 45, 7, 64,191,201,147, 39,119,236,220,185,179,184,108, -217, 50,235,147, 79, 62,249,169,195,225,152,165, 53, 78,254, 28,193,178,178, 50, 92,186,116, 9,229,229,229,154,167, 8, 9, 33, -219, 40,165,152, 50,101, 74,201,228,201,147, 27,148,148,148,148, 93,186,116, 73,246,118,198,202,203,203,137,209,104, 20,150, 46, - 93, 26,173, 92,195,154,135,155, 67, 96, 93,233, 29,111,161, 28, 44,111,183, 74, 17, 90, 58,157, 14,203,151, 47,247, 93, 43, 21, - 82,101, 41,174,213, 51,207, 60, 3,189, 94,143,247,222,123, 79,109,131,252,221,209, 76, 8,241,123,247,155,111, 56, 27,191,108, - 71,193,204, 88,136,162,136,196, 39, 11,171, 76,197,249,171, 42, 90,194,249,143,127,252, 35, 98, 83,132,106, 56, 27, 55, 6, 0, -204,159, 63, 31,195,135, 15,199,214,173, 91, 3, 78, 17,134, 10,103,110,110,238,253,237,218,181,107,228,114,185,246,180,106,213, - 74, 56,123,246, 44,134, 14, 29,138,229,203,151,195,211,145, 33, 51, 51,179,202, 53, 22,139,133, 9, 44,134,136,187, 87, 26, 78, - 43,244, 89, 63, 69,188,167,235,130,188,251,158, 15,175, 99,222,188,133, 0,156,126,254,175,208,143,168,242,253, 15,239,115, 10, - 47,115,176,180, 52,186,193,196,150, 22,129, 69, 8,153, 61,105,210,164,177,221,186,117,139,139,137,137, 65, 65, 65,129, 95, 7, - 43, 38, 38, 6, 14,135, 3, 27, 55,110, 44, 37,132,204, 14, 65,235,114, 58,157, 66, 82, 82, 18,138,138,138, 2,222,221,195,113, - 28, 12, 6, 3, 44, 22, 11, 0,132,187, 57,166,189,180,180,212, 57, 98,196, 8,113,246,236,217,176, 90,173, 97, 53, 48,132, 16, -174,103,207,158, 18, 80,185,150, 9, 64, 89,157, 58,117, 26,233,245,122,228,231,231, 3,192,113, 0,189, 6, 12, 24, 32, 20, 23, - 23,211,177, 99,199,174,119,187,221,175, 80, 74, 67, 13,151,227, 1, 32, 58, 58,250, 12, 0,108,223,190,253, 23,127,235,218, 94, -126,249,229,102,158,206, 43, 30, 1,238,164,242, 18,151,251, 83, 82, 82, 62, 92,180,104,209,232, 30, 61,122,108,111,211,166, 77, -195, 11, 23, 46, 92,178, 88, 44,246,242,242,114, 74, 41, 21,140, 70,163,184,101,203,150,188,188,188,188, 12, 0, 31,158, 58,117, -106, 63,107, 34,110,124, 68, 82, 92,121, 11, 2, 95, 7,203,247, 61, 28, 78, 37,156,227,199,143,199,251,239,191, 15, 74,169, 42, -172, 56,142,195,148, 41, 83, 0, 0,175,188,242, 74,192,237, 99, 2,113, 22,204, 52, 32,229,217,139, 85,142, 1, 0,241,132,239, - 74,166, 8, 39, 77,154, 4, 81, 20,171, 76,225, 9,130,160, 10,170,112,166, 8,213,112, 22, 20, 84,138,192,196, 68, 60,244,208, - 67,232,215,175, 31,238,186,235, 46, 16, 66,170,240,106,157, 34,228, 56,238,157,169, 83,167, 10,122,189, 30,118,187, 29,229,229, -229, 40, 46, 46, 70, 32, 7,203,106,181, 70,177,218,194,240, 7, 96,215, 53,230,189,234,255, 19,180, 52, 18, 87,186, 77,131,239, -211,182,143, 29, 59, 86,146,146,146, 50,102,196,136, 17,203,230,204,153, 99,104,212,168, 17, 14, 30, 60,136, 11, 23, 46,192,225, -112, 64,146, 36,164,164,164,192, 98,177,224,179,207, 62, 43,183, 90,173, 99, 10, 10, 10, 74,130,113, 18, 66,222, 24, 48, 96,192, -164,137, 19, 39,242, 45, 90,180,192,133, 11, 23, 96,177, 88,212,198,133, 16,130,152,152, 24, 24,141, 70,236,219,183, 15, 59,118, -236,144, 9, 33,111, 4,227,244,211,168,157, 60,126,252,184,123,214,172, 89,168,168,168,176,185, 92,174, 83, 26, 68,149, 55,167, -193,179,233, 31,202,202,202, 0,192, 86,191,126,253, 20, 79,154, 0,192,175,141, 27, 55,126,181, 81,163, 70,228,227,143, 63,166, -110,183,123,157, 63,113,229, 27, 78, 74,169,205,115, 92,167,184, 99,190,107,218, 74, 74, 74, 32,203,178,206,251,252, 80,113,119, - 58,157, 47,137,162,216,109,204,152, 49, 93, 6, 13, 26,244,211,200,145, 35, 43, 98, 99, 99, 19,120,158,183, 30, 61,122,244,183, -229,203,151, 71, 29, 57,114, 36, 3,192, 49,167,211,249,146, 22,206, 8,216,199,140,179, 26, 57,149,186, 30,108,223,166, 80,131, -168, 64,156,163, 70,141, 82, 5,150,242, 82,156, 43, 95, 78, 63,187,177, 95, 22,119,101, 90,236,197, 23, 95,172, 18,190, 87, 95, -125, 53, 96,216,108, 54, 27,209,194,121, 97,126,237,170, 11,218, 3,136, 42,173,225,124,253,245,215,175,216,193, 10, 22,206,222, -189,123,195, 98,177, 64, 16, 4,172, 93,187, 54,216, 34,119, 45,101,169, 98,245,234,213,208,235,245,248,236,179,207, 92,201,201, -201, 66,108,108,108, 64, 7,171,162,162, 34,138,213, 35,198, 89, 29,156, 55, 27,130, 10, 44,151,203,133,122,245,234,169,226,137, -227, 56,101, 95, 25,240, 60, 15,142,227,192,243, 60,194,121,110,113, 65, 65,193,250,148,148,148, 17, 67,134, 12,249,207,232,209, -163,205,205,154, 53, 19, 83, 83, 83, 97,181, 90,145,159,159,143,252,252,124,215,134, 13, 27, 74,173, 86,235, 35, 5, 5, 5,235, - 67,241,157, 62,125,250,221,148,148,148, 85, 15, 63,252,240,155,109,218,180, 25, 56,126,252,120, 52,108,216, 16,151, 46, 93, 66, - 92, 92, 28,146,146,146,112,252,248,113,172, 88,177, 2,151, 46, 93,250, 6,192,196,130,130,130,188,112, 18,201, 96, 48,204,152, - 58,117,106,247,228,228,228,102,197,197,197,167, 36, 73,122, 57,220,132,118, 56, 28, 50, 0,190,168,168, 8, 0,172, 6,131,129, - 0,192,145, 35, 71, 0,224,215,250,245,235,199, 0,192,250,245,235, 9,128,157, 97,210,199, 3,192,128, 1, 3,126,243,109,252, -189,156, 43,205, 40, 44, 44, 44,107,220,184,113, 87,171,213,154,181,106,213,170,209, 1,238, 22,251,208, 96, 48, 76, 56,114,228, - 72, 25,171, 70, 55, 73, 99, 32, 8,208,233,116, 87, 36,174,130,113,126,246,217,103,126,157, 43, 95, 78,173,237,136,175, 8, 84, -246,187, 10, 54, 80, 12,209, 81,248,141,115, 32, 78, 45,225, 84, 56,179,179,179, 33,138, 34,250,246,237, 91,101, 81,251,149, 56, - 88, 10,167,242, 4, 12,179,217, 12, 89,150, 49,112,224,192,171,226,165,148, 62,157,147,147,227,162,148, 26, 57,142,251,123, 65, - 65,193,126,197, 85,244,231, 96, 49, 48, 48, 92,165,192, 18, 69,177, 80,235,179, 5, 21,232,116,186, 66,141, 34,107, 93,227,198, -141,155, 47, 88,176,224, 73,179,217,220,203,106,181,166,121,132,204, 62,139,197,242,157, 32, 8,255, 44, 40, 40, 40,213,250,191, - 30,193, 52, 60, 37, 37,165,203,195, 15, 63,252,230, 29,119,220,209,233,177,199, 30,131, 32, 8,248,244,211, 79,113,250,244,233, -157, 30, 97,181,253, 74, 18,233,216,177, 99, 37, 8,126,251,104,168, 6,172, 76, 20,197,121,221,186,117,123,108,219,182,109, 31, - 80, 74,207,232,245,250,127,247,236,217,115,212,247,223,127,255, 31, 74,233, 73, 81, 20, 63,232,218,181,235,152,157, 59,119,126, - 76, 41, 61, 17, 38,191, 45, 88,195,239,207,185, 10,133, 35, 71,142,148, 2,120,178,118,237,218,239,243, 60,223, 85,150,229,182, - 0,192,243,252,143,178, 44,111, 61,115,230,204, 65, 86,125,110, 30,184,221,110, 36, 38, 38, 86, 25, 52, 41, 83,111, 87, 42,174, -220,110, 55,146,146,146,192,113,156,202,171,108, 16, 26,100, 90,144, 4, 19, 24,110,183, 27,209,209,209, 42,167, 50,232, 11, 81, - 63,168,221,110, 15,186, 6, 43, 92, 78,132, 88,219,116,133,156,208,194,105,183,219, 35, 22, 78, 0,200,205,205, 45, 6,240,176, -242,189,125,251,246,171, 14, 30, 60, 56, 40,144,131,197,192,192,112,149, 2,107,199,142, 29, 13,170,243,143, 61, 29,120,150,231, - 21, 17,120, 4, 84,239,148,148,148,140,109,219,182, 41, 83, 87, 83, 11, 10, 10,114,254,232,132,118, 58,157,147, 9, 33,111, 83, - 74,157, 0, 80, 81, 81,241, 10, 33,100,146,242,176,100,167,211, 57,145, 16,242,250,213, 60, 60,153, 82,106,140,116,184, 61, 66, -138,137,169,155, 24,162, 40, 22, 14, 24, 48, 32, 49,220,235,130, 13,168, 68, 81, 44, 76, 79, 79, 15,155, 51, 42, 42,234,124, 16, -206,179,189,122,245,170,123, 5,225,188, 88,167, 78, 29,191,119,194, 72,146, 84,216,189,123,247,136,134,243, 74, 57,131,165,103, -117,132, 51,136,224,186, 63, 37, 37,101, 91, 66, 66, 66, 35,155,205, 38, 89,173, 86,201,219, 5, 52, 24, 12, 69,172,214, 48, 48, - 92,133,192,186,145,225, 17, 84, 57,215, 91,184, 20,113,229,245,221, 21,236, 59, 3,195,181, 64,117, 12,166,170,131,115,235,214, -173, 77, 35,205,185,125,251,246, 6,127, 86,206, 16,109,232, 29,172,102, 48, 48, 92, 29, 56,150, 4, 12, 12, 12, 12, 12, 12, 12, - 12,145, 5, 1,144,230,239,135,112,238, 14, 32,132,164,133,251,199,161,248, 25, 39,227,100,156,140,147,113, 50, 78,198,121,243, -113,134,226,190, 89,238, 78, 36, 90,247, 74,185, 34,114,118, 11, 43,227,100,156,140,147,113, 50, 78,198,201, 56,255,132, 96, 83, -132, 12, 12, 12, 12, 12, 12, 12, 12, 76, 96, 49, 48, 48, 48, 48, 48, 48, 48, 48,129,197,192,192,192,192,192,192,192,192, 4, 22, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 19, 88, 12, 12, 12, 12, 12, 12, 12, 12,215, 13,170,245, 46, 66, 6, 6, 6, 6, 6, 6, 6, -134, 63, 35, 84, 7,139, 16,178,137, 16,178,137, 37, 9, 3, 3, 3, 3, 3, 3,195,181,196,205,168, 65, 4, 79,196, 40,174,226, - 97,198, 12, 12, 12, 12, 12, 12, 12, 12, 87, 40,174,110, 74, 13, 66, 40,165, 32,132, 80, 74, 41, 97,217,204,192,192,192,192,192, -192,112,173, 5,214,205,168, 65,216, 34,119, 6, 6, 6, 6, 6, 6, 6,134,106, 18, 88,175,179, 53, 88, 12, 12, 12, 12, 12, 12, - 12,127, 0,110, 74, 13,162,222, 69, 72, 8,233, 1, 0,148, 82, 38,178, 24, 24, 24, 24, 24, 24, 24,174,157, 24,185, 9, 53, 8, -219,166,129,129,129,129,129,129,129,129, 33,194,168,214, 53, 88,132,144, 52,198,201, 56, 25, 39,227,100,156,140,147,113, 50, 78, - 38,176, 24, 24, 24, 24, 24, 24, 24, 24, 24,152,192, 98, 96, 96, 96, 96, 96, 96, 96, 96, 2,139,129,129,129,129,129,129,129,129, - 9, 44, 6, 6, 6, 6, 6, 6, 6, 6, 6, 38,176, 24, 24, 24, 24, 24, 24, 24, 24,254, 32, 16, 0,126,239, 4,160,148,238,211, - 76,114, 5,119, 19,132,226,103,156,140,147,113, 50, 78,198,201, 56, 25,231,205,199, 25,138, 59, 28,253,113, 93, 11, 44, 45,251, - 96, 17,207,131,130,194, 38, 39, 36, 45,210, 9,197, 56, 25, 39,227,100,156,140,179,122, 56,175,164,173,247,199, 73, 8, 33, 94, -131,120, 0,160,158,142,147, 94, 79,225,188, 81,242,168, 58,210,179,186,243,136, 1, 16, 66, 36, 32,135,202,105, 68, 66, 8,113, - 3,112,211, 8,236, 76,234,201, 88, 46, 82,124, 12,213,160,188, 43,243,136,252, 62,160, 96,249,196,192,112, 19,215,247,136,181, -245, 94,109, 7,175,112, 2,144, 1,200,132, 16, 92, 77, 91, 82, 29,125,146, 55, 39,128,106,139,251,149,182,163,213,145,158,213, -153, 71, 12, 33, 4, 22, 33,132, 52,111,222, 92,236,218,181,235, 15,177,177,177, 77,188,127, 27, 60,120, 48, 0, 64,150,101,249, -155,111,190,137, 14,231,207,122,246,236, 41, 8,130,240, 85, 70, 70, 70, 15, 95, 62, 79, 47, 46,231,228,228, 68, 95,207, 9, 54, -108,216,176, 82,135,195,193,251, 30,151, 36, 73,254,236,179,207,162,111,134, 66, 65, 8, 17,154, 52,105, 50,204,104, 52, 26,148, - 99,109,219,182,245,254,157,238,217,179,103,161, 22,174,215, 95,127,157, 91,180,104,209, 86,163,209,104,228, 56, 14,130, 32, 64, - 16, 4,148,149,149, 21, 13, 31, 62,188, 31, 0, 44, 89,159,191, 54,202,104, 72,128, 27,112,187, 41,168,155,162,188,162,172,120, - 76,122,227,126,147, 38, 77,114,179,106,122,121, 61, 10, 53, 56,242, 3,215,198,141, 27, 93, 44,245, 52,215, 1,165, 77,186,242, -139,171, 54,180, 3,100,224, 65,207,215, 10, 14, 40, 38, 64, 94, 2,240,217, 57,192, 90,229,228,107,216,185, 41, 29,109,221,186, -117,223, 75, 78, 78, 30, 83, 90, 90, 90,206,243, 60, 8, 33,180,101,203,150,151, 69,135, 16, 2,183,219,125,106,255,254,253, 29, - 66,116,220, 98,253,250,245,167, 39, 38, 38,142, 42, 47, 47, 47, 39,132,128, 16, 66, 9, 33, 72, 75, 75, 83, 57,149,119,183,219, -125,106,223,190,125, 29,174, 85, 56,255,200,184, 43, 92, 90,226,238,205, 89,183,110,221,233,201,201,201,163, 44, 22, 75, 57,199, -113, 42,103,203,150, 45,175, 56,156,145,226,100, 8, 67, 96, 53,106,212, 72, 74, 76, 76,220,156,154,154,218,120,193,130, 5,200, -203,203, 67,179,102,205, 32,203, 50,220,110, 55, 40,165, 24, 54,108, 24, 31,110,167, 32,138,226,170, 58,117,234,220,177, 96,193, - 2,228,228,228,224,246,219,111, 7, 33, 4,178, 44, 67,150,101, 60,253,244,211,252, 85, 54, 22, 38, 65, 16,158,214,233,116,119, -186, 92,174,219, 60,194,231, 96, 69, 69,197, 22,151,203, 53,155, 82, 90,118,181, 9,230,112, 56,248,175,191,254,218,159,240, 10, - 26,246, 78,157, 58, 29,114,185, 92,117,195,249, 47,157, 78,119,106,219,182,109, 77, 3,253,222,165, 75,151, 67, 14,135, 35, 44, -206,168,168,168, 83, 91,183,110,109, 26, 76, 92, 53,110,220,248,190,150, 45, 91,234, 63,253,244, 83,156, 62,125, 26, 6,131, 1, -110,183, 27,178, 44,195,233,116,226,222,123,239, 37,225,252,167,209,104, 52,110,219,182,173, 81,116,116, 52,202,202,202,112,225, -194, 5, 60,240,192, 3,106,103, 31,165, 55, 36,204,204,154,216,216,233,116,225,183, 18, 43,206, 95,176, 98,222,220,185, 55,124, -229,234,210,165,203, 6,187,221, 30,175,124, 23, 69,241,183,157, 59,119,246,190, 90, 94,171,213,122,140, 82, 26,171,177,111, 7, - 0,240, 60,127, 17, 64,253, 16,245, 39, 21,192, 64, 65, 16, 26, 9,130,208,148, 82, 90,223,229,114, 37,121,202,226,121,158,231, -127,117, 56, 28,135,236,118,251, 81, 0,223, 80, 74, 79,220,164,226,170, 62, 0, 87, 74, 74, 74,129,103, 52,127,213,156, 50,240, - 32,165,180, 6, 0, 92,186,116,169,198,201,147, 39,107,125,253,245,215, 45,167, 76,153,210, 91, 87, 81, 49,205, 14, 28, 8,118, -125,211,166, 77,119,139,162,152,234,213, 14,157,200,203,203,139, 68,103,199,213,169, 83,231,189,187,238,186,235,225,121,243,230, - 25,119,238,220,105,108,213,170, 21, 42, 59, 91,168,237, 61,165, 84, 45, 91,157, 59,119, 1,249,221,221,190, 44,249, 0, 8, 41, - 41, 41, 51, 7, 12, 24, 48, 98,238,220,185,198,125,251,246, 25,155, 52,105,162,114,122,167,167,167, 83, 71,251,246, 29, 64, 0, - 66, 61,211, 84,145, 10,103,117,196,189, 69,139, 22,248,249,231,159,131,198, 61, 61, 61,125,196,188,121,243,140,123,247,238, 53, -222,122,235,173,126,227,174,196,191, 67,135,219,131, 22, 71,239,244,156, 63,127,190, 49, 55, 55,215,216,188,121,115,143, 72,131, - 26,198, 48,226, 94, 29,156, 12, 90, 4, 22, 33,132,235,217,179,231, 55,245,235,215,111,177, 96,193, 2,194,243, 60,114,115,115, - 81, 92, 92,140, 58,117,234,192,108, 54, 67,175,215,135,255, 71,130,240,149, 71, 92,113, 60,207, 99,195,189,247,194, 10, 96,152, -221, 14, 73,146,112,228,200,145,171,109, 20,187, 69, 71, 71, 47, 88,178,100, 73,108,151, 46, 93,184,147, 39, 79, 34, 45, 45, 13, - 69, 69, 69,237, 55,110,220,216,118,236,216,177,163, 8, 33,143, 81, 74,191,143,196,200,246,155,111,190,129,201,100,130,209,104, -132,201,100,130,195,225, 8,122,157,219,237,174,181, 97,195, 6, 68, 71, 71, 67,150,101, 80, 74,171, 84, 96,223,138,231,114,185, -208,183,111,223, 90, 65, 45, 9,151,171,214,230,205,155, 85, 1,228,205, 37,203, 50,116, 58, 29, 56,142, 83, 28, 71, 56, 28, 14, -244,232,209,163, 86,176, 17, 93,147, 38, 77,134, 41,226,138,231,121, 44, 91,182, 12,201,201,201, 72, 74, 74,130,217,108,134,209, -104,188,146,188, 71,116,116, 52,190,250,234, 43,196,197,197,161, 65,131, 6, 16,132,223,139,158,236,114,163,220,106, 71,198, 45, -139, 48,122,109, 39,196,155, 37,184, 92,242, 13, 95,185,236,118,123,252,158, 61,123,212,239,189,123,247, 54,183,107,215,238,167, - 64,231,107, 21, 96,178, 44, 39,108,217,178, 5, 6,131, 65, 91,231, 46,203,232,216,177, 99, 66,136,114,157,158,144,144,176,164, - 75,151, 46, 98, 98, 98, 34,111, 48, 24, 96, 50,153, 16, 27, 27, 11,189, 94, 15,183,219, 93,223,229,114,213,183,217,108,119,158, - 63,127, 94,254,226,139, 47,222, 32,132, 60, 68, 41, 93,115,147,137,171, 91, 82, 82, 82,254, 1, 0, 5, 5, 5, 47, 24, 12,134, -227,145, 18, 89, 10,106,212,168,129, 26, 53,106, 32, 45, 45, 13, 67,135, 14,141,109,219,182,237,223, 27,216,108,143,231, 3,246, -128, 74,128,227,234,238,223,191, 63,193,107,192,198,223,122,235,173,231,252, 25, 94,158, 54,224,212,209,163, 71, 59,132,136, 43, - 87,171, 86,173,119, 6, 12, 24,112,255,188,121,243,162, 1,224,223,255,254, 55, 6, 14, 28,136, 90,181,106,193, 96, 48, 64,146, - 36, 72,146, 4, 81, 20,213,119,175, 78,218,175,150,175, 85,171,214,180,129, 3, 7,222, 55,119,238,220,104, 0,248,232,163,143, -144,158,158,142,132,132, 4, 68, 71, 71, 35, 42, 42, 10, 58,157,174, 10,183, 23, 39,213, 18,206,233,157, 59,163, 55, 0,241,223, -255, 70,108,108, 44, 82, 71,142,132, 94,146,192,239,218,133,152,152, 24,111, 78,205,113,207,205,205,197,185,115,231,252,198,157, -231,121, 68, 69, 69, 85,218,143, 21, 21,129, 92, 33, 53,238, 10,231,162, 69,139,212,184,155,205,102, 63,113,231, 66,185,139,124, -173, 90,181,166,165,167,167,223, 55,127,254,124,149,179, 79,159, 62,136,143,143, 71,116,116, 52, 36, 73,130, 78,167,243,151, 71, -215,132,147, 65,163,192, 82,214, 70,153, 76,166,206, 31,124,240, 1,120,158, 87, 59,200,168,168, 40,181,112,232,116,186,176,109, -232,140,140,140, 30, 11, 22, 44, 80, 57,109, 62,231, 92,137,104,243,226,239,117,231,157,119, 46, 90,181,106, 85,148, 32, 8,184, -116,233, 18, 54,111,222,140,216,216, 88, 24, 12, 6, 12, 27, 54,140,235,213,171, 87,124,175, 94,189,150, 16, 66, 70, 83, 74,191, -187,154, 68,163,148,170, 98,195,100, 50,193,100, 50,105,117,114,176,114,229, 74, 8,130, 80,165,224,122, 87,100,229,123, 98, 98, -162, 86, 71, 10,219,182,109, 3,199,113,234,245,162, 40, 98,213,170, 85,120,254,249,231,113,238,220, 57,245, 55, 13,225, 36, 70, -163,209,160,136, 43,143, 3,168, 52, 54, 68, 16, 4,226, 57, 78,195, 89,100, 42, 8, 2, 46, 94,188,136,154, 53,107, 34, 46, 46, - 14, 81, 81, 81, 85, 42,172,211,229, 70, 65, 81, 41,134,127,219, 6,101,214, 18,148,148, 18, 56,156,206,155,174,178,125,240,193, - 7,146, 44,203,138,224, 86, 93, 65,143, 43,133,199, 31,127, 60, 94, 43,151,193, 96,192,154, 53,107,212,178,164,116, 2, 74,163, -232,125,188,110,221,186, 90,202,209,171,203,151, 47,143, 90,186,116,169, 58,216,209,233,116, 48,153, 76,136,137,137, 65,108,108, - 44,226,227,227,145,144,144,128,182,109,219,242,143, 62,250, 40,223,173, 91,183, 87, 1,220, 52, 2,139, 16, 18, 99, 48, 24, 38, - 46, 95,190, 92, 2,128,190,125,251, 78,180, 90,173,207, 2, 40,185, 90,145,197, 3,203, 8, 33, 15,122,242, 78,223,175, 95, 63, -221, 63,255,249, 79,220,118,219,109, 24, 55,110, 92,252,187,211,166, 13, 6,176, 34, 88,155,227,141, 89,179,102,197, 42,101, 72, - 25,172, 41,175,178,178, 50, 60,247,220,115, 33,219,100, 0, 92, 74, 74,202, 95,254,245,175,127,153,149,227,241,241,241,151,181, - 69,190,239,129, 92, 82, 47, 87,232,145,249,243,231,171,156, 9, 9, 9,106, 27,167,188,126, 61,248, 19, 54, 44,158, 1, 83,124, - 45,140,124, 97,106,216,225,236, 8,160, 35,199,193,221,186, 53, 12, 6, 3, 18,140, 70, 64,146,224,246,136, 43, 45,225,244,229, -228,121, 94,141, 39,165, 20, 21, 21, 21, 40, 45, 45,133, 44,203,176,219,237,104,223,190, 61, 8, 33,184,229,150, 91, 2,185, 66, -151,197,189,102,205,154,151,197,221,187,157,246, 30,104, 6,226, 76, 73, 73,121,228,131, 15, 62,240,155,158,130, 32, 64,146, 36, - 44, 90,180, 72,147,147, 29, 14,103,152,249,206,160,197,193, 82, 70, 38,121,121,121,216,189,123, 55, 68, 81, 68, 82, 82, 18, 58, -118,236,168, 88,211, 16, 4, 1, 28,199, 97,240,224,193,229,190, 23, 75,146, 84,248,217,103,159, 53,240, 52, 10,202, 29, 6, 28, - 0,172, 95,191, 30,171,210,211, 97, 3,208, 48, 43, 11,173, 50, 50,112, 72,167, 3, 15, 32,169,168, 8, 60,207,251,229,244, 94, -155,229,231, 78, 8,179,201,100,154,151,147,147, 19, 37,203, 50,138,138,138, 0, 0, 25, 25, 25,224,121, 30,191,252,242, 11, 38, - 79,158,140, 47,190,248, 2,171, 87,175,214, 55,107,214,108, 30, 33,164, 29,165,212,226,197, 95,133,243,158,123,238,201,115,187, -221,117,252, 37,152, 36, 73, 0,128,232,232,104,232,245,122,152,205,102,191,194,197,223,221, 21,178, 44, 99,200,144, 33, 32,132, -128,231,121,117, 61,146,119,101, 83, 62,239,221,187, 87, 19,167,219,237, 70,183,110,221, 0, 0, 38,147, 9,102,179, 25,223,125, -247,187,126,108,215,174, 29,236,118, 59, 18, 19, 19,177,111,223, 62, 77,156,103,206,156,193,146, 37, 75, 32, 73, 18,226,226,226, - 32,138,162,180,126,253,250,215,140, 70, 99, 12,207,243,136,139,139, 67, 70, 70,198, 44,101,253,156,219,237,150, 87,173, 90, 21, - 29,136, 83, 16, 4, 88,173, 86, 85, 96,197,197,197, 85,117,226,220, 46,156, 58,119, 17,105,173,108,232,221, 67, 66,206,234, 50, -236,216,224, 14, 25,206,171,197,181,224, 60,113,226, 4,142, 28, 57,162, 78,175, 42,211,225,223,175, 95, 18,119, 52,111,151, 73, -233, 56, 41,165,208,185, 46,161, 75, 43,178, 19,110,124,182,125, 63,125, 39, 84, 56, 5, 65,128, 44,203, 88,189,122, 53,142, 31, - 63,142,245,235,215,163,162,162, 2, 53,107,214, 68,108,108, 44, 58,119,238,140, 71, 30,121,196,175,192,242,229,148,101,121, 9, - 33,164,245,200,145, 35,201, 55,223,124,131,162,162, 34,148,150,150,194,225,112,192,225,112, 64, 20, 69,117, 64,145,146,146, 2, -142,227,104, 69, 69,197,146,155, 33,143, 60,237,136, 0, 96,194,251,239,191,159,208,190,125,123, 0,192,251,239,191,159,240,200, - 35,143, 76, 0,240, 42, 0,215,149,132,211, 0,212, 65,229,197,171, 81,249,194,235, 86, 43,121,115,229,202, 33, 0, 70,125,249, -229,151, 24, 49, 98, 4,222,153, 54,173,149,175,192,242,230,116,187,221,216,181,107, 23,118,238,220, 9,151,203, 5, 89,150,213, -119,239,207,202,123, 32, 49,232, 19, 78, 98,177, 88, 42,118,238,220,105, 94,184,112, 33,226,227,227,209,160, 65, 3,213,101,242, - 21, 3,202, 43, 84,220, 45, 22, 75,197,190,125,251,204, 75,150, 44, 65,124,124, 60,234,215,175, 15,163,209,168,114, 74,146,132, - 61,223,173,194, 19,163,238, 65,225,209,159, 48,235,217, 7, 52,135,115,122,231,206,232, 12,192, 52,111, 30,202,154, 55, 71,195, - 62,125, 32, 72, 18,108, 63,254, 88, 25,190,222,189, 65,117, 58,136,219,183,107,230,220,181,107, 23, 40,165, 72, 77, 77,133,213, -106, 69, 76, 76,140, 26,214,117,235,214,225,238,187,239,198,226,197,139,209,185,115,103, 77,113,223,187,119,175, 26,247,122,245, -234, 93, 22,119, 69,196, 52,108,216, 16, 23, 47, 94, 68,163, 70,141,130,114,150,149,149, 85,228,230,230,154, 23, 47, 94,140,248, -248,120,212,173, 91, 23, 70,163,177,138, 19,246,250,235,175, 87,225,104,221,186,245, 85,115,134,155,239,215, 0,183, 3,240,118, - 30,236, 0,116, 94,239,133, 0,118,249, 57, 79, 57, 46, 2,104,227,249, 77, 6, 80, 10, 32,214, 15, 95, 32,158, 34,143,195,154, -232,115,190,239,255, 84, 21, 88,132, 16,165, 54,246, 4,240, 61, 0, 52,107,214, 12,197,197,197,136,138,138, 66,199,142, 29, 81, - 88, 88,168, 90,135,110,183, 27,183,221,118, 27,222,126,251,109,112, 28, 7,167,211, 9, 74, 41,120,158,199,189,247,222,235,207, -122,113, 3,192, 29,119,220,129,223, 60, 7, 90,101,100,160,110,221,186, 56,233,229,196,164,165,165, 97,210,164, 73,234,180, 22, -165, 20, 86,171, 21, 15, 62,248, 32, 31,196, 29,121,234,163,143, 62,138,145, 36, 9,103,206,156,129, 50,210,148, 36, 9,199,142, - 29,195,204,153, 51,241,200, 35,143,224,248,241,227,168, 95,191, 62, 38, 78,156,104,158, 56,113,226, 83, 0,178,130, 52,150,201, -159,127,254,185, 90,168,236,118, 59, 74, 75, 75, 81, 90, 90,138,197,139, 23, 3, 64, 21, 7, 75,235,180,153,219,237,198,234,213, -171,253,142, 14,125, 71, 12, 90, 71, 11,110,183, 27, 59,119,238, 84,197,153, 32, 8,170,251, 68, 8,193,254,253,251,193,113,156, - 42, 12, 67,245, 61, 74,220,146,147,147, 97, 48, 24, 32,138,162,244,195, 15, 63, 76,174, 85,171,150,105,212,168, 81, 40, 45, 45, - 69, 74, 74, 10,250,247,239, 15,183,219, 13,135,195, 17,114,237,156, 32, 8, 32,132,160,102,205,154,136,137,137,241, 51,213, 41, - 99,208,144,139, 0, 42,195,152, 49,192,132,255,204,186, 57, 70, 48, 78,167, 19, 21, 21, 21, 85,196,213,246, 77,159,198,237,248, -254,155,184,220, 93,155, 42, 51,249,208,221,191,119,199, 48,180,108,251,240,111,169,173,110, 37, 63,236,205, 11, 62,157,205,243, - 60,198,143, 31,143,204,204, 76, 12, 31, 62, 28,235,215,175,199, 75, 47,189,132, 71, 30,121, 68,235, 8,217, 59,156,255,121,248, -225,135,255,178,124,249,242, 91,199,143, 31,207, 41,117,210,104, 52,130, 16, 2,155,205, 6,171,213,138,138,138, 10, 28, 60,120, -208,253,232,163,143, 30,182,219,237,255,185,137, 6,155,143, 63,247,220,115,205, 31,122,232, 33,245,192, 67, 15, 61,132,253,251, -247, 55,159, 49, 99,198,227,253,250,245,123, 63, 92, 23,203, 0,212,173, 81,171,214, 12, 0, 48,156, 61,251,156, 21, 56, 5, 0, -111, 2,233, 50,112,247,218,181,107, 1, 0,245,235,215,135, 27,104, 78,128,143,120, 96,153, 11,248,214,159,131,229,114,185, 80, - 81, 81,113,153,152,242,247, 30, 42,156,148, 82, 74, 8,113,243, 60,143,180,180, 52,164,167,167, 67,167,211,193,108, 54,171,237, -188,111,155, 20,168,163,245,109,146,120,158, 71,147, 38, 77,208,167, 79, 31, 72,146, 4,147,201,164, 14, 72, 21,135,181,117,183, -190, 88,182,248, 29, 60,156,222, 18,255,215, 61, 25,159,237, 45,210, 20,206, 59, 57, 14, 93, 37, 9,150,102,205, 16, 29, 29, 13, -206, 96, 0,241,154,202,162, 70, 35, 56, 31,135, 60, 88, 56,211,210,210,112,246,236, 89,228,231,231, 35, 63, 63, 31, 28,199,161, -107,215,174,208,233,116, 16, 4, 1,121,121,121,120,227,141, 55, 96,183,219, 67,113, 82, 0,110,142,227,208,164, 73, 19,244,238, -221, 27, 58,157, 14, 70,163,241,178,169, 65, 81, 20, 81, 90, 90,138,198,141, 27, 99,229,202,149,184,243,206, 59, 67,114, 54,111, -222, 28, 61,123,246, 84,103, 20,148,165, 58, 74,122,122,196,157,154, 14,222, 55, 37,105,225, 92,254,131, 13,175,255,247, 44,202, -237,133,248,173,220, 93,101, 6,184, 94, 77, 61, 78, 44, 25, 88,221,238,177,170, 65, 40,165,155, 2,156,150, 72, 8,201,241, 42, - 27, 25,132,144, 28,239,247, 64,231,121, 62,118,159, 48, 97, 66,135,236,236,236, 41, 93,186,116, 89,182,109,219,182,165,129,248, - 2,241, 76,152, 48,161,101,118,118,246, 20,239,243,253,252,207,229, 14, 86,101, 57, 38, 20, 94,187,187,215,169, 83, 71,157,119, - 54,155,205, 85, 58,105,151,203,133,255,252,231, 63, 72, 74, 74, 82,215,232, 36, 39, 39, 7,172, 36,138,219,113,159,103,173,210, - 65, 73,194, 73, 0, 45, 60, 13,129,203,229,130,195,225,192,138, 21, 43, 16, 29, 29,173, 86,116,179,217, 28, 52, 99,116, 58, 93, -247, 59,238,184,131, 43, 45, 45, 85, 69,137, 40,138, 56,118,236, 24,222,125,247, 93, 60,244,208, 67,104,220,184, 49,100, 89, 70, - 73, 73, 9,122,246,236, 41, 24,141,198,238,193, 4,150,226, 76,127,254,249,231,234,212,165,210,120, 41, 80, 4,150,214,117, 48, -138, 24, 26, 50,100, 8,120,158,247,235, 90,121, 55,104, 91,182,108,209,204,217,185,115,103, 24,141, 70, 53,189,190,253,246,247, -246,185, 99,199,142,160,148, 34, 49, 49, 17,223,127,255,125,200, 70,183,109,219,182,112,187,221, 72, 74, 74,130, 36, 73,100,253, -250,245,175,121,196, 21, 17, 69, 17, 63,254,248, 35,246,239,223,143,196,196, 68,152, 76, 38, 77, 83,187,165,165,165, 69, 35, 70, -140,112, 41,194, 15, 0, 74, 74, 74,206,252,222,185,219,139,239, 29,240,153, 79, 88, 28,197, 55, 67,175,237,112, 56, 80, 94, 94, -142,195,135, 15,195,106,181, 66,150,101, 28, 61,178, 79, 55,229,141,113,228,245,231,187, 2, 0, 94,155,125, 6,214,173,181,213, -107,118,124,249, 87,115,175, 7, 22,125, 12, 32, 53, 24,183,213,106,133,195,225, 64,106,106, 42,114,115,115, 81, 86, 86,134, 62, -125,250, 92,230,144,106,116,117,236,132,144,222,131, 7, 15,222, 50,125,250,244,134, 45, 90,180, 32,101,101,101, 40, 43, 43, 67, -121,121, 57,148,207,251,246,237,163, 75,151, 46, 61, 94, 94, 94,222,139, 82,106,191, 73,166, 6, 7,246,235,215,175,255,219,111, -191,125,217,111,111,191,253, 54, 14, 28, 56,208,127,237,218,181,249,183,222,122,235, 55, 90, 69, 86, 3, 64,231, 18,197,151, 62, -253,244, 83, 9, 0,122,247,238,253, 82, 3,167,243,249,124,192,222,162, 85,171,251,182,109,219, 86, 67, 25,152,213,168, 81, 3, -148, 82,190,188,188,188,198, 29,119,220,113, 31, 2, 8, 44,167,211, 9,171,213,170,254,191,247, 20,161,247, 98,100,142,227, 96, - 54,155,227,110,189,245, 86,155,103,224, 91,118,240,224, 65,127,107,240,220,149,119,141, 1,181,106,213,130, 40,138,208,235,245, - 85,214,223,132,114, 49,252, 64,174,236, 71,168, 58,237,244,243,247,171,113,241,200, 15,144, 8,133, 91,118,194,237,114, 64,118, - 58,192,195,141, 3, 71, 79,163, 69, 74,200, 54, 68, 13, 39, 55,123, 54,228,142, 29,209,104,208, 32,112,162, 8,199,142, 29,149, -142,208,192,129,128, 78, 7,227,230,205, 90,195, 89, 37,238,185,185,185, 24, 55,110, 28,166, 78,157, 10,131,193,160, 14, 84, 15, - 30, 60,136, 79, 62,249, 4,253,250,245,211, 28,119, 66, 42,167, 90,149, 52,156, 48, 97, 2, 10, 10, 10, 48, 99,198, 12,116,232, -208, 1,162, 40,226,226,197,139,184,227,142, 59,112,238,220, 57, 77,156,148,186, 17, 31, 31, 15, 81, 20, 17, 21, 21,117,217, 26, - 49,165,223, 11, 39,143,188, 57,159,189, 55, 10, 31,110, 61, 8,192,141,115, 75,186, 87,233,143,166,124,114,228,154,212, 67, 47, - 13, 66, 66,156,151,161,145, 79, 57, 79, 73,228,168,236,236,236, 41,190,215,135,226,243,254,221,231,122,187,143, 40, 59, 23,114, -138, 80, 17, 67,110,183, 27,102,179, 89, 93,111,229,219,145, 42,191,121,143,110, 66, 53,230,110,183, 91, 45, 0,188,159,209,248, -129, 3, 7,112,224, 64,213,155,105, 62,248,224,131,160,156, 46,151,235,182,184,184, 56,156, 61,123,214,187,113,193,107, 19, 39, -226,255, 70,141, 82,197,149, 78,167, 67,102,102, 38,238,186,235, 46,216,108,182,219, 52, 52,186,234,186, 51,183,219,173, 58,117, - 58,157, 14,111,188,241, 6,246,239,223, 95,101, 97,187, 78,167,147, 53,100, 56,214,172, 89, 19,210,193,146, 36, 73,117,241,180, -112,238,217,179,231,178,181, 56, 74, 99,251,191,255,253, 79,237,108,181,186, 98,178, 44,195,104, 52, 18, 73,146,136,209,104,140, - 25, 53,106, 84,149, 53, 62,146, 36, 65,175,215,171,233, 19, 10, 67,134, 12, 9,218, 58, 61, 62,248,182,126,184, 73,225,114,185, - 96,179,217,112,233,210, 37, 76,158, 60,217,115,116,226, 89, 0,232,216,247, 53, 60,254,112,167,122, 62, 54,179, 82, 2, 67,182, -148,241,241,241, 88,188,120, 49, 68, 81, 68, 78, 78, 14, 98, 98, 98, 48,116,232, 80,196,196,196,224,197, 23, 95,196, 3, 15, 60, - 16,214,226, 84, 74,105, 9, 33,164,207,115,207, 61,183,101,218,180,105,245,234,215,175, 15,135,195, 1,187,221, 14,135,195,129, -163, 71,143, 98,217,178,101,167,202,203,203,251, 80, 74, 75,110, 18,113, 85,247,214, 91,111,253,235,226,197,139,225, 61, 0,240, -110,151, 22, 47, 94,140,110,221,186,253, 53, 47, 47,239, 23, 0,249, 90,120, 79, 2,143,191, 51,117,106, 61,101,250,126,234,212, -169,245,254, 62,126,252,227, 0,222, 59,176,119,239,199, 99,198,140,121,110,249,242,229, 85,174, 25, 51,102, 12, 14,236,221,251, -113,160,122,174,184,161, 60,207,227,217,103,159, 13, 21, 4, 17, 0,108, 54, 27,250,244,233, 19,112, 64,213,162, 69, 11,200,178, -172,184,213,151, 45,108,246,110,223, 53,182, 31,202,102,149,234,160,252,196,174, 53, 24,255,196,112, 64,118, 1,142, 50,192, 81, - 14,234, 40, 7,181,151,129,232, 12,160,206,138,144, 3, 63, 37,156, 49, 49, 49,149, 2, 72,175, 7,188,250, 31, 98, 52,130,120, -156, 43, 45,225,244,141,251,137, 19, 39,240,228,147, 79,194,110,183, 99,232,208,161,168,168,168,128,205,102, 67, 69, 69, 5, 26, - 54,108, 8,171,213,170,197, 17, 84,182, 51, 80, 93,192,231,158,123, 14, 29, 58,116,192, 27,111,188,129, 23, 95,124, 17, 13, 27, - 54,196,227,143, 63,142,101,203,150,161,101,203,150, 40, 47, 47, 15,201,169,244,157,102,179, 25,130, 32,168,109,176,119, 94, 41, - 2, 43, 84,220,131,113,130, 84,110,135,229,155,239,147,255,175,249,245, 86,103,115,180,136, 44,175,243,114,149, 49,105,102,102, -230,203,132,144,156,204,204,204,151,179,178,178,246,107,225, 11,240,251, 42,207,251, 32,175, 99,185, 33, 5,150,119,133, 86, 70, - 51, 74,102, 40, 2, 70, 17, 88, 57, 57, 57, 88,177, 98, 69, 21, 1, 21, 74, 96, 29,240,100,110,115,207, 40, 76,249,222,204,237, - 70,143, 30, 61,208,186,117,235, 42,238, 85, 40,135,136, 82,138, 3, 7, 14, 96,203,150, 45,184,235,174,187, 80, 94, 94, 14,167, -221,142,103,127,250, 9, 45, 70,142,132,221, 51,165, 25, 21, 21,133,119,223,125, 87,115,135,163,196, 63, 42, 42, 74,181,231, 69, - 81, 68,219,182,109, 33, 8, 2,126,252,241, 71,124,253,245,215, 97,221, 82,231,118,187,113,223,125,247, 85, 17, 67,190, 2, 75, -169, 60,171, 86,173,210, 28,206, 30, 61,122,192,108, 54,171,233,246,197, 23, 95,168,191,119,239,222, 29,132, 16, 36, 37, 37, 33, - 39, 39, 71,115, 56, 21,241,196,243, 60,202,202,202,144,155,155, 11,157, 78,167,174,207,208,235,245,106,250, 48, 4, 23, 88,229, -229,229,176,219, 43,205,158, 99,199,142, 85,249,221,238,184,114, 19, 72, 41, 71, 22,139, 5, 27, 55,110,196, 39,159,124,162,142, -144,189,197,118,152,163,200, 34, 66, 72,223, 23, 95,124,113,227,155,111,190, 89, 59, 33, 33, 1, 74,181, 76, 0, 0, 32, 0, 73, - 68, 65, 84, 1, 14,135, 3, 39, 78,156,192,194,133, 11,207,148,149,149,245,165,148, 22,221, 68, 89, 68,243,242,242,138, 19, 19, - 19, 21,123, 62,198,110,183, 19,207,160,137, 2, 80,132,100, 25, 0,135, 22,247, 74, 4,122, 14,189,239,190,222,222, 11,205,159, -123,238, 57,236,216,177,163,183,184, 98,197, 62, 39,176,145, 95,177, 34,109,198,140, 25,234, 57, 51,102,204,192,231, 43, 86,108, -144,129,141,193,202,146,213,106, 85,219,176,221,187,119,107,110, 35,130, 13, 36,149, 37, 21,129,214, 92,133,179,100,129, 82, 74, -211,210,210, 42,215, 20,122,218,178,219,238,188, 7,211,223,251, 0, 81, 28,197,189, 61,154, 32,201, 44,128, 24,227, 33,245,200, - 4,137,245,152,180,147,219,132, 28,240, 82, 74, 81,231,133, 23, 16,111, 52,194,230,113,170,164, 33, 67, 0,157, 14,134,181,107, - 33,138, 34,172, 35, 71, 2,146, 4,227,194,208,219,244,121,199,253,200,145, 35,216,186,117, 43,154, 53,107,134,195,135, 15,171, -251, 84,113, 28,167, 14,176,181,198,221, 83,118, 32, 73, 18,206,158, 61,139,140,140, 12, 72,146,132, 15, 63,252, 16,155, 54,109, -194,139, 47,190,136, 49, 99,198,160, 87,175, 94,151, 25, 10,254, 56, 91,182,108, 89, 37,143, 2,173,143, 10, 39,143,252,113, 42, -198,209,149,228,251, 53,173,176,191,187, 69,254,166,204, 6,249,113,158,110, 71,229,218, 40, 91, 86, 86,214,254,172,172,172, 12, - 66, 72, 78, 86, 86, 86, 70, 16, 7,107, 80, 8,135,107, 16, 42,215, 92, 5,111,163,189, 10, 27, 69,229, 26, 44, 21,193,110,207, - 52,155,205,248,203, 95,254,130,151, 94,122, 9, 9, 9, 9, 72, 77, 77,213, 84,160,131, 97,211,166, 77,216,180,105, 83,149, 99, - 43, 87,174, 12,122,141, 36, 73, 7,147,147,147,219, 61,240,192, 3,184,120,241, 34, 10, 10, 10, 16, 19, 19,131, 22,239,188,131, -189,127,251, 27,218,204,155, 7,174,119,229,157,239, 81, 81, 81,200,203,203, 67, 84, 84,212,193, 80, 65, 85, 92, 59,101,171, 3, -197,142, 87,210,133, 42,126,102, 24,139, 50, 40,165, 88,181,106, 85,208,181, 87,222,119,177,104,229,220,190,125,251,101, 14,150, -146,222,202,111,202,130,104,173, 48, 24, 12, 84, 17, 88, 70,163, 17,241,241,241, 85,132, 85, 56, 14,214,207,217,217,107,121,131, - 33, 65, 20, 69, 72,162, 8, 65, 20,225,176, 88,138, 83,159,122,170, 31, 0, 44, 92,184,112,171,201,100, 82, 55, 34, 21, 69, 17, -229,229,229, 69,247,221,119,223, 13,239,108,217,237,118,117,237, 82,152,141, 72,200,115, 28, 14, 7, 36, 73,194, 87, 95,125,133, -219,111,191, 29,237,219,183, 87,243, 90,153,226,208, 58, 69,232,243,223,167, 9, 33, 3,102,205,154,181,105,250,244,233,177, 22, -139, 5, 11, 23, 46, 44, 41, 45, 45, 29, 64, 41, 61,125, 51, 9, 96, 79,124,254,226,213, 70,125, 12,160,134,231,107, 9,128,135, -195,189,123,176,121,171, 86, 15, 47,244,211,193, 47, 92,184, 16,135, 15, 31,126, 24,123,247,110,172, 7,204,123,233,165,151, 26, -183,111,223,190, 30, 0,188,244,210, 75, 39,235, 1,243,130,149, 7,197,193, 10, 53,144,245, 55, 96,210, 50,179, 16,232,206,193, - 43,237,100, 21,145,209,123,216,104,156,255,245, 8, 90,152,127, 67,114,156, 25,238,178,243,144,250, 76,198,222,223,140,152, 57, -111, 77, 88,241,208, 69, 69,129,120,220, 54, 73,146, 0,131, 1,188, 94,255,123, 56, 61,107,178,194,225, 20, 69, 17, 7, 15, 30, -132,209,104,132, 44,203,151,137, 41,173,179, 9,222,121,165,184, 75,211,167, 79,199, 11, 47,188,128, 15, 63,252, 16,123,247,238, - 69,155, 54,109,208,183,111, 95,156, 63,127, 30, 63,253,244, 19,108, 54,155,230,112,122,247, 23, 7, 14, 28,192,186,117,235,112, -232,208, 33,156, 60,121,242,138,242,199,151,211,183,223, 95,180,238, 87,140,238,151,122,205,234,162, 63, 13, 18, 4,185, 62,238, - 17,148,245, 80,138, 32,242,253, 14, 32, 78, 57,150,153,153,249,178,214,235,188,191, 43, 14, 88, 16,225,117,185,192,162,148, 18, -127, 98, 72, 73,116,239, 10,170,124, 86,220, 18,147,201,132,212,212, 84, 77,149,158,231,121,212,183, 88, 20,129,162, 58, 87, 10, -134, 15, 31,142,180,180,180, 42,107,176, 66, 85,110,155,205,182,229,187,239,190,107, 51,100,200, 16, 46, 47, 47, 15,146, 36, 85, -222, 86,219,165, 11,218,204,155,135,125,227,199,163,199,177, 99,168,112, 58,149, 91,219,157,229,229,229, 91, 52,100,182,186, 48, - 81, 17, 17,202, 66,126,165, 50, 79,158, 60,217,239,190, 45,193, 42, 94,160, 17,162,247,139,227, 56,205, 98,200,237,118,171, 29, - 41,207,243,234,139, 16,162,142,118,195,117, 49, 20,219, 92,225,229, 56, 14, 53,106,212, 80, 43,163,178, 6, 64,171,192, 18, 12, -134,132, 89,195,135, 55,118, 78,156,136,232,185,115,225,122,254,121,188,222,181,171,250,187,201,100, 50,110,219,182,173,145,193, - 96, 0,165, 20,133,133,133,184,255,254,251,111,138, 93,199,101, 89, 86, 23,136, 71, 26,159,126,250, 41,142, 29, 59, 6,135,195, -129,183,222,122,171,138,184,242,126, 93,161,240, 56,218,174, 93, 59,247,128, 1, 3,176,125,251,118,232,245,122, 39,165,244, 40, -243, 36, 67,227,231,189,123, 87,152, 76,166, 7, 1,152, 47, 94,188,200,215,168, 81, 3, 70,163, 17, 86,171,245, 18,239,185, 83, - 48, 31,176, 27,156,206,169,247,223,127,255, 12, 0, 16,156,206,169,193,246,193,186, 26,129, 21,202,193,242,238, 84,175,212,185, -242,199, 41,138, 34, 4,158,199,178,233,175,162,133,185, 24,237,110, 49,161,162, 40, 31, 81, 49, 53, 65, 98, 27, 96,230,188, 53, - 56,144,255, 91, 88,156,220, 39,159, 64,174, 87, 15,226,131, 15,130, 68, 69, 65,159,147, 3, 73,146, 96,253,203, 95, 64,116, 58, - 24, 23, 44,184,162,112,150,151,151, 7,116,170,180, 58, 88,190,156,146, 36,161, 93,187,118,104,210,164, 9, 54,110,220,136,118, -237,218,225,240,225,195, 56,124,248, 48,242,243,243,177,119,239, 94, 92,184,112, 65, 51,167,146, 71,159,124,242, 9, 10, 11, 11, - 33, 73, 18, 74, 74, 74,112,252,248,241,128,235,159,195,201,119, 5, 81,131, 42, 55,210,174,159,104,184,102, 2,203,159, 6,241, -131, 34,159,181, 78,202,119,187,143,216,241,253,238,123, 62, 0,156, 7,192,135,184,206,247,123, 81, 86, 86,214, 70,197,249,242, -240,242,129,214, 95, 85,113,176,124,251,133,123,238,185,231,178, 94, 57, 42, 42, 10,247,220,115, 15,120,158, 71,108,108, 44,106, -212,168,129,166, 77,155,134,220,100,211, 35,174,228, 17, 35, 70, 92,198,169,215,235,113,239,189,247, 98,233,210,165, 0, 0,223, -117, 9, 95,125,245, 85,168, 41,152,217,127,249,203, 95, 70,247,233,211, 39, 54, 37, 37, 5,103,206,156, 81,239,116, 36,189,122, -161,251,209,163,176,203, 50, 76, 38, 19,142, 30, 61,138,217,179,103,151, 57, 28,142,217,161, 50,219, 91, 96, 41,110, 13, 33, 68, -237,176, 8, 33,244,192,129, 3, 97,183, 62, 90,196, 85,184, 80, 68,149,183,200,122,226,137, 39,212,239,225, 52,146,146, 36,209, - 65,131, 6,169,207, 32,140,139,139, 67, 66, 66, 2,206,157, 59,167, 54, 26, 38,147, 73, 21, 87, 90, 4,150,168,211,193,245,218, -107, 16, 26, 52,192,175,123,246,160, 97,124, 60,248,230,205,171,140, 16, 45, 22, 11,210,211,211, 33, 8, 2,230,206,157,123,197, -194,224,122,131,114,247, 96,106,106,106, 68, 55,171,116, 56, 28,120,236,177,199,252,174,127, 84, 22, 61,187,221,110, 56,157, 78, -173,119,144, 94,145,139,118,179, 35, 53, 53, 53, 96,253, 9,148, 62,202,150, 12, 60,240,230,175,191,254,218,170, 70,141, 26,232, -223,191, 63,190,254,242,203,175, 38,122,237, 27,102, 5, 78, 25,206,158,125,214,243,249,116,168,188, 80,238, 34,140,124, 62,146, -203,220,171,171,157, 30, 34,164,242,206,229,111, 23,189,135, 22,166, 66,180,169, 31,133,173, 59,126, 66,167,122, 20,212, 38, 93, - 41, 43,204,102,115,101, 59,105, 50,169,119, 15, 18, 66, 64, 12, 6, 32,204,253, 25, 21, 78,165,126, 40,109,239,213, 58, 88, 74, -220,149,116,124,244,209, 71,241,210, 75, 47,161,127,255,254, 56,124,248, 48, 54,111,222,140,188,188, 60,140, 27, 55, 14, 45, 91, -182, 68,122,122,186,166,112, 42,124, 95,124,241, 5, 46, 93,186,164, 14, 70, 43, 42, 42,240,218,107,175, 93, 81,220,189,243, 93, - 21,148,107,135, 1, 0, 62, 92,123,226,122,171,142, 63,132,248, 30,238,245,213, 14,191,189,216,215, 95,127,237,247,153,122,131, - 7, 15, 46,191,251,238,187,113,232,208, 33,152, 76, 38, 52,109,218, 20, 54,155, 45, 96,103,232,253,180,237, 47,191,252, 50, 32, -231, 61,247,220,131,134, 13, 27, 86,113,174, 2,109,125,224,251, 4,111, 74,169,133, 16,242, 84,247,238,221, 63, 88,191,126,189, -190,101,203,150, 40, 46, 46,134,219,237,198,132, 9, 19,240,254,251,239,195,100, 50,225,248,241,227, 24, 52,104,144,213, 98,177, - 60,229,189, 7,150, 63, 78,143,112,171, 34, 34,148,233,194, 42,114,186,168,136, 4, 25, 33,248,125,210,248,172, 89,179, 48,127, -235, 86,140,245,114,112,252,225,253,247,223,215,196, 73, 41,197, 59,239,188, 19, 49,206,157, 59,119, 46,244,201,159,217,233,233, -233, 56,121,242,100,149,105,193, 96, 2,203,151, 83, 18, 4, 68,207,153,131, 83, 63,253,132, 70,183,221, 6,201,237, 6, 90,181, -250,189, 16, 10, 2,234,212,169,131,183,222,122, 11, 53,107,214, 68, 82, 82,210,101,101,234, 90, 61,181, 62,146,156,162, 40,110, -126,231,157,119,186,253,235, 95,255,226, 12, 6, 3,118,239,222,141,226,226,226,203,132,146, 42,148, 19, 6, 65, 46, 94,229,201, - 87,185, 44, 88, 56, 43, 42, 42, 48,123,246,108, 77,249, 62,127,254,252, 43,138,187,183, 83,162, 69,108,221,136,121, 20, 66, 92, -197,156, 56,113,194,223,162,243,101,240,185,211,207, 31, 39, 1,246, 45, 93,186,180, 85,171, 86,173,148,186, 55,106,218,127,255, -251,192,100,171,181, 2,168,220,124,212, 35,198, 66,134,147, 82, 74, 12, 6, 3,210,210,210,224,116, 58,195,114,177,188,207,245, - 13,167,178,214,232,106, 6,122,254, 56, 57,142, 3,207,243, 56,186,237,107,100, 12,168,141,109, 59,243,176,254,148, 9,245,162, - 10, 80,187,188, 16,238,194, 95,240,236,125,237, 48,115, 69,229,147, 14,246,238, 14,205, 73, 8,129,249,233,167, 65,140, 70,232, - 87,172,128, 40,138,176, 61,249,100,229, 26, 44, 79,219, 86,241,230,155,128, 78, 7,253,139, 47,106, 10,167,239, 76,141,178, 28, -196, 91, 92, 5,115,176, 2,197, 29,168,220, 54,225,194,133, 11,248,232,163,143,240,200, 35,143,224,252,249,243, 56,126,252, 56, - 14, 29, 58,132,101,203,150,105,238,227,124,243, 40, 51, 51, 19,207, 63,255, 60, 56,142, 67, 90, 90, 26, 38, 79,158,140, 46, 93, -186,132,157, 71,190,249,238,139, 80,238, 85,117,212,205,155, 13, 97,219, 4, 28,199,161,102,205,154,234,230,154,222, 29,108,184, -214,181,183,152, 49, 24, 12, 48, 24, 12, 85,182, 62,184,251,238,187, 67, 58, 88,158,198,103, 45, 33,100, 76,227,198,141,231,101, -103,103,155,251,244,233,195, 39, 39, 39, 99,224,192,129, 56,113,226, 4, 86,173, 90,229,156, 49, 99, 70,185,197, 98,121,156, 82, -186, 65,107,163,228, 45, 34,252,236, 94, 79,155, 52,105,162,121,136, 39,138,226,175, 71,143, 30,109,240,238,187,239,114,101, 0, -102,112,156,218, 8,113,158,207,222,248,238,187,239, 92, 58,157, 46,232, 29, 75, 58,157, 78,229, 44, 39, 4, 51, 60,149,155,243, -226, 14,151, 51, 16,188,167, 75,255,159,189,243, 14,143,162,248,255,248,123,118,175, 39,164, 64, 72,128, 36, 23, 66, 66,239, 73, -104,130, 20, 21, 68, 65,138, 72, 81, 80, 17,148,162, 8,162,210, 69,154, 8,138,168, 95, 4, 5, 68,137,128, 52,165, 8, 34, 74, -239, 53,161, 67,130, 64, 2, 41, 64, 10,169,215,182,206,239,143,148, 95, 8, 41,151, 16, 1,113, 94,207,115,207,229,246, 54,239, -155,153,157,157,125,239,103,202, 22, 44, 19,103, 26, 98,173, 86, 11, 50,105, 18,106,185,187, 67,171,170, 32, 28, 7,228, 62, 76, - 53,239,251,179,103,207,226,227,143, 63,134, 86,171,197,134, 13, 27, 30,139,147,203,108, 54,191,127,227,198,141,213, 61,123,246, -172, 91,236, 49,148,211,242,205, 85, 88,239,223, 17,177,169,123,110,227, 37,167,151,112, 44, 98,247,237,219,103,158, 57,115, 38, -159,194,113,152, 83,160,107, 56,239, 85,240,184,236,217,179, 71, 49,153, 76,113,247,147,151,255, 80, 52,203, 26, 23, 23,231, 97, - 54,155,113,249,242,101,130,255, 31,143, 85,240,188,123, 25, 69, 44,165, 80, 24,127, 96,203,130, 5, 11,158, 31, 60,120,112,149, -250,245,235,231, 77, 62,209,231,190,144,187,178,251,118, 39,203,127,243,103,159,125,246,250,207, 63,255,172,207, 59, 95, 98, 98, - 98, 74,139, 70, 99,249,242,229, 66,105, 23,193,188, 39, 61,228, 69, 93,202, 19, 69, 47, 46,170, 30,214,115, 24,190,221,246, 61, -124,154, 62,143,126, 61,158,196,193,133,175,163,127, 67, 27,196,117,175,160, 73,191,149, 8,159,148, 19,189,105,190,126,146, 83, -215, 30,163,187, 59,248,220,217,130, 28,199, 1, 46, 46, 32, 5,162, 47, 36,119, 69,247,178, 92,207,242,204, 69,113,249, 46,107, -121,240, 60,143,160,160, 32, 4, 7, 7,163, 93,187,118, 8, 9, 9,193, 83, 79, 61,133, 51,103,206,224,204,153, 51, 24, 61,122, -116,153, 31, 57, 86,240, 24, 61,251,236,179,120,238,185,231,238,251, 24, 21, 62,238,140, 71,196, 96,121,123,123, 67,175,215,151, -219, 80, 21, 70, 16,132,124, 99,101, 50,153,242, 67,211,206,152,171, 2, 13,208,110, 66, 72,139, 15, 63,252,240, 29,147,201,212, - 33,111, 41, 6,131,193, 16,101,179,217,246,139,162,184,136, 82,154,225,252, 77, 25,185,203, 80, 20,177, 3,210,211,211,157, 54, - 88,138,162,116,126,239,189,247,118, 59, 28,142, 64,103,246, 55,153, 76, 9, 22,139,165,115, 73,251, 72,146,212,121,204,152, 49, - 21,170, 89, 76,218,239, 50, 85,121,239,206,142,237,210,234,116,208,143, 31, 15, 78, 20, 65, 56, 14,180, 80, 4, 75,171,213,194, -211,211, 19,155, 55,111,134,151,151,215, 99,115,114,173, 95,191, 94, 1,208,191,164,125,158,104, 74,142, 1,104,252, 68,191,223, -147, 47, 92,163,129, 33,245, 72,236,209,205,195,188, 75,185, 33,121,250,139, 47,190,216, 41,138, 98,128, 51,233,208,235,245, 55, - 68, 81, 44,243,113, 87, 85,149,220,188,121, 19,243,230,205,179,164,166,166, 30,254,143,180,137, 75, 58,119,238,252,241,206,157, - 59, 53,102,179,249,190,132, 98, 1, 65,239,112,124, 17, 26, 26, 58,126,242,228,201,158, 61,122,244,128,217,108,134,135,135, 71, -153,181,226,226,226,134, 3,168,214,161, 67,135,110,121,139, 50,230,181,191, 5,159, 6,144,247,158, 59,255, 70, 85, 20,229,220, -173, 91,183, 90,150,208,208,229,223,140, 85,148,185,202, 91,135, 13, 0,158,233,251, 6,158,233,251, 70,126,186,118,253,210, 9, - 17, 9,127, 33,140, 75,128, 99,233,147, 32,238,121, 85,152, 43, 85,147,227, 56,152, 86,173,186,107, 25, 27,211, 23, 95,220,125, -243,241,254,251,101, 74,103,193, 27,209,138, 26,131,197,243, 60, 82, 82, 82, 16, 29, 29,141,219,183,111,195,106,181,226,226,197, -139, 16, 4, 1,105,105,105,200,155,105, 88,158,116, 86,228, 49,170,104, 77,198,125, 26, 44,157, 78,151,220,183,111, 95,239,210, -246, 41,163,219, 87,222,120,227,141, 18,175,212,174,174,174, 78,141,248,206, 53, 80,179, 1,204,206,125,134, 21,236,118,123,153, -111,189,181, 90,109, 82,223,190,125,125, 74,201,103, 58,114,150,219,119,138, 99,199,142, 37, 1,104, 84,145, 7,239,159,208, 44, -226, 68, 84,134, 15, 31, 94,226,241,169, 84,169, 82,137,229, 32,100,100,164, 78, 56,112, 32,199, 84, 53,110, 12, 52,109,138,236, - 59,119, 82,243,150,144,205,202,202, 74,121,245,213, 87,229,130,221,130, 5, 23, 34,125,172,161,184, 22,218,164,134,207,169,104, - 26, 8, 0,167,162,115, 76,150, 65,135,107,165, 28,247, 38,255,116,210, 18, 19, 19,207, 54,110,220,248,239,180,180,180,175, 40, -165,241,255,137,195, 65,233,105, 66,200,204,218,181,107, 15, 7, 80, 92,152, 97,141,179, 17, 61, 1,184, 88,205,110, 31, 57,125, -234,212,151,166, 77,157, 90, 87, 5,188, 0, 24,129,156, 46,194, 50, 70, 16,123, 86,116,126, 21, 69,137,111,219,182,109,153,255, -167,180,239, 75, 88, 73, 28, 63,195, 12,156, 44,187,230, 63,145,206, 60,205,166, 77,155,162,121,243,230,249,239,121, 20,220, 30, - 18, 18, 2, 69, 81,226,101, 89, 46, 81, 51, 52, 52, 20, 13, 27, 54, 44,118,133,246,194, 99,174, 30,118,222,243,200,123,184, 78, - 72,200,167,229,210,100, 20,113,253,252, 39, 67,255,143,219,152, 12,166,201, 52,153, 38,211,124, 20, 52, 73,105, 33,159,123,124, -124,206,227,202, 42, 82,179, 64, 66, 27,177, 99,196, 52, 25,247, 25,193, 98, 48, 24, 12,198,195, 39,207, 48, 61, 10,154,132, 29, - 14, 6,163,216,115,163,200,174,134,178, 56, 83, 66, 72,153,187, 43, 74,211,103,154, 76,147,105, 50, 77,166,201, 52,153,230,227, -167, 89,154,246,227, 18, 25, 99, 93,132, 76,147,105, 50, 77,166,201, 52,153, 38,211,124,232,154,143, 27,108,234, 0,131,193, 96, - 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,193, - 96, 6,139,193, 96, 48, 24, 12, 6,227,145,129,252,135,158, 49,198, 96, 48, 24, 12, 6,131,241, 64, 96, 17, 44, 6,131,193, 96, - 48, 24,140, 10, 70, 3, 0,121, 15, 15, 5, 0, 74, 41, 91,152,151,193, 96, 48, 24, 12,198, 3,225,113,245, 32, 26,102,172, 24, - 12, 6,131,193, 96, 60, 76, 30, 71, 15,194, 21,229, 32, 25, 12, 6,131,193, 96, 48, 30, 20,143,163, 7,225, 30,103,247,200, 96, - 48, 24, 12, 6,227,209,231,177,143, 96,177, 40, 22,131,193, 96, 48, 24,140, 7,205,227,232, 65,216, 50, 13, 12, 6,131,193, 96, - 48, 24, 21,204, 63,186, 76, 3, 33,164, 9,211,100,154, 76,147,105, 50, 77,166,201, 52,153, 38, 51, 88, 12, 6,131,193, 96, 48, - 24, 12,102,176, 24, 12, 6,131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24, 12, 6,131,193, 12, - 22,131,193, 96, 48, 24, 12,198, 67,130, 0, 40,114, 38, 0,165,244,156,211, 34,229,152, 77, 80,154, 62,211,100,154, 76,147,105, - 50, 77,166,201, 52, 31, 63,205,210,180,203,226, 63, 30,105,131,245, 79,174,131, 69, 8,105, 82,209, 5,197, 52,153, 38,211,100, -154, 76,147,105, 50,205,199, 79,243,113,131,117, 17, 50, 24, 12, 6,131,193, 96, 84, 48, 26, 86, 4, 12,134,115,132,133,133,153, - 12, 6,195, 51,123,246,236,209, 93,188,120, 17,199,143, 31,167,171, 86,173,146, 28, 14,199,174,136,136, 8, 27, 43,161,199,131, -230,205,155,119,230,121,254, 3, 0, 80, 20,101,254,233,211,167,119,222,199, 93, 62, 9, 14, 14,126,219, 96, 48,116,213,106,181, - 53, 20, 69, 33, 14,135,227,166,213,106,221,149,152,152,184,128, 82,170,150, 67, 51,204,203,203,235,205, 38, 77,154,212,190,122, -245,106,124, 92, 92,220, 26, 0, 59, 1,116, 54,155,205, 47, 7, 7, 7,251,159, 59,119,238, 74,106,106,234, 50, 74,105,196,195, - 74, 39,131,193, 12,150,115, 39, 31,231,238,238,254,148, 86,171, 29,102,179,217,154, 27,141,198,243, 28,199, 45, 75, 73, 73,249, -147,157,120,143, 47,132, 16,190, 70,141, 26, 79,251,248,248,140,201,204,204,108,237,233,233,121,242,206,157, 59, 95, 95,191,126, -125, 39,165, 84, 41,167, 38,231,226,226,210, 73,163,209, 12, 21, 4, 33,204, 96, 48,156, 85, 85,245,135,172,172,172, 29, 15,179, - 46,181,107,215,238,172,162, 40,126, 37,237, 99, 48, 24,180,187,119,239,230, 55,110,220, 72,127,254,249,231, 59, 47,191,252,178, -235,144, 33, 67, 52,225,225,225, 75, 0,140, 47,188,127,155, 54,109, 98, 37, 73,242,118,230,247,181, 90,109,242,209,163, 71, 3, - 89,173,123,248,240, 60,255,193,144,185,123,219,169, 20, 8,159,212, 9,185,230,165, 92,132,134,134,126,223,171, 87,175,190,245, -234,213,211,168,170, 10, 73,146,224,112, 56,234, 70, 70, 70,182,255,243,207, 63, 67, 1,188, 90,198,243,231,249,137, 19, 39, 46, -154, 57,115,102, 85,173, 86, 75, 36, 73,106,181,118,237,218,103, 71,142, 28,121,246,187,239,190,107, 58, 96,192,128, 74,121,219, -167, 77,155,246, 44, 33,100, 2,165,116,253,131, 78, 39,131,193, 40,197, 96,185,187,187,215, 54,153, 76,195,221,220,220,186,214, -169, 83, 39, 97,200,144, 33, 39, 68, 81,252,155,231,121,186, 98,197,138,209,130, 32,124,225,231,231,183,195,225,112, 44, 78, 77, - 77,141, 46, 99, 67, 81, 27,192, 16, 0,207, 2,240, 5,112, 11,192,159, 0,150, 83, 74, 47,151, 39, 51,254,254,254,141, 77, 38, -211,251, 60,207,183,180, 88, 44,126, 46, 46, 46, 55, 1,156,200,202,202,250, 58, 49, 49,241,116,121, 52,205,102,115, 16,128, 17, - 58,157,174,157, 44,203,129, 90,173,246,134, 36, 73,135, 20, 69, 89, 28, 31, 31,127,165, 60,154,109,107,186,119,163,174,110,115, - 68, 98,244,183, 56, 20,157,171,158,151,116,212, 17,175, 88, 51, 62, 62,126, 61,107,211,195,174, 20,190,190,190,245,170, 87,175, -254,110,157, 58,117, 94,170, 89,179,166,110,208,160, 65,186,142, 29, 59, 98,223,190,125, 79,174, 90,181,170,149, 78,167, 19, 91, -181,106,181, 33, 33, 33, 97, 65, 98, 98,162, 83,199,221, 96, 48, 4, 87,170, 84,233, 45, 23, 23,151,174,245,235,215,191, 57,106, -212,168,232,200,200,200,168,166, 77,155,198, 45, 94,188,248,221,232,232,232,121, 62, 62, 62,127,217,237,246,239,179,178,178, 46, - 63,232, 60, 59, 28,142,224,131, 7, 15, 66,167,211, 21,249,189,170,170,232,215,175, 31,244,122, 61, 22, 47, 94, 76,142, 31, 63, - 62,211,102,179, 77, 93,180,104,145, 87,120,120,248,139, 69, 25, 44, 73,146,188,143, 30, 61, 10,173, 86,123,143,158,162, 40,144, - 36, 9,178, 44,195,225,112,160,107,215,174,222,172, 57,122, 52,160,148, 86,167, 0,182,159,177, 3,128,231,253,104, 25,141,198, -122, 47,190,248,162, 38, 37, 37, 5, 26,141, 6,162, 40,226,214,173, 91, 8, 14, 14,230, 29, 14, 71,221,178,234,213,175, 95,255, -205, 57,115,230,120,111,219,182, 77, 92,181,106,149,208,185,115,103,237,144, 33, 67,220, 58,118,236,216,214,223,223,159,251,241, -199, 31, 29, 59,119,238,148, 6, 13, 26,164,255,244,211, 79,189,183,111,223,222, 23,192,250, 7,157, 78, 6,131, 81,130,193,114, -113,113,217,166,215,235, 3,250,245,235,183,127,234,212,169,223,120,121,121, 73, 0,176,122,245,106,223,254,253,251,223,124,231, -157,119, 98,211,211,211, 53, 51,103,206,108,178,114,229,202, 95, 77, 38,211,109,155,205,246,140, 19,198,138, 0,120,135,227,184, - 17, 45, 91,182,220,166, 40,202,149, 61,123,246,204,125,230,153,103,122, 1,160, 39, 79,158,252,149, 16,242, 35,128,255, 57, 27, -209, 32,132,240,181,106,213,154,226,231,231, 55,230,187,239,190, 51,212,170, 85, 11, 46, 46, 46,200,202,202, 50, 95,190,124,217, -127,204,152, 49,221,131,131,131,191,243,240,240,152, 17, 17, 17, 33, 57,169, 73,252,252,252, 70,185,187,187,127, 60,127,254,124, - 99,189,122,245,136,171,171, 43, 18, 18, 18, 26,157, 56,113,162,225,215, 95,127,253,154,217,108,254, 52, 62, 62,222,233,116,118, - 34, 68, 99,175, 93,245,183,202,117, 91,118,248,110,233, 50, 82,221,197, 5, 90,142,131, 36,138,218,120,139,165,214,168,183, 71, -172,108, 83,183,218,145,108,109, 82,247, 11, 23,168,248, 48, 42, 68,112,112,240, 89, 55, 55,183,128, 23, 95,124, 81,219,175, 95, - 63, 4, 7, 7,231,127,247,234,171,175,226,213, 87, 95,213, 93,189,122, 85,183,126,253,250,215, 87,174, 92,249, 74,173, 90,181, -226, 98, 98, 98,154,148, 98,174,182,154, 76,166,154,195,135, 15, 63, 61,126,252,248,253,110,110,110, 34,128,196,179,103,207, 42, -131, 6, 13,250,123,232,208,161,241, 89, 89, 89,152, 50,101, 74,205, 85,171, 86,173, 51, 24, 12, 73, 14,135,227,217, 7,157,119, -163,209,136, 43, 87,174,220, 99,132,146,146,146,144,154,154, 10,155,205,134,244,244,116,228,222,225,219, 85, 85, 5,199,113, 64, -206,108,220,226, 34, 83,136,142,190,215,131, 74,146, 4,155,205, 6, 81, 20, 33,136, 34, 52,122, 3, 58,116,238,242, 55,161,216, -154,101,183, 46, 56,117,248,240, 13,214, 60, 61, 28, 56,142,187,186,101,255,149, 32, 0, 34,128,168,251,148, 83, 1, 96,255,254, -253,184,125,251, 54,146,147,147,145,156,156, 12,179,217,140,242, 68,108,163,162,162, 22,133,134,134,146, 83,167, 78,109, 3,176, -124,237,218,181, 61,239,220,185,243,191,113,227,198, 85,158, 55,111, 94,218,248,241,227,199, 0,248,109,237,218,181,175, 54,107, -214,172,219,153, 51,103, 22, 62,140,116, 50, 24,140, 18, 6,185, 83, 74,107, 4, 4, 4,220, 88,177, 98, 69,135, 17, 35, 70, 52, - 72, 77, 77,213, 2,128,183,183,183, 3, 0,210,211,211, 53,111,189,245, 86,227, 31,126,248,161,131,209,104,140, 87, 20,165,106, - 17, 26, 69,205, 48, 24,233,226,226,242,220,133, 11, 23, 62,175, 93,187,182,113,246,236,217,123, 93, 93, 93,177,112,225,194,221, -254,254,254, 30,209,209,209,159,186,186,186,182, 7, 48,166,152,116,221,163, 25, 24, 24, 56,185,111,223,190, 99, 14, 29, 58,100, -104,214,172, 25,220,220,220,192,243, 60, 60, 61, 61,209,186,117,107,178,127,255,126, 67,247,238,221, 71,102,100,100,204,118, 86, -211,108, 54,143,121,225,133, 23,166, 69, 68, 68,152,218,182,109, 75,180, 90, 45, 50, 50, 50,160,211,233,240,196, 19, 79,144, 53, -171, 86,153, 90,132,132, 76, 54,155,205, 83,157,213,116,212,169,186,181,255,136,241, 29,183,254,241, 39,241,241,241,129, 99,230, - 76,100, 52,110, 12,199,132, 9,168, 86,189, 58,182,108,219, 78, 94,120,245,237,182,110,146,207, 54,103, 53, 43,224,110,253, 46, - 77,187,221, 30, 28, 18, 18,194, 31, 62,124,216,113,229,202, 21, 91,225, 89,166,148, 82, 92,184,112,193,250,199, 31,127, 88,188, -188,188, 32, 8, 66, 80,105,154,148,210,234,237,219,183,151,194,195,195,219, 14, 31, 62, 92,123,235,214,173, 35, 0,162, 43, 87, -174, 28, 15, 32, 33, 41, 41, 41,230,149, 87, 94,241, 91,185,114,229,211, 85,171, 86, 77,164,148,122, 63,140,188,231, 25,170,194, -175,188,237,190,190,190,216,186,117, 43,186,119,239,142, 54,109,218,124,214,179,103, 79,195,241,227,199, 41, 33,228,143,178,164, - 83, 85, 85,216,108, 54,216,108, 54,196,199,199,227,203, 5, 11,113,236,240, 33,172, 93,241,147,239,168,183, 71,190,229,225,226, -118, 56,164,109,219,128, 7,157,119,166,153,255,125, 66,142,185, 34, 86, 74,233,245,242,106,190,248,226,139,141, 2, 3, 3,125, -214,157,175,140, 52, 93,125, 40, 90, 15,168,122, 79, 40, 94, 45,240,183,238, 57,248,250,250,250, 4, 6, 6,182, 46,139, 38,165, -116,119,100,100,100,111, 74,233, 50, 74,169, 66, 41,221, 56,126,252,248,183, 9, 33,155,198,143, 31,255, 46,165,116, 99,238,246, -240,211,167, 79,247,165,148,238,127, 24,233,100,117,137,105,254, 3,180, 4,208, 61,247,213, 10, 64,235, 66,159,245,133,246,235, - 92,204,123,247, 66,159, 91, 22,250,191,150, 21,106,176, 8, 33, 52,239, 85, 32,130, 35, 45, 94,188,120,195,210,165, 75, 23, 39, - 39, 39,251, 4, 5, 5,141,125,242,201, 39,219, 93,189,122,213,165, 67,135, 14,237,124,125,125,223,143,140,140,244,233,211,167, -207,210,215, 94,123,237, 23, 66,136,236, 68, 84, 40,136,227,184,119, 14, 31, 62,188,166,126,253,250,142,155, 55,111,122,118,238, -220, 57, 13, 0,194,194,194,178,211,211,211, 43,121,123,123, 43,155, 55,111,254,149, 16,242, 6, 33,164,212,208,180,159,159, 95, -179,170, 85,171,142,153, 61,123,182,129,231,249,226, 34, 40,248,228,147, 79, 12,238,238,238,111,248,251,251,183, 42, 77,211,215, -215,183,158,155,155,219,148,175,190,250,202,104,183,219, 33,203, 50,188,189,189,225,226,226,130,212,148, 20, 36,221,184,129,244, -196,120, 76, 30, 59,198,228,106, 50,141,242,243,243,107, 90,154,230,147,181,220, 94,112,245,109,208,126,244,152,177,176, 15, 29, - 10,171,209, 8,235,251,239,195, 17, 17, 1,235,220,185,112, 84,174, 12,251,179,207, 98,236,216, 15,160,247, 9,110,243, 68, 64, -165,190, 15,203,117,127,252,241,199,220,216,177, 99, 13, 91,183,110, 53,118,236,216, 81, 88,190,124,121,150,197, 98,193,162, 69, -139,178,194,194,194,236,139, 23, 47, 54,182,105,211,198,245,233,167,159,214, 58, 25, 17,144, 86,174, 92,121,118,201,146, 37,179, - 47, 95,190,172,173, 83,167,206,204,230,205,155,119,203,202,202,210,182,110,221,186,123, 64, 64,192,156,200,200,200,202,207, 63, -255,252,172, 41, 83,166,172, 6, 32,225, 17,129,231,121,240, 60, 15,157, 78,135,166, 77,155, 98,237,218,181,240,243,243,195,247, -223,127,239, 89,173, 90, 53,151,240,240,240,140,244,244,244,175,202,162, 41, 8, 2, 28, 14, 7,172, 86, 43,142,158, 56,137, 63, -126,219,132, 21,171,126,198,235,111,190,149, 38,203,178, 99,228,240,183,220,220,140, 46,163,217,253,223,195, 33,103,124, 33,177, - 2, 52,155, 16, 34, 0, 64,237,218,181,245,254,254,254,173,106,215,174,173,119, 86,199,102,179,125,243,229,151, 95,250,113, 6, - 79, 28, 20,186, 97, 45,157,137, 29, 30,139,144, 28, 56, 30,213,204,117,240,252,243,207,123, 3,248,178, 2,210,187,149, 82, 58, -136, 82,186,185, 60,255,255, 79,167, 51, 44, 44,172, 93, 88, 88,216,193,176,176,176,107,185,239,237,238, 55,207,139,167,146,167, -126,252, 88,255,247,119,147,136,245,199,143,245,127, 47,158, 74,158, 98, 53,247,223, 75, 81, 30,164, 8,188, 9, 33, 91, 9, 33, - 91, 39, 77,154,244, 20, 0,175, 66,159,219, 22,220, 15,128,190,168,247,188, 87,129,237,222,185,198,202,187,192,231, 10, 65, 83, -224, 36, 45,178,155,195,108, 54,219,230,205,155,183,195, 98,177,236,249,223,255,254,215,114,236,216,177,175,250,249,249,237,239, -219,183,239, 87,238,238,238, 82, 81,227, 75, 74,224,245, 54,109,218,108, 48,155,205,106, 66, 66,130, 78,146, 36,221,181,107,215, - 12,146, 36, 17,173, 86, 75,109, 54,155,246,220,185,115, 58, 73,146,148,198,141, 27,175, 59,119,238,220, 16, 0, 19, 74, 18, 52, -153, 76,195,151, 46, 93,106, 44,206, 92, 41,138,130,236,236,108,200,178,140, 25, 51,102, 24,199,141, 27,247, 54,128,227, 37,105, -106,181,218,183, 23, 45, 90,100,148, 36, 41,127,252, 76,116,116, 52, 50,210,210, 32,101,103, 67,204,206,132,156,157, 1,141,213, - 29, 99, 94, 29,104,156,243,253, 15,163, 1, 12, 45, 73, 83,212, 87,154,245,211,247, 63, 64,146, 36, 8,107,214, 20,185,143,180, -119, 47, 32, 8,248,228,211,185,228,131,225,175,204, 0,240,203, 67,186,192,128,231,121,188,241,198, 27, 68, 16, 4,253,150, 45, - 91,244, 77,155, 54, 85, 66, 66, 66,220,122,245,234, 5, 89,150,145,145,145, 1,163,209, 88, 22, 89,165, 86,173, 90,214,165, 75, -151,110, 72, 77, 77,221,242,217,103,159,181, 95,176, 96,193, 48,111,111,239,109,253,251,247,159,236,230,230, 38,234,245,122,200, -178,236,254,168,157,252, 58,157, 14, 38,147, 9,254,254,254,232,211,167, 15, 22, 44, 88, 0,158,231, 83,121,158,223,145,157,157, - 61,239,220,185,115, 49,101, 53, 88,118,187, 29, 54,155, 13,215, 98,175, 67,146, 36,132,175, 92,137, 67,123,247,124, 68, 41,157, -185,122,197, 79, 46,139,150, 44,233, 5,224, 3,214,244, 62, 88,250,245,235,199, 19, 66, 60,107, 87, 55, 90, 8, 71,173, 71, 40, -173, 28, 16, 16,240,170, 44,203, 79,155,205,230,170,113,113,113, 41,254,254,254, 59, 5, 65,248, 45, 57, 57,217, 82, 74,164,146, -200,178,140,225,173,210, 49,178, 13, 7, 89,150,145,158,158,142, 27, 55,110,224,252,249,243, 56,118,236,124,185,210, 24, 24, 24, -248,186,201,100,122, 70,167,211,213,164,148,114, 22,139,229,134, 32, 8,123, 18, 18, 18,126,160,229, 88,216,240,159, 74,103, 1, -230,244,233,211,167,134,135,135, 7, 34, 35, 35,107,156, 57,115,102, 14,128, 39,239,235,156, 36,186,197,253,223,222,227,235,226, - 86, 13, 73,209,107,125,183,109,158,185, 24, 64, 29, 86,131,255,213, 55, 54,164,148, 93,146, 41,165, 47,228, 26,178,173,115,230, -204,121, 33,247,255, 94, 40,248,217,137,223,121,161, 8,131,183,181,168,237, 21,102,176, 8, 33,180,164, 12,186,186,186,202, 83, -166, 76, 57,178,111,223,190,176,118,237,218, 29, 42,163,177,202,163, 77,221,186,117, 35,254,250,235, 47,175, 26, 53,106, 56, 84, - 85, 37,238,238,238,178,155,155,155,146, 59,182,133,198,196,196,104, 99, 98, 98, 42,121,121,121, 41, 0,218,148, 38,168,213,106, - 91, 7, 5, 5, 21,123, 33,203,206,206, 70, 86, 86, 22, 28, 14, 7,170, 85,171, 70, 56,142, 43, 53,252,167,209,104,218,214,169, - 83,135,100,101,101,161, 90,181,106, 56,115,230, 12,236,217,217,144, 44, 89,144, 51,179,160,100,103,128,102,166,195,146,145,142, - 32,159,170,132,231,249, 82,163, 98, 50,111, 50,251,186,186, 66,152, 56, 17,226,223,127, 3, 58, 29,116, 53,107, 2, 98,206, 80, - 43, 49, 54, 22,208,235,193, 13, 29,138, 58,111,190, 9, 25, 6,223,135, 88,209, 33, 8, 2,172, 86, 43,116, 58, 29, 94,122,233, - 37,236,219,183, 79,108,217,178,165, 49, 62, 62, 30,130, 32,128,227,184,252,238, 51, 39, 27,113,133,227, 56, 10, 0, 94, 94, 94, -210,188,121,243,118,119,232,208,161, 83,231,206,157,119,232,245,255, 31, 20,112, 56, 28, 42, 0,250, 40,157,248, 6,131, 1, 90, -173, 22,132, 16, 84,170, 84, 9, 89, 89, 89,184,116,233, 82,205,242,104, 41,138,146, 51,238, 42, 55,138,165, 40, 10,142,158, 56, - 2,163,201,132,214,237, 59, 76, 86, 85,213,164,213,104,192,231, 14,238, 98, 60, 56, 90,183,110, 29,170,163,242,236,183,125,197, -128,231,250,248, 91,140, 46, 26, 75,159,109, 66,167,224,218,173,123,207,254,100,118,165,160,160, 32,215, 83,167, 78,101,207,158, - 61,219,239,228,201,147, 0,240,115, 73,122, 9, 9, 9,155,230,206,157, 91,185, 83,167, 78,181,180, 90, 45, 73, 79, 79, 71,114, -114, 50,146,146,146, 16, 23, 23, 71, 99, 98, 98,174, 73,146,180,161, 44,105,108,222,188,249,183,131, 6, 13,122,165, 81,163, 70, - 90, 74, 41, 36, 73,130,213,106,109,118,236,216,177,238, 7, 15, 30,108, 11,224,141,178,230, 59, 49, 49,113,227,220,185,115, 93, - 59,117,234, 84, 87,171,213,114, 21,145,206, 66,212,112,115,115,195,206,157, 59,225,225,225, 1, 0, 53,238,247, 88, 9,146,232, -235,226,238, 11,196,126, 5, 31,207, 0, 8,146,232,203,106,240,191, 63,138, 85,138,201, 58, 1,160,251,253,154,161,127,202, 76, -149, 43,130,149,199,237,219,183, 13, 89, 89, 89, 26, 74, 41,167, 40,138, 70, 85, 85, 98, 48, 24,202,218,149,211,176,111,223,190, -191,118,237,218, 53, 61, 55, 50, 32,121,121,121,201,105,105,105,200,200,200,128, 44,203,138,187,187,187,181,122,245,234,214, 6, - 13, 26,100,238,217,179,167,212, 46, 66,155,205,230, 95, 84, 36,197,106,181, 34, 59, 59, 59,223, 96, 89,173, 86,184,187,187,195, - 98,177,148,122,114,139,162, 24, 96, 50,153,144,156,156,140,148,148, 20,216,179, 51, 33,102,101, 67,206,206,132,156,153, 1, 53, - 43, 3, 52, 59, 11,170,170,160,178,183, 55, 4, 65,240, 47, 77,211,234, 80,244, 90, 0,182, 13, 27,128,247,222, 43,222,220,236, -217, 3,151,122,245, 96,179,137, 15,109,141,178,130, 55,193,162, 40, 66,150,101, 80, 74,169, 32, 8, 16, 4,161,160,105, 42,163, -183,200, 49,100,167, 79,159,118, 79, 74, 74, 50, 82, 74,249,236,236,108,131,197, 98,225,170, 86,173,106, 7, 64,101, 89, 86, 30, -181, 19, 95,150,101,136,162, 8, 81, 20,225,112, 56,202,148,239,194,251,230,205, 28,204,157, 6, 15, 65, 18,240,245,130,111,177, -105,221, 90, 92,188,120,193,111,234,204, 79, 32,201, 50, 20,149,141, 43,126, 80, 52,107,214,172, 11,207,243, 95,183,241, 80,221, -198,248, 75,217, 85,245,170, 37,122,209,187,150, 51,102,147,205,110, 19,125,231, 44,248,212,139, 82, 96,202,148, 41,183,251,247, -239, 95,105,236,216,177,141, 7, 12, 24,208,185, 81,163, 70,191, 92,184,112, 65, 44,166, 17,215, 13, 25, 50,228, 68,229,202,149, -131, 86,174, 92,153,116,243,230,205, 42,146, 36,153, 4, 65, 16, 5, 65,184, 38, 8,194, 97, 73,146,246, 36, 38, 38,158, 42, 75, - 90, 93, 93, 93,155, 12, 24, 48, 64,155,150,150,150, 63,219, 47, 57, 57, 25,161,161,161,252,174, 93,187, 26,150, 39,255, 23, 47, - 94, 92,224,145,141,136, 51, 0, 0, 32, 0, 73, 68, 65, 84,231,231,183,127,203,150, 45,207, 84,170, 84, 41, 68,175,215, 87, 83, - 85, 85,177,217,108, 73, 54,155,237,108,121,210, 89,136,155,145,145,145, 53,220,221,221, 17, 31, 31, 15, 0, 55,239,247,152,233, -181,186,248,164,203,107,253,125, 60,130,112,245,226,239,208,107,117,241,172, 38, 63,246, 17,172,150, 5, 35, 86, 37,152, 36,219, -196,137, 19, 39, 19, 66,182, 78,156, 56,113,114, 9, 17, 44,165,224,126, 5,246,119, 84,184,193, 42, 10,139,197,162, 57,113,226, -132,215,237,219,183, 43,249,248,248, 88, 26, 54,108,152, 78, 8, 1,165,148,100,102,102,186, 36, 37, 37,185,184,186,186, 58,106, -214,172,153,233,228,239,253,253,222,123,239,245,156, 48, 97,194,206,129, 3, 7,222, 4,128,180,180, 52,220,190,125, 27,169,169, -169, 16, 69, 17, 9, 9, 9,228,192,129, 3,213,118,237,218,245, 52,128,216,210, 4, 77, 38, 83,124, 86, 86, 86, 29, 79, 79,207, -124,115,144,103,170, 10,190,139,162,136,172,172, 44,184,186,186,150,122,114,107,181,218,196,228,228,228, 96,193,225, 64,114,124, -124,142,177,202,206,130,146,153, 14, 37, 51, 3,196,146, 5,157, 36,193,160,213, 34,235, 78, 42,116, 58,221,237,210, 52, 93, 12, -188, 32,200,178,158,239,209, 3, 32,197,215, 35,218,182, 45,238, 52,110, 12,227,214, 13,210, 67,172,232, 69,126, 46,108, 22,202, - 98, 52,238,220,185,195, 45, 88,176,160, 97,116,116,116, 37, 31, 31,159,148,206,157, 59,199, 16, 66, 40,199,113,106, 82, 82, 82, -149,232,232,232, 58,158,158,158, 22,173, 86,155,252, 48,141, 84, 81,219, 44, 22, 11, 28, 14, 7,236,118, 59,210,211,211,161,209, -104,208,161, 67,135, 61, 14,135, 99, 35, 33,100,197,177, 99,199,178,138,211,148, 36,233,158,178, 84, 20, 37,223,100,105, 8,143, -141,235,214, 97,225,146,133,216,176, 97, 11,237,223,183, 15,217,183,255, 0, 84,149, 38,176, 38,247,193,192,243,252,167,135, 38, -188,228, 70, 20, 57, 59,125,247, 58,235,194, 56,189,229,247,211,231, 14, 89,237, 2, 95, 43, 56,168, 65, 96,205, 90,218,169,211, - 38, 36,157,185,116, 52, 54,237,187,180,234, 31,126,248, 97,205, 58,117,234, 84,139,137,137, 9, 6,112,169, 40, 77, 55, 55,183, -128,193,131, 7,191,150,158,158,174,253,225,135, 31, 86,197,197,197, 29,162,148, 94, 43,100,194,154, 19, 66, 62,205,109,135,125, - 0, 40, 0,118, 81, 74, 87,151,228,217, 9, 33,216,187,119,239, 61,179,253, 20, 69, 41,183, 43, 79, 76, 76, 76,111,211,166, 77, -147,232,232,232,173,105,105,105,107,239,105,191, 92, 92,186, 55,110,220,184,239,241,227,199,103, 81, 74,175,150, 69,155,227,184, - 9,231,207,159,255,132, 82, 26, 64, 8,185,193,113,220, 71,247,123,204, 68, 42,190,189,109,211,244, 69,130, 40,152,245, 58,125, -156, 72,197,119, 88, 77,126,236,201, 27, 35,133,130,198,169, 8, 99,116,120,206,156, 57,166,185,115,231, 98,206,156, 57,231,139, -138, 96,229, 25,173, 57,115,230,156,207,219,175,192,254,251, 43,212, 96, 21,229, 28, 21, 69, 49,206,157, 59,183,109,163, 70,141, - 18,219,181,107,151,104, 54,155,109,121, 23, 8,141, 70, 35,249,248,248,100,200,178,108,191,125,251,118,213,253,251,247,215,162, -148, 58, 51,248,115,159,155,155,155,238,228,201,147, 53,214,174, 93,219, 44, 42, 42,170, 94,247,238,221,243,163, 3,241,241,241, -245,190,254,250,107,197, 96, 48,164,240, 60, 31, 1,160,212, 65, 62,146, 36, 29,187,124,249,114,237,214,173, 91, 19, 73,146,238, - 50, 85, 5,255,214,235,245,136,143,143,167,170,170,158,112,194, 96,156, 56,115,234, 84,112,227,250,245,115,204, 85, 86, 6,148, -204, 12, 40, 25,233, 32,214,108,232, 36, 17,174, 46, 42, 12,122, 23,156,207,185, 35, 43,117,181,100,141,108,187, 17,155,153, 89, -167,230,188,121,208,121,122, 2,162,152,223, 45, 8, 32,191,187,144,222,188,137,147, 71,142, 64,163, 58, 18, 31,166,209,168, 82, -165, 10, 50, 51, 51,225,112, 56, 64, 41, 5,165, 52,223, 80,233,245,122,228,142,151,114, 54,116,229,209,171, 87,175, 39, 91,183, -110, 29,245,198, 27,111,236,110,216,176,225,245,188,186,238,226,226, 34,214,175, 95, 63,209,225,112,100, 95,187,118,173,222,202, -149, 43,219,170,170, 90,233, 97,228,187,176, 25,202,139,224,229,153,171,228,228,100,252,249,231,159, 56,124,248, 48, 46, 92,184, -208,242,216,177, 99, 77, 55,109,218,244, 97,163, 70,141, 90, 95,184,112,225,182,179, 6, 43,175, 44, 41,165,160, 57,179,227,177, -249,183, 63,208,173,123, 71,146,101,201,196,214,109,127,129, 82, 90,131,181,167, 15, 12, 11,100,197,226,216,183,198,250,198, 69, - 67,122,178,128, 89,167, 78, 69, 28,232,222,189,251,206,224, 90,117,221, 1, 64,112,208,202, 46, 58, 47,147, 70,163,209, 3, 64, - 64, 64, 64, 24,165,244,127,200,153,137,116, 15,189,123,247,110, 83,173, 90,181,102,219,183,111, 63, 27, 23, 23,119,184,176,185, - 2,128,122,245,234,125,116,238,220,185,103,181, 90, 45, 41,208,248, 83, 0, 69, 26,172, 23, 95,124,177,142,217,108,174,178,237, -178, 7, 50,117,193, 80,185,116, 80,222, 0,197,179, 25,174,235, 26,161,122,245, 75, 85,234,214,173,219,244,242,229,203,103,203, -146,121, 66,136,185,127,255,254, 27,150, 45, 91, 86,175,107,215,174,122, 0,247, 24,172, 6, 13, 26,244,218,181,107,215,139, 35, - 71,142,108, 74, 8,233, 75, 41,117,122, 13,192, 19, 39, 78, 28, 1, 80,161,131,208, 71,204,162,123, 0,212,103, 85,247, 63, 19, -189, 2, 10,140,193, 2,144,140,156,103, 41, 23,252,156,183,214,165, 80, 96,223,228, 2, 81, 43,161, 80,212,171,168,239,146, 81, -129,147,172, 52, 37, 92,100,247, 30, 63,126,188,121, 88, 88,216,213, 60,115,149,119, 62,230,253,225,234,234, 42, 0,160, 81, 81, - 81, 13, 21, 69, 57,236,196,239, 45,143,136,136,216,246,237,183,223,126, 30, 16, 16,224,232,213,171, 23,247,201, 39,159,108,205, -139, 98,125,249,229,151,180, 91,183,110,191, 71, 71, 71,147,139, 23, 47,126, 4,224,197,210, 4,109, 54,219,146,119,222,121,167, -239,129, 3, 7,140,130, 32, 32, 61, 61,253,174,232, 85, 86, 86, 22,100, 89, 6,207,243,248,246,219,111, 29, 22,139,229,219, 82, -239,142, 68,241,135,207, 62,251,172,247,234,229, 63, 26,121, 73,128, 61, 61, 13,106,102, 58, 56,171, 5, 26, 81,128, 65,171,160, - 70, 29, 87,100, 37,233,176,240,207,189, 54, 73,146,150,148, 26, 21,115, 88, 38,191, 61,124,216,175, 59,118,239,129,246,233,167, - 33,109,223,126,239,157, 94,181,106,176,139, 34,230,204,158, 69,137, 45,125,234,195,168,232, 90,173,246,210,176, 97,195,170, 13, - 31, 62,188,114,147, 38, 77, 32,138, 34, 36, 73,202,143,188,120,121,121, 1, 0,226,226,226, 16, 25, 25,153,193,243,124,169,209, - 59, 69, 81,246, 93,191,126,189,209,208,161, 67,175, 60,247,220,115, 62,162, 40,106,210,210,210,110,230,222, 25,107,252,253,253, - 77,122,189,158, 36, 37, 37,165,223,185,115,199, 71, 85,213,195, 15, 35,239,146, 36,225,227,143, 63, 70,120,116, 52, 6,215,171, -151,111, 54, 29, 14, 71, 78,119,158, 32,224,175,191,254,194,254,253,251,177,106,213,170,212,151, 94,122,201, 99,224,192,129, 30, -171, 86,173, 26, 5,224,163,226,204,234,248,241,227,177,229,218, 53,244, 40, 98,172, 32,165, 4, 9,137, 9,144, 36, 9, 27, 54, -236, 72,212,106,180,158, 95,126, 62,215, 52,110,242,100,194,154,221, 7,131,170,170,211,219,205,223, 52,138,227, 92, 68, 0,139, - 78,157, 58,121, 24, 0, 76, 38,147,247,252,249,243,245, 0, 48,239,243,121, 90, 74,169, 86,150,101, 8,130,128, 89,179,102, 25, -135, 15, 31, 94,236,108,163, 95,126,249, 37,125,230,204,153, 85,222,124,243,205, 46,123,247,238, 53, 16, 66,118,228,222,136,165, -230, 70,170,170, 2, 56, 82,181,106,213,234,235,214,173, 11,122,246,217,103, 93, 75, 75,167,221,110,255,110,201,146, 37, 53,231, -239,119,195, 54, 75, 31,196,209,254,160, 85, 40,170,232,178,208,176,210, 13,116,172, 17, 87, 99,213,170, 85,139, 0, 56, 61, 75, -143, 16,210,224,165,151, 94, 90,187,108,217,178,192, 97,195,134, 37, 28, 62,124, 56,158, 16, 82, 84, 93, 78, 29, 60,120,240,141, -240,240,240, 32, 85, 85, 55, 19, 66,122,149,197,100, 49, 24, 21,192,137,127,104,223,127,140,146, 12,214,104, 66, 72,195,121,243, -230,125,242,195, 15, 63,180,158, 60,121,242,222, 54,109,218,164,229, 25,172, 91,183,110, 85, 57,112,224, 64, 39,171,213, 42, 43, -138, 50,170,168, 53, 49, 10, 63,109,155, 82,122,131, 16,242,117,187,118,237, 94, 89,177, 98,197, 42, 87, 87,215,180,157, 59,119, - 86,241,245,245,189, 19, 17, 17,225,206,113, 92,214,229,203,151, 53, 59,119,238, 28, 0, 96, 73, 81, 39,112, 97,205,132,132,132, - 51,181,106,213,250,223,135, 31,126, 56,102,234,212,169,198,188, 53,134,178,178,178, 96,183,219,161,213,106,193,243, 60,214,172, - 89,227, 16, 4,225,199,248,248,248,227, 78,104, 30, 11, 12, 12, 92,246,197,188, 47,134,189, 59,228,117, 61,151,153, 14,219,157, - 20, 64,116,192,160,225, 96, 14,171, 12, 91, 26,143, 69,127, 30, 20,146,109,182, 95,227,226,226, 14,148,166,121,232,122,230,246, - 54,117,188,247,204,154, 49,237,169,137,191,252, 2, 40, 10,200,235,175, 3,187,118, 1, 77,154, 64, 77, 76,132, 93, 20, 49,101, -210, 4,240,182,164, 67,199,174,103,111, 44, 77,179, 34, 40,172,121,227,198,141,214,178, 44, 15,154, 57,115,230,244,224,224, 96, -237,144, 33, 67, 60, 3, 3, 3,161,170, 42,116, 58, 29, 18, 18, 18,112,252,248,241,204, 59,119,238,136,148,210,143, 19, 19, 19, -127, 46, 77, 83, 81,148,145,132,144,134, 31,124,240,193,172, 79, 62,249, 68,251,197, 23, 95, 28,233,210,165,139,159, 86,171,213, - 53,107,214,204,123,255,254,253,166, 77,155, 54, 61, 99,177, 88, 64, 41, 29,227, 76, 93,170,232,188,235,116,186,228, 75,151, 46, - 85,157, 55,111, 30,185,149,158,142,233, 58, 29,196,220, 9, 8,121,145,187,105,211,166,193,213,213, 21, 95,126,249, 37, 78,156, - 56,241,101,106,106,234,251, 11, 22, 44,240, 90,179,102, 77,191, 60,131, 85, 80,211,104, 52, 94, 63,115,230,140,121,241,226,197, - 92,156, 44,227, 43, 73,186, 39,162, 53,126,202, 71, 16, 5, 17,132,240,136, 60,186,127,246,147,157,158,153, 89,217,211,211,164, -170,148, 62,200,227,254, 95,214, 60,125,250,244, 62, 0,251, 74,184,187,206,187,153, 67, 74, 74, 10, 82, 82, 82,224,225,225,145, -183,104,114,145,154, 54,155,237,236,132, 9, 19, 78, 45, 94,188,184,203,161, 67,135, 94,218,183,111,223,115,187,119,239,182,199, -198,198,202,146, 36,209, 26, 53,106,104,158,124,242, 73, 99,183,110,221, 92, 12, 6, 3, 55,101,202,148,212,217,179,103,123,229, - 26,176, 34, 53, 85, 85,229, 85, 85,197,251,237, 51, 49,254, 41, 13, 28,142,156, 27,202,196,196, 4, 92,184,112, 1,135, 15, 71, -129, 16,194,149,177, 60,191, 88,181,106, 85, 45,189, 94, 79, 86,175, 94,109, 94,189,122,245,219,165,149,223,138, 21, 43,106,174, - 94,189,250,127,132,144,238,148, 82,149,213, 37,166,201, 40,163,193,202,109, 88, 46, 2,232, 77, 8,105, 59,110,220,184, 25,254, -254,254,169,138,162,232,182,108,217,242, 92,102,102,102, 21, 69, 81,166, 81, 74, 15,150, 49, 20,184,140, 16,130, 1, 3, 6, 76, -242,247,247,255,253,252,249,243, 79,189,244,210, 75,235,182,108,217,242,180,162, 40,215,175, 94,189, 58, 25,192,183, 0,190,115, - 86, 51, 54, 54,246,211, 29, 59,118,144, 35, 71,142,140,158, 56,113,162,193,199,199,135,120,122,122,194,102,179, 33, 46, 46,142, - 46, 95,190,220, 33, 8,194, 98, 15, 15,143, 25,206,106, 86,169, 82,101,234,142, 67,135,244,103, 47,156,123,245,189,151,251, 25, -107,250,153,225,198,153,145,117, 39, 21, 7, 15, 37,224,127,127, 29,176,167, 8,194, 58,142,227,156,158, 74,239,127, 37,165,215, -142,245, 63,108,218,191,119,239, 83,179,230,124, 70,234,191,249, 38, 92,106,213, 66, 70,157, 58, 56,190,127, 63,230,204,158, 69, -121, 75,210, 33,249,202,237, 23, 30, 86,133,200,125,198,224, 79,129,129,129,235, 46, 95,190, 60,124,242,228,201, 19, 67, 67, 67, -169,195,225,208,109,219,182,205,114,243,230, 77, 85, 85,213,207,181, 90,237,226,216,216, 88, 71, 25,116, 47, 2,120,145, 16,210, -118,232,208,161,211,253,252,252,146,100, 89,214,140, 31, 63,254,169,180,180,180,106,148,210,233,101,173, 75, 21,137, 40,138,207, -140, 27, 55,110, 15,128, 74, 5,187, 67,239, 58, 89, 52, 26, 93,102,102, 38, 81, 85, 85,178,219,237,201,121,145,209,226,206, 35, - 73,146,158,154, 58,117,234, 30,187,221, 94,179,184,223,213, 25, 77, 56,120,248, 8, 6, 13,232,175,104,120,254,147,129, 3,250, -235, 15, 31, 61,166, 80,170,110,102,205,211,163, 9,165, 20,185, 55, 3,180,132,125,226, 8, 33, 31,157, 60,121,210, 56, 98,196, -136,144, 65,131, 6,185, 61,253,244,211,174,133,162,239,234,150, 45, 91,172, 75,150, 44, 73,221,183,111, 95,196,208,161, 67,123, - 34,103,245,248, 34, 73, 76, 76,220,190,112,225, 66,143,142, 29, 59,214, 86, 20, 5, 41, 41, 41,249, 99,176,226,227,227,113,253, -250,245, 27,138,162,252, 94,198,236,188, 55,112,224,192,141,225,225,225, 1,195,134, 13, 75, 88,179,102,205,239, 0,138, 26, 83, -235,218,167, 79,159,238,225,225,225, 1,195,135, 15,143, 3,240, 1, 91,225,157,193,184, 15,131, 85,160,177, 56, 12,224, 25, 66, -200, 11,132, 16, 47,187,221,190,130, 82,186,245, 62, 26,168,101,132,144,157,113,113,113,131, 1,248,125,243,205, 55,223, 0,136, - 7,112, 25, 64,207,162,198, 43, 56, 97, 10,102,250,251,251,111,154, 62,125,122,133, 60,139, 48,247,145, 58, 99,125,125,125,127, -249,104,233,242, 9,170,170, 54, 87, 37,177, 10,120, 77, 58,207,243,103, 36, 73,250, 44, 46, 46,174, 76,134, 96,125, 78, 58,123, -180,174,233,254,252,132,145,131,102,203,188, 41,192,226,144,245, 46,122,141,160,163,246, 56,206,150, 49,253, 88,108,214, 35,113, - 97,205, 53, 79,255,171, 93,187,246,242,227,199,143,127, 8, 96, 68,118,118,246, 18,163,209,248,197,149, 43, 87,178,238,227,216, - 31, 6,208, 57,183, 46,249, 88,173,214,181,247, 83,151, 42,138,136,136,136,107, 97, 97, 97,193, 0, 76,197,237,195,243,252,130, -237,219,183,191,216,165, 75, 23,187,195,225,152,215,165, 75, 23,205,169, 83,167, 40,165,116, 79, 81,251, 31, 59,118, 44, 9, 64, -137, 51,187, 66,218,182, 13, 8, 95,177,226,240,144,193,131,221, 22,125,253,101,229, 19, 17,145,202,143,225,225, 89, 22,187,125, - 1,107,158, 30, 13,242, 2, 85, 90,173, 22, 46, 46, 46,112,119,119, 71,114,114,114,169,147, 60, 40,165, 87, 9, 33,125,198,141, - 27,215,118,220,184,113,207,249,249,249, 53,172, 89,179,166, 63,199,113,220,205,155, 55, 83,226,226,226,110,136,162,184, 7,192, -118, 0,186,160,160,160, 51, 0,214, 20,167,119,225,194,133,207,252,252,252,246,111,220,184,241, 57,163,209, 88, 95,167,211, 85, - 22, 69,145,179, 90,173,105,130, 32, 68,137,162,248, 71, 66, 66,194,209, 50,158,143,127, 19, 66,158,215,104, 52, 27,150, 45, 91, - 86,239,230,205,155, 53,247,237,219,119,207, 34,199, 97, 97, 97, 75,195,195,195, 3, 70,142, 28,121,109,245,234,213,125, 89,247, - 32,131,225, 68,219, 81,142,117,233,202,210, 48, 61, 86,161,206,192,192, 64,131,179, 81, 27, 22, 58,126,252, 52,155, 52,105,226, - 89,173, 90,181,126,163, 71,143,214,215,175, 95, 31, 81, 81, 81, 88,180,104,145,144,152,152,184,254,220,185,115,233,229, 77,103, - 72,219,182, 1,174, 70,227,104,128,188, 0,208,173, 22,187,253,174,103, 17,178, 99,244,112, 52,123,245,234,181,201, 96, 48,212, -226, 56,142, 80, 74,105,222,163,147,242,102,128, 10,130, 16,179,123,247,238,222,143, 67,222, 9, 33,230, 86,173, 90,205,136,138, -138,250, 43, 51, 51,243,158, 65,238, 6,131,161,123,104,104,232,128, 35, 71,142, 76, 47, 60,139,144,213, 37,166,201,184,143, 8, - 22,227,174,168, 14,227, 63, 74,174,137,202,159,208, 16, 20, 20,132,238,221,187,223,183,110,174,153,250, 0,108,229,246, 71,138, -205,155, 55,247,254,175,228,149, 82, 26,135, 18, 22, 41,117, 56, 28,191, 3,248,157,213, 10, 6,195,121,216,106,209, 12, 6,131, -193, 96, 48, 24, 21, 12, 1,208,164,152, 59, 26,167, 67,127,132,144, 38,229,184, 99, 58,199, 52,153, 38,211,100,154, 76,147,105, - 50,205,255,150,102, 1,237,153,197,124,149,144,171,179,244, 95,109,176,216, 24, 44,166,201, 52,153, 38,211,100,154, 76,147,105, - 62,108,205, 66,250,195,254,237, 6,139,117, 17, 50, 24, 12, 6,131,193, 96, 48,131,197, 96, 48, 24, 12, 6,131,241,104,227,212, - 44, 66,189, 94,223, 16,192,107, 0,170, 17, 66,110, 83, 74, 87, 8,130,112,241,191, 86, 88,122,189,190, 33, 33,228, 53, 74,105, - 53, 0,183, 1, 60,220,114, 32,132,204,152,158,179,178,254,180,233,160,248, 39,251,123, 25, 12, 6,131,193, 96,220,191,193,170, - 21, 16,240, 18,225,240,133, 36,171,158,158,158,158,220,194,133, 11,185, 30, 61,122, 96,203,150, 45, 24,253,238,187,111,251,251, -251,170, 90, 94,147, 14,170,124, 24,115, 35,225, 87,103,126,172, 79,159, 62,177,146, 36, 21,251,252, 46,158,231,147, 55,109,218, - 20,120,191,153,242, 11,237, 31, 43, 73, 98,177,191,163,209,104,147, 19, 79,173,119,234,119, 2, 2,252, 94,226, 64,190,144, 85, -213,179,114,229,202,220, 55,223,124,147, 95, 14,163, 70,141,122,219,236,239,175,106, 53, 92, 58, 85,241, 97,204,141, 27,191, 62, -176, 35, 87,192, 92, 1,192,140,233, 32,211, 8,193, 35,105,178,114,211, 58,109, 26, 40,192, 76, 32,131,193, 96, 48,254,195, 6, -139, 16,250,245,234, 37, 95,120,166,166,166, 97,205,230, 63,209,160, 65, 3, 92,184,112, 1, 13, 26, 52,192,147,173,154,113, 93, -159,104,206,241, 28,170,126,252,205,202,175, 1, 56,101, 44, 36, 73,242,222,184,113, 35, 8, 33,249, 11,246,229, 45,218,151,149, -149,133, 49, 99,198,120, 87, 68,166, 36, 73,244,190,118, 98, 3, 52, 60,129,172, 80,136, 50,133, 36,171, 16, 21,138, 76,171,140, -167,187, 15,116,250,119, 8, 37, 95,255,248,205, 60,207,244,140, 12,108,216,182,227,174,114,120,186, 93, 75,174, 95,183, 78,156, -139, 73, 87,117,248,132,207,156, 46,135,138,160,160,185,186,203,100, 1,143,156,129,201, 75,235,140, 25, 32, 64,206,178,216,211, -167,131, 82, 22,113, 99, 48, 24, 12,198,127,205, 96, 57, 36,197,179, 90, 21, 15, 44,255,241, 71,140,159, 56, 11,245,235,215, 7, -165, 20,132, 16, 76,158, 58, 19, 95,205,154,136, 1,207,119,128, 36,171,158,197,105, 20,179, 98, 48, 98, 98, 98, 96,179,217,238, -122, 53,110,220,216,169, 4, 59, 59,107, 65,195, 19,252, 30,153, 5, 81, 82, 33,202,185, 47, 73,197, 83, 77,220,202,164, 41, 41, -170,167,167, 71, 37, 44, 91,242, 29,198,205,156,119, 87, 57, 76,152, 60, 21,139,230,126,132,177, 35, 95,135, 67, 82, 60,203,147, -206,178,240, 56,105, 78,159, 14, 50, 99, 6, 33,206,118,109,178,242,100,154, 76,147,105, 50,205,199, 91,243,177, 52, 88,132,144, -142, 0,246,230, 22, 90,126,100, 68, 18,236,104,100,246,194,119,243, 63, 1, 5, 7, 21, 20, 80, 1,170, 74,168, 85,213, 5, 54, -171,181,204, 63,168,170, 42, 68, 81,132, 36, 73, 88,186,116, 41,178,179,179,161,170, 42, 26, 52,104, 0, 0, 8, 11, 11, 43, 40, - 26, 23, 17, 17, 81,191, 52, 77,239, 38,189,162, 8,136,185,224,182,105,243,126,192,161,200,171,160, 20, 48,152, 92,208,119,208, -112, 40, 42,133, 40,149,253,249,164,118,139, 21,213, 42,105,241,213,236,169,224,180, 58,112, 32,224, 56, 2,142,168,168,239, 95, - 25, 14,155,237,129, 31,184,105,211, 65, 11, 71,177,166, 77, 7,197,180,127, 87, 5,124,164,187, 54, 25, 12, 6,131,241,143, 83, -156, 7,121, 44, 12, 22,128,189, 69,101, 74,176, 91,225, 95, 89,135,234,149, 60, 32,203, 10,206,139, 53,144,101,181, 67, 20, 37, - 92, 23, 69, 92, 57,117, 19,109,219,182, 69,239,222,189,179, 5, 65,128, 78,167,203,220,188,121,179, 95,105, 6, 75,146, 36,136, -162, 8,139,197,130, 85,171, 86, 65,163,209,228, 63, 56, 53,239, 58, 75, 41, 69,187,118,237,204, 78, 29, 28, 16,243,149,227,191, -194,205,200, 67, 86, 41,100,153, 66, 86, 0, 89,165,176, 10, 42,250, 12,253, 8,178,170, 66, 81, 85, 8, 98,233,215,241,187, 12, - 91,149,150,232, 53,105, 13,128, 74,249,223,187, 27, 40,198,183,227,160,211, 27,160,215,241,112,216,172, 15,254,200, 81, 74,167, - 17,130,127,219, 32,247,105,211,168, 10, 16,146,211, 93, 88,192,100, 61,130, 93,155, 12, 6,131,193,120, 32,236,125,156,140, 85, - 97,131,149,239, 34, 41,165,251,254,223, 96,217, 32, 75, 10, 36, 89,129, 44,201,200,200,182,225,243,207, 63,135,193, 96, 0, 33, - 36,223, 44,169,170,202, 73,146,132,110,221,186,121,150,246,131,138,162,228, 71,176, 40,165,224,121, 30,173, 91,183,190,103,191, -163, 71,203,244, 80,120,184, 25,121,212,234, 60,233,158,237,199,126,253, 4,148, 82, 40, 10,133,172, 80, 8,178,114,223,134, 45, -164, 99, 63, 56, 4, 41,103,184, 54, 5,236, 86,235,195, 57,122,148,210,124, 99,242,175,138, 92, 81, 58,109, 26,232,140, 25,132, - 45, 19,194, 96, 48, 24,140, 34, 61,200, 99,101,176,144, 19,162,203,119,145, 14,155, 13,146, 36, 67,150, 21, 72, 82,142, 49, 50, -153, 76,232,208,161, 67,222,245, 61,255,253,207, 63,255,132, 40,138,165,254, 96,222,160,118, 81, 20,161,170, 42, 40,165, 88,179, -102, 13,180, 90,109,254, 75,167,211,149, 57, 35,178, 66, 49,105,194,251,208,105, 57,104,121, 14, 58, 13, 7,173,134,135, 66, 41, - 40, 5, 84,149, 66, 81, 41, 28,146,115,129,146,146, 12, 27, 0,136, 14, 17,160, 20, 20, 20, 54,139,133,157, 25, 12, 6,131,193, - 96,220, 31,119,121,144,199,197, 96,117, 34,132,220,227, 60, 4,155, 37, 55,122,165, 64,146,229,124, 3, 53,127,254,124,104, 52, - 26,232,245,122,104, 52,154,124, 67,228,140,193,178,219,237, 8, 10, 10,130, 32, 8,104,208,160, 1, 40,165,120,249,229,151,239, -217,239,248,241,227,101,202,136,164, 80,204,249,236,203,123,182, 31, 92, 63, 11, 77, 27,214, 66,203, 58,174,176,139, 42, 50,173, -242,125, 27, 54, 0,176, 11, 18, 84,228, 44, 58, 96,179, 88,217,105,193, 96, 48, 24, 12, 70,249, 40,210,131, 60, 22, 6, 43, 55, - 36,119,143,107,180, 91,173,144, 37, 57,223,100, 9,130, 0, 85, 85,241,238,187,239,222, 35,180,107,215, 46, 8,130, 80,242,143, -105, 52,201,111,189,245,214, 93, 75, 36, 80, 74,241,235,175,191,194, 96, 48,220, 21,197, 34,164,108, 38, 86, 82, 40,166,127,244, - 33,244, 26, 30, 90, 77,158, 33,226,160,170,192,150,223,255,194,150,223,255,202,223,151,231,181,201,247, 99,216, 0, 64, 16, 68, -128,230, 68,224, 44,217, 89,236,244,112, 18, 66, 8, 97,203, 51, 48, 24, 12, 6,163,128, 15, 40,210,131, 60, 22, 6,171, 56,236, - 54, 11,164, 2, 99,176, 68, 81,132, 44,203, 88,186,116,233, 93,221,121, 90,173, 22, 28,199,149, 26,193,218,184,113,227, 93,139, -123,134,133,133, 89, 41,165,232,219,183,111,126,119,227, 27,111,188,129, 97,195,134,149,217, 96,201, 10,197,140,217,243,243,117, -186,117,110,143, 94,207,119,132,154,123, 41, 79, 58,183,201,165,162, 12, 27, 0, 8,142,156, 49, 88, 20,128, 53,139,117, 17, 58, - 75,254,242, 12,211,168,202, 74,131,193, 96, 48, 24,143, 43,197, 26, 44,173,134,203,188,114,253,150,123, 85, 87, 19,100,213, 14, - 69,205, 25, 55,165, 40, 10,134, 13, 27,150,191,223, 43,175,188,130,215, 94,123,173, 72,131,229,204,211,182, 85, 85,197,193,131, - 7, 65, 8, 1,199,113,249,175, 18, 34, 32, 69,106, 90, 28, 42, 14,173,155, 9,149, 82,168, 20, 80,115, 39, 36, 56,228,210,131, - 37, 69,105,150,102,216, 12,110,158,224, 9, 5, 33,192,149,248,219,208,240, 92,102, 89,243, 94, 86,254,173,154,211,167,131, 78, - 47,180,164, 68, 89, 7,184,179,242,100,154, 76,147,105, 50,205,199, 91,243, 63, 99,176, 8, 37, 31, 44,222,122,116,190,164,168, -238,121,219, 26, 53,106, 4, 81, 20,177,125,251,246,124,227,193,243,124,126,151,158, 51, 99,176, 10, 17,215,161, 67,135,146,150, - 98,136,115, 70,132,130,198,181,120,170,191,185,164,239,203,154,176,210, 12,219,178,125,231,255,191, 16, 57, 46,147, 35,228, 3, - 86,157,138, 41,127,154, 55,223,242,238,229, 25, 24, 12, 6,131,193,248,207, 25,172,216,184,184, 53, 0,214, 20,220,214,173, 91, -183,164, 94,189,122,153,100, 89,134,195,225,128, 40,138, 16, 4, 1,162, 40,194,225,112,192,104, 52,150,105,197, 77,103, 22, 17, -117,134,228,115,155,235, 87,100,161, 56, 99,216, 18, 19, 19,235,179,234, 83,118,171,149,243, 60, 66,102,180, 24, 12, 6,131,241, - 31, 53, 88, 69, 97,179,217,124, 1,104, 18, 18, 18,238,249,238,214,173, 91, 0, 32, 63, 14,133, 82,209,134,141, 81,178,209,250, - 55,174, 64,207, 96, 48, 24, 12, 70,133, 25,172,189,123,247,202,143,139,137, 98, 60, 66, 70,139,153, 43, 6,131,193, 96, 60,102, -176,149,180, 25, 12, 6,131,193, 96, 48, 42, 24, 2,160, 73, 81, 95,148,101,118, 0, 33,164, 73, 89,127,184, 52,125,166,201, 52, -153, 38,211,100,154, 76,147,105, 62,126,154,165,105, 83, 74,207, 17, 66,134, 81, 74,151,254,171, 13,214, 63,185,230, 35,155,194, -202, 52,153, 38,211,100,154, 76,147,105, 50,205,114,232,255,235, 13, 22,235, 34,100, 60, 52,194,134, 71,154, 88, 41, 48, 24, 12, - 6,227,113, 68,243, 40, 38, 42, 44, 44,172, 58,165, 52,148,227,184,202,148,210,157, 17, 17, 17,183,216,161, 42,215, 29,128,134, - 82, 42, 63,138,154,230, 1,235, 54, 24,212,236,103,125,123, 93,140,107,171, 51, 54, 94,191,190,175,194,142, 24,131,193, 96, 48, -152,193,202,165, 85,171, 86,129,138,162, 12, 4, 48, 0,192,217,136,136,136,129,101,213,120,226,137, 39,140,146, 36,141, 0,208, - 10,156, 38,180,110,179, 14, 53, 66, 91,119, 64,154, 85,197,206,117, 95,196,116,234,212,169,197,222,189,123, 29,101,209,108,209, -162,197, 6, 74,105,215, 98, 76,194,167, 39, 79,158,156, 93, 22,189,230,205,155,119,230,121,254, 3, 0, 80, 20,101,254,233,211, -167,119, 62,138, 7,212,219,219,219,213,221,221,253,163,218,181,107,119, 30, 56,112, 96,112,187,118,237, 82, 19, 19, 19, 79, 72, -146, 52, 55, 33, 33,225,108,121, 53, 61, 61, 61, 63,106,220,184,241,179,111,188,241, 70,173,118,237,218,165, 38, 36, 36,156,144, -101,185, 92,154,109,198, 30,171, 73, 45, 41, 93, 55, 46,126, 7, 35,103,173, 9, 56, 43, 27, 7, 2, 88, 81,102, 35, 62,124, 99, -117, 78,195,107, 78, 44,234, 25, 15, 0,129,129,129, 53, 37, 73,234,168,170,106, 83,141, 70,115,150,231,249,125,177,177,177,215, -239,167, 60,255, 45,154, 12, 70,121, 81,215, 87,206, 31, 39,194,245, 75, 35, 0,224,225,225,193, 33,231, 73, 96,154,204,204, 76, -149, 82,170, 20,181, 31,131,193,168, 96,131,213,168, 81, 35, 87,157, 78,215,155,227,184, 65,205, 91,182,107,219,179,239,235, 68, -226, 76,248,228,253, 87,202, 28,217, 8, 11, 11,107, 5,194, 47,125,109,244,156,224,128,160, 6, 48,184,120,192, 34, 0,183, 51, - 84,232,173, 10,204,205,174,212,186,118,108, 77, 91, 0,187,203,162, 75, 41,237,186,110,219, 49,220, 76, 87, 64, 72,206,104,126, -142, 3,178,237, 42, 38, 15,121,114, 50,128, 50, 25, 44,142,227, 38, 13,157,187,175,149, 74,129, 31, 39,118,208, 1,120,228, 12, -150,175,175,239, 19,109,218,180, 89,241,254,251,239, 87,247,242,242,130,171,171, 43,180, 90,109,181,132,132,132, 30,163, 70,141, -122,222,207,207,111, 66, 66, 66,194,226,178,106,118,237,218,117,213,135, 31,126,232, 67, 8,129, 70,163,129, 78,167,171,150,144, -144,208,227,131, 15, 62, 40,179, 38, 33,132,107,252,244,144, 33,110, 62, 29,192,113, 4, 30,174, 70,100,196,158,237, 23, 24,248, -238,250,216,216, 88,167, 77,116,200,240,109, 83, 41, 12,227, 84,153,144, 38,175, 44,217,126,103,255,204, 27,245,234,213, 35, 67, -134, 12,185,163, 40,138, 77,146, 36,239,240,240,240, 81,190,190,190,148,227,184,189, 14,135,227, 96, 74, 74, 74,118, 73, 9,155, -145,251, 56,159, 21, 43, 60, 43, 9,130,233, 73, 74,105,135,250,245,235,147,161, 67,135,166, 74,146,100,179,219,237, 62, 43, 86, -172,112, 94,179, 0, 85,171, 86,173,164,215,235,219, 83, 74, 59,222, 87, 58, 11,208,175, 51, 57,189,126, 39,109, 94,222,239, 11, -101,223, 3,128,145, 82,122,203,137,125,125, 0,184, 80, 74, 99, 30,180,230, 63,129,159,159, 95, 6,165, 84, 91,150,255,209,233, -116, 85,202, 82, 95, 31,117,184,126,105,132, 16, 66, 2, 70, 87, 35,215,111,223,166, 25, 25, 25,121,207, 10,149, 10,155,170,130, - 70,139,193, 96, 84,128,193, 34,132,144,144,144,144,118,132,144, 87, 3,131,106,247,238, 51,112,184, 41,176, 78, 19,100,171,238, -136, 73,161,136,220,243, 51, 8, 33,191, 58,171, 87,187,118,109,189,135,135,199,199, 1,117, 91,140, 30, 54,118, 58,119,238,182, - 17,251, 98, 20,104, 56, 1, 60, 0,193,154,140,204,155, 81,184, 29,189,215,166, 40,202,177,242,100, 46, 33, 77,198,254, 40, 1, - 60,151, 99,174,120,142, 64, 83,254,251,174,234, 20,192, 31,103,108, 32,132,212,120,212, 14,164,217,108,126,182, 71,143, 30,235, -199,140, 25,163,177, 90,173,176,219,237,160,148,194,104, 52,194,215,215, 23,191,254,250,171,102,192,128, 1,159,251,251,251,159, -142,143,143, 63,238,172,230,224,193,131,215,191,243,206, 59,154,168,168, 40,136,162, 8,147,201, 4,163,209,136, 42, 85,170, 32, - 60, 60, 92,243,230,155,111, 58,165,217,160, 65,131,214, 6,131, 97, 86,203,150, 45, 91,212, 14,246,230, 83,170,212, 5, 0, 4, - 4,213,129, 27,110,119,184,118,211, 39, 57, 52, 52, 52,218,106,181,206,142,142,142,254,173, 36,173, 38,111,111,243,212,128,188, -191,248,253,182,156,134,231,201,200,175, 14,118, 91,253,219,190,133, 29,194,106,167, 1,176,108,219,182,205,222,173, 91, 55, 97, -232,208,161, 98,116,116, 52,247,213, 87, 95, 53,219,189,123,119, 79,127,127,255, 3,241,241,241, 63, 23,165, 57, 99, 58,200,182, -155,191, 93, 18, 37,217,191,114, 7,201,241,188,255,133,111,222,124,115, 88,166,191,191,191,148,171,233,232,214,173,155, 48,124, -248,112,225,234,213,171,100,254,252,249, 77,118,236,216,241,130,217,108, 62, 16,151,243,212,131, 98, 9, 29,176,224, 47,159,230, - 47,235,186,183,172,124,232,221,145,111,101,248,250,250,202,229, 77,103, 33,234,220,231,247, 5,225, 1,204, 36,132, 44,167,148, - 30, 41,161, 29,104, 14,160, 31,128,175, 30,146,102,137,152, 76,166, 88,187,221,238, 13, 0, 70,163, 49,217,102,179, 5, 58,113, - 51, 70, 22, 44, 88, 0,157, 78, 7,142,227,160, 40, 10, 20, 69,129,170,170,160,148,230,191,231, 77, 8,154, 56,113,226, 99,217, -157, 77, 41,165,157,130, 2,105,167,160,156, 34,187, 45,202, 3,171,233, 52,249,245, 48, 58,203,162,191,149,146, 34,130,193, 96, - 84,172,193, 10, 13, 13,221,216,173,207,235, 93,218,116,232, 2, 89, 87, 13, 81, 73, 4,113, 49, 20, 26, 94, 6, 7, 21, 49, 39, - 54, 83,158,231,127, 46,116,194,158, 43, 46, 2,230,225,225,185,167,239,240,233, 13,131, 26,183,199,214, 11, 34, 84, 69, 64,202, -165, 63,144,126,253, 56, 44,183, 47, 9,146, 35,251, 2, 33,228,176, 94,175,255,234,236,217,179,214,210, 52,139, 34,231, 25,130, - 20,132, 18, 64, 5, 0, 10,112,164,168,134,165, 84, 77,142,227,206,110,222,115,193, 76,180,174, 0,112,213,137,198,170,194,103, - 87, 20,167,233,231,231,215,109,212,168, 81,107,187,119,239,206,165,164,164, 0, 0, 54,109,218,132,147, 39, 79,194,108, 54, 99, -252,248,241, 8, 8, 8,192,140, 25, 51,248,193,131, 7,207, 1,240,148, 51,154, 31,189,246,218,218,238, 67,135,114, 39, 79,158, -132, 44,203,216,185,115, 39,206,157, 59,135, 26, 53,106, 96,204,152, 49, 8, 8, 8,192,148, 41, 83,248, 17, 35, 70,148,168,217, -162, 69,139, 11,129,129,129,230,215, 94,123,141,235,209,163, 7, 73,202, 2, 70, 44,140,202,169,128, 58, 3,250,247,123,137,123, -254,179,183,176, 99,199,142,134,203,151, 47, 95,209,162, 69, 11,225,228,201,147,222, 78,151, 39, 33,180,146,187, 87, 42,128, 36, - 0,112,119,119,119, 5, 96, 5, 96,173, 87,175,158,230,219,111,191,149,163,162,162,174,118,237,218,245, 57, 0, 63, 23,167, 41, -203,106,245, 31, 38,119,193,208, 79,119, 24,166, 77,251, 56,137,227,180, 18, 0, 17, 0, 60, 61, 61,243, 53,131,131,131, 53, 11, - 23, 46,148,162,162,162, 98,114, 53,215,148,148, 78, 73,235,213,182,249,147,141,197,189,113,169, 77, 50, 86, 95, 57,252,206,139, -134, 29,141,131,170,100,151, 55,157,253, 58,147,211,121,230,169, 95,103, 98, 45, 37,202,101, 5,240,119,225, 72, 86, 97, 77, 74, -233, 29, 66,200, 50, 0,107, 8, 33,131,138, 50, 68,132,144, 39, 0,172, 2,208,155, 82,154, 92, 90,253, 44,168,105, 48, 24,116, -130, 32,120, 22, 54, 62,101,213, 44,144, 22,107, 68, 68, 4,194,194,194, 80,240, 61,239,198, 34,119, 31,111,103,207, 35,158,231, -241,221,119,223,129,227, 56,232,116, 58,104,181, 90,232,116,186,123, 94,205,155, 55, 7,165, 20,132, 16,167,207,119, 66, 8, 31, - 16, 16,240,190, 70,163, 25, 44, 8,130,159,193, 96,184, 41, 73,210, 42, 47, 47,175,207, 35, 34, 34,164,135,221,134,112,253,210, - 72,144,127,181,106,102,157,241,214,187,239,188, 42,248, 24,117,186,172, 52, 59,249,252,199,213, 63, 79, 30, 49, 8,158, 70, 35, -117, 72, 10,157,186,240, 71, 1, 0,241, 29,195,105,111,247, 39, 58, 74,169,248,160,219, 58,166,249,120,107,150, 66, 75, 0, 5, -207,105, 1,128, 62,247,239, 20,228,116, 84,121, 21,218, 94,112,191,188,247,188,118,198, 59,247,255,104, 1,221,100, 0, 39, 42, -212, 96, 17, 66, 40,165,148,228,189, 23, 83,152,110,241, 54, 79,100,199,120, 67,195,169,208,240, 4, 26, 30, 0, 8, 82,227, 47, -194,158,157,114, 56, 34, 34, 34,214,153, 31, 53, 26,141,179,250,141,156,221, 80,241,106,137,223,207, 8,144, 50,227, 16,191,239, - 11,106, 77,190,188,140,231,249,229,138,162, 92,138,140,140,148,238, 55,115, 42, 5,148,130,198, 74, 5, 8,202, 29,221, 46,248, -192,232,155,143,138, 67,246,245,245,237, 57, 97,194,132,159, 67, 67, 67,201,202,149, 43,209,164, 73, 19, 44, 91,182,140, 94,190, -124,249,107, 66,200,215,177,177,177, 79, 89, 44,150,229, 63,255,252, 51,218,180,105, 3, 15, 15,143,230, 97, 97, 97,218,146, 26, -118, 95, 95,223,158, 43,222,125,247,231,166,237,218,145,249,157, 59,195,247,229,151,177,118,223, 62, 26, 19, 19,243, 53, 33,228, -235,184,184,184,167,236,118,251,242,239,191,255, 30, 45, 90,180, 40, 85,147,231,121,255, 53,107,214,240, 46, 46, 46,224,121, 30, - 53,141,128,143,167, 14,159,175,139, 66,114,134, 29,227,122,251, 66,163,209,160,115,231,206,240,243,243,211,140, 28, 57,178,196, -217,173,231,190,237,150, 30, 50,124,219,151, 35,230, 31,154,192, 17,142, 6,249,104,246,120,240,233, 23, 1, 79, 13, 0, 15,111, -111,111, 9, 0, 4, 65,200,248,253,247,223,229,200,200,200, 42, 65, 65, 65, 94,101, 41,215, 83,167, 78, 91, 43, 87,246, 74,173, - 85,171,150, 6,128,135,151,151,215,125,105,190,218,173,153, 62,219, 38, 96,239,201,107, 79, 14,157,179,167, 93, 45, 95,183, 51, -189, 90, 86,217, 5,192, 82, 86,205, 60,179,212,175, 51,177,174, 95,127, 56, 25, 84, 1,228, 44, 9, 98,134, 4, 37, 67,130,152, - 41, 67,186, 35,245, 27,243,101,147,245, 59,169, 75, 25, 26,204,227,132,144, 65, 0, 86, 21, 54, 89, 5,140,208, 32, 74,233,217, -178,106, 10,130,176, 51,207,248, 24,141, 70,111, 66,114,140,161,209,104,148,236,118,251,243,101,209, 4,128,136,136, 8,132,134, -134, 86,202,213,164,121,239,185,134,181,204,228, 61,180,158,231,121,132,134,134,162, 71,143, 30,168, 87,175, 30,226,227,227,177, -119,239, 94, 92,190,124, 57, 63,194, 85, 22, 8, 33,124, 96, 96,224,238, 46, 93,186, 52, 26, 61,122,180, 49, 32, 32, 0, 81, 81, - 81,230,111,191,253,246,189,131, 7, 15,118, 15, 11, 11,107, 95,210,185,248, 32,232, 20, 20, 72,205, 58, 35,222,127,123,160,224, -227,170,211,165,158, 63, 76, 92, 56, 13, 70, 63, 89, 27, 53, 1,255,216, 12, 0, 0, 32, 0, 73, 68, 65, 84, 60,140,184,113,244, - 32,177,139,148,124, 48,236, 85,177, 83, 80, 32,173,103,170,132, 91, 52,149,141,193, 98, 84, 24,206,120, 16, 0,222,132,144,173, - 5,218,150, 23,242, 62, 79,156, 56,113,242,156, 57,115,206, 19, 66,182, 22,220, 94,112,191,130,239,185,191,185,149, 82,250,194, -164, 73,147, 26,207,157, 59,247,211,188,125, 31, 74, 4, 75,171,213,190,114,110,251,215,135,234,138,180,134, 79,227,238,185,109, - 25, 1, 64,113,253,244,118,168,170,186,202, 25,157,144,144,144,246,230,250,109,222,242,173,215, 6,219, 78, 59,144,117,229, 79, -220, 58,178, 40, 78,149,133, 17,167, 78,157,218, 95, 17,153, 10, 13, 13,237, 93,185,106, 13, 56, 68,154,107,176,238, 54, 89,143, - 11, 1, 1, 1, 47,205,158, 61, 59, 60, 56, 56,152,172, 95,191, 30,148, 82,252,242,203, 47,244,202,149, 43, 35,111,222,188,185, - 50,239,122, 92,175, 94,189, 69, 60,207,155, 56,142,131,217,108,214,157, 57,115,198, 23,192,245,226, 52,215, 78,152,240, 83,243, -122,245,144,208,175, 31,158,148,101,252,176, 98, 5,189,174,170,119,105,214,173, 91,119,145, 70,163, 49,241, 60,143,128,128, 0, -221,233,211,167,139,213, 4, 0, 73,146,112,230,204, 25,104, 52, 26, 84,169, 82, 5,159,189,230,143, 99,151,238,160,105,144, 15, -108,105,241, 88,183,235, 20, 98, 98, 98,224,233,233,233,156, 1, 90,210,109, 86,205,186,161, 13, 86,172, 90,151,104,160,105,231, - 82, 83, 83,189, 82, 83, 83,225,238,238,158,161, 40,138,244,249,231,159,107,175, 92,185,226, 97, 52, 26, 97, 48, 24, 32, 73, 82, -153,156,181, 44,203, 92, 69,107, 86,118, 51,162,207,211,141,116,207,181,173,139,131,167,175,135,125,241,107, 76,147,184,139,123, -134,220,143, 38,168, 2, 28,105, 31,121,207,118,255,193,222,229,188, 43, 61,146,107,178,182, 17, 66,116,185,155,147,114,223, 7, -149,212,213, 87,138,102,254,103,135,195, 81, 48,202,164, 45,143,102, 88, 88, 88,158,134, 90,232,230, 45, 57, 47,114,101, 52, 26, -147,157,213, 83, 20, 5,122,189, 30,141, 27, 55,198, 7, 31,124,128,168,168, 40, 28, 60,120, 16, 62, 62, 62,232,218,181, 43, 52, - 26, 13,226,226,226,202,108,176,252,252,252,222,127,230,153,103, 26, 44, 88,176,192, 24, 27, 27,139,168,168, 40,184,187,187, 99, -214,172, 89,166,137, 19, 39, 6, 29, 58,116,104, 18,128,153, 15,211, 92, 13,123,179,191,232,227,162,211, 74, 87, 35,116,158, 85, - 43,145,189,183,178,208,167,153, 63,234,249,122, 64,151,113, 25,123,179,237,240,215,234,225, 65,120,237,164,161, 3,169, 69,167, -255,187, 83, 80, 32,221,123, 45,150,153, 44,198, 3,167,176, 9,202, 51, 78,115,230,204,121,161, 40, 83, 85,132,153,187,107,251, -220,185,115, 63, 45,240, 57,173, 34,211,202, 21,116,144, 37,237, 40, 73,210, 19,158, 85,125,189,135, 13,236, 10, 85, 5,100, 21, -144, 21, 10,171,213,130, 91, 81,123,173,162, 40,110, 42,237,199, 26, 53,106,228, 74,120,221,226, 55, 70, 77, 37,219, 78, 57, 96, -191, 19,139,155,135, 23,222,208,112,180, 85, 5,155,171,240,169,159,255,128, 19,215,132,220,110,194,156, 72,150,162,230,252,253, - 56,224,235,235, 91,239,133, 23, 94, 8, 15, 10, 10, 34,235,214,173,131,195,225, 64, 92, 92, 28,141,140,140, 28,158,144,144,176, -178, 64, 3, 63,248,249,231,159, 55,241, 60, 15, 73,146,112,237,218, 53,203,237,219,183,227,138,211, 28,218,190,125,120, 83,127, -127,196, 15, 28, 8, 37, 35, 3,103, 76, 38,122,130,210,123, 52,123,247,238,109,210,233,114,174,191, 87,175, 94, 45, 86,179, 80, -197,134, 32, 8, 72, 72, 72,192,217,200, 99,176,196, 29,193,218, 21, 75,176, 98,197, 10,196,196,196, 64,163,209, 64,150,157,159, - 39, 33, 91,147, 28,193,190,166,172,130,219, 50, 51, 51, 61, 34, 35, 35,213, 75,151, 46,121,228, 93, 56, 1, 64, 85,213,114, 91, -235,194,154,249, 17,210,114,106,154, 12, 90, 60,213, 34,136,151, 84,170,187,239,116, 42, 89, 69,143,137, 17,239, 72,247,209,128, - 29, 1,160, 43, 48,238,200,167,188,230,170,144,241,185,167,107,173,188, 68, 68, 68,228, 69,172,238,194,102,179, 5, 82, 74, 93, - 34, 34, 34,224,204,248,171, 2,199, 18,122,189, 30, 61,123,246,196,165, 75,151,144,144,144, 0,158,231,225,112, 56,224,112, 56, - 16, 26, 26, 10,157, 78, 87,230,244, 27, 12,134, 87, 70,143, 30,237, 18, 19, 19,131,212,212, 84,112, 28, 7, 89,150,161, 40, 10, -222,124,243, 77, 23,163,209, 56,224,161, 55, 38, 28,111, 73, 57,127, 84,189,157,225,192, 29,139, 72, 95,106,102,166,238, 70, 29, -110,102, 88,145,146,105, 71,191,230,102,202, 17, 66,143,109,253, 19,153, 7,142,211, 83,155,126,191,193, 46,243,140,127, 34,138, - 85,196,182, 97,132,144, 97,133, 13,210,253, 26,180,162, 52, 38, 77,154,212, 24,128,225, 31,137, 96,229,133,231,138, 51, 45,158, - 85,125,195, 39,205, 89,166,217,120,134, 71,218,205,104,216,147,162, 97, 14,237,133,164,232, 67,160,138,248,219,133, 11, 23, 44, - 78, 52, 54,239,247,121,107,122,192,129, 88, 3,108,162, 29,201, 7,191, 80, 9,149,135, 29, 59, 22,145, 85, 81,230,202,211,171, -122,248, 71,159,253,160,249,237,188, 22,119, 18,163, 17,181,121, 2, 20,209, 90,248,160,253, 89,198, 3, 79,194,194,194,170,215, -169, 97, 2,167, 51,224, 40, 33, 62,253,250,245,227,215,175, 95,255,208, 6,187, 38, 38, 38, 70,251,250,250,126, 34, 8,194, 84, -142,227,112,235,214, 45,122,250,244,233, 97,241,241,241,171,243,246, 49,155,205,207,182,106,213,234,235,137, 19, 39,130, 16,130, -221,187,119,195, 98,177, 28,162,148,170, 37,105, 86, 57,127,126,106, 71,171, 21,155,188,188,232, 18, 69,185, 71,179, 75,151, 46, - 95,143, 29, 59, 22,132, 16, 28, 56,112,160, 68,205,130,196,164, 80, 88, 28, 64,160, 23, 7, 79, 79, 79,236,221,187, 55,127,188, - 75,186,228, 6, 69,214,195, 87,107, 43,119,153,168,170, 74,210,211,211,121,155,205,198, 75,146,196,105, 52, 26,154,119, 17,150, - 36, 73,173, 40, 77, 69, 81,238, 75,179,208,141,203,253,165, 83,202, 40,218, 72, 9,201, 21,209,237, 36,228,190,235,239,199, 92, -229, 25,159,188, 1,232, 6,131, 33,223,168,148, 37,202, 84, 76, 4,171, 92,223, 23,101,176,180, 90, 45,234,212,169,131, 35, 71, -142,192,221,221, 29,149, 42, 85,130,201,100,130,193, 96,128,187,187, 59,244,122, 61, 56,142, 43,147,201, 18, 69,209,223,223,223, - 31,127,255,253, 55,140, 70, 99,254, 75,175,215,163, 94,189,122,176, 90,173,190, 15,243,162,150, 32,202, 95, 44, 93,186,250,195, -170, 94,198,235,153, 86,209,189,166,167,139,182,111,211, 90,166,230, 53,245,196, 97, 83, 96,179,171,184, 74,236,202,111,215, 19, -109,215,110, 91,148,106, 58,195,173,219,162,163, 75,188, 32,125,201, 44, 1,163,130, 35, 83,247,120,144,162, 86,114,175,136,110, -188,162, 76,214,220,185,115, 63, 45, 24, 5,171, 80,131, 85,162,105,169,234, 27, 62,241,211,101,154,245,145, 28,210,111, 70,225, -250,246,201,178, 34, 90,147, 85, 85,170,145,118,245, 32, 84, 85, 93,233,100,166,158,172, 30,212, 20,135, 78,137,176, 71,253, 10, - 33,253,218,194,136,136,136, 67, 21,105,174, 38,207,253, 65,179,225,140, 6,119, 18,163,113,245,247,137,138, 44, 88,222,138,140, -140, 92, 87, 94,221,214,173, 91,215,126,162, 69,200,119,175, 86, 19,219,244,236, 23, 4,189, 73,135, 9, 87, 53,207, 92, 56, 28, -123,160, 69,139, 22,195, 79,158, 60,121,225, 33,154,172,185,213,171, 87,215,154,205,230, 9, 9, 9, 9,111, 38, 38, 38,174, 45, - 16,101,234,214,167, 79,159,181, 35, 70,140,224,220,221,221,145,154,154,138,105,211,166,217,120,158,159,224,140,230, 46, 47,175, - 9, 39, 20,229, 30,205,142,189,134,175,157,240,222,235,156, 86,171, 69, 74, 74, 10,102,204,152, 81,170, 38, 53,214, 32, 47,127, -117, 3,149, 76, 90, 24,116, 70,196, 29,178,224,211,222, 57, 93, 69, 58,157, 14, 39, 51,155,128,115, 15,128, 73,167, 65,100,124, - 26, 36,183, 11, 36,108,120,164, 54, 98, 73,104,169, 38,129, 16,162,164,164,164,104, 99, 98, 98,140,130, 32,112,129,129,129,118, - 32,167,139, 47, 45, 45, 77,167,215,235, 65, 8, 17,101, 89, 46, 83,236, 50, 45, 45, 77,115,229,202, 53,131, 36, 73,197,106,138, -162,120,223,241,208,251, 77, 39,164,140,162, 67,126, 98,202,253, 26,172, 56, 66,136, 57,239,239,138,168,175,118,187,221,187, 64, -215, 32, 40,117,126,124, 88, 49, 17,172,114,127, 95, 68,219, 4,189, 94,143, 43, 87,174,192,219,219, 27,178, 44,195,213,213, 21, - 38,147, 9, 38,147, 9, 54,155, 13,122,189, 30, 60,207, 23, 57,200,189, 56,244,122,125,124, 84, 84, 84, 29, 79, 79, 79,168,170, -122,151,201,138,137,137,129,171,171,107,226,195,188,168, 93,137,143, 31, 87,219,223, 31, 72,181,127, 8, 0,127,219,179,176, 77, -159,152,210,160, 67,251,170, 13,196,115,184,112, 35, 29,219,206, 36,105,174,165, 88,220, 0,224,182,232,240,140, 23,164,190,215, - 18, 19, 55, 50, 75,192,120, 72,145,174,173, 5,141, 22, 33,100,235,196,137, 19, 39,151, 87,111,226,196,137,147,239, 55, 42, 86, -162,193,202, 27, 84, 86,120,112, 89,104,104,104,111, 15,175, 26,225,227, 62,249, 94,243,243, 73, 14, 25, 55, 47, 33,113,199, 20, - 89, 17,173,131,181, 90,237,145, 27,135,150,172,226, 56,206,118,250,244,233,131, 78, 20, 10, 23,214,166,125, 83, 94, 87, 9,148, -218, 96, 79, 56, 6,141, 70,243,117, 69,154,171,137,115,150,105,214,159,210, 32,237,102, 20,174,255, 49, 73, 81, 68,107,185,205, - 85,167, 78,157, 52,217,217,217, 99, 26,187, 42, 31,125, 16, 32,233,252,244, 42, 46,126, 55, 1, 81, 1,238,104,220,198,132,192, -250, 74,179, 99,127, 58, 14,135,133,133,205,119, 56, 28,115, 47, 92,184,240, 80,166, 47,223,186,117,107,150,191,191,255,111,137, -137,137,249, 51, 58,124,125,125,123, 14, 26, 52,104, 85,199,142, 29,185,213,171, 87,163, 87,175, 94,248,248,227,143,105, 74, 74, -202,187,137,137,137, 87,203,171,217,103,244,242,159,251,117,127,130,244, 31,247, 21,166,190,245, 20,126, 88, 56,187, 84,205, 42, -221, 87, 30, 51,251,118,231,235, 86,177, 97,100,255,118, 57,119, 10,107, 47,225,242,237,156,128,167,164,106,144,129,106,248,110, - 72, 51,112, 28,193,254,147,151,177,252,118, 19,146, 16,187,247, 28, 16, 90,191,164,116, 42,138, 66,126,250,233, 39,247,164,164, - 36,174, 94,189,122,119,154, 53,107,102,209,235,245,170,205,102, 83,140, 70,163,236,234,234,170,218,237,118,253,245,235,215, 43, - 39, 36, 36,240,121,221,112,206,176, 99,199,142, 26,245,235, 55, 76, 13, 9, 9, 41, 86, 51, 49, 49,145, 43,139,102, 81,220,111, - 58,139,141, 96,137,247, 23,193,162,148,214, 39,132, 88,239,199, 4,253, 83,228, 70,194, 0,192, 82,220, 82, 12,101,137, 96,229, -141,171,210,235,245, 56,124,248, 48,158,123,238, 57,168,170, 10,131,193,144,191, 44,201,241,227,199,161,211,233,192,243,124,153, -210, 42,138,226,234,133, 11, 23,126, 56,119,238, 92,215,188,110, 72, 23, 23, 23,232,245,122,204,159, 63,223, 98,179,217,214, 62, -236,242,188,154,144, 48, 30,126,126,199, 0,180,166,160, 60, 98, 83,198,218,100, 25,178, 35, 39,128,121, 41, 37, 5,177, 14,113, -133,134,144,108, 16, 34, 93, 77, 72,248, 21, 12, 70, 5, 71,175,138,242, 32,133, 72, 46, 20,189, 18, 10,124, 78, 70,206,179,149, - 95,200,253, 27, 69,252, 45, 20,177, 45,117,206,156, 57,123, 10, 68,174,146, 43, 50, 95,197, 70,176, 66, 66, 66,158,241,172,234, - 27,254,225, 39,223,107, 86, 28,227,145,126,243, 34, 82,246,124, 36,171,146,109,112,100,100,100,222,120,171,206,206,254, 80, 88, - 88, 88,237,154,245, 91,187, 36,101,169,160,170, 12, 57,227, 90,210,201, 19,199,146,238, 55, 3, 33, 33, 33,207,120,122, 85, 15, - 31, 63,123,153,102,117,132, 6,233,137,151,144,184, 99,202,125,153,171,230,205,155,119, 54,104,184, 31, 70,251, 75, 85, 94,168, - 42, 67,161,192,202, 91, 90,172, 57,117,236,160, 72, 84, 71,227, 39,140,157,155,180,211,227,153, 1, 46,154,171,103,197, 9, 39, -119,226,157,144,144,144,193,167, 78,157,218,254, 48, 42,103,124,124,124,190, 17,242,247,247,239, 51,100,200,144,159, 58,117,234, - 68,182,111,223, 14, 85, 85, 49,111,222, 60,122,230,204,153,209, 5,163, 81,101,213,236, 51,122,249, 79, 47,245,236, 66,166,172, -151,112,199,234,130,113,211,191,162, 66,226,217, 82, 53, 27,153,117,141,190,251,232, 85, 0,192,209, 11,183,176,235, 76, 26, 18, - 82,172, 24,218, 10,184, 0, 64, 67, 36, 84,230,110, 97,234,242,179,104, 22, 88, 9,125,159,170,139, 14, 45,234,226,155,159,254, - 48, 87,237,250,105,245,148, 63, 39, 23,187, 72,165,170,170, 41, 59,118,236,112,153, 58,117,106,118,141, 26, 53, 52,217,217,217, - 92,193, 49, 76, 58,157, 14, 53,106,212,144,211,211,211,197, 29, 59,118,212, 82, 85,245, 78,137, 39,131,134,187, 53,244,211, 29, -254,122, 78,181,247,238,221,135, 86,173, 90, 85, 99,179,217,138,212, 76, 77, 77, 21,119,239,222, 29,164,170,106, 74,105,101,201, - 43, 89, 41,243, 87,237,247,236,215,185,153,182,150,239,189,131,248,203,154,206,187, 13,214, 29, 9,230,215,171, 66,184, 35, 65, - 72,150, 33,166, 74, 16,147, 37,200,150, 71,110, 58, 71,121, 7,160,151, 18, 9,243,174,168, 8,150, 78,167, 67, 92, 92, 28,118, -237,218,133, 86,173, 90,193,205,205, 13, 22,139, 5, 71,142, 28,193,173, 91,183,242, 35, 88,101,225,198,141, 27, 95,106,181,218, -110,163, 70,141,170, 63, 98,196, 8,215, 6, 13, 26, 32, 54, 54, 22, 95,126,249,165,245,236,217,179, 49, 85,170, 84,153,243, 8, - 92,220, 40,128, 13, 0, 54, 4, 7,248,214, 5, 48, 86, 80, 84,252,122,238, 58,158,244,201, 41, 94, 66,105,118,182, 44,207, 74, - 74, 74, 74, 2,131,241,112, 56,241,111, 75,176,166,132,187,186,113, 79,244,157,170, 9, 63,170, 65, 90,194,121,100, 28,248,184, -176,185,114, 38,148,151,255,180,109, 69, 81,154, 55, 14,121, 2, 87,111,203,144, 51, 99, 1,170,156, 42,103,120,240,174, 39,120, -115, 28,247, 97,219,190, 83, 53, 43, 78,104,144,145,120, 17,201,123,166,150,217, 92, 21,161, 57,113,207,184,190, 85, 32,203, 56, -179,109, 45,190,138,211, 89,174,217,200,132, 83,167, 34,127,162,148,210,144,144,144, 1,241,151,165, 47, 91, 63,111,116,127,169, -207,203,232,211, 91,118, 29,251, 70,248,120, 0,219,139,211,172,160,208,104,137,154,190,190,190,245, 26, 54,108, 24,222,173, 91, - 55,178,105,211, 38,100,101,101, 33, 45, 45, 13, 71,143, 30,125, 39, 49, 49,241,167,242,106,214,104,212, 35,188,119,143, 46,100, -234, 47, 10,162,143,173, 67, 37,199, 13, 56,110, 30,115, 74,243, 92,156,120,122,224,248, 31, 67, 12, 70, 19, 20,147, 31, 62,236, -229,139, 6,222, 4, 54,235,255, 15,217,107, 89,249,111,100, 35, 29, 7, 79, 85,199,111,127,237, 7,175, 90,113, 35,201, 30,159, -178,235,255,205, 85, 81,233, 76, 78, 78, 30,175,211,233, 58, 12, 25, 50,228,229,246,237,219,187, 13, 27, 54, 44,201,221,221,221, -162,215,235,249, 42, 85,170,232, 41,165,250,191,254,250,203,247,214,173, 91,149, 1,172, 73, 78, 78,222, 95, 92, 58,167, 77, 7, -197,244,158, 13, 46, 94, 4, 57,113,194,183,253,224,221,218, 1,237,219,183,175, 52,108,216,176,228,130,154,138,162,232,255,250, -235, 47,191, 91,183,110,121, 2, 88,157,156,156,124,160,180,242, 60,179, 38, 41,168, 78,215,248,143, 23,221,201,122, 55,216,223, -155,127,177,115, 99,109,229, 74, 57,207,185, 46,107, 58,129, 66,235, 96,141,254,170,105, 73,117,166,184,117,176, 30, 70,253,180, -217,108,129,101,141,138, 57,147,206,200,200, 72,107,225,245,176, 74,138, 96, 21,167,169,215,235,161,209,104,144,156,156,140, 29, - 59,118,220,181, 22,150, 94,175,207, 95,198,161, 44,154,148, 82,133, 16,242,180,162, 40,239,143, 29, 59,118,176,213,106,245,115, -113,113,185, 41, 8,194,170,202,149, 43,151,184, 14,214,131, 58, 70,234,250,202, 52,111,149,118,170,208,235,208, 0,188, 5,249, -230, 42,247, 31,147, 12, 6,131, 88,120,255,135, 85,151,152,230,227,169,249,184, 81,210, 24, 44,211,193,136,203,224, 13, 73,200, - 58,246,121,153,205, 85, 81,220,186, 99, 71,188, 81,134,116, 39, 26, 0, 78, 87,208,221,151,219,255,177,119,158, 97, 81, 92, 13, - 27,126,206,204,246, 93,122,147,166,136,160, 8, 42, 42, 75, 81, 20, 91, 52,246, 36, 38, 49,177, 70,141, 74, 98, 52, 38,154,188, -198,222, 43,118,141,137,190,177,183,168,137, 26, 99,111,216, 21, 4,236, 88, 64, 80,122,175,203, 46,203,238,204,249,126, 8,126, -232,171,178,128, 73, 76, 50,247,117,205,181, 48, 59,115,239,153,178,103,159, 57,115,102,230, 92,116, 28,196,242, 28, 20, 92, 94, -200,241, 6,109,173,250, 92,149,239, 56, 6, 24,141,208,159,217,129, 47,239,203,115, 8,195, 6, 70, 71, 71,102, 84,188, 31, 19, - 19,243,115,203,150, 45, 79, 29,221,162,185,218,185,157,209,238, 70,194,111, 96, 24,230, 47,191,195,113,121, 39,245,185,123,246, -236,153,170,209,104,144,155,155, 75, 35, 34, 34, 62, 75, 73, 73,217, 86, 91,231,178, 13,239, 79,189,127,175, 0,138,162, 43,180, -244,209,254,207, 43, 95, 85,248, 42,242, 15, 14,106,219,100,248,145, 96,146,127, 51, 80,121,255,199,175,127,203,113,182,114, 30, - 53,138, 56, 57, 57,193,218,218, 26,182,182,182, 40, 46, 46, 70,252,213,195, 84,155,150, 86,106, 52, 83,255,160,119,234,116, 60, -235,228, 59,231, 77,216,246, 20,192, 25,181, 90,125, 49, 60, 60,188,219,133, 11, 23,222,233,212,169, 83,102,112,112,112,113,116, -116,180, 91, 66, 66,130, 3,128, 3, 14, 14, 14, 71,170,188,215, 16,165,116,250,255, 95,149, 22,174, 86,171, 47,148, 59,123,119, -238,220, 57,171, 85,171, 86,197,209,209,209,110,137,137,137,246, 28,199,253,230,233,233,121, 52, 60, 60,220,104,218, 62, 58,157, - 7, 48,195,247,237,111,195, 98,243, 85, 75,227, 83,114, 63,242,109,228, 66, 0,144,106,151, 19,207,221, 7,235, 21,247,185,170, -234,125, 19,136,250, 3,118,211, 90, 59,159,111, 9,243,243,243,171, 95, 17,166,158,127,173,198,119, 30,205,155, 55, 71,229, 43, - 29, 25,134,121,102, 96, 89, 22, 34,145,168, 38,117, 20, 7, 32,172,124,120,163,121,152,146,166,247,116,117,221,244,121,216,143, - 67, 42,198,149,137,153,237,165, 90,254,104, 70, 82, 82, 49, 4, 4, 4,106, 31,176, 68, 34,209,183,154,168, 21,179, 40,165,246, - 0,190,139,142,142, 62, 90,155, 15,146, 72, 36, 23,162,143,253, 55, 95,234, 18,107,165, 75, 58,171, 97, 8,217,242, 58, 22,128, - 16,242, 31, 77,212,138, 89, 0,108,121,158,159, 18, 19, 19,115,160,182, 78,142,227,150,180, 93,186, 31,128,130,112, 28,183,248, - 90, 84,116,198,243,211,196,196,196,100,183,104,209, 98,196,248, 79,183, 60,125, 0,244,155,176, 65, 43, 58,169, 55,104,208, 96, -194,227,199,143,159,185, 2,176,182, 78,133, 99,192, 4, 67,118, 76,104, 74, 74,202,246,234,204,127,251,167,110, 23,129,110, 23, -129, 9, 75,189,188,188,250, 78,154, 52,105,181,143,143,143,194,206,206,142, 92,185,114,133,198,199,199, 27, 53, 26,205,226,155, - 55,111,206,169,209, 47,246,147, 80,114,192,217,217,249,228,241,227,199,223, 59,118,236, 88, 32,207,243, 17, 60,207,207, 77, 77, - 77,213,214,214,121,244,232,209,247,142, 28, 57, 18, 72, 41,189, 68, 41,253, 45, 37, 37, 69, 87, 19,231,141, 99, 97, 37, 0, 66, -155,190, 53,121, 90,140, 38,101, 45, 43, 49,247,125,248,240, 97,108, 45,202,249,160,150,239, 87,197,190, 63, 96, 23,173,181,179, - 58,183, 95, 48, 49, 0,209,175,190,250,170, 58,179,176, 21,183, 40,249,167, 80,241,124, 65,166,111, 30,201,211,106,135, 1, 10, - 3, 0, 59, 30, 52,181,180,180,108, 71, 70, 70,246, 13,110,151,149,129,223,109, 45,252,106, 10, 8, 84,163,114,249,195, 6, 0, -205, 42,255, 31, 28, 28,108,214,188,121,243,119,154, 53,107,166,124, 93,206, 63,162,156,255, 4,167,139,139, 75,179, 55,217,217, -184,113,227,175,130,130,130, 50, 91,180,104,241, 3, 0,145,176,221,223, 60, 39, 0,213, 31,224,172, 35,108, 35,193, 41, 56, 5, -167, 9,254,145,127,164,255,207, 24, 68,127,102,152,187,112,225, 66, 49,128,223,132, 88,251,199, 83,185,147,250,155,232,140,141, -141, 93, 14, 96,185,176,165,222,232,131, 47,205, 31,224,204, 16,214,172,128,128,192,191, 1, 70, 88, 5, 2, 2, 2, 2, 2, 2, - 2, 2,175, 23, 2,160,217, 75,142, 52, 77,110,173, 32,132, 52,171,193,145,236, 77,193, 41, 56, 5,167,224, 20,156,130, 83,112, -254,187,156, 85,185, 41,165, 55, 9, 33, 35, 95,116, 39,247,191, 85,192,170,238,213, 54,213,146, 11,151,176, 10, 78,193, 41, 56, - 5,167,224, 20,156,130,179,250,254,191,125,192, 18, 78, 17, 10, 8, 8, 8, 8, 8, 8, 8,188,102, 68,194, 42, 16, 48, 5, 23, - 23,151, 89,173, 90,181, 26, 25, 25, 25,185,226,241,227,199, 53,186,251,116, 64, 64, 64,115,165, 82, 57,195,104, 52,170,141, 70, -163, 76,161, 80,196, 22, 21, 21,253,112,245,234,213,157, 53, 45, 87, 64, 64,128,191, 82,169,156,102, 52, 26, 91,148, 59,111,231, -231,231,175,142,137,137,249,229, 77,114, 10, 8, 8, 8, 8, 8, 1,235, 41,203, 39, 19, 71, 73, 41, 68,163,150,208,100, 0,168, - 95,191,190,155,193, 96,104,207,243,188,175, 72, 36,186,193,178,236,153,196,196,196, 71,181, 41,192,223,197,249,119,129, 16, 82, - 71,169, 84, 14, 38,132,116,161,148, 30, 45, 41, 41,217, 74, 41,173,213,227, 45,234,212,169, 99,223,183,111,223,241, 43, 86,172, -192,176, 97,195, 38,216,219,219,175,202,202,202,170,214, 21,102,109,219,182, 29,165, 80, 40,102,124,241,197,104,133,191,191, 63, - 81, 42,149,184,119,239,158,223,210,165, 75,150,183,111,223,254,195,179,103,207,126, 64, 41,173,214,227, 93, 66, 66, 66,190, 86, - 40, 20,147,191,250,234, 43, 89,203,150, 45,137, 68, 34,193,181,107,215,252, 87,174, 92,185,166,125,251,246,125,206,158, 61, 59, -128, 86,243, 28,248,243, 78,185, 92,142,155, 55,111,250, 47, 89,178,164, 70, 78,117,104,180, 88,162, 44, 19, 1, 64, 89,137,196, - 24,181,214,207, 96,234, 56,161,122, 18, 16, 16, 16,248, 7, 6,172, 53, 19,201, 84, 41,240, 45, 36, 32, 51, 67,165, 71,214, 29, -180,125,236,229,229, 69,134, 13, 27,150,203,113,156,214, 96, 48,216,111,218,180,105,180,179,179, 51,101, 24, 38,188,180,180,244, -124,118,118,182, 73,119,250,181,179,179, 51,147, 74,165, 33,148,210,118, 94, 94, 94,100,248,240,225,185, 6,131, 65,171,211,233, - 28,182,109,219, 54,198,217,217,153, 55,217, 73, 8,153, 57, 3,100,219, 54,107,149, 78, 39,111, 75, 41,109,255,186,202,249, 55, - 10, 85, 82,185, 92,222, 91, 44, 22,127,106,107,107,107,215,189,123,247,235,117,234,212,185,147,145,145,209,248,240,225,195,135, - 44, 44, 44,178, 12, 6,195, 6,157, 78,119,128, 82, 90,237, 59,206,139,197, 98, 55, 66, 8, 82, 82, 82, 32, 22,139,197, 82,169, -180, 62,128, 91,166,206, 31, 20, 20,212, 76, 34,145,204,250, 97,253, 14,185,145, 53, 71,142,145, 71, 78, 33, 32,177,243,194,140, -249,203, 85,139,231, 78,105,211,186,117,235,175, 0, 44,173, 78, 43,147, 66,161,152,188,107,215, 46,185,131,131, 3,120,158, 71, - 81, 81, 17,188,189,189, 49,103,206, 28,229,252,249,243,223, 10, 10, 10,250, 12,192, 15, 53,117, 82, 74, 81, 86, 86,134,166, 77, -155, 34, 44, 44, 76, 57, 99,198,140,106, 57,213,235,162,197,134,178,187, 65,101, 37,220, 4, 0, 32, 98,118, 97,135,153, 54, 87, - 13,101,119,253,171, 26,167, 94,135, 43, 81, 35,133,144, 37,240,231,226,236,236,220,218,221,221,253,231,199,143, 31, 95,102, 89, -246,147,196,196,196,210,215, 80, 63,185, 0,168, 15,192, 10, 79, 46,172,202, 3,240,136,210, 39, 7,238, 53,193,174, 97,199, 30, -144, 42, 7, 1,212,151, 0, 0,195,220,160, 6,205,214,236,216,211,135,106,229,148,169, 6,131,114,190, 4,224,193,176, 55, 9, -167,217,152,121,251,244, 49, 97,207, 16,120,109, 1,107,199, 68, 98, 5,138,113, 35,251,141,100, 88,150, 37,107,127, 94,215,227, -248,239,255, 93,237,211,178,123, 30, 0,205,161, 67,135,116, 61,122,244,208,127,250,233,167,101,247,238,221, 99,150, 45, 91,214, -252,212,169, 83,239,184,186,186,158, 75, 78, 78,126,233, 93,190,215, 77, 83,221,227, 12, 37,174,211, 62, 85,148,230, 72, 71,174, - 28, 57,114, 84,161,179,179,179,177,220, 89,218,163, 71, 15,125,104,104,168,190,146,243, 93, 87, 87,215,179,175,114,206,156, 1, - 34,201, 85, 30,233,208,156, 72, 28,189,250, 93, 28, 62,242,203, 66,103,103,103, 35,195, 48,197, 53, 45,231,223, 9,115,115,243, - 69, 42,149,170,151,159,159, 95,236,215, 95,127,125,230,157,119,222,201, 2,128, 77,155, 54,185, 46, 92,184,240, 6,128,139,191, -253,246,155,253,178,101,203,250, 69, 71, 71,207, 54, 55, 55,255,189,168,168,232, 63, 38, 86,140,140,163,163,227,164,174, 93,187, - 78, 24, 48, 96, 0,204,205,205, 49,100,200, 16,232,116,186, 11,206,206,206,179,211,210,210,150,152,210,154, 35,147,201, 38,127, -254,249,231, 50, 94,100,142, 41,155,227,144, 91,252, 36, 55, 40,165, 12,190,232, 44,195,135, 31,246, 85,206,159, 63,239,187,234, - 4, 44,165, 82, 57,237,171,175,190,146, 57, 56, 56, 0, 0,138,139,139, 81, 92, 92,140,162,162, 34,148,150,150,226,157,119,222, - 81,254,248,227,143,211,170, 19,176, 42, 59,239,221,187, 7,189, 94, 15,173, 86, 11,157, 78, 7,115,115,115,244,233,211, 71,185, -122,245,106,147,157, 78,233, 16, 63, 42,227,151,141,255,252, 35, 59, 0, 88,242,195,238,101,128,182, 61, 53, 97,156, 83, 58, 66, - 0, 8, 1,235,213,251, 39, 11,224, 29,177, 88,252,142,167,167,167, 95, 92, 92,220,117,131,193,240, 27,128,253,148, 82, 67, 45, -221, 29,156,156,156,102,164,165,165,253, 72, 41,221,249,111, 89,167, 30, 30, 30, 59,183,111,223,110,115,232,208,161,158,115,230, -204,121, 31,192,246, 90,172, 67, 49,128,160,242,127,239,149, 7, 43,148, 7, 45, 47, 66,136, 59,128,203,213, 57,232,179,111,210, - 65,197, 67,177, 57,184, 67,215,224,190, 31,246, 49,179,183,177,132,166,148,195,253,196,244,186,199, 14,253, 26,226,232,219,243, - 50,199,149,124,146,117, 59, 92, 83, 93,103,167,110,239, 4,119,122,171,179,153,165,165, 21,114,138, 12,136, 79, 76,174,119,230, -248,254, 54,117,124,123,158, 7, 12,195, 51,110, 28, 43, 17,190,117, 2,213,193,164, 78,238, 4,160, 54, 86,202, 28, 0,233, 0, -138, 45, 44, 44,202, 0,148, 0,200,243,242,242, 42, 88,179,102, 77,202,254,253,251, 79, 81, 74,223,170, 60,223,255, 60, 84,148, - 43,117,252,108,192, 24,200, 36,188,100,210,119,227,114,157,157,157, 51,171,112,158,172,202, 9, 0, 22, 10,109,112,159, 14, 86, -190,117,153, 53,159,223, 56, 49, 60, 48, 55, 45,170, 4,224, 52, 22,102,102,134,154,148,243,117,240,103, 57,245,122,253,187, 86, - 86, 86, 5,185,185,185, 42,131,193, 64, 10,181, 6,241,221,100,157,197, 99,173,147,227,221,100,157, 69,161,214, 32, 54, 24, 12, - 36, 51, 51, 83, 37,151,203, 11, 74, 75, 75,223, 53,181,156, 78, 78, 78,211,230,207,159, 63,113,195,134, 13, 76, 64, 64, 0,204, -205,205,209,186,117,107,108,221,186, 85, 52,125,250,244,153, 78, 78, 78,223,154, 82, 78, 74,105,128, 90,173, 38, 60,128,188, 98, - 35, 78,207, 87,227, 66, 88, 0, 74,244, 60, 10, 10,139,193, 48, 12, 68, 34, 17,241,243,243,243, 48,117,217,141, 70, 99,139,150, - 45, 91, 18, 0, 40, 42, 42, 42, 15, 87, 79,134,226, 98, 13, 36, 18, 41,120,158,151,180,108,217,210,169, 38, 78,189, 94,143,250, -245,235,195,205,205, 13, 69, 69, 69, 40, 44, 44,132, 68, 34,169,150, 83,175, 20, 19, 10,234,160,144,203,108, 21,114,153, 45, 5, -117, 0, 0, 83,198,233,149, 98,242, 87,238,159,132, 16, 59,150,101,127,244,244,244,140,102, 89,246,191,132,144, 58,181,113, 18, - 66,212,132,144,153, 74,165,242,160,143,143,207,125,149, 74,117,152, 16, 50,155, 16, 18, 84, 19, 39, 33, 68,170, 84, 42, 15,205, -155, 55,111,107, 76, 76,204, 7, 39, 79,158,172,127,253,250,245,247, 22, 45, 90,180,201,204,204,236, 24, 33, 68, 81,155,239,166, -187,187,251, 15, 17, 17, 17,234, 54,109,218,172, 33,132,200, 94,199,247,157, 16,194, 18, 66,154,147,138,135, 29,190, 33,117, 72, - 5,174,174,174, 30, 45, 91,182,180,101, 89, 22, 33, 33, 33,224, 56,174, 77, 45,157, 65, 0, 50, 40,165,231, 41,165,217,148, 82, -174,124,200,161,148, 94, 0,144, 12, 32,184, 58, 78, 30,138,205, 95,125,253,159, 46,223,124, 57,194, 44,250, 17,135,255, 30, 75, -195,174,243, 89, 72, 41,146,161,203,187,159, 90,116,232, 62,160, 51,203, 42, 55, 87,215, 57,105,226,196, 46,195,135, 12, 52,187, -153,202, 96,247,133,108,156,143, 45, 68, 9,177, 70,135,119, 71, 90,249, 4,116,239, 6, 34, 89,251, 38,108,163,127,186,243, 95, -209,130,213,127, 62,205, 95, 51,145, 44,253,113,231,186, 9, 12, 33, 84,101,211,236,180,150,186,222, 41,159,222,210,222,222,222, - 80,254, 35, 84,112,240,224, 65, 99,116,116,180, 77,131, 6, 13,108, 77,223, 50, 32,215,175, 95,211,218, 57,184,103,184,187,187, -191, 22,103,231,224,142, 82, 93,169, 22,215,239,222,108,115, 96, 93,187, 96,107, 7,239,235, 14,141, 71,156, 2, 23,172,209, 27, -141,249, 53, 42,231,223, 0,150,101,181,123,246,236,249,239,241,227,199,157,166, 76,155,213,101,214,127,207, 56, 88, 52,237,103, -109,224, 45,204, 78, 46,143, 41,206,191,185, 45, 47,247,238,145, 76,117,139,166,167,250,244,233,147,182,120,241,226, 47,171,114, -186,186,186,202, 69, 34, 81,163,158, 61,123,142,255,228,147, 79,144,152,152,136,111,190,249, 70,123,237,218,181, 92,127,127,127, -155,176,176, 48,197,200,145, 35,113,233,210,165,201,238,238,238,191, 25, 12,134,164,228,228,228,151, 62,159,143,227, 56,153, 92, - 46,135,182,188, 77,161,204, 72, 1,240, 79, 91,158, 24,154, 15,145, 72, 4,158,231, 27, 18, 66, 30,154,210, 42,102, 52, 26,101, -114,185, 28, 26,141, 6,197,197,197, 72,201, 42,198,163, 12, 13,138, 52,165,208,106, 13, 40,209, 24, 32, 86,218,194,104,204,240, - 38,132,164, 87,199,201,113, 28,180, 90, 45, 52, 26, 13,180, 90, 45,180, 90, 45,120,158, 71, 97, 97, 33,196, 98, 49,213,235,245, - 94, 0,210,170,220, 54, 82,133, 17, 96,194,126,220,180,127,114,249,241, 76,152, 25,116,124,142, 9,227,158,204,251,151,181, 12, -201,236,236,236,142,236,217,179,167,113,195,134, 13,145,144,144,224,213,183,111, 95,127, 66, 72, 48,165,180,164,154, 46, 37,195, - 48,179,135, 14, 29, 58,178,127,255,254,164, 81,163, 70, 16,137, 68, 48, 26,141, 46,113,113,113,237,118,237,218, 53, 78, 36, 18, -109,228, 56,238, 59, 83,239, 28, 79, 8, 97,100, 50,217,230,181,107,215,182, 13, 10, 10,194,230,205,155,113,229,202, 21, 62, 48, - 48,144, 25, 60,120, 48,220,220,220, 2, 63,249,228,147,237,132,144, 15,202, 31,180, 92,221,229,175, 55,112,224, 64, 87,150,101, -209,186,117,107,201,133, 11, 23, 90, 0,184, 92,203,117,170,114,113,113, 57,214,177, 99,199,230, 39, 78,156,184, 70, 8,233, 90, -157, 59,229, 59, 59, 59,247,170, 83,167,206, 28,115,115,115,147, 31, 6, 88, 92, 92, 92,146,153,153, 57, 41, 57, 57,121,175,137, -179, 4,249,250,250,194,104, 52,194,210,210, 18, 78, 78, 78,173, 93, 93, 93,191,180,176,176,120,167,168,168,232,187,164,164,164, -171,213, 88, 94,103, 0, 12,165, 52,174,252,127, 55, 0,141,202,223,126, 64, 41, 77,164,148, 38, 16, 66,156, 8, 33,174,166,156, - 46,180,107,216,177, 71,155, 78, 61,130, 67,130,154, 49,243,247, 36,130,227,121,136,192, 65,196,242,200,230,196, 32,132,160,158, - 87, 0, 91,231,230,213, 64, 59,239,206, 61,178, 99, 79, 28, 50,197,217,189,119,159, 54, 94,141,188,152, 37,251, 30, 35, 63,229, - 38,151, 17,123, 42,135, 48, 12,220, 91,116,177,173,239,213,146,245,108,217, 73,156,158,120,179,189,173, 87,187,142, 57,247,206, -158, 22, 98,131, 64,181, 3, 22, 33,132, 82, 74,159, 30, 89,141,154, 79,103,251,122,215,241,222,185,125, 99,170,198, 96,115, 51, - 39, 39,199, 54, 39, 39, 7, 22, 22, 22, 5, 28,199, 25, 22, 45, 90, 36,142,139,139,179,148,203,229,144,201,100, 48, 24, 12,213, -234, 76,204,243, 60,121,221, 78,149,210, 12,109,212,193, 18,255,102,106,220,142,187,163,142, 62, 61,182,217,165,152,194, 79,239, -223,143,175,177,243,239, 66,151, 46, 93,210, 26,169,187, 30, 92,117,202,240,159,229,163, 3,148,148,231, 40, 97, 88,213,152, 21, - 60, 9,244,113, 93,111, 35, 41,200,103, 89,182, 74, 79,189,122,245,102,116,236,216,241, 43,145, 72, 36, 30, 49, 98, 4, 0, 96, -236,216,177, 69,145,145,145,190, 25, 25, 25, 89,117,235,214,117, 26, 63,126,252,245, 61,123,246, 40, 63,253,244, 83,145, 86,171, -141, 17,139,197,212,201,201,105,126, 90, 90,218,220, 23, 57, 37, 18,201,141, 59,119,238,180,181,112,105, 6, 59,115, 6, 93, 39, - 71, 3, 0,204,228, 20,121,217,233,136,127,124, 3,110,110,110,138,122,245,234,253,236,228,228,196,183,106,213,106,177,171,171, -235,252,221,187,119,191,244,199, 81,161, 80,220,190,118,237,154,191,143,143, 15,138,139,139,145,148,169,193,134, 75, 4, 37, 58, - 5, 0, 5, 24,152,193,204,218, 69, 38,166,218,157, 65, 65, 65, 76,235,214,173, 23,184,184,184, 44,173,202,121,231,206, 29,255, -166, 77,155,194, 96, 48, 32, 42, 42, 10, 26,141, 6,122,189, 30,121,121,121, 72, 72, 72,128,135,135,135,156,231,249,253, 61,123, -246,228,114,114,114,102, 68, 68, 68,172,124, 89,120, 59,242,165,103, 89,251, 25,225,235,244,218,162, 95, 0,192,214,214, 53,239, -247, 25,126,250,246, 51,138,171, 28,119,228, 75,207, 50,140,249,203,118,213, 65,147, 39, 79,110,108, 99, 99,131,207, 62,251, 12, - 51,103,206,196,180,105,211, 60, 63,251,236,179, 97, 0, 86, 85,227, 71, 86,225,232,232,120,110,197,138, 21, 94,109,218,180,193, -161, 67,135,176, 99,199, 14, 60,124,248,208,232,238,238, 46, 10, 10, 10,194,244,233,211,209,181,107,215,161, 99,198,140,105, 91, - 30,224, 76, 9, 29,131,167, 77,155,214,171,109,219,182, 24, 58,116,104,233,233,211,167, 7, 3, 56,121,226,196,137,246,103,207, -158,221,182,117,235, 86,197,220,185,115,187,140, 27, 55,110, 4,128, 31,107,176,252,189,219,181,107, 7, 0,104,219,182, 45, 22, - 45, 90,212,185, 54, 1,139, 16, 34,181,177,177,249,117,203,150, 45,205,189,188,188, 48,104,208,160, 22, 31,125,244,209,175,132, -144,222,148, 82,189, 41, 14, 71, 71,199,217,235,214,173,243, 80, 40, 20, 38,127,174, 94,175,183, 14, 13, 13,157, 5, 96,175,137, -117,114,171,102,205,154, 33, 60, 60, 28,157, 59,119, 70,211,166, 77, 61, 66, 67, 67,231,119,237,218, 21, 95,127,253,245, 9,103, -103,103,143,212,212,212, 28, 19, 63,190, 30,128,251,229,203, 95, 23,128, 7,128, 75,229,239, 5, 16, 66, 64, 41, 77, 44,159,198, -171,188, 53,235,213,200, 85,131,222,233,221,211,236,215,139,153,224,120, 30,222, 46,114,248,212,179, 64, 98,166, 14,143, 82,114, - 32, 38,101, 48, 87,200,224, 27,220,211, 42, 55, 35,113, 16,128,170,251, 99, 73,149,131,222,123,167,167,106,239,165, 76,228,167, -220,162,137,145,187,206,112,165,218, 47, 0,224,206,185,173, 43,157,172,229,157, 26,181, 80,179, 37, 33,239, 90,133,239,203, 24, - 4, 64, 8, 88,127,220,129,221, 51, 25,228, 31,219,130, 85, 65,110,145,168,212,210,193,183, 72,147,146,242,116, 92, 97, 97,161, -229,253,251,247, 51, 99, 99, 99, 45,197, 98, 49, 56,142,171,248,114,242, 53, 45,196,235,118, 74, 37, 82, 52,247,242,101,163,110, - 92,149,196,198,198, 90,178,172,132,190,142,114,190,233,220, 76,229,234, 26,120, 86, 37,151,136,158,110, 90,158, 72, 84,133,196, -177,174, 13, 10,242,171,154, 95,173, 86,139, 59,117,234,244,213,250,245,235,197,105,105,105,176,178,178,130,193, 96, 64,116,116, -116, 74, 70, 70, 70, 22, 0, 36, 37, 37,165,185,186,186,166,113, 28,231,233,237,237,141,208,208, 80, 52,110,220,152,140, 31, 63, -126, 28, 33,100,254,139,174, 4, 44, 44, 44,252,126,201,146, 37, 45,103,206, 91,170, 28, 24, 68,160, 41,209,229,118,171,243, 0, - 0, 32, 0, 73, 68, 65, 84,163,184,184, 24,169,137,247, 33, 51, 82,204,157, 59, 23,114,185, 28, 0,216,156,156, 28,118,225,194, - 5, 19,174, 93,187,246, 22,128,246, 47, 43,107,126,126,254,234,229,203,151,175, 89,180,104,145, 82,171,213, 66,171,211,161, 72, - 43,197,149,165,129, 79, 14,197,199, 69, 96,193,194, 69,104,230,166, 82,164,164,164, 96,250,244,233,223, 60,124,248,176, 53,128, -247, 94,229, 12, 11, 11, 91,179,100,201, 18,165,153,153, 25, 40,165,224,121, 30, 73, 73, 73, 0,128,217,179,231,160,252, 7,142, - 77, 75, 75, 99,231,205,155, 59, 71, 38,147,117, 2,208,251, 37, 77,232, 20, 64, 41, 33, 72,119,113,105,224, 33,147, 49,147, 93, - 92, 74, 47,134, 79, 79,222, 65, 8,210,159, 76, 3,234,188,206,249,227,199,155,165,193,122, 61, 86,167,165, 37, 60,160, 20, 20, -211,255,186,227, 0, 59, 59,187,207,223,125,247, 93, 44, 88,176, 0, 7, 14, 28,248,206,198,198,102,193,204,153, 51,225,228,228, - 20, 74, 8, 89, 93,141,171, 40,231, 46, 91,182,204,203,219,219, 27,159,124,242,137,254,196,137, 19, 51, 0, 28, 0,240,248,220, -185,115,117, 55,109,218,212, 99,215,174, 93,179,150, 47, 95, 46, 95,181,106,149,199, 7, 31,124, 16, 6,224,243,170,164,117,234, -212, 25,211,191,127,127, 44, 94,188, 24,167, 79,159, 30, 64, 41, 61, 90,254,214, 49, 66,200,135,243,230,205, 59, 52,101,202, 20, - 44, 91,182,236,139,234, 6, 44, 66,136,202,219,219,251,187,110,221,186,225,220,185,115, 8, 9, 9, 65,112,112,240, 24, 66,200, - 26, 74,105, 78, 13,126, 52, 24,115,115,243,205,155, 54,109,106, 83,191,126,125,204,153, 51, 7,223,126,251, 45,214,175, 95,223, -102,208,160, 65,155, 9, 33,253, 77,185,122,214,194,194,194, 76,161, 80, 96,193,130, 5,244,241,227,199, 85,126,151,157,156,156, -172,166, 78,157, 74, 44, 44, 44, 44, 77, 40, 35,235,226,226, 98,225,232,232,216,198,209,209, 17, 43, 86,172,128,131,131, 3,198, -141, 27, 7, 91, 91, 91,104, 52, 26,244,233,211, 71,124,249,242,229,190, 0,214,152,184,232, 54, 0, 42, 90,188, 26, 3,184, 68, - 41, 45, 46,255,188, 8, 60, 57, 53,152,136, 39,253,178, 76,106,149, 99, 40,109, 98,109,101,137,212, 27, 25, 16,193, 8,239,122, -230,184, 26,167, 65, 25, 71,161, 80,153, 65, 83,148,143, 22,158,246, 40, 44,113, 5, 40,223,196, 20,167,132, 37, 45,165, 50, 5, - 50, 11, 11,144,126,231,100,174,129, 47, 27,147, 31,127, 54, 25, 0,108, 60, 59,140,185, 25,113,248,124,159,238, 33,246,153,121, -245, 64, 41,231, 47,196, 32,129,234, 80,173, 27,141,242, 60, 79,114,115,115, 69, 90,173,150, 53, 24, 12, 76,229,180,105, 48, 24, -106, 20, 92,254, 8,103,101,254, 8,231,155, 74, 67, 7, 38,141,101,241,204,169, 58, 2,170, 51, 35,217,105,166,204, 31, 21, 21, -101, 56,123,246,236,246,137, 19, 39, 98,233,210,165,136,143,143,135, 88, 44,134,183,183,183,163,189,189,189, 10, 0, 26, 52,104, - 96,209,172, 89, 51, 7,150,101, 17, 23, 23,135, 29, 59,118, 96,198,140, 25, 52, 42, 42,106,243,203,126, 40,162,163,163,127, 47, - 45, 45, 61,180,104,238,212,146,210,236,123, 80,114, 89,160,133, 9, 80,178, 90, 12, 29, 57, 6, 15,179, 56,196, 36, 20, 33, 38, -161, 8,169, 26, 25,190, 24, 55,153,113,119,119,247, 11, 12, 12,252,244,101,101,141,137,137,249,165,164,164,228,228,172, 89,179, - 74, 30, 62,124, 8,173, 86, 11, 0, 40, 51,242, 40, 51, 62, 91, 12, 23, 23, 23, 44, 88,176, 64,165, 82,169,130,213,106,117,255, - 87, 57, 53, 26,205,201,105,211,166,149,196,197,197,161,160,160, 0,233,233,233, 32,132, 96,248,168,241,120,152,197, 63, 45,103, - 78,153, 57,190,250,207,116,166,110,221,186,237, 91,182,108,249,254,171,214,171,139,139,171,135,183,183,199,214,203,151, 47, 15, -244,240,240, 24, 89, 17,172, 40, 5, 5, 0, 55, 55,183,225, 81, 81, 81,131, 91,180,240,222,230,228,228,220,232, 47, 62,138,108, -247,241,199, 31, 55,226,121, 30,187,119,239,190, 69, 41, 93,181,111,223,190,168,210,210, 82,244,239,223,191, 62,128, 46, 38,122, -212, 3, 6, 12, 24, 25, 18, 18,130,177, 99,199,150,157, 56,113,162, 13,165,116, 37,165,244, 17,125,194, 99, 74,233,154,240,240, -240, 86, 99,198,140, 41, 13, 12, 12,196,144, 33, 67, 6, 19, 66,218, 84,225,109,213,191,127,127, 47,158,231,177, 99,199,142,155, -149,194, 85, 69,168, 61,179,123,247,238, 8,189, 94,143,129, 3, 7,186, 19, 66,218, 87, 99,217, 37,114,185,124,219,156, 57,115, - 44, 83, 82, 82, 48,120,240,224,210,187,119,239, 98,250,244,233, 10, 75, 75,203,189,132, 16, 85,117,215,167, 92, 46, 95,189,102, -205,154, 94,190,190,190,248,252,243,207,245,107,214,172,249,102,212,168, 81,122,181, 90,141,239,191,255,190,151, 84, 42, 93, 93, - 29, 95,122,122,122, 65,120,120,184,107, 85, 67, 70, 70,134, 73,183,102,169, 95,191,190,101,211,166, 77, 35, 2, 2, 2,146,154, - 55,111,222, 0, 0,110,221,186,149,189,123,247,110,106,107,107,139, 35, 71,142, 96,221,186,117,104,219,182, 45,204,205,205, 63, -172, 70, 81,105,249,128, 74,175,207,191,255,252,116, 85, 58, 11, 74,140, 16, 49, 12,196, 44,197,163, 12, 45,202, 56, 10,137,152, -129,152, 5, 68, 12,133,173,185, 24, 98, 49, 11, 16, 98,146,147, 33, 4,121, 26, 3, 68, 44,129, 88, 42, 38, 44,199,203, 43,222, - 99,197,188, 92, 42,149, 19, 7, 75, 9,164, 34, 2,134, 64, 64,224,245,181, 96,149, 87, 58, 92,118,118,182, 56, 33, 33, 65,174, -215,235,153,250,245,235,235, 0,192,104, 52, 50,121,121,121, 18,169, 84, 10, 66, 72,153,209,104,172,214, 33,119,110,110,158, 56, -241,241,253,215,234,124, 17, 70,163,145, 41, 41,201,147,190, 78,231,155,200,221,187,119,205, 30, 36,164,170,234,176, 62, 81, 99, - 86, 69, 5, 81, 64, 76, 40, 53,200,180,119, 47,103,103, 94,147,192, 82,166,116,117,117,173,178,255,204,195,135, 15,191,112,118, -118, 94, 72, 41,245,166,148,254,178,116,233, 82,178,114,229, 74,171, 81,163, 70,221,114,118,118, 78,245,242,242,170,183,116,233, - 82,115, 0,216,186,117, 43,127,248,240,225,222, 50,153,236,110, 98, 98, 98,198,171,188,103,206,156, 25, 26, 24, 24,248,233, 15, - 63,252, 48,203,104, 52,202,236,237,237,101, 91,182,108, 65, 74,190, 30, 83,182,252,255,149,133, 42, 25,139,177, 93, 85,232,208, -161, 19,243,248,241,227,111, 0,172,127,153,243,236,217,179, 3,130,130,130, 62,251,254,251,239,167,193,204, 77, 38,107, 60, 76, -210,105,226,147,211,143, 78, 54,178,167, 21, 98, 65, 65, 1,242,242,242,208,167, 79, 31,229,182,109,219, 62, 7,176,163, 42,231, -170, 85,171,166,113, 28, 39,177,183,183,151,109,223,190, 29, 9,217,122,124,183, 41, 14, 69,186, 39,229, 52,147,137, 48,166,179, - 12,157, 58,117, 98, 83, 83, 83, 39, 0,248,245, 69, 62, 87, 87, 87, 79,111,111,239,173,219,183,111,111,188,124,249,242,188,251, -247,239,151, 56, 57, 57, 77,121,110, 50,253,252,249,243,115,183,108,217,210,112,240,224,193,219,156,156,156, 6,165,165,165,221, -253, 43,246, 35, 75, 75,203,217,161,161,161,248,249,231,159,145,151,151,183,186,124,253,173,222,190,125,251,166,225,195,135, 99, -243,230,205,179, 9, 33,199, 77,104,197,122,187, 95,191,126, 56,124,248, 48, 78,157, 58, 53,139, 82, 26,251,146, 86,190, 56, 66, -200,212,253,251,247,135,245,239,223, 31, 27, 54,108,232, 2,224,194, 43,188,157,186,118,237,138, 67,135, 14, 33, 55, 55,247,133, - 29,143, 11, 10, 10,214, 29, 56,112, 32,176,107,215,174,152, 63,127,254, 91, 0,206,152, 80,207,121, 89, 90, 90,174, 93,177, 98, -133,218,215,215, 23, 3, 6, 12,208,149,149,149,189,247,205, 55,223,236,217,185,115,167,217,230,205,155,253, 70,140, 24,113,150, - 16, 50,138, 82, 26, 97,202,186,100, 89,118,230,170, 85,171, 62,233,208,161, 3,198,143, 31,111, 60,122,244,104, 95, 74,233, 73, - 66, 72,252,132, 9, 19,126, 93,188,120, 49,187,120,241,226, 79, 88,150,205,230, 56,110,250, 95,177,189,121,158,159,191,100,201, -146,198, 77,154, 52,129, 78,167, 67,124,124, 60,210,211,211,127,206,204,204, 60,121,243,230,205,185,105,105,105,251, 28, 29, 29, -135,142, 27, 55,206,197,223,223, 95, 93,175, 94, 61, 43, 83, 90,208, 42,181, 76,101, 1,184, 11, 32,176,188,229, 10, 0, 2, 0, - 60, 40,255,219, 10, 64,190, 73,133, 37,204,173,251, 9, 41,238,214,102, 22,200,227,165, 72, 72,201,129, 66,165, 2, 67, 25, 24, -181,121,104,232,230, 0,158, 2,133,217, 41, 96, 24, 98,210,109,100, 12, 60,141, 73, 76,202,112,182, 82,201,209, 80,221,211,230, -218,233, 13,235,173, 60,219,141, 22,177, 28, 43,146, 90,172, 26,208,255, 19, 91, 35, 71, 81,156,151, 6,194,178, 87, 33, 32,240, -186, 2, 22,199,113,100,243,230,205, 22,153,153,153,140,151,151, 87,110,243,230,205, 53, 82,169,148,215,106,181,156, 92, 46, 55, -170, 84, 42, 94,167,211, 73, 31, 61,122,100,157,146,146,194, 86,156,134, 51,133, 51,103,206, 57,122, 54,242,205,124,157,206,151, - 28, 65, 26, 21, 10, 17,247, 58,157,111, 18, 60,207, 75,231,206,157,219,202,198,198, 70, 19, 24, 24,152, 18,236,105,127, 32, 85, -131,243, 75,151,253,119,112, 19,159,122, 91, 44,217,188,124,141,148,138,147,147,147, 29, 31, 60,120,160,164,148, 74,170,114,166, -166,166, 38, 1, 72,114,114,114, 90,215,161, 67,135,208, 94,189,122, 33, 60, 60,220, 94,163,209,216,171, 84, 79, 14,226,127,249, -229, 23,236,219,183,111,101,122,122,122,184,169,101,141,136,136, 88, 15, 96,125,203,150, 45,213,150,150,150,225, 22, 22, 22, 76, - 82,129,230,233,149,133, 18, 17,131, 54,223, 70, 34, 39, 47, 31, 98,134, 64, 46,151,187, 16, 66,152,151,181,140,149,255,200,255, - 0,224,135,192,238,195,223,181,120,180,115,253,146,165, 75,101, 21, 71,166,117,172, 37,200,207,207, 71, 86, 86, 22,178,179,179, - 33, 18,137,160,211,233,188, 95,121,136, 92,201,233,235,235,219,209,214,214,118,191, 82,169,100,105,182, 6,121,197,101,207,156, -130,204,203, 47,133, 88, 44,134, 74,165,242,124,145,203,206,206,206, 76, 34,145,172,253,233,167,159,188,204,205,205,217, 17, 35, - 70, 88,142, 24, 49,162, 53,128,214, 47,154, 94,169, 84,178, 27, 54,108,240,108,209,162,197,218, 6, 13, 26,244,122,248,240, 97, -225,159,216,114,197, 2, 24,254,205, 55,223,248,201,229,114,172, 90,181, 42, 1,192,207,229,111,255,186,102,205,154,137,253,250, -245,107, 52,118,236, 88,159, 41, 83,166,140, 33,132,124,255,170, 14,228, 18,137,164,165,143,143, 15,246,238,221, 11, 60, 57, 45, -248, 42,246, 94,188,120, 49,172, 87,175, 94, 80, 40, 20,234,170, 26, 93,234,214,173,139,253,251,247, 3,192,245,151, 76,115, 61, - 54, 54, 22,125,250,244, 1,195, 48,110, 38, 44,123,175,183,223,126,123,219,252,249,243, 69,230,230,230,248,244,211, 79,245, 87, -174, 92,233, 67, 41, 61, 79, 8,233, 54,104,208,160,163, 91,183,110, 85,157, 61,123,214,107,238,220,185,167, 88,150, 13,227, 56, -110,102, 21,206,193,115,230,204,249,230,189,247,222,195,204,153, 51,233,207, 63,255, 60,140, 82,122,178,124, 31, 59, 65, 8, 25, -110,109,109,189, 97,210,164, 73,164,160,160,224, 27, 66, 72, 10,165,244,191, 47,243, 21, 23, 23, 23,114, 28, 87, 71,171,213,154, -212,103,203,212,233, 61, 61, 61,223,110,210,164, 9,246,239,223,143,222,189,123,227,248,241,227, 16,137, 68, 71,146,147,147,207, - 2, 56, 9, 0, 78, 78, 78, 22,113,113,113, 95,182,107,215,142, 57,117,234,212,187, 0, 54,154, 80,132, 68, 0, 77, 1,156,162, -148, 38,151, 95, 56,217, 10, 79,238,131,117,151, 82,154, 84, 62, 93, 19, 0, 15, 77,170,235, 12,197,219, 79, 30,218,211,190,203, - 7,163, 44, 88,150, 64, 4, 9, 74,138, 10, 1,142,131,167, 91, 29, 4,250,212,193,245, 68, 45, 46, 30,223, 93, 80, 82,162, 49, -233,246, 18,156, 65,179,245,228,209,125, 33, 1, 93,134, 88,200, 60,125, 80,183,206, 87,205,111, 69, 28,251, 93, 46,149,144,247, - 63,232,107,217, 49,176, 33, 78,222, 40,196,165,147,123,243,181,154,252,173, 66,100, 16,168, 81,192,122, 81,231, 50,158,231,179, -143, 31, 63,174,156, 58,117,106,177,147,147,147,168,184,184,152,169,220,135, 73, 34,145,192,201,201,201,152,159,159, 95,118,252, -248,113,119,158,231,115, 95,217, 28,203,202,210,127,220,190,202,149, 35, 74,125,215,238,189,121, 87,215,250,181,118, 2,128, 78, - 47,203,222,115,100,175, 85,251,192,182,226, 58,118,117, 94, 84,217, 87,219,249, 55, 34,237,193,131, 7,118,115,231,206,189,238, -226,226,162, 3, 0, 91, 21,151,158,115,251,215, 60,179,250,189,210,197, 50, 25,236,237,237, 75,205,204,204,140,135, 14, 29,122, -139, 82,154,110,170,216,218,218,250,187,208,208, 80,230,220,185,115,195, 7, 13, 26, 68,220,221,221, 17, 19, 19,131,173, 91,183, -210,221,187,119,127,159,158,158, 94,163,163,110,153, 76,150, 80, 86,246,236,173,111, 42, 95, 89,152,151,151, 7,166, 40, 27, 28, -199, 25, 77,189,187, 59,151,117, 61,162, 84,161, 64,211,122,255,127, 22, 39, 47, 47, 15, 89,217,217, 79, 3, 86,102,102, 38, 88, -150,213,153, 90, 78,169, 84,250, 72,175,215, 63, 87, 78,190,114, 75, 9,184,252,108,148, 61,191, 48,229,100,103,103, 23,187,184, -184,252,184,106,213,170,249,179,102,205,178, 95,182,108, 89, 94,108,108,108, 17,195, 48,186,231,190,103,114, 15, 15, 15,179, 37, - 75,150, 56,172, 92,185, 50, 15,192, 15,127,114,184,234,221,172, 89,179,117, 61,122,244, 48, 27, 53,106, 20, 86,174, 92,137,244, -244,244,105,148, 82, 99,121,221,192, 19, 66, 38,175, 89,179,230,151, 9, 19, 38,160,172,172,108,254,161, 67,135,166, 16, 66,190, -164,148,254,252, 34,167,189,189,189,139, 72, 36, 66, 84, 84, 84, 17,165,244, 97, 21,161, 54,195,203,203, 43,147, 16,226,224,232, -232,232,254,170,105,109,108,108, 26,152,155,155, 35,229, 73,191,208,196,151, 76,246, 56, 53, 53,149, 74,165, 82,226,228,228,228, - 89,213,242, 91, 89, 89,125,253,211, 79, 63,137, 78,159, 62,141,233,211,167,167, 60,122,244,232,211,242,219, 8,128, 82,122,141, - 16,210,165, 99,199,142,155, 38, 76,152,208,112,225,194,133, 36, 54, 54,118, 4,128, 87, 6, 44, 55, 55,183,225,195,134, 13,195, -170, 85,171,176,118,237,218,177,148,210, 95,159, 91,230,221,132, 16,107, 27, 27,155, 37,161,161,161,216,184,113,227,199, 0, 94, - 26,176,210,211,211,167,124,252,241,199, 19,243,242,242,194, 76,217,166,166, 76,239,226,226,210,115,224,192,129, 14,148, 82,172, - 92,185, 50, 99,213,170, 85, 37, 5, 5, 5, 63,167,165,165,157,125,174, 37,110,255,145, 35, 71,190, 28, 53,106, 20,194,195,195, -151,186,184,184,208,148,148,148, 77, 85,108,211,116, 66, 72, 3, 66, 72, 99, 74,233,221,242,171, 4,147,159,219,239, 26,150, 79, -155, 98,202, 50,101,199,158, 62,228,208,180,199,165,107, 17,225,111,185, 55, 13, 17, 59, 88,155,195,165,145, 29,108, 84, 18, 80, - 0, 55, 31,105,113,249,236, 49, 67,102,198,227,203,166, 92, 65, 88,225,116,244,237,121, 89,105,123,238,173, 6, 77,130, 69,238, - 13, 27,161, 75,155,230, 86,182, 22, 98,232, 13, 20,199,175, 21,224,210,217,195,134,172,204,228, 51,194, 21,132,127, 44,255,180, - 14,238, 85,182, 96,101,101,101,253, 71, 34,145,180, 27, 54,108, 88,191,144,144, 16,243,145, 35, 71,102, 90, 88, 88,104,164, 82, - 41,107, 99, 99, 35,165,148, 74,143, 29, 59,230,156,158,158,110, 13, 96,103, 86, 86,214,217,231,190, 64,207, 60,109,123,228, 44, -141, 23, 33,132,184,184, 88,181, 19,237,252,188, 95, 72, 72,136,170,182,206, 25, 51, 64,103,180,215,121, 94,114, 36, 83,115,242, - 15,141,118,117,116,100,219, 5, 4,139,205,148,170,242,144, 96, 35,229,121, 72,170,227,124, 77, 63, 90,127,138, 83,175,215,191, - 21, 31, 31,255,209,160, 65,131,198,171,213,234,219,147, 38, 77,186, 98,101,101,101, 40, 63, 82,132, 94,175, 23, 31, 63,126, 60, - 40, 57, 57,185,137,193, 96, 88, 2, 96,151,169,229,188,125,251,118, 25,128,175,156,157,157, 15,102,102,102,254,214,175, 95, 63, -108,220,184, 17, 23, 47, 94,236,146,154,154,122,169,166,203,126,233,210,165,188,110,221,186,105,239,222,189,171, 98, 85,117,225, -104, 45, 65,183,169, 49,160, 60,133,153,156, 66, 83, 84, 0, 67,110, 46, 74, 74, 74,238,152,234,140,138,138, 74,111,219,182,173, -238,225,195,135,178, 6, 13, 26, 60, 9, 87,229,193, 42, 43, 43, 11,185,185,185, 40, 44, 44,164, 98,177, 56,202, 84,103,100,100, -100, 66,215,174, 93,185,196,196, 68,150,101,237, 81,199, 74,130, 78, 19,159,204,110,173, 4,138, 10, 11,160,205,206,134, 86,171, -125,169, 51, 37, 37,101,183,139,139, 11, 0,204,159, 54,109,154,109,183,110,221,226, 34, 34, 34,186, 86,254, 28,127,127,255,159, -103,205,154,213,109,238,220,185, 57,155, 55,111,158,146,154,154,186,243,207,220,151,108,108,108,190, 60,116,232,144, 89, 89, 89, - 25, 86,174, 92,137,165, 75,151,110,166,148,238,123,174,242, 59,194,178,236, 90,134, 97, 66, 71,143, 30,141,208,208, 80,165,191, -191,255,151,149, 90,185,158,113,166,164,164,204,244,243,243,155,152,149,149,101, 82, 32,184,127,255,254,104, 63, 63,191, 9, 89, - 89, 89,203, 94,181,236, 42,149, 74,197,113, 28, 18, 18, 18,242, 41,165,133, 47,169,168,117, 94, 94, 94,169, 28,199,185,168, 84, - 42,235,170,246,207,252,252,252, 48,181, 90, 61, 57, 51, 51,243, 36,128,133,148, 82,221,115,190, 27,132, 16,255,177, 99,199,126, - 62,127,254,252,119, 50, 50, 50,246, 84,229,124,244,232, 81, 88,199,142, 29,191,187,119,239,222, 54, 74,233,250,151,148,243, 71, - 66, 72,217,182,109,219, 70, 36, 36, 36, 44,126,149, 51, 57, 57,249, 48,128,195,166,110,223,151, 77,255,220,118, 31, 55,102,204, - 24, 28, 62,124, 24,197,197,197,223,167,164,164, 44,125,137, 43,194,221,221,253, 96,235,214,173,123,134,133,133, 73,122,244,232, - 49, 2,192, 38, 19,246,207, 43, 0, 90,149,247,131,187, 7,160,226,192,214, 26, 79,110,217, 64,240,146,171, 51, 95,230,164, 84, - 59, 36,230,220,222, 77, 73, 15,174, 7,169, 59,244,177, 42, 40,113,133, 68,196,160, 56, 47, 13,151, 78,252,154,159,154, 18,127, -165,172, 76, 51,164, 58, 78,142, 43,249,228,250,249,189,155,211, 19,111, 7,150,180,233, 97,149, 95,228, 6,137,136, 32, 63, 59, - 25, 87,194,247,231,165, 37, 37, 92, 48,112,165,161,127,101, 61,255,111,113,254,171, 2, 86,249,233,146, 51,106,181,250, 98,120, -120,120,183, 11, 23, 46,188,211,169, 83,167,204,224,224,224,226,232,232,104,183,132,132, 4, 7, 0, 7, 28, 28, 28,142, 68, 69, - 69,153,116,231,228,215,237, 44,247, 25, 1, 50, 99,230, 23,118, 97,201, 55,178,151,166,101,238,233,235,233,230, 78, 0,144,168, -168, 24,183,132,132, 4,251,234,150,243,111,148,250, 41,128,159, 9, 33,123,175, 92,185, 50,226,253,247,223, 15,237,212,169,211, - 21, 74, 41,185,120,241,162,250,209,163, 71, 65, 28,199,173,231,121, 62,180, 38,143,201,169, 56,229, 34,145, 72,168,151,151, 23, - 81, 40, 20,144,201,100,119,106, 91,238,252,252,252,241, 75,150, 44, 89, 51,119,209, 74,246,139,183, 45,145,157,147,131,156,156, - 28,228,229,230, 66, 2, 45,174,221,190,197, 21, 23, 23,143,175,142,179,172,172,108,210,212,169, 83,195, 22, 47, 94,172, 42, 42, - 42,122, 26,176,114,115,115,161,213,106, 17, 30, 30, 94, 90, 86, 86, 54,165, 58,206,194,194,194,105, 97, 97, 97,243,198,140,159, -204,140, 8, 17, 35,191, 80,139,252,252,124, 20, 23, 21, 65, 70,180,136,184,117,139,211,235,245,223,190,202, 81, 30,178,104, 82, - 82,210,148,162,162,162, 7, 47,248,140,244,209,163, 71,167, 93,188,120,113,118,114,114,242,142, 63,123, 31,202,205,205, 93,212, -170, 85,171,133, 89, 89, 89, 9,101,101,101,191, 82, 74, 95, 88, 6,142,227,198, 17, 66,174,172, 94,189,250, 67, 59, 59, 59,135, -244,244,244, 37,175,216, 47,171, 21, 8, 76,157,254,241,227,199,211,212,106,245,183,153,153,153, 75,170, 8,108, 95,151, 79,183, -204,132,207, 62, 2,224, 72, 21,211, 24,241,228, 22, 21,171, 76, 92,158,223, 1,252,110,194,116, 27, 0,108,248, 43,234,142,188, -188,188,197,189,122,245,154,154,145,145,113, 38, 61, 61,125,197,171,166, 53, 24, 12, 67, 66, 67, 67,167, 58, 58, 58, 6,101,102, -102,174, 52,113, 29, 24, 1,156, 47,127, 84,142, 7,128,138,171,240,242, 1, 36,214,228, 81, 57,229,119,104,255,192,206,187,115, -143, 19,123, 86, 12, 2,199,249, 2, 4,140,152,189,161, 43,209,108, 53,181,229,234, 5,206,247,237,188, 59,247,200,205, 72, 28, -204,115,156, 47, 67,192, 19,150,189, 89,170,211,108,204,188,125, 66,120, 84,142, 64,205, 66,104,117,158,133,235,236,236,172, 16, -139,197,239, 81, 74, 3,121,158,143,224,121,126, 95,106,106,170,182, 54, 9,247,245, 59, 9,249,122,144,162,142,153, 2, 63,154, - 41,208,108,245, 94,235,169, 70, 35,191,183,182,229,252,187, 28, 49, 16, 66, 84, 18,137,100, 60,207,243, 3,120,158,223,206,243, -252,146, 87,221, 91,200,212,114, 54,108,216,112, 77,199,142, 29, 7, 29, 61,122,116,221,163, 71,143,198,191,142,101, 15, 9, 9, -217, 88,183,110,221,247, 59,116,232,192,202,229,114,164,165,165, 33, 55, 55, 23,247,238,221, 51,230,228,228,204, 59,127,254,252, -194, 26, 56,255, 43,149, 74,223,233,221,187,183, 82, 34,145, 32, 55, 55, 23, 5, 5, 5,244,252,249,243,122,134, 97, 38, 94,188, -120,113, 93, 53,215, 39, 9, 9, 9,249,181,110,221,186,111, 5, 7, 7,179, 18,137, 4,121,121,121,200,201,201,193,221,187,119, -185,172,172,172,255, 92,190,124,249, 71, 83,156,158,158,158,210,184,184,184, 23,246,137, 81,171,213,226,151,133,127,225, 40, 89, -112, 10, 78,193,249,111,107,193, 34,132,140,164,148,174,251,199,182, 96, 61, 79,121, 72,217,142, 90, 60,159,234,143,119, 82,186, -108, 43,210, 1,242,238,204,153, 32,143,147,180, 79, 46,136,255,151, 80, 30,166,102,162,138, 62, 34,213,229,193,131, 7,163,156, -157,157,191,121, 85, 80,173, 46,231,206,157, 27,234,231,231,183, 43, 57, 57,121,138, 66,161,104,204,113,156, 81,175,215, 95,211, -235,245,147,175, 92,185, 18, 93, 67,231, 8, 63, 63,191, 95,246,237,219,247, 21,199,113, 77, 24,134, 41,165,148, 70, 81, 74,103, - 95,188,120, 49,182,134, 45,132,125,252,252,252,250,164,164,164,124, 43,147,201, 26,241, 60,111, 40, 45, 45,189,170,215,235,255, -115,229,202, 21,147,157, 47, 11, 87,192,147, 91,100, 8,199,123, 2, 2, 2, 2,255, 28, 68,255,220, 69,163,116,250,116, 80, 76, - 23, 54,242,107, 14,195,175,149,232,232,232,163, 0,142,190,102,231, 49, 0,199, 94,179,115, 47, 76,188, 35,182,128,128,128,128, -128, 0, 35,172, 2, 1, 1, 1, 1, 1, 1, 1,129,215, 11, 1,208,236, 69,111, 84,231,220, 42, 33,164, 89,117, 63,216,132,190, - 47,130, 83,112, 10, 78,193, 41, 56, 5,167,224,252,135, 57, 43,185,103,189,228,173,148,114,207,223,186, 15, 22,249, 35,187, 39, - 9, 29, 0, 5,167,224, 20,156,130, 83,112, 10, 78,193,249,111, 68, 56, 69, 40, 32, 32, 32, 32, 32, 32, 32, 32, 4, 44, 1, 1, - 1, 1, 1, 1, 1, 1, 33, 96, 9, 8, 8, 8, 8, 8, 8, 8, 8, 1, 75, 64, 64, 64, 64, 64, 64, 64, 64, 64, 8, 88, 2, 2, - 2, 2, 2, 2, 2, 2,111, 12,228, 95,116,147,115, 1, 1, 1, 1, 1, 1, 1,129, 63,133,103, 90,176, 8, 33, 66,218, 18, 16, - 16, 16, 16, 16, 16,248,211,249,167,101, 16,225, 20,161,128,128,128,128,128,128,128,128, 16,176, 4, 4, 4, 4, 4, 4, 4, 4, -254, 6, 1, 75, 56, 53, 40, 32, 32, 32, 32, 32, 32,240, 87,240, 79,205, 32, 21, 45, 88, 29,202, 23,176,131,176,169, 5, 4, 4, - 4, 4, 4, 4,254, 68,254,145, 25, 68,184,138, 80, 64, 64, 64, 64, 64, 64, 64,224, 53, 35,244,193, 18, 16, 16, 16, 16, 16, 16, - 16,248, 59, 5, 44, 66, 72, 51,193, 41, 56, 5,167,224, 20,156,130, 83,112, 10, 78, 33, 96, 9, 8, 8, 8, 8, 8, 8, 8, 8, - 8, 1, 75, 64, 64, 64, 64, 64, 64, 64, 64, 8, 88, 2, 2, 2, 2, 2, 2, 2, 2, 66,192, 18, 16, 16, 16, 16, 16, 16, 16, 16, - 16, 2,150,128,128,128,128,128,128,128,192, 95, 4, 1,240,194, 43, 1, 40,165, 55, 77,150,212,224,106,130,170,252,130, 83,112, - 10, 78,193, 41, 56, 5,167,224,252,231, 57,171,114, 87, 39,127,188,209, 1,235,143,188,209, 40, 33,164,217,235, 94, 81,130, 83, -112, 10, 78,193, 41, 56, 5,167,224,252,231, 57,255,105,136,132, 85, 32, 32,240, 55,103, 15, 97, 97,231, 83, 31,132, 58,130, 72, - 50, 16,126,253, 33,166, 83,190,214, 78,199,166,245,160, 55, 56, 64,161,200,198,241,152,132, 90, 59, 5, 4, 4, 4,132,128, 37, - 32, 32,240,183,193,181, 73, 67, 24,248, 89, 0, 28, 1,125, 60,218, 53, 91, 12,224,118,173,156, 14, 77, 26,130,231,167, 67,194, -184,160,172,244, 1, 58,250, 44, 6, 16, 43,172,108, 1, 1, 1, 1,211,248, 75, 58,185,251,251,251, 95, 8, 8, 8,152,214,161, - 67, 7,153,176, 9, 4, 4,106,193, 77, 95, 37, 12,134,183, 75,203,120,231, 35, 23,115,237, 53, 58,174, 17,152,178,174,136,109, -162,170,149,147,225, 59,235,202,184,186, 91, 79,104, 28,138,117,198,198,224,185,218, 57,203,105,209,162,133,101, 96, 96,224,126, -181, 90,109, 43,108, 60, 1, 1, 1, 33, 96,189,102, 40,165, 45, 28, 28, 28,198,104,181,218,187,126,126,126, 61,255, 77, 43, 60, - 40, 40,232, 84,235,214,173, 19,131,131,131, 19,131,131,131, 47, 86, 53,254,159,138,191,191,127,139,182,109,219, 30,110,210,228, -201,143,182,239,231,251,236,253,134, 31,243, 8,250,242,136,139,240,181,172, 6, 69,212, 1, 96,219,199, 38,148, 40, 50,242,140, - 14, 81,119, 53,102,160,108, 59,228,240,142,181,114,242,164,125, 76,156, 78,121, 41,222,222,225,194,173, 82,115,128,109, 95, 43, -103, 57, 34,145,104, 4,128, 78, 44,203,142, 22, 54,222,191, 27, 66, 72, 19, 66, 72, 79, 66,136,250, 53, 58,231,248,248,248,196, - 17, 66,190, 16,214,176,192,223, 38, 96,125,232, 65, 90, 15,240, 32, 71,251, 53, 32,153,253, 61, 72,230, 64, 15,114,226,195, 70, -164,109, 77, 63,248,151, 95,126, 81,108,217,178,197,190, 89,179,102,155,130,130,130, 78, 4, 5, 5,121,214,196, 19, 24, 24,184, -223,223,223,255,253,231,199,169,213,234, 15,159, 27,119, 53, 48, 48, 48, 61, 32, 32,224,150, 41, 94,181, 90,125, 67,173, 86,103, -249,251,251,223,120,110,252,135,129,129,129,251,159, 11, 11,239, 63, 63,238,101,176, 44,235,114,224,192, 1,251,131, 7, 15,218, -139,197, 98,135,231,199,255,254,251,239,207,140,175, 46, 1, 1, 1, 67, 3, 2, 2, 78, 85, 30,231,231,231, 55,228,249,113, 85, - 44,251, 41, 63, 63,191, 33,207,121, 79, 5, 4, 4, 12,125, 77, 33,211, 79, 42,149, 30, 45, 43, 43,107,171, 82,169,148, 0, 32, - 50, 40,204,121,137,232,195, 50, 42,106,233,251,237,113,123,225,171,105, 2,177, 77, 36,224,141,109, 56,158,218,221, 74,208,217, -119,239,245,161,232,250, 3,173,157,129,227,172,193,163, 29,206,212,151,213,200,201,233,131, 57,202, 59,156,140, 17,219,119,232, - 57,154, 61,125, 83,108,103,224, 56, 27,112,124,219, 26, 57,255,127,191, 18,179, 44,251,229,200,145, 35, 25, 66,200,103,158,158, -158,210,127,211,230,106,221,156, 56,191,229, 47, 58, 27,208,148,180,126,141,129,194,199,204,204,236, 60, 33,164,225,223, 44, 92, -181, 0,160,164,148, 30, 4,224, 64, 8, 17,189, 6,231,194, 89,179,102,125,125,227,198, 13,167, 6, 13, 26, 76, 33,132,176, 66, - 37, 33,240,198, 7,172,143,221,201,100, 39, 71,151,223, 38, 47,219,222,246,191,103, 30,170,190, 63, 16,173, 26, 63, 97, 94,107, - 39, 75,251,189, 3, 61,200,236,151,205,247,170, 43, 12,164, 82, 41,226,227,227,177,106,213, 42,249,140, 25, 51, 90,153,153,153, - 93, 9, 10, 10, 90, 84,209,162, 97,170,147, 82,218, 74, 34,145,172, 9, 10, 10, 90, 91,169,194,110, 37,151,203, 87, 7, 5, 5, -173,175, 56, 13,169, 86,171,235, 71, 68, 68,152, 19, 66, 28, 76, 41,103, 96, 96,160, 99, 84, 84,148,146, 16,226, 8, 0, 29, 58, -116,144, 5, 6, 6,254,228,234,234,186, 10, 64, 43, 0,240,244,244,148, 6, 5, 5,173,173, 91,183,238,247,132,144, 86,166, 44, - 59,195, 48,176,178,178,194,246,237,219,193, 48, 76,229,202, 1, 86, 86, 86,216,182,109, 27, 8, 33,213, 94,159, 77,154, 52, 81, - 5, 6, 6,110,119,114,114, 90,196,243,124, 16, 0,248,250,250, 42, 3, 3, 3,183,185,186,186,134, 85,140, 51,209, 25, 36,147, -201, 22, 5, 6, 6,110,243,245,245, 85, 2, 0,207,243, 65, 98,177,120, 97, 96, 96,224,246,234,110,163,246,237,219,143,106,213, -170, 85, 94, 64, 64, 64, 81, 72, 72,200, 54,150,101, 15,207,157, 59, 87, 41,151,203,245, 70,107, 55,149, 58,244,100, 93,137, 88, -106,164,132, 41,165, 28,102,137,139, 36,214,158, 95, 30,145,154,186,236, 53,229,111,239,204, 98,237, 65,208,241,222, 35,173,220, -189,161,191,210,193,251, 67,216, 91,137,101,151,239,104,204, 32, 34, 29,192,168,236,106,228,132,184,227,173,120,173,194,198,163, -187, 34,160,117, 59, 64,217, 80,118,230,154,198, 28, 34,182,102,206,255,127,255,189,224,224, 96, 73,231,206,157,225,236,236,204, - 88, 88, 88,124,252,143,223, 70,149,194,149,153, 76,122,102,201,172,175,253, 28,109,148,187, 76, 9, 89, 38, 92, 62,239,227,224, -224,112,100,245,234,213, 45,205,205,205,143,155, 18,178,222,132,245, 89, 30,174, 36,148,210,136,138, 88, 15, 32,184,150,206,133, - 51,102,204, 24, 61,113,226, 68, 20, 21, 21, 97,200,144, 33,230, 0,230,215,196,217,183,111, 95,182,111,223,190,236,191,162, 14, -121,195,156, 85, 32, 5,208, 17, 64, 79, 0,111, 1, 8, 44,255, 59,160,124,232, 9,160,243,115,175, 1, 21,109, 4,229,255, 7, -189,196,209,243, 5,243, 5, 84, 26, 95,249,255,231,255,126,117,192, 34,132,208,202,175,207,236,108,158,164,149,157,147,203,215, - 11,246, 70, 42,248,251,215, 16,253,105, 39,220, 29,251, 30, 20, 15,174, 97,194,152,239, 20, 22, 22, 86,159,245,245, 36,237,106, -178,182,238,223,191,143, 29, 59,118,192,206,206,142,172, 95,191, 94,246,209, 71, 31,141,176,176,176,184,239,239,239,255,177,169, - 14,134, 97,248, 13, 27, 54,168,222,125,247,221, 15,109,108,108, 34, 3, 2, 2,220, 25,134,225, 55,111,222,172,234,215,175, 95, - 31,189, 94, 31, 21, 20, 20,228, 25, 29, 29,205, 69, 70, 70,130,101, 77, 59,168,137,138,138,226, 14, 31, 62, 92,209,226,226, 9, - 32,106,193,130, 5, 31,238,221,187,215,204,194,194,130, 6, 4, 4,184,215,173, 91, 55,114,209,162, 69, 31,255,242,203, 47,102, -230,230,230,212,196,138, 0, 58,157, 14,114,185,252,153, 32, 85, 49, 94, 38,147,189, 52, 96,189,162,213,202,199,214,214, 54,122, -254,252,249,189,246,237,219,167, 48, 55, 55, 71,171, 86,173, 26, 91, 89, 89,197,132,133,133,245,222,191,127,191,194,220,220,220, -100,159, 68, 34,193,214,173, 91,149, 3, 6, 12,232, 41,147,201,162, 91,181,106,213, 88, 34,145, 96,251,246,237,202, 1, 3, 6, -116, 87, 42,149, 81, 1, 1, 1, 62,166,250, 56,142,155,176,108,217, 50,233,174, 93,187, 88, 55, 55,183, 46,115,231,206, 85,170, -213,106, 66, 41, 5,149, 54,180, 52,138,232,135, 58,198,232,194,234,203,126,103, 64, 50, 56, 81,217, 64, 43,142, 21, 90,177, 94, -197, 30,194,130,148,181, 0,136, 71,212,253, 18,219, 22, 33, 3, 69,200,252, 13,129,222,102,162,211, 81, 69, 14,148, 71, 61,112, - 70,127,156,233, 32,170,150, 83, 98,240, 5, 67, 61,143, 95, 99,108,131, 59, 15, 20, 61,126,252, 24,238, 62, 29,216, 3,145,112, -160, 20,245, 65, 56,191,106, 57,159,221,175, 38,245,237,219, 87,149,152,152,136,224,224, 96,165, 76, 38,155,248, 90, 90,241, 46, -121,215,195, 57,239, 16,156,247,118,172,105,217,254,232,150, 43, 51,153, 52,124,251,214,159,157,124, 67,134,147,181, 95,187, 89, -219,154, 73,118,213,166, 37,171, 60, 92, 29,190,114,229,138,205,219,111,191,141, 25, 51,102,216, 89, 88, 88, 28,127,211, 91,178, - 42,135, 43, 66,136,162,252,244, 96, 42, 0,151, 90, 56,195,102,204,152, 49,122,210,164, 73,184,124,249, 50, 22, 45, 90,132,238, -221,187,195,202,202, 42,208, 84,135,191,191,127, 64,251,246,237,119,180,111,223, 62, 45, 41, 41,169,240,209,163, 71,133, 33, 33, - 33,105,237,219,183,223,225,239,239, 31, 80,155, 69, 46, 31, 4, 94,189, 13, 95,154, 65, 42,209,124,226,196,137,129,132,144,223, - 39, 78,156,232, 15,192,142, 16,242, 59, 0,123, 0,246,229,127, 75,159,123,181, 47, 15, 77, 21,239,219,190,200, 81, 49, 60, 55, -159,125,165,241,149, 63,227,249,191,171,110,193, 34,132,180, 7,112,246,249, 9,196, 60,166,134,142,155, 45, 79,216,180, 20,105, - 91,151,129,100,167,128,205, 79, 71,233,217,223, 96, 56,247, 27, 6,183, 14, 86, 40, 64,166,215,100,165,154,153,153, 65, 34,145, -224,254,253,251,184,115,231, 14,186,119,239, 46, 89,185,114,165,101,179,102,205, 86,183,105,211,230,114, 80, 80, 80, 51, 19, 54, - 12, 26, 53,106,132,126,253,250, 73,199,142, 29,219, 64, 42,149, 94,164,148,138,220,221,221,241,209, 71, 31, 73, 38, 76,152,224, - 38,149, 74,207,243, 60, 47, 81, 42,149, 38,135, 23, 66, 8,148, 74, 37, 0,136, 61, 60, 60, 46,236,216,177,163,126,155, 54,109, - 68,199,142, 29, 67, 81, 81, 17,219,176, 97,195,203, 59,118,236,240,104,221,186,181,232,252,249,243,208,106,181, 38, 7, 44,141, - 70,243,194,128, 85, 92, 92,252, 63,227, 77, 8, 87, 67, 27, 52,104,112,110,231,206,157, 46,109,219,182,101, 79,159, 62,141,162, -162, 34,184,186,186,158,223,185,115,167, 75,112,112, 48,123,241,226, 69, 20, 21, 21, 85, 43, 96,149,175, 63,241,248,241,227, 93, - 88,150, 61, 39,145, 72,224,230,230,134,143, 62,250, 72, 50,110,220, 56, 23,137, 68,114,198,212, 83,134, 28,199, 73,237,237,237, - 97,105,105,137,225,195,135, 43, 27, 55,110, 76,140, 70, 35, 40,165,144,150,105,202, 8, 79, 27, 17,194,188, 79, 88,182,140, 3, -217, 70, 40, 27,194, 27, 69, 18,161,218,121, 5, 22,205,108,192,146, 78,143,210, 74,101,114, 85, 93, 51,149, 93, 99, 32,247, 44, - 26,184,200, 64, 8, 35,139,136, 45, 86,129, 37,157,192,229,216, 84,203,201,161,211,195,148, 82, 89,153,162,169,202,217,165, 30, -178,179,179, 81,215,221, 27, 58,198, 94,122,241, 86,177, 10,180,154,206,114,212,106,117,155,186,117,235, 58,214,175, 95, 31,217, -217,217,104,216,176, 33,204,204,204,172, 90,182,108,217,169,198,235,224, 76,125, 25, 10,153, 86,224, 48, 31,192, 20,128,153, 5, -146,221, 2,209,106,241,155, 22,174,118,108,251,217,217,214,169, 49,112,115, 56,234,216, 72,177,126, 98,115,107, 91, 51, 89,141, - 66, 22, 33,196,167, 78,157, 58,135,175, 92,185, 98, 43,151,203, 17, 21, 21,133, 38, 77,154, 96,233,210,165,118, 86, 86, 86,111, -108,200,122, 46, 92, 89, 83, 74,181, 0,120, 0,125, 81,131,171, 94,201, 19,150,206,158, 61,123,212,164, 73,147,112,233,210, 37, -184,184,184, 32, 51, 51, 19,237,218,181,123,156,159,159,191,208,148,214,170,118,237,218,125,111,109,109,253,251,136, 17, 35,122, -109,223,190,221, 98,223,190,125,164,125,251,246,164, 94,189,122, 22, 35, 70,140,232,101,109,109,253,123,187,118,237,190, 55,181, - 85,171, 28, 17, 0, 57, 0,101,197, 16, 31, 31, 47,245,244,244,148, 18, 66,228,229,225, 82, 70, 8, 17,158,166, 82, 69, 6,169, -132,221,130, 5, 11,230, 81, 74,123, 45, 88,176, 96, 94,165,249,126,127,133,179,114,104, 2, 0, 60,239,160,148,246,170,252, 90, -121, 94, 74,105, 47, 74,105,175,202,243,191,234,243, 94, 26,176, 0,132, 83, 74,219,255, 79, 51, 32, 65, 51,199, 6,141,145,127, -124, 55, 20, 44,121,102, 96, 30,222, 68, 93,185, 8, 70, 74,125,106,178, 66,205,204,204,158, 14, 12,195, 32, 45, 45, 13, 44,203, - 98,218,180,105,242,209,163, 71, 55, 21,137, 68,167,219,183,111, 63,171,170,192, 2, 0, 17, 17, 17,104,216,176, 33,153, 52,105, -146,121,187,118,237, 68, 0,112,253,250,117,120,122,122,146, 57,115,230,152,245,238,221,155, 84, 39, 96, 49, 12, 3,185, 92,142, - 14, 29, 58,144,141, 27, 55,105, 73,136,162, 0, 0, 32, 0, 73, 68, 65, 84,170,100, 50, 25, 14, 30, 60,136,236,236,108,188,253, -246,219,162,141, 27, 55,170,228,114, 57,206,156, 57,131,130,130,130,106, 5,183,210,210, 82, 60, 95,150,151,181,108,189,138, 54, -109,218,252,224,232,232,184,104,203,150, 45, 50,133, 66,129,211,167, 79,163,160,160, 0,253,251,247, 55,110,219,182, 77,110, 97, - 97,129,139, 23, 47,162,160,160,160, 70, 59,124,165,117,170, 8, 14, 14, 54, 0, 64, 76, 76, 12,188,188,188,200,164, 73,147, 20, - 22, 22, 22, 11, 67, 66, 66,126, 48,161, 41, 25, 37, 37, 37,208,233,116,120,240,224, 1,114,115,115,145,156,156, 12,158,231, 65, -144, 89,196, 75,196,187, 8,207,189,207,138,101, 50, 17, 67, 98, 65,224, 77, 69,188,132,204,156, 41, 84, 62, 47,219,137, 36,165, - 13,193,147, 22,151,110, 23, 91,183,125,123,128, 4, 89,135, 1,106, 0,136, 8, 29,131, 92, 69,191, 93, 44,113, 0, 37,205,160, - 32, 94,128, 9, 59, 20, 33, 4, 98,189, 39, 40,241, 59, 30,101,180,105,219,245,115, 73,114,114, 50, 36, 18, 9,100, 50, 25,252, - 90,127, 32,218, 17,110,112, 4,224, 11, 57,105,100,146,243,217,208,254,221,176, 97,195,148, 41, 41, 41, 79,157,221,187,119, 87, -153,153,153, 77,170,113,184, 98,205, 2, 97,228, 70,223,122,168,173, 55,103, 75, 90,227,184,100,173, 23, 24,250, 37,244, 92,243, -218,134, 44,119,119,247,144,198,141, 27,223,246,240,240, 8,174, 77,184, 50,151, 73, 79,239,220,246,179,179,141,227,147,112, 5, -174, 4, 96, 21,112,116,176,198,250,233, 29,172,109,205, 21,213, 10, 89,229,225,234,208,229,203,151,109,229,114, 57,174, 94,189, - 10,169, 84, 10,185, 92, 14, 95, 95, 95,172, 91,183,206,206,218,218,250,141, 8, 89,132, 16, 43, 66, 72,103, 66, 72, 31, 66,200, -123,149,194, 85,125, 0, 29, 8, 33,157, 0,212, 1,112,158, 82,122,195, 68,103,176, 72, 36,250,181, 69,139, 22,241, 34,145, 40, -106,222,188,121,161, 19, 38, 76,192,138, 21, 43,208,161, 67,135,135,223,125,247, 29,238,222,189,107,212,104, 52,125, 41,165,135, -171,242,165,166,166, 78,241,240,240,248,112,223,190,125, 42, 55, 55, 55, 70,163,209,224,248,241,227, 8, 11, 11, 67,105,105, 41, - 92, 93, 93,153,125,251,246,169, 60, 60, 60, 62, 76, 77, 77,157, 98, 66,249,236,236,236,236, 26,226,201,233, 44, 25, 0, 5, 0, -101, 98, 98,162,234,244,233,211,214, 45, 90,180,176, 50, 51, 51, 83, 78,153, 50,197,121,236,216,177,189,170,106, 1,249,151,241, -194, 12,242,146,208, 84,249,247,165,215,203, 66, 79,197,123, 47, 10, 79, 53, 45,228,171, 62,239, 85, 1,171, 3, 33,228,204,139, - 38, 42,203,205,128, 12, 28,148, 44,129, 66, 68,158,188,178, 4, 10,194, 67,148,151, 81,205,170,246,217,128,101,110,110, 14,115, -115,243,103,130,150, 86,171,133, 70,163,121,166,143,210,203,168, 56,229,103,109,109,141,162,162, 34, 24,141, 70, 84,156, 14,179, -177,177, 65,105,105, 41, 8, 33, 80,169, 84, 80,169, 84,213, 14, 88, 0,112,233,210, 37, 92,184,112, 1, 34,145, 8, 54, 54, 79, - 14,222,175, 94,189,138, 27, 55,110, 64, 42,149,194,214,214,182, 90, 94,189, 94, 15,185, 92,254, 63,125,176,244,122, 61,100, 50, -153,201,167, 49, 25,134,129, 78,167,163, 87,175, 94,197,205,155, 55, 33,147,201, 96,111,111, 15,137, 68,130,164,164, 36,196,198, -198, 66, 42,149,194,222,190,102,223, 97, 11, 11, 11,228,231,231,131,231,121, 40, 20,138,167,227,138,139,139,193, 48,140, 73,219, -167,130,152,152, 24, 92,186,116, 9, 9, 9, 9,184,126,253, 58,238,222,189,139,103,158, 34, 64,203,155,209, 13,188,129, 2, 12, -107, 96,153, 25,152, 46, 84, 57, 47,172,134,154, 91,128, 17,189,149,149,111,144,101, 23, 75, 45,234,120,190, 5,100, 31, 6, 8, - 11,136,173,208,170,101, 3, 60, 78,231,148,119,147, 75,229, 40,227,186,224,152,143,149, 73, 78,145,168, 83,102,190, 65,150, 80, - 96,111,238,211, 76,141,204,204, 76,200,100, 50,200,100, 50,248, 7,189,133,248,116, 94,113, 43, 81,171, 4,207,119, 54,201,249, -255,173, 87, 13,228,114,121,160,159,159, 31,201,200,200,128, 76, 38,131, 92, 46, 71,235,214,173,193, 48, 76, 83,181, 90,237, 85, -173,229,143,247,148, 66, 98, 22, 0,112,163,239, 60, 44,113,218,127, 65,219,240,157,119, 62,176, 94,190, 39,203,235, 78,162,174, - 62,140,101, 99, 81,100,104, 89,211,144,229,238,238,222, 86,169, 84,254, 50,101,202,148,250, 98,177,120,111,131, 6, 13,218,212, -196,163,148,177, 43, 39,143,237,239,108, 93, 17,174,140, 26,128, 85, 0,172,242, 73,200,170, 99,135, 57, 99, 59, 91, 43,196,146, - 29,166, 58, 21, 10,197,166,213,171, 87,219, 85,132, 43,137, 68, 2,185, 92,254,116,240,243,243,195,244,233,211,237,172,173,173, - 55,254,197,225,202, 26, 64, 27, 0, 55, 1,236, 3,112,186, 82,184,242, 0,176,191,188,213,234, 26,165,244,177,137,206, 86,221, -186,117, 59, 28, 31, 31,223,245,218,181,107,142,233,233,233, 94,227,199,143,199,242,229,203, 49, 97,194,132, 93,148,210, 22,187, -119,239,110, 29, 17, 17, 17, 72, 41,189,109, 98, 29,250,233,192,129, 3,149, 10,133, 2,114,185, 28, 91,182,108,193,231,159,127, - 14,153,236,201,181, 28, 74,165, 18, 10,133, 2, 3, 7, 14, 84, 18, 66,134,153,160,204, 45, 44, 44, 52,235,211,167, 79,221,242, -150, 43,149, 94,175, 55,203,206,206,182, 96, 24,198,178,105,211,166, 14,211,167, 79,247, 42, 46, 46,110,126,224,192,129, 76, 0, -217, 66,133, 86,117, 6,121, 62,224,152, 50,174,166,211,155, 26,178,170, 21,176, 40,165,103, 0,180,123,193, 4, 55, 31, 71,158, -129, 77, 19,191,103, 91,176, 68, 4, 74,115, 11, 60, 76, 73,130, 24,228, 78, 13, 10,248, 76, 11, 86,197,144,150,150,134,239,190, -251,174,100,235,214,173,183,202,202,202, 58,158, 57,115,102,154, 41, 45, 88, 14, 14, 14,120,252,248, 49, 13, 11, 11, 43, 58,114, -228,136,177, 98, 92, 82, 82, 18,157, 58,117,106,241,207, 63,255, 76,171,123,138, 80,161, 80,224,204,153, 51,116,218,180,105,133, - 41, 41, 41,212,198,198, 6,182,182,182, 56,121,242,164,113,226,196,137,133,113,113,113,212,198,198, 6, 54, 54, 54,213,242,114, - 28, 7,133, 66,241,204, 60, 12,195,192, 96, 48,252,207,248, 87,113,238,220,185,207, 11, 10, 10, 38,124,251,237,183,218,219,183, -111, 83,123,123,123,216,219,219, 99,211,166, 77,162, 33, 67,134,104,175, 95,191,254,116, 92, 77,176,179,179,195,221,187,119,233, -252,249,243,181, 39, 78,156, 16, 3,128,189,189, 61,238,222,189, 75,103,207,158,173,205,207,207,159,112,238,220,185,207, 77,217, -214,185,185,185,200,206,206, 70,114,114, 50,178,179,179,145,147,147, 3,158,231, 65,225, 96,206,148, 25, 62, 2,203,236,229, 12, -165,165, 6, 17,105, 4,208,135, 28, 95,166,159, 62, 29,194,157,195, 95,132,148,171, 3,208,214,231,111, 20, 91,118,233,241,177, -148, 20, 70, 0,134, 98, 64,108, 13,136,173, 33,146,219,162, 91,167,150,236,198, 99,133,117, 64, 16, 4, 75,105,213,253, 91,196, -188, 3, 40, 31,124, 34, 90,103,213,182,251, 24,105,110,110, 46, 24,134,121, 26,176,148, 42, 21, 58,247, 24,200,108, 56,174,171, - 3,158,182,130,130,152,220,103, 70, 34,145,124, 61,108,216, 48,201,243, 78,133, 66,129,119,223,125, 87,166, 82,169, 38,152,188, -236,177, 77, 36,200, 84, 4,128,231, 70,223, 77,212, 58,237,187,168,109, 56,126,250, 6, 69,211,230, 65,248,236, 29,123,197,252, -173, 89,222,215,226, 75,234, 67,100, 28,131, 98,131, 31,214, 85, 47,100, 53,104,208,160,141, 82,169,252,117,223,190,125,202,142, - 29, 59,226,155,111,190, 81, 73, 36,146,189,238,238,238,213,190, 98, 90, 91,196,141,155,189,124, 75,230,245, 93,221, 0, 99, 81, -121,184,250,255, 33,179,128,199,212,213,167, 11,245,148, 31, 98,178, 83,171, 29, 49,124,248,240,220, 95,126,249,229,127,194,149, - 92, 46, 71, 66, 66, 2,230,204,153,147,151,151,151, 55,242, 47,222, 75,155, 3,184, 14, 64, 7,160, 45, 0,101,249,149,130,129, -229, 97,139,163,148,102, 82, 74,211, 77, 21,178, 44, 59,110,205,154, 53, 34,173, 86,139, 17, 35, 70, 32, 41, 41, 9,169,169,169, -152, 60,121,114, 34,207,243, 35,202,157, 55, 40,165,247, 76,117,106, 52,154,207,102,205,154,165, 77, 73, 73, 65,179,102,205,144, -153,153,137, 30, 61,122,160,103,207,158, 80, 42,149,240,245,245, 69, 82, 82, 18,102,206,156,169, 43, 41, 41, 49,165,174,227, 13, - 6,195,157,211,167, 79,203,123,245,234,213,104,241,226,197,238,167, 79,159,246, 44, 41, 41,169, 95, 90, 90,234,157,150,150,214, -228,192,129, 3,245,214,173, 91,151,148,152,152, 24, 73, 41,229,132, 10,237,213, 25,228, 53,112,176, 54, 45, 85, 47,106, 1, 51, - 21,166, 92, 68, 42,191, 62,211,122, 69, 48,123,243,158, 77, 58,169, 91, 35, 88,122,183,128, 82, 46,135, 66, 38,133,194,202, 6, - 58,158,199, 79, 9,233, 37, 26,208,153,181, 13, 88, 60,207, 99,237,218,181,186, 57,115,230, 20,164,165,165,125,121,246,236,217, - 86, 87,174, 92,169,242, 42, 5,134, 97, 80, 88, 88,136,221,187,119,107, 55,110,220,248,176,180,180, 52, 88, 44, 22, 27,245,122, - 61,182,111,223,174, 91,177, 98,197, 35,157, 78,215, 86, 44, 22,151, 85,231,244, 91, 69,192, 18,139,197,134,210,210,210,224, 93, -187,118,197,255,254,251,239, 90, 11, 11, 11,136, 68, 34,163, 78,167, 11,220,178,101,203,253,157, 59,119,106, 45, 44, 44,170,229, -229,121,254,133,125,176, 56,142,123,122,228,100, 42,145,145,145, 27, 13, 6, 67,251, 29, 59,118,164,108,220,184, 81,103, 97, 97, - 1, 0,224, 56, 46,100,243,230,205, 41, 63,254,248, 99,105,117, 58,184, 3, 64, 89, 89, 25, 56,142,195,230,205,155, 75,119,238, -220,153,194,243,124, 72,197,184, 13, 27, 54,232,182,108,217,146, 98, 48, 24,218, 71, 70, 70,110, 52,113, 91,235, 83, 83, 83,145, -150,150,134,235,215,175,235, 99, 99, 99,105,118,118, 54, 40,165, 48,136, 84, 34,202,144,251, 60,165,123, 40,199, 73, 88,138,143, - 9,200, 89,194,178,101, 66,149,243, 18,138,161, 4, 33,138,123, 73, 58,115,185,196, 64,144,254, 43, 32,177,126, 26,176, 32,182, -134,179,139, 43, 34,239,150,152,129, 64, 10,157,161,234,132, 93, 66, 85, 32, 68,121, 43,145,154,139, 36, 10,146,145,145,241,244, - 71,187, 34, 16,185,123, 52, 65,204,253, 18, 21, 8,100,224, 97,242,173, 68,120,158,239,110,102,102, 38,170,112, 86,248,100, 50, - 25, 26, 52,104,192, 26, 12,134, 46, 38, 47,123, 6,239, 8,206,248,217,189, 71, 58,167,125,231,181,158,227,166,110, 80, 40,152, - 60, 32,113, 5,154, 54,116,196,184, 79,154, 75, 39,175,207,246,137,188, 83,210, 0, 12, 55, 28, 62, 26, 59, 83,213, 30, 30, 30, -193, 10,133, 98,239,190,125,251,148, 42,149, 10,241,241,241,104,222,188, 57,230,204,153,163, 84, 40, 20,191,186,187,187,135, 84, -103, 51, 93,140,165,143, 75,138,185,142,255, 89,155,148,113, 61,129,123, 18,172,152, 39,225, 42,171,144, 98,248,212,223, 10,242, -138,117,253, 47, 95, 51,156,169, 70,189,121,189,160,160,160,247,212,169, 83,115,179,179,179,159, 9, 87,143, 30, 61, 66,191,126, -253,242,178,179,179,187, 82, 74,239,252,197,123,169, 10, 79, 58,175,123,149,183, 88,249, 82, 74,141, 0,138,107, 26, 42,124,124, -124, 90,184,185,185,225,135, 31,126,192, 79, 63,253,148,191,116,233, 82, 80, 74,209,168, 81, 35,139,154, 58,175, 93,187,118, 88, -171,213,126, 55,120,240, 96,237,182,109,219,184, 33, 67,134, 32, 32, 32, 0,106,181, 26,131, 7, 15,198, 79, 63,253,100, 28, 52, -104,144, 78,167,211, 77,184,118,237,218, 97, 19,183, 81,105, 97, 97,225,181,131, 7, 15,222, 88,179,102, 77,242, 87, 95,125, 85, - 60,114,228, 72,201,188,121,243,178,119,239,222,125,237,220,185,115, 71,117, 58, 93, 36,165,180, 84,168,204,158,174,179,151,102, -144, 74,100,149, 7, 29,253,115,175, 89, 85,188,103,234,188, 47,252,219,132,233, 94, 74,149, 87,220,236,142,163,151, 7,122,144, -101,179, 55,252,248,213, 32, 95, 31, 69,125,119, 31,112,197,249,184,145,158,142,205,105, 5, 37,101, 60, 93,187, 59,158,158,173, -105,192, 98, 89, 22, 71,143, 30,229,182,111,223, 94, 6, 96, 67, 65, 65,193,172,219,183,111,107,170, 81,121, 51,195,134, 13,211, -228,230,230,238, 79, 75, 75,251, 50, 46, 46, 78, 31, 18, 18,194, 12, 24, 48, 64,147,147,147,115,144, 16,242,197,149, 43, 87, 74, -219,182,109,139,234, 60,216,154, 16, 2,137, 68, 2, 66, 8, 34, 34, 34, 18,155, 52,105, 18,112,249,242,229,101,247,239,223,255, -128, 82,202, 68, 70, 70, 38,171,213,234,160,139, 23, 47, 46,137,141,141,253,136,231,121,198, 84, 47,195, 48,255,211, 82, 69, 8, -121, 26,234,170,123, 21, 97,100,100,228,157, 38, 77,154,168, 47, 95,190,188,118,228,200,145,157, 1, 40, 47, 95,190,124,215,215, -215,215,239,242,229,203,107, 63,249,228,147, 46,229,205,213, 38, 7,172,247,222,123,175,164,160,160,224,120, 81, 81, 81,232,141, - 27, 55, 74,212,106, 53,222,123,239,189,146,252,252,252, 19,249,249,249,161,213,217, 70,148,210,133,231,207,159,159, 67, 41, 21, - 41, 20,138,195,215,174, 93,235, 92, 82, 82,162,164,148,130,112, 15, 11, 25,125,208, 47, 28, 17, 49, 84,196,246, 4, 65, 67,176, -152, 38,145, 42,133,166,243,151, 33, 51, 22,129,144,180,190,157,108,100, 43, 86,111, 16, 15,237,221, 64,222,204,219,237, 73,184, -146, 88, 35,242, 78, 62,166, 47,221,205,207, 31,105,151, 8,158, 38,163,140,222,175,210,105,193, 22,161,148,207, 26,214, 85, 42, - 91,240,223,175,234,183,233,249,173,204,167, 89,224,211, 32, 20,123,251, 42,150, 47,248,146,159, 63,194, 42, 17, 60,210,160,199, -189,106,124, 71, 7, 46, 88,176, 96,223,208,161, 67, 85, 77,155, 54,125,234, 76, 72, 72,192,162, 69,139,180, 58,157,174,191,169, -223, 74,136,189,155,115, 70,106,191,237,120,142,231,215, 99, 62, 83, 42,152, 92,224,225,226, 39,225, 69,108,137,150, 77,237, 48, -237, 11, 71,241,248,176, 3,222,231, 87, 52, 40, 6, 47,109, 12, 32,205,164,163, 77,134,249,117,222,188,121, 74,133, 66,129,251, -247,239,163,226,180,145, 90,173,198,242,229,203,149,163, 71,143,222,215,161, 67, 7,135,240,240,112, 99,117, 66, 86,176, 55,233, -248,159, 53,113,167, 23,141,181,170,211,188,177, 61,178,139,128,225,211, 15,228,231, 20,235, 6, 86, 39, 92, 85, 14, 89,132,144, -222, 99,199,142, 61,176,105,211, 38, 27, 31, 31, 31, 36, 37, 37,161, 95,191,126,185,217,217,217,221,222,128,112, 5, 0, 26, 0, -206, 0,238,227, 73, 95,164,120, 66,136, 20,181,120, 60,219,157, 59,119,174, 61,122,244,200,241,211, 79, 63, 69, 97, 97,161,213, -199, 31,127,140,248,248,120,220,187,119,239,122,109, 10, 26, 17, 17,177,190, 85,171, 86,151, 54,110,220, 56,158, 97,152, 54,165, -165,165,246, 0,248, 99,199,142,165,115, 28,119, 78,171,213,174,188,122,245,234,253,106,110, 35, 10, 32,167,124,184, 47, 84, 90, -175,133,200,191,104,222, 26, 99,210,206,190, 45,158,206,253,208,131,132,255,116, 57, 98, 90, 25,165, 45, 0, 64,194,144,155,197, -132,206,218, 19, 79,207,191, 34, 76,188,242,105,219, 9, 9, 9, 88,177, 98, 69, 73,113,113,241, 13,163,209, 56,234,202,149, 43, -113, 38, 4,148,103,156, 34,145,232,114, 82, 82,210,214,171, 87,175,254, 90,121, 92,114,114,242,246,136,136,136, 61,149,198, 37, -117,236,216,209,133, 16,146, 99, 74, 57, 9, 33,233,239,190,251, 46,203,178,108, 10, 0,220,190,125,187, 12,192, 23, 1, 1, 1, - 71,205,204,204,134, 0, 64, 84, 84,148, 1,192,151,129,129,129,199, 85, 42,213, 80, 83,150,157, 16, 2,150,101, 95,216,130, 5, -224,149,157,220, 95,181, 62,203, 3,207,128,128,128,128,161, 74,165,114, 32, 0,220,184,113,163, 4,192,192,128,128,128, 33, 74, -165,114,144,169, 78,165, 82,121, 37, 35, 35, 99,107,100,100,228,166,231,198,109, 51,165,213,234,121,103,100,100,228, 26, 0,107, - 42,254, 15, 10, 10,242,123,240,224,193, 97,158,231, 21,162,156,135, 37, 49, 7,187,103,170, 67, 79, 55,224, 24,170, 2,161, 83, -141, 12,201,141, 89,218, 74, 87,157,125,169, 38,252,109,157,182,204, 99,228,144,229,158,206,242,241, 35,123,219,144,133, 59, 31, -214, 31, 51,208, 81,234,215,194, 26, 87,110,231,225,155, 57,219,248, 5,161,246, 15,219, 52, 49, 75, 4,143, 53,224, 74,179,170, -116,154, 25, 30, 67,103, 88,218,168,174,108,252,248,247,121, 50,109,203, 92,119,185,124,142,196, 63,168, 3,238,220,138,192,194, - 25,161,252,194, 80,171,135,109,124,204,147, 64,152,239,193,233,178, 76, 93,246,200,200,200, 75, 1, 1, 1,239,109,218,180,105, -223,216,177, 99, 85,190,190,190, 72, 72, 72,192,172, 89,179,180, 37, 37, 37, 31,196,196,196,156, 53,121,217, 41,161, 0, 5,207, -129,251,110,198,247,122,173,158, 35,218, 50, 74,116,122, 48,218, 82,158, 20,235,121, 98, 48,240,196,197, 94,249,164, 69,131,249, -223, 3,159,151,149,147, 97,152,130,177, 99,199,154,189, 52,215,202,100,154,154,108,247,167, 33,107, 69,212,233, 9,195, 37,117, - 86,110,191,154,151, 93,168, 27, 84, 85,184,122,149,179, 34,100, 13, 29, 58,244, 64, 88, 88,152,205,196,137, 19,115, 50, 51, 51, -187, 87, 21,174,254,196,125,254, 58,158,220,219,234, 10,165,244, 28, 33, 68,133, 39,247, 32,186, 85, 83, 39,199,113, 75, 63,251, -236,179, 46,243,230,205, 19, 77,159, 62, 29,113,113,113,152, 61,123, 54,103, 52, 26,195,106,251,221,188,124,249,242, 93, 0,195, -255, 53,117,200, 27,234,252,167, 65,170,211,170,243,186, 54,128, 90,173, 46,233,218,181,171,246,204,153, 51, 26,157, 78, 55, 38, - 58, 58,250,224,191,101,231,235,212,169,211, 41,150,101,221, 9, 33,160,148,166, 29, 63,126, 60, 24, 0, 58,118,236,120, 74, 36, - 18,185,151, 31,241,167,157, 60,121, 50,248,159,252,197,243,247,247,111, 1, 96,174, 78,167,235,123,251,246,109, 77,203, 47,143, -216, 17, 45, 99, 65, 88,182, 44,106,237, 91, 73, 66,165, 83,133,243,136,167, 20, 74,153, 31, 64,199,223,136, 47,169, 63,117, 83, -142,123,175, 46,173,197,155,247,156,229, 23,124,246, 52, 92, 45, 5,213, 94, 69,251,196, 82,147,157,114,198, 31,172,104,124,204, -131,146,122,223,172,205,243,232,210,107, 56,251,251,175,107,249,133,161, 54, 21,225,106, 9,184,226, 8,147,157,149, 8, 8, 8, -104, 45,145, 72,246,245,239,223, 95,181,115,231,206, 42,195,213, 11,157, 23,155,212,133,145,206, 0,161, 85,247, 1,163, 76, 60, - 12, 88,128,183,110, 39,189, 9,219, 61,216,155,212, 83,152,201,127,209,148, 25,190, 53,165,229,202, 20, 39, 33,164,185,149,149, -213,250,252,252,252,193,166,180, 92,253,153,203, 78, 8,177, 3,160, 46, 63,144, 39, 0,238, 80, 74, 31,214,210, 25,204,178,236, - 56, 79, 79,207,102,113,113,113,183, 57,142, 91, 70, 41, 61, 39, 4, 23, 33, 96, 9, 1,171,156,144,144,144, 11, 60,207, 31, 23, -139,197,139,194,195,195, 75,133,157, 79,112, 10,206, 26, 56, 43,133,172,171,247, 53,238, 11,118,230,213,253,250, 67,203,228,170, -194, 85,149,206,242,144, 21,113,183,196,109,225,174,194,186,227, 62, 48, 75,174, 42, 92,153,186,236, 1, 1, 1,173,165, 82,233, -186,146,146,146, 47,170, 10, 87, 47,116,198, 54,145, 32,199,232, 12, 74,154,128,210,151, 63,106,135,176, 37, 32,204,109,100,210, - 76,124,120,187, 76,216,151, 4,167,224, 20, 2,214,159,205, 95,114,215,227,115,231,206,181, 17, 86,189,128, 64, 45,233, 22,167, -199, 17,207,104, 40,101, 75,252,189, 20,159,253, 58, 83, 89, 2, 74, 82,192,211,239, 95, 21,174, 76,112, 94,133,220,184, 36,176, -145,226,139,189, 51,148, 37, 0, 50, 0,102,213,171,194,149,169, 68, 70, 70, 94, 2,208,164,198, 2,239,219,101, 0, 18, 1,242, - 8,255,199,222,121,199, 71, 81,244,127,252, 51,187,215,239,210, 73,238,146,187, 80, 36,144, 0, 73,128, 80, 13,132, 34,189, 55, - 65, 5, 17, 65, 5,148, 38,202, 35, 72, 19,125, 80,144, 46, 34, 32, 69,233,104,144, 94, 2,210,123, 11, 53,161, 6, 72, 72,207, -165,183,235,187,243,251, 35, 9, 15, 98, 32, 23,192,231,121,126, 62,243,214,188,200, 94,118, 63, 55, 59, 51, 59,243,217,239,204, -206,126,249,140, 21,178,191, 0, 5,254,194,187, 71, 6,131,193,248,111, 52, 88, 12, 6,227, 37,154,172,155,193,209, 48, 74, 39, -131,160, 6,164,246, 68,228,219,211,209, 37,222,250,130,154, 23, 96,228, 19, 64, 81, 27, 18,251,125,228,155, 95, 76,243,165, 67, -105,137,137, 98, 48, 24, 12,102,176, 24, 12,198, 95, 65,221, 88, 27,234, 34, 25, 64,242,127,181, 38,131,193, 96,252, 15, 65, 0, -132,150,127,127,232,252,216, 42, 33, 36,180,178, 95,236,196,228, 77,166,201, 52,153, 38,211,100,154, 76,147,105,254,205, 52, 43, -210,254,187,204,237,250,143, 76,114,103,154, 76,147,105, 50, 77,166,201, 52,153, 38,211,252, 59,195, 94,166,203, 96, 48, 24, 12, - 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96, 48,152, -193, 98, 48, 24, 12, 6,131,193,248,175,225, 47,125,138,144,193, 96, 48, 24, 12, 6,227,127, 17, 14, 0, 8, 33,204,101, 49, 24, - 12, 6,131,193,248,183,243,119,245, 32,108,136,144,193, 96, 48, 24, 12, 6,131, 25, 44, 6,131,193, 96, 48, 24, 12,102,176, 24, - 12, 6,131,193, 96, 48,254, 55, 13, 22, 33,132,178,185, 88, 12, 6,131,193, 96, 48,254,221,252, 29, 61, 8,123,138,144,193, 96, - 48, 24, 12, 6,227, 37,195,134, 8, 25, 12, 6,131,193, 96, 48,254, 63, 25, 44, 66, 72, 40,211,100,154, 76,147,105, 50, 77,166, -201, 52,153, 38, 51, 88, 12, 6,131,193, 96, 48, 24, 12,102,176, 24, 12, 6,131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193, - 96, 6,139,193, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12,198,127, 8, 2,160,220, 39, 1, 40,165,215,157, 22, -121,142,167, 9, 42,210,103,154, 76,147,105, 50, 77,166,201, 52,153,230,223, 79,179, 34,237,202,248,143,255,106,131,245, 87, 46, - 52, 74, 8, 9,125,217, 25,197, 52,153, 38,211,100,154, 76,147,105, 50,205,191,159,230,223, 13, 54, 68,200, 96, 48, 24, 12, 6, -131,241,146,145,252,221, 78, 40, 56,120,128, 44, 79, 74,123,121,122,186,125, 10, 74,145,147, 91, 48,223,221, 78,118,198,198, 70, -218,254,170,239, 36,132, 16, 0,160,127,211,247, 14, 17, 66,148, 33, 33, 33, 77, 1, 32, 38, 38,230, 2,165,212,252,162,249,229, - 19,220,247, 19, 87, 55,213, 96,135, 93,160,102,147,229,231,244,152,109,139, 95,102,154,125,124,130, 53, 86,165,102, 38, 32,118, - 2, 1, 71, 41, 57, 42, 41, 20, 38,230,228, 68,231, 59,171,161,111, 61,113, 34, 47,147, 12, 19,108,246,111, 83,142,207,249, 73, -223,246,203, 42,130,163,104,182, 84, 33,111, 37, 90,109,115, 82, 78,204, 89,197,154,144,202,227, 22,220,217, 83, 37,115,229,211, - 46, 71,102,178,220, 96, 48, 24,204, 96,149, 82, 45,116,144,135,133,216,166,240, 18,190, 15,165,162, 75,218,229, 72,159,255,134, - 19,209,134,244,169,233,225,233, 58, 38,228,213,186,253, 7,189,222, 89, 89, 63, 36, 72,110,177, 57,176,115,239,241, 31,126,221, -121, 96, 94, 80,235, 33,219,115,115, 10,190,207,136,217,126,255, 37,155, 15,197,148,161,129,157,188, 92, 20,114, 66,200, 54, 74, -169,163,188,253,116,141, 6, 29, 38, 32,175,148, 28,195,129,112, 0, 1, 77, 77,190,176,190, 69, 57,154,106, 0,190, 0, 18,158, -166, 87, 30, 42,125,136,191,140,147,127,193, 21,227,211,202, 24,137,103,156,155,182, 86,173, 90, 45, 2, 3, 3,181,163, 71,143, -150, 2,192,130, 5, 11,234,214,174, 93, 59, 35, 46, 46,238, 52,165, 52,227,185,202, 42,184,247,164,105, 19, 63,156,218,171,115, - 4,114, 10,237,248,126,245,175,179,116,161,125,249,244,235,219, 22,190,148, 50,209, 55, 86,121,186,184,156, 31,243,201,151,134, -174,109, 27, 75,114,139, 29,216, 18,117,230,173, 29, 63,207,106,227,233,217,184,153, 51,121, 99,104,241,143, 87,253, 95,241,159, -222,183,119, 79,124,191,108,213,104,125,196,164, 76,169, 66,178, 44, 60,188,181,135,159,127,117,108,221,178,113, 44, 0,102,176, - 42, 87,159,220, 26, 4,122, 4,247,105, 24,182,229,228,157, 34, 23,159,208, 62, 91,193, 99,145,241,202,246,171,206,106,248,215, -109,113, 90,194,241,126,130, 40, 36, 39,222, 60, 29,241, 87,164, 83,163,171,215, 14, 4,171, 9,165, 82, 10,250, 61, 47,146,173, - 5,153,183,238,189,232, 13,148,155,127,176,167, 32,218, 58,201, 57,117, 67,155,104,186, 36,145,169, 14,228,198, 95,201,123, 73, -121,203,171,117, 65,111, 43, 21,234,143,107, 5,213,173,253,224,193,221,187, 69, 5,121,139,139,211,239,172,165,148,138,149,209, - 10,104,255,249, 27, 2,196,207, 69,135,149,147, 80,242,237,253,227, 11, 55,178,218,203, 96,252,197, 6,203, 39,120,128,134, 72, -232,133,214, 45, 94,245,154, 60,170,175,124,209,134,227,240,109,248, 70, 92,218,149, 95,107,253, 39, 79,194, 47,172, 95, 53, 66, -112,109,252,136,129,120,239,141,142, 36,179,192,129,124,147, 0, 34, 5, 6,188,222, 93,221,175, 79, 23,245,183,223,173,126,127, - 79,212,145,247,253,194,250,213, 75,189,188,245, 97, 69,154,190,141, 7,237, 7, 72, 96,217, 54, 21, 28, 74,194, 75,204, 0, 74, -205, 17, 7,141,135,246,196,244, 97, 65,187,102,188, 23, 50, 99, 77, 84,194, 82, 0, 85, 0,164,151,219, 0,114, 18,195,186, 21, - 11,124, 12, 85,228,224, 56, 14,185, 69,118,188, 57,108,188, 80, 78, 67,169, 89, 62, 33,172,247,187,221,107,188,165,104,179,117, - 42, 33,228,154, 51, 13,164, 70, 87, 39, 68,174,116,219, 29,208,176,131,199,131,171, 7,131, 93,116,117,223, 47, 82,154,239,209, -248,120, 75,101, 27,106,141, 70, 19,232,230,230,214,164, 75,151, 46,170,137, 19, 39, 74, 91,183,110,253,232,239,195,135, 15,151, - 30, 63,126,220,240,237,183,223,246, 53, 24, 12,166,252,252,252,139, 69, 69, 69,119, 40,165,130,179,223,225,233,233,249,110,191, -238,173,209,227,173, 81,160,224, 48, 97,210, 52,236,219, 27, 53, 4,192, 75, 49, 88,110, 60, 55,117,248,184,105,134,214,225,141, - 36,115,183, 61,132, 67,164,104, 27,210, 64, 98,121,227, 19,223,131,191, 46,252, 22,192,200,138, 52, 4, 25,247,207,238,157, 94, - 3, 4, 43,236, 14,155,143, 71, 21,143,245,253,251,246,145, 58, 4,138,131, 7, 15, 65,180,139, 63, 57,147, 22,223, 70, 3, 79, -130,112,134,178, 58, 67, 8,192, 17,128,128,128, 82, 49, 57,241,252,250, 23, 54, 9,132, 16, 94,165,171,211,153,163,226, 96, 0, - 16, 9,183,222,148,126,107,127,101,202, 4, 0,116, 13, 94,143,167,162,240,167, 27, 38,158,151, 26, 83,175, 68,214,120,129,244, -121,119,105,161,107,124,236,135,182, 29,194, 67, 60, 67,127,252,221,226,214,184,235, 24, 36,231,162,255,142,109, 91,251,251,132, -246, 57,206,129, 46, 72,191,190,227, 80, 69, 90, 74,133, 66,187,107,215, 46,159, 46, 93,186,121,104, 67,251,108, 23, 9,210, 56, -138, 52, 34,114,105,132, 56,210, 28, 28, 77, 3, 79,210,179, 2,228, 25,254,177, 41,199,120,142, 55, 56, 68, 33, 53,233,230,233, - 22,206, 39, 24,171,163, 14,158,244, 54,219, 41,230,252,176,113, 90,113, 94,250,180,248, 27,222, 9,106, 93,157,137,197,233,183, -246, 84,230,220, 85,254, 13,244, 18,209,220,197, 79, 95,243,245, 49,227, 62,107,214,177, 93,107,105,205,170, 58,114, 63, 49,157, -254,126,248,184, 45,168, 89,215,179,169,201, 15,182,138,118,201,190, 34, 99,108,250,243,229,111, 91,137,139,182,238,207, 61,223, -120,175,111,175,126, 3,225,225,230, 2,171,205, 82,251,200,239,123,151,172, 92, 50, 59,156, 16, 50,188, 50,230, 80,160,142,207, - 87,206, 26, 85, 11, 16, 49,100,236,204, 41,132,144,205,149, 53,105, 12, 6,163,146, 6,139,240,142,233,225,205, 95,245,250,120, -244, 48,249,200,197, 71,241,240,252, 62,211,203, 50, 87, 26,109,136, 86, 34,147,188,195,113,188, 7, 1,167, 20, 5, 33, 49,143, - 24,151,211,164,164, 10,135,163, 82, 47,111,125,232, 27,214,187,233,119, 63,254, 50,253,226,149,216,214, 35,135,244,213,248, 27, -244,156,221, 65,113,250,226, 53, 97,201,138, 77,249,217, 57,249,167,137,132,126,229,140,185, 2, 0, 74, 17, 48,127,222, 28, 31, - 67, 21, 5,242,138, 29, 24,245,201, 52,124,251,245, 23, 46,213,180, 74,152,173, 34,150, 70, 37, 25,131,115,230, 69,207,232, 27, - 50, 99,231,169,212,213,195,102, 94,188, 10,160,248,153, 6,213, 93,142, 49,203,111, 67,165,148,192, 93, 45, 3, 79,184, 63,153, -171,101,159,133,245, 26,222,171,230,228,111,214,222, 92, 3, 64, 10, 64, 14,224,153,121,224,226, 27,220, 86,237, 86,101, 67,215, -161, 95,185,171,221,117,120,187,127,215,224, 19, 7,126,251, 61, 49, 49, 30, 85,235, 69,152, 29, 14,241,112, 65,126,206,247, 69, -233,183, 98, 42, 58,239, 26, 53,106, 12,236,222,189,187,230,179,207, 62,147, 26, 12, 6,252,186,243,176,161,253,235,227, 58, 38, -167,103,249, 2,128, 65, 87, 37,237,131,193, 61,127,223,183,111, 95,114,114,114,178,219,172, 89,179, 34,182,110,221,218, 0,192, - 38,103,203,154, 82, 17, 14,129, 66, 16, 41, 68, 42, 34,171,192,250, 92,166,226,169, 6,130,160, 71,231, 54, 77, 36,139,118, 37, -226, 78, 74, 73,145, 40,164, 60, 26, 55,110, 42, 57,180,149,180,174,208, 20,181,154,212,173, 65, 72,208,171,254,122, 45,206, 94, -188, 10,185, 84,234,241, 86,191,158, 80,170, 84,216,244,235, 86, 49, 61, 61,101,116,218,137,121,107,157, 75, 40,103, 88,177,116, -161, 79, 21, 87, 25,120, 66,192, 75, 56,240, 28, 80,104, 22,240,206,251, 99, 95,232,154, 81,233, 67,252,121,106, 31,226,170,175, - 55,164, 95,191, 55,253, 6,190, 53,128,242, 60,135,200,109,187,123,252,178,105, 77,154,139, 95,208, 26,129, 72,215,154, 82, 98, -146,156, 42, 23, 81,240,217,181,101, 13,170,184,201,192, 17, 32,171, 64,192,131,116, 19,198,142, 26,241, 92, 81,106, 66,136,199, - 71,189, 95,233,124,117, 93,251, 54, 65,213, 92,107, 93,189,155,123,115,232, 63,163,127, 56,144, 84,231,213, 25,115,235,162,216, -108,193,200, 79,166, 34, 51, 37,190,245,254,189, 59, 91, 87,169,211,249, 14,177,230,127,145,249,224,236,238,167,105,154,205,230, -220,174, 93,186,187,249,250,106, 85,171, 87,173,232,152,157,103, 66,118,110, 1,140,217,249,200,204,202, 65,106,122, 38,146, 83, - 82,145,148,152, 44,102,243, 70, 68, 69,237,229,122,246,236, 41, 84, 54,237, 38,155,136, 43,247, 11, 81, 61,168, 9,188,180,254, -104,218,105,104,245, 43,199, 54,255,234,226, 91,111, 94, 97,218,141, 47,156,209,112,213, 6,205,121,115,208,208, 15,222,236,223, - 87, 82,167,150, 63,151,102,204,165,167,206, 70,231, 44, 90,240,221,141,150,109,218,214,235,217,181,131,231,136,119, 7,180,185, - 21,151,212,106,211,150,237,243, 93,124,234,172, 47, 52,222, 26, 91,217,235, 64,173,171,179,250,181, 94, 67,251,134, 54,239,136, -184,184, 56,220,141,189,136,182,237,187,160, 75,247,126,176, 90,204, 3,215,174, 90, 20, 13,224,199,114,143,111,220, 88,234,145, -235,161,250, 67, 91,172, 15,146, 0, 20,148, 82, 56, 76,121, 50,141,174,161,151,103,205, 14, 54, 0,200,245,200, 53,209,232,104, - 59,235, 58, 25,140,151,108,176, 56, 94,222,117,252,176,110,242, 73,203,206,224,225,249, 95, 76,105,151,127,245, 46,251,155,127, -227,183, 98,147,162, 55, 7,255,177, 35,173,248, 9, 3, 66, 26, 75, 61, 12,248, 68,235,231, 55,226,237,247,198,240,213,253,117, - 92,161,217,225, 72, 79, 73,162, 81,187, 54,125,228, 94,173,225,156,188,135, 87, 86, 62, 77,147,212,234, 42,167,113,251,172,105, -151,119,220, 4,240,166, 54,100,160,246,212,249,235, 19, 60, 61,220, 6, 56, 4, 7, 10, 10,138, 35,115,115,237,243, 50, 98, 54, -101, 60,214, 40,145,199,239,232,158,150, 78, 79, 23, 25, 62, 89,125, 7,102,171, 0, 74, 41,124, 60,228,152,253, 91, 2, 36, 60, - 49,134,228,206, 91,240, 85, 95,219,240, 95, 79, 89, 35,167,108,171,218, 18, 56,189,154, 82, 90,248,212,116, 2,224, 57, 64,163, -146, 66,163,148,192, 85, 37, 69,201,204,173,127,153,171, 31, 62,109,208,107, 68,175,154, 83,102,109,184,245,243,212, 21, 55, 78, - 3,136,123,124,190, 83,121,233,116,243, 11, 29,228,233, 99,152,215,123,248, 76,215,248, 28, 14, 82, 7,224,173,175, 73,190,152, - 49,211, 77, 41,231,160,146, 82,183,107,183,238, 15, 26, 53,234,227,238,106,125,221,238,197, 41, 55, 47, 63,171,140, 76, 38,147, - 98,240,224,193, 82,179,217,108,123,111,252,236, 86,241,137,233,157,190,254, 98,130,162,154, 65, 11, 65,164,184,126, 59,177,214, -140,175,231,251,239,249,253,108,212,128,206,245, 15,248,249,249,121,152, 76, 38,177, 50,229,158,151,151,191,113,195,182,131, 19, -191, 91, 48, 23,241,233, 69,216,176,105, 11, 4, 65, 92,251,108, 83,246, 71,205, 25, 51,102,248,134,134,134,202, 98, 98, 98,210, - 41,165,166, 39,246,118, 51,230,219, 96, 23, 68, 16, 0,222, 30, 10,120,184,200,193,115, 4, 28, 33, 21,150, 59,136, 56,180,119, -151, 86,144, 75,121, 60,136,127,136,166,141, 26,192,167,138, 39,110,221,189,143,180,244,244,116,142,112,239, 86,239, 52,125,182, -221, 98,158,154,114,124,238,234,103,165,147,112,128,183,171, 12,223,108,137,135, 74, 46,129, 74,206, 67,165, 40,249,151,128, 56, -105, 72,255,156, 78,141,111,157, 79, 27,132, 52,156,241,254,251,239,113, 45, 91, 52,167, 60, 47, 65,122,158,157,112, 4,248,120, -212, 72,140,253,104,184, 46, 62, 33,233,243,165,203, 87, 76,116,209,213,157, 93,152,126,243,107,103,202,168,138,171, 12,211, 55, - 60,128, 74, 81,146,206,176, 87, 92,156,110, 31,158,212,212, 55,232,182,247, 72,134, 52,168, 96,143,249,252,221, 59,151,191,189, -112, 45,225, 34,165, 52, 71, 27,218, 7, 86, 7, 69,161,201,142,152,135, 14,136,102, 41,250,116,105,138, 6, 30,222,129,223,173, - 61,178,138, 16,162, 43,187, 62,159,212, 76,186,117,166,137,103,227, 1,110,180, 72,125,109,238,182,120,239,234, 58, 55,248,122, -186,194, 71, 95, 5,117,235, 6,193, 83, 35,133,155,138,135, 74,206,115,109,186, 12, 64,231,206, 93, 77,130,232,200,168, 76,253, - 36,148, 12,235,215,173,245, 90, 2,200, 56, 94,150,226, 87,189,118,213,102, 93,222, 87, 54,233, 56, 20,118,171,249, 83, 23,223, -224, 99,133,105,177, 71, 43,210,244,240,209,191, 51,236,189,225,178,154, 58, 5, 14, 31, 59,227,152, 60,101,202,245,188,194,156, -249,133,169,119, 99, 15, 29, 62,224,235,238,233, 53,101,242,180,153,225,237, 90,132,241, 29,186,191, 37,139,138, 58,208, 31,192, -216,138,210, 73, 8,225, 84,218,218,195,106,215,109, 48,254,195,105, 63, 86, 79,206,178,194, 83, 31,136,107,151, 47, 34, 42,242, -251, 43,150,194,188,239, 14,236,249,109,252, 23,223, 44,174,223,189,247,155,216,189,125,243, 88, 66,200, 10, 90,194, 35, 77,175, -218,109, 58,212,175, 30,186,218,183,142,214,235,113,125,145,242,152, 49,123, 49,204,133, 57,168,161,247,240,117,173, 87, 43,129, -114, 4, 84, 4,140,198, 52,171,119, 80,155,126,153,183,143, 29,173, 76, 59, 95, 89,152,230,255,166,102, 5, 52, 5,224, 3,192, - 8,224,194, 19,219, 40,253, 29,229,108,103,150,118,193, 85, 0, 88, 75,131, 22,101,148,109, 63,237,243,178,227, 99, 1,212, 43, -213, 20, 0,156, 7,144, 83,161,193, 42,245, 26,228,177,139,247, 15,219,127,188,195,181, 27,124,116,190, 16,104,194, 31,186,134, -234,205, 6,102,142, 27, 62, 64,229, 23,214,223,152,122,121,139,211,119,187, 42,255, 64,189, 71, 53,183,189,163, 63,254,204,253, -163,119,123,186,220, 76, 44, 46,136, 77, 40,206,135,138,194,179,106, 21, 73,104,103, 31, 33,227,215,121, 83,220, 13,245,115,243, -146,175,253, 86,158,134,214,205, 43,214,255,213,247,114,172,197, 69, 95,102,198, 68, 70,149,206, 11,250,135,127,248,128,233, 0, -144,116, 38,242,145, 65,209,134,245,125, 85,161,240,152,161,111,242,118, 21, 0,141, 42, 74, 95,118,161, 13,130, 80,210, 31,115, - 28, 65,145, 89,128, 82,198,101, 6,101,205,125,100,174, 78,209, 15,222,181,211,205,178,199,205, 85,249,141, 34,144, 93, 96,135, - 70, 41,129,139, 82, 2, 23,149, 4, 92,169,195, 34,132,104,190, 31,223,160, 76, 67,109,186, 0, 0, 32, 0, 73, 68, 65, 84,231, -135,125,107, 77,153,189,254,246,154, 41,203, 99, 79, 3,184, 77, 41,205,125,150,166,155,174,110,115,185,187,247,130,247, 63, 91, -168, 57,121,187, 8,122, 47, 57, 66,171,187,193, 93, 45, 71,114,118,201,156,254,148, 44, 51,204, 54, 87,244,249, 96,134,219,190, -200, 37,199, 61,253, 27,172,205, 73,186, 58,186,162,115,223,186,231,248, 43,247, 31,166,117,250,245,167,121,138,236, 98, 32, 33, - 91, 68,118,129, 21, 86,222, 19, 83,191,248, 74, 49,105,210,196, 46,176,100, 37,215,174,238,149, 90,233, 11,147, 20,207,143,220, -118,224, 31,161,141, 91,115, 71,143, 28,193,213,139, 39, 34,141,215,183, 87,106,120,176, 90,181,106,142,197,139, 23,187, 47, 90, -180,168,141,167,167,103, 98, 78, 78, 78,108,105, 94,250,251, 84, 15,205,218,185,247,136, 91,243, 6,225, 18,149, 66, 10, 79, 23, - 25, 2,124,213,184,113,233,168,149, 3,249,221,137, 20, 26,252,180, 85, 32, 80,192,152,153,141,206,237, 90, 64, 46,229,145,154, -154,134,160,192,154,126,157,219,189,230, 39,130, 96,233,202,149, 31, 1, 88,253,204,114, 7, 7,158, 39, 80, 43, 36,184,114, 96, - 69,158,165, 56,223, 70, 74,135, 8, 69, 42, 36, 63,119, 83, 35,146,183,163,118,172,231, 82,115, 29,184,147,102, 33, 73, 89, 69, -224, 64,225,227, 46,129, 40, 72,144,159,155, 65, 54,110,218,136,203, 23,207,114,132,112,239, 2,248,218,169,155, 40, 14, 80,202, -121, 40,229, 60, 84, 50, 30,133,150, 18,239,172, 13,237,179,158, 2,121, 18, 94, 82,152,122,101,203,100,167,174,111,181, 71,253, -117, 43,230,226,192,137,232, 86, 71,227,214, 54,210,133,212, 95, 86, 45,116,208, 34, 0,176, 57, 68, 20, 23,230, 65, 99, 79, 64, -171, 26,153,168,162, 22,112, 59, 71,143,171, 73, 18, 77, 69,195, 89, 57,209,145,249,186,224, 94, 99,175,156,220,187, 89,210,182, - 31,114,139, 4, 36, 40,172, 80, 43, 36,165, 63, 60,110, 92, 61,135,180,124,241,164,171, 85,221, 43, 33,110, 95,165, 66,164,133, -233,177, 71, 0,248,255, 43, 66, 92,203, 59,117,233,167, 43, 7,140,251,190, 67,211,206,239,145, 59, 23,126,255, 12,192,209, 10, - 35, 88, 30, 94,146,123,233, 2, 30,196,223, 23,155, 53, 15,151,156, 61,121, 56,236,247, 35,167,215,174,223,176,193,210,237,245, -119,149,237, 91, 54,228, 19,179,172, 88,188,245, 6,141, 73,165, 68,174,169, 34,117, 34, 98,197,249,212,106,250,211,154, 53, 27, -251, 7, 7, 86, 69,122,174, 29, 41, 57, 54, 28,143,190,139,181, 43, 38,229,229,102,220, 27, 6,107, 97,145, 8, 33,239,208,129, -157, 59, 70,142,153,132,224,208,176,234,133, 41, 69,174, 0,254, 56,247, 80, 20,135,126,253,245, 28, 47,141, 70,243,167,239, 49, -166,167,160,168,176, 8,114,181, 27,212,110, 85,224,112, 8,176, 11, 20, 5, 5, 5,242,207,199,188,253,129, 51,231,207, 96, 84, - 34, 18,235,140, 15,241, 33,132,236,166,148,246, 0,208, 1,128,252,177,109, 16, 66,118,151, 26,191, 63,108, 79,154, 52,105,242, -172, 89,179, 98,202,246, 45,251,188,108,223,103,125,254,216,241, 85, 62,255,252,243,208,217,179,103,127, 19, 30, 30,190,249,244, -233,211,247,157, 50, 88,143,159, 12,121,236,238,254, 79,195, 38, 13,123, 54,129, 40,225,253,125, 92,240, 74,141,170,240, 80, 15, - 81,233, 27,189,105,148, 72,120,238,231, 69,159, 43,227,115,101,144,112,146,226,202,152, 43, 5,239,118, 96,217,202,181, 46,205, -235,191,162,152,191, 45,233, 65, 82,182,197, 42, 58,236,156,185,184, 80,150,147,118, 71,154,159, 17,239,234,230, 91,135, 55,231, - 27,167, 2, 40,215, 96,201,229,114,238,187,185, 95, 6, 31, 61,118,106,205, 46, 23,183, 60,191,176,183, 23,240, 10,219,218, 50, - 99, 69,200,151,156,174,225,237,190,114,165,122, 98,157,250,109,252,244,129,205,220,207,237, 91, 19,231,132, 61,231, 39, 78,158, -241,200, 92,217, 77,217,152,179, 98, 87, 65,123,175, 99,243,203,204,213, 38,227,192, 65,157, 91, 7,234,246,237,146,101, 87, 88, -129,224, 72, 30,252,254,199, 50,194, 1, 28, 72,201, 60, 46, 42,102, 16, 66,212,139, 63,110,216, 99,212,235, 1, 83,191,221,112, -123,237,228,229, 49,101,230,170,194,194, 43,224, 85,215,221, 44,166,244,248,184,235,213,199,116,107, 41,169,238,235, 14,149, 92, -130,220, 34, 7,114,139, 5, 36, 25,205,184,151, 86,132,235,247,140, 16, 76,249,120,123,212, 63,185,159,231,140,233,228, 76,249, -236, 57, 28,221,113,206, 55,147, 21,217, 69, 64,102,161,128,148,108, 51,146, 51, 77, 72,202, 52, 65, 37, 3,194, 59,190,165, 56, -185,247,231,206,181,171,123,253, 84,217,139, 41,253,218,129, 98,109,104,159,115,201,169,198,240, 90,129,193,224,246,238,168, 91, -165,193, 0,125,214,213,200, 20,103, 53,246,237,219,151,233,239,239,175, 93,182,108,153,113,193,130, 5,161,213,170, 85,171,155, -152,152,184,211,219,219,123,200,247,115,167, 29,252, 98,238, 79,222, 86,155,197, 45, 36,172, 5, 47,145, 18,196,156, 63,104,217, -191,245,199, 84,154, 95, 60,181, 34,109,185, 66, 81, 69,169,148,194,110, 23,193,243, 60,252,253,180,176, 11, 20,133, 69, 69,232, -219,189, 19, 98,110,222,193,169,179, 23, 29,130,221,177,184,226,134, 3,144,112, 28,212, 10, 9, 44,197,249,182,132,179,107,107, -188,164, 54,137,138,148, 34,250, 94, 49,138, 45, 14,216,236, 34, 2,116,114,100,103, 60,196,170,239,215,226,234,165, 11,104,213, -190, 7,230, 46,221,128, 49, 31, 12,112,250,169, 79,142,144, 82,115, 37,129, 82,206,195, 98, 47,105, 18,190,155, 53,137, 15, 9, -174,135,182, 61, 6, 59, 29,210,114,117, 81,161,192,100,131,198,195, 15,209,135,214,170,247, 28, 58, 63, 97,206,226,159, 62,182, - 20, 80, 36,221, 62,131,112,207, 44,212,242,182,226,252, 67, 87, 28,120, 88, 29,129, 1, 53,193, 73,182, 59, 87,135, 98,119,238, -210, 54,236,187, 51,191, 94, 88, 47,207,128, 32, 40,100, 60, 20, 50, 14,114, 25,135,123,183, 99,240,203,250, 53, 55, 29, 74,245, -128,184,107,219,173, 47,154,209,133,105,113,153, 74, 93,208,248,187,151, 14,196,182,236,245, 17, 60,124,171,215,175,204,241,179, -102, 78,177, 8, 14,187,125,208,144,145,234,158, 93, 95,147,132,183,108,161,185,120, 59, 7,223,254,124, 68, 56, 25,181, 62, 85, -166,112, 87, 25, 90,140,240,114,198, 92,121, 85, 15, 91,185,110,253,175,253,107, 86,243,197,239,231, 31,224, 82, 92, 46,220, 92, -221, 33,209,248, 33,168,205, 80,247,235, 81,139,250, 20,103, 22,110,148, 74,149,239, 54,105, 30, 1, 74, 41,238,196,198,230,228, -230,186,252,169,109,230, 36,220,202,105, 83,255,209, 89,235,163,123,252,206, 29, 1,181, 2,209,173, 87,127, 28, 58, 26,137,251, -113,119, 32, 82, 10,145, 2,148, 82,100,101, 26,179,193,113, 63, 51, 75,192,248,171, 76,214,179,124, 72,153,113,122,210, 16, 61, -105,180,202,126, 47,219,111,214,172, 89, 61,158,136,190,245,120, 74, 84,238, 79,251,149, 29, 63,123,246,236,111, 30,251,187, 83, - 94, 71, 82, 42, 66,158,117,114,218,134,189,195,229, 82,151,157, 63,204,251,152,203,200,179, 67, 37,231,161,169, 86, 19,181,135, -125,172, 30,212,202, 7, 41, 22, 79,236,218,253, 83,129,157, 58,246, 57,107,174,228,156,203,254,249, 75,126,146,213,170,161, 39, - 51, 54,197,199,153,237, 37,211, 36,172, 22,179, 36,225,106,148, 58, 41,246,144, 25, 14,251, 58, 94,174,104, 12, 42,106,159,165, - 87,221,215, 3, 45,218,116, 80,183,105,211, 70,125,224,200,169,153,123,246,236,249, 8,165, 43,212,251, 53,126,112,168,113,203, -110,193,250,128,250,234, 2, 43,129, 92,202, 57, 91,218,194,156,111,102,160,154, 86, 9,147, 85,196, 63,151,239, 45,104,227,242, -251, 55,143,155, 43,157,127,109,127,153, 66,243,135,161,190,167,145,124, 97, 99,187,114, 42,138,122,225,199,161, 61, 71, 15, 8, -152, 58,103,195,237,117,159, 47,139, 57, 5,224,150, 51,230, 10, 0,104, 74,180,201,189, 90,104,155,157,107,230, 77,221,187,233, -187,182, 28,168, 87,221,160, 64, 73,199,142,157, 20, 13,155,182, 80, 24,243, 40,110, 60, 48,194, 92,152,131,246,225,117, 17,181, -109,189,144,158,150,232,212, 28, 15, 99, 78,190,111,117,131, 14, 15, 50, 69, 60, 52,150, 24,171, 36, 99, 49,146,179, 76,200, 41, -180,162,105, 77, 29,138,138,172,190,207,125, 49, 81,178,251,204,153, 51,225,175,182,238,136,215, 7,141, 8,222,189,117,253,121, - 93, 72,191, 79,211, 99,182,254,234,204,241,145,145,145,130, 94,175,143, 75, 79, 79,143,152, 59,119,174, 49, 40, 40,168,234,140, - 25, 51, 38,235,245,122,175, 1,175,191,158,216,163,123,247, 13, 31,126, 50,189,205,210, 47,127,122, 5, 28,159, 14,209,177,215, -104, 18,102, 82, 99,172,169, 34,109, 23,181,194, 75,202,115,224, 8,129,135,171, 6, 10,185, 4,188, 67,132, 40, 8,240,112, 83, - 35, 38,246, 38, 50,110,156, 26,145,123,127,127, 36, 48,175, 66,195,194,243,128, 70, 41,121, 84, 79,180, 13, 94,143, 71, 57,147, -201, 1,128,240,188, 49,253,202,111, 53,156,200, 64,209, 33, 80,152,109, 2, 44, 54, 1, 82,158,162, 32, 47, 3, 95,124, 62, 30, -175,117,233,139,153,131,199, 32,207,204,227,242, 67, 43, 28,118, 59,113,182, 92,146,179,173,232,218,200, 11,153, 5, 14,228, 20, - 9,144, 73, 74,174,151, 61,151,178, 16, 87, 84,185, 7,222, 68,145,194,219,203, 29,234, 44,160,219, 39,219,240, 90, 35,127, 28, -217,177, 66,114,234,252, 53,252,243,219,239,161,237,253, 42, 86, 95,169, 5,133, 91, 85, 40,220, 21,176,211,202, 45,203, 71,237, -146, 79, 46, 31,219,214,174, 86,192, 68,141, 92, 42, 43,137, 50, 38,222,199,250, 53, 63, 38, 59,164,232,153,125,110, 67,193,203, -106,252,165, 28,111,112,247,242,129, 66,202,129, 58,172, 69,149, 61, 62, 45, 37,189,254,220,153, 19,135,156, 56,219,119,114,179, -174, 35,229, 71,183,125,103,137, 61,191,123, 84, 81,170,203,214,128, 8,239,139, 0,188, 42,232, 84,136,187, 95,232,143,203, 87, -111,120,211,207, 87,139,109,135,174, 98,205,170, 31, 96, 8,233,140,184, 75, 7, 80,181,113,111,184,212,108, 7,169,107,228, 48, - 13, 39, 13, 25, 62,110, 74,239, 70, 77, 90,224,204,201,195,200, 48, 38,173,162,244,214,159,158, 70,206,188,125,236, 40,105,220, - 88,235,113, 47,249,209, 28, 44,142,183,249,137, 34,162,219,219, 40,238,199,221,193,213, 75,103, 27,139,130,236, 81,148, 58,215, - 35,215, 68,239,178, 57, 88,140,151, 79, 69, 62,164,162,168, 83, 37,205,220,238,242, 76,214,147,159, 19, 66,118, 79,154, 52,105, - 50, 0, 58,105,210,164,201,101,219,179,102,205, 50, 1,168, 48, 32, 32,121,252,228,202,219, 65,219,176,119,184, 92,162,222,185, -102,241, 20,213,166,243, 2,230,238,139, 70, 88,144, 14, 82, 41, 15,141,210, 23,135, 98,242,112,250,248,206,194,232,139,231,204, -188, 84,152,238,140,185,146, 17,213,222,217,139,150,229, 6, 7, 86,149, 47,217,155,118,197,108, 23, 9,165, 68, 74, 40,225, 41, - 21,221,146, 99, 15,215,203, 39,153,225, 52,217,153, 39,224,136,104,115, 80,196,103, 88, 65, 8,208, 50,162,141,242,192,129,223, - 85,255,234,176,164,158,213,234, 52, 86,223,120, 88, 4,153,132,131,214, 67, 14,103, 31,167,241,241,144, 99,214,150,120, 72, 37, -156,177,141,203,239, 11, 30, 55, 87,190,254,181,253, 93,221,220, 32,138, 4,132,144,231, 41, 96,245,130,177,161, 61,198, 13, 8, -156,186, 96,211,221,245,147,150,198,156,116, 54,114,245, 56,121, 15,175,231, 2,248,180,108,219,189, 90,168,199,133,139,231, 58, -184,123,106,231,182,126, 99,106,149,194, 60, 43, 58,180, 40, 49, 87, 87, 79,252,250, 86,113,218,205, 40,103,181,109, 14, 17, 9, -233,197,120,144, 86,252, 40,122,149,148,105,130, 74,206,195,108, 21, 94,232, 98,114,177, 88,126,140,218,187,163,171, 93, 64, 68, -189,198,109,240,250,176,137, 30, 7,119,172,249, 73, 23,220,203,156, 30,187,115,151, 51, 26, 41, 41, 41, 38, 47, 47,175,179,249, -249,249, 61, 55,108,216,144,211,180,105, 83,222,195,195, 35, 27,128,226,242,165, 75,138,189, 91,126, 78,207,207,207, 31, 99,179, -217,162, 43, 44,107,159, 96,141, 69,106,127,147, 58,248,193,186,208,174,146,156,220,146,209,148,248,164, 84,152,138,138, 97, 23, - 68,164,164,102,192, 98, 49, 35, 47, 63, 31,173,154,213,248,254,152, 53,100,138,171,174,206,228,130,244, 91,187,159, 21,193, 42, -178, 8, 80, 43, 36,255,170, 39,162,224,179,108,249,114,120,185,148,140, 8,241, 60, 65,118,161, 29,169,217, 54,204,152, 52,198, -217, 33,118,234,112, 80, 88,108, 2,204, 54, 1,121,118, 1, 62,254, 85, 48,103,233, 47,136, 55,154,177,227, 98, 30,238,165, 22, - 35,172,150, 43, 32, 58, 87, 65,121, 94,106,236,251,198,187,127,250,126,165,218,197, 44,227, 37,208, 40, 75, 12,144,182, 94,239, - 17,132,112,249,188, 84,106, 73,185,242,235,142,167,167, 16,144,203,229,240,247,245,130,205, 46, 96,255,185, 4,116,111,223, 12, -175, 54,107, 12, 34,145,225, 98,126, 24, 20,110, 46,160, 60,129, 67,164,176,218, 43, 87,167,140,177,145,233,190,161,125, 38, 94, - 57,115,224,135, 78,221,251, 33, 39, 51, 21,235, 86, 46,201,183, 11, 66,247,204, 43, 91,211, 94, 86,195,239,162,171,239,163,118, -115,159,211,184, 69, 71,152,242,210, 96, 76,126,176,163,178, 26, 69,233, 87,114, 1, 44,115,216,172,147, 57,142,128, 56,172, 40, - 74,189,187, 29,128, 8,132, 85,120,188,198, 55,104,248,215, 11,151, 13,172, 90,181, 42,162, 78,222,192,172, 41, 35,175,168,213, -174, 53,116, 94,238,238, 98, 80, 67, 60,184,254, 59,188,106,228,194, 93, 23,104,232,222, 97,152,161, 75,183,190,136,185, 26,141, -197,243,190, 58, 87,196,169,231, 62,181,136, 74, 38,172, 63, 26, 58,244, 10,104,243, 85,120,235,142,176,218, 29,104,214,178, 3, -174, 92, 60, 55, 50,231,254,193,113,172,251,103,252,187, 76,150,147,251,245,120,193,239,233,129,146,185, 90, 62,206, 70,176,102, -205,154, 21, 51,107,214,172,114, 35, 98, 21, 26,172,103,153,171,159,191,155,172,218,112,206,129,155,241,185,232,212,196, 15,169, - 41,201,216,189,233,123, 17, 20,144, 43,229,233, 14,135,120,192,194, 97, 74,206,249,109,249, 21,153, 43, 41, 85,236,154, 57,119, -209,141,176,122,129,252,210,168,140,211,197, 86,129, 82, 16, 9, 1,164, 34, 37, 18,112, 74,141, 40,218,235, 64,240,114, 54,212, - 68, 29, 34, 45,205, 12,192, 38, 80, 80,136,127, 40, 36,187, 67,132, 32, 2, 34, 5,202,246,173,216, 0,149, 60,233,165,146,241, -153, 65,217, 37,115,174,182,148,153,171,170,181,253, 93, 93,221,160,148,241,160,165,251, 86,210, 92,169, 22,140, 10,237,241,241, -155,129,211, 22,254,114,103,195,132, 37,215, 79,250, 4,117,211, 74,148, 30, 94,250,176,193,165,189, 29, 0, 65, 52,165, 92,222, -120,168, 50,218,165,134, 43, 82,227, 27, 84, 35, 53,238,226,244,142,221,222,194,190,109,235,202,204,213, 94,103,117,188, 61,221, -210, 46,198,196,215,178, 81, 15,196,167, 21, 33, 41,211,132,244,220, 18,191,235,227, 46, 67, 82, 98, 2, 52, 26,185,211,157,152, -111,104,223, 81,148, 96, 40, 40, 54,166, 95,223,182, 48, 46,110,159,149, 52, 30,209,227,208,190,173,179,239,223,187, 51,178,121, -251, 1, 8,107,251, 58,162, 54,204,157, 4, 96,151,179,186,217,217,217, 5,158,158,158, 39, 62,253,244,211, 94,171, 87,175,206, - 6, 32,201,207,207, 87,247,237,219,215, 63, 43, 43,107, 60,165, 52,193, 41, 51, 41,193,207,163, 70,142,106,219,183,119, 79, 98, - 39, 50,235,142,223,207, 74,236,130, 64,102,255,227, 13,225,226,165,243,156, 93, 16,200,251,253, 91,137,231,207,158,226, 62, 31, -222, 67,120,237,213, 16, 68,223,140,247, 29, 54,176,223, 76, 0, 79,191,139,162, 98,242,160, 97,227, 74,234,136, 40, 62,154,115, -229,229, 34,197,168,229, 55,161,121, 52,111, 72,130, 14, 97, 94,149,106, 35,236,130, 8,179, 85,128,217, 42,160,216,234,192,209, -235, 57,136, 75, 41, 68,110,177, 29, 22, 91,137, 89,177,217, 68, 0,206, 53, 90,143, 47,197,160,173,223,103,221,146, 89,147,249, -221,151,178, 32,227,121,184,170,101,162, 82, 94, 98, 8,151, 46,152, 42, 9,170, 91, 15,237,186, 12, 82, 60, 59,130, 37,226,248, -133, 59,248,126,203, 21, 44,154, 60, 0, 18,142, 96,244,204, 95,241,118,231, 58, 16, 69,138,212, 59, 23,225, 87,231, 85, 40,228, -202,146,232,181, 77,116,230,218,105,138,210, 39,107, 41,165,209,105,215,183,175,241,175,211,250,219,251,151,119,107,204,102,155, -104,147,104,122, 25,175,236,138, 43,221, 55, 24,128, 12,128,133, 82,122,179,178,141,176,155,127,176,167, 40, 56, 6, 84, 11, 8, -254,236,189,113, 95,105,213,238,222,248,109,237, 98, 10, 41,183,169, 82, 5, 37,216, 56,148,204,233,202, 19, 75,219, 31,194, 17, -148,166,205, 75, 20,108,124, 69,209,171,170,161,237,198,215,169, 27,140,179, 49, 73,248,118,218,135, 87,204, 25, 15,134, 90, 93, - 61,135,217, 10, 83,199,214, 11, 13,131, 78,231,141,244,212, 84,180,233,217, 25,157, 58,119, 65,204,213,104,124,253,197,167,231, -184, 98, 75, 47,103,162,182, 0,224, 89,167,117, 72,253,176, 38,195,106,213,109, 0, 99, 86, 54,106, 6,213, 71, 80,104,216, 48, -207, 58,173, 87,229,220, 58, 30, 3, 6,227,191,135, 61, 0,186, 63,105,132,158, 52, 73,143, 69,160,202,227,194,227, 26,101,251, - 63,205,192, 61, 62, 39, 11,128, 83,203, 31, 73,158,116,140,101,219,218,134,189,195,101, 82,213,206,159, 22,126,174, 90,127,206, -129,219, 9,121,232,212,212, 15,153,153, 89,216,191,101,101, 17,225, 28,221,211,174,236,186,232,108,110,168,252, 3,245, 18, 65, -186,109,202, 87, 95, 69,181,106,222,196,190,108,127,234,241, 2, 59, 68, 81, 34,145,242, 22, 81, 66,120, 42,161, 28,149, 42, 84, -106,137,207, 43,205,220,113,239,236, 14,141, 54,100, 66,177,177,202, 77, 74,143, 62,115,177, 77,199, 99, 55,190,130, 64,241,120, -136,138, 2,112, 8, 20,180,236,177, 99,135,115, 6,139, 35,192,186, 67,169,198,144,252,121,143,204,213,134,204, 18,115,229,230, -234, 6,133,172,100, 34, 48,117,250, 89,176,127,153,171,185,163, 66,123,126, 60, 40,112,218,119,145,113, 27, 62, 93,124,253, 4, -128, 59, 18,165,135,215, 79,171, 22, 40,244, 85,148,224, 0,228, 22, 9,120,107,200,243,221, 56,186,232, 2,223,104,220,170,199, -212,118,221, 7, 96,239,111, 63, 9,215, 78,109,173,148,185, 2,128, 30,237, 26,255, 62,107,206,119,254,159, 78,158,174,144, 75, - 41, 10, 76,118, 40,100, 28,180,238,114,120,169, 57,156,136,218,106,105, 21,172,221,239,140,150, 87,243,183, 93, 3,170, 85,155, -245,249,148,207,249,159, 86,174,252,167,190,126,175,125, 41,215,118,222,161,209, 63,218, 1,124,170, 13,237,119,215,224,127, 97, - 65,181,144,214,240,240, 54,212,247, 14,234,229,146,121,123,103,161,179,105,205,201,201, 73,172, 81,163,198,221, 37, 75,150,212, - 29, 61,122,180,101,244,232,209,254, 38,147, 41,210, 89,115, 5, 0, 77, 27, 55, 8, 27, 59,122,132, 84, 46,225, 32,149,114,168, -233,223,221, 97,179,151,172,253,211,188,126,237, 71, 53,236,117, 0,215,239,103, 96,210,247,135,144, 91,104,129, 68,194,203,158, -165,251,240,220, 83,214,185, 34,248,131,185,114, 81, 74, 96,178, 84,102,169, 33, 66,109, 14, 17,118,135, 8,139, 77,128,197,234, -128,201, 42,194,100, 21, 31, 85,127,158, 35,176,151,212,247, 74,135, 88, 41, 69,126,205, 58,117, 80,171, 48, 15,106, 37, 7,149, - 92, 10,149,188,228,158,103,255,165,108,196, 91,115, 43,212, 16, 69, 17,182,210,168,148,197, 38, 64,163, 40,185,159,179,218, 75, -158,202, 77,190,121,116, 99,122,220,249, 55,125,131,154,241,254, 65, 45, 96, 81, 56,149, 76, 15, 74,233, 1, 66, 72, 7, 66, 72, -123, 0,180, 90,189,150,226,142,109, 91,209,163,123,143,226,196,171,187, 85,132,144, 86,165,151, 62, 40,165, 39, 9, 33, 21,174, -129,229,234, 87, 47, 66,164, 88, 71, 0, 21,168,120, 67,231, 87, 77,221,250,181,158,117, 34,218,117,227,107, 4, 4,193,106, 23, -176,126,213, 34,122,246,200,214, 9, 69,169,183,175, 86, 38, 47,245,213,235, 32, 53, 49, 97,180, 8,201, 28,148, 24, 43,208,146, -183,148, 21,185,248,214,110,175,242,172,250,204,168,165,135, 71, 35,215,250, 77,219,250, 39,100,218,176,111,223, 62, 20,231,103, -124,101,181, 22, 20,195, 66,215, 28,222,254,227,187,111,140,248,210,181, 89,147,198,240,112,211,160,138,135, 27, 46, 93, 60,141, -185, 51, 39,159,227,138, 45,189,140,198, 88,167,135, 51, 57,202,253,179,231,128, 97, 92,118, 86, 14, 22,126,243, 25, 70, 78,248, - 6, 29,122,189,195,221,185,121,229,159, 0,122,179, 62,157,241,239,138, 92, 61, 37,146,101,124, 44,242,244,167,237,199, 76, 81, -121,219,164,116,219,250, 20, 13,235, 19,166,202,250,196,231,214, 39,244,174,188, 80, 4,139,135,116,215,234, 5,147,148,219,175, -243,184,159,156,131, 78, 77,253,144, 97, 52, 98,207,198, 37, 69,118,209,220, 39,163, 18,230, 10, 0, 36,118,116,173,230,239, 59, -241,163, 55,123,145,200,107, 89,209, 41,156, 90, 80, 40, 37, 28, 47, 41,228,165,202, 98,174,208, 36,231, 37,148,231,168,205,198, - 55,236, 48,254,236, 37,123, 81,131,172,135,177, 83, 92,116,153, 53,220,252,234,110,202, 79,189,185,168, 60, 93, 65,112, 32, 61, - 51, 27,126,158,106,164,231,218, 97, 23,104, 57,251, 80, 16, 66,160, 86,240, 40, 46,202,135, 40, 84, 60,133, 64,237,170,219, 29, -146, 63,239, 65,153,185,218,152, 89, 50, 44,248,184,185, 82,202,120,112,132, 56, 29,193, 34,132,168,230,140, 14,238,241,233,192, - 18,115, 53,126,209,213,147, 0,238, 80, 74,179,244, 97,131,225,237, 42,195,168,239, 99,161,209,200,224,169,150, 65,242, 28, 47, - 50,114,209, 5,190,209,168, 85,143, 85, 29,250,142,228,118,172,153,227,184,121,245,212,192,202,152, 43, 65, 16,136,221,110, 71, -187,150,245,147, 47,197,198, 31,159,249,197,180,214,205, 58,188,169,104, 85,199, 23,197, 86, 7,146, 31, 38,226,196,254, 72,139, -159,167,244, 88,237,234, 94,169,118,187,189,194, 14, 60,167,170,173,216,146,107, 54, 75, 36, 50, 77,255,190,221,200,197,232,232, - 13,186,144, 62,219, 0, 18, 3, 34, 6,131,160,119,195,224, 0,228,128,194,106, 49,153,181, 18,121,165, 39, 38, 39, 36, 36, 28, - 94,188,120,113,136, 84, 42,213, 69, 69, 69,137, 69, 69, 69,191, 85,230,120,135,195, 65, 57, 66, 72,116, 92,161,205,195, 69, 74, -106,234, 20, 18,149,134,131,201, 74, 31, 25,173,235,247, 51,176,105, 95, 12,226,146,114,161,243, 82,114,126,158, 28, 28, 14, 33, -231,121, 26, 20,158,227,160, 86, 72,161, 81,242,208, 40, 36, 80, 41, 36,176,218,157, 95, 40,156,128, 62, 56,113,230, 82,112,171, -186,193,136,190, 87,132, 27,137, 86,152,109, 2, 40, 40, 72,105,148,209, 93, 37, 69, 70,106, 2, 68, 42, 36, 84, 54,125, 18, 94, - 82,216,185,215,159, 39,180,171, 53, 46,118,185,130,131, 70, 38,171, 80,195, 46, 8,104,217,184, 54, 60,117,213, 48,105,222, 86, - 0,192,146,169,111, 64,235,198, 99,211,207, 20, 25,215,119, 12,215,134,244,249, 54,241,250,209, 73, 73, 87, 15,189,209,190,185, - 47,175, 83,230, 56,113, 25,145, 62, 0, 68, 0,123, 41,165,142,170,117, 91,220,235,210,185,139,193, 33, 10,169,148,210,227,165, - 59,201, 1,180, 38,132,116, 68, 5,235,200,149, 52,198,228,167,232, 11,231,125,108, 14,138, 67,167,174, 52,139,120, 53, 12, 86, - 59, 69,145,197,134, 75,209, 87,176,227,183,245,197, 55,175, 95, 24, 90,156,118,219,233,107, 41, 61, 49,254, 96, 82,252,157,238, -131, 71, 78, 86, 52, 10,111,255,193,206,205,203,222,160,165, 33, 44, 66,128, 26,175, 14, 62,239, 91,191, 79, 29,137,139, 47, 7, - 91, 46, 45,202,120,112,166, 60,157,220, 92,151,226,219,177,151,115,239,167, 89, 61, 36, 30,181, 33,149,185,188, 71,220,253,127, -224, 21,234,201,134, 87,223,117, 61,122,234, 44, 98, 47,159,132,222, 91,131, 7,247,238, 20,199, 94,189,184,178, 8,178,111,168, - 49,214,233,135,142,124,130,219,234, 2,235,212,111,231,234,225,131,173,155, 86, 34, 47, 39,107,225,225,168,173,227,219,247, 28, -130,170, 1,193,237,124,130,219,234,140,177, 71,211,193, 96,252,231,184, 80,193,246,203,208,124,169, 72,158,222,209, 58,148,222, -190,213,241,219, 71, 67, 48,125,214,247,184,118, 43, 1,251, 54,255, 80,106,174,118,156,113,210, 80, 60,122,219,118, 65,250,157, - 71,107, 89, 13,107, 81, 5,195, 30,221, 83,122,151,127,240,148,245, 41, 0,246, 62, 75, 19, 0, 44, 69,249,131,198,127,246,229, -210,150,175, 54, 53,180,106,223,217,213, 33, 40, 65,159, 24, 18,161, 0,124, 52, 20,247,175, 30,204, 53, 38,221,188, 45,154,114, - 70, 61, 75,147, 16,162,152, 62, 44,232,212,140,190, 33, 51,182,156,178, 70, 30, 19,222,127,183,125,139,218, 58,169,194,165,180, -251, 34, 37,255,113, 4,114, 57, 95,174,187, 40, 79,115,246,168,224,238, 19, 6,214,153,190,120, 75,220,198, 82,115,117,155, 82, -154, 85,182,143,140,231,225,166,145,193, 77, 45,131,167, 70, 90,161,230,159, 58, 63,223,186, 93,155,148,153,171,181,206,153,171, -114,210,121,177,111,223,190, 97, 31,126,248,161,252,211, 15,122, 28, 59,118, 54,246,222, 47, 81,191,118,204,206,202,247, 21, 4, - 1, 26,141, 60,173, 69, 93,239,223, 3,171,123, 37, 95,187,118, 77, 60,116,232,144, 69, 16,132, 75,207,210,164,145,145,130,119, -253, 62, 91, 47, 94,190, 54,164, 81,195, 16, 44,253,126,126,221, 59,247,226,235,198,221,127, 8,131,193, 0,131,193,128,124,135, - 26,247,206, 93, 71,113, 65,214,174,248,216, 29,182,202,158,251,168, 81,163, 94,203,205,205,149, 45, 93,186,180,107,155, 54,109, -182,235,245,250,215, 70,140, 24,113,230,199, 31,127, 52, 57,115,238,209,151, 99,182,252,180,118,195,200, 55, 94,239, 45, 51, 59, - 56,225,194,157, 2,187,146,183,144, 0,127, 55,254,116,244, 3,113,205,158,235,200, 53,243, 8, 48,184,113,117,253, 64, 46,157, -222, 42, 30,187,125,245,156, 40, 33,147, 43,147,206, 71,166,179,176,100,201, 14, 77,233,122, 83, 26,133, 4, 54,193,185, 50, 2, - 0,169, 77, 61,114,220,168, 15,238,135,132, 54, 30,245,198,187, 35,101,205, 2,107,224,194,221,124,120,185, 72,225,235, 41, 71, -166, 49, 11, 23,183, 47,112,228, 38, 93, 91,201, 73, 49,171,178,249,249,248, 82, 12,218,122,125, 71, 46, 93, 48,153,223,127, 41, - 27,114, 5, 7,141, 92, 33,170,213,124,133,233,204,201, 45, 56, 51,111,241,202,240,119,222,234,141,174,225, 53,112,226,106, 50, - 68, 90, 50, 84, 47,136, 37,209, 58, 99,236, 14,235,216,183,106,158, 26,209, 43, 80,155,103, 50,214,158, 30,111, 59, 71, 8,225, -202, 86, 14,255, 83, 93,162,116, 63, 33,132, 7,208, 12, 64, 71, 66,200, 9, 74,105,196, 19,233,168, 10, 32, 4,192,131,210, 27, - 24,209,137,115, 39, 54, 7,197,131,116, 19, 78,159, 62, 5,115,113, 62,226,226,238,226,247,125,219, 47, 22,228,101,173, 81, 58, -232,214,226,204,219,133,206, 94, 71, 0, 96, 18, 11, 63,157, 55,117,184,216,184,117,231,206,221,250, 13,147, 79,252,122,149, 71, - 92,220, 93, 65, 20, 1, 77, 64, 87,185, 33, 64, 83,143,163, 54,154,117,115,167,245,225,165, 93, 7, 5,142,155, 80,158, 38,165, - 71, 29, 46,190,117, 86,158, 58,117,236, 51,165,190, 49,234,118,159,220, 61,249,202,206,238,190,193,157,225, 93,171, 5, 82,174, -236,192,213,211,155,246, 95, 18,132,105, 74, 1,137,133,198, 91, 69,149, 73, 39, 0,136, 22,161,127, 72,163, 8,206,100,182, 34, -230,210,153,196,220,251, 39,166,223,208,184,246,123,181,211,192,170,181,234,189,202, 37,222,190,214, 31,192,247,149,209,124, 17, -152,230,255,166,230,223, 13,201,211,239, 96,165,150, 11, 87,111, 43,186,189,247, 13,162, 99, 30,224,224,111,203, 42,101,174,254, - 93,100,197,110,189, 8,160,137, 46,244,205, 94,103, 47, 68,207,170,223,168,185,151, 40,254,235,113, 36, 42,138,252,213, 11, 39, -139,178,226,163, 83, 28,230,162, 79,211,174,254, 90,225,250, 45, 35,250,212,108, 51,227,189,146, 21,218, 39,110, 51,132, 58,132, - 77,124,148, 84,102, 36, 32, 40,253, 31,132, 16,112, 92,201,239,118,135,221,153,199,171,124, 63,238, 31, 52,116,201,214,184,141, - 31, 47,188,122,162, 44,114,245,135, 78,183,216, 6, 55,181, 12,110, 26, 41, 52,110, 50,240,149,204, 11,185, 84,249, 65,187,158, -239, 57,109,174,202,195,104, 52, 94, 33,132,220,156, 63,127,126,211, 21, 43, 86,212,154, 48, 97, 66,194,202,175, 71,252, 4, 0, -251,247,151,140, 8,222,190,125, 27, 75,150,108, 54, 91, 44,150,187, 69, 69, 69,231, 40,165, 21, 70,156, 4,169,244,243,181, 43, -151,215, 77,235,241,122,147,234, 1,117,224,225, 91, 7,225,134, 58,200, 45,182, 35, 38, 49, 27,247,238, 94,198,245, 51,187,175, -201, 69,217,132,202,164,119,192,128, 1,188, 86,171,109, 78, 8,105,209,168, 81,163,122,189,123,247,206, 78, 78, 78, 14,125,240, -224,129, 40,147,201,242,103,204,152,113,105,198,140, 25, 21,142,189, 21,164,223,248,220,197, 47, 52,106,225,162, 31, 38,125,240, -254,187,205, 7,244,239, 35,117,112,174,226,149, 7,102,199,162, 45,177, 36, 52, 64,203,133,202,139,201,153,163, 59,196,216, 43, -231,206, 10, 34,190, 45, 76,139, 61,241,188,245, 54, 53,199,138, 14, 13,189, 96,178, 8,176,216, 41,108, 2, 30, 13,161, 57, 67, -233,251, 20,167,170, 12,245,151,199,140,255, 96,122,104,211,136,183, 90,117,125,155, 83, 85,113,197,177,221,171,233,131,203, 81, - 91, 37, 68,252,178, 40,227,206,131, 23,111, 72,145, 87, 43,176, 30,226,173,185,112, 83,200,160, 86,242,208, 40,165, 21,215, 37, -175,188, 46,135, 15, 31,127,251,247, 67,199,191,234,240, 90,132,215,244, 97,189, 17,185,231, 20, 92, 84, 50, 80, 81,192,155,175, - 85,239,123, 99, 83,167,110, 85,125,212,250,173,199, 18, 79,142, 94,116,253,243,162, 34,219,221,138, 94,203, 82,186,130,255, 25, - 66, 72, 93, 0, 61, 9, 33, 14, 0, 42, 0, 69, 40, 89,155, 70, 5,224,116, 69,235,200,253,241, 28,233,208,240,240,102,235, 9, -168, 28, 20,171, 14,237,192, 94, 17,210, 7,133,233,215,140,207,155,111,197,137,183, 83, 1, 12,114,245,171, 23,113,245,204,225, - 25,173,187,244, 15,107,221,125,176, 52, 62,211, 14, 81,226,130,162,123, 39,109,241, 23,127,185,230,176,154,103, 20,166,221, 58, -246, 44,173, 34, 78, 61,247,242,238,185,173, 2,219,141,109, 94,165, 86, 11,120, 86,111, 12, 0,200, 75,138, 65,226,133,223,118, -231,167, 72, 7, 83,122,237,185,159,238,147, 40,149, 3,107,215,107,132, 91,177, 87, 96, 42, 46,248,133, 82, 42,122,213,106,253, -203,189, 91, 87, 63,211, 7,132,129,147, 43, 7, 62,205, 96, 49, 24,140,167,180, 43, 79, 91,211, 79,219,176,119, 56, 71,165, 59, - 69,209,161,226,121,137, 73,128,189, 87,101,205,213,191,219, 53,147, 1, 3,120,221, 3,249,112,137, 68,210, 46,233,220,207,175, - 3,128,111,211,119,127,230, 5,251,241,148,203,155,214, 62,109, 1,195, 39, 53,123, 71,232,219,183, 9,171, 82,125,252,226,235, - 55, 0,196, 86,180,136,168,147,145, 33, 57,128, 64, 0, 46, 0,238, 82, 74, 51, 31,223, 95, 31, 54,168, 61,207, 75, 85,101,195, -130, 60, 0, 17,212,116,255,236,218, 67,206,230,167,139,111,157,214, 60, 47,249,208, 97, 23, 86, 23,101,220, 60,248,194,249, 73, -136, 90, 46,151,135,251,250,250,234,167, 78,157,170,186,112,225,130,100,223,190,125,230,130,130,130,228,130,130,130, 19,148,210, -226,202,104,146,182,109, 37,218, 44,207,126,224,105, 71, 47, 31,125, 59, 47,111, 95,239,236,204,212,236, 44, 99,218, 97, 34, 10, - 7, 51,100,218, 45,165,243,178, 42, 93,151, 70,143, 30,221,145, 16, 18, 68, 41,173, 78, 8,185,199,113,220, 93,139,197,226,116, - 4,235, 15,249,232, 23,218, 74,163,146,127,254,206,224, 65,205,122,245,234,201,157,185,146,128, 99,135,247, 10,231, 79, 31, 61, -111,177, 58,102, 23,166, 94, 63,241, 34,117, 94,215,240,245,120, 42,148,191, 76,131, 68, 42, 53,166, 92,250,227,123,255,156,209, -116,241,173, 87, 15, 4,147, 57, 10,169,131,136,223, 22,167,222,186,244,178,174, 77,125,195, 55,122, 11,118,251,159, 38,180,203, - 20, 82, 75, 98,244,191,158, 34,124, 86,185,235,178,221,223, 22, 40,190,106,209,182,155, 87,245, 87,106, 33,230,224, 98,236,253, - 7, 57,243,251,165,140,232, 79, 23, 93,218, 17,151,108,190,254,248, 91, 11,156, 77, 39, 33, 68, 7,160, 43,165,244, 39, 66,200, - 48, 0,151, 0,196, 60,203,164,253, 39,238,230, 9, 33, 68,163, 11,232,167,113,209,126, 27,209,237,109,175, 35,187,127, 46,176, -154,243,254, 81,148,122,119,203,211,210,250,167, 54, 68, 87, 95,173,129,125,146, 87,205,102,195, 85, 94, 85, 53, 69,153,241, 57, - 57, 9, 23, 23, 21,167,235,190,171,104,158,106, 69,233, 12,105, 63, 44,121,200,232,153, 30,219, 54,124,135,184, 27,151, 26,102, -222, 58,116,215,187, 78,251,218,254, 1,245,175,180,234,245, 33,246,173,251,218, 17,119,114,141,123,121,109, 40,139,226, 48, 77, -198,211,239, 6,255,178, 31, 0,161,255, 31, 53, 81, 18,152,242, 1,224,242,178,211, 9, 64,246,255, 45, 63, 1,120,168, 84,170, - 46,238,238,238,189, 80, 50,201,248,165,164,211,179,217, 32,215,255,230,115,215,248,134,180,242,173,217,100,155,246,149, 70,219, - 52,190, 33,173,254,206,117,254,223,161,137, 54,109, 36,186,144,222,239,122,135,244,138,127,163,111,155,216,136, 80,109,187,138, -174, 49, 39,235,231, 0, 0,195, 0, 12,248,111,207, 79,160,141, 68,173,111, 88, 31,126,126,170,231,110, 67,234,213,147,169,125, -130,181, 64, 27,201,203, 74,167,103,205, 86, 19, 2, 35,222, 73,243, 8,104, 51,251,241,207, 61, 2, 90, 79,174,217,114,112,146, -103,205, 86, 19, 88,157,103,154,127,181,230,223,237, 71,194, 44,102,185,166,147,226, 95, 79, 25,188,108,109,219,255,195,252,200, - 5, 16,245,178,117, 95,230, 66,144,127, 5,165,145,170, 19,236,138,120, 73,245,232,232, 81, 7,128, 53, 0,214, 60, 62,207,234, - 37,212,207,200,255, 63,215,210, 81, 7,128,107, 47,164, 17, 27,107, 3,144,241, 82,175,197,123,199,231,161,156, 85,115,115,226, -142,125, 3,224, 27, 86,123, 25,140,202,195,177, 44, 96, 48, 24,255, 1,211, 46,178, 92, 96, 48, 24,127,103, 8, 74, 95, 41, 83, - 78, 3,232,244,216, 42, 33, 36,244, 57, 26,216,235, 76,147,105, 50, 77,166,201, 52,153, 38,211,252,223,210,172, 72,251,239, 50, -183,139, 84,240,226,250, 23, 19,103, 19, 0,153, 38,211,100,154, 76,147,105, 50, 77,166,249, 63, 8, 27, 34,100, 48, 42,110, 72, -180,132, 16, 45,203, 9, 6,131,193, 96,252,215, 26, 44,103, 59,171, 23,233,212, 88,135,248,151,148,155,132, 16,242,137,167,167, -231,217,154, 53,107,102,184,187,187,159, 37,132,124, 74, 8,145, 62,175,166,193, 96,104,174,215,235,151,248,250,250, 46,211,235, -245, 45,254,194,180,235, 9, 33,250,231, 60,246, 43, 66,112,175,228,135,124,197,106, 2,131,193, 96, 48,156,225,169, 79, 17,182, -106,213,234,164, 68, 34, 49, 72, 36, 18,103,223, 99, 70,237,118,123,242,209,163, 71, 35, 42,232,172,198,151,254,190,144, 82, 58, -253, 69,246,115,226,216, 37,148,210,207,159,167, 67, 6, 0, 74,105, 10, 0,248,251,251, 7,136,162,216, 90, 42,149,214,177,219, -237,183, 56,142, 59,158,148,148,116,239,191,204, 0,241,245,234,213, 26,204, 19,210, 18,128, 7,128, 92,135, 72, 79,251,248,232, -215, 31, 61,234,220, 26, 57,101, 70, 10,192, 88,141, 70,211, 95,173, 86,191, 82, 88, 88,120,223,100, 50,109,151,203,229,237, 22, - 47, 94,108, 8, 15, 15,119, 53, 26,141,132,227, 56,237,238,221,187, 7, 45, 94,188,184, 3, 33,164, 59,165,212, 81,217, 52, 11, -130, 48,120,231,206,157, 33, 0,208,173, 91,183,161,132,144,179,148, 82,241,201,252, 47, 39,141,196,207,207,175, 5, 0,164,166, -166,158,166,148, 82,189, 94,223, 82,161, 80, 12, 5, 0,139,197,242,115, 74, 74,202,169,151, 80,151,180,132, 96,124,217,194,181, - 28, 71, 62,113,117,117,221, 88, 80, 80,112,167,236,239,165,233,204, 96, 77, 9,131,193, 96, 48,156, 50, 88, 28,199, 25, 86,173, - 90,229,163, 82,169, 64, 74, 95,182, 71, 30,123,233, 30, 33,228,209,182,221,110,135,201,100,194,168, 81,163, 28,149,232,172,173, -161, 53,151, 0, 0, 32, 0, 73, 68, 65, 84, 62,237,216,177, 99, 39,165, 82,249,135,133, 37,205,102,179,148, 16, 4,151,189,117, -158,227,200,120, 66,200, 15,206,116, 98,101,223, 97,181, 90, 56,169, 84, 14,158,231,198, 54,108,216, 48,204,104, 52, 30, 5,176, - 42, 37, 37, 37,203, 9,141, 95, 0,244, 32,132,192,197,197,229, 66, 64, 64, 64,214,251,239,191,239,219,190,125,123,212,168, 81, - 3,169,169,169,205,143, 28, 57, 50,180, 73,147, 38,105,105,105,105,135, 41,165, 71, 83, 82, 82,238,188,160, 57,242,241,242,242, -234, 42,147,201,100, 28,199,229,164,164,164,156,166,148,166, 85,198, 92,133, 6, 7,206, 31, 62, 98,100,221,190,125,251,250,169, -212,174,202,135, 15,227, 82, 86,174, 88,238,126,242,196,169,134,132,144,241,165,171, 95, 59, 19,165,218,245,197, 23, 95,232, 35, - 34, 34, 92,179,178,178,224,112, 56,170,108,223,190,125,120,163, 70,141, 92, 13, 6,131,124,221,186,117, 40, 44, 44,132, 32, 8, -158, 1, 1, 1,158, 3, 7, 14,180,174, 91,183,110, 44,128, 5,149, 61,111, 81, 20,249,210,127,137, 32, 8, 82, 0, 60, 33,100, - 70, 69,134,200, 96, 48, 52,237,221,187,247,108,133, 66,129, 77,155, 54, 69, 2, 88, 12,224,205,131, 7, 15, 6, 2, 64, 68, 68, -196,155, 0, 78,121,120,120, 52, 36, 4,159,136, 98,201,171,147, 42, 83,151,202,163,123,247, 30, 32,132, 44,241,245,245, 61,149, -153,153,105, 32, 4,111, 62,143,113, 99, 48, 24, 12,198,255,176,193, 2, 0,149, 74,133, 93,187,118,129, 82, 10,142,227,192,243, -124,233, 43, 98, 56, 92, 44, 12,133,217, 33, 69, 97,234, 85,244,107, 36, 69,163, 70,141,254, 96,192,158,214,135, 63,110,208,198, -141, 27, 7,157, 78,247,135, 29,210,211,211,113,248,240,161,114,143,113,214,111, 60,190, 49,115,230, 76,247,236,236,236,238,171, - 87,175,238,224,231,231,247,101,106,106,234,137, 10, 34, 87, 61,202, 38,254,119,234,212,169,233,143, 63,254,120,163,160,160,192, -118,238,220, 57,219,242,229,203, 83, 94,123,237, 53,125,255,254,253,101, 99,199,142,245,189,127,255,254,219,187,118,237,122,219, -211,211,115,103, 78, 78,206,220,231, 41, 0,141, 70, 19,218,187,119,239, 14, 63,253,244,147, 92,173, 86,227,222,189,123, 85, 6, - 15, 30,172, 35,132,252,242,228,171,116,158, 70,189,122,181, 6,127, 48,124,120,208,200, 15, 71, 55,182,217,172,197, 87,163,143, - 30,150,200, 56,126,212,168,247,220,179,178,210,189, 68,145, 14, 70,201,250, 67, 21, 49,118,234,212,169,126, 1, 1, 1,213, 54, -110,220,136,194,194, 66, 0,240,169, 89,179, 38, 2, 3, 3,133, 99,199,142, 33, 40, 40, 8,174,174,174, 56,118,236, 24,206,156, - 57,131,198,141, 27,187,200,100,178,215,159,101,176, 12, 6, 67,125,131,193, 48, 77, 87, 90,216,101,249, 27, 22, 22,134,113,227, -198,193,108, 54,163,118,237,218, 53, 85, 42,213,169, 99,199,142, 58, 99,174,149,222,222,222, 24, 57,114, 36, 10, 11, 11, 7, 24, - 12,134, 7,148, 82, 73,105,122, 65, 41,213, 6, 6, 6,174,111,219,182,109,237,157, 59,119,144,231,189, 56, 40,165, 25,132,144, -133, 61,123,246,248, 4, 32,104,215,174, 93,246,184,113,227,132, 27, 55,110,180,234,215,175,111,179,219,183,239,188, 20,227,198, - 96, 48, 24,140,255, 33,131, 85, 22,161, 58,120,240, 32,172,214, 63,191,106,206,179, 77, 35, 76,232, 87, 29, 67,199,172,197,230, -187,113,168, 95,191, 62,158,124, 34,241,137,151,180,102,240, 60,191,138,227,200, 7,132, 16,132,133, 53,202,152, 63,127,126,121, -175, 69,177,135,133, 53,202,224,121, 78, 75, 41, 5, 33,220, 74, 81, 20, 50,202,211,124, 90,135, 40,151, 43,198, 3,128,159,159, - 62, 99,207,158, 61,246,254,253,251, 99,222,188,121,242,137, 19, 39,126, 97, 48, 24,134, 36, 39, 39, 39, 63, 45,157,143, 83,181, -106, 85,220,186,117, 11, 83,166, 76, 73, 75, 79, 79, 95,149,150,150,118,107,195,134, 13,213,107,214,172, 57,116,197,138, 21, 53, - 91,180,104,193,117,233,210, 5,187,119,239,110, 88, 78, 90, 42,122,244, 85, 10,224,149,182,109,219,182,223,178,101,139, 60, 63, - 63, 31, 9, 9, 9, 80,171,213,152, 62,125,186,235,135, 31,126,216, 26,192, 86,103, 52,121, 66, 90,246,234,221, 71,103,181,154, - 10,173, 86,115,193,131,132,139,169, 41, 41, 55,114,107, 7, 52,214,118,234, 28,238,117,235,214,189,150, 79, 51, 88,143,107, 42, -149,202,215, 91,182,108,233,186,113,227, 70, 52,105,210, 4,238,238,238, 56,114,228, 8,174, 93,187,134,236,236,108,142, 82, 10, - 23, 23, 23,204,158, 61, 27, 85,171, 86, 69, 65, 65, 1,226,227,227,171, 72,165, 82,239,103,165, 83, 20,197,110,107,215,174,213, -121,123,123,195,225,112,128, 82, 10,135,195, 1, 81, 20,145,154,154,138,194,194, 66,104, 52, 26,152,205,102, 28, 63,126,172, 92, -179,252,184,102,114,114,242,241, 21, 43, 86, 28,175, 83,167, 78,235,137, 19, 39, 66, 38,147, 77,202,205,205,197,188,121,243,160, - 86,171, 49,115,230, 76,223,176,176, 48, 0,176, 59, 28,142,178,186, 68, 41,197,247,143,155, 32,103,158,128,241,247,247, 63,152, -145, 97,108,241,218,107,175, 33, 39, 39,199, 62,125,250,116,132,133,133,161,118,237, 64, 84,148,159, 47, 11,166,201, 52,153, 38, -211,252, 95,208,252, 91, 26, 44, 66, 8,165,180,100, 24,229,137,223,177,101,203,150,114, 15,124,119, 65, 44, 36,124, 73,255,183, -108,217, 50,100,103,103, 87, 24,109, 18, 4,225, 99,157, 78,103,154, 52,105, 82,187,218,181,107,219, 71,141, 26,117, 41, 62, 62, -126,220,227,251,212,168, 81,227,187, 31,126,248, 1,119,239,222,205,156, 61,123,246,225,244,244,244,201,149, 44,244,105,132,144, - 37, 0,144,146,146,146,181,123,247,238, 38,199,142, 29,251,116,225,194,133,190,163, 71,143,150,143, 25, 51,230, 3, 0, 95, 60, -229,216, 20, 66,200, 6,131,193,240,118, 68, 68, 4,250,244,233,147,213,178,101, 75,219,249,243,231,125,207,158, 61, 59,109,201, -146, 37,226,144, 33, 67,184, 86,173, 90,193,104, 52,226,183,223,126, 19, 31, 62,124,200, 41, 20, 10,147,211,225, 53, 66,218,241, - 60,255, 9,199,113, 97,193,193,193, 55, 71,140, 24,113, 61, 59, 59, 59, 51, 41, 41, 9,197,197,197,176,217,108,144, 72, 36,144, -201,100,149, 88, 63,131,184,171,213, 42,217,153, 83,219,247,167, 36,197,102,166,166, 95,207,227, 64,185,148,148,139,121, 65, 65, -237,188, 80, 50, 39,171, 66, 92, 92, 92,106, 26,141, 70, 20, 22, 22,194,195,195, 3, 11, 23, 46,132, 86,171,133,201,100,194,173, - 91,183,168,191,191, 63, 57,114,228, 8, 12, 6, 3,114,114,114, 96,181, 90, 81, 92, 92,156,110,181, 90,159,121,254, 82,169,116, -231,144, 33, 67, 90,107,181, 90,117, 89, 4, 75, 20, 69,212,170, 85, 11,163, 71,143,198,230,205,155, 17, 23, 23, 7, 74,169,221, - 96,240,207,224, 56,162, 5, 64, 57,142,223,224,112, 56, 50,202, 41, 39,234,239,239, 63,115,218,180,105,254,203,151, 47,127,101, -220,184,113, 16, 4, 1,162, 40, 66, 16, 4,100,100,100, 96,231,206,157, 56,117,234,148,237,214,173, 91,155,221,220,220, 99, 76, - 38,211, 69,139,197,114,223,217, 28,245,247,247, 87,138,162,248,126, 96, 96, 96,215,129, 3, 7,218,101, 50, 25, 76, 38, 19,138, -139,139,113,253,250,117,123,215,174, 93,179,123,246,236,225,181,103,207, 30, 74, 41, 22,178,232, 21,131,193, 96, 60, 31, 79,243, - 32,127,155, 8,214,211, 78,234,231,159,127, 6,165, 20, 60,207,131,227,184, 71, 67,132,133, 41, 34,222, 29,179, 30, 50, 94, 68, - 84, 84, 20, 26, 54,108,232,212, 23,138,162,184, 56, 42, 42, 42, 60, 34, 34, 66,210,161, 67,135, 70,213,171, 87, 15, 75, 72, 72, -184, 12, 0,213,171, 87, 15,235,216,177, 99, 35,173, 86,139,239,190,251,206, 44,138,226,226,231,116,214,143,119,118,231,170, 86, -173,250,229,182,109,219,150,143, 24, 49, 2,126,126,126, 13, 42, 56,118, 68,231,206,157, 27,126,246,217,103,152, 50,101,138,109, -213,170, 85,142,145, 35, 71, 74,218,182,109,139,117,235,214,113,183,111,223,198,170, 85,171,196,109,219,182,165, 17, 66,248,206, -157, 59,235, 42, 81,137,218,232,116,186, 95, 34, 35, 35,197,166, 77,155, 42,239,220,185, 83,119,252,248,241,186,212,212,212, 3, -181,107,215,206, 42, 46, 46,134,195,225, 64, 81, 81, 17, 0, 88,157,213,229,120,146,158,148,116, 95,107,177,229,154,187,180,109, - 49,222, 24,159, 9,159, 26,189,241,251,177, 45,139, 18, 18,227, 68,194,193,169,161,198,194,194,194,251, 14,135,195, 11,128,246, -224,193,131,240,241,241, 65, 65, 65, 1,108, 54, 27, 76, 38,147,205,211,211, 83,145,149,149, 5,139,197, 2,139,197, 2, 55, 55, - 55, 68, 71, 71,103, 59, 28,142,189,207,210,125,248,240,225, 13, 0,157,158, 48,210, 10,142,227, 14,217,237,118,220,187,119, 15, - 55,111,222,108, 31, 31, 31,111, 41,205, 39, 61, 0, 56, 28,142,148,167,105, 38, 37, 37,153,125,124,124, 62,123,239,189,247,198, -233,116,186, 80, 0, 8, 8, 8,112, 27, 63,126, 60,230,206,157,139,152,152,152,105, 82,169,244,108,114,114,178,165,178,245, 71, -167,211, 5,171, 84,170, 9, 99,199,142,213, 5, 7, 7,195, 98, 41,145,112,117,117, 69,113,113, 49,220,220,220, 16, 30, 30,126, -235,203, 47,191,180, 81,138,225,148,210,116,214, 68, 50, 24, 12,198,203, 49, 89,127,171, 8, 86,169,177, 32,132, 16,250,196, 9, -151,116,224, 28,247, 7,115,197,243, 60,250, 53,225, 81, 80, 59, 0, 28, 87, 50,148,232,112, 56,247, 16,153,209,104, 76,247,247, -247,223, 30, 29, 29,221,127,192,128, 1, 56,124,248,240, 71, 0,222, 7, 0,158,231, 63, 26, 48, 96, 0,162,163,163,113,243,230, -205,237, 70,163,241,165,116, 92, 54,155,173,216,110, 47, 25,141, 84, 42,149,178, 10, 13, 11,199,217,100,178,146,221,238,220,185, -211,103,204,152, 49,125, 58,119,238, 60,172,123,247,238,216,185,115, 39,214,174, 93,251, 53,128,195, 17, 17, 17,235, 43,147, 14, -158,231,199,111,222,188,217, 17, 17, 17,225, 74, 41, 69, 72, 72,136,235,132, 9, 19,108,243,230,205,171, 57,100,200,144,172,164, -164, 36,228,231,231, 35, 45, 45,205,246,240,225,195, 56,103,117, 29,130,120,120,201,146, 31, 12,195,223,239,173,219,178,123,245, -172,223,182, 94,109, 48,232,205,180, 88,189,161,190,207,226,165,167,148, 14,135,184,195, 25, 29,179,217,252,219,158, 61,123,222, -172, 94,189,186,246,218,181,107, 48,155,205, 16, 69, 17, 93,187,118, 5, 0, 69,217,126,183,110,221, 50, 23, 23, 23,103,196,198, -198, 22, 36, 36, 36,216, 81, 50,201,220,153, 11,232,209,211,129, 54,155,237,237,110,221,186, 65, 16, 4,116,233,210, 5, 87,174, - 92,121, 27,192,170,178,191, 59, 91,151, 0,124, 14, 0, 6,131,193,203,221,221,125,103, 89,116, 76,167,211,157,138,142,142,182, -251,251,251, 15,148,201,100,225, 38,147,105, 75, 90, 90,218,241,138, 52,245,122,125,139,218,181,107, 79,157, 55,111, 46,209,233, -124, 33, 8,118, 56, 28, 14,100,100,100,162,176,176, 16,193,193,193,168, 90,181, 42,102,207,158, 13,142,227,118, 49,115,197, 96, - 48, 24, 47, 78,121, 30,228,255, 59,220,147, 39, 88,145,185, 42,251, 93, 38,225,225, 93,197, 19,222, 85,188,224,233,233, 9, 65, - 16,224,172,251,228, 56,110,221,198,141, 27,173,238,238,238,232,217,179,103,144,159,159, 95,132,159,159, 95, 68,207,158, 61,131, -220,221,221,177,113,227, 70, 43,199,113,235, 94,146, 43,230,120,158, 31, 28, 17, 17,129,244,244,116,220,191,127,255, 92,101,142, - 79, 76, 76, 44, 72, 77, 77,221, 92, 84, 84, 4,137, 68, 2,179,217, 12, 0, 71, 1, 84,250, 93,106,162, 40, 54,109,218,180,169, -170,108,174,218,131, 7, 15,224,234,234,234,154,152,152,168, 45, 46, 46,134,213,106, 69,110,110, 46, 46, 93,186, 84, 12, 32,197, - 89,221,152,152, 59,219, 47,158,191, 24, 29,117,224, 4,247,202, 43, 13,124,252, 13,234,124,111, 31,127,215,189, 81,215, 84,105, -169, 89,247, 98, 98,226,156,125, 25,238,226,109,219,182,101, 69, 71, 71,223,244,247,247,127,232,238,238, 78, 1, 32, 53, 53,245, - 15, 63, 23, 46, 92, 80, 68, 69, 69, 21, 39, 36, 36,236, 68,201, 67, 1, 14, 39,202,225, 43, 66,112,155, 16,220,230,121,126,126, -195,134, 13, 7,181,104,209, 2,137,137,137,104,209,162, 5, 66, 66, 66, 6,121,123,123,251, 86,178,108,125, 9, 33,250,224,224, - 96,141, 70,163, 89, 52,108,216, 48, 56, 28, 14,116,232,208, 1, 69, 69, 69,171,245,122,253, 63, 58,119,238,252,209,143, 63,254, -216, 64,167,211,125,236,164,236,192,183,222,122,139,168,213, 26,216,237,118,200,229,114,104, 52, 46,168, 89,179, 38,218,181,107, - 7, 74, 41,218,181,107, 39,174, 88,177, 98,167, 74,165, 90,207,154, 69, 6,131,193,120,121, 38,235,111, 25,193,122, 74, 7, 6, - 65, 16, 64, 8,193,217,188, 80,152, 29, 18,228, 37, 94,196,128,166,242, 71, 70,139,231,121,240, 60, 15,187,221, 14,103, 95,187, -243,240,225,195, 92, 63, 63,191, 95, 79,157, 58,245, 78,223,190,125,177,127,255,254, 17, 0,208,183,111, 95,156, 58,117, 10,247, -238,221,251, 53, 53, 53, 53,183,146,157,173, 55, 0,254,241,136,130, 78,167,123,165, 90,181,106, 31, 13, 31, 62,188,121,253,250, -245,177, 97,195, 6, 0, 56,236,116,100,168, 36, 42,167, 5, 80,248,196,185,201, 0,184,138,162, 88,169, 69, 54, 57,142,187,112, -248,240,225,166,221,187,119,119, 77, 72, 72, 64, 74, 74, 10, 34, 35, 35, 51,188,188,188, 50, 68, 81,132,151,151, 23,188,189,189, - 97,183,219, 85,183,110,221,242, 5,224,244, 90, 91, 2,149,175, 60,176,255,220,242,102,141,187,114,175, 84,215,228, 1, 86,114, - 33, 58, 89, 35,145, 73,150, 85,162,114, 59, 8, 33, 61, 79,158, 60, 57,246,204,153, 51,253,252,252,252,200, 59,239,188,131,174, - 93,187, 66, 46,151,195,100, 50, 33, 39, 39, 7,123,246,236, 33, 14,135,163, 5, 0,248,249,249, 85,171, 81,163,198,207,132,144, -228, 7, 15, 30,188,243,148,178,121,114,137,142, 17,125,250,244,185,145,154,154,106, 31, 63,126, 60,230,207,159,143,161, 67,135, - 74, 99, 99, 99,223, 7,240, 79, 39,203,251, 75, 66,240, 9, 40, 72, 82, 98,226,237, 31,150, 46,181,248,249,249,225,224,193,131, - 8, 15, 15, 71,173, 90,181, 94,185,116,233,210, 43,173, 90,181,194,185,115,231,144,149,149,117,166, 34,205,182,109,219, 74,120, -158,175,169,215,235, 17, 31, 31, 15,165, 82, 9, 95, 95, 95,120,120,120,192,199,199, 7,243,231,207,199,194,133, 11,175, 74, 36, -146, 85,201,201,201,247, 88,115,200, 96, 48, 24,140,103, 26,172,199, 93,227,147, 81,172,125,251,246,129, 82, 10,151, 22, 77, 48, -105, 64, 13, 12,254,104, 45, 54,221,187, 5,133, 66,241, 47, 17,137, 4, 31,126,248, 97,165,190,216,211,211,115,211,166, 77,155, -250,182,108,217, 82,211,161, 67,135, 90, 0,160, 84, 42,237,155, 54,109, 42,242,244,244,220, 84, 73,115, 53,133, 16, 76, 4, 5, -167,144,203, 15,122, 85,169,114,200,213,213,181,113,231,206,157,107,117,233,210, 5, 1, 1, 1,136,140,140, 68,100,100,228,225, -212,212,212,211,206,234,214,172, 89, 19, 55,110,220, 24, 12, 96, 53, 0,138,127, 77,226,119, 0,104, 89,181,106, 85,101,101,210, - 41, 8,194,194, 33, 67,134,108,153, 50,101, 74,102, 80, 80,144,102,243,230,205, 57, 7, 15, 30,180,118,235,214,237,126, 89, 71, -110, 50,153, 96, 50,153,228, 6,131,161,118,101, 12, 86, 76, 76, 76, 70,151,206,237,125,150, 46, 63, 85,203,100, 18,108, 59,246, - 29,180,217,173, 26,211,141, 91,247,210, 42,147, 70, 74,169,195,223,223,127,164, 40,138, 62, 14,135,195,230,227,227, 35,251,229, -151, 95,160, 84, 42,193,113, 28,194,194,194,160, 84, 42,173,122,189, 62, 15, 0,180, 90,173,125,193,130, 5,146,247,222,123, 79, - 86,153, 34,243,245,245,197,250,245,235, 81, 84, 84, 52,107,243,230,205,159,127,248,225,135, 8, 10, 10,106,171,215,235,231,167, -164,164,152, 42, 40,111,207,199, 13, 27, 33,164,142, 76, 38,187,177,120,241, 98,235,201,147, 39,183, 69, 69, 69,117, 29, 58,116, -168, 50, 34, 34, 2,167, 79,159,198,202,149, 43,207,185,187,187,127, 87, 81,162,142, 29, 59, 38,250,249,249, 61, 26, 6, 55,155, -205,120,240,224, 1,194,195,195,177,106,213, 42, 44, 94,188,120, 99, 90, 90, 26,139, 90, 49, 24, 12,198, 95, 20,185,250, 59, 69, -177, 36, 21,237,176,121,243,102, 0,192,251,223,223,130,213, 90, 50,143,105,217,178,101,143,214,175, 42, 27, 74, 60,126,252, 56, - 80,137, 53,171, 98, 99, 99,139,252,253,253,215,141, 25, 51,102,230,133, 11,231,181, 0,112,241,226,197,140,180,180,180,169, 73, - 73, 73, 69,149, 48, 87, 30,132, 96,162, 40, 82,190,212,164,117, 28, 63,126,188,190,101,203,150, 54,169, 84,138,135, 15, 31, 98, -206,156, 57, 56,117,234,212,230,212,212,212,165,212,137, 48, 91,124,124,252,185,196,196,196,230,163, 71,143, 70,235,214,173,123, -172, 92,185,178,211,227,231, 22, 22, 22,182,166, 91,183,110, 58,133, 66, 33,177, 90,173,194,157, 59,119, 46, 59, 89,137,142, 17, - 66, 6, 78,156, 56,113, 44,165,180,161, 86,171,125,216,172, 89,179,216,150, 45, 91,102,185,185,185, 65, 34,145, 32, 35, 35, 3, -197,197,197, 16, 4,193,179, 50, 5, 89,181,106,213,136,177, 99,199, 54, 24, 57,114, 36,138,138,138,176,118,237, 90, 44, 93,186, - 20, 85,171, 86,141, 72, 76, 76, 60, 89, 25, 45, 81, 20,125,118,237,218, 85, 22,169,195,161, 67,135,160,215,235,225,238,238,142, -252,252,124,188,243,206, 59,242,105,211,166, 1, 0, 46, 93,186, 36, 85,169, 84, 21,157,119, 6, 33,100, 33,199,145,241, 0, 72, -211,166,205,140,110,110,110,246,179,103,207,198, 37, 39, 39,239, 13, 8, 8,120,125,200,144, 33,181,154, 53,107, 38,187,115,231, - 78, 43, 0,251, 43, 91,145,179,179,179,113,252,248,241,227,169,169,169, 11,181, 90,237,166, 47,191,252,242, 19, 95, 95,223,134, - 41, 41, 41,103,117, 58,221,204,232,232,104,187, 19,229, 35,250,249,249, 37, 30, 56,112,160,106,255,254,253, 33,151,203,145,147, -147, 3, 55, 55, 55, 44, 88,176,128,218,108,182,237,172, 41,100, 48, 24, 12,198, 75, 49, 88,219,182,109, 3,199,113,176,102, 88, -241,225,196,205, 80, 43,121, 28, 57,114, 4, 94, 94, 94,127,152,151, 85, 54,100,248,132,249,121,230,219,182,179,179,179, 79,166, -164, 36,251, 60,182,176,164,143, 66,161, 60, 89,129,161,122,166, 38, 33, 4, 54,155, 13, 81, 81, 81, 56,113,226,132,237,238,221, -187,199, 8, 33,187, 82, 82, 82,174, 58,171,153,151,151,247,237,136, 17, 35, 38,118,237,218,181,249,224,193,131,177,120,241, 98, -217,141, 27, 55, 64, 41, 69,163, 70,141, 80,191,126,125,131,221,110,167, 49, 49, 49,133, 59,119,238,140, 50,155,205,235,157, 77, - 39,165,244, 32,128,131,132, 16, 89, 90, 90,218, 43,121,121,121,237, 69, 81,116,205,200,200, 64,124,124, 60,178,179,179,145,159, -159, 15,135,195,145, 93,153,115, 79, 76, 76, 60,217,180,105, 83,112, 28, 7,147,201,132,164,164, 36, 56, 28, 14,164,164,164, 84, - 58, 63, 57,142, 51,118,235,214,205,199, 98,177, 56,222,122,235, 45,137,209,104, 68, 80, 80, 16, 0,160,160,160, 0,251,246,237, - 67,157, 58,117,202, 34,103, 8, 14, 14,174, 80,147, 82, 58,157, 16,242,163,159,159,223,151,223,124,243, 77,208,217,179,103, 97, -183,219,163, 0,192,110,183, 71, 93,188,120,177, 86,227,198,141,177, 97,195,134,206,229, 25,172,199, 53, 41,165, 57,165,134,237, - 19, 80,144,224,122,245,178,130,130,130,108, 82,169,180, 10, 0,100,100,100,100, 0,152,232,132, 57, 15, 45,103,205,174,169, 91, -183,110,125,239,204,153, 51,173, 62,249,228, 19,210,174, 93, 59, 0, 64, 81, 81,145, 96, 52, 26,139,158, 71,243, 69, 97,154, 76, -147,105, 50,205,255, 5,205,255, 41,131,149,151,151,135,102,205,154,193,110,183,163, 94, 61, 59,242,243,107,194,110,183, 63,154, -252, 43,138, 34, 28, 14, 7, 4, 65, 0,199,113, 78,207,193, 42,195,108, 54,219,158, 92,252,221,108, 54,219, 42, 25, 90,204, 37, -132,204,225, 56, 50, 17, 20,156, 92, 46, 63,183,116,233,210,181, 0,146, 41,165,231, 42, 26,110, 42,143,180,180,180, 76, 0, 19, -170, 85,171,214,232,200,145, 35,163,251,245,235, 87,171,103,207,158,120,248,240, 33, 28, 14, 7,226,226,226,236, 59,119,238,140, -201,205,205,253,145, 82,122,227,121, 50,158, 82,106, 3,112,219,213,213, 21,162, 40,182, 14, 15, 15,247,114, 56, 28,200,204,204, -196,153, 51,103,226, 51, 51, 51, 79, 61, 71, 4, 11, 35, 70,140, 64, 97, 97, 33, 54,111,222,140,253,251,247, 63, 87, 4, 43, 41, - 41,169, 54, 0,232,245,250,116, 55, 55, 55,201,176, 97,195, 96,183,219, 81, 92, 92,140,252,252,124,100,101,101, 89, 63,254,248, - 99, 57, 0,200,229,114,123,151, 46, 93, 36, 78,158,115, 74,139, 22, 45,220,149, 74, 37,142, 31, 63, 46,138,162,120,168,212,212, - 28, 58,121,242,228,232,134, 13, 27,114,222,222,222,117,156,212,250,130, 16,178,220,205,205, 77, 95, 47, 56,120, 17,165, 20, 62, - 62, 62, 85, 95,244,130, 72, 79, 79, 55, 2,152,101, 48, 24,182,126,246,217,103, 31, 52,111,222, 60,228,139, 47,190, 0,165, 37, - 17, 82, 6,131,193, 96, 48, 94,212, 96, 61, 24, 57,114,164,237,241,200,208, 19, 81,142, 63, 69,142, 68, 81, 76,174,164,201,200, - 32,132, 44, 40, 29, 58,194,243, 46,216, 72, 41,157, 73, 8,249, 17, 0,111,182, 88, 94,218, 99,243, 15, 31, 62,188, 68, 8, 25, -182,110,221,186, 14,145,145,145, 19,222,124,243, 77,213,234,213,171,173, 25, 25, 25,243, 1,236,167,148,138, 47,250, 29, 5, 5, - 5,183, 9, 33,169,183,110,221,122, 85, 46,151,171, 4, 65, 48, 26,141,198, 88, 74,105, 97,101,116, 18, 19, 19, 79,234,245,122, -108,223,190, 29, 94, 94, 94,200,206,206,118, 42,130, 85,193, 29, 74,159,141, 27, 55,110, 19, 69, 81,249, 68,217,231,167,164,164, -212, 6, 74, 38,185,239,219,183,239,103, 66, 72,178,147,233,220, 60,106,212,168,119,140, 70,227,111,201,201,201, 57,165,134, 46, -199,223,223,127,225,148, 41, 83, 6,102,102,102,254, 82,137,114, 79, 35,132, 24,239,223,191, 95,144,157,157,237, 42, 8,194, 75, -187, 48,146,147,147,239, 2,248,135,193, 96,104,222,165, 75,151,183, 41,165, 70,214, 92, 48, 24, 12, 6,227,133, 13,214,145, 35, - 71,218,253, 59, 18, 80, 58,116,244, 67,153,225,122, 1,157,204,191, 40,125, 20,192,239,132,144,195,223,125,247, 93,221,226,226, -226,120, 74,105,209, 75,254,142, 2,224,255,216, 59,239,176, 40,174,182,141,223,103,182, 1,203,210,164, 47,189, 40, 42,162, 8, -246,138, 10,182,160,198,168,105,134, 20, 99, 73,179, 36,121, 63, 53,137, 49,198, 68, 77,177,196, 36, 38, 70, 77,162,177, 36,150, - 96, 44,177,163,177,196,134, 5,197, 6, 42,224,178,116, 16, 22, 88,182,204,204,249,254,160,188,104, 40, 11,106, 98,124,207,239, -186,230,218, 54,115,207,153, 51,179,103,238,121, 78,195,158,123,213,209,106,181, 74, 66,200,187, 0,222, 1, 48,143, 82,250,241, - 61,154,140,227, 0, 26, 28, 58, 33, 43, 43, 43, 3, 64, 63, 75, 53, 53, 26,205, 22,220, 53, 5, 80,213,247,241, 0,226,155,145, -119,130,143,143,207,251,211,166, 77, 27, 12, 96,219,253, 62,255,153,153,153, 39, 0,156, 96, 69, 5,131,193, 96,252,227,116, 6, -224, 90,245,190,250,161,215,245,174,247, 70, 0,138, 90,219, 84,127,206, 3,112,170,150, 70,237,239, 27,219, 22, 0,242, 1,156, - 71, 83, 6, 1,127, 24,114,140, 82,154,251,176, 79, 53, 66, 41, 21,202,202,202, 46,222,111,115,245, 0,210,249, 49,165, 84,121, -175,230,234,223,196,173, 91,183, 18, 51, 51, 51,231,102,102,102, 38,177,242,135,193, 96, 48, 30, 93,115, 69, 8,217, 78, 8,217, - 94,101,136, 92,235,120,175,168, 94,167,246,231, 90,198,204,181,142,239, 27,220,150, 16,178,125,230,204,153,253, 0,244,104, 74, -130, 57,118,206, 24, 12, 6,131,193, 96, 60,228,184, 18, 66,182, 83, 74, 99, 41,165,177, 85, 6,168,190, 64, 67,108,237,215,134, -168, 75,167,122, 31,181, 63, 47, 88,176, 96, 30, 0,155,166, 36, 88, 74, 8, 9,171, 39,129, 22,247, 14,168, 79,163,161,223, 26, -211,103,154, 76,147,105, 50, 77,166,201, 52,153,230,163,167,121,191,182,191, 31,212,101,214,170,141, 92,237,207, 51,102,204,120, - 7, 77,168, 30,172, 22,127, 96, 11,128, 48,166,201, 52,153, 38,211,100,154, 76,147,105, 50,205,123, 92, 30,171,180, 44,244,177, -218,239,235,250,174,161,247,141,109,107,193,186, 22,167, 89, 10, 6,131,193, 96, 48, 24,140,135,155,188,218,209,166,170, 8,147, - 48, 99,198,140,119,170,191,171,138, 50, 25, 0, 88,213, 17, 45,171,189, 93, 99,145, 53,139,215,109, 8,102,176, 24, 22, 65, 8, -145, 2,152,236,232,232, 56,198,209,209,209,191,176,176,240,102, 73, 73,201,102, 0, 75, 41,165,230,230,104,182,107, 73,162, 5, - 30,111,139, 34, 36, 18, 41, 22, 94,186, 78,119,177,156,102, 48, 24, 12, 70, 29,156, 2,208,185,150,233,201, 3,144, 52,127,254, -252,162,249,243,231,215,254,238, 28,128,240,170,245,242,234, 48, 74,198,170,207,198, 58,214, 49, 90,178,238, 3, 49, 88,161,190, -100, 60, 68,188, 11, 2, 10,130,121,201, 25,116, 69, 83,182,111, 31, 66,250, 41, 56,233, 50, 10, 42,169, 48, 11, 51,137,128, 58, -199,104,162, 18,244,178,150, 73,230, 19, 16,209, 40,242,175, 36, 93,165, 9, 22,223,180, 91,147, 24, 41,229, 86,137, 34,149,137, - 34, 93,203, 1,191, 43,141, 56,254,167,134, 86, 52,247,172,250,250, 18, 71, 34, 98,136, 92, 42,237,100,226,249,211,148,195,239, - 25, 25,244,246,195,116,229,141, 9, 37,114,169,143,205,231,182, 86,230,104,137, 68,112, 18, 68, 73, 81,121,133,108,191,249,150, -254,173,141,201,212,226,193, 91, 9, 33, 50, 0,147,109,109,109, 71, 41,149,202,128,210,210,210, 27,122,189,254, 87,133, 66, 49, - 96,233,210,165,222,221,187,119, 87,229,229,229, 17,142,227,220,126,251,237,183,177, 95,125,245, 85, 52, 33,228, 49, 74, 41,223, -212, 52, 11, 60,254,115,121,199, 43, 61, 0, 32, 32,250,155,119, 8, 33,123,154, 58,182, 88,135, 96,210, 86, 16, 48,177,177,245, - 36, 18, 44, 63,159,218,188, 65, 97,219, 6,146,111, 8,208, 18, 20,241, 18, 14, 27,147,174,179, 49,177, 24, 12, 6,227, 31, 50, - 89,119,115,210,194,245,254,118,154,100,176, 8,197,236,139, 41,183, 28, 33,154,208, 46, 36,232,125, 0, 77, 50, 88, 10,137,100, -197,169,115,217,238,160, 38,172, 88,244,234,106,163, 25,224,121, 19, 68,222, 12,158, 55,131,231, 77, 16, 4, 51, 68,190, 2,179, - 23, 31, 4,120, 29, 58,117,108,181, 2, 64,160,165,251,144,137,220,170, 51,199,246, 56, 17,190, 24, 63,255, 56,255,149,116,109, -233, 43,251, 79,106, 11, 66,253,201,251,151,210,241,147,165, 55,112, 63, 63,226, 65, 41,134,249,170, 93, 71, 77,159,244,100,215, - 65,253,122,113,190,126, 1,200, 72,191, 57,126,119,194, 17,177,119,119,183, 19, 25,218,188,205,132, 96, 91,122, 58,205,190,151, -147,224,234, 72, 58,216,219,218,124, 35,147,115,182, 50,137, 36, 37,175,168,228,147,236, 2,106,241, 5, 50, 38,148,200, 85,129, -242,227,253,134, 62,239,212,187,255,139,130,141, 82,165,211,220, 72, 52,238,218,182, 48,230,186,252,242,137, 49,161,164,171, 37, - 38,139, 16, 34, 37,132,108,159, 61,123,182, 71,175, 94,189,236, 10, 10, 10,192,243,124,139, 45, 91,182, 76,234,220,185,179,202, -203,203, 75,177,102,205, 26,148,150,150, 66, 16, 4,167,160,160, 32,167,167,158,122,138, 95,187,118,237,100, 0,139, 26,210,246, -247, 39, 86,182, 4,246,119, 24, 44, 17, 53, 3,152,154,121, 40,131,212,240,108, 23, 64,204, 0,160, 48,162, 52, 81, 75, 27, 29, -133, 95, 16, 48,241,236,233,132,113,252,237, 83,128, 96, 2,133, 25, 16, 77, 0, 53,131,138, 38, 64, 52,131, 82, 19,186, 61,254, - 3, 0, 76,110,206,249, 33, 4, 3,246,239, 63,229,145,147,157, 21,185,120,241,188,183, 67, 3,200, 30, 78,130,245, 23,175,227, -200,253, 24,108,150,193, 96,252,243, 12, 24, 48, 96, 85,105,105,233, 39, 39, 79,158, 76,185, 95,154, 30, 30, 30,109, 56,142, 75, -111,206,140, 34,181,137,136,136,152, 10,224,133,170,143, 63,158, 57,115,102,201,189,166,173,107,215,174, 94,148, 82,247,170,178, - 63,231,196,137, 19,153,236, 42,248, 7, 13, 22, 5,172, 64, 69,224,232,227,160, 4,214, 77,221, 25,165,176, 6,145, 0,230, 82, -140,136,141,134,139,179, 39, 32,148, 1,130, 30,224,203, 1,161,114,201,207, 75, 7,248, 50, 32,239,119,240,148, 90, 53,249,168, -204,197, 64,238, 70, 12,236,238, 11, 71, 59,107, 76,121, 58,212,249,187,248,171,203, 86,198, 95,233, 7,224,249,198, 54,247,246, - 38, 75,102, 76, 26,241,242,192,152, 88,226, 31, 20,134,194, 60, 13, 78,158,250,243,246,226,239, 54, 93,138,233,219,169,237,168, -145, 79, 58, 78,156,244,118,247,244,235, 23,186, 31, 60,176,117,145,175,154, 44,205,208,210,153,205,138,142,121,202, 39, 14,140, -142,158,251,205,119, 63, 42,109, 84,206, 40, 41,204, 8,120,238,217,145,225, 30, 45, 72,108,118,161,101, 17, 23,153,143,205,194, -232,216,151, 90,140,126,225,115, 59,179,169,212,164,189,182,235,146,173, 13,207, 61,245,244,148,226, 31, 87,188,239,113,221, 84, -184, 16,192, 27, 22, 72, 77,158, 61,123,182, 71, 80, 80,144,239,186,117,235, 80, 90, 90, 10, 0,110, 45, 91,182, 68,203,150, 45, -133, 67,135, 14, 33, 36, 36, 4,118,118,118, 56,120,240, 32,142, 31, 63,142,142, 29, 59, 42,229,114,249,168,134, 12, 86,219, 96, - 50,230,241,126,157,190, 10,244,243, 82, 86, 54,254, 19, 65,169,136,210, 82, 3, 94,157,151,136,162,146, 10, 12, 29, 16,209,202, -223,203,238, 26, 7, 17,148, 2,105,218, 28,161, 77, 32,121,250,242, 13,186,179,177,200, 84,199,206,253,122,156, 75,252, 51,196, -148,187, 29, 93,134,206,191, 10,138, 99,255,117, 71,232,145,120,232,135, 16,224,135,102,253, 65, 8, 33, 36, 52, 0, 66,198,159, -159,192, 59, 98,188,100,249, 15,187, 92,138, 11, 50,159,221,178,241,155,199,151, 45,255,246,231,230,154, 54, 6,131,241,208, 49, -200,209,209, 49,170, 75,151, 46,131,238,151,201,146,201,100, 54,130, 32,180, 82,171,213,215,154,107,178,166, 76,153,242, 26, 33, -228,227,196,196, 68, 0, 64,100,100,228,199,145,145,145,117,142,115,104,111,111, 95, 22, 26, 26,250,225, 23, 95,124,241,117, 67, -154,211,167, 79,247, 52,155,205,254,103,206,156,169, 54,112,254, 17, 17, 17,254,117,173,107,107,107, 43,116,237,218, 53,253,147, - 79, 62,201, 98,151,200,131,140, 96, 1, 87,179, 15, 79, 13, 55, 22,150,131, 0, 87, 27, 55, 84,119,118,181,172, 48, 11,159,255, -184,228,249,185,237, 66,156, 80,162, 51, 98,239,225, 52,152,121, 19, 68,158,135, 32,152, 33, 84,189, 14,234,238,130, 30,252, 36, - 44,221,112, 5,102, 94,252,172, 33,205,191, 68, 52, 32,190,208,177,239,147, 63, 9,148,202,109,173,185,146, 32, 95,103,215,183, -159, 11,231,166, 60,221, 14,250, 10,126, 84, 91,127,114,232, 82, 26,253,161, 33,205,118, 1, 78, 47,189, 58,126, 60, 17,149,237, -112,250,248, 78, 76,254,191,119, 83,243, 11,138,230,167,107,112,102,219,254, 63,252,124,221,157,103, 47,153,247,110,199,144,240, -193, 24,204,233,241,199,145,195, 47, 0,152,217,148,116,186,187, 19,165,104,192,208,174, 93, 58,125,184,122,195,118, 37, 87,122, - 22,200, 88, 11, 71,199,238, 88,190,244, 19,183,225, 35,199, 44, 2, 48,208, 18, 77, 91, 43,115,116,239, 1, 47,192,108, 42, 53, -153, 13, 58,131,190, 40,217, 36,148,231,154, 56, 25, 39,237,220,161,109,110, 78, 78, 66,140, 37,231,200,214,214,118,116,143, 30, - 61, 84,107,215,174, 69,100,100, 36, 28, 29, 29,113,224,192, 1,156, 63,127, 30, 5, 5, 5, 28,165, 20, 42,149, 10, 11, 22, 44, -128,143,143, 15, 74, 74, 74,144,158,158,238, 36,147,201, 90, 52,148, 78, 43,169, 52,238,243, 79, 62, 81,114, 28, 0,145, 7,232, -127, 23,109,118, 46,202,202,244,112, 84,201,225,218,194,166,230,123,222,108,148,116, 26,242,159, 73, 0,118, 54,116,236,231, 83, -233,165,118, 1,228, 24, 40, 31, 66, 5, 61, 64,113,236,226, 77, 90, 99,122, 58, 4,147,182,145,125, 94,156, 40,145, 96,121, 99, -215,103, 93,132, 6, 96, 72,231, 54, 42, 91, 27,243, 37,104, 18, 38, 35, 85,176,162,238,237,199,225,233,103, 95, 83, 46, 95,177, -124, 40, 33,100, 10,173, 53, 9,231,131,232, 94,204, 52,153,230,163,160, 57,102,204, 24, 9, 0,108,220,184, 81,120, 24,211, 41, -149, 74, 77,223,126,251,173,219,164, 73,147,118, 91,106,178, 26,189, 31, 85,206,223,117, 13,128,197, 38,235,110,205,212,212,212, -249,243,231,207,199, 47,191,252, 2, 0, 88,183,110, 29, 90,181,106, 85,231,182,231,207,159,183,125,231,157,119,230, 3,248,186, - 33,205, 11, 23, 46, 4,204,155, 55, 15, 63,255, 92, 57, 51,217, 79, 63,253,132, 54,109,218,212,169,121,246,236, 89,201,187,239, -190, 27, 0, 32,235, 65,159,163, 71,214, 96, 17, 66, 40,165,148, 52,178,254, 13, 15, 59, 89, 56,204,102, 0,184,209,212,157, 37, -167,210, 69, 29, 67,100, 49,251,182,124,221,203, 90,193,225,131,197,111,105, 10, 10,116, 81, 18, 14, 34, 0, 8, 34, 56, 7, 59, - 69,194,252, 55,194,125,138,138, 43,176,237, 80,230,145,228, 27,180, 73,161,208,164,107,244, 0, 0,207,154, 27,108, 32,105, 25, -247,238,190,213, 63,127, 50, 40,108,218,216, 14,136, 63,152,246, 6, 26, 9,103,168,148,114, 9,201,222,140, 34,225, 60,186,118, - 29,134,147, 39,111, 6,159, 59, 30,255,253,134, 13,107,132,231,159, 30, 37,105, 21, 57, 26,229, 5,151,145,254,231, 60,232,210, -247,193, 94, 41,149, 89,154, 62, 87, 71,210,193,198,198,230, 53, 95, 15,191,216,233, 51,167, 75, 99, 99,159,178,230,202, 46,128, -102,109,132,104, 42,133, 88,118, 11, 45, 84, 93, 64, 8,220, 45,126, 74, 82, 72, 28, 85, 42, 71, 83,230,197,117,151, 77,165, 55, - 76,208,103, 11,180, 92, 75,136, 66, 70,189,221, 60, 32,225,120, 7, 75,116,108,108,108, 2,114,115,115,161,211,233,224,224,224, -128,197,139, 23,195,205,205, 13,122,189, 30, 87,174, 92,161,222,222,222, 36, 33, 33, 1, 94, 94, 94, 40, 42, 42,130,209,104, 68, -121,121,121,142,209,104,108,176,208,168, 48,241,223,188,249,246,155,189,253,188,221, 37,213, 17, 44, 81, 20, 17,222, 46, 16,253, -251,116,195,222,139,167, 16,127, 62, 5, 34, 21, 81,253,123,154, 38,191,204, 36, 10, 63, 89, 92,120,138,124,101, 36,180, 14, 3, -214,156, 40, 83,251,246, 68, 41,148, 98, 70,215, 80,187,231,103, 62,231,171, 82, 89,113,168,176, 22, 80, 97, 52, 67,119,121, 25, -156,125, 58, 64,105,109, 77, 34, 34,244, 82, 0,102, 86,148, 48, 24,127,165, 83,167, 78,157,149, 74,229, 84, 0,125, 13, 6,131, -157, 40,138,232,221,187,183,142,227,184, 67,229,229,229, 75, 78,159, 62,221,220,182, 50,213,247, 42,122, 63,211,235,231,231,135, -166,154,172,198,208,106,181,122,181, 90,221, 36,147, 85,155,188,188, 60, 73, 72, 72, 8,244,122, 61, 68, 81, 68, 89, 89, 25,226, -227,227, 81, 82, 82, 2, 81, 20, 97, 99, 99,131, 37,251, 12, 40,187,184, 22,107,191,251, 28,121,121,121, 18, 11, 52, 73,155, 54, -109, 80, 81, 81, 1,158,231, 97, 48, 24,176,103,207, 30, 24, 12, 6,152,205,102,200,100, 50,204,219,122, 27,134, 11,107,241,195, -138, 79,145,151,151, 71, 30,244,181, 98,161, 7,249,247, 25,172,234, 3,251, 59, 14, 80, 16,249,217,223,253,184, 62, 97,230, 27, - 79,227,245,184, 1,222,115,190,248,181,223,197, 27,116, 29, 0,180, 13, 36,207, 62,247, 88, 75, 31, 71, 91, 25,230, 44, 63, 13, - 16, 58,251, 94,247,119,254, 6, 77,105,223,138,252,223,175, 7,211,119,191, 51, 46, 2,193,222,246,193,193,193, 68,145,154, 74, - 27, 25, 48,140,226,245,247,190, 4,111, 94, 98,126,123,210, 19,178,174,253,158, 71,120,143, 93,146,194,155,187,112,122,203, 56, -252,240,235,159,229, 50, 41,172,227,250,200, 44, 30, 13,223,197,129, 68,116,235,214,125,247,242,239, 86, 90,187,171,131, 9, 49, -231, 1, 37,135,192,103,239,129, 65,159, 15,163, 94, 7,147,104,135,226,140, 3,176, 82, 80,139,255,216,102,163, 88,112, 59,255, -186,141, 68,188, 77,218,180,109,209, 11, 69, 7, 0,167, 49, 72, 59,123,244,212,205, 92,173,157, 32, 74, 11, 45,209, 41, 45, 45, -189, 97, 54,155,157, 1,184,238,223,191, 31, 21,219,161,237, 0, 0, 32, 0, 73, 68, 65, 84,174,174,174,208,233,116, 48,153, 76, -208,235,245,102, 39, 39, 39, 69, 65, 65, 1, 12, 6, 3, 12, 6, 3,236,237,237,113,250,244,233, 82,158,231, 27,156, 67,240,242, - 13,186, 51, 82, 77,220, 15, 40,160,170,254, 78, 34,129, 51,111, 50,158,234,223,179, 61, 18,207, 93,193,198,237, 39, 58, 11, 2, - 10,170,127, 47,163, 40, 73, 75,163, 6,203, 31, 79,121, 80,225,191,253, 24,170, 27,191, 55,167,113,123,104, 32,233,100,101, 37, - 91,184,224,157,199,218,244, 13, 21,172, 72, 69, 22, 8, 0,165,181, 20, 6,163, 0, 7,207, 96, 80,163,142,234, 43, 42,138, 47, - 92, 0, 15, 6,131,241,151,104, 85,110,110,238, 82, 39, 39,167, 81,113,113,113, 54,125,251,246,229, 56,142,195,226,197,139,145, -157,157,109, 63,104,208,160,216, 53,107,214,244,239,211,167,207,102, 55, 55,183,201,150, 68,181,106,221,179,100, 0,170, 77, 4, -189,126,253, 58, 63,120,240, 96, 92,191,126,157,171, 50, 94, 34, 0, 83,115,219, 71, 62,140, 38, 43, 43, 43, 11,121,121,121,136, - 25, 54, 12, 75, 22, 44, 64,159, 62,125, 16, 29, 29, 13, 0,216,183,111, 31,186,170, 78,160, 69,108, 31, 92,186,100,121, 81,119, -235,214, 45, 20, 20, 20, 96,232,136, 17, 88,177,108, 25, 34, 34, 34,208,186,117,107, 0, 64, 66, 66, 2,250,123,164, 64,213,178, - 63, 46, 95,190,252,192,175,151,191,211,131,252, 35, 17,172,191,139,164, 20,122, 50, 52,144,252,254,244, 99, 93,134, 12,235, 31, -138,149, 27,246,127, 16, 26, 74, 54, 85, 26, 16,171,217,113,143, 5, 33,249,122, 17,246,159,208,254,158,124,131,158,188, 31,251, -228,121,248,184, 59,171, 0, 78,129, 50, 35,207,219,219,195,226, 63, 94, 82, 90,126,203, 39,167,124, 59,126,234,147,127,190, 51, -229,217, 48,172,221,112, 22,139,126,185,252, 31,147, 9,171, 71,245,110,145, 1, 88,222, 22,205, 78,105,243,202,242,239, 86, 90, -123, 56,203, 9,210,151, 64,208,107, 32, 84, 20,192,100,184,141,146,226,219,208,100,229,163,168, 92,138,244, 28,162,207,204, 54, -174,181, 84,183,184, 92,250,219,182, 77,159, 61, 63,122, 84,156,243,181,147,223, 29,223,122, 64,239,250,116,204,239,101, 10, 91, - 63,199, 67, 39,247, 57, 21,235,165,223, 91,162, 83, 81, 81,177,249,247,223,127,127,202,207,207,207, 53, 41, 41, 9, 21, 21, 21, - 16, 69, 17, 67,134, 12, 1,106, 77,128,121,249,242,229, 10,189, 94,159,123,241,226,197,210,140,140,140,114, 0, 75, 27,211,174, -106,176, 94, 83,168,180, 13, 32, 99, 66, 67, 60, 1, 65,143,182, 45, 61, 96, 22,208,239,210, 77,250,101,179, 79, 50, 53, 87, 70, -176, 8,122,180, 11, 32, 75, 65,208,227,244,129,197, 33,157,250, 79, 67, 83, 34, 88,161,193,100, 96, 88,136,122,249,226,121, 51, -157, 90,184,250, 72, 32,232, 65,248, 18, 42, 22, 30,135,180,236, 26,236,189, 31,131,224,208, 3,203,191, 94, 88, 38, 8,116, 99, -237,234, 65, 6,131, 81, 99, 40,222, 11, 9, 9, 25,253,229,151, 95, 42,207,157, 59,135,178,178, 50,156, 56,113, 2,159,125,246, - 25, 70,141, 26, 5,111,111,111, 46, 62, 62,222,246,141, 55,222, 24,125,245,234,213, 60, 0,115, 26,185, 1,187, 56, 59, 59, 59, -230,231,231,107, 1,200,171, 76, 22, 73, 75, 75, 67, 66, 66, 2, 23, 30, 30, 78,115,115,115,249, 41, 83,166, 56,150,150,150,118, -248,226,139, 47,142, 0,200,121, 84, 34, 89,155, 55,111,198,217,179,103, 49, 59, 60, 28,211, 60, 61,225,236,236,140, 67,135, 14, -129, 82, 10, 91, 91, 91, 20, 22, 22,226,231,159,127, 70, 84, 84,148,197,233,249,237,183,223,112,234,212, 41,124,216,177, 35,222, -176,182,134,131,131, 3, 18, 18, 42, 59,236, 91, 89, 89, 65,163,209,224,192,129, 3,232,211,167, 15,187,160,155,137,197,209,151, - 40, 66,164,132,192,221,108,214,195,196, 83, 16, 2,207,208, 80, 34,111,150,171,227,240,193,210,239,183, 83, 43,137, 9,227, 71, - 71,122, 66,143,241,208, 99,252,184, 17, 33,106,165,149, 20, 95,108, 72,166, 82, 14, 31,220,143, 3,108, 31, 64, 90,181,176,183, -126,255,177,168,118,200,200,209,227,198,173,146,221,137,137,150,143,219,116,227, 6,138, 52, 90, 44, 41, 53,242,144, 72,164, 40, -214, 83,104, 52,248, 62, 55, 23,134,166,166, 69, 34, 37, 3,221,213,193,132,230,196,195,112,251, 10,202,110,107, 80, 80,160,129, -174,184, 0,101,229, 58,232,116,229,200,202,212, 98,215,159,218, 34,190, 66, 56, 98,169,238, 47,123,202,223, 57,115,230,200,149, -147,199,247,216,218,187,118,112, 10,245,183, 18,109,237,212,118,135, 78, 36, 59,104,115, 43, 46,255,178,171,220,210,188, 92,186, -121,243,230,162, 51,103,206, 92,246,246,246,206,112,112,112,160,132, 16,100,101,101,221,177,156, 62,125,218,106,215,174, 93,229, - 25, 25, 25, 91, 1,196, 54,117,136,134, 14,193,164,109,255,238,173,230, 14,141, 10, 3, 4, 61, 98,163,218,162, 79,231,128,185, - 29,130, 73,219,102,251, 43, 90, 89, 69,120,108, 93,255,144, 99,107,123,141, 59,186,186,107,136, 49,243,167, 38,235, 16, 17,111, - 76,123,202,223,190,133,141,145, 35, 66, 41,136,204, 1, 80, 6, 19,206,251, 89, 34,139, 88, 77, 50,202,253,132,209,207, 62,157, -183,226,167,237,223,184,136, 88,194,138, 16, 6,163,142, 27, 11,199,141, 27, 59,118,172,210,198,198, 6,214,214,214, 88,179,102, - 13, 94,121,229, 21, 88, 89, 85,246, 89, 82, 42,149,176,177,177,193,216,177, 99,149,132,144,151, 44,144, 44, 44, 41, 41, 81,141, - 28, 57,210, 7,128, 18,128,173,209,104, 84,229,231,231,219,115, 28,231,208,174, 93, 59,183,217,179,103,135,148,150,150,118,216, -182,109, 91, 46,128,252,230,164,187,184,184, 24,215,175, 95,199,206,157, 59, 49,113,226,196, 50,158,231, 21, 42,149,106,250, 61, - 70,103,100,238,238,238, 74,181, 90,237, 76, 41,109, 77, 41,229, 40,165,190,205,209, 18, 4, 1,157, 58,117,194,190, 63, 78, 97, -249,198,163, 88,248,245,106,100,100,100,160, 77,155, 54, 16,197,230,119,104,238,220,185, 51, 14, 28, 56,140,181, 91, 79,226,179, -197,223, 64,163,209,212,219, 38,139,209,196, 8, 86, 99,161,185,208, 0,210,222, 61,204,106,229,187,195,131,218, 72,219,125, 0, - 34,181,193,150, 31,182,117,159, 57,255,219, 51, 29,188,201,184,243, 26,218,164,122,244,243,169,244, 82,187, 64,178,241, 92,114, -155, 39,135,247,241,193,138,141,202, 25, 0,240,100, 76, 32, 78, 38,231,225,196,133,220,141, 23,111, 52,111,204,162,106,218, 4, -146, 96,142,226,249,182, 65,238, 19, 22,207, 26,173,116,117, 81, 98,222, 55,167, 33, 2,107, 45,191,152, 1, 0,222, 0,138,255, - 27,167, 32,213,209, 28, 71, 65, 68,147, 66,153, 28,161,123,178,211,207, 61,229,204,181, 32,165, 37,249,200,214,222,130,174,164, - 20,142,246, 50, 56, 40, 37, 80,123,186, 65,233,224, 13, 81,154,231,120,229, 70,105, 23, 0, 22, 15,188, 89, 98,150,191,122,244, -232,222, 35, 61,195, 39, 84,180, 13,144,241, 82,153,196,250, 84,114,154,149, 78, 47,127,195, 82, 13, 74, 41, 79, 8,137, 61,124, -248,240,228, 99,199,142,141,244,244,244, 36,113,113,113, 24, 60,120, 48,172,172,172,160,215,235, 81, 84, 84,132, 29, 59,118, 16, -158,231,123, 0,128,167,167,167,175,191,191,255, 15,132,144,204,155, 55,111,198, 89,178, 31,133, 66,177,240,253,201, 67,101,188, -169, 20,115,150,238,192,251,175, 71, 99,246,235, 81,178,216,137,153, 11, 1, 12,106,214, 9, 23,121,136, 66, 5,122, 60,247, 71, -101, 47, 66,130, 30,167,118,127, 20, 2,156,181, 88, 34, 50,146,200, 36, 82,210,186,173,151, 65, 38,100,110, 0,177,246,162, 18, -231,190,128, 42,132, 80, 85, 24,190,250,226,253,178,149, 43, 87,238,163, 28,230, 37,167,209,203,172,248, 96, 48,234,166,172,172, -108,210,135, 31,126,184, 58, 56, 56,216, 38, 44, 44, 12,203,150, 45,195,208,161, 67,107,204, 85,251,246,237,113,235,214, 45,204, -153, 51,167,162,188,188,252, 21, 11,202, 38,145, 16,114, 41, 33, 33,161, 77,108,108,172,103,159, 62,125, 72,219,182,109,101, 86, - 86, 86,162,193, 96,176,205,202,202,178,186,124,249, 50, 78,159, 62,125,189,162,162, 34,137, 82, 42, 52, 39,221,115,230,204, 41, -115,113,113,177,157, 58,117, 42, 62,253,244,211,204, 63,254,248, 35,226, 94,243,194,211,211, 51,128,227, 56, 49, 51, 51,243,166, -151,151,151,167, 70,163,105, 86,227,240,234, 96,249,249,243,231,113, 56, 69,132,194,214, 9,105,151, 75,176,239,183,173, 24, 59, - 97, 34,120,190,249,173, 21,206,158, 61,139,117,123, 46,195, 35,160, 13, 42, 46,159,197,230,205,155,241,202, 43,175,220,147,102, - 19,143,141, 60,178,109,176,170, 15,240,238, 31,131,131,137, 66, 97,192, 59,131,186,123, 77, 27, 61, 32, 88,194,151,103, 65, 20, - 69, 72, 0,184,216,113,248,254,187,229, 1, 27,127,253, 61,161,189,175,100, 25,140,226,156,164, 28, 90,110,177,171,151,226,163, - 69, 63, 30,125,226,167,185,125,165,175,140,105,227, 4, 0,114, 25,135,165,235, 47,242, 68,138,143,154, 24,165,234, 37,149,113, -235,204,148,218, 80,129,102,120,121, 56,217, 62, 49, 48,210,235,241,129,157,208,161,173, 47, 68,222,132, 15,191,142,199,198,157, -231,191,190,124,179,225,110,255,119,152,180, 0, 71,156, 82,231,188,205, 73,241, 17,169,101,175,220,221, 33,151, 75, 49,181,149, -143,181, 2, 77,104,130,163, 43,215,127, 51,115,250,212,232,119, 95, 31,222,194,164, 83,146,107,105, 69,128, 80, 1, 91, 27, 21, - 84, 30,189,225,104,223, 18, 21, 37, 89,144, 75, 19,149,238, 46,154, 49, 77, 49, 88,191,238,212,165,188, 30,215, 90,242,193,151, -167, 92,140,229,160,188, 41,145, 43,175, 32,116,243,222,146,212, 38, 94,232,102,111,111,239,137,162, 40,186,242, 60,111,114,117, -117,149,255,242,203, 47,176,182,182, 6,199,113, 8, 15, 15,135,181,181,181, 81,173, 86, 23, 3,128,155,155,155,121,209,162, 69, -210,113,227,198, 89, 20,205, 12, 13, 36, 62, 35, 7,182,235,233,108, 47,193,234, 95,143, 97,235,190, 75, 91, 3,188,108, 71,188, - 52,162, 29,162,186,120,245, 12, 13, 36, 62,201, 55,232,173,166,255, 67,205,168,221,139,176, 67, 48,105,219,121,224,123,117,246, - 30,172,143,128, 51, 16,175, 6, 81, 16, 34, 1, 5, 1, 42, 50,193,107,214, 66, 18,248, 6,253, 53,254, 35,253,138,239, 86,206, - 79, 78,163, 44,106,197, 96, 52,194,185,115,231,126,239,210,165,203,140,184,184,184, 5,113,113,113,138, 23, 94,120, 65,114,252, -248,113,136,162,136, 78,157, 58, 97,229,202,149,252,134, 13, 27,204, 6,131, 97,250,185,115,231,126,183,176,108, 50, 16, 66,206, -237,216,177,163,197,165, 75,151, 90,200,100, 50, 23, 81, 20, 29,203,203,203,243,141, 70, 99, 65, 81, 81, 81, 46,128,162,230, 86, -219, 87, 84, 84, 88, 95,186,116,233,132,201,100, 82, 79,157, 58,181,117,116,116,116, 72,100,100,100,151,196,196,196,102, 55, 85, -225, 56, 78, 46,138,162,158, 82,106, 83,189, 27, 87, 87, 87,219,188,188,188,178,230,232, 73, 36, 18, 20, 21, 21, 65,151,153,138, -242,252,124,180,150,148,163, 99, 11, 87,216,217,217,193,108,110,126, 95,155,210,210, 82, 88,241, 26,220, 60,117, 19,249,249,105, -104, 25,208, 17,182,182,182, 48, 24, 12,127,219, 53,243,168,153,171, 59, 12,214, 95,110,132,190,100,188,147, 28,159,190, 48, 38, - 80, 30,232,239, 5, 99,222,105,156, 77, 45,195,123,171,186, 92,150,200,237, 12,175, 63, 31,211,177, 95,180, 43,250, 70,117, 38, -254,126,239,189,182, 96,193, 55, 19, 67,125,200, 59,201,183,232,215,150,236,248,194, 53,122,179,109, 0,249, 49,225, 84,230,203, -222, 46,122, 80, 80, 36,156,206,194,249,148,162, 31, 47,221,164, 55,155,116,209,201,185, 53,103, 18,147, 90,128,215, 35, 59,245, -247, 16, 15, 15,127,128,154, 97, 54,234,113,252,204, 5,172,252, 57,129, 63,117, 62,237,255, 46,165, 81,139,110,182, 41, 25,183, -247,165,106,138,163, 63,156,212, 5, 67,122,250,190, 48,127, 85,226,211, 53,157, 85, 40,197,224, 78,142,151,198,246,179, 83,218, - 72,141,224,161, 64,226,181,226,189,150,232,102,229,211, 51,158, 46,228,137,243,231,207,189,232,229,225, 16, 61,164,179,141,139, -171, 61,228,118, 46,254, 80,216,182,128,200,151,162,188,240, 42,168, 80, 1, 2, 49,176, 41,121,224,227,227,211,107,234,212,169, -214, 19, 39, 78, 68,105,105, 41, 86,175, 94,141,101,203,150,193,199,199,167,215,173, 91,183,142, 52, 69, 75, 20, 69,215,109,219, -182, 1,149,109, 29,176,127,255,126,168,213,106, 56, 56, 56, 64,167,211, 33, 46, 46, 78, 49,107,214, 44, 0,192,153, 51,103,100, - 54, 54, 54, 77,248, 19, 97,204,224,158,129, 4,130, 30,155,118, 93, 44,128, 53, 94,220,178,247, 74,207,151,134, 5, 58, 15,233, -230, 73,118, 28,186, 57, 6,192,231, 77,255,115, 10,128,168,191, 35, 74,138, 38,246, 30,220, 72,169, 16, 26, 72,174,111,216,155, -103, 59,122,104,132,141, 92,198, 17, 90,161,129, 72,228,100,201,178,239, 75,109,165,248, 30, 12, 6,195, 34, 78,158, 60,185,170, - 91,183,110,127,254,240,195, 15,111,113, 28,215,211, 96, 48,184, 2, 16,247,236,217,147, 45, 8,194, 97,189, 94,191,244,244,233, -211,215,154,120, 19,166, 0, 10,170,150,107,247, 51,189, 82,169,244,231,146,146,146,185,130, 32,140,222,189,123,247,194,145, 35, - 71,226,183,223,126,123, 9,117,143, 20,110,105, 89, 90,146,149,149,117,211,219,219,219,197,207,207,207,165,172,172, 44,199,202, -202,202, 3, 64,106,115,244,172,172,172,112,248,240, 97, 12,233,213, 27,231,246,165,163,141,187, 15,250,141,125, 30,241, 9, 9, -144, 72, 36,205, 61,110, 28, 62,124, 24, 79, 12,237,135, 45, 91,182, 32, 32, 34, 12,175,191,254, 58,246,236,217, 3,169,148,205, -166,247, 64, 12, 22, 17, 49,107,239,207,243,228, 16,205,216,180,238, 83,236, 59, 85,110,188,172,193, 7,173, 51,241,245, 38,232, -196,156,130,205, 47,119, 61,116,253,227,151, 94,136, 85,246,239, 27,131,254,125,250, 73,219,133,247,157,129, 90,227,111, 16, 66, -194, 26, 26, 43,131,138, 88,176, 98,243,229,113, 27,118, 94, 37,224,117,120,122,120,103, 74, 69, 44,104, 48,242, 85,159, 38,175, - 7,138, 79, 96,251,190, 99, 80,187,103,226,218,141,116,108,217,121,226, 86,177,174,252, 39, 66,176,246, 82, 90,253, 81,145,187, - 53, 11,116,198,215, 6,191,177,253,171, 39, 99,130, 98,166, 61,211, 1, 91, 23, 61,166,184,161, 45,134, 32,240,136,233, 64, 65, -218, 40,148, 34, 4, 28, 75,149,210, 21,219, 51,227, 75,141,194, 52, 75,211,153,149, 79, 19, 1, 36, 6, 58, 17,251,139, 41, 24, - 50,178,183,219,199,221, 34, 4,183,210,156, 68,100,101,164,224,182,222, 26,154, 2, 2, 80, 92,183,248,216, 1,220,186,117,235, - 72,231,206,157, 1, 0,122,189, 30, 26,141, 6, 60,207, 67,171,213, 30,105,106,126,114, 28,151, 55,116,232, 80, 87,131,193,192, - 63,243,204, 51,210,252,252,124,132,132,132, 84, 70,225,116, 58,252,254,251,239, 53,189, 77, 46, 94,188,136,208,208, 80,139,211, -233,234,104, 51,182, 83,104, 11, 92,188,154,129,116,109,201,250,228, 27,212, 20, 26, 72,214,159,191,146, 51,185, 71, 71, 55,180, -176, 87,140,173,203, 96,213,167,217, 33,152,180, 5, 65, 15,136,230,202, 94,132, 4, 61, 58, 4,147,182,150,244, 28,172, 75, 83, - 42,197, 75, 11,127, 78,155,190,241, 80, 94,236,255,189,220,219,174,103,247, 33, 10,136,102, 90, 90,110, 48, 95,188, 65,117,205, -209,188, 87,152, 38,211,252,183,106, 30, 63,126,252, 10,128,151,255, 13,199,126,224,192,129,169, 0, 16, 25, 25,185, 97,203,150, - 45,243, 86,175, 94,173, 80,169, 84,157,239, 69, 83,171,213, 94,173, 90, 47, 79,173, 86,183, 45, 40, 40,184,224,237,237,173,104, -138,166, 76, 38,203,235,208,161,131,235,227,143, 63, 14,158,231,145,146,146,130,244,244,116, 12,123,233, 69, 56, 57, 57,225, 68, -114, 50, 82, 82, 82,240,254,251,239,195, 96, 48,224,230,205,155,121,141,105,202,229,114, 83, 88, 88,152,124,248,240,225,224,121, - 30,169,169,169,184,117,235, 22,222,120,227, 13, 56, 56, 56,224,202,149, 43, 72, 77, 77,197,172, 89,179, 96, 48, 24,144,158,158, -110,250, 59,206,209,255,140,193,162, 4, 2, 68, 51,138, 79,205,198,183,219, 97, 50, 11,136,184,168,161,105,181, 86, 89,209,209, -135,236, 60,127,225,114,114,226,137,254, 10,148, 36,129, 2, 77,170,247,190,156, 78,179, 59,183,145,150,130,215,217, 33,239,119, -220,208,234,202, 46, 55, 99,218, 25,193, 36,198,117,236,210,109,189, 8, 42, 23, 5,186,145, 7, 14, 72, 41,110, 92,188,137,228, -230,132,139, 53, 26,170, 5,240,184,191, 55,233,179,237,112,218,130,113,195,218,132,189, 50,186, 29,202,203,116,144,209, 10, 92, -200, 86,224,171,223,114, 78, 21,232,140,255,185,117,139, 38, 54, 39,227,111, 20,209, 18, 0, 27,218,248, 75,169, 78,127,241,221, - 39,250,249, 5, 16,184, 32, 39,175, 24,155, 19,178,142,107, 11, 27,238, 85, 83, 79, 4, 11,147, 38, 77,130, 78,167,195,134, 13, - 27,176,123,247,238,102, 69,176, 52, 26, 77, 75, 0, 80,171,213, 57,118,118,118,210, 23, 95,124,177,122,168, 6,148,148,148,160, -160,160,192, 56,117,234, 84, 5, 0, 40, 20, 10,243,224,193,131, 45,126,204,105,233,231,224, 37,133, 1,241,251,175, 2, 82,252, - 92,117, 21,254,188,245, 96,250,228, 14,173, 90,160,165,175,125, 80,164,154,216, 88, 50, 77, 14, 80, 57, 85,206,169, 93,115, 66, - 42,174,205, 2,165,102, 28, 94,230, 20,210,251,149,162,137,104,230, 8,235,231,175, 81, 45,128,201,161, 1,100,213,148,143,119, -205,232, 20,150,220,227,237, 73, 35,236, 40, 97, 19,163, 51, 24,255, 11, 36, 38, 38,150,132,135,135,191,216,191,127,255,105,165, -165,165,139,238,135, 38,165,148,247,240,240,200,242,240,240, 8, 49,153, 76, 77,154,203,212,100, 50,189,241,213, 87, 95,125,105, - 54,155, 93,171,191, 51, 24, 12, 88,183,110, 29, 76, 38, 19,228,114, 57,148, 74, 37, 82, 83, 83, 33,145, 72,242,120,158,111,180, -221,173, 40,138,215,191,254,250,235, 32,147,201, 84,211,180,131,231,121,172, 93,187, 22, 6,131, 1, 86, 86, 86, 80,169, 84, 72, - 73, 73,129, 92, 46, 55,137,162,120,157, 93, 25,205, 48,245,245,249,143, 80, 95, 50, 30, 20,239,128,130,128,195,199,245, 77,236, - 92,179, 30,128,187, 39,128,182,196,225,182, 15, 33,253, 20, 18,201,106, 0,168, 16,133,113, 23,175,208,189, 15,211,147, 13, 33, -132,248,121, 99,140,167,139,237,210,183,199,134,219,126,250,211,185,178,172,194,178,113, 25, 25,116,199,253, 74,167,175, 59, 9, -240,114,194, 12, 43, 5, 28,121, 30,201,105,121, 88,123, 43,151,222,104,170,166, 90,173, 46,247,243,243, 67,139, 22, 45, 80, 88, - 88,136,244,244,116,104,181, 90,101,115,211,233,229,229,213,141, 16,242,171, 40,138,214,119, 71,184,170, 77,152,167,167,167,175, - 66,161,184,163,145,123, 67,154,237,130,201,188,176, 96,167, 73, 23,175, 23,175,189,144, 34,212,152,160,208, 0,242, 97, 68, 91, -151, 87,147, 82, 10, 87,156,191, 38,204,108, 74, 4,235,238,201,158, 45, 29,251,202,162,235, 51,144,244, 23, 41,166,128, 32,235, -226, 13, 58,137, 69, 50,152, 38,211,100,154, 76,147, 69,176, 44,117,214, 15,108, 1, 16,246,168,104, 2,144,250,251,163, 21, 0, -197, 67,158,206,119, 1,148, 3,120,247, 97, 77,103, 68, 4,100,255,203,215, 18,211,100,154, 76,147,105, 50,205, 71,127, 97,213, - 30, 77, 8,241,226, 62, 55,170,124, 64,233,252, 24,192,199, 15,119, 8,158,178,169,101, 24, 12, 6,131,241, 72,195,177, 44, 96, - 48, 24, 12, 6,131,193,184,191, 16, 0, 97,117,253,208,148,186, 85, 66, 72, 88, 83,119,220,152, 62,211,100,154, 76,147,105, 50, - 77,166,201, 52, 31, 61,205,198,180, 31,149,182, 93,228, 65, 78,165,198, 26, 0, 50, 77,166,201, 52,153, 38,211,100,154, 76,243, -127, 17, 86, 69,200, 96, 48, 24, 12, 6,131,193, 12, 22,131,193, 96, 48, 24, 12, 6, 51, 88, 12, 6,131,193, 96, 48, 24,204, 96, - 49, 24, 12, 6,131,193, 96, 48,152,193, 98, 48, 24, 12, 6,131,193,120,104,120,160,189, 8, 25, 12, 6,131,193, 96, 48,254, 23, -225, 0,128, 16, 66,171,150,190, 44, 75, 24, 12, 6,131,193, 96,252, 93, 60,170, 30,164,102,170, 28, 74, 41, 33,132, 80, 84, 14, - 62,202, 96, 48, 24, 12, 6,131,241,183,240, 40,122, 16,174,182,131, 4, 16,197, 78, 51,131,193, 96, 48, 24,140,191,147, 71,209, -131,220, 17,193, 98,167,152,193, 96, 48, 24, 12,198,223,205,163,232, 65, 88, 47, 66, 6,131,193, 96, 48, 24,140,251, 12,235, 69, -200, 96, 48, 24, 12, 6,131,113,159, 97, 17, 44, 6,131,193, 96, 48, 24,140,127,147,193, 34,132,132, 49, 77,166,201, 52,153, 38, -211,100,154, 76,147,105, 50,131,197, 96, 48, 24, 12, 6,131,193, 96, 6,139,193, 96, 48, 24, 12, 6,131, 25, 44, 6,131,193, 96, - 48, 24, 12,102,176, 24, 12, 6,131,193, 96, 48, 24,204, 96, 49, 24, 12, 6,131,193, 96,252, 67, 16, 0,117,246, 4,160,148, 94, -176, 88,164, 25,189, 9, 26,211,103,154, 76,147,105, 50, 77,166,201, 52,153,230,163,167,217,152,118, 83,252,199, 67,109,176, 30, -228, 64,163,132,144,176,251,157, 81, 76,147,105, 50, 77,166,201, 52,153, 38,211,124,244, 52, 31, 53, 88, 21, 33,131,193,248, 95, -163, 37,203, 2, 6,131,241,160,145,254, 83, 59, 38,132,112,181, 12,158, 8,128,210,123, 12,167, 61, 8,205,135, 21, 2,112,109, -231,204,145, 90,101,101, 53,233, 28, 26, 60, 61,249, 75,179,103,243,180, 50,127, 24,140,127, 29, 41,197,135,107,222,183,114,236, - 67, 42,255, 14, 0, 0,122,237,246, 31,245,254,223, 91, 58,244,102,153,199, 96,212,195,233,211,167,203,253,252,252,208,190,125, -251,107,217,217,217,223, 80, 74, 87,176, 92,121,136, 12, 86, 91,119,155, 46,126,222, 46,131,119,158,206,248,160,161,245, 34, 35, - 35,101,177,177,177, 43, 0,140,174,253,253,176, 97,195,238, 88, 79, 38,147, 21, 20, 21, 21, 5, 30, 60,120,144,111,108,223,145, -145,145,178,216, 97,195,254,170, 57,124,248, 95, 52, 51, 90,180, 8, 58,179,124, 57, 95,235, 75, 66, 0, 66, 1, 10, 0, 33, 33, - 33, 71, 56,142,243, 34,132,212,103,228,106,222,115, 92,165,159, 19, 69, 49, 51, 57, 57,185, 87, 99,233, 84,171,213,209, 0,222, -178, 32, 59, 23,106,181,218,125, 13,173, 96,191,119,111, 42,165,212, 81, 34,145, 88,116,126, 4, 65,128,252,226,197,219,152, 61, -219,159, 93,250,140,127, 59,173, 28,251,112,195,134, 13,235, 15,160,230,122,254,207,243, 11,255,178,158, 68, 34, 49,196,199,199, -175,165,148,178,135, 10, 6,163, 30,246,238,221,139, 9, 19, 38, 32, 41, 41,169,213,206,157, 59,151,168,213,234,137, 89, 89, 89, -131, 41,165,249, 44,119,254, 97,131, 21,162,182,107,229,230,236,188,121,254, 71, 31, 2,192, 7, 13, 25, 33, 79, 79,207, 21, 62, - 62, 62,131, 23, 45, 90,132,237,219,183, 35, 32, 32, 0,114,185, 28, 18,137, 4, 18,137, 4, 28,199, 65, 34,145, 96,234,212,169, -142, 85,105,228, 27, 51, 87,158,158,158, 43,188,125,124, 6, 47, 92,184, 16, 59,119,238,132,159,159, 95,157,154,211,166, 77,115, - 4, 32, 3, 32,212, 8,200,229,213, 79,193,180,202, 52,121,157, 57,115,198,213,218,218,186,242,177,152, 82,136,162,120,199, 66, - 41,173, 89, 4, 65, 64,239,222, 22, 63, 29,191,117,249,242,229, 94,101,101,101,119,104, 84,239,163,250,125,149, 94,131, 6,203, -104, 52, 58,159, 62,121, 4,196,116, 3, 16, 10, 65,185, 22,128, 34, 16,224,172,234, 92,191,176,176, 16,131, 6, 13,114,102,151, - 61,227, 81, 48, 87,177,177,177, 3, 90,182,108,169,158, 55,111, 30, 82, 83, 83, 17, 18, 18, 2, 65, 16, 32,138,226, 29,175,113, -113,113,138,209,163, 71, 19,150,107, 12,198,157,248,142, 92,177,132, 10,230,241,149,159, 28, 1,124, 7,157, 78,135,151, 95,126, - 25, 91,183,110,109,221,173, 91,183,185, 0, 38,177,156,250, 7, 13, 86, 43,111, 27,181, 82, 97,187,109,249,183, 95, 17,179, 46, -219,177,190,245, 8, 33,220,208,161, 67,191,241,246,246,142, 89,180,104,145,173, 92, 46,199,149,113,227,112,187,162, 2,198, 79, - 63,133,163,139, 11, 66, 38, 78,132, 51,207,131, 63,119,206,162,125,215,214, 92,184,112,161,173, 92, 46,135, 70,163,129,209,104, -132,155,155, 27,108,108,108,160, 80, 40,106, 22, 11, 53, 97,109,109,141,189,123,247, 66, 42,149,214, 44, 18,137,164,206,207,238, -238,238, 77,201,174,133,173, 91,183,110,159,146,146, 98, 87, 88, 88,136,110,221,186,233, 8, 33, 73,213, 63, 82, 74,219, 39, 37, - 37,217, 89, 42, 70, 76, 55, 80,150,241, 45,196,162,205,128,227, 19, 16,236,159, 66, 5, 2,235,188,209,136, 34,123,128,103, 60, - 18,230,138, 12, 29, 58,180, 95,112,112,176,231,188,121,243,100, 50,153, 12,103,207,158, 69,110,110, 46,156,157,157, 97, 99, 99, - 3,153, 76, 6,137, 68, 2,153, 76,198, 50,140,193,168, 7, 42,152,199,135,119,234, 81,243,121,245,222,165, 48, 56, 68, 32,243, -131, 15,176,100,201, 18,180,106,213,170, 19,203,165,127,208, 96,133,251, 59, 58, 40,168,124,219,170,101,139, 20, 48,149, 58, 94, - 57,117, 20,237,134, 76,172, 54, 11, 23,106,153, 22, 2,128,147,201,100, 79,126,246,217,103,156, 92, 46, 7, 0,116, 18, 4,168, - 77, 38, 20,135,134,194,198,209, 17,190, 38, 19, 96, 50,193, 80,245,251, 95, 46, 8, 11, 52, 37, 18, 9,228,114, 57,164, 82, 41, -100, 50, 25,228,114,121,195, 6,171,172,172,206,158, 16,213, 38,106,239,222,189, 48,155,205, 24, 61,122,116,157,102,171,177,116, -214, 70,171,213,238, 83,171,213, 73,162, 40,246, 18, 69, 17,132,144, 36,173, 86, 59,168,250,119,181, 90, 29,221,161, 67,135,183, - 0, 44,180, 72, 83, 40,132, 88,184, 30,118,221,243, 81,242,167, 11,136,109, 52, 4,248,225,216,249,116, 28, 74, 76, 71, 94, 97, - 9,194, 2, 93,240,228,160,176, 58, 13,214,131,232, 5,194, 52,153,230, 3,214, 36,114,185,220,127,222,188,121,164,218, 64, 85, - 71,168,171,141, 85,245,251,234, 42,252,187, 52, 55,179,252,100,154, 76, 19, 32, 18,217,138,115,167,143,141, 7,128,146, 75, 91, - 48,229,153, 30,208,233, 82, 48,105,210, 44,100,102,102,226,218,181,107,103,255,206,116, 62,178, 6,139, 16, 66, 41,165, 77, 10, -163,123,123, 19,107, 59, 94,185,249,235, 37,243,237,237,236,148, 46,167,247,196, 35, 61, 61,187,193,109, 68, 81,164,191,255,254, - 59,174,142, 31,143,142, 60,143,162,207, 62, 3, 81,171,209,110,196, 8,200, 77, 38,148,156, 60, 9,185, 74, 5,133, 74,133,250, -218, 64,213,167,169,209,106, 33,149, 74,161, 82,169, 96,107,107, 11, 43, 43,171, 26, 99, 37,151,203, 33,151,203, 45,214,164,148, - 66, 42,149,226,194,133, 11, 72, 79, 79,135,163,163, 35,142, 30, 61,138,232,232,232, 59,204,149, 68, 34, 1, 33,196, 98,221,218, -250,130, 32,212,105,192,208, 72,213,224,157,103,208, 25,104,241, 28,116,199,213,128,211, 88,152,169, 35, 68, 42,226,244,149, 28, -124, 59,231, 57, 0, 64,196,200, 57, 24, 29, 19,202, 34, 88,140, 71, 6, 65, 16,112,245,234, 85, 92,186,116, 9, 18,137, 4,246, -246,246,176,181,181,133, 76, 38,171, 89, 56,142, 99, 17, 44, 6,163, 1, 50,126, 29, 63,149, 16,178,192,215,215,119,247, 55,243, -230, 5, 71, 71, 71, 3, 0,246,237,219,135, 31,158,125, 22, 31, 0,207, 44, 37, 36,123, 50,165,239, 63,232,180, 52,199,131,252, - 43, 12, 86,245,129, 53,229, 0, 9, 33, 36,216,221,254,167, 57,239,190,230,239, 23, 24,228,126, 98,199, 47,184,113, 35, 19, 57, - 57, 69,245, 25, 10, 74, 8, 17, 1, 80,127,127,127, 20, 85, 84, 64,109, 52, 66,162, 86, 67,229,236, 12,105, 85,228, 74,102,107, - 11,185, 74, 5,121, 61, 17,172,134, 52, 43,140, 70, 40, 20, 10,168, 84, 42,168, 84, 42, 88, 89, 89, 65, 94,203, 92, 89,162, 89, -203,180, 65, 42,149,226,252,249,243,232,213,171, 23,124,124,124,240,243,207, 63, 99,208,160, 65,127,137, 98, 53,213, 92,213,101, -176,106, 53,126,111,180,113,251, 29, 40,130,193,219, 61, 9, 78, 57, 0, 38,106, 15, 3,245,172,172, 18,228, 69,124,190,229, 6, -174,102,228, 67, 16,196,154,106, 66, 6,227, 17,128, 18, 66,104,155, 54,109, 72, 65, 65, 1,100, 50, 89,141,185,106,221,186, 53, - 50, 51, 51,107,204, 85,117, 68,139,193, 96,212,141, 68, 34,153, 27, 31, 31, 31,108,109,109,141,143, 63,254, 24,118,118,118, 56, - 62,119, 46,190,151,203, 97, 3,224, 27,147,233, 45, 0, 15,212, 96, 53,199,131,252,171, 34, 88, 77,197,203,203,107,126,183, 94, -221,122, 5,182,237,108,117, 98,215, 22,164, 92, 75, 71,126,126, 49, 40,133,190,161,130, 17, 0,100, 50, 25,202, 63,252, 16, 69, -237,219, 35,108,212, 40, 72, 77, 38,148, 28, 63, 14,185, 74, 5,101, 68, 4,136,209, 8, 89, 78,142,197,133,109,181,166,171,171, - 43,228,114, 57,172,172,172, 96,109,109, 93, 25,193,170,101,174,154,106,176, 74, 74, 74,112,243,230, 77, 76,152, 48, 1, 74,165, - 18,132, 16,228,230,230,194,215,215, 23, 18,137, 4,153,153,153, 56,112,224, 0, 2, 2, 2,160, 80, 40,154,116, 81,212,106,220, -222, 94,173, 86,239,166,148,182, 63,115,230,140, 93,100,100, 36,154, 20,193, 34,114, 24,224, 7, 1,222, 16,233,127,141,148,185, -150,153,162,148,181,193, 98, 60, 58, 92,187,253, 7,253,191, 23, 22, 1, 0, 92, 93, 93,107,140, 84, 80, 80,208, 29,145, 43,102, -174, 24,140,198,105,213,170, 85, 71, 47, 47, 47, 76,157, 58, 21, 21,235,215,163, 20, 64, 44,128,120,147, 9, 0,160, 2,102,178, - 92,250, 27, 13,150,143,143,207,164,240,240,240, 23, 87,252,184,214,118,193,172,255,232,138,147, 47,112,134, 10,163,109,133,217, -108,188,161, 45,252,166,161,136,211,240,225,195, 33,145, 72,160,114,114,130,141,131, 3,228,213,145, 43,165, 18,114,149, 10,196, -104, 4, 53, 26, 33,183, 48,180, 95, 91,211,218,218, 26, 10,133,162, 78, 99,213, 84,131,117,251,246,109,252,242,203, 47,232,210, -165, 11,148, 74, 37, 36, 18, 9, 58,116,232,128,228,228,100, 4, 6, 6, 2, 0,226,227,227,241,196, 19, 79, 32, 37, 37, 5,109, -219,182,181,109,170,193, 18, 4, 1,123,247,238,181,163,148,246,162,148, 34, 47, 47,175, 89, 39, 81, 16, 4, 20, 22, 22, 98,235, -214,173,200,201,201,129,171,171, 43, 74,116, 14,168,238,149, 46,138,255,237, 5,201, 96, 60, 42,136,162, 8, 27, 27, 27, 36, 38, - 38,226,169,167,158, 2, 0,152,205,102,184,184,184, 32, 48, 48, 16,131, 7, 15,198,160, 65,131, 88, 70, 49, 24, 13, 61,176, 92, -187,118, 58, 61, 61, 61,100,214,172, 89,248,193,203, 11,118,118,118,120,115,246,236, 19, 60,207,247,103,185,115, 31, 12, 86, 83, - 66,115, 62, 62, 62,195, 61, 60, 60,230,174, 93,187,214, 70,171,213,194,171, 85,152,221,246, 77, 27, 13,110, 42,185, 62,179,232, -246,132,243, 26, 93,124, 99, 26, 28,199,161,245,180,105, 8, 48,153, 80,112,236, 24, 20, 42, 21, 84,157, 59,131, 24,141, 80,164, -165, 65,174, 82, 65, 98, 99,211,164, 3,225, 56,174,178, 74,176,218, 76,213,170, 26,172, 54, 91,117, 53,120,173, 11,147,201,228, - 16, 29, 29,141, 1, 3, 6, 96,212,168, 81, 53, 85,129, 29, 59,118,196,134, 13, 27, 48,114,228, 72,156, 59,119, 14,106,181, 26, -173, 91,183, 70,235,214,173,145,144,144,208,164,244, 86, 15,203, 48,112,224, 64, 29, 33, 36,137, 82,218,254,212,169, 83,118,205, - 57,137,162, 40, 98,235,214,173,120,250,233,167,209,170, 85, 43, 28, 63,126, 28,211,103,125, 12, 7, 55, 63,240,156, 43, 0,202, -170, 8, 25,143, 28,130, 32,212,219,144,189,186, 76, 96, 48, 24,141,254,143,102,141, 24, 49, 34,242,227,143, 63,110,253,230,155, -111, 2, 0,212,106,117, 87,181, 90,157,248,119,141,131,245, 40, 86, 15,214, 24, 44, 75, 14,176,111,223,190, 95, 11,130, 48, 76, -169, 84, 58,190,252,242,203,166,252,252,124,252,250,235,175,248,254,251,239,203,203,204,220,217,226, 66,225,229,212, 76, 93,166, -165,102,200,154,231, 1,147, 9,242,170, 54, 87, 48, 24, 64, 77, 38,200, 84, 42, 72,149,202, 38, 31, 8,199,113,117, 70,172,172, - 20, 10,200,170,198,195,178, 20,133, 66, 81,124,228,200, 17, 87,141, 70,115, 71,131,246,128,128, 0, 0,192,201,147, 39,113,252, -248,113, 60,253,244,211,144, 74,165,144,203,229, 56,127,254,124,105, 83, 77,145, 32, 8, 53,189, 8,213,106,117,116,151, 46, 93, -234,236, 61,104,137,150, 70,163, 65,171, 86,173, 96, 48, 24, 96,103,103,135,252,172,155,184,126, 45, 5, 37,250,100,248,186, 42, -145,155,155, 11, 43, 43, 43, 86,154, 48, 30, 41, 36, 18, 9,250,244,233,131,252,252,124,184,184,184,192,202,202, 10,197,197,197, -119, 24,175, 85,171, 86,177,140, 98, 48,234,192,119,228,138, 37,222,195,190, 30, 15, 0,111,125,177, 31,239,206, 93,140,177,163, - 6,225,197, 23, 95,252,219,199,193,122,228,219, 96,213,119, 96, 81, 81, 81, 99, 91,180,104, 49,230,165,151, 94,178, 57,121,242, - 36, 62,250,232, 35,233,222,189,123, 77,167, 78,157,226, 69, 81,156,169,209,104, 45, 46,193, 8, 33,224, 56, 14,165, 59,118, 64, -231,225, 1,251, 78,157, 64, 76,166,202,200,149,157, 29,202,188,188, 0,131, 1, 14,197,197,104,170,102,245,144, 12,181,135,101, -144, 85, 13,215,208,156,130,187,174,113,175, 38, 77,154,132, 21, 43, 86,160,123,247,238,104,217,178, 37,164, 82, 41, 56,142,107, - 86, 47,194,218, 85,118, 77,238, 61,120,215,147,188,143,143, 15, 18, 19, 19,225,232,232,136,239,191,255, 30,110,174,174,152, 52, - 34, 4, 70,163, 17,102,179, 25,101,101,101, 16, 4, 1,143,232,204, 65,140,255, 65, 68, 81,188,163,205, 85,126,126, 62,188,189, -189, 27,140,106, 49, 24,140, 90,247,161,218,227, 96,117,234,129,163, 91, 62,195,134,171,190,200,156, 59,247, 31, 25, 7,235, 81, -139, 96, 53, 90, 10,245,236,217, 83, 85, 84, 84,244,249,243,207, 63,111, 83, 86, 86,134,252,252,124,228,231,231,227,196,137, 19, - 7,140, 70, 99,103,141, 70,179,170, 1,227, 19, 86,159,121,105,225,230, 6,133,157, 29, 72,173,222,131, 50,165,178, 50,146,101, - 52, 2,245, 24,129,134, 52,107,155,171,234, 42, 66,139,204,149,173,237, 29,154, 28,199,213, 12,211,112,119,143, 65, 31, 31, 31, -204,155, 55, 15, 35, 70,140,184, 99,152, 6, 75,211,169, 86,171,163, 41,165,237,171,111, 16, 85,141,220,163, 45, 52,146, 97,245, - 25,172, 33, 67,134, 96,251,246,237,120,251,237,183,145,150,150,134,145, 35, 71,130, 16, 2, 7, 7, 7,120,120,120,192,201,201, - 9,214,214,214,127, 73,107,125,154,247, 2,211,100,154,127,151,102,237, 6,237, 42,149, 10,229,229,229,141,154, 43, 66,200, 40, -150,159, 76,147,105,214,140,131,133,115,167,143,225,208,143,111,226,181,216, 0,140,244, 79,193,172, 89,141,143,131,245, 32,210, -249,168,209,168,251, 40, 41, 41,121,191,117,235,214,242, 75,151, 46, 33, 53, 53, 21, 87,175, 94,133, 32, 8,215, 53, 26, 77,179, - 11, 41,142,227,224,224,224, 0,133, 66, 1,105,102,102,101, 27, 41,149, 10, 0, 42, 35, 87,148,130, 52,177, 58,139,227, 56, 72, -165,210,255,142,121, 85, 85,232, 54, 23, 65, 16,106, 70,104,175, 30,231,170,122,225, 56,174,102,105,198, 16, 13,111,157, 56,113, -194, 46, 61, 61, 29,148, 82,252,250,235,175,118, 79, 60,241,196, 91,205,141, 94,229,230,230,194,100, 50, 65, 38,147, 97,200,144, - 33,232,209,163, 7, 74, 75, 75,107,162, 85,132, 16, 72,165, 82,214,139,144,241,200, 81,221, 6,171,246,168,237, 44,114,197, 96, - 88, 78,198,175,227,167, 2,152, 74, 8, 25, 51,123,246,236, 31, 94,125,245, 85,136,162,136,132,132, 4, 44,155, 49, 3, 31, 8, -194, 51, 75, 9, 41,159, 76,233, 84,150, 91,247,209, 96,117,235,214,205, 79,167,211,173,224,121,190,131, 32, 8,138, 67,135, 14, -161,162,162, 2,201,201,201,122, 81, 20,127,109,246, 14,165,210,236,201,147, 39,123, 91,178,174, 92, 46,191,141, 70,230, 33,172, -173, 73, 45, 48, 59,114,185,252,182,193,211,179, 65, 77, 81, 20, 51,107,207, 45, 88,109,162,234,136,254,212, 46,236, 51, 45,204, -130,133,221,186,117,251,203,119,205,201, 75,133, 66,161,137,141,141,245,104,202, 54,114,185, 60,155, 93,246,140,127, 59,114,185, - 92, 31, 23, 23,103, 81,207, 93,137, 68, 98,220,180,105, 19,171, 27,103, 48,234,193, 90, 46,127,230,181,215, 94,195, 79, 63,253, -132, 95,151, 44,193, 32,141, 6, 27,228,114,216,200,229,248,198,100, 26, 15,128, 25,172,251,123,140,135,207, 0, 0, 32, 0, 73, - 68, 65, 84,105,176,138,139,139, 63, 40, 44, 44,236, 82, 82, 82,194, 95,191,126, 93, 79, 8, 17, 56,142,211,139,162, 56, 95, 16, -132,149,205,221,225,230,205,155, 67,238,247, 65, 84,107, 18, 11,170, 60, 45, 33, 57, 57,185,215,131,202,240,123,105,107,117, 55, -127, 30, 59,214,134, 93,194,140,255, 53, 90, 58,244,198,198,141,189,215,179,156, 96, 48,238, 15,103,147,146,162, 1, 96,200,144, - 33,208,191,245, 22, 0, 96,117,213, 56, 88,118,192,138,135, 36,153,157, 1,184, 86,189,207, 7,112, 5, 64, 36, 0, 27, 0, 6, - 0,165, 0, 92,106,173, 95, 80,245, 91,245,239,127, 0, 48,255,157, 9,174,215,144, 92,185,114,229,133,188,188, 60, 59,163,209, -232, 36, 8,130, 11,207,243,238, 38,147, 41,128,231,249, 21,148,181,148,254,199,161,128,120, 47, 11,203, 65, 6,131,193, 96, 0, - 64, 72, 72,136,210,197,197, 69, 25, 18, 18,162,124,143,210, 59,150,135,168,122,208,149, 16,178,157, 16,178,125,230,204,153,253, - 0,244,152, 57,115,102,151,170,207,157, 0,184, 84,255, 78, 8,217, 14,192,249,174,223,195,255,238, 4, 63,106, 13, 22,104,179, - 22,147,169,250, 61,131,193, 96, 48, 24,140,135,245, 38, 79,105,236,130, 5, 11,230, 1,144, 44, 88,176, 96, 94,173,207,160,148, -198,214,126,189,235,119,215,191, 59,173, 4, 64, 88, 61, 7, 97,241, 76,217,205,233, 77,208,152, 62,211,100,154, 76,147,105,222, - 69,203,187, 52, 55, 55,162,217, 80, 71,156, 20,150,159, 76,147,105,254, 51,154,141,105,215,179,253, 99,132,144,237,148,210,216, -218,175,181,141, 87,149,230,246,218,239,239,250,125,199,223,237, 6, 31,216, 2, 32,140,105, 50, 77,166,201, 52, 31, 50,205, 81, - 44, 63,153, 38,211,124,248, 52, 27, 89, 30,171,180, 44,245,191,214,247,190,214,119,127,103,122, 27, 24,166, 97,211, 38,201,173, - 16, 27, 59, 43, 91, 65, 14, 0,134, 50,137,201,231,170, 94,135,209,163,217,124, 43, 12, 6,131,193, 96, 48,254,118, 8, 33,219, -103,204,152,241,206,191, 33,173,210,250,204, 85, 94,164,194,217,218,124,187, 37,207,163, 53, 0, 88, 43,112, 37, 47,210, 46,197, -117,211,166,130,251,109,178,134, 15, 31,174, 82, 40, 20,178,141, 27, 55, 22, 61,140,153,212, 62,152,120, 9,102, 12,131, 4,131, - 1, 0, 2,118, 73,100,216,150,148, 74, 51,155,120, 97,184, 85, 69, 13,115,239,199,122,247,123, 91,198,163,129, 90,173,182, 1, - 16, 43,149, 74,199, 58, 57, 57,117, 42, 40, 40,248, 88,163,209,124,217,204,194, 76, 10, 96,178,163,163,227, 24, 71, 71, 71,255, -194,194,194,155, 37, 37, 37,155, 1, 44,165,148, 54,169, 71, 78,159,142,100,186, 66, 46,123,169,194,100,254,228,200, 89,250,125, - 84, 36,113,230, 69, 44,176,150, 75,123, 27,140,252,167,135,207,209,149, 77, 76, 27, 23, 22, 22,102, 45, 8, 2,177,178,178, 18, -229,114, 57, 85, 40, 20,119,183,165,228, 15, 30, 60,120,247,176, 44, 41,255,196,121,137,142,142, 94, 71, 41, 29,193,243, 60, 36, - 18,201,161, 3, 7, 14, 12,189, 87,205,168,168, 40, 43, 0, 56,120,240,160,225, 95,118,147,228, 2, 2, 2, 84, 55,111,222, 44, -165,213,179,210, 51, 26,165,123,247,238,105, 38,147,169,193,182, 68,114,185, 60,239,207, 63,255,244,127, 4, 15, 63,191,186,234, - 15, 64, 46, 0, 73,213,103, 99,213,107, 78,173,239,114,234,249,253,159, 55, 88,183, 66,108,236,172,205,183, 91,230,102, 39,143, -206,213,158, 29, 5, 0,110,234,142,155,221, 60, 66, 55,221, 10,113, 52,117, 11, 29,163,146,216,144, 37, 82, 78,214,161,194, 96, -112,150,201,100, 5, 70,158, 63, 47, 53,147,169,218,228,141,183,154,154, 8, 74,233, 47,132, 16,207, 97,195,134,237, 22, 69,113, -245,142, 29, 59,174, 52,235, 79, 27, 21, 37,117, 47,114,126,134,147, 73,135, 2, 52,140, 82,128, 18,233, 5,152, 76,187,114, 90, -228,175,165,127, 45,104,235, 37, 50,146,216, 84,148, 32, 26, 34,134,181, 10,112,239, 58,117,226, 40,231, 46, 61, 6,217,148,149, -155,241,199,129,237,157, 87,174,219,246, 90,187, 64,114, 82, 32,216,102,227,128,189,137,137, 84,223, 72,129,242, 33, 33,152, 86, -245,126, 49,165,244,253,123, 89,207,130,109,191,162,148,206,188,207,133, 98, 59, 39, 39,167,175,172,172,172,108, 37, 18, 73,138, - 70,163,249,156, 82,122,166,169, 58, 62, 62, 62,161, 60,207,143,144,201,100,145,102,179, 57, 81, 42,149,110,189,117,235, 86,242, - 61,164, 75,210,182,109,240,115, 18, 66,122, 2,112, 4,112, 91,160,244,232,165, 75,169, 63, 81, 74,155,245, 48, 16, 21, 21, 37, -213,151,149, 61, 35,149, 72,134, 80, 74,195, 64, 41, 1, 33, 23,120,158,223,165,180,179, 91,123,208,194,107,169, 71,143, 30, 87, -205,102,115,147,198, 42,147, 74,165,121, 94, 94, 94, 33, 27, 55,110,108,114,218,189,189,189,159,240,242,242,250,166, 91,183,110, -202,142, 29, 59, 66, 46,151,227,211, 79, 63,157, 12,224, 75, 75,140,148,173,173,237,104,165, 82, 25, 80, 90, 90,122, 67,175,215, -199, 43, 20,138,254, 75,151, 46,245,234,222,189,187, 93, 94, 94, 30,225, 56,206,109,219,182,109,207,126,249,229,151,209,132,144, -199, 40,165,150,229, 67, 71,210,173,117,128,231,251,175, 63,219, 15,111, 47,248,249,245, 94,237, 73,190,141,173,252,155, 81,189, -130, 29, 67,131, 28,241,225,242, 63, 39, 3,176,216, 96,133,134,134,202, 99, 99, 99,215, 16, 66, 30, 35,132,212,123,131,230, 56, -174, 52, 42, 42,202,183,161,243, 21,208,205,233,136, 84, 34,245,170,239,119, 94,224, 51,111, 30, 47,186,231,161, 91, 4, 65, 24, -188,114,229, 74, 72,165, 82,140, 29, 59,182,111,100,100,164, 77, 98, 98,162,222,178,242, 40,210, 25,192,155, 0, 56,133, 66,177, -232,216,177, 99,121,145,145,145, 59,228,114,121, 84,213,239, 7, 19, 19, 19, 31,187,235,156,146,123,233,241, 29, 21, 21,245,158, - 40,138, 19, 21, 10,197,173,162,162,162,113,137,137,137, 87,239, 53, 15, 34, 35, 35,101, 57, 57, 57,147, 59,116,232,240, 74,231, -206,157, 61,146,147,147,115,188,188,188,150,185,187,187, 47, 77, 76, 76,108,212,176,119,236,216,209,147,227,184,231, 0, 60, 83, -117, 3,221, 68, 8, 89,155,152,152,120,227,127,193, 96,153, 76, 38,215,196, 89,179, 0,137, 4,250,126,253, 64, 41,133,114,206, - 28, 32, 63, 31, 69, 11, 23,130,231,121, 12, 25, 50,196,245, 17, 61,252,147,255,182, 4,215,105,176,172,108, 5, 57,207,163,117, -174,246,236,168,174,131,151,218, 3,192,137, 93,147, 71,181,240, 12, 77,182,178, 21, 82, 20, 42,249,250, 39,134, 69,119, 24, 29, -219,151,120,123,186, 65,147,149,235,182,106,195,238,152,237,187, 18,214, 3,232,105, 97,212,234, 89,179,217,236,199,113,220, 6, -142,227, 60,151, 44, 89, 18,148,154,154, 58,110,195,134, 13,195,135, 13, 27,118, 84, 20,197, 31,118,236,216,241,167,165, 7,226, -209,113, 68, 27, 15,120,172, 27, 49,114,168,239, 99, 49,174, 10, 63, 15, 87,136,162, 21,174,220, 48,251,236, 61,124, 38,102,231, -239,123,166,186,135,141,120, 46,231,194,214,139,141,105,181, 9, 34, 79, 41,173,228,111,206,120,245, 49,143, 33,131, 99,237, 90, -120, 71, 72, 65, 42, 39,139, 86,216, 3, 35,159,123,203,118,196,179, 83,108,111, 92, 60,226,181, 99,231,182,152,181,241, 7,179, -218, 4,145, 69,151,175,211,159,235,139, 42, 17,130,105,162, 72,185,202, 66,159,188, 21, 19, 19, 51,208,218,218,250,142, 2,165, -162,162, 66, 70, 8, 66, 69,145, 86,221, 28,200, 52, 66,200,215,150, 68,163,170,247, 97, 52, 26, 56,153, 76, 1,137,132,155, 28, - 30, 30,222, 49, 47, 47,239, 32,128,149, 90,173,182,224, 94, 46, 20,165, 82,249,210,136, 17, 35,230,173, 94,189, 90,101, 99, 99, - 3,173, 86, 27,242,212, 83, 79,117, 32,132, 60, 78, 41,109,180,224, 85,171,213,225, 0, 30,119,113,113,121, 98,220,184,113,126, - 3, 6, 12,128,191,191, 63,180, 90,109,116, 66, 66,194,204,136,136,136,140,156,156,156,205, 0,226,181, 90,237,185,166,152,171, -176,208, 86, 11, 39, 76,156,212,102,228,200,145,158, 86,214, 54, 82,141, 38, 45,239,187,111,151, 57, 72, 8,215,129, 16,242, 86, - 83, 77, 86,215,174, 93,219, 16, 81, 92,255,202, 75, 47,249,119,234,209, 67,234,238,233,137,138,226, 98,164, 94,185,226,115,234, -228,201,232,173,251,246, 77,139,140,140, 28,155,152,152,216,232,181,100, 52, 26,189, 15,127,252, 49, 36, 46, 46,160,102, 51,248, -182,109, 33,138, 98,229, 60,122, 71,142, 0,102, 51,168,217, 12,115, 76, 76,205,252,148,195,135, 15,119,203,207,207,151, 1,104, - 82,186,125,124,124, 60, 91,182,108,185,114,230,204,153,114,131,193,128,179,103,207,226,216,177, 99, 98, 94, 94,222,194,198,204, - 21, 33,100,219,236,217,179,213,189,122,245,178, 43, 40, 40, 0,207,243,206,241,241,241, 19, 34, 35, 35,237,188,188,188, 20,107, -214,172,169,158, 33,192, 41, 40, 40,200,233,153,103,158, 49,174, 89,179,102, 50,128, 69, 22, 21, 52, 4,115,159, 26, 30, 3,189, -153,131,217,204,187,122,186,218,253, 52, 57,174,175, 12,212,136,213,191,157,129,153, 23,191,111,138,185, 10, 12, 12, 92, 29, 24, - 24,216,111,193,130, 5, 36, 53, 53, 85,210,182, 42, 95,121,158,135, 32, 8, 16,132,202,172, 27, 59,118,172,170,170,156,171,215, - 96, 73, 37, 82,175, 35, 91, 46,186, 42,149,202,154,109,171, 39, 99, 47, 43, 43,195,224,231,187, 53, 39, 90,229, 67, 41,245,189, -203, 96,113,213,109, 51,140, 70, 35,172,173,173,123, 15, 24, 48,160,188,202, 84, 23,237,222,189,251, 82, 3,146,175,188,252,242, -203, 83, 84, 42, 21,150, 44, 89,210, 63, 52, 52, 52,202,202,202, 42,106,255,254,253, 0,128,222,189,123, 71,117,233,210,165, 5, -207,243,195, 8, 33, 35,237,237,237,123, 69, 68, 68, 28, 9, 15, 15,127,238,220,185,115,197, 77, 77,127,167, 78,157,158, 8, 11, - 11,123,227,179,207, 62,179,189,120,241,162,211,135, 31,126,184, 30, 64,199,123, 41, 67, 66, 67, 67,229,101,101,101,235, 62,248, -224,131, 33,213, 83,141,137,162,232,254,199, 31,127,124,248,246,219,111,119,139,140,140,124,186, 62,147,213,185,115,231, 14,148, -210, 89, 65, 65, 65,209,207, 63,255,188,164,103,207,158, 40, 45, 45,197,158, 61,123,254,111,203,150, 45,255, 23, 17, 17,113,156, - 82,250,225,217,179,103, 15,223,175,155, 99,100,100,228, 21, 0, 62,213,113,135,196,196,196,214, 15,197, 93,219,206, 14,232,215, - 15, 37, 89, 89,149,101,243,103,159, 85,150, 53,243,230,177, 16,223,191,193, 96, 53, 70,121,121,121,248,204,201,113,224,184,202, -145,204, 91, 6,250, 98,254, 59, 19,200,214,237,187, 45, 30,103,162,176,176,112,214, 51,207, 60,227,185,117,235,214,151, 57,142, -179,206,205,205, 37,229,229,229, 54,211,166, 77,243,214,233,116, 35,227,227,227,251, 12, 31, 62, 60,137, 82,250,233,182,109,219, - 78, 55,164,229, 26, 62, 42,216,205,197,109,207,231,115, 39, 56,133, 5, 6,193,104, 54, 67,147,155, 9, 10, 43,120,184,169, 48, -246,241,112,121,207, 78,178,224,133, 95,237,223,237,209, 97, 88, 76,246,249,109, 13, 21,100,144, 80,252,231,196,201,228, 86, 28, - 95, 64,136,204,190,158, 39, 99, 41,130,219, 71, 73, 95, 9, 12,115, 28, 58,112,176,253, 19, 47, 76,251, 15,128,159, 27,186,143, -213,186,161, 97,202,148, 41, 53, 83,241, 84,147,147,147,131, 3, 7,246,215,185,141,165,126,163,246,135,143, 62,250,200,161,176, -176,240,177, 85,171, 86, 69,123,122,122,206,201,202,202,106,114,225, 67, 8,177, 1, 48,184,127,255,254,115,183,108,217,162,170, - 30,189,222,221,221, 29,139, 22, 45,242,121,234,169,167, 62, 1, 48,188, 17,115,245, 67, 92, 92,220,152,152,152, 24,132,132,132, -160,160,160, 0,199,143, 31, 55, 46, 91,182,236,230,128, 1, 3, 2,198,140, 25,163,152, 50,101,138,111, 90, 90,218, 91,241,241, -241,111, 57, 57, 57,125, 95, 84, 84,244,134, 37,233,107,219, 54,248,185,113,227,199,183,153,244,202,235,145, 38,147,161,252,124, -226,161, 3, 82, 57, 39,121,253,141,241, 14,133, 69,121, 46,148,138,207, 1,248,177, 9,230, 42,216,203,221,125,239,130, 79, 62, -113,108,225,234,138,236,236,108,220,210,104,144,117,225, 2, 8,128,152,152, 24, 69,120,135, 14, 65,139,151, 47,223,213,185,115, -231,129,167, 78,157,186,212,152,166,196,197, 5,153, 17, 17, 0,128,226,196,196,234,200, 10,236,134, 13,251,239,147,233,229,203, -224, 56, 14,110,110,110,205,153,126,169, 58, 18,220,181, 87,175, 94,114, 0,120,251,237,183,117,101,101,101,159, 17, 66,126,201, -204,204,212, 54,178,233,228,247,222,123,207, 51, 40, 40,200,119,221,186,117, 40, 45, 45, 5, 0,215,192,192, 64,180,108,217, 82, - 56,116,232, 16, 66, 66, 66, 96,103,103,135, 67,135, 14,225,248,241,227,136,136,136, 80,201,229,242, 81,150, 24,172,222,225,100, -104,167,142, 97,221,252,124,124,113,240,216, 73,200, 21, 50,199, 87,159,143,133,157, 74,138,207, 86,237, 16, 51, 52,133,175, 31, - 62, 71, 87, 91,120, 61,114,143, 61,246,216, 74,127,127,255,168, 5, 11, 22, 40,229,114, 57,146,146,146,144,157,157, 13, 87, 87, - 87, 88, 91, 91, 67, 38,147, 65, 42,149, 54,105,170, 44,165, 82, 9,173, 86, 11, 83,213,224,138,130, 32, 64,167,211,193,195,163, - 50,248, 56,103, 14,225,102,207,182,172, 42,107,224,192,129,255,113,115,115,155,229,230,230, 38,169,253,189,193, 96,192,140, 25, - 51, 80, 90, 90, 10, 47, 47, 47,120,121,121,109,169,158,247,180,160,160, 0, 49, 49, 49, 11,246,238,221, 59,183, 30, 89, 7, 79, - 79, 79, 12, 27, 54, 12, 70,163,177,205, 55,223,124,243, 35,165, 20,229,229,229, 53, 43,184,185,185,165,245,238,221, 91,210,171, - 87, 47, 4, 5, 5, 97,249,242,229,253, 54,109,218,212, 7,192,111, 77,189,150, 28, 28, 28,158, 28, 61,122,180,173, 74,165, 66, -215,174, 93, 97, 52, 26,213, 81, 81, 81, 86,205,169,138, 36,132, 72,213,106,181,187, 84, 42,253, 98,242,228,201,131,250,246,237, -139,203,151, 47, 99,215,174, 93, 24, 62,124, 56,162,162,162,240,238,187,239, 14,126,255,253,247, 39,163,158, 89, 45, 68, 81, 92, -187,121,243,102,127,111,111,111, 72, 36,149,217,106,111,111,143,113,227,198, 33, 46, 46, 14, 59,119,238,236, 54,111,222,188,245, - 81, 81, 81,126, 7,155, 80, 83,209,216, 51, 75, 98,213,255, 53, 50, 50,210,231, 97,185,105, 27,187,119, 71, 81, 86, 22,220, 61, - 61, 1, 0, 89, 90, 45, 40,165, 53,159, 81, 85,214, 48, 30, 82,131,101, 40,147,152,172, 21,184,226,166,238,184,249,196,174,201, - 53, 85,132, 82,138, 43, 21,101, 18, 19, 0, 8,148,162,164,148,135,141, 21,135,180, 44, 29, 46, 92,207,171,171,192,191,163,171, -101, 76, 76,204, 54,157, 78, 23,210,162, 69,139, 69, 60,207, 75,250,245,235, 39,233,214,173,155,107,122,122, 58, 14, 30, 60, 8, -153, 76, 6,163,209, 72,156,156,156,172,198,141, 27,167,214,235,245,206,239,188,243,142, 11,128,190,245,105,146, 49, 99, 36,158, - 50,201,166,207,230, 62,227, 68, 36, 87,113, 53,227, 54,130,189,187,194,217,193, 7,153,121,165, 72, 76,222,137,171,169, 59, 16, -236,237,139, 9, 99, 91, 58, 44,254, 54,127, 51,137,156, 24, 70, 19,151,155,235,211, 4, 32,145, 40,131,137, 49,225, 9, 81,226, -210,151, 72, 60, 99, 9,177, 86,223,177, 66, 89, 65, 26,174,252,185,154,166, 37,253, 70,125,195,159, 35, 0, 36,245, 29, 59,165, - 52, 87, 34,145,172,228, 56, 50,158, 16,130,142, 29, 35,114, 23, 46, 92, 88,215,147,154,185, 99,199,136, 92,137,132,115,171,156, - 71,144, 91, 33,138, 66,110, 3,233,172,189,191, 92, 66,200, 98,133,194,106, 26, 0,120,122,170,115,119,236,216, 97, 30, 61,122, - 52, 62,255,252,115,197,244,233,211,103,123,121,121, 61,159,153,153,153,217,208, 57,170, 85, 40,134,217,219,219, 79,108,213,170, -213,240,185,115,231, 42, 6, 15, 30,108, 67, 41,133, 78,167,131, 78,167, 67,121,121, 57,108,109,109, 33,149, 74, 61, 26, 59,239, -254,254,254, 79,140, 27, 55, 14,174,174,174, 56,113,226, 4,166, 79,159,158,158,151,151,247, 81, 86, 86, 86,226,250,245,235, 91, - 7, 5, 5,189,187,124,249,242, 54,189,122,245,226,134, 13, 27,134,109,219,182,245,108, 76,179,230, 68, 17,210,243,241,199, 71, -186, 26,141,250, 50,131, 65, 95,124, 51,253,116,150, 70,115,241,118, 72,203,206,110, 3, 7,117,111,113,229,202,245,158,245, 25, -172,187, 53,199,140, 25, 35,225, 4,225,231, 79, 62,251,204,145,147, 74, 97, 54,155,225,231,231,135,164,164, 36,148, 20, 21, 65, - 95, 90,138, 27,201,201, 80, 7, 4, 96,242,216,177,142, 31, 45, 91,182, 46, 50, 50,178, 83,237,167,238,186,210, 73,205,230,187, -171,173,254, 50,103, 94, 93,223, 89,114,222,239,186, 9,165,105,181, 90, 40,149, 74,180,105,211,198,246,244,233,211,199, 52, 26, -141,182, 49, 77,107,107,235, 81, 61,123,246,180, 91,191,126, 61, 34, 35, 35,225,232,232,136, 3, 7, 14, 32, 41, 41, 9, 38,147, -137,211,233,116, 80,169, 84, 88,176, 96, 1,124,125,125, 81, 82, 82,130,180,180, 52,103,153, 76,230, 98, 81, 58, 9, 94, 28, 51, -242,113, 72,228,182,184,146,170, 65,223,110, 17,112,115,115,195,249, 75,169,200,200, 44,204, 33, 4, 47, 12,238,105,181, 64,175, - 55,190,247,199, 89,186,170, 62, 77, 82,233, 60, 57,169, 84,250,248,188,121,243, 56,185, 92, 94,147,119,213,115, 18, 86, 27,171, -234, 73,218,235, 50,171,117,165,147,231,121,152, 76, 38,152, 76, 38,136,162,136,188,188, 60,148,148,148,192,201,201,169,114,133, -217, 0, 1, 33,180,158, 89,232,239,250,191,199,125,250,233,167, 18,207,234, 27, 94, 45, 52, 26, 13,138,139,139, 97,103,103, 7, - 71, 71,199,154,136, 91,126,126, 62,166, 78,157, 26, 7, 96,110, 93,154, 82,169,244,211,207, 63,255,124,120,235,214,173, 61, 94, -122,233, 37, 72,165,210,193, 5, 5, 5, 88,189,122, 53,148, 74, 37, 86,173, 90, 5,127,127,127,137, 32, 8,208,235,245,213, 70, -184, 76,161, 80,164, 53,231, 90, 42, 42, 42,250,105,251,246,237, 61,186,119,239,238, 0, 0, 35, 70,140,224,182,110,221,154,209, -175, 95,191, 91, 58,157,238,185,218,213,133,245,105, 70, 70, 70,202,178,179,179,223, 28, 59,118,236,148,232,232,104,251,130,130, - 2, 88, 89, 89,225,151, 95,126,193,202,149, 43,247,152,205,230, 57,155, 55,111,254,224,187,239,190,139, 25, 49, 98, 4,190,251, -238,187, 87,171,154, 69,136,117,104,122,250,248,248,224,252,249,243,112,114,114,130,139,139, 11,138,139,139,113,252,248,113,156, - 60,121, 18,109,218,180, 1, 33,196,177,161,104,101, 3,233,108,118,164,170, 41,195, 25,221, 47,205,194,194, 66, 20, 23, 23, 67, -142,202,193, 27,111,223,190, 13, 0, 53,159,155,155, 78, 66,136,212,203,203, 43,214,193,193, 97, 34, 0, 73, 81, 81,209, 42, 27, - 27,155,248,212,212, 84,227,223,117,236,143,164,193, 34,132, 84,159,151, 40, 74,233, 33,159,171,122, 93, 94,164, 93,138,155, 71, -232,166, 22,158,161,201, 0, 32,165,184, 66,101,118, 41, 62, 73,122, 29, 0,152, 76, 20,199,174, 20,225,220,181, 28, 36, 93,203, -134,202,186,241,167,110,131,193,208,127,215,174, 93,216,180,105,211,194, 47,191,252,146,102,100,100, 32, 61, 61, 29, 78, 78, 78, -232,219,183, 47,242,242,242,112,234,212, 41, 4, 7, 7,131, 82, 10, 31, 31, 31, 5, 0,135,134, 52,221,175,137, 99,159,159,208, - 49,192,197,129, 96,219,177,221,232,214,102, 36,148, 86, 82,228, 21,149,131, 35, 4,169, 55,247, 65, 16,108,113,238,114, 6,122, -132,217,162, 87, 87,123,175,178,253, 69, 47, 1, 88,222,248, 29,203, 12, 33,119, 31, 21,114,247, 83,206,169, 19,145,120,142, 32, - 69,197, 21,184,252,231,247, 52,235, 74, 66, 77, 89,107, 50,234, 26,149, 18, 4, 97,170,187,187,187,126,198,140, 25,253, 91,182, -108,105,126,237,181,215,206,164,165,165, 77,185,203,136,124,241,245,215, 95, 35, 37, 37, 37,127,193,130, 5, 7,114,114,114,222, -105,226, 31,115, 22, 33,228, 43, 0,208,106,181, 5,219,183,111,239,116,232,208,161,183, 22, 47, 94,236,241,250,235,175, 43,222, -120,227,141,241,149,183,138, 70,255,104,225, 81, 81, 81,187,126,250,233, 39, 91, 15, 15, 15, 66, 8,129,201,100, 66, 94, 94, 30, -242,242,242, 80, 92, 92,140,178,178, 50,148,150,150,130,227,184, 70,219,203, 41,149, 74, 73, 73, 73, 9,110,223,190,141, 46, 93, -186,224,228,201,147,126, 71,143, 30, 93,249,237,183,223,138,113,113,113, 36, 42, 42,138,228,231,231, 99,203,150, 45, 98,118,118, - 54,103,109,109, 93,106,241,211, 49, 7, 71,165,210, 70,254,231,209,248, 93, 90, 77,114,126, 86,206,133, 98, 14,148,211,106, 79, - 23, 7,182,236,231,140,202, 54, 89, 22,113,227,198,141,167,167, 77,154, 20,232,224,228, 4,158,231,225,226,226, 2,141, 70,131, -242,242,114,148,151,148, 64, 95, 90,138,138,146, 18, 92,222,191, 31,221,135, 14,197,192,142, 29,125,118,156, 57,243, 34,128,239, - 26,210,229,219,182,173,137, 92, 57, 68, 70,254,247,255,144,156, 92, 99,172,100, 61,123,130, 40,149, 32,239, 52,191,115,140, 86, -171, 61,231,231,231,183,123,240,224,193,131, 38, 76,152,192,101,103,103,111,245,240,240,232,159,157,157,125,185,161,237, 84, 42, - 85, 96,126,126, 62,116, 58, 29, 28, 29, 29,177,120,241, 98,184,185,185, 65,175,215,227,212,169, 83,212,219,219,155, 36, 36, 36, -192,203,203, 11,133,133,133, 48, 26,141, 40, 47, 47,207, 49, 26,141,122,203, 46, 76,120,185,123,120,131,163,102,104,115,242, 49, - 98,232, 64, 72,229, 42,164,105,242, 17, 30, 26,228,249,236,176,158,158, 18,194,227,255, 62, 89,255, 42,128, 85, 22, 24, 73,154, -146,146,130,228,170,252,179,183,183,135,173,173,109,229, 36,239,114,121,141,185,146, 74, 45, 15,208, 87, 79,142, 94,109,174,242, -242,242,144,154,126, 21, 91, 18,214,192, 36,152,157,127,232,106,127, 51, 72, 38,187,224, 90, 74,102,231,157,167,231, 26,249,255, -172,153, 62,125,250, 7,174,174,119, 54,133,241,241,241,193,196,137, 19,177,125,251,118,164,164,164,220,209,157,187,176,176, 80, - 4,176,166, 62,205, 19, 39, 78,228,118,237,218,245,201, 55,223,124,115,223,154, 53,107, 20, 99,199,142,173,169,206, 20, 4, 1, -165,165,165,216,191,127, 63, 14, 31, 62,140,211,167, 79, 23,153, 76,166,223, 36, 18,201,178, 19, 39, 78, 92,110,234,117,212,189, -123,119, 39,149, 74,245,241,171,175,190,106, 7, 0, 21, 21, 21, 24, 59,118,172,205,147, 79, 62,137,196,196,196, 54, 95,126,249, -229,106, 0, 93, 26,171, 14,228, 56,110, 99, 66, 66, 66,116,171, 86,173, 42,159, 30,205,102, 28, 61,122, 20, 19, 38, 76, 40, 84, - 42,149,113,201,201,201,101, 94, 94, 94, 31,108,223,190, 61, 38, 60, 60, 28,237,219,183,119,207,207,207, 87, 1, 40,169,231,188, - 67, 16,132,154,243,179,106,213,127, 47,149,138,138,138,202,232,142,209, 72,186,116,233,226,127,242,228,201,180,251, 16,169,186, - 85,235,243,173,135,229,166, 93,190,118, 45,100,211,167,227,234,209,163,160,148,194, 37, 52, 20, 0,112,245,240,225,202,225, 19, -222,124,179, 73,122, 94, 94, 94, 45, 40,165, 47, 70, 71, 71,191, 62,120,240, 96, 23, 79, 79, 79, 56, 59, 59, 35, 41, 41,169,251, -238,221,187, 23,121,121,121,173,164,148,174,212,106,181, 15, 44, 15,238,246, 32,143, 92, 4,139, 82, 74,170, 14,146, 96,244,104, -193,117,211,166,130, 91, 33,142, 38, 43, 91, 33, 5, 0, 42,202, 36, 38,159,164,170, 97, 26,230,174, 7, 5,133, 32, 80, 80, 81, -132, 72, 41, 4, 11,130,231,206,246,102,112, 23,156,240, 76,183, 17,136,139, 59, 77,246,239,223,143,131, 7, 15, 34, 60, 60, 28, -102,179, 25,246,246,246, 24, 51,102, 12,226,227,227,161, 84, 42, 81, 86, 86,214,168,166,170, 5, 63,178,107,251,150,146,171, 25, - 73,232,212,106, 20,252, 61,123, 33, 53,179, 24, 69, 58, 3, 10,138,245, 8, 9,249, 15,114, 10,245, 40, 41,211,227,252,149,117, -240,246, 12,228, 56,217,245, 24,139, 12, 86,173, 59,132, 88,116,138,138, 69,167,232,254,221,127,109,110,196, 27, 44,107,226, 32, -138,226,210, 93,187,118,117,239,213,171,151, 52, 58, 58, 58,194,207,207,175, 99,122,122,250, 89, 0,240,243,243,235, 24, 19, 19, - 19,225,230,230,134, 47,190,248,162, 66, 20,197,165,205,124,250,169,221, 94,235,132,143,143,207,156, 95,127,253,245,219,137, 19, - 39,194,211,211,179,131, 37, 26,142,142,142,227, 87,175, 94,109,235,233,233, 73,120,158, 71, 69, 69, 5,178,179,179,113,251,246, -109, 20, 21, 21, 33, 35, 35, 3,133,133,133,200,202,202, 42, 75, 75, 75,219,108,105,218,222,123,239, 61,240, 60,111,158, 48, 97, -130,172, 95,191,126, 88,179,102, 13,119,227,198, 13,124,247,221,119,194,198,141, 27,211, 57,142,147,142, 26, 53,202,183,105, 7, - 76,242, 53,154, 27,174, 6, 83, 81,197,224,168, 30,211,242,210,242,225,234, 63, 2,251,254,216,252, 69, 70, 90, 42, 37, 28, 44, -110,123,102, 37,147, 13,140,236,214, 77,150,157,157,141,224,224, 96,100,102,102,226,218,181,107, 48, 26,141, 40, 43, 46,134,185, -164, 4, 66, 81, 17,104, 73, 9,210,254,248, 3,109,131,131, 21,187,206,156,137,105,204, 96, 85, 87, 11,215, 23,181,226, 56, 14, -196,214, 22,176,181, 5,229,154, 54,185,130, 90,173,142,181,183,183,127,179,164,164,100,183, 86,171,253,196,100, 50,189, 57,127, -254,252,200, 15, 63,252,208,121,250,244,233,118,211,167, 79, 95,235,239,239,255,255,236,125,119,120, 20,213,254,254,123,102,182, - 39,155,222, 27, 16, 32,132,114,129, 84, 66, 39, 72, 87,138, 8, 88,168,130, 20, 65,148,162,151,166, 34, 29, 11, 88,104,130, 34, - 69,202, 53, 2, 42,160, 64, 16, 66, 9, 33,164, 18, 72, 72, 2, 36, 33,101, 19,210,219,102, 55,187, 59, 51,231,247, 71,138, 33, -146,100,131,248,187,124,189,251, 62,207, 62,187,179, 59,251,206, 41, 51,115,222,121,207,231,156,211, 39, 35, 35,163,201,174,157, -202,202,202, 52,131,193, 96, 11,192,241,252,249,243,112,112,112, 64, 69, 69, 5,244,122, 61, 52, 26,141,222,198,198, 70, 86, 84, - 84,132,234,234,106, 84, 87, 87,195,210,210, 18, 49, 49, 49,197, 28,199,253,106, 76, 26, 21,114,185,157, 84,110, 5,129,211, 66, - 36, 22,163,141, 71, 59, 8,124, 53, 74,202,171, 48,227,229, 49,136, 77, 72,196,175, 23, 35, 57,131,161,249,115,158,214,220,164, - 4, 66, 8,245,246,246, 70,105,105, 41, 88,150,133,185,185, 57,148, 74, 37,186,116,233,130,172,172,172, 39, 22, 88, 13,197,213, -239, 17,167, 80, 80,153,139,111, 62, 61, 2, 55,103, 15, 6,128,125, 78, 94,214,115, 51,151, 78, 10,244,236,111,251,105,250,213, -226, 38,227,218,206,157, 59,247,233,240,225,195, 79,229,229,229,217, 55,168,235, 62, 6,131,225, 67,142,227,144,145,145,129,164, -164,164, 79, 40,165, 23,255,176,204,217,156,208,208,208,102, 69, 65,100,100,100,172,191,191,255,204, 73,147, 38,109,109,215,174, -157, 35,165, 20, 62, 62, 62,120,237,181,215,240,233,167,159,226,242,229,203, 63, 10,130,176,207,210,210,242, 90, 65, 65, 1,219, -148,243,208, 28,122,245,234,101, 43,147,201, 46,237,216,177,163,109,135, 14, 29, 24,149, 74,133,136,136, 8,244,233,211, 7,132, - 16,120,121,121,193, 96, 48,184,181, 36,174, 40,165, 63,156, 56,113, 98,104,135, 14, 29,112,231,206, 29, 92,185,114, 5, 14, 14, - 14, 80, 40, 20, 24, 51,102,140,237, 15, 63,252, 48,183, 91,183,110,219, 68, 34,209,135,207, 63,255, 60,120,158, 71,116,116,116, - 94,122,122,122,101,115,117,212,204,195, 59, 40,165, 48, 24, 12,159, 48, 12, 51, 33, 48, 48,112, 76, 84, 84, 84,244, 95,105, 28, -159,153,152, 43, 0,109,218,180,233,202, 48,204, 2, 91, 91, 91,148, 20, 21, 61,226, 92,213,221, 49,234,182, 1,160, 83,167, 78, -199,181, 90,237,234,230, 6, 15,185,187,187,119, 87, 40, 20,111,141, 30, 61,250,149, 23, 94,120,129,213,235,245, 56,117,234, 20, -182,111,223,142,145, 35, 71,194,203,203, 11,239,189,247,158,101,117,117,245,210,179,103,207, 46,233,214,173, 91,104, 69, 69,197, -135,127,101, 64, 82, 11,215,247, 31, 26,228,159, 38,176,106, 51, 22, 92,255,203,196,137,188, 7, 80, 90,123, 19,183,179,182,182, -222,202,243,252, 32,124,248, 33, 44, 68, 86,200,184,151,138,138, 18, 1, 6, 93, 53, 4,129,130, 10, 45,151,137, 66,202,195,114, - 32, 69,249,101, 2, 49, 33,120,254,249,231, 49, 98,196, 8,196,198,198,226,224,193,131,232,223,191, 63,202,202,202, 80, 94, 94, -142,202,202,202,186, 88,144,102, 33,145,107,255,213,214,169, 19, 42, 52,189, 96, 38,149,162,184,188, 26, 37, 21,213, 40, 44,213, -226,248,207,175,161, 90, 91, 5,174, 90, 7, 94,207, 65,233, 52, 30, 94,182,131, 1,122,183,219,211, 44, 68, 67,117,133, 81, 35, -117, 10, 10, 10, 30,186,187,187,255, 20, 19, 19, 51,113,210,164, 73,184,112,225,194,124, 0,111,212,222, 96,231, 79,154, 52, 9, - 49, 49, 49,184,115,231,206, 79, 5, 5, 5, 79,101, 72,169, 94,175,175, 50,212,118, 81,201,229,114,137, 49,255, 97, 24,102,152, -131,131, 3,209,235,245, 40, 42, 42, 66, 97, 97, 33,138,138,138,160,209,104, 80, 89, 89, 9,142,227, 96, 48, 24, 16, 25, 25,249, -144,231,249,200,214,164, 39, 41, 41,201,107,241,226,197,111, 12, 29, 58,116,213,232,209,163,113,242,228, 73,124,255,253,247,115, - 1, 28,235,215,175, 95, 76,107,243,199,243,252,197, 29, 59,118, 58,205,158, 53,214,233,199, 83,123, 55, 29, 59,126,179,231,228, - 87,242, 18, 93,221,122, 56, 28,218, 25, 46,229, 56,122,202,104, 50, 65,232, 97,231,228,132,140,140, 12, 68, 69, 69, 65,171,213, -214,139, 10,125, 73, 9, 12,197,197, 32,106, 53,100, 28, 7,109,102, 38, 58,244,232, 1, 2,116, 53, 66, 88, 55,217, 45,200,178, - 44, 8, 33, 32, 74,101,141,200,106,162, 91,171, 9,113,229,235,235,235,123,112,207,158, 61,146, 37, 75,150, 4,182,111,223,254, -235,220,220,220, 76, 15, 15,143,231, 63,251,236,179,203,235,214,173,147, 77,153, 50,165,211,158, 61,123, 38, 55,231, 12,105,181, -218, 99,167, 79,159,126,165,109,219,182,142, 9, 9, 9,208,106,181, 16, 4, 1,163, 70,141, 2, 0, 89,221,126,201,201,201,218, -170,170,170,252,196,196,196,138, 7, 15, 30, 24, 0, 24,245, 16, 96,110,110, 97, 43,146,152, 67, 96, 68,176,178,178,129, 72,106, - 14,129, 19,129, 23, 0, 11, 43,123, 92,139, 77, 70,210, 3,118,238,221, 52,132, 24,245,180, 83, 43, 88,237,237,237,235,187, 4, -235,186, 11,157,156,156, 80, 86, 86,246, 68, 2,171,188,188, 28,101,101,101, 72, 77,191,131,252,138, 92,132, 30,141, 0,207,243, -168,174,174,209,166,174, 78,238, 56,127,244,134, 50,120, 98,192,191,237,125,201,229,194, 56, 26,211,140,200, 74, 1,144, 82,215, -181, 57,100,200,144,141, 67,135, 14,133, 94,175,199,128, 1, 3,144,144,144, 48,202,218,218,122,125,107, 71,138,198,196,196,252, -220,173, 91,183,223, 42, 42, 42,218,242, 60,255,138,173,173,237, 50,142,227,234,220,183, 83, 12,195,220, 84,171,213, 39, 59,118, -236,216, 55, 32, 32,224,120,116,116,244,204, 22,132, 63, 9, 12, 12,156, 96,102,102, 54, 67,173, 86, 31,149,203,229,203,118,236, -216,209,182,125,251,246,204,131, 7, 15,192,113, 28, 50, 51, 51,133,168,168,168,170,128,128, 0,101,104,104,104, 37,195, 48, 77, - 58,109,254,254,254, 98,131,193,240,159, 95,126,249,101, 88,135, 14, 29,112,249,242,101,108,222,188, 25, 29, 59,118,196,190,125, -251,208,183,111, 95,120,122,122,194,198,198,102, 65,121,121,121,208,199, 31,127, 60,194,207,207, 15, 39, 78,156, 64, 65, 65,193, -174,230,166,108,224,184,166, 67,171,170,170,170, 64, 41,197,115,207, 61, 55,115,201,146, 37, 24, 51,102,204,201,160,160,160, 1, -145,145,145,247,140, 40,214,103,210,169,170,239, 27,117,113, 89, 55,108,216,176, 37, 61,123,246,196,161, 67,135,160, 10, 10,130, -230,251,239, 97, 61,122, 52, 40,128,180,131, 7, 65, 41,133,245,216,154, 80, 88,207,137, 19,177,108,217,178, 17,227,199,143,247, - 0, 16,208, 4,231,166,105,211,166,189, 61,117,234, 84,196,198,198, 98,247,238,221,136,139,139,171,155, 64, 20, 6,131, 1, 73, - 73, 73, 72, 74, 74,130,139,139, 11, 94,120,225, 5, 50,103,206,156,225,163, 70,141,178, 7,208,255,239,200,231,159, 52,200, 63, -214,193,122,244, 38,110,103,101,101, 21,189, 99,199, 14,219, 94,189,122,177, 28,199,225,247, 11, 23,240,238,194,153, 24, 57,122, - 1,180,213, 82,112, 90, 2, 94,162,108,241, 96, 26, 29,139,242,203, 4,130,242,121,232,116, 58,204, 57, 34,129, 53, 41,194, 23, - 51,122, 97,219,182,109, 53, 93, 49, 85, 85,168,168,168, 64,101,101, 37, 42, 42, 90,238,122,171, 44, 85,234,245, 6, 1, 57,249, - 15,144,157,123, 11, 86,202, 54,160,140, 7, 30, 22, 87,129,192, 17, 6, 77, 50,132,218, 11,179, 90,147, 13,117,181,145,226,152, - 26, 31, 39,169,215,149, 27,189, 47,195, 48, 7, 15, 31, 62, 60,102,235,214,173,210, 49, 99,198,120,187,184,184,244, 7,128,151, - 95,126,217,219,202,202, 10,135, 15, 31,214, 53,119, 3,107,229, 9,203,184,184,184, 76,237,223,191, 63, 30, 62,124,136,180,180, -180, 72, 35,211,120, 46, 62, 62,126,186,135,135, 7,201,204,204, 68,118,118, 54,138,139,139, 97,101,101, 5, 91, 91, 91, 56, 59, - 59, 67, 16, 4,104, 52, 26,167,219,183,111,251, 2, 56,103,108,154,242,243,243, 75, 0,124, 89, 85, 85,181, 74, 36, 18,213, 89, -251, 63,227, 9, 23,160,190,157,116, 47,164,123,119,175,110,238,238, 54,157,252,187,119,119,112,119,187, 87,110,239,224,110,241, -235,153, 4, 69,254,195,146,228,219,183,239,158,104, 77,145,105,138,139,161,186,121,179, 38,230,170,162, 2,218,202, 74,112,165, -165,112,233,212, 9, 80,171,193,104,181, 16,105,181, 16, 11, 2, 20,102,102, 48,230,105, 75,116,229, 10,148,163,107,166,111,209, - 37, 37,213, 56, 86,132, 64, 60,112, 32,136,185, 57,136,153, 25,152,211,167,107,132,150,133, 5,176,183,197, 94, 50,184,186,186, -218, 57, 59, 59,135,108,219,182, 77, 82, 88, 88,136,196,196,196,132,180,180,180,114,123,123,123,165, 72, 36, 18,146,147,147, 47, - 38, 39, 39,143,242,244,244, 4,207,243, 29, 90,160,251,234,196,137, 19, 67,250,245,235,199,121,122,122,154, 21, 20, 20,120,148, -148,148,144,220,218, 81, 74,117,136,138,138,146,101,101,101, 85,241, 60,255, 11,106,230,193,106,242, 34,113,112,112, 48,151, 74, -165,175,240, 60, 63,181,155, 39, 47, 42,174,208, 0,156, 14,233, 25,233, 40, 85,235, 65, 57, 3, 50,179,115,161,174, 22, 80, 84, - 92, 1,255, 94,207,111,211,113,215, 86,185,186,186,174, 84,169, 84,167,154,115,177,198,141, 27, 7, 74, 41,162,162,162,112,229, -202, 21, 92,185,114, 5, 25, 25,127,152, 63, 86, 86, 86, 8, 13, 13,197,224,193,131,141,239,118,169,170,130,147,147, 19,172,172, -172,112, 34,236, 32,190,253,236, 72,125,160,123,131, 7, 36,152,153,153, 97,195,187,159,155,207,252,247,132, 15, 1,140, 49,134, -123,200,144, 33, 83,189,188,188,124,131,130,130,144,145,145, 1, 31, 31, 31,120,121,121,117, 75, 77, 77,157,101,140,251,217, 24, -137,137,137,122, 63, 63, 63, 71, 39, 39,167,197,211,167, 79, 7,199,113, 24, 49, 98, 4, 82, 82, 82,190, 43, 40, 40,200,153, 53, -107, 86,219, 65,131, 6,225,195, 15, 63,124,185, 87,175, 94,235,154,235, 46,235,223,191,255,123, 19, 39, 78,252,247,139, 47,190, - 40,191,114,229, 74, 47,141, 70,195,186,187,187, 51,247,238,221, 3,207,243, 8, 15, 15,231,206,157, 59,151,163,215,235,183,220, -186,117,171,119,101,101,229, 47,113,113,113, 77, 58,151, 15, 31, 62,124,251,196,137, 19,195,189,189,189,113,230,204, 25,188,249, -230,155,103,148, 74,101,215, 23, 94,120,193,195,220,220, 28,241,241,241,208,235,245,112,113,113,113, 92,190,124,249,168, 17, 35, - 70,224,252,249,243, 88,187,118,237,111, 78, 78, 78, 95,181, 36,130, 69,181,177,145, 13,193,178, 44,226,226,226,240,220,115,207, - 97,217,178,101, 0,128,223,127,255,221, 98,248,240,225, 81,193,193,193,206, 45, 5,230, 55,229, 84, 61, 43,163, 8, 45, 44, 44, -166,238,219,183, 15,119,239,222,197,213,171, 87, 81, 82, 82, 2,173, 86, 91,191,152,110, 89,105,105,205,116, 13,109,219,162,219, -202,149,248,250,165,151,144,155,155, 11,134, 97,236,154,185,199,191,178,114,229, 74,252,246,219,111,216,188,121, 51,202,203, 31, -223,134, 41, 69,155,158, 76, 0, 0, 32, 0, 73, 68, 65, 84, 20, 10, 4, 6, 6,194,215,215, 23,105,105,105, 0, 96,247,119,229, -243, 31,237, 96, 53, 5, 43, 43,171, 79,119,237,218,101,219,183,111, 95, 86,173, 86, 67, 16, 4,244,233,221, 27,211,103, 76,199, -217, 19, 63,194,165,253, 96,176, 90, 5, 56, 11,179,150, 5,150,193, 18,232, 89, 6,117, 69, 5,228,181,193,164, 55,179,181,160, -148, 66,175,215, 67,173, 86,215,199,246,212, 5, 83,183,232, 30,233,101,113, 73,247,121,247,242,202, 56, 68,198,124, 15,131, 78, - 7, 79,239, 21,168, 54,216,195,220,113, 22, 52,250,147,208,151,214, 56,241, 82,203, 96, 60,124, 88, 8, 16,166, 69,139,147,114, - 70,135, 1,193,160, 53, 94, 96,101,102,102,150,186,184,184,252, 16, 30, 30, 62,109,252,248,241, 56,123,246,236, 92, 0, 24, 63, -126, 60,194,195,195,113,255,254,253, 31,114,115,115, 75, 91, 41,164,236, 81, 51, 39, 76,189,235,229,228,228,228,217,166, 77,155, -249,115,230,204, 9,234,209,163, 7, 14, 29, 58, 4, 0, 23,140,225, 43, 44, 44,252,102,233,210,165,195, 22, 47, 94,236,204, 48, - 12, 73, 73, 73, 1, 33, 4,142,142,142,240,240,240,128,173,173, 45, 74, 75, 75,225,231,231,103,238,225,225, 49,198, 88,129, 85, -107,241,187, 3, 40,171,123, 82,170,125,151, 0,176,162,148, 62,209,168, 86, 65,144,236, 60,119, 38,114,103,160,223, 72,198,179, -173,121, 25,160, 35, 55,162,114,204, 13,188,184,117,141, 23, 33, 9,247, 83, 83, 61,169, 32,160,178,164, 4,250,138, 10, 24, 74, - 74,192, 21, 23,131,184,184, 64,164,213,130,173,174, 6,171,211, 66, 46, 55, 67, 89,126, 62, 8, 99,196,185,212,160, 65,168, 19, - 87, 44,203,214,187, 86,196,220,188,222,225, 98, 89, 22,198, 76, 93, 36,147,201,246,237,222,189,219,217,197,197, 5,159,127,254, - 57,156,157,157,189,135, 12, 25, 82, 56, 96,192, 0,133,189,189, 61,188,189,189, 17, 16, 16,128,139, 23, 47,130,101,217,251, 45, -220,216, 56, 66,200,152,171, 87,175,190, 29, 17, 17,241,146,139,139, 11,153, 54,109, 26, 70,142, 28, 9,153, 76, 6,141, 70,131, -146,146, 18,156, 62,125,154,112, 28,215,183,246, 9,184, 77,187,118,237,246, 17, 66,114,210,211,211,167, 53,230,148, 74,165,251, -102,207,158, 29, 60,102,204, 24,194, 8, 90, 93,232,217, 3, 34,158,231,200,187, 43,191,229,195,174, 92, 98,120,158, 35, 19, 94, - 91, 42,252,122, 33,129,153,251,246,167,188,111,239, 23,144,152,152,232, 60,123,246,236,245, 0, 78, 25,115, 46,137, 68,162,250, -242,108, 12,150,101,155, 28, 52,240, 39,103,132,231,114, 70,205,232,243,199, 3, 19,175,183,115,115,246, 96,234,156, 43, 0, 40, - 47, 47, 71,102,102, 38, 12, 6, 3,236,236,236, 96, 48, 24,140, 90,159,109,205,154, 53, 12, 33,228,253,169, 83,167, 34, 47, 47, - 15,107,215,174,197,202,149, 43, 49,113,226, 68,108,216,176, 97,165,191,191,255, 62, 99,230,127,106,212,141,231,101,109,109,125, -108,253,250,245, 18, 75, 75, 75,196,197,197,161,107,215,174,248,236,179,207, 68, 41, 41, 41,109, 59,119,238,140, 59,119,238, 32, - 39, 39, 39,173,165, 88, 36,169, 84, 58,119,193,130, 5,242,172,172, 44, 76,152, 48, 65,158,150,150,134,219,183,111,131, 82,138, -216,216, 88,238,196,137, 19, 57, 26,141,102, 96, 76, 76, 76, 17,128,239, 90,122,160, 27, 48, 96,192, 2, 47, 47, 47,252,254,251, -239,152, 63,127,254, 57,115,115,243,215, 74, 75, 75,103,233,116,186,207, 70,143, 30,141,190,125,251, 34, 57, 57, 25, 99,198,140, - 65, 96, 96, 32, 46, 92,184,128,101,203,150,157, 49, 55, 55,159,220, 66, 57,220, 11, 11, 11,235, 22, 16, 16, 80,223,187, 33, 22, -139, 97,109,109,141,164,164, 36,116,234,212, 9,203,150, 45,195,214,173, 91,177,100,201, 18, 97,248,240,225,156, 78,167,147,212, - 57,155, 79,136,103, 98, 20, 97,101,101, 37,205,205,205,133,165,165, 37, 66, 66, 66,144,244,219,111,136,156, 61, 27, 25,107,214, -128, 82, 10,135,245,235, 17,244,254,251,232,126,255, 62, 84, 42, 21, 14, 28, 56, 0,134, 97,234, 71,196, 54,113,205,163,172,172, - 12, 62, 62, 62,136,138,138,194,129, 3, 7,240,249,231,159,215,199,178,137,197, 98, 4, 7, 7, 99,248,240,225, 72, 73, 73,193, -238,221,187, 97,105,105, 9, 19,158, 64, 96, 81, 74, 73,195,247, 70,221, 27,131, 2, 2, 2,216,202,202, 74,104,181, 90, 60,124, -248, 16,233,233,233, 80, 40, 20,200,201,207, 68,175,142,149,200, 35, 58, 36,198,166,242, 16,137,110,182,116, 83,212,233,116,136, -140,140, 68,100,100, 36, 4,239,205, 16, 4,161,174,155,162,222,189,202,203,203, 19, 60, 60, 60, 80, 94, 94,206,180,220,120, 85, -159,187, 16, 30, 63, 98,218,248,231,164,161, 97,223,194, 80,205,161, 82,107, 13,181, 86,135, 10,141, 24, 58,217,112, 16,114, 25, - 12, 43, 67, 95,223,142,184,120, 53, 85, 43, 24,244,161,205, 55, 56, 16, 4,125, 17,101,220,167, 16, 33,247, 56, 5,175,125,252, -142, 44, 11,145, 84, 9, 77, 85,133, 64,169,241, 14,140,141,141,205,145, 35, 71,142,140,239,215,175,159,249,208,161, 67, 59,214, -118,223, 25,142, 28, 57,162,182,177,177, 57,210, 74,113,181,138, 16, 44, 3, 5, 35,147, 74,207,219,218,217,253,110, 97, 97,225, - 63, 98,196,136,142, 35, 71,142, 68,135, 14, 29, 16, 18, 18,130,144,144,144, 11,185,185,185,215,140,124,146,184, 73, 8,153,148, -158,158, 62,217,197,197,101,120,207,158, 61,157,219,183,111, 47,183,178,178, 2,203,178, 80,171,213, 40, 44, 44,172, 27,113,213, -222,216,180,182,107,215, 14, 46, 46, 46,239,138,197,226,245,141,158, 84, 56, 0,207,187,184,184,152, 63,201, 73,156,152,152,248, -112,228,136, 33,142, 59,191, 14,247,210,104,120,253,207,191,157,215, 27,116,230,154,164,228,251,173,154,205, 94, 47, 8,231, 98, -162,163, 71,246,239,219, 87,150, 17, 19, 3, 67,105, 41,248,146, 18,136,244,122,136,212,106,176,213,213, 32, 26, 13,218,248,154, - 1,130, 19,110,164,229,112,122,158, 63,111,180,192,170,237, 14,172,107,252,235, 4, 22,211, 64, 96,213,117,127, 53, 7, 39, 39, - 39,179, 81,163, 70, 5,251,249,249,129, 82,138, 79, 63,253, 20,122,189, 94,170,215,235, 97, 48, 24,160,215,235, 81, 81, 81,129, - 99,199,142,225,224,193,131, 17,150,150,150,223, 27, 81,231,156,187,187,251, 60, 65, 16, 28, 56,142,211, 59, 56, 56, 72,126,248, -225, 7,200,229,114, 48, 12, 3, 95, 95, 95,200,229,114,157,171,171,107, 25, 0, 56, 58, 58, 26,182,110,221, 42,154, 53,107,150, -164,137,167,127,223,183,223,126, 91, 92, 39, 26, 93,219,108,224,244,122,189, 0, 0, 93,122, 14,252,163, 91,108, 4,112,247,238, - 93,108,217,178, 5,106,181, 26, 44,203, 74,140, 60, 71, 49,100,200, 16, 12, 31, 62,188,190, 59,208,209,209, 17, 58,157, 14, 28, -199, 25, 45,174, 0,160,110, 18,209, 53,107, 8,131,213,192,190, 32,139,116, 0,245,241, 83,101,101,101,200,202,202,194,131, 7, - 15,234,187, 79, 4,106,220, 83,118,120,120,248, 0, 79, 79, 79, 87,119,119,119,236,217,179, 7, 26,141,230,254, 79, 63,253,212, - 97,218,180,105,104,219,182,173, 61,207,243, 67, 0,156,105,205,121,202,113,220,180,133, 11, 23,154, 59, 58, 58, 98,239,222,189, -248,229,151, 95,242,123,246,236,233, 56,115,230, 76,120,123,123, 35, 49, 49, 17, 95,126,249,101,145, 32, 8,175, 24,193,149,118, -227,198, 13, 39,189, 94,143,156,156, 28, 8,130,128,228,228,100,228,228,228, 8,151, 46, 93,202,209,106,181,117,226,170, 69,120, -122,122, 42,253,253,253, 29, 83, 82, 82,112,244,232, 81, 24, 12,134, 53,137,137,137,122,107,107,235,163, 59,118,236, 88,217,190, -125,123,155,129, 3, 7,162,111,223,190,160,148,226,228,201,147,248,232,163,143,206, 40, 20,138,215, 18, 19, 19,245, 45,184,234, -175,174, 91,183,238, 3, 59, 59,187, 9, 83,166, 76, 97,252,253,253, 17, 29, 29, 13,158,231, 49,100,200,144,122,113,117,246,236, -217, 31,206,156, 57,243, 34, 0,137, 82,169,180, 53,102, 90, 9, 66,200,243, 0,234, 28,130, 42, 74,233,175,207, 90, 67,173,213, -106,145,146,146, 2, 39, 39, 39,120,247,235, 7,239,244,116, 92,172, 13,106, 31,188,116, 41, 42,213,106,236,219,183, 15, 49, 49, - 49, 96, 89, 22, 29, 58,116,104,249,126,167,215,227,222,189,123, 40, 44, 44,196,184,113,227, 48,101,202, 20,124,242,201, 39,208, -235,245, 88,181,106, 21,138,139,139,177,103,207, 30,164,166,166, 66, 36, 18, 65,169, 84,254,109,249,107, 78,131,252,163, 29,172, - 58, 97, 36, 8, 2, 84, 42, 21,162,162,162,144,150,150, 6,165, 82, 9, 13, 39, 8,219,174,199, 11, 12, 17,171, 56,138, 8,194, -139, 87,181, 84,161, 60,207, 35, 34, 34, 2,119,239,222,133, 85, 39, 90, 23,152, 8,173, 86, 11,181, 90, 93,231, 92,105,146,146, -146,242,202,202,202,108, 91, 74,219,195, 78,204,161,208,208,243,139, 2,124,187,121, 13, 29,244, 17, 78,157,250, 16,165,229,229, - 80, 87,139, 80,169,209, 67,173,165,112,181,232,128,160,158,126, 40, 40,210, 33,229,118, 76, 78,129,196,166,217, 39, 49, 74,176, -125,210,248, 33,139, 63,120,111,142, 83, 87,239,229,114,154,255, 43,104, 89, 44, 69,221,124,149,132,129, 84,105, 15,136,100, 52, - 58,169,176,242, 98,130,166,144, 18,108,111,133, 32, 80,187,187,187, 31, 92,184,112,225,250,168,168, 27,142, 0, 16, 29, 29,157, -159,151,151,247,126,118,118,182,218, 88, 30, 66,136, 53, 33, 88, 38, 8,148,173, 21,105,195, 22, 47, 94,236,218,175, 95, 63,189, - 88, 44, 70,102,102, 38, 62,249,228, 19,132,135,135, 31,205,205,205,221,217,154, 89,157, 41,165,241, 0,226, 9, 33,107, 19, 18, - 18,134, 14, 25, 50,100, 67,167, 78,157,220, 57,142, 67, 89, 89, 25, 74, 74, 74,144,154,154,138,170,170,170, 22,151, 29,201,204, -204, 60,159,149,149, 53,116,222,188,121,232,215,175,223,140,253,251,247,191,218,208, 6,238,209,163,199,245,177, 99,199,186, 91, - 89, 89, 73, 52, 26,141, 33, 57, 57,249,114,171, 30, 51, 61, 60,250, 47, 90,180,168,231,220,185,115, 81, 89, 89,137, 3, 7, 14, - 96,231,206,157,240,240,240,232,159,149,149,117,181, 21, 2,240,200, 47,161,161,139,123,118,238,220,169,173,167, 39, 82,206,157, -131, 68,175,135,152,227,192, 86, 85, 65,108,168, 70,187, 0,115, 72,228,246,200,205,208,224,232,237,219, 15, 40,165, 45, 78,144, -169, 31, 50, 4,134,228,100,176, 44, 11, 73,112,112, 77,172,149,153, 25,152,159,127,254, 67, 88,173, 94, 13,106,110, 14, 33,184, -229, 16,132,135, 15, 31, 86,121,121,121,197,222,185,115,199,191,115,231,206, 88,179,102, 13,178,178,178, 64, 41, 69,126,126,190, - 54, 63, 63, 95, 85, 92, 92,156,201, 48,204, 47, 57, 57, 57,251,140, 93,138, 68, 16, 4,135,147, 39, 79,214, 57,138,248,253,247, -223,225,234,234, 10, 43, 43, 43,148,151,151, 99,218,180,105,210, 15, 62,248, 0, 0, 16, 27, 27, 43, 86, 40, 20, 77,187,186, 6, - 3,101, 24,134,100,101,101,233,205,204,204,136,173,173,173, 72, 38,147,161,186,186,186, 94,104,221,189,123, 23,167, 78,157, 66, -118,118, 54,108,109,109, 25, 27, 27, 27,240, 60, 95, 98,100, 90,193,178,236,159, 2,218, 91, 43,174, 26, 98,245,106, 42, 16, 16, -210, 94,196,222,204,201,203, 26,234,234,228,142,135, 15, 31, 34, 51, 51, 19,153,153,153,200,202,202,130,151,151, 23,210, 31,220, -135, 84, 34,190,105,228,117,244,106,175, 94,189,160,209,104, 16, 27, 27,203,139,197,226, 87, 19, 18, 18, 34,212,106,181,184,103, -207,158,120,240,224,193,203,173, 21, 88, 12,195,184,155,153,153, 65,163,209,224,228,201,147,197, 74,165,178, 75, 92, 92,220,196, -212,212,212, 79, 60, 60, 60, 44, 30, 60,120,240, 80,175,215,143,138,142,142, 78, 53,194, 29,121,227,223,255,254,247, 97, 65, 16, -218,255,235, 95,255, 98,199,142, 29,107,238,230,230,134,168,168,168,170,234,234,234,143,141, 21, 87, 0,144,158,158, 94,121,229, -202,149,252,110,221,186, 57,186,184,184, 64, 44, 22,175,115,117,117,253,216,220,220,124,227,232,209,163,109, 66, 66, 66,240,227, -143, 63,194,220,220, 28,233,233,233,185,201,201,201,219, 29, 29, 29,119, 26,227,224, 69, 69, 69,165, 3,120, 61, 40, 40,104,227, - 23, 95,124,177,140, 16,242,234,185,115,231,234, 99,239,182,108,217,130,179,103,207,254,208,174, 93,187,217, 33, 33, 33, 51, 91, - 89,245,102,148,210,219,181,247,212,127, 53,248,254, 89,137,205, 50,232,116, 58,216,217,217,161,160,160, 0,249,249,249,104,211, -166, 13, 6, 12, 24, 0,131,193,128,159, 78,159,198,149, 90,177,101,111,111, 15, 75, 75, 75,196,199,199,131, 82,122,167,217,206, - 31,189,190,190, 55, 34, 62, 62, 30,142,142,142, 88,178,100, 9,116, 58, 29,126,248,225, 7,196,197,197,129, 97, 24, 56, 56, 56, -192,194,194,162, 46, 70,235, 14, 76,120,122, 2,171,118,205,172,241, 61,123,246, 20,165,166,166, 34, 53,181,230,154,173,170,170, -226, 68, 44, 78, 60,188,249,211,235,205, 8,128,238,141,230,135,137, 88,189,122,117,159, 25, 51,102,192,205,205, 13,187,111,232, -241, 32,147,135, 94,175, 71,110,110, 46,174, 93,187,198, 15, 24, 48,128,229, 56,174,146,231,249, 49, 89, 89, 89,175, 17, 66,242, -154,229, 12, 9,225, 29,124, 38, 76,218,177,235,155,139, 51,102,204,176, 25, 59,110, 39, 98, 19,111,161, 68,237, 8, 0,112,181, - 55, 71, 80,231,127, 35,191,168, 26,103,127, 59, 85, 74,133,170,201, 52,238,168,161, 57,206,164, 52,250, 93,247, 54,228,210,212, - 57,239,191,227,219,221,115,248,187,243, 94,180,235,228, 62, 78,134,210, 72, 42,179,172,128,212,220, 1,119,210, 10, 53,191, 70, -168,138, 10,203,184,223, 9,143, 47,147, 50,105,122,115,156,141, 81, 92, 92,124, 85,165,202,113,104, 48,107,187,131, 76, 38,191, -218,130,160,106,150,179,110, 58,133, 51,103,206,224,202,149, 43,250,187,119,239, 94, 34,132,156, 84,169, 84, 55,159,148,147, 82, - 90, 1,224,184,133,133,133,160,213,106, 63, 28, 53,106,148, 23, 33, 4,247,238,221,195,133, 11, 23,194, 10, 11, 11, 63,110,137, -179,170,170,106,193, 59,239,188,179,125,232,208,161,195,106, 71, 60, 73, 83, 82, 82, 64, 41, 69, 96, 96, 32,250,246,237,219, 94, -167,211, 9,215,175, 95, 47, 62,125,250,244, 81,173, 86,187,181, 53,233,204,202,202,186, 26, 24, 24, 88,211, 13,173,209, 32, 59, - 59, 27, 28,199, 65,165, 82,181,170, 60, 67, 66, 66,248,160,160,160,151,191,248,238,187,139,111, 79,152, 96,211,123,236, 88,228, - 68, 68, 64,167, 82, 65,202,243,144, 74,228, 48,168, 29, 81,156,163,197,183,183,111,151,235,120,254,181,198,141,195,227,210, 89, - 51,167, 25,169, 31, 45, 72,148,202,154,184,171, 6,163, 8,169, 82, 9, 70,169, 4, 35,145,252,201,193,122, 28,167, 70,163,153, - 60,103,206,156,200, 95,127,253,213,250,181,215, 94,195,216,177, 99,227,203,203,203, 71, 22, 22, 22, 26,213,183,253, 56, 78,134, - 97, 10,158,127,254,121,135,234,234,106,238,213, 87, 95, 21, 21, 22, 22,194,219,219, 27, 0, 80, 81, 81,129,223,126,251, 13,157, - 59,215,132,161,220,190,125, 27,221,186,117,107,146, 51, 62, 62,254,199,253,251,247,207,155, 56,113,162,132,231,121,190, 54, 40, -158, 56, 59, 59,179, 81, 81, 81,194, 47,191,252, 2,141, 70, 3,119,119,119,166, 77,155, 54, 36, 42, 42, 74,184,127,255,126, 36, - 33,100,165, 49,245, 78, 41,125, 68, 92,137, 68, 34, 84, 85, 85, 25, 37,174,154, 59,151, 40, 40,117, 80,147, 53,175, 47,153, 20, -116,254,104,164,210,220,220,188, 62,230,167, 99,199,142, 16,137, 69,216,251,211, 54,117, 89, 69,209,218,150, 56,131,131,131,101, - 98,177,120,172,175,175, 47,162,163,163,161,211,233, 46,159, 63,127,254,206,144, 33, 67,206,199,199,199,143,242,246,246, 6,195, - 48,207, 7, 7, 7,155,135,133,133,169,141, 77, 39,165, 52, 45, 59, 59, 27,158,158,158,176,182,182,182, 52, 24, 12, 92, 92, 92, -220,247, 61,122,244, 56,145,154,154,234, 41,147,201, 30, 68, 71, 71, 87, 26,147,247,152,152,152, 44, 0,253,131,131,131, 69,183, -110,221,122, 48, 96,192, 0, 72,165, 82,120,121,121, 41,239,221,187,247, 26,154,153, 58,162, 49, 39,165, 84,112,115,115,219,113, -227,198,141,181,190,190,190,120,245,213, 87,159,139,142,142,126,206,199,199, 7, 29, 58,116, 64,120,120, 56,194,194,194,142, 10, -130,240,118,110,110,174,182,185, 7,190,166,242, 94, 27,180,254,134,191,191,255, 75, 34,145, 8, 22, 22, 22,108, 78, 78, 14,123, -238,220, 57, 80, 74,223,106,110,208, 64, 75,247,186,198, 48, 38,230,170,181,156, 79,114,109, 50, 12,243,209,244,233,211,191,154, - 59,119,174,188, 87,175, 94, 40, 43, 43,171, 23,253,191,254,250, 43, 4, 65,128,157,157, 29,236,236,236,112,247,238, 93,156, 56, -113, 66, 87, 90, 90,186, 67, 46,151,127,214, 28,231,180,105,211, 30,225,172, 19,111,167, 78,157,170, 31, 68, 98,103,103,135,212, -212, 84, 28, 63,126, 92, 91, 90, 90,186,141,227,184,173,127,103,222,255,231, 4, 86,105,105,233,123, 43, 86,172, 24, 52,107,214, - 44, 91,141, 70,195,218,219,219, 67,165, 82,113,231,206,157, 43,169,172,172,124,175, 53, 7, 99, 89,118,164, 74,165,154,178,104, -209,162,181, 94, 94, 94,182,175,191,254, 58, 22, 44,232, 12,157, 78, 7,153, 76, 6,137, 68,242,245,169, 83,167, 38, 90, 91, 91, -231,156, 60,121, 50, 11,192,102, 99,120, 11,226,143,221,115,246, 29, 55,252,171,175,118, 30,246, 11, 12,242,104,231,233, 41,235, -239, 97, 5,189,129,199,195,252, 34, 92,186,150, 84,157,146, 24,151, 13, 78, 59,245,225,173,147, 73,198,112,222,170, 17, 76,239, -244,236, 72,124, 94,157,191,101,209,128, 94, 29,122,191,245,106,160, 77,185, 80, 70, 79,252,114,183, 56, 45,171,242,134,136,197, - 23,183,211,105,252,147, 20,188, 86,171,213, 55,238, 9,210,106,181,250, 86,218,170,165,132,144, 79, 24,134, 44, 3, 5, 35,149, - 74, 35,119,238,220,121, 0, 64, 14,165, 52, 82,165, 82,105,158,214,137, 82, 81, 81,241, 19, 33, 36,246,222,189,123,139, 25,134, -177,230,121, 62,233,225,195,135, 63, 80, 74, 91,154, 37, 28,181,147, 93,190,232,238,238, 62,240,234,213,171,155, 71,143, 30,221, -253,133, 23, 94, 64, 94, 94, 30, 68, 34, 17,226,227,227,117,167, 79,159,142, 44, 45, 45,253,136, 82, 26,213,218,180,213, 58, 88, -152, 55,111, 30, 42, 42, 42,112,244,232, 81,156, 61,123,182,213, 14, 86,221, 13, 60, 40, 40,104,248,250,125,251,142, 60,223,185, -115,155,206, 29, 58, 72,218,118,235, 6,133,153, 25,202,138,138, 16,159,145,203,127,159,156,156,174,225,184,169, 49, 49, 49, 70, -157, 75, 6,131, 1, 54, 54, 54,160,148, 66,188,124, 57, 64, 8, 40, 33,168,174,157,197,155,227, 56,136,251,244, 1,101, 89,148, -107, 52,208,235,245,144,203,229,205,114,230,228,228,228,120,120,120,188,246,214, 91,111,253,122,224,192, 1, 38, 56, 56,184,231, - 47,191,252, 66,255, 74, 29,103,103,103,123, 1,128,171,171,235, 67, 75, 75, 75,209,235,175,191, 14,131,193,128,170,170, 42,148, -151,151,163,168,168, 72,183,104,209, 34, 41, 0, 72,165, 82,195,200,145, 35,155,188,127,168, 84,170, 21, 30, 30, 30,103,190,250, -234,171,229,179,102,205, 10,154, 56,113,162,152,101, 89, 33, 39, 39,135, 59,114,228, 8,233,212,169, 19, 35,147,201, 72, 68, 68, -132,112,251,246,237,235,148,210,143,115,114,114,140, 94,105,160,206, 85, 23, 4,161,126,254,170,230, 70,153,181, 6, 5, 55,105, -188,103, 95,235, 79, 7, 79, 10,252,247,250,165,159,155,219, 59,216,131,227, 56,164,101,222,199,119, 39,182,171,203,171, 75, 63, - 41,188,213,242, 26,156, 82,169, 84, 97,107,107,171,148,203,229,136,138,138, 2,128,163,181, 13,211,127, 98, 99, 99, 71,117,238, -220, 25,214,214,214,138,130,130, 2, 47, 0,113,173, 72,226,125,149, 74, 5,131,193, 0, 7, 7, 7, 81, 74, 74, 74, 27, 0,105, - 9, 9, 9, 85, 0,110, 63, 73,158,195,194,194,184,254,253,251,223,189,117,235, 86, 96,187,118,237, 72,100,100,164, 90,171,213, - 30,105, 45,143,147,147,211, 87,167, 78,157,234, 71, 41, 29,230,231,231,135,182,109,219,214,185,246,184,124,249,114, 72, 78, 78, -206,156,167,180,184, 51, 37,132,160,162,162,130,173, 45, 83,189, 82,169,124, 82,222,170, 6,206, 85,213,179,214, 72,103,103,103, - 31,113,118,118, 62,191,122,245,234, 21, 94, 94, 94,111,204,153, 51,135,245,246,246, 70, 89, 89, 25, 44, 45, 45,225,226,226,130, -156,156, 28, 28, 56,112,128, 47, 40, 40, 56,200,178,236,198,220,198, 35, 84, 90,193,105, 99, 99, 3, 23, 23, 23,100,103,103,227, -192,129, 3,124,126,126,254,119, 60,207,111,202,207,207,207,135, 9,173, 19,203,198,244, 26,213, 78,211,240, 41,207,243,131,234, - 92,173,210,210,210,247, 90, 90,223,174, 41,133, 27, 28, 28, 44, 82, 40, 20, 83, 10, 11, 11,215,186,187,187,219,190,254,250,235, - 88,181,106, 21, 18, 18, 18,204,198,143, 31,111, 43, 18,137,184,144,144,144,242,214, 62, 49,212, 45,246, 12,145,100, 20,168,208, - 29, 0, 1,195,182,184,216,179, 49, 74,188, 71, 7, 50,152,167,152, 93,243, 7,236, 73,188, 79,195,254,234,147, 77,195,197,153, - 41, 69,139, 11, 59, 55,197,249,184, 32,247, 39,125, 90,250, 59,158,192, 26,253, 70, 92, 92, 92, 38, 73,165,210,175, 38, 77,154, -100,190,127,255,126,109,126,126,254, 34, 0, 71,155, 91, 51,176,165,116,186,186,186, 86,181,109,219, 22,182,182,182, 40, 46, 46, -198,131, 7, 15,160, 82,169,204,158, 52,157, 13, 23,123, 70,237, 98,207,212,136,197,158, 27,115,246,238,221, 59,195, 96, 48,180, -106,241, 85,177, 88, 92, 36,147,201,218,215, 29,163,185,116,186,185,185, 77,114,119,119, 95,151,147,147,243,115,118,118,246,178, -167, 81, 71,110,110,110,189, 9, 33, 39, 4, 65,144, 55,118,184,234, 68,152,139,139, 75, 27,169, 84,250, 72,144,123, 83,156, 30, - 30, 30, 3,228,114,249,138, 41, 83,166,244, 26, 59,118, 44, 19, 25, 25,137,203,151, 47,243,145,145,145, 55, 12, 6,195,230,172, -172,172, 43,173, 73,231,164, 73,147, 18,244,122,125, 91, 35,203,178,128, 16,242,200,194,217,198,158,243,246,190,196,223, 74, 97, -247,161, 78,111,232,193, 16, 80,177, 88,156, 80, 86, 81,180,246,113,226,234,113,156,181,211, 51,252,100, 99, 99, 51,180,164,164, -228, 22,199,113,193, 97, 97, 97,213,254,254,254, 98,107,107,235,195,150,150,150,207,151,151,151, 95,237,215,175,223,168,213,171, - 87, 11,198,214, 81, 80, 80, 80,151,246,237,219, 71,173, 88,177,130,172, 91,183, 14, 89, 89, 89,254,215,175, 95, 79,254,171,245, -222,187,119,239,182, 44,203,238,227,121,190, 61, 33,100,255,245,235,215, 63, 50, 70, 12, 53,230,236,214,173,155,164,172,172,108, -190,187,187,251,219, 78, 78, 78,142, 15, 31, 62,204,204,202,202,250, 44, 55, 55,119,191,177,226,202,152, 58,242,247,247, 47, 1, - 32, 5, 0, 99,226,173,254,127,223,235,254, 14, 78, 15, 15,143,246, 28,199,173,246,245,245, 29, 63,115,230, 76,146,148,148,132, -208,208, 80,164,167,167,255,194, 48,204,234,236,236,236,123, 79,131,243,220,185,115, 52, 61, 61,253,184, 72, 36, 90,155,149,149, -149,246,255, 43,239,255,147, 2,235,239, 58,249,234,132, 86, 73, 73,201, 42,165, 82,121, 55, 52, 52,244,249,103,237,132,254,187, - 57, 9, 33,142,181,110, 84,254,255, 82,222, 9, 33, 34,185, 92, 30,160,213,106,239, 80, 74,203,159, 18,231, 42, 0, 43, 1,108, -164,148,110,248, 95, 59,151,158,117,206, 90,161,181,136, 82,138,234,234,234, 47,154, 19, 86,255,164,188, 15, 29, 58,212,227,252, -249,243, 89,141,239,125,114,185,220, 90,171,213,150,134, 61,193,131, 95, 64, 64,192, 71, 44,203, 78,226, 56,238,104, 76, 76,204, -186,103, 49,239,132, 16,210,182,109, 91,105,115,147,220,154,174,163, 39,227,116,113,113,241, 3,176, 28,168, 89, 70, 41, 43, 43, - 43,250,105,113, 18, 66,120, 0, 31,171, 84,170,248,255,223,121,255,167, 65,244,223, 60,120,237,141,101, 63, 90,177, 24,239, 63, - 13,198, 8,171,127,104,190, 57, 0,215,159, 50,231, 6, 0, 27, 76,151,245,179,137, 90, 65,117,229,127, 45,223,141,197, 85,131, -123, 95,225,147,114, 70, 71, 71,127, 4,224,163,103,252, 26,167, 0,170, 77,103,254,211, 71,110,110,110, 44,128,137,207, 58,231, -255, 58, 24, 83, 17,152, 96,130, 9, 38,152, 96,130, 9, 38, 60, 93, 16, 0,221,155,120,250, 48,218,250, 35,132,116,111,237,129, -141,232,238, 49,113,154, 56, 77,156, 38, 78, 19,167,137,211,196,249, 15,227,108,137,251,159,210,245,248, 95,141,193, 50,113,154, - 56, 77,156, 38, 78, 19,167,137,211,196,105,226,252, 39,194,212, 69,104,130, 9, 38,152, 96,130, 9, 38,152,240,148, 97,116,144, -123,143,142,196,141, 55, 96, 12, 88,140, 4, 0,240, 56,195,138,113, 50,225, 30,205,121,210,131, 59, 59, 59,119, 33,132, 76,101, - 24,102, 34, 0, 65, 16,132, 16, 66,200,247, 42,149, 42,245, 73, 57,131,130,130,186,112, 28,247, 10, 33,228, 69, 0,160,148,254, - 36, 18,137,254, 19, 25, 25,105,212, 12,180, 10,133, 34, 67,171,213, 58, 0,128, 92, 46, 47,208,106,181,158,168,157,117,124,226, -196,137,164,176,176,144, 0,192,165, 75,151,234,214,218,164, 45,205,144, 46,147,201, 50,116, 58,221,159,134,234,139,197, 98,189, -181,181,117,169,157,157, 93,169,131,131, 67,137, 68, 34,185, 93, 88, 88,120, 41, 62, 62, 62,154, 82,154,215,154,124, 15, 26, 52, -232, 3,153, 76,182, 80,167,211,237, 14, 11, 11,251,224,239, 62,113, 8, 33,129, 30,174,206,187, 13, 6,189,144, 87, 80,252, 17, -165,244, 84,107,254,223,177, 99, 71,169,155,155, 27,105, 60,180,250,139,185,196,153, 50, 96, 22,239,106,121,126,173, 22,210,231, - 39, 22,139,231, 57, 57, 57, 13,207,206,206,142, 5,176,202, 52, 11,177, 9, 38,152, 96,130, 9,207,132,192,242,247, 39, 10,109, - 57,134, 66,192,152, 78,158, 78, 65,139,231, 77,180, 11,232, 51,194,172,170, 74, 79, 47, 95, 56, 21,248,237,225,147, 11,254,213, -158,220,224, 9, 78, 42,172, 16, 26, 19, 67,155,156,216,242,203,119, 69, 25, 60,207, 59, 0,128, 0,145,250,243, 16,135,123,129, -129,129, 62, 75,151, 46, 69, 80, 80, 16, 4, 65,192,165, 75,151, 22,127,254,249,231,139, 93, 92, 92,162, 89,150, 61, 36,145, 72, -126, 76, 75, 75,107,113, 8,127, 96, 96,160,187, 32, 8, 19, 1,188,220,187,119,239,110,111,190,249, 38,188,188,188, 80, 93, 93, -141,200,200,200,165,135, 14, 29, 90,234,239,239,159, 8,224, 7,134, 97,126,140,138,138,202,110,138, 75,171,213, 58,212,233, 37, - 66,136,195,156, 57,115,212, 6,131, 1, 58,157, 14, 6,131, 1, 74,165, 50, 81,171,213,222,236,223,191,127,180,133,133,197,181, -211,167, 79,223, 5,192,119,117, 82,244,106,235,110, 63,242,215,232,204,143, 26,115,234,116, 58, 7,109,100, 36,192,243,224, 30, - 60,128,118,232, 80,212,174, 27, 39, 97, 71,141,114,228, 24,198,145, 84, 86,222,215,126,255,253,174,206,157, 59,215,207, 99,210, - 28,103, 35, 49, 65,230,205,155,183,116,249,242,229,226,201,147, 39,191, 30, 28, 28,188,166,169,161,223,198,114,182,112, 60, 89, -239,128,158,191,157, 60,118, 84, 14, 66, 48,126,252,196,125,132,144,217,148,210,159, 26,239,235,235,235, 59, 68, 34,145,124,196, -113, 92,172, 72, 36,250, 32, 50, 50,178, 34, 32, 32,224,152,189,189,253, 72,157, 78, 7, 63, 63,191,136,216,216,216,161, 0,176, -235, 13,178, 70, 10, 44, 6, 15,178,251, 13,178, 99,238,183,116,249, 19,166,111,206,140, 25, 51, 62,219,176, 97, 3, 91, 59, 9, -223,176,174, 93,187,122, 17, 66, 2, 40,165, 26,211,101,111,130, 9, 38,152, 96,194,127, 77, 96,117,233, 64, 94, 49,147, 73,150, - 44,159,255,130,243,168,145,163, 45,108,221,253, 68, 32,108,141, 35, 99, 9, 50,126,234, 82,243,113,147,223, 49, 79, 79, 12,119, - 59,253,235,169, 97,223,159,184,144,219,165, 3,217,122,231, 62,253,207,227,248,120,158,119, 88, 50,235, 77, 0,192,214,189,187, -204,147,147,147,125,148, 74,229, 35,203,130,140, 24, 49, 2,195,134, 13, 67,102,102,102,192,177, 99,199, 2,246,237,219,247,137, -187,187,251,234,236,236,236,109, 77,139, 64,255,117,110,110,110,139,151, 46, 93, 74, 2, 2, 2, 32,147,201,234,127, 51, 55, 55, -199,144, 33, 67, 48,100,200, 16,228,229,229,117, 11, 11, 11,235,118,248,240,225,181,254,254,254,159,199,196,196, 24,229,242,188, -246,218,107, 40, 42, 42, 66, 81, 81, 17,202,203,203,115,213,106,117,129, 86,171,205,149,203,229,169,131, 7, 15,190, 7,128,247, -118,181,232,228, 96,111,119,108,211,250,181, 64, 51, 67,167, 85,125,251, 2, 0, 52,183,254,232,182, 54,163,148, 66, 34, 73, 17, -229,230,254,220, 80, 92, 25,203, 89, 43, 48,109,210,210,210, 4,137, 68,130,206,157, 59,139, 83, 82, 82, 50,130,131,131,191, 13, - 11, 11, 91,211,112,191,214,112,182,128,128,143,222, 91, 32, 41,188, 31,135, 59,215,206, 97,156,191,187, 60,246,118,202,106, 0, -127, 18, 88, 44,203, 46,255,245,215, 95,125,110,220,184,225,179,122,245,234,142,254,254,254, 99, 1, 12, 62,115,230, 12,196, 98, - 49,134, 12, 25,210, 39, 56, 56,216, 78,194, 21,140, 25,235, 69,150,206, 95, 60,143, 0,192,158,237,123,222,218,185,128,236,152, -191,131,102,183, 66, 88, 73, 88,150,253,252,192,129, 3, 51,166, 77,155,134, 7, 15, 30,224,234,213,171, 80, 42,149, 88,183,110, - 93,219,165, 75,151,174, 1,240,158,233,178, 55,193, 4, 19, 76, 48,225,191, 38,176, 88,138,247, 34,111, 36,118, 98,184, 34, 66, -196,150,143,221,135, 97, 68,232,208,125,144,104,158,231,191,172, 71, 13, 27,110,249,210,140,197,239, 1,248,143, 49, 7,182,176, -176,104,130,147, 65,187,118,237,240,238,187,239,194,199,199, 71, 58,125,250,244,247, 1,108,107,134,106,113, 72, 72, 8, 97, 89, - 22, 44,203, 54,185,147,179,179, 51,134, 13, 27, 6,103,103,103,242,222,123,239, 45, 6,240, 88,129, 37,151,203, 11, 8, 33, 14, - 0, 96,107,107,139, 93,187,118,193, 96, 48, 8, 85, 85, 85,183,170,170,170,226,245,122,125,148, 76, 38,187,126,249,242,229,123, - 0,208,201, 93,225,106, 38, 53, 59,185,103,215, 54, 24, 42, 30,218, 52,117,124, 62,251,207, 58,129, 82, 90,198, 40, 20, 15,196, -233,233,199, 36,101,101, 49,117,223, 27,203, 9, 0,253,251,247,183, 54, 55, 55,191,180,115,231, 78,177, 68, 34,193,236,217,179, -205, 85, 42, 21, 62,253,244,211,249, 0,214, 60, 9,103, 51, 2,198,106, 64,223,128,228,175, 54,127,104,225, 23,212, 31,215,127, -220,137,210, 82, 53, 42, 43,170,192, 11, 84,246,184,255, 80, 74,139,239,221,187,135, 81,163, 70, 33, 55, 55,119,224,238,221,187, -119, 11,130, 64,212,106,117,253, 66,173, 74,165,242,238,160,190,193, 82,230,254,218, 39, 62,145, 9, 33, 14,150,150,150, 63,156, - 61,123, 54, 48, 48, 48, 16,215,175, 95,199,253,251,247,177, 96,193, 2,221,130, 5, 11, 36,211,167, 79, 39, 75,150, 44,121,147, - 16,242, 19,165, 52,194,116,233,155, 96,130, 9, 38,152,240, 95, 17, 88, 0, 88,214,172, 35,209, 93,124, 73, 96,237, 7, 17,214, -101, 52, 33,114,215, 71,118, 80, 23,101, 32, 57,226, 0,205, 72,248,133,182,241,153, 74, 0,176,141, 26,215, 63, 22,151,100,217, -194,173,123,119,217, 3,128, 84, 97,135,144,144, 16, 12, 29, 58, 20,199,190,234,134,202,178,154,101,147,148, 86, 46,152,240,118, - 34,146,147,147, 17, 30, 30, 94,183,208,172,184, 41,206,186,182, 21,209,209, 40,232,215, 15,210,226, 98,152,153,153, 65, 42,149, - 62,178, 67, 74, 74, 10, 46, 95,190,140, 7, 15, 30,160, 67,135, 14, 53,255,105,130, 83,163,209,180,155, 54,109, 90,225,212,169, - 83, 21,251,247,239, 71, 90, 90,154,115,100,100,100,197,227, 10,200,167,157,181,149, 68,144,156,220,187,235,115, 49,244,106,155, -228,168,112,252,107,212,220,199,166, 83, 59,104, 80,189,115,165, 8, 10, 2,227,233,169, 39, 18, 73,106,241,158, 61,195,253,252, -252, 12,173,229, 28, 48, 96,192, 74,158,231,223, 18, 4, 65,182,119,239, 94,177,189,189, 61,179,117,235, 86,195,185,115,231,120, - 74, 41, 35,145, 72,118, 62, 73, 58,155,131, 88, 36,250,240,179,213,239, 89,152, 49, 6,196,254,250, 61,178, 31,100,226,230,221, - 28,195,127,174, 38,241, 58, 3, 55,239,113,229, 41, 18,137,222, 94,177, 98,133,239,222,189,123, 93,222,120,227, 13, 72, 36,146, -151,139,138,138,112,244,232, 81,152,153,153, 97,215,174, 93,104,215,174,157,148,231,121,196,157, 42,194,174, 47,119, 0,148, 66, -107,144, 28, 89,114,128,203,110,166,222, 27,138,171,110,109,219,182, 61,121,241,226, 69, 71, 55, 55, 55,132,133,133, 33, 47, 47, - 15, 46, 46, 46, 88,176, 96,129,116,243,230,205,135,203,203,203,199,111,216,176, 65,158,144,144,176,159, 16,210,137,214,224,169, -143,128, 49,113,154, 56, 77,156, 38, 78, 19,231,223,130, 64, 0, 14, 0, 10, 0, 68, 53,218, 70,237,103, 60,102,187,176,182,205, -183,107,192, 85,136,154, 24,106, 7, 0, 60,128, 27, 0, 74,254, 22,129, 69, 8, 25, 4, 32, 12,192, 26, 74,233, 71,143,236, 33, - 24,192,231,159,167,124,254,239,148,177, 9, 32,172,203, 56, 82, 82,166,197,157,136,239,104,110,242, 69,138,218,120, 37,189,174, -162,217, 3,125,121,220,221, 91, 42,149, 22,223,185,115, 7,191,255,254, 59, 0,224,248,241,227,168, 44,203, 69,131,174, 67,124, -246,217,103,224, 56, 14, 12,195, 64,175, 55,110,237, 99, 90, 93, 19, 39,173,211,233,160,211,233, 64,122,245,130,120,224, 64,220, - 91,176, 0,231,207,159, 71, 65, 65, 1, 36, 18, 9, 36, 18,137, 81, 11,194,114, 28, 71,242,243,243,161,213,106, 5,174,137, 63, -184,187, 19,185, 5,103,118,108,219,231, 27, 44, 44,148,102,142,209,231,126,194,131, 7, 77,199,165, 27, 12,134, 63, 92,186, 14, - 29, 52, 16,137, 98,197,113,113,255,105, 40,174, 90,195,201,243,252, 59, 71,142, 28, 49, 47, 41, 41,129, 68, 34,193,199, 31,127, -108,184,114,229,138,138,227,184,129, 49, 49, 49, 69, 79,154,206,230, 96,239,224,112,230,165, 41,115,231,174,159, 53, 12, 26,181, - 22, 39,174, 36,226,247,132,244, 73, 0, 34, 40,165,234,199,253, 39, 50, 50, 50, 63, 40, 40,232,165, 69,139, 22, 93,216,183,111, -159, 98,202,148, 41,224,121,190,254, 85, 85, 85,133,139, 23, 47,226,202,149, 43,136,137,185,153, 45,161,157,127,119, 54,171,248, -225,251,179,198, 45,210, 76, 8,113,241,244,244, 60, 29, 25, 25,105,111,102,102,134,208,208, 80,148,150,150, 98,254,252,249,245, -206, 85,105,105,233,196, 93,187,118, 77,206,200,200,216, 24, 30, 30, 94, 92,251, 32,192,193, 4, 19, 76, 48,193,132,255, 58,154, -213, 32,127,192,129, 16,114,138, 82, 58, 26,192, 80, 0,210, 6,219, 32,132,156,170, 21,126,143,108, 47, 95,190,124,229,166, 77, -155,110,215,109,215,237,179, 98,197,138,127,109,222,188,121, 99,159, 62,125,142, 94,187,118, 45,237,111, 19, 88, 0,194, 40,165, -164, 5, 25, 3,161, 36,138, 10, 37, 81,244,247,179, 41,127, 22, 37,213,101,173, 62,184,135,135, 7, 18,147,254, 36,110,234, 63, - 27, 43,176,208,175, 31,144,155, 11,184,184,212,164, 52, 55, 23,122, 0, 95,175, 88, 1,169, 84, 90,223, 21, 85, 43, 76, 90,164, -211,233,116,164,160,160,128,106,181,218,132,234,234,106,238, 49, 39, 3,233,232,100,249,253,234,229, 11,218,120,118,240,114,137, - 60,253, 3,210,210,114,240,240,225,227,235, 71,169, 84, 86, 26, 12, 6,101,109,197,198, 19,134, 41, 82,196,197,253, 8, 32,241, - 73, 57, 9, 33,103,166, 76,153, 50, 58, 40, 40,136,116,233,210, 69,122,225,194, 5,142,231,249, 71,196, 85,107, 57,155,131,171, -171,235,208,231,159,127,254,248,156, 57,115, 48,110,228, 80, 76, 30,208,141,102,231,151,106, 0, 92,104,110,145,230, 90,145,117, -203,223,223,127,242,196,137, 19,191,108,223,190,189, 7, 0,248,248,248, 96,242,228,201,248,226,139, 47, 16, 26, 26,186, 31,192, -222,152,152,152,184, 86, 94,148,102, 54, 54, 54, 63, 95,184,112,193,222,204,204, 12,231,206,157, 67, 85, 85,213,159,156,171,141, - 27, 55,202, 51, 50, 50,182,158, 61,123,182, 11, 0,166,118,153, 30, 19, 76, 48,193, 4, 19,158, 13, 24,161, 65,234,239,251,167, - 40,165,163, 27, 10,166,198, 66,171,238,115,221,126,155, 54,109, 26,221, 80,124, 1,192,230,205,155, 55, 54,216,174,250, 59, 50, - 85, 39,176,130, 9, 33, 20, 64, 48,165,244,210,147, 16, 25, 81,218, 8,242, 0, 0, 32, 0, 73, 68, 65, 84,170, 43,158,104,198, - 82,169,194, 14, 91,247,238,170, 41, 36,209,163,113, 89, 70, 59, 88,173,152, 44,213, 24, 7, 75,175,215, 11, 37, 37, 37, 25,106, -181, 58, 38, 41, 41,233, 79,226,193,205,205,109, 83,159,254,189,251,122,245,236,165,136, 60,115, 28,119, 83, 31,160,176,176, 12, -160, 84,251, 56, 62, 91, 91,219, 34,230,205, 55,149,102,185,185,165,140, 32,228,180, 77, 72,120,229,175,114,134,135,135,207, 8, - 10, 10,242,187,118,237, 90,168,165,165, 37, 0,208,134,226,234, 73, 56, 31, 35,170,250,136, 68,162, 95, 24,134, 81,140, 24, 49, - 2,111,191,253, 54,190,248,226, 11,142, 74, 20, 19,118,253, 22,253, 82,101,181,238,163,150,196, 85, 29, 98, 98, 98, 66, 39, 77, -154,212, 45, 62, 62,222,149, 82, 58,210,198,198,102,171,193, 96,128, 32, 8,160,148,158,228, 56, 46, 53, 32, 32,224,136,131,131, -195,144,252,252,252, 35, 49, 49, 49,139, 90,184,200, 24,137, 68,178,255,252,249,243, 93, 93, 93, 93, 17, 26, 26,138,170,170,170, -122,231,106,198,140, 25,143, 56, 87,215,174, 93, 43, 54,137, 43, 19, 76, 48,193,132,103, 18, 70,107,144, 58,209,212, 88,100,181, - 70,156, 1,208, 44, 95,190,124, 37, 33,228, 84,173,195,165, 1,160,122,218,153, 98,106, 19,124,169, 86, 61,134, 61,154, 19,227, -219, 34,189,174,252,137, 18,208,113,224, 97,248,141,187,132, 52,253,124, 60,100,230, 53,118,146,140, 19, 88,199,143,215,184, 87, -185,185,127, 56, 89,181,110,214,147, 8,172,202,202,202, 91,197,197,197, 9,101,101,101,215, 1, 8,141, 92,183,121, 61,123,246, -156,177,103,255, 33,139,147,103, 46, 86,197, 68,221, 86, 63,204, 47, 69,149,222,160, 79,200,124,184,243,113,124,142,142,142, 37, - 20, 40, 22, 25, 12,231,165,183,110,253,248, 24, 39,175,213,156,181,206, 80, 44,128, 83,103,206,156,185,203,178,236, 87, 79,131, -179,161,184,178,179,179,251,249,208,161, 67,138, 99,199,142, 97,230,204,153,248,228,147, 79,112,230,204,153, 9, 42,149,234,124, -133,182,122, 30,165,244,161,177,245,252,197, 92,226, 60,200,254, 71, 23,145, 72,100,101,103,103,183,118,234,212,169,224, 56, 14, -131, 7, 15,134,131,131,195, 81,137, 68,114,105,214,172, 89, 99,183,108,217, 98,230,233,233, 57,219,223,223,223,185, 5,202,245, -135, 15, 31, 30,229,227,227,131,240,240,112,148,149,149,193,197,197, 5,111,189,245,150,116,243,230,205, 71,190,250,234, 43,237, -166, 77,155, 36,195,134, 13,219,122,246,236, 89,223,170,170,170,225, 38,113,101,130, 9, 38,152,240,236,161, 73, 13,210,140,200, -122,194,227,212,253, 79,188,105,211,166,219,148,210,209,155, 55,111,222, 8, 64,241,183, 57, 88,181,202, 17, 0,130, 31,213, 87, -149,198, 59, 88,218,230, 5,214, 59, 47,101,167, 8, 60,143, 47,150,178,144, 42,236,208,113,224,225, 22, 93,169,214,198, 96, 61, - 70,173,254,105,219, 24,129, 85, 85, 85, 21,147,159,159,127, 63, 61, 61,253, 74,195, 73, 68, 61, 60, 60,198, 56, 57, 57,173, 59, -124,248,176, 66,165, 82,193,189, 83,119,203, 93, 63,254,167,218,201, 76,166,205, 42, 45,158,115, 51,187,242,196,227,248,228,114, -249, 29,154,145,145, 36, 77, 78, 62, 75,128,219,141,132,208, 19,113,214, 33, 34, 34, 98,198, 99, 4,219, 95,226,116,117,117,237, - 99,111,111,255,243,246,237,219,205, 84, 42, 21, 36, 18, 9,148, 74, 37, 46, 92,184, 0,149, 74,117,190,181, 39,217,206,217,100, -149, 84,192,191,193,131,233,231,145, 83,253,202,191,183, 43,108,109,109, 17, 23, 23,135,174, 93,187, 98,203,150, 45,210,148,148, -148, 46,157, 59,119, 70,106,106, 42,114,115,115,239,196,196,196,228, 53,243, 20, 50,118,206,156, 57,239, 76,152, 48, 1, 55,110, -220, 64,110,110, 46,222,124,243, 77,221, 91,111,189, 37,153, 62,125, 58, 41, 43, 43,155,184,115,231,206,201,233,233,233, 38,231, -202, 4, 19, 76, 48,225, 25, 71, 83, 26,164, 25,156, 6,240, 66, 99, 87,171,177,248,170,115,168, 26,110, 55,222,191,246,119,237, -223,145, 47, 81,237,193,200,159, 5, 14, 4, 65, 95, 68, 25,247, 41, 68,200, 61, 78,193, 55,113,124,150,133, 72,170,132,166,170, - 66,160,244, 81,183,167, 33, 4,158,183,111, 24,204,206,178,108,147,241, 80, 44,203,194,202,202, 10, 21, 21, 21, 0, 96,104, 33, - 15,188, 97,194, 4, 86,250,226,139,208, 59, 59,131,234,245, 53, 46, 22, 0,172, 92,249,200,142, 18,137,164,206, 21,107,182, 91, -171,188,188,252, 70, 76, 76,204, 53, 74,105, 62, 0, 12, 26, 52,104, 7,207,243, 99,204,205,205,173,103,207,158,173, 47, 44, 44, -196,137, 19, 39,240,221,119,223,105,212,122, 54,182, 84,199,189,113, 47,167,178,201, 25,237, 11, 11, 11,127,247,184,115,231, 88, -195,239,254, 42,231,227,240, 52, 56, 93, 93, 93,251, 56, 58, 58,214,139, 43,153, 76, 6,165, 82,137,156,156, 28,136, 68,162, 86, - 79,210,121,100, 62,177, 6,197,187,115,223,153,203, 48, 12,195,236,217,241,141,194,218,140,226,224,193,131, 8, 9, 9, 73,238, -222,189,123,231, 89,179,102,193,219,219, 27,201,201,201,248,252,243,207, 85,122,189,254,229,102, 79, 90,145,104,198,186,117,235, -168, 74,165, 34,247,239,223,175,119,174, 54,109,218, 84, 31,115,149,150,150,102,138,185, 50,193, 4, 19, 76,248,191,225, 96, 25, - 19,127, 85, 88, 43,158, 30, 62,102,155,109, 32,172, 26,111,231, 55,218, 6, 0, 93,163,223,227,255, 54,129,245,216, 12, 19,108, -159, 52,126,200,226, 15,223,155,235,212,197,123,185,156,230,255, 6, 90, 22, 67, 81, 23,114, 67, 24, 72,149,246,128, 72, 70,163, -147, 10, 43, 47, 38,104, 10, 41,193,118, 99, 15,220,165, 75, 23,228,229,229,161,184,184,184,254, 59,134, 97, 96,107,107, 11,185, - 92,142,232,232,104,132,135,135, 27, 0,172,107,161, 98, 54, 79,159, 62,125,197,252,249,243,153, 94, 51,103, 66,127,229,202, 35, -195,195, 8, 33,144,203,229, 80, 40, 20,200,201,201, 65, 74, 74,138, 64, 41,221,220, 28,231,189,123,247,194, 41,165, 5, 0, 16, - 28, 28, 60,197,214,214,118,210,204,153, 51, 21, 55,110,220,192,250,245,235, 69,161,161,161,250,168,168, 40, 78, 16,132, 21,217, -217,170,111, 91,202,107, 82, 82, 82, 84,195,237,167,193,217, 24, 79,131,211,205,205,173,183,171,171,235,207, 95,126,249,165, 89, - 94, 94, 30,100, 50, 25, 44, 44, 44,144,153,153,137,117,235,214,169, 57,142,123,241,105,156,116, 90,173, 22,199,142, 29,203,109, -223,190,125,175,155, 55,111, 14, 94,182,108,217,142,182,109,219,186,102,102,102,102,240, 60,255, 66, 84, 84,212,131,230,254,111, -109,109, 29,228,224,224, 64, 34, 34, 34,240,230,155,111,234, 22, 46, 92,104,114,174, 76, 48,193, 4, 19,254,217,184,209,194,246, - 51,135, 38, 23,123, 78, 74,163,223,221, 75,201, 26, 59,101,206,170, 35,111,188,181, 34, 39,181,208,174,154, 56,141, 35, 68,230, - 10,153,165, 11, 44, 93,186, 35,189, 64,164,217,118, 76,149,125, 42, 82,243,163,166, 18,227,147,210,232,119,141,108,191,238, 13, - 92,169,130,173,123,119, 97,235,222, 93,224, 4,177,238,245,215, 95, 71, 97, 97, 33,210,174, 78, 69,236,207,131,208, 94,178, 19, -206,116, 55, 10, 10, 10,240,245,215, 95,211,208,208,208,227, 6,131,193, 87,165, 82,109,111,138, 19, 0, 98, 99, 99, 55,230,228, -228,244, 89,185,114,101,232,252,138, 10,220,217,185, 19,210,233,211,193,244,232, 1, 51, 51, 51,216,219,219, 67,173, 86,227,210, -165, 75,184,121,243,102,104,117,117,117,159,216,216,216,141,205,113,214,137,171,126,253,250, 41, 75, 75, 75, 63,155, 62,125,186, - 66,173, 86,163,176,176, 16,133,133,133,136,140,140,188,160,211,233, 2,179,179,179,155, 20, 45, 13, 57, 41,165, 89,117,159,159, - 22,103, 67, 60, 45, 78, 51, 51,179, 69, 39, 78,156, 48, 99, 24, 6, 50,153, 12, 86, 86, 86,200,202,202,194,218,181,107,213, 26, -141,230, 69,149, 74,101,212, 4,157, 13, 57, 95,219, 73, 75, 65,240,217,238, 47,119, 11, 59, 63,223, 69,169,237, 32, 40,172,220, - 96,101,101,101,251,227,143, 63, 10,241,241,241,231, 93, 93, 93, 59,167,166,166,118,175,174,174, 14,188,126,253,250,131,150, 56, - 11, 11, 11, 47,103,100,100,192,220,220, 28, 11, 23, 46,148,110,220,184,241,200, 87, 95,125,165,221,184,113, 99,171, 98,174,154, - 42,207,191, 2, 19,167,137,211,196,105,226, 52,113,154,208,172,131, 5, 0,183, 50,105, 58,128,119,122,118, 36, 62,175,206,223, -178,104, 64,175, 14,189,223,122, 53,208,166, 92, 40,163, 39,126,185, 91,156,150, 85,121, 67,196,226,139,219,105,180, 69,123,237, -157,207,184,118, 13,183,183,185,187, 7,206,156, 57,115,253,210, 73,249,125, 27,118, 29, 30,250,225,208, 21, 66,200,170,220,220, - 92,163,135,236,199,196,196,220, 6,240,162,159,159, 95,255, 37, 75,150,172,123,201,195, 35, 96, 74,112, 48,196, 98, 49,162,162, -162, 80, 84, 84, 20, 13,224,131,216,216,216,171,173, 41,156,242,242,242, 15,189,189,189, 37, 73, 73, 73,184,119,239, 30, 82, 82, - 82,192,243,252,253,236,236,236, 9, 79, 90,224,207, 50,167, 86,171,253,116,253,250,245, 67,214,172, 89, 35,179,176,176, 64, 92, - 92, 28,214,172, 89,163,214,106,181, 70,139,171,199, 97,254, 55,116,195, 23,115,201,119,225,105,237,135,117,117,235,179,211, 96, - 48,192,209,209, 81,218,187,119,111, 23, 0,170,144,144, 16, 30, 64, 90, 43, 40, 63,240,241,241,241, 94,191,126,125,199, 25, 51, -102,160,180,180,212,228, 92,153, 96,130, 9, 38,152,240,127, 71, 96,213,225,230, 61, 26, 15, 96,122,143, 14,100,240,149,168,251, -179,107,228, 43,246, 36,166,211,176, 39, 61,112,118,118,118, 20,128, 97, 91, 23,147, 71,230,159,200,205,205, 29,249,164,156,181, - 2,106,144,143,143,207,216, 19, 44,251, 30,210,210,192,243,252,167,241,241,241,191,180,134,167,119,239,222,109, 43, 42, 42,190, - 49, 24, 12, 61,121,158,151, 94,186,116, 9, 90,173, 22,137,137,137, 26, 65, 16, 78, 60, 73,218,254, 47,112,102,101,101,197,184, -186,186,142, 38,132,156, 90,182,108,153,108,237,218,181,127, 89, 92,213, 97,209,110,154,119,200,223, 63,140, 77, 73,225, 13, 6, - 3,203,113, 28,120,158,151, 60, 9, 23,165,244, 30, 33,164,215,226,197,139, 63,120,247,221,119, 23,109,222,188, 89, 98,138,185, - 50,193, 4, 19, 76, 48,225,255,156,192,170, 67,194,125,122, 17,192,197,167,153,128,218,174, 67,135,186,207, 79,131,179, 86, 80, -253,242,164,255, 47, 43, 43,251,168,184,184,184, 87,121,121, 57,151,150,150,166, 33,132,240, 12,195,104, 4, 65,216,196,243,252, -183,255,100, 78,149, 74, 21,225,226,226, 50,236,218,181,107, 11,171,170,170,118,171, 84,170,235, 79,171,174, 99, 98, 98,178,252, -253,253,223,159, 61,123,246,100,142,227,254, 19, 29, 29,157,241,164, 92,148, 82, 29,128,247, 9, 33, 63, 39, 36, 36, 28,188,118, -237, 90,158, 73, 92,153, 96,130, 9, 38,152,240,127, 82, 96,253, 29,104,220,117,248, 44, 32, 57, 57,121, 6,128, 25,255,139,156, - 0,144,155,155, 27,251,119,240,214,138,172,175, 0,124,245,180,248, 40,165, 49,132,144,174,168, 25, 37, 98, 18, 87, 38,152, 96, -130, 9, 38,152, 4,150, 9, 38, 60, 37,145, 69, 97, 90, 91,208, 4, 19, 76, 48,193,132,103, 8, 4, 64,247, 38, 26, 45,163, 87, -202,126,146,209, 4, 45,241,155, 56, 77,156, 38, 78, 19,167,137,211,196,105,226,252,231,113,182,196,221, 26,253,241, 76, 11,172, -214,172,227,215,106,114, 66,186, 63,237,130, 50,113,154, 56, 77,156, 38, 78, 19,167,137,211,196,249,207,227,252,167,129, 49, 21, -129, 9, 38,152, 96,130, 9, 38,152, 96,194,211, 69,171, 99,176,130,130,130, 58, 2, 64,100,100,228,189,103, 33, 3,190,190,190, -151, 58,116,232,208,230,238,221,187, 6, 66, 8, 26,190, 0, 64, 42,149, 94,187,118,237,218,235,166,170,254,239,194,220,220, 92, -205,178, 44, 97, 24, 6, 44,203,162,241,251,227,190, 35,132, 56, 38, 38, 38,170,155,226,116,245,159,228, 97,224, 12,107, 8, 17, -190,165, 60,243, 6, 97,235,222,233, 55,148, 39,179, 24,137,254, 11, 65, 47, 89, 36,166,178,143, 84,183,143,102,155,106,225,241, -232,222,189,251,133, 94,189,122,121,199,197,197,233, 41,165,245,215, 15,195, 48, 32,132, 64, 16,132,220,232,232,232,190,255,244, -114,112,113,113,233, 15, 96, 75,237,160,137,134, 72, 33,132,188,155,147,147, 19,102, 58, 91, 76, 48,193,132,167, 38,176,122,245, -234,229,197,243,252, 0, 66, 72,127, 74,105,255, 46, 93,186, 56, 86, 85, 85,193,223,223, 63,159, 16,114,149, 82,122,149,101,217, - 43, 55,110,220,184,219, 18, 87,223,190,125,163,117, 58, 93,151, 86, 37, 80, 36,170,144,203,229, 29,195,194,194, 30,219,208, 58, - 57, 57,121, 30, 58,116,200, 54, 33, 33, 1,230,230,230,143,188, 68, 34, 17,122,247,238, 29,248,172, 22,126,159, 62,125,244, 60, -207,139, 31,247, 27,203,178,134,136,136, 8, 73, 11, 98, 55,131,227, 56,135,214, 28, 83, 34,145, 20, 68, 68, 68, 24, 53,114,179, - 95,191,126, 74,142,227, 22,179, 44, 59, 72, 16,132,174,181,233, 74,226, 56,238,146, 72, 36,250, 60, 60, 60,220,232,213,192, 89, -150, 37,133,133,133, 56,122,244, 40,186,251, 5,129, 82,192,167,155, 87,189, 16,142,140, 77, 2,207,243, 8, 15, 59,131,165, 75, -151,194,207,207, 15,106,181,154,109,142, 83,207, 9,171, 62, 88, 48, 53,120,195,182, 35,254,239, 47,124, 77,185, 97,219, 17,191, -247, 23,190,102,177, 97,219, 17,223,247, 23, 78,182, 88,191,237,144,223,170,133, 83, 44,215,111, 63,172, 3, 48,255, 73,234,232, -141,174, 93, 13, 12,199, 61,246, 58, 17, 68, 34,238,219,164, 36,241,255,245,155, 0,195, 48,110,187,119,239,182, 58,119,238, 28, - 20, 10, 69,253,245,163, 84, 42, 97,110,110,142, 23, 94,120,129,127, 90,199,242,247,247, 63, 12, 96, 92,237,102, 88, 76, 76,204, - 11, 79,202, 69, 8, 49, 23,137, 68, 11,165, 82,233, 0,142,227, 58,215,158,223,201, 90,173,246, 10,199,113,219, 40,165,234, 86, -242,125,114,227,198,141, 46, 22, 22, 22,208,235,245,245, 11,195,179, 44,235, 29, 20, 20,244, 57,128,158,166, 38,195, 4, 19, 76, -248,203, 2,203,223,223,255, 4,128,254, 93,186,116, 81, 12, 27, 54, 12,126,126,126,104,219,182, 45,228,114, 57, 0,160,184,184, -216, 49, 49, 49,113, 66, 92, 92,220,132,136,136, 8,248,251,251,107, 8, 33, 17,209,209,209, 99,155,226, 20, 4,193,253,204,153, - 51,176,183,183, 55, 42,113,130, 32, 96,212,168, 81,226,178,178, 50, 51, 0,143,189, 89,230,229,229, 9, 31,126,248, 97, 89,120, -120,184,158, 97, 24, 80, 74, 9,169,105,181, 9, 0,112, 28, 87,252,223, 46,228,254,253,251, 39, 1,112,173,203, 19, 33, 68, 21, - 30, 30,222,149,231,121,241,141, 27, 55,154, 18,182, 45, 54,220, 28,199, 57, 92,189,122,181,190, 78, 90, 2,207,243,232,213,171, -151, 81,130,204,215,215,119,160, 76, 38, 59,248,230,155,111, 90,245,237,219, 87,228,238,238, 14, 66, 8,242,242,242,122, 93,187, -118,205,111,231,206,157,179,124,125,125,167,197,197,197, 93, 54, 82, 96,225,192,129, 3, 88,191,126, 61,150,188,255, 9,222,154, - 57, 17,132, 16,200,100, 50,148,149,149, 33,200,175, 43,118, 29,248, 25, 71,143, 30,133, 70,163, 1,203,178,240,244,244,108, 78, -156,186, 42, 69, 54,129, 11,223,120,209,236,211,157, 7,204, 22,190,241, 34, 62,219,117,176,193,251, 56,124,186,235,128,249,219, -111,140,195,182,221,251,130,250,244,233,227, 26, 17, 17,161, 50,166,142, 0,128, 82,170, 10, 15, 15,239,202,112,156,104, 79,106, -106,205,151, 95,127, 13, 60,124, 8,186,122, 53, 0, 96,174,183,119,171, 28,224, 30, 61,122, 92,101, 89,214,205,136,122,202, 73, - 72, 72,232,255, 23,132,199, 80, 0, 75,107, 55,183, 80, 74,207,183,112,157,229,204,155, 55,207, 60, 54, 54,182, 41, 7, 43,255, - 47, 8, 42, 59, 66,200, 54, 0, 10,150,101,223, 5, 48, 50, 52, 52, 20, 12,195, 96,248,240,225,193,254,254,254,222, 0, 54,153, -153,153, 81,157, 78,247,102,100,100,100,190,145,121,236,111, 97, 97,241,205,225,195,135,173,251,244,233,195,100,101,101,161,123, -247,238, 40, 44, 44,244, 15, 11, 11,243,157, 59,119,238,116, 66,200,108, 74,105,107, 86,111,232,100,110,110, 78,167, 79,159, 78, - 26, 46, 68,191,119,239, 94,248,105, 52, 29,222,104,219,182,184, 90,175,175,184,204,178,171, 8, 33,151,178,178,178,114, 77, 77, -136, 9, 38,152,240, 36, 14,214,240, 75,151, 46,193, 96, 48,192,194,194, 2, 44,251,168,153, 96,107,107,139,129, 3, 7, 34, 40, - 40, 8, 67,135, 14, 69,114,114,178,226,227,143, 63,126,174,165, 3,154,153,153, 33, 34, 34, 2, 28,199, 33, 38, 38, 6, 21, 21, - 21, 24, 59,118, 44,196, 98, 49,196, 98, 49, 68, 34, 81,253,187,147,147, 19,228,114, 57, 41, 43, 43,107,146,207,202,202,170,195, -233,211,167, 25,153, 76, 70,149, 74, 37,189,116,233, 18, 5, 64,107,218,200, 39,139,224, 15, 12, 12,116, 18,137, 68,235,121,158, - 31,207,243,188,180, 25,209, 96,144, 72, 36, 39,181, 90,237,251, 49, 49, 49, 89,205, 80,186, 94,189,122,213,178,190, 96,135, 15, - 39,125,250,244, 41,171, 43, 83,127,127,255, 71,118,142,137,137, 49, 58,173,114,185, 28, 97, 97, 97, 16,137, 68,176, 25, 48, 0, - 0, 96,136,143,135, 88, 44, 6,186,117, 3, 0, 40, 51, 51, 33, 22,139,225,236,236,108, 20,167,143,143,207,208, 54,109,218, 28, -249,242,203, 47, 21, 44,203, 34, 53, 53, 21,132, 16,176, 44,139,252,252,124,244,239,223, 95,212,189,123,119,187, 21, 43, 86, 28, -243,241,241,121, 45, 62, 62,254,188, 17, 46, 9,166, 79,159,142, 79, 63,253, 20, 11,103, 77, 68,221,122,135, 58,157,174,126,159, - 55,167,143,195,254,157,155,240,193, 7, 31,224,183,223,126,107,137,111, 67,151, 78, 29,221,246,255,112, 22,253,122,247,194,254, - 31,206,160,111,239, 32,236, 15, 57,139,126,189,131,112, 48,228, 44, 6,244,233,141,131, 33,103,209,189, 75, 39,247,162, 7,101, - 27,208,252,220, 94,143,212,209,136, 17, 35, 72,159, 62,125,202,186, 51, 76,157,224, 2,121,179,102, 73, 39,212, 10,172,214,130, -101, 89,183,216,216,216, 22, 5,174,159,159,223, 95,189,174,151, 82, 74,251,215, 10, 17, 0,104,182,126,110,221,186,245, 28, 0, -188,244,210, 75, 23,186,119,239,238,125,231,206, 29,125,221,127,107, 95, 46,147, 39, 79,206,168, 19, 93,148,210,220,239,191,255, -222,168, 46, 67, 66,200,150,147, 39, 79,142,209,235,245,152, 57,115,102, 76,251,246,237, 69, 86, 86, 86,216,187,119, 47,108,108, -108,160,211,233,110,124,246,217,103,162, 7, 15, 30, 96,251,246,237,187, 27,184, 91,205,113, 14, 30, 48, 96,192,129,211,167, 79, -203, 68, 34, 17,202,202,202,112,249,242,101, 88, 91, 91, 67,161, 80, 96,194,132, 9,204,192,129, 3,109,159,123,238,185,195,132, -144, 25,148, 82,163, 39, 71,214,104, 52,116,197,138, 21, 48, 51, 51,123,196, 13,151, 3,100,221,245,235,178, 77,193,193,178, 85, -139, 22, 45,253,250,235,175,123,187,187,187,111,206,206,206, 86,153,154, 17, 19, 76, 48,161,181, 2, 11,230,230,230,136,138,138, - 2, 33, 4, 22, 22, 22,176,180,180,132,149,149, 21,202,203,203,145,152,152,136, 59,119,238, 32, 61, 61, 29, 12,195,160, 67,135, - 14,168,115,141, 26,184, 0,183, 30,115,115, 4,203,178,200,200,200, 64, 94, 94, 30, 24,134,193,229,203,151, 49,114,228,200, 71, -196,149, 88,252,120, 3,167, 49,103, 88, 88, 24,247,238,116,231, 11,122,157,218,158,227,116,215,194, 40,125,211,207,207,239,146, -163,163,163,187,143,143, 15, 95,215, 5,213, 92, 92, 86, 99, 78,150,101, 55,205,159, 63,127,194,164, 73,147, 24,145, 72,244,136, - 3,164,211,233,160,211,233, 96, 48, 24,160,209,104,196,199,142, 29,123,241,212,169, 83,102, 0, 94,106, 42,157,130, 32, 60,146, -135,245,235,215, 91,112, 28,135, 47,191,252, 18, 0, 16, 29, 29,253, 39,231,206,152,188,215, 87,162, 72,132,134,233,172, 43, 67, -174,209,182, 49,156, 65, 65, 65, 22, 82,169,244,187,173, 91,183, 42,242,243,243,145,144,144,128,158, 61,123, 98,213,170, 85, 80, -171,213,216,178,101, 11,238,221,187, 7, 71, 71, 71,172, 92,185, 82,241,238,187,239,126, 23, 20, 20,212, 53, 50, 50,178,162,185, -116, 50, 12,131,111,191,253, 22, 28,199,129,169, 21, 45,213,213,213,144,201,100,141,211,131,213,171, 87,215,239,211, 20,167, 94, -175, 31,177, 98,209,108,124,249, 77, 8,186,117,116,194,169,208,235,232,213,189, 45,126,187,112, 3,189,123,180,199,153, 75,209, -232,227,211, 17, 23,174,223,198, 59,243,167,224,189,183, 47,143,104, 46,239,141,203,124,237,218,181, 22, 60,207,227,183,101,203, -128,237,219, 65, 22, 46, 4,173,221,135, 48, 12,224,230, 6, 40, 20, 70,215, 81, 67,220,185,115, 7,213,213,213,127,250, 94, 38, -147,161, 75,151, 46,173,230, 36,132,244,112,116,116,252,218,219,219,187, 59, 0, 12, 28, 56,176,197, 11,191,137,107,211,237,253, -247,223,183, 58,116,232, 16,100, 50, 25, 20, 10, 5,204,204,204, 96,102,102,246,200,231, 85,171, 86,241,173, 56, 63,165,201,201, -201,176,176,176,192,158, 61,123, 68,182,182,182,136,137,137,129, 72, 36,194,212,169, 83,209,163, 71, 15,145, 66,161,192,165, 75, -151, 80, 89, 89,217, 34, 39, 33, 68,105,110,110,254,245,201,147, 39,101, 60,207,163,176,176, 16, 0, 48,122,244,104,176, 44,139, - 59,119,238,224,163,143, 62,194,143, 63,254,136,159,126,250, 73,238,239,239,255, 53, 33,196,143, 82, 90,105, 68,121,210,234,234, -106, 42,151,203, 33,151,203, 33,147,201, 32,147,201, 32,145, 72,160,165, 20, 31, 4, 4,232, 36, 74, 37,223,179,103,207,246, 11, - 22, 44, 96,214,172, 89, 51, 24,192,247,198,214,123,107, 97,226, 52,113,254,175,113,182,228,125, 0,104,248,128,170, 3, 80,103, -128, 20,214,234, 15,187, 70,223, 3, 64,221, 10, 49, 14, 77,108, 23, 2, 72, 4,208,181,246, 59, 30,192, 13, 0, 37, 79, 69, 96, - 17, 66,104,131, 66, 35,143, 41, 72,148,151,151,163,188,188, 28, 89, 89, 89,216,181,107, 87,125,163, 45, 18,137,192, 48, 76,125, -188,130, 49, 16,139,197,200,202,202,130,143,143, 15, 28, 29, 29,177,111,223, 62,140, 30, 61,186,158,175,238,213, 80, 20, 53,135, -190,131, 39,119,121,177,107,138,197,252,205,161, 20,168,137,203,250,249,231,159,109, 83, 83, 83, 33,151,203,161, 80, 40,160, 80, - 40, 32,151,203, 33, 22,139, 91,140,203, 18, 4, 97,204,196,137, 19,153,208,208, 80,112, 28, 7,145, 72, 4,137, 68, 2,169, 84, - 10,150,101, 33,145, 72,234, 95, 99,198,140, 97,142, 31, 63,254, 92,112,112,176, 40, 44, 44,140,107,226, 68, 68,116,116, 52, 34, - 35, 35,193,243, 60, 56,142, 3,199,113,208,104, 52, 0,128,128,128,128, 71,246,191,126,189,117,171,211, 52,116,174, 68, 34, 17, - 72,183,110,224,106,157, 43,145, 72,132, 18, 23, 23, 0,128,189,113,134,222,162,153, 51,103, 90,200,100, 50,220,186,117, 11, 50, -153, 12,106,181, 26,227,198,141, 67,101,101, 37, 56,142,131, 76, 38, 67,117,117, 53,156,156,156, 48,116,232, 80,243,208,208,208, - 69, 0,214,182,224,222,224,141, 55,222,192,142, 29, 59,240,229, 55, 63,224,157,217, 47,255,105,159,157,251,107,150, 79, 92,179, -102, 13,194,194,154,143, 39, 22, 4,129,237, 27,208, 5,229,133,129, 16,139,197,232,231,231, 5,150,101,209,215,191, 19, 68, 34, - 17,250, 7,122,131,101, 89, 12, 10,234,138,142, 29, 59, 66, 16, 4,182,133,155,197, 99,235, 72,167,211, 1,185,143,233, 9,202, -203, 3,218,183,127,146,155, 18,150, 45, 91, 86,166, 82,169,244,127,178,208, 92, 93, 37,199,143, 31,183,106,141,241, 74, 8,233, -217,165, 75,151,179, 23, 46, 92, 80, 58, 57, 57,129,227, 56, 24, 12, 6,168,213,106,188,252,242,203, 0,112,162, 21,105,203, 89, -191,126,189,249, 99, 28,172, 71,186, 13, 41,165, 70,119, 25,138, 68,162,229,203,150, 45, 27, 57,110,220, 56,145,133,133, 5,196, - 98, 49,164, 82, 41,164, 82, 41, 36, 18, 9, 50, 50, 50, 96, 48, 24, 16, 18, 18, 66, 89,150,125,207, 8,190,183, 14, 30, 60,104, - 41,149, 74,145,155,155, 11, 66, 8, 40,165,144, 72, 36, 72, 75, 75,195, 23, 95,124,129,153, 51,103, 34, 51, 51, 19, 46, 46, 46, - 88,178,100,137,114,243,230,205,111, 1,216,100, 76,131,161,211,233,252, 20, 10, 5,100, 50, 25,234,132, 22, 0,196,154,153, 37, -166,165,165,245,114,118,118,238,210,230,242,229,221,193,193,193,221,237,236,236, 2, 9, 33,135,232,223, 57,215,141, 9, 38,252, - 15,160, 37, 13, 82, 39,136, 8, 33,167, 26,236, 55,186,110,123,249,242,229, 43, 55,109,218,116,155, 16,114,170,225,247,117,251, -213, 30,227,212,227,182,107,255,107,183, 98,197,138,238,155, 55,111,222,216,167, 79,159,163,215,174, 93, 75,123,106, 2,171, 54, -110,137, 54,147,177, 63,185, 80,141, 97,140,192,170,187, 73, 87, 87, 87,163,176,176, 16,195,135, 15,135, 66,161, 0,195, 48,200, -202,202, 66,167, 78, 53,141, 99,124,124, 60, 62,252,240, 67,116,235,214, 13,122,189,190,197, 52,157, 61,181, 71,115,237, 60,175, - 17,132,154, 27,255,195,135, 15,233,166, 77,155, 42, 67, 67, 67,117,127, 28,186,158,134,180, 20,151, 69, 41, 21,137, 68, 34, 24, - 12,134, 71, 70,185, 17, 66, 48,120,240, 96, 92,185,114,165,254,187, 90, 7,134,169, 45,203, 38, 11,161,214,241,122,164,241,174, - 67,157,131, 69, 41,133, 86,171,133,193, 96,120,178,202,172,117,254,184, 70,219,173, 1,195, 48,193, 3, 6, 12, 16,165,164,164, -212, 55,132,122,189, 30,131, 6, 13, 2,195, 48,200,204,204,172,255,158, 82, 10, 95, 95, 95,201,149, 43, 87,130, 91, 18, 88, 12, -195, 96,215,174, 93,245,121,219,254,221,113,188, 53,243,165,122, 39,103,251,119,199,235,247,123,255,253,247,255,228, 96, 53, 5, -137, 68, 82, 95, 23, 44,203, 66, 36, 18,213,191,215,125, 54,182,253,107,170,142,232,134, 13,192,134, 13, 53,206, 21,128, 42,181, -186, 70, 28,247,235,215,106,113,165,211,233,160, 82,169,244,241,241,241,127, 26,104,224,227,227,147,161,211,233,140, 78, 47, 33, -196,177, 78, 92, 81, 74,241,194, 11, 47, 96,209,162, 69, 8, 12, 12, 68, 69, 69, 5,150, 46, 93,138,210,210,210,207,123,244,232, -241,241,173, 91,183, 86, 81, 74,119, 54,199,119,252,248,241, 63,117,241,119,237,218,245, 66,239,222,189,189, 99, 99, 99, 27,138, - 46,151,192,192,192, 12, 74,105,179,163, 11,235, 2,218,123,244,232,129,185,115,231,226,216,177, 99,216,183,111, 31,234,226,155, -198,143, 31,143, 23, 95,124, 17, 5, 5, 5,112,114,114, 34, 57, 57, 57, 55,253,253,253,155, 13,124,151, 74,165, 3,251,246,237, -203, 84, 84, 84,212,223,135,196, 98, 49,210,210,210,176,101,203, 22, 76,158, 60, 25, 29, 59,118, 4,207,243, 80,171,213, 24, 60, -120,176,104,219,182,109, 3,141, 17, 88, 34,145,232,189, 33, 67,134,108, 4,208,173,225,189,144, 16,114,135, 16,178,170, 70, 87, -231,221, 25, 51,102, 76,198,144, 33, 67,124,219,183,111,111,159,144,144,192,194,180,138,128, 9, 38,252, 85, 55,204,104, 13, 82, - 39,144, 26, 11,173, 77,155, 54,141,110,252, 93, 67, 49,245,184,207, 13,255,187,121,243,230,141, 13,184,171,158, 70,190,158,218, - 82, 57,198,138, 2,157, 78,135,216,216, 88,120,121,121, 65,161, 80, 64, 36, 18,193,207,207, 15,177,177,177,232,218,181, 43, 4, - 65,192,202,149, 43,177,122,245,106,132,132,132, 32, 49, 49, 81,228,228,228,212, 44,231,238, 99, 21,143, 88, 9, 22, 22, 22,237, - 67, 66, 66,254, 82, 92, 22, 33,164,190,129, 30, 59,118, 44,126,253,245, 87,136,197,226,250, 46, 78,127,127,127,220,188,121,211, - 40, 33, 64, 41,173,111,188, 43, 43, 43,161,211,233,192,113, 28, 28, 28, 28,240,250,235,175,131,227, 56,240, 60, 95,223,176,243, - 60, 15,150,101,209,171, 87, 47,202, 48,140,225,250,245,235,205,142, 38,212,199,197,213,164,237, 95,255, 2, 7,192,252,193, 3, -136,197, 98,148,186,214,196,108,183,169,172,108,178,139,176, 49,120,158,239,234,230,230,134,148,148, 20,200,100, 50, 72,165, 82, -180,105,211, 6, 11, 23, 46, 68, 85, 85, 21,190,253,246, 91,148,150,150, 66, 42,149, 66, 44, 22,163, 99,199,142,208,233,116, 93, - 91,226,101, 89, 22,243,230,205,195,119,223,125,135, 93, 91,106,186, 0,191,222, 90,243,222,112,122, 6,134, 97,176, 97,195, 6, - 12, 30, 60,216,104, 55,116,233,210,165,138,166,126, 63,122,244,168,198,152, 42,111, 88, 71,229,229,229,208,233,116,224,121, 30, - 74, 15, 15,204,152, 49,163,166,126, 94,121, 5, 60,207, 67,152, 62,189, 70, 36,152,153, 25, 93, 71, 13, 5, 86, 83,233,161,148, - 62,182,235,176, 25, 12, 95,190,124,185, 82, 16, 4, 12, 30, 60, 24, 51,103,206, 68, 64, 64, 0,182,109,219,134,240,240,112,124, -243,205, 55, 56,124,248, 48, 56,142,147,140, 24, 49, 98, 17,128,157,173,189,174, 89,150,117,219,189,123,183,213, 79, 63,253, 4, -165, 82, 9,107,107,235,255,199,222,121,135, 71, 81,181,109,252, 62, 51,179, 61,189,146,108, 18, 2, 73,128, 64,104,233, 1, 41, - 17,233,136, 20, 65, 68, 84, 4, 5, 11,240,138,136,148, 87, 5, 84, 12, 74,147, 94, 68, 69, 5,165,136, 84, 65, 64, 58,132,144, -132, 78, 2, 66, 66, 72,239,125,179,117,118,206,247, 71,178,121, 3,146,100, 3,168,124, 58,191,235,218,107,119,118,103,239, 57, -231, 76,187,231, 57, 13,246,246,246,112,116,116,196,179,207, 62,219, 88,239,194,254,135, 14, 29,130,147,147, 19, 18, 18, 18, 32, -147, 85, 71,237,109,109,109,157,143, 29, 59,166, 95,181,106, 85,185, 82,169,228,100, 50, 25, 62,252,240, 67,200,100, 50,188,250, -234,171,209,209,209,209,242, 99,199,142,221,183, 32,120,158, 15,116,114,114, 66,110,110,110,173, 33,183,181,181,197,135, 31,124, -128,151, 94,126,185,214, 92,201,100, 50,204,158, 61, 27,125,250,244,129, 94,175, 15,180, 38,175, 25, 25, 25,137, 0,250, 52,182, -158, 32, 8,164,102,127, 81, 0,130,120,123, 20, 17,249, 75,163, 93,123,239, 53, 89, 15,163, 53,115,230,204,217, 0,232,204,153, - 51,103, 91,150, 99, 98, 98,180, 0, 30,186,125,229, 35, 51, 88,214, 68,176,186,119,239,174, 88,181,106, 21, 60, 60, 60, 16, 18, - 18, 82, 27, 97, 9, 13, 13,197,138, 21, 43, 48,110,220, 56,236,223,191, 31,237,218,181, 67,255,254,253,209,163, 71, 15,116,236, -216,177, 81,221,119,199,121,157,226,245, 21,142, 70,131, 62,126,245, 14,227,184,242,242,242,147, 1, 1, 1,158,233,233,233,124, - 69, 69, 69,109,163, 97, 66, 8,194,195,195,193,113,220,185,216,216,216, 23,172,137, 8,141, 24, 49, 2, 59,119,238,196,176, 97, -195,112,240,224, 65, 0, 64,120,120, 56,146,146,146,160, 82,169,172,142, 16, 89,110,222, 21, 21, 21, 88,177, 98,133, 85,255, 49, - 26,141,120,234,169,167, 26,221,128,165,186,214,124,207,114, 93,115, 99,173,193,178,148,147, 84, 42, 5,195, 48,181, 85, 57,149, -149,149, 40, 43, 43,171,173, 42,181,188,172,173, 26,102, 89, 22, 43, 86,172,128,201,100,194, 27,211,230,129,101, 57,188,241,242, - 80,176,108,181, 65, 93,243,237, 46,152,205,102,108,253,230, 11,204,156, 57,211,170,170, 97,139,238,170, 85,171,180, 12,195,252, - 33,122,197, 48, 76,147, 34,120,117,247,209,170, 85,171,172,250, 79, 73, 73, 9,134, 12, 25, 98,245, 70,234, 54,234,111,170, 1, -187, 15,187,223,123,239,189,241, 70,163,177,109, 68, 68,132,114,194,132, 9,200,200,200,192,146, 37, 75,116, 37, 37, 37,171,251, -244,233, 51,222,214,214,214, 65,163,209,104,110,223,190,189,232, 65,206,107, 65, 16,178, 38, 78,156,104, 99, 25, 35,203,210,179, -144,101, 89,171,122, 23,154,205,102,172, 95,191,190,182,106,240,126,251,175,238, 49,101,141, 73, 77, 74, 74,194,201,147, 39, 49, - 96,192, 0, 84, 85, 85,193,100, 48,224,237, 75,151, 16, 52,102, 12, 12, 82, 41, 4, 65,128, 92, 46,199,226,197,139,255,180,107, -124, 29,131, 37, 34, 34,242,215, 70,187,158,126,148, 90,150, 8, 86, 76, 76,204,213,152,152,152, 63, 68,195,254, 84,131,197,178, - 44,234,118, 89,190,223,205,216,218, 54, 88,167, 78,157,210, 29, 57,114,196, 54, 51, 51,179, 54, 66,196,113, 28,252,253,253, 65, - 8,193,254,253,251,177,105,211, 38,252,247,191,255, 5,199,113,176,183,183, 71,112,112,176, 41, 39,167,225,222,208, 93,123,140, -242,175,105,131,101, 6, 0, 15, 15, 15,175,109,219,182, 53,212, 6,171,209,241,108, 12, 6, 3, 36, 18, 9,246,238,221,139,190, -125,251,226,216,177, 99, 80,214, 52,106,190,118,237, 26, 58,119,238,140,223,127,255,221,170, 27,120,221,232,136, 78,167, 3, 0, -164,164,164, 88,123, 0, 52,126,181,111,223, 30,230,154,200, 21,199,113,119, 69,174, 88,150,197,237,154,116,183,179, 66, 75, 42, -149, 38,231,230,230,134,185,187,187,163,184,184, 24, 50,153,236, 46,115,198,113, 92,109,100, 75, 38,147, 89,218,105, 37, 55,166, -203, 48, 12, 38, 79,158,140, 45, 91,182, 0, 0,222,120,121, 40, 84, 42, 37, 12, 6, 3,116, 58, 29,222,120,121, 8,214,124,187, - 11, 12,195, 32, 38, 38, 6,125,251,246,181, 58,130,245,214, 91,111,213, 27,193,218,181,107,151,214,218,114,182,236, 35, 75,219, -184, 71,185,143,172,141, 96, 89, 99,176, 8, 33, 19,219,181,107, 55, 77,161, 80,100,228,229,229,109,245,240,240,152,188,108,217, - 50,159, 59,119,238,192,222,222, 30, 7, 14, 28, 80, 76,153, 50,229,205,115,231,206,141,166,148, 30,106, 44, 93, 29, 58,116, 56, - 18, 25, 25,217,166,238, 48, 13, 53,231,125,206,181,107,215, 30,102,128,209,195,253,251,247, 31,100,111,111,143,113,227,198, 65, - 42,149, 98,248,240,225,112,112,112, 40, 94,191,126, 61,194,194,194,106, 77,252,156, 57,115,112,231,206, 29, 16, 66, 14,215, 23, -189,170, 57, 62,175, 55,107,214, 44,100,212,168, 81, 40, 45, 45, 69,118,118, 54,236,237,237, 17,180,104, 17, 46,191,249, 38, 58, -175, 93, 11,166, 87,117, 77,103,157,227,243,122,125,122,222,222,222,225,130, 32,124, 2,160, 11,254,215, 73,135, 2,136,101, 24, -230,253,204,204,204,248,251, 92, 19, 25,139,121,172, 89, 87, 68, 68,228, 47,140, 96,213, 53, 90,117,162, 80,245, 81, 80,183, 93, - 86,125, 6,173,110,155, 44, 0,250, 71,145, 86,174,206,197,253,222, 30,128,183, 46, 94,188, 24,208,190,125,123,164,167,167,163, -180,180,244,190, 2, 54, 54, 54, 80, 42,149,184,121,243, 38, 40,165,183, 26,187,193,212,141, 42,212,237, 49, 56,123,246,108,204, -156, 57, 19,125,250,244,193, 19, 77,108,219,242,235,238,181,229,167, 14, 9, 26,179, 64,179, 1, 32, 47, 47, 79,248,248,227,143, - 53, 7, 15, 30, 52,212,109, 40,111,169,206, 51,155,205,185,141,236, 64,190,188,188,156,147,201,100, 32,132,224,244,233,211,181, -195, 72, 92,187,118, 13, 18,137, 4,105,105,105,144, 74,165, 48, 26,141, 64,117, 53, 1,223,148,155,119, 19, 28,182,245, 59,243, -158, 54, 87, 77,141, 92,213, 68,205,142,197,197,197,117,238,221,187, 55,167,209,104,238,107,176, 44,230, 74, 46,151,227,236,217, -179, 6,173, 86,219,232, 8,215, 44,203, 98,233,210,165, 48, 26,141,181,195, 52, 88,170,195, 44, 99, 97,189,241,242, 16,252,188, -105, 21,166, 79,159,110,117, 27, 44,137, 68,130,175,190,250, 74, 43,145, 72,106,171, 25,235,182,191,178,180,157,123, 16,131,245, -168,246,145,135,135,135,171,155,155,219, 50, 39, 39, 39,133, 78,167,251,195,250,117,127,111, 40,194,101,193,207,207,239,189,139, - 23, 47, 54, 43, 41, 41, 81,239,221,187, 55,202,221,221, 29,114,185, 28, 67,135, 14,173, 18, 4,129, 89,182,108,153, 98,237,218, -181,138, 25, 51,102,172, 6,224,111,133,249,245, 90,187,118,173,195,137, 19, 39,238, 26,158, 96,244,232,209, 15, 53,192,104, 98, - 98,226,115, 81, 81, 81,190,102,179,249,114,167, 78,157,184, 59,119,238,224,233,167,159,134, 82,169,172,221, 55, 26,141,198,210, - 46,141,114, 28,215,185,177, 25, 34,244,122,253,201,163, 71,143,118, 30, 54,108, 24,243,251,239,191, 67, 42,149, 86,247,238,237, -210, 5,157,215,174,197,149,119,222, 65,207,212, 84,232, 76, 38, 40,149, 74,236,223,191,223, 84, 85, 85,117,178, 1,195,182, 50, - 54, 54,182,157, 66,161,128,209,104,132, 32, 8, 96, 24,134,176, 44,219, 53, 40, 40,104, 17,128,238,117,215, 87,171,213,173, 39, - 77,154,228,197,243,188, 57, 43, 43,171, 88,140, 98,137,136, 60,178,104, 82, 99, 23,234,130,123,204,145,161,235,135,241,172, 0, - 0, 32, 0, 73, 68, 65, 84,206,114, 1,170,231, 86,126,186,230, 51,234,124,142, 7, 16,126,207,186,150,223, 13,247,188, 91,126, -191,248,167, 70,176, 88,150, 29,246,218,107,175, 45,239,211,167, 79,244,180,105,211, 96,107,107,139,156,156,156,218, 72,149, 76, - 38,131,143,143, 15,180, 90, 45, 78,156, 56,129,210,210,210,227, 44,203, 78,110,108,131, 38,147,169,246,166, 87,183,199,160,159, -159, 31,118,237,218,245, 7, 67, 80,223,144, 5,117, 89,247,179,166, 77,221,229,243,231,207,251, 2,192, 71, 31,125,244, 64,133, - 34,145, 72,246,108,223,190,253,217,126,253,250, 49,150, 8,158, 37, 29,117,135,146,208,235,245,248,238,187,239,168, 66,161, 56, - 82, 95, 15,194,186,249,174, 27,193,122, 84, 55,111,147,201, 4, 85, 90,218, 93,189, 58,189,203,203,239, 90,110, 43, 88,223, 76, -132, 16,178,116,205,154, 53,175,134,132,132, 56,121,122,122,162,170,170, 10,132, 16,184,185,185,213, 26, 24,133, 66, 1,169, 84, -138,228,228,100, 28, 58,116,168,138, 82,186,212,154, 8,214,219,111,191,141,157, 59,119,222,101,158, 44,230,202, 50, 92, 3,165, - 20, 11, 23, 46,196,160, 65,131, 26,140,156,214, 53,124,227,198,141,171, 55,130,117,248,240, 97,173,181,102,237,207, 48, 88, 94, - 94, 94, 29, 35, 35, 35,247,174, 91,183,206,217,213,213, 21,217,217,217,119, 29,211, 94, 94, 94, 29, 35, 34, 34,246,174, 91,183, -206,217,205,205, 13,233,233,233,141,230, 59, 53, 53,117,205,224,193,131,231, 14, 25, 50,132,244,238,221, 27, 74,165, 18,239,191, -255, 62,146,146,146, 38, 1,184,188,123,247,238, 11, 19, 38, 76, 64,139, 22, 45, 60,172, 76,127,237, 64,163,117,163,210,102,179, - 57,255, 97, 47, 48, 60,207, 47, 88,190,124, 57,167, 82,169,160,213,106, 81, 80, 80,112, 87,149, 96, 85, 85, 21, 60, 60, 60, 48, -105,210, 36,242,197, 23, 95, 44, 68, 35,227, 96,241, 60,191, 98,252,248,241, 99,123,247,238,237,168, 86,171,145,147,147, 3,105, - 77,181, 32,121,242, 73,244, 72, 73,129,193,108,134, 74,165, 66,114,114, 50, 54,108,216,160, 49, 26,141,247,173,147, 15, 8, 8, -144, 49, 12, 19, 32,149, 74, 49,102,204,152,187,126,251,246,219,111, 17,101, 54,135,140,243,246, 46, 20, 24,198, 80,220,161,195, - 9,134, 97,200,228,201,147,189,187,119,239,222,238,234,213,171,169,133,133,133,231,196,219,162,136,200, 95, 70,252,223,244,223, - 71,111,176,226,227,227,111, 3, 24, 20, 18, 18,242,220,137, 19, 39, 62,123,231,157,119, 92,187,117,235,134,226,226, 98,248,250, -250,194,211,211, 19, 9, 9, 9,184,120,241, 98, 17,165,116,102, 66, 66,194,143,247,185, 89,255, 97,182,109,173, 86,139, 13, 27, - 54, 96,202,222,189, 88,220,190, 61,138,239, 25, 7,169, 46, 95,124,241,133, 37, 66,212,160,230,189,109,176,130,131,131, 99,155, - 55,111,238,153,158,158,206,215,141, 96, 89, 62,223,219, 6,235, 94, 77,189, 94, 63,123,235,214,173,146,239,191,255,126,144, 32, - 8,146, 6, 76, 40,175, 80, 40, 14, 25, 12,134,233, 13,229,157, 82, 74,220,221,221,209,162, 69, 11,104,181,218, 38,245,106,171, -123, 51,190, 95,222, 13, 6, 3,150, 46, 88,128,197,103,206,224,173, 46, 93, 26, 52, 34,247,107, 87,116,175,102, 92, 92, 92, 69, -112,112,240,132,233,211,167,127,247,209, 71, 31, 41,221,220,220,192,243, 60, 86,172, 88, 1, 65, 16, 32, 8, 66,173,185,154, 54, -109, 90, 85, 85, 85,213,132, 11, 23, 46, 84, 52,182,143, 88,150,197,194,133, 11,193,243,124,237, 48, 13,150,129, 70, 21, 10, 5, -116, 58, 29,190,222,178, 31, 12,195, 96,218,180,105,127,168,154,190,159,166, 37, 45, 63,252,240,131,246,222,168,213,189,203,245, -152,201,187,246,145,173,173, 45,124,125,125,225,226,226,242,200,246,145,139,139,203,219, 27, 54,108,112,214,106,181, 72, 78, 78, - 70,114,114, 50, 24,134,185,126,239,239, 26,141, 6, 87,174, 92, 65, 82, 82, 18, 8, 33,215, 27, 42, 79, 74,233, 34, 66,200,230, - 95,127,253,117,136, 92, 46, 31,230,238,238,238,157,158,158,190,133, 82,186, 13, 0,222,120,227, 13,152, 76,166,198,170,246,107, - 53, 47, 95,190, 92,239, 0,193,117,171, 15, 45,231, 16,165, 52,231,252,249,243, 93,173, 57,223, 1, 24,118,239,222, 13, 91, 91, - 91,236,220,185,147,119,114,114,226,230,205,155, 7,153, 76,134,185,115,231, 34, 61, 61,157,127,245,213, 87, 57, 65, 16, 64, 41, - 53, 52,166, 73, 41,173, 36,132, 76,234,222,189,251,134, 95,126,249, 69,209,186,117,107, 88, 6, 34,158, 53,107, 22, 86,172, 88, - 1,149, 74,133,235,215,175, 99,200,144, 33, 90,141, 70, 51,169,238, 24, 88,117, 53,121,158, 39, 82,169,148, 10,130,128,247,223, -127,255,174,129, 69, 85, 42, 21,148, 0,230,199,199, 43, 99,162,163,149,147,231,206, 29, 82, 99,240,204, 87,175, 94, 77, 93,179, -102, 77, 44,165,244,120, 35,121,127,216,170, 16, 81, 83,212,252, 87,105,254,211,104,180,254,232,252,249,243, 91, 59,119,238,124, -112,193,130, 5, 31,255,252,243,207,175, 76,153, 50,133,216,219,219, 99,219,182,109,180,164,164,228,123,133, 66, 49,251,212,169, - 83,165, 86,109,140,227,110, 28, 62,124,184,211, 59,239,188, 35, 97,167, 79,199, 7,247, 76,242,123, 47,201,201,201, 84,163,209, -152,117, 58, 93,131,115,138, 61,234, 54, 88,137,137,137,185, 0,198, 60,194,114,222,247,233,167,159,142,220,184,113, 35,167, 84, - 42,145,146,146,130,223, 45,211,175,212,111,222,176,100,201, 18,222,104, 52,214,219,147, 65,161, 80,220, 57,125,250,180,247,199, -159,127,206,234, 25, 6, 95,212, 25,174,224,126, 81,155,211,167, 79, 83,153, 76, 86,214, 88, 98, 47, 92,184,112, 32, 52, 52,244, -133,201,147, 39,127, 61,120,240, 96, 85, 88, 88,152,212,215,215, 23, 28,199, 33, 61, 61, 29, 39, 79,158, 52, 28, 56,112, 64,171, -215,235,199, 93,184,112,225,144, 53, 5,192, 48, 12,222,125,247, 93, 48, 12,131, 54,254,205,113,240, 68,252, 93, 61,230,118, 31, - 60, 5, 15,119, 23,180,111,223, 30,159,125,246, 25,134, 14, 29,218,152,158,217,104, 52,178, 42,149,170,118,172, 50, 75,222, 45, -213,133,189,122,245, 82,158, 62,125, 90,107, 48, 24,192,178,108, 99,225,176,125,139, 22, 45, 26,241,253,247,223, 75, 84, 42,213, - 35,219, 71, 60,207,183, 45, 41, 41,129, 70,163, 65, 66, 66, 2, 93,181,106, 85, 97, 89, 89,217,156,186,191, 23, 23, 23,163,162, -162, 2,231,206,157,163, 95,126,249,101, 97, 69, 69, 69,163, 67,197, 83, 74,115, 1,172,169,121,221, 69, 94, 94, 94,149,209,104, - 84,229,228,228,152, 30,246,192,181, 84, 31,158, 61,123, 22,118,118,118,112,112,112,104, 82,213, 33,165,116,218,193,131, 7,165, -168,153, 42,167,160,160,224,156, 68, 34,145,201,100, 50,100,101,101, 65, 16,132,136,245,235,215,199, 0, 48,114, 28, 55,197, 74, -205, 67,132,144, 87,130,130,130,214,206,157, 59,215, 38, 58, 58,154, 83,171,213,232,219,183, 47,110,220,184,129, 95,126,249,197, -180,122,245,234, 42,141, 70,243, 58,165,244, 72, 3,215, 35, 74, 41, 37, 60,207,223,213,113,195,210, 67, 86, 43, 8,152, 29, 28, -172,163, 28,103,152, 59,119,238,113, 0,200,206,206, 46, 41, 40, 40, 72, 20, 4,225,120, 78, 78, 78,150,120, 11, 17, 17, 17,169, -215,132, 54,165, 9, 65,100,100,100,164, 32, 8, 63,153,205,102, 9, 33,100,120, 98, 98,226,233,166, 56,220,200,200, 72, 59,169, - 84,122, 88,171,213, 6, 89,179, 61,153, 76, 86,106, 50,153, 6,197,199,199, 95,106,200, 53, 79, 28,102,115, 67,165, 16,216, 42, -157,233,214,186,159, 77, 3, 66, 66, 66,238, 12, 28, 56, 80, 81, 95, 27, 44,163,209,120, 51, 33, 33,225,169,191,202,221, 19, 66, -152,224,224,224, 51, 18,137, 36,178,102,251,117,111, 22,181,131, 37, 90,150,235, 68,167,210,111,220,184,209,138, 82,106,172,167, - 60,221, 37, 18,201, 81,157, 78,231,107, 77,154,228,114,121,142, 94,175,239,151,152,152,152,106, 77,222,187,117,235,230,200,243, -252,127,228,114,249,147,122,189,190, 45, 0, 40,149,202,100,173, 86,123,148,227,184,101,245, 25,235,251,105,118,234,212, 73,195, -178, 44,169, 59, 36,195,253,222,235, 14,215, 80, 89, 89,233,110,153,228,251, 94,205,238,221,187,111, 28, 53,106,212,128,151, 94, -122,137,112, 28, 87, 91,110,150,125,109,169,134,214,235,245,216,184,113, 35,221,177, 99,199,254, 99,199,142,141,109,108, 31,113, - 28, 23, 73, 8,169,221, 71,247, 59, 63,154,178,143,124,125,125, 59,219,216,216,172, 71,245,200,194, 41,101,101,101, 83,178,178, -178,178,234,254,174, 84, 42,215, 3,144, 49, 12,243,135,223, 31,228,248, 36,132, 76, 8, 12, 12,156,126,253,250,245,165,245,141, -125,101,173,102,199,142, 29,143, 68, 68, 68,180,185,112,225,130,209,114, 14,213, 55,254,149, 53,154,161,161,161, 91, 1, 12,170, - 89,255,112, 66, 66,194,144, 7,125, 74, 38,132, 56, 72,165,210,183,148, 74,101, 15,157, 78, 23, 88,243,208,113, 93,171,213,158, - 48, 26,141,171, 40,165,101,141,105,250,249,249,157, 59,121,242,100,144, 37,234,105, 25,189,157,101, 89,120,121,121,157,207,206, -206,238, 46, 70, 29, 68, 77, 81, 83,140, 96,253,233, 6, 75, 60, 80,254,189,154,150,145, 90,173,105,212,251, 87,164,179, 75,151, - 46,106,142,227,230,235,245,250,126, 13,141,210,206,178,172, 89,169, 84,254,106, 48, 24,254,123,239,100,207,226,126, 23,143,207, - 7,233, 69, 40,238, 35, 81, 83,212, 20, 13,150, 53,112, 98, 17,136, 88,195,227,214, 91,170,198, 44,141, 21,247,140,200,195, 28, -159, 53, 6,170,143, 88,130, 34, 34, 34,143, 26, 70, 44, 2, 17, 17, 17, 17, 17, 17, 17,145, 71, 11, 1,208,161,158, 39,194,166, -180,249,232,240, 0, 79,156, 87, 68, 77, 81, 83,212, 20, 53, 69, 77, 81, 83,212,252,119,105, 54,166,253, 79,169,122, 20,219, 96, -137,154,162,166,168, 41,106,138,154,162,166,168,249,183,107,254,211, 16,171, 8, 69, 68, 68, 68, 68, 68, 68, 68, 30, 49, 98, 35, -247, 7, 64,173, 86, 43, 1, 60,205,113,220, 24, 39, 39,167,176,162,162,162,249,153,153,153, 43,254,161,121,109, 77, 41, 29,195, - 48,204,115, 0, 32, 8,194, 54, 66,200,247,217,217,217,191, 63,172,118, 52, 33,156, 7, 48, 94, 2, 76, 5, 0, 19,176, 52, 23, -248,234, 24,165,252, 63,249,248,233, 17, 76,102,200,164,146,113, 58,163,233,179, 83, 23,232,215,209,161,196,133, 23,176, 64, 33, -229,186,235, 13,252,231, 39, 47,210, 13, 15,249,100,105,235,230,230, 22,195, 48,204,147,148, 82, 66, 41, 61, 81, 80, 80, 48,131, - 82, 90, 46,158,189, 34, 34, 34, 34,143,145,193, 34,132,176,237,218, 5,188,200, 18,242, 4, 0, 71, 0,165,102, 74, 79, 39, 37, -221,250,158, 82,250, 64,243,149, 69, 71, 71,115, 90,141,102, 52,199,178, 3, 40,165, 29, 64, 41, 1, 33, 87,120,158, 63,160,178, -179,219,212,216,212, 51, 0, 48,114,228, 72, 54, 43, 43,235, 6,207,243,110, 77,217,182, 68, 34,201, 61,115,230, 76,155, 7, 73, -183,183,183,247,112, 47, 47,175, 53, 81, 81, 81,170,224,224, 96, 72,165, 82,124,254,249,231, 83, 0, 88,109,176, 72,116, 52,215, -172,196,101, 52, 35,225, 6, 2,180, 3,165, 0, 37,220, 21, 24,141, 7,242,156, 11, 55, 81, 43,242, 14, 0, 33, 33, 33,211, 9, - 33, 99,106,122, 80,109, 60,127,254,252, 23, 15,115, 48,124,248, 26,155, 71,169, 96, 43, 80,130, 74,157,196,248,211,113,231,171, -193,193,193, 33,211,167, 79, 71, 84, 84, 20, 4, 65,192,137, 19, 39,166, 46, 93,186,116,170,167,167,103, 2,203,178,155,164, 82, -233,246,212,212,212, 7,186,113,123, 0,227,163,186,117, 91,248,202,180,105,108,213,137, 19, 88,246,245,215,159,163,188, 28, 0, -214, 53,209, 80,144,136,136,206,195,236,237,201, 0,134,160, 51, 5, 37, 4,228, 82,113, 9, 14, 36, 36, 92,248,137, 82, 42, 60, -104,153,132,133,133,237,160,148,246,171,217,206,175, 9, 9, 9,195, 31,166,140,187, 6,147,168,192,150,158, 31, 78,122,225, 73, -188,187, 96,203,164,110, 29, 73,161,210, 70,186,230,217,110, 1,142, 65,254,142,248,104, 93,236, 20, 0, 15,108,176, 8, 33, 42, - 55, 55,183,184, 93,187,118,121, 69, 70, 70,114, 0,144,144,144, 48,122,208,160, 65, 61, 9, 33,225,148,210,138,191,227, 66,211, -165, 75, 23, 5,207,243, 19, 88,224, 41, 74,105,251,154,180, 94, 53, 3,191,113, 28,183, 62, 54, 54, 86, 39, 94,142, 69, 68, 68, -254, 85, 6,139, 16,194,118, 8,106,189,120,194,196,215,219, 14, 27, 54,204, 83,169,178, 83,164,167,223,202, 94,191,118,181, 3, - 75,152, 78,132,144,105, 77, 53, 89,145,145,145,109,137, 32,252,240,198,184,113, 45,194,186,118,229,154,121,122, 66, 87, 86,134, - 91,215,175,251,196,159, 59,215,123,215,225,195, 83, 67, 67, 67,199, 36, 38, 38, 94,109, 72,167,176,176, 80,194,153,205,238, 71, - 62,253,148,101,156,156, 64,121, 30,124,219,182, 16, 4, 1,212,108, 6,119,250, 52, 96, 50,129,154,205, 48,246,170,158, 13, 68, - 16, 4,244,235,215,207,251, 65, 10,203,199,199,199,179, 85,171, 86, 27,102,205,154, 37,213,235,245,184,112,225, 2,206,156, 57, - 35, 20, 20, 20, 44,182,218, 84, 4, 15,105,235, 1,143,205, 67,134, 13,108, 62,168,143,155,204,215,195, 13,130, 32,199,245, 84, -147,207,161,147,231,251,252,178,255,224,219,205, 58, 12,121, 49,239,202,174, 6,243, 30, 17, 17,209,151, 97,152,185, 9, 9, 9, - 0,128,208,208,208,249,161,161,161,243, 27,219,190,141,141, 77,190, 70,163, 25,159,152,152,120,159, 9,154, 5,213,188, 41,175, - 67,160,192,151,251,174, 75,147, 87,239, 10,177,183,183,191,107,178,228,190,125,251,162, 79,159, 62, 72, 79, 79, 15,251,249,231, -159,195, 54,108,216,240,185,183,183,247,220,204,204,204,229, 77, 45, 79, 9, 48,245,149,105,211, 88,155,180, 52,216, 92,184,128, - 49,229,229,220,103,213,209, 44,171, 13, 86,120,120,120,203,190,125,130, 55, 13, 29, 22, 29,232,225, 17, 36,149, 72, 92,107, 38, -110, 46,110, 85, 80,144, 52,212,201, 9,239, 70, 70, 70,190,208,216, 36,194,117,142, 77,119,158,231,151, 3,144, 50, 12, 51,141, - 82,218,239,192,129, 3, 48,155,205, 24, 52,104, 80,191,240,240,240,150,130, 32, 44,182,177,177,161,122,189,254,141,184,184,184, - 38,205,215,199, 17,124, 60,234,153, 62,208,154, 24,152, 76,188,155,167,155,221,247, 83, 94,234, 41, 1, 53,224,219,221,231, 97, -226,133,175, 31,230,132, 86,171,213,243,191,251,238, 59,239,168,168,168,218,177,193,130,131,131,217, 69,139, 22,169,167, 78,157, -186, 16,192,196, 38,152,203,206,114,185,124,126,105,105,233,200,107,215,174,105, 58,190,177,211,141, 51, 41,237, 36, 74, 65, 31, -183,188,127, 86, 19,246, 81, 24, 71,200,230, 69,239,141,247, 8,236,216,137, 81,184,185,130,220,201, 71,137, 89,251,228,153, 43, - 73,221,191, 88,189,233,173,240,240,240, 23,226,227,227, 19,196, 75,178,136,136,200,191,198, 96,181,107, 23,240,226,248,215, 94, -107,251,250, 27,147, 66,141, 70,125,213,165,196,227, 71, 56, 41,195, 78,154,252,154, 67,113, 73,129, 43,165,194,139, 0, 54, 54, -193, 92, 5,120, 53,107,118,104,193,103,159, 57, 58,187,185, 33, 55, 55, 23, 25,153,153,200,185,114, 5, 4, 64,159, 62,125,100, -157, 59,117,242, 95,186,110,221,129,240,240,240,190,241,241,241, 73, 13,233,177, 28, 7, 98, 99,131,172,144, 16, 64, 42, 69, 89, -108,108,245,247, 60, 15,219,193,131,171, 87,146, 74, 97,188,116, 9, 12,195,192,221,221,253,129, 11,139, 82, 26,217,173, 91, 55, - 41, 0,188,251,238,187, 21, 26,141,102, 33, 33,100,107, 86, 86, 86,182, 53,255,119,235,252,108,128,187,171,251,193, 69, 31, 79, -112,234,224,231, 15,131,201,132,204,252, 44, 80,200,225,225,110,139, 49, 67, 59, 75,159, 8,147, 4, 44, 94,249,219,175, 30,157, - 6,247,201,189,180,167,222,188,179, 44,187,120,230,204,153,216,186,117, 43, 0, 96,243,230,205,104,221,186,117,163,105, 56,115, -230,140,251,123,239,189,183, 6,192,125, 35,120, 2,173,158,183,208,223, 63, 0, 14, 14, 14,245,153,110,248,250,250, 98,234,212, -169, 8, 9, 9,145,189,248,226,139, 31, 3, 88,254, 32,101, 90,117,226, 4,108, 46, 92, 0, 78,156,104,242,127, 67, 67, 67,125, -218,181,115, 57,186,120,209,135,174,123,246, 94,197,162, 69, 95,227,214,173,106, 31,229,239,239,143, 23, 70,143,148,108,250,126, - 93,187, 25, 51,230, 28,137,136,136,120,234,220,185,115, 55, 27,211,228,121,126,121, 76, 76,204, 32, 91, 91, 91,204,156, 57,243, -162,159,159, 31,236,237,237,177,110,221, 58, 56, 57, 57,129,231,249,139,159,125,246, 25,151,157,157,141,101,203,150,173, 1, 48, -204,218,244,118,239, 76, 6,134, 5,119,136,242,245,105,142, 99,103,206, 65, 42,147, 56,190,249,242,211,176,179,229,176,240,171, -125, 66,122,102,241,164,147, 23,233,183, 13, 62,240,140,220,206,118,214, 92,116,186,120, 64, 86, 76,233, 28,193, 18,193, 67,205, - 32,153,205, 60,213, 3,123,244,232,193,214, 28,175, 72, 75, 75,131,193, 96, 64,187,118,237, 24,163,209,216,163, 9,231,105,136, - 76, 38,219,111, 52, 26,149, 54, 54, 54, 42, 0, 26,206,164,180, 19,164,220, 8, 35, 21,146, 58, 78, 63,100,188,188,176, 79,129, - 53,230,170,109, 64,243,125,203,230,255,215,134, 45,248, 29, 26,114, 1, 37,121, 70, 96,241, 30, 48,246,110,120,242,221, 73, 92, -167,224,206,234,153,255,141,217, 23, 17, 17, 49,240,220,185,115,137,226,101, 89, 68, 68,228,159, 64,163,141,220, 89, 66,158, 24, - 58,116,152,155,193,160,213,232,116,154,210,219,119, 18,114,142, 28,217,112,229, 70,210,201,223,251,246,235, 98,100, 88,242, 68, - 3,134,228,174, 30, 6, 35, 71,142,100, 25,179,121,203,103, 11, 23, 58,178, 82, 41, 76, 38, 19,124,125,125,161,211,233, 80, 94, - 82,130,220,244,116,156,222,187, 23,154,194, 66, 76, 30, 51,198, 81, 66,200,230,208,208, 80, 73, 67,154,160, 20,224,239,174, 81, - 99, 24,230,174,168,139,229,187,251,205,207,119, 95,205,122, 16, 4, 33, 45, 59, 59, 27, 42,149, 10,109,219,182,181, 33,132,156, -201,204,204,204,182, 70,147,140, 28,201, 74, 36,236,246,133, 31,143,118, 34,236, 13,220, 72, 79, 0,199,202,225,226,224, 3,131, - 17, 56,149,248, 11,190,222,254, 1, 50,179,226, 48, 97, 76, 43, 7,165,146,254, 68, 66, 39,214,155,119,163,209,216, 34, 32, 32, - 0, 29, 58,116, 64,199,142, 29, 97, 54,155,113,245,234, 85, 92,190,124, 25, 23, 46, 92, 64, 98, 98, 34,226,227,227,113,246,236, - 89,156, 57,115, 6, 35, 39, 47,193,235,147,167,163,178,178, 18, 6,131,193,251,254,233,100,170,198,127,240, 29, 14, 39, 25, 81, - 88,162,195,182,109,219, 80, 92, 92,140, 45, 43,186, 97,237, 28, 79,172,157,227,137,239,151,132,160,164,164, 8,103,207,158,197, -194,133, 11,161,209,104, 96, 54,155,185, 7, 41, 79, 19,176,116,217, 55,223, 8,201, 39, 78, 32, 25,192, 6, 66, 4, 19,176,212, -170,242, 36,132,184, 56, 11, 63, 46, 93,250,129, 43,203, 92,131,179,195,103, 56,119,238, 52,242,242,242,144,151,151,135,184,184, - 51,112,114,252, 18, 28,151,132, 37, 75,230, 58, 59, 58,242, 63, 16, 66, 24, 43,210, 41, 77, 78, 78,134, 86,171,197,143, 63,254, -200,197,196,196, 32, 46, 46, 14, 74,165, 18, 99,199,142,197,242,229,203, 57,103,103,103,220,190,125, 27,149,149,149,164, 73,199, - 18,193, 43, 35,135, 13, 5, 43,181,193,245, 91,153,232, 25, 21, 2,119,119,119, 36,165,149, 32, 61,171, 56,143, 16,140,237,255, -132, 60,183, 71, 48, 25, 95,159, 38,221, 54,194,252,194,136,254,193,253, 95,181,127,213, 43,124, 66,167,154, 60,213,164,163, 29, - 71, 24,153,131,197, 92,221,188,121, 19,201,201,201,184,115,231, 14,238,220,185, 3,147,201, 84,111, 58,123,246,236,249,102, 84, - 84, 84, 73,120,120,120, 69,247,238,221, 55,177, 44,187,127,254,252,249, 42,133, 66, 97,224,157,124,109, 66, 39,254,230, 35,149, -200,120, 74, 24, 61, 53,227, 35, 73,133,212, 41, 96,202, 1, 89, 67,121,239,210,165,139, 66,194, 48,155,151,199,188,111, 99, 74, -216, 1,120,122,193,221,111, 2,108,157,162, 64, 75,181,224, 47, 38,163, 98,209, 74,112, 10, 1,239,255,119,134, 13, 17,132,239, - 3, 2, 2,100, 15,114, 44, 53,241, 65, 73,212, 20, 53, 69,205,199, 80,243, 95, 23,193, 34, 12, 28, 85, 42,165, 52,246,244,206, - 3,217,153,215, 10,115,242,174,148, 49,160, 76,118,118, 66,153, 95,171, 39, 93, 80,221, 38,203, 42, 82, 83, 83,159,159,250,250, -235,126, 14,213,145, 0,184,186,186, 34, 51, 51, 19, 58,157, 14, 85,229,229,208, 86, 86, 66, 95, 94,142,164, 35, 71,208,117,192, - 0,244, 11, 14,246,217,123,254,252, 43, 0,214,215,123,147,102, 24,240,157, 58,161, 44, 49, 17,196,104,132, 67,104,104,109,212, - 74,127,237, 90,181,177, 50,153, 32,121,226, 9, 16,149, 10,100,238,220, 7, 46,172,236,236,236,139,190,190,190, 7,251,247,239, -223,119,194,132, 9, 76,110,110,238, 46, 15, 15,143, 94,185,185,185,201,141,253,183,217,239,194,152,151, 39, 4,183,116,117, 32, -216,115,230, 87, 68,181, 29, 6,149,156, 67, 65, 73, 21, 24, 66,112,235,246, 97,152,205, 54,184,152,156,142,174, 29,108,208, 45, -210,222, 75,243, 91,201, 56, 52, 80, 93,166,211,233,144,159,159, 15,147,201, 4,158,231, 49, 98,228, 72,124,187,113, 35, 52, 26, - 13,116, 58, 29, 12, 6, 3, 4,161,186,249, 81,110,190, 14,113,231,247, 35,180, 99,253, 81,174,143,190, 52, 55, 83,171,213, 85, -223,238, 89,135, 67,135,170,231,112,222,181,107, 23,116,121, 41,120,235,249,234,166, 71, 75,191,253, 17, 75,151, 44,134,209, 36, - 88,140,222, 3,151,231, 77,224,235, 84, 65,152,209,127,199, 14,183, 51, 59,119, 10,103,247,236,201,146, 87, 84,124,101,205,127, - 35, 34, 58, 15,155, 52,233,233, 64,165, 66,137,204,244, 47,208,182,173, 20,211,166,186, 32,230,179, 66, 0,192,148, 73,222, 8, - 11,115, 65,121,233,118,184,186,207,198,187,211,134,249, 85, 86, 98, 52,128, 77, 13, 62,113, 48,204,180, 77,155, 54, 93,236,219, -183, 47,119,254,252,121,200,229,242,218,137,194,149, 74, 37,114,115,115, 97, 48, 24,176,117,235, 86,158, 97,152,105, 77,187, 34, -193,171,153,135, 55, 24,106, 66,118, 94, 33,134, 12,236, 11, 78,106,139,180,204, 66,116, 14,242,247,124, 97,240, 19,158, 44,225, -241,222,103, 63,188, 9,224,190,229, 16, 29, 61,143,123,243,131, 49,166, 55,219,180,176,223,123,240,244, 43,123, 24, 82,148, 87, -150,244, 5,126, 63,163,147,183,234,240,124,160, 31,140, 71,142, 28, 81,246,232,209, 3, 90,173,214, 18,237,196,166, 77,155, 4, -158,231,235, 13, 19,154,205,230, 25,223,125,247,157,204,213,213, 21,147, 39, 79,238, 51,126,252,120,101,104,104, 40,161,148,130, -202, 90, 57,152, 57,218,147, 7,127,142, 53,152,247, 66,202,246, 53,115,198, 49,142,102,118, 29,128,204, 6,162,129, 19, 22,126, - 50,165, 25, 85,230, 67,218,107, 0,152, 2,130,172,215,159,129, 80,161,131,113,254, 91, 16,168, 20,122, 3, 7,227,208,183, 32, -245,107,131, 73, 33,225,158,203,206,199,191, 6, 96,165,120,105, 22, 17, 17,185,135,112, 0,150,246,214,133, 53, 15,150, 46, 0, - 44,145,116, 55, 0, 6, 84,207,251,106,225,222,229,186,235,222,187, 92,247,115, 33,170,167,204,114, 3, 96, 6,112, 14, 64,201, - 3, 69,176, 8, 33,180, 78,100,224,238,129,177, 40, 41,204,204, 76, 45,214, 27, 75,116,253,163,187, 78,125, 58,210, 99,222, 43, -207,191, 57,199,193, 78,161, 76, 79,187, 69, 9,131, 34,107, 55, 38,151, 72,250,134, 70, 69, 73,114,115,115,225,224,224,128,172, -172, 44,252,254,251,239,208,233,116,208,148,149, 65, 95, 82, 2,190,168, 8, 40, 42, 66,218,137, 19, 8, 84,171,101,172, 21,211, - 88, 8,130, 0, 66, 8, 88,150,189,111,212,138, 97, 89, 16, 91, 91,192,214, 22, 96,154, 54, 50,133, 90,173,126,186,109,219,182, -199,212,106,245,140, 26, 67, 49, 53, 38, 38,166,136, 82,138, 25, 51,102,216,217,217,217,109,106,209,162,133,188, 49, 29, 91,103, -126, 88,100,199, 86,236,141,244,203, 8,107,253, 44, 90,120,246,192,173,172, 50, 20,148,233,144, 91,172, 65,155, 54,211,225,166, -158, 0, 7,143,215,113,233,122, 6,212, 30,126, 12, 35,145, 54,152,247,220,220,220,187,150,127,216,188, 25, 85, 85, 85,104,213, -170, 21,158,127,254,121,188,247,222,123, 24, 53,106, 20,212,106, 53,186,249, 3,227, 94, 28,129,252,252, 38, 53, 25,130,183,183, -119,237, 4,109,130, 32,128,231,121,152, 76,255, 51, 85, 6,131,193,106, 45, 15, 15,143,119, 61, 60, 60,226, 60, 61, 61, 19, 60, - 61, 61,127,206, 83,171,207,155,252,252,220,187, 13, 27, 70,130,158,123,142,205,176,177, 33,119,124,125,109,172,209,178,183,103, -250,135,133,117,147,149,150,124, 13,160,218,236,141,123,197, 13,167,142,183,199,233,147,161,152, 60,201, 31, 12, 81,128, 48, 82, - 84,105,126, 67,187,160, 14, 82, 59, 59, 58,160, 33,205,176,176,176, 29,130, 32, 92,109,223,190, 61,247,198, 27,111, 64, 46,151, -227,219,111,191,197,154, 53,107,176,100,201, 18,220,184,113, 3,190,190,190,240,244,244, 68,179,102,205, 56, 65, 16,174,134,133, -133,237,176, 54,255, 74,133,194, 69,166,112, 0, 43,181, 1, 39,145,160,185, 79, 11,176, 82, 27,148,148, 87, 97,236,115,131,113, -229,102, 14, 62, 89,179,135, 55,153,132,122,171, 91,143, 31,159, 99,254,121,223, 49, 83,101,165,134,123,102, 96,111,237,235,175, - 60,223,202, 73,225,255, 53,188,123,119,106,217,220,243,249, 15, 99,150, 27, 94,125,227,109,227,151, 27,190,162, 21, 21, 21, 40, - 47, 47,199,178,101,203,248, 61,123,246,100,155,205,230,233, 13, 24, 44, 25,203,178,160,148,226,213, 87, 95, 85,181,105,211,134, -240, 60, 15, 74, 41,100, 70,141,145, 17,208,134, 16,102, 56, 97, 89,163, 25,100, 19,161,108,119,129,231,164, 13, 70,191,129,167, -130, 58,117, 98,171,180,105,176,181, 15, 69,209,231, 31, 66,200, 45, 1,205, 47,135,153, 83, 65, 43, 40, 80,110,144,160,184, 99, - 8,178, 47, 38,195, 93,101,207,113,132,244, 22,239, 35, 34, 34,255, 46, 26,244, 32,255,195,141, 16,178,151, 16,178,119,214,172, - 89, 79, 2,112, 33,132,236,173, 49, 65,110, 53,159,101,150,117,234, 89,118,171,171,115,207,127,235,126,118,157, 53,107, 86, 47, - 66,200,222,174, 93,187,190, 88, 99,228, 30,125, 4,203,108, 54, 31, 93,181,106,117,179,215,198, 63,211,108,251,222,175, 98,126, -218,113,169,211, 11,163,114,175,169,189, 58,186,109, 90,125, 90,198,243,116,175,213, 91, 19,132,142, 46,205,154, 33, 45, 45, 13, -241,241,241,208,233,116,208,235,245,208,235,245, 48,150,148,192, 84, 90, 10, 82, 81, 1, 25,207, 67,151,158, 14,255,142, 29, 65, -128,118, 86,132, 42,235,173, 22,100, 89, 22, 68, 16, 64,108,108, 64,108,108,154,100,176,212,106,117,112,112,112,240,119,235,215, -175,151,190,243,206, 59,225,126,126,126,107,115,114,114,210,125,124,124, 6, 46, 90,180,232,196,199, 31,127, 44, 31, 51,102, 76, -235,245,235,215,191, 80, 95,196,193,130, 84,161,107,239,219,172, 53, 42,180, 17, 80,201,100, 40, 46,215,163,164, 66,143,194, 82, - 29,118,236, 26, 13,189,174, 10,188,222, 0,179,145,135,109,179, 97,104,229,252, 36, 64,111, 6, 53,164,121,246,236, 89, 92,189, -122,181, 54,130,165,211,233,208,191,127,127, 12, 27, 54, 12,105,105,105, 56,127,254, 60, 28, 28, 28,224,230,230,134,109,219,182, -225,242,229,203, 8,181, 68,248,154, 0, 43,119,193,138,205, 91,160,211,233, 64, 25, 91,208, 58, 53,203, 77,137, 96, 17, 66,198, -228, 12, 29, 26,128,227,199, 49,160,121,243,182,129,129,129,208,233,254,215,121, 44, 32, 32,192, 39, 51, 51,243,182, 90,173,222, - 66, 8, 89,159,149,149,117,169, 94, 45, 8,157,157,156,219, 33, 59, 35,166, 70,155, 3,129, 28,189,250, 92,132,209, 40,224,198, -245,254, 80,200,229, 96,136, 28, 60, 95, 4,123,135,102, 0, 72, 80, 35,199, 81,191, 3, 7, 14,192,222,222,190,182, 90, 16, 0, -158,126,250,233,105,182,182,182,221,116, 58,221,144,189,123,247,162,180,180, 20,126,126,126,112,119,119, 71, 92, 92, 92, 63,107, -243,111, 99, 99,231,204, 73,109, 32, 48, 28, 28, 28,156,192,201,108, 32,240, 28,204, 2, 96,231,224,138, 51,231,175, 35,233, 14, - 59,241,102, 42,182,213,159, 70,208,128, 1, 87,226,171, 52, 85,237,135, 60,211,215, 57,164, 83, 7, 93,204,220,247,236, 22, 44, - 89,251,201, 7, 51, 94,111,150, 85,174, 40,239, 51,101,127,254,207,191,206,109,177,104,201, 50, 69,126,126,190,201,168,215,237, - 23, 4, 97, 74, 67, 61, 8, 41,165,184,114,229, 10,236,236,236,144,146,146, 2, 23, 23, 23,152,205,230,234,135, 23,228, 87,152, -165,220, 22,214,196,127,195, 74, 20,107, 0, 99,178, 64,105, 91,202, 9, 82, 50,111, 30, 67,231,204, 17,234,209,108, 47,147,203, -161,209, 80, 84,156,222, 7,161,184, 10,180, 84, 11, 84, 25,160,209,178,168,168, 34,168,168, 18,160,237, 20, 6,243,193,179,112, - 42,211,129, 82,218, 81,188,221,136,136,136, 52,112,173,122,154, 16,178, 55, 38, 38,230,233,134,126,167,148, 62, 13,192,112,207, - 50,172,249, 12, 0, 11, 22, 44,248,180,206,114,213,159, 98,176,174, 38,221,218,214,161, 67,171, 32,111,111,167,214,161, 29, 58, -184,121,123,221, 42,119,117,243,182,251,229,192,101,101,126, 94,201,245,171, 87,111,254,220, 20,163,170, 45, 46, 70,246,165, 75, - 40, 47, 46,134, 86,163,129,174,162, 2,124, 73, 9, 60, 3, 3, 65, 43, 43,193,106,181,224,244,122, 72, 5, 1, 74,149, 10,248, -223, 12,247,247, 69, 34, 8,224,142, 30,133,237,176, 97,128, 84, 10, 67, 82, 82,181,217, 50,153, 32,233,209, 3,196,198, 6,140, -163, 35,200,190,125,213,223,219,217, 1, 95, 52, 62,154,129, 90,173,118,241,240,240,216,182, 98,197, 10,105, 97, 97, 33,174, 93, -187,118, 57, 53, 53,181,220,213,213,213,150,227, 56,225,250,245,235, 71,175, 95,191, 62,160,101,203,150, 48,155,205,254,141,233, - 85,150,218, 26,141, 38, 1, 89,249,119,144,153,115, 5, 14,182,205, 65, 25, 31,228, 21, 87,129,192, 29, 38,237,117, 8, 53,109, -201,244,218, 76,104,244,196,170, 2, 53, 26,141, 48, 26,141,224,121, 30, 6,131, 1, 47,189,244, 18,206,196,198, 98,243,174, 19, -200,200,200,128, 95, 51, 37,158, 31, 53, 2,157, 59,119,134,165,199,161, 53,134,181, 46, 45, 35, 22, 67, 38,147, 97,251,246,237, - 80, 85,239,147, 38, 27, 44, 79, 79,207,152,182,109,219, 6, 92,215,104,112, 45, 57, 25, 17, 35, 71, 2, 0, 78,157, 58, 85,187, -142, 86,171,197, 11, 47,188, 32, 75, 77, 77,125, 57, 57, 57,249,101, 79, 79,207,229, 57, 57, 57,179,234,211,220,183, 47, 22,175, -191,126, 13, 5, 5,213,145,221, 45,155,255,231,159,210, 82,141,232, 63,232, 0, 0,192,209,209, 17,139, 23, 91, 55,219,131,217, -108,198,186,117,235,106,171, 5, 1, 64, 38,147, 69,189,243,206, 59, 67,238,183,126, 80, 80,131,158, 13,110,110,110, 54, 50,153, -108,148,217,108,126, 49,168,165,153, 43,174,208, 2,188, 1,183,211,110,163, 84, 99, 4,229, 77, 72,207,204,129, 70, 47,160,168, -184, 2,161, 17, 3, 87, 24,248, 51,255, 85,171,213,179,179,179,179,239,251,240,114,107,255,114,131,115,192,148, 77,185, 5, 91, -102, 76,154,240,162,196,193,201,163,114,195,202, 79, 29, 24,194, 96, 79,162,169, 36,200,223,197,105, 72,212,242,202,137,111,191, -127, 81,111,190,253, 14,210,127,249,189, 38,220,221, 32,197,197,197,208,235,245,184,125,251, 54,148, 74, 37, 36, 18, 73,141,193, -178, 28, 24, 53, 31, 77,130,137,114,132,225, 76, 44, 51, 23,115,234, 63,217, 25, 6,184,157, 11,172,220,133,226,177,131, 96,250, -248, 45,152,121, 41, 42,203, 5, 24, 6, 77,130,193, 40,192,196,202,160,109,219, 30, 37, 31,205,135,222, 86, 9, 92, 57, 45,222, - 65, 68, 68, 68, 26,122, 80,223, 59,115,230,204,217, 86,174,126, 24,192,160,166, 24, 55,203,242,204,153, 51,103, 91,182, 21, 19, - 19,163, 5,144,221,212,180, 90, 21,206, 17, 4,233,234,131, 7,226, 36,140,132, 99, 90,250,218,148, 1, 6,156,139,207,178, 49, -153, 37,235,155, 88, 50,151, 83,126,255, 29, 84, 16, 80, 89, 90, 10, 93,113, 49, 76,249,249, 48,229,231,131, 84, 84,128,211,106, -193,233,116,144, 24,116, 80,112, 28,202,242,242, 64, 24,230, 90,163, 5, 83,167,241,174, 37,146,197,178, 44, 96,107, 91, 93, 53, -168, 82,253,175,186,208,202, 8,150, 92, 46,255,102,221,186,117, 30,158,158,158,248,234,171,175,224,225,225,209,230,169,167,158, - 42,236,222,189,123,222, 51,207, 60,147,240,222,123,239, 13, 8, 11, 11, 67, 97, 97, 33, 88,150, 77,105, 76,207,100,148, 95, 72, - 74, 49,163,160,240, 2,226, 18,191,193,222, 95,103, 33,249,246, 53,228, 20,105, 96,227, 62, 30,156,109,247,218,117,101,246,209, -200,203, 43, 4, 72,195,121,191,215, 8, 81, 74,113,233,210, 37,124,187,243, 12,212, 65, 79, 65, 98,227,134, 43, 87,146,112,236, -208, 65,120,123,123, 55,106,134, 62,124,141,205,123, 42,164, 12,135,182, 78, 64,254,205,111,172, 54,120, 86,158, 20,163,230,205, -155,135,178,215, 95, 7,182,109,131, 84, 90, 93,187, 20, 21, 21,133,240,240,112,124,244,209, 71,136,138,138, 2,203,178,104,213, -170, 21,134, 12, 25, 2, 66,200,168,122,243, 14,114, 73, 48, 23,193,223,255,127,222,246,219,239, 11,112, 62,161, 55,174, 93, 30, -140,157,187,115,106,191,111,222,188, 57,114,115, 83, 1,208,107,141,164,241,215, 65,131, 6, 97,239,222,189, 80, 40, 20, 80,169, - 84, 24, 54,108, 24,170,170,170,158,173,121,162, 1, 33, 4,132, 16,204,173,105,203, 87, 85, 85,165,111, 72, 83, 38,147,125,243, -218,107,175, 45,216,191,127,127,208,162,229,123, 12,135,126, 61,104, 58,112,240, 55,254,221,217, 27, 12,199, 78, 94, 48, 29, 57, -117,153,127,118,244, 52,227, 47, 71,174,240, 19,167, 44, 52, 44, 90,180, 8, 95,126,249,165,135, 68, 34,249,164, 33,221,146,148, - 21,149,201, 55,175,174, 92,190,118, 35, 43,147, 82,249,157, 2, 83,201,169,100,109,182,141,156, 72, 90, 55,163, 54,255,153,245, -241,237,156,220, 27,179,144,254,203, 77, 43, 47, 46, 40, 42, 42, 66, 97, 97, 33, 50, 51, 51, 81, 80, 80,128,194,194, 66, 80, 74, - 65,225,110,199, 26,249, 81, 96,153,159,205, 38,189,222,196,145,214, 0, 77, 53, 11, 70,195,156, 57, 16, 26, 16,189, 90, 85, 94, - 1, 70, 71, 33, 92, 72,131, 65, 80,160,204,192,161, 84,207,162, 66,103, 70, 57,145,162,130,145,163,184,107, 52,244,102, 22,229, -101,229, 32,132, 92, 22,111, 33, 34, 34, 34, 13, 25,161, 5, 11, 22,124,250,103,105, 91, 62,199,196,196, 92,173,179, 45,229,195, - 68,176,162,235,212,123, 70,223,187,210,181,107,215,242,250,247,123,202,125,249,170, 99,254, 70,131,153,223,245,203, 33,163,201, -104,171, 77,186,158,210,164, 6, 61, 70, 65, 56,152,152,144,208,191, 91,215,174,242,180,243,231, 97, 42, 41,129,185,164, 4, 18, -163, 17,156, 70, 3, 70,175, 7,171,213,162,121,176, 10,160, 30, 56,151,146,205, 27,205,230,195,141,154, 12,139,193, 98,217, 90, -115,197, 80, 10,198,214,182,186,106,208,206,174, 73,230,170, 89,179,102,170, 1, 3, 6, 68,135,132,132,128, 82,138,133, 11, 23, -194,104, 52,202,140, 70, 35, 76, 38, 19,140, 70, 35, 42, 42, 42,240,211, 79, 63,225,187,239,190,139,181,183,183,255,190,113, 19, -168, 63,120,228,244,197,126, 47, 13,235, 37, 59,116,108, 3, 76,122, 30,149, 58, 71,104,116, 6, 84,104, 37, 48,200,251,130,144, - 19, 96, 88, 57,186, 6, 7,224,232,169,223,117,130,201,120,168,137,206, 30,122,189, 30,249,249, 5, 40,174,252, 13, 40,203,132, -171,177, 2,149,183,111, 33,248,165,151, 27, 53, 67, 12, 3,213, 87, 31,191, 4,142,227,240, 83,108, 37, 56,142, 3,207,223,127, -204, 83,150,101,225,224,224,128,202,202, 74, 0,176,202,101,105,181, 90,108,222,188, 25, 81, 81, 81,232,217,179, 39,178,178,178, -144,146,146,130,129, 3, 7,214,174,115,241,226, 69,156, 63,127, 30,209,209,209, 13,106,149,149, 9,191, 22, 23,223, 28, 54,100, -200, 16,233,217,179,103, 65, 41, 69,235,214,142,176,183,179, 5, 97,228,104,215,206, 13,192,117, 16, 66, 16, 29, 29, 13,163, 49, -155,215,104,240,107, 67,154, 9, 9, 9,195,195,195,195, 91,242, 60,127,177, 99,199,142, 92,110,110, 46, 70,140, 24,129, 45, 91, -182, 88,158,104, 48,115,230,115, 61, 86,160, 0, 0, 32, 0, 73, 68, 65, 84,204,187, 35,147,149,149, 13, 26,172,208,208,208,224, - 41, 83,166, 72, 44,213,213,234,230,243,121,163,209, 40, 0, 64,219, 78, 61,254, 55,126, 92, 63,224,230,205,155, 88,188,120, 49, - 52, 26, 13, 88,150,149, 54,114,220, 83, 66, 72,126, 58,177,217,241,211,206,189,227, 7, 63, 61,132, 51,153,205,124, 7, 95,206, -254,199,159,246, 22,100,101,220, 89,141, 59,135,147,234,174,223,136,158, 33, 39, 39,199, 86,169, 84,226,242,229,203, 6,165, 82, - 41,245,240,240, 32,148, 82,240,156, 13, 39, 48,184, 1, 74,207, 17,179, 89,202,178,220, 40, 16,114,130,176,108,131,251,221, 12, -252,118,243, 90, 82,207, 86, 94,173,153,138, 99, 87, 81, 22,210, 29, 21, 26, 64, 83, 73, 96,150, 40,161,225,228,168,244,111,141, - 10, 23, 15,112, 96,144,157,145,102,226, 41, 61, 44,222, 66, 68, 68,254,117, 52,232, 65,238,141, 96,117,233,210,229,199,186, 81, - 38,203,103, 0,122, 0, 13,181,137, 46,168, 27,169,170,107,168,238,183,157,123,116, 31,204, 96, 81, 74,143,163,129,170, 56, 31, - 31,159,110,111,191,253,118,167,137, 19, 39,162,178,178, 18,223,126,251, 45, 86,175, 94, 13, 31, 31,159,110, 25, 25, 25,167,172, -221, 88,139, 22, 45,126,216,125,232,208,212, 78,129,129,173, 91,180,104,129,235, 55,111, 66,106, 52,130,227,121,176, 85, 85,144, -152,244,104, 17,102, 3,169,194, 21, 57,105, 85,248,241,234,213, 59,148,210, 6, 7, 94, 52, 49, 12, 12,253,250,129,191,113, 3, - 12,207, 67,218,171, 87,117, 91, 43,123,123, 48,187,118, 85, 27, 43, 65, 0,230,204, 1,181,177,129,240,212, 83,141,166, 51, 47, - 47,175,170, 85,171, 86,231,147,147,147, 67, 3, 3, 3, 49,111,222, 60,100,100,100,128, 82,138,252,252,124, 93,126,126,126,118, -113,113,113, 58,195, 48,187,179,178,178,190,177,102,164,240,188,214,204,166, 67,135, 14,191, 29, 22, 28,212,170,119,207,185,216, -187,247, 67,148,150,151, 67,163,231, 80,169, 53, 66,163,163, 80,219,249, 35,178, 83, 8, 10,138, 12,184,113, 53, 49,171, 64,234, -212,164, 65, 39, 9, 33,184,120,241, 34,154, 59, 3,215,174, 39,192, 85, 95,132, 64, 71, 91,132,116,235,142,212,212,212,251, 70, -189,254, 96,178, 8,192,243, 60,202,203,203,209, 53, 48, 16,121,121,121, 40, 42, 42,186, 43, 66,232,236,236, 12,149, 74,133,132, -132, 4,156, 60,121,210,196, 48,204,135, 86, 36,207,100, 48, 24,106,171, 42, 15, 31, 62,140, 94,189,122,161, 71,143, 30, 56,118, -236, 24, 18, 18, 18,112,254,252,121, 48, 12, 3, 63, 63, 63,203,144, 2,166,250,196,226,227, 47,237,176,183, 39,239,142, 29,251, -102,208,152, 49, 99,240,211, 79, 63, 98,220, 43,109, 64, 24, 57, 8,145,227,153,193,109,241,209,199, 9,136,140,140,134,171,171, - 20,135, 15, 95, 77,227, 56,135, 31, 26,143,214, 10,139, 63,251,236, 51, 78,161, 80,192, 96, 48,160,178,178,178, 54,255, 11, 22, - 44,192,172, 89,213, 53,150,115,230,204,193,220,185,115,161,211,233, 26,236,224, 96, 50,153, 40,195, 48, 36, 35, 35,195,168, 82, -169,136,179,179, 51, 39,151,203,161,215,235,107,141,214,205,155, 55,177,119,239, 94,100,102,102,194,217,217,153,113,114,114,130, -217,108,182,170,199, 74,113,242,119,251,118, 19, 12,234,214, 37,210,175,163,175,167,172,164, 40, 31, 59,118,239, 79, 50,166,252, -180, 31,213,213,130, 86,205,230, 78, 41,253,236,236,217,179,159, 80, 74, 57,149, 74,181,255,242,229,203,189, 53, 26,141,138, 82, - 10, 98, 78, 45,103, 12,145, 63,153, 9,199, 80,142, 29, 4,130, 86, 96,241,161, 84,166, 42,108,240,226,194,113,235,103,111,218, -249,214,151,107, 23,169,203, 53,101,208,206, 95, 7, 99,226, 53, 24,101,182, 40,250, 56, 6, 85, 6, 1,218,146, 74,216,125,185, - 10, 74, 15, 15, 28,171, 72,201, 47, 43, 47,255, 82,188,215,136,136,252,235,162, 82, 13,122,144,186,230,200,114,233, 3,144, 22, - 19, 19, 83, 88,167, 45, 86, 1,128,139, 0, 58,215,172, 87,112,207,255, 10, 0,196, 3, 8,175,163, 83, 80,199,104,213,253,108, -184,103,157,139, 15,146, 47,210,216, 13,215, 66,120,120,120,213,168, 81,163,160,213,106,145,153,153,137,125,251,246, 33, 59, 59, - 91,213,200, 13,255, 15,179,109, 71, 70, 70, 6, 56,217,216, 28,157, 60,124,184,147, 92,175, 71,102,108, 44,140,217,217,112,107, -217, 18, 50,137, 4,206, 45, 60, 81, 81,166,195,151, 87,175,150,167,150,151,247,190,119,160,209,186,154,209,209,209,114,163,209, - 88,176,123,247,110,182,180,180, 20, 12,207,131, 29, 54,172, 58,106,229,224, 0,118,227,198,234, 42, 29,179, 25, 88,186, 20,140, -173, 45, 84, 79, 60,129,158,179,102, 33, 49, 49, 81,213, 80, 58,189,188,188,188,124,125,125,227,126,249,229, 23,199,172,172, 44, - 60,243,204, 51, 23,203,203,203,251, 23, 22, 22, 86, 90,105,118,254,160,233,214,249,217, 0, 39,123,135,163, 99,199,142,117, 82, -201,205, 56,127,237, 10,238,148,184,195, 96,228, 97,111, 35, 67,100,160, 2,249, 69,122,252,186,127,111,169,190,170,184,239,189, - 3,141,214,213, 12, 13, 13,173, 26, 61,122, 52, 14, 30, 60, 8,131,193, 80,211,187,175,218,143,252,231, 63,255,193,153,227,199, - 80,145,118, 11, 93,186, 71, 99,192, 75, 99, 49,110,220, 56,156, 61,123, 22, 35, 71,142,196,181,107,215,106,243, 95, 87,211, 50, - 85, 14,111,102, 80, 80, 38, 51,103,104,186, 50,239,188,243, 14,201,185, 52, 3,218,202, 92,232,245,122, 72, 21,174,200, 53,143, -196,254,253,251,105, 81, 81,209, 14,137, 68, 50, 47, 61, 61,253,118, 99,121,247,246,246, 30,237,232,232,184,188,119,239,222,138, -154, 40, 33, 46, 95,190, 12, 74, 41, 78,158, 60, 9, 0,240,245,245,133,175,175, 47,114,115,115,145,150,150,166, 53, 26,141,255, -201,204,204,252,161, 62,205,136,136,136, 22,129,129,206,199, 7, 13, 26,238, 98, 52,154,208,231,169, 10,240,124, 33, 8, 35, 5, -199,185,227,228, 41,130,252,188, 98,156,137,141, 45,185,117,171,162,111, 92, 92, 92,114, 99,233, 12, 13, 13,221, 58,120,240,224, - 65, 10,133, 2, 63,253,244, 19,223,172, 89, 51,206,209,209, 17, 27, 55,110,172,215,212, 82, 74,235, 61,150,212,106,117,204,140, - 25, 51, 94, 31, 49, 98, 4,107, 54,155,205, 37, 37, 37,102, 0,196,195,195,131,141,141,141, 53,237,222,189, 27, 90,173, 22,222, -222,222, 12, 33,132,196,199,199, 11, 41, 41, 41,113,132,144,217,153,153,153, 87,234, 75,103,205,247,213, 3,140,186,244,117,111, - 30, 24,176,126,193, 71,115, 92, 63,248,100, 65, 89,202,229,107,175,160,232, 96, 65, 29,115, 69,239,141, 96,213,167, 89,231, 60, - 13, 17, 4, 97,191, 32, 8, 74,142,227,252,227,226,226,242, 67, 39, 30,245, 51,179,116, 36, 24,154,204,115, 36,238,234, 23,189, -242, 27,211, 12, 15, 15, 15,243,111,209,124,223,155,147, 39,219,148, 23,148,163,248,189, 79, 80, 97, 20, 80,244,238, 76,232,121, - 10,151, 31, 54,128, 83,218,225,152,180, 92,147, 87, 89,246,135,129, 70, 27, 75,231, 3, 93,244, 68, 77, 81, 83,212,124, 44, 53, -255,105, 88, 53, 23, 97, 77, 4, 11,175,191,254, 58, 42, 42, 42,240,227,143, 63,226,215, 95,127,109,114, 4, 11, 0,226,226,226, -110, 69, 70, 70,246,253,100,227,198, 31, 6, 5, 6, 54, 15,244,247,151, 58, 7, 5, 65,169, 82,161,180,168, 8, 23,211,114,204, -223, 93,191,126, 91,199,243, 47, 38, 38, 38, 38, 89, 17,113, 0,207,243,112,112,112, 0,229,121, 72,102,204, 0, 8, 1,101, 89, -232,171,111,126, 16, 40,133,164, 75, 23, 80,150, 69, 89,165, 85,254, 8, 89, 89, 89, 89, 62, 62, 62,163, 39, 77,154,244,203,183, -223,126,203, 68, 71, 71,119,218,189,123, 55,125,152,194, 46,184,248,211, 45,143,224, 33,125,151, 47, 95,189, 57, 36, 60,210,167, - 69,203,150,242,110, 62, 14, 48,154,204,200,203, 47,194,241, 51, 73,250, 27,215, 46,100,130,215,189,152,119,101, 79,131,121,151, - 74,165,105,142,142,142, 45,230,206,157, 11,158,231, 33, 8, 2, 76, 38, 19, 10, 10, 10,112,254,252,121,132, 70,117, 65,219,241, -175,162,184,184, 24, 95,125,245, 21,188,189,189, 49,112,224, 64,148,150,150,226,250,245,235,105,247,211,252,232, 75,115,179,186, -203,106,181, 58,120,252,248,241,243,167, 62, 87,209,253,221,241, 99, 65, 41, 69,204,186, 13,248,126,231,119,167, 0, 50, 59, 39, - 39,231, 66, 99,121, 14, 8, 8,144,233,245,250, 78,148, 82,174,180,180,116,101, 73, 73,201,152,217,179,103,123, 44, 89,178, 4, - 79, 60,241, 4, 50, 51, 51,145,154,154,138,192,192, 64,148,149,149, 33, 62, 62,222, 92, 89, 89,185,129, 82, 26,147,155,155,219, - 96,132,228,220,185,115,105,161,161,161, 79,230,229,174,249,225,141,215,251, 6,152, 76, 97, 50,123,135,238,160,148, 71,105, 73, - 6, 8,189,100,252,121,231,111,169, 21, 21,210,231,173,157, 42,135,227,184, 41,123,246,236, 1,106,166,202,201,206,206,190,106, -169, 90,190, 95, 4,171, 49,178,179,179,103,249,248,248, 28, 88,190,124,249,204,241,227,199, 71,142, 24, 49, 66,194,178,172,144, -149,149,197,255,240,195, 15,164,117,235,214,140, 92, 46, 39,177,177,177,194,213,171, 87,207, 82, 74, 63,203,202,202, 58,105,229, - 83, 31, 37,132,224,141, 17, 45, 35,211,210, 82, 10, 63,127,167, 79, 71, 95,103,231,164, 94,195,253, 34,202,203, 71, 29,217,178, -101, 75,213,253,204,149,149,231,233,249,176,176,176,126,132,144,249, 26,141,166, 10, 0, 4,153,161,130,209, 50,219, 9,203, 26, - 47,174,236,101, 85,243,128,248,248,248,132,240,240,240, 65, 51,166,207,216, 60,116,232,115,205,124, 94,121,129, 37,151,174,195, -168,144, 65,126,227, 6, 24, 91, 59,186,175, 44, 53,175, 66,194, 62, 31, 31, 31, 47,142,226, 46, 34, 34,242,143,193,234, 8,150, - 90,173,174,242,245,245,133,179,179, 51,138,139,139,113,231,206,157, 7,138, 96, 89,184,119,178,103, 66, 41,161, 86, 76,246,124, - 79, 4,139,211,235,245,169, 38,147,169, 73, 99, 84, 72, 36,146,130,179,103,207,182,176, 38,157, 94, 94, 94, 35,189,189,189, 63, -206,202,202,218,149,153,153, 57,227, 81,184,123,203,100,207,224,164, 3, 64,133, 14, 0, 8, 24,182,209,201,158,239,137, 96, 69, - 75,165,210, 21, 70,163,177,197,189,235, 25,141, 70, 20, 21, 21, 65,175,175,174, 54,150,201,100,112,113,113,129, 76, 38, 3,203, -178,105,102,179,121,178,101, 46, 66,107,158, 66, 62,255,143,164,234,157,113,227, 41, 0, 44,252,114, 61,185, 89, 69,157,191,249, -134,234,173,201,251,237,219,183, 91,217,218,218,142, 32,132, 12, 3,208,186,178,178, 82,255,193, 7, 31, 92, 58,118,236, 88, 69, -171, 86,173,250,244,237,219,151, 36, 37, 37,225,202,149, 43,180,176,176,240,103,142,227,230,101,100,100,164, 54,169, 60, 9, 97, -186,118, 13, 30, 97,103, 75,250, 11, 84,232, 84,243,221,213,202, 74,252,234,233,233,183,101,219,182,109,230, 7,125, 2, 11, 11, - 11,219, 81, 89, 89,217,239,198,141, 27, 15, 20,193,186,231, 65,165,187, 66,161,152, 53,102,204,152,136,103,158,121,134,137,139, -139,195,137, 19, 39,204,113,113,113,231, 76, 38,211,130,140,140,140,147, 77, 73,231,220,185,115,217,210,210,210, 30,130, 32, 12, -105,217,178,101,103, 15, 15, 15,187,188,188,188,146,219,183,111,159,163,148,254,226,236,236, 28, 59,119,238,220, 7,206,251,163, -124,162,173, 59,217, 51, 39, 8, 29, 76,132, 80,107, 38,123, 22, 35, 4,162,166,168, 41, 70,176,254,241, 6,171,166, 64,255, 11, - 96, 54,128, 79, 41,165,243,197, 3,229,223,161,249,233, 36, 82,204, 50,213, 13, 7,121, 1, 70, 62, 9,174,115,142, 81,222, 26, -205, 22, 45, 90,200, 77, 38, 83,103, 0,173, 8, 33, 14,148,210, 18,147,201,116, 40, 63, 63, 63,223,211,211, 51, 4,128,165,213, -248,130,156,156,156,243,143, 99,121,170,213,234, 51, 6,131,193, 95,175,215, 75,181, 90,173,132, 82, 90,219, 86, 64,169, 84, 22, - 86, 85, 85,249, 54, 69,179,198,104,189, 77, 41,133, 94,175,255,162, 62, 99,101,173,230,164, 73,147,134,212,172,227, 71, 8,185, - 14, 32,185,178,178,242,232,198,141, 27, 53,226, 49, 47,106,138,154,162,166,104,176,254, 30,184,166,172, 92, 99,170,230,139,197, -246,239, 98,246, 74,234,252,160,255, 77, 75, 75,211, 3, 56, 91,243,186,139, 26, 67, 53,226,113,207,127,118,118,118,215, 71,169, - 87, 99,168, 78, 62, 42,189,149, 43, 87,238, 2,176, 75, 60, 82, 69, 68, 68, 68, 30, 31, 24,177, 8, 68, 68, 68, 68, 68, 68, 68, - 68, 30, 45, 4,192,125,135,184,110, 74,232,143, 16,210,161,169, 27,110, 76, 95,212, 20, 53, 69, 77, 81, 83,212, 20, 53, 69,205, -127,158,102, 99,218,255,148,170, 71,242, 0, 29,140,172, 23, 23,235,167, 69, 77, 81, 83,212, 20, 53, 69, 77, 81, 83,212,252, 23, - 34, 86, 17,138,136,136,136,136,136,136,136,136, 6, 75, 68, 68, 68, 68, 68, 68, 68, 68, 52, 88, 34, 34, 34, 34, 34, 34, 34, 34, -162,193, 18, 17, 17, 17, 17, 17, 17, 17, 17, 17, 13,150,136,136,136,136,136,136,136,200, 99,195,159,218,139, 80, 68, 68, 68, 68, - 68, 68, 68,228,223,136, 24,193, 18, 17, 17, 17, 17, 17, 17, 17,249, 51, 12, 22, 33,132,214,125, 23, 17, 17, 17, 17, 17, 17, 17, -249, 43,248,167,122, 16, 49,130, 37, 34, 34, 34, 34, 34, 34, 34, 34, 26, 44, 17, 17, 17, 17, 17, 17, 17,145,255, 31, 6, 43,186, - 38, 52, 23, 45, 22,137,136,136,136,136,136,136,200, 95,200, 63,210,131,212,246, 34, 36,132, 80, 74, 41, 17,247,179,136,136,136, -136,136,136,200, 95,106, 70,254,129, 30, 68, 28,166, 65, 68, 68, 68, 68, 68, 68, 68,228, 17,243,167,182,193, 34,132,116, 16, 53, - 69, 77, 81, 83,212, 20, 53, 69, 77, 81, 83,212, 20, 13,150,136,136,136,136,136,136,136,136,136,104,176, 68, 68, 68, 68, 68, 68, - 68, 68, 68,131, 37, 34, 34, 34, 34, 34, 34, 34, 34, 26, 44, 17, 17, 17, 17, 17, 17, 17, 17, 17,209, 96,137,136,136,136,136,136, -136,136,252, 77, 16, 0,247,237, 9, 64, 41,189, 98,181,200, 3,244, 38,104, 76, 95,212, 20, 53, 69, 77, 81, 83,212, 20, 53, 69, -205,127,158,102, 99,218, 77,241, 31,143,181,193,250, 51,199,193, 34,132,116,120,212, 5, 37,106,138,154,162,166,168, 41,106,138, -154,162,230, 63, 79,243,159,134, 88, 69, 40, 34, 34, 34, 34, 34, 34, 34, 34, 26,172,191, 31, 66,200,104, 66,200, 46, 66, 72, 60, - 33,100, 55, 33,100,244, 67,104, 41, 9, 33,211,234,232,237, 36,132, 76, 37,132,200,197,146,126,172,143, 1, 86, 44,133,191,181, -252,137,183,183,119, 64,104,104,168,228,207,218, 70,104,104,168,196,199,199,199,239,207,220,198,163, 68,173, 86,183, 9, 10, 10, - 74, 84,171,213,109,196, 35, 68, 68,228,239,135,171,239,135,136,136,136, 27,102,179,217,187, 41, 98, 50,153, 44,243,204,153, 51, -245,158,220,225,225,225, 55, 4, 65,248,131,166, 68, 34, 17, 76, 38,211,125,205,158, 68, 34, 41, 56,123,246,108,139,199,232,194, -254,149,147,147,147,105,245,234,213,235,130,131,131, 3, 74, 74, 74, 52, 19, 39, 78,236, 77, 8,233, 69, 41, 29,223, 68,173, 32, - 66,200,134,240,240,240, 93, 83,166, 76,217,209,166, 77, 27, 59,173, 86, 43,219,186,117,107,179, 53,107,214, 28, 34,132,188, 78, - 41, 77, 22, 15,211,199,234, 38,214,153, 82,186,164,117,235,214, 33,106,181, 58,145, 16, 50, 53, 43, 43,235,178, 88, 50,127, 89, -249,251, 0,120,181, 93,187,118,207, 7, 6, 6,122,166,166,166, 26, 60, 61, 61,127,161,148,190,147,155,155, 91,248, 40,182,225, -237,237,237, 36, 8,194, 18,119,119,247,193, 17, 17, 17,178,148,148, 20,131, 90,173,222,195, 48,204, 59,153,153,153, 37,143,171, -185,138,140,140, 60,245,233,167,159,186,204,154, 53,235,148, 90,173,238,150,157,157,125, 67, 60, 98, 68, 26,163, 69,139, 22, 14, - 21, 21, 21,171, 25,134,233,172, 80, 40,154,217,217,217,193,214,214, 54, 79, 46,151, 95,114,112,112,120, 99,231,206,157,101, 98, - 41, 61, 98,131, 69, 41,245,248,237,183,223, 96,111,111, 15,179,217, 12, 65, 16, 32, 8, 2, 40,165,181,239,117, 49, 26,141,232, -215,175,159, 71, 67, 27,163,148,122, 30, 61,122, 20,118,118,118,119,253,175, 75,151, 46,204,169, 83,167,160, 80, 40,238, 90,223, - 96, 48,160,107,215,174,110,143,145,185, 26,229,226,226, 98,184,115, 39, 61, 82,103, 48, 70,190,249,238,188, 79, 70, 13,126,210, - 62, 54, 54,150, 25, 52,104,144,132, 16, 50,154, 82,250,131,149, 90, 74, 66,200,154,217,179,103, 47,150,202,109,221,182,237, 59, -201,101,175,254, 62,179, 83,144, 31,121,123,242, 27,170,201,147, 39, 39,180,109,219,118, 45, 33,164, 15,165, 84, 47, 30,170,143, -197,254,231,124,124,124,182,198,196,196,168,243,114,114,176,120,233,210, 8, 65, 16,190,192, 63,108, 6,248,199,185,252,189,189, -189,183,198,196,196,116,120,238,185,231,192,178, 44,116, 58,157,108,199,142, 29,195, 62,249,228,147, 39,188,189,189, 67, 30,214, - 0, 5, 4, 4,216,201,229,242,248,152,152, 24,143,225,195,135, 3, 0,170,170,170,100,219,182,109, 27,241,233,167,159, 62, 17, - 16, 16, 16,124,235,214,173,138,135,200, 3,227,226,226, 50, 5,192,147,130, 32,200, 1,196,149,148,148,124, 66, 41, 53, 62, 76, -186,157,156,156, 54, 45, 90,180,200, 69, 46,151,227,155,111,190,113,121,238,185,231, 78,170,213,234,238,162,201, 18,105, 8, 55, - 55,183,177,229,229,229, 75, 85, 42,149,212,209,209, 17, 74,165, 18, 82,169, 20, 50,153,204,199,201,201,201,199,214,214,182,223, - 11, 47,188, 48,117,243,230,205, 27,197,210,122,132, 6, 11, 0, 84, 42, 21,126,252,241, 71,112, 28, 7,169, 84, 10,137, 68, 2, -137, 68, 2,153, 76, 6,142,227,106,151,165, 82, 41,188,189,173, 15,118,237,222,189, 27, 14, 14, 14,176,183,183, 71,187,118,237, - 0, 0,114,185, 28,135, 15, 31,134, 84, 42,173,213, 14, 11, 11,251,203, 11,100,100,111, 82, 5, 0,219,190,104, 91,189,252,118, -117, 0,105,219, 23,109, 49,168,135, 13,158, 30, 61,255,133, 42,131,233, 9, 42, 16, 93, 78,177, 80, 60,127,233,186,164,206, 65, -129,100,219,182,109,193,174,174,174,207, 1,248,193,202, 77,189, 25, 17, 17,177,207,204, 40,220, 95, 26,251,202,152, 87, 24,194, - 15, 27, 59,237,211,211, 23,111,148,110, 8, 10,217, 82, 88,152,245,234,242,229,203,111,190,245,214, 91,111, 0, 88,106,109,250, -235, 70, 9, 89,150, 45, 82, 42,149,126,199,142, 29,227, 31,131,155,163, 39,128,249, 0,120, 0,139, 41,165, 55,234,252,214, 74, - 42,149,206, 55, 26,141, 37, 0, 62,161,148,102, 62,142, 39,139,183,183,119,155, 23, 95,124,209,165,168,160, 0,139,151, 46,181, -164, 61,132, 16,194, 82, 74,205,127,101, 90,194,195,195, 91,202,100,178,249, 0, 58,235,245,122,117,205,249,154, 45, 8,194,110, -173, 86, 59, 47, 49, 49, 81,251,128,251,201, 27, 64, 59, 84,247, 48,190,239,115, 82, 76, 76,204,205,153, 51,103,222,254,171, 53, -213,106,245,127,158,124,242,201, 14,163, 71,143,198,161, 67,135,112,244,232, 81,116,238,220, 25,125,250,244,193,157, 59,119,220, -214,174, 93, 59, 26,192,202,135, 41, 87,189, 94, 63,114,234,212,169, 30,195,135, 15,199,158, 61,123,112,244,232, 81,116,237,218, - 21, 3, 7, 14, 68, 90, 90,154,199,198,141, 27, 71, 2,216,208,196, 50,149, 3,152, 2,224, 73,150,101,187,143, 29, 59,150,159, - 60,121,178,132, 97, 24,211, 23, 95,124,225,182, 97,195,134, 81,174,174,174, 33,133,133,133,149, 15,154,238,146,146,146, 79, 62, -254,248,227,111, 87,174, 92,105,151,146,146,130,121,243,230,185, 78,154, 52,233,184, 90,173,238, 41,154,172,250, 97, 89,182, 76, - 16, 4, 9, 0,103, 74,169,190,177,229,127, 82,222, 93, 93, 93, 95, 43, 46, 46,254, 66,173, 86,195,205,205, 13,132, 84,159,158, -130, 32, 64,163,209, 64,171,213,194,207,207, 79,218,174, 93,187, 85,111,189,245,150,100,213,170, 85, 95,138, 71, 76, 19,175,167, - 0,122, 82, 74,143,215,185, 24,244,164,148, 30, 15, 15, 15, 47, 63,117,234, 20,183,119,239, 94,176, 44, 91,107,164,234,154, 42, -203,103,137, 68, 2, 15, 15, 15,244,238,221,155, 63,119,238,156,125,125, 27, 11, 13, 13,173,220,189,123, 55,147,146,146, 2,123, -123,123, 56, 56, 56,192,211,211, 19, 93,186,116, 65,108,108, 44,206,158, 61,123,151,113,107,223,190, 61, 34, 35, 35,145,152,152, -168,250,203, 74, 36,169, 93, 21,218, 37,169,234,185, 80, 94, 74, 74, 74,250,106,254,250,195,229,249,197,101, 5,173, 28,165, 85, -163,187,181, 81,249,121,185,200, 61,162,186,125, 65, 8, 41,160,148,134, 91,121,209,221,249,221,119,223,253,188,245,208,117,155, - 47,151,188, 55,129, 99, 8,255,238,156, 37,159,120,217,179,124, 51,150,215,132, 13, 24, 96,223,190,125,251, 87,109,108,108,204, -148,210,161,214, 38, 63, 44, 44,172,252,215, 95,127,229, 56,142, 67,239,222,189,205, 42,149,202,237,216,177, 99,127,251,133,129, - 16,178, 44, 47, 47,239, 85,157, 78,135,176,176,176,138,162,162,162,254,148,210, 75,132,144,246, 67,134, 12, 57,188,109,219, 54, -219,243,231,207, 35, 42, 42,106, 7,165,244,165,199,233, 36, 81,171,213,123, 0,244, 98, 89, 22,163, 70,142, 52,252,184,117,171, - 76, 16,132,106,103, 64,105,124, 78, 78,206, 95, 26,193, 10, 13, 13,109,163, 80, 40,142, 46, 94,188,216, 46, 40, 40,136, 72, 36, - 18,240, 60,143,223,127,255, 29,155, 54,109,210,157, 59,119, 46, 75,167,211,133, 37, 38, 38,154, 30, 96, 63,245, 59,126,252,120, - 85, 64, 64,192,125, 13,163, 70,163, 97, 91,181,106,229, 7, 96,227, 95,173,233,229,229,229, 37, 8,194,178,232,232,232,126, 39, - 78,156,184, 6,224, 99, 74,233,219,155, 54,109,138,178,177,177,193,179,207, 62,155,156,158,158,254, 80, 79,101, 62, 62, 62, 39, -207,158, 61, 27, 82, 81, 81,129, 94,189,122, 37,114, 28,247, 1,207,243, 31,111,223,190, 61,148, 97, 24, 60,247,220,115,231, 51, - 50, 50,186, 55, 33,239, 65,114,185,124,227, 15, 63,252, 96,235,239,239,239, 47,149, 74, 25,127,127,127, 20, 23, 23, 67,167,211, -193,221,221, 29,243,231,207,191,184,108,217,178,180,138,138,138,225, 15,120,124,182,137,136,136, 56,245,209, 71, 31,185, 36, 37, - 37,161,117,235,214, 40, 40, 40, 64,106,106, 42,150, 47, 95,158, 87, 81, 81, 17,253,119,153, 44, 66, 72, 46, 0, 59, 0,158,148, -210,242, 71,164, 39,179, 44, 75, 36, 18,200,229,114,200,229,114, 40,149, 74,164,166,166,238, 98, 89,118, 34, 0,171,142,125,142, -227,202,205,102, 51, 7,224, 73, 0, 9, 44,203,150, 54,180, 76, 41, 21, 30,131,107,169, 23,195, 48,159, 83, 74,123, 2, 96, 8, - 33, 39,221,221,221,167,231,228,228,164, 91,171,225,229,229,229, 92, 88, 88,152,234,230,230, 38,113,119,119,183,152, 77,132,133, -133, 65,167,211,225,234,213,171,176, 92,227, 66, 67, 67,209,177, 99, 71, 83, 89, 89,153,223,172, 89,179,138,255,132,252,220,215, -131,252, 19, 12, 22, 3,224,152, 37, 83, 53,223, 29,179,252,104, 54,155,239, 50, 81,117, 95,117,141,144, 68, 34, 1,195, 88,213, - 94,158, 24, 12,134, 90,115,101,111,111, 15,137,164,186,253, 40,207,243,127,208, 52,155, 31, 60, 40,224,228,228,180,155, 16,242, -212, 35, 46,175,148,130,130, 2,227,224,238,173,229,146,242,130,226,151,158,104,229,208, 49,192, 43,200,221,187,249,112,141, 70, -147, 8, 32,183, 41,215,197,118,237,218,217, 21,230,231, 22,189,240,159,133, 49,211, 63, 93,179, 32,188,149,151, 93,247,192,150, - 30, 93, 59,181,109,225,106, 50, 49, 42,149,170, 29, 0,117, 83, 19,233,224,224,128, 35, 71,142, 60,110,199,154,163, 86,171, 69, -113,113, 49,214,174, 93,107,231,226,226,114,128, 16,242,194,144, 33, 67,126,219,190,125,187,109, 89, 89, 25,140, 70, 35, 0,232, - 30,195,243,100,129,147,147,147, 97,232,208,161,248, 97,203, 22,153, 32, 8, 26, 0, 26, 0,185,132,144,119,254,234,196,200,229, -242,183, 63,249,228, 19,187,160,160, 32, 82, 88, 88,136,236,236,108, 20, 22, 22,194,213,213, 21,239,190,251,174,162, 85,171, 86, -106,185, 92, 62,253, 65,175,119,245, 25, 33, 0,176,177,177, 49,163,233,157, 99,238,171,201,243, 60,137,138,138,154,218,169, 83, -167, 47,173,209,204,202,202,202,202,201,201, 25,126,226,196,137,177,102,179,249,149,172,172,172,125, 0,150,237,222,189, 27,142, -142,142,104,215,174, 93, 91,111,111,239,128,135, 48,210,222, 97, 97, 97, 33,158,158,158,216,182,109, 27, 24,134, 89,153,145,145, -113,146, 97,152,149,123,246,236,129,155,155, 27,218,182,109, 27,162, 86,171,173, 10,215, 19, 66,228,114,185,124,227,205,155, 55, - 3, 7, 15, 30,220,170,188,188,156, 81,171,213,176,236,179,244,244,116, 92,186,116, 9,227,199,143,119, 55,155,205, 93,173, 53, - 83, 61,123,246,204, 24, 49, 98, 68,209,179,207, 62, 91, 52,124,248,240,162, 65,131, 6,157,251,230,155,111, 92, 44,215,209, 89, -179,102, 33, 37, 37, 5,142,142,142,120,229,149, 87,154, 41,149,202, 77,143,193, 57,148, 35,145, 72,170,156,156,156,236, 31, 82, - 71,102,121,113, 28, 39,147,201,100, 50,133, 66, 33, 83, 40, 20, 50,185, 92, 46,251,199, 71, 68, 8, 81, 19, 66, 18, 57,142,235, -239,232,232,104,239,236,236,108,235,227,227,211,219,223,223, 63,254,149, 87, 94,241,181, 86, 71,171,213,110, 80, 42,149, 18, 55, -183,234, 22, 56,125,251,246,197,166, 77,155, 48,106,212, 40,161,111,223,190,194,200,145, 35,209,172, 89, 51, 0,192,197,139, 23, - 33,147,201, 36,182,182,182, 27,254,164,108,213,235, 65,254,191,195,221,147,201,187, 66,248,130, 32,212, 70,175,238,103,170,234, -190,172,197,108, 54,195,195,195, 3, 42,149, 10, 42,149,234,174,109,221,171,249, 48, 99,116,181,106,213,170,167, 74,165,234, 74, - 8, 25, 73, 41, 61,106,237,255, 70,190,157,140,109,135,235,253,121,239,219,111,191,221, 47, 54, 54, 86, 31,217,193, 95, 80,100, -103, 20,171,156,220, 58, 48,174,110,189,222,154, 48, 49, 14,192,214,166, 92,112,180, 90,173,172,165, 39,171,205, 42,171, 52,180, -180,113,112,108, 97,167, 84,181,116,115,112,118, 84,200, 25, 27, 47,119, 79,147,201, 84, 6, 32,167, 49,161,186,213,130, 10,133, -194, 64, 8,225, 28, 29, 29,225,224,224, 96, 44, 41, 41, 41, 14, 13, 13,133, 76, 38, 43,146, 74,165, 86, 87, 23, 70, 68, 68,164, -153,205,230, 6,219,191, 73,165,210,130,216,216, 88,107, 59, 32,204,235,220,185,115,247,213,171, 87,187,182,110,221, 26,107,215, -174,181,219,190,125,251,250, 77,155, 54,161,180,180, 20,183,111,223,198,184,113,227, 42,208,132,234,208,191, 10,103,103,231,195, - 35, 70,140,192,134, 13, 27, 40,165,148, 0,176, 97, 24, 38,210,222,222,254,247,107,215,174, 25,255,134,139,108,239,192,192, 64, - 82, 86, 86, 6, 74, 41, 88,150,189,235, 53,125,250,116,229,248,241,227,103,116,237,218,245,109,137, 68, 82,193,243,252,246,170, -170,170,207, 46, 94,188,248, 88, 53, 86,237,209,163,199,164,140,140,140, 1,190,190,190,191, 52,229,127, 89, 89, 89,219, 45,159, - 41,165, 87,114,115,171,159,107,148, 74, 37, 0, 40, 30,162, 92, 21, 14, 14, 14, 0,128,140,140, 12, 0,176,116, 94,184,156,157, -157, 13, 0,176,181,181, 5, 33,196,218,109, 76,217,182,109,155,157,167,167,167, 82,171,213, 34, 37, 37, 5,161,161,161,168,168, -168,128, 70,163, 65, 85, 85, 21,140, 70, 35,202,202,202, 28,205,102,179,193,202, 99,113,211,170, 85,171,188,219,182,109, 11,158, -231, 97, 50,153, 64, 41,197,241,227,199,161,209,104, 96, 50,153, 16, 24, 24,136, 5, 11, 22,232,222,122,235, 45,197,214,173, 91, -243,181, 90,237,152,191,123, 95,179, 44, 11,185, 92, 14,142,227,114,154, 55,111, 14,134, 97,156,211,210,210, 30, 36,178,238, 1, - 32,151,227, 56,153, 92, 46,135, 66,161,128,229,253,234,213,171,219,155, 18,189,170, 57,126,104, 83,150,255,246,136, 8,195,124, -206,113,156,204,197,197, 69,106,249,206,104, 52, 74,157,156,156,224,227,227,179, 4,192, 48, 43,165, 58,185,186,186,130, 16, 2, -169, 84,138,215, 94,123, 13,241,241,241,187, 51, 50, 50, 94,203,207,207, 71,101,101,229,151,246,246,246,207,228,231,231,195,108, - 54, 35, 45, 45, 13,157, 59,119,238,244, 39,103,239, 15, 30,228, 31, 97,176, 44,206,177,142,131,172,215,244,212, 53, 89,117, 63, - 91,121,146, 9,207, 63,255,252,125,187,183,243, 60,127, 87,251,171,135, 53, 88,114,185, 28, 3, 7, 14, 84,168, 84,170, 45, 53, - 38,235,129, 67,142,109, 61, 21,205, 57, 72,190,125,186, 87,143, 78, 19,222,126, 87,210,171, 87,175, 95,118,238,220,217,217,173, -199,147,253, 79,252,182,197,125,221,204, 61,191,252,248,227,143,149,214, 54,112,175, 33,118,199,142, 29, 30,239, 78,126, 67, 26, - 29, 29,189,115,108,231,105,156, 90,110,182,117,148, 73, 89, 27,150,101,228,222, 45,250,252,118,252, 68, 46,128, 83, 86, 92, 36, - 60, 14, 31, 62, 12, 71, 71, 71, 0,144, 25, 12, 6, 56, 58, 58, 98,237,218,181, 10,123,123,123,216,219,219,163,107,215,174,142, - 82,169,148, 67,117, 27, 40,107,140,176,219,241,227,199, 97, 99, 99, 3,141, 70, 3,189, 94, 15,158,231, 65, 41, 5,199,113, 80, - 40, 20,232,217,179,167, 91, 19, 46,100,169,132,144, 62,111,190,249,230,161,213,171, 87,187, 6, 4, 4, 96,222,188,121, 40, 42, - 42, 66,122,122, 58,198,140, 25, 83,145,154,154,218,191,110,219,172,199,129,142, 29, 59, 86,157, 62,125, 26,251,247,239,199,224, -193,131,201,238,221,187,141,102,179, 89,154,153,153,121,245,239, 74,147,217,108,182,149,201,100, 48,153, 76,224, 56, 14, 44,203, -214,190,179, 44, 11, 47, 47, 47, 28, 58,116,136,171,170,170,226,138,138,138, 84, 95,125,245,213,235, 9, 9, 9,205, 0,188,242, -119,150,229,218,181,107,125, 94,125,245,213, 76,142,227,232,128, 1, 3,158,191,115,231,206, 96, 79, 79,207, 99, 71,142, 28, 89, - 14,160, 85, 83,245,186,118,237,154,230,238,238,238,150,159,159,143,239,191,255, 30,249,249,249,112,113,113, 57, 27, 26, 26,122, -247, 69,142,227, 10,226,226,226, 26,125, 16,240,246,246, 62,156,147,147,131,149, 43, 87, 34, 39, 39, 7,110,110,110, 23, 67, 67, - 67,225,230,230,134,252,252,124,108,222,188, 25,197,197,197,240,244,244, 60, 12,160,185, 21, 73,140,142,140,140,244, 45, 45, 45, -133,131,131, 3, 42, 43, 43,145,144,144,128,160,160, 32,100,103,103,131, 97, 24, 56, 58, 58, 98,205,154, 53, 85,132, 16,171,170, - 94,138,139,139,199,188,244,210, 75,199,246,236,217,211,204,195,195, 3, 5, 5, 5,208,106,181,240,245,245,197,242,229,203,209, -188,121,115, 28, 62,124,184,216,108, 54,191,186, 97,195,134,247,181, 90,237,152,191,187, 13, 22,195, 48,181,213,120,117, 76, 81, -113, 84, 84, 20, 78,159, 62,189,181, 41,166,136, 82,106,176, 84, 11, 42, 20,138,218,151, 92, 46, 7,195, 48,194, 3,156, 75, 14, -132,144, 78,150, 27,123, 99,203,127, 55,148,210,238, 54, 54, 54,210,123,191, 47, 41, 41,145,182,105,211,166,171,181, 58, 10,133, -194,185,230,129, 4, 61,123,246, 68,126,126,190,217,207,207,239,229,145, 35, 71,154, 0, 96,226,196,137, 47,231,231,231, 23,155, - 76, 38,150,227, 56, 20, 20, 20,192,223,223,223,249, 79,124,104,188,175, 7,249,127,111,176, 40,165,132, 16, 66,235,190,215,217, -153,141, 70,174, 44,191, 89, 83, 69, 40, 8, 2,173,167, 23, 97,173,153,123,148, 6,203,209,209, 17,163, 71,143, 86,101,101,101, -173,183,246, 2,110,105,220, 94,215, 92,169, 93,154, 29,249,236,211,121, 30,183,246,127,141, 47,151, 45,228,227,226,226,118,123, -120,120, 12, 5, 80,225,225, 2,247,220, 34,252, 76, 41,221,210,132,131,137, 1,240,211,217,179,103, 99,251,245,235, 23,119,251, -246,109,199,212,155, 55, 99,237,180,101, 26, 59, 95,127, 94,234,230,254,180,214,104,226,158,125,246, 89, 57,128, 53, 86,232, 65, - 16, 4,236,219,183, 15,118,118,118,176,183,183,135,163,163, 35, 44,230,234, 65, 73, 73, 73, 65,102,102, 38,108,108,108, 96, 99, - 99, 3, 91, 91, 91,216,218,218, 66, 38,147, 89,162, 5, 77,189, 56,220, 36,132, 76,223,177, 99,199,198, 79, 63,253, 20,165,165, -165,168,170,170,194,156, 57,115,144,146,146, 50,157, 82,122,233,113, 58, 57, 58,117,234, 84, 21, 27, 27,139, 83,167, 78, 65,163, -209, 96,229,202,149,240,244,244, 28, 8, 96,230,223,153, 46,179,217, 44,101, 89, 22, 12,195,128, 97,152, 63, 68,176, 44,102, 75, -169, 84,194,213,213, 21,179,102,205,146, 14, 25, 50,100,192,223,153,230,207, 63,255,220,127,217,178,101,107, 54,110,252,191,246, -174, 61, 44,170,106,125,191,107,239,153,217,115, 31, 96, 8, 21, 68, 81,188, 43,222, 64, 80,209,163, 89, 26, 37,106,166,233,201, - 52,181,204,159,151,227,229,104, 94,210, 99,146,149,104, 94,211, 82, 56,105,105, 90,106,101, 90,222, 45,237,162, 8, 2,134,154, - 34, 34,129,220, 70,238, 66, 48,204,109,207,172,223, 31, 48,132, 38, 58,131,122, 24,109,191,207,195,179,103,239, 61,188,179,246, - 90,107,175,245,174,111,125,223, 90,219,142,141, 27, 55,238,235,139, 23, 47,142,211,104, 52,191,125,255,253,247, 43,165, 82,105, -189,252, 90, 76, 38,147, 87, 82, 82,210,159, 38,210,183,223,134,213,106,133,213,106,173,177,238,232,245,122, 12, 29, 58,212,161, -129,128,197, 98,241, 60,114,228, 8, 0, 96,198,140, 25, 53,131,204,218,124,147, 39, 79, 70,120,120,184,167,131, 73,244,241,240, -240, 16,103,102,102,130,231,121, 4, 6, 6, 98,243,230,205, 24, 61,122, 52, 2, 2, 2,240,199, 31,127,224,210,165, 75,216,182, -109,155,135, 68, 34, 25,233, 8, 97,110,110,110,138,143,143,207,147,131, 7, 15,254,229,155,111,190,121,162,121,243,230, 56,127, -254, 60,116, 58, 29, 2, 2, 2,176, 98,197,138, 10, 74,105,159,106, 81,181,223, 5, 44, 46,183, 8, 33,185, 92,126,139, 56,170, - 15,120,158,111, 34,149, 74,111, 84, 79, 13, 66, 42,149, 34, 33, 33,193,105,235, 85,173,118,233,188, 51,231, 13, 9,123, 59,108, -177, 88,254,114,189,109,219,182, 14,243,168, 84, 42, 98,239, 99, 45, 22, 11,116, 58,157,245,226,197,139,214,192,192, 64, 0,128, -183,183,183, 53, 54, 54,214,106, 52, 26, 89,123,127,237,230,230,246, 80, 68,230,221, 52,200, 99, 97,193, 2,240,243,109,199,154, -198,197, 46,120,234,178, 92,217,207, 29,244,193,130, 72, 36,194,222,189,123,107,252,176,186,118,237, 90, 35,230,110,231,181, 71, - 53,212, 7, 28,199,193,205,205, 13,199,142, 29, 51, 36, 37, 37, 77,175,175,229,202,199,179,241,137, 53,171, 34,155, 20, 93, 62, -131,236,220, 60,164,254,150,125,130, 82,250, 57,128,207, 1,216,157,226, 29, 22, 87,157, 26, 41,187,244,106,219,100,207,128, 65, -207,250, 12, 31, 63,141,153, 62,125,122,207,241,227,199,151,140, 31, 63,126,170, 76, 38,235,100,181, 90, 75,126,248,233,167,204, -145, 35, 71,106,203,202,202, 38, 83, 74, 43, 29,104,196,110, 60,243,204, 51,190, 0,160, 86,171, 77,159,124,242, 9,231,238,238, -142,151, 95,126,217,112,227,198, 13, 89,117,126,220,116,212,122,101, 31,245, 79,154, 52,201,235, 30,121, 92,224,228, 40,165,235, -144, 33, 67, 62,220,189,123, 55,138,138,138,160,215,235, 33,145, 72,176,106,213, 42,100,101,101,173, 38,132, 92,114,149,198,172, - 91,183,110,250,184,184, 56, 92,184,112, 1, 70,163, 17,175,191,254, 58, 40,165,246, 57,237,161, 13,156, 60,146,157,157,141, 29, - 59,118,192,106,181, 98,236,216,177,104,209,162, 69,141,192,186,113,227, 6, 62,249,228, 19, 88,173, 86, 76,154, 52, 9,205,155, - 55,135,197, 98,145, 61,249,228,147,162,134,138, 40,157, 51,103,206,239,223,124,243,205,177,236,236,236,103, 86,174, 92,217,151, - 16, 98,155, 55,111,222, 26, 55, 55,183,251,138,190, 44, 41,253, 3, 87, 82,175,131,231,249, 59,254,121, 61,161,117,154,239,106, - 90, 38,120,190, 74, 84,241, 86, 30, 86,158,175, 62,183,192, 83,235, 20, 95, 78,113,113,113, 91,150,101, 37,169,169,169,240,243, -243, 67, 72, 72, 8,150, 47, 95,142,130,130, 2,240, 60,143, 70,141, 26,217, 44, 22,203, 57,147,201,244,179,163,164, 58,157, 78, -223,170, 85, 43,195,171,175,190, 74, 63,252,240, 67,162,209,104,112,237,218, 53,136, 68, 34,168,213,106,125,114,114,178,203, 88, -129,107, 91,174,164, 82, 41, 56,142,131, 84, 42,181, 91,174, 8,128, 67, 0,156, 18,216,148, 82, 83,179,102,205,106, 44, 87,245, -181, 94, 61, 44, 60,204,200,196,246,237,219,255,162, 82,169,158,187,114,229, 67,230,199, 23, 0, 0, 32, 0, 73, 68, 65, 84,202, - 45, 86,172, 49, 99,198,152, 91,183,110, 29,227, 40,143, 90,173,190,201,113,156,214, 96, 48,224,204,153, 51,232,208,161,131,164, -180,180,116, 25, 33,100, 73,245,224,114, 89, 94, 94,158,164,105,211,166,246,223, 69,105,105,233,205,102,205,154, 61,172,108,187, -163, 6,121, 44, 4, 86,117, 52, 66,205,241,118, 11,214,189,166, 7, 29,181, 96, 17, 66, 80, 94, 94, 14,149, 74,133,234,197,204, - 80, 43, 26,235, 47, 83,132,247, 35,176,100, 50, 25, 78,158, 60,105,136,142,142, 30, 75, 41,253,222,209,255,171,237,131,213,248, - 9,175,253,107,222,175, 18, 87,231, 79, 29,199,151, 73, 55,114, 9, 99,251,119,125,211, 20,208, 72,217,185,177,151,231,209,181, -171, 87,168,115,226, 14, 99, 79,244, 90,122,254,236,217,190,103,207,158, 29, 62,109,218, 52, 15, 84,249, 91,229, 2,136, 1,176, -201, 17,113, 5, 0,113,113,113, 53,139,187,134,132,132,148,105, 52, 26,168, 84, 42, 20, 20, 20, 72, 84, 42,149,182, 62, 81,132, -142, 76,169, 56, 41,174,218, 12, 29, 58,244,216,215, 95,127,173,188,121,243, 38, 50, 50, 50, 48,127,254,124,124,244,209, 71,208, -104, 52, 56,112,224,128,106,200,144, 33, 71, 9, 33, 3, 26,122,113,213,238,221,187,235,227,227,227,145,158,158, 14,158,231, 49, -124,248,240,218,226,170,193, 97,179,217,232,236,217,179,241,241,199, 31,131, 97, 24,140, 31, 63, 30,101,101,127, 6,104,105,181, -218, 59,221, 99,171,223,247, 6, 17, 88, 34,145,136,254,244,211, 79,107,251,247,239,143,236,236,236,103,122,244,232,177,121,226, -196,137,185,247,203,235,225,166, 70,183, 78,173, 96, 52, 26, 97, 52, 26,225,227,227,131,242,242,114,164,166,166,194,104, 52,162, -113, 35,119,167,249,186, 7,180,129,201,100,130,209,104, 68,163, 70,141, 80, 81, 81,129,244,244,116, 24,141, 70,120,121,121, 56, - 67,247,211,169, 83,167,252, 6, 14, 28,216,254,210,165, 75,248,249,231,159, 97, 50,153,208,189,123,119, 92,189,122, 21,189,123, -247, 70, 89, 89, 89, 92,124,124,252,183, 78,188, 71,205,194,194,194, 78,126,254,249,231,158, 59,119,238, 52, 77,152, 48,129, 91, -190,124, 57, 33,132,160,162,162, 2, 46,230, 50,244, 23,129,149,152,152,248,149, 88, 44,166, 0,234,101,109,178, 35, 43, 43,203, -163, 75,151, 46, 37, 82,169,148,139,137,137,217, 83, 95,235,213, 67, 25,253,252,217,113,117, 33,132, 36, 84, 11,201, 58,207,157, -137, 76,108,215,174,221,124,111,111,239,167, 2, 3, 3,113,249,242,101,137, 84, 42,197,184,113,227,204,225,225,225,102,150,101, - 29, 14,184,145,201,100,201,106,181,186,175,209,104,132,201,100,194, 15, 63,252, 0, 15, 15,143,127, 15, 25, 50,100,154, 78,167, - 67,110,110, 46, 87, 45, 92,193, 48, 12, 6, 12, 24,128,226,226,226,135,214, 46,215,165, 65, 30, 23, 11, 86, 93, 15,237,208,244, -160, 51, 98,200, 96, 48,212, 76, 53,169,213,234, 26, 97, 70, 8,249, 11,167,163, 86,177, 59,225,220,185,115,177,105,105,105, 27, - 40,165, 71,235,243,255,109, 27,187,181, 12,106,174,110,147, 27,119, 8, 87,206, 39, 96,247,185, 27,185, 21,188,121, 96,178,206, -144, 89,151, 32,187,171, 53,172,177,170,147,143,151,231,209, 53,171, 87,168,139, 46,159, 65,234,133, 4, 28,138,203,249,213, 72, -233, 53, 0,239, 63,200, 66,173,207,244,221,195,134, 76, 38,251,215, 87, 95,125,165,188,121,243, 38,210,210,210, 48,118,236,216, -210,140,140,140,217, 47,188,240,194,186,195,135, 15,187,107,181, 90, 28, 59,118, 76,213,172, 89,179,101, 0, 70, 54, 96,227,168, -183, 90,173, 40, 42, 42, 2, 0,244,233,211,199,165,196, 21, 0, 36, 36, 36,184, 13, 29, 58,244, 16,128,254,151, 47, 95,134,205, -102,139, 77, 76, 76,172,137,152,189,219, 61, 71,244,155, 94,175, 23, 41, 20, 10,190,142,186, 37,118,214,226, 80,155,243,244,233, -211,107,214,172, 89,243,237,220,185,115,211,238,147,243,142, 22,172, 33, 67,134,160,210, 96, 70,118, 94, 41,120,158,135,222,148, -119, 95, 22,172, 42, 62, 19, 50,117, 37,224,121, 11,202, 13, 78, 25,220, 54,140, 25, 51,230,197,211,167, 79, 23,183,111,223, 94, - 27, 31, 31,143,252,252,124, 88, 44, 22, 60,245,212, 83,144, 74,165,215, 35, 35, 35, 37, 0, 54, 56, 88, 55, 21,131, 6, 13, 58, -186,107,215,174, 38, 49, 49, 49, 48,153, 76,182,236,236,236,244, 57,115,230,168,255,245,175,127, 61,193,178,174,183,123,147,221, - 98,149,156,156,108, 23, 86,147, 31,148, 16,178, 91,176,254, 78,216,190,125,123,238,150, 45, 91,130,124,125,125,223,127,229,149, - 87,250,251,248,248, 48, 28,199,253,194,178,236, 60, 0, 14, 47,211, 32,151,203,167,120,120,120, 92,100, 89,150,205,201,201,193, -213,171, 87,193,178, 44, 40,165, 92,101,101, 37, 26, 55,110, 12,123,125, 26, 51,102, 12,124,125,125,173,201,201,201, 83, 32,224, -193, 9, 44, 0,120,231,157,119,240,221,239,191, 99,168,191,255, 93,191,183,119,239,222, 59, 53, 8,127,217,109,219, 98,177, 32, - 50, 50,178,230,252,219,111,191,173, 17, 88,211,166, 77,187,229,255,247,237,219,231, 16,231,157,112,237,218,181, 48, 39, 58,213, - 26, 78,187, 15,214,213,188,210,244,174, 62,154,211,219,190,253,161, 79,122,177, 33, 93,207,155,195,111, 23, 87,142,114, 6,120, -171,218,251,120,105,143,173, 89,181, 66, 99,183,134,237, 58,167, 43, 35, 86, 58,195,201,206,255,158,207, 46, 22,139,111,132,134, -134,250, 86, 55,110,247,156, 22,252, 95,237,178,110, 48, 24, 16, 27, 27, 11, 0,120,237,181,215, 74, 51, 50, 50, 6, 81, 74, 47, - 19, 66,146, 7, 15, 30,124,236,208,161, 67,118, 83, 67,113, 67,166, 19,168,138,116, 21,137, 68,104,215,174,157,211,226,234,127, -149,206,188,188,188, 25, 83,166, 76,217,104, 52, 26, 89,131,193, 48,195,209,123,247, 74,231,238,221,187,211, 90,183,110,221, 23, -117, 47,155, 96, 3, 16,119, 63,156, 31,124,240, 1, 0,180,189, 31,206,186, 44, 88,187,119,239,134,205,102,131,111, 99, 55, 24, -141, 70, 40,149, 74,167, 56,111,183, 96,237,217,179, 7, 54,155, 13,205,189, 61, 96, 52, 26,111,137,124,190, 23, 39,165,212, 72, - 8,153, 24, 26, 26,250,217,187,239,190,251,123,135, 14, 29,154,133,134,134,122, 20, 23, 23,231,255,250,235,175, 25,209,209,209, - 42,158,231, 39,214, 53, 77,116, 59,167,167,167,231,218,237,219,183,251, 94,190,124, 25, 57, 57, 57, 88,183,110,221,245,130,130, -130,193, 34,145, 72,186, 97,195,134, 31,195,195,195, 27,243, 60,111,116,133,250,105,135, 78,167, 59, 88,221,207, 56, 37,172, 28, - 73,103, 92, 92,220,222,106,238,163,142,112,255,175,158,253,126, 35, 19,239,149,206, 73,147, 38,229, 0, 24,115, 63,233, 60,114, -228,200,245,151, 94,122,105, 69,231,206,157, 23,171, 84, 42,164,164,164,212, 44,139,100, 31,160, 19, 66, 48,106,212, 40, 76,157, - 58, 21,199,143, 31, 95,241,207,127,254,243,250,195,206,207,191,141,192, 18,139,197,153,105,105,105, 45,182,111,223,206,148, 18, -130, 29,132,128,101, 89, 16, 66,106, 28,107,237, 71, 0, 56,121,242, 36,207,113, 92,198, 61, 58,255,204,179,103,207, 54,223,178, -101,139, 72,169, 84, 66, 38,147, 33, 53, 53, 21, 34,145, 8,215,175, 95,199, 23, 95,124,113,139,211,238,241,227,199,173,114,185, -188,193, 86,245, 62,159, 91,246, 76, 91, 95,185,143, 42,199, 80,144, 76,233, 29, 95,224,219,157,226,239, 4,133, 90,243,206,154, - 85, 43,220,106,137,171, 82,163,201,246,236,165,252,138, 7, 94, 57, 79,159, 62,237,170, 27,189,190,219,191,127,127, 27, 0, 79, - 0,111,211, 42,203, 29,170, 69,214,147,237,218,181,155, 9, 64, 14,224,221,134,180, 94,217,108,182, 26,203,169,171, 89,174,106, - 35, 62, 62, 62, 29,192, 96,103,239,221, 11,163, 71,143,254, 29,192,239, 15, 50,173, 15,131,211,142,226,155,101,184,150,158, 83, -189,149,151, 21,214,235, 55,254,244,159,226, 45, 40, 46, 43,114,218,130,117, 45, 61, 27, 54, 27,173,226,179,230, 84, 57,185, 91, -121,240, 22, 30,133, 55,157, 91, 32,159, 82,122,137, 16,210,123,193,130, 5, 51, 1,244, 69, 85,244, 97, 38,170,162,131, 55, 56, -234,131, 35, 22,139,251,174, 95,191,126, 48,195, 48, 76,108,108,172,113,213,170, 85, 89, 5, 5, 5,207, 83, 74, 51, 1,192,199, -199,231,201,125,251,246,237,116,133, 37, 25,110,195,235,143, 40,119,189,241,168, 68, 38,238,218,181,107,249,180,105,211, 68, 61, -123,246,156, 23, 28, 28,204,164,167,167,163,160,160, 0, 44,203,162,109,219,182, 8, 11, 11,131,159,159,159,237,240,225,195,171, -134, 15, 31,190, 92,144, 75, 15, 80, 96, 89,173,214,129,115,231,206, 61, 97, 52, 26, 29,242,197,145,203,229, 57, 21, 21, 21, 3, -239, 81,241, 6, 70, 69, 69,157, 88,191,126,125,139, 90, 13, 71,165,197, 98, 89, 60,109,218,180,247,120,158,151,223,198,153,109, - 54,155, 7,252, 47, 51,228,246, 41,191,171,217,149,247,237, 39,162,228,224,159, 21,123, 16,169, 23, 18,177,251,156,238,166,222, - 76,195,146,243, 43, 46,253,157, 42, 26,165,180, 0,192,236, 58,238, 93, 3, 48,195, 5,210,168, 32,132,232, 93, 89, 88, 9,248, - 19, 28,199, 21, 60, 51,240,169,123, 70, 8,138, 68,162, 2, 71,249, 6, 61, 61,224,158,124, 98,177,184,192,201,122,101, 68,149, - 27, 64,189, 93, 1, 88,150,157,219,179,103, 79,118,238,220,185,121,135, 15, 31,254,161,164,164,100, 14,165, 84,111,191, 95, 29, - 53, 24, 36,212, 10,151,105,239, 30,137,200,196, 77,155, 54, 45,155, 51,103,206, 78, 63, 63,191, 45,125,251,246,109,215,186,117, -107,181, 90,173, 70, 89, 89, 89,121,113,113,113,202,119,223,125,247,218,196,137, 19,211,133, 18,125,192, 2, 43, 46, 46, 46, 31, - 64,167, 7,249, 99,247,224,252,175,203,228,202,229,142,122,187,216,170,109,165,170,243,252, 30, 62, 88, 55, 10,255,152,249,238, -182, 67,145, 70,139,205,198,219,232,148,228,188,242,100,161,234,185,108,195, 40,136,171, 71, 4, 49, 49, 49, 45, 92,153,239, 65, -194,100, 50,205, 10, 13, 13,253,192,106,181,174,177, 88, 44,167,132,210, 23,240,160,176,118,237,218,116, 84,109, 5,132, 81,163, - 70,177, 0,240,229,151, 95, 90, 93, 48,169,193, 0,188, 0,216, 7, 56, 94, 0, 76,168, 90,217,191, 0, 64,252, 35, 35,176,254, -174,248,242,251, 63, 59,216,219,133,211,189,206,235,212,107,186, 63, 78, 1,232, 35,228,174, 0, 1, 2,234, 41,252, 51, 1, 60, - 47,228,132,128,135,218,255,185,166,176,178,195,139, 16,114,128, 82, 58, 4, 0,236,159,107, 95,115, 53, 48, 66,149, 18, 32, 64, -128, 0, 1, 2, 4, 8,120,176, 32, 0, 58,215, 49, 98,114,216, 1,155, 16,210,185, 30, 35,178,139, 2,167,192, 41,112, 10,156, - 2,167,192, 41,112,254,189, 56,239,197, 93,199,255,135,223,195,130,117,208,229, 4,214,195, 92,152,238,127, 29, 18, 44,112, 10, -156, 2,167,192, 41,112, 10,156, 2,231,163,201,121, 15, 60,114, 2, 75,240,193, 18, 32, 64,128, 0, 1, 2, 4,184, 58, 42, 23, - 46, 92,184,136, 16,114, 0, 0, 22, 46, 92,184,200,213, 19, 44, 8, 44, 1, 2, 4, 8, 16, 32, 64,128,171, 35, 38, 50, 50, 82, - 31, 25, 25,105,119,104, 47, 64,213, 44,220, 16,252, 25, 89,248,104, 11,172,133, 3,253,251,248, 52,243,249,164,180,168, 40,201, -102, 42,159,186,244,104,118, 73,125,126,152, 16,162,229, 56,238, 69,133, 66, 49,128, 82,234,207,178,236,149,178,178,178,147, 22, -139,229, 75, 74,105,133, 80,151, 4, 52, 52,130,130,130, 2,196, 98,241, 28, 66, 72, 48,207,243, 77,197, 98,177,142, 16, 18,111, - 50,153,214, 39, 36, 36, 36, 9, 57,244,248,162, 71,143, 30,123, 41,165, 97,213,109,213,209,132,132,132, 17, 66,174, 8, 16,208, -160, 48, 1, 56,251, 40, 37,216,105,129, 69, 40,125,233,181,215,199,251,220,204, 74,241,249,108,215,145,182,111, 15,110, 17,182, -244, 80,134, 83, 27,126,201,229,242, 23, 3, 2, 2, 86,111,220,184, 81,219,178,101, 75, 34,151,203,161,211,233,218,157, 63,127, -126, 88, 68, 68,196, 34,177, 88,252,127, 22,139,229,196,253, 60, 24, 33,196,205, 83, 45,154, 83, 88,102,121, 75,168,151, 2,156, -193,168, 81,163,216,172,172,172,197, 90,173,118,214,130, 5, 11,164,254,254,254, 80,169, 84,200,207,207,111,118,245,234, 85,223, - 77,155, 54, 13, 14, 13, 13,141,146, 72, 36, 17, 63,254,248, 35, 47,228,216,163,143,158, 61,123, 54,226,121,126, 3, 33,132, 99, - 89,118, 30,165, 52,236,200,145, 35,176, 90,173, 8, 15, 15, 15,235,217,179,103,107,171,213,186, 74,161, 80,216,140, 70,227,212, -234, 53,253, 4, 60,226, 8, 9, 9,201,176, 90,173, 94,142,126,159,227,184,236,152,152,152,118, 66,206, 9,120, 40, 2,139,165, - 56,122,240,235, 61,227,135,246,107, 79,198, 63, 31,216,122,231,183,137, 39,231, 62,211,234,153, 53,199,210, 28,218,210, 70,161, - 80, 76,155, 50,101,202,178,101,203,150,201,174, 92,185,130, 75,151, 46,129,231,121,168,213,106,116,238,220,153, 57,120,240, 96, -147, 25, 51,102,124,206,113,220, 20,147,201,180,191,190, 15,214, 88,203, 46, 87,203, 68,163,165, 34, 81,188,145,231, 15,186,232, -203,253,157,197, 98, 89,243,235,175,191,254,252,168, 84,152,224,224,224,222, 34,145,104, 17,199,113,207, 63,174,226,226,250,245, -235,139,254,241,143,127,204,138,136,136,144,166,167,167, 35, 37, 37, 5, 58,157, 14, 45, 91,182, 68,203,150, 45,201,134, 13, 27, -100, 27, 55,110,156,146,148,148,196, 0,112,216, 15,128, 16,194,120,123,123, 79,120,234,169,167,134,123,122,122,106,116, 58, 93, - 89, 76, 76,204,129,156,156,156, 79, 40,165,245,202, 75, 66, 8,227,229,229, 53, 54, 60, 60,124,184,135,135,135,135, 78,167, 43, - 57,113,226,196,129,252,252,252,109,148, 82, 91,125,243,128, 16,210, 4, 85, 17,198,218,234, 75, 55,252,253,253, 47,167,165,165, - 21, 60, 64, 78,157,191,191,127,114,125, 56,123,247,238,237, 99, 54,155, 15, 2,104, 83,215,119, 40,165,201, 98,177, 56,220, 17, - 49,196,243,252,134,247,223,127, 63, 92,173, 86, 99,193,130, 5, 73,126,126,126,208,104, 52,136,142,142,134,135,135, 7,172, 86, -107,210,234,213,171, 73, 86, 86, 22,214,175, 95,191, 25,192, 11, 66,247,225, 80,153,239, 0,224, 14, 96, 2,165,180,168,214,117, - 79, 0,187, 1, 20, 80, 74,199, 52, 84,250,172, 86,171,215, 79, 63,253, 4,169, 84, 90,189,221,146, 13,148,210,154, 99,109,152, -205,102,132,133,133, 53, 17, 74, 85,128, 19, 6,169,186,163, 8,223, 28,216,114,114,231,238,129,239, 73, 56,145,220,102,181,192, -198, 91, 96,181,152,192, 82, 30,157, 90,186,163, 85, 35, 14,229,127,148,227,179, 99,169,127, 20, 85,162,223,242, 67, 87, 82,239, -241,178,249, 5, 7, 7,159,249,241,199, 31, 53, 63,252,240, 3,174, 92,185,130,229,203,171,182, 56, 82, 42,149, 56,124,248,176, -125, 71,111, 60,251,236,179,133,185,185,185,221, 41,165, 37,245,120,169,155,247,235,225,123,122,239,234,126, 30, 1, 47,124,149, -121,163,216, 20, 64, 41,117,185, 5,212,130,130,130,244, 98,177, 88,111, 50,153, 94,124, 20, 68, 86,112,112,112,111,150,101,247, - 89, 44, 22,133, 74,165,242,252,241,199, 31,141,143,219, 11, 17, 20, 20, 20,224,238,238,254,227,190,125,251,100,177,177,177, 40, - 41, 41, 65,126,126, 62,102,205,154,133,205,155, 55, 35, 32, 32, 0, 74,165, 18, 28,199, 97,250,244,233,149,122,189, 62, 44, 46, - 46,238,156, 35, 66,168, 95,191,126,159,238,220,185,179,133,197, 98, 97,128,170,141,207, 51, 51, 51,173,139, 22, 45,202, 74, 76, - 76,156,232,172,200, 34,132, 48,161,161,161, 91,119,238,220,233,207,113, 28,195,243, 60,108, 54, 27,174, 94,189,106, 93,188,120, -241,245,196,196,196, 87,235, 83,239, 9, 33, 93, 21, 10, 69,251,233,211,167, 23, 61,255,252,243,102, 0, 56,119,238, 28, 57,119, -238,156,155,159,159,223,245,165, 75,151,158,175, 7,103,119,133, 66,209,118,198,140, 25,133,131, 7, 15,230, 57,142,179,197,198, -198,178, 23, 46, 92,112,243,247,247,255,125,209,162, 69, 78, 69, 35, 5, 6, 6,158,255,240,195, 15,155,250,250,250, 90, 9, 33, -180,250, 55, 40, 33,132, 50, 12, 67, 1, 32, 57, 57, 89,252,198, 27,111,100,158, 59,119,174,135, 3,229,190,111,204,152, 49,131, -186,118,237,138,246,237,219,131,101, 89,164,164,164,224,218,181,107,144,201,100,232,220,185, 51,228,114, 57,246,239,223,143, 47, -190,248,226,120, 98, 98,226,112,161,251,112,168,220,127, 2,208, 3,192,101, 0,207, 81, 74,139,170,197,213, 17, 0, 29, 0,156, -161,148, 14,108,200, 54, 56, 54, 54, 22,251,246,237,131, 68, 34,129, 88, 44, 70, 81, 81, 17,252,252,252, 32, 18,137, 32, 22,139, - 33, 22,139, 33,145, 72,224,235,235,139,167,159,126,154,143,143,143,215, 8, 37, 43,224,190, 45, 88,222, 77,158,152, 63,114,228, - 64, 57,172, 60, 96,174, 0,204,122, 80,115, 5,168, 73, 15,194,201, 65, 45, 6, 40,217, 34,252,223,211,141,212, 95,199,228,157, -123,243,169,150, 35, 34, 79,164, 31,175,139, 79,163,209, 44,140,142,142,214, 92,184,112, 1, 41, 41, 41, 88,183,110, 29,150, 45, - 91, 6,137, 68,130,146,146, 18, 12, 27, 54, 12, 49, 49, 49, 48,153, 76,248,207,127,254,227,177,112,225,194, 41, 0,156,222,100, -178,137, 86,244,193,158,207, 54,120,104,229,133,120,117, 88,188,118,211,151, 25,147, 1,108,118,197, 2,152, 63,127,190, 98,213, -170, 85, 95,117,239,222,221,165, 69, 86,112,112,112,111,137, 68,178,111,201,146, 37,202, 37, 75,150, 88, 31, 16,103, 71,134, 97, - 62, 51,153, 76, 11,147,146,146,190,119,133,231,148, 72, 36,211,222,120,227, 13, 89, 86, 86, 22,110,222,188, 89, 51,178,181, 67, - 42,149,130, 97, 24,112, 28,135, 87, 94,121, 69,182,117,235,214, 25, 0, 38,220,139,215,219,219,123,194,142, 29, 59, 90,152,205, -102,166,188,188, 28, 28,199, 65, 34,145,160, 75,151, 46,236,188,121,243,124,103,207,158, 61, 9, 64,148, 51,105,213,106,181, 47, -239,216,177,195,159,227, 56, 70,167,211,161, 79,159, 62,136,141,141, 69,207,158, 61,217,249,243,231, 55,155, 49, 99,198,171, 0, - 62,118,214,202,164, 80, 40, 58,158, 58,117, 42,187,105,211,166, 53,215, 91,181,106, 69, 7, 15, 30, 92,124,249,242,229,182, 9, - 9, 9,197, 61,122,244,200,118,130,211, 71,161, 80,180, 59,118,236,216,141,101,203,150, 13,216,188,121,243, 16, 0, 8, 9, 9, - 57, 24, 25, 25,121,178,160,160,160, 67,108,108,108,113,175, 94,189,114,157,224,108,237,237,237, 93, 62,109,218, 52, 85, 93,223, -249,244,211, 79,139, 9, 33, 29, 28,225, 99, 89,118,206,174, 93,187,206,151,148,148,136, 18, 19, 19, 33,147,201, 32,151,203,107, -142, 55,110,220,128,201,100,194,158, 61,123,120,134, 97,230, 10, 93,135,195, 24, 13,224, 40,128,142, 0, 14, 19, 66,198, 1,248, - 28, 64,123, 0,169, 0, 26,124,115,106,155,205, 6,177, 88, 12,145, 72,132,131, 7, 15, 34, 42, 42, 10,223,124,243, 13,124,124, -124,106, 4,150, 72, 36,178,215, 59,161, 68, 5, 56, 39,176, 8, 33,148, 82, 74,236, 71,251, 77,157, 46,127,237,182,168, 79,150, -115, 98, 70, 60, 48,180, 61, 60,164, 60,136, 66, 11, 73,255,133, 32,238,126, 0, 0, 90,156, 6,211,209,133, 24,213,189,144,249, -204, 76,118,191, 63,172, 93,243,249,223,166,148,215,209, 40,134, 52,111,222, 28, 63,255,252, 51, 90,182,108,137, 37, 75,150,160, - 67,135, 14, 80, 40, 20,200,203,203, 67, 69, 69, 5,148, 74, 37,172, 86, 43, 2, 3, 3, 89,149, 74,213,207, 89,129, 69, 8,233, -246,218,232,158, 61, 68,154,246,232,243,236, 36, 28,219,212, 95,185,237,160,238, 13, 66,200,103,181, 55, 71,117, 21, 12, 31, 62, - 28,121,121,121,138,157, 59,119,214, 91,100,133,132,132,124,103,181, 90,159,186,215,247,100, 50,217,207,167, 78,157,122,174,190, -226,106,235,214,173, 74,119,119,247, 7,210,200, 84,139,171, 31,198,143, 31,175,222,177, 99,199,174,110,221,186,189,228, 10, 34, -139, 16,210,203,223,223, 31,153,153,153,200,203,203,131,209,104, 68, 94, 94,149,139, 97,118,118, 54,124,125,125,225,225,225, 1, - 95, 95, 95,180,107,215,142, 48, 12, 19,236, 8,111,255,254,253,135, 0, 96,210,210,210, 80, 80, 80, 0,141, 70, 3,149, 74,133, -166, 77,155, 98,192,128, 1,162, 86,173, 90,133, 57, 43,176,194,194,194,134, 43, 20, 10, 38, 51, 51, 19,233,233,233, 48, 26,141, - 72, 77, 77,133,187,187, 59,158,126,250,105,177,191,191,255,115,206, 10, 44, 0,157,166, 76,153, 82, 80, 91, 92,217,161, 84, 42, - 73,199,142, 29, 75,212,106,117, 32,128,108,103, 56,103,205,154,149, 31, 25, 25,217,247,248,241,227,115,236, 23,143, 31, 63,254, -111, 0,248,232,163,143, 78,185,185,185, 5, 2,112,106, 99,117, 74,169,109,210,164, 73,215, 56,142,171, 17,172,246,207, 28,199, -129, 97, 24, 55, 71,120,236, 14,237,157, 59,119,198,212,169, 83,241,205, 55,223, 96,251,246,237, 53,247, 71,142, 28,137, 17, 35, - 70,160,188,188, 28,141, 27, 55, 22,229,230,230,254,214,163, 71, 15,151,112,124, 39,132, 4, 1, 88, 1,192, 12, 32,130, 82,234, - 82,251,177, 81, 74,243, 9, 33, 97,181, 68,214, 25, 0,210,106,113, 21, 70, 41,109,112, 95, 54,171,213, 10,177, 88,140,172,172, - 44,108,217,178, 5,147, 39, 79, 70,151, 46, 93, 80, 90, 90, 90, 35,176,196, 98, 49, 24, 70,216,248,228, 33,214,227, 59,106,144, -199,218,130, 37,237,155, 25,149,126,154,233, 50,106,104,232, 88,173, 70, 14,219, 31,185,144, 60, 29,129, 11,197, 10,172,143, 58, - 10, 0,152,253, 98, 32, 58, 15,122, 23,198, 79,158,193, 83,126, 38,238,147, 95,101,255, 6,176,236, 78,124, 94, 94, 94,158, 60, -207,131, 97, 24, 40,149, 74,104,181, 90,200,229,114, 20, 22, 22, 98,230,204,153, 56,114,228, 8, 76, 38, 19, 36, 18, 9,252,253, -253, 97, 54,155,253,157,125,160,198, 30,162, 77,235, 87, 47,119, 43, 74,251, 2,137, 87,110, 66,225,230,139,197,147,131,220,223, -222,156,184, 8,192, 98, 87, 44,132, 78,157, 58, 97,230,204,153,138,141, 27, 55,214, 75,100, 81, 74, 87,136, 68,162, 94,115,231, -206,149,191,248,226,139,127,185,127,233,210, 37, 76,157, 58,181, 82,175,215,175,172,143,184, 18,139,197,251,182,108,217,162,116, -115,115, 67,102,102,230, 3, 19, 87, 27, 54,108, 80,183,106,213, 10, 98,177, 88,246,233,167,159,186,132,200,226,121,222, 87,161, - 80,160,176,176, 16,179,103,207,190,197, 15,195, 62,157, 13, 0, 41, 41, 41,240,245,245,133,193, 96,240,113,132,215,211,211,211, -157, 82,138,215, 95,127, 29, 89, 89, 89, 53,215,125,124,124,144,157,157, 13,158,231, 61,156, 77,171, 86,171,245,176, 88, 44,232, -215,175, 31, 12, 6, 67,149,185, 96,244,104,136,197, 98,228,231,231,195, 98,177,104,235,145, 5,158,131, 7, 15,214,213,117, 83, -165, 82, 89,180, 90,109,115,103,147, 26, 30, 30,158,187,105,211,166,240,219,111,156, 61,123, 54,220,205,205,237,132,167,167,103, -219,250, 24, 31,164, 82, 41, 56,142,131, 88, 44,134,253,179,253,143,101, 89,155,131,239, 79,216,145, 35, 71,160,209,104, 16, 23, - 23, 7,185, 92, 14, 0, 24, 50,100,200, 92,149, 74,213,215, 96, 48, 60,127,224,192, 1,220,188,121, 19,254,254,254,104,212,168, - 17,226,226,226,194, 92,164,249,120, 15, 64,175,234,207, 31,212,250,236,106, 34,107, 44,128, 83,213,226,202, 4, 96,140, 43,136, -171,218, 22,172,149, 43, 87,130,231,121,196,196,196, 96,212,168, 81, 32,132,128, 16, 2,141, 70,131, 15, 62,248, 64, 80, 65, 2, -234, 39,176,238,164, 28,223,126,155, 48,198,211, 45, 54,143, 10,239, 53,182,163,175, 18,198,194, 52,112, 42, 79, 16,247, 22, 88, - 31,117, 20,151, 51,138, 1, 0,235,191, 58,135,109,111,134,129, 40,180,240,174,188, 2, 13, 39, 29, 86,151,192, 42, 42, 42, 42, - 55,155,205, 30,114,185,188,102, 84, 80, 88, 88,136,183,222,122, 11,123,246,236, 65,139, 22, 45,192,243, 60, 56,142, 67, 65, 65, - 1,196, 98,177, 83,209,137, 34, 17,121, 54, 98,214,115, 45,148,158,109, 81,116,238,237,170,139,154, 64, 76, 30,205,112,107, 62, -187,248, 50, 33,228, 3, 74,169,203,173,151,161, 82,169,208,181,107, 87,188,252,242,203,138,157, 59,119,126,140,187, 56,238,222, - 9,241,241,241,103,130,131,131,135,173, 93,187,246, 91,157, 78, 39,239,222,189, 59, 84, 42, 21, 84, 42, 21,210,210,210,176,108, -217, 50,131,193, 96, 24, 89, 31,235, 24,195, 48, 81,175,189,246,154, 82,163,209, 32, 45, 45, 13, 90,173,246,190,158, 53, 56, 56, -184, 35,203,178, 63,108,216,176, 65,221,186,117,107, 36, 39, 39, 35, 40, 40, 8, 77,154, 52,145, 69, 70, 70, 54,184,200,146, 72, - 36, 57, 5, 5, 5,173,154, 53,107,134,173, 91,183,130, 97, 24,228,230,230, 98,241,226,197,136,140,140, 68,175, 94,189,160, 82, -169,208,172, 89, 51,164,166,166, 66, 46,151,223,112,132, 55, 39, 39,167, 4,128,215,225,195,135, 81, 88, 88, 88,115,189,121,243, -230, 40, 46, 46,134,201,100, 42,118, 54,173,185,185,185,197, 0, 26, 37, 37, 37, 33, 61, 61, 29,207, 61,247, 28,246,239,223,143, -160,160, 32, 88,173, 86, 88, 44,150,226,122,100,129,149,101,217,187,109,239, 64, 0, 56, 43, 6,121,145, 72, 68,239, 50,122,173, - 15, 39,108, 54, 27,173, 75, 92, 73, 36, 18,220,237, 55,239,100,197,136,142,142,174,153, 22, 4, 0,177, 88,220,107,206,156, 57, -207,215, 53, 40,114, 17,212,182,210,185,100,208, 9, 33,196, 11,192, 14, 0, 92,181,165,141, 3,176,157, 16,242, 92,109,199,247, -134, 20, 88, 44,203,214,156, 43,149, 74,116,237,218,181, 70, 96,233,245,122,136,197, 98, 65, 45, 60, 92, 17,254,216, 89,175,128, -234,205,158,107,155,231,110, 17, 87,207,245, 24,219,193, 87,134, 95,207, 93,132,200, 84, 12,106, 44,187, 75, 11,101, 1,145, 40, -161, 81,138,154,222,229, 69, 75,202,200,200,128,187,187, 59, 36, 18, 9,164, 82, 41, 58,119,238,140, 51,103,206,160,109,219,182, -176, 90,173, 53, 13,229,111,191,253, 6,158,231, 79, 57,241, 18,179, 79,104, 68,171,231, 47, 90,166, 66,206, 86,184,171,165, 24, -208,171, 53,160,236, 8, 86, 44,197,218,255, 12,245,104,252,132,219,251,174, 88, 8, 42,149, 10, 57, 57, 57,248,226,139, 47,244, - 6,131,225,245,250,112,196,199,199,159,177, 90,173,195,190,252,242,203,202,140,140, 12,200,100, 50, 92,189,122,213, 46,174, 70, -212,215,191,203,102,179, 77,249,248,227,143, 43, 14, 28, 56, 0,149, 74, 5,181, 90,125,223,150,171,153, 51,103,170,218,180,105, -131,180,180, 52,184,185,185,193,211,211, 19,125,251,246,197,198,141, 27,101, 42,149,106, 87,183,110,221, 26,204,233,213,102,179, -197,165,166,166, 82, 55, 55, 55,180,107,215, 14, 1, 1, 1, 8, 9, 9, 1, 0,216, 29,160, 91,182,108, 9, 0,184,118,237, 26, - 40,165, 9,142,240,158, 58,117,234, 64, 74, 74,138,213,219,219, 27, 93,186,116, 65, 96, 96, 32,122,246,236, 9, 63, 63, 63,252, -247,191,255, 53, 95,191,126,253,136,179,105, 61,113,226,196,119, 23, 47, 94,228,189,189,189, 17, 20, 20, 4,169, 84,138,128,128, - 0,120,123,123, 35, 58, 58,218,156,145,145,113,164, 30, 89,144,125,254,252,121,182,174,155,114,185, 92, 13,192, 89,203, 67,238, -217,179,103,153,208,208,208,191, 68,243,134,132,132, 28,148,203,229,110, 0,110, 56,155, 80, 66,136,141,227, 56,200,100,178, 91, -196, 21,199,113,144, 74,165, 16,137, 68,142, 70, 81, 30, 12, 15, 15,199,129, 3, 7, 32,147,201,160, 80, 40,240,194, 11, 47,192, - 96, 48,140, 4,128, 21, 43, 86,212,116,182, 17, 17, 17, 0, 0,189, 94,239, 42, 1, 30,243, 0,252, 6,224,119, 0,255,113, 65, -113,213, 8, 85,211,131,109, 81, 53, 45,216,183,250,104,247,201,242,116,129,206, 29, 18,137, 4,239,188,243, 14,196, 98, 49,154, - 52,105,130, 69,139, 22, 97,201,146, 37,136,136,136,192,170, 85,171,224,225,225, 33, 76, 17, 62,220,122,114,139, 6,121,172, 4, -214,237, 48,197,250, 45,125,241,217,238, 99, 59, 52,149, 34,233,220,111,248,238,172,238,106, 97,225, 77,216,242, 46,194, 86,144, -140,217, 47, 6,162, 99, 11, 45, 58,182,208, 98,246,139,129,176,229,255, 6, 90,146, 6, 42,211,162,160,156,212, 57,189, 80, 92, - 92,188,126,217,178,101, 55, 61, 60, 60,106, 26,197,236,236,108,116,234,212,233,150, 70,146,101, 89,188,245,214, 91,133,249,249, -249, 91, 29, 22, 41,114,246,213,149,255,121,169,145, 68,170, 6,138,127,134, 70,163,194,214,168,213,128, 49, 23, 96, 56, 12, 29, -216,141,245,110,228,246, 36, 33,164,141,171, 21, 66,102,102, 38, 34, 34, 34,244,122,189,254,190, 28,221,227,227,227,207, 88, 44, -150, 97,209,209,209,149,135, 14, 29,194,123,239,189,119, 95,226,170,150,112, 27,190,125,251,246,138,204,204,204,251, 18, 88, 98, -177,248, 13,158,231,213,235,214,173,179, 13, 26, 52,200, 58,125,250,116,235,196,137, 19,173, 35, 70,140,176, 14, 28, 56,208, 58, -101,202, 20,171,193, 96,144,170, 84,170,247, 26,170, 44,204,102,115, 84, 84, 84,148,129, 97, 24,168, 84, 42,112, 28, 7, 47, 47, -175, 26, 33,108,247,243, 49,155,205,216,180,105, 83,165,209,104,252,200, 17,222,194,194,194,237,243,230,205,203, 56,118,236,152, -165,180,180, 20, 0,160,211,233,176,124,249,114,243,230,205,155,115, 75, 74, 74, 62,113, 54,173,165,165,165, 59, 22, 44, 88,112, -253,208,161, 67, 22,150,101, 81, 82, 82, 2,119,119,119, 44, 95,190,220, 28, 21, 21,149, 91, 86, 86,230, 52,103,223,190,125,211, -178,179,179,213, 70,163,145,222,161,252,136, 92, 46,239, 1,224, 71,103, 56, 67, 66, 66,210, 50, 51, 51, 53,239,190,251,238, 47, -131, 6, 13, 90,171,209,104,174,105, 52,154,107,131, 6, 13, 90,183,121,243,230,159,100, 50, 89, 15, 0, 39,235, 97, 93,181,217, -219, 12,153, 76, 6,169, 84, 90, 51, 64,147, 74,165, 16,139,197, 14, 9,172,196,196,196,209,148,210, 46, 60,207,243, 93,186,116, -129, 66,161,192,136, 17, 35, 32,145, 72, 0, 0, 11, 23, 46, 4,165, 20,148,210, 26,129, 85, 94, 94,238, 18, 2,139, 82,250, 11, -165,180, 39,165,180, 51,165,212, 21,131,100,118,214, 18, 87, 97,148,210, 75, 0,194,106,137,172, 61,174, 32,176,196, 98, 49, 58, -116,232,128,217,179,103, 99,255,254,253,200,200,200, 0,207,243,176, 90,173, 96, 24, 6, 34,145, 72, 16, 88, 2,156, 70,205, 20, - 97,237, 99, 19,119,229,184,142,222, 34, 36, 37, 93,198,183, 9,197, 59, 25,134,221,127, 46,221,248,117,152,255, 31, 48,239, 25, -131,206,163,118, 96,219,155, 85, 46, 8,182,252,223, 96,254,114, 28,136,226, 9,164,150, 41,160, 55,151, 28,185, 75, 69, 78,208, -106,181, 95,125,246,217,103,227, 39, 76,152,192,217,108, 54,200,229,114,204,153, 51, 7,148,210, 26,113, 53,117,234,212,138,252, -252,252,141,148,210, 52, 7,213,175,188,169, 23,183, 96,236,235,139,101,200,138, 2, 24, 9, 10,209, 29, 93,251,189,134,252,140, - 51, 64,197,101,128, 72, 16,181,114,146,231,176,137,171, 63, 4, 48,200, 85, 10, 32, 57, 57, 25, 75,151, 46,189,111,113, 85, 91, - 16, 5, 7, 7, 15,219,191,127,255,127, 13, 6,195,244, 7,200, 57,124,229,202,149,251, 26, 53,106,164,172, 47,143,143,143,207, -164,194,194,194,169, 14,124,181,193,166, 58, 18, 18, 18,146,122,247,238,189,101,221,186,117,175,207,154, 53, 75, 38,151,203,161, -209,104,144,146,146,130,230,205,171, 92,143, 42, 43, 43,241,230,155,111, 86,242, 60,191, 51, 46, 46, 46,206,193, 70,220, 70, 8, -121,109,202,148, 41, 19,218,182,109, 27, 78, 41,213,154,205,230,226,235,215,175, 31, 41, 43, 43,171,215, 58, 88,213,156,175, 78, -157, 58,117,108,155, 54,109,134, 91, 44, 22, 45,207,243,197, 89, 89, 89, 7,203,202,202,182,215,135,243,151, 95,126, 41,220,186, -117,235,239,185,185,185, 29, 26, 55,110, 92,230,233,233,105,210,235,245,172, 90,173, 86,115, 28,215, 29, 64, 28,128, 43,206,112, -198,197,197,229, 71, 71, 71, 95,215,235,245,109,163,162,162, 78,185,187,187,159,180, 90,173,132,227, 56, 15,165, 82,217, 31,192, - 47, 0,174,213, 71, 96,217, 7,102, 18,137,164,198, 42,110, 63, 7, 96,115,130,107,245,202,149, 43, 69, 50,153, 12, 38,147, 9, -122,189, 30, 69, 69, 85,179, 87, 43, 86,172,192,155,111,190, 9, 0, 88,186,116, 41, 34, 34, 34, 80, 89, 89, 41, 21,186, 15,135, - 80, 12, 32, 1,192,104,187,207, 85, 45,199,247,157, 0, 74, 93, 69, 96,137,197, 98, 76,152, 48, 1,131, 7, 15,254,203, 50, 13, -130,147,251, 67, 47,131, 91, 52,200, 99, 99,153,187,211, 58, 88, 11, 7,181,248, 63, 95, 55,241, 27,185,101,252,126,174,119,198, -130,136, 8,208, 55,159,110,177,127,120,155,138,167, 59, 54,177, 1,148, 7,209, 84,117, 54,180, 60, 23, 68,217, 4, 37, 54, 55, -108, 61,145,151, 71, 25, 38,100,233,119, 87,139,238, 34,134,196,238,238,238,107,218,180,105, 51, 98,249,242,229,110,237,219,183, -135, 66,161, 0,165, 20, 23, 46, 92,192,212,169, 83, 75, 10, 10, 10,182, 22, 21, 21,189, 77,239,182, 72, 87, 45,120,185,139,223, -217, 28,241,220,191, 70, 76,120, 75,130, 43,115, 1,145, 27,240,196, 64,220, 32, 79,161,137,232, 60, 96,186, 81,117, 77,236,134, -231,198,174, 40, 57,114, 34,254,159,148,210,152,134,206,252,160,160, 32,189, 76, 38,123, 96,226,234, 97, 35, 56, 56,184, 55,199, -113,251,140, 70,163, 66,169, 84, 62,150,235, 96, 85,151,139, 88, 42,149, 46,147, 72, 36,147,198,141, 27, 39,111,223,190, 61,252, -252,252,144,159,159,143,148,148, 20, 68, 69, 69, 25,108, 54,219,182,226,226,226, 69,151, 46, 93, 50, 63,142,121,112,245,234, 85, -239, 86,173, 90, 5,179, 44,219, 10, 85, 11, 69,222, 0,112,172, 62, 66,200,142,212,212, 84, 31, 63, 63,191, 96,137, 68,226, 95, -205,153, 11,224,251,250,112, 6, 6, 6,158, 95,184,112, 97,163,126,253,250, 85,176, 44, 75, 37, 18, 9,101, 24, 6, 18,137,132, -138, 68, 34, 74, 8,161,159,127,254,185,102,237,218,181, 58, 71,214,193,234,209,163,199,174, 33, 67,134, 12,149,201,100,248,250, -235,175,249,198,141, 27,139,220,221,221,177,109,219,182,186,218, 49, 80, 74, 21, 66,215,248,200,191,235,250,239,191,255, 30, 89, - 89, 89,183,172,121, 85, 91, 88,217,207, 9, 33, 8, 13, 13,229,207,158, 61, 43,172,131, 37,160,254, 2,235, 78, 88, 57,208, 95, - 83, 10,186,187,107, 83,250,143, 30,126, 82,120,185,203,192,136,165, 40, 51, 16, 92,202, 53,224, 84,114, 89,182,213, 70, 70,190, -119, 44,237,146,131, 86,167,144, 38, 77,154,204,179,217,108, 29, 25,134, 81, 80, 74,203, 25,134, 57,175,211,233,150, 83, 74, 47, - 59,243, 16,238,106,246,130,135, 82,228, 38,225, 56,202,243, 86, 0, 44,192, 16,128, 48, 0,152,234, 35, 11, 16, 6,149,149,102, - 9,111, 37,251,243, 11, 11,167, 53,116,230,247,235,215,239,187,242,242,242, 71,110, 37,119,169, 84,186,136,101,217,231, 31,247, -109, 98,122,246,236, 25,200,113,220, 60, 74,105,144,193, 96,104, 44,151,203,243, 9, 33,231, 42, 42, 42,214, 36, 38, 38,158, 21, -154,143,134,195,131, 94,201, 61, 40, 40,200,147, 16,178,142, 82,170, 96, 24,230, 13,155,205,246,155,175,175, 47,246,237,219,119, - 71, 11,150, 32,176, 30, 47,129, 53,126,252,120,124,247,251,239, 24,234, 95,119,224,250,222,189,123,209,167, 79, 31, 65, 96, 9, -120,240, 2,171, 90, 20,145,121, 3, 90,140, 20, 17,242, 2, 97,104, 39, 2,112, 86,138, 84,134,208,239, 37, 82,243,199, 75,191, -203,173,188,237,251,157, 41,165, 23, 31,104,130, 5, 78,129,179, 1, 56, 9, 33,140, 35, 91,207, 8,249,249,120,112, 6, 5, 5, -237,169,168,168, 8, 79, 73, 73,169,139,227, 22,129, 37,228,231,163,201,217,167, 79,159,203,107,215,174,109,214,166, 77, 27,134, - 16, 2,150,101, 65, 8, 1,195, 48, 96, 89,182,230, 8, 0, 39, 79,158,228,223,126,251,237,140, 95,126,249,165,171,144,159, 15, -135,243,113,131, 83,123, 17, 86, 79,217,125, 85,253, 39, 64,192,223, 6,247,179,175,159,128, 71, 15,137,137,137,163,125,124,124, - 98, 60, 61, 61, 91, 25,141, 70, 73,101,101,165,164,246, 96, 84, 46,151, 23, 10,185,244,232,131,231,249, 1,115,231,206, 61,105, - 48, 24,252,238,245, 93,185, 92,158, 83, 81, 81, 49, 80,200, 53, 1, 15, 69, 96, 9, 16, 32, 64,192,223, 5,185,185,185,161, 66, - 46, 60,222,168,158, 62,238, 40,228,132,128,135, 1, 33, 44, 66,128, 0, 1, 2, 4, 8, 16, 32, 64, 16, 88, 2, 4, 8, 16,248, -147,189, 7, 0, 0, 0, 37, 73, 68, 65, 84, 32, 64,128, 0, 1,130,192, 18, 32, 64,128, 0, 1, 2, 4, 8, 16, 4,150, 0, 1, - 2, 4, 8, 16, 32, 64,128,128,250,227,255, 1, 86,162, 48,147,214,150, 59, 59, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +137, 80, 78, 71, + 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 2, 88, 0, 0, 2, 0, 8, 6, 0, 0, 0, 94,187, 18, 70, 0, 0, 0, + 4,115, 66, 73, 84, 8, 8, 8, 8,124, 8,100,136, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40, +155,120, 0, 0, 0, 25,116, 69, 88,116, 83,111,102,116,119, 97,114,101, 0,119,119,119, 46,105,110,107,115, 99, 97,112,101, 46, +111,114,103,155,238, 60, 26, 0, 0, 32, 0, 73, 68, 65, 84,120,156,236,157,119,120, 20,213,254,198,223, 51,101,251,166,147, 30, + 58, 4,129,208, 3, 74, 2,130,116, 17, 69,184,162,128,160,226,245, 94, 44,168, 88,126,130, 5, 21, 5,162, 94, 21, 69, 17,229, + 90, 16, 68,175,168, 32,241, 42, 77, 1, 41, 82, 69, 18,138, 92, 74,164,133,146, 72,250,246,153,243,251, 99,119,134,205,102, 91, + 96,163,128,231,243, 60,243,236, 78,123,231,156,169,239,124, 79, 25, 66, 41, 69, 67, 65, 8,233, 64, 41, 45, 96,154, 76,147,105, + 50, 77,166,201, 52,153, 38,211,252, 43,193,213,119, 5, 66, 72,196, 29, 25, 33,132,122,134, 62,151,186,102,164,180,188, 53,149, + 33,130,154,125, 60,154,207, 69, 80,179, 33,211,217,231, 82,213, 84,242, 27, 73, 93,239,125, 24,169,253,233,149,206,136,157,247, + 13,173,121,177, 90,254, 52, 35,117,142,250, 57,238,207, 69, 80,179, 33,211,217,231, 82,211,244, 61,127, 34,161,235,239,156,188, +216,253,233, 39,157, 23,125,222,255, 81,154, 23,170, 21, 70, 58, 35,189, 79, 35,254,108,186,148, 17,234,179,112, 67, 24, 12, 0, +160,148, 18, 47,125,114,169,106, 42, 16, 66,168,162, 31, 9, 34,169,229, 97,109,164, 53,125,246,103,164,120,142, 82, 74, 8, 33, +235, 0,244,137,144,230, 90,143,230, 69, 31,119,159,188, 70, 68,183, 33,205, 21, 16,185,243,190,161, 53,189,167, 93,204,185,234, +171, 25,137,243,222,223,113,143,164,102,164,174, 37,159,245, 35,114, 45, 53,196, 57,239,231,252,185,104, 93, 95,205, 72, 92, 75, +190,154,145, 56,239,255, 8, 77,101,250,197, 92, 75,254, 52, 35,113,222, 7, 58,246, 23,171,123,185, 80,175, 8, 86, 67,238, 24, +207, 1,232, 27,105,205, 72,167,185, 33, 76,102,164,163, 56, 13,169,137,200, 30,163,231, 60,154,207, 69, 80,179,111,164,142,145, +239,185, 19,137,183, 46,111,205, 72,157,155,126,210,121,209,199,201,159,230,197,166, 55, 64, 58, 47, 10,127,154, 23,123,222,255, + 81,154,136,236, 49,138,200,181,228,163, 25,177,107,201, 55,191, 17,140, 8,246, 5, 34,119, 45,249, 73,231, 69, 31, 39,127,154, + 23,155,222, 0,233,188, 40,252,105, 70, 48, 34, 26,113,221,203,129,122, 69,176, 26,138,134, 48, 66,128,251,162,139,164,118, 67, + 68,113, 26, 42,210, 22,169, 40,142, 31,221,117, 17,148,139, 88,180, 73,193,147,190,136,188,209,250,209,126,142, 16,242,108,164, +117, 35, 9,187,150,216,181,132, 75,236, 90,242,119,222, 92,236,181,212, 80, 47,207,222,154,145, 50, 66,126,242,126, 81,215,146, +239,186,145,184,150, 66,104, 94, 84,132, 57, 80,254, 47, 70,247,114,161,222,117,176, 26,138, 72,148,247, 6,208,139,104, 84, 44, +210, 52, 80, 58,251, 94, 14,121, 71, 3,164,147, 16,242, 92, 3,229,253,114,217,167,236, 90, 98,215, 82, 68,136,228,181,228,115, + 78, 70, 36,173,145, 62,207,253,105, 70, 98, 27,222, 26,145, 58, 71, 27, 58,239,145,188,150, 26,226,216, 95, 46,212, 59,130,213, + 80,111,199,151,131,102, 67,104, 55, 80,222,215,161, 1,222, 14, 26,160, 94,215, 58, 68, 62, 42,240, 28, 34, 88,228,168,228, 57, +146,105,109,200, 98,194,134, 56, 55, 27,242,124,143,100, 61,143, 6,202,251, 58, 92, 30,199,125, 29, 34,156,206, 72, 93, 75,126, +142,249, 58, 92,100, 90,253,237,191, 72, 23, 97, 71,242,220,108, 72,205, 72,104, 55, 68, 58, 3,232,174,195, 95, 32,114,165, 64, +104, 3,118,211,192, 96, 48, 24, 12, 6,131,241, 87, 36, 96, 4,171,107,215,174,249,122,189,190, 85,160,249, 53, 53, 53,197,187, +118,237,186,174, 97,146,197, 96, 48,174, 36, 8, 33, 28,206, 87, 73,144, 1, 80,202,222,238, 24, 12,198, 21, 76, 64,131,165,209, +104, 90,172, 95,191, 62, 83,150,101,184, 92, 46, 72,146, 4, 73,146,224,114,185, 96,183,219,241,183,191,253,173,222,197,139,157, + 59,119, 94,207,113, 92,179,250,172, 35, 73,210,209, 95,126,249,165, 87,160,249,201,201,201,155, 0,180, 32,228,124,212,145, 16, + 2,101,220,123, 58,199,169, 85,206, 78, 30, 59,118,172,107, 48, 77, 66, 72, 11,111, 61, 95, 45, 63,186, 65, 53,175,186,234,170, +237,130, 32,100,248, 91, 63,144,182, 44,203,135, 11, 10, 10,114, 2,105, 50, 34, 75,231,206,157,215,243, 60, 95,239,243,115,215, +174, 93, 1,207,207, 14, 29, 58,252,204,113, 92, 26, 80,247, 24, 7, 56,159,120, 73,146,126,253,229,151, 95,122, 5, 50, 32,169, +169,169,155, 40,165, 45,194, 60, 47, 21,142, 31, 59,118, 44, 59, 80, 58,149,235, 40, 88, 58,253,104, 7,213,244,210,224,210,211, +211,243, 18, 19, 19,239,173,169,169,177, 2,160, 28,199,209,118,237,218,213,210,151, 36,233,236,190,125,251, 58,132,210, 99, 48, + 24,140,203,129,128, 38, 73,150,101,206,102,179,225,192,129, 3,240,119,159,231, 56, 78,170,239,198, 40,165,153,107, 22, 47, 76, + 50, 36, 38, 67,114,216,161,107,148,164,106,151,237, 45,128,228,112, 64,118, 58,208, 40,251, 26, 37, 13,232,219,183, 47, 31, 66, + 54, 99,242,228,201, 73, 81, 81, 81,176, 90,173,176, 90,173,176,217,108,176,217,108,176,219,237,176,219,237,112, 56, 28,112, 56, + 28,112, 58,157,176,217,108, 40, 40, 40, 8,154,118, 66, 72,198,131, 15, 62,168,106,218,108, 54, 88,173, 86, 85,203,102,179,169, +154,118,187, 29, 54,155, 13,123,246,236, 9,170, 41, 8, 66,198,206,157, 59,147, 52, 26, 13, 40,165,144,101, 25,148,210, 90,131, +207,190, 66,110,110,174, 35,212, 62,101, 68,148,204,165, 47,205, 72,210, 37, 52,130,236,116, 34,161,115, 55, 0,238, 99,113, 98, +205,119,144,157, 78,200, 78, 39,154,222, 56, 82,157,222,167, 79,159, 80,231,103,211, 47,166, 77,141,213, 68, 69,193,101,181,162, +249,176, 17,234,140,194,119, 94, 7,117, 58, 65, 93, 14,116,124,228,105, 0, 64, 73, 73,137,165,109,219,182, 39,225,174,167, 16, + 40,194,147,113,228,200,145, 36, 37, 13,222, 16, 66,192,113, 92,173, 97,195,134, 13, 24, 55,110, 92,168,188,103, 60,245,212, 83, + 73,202, 53,226,125,174, 59,157, 78,245,250,113,185, 92,112, 58,157,176,219,237,248,249,231,159, 67,105,130, 16,194,165,166,166, +190,212,187,119,239, 9,139, 22, 45, 50,125,245,213, 87,166,230,205,155, 67,163,209,128,231,121,240, 60, 15,142,227,192,243, 60, +134, 15, 31,254,151,169,155,193, 96, 48,174,124, 2, 26, 44,135,195,113,100,208,160, 65, 20, 0,236,118,123,186, 86,171,213,120, +207,151,101, 57, 45, 55, 55,247, 87,223,245, 66, 21, 29, 26, 18,147,241, 65,243,120, 0,192,168, 67,165, 0,220, 15,133, 37,215, +118, 81,151, 25,243, 91,185,123, 89,131, 1, 28,199, 5,189,233, 18, 66, 96, 54,155, 49,104,208, 32,104,181, 90,116,235,214, 13, + 26,141, 6,162, 40, 6, 28,194,193,100, 50,225,249,231,159, 7, 0, 8,130, 0,147, 94,135,251,122, 95, 3, 61,161,248,224,151, +253,176, 73, 50, 4, 65,128, 32, 8, 16, 69,177, 78, 68,202, 31, 26,141, 6, 5, 5, 5,224,121, 30,130, 32,212,250,229,121, 30, +203,151, 47,199, 45,183,220, 2,158,231, 97, 52, 26,129,191, 80,101,192, 75, 5, 93, 66, 35,124,209,199, 29,136,188,253, 88,165, + 58,253,187,209, 55,170,255,199,159,168, 6, 33, 4, 26,141, 38,188,227, 30, 21,133,255,222,114, 61, 0, 96,228,129, 51,234, 57, +179,251,245, 25, 16,181, 90, 8,162, 6, 29, 38, 63,133,146,146, 18,203,200,145, 35, 55,232,245,250, 21,161, 52, 41,165, 56,122, +244,168,170, 37,138, 98,157,243,158,227, 56,124,248,225,135,248,237,183,223,194,202,187,197, 98,193,204,153, 51,213,188,249,211, +245,254, 31, 42,239,132, 16, 46, 37, 37,229,197,222,189,123,143, 91,180,104, 81, 28, 33, 4,115,231,206,133, 32, 8,184,225,134, + 27,144,144,144,128,149, 43, 87, 66,163,209,224,241,199, 31, 15, 43,141, 12, 6,131,113,185, 16,208, 96,237,218,181,235,122,229, +255, 53,215, 92,179,111,195,134, 13, 87,121,133,242,225,114,185, 52, 46,151, 43, 83, 41, 54,116,185, 92,176,217,108, 24, 51,102, + 76,208, 55,122,201, 97,175, 53, 30,232, 38, 29,206,131, 75,193,110,183, 99,212,168, 81, 0, 16,210, 92,133,249, 96,128,205,102, +131, 32, 8,104,217, 36, 17, 79,143,202, 70, 46, 79, 97, 41, 5, 80, 82,141, 59, 83, 5,236,202,200,196,156,163,165,248,173,162, + 10,130, 16, 94,105,169, 44,203,181, 12,149,239,255,121,243,230, 97,244,232,209,224,121,190, 78, 17, 18,227,143, 65,118, 58,107, +141,251, 59, 6,245, 61, 54, 46,171, 21, 0,192,123, 25,114, 81, 20,161,213,235,193,139, 34, 4,173, 6, 37, 37, 37,150,129, 3, + 7,254,100, 48, 24, 22,164,164,164,156, 56,126,252,120, 64, 61, 66, 8, 40,165, 16, 69, 17,130, 32, 4, 60,231, 63,252,240, 67, + 44, 92,184, 16, 61,122,244, 8,235,156,183,219,237,208,104, 52,152, 49, 99, 70,157,249,239,188,243, 78, 29,131, 21, 66,143, 0, +224,146,147,147,239, 91,188,120,113,180,178,253,132,132, 4,136,162,136,172,172, 44, 68, 69, 69, 97,195,134, 13,144, 36, 41,108, +179,202, 96, 48,254,178,136, 0, 58, 3, 72, 4, 32, 1,168, 4, 16,235, 53,255,172,231, 55,209,107,124,155, 31,157,238,158,101, +148,249,202,184, 29,128,214,207,244, 82, 0, 6,207, 96, 3,176, 9, 64,150,215,118,148,245,188,211,177, 13,240, 24, 44,226,238, + 85,117, 45,128,190,254, 58,191, 83,138, 11,247,239,223,239,183,184,208,155, 80,205, 59,117,141,146,212,200,213,231, 45, 19,212, +233,163,139,202,212, 27,236,127,123,180,134,206,108, 66,246,115,175, 4,221,150, 39,237,176,219,237, 56,115,230, 76,157, 55,239, + 11, 53, 88, 0,224,116, 58, 97, 48,232,240,195,187,215,162,248,176, 11, 51,242,143, 97,217,214, 35, 16, 4, 1,195,174,106,141, +191,185,128,188,120, 61,254,233,146,224,144,105, 88, 15, 48, 74,105, 29,115,229,109,178, 8, 33,234, 52,246,176,249,115, 72,232, +220, 77,141, 92, 45,106, 28,165, 78, 87,162, 86, 0,176,172, 75, 51,232,163,204,200,122,104, 74, 72, 61, 66, 8,154, 15, 27,161, + 70,174,190,233,214, 2,130, 70, 3, 81,167,197,223,126, 57, 6,192, 93, 44,216,175, 99,187,117,101,188,246,163, 59,238,184,227, +240,154, 53,107,140,225,164, 85,163,209,212, 50,108,254,204,149, 32, 8,112,250,152,198, 64,233,180,217,108, 1,141,147,114, 93, +213, 39,130, 5, 0, 53, 53, 53,246,101,203,150, 97,206,156, 57, 72, 72, 72,192,160, 65,131,144,146,146,130, 37, 75,150,128, 82, +138, 7, 30,120, 0, 6,131, 1, 6,131,129,157,243, 12,198, 95,156, 16, 94,228,218,169, 83,167,102,231,229,229,205,236,217,179, +231,167,155, 54,109, 90, 76, 8,201, 87,102, 82, 74,135,121, 52,242,189,198,187,163,182,201, 18, 1, 36, 18, 66,242,149,229,189, +199,189,166, 15, 0,160, 85,198,167, 78,157,154,149,151,151, 55,115,202,148, 41, 79,206,154, 53, 75, 51,117,234,212,142,121,121, +121, 51,149,237,248, 75, 7,112, 62,130, 21,180, 23, 96,135,195,113,100,192,128, 1, 97,181,248,177, 88, 44,167,130,205, 87, 12, +154,191, 74,222,202, 52, 93,148, 25,134,168, 40,144,224,165,131, 42, 78,167, 19,130, 32,128,227, 56,172, 90,181, 10, 6,131, 1, + 67,135, 14,189,224, 34, 66,197,180,105,181, 26, 8,177, 28,238,120,109, 59,206,158,171, 81,139, 4, 87, 23, 29,195, 86,131, 1, + 79,183,235, 8,115, 85, 17, 42,108,246,144,154, 64,224, 8,214,232,209,163, 97,181, 90,193,113,156, 58,141,227,184, 6,237,203, +139, 17,156, 64,141, 16, 8, 33,208, 71, 71, 65,111, 54,131, 23, 66, 85,191,114, 67, 41, 61,111,132,180, 90,136, 58, 45, 4,141, +187,196, 93,137, 92,149,241,218,143, 78,156, 56,241, 19, 0,125,184, 6, 75,137, 96, 5, 51, 87,130, 32,192,225,112,132,101, 94, +108, 54, 27, 52,154,243, 53, 1,142, 30, 61,170,254,247,103,176, 66,228,153, 18, 66,100, 66,136,220,162, 69, 11,117,157,228,228, +100,196,198,198, 66,150,101,200,178, 12,189, 94, 15,131,193, 80,107,187, 12, 6,227, 47, 75, 48, 47,162,203,203,203,155,233,109, + 96,128,218,134,198,219, 56,249,152, 40,133,107,167, 78,157,154, 21, 44, 1,222,102, 75,153,166,108,151, 16,146, 63,107,214,172, + 97, 33,210,161, 68,210,206, 23, 17, 6,235, 21,214,187,184, 48, 18,248, 43, 98,241,126,128, 25, 98,162,161, 53,153,224,169,126, + 21,212,216, 17, 66,224,112, 56,212, 58, 39,247,222,123,111,192,183,122,239,186, 41,161,176,219,237,224, 57, 30,208, 53,135,140, + 45,234,195, 74, 29, 52, 26, 20, 53,233, 4,114,234, 4, 4, 33,188,250,254, 74, 4, 75, 49, 81, 15, 60,240, 0,230,207,159,175, + 86, 76, 6, 0,158,231,209,166, 77, 27, 28, 58,116, 40, 44, 77, 70,100,161, 52,112, 52, 82,153,174,143,142,130,206,108, 6, 31, + 70,164, 81,153,175,214, 97,210,235,192,107, 52, 16, 52,238, 98,193,155,110,186,105, 93, 89, 89,217, 71,237,219,183,255, 31,220, +221, 24,132,116, 66,202,245,227,239, 60,255,232,163,143,106,153,171,250, 68,176,148,235,200, 27,127,197,133, 35, 71,142, 12, 55, +130, 69, 9, 33, 84, 20, 69, 12, 24, 48, 0, 29, 59,118,196,178,101,203, 32,203, 50,238,191,255,126, 24, 12, 6,204,158, 61, 27, + 46,151, 11,121,121,121, 44,130,197, 96, 48,130,121, 17,203,148, 41, 83,158, 36,132,228,123, 34, 73,133,158,229,253, 25, 41,127, +116, 71,109,147,118,214,223, 66,222,145, 44,111,147,229,253, 95, 97,234,212,169, 89,126,210,161, 70,204, 84,131,229,229, 26, 27, +148,178,189, 5,106,133,118,165, 88,144, 16,130,239,114,174,130,214,108,130,222,108, 70,175,165, 63, 2,112,191, 53,227,197, 87, + 67,106, 58,157, 78,213, 56,149,150,150,134, 44, 34, 12, 7,167,211, 9, 94, 35,226, 39,179, 8, 42,242,181, 30, 88,162, 40,130, + 19, 68, 20, 37,102,130, 8, 43, 33, 72,174,176, 30, 14, 74, 36,195,187,245,212, 29,119,220, 1,142,227, 84,147,213,165, 75, 23, +239, 85,216, 19,231, 15,230,228,247, 43,240,237,109,238,107,213,187, 88, 48,191, 71, 43,232,162,204,208,153, 76,232,179,124,147, + 90,156,139,217,239,133,212,220,255,254,219, 40,124, 99, 22, 4, 81,196,136,157, 69, 0,220,145,171,220,171, 90,255,100, 55, 69, +127,116,244,232,209,159, 0,112,183,221,118, 91,108,215,174, 93,195, 10,139, 17, 66,106, 85, 60, 23, 4,193,175,185, 18, 4, 1, + 46,151, 43,172,188, 59, 28,142,176, 34, 73, 74, 20, 43, 20,148, 82,218,182,109, 91,240, 60,143,152,152, 24, 68, 69, 69,169, 45, +104,149,200,149, 82,127, 51,220,235,146,193, 96, 92,217, 4,241, 34,182, 89,179,102, 21,206,154, 53, 75,141, 36,121,150, 15,101, +174,110,128,219, 76, 37, 42,230, 12,238,186, 84,254,234,103, 41,105,168,163,233,107,184, 0,119,100,203, 79, 58,212, 98, 73,191, +181,179, 59,119,238,252,173,209,104,108, 30, 34,209, 42,245,233,116, 84,114,156,239,121, 64, 49, 87,132, 16,232,205,102,104,163, +204,208,153,205,181,230,133,130, 16,162, 22, 17,242, 60,175, 62,116, 22, 44, 88, 0,179,217,140,187,238,186,235,130, 42,185,187, + 13, 22,143,175, 53, 7, 0,141, 80,231,161,197,139, 34,142,198, 52, 6, 39,138, 16,164,240, 34, 4,229,229,229,224,121, 30,207, + 62,251, 44,242,242,242,212,102,244,222, 77,235,149,101, 25,127, 14,222,149,220,107, 69, 85,163,162,212,243,211,123,122,168, 58, +137,132, 16, 64,114,185, 91, 11,234,220,245, 32,149,200,149,221, 20,253,209, 85, 87, 93,165, 68,174, 56,163,209, 24,178,213,172, +162,233, 93,223,208,215, 92, 41, 81, 82,229,191,211,233, 12,235,156, 87, 12,214,252,249,243,131,190,140, 40,219, 13,247, 60,229, + 56, 14,235,215,175,199,206,157, 59,113,239,189,247,194, 96, 48,224,205, 55,223,132,203,229,194,244,233,211, 97, 48, 24,160,213, +106, 67, 11, 49, 24,140,191, 50,113,138,193,241,152, 36, 0,181,235, 92,121,155,160, 64, 69,133,158,136,211,250, 16,219,250, 6, +110, 99,230, 23, 37,146,230, 61,205,119,187,128,199, 96,249,126,203, 75,171,213, 54,223,184,113, 99,166, 44,203,144, 36, 9,193, +126,237,118, 59,110,189,245,214,176, 59, 29,149,157,110,131,197,249,180,148,211, 69, 71, 65,107, 62,255, 0,243,122,136,133,188, +139, 43, 17, 44,111,131,245,236,179,207, 66, 16, 4,204,159, 63, 31, 0,240,216, 99,143,213, 59,130, 69,101, 96,147,180, 22,105, +115, 59,129,126,164,199,233,245,251, 32,138, 34, 82,122, 12,132,156,253, 55,148,106,163, 97,242,212,171, 10,167,216,177,180,180, + 20,191,253,246, 27, 8, 33,120,228,145, 71,130,154,171, 85,171, 86,177, 58, 88,127, 2,138,193,226,120,119, 32,201,223,249,233, + 61, 61,156,243,147,186, 92, 16,117,186, 90,173, 5,203,202,202, 62, 58,122,244,232, 22, 0,100,220,184,113,177, 70,163, 17,239, +191,255,126, 13, 0,205,210,165, 75, 13,161, 52,189,235,241,249, 70,174,124, 13,150, 36,133, 46,194, 86, 94, 42,194,137,246,214, +199, 96, 41,231, 55, 33, 4,146, 36,169,145, 43,167,211,169,142,235,116,186,144, 58, 12, 6,227,202, 39,196,119, 69,207,250,212, +115, 34, 62,145,166,179,158,117,107, 25, 43,239,226, 64,175,255,222, 81, 17, 69,215,238, 83,116,232, 59, 93,249, 45,157, 53,107, +214, 15, 74,228,202,107,122,173,116, 0, 1, 34, 88, 28,199,193,102,179, 97,239,222,189,193,247,198,249,229,195,238,116, 52,161, +219,213, 24,243, 91, 57, 8, 33, 88,217,187, 61,244,102, 51, 52,102, 19,114,190, 88,171,222,176,139,242, 30,135,198,100, 70, 66, +175,129, 33,245,148, 27,183,175,193, 42, 43, 43,131, 40,138,120,241,197, 23,193,113, 28, 94,122,233, 37,164,167,167,163,184,184, + 24,125,250,244, 9,169,233,116, 58,193,201, 28,244,119,198, 67,255,207, 40,112,247,182, 66,214,141,255, 68,121,101, 51,236,182, +155,208,182,250, 0,226,190,127, 14, 14,217, 21, 86, 55, 13,132, 16,184, 92, 46,252,240,195, 15, 16, 69, 17, 46,151, 75,125,248, + 80, 74,213, 94,242,149, 78, 29, 95,122,233,165,176,246, 39, 35,178, 52,190,225,102,220,113,178, 6, 0,240,109,206, 85,208,153, + 76,208, 70,153,209,235,171,245,234,249,121,120,230,163,208,152,204,136,237,222, 59, 44,205,118,247, 63,134,182,247, 61,138,146, +146, 18,203,128, 46, 89,235,203,121,221,135, 29, 58,116, 80,235, 92, 25,141, 70,232,245,122,226, 25, 15,233,212,189, 77,121, 40, +115,165,252, 15, 7,167,211, 89,167, 21,174, 63,194, 45, 34, 84,224, 56, 14,119,221,117, 23, 82, 83, 83, 49,103,206,156, 90,145, +171, 39,159,124, 18, 78,167, 19,179,103,207, 14, 91,143,193, 96,252, 37, 9, 88,164,231,135,238, 94,102, 41,212,122,129,230,215, +103,123,126,241,123,231,181,217,108, 69,253,251,247,247,187,130,205,102, 75,215,233,116,181,238,174, 74,167,163,190, 69,133,132, +144, 14,148,210, 2,239,101,149, 74,196, 74,107, 44,157,217, 12,173, 79,177,139,214, 28, 5,209,100, 6,231,231, 38,238, 79,211, + 95, 4, 75, 41, 58, 41, 47, 47,135, 40,138,152, 51,103, 14,162,163,163, 97,179,217,252, 85,176,247,171,201,243, 60,106,126,171, +193,145,103,118, 67,103, 58,136, 54, 3,163, 16, 37, 30, 66,235, 31,151,194,229,178, 3, 94, 69,134,225,104,182,105,211, 6,207, + 62,251,108,157,238, 25, 2,209,173, 91,183,144,154, 23, 11,211,244,175, 73, 8,129, 46,202, 12,125, 84, 84,192,243, 83,240,211, +119,147,175,166, 50, 95,137, 92, 85,105,140, 31, 30, 61,114,100, 11, 0,110,220,184,113, 49, 70,163, 17,243,230,205,171, 1,192, +189,240,194, 11,198,166, 77,155,214, 57, 33,252,165,147,227, 56, 44, 88,176,160, 78,157,171, 64, 6, 43,156,116,186, 92,174, 58, + 6,107,212,168, 81,117, 58, 26, 13, 20,193,242,151, 78,165,174, 90,163, 70,141, 96, 52, 26,213,207,110,233,245,122,232,245,122, +181,119,248, 64, 69,173, 87,194,185,196, 52,153, 38,211,252,195,185,104,115, 20, 9,252, 26,172,159,127,254,121, 72,160, 21,114, +115,115, 15,108,220,184,177,181,247,183, 9, 93, 46,151,198,102,179,101, 14, 31, 62, 60,228,171,178, 44,203,208,233,116,160,148, +162,243,211,121,238, 87,120,238,124,145, 32,165, 20,177,185, 3, 64,120, 30,146, 36,195,233,116,134,108, 69,104,181, 90,107, 85, + 64,247,215,124,189,170,170, 42,104, 63, 63,190,154, 22,139,165, 86,189, 46, 34, 81, 28, 94,189,164,110,107, 66,207,118,194, 69, +175,215,215, 42, 54, 9,149,148,176,133, 25, 17, 65,233,192,147, 82,138,172, 7,167,184, 35, 69, 60, 87,107,126, 76,247,222, 32, +130, 8,217, 93,111, 41, 84,195, 16,114,246,236, 89,203, 77, 55,221,180,142, 82,250,193,240,225,195,127,133,187,130, 37, 53,155, +205, 58, 81, 20,101, 0,191, 3,160,231,206,157,139, 57,113,226,132,108,181, 90,155,132, 74,231,250,245,235,113,240,224, 65,116, +237,218, 85,141,124, 42,131, 82,124,127, 33, 17, 44,223,174, 24,124,199,195,237,166,193, 27,142,227, 16, 19, 19, 3,173, 86,139, + 23, 95,124, 17, 26,141, 6, 6,131,187, 20,116,246,236,217,234, 62,103, 48, 24,140, 43,137,122,127,176, 89,150,101, 62, 80,241, + 97,168,162, 66, 73,146,142, 95,125,245,213,245,221,222,233, 96,243, 41,165,199,127,252,241, 71,141,119,132,193,251, 55,192,180, +144,154,219,182,109, 83,155, 83, 5,211,244,250, 31, 84,211, 55,239,225,212, 95,113,185, 92, 39, 66, 46,196,136, 24, 46,151,235, +120,143, 30, 61,252,207,124,214,127,145,173, 36, 73, 65,143,187,211,233,252, 95,102,102,230, 73,179,217,252, 77,114,114,114,233, +198,141, 27, 19,186,119,239,158,224,189, 76,247,238,221, 83,125, 86,179, 35, 72,247, 36,132,144,227,119,220,113,135, 38,196,249, +232,251, 63,112,215,240, 30,205,194,194, 66,141,247, 58,161,126, 41,165, 65, 53, 61,252,118,253,245,215,115,254,174, 33, 95, 36, + 73,242,219,108,154,193, 96, 48, 46, 71,234,109,176,172, 86,235,177,254,253,251,251,109,247, 93, 83, 83,115,212,223,116,133,194, +194,194,236,250,110, 47, 20,199,143, 31,207,185, 28, 52, 27, 34,239,140,200,210, 16,199,168,176,176, 48,128, 99,187,112,142, 30, + 61, 26,241,243,179, 33, 52, 1, 96,207,158, 61, 61, 27, 66,151,193, 96, 48, 46,117,234,109,176,194,237,142,129,193, 96, 48, 24, + 12, 6,227,175, 74,232,190, 5, 24, 12, 6,131,193, 96, 48, 24,245,130, 0,232,224,111, 70,125, 90, 7, 16, 66,252,106, 4, 35, +148, 62,211,100,154, 76,147,105, 50, 77,166,201, 52,175, 60,205, 80,218,151,112,235,196,122, 65, 66,245, 68,125, 81,226,151, 73, +211, 80,166,201, 52,153, 38,211,100,154, 76,147,105,254,185,154, 87, 26,172,136,144,193, 96, 48, 24, 12, 6, 35,194,212,187,146, + 59, 35, 50, 16, 66,120, 74,105,216, 61,224,135, 65, 44,128, 64, 31,116,179, 3, 40,187, 64, 93, 45, 0,209, 51, 0,238, 79, 12, + 56, 61,154, 12, 6,227, 10, 34, 59, 59,123, 2,165,116, 6,220, 95,129,122,113,251,246,237,111,253,217,105, 98, 48, 46, 87, 2, + 26,172, 86,173, 90,109,231, 56, 46,195,223, 7,136, 3,245,139, 35, 73,210,241,125,251,246,133,213,212,157, 16, 34,164,166,166, +142, 50,153, 76,215,241, 60,159,235, 89,127, 99,117,117,245, 15,197,197,197,159, 83, 74,253,118, 5, 17,138, 22, 45, 90, 68, 91, +173,214, 91, 9, 33, 99, 1,128, 82,250,137, 94,175,255,207,225,195,135, 43, 46, 68,143, 16,210, 42, 37, 37,229, 19, 81, 20,249, + 99,199,142, 93, 7, 0,141, 27, 55,254,193,110,183, 75,103,206,156, 25, 75, 41, 61, 88, 79, 61, 78,163,209,228,245,238,221,187, + 23, 33,228, 99, 74,233, 59, 23,146, 46, 63,232, 56,142,251,205,223, 12, 89,150,155, 94,128,158, 6, 64,204,236,217,179,227, 23, + 46, 92,216,165,184,184,184, 35, 0,164,166,166,238, 30, 55,110,220,207, 15, 63,252,240,239, 0,202, 1, 56,130,170, 48, 46,121, + 50, 51, 51,183,115, 28,151, 81,159,190,228,136,251, 19, 85,199,247,236,217,227,247,122,207,204,204,220,206,243,124, 70, 48, 13, +127,255,101, 89, 62, 92, 88, 88,232,183,203,136, 54,109,218,108,230,121,190,121,168,180,249, 75,103,160, 46, 56,218,180,105,179, +157,231,249,140,250,106,202,178,124,184,160,160, 32, 80, 58, 47, 72,243,143, 78, 39, 0,244,237,219, 87, 87, 93, 93,253,137,217, +108,238, 84, 93, 93, 61,129, 82, 58,109,237,218,181,201, 28,199, 97,192,128, 1,211,178,179,179,143,232,116,186,185, 86,171,245, +103,179,217, 60,102,237,218,181,182, 64, 90, 12, 6,163, 54, 1, 13, 22,199,113, 25, 59,119,238, 76, 50,153, 76, 0,160,126, 47, + 79,233, 37, 90, 25, 40,165,160,148,194,229,114,161,111,223,190, 97,109, 52, 35, 35,163, 67,155, 54,109,150, 60,240,192, 3, 77, +110,188,241, 70,109,114,114, 50, 8, 33, 56,117,234, 84,102,126,126,254,237,115,230,204,121, 54, 35, 35,227,150,227,199,143,135, + 91, 81,142, 75, 77, 77,237, 15,224,206, 14, 29, 58,140,124,236,177,199, 52,185,185,185,144, 36, 9,223,127,255,125,239,215, 95, +127,125, 78, 90, 90,218,151, 0, 62, 42, 46, 46, 94, 67, 41,149,195,212,237,210,188,121,243,255,172, 95,191,190,121, 81, 81,145, + 52, 98,196,136,143, 1, 96,227,198,141,157, 40,165, 36, 55, 55,247, 91, 66,200,173,148,210,159,195,202,184,155,225,147, 38, 77, +186,229,254,251,239, 79,156, 48, 97,194, 56, 0,239,120,182,165,124,228,178,190,149,226,212,200, 21,165, 84, 19,100,185,100,132, + 31,201, 50, 29, 62,124, 56, 54, 55, 55,247,254, 51,103,206, 76,246,214, 61,125,250, 52,118,237,218,229,120,233,165,151, 94,223, +184,113,227,219, 45, 90,180, 40, 3, 80, 93,207, 52, 51, 46, 33,120,158, 79,223,190,125,123,146,209,104, 84, 63,228,238,125,157, + 43,215,184,247,169, 73, 41,197,181,215, 94, 27, 76, 51, 99,199,142, 29, 73, 6,131, 65,189,119, 4,211,243,210, 12,104,216, 57, +142,107,186,109,219,182, 36,163,209, 8, 74,105, 72, 61, 66, 8, 40,165, 65,191, 61,170,164, 83,175,215,135,165,169,144,155,155, + 27, 48,250, 92, 95, 77, 37,157, 61,123,246, 12,120,237,243, 60,159,177,115,231,206, 36,229, 43, 24,245, 72,103,208, 23,160,234, +234,234, 79, 62,255,252,243, 17,201,201,201, 24, 62,124,248,202,246,237,219,107,141, 70, 35,190,253,246, 91,100,100,100, 52,138, +142,142,254,239,172, 89,179,240,234,171,175, 54, 89,181,106,213, 98, 0, 35,130,233, 49, 24,140,243, 4, 51, 88, 48,153, 76,248, +244,211, 79,253,126,126,198,247,127,211,166, 77,195,218, 96, 74, 74, 74,118,179,102,205,214, 45, 93,186,212,144,148,148,164, 78, +119, 56, 28,136,142,142,198, 93,119,221,165, 29, 48, 96, 64,235,219,111,191,253,167,148,148,148, 62,167, 78,157,218, 30, 76, 47, + 53, 53,117,100, 86, 86,214, 91,147, 39, 79, 78,190,233,166,155, 16, 23, 23, 87,107,254,176, 97,195, 48,116,232, 80,205,225,195, +135, 71,127,254,249,231,163, 63,254,248,227, 83,169,169,169,147,138,139,139,191, 12,166,107, 50,153, 6,116,238,220,249,253, 53, +107,214,100,196,198,198, 34, 45, 45,141,123,230,153,103, 58,180,108,217,210,144,154,154,202,157, 60,121, 18, 95,126,249,101,203, +113,227,198, 45,211,235,245, 19,172, 86,235,154, 80,121, 39,132,104,227,227,227, 31,255,231, 63,255,153, 80, 89, 89,233,218,185, +115,231, 65,101,186, 78,167,155,118,205, 53,215,116, 37,132,124, 70, 41,253, 40,148,150, 23,106,228,138, 82, 90,129,243, 69,121, + 10, 78,101,126,152,145, 44,237,206,157, 59,227,114,115,115,191,178,217,108, 93,255,254,247,191,159,120,229,149, 87,180,209,209, +209,209, 0, 72, 89, 89,217,185,231,159,127, 94,122,243,205, 55,159,104,223,190,125,255,141, 27, 55,142,232,218,181, 43, 43, 50, +188,204, 49, 26,141, 88,190,124,185,223,207, 76,249,187,230, 99, 99, 99, 67,126,141,192, 96, 48, 96,213,170, 85,234,122,222,159, +150,242,247, 63, 54, 54, 22,148,210,160,162,122,189, 30, 27, 54,108, 80, 63, 3, 20,232,190,164,252, 26,141, 70, 16, 66,130,214, + 53,213,235,245, 88,183,110, 93, 72, 45,229,215,108, 54, 3, 64,224,143,136,122,165, 51, 84,158,149,255, 38,147, 41,228,254,212, +233,116,170,166,183, 70,160,113,207,203,113, 80, 81,131,193,208, 41, 57, 57, 25, 91,182,108,193,115,207, 61,167,205,202,202,194, +129, 3, 7,192,113, 28, 38, 76,152,128,246,237,219,227,212,169, 83,104,223,190, 61, 54,108,216,208, 37,104, 2, 25, 12, 70, 45, + 66,214,193, 10,116,131,245,253, 15,212,253, 12,134,111, 11,131,102,205,154,233,204,102,243, 23,203,151, 47, 55, 36, 36,156,255, + 90,136,221,110, 71,101,101, 37,170,170,170, 80, 89, 89, 9,147,201,132,185,115,231, 26,198,142, 29,251, 69,179,102,205, 50,139, +138,138,108,129, 52, 9, 33,175,239,218,181, 43,217,229,114, 65,171,245, 95, 5,137,227, 56,180,106,213, 10,147, 38, 77, 66,175, + 94,189, 82, 70,143, 30,253, 58, 0,213, 96,249,107, 9,145,154,154,250,246,198,141, 27, 51,180, 90, 45, 14, 28, 56,128,227,199, +143, 99,226,196,137, 77,101, 89,198,177, 99,199,112,224,192, 1,156, 60,121, 18,239,189,247, 94,198,216,177, 99,231, 2,104, 29, + 44,239, 30,238,121,228,145, 71, 90,199,197,197,113,175,188,242, 74,121, 85, 85,213,123,158,233, 83,103,207,158, 61,166, 79,159, + 62,137,127,255,251,223, 41, 33,228, 83, 74,105, 29,195,226,163,233, 47,114, 37, 81, 74,247,249,172,214,214, 39,178,149, 12,247, +183,240,202,253,104, 18, 0,209, 67,134, 12,121,212,102,179,117,253,241,199, 31, 15,246,234,213,171, 41,128, 98, 74,233, 89, 0, +136,139,139, 51,189,241,198, 27,201,195,134, 13,251,117,192,128, 1, 93,135, 12, 25,242,232,217,179,103,103, 0, 40,129,231,243, + 46, 13,209,178,132,105, 54,156,166,167, 40, 9,130, 32,224,250,235,175, 7, 33,196,239,247, 54, 55,111,222,140,254,253,251, 67, + 20, 69,220,125,247,221, 97,107, 14, 30, 60, 24, 46,151,171,142,158,175, 1, 33,158,111,116, 6,203, 59,165,180,214, 55, 66,253, +153, 11,239,193, 87,207,159,166, 44,203,126,181, 2,153, 44, 66, 72,208,123,157,119,222,195, 53,151,161,210,233,173, 41,138, 34, +114,114,114,176,115,231,206,160,102, 43, 84, 58, 1,160,186,186,250,206,225,195,135,175,156, 56,113,162, 30, 0, 74, 74, 74,106, +125,136,126,255,254,253,176,217,108, 88,180,104, 17,108, 54,219,189,117, 18,233, 71, 51, 18, 48,205,191,166,102, 8, 68, 0,157, + 1, 36, 2,144, 0, 84,194,253, 28,180,195,253, 44, 44, 5, 96,240, 12, 54, 0, 85, 0, 26,121,214, 45,129,251,249,230,253,153, +178,179,168,253, 81,232,238, 30,109,229,147, 93,137, 94,243,148,109,248,142,251,254,214,210,230, 0,128, 16, 66, 61, 67, 31,101, +174, 18,182, 14,199, 92, 41, 55,199, 80, 80, 74, 31,152, 58,117,106,178,183,185,178,217,108,168,168,168, 64,101,101,165,250,123, +224,192, 1,104,181, 90,140, 26, 53, 42,153, 82,250, 64, 8, 89, 13,207,243,216,185,115, 39,150, 46, 93,138, 35, 71,142,212, 89, +224,208,161, 67,120,227,141, 55,240,234,171,175,162,162,162, 2,112,215, 47,242, 75,231,206,157,159, 27, 59,118,236, 79,125,251, +246,213, 9,130,128, 93,187,118, 33, 51, 51, 19,155, 54,109,194,209,163, 71,113,238,220, 57,236,223,191, 31, 29, 58,116,192,193, +131, 7, 81, 81, 81,129,172,172, 44, 93,183,110,221,126,108,214,172,217,115,129,116, 9, 33,154,244,244,244, 39,255,249,207,127, +234,138,139,139,229, 5, 11, 22,108,164,148,110, 34,132, 76,124,234,169,167,198, 15, 30, 60, 56,113,223,190,125, 21,219,182,109, +219,238,207, 92,249, 65,199,113,220, 81,142,227,126,163,148, 86, 80, 74, 45,112, 87, 62, 87,241, 20,221,218, 44, 22, 75,121,105, +105,105, 9,199,113,191,113, 28,119, 0,128, 46,144,230,184,113,227, 90,150,148,148,220,255,240,195, 15, 31,233,213,171, 87, 83, + 74,233,126, 74,105, 41,220, 39,172,205,229,114,149,150,149,149,253,154,155,155,155, 58,102,204,152,131, 37, 37, 37,247,143, 27, + 55,174,101, 16, 77,198,165, 15,149, 36, 9,162, 40, 98,237,218,181,216,176, 97, 3, 54,108,216,128,141, 27, 55, 98,211,166, 77, +216,188,121, 51, 54,111,222, 12, 65, 16,176,105,211, 38,108,218,180, 9,147, 38, 77, 10,121,205, 75,146, 4, 65, 16,176,110,221, + 58,108,221,186, 85, 29,182,109,219,134,173, 91,183,194, 96, 48,132, 52, 67,222,120,234, 41, 5, 52, 83,111,191,253,182,106, 14, +149,123, 19,199,113, 65,163, 98,190,198,197,215,176, 52,109,214,172,206,188, 80,233, 4,160,106,254,251,223,255,198,137, 19, 39, + 48,103,206, 28, 28, 58,116, 8, 47,191,252, 50, 10, 11, 11, 49,125,250,116,108,219,182, 13, 83,167, 78,197,143, 63,254,168,124, +252, 61,104,245, 0,197, 8,230,228,228,192,225,112,168,233,217,191,127, 63,102,206,156,137, 93,187,118, 97,218,180,105,216,188, +121, 51, 30,127,252,113,240,124,208, 32, 27,178,179,179, 39, 16, 66, 62,111,211,166,141,174, 95,191,126, 16, 4, 1, 51,103,206, +148,167, 77,155,118,230,169,167,158, 58,147,159,159, 79, 91,182,108, 9,187,221,142,168,168, 40, 80, 74, 63,202,206,206, 14,117, + 63,102, 48, 46, 24,127, 94,196,139,107,167, 78,157,218,143, 16,146,159,147,147, 51, 14, 64, 44, 33, 36, 31,128,214,243,155, 48, +117,234,212, 30,132,144,252,169, 83,167,102, 3,104, 68, 8,201,247,140, 95, 7, 32, 65, 25,247, 44,239,109,160, 68, 0,137, 94, +211, 19,125,150,213,250, 27,247,253,245,213, 86, 35, 88,148, 82,226,185,192,213,155,145,114,211, 13,215, 96,133,186,225,154,205, +230,161, 67,134, 12, 81,205,141,205,102,171, 21,185, 82,126, 43, 43, 43,241,235,175,191,162, 67,135, 14, 26,179,217, 60, 20,192, +191, 66, 29, 24, 65, 16,144,150,150,134,146,146, 18, 20, 20, 20,160,105,211,166,112, 58,157, 88,177, 98, 5,202,202,202,160,209, +104,160,209,104, 96,183, 7,247, 46,109,219,182,189,126,225,194,133,217, 31,127,252,241, 57, 65, 16,176,127,255,126,124,242,201, + 39,160,148,162, 81,163, 70,168,169,169,193,153, 51,103,240,250,235,175,195,225,112,192,108, 54, 35, 61, 61, 93,255,192, 3, 15, +244,122,254,249,231, 69, 0,207, 5,144,190,122,228,200,145,209, 81, 81, 81,120,232,161,135,100,135,195,241, 42, 33,228,154,145, + 35, 71, 62, 57,105,210,164,248,162,162, 34,251, 61,247,220,179,221,225,112,188, 14, 0,132, 16,145, 82,234, 12,160, 5, 32,120, +228,202,229,114, 41,251,244, 72,101,101, 37,146,146,146,154, 80, 74, 53, 33,142,145,102,211,166, 77, 57, 0,248, 23, 94,120, 65, + 79, 41, 61, 13, 47,211,230,112, 56, 20, 77, 87,121,121,249,153,199, 31,127,220,181,120,241, 98,222,179,206, 94, 0,214, 96,226, +140, 75, 19,197,184,136,162,136,235,175,191,190,150,161, 88,191,126, 61,134, 12, 25,162, 94,239, 26,141, 70, 93, 46,148,166,119, + 84, 76,137, 60, 41,186, 63,252,240, 67,157,200, 75,152, 47,105,106,132,197,159,241,241, 53, 93,202,139, 98, 48,252, 69,155,188, + 35,243,254, 34, 67,225,164, 83, 20, 69, 76,154, 52, 9,130, 32,224,241,199, 31,135, 40,138,232,220,185, 51, 4, 65, 64,207,158, + 61, 33, 8, 2,174,187,238,186,176, 95, 80,149,116,110,222,188, 25,221,186,117, 83,211,211,185,115,103,116,239,222, 29,130, 32, +160,119,239,222, 16, 4, 1,131, 6, 13, 10,169,169, 84,104, 55,155,205,248,245,215, 95,193,243, 60, 8, 33,165, 59,118,236, 72, + 6,128,231,158,123,174,196,106,181, 38, 88,173, 86,244,239,223, 31, 57, 57, 57,137,139, 23, 47,126, 6, 0,107, 89,200,104, 48, +252,121, 17, 15,186,188,188,188,153,148,210, 97,129,214, 85,230, 19, 66,242,103,205,154, 53,204,163, 87,103,220,179,184,247,199, +229,175,157, 58,117,106,150,215,248, 89,101, 61,239,237, 5,219,182,207,242,103, 1, 47,131,229,201, 80, 95,175,113,191, 6, 43, +144,209, 10,231, 6, 97,181, 90, 59, 43,209, 43,171,213, 90,203, 80, 85, 85, 85,213, 50, 90,118,187, 29, 45, 90,180,128,213,106, +237, 28, 82,216, 11, 66, 8, 82, 83, 83,225,112, 56, 48,127,254,124,213, 88, 41, 56, 28,193, 27,189,237,217,179,231,200, 79, 63, +253,212,181, 91,183,110,113, 95,125,245,213,217, 1, 3, 6, 36, 14, 30, 60, 24,122,189, 30, 86,171, 21, 46,151, 11, 87, 95,125, + 53,218,182,109,139, 51,103,206,224,219,111,191, 45,201,204,204,108,180,101,203, 22,249,212,169, 83,191, 5,145,238,223,191,127, +127, 16, 66,240,237,183,223,254, 78, 41,221, 97, 48, 24,190,156, 57,115,102,172,205,102,147,199,143, 31,127,236,247,223,127,127, + 28,128, 83,167,211,253,107,224,192,129, 87,243, 60,255,153, 36, 73,245,190,153,217,108,182, 90,251,182,178,178, 18, 70,163, 49, +156, 46, 33,196,178,178,178,142, 0, 96, 52, 26,227, 1,168,249, 47, 19, 36, 0, 0, 32, 0, 73, 68, 65, 84, 45, 36, 45, 22,139, +122,140, 60,199,199, 26, 31, 31,111, 2, 0,207, 58,190,117,191, 24,151, 17,202,195,123,237,218,181,181,174,111, 37, 2,229,123, +205,107,181, 90, 44, 95,190, 60, 44, 77,111, 51, 21, 70,113, 94,208,104,147, 98,176, 4, 65,192,123,239,185, 75,216, 31,122,232, + 33,117,125,223,109,132,194, 59, 82, 47, 8, 2,218, 62, 43, 3,112,224,248,107,122,136,162,251,148,246, 77, 51,128,176,163, 98, +115,230,204,193,176, 97,195,144,159,159, 31,244,119,232,208,161, 97,165, 83, 16, 4,232,116,238, 96,177,146,158, 93,187,118,249, +213,157, 55,111, 94,200, 58,109,178, 44,227,155,111,190, 1,199,113,181, 34, 94,207, 60,243,204, 63,163,163,163,205,235,214,173, +195,233,211,167, 81, 93, 93,141,170,170, 42,196,197,197,197, 14, 24, 48, 96,215,169, 83,167,138,246,236,217,195, 42,188, 51, 34, +142,175, 23,241,194, 50,101,202,148, 39, 9, 33,249, 83,166, 76,121,114,214,172, 89,133,158,229,243,125,214,207,247,179,110,173, +249, 30, 19,164, 20, 15,118, 71,109,243,166, 20, 29,222, 16,100, 93,187,143,161,242, 45, 34,220, 6,132,136, 96,249,214, 77, 8, +246,223, 19,226, 14,150, 47,200,178, 44, 16, 66,234, 24, 0,127, 17, 44,167,211,137,210,210, 82,200,178, 28,209,190,186, 66, 25, +172,130,130,130,187, 38, 76,152,112, 50, 38, 38,166, 83,105,105,105,177, 78,167,235,189,126,253,250,198, 78,167, 19,209,209,209, +136,142,142,198,127,255,251, 95,196,196,196,224,225,135, 31, 62,106,177, 88, 54,153, 76,166,100,139,197,242,203,169, 83,167,158, + 14,164, 43,138, 98,255,222,189,123, 99,199,142, 29, 40, 43, 43,251,158, 16,210,233,239,127,255,251,160,198,141, 27,147, 25, 51, +102, 88, 15, 30, 60,248, 22,128,179, 38,147,233,223, 11, 23, 46,236,211,181,107, 87,243,248,241,227, 65, 8,121,159, 82, 26,118, +100,168,166,166,166,150,177, 82,246,105, 84, 84, 84, 88,125,110,121,246, 55, 37,132,168, 13, 26,189,141,149,151, 1,166, 60,207, +203, 0,104,164,143, 17,227,143, 69, 49, 4,162, 40,226,198, 27,111,172, 83,185, 93,163,209, 96,229,202,149,184,249,230,155,213, + 23,150,110,221,186,133,212, 85, 12,193, 77, 55,221, 4,192,109, 8, 86,174, 92, 25,208, 96,133, 42,210, 2,106, 71,155, 30,124, +240, 65,136,162,136,183,222,122, 11,147, 39, 79, 6,207,243,120,237,181,215,192,113, 28,158,121,230,153,176,243,239, 93, 68,120, +228, 37,247,111,198, 35, 21, 40,125, 39, 25, 0, 16, 21, 29,237,206,143, 28, 86,227,227, 90,121, 15, 21,185,242, 54, 86,161,138, + 8,189,163,128, 7, 14, 28, 80,255,247,236,217,179, 86,228, 74, 16,132,144,134,205,179,189,233,253,250,245,155,145,145,145,145, + 52,113,226, 68, 34, 8, 2,178,179,179, 27, 77,155, 54,173, 92, 20, 69,253, 99,143, 61,230,175, 42,133, 8,160, 83,187,118,237, + 76, 97,239, 12, 6,163, 30, 4,137, 96,217,102,205,154, 85, 56,107,214, 44,191, 17, 42,175,245,135, 5, 51, 89, 94, 81,168,238, +112, 27,161, 68,197,180,193, 93, 21,102, 91, 24,235,106, 21,115,229, 27,229,242,198, 55,130,245,188,247,204,112, 13, 86, 56,245, + 39, 0,192,104, 52,238, 46, 41, 41,233,169,211,233, 80, 81, 81, 81,231,161,237,109, 10,120,158,199,153, 51,103, 96, 52, 26,119, +135, 20,174, 7,161,138, 8, 61,102,230, 81,101,156, 16,210,125,212,168, 81,139, 63,251,236,179, 22,171, 87,175,198,150, 45, 91, +208,168, 81, 35,204,156, 57,243,112, 81, 81,209, 24, 74,105,192,131,225, 77,203,150, 45,219,155,205,102,108,220,184, 17, 0,126, + 4,112,231,125,247,221, 71, 28, 14, 7,230,206,157, 91, 3, 96,117, 76, 76,204,151, 75,150, 44,233,212,169, 83, 39,221,234,213, +171, 43,183,108,217,178, 54, 76,115, 37, 81, 74,253, 26,171,202,202, 74, 84, 87, 87,195,108, 54,135, 99,176, 92,209,209,209, 5, +149,149,149,183, 90, 44,150, 10,157, 78, 23, 85, 81, 81, 97,243,142, 48, 86, 85, 85,161,186,186, 26,130, 32,136, 7, 14, 28, 56, + 9,160,101,116,116,116, 1,128, 11,234,183,140,241,231,195,113, 28, 85, 76,198,234,213,171,253, 94,235,162, 40, 98,197,138, 21, +181,174,247,111,191,253, 54,160,166,119, 20, 71,105, 73, 24, 42,130,165,172, 26, 42,189,162, 40,130,231,121,188,243,206, 59,160, +148,170,145, 43,142,227, 48,101,202, 20,232,116, 58,188,248,226,139,152, 50,101, 74, 88, 81, 44,239,168, 88,243, 39, 44,234,116, +101, 93,135,221,238,142,210,115,156,183,201, 10, 43,210, 22,170,130,123,184,248, 70,218,116, 58, 93,192,202,237,190,171, 6,210, +220,190,125,251, 7, 93,187,118, 61,152,152,152,184, 42, 39, 39, 71,183,125,251,118, 76,154, 52,137,216,108,182,232,213,171, 87, +171,219,245,133, 82,138,234,234,106,125,216,137,103, 48,234,129, 63, 47,226, 33, 78, 49, 78, 30, 51, 20,174, 94,190,247,242,138, +134,175, 41,242, 68,196,214,135,210,242,183,110, 32, 4,207,194,117,174, 34,223,155, 68, 40,163, 21,206,219,167,197, 98, 89,179, +118,237,218,238, 55,223,124,179, 16,172,120,176,170,170, 10,201,201,201, 56,116,232,144,203, 98,177,132,236,254, 64,146,194,239, + 16, 61, 84, 4,203, 23, 74,233,182,172,172, 44,151,195,225, 64,235,214,173,145,158,158, 14,139,197,130, 55,222,120,195, 21,174, +185, 34,132,104,178,179,179,121, 0, 40, 47, 47, 7,220,173, 29, 50, 51, 51, 51,177, 99,199, 14,156, 59,119,110, 25,128,254,207, + 63,255,124,151,107,174,185, 70,243,217,103,159,213,220,123,239,189,203,156, 78,231,140,112,244,101, 89,182,187, 92,174,230, 28, +199, 57,202,202,202, 78,120, 27,171,228,228,228, 56,179,217,204,157, 57,115, 38,104,125, 46, 15,142,142, 29, 59,110, 61,126,252, + 56, 94,120,225,133,179, 51,103,206,204,172,172,172, 60, 87, 94, 94,238, 82,140, 85, 69, 69, 5, 44, 22, 11,151,152,152,168,155, + 55,111,158, 17, 0, 58,118,236,184, 21,172,195,209,203, 26,223, 6, 45,190,230, 42, 84,139,183, 64,154,130, 32, 96,248,240,225, +117, 34, 98,202,176,100,201,146, 90,245,154, 66, 21,189, 41,154,111,191,253, 54, 30,122,232, 33,232,116, 58,204,158, 61,187, 86, + 29, 44,127,171, 6,211, 4,220,166,173,249, 19, 22,156,122, 51, 30,162, 40, 34,225,222,211,181,138, 8,253,228, 45, 44, 35, 56, +115,230,204,136, 20, 17, 42, 8,194,249, 46,113,230,207,159,143, 81,163, 70,225,199, 31,127,188,224, 34,194,230,205,155, 47,124, +227,141, 55,116,123,247,238, 69, 69, 69, 5,206,158, 61, 11,171,213,138, 99,199,142, 41,249,244,187, 94, 77, 77,141, 33,172, 4, + 51, 24,245, 32,196,249,122,214,167,254, 20,241, 46,174, 11,242,235,187, 60,188,166,121,235,158, 69,237,134, 98,222,211,125, 77, +149,239, 54,188,151, 81,235,118, 5,125,133, 82, 34, 88,225, 26,172, 48,138, 8, 95,127,246,217,103,239,239,213,171, 87,124,116, +116, 52, 78,158, 60,233, 55,130, 21, 29, 29, 13,135,195,129,181,107,215, 86,200,178,252,122, 80, 81,192,233,116, 58,145,148,148, +132,146,146, 18,200, 1,194,248, 28,199,193, 96, 48,160,170,170, 10,240,105,109, 23, 10, 74, 41,156, 78, 39, 28, 14, 7, 28, 14, + 7,156,206,122,173, 14, 0, 6,165,195,214,234,234,106, 0,168, 78, 75, 75,107,169,215,235,149, 86,143, 7, 0,244, 27, 60,120, +176, 88, 90, 90, 74,239,185,231,158,205,148,210, 73, 52,120,111,246,246,181,107,215, 54, 3, 0,131,193,112, 0, 0,142, 29, 59, +230, 44, 43, 43, 67, 85, 85,149, 26, 33, 52, 24, 12, 24, 49, 98, 68, 10,165, 20,107,215,174,109,166,209,104, 40, 2,155, 33, 91, +126,126,254,158,152,152,152,197,121,121,121, 99,110,184,225,134,194,142, 29, 59, 54,175,170,170, 58, 83, 83, 83, 99,177, 88, 44, + 84, 16, 4, 77, 66, 66,130,110,213,170, 85, 7, 55,111,222, 60, 48, 58, 58,122,113,126,126,254, 30,184, 67,171,140,203, 16,223, +186, 77,254, 76,149,119, 69,242,112, 53, 1,183, 33, 88,177, 98, 69,208, 40, 78,184,154, 10,130, 32,224,209, 71, 31,197,155,111, +190, 89, 39,130, 53, 99,134,251,157,228,169,167,158,170, 87,132, 72, 16, 4,156,122, 51, 30, 41, 15,254, 94,107, 26, 0, 16, 79, +250,234, 83, 68,168,172, 63,125,250,116,136,162,168, 22,225, 13, 28, 56,176, 86,209, 96,184,198,202, 91,243,204,153, 51, 16, 4, + 1,241,241,241, 24, 51,102, 12, 6, 13, 26, 84, 71, 47, 92,221, 99,199,142,253,252,234,171,175, 54, 73, 79, 79,199,103,159,125, +102, 55,153, 76,218,126,253,250,209,242,242,114, 2, 4,142, 96, 89, 44, 22, 22,193, 98,252,209,132, 21,208,136,160,238, 69,111, + 47,224, 29, 40, 18,221, 52, 16,159,175,109, 23, 21, 21,149,167,166,166,142, 29, 61,122,244, 87,239,188,243,142,161,101,203,150, +216,191,127, 63,206,157, 59, 7,135,195, 1,141, 70,131,180,180, 52, 84, 85, 85,225,139, 47,190,168,169,169,169, 25, 91, 92, 92, + 92, 30, 76,147, 16,242,212,245,215, 95, 63,239,233,167,159,214,183,111,223, 30,231,206,157, 67, 85, 85,149,250,230, 69, 8, 65, +116,116, 52,140, 70, 35, 10, 10, 10,176,121,243,102, 11, 33,228,169, 96,154,190,200,178,172, 26, 43,197,104,133,106,153,228,163, +105, 50, 26,141, 0,220,117,164, 0,184,154, 52,105,146, 12, 64, 49, 88,191,181,104,209,226,233, 86,173, 90,145,133, 11, 23, 82, + 74,233,106,127,230,202, 71,243, 92,159, 62,125,202, 0, 36,219,237,118, 13, 0, 84, 84, 84, 56, 18, 18, 18,146,116, 58,157,172, +211,233,100,189, 94, 47, 23, 23, 23,187, 92, 46,151, 6, 0,250,244,233, 99, 7,112, 26,158,254,170,252,104,202, 0, 42,231,206, +157,251,220,157,119,222,217, 51, 55, 55, 55,235,158,123,238,217,123,239,189,247, 34, 61, 61, 61,174,170,170,202,122,224,192,129, +178,119,222,121,199,186,117,235,214,129,162, 40,254, 54,119,238,220,231,224,238,143, 68, 14,160, 25, 17,152,102,195,105, 42,117, +127,252, 25, 43,239,241, 48,186, 81,168,149, 78,197,180,221,122,235,173,106,235, 67,223,200, 85,125, 53, 1,168, 45, 8,255,239, +255,254,175, 86,250,158,126, 58, 96, 21,200, 90, 55, 39,159,188, 67,201,187, 32, 8, 40,159,159, 94,203,252,133,107,170,252,105, + 10,130,128,105,211,166,133, 29,193,242,173,131, 21, 44,157,125,250,244, 65,117,117, 53, 68, 81,196,202,149, 43, 3, 70,176, 66, +237, 79,131,193, 48,102,217,178,101,159,232,116,186,142,118,187,253,238,146,146,146, 5, 53, 53, 53, 77,202,202,220, 31,124, 8, +116,159,179, 90,173,106,183, 44,151,227, 57,207, 52, 47, 77,205, 43,141,160,175,120, 46,151, 11,141, 27, 55,174,245,109, 43,165, + 50, 59,207,243,106,203,147,112, 90, 16, 42, 20, 23, 23,175, 76, 77, 77, 29, 57, 98,196,136, 69,119,222,121,103, 84,219,182,109, +197,166, 77,155,194, 98,177,160,168,168, 8, 69, 69, 69,174,239,191,255,190,162,166,166,230,246,226,226,226,149,161,244, 78,156, + 56,241,113,114,114,242,138,113,227,198, 77,235,210,165,203,196,201,147, 39,243, 45, 90,180, 64,121,121, 57,226,226,226,144,152, +152,136,162,162, 34,124,241,197, 23, 82, 89, 89,217, 60, 73,146,166,159, 62,125,250,108, 40, 93,159,253,192, 59,157, 78,140, 30, + 61, 26,178, 44, 99,246,236,217,112,185, 92,161,203, 68,207,227,112, 56, 28, 20, 0, 41, 41, 41, 1,128, 26,197,112,253,239,127, +255, 3,128,163,205,154, 53, 51, 3,192,154, 53,107, 8,128, 77, 97,234, 82,120, 69,178,218,182,109, 91, 4,212,190, 41, 42,145, + 43,207,168, 29, 94,230, 42, 0,214, 49, 99,198,156,181,217,108,131, 31,121,228,145,105,243,231,207, 31, 51,127,254,252, 58, 11, + 69, 71, 71, 47,126,237,181,215,166,143, 25, 51,230, 44, 88,247, 12, 87, 4,190,209,170,250, 86, 1, 8,164,249,245,215, 95,251, +141, 96,213, 55,114,165,116, 5,227,175, 69, 98,176,123, 80,168,151, 33, 37,157,190,186,245,185,175,249, 75,171, 32, 8,120,229, +149, 87,212,200,149,119,229,243, 11,137, 96, 41,154,241,241,241, 0, 0,147,201, 4, 89,150, 49,116,232,208, 11,214,245,124, 91, +112,164, 50,158,157,157, 61,253,211, 79, 63,157, 65, 41, 77, 0, 32,120,239,131,112,246, 35,131,193, 56, 79, 64,131, 37, 73,210, +113,229,219,130,222, 6,203,251,215,247,191,203,229, 58, 30,206, 70,139,139,139, 87,180,104,209,162,197,252,249,243, 31, 50,153, + 76, 3,172, 86,107, 71, 0,208,235,245,187,171,171,171, 87,115, 28,247, 70,113,113,113,216, 31,103,246, 24,166, 7, 50, 50, 50, +102,143, 27, 55,110, 70, 78, 78,206, 45,247,220,115, 15, 17, 4, 1,159,127,254, 57, 61,113,226,196, 18,142,227,158, 58,121,242, +228,161,112, 53,189, 49, 26,141,191, 46, 89,178,164,229,215, 95,127, 13,167,211,137,121,243,230, 65,167,211,253, 26,238,250,148, +210,179,130, 32, 44,202,205,205, 29,179,121,243,230,197,148,210, 2,157, 78,247,201,181,215, 94, 59,118,211,166, 77,255,161,148, +238, 21, 4,225,147,156,156,156,177, 91,183,110,253,146, 82,250, 75, 61,146,167, 70,178, 92, 46,255, 37,138,254, 34, 87, 33,168, +152, 48, 97,130, 99,194,132, 9,143,220,114,203, 45,243,119,236,216,113,181,210,125, 67,108,108,236,238,110,221,186,109, 89,178, +100,201,126,184, 35, 87,204, 92, 93,230, 40, 21,210,227,226,226,192,113,156, 58, 40,189,121,215,215, 8, 41,154,148, 82,196,197, +197,249,125, 49, 11,162, 25,212,213, 80, 74, 97, 54,155, 85,205, 48, 91, 47,135, 12, 67,153,205,230, 90,105, 12,131,128,215,146, +146,119,223,116,134, 34, 88, 62, 20, 77,147,201, 4,135,195, 17,182, 38,194,104, 52,224,205,246,237,219, 63, 0,240, 65,235,214, +173,255, 7,160, 21, 51, 85, 12,198,133, 19,208, 96,237,219,183,207,239, 87,221, 35,197,225,195,135, 43, 0, 76,247, 12, 17,225, +248,241,227,135, 0,220,154,146,146,242,175, 77,155, 54, 61, 3, 0,178, 44,191, 16,234,123,134,161,248,229,151, 95,110, 22, 69, +113,238, 71, 31,125,148, 67, 41, 69, 76, 76,204,166,131, 7, 15,222, 87, 31, 13,151,203, 53,145, 16, 50, 89,105, 21,104,179,217, + 38, 18, 66, 30,163,148, 86,123,205, 87,199,235, 9,133,187,178, 93,106,128,249,225, 68,174,124,177, 2,176, 47, 89,178,164, 10, +192, 46,156,239,231,202,233, 25,108,240, 42, 22,100, 92,190,184, 92,174, 19,125,251,246, 21, 66,189, 64,249, 89, 47,224, 11,149, + 36, 73,199,123,247,238, 29,242,165,204, 95, 90,130, 36,245,183,156,156, 28, 46, 92, 45, 5,167,211,121, 38,208, 60, 89,150,143, +247,236,217,211,111, 58,131, 17, 42,239, 61,123,246,172, 87, 26, 61,105, 9,152,247, 11,213, 12,177, 63, 3, 98,177, 88,206, 37, + 38, 38, 86, 89,173, 86,209,102,179,137,190, 17,123,131,193, 80,175, 82, 0, 6,227,175,200, 21,217,127,145,199, 80,221, 24, 41, + 61, 79,125,168,127, 68, 64,199,234, 51, 94, 29,108,188,158,156,187,136,117, 3, 33, 3,176,132, 92,138,113, 89, 83, 80, 80,112, +117,164, 53,247,236,217, 19,241, 23,180,130,130,130,158,161,151,170, 31,133,133,133, 17, 79,231,229,162, 25,140, 19, 39, 78, 68, +252,156, 96, 48,254,106,212, 63,246,207, 96, 48, 24, 12, 6,131,193, 8, 10, 1,208,193,223,140,250,180, 14, 32,132,248,213, 8, + 70, 40,125,166,201, 52,153, 38,211,100,154, 76,147,105, 94,121,154,161,180,175,148,214,137,164, 33, 43, 49, 94, 46, 77, 67,153, + 38,211,100,154, 76,147,105, 50, 77,166,249,231,106, 94,105,176, 34, 66, 6,131,193, 96, 48, 24,140, 8,195, 12, 22,131,193, 96, + 48, 24, 12, 70,132, 97, 6,139,193, 96, 48, 24, 12, 6, 35,194, 48,131,197, 96, 48, 24, 12, 6, 35,162, 16, 66, 72, 70, 70, 70, +159,180,180,180,136,119,175,114,185,112, 69,246,131,197, 96, 48, 24, 12, 6,227,143,167, 73,147, 38,177,146, 36,221,153,150,150, +118, 95,203,150, 45, 91, 2, 64,122,122,122, 1,165,244, 13,131,193,240,201,193,131, 7,237,127,118, 26,255, 40, 26,180, 21, 33, +131,193, 96, 48, 24,140, 43,159,180,180,180, 46, 0,238, 51, 24, 12,183, 95,125,245,213,218,126,253,250, 33, 46, 46, 14, 46,151, + 11,197,197,197,248,254,251,239,177,107,215,174,223,157, 78,231, 92,167,211, 57,247,236,217,179,167,255,236, 52, 55, 52,170,193, + 34,132,172, 3, 0, 74,105,159, 63, 49, 61, 12, 6,131,193, 96, 48, 46, 35, 82, 83, 83, 95, 29, 50,100,200, 35,113,113,113,104, +221,186, 53, 82, 82, 82, 96,179,217, 96,177, 88, 64, 41,133, 32, 8,160,148,162,178,178, 18,219,183,111,199,150, 45, 91, 92, 21, + 21, 21,139, 9, 33,111,156, 60,121,242,103,111,173, 43,201,139, 16, 74, 41, 8, 33, 20, 64, 95, 0,160,148,174,251,115,147,196, + 96, 48, 24, 12, 6,227,114, 33, 45, 45,237,244,154, 53,107,146, 36, 73, 66, 73, 73, 9,108, 54, 27,106,106,106, 84,131,197,243, + 60, 40,165,112,185, 92, 0, 0, 89,150,177,119,239, 94,108,222,188, 25,199,142, 29,123,173,184,184,248, 81, 0, 87,156, 23, 81, + 43,185, 83, 74,215, 93, 9, 25, 98, 48, 24, 12, 6,131,241,199, 98,179,217,176,112,225, 66,148,148,148,160,113,227,198, 72, 79, + 79, 71, 76, 76, 12,244,122, 61, 0,168,230, 10, 0, 56,142, 67, 86, 86, 22,198,142, 29, 11, 66,200, 88,111,157, 43,201,139,176, + 74,238, 12, 6,131,193, 96, 48, 46, 6,167,195,225, 64,118,118, 54,142, 28, 57,130, 29, 59,118,160,107,215,174,104,215,174, 29, + 74, 74, 74,112,242,228,201, 90, 11,111,221,186, 21, 59,119,238,196,181,215, 94,251, 39, 37,247,143, 65, 41, 34,124, 14, 64, 31, +224,202, 40,247,100, 48, 24, 12, 6,131,241,199,144,158,158, 62, 62, 49, 49,241,157,113,227,198, 25, 58,119,238,140,227,199,143, +227,196,137, 19, 56,119,238, 28,186,116,233,130,172,172, 44, 28, 58,116, 8, 43, 86,172,192,206,157, 59,161,211,233,144,145,145, + 1,243,226, 79,241, 77, 90,234,137,147, 39, 79,102, 0,184,226,188,136,119, 37,247, 62,192,149, 81,238,201, 96, 48, 24, 12, 6, +227,143, 35, 45, 45, 45,129, 16,242, 84, 90, 90,218,253,183,223,126,187,216,170, 85, 43, 28, 63,126, 28, 37, 37, 37, 56,119,238, + 28,126,250,233, 39, 0, 64,122,122, 58,210,211,211, 81, 84, 84,132,130,130, 2,139,205,102,187,247,196,137, 19, 31, 43, 58, 87, +146, 23, 97,221, 52, 48, 24, 12, 6,131,193,136, 8,105,105,105,141, 1, 60,223,170, 85,171,241,163, 70,141,226,210,210,210,112, +226,196, 9,124,255,253,247,104,217,178, 37,206,156, 57,131,237,219,183, 75, 21, 21, 21,243, 36, 73,154,126,250,244,233,179,127, +118,154, 27,138, 6,237,201,157, 16,210,129,105, 50, 77,166,201, 52,153, 38,211,100,154,127, 13,205,147, 39, 79, 30, 59,121,242, +228, 93, 7, 14, 28,200,154, 49, 99,198,178,119,222,121, 7, 60,207, 35, 45, 45, 13, 63,252,240, 3, 93,179,102,205,146,170,170, +170, 54, 39, 79,158,124,224, 74, 54, 87, 0,171,228,206, 96, 48, 24, 12, 6, 35,194,156, 58,117,106, 31,128,155,211,211,211,175, + 46, 44, 44,124, 18, 0,100, 89,126,225,212,169, 83,219,255,228,164,253, 97, 48,131,197, 96, 48, 24, 12, 6,163, 65, 56,113,226, +196, 22, 0, 55,254,217,233,248, 51, 96, 31,123,102, 48, 24, 12, 6,131,193,136, 48,204, 96, 49, 24, 12, 6,131,193, 96, 68, 24, +102,176, 24, 12, 6,131,193, 96, 48, 34, 12, 1,224,183, 37, 0,165,180, 32,108,145, 11,104,161, 16, 74,159,105, 50, 77,166,201, + 52,153, 38,211,100,154, 87,158,102, 40,237,250,248,143, 75,153,176,250,193, 34,132, 16,122, 1, 29,102, 17, 66, 58, 68,122, 71, + 49, 77,166,201, 52,153, 38,211,108, 24,205, 11,185,215,251,211, 36,132, 16,229,175,231,151, 2, 64,184,218,127, 84, 58, 27, 66, +179, 33,242,254, 87,209,188,210, 8,218,138,144, 16,194,193, 93,140, 72, 8, 33, 50, 0, 57, 18, 59,202,115, 16,184, 72,233, 49, + 34,143,231, 24,169, 23, 9, 59, 78, 12,198,149, 75, 36,239,245, 94,247, 14, 94,209, 4, 32, 1,144, 8, 33, 23,245,176,109,136, +103,210,165,158,247,191,178,230,229,142, 95,131,165,236,168,196,196,196,149, 73, 73, 73,215,149,148,148,200,158,233, 72, 79, 79, + 7,199,113, 16, 4,193,114,228,200,145,232,250,110, 48, 57, 57,249,253,172,172,172, 59, 75, 75, 75,101,142,227,208,184,113, 99, + 16, 66,192,243, 60,120,158,183, 28, 60,120,176,222,154,145,166, 91,183,110,231,236,118,187,217,119,186, 86,171,181,238,216,177, + 35,234,207, 72,211, 31, 9, 33, 68,200,204,204,188,205,104, 52, 26,148,105, 93,187,118,245, 94,132,238,220,185,115,126,184,122, +205,155, 55,223,106, 48, 24, 98, 5, 65, 0,207,243, 16, 4, 1,213,213,213,101,123,247,238,237,225,153,191,209, 96, 48, 36,240, + 60,175,156, 91,176, 90,173,165,123,246,236,201,141, 92,174,174, 28,250,246,237, 43,160,254, 93,172,184,214,174, 93,235, 10,189, + 88,196,224,236, 59,162, 90, 17,151,165, 19,225,104, 12,149, 73, 57, 21, 12,191,104,187, 85, 30, 12,115,125,185, 65, 83, 23, 2, + 66, 72, 19, 0, 46, 74,233,201,144, 11,251, 89,217,119,146, 0, 12,145,128,209,158, 81, 43, 7,148, 18,224, 64, 2,240,197,105, +192, 82,107,225, 63,240, 65,164,220,235, 51, 50, 50,222, 72, 78, 78,190,171,178,178,178,134,231,121, 16, 66,104, 86, 86,150,178, +140,247,242,144,101,249,120, 97, 97, 97,118, 48, 61, 0, 98,147, 38, 77, 94, 75, 76, 76,188,163,166,166,166,134, 16, 2, 66, 8, + 37,132,160, 99,199,142,170,166,242, 43, 73,210,241,130,130, 2,191,154, 13,145,206, 63, 43,239, 29, 58,116, 80,181, 20,109, 89, +150, 3,230,221, 91, 51, 35, 35,227,181,228,228,228, 59,170,170,170,106, 56,142, 83, 53,179,178,178, 46, 56,157,151,178,230,149, + 64,160,155, 52,151,148,148,180,172, 71,143, 30,125,191,254,250,107,110,223,190,125, 92,219,182,109, 33, 73, 18,100, 89, 6,165, + 20,221,186,117, 51,214,119, 99, 41, 41, 41, 11,186,119,239, 62,122,249,242,229,220,178,101,203,184,238,221,187,131, 16, 2, 73, +146, 32, 73, 18,250,247,239,111, 8,173, 18, 24, 66,136, 89, 16,132,201, 90,173,182,143,203,229,106, 7, 0,162, 40,238,181,217, +108,235, 92, 46,215,235,148,210,170,112,116,156, 78,167,177,176,176,176,206,190,233,209,163,135,246, 66,211,150,153,153,185,137, +227,184, 22,158,116, 34,156, 95, 74,233,225,194,194,194,156, 64,154, 87, 93,117, 85, 72, 77,223,105,178, 44, 31, 46, 40, 40, 8, +168, 73, 8, 17, 90,183,110, 61,186,125,251,246,250,207, 63,255, 28,199,142, 29,131,201,100,130, 44,203,144, 36, 9, 78,167, 19, + 55,223,124,115,157, 7, 72, 48, 12, 6, 67,244,247,223,127,223, 42, 41, 41, 9,103,206,156, 65, 73, 73, 9, 38, 78,156,120,192, +107,126,194, 15, 63,252,144, 25, 31, 31,143,154,154, 26,148,151,151, 99,236,216,177,245,217,196, 37,201,160,107, 91,190, 72,128, +120,101, 92,146,241,251,234, 13,135,158,190, 88, 93,155,205, 86, 44, 73, 82,156,247, 52, 63,207,244, 90,240, 60,127, 14, 64, 98, +176,101, 8, 33,205, 0,220,200,243,124,107, 81, 20,175,162,148, 54,115,185, 92,201, 0,160,209,104, 78,243, 60, 95,228,116, 58, +247,219,237,246,255, 1, 88, 78, 41, 45, 10,164,101,223, 17,213, 74,178,213,220, 82,109,147,135,202, 20, 41, 28,193, 41,147,174, +230,191,246, 29, 81, 75,234, 97,178,254, 20, 8, 33,205,211,210,210, 94,241,252,127,156, 82,122,228, 98, 53, 37, 96, 52,165, 52, + 6, 0,202,203,203, 99,142, 29, 59,150,178,124,249,242,172,153, 51,103,246,211, 90,173, 47,219,129,189,193,214, 31,216,167,213, +118,129,144, 12,101,220, 69,229,227,171,214, 29,138,196,131,137, 75, 79, 79,127,227,250,235,175, 31, 55,111,222, 60,227,150, 45, + 91,140, 29, 59,118,132,251,193, 8,245,126, 79, 41, 85,207,177,107,174,233, 25, 76,143, 0, 16,210,210,210,102, 95,127,253,245, + 99,230,206,157,107,220,191,127,191,177,121,243,230,170,166,186, 32, 33,158,105, 4,157, 59,119,249,163,211,217,160,121, 31, 60, +120,240,152,121,243,230, 25,119,239,222,109,204,204,204, 84, 53,125,189, 51,199,113,200,206,238, 30,150,230,144, 33, 67,198,188, +251,238,187,198, 29, 59,118, 24,219,181,107,231, 49,105, 80,211,120, 33,233,188,196, 53, 47,123,234,152, 8, 66, 8,151,152,152, +184, 48, 59, 59,123,240,215, 95,127,205, 3,192,142, 29, 59, 80, 90, 90,138,244,244,116,152,205,102,232,245,122, 88,173,214,122, +189,101, 37, 39, 39,191,223,163, 71,143,209, 95,127,253,181, 8, 0, 95,222,126, 51, 14,139,192,164, 51,118,104, 52, 26, 28, 60, +120, 16, 60,207, 95, 76,232,248,218,168,168,168,143,151, 46, 93, 26,215,181,107, 87,174,164,164, 4,205,155, 55,199,239,191,255, +222, 99,253,250,245,221,238,190,251,238,187, 9, 33,227, 41,165,235,195,213,252,230,155,111, 96, 50,153,212,193,225,112,212,203, + 88,120,195,243,124,198,150, 45, 91,146,204,102, 51, 36, 73, 2,165,180,214, 5,236,123,225,201,178,140,222,189,123, 59,130,105, + 10,130,144,177,101,203,150, 36,131,193, 80, 71, 75,146, 36,104,181, 90,112,156,187,161,168, 36, 73,112,185, 92,200,201,201, 9, +168, 73, 8, 33,153,153,153,183, 41,230,138,227, 56,124,246,217,103, 72, 73, 73, 65, 82, 82, 18, 76, 38, 19, 12,134,250,123, 96, + 65, 16,144,144,144,128,251,239,191, 31,183,221,118, 27, 22, 45, 90, 4, 81, 20,107,205,143,143,143,199,119,223,125,135,232,232, +104, 52,109,218,180,214,252,203, 21, 2,196,175, 88,127, 72,141,200,222, 50,172,179, 48,160,119,139,185,202, 56,231, 94,136,202, +238,101,169, 44, 73,231,214,108,252,109, 90, 40, 93,167,211,217,104,227,198,141,208,233,116, 97,165, 67,146, 36,244,232,209,163, + 81,208,180, 18, 50,180, 67,135, 14, 95,222,127,255,253,154, 86,173, 90, 17, 81, 20, 33, 8, 2, 4,193,125,139,144,101,185, 41, +165,180,169, 44,203,125, 79,159, 62, 77,231,204,153,243, 50, 33,100, 4,165,244,191,126,245, 92,150, 78,213, 54,121, 40,165, 72, + 73, 30, 64,155,156, 89, 77, 80,109,147,135,198, 8,150,131, 0, 46, 89,131, 69, 8,137, 54, 24, 12,207,124,254,249,231, 26, 0, + 24, 48, 96,192, 51,132,144,135, 41,165, 21,145,218, 70, 76, 76, 12, 98, 98, 98,208,161, 67, 7,140, 28, 57, 50,182, 75,151, 46, +143, 53,179,217, 38, 22, 1,246, 64,235, 8, 28,151,241,237, 15, 7,146,148,241, 49, 55,119,213, 12,238,219,234,180,187,130,139, +239,210, 20,178, 68,143,175,222,112, 56,168, 1, 35,132,112, 41, 41, 41,255, 26, 50,100,200,173,243,230,205,139, 2,128,247,223, +127, 31, 67,135, 14, 69, 74, 74, 10, 12, 6, 3, 52, 26, 13, 52, 26, 13, 68, 81, 84,127,131,232, 17, 0,124, 74, 74,202,203, 55, +220,112,195, 45,115,231,206,141, 2,128, 5, 11, 22, 96,216,176, 97, 72, 72, 72, 64,116,116, 52,116, 58, 29,180, 90,173, 71,139, + 32, 84,188,206, 95, 58,239, 25,212, 15, 45, 12, 58,220, 56,227, 21,196,198,198,226,251, 71,239,131,200,113,184,239,187,117,136, +142,142, 14,121,255,240,167,185, 99,199, 14,156, 62,125,218,111,222,121,158, 15,122,189,121,231,125,232,208,161,183, 40,154, 11, + 22, 44,192,224,193,131,145,144,144, 0,179,217,172,230,253,188,118,224,134,252,222,154,131, 7, 15,190,229,221,119,223, 85, 53, +251,247,239,143,248,248,120, 68, 69, 69, 65,163,209,168,251,179, 62,199,232, 82,214,188, 82,168,101,176, 60, 59,138, 75, 74, 74, +186, 53, 63, 63, 95, 61,242,162, 40, 66,167,211,169, 39,135,247,131, 59, 28, 8, 33, 36, 43, 43,235,206,175,191,254, 90, 93,201, +238,115, 81,233,245,250,122,105,250,232, 15,184,238,186,235, 62,205,207,207,215,107, 52, 26, 88, 44, 22, 20, 22, 22, 34, 38, 38, + 6, 90,173, 22,195,135, 15,231,115,114,114, 18,174,187,238,186, 47, 8, 33, 99, 40,165,171, 67,105, 82, 74, 97, 54,155,107, 25, +172,139,137,220, 19, 66, 96, 48, 24,176,108,217, 50, 8,130, 80,235, 36,243,119, 19, 75, 78, 78, 14, 25,149, 0, 0,157, 78,135, + 77,155, 54,129,227, 56,136,162,168, 14,223,124,243, 13, 30,125,244, 81,156, 62,125, 90,157, 23, 21, 21,178,116,147, 24,141, 70, +131, 98,174, 0,247,177, 55, 24, 12, 16, 69,145, 8,130, 64,120,158, 7, 0, 74, 72,248, 21, 66, 5, 65, 64, 81, 81, 17,110,191, +253,118,124,244,209, 71,120,225,133, 23, 48,102,204,152, 90,243, 43, 42, 42, 16, 23, 23,135,216,216, 88,232,116,186, 11, 62, 23, + 46, 37,100,159,189, 51,253,133,151,141,238, 10, 30, 50, 32, 3, 20, 84,253, 95, 92,124, 16,175,254,235, 77, 62, 92,109,157, 78, +135,141, 27, 55,194,187,216,149,227, 56,104, 52,154, 90,211, 4, 65, 64,106,106,106, 56,122,207, 47, 93,186, 84,251,217,103,159, +225,171,175,190,130, 36, 73, 16, 69, 17,122,189, 30,209,209,209,136,143,143, 87,135,166, 77,155,146, 15, 62,248, 64,211,169, 83, +167,231, 1,248, 55, 88, 28,141,145, 61,230, 10, 0,146, 6,208, 38,135,190,230,227, 98,163,220, 81,156, 75, 17, 66,136, 0, 96, +234, 91,111,189,149,208,173, 91, 55, 0,192, 91,111,189,149, 48, 97,194,132,169,132,144,167, 41,165, 23, 92,196,202, 3,159, 18, + 66, 70, 3,128,193, 96,208, 15, 28, 56, 80,251,246,219,111,227,170,171,174,194,131, 15, 62, 24,255,234,203, 47,223, 8, 96, 73, +160,245,101,159, 75,109,214, 43,111,198,122,191, 80,157, 31,128,223,207, 22,225,153,103, 94, 12,149, 87, 2,128, 75, 75, 75,187, +251,189,247,222, 83,171, 67,196,199,199,171,247, 32,223,123,148,242, 27,228,190, 68,224,142, 10, 77,152, 55,111,158,170,153,152, +152, 88, 75, 67, 20, 69, 20,237,253, 25,223,190,159, 7, 83, 66, 42,198, 62, 58,171,222,233, 76,215,105,145, 97,208,162, 83,167, + 78, 48, 24, 12,216, 33,186, 31,101,138,185, 10,150,206, 64,154, 60,207,171,105,164,148,194,106,181,162,178,178, 18,146, 36,193, +110,183,163, 91,183,110, 97,229,253,221,119,223, 85, 53, 27, 53,106,164,222,223,189,239,243,202,160,188,192, 4,211, 76, 75, 75, +155,240,239,127,255, 91,213, 76, 72, 72, 80,181, 4, 65,128, 70,163,193,130, 5, 11,124,243,120,209,154,245, 61,238,190,154, 71, +142, 28,193,204,153, 51,161,209,104,148, 42, 64,106,196, 50, 61, 61, 29,115,230,204, 9,235, 25,119, 57,227,239,232,146,146,146, + 18,121,223,190,125,220,246,237,219,161,209,104,144,152,152,136, 30, 61,122, 0, 0, 28, 14, 7, 4, 65,128,193, 96, 32,153,153, +153,167,149,157,166,252,122,151,165,123,181, 48,224,126,255,253,119,121,229,202,149,220,162,145,131, 97,167, 64,151,103,102, 97, +240,176, 97, 88,145,174, 5, 15,160,199,190, 18,104,181, 90, 33, 53, 53,213,169, 28, 4, 69,215,187,110,150,159, 86, 11, 81, 38, +147,233,131,229,203,151,235, 57,142, 67,101,101, 37,100, 89, 70,110,110, 46, 8, 33,216,189,123, 55,158,126,250,105,124,249,229, +151, 88,186,116,169,161,107,215,174, 31, 16, 66,218, 81, 74, 43, 21, 13, 63,154, 0,220, 23,171,193, 96, 80, 13,150,193, 96, 32, + 87, 93,117,213,105,165,252,220,167, 56,238, 68, 97, 97, 97,183, 64,154,128, 59,146, 48, 98,196, 8,181,206,153,242, 0,244,190, +216,148,255,133,133,133,117, 14,140, 63, 77, 89,150,209,171, 87, 47, 0,128,201,100,130,217,108,198, 15, 63,252,160,206,239,218, +181, 43,236,118, 59, 26, 53,106,132,189,123,235,150, 66,248,211, 60,117,234, 20, 22, 46, 92, 8, 81, 20,145,144,144, 0, 81, 20, + 53,171, 87,175,126,193,100, 50,197,240, 60,143,216,216, 88, 12, 27, 54,108,222,141, 55,222,168,164, 65,250,230,155,111,132, 64, +154, 60,207, 67,175,215, 99,193,130, 5,152, 57,115, 38,158,124,242, 73,248,206,183, 90,173, 72, 72, 72, 64, 92, 92, 28,226,226, +106,149,126, 5, 76,231,197,210,208,154, 20, 20,133, 59, 87, 96,207,174,213,144,168, 4, 89,146, 65,101, 10, 73,150,177,115,213, +214,204,226,195, 39,211, 41,168, 90,219, 72,170,170,118,245,109,164,187, 10,192,178,181, 37,182,217,161,210,201,243, 60, 28, 14, + 7, 86,172, 88,129,131, 7, 15, 98,229,202,149,176, 88, 44,104,212,168, 17, 98, 99, 99,145,147,147,131, 9, 19, 38,248, 53, 88, +190,154,146, 36, 45, 56,113,226, 68,151,156,156, 28, 82, 94, 94,142,146,146, 18, 84, 86, 86,194,225,112,192,225,112,168,199,208, +100, 50, 33, 37, 37, 5, 22,139,133,218,108,182, 5,129, 52,169, 76,202, 57,130, 83,135,150, 9,141, 90, 14,119, 25, 78,255,144, + 96,179,216, 53,174,119,150, 25, 39,124,243, 68,203, 65, 28,229, 40,224,206, 58, 33,160,178, 36,149,172,254,241,240,253,161,210, + 25, 9,130,104, 78,156, 60,121,114, 59,239,226,233,177, 99,199,162,176,176,176,221,235,175,191, 62, 17,192, 91,245,213, 52, 0, +233, 0,224, 2,190,131,123,192,243, 22, 11,121, 97,217,178, 17, 0,238, 88,186,116, 41,198,140, 25,131,127,189,252,114, 7,248, + 24,172, 90,251,147, 82, 20, 29, 88,143, 35, 7, 54, 66,150,101,207, 64, 3,254, 15,244,230,227,147, 78, 82, 85, 85,101,221,178, +101,139,249,195, 15, 63, 68,124,124, 60,154, 53,107,134,168,168, 40,232,116,186, 58,102, 64, 25, 66,229,189,166,166,198,186,111, +223, 62,243,167,159,126,138,132,132, 4, 52,109,218, 20, 38,147, 9,122,189, 94,125, 65,223,178,114, 41, 38,142, 31,142,210,163, +251,241,230,195,183,133,157,206,123, 6,246, 67,134, 65,139,225,211,103,161, 93,187,118, 88,114,219, 77,224, 8,112,239,247, 63, + 65, 20, 69,124, 56,244, 90,232,116, 90,220,251,253,182,176, 53,183,109,219, 6, 74, 41,154, 54,109, 10,139,197,162, 70,217, 52, + 26, 13, 86,175, 94,141,155,110,186, 9,139, 22, 45,194, 53,215, 92, 19, 50,239, 85, 85, 85,214,221,187,119,155, 63,249,228, 19, +196,199,199,163,113,227,198, 48, 26,141,170,158,183,137,105,209,162, 5,202,202,202,208,178,101,203,160,154,213,213,213,214, 29, + 59,118,152, 23, 45, 90,132,248,248,120,100,100,100,192,104, 52,214,138,132, 61,255,252,243,181, 52, 58,117,234,116,209,154,245, + 61,238,190,154, 35, 71,142, 68,203,150, 45, 17, 29, 29,173,238, 3, 95,163, 93, 79,186,163,118, 53, 7, 59, 0,173,215,239, 89, + 0,219,252, 44,167, 76, 23, 1,116,246,204,147, 0, 84, 2,136,245,163, 23, 72,167, 4,238,120,113,162,207,242,190,219, 81, 17, + 0,128, 16,162, 92,143,125, 1,108, 0,128,182,109,219,162,180,180, 20, 58,157, 14, 61,122,244,192,217,179,103,213, 48,159, 44, +203, 24, 53,106, 20,255,196, 19, 79, 36,113, 28, 7,167,211, 9, 74, 41,120,158,135,242,230,231,131,204,113, 28,114,114,114,176, +199,179, 79, 7, 15, 27,134,140,140, 12, 40,149, 56,116, 58, 29,198,140, 25, 67, 30,125,244, 81, 65,137, 94, 80, 74, 97,177, 88, +208,169, 83,167,128,229, 82,130, 32, 60,252,197, 23, 95,196,104,181, 90,213, 92, 41,105,217,183,111, 31, 94,125,245, 85,220,113, +199, 29, 56,122,244, 40, 82, 83, 83,241,216, 99,143,153,243,242,242, 30, 6, 48, 61,144,166,130,217,108,174,101,176,198,143, 31, + 47,228,228,228, 36, 25,141, 70, 53,186,229, 49,149,200,201,201, 9,106,197, 61,245,159,240,221,119,223,249,125, 59,244,125, 99, + 32,238, 86, 23, 97,105,110,217,178, 69, 53,103, 74,244, 66,153, 95, 88, 88,168, 70,176, 60, 70, 48,152, 38, 5,160, 62, 68, 61, +145, 43,205,150, 45, 91,102,164,166,166,154,199,143, 31,143,202,202, 74,164,165,165, 97,208,160, 65,144,101, 25, 14,135, 3,147, + 38, 77, 10, 26,121, 17, 69, 17, 91,183,110, 69, 94, 94, 30,158,120,226, 9,204,155, 55, 15, 3, 6, 12, 80,231, 43,111,113,137, +137,137,136,142,254,211,219, 56, 68, 14, 25,112,184,156,168,169,177,128, 82, 9,146, 76, 33, 75, 50,118,175,221,153,121,120,215, +193,172,252,197, 11, 69, 0,176,174, 91,234,189, 86,234,200,185,255,105,211, 55, 94,179,101,237,239,142, 45,193,228,121,158,199, +125,247,221,135,105,211,166,225,214, 91,111,197,170, 85,171,240,212, 83, 79,225,238,187,239, 86,205,187,114, 46,132,194,233,116, +190, 55,118,236,216,127, 46, 89,178,228,170, 71, 30,121,132, 3,220,215,164,209,104, 4, 33, 4, 86,171, 85, 29,246,237,219, 39, +255,227, 31,255,248,213,110,183,191, 23, 72,143, 10,134, 95, 76,186,154,255, 22,151,114,173, 79,125, 31,207, 17, 33,218,145,216, +180,111,249, 13,153, 3,232,128,219,154,197, 81,217, 29,225,163,160,176, 89,171,241,228, 19,143,135, 29,189,107, 8, 8, 33, 67, + 7, 14, 28, 56,104,198,140, 25,117,230,205,152, 49, 3,123,247,238, 29, 68, 8, 41, 10, 84, 36,234, 15, 3,144, 17,147,146,242, + 58, 0, 24, 78,157,154,108, 1,142, 3,192, 11,192, 96, 9,184,105,213,170, 85, 0,128, 38, 77,154, 64, 6, 67, 43,125,112, 0, + 0, 32, 0, 73, 68, 65, 84,218, 19,224, 99, 30,248,212, 5,124,235,171, 69, 41,133,195,233,130,197, 98,133, 76,221,231,145, 76, +101,200,146, 59, 10,234,107,178, 66,149,187, 81, 74, 41, 33, 68,230,121, 30, 29, 58,116,192,224,193,131,161,213,106, 97, 54,155, +213,251,188,239, 61, 41,140,135, 34, 5, 32, 19, 66,208,162, 69, 11, 12, 26, 52, 8, 26,141, 6, 38,147, 9,209,209,209,170,193, +226,121, 30, 29,114,250,225,211, 69,175, 96,220,224, 44,140,191, 54, 25, 95,236, 46, 9, 43,157, 77,141, 90, 52, 53,232,208,182, +109, 91, 68, 69, 69,129, 16,128,231, 57, 53,157, 38,163, 30, 26,181,248, 49,188,188,159, 58,117, 10, 69, 69, 69, 40, 42, 42, 2, +199,113,200,205,205,133, 86,171,133, 32, 8, 56,112,224, 0,166, 79,159, 14,187,221, 30, 86,222, 57,142, 67,235,214,173,209,175, + 95, 63,104,181, 90, 40,207, 10,239,162, 65, 81, 20, 81, 89, 89,137, 86,173, 90, 97,217,178,101,232,221,187,119, 72,205,118,237, +218,161,111,223,190,208,104, 52, 48, 24, 12,106, 85, 29,173, 87, 94,171,170,170,212,253,208,165, 75,192, 58,109,126, 53, 87,110, + 61,138,249, 43,127,128,205, 46,163,162,198, 89,107,133,212, 70,209,216,240,201, 19, 97,229, 93,209,124,239,189,247, 80, 86, 86, +166,222,135, 56,142, 83, 7, 66, 8, 50, 50, 50,240,238,187,239,214, 17,242,246, 34,148,210,117, 62,179, 19, 9, 33,249,234, 70, + 41, 29, 70, 8,201,247,254, 13,180,156,231,239,181, 83,167, 78,205,206,203,203,155,217,179,103,207, 79, 55,109,218,180, 56,144, + 94, 32,157,169, 83,167,102,229,229,229,205,244, 94,222,207,118, 84,188,163, 14,196,147, 57, 78,137,204,164,167,167,171,229,206, +102,179, 25, 26,141, 70, 93,209,229,114,225,131, 15, 62, 64, 82, 82, 18,146,147,147,213, 95,127, 80, 74,105,147, 38, 77, 64, 41, +197,131,103,221, 85,128,190, 75,211,160, 8,192, 13,103,169,170, 39, 73, 18,150, 44, 89,130,168,168, 40,245, 66, 55,155,205, 65, +139,139,180, 90,109,223,238,221,187,115, 54,155, 77, 13,147,115, 28,135,125,251,246, 33, 47, 47, 15, 99,198,140, 65,155, 54,109, + 32, 73, 18,170,171,171,113,221,117,215,137,111,190,249,102, 95,132,105,176,140, 70,163, 90,239,200,102,179, 97,205,154, 53,136, +141,141, 69, 92, 92, 28, 18, 18, 18, 16, 31, 31, 15,157, 78,231,125, 98, 4,132, 82,138, 17, 35, 70,212,138, 92,121, 71,173,188, +111,104, 74,177, 95, 56,154,215, 92,115,141, 26,189, 50,155,205,248,246,219,243,247,231, 30, 61,122,128, 82,138,196,196, 68,108, +222,188, 57,148, 22,237,218,181, 43,100, 89, 70, 82, 82, 18, 68, 81, 36,171, 87,175,126,193, 99,174,136, 40,138,248,249,231,159, + 81, 88, 88,136,196,196, 68,245,173, 52, 20,213,213,213,197,111,190,249,166,244,246,219,111, 3, 0,250,247,239,143,242,242,242, + 51, 94,243, 75,199,141, 27, 87, 43,191,231,206,157, 43, 13, 41,124,137, 35, 3,112, 57, 92,168,177, 88, 81, 85, 89, 13,167, 44, +193,233,146,112,230,196,217,216, 39, 30,157, 44,254,107,210, 4, 0,192,163,179,223, 66,229,187,231,111, 96, 95, 61, 58, 58,105, +196,171,159, 77, 1, 48, 60,152,126, 77, 77, 13,172, 86, 43,154, 52,105,130,109,219,182,161,178,178, 18, 3, 6, 12,168, 21,253, + 13, 81, 4,161, 66, 41,181, 19, 66,114,135, 13, 27,182,237,181,215, 94,107,217,190,125,123, 82, 93, 93,141,234,234,106,212,212, +212, 64,249, 95, 80, 80, 64, 23, 47, 94,124,184,166,166, 38,135, 82, 26,176,206,144,182, 91,229, 65,251,142,168, 37, 63,254,162, + 25,246,183,145, 55,197, 28, 63,113,204, 85,106,209, 87,149, 91,126,181, 73,116, 47,168, 68, 33, 81, 10, 42,201,144,168, 28, 48, +226,242, 71, 64, 8,201,200,204,204,252,199,162, 69,139,252, 26, 82,158,231,177,104,209, 34,244,234,213,235, 31,132,144,125,193, + 42,247, 43, 52, 3,180, 46, 81,124,226, 63,255,249,143, 6, 0,250,245,235,247, 68, 51,167,243,209, 34,192,222,190, 99,199, 91, + 54,109,218, 20, 99, 52,186,219, 9,197,196,196,128, 82,202,215,212,212,196,228,228,228,220, 2,127, 6, 75,166,112, 58, 93,176, + 88,109, 40, 43,175,130,211,238,132, 75,118, 65,114,201,112,201,238,232,168, 75,146, 32,187, 36,184,100, 9,188,192, 71,245,189, +166, 73,149, 59,150, 69,202,214,253,116,180,177,159,100,202,238, 22, 94, 64, 74, 74,138, 90, 36,236, 93, 87, 38, 84, 20,195, 15, +146,251, 94, 72,213,123,227, 47,107,243,113,102,239, 6,104, 8,133, 44, 57, 33,187, 28,144,156, 14,240,144,177,247,208, 9,180, + 79, 11,121, 15, 81,211, 57,228,153, 23,209,163, 71, 15,124, 49,122, 56, 8, 1,238, 93,179, 25, 26,141, 6,139,111, 30, 0,173, + 94,139,191,175,252, 41,220,116,214,202,251,142, 29, 59,240,224,131, 15,226,165,151, 94,130,193, 96, 80, 95, 78,246,239,223,143, +207, 62,251, 12, 3, 7, 14, 12, 59,239,132,184,139, 90,149,125, 56,117,234, 84,156, 60,121, 18,175,191,254, 58,178,179,179, 33, +138, 34,202,202,202,144,147,147,131,211,167, 79,135,165, 73,169,140,248,248,120,181,186,142,111, 29, 49, 0,245, 62, 70,222,154, +119,221,156,138,175, 55, 46, 6, 1,193, 79,159, 76,174,245, 60,122,231,179, 31,235,173, 57,109,218,180, 90,233,172, 79,244,202, +203,139,248, 13, 6,248, 51, 50, 33,150, 83,118,178, 46, 47, 47,111,166,239,250,161,244,188,231,251,172,111,247, 49,101,117, 14, +102,157,187, 47,165,148,166,167,167, 67,150,101,152,205,102,104,181,238, 8,152,239,131,212,100, 50,213,114,228,161,202,147,121, +158, 7,165, 84,221,177,190,183, 49,158,231,177,121,243,230, 58, 38,224,223,255,254,119,208,114, 90,151,203,213, 46, 42, 42, 10, +149,149,149,106, 29, 41,173, 86,139, 41, 83,166, 96,220,184,113,170,185,210,106,181,248,232,163,143,208,173, 91, 55,216,237,246, +118, 1, 5, 1,104, 52,154,154,142, 29, 59,186,235, 32,187,235, 78,145, 49, 99,198,240, 14,135, 3,122,189,190, 86,212, 73,169, +155, 22,202, 12, 41,209,166, 21, 43, 86,132, 21,193, 10,183, 14, 18,165, 20, 59,119,238,172,101,212, 60, 77,141, 1, 0,187,118, +237, 82, 31,180,225,150,119, 75,146, 4,131,193, 64, 52, 26, 13, 49,153, 76, 49,227,199,143, 87,117,149, 99,174,228, 59,156,138, +214,191,252,242,203,117,193,230,239,222,189,251,138,236,142, 65,150,101, 56,156, 78, 88, 44, 86, 84, 86,215,224,249, 89,158, 18, +181,231,177, 5,192,150,220,137, 15,226,190,193, 3,251, 33, 68,235,190, 64,196,199,199,227,203, 47,191,132, 40,138, 88,182,108, + 25,162,163,163,113,211, 77, 55, 33, 58, 58, 26, 79, 60,241, 4,110,187,237,182,176, 13, 22, 0, 80, 74,203, 9, 33,185,147, 39, + 79,222,246,242,203, 47, 55,105,210,164, 9, 28, 14, 7,236,118, 59, 28, 14, 7, 14, 29, 58,132,197,139, 23, 31,171,169,169,201, +165,148,150,135,210,211,118,171, 60,152,255, 72,203,226, 94, 35,111,182,238, 61,181, 18,167, 79,157,133, 75, 58, 14,151, 36,193, +229,116,185, 13,129, 44,195,229,112,129,231,185,232,235,122, 54, 93,237,174,240, 79,236,107, 55, 23, 93,127, 33,251,228, 2,161, + 7, 14, 28, 40, 77, 76, 76, 84,222, 32,163,237,118, 59, 1, 0,173, 86, 75, 1, 40, 21,220,171, 1, 4,109,120,162,112, 12,152, +248,175,151, 94,106,172, 20,223,191,244,210, 75,141, 31,123,228,145,137, 0,222,216,187,123,247,194,187,238,186,107,242,231,159, +127, 94,107,157,187,238,186, 11,123,119,239, 94,232, 55,129, 0,156, 78, 39, 44, 22, 27, 74, 74,126,199, 61,247, 62,163, 78, 7, +168, 90,209,221,211,171, 35, 0,232, 1,160,228,244,255, 48,233,193,199,252, 94,164,148, 82,218,190,125,123,229,122,135, 40,138, +117, 42, 33,123,223,223, 67,221, 63, 60,145,161, 90, 85, 44, 52, 26, 13, 14,110,202,199,228,137,183, 0,146, 11,112, 84, 3,142, + 26, 80, 71, 13,168,189, 26, 68,107, 0,117, 90, 67,234, 42,233, 84,170,109, 8, 60, 7,157,246,252,125,211,104, 52, 64,171,215, +134,149, 78,127,121,255,237,183,223,112,255,253,247,195,110,183, 99,228,200,145,176, 90,173,176,217,108,176, 90,173,104,209,162, + 5, 44, 22, 75, 72, 61, 37,239,178, 44,171, 81,192,201,147, 39, 35, 59, 59, 27,211,167, 79,199,255,253,223,255,161, 69,139, 22, +152, 56,113, 34, 62,253,244, 83,100,101,101,161,166,166, 38,164, 38, 0,245,121, 44, 8,130,122, 15,246, 62, 86, 0,234,117,140, +252,105,186,187, 3, 67,157,227,254,208,248,254,245,214,156, 57,115, 38, 74, 74, 74,234, 68,174,188, 35, 88,115,231,206, 13,170, + 27, 8,159, 40, 83, 56,203,237,240, 76,178, 76,153, 50,229, 73, 66, 72,254,148, 41, 83,158,156, 53,107, 86, 97, 56,122, 1,230, +127,227,249,189,193,107,218, 14,159,101,252,119,211,192,113, 28, 40,165,106, 88, 19,112,239, 56,101, 30, 0, 24,141, 70,228,231, +231, 99,201,146,243,213, 6,148,101, 2,105,202,178,140,255, 38,186, 15,196, 80, 79,228, 74, 25,191,254,140,140, 97,195,134,225, +255,217, 59,239,240, 40,170,182,141,223,103,102,251,102,211, 32,148, 52, 18, 66, 4, 66, 66, 9,161,136,210, 85,164, 74,183,243, + 89,105, 42,190, 42,205, 6, 1, 21, 80, 4, 4, 17, 17, 16, 81,124, 1, 21,233, 77, 64,186, 1, 36,116,144, 38,144, 78, 72, 32, +125,235,148,243,253,145,108,220,148,205,238,134, 32,229, 61,191,235,218,107, 51, 51,103,238,121,102, 55,187,115,239,115,158,115, + 38, 34, 34,162, 76,246, 74,167,211, 85,105, 54,100, 89, 70, 82, 82, 18, 78,157, 58,133, 14, 29, 58, 32, 47, 47, 15, 10, 0,239, +156, 60,137,232, 97,195, 96, 41, 49,126,106,181, 26,195,135, 15,119,170,227,200,159,127,254, 89,166, 8, 40, 58, 58, 58,245,161, +135, 30, 10, 78, 72, 72, 40,205,104,105, 52, 26,104,181,218, 82,147,225,230,135, 26, 67,134, 12, 41, 99,134,202, 27, 44,251,135, +103,235,214,173,110,117, 17, 82, 74,209,165, 75,151,210,236,149,183,183, 55,214,172, 89, 83,218,166,115,231,206, 32,132,160,110, +221,186,216,178,101,139, 75, 77,160,248, 53,181,191,247, 60,207,163,168,168, 8,137,137,137, 80,171,213,165,245, 25, 58,157,174, +244,252, 25, 78,160, 50,172,130, 0,163,201,140,130,130,226, 47,210, 75,167, 86,151,105, 98,179, 84,127,112,154, 61, 19,154,159, +159,143,157, 59,119,226,215, 95,127, 69,155, 54,109,202,116, 15,186,219, 69, 88, 26, 50,165, 89,132,144,142,227,199,143, 63,248, +209, 71, 31, 5,213,174, 93, 27, 54,155, 13, 73, 73, 73, 88,186,116,105,186,209,104,236, 72, 41,205,242, 64, 16,162, 32,194,108, + 52, 33,175,160, 8,241,159, 44,115,214,146, 3, 0,155,181, 0,125,123,117,169,246,116, 40,213,129, 82,154, 6,224,101,251, 50, + 33,100, 57, 0,123, 49,126, 62,165,244,121, 79,244,148, 64,215, 65, 67,134,116,127,235,173,183, 74,215,189,245,214, 91, 56,120, +240, 96,119,229, 47,191,156, 18,128,221,252, 47,191, 52,159, 51,103, 78,105,155, 57,115,230,224,215, 95,126,249, 93, 2,118, 59, + 9,178, 56,131,101, 50,163,176,200, 4, 31,191, 64,164, 93,217,227, 50, 22, 21,111, 1,173,226,123,217,254, 29,226,172,238,198, + 93,115,245, 79,152,148,182,104,209, 2, 0, 74,235,142,154,119, 31,130,217,115,151, 64,195, 81, 12,236, 30,141, 58, 58, 25, 68, + 95, 11,170, 46, 19, 65,252,194,138,119,140,111, 85,165,174, 61,206, 61,239,191,131,191,189,180, 24,190,253, 0,148, 74, 37,126, +125,186, 55, 84,106, 21,254,111,211,222,226,193, 61, 47, 13,132, 74,163, 70,143,175, 87,185,140,213,241,220, 47, 93,186,132, 3, + 7, 14, 32, 42, 42, 10, 23, 47, 94, 44,173,177,181, 95,183,220,236, 77,160,246,121,174,236,223,227,215,174, 93, 67,223,190,125, +161, 82,169,176,108,217, 50,236,217,179, 7,227,199,143,199,139, 47,190,136,110,221,186, 85, 90, 23, 91, 94, 51, 38, 38,166,204, +123,228,172, 62,202,147,247,168, 50, 77, 59,213,125,223, 29, 53,237,197,237,149,153,245, 91, 45,108,119,200, 22, 85,214,101,214, +167, 92, 59,160,184,150,234, 79, 0,150,233,211,167,159,158, 62,125,122, 95, 66,200,198,233,211,167,247, 45,215,206,149, 78,249, +237, 46,191, 7, 75, 13, 86, 73, 74,174, 43,240,143,137, 82, 87,209,151,237,229,229,133,151, 95,126, 25, 19, 38, 76, 40, 45,100, +172, 10,187,115,173,138,141, 27, 55, 86, 88,183,110,221, 58, 87, 93,132,127,249,250,250,182,233,222,189, 59,242,242,242,144,156, +156, 12,131,193,128,232, 89,179,112,114,244,104,180, 90,184, 16, 92,247,238, 0,138, 63,240, 39, 79,158,132, 70,163,249,171,202, + 64, 42,193, 96, 48,192,223,223, 31, 90,173, 22,222,222,222,240,246,246,134,151,151, 87,169,209,114,213, 69,104,255, 48,111,218, +180,169,202,204,149, 99,202,215, 29, 51, 68, 41, 69, 66, 66, 66,133, 12,150,253,152,246,109,246, 76,134, 59,154, 0,160,213,106, +169, 70,163, 1,207,243,208,235,245,165,233,126,173, 86, 91,250,112, 55,131,229,106, 34,209,240,240,240, 50, 19,145, 42,149,202, + 50, 19,145,222,171,252,211, 69,104, 65, 81, 97, 81,141,235, 91,173, 86, 40, 20, 10,252,250,235,175,104,223,190,125,169,185,178, + 27, 43,199,247,221, 19, 40,165,169,132,144,174,243,230,205, 59, 52,123,246,108,255,194,194, 66, 44, 91,182, 44,175,176,176,176, + 43,165, 52,213, 35, 45, 0,130, 77,132,209, 98, 65, 97, 65,241,107,240,247,233,213, 46,118,186,183, 39,124,110,214,162,197,243, +223,125,247, 93,133,245,223,125,247, 29, 46, 94,188,248, 60, 78,158,220, 29, 10, 44,156, 48, 97, 66,100, 92, 92, 92, 40, 0, 76, +152, 48, 33, 37, 20, 88,232, 76,147,210,127,186, 8, 11, 75,204,186,185,168,242,186, 37, 79,145,101,185,194, 15,190, 91,189, 32, + 18, 66, 74, 77,198, 99, 79,190,140,244,203,231, 16,165,207, 70, 93, 63, 47,200, 5,233, 80, 61, 18,143,147, 55,245,248, 98,225, + 54,143,226,212,171, 85,208,234,254,233,110,210,234,180,208,148,244, 42, 16, 66,160,213,235,160, 84,187,239,207,237,231,126,238, +220, 57,232,245,122, 72,146, 84,225,122,227,233,136,102, 74,105,233,181,115,246,236,217, 24, 55,110, 28,150, 45, 91,134,147, 39, + 79,162, 85,171, 86,120,244,209, 71,113,253,250,117,156, 56,113, 2, 22,139,197,237, 56, 29,175, 23,103,207,158,197,142, 29, 59, +112,254,252,121,164,164,164,120, 20,159, 51, 77, 59,246,229, 95,119, 28,195,224,199, 90, 87,161,224, 92, 51, 62, 62, 30,215,175, + 95,175,144,185,114, 44, 63,114,150,193,114,244, 34, 85,144,136,178,217, 35,216,235,161,236,134,168,252, 50, 0,127,251,186,137, + 19, 39,190,231,238,126,142,203,246, 12, 88, 57, 93,167, 40, 74, 26,150,249, 4,217,187,152,236, 47,186, 99,102,202,254,183, 94, +175, 47,205, 50,133,133,133, 85,153,189, 42, 9, 18, 60,207,163,211,229, 2,168,213,234,210,238,188, 94,215,255,217,239,197, 23, + 95, 68, 68, 68, 68,153, 26, 44,199, 55,165, 50, 44, 22,203,238,221,187,119,199, 62,241,196, 19,252,217,179,103,161, 80, 40, 32, +203, 50, 44, 15, 62,136, 86, 11, 23,226,212, 91,111,161,243,149, 43,176, 8, 2,180, 90, 45,182,110,221,106, 51, 26,141,149,255, + 74,116, 2,199,113,196,110,176, 52, 26, 13,188,189,189,225,227,227, 83,154,205,241,228, 75,200,217, 47, 68,199,135, 39, 31,104, +123, 65,191,227,133,213,254,254,153, 76,166, 50,134,203, 93, 28,187, 12,236,166,200,215,215,183, 76,183,168, 61,139,231,142,193, +114, 53,145,168, 70,163,241,217,187,119,111,164,143,143, 15, 40,165,200,206,206,198,211, 79, 63,125,161, 10,201,123, 2, 10, 90, + 92,228,110, 50,163,208, 84,117, 55, 72,117,248,239,127,255,139, 75,151, 46,193,102,179, 97,250,244,233, 21,140, 85,117, 50, 88, +118, 40,165,151, 90,183,110, 45,247,236,217, 19, 9, 9, 9,208,104, 52, 2,165,212,227,249,171,168, 44,195, 38,136, 48,155, 44, + 40, 44,170,121,147,121, 55,114,230,228,201, 95,188,188,188,158, 6, 96,200,205,205,229,125,125,125,161,215,235, 97, 50,153,242, +248,146,145,130, 87, 1,171, 78, 16, 62,125,242,201, 39,231, 0,128, 66, 16, 62,173,106, 30,172, 82,131, 85,195,175,163,253,123, +203, 89,246,170,186,230,138, 16, 82, 60, 60,159,227,176,108,250, 56, 68,233,179,208,186,161, 23,204,215, 47, 65,227, 19, 0,226, + 23,142, 47, 22,110,195,217,171, 55, 61,138,243,153,229,171, 17, 26, 26,138,141,255,215, 31, 26,141, 6, 79,175,222, 81, 92,164, + 61,242, 41,168,180, 26, 60, 50,255,191,213, 58,119,163,209,232, 52, 83,229,110, 6,203, 81,211,110, 0, 91,183,110,141, 7, 30, +120, 0,187,119,239, 70,235,214,173,113,241,226, 69, 92,188,120, 17, 87,175, 94,197,201,147, 39,145,147,147,227, 81,156, 74,165, + 18,171, 86,173, 66, 86, 86, 22, 84, 42, 21,242,243,243,113,229,202, 21,167,245,207,238,106, 58, 26,172,166,125,226, 1, 0, 65, +117,124, 61, 50, 88,142,154, 51,103,206,172, 96,214,221,236,229,169,170, 81,118,185, 90, 39,251,178,181,156,217, 41,191, 92,190, + 61, 0, 92, 7,192,187,216,175,252,114,246,244,233,211,119,219, 51, 95, 37,186, 60,117, 82,127, 5, 56,233, 34, 84, 42,149,166, +166, 77,155,234, 28,251, 79, 57,142,131,183,183, 55, 25, 59,118, 44, 79, 8,129,193, 96,128,175,175, 47, 26, 55,110, 12,155,205, +117, 89,130, 74,165, 50,181,107,215, 78,231,152,122, 37,132,192,203,203,139, 31, 63,126, 60, 89,178,100, 73,165,251,173, 95,191, +190,202,127,110, 81, 20,231, 12, 27, 54,236,149,212,212, 84,255,122,245,234, 33, 35, 35, 3, 42,149, 10,148, 82,144,110,221,208, +233,242,101,216, 74, 12,195,185,115,231,176,120,241,226, 34,155,205, 54,199,101,192,229, 48, 24, 12,168, 93,187, 54, 52, 26, 77, +153, 81, 49, 14,169, 85,183, 50, 88, 53,105,174,236,154,142, 23, 86,251,223, 35, 71,142, 44, 93,246,228, 75, 82,165, 82,209, 62, +125,250,216,119,160,126,126,126, 8, 8, 8, 64,102,102,102,233, 7,197,158,185,115,215, 96,185,154, 72, 84,169, 84,194,102,179, +149,118,103,206,159, 63,191,218,198,224,110,130,138, 50, 49, 24,234, 32, 40,168, 9,234,212, 53, 67,150,165, 26,211, 22, 69, 17, +163, 70,141, 42, 51,231, 21,240,207,108,201,246,139,130, 32, 8,101,210,255, 30,197, 95, 3,153, 36,153, 2,130, 88,146,197, 51, + 58,245, 15,119, 45, 97, 97, 97, 62, 37, 93,134,229, 89, 73, 41,173, 80,140, 14,252, 51, 37, 3, 15,124,156,156,156,220,220,215, +215, 23, 61,122,244,192,134,181,107,215,127, 8,148,166,108, 76, 64,170,238,218,181,255,148,252,157, 86, 85, 28,148,162,180,139, +176,200, 88,211,102,157, 84,200, 94,221,106, 87, 14,199, 21,255, 48, 91,243,205,167,136,210,101,162, 85, 3, 13, 14, 28, 60,129, +246,161, 20,212, 82,189,255, 71,160,248,186,163, 84, 42,161,213,235,161,209,252, 83,115,165,209,235,160, 82, 87,167, 92,225,159, + 68,130,253,187,247, 86, 51, 88,132,112,101, 94,199, 87, 94,121, 5, 19, 38, 76, 64,143, 30, 61,112,241,226, 69,236,221,187, 23, + 23, 46, 92,192,152, 49, 99, 16, 19, 19,131,199, 31,127,220,237, 56,149, 74, 37,214,172, 89,131,188,188, 60, 80, 74,145,149,149, + 5,179,217,140, 73,147, 92,206, 79, 92,165,166,227,119,196,229,237,211, 0, 0,171,183, 31,173,182,230,187,239,190, 91, 58, 7, +163,253,154, 95, 85,214,202, 77, 14,187, 88,246,116,255,219, 78,165, 6,235,252,249,243,149,142,149,111,214,172, 89,230, 35,143, + 60, 82,247,252,249,243, 48, 24, 12,104,220,184, 49, 44, 22,139,211,110, 8,226,112,183,237,211,167, 79, 87,170,217,168, 81, 35, +219, 99,143, 61,166,172, 95,191,126,153,204,149,125,132, 77,137, 78,165,154, 0, 64, 41, 45, 32,132, 12,127,248,225,135,127,216, +178,101,139,174,113,227,198,200,203, 43,174,191, 93,182,108, 25, 94,127,253,117,232,116, 58,156, 63,127, 30,253,251,247, 55, 26, +141,198,225,212, 97, 14,172,202, 52, 43, 57, 15,168, 84,170,210,110, 50,123, 87,153,186,138, 84,116,101,154,132, 16,204,155, 55, +175,210,185,160,202,179,112,225, 66,160,220, 40, 10,103,113,126,254,249,231, 53,166,121,240,224,193, 50,247, 24,236,215,175,223, + 55,143, 63,254, 56, 82, 82, 82,202,116, 11, 86,101,176,202,107,186,154, 72,148,231,121,212,171, 87, 15, 31,125,244, 17, 2, 2, + 2, 80,191,126,253, 10, 6,203,213,123, 84, 29,110,183, 38,229,104,226,220,217,241, 29,191,249,118,181, 82,163,230,144,176,119, + 53,242,115,174,149,105,111,177,253, 51, 36, 90,221,250, 17, 88,143,238,116, 43, 78,139,197,130,207, 62,251, 12,241,241,241,136, +143,143,175, 50, 38, 39,195,161, 93,158,187,163,193,114,199,108, 85,166, 41,203, 18,209,234,253,161,247, 10, 66, 76,140, 63,100, + 55,230,234,116,204,133,223,161,247,221,152,146,146,226, 27, 26, 26,138, 11, 23, 46, 16,252, 83,143, 85,138, 90,173,126, 26, 14, +163,253, 42,253,188, 3, 39, 87,172, 88,209,188, 69,139, 22,152, 63,127, 62, 0,252,223,103,191,253,246, 84,188,169, 56,157, 89, + 50, 37,195, 86,119,226,148,168, 68,180,122, 63,232, 12, 37,175,163,236,254,156,167,142,239, 92,249, 56,237, 23,191, 91,252,161, + 87, 65,211,190,255,223, 9,155,208,167, 87, 8,254, 56,116, 18, 59, 83,189, 16,170, 73, 71,160, 49, 11,114,214, 95,248,207,144, +214,248,226,151,226,139,248,201, 35,174, 53, 9, 33,216, 63,118, 56, 12, 90, 13, 6,175,216, 12,165, 82,137,221,111,189, 0,149, + 74,133, 46,179,139,187,100, 79,125,246, 46, 20, 26, 53,162,198,196,187, 21,103,249,158, 26,123,205,149, 29, 87, 53, 88, 85,157, +123, 97, 97, 33,114,114,114,240,195, 15, 63,224,165,151, 94,194,245,235,215,113,229,202, 21,156, 63,127, 30, 43, 87,174, 44,115, +141,115, 55, 78,165, 82,137,137, 19, 39,226,157,119,222, 1,199,113,104,222,188, 57,226,227,227,209,161, 67,213,183,156,113,231, +125, 47,143,171,236, 85, 85,154,115,231,206,245,120,192,214,253,136, 71, 5, 26,246, 76, 86, 64, 64, 0,188,188,188, 0,160,204, + 5,214, 85, 55,161, 51, 77, 81, 20,161,211,233,160,211,233,202, 76,139,240,196, 19, 79,184,204, 96, 1, 0,165,116, 43, 33,228, +217,232,232,232,165,241,241,241, 94, 93,187,118, 85, 6, 5, 5, 33, 46, 46, 14,231,207,159,199,166, 77,155,108, 11, 22, 44, 48, + 26,141,198,151, 40,165,219, 61, 14, 18, 32,246,194,111,199, 25,237, 61, 65,146,164,148, 43, 87,174, 4,126,254,249,231, 60, 33, + 4,115,230,204, 41, 51, 65,107,249,115, 60,120,240,160,232,170, 75, 70, 20,197,148, 43, 87,174, 4,206,154, 53,171,140,166,253, + 81,222,164,184,163,233, 12,251, 57,151,127, 13,220,249,240,184,154, 72, 84,161, 80,224,220,185,115,152, 60,121, 50, 8, 33,101, + 6, 78,220,203, 28, 56,156,190,228,161, 54, 65,254, 79, 15,233,222,130,128,131,181,146, 76, 47,127, 35, 23, 64,177,185, 26, 56, +107, 21,214,188, 83,113,210,197,242,104, 52,154, 43,123,246,236,105, 48,109,218, 52,158,231,121,204,156, 57,179,204,255, 82,249, +247,253,247,223,127,151,116, 58, 93,114,117,207,195,102,179,185, 28, 69,229, 20,142, 59, 48,111,230,228, 30,223,124,183, 65, 73, +136, 21, 9,123, 86, 35, 47,183,242,161,233,106,165, 2,203, 87,172, 23, 21, 60, 87,189,162,146,154,227,155, 71, 31,125,116,210, +142, 29, 59, 20,161,161,149,205,110,224, 30, 33,192,134,121,243,230,245, 26, 54,108, 88,173,102,205,154,217, 7,159,168, 75, 30, + 32,197, 51,187, 59, 53, 88,142, 80, 96,221, 23,159, 79,254,191, 69,223,109, 80,115,196,134,132,189,171,145, 87,206,172,151, 71, +165, 82,226,199, 21,235,108, 10, 5,127,174,170,118,246,121,242,110,199, 5, 49,182,207, 75,248,106,243, 98,212,109,209, 11, 67, +251,117,196,254,249,255,135, 39,155,153, 96,251,233, 25, 52, 31,186, 28,203,222, 45,206,222,180,250,249, 93,151, 90, 28,199,193, +199,240,207,132,149, 28,199, 65,163,213, 65,169,254, 39,251,162,214,235,193,123,144,177,181,159,187,253,111,103,109, 60,129,231, +121, 68, 68, 68,160, 81,163, 70,120,248,225,135, 17, 27, 27,139,110,221,186,225,196,137, 19, 56,113,226, 4,198,140, 25,227,212, + 92,185,138, 83,165, 82,161, 71,143, 30,232,217,179,167, 71,251,187,210,116, 86,107,125,171,154,149,189,118,163, 71,143, 6,128, + 91,205,102,221, 19, 84,203, 96,213,169, 83, 7,106,181,186, 90,134,170, 50, 77,171,213, 90,106,172,116, 58, 93,105,198,106,253, +250,245,165,109, 92, 65, 41,221, 78, 8,137,249,224,131, 15,222,212,233,116,221, 76, 38, 83, 20, 0,232,245,250,191,140, 70,227, + 46,155,205, 54,151, 82,154,123, 43,177, 58, 26,140,242,184, 42,114,207,202,202,122,252,249,231,159,223,206,113, 92, 67,251,249, +149,127,118, 68,150,229,171,153,153,153, 85, 14, 85,207,202,202,122,252,185,231,158,171, 84,179, 50, 93,119, 52, 43, 67,146,164, + 50,166,202,113,132,161, 59,184,154, 72, 84,169, 84,194, 96, 48, 96,237,218,181,168, 93,187,182,167,225,221,213,252,113, 36,253, +179,170,182,119, 13,208,236, 1, 80,103,224,172, 85,201,187,179,173, 97, 93, 3,212, 73,107,222,121,170, 65, 85,251,216,108,182, +135,102,204,152,177, 95, 16,132, 48,119, 98, 80,171,213, 73, 22,139,165,163,219, 65,151, 64, 41,197,185,115,231,228, 87, 94,121, + 37, 59, 43, 43,107,168,167,251, 3,192,222,132,164,217, 29,219, 5, 5, 12,233,223,177, 45, 8,129,213,234,164,168,151,128, 82, + 74,169,130,231, 82,246, 28, 76,121,165, 58,199,170, 41, 40,165,199, 9, 33, 83, 35, 35, 35, 71, 0,112,118, 37, 92,233, 74,231, + 42, 96, 85, 91, 44,159,183,105,211,102,252,123,239,189,231,215,175, 95, 63,132,134,134,194,215,215,243,187, 5,237, 63,148, 58, +162, 67,155,192,144,193, 79,116,124,156, 35,132, 90,156,189,142, 37, 16,251,235,169,224,207,237, 57,152,210,210,121,187,127,230, + 76,187, 29,217,134, 71,134,188,136, 71,134,188, 8,160,248,255,105,231, 47, 93,145,152,246, 27,226,184, 52, 88, 22,117, 4,241, +177,255,171,187,158,230,134,227, 56,244,251,110, 45, 84, 42, 85,105,156, 15,205, 40, 59, 46,160,241,107,238,223, 75,221,241,220, + 1,231,181, 86,158,214, 96,241, 60,143,236,236,108,156, 63,127, 30,153,153,153, 48, 26,141, 56,123,246, 44,172, 86, 43,114,114, +114, 96, 31,105, 88,157, 56,107,234, 61,186,147,154,255, 11,198,202,142, 71, 6,139, 82,154,218,190,125,251, 42,219, 72,146,228, +209, 40, 35,133, 66, 97,238,216,177, 35,169,108,180,129,253,111,157, 78,231,214,207,231, 18, 3, 21, 15, 32,158,148,184, 11,171, +181,252, 93, 15, 61, 71,146,164,244,118,237,218,241, 85,213, 36,200,178, 92,229,140,113, 89, 89, 89, 69, 0,106,244,214,225,183, + 67,179, 60,132, 16,105,196,136, 17, 85, 58, 41, 47, 47,175, 42,139,139, 92, 77, 36,106, 52, 26, 51,158,127,254,121,201,177,171, +217,113, 34,210,251, 26, 66,147,122, 63,253,114,216,238,108,107, 24, 0,216, 77, 22, 40, 77,114,182,203,159,127,254,153, 9, 32, +242,118,135,118,249,242,101,107,251,246,237,127, 44, 40, 40, 24, 77, 41,117, 62, 97,143, 11,246, 31, 78,119,157,158,184,203,160, +148, 30, 7, 48,242, 86,117,172,192,217,122,102,243,168,248, 15, 63, 28, 60,249,195, 15, 27,203, 64,109,148,204, 81,197,187, 97, +210, 28, 73, 56,146, 81,227,115,131, 73,146,148,250,208, 67, 15,121,188,143,171,237, 85,204, 36,142,255, 34, 20, 40,215, 37,232, +142,230,237,136,211,174,217,162, 69, 11,180,106,213,170,244,217,142,227,250,216,216, 88,183, 52, 91,183,110,141,102,205,154, 57, +157,161,189,124,205,213,157, 62,119, 59,246,159,190,177,177,149,143,236,188, 19,113,222,235,144,154, 40,100,117, 42,126, 15,214, +205, 48, 77,166,201, 52, 75,219,240,148, 82,183, 43,243,239,167,115,103,154, 76,147,105,254,251,154,247, 27,255,187,213,103, 12, + 6,163, 74, 60, 49, 87, 12, 6,131,193, 40, 11, 1, 80,105,135,176, 39,206,148, 16,226, 89,167,178, 27,250, 76,147,105, 50, 77, +166,201, 52,153, 38,211,188,255, 52, 93,105,223, 47,153, 49,214, 69,200, 52,153, 38,211,100,154, 76,147,105, 50,205, 59,174,121, +191,193,186, 8, 25, 12, 6,131,193, 96, 48,106, 24,207,111, 84,198, 96, 48,238, 43,166, 16,114, 75, 63,180, 38, 83,122,235,243, +181,184,193,189, 18, 39,131,193, 96, 0, 44,131,197, 96, 48, 24, 12, 6,131, 81,227, 48,131,197, 96, 48, 24, 12, 6,131, 81,195, + 48,131,197, 96, 48, 24, 12, 6,131, 81,195,220,214, 81,132, 12, 6,227,238,231, 94,169,109,186, 87,226,100, 48, 24, 12,128,101, +176, 24, 12, 6,131,193, 96, 48,106, 28, 5, 80,246, 70,197,148, 82,231, 55,220, 99, 48, 24, 12, 6,131,193,184, 13,220,111, 94, +164,116,154,134,251,225,100, 24, 12, 6,131,193, 96,220,187,220, 79, 94,164,180,139,208,209, 57, 50, 24, 12, 6,131,193, 96,252, +219,220, 79, 94,164,212, 96,221, 79,174,145,193, 96, 48, 24, 12,198,189,199,253,228, 69,202,100,176,238, 39,231,200, 96, 48, 24, + 12, 6,227,222,226,126,242, 34, 10,224,254,114,140, 12, 6,131,193, 96, 48,238, 61,238, 55, 47,114, 91,167,105, 32,132, 52,103, +154, 76,147,105, 50, 77,166,201, 52,153, 38,211,252, 95,131,205,131,197, 96, 48, 24, 12, 6,131, 81,195, 48,131,197, 96, 48, 24, + 12, 6,131, 81,195, 48,131,197, 96, 48, 24, 12, 6,131, 81,195, 40, 92, 55, 97, 48, 24,247, 51,247,202, 61,250,238,149, 56, 25, + 12, 6, 3, 96, 25, 44, 6,131,193, 96, 48, 24,140, 26,135, 0,168,116, 36, 0,165,244,148,219, 34,213, 24, 77,224, 74,159,105, + 50, 77,166,201, 52,153, 38,211,100,154,247,159,166, 43,109, 79,252,199,221, 12,161,244,246,205,231, 69, 8,105, 94,211, 47, 20, +211,100,154, 76,147,105, 50, 77,166,201, 52,239, 63,205,251, 13,214, 69,200, 40, 3, 33, 68, 65, 8,113, 90,155,231,106,251,191, +165,201, 96, 48, 24, 12,198,221, 12,187,168, 49, 74, 33,132,116, 0,208,183,228,239,141,148,210, 4, 79,182,255, 91,154,119,138, +184,184, 56,157, 86,171,237,241,251,239,191,171,206,157, 59,135,131, 7, 15,210,255,254,247,191,130,217,108,254, 45, 49, 49,209, +116,167,227, 99,212, 12,173, 91,183,126,156, 16, 50, 1, 0, 40,165,159, 30, 61,122,116, 91,117,181, 8, 33, 36, 50, 50,114,140, + 90,173,238,173, 84, 42,131, 36, 73, 34, 22,139, 37,221,100, 50,109, 79, 75, 75,155, 69,171, 81,184, 79, 8,105, 27, 16, 16, 48, + 50, 38, 38,166,241,229,203,151, 83,146,147,147,151, 3,216, 6,224,241, 6, 13, 26, 60, 31, 17, 17, 17,122,250,244,233, 11,217, +217,217, 11, 41,165,127,222,169, 56, 25,140,255,117,220, 50, 88,132, 16,206,223,223,255, 49,157, 78,247,102, 97, 97, 97,107, 31, + 31,159,211,162, 40,206,203,200,200,216,200, 62,120,247, 7, 37, 25,164,190,148, 82, 37, 0,240, 60,223,191, 67,135, 14, 97,132, + 16,153, 16, 66, 41,165,132,227,184, 88, 73,146,184,146,246,125, 9, 33,127, 82, 74,197,234,106,138,162,232,177,230,237, 34, 38, + 38,102, 26,165, 52,168,170, 54, 94, 94, 94,109,118,238,220,217,116,221,186,117,226,242,229,203,115,159,122,234, 41,195, 11, 47, +188,160, 88,182,108,217, 87, 0,254, 83,190,125,116,116,244,108,142,227, 2,220, 57,190, 44,203,217,103,206,156,121,187,154,225, + 51,106, 16, 66,200,132,151,103,236,238, 44, 83, 96,233,196, 46, 28,138,205, 75,181,136,141,141,253,126,192,128, 1, 79, 55,105, +210, 68, 33,203, 50, 4, 65,128,197, 98,105,122,244,232,209,174,219,182,109,107, 3, 96,168,135,177,245,157, 56,113,226,226,169, + 83,167,214, 81, 42,149, 68, 16,132, 7,127,250,233,167,158, 35, 71,142, 60,190,112,225,194, 86, 79, 62,249,164,183,125,253,228, +201,147,123, 17, 66,222,162,148,174,252,183,227,100, 48, 24, 46, 12,150,183,183,247, 3,117,234,212,121,167,118,237,218,189,218, +180,105,147, 55,124,248,240,191, 79,156, 56,113, 54, 38, 38,166,240,187,239,190,251, 68, 16,132, 5, 77,154, 52,249, 45, 63, 63, +127,214,181,107,215,206,122,114, 96, 66,200, 3, 0,134, 3,232, 5, 32, 4, 64, 58,128, 45, 0, 22, 83, 74,207, 85,231,100,130, +131,131, 91,120,121,121,141, 39,132, 60, 88, 84, 84, 20,226,229,229,149, 78, 41, 61, 84, 80, 80, 48, 51, 35, 35,227,104,117, 52, + 67, 66, 66, 26, 1,120, 67,161, 80,116,146, 36,169, 33,207,243, 73,146, 36,237,147, 36,105,126,122,122,250,133,234,104, 62, 28, +234,221, 79, 54,248,204, 18,120, 93,104,161, 89, 84, 25, 52, 10, 65, 41,155, 83,228,162,220,137,135,146, 11, 87, 87, 71,179,166, + 81,171,213,220,242,229,203, 91,169,213,106, 0,128,213,106, 69, 76, 76,204, 45,221, 39, 74,169, 84,114, 51,103,206,108,165, 82, +169, 0, 0, 54,155, 13,221,187,119,191, 43,238, 61, 69, 8, 9, 73, 76, 76,244,181,199, 86, 30, 73,146,208,191,127,255,112,181, + 90,141,133, 11, 23,138,217,217,217,173,151, 46, 93,154,248,213, 87, 95, 5,124,255,253,247, 67, 80,137,193,226, 56, 46,192,153, +166, 36, 73,176,217,108, 16, 69, 17, 86,171, 21,221,186,117,171,241,115, 98, 84, 15, 74,105, 24, 5,176,229,132, 25, 0,106,223, +138,150, 78,167,139, 26, 56,112,160, 34, 43, 43, 11, 74,165, 18, 54,155, 13,215,174, 93, 67,163, 70,141,120,171,213,218,196, 83, +189,166, 77,155,142,156, 62,125,122,221,205,155, 55,219,126,252,241, 71,203,163,143, 62,170,122,233,165,151,124, 58,119,238,220, + 41, 36, 36,132, 91,186,116,169,101,199,142, 29,182,231,158,123, 78, 51,109,218,180,186, 91,182,108,121, 26,128, 75,131, 85,211, +113, 50, 24,140, 42, 12,150,183,183,247, 30,131,193, 16,249,234,171,175,158, 27, 61,122,244,111, 6,131, 65, 2,128,107,215,174, +105,250,247,239,159, 53,104,208,160,235, 70,163,145, 95,176, 96, 65,131, 47,191,252,114,187,183,183,119, 90, 65, 65, 65, 59, 87, + 7, 36,132, 16, 0,111,114, 28,247, 70,143, 30, 61,246, 8,130,144,181,118,237,218,159,135, 12, 25,210, 81,150,101,175,223,127, +255,125, 19, 33,228, 27, 0,159,187,155, 29, 35,132,240, 17, 17, 17,241, 33, 33, 33, 99,191,254,250,107, 77,195,134, 13,161,215, +235, 81, 80, 80,208,224,194,133, 11,161,111,190,249,230, 19,141, 26, 53,154,231,235,235,251, 65, 98, 98,162,224,166, 38, 9, 10, + 10,250,143,143,143,207,199,159,124,242,137, 54, 58, 58,154,232,245,122, 92,189,122,181,121, 66, 66, 66,204,183,223,126,251, 82, + 72, 72,200,148,180,180, 52,183,227,236, 74,136,194, 18, 89,103,155, 95,211,118,221, 22, 46,254,150, 4,120,233,161, 32, 4,130, +205,166,204, 52,154, 34, 94, 31, 53,226,231, 14,141,235, 31, 40, 80,102, 62,114,230, 12,181,185,163, 89, 83, 80, 74, 69, 66,200, + 70,158,231,251,171,213,106,174,127,255,254,216,177, 99, 7, 49,155,205, 10, 0,208,106,181, 98,255,254,253,161,211,233, 96,181, + 90,101, 0, 27, 75,246,209,148,236,111,169, 74, 83,169, 84,114,221,186,117, 51, 30, 57,114,228,134,209,104, 84,218, 53,187,117, +235, 86, 75,163,209,232, 5, 65,112, 75,243,118,162, 86,171,113,233,210,165, 50,235, 36, 73,194,245,235,215,113,227,198, 13, 88, + 44, 22,146,147,147, 3, 73,146, 96,177, 88,178, 36, 73, 2,199, 21, 39,223,156,105,170, 84, 42,156, 63,127,190,194,122,155,205, + 6,147,201, 4, 65, 16,144,159,159,175,211,106,181,145,157, 58,117, 74, 5,176,174,176,176,112,214,241,227,199,147,106,246,236, + 24, 30,144,188,233,152,185, 1, 0, 27,128,203,183, 34, 68, 8,145, 1, 96,223,190,125,200,204,204, 68, 86, 86, 22,178,178,178, + 16, 26, 26,138,234,100,255,207,157, 59, 55, 55, 54, 54,150, 28, 63,126,124, 3,128,197,171, 86,173, 26,120,243,230,205,175,199, +141, 27, 87,107,230,204,153, 55,199,143, 31, 63, 10,192,154, 85,171, 86,189,216,162, 69,139,126, 39, 79,158,252,226, 78,196,201, + 96, 48,170, 40,114,167,148, 6, 61,240,192, 3, 55,231,204,153,211,116,226,196,137,181, 11, 11, 11,121, 0, 8, 10, 10, 50, 3, +128,209,104,228, 39, 76,152, 80,103,198,140, 25, 77, 53, 26, 77,142, 40,138,117, 42,209,168,108,132,193, 27, 62, 62, 62, 79,252, +253,247,223,171,154, 54,109, 90,107,250,244,233,199,188,188,188,232, 23, 95,124,113,180, 81,163, 70,129, 73, 73, 73, 63,248,248, +248,116, 7, 48,214, 73, 92, 21, 52,195,195,195, 39, 15, 25, 50,100,236,129, 3, 7, 52, 45, 91,182,132,183,183, 55,120,158,135, +159,159, 31,218,183,111, 79,246,238,221,171,233,221,187,247,152,188,188,188,153,238,106, 6, 7, 7,143,237,217,179,231, 39, 71, +142, 28,209, 61,242,200, 35,220, 36, 14,212, 0, 0, 32, 0, 73, 68, 65, 84, 68,173, 86, 35, 55, 55, 23,106,181, 26, 29, 58,116, + 32, 95,127, 53, 95,215, 60,186,217,228,144,144,144,169,238,106, 90, 30, 8,216,254,212,232, 9,221, 55,110,217, 70,234,213,171, +135,191, 63,159,138,125,157, 99,112,241,163,137, 8, 12, 12,196,134,205, 91, 73,223, 97,163, 59,250, 8,245,126,119, 87,243, 86, +113,212,164,148, 38,196,196,196, 36,158, 61,123, 22,157, 58,117,194,207, 63,255,220,114,220,184,113,163,199,141, 27, 55,250,231, +159,127,110,217,169, 83, 39,156, 61,123, 22, 49, 49, 49,137,148,210, 4, 66,200,104, 0, 55, 1,220, 44,249,219,169,230,158, 61, +123,208,189,123,247,156, 85,171, 86, 53,154, 52,105,210,180, 73,147, 38, 77,251,249,231,159, 35,186,119,239,158,179,103,207, 30, +143, 52,111,199,185,219,145, 36,169,194,131, 82, 10, 89,150, 81,183,110,221,235,155, 55,111,166,125,251,246,229,235,215,175,159, +222,191,127,127,205,161, 67,135, 40, 33,100,163, 39,113, 82, 74, 97, 50,153, 96, 50,153,112,249,242,101,221,188,121,243, 58,142, + 29, 59,246,129,159,126,250, 41,120,204,152, 49,163,124,124,124,142,182,106,213, 42,204, 19, 77, 79, 97,154,206,225, 56,238, 26, +138,205, 85, 17,199,113,201,213,213, 28, 60,120,112,243,176,176,176,122, 63,157,246, 71,142,170, 41, 36,165, 47,100,149, 31,164, +218,109,113, 81,213, 19, 65, 65, 65,245,194,194,194, 58,120,162, 73, 41,221,126,236,216,177, 94,148,210,133,148, 82,137, 82,250, +203,248,241,227, 95, 33,132,172, 30, 63,126,252, 8, 74,233, 47, 37,235,151,156, 56,113,162, 31,165,116,215,157,136,243, 86, 97, +154,255,155,154, 46,104, 11,160, 79,201,163, 29,128,246,229,150,213,229,218, 61,234,228,185, 79,185,229,182,229,246,179, 47,223, + 50,246,218, 23,106,127,216, 55, 16, 66,132,207, 62,251,236,224,183,223,126,187, 35, 35, 35, 35, 48, 34, 34,162,207,192,129, 3, +195,242,243,243,185, 65,131, 6,133, 7, 6, 6,246,221,181,107, 87,253, 65,131, 6,253, 62,100,200,144, 4, 66,136,203,186, 25, + 66, 72, 35,158,231,223, 58,126,252,248,254,240,240,112, 91,122,122,186,119,108,108,108, 1, 0, 52,110,220,216,120,227,198, 13, +157,183,183, 55, 54,111,222,124,152, 16, 50,156, 16,210,212,149,102, 80, 80, 80,108, 64, 64,192,216,143, 63,254, 88,195,243,124, +165,109, 52, 26, 13, 62,254,248, 99,141,143,143,207,171,193,193,193, 15,186,210,172, 95,191,126,148,183,183,119,252,188,121,243, +180, 86,171, 21, 54,155, 13,245,234,213,131,193, 96, 64, 70, 70, 6,210,174, 92,193,245,171, 87, 49,230,229,151,117, 94, 58,221, + 91, 65, 65, 65,173, 92,105,118, 10,247,238,111, 8,110,214,245,245, 55,222,196,153, 55, 95,198,142, 96, 53,234,191, 49, 1, 45, +119,159, 66,200,148, 89,216, 21,225,131,196,161,143,225,173,183,222,129,170,110,196, 67, 15,133, 26,158,114,165,121, 59, 80, 40, + 20, 84,163,209,192,108, 54, 43,246,237,219,215, 73, 20, 69,165, 40,138,202,189,123,247,118,253,237,183,223,122, 77,159, 62,253, +113,157, 78, 55,170, 67,135, 14,223, 19, 66,230, 82, 74,117,148, 82, 29,128,153,246,204, 83,101,154, 74,165, 18, 38,147, 73,121, +228,200,145, 17,146, 36,169, 37, 73, 82, 31, 57,114,228,181, 93,187,118, 61,191,112,225, 66,143, 53,255, 45,120,158,135, 66,161, +128, 82,169, 68,171, 86,173,254, 94,177, 98,133, 16, 20, 20,164, 88,180,104,145,127,221,186,117,189,190,255,254,251,220,156,156, +156,207, 60,209,180, 90,173,176, 88, 44, 48,153, 76,216,183,111, 95,195, 87, 95,125, 85, 97,181, 90,165, 97,195,134,221, 20, 4, +193,242,218,107,175,249, 24, 12,134,119,110,215, 57, 49,170,134, 82, 42, 1, 40, 2, 80,104,207,162,134,135,135,107,130,131,131, + 91,132,135,135,187,253,255, 88, 88, 88,248,205,236,217,179, 67, 56,141, 31,246, 91,123, 99, 21,157,138,237,126, 95, 33, 43,124, + 28,234,133, 62,128,158, 61,123,214, 37,132,204,175,129,120,215, 81, 74,135, 80, 74,127,173,206,254,183, 59,206,182,109,219,118, +106,211,166,205,145,184,184,184,140, 54,109,218, 28,105,219,182,109,167,234,106,217,153, 58,146, 60,250,233, 27,124,234, 71,163, + 8,253,244, 13, 62,117,234, 72,242,232,173,106, 50,238, 60,149,121, 17, 7,234, 16, 66, 54, 18, 66, 54,190,251,238,187,221, 0, +212, 46,183,252,144, 99, 59, 0,234,202,158,237, 15,135,245,117, 80,108,172,234, 56, 44,215, 8,165, 93,132,148,210, 74,187, 57, +234,212,169, 99,125,239,189,247,142,155,205,230, 83,223,127,255,125,228,232,209,163, 99,195,194,194,206, 15, 26, 52,104,147, 94, +175, 23,237, 53, 58,110,242,114,239,222,189, 55,215,170, 85,139,100,103,103,171,172, 86,171,226,218,181,107, 42, 73,146, 8,207, +243,212,104, 52, 42, 46, 94,188,168,180,217,108,242,131, 15, 62,184, 62, 33, 33, 97, 56,128,183,170, 18,212,235,245,175, 45, 90, +180, 72,235,204, 92, 73,146,132,194,194, 66,136,162,136, 41, 83,166,104,199,142, 29,251, 38,128,131, 85,105, 42,149,202, 49,115, +230,204,209,218,187,128,100, 89,198,209,163, 71,145,125,253, 58, 44, 5,249,176, 22,228,195,154,151, 3,174, 48, 15,207,247,122, + 92,187,240,215,181,111, 3,120,190, 42, 77,171,198, 48,227,251,197,223, 66,146, 36,164,175,173,188, 36,226,230,129,221,144, 68, + 1,211, 62,157, 73,222,122,249,201,233, 0, 86, 85,165,249,111,162, 86,171,185,207, 63,255,188,169, 90,173, 6, 33,132, 90,173, + 86, 68, 71, 71,223, 82,253,148, 90,173,230,231,206,157, 27,171, 82,169,136, 93,179,121,243,230,119, 69, 77,150, 35, 42,149, 10, + 58,157, 14,225,225,225,166,126,253,250, 37,204,157, 59,183, 1,207,243,122,133, 66,177, 53, 47, 47,111,250,233,211,167, 61,234, + 70,178, 88, 44, 48,155,205, 48,155,205, 72, 78, 78,174, 31, 25, 25, 73,254,243,159,255, 72, 69, 69, 69, 17, 75,150, 44,185,180, +106,213, 42,253,252,249,243, 7, 1,120,227, 54,157, 18,195, 9,145,145,145,106, 31, 31, 31,223, 6,181, 21, 69, 74, 30, 69, 25, +162, 88, 47, 36, 36,100, 2,128, 54,141, 27, 55,246,191,120,241, 98, 78,112,112,240, 65,142,227, 86,166,164,164,100, 84,165, 69, + 41, 37,162, 40, 98, 68,187, 92,140,122,144,131, 40,138,200,205,205, 69,114,114, 50, 78,159, 62,141, 67,135, 78, 87, 43,198,134, + 13, 27,190,172,213,106,123,168,213,234,112, 73,146, 56,163,209,152,100,177, 88,118,164,167,167,127, 67,171, 49,177,225,237,138, +211, 65,127,214,192,129, 3,131,124,125,125,113,236,216,177,160, 19, 39, 78,204, 2,208,230, 86, 52,213, 74,110,233,176, 87,230, + 7,215,242,243,195,213,179, 27,130,215,109,249,105, 41,138,107,121, 25,247, 56,206,188, 8,128, 44, 74,105,233,136,243,233,211, +167,247, 45,105,223,215,113,217, 13,253, 10,237, 74, 70,176,187,181,191, 39,148, 26, 44,251, 72, 49,103, 13,181, 90,173, 52,114, +228,200,243,235,215,175, 15,111,211,166,205, 95,206,138,129, 93,240,112,211,166, 77,147, 14, 31, 62, 76,235,212,169, 99,149,101, +153,232,245,122, 73,167,211,201,121,121,121, 16, 4,129, 38, 37, 37, 41,146,147,147, 85, 1, 1, 1, 42,184,145,170, 83, 42,149, + 29, 26, 54,108, 88,233, 54,171,213,138,194,194, 66, 20, 20, 20,192, 98,177,160, 94,189,122,132,227,184,246,174, 52, 57,142,235, +216,180,105, 83,146,147,147,131,160,160, 32,236,223,191, 31,133,121,185,176, 20, 20,192,146,151, 11, 91,126, 30,164,252, 92,228, + 94,207, 64,120, 96, 8, 41,153,106,160, 74, 68, 94, 23, 86,215,224,133,139, 83, 39,160,237,209, 36, 16,165, 10,135,155, 7,130, + 10,197,165, 86,237, 78,166,131,168,212,248,107,204, 11,168,255,236,171, 16, 56, 77,176, 43,205,219,129, 40,138,196, 98,177, 64, +171,213,138,157, 58,117,218,199,243,124, 87,181, 90,205,141, 26, 53, 10,215,174, 93,179, 55, 35, 0, 48,106,212, 40,232,116, 58, + 88, 44, 22, 17,192, 56,103, 53, 83,162, 40, 18, 65, 16,160,211,233,132, 54,109,218,124,195,243,252,107,106,181,154,111,210,164, + 73,230,140, 25, 51,210,189,188,188,188,146,147,147,111,170,213,234,212,240,240,240,118, 58,157, 46,204,149,230,191,137, 70,163, +129, 66,161, 0,199,113,168, 93,187,118,209,141, 27, 55, 14,253,253,247,223,207, 84, 71, 75,146, 36, 88,173, 86, 8,130, 0,179, +217, 12, 89,150,113,226,196, 9,104, 52, 26,165, 36, 73,167, 37, 73,210, 43,149, 74,240, 60,207,230,168,251,151,137,139,139,235, +218,178,190,207,172, 81,129, 22,255, 70,125,189, 10,245, 26,190,232,233,181, 66,219, 71, 31, 29,250,248,184,113, 19, 12, 1, 1, + 1,234, 43, 87,174,152,191,248,226,139,134,107,214,172, 33, 0, 62,175, 74, 47, 61, 61,125,245,140, 25, 51,106,117,237,218, 53, + 66,169, 84,146,220,220, 92,100,101,101,225,250,245,235, 72, 78, 78,166, 87,175, 94,253, 91, 20,197,159, 61,137,177,101,203,150, + 75,158,125,246,217, 97,209,209,209, 74, 74, 41, 4, 65,128,209,104,140, 61,116,232,208, 19,251,247,239,239, 4,192,227,255,203, +140,140,140,159, 63,253,244, 83,175, 46, 93,186, 52, 85, 42,149, 92, 77,196,233, 8,165, 52,200, 96, 48, 96,199,142, 29,240,241, +241,129,171,209,186,238, 96, 19,229,224, 90,126,181, 97,190, 48, 27, 65, 62, 97,176,137,242, 29,249,190,100,212, 60, 85,120,145, + 63, 1,244,185, 85, 51,116,187,204, 84,101,184,204, 96,217,185,118,237,154,166,176,176, 80, 33,203, 50,103,177, 88,148,178, 44, + 67,169, 84,186, 85, 48,238, 64,244,192,129, 3, 15,182,109,219,214, 8, 0,106,181, 90,244,245,245, 21,243,242,242, 80, 98,176, +100,133, 66, 97, 54, 24, 12,230,136,136, 8, 0,112,217, 69,104, 50,153, 26,232,116,186, 10,235,141, 70, 35, 10, 11, 11, 75, 13, +150,209,104,132,143,143, 15,138,138,138, 92,126,184, 37, 73, 10,215,235,245, 72, 79, 79, 7, 0, 20,230,230,192,156,159, 15, 91, + 65, 30,108,185, 57, 16,242,114, 33,228,229,128, 51,153,224, 23, 18, 10, 81, 20, 67, 93,105, 22, 89, 36, 53, 15,138,235, 27, 87, +163,222,107,227,156,182,187,185,111, 23, 12,145, 77, 96, 50,217,254,245, 57,202, 8, 33, 29, 56,142,139,107,214,172, 25,250,247, +239,143,161, 67,135,158,208,233,116,117,231,207,159, 31,157,150,150, 86,161,253,128, 1, 3,240,198, 27,111, 96,224,192,129, 63, + 28, 59,118,108, 65, 85,154, 93,186,116, 65,183,110,221,106, 13, 29, 58,244,170,193, 96, 72, 92,188,120,113,187, 41, 83,166,100, + 26,141,198,180,196,196,196, 22,169,169,169,250,198,141, 27,239,142,137,137,225, 54,111,222, 28, 86,149,230,191,141, 40,138, 16, + 4, 1, 54,155, 13, 22,139,197,229,103,197,145,242, 9, 5, 65, 16, 74, 71, 16,154,205,102, 8,130, 64,214,173, 91,139, 13, 27, + 54,112,103,207,158, 9,153, 56,241, 93,228,230,230, 66,146,164, 26, 63, 15, 70,229,180,105,211,166,151,130,202,139,158,171, 47, +106,159,171, 39, 22, 42, 56, 90,120,225,219, 15,138, 78,248, 41, 44,150, 34,226,253,254, 7, 31,248, 95,186,116,201,246,233,167, +159,102,244,239,223, 95,251,202, 43,175, 52,219,188,121,115,167, 6, 13, 26,124,155,156,156,156, 91,153, 38, 33, 68,245,242,203, + 47, 31,244,247,247,111,244,227,143, 63,102,166,167,167,215, 18, 4, 65,111,181, 90,109, 86,171,245,146,205,102,219,111,181, 90, +119,100,100,100, 36,122, 18,171,193, 96,104,249,212, 83, 79, 41,115,114,114,160, 80, 40, 96,179,217,144,149,149,133,214,173, 91, +243, 59,119,238,140,174,206,249,159, 57,115,102,118, 80, 80,208,238, 13, 27, 54,244,240,242,242,138, 83,171,213,245, 37, 73,146, +204,102,115,166,217,108, 62, 94,157, 56, 29, 33,132,164, 31, 61,122, 52,200,219,219, 27,105,105,105, 32,132,164, 87, 87,203,142, + 74,201,165, 92,253,107,125,104,144, 79, 67,156, 59,119, 16, 42, 37,151,114,171,154,140,187,131, 42,190, 95,219,150,108,239,235, +194, 36,153, 38, 78,156,248, 30, 33,100,227,196,137, 19,223,171, 68,223,190,159,228,216,206,161,125,141,253,168,175,242, 34, 94, + 80, 80,160,248,243,207, 63,107, 39, 39, 39, 27,234,215,175,111,140,137,137,201, 37,132, 80, 73,146,184,155, 55,111,122,165,166, +166,106,253,253,253, 45,161,161,161,121,110, 30,239,194,235,175,191,222,101,210,164, 73,137,143, 61,246, 88, 54, 0,228,228,228, + 32, 43, 43,203, 62, 74, 11,233,233,233,220,145, 35, 71,106,109,221,186, 53, 22,110,140,224,209,233,116,201, 5, 5, 5, 77,252, +252,252, 0, 20, 95,208,236,166,202,241,217,102,179,161,160,160, 0, 94, 94, 94, 46, 63,220, 28,199,165,165,165,165, 69,154, 76, + 70, 36, 93,188, 8, 75, 65, 30,108,249,121, 16,242,115, 33,228,230, 66,202,189, 9,174,176, 0, 6,157, 14, 5, 55,111,128,231, +249,107,174, 52,189, 52,188, 85, 16, 37,117,157,158, 79, 0,196,249,245,217,175,125, 71,208,168,150,208,233,126,245,212,188,222, + 18,246, 57,171,236,115, 82,233,116, 58,124,242,201, 39, 72, 76, 76,148,171,234, 6, 86,171,213,224, 56,174, 82, 55, 80, 94, 83, +163,209,232, 38, 77,154,164, 59,126,252,184, 86,173, 86,195, 96, 48,232,143, 31, 63,222,226,143, 63,254,224,140, 70, 35, 31, 25, + 25, 57, 48, 56, 56,184,176, 42,205,219,137, 40, 86, 44, 35, 20, 69, 17,133,133,133,165,117, 83, 55,111,222, 84,104,181,218,198, +157, 59,119, 78,176, 90,173, 63,139,162,248, 93, 98, 98, 98,190, 51, 77,155,173,226, 96, 80, 89,150, 33,138, 34, 68, 81,132, 66, +161,144,215,173, 91,143, 47, 23,204,197, 47,171,126,165, 93,186,116, 33,155, 55,111,134, 44,203,169, 53,123,118, 12,103,200,178, + 60,107,215,132,193, 90, 72, 82,161,101,247,138,162,109, 55, 20, 69,223,158,218,117,228,134, 96,209, 60,240, 64, 68,148,143,183, + 47,247,253,242,111,111,102,100,254,125,225,203, 47, 83, 67,167, 77,155,230, 23, 17, 17,225,123,254,252,249, 96, 0,149, 26, 44, +131,193, 16,254,194, 11, 47,188,116,243,230, 77,229,226,197,139,151,165,165,165,237,165,148,254,237,216,134, 16,210,154, 16, 50, + 19,128, 18, 64, 61, 0, 34,128,237,148,210, 31,156,197, 90, 50,135, 28,118,239,222, 93, 97,180,159, 44,203,213, 30,237,151,145, +145,145,211,190,125,251,150, 23, 46, 92, 88,151,147,147,243, 99,249,237,122,189,254,137,152,152,152,167, 15, 31, 62,252, 33,165, +244, 82,101, 26,206,160,148,190,117,246,236,217,207,100, 89, 14,227, 56, 46,137, 82, 58,190,186,113,218,177,218,228, 87,214,111, + 89,181,216, 42, 72, 13,212, 74, 62,217,106,147, 95,189, 85, 77,198, 93,143,189, 70, 10,142,198,169, 18, 99,244,199,244,233,211, +117, 51,102,204,192,244,233,211, 43,244,111,219, 53, 40,165,125,167, 79,159,126,218,222,206,161,253,222,154, 10, 88, 81,114,160, + 10, 87,124, 81, 20, 13,239,190,251,238,195,177,177,177,233, 93,187,118,205,104,216,176,161,209,190, 77,175,215, 91,253,252,252, +172, 22,139, 69,147,158,158, 94,231,175,191,254,106, 40,203,114,197, 52, 82, 69,126,247,243,243,171,117,228,200,145,218, 43, 87, +174,124,224,232,209,163, 97,207, 62,251,108, 23,139,197, 2,171,213,138,203,151, 47,135, 45, 90,180, 72, 86,169, 84,185,132,144, + 63, 1,184,188,200, 10,130,144,112,225,194,133,198,237,219,183, 39,130, 32,148, 49, 85,142,127,171,213,106,164,165,165, 81, 89, +150, 15,185, 17,231,193, 35,135, 15, 71, 54,111,214, 12,150,188, 28, 88,243,115, 97,203,203,133,152,151, 11, 57, 63, 23, 92, 97, + 1,106,215, 82, 66,167,243,194,133,244, 12,148,196, 90, 37, 74,209,116, 53, 45, 47,191, 73,100,252,231,216, 21,225, 3, 42,216, + 74,187, 5, 1,148,118, 23, 62,244, 87, 22,246,253,145, 0,133,100,169,152, 50,250, 23,177, 90,173,242,160, 65,131, 14,115, 28, +231,241,141, 62,157, 33, 8,130, 60,122,244,232, 82,205,148,148,148,155, 41, 41, 41, 90,147,201,196, 25, 12,134,194,154, 58,206, + 45,196, 87, 97,157,205,102,131,213,106,133,201,100, 66, 70, 70,134,122,251,246,237,157, 18, 18, 18, 84,103,206,156, 65, 66, 66, + 66,171,117,235,214,189, 27, 21, 21,213,242,175,191,254,170,212,100,151, 55,109,178, 44,195,126, 29,164,148,130, 82,202, 3,192, +250, 53, 27,209,179,103, 79, 82, 80, 80,128, 13, 27, 54,212, 72, 55, 10,195,109,138, 32, 74, 58,235,158, 21, 69,239, 92, 84,231, +159, 54, 42, 62, 78, 76, 76,220,214,187,119,239,125, 65,245, 34,124, 0, 64,163, 50,212,225,169,183,161, 78,157, 58, 26, 0, 8, + 10, 10,138, 19, 4, 97, 1,128,142,149, 9, 14, 24, 48,224,161,186,117,235,198,110,217,178,229,120, 90, 90,218,190,242,230, 10, + 0,154, 52,105, 50,229,212,169, 83,189,148, 74,101,233,247,111, 73,113,111,165, 6,107,240,224,193, 77, 66, 66, 66,106,111,190, +224,139,124, 85, 36,100, 46, 23,148,215, 64,242,107,137, 36, 85, 52,234,213,251,171,118,100,100,100,171, 75,151, 46, 29,247,228, +228, 9, 33, 13,158,124,242,201, 77, 75,150, 44,137,234,217,179,167, 26, 64, 5,131, 21, 21, 21, 53,104,231,206,157, 67, 70,141, + 26,213,146, 16,210,143, 82,122,209, 93,253,196,196,196, 3, 0, 92,150, 81,120,194,164,133,116, 7,128,176,154,212,100,220,121, + 92,244, 14,100, 57,100,159,178, 80,124, 47,101,199,101,251,255,189,213,161,109, 86,137,110, 95, 0,214,114, 89,175,202,182,101, + 1,168,177,228,134,211, 12,150,205,102,219,126,249,242,229,182, 79, 62,249,100,150,163,185,114,124, 1, 12, 6,131,197,199,199, +167,240,240,225,195, 65,146, 36,237,118,227,120,139,119,238,220,185,107,222,188,121, 43,106,213,170, 37, 60,255,252,243,220,132, + 9, 19,246,221,184,113,131,222,184,113, 3,243,231,207,239,220,169, 83,167,125, 73, 73, 73, 82, 98, 98,226,139, 0,122,186, 18, + 52, 26,141, 95,189,246,218,107, 79,239,219,183, 79,107,181, 90,145,155,155, 91, 33,123, 37, 8, 2,120,158,199,130, 5, 11, 44, + 69, 69, 69,115, 93,105,138,162,248,205, 87, 95,125, 53,100,209,151,243,180, 10,193, 6, 99,110, 14,164,146, 7,111, 46,130, 65, +203, 33, 50,182, 14,114,211, 53, 88,190,229,128, 73, 20,197,175, 92,105, 42,205,133,227, 70,141, 24,190,113,251,239,187, 80,187, + 99,119,100,239,218, 90,161,141,186, 78, 61, 88,109, 54,124, 60, 53,158, 18, 83,238, 4, 87,154, 53,137,125,206, 42, 66,136,253, + 31,112,227,177, 99,199, 18, 98, 99, 99,123, 89,173, 86,167,251, 89,173, 86,200,178, 92,233, 8, 3, 87,154, 26,141, 38,181, 73, +147, 38,191, 55,106,212,104, 32, 0, 52,107,214,108, 13,199,113,221,171,210,188,157, 8,130,128, 73,147, 38, 97,198,140, 25,152, + 56,113, 34,128, 98,131,100,255, 1, 96,177, 88, 26,110,221,186, 85,125,224,192, 1,186,124,249,242,236,193,131, 7,251, 61,251, +236,179,126, 63,254,248,227,127, 0, 84,250,126, 9,130,128,241,227,199, 99,225,194,133, 24, 57,114,100,133,237, 60,207,203,105, +105,169,176, 88, 45,116,253,250,245,233, 10,133,194,255,139, 47,190,208,141, 29, 59,246,174, 43,246,191, 95,145, 36,233,253,142, +179,215,189, 9,232, 4, 81, 20,231,158, 56,113,100, 55, 0, 12, 29, 58,180,238,236,217,179,213, 0,240,249,204,207,149,148, 82, +165,125, 98,216,143, 62,250, 72, 59, 98,196,136,186,206, 52, 87,175, 94,157,243,209, 71, 31,213,126,229,149, 87,122,238,218,181, + 75, 75, 8,217,138,226, 26,146,108, 20,255,112, 12, 0,112,160, 78,157, 58,129,171, 86,173,138,236,209,163,135,151,171, 56,139, +138,138,190,253,250,235,175,195,103,237,245,198,230,162,129, 72,161, 67, 65,107, 81,212, 82, 21,160,153, 33, 25, 93, 2, 83,130, +126,252,241,199,197, 0,226,220, 61,119, 66, 72,244,224,193,131,215, 46, 89,178,164,225,240,225,195, 83, 15, 28, 56,144, 66, 8, +153, 82, 73,211, 27, 47,188,240, 66,210,178,101,203, 34,101, 89,222, 70, 8,233, 73, 41,173,214, 68,203, 12, 70, 53,113,235,182, + 79,213,104,123,219,112,106,176, 68, 81,124,153, 16, 18, 51,113,226,196,207,130,130,130, 26,196,199,199, 95,105,214,172, 89,145, +125,251,141, 27, 55, 12,123,246,236,137,200,207,207, 47, 16, 69,113, 24,165,244, 68,121, 13, 82,238,110,219,148,210, 36, 66,200, +103,173, 90,181,122,250,167,159,126,218,227,237,237,157,127,240,224, 65, 31, 31, 31,159,188, 51,103,206,120,241, 60,111,252,251, +239,191,177, 99,199,142,206, 0,190,172,236, 87, 82,121,205,244,244,244, 99, 13, 27, 54,252,124,236,216,177, 99, 63,252,240, 67, +173, 44,203, 48,153, 76, 40, 40, 40,128,217,108, 46, 45, 78, 94,185,114,165,197, 98,177, 44, 74, 75, 75,171, 48,130,176, 18,205, +132,208,208,208,133,115,191,152, 59,250,213,167,159, 84,211,220, 27,200,203, 48,129,152,139, 96,208,170, 17,221, 61, 24, 69, 55, + 8,150,236, 57, 98,189,105,181,173, 74, 75, 75,171, 96, 46,203,107,238, 79, 46,216,244,224, 3,117,119,124, 52, 53,254,209,119, +191,251, 21,178, 44,227,175,215,158, 71,206,222, 29,208, 55,107,129,135,254,202,130,213,106,197,196,241, 99,193, 27, 51,247, 29, + 76, 46,252,197,149,102, 77,224,168, 89, 50, 15,213,159, 37,127,139,132,144,209,132,144, 97, 81, 81, 81, 24, 53,106, 20, 6, 12, + 24, 80,102,223,181,107,215,226,235,175,191,134,197, 98, 25, 70, 8, 57, 74, 41, 93,224,137,102,195,134, 13,219, 69, 71, 71,243, + 65, 65, 65, 70, 0,224,121,190,251,233,211,167,219, 70, 69, 69, 85,169,121,155,206, 61,231,226,197,139, 62, 51,103,206, 36, 54, +155, 13, 83,166, 76,129,221, 88,218, 51, 78,239,191,255,126,144,183,183, 55,102,205,154,101,205,206,206,126,228,198,141, 27, 59, +231,205,155, 23,176,114,229,202,103, 80, 98,176,202,105, 94, 63,123,246,172,247,194,133, 11, 57, 81, 20, 49,123,246,236, 10, 25, +173,183,222,122, 11, 54,155, 0,165, 66,105,181,152, 45,209, 58,157,238,146,191,191,191, 78,150,101, 90, 89,156,183,227,220,255, +215, 53, 79,156, 56,177, 29,192,118,103,237,237,117,116, 38,147, 9,217,217,217,200,206,206,134,175,175, 47,224, 48,193,108,121, + 77,147,201,116,124,252,248,241,137,223,124,243, 77,207, 63,254,248,227,201,189,123,247,246,222,177, 99,135, 57, 41, 41, 73, 20, + 4,129, 6, 6, 6, 42, 58,118,236,168,237,221,187,183,151, 70,163,225,222,127,255,253,236, 79, 62,249, 36, 0,192, 13,103,154, +148, 82, 94,150,101,188,221, 41, 31,227,187, 41, 96,177, 20,255,160, 76, 79, 79,195,233,211,167,145,144,112, 14,132,144, 42, 7, + 71, 84,242,122,206,253,241,199, 31, 35,212,106, 53, 89,177, 98, 69,131, 21, 43, 86,140,113,245,250,253,240,195, 15,225, 43, 86, +172, 88, 64, 8,121,148, 82, 42,223,171,239, 59,211,188,251, 52,239, 55,170,172,193,162,148,158, 6,208,147, 16,210,113,248,240, +225,159, 70, 69, 69, 89, 68, 81, 84,110,219,182,173,105,118,118,182, 90, 20,197,241,148, 82,143,250, 43, 41,165, 11, 9, 33,232, +223,191,255,248, 70,141, 26,237, 60,122,244,104,203, 62,125,250,108, 91,187,118,109, 71, 81, 20,255, 62,117,234,212, 48, 0,115, + 1,124,233,174,230,213,171, 87,167,236,216,177,131, 28, 60,120,240,157,137, 19, 39,106,234,212,169, 67,252,252,252, 96, 50,153, +144,146,146, 66,151, 45, 91,102,177, 88, 44, 95,250,250,250,126,224,174,102,157, 58,117, 38,236, 61,114, 68,125,254,210,197, 23, + 95,236,245,152,182, 65,227, 38, 48, 16,160,240,230, 13,236,217,147,129,239, 14, 29, 55,103, 91,109,255,229,121,222,237,161,244, + 33,151,178,122,110, 95,181,100,203,238,223,127,127,116,218,140,207, 72,208,115,175,194, 43,172, 33,228,240, 7,176,103,247,110, +124,242,209, 20,202, 23,102,238, 21, 46,101, 62,230,174,102, 77, 67, 75,238, 3, 88, 50,255,212, 76, 89,150, 21, 64,113, 77,214, + 27,111,188, 1,199, 91,231,124,253,245,215, 48,153, 76, 0,160, 32,132,204, 36,132, 44,173,108,212, 95, 21,154,161,155, 54,109, + 10,117,212,140,138,138,114, 75,179,166,201,204,204,252,224,229,151, 95,158,161, 84, 42,125,101, 89,174, 80,156, 14, 0, 94, 94, + 94,200,207,207,135, 36, 73, 98,173, 90,181,206, 9,130, 0,133, 66, 1, 56,249, 28, 21, 21, 21,125, 48,114,228,200,143, 9, 33, + 78, 51, 29, 58,157, 46,105,255,254,253, 15, 60,251,236,179,220,170, 85,171, 46, 63,243,204, 51,154, 63,254,248, 67, 2, 80,173, + 57,141, 24,183, 31, 74, 41,138,138,138, 0,192,233,148, 8,148,210,100, 66,200,248,196,196, 68,237,200,145, 35,227,158,123,238, + 57,159,110,221,186, 25, 28,219,152, 76, 38,121,195,134, 13, 69, 11, 23, 46,188,177,119,239,222, 63, 95,122,233,165,129, 40,238, +222,168,148,244,244,244, 77,243,231,207,247,237,210,165, 75, 99, 73,146,144,157,157, 93, 90,131,149,154,154,138,164,164,164, 36, + 89,150,215,123,120, 58,175, 61,251,236,179,155,151, 45, 91, 22, 54,124,248,240,212,149, 43, 87,174, 7, 80, 89, 77,173, 97,208, +160, 65, 79, 44, 91,182, 44,108,196,136, 17,201, 0,198, 80, 54,195, 59,131, 81, 37,110,141, 84,163,148,238, 7,208,129, 16,210, +159,231,249,113,133,133,133,179, 41,165,235,170,123,208, 18,147,181,237,226,197,139,175, 0,104, 51,119,238,220,119, 1,164,160, + 56,173,215,163,178,122, 5, 23,122, 18,128, 15,131,131,131, 87,199,199,199,215,200,189, 8, 75,110,169,243, 90, 80, 80,208,202, + 79, 87,174,254,128, 82,218,154,163,114,109,153,112, 57, 28,199, 29,147, 36,233,147,212,212,212, 61,158,104,254, 92, 28,103,143, + 7, 27,120,247, 29, 63,226,217,207, 68,165, 46,188,208, 44,170,189, 52, 10,171, 74,178, 36,113,166,156,247, 15, 38, 21,222,149, + 23, 86,139,197, 34, 14, 28, 56,240, 91,142,227,100, 0,144, 36, 73, 97,177, 88, 94,132,155,255, 67,255,150,102,117,201,206,206, + 46, 4,240, 90, 85,109, 58,117,234,244,195,150, 45, 91,158,237,209,163,135,180,113,227,198,204,190,125,251, 42, 18, 19, 19, 41, +128, 29,149,181,191,122,245,170, 5, 78,238, 72, 96,167, 85,171, 86, 97, 75,151, 46, 61,250,202, 43,175,248, 44, 88,176,160,214, +225,195,135,165, 37, 75,150,228, 23, 22, 22,206,170,246,201, 48,106, 20, 82, 50, 40, 69,169, 84, 66,175,215,195,199,199, 7, 89, + 89, 89, 46, 71,122, 82, 74, 47, 17, 66,250,140, 27, 55,174,211,184,113,227,250,132,132,132, 68, 55,104,208,160, 1,199,113, 92, + 70, 70, 70, 86, 74, 74,202, 85,155,205,182, 19,192, 38, 0,170, 70,141, 26, 29, 3,176,220,153,222,153, 51,103, 62, 14, 10, 10, +218,181,102,205,154, 62, 26,141,166,153, 90,173,174, 37, 8, 2, 87, 84, 84,116,211,102,179,157,181, 88, 44, 27,211,211,211,255, +240,228,220, 40,165,231, 9, 33,221, 20, 10,197,166, 37, 75,150, 68,101,100,100,132,239,217,179,167, 95,249,118,113,113,113,203, +150, 45, 91, 22, 54,106,212,168, 75, 43, 86,172,240,168, 6,139,193,248, 95,197,163, 11, 89,137,169,170,182,177, 42,167,149, 4, +224,131,146, 71,141,144,150,150,118, 18,192,179, 53,165, 7, 0,233,233,233, 7, 0, 60, 14, 20,207,230,156, 82,124,209,188, 37, + 14, 38, 23,108, 4,176,209,101,195, 59, 8,165,212, 66, 8, 25, 87, 50,202, 9, 0,198,149,159, 54,129, 16,114,194,113,187,171, + 76,211,237,208,252, 55,201,201,201,249,207,119,223,125,119,248,245,215, 95,215, 12, 29, 58, 20,103,207,158,197,130, 5, 11, 44, + 57, 57, 57, 46,111,166,235,140,227,199,143, 39,181,106,213,170,245,226,197,139,223, 89,180,104, 81,127, 66, 8,187, 23,225, 93, +130,213,106,253,251,169,167,158,178,223, 63,149,218,111,157,100,159,182, 67, 20, 69,151, 63, 4, 75,178,183,187, 74, 30,174,168, +244, 86, 94,142,164,167,167, 39, 0, 72,112, 67,203,109, 74,178,109,125,174, 94,189, 58,237,252,249,243, 21,139, 67, 1,156, 62, +125,122,109,143, 30, 61,244, 9, 9, 9,239,121, 58,138,144,193,248, 95,133, 84, 99,226, 95,247,197,239,145,126, 95,166,233, 92, +147,184,184,241,114,101,219,239,132,102,117, 96,154, 76,147,105, 50, 77,166,121,247,104,222,111,252,235, 93, 49,140,123, 11,119, +178, 82,119,131, 38,131,193, 96, 48, 24,119, 19, 4, 64,165,243, 28,121,226, 76, 9, 33, 30,207,149,228, 74,159,105, 50, 77,166, +201, 52,153, 38,211,100,154,247,159,102, 37,218,131,203,109, 42, 51, 15, 36,165,116,145,167, 49,220, 13,176, 46, 66,166,201, 52, +153, 38,211,100,154, 76,147,105,222,113, 77, 39,199, 25,126,175, 26, 44,118, 67, 89, 6,131,193, 96, 48, 24,140, 26,134, 25, 44, + 6,131,193, 96, 48, 24,140, 26,198,173, 34,119,181, 90, 29, 67, 41,125,137, 16, 82,159, 16,114,141, 82,186,212,106,181, 86,184, +137,226,253,142, 90,173,142, 33,132,188, 68, 41,173, 79, 41,189, 70, 8,185,179,175, 3, 33,100, 74,124,241,108,210,147,227, 65, + 43,157, 29,147,193, 96, 48, 24, 12,198,191,142, 83,131, 21, 30, 26,250, 36,199,147,121, 54, 65,242,247,243,243,227,230,207,159, +207,245,235,215, 15, 27, 54,108,192,152, 55,222, 24, 19, 28, 28, 36,171, 20,138, 28, 42,139, 99,174,166,164,255,228,206,193, 6, + 13, 26,148, 41, 8,130,211, 89,173,121,158,191,190,118,237,218,122,213, 57, 17, 71,130,227,158,204, 20,108, 54,167,199, 81, 40, +148,215,211,143,253,236,214,113, 66, 67,131,158,228, 9, 55, 79,144,100,127,127,127,127,238,203, 47,191, 44,125, 29, 94,127,253, +245, 49, 33,193,193,178, 74,201,231,200, 18, 29,115, 53, 37,197,173,215,161, 70,112, 48, 87, 0, 48, 37, 30,100, 50, 33, 96, 38, +139,193, 96, 48, 24,140, 59,143, 83,131, 69, 56, 44, 88,241,205, 76,255, 27, 55,115,176,114,237, 54, 68, 69, 69,225,204,153, 51, +136,138,138, 66,199,118, 45,185,199, 59,180,226,120, 14,117, 38,125,185,124, 1, 0,183,140,133, 32, 8,117,215,172, 89, 3, 66, + 72,233,132,125,246, 73,251, 10, 10, 10,240,230,155,111, 58, 53, 69,158, 32,216,108,117,255,254,243, 87, 40,121, 2, 65,162, 16, + 68, 10, 65,148, 97,147, 40,242,141, 34,186,247,121,214,237,227,112,224, 22, 44,157, 55,211, 63, 55, 47, 15,191,110,222, 94,230, +117,232,254,112, 91,110,104,239,174,156, 94,167,170, 51,124,194,167,110,191, 14, 53,129,163,185,114, 92, 55,185,138,219,119, 48, + 24, 12, 6,131,193,248,119,112,106,176,172,130,228, 95,175,150, 47,190, 91,186, 20,227, 39,126,132,166, 77,155,130, 82, 10, 66, + 8,222,251,112, 42,230,124, 52, 17, 79,245,234, 12, 65,148,253,157,105, 84, 54,194,128, 16,130, 43, 87,174,192,100, 50,149,121, +196,196,196,184, 21,176,187,163, 22,148, 60,193,166,163, 5,176, 9, 50,108, 98,201, 67,144,209,173,185,183, 71,154,130, 36,251, +251,249, 24,176,248,155,175, 49,126,234,204, 50,175,195,132,247, 62,196, 87, 51, 62,192, 91,163,254, 15, 86, 65,242,119, 87,179, +186, 48, 77,166,201, 52,153, 38,211,100,154,247,171,230,253,134, 2, 0, 8, 33, 93, 0,236, 6, 0, 74,105,105,102, 68,176,154, + 17, 29, 90, 27, 95,207,250, 24, 20, 28,100, 74, 1, 10, 80, 89, 64,195, 0, 61, 76, 70,163,199, 7,148,101, 25, 54,155, 13,130, + 32, 96,209,162, 69, 40, 44, 44,132, 44,203,136,138,138, 2, 0,196,197,197, 57,102, 96,146, 19, 19, 19,195, 92,105,214,109, 49, + 32, 9, 20, 13, 28,215, 77,158,249, 45, 14, 28,253, 27,148, 2, 26,157, 30, 67,158, 27, 1, 73,166,176, 9,158,223,159,212,108, + 52, 34,208,160,196,156, 79, 62, 4,167, 84,129, 3, 1,199, 17,112, 68, 70,211, 16,127, 88,138,111, 78,252,175, 50, 57, 30,180, +124, 22,107,114, 60, 40, 38,255,235,161, 48, 24, 12, 6,131,113,203, 56,243, 34,247, 42,246, 12,214,238,202, 78,198,106, 54, 33, +196, 95,133,250, 6, 95,136,162,132,211,182, 64, 20, 24,205,176,217, 4, 36,217,108,184,116, 44, 3, 15, 61,244, 16, 6, 12, 24, + 32,217,108, 54,168, 84,170,188,181,107,215,214,170,234,128,178, 44, 67, 16, 4,216,108, 54, 20, 21, 21,225,199, 31,127,132, 66, +161,128, 44, 23, 27, 31,123, 9, 17,165, 20, 15, 63,252,112,131,170,180, 74,161,104,112,233,240,106,120,107,121,136, 50,133, 40, + 82, 8, 18, 32,201, 20, 70,171,140, 65, 47,127, 0, 81,150, 33,202, 50,172,110, 24,172, 50,134,173, 86, 91,244,127,119, 37, 0, + 67,233,118, 31, 13,197,248,135, 57,168,212, 26,168, 85, 60, 44, 38,207,141,230, 45, 67, 41,157, 76, 8, 88,145, 59,131,193, 96, + 48,238, 19, 42,245, 34,247, 42,101,186, 8, 9, 33, 93, 40,165,123,236,203, 86,179, 17,162, 32, 65, 16, 37,136,130,136,188, 66, + 19, 62,251,236, 51,104, 52, 26, 16, 66, 74,205,146, 44,203,156, 32, 8,232,221,187,183,211,238, 66, 59,146, 36,193,102,179,193, +102,179,129, 82, 10,158,231,209,190,125,251, 10,237, 14, 30, 60,232,209,137,120,107,121, 52,124,244,221, 10,235, 15,173,254, 24, +148, 82, 72, 82,241,195, 29,131,229,202,176,197,118, 25, 10,139, 85, 0,165, 0,104,113,134,235,142, 64, 41, 45,173,185, 98,153, + 43, 6,131,193, 96,220, 7,148,247, 34,247, 42,229,107,176,118, 3,255,116, 59, 89, 76, 38, 8,130, 8, 81,148, 32, 8,197,198, + 72,167,211,161,115,231,206, 0,202,102,155,182,109,219, 6,155,205,230,242,128,246,162,246, 18, 99, 6, 74, 41, 86,174, 92, 9, +165, 82, 89,250, 80,169, 84, 30,159,136, 40, 81,188, 59,225,109,168, 20, 28,148, 10,174,244, 89,162, 20,148, 22,155, 35, 73,166, +176, 8,238, 37,121,170, 50,108, 0, 96,181,216, 0, 74, 65, 65, 97, 42, 42,242, 56, 94, 6,131,193, 96, 48, 24,149, 82,198,139, +220,171,216, 13, 86, 87, 66, 72, 5,231, 97, 53, 21,149,100,175, 36, 8,162, 88,106,160,102,205,154, 5,133, 66, 1,181, 90, 13, +133, 66, 81,106,136,220, 49, 88,102,179, 25, 17, 17, 17,176, 90,173,136,138,138, 2,165, 20, 79, 63,253,116,133,118,135, 15, 31, +246,232, 68, 4,137, 98,250,167,179, 43,172,223,255,243, 71,104,209,172, 33,218, 61,224, 5,179, 77, 70,190, 81,116, 75,175, 42, +195, 6,160, 56,131, 5,128, 82,192, 84,116,135, 50, 88, 12, 6,131,193, 96,220, 63, 84,234, 69,238, 85, 20, 0, 80,146,138,171, +224, 22,205, 70, 35, 68, 65, 44, 53, 89, 86,171, 21,178, 44,227,141, 55,222,168, 32,180,115,231, 78, 88,173,214,170, 15,166, 80, + 92,127,245,213, 87,203, 76,145, 64, 41,197,234,213,171,161,209,104,202,100,177, 8,241,204,188, 10, 18, 69,252,251, 99,161, 86, +242,101, 12,145, 44, 3, 27, 54,253,134, 13,155,126, 43,109,203,243,202,235,238,232, 57, 51,108, 0, 96,181,150,100,176, 40, 69, + 81, 97,129, 71,177, 50, 24, 12, 6,131,193, 40,139, 51, 47,114,175, 82,229, 76,238,102, 83, 17, 4,135, 26, 44,155,205, 6, 81, + 20,177,104,209,162, 50,221,121, 74,165, 18, 28,199,185,204, 96,173, 89,179,166,204,228,158,113,113,113,148, 82,138, 33, 67,134, +148,118, 55,190,248,226,139, 24, 62,124,184,199, 6, 75,148, 40,166, 76,155, 85,170,211,251,209, 78,232,223,171, 11,228, 18, 47, +124,253,212, 90,143, 4,171, 50,108, 0, 96,181, 20,215, 96, 81, 0,198, 2,214, 69,200, 96, 48, 24, 12, 6,227, 31,156, 26, 44, +165,130,203,187,148,116,205, 55,192, 75, 11, 81,182, 64,148,139, 71,254, 73,146,132,225,195,135,151,182,123,230,153,103, 48,108, +216,176, 74, 13,150, 59,119,219,150,101, 25,251,247,239, 7, 33, 4, 28,199,149, 62,156,225, 76,179,200, 34,227,192, 79, 83, 33, + 83, 10,153, 2,114,201, 64, 4,171,232, 58,219, 88,153,166, 43,195,166, 49,248,129,231, 40, 8, 1, 46,165,102, 66,193,115,121, +158,158,187,167, 48, 77,166,201, 52,153, 38,211,100,154,247,171,230,253,134, 83,131, 69, 37, 58,102,225,198,131,243, 4, 73,246, +181,175,139,142,142,134,205,102,195,214,173, 91, 75,141, 7,207,243,165, 93,122,238,212, 96,149, 35,185,115,231,206, 85, 77,197, +144,236,150, 10, 65,114,155,110, 79, 58,215, 33,110,234, 56,224,202,176, 45,217,251,207, 45, 8, 21, 28,151, 7, 74,199,120,122, + 12, 6,131,193, 96, 48, 24,247, 39, 78, 13, 86,114, 90,218,114, 0,203, 29,215,245,233,211,167,240,137, 39,158,208,137,162, 8, +171,213, 10,155,205, 6,171,213, 90,250,208,104, 52, 30,205,184,233,206, 36,162,238,112,253,228,218, 26,209, 41,197, 13,195,150, +158,158, 94,179,199,100, 48, 24, 12, 6,131,113,223, 80,101, 13, 86,121,140, 70,163, 31, 33, 68,145,158,158, 94, 97,219,181,107, +215, 0,192,189, 33,122,119, 57, 53,110,216, 24, 12, 6,131,193, 96,252, 79,225,145,193,218,189,123,183,136,251,196, 68, 49, 24, + 12, 6,131,193, 96,220, 46,156, 87,147, 51, 24, 12, 6,131,193, 96, 48,170,235,122,100, 60, 0, 0, 32, 0, 73, 68, 65, 84, 5, + 1,208,188,178, 13,158,140, 14, 32,132, 84,170, 81, 21,174,244,153, 38,211,100,154, 76,147,105, 50, 77,166,121,255,105,186,210, +118,220,159, 16, 50,156, 82,186,200,211, 24,238, 6,200,237,188, 63,240,189, 50, 52,148,105, 50, 77,166,201, 52,153, 38,211,100, +154,119, 86,211,201,113,238, 89,131,197,186, 8, 61,128,196,141, 80,222,233, 24, 24, 12, 6,131,193, 96,220,253,120, 84,228,126, + 43, 76,153, 50,229,150,204,220,228,201,147,229,154,138,197, 83, 72,200,224, 72, 94,129,207, 90,199,182,232,197,133, 13,218, 76, + 37, 50,129,166,174,190,116,167,226,185,215,137, 53,144, 0,129, 40,251,250, 27,180,253, 27,120, 43, 30,188,152,109,252,195,104, +147, 55, 80, 34,172, 59,147, 79,115,238,116,124, 12, 6,131,193, 96,220, 42,183,108,176,218,182,109,219, 80,150,229,255, 3,240, + 28,165,244,248,209,163, 71, 7, 87, 71,103,231,206,157,193,130, 32,180, 21, 69,177, 53,128,214, 58,189,161,149,197, 98,190, 78, + 64, 95,232,213,171,215, 49, 79,245,226,226,226, 54, 1,232, 93,217, 54, 66,200,148, 35, 71,142,196,187,171,197, 43,240,217,111, +235,150,244,207, 48,234,176, 39, 49,105,192,210,207, 39, 2,192, 64, 79, 99,250, 55, 8, 10, 10,210, 1,120,129,227,184, 71, 52, + 26, 77, 99,179,217,124, 21,192, 73, 66,200,130,212,212,212,138,243,107,184, 1, 33,132,139, 49, 40, 95,214,235,244, 61, 3,189, +213,173,211,114,242,211,204, 54,121,159, 76,108, 51, 61, 53, 68,145,132,168, 27, 53,240,219,243,206,160,142, 81, 45,163, 31,128, +156,116, 28,230,220,172, 39, 18,211,140, 79,124,115,232,250,219,145,132,180,190, 68,105,213, 55,181, 44, 33, 52, 52, 52, 80,146, + 36, 69,122,122,122, 10, 0, 68, 68, 68,248, 88, 44,150, 54, 0,162, 0,252,165,209,104,142, 92,190,124, 57,223,243, 51,254,135, +123, 69, 51, 36, 36, 36, 72,150,229, 87,234,213,171,215, 39, 51, 51,115, 19,199,113, 75,170,251,126, 51,254,119, 8,127,112,216, +108,194,145, 0, 79,246,161, 50,205,190,122,240,135,183,111, 87, 76, 12,198,253, 66,181, 12, 86,116,116,180,151, 90,173, 30,194, +113,220, 11, 45,227, 58,116,124, 98,232, 11, 68, 32,122,124, 50,246, 25,143,167,112, 56,122,244,168, 38, 35, 35,227,163,134, 77, +227,254,211,181, 71,127,174, 89, 84, 83, 4,212,246,135,204,169,177,108,235,133,218,187,191,121,113, 62,128, 14,213, 8,179,247, + 79,155, 15, 33, 35, 87, 2, 33, 0, 33, 0, 71,128, 66,179,140,247, 94,234, 56, 25, 64,188, 59, 34, 36,110,132, 50, 38, 58,170, +215,133,155, 90,108, 61, 37, 0, 8,130,222,191, 94, 47, 18, 55, 66, 73, 19,191, 17,170, 17,215,109, 35, 48, 48,176,117,237,218, +181,191,122,241,197, 23,253, 27, 55,110, 28,168, 86,171,245,102,179,249,129,164,164,164,134,115,230,204,121, 44, 48, 48,112, 70, + 70, 70,198,175,158,104, 70,249,105, 27,244,106, 26,246,211,132, 81,255,215,174,113, 68, 40, 20,214, 34, 80, 75, 97,104,210,149, +191, 59, 76, 91,242,235,171, 49,190,202,167, 79,231, 9, 59,220,213,211,122,171,222,127,111,248,211, 81,145,222, 20,214, 51,251, +161,224, 41,180,222,254,104,215,128, 7, 1,109, 22,255,123,250,123, 0, 38,187,210, 9, 10, 10,154, 10,224, 61, 0, 36, 48, 48, +240, 39,165, 82,121,248,193, 7, 31,108,250,212, 83, 79,145, 22, 45, 90,224,216,177, 99,205, 54,108,216, 48,184, 65,131, 6,231, +172, 86,235,161,218,181,107, 31, 63,115,230,140, 91,183, 26,136,142,142, 86,221,184,113,163,149, 90,173,110,127, 55,107, 6, 5, + 5,233,172, 86,235,255,133,132,132, 12,127,226,137, 39, 90,244,235,215,143, 52,105,210, 4,231,206,157,139,219,178,101,203,228, + 86,173, 90,157, 76, 77, 77, 93,164, 86,171,191, 79, 79, 79,119,107, 18,224,161,143,146,115, 63,239,160, 77,171,187,221, 17, 66, +136, 31, 0, 45,165, 52,195,141,182,245, 0,232, 41,165,151,255,109,205,219, 65, 72, 72,200, 89, 66, 72,173,146, 56,236,241,148, +249,219,241, 89,146,164,162,164,164,164, 70, 85,105, 54,104,208,160,153, 44,203,188,227, 58,165,210,121,213,130, 40,138,114, 74, + 74,202,153,170, 52, 9, 71, 2, 22,125, 53,219, 87,193, 1, 18, 45,121, 8, 20, 18,165,144,101, 64,146, 1, 73,150, 33, 74, 20, + 50,149, 33,136, 20, 83, 38,191,231,226,236, 25, 12, 6,224,129,193, 34,132,144,184,184,184,206,148,210, 23,194, 35, 34,135, 12, +122,118,132, 46,252,129,230, 40,148,125,112, 37, 91,198,209, 93, 43, 0, 96,149, 39, 7,223,182,109, 91, 27, 74,241,221,168,137, +179,155,182,140,109,139, 83,105, 34, 14,164, 72, 40,186, 36, 65,193,155, 32,203, 0,165,212,226,233, 73,217, 73,205, 17,177,239, +156, 21, 60, 7,112, 28,192,115, 4,188,135,247,233,166,137,223, 8, 92,216,160,205,191, 29, 78, 27, 0,109, 61, 24,115,210, 96, +204,201,220, 66, 83,214,220, 85,230, 42, 56, 56,184,123, 68, 68,196, 23,111,190,249,102,253,140,140,140, 90,135, 14, 29,130, 70, +163,129,191,191,191, 34, 32, 32,160,233,196,137, 19,243,166, 77,155, 54,174, 94,189,122,199, 50, 51, 51,175,186,163, 25,109, 80, + 71,117,105, 29,253,199,164,169,241,190,150,196, 45,200,253,229, 23,240,156, 12,149,151, 1,129, 58, 61,230,246, 9,175, 53,113, + 91,202,175, 45,116,186,168,147, 38, 83,154, 59,154,161,117,107,245,136,108,220, 4,185, 27, 23,224, 98,174, 5, 9,153, 22, 60, +209,165, 13, 34,253,117,136, 21, 37,212,214, 42,186,195,133,193, 10, 9, 9,241, 7, 48,225,234,213,171,156, 74,165, 34, 13, 27, + 54,124,122,209,162, 69,180, 89,179,102,165,119,221,238,208,161, 3, 58,116,232, 64, 10, 11, 11,163, 14, 28, 56, 16,181,118,237, + 90, 33, 56, 56, 56, 49, 45, 45,109,153, 51,221,136,136, 70,201, 22,139, 57, 84,163,213,153,231,204,153,243,223, 7, 31,124, 80, + 86,171,213,184, 21, 77, 0, 8, 12, 12,252, 49, 36, 36, 68, 63,105,210,164,236,182,109,219,210,154,208,108,216,176,225,111,157, + 58,117,234,214,163, 71, 15,197,195, 15, 63,140,160,160,160,210,109, 1, 1, 1,232,212,169, 19, 73, 73, 73,105,185,111,223,190, + 5,191,253,246,219,188,134, 13, 27,238,186,114,229, 74,143,170, 52, 75,104,114,139,219, 29,225, 1, 76, 39,132, 44,166,148, 30, +112,214,136, 16,210, 26,192, 51, 0, 62,187, 67,154, 85,162,211,233, 50,205,102,115, 93, 0,208,106,181,215, 77, 38, 83, 61, 87, +251, 16, 66, 12,115,230,204,169,171, 82,169,192,113, 28, 36, 73,130, 36, 73,144,101, 25,148,210,210,103,251, 32,163,169, 83,167, + 74,174, 52,101, 89,230,102,207,158,173,212,233,116, 0, 0, 65, 16,202, 60,219,177, 47, 79,157, 58,213,173,239, 40,157,154,199, +135, 99,135,183,227, 36,171,182,202,227,243,106,243,203,227,190, 56,236,142, 38,131,193,240,192, 96,197,198,198,110,238, 53,112, + 88,207, 7, 59,247,128,168,170,139,115,215, 9, 82,174, 80, 40,120, 17, 28,100, 92,254,115, 29,229, 56,238,123,199,125,170, 26, + 97,176,121,243,230,183, 27, 68,182,154,241, 94,252,116,254, 84,166, 26,223,237, 51, 65,178,228,193,148,125, 9, 69,215, 47,160, +224,218, 89,228,166,157, 58,201,113, 92,188,187,154,229,161, 20,144, 41, 5,161, 4,144, 1,128, 22,167,177, 42,180,171, 90,147, + 74,100, 66,226,111,223, 13,136,237,255, 46, 46,236, 91, 14, 80,110,130,235, 99,215,252,232, 10,103,154, 65, 65, 65,143,133,135, +135,207, 28, 49, 98, 68,200,137, 19, 39,124,140, 70, 99,209,225,195,135,247,100,100,100,212, 11, 8, 8, 72,121,234,169,167, 30, +170, 91,183,110,221,206,157, 59,235,183,109,219,246, 62,128, 87, 92,105, 54,247, 82,199,116,106,215, 60,225,227,153,179,188,178, +127,157, 7,235,149, 19, 72,200, 52,227, 68,150,137, 6,251,228,145, 39,155,251,195, 75,173,192,240,246,117, 13,255,217,112,245, + 83, 0,207,186,115,238, 13,131,235, 53, 18, 76, 38,152, 77, 54,108,190,144,103, 74,200,201,171,203,121,167,102,141, 27,208, 70, +203,103,167,163,190,183,242, 1, 79,206, 29, 40,206, 2,232,245,250, 74,183,249,250,250,162, 67,135, 14,104,212,168,145,242,153, +103,158,121, 16,192, 50,103,154, 54,155, 45, 48, 45, 45, 29,141,155, 52,214, 60,242,200, 35,132,231,121, 88,173, 21,123, 43, 61, +209, 4, 0, 47, 47,175,126,173, 91,183, 86,252,240,195, 15,185, 87,175, 94, 61, 61,104,208,160, 52,189, 94, 95,230,130,170,215, +235,209,160, 65, 3,140, 30, 61, 90,249,234,171,175,186,212,172, 87,175,222, 99,203,151, 47, 7, 33,164,244,226, 93,158,176,176, + 48,212,175, 95, 31,189,123,247, 86, 12, 30, 60,248, 49,199,109,229, 53,135, 62, 74,206,161,196, 60, 13,125,148, 84, 57,180,184, +100,251,249,242,153,172,242,154,148,210, 27,132,144,133, 0,214, 16, 66,134, 84,102,136, 8, 33, 15, 3,248, 5, 64, 47, 74,233, +245,242,219,171,210, 84,171,213, 42,155,205,230, 15,148, 53, 62,158,106, 58,196, 66, 19, 19, 19, 17, 23, 23, 7,199,103,179,217, + 92,106,132, 8, 33,117, 43,219,183, 50, 77,158,231,241,245,215, 95,131,227, 56,168, 84, 42, 40,149, 74,168, 84,170, 10,143,216, +216,216,202, 36, 43,213, 84, 42,149,248,250,235,175, 33, 73, 18,119,245,234,213, 23, 36, 73,234,111, 54,155,235,234,116,186, 44, +149, 74,181,177, 75,151, 46, 75, 53, 26,141,232,137, 38,199, 3,156,100,213,238,216,182,222,171,210,157, 0, 88, 44, 22,244,237, +255, 36, 56, 82,177,148,246,223,252,174, 99,154,247,183,166, 11,218, 2,168,227,176,108, 5, 96,255,181,154,141,226,105,167,106, +151, 91,239,216,206,254,156, 85,178,190, 78,201,126,212, 65, 55, 11,192,159, 53, 21,176, 2, 40,254, 98,161,148, 18,251,179,147, +182, 62,169, 38, 63, 20, 94, 9,128,130,147,161,224, 9, 20, 60, 0, 16,220, 72, 61, 11,107,209,141,253, 71,142, 28,185,226,206, + 65,183,110,221,218, 33,188, 89,187, 79,227, 63,254,156, 91,186,215,132, 60,163, 25,217,103,214, 35,227,240,183, 25,178,104, 91, +207,113,220, 17,142,227,142,182,110,217,226, 92, 96, 96,160,203, 95,118,206,144,105,113,138,187,212, 88,201, 0,129,231,211, 82, +208,212,213,151,130,186,124, 80,102,185,186, 49,213, 52, 33, 33, 33,189, 34, 35, 35,167,143, 24, 49, 34,236,232,209,163,222, 5, + 5, 5, 89, 59,118,236, 56,103,179,217,142,113, 28, 55, 55, 61, 61,189,203,242,229,203,245,227,199,143,239,209,164, 73,147, 38, +191,253,246,155,209,149,102,180,151,170,229,176,231,159, 74,232, 63,124,140,246,244,234,249,208,156, 59,138, 69,103,114,164, 35, +153,166,247,205,133,226, 23, 58,189,226,225, 92,179,184,253,157, 78,129, 92,160,183, 18,161,190,170,174,238,198,171, 86,106, 20, + 84,161,133,213, 34,162,200, 42, 91,207,100,209,162,183,187, 54,183, 81,175, 0, 45, 0, 40,120,206,165,233, 79, 77, 77,205, 9, + 10, 10,250, 52, 60, 60,252, 3, 66, 8,237,220,185,243,153,184,184,184, 34, 89,150, 97, 50,153, 96,179,217,160, 84, 42, 97, 50, +153,144,148,148,132, 67,135, 14,193,215,215,215,149,108, 25,114,115,115, 17, 30, 30, 14,189, 94,127,203,154,178, 44,147, 5, 11, + 22,104, 79,159, 62,173, 93,179,102, 77,173,183,223,126, 59, 47, 54, 54,246,236,128, 1, 3, 82,106,213,170,101, 59,126,252, 56, + 18, 18, 18,144,147,147,131,118,237,218,185,165,105,179,217,160, 80, 40, 96, 50,153,160,209,104,160, 80, 40, 32,138, 34,100, 89, + 46, 53, 93,133,133,133,184,121,243, 38,148, 74,165,203, 27,177,219,205,210,208, 71, 9,253,249,151, 63,174, 23,247, 13,229, 11, +176,229, 9, 16,243, 4, 8,121, 2,132, 92, 97,232,155,179, 90,254,188,195,233,119, 68, 5, 40,165, 7, 9, 33, 67, 0,252, 82, +222,100, 57, 24,161, 33,148,210,227,158,106,218,108,182,253,118,227,163,213,106,235, 18, 82,108, 12, 53, 26,141, 96,177, 88,186, +121,162, 9, 0,137,137,137,104,221,186, 53, 95,162, 73,237,207, 37, 15,143, 32,132,128,231,121, 40,149, 74,240, 60,143,214,173, + 91,163, 95,191,126,104,210,164, 9, 82, 83, 83,177,123,247,110, 92,184,112, 1, 42,149,170, 76,215,161, 43,148, 74, 37, 56,142, +227,206,159, 63,191,244,145, 71, 30,137, 28, 51,102,140,186, 65,131, 6, 56,119,238, 92,253, 5, 11, 22, 12,219,185,115,103,151, +129, 3, 7, 14, 3, 32, 86,213,125,232, 8, 95, 98,154, 44, 22, 11,206,158, 61, 91,117, 91, 79,187, 0, 24, 12, 15,112,225, 69, +234, 16, 66, 54,218, 23, 40,165,125,237,203, 19, 39, 78,124,111,250,244,233,167, 9, 33, 27, 29,215, 59,182,115,124, 46, 57,214, + 70, 74,105,223,119,223,125, 55,102,198,140, 25,211,236,109,107,242,124,220,206, 96,241, 60, 63,232,212,214, 47, 14, 62, 96,163, + 97,245, 98,250,160,248, 59,135, 0,160, 72, 58,190, 21,178, 44, 47,115, 71, 39, 33, 33, 65, 43,202, 88, 58,254,189,169,220, 55, +187, 76,200,188,150,142,244, 61,159,193,116,253,236,119, 58,157,238,157, 71,122,246,189,165, 98, 95, 0,136,139,139,139,241,171, + 93, 31, 22, 27, 45, 49, 88,128,163,201,186, 95, 8, 10, 10,234, 23, 25, 25, 57,117,253,250,245, 97, 38,147,201,251,192,129, 3, +185,219,183,111,191,104,179,217,150,100,100,100,252, 8, 0,132,144,245, 10,133,226, 35, 74, 41, 12, 6,131,130,231,121,157,253, +191,183, 50,205,230,190,170,214, 47,190,240,220,254,183,231, 46,214, 94, 60,117, 28,243, 86,109,134,134,218,164, 51, 55,172, 3, + 78, 21, 8,246,127,218,223,123, 7,235,211, 40, 69,168,146, 35,168,165, 87,214,239, 64,136, 54,129, 82,179,171,152, 3, 66,195, + 56, 49, 56, 2,251,140, 22, 24,124, 84,106, 0, 8,110, 28,205, 31,207, 23,113,224,240, 95,208,106,253, 85,238,156,123,122,122, +250,164,224,224,224,240,237,219,183,115, 70,163,177,232,196,137, 19,168, 93,187, 54,234,214,173, 11, 31, 31, 31,156, 59,119, 14, + 59,118,236,192,249,243,231, 65, 41,117,154, 37,112, 70,102,102, 38,242,243,243,107, 68, 83, 20, 69, 2, 0, 49, 49, 49,136,137, +137, 81,167,165,165,213,221,184,113,163,255,180,105,211,174, 5, 6, 6,110, 51,153,254, 41,143, 42,223,221,227, 12,139,165,184, +231,220,108, 54,195, 98,177, 64,165, 82, 65,171,213, 66,165, 82, 33, 63, 63, 31,153,153,153, 40, 40, 40, 0, 0,248,249,249,149, +182,119, 11, 73, 6, 14,118, 60, 82, 97,125,240, 11,149,102,111, 92, 65, 41, 61, 80, 98,178,126, 39,132,216,223,223,204,146,231, + 74, 51, 91,110,106,150, 46, 91, 44, 22,199, 44,147,178, 58,154,113,113,113,118,141, 50,223, 18, 90,173,246,186, 61,115,165,213, +106, 43,100,196, 42,195,222, 45,168, 86,171, 17, 19, 19,131,119,222,121, 7,231,254,159,189,243, 14,107,234,236,255,240,231, 57, +217, 9,132, 61, 19, 16, 81,134, 32, 14,100, 41,136,162,213,186, 71,219, 87,235,104,107,109, 93,125,171,109,181,173,117,212, 45, +142,106, 85,180,237,107,171,117,212,209,170,191,214,186, 87, 5, 7, 78,192, 45, 42, 42,136, 97, 35, 35, 64, 32, 36, 57,207,239, + 15, 70,145, 50,194,176, 86,123,238,235,202, 5,156,156,220,231, 9,129,228,115,190,207, 56,241,241, 56,115,230, 12,236,236,236, +208,167, 79, 31,240,249,124, 36, 39, 39,131, 97, 24,163, 2,150, 80, 40,132, 78,167,195,189,123,247,198,244,236,217,179, 85, 68, + 68,132, 40, 49, 49, 17,241,241,241, 48, 51, 51,195,194,133, 11,197,211,167, 79,119, 58,114,228,200,184,142, 29, 59,126,103,236, +243,230,145,178,238,191,129, 67,134,255,229, 62, 11,115, 19,193,214,205, 27, 69, 21,193,139,225, 22,246,225,120,206, 84, 15, 65, + 21,193,105,201,146, 37, 3,171,111,171, 41, 48, 85,223,190,116,233,210,240, 42, 63, 55,235, 44,246,202,127,151,138,179,191,218, + 96, 89,214,209,194, 86,105, 53, 97, 84, 31,176, 44,160,103, 1,189,129, 66, 83, 84,136,180,248,147, 69, 90,173,118,183, 49, 7, +204,206,206, 94,248,238,199, 75,221, 46, 63,226, 35, 53, 71,139,199, 39, 22,208,146,172,248, 55, 6, 13, 26,244,254, 43,175,188, +210, 44,225,202,210, 70, 17,249,229,242,141,184,244, 64, 11,150,254, 89,201, 50,176,101,223,191, 12, 40,149, 74,119, 75, 75,203, + 21,123,247,238,109, 41, 18,137,228, 9, 9, 9,134,168,168,168, 20,157, 78,247,109, 69,184, 2, 0,133, 66, 49,186, 93,187,118, + 58, 19, 19, 19,104, 52,154, 98,157, 78, 87, 80, 91,184,242,145, 74,157, 58,181,111,119,106,234,154, 31, 36,197, 90, 45,242, 52, + 37,176,117,116, 52, 92,203, 46, 26,122, 77, 93, 82,121, 70,208, 86, 46, 8,246,247, 80, 42, 25,169, 28, 0,160,202,215,166, 24, + 19,174, 0,192, 68,110,193, 56,249,135,193,255,163,181,208, 48,230, 20, 0, 44,236, 21, 76,143, 15, 22,163,239,234, 40,148,240, +228, 13,137,192, 26, 15, 15,143,202,113, 87,217,217,217,184,117,235, 22,242,242,242, 16, 17, 17,129,248,248,248,202, 15,221,226, + 98,163,154,247, 23,154,195,201,178,236, 83,159,158, 74,165, 18,147, 38, 77, 18,104, 52, 26,147,170,225,170, 33, 78,173, 86, 91, +217, 14, 74, 41,180, 90, 45,242,242,242,160,213,106,113,239,222,189,202,112, 5, 0, 6,131,161,198,174,206,218, 27,156, 87,115, +185, 75,151,221,232,113,135,229,129, 71, 88,101,220,145, 61, 26, 25,174, 42, 40, 15, 62, 70, 87,127,234, 35, 38, 38, 6,168,161, + 90,165,209,104,236, 41,165, 36, 38, 38, 6,198,140,191,170,128, 82, 10,145, 72,132,193,131, 7,227,246,237,219, 80,169, 84,224, +241,120, 40, 41, 41, 65, 73, 73, 9, 58,117,234, 84, 89,193,106, 8,148,210,126,147, 39, 79,150, 60,124,248, 16,217,217,217, 96, + 24, 6,122,189, 30, 6,131, 1,227,198,141,147,104,181,218,190, 13,241,241,120, 4,189,198, 44,187,216,243,189,213, 81,213,111, +185,121,133, 58,177, 88,252,231,190, 92,194,226,120,198,212,148, 69, 8, 33,227,171,124,191,191,250,253, 13,161,122,133,171,130, + 25, 51,102,248, 0, 16,215,240,144, 70, 83,249,223, 82, 71,215, 32,252,252,252,124, 45,108,148, 39,103,132,255, 96,250,235, 85, + 30,158,164,222, 65,114,236, 94,232, 89, 32,245,206, 89, 80,131,238,255,110,222,188, 89, 88,219,227, 43, 56,114,228,136,135,179, +167,255, 71, 29,253,130,112,228,122, 9,158, 92,219, 9,109,206,195,239, 6, 12, 24,240, 91,115, 60, 25, 63, 63, 63, 31, 75,107, +199,200,153, 75,127,176,218,119, 67,128, 71, 15,239, 32, 50, 98, 48,142, 46,127, 5,135,151,189,130, 3, 75,122,226,247,197, 61, + 1,224, 96, 67,188, 97,132,240, 93, 45, 75,209,219,155, 64, 97, 83, 4, 18, 70,254,182,245,195,106, 67,165, 82,221, 3,176,229, +135, 31,126, 80,159, 57,115,198, 48,113,226,196,187,121,121,121,139, 82, 82, 82,118, 86,236, 83, 62,240,253,211, 5, 11, 22,120, + 26, 12, 6,156, 58,117,234, 30,143,199,171,181,127,249,134, 70,243, 56,238,218,205,111,207,108,223,128,184,203,151,240,211,156, +169,250,232,235,183, 6,221, 84,235,255, 12, 87,166, 34,175, 46, 62,238,251,255, 59,229,191, 12, 17,155, 32, 62,171, 4,169, 5, +186, 19, 70,183, 91, 93,164, 19,136,165, 48,117,104,137, 36, 13, 43, 84, 42,149, 23, 30,231,106,132, 12,143, 15,134, 47,196,131, +156,146, 6,125,136,179,236, 95,243, 88,245,208, 2,160,222, 46,178,250,104,138,179,162,130, 85, 29,157, 78,247,151,237,198, 58, +171, 6,172,170,212, 52, 22,139,101,217,134, 5,172,210,252,154, 95, 3,109,227, 3, 86, 85, 75,249, 13, 77, 9, 87, 64, 89,240, +169,168, 40,137,197,226,202,174, 54, 99,171, 76,213,241,243,243,107,210,253, 85, 33,132,128,101, 89, 8, 4, 2,184,187,187, 35, + 47, 47, 15,102,102,102,144,203,229, 48, 53, 53,133, 88, 44,134,189,189, 61, 68, 34, 17, 24,134, 1, 99,100,112,209,233,116,208, +106,181, 14, 78, 78, 78, 40, 40, 40,128, 68, 34,169,188,137, 68, 34,120,122,122,162,160,160,160, 65,149,198,134,132, 38, 30,151, +175, 56,158, 49, 53,101,145,170, 43,185, 55, 71, 55, 94, 77,142,242,110, 66,105, 83,221, 85,169, 55, 40, 84,132,171,233,139,191, + 55,219, 21,203, 32, 55, 53, 30, 73,135,103,170, 13,165, 69, 57, 44,171,115,201,185,127, 6,168, 50, 32,183, 46, 88,150, 13, 8, +238, 57,132,137,188,173, 69,169, 58, 5,249, 55,126, 78, 20,139,197, 95, 52,241, 57, 84,180,211,199,210,218, 49,242,139, 37, 63, + 88,253,122,149,143, 39, 41,119,112,255,224,140, 60, 67,105, 81,207,152,152,152, 6,175,163, 53,129, 16,193,122, 74,117, 67,236, +236,134, 58, 59,219, 47, 31,251,186, 28,221,122, 73, 97, 38, 52,195,130,175,152,219,246, 33,228,211,244,179,116, 31,241, 35, 2, + 26, 67,159,203,140,194, 27, 55,110, 44,118,119,119,103,244,122,253,216,210,210,210,121, 41, 41, 41,149, 85, 68,133, 66,209,219, +197,197,101,249,194,133, 11,157, 18, 19, 19, 69,231,207,159,127, 18, 23, 23,199, 26, 12,134,165,117, 57,175,229,149,124,222, 78, + 46,228,185, 57, 43, 38, 39, 60,126, 60,248,122,190,254,112,197,125,237, 76, 68, 62, 93,125,189,206, 46,156, 63, 67, 94,122,126, + 15, 10,211, 30, 99,221,249,180,124,214,160,155, 97, 76,123,149, 74,165, 85, 75, 33, 48, 99,220, 24, 86,173, 86, 67, 38, 18,178, +143,227,239,243,222,238,213,205,176,108,250, 52, 38, 45, 45, 13, 69,133,133, 60,165, 82,105,165, 82,169,158, 24,227,172, 41, 80, +212, 84, 5,106, 80,192,168,129,166, 56,171, 87,176, 42,168, 41, 96, 25,235,172,218, 37, 86,149,154,126, 31, 6,131,161, 97, 93, +132,250, 90, 2, 86,105,102,211, 82, 42,240,136, 16,210,162,226,251, 38,186, 0, 0,197,197,197,118, 85,186, 6,235, 60, 81,172, +143,242, 10, 86,163,239,175, 78, 69, 5, 43, 33, 33, 1,182,182,182,208,235,245, 48, 49, 49,129, 84, 42,133, 84, 42,133, 70,163, +129, 72, 36, 2,143,199,171, 95, 86, 5,177, 88,156, 22, 31, 31,239, 98,105,105, 9,131,193,240, 84,200,122,248,240, 33,204,205, +205, 51,140, 29,127, 5, 0, 60, 30,112,124,243,244, 26,103, 17, 90,152,155, 60, 37,226, 53, 83,181,144,131,163,177, 84, 84,159, +170,142,165,250,226,139, 47, 26,189,118,200, 23, 95,124, 49,179,169, 85,177,218,224, 3,127, 38,198,234,111, 78,126,126,126,190, + 22,214,138,147,159, 46, 92,111,182,253, 50,131,188,212,219, 72, 57, 62, 59,143, 45, 45,234,201, 48, 76,106,114,244,247,187, 1, + 20,197,198,198, 70, 25,115, 48,131,193,208,169,141,135, 7,118,221,208,163, 56,237, 42, 24, 66, 55,247,234,213,171,222, 65,215, +245, 81, 17,174, 62, 15,255,222,106, 87, 28, 31, 57,101, 33, 48,143,109, 68,184, 26, 37, 22,187, 9, 24,102,185, 91,151, 78, 3, + 70,216,219, 20,244,119,147, 89,244,119, 19,131,119,254, 55,236, 83,100,224,137,205, 31,152,180, 74,233, 22,189, 55,255,247, 22, +175,240,159, 12,238,214,209, 76,209,157,127, 64, 71, 13,159,103,158,162,127,251,224,247,123,247,238, 45,116,112,112,248, 53, 45, + 45,173,114,116,170,147,147, 83,191,150, 45, 91,134, 47, 88,176,160,101,114,114,178,252,202,149, 43,249,187,119,239,126,200, 48, +204,130,212,212,212,122,207,238,175,171, 75,167,249,152,138, 54,220, 40,208,199, 87,108,107,107, 34,236, 48,230,237, 17,231,122, +141,120, 87,242, 32,114, 11,172, 30,223,196,234,139, 25,134,199,121,197, 35,111, 23,209,180,250,156, 74,165,210, 74, 36, 18,237, +138,216,179,231, 94,187,118,237, 72, 81, 81, 17,116, 58, 29, 50, 51, 51,241,213,182, 93, 55, 88,150,133,165,165, 37, 78,156, 56, +193,126,244,209, 71,187,148, 74,229, 48, 99, 66, 22,203,178,149, 31, 86, 21, 84,175, 2, 73,165,210,134, 5,140,242,199, 84, 13, + 48, 77,113,214, 22,176,170, 87,182, 26,232, 4,128,202,193,237,213,183, 87,192,227,241,192,178,108,141,149,190, 90,209,229,214, + 18,176, 50,154,116, 34, 65, 41,117,169,103, 34,205,115,163,124, 41, 6, 0, 96,107, 91,138,161,202, 24,173,122,169,232,246, 19, +137, 68,136,142,142, 70,223,190,125,193,178, 44,196, 98, 49,164, 82, 41, 36, 18, 9, 46, 94,188, 8,161, 80, 8, 30,143,215,160, +110, 66,129, 64,112,104,221,186,117, 99,150, 46, 93, 42,101, 89, 22, 34,145, 8, 82,169, 20, 98,177, 24, 95,127,253,181, 70, 36, + 18, 29,110, 80,192, 66,253,179, 8, 43,247,109, 88, 22,228,224,104, 16,181,101,145,114, 50,171, 85,158,180, 85,126,206, 68,217, +181,149, 7,150,127,143, 26,190,215,214,176, 45,123,201,146, 37, 39,171,140,223,202, 68, 51, 82,107, 5,203,215,215,215,203,202, +214,233,228,212,133,235,205,182, 92,224, 33, 47,245, 22,178, 78,126,153, 71,245,154,170,161,165,107, 3,143,231,107,103,103,141, +172,232, 98,232,114,238,129, 16, 18,219,248,166,151, 17, 24, 24,232,110, 97,229, 16,249,233,162,239,173,118,196,240,145,155,242, +103, 8,108, 76,229,138,207, 48, 95,173, 60,242,243, 96,113,218,109,104,174, 70, 90, 8,158, 60,198,141,140, 82,236,138, 78, 83, + 71,158,253,225, 12,227, 77, 67,123,142,180, 48,237, 57,210, 10,171, 39, 29,182, 74, 47,190,137, 11,119,247, 15, 9,159,177,159, +226, 57,173,238, 94, 53, 92, 41, 20,138, 65, 78, 78, 78,243, 15, 28, 56,224,162,215,235,229,167, 78,157, 82,239,222,189,251,190, + 94,175,143, 72, 77, 77, 61, 96,172,243, 70,129,182, 50, 92,181, 51, 23,118,122,255,189,119,206,124,180,234,127,146,155, 49,151, +176,124,203, 1,200, 5, 58, 67, 76, 74,241,176, 27, 5,250, 67,198,248,248,124,254,130, 29, 59,118,152,120,123,123,147,236,236, +236,202, 15,252,210,210, 82,228,231,231, 87,142, 31,106,215,174, 29, 51,119,238, 92,147, 57,115,230, 44, 0,240,223,186,156,148, +210,140,249,243,231,219,141, 31, 63, 30,102,102,102,200,206,206,134, 78,167,171,172, 54,137,197, 98, 88, 88, 88, 32, 55, 55, 23, +199,143, 31, 71, 77, 83,246,171, 34, 20, 10, 83,149, 74,133,179, 84,102,162,149,201,100,212,212,212,180,201, 78, 0, 32,132,164, +245,239,223,223, 97,254,252,249,162,170,221, 76,165,165,165,164,177, 78, 74,105,209,171,175,190, 42,139,136,136,128,139,139, 11, +180, 90, 45, 88,150,173,172, 96, 85, 44, 13,240,232,209, 35, 44, 94,188, 24,148, 82,227, 79,100,116, 57, 58, 56,189, 99,139,210, +108, 29, 74,179,117,208,102,233, 80,154,161,131,190,232, 31, 55, 69,164, 49, 3,208,107,162, 90, 37,172,198, 46,182,134, 84,176, +202,171,105, 16, 10,133, 72, 78, 78,198,137, 19, 39, 16, 24, 24, 8,185, 92,142,194,194, 66,156, 59,119, 14,105,105,105,141,170, + 96,245,236,217,115,243,209,163, 71, 67, 63,252,240, 67,215,137, 19, 39, 74,189,188,188,144,152,152,136, 85,171, 86, 21,223,186, +117, 75, 53,101,202,148, 31, 26,226, 99,202,151,174, 49,106, 22, 97, 13,203,220,112,112,252, 77, 52,219,242, 9,127, 23,181, 6, + 44,134, 97, 62, 9,122, 99,150,217,230,243,124,228,168,110, 32,239,244,220,234,225,170, 94,170, 95,109, 91, 32,145,183,211, 83, + 33,128, 98,232,115,239, 67, 36, 18, 53, 56, 0, 85,119,178, 44, 59,173,243, 27,179,172,182, 94,226, 35, 47,229, 22, 50, 35,231, + 52, 56, 92, 85, 56, 39, 16, 34,112, 15,246, 31, 32, 78,191,131,226,200,157, 32, 0, 54,196, 21,226,220, 99,237,215,165, 90,237, +162,155,121, 37,185, 78, 93,136,229,206,240,140, 57,253, 94,107,255,145,231,155,199,113, 33,243, 59, 64, 6, 88,218,242,251, 85, +237, 46,124, 30, 87, 47, 87, 42,149,238,114,185,252,171, 67,135, 14,217,138, 68, 34,179,155, 55,111, 26,246,236,217,147,108, 48, + 24, 86,166,166,166,238,172,233, 49,245, 57,125,164, 82,167,182,109, 92,163,166,172,252, 86,162, 46, 40, 68,161,182, 20,138, 22, + 74, 67, 84,204,237, 55,110, 20,104,247, 26,227,180,183,183,239, 49,106,212,168, 14,126,126,126, 76,109,225, 42, 63, 63, 31, 5, + 5, 5,120,252,248, 49, 66, 67, 67, 25, 47, 47,175,118,246,246,246, 61,210,211,211, 79,214,214,206,212,212,212,121, 59,119,238, + 12,249,229,151, 95, 6,142, 27, 55, 78,254,250,235,175, 67, 42,149,162,176,176, 16,206,206,206, 96, 89, 22,167, 79,159,198,221, +187,119,213, 0,246,167,166,166,158,173,171,157, 15, 30,220,111, 65, 8, 97,156,156,156, 66,250,246,237,219, 44, 78, 0,200,204, +204,116,139,138,138,154, 62,100,200,144,143,251,244,233, 35,159, 57,115,166,208,213,213, 21, 6,131,129, 52,214,153,147,147, 99, + 30, 27, 27,187,162,107,215,174,255,237,219,183, 47, 63, 60, 60, 28,230,230,230, 48, 24, 12,144, 74,165,200,207,207,199,130, 5, + 11,112,230,204, 25, 61,165,244,155,188,188,188, 79,235,114, 62,181, 14,214,148,175, 59,214,244,186, 86,217,183,198,117,176,158, +199,223,188, 70,163,177,111,104, 85,204,152,118,198,198,198,210,234,235, 97,213, 85,193,170,238,172, 24, 15, 38, 18,137,192,231, +243,145,153,153,137,163, 71,143, 62,181,254,149, 72, 36,170, 92,198,161,166, 10, 86,109,237,148,203,229,236,127,254,243,159,177, +135, 14, 29, 26, 51,109,218,180, 33,106,181,218,206,204,204, 44,211,196,196,100,255,148, 41, 83,126,180,176,176,168,117,137,134, +154,156, 60,134,212, 58,139,176, 42, 44, 79, 84, 92,211,112,173,231,241,186,115,206,151,211,249,178, 81,215, 24, 44,201,217,152, +187, 96,196, 25, 80, 95,248,170,193,225,170, 38,244, 37,133, 9, 11,127,126,224,107,208,106,160,207, 79,186,211,119, 64,255, 70, +159,113, 86, 64, 41, 53, 57, 19,155, 0,190, 36, 27,185,231,151,229, 18, 67, 73,207,152,152,152, 6,173,127, 83,193,122, 74,117, +163, 77, 76, 34,239,159, 57,241,138, 2, 64,210, 19, 45,174,196, 63, 57,250,107, 81,209,180,138,125, 30,159,163, 57, 0, 62,118, +236,198,180,177,242,200,235,109,174, 0, 50, 30,233,144,147,169, 63,244,188,198, 98, 85,160, 82,169,238,249,248,248,108,217,184, +113,227,164, 78,157, 58,153, 78,158, 60,185, 98,224,251, 47,141,117,222,208,104, 30,251,200, 69,223, 69,110, 88,245,153,196, 43, + 16,123,194,103, 24, 78,197,196, 15,189,174,214, 26,221,103, 45, 22,139,195, 38, 77,154, 36, 44, 42, 42,170, 53, 92,229,231,231, + 67,173, 86, 35, 63, 63, 31, 87,174, 92,193,235,175,191, 46,190,125,251,118, 24,128,147,181,121, 41,165, 44,128,211,110,110,110, + 23,191,251,238,187, 94, 91,183,110,237,253,222,123,239,137,194,194,194,112,243,230, 77, 92,188,120, 81, 91, 90, 90,122, 76, 34, +145, 28, 79, 72, 72, 48,106,112,211, 51,114,234, 1, 44,182,177,177,137,216,189,123,247,162, 63,254,248,227,173, 49, 99,198,152, +232,245,122,210, 68,231,199,182,182,182,179, 15, 30, 60,184,249,232,209,163, 67,223,122,235, 45,102,202,148, 41, 88,187,118, 45, +246,236,217,195, 26, 12,134,189, 2,129,224,157,204,204,204,122, 39,160, 60,181, 14, 86, 29,235, 92,213,119,191, 17, 60,139,179, +208, 38, 59,171, 87,194, 58,117,234,100, 95,117,150,102,213,175, 13,161, 67,135, 14, 79,173,115, 85, 49,160,189,226,198,227,241, +192,231,243, 27,212, 69,232,227,227, 3,129, 64,192,250,250,250,254, 8,224, 71,224,233, 75,230, 8, 4,130,202, 69, 77,141,161, + 68,207, 98,195,198, 45, 23,245, 44,133,129,165,160, 44,160,163, 0,107, 96, 97, 96, 41, 12, 44, 91, 54, 11,155, 2,154,226, 70, + 47, 75,200,193,241,175,163,174,128, 53,179, 32,102,141, 14,128, 53, 33,100, 70, 76, 76, 76,157,215,180, 50, 6, 30,143,153,145, +177,239,221, 8, 10,228,240, 8,140, 26, 24, 93, 31, 6,131, 97, 86, 97,108, 4, 75, 41,181, 32,132,124,113,249,242,229, 38,181, +147,234,245, 31,124,245,195,233,175,109,205, 69,189,179,114, 75, 14,130,144, 26, 87,109,215,131,126,248,211,178, 71,203, 44,109, +249,253,114, 50,245,135, 88, 6,245,174,238,254,119,112,227,198,141,112,119,119,119,222,255,254,247,191,177, 90,173,246,169,129, +239,141,118,170,181,159,183,147, 11,121,109, 92,157, 38,199, 39, 62, 26,114, 93,109, 92,183, 96, 21, 68, 74,165,242, 70, 81, 81, + 17, 8, 33, 40, 41, 41,121, 42, 80, 85, 13, 88,165,165,165,200,200,200,128,171,171, 43,170,172,153, 84, 39,229,161,228,128,141, +141,205,169, 53,107,214, 12, 88,187,118,109, 48,203,178,209,165,165,165, 7,178,178,178, 10, 26,254,140,159,141,179,252,113, 31, +201,100,178,165,107,215,174, 93, 33,145, 72,252, 51, 50, 50,162,154,226, 44, 15, 79,111, 88, 91, 91, 43,182,108,217,178,107,227, +198,141,157,249,124,254,121, 66,200,176,220,220,220,198, 92,236,249, 78, 19,239,175,143, 61, 77,124,252, 51,113, 54,100,249, 5, + 99,208,235,245, 5, 51,102,204,200,168,126,205,193,170,107, 94, 85,253,170,213,106,235, 93,159, 67,175,215,179, 95,126,249,101, +157, 39,113, 85,131, 86,113,113,113,189, 93,186,148,165, 89,253,135,127, 80,223,110,127,121, 76,131, 30,192,193,241, 47,165,214, +128, 21, 19, 19,147, 12,224,221,230, 60, 88,223,190,125, 79, 0,240,106, 78,231,149, 43, 87,146, 0,188,213, 92,190,237, 37, 37, + 9, 0, 6, 78, 32, 68,240, 19,173,189, 34, 85, 62,160,253,181,231, 57,139,176, 54,106, 26,248,222, 84,106, 26,248,110, 44,122, +189,254,136, 88, 44, 38,249,249,249, 40, 45, 45,133, 90,173,174, 12, 87, 85, 67,150, 94,175, 7, 33, 4,106,181, 26,166,166,166, +208,233,116, 13, 42, 25,148,135,148,157, 97, 97, 97,187, 35, 35, 35, 27,124,225,241,191,203, 89, 84, 84,148, 6, 96, 84, 88, 88, + 24,191,185,156,217,217,217, 41, 0,130,221,220,220, 68,198, 86,193,106,162,190, 11, 57, 27,123,161,231, 58,248, 95, 19, 31, 95, + 19,219,234,223,229,239, 37, 49, 49,209,187,185,157,143, 30, 61,106,182,255,231, 10, 18,207,111,157,218,220, 78, 14, 14,142, 50, +254,182,245,156,230,206,157,251,143, 27, 32, 91, 23,235,235, 8, 87, 85,249,167,133,171, 10,154, 51, 92, 85, 80,117,224,123, 67, + 80,169, 84, 39, 1,192,206,174,108,236,176,179,179,179,177,143,107,204,225,208, 92,161,229, 69,116, 54, 37, 92,253, 29, 80, 74, + 27, 85,169,171,199, 89,239, 44, 86, 14, 14, 14,142,191, 27,110,217, 56, 14, 14, 14, 14, 14, 14, 14,142,102,134, 0,104, 87,211, + 29, 13,153, 29, 64, 8,169,209, 81, 23,245,249, 57, 39,231,228,156,156,147,115,114, 78,206,249,242, 57,235,115, 87,155,145, 59, +190,234, 74,238, 47, 18,164, 49, 51, 99,140,150,191, 32, 83, 67, 57, 39,231,228,156,156,147,115,114, 78,206,249,124,157,181, 28, +231,133, 13, 88, 92, 23, 33, 7, 7, 7, 7, 7, 7, 7, 71, 51,243,220, 47, 90,204,241, 98,224,228,228,180, 36, 40, 40,232,131, + 75,151, 46,173,124,244,232,209,130, 70, 58, 20,214,214,214,139, 1, 4, 83, 74,197, 60, 30,239, 86, 86, 86, 86,120,114,114,242, +233,198,182, 75,161, 80, 56,219,218,218, 46, 6,208,153,101, 89,161, 64, 32,184,145,158,158,190, 72,165, 82,157,111,172,211,214, +214,214,196,209,209,209,159, 82,106, 71, 41,101, 4, 2, 65,142, 74,165,186,146,145,145,209,228,117,219, 56, 56, 56, 56, 56,254, + 29,212, 25,176,230, 79, 38,142, 40, 5,127,238,122,154, 12, 0,132, 16, 51, 0,254, 40, 91,106,225, 54,128,203,148,210,252,166, + 52,224, 69,113,254,211, 33,132, 48, 22, 22, 22,175,202,100,178,143, 10, 10, 10,124,205,204,204,110,148, 95, 30,103,127,249,226, +153,141,198,206,206,206,110,248,240,225, 95,172, 89,179, 6, 99,199,142,157,109, 99, 99,179,170,161,235, 54,121,123,123, 15, 86, + 42,149,235, 23, 46, 92,100, 27, 24, 24, 72, 36, 18, 9, 18, 18, 18,148,179,102,205,236,212,169, 83,167, 93,177,177,177,117, 94, + 22,167, 38,124,124,124,134,185,184,184, 68,132,135,135,219,250,251,251, 19, 62,159,143,107,215,174, 57,205,159, 63, 63,208,215, +215,119, 75, 92, 92,220,180,250, 45, 79,211,174, 93, 59, 87, 55, 55,183,224, 69,139, 22, 73, 2, 3, 3, 33, 22,139,113,235,214, + 45,147,153, 51,103,218,118,234,212,233, 94,108,108,236,133,134,248,252, 38,196, 10,132,178, 82, 62, 0,148, 22, 9,245, 49,235, + 59,233,140,221,214,208,182,115,112,112,112,112,252,115,168, 53, 96, 45,152, 68, 22, 48,192, 76, 48, 32, 31,143, 36,191,172,253, +133,185,216,171, 87,175, 54,239,189,247, 30, 41,191,116,132,247,206,157, 59,223,224,241,120,241, 44,203, 94, 0,112,133, 82, 90, + 90,155,175, 42,229, 11, 72,118,100, 24, 38,232,159,236,124, 17,144,203,229,238,182,182,182,211,172,173,173,251,249,251,251,231, + 79,156, 56, 49,241,252,249,243, 15, 2, 2, 2,138, 55,110,220, 24,174,211,233,190,245,240,240, 56,166, 86,171, 87, 52,118,233, + 6,129, 64,224, 69, 8,129, 74,165,130, 64, 32, 16,136, 68, 34,111, 0, 70, 7, 13,103,103,103, 71,133, 66,241,191, 95,126,140, +136, 96, 97, 0, 0, 32, 0, 73, 68, 65, 84, 59, 98,151, 95,194,224, 94, 38, 11,160, 8, 6,198, 6, 11,151,175,181, 94,177,120, +246, 72, 15, 15,143, 51,119,239,222,253,217, 88,167, 66,161,112,118,113,113,137,248,227,143, 63,236,196, 98, 49, 88,150,133, 90, +173,134,157,157, 29,150, 44, 89, 98,181,112,225,194,247, 92, 93, 93, 79, 61,124,248,112,159,177, 78, 91, 91, 91, 19, 55, 55,183, +224,147, 39, 79, 74, 68, 34, 17,209,233,116,164,164,164, 4, 14, 14, 14,244,235,175,191, 22,207,154, 53,203,211,213,213, 53,237, +225,195,135,143,140,241,249,125, 31, 43,200,207, 58,217,133, 38,107,102, 3, 0,145, 72, 23,133,205,183,186,152,159,117, 50,176, +190,109,126,223,227, 92,204,120, 46,100,113,252,189, 40, 20,138, 16, 87, 87,215,223, 30, 61,122, 20,205,227,241,222, 76, 76, 76, +108,216, 85,210,107,128, 16,226, 4,192, 21,128, 37,202, 38, 86, 61, 1,144, 72,105,217,137,123, 99,176,113,235, 49, 8, 98,217, +187,160,180, 35, 3, 0, 12,115,133, 45, 45,220,148,117,231,164,209,255,239, 53, 58, 37, 38, 99,193,178, 29, 25, 80, 22, 12,239, + 42,213, 23,254,144,121,251,100, 67, 23, 86,230,224, 0, 80, 75,192,154,255, 62,177,100, 4,152, 62, 99,226,120,134,207,227,145, +240,245,223,143,184, 20,189,143, 58,182,232, 88,121,201,141,208,208, 80,132,134,134,146,229,203,151,123,253,241,199, 31, 94,219, +183,111,215, 17, 66, 98, 40,165,155,107, 59,216,146, 41,178, 71,122,157,198,121,193, 7,210,226,150,157,191,221, 30, 28, 28,202, +138,197, 98, 52,197, 9, 0,255, 29, 38, 56, 54,118,152, 43, 9, 27, 56, 39,169,185,156, 47, 2,114,185, 60, 74, 46,151,187, 77, +152, 48,225,222,164, 73,147, 78,153,152,152, 80, 0,200,200,200, 48, 25, 48, 96, 64,206,208,161, 67,179,139,138,138,240,221,119, +223, 57, 71, 68, 68, 28, 51, 51, 51, 83,229,231,231, 7, 26,235, 39,132,240, 29, 29, 29,151,246,238,221,123,234,168, 81,163, 32, +151,203, 49,102,204, 24,148,148,148, 68, 43, 20,138,229,169,169,169,179, 41,165,245, 94, 59,195,210,210,114,238,252,249,243,237, + 10,180, 60,204,222,154,128, 39, 5,101,185, 65, 38, 98,240,223, 87,196,120,251,237,119,204,227,226,226,150, 3, 48, 58, 96,217, +218,218, 46, 14, 15, 15,183,173,120,173, 11, 10, 10, 80, 80, 80, 0,181, 90,141,130,130, 2,140, 26, 53,202,236,222,189,123,171, + 1, 24,253,134,235,232,232,232,191,104,209, 34,137, 72, 36,194,190,125,251, 58, 20, 23, 23,243,117, 58, 29, 40,165,250, 54,109, +218, 92,121,231,157,119,132,119,239,222,237, 2,192,168,128,229,152, 6, 65,158, 70,243,205,186,101,159,217, 2,192,135,211,191, +250, 6,208, 4, 81, 35,182, 57,166, 33, 0, 0, 23,176,234,128, 16,194, 3,240,154, 64, 32,120,221,205,205,205,255,222,189,123, +113,122,189,254,255, 0,252, 31, 53,114, 29,187, 58,220,175, 40, 20,138,197, 41, 41, 41,235, 40,165, 63, 53, 79,139,255,249,180, +110,221,250,215,237,219,183, 91, 31, 60,120,112,240,194,133, 11,135, 3,216,210, 88, 23, 33, 68, 0,160, 11,202, 66,213,109,148, + 5, 43,160, 44,104,181, 33,132,180, 6,112,182, 33, 39,188, 54,158, 33,166,224,155,237,236,210,179,111,215, 97,111, 12,149,219, + 90,153,163,176,196,128,187,137,105, 45,142, 30,252,181,187, 67,187, 1,209,250,210,188, 17, 89,119,206, 26, 93, 97,175,112,246, +232, 55,184,107,207, 87,122,201,205,205, 45,144,173,214,225,126,226, 99,151,168, 99,123, 67,237,219, 13, 56, 5,162,123, 43,253, +218, 81,227, 47,152,206,193, 1, 35, 7,185, 19, 66, 96, 98,106, 82,227,125,230,230,230, 8, 11, 11, 67,120,120,184, 0, 64,231, +170,247, 85,159, 97, 96, 48,104, 29,103,255,119, 50, 68,124, 42, 30,208,175, 15, 49, 51, 51,107,178, 19, 0,236,173,244,189,130, + 60, 53,221,211,175, 76, 25,125, 37,106,113, 59,109,113,238, 95,174,116, 42,147,201,224,238,238,142, 89,179,102, 25,229,108, 42, +127,135,147, 82,170,240,246,246, 86,175, 90,181,202,115,206,156, 57,150,197,197,197, 38, 0,156,188,125, 67, 20, 12,195, 56,107, +181, 90,249,188,121,243,108,150, 45, 91,230,105,107,107,155, 75, 41,181,109, 72, 59, 29, 29, 29, 87,133,135,135, 79,219,180,105, + 19, 9, 8, 8,128, 92, 46, 71,151, 46, 93,176,117,235, 86,102,238,220,185, 95, 56, 58, 58, 46, 53,166,157, 0, 66, 3, 3, 3, + 9, 11, 32,167, 64,143,147, 75,252,112,246,171, 0, 20,105, 89,228,169, 11,160,209,104, 32,145, 72,164, 54, 54, 54,166,198, 62, +119, 0,157,253,253,253, 9,128,202, 80,165, 86,151,221, 10, 10, 10,161,213,150,130, 97, 24,179,150, 45, 91,138,107,208,213,232, +164,148,218, 5, 6,150,229,207,226,226, 98,254,224,193,131, 49,112,224, 64,168,213,106,126,126,126, 62,180, 90, 45, 24,134, 17, +150,127,176,215,235,212,202, 4,132,165,172,189,137, 76,106, 99, 34,147,218,176,148,181, 7, 0, 99,182,105,101, 2, 82,147,179, +185, 48, 98,106,182, 45,143,199,251,209,205,205,237, 22,143,199,219, 66, 8,113,104,138,147, 16, 18, 64, 8, 9,151,201,100,199, +189,189,189,147, 77, 76, 76,254, 32,132, 44, 37,132,116,105,140,147, 16, 34,146,201,100,127,132,135,135,239,138,139,139, 27,126, +226,196, 9,215,107,215,174,189,177,124,249,242,157,166,166,166,167, 8, 33,210,198,180,179, 2, 87, 87,215,141, 23, 46, 92, 8, + 8, 14, 14,222, 64, 8,169,245,111,168, 33, 78, 66, 8,143, 16,226, 75,140,188,240,224,223,253,186, 59, 57, 57,185,249,250,250, +218,240,120, 60,132,134,134,130, 82, 26,218, 68,103, 48,128, 52, 74,105, 20,165, 52,147, 82,106, 40,191,101, 81, 74, 79,163,236, + 68,165,198, 99,212,234,228,155,237,252,232,147,207,251,126, 58,249,125,121,108,146, 1, 63, 28, 77,197, 47,103, 50,161, 82,139, +209,123,200, 88,243,238,253, 71,245,225, 11,205,107,188,176,125, 93,206, 47,190,152,217,247,253, 49,163,229,215, 83, 24,236, 58, +155,133, 51,183,243, 81, 68, 44, 17, 54,100,188,165,119, 96,191, 1, 4,194,205, 13,124,238,141,230,223,236,124,217,168,177,130, + 53,119, 3,205, 89, 48,137, 44, 11,255,238,251,217, 12, 33,212,201,163,207, 77, 87,247,206,133, 44,203, 66,163,209,160,180,180, + 20, 2,129, 0, 26,141, 6, 73, 73, 73,184,112,225, 2,204,205,205, 27,116,224,220,188, 60, 40,157, 92, 33,147,201,154,197, 57, +238, 63, 67,249,143, 82, 83,249,209,177, 39,253,126, 94,179,221,207,185,117,239,219, 29,195, 62,191,110,106,222, 66,115,229,202, + 21,156, 59,119, 14, 57, 57, 57,168,248, 0,125, 25, 32,132,232, 86,172, 88, 17,155,146,146,130,211,167, 79,251,206, 95,189,173, +229,245,252,214,252,204, 2, 42,176, 53, 77,119,241,146,222, 49,228, 60,121,242, 96,218,180,105,127, 56, 58, 58,106, 39, 79,158, +220,221, 24,175,147,147,147,132, 16,226,215,191,127,255,255,190,243,206, 59, 72, 76, 76,196,167,159,126,170,189,114,229, 74,174, +159,159,159,229,138, 21, 43,132,227,199,143, 71,116,116,244, 52, 39, 39,167,221, 0,110, 60,126,252,184,174,107,169,137, 36, 18, + 9,144, 87,118,162, 90,170,167, 0,202,134,133, 21, 20, 20,128,161,185, 16, 10,133, 12,195, 48,182, 0,140, 58,243,100, 89, 86, + 40, 18,137, 80, 88, 88,136,130,130, 2,168, 50, 11,144,148, 94, 8,117, 97, 9, 52, 26, 29, 74,138, 41,196,114,123, 70,151,153, +105, 13,192,168, 37,225, 41,165, 76, 69,119,163, 86,171,133, 70,163,129, 86,171,133, 86,171,173,188,156, 15,143,199,147, 43,149, + 74, 51, 0, 57,245,249,120, 34,169,158,199, 8,195,103, 46,250,102, 30, 0,240, 24, 97,184, 41,138, 89, 99,182,241, 68,210,102, + 95,229,221, 88, 8, 33, 98, 91, 91,219,147,187,118,237,242,118,119,119,199,195,135, 15,189,134, 13, 27, 22, 68, 8,241,165,148, + 54,232, 44,158, 16, 34, 99, 24,102,217,187,239,190,251,193,200,145, 35,137,135,135, 7,248,124, 62,244,122,189, 83, 66, 66, 66, +143, 95,126,249,101, 58,159,207,255,193, 96, 48, 76, 51,118,149,119, 66, 8, 35, 18,137,126, 94,191,126,125,183,160,160, 32,108, +217,178, 5, 23, 47, 94,100, 3, 2, 2,152,183,223,126, 27, 46, 46, 46,157,223,126,251,237, 61,132,144,129,198, 84, 88,107,240, +187,140, 30, 61,218,153,199,227, 33, 56, 56, 88, 24, 29, 29,221, 9, 64,116, 67, 61,213,156,166, 78, 78, 78, 81, 97, 97, 97,190, +199,143, 31,143, 37,132,132, 53,100, 85,123,133, 66, 49,196,222,222,126,185, 92, 46,183, 52,246, 49, 5, 5, 5, 69,233,233,233, +159,170, 84, 42,163,174, 71, 74, 41, 13,110,223,190, 61,244,122, 61,204,205,205,225,224,224,208, 85,169, 84, 78, 51, 55, 55,127, + 45, 63, 63,127,234,227,199,143, 47, 26,123,108, 66,136, 18, 0, 67, 41,189, 87,254,115, 75, 0, 21,151, 89,186, 67, 41,125, 72, + 41,125, 64, 8, 81, 16, 66,156,141,233, 46,180,113,235, 49, 40,184, 87,255,174,161, 65,237,152, 37,187, 19, 97, 96, 89,240, 97, + 0,159,199, 34,203, 32, 0, 33, 4, 46,158, 1, 60,251,235,151, 59,219,120,246, 30,148,117,231, 88,189,213,107, 27,183, 30,131, +250, 14, 30, 26,218,198,211,131, 89,249,219, 35,228,170,174, 27,210,111,255,145, 69, 24, 6,173, 58,246,182,113,241,244,229,185, +249,190, 34, 72, 79,188,222,195,202,189,123,175, 39,247,162,142, 27,251, 59,224,224,168, 12, 88,132, 16, 74, 41,173, 60,179,154, +243, 29,157, 99, 99, 73, 90,222,188,126,149, 73, 78,211, 22, 94,189,122, 21,214,214,214,176,179,179,131,153,153, 25,226,227,227, +113,252,248,113,220,185,115, 7,148, 82,248,250,250, 54,232,192,233,105,105,200,126,162,110, 86,103, 11, 71, 71,180,112,116,228, +103,229,228,226,220,213,107,222,251,126,232,213, 38,157,153,176, 73,163,209, 84,238,163,211,189,124,189, 46,118,118,118,134, 15, + 63,156,156, 61,238,155, 7,173, 71,244, 84,242,134,116,113,192,111,209,169,188,157,145, 60, 58,251,189, 14, 89, 9, 9,119,141, +126,210, 46, 46, 46,139,123,244,232,241, 25,159,207, 23,140, 31, 63, 30, 0, 48,101,202,148,146,107,215,174,181, 77, 78, 78,126, +224,232,232,216,102,234,212,169,215,246,236,217, 35,120,255,253,247, 73,113,113,241, 69,129, 64, 64, 21, 10,197,130,148,148,148, +121, 53, 57,121, 60, 94,220,205,155, 55, 91,234, 37, 10,216,200, 25,244,153, 29, 11, 0, 48, 21, 83,100,165,171,112, 35,225, 18, +108,109,109,205,109,108,108,110,135,132,132,148,164,167,167,127,116,255,254,253,205,117,181, 83, 32, 16,220,184,118,237,154,147, +189,189, 61, 10, 10, 10,144,156, 81,136, 31,207, 17, 20,149, 72, 1, 72,193,131, 28,114, 27,103,121, 43, 90,116,165, 93,187,118, +165, 90,173,246,139,187,119,239,214,217,213, 35, 16, 8,114,110,221,186,101,162, 84, 42,193,227,241, 74,127,249,229, 23,161, 86, +171, 5,165, 84,127,240,224,193, 55,115,115,115,131, 91,183,110,205,184,184,184,172, 8, 9, 9,209,164,166,166,142,123,248,240, + 97,173, 23, 26, 62, 60,197,173,180,251,188,200,111,115, 31, 38,255, 2, 0,202, 32,239, 39,251,231,117,210,118,159, 87, 80,239, +182,195, 83,220, 74, 49,249,217,173, 81, 87, 15,239,206,156, 57,211,219,202,202, 10, 19, 39, 78,196,252,249,243, 49,103,206, 28, +247,137, 19, 39,142, 7,176,202, 88, 9, 33, 68,234,224,224,112,105,205,154, 53, 94, 33, 33, 33, 56,120,240, 32,118,236,216,129, + 7, 15, 30,232, 93, 93, 93,249, 65, 65, 65,152, 59,119, 46,250,244,233, 51,110,242,228,201,221, 9, 33,157,140, 12, 29, 99,231, +206,157, 59,164,107,215,174, 24, 51,102, 76, 73,100,100,228,112, 0, 71,143, 29, 59,214, 51, 42, 42,106,247,182,109,219,164,225, +225,225,125,167, 78,157, 58, 9,192,186, 70, 60,255,161,221,186,117, 3, 0,116,237,218, 21,203,151, 47,239,131, 38, 4, 44, 66, +136,200,218,218,250,192,150, 45, 91,124, 61, 61, 61,241,214, 91,111,117, 26, 62,124,248, 1, 66, 72,111, 74,169, 81,151, 54,114, +116,116, 92,182,126,253,122, 55,169,180,214,194,220, 95,208,106,181, 86, 19, 38, 76, 88, 10,192,232,128,213,174, 93, 59, 68, 70, + 70,162, 87,175, 94,240,241,241,113,155, 48, 97,194,138, 62,125,250,224,147, 79, 62, 57,227,224,224,160, 72, 75, 75, 51,246, 66, +207, 46, 0,226, 1,128, 16,210, 2,128, 59,128,179,229,247, 5, 17, 66, 64, 41,125,136,178,139,135,183, 1, 80,255,120, 44,137, +201,187,131, 7, 14,148,255, 95,116, 6, 12, 44, 11, 47,165, 4,222, 45,204,144,152, 81,140, 68, 85, 54, 4,164, 20,114,169, 24, +237,131, 7, 88, 62, 73, 79,124, 23,198, 12, 15, 16,203,222, 29, 58,120,160,233,175,231, 50,144,171,186, 65,147, 46,253,242,135, +174,184,112, 28, 0,220, 60,245,211,255,236, 45, 37,189, 61, 58,250,241,138, 66,135, 88, 70,253,246,221,187, 0,184,128,245,140, +169,158, 69, 94,100,234,156, 69,152,157, 11,141,181,131, 55,146,211,226,202,126,206,206, 70,118,118, 54, 90,181,106,133,136,136, +136,167,246, 45, 46,174,247, 98,240, 53, 31,227, 25, 56,109, 44, 45, 48,184, 71,119,222,245,248,239,120, 26, 86,243,212,125,141, +117,254, 83,161,148, 82, 66, 8, 73,202,210, 89,100,229,235,132,111,246,112,166, 2, 30,131, 17, 61, 90,144,117,251,146,132, 89, + 26,153, 5,143,199, 99,140, 57,147,247,243,243, 19,244,232,209,227,179,141, 27, 55, 10, 82, 83, 83, 97, 97, 97, 1,157, 78,135, +184,184,184,148,148,148,148, 7, 0,144,154,154, 26,239,228,228,148,110, 48, 24,156,188,188,188, 48, 97,194, 4,180,105,211,134, + 76,155, 54,109, 58, 33,100, 65, 77, 51, 22,211,211,211,195,103,205,154,213,109,241,242, 8,235,209, 65, 4,133, 69, 90, 20, 20, + 20, 32,241,238, 13,208, 2, 45, 86,174,252, 26, 82,169,148, 0, 16,102,102,102, 10,231,205,155,187,193,223,223,127,224,229,203, +151, 95,175,173,173,233,233,233,139,230,206,157, 27,184,114,229, 74,171,130,130, 2,104,138,139,161,214,136,112,225,235,178, 10, +101,208,212,139, 88,247,213, 10,166,157,139,137,117, 65, 65, 1, 62,251,236,179, 53,190,190,190,157,227,226,226, 62,168,205,169, + 82,169,174,204,156, 57,211,118,237,218,181,226, 54,109,218, 92,203,207,207, 71, 78, 78, 14,179,103,207,158,133, 46, 46, 46, 86, +107,214, 68, 16,153, 76, 6, 0, 72, 78, 78, 22,206,158, 61,235,231,246,237,219,111,187,118,237,218,152,218, 94, 27, 0, 37,132, + 32, 85,161,104,229, 86,116,142,153,167, 80, 20,159,137,156,171,218, 74, 8, 82,203,246, 1,117, 92,239, 56,250,209, 22,113,215, +146, 18,118,117, 90, 90,210, 29, 74, 65, 49,247,185,133, 43,216,216,216, 76, 30, 50,100, 8,150, 46, 93,138,125,251,246, 77,181, +178,178,250,122,254,252,249, 80, 40, 20, 31, 18, 66, 86, 83,227, 87, 39,254,106,213,170, 85, 94, 94, 94, 94,120,231,157,119,180, +199,143, 31,159, 9,224, 55, 0, 73,167, 79,159,110,177,121,243,230, 65, 63,255,252,243,210, 53,107,214, 72,214,174, 93,235,246, +198, 27,111,172, 6,240, 94,125, 82,123,123,251, 79, 70,142, 28,137, 21, 43, 86, 32, 50, 50,242, 13, 74,233,193,242,187, 14, 17, + 66, 6,133,135,135,159,152, 61,123, 54, 86,173, 90,245, 49, 26, 24,176, 8, 33,166,222,222,222, 95,246,237,219, 23,167, 79,159, + 70,104,104, 40,186,116,233, 50,149, 16, 18, 65, 41, 53, 54, 92, 84,245, 49,166,166,166, 63,111,218,180, 41,180,101,203,150, 88, +180,104, 17, 62,251,236, 51,108,220,184, 49,244,173,183,222,250,153, 16,242,186, 49,179,124, 77, 77, 77, 77,165, 82, 41,150, 46, + 93, 74, 31, 61,122, 84,111,245,212,209,209,209,242,203, 47,191, 36,230, 70,116, 3, 16, 66,120, 10,133,194,220,193,193,161,155, +131,131, 3,214,172, 89, 3, 59, 59, 59, 76,157, 58, 21,214,214,214, 40, 44, 44,196,235,175,191, 46, 56,127,254,252, 8, 0, 17, +245,249,202,177, 6, 80, 81,241,242, 70,217, 88, 43,117,249,241,206, 3,232, 10,224, 33,202,198,101, 89, 25, 35,100, 40,109,103, +105, 97,134,148,107,233,224, 67, 15,175, 22,114, 92, 78, 40, 68,169,129, 66,102, 98,138, 66,117, 46, 58,186,217, 34,191,200, 9, + 0,107,212,234,227, 66, 30,227, 39, 18, 75,145,145,159,135,180, 91, 39,178, 75, 13, 37, 19,114, 31,156, 73, 6, 0,171,214,221, + 38,220,184,112,248,242,235,253, 66,237, 50,115, 90,128, 82,246,229,233,254,224,248, 91,168,119, 12, 22,203,254,245,127,191,106, + 69,168,130,210,210,166, 77,204,123, 22,206,154,120, 22,206,127, 0, 84,105,201,207, 51,145, 48,250, 99,151, 51, 12, 58,189, 1, + 71, 46,167, 25,100, 98,162,183, 20,107,243, 89,150, 53,234, 3, 49, 38, 38, 70,119,250,244,233, 45, 51,102,204,192,170, 85,171, +112,255,254,125, 8, 4, 2,120,122,122,218, 59, 59, 59, 59, 2,101,179,247,124,124,124,108,120, 60, 30, 18, 18, 18,176, 99,199, + 14,204,155, 55,143,198,196,196,108,172,237,131, 34, 37, 37, 37, 46, 61, 61,125,253,146, 5, 51,115, 5, 37, 41,144, 25, 50, 97, +200,189, 15,129, 33, 15,147,167,206,192,195, 44, 3,226, 30,170, 17,247, 80,141, 52,141, 4, 95, 46, 90,201,115,119,119, 31,228, +228,228,212,167,182,182,170, 84,170,243,169,169,169, 91,231,204,153,147,151,149,149, 85,249,247, 83,170,103, 81,170,127,186, 25, +166,166,166, 88,178,100,137,133,163,163,227,155, 74,165, 50,172, 54,103, 70, 70, 70, 70, 74, 74, 74,194,140, 25, 51, 74, 51, 51, + 51,145,159,159,143,195,135, 15,191,209,170, 85, 43,171,105, 51, 22,144,135, 89,180,178,157,121,172, 5, 86, 68,252,192,107,221, +186,245, 40,133, 66, 81,231, 56, 34,133, 66,233,230,237,221,122,215,249,243,231,199,184,185,185,125, 0,148, 5, 43, 74, 65, 1, +192,213,213,117, 98, 76, 76,204, 88, 95,223,182,187,236,237, 29,218,212,229,122,214, 16, 66,122,188,249,230,155,109, 88,150,197, +174, 93,187,174, 81, 74, 87,253,250,235,175,151, 74, 74, 74, 48, 98,196, 8, 87, 0,125,141,244, 4,140, 26, 53,234,131,208,208, + 80,124,252,241,199,165,199,143, 31,247,163,148,126, 77, 41, 77,164,101, 36, 81, 74, 35,162,162,162, 58, 78,158, 60,185, 36, 48, + 48, 16, 99,198,140, 25, 75, 8,169,115,220, 15, 33, 36,120,228,200,145, 94, 44,203, 98,231,206,157, 87,171,132, 43, 0, 0,165, +244,143,221,187,119,159,215,106,181, 24, 61,122,116, 43, 66, 72,207, 6, 60,119,161, 88, 44,222,181,112,225, 66, 11,149, 74,133, +183,223,126,187, 36, 62, 62, 30,243,230,205,147,154,155,155, 31, 36,132,212, 58, 70,176, 54,196, 98,241,247,223,125,247,221,144, +246,237,219, 99,210,164, 73,218,111,191,253,118,202, 7, 31,124,160,245,243,243,195, 55,223,124, 51, 68, 36, 18, 53,104,133,234, +244,244,244,220,200,200, 72,235,250,110,105,105,105,233,198,248, 90,180,104, 97,225,227,227,115, 45, 32, 32, 32,171, 67,135, 14, +173, 1,224,198,141, 27,153,187,118,237,162,214,214,214, 56,124,248, 48,190,255,254,123,132,132,132, 64, 46,151,143,104, 64, 83, +105,249, 13, 85,190, 86,191,191,250,126,117, 67, 8,205, 43,210,131,207, 48, 16,240, 40,146,210,139, 81,106,160, 16, 10, 24, 8, +120, 0,159,161,176,150, 11, 32, 16,240, 0, 16,163,156, 12, 33,200, 41,212,129,207, 35, 16,136,132,132,209, 27, 42, 75,132, 12, +223, 32, 21, 75,196,196,206, 92, 8, 33,159,192,184,145,115, 28, 28,127, 82,239, 66,163, 6,195, 95, 11, 31, 53, 85,129,180, 90, +163, 42,221,181,242, 44,156, 53,241, 44,156,207,147,252,252,124,126, 84, 84,148,185, 64, 32, 48, 25,216, 62, 36,123,217, 47,119, +109,230,111,191, 3, 17, 15,100, 80, 7, 38, 53,242,228,113,146,147,147, 99,233,238,238, 94,239, 89, 47, 0,220,191,127,127,156, +163,163,227, 34,134, 97, 2, 13, 6,195, 47,171, 86,173,194,186,117,235,100, 19, 39, 78,140, 87, 40, 20, 42, 15, 15, 15,231,213, +171, 87,139, 1, 96,235,214,173, 56,114,228,200, 80,129, 64,112, 49, 41, 41, 41,173, 46,239,149, 43, 87,102,187,184,184, 68, 63, +120,240, 32,130, 16, 98, 33,151,203, 45,127,253,245, 87,146,154,171,197,236,173,247, 43,103, 22,154,136,121,152,241,154, 45,254, +243,159, 97,252,123,247,238,125, 5,224, 72,109,206,216,216,216,169,174,174,174, 81,119,239,222, 93, 37,180,246,180,150,180, 27, + 47,239, 57,163,172,251,209,209, 74, 12,166,252, 13, 49, 47, 47, 15, 89, 89, 89, 24, 59,118,172,197,226,197,139,167, 3,136,172, +205, 25, 23, 23,119,222,213,213, 53,245,238,221,187,157, 41,165, 34,115,115,243,144, 85,171, 86,145,164, 39, 90,124,177, 57, 1, +234,226,178,118,202, 37, 2, 44, 24,233,132, 49, 99,198,240, 31, 62,124,184, 12,101,103,228,127, 65,169, 84,186,123,123,123,239, +218,190,125,187,247,234,213,171,159,220,187,119,175, 80,161, 80,204,175,182, 91,201,146, 37, 75,178,183,110,221,234,249,246,219, +111,239,114,112,112, 24,222,216, 37, 53,154,138,153,153,217,210, 9, 19, 38,224,231,159,127, 70, 78, 78,206,106, 0,200,207,207, + 95,181,125,251,246,157,227,198,141,195,214,173, 91,151, 18, 66, 14, 27, 81,197,234, 55, 98,196, 8, 28, 58,116, 8, 39, 78,156, +248,146, 82,122,179,166,157, 40,165,119, 9, 33,211,247,238,221,187,102,228,200,145,248,241,199, 31,251, 2,168,107,225,217,222, +125,250,244,193,193,131, 7,145,157,157,253, 77, 77, 59,228,230,230,126,251,251,239,191,119,238,211,167, 15,150, 44, 89,210, 27, +192, 31,245, 61,111, 66,136,151,185,185,249,166, 53,107,214, 4,180,111,223, 30,163, 70,141, 42, 46, 45, 45,237,251,217,103,159, +237,219,177, 99,135,124,203,150, 45,254,227,199,143,191, 64, 8,121,159, 82,106,212, 34,182, 60, 30, 47,124,237,218,181,239,133, +133,133, 97,234,212,169,250, 35, 71,142, 12,166,148, 30, 37,132, 36,124,254,249,231, 7, 86,174, 92,201, 91,177, 98,197,123, 60, + 30, 47,211, 96, 48,204, 52,198,217,220, 16, 66, 86,172, 92,185,210,187,109,219,182, 40, 46, 46,198,253,251,247,145,158,158,190, +253,240,225,195, 71,175, 95,191,190, 60, 45, 45,109,143,189,189,253,184,169, 83,167, 58, 5, 4, 4, 4, 56, 57, 57, 89, 62,126, +252,216,152,247,146,138,202, 84, 6,128, 91, 0, 58,151, 87,174, 0, 32, 8,101, 93,131, 64,217,140, 66,163,222,155, 64,200,181, +187, 15, 85,173, 44, 77,205,144,195,138,240, 80,149, 5,169,137, 9, 24,202, 64,175,201,129,187,139, 29, 88, 10,228,103,169,192, + 48,228,154, 49, 74,157,129,141, 73, 76, 78, 87, 90,152, 72,224,238,215,223,250,234, 31, 63,254,100,222,186,235,120, 62,143,240, +132, 98,179,245,163, 70,190, 99,163, 51, 80, 20,228,164,130,240, 24,163,199,160,113,112, 0, 70, 4, 44,150,101, 33,149, 74,159, +170, 48, 85,175, 2, 73,165, 82,148,148, 52,108,185, 20,169, 84,138,210, 42,195,120,155,195,105,204, 49,155,219,249, 60,209,233, +116,242, 15, 62,248,160,107,231,206,157,147,251,245,235,151,224,229,101,155, 56, 32, 88, 98,179,118,227, 94,223,126,221,125,226, +242,159,164,103, 38,137,197,197, 57, 57, 57,214, 91,183,110,237,164,211,233,100,198,120, 83, 83, 83, 31, 1,120,164, 84, 42, 7, +244,232,209,227,173,129, 3, 7,226,212,169, 83,242,194,194, 66, 47, 19,147,178,217,164,123,246,236,193,239,191,255,254, 67, 74, + 74,202, 94, 99,219,155,148,148,116, 24,128, 91,139, 22, 45, 44, 90,180,104,145,110, 97, 97, 33, 84,169, 11, 43,103, 22, 10,249, + 12, 66, 62,187,132,220,124, 53, 44, 44, 44, 32,147,201, 92,235,115,150,175,115,181, 47,240,205,133,237,121, 15,182, 71,173, 93, +179,218, 28, 40, 59, 51,181,183, 16, 34, 55, 55, 23, 89, 89, 89,200,204,204, 4,165, 20, 6,131,193,219, 8,231, 35, 0,143,108, +108,108, 28,221,221,221,137,169,169, 41,232,147, 66,228, 20,148, 62,213, 5,169, 46, 40,132, 82,169,132, 92, 46,175,177, 59,194, +202,202, 74, 46, 22,139, 55,111,216,176,193, 75, 46,151,243,198,141, 27,103, 49,110,220,184,174,168, 37,140,201,100, 50,222,143, + 63,254,232,225,235,235,187,169,101,203,150,189, 19, 19, 19,243,234,107,107,115, 81, 62, 51,114,226,167,159,126,234, 47,145, 72, +176,110,221,186, 7, 0,182,149,223,189,235,219,111,191,157, 51,114,228,200, 54, 83,166, 76,241,153, 61,123,246,212,242,174,194, + 90,187,157,133, 66,161,159,183,183, 55,126,253,245, 87, 0,248,181,158,195,239,142,142,142, 94, 51,112,224, 64, 72, 36,146,128, +122,246,117,117,118,118,198,222,189,123, 1, 32,174,150,125,226,226,227,227,241,250,235,175,131, 16, 82,239,223, 16, 33,100,200, +171,175,190,186,123,201,146, 37,124,185, 92,142,247,222,123, 79,123,225,194,133,254,148,210, 83,132,144, 30,163, 71,143,142,218, +182,109,155, 73, 84, 84,148,215,226,197,139,163,121, 60, 94,184,193, 96,152, 93,143,115,236,162, 69,139,102, 12, 29, 58, 20,243, +231,207,167,191,252,242,203, 40, 74,233, 81, 0,160,148, 30, 33,132,188,109,105,105,185,109,214,172, 89, 36, 47, 47,111, 6, 33, +228, 49,165,244,187,218,124, 69, 69, 69,121, 6,131,193,161,168,168,200,168, 51, 68, 99,247,111,213,170, 85,191,182,109,219, 98, +239,222,189, 24, 52,104, 16,142, 29, 59, 6,134, 97, 14,168, 84,170,147, 0,142, 2,128,163,163,163,121, 66, 66,194,212,208,208, + 80,230,248,241,227,175, 3,248,193,136, 38, 60, 4,208, 30,192, 49, 74,105,114,249,196,201, 96,148, 45,217,112,139, 82, 90,177, +212, 73, 59, 0, 9,198, 60, 39, 86, 91,176,229,196,193,221, 61,122,191,241,129, 57,143,199,128, 15, 33,138,212,249,128,193, 0, + 55, 23,123, 4,122,219,227,106,162, 6,209,199,119,229, 22, 21, 20, 25,181,188,132,161,180,112,211,137,195,123,187, 7,188,250, +142,185,216,173, 45,156,237, 63,246,189,113,241,232, 49,177, 72, 72,222,120, 99,152, 69,143, 64,119,156,184,150,143,243, 39,126, +203, 41, 82,231,111, 50,198,201,193, 81, 65,101,192,170,101, 80, 89,198,212,169, 83,237,166, 77,155, 6, 51, 51, 51,100,103,103, + 67,167,211, 85, 86,155,196, 98, 49, 44, 44, 44,144,157,157,141,157, 59,119, 2,101,103, 43,181,194,227,137, 82, 23,125,179,214, +153,240, 76,180, 98,169,140, 90,201,154,238, 4, 0,173,142,159,241,221,206, 61, 86,253,186,117,225,183,112,116,252,203,253,141, +113,190, 8,232,116,186, 99,105,105,105,254,109,218,180, 73,115,113,113,209, 20, 23, 23,131,106, 52,234,131, 59, 87,183,118, 54, +159,116,159, 97, 24, 42,149, 74, 89, 11, 11,139,194,251,247,239, 19,189, 94,127,178, 33,126, 74,233,196,137, 19, 39, 50,167, 79, +159, 30,245,214, 91,111,161,101,203,150,136,139,139,195,214,173, 91,177,123,247,238,205, 66,161,112, 74, 99,218,157,156,156, 92, +224,237,237,253, 84, 5,164,250,204, 66, 93, 73, 38, 88,150, 53,122,112,126, 78,236,214, 59, 60, 27, 27,157, 79,139, 63,151, 19, +201,201,201, 65,102,121,184,170, 18,178,140, 46, 97, 18, 66,212, 90,173,182, 90, 59,255,236,126, 44, 44, 44, 68,105, 73, 6, 12, + 6, 67,141,206, 39, 79,158,168, 21, 10,197,218,136,136,136,149, 11, 23, 46,180, 91,181,106,213,147,219,183,111,231, 51, 12,243, + 84,185,150,101, 89,137,155,155,155,124,197,138, 21,246, 17, 17, 17, 79, 88,150, 93,251, 55,135,171,161,237,219,183,223,220,175, + 95, 63,249, 7, 31,124,128,136,136, 8,164,166,166,126, 65, 41,213, 3, 0,165,148, 37,132,124,254,205, 55,223,236,159, 62,125, + 58, 74, 75, 75, 87, 28, 60,120,112, 62, 33,100, 34,165,116, 91, 77, 78, 91, 91, 91, 39, 62,159,143,216,216,216,124, 74,233,253, +186,142, 79, 41, 77,243,244,244, 76, 39,132,216, 59, 58, 58,182,174,107, 95, 43, 43, 43, 55,185, 92, 14,149, 74, 5,148,125,136, +215, 68, 98, 74, 74, 10, 21,137, 68, 68,161, 80,184,215,247,252, 45, 45, 45, 63,223,176, 97, 3,255,228,201,147,152, 59,119,238, +227,164,164,164,209,229,203, 8,128, 82, 26, 75, 8, 9,237,209,163,199,142,233,211,167,123, 46, 91,182,140,196,199,199, 79, 2, + 80,103,192,114,113,113,153, 56,118,236, 88,172, 93,187, 22,235,215,175,159, 68, 41,221, 85,237, 57,239, 32,132, 88, 90, 91, 91, +175,157, 48, 97, 2, 54,109,218, 52, 26, 64,173, 1, 75,165, 82, 77,127,243,205, 55,231, 60,121,242, 36,188,190,231, 99,236,254, + 10,133, 98,240, 91,111,189,101, 79, 41, 69, 68, 68, 68,218,218,181,107,139,242,243,243,183,165,164,164, 60,245, 62,193, 48,204, +158,195,135, 15, 79,253,224,131, 15,112,242,228,201,117, 10,133,130,166,164,164,108,168,235,248,148,210, 84, 66, 72,107, 66,136, + 55,165,244, 86,249, 44,193,167, 6,178, 19, 66, 60,203,247,125,108,204,115,202,186,115,114,159,189, 79,255,179, 87, 46, 70,190, +234,234, 19, 42,176,179,148, 67,233,110, 3, 43, 83, 33, 40,128,235, 73, 26,156, 63,117, 84,151,145,250, 40,218,152, 25,132, 21, + 78,135,118, 3,162,101, 54, 46,175,182,106,219,149,239,234,238,129,222, 33, 29, 44,173,205, 4,208,234, 40,142, 93,201,195,185, +168, 67,186,140,244,228,147,220, 12,194,191,135,151,101,128, 59, 80,127, 5,107,222,250,245,235, 67, 54,110,220, 56,112,234,212, +169,242,119,222,121, 7, 82,169, 20,133,133,133,112,118,118,134, 94,175,199,193,131, 7, 17, 27, 27,171,102, 89,118, 63,254,156, + 37, 2,224,175, 87,219,158, 17, 81,212,130, 16,194, 0,133, 33,243,215,119,104, 22, 39, 0, 68, 63,208, 43, 21,169, 89,243,178, +115, 14,126,226,162,116, 20,246,233,218,153,111, 99, 89, 54,155,185,177,206,166,242,119, 56,245,122,253, 88, 66,136,207,231,159, +127,190, 92,169, 84, 42,230,207,159,255,168,109,219,182,154,252,252,124,170,213,106,217,204,204, 76,217,238,221,187, 93,179,179, +179,213, 58,157,238,109, 74,233,213,134,180, 51, 37, 37, 69, 3, 96,180,131,131,195,222,140,140,140,221, 35, 70,140,192,166, 77, +155,112,238,220,185, 1, 41, 41, 41, 7,107,122, 76,125, 78, 0,160,148,234,187,116,233,146,123,227,198, 13,123,158,185, 43,236, + 45, 4,232,251,101, 89, 49, 66, 46, 6, 52,133,106, 60,184,123, 11,249,249,249,151,141,117, 38, 36, 36,104,125,125,125,115, 51, + 51, 51,109,108,109,109,203,194, 85,149, 96,245,228,201, 19,228,229,229, 81,134, 97,206, 26,235,204,204,204, 44, 12, 14, 14, 46, + 74, 72, 72, 16,241, 68,142,112,180, 20,163,172, 11,146,194, 86,206,135,166,168, 16,215,226, 46, 35, 63, 63, 63,178, 54,103, 74, + 74,202, 78,133, 66, 1, 0, 43,231,204,153, 99,211,183,111,223,123, 23, 47, 94,236, 94,245, 56,126,126,126,191,205,159, 63,127, +192,226,197,139,179, 54,111,222, 60, 61, 53, 53,245,169,217,142,207,250,111,201,218,218,122,218,129, 3, 7,228,165,165,165,136, +136,136,192,215, 95,127,189,145, 82,250,212,236, 72, 74,233, 1, 30,143,247, 13,195, 48,255,253,240,195, 15, 49, 97,194, 4,153, +191,191,255, 84,252, 89,229,122,202,169, 82,169,102,251,249,249,205,201,200,200, 48, 42, 16,220,189,123,119,188,159,159,223,236, +140,140,140,229,181,181, 19, 0, 76, 76, 76, 76, 12, 6, 3, 30, 62,124,152, 67, 41,173, 49,132, 82, 74,139, 61, 60, 60, 84, 6, +131,193, 73, 38,147,253,101, 0,117,117,103, 78, 78, 78,184,191,191,255,188,244,244,244,163, 0, 22, 81, 74,139,171,249,174, 16, + 66,124, 62,250,232,163,201, 75,151, 46,125, 61, 45, 45,237, 47,235, 44, 85,119, 38, 37, 37,133,247,232,209,227,203, 59,119,238, +108,166,148,174,175,165,157,235, 8, 33,165, 63,253,244,211,164,135, 15, 31, 46,169,203,153,146,146,178, 31,192,254,154, 60, 53, + 81,219,254, 85,157, 86, 86, 86,211, 39, 79,158,140, 67,135, 14, 65,173, 86,175, 73, 73, 73, 89, 86,147, 75,165, 82,157,119,117, +117,253,189, 75,151, 46,131, 87,172, 88, 33, 28, 48, 96,192, 36, 0, 27,106,114, 86,227, 28,128,144,242,113,112,183, 1,100,151, +111,183, 66,217,204, 65,130,106,239,197,245, 57, 13,186,252,145,113,167,127,221,145,156,112,173,139, 95,247,161,150,121, 69, 78, + 16,242, 25, 20,228,164,226,220,241,255,203, 73,121,124,255,156,182, 56,119,100, 67,156,250,210,188, 17,215,206,252,182, 51, 45, +241, 86,231,162,144,254,150,185,106, 23, 8, 5, 4,185,153,143,113, 33,114,239,147,212, 71, 15, 79,235,216,146, 49, 13,113, 54, +133,127,179,243,101,131, 24, 51, 33,136, 16, 34, 2,208, 75, 46,151,247,254,228,147, 79, 68,125,251,246,197,226,197,139,113,236, +216, 49,173, 86,171, 61, 6,224,120, 77,149,129,186, 94,128,103,225,236, 23, 68,228, 14,246,204,234,150,142,204,232,182,238,110, +228,198,221,120,254,229,148,129,223, 55,197,217, 88,254,110, 39, 33,164,171, 64, 32, 88,230,229,229, 85,146,152,152,216,214,202, +202,234,142, 74,165, 18,233,116,186,207, 41,165,167,154,210, 78, 7, 7, 7,155,254,253,251,103,204,154, 53,139,204,159, 63, 31, +167, 78,157,178,168,171,194, 98,140,179, 69,139, 22, 61,253,253,253,143,172, 90,183,129,159,148, 94,128,124,181, 26,106,181, 26, +133, 5, 5, 40,206, 79,195,161,223,118,104,175, 95,191,238,153,150,150,150,100,172,211,197,197,165,111,135, 14, 29,118,108,216, +176,193, 60, 59, 59,187, 50, 96, 61,121,242, 4, 44,203, 98,253,250,245, 79,178,179,179,219, 63,126,252, 56,197, 88,103,203,150, + 45,135,132,132,132,236, 94,190,250,127,252,228,244, 2,168, 11, 11, 81, 84, 84,132, 98,141, 6,165, 5,233,216,252,125, 68,201, +173, 91,183, 90,102,102,102,166,215,229, 84, 40, 20,111,118,237,218,117,193,181,107,215, 78,198,199,199, 79,172,122,159,135,135, +199, 55, 29, 59,118,236,127,246,236,217, 57, 42,149,106,107, 99,126,159, 13,165,170,147, 16,210, 87,169, 84,126,157,153,153,249, +160,180,180,116, 23,165,244, 47,109,168,242,184, 17,124, 62,127,132,141,141,141,125, 90, 90,218, 82, 74,233,175, 53, 57,159, 69, + 59,203,127, 30,104,103,103, 55, 51, 35, 35, 99, 41,165,244,247, 58, 30, 87,177,223,114, 74,233,111,117, 57,159, 69, 59, 95, 4, +167, 66,161, 24,104,103,103,183, 32, 61, 61,253,100, 90, 90,218,231,117,117,249, 58, 57, 57, 73, 88,150, 93, 96,111,111, 31,156, +150,150,182, 50, 53, 53,245,255,140,109, 39, 41,187, 84, 78, 75,148,141,183, 2,202,198, 92, 37,209, 58,214,190,170,207,105,227, +217,123,144, 88, 38,125,151,178,134,142, 0, 1,195,227, 93, 41, 46, 44,218, 84, 87,229,202, 24,167,196, 68, 54,150,101, 13, 29, + 25, 16,150, 97,152,171, 26, 77,209, 15,153,183,143,213,122,169,156, 23,241,117,255, 39, 59,107, 57,206,120, 74,105,131, 38,131, +252, 83, 48, 42, 96, 85,238, 92, 54,139,102, 0,195, 48,193, 44,203, 70, 3, 56, 64,235, 88,183,198,152, 23,224, 89, 56,251,133, + 17,101, 75, 27,222,122,185,140,241, 95,186, 89,247, 81,115, 56, 27,202,243,114, 18, 66,134,240,249,252,207,244,122,253, 87,148, +210,122,199, 71, 25,219, 78, 15, 15,143, 13, 97, 97, 97,239, 30, 57,114,228,219,164,164,164,201,205,225,108,219,182,237,202, 86, +173, 90, 77, 30, 48, 96,128,192,206,206, 14, 89, 89, 89,184,123,247, 46, 98, 98, 98,180,105,105,105, 19,227,227,227, 55, 55,212, +217,161, 67,135,133,214,214,214, 19,223,127,255,125,107, 66, 8,178,179,179,161, 86,171,233,158, 61,123,178, 52, 26,205,251,241, +241,241,149,103,245,198, 58,219,183,111,255,189,171,171,235,152,161, 67,135, 10,148, 74, 37,178,178,178,112,243,230, 77,156, 61, +123,182, 36, 45, 45,237,173, 59,119,238, 84, 86,123,234,114,186,185,185,137, 18, 18, 18,106,236, 78,244,243,243, 19,196,196,196, +212,216, 37,250, 50,253,125,114, 78,206,201, 57, 57,103, 3,143,243,194, 6,172,122, 7,185, 87,165, 60,164,236, 36,132,236,174, + 24,159,209, 84,158,133,243, 80, 36, 85, 1,232, 79, 8,225, 55,151,243, 69,161, 60, 84, 25, 61,240,220, 88,238,222,189,251,190, + 66,161,152, 82,222,109,216, 44,220,188,121,115,154, 82,169,252, 41, 49, 49,113,133, 76, 38,243,101, 89, 86, 87, 82, 82,114, 38, + 59, 59,123,106, 74, 74, 74,163, 46, 4,123,245,234,213, 47, 21, 10,197,111, 43, 86,172,248,130, 82,218,129, 16,162,213,235,245, +209, 57, 57, 57, 11,146,147,147, 83, 27,227,188,118,237,218,120,165, 82,249, 99, 98, 98,226, 18,177, 88,220,129, 82,170,213,104, + 52,145, 25, 25, 25,159, 84, 84,174,140,161,182,112, 5,148, 45,145,209,152,182,113,112,112,112,112,252, 51,105, 80,192,170,224, + 89,132,150, 23,197,249,111,166, 57,195, 85, 5, 42,149,234, 42,128, 87,154,211,153,146,146, 18, 7, 96, 88,115, 58, 85, 42,213, + 5, 0,181,174,161,197,193,193,193,193,193, 46,169, 84, 2, 0, 0, 32, 0, 73, 68, 65, 84, 81, 21,163, 46,246,204,193,193,193, +193,193,193,193,193, 97, 60, 4,101,235,144,252,133,134,244,173, 18, 66,140,186, 44, 65, 67,252,156,147,115,114, 78,206,201, 57, + 57, 39,231,124,249,156, 53,184,223,168,118,151,170,154,239,133, 28,131,213,160, 65,238, 13,150,191, 32, 3,235, 56, 39,231,228, +156,156,147,115,114, 78,206,249,124,157, 47, 27, 92, 23, 33, 7, 7, 7, 7, 7, 7, 7, 71, 51,195, 5, 44, 14, 14, 14, 14, 14, + 14, 14,142,102,134, 11, 88, 28, 28, 28, 28, 28, 28, 28, 28,205, 12, 23,176, 56, 56, 56, 56, 56, 56, 56, 56,154, 25, 46, 96,113, +112,112,112,112,112,112,112, 52, 51,207,116, 22, 33, 7, 7, 7, 7, 7, 7, 7,199,191,145,167, 42, 88,132, 16, 46,109,113,112, +112,112,112,112,112, 60, 55, 94,150, 44,194,117, 17,114,112,112,112,112,112,112,112, 52, 51, 92,192,226,224,224,224,224,224,224, +224,104,102, 24,224,229, 41,199,113,112,112,112,112,112,112,188,152,188,108, 89,164,162,130, 21, 86,254,196,194,158,103, 99, 56, + 56, 56, 56, 56, 56, 56,254,181,188, 84, 89,132,155, 69,200,193,193,193,193,193,193,193,209,204,112, 99,176, 56, 56, 56, 56, 56, + 56, 56, 56,154,153,103, 26,176, 8, 33,237, 56, 39,231,228,156,156,147,115,114, 78,206,201, 57,255,109,112, 21, 44, 14, 14, 14, + 14, 14, 14, 14,142,102,134, 11, 88, 28, 28, 28, 28, 28, 28, 28, 28,205, 12, 23,176, 56, 56, 56, 56, 56, 56, 56, 56,154, 25, 46, + 96,113,112,112,112,112,112,112,112, 52, 51, 92,192,226,224,224,224,224,224,224,224,104,102, 8,128, 26,103, 2, 80, 74,175, 27, + 45,105,196,108,130,250,252,156,147,115,114, 78,206,201, 57, 57, 39,231,124,249,156,245,185, 27,146, 63,254,201, 60,211,133, 70, + 9, 33,237,154,251, 23,197, 57, 57, 39,231,228,156,156,147,115,114,206,151,207,249,178,193,127,222, 13,224,224,224,104, 34,187, + 9, 15,118,109, 92,193, 82, 5,248,162, 84,252,113,237, 62,230, 82,182,201, 78, 69, 91, 23,104,117,246,144, 74, 50,113,228,234, +131, 38, 59, 57, 56, 56, 56,254, 69,112, 1,139,131,227, 69,199,209,203, 19, 6, 44, 1, 15,142,160,165, 9, 8,105,187, 4, 64, +211,206, 44,173,189, 60,161, 99, 23,129,207, 56, 65, 91,122, 7,221,218, 44, 5,112,179, 89,218,203,193,193,193,241, 47,224,185, + 12,114, 15, 8, 8,136, 9, 8, 8, 88, 24, 22, 22, 38,126, 30,199,231,224,120,105,184,222, 94, 6,189,161,159, 86,199, 42, 15, + 71,231,218, 21, 21, 27, 60, 33,212,247, 71,180,167,105,147,156, 2,242,106,177,142,109,241,211,177, 34,251,194, 98,189, 55, 24, + 52,205, 89, 78,187,118,237, 44, 2, 3, 3, 15,251,250,250,218, 52,213,197,193,193,193,241, 79,230,185, 4, 44,150,101, 59,217, +217,217, 77,213,104, 52, 73,254,254,254,131,159, 71, 27,158, 23,157, 59,119,142,238,210,165, 75,122,112,112,112,122,112,112,112, +108,125,219, 95, 70, 20, 10,133,103,251,246,237,147,124,124,124,238, 84,221,110,215,241,245, 96,239,110,239,204,181,241, 25,218, +253, 57, 53,237,197,163,144,181, 7,195,235,113, 51,177, 72,150,150,171,179,143,137, 47,146,131,242,194, 80, 10,199, 38, 57, 89, +218,243, 74,130,198,228,220,125, 91,251,211,215, 75,204, 64,153, 30,160,196,161,169,205, 21,137, 68,147, 40,165,189, 5, 2,193, +199, 77,117,113,188,216, 16, 66,218, 17, 66, 6, 19, 66, 2,154,209,185,204,203,203, 75, 69, 8,249,168,185,156, 28, 28,141,197, +232,128, 53,172, 21, 9, 25,213,154, 68,189,217,138,168, 71,180, 38, 5,111,181, 38,103,254,227, 70,186, 55,246,192,123,246,236, +145,110,221,186,213,174,109,219,182, 59,131,130,130,206,248,251,251,123, 52,198, 19, 16, 16,112, 56, 32, 32, 96, 88,245,109,254, +254,254,111, 86,221, 22, 24, 24,120, 35, 48, 48, 48, 47, 32, 32,224,190, 49, 94, 63, 63,191,123,126,126,126,133, 1, 1, 1,247, +170,110,247,247,247,127, 51, 48, 48,240,112,181,227, 13,171,190,173, 54, 24,134,113,218,183,111,159,221,129, 3, 7,236,248,124, +190,125,245,237,251,247,239,127,106,123, 67, 9, 8, 8, 24, 23, 16, 16, 16, 93,237,185,188, 95,125, 91, 93,248,251,251, 71,251, +249,249,189, 95,205, 27, 29, 16, 16, 48,174,177,237,170, 64,161, 80,120,118,235,214,237, 76, 92, 92, 92, 11,185, 92,110, 81,245, + 62, 7,107,139, 62,209,251,191,153, 58,102,216,171,147,236,218,190,214,190,169,199,122,233,185,221, 86, 8, 61,219,141,101,169, +237,205,251,197,182,253, 7,252,135,127,229,158,198, 86,167, 55, 88,129,240,194, 16,213,178,225, 21,226,219,109,133,208,233, 66, + 89, 74,237, 79, 92, 17,218,134, 13,250,144,119,242, 26,223, 86,103, 48, 88, 67,135,238,141,114,150,227,231,231, 39,224,241,120, + 83, 39, 76,152,192, 16, 66, 62,116,115,115, 19, 53,214,245, 34, 18,212,158, 40, 95,241,231, 95,244,107, 75, 66,154,203, 73, 8, +241, 49, 49, 49,185, 76, 8,241,108, 46,231,223, 1, 33,164, 19, 0, 25,165,244,119, 0,246,132,144, 38, 15, 87, 33,132,172, 90, +176, 96,193,231,215,175, 95, 87,180,106,213,106, 62, 33,132,215,244,150,114,112, 52, 30,163, 2,214,136, 86,100,158,189,131,242, +232,172, 85,219,187,109,136,122, 96,250,237,190, 88,147,169,211,195, 67, 28, 44,109, 15,190,229, 70,150,214,246,184,186,102, 24, +136, 68, 34,220,191,127, 31, 17, 17, 17,146,121,243,230, 5,155,155,155, 95, 13, 10, 10, 90,221,182,109, 91,147,186,218, 82,221, + 73, 41, 13, 17, 8, 4, 27,130,130,130, 54, 85,188, 97, 19, 66, 66,196, 98,241,247, 65, 65, 65, 63, 85,116, 67,250,249,249,181, +186,120,241,162, 25, 33,228, 47,225,165,166,118, 6, 6, 6, 58,198,196,196,200,128,178, 74, 64, 88, 88,152, 56, 48, 48,112,171, + 82,169, 92, 15, 32, 4, 0,220,220,220, 68, 65, 65, 65,155,156,157,157,127, 32,228,233, 55,205,218,158, 59,195, 48,176,176,176, +192,246,237,219,193,227,253,249,255, 79, 8,129,133,133, 5,182,109,219, 6, 66,136, 81,207,189, 42,109,219,182, 53, 9, 8, 8, +216,227,232,232,184,154,101,217, 46, 0,208,190,125,123, 89, 96, 96,224,110,165, 82,185,166, 98,155, 49, 78, 74,105, 23,161, 80, +184, 58, 48, 48,112,119,251,246,237,101, 0,192,178,108, 23, 62,159,191, 42, 32, 32, 96, 79, 67, 94,163, 78,157, 58, 77,232,208, +161, 67, 74,135, 14, 29, 82,218,180,105,179,216,222,222, 62,114,237,218,181,214, 85,159,123, 69,229, 42, 61, 35, 59, 39,250,210, +141,248,169, 19,254, 19,214,194,217,126,180, 69,199,161,230,198, 60,247,198,242,194, 59,179,137, 29, 8,237, 21,159,164,145,180, +116,247, 55,177,243,250, 15,108, 45,248,226,115,183, 10,229,224,225, 21, 8,100,182,141,115,242, 95,185,241, 64, 35,181,108,213, + 79, 22,208,185, 27,136,137,135, 56, 50,174,208, 12,124,166,113,206, 63,249, 79,151, 46, 93, 68,189,122,245,130, 66,161,224,153, +155,155,143,174,103,255, 23,255, 53, 42, 39,168, 61, 81,202, 37,162, 11, 43, 23,124,226,175,176,150,237, 53, 38,100, 25, 49,125, +222,199,206,206,238,228, 55,223,124,227, 39,151,203, 79, 25, 19,178,254, 9,191,207,242,112, 37,164,148,158, 47,223,116, 19, 64, +104, 19,157,171,230,205,155,247,241,140, 25, 51,160, 86,171, 49,102,204, 24, 51, 0, 43,141,117,202,229,114,247, 14, 29, 58,252, +228,227,227,243,200,215,215, 87,235,237,237, 93,220,166, 77,155,196,118,237,218,109,150, 72, 36,174,181, 61,238,159,240,251,124, +153,156,245, 32, 2,208, 3,192, 0, 0,175, 0, 8, 44,255, 62,160,252, 54, 0, 64,175,106, 95, 43,170,163, 21,247, 7,213,226, + 24, 80,195,227, 2,170,108,175,250,115,245,239,107,133, 1, 0, 66, 8,173,250,181, 42,195, 91,147, 96,107, 7,229,231,203,126, +187, 36,101,239, 94, 65,204,123, 61, 17,255,209, 80, 72,239, 93,193, 23,147,191,144,202,229,150,147,135,181, 38, 61, 26,246,123, + 42,227,206,157, 59,216,185,115, 39,108,108,108,200,198,141, 27,197,195,134, 13,155,100,102,102,150, 28, 16, 16, 80,239, 27,111, + 5, 60, 30,207,176,105,211, 38,211, 33, 67,134,140,176,178,178,186,225,231,231,215,138, 97, 24,195,150, 45, 91, 76,223,124,243, +205, 97, 90,173,246,150,191,191,191, 71,108,108,172,225,210,165, 75, 96, 24,227,138,118, 49, 49, 49,250, 67,135, 14, 1, 0,252, +253,253, 61, 40,165,183,150, 46, 93, 58,226,215, 95,127,149,155,155,155,179,126,126,126,173,156,157,157,111, 44, 91,182,108,244, +238,221,187,229,102,102,102, 70,205,176, 34,132,160,184,184, 24, 18,137,228,169, 32, 69, 8,129, 70,163,129, 88, 44, 54,186,141, + 21,248,249,249,249, 88, 91, 91,223, 94,178,100,201,144,223,126,251, 77, 42,151,203, 17, 16, 16,224,109, 97, 97, 17,191,124,249, +242,161,123,247,238,149,202,229,114,163,125, 66,161, 16,219,182,109,147,141, 26, 53,106,176, 88, 44,190, 29, 16, 16,224, 45, 20, + 10,177, 99,199, 14,217,232,209,163, 7,202,100,178, 91,126,126,126, 62,198,184,116, 58,221,156, 75,151, 46, 57, 70, 70, 70, 58, +186,184,184, 76,249,246,219,111,237, 5, 2, 1, 0,192, 96, 48, 0,248,179,114, 53,250,245,222, 65, 31,207,249,230,164,166,184, + 68,187,232,139,177, 97, 2, 3, 58, 55,232, 23,241,111, 98, 55,225,129, 53,116, 2,224, 22,123, 71, 99,211,177,219,104, 62, 50, +126, 71,160,183, 41, 63, 42,182,192,142, 82,234, 2, 61, 13, 68, 84,152,241,149,129,221,132, 7, 30,237, 8,194,122, 28,141, 35, + 54,193,189, 70,243,147,146,146,224,234, 29,198,219,127, 9,246,148, 82, 87,176,240,111,144,179, 10, 2,129, 96,238,240,225,195, + 77, 18, 19, 19, 17, 28, 28, 44, 19,137, 68,115, 26,227,121,138,219,109,133,184,208,198, 5,167, 60,195, 16,237,233,216,216,182, + 61, 75,130,218, 19,165,153, 68,116,126,199, 79, 63, 43,218,135,142, 35,235, 63,113,177,178,149, 11,140, 10, 89,181, 81, 30,174, +254,184,112,225,130,245,171,175,190,138,121,243,230,217,154,153,153, 25, 21,178,158, 39, 85,195, 21, 33, 68, 90,222, 61,168, 2, +224,212, 4,231,154,121,243,230,125, 60,115,230, 76,156, 63,127, 30,203,151, 47, 71,191,126,253, 96,105,105, 89,239,251,199,219, +111,191, 45, 11, 9, 9,137, 25, 60,120,240,149,143, 63,254,120,244,254,253,251,157, 55,109,218, 36,124,247,221,119,197,195,135, + 15,119,249,228,147, 79,222,233,223,191,255,245,160,160,160, 11,195,134, 13,147, 52,182,137,229, 55,142,122,168, 43,139, 0,232, + 48, 99,198,140, 64, 66,200,254, 25, 51,102,248, 3,176, 33,132,236, 7, 96, 11,192,182,252,123, 81,181,175,182, 40, 11, 77, 21, +247, 91,215,228,168,184, 85,123,156,109,149,237, 85,143, 81,253,251, 90,169,252, 36, 39,132,116, 7,112,170,250, 14,124,138, 5, + 19,166, 46,148, 60,220,252, 53, 82,127, 90, 5, 38, 75, 5, 94,110, 26, 74, 78,253, 14,221,233,125,120,187, 75, 23,169,148,144, + 69, 13,250, 45,150, 35,151,203, 33, 20, 10,113,247,238, 93,220,186,117, 11,253,251,247, 23, 70, 68, 68, 88,248,248,248,124, 31, + 18, 18,114, 37, 32, 32,160, 67,125, 14, 66, 8,220,221,221, 49, 98,196, 8,209, 71, 31,125,212, 90, 34,145,196, 82, 74, 5,174, +174,174,120,243,205, 55,133,211,167, 79,111, 41,145, 72, 46,177, 44, 43,148,201,100,181, 86,135,106,242, 74,165, 82, 0, 16,120, +120,120, 92,222,185,115,167,107, 72, 72, 8,255,232,209,163,200,207,207,231,123,122,122, 94,217,177, 99,135, 91,112,112, 48,255, +204,153, 51, 40, 44, 44, 52,106, 65, 49, 66, 8, 10, 11, 11, 33,149, 74,255, 18,176, 10, 11, 11,255, 18,188,234, 35, 32, 32, 96, +156,155,155,219,165,157, 59,119, 58,133,134,134,242, 78,158, 60, 9,181, 90, 13, 23, 23,151,203, 59,119,238,116, 10, 9, 9,225, + 69, 71, 71, 67,173, 86, 27,237, 20,137, 68,112,117,117,197,240,225,195, 5,159,126,250,169,147, 64, 32,184, 36, 18,137,224,226, +226,130,225,195,135, 11,167, 77,155,230, 36, 18,137, 46, 24,217,101,200, 3, 0,189, 94,143, 97,195,134,153, 72,165, 82, 36, 39, + 39,131,101, 89,176,108, 89, 38, 77,205,204,190,118,246,210,245,219, 83, 39, 14,235, 94, 88, 82, 82,114, 36,242,242,173,182, 30, + 46, 78,132,208,150, 70, 55,250,223,134,101, 91,107,240,208, 59, 41, 69, 43, 22,153, 56,201, 77,109,218, 0, 79, 78,161,149, 66, + 12, 80, 34,185,116,187,200, 4, 12,237, 13,100, 89, 55,200,105, 96,123, 63, 80,105,197,165,210,118,166, 10,101, 11,100,103,103, +195,217,213, 11, 37,176, 21, 69, 95, 47, 52, 5,109,160,179, 28, 95, 95,223, 80,103,103,103,135,150, 45, 91, 34, 43, 43, 11,238, +238,238, 48, 53, 53,181,244,243,243,235,221, 80, 87, 37, 81, 45,197,200, 67, 8, 74,201, 74, 16,102, 62, 40,127, 9,248,153,157, + 16,235, 39,104,180,179,153,169, 12, 87,219,126, 86, 90, 59,122, 1,215,223,131,189,149, 8, 27,103,116,180,178,149,139, 27, 21, +178, 8, 33, 62,246,246,246,127, 92,184,112,193, 70, 34,145, 32, 38, 38, 6,109,219,182,197,215, 95,127,109,107,105,105,249,143, + 13, 89,213,194,149, 21,165, 84, 3,128, 5, 48, 18,141,152,245, 74,202, 88,183,112,225,194, 41, 51,103,206,196,185,115,231,160, + 84, 42,145,145,145,129,208,208,208,164,156,156,156, 58, 63,151,124,124,124,156,238,222,189,171,250,228,147, 79, 58,109,221,186, + 85,106, 98, 98,130,220,220, 92,252,240,195, 15,152, 49, 99, 6, 8, 33,160,148,226,199, 31,127,148,141, 29, 59, 54, 48, 33, 33, + 65,213,178,101, 75, 99,135,111, 16,148, 85, 92,100, 0, 76,202,191, 74,166, 76,153, 34, 34,132,136,203,195,165,132, 16,242,143, +249, 91,253,167, 80, 91, 22, 1, 96,179,116,233,210,112, 74,233,192,165, 75,151,134, 87,217,127,127, 29,174,170,161, 9, 0, 80, +221, 65, 41, 29, 88,245,107,213,199, 82, 74, 7, 82, 74, 7, 86,125,124, 93,199,171, 78,213, 82, 73, 36,165,180,123,245, 29, 40, +208,193,161, 85, 27,228, 30,219, 5, 41,143, 60,117, 99, 30, 92,131,179,132, 15, 29,165, 70, 85, 51,170, 99,106,106, 90,121, 99, + 24, 6,169,169,169,224,241,120,152, 51,103,142,100,242,228,201,237,133, 66,225,185,110,221,186, 45,169,203, 81, 17, 70, 46, 94, +188, 8,119,119,119, 50,115,230, 76,179,238,221,187,243, 1,224,234,213,171,112,115,115, 35,139, 23, 47,150, 15, 26, 52,136,200, +100, 50,163,171, 67, 12,195, 64, 42,149, 34, 44, 44,140,108,218,180,201, 84, 44, 22,227,192,129, 3,200,202,202,194,171,175,190, +202,223,180,105,147,169, 68, 34, 65, 84, 84, 20,242,242,242,140,246, 18, 66, 80, 82, 82, 82, 99,192,170,169,178, 85, 23,193,193, +193, 27, 29, 28, 28, 86,111,221,186, 85, 44,149, 74,113,242,228, 73,228,229,229, 97,196,136, 17,250,109,219,182, 73,204,204,204, + 16, 29, 29,141,188,188, 60,163,124,213,185,120,241, 34,220,220,220,200,172, 89,179,164, 93,186,116,209, 1, 64, 92, 92, 28, 60, + 60, 60,200,172, 89,179,164,102,102,102,171,186,118,237,186,177, 46, 7,203,178, 72, 77, 77,197,245,235,215,241,224,193, 3,100, +101,101, 33, 51, 51, 19,106,181, 26,122,189, 30, 0, 32, 83,231, 31, 88,183,105,223, 21, 19,169, 84, 22,212,222,163,197,133,216, +155, 25, 38, 82,169,204,195,181,133, 39, 33,243,185,203, 57, 85,135, 16, 2,129,214, 3,148,116, 58,127,179,192, 42,180,207, 72, + 33, 50, 15, 1, 84, 7, 16, 62,122, 4, 57,241,247,158, 41,180, 7,139, 14, 16,194, 11, 48,226, 15,138, 16, 2,126,169, 59, 64, +252,143,198,232,173,187,246,153, 36,124,252,248, 49,132, 66, 33,196, 98, 49,124, 67,222,224,239, 56,169,115, 0,208, 17, 2,180, + 49,202, 89, 5,177, 88,252,229,216,177, 99, 77, 84, 42, 85,165,179, 95,191,126, 38, 50,153,108,110,163,126, 7, 81, 45,197, 96, +100, 93,160,167, 31,223,120,160,113, 89,188, 57,213,235,126,178,198, 11, 20,211,160,211,249, 54, 53,100,185,184,184,132,121,122, +122, 62,112,117,117,237,218, 88, 71,121,184, 58,183,115,219,207, 74, 43,135,178,112, 5, 67, 17,192,147,194,193,206, 18, 27,231, +134, 89,217,154, 73, 27, 20,178,202,195,213,137,243,231,207,219, 72, 36, 18, 92,190,124, 25, 34,145, 8, 18,137, 4,237,219,183, +199,250,245,235,109,173,172,172,254, 17, 33,139, 16, 98, 73, 8,233, 67, 8,249, 15, 33,228, 13,252, 25,174, 92, 1,244, 36,132, +244, 6,224, 0, 32,138, 82,122,197, 72,103, 87, 62,159,127,160, 99,199,142, 41,124, 62,255,102,120,120,248,127,167, 79,159,142, + 53,107,214, 32, 44, 44,236,254, 23, 95,124,129,248,248,120,125, 81, 81,209, 96, 74,105,157, 31,132, 5, 5, 5,191,207,154, 53, +203,252,181,215, 94,171,248, 25,103,206,156,193,150, 45, 91, 96, 98,242,231, 40, 8, 74, 41, 6, 13, 26,132,113,227,198, 89,106, +181,218, 61,117, 57,237,237,237, 95,137,140,140,244, 64, 89,184,146,224,207,128,101,114,252,248,113, 11,137, 68, 98, 21, 24, 24, +104, 86,190, 93,246,218,107,175, 89, 11, 4,130, 70,255,141,189,164,212,152, 69, 42,168, 30,112,170, 7,160,154,238,171, 41, 60, + 53,182,113,117, 29,175, 58, 85, 63,188,194, 8, 33, 81, 53,237, 84,250, 36, 29, 98, 24, 32,227, 17, 72,249,164,236, 43,143, 64, + 74, 88,240,115,210, 27,248, 86,251, 39,166,166,166,144,203,229,127, 9, 90, 26,141, 6, 5, 5, 5, 70, 5,141,138,177, 60,150, +150,150,149, 31,218,166,166,101,179,201,173,172,172, 80, 82, 82, 2, 66, 8, 76, 76, 76, 96, 98, 98,210,160, 10,150, 68, 82, 86, + 17,142,142,142,198,217,179,103,193,231,243, 97,101,101, 5, 0,184,124,249, 50,174, 93,187, 6,145, 72, 4,107,107,235, 6,121, + 75, 75, 75,107,236, 34,212,106,181, 13,234, 34,100, 24, 6,197,197,197,244,242,229,203,184,126,253, 58,196, 98, 49,108,109,109, + 33, 18,137,144,156,156,140,219,183,111, 67, 36, 18,193,214,182,206, 42,102,173,152,153,153, 33, 55, 55, 23, 44,203, 86, 84,243, + 96,102,102,134,130,130, 2, 48, 12, 99, 84, 59, 89,150,133, 74,165, 66, 86, 86, 22, 30, 61,122,132,204,204,204,202,144, 85,209, + 69,200,209, 64,206,248,152,131, 8, 94,205,204,213,137, 51, 11, 68,230,246,110,189,128,172, 67, 0,225, 1, 2, 75,116,238,212, + 10, 73,105, 6,147,248, 71, 90, 9,116,232,131, 63, 60, 45,141,114,242, 4,189, 51,242,116,226,196, 92, 91, 51,239,118,126,200, +200,200,128, 88, 44,134, 88, 44,134,127,231, 87,240, 32,133,149,221,124,168,145,129,226, 85,163,156,229,116,234,212,169,181, 84, + 42,237,210,169, 83, 39,146,158,158, 14,177, 88, 12,137, 68,130, 46, 93,186,128, 97,152,246,190,190,190, 94, 13,122,254,247,221, + 68, 16,200, 58, 3,244,227,219, 15,139, 20,123,163, 53,158,131,134,190, 97,181,234,151, 12,175,219, 15,139, 93,161,213,127,138, +194, 82,191,198,134,172,150, 45, 91,118, 55, 53, 53,221,255,229,151, 95,186,138,197,226, 67,174,174,174,161,245, 63,234,175,152, +138,121,255,251,242,227,145, 74,203,138,112,165, 47, 4,120, 82,128, 39, 43, 11, 89,246, 54, 88,244, 81, 47, 43,153, 80,240,127, +198, 58,165, 82,233,142,117,235,214,217, 86,132, 43,161, 80, 8,137, 68, 82,121,235,212,169, 19,230,204,153, 99,107,101,101,181, +189, 49,109,110, 46, 8, 33, 86, 40, 27, 87,117, 21,192, 30, 0, 39,170,132, 43,119, 0,255,135,178,170, 85, 44,165, 52,201, 72, +103,112,223,190,125, 79,222,191,127,191,255,149, 43, 87, 28,211,210,210,254,159,189,243, 14,143,162,218,223,248,123,102,182,151, +244,108, 26, 9, 9, 1, 82, 9, 45, 32,132,222,164, 73, 87, 4, 20,165, 11, 40,138,130, 8,162,162,116, 17, 41, 98, 1,165, 35, + 40, 32, 77,145, 34, 32, 32,210, 66,135, 16, 18, 66, 72,111,155,182,201,102, 55,219,102,206,239,143, 77, 48, 66,202, 6,184,191, +123,175,119, 62,207, 51, 79,118,206,206,188,243, 61,179,155,221,119,191,167,133,207,152, 49, 3,171, 86,173,194,123,239,189,183, +157, 82, 26,186,107,215,174, 86, 23, 47, 94,108,238, 72,255,160,156,156,156,151,102,207,158,157,159,159,159, 15, 0,136,138,138, + 66,113,113, 49,102,206,156,137,233,211,237,131, 92, 91,181,106, 5, 0,200,203,203,195,242,229,203,115,115,114,114,198,212,166, +201,113, 92,250,222,189,123, 99,204,102,115, 67, 0, 18, 0, 50, 0,202,212,212, 84,151,178,178, 50,103,150,101,157, 84, 42,149, +179, 76, 38, 83,141, 27, 55, 78, 18, 23, 23, 23, 97,179,217, 50, 29,169,255,255, 16, 53,122, 17,224,209, 76, 83, 77,101,143,123, +188, 35, 56,122,254,131,111, 72, 74,233, 41, 0, 93, 30, 62,128, 37,184,158, 22,123, 10,238,145,173,255,158,193, 18, 17, 40,157, +156,145,156,153, 14, 9,200,173,199, 8,240,129,169,170,106,178,178,179,179, 49,123,246,108,195,182,109,219,110,152,205,230,152, +211,167, 79,207,169, 77,167,210,164,120,121,121, 33, 45, 45,141,126,246,217,103, 37,135, 14, 29,178, 85,150,165,167,167,211, 15, + 62,248,160,244,199, 31,127,164,245,105, 34,172,204, 96,157, 58,117,138,206,155, 55, 79,151,149,149, 69,221,221,221,225,225,225, +129, 99,199,142,217,230,204,153,163, 75, 74, 74,162,238,238,238,112,119,119,175,151,193,178,217,108, 80, 40, 20,127, 51, 40,132, + 16, 88,173,214, 71, 50, 91,181,113,230,204,153,241, 58,157,238,237,153, 51,103, 26,111,223,190, 77, 53, 26, 13, 52, 26, 13, 54, +111,222, 44,122,245,213, 87,141,215,175, 95,127, 80,246, 56,120,122,122, 34, 33, 33,129, 46, 94,188,216,120,252,248,113, 49, 0, +104, 52, 26,220,185,115,135,206,159, 63,223, 88, 92, 92,252,246,153, 51,103,198,215,166,193,113, 28,146,147,147, 81, 82, 82, 2, +142,227, 96, 50,153,160,213,106,145,145,145,241,192, 96, 25, 85,206,125,223, 24, 59,176,101,153,209,104,184,112, 35, 49,173, 93, +235, 72,175, 50,163,209,144,120, 63, 45,129,210,121,194,236,225, 15, 67,121, 31, 80,218,233,204, 13,189,235,179,207,141,144,146, +146,139,128, 85, 15,136,221, 0,177, 43, 68,114, 15,244,235,217,138,221,116,164,196, 7,132,239, 0,185,172,238,254, 45, 60,245, + 6,207,119, 62,118,169,220,173, 83,255,105,210,194,194, 66, 48, 12,243,192, 96, 41, 85, 42,244, 28, 48,154,217,120,196,228, 3, +158,118, 4,203, 58,220,103, 70, 34,145,204, 26, 59,118,172,164,168,168,232,111,154, 10,133, 2, 67,134, 12,145, 57, 57, 57,125, +224,112,221,227, 35, 37,200,149,181, 7, 79,167,223, 73, 49,250,237,253,211, 24, 58,227,163,141,138,102, 45,218, 97,242, 96, 47, +197,162,173,121,145,215,146, 12,141,192,112,239,192, 96,110,131,111,235,103,178, 26, 53,106,212, 89,165, 82, 29,220,183,111,159, +178,123,247,238,152, 49, 99,134, 74, 38,147, 29, 10, 10, 10,122,228,179,177, 46,202, 74,185, 55,230,175,220,154,123,125,103, 31, +192, 86, 90, 97,174,254,218,242,116, 60, 62,250,242,119,157,149,163,163, 28,213, 52, 26,141,175, 78,152, 48,161,224,167,159,126, +122,196, 92,201,229,114,220,191,127, 31,139, 22, 45, 42, 44, 44, 44, 28, 83,223,120,159, 50,173, 0, 92, 5, 80, 14,160, 43, 0, +101,197, 72,193, 24, 0,199, 40,165, 28,165, 52,151, 82,154,237,168, 32,203,178,239,125,253,245,215, 34,163,209,136,137, 19, 39, + 34, 61, 61, 29, 89, 89, 89,152, 59,119,238,125,158,231, 95,173,208,188, 70, 41,141,119, 68,207,108, 54,223, 41, 42, 42, 26,208, +183,111,223,226,162,162, 34,180,104,209, 2, 3, 6, 12,128,143,143, 15,252,252,252, 48,104,208, 32,132,132,132,160,160,160, 0, +163, 70,141, 42,212,106,181,125, 40,165,181,142, 66, 47, 40, 40, 72,218,185,115,103,210,235,175,191,222, 54, 61, 61, 61, 10,128, +175,213,106,117, 55, 26,141, 78, 54,155, 77,237,236,236,236, 17, 29, 29,173,153, 60,121,178,107,108,108,108,100, 70, 70,134, 30, + 64,170,163,247,224,127,129,154,188,200, 19,112,240, 49,227, 24, 80,217, 7,235,113, 13, 25, 83, 33, 68,170,254,173,138, 5,248, +104,203,238, 45,229,210,192, 16,184,132,183,132, 82, 46,135, 66, 38,133,194,213, 29,229, 60,143,245,247,115, 12,101,148, 58,254, + 1,249, 87,240,127,203, 92,241, 60,143,117,235,214,149, 47, 92,184,176, 56, 39, 39,103,242,233,211,167, 91,198,198,198, 94,175, +179, 2, 12,131,146,146, 18,236,218,181,203,184,105,211,166,123, 70,163,177,181, 68, 34,177,154,205,102,108,223,190,189,124,213, +170, 85, 41, 6,131,161,173, 88, 44,182,212,167,249,173,178, 15,150, 88, 44,182,150,151,151,183,254,225,135, 31,146, 14, 30, 60, +104,116,118,118,134, 88, 44,182, 26, 12,134,230, 91,183,110,189,243,195, 15, 63, 24,157,157,157,235,101,220,120,158,175, 54,131, +197,113, 28,100, 50, 89,189,250, 96,197,198,198,126,103,177, 88,218,109,223,190, 61, 99,227,198,141,229,206,206,206, 0, 0,171, +213,218,118,203,150, 45, 25,107,215,174, 53,213,167,131, 59, 0,152,205,102,112, 28,135,173, 91,183,154,118,236,216,145, 97,179, +217,218, 86,150,109,220,184,177,124,235,214,173, 25, 22,139,165, 93,108,108,236,119,117,105,113, 28,199, 21, 23, 23, 67, 36, 18, +225,222,189,123, 38,153, 76, 6,150,101,145,152,152,248,192, 96,121,121,186, 71,118,108, 27, 21,190, 98,237,174, 83, 42,153, 76, +214,167, 91,155,136,184,196,212, 12, 74, 73, 74,189, 2,255, 95,193, 2, 37, 8, 20,137,233, 38, 39,185,216, 74,144,179, 7,144, +184, 85, 24, 44,251,230,215,192, 31,177,241, 6, 39, 16, 72, 97,182,122,213,169,105,165, 42, 16, 40,111,166,194, 73, 36, 81,144, +156,156,156, 7,153,166, 74, 67,212,168, 73, 4,174, 36,234,213, 32, 84, 6,192,225,169, 68, 40,165, 3,212,106,181, 40, 59, 59, +251,129,214, 3,205, 70,141, 88,171,213,218,199,225,186,107, 57, 95,240,252, 27, 9,105,229,126,251,254, 52,134,188,243,209, 70, +133,130, 45, 2, 82, 86,163, 89,136, 15,102,140,105, 41,157,187, 94,219, 44, 54,206,208, 24,132, 78, 70, 51,189,195,191, 46, 26, + 53,106,212, 73,169, 84, 30,218,183,111,159, 82,165, 82,225,222,189,123,104,209,162, 5, 22, 44, 88,160, 84, 42,149,191, 6, 6, + 6,118,115, 56, 78, 0,231,239,208, 84,125, 41, 23, 51,107, 93,122,206,245,251,156,221, 88, 49,118,115,165,213, 81, 76,248,240, +231,226,162,146,242,231,207,221,176,158,112, 84,147, 82,122, 85,167,211,245,254,240,195, 15, 11,242,243,243,255,102,174, 82, 83, + 83, 43,141, 64, 55, 74,105,189,127,244, 62,101, 84,176,119, 94, 15, 3,208, 4, 64, 75, 74,169, 13, 64, 41,165,244,177, 82,215, +145,145,145,173, 3, 3, 3,241,205, 55,223, 96,253,250,245, 69, 43, 86,172, 0,165, 20, 33, 33, 33,206,143,171,153,155,155,123, +241,206,157, 59,125, 90,182,108,121,123,205,154, 53, 25,190,190,190,252,196,137, 19, 49,126,252,120,104, 52, 26,110,245,234,213, +105,157, 59,119,190,153,148,148,212,171,172,172,236, 70, 93,122,148, 82,154,159,159,127,118,195,134, 13, 23,123,246,236,233, 52, +118,236, 88,239,245,235,215,251,196,199,199, 55, 52, 24, 12, 13,242,242,242, 84,167, 79,159,150,109,217,178,197, 39, 46, 46,238, +190,209,104,188, 72,255,149, 11, 2,255,151, 81,155, 23, 1,160,173, 48, 58,230,135,254,106,235,120,206,209,115,171,125,236,192, +113, 53, 82,231,136,155,157,247,232,217,209, 77,200,178, 5, 27,215,189, 59,186,121,184, 34,168, 81, 4, 56,125, 49,110,228,228, + 96, 75,182,206, 96,165,244,203, 93,247,232,239,117,233, 60, 76,165,193, 98, 89, 22, 71,142, 28,225,182,111,223,110,161,148,126, + 91, 82, 82,242, 65, 92, 92, 92,153,163, 58, 60,207,179,227,198,141,211, 23, 21, 21,237,201,206,206,158,156,148,148,100,238,220, +185, 51,251,210, 75, 47,233, 11, 11, 11, 15, 16, 66, 38, 94,186,116,201,212,169, 83, 39,212,231,125, 76, 8,129, 68, 34, 1, 33, + 4,177,177,177,247, 35, 35, 35,155,157, 63,127,254,171,132,132,132, 23, 41,165,236,229,203,151,211,163,163,163, 91,156, 61,123, +118, 77,124,124,252, 40,158,231, 29,154,115,133, 16,242, 32, 59, 86,213, 72, 49, 12,243,192,212,213,199, 96, 1,192,229,203,151, +111, 69, 70, 70, 70, 92,188,120,113,243,164, 73,147,250, 0, 80,198,198,198,222,110,222,188,121,248,249,243,231, 55,191,250,234, +171,125, 97,111,243,119, 8,139,197,130, 33, 67,134, 24,116, 58,221,225,210,210,210, 49, 55,110,220, 48, 68, 71, 71, 87,150, 29, + 41, 46, 46, 30, 83,143,215,104,254, 23, 95,124,241, 17, 0,240, 60,191,121,229,202,149, 19,102,206,156,169,201,204,204,124, 96, +176,242,242, 11, 79,116,120,110, 26, 87, 80,172, 51,111, 92, 57,235, 5,133, 92, 38,253, 96,233,198,147, 86, 22,231,107, 85,254, + 95, 69,202,149,128, 50, 89, 47,244,112,147,173,254,114,131,100,236,160,198,242,168,240, 64,187,185,146,184, 33, 54,174, 24, 31, +125,182,139,255,116,138, 38, 25, 60,210,193,225, 78,157,154,106, 81, 9,202,173,121, 19,250, 72,100, 75,190,157, 30,220,113,192, +187,178,136,168,103, 30, 24,161,248, 91,151,176,114,209, 52,254,211,201,238,201,224, 73, 22,108,112, 40, 75, 0, 0, 54,155,237, +133,165, 75,151, 30, 30, 59,118,172,170, 89,179,102, 15, 52,239,223,191,143, 79, 63,253,212,104, 50,153,158,119, 76,137, 16, 48, +145,173, 56,142,243,250,254,104, 65,211,183,223,156,172, 84, 48,133, 64,242,114,187,121, 17,187,160, 85,148, 39, 62,122,211, 71, + 60, 99,201,207,145,103,190, 10,214,195, 42,137, 0,144,229,136,186, 72, 36, 58,184,120,241, 98,165, 66,161, 64, 98, 98, 34, 20, + 10, 5,228,114, 57,162,163,163,177,106,213, 42,229,235,175,191,126,168, 91,183,110,234,147, 39, 79,218, 28,173,251,249, 59, 52, +181,125, 24,137,153,245,117,210,185,101,111,185,250,180, 8,243, 68,126, 41, 48, 97,222, 47, 69,133, 37,198,225,245, 49, 87,149, + 80, 74,175, 18, 66,122, 79,159, 62,253,232,166, 77,155, 60, 34, 34, 34,144,158,158,142,145, 35, 71, 22,104,181,218,238,255, 1, +230, 10, 0,202, 0, 52, 0,144, 0,123, 95,164,187,132, 16, 41,158, 96,121,182,184,184,184, 43,169,169,169,190,227,199,143, 71, + 73, 73,137,219,136, 17, 35,112,239,222, 61, 36, 36, 36, 92,125,146, 64,141, 70, 99, 44, 33,164,249,219,111,191, 61,122,214,172, + 89, 29,157,156,156, 26, 81, 74,105, 73, 73, 73, 50,199,113,103, 0,108,167,212,241,117, 56, 43, 12,211, 93, 66, 72,114, 82, 82, +146,247,230,205,155, 93, 97,191, 7, 0, 96, 4,160, 3,144,251,184,166,240,127,152,216,127,211,185,143, 15,165,212,161,237,133, + 70,232, 56,182, 49, 57,245, 82, 48, 74, 71, 5, 67, 63,182, 9, 57,243,124, 99,116,173,237, 28, 0, 81,213,149,183,110,221,154, +218,108, 54,122,244,232, 81,218,175, 95,191,178, 78,157, 58,157,137,142,142, 14,113, 36,142,135, 53,187,117,235,118,184, 77,155, + 54,195, 31, 46,123,230,153,103, 70, 84, 45,235,218,181,235,173,174, 93,187,234,186,116,233,114,207,145, 56,187,116,233, 18,223, +177, 99,199,178, 46, 93,186,196, 87, 45,111,219,182,237,224, 30, 61,122, 28,172, 90,246,204, 51,207, 12,122,184,172,166,186,247, +234,213, 43, 61, 33, 33,129,166,165,165,209,254,253,251,103, 85,150,247,236,217, 51,253,218,181,107, 52, 33, 33,129,246,237,219, + 55,171,186,115,107,210,172,186,181,105,211,102, 98,231,206,157,207, 62, 20,243,132,135,203,106,211,236,220,185,243,217,182,109, +219, 78,120,184,172, 77,155, 54, 19, 31,231, 53,170,186,249,250,250,134,182,106,213, 42,111,229,202,149, 52, 56, 56, 56,175,234, +115,205,186,141,251,176,184, 68, 95, 50,115,254, 55, 59, 53, 17, 67,154,215,183,238,245,221,254,107, 53,111, 71, 72,232,159, 17, + 29,233,233,136,131,241, 91, 3,111,143,233,173, 50, 93,222,222,151,210,248,119,233,249, 93,227,105, 76,132,148,251,243,171,128, + 4,122, 58,252, 16,253, 35,180, 11, 61,212, 88,234,144,230,233, 38,157,233,233,240, 67,113,155, 3,111, 15,233,162, 49,111,223, +186,142,222,189,123,151, 30,216,187,157,182,143, 80, 86,104, 70, 28,165,167, 35,186, 59,164, 89,101,107,221,186,117,199,152,152, + 24,253,206,157, 59,105, 98, 98, 34,253,237,183,223,104,135, 14, 29, 12,173, 90,181,234,238,120,221, 65,232,169,200, 33,182,223, +195,206,204, 25,169, 46,158,208, 71,110, 26,217, 93,106, 30, 28, 35,177,244,110, 45,177,117,140, 16,113, 45,130, 25, 62, 34, 0, +180,119,180,194, 68, 79,135,253, 65,207, 68,244,113, 52,206,144,144,144,180,160,160, 32, 90,211, 22, 26, 26,170,237,218,181,171, +232,113, 94,247,118,161, 8,236,213, 86,150,125,252,219,238,116, 96, 23,167,130,246, 81,162, 30, 79,250, 94, 2,208,202,211,211, + 51,127,211,166, 77,212,219,219, 91, 11,160,217,127,196,251,211, 94,230, 14, 96, 48, 0, 77,197,190, 26,246,249,135,130,159, 64, +179, 67,239,222,189,173, 87,174, 92,161,247,238,221,163,135, 15, 31,166, 29, 59,118,180, 1,232,246,184,154,255,138,186, 11,154, +194, 86,185,145,138, 27,245, 47,129, 16, 18, 69,171,233,108, 24, 29, 29, 77,251,244,233, 99, 60,117,234,148,222,108, 54,191,118, +233,210,165, 3, 79,170,249,175,136,243, 95,161,217,163, 71,143,179, 12,195, 4, 87, 12, 1,206, 58,118,236, 88,107, 0,232,222, +189,251, 89,150,101,131, 1,128, 82,154,117,252,248,241,214,255,206, 56,255,149,154,126,126,126,161, 12,195, 28, 1, 96,202,200, +200,120, 48,218,201,171,217,224, 24,119, 55,151,238,197,197,186,171, 57, 55,247, 31,250,119,199,249, 31,173,121,184,137, 20, 78, +210, 54,224, 48,251,230, 61, 67,163, 15, 54,228, 55, 30,208,187,131,120,243,174,211,252,178,169, 94, 73, 29, 34, 85,247, 65,248, + 79,193,153, 46,162,107,138,201, 97, 77, 37,121, 6, 16,207,190,150,100, 8,156,249,117, 81,211, 94, 3, 39,176, 63,239, 94,199, +127, 54,213, 35,169, 67,164, 58, 13,192,167,224, 13,231, 28,214,172, 66,116,116,116, 71,153, 76,118,104,212,168, 81,234, 29, 59, +118, 24,203,203,203, 7, 92,185,114,165,214,236,247, 35,154,231,194, 27,194, 70, 22, 1, 52,160,182,243,236, 48,119, 97,227, 23, +160,123,124, 90,125,226,124, 28, 28,209,108, 31, 70, 2, 85, 78,178, 95, 12, 38,219,116, 71, 50, 87,142,104, 18, 66, 90,185,185, +185,109, 43, 42, 42, 26, 65, 29,200, 92,253,127,214,157, 16,162,129,125, 34, 70, 17,236,211, 22,220,162,117,244, 97,114, 64,179, + 19,203,178,239, 53,110,220,184,197,189,123,247,110,114, 28,247, 25,165,244,228,147,104, 62, 9,130,230,255,251,100,163,255, 85, +252, 91, 12, 86,231,206,157, 47,115, 28,119, 88, 34,145, 44, 58,121,242,228, 35, 31,212,143,163,249, 36, 8,154,130,230,127,165, +102, 21,147,117, 57,161, 44,120,201,247,133,129,239,140,112, 75,171,203, 92,213,169, 89, 97,178, 46,222, 49, 4,125,186,189, 52, +112,198, 8,117, 90, 93,230,170, 86,205, 42, 68, 71, 71,119,148,203,229, 91,140, 70,227,196,186,204, 85,181,154,241,145, 18, 20, + 89, 27,192,198, 70,129, 65,205, 75,237,240,212, 0, 49,123, 19,217,200,197, 11,113,150,250,198, 89, 95, 4, 77, 65, 83,208, 20, +120,152,127,203,172,199,127,252,241, 71,244,191,227,186, 2, 2,255, 40,250, 38,153,113,184,201, 37, 56, 73,151, 70,135, 42,166, +237, 89,164, 48,128, 39, 25, 32,252,170,218,204,149, 3,154, 23,161,180, 46,125, 38, 84, 49,125,239, 34,133, 1, 64, 14, 40, 86, +214,102,174, 28,229,242,229,203,127, 2, 8,126,108,129,240, 56, 11,128,251, 0, 73,193, 39,181,204,142, 61, 15, 20,248, 23,254, +122, 20, 16, 16, 16,168,131,255,184,101, 37, 4, 4, 4,234, 65,223, 36, 51,226, 35, 99, 81,192,206, 4,135, 96,200,108,169, 40, +182,229,160,111,138,249, 9, 53, 47,160,128,188, 5, 30,161,144,218,146, 80,108,126, 50,205,167, 14,165,118, 19, 37, 32, 32, 32, +240,159,137, 96,176, 4, 4,254,219,177,103,117, 50, 42,182,255, 92, 77, 1, 1, 1,129,255, 33, 8,128,168,234,158,168, 79,219, + 42, 33,164, 90,141,218,112,160,243,166,160, 41,104, 10,154,130,166,160, 41,104, 10,154,255, 48,205,186,180,255, 41,125,187,254, + 45,157,220, 5, 77, 65, 83,208, 20, 52, 5, 77, 65, 83,208, 20, 52,255,201, 8, 11,233, 10, 8, 8, 8, 8, 8, 8, 8, 60,101, +254,173,125,176,148,158,161,190, 16, 49, 45, 8, 79,195, 1,128, 50, 36, 30, 54,254,186, 33, 63,193,225,245,169,106,130,120, 55, + 87,170,197,236,118,189,149,123,137,230,222, 48, 60,121,180,246, 57, 88, 0, 4, 2, 72,165,148,158,121, 26,154, 2, 2, 2, 2, + 2, 2, 2,255, 60,106, 52, 88,161, 29,134,254,161, 82,168,154, 2, 0, 79, 41, 56, 30, 40,183,246,204, 32, 0, 0, 32, 0, 73, + 68, 65, 84, 41,202, 59,151,122,253,183,161, 0,224,215,172,231, 94,169,202, 51,134,231, 41,120, 74, 97,227, 41,108, 38,227, 93, +109,220, 65,135, 86,158, 87,123,133, 13,237,213,187,215,176, 1, 3,158, 11,107, 30,213,188, 9, 0,220,184,121, 35,233,151, 95, + 14,222, 81,123,133,237,209,231,221,217,251, 36, 21, 83,139,197, 31,182,125,166, 93,159,216,216, 11,115, 1,188,255, 36, 90, 85, +144,208, 51,253,183,146, 78,191,246,124, 74,122, 2, 2, 2, 2, 2, 2, 2,255, 64,106, 52, 88, 42,133,170,233,137,253, 27,188, +246,254,145, 14, 0,232, 21,237,131, 79, 62,223, 52,132, 16,114, 7, 0,158,127,253,243,208, 15,222, 30,131,179,183,180,160,148, +162, 85, 83,119, 12,121,249,117,135, 46,170,240,137,108, 59,226,197, 23, 95,154, 57,115,198,160,187,119,239,166,236,216,177,227, + 15, 0,232,220,165, 75,211,197,139, 23,191,184,220,205, 93,166,240,137,204, 52,230,196, 61,214,250, 65,106,159, 38,158, 17,205, +218, 76,216,254,221,103,162, 30,253, 71,142, 87,251, 52, 89,169,207, 73,202,127, 28, 45, 89, 64,179, 96, 23,177,228, 19,194, 48, + 34, 23,175, 32, 47, 0,112, 11,104,245,139, 95,179,126,156, 92,174,184, 81,102, 52,110,201,187,125,120, 61,253, 87,118,102, 19, + 16, 16, 16, 16, 16, 16,248,175,162,214, 38, 66,181, 92,132, 59,247,237,173,117,174, 74, 96,210,171,207, 35, 55, 55, 39,212, 98, +227, 49,122,196, 80, 92,185,147,141,132,251, 90, 80, 10,132,250, 59,188,150, 48, 88,240,109,198,141, 31,215,245,200,209,163, 23, + 63,252,224,195,173,132,224, 28, 0,172,251,246,187,152,143,230,125, 52,113,244,171,163,159,221,189,123,247, 45, 60,230, 2,141, +140,196,117,229,167,139, 62, 81,103,230,151,151,191, 57,227, 93,118,230,219,111, 45, 7,240,106,125,117,100, 1,205,130, 35, 2, +252, 23,253,113,116,183, 82,169, 84, 98,253,250,245, 50, 96, 63, 62,158, 57, 78,254,220,128, 1,224,192,118,248,236,171, 29, 45, +142, 74,165,227, 61, 67,159, 29,154,159,240,219, 19, 55,109, 10, 8, 8, 8, 8, 8, 8,252,247, 83,107, 39,119,142,167,136, 79, +206, 65,124,114, 14, 46,196,107, 97,230, 68, 88,190,240, 61, 44,253,120, 22, 10, 12,192,190, 63,211,113,231,126, 14,238,220,207, + 65, 65,177, 30, 15, 79,251,247,240, 8,131,207,223, 82,182, 94, 53,203,229,179,190,109, 84,221,220,221,220,220, 18, 47,110, 45, +251,232,229,220,136, 79, 94, 76,151,136,229,222, 25,110,222, 13, 59,236,218,189, 59,210, 91,227,165,114,118,118,153,229, 30,222, +123,131,107, 80, 55,151,218, 52, 31, 70,237,211,172,235,192,231,250, 63,231,227,227,205,189,182,234, 82,124, 84,120,168, 45, 36, + 52,188,155,218, 39,172,107, 77,231, 84,167, 41, 11,104, 22,220,196,215,123,209,169,195,187,149,229,229,229,184,121,243, 38, 10, + 10, 10,236, 79, 18, 2,134, 97,209,176,129, 47,214, 44,153,161,252,248,189, 41,209, 50,185,114, 63, 33,132,212,166,249,164, 8, +154,130,166,160, 41,104, 10,154,130,230, 63, 85,243,159, 6, 3, 0,132,144,106,155,183,146,210, 11,112, 39, 57, 27,173,195, 27, +160, 73,144, 15, 46, 38, 22, 97,251,137,116,108, 60,154,130, 19,215,181,224,197, 78,200, 41, 37,184,155,154,139,132,148,252, 58, +167, 85,102,165,226, 17,211,151,233,102, 70, 6,151,180, 63,185,115, 26,252,212,137,145,239,125, 94, 60,141,149,138, 71,120,249, +184,238,152,249,214,228,151,157,148, 10,169,217,100, 70,163,160, 0,249,148,137,227,198, 74,212,170, 29,142, 86, 70,163,137, 84, + 73, 21,170,173,139, 62,154, 33, 95,177, 55, 49,173,204, 76,203,118,159,205,186, 55,115,246, 71, 37,172, 88,241,173, 70, 19,169, +114, 68, 71, 22,208, 44, 56,208,195, 99,209,153, 35,187,149, 22,139, 9, 89, 89, 89, 48,155,205,176,217,108, 15,142,161, 0, 74, +141, 54, 36,103, 27,209,181, 75, 71,182,117,171,102,225,154,240,126,175, 57, 26,171,128,128,128,128,128,128,192, 95,212,228, 69, +254, 91,169, 49,131, 85,102, 44,187,251,202,107, 51,243,154, 58,101,155,135,118,143, 0, 40,160,205, 78, 65,220,197, 35, 72,188, +124, 20,165,218, 52, 80, 10, 4, 5, 53,132,196,152,108, 94,183,246,235, 60,222, 86,126,183, 38,189,193,189,253,252,239,102,170, +152,101, 51, 27,158, 75, 76,200,246,156, 58,115, 19, 18, 19,178, 61,151,205,108,120,238,110,166,138, 81, 74,184, 14,175,142, 28, + 76, 6, 15,232,139,247,222,155,137,193, 3,250, 98,230,228, 23,137, 92, 42,110,239,104,101,202,165,242,165,179, 63,156,239,148, + 83,108, 49, 95, 72, 40, 49,169,149, 74,217,159,241,101, 6, 19, 85, 88, 6,141,152,164, 53, 73, 68,243,235,210,144, 5, 52, 11, +246,117,118, 94,116,246,216, 79, 74, 74, 41, 50, 50, 50, 96,177, 88, 96,181, 90, 97,181, 90, 31, 28, 87,172,183, 34, 77,107, 68, +106,158, 1, 55, 83, 74,208,175,111, 95,165, 72, 44,125,217,209, 88, 5, 4, 4, 4, 4, 4, 4,254,185,212,104,176, 18,206,238, +237,124,249,216, 86,239,252,220, 92,157, 74, 38,130,136, 97,144,151,113, 15, 91, 62,127, 11,187,191,156,129,226,236,187,160, 20, + 80, 72, 88,152,244, 5,186,236,171,187,188,243,107, 25, 65, 72, 96,125,246,171,109,247, 27,165,100, 83,151,237,135,245, 98, 0, +216,126, 88, 47, 78,201,166, 46, 95,109,187,223, 72, 74,181,224, 57, 14, 3, 6, 63,143,173,155,215, 35,166,199, 96,236, 62,157, + 6,131,209,226,208,250,103,114,239,208, 32, 47, 31,159,231,167,143,238,233,244, 76,168,155, 58, 36,192,149,101,197, 18,155, 84, + 44,227,127,190,164,203,236, 51, 96, 40,163, 84, 57,247,149,123,135, 6,213,166,227, 34,150,124,242,231,209,159,148, 44,203, 34, + 45, 45, 13, 22,139, 5,102,179, 25, 38,147,233, 65, 6,171,196, 96, 69,102,129, 17,233, 90, 3,210,180, 6,220, 78, 43,129, 84, +229, 6,171,213, 90,239, 25,111, 5, 4, 4, 4, 4, 4, 4,254,121, 56, 52,209,104, 86, 94, 33,220,157, 88,104,252, 26,225,165, +183,150, 3, 0, 56,222, 6, 10,251,244, 12,142,228,244, 40,196,191,189, 49,186, 81,114,144, 47,209,189,220, 79,105, 4,128,151, +251, 41,141, 65,190, 68,247,198,232, 70,201, 6,206,205,194,113, 28,206,220,202,195,178, 31,111,227,195, 77,215,113,228,146,227, +125,198, 69, 98,197,244, 79,151, 44, 86,138, 88, 66,110,165,150,234,179, 11,109,122,137, 68,108, 17, 75, 69, 86,189,153, 24, 83, +180, 92, 65,223,225, 83,239,179,172,120,106,157,177, 82, 30,148, 82,152, 76, 38,152,205,230, 7, 91,101, 6,171, 80,111, 65, 86, + 65, 57,210,180, 70,164, 87,108,185, 69, 70, 8, 3, 9, 5, 4, 4, 4, 4, 4, 4,128, 42, 6,139, 16, 66,171,107,255,228, 1, + 36,166,104, 33, 19,241,240,111,216,228,175,142,236, 20,160, 20,176,218,120,135, 46,180,255,104, 86, 70,112,131, 50, 58,107,121, + 90, 76, 84,184,199,245, 41,163, 2,226,163,194, 61,174,207, 90,158, 22, 19,220,160,140, 90,121, 41, 71, 41, 5,229, 41, 40,165, +160, 20,224,121,199, 13, 11, 33,108,251, 86,225,129,162, 79,118,220, 77,157,250,117, 66, 60, 17,137,172, 82,169,212,230,237,162, + 32,254,158, 10, 81,169, 9,229, 97, 81,173,173, 4,104, 93,155,142,206,106,153,215,177,207,112,131,197, 98, 67, 64, 64, 0,204, +102,243,131, 38,194,202, 12, 86,177,222,130,204,194,114,164,107,141, 72,211, 26, 97, 44,231,112, 35, 62, 5,132, 97,133, 78,127, + 2, 2, 2, 2, 2, 2,143, 73, 77, 94,228,191, 17, 6, 0, 40,165,164,114,171,238,160,192, 0,111, 92,184,153,138,134,222, 50, + 56,187, 56, 33, 62, 41, 3, 12, 43, 2,203, 16,216, 56,199,239, 3, 53, 91,127, 92, 49,203,101,121, 90, 54,119,254,235,109,247, +238,166,101,115,231, 87,204,114, 89, 78,205,214, 31,237,113,216, 39, 53,229,171,252,117, 88,155,242, 94,158, 46, 50, 81,108,146, +190,144,176, 34,147, 68, 44, 50,249,122,200,136,175,167, 66, 20,224,161,144,170,228, 98,198,215,219,155, 7,165,222,181,233,152, +210,111, 37,231,148,148,204,237,220,251,121,131, 88, 44, 70,112,112,240,131, 12, 86,165,193,178,103,176,140, 72,211, 26,144, 83, + 88, 14,133,140,193,181,115,199, 13, 28,103,221,226,120,196, 2, 2, 2, 2, 2, 2, 2,149,212,229, 69,254,219,168,123,169, 28, + 74,161, 82, 42,192, 51,114,156,185,148,132,240,136, 22,216,116,224, 34,154, 68,181, 67,118,169, 13,180, 30,203, 25,206, 88,109, +184, 2,224,202,224,222,126,254, 67,251, 53,120,150, 66,252,219, 87, 59,116, 25, 0,176, 33,102,104,133,177,178,103,174,120,106, +159, 38,194, 81, 8,144,149,150, 87,166,110,228,163,194,237,116,179,201, 73, 41,183,185, 42, 37, 34,141,139,148,117, 86,136, 68, + 34, 9,195, 20, 23,107, 75, 1,146, 85,151,150, 41,253, 86,178, 44,160,217,220, 46,253, 70, 46,250,227,240, 78,101,227,198,141, +113,237,218,181, 7, 77,132,134,114, 27, 72,169, 5, 98, 5, 69, 72, 3, 53,226,175,252,193, 21,228,101,198, 21, 37, 28, 94,239, +112,192, 2, 2, 2, 2, 2, 2, 2,255, 88, 28,114, 71, 60, 79,161,241,116,131, 76,237,130,100,173, 25,122,104,160, 51, 18,240, + 28,192,217,106, 54, 65,132,144,106, 59,125,239, 63,154,149,177,239,168,118,195,254,163, 89, 25, 85,203,237, 77,131,246,230, 65, + 74,105,181, 77,132, 53,105, 82,202, 29,250,229,183, 51,133, 67,218,123,185, 50, 98,177, 81, 42, 99, 45, 10,185,216,170,148,137, +224,229, 34,145,250,187, 73,100, 39, 15,254,192, 16,158,158,112, 68,211,148,126, 43,249,126, 94,222,220, 30, 3, 70, 25,188,125, +124, 48,122,244,104, 52,108,216, 16, 0,224,174, 98, 16,232,198, 64,100,202,193,169, 3, 27,202,226, 47,255,126, 25,156,105,104, +213,217,220,107,138,243, 73, 16, 52, 5, 77, 65, 83,208, 20, 52, 5,205,127,170,230, 63, 13,135, 22,123,110,236,171, 66,211, 6, + 42,148,155,189, 97, 52,115, 40, 51,217, 80,106,176, 66,103,176, 34, 37,199,128,132,147, 79, 30, 8,133,221, 84,129, 18,240,148, + 2,196,222, 76,232,104,162,176, 76, 92,178,252,211,197,159,140,220,185,107, 47,125,179,191,175,255,133,187,198,116, 25, 43, 54, + 43,101,140,200, 89,193,112,247,147,239,103, 29,253,229,135,102, 6,185, 97,140,163, 49, 85,102,178,194, 90,247,248, 4, 20, 34, +179, 81,167,154,221, 49, 18, 71, 14, 31, 52, 74,207, 92,182, 18,145,244, 38,207, 89,182, 21, 37, 8, 75,229, 8, 8, 8, 8, 8, + 8, 8,252, 69,157, 6,203, 96, 52,220,125,118,216,132,138, 5,159, 41, 56,206,158, 89,226, 42,155,242,120, 10,206, 98,172,113, +254, 43, 71,225,120,254,226, 55,155,126,236,223,178, 85, 59, 54, 50,208, 9, 37,197,249,184,116,225,156,141,242,252, 57, 71,206, +167, 41, 41, 38,181,119,248,139,195,159, 31,242,195,248,201,111,234, 59,119,237,174,244,240,112,182,229,231, 21,148,108, 89,191, +179,104,239,206,239,155, 17,158,127,133,166,164,152,234, 19,151, 41,253, 86, 50,128,151, 1,128, 16,210, 3,136,236, 90,150,117, +125,160,158, 62,154, 9, 19, 16, 16, 16, 16, 16, 16, 16, 0, 28, 48, 88,137,231,246,214, 56,183,213,211,164,176, 48,119,244,182, + 31,246, 44,252,126,231,129,142, 38,139,165, 1, 15, 54,157,179, 90, 79,201, 74, 11, 62,114, 84, 67,159, 27, 31, 71,130,130,218, +124,247,229,242,183,191,253,106, 69, 79,240, 92, 19, 16,114,159,240,244,132, 94,110, 24, 79, 51,235,103,174,170, 33,159,116,250, +181, 55,128,199, 90, 56, 90, 64, 64, 64, 64, 64, 64,224,127, 3,135,154, 8,255, 63, 40, 76,186, 80, 10,224,205, 39,213,169,200, + 80, 45,169,216,158, 42, 21,107, 47, 9, 83, 49, 8, 8, 8, 8, 8, 8, 8,212,138,227, 67, 0, 5, 4, 4, 4, 4, 4, 4, 4, + 4, 28,130, 0,168, 97, 84,158,227, 43,101, 63,206,104,130,186,244, 5, 77, 65, 83,208, 20, 52, 5, 77, 65, 83,208,252,231,105, +214,165, 93, 31,255,241,159, 12,249, 87, 14,126, 35,132, 68, 61,237, 27, 37,104, 10,154,130,166,160, 41,104, 10,154,130,230, 63, + 79,243,159,134,208, 68, 40, 32, 32, 32, 32,240, 63,135,103,232, 32,181,103,232, 32,181,163,199,107, 34,135,123,107, 34,135,215, +186, 18,136,128, 64, 85,254, 99, 58,185,255, 55, 67, 8,145, 1,224, 41,165,150,127, 87, 12,110,110,193,206, 54, 39,207,189, 12, +111,250, 84,151,126,253,183,167,169, 77, 8,145, 69, 70, 70,182, 2,128,184,184,184,171,148,210, 39, 29,141, 9,149,119,216, 40, + 55,103,215,215, 44,188,153, 51,148, 25,190,209,231, 36,236,126,242, 72,255, 66,163,137, 84,153,101,138,101, 32,180, 31, 40, 24, +202,144,227,108,137,245,157,226,226,107,186,218,206,107, 56,120, 73,248,248, 23,158,251, 96,195,238,131, 11,211,246,207,137,127, +248,121,247,126,107,156,222, 28,221,115,214,151, 63,254,242,105,254,129, 89,250,167, 25,243,255, 10, 13, 59,189,228,106, 19,249, +176, 89, 39,151, 23,212,231, 60,255,176,152, 91, 98,177, 88, 99,177, 88,242, 50, 19,206, 59,212,108, 17, 16,222,225, 10,203, 50, +126,156,141,207, 72,191,115,182,205,227, 69,252,191,133,210, 47,188, 21,225,184,247, 40,207,137,121,176, 43,203,181,137,103,158, + 68,207,207,207, 79,225,226,226,210,197,217,217, 57, 64,169, 84,202,139,138,138,140, 69, 69, 69,105,169,169,169, 39, 40,165,182, +167, 21,119,125,208, 52, 27, 50, 71, 36,101,230, 85, 60,254, 68,123,107, 95,173,131,162, 52,205, 6, 47, 36, 12,153, 83,241,120, +137,246,214,254, 15,254, 63,226,172, 11,239,230,195,218,129,242,111, 51, 12,219,129,163,182,197,121, 55,246,127, 93,159,243, 99, + 98, 98,134, 88,173, 86, 89,229,190, 88, 44, 54,157, 59,119,110,223,211,143,244,127,147,122, 27, 44,255,200,225,110, 86, 17,253, + 88,196, 50,207,243,148, 58,101, 95,221,165,250, 87, 4,246,180, 8,108,247,202, 37,134, 97,252,171,150,241, 60,159,145,122, 97, +235, 83,249,176, 37,132,248,127, 62, 61,250,189,220, 2, 99, 9, 33,100, 65, 77,230,195,187,213,168,179,132, 33,193,132, 16, 48, + 4, 96, 25, 2, 0, 89,105, 23,182, 61,178,248, 52, 33,196,215, 89, 37, 10, 45, 41,179,221,164,148,214,249, 37,164,240, 8,241, + 83,121, 52, 56,213,109,232,180, 70,151,142,108,138, 80,123,135,247,212,231,198,199, 61,133,186,105,154, 52,105,210, 54, 52, 52, +212, 99,218,180,105, 18, 0, 88,185,114,101,211,166, 77,155, 22, 36, 37, 37,197, 82, 74,181,143,163,171,242, 10, 31,189,122,249, +252,173,253,250,245, 67,150,182, 12,203, 86,126,221, 77,237, 19, 58,252,105,153, 44,226, 23,173,112, 85, 41,111,190,254,246, 71, +254,253,187,183, 21, 21,235,173,248,245,196,249,209,187, 55, 46,235,225,234,218,178,121,109, 38,139, 55, 20,127,224,237, 68,251, +242,134, 98, 0, 24,245,240,243, 13,212,214, 94,238, 74,244,243,149,137,174, 1,216, 83, 87, 44,126,109, 95, 61, 34,150, 72, 2, + 9, 97,236,175, 59, 75,192, 84,188, 7,108, 86,115,234,221, 63, 54,246,121,162,202, 62, 37,188,163, 71,231, 16, 16, 15,166, 34, + 62, 66, 0,134, 97, 32, 34, 0, 40, 45,185,119,118,147,199,147, 94,131, 16,226, 18,213,212,181,217,115, 29, 59,109, 56,149, 92, +168,110,216,245,237,131,132, 50, 95,167,158,254,252,154, 35,231,203,229,114,183,159,127,254, 89,211,183,111, 95, 23,239,168, 33, +167, 28, 57, 71, 45,149, 71,254,242,203, 1, 73,223,190,142,223,102,149, 87,216,179, 96,152,109, 4, 16,243, 60, 93,201,242,116, +167,190, 32, 33,169,190,147, 9,123, 69, 13,153, 15,130, 8,135, 79,160,184,157,119,115,159,195,211,210, 84,133, 16,194, 42,188, +194,198, 40,228,242,153, 77, 67,195, 67, 83,238,223, 75, 40, 41,209,173, 48,230, 37,108,160,148,242,245,210,178,113,211,143,158, + 56,251,130, 72, 44, 38,125,186,183, 85, 17, 66,250,212, 87,163, 42,222,222,222, 67,214,172, 89,211, 56, 38, 38, 6, 0, 96,179, +217,156,119,237,218,229,179, 96,193, 2, 21, 28,248, 31,170,142, 6, 13, 26, 52,112,113,113,105,168, 80, 40, 26, 0,128,209,104, +204,212,233,116,105,153,153,153,153,117,157,235,211,106,184, 39,195, 96,254,225, 61,223,138, 0,160,207,176,215, 22, 54,234,246, +174, 27, 97,197,198,234,142,231,108,102, 21, 67,200,219,199,127,222, 68, 0,160,231,160,177,179, 53,145,195,191,212,198,237,202, +125,156,216,159, 20, 50,124, 56,235,153,104, 25, 66, 40,121, 39,186, 77,219,246,195, 6,247, 67,100, 19, 63, 12, 25, 57,101, 38, +128,122, 25, 44,171,213, 42,219,189,123,183, 63,195, 48,172,197, 98, 41, 31, 57,114,100,222,147,196, 22,210,233,213,179, 32, 36, +192, 98,179,125,151,122,190,201, 66, 74,231,253,237,125, 67,134, 15,103,125,239,139,230,130, 48, 19, 41,207,167,103, 95,217,209, +225, 73,174,247,159, 78,189, 12,150,103,232, 32, 53, 43,147,220,236,214,185,189,199,156, 41, 67,165,107,119,254, 1,191, 86, 47, +102,102, 93,221,217,224, 95, 21,224,147,194, 48,140,255,254,237,107,188, 20, 50, 22, 0,160, 55,114, 24, 54,122, 90,157,231, 53, +104,251,242, 73, 16,132, 85,182,161,114,156, 77, 46, 18,137,203, 9, 0, 16,251,232, 0,133, 66,122,126,195,220, 24,221,216,129, +193,175,188,247,229,149,205, 0, 92, 1,228, 84,167, 71, 24,198,255,135,141, 43,189, 26,120,200, 33, 98, 9,244, 70, 27,134,190, +242, 14,247,200,113,132,248,111,152, 27, 51,127,116,191,160, 17, 94,125,127, 26, 6,224, 80,109,113,170,125, 34,195,157, 60,253, +126, 27, 54,105,190,159, 17,206,248, 96,225, 10,175,179, 71,119,255,209,107,200, 4, 75, 90, 70,134,193,102,177,222, 41, 40,204, +158, 81,154,149,144, 88,103,165,237,215,103,213,106,117, 99,181, 90,221,178, 95,191,126,242,153, 51,103,138,187,117,235,246,224, +249, 73,147, 38, 73, 78,158, 60,233,187,124,249,242,254,126,126,126,229,122,189,254,154, 94,175,191, 71, 41,125,164, 46, 53,225, +227,163,121,227,249, 33, 3,209,227,249,215,193,241, 4, 19,167, 78,199,145, 67,123, 38, 3,120, 42, 6, 75,205, 50,159, 76,156, +246,190,127,215,152,104,209,210, 93,119,225,162,148,160, 79,187, 54, 34, 25, 59,203,247,135,141,203, 87, 0, 24,247,240, 57, 13, + 7, 47, 9,231, 13,197, 31, 68,121, 90, 70, 14,234, 16,140, 3, 63, 88, 70,250,247,154, 5, 70,233,250, 32,147,213,164,223,155, + 78,110, 10,249,154, 6,174,172,151,140,203, 91,211,164,223,155,199,146, 14,125, 81, 90, 91, 44, 98,137, 36,112,195,151,139, 66, +220,213, 18,176, 44,129,136, 97,192,178, 4, 38, 51,135,209, 83,230, 60,141,234, 86,124,185,134,244,103,128,177, 0,192, 3,155, +140,121,137,191,214,231, 53, 33, 12,235,177,107,227,114,145,151,139, 20, 44, 75,192, 50,246,237,126,142, 17,111,190,251,177,203, + 19,198,167,233,215,209,171,237,201, 47,187,246,105, 31,229,222,226,199,115,196,181,125,191, 17, 30,249,229,138, 49, 63,236, 63, + 57,178, 97,151,119, 46, 80,202,127,150,254,199,170,163,181,233,152, 76,166,220, 62,125,251, 57, 19,145, 74,121,108,239,230, 46, +149,139,205, 91, 57,254,175,197,225, 41, 80,249, 35,134,167,192,164, 9,227,209,167,111, 63, 3,111,227, 51,106,211,254, 27, 12, +179,237,240,177, 51,154,114, 43,197,231,107,214,207, 47,211,229,207, 79,142,247, 72, 81,122,135,190,109,200, 77, 56,224,120,197, + 17,145,112,118,215,208,237,191,156, 67, 84,100, 4, 56,222,190,190,106,168,191, 10, 59, 14,158, 71,120, 88,184,125,242,102,158, + 34, 44, 64,141,174,207,189,226,176,244,223, 46, 67,186,137, 84,222,225, 59,134,140, 24,251,194,208,231, 71,194,213, 89, 13,179, +197, 20,122,226,232,161,111,191, 89,179,172, 35, 33,100, 76,125,204, 33,207,115,210,191, 30, 91,229, 0,196, 0,204,143, 21, 28, + 0, 63, 63, 63, 77,219,182,109, 31,236,219,108, 54, 52,106,212, 8,153,153,153, 97,245,213,242,246,246, 86,250,249,249, 61,183, +108,217, 50,175,238,221,187,139, 53, 26, 13, 0, 64,171,213, 54,248,253,247,223, 91,183,110,221, 58, 47, 43, 43,235, 96,110,110, +174,161, 38, 13, 43, 95, 46, 97,169,136,149,201, 20, 0, 0, 10, 48, 51,167,189,212, 66,163,209, 84,251,227,184,160,160, 80, 58, +111,222, 71, 68, 36, 18,219,143,167,148,161, 60, 87,227, 26, 35, 29, 58,116, 24,100,177, 88,228,213, 61,151,111,211,244, 47,231, +165, 35, 96,255, 10,129,136,101,139,178,174,238,214, 56, 86,123,192,171,197,224,222,190,140,248,155,129,131, 7, 7, 13,233,223, + 13,190, 26, 23,156, 56,127, 7,111,205,253, 28, 86, 27,183,202, 81,157,170,176, 44, 43,202,203,203, 75,113,115,115,243,121,156, +243,171,194, 48, 76,240,254,237, 95,120,253,254,199,165,217, 95,202,126,152,210,184,211, 88,107,229,242,119, 28, 79, 17, 38,119, + 22,119, 25,252,172,147, 71,131, 80,197,250, 47,151,138,159,244,122,255,233,212,203, 96,177, 82,118, 65,167, 14,109, 61,230, 76, + 31, 47, 93,176,254, 20,206, 29, 61,104,204,186,186,235,169,152, 43, 39,175,176, 24,194,138, 94, 35, 44,171, 34, 12,145,242, 28, +159,110, 51,155, 23, 26,242, 19,178,159, 84,155,227,129,159,254,172,167, 49,167,180,233,183, 95,125,238,229,237, 42,131,209,108, +195,184, 55, 62,196,186, 85,243,157, 52, 46, 82,152, 44, 28, 54,237,143,205,111, 81,182,130,142,237, 31,252,202,162, 13,183,246, +124,182, 45,126, 15,236, 43,254, 84, 11, 67, 24,120,185,200,176,112,199, 29, 56, 43,197,112, 87, 75,193, 60,212, 3,174,210, 92, +141, 29,104,215, 44, 46, 53,219, 8, 33, 82, 74,105,181, 31,110,106,223,168,206, 78, 26,255,221, 67, 39,204,215, 36,106, 9, 40, + 53,227,158,139, 12,195, 70, 79,113,109,226,163,128, 74,206, 34, 37, 61,187,209,187,179,102,181,145,251,134,183, 45,207,142, 79, +171,171,218, 65, 65, 65,195, 6, 12, 24,160,156, 49, 99,134, 56, 32, 32, 0,219,118, 29, 9,124,246,133, 55, 7,102,230, 20, 4, +240, 20,240,246,114, 79, 31, 63,162,255,207,191,254,250,107,106,122,122,186,120,217,178,101,237,246,238,221, 27,137,122,252, 18, +229, 40,133,209,204,129,227,120,112, 60,129,182,184,254, 45,142,132, 16,166,230, 95,213,116,112,239,110,207,136, 86,238,187,135, + 82,131, 21, 10, 9,139,187,217,101,136,137,105, 43,218,185,137,116,175,238,140,241, 47, 60,247,129,183, 19,237, 59,168, 67, 48, +188,220,148,216,248,229, 34, 28, 56,155,220, 55,183,148,192,115,208,178,215,124,101,162,103, 53, 74,201,154,110,109,154,250,244, +140, 14,196,165, 54, 77,125, 78, 95,142, 79,104,254,226,138,105,153,122,241,177,194, 67,211,170, 53, 90, 12, 97,224,174,150, 96, +253,145, 20,168,100, 98,168,228, 34,251, 38, 19,129, 97,158,108,193,120,133, 95,100, 0,203,115,227,157,253, 34,199,143,124,113, +184,223,168,145, 47, 80,194,176,216,181,231,231,193,223,127,191, 45, 91,237, 19,182,158, 99,216, 13,198,172,184,244,186,180, 8, + 1,188, 92,164,120,247,187,155,112, 82,138,225,172, 20,195, 73, 33, 70,207,150,154,199,142,147, 16,226, 54,121,112,227,254,215, +183,246,234, 30,214, 80, 29,114, 45, 73, 23, 55,126,225,165, 85, 39,139,187, 79, 95,179, 50,210, 67, 90,100, 18,125, 56,115,130, + 40, 51, 43,187,251,174,159, 79,245,240,123,102,252, 29,155,165,236,253,188,107, 59,247, 87,167,151, 30,127,182,181,127,204,112, +185, 69,111,189,113, 45, 33,163, 73, 97,185, 20,113,169, 37, 21,247, 84, 12,117,229,189,173,184,191,217, 25, 41, 40, 52,176,103, + 50, 61,152,238,244,228,217,122, 53, 69, 25, 45, 60,174, 37,235, 17, 20,218, 26, 62,190,126, 48,247,127, 41,232,226,137,159,246, +171,124, 35,150,148,101,223,126,223, 81,157,237,191,156,195,130, 37,171, 18, 65,112, 27, 0, 64, 17, 49,227,157,105, 33,159,175, + 88,243,183,178, 41,175, 79, 13,169, 79,124,149, 16, 66, 88,165,119,216,247,189, 6,141,121,161, 69,187,103,145,152,116, 15,137, +183, 46,161,103,175, 62,232, 55, 96, 40,204,166,242, 87, 54,124,187, 38, 22,192, 87, 15,159,235,228, 27,209,169,121, 84,196,247, +126,190,126, 1,148, 86, 44, 77, 70, 41,186,119,239,142, 89,111, 79,132, 65, 95,138,176,176,168,142,174,157,123,155,250,142,120, + 3, 60, 79, 81, 80,144, 95,118, 39, 62,174,151, 49, 55,254,130,163, 49, 26, 12, 6,171, 86,171,197,213,171, 87,145,144,144,128, + 91,183,110,161,160,160, 0, 46, 46, 46,245,106, 98,119,115,115,115,110,211,166,205, 75, 59,119,238,148,187,184,252,229,249,205, +102, 51,148, 74, 37,134, 12, 25, 34,238,212,169, 83,131,177, 99,199,190,234,230,230,182,189,168,168,168,164, 58,157,130,235,191, +100,249, 52, 31,178,182,255, 11,147,166, 0,128, 68,166, 78, 94,253,221,158, 91,181, 93, 91, 34,119, 14,236, 53,100, 92, 19, 80, + 10, 66,200,234,252,248, 61,213,254,144, 6, 0,139,197,162,248,241,199, 31, 27, 16, 66,254,246,253, 58,255,139, 31, 59,220, 72, +204,238,245,205,199,239,137,156, 84, 50,228,235,204,120,109,202, 52, 79, 71,235,239,213,124,240,212,182,173, 91,127,245,225,204, +137, 80, 41, 21, 56,122,254, 30,222,158,179,196, 86,152,159,183, 21,132,172,212,222,218,251,164,173, 22, 79,101,196, 91, 72, 3, + 53,156,250,196,200, 39,190,216, 77,110,182,114, 40,210, 91, 97,178,112,224, 41,133,174,204,138,184,212, 82,120,186, 72,176,254, +105, 92,236, 63,156,122, 25, 44,145, 88, 58,224,205, 49,253,165,203,183, 95,192,185,163,219,141, 89, 87,118, 41, 43,159, 11,104, + 51, 50, 57,253,210, 15,193, 85,143,119,100,132,129,194, 47, 50, 64, 68,216, 21, 29, 58,119,232, 61,233,181, 41,180, 69, 88,160, + 4, 96,112, 59,241,190,117,227,134,245, 99, 92, 2,154,175, 42,201,184,249, 65,229,151,105,125, 71, 45,240, 60,159,241,112,198, +138,231,249,135, 23,153,126, 68,147, 16,192, 85, 37,198,218,131,201,246, 95,198,160,112, 81,138,177,227,247, 12,148, 20,102,230, +183, 48,174,248,115,124,127,175, 65, 11, 55,196,237,255,250,231,220,203, 0,110, 81, 74,115,107,210, 36, 12, 32, 98, 9, 92, 84, + 18,184, 40,197,112, 81,139,193, 16, 82,229,122,127, 55, 87, 31,126,123,125, 51,128, 59, 85,205, 85, 85, 77,149,119, 88, 51,103, + 77,208,190,231, 39, 47,118,187,145,102, 1,195, 0,193, 62, 42,184,169,165, 48, 91,129, 20,173,165,162,174,206,152, 58,227, 99, +205,236,119, 38,255, 74, 72,183, 22,148,158,252,219, 23,205,195,113, 26, 12, 6,233,232,209,163,197, 86,171,213, 50,246,173,133, +189,179,115,243, 7,175, 90,252,174,204,211,211, 3,101,229, 54, 92,189,157, 18,177,228,179, 47,131, 15,157,188,184,119,246,228, +193, 7,250,246,237,235,242,227,143, 63,242,181,105, 62,140, 54, 55,255,203, 77,219,118,111, 93,185,124, 9,226, 83, 10,177,241, +219,175, 65, 57,219,218,218,206,121, 88,115,221,186,117, 94, 49, 49, 49,204,249,243,231, 11, 30, 54,160,132, 64, 85,168, 51,193, + 85, 37,129, 82, 38,130,143,171, 12, 30, 78, 18,200, 36, 12, 24,230,175, 15,145,170,154, 27,118, 31, 92,200, 27,138,113,224, 7, +203,200,141, 95, 46,194,184, 55,230,226,102,190,228, 48,163,116, 93,248,198,136,193,239,185, 43,209,175,129, 43,227,213, 51, 58, + 8, 42,185, 4,115,222, 28,141,182,151, 83,188, 50,138,249,185,133, 6,180, 4,240, 65,117,113, 50, 44,129,136,101,224,164, 16, +227,228,193, 29,121,134, 82,157,142,176,246, 12,139,213,108, 73,173,173,206, 53,213, 29, 0, 84,222, 97,179,163, 91,181, 88, 52, +101,210,120,166, 99,204, 51,148, 97, 68,200, 47,177, 16, 10,138,233,111, 76,198,212,201, 19,125, 50, 50,115, 63,250,234,235,117, + 31,168,189, 34, 22,232,243,110,127, 92,155, 38, 75, 24, 48, 12,129, 74, 33,134, 90,254,215, 86,110,230, 65, 8, 88,255,232,145, + 58, 16,128, 16,146,149, 30,187,163,218,102,175,135, 53,253,154,247, 59,126, 42, 79, 18,110,248,181,252,220,221,196, 43, 11, 47, + 94, 79,187, 72, 41, 45,108,216,245,157, 87,173, 86, 10,125,185, 13,247,115, 13,176,153, 41, 25,215, 55, 16,141, 94, 32, 97,139, + 55, 94,217, 74, 8,113,174,204,184, 60,172,153,113,110, 87,185,103,243, 97, 35, 86,126,177, 46,118,249,162,185,108, 65,137, 25, + 28, 5, 20, 82, 22,242,138, 77, 33, 97, 81, 94,166,195, 87,107,191,203,177,129, 12,163, 39,107,127,207, 63, 2, 79, 95, 30,214, +191,203, 15, 4,144, 18, 70,146,225, 23, 24, 20,216, 99,192, 24,121,207,129,175,128,179, 89,102,171,188,195,127, 47,203,141, 63, +238,136,102, 84,100, 4, 64,112, 59,239,198,190, 97, 0,224,213,124,200,158,240,176,240,144,135,203,154, 54, 13,125,196, 96,213, +164, 73, 8, 97, 20,154,144, 73, 77,195,155,207,154,242,225,186,160,172, 2, 19,220, 26, 52,197,213, 43,151,113,100,215, 87, 87, +140,165, 69,203,143,252,178,119,214,130,165,171, 90, 14, 24,242, 34,246,239,219, 57,131, 16,242, 53,181,243, 64,147,242,252,203, +155,215,175, 11, 16, 75,100,176,114, 20, 86, 27, 15, 43,199,195,106,163,200,206,206, 66,169, 94, 15,185,194, 9, 42,103,119, 88, +109,246, 76,161,201,100, 85, 77,126,101,192, 84, 0, 23,170,139,179, 81,187,209,151,192, 16,127,123,185,189, 76,194,184, 25,124, +125,125,183, 2,128, 76, 38,131, 76, 38,131,205,102,195,141, 44, 76,247,107,251,242, 28,208,138,111,118,158,207,200,190,178,163, + 77, 77,117, 15, 8, 8, 24, 88,157,185,210,235,245,248, 51,246,186,203,166, 31,143,246, 77, 73,207,105,204,115, 94, 38,133, 79, +203, 62, 0, 6,214,116, 63,115,110,236,155,218,176,219,116,102,198,148,209, 77, 87,127,183,251, 98,226,225, 5,181,166,147,131, +123,205, 54,207,154, 58,170,205,167,171, 55, 38,102,156, 90,245,118, 93,175,145, 68, 34, 17,107,181,218,212,202,253,249,107,126, +234,151,150, 91,210,235,179, 69,115, 37, 87,239,233,113,253,126, 54,198, 60, 27, 88,237,181,170,211,244,109, 54, 52, 44, 48, 40, + 96,213,170, 5,111, 33, 33,203,136, 53, 63, 93,196,169,131, 91, 47, 91,202, 75,159,203,187,117,160,206,236,129,131,223,155,245, + 50, 88,213,105, 86,126, 17,252,126, 61, 31,165, 70,187,177,178,114, 60, 74,141, 54,228, 21,155,160, 43,179, 66, 95,110,197,152, + 94,129,245,185, 84, 37,109, 1,104, 0,104, 1,196, 62,180,143,138,199,168,102, 63, 31,246,140,161, 7,236,153,216, 7, 25,218, + 42,251, 53,149, 87,158, 31, 7, 32,162, 66,147, 3,112, 17, 64, 81, 93, 1,139, 8, 33,148,210,191,150, 84,126,120,191, 42,156, +205,234,239,231,235, 11,158,102, 84,196,107, 39,168,221, 72,195,219,147,134, 43,252, 90,189, 80,150,117,117,183,195,125,178,156, +188, 66, 59, 40, 20,202,131, 75,150, 46,163, 35, 6,118,149,230,232,172,198,184,204,114,173,222, 68,109, 62,154, 38,178,165,159, +126,170, 94,188,116,249,235,123,247,240,197, 0, 62,171, 78,195,175,237,168, 75,132, 48,254, 15,146, 65, 4,160, 60,205,200,136, +221,222, 6, 0,158,164,175, 85, 89,185, 13, 44, 75, 32,174,232,147, 98, 48,115, 48, 20,231, 20,180, 48,172,250,115,124, 95,187, +185,186,144,233,115,143,101,181, 22, 74,105,173, 77, 16, 12, 33, 40, 49, 88,225,172, 16,195, 69, 37,129,171, 82,242, 32,131, 85, +131,185,186, 85,155,166,196, 98, 73,231,172,166,114,202,113,232,223, 86, 3, 47, 23, 41,124,221,100,144, 75, 69,176,114,128,209, +204,195,104,230,144,154,103, 64,169, 65,134,230, 93, 71, 54,245,244,189, 96,240, 12,106,187, 57, 63, 37,246,181,218, 98,229, 56, + 14,223,239, 62,210, 52, 51, 59,111,240,254,109, 43,100,121, 58, 43,174,167,232,145, 87,100, 6, 37, 46,152,243,193, 7,178, 15, + 63,156, 55,116,231,190,227,247, 59,180, 9,117,188,233,165,242,190,230,197,111,107,209,241,185, 47,159, 27, 56,196, 41,238,226, + 33, 36, 94, 61,254,161, 62,183,126,253,175, 2, 3, 3,185,175,190,250,202,117,237,218,181, 77,189,188,188,210,243,242,242,146, + 1,123,115, 84,163,200,152,172,223, 78,156,246,232,218,177,139, 40, 61,191, 28,158, 78, 18, 4,122, 43,113,249,236,239,102,134, +144,195,213,233, 85, 52, 3,142,242,239, 53, 11, 7,206, 38,247,189, 85, 32, 59, 57, 97,226,184,148,223, 14, 94, 44,248, 98,219, +241,101, 13,212,214,107,114, 62,111,205,229, 54, 77,125,102, 79, 27,141, 37, 95,108,195,169,203,241,121,101,140,223,162,108,147, +237,183,121, 35,171,111,237, 96, 25, 64, 44, 34,112, 82,136, 97, 40,211,233,110, 30,251, 58,180,190,247,171, 6, 94, 61,178,111, + 27, 83, 88,106, 69, 70,190,145,100, 21,148,194,198,243,112, 85, 73, 97,227,129,226,194,124,242,253,247,219, 16, 27,123,142, 1, +203, 76, 0,240,113,109, 98,164,162, 95,160, 90, 46,130, 90, 97,207, 2,169, 21, 34, 88,108, 60, 66,130, 3,176,106,254,155,206, + 26, 47,111,244, 30, 86,235, 91,231,111, 40, 84,110, 45,183,124,179, 0, 39,207, 93,235,246,251,221, 29,109,189,162, 90,126,225, + 31, 57,124, 57,227,238,103, 52, 89, 57,148,232,138, 80,110, 74,199, 51, 13,242,225,174,226,144, 82,226,139,155, 57,137,234,186, +154,179,242,111,236,185,170,137, 26,250,193,174,159, 79, 44,233,243,108, 55,220,186, 95, 98, 55, 87, 18,187,185, 18, 17, 30, 43, +214,174,179, 22,233, 74, 7,228,223,220, 87,239,101,173,202,242,226,143,193,254, 97, 12, 0, 80,123, 55,214,124,191,230,131, 45, + 19,103, 45,235,211,103,232,171,228,102,236,239,239, 3, 56, 94,179,194, 95,112,213,228, 88, 57,254,209,234, 85, 87, 86, 29,132, + 16,198,171, 73,155,237,155, 54,239, 24, 17, 25, 18,128,220, 98, 43,178,138, 44,248,227,242, 93,236, 93,247,126,113,113,238,189, +151, 97,209,235,121, 98,211, 29, 61,242,243,225,215,223,156,133,102,205, 90, 6,149,100,148, 56, 3,248, 91,223, 67,158, 37,235, + 94, 25, 63,121,132,183,151,183, 19, 95,145,193,226, 41, 69, 88, 88, 36,250, 15, 28,134,147,167,207, 34,238,214,117,123, 57, 15, + 80, 74, 81, 92, 84,144, 99,179,154, 55,215, 24, 31, 75,252, 55,173, 93,225,197, 16,192, 98,227, 97,182,242,152, 61,231, 67,243, + 91, 31,173,233,212,167, 99,139, 91, 44,248,146,180,236, 98,215,216, 59,217,205,137,216,217,247,165, 73,239, 73,140, 22, 14, 37, + 6, 43,142,239, 90, 93, 99,189,253, 26,183,140,105, 20,209,105,252,164,185,107,101, 50,150,177, 52, 11, 13, 72,238,218,190, 89, +122, 67, 63,207,210,197,171,191,127,230,236,229, 59,253,135, 61, 63, 84, 62,162,113, 36,241,243,144, 59, 77,158, 58,173,133, 79, + 72,167, 87,114, 18,207,108,173, 73, 83, 36,146, 21, 7,248, 7, 60,104, 74,244,138, 26,114, 29, 64,224, 67,135,165,230,221,220, +215, 2, 0,188,188,125,202,137, 88, 86,107,151,128,170, 84,190,143, 63,249, 98,119,255, 12,173,254,133,207, 22,205,149, 92, 77, + 46,195,213,123, 58, 72, 37, 44, 76, 22,199,187,181,113,132, 78,127,111,218, 56,113, 97,153, 13,191, 95,215,226,230,165, 19,212, +102, 41, 25, 67,137,104,172, 38,106,200, 43, 4,104, 68,129,251, 12,193,183,102, 6,155,139,175,237,171,117, 48, 79, 77, 33, 3, +128, 87,228,176, 14,132, 69,127, 86, 36,105, 11,240,225, 54,171,213,139, 97,217,252,156,107,187, 29, 30, 65, 73, 41,133, 33, 47, + 17,203, 22,127,132, 85,235,247,226, 98, 66, 33, 92,108,233,216,191,113, 17,102, 44,249, 30, 6,115,245,189, 23,234,240, 35, 26, + 66,200, 47,148,210, 1, 0,122, 1,144, 86,217, 7, 33,228,151,138,107,255,109,127,246,236,217,239, 47, 89,178,228, 86,229,177, +149,229,149,199,214, 86, 94,229,124,143, 57,115,230, 68, 45, 93,186,116,113, 76, 76,204, 15,103,207,158, 77,134, 35, 6,171,106, + 37, 8, 33, 53,254,151,123, 55, 31,252, 12,192,176, 62, 30,106, 52, 13, 14,128,106,248, 88,133,127,244,136, 50,150,101,152,205, +171,222,151, 23, 24, 69, 16,177,108, 89, 93, 23,172, 68,225, 29,222,206,201,201,233,215, 31,119,254, 68, 67,130,124,164, 63,157, + 47, 78,187,156,108,120,144,210, 45,209,166, 74,155,186,155,216, 17, 47, 14, 83, 29, 62,250,219,116,212, 96,176, 8, 97,252,191, + 88,241,169,151,147, 66, 12,134, 0, 37, 70, 27,166,191,243,158,163, 97,212, 8, 5,101,167,190, 51, 15, 12,177,127,249,232,117, +133, 88,180,114,147,126,152,255,137, 51,227,251,122, 14, 90,184, 33,110,255,209,219,138,187, 67,135,246,208,165,164,164,212,121, +163, 9,229, 50, 94,120,245, 45, 9,195,216,155,141, 8, 33, 0,184,220,199, 49, 87, 0, 80, 84,148, 92,162,240,105, 49,116,219, +138,105,235, 27,250, 55,112,119, 82,202,161, 86,201, 72,120, 88, 19,121,251,118, 49,138,192, 38,205, 36,167,111,235,145,166, 53, +226, 94,102,255, 91,126,158, 0, 0, 32, 0, 73, 68, 65, 84, 9,100,154, 40,241,136,110,207, 98,219,234,247,250, 59, 82,255, 19, +231,110, 14,252,122,249, 92, 89,110,145, 5,183,211, 75,145, 83,104, 66, 78, 81, 57,114,138, 76, 80,203, 69,104,223,115,152,236, +192,241,221, 67, 58,180, 9,253,194,161, 27,250, 16,247,146,146,247,166,102,102,143,105,209,234, 25,124,191,101, 83,123,226,239, + 47,167, 25, 25,229,142,158,191,126,253,250,194,214,173, 91,123,126,246,217,103,101, 97, 97, 97, 45,195,194,194,130, 19, 18, 18, + 78, 54,110,220,120,224, 55,171, 23,156,124,107,238,242, 64, 17,108, 46,237, 59,118,100,149, 82,130,243,167,143,154, 54,175, 95, +155,101, 41,214,207,170, 77,151, 81,186, 46,204, 45, 37,208,248, 5,220, 84,137,173,189,197, 74, 75, 66,225,214,105,219, 0,236, +105,210,239,205, 99,191, 95,186,147, 16,125, 57,197,235,196,229,132,188, 66,131, 53, 52,233,208, 59,181,126,224,178,164, 34,131, +165,252, 43, 99,233,221,114,248, 93, 74,136, 6,176,191,183, 8,236, 25, 45, 2,128, 0, 89, 25,151,127,116,160, 99, 52,161, 60, + 15, 36,100,232, 81,106,180,161,220,106, 67,128,167, 10,218,220, 12,124,243,197,102, 92,185, 20,139,222,253, 6,225,171,239,190, +199,196, 87,134,215,121, 95, 25,134,128, 97, 72, 69,230,202,110,174,212,114, 17, 64,128,226, 50, 43,246,156, 73, 71,147, 96, 6, +164, 30,173,133, 78,106, 5,116,165,229, 96,196,106,196,255,177, 85,121,232,196,197, 57, 31, 47,223,240,110,137, 62, 55, 45, 41, +238, 28,194,220, 10, 16,236,103,198,173, 92, 23, 92, 42, 12, 66, 88,147,198, 96, 36,177, 14,105,231,223,106,190,236, 0,243,211, +128,182,173, 34, 99, 26,122,185,192,104,230, 42,178, 88, 34,108,222,180, 9, 41,247, 51,198,231,223,218,119,197,241,104,107, 70, +159,123, 79, 43,247, 14,121,253,198,249,227,201, 67, 94,158, 10,159, 6, 13, 91, 58,122,174,163,102,138,119,192, 96, 17, 66, 24, +247,160, 86, 91,182,108,219, 53, 34,184,161, 15,126,187,120, 31, 87,146,138,224,236,228, 10, 86,229,139,208,174, 99, 93,111, 28, + 94,253,188, 49, 95,191, 69, 44, 81, 78,120,166,125, 71, 80, 74,113, 39,254, 86,161, 78,231,242,200,103,179, 33, 43,254, 42, 0, +231,170,101, 74, 77, 68, 75, 39, 23,247,171,229, 22, 14,153,153, 25,248,243,236,201,214, 21,199, 57,140, 76,194,224,232,229, 60, + 88,108, 60, 44, 86, 30,173,155,135,151,139, 37,138,206,159,174, 63,216, 62, 39, 55,143, 81,170, 93,120, 23,207,198, 18, 87,107, +142,233, 90,178, 78, 98,177,241,104,236, 91,251,239,114,165,123,227,197,111,191,243, 86,132, 72,170, 64, 73,153,201,156,157,145, +233,243,237,142,223,245,183,239,196, 53,104, 20,212,208,121,193,130,143, 37, 37,229, 20,121,197, 38,228,151, 90,200,139,163,198, +251,109,221,248,213,203, 0,106, 52, 88,213,208,252,135,173,107,173,238,106, 9, 41, 53, 88,169,182,164,156,155,250,250,244,230, +245,169,251,195,252,205, 92,221, 43,195,213,228, 98,200, 36, 44,100, 18, 22, 86,155, 99, 93, 36, 53,145,195, 85, 26,141,235,203, +237, 90, 53,197,145,203, 90,136, 88, 2, 99, 89,137, 89, 46, 83,223, 12, 15, 15, 97, 90,181,140, 66,183, 78, 29,144,148,156, 18, +118,228,183, 19, 43, 47,198, 94, 89,164,137, 26, 58, 75,123,115,239, 35,205,194,181,145,154,169, 85,229,218, 2, 70,122,249,120, + 70, 13, 26, 52, 80,214,176,129, 55,241,244,112, 5, 7, 9,166, 76,125,195,203, 81, 29,158, 82, 80, 0, 75,231,207,129,201,108, +134,151,171, 20,148, 2, 27,215,124, 2,179,217, 12, 63, 15, 57,116,101,214, 26,207,175,203,143, 84,103,136, 30, 54, 90,149,143, + 43,143, 91,178,100,201,128,170, 26,149,207, 63,204,195,229, 85,207, 95,186,116,233,226, 42,207,215,216,199,175, 42,162, 10, 17, + 82, 91,165, 52, 45,134,118, 84,200, 84, 71,191, 90, 50,157, 41, 46,179, 64, 38, 97,208, 56,184, 17,166,189,249,150,178,103, 43, + 47, 24,225,140,159,118,108, 46,177,113,214, 95, 30,189,196,163, 40,125, 66,218,168,149, 78,135, 55,110,217,193,251,120,121,146, +111,143,105,147,181, 37,182, 7, 83, 28, 36, 92, 56,192, 95, 58,242,173, 47, 5, 57,172,148, 43,154,154,204, 38,183,154,180, 24, +216, 95,208,141, 71, 83,192, 50, 12,216,167, 52,179, 23,195, 48,220,119, 95, 44,128,167,179,189,207,213, 39,171,182,149, 14,212, + 28, 62, 81,213, 92,181,106,213, 74,215,178,101,203, 98,230,225,206, 84,213,144,118,241,251, 71, 70, 75, 60,174,185,170,196,152, +115, 61, 22, 15,205,196, 79, 72,180,216,179,209,174, 25, 35, 95,122,121,142,119,179,129, 78,247,179,117,144, 50, 86,180,141,240, +197,201, 35,123,248,244,228,219,147, 29,209,206, 43,208, 5,120,122,120,224,202, 61, 61,178, 10,202,145, 93,104, 55, 87, 57,133, +229, 40, 49,218,208,170,145, 23,138,117,250, 0, 71,180,170,131, 18,186,239,200,225, 35, 99,250, 13, 30,129,105,239,126,220,111, +253,215,159, 95, 87,120, 71,188, 98,204,189,125,209,145,243,119,237,218,197, 5, 5, 5, 37,231,231,231,183,157, 53,107, 86,105, +163, 70,141,124, 22, 44, 88, 48,169,113,227,198,126, 61,187,119,215,197,254,222,126,203, 91,239,126,220,253,253,183,214, 7, 51, + 12,147, 75,121,122, 32,171,204, 58,143,106,227,170, 29, 41, 84, 73,218,254, 57,241, 36,242,147, 49, 61, 59,123, 28,240, 80, 48, +145, 98, 98, 26, 69, 34, 63,217, 73,227,230, 89,146, 14,125, 81,218,252,197, 21,211, 50,139,249,185,229,140,207,162,186,204, 21, + 96,207, 10,153, 45, 60,156, 21,226,202,145,163, 0,133,239,215,107, 62, 87,106, 92,100, 16,177, 4, 98,150,129,206, 96, 69, 65, +137, 25,239,206,170,213,255, 85,129,242, 28,207,195, 96,226, 96, 52,219, 64, 64, 80, 90,146,143, 57,239,190,141,126, 3,135, 97, +252,228,119, 80,108, 4, 46, 37,151,194, 98,181,214,105,139, 88, 2, 24, 76, 54,140,239, 19,136,130, 82, 11,202,202,109, 48, 91, +120, 40,229, 34,136, 68, 12, 84, 50, 17,156, 20, 98, 16, 66, 37,190,190,190,147, 0, 64, 44, 22,151,167,165,165,109,171, 73,147, +231, 41,130, 2,188, 97,180, 48,120,102,196,114,244,138, 9,197,213,223, 54,136, 78, 95,184, 17,252,238,199, 43, 49,117, 84, 12, +118,223,105, 2,119,175, 32,168,149,114, 88, 41, 3,192,177, 41, 64, 40,157,199,251,134, 15, 27,181,246,187,141,119,230,127,248, +158,188,168,140, 64, 38, 17,225,196,137, 99, 56,119,225,210,106,237,173,125, 53,198,245, 56,136, 41,227,237,236,226, 12,185,148, +133,197, 98,114,184,195, 55,199, 83,128, 34,194,171,249, 16,123, 31, 69,138, 8,190,154,178,186, 50, 88,132, 16,226,226, 23,181, +105,237,250,239, 95,246,245,241,194,222,227,215,177,101,253,151,104, 16,213, 15,119, 47,175, 69, 64,244, 16,168,131,123, 64,234, +180,107, 18,195,138,154, 79,125,107,206,176,232, 54, 49, 56,251,199,239,200,203,201, 94, 75,105,188, 67,125,208, 88, 49,121,179, +123,175, 1, 48, 89, 56,116,238, 49, 0,135,127,222, 59, 13, 21,131, 39, 30, 23,150,101,248, 55, 38,142, 20,231, 21,155,197,121, + 58, 19, 50,243,141, 72,206, 41,195,254, 31, 55, 56,220, 36, 69, 88,166,109,215,150,254,226, 73,203, 78,164, 7,248,251,154,196, + 38,163, 34, 33, 41, 41,124,194,152,151,197,141,154,134, 49,218, 98, 19,180, 58, 51,180, 58, 51,202,202,173,104,226,215,144, 49, +217, 68, 49,245,141,213,203, 69, 46,254,234,151,100, 56, 43, 69,232, 16,225,241,216,157,176,121,158,255,203, 92, 45,180,103,174, +174, 37,235, 32,151,176,144,138, 89,200, 36, 12,172,156, 99,213,103, 24,219,200,215,198,188,168, 48, 91, 41,242, 75,204, 96, 25, + 2, 31, 79, 15, 89,128,111, 40, 54, 46,127, 3, 0, 48,241,189,175, 49, 97,220,104,132,133, 54,133, 78, 87,170,152, 48,229,173, + 21,168,166,223, 93,117, 80, 74,233,247,251, 79, 71, 94,186,153, 58,227,213, 49,175,136, 71, 12,234,194, 92,185, 87,130,236, 66, + 19,238,221, 53,192,108,173,223,108, 52, 54,206,222,230,187,105,231, 47, 80, 74, 88,104,117,246,127,151,133,107,118, 66,173, 16, + 33,167,200, 12,158,175, 57,123, 87,151, 31,169, 41,235, 84, 31,170,154,176,218,202, 9, 33,191,204,158, 61,251,125, 0,116,246, +236,217,239, 87,238, 47, 89,178,196, 8, 32,171,174,235, 60,232,131, 85, 83,179,160,166,197,208,142, 10,169,252,232,214, 53,239, + 43,142, 39, 80,172, 62,122, 25,253,219,251, 66, 34, 34,144,171,125,112, 53,185, 24,199,143,239, 47,253,227,220,133,114,194, 88, +235, 28, 22,165,244, 13,107,173,148, 59, 29,251,114,221, 22,155,183,143, 15,118,156, 41,202, 42,208,219, 30,216, 89,142,179,146, + 75, 71,190, 13,182,241,214,190,198,156,196, 58,127,206,242,148, 74,150,124,115, 0,148, 82,128,231,192,131, 7, 43,145,169, 2, +219,141,206, 5, 1, 56,142,151,139, 88,166,188,226,110,217,235,202,115, 25,169, 23,182,215,218,116, 72, 0, 56, 43,197,248,241, + 84, 6,116,133, 89,249, 3, 53,135,255,172, 52, 87,135,111,201,238, 70, 71,183,210,181,107,215,174, 88, 38,147,129,101,217,186, +194,124, 84,255, 9,205, 85, 77, 80,122,217, 10, 96,169, 95,120,151, 65,253, 84, 81,237,164, 68,140,232,112, 95,156, 60,186,151, + 63,119,104,195, 80, 67,110,194, 65,199,116,236,125,100,178, 10,141,200,204, 55, 34,187,168, 34,131, 85,104, 2, 33, 64,185,249, +201,166,175, 49,228, 38,252,172,110,208,108,173,201,138,201,157,123, 15,193,140,143,191,108,186,109,237,178, 63, 84, 94, 33,109, +203,242, 18,111, 56,162,145,146,146, 98,242,246,246,190, 82, 90, 90,250,236,138, 21, 43,244, 17, 17, 17, 82,133, 66, 81, 0, 64, +158,120,231,142,228,196,175,187,238,107,179,178, 94,179, 88, 44,142,165, 69, 0, 4,117, 27, 43, 11,119, 46,156, 20,168,236,208, +167,177,143, 18,129,202,178, 62,225,234,107,159,121,245,156,190, 56,239,248,170,188,108,147,237,183, 66, 3, 90,102,234,197,199, + 28,209,179, 89,204,169, 47,189, 54, 27, 44, 67, 96, 49,153, 83, 43,203, 53, 46, 50,124,188,237, 54,156, 20, 98,168, 21, 98, 56, + 41, 68,232, 24,225,129,122, 36,136,168,213, 70, 97, 52,219, 96, 52,113, 48,154,108,240,108,232,138,239,182,238, 70,154,214,136, + 3,177,249,136, 79, 41, 65,104,128, 10,148,214,157,119,226, 41, 87,246,226,164,185, 78, 44,195,128, 37, 96,194,155, 6,161, 80, +111,134, 68,196, 64, 42,149, 66, 41, 23,193, 89, 41,134, 88, 36,198,197,235,215, 97, 50,153,208,174, 93,187,106, 71, 74,253, 21, +161, 61,139, 21, 18,236, 7,139,213,134, 95, 79,199, 97,225,244,161,120,182, 75, 27,188,203, 74, 17,111,106, 5, 39,119, 39,240, +132,133,197,198,195,100,229, 0,144, 26, 13, 48, 33,164, 3,236,253, 34,202, 41,165,231,179,227,247,164,121, 53, 27, 50,233,208, +209, 19,219, 6,246,239,141, 43,215,110,225,167,189, 7,254,200,247,208,205,172,114, 78,115, 84,140,130,163,148,214,218,145,185, +150,235, 18,149,119,248,244,152,142,221,160, 47,202, 67,110,250,125,135, 63,212, 35, 27, 58,225,237,233,211, 66,194,194,194, 66, + 56,158,130,231, 41, 34, 3,157,240,218,148, 41, 33, 77,154,134,134,240, 21,163, 8,195, 3,156,106,213, 81,121,135, 77, 93,180, +226,155, 87, 2, 2, 2,112,248,204,109, 44,153, 59,249,138, 82,169,110,212,198,221,201,149, 15,107,137,228,155,191,193, 61,168, + 24,206,222, 33,254,131,158, 29,227,223,239,185, 33,184,113,237, 50, 86,125,182,224, 92, 25,171, 88,236, 72,172,106,239,198,154, + 86,109,187,188,228,236,238,141, 34,157, 30,106, 55, 47, 68,180,104,243,146,218,187,241,123,250,220,123,143, 53, 37, 11, 96,255, + 1,108,178,240, 40,212, 91,144,161, 53,226,126,174, 1,247,115, 12,224,249,191,154,130,235,122,135, 18, 16,162,146,137, 68,238, +214,187, 13,175, 31, 59, 65, 3, 3,188,201,178, 5,179, 88, 11,149, 33, 79,103,134,182,196, 12,173,206, 4,109,137,221, 96,185, +169, 69,224, 41, 95,239,209, 25,133,122, 11,156, 20, 34,184,168, 36,224, 28, 52, 64,213,241,241,202, 29, 29, 50,180,250,158,159, + 45,156, 43,185,122,191, 12,215,147,117,144, 73, 24,123,246,170,194, 96, 57,218, 44,204,138,152,105,207,245,106,135,116,109, 57, + 68, 44, 3, 17,203,160,105,179,214,240, 84,242,232, 57, 98, 54, 0, 96, 96,127,251, 52, 36,201,217,101,248,249,124, 54, 0, 72, + 28,141, 53, 47,191, 68,190,247,183, 43,111,237,248,110,153,180,156, 19,227,155,131, 41, 40, 55,115,144, 73, 42,154,221,165,245, +251,126,179,113,246, 12, 86,186,214,130, 50, 19,135, 18,131, 5,148, 2, 23,239,150,194, 96,226,160, 51, 88,208, 62,204,189, 86, +141,154,252, 72,149,231,171,205, 64, 57, 74,197,249, 90,252,213, 79,171, 90,221,170, 25,172, 37, 75,150,220, 90,178,100, 73,181, + 25,177,154,168,181,147,187,166,197,208,142, 10,137,252,232,150, 47,222, 87, 28,187, 67,113,242,122, 1, 94,232,236,143,130,188, + 12,172,255,122, 53, 79, 41, 32,147, 75,115, 56, 27,127,168,156,183,205, 42,190,246,115,173,237,190, 42, 77,100, 11,133, 82,121, + 98,201,170,181, 22, 31, 95,127,126,207,249,226, 60,157,129,251, 91,174,144, 51,153, 24,202, 83,137, 35,230, 10, 0, 24,134, 88, + 62,158, 54, 20, 60,165,152,183,122, 39,150,204, 24, 9,181, 92,164, 36,132, 40,203,202,109,152,190, 96, 3, 86,124, 48,206, 73, + 41, 19, 85, 24, 3, 14,147,167,189,235,136, 52,140, 38, 14,101, 69, 57, 5,205,245, 43, 31, 50, 87,209,186,182,109,219, 22,187, +185,185, 65,165, 82,213,219, 96, 85,103,174,124,124,124,252,148, 74,165,123, 72,136,189,175, 43,203,178,224, 56,174, 44, 49, 49, +241,177, 38,125, 43, 41,206,223,151,117,255,102,187,142,221,158,195,169,163,251,248,115,191,174, 31, 90,159, 33,230,174, 46,206, +233,151,227, 82, 35, 0, 53, 50, 11,202,145, 83, 84,142,236, 66, 19, 44, 54, 30,129,222, 74,100,164,167,193,213, 69, 93,231,232, +180, 74,148, 62, 33,125, 25,202,190,198, 19,124,103,200,137,255, 21, 0,244,153,183,166, 40,189, 66,111,220,186,117,109,213,128, +145,211,164,207, 62, 63, 69,178,110,233,235,179, 1,140,116, 84, 55, 55, 55,215,224,229,229,117,206,207,207,111,192,188,121,243, + 76, 0,164, 38,147, 73, 57,110,220, 56,101,106,106,234,219,148, 82,135, 98,236, 60,110,147, 39,145,211,190,141,195,162, 71, 5, + 42,203,122,247,232, 18,131, 14, 81, 1,200,232, 18, 3, 0,111,166, 26,212,161,157, 38,175,255, 49, 88,227,118,232,155,205,191, + 46,153, 56,162,199,219,126, 3, 63, 89,145,245,243,188, 90, 51, 98,119, 78,111,120,116, 2, 38, 2,136, 43, 58,190, 87, 53, 88, + 54,142,214,167, 9,142, 90, 57, 30, 6,147, 13, 6,147, 13,250,114, 43,142, 95,205, 67,110,177, 25, 69,101, 22,148,155, 56, 80, + 0, 22, 43,173,156, 85,164, 86, 82,206,110,118,173,124,236, 31, 61, 82,183,122,254, 52,231,159,206,100, 64, 37,179,247,199,114, + 81, 73,225,172, 20, 3,160, 56,121,242, 36, 42,135,199,215, 6,207,243,248,233,240, 69,172,216,124, 2,135, 55,204,130, 92,202, +162,229,144,249, 24, 51,164, 29,120,158, 34,233,206,205,220,144,136, 86,222,140, 90, 9,134, 65,101,159,148,218,238,167, 7,165, +244, 0, 33,100, 0, 33,228, 57,216,251,140, 20,237,227, 10,202, 78, 28,220,161, 42, 51,154,108, 69,169,183,191, 68, 89,126, 87, +123, 19, 60,120,216,127,160,159, 36,132,116,169, 51,224,106, 32,132, 48, 10,175,208,213, 19,166, 76,127,161, 73,147,198,216,185, +125, 35, 40, 37, 63, 57,122,254,182,159,207, 97,229,170,191,143, 24,124,109,202,148,144,117,223,124,243,183,178, 87,198, 77,170, +113, 20, 33, 33,132,248, 71,245,152, 21, 22, 30,137,243,183, 50,176,236,195,169, 87,202,243,146, 71,153,213, 30,175, 89,202,178, +223,137,140,106, 5, 31,111, 15,228,100,231,162,251,224,103,209,175, 79, 31,220,184,118, 25, 11, 63,122,247, 28, 12,230,222,117, +101,109, 43,225,169,120,114,183, 62, 67,196, 6,147, 5,107,150,125,132,215,102, 46, 66,251,238, 3,197, 55,175, 94,152, 12, 96, +190,163,117, 54, 91,121,116,111,161,129,217,202,193, 98,229,113, 32,153,125,228,123,134, 16, 64,196, 50, 76,171,198,246,230,221, + 18, 99,205, 77, 70, 0,192,136, 72, 78, 81, 73,105,208,151,139,222, 98,203, 76, 28,180, 58, 19,242,138,205,208,150,152,144,175, + 51,217,205,149,206,140,124,157, 9, 34,150, 32, 49, 57, 19, 44, 75,234,221,255,174,184,204,130,103, 66,221, 0, 16, 48,143,217, + 28,146,111,211,244,187,150,144,209,115,217,130,185,146,171,201,122, 92,191, 95, 82, 97,172, 24, 72,171, 24,172, 90,146, 56, 15, +240,138, 28,212,225,149,145,131,155, 57,171,228,200,188, 83, 10, 17, 67, 32, 98, 9,156, 53, 1,112,145,151, 99,218,212,215,224, +225,238,130,180,252,114,172,222,155,128,235,113,119,193, 27,235, 87,237,175,191, 63, 60,244,149,151, 71,200, 24,177, 28,219,142, + 38, 67, 42, 97, 33,130, 25,113, 23, 78,155,114, 51,238, 91, 74, 75,138, 85, 34,145,216, 33, 81, 2, 80, 27,199,131, 82,138,197, +159,204,193, 15,155,191,198,225, 75,185,160,176, 79,213,240,231,158,207, 49,125,246, 66,104, 75,204, 0,106,238,146,228, 0, 7, + 1, 60, 87,185, 83, 53,155, 85, 67, 6,170, 58, 98,171,106, 84, 30,255,176,198,195,207, 85,232, 57,148,105, 23, 61,236, 20, 43, +247, 53, 45,134,118,148, 75,165, 71, 55,175,158,163, 56,158,128, 7,230,202,168,207,199,214, 13,235,244, 20,124,175,220,155,251, + 29,106,206, 1, 0,149, 87,104,148, 76,165, 58, 53,119,225,106,147,159,127,176,237,215,171, 37, 5,165,229,220, 35,105, 16,137, + 82,197,169, 92, 52,229,174,129,173, 87,136,141,230,143,180,218,184, 58,250,117, 17,240,148,226,231, 11, 57, 0,111,127, 17,119, +158,206,180,207,227,195, 18,112,188,189,157,251,183, 43,121, 15,202, 28,129, 16,224,199,163, 87,242,107, 50, 87,174,174,174,112, +117,117,133, 90,237,240, 74, 11, 21,186,213,103,174,148, 74,165,251,145, 35, 71,228,206,206,206, 96, 89, 22, 38,147, 9,207, 62, +251,108,189,180, 43, 81,121,135,141,108,223,115,216,146, 78,221,159,195,239, 71,246,240,231,126,221, 52,204,144, 87,143,249,123, + 0,244,235,210,226,231,101,159,175, 9,158, 57,123,174, 76, 37, 23,161, 72,111, 1,203, 16, 4,122, 41,224,161,102,113,238,196, + 47,229,163,250,182,114,216,252, 5,248, 7,109,253,124,245, 90,143, 21,159,126,210,219,205, 45,216,187,168, 40,185, 4, 0, 12, +121, 9,107,213, 62, 97,119,252, 27, 30, 61,213,178,203, 80,120, 53,104,234, 80, 31,177,170,228,229,229,229, 69, 69, 69,221,142, +140,140,108, 51,108,216, 48,186,120,241, 98,183,140,140,140, 93,142,154, 43, 0,232,209,167,195,116,149,216, 26,227,161, 96, 34, + 27,251, 40,209, 33,202,222,250, 57,226,185, 78,240, 15,104,136,123, 57,134, 86, 5, 70, 94, 82,102, 21, 55,254,102,237,198,216, + 64,119,209, 68,155,222, 24, 7,160,218, 41, 5,106,131,160,226, 67, 82, 89, 97,174,228, 34,168, 21, 98,240,212,254,156,131, 80, +171,141,135,217,194,195, 96,182,193, 96,226,236,102,203,204,129,231,237,157,149, 9, 33,176, 88, 57,251, 37,235, 23, 32,156,221, + 60, 17, 28,100,143,241,193,166, 16,131, 16, 64,163,209,192,195,163,238,121, 71,121,158,135,217, 98,255, 23, 55, 91,185, 7,131, + 58,204, 22, 27, 40,165, 72, 72, 72,156,149,146,156, 50,184,105, 72,147, 46,145, 45, 90,185, 43,164, 12, 0,212,214, 95,140, 16, + 66, 70, 1,176, 82, 74, 31, 12,138, 8,106,214,169,124,239,158,159, 84, 3, 6, 14, 44, 50,235,181,187,171, 28,204, 2,232, 91, + 97,198, 28, 50, 25, 85, 47,164,210,132, 14, 9, 8,239,176,104,244,216,215, 66,187,247,234,131,147,199,127,195,129, 61, 59,182, +148,229,221,169,117,190,174,170,132,133,133, 61, 50,138,176, 73,211,208, 71, 70, 17, 6, 5,135,212,104,176, 92, 92, 90, 56,183, +104,219, 45, 32, 53,223,130, 67,135,126, 69,153, 46,231, 67,179, 89,111,128,152,174, 63,182,231,219,241,163, 38,207,115,110,223, +182, 13, 92,157,148,240,116, 83,227,242,165,115,248,116,254,220,115, 48,152,123,215,253,249, 89, 81,223,200, 72, 73,211,134, 65, +111, 5, 54,110,134,203, 23,206, 32, 41,225,230,173,171,177,231,154, 53,141,106, 7,141, 95,224, 91, 36, 50,114, 41,141,139,171, +115,165, 10,202,209,140, 87, 39,189, 99,127, 92,241,245,217,190,101,176, 20,120,248, 77, 72, 96,179, 90,184,109,235, 62,205,171, + 58,138,176, 38,221,242,210,226,221,127, 92,184,241,238,160, 62,157, 73,101, 83, 96,165,169,122,120,191,105, 3, 21,146,110,196, +243,214, 50,157,195, 70,184, 34,250,220, 41, 83,223, 84,216, 99,231, 65,237, 19,171,213,235,125, 3, 0,229,156,228,165,111, 62, +121,159, 92, 75, 41,195,141,251, 37,246,102,193, 10,131, 37,147,176,144, 86,252,117,104,106, 50,134, 89,246,202,240, 62,200,215, +153,193, 83, 90, 49,151, 30,129, 72, 36, 70,106, 9,144, 94,162,135,182, 56, 23,201,247, 83,160,203, 73, 6,195,176,240,104,208, + 20,134, 58, 39,228,177, 83,202,169, 67,173, 60,154, 12, 31,208,153,221,119, 54, 27, 10,153, 8,165,249,233, 56,115,100,167,145, +114,220, 90,179,213,252,131, 23,149,222,140,187,177,203,161, 85, 74, 8,160, 45, 41, 51,123,203, 36, 44,118,110,250, 18, 47,142, +153, 98,127,162,162,170,239,206, 93, 0, 66, 8,138,116,122, 0,228,145,172,104, 77,126,164, 2,109,149,204,211, 35,251, 85, 76, + 81,117,251,164, 98,223, 92,131,134,249, 33, 83,101,126,168,220,252,144,158, 67,147, 35,215,152,193, 18, 51,236,111,155, 86,189, + 47,191,149, 39,195,197,248, 28,188,208,217, 31,134,146,124,172,251,106,165,190,220,106,233,167,189,225,184,185, 2, 0, 48,255, +199,222,121,135, 69,113,173,127,252,123,182,179, 75, 47,130, 44, 69, 1, 21, 16, 80, 81,209, 24, 75,176, 36,246, 24, 73,212, 36, +154,104,138, 37,215,154, 98,139,209, 24, 77, 52,198,154,102, 44,177,183,196, 88, 98,139,133,136, 37, 18, 11, 54, 64, 68,186,192, +194,210, 97,217,101,219,204,156,223, 31,128, 33,132,178,139,222,252,238,205,157,207,243,240,184, 59,156,249,206, 57,187, 43,243, +238,123,222, 34, 24, 60,246,141,247, 18, 2,218,119, 52, 70,199,107,210,203,180,230, 70,227, 24,122,190,180, 48,225,230,137,175, +135,149,155,211,223,177, 83,134,178, 28,195,172,210, 21,220, 95,218,208, 88,142,163,210, 37, 27,126,168, 54,174, 56, 14,243, 62, +223, 5,202,177, 53, 5,252, 88, 80,150,195,244,143,190, 5, 83,243,152,229, 88, 16, 51,171,104, 72,171, 46,118, 54,146, 51,157, + 42,215, 57,214, 55,174,186,118,237, 90,230,228,228, 4, 87, 87, 87, 56, 59, 59,163,214, 32,178,132,166,182, 5, 59,116,232, 0, + 59, 59, 59,196,196,196,192,206,206, 14,182,182, 45, 43,144,111,231, 17, 60,182,231,128,209,123,250,143,124, 67,112,238,240, 38, +246,106,204,241,151,170, 10,146, 44, 54, 2, 88,150, 37,102,179, 25,131, 35,187,101,221,186,255,240,151,101, 75,151, 14,137, 24, +240,162,236,233, 32,119, 84, 25, 25,228,100,103, 35,246,252,207,250,246,190,110,191, 60,221, 61, 48,199,108, 54,131,101, 27, 47, +186, 87,139,193, 96, 44, 22,136,109, 92,199,189,252,170,236,250,181,107,123,108, 61,130,246, 9,132,220,109,202, 10, 59, 3,116, +108,231, 78, 29, 97, 98, 56, 84,233, 42, 74, 90,178,238,132,132,132,235,107,214,172, 9, 18,139,197,222, 7, 15, 30, 44, 42, 45, + 45,181,170, 93,208,217, 19,215, 54,136,236,204, 15, 36, 84,255, 74, 27,133,246,185,236,190,189,240,242,136, 62,216,127,226, 50, +206, 95,140, 69,150,206,238,150,214, 40, 60,146,147,163, 50,132, 56,151, 31,122,161,183,159,240,167, 93, 21, 63,185,247,159, 55, +134, 82,249,217,194,152, 37, 22, 39,120, 16, 2, 84, 84,153,235,120,176,170,227,155, 4, 2, 98,177, 7,139, 0,233, 23,175,196, +133,117, 11,236,136, 91,105, 21, 40, 44, 53, 64,103,172,254,220, 83, 80,184, 58, 72, 32,147, 8,145,149,145, 14,142,154, 50,172, +121, 45, 64, 81, 56,244,165, 41,213, 9, 48,224, 68, 98,177, 8, 20, 53,197,117,109,164,149,238,238,238, 22, 25, 88,102,150, 69, +212,224,158,120, 42,162, 51, 70, 77, 93, 3, 0,136,222, 57, 15,206,118, 18, 28, 60,120, 16, 15, 47,175,219, 29,240,244,180, 51, +241,119, 19, 95, 76,184,121,229,213,161,221,228,225,173, 69,121,141,110,109, 80, 74,143, 18, 66,164, 0,250, 19, 66,158, 5, 16, + 67, 41, 53,179, 12,247,112,200,144,193, 28,203,114,143, 98, 34, 8, 33,206, 0,122, 1, 40, 1, 16, 71, 41,109,210, 69, 98,235, + 30, 60, 8, 2,236, 3, 33, 54,118,114, 69, 86,175, 65, 47, 43, 35,158,234,233,248, 66,212, 24, 72, 37, 82,156, 59,123, 26, 95, +174, 91,249, 67,101,222,189,191, 20,169,109,138,134,130,215, 27, 58,214,212,118, 81,121,185,163, 54, 57,241, 86,105,186,218,232, + 44,114,234, 0,177,204,126, 10,113, 84,110, 16,202,236,150,120, 61, 53,209, 33,250,242, 53, 36,220,186, 2,165,155, 28,233,169, + 41,186,248,219, 55,191,213, 17,241, 82, 90,152,104, 81, 32, 46, 0, 40,138,217, 23,159,154, 48,196, 89,111, 98,113,233,215, 19, +122,142,225,134,252,126,225,100,170, 79, 96,132, 77, 88,196, 64,231,162,163, 91,163, 0,236,111, 78, 39,227,234,238,191,132, 94, + 4,244, 28,171, 58,121,246,162,157,210,183,189, 16, 68, 0, 67,149, 22,133, 89,241,140,190, 66,173, 83,223, 61,162,180,100,126, + 89, 76,238, 71,139, 87,126,247, 78,183, 46,161,182,148, 74,255,228,177,170,125, 92,172, 49, 86,199,204,106,203,144,118,247,178, +190, 48,165,188,201,144, 21,150, 53, 43,138,139, 75, 30,165,230,203, 43,157,218,150, 59,150, 87,183,141, 33, 0,132,128, 99,185, +211, 35, 79, 69,113,113,137,148,101,205,205,222, 59, 0, 16, 39,123, 27,220,205, 80, 61, 10,104,151, 73, 4, 53,177, 87,127,120, +178, 44,129, 0,221, 68, 82, 91,228, 22,235, 33,160, 20, 28,199,128, 49, 27, 81, 89, 81, 1, 85,110, 62,212,234, 2, 84,106,202, + 33,183,115, 66, 88,120,119,216,219,219,227,222,141,243, 0,200, 49, 75,244,245,156,164, 67, 68,247,238,226,132, 76, 13, 76,102, + 14, 98,152,112,233,151, 3,122,198,108, 28,169,190,123,228, 87,139, 38, 89, 7,134,163,231,226,239,103,133,250,184,121,146,155, +105,101,216,181,249,171,234,108, 82,166,218,155,153,240, 80, 11, 85,177, 22,185,217, 89, 20, 28,107, 81,152, 69, 29,234,239,106, + 89, 28,250, 97,133,230, 19,165, 81, 3,139, 97, 24, 27,223, 54,109,241,242,148, 9,248,246,219,141, 72, 78,203,194,230,111,214, + 87, 27, 87,119, 14,255,102,137,120,221,110,219,218,252,164, 85,111,124,155,145,115,236,118,169,160,202,216,116,255, 41, 69, 43, + 63,244,125, 99,237,233, 42, 77,137,148, 53,232, 68,199,118,191,177,175, 33, 77, 0, 16, 10,136,177,102, 91, 16,132, 16,212,110, + 11,126,251,201,219, 80,200,132, 32,132, 64,103, 96,240,218,156,181,216,185,182,250,155,213, 91,239,188,247,167, 63, 60,245, 53, +107, 12, 33, 50,105,136,255,243,203,191, 79, 60,122, 57,211, 53,109,248,240,103,202,195,195,195,203,228,114, 57,108,109,109,225, +224,224, 0, 7, 7, 7, 56, 57, 57,161, 33, 26,208,244,104, 46,230, 74, 32, 16,192,193,193, 1,114,185,188, 65,195,173,185,238, +229,118,173, 3,199,244,232, 63,122,223,128,231,223, 20,156, 59,188,153,187, 17,115,108, 76, 85,193,253, 38,189, 76,245, 53, 57, +142,187, 29, 21, 21,213,105,202,148, 41,146,133,239, 68,157, 62, 29, 19,151,124,232,236, 79, 35, 75,202, 52, 62,148, 82, 56, 57, +218,101,191,244,108,167, 99,125, 35,130,178,162,163,163,185,125,251,246, 25, 8, 33,119,155,210, 4,128,162,162,130,237,209,209, +191,126,222,239,153, 72,108,222,177,111,120, 98,226,189,225,169, 41, 15,224,211, 38, 0,126, 1, 29,160, 35, 78,136,190,112, 9, +154, 18,245,118, 75,230, 89,151, 78,157, 58,121,117,233,210,197,187,172,172, 76,255,209, 71, 31, 5,177, 44,251,115, 88, 88, 88, +247,208,208,208,188,132,132,132, 70,191, 21,215,213,188,178,107, 66, 33,128, 93,109, 35, 39,253,168, 50,149,205, 2,176,210,199, +215, 23,231, 47,198,226,247,223,174,110, 44, 82,248, 46,157,244,234,235,111,183,117, 21,191, 61,234,233,182, 66,119,103, 5,246, +110, 94, 35, 60,122, 37,115, 93,102,177,121, 11,128,229,205,205,179, 46, 37, 26, 19,122,135,184,130, 97, 40, 88, 74, 33, 32, 4, +246,114, 81,131, 6, 86, 67,154, 34,163,236,141,105, 83,167,164,134,117, 14,159,253,234,196, 41,146,240,118,190,184,246,160, 20, + 0,129,171,131, 2, 42, 85, 30, 46,253,188,133, 41,205, 77,218, 40, 20,114,127,217,222,105,106,158, 57,113,251,219,215, 62,246, +244,244,156,124, 43, 62, 30, 49, 49, 49,112,117,117, 69,173,113,213,208, 22, 97,125,205,210, 82,205,111,203,214,108,233,253,246, +248, 81, 24, 17, 25,138, 11,215, 83, 97, 52,115, 48, 49,220,163, 32,215,244,216,239,164,179,198, 5, 24,223,137, 10,172,208,153, +165,153, 75, 50, 43, 46,212, 45, 34, 91, 95,147, 82,106, 36,132,156, 6,208, 19,192, 40, 66,200, 25, 74,105,247, 58,115, 32, 0, + 58, 1, 8, 5, 16, 75, 41, 77,183,104,237, 2,236,141,187,126,195,213,196,112,184,116,245,118,199, 1,189,195, 65, 57,138,235, +215,111, 96,235,182,173,250,187,119,110,173,214,170, 91,127, 66, 27, 41,110,219,216,235,105,105, 22, 97, 67,199,106, 53, 41,141, + 97,236, 60,130, 55, 94,185,124,225, 67,153,178, 59,130,135, 45,124, 62,247,246,207,207,183, 14, 25, 12,183,118,189,161,186,125, + 4, 55,127,219,123,242, 6,195,204,183,225, 4, 89,218,194,164, 70,141,253,198,230, 41,179, 81,204, 8,237,250, 12,178, 31,102, + 34,227, 65,252,206,170,226, 7, 42,187,214,193, 59,115,115,178,166,250,133,244,198,229,211,251,103,162, 17, 3,171,185,207,188, +155,180,124, 99,204,229, 43, 47,231,254,248,179,135,166,178, 74, 46, 18, 9,116, 50, 33,212, 18, 93,234, 1, 75,231, 73, 19, 19, + 77,238,237,158,142,122,117,202,162, 19,235, 62,255, 72,236,238, 36, 67,126,169, 30, 21, 58, 51, 42,170,204, 16, 18,160,189,210, + 14, 85,218, 10,252,126,114,151,153,154, 74,162,106,226, 81, 27,212,108, 21, 58,106, 57, 33,152,190,104,209, 2, 8,165, 14, 74, +255,129, 11, 77, 2,255,214,112, 70,189, 98,230, 46,128,255,192,133, 48,104,212, 35, 23, 45, 90, 16, 68, 41, 29,216, 42,116,148, +166,182, 23, 97, 99,107, 47,214,152, 48,190,191, 15,140,230,234,250, 97, 44, 91, 29,107,199,213, 84, 53,175,158, 80,243,107,167, +128,228,135, 19,177,200, 85,151,162,202, 96,134,209,196,192,200,176, 16, 8,132,112,118,118, 70,123,255,174,112,114,116, 64, 65, + 81, 49,174,199, 94,198,239,201,183,210, 41,176,188,200,165,124,143, 37,239, 17, 17,217,182,247,112,119, 35,106,141, 17, 54, 50, + 33,126,143,185, 96, 6,176,221, 18,227,170, 33,205,114, 93,217,218,249,203, 54,188,242,237,154, 37,173, 59,251, 57, 32,187, 72, +143,156,194, 42,104,244, 12, 0, 10,134,165, 48,234,203,113,255,250, 47,249, 12,116,107,155,187,198,127, 59,141,123,176,196, 98, +195,245, 59,201,178,249, 31,127,129,123, 41,233,216,186,241, 43,173,193, 10,227,170, 33,182,189,227,215,236, 55,160, 63, 83, 83, +183,244,147,204, 38, 71, 53,180, 45,200, 81,138, 99,191,231, 63,106,251, 81,187, 85, 24,151, 82,214,164, 22, 33, 68,252,197,140, +240,185,181,134,208,151,135,115,127,151,201,138,184,135, 15, 31,150,238,217,179,231,145,209, 35, 20, 10, 81,155, 61,104, 52, 26, +155,205, 42,114,118,144,134, 78, 24,218,118, 92, 99,198,149, 80, 40, 4,199,113,143,188, 87,214,110, 61,218,186, 7, 61,219, 99, +192,232,253, 3, 70,189, 37,136, 62,178,133,187, 17,243,243, 75,149, 5,247, 15, 91, 37, 2,160,180,180, 52,129, 16,242, 96,245, +234,213,225, 91,183,110,245,127,255,253,247,211,182,172,152,250, 37, 0, 20, 23, 87,183, 69,188,121,243, 38,157, 54,109,154, 65, +175,215,167,151,150,150,198, 81, 11,154, 92,235,212,247, 87,111,255,118, 85, 80,118,110,222,196,118,161, 61,225,230,215, 3,173, +219,245, 68, 73,165, 9, 87, 83,114,145,150, 24,141,123, 87, 14, 30,168, 42,244,176, 40, 32,183,150,240,240,112, 95,177, 88, 60, +146, 82, 26,104,107,107,235, 71, 41,149,138, 68,162, 49,132,144, 7, 12,195, 36,134,132,132, 68, 39, 38, 38, 90,220, 51, 44, 51, +102,187,161,109,228,164, 13, 89, 58,219,200,180,124, 93,215, 44,157,237, 77,157,204,241,221,130,232,245, 6,143,231, 86,175,131, +185, 56,225,224,206,242, 67,123, 55,175, 17,142,159,252, 30, 27, 95,226, 48, 75,100, 39, 63,187,114,146,197,153,251, 16, 16,146, +247,254,251, 31,252, 81,166,129, 84,111, 12,214,148,108,104, 54, 51, 5, 0,106,250, 41,206,147, 43, 67,191,142,159, 61,117, 89, +167,136,222, 19,158, 25, 50, 78, 96, 39,177,197,217,195,223,209,244, 59,231,127, 20, 81,246, 67, 93, 65,234, 95, 12, 12,107, 49, + 26,141,127, 50,172, 44,241, 94, 1, 64,161,107,121,228,137, 51, 49, 19,143,255,114, 97,197,208,103,251,184,126,243,209, 88,172, +218,116, 20,118, 10, 25, 40,199, 98,220, 0,223,151,238,237, 27, 60,210,199,195,198,235,167,243, 57, 23,167,175,139,159,167,211, +153,146, 27, 51, 98,106,169,169, 47,244, 59, 33,164, 61,128,145,132, 16, 14,128, 45, 0, 45,128, 74, 84,111, 72, 28,161,148, 90, +236, 85, 4,170,235, 54,101,168,245, 56,122,232, 32,110, 95,141,198,189,123,247, 53,247, 18,239,125, 69, 68,116, 93,101,126,114, +139, 60,171, 13,101, 17,178, 28, 26,206, 44,108, 2,173, 80,254,217,205,227, 95, 68,118, 24, 48,179,151,107,187,222,112,110, 83, +109, 83,150,231,196, 35,251,250,193,163, 26,149,100, 12,165,241, 77, 7, 50, 53,129,210,199,191, 3, 39,148,226, 74,204, 73, 80, +142,219, 8, 0,148,227, 54,222,186,124,114,106,207,161,111,194,197,189, 77,151,218,212, 46,107,181,229, 34,166,252,196,142,207, +126,204,200,200, 64, 82, 82, 18, 82, 82, 82, 80, 82, 82,130,189,123, 47, 89, 85,171,169, 32,245,202, 89,143,192,126,131, 95,153, + 52,251,216,232, 23, 71,219,248,250,181, 19, 4,121, 59,192,213, 94,132,251,169,185, 72,141,127,192,165,220,185,168,167, 85, 5, + 47, 20,164,252,214,168,119,164, 85,200, 24, 15,129,144,204,143,254,185,186,183,224,160, 81,111, 4,205,157,254,254, 83, 46,174, +206, 13,254, 29, 47, 41, 46,149,126,252,241,226,160,218,241,205,245, 34, 20, 8,133,154,201, 83,103,216, 10,136,224,209, 54, 32, +173,221, 35,171,253,135, 82,128, 0, 18,177,168,217,207,232,196,209,125,192,112, 28, 42,171, 76,168,212,153, 80, 86,169, 71,126, + 81, 25, 18, 18, 83,113,237,210, 41,100,164,166,104, 24,134, 57, 15,138, 67,133,174,229, 7,234, 23,214,109, 10, 14, 66, 95, 23, +103,123,100,148,234, 33,151,136,160,122,152,194,152, 24,125,139,139,172, 23,221,250, 57,207, 35,108,212,115,147,222, 89,248, 75, +191,126,125, 29, 58,119,237,110,235,230, 96, 15,137,136, 32,245,161, 26,119,111, 94,215,102, 37,223,170, 96,205, 85, 67,138,226, +127,126,236, 46, 45,255,233, 52,106, 96,153, 88,102,208,123, 11, 87,158, 97, 89, 86, 46, 18, 10,171,204,148, 27,242, 56,198,213, +191, 11, 74,185,156,119,102, 85, 7,173,215,126, 33, 48,179,156,252,173,119,222,175,170,251, 5,129,152, 89, 69,173,231,170,153, + 76, 61, 97, 97,153, 65,179,224,219,219, 59, 63,223,153,120, 16, 64,226,227,102,246, 1, 64,105,133,241,182,235,179, 63,140,210, +232, 24, 2,224, 94, 3,154,218, 1, 3, 6, 84, 79,160,198,136, 99, 89,214,226, 27,132,212, 70, 49,181,255,200, 55, 4,209, 71, +183,114,215,207, 31, 29,211, 18,227,170,150, 26,131,233, 42, 33, 36,254,195, 15, 63,140,240,240,240,240, 88,188,120,177, 77, 69, + 69,133,248,155,111,190,209, 23, 21, 21,229, 87, 84, 84,196, 82,106,121,124, 66,205, 77,115,146,220,163,227,119,228,224,247,207, + 57,187,123, 13,118,114,243, 9, 44, 45,204, 73,173, 40,206,249,133,112, 56,171, 41,184, 31,107,237, 92,111,221,186,245,176, 83, +167, 78, 71,132, 66,161, 55,203,178,110,132, 16, 59, 74,105, 41,195, 48,165, 28,199,229, 89, 99, 92,213,146, 25,179,221,208,239, + 95,219,246, 21, 87,113, 82, 19,177,217,151, 25,179,221, 0, 0,234, 51,239,235, 0,252,236,209,127,222,232,163, 87, 50,190, 74, + 40,117,152, 81, 16,243,185, 69,174,248,186,228,222, 60,208,220,165,181, 73, 0, 0, 32, 0, 73, 68, 65, 84,190,249, 81,150, 81, +165, 74,200, 1, 48,209,214, 35,104, 77,252,205,216, 37,132, 66,204,130, 89,174, 83, 63,184,241, 36,244,197, 98,177,190,123,247, +238, 13,102, 11,202,100,178, 38,235,107,213,252,161,223, 74, 34, 35,119,252, 18,125,105,226,169,179,151, 87, 60,213,171,143,171, +141, 76,137, 54,206, 38,236,248,160,219,204,232,155,133,215,158,255,224,226,183,105, 42,253, 29, 74,169,197,117,208, 0,128, 82, +154, 66, 8, 41, 7, 48,138, 82,186,153, 16, 50, 25,192, 61, 0,241, 86, 27, 2, 28, 94,237,213,171,199, 94, 66,136,136, 50,220, +170, 88,177,112,159, 62,239, 94, 78, 75, 12,138,186,116,246,115,192,228,169, 83, 59, 4,180,251, 35,139, 48,180,173, 61,198, 79, +124,187, 67, 27,255, 14,143,142, 5,249, 52,253,133,138,170,226,170,136, 71,167,103,239,159, 89,253,145,107,234,111,239,200, 93, +188,237,180, 69,153, 37,165,153, 55, 86,235, 10, 60, 86,215,239,208, 96, 45, 25, 41, 9,235,190, 95, 51,239,253,188,220,212,173, +218,130,228,234, 93,135,130,228,120,133, 71,224, 71, 69,249, 57,239, 23, 23,164,173,110,233,107,161,213,106, 85,123,246,236,113, +234,221,187,183,192,195,195, 3,133,133,133, 56,127,254, 60,199,113, 92,179,141,153,235,163, 78,190,120,158,180,107,231,178,111, + 71,249, 42,145,220,126, 24,195, 66, 73, 41,133, 72, 64,242, 76,134,242, 95, 10,157,170, 62,160,119, 98,155,254, 92,114, 44,161, + 2, 42,168,237, 45,200,113, 28,249,226,235, 93,153, 66,177,180,193, 45, 85,214,108, 84,112, 28,103,113, 47, 66,181, 48,203, 53, +204, 28,220,124, 22, 31, 5,226, 73, 82, 51, 95, 78,233,233,167,135,190, 54,152, 97, 88, 51,170,227, 19,107,127, 10, 40, 37,191, +130,176,103,138, 92, 52,177,214, 24, 85,117, 49,153, 76, 78, 16, 72, 96,175, 48, 67, 0,130,138,242,114, 89, 43, 86,122,175, 37, + 90,181,168,227,143, 38,144,200,200, 54,198,115,191,190,126,225,210,111, 99, 40,199,249,177, 20, 0, 37, 25, 70,147,254,199, 2, +135,162,157, 45,157,239,127, 27,228, 49,255,126, 52, 45,110,225,118,201,127,154, 38, 33, 68, 2,192, 13, 0, 75,235,180,191,121, + 28,205, 58,199, 27,237, 45,216, 82, 77,160,186,175,152,204, 70,241,129, 78,167,217,170, 83, 39, 91,124,211,183,228,245, 36,132, + 56,202,100,178,174,118,118,118,226,162,162,162,171,148,210, 38,191,121,254,183,190,239,117,233,251,198,118,183, 1,131,159,158, +125,246,196,181, 13, 53,219,135,143,240, 30,179,206,102,252,176,126,239,238, 58,116,124, 93,253, 44,194,127,194,218,255, 93,154, + 36, 50, 82,228, 94,234, 48,145,101,185,229, 3, 58,104,116,249,233,247,167, 93,186, 91,120,149, 82,218,104, 61, 49, 11, 63,159, +175,160,198,131, 69, 41,221,215,212, 88, 75, 53,173,165, 33, 77,247,176, 23, 62, 1,129, 5, 69, 99,107,160,184, 87, 16,127,100, +113, 83,154, 64,117, 64,186,162, 16,206,186, 34,183, 98,107, 13,171,255,151,247,157, 16, 97,167, 78,157,250, 74, 36, 18, 95,150, +101, 21, 70,163, 81, 87, 85, 85,149,145,153,153,121,133, 54,210,144,252,223, 61, 79,143, 78, 47,172, 19,139,197,179, 0,192,108, + 54,111, 80,223, 61, 50,167,169,115, 27, 27,255,183,220,143,198,140, 17,210, 31,127,180,184,113,187, 37,154,181,120,117,125,169, +204,108,102, 30,245, 30,146,136, 69,229, 57, 55, 15, 54, 28,247, 98,161, 38,207, 31,240, 6, 22,175,201,107,242,154,127,187, 38, +105,178, 89,119,203, 52, 45,133,215,228, 53, 1, 64, 25, 50,210, 7, 0, 84,137,199, 44,202, 54,110,104,252,127,235,218,255, 83, + 53,255,105, 88,213,236,153,135,135,135,231, 73, 96,137,113,197,195,243,239,196, 82,195,170,165,227,121,120, 8,234,181, 90,169, +197, 26,203,148, 16,210,160, 70, 83, 88,224,246,231, 53,121, 77, 94,147,215,228, 53,121, 77, 94,243, 31,166,217,156,246, 63,197, + 51,198,111, 17,242,154,188, 38,175,201,107,242,154,188, 38,175,249,255,174,249, 79,227, 9,181, 70,254,231, 65, 8,241, 32,132, +120, 60,233,177, 60, 79, 6, 66,136, 23, 33,196,203,202,241,158, 45,188, 22,255,254,242,240,240,240,240, 88,197,223, 30,131, 85, +123,163,106, 46, 59,207,210,113, 79,250,220,154,243, 87, 16,130,185, 53,143, 87, 81, 74, 27,173, 8,108,225,216,102,235,115, 7, + 6, 6,218,202,229,242,151, 88,150, 13,224, 56, 14,132,144, 84, 66,200,143,119,239,222,173,194,163,234, 41, 77,227,235,235,235, +103, 99, 99, 51,145, 16,210, 17, 0, 40,165,247,244,122,253,142,135, 15, 31, 90, 87,201,187, 1, 8, 33, 4,192,100,153, 76, 54, +214,201,201,169,125,105,105,105,138,209,104,252, 17,192,166,150,164,111, 43,149,202, 64, 0,175,115, 28, 39, 18, 8, 4,251, 84, + 42,149, 69,173, 7,106,230, 98,241,251, 83, 51,102, 45, 1,102,131,128, 90, 50,254,113,174, 85,143,199,253, 2,195,199, 41,241, +240,240,240,252,151, 98,149,129,229,237,237, 61,148,227,184, 87, 0, 64, 32, 16,236,203,201,201, 57,101,205,249,150,222,172, 30, +231,166, 86,239,220,117,148,210,247,173,156,163, 7, 33,152,203,113, 84, 0, 0, 2, 1,153,231,225,225,225, 34, 18,137,254, 82, +243,137, 97, 24, 57, 33,120,139,227,170,251, 37, 9, 4,100, 46, 33,100,131,181,134, 93, 96, 96,160,173,131,131,195,162,141, 27, + 55, 58,116,236,216,145, 0, 64, 92, 92,156,211,140, 25, 51, 58,116,234,212,105,217,221,187,119,155,109,121, 17, 16, 16,240, 66, +120,215,136,153,115, 62,152,231,225,238,234,102,207,176,140, 41, 55, 55, 79,185,126,221,231, 79, 5, 4, 4,124,155,150,150,102, + 81,223,192, 90, 67, 74, 36, 18,141,181,177,177,105,167,215,235, 83, 25,134, 57, 40, 20, 10, 7, 47, 95,190, 60,108,248,240,225, + 54,229,229,229, 82,134, 97,218,239,217,179,231,221,109,219,182, 13, 37,132,140,106, 42,104,185,214,211, 68, 41,173, 91,247,230, +149,171, 87,175, 14, 20,137, 68,164, 71,143, 30,114, 66,200, 12,250, 71,245,238,134,198,215,106,253,229,253, 33,132,124, 73, 41, +205,247,241,241,233,206,178,236,107, 0, 32, 20, 10,119,101,103,103,223, 32,132,180,182,145,201,102, 87,233,245, 4, 0,177,230, + 61,106,232, 90,118,118,118,187, 42, 43, 43,239,215,254,190,102,158, 45, 50,228,121,120,120,120,120,254,185, 88,101, 96, 81, 74, + 95, 75, 73, 73, 81,112, 28,135,160,160,160, 9, 0, 44, 54,176, 26,186, 89, 13, 28, 56,176,171, 92, 46,255, 83, 77,168,170,170, + 42, 41, 33, 24,216, 18,163,165,246, 26, 70,163, 65, 32, 22, 75, 33, 20, 10,222,235,210,165, 75,247,162,162,162,104,150,101,191, +203,207,207,183,186,187, 58, 33, 4,223,127,255,125, 71, 15, 15,143,191, 20,132, 83,171,213,146,145, 35,255,210,116,219,106,228, +114,249, 75,223,125,247,157, 67,112,112, 48,209,233,116, 48,155,205,240,245,245, 21, 44, 90,180,200,241,211, 79, 63, 29, 3,160, +193,246, 49,181,248,248,248,248,119,139,232, 57,115,199,246,237, 61,203, 75, 74,244, 91,215,110,188,105, 16,201,116,109, 58, 6, + 74, 62, 90,178,220,241,147,197, 11,166,248,248,248,196,103,103,103, 55, 89,213,155, 16, 34, 0,112,120,246,236,217,161, 35, 70, +140,144,106, 52, 26, 27,157, 78,215,118,207,158, 61,139, 34, 34, 34,236,186,118,237, 42,221,191,127, 63, 41, 43, 43, 3,165, 84, + 17, 28, 28, 76,199,140, 25,163,255,225,135, 31,166, 3,248,178, 17,205, 6,141,101,150,101,197,181,142, 47,134, 97,164,168,254, + 44,154, 90,224,157, 34,174,174,174, 19, 1,172, 96, 24,230,173,243,231,207,119, 5,128,254,253,251, 75, 0,220,112,112,112,232, +109, 50, 26,173,107,118,220, 8,195,135,143, 0,128,205,158,158,158, 23, 11, 11, 11,189, 9,193,120, 75,231,201,195,195,195,195, +243,191,133,181, 6,150, 4, 0, 46, 94,188, 8, 74,169,180,185,241, 13,240,232, 70, 71, 8,193,172, 89,179,224,233,249,231,176, +152,188,188, 60,196,196,156,111,129,244, 95,175, 1, 0,159,126,250,169, 99,113,113,241,243,223,127,255,253,224,214,173, 91, 47, +202,207,207,143,105,234,100, 74,169,154, 16,178,170,198, 51, 2,169, 84,150, 49,101,202,148, 27, 53,191, 11, 56,118,236,152, 98, +228,200,145, 58, 66, 72, 26, 0, 72,165, 50,119,161, 80,224, 71,171,123, 76,173,106,137, 55,195,100, 50,181, 11, 14, 14, 38,149, +149,149, 48, 26,141,200,204,204, 68, 97, 97, 33, 90,181,106, 69, 24,134,105,215,220,249, 10,133,226,205,217,115,222,111, 85, 94, + 82, 90,101,214,104, 76,118, 28,203, 56,216,136, 73, 69, 97,113, 89, 70,182,131,238,205,105, 51, 69,139,231,191,251, 38,128,133, +205, 72, 77,159, 51,103, 78,199, 30, 61,122,120, 29, 56,112,128,148,151,151, 67, 36, 18,217,133,135,135,163,123,247,238,108,116, +116, 52,241,247,247, 71, 88, 88, 24, 46, 95,190,140,223,126,251,141,116,237,218, 85,113,248,240,225, 9,104,192,192,170,111, 84, + 11,133,130,249,227,198,141, 27,170, 80, 40,204,145,145,145,120,251,237,183,161,213,106,209,177, 99,199,206,145,145,145,177, 81, + 81, 81, 98,129,128,132,177,108,181, 51,172, 33,227,186,222,251, 67, 38, 78,156,164,182,179,179,139, 82, 42,149,247, 9, 33, 34, +137, 68, 82,123,109,161,135,135, 71,171,206,157, 59, 79,115,113,113, 41, 16, 10, 4,238,180,186,201,138,197,239, 81,237,181, 70, +142, 28, 49, 15, 32, 24, 48, 96, 64,241,204,153, 51,217,123,247,238, 69, 70, 69,141,126,234,193,131,148,199,242, 92,242,240,240, +240,240,252,115,177,202,192, 34,132, 20,221,186,117,203, 83,175,215,131, 16,210,172, 55,168,110,134, 1,165, 84, 45, 20, 10,191, + 21, 8,200, 59,132, 16,132,133,117, 74, 95,191,126,125, 67, 21,205,141, 97, 97,157,210,133, 66,129, 63,165, 20,132, 8, 54,114, + 28,171,110, 72,179,129,235,169, 9, 33,171,164, 82,217, 92, 0,240,244, 84,170,143, 31, 63,110,126,233,165,151,240,197, 23, 95, + 72,231,207,159,191, 92,169, 84,142, 83,169, 84, 57,245,206,139,175,247,124,129,135,135,135,203,247,223,127,223,113,202,148, 41, + 55,114,115,115,103, 3,128,151,151,215,122, 0,157, 8, 33,105,117,142, 97,211,166, 77,221,223,124,243,205,123,106,181,122, 65, + 99,154,141,209,174, 93, 59,191,145, 35, 71,202, 0,192,108, 54, 35, 59, 59, 27,217,217,217, 40, 46, 46,134,217,252,231,214, 98, +141,105, 18, 66,130,157,157,156,109,183,174,217,120,163,149, 76, 72,220,124,148, 68,226,224, 36, 18,216,217,203,168, 80, 88,213, +198, 71,105, 79, 8, 9,110,228, 53,123,164, 41,145, 72, 38, 12, 30, 60, 88,177,127,255,126, 18, 22, 22, 6, 39, 39, 39, 92,188, +120, 17,183,110,221, 66,105,105,169,128, 97, 24, 68, 68, 68, 96,213,170, 85,240,241,241, 65,121,121, 57, 50, 51, 51,221, 36, 18, + 73,171,198, 52, 81,207,224,157, 59,119, 46,220,221,221,193,178, 44,242,242,242, 80, 89, 89, 9, 91, 91, 91, 56, 58, 58, 66,165, + 82,225,232,209,134,119, 50,235,125,150, 22,200,100,178,239,219,180,105,179,118,230,204,153,158,174,174,174, 48, 24, 12,139,138, +139,139, 49,119,238, 92, 0, 64,143, 30, 61, 58, 83, 74, 79,189,249,230,155,240,243,243,203, 45, 41, 41,121, 24, 23, 23,247,182, + 86,171,141,111, 72,179, 49,188,188,188,206, 20, 20, 20,246,237,223,191, 63,202,202,202, 76, 75,150, 44, 65,120,120, 56, 58,116, + 8,108,118,158, 79, 10, 94,147,215,228, 53,121,205,255, 5,205,127, 26, 34, 0, 32,213, 61, 60, 73,253,199,245,161,148,150,122, +121,121,121,202,229,114, 80, 74, 75,173,189, 24,203,178,211,221,220,220, 10, 22, 44, 88,208, 39, 48, 48,208, 56,125,250,244,248, +140,140,140, 15,235,142,241,243,243,251,244,235,175,191, 70,114,114,114,230,138, 21, 43, 46, 23, 21, 21, 45,179,230, 26,148,210, +249,132,144,245, 0,160, 82,169,138,142, 29, 59,214,227,194,133, 11,243,215,175, 95,239, 57,125,250,116,233,204,153, 51,167,161, +121, 79, 14, 68, 34, 81, 85, 67,219,130, 13,225,225,225, 97,106, 40, 70,171, 41, 34, 35, 35,133, 15, 31, 62,236, 40,151,203, 95, +126,247,221,119,229, 38,147, 9, 42,149, 10,217,217,217, 40, 43, 43,131, 64, 32, 64,114,114, 50, 71, 8,185,111,129, 92,165,209, +108, 54,216,250, 40,205, 35, 71, 13,238,116,247,218,173,100,185,139,139,160, 83, 68,120, 72, 82, 74,102, 28, 1,140,168,254,105, + 18, 71, 71,199,192,162,162, 34, 84, 84, 84,160, 85,171, 86,216,176, 97, 3, 60, 60, 60,160,211,233,144,144,144, 64,189,189,189, +201,165, 75,151,160, 84, 42, 81, 88, 88, 8,163,209, 8,157, 78, 87, 96, 52, 26, 27, 92, 59,165, 84, 45, 18,137,182, 10, 4,228, +109, 66, 8,218,183,239,160,254,242,203, 47,205,148, 82, 4, 7, 7, 99,244,232,209,184,120,241, 34, 18, 18, 18, 64, 41, 5,199, +113,102, 63, 63,127,181, 64, 64,220,171, 79,111,220,219,100, 48, 24,210, 60, 60, 60,222,122,239,189,247,246,124,247,221,119,206, + 11, 23, 46, 4,165, 20, 44,203,130,101, 89,112, 28, 7,142,227, 64, 41,197,225,195,135,145,154,154,250,105, 93,227,170, 57,188, +189,189,109, 88,150,157, 26, 20, 20, 52,226,149, 87, 94, 49, 73, 36, 18,232,116,186,218,215,194, 52,100,200,144,226,145, 35, 71, +184,158, 56,113,194, 42,175, 24, 15, 15, 15, 15, 79,195, 88,106,139,252,183,240,200,131,245,119, 45, 70, 40, 20,110, 58,115,230, + 76,120,191,126,253, 68, 3, 7, 14, 12,243,246,246, 14,203,201,201,137, 7, 0,111,111,239,176, 33, 67,134,132,185,187,187, 99, +195,134, 13, 58,161, 80,184,169, 37,215,168,119,179,139,245,242,242,250,232,208,161, 67,223, 79,153, 50, 5, 30, 30, 30,225, 79, +100, 33, 45, 96,233,210,165,228,171,175,190, 90, 43,151,203,163,164, 82,169, 67,171, 86,173,202,135, 14, 29,154, 98,111,111,159, +158,145,145, 1, 74, 41, 92, 92, 92, 80, 89, 89,137,228,228,100,238,204,153, 51,101,118,118,118, 63, 53,167,107, 50,153,174, 63, +204,202, 10,236,221,183,183,231,197, 27,137, 55,163, 94, 24,209, 95, 32, 18, 8, 50,178,242,174,183,114,117,177,253,237,202,229, + 10,147,201,116,189, 57, 29,173, 86,155,193, 48,140, 11,165,180, 85, 76, 76, 12,220,220,220, 80, 90, 90, 10,179,217, 12,147,201, +100,212,233,116, 54, 73, 73, 73, 48, 24, 12, 48, 24, 12,112,112,112,192,221,187,119,213, 12,195,252,218,152, 38,195, 48,147, 9, + 33,159, 80, 74,113,255,254,253, 92, 0, 80, 42,149, 29,156,156,156,246, 50, 12, 3,149, 74,133,152,152,152,241, 42,149, 42,185, +246,156,166,130,220,235,162, 86,171, 11,189,188,188,166, 79,158, 60,249,147,160,160,160, 0, 74, 41,218,183,111,143,193,131, 7, +227,228,201,147,120,240,224, 1,180, 90, 45,251,251,239,191,239, 83,169, 84,199,154, 91,127, 45,238,238,238, 97,182,182,182, 11, +102,204,152,225, 17, 26, 26, 10,189,190,186,119,172,157,157, 29,116, 58, 29, 28, 28, 28,240,244,211, 79,223, 91,182,108,153,137, + 82, 76,164,148,230, 91,170,205,195,195,195,195,211, 56,255, 4,195,170,150, 71, 6, 22,165,148, 16, 66,254,125, 85, 71,107, 80, +171,213,133,222,222,222,191,196,197,197,141, 24, 59,118, 44, 98, 98, 98, 38, 2,120, 23, 0,100, 50,217,196,177, 99,199, 34, 46, + 46, 14, 73, 73, 73,191,168,213,234,194,166,213, 44,131, 16,162, 51, 26,171, 29, 56, 54, 54, 54,114,107,206,165,148, 6,212,108, + 13,130, 82, 26,208,216,177,230, 88,186,116, 41,249,250,235,175, 31,204,158, 61,187,205,140, 25, 51, 68, 14, 14, 14, 40, 43, 43, +179,219,185,115,167,251,235,175,191,174, 92,182,108,217,165,252,252,124,108,223,190,189, 42, 41, 41, 73, 47, 20, 10,147,164, 82, +233,225,216,216, 88, 67,115,218,122,189,254,251, 79,151,125,212,127,247,158, 31,130,131,130,219, 59,159, 60,115,254,166,171,171, +131,220,207, 47, 64, 86, 94, 86,102,248,122,253, 23, 34,173, 86,187,173, 57,157,170,170,170,195,209,209,209, 47,248,248,248,180, +138,143,143,135,209,104, 4,203,178, 24, 52,104, 16, 40,165, 50, 0,156, 72, 36,194,189,123,247, 96, 50,153, 10, 30, 60,120,144, +155,154,154, 42, 3,176,178,153,215,240, 79,134,146, 64, 32, 24, 55, 98,196, 8, 48, 12,131,193,131, 7,227,200,145, 35, 99, 1, + 44,109,108,124, 83,228,230,230,166, 0, 24, 23, 18, 18, 34, 41, 43, 43,235,254,236,179,207,110,120,246,217,103,113,243,230, 77, + 92,190,124,249,101,153, 76, 86, 96, 50,153, 24, 79, 79,207,201,132, 16, 7,147,201,180,183,168,168, 40,175, 49, 61, 79, 79,207, + 62,129,129,129, 75, 87,175, 94, 69, 60, 60, 60,193,178, 12,204,102, 19, 10, 11,139,161,209,104, 16, 18, 18, 2, 95, 95, 95,172, + 92,185, 18, 0,142,240,198, 21, 15, 15, 15,207,147,227,239,178, 69,254, 14,254, 20,131,213,212,194, 60, 60, 60, 20, 21,101,197, +179,252,252,252,108, 0, 64, 38, 17, 14,112,115,115,251,172,168,168,168,210,218,139,234,116,186, 31,246,236,217,243,220,218,181, +107, 37,195,134, 13,107,231,237,237,221, 3, 0,162,162,162,218,217,219,219, 99,207,158, 61, 38,157, 78,247, 67, 75, 22,212, 16, + 28,199, 13,142,136,136, 64, 73, 73, 9, 50, 51, 51,111, 88,115,238,177, 99,199, 20, 0, 58, 53,119,172, 57,190,250,234,171, 13, +179,103,207,110,179, 96,193, 2,145, 94,175, 71, 69, 69, 5,196, 98, 49, 38, 77,154, 36,209,104, 52,126,235,215,175, 87,253,254, +251,239, 55,140, 70,227,214,212,212, 84,171,234, 86,169, 84,170, 42,165, 82, 57,115,249,167,203,247,174,254,226, 11,247,146,226, +210,100,137, 84,174, 87,200,101, 46,243,222, 95, 70,213,106,245,123,106,181,186,217, 82, 15, 0, 86,238,221,187,119,200,115,207, + 61,119,199,199,199,199,189,168,168,168,117, 69, 69, 5, 45, 41, 41, 33,168,142,165, 34, 0,112,231,206, 29,100,101,101, 49, 44, +203, 94, 2,240, 9,165,180,217,237,199, 90,188,189,189,157,123,244,232, 49,196,213,213,245,209, 86,100,215,174, 93,135,120,123, +123,127,149,147,147, 99,245,182,115, 45,229,229,229,163,158,126,250,233,247,166, 77,155, 6,179,217,140, 23, 94,120, 1, 57, 57, + 57,107, 50, 50, 50, 14, 40,149,202,241,147, 38, 77,106,229,234,234,138,247,223,127, 95,142, 58,198, 92,125, 8, 33,175,141, 27, + 55,142,200,229,182, 96, 24, 6, 50,153, 4, 50,153, 12,118,118, 14,112,113,113, 65, 86, 86, 22, 6, 12, 24,192,165,167,167, 31, + 85, 40, 20, 77,102,119,242,240,240,240,240, 88,207, 63,197,200,178, 40,200,221,219,219, 59,194,221,221,125,122, 65, 65,129, 77, +109,106, 61, 33,196,166, 75,187,118,155,148, 74,229,183, 42,149,234, 55,107, 46, 90, 90, 90, 90,225,233,233,121, 52, 54, 54,118, + 76, 84, 84, 20,206,158, 61,251, 58, 0, 68, 69, 69, 33, 54, 54, 22,233,233,233, 71, 75, 75, 75, 43,172, 94, 77, 3,120,121,121, +189,216,191,127,255,215,123,244,232,129, 99,199,142,129,101,217, 70,183,179, 26,162,110,198, 96, 67, 89,132,181,199,154,211, 17, +137, 68, 47,205,152, 49, 67,164,215,235, 65, 41,133, 68, 34, 65, 69, 69, 5,242,243,243,209,183,111, 95,201,236,217,179,219,107, +181,218, 15,178,178,178, 90, 84, 20, 84,165, 82,229, 4, 6, 6,166, 86,233,245, 98,103, 87, 23,157,189,173,148, 86,104, 52,130, + 59,119,110,230,169,213,234, 76, 75, 52, 40,165, 70, 66,200, 51,167, 79,159, 94, 44, 20, 10,199,122,121,121, 97,204,152, 49,100, +224,192,129,144, 74,165,168,170,170, 66, 89, 89, 25,142, 29, 59, 6,134, 97,252, 1,160, 85,171, 86, 30,109,219,182,253, 73, 32, + 16,168,211,211,211,223,108,238, 26, 44,203, 70,141, 26, 53, 74,100, 54,155,177,108,217, 50,124,252,241,199, 24, 58,116,168,232, +250,245,235, 81, 0,182,180,100,237,222,222,222,147, 39, 78,156, 56,121,204,152, 49,208,104, 52,136,141,141, 69,239,222,189,177, +114,229, 74,207,203,151, 47,191, 27, 17, 17, 1,145, 72,132, 11, 23, 46,128, 97,152, 70, 27,182, 70, 70, 70,138,132, 66, 97,128, +151,151, 23, 50, 51, 51,161, 80, 40,224,225,225, 1, 39, 39, 39,184,185,185, 97,237,218,181, 88,183,110,221,109,161, 80,184, 81, +165, 82,165,182,100,174, 60, 60, 60, 60, 60,255, 27,136,128,106,107,177,246, 64,221,199,206,206,206, 14, 54, 54, 54, 83, 70,140, + 24,209,231,133, 23, 94,192,224,193,131,255,116,242,134, 13, 27,236, 98, 98, 98,230,121,121,121, 61, 3, 96, 99,110,110,110,137, +165, 23,230, 56,238,240,222,189,123,135,245,234,213, 75,209,191,127,255, 0, 0,144,201,100,198,189,123,247,234, 56,142, 59,108, +237, 66,234, 23,125,244,246,246,142, 16, 10,133, 19, 71,142, 28, 25,241,198, 27,111, 32, 33, 33, 1,123,246,236,185, 23, 24, 24, +120,214, 74,221,180,102,178, 8,215,195, 2,111, 22,195, 48, 78, 14, 14, 14,168,168,168,128, 68, 34, 1,195, 48, 40, 46, 46,198, +253,251,247,225,234,234,138,242,242,114,135,182,109,219, 38, 88,187,238,186,200, 37, 92,183, 69,115, 39,183,215,235,171, 66,202, +203,203, 25,145, 72, 36,146,137,217, 38,107, 95,213,135, 82,106,240,245,245, 29,197,178,172,155,209,104, 52,123,120,120,136,207, +157, 59, 7,169, 84,138,234,236,207, 48, 72,165, 82,163,183,183,183, 6, 0, 92, 93, 93, 5, 43, 86,172, 16,207,153, 51,167,217, +185,119,235,214, 77,220,182,109,219,113,129,129,129,184,114,229, 10, 18, 19, 19,211,174, 92,185, 18,208,173, 91, 55,248,248,248, +140,235,214,173,219,142,184,184, 56,115,115, 58,117, 9, 9, 9,145,132,135,135,191, 62,102,204, 24,164,165,165, 97,197,138, 21, + 69,121,121,121,231, 79,159, 62,253,226,180,105,211,132,189,123,247, 70, 81, 81, 17,118,236,216,193,220,184,113, 99, 91,126,126, +254,174,198,180, 46, 92,184,192, 41,149, 74, 16, 66, 32, 20, 10,161,211,233,144,158,158,142,167,159,126, 26,219,182,109,195,250, +245,235,119,229,229,229,241, 94, 43, 30, 30, 30,158,127, 3,141,217, 34,255,173, 52,234,193,242,242,242, 26,238,226,226,242,214, +184,113,227,132, 65, 65, 65, 80,171,213,176,183,149, 25, 9, 33, 82, 0,176,183,181, 49,154,205,102, 76,155, 54, 13,225,225,225, + 61,230,205,155, 23,209,186,117,235, 93,249,249,249,205, 6,101, 3,128, 90,173,214,121,122,122, 30,124,231,157,119, 86,222,186, +117,211, 31, 0,174, 93,187,150,174, 82,169,230, 91,184,157,245,136, 58,197, 41,137, 66,161,184,211,190,125,251,226, 33, 67,134, + 56,143, 30, 61, 26,110,110,110,184,121,243, 38, 86,172, 88,145,160,215,235,167,199,196,196, 48,214,104, 63, 41, 68, 34, 81, 89, + 73, 73,137,187, 84, 42, 69,121,121,249, 35,227, 74,171,213,162,164,164, 4,148,210,138,152,152, 24,182,165,250,222,222,222,207, + 12, 27,242, 76,216,234,181, 95,162, 74, 87,137,107,177,199, 81, 90, 82,132, 77, 91, 14,117,242,246,246,126, 38, 39, 39,231,130, +165, 90, 12,195, 4, 28, 60,120, 16, 0, 32,149, 74,241,201, 39,159, 64,169, 84,194,193,193, 1,149,149,149,152, 60,121,178,116, +214,172, 89, 0,128,196,196, 68,216,217,217, 89,164,155,151,151,215,127,202,148, 41, 14,102,179, 25,167, 78,157, 50,176, 44, 59, +243,236,217,179,135,187,116,233, 34,235,215,175,159,195,238,221,187, 7, 0, 56,109,205,186, 25,134,145, 42, 20, 10, 41,203,178, + 56,120,240, 32,178,178,178,222, 40, 42, 42,202,247,240,240, 56,244,193, 7, 31,188,223,161, 67, 7,191, 7, 15, 30,100,105, 52, +154, 85,106,181,186, 73,239, 32,165,148, 83, 42,149, 15,207,156, 57,227, 59,102,204, 24, 72, 36, 18,148,150,150,194,222,222, 30, +171, 87,175,166, 38,147,201,162,207, 54, 15, 15, 15, 15, 15, 79, 83, 91,132,175,254,242,203, 47, 66,142,227,176,121,243,102,196, +197,197, 81, 59, 7,151,217,246,142,100,167,131,131, 3, 91, 86, 86,246,234,170, 85,171, 94, 88,188,120, 49,233,219,183, 47, 98, + 99, 99,137,191,191,127, 20,128, 71, 55,161,230,186,109,151,151,151, 95, 87,171,243,253,235, 84,109,247,151,201,108,154,204,118, +171,175,217, 64, 49,203, 46,159,126,250,105,188,187,187,187, 57, 62, 62, 30, 27, 55,110,228,226,226,226, 78, 0, 88,173, 86,171, + 27, 44, 39,240,119,116, 26,103, 24,230,224, 23, 95,124, 49,101,254,252,249,226,188,188, 60, 36, 39, 39, 67,171,213,194,108, 54, +227,228,201,147,140, 78,167,107,214,107,215,212, 60,115,114,114, 46,116,104,231,139, 29, 91,214,194,100, 50, 32, 47, 55, 11, 0, + 80, 84, 92,142,166,140,171,134, 52, 5, 2, 65,217,196,137, 19, 21, 70,163,145,140, 27, 55, 78, 92, 80, 80,128,118,237,170,235, +157, 86, 84, 84,224,196,137, 19, 8, 14,174, 46,171,117,247,238,221, 71,143,155,155,167, 66,161, 24,219,167, 79, 31,100,102,102, + 34, 33, 33,225,164, 90,173, 46,244,244,244, 60,153,149,149, 21,213,189,123,119, 28, 62,124,120, 12, 26, 49,176,154, 90,123,109, +121, 6,142,227,224,226,226,162, 5,128, 26, 99,234,157,198,214,221,152, 38,195, 48,243, 14, 31, 62, 60, 37, 54, 54,246,153,119, +223,125,151, 12, 28, 56, 16, 0,160,213,106, 89, 75,226, 13,255, 91,186,214,243,154,188, 38,175,201,107,254,167,105,254,211,104, +202,192, 98, 56,142, 67, 76, 76, 12, 14, 29, 58,196, 26,141,198, 5,121,121,121,117,107, 50,109,247,241,241,185, 20, 21, 21,181, + 38, 57, 57, 89,152,152,152, 8, 74,169, 85, 30, 24,189, 94,111, 38,228,175,199,172,209,104,136,109,219,182, 33, 63, 63,223,152, +149,149,245,179,201,100,218,211, 84,214, 88,115, 60,169, 44,194, 25, 51,102,204,250,250,235,175, 7,107, 52, 26,223,168,168, 40, +177,139,139, 11, 74, 74, 74,112,234,212, 41,230,230,205,155, 89, 51,102,204,120,183,165,115, 4, 30,121,176, 48,241,173, 57,168, +170,170,196,239, 87,142,163,172,164, 8,177,215,147, 97,173, 7, 75, 36, 18,249,154,205,102, 25,195, 48,185,148, 82,188,246,218, +107, 96, 89, 22,122,189, 30, 26,141, 6, 37, 37, 37,250, 25, 51,102, 8, 0, 64,161, 80,224,185,231,158,179,168,170,127, 64, 64, +128,175, 72, 36,194,233,211,167, 33, 20, 10,127, 2, 0,161, 80,248, 83,116,116,116,212,184,113,227,224,229,229, 21, 72,106,114, +116,173, 89, 59,199,113, 96, 24, 6, 86,158,214, 32, 5, 5, 5, 5, 0, 62, 81, 42,149, 63,206,157, 59,119, 90,143, 30, 61,194, +150, 46, 93, 10, 0,194,199, 22,231,225,225,225,225,249,159,161, 81, 3,139, 16,178,191,127,255,254, 47, 83, 74,133, 2,129, 96, + 79, 61,227, 10, 0,144,157,157,157,238,237,237,189,217,207,207,239, 81, 3,104,107, 46, 94, 83,121,253,115,129,128,204,173,126, +110,125,193, 70,250, 71,235,148,185, 0,136, 72, 36,222,115,245,234,213,133, 42,149, 42,223, 90,131,175, 33,158, 84, 22,225,146, + 37, 75, 40,128, 14, 95,125,245,213,134,195,135, 15,191, 84, 85, 85,229, 36,151,203,203, 24,134, 57, 56, 99,198,140, 89, 53,191, +111, 49, 57, 57, 57, 23,218, 5,120,159,121, 41,106,216,115, 1,126, 74, 0, 64, 90,134, 10, 69, 37,229,103,172, 49,174, 0, 32, + 51, 51,211, 0,192,224,233,233, 25,245,195, 15, 63, 28,172, 49,122,192,113,143,250, 57, 27, 68, 34, 81, 7, 0,208,104, 52,109, + 14, 31, 62,188, 87, 36, 18,229, 52, 42, 88, 67, 98, 98,226,254, 37, 75,150,140, 79, 79, 79,255, 57, 39, 39, 39,181,102,222,169, + 74,165,114,163, 74,165, 26,159,149,149,181,219, 90,227,202,104, 52,154, 13, 6, 3,195,178,172,200,100, 50, 81,163,209,248,216, + 6, 58, 0,212,212,229,154,165, 84, 42,123, 13, 30, 60,120, 34,165,180,224, 73,232,242,240,240,240,240,252,111, 64,158,196,183, +254, 70,197, 45,116, 33,214, 15, 80,111,137,166, 53, 26,150,104, 42,149,202,233,132, 16,139,188, 83, 53,215, 77, 83,169, 84, 95, + 55,162,249,184,193,122,180,177,121, 54, 68,135, 14, 29,104, 74, 74,138, 69, 65,130,205,105,122,123,123,219,136, 68,162,250, 30, + 42, 67,141, 17, 86,171, 65, 0, 8, 41,165,140, 53,243,180,134,166, 52,253,252,252,254, 21, 18, 18, 50,225,214,173, 91, 7,114, +115,115,215, 63, 9,205,150, 82, 79, 83,240,152,114, 92, 3,154, 79, 4, 94,147,215,228, 53,121,205,255, 52, 77, 11,136, 0, 80, +219,154,173,182, 78,102,171,122,143,141, 0,234,222,179,106,159, 23, 2,184, 94, 71,163,238,241,230,206, 5,128, 34, 0,119, 96, + 65, 87,148, 90,172,234, 69,248,239,226, 73,180, 25,121,210,173, 74,234, 26, 75, 79,128,191,181,158,199,131, 7, 15,158, 88,246, + 69, 78, 78,142, 30,128,190,169, 49, 53, 94,167,255,151,228, 1, 0,200,200,200,248, 38, 50, 50,114, 83,110,110,238,255,219, 28, + 26,129,107,126, 8, 15, 15, 15, 15,143, 5, 68, 0,104, 69, 8, 57, 14, 0,148,210, 17, 0, 64, 8, 57, 94,255,113,237,152,218, +113,117,199,212,106,212, 63,222,212,185, 0, 48,127,254,252,133, 43, 86,172, 80, 0, 56,111,233,132, 31,247, 27, 54, 15,207,127, + 4,255, 95,217,161, 60, 60, 60, 60, 60,127, 11,143, 12,163,250,134, 80,125,106,141,166, 58, 70, 85,163, 52,164, 83,123,141,186, +207, 87,174, 92,249, 25, 0,171, 58,193,136, 8, 33, 97,141, 76,208, 98,215, 95, 99, 26, 77,253,174, 57,125, 94,147,215,228, 53, +121, 77, 94,147,215,228, 53,255,121,154, 79,234,252, 39, 65, 67,198, 90, 61,143, 23, 8, 33,199,231,207,159,191, 16, 86,108, 15, +214,138,255,219,126, 0,132,241,154,188, 38,175,201,107,242,154,188, 38,175,201,107, 62,230,207,240,106,147,133, 14,175,251,184, +161, 99, 77, 61,110,238, 92, 11,198, 90, 60,231,255,136, 24, 44, 30, 30, 30, 30, 30, 30, 30,158, 38, 40,164,117,188, 77,180,218, +195,196,206,159, 63,127, 97,221, 56, 41, 0, 6, 0,178,250, 39,215,143,221,106, 10,107,198, 54, 5,111, 96, 53, 66,120,123,225, + 50, 95, 95,247,238, 64,141,151,175,166, 68, 1, 87, 19,175, 78,107, 76,120, 80, 14,148,163, 80,229,149,197,221, 73,163, 31, 53, + 34,215,108,172, 91,223,190,173, 93,132, 85,149,235, 88,142,237, 13, 0, 4,130,139, 98,177,211,187,209,215,114,203, 96, 97,176, +116,199,118,164,163,141, 8, 31,112, 28, 58, 19, 2, 16,130, 59,122, 6, 95,220, 75,165,247, 44, 57,191, 41, 8, 33, 36,212, 31, +147,165, 50,197, 56, 71, 39,231,246,165,197, 69, 15, 76, 38,195,143,137, 25,216,244,232,181,176,130,224,118, 36, 28, 44,230,177, + 28,196, 34, 1,214,221,203,160,151, 31,119,142, 60, 60, 60, 60, 22,242, 68, 50,124,235,241, 68,178,197,121, 26,229, 58,128,136, + 58, 70, 79, 33,128,187, 43, 86,172, 40, 93,177, 98, 69,221, 99,183, 1,116,169, 25, 87, 8,252,197, 80, 50,214, 60, 55, 54, 48, +198,104,201, 88, 75,177,202,192, 10,245, 33,211, 64,241, 49, 8, 40,128,165, 9,217,116,163, 85,231,183, 39,131,108, 68,194,173, +160, 16,234,205,236,123,148,197,197,134,198, 17, 33,250,217,136,133,107, 64,192,233, 25,246,205,132, 20,122,206,210,107,132,117, + 32, 67, 68, 68,176,155,227,168,152,229,232, 78,112, 56,110,103,198,111,177, 57,180,201, 76,184,250,248,250,186,119, 63,114, 46, +239,185,243,251,103,162,103,120,123, 80,206, 12, 80, 6,138,224, 15, 16,189,235, 53,244,236,228, 91,125,140, 51,195,174,235, 26, + 12,237,227,216,226,255, 28,125,251,182,118,145,115,220,157,141,223,239,110,237,219,190, 23,161,156, 1, 41,183, 78,189, 58,107, +238,135,253, 7,246,240,234, 28,125,173,249, 30,143, 93, 58,144,183,218,181, 13,250, 96,206,135,107, 5, 74,165,183, 29,199, 24, +153,188,236,196,110, 95,173, 93,242, 83,151, 14,100,205,237, 7,116,171, 37,115, 33,132,144, 16, 63, 76, 17,137,165, 99,228, 10, +219,246, 58,157, 38,133, 53,155,127, 12,107, 39, 26,242,197,170,245,225,207,244, 31,106,199, 25,242, 5,102,134,132, 28,248, 97, + 95,155,175,191,221, 56,140, 16,242, 60,165,212,186,140, 57, 22,179,239, 30,157,252,146, 88, 36, 36,193,195,183,216, 18, 66, 6, + 91,173, 1, 32,204,159,132, 82,224, 95,205,174, 11,248, 38, 62,157,182,168,215, 99, 71,127,242, 61, 1, 2, 1, 28, 36, 20,251, + 19, 50,248,154, 88, 60, 60,255, 52,188,188,188,206,231,230,230,246,127,194,154, 61,115,115,115,175, 62, 73,205,255,113, 26,234, +244,114,205,194,113,127, 59,214,122,176,150, 39,164,100, 59,131, 51, 33, 52, 48, 96, 25, 0,171, 12, 44, 27,145,112,231,245, 59, +234,214,160, 38,108, 89,251,206, 1,163, 25, 96, 24, 19, 88,198, 12,150, 49, 87, 63,102,205,224, 24, 61,150,172,139, 1, 24, 13, +186,135,119,216, 9,192,211,210,107,136, 33,216, 29,247,219, 25, 23,194,148,227,192,142, 21, 51,178, 84,149, 51,206, 93, 83, 21, +133,250,145, 5,137,153,216,110,205, 77,252,252,254, 89,216,243,211,201,156, 13, 91,126, 72,226, 64,225,108, 39, 11,154, 16,149, +224,179,235,167,243,217,235,183,233,147, 40, 71,225,100, 47, 11,122,253,249, 20, 95,107, 94,135,250, 8,171, 42,215,125,187,101, +123,107,223, 54,109,136, 57, 99, 57, 96, 54,192,199,119,152,240,195, 57,111,121, 46, 93,245,205, 90, 0,175, 55,117,126,112, 0, + 9, 9,236,208,241,189,157, 7,174,248,106, 43, 11,140,191,158, 88,152, 74, 40, 53,187,185, 5, 75, 62, 89,190, 90,190,104,193, +156,119,131, 3,200,213,164, 52,154,216,148, 14, 33, 68,208,209, 15, 71, 63,251,236,139,206, 3,159, 29,105,199, 26, 11,133,250, + 74, 77,224,214,237,223,127, 28, 28,218, 67,209,167,171,183,164,240,183,169, 68,167, 41,129,137,202,101, 3,186, 15,116,208, 77, + 24,107,254,126,215,190,233, 0,190,180,102,205, 44,243, 71,173, 17, 19, 3, 27, 0, 98, 88, 27, 64, 8,128, 2,255,186, 21,123, +126, 10, 83,122, 29,224, 76, 53, 70,175, 9,224,204,160,117,254,125,234,149,237, 0, 48,213, 90,125, 0, 16, 16, 60,119,238,220, +117, 79,181, 58, 47, 98,221,186,207, 22,132,248,147, 83, 32,216,125, 47, 29, 23, 90, 98, 20,242,240,240,252,103,162, 84, 42, 89, +149, 74,245, 68,187, 54,120,121,121, 13,203,205,205, 61,249, 56, 26, 74,165,242, 3, 0,111,213, 60,221,170, 82,169,190,120,220, +121, 69, 68, 68,120, 83, 74, 91, 3, 0, 33, 36,255,250,245,235,205, 22,139,230,177, 14,107, 13, 44, 27, 80, 14,248,237, 5,128, + 88,151,174, 8, 0, 20,176, 1, 17, 2,230, 74,140, 26, 49, 8,110,174,158, 0,171, 5,216, 42,128,209, 1,108,245, 79, 81, 97, + 22,192,104,129,194, 83, 96, 40,253,203, 94,106,179,152,203,129,130, 31,241, 92, 47, 95, 56,217,219, 96,214,203, 33,110,155,143, + 36,111,221,122,228,254, 32, 0,227, 44,154, 43,165,232,217,181, 61, 54,108,209, 38,253,124,190, 96, 48, 0, 12,143,116,251,165, +103,167, 54, 62,235,183,233,147, 78, 92, 40, 25, 2, 0, 67,251, 56,158,234, 17,214,218,151,179,126,151,236, 17, 44,199,246,241, +109,215,149, 48, 15, 87, 65, 32, 40, 69,101,101, 17,178,211,118,192,205, 99,176,128,225,184,126,205,157, 47, 23, 97,254,172, 15, + 86,138,180,149,106, 35,101, 10, 56, 15,187, 34,137, 24, 68,200,105, 47, 25,171,242,203, 42,103,255,107, 2,243,222,252,207,230, + 3, 24,223,148, 78,136, 63,166,175, 89,181,190, 83,239, 30, 65,238,249,151,103,145,202,114, 53,204, 84, 46,123,254,153,222,112, +110, 19,194,169,111,173, 33, 50,207, 65,112,246, 11, 64,206,221, 61,200,186,115,136,244,237, 17, 37,219,185, 87, 50, 1,141, 24, + 88, 29, 60, 73,159,193,207,245, 56, 16,208, 70,233, 73, 41, 7,142,227, 64, 41,135,215,199, 13,193,130,175, 83,161,173, 98, 48, + 98,208, 83,189, 93, 29,133,134, 21,239, 69,130, 82, 14,217,170, 98,221,175, 87,146, 6,166,230,210,102,191,249, 17,224,155, 46, +189,250,247,185,115, 45, 54,216,164, 58,142,136,209, 43,146, 8,240,104,187,145, 2,125,110, 70,111, 15, 6,182, 55, 39,213,176, + 62, 33,164,163, 31,216,135,191,175,132,119,215,201,194, 77,219,127,105, 85, 94,156,251,250,161, 31,190,125,233,219,205,155,246, +160,133, 70, 27, 15, 15,207,127, 30, 42,149,234,137, 27, 89, 87,174, 92, 81, 61,142,145, 21, 17, 17,209, 15,192, 42,149, 74, 5, + 0, 80, 42,149,171,122,246,236,185, 24, 0, 26,136,206, 40,167,148,142,191,126,253,122,131,187, 67,181,188,251,238,187, 74, 0, +126, 55,110,220,168,189,134, 95, 68, 68,132, 95, 67, 99, 21, 10, 5,219,165, 75,151,204,181,107,215,170, 90, 50,255,255,101,172, + 53,176,146,242, 47,205,238,106, 44,209, 1, 64, 82,115,131,105,189, 84, 75,189,153, 93,185, 99,253,235, 43, 67, 3,157, 81,161, + 49,226,236,165,204, 26, 15, 22, 3,150, 53, 63,250,119,112, 47, 55, 60,205, 76,197,151,251,239,131, 97,185, 21, 77,105,214,199, +196,113,175,132,247, 27,251, 3, 71,169, 84,161, 16,148,183,243,113,117,127,111, 66, 23,193,172,151, 67, 81, 84,101, 50, 10, 0, + 0, 32, 0, 73, 68, 65, 84,165,103,198,134,248,145, 95, 19, 51,232, 22,139, 52,185,191,150, 86,170, 41, 86,254,231, 99,220, 95, + 59,242, 52, 55,207, 90,186, 4,201,123,142, 30,218,215, 1,230, 18,176,218, 12, 24, 89, 14,121,121, 90,164,171, 36,112,228,254, + 92, 59,181, 49, 77,142, 67,231,214,173, 61, 21, 87,206,204,203,112,183, 47,149,184,202, 89,137,132,112, 84, 96,166, 66,163, 49, + 73,239,172, 28, 36,230, 56,116,110,232,220,186,154,114,185,253,107,125,251, 15,119,124, 24,253, 22,145,251, 12,133,187,191, 55, + 50,226,118,160, 32,254, 56,138, 11,178,136, 35, 45,133,162, 67, 0,134, 70,189,140, 85,211,187,163,162,162, 18,164, 48,205, 81, + 42,149, 57, 53,166, 73, 5, 24,191,230,243, 79, 61, 69, 34, 65,245,235, 73, 25,128,154, 1,106,134,166,210, 0,163,209, 8, 27, + 9,133,173, 13, 5,106,182, 97, 89,214,168,232, 60,112,254, 59, 0,174, 54,164, 89,151,248,116,154, 16,234, 79, 46,131, 50,193, +148,173, 2, 1, 46, 39,164,211, 71, 70, 79,152, 63, 9,237, 54,112,210,191, 8,240, 77, 83,107,111,140,176,182, 24,209, 61,216, +206, 86,206, 36, 33, 39,102, 6, 82, 89, 27,234,209,233, 45,188, 60,126,186, 98,211,214,205, 35, 9, 33,211,234,198,160, 89,250, +190, 91, 3,175,201,107,254,183,106, 58, 58, 58,250,183,109,219,118,177,217,108,238, 39,145, 72, 60, 76, 38, 19, 56,142,203,151, + 74,165,151, 50, 51, 51, 63, 41, 47, 47, 79,255, 79,152,103, 93, 78,157, 58,101,177,145,101,137,166, 88, 44,198,201,147, 39, 83, + 44, 53,178,234,107, 10, 4,130,221, 7, 15, 30,196, 15, 63,252, 0, 0, 56,127,254, 60, 58,116,232, 96,219,208,185,217,217,217, +182, 47,190,248,226,110, 0, 62, 77,105, 62,120,240,192,255,211, 79, 63,197,193,131, 7, 1, 0,187,118,237, 66, 96, 96, 96,131, +243,185,125,251,182,112,209,162, 69,254, 0,254,100, 96,253, 59,222,163,127, 26,143, 12,172,154, 30,187,205, 5,233,165,181,182, + 23,119,133,217, 12, 0,105,214, 94, 44, 49,149,126,222, 37, 80, 60, 36,250,208, 55,253,108,164, 2,124,188,238,189,236,194, 66, +205, 83, 34, 97,117,192, 32,195, 66,224,236, 36,141, 93, 49,163,139,111,105,185, 30, 63, 95,200,189,152,144, 70,173,114,133, 38, +164,210,179, 0, 30,221,240,195,218,146,192,215, 63, 60,187,127,255,231, 67, 58,207, 25,223, 25, 71, 99, 50,231, 0,216,210,184, + 66, 53,148,227, 64, 41,243, 40,168,189,230, 96,205,150,211, 31,199, 56, 74, 1,106, 6,181, 50, 62,113,233,210, 49,162,163,251, + 15, 15,177,149,137,190,154,250,246, 20, 7,115,113, 34,202,203, 88,228, 23,105,145, 85,232, 4, 86,222, 14,201, 9, 87, 89,161, + 64,208,108,252, 25, 17,160,130,154,181,246,206,114,185, 32,164,199, 59,158,229,241, 11, 43,100, 66,179,208, 41,252, 83,123,245, +221, 53, 15, 25, 67, 65, 37, 17,192,212,156,142,131,163, 99, 7,131, 38, 83, 88, 94, 86, 12,167, 78, 33, 24,250,252, 72,124,252, +102, 71,104, 52, 90, 20, 22, 95,161,237,219, 56, 18,253,205,189,248,240,181, 96, 20, 23,229,193,104, 6, 4, 21,250, 18,189, 81, + 95,217,152, 38,165,216, 52,251,189,185,175,180,241,110,101, 91,155, 44, 64, 57, 22, 93,194, 2,240,108,255,158, 56, 27,123, 5, +215,111, 38,131,163, 92, 77, 50, 1,139,156,130, 50,181,222,196,238,176,230,245,164, 28, 83,237, 9,173, 71, 77,220,149,213, 94, +166, 78,157,136,130,213,226,163,167, 66,236,223,156,247, 90, 27,123,123, 41,129, 94,206, 66,175, 55, 67,147,244, 53, 92,189, 59, + 65, 97, 99, 67,186,118,173, 18, 1,120, 34,253, 15,121,120,254, 41,140, 25, 51,198, 70,173, 86,199, 12, 31, 62, 60,100,208,160, + 65,138,126,253,250, 65,171,213,226,244,233,211,208,233,116,109,124,124,124,218,156, 57,115, 38,170,103,207,158,137, 62, 62, 62, +145, 63,254,248,163, 85, 49,178, 53,212,222,175,158,104,112,184, 84, 42, 69,108,108,236, 19,245,100, 73,165, 82, 92,187,118,205, + 98, 35,171, 46, 90,173, 86,210,186,117,107,184,186,186,130,101, 89,104,181, 90, 28, 57,114, 4, 21, 21, 21,224, 56, 14,114,185, + 28,107, 78,149, 67,127,255, 32,182,126,245, 41,202,203,203, 37,205,105, 22, 21, 21,145,160,160, 32, 24, 12, 6, 48, 12, 3,189, + 94,143,115,231,206, 61,122, 46, 18,137,176,236,160, 26,134,228,253,216,185,105, 13,138,138,138,158, 88,119,144,230,176,208, 22, +249,175, 64, 4,252,177,160,191, 99, 97, 44,203, 44,216,188, 99,127,236,130, 25,227, 48,253,181,129, 62,159,124,121,120, 80, 98, + 26,221, 9, 0, 33, 1,228,245, 9,195,218,251, 58,217,138,177,244,187, 27, 0,232,130,199,189, 94,124, 38, 77, 14,109, 71,230, + 28,142,201,138, 89,248,102, 87, 4,248, 56,116,104,215,142, 72, 83, 83,105,243,241, 62,156, 25,206,118,178,160,225,145,110,191, +128,114,112,178,147, 5,131,178,112,178,151, 5, 13,237,227,120,138,163, 20, 78,182,146, 96,218,128,167,171, 49,122,132,201,222, +150,139, 5,111,219,218, 59,249,206,158, 58, 65, 62,124,248,139,114, 91, 41, 69,113,226, 73, 84,208, 80, 24,109,109, 65,117,101, + 72,127, 16,207,158,186,112, 35, 87,230,234,249,126,179,211,100,113, 81,149,125,111,116,219,246,131,156, 10,111,124, 88,224, 63, +112,175,159, 0,172, 64, 27, 27, 85, 96,107, 31, 34,185,124, 59,158,225, 88, 92,105, 78, 71, 83, 81,145,105, 54,193, 83,111, 22, +219,167, 94,219,142,249, 19, 66, 81, 86, 90, 8,189,129, 65,153,150, 49,121,186,153,100,250,210,187, 48, 24, 25, 24, 76, 20, 98, +133, 18,103, 98,227,139, 56,198,124,170, 49,205, 84, 21,189, 5,192,174,238,177,118, 74,210,101,158,179,252, 22,216, 42,100, 61, + 84, 97,231, 79,177, 93,107,198,181, 28,202,128, 50,127,252,141,174, 13,126,111, 73,112,123,199,182,164,135, 92, 46,254,106,233, +252,225, 33,145,161,172,140,232,243, 64, 0, 40,108, 68, 48,216,176,112,180, 9, 0, 53,105,168, 78,175, 47, 75,136,255,255,107, + 17,196,195,243,159, 72,112,112,112,107, 71, 71,199,132,247,222,123,207,101,244,232,209,143,140,129, 29, 59,118, 96,253,250,245, +248,248,227,143, 97, 54,155,177,121,243,102,197, 79, 63,253,212,227,155,111,190,201,105,211,166, 77,104, 86, 86, 86,190, 5,242, + 4,128, 4,213,247, 46, 1,170,141, 43,118,233,210,165,244,227,143, 63, 70,221, 99,148,210,102,191, 84, 54,132, 84, 42,133, 84, + 42, 69, 82, 82,210, 19, 49,178,196, 98, 49, 36, 18, 9,164, 82, 41,238,223,191,111,181,145,197, 48,140, 48, 39, 39, 7, 21, 21, + 21,120,118,228, 72,172, 95,185, 18,253,250,245,195,160, 65,131, 64, 41, 69,116,116, 52,158,118, 78,134,203,200,103,112,239,222, + 61,152,205,102,139,118,166,114,114,114, 80, 92, 92,140, 33, 35, 71, 98,203,183,223,162, 91,183,110, 8, 10, 10, 2, 0,196,196, +196, 96,160, 87, 38,236,130, 6, 33, 57, 57,185,133, 43,183,158,191,211, 22,249, 59,248,219,203, 52,196,167,210,223, 67,252,201, +241,151,135, 71,140, 24, 57, 32, 4, 91,246,255,250,105, 72, 8,217, 15, 0,174,142,178,229,175, 13, 15, 64, 98, 90, 41,162,175, +169,142, 39,166,211,223,159,196, 53, 57, 22,110,174, 78, 10, 64, 32,133,206,200, 50, 14, 14,205,151, 61,224, 64,161,232, 56, 31, + 19, 70,223,243,233,217,201,199,135, 82,166, 38, 99,112, 45, 94,127, 62,197, 55, 34,212,195,183,122,203,203, 12,135,167,247, 2, + 92,131, 30,219, 63,209, 55,220,230,204,251, 51,103,244, 26, 62,242,101,185, 68,225, 10,174, 42, 27,230,146, 59, 40, 78, 63, 15, +131, 60, 28,133, 57, 25,216,127,244,231,242,164,116,117,133, 80, 40, 56, 43,114,244,152,123,238, 92,122,163,222,161, 90,244, 66, +172,248,120,241,130,225,251,247,236,115,148, 43,251,226,193,209, 97,101, 82,161, 89,230,238, 21,136, 42,198,158, 93,189,237,184, +147, 22, 88,217,156,142, 78, 91,113,232, 92,244, 47,227,218,123,246,177,207,136, 63, 14,157,206, 8,131, 25, 8,235,214, 31, 44, + 71,165, 68, 64, 56, 7,161,144,168,213, 37, 32,102, 78,125,233,102, 70,222,229,235,105, 66,131,160,121,237,186,136, 36,194,153, + 35, 7,117, 1,216, 42, 60,255,108, 24,214,109,139,158, 1, 96,146, 53, 26,127,129,154, 65,217, 42, 80,160, 79,168, 63,249,142, + 2,125,226, 78,173, 11,238, 62,116, 14, 96,133, 7, 43,204,159, 12,237, 20,172,220,190,238,211, 5, 46, 46,238, 62, 66,176, 85, + 32, 76, 5,229, 74,126,135, 72,251, 0, 14,222,195,193, 58,246,198,166,111, 87, 87,114, 28,221,223,146, 18, 21, 60, 60,255,100, +244,122,253,161,149, 43, 87,186,140, 24, 81,157,237, 94, 89, 89,137, 43, 87,174, 96,235,214,173,176,181,253,227,239, 36,165, 20, +195,134, 13, 3,165,212,101,201,146, 37,135, 0,244,106, 76,179,119,239,222, 35,215,174, 93,251, 48, 34, 34,226, 1,170,107, 28, + 73, 0, 8, 1,208,115,231,206, 9, 0,160, 71,143, 30,236,181,107,215, 56, 0,116,252,248,241, 98, 59, 59,187, 14,149,149,149, + 23,172,157,127,173,129, 37,149, 74,145,155,155,251,216, 70,150, 88, 44,126,164, 39,145, 72,144,155,155,107,149,145,197, 48,140, +232,196,137, 19,184,121,243, 38,150,118,237,138, 89,158,158,112,117,117,197,133, 11, 23, 64, 41,133,173,173, 45, 74, 74, 74,176, +127,255,126,244,239,223, 31, 12,195, 52,235,193, 2,128, 35, 71,142, 32, 46, 46, 14,203,186,119,199, 12, 91, 91, 56, 57, 57, 33, + 38, 38, 6, 0, 32,147,201,144,155,155,139,115,231,206, 33, 50, 50,178,165, 75,255,159,199, 98, 3, 43,146, 16, 17,241, 65,107, +179,169, 10,148,161, 0,129, 50, 36,132, 72, 18, 19,173,255,150, 32, 0, 62,220,176,237,248,240,117, 11,158, 39,147, 95,234,170, +252,228,155,243,211, 0,224,205,177,129, 94, 10,153, 8, 27,246, 39, 82, 1,240,161,181,186, 13, 17, 18, 66, 36, 2, 1,166, 61, +219, 59, 8,170, 34, 35,210, 30,150,255,154,152, 78, 45,218,210,137,222, 57, 1,187, 14,197,100,175,223,254,231,140,193,237, 71, +226, 30,174,217,169, 79,162,160,112,146,139,131, 39, 61,255,116,179, 89,132, 61,194,100,111,207,155, 51,167,215,168, 87,231,202, +205, 57,135, 97,200, 60, 1,176, 58,232,180, 4, 21, 76,123,228, 61,204,193,210,117,251,178, 13,102,193, 43, 55, 18,245, 86, 25, +150,201,201,180, 50, 36,128,140, 94,249,249,226,179,159, 45, 93, 98, 39,203,141,174, 16,139,160, 21,184,246, 19, 47, 95,188, 81, +164, 41, 55,190,152,154, 69, 53,205,233, 24, 4, 88,249,249,154, 47,135,191, 53, 97,116, 82,160, 79,164, 43,155,159,230,170, 43, + 47, 47,216,123, 42,174, 53,170,191, 57, 18, 0, 72,205, 40, 70, 97,137,150, 97, 25,243, 5,123, 19, 62, 73,200,177,192, 27, 88, + 67,128, 7,105, 53,122,120,231, 87, 91, 57, 73, 81,165, 45,133,187,179, 4,131,251,180,123, 53,192,131,204, 75, 83, 83,171,106, +140,212,165,118,139, 48,118,235,128, 96,112,166, 96,202,153, 97,204,218,109,189, 14, 48,103,206,184, 54,142, 46,182, 70, 1, 97, +181,128,216, 25,144,182, 34, 2,185, 31,132,114, 95,100,166,220, 96,230,188, 51,174, 56, 51, 51,255,123, 55,138,199,206,228,225, +225,249,167,145,149,149,245,218,194,133, 11, 47,247,236,217,211,195,205,205, 13, 97, 97, 97, 56,118,236, 24,222,127,255, 15,103, +124,120,120, 56, 0,160,184,184, 24,159,127,254,121,190, 74,165,122,173, 41,205,132,132,132,164,221,187,119,247,233,220,185,179, + 81, 34,145,148,162,198,200,202,202,202, 18,105,181, 90, 98, 52, 26,169,173,173, 45, 39,147,201,204, 99,198,140, 49, 93,187,118, +173,131, 86,171,205,106,201,252,107,141,161,238,221,187,223, 45, 43, 43, 43, 39,132, 60,118, 9,135, 90,227, 42, 56, 56,184,149, +209,104,100, 1,148,180,164,132, 3,195, 48,232,222,189, 59,206, 93,188,129, 83, 23,239,162,178, 48, 13,227, 95, 28,140,224,224, + 96,156, 62,125,186,165,211,171,214, 60,119, 25, 49, 55,238, 67,157,149,136, 9, 47,191,128,160,160, 32,156, 59,103,113,133, 36, +158, 6, 16, 1, 64,115, 46,185,142,109, 72, 23,143, 48,233,174, 15,159,111, 23, 34, 10,251, 24, 68, 36,199,225,237,199,122, 47, +248,236,187,164, 78, 94,100,252, 93, 11,178,189,234, 82, 19,152,188,239,118, 98,240,171,207,247,243,193,150, 31, 21, 31, 1,192, +216,103,253,113, 45,177, 16, 87,227, 11,246, 37,180,176,102, 81, 93, 58,121, 16, 5,108,177,239,243,185,163, 34,219,120,183,198, +214, 31, 46,131, 80, 28,178,228, 92, 74, 41,237,217,217, 23,235,183,215,207, 24,244,244, 93,179, 83,159,116,250,183,138,161, 0, +240, 92, 47,219, 83, 17, 29, 93,124,155,243,100,216,136, 5,147,135, 62,255,154,156, 81,159, 6, 87,242, 35,196, 82, 9,170,180, + 44,242, 10, 12,168, 82,200,241,235,165, 11, 85,149, 58,102,206,157, 20,166, 69, 94,187,196, 52,154, 22, 30, 72, 30,106,171,170, + 60,237, 92,218,105, 5, 4,180,210, 40,166,113,137,185,218,132, 44,122,223, 18,141,212, 84,106,236,229, 77,250,110,218,249,227, + 98,177, 88, 58, 86, 40, 4,113,119,178,109,245,221,134,101,176,183,183, 3,101, 52,160,134, 34,140,126,243,179,194,187, 15, 76, +254, 0, 16, 24, 72,236,250,117,145,236, 20, 9, 72,206,175, 55,141,139,154,187, 6, 17, 98,234,248,231,187,136, 57,179, 22, 51, +151, 28,192,166,229,207, 99,194,200,142,226, 19,191, 38, 79, 5,240, 73, 75,214, 14, 0,224,170,183, 8,123, 77,190,152, 68,128, +203, 20,232,115,227,248,242, 96,192,242,157,199,110,221,136, 88, 36, 34, 29, 59,122, 25,197,108,206,126, 16, 27, 47, 42,116,139, + 4,108, 59, 16,106, 23,134,175, 55, 44,174,220,178,117,235, 25,142, 96,105, 82, 70,211, 37, 47,120,120,254, 87,161,148,166, 57, + 57, 57, 13, 25, 54,108, 88,244,233,211,167, 93,194,194,170,219,205,197,197,197, 1,192,163,173, 40,181, 90,141, 87, 94,121,165, + 40, 47, 47,111, 8,165,180,201,152, 94,141, 70,147,126,248,240, 97,143,170,170,170,136, 69,139, 22,169,219,182,109,171, 49,155, +205, 84,163,209,128, 97, 24,218,170, 85, 43,113,183,110,221, 72,104,104,104, 85,116,116,180,107,118,118,182, 6, 64,102, 75,230, +255,214, 91,111,225,167,159,126, 2, 0, 60,137,186, 88, 18,137, 4,195,134, 13,243,186,114,229, 74,110,141,102,139,235, 98, 81, + 74,113,231,206, 29, 92, 74, 97, 33,181,117, 70,102, 82, 5,206,253,124, 20,227, 39, 79, 1,195,180, 60, 90,225,246,237,219,216, +127,238, 54, 60,188,218,161,220,112, 7, 71,142, 28,193,180,105,211, 30, 75,179, 37,252,147,182, 7,129, 58, 30,172,134, 22,212, +174, 29,145,202,140, 88, 50,248, 41,175,185, 99, 6,182, 19, 50, 58, 21, 56,142,131, 16,128,155,189, 0,219,182,108,242,255,241, +240,201,216, 78,190,194, 47, 97,228, 62,188,171,166, 58,139,175, 44,192,146,181, 59,126, 27,187,123,217, 51,162,105, 47, 5,187, + 0,128, 68, 44,192,134,125, 9, 12, 4, 88,242, 56,139,234,229, 77,108, 42, 37,152,220,218,207,241,163, 5,239, 12,119,137,236, + 25,136, 11,177,241,248,114, 79,236, 69,169, 51,118, 89,170, 67, 57,230, 79, 1,237,213,199, 26,112,126, 53,144, 89, 88, 31,150, +163,173,165, 10, 55,232, 51, 79, 66, 36,149,129, 97, 76, 40, 84,235,144,145,207,193, 70, 41,198,181, 59, 89, 85, 47,188, 58,250, +132,165,115,171, 15, 33,132,244, 9,183, 81, 46, 89,190,218,187,170, 74,195, 84,148, 21, 49, 34, 73,172, 72, 33,151, 89, 18,215, +240,136,216, 28,170,127, 38, 92,210, 13,148, 19,202,132, 84,183, 96,206, 68,219,220,228,211,104,223, 74, 5, 2, 10,185,114, 56, +236,109,133,146,190, 93, 36, 15, 1,192,207,213, 81,250,249, 39,239, 59,206,158,183,244, 82,115,218, 33, 33, 68,210, 41,176,245, +236,176,246, 46,184,112,245, 30, 46, 94,207, 74,184,248,123,114,104,255, 30, 74, 4,250, 59,205, 10, 9, 33, 43, 91,226, 17, 5, +240,104,139,176, 54,139, 48,204,159,132, 70,140, 88,212, 96,246, 96, 99,248,221, 4,151,236, 79, 65,136, 16, 20, 4,208,231,130, +201,222, 13,161,255, 12,122,232,232,242,170,173, 91,182, 46, 75,204,176, 46,233,130,135,231,127,145,178,178,178, 59, 10,133, 98, +112,151, 46, 93,118,204,156, 57,211,254,213, 87, 95, 85,190,245,214, 91, 2, 0, 80,171,213,220,250,245,235, 85, 95,125,245, 85, +121, 81, 81,209, 36,147,201,116,183, 57,189,154,192,156, 43,219,182,109, 43,188,124,249,114,232, 83, 79, 61,165,136,136,136,224, +220,221,221, 37, 58,157,142,205,206,206,174,138,141,141,101, 83, 82, 82, 28,203,202,202, 82, 0,164,182,100,251, 94,169, 84, 66, + 32, 16,124,226,227,227,179, 56, 55, 55,183,211,147,136,193,106,223,190,189, 18, 64,138,151,151, 87,123,107,183, 7,235, 35, 18, +137, 80, 90, 90, 10, 77, 78, 42,116,197, 69, 8, 18,234, 16,238,226, 6,123,123,251,199, 50,134,202,203,203, 33, 50,168,145,118, + 39, 11,101,249,153, 8,105,211, 29,182,182,182, 48, 24, 12, 45,214,108, 41,255, 20,227, 10,104, 98,139, 48,212,135, 76,115,150, + 98,253,196, 49,254, 18,255, 54,222, 48, 22,198,225, 86,106, 37, 22,125,223, 35, 81, 40,177, 55, 76,127,253,217,110,253, 7,181, +194, 51,145, 61, 72,219, 54, 78,179, 86,174,220,248,175, 80, 95,242,126,194, 67,186,193,146, 11, 39,164,210,244,142,254,100,235, +249,235,185, 83,189, 91, 85,129,130,226,252,141, 60,220, 77, 45,221,122, 47,157, 54,152,186,219,232, 92,219,147, 65, 34, 34, 56, + 64, 89,106,227,104,111,171, 9,239, 23,236, 54,168, 79,103,193,144,254, 17,144,136,128,203, 87,111, 99,206,242, 67,191,115, 82, + 58, 60, 46,206,178,237, 65, 80,238, 47,134, 83,117,198, 32,243,167,140, 65, 74, 41, 5,199,160,185,122,147, 66, 1,201,215,170, +111,180,150,218,135,192, 84,252, 43,212,234, 74, 36,164,153, 80, 9, 31,148,230,228,128, 82,246,225,146, 37, 63,182,248,127,136, +155,155,155,187,127,135,192,118, 95,109, 57, 8,147,161, 28,105,137,219, 81, 89,145,143,229, 43,126,110,231,237,237,253, 76, 78, + 78,206, 5, 75,181, 8, 72, 96,244,175,251,220, 65, 1,161, 72,134, 19,155,127, 64,145, 72, 14, 55, 71, 9, 56,125, 1, 38,191, + 61,222,113,216,240,241,142, 0,240, 48,245, 54,124, 93, 44,179,171, 77,101,136, 26, 59, 41,200, 9,172, 14,187,142,220,214, 11, + 8,134,236,250, 57, 33,181,127, 55, 39,155,177,207,182,113,254,100, 83,217,139, 0,246,181,100,253,148, 99,255,148, 69,216,146, +236,193, 31, 41,101, 59,250,147,212,125,231, 10,237,198, 12,235, 42,151,136, 8,161,250, 92,112, 68, 66, 54,124,179, 77, 35, 37, +216,220,146,185,241,240,252, 47,162,211,233,226, 8, 33,157, 62,248,224,131, 87, 22, 46, 92,216,207,214,214,214, 31, 0,180, 90, +109,186,217,108,190, 8, 96, 31,165,244,175, 53,110, 26,161,198, 96, 74, 33,132,164,167,166,166,122,236,218,181,203, 9,128, 77, +205,175,245, 0,202, 0,168,173,209,172, 79,173, 49,165, 84, 42, 23,183, 84,163, 62,181,198,148,151,151, 87,251,150,156, 47, 20, + 10, 89,129,160,186,179,143, 76, 38,195,165, 75,151, 48,180, 79, 95,220, 62,151,133, 96, 15, 31,244, 31, 63, 17, 71,206,159,135, + 80, 40,172, 29,111,213,125, 68, 36, 18,225,242,229,203,120,105, 68, 36,142, 28, 57,130,128,238, 93, 48, 99,198, 12,252,242,203, + 47, 16,137,248,110,122,143, 67,227,175, 30,197, 39,103, 15,124, 38, 1,103,198,193,189,171,112,246,186,206,120, 63, 23, 31, 6, +229, 96,253, 65,104,184,130,162,159,166,158,136, 73,251,226,141, 73, 35, 20, 3,158,121, 22, 3,250,245, 23,133,118,121,230, 35, + 0,143, 12, 44, 66, 72, 88, 83,181, 50, 88, 51,150,109,254, 41,105,202,129,147,201, 4,140, 6,227,158,143,160,172, 25,203,154, +154,112, 67,154,142, 10,187, 3,151, 47,197, 58,131,173, 68,126,198,121,155,214, 30,254, 0, 53,227,193,131,100,124,189,237, 8, + 23, 19,123,127,183, 81,136,153,169,137, 84,107,169, 38, 0,128, 99,224,104, 39,253, 75,198,160,147, 92, 28,252, 92, 47,219, 83, +148, 82,106,175, 16, 7, 55, 84, 27,171,190,166,222,204,109,222,189,115,203,234, 55,223,124,203,182,216,144,139,228,236, 4,232, +133, 94, 16, 42,218, 33,225,198,233,170, 42, 51,215,108,233,136,166, 94,207,162,162,162,130,184, 27, 37, 56,176, 99, 5,204,102, + 3, 10,242,170,109,212, 60,117, 5, 28, 28,188, 98,173,209, 52, 49, 92,121,212,232,201, 18,185, 13,228,227,199, 14,151,166,170, + 12,232, 26,100, 15, 0,160,166, 34, 36,197, 92, 66,127,247,234, 96,200,212, 36, 33,124,159, 82, 90, 52, 79,123,123,201,204,161, +125,189,144,158,149,143, 75,113,185, 59,211,114,169, 42,192,139,236, 76,125, 88, 54,117, 84,127, 95,172,219,157, 56, 3,141, 24, + 88,141,105,214,100, 11,246, 1, 53,131, 50,122, 80,160, 79,152, 63, 9,181, 36,115,176, 33, 77,145, 0,175,174, 61,144,185,232, + 96, 76,225,168,185,111,245,117,232,221,107,168, 20,156,153,106,116, 6,115, 98, 58,173,104,137,230,227,194,107,242,154,255,173, +154, 53,198,206,238,154,159, 39,169,169, 66,189,186, 76,143,163, 9,252,121, 59, 80,165, 82, 9,149, 74, 37,219, 92,144,187, 5, +154, 87,235, 60, 62, 89,227,189,106,210,139,213,128,166,170,103,207,158, 46, 35, 71,142, 4,195, 48, 72, 73, 73, 65, 86, 86, 22, + 70,190, 49, 9,206,206,206,184,154,152,136,148,148, 20, 44, 94,188, 24, 12,195,224,218,181,107,127,169,200, 94, 95, 83, 44, 22, +155,186,116,233, 34,121,225,133, 23,192, 48, 12,210,210,210,144,153,153,137, 25, 51,102,192,209,209, 17,137,137,137, 72, 75, 75, +195,226,197,139, 97, 48, 24,144,158,158,254,151,157,133,127,199,103,233,159, 70,227, 6, 22, 1, 11,206,140,242,235, 75,240,221, +113,152, 76, 12,130, 19,178,105, 70,157, 17, 27, 59,123,147, 99,119, 18,146,210,227,174, 14,144,162,226, 46, 0, 88,245,205, 33, + 57,155,230, 69, 4,137, 52, 96, 52, 14, 40, 60,133,140, 92, 77,101,114, 54,205,179,118, 17,148, 99, 9, 88, 29, 80,126, 3, 71, +142,199, 64,102,115, 11,215,111, 38,177, 87,226,146, 15, 8, 40,150, 37,102,208, 7,214,107, 82,216,117, 91,143,137,207,167, 86, +103, 12, 82, 51, 40,199,192,177,247, 62, 76,122,254,105,223,136, 96, 39, 95,112,102, 80,106,134,243,192,243,192, 34,155, 38,245, +174,197, 27,182,244, 13,183,121, 81, 83, 81,212,243,217,254,145,182,173, 2,199,162,252, 65, 34, 18,110,158,173,186,113, 55, 57, +246, 90,188,161, 89, 3,171, 41,188,188,188,250, 13, 28, 24,132,113, 19, 23,192,100, 40, 67, 90,194, 54,104, 42,242,113,233, 55, + 59, 36, 61,172,232, 5,224,130,165, 90, 87,226,205,161, 0,208,167,147,228,161,131,212,216,250,181,151, 70, 64, 38,210,131, 51, +107, 64, 76, 69, 72, 45, 49,149,191,184, 36,135, 5, 0,133, 13, 17,217,138,202, 29, 44,209, 13, 9,112,237,160,144,152,177,235, +104, 2, 56, 82,221,102,137, 35,216,184,235, 88,234,212,101,211,187, 34, 36,192,185, 75,237, 6,188,165,115,165,192,191,110,252, +188, 52, 88,159,240, 17, 40,103,198,229, 47,156,131,251,126, 80,250, 47,180,176,194,250,221, 84,154, 11, 96,106,199, 54,100,211, +172, 79,127,249,168,123, 88, 98,159,247,166,142,114, 0,225, 27,163,243,240,240,252,253,232,116,186, 41,243,230,205,219, 36, 20, + 10, 91, 1, 32,148, 82, 24, 12, 6,209,214,173, 91,197, 12,195, 8,132, 66, 33,107, 99, 99,195,196,197,197,153, 57,142, 43, 52, +153, 76, 83,154,211, 52, 26,141,169, 95,127,253,117, 59,179,217,252, 40,227,208, 96, 48, 96,247,238,221, 48, 24, 12,144,201,100, +176,179,179, 67, 90, 90, 26, 8, 33, 38,150,101, 83,255,173,139,252,135,210,212, 77, 99,105,239,168, 37, 75, 64, 65, 64,240,113, + 61,227, 10, 0,112, 39,135,170, 66,125,200,156,208,240,103,170, 99,166, 8,150, 90, 59, 1, 61,203,190, 20,209, 45,112, 63, 0, + 24, 56,118,130,181,231, 3, 64,133,190,106,108,120,143, 94, 7, 56, 74, 69, 12, 75,183, 10, 4,248, 73, 15,220, 75, 77,111, 62, +115,174, 49, 84,121,101,113, 67,251, 56,210,218, 22, 56,143,182, 5,107,202, 49, 80, 74,255,104, 67,183,200, 6, 69,197,134,102, +163,169, 47,221,210, 63,215, 35, 76,246,246,233, 11, 55, 39,179, 28,109, 45, 20,144,124,189,153,219,252,184,198, 21, 0,228,228, +228, 92, 8, 9, 32,103,238,244,241,120,206,173,166,204,106, 81, 25, 80, 84,142, 51, 57, 57,154, 11, 45,209, 44,173, 50,143, 90, +248,197,209,159,165, 34,161, 8,160,224,184,234,245,234, 77,108, 73,173, 17,214,249,255,216, 59,239,240, 40,170,182,141,223,103, +182,101,147,108,122,221,146,132, 36, 36, 33,161,134,208, 67, 7, 33,161,136, 32,138,136, 40,136, 40,160,188,190,160,130, 2, 34, + 2, 2,162,136, 8, 34,160, 47,160, 72, 47, 74,239, 77, 58,129,132, 18, 66, 11,105,155,205,166,144,190,125,103,206,247, 71,216, + 24, 32,101, 3, 40,202, 55,191,235,218,107,179, 83,238,125,102,119, 51,115,207,115,206,115, 78, 56, 81,124,248,163,117,157, 64, + 64,210,235,210, 59,115, 73,243,205,144, 15, 15,124,112,229,102,225,143,119,178, 42,238,124,238,100,209,203, 97, 74, 50,237, 86, +102,233, 7,151,111, 22,126, 85,223,126, 19, 4, 88,210,250,249,233, 15, 45,171,143, 70,117, 36,167,211, 68, 0, 3,155, 4,147, +231,134,140,249,110, 34, 33,245,187, 91,230,225,225,249,119, 99,203, 98, 49, 12,243,232,197, 55, 15, 96,203, 98, 1,184, 89,143, +125,206, 0,104,246,164, 98, 0,128,132,132,132, 2, 0, 5, 79, 82,147,231, 97,200, 95, 57,140,207,179,144,226,126, 66,154,204, + 99,202,113,213,104,214, 72,120,120, 56,189,121,243,166, 93,157, 5,255,165,159, 39,175,201,107,242,154,188,230,227,104,254, 21, +231,228,199,237,156, 77,171,209,124, 34,252, 91, 52,159, 53,248,102,143,191,135, 58, 7, 54,125,146,220,184,113,227,153,169,194, +224,225,225,225,249, 11,248, 43,206,201,252,160,195, 60,247,241,184, 46,158,135,135,135,135,135,135,135,135,231, 1, 8,128,166, +213,173,168, 79,234,143, 16, 82,173, 70,109,212,165,207,107,242,154,188, 38,175,201,107,242,154,188,230,179,167, 89,151,246,179, +210,244,200,247,193,226, 53,121, 77, 94,147,215,228, 53,121, 77, 94,243,169,107, 62,107,240, 77,132, 60, 60, 60, 60, 60, 60, 60, + 60, 79, 24,222, 96,241,240,240,240,240,240,240,240, 60, 97,120,131,197,195,195,195,195,195,195,195,243,132,225, 13, 22, 15, 15, + 15, 15, 15, 15, 15,207, 19,134, 55, 88, 60, 60, 60, 60, 60, 60, 60, 60, 79,152,191,180,138,144,135,135,135,135,135,135,135,231, +255, 35, 12, 0, 16, 66,232,189, 71,151,167, 28, 15, 15, 15, 15, 15, 15, 15,207,255, 67,158, 53, 47, 82, 57, 85, 14,165,148, 16, + 66, 40, 30,127, 62, 37, 30, 30, 30, 30, 30, 30, 30,158,122,243, 44,121,145,202, 62, 88,247, 14,168,235, 83,140,133,135,135,135, +135,135,135,231,255, 49,207,146, 23,185, 47,131,245, 52, 3,225,225,225,225,225,225,225,249,255,205,179,228, 69,248, 42, 66, 30, + 30, 30, 30, 30, 30, 30,158, 39, 12, 95, 69,200,195,195,195,195,195,195,195,243,132,225, 51, 88, 60, 60, 60, 60, 60, 60, 60, 60, + 79,152,191,212, 96, 17, 66,154,242,154,188, 38,175,201,107,242,154,188, 38,175,201,107,254,127,131,207, 96,241,240,240,240,240, +240,240,240, 60, 97,120,131,197,195,195,195,195,195,195,195,243,132,225, 13, 22, 15, 15, 15, 15, 15, 15, 15,207, 19,134, 55, 88, + 60, 60, 60, 60, 60, 60, 60, 60, 79, 24,222, 96,241,240,240,240,240,240,240,240, 60, 97, 8,128,106, 43, 1, 40,165,151,237, 22, +121,132,106,130,186,244,121, 77, 94,147,215,228, 53,121, 77, 94,147,215,124,246, 52,235,210,174,143,255,248, 39,243,151, 14, 52, + 74, 8,105,250,164, 63, 40, 94,147,215,228, 53,121, 77, 94,147,215,228, 53,159, 61,205,103, 13,190,137,144,135,135,135,135,135, +135,135,231, 9,243,212, 12, 22, 33,132, 33,132, 8,239, 61, 24, 66,200, 99, 79,240,248, 87,104,242,240,240,252, 51, 33, 15,240, +180,227,225,225,249, 55,115,254,252,121,154,159,159, 79,229,114,249, 53, 66,200,152,167, 29,207,179,128,240, 73,138, 53,242,117, +108,215, 32,192,167,239,238,243,233, 83,106,219,142, 16,194, 40,149,202,185, 62, 62, 62, 99,116, 58,157, 1, 0,101, 24,134, 70, + 69, 69,129, 16, 2,219,185,146,101,217,188,107,215,174,217,213,254,251, 36, 53, 35, 34, 34,206, 51, 12,163,170,122,206,174,235, +111,142,227,178,174, 94,189,218,170,174, 56,229,114,121,111,134, 97, 38,215,181, 29,199,113,115, 53, 26,205,222,218,182,105,214, +172,217, 5,103,103,103, 63,134, 97,106,188,184, 84,109, 2,182, 90,173, 84,167,211,105,175, 92,185,210,178,174,247,127, 16,165, + 82, 57,133, 82,218, 18,192, 42,141, 70,179,139, 82,202,214, 87,227, 1,189, 23, 41,165, 83, 1,128, 16, 50, 75,173, 86,111,174, +207,254,225,225,225,231,197, 98,177, 74, 32, 16,144,123, 26,247,173,127,240, 53,199,113,212,100, 50,101,165,164,164,212,249, 29, +241,252,243, 33,132,144,128,128,128,104, 63, 63,191, 96,189, 94,207, 2, 64,147, 38, 77,168, 64, 32,184,111, 59,179,217,108,190, +118,237,218,174,167, 18, 36, 15,207,191,136,253,251,247, 99,244,232,209,184,116,233, 82,163, 93,187,118,125,175, 80, 40,198,105, + 52,154,110,148,210,188,167, 29,219,191,149, 39,102,176,194,228,178, 70,254,222, 94, 59,230,205,158, 1, 0, 53, 26, 44, 66, 8, + 35,151,203,231,117,234,212,105,228,154, 53,107,156,183,110,221,234, 28, 28, 28, 12,177, 88, 12,129, 64, 0,129, 64, 0,134, 97, + 32, 16, 8, 48, 96,192, 0,187,238, 74, 31,212, 60,120,240,160,115, 68, 68, 68,229, 69,150, 82, 90,105,178,250,244,233, 83,167, + 38,195, 48,170, 11, 23, 46,248, 74,165,210,202,253, 57,142,187,239, 65, 41,173,124,176, 44,139, 78,157, 58,217, 19, 42, 24,134, +153,156,156,156,220,185,188,188,252, 62, 13,219,123,216,254,238,220,185, 51, 0,212,106,176, 24,134, 81,156, 56,126,208,151,152, + 83, 1,235, 93, 80,129, 39, 32, 9, 1, 24,135,106,183,191,123,247, 46,186,117,235, 38,168,118,101, 29,248,248,248, 12, 63,114, +228, 72,216,157, 59,119, 94,248,226,139, 47, 10, 20, 10,197,247, 0,126,202,206,206,206,124, 20, 61, 74,233,172,212,212,212,112, + 74, 41, 66, 67, 67,103, 2,168,151,193, 18, 8, 4,170,253,251,247,251, 74, 36,146,202,239,185,166,103,150,101, 97, 54,155, 17, + 23, 23,103,125,148, 88,121,254, 89,216,204, 85,124,124,124,208,210,165, 75,133,201,201,201,194,168,168, 40,176, 44, 91,249,224, + 56,174, 94,255,151, 60, 60,255, 31, 9, 26,244,227,247,156,213,124, 47, 91,229, 14, 96, 57, 74, 75, 75, 49,106,212, 40,252,246, +219,111, 81,237,218,181,155, 11, 96,228,211,140,241,223,204, 19, 49, 88, 13,149,142, 74, 23, 7,231,125,203,126,248,142, 88, 74, +181, 30, 53,109, 71, 8, 97,252,253,253,103,117,234,212,233,181, 53,107,214,120, 16, 66,112,240,189, 55,225,110, 54, 64,241,233, +151,240,240,246,129,105,242,104,184,176, 86, 52, 59,148,104,215,123, 87,167,153,146,146,130,187,119,239,194,199,199, 7, 78, 78, + 78,112,112,112,128, 88, 44,134, 68, 34,177, 87, 19, 82,169, 20,251,247,239,135, 80, 40,172,124, 8, 4,130,106, 95,251,249,249, +217,247, 65,161, 34, 51, 21, 25, 25,217,252,250,245,235,174,133,133,133,104,223,190,125, 9, 33, 36,201,182,158, 82,218, 60, 41, + 41,201,213, 94, 61, 98, 78, 69, 89,198, 15,160,133,155, 1,247, 65, 96, 93,135,192,128,144,251, 46, 50, 54, 83,200,178,143,158, +116,202,203,203, 51, 31, 59,118, 12,209,209,209, 88,191,126,189, 87, 97, 97,225,167,171, 86,173,154,170, 80, 40,166,100,103,103, +207,125, 4, 73, 79, 0, 72, 73, 73, 1,128, 26,127, 51,181, 33,145, 72,112,250,244,105, 80, 74, 43, 77, 57,195, 48, 96, 24, 6, +219,111,122,163,220,196, 64,167,189,140,241,253,131, 16, 28, 28,252, 80, 86,139,231,223, 7, 33,132,200,229,242,230,189,122,245, + 10, 88,186,116,169, 24, 0, 46, 95,190, 12,141, 70, 3, 95, 95, 95, 72,165, 82,136, 68, 34, 8, 4, 2,136,197,226,167, 29, 46, + 15,207, 63, 26,206,106, 30,211,162, 85,135,202,215,171,247, 47,130,209,173, 37,212,159,125,134,133, 11, 23, 34, 60, 60,188,205, + 83, 12,239, 95,207, 99, 27,172,166,129,110,238, 14, 68,180,239,199,165, 11, 36, 48,151,123,164,156, 59,129, 38,241,111, 3,184, +191,212,242, 94, 31, 9,198,207,207,111,236,218,181,107, 93,109, 23,187, 8,194,194, 29,102, 52,104,220, 24, 78,110,238,208, 90, +205,160, 22, 51, 36, 98,113,181, 23, 68,123, 52, 25,134,129, 72, 36,186,239, 33,145, 72, 80, 53,219, 81,147,102, 85,108, 38,106, +255,254,253,176, 88, 44, 24, 60,120,112,181,102,171, 58,106,210,212,104, 52,123,149, 74,101, 18,165,180, 51,199,113, 32,132, 36, +169,213,234, 46,182,245,114,185,188,119,139, 22, 45, 38,115, 28,247,144,105,121, 80,147, 82, 10, 88, 11, 64,239,174,133, 75,251, +124,148,156,242, 6,113,238, 9, 22, 65,184,124, 51, 7, 7,207,167, 33,255,110, 25, 98, 34,124,209,171,125, 40, 56,142,179, 59, +206,170, 40, 20,138,240,198,141, 27, 71, 90, 44, 22, 28, 59,118, 12, 44,203,162, 89,179,102, 24, 49, 98, 4,179,104,209,162, 17, + 0,238,139,213,206,202,146,196,132,132,132,158, 57, 57, 57, 0,112,169,174,141,171,211, 36,132,224,231,159,127,134,193, 96,120, +104,123,143, 46, 95,224,131, 65, 65, 24,241,222,106,124,121,125, 35,150, 44, 89,114, 95,115,105, 61,226,172, 23,188,230, 95,175, + 41,151,203, 67,150, 47, 95, 46,170,186, 76, 44, 22, 87,102,193,171,102,195, 31,108, 50,252, 59,227,228, 53,121,205,127,186, 38, + 35, 20, 47, 77, 60,127,114, 12, 0,148, 36,111,193,127,134,118, 64,105,233, 77,188,243,206, 52,168,213,106,220,184,113, 35,225, +239,140,243, 89,163,210, 29, 16, 66, 40,165,180, 94,183,248, 42, 21,145,186,176,142, 59,190,255,102,174,155,139,204,201,231,252, +190,109, 72, 79,207,169,117, 31,157, 78,103,250,237,183,223,176,111,220, 72,132, 19, 43, 60, 62,157, 15, 95,133, 2,197, 35, 7, +160,204, 98, 70,195,221,103,225, 32,147, 65,226, 44,179, 59,227,160,211,233, 76,135, 15, 31,198,149, 43, 87, 32, 20, 10, 33,147, +201,224,236,236, 12, 7, 7,135, 74, 99,101, 59, 1,219,171, 73, 41,133, 80, 40,196,229,203,151,145,158,158, 14,119,119,119,156, + 56,113, 2, 61,123,246,188,207, 92, 9, 4,130,251,250,120,217,139,173,105,241, 65,238,245,187,170,181,105,240, 62, 68,222,128, +231,107, 40, 61,173, 0, 60,134,193, 66,221,192, 81, 14, 23,111, 22,224,237, 97,125, 1, 0, 99,167,254,128,158,109,131, 43,155, + 32,235,131, 82,169,124,187,121,243,230, 11,198,140, 25,195, 56, 59, 59,195,104, 52,194,104, 52, 34, 37, 37, 5, 94, 94, 94,112, +114,114,122,164, 52, 1,165,244,142, 66,161,128, 84, 42, 5,165,244,206,163,104, 16, 66,176, 97,195,134,106,215,189,177,224, 42, +132, 21,221,179,176,116,233, 82, 88,173, 86,212,247,247,205,243,207, 68,167,211,177,201,201,201,162,196,196, 68, 8, 4, 2,184, +186,186,194,201,201, 9, 98,177, 24, 14, 14, 14,149,198,138,207, 96,241,240,212, 78,250,150, 81, 99, 9, 33, 51, 3, 3, 3,143, +254, 48,103, 78, 88,143, 30, 61, 0, 0, 7, 15, 30,196,255,134, 14,197,103,192,240, 69,132,104,198, 83,250,241,223, 21,211,163, +120,145,127, 42, 66,224,207, 3,170,207,129, 17, 66, 72, 67, 63,151,141, 51, 62,121, 55, 56, 48, 36,212,255,204,206, 13, 72, 77, + 85, 67,171, 45,172,118,251,123,111,192, 17, 66,184,144,144, 16,184, 90, 12,112,163, 38,248,202, 21,112,241,244, 66,161,229, 94, +230,202,217, 25, 18,103,153, 93, 39,199,170,154,141, 27, 55,134, 86,171,133, 88, 44,134, 76, 38,131,139,139, 75,165,193,178,153, + 43,123, 79,184,132, 16,112, 28, 7,161, 80,136,164,164, 36,116,236,216, 17, 1, 1, 1, 88,191,126, 61,122,247,238,253, 80, 22, +235, 81,154,158,108,125,174,108,216, 58,191,219,211,185,253, 62, 36, 13, 97,117,121, 25,140, 83, 15,152,169, 43,140, 84,126,175, + 73,144, 98,231, 89, 45,174,167,231,223,215, 92,104, 47, 42,149, 74, 33,149, 74, 87,207,156, 57,179,123,171, 86,173, 96, 54,155, + 1, 0, 78, 78, 78, 48, 26,141, 16,137, 68, 48,155,205,208,235,245,106,251,143,250,201, 97,251,204,247,237,219, 7, 66, 72,165, +209,181, 53, 21,150,107, 50, 49, 98,252, 26, 72,132, 64, 82, 82, 18, 34, 35, 35,159, 70,152, 60,127, 17, 17, 17, 17,200,205,205, +133, 64, 32,128,139,139, 11,155,116,163, 79, 0, 0, 32, 0, 73, 68, 65, 84,156,157,157,209,168, 81, 35,100,102,102,222,151,197, +226,225,225,169, 29,129, 64, 48,119,219,182,109, 97, 82,169, 20,179,103,207,134,139,139, 11, 78,207,156,137,255,137,197,112, 4, +176,212,108,158, 12,224,111, 49, 88,143,226, 69,254,201, 60,114, 19,161, 74,165,250,186, 93,108,219,206, 33,141, 91, 75,207,236, +217,130,155, 55,210,145,159, 95, 12, 10,232,107,217,141, 18, 66,168, 72, 36,130,239, 71,159, 35,176, 89, 51,232, 70,191,136, 66, +139, 25,161, 59, 79,195, 65, 38,195,181,231, 90,130,154, 76,232,148,172,181,215,184, 80, 66, 8, 5, 0,111,111,111,136,197, 98, + 72,165, 82, 72,165,210,202,190, 87, 85, 31,246,154, 33,142,227, 80, 82, 82,130, 59,119,238, 96,244,232,209,112,114,114, 2, 33, + 4, 90,173, 22, 65, 65, 65, 16, 8, 4, 80,171,213, 56,116,232, 16, 66, 66, 66, 32,145, 72,234,245, 99,168,210,169,189,185, 82, +169, 60, 74, 8,105,126,254,252,121,215, 86,173, 90, 1,245,201, 96, 17, 49,140, 8, 2, 11, 21, 56,250,103, 95, 43,139,245,254, +254,220, 54,147,101, 15,254,254,254, 81, 77,155, 54, 61,245,221,119,139, 92,124,125,253,192,113, 44, 44, 22, 11,138,139, 75,160, +211,233, 16, 24, 24, 8,103,103,103, 58,127,254,124,194,178,236,210,122, 28,246, 19,197,102,168,108, 25, 68, 91,255, 43,134, 97, + 48,254,249, 64, 20, 22,186, 64, 32,168,120,109,239,177,243,252,179,161,148,210,166, 77,155, 82,129, 64, 0, 95, 95,223, 74, 51, + 37, 18, 85,180, 24,250,249,249,161,164,164, 4, 2,129,160,114, 25, 15, 15, 79,205,132,135,135,199, 40,149, 74,188,255,254,251, + 48,172, 93,139, 50, 0,253, 0,108,187,119, 83,237, 2, 76,124,170, 1,254,139,121, 36,131,165, 82,169,222,109,209,162,197,168, + 21,171,214,200,230, 77,251,168,164, 48,249,146,192,164, 55, 59, 27, 45, 22,211, 45, 77,193,162,154,246,163,148,210,200,200,200, +138,187, 78,119, 15, 56,185,186,193,248, 64,230,138,154, 76,224,204, 38,136,237, 60, 57,218, 52, 41,165,112,116,116,132, 68, 34, +169, 54,115, 85,159, 12, 22, 0, 20, 21, 21, 97,195,134, 13,104,211,166, 13,156,156,156, 32, 16, 8,208,188,121,115, 36, 39, 39, + 35, 52, 52, 20, 0,176,109,219, 54, 12, 26, 52, 8, 55,111,222, 68, 84, 84,148,204,110,113,252,217, 68,184,111,223, 62, 87, 74, +105,103, 74, 41,242,242, 30,173, 26,150,101, 89,148,151,151, 99,223,190,125,200,206,206,134,191,191, 63,138,139, 93,224,170,168, + 48, 21, 85,171, 31,237,129, 16,242,209,155,111,190,233, 34,147,201,192,178, 86,136, 68,162, 74,227, 42, 18,137,145,146,146,130, +161, 67,135, 22,167,165,165,125,152,157,157,189,182,190,241, 18, 66,136, 74, 37,247, 43, 46, 46, 68,105, 73, 17, 4, 2, 4, 16, + 66, 4,143, 50,244, 3,195, 48,149,207,182, 7, 33, 4, 98,145, 0,254,126, 62,149, 29,223,239,101,239,254,245,119, 68, 60, 21, +176, 44,139,115,231,206,225,216,177, 99,248,227,143, 63,112,231,206,159,173,204,174,174,174,216,191,127, 63,186,117,235,246, 20, + 35,228,225,249,119,112,227,198,141,179,233,233,233,145,211,166, 77,195, 74,165, 18, 46, 46, 46,152, 48,125,250, 41,171,213,218, +161,238,189,121,106, 67, 8, 0,245, 73,201,169, 84,170,129,114,185,124,222,154, 53,107, 28,179,179,179,161, 8,111,226,186,125, +211, 6,163,175, 76,172,215,220, 45,124,253,162,186,172,206,114,123,134, 97, 96,157, 57, 1, 5, 86, 19,130,183,159,132,131, 76, +134,235,189, 91,129,154, 76,232,144,144, 6, 7,153, 12, 66,169, 99,189, 15,166,186,140, 85,213,135,237, 98, 92, 23, 38,147,201, +189,103,207,158,232,209,163, 7, 94,124,241,197,202,166,192,232,232,104,172, 91,183, 14, 3, 7, 14, 68, 98, 98, 34, 20, 10, 5, + 26, 53,106,132, 70,141, 26,225,240,225,195,245,138,213,150,193,234,221,187,119, 9, 33, 36,137, 82,218,252,236,217,179,118, 87, + 15,218, 52,128, 10, 3,181,111,223, 62,244,237,219, 23,161,161,161,184,112,225, 2,246,127, 62, 31, 66,153, 55,192,248,130,114, +180, 50,179,101, 79, 31, 44,177, 88,220, 49, 36, 36, 4, 57, 57, 90, 56, 56, 56,192,195,195, 29,142,142,142,112,112,144, 98,206, +156, 57,220,242,229,203, 23, 19, 66, 62,207,206,206,190, 91,175,131, 6,160, 82,169, 26,182,104,209,226,231,215,135, 15,107,235, +229,229, 13, 63, 63, 57, 38, 79,250, 56,110,237,186,245, 87,148, 74,229, 43,106,181,186,206, 14,239, 54, 8, 33, 48,153, 76, 16, + 8, 4,216,118,221, 7,229, 38,130,146,172, 4,252,231,249,160, 74,179,101,107,234,181, 13,127,193,243,108,192,178,108,229,119, + 92, 29, 53,117,112,231,225,225,185, 31,150,101, 39, 15, 24, 48,160,245,236,217,179,163, 38, 76,152, 0, 0, 80, 40, 20,237, 21, + 10,197,213,191,123, 28,172,103,169,121, 16,168,146,193,170,235,192,186,118,237,186,194, 98,177,188,224,236,236,236, 49,106,212, + 40,115,126,126, 62,182,110,221,138,255,253,239,127,186,114,139,224,124, 81,129,117,248,237,236,178,172,186,222,208,214,148, 35, +182, 88, 64,173,127,102,174, 56,163,177, 50,147, 37,114,116,170,215, 65, 16, 66, 64, 41,173,214, 84,217, 50, 89,245, 57,217, 58, + 56, 56, 20,253,241,199, 31,190, 89, 89, 89,247,117,104, 15, 14, 14, 6, 0,156, 61,123, 22,167, 79,159,198, 43,175,188, 2,161, + 80, 8,177, 88,140,164,164,164,210,250,196,108, 51, 60,182, 42, 66,185, 92,222,187,109,219,182,213, 86, 15,218,163,149,145,145, +129,208,208, 80, 24,141, 70,184,187,187,163, 64,115, 7, 25,119, 82,161, 51, 94, 71,136,191, 20,185,185,185,112,112,168,126,124, +172, 7, 97, 89,150,181, 93,184,140, 70, 35, 52,154, 28, 40, 20, 10,252,242,203, 26,172, 88,177,226,149,236,236,236,141,245,141, +145, 16, 34,148,203,229, 19,251,245,235, 55,235,133, 23, 94, 16,234,202,203, 64,185, 10,195, 35,150,136,241,237,183,223, 54, 58, +116,232,208, 69,165, 82,249,133, 84, 42,157,117,235,214, 45, 83, 29,122, 0,128,149, 43, 87, 2, 0,156,218, 77,199,228,151, 26, +224,181,177,171,241,245,215, 91,238, 59, 86,129, 64,128, 25, 51,102,212, 55,100,158,127, 56, 61,123,246, 68,239,222,189, 43,155, + 9,189,189,189, 97, 54,155, 97,181, 90,121,115,197,195, 99, 7, 65,131,126,252, 94,213,127,201, 24, 0,152,248,237, 65, 76,153, +249, 13,134,189,216, 27, 35, 70,140,120,106,227, 96, 61, 75, 38,235,190, 38,194, 90,204,213, 27, 30, 30, 30, 67, 71,142, 28,233, +120,246,236, 89,204,156, 57, 83,184,127,255,126,243,185,115,231,172, 44,203, 78, 84,171,213,203,234,243,166, 12,195, 32,100,205, + 78, 40,252,253,113, 35,174,245,125,153,171,163,205, 85,224,140, 70, 60,151, 90, 92,239,131,177, 53,101,217,140,149,205, 92,213, + 52,148, 66,109,216,238,128, 31, 28,247,234,157,119,222,193,138, 21, 43,208,161, 67, 7,132,133,133, 65, 40, 20, 86, 54, 75,213, +135, 7, 59,185,215,187,122,176, 10, 44,203, 34, 48, 48, 16,151, 46, 93,130,155,155, 27,126,254,249,103, 4,168,148, 24,222, 43, + 24, 38,147, 9, 22,139, 5,229,229,229,182, 12, 86,157,129,114, 28,119,101,235,214,173,161, 47,189,244, 18, 21, 10,133,196,104, + 52, 2, 0, 22, 45, 90,148,155,157,157, 93,175, 1, 65,129,138, 81,219, 67, 66, 66,126,122,229,149, 87, 92, 26, 53,106, 4,173, + 86,139, 51,103, 78,225,227,143, 39,159, 17,137,132,134,184,248, 62, 93,163,162,154, 96,236,216,177, 76,116,116,244,212,143, 63, +254,120, 98, 64, 64,192,136,204,204,204,234, 75, 4,239, 65, 8,193,186,117,235, 0, 0,111,126,123, 13, 38,147, 5, 64, 69,213, +160,191,191,255,125,219,222,186,117,139,175, 34,124,134, 96, 89,246,190,106, 65,155,161,226,205, 21, 15,143,253,220, 55, 14, 86, +171, 14, 56,177,101, 62,214, 93, 15,132,122,230,204,167, 58, 14,214,179,114,174,174,211,121,180,109,219,214,197,104, 52,126,251, +223,255,254,215,177,188,188, 28,249,249,249, 40, 40, 40,192,153, 51,103,246, 91, 44,150,255,104,181,218, 26, 75,236, 73, 53,179, +109,219, 42,190, 60,125,124,225, 32,115, 1, 53,153, 42, 51, 87, 98, 39,103,112, 70, 35, 56,179, 9,168,161, 57,167, 38, 77, 66, +200, 67, 89, 43,123,205,213,131,154,182,140, 88,117,131,138, 6, 4, 4,224,139, 47,190,120,104,152, 6,123,226, 4, 42,170, 5, + 9, 33,205, 1, 84,118,114,151,203,229,189,237,169, 28,172, 73,147,227, 56,116,233,210, 5,251,247,239,199,165, 75,151,192, 48, + 12,226,227,227, 65, 8,129,155,155, 27,132, 66, 97,165,153,179, 21, 4,212,166,201,178,236,107,255,251,223,255, 62,216,189,123, +247, 71,239,189,247,158, 99,231,206,157,109,253,188,242, 40,165,117,118,228,122, 80,147,227,184,207,146,146,146, 92,172, 86, 43, +102,207,158,141,243,231,207,151,223,186,117,235,191, 26,141,230, 39, 74, 41,149,203,229,195,110,223,190,179,228,211, 79, 63,117, +233,222,189, 59,206,158, 61, 43, 13, 8, 8,248, 20,192,134,154, 52,109,156, 57,115, 6, 2,129, 0,214,187,233, 24, 59,121, 61, +100, 78, 34,164,164,164,160,160,160,160,242,183, 86, 83, 83, 82, 77,154,143, 3,175,249,247,105, 86, 53, 87, 34,145, 8,122,189, +222, 46,115,245, 44, 28, 59,175,201,107, 62, 9,205,199, 25, 7,235,175,136,243, 89,163, 78,247,161,211,233,102, 70, 68, 68, 72, +146,147,147,113,235,214, 45, 92,191,126, 29, 44,203,222,204,202,202,234,247,168,111,202, 48, 12,220,220,220, 32,145, 72,208,254, +146, 26, 18,177, 24, 18,231,138, 62,226,207,165, 22, 3,148,130,145,216,215,156, 85, 85,243,193, 49,175, 30,167,138,136,101,217, +202, 17,218,109, 6,174,186,106,181,250,102,174, 24,134,153,124,234,212, 41,215,244,244,116, 80, 74,177,101,203, 22,215, 23, 95, +124,113, 50, 30, 33,123, 69, 41, 69, 65, 65, 1, 56,142,131, 72, 36, 66,247,238,221,209,178,101, 75,148,149,149,129,101,217,202, +230, 75,177, 88, 92,175, 42, 66,173, 86,171, 3, 48,195,199,199,103,217,212,169, 83,103, 52,109,218,116,212,251,239,191,207,224, + 17,139, 34, 8, 33, 86,171,213,138,141, 27, 55, 98,243,230,205,165,148,210,136,236,236,236,202, 1,211, 52, 26,205, 26, 63, 63, +191,253, 3, 7, 14,188,121,251,246,109,215,226,226, 98, 0,168,115, 90, 27,157, 78,135,176,176, 48,176, 44,139,121, 99, 85, 40, + 45,109, 6,150,101, 97,181, 90,225,228,228,116,223, 20, 68,252, 40,238,207, 30, 85,205, 21,223,231,138,135,167,254,164,111, 25, + 53, 22,192, 88, 66,200, 43,211,167, 79, 95, 59,118,236, 88,112, 28,135, 35, 71,142, 96,201,164, 73,248,140,101,135, 47, 34, 68, + 55,158,210,177, 79, 59,214,127, 35, 53, 94, 48,219,180,105,211,160,188,188,252,103,139,197, 18,205,113,156,228,232,209,163, 48, + 24, 12, 72, 78, 78,214,115, 28,183,233, 49,222, 51, 61, 62, 62,158,121,112,190,184,234, 96, 89,214,222,206,117,233, 61,123,246, +124, 98,154, 28,199,101, 85,157,195,172, 38,221,170,175,173, 86,107,157,253,207,238,105,207,109,223,190,253, 67,203,236,217,183, + 26,173,212, 30, 61,122,152,171, 46,171,218,145,187,186, 78,221, 44,203,218, 21, 39, 0,228,229,229,105, 1,188, 45,151,203, 23, +142, 24, 49, 98, 58,128,155,143, 18, 39, 33,100, 86, 84, 84,212,212,138, 63,201, 76,181, 90,253,208,104,180, 90,173, 54, 79,169, + 84,142, 10, 8, 8,168,156, 0,186, 54, 77,142,227, 82,159,123,238, 57,115,109,223, 9,128,251, 50, 87, 28,199,217,125,236, 60, +255, 92, 8, 33,101, 15,254, 15,213, 4,165,244,225, 97,254,121,120,120,238,195, 65, 44, 30, 62,110,220, 56,252,242,203, 47,216, +186,112, 33,122,103,101, 97,157, 88, 12, 71,177, 24, 75,205,230, 49, 0,120,131,245, 8,212,104,176, 74, 75, 75,191,184,123,247, +110,187,146,146, 18,107,106,106,170,158, 16, 98, 37,132,232, 57,142,251,156,227,184, 31, 30,245, 13,175, 94,189,106,223,153,241, + 41,106, 94,189,122,181,213,147,212,171,202,227,244,181,122,144,171, 87,175,254, 45,101,180, 26,141, 38, 5,192,144, 71,221, 95, +173, 86,111,134, 29,147, 57,219,187, 29, 0, 92,187,118,141, 47, 33,254,127,202,165, 75,151, 14, 61,237, 24,120,120,158, 37, 18, + 47, 93,234, 13, 0,241,241,241,208, 79,172, 24,246,106,245,159,227, 96, 61,181,177, 14, 31,160, 53, 0,159,123,127,231, 3, 72, + 1, 16, 3,192, 17,128, 17, 64, 25, 0,239, 42,219, 23,220, 91,103, 91,127, 12,128,229,239, 10, 22, 0,106, 28,183, 32, 37, 37, +229,149,188,188, 60,161,201,100,114, 96, 89,214,201,106,181,186, 90, 44, 22,127,150,101,151, 82,190,222,157,135,135,135,135,135, +231,153, 32, 34, 34,130,120,123,123,147,136,136, 8, 50,149,210,251, 30,255,160,230, 65, 31, 66,200, 14, 66,200,142,143, 63,254, +184, 27,128, 14, 31,127,252,113,155,123,175, 91, 1,240,182,173, 39,132,236, 0,224,245,192,250, 22,127,119,192,246, 13, 12,197, +195,195,195,195,195,195,195,243,148,161,148,246,155, 59,119,238, 23, 0, 4,115,231,206,253,162,202,107, 80, 74,251, 85,125,126, + 96,189, 79,205,170,127, 13, 4, 64,211,234, 86,212,167, 58,128, 16, 82,173, 70,109,212,165,207,107,242,154,188, 38,175,201,107, +242,154,188,230,179,167, 89,151,118, 13,251,247, 37,132,236,160,148,246,171,250, 92,101,159,126,247, 52,119, 84,253,251,129,245, + 59,235,115, 28,143,141,173,210,234,175,120, 0,104,202,107,242,154,188, 38,175,201,107,242,154,188, 38,175,249,152,143,190, 21, +150,165,230,231,154,254,174,178,236,239,140,183,150,178,251, 77,155, 4,234, 40,184, 74, 28,157,196, 0, 96,210,235,204,202,100, +148, 96,240,224,122,207, 23,199,195,195,195,195,195,195,195,243,184, 16, 66,118, 76,158, 60,249,147,167, 29,135, 61, 84,111,176, + 54,109, 18,228,183,114,242, 22, 26, 11, 35, 88,171, 57, 18, 0,132, 12,189,150,223,202,227,186,247,166, 77,249, 79,218,100,197, +199,199,127, 66, 41,245, 19,137, 68, 59,253,253,253,143, 44, 91,182,236,111,237,233,207, 83, 73,157,125,242, 98, 98, 98, 60,140, + 70,227,124,142,227,186,223,155,231,239,136, 88, 44,254,224,226,197,139,119, 1,212, 56,208, 86, 80, 80,208,218,208,208,208, 8, + 90, 1, 0,220, 55, 46,151,109,153,109,125, 70, 70,198,141,204,204,204, 87,237, 13, 60, 48, 48, 48, 88, 42,149,190, 65, 8,137, +186,167,147,108, 48, 24, 86,101,100,100,212, 56, 16,238,179,138, 66,161,112,164,148,190, 32, 18,137, 94,247,244,244,108,147,151, +151,247,153, 90,173,254,230, 81,180, 8, 33, 66, 0, 19,221,221,221, 95,113,119,119, 15,185,123,247,238,237,146,146,146, 13, 0, +190,166,148,214,249,127, 58,243, 93,101,187,206,125,186, 76, 59,182,235,232,204,105,139,213,167, 31, 92, 63,227, 3,133, 87,247, + 30,177,211,118,239, 60,249,249, 23,139,213,245,154,219,146, 16,194,224,207,223, 44,135,123, 63,159,250,104,252,157, 40, 20,138, +104, 0,147, 88,150, 21, 49, 12,243,141, 70,163,249,227,105,199, 84, 23,145,145,145, 31, 73, 36,146, 49, 12,195,220,214,106,181, + 35,179,179,179,159,200, 80, 39,132, 16, 38, 40, 40,200, 37, 61, 61,189,148,218, 49,120, 49, 79, 5,237,219,183,215,154,205,102, +223,218,182, 17,139,197,185,167, 78,157,242,251,187, 98,250, 27,201,167,247,154,254, 0,228, 2, 16,220,123,109,186,247,172,173, +178, 76, 91,195,250,191,149,106, 13,150, 58, 10,174, 66, 99, 97, 68,129,246,234,144, 60,205,197,151, 1,192, 71, 30,189,193,203, +175,241,122,117,148,196,220, 58,114,144, 76,228, 36,252, 94, 32, 16, 69, 27, 76, 70,111,145, 80,148,111,182, 90, 46, 50, 38, 58, + 86,115,109, 75,134, 61,111,220,191,127,255, 8, 0,110, 45, 91,182, 60,103, 50,153,218,124,243,205, 55,242,205,155, 55, 55, 79, + 72, 72, 24,250,252,243,207,111,167,148,238,221,190,125,187,190, 62, 7, 67,186,118, 21,250, 22,121, 14, 23, 8,133,253, 1, 52, +167, 20, 0, 17, 36,113, 22,243,206, 92,143,130, 85,244,200,145, 58, 7,175,172,137,246, 49, 94, 17,132, 51,127, 40, 18,208, 78, + 22,150, 28,167,140,120,254,169,132,130,235,246,238, 31, 24,168,232, 41, 17,146, 31, 1,192,100,165,163, 50, 50,178, 15, 60,206, +118,213,161, 80, 40,158, 3,176,134, 16, 34, 2,176,148,101,217,109, 90,173, 54,145, 82,250,200,199, 93,149,198,141, 27,251, 16, + 66,146, 22, 44, 88,224,213,182,109, 91, 1,199,113, 56,116,232,208,171, 83,167, 78,237,221,164, 73,147,166, 87,174, 92,201,173, +105,223,208,208,208,136,131, 7, 15,182,216,179,103, 15, 58,116,232, 0,142,227,192,113, 28,220,221,221,241,251,239,191,163,109, +219,182,149,203,252,252,252,208,165, 75, 23,187,227, 10, 13, 13,125, 33,186,101,235,241,255,253,112,146,159,175,151,183,139,149, +181,154,213,106,141, 98,225, 55,243,218,133,134,134,126,127,251,246,237,109,245, 61, 86, 66, 8, 81,169, 84, 67, 68, 34, 81, 63, + 0, 81,247, 22, 39, 91, 44,150, 29, 89, 89, 89,235,237,189,144,183,104,209,226, 24,195, 48, 13,234,243,222, 44,203,102, 36, 37, + 37,117,172,111,204, 0,160, 84, 42, 95, 82, 42,149,255,107,215,174,157, 83,116,116, 52,196, 98, 49,190,252,242,203,137, 0,106, + 53, 88, 54, 35,229,228,228, 52,196,217,217, 57,180,172,172,236,150, 94,175,223, 44,145, 72,122,126,251,237,183, 1,177,177,177, + 46, 90,173,150, 8, 4, 2,191,237,219,183, 15,255,238,187,239,122, 19, 66,122,212,245,219, 42,188,205, 77,115, 16, 69,118, 42, +188,117,120, 26,128,248, 7,215, 91, 13,210,215, 5,162,128,126, 2,122, 33, 19,192,215,246, 30, 39, 33,132, 81,169, 84,223,250, +249,249,141,208,235,245, 6, 66, 8, 37,132,208,102,205,154,217,214, 3, 0, 76, 38, 83, 97, 74, 74, 74,163,218,180,130,219,123, +158, 23, 48, 2, 85, 77,235, 89,142,205,186,115,234,238, 99, 15,221, 66, 41,125, 63, 49, 49,113,176, 80, 40, 36, 45, 90,180,112, + 38,132,244,182,215, 92, 40, 20,138, 8, 66,200, 20, 74,233, 57,141, 70,243, 61,165,148, 85, 42,149,221, 40,165, 31, 1, 0, 33, +228, 75,181, 90,125, 24, 0,148, 74,229,247, 97, 97, 97,207,223,188,121,115,169, 90,173,174,117, 60,185,218, 8, 15, 15, 31,251, +159,255,252,103,250,152, 49, 99, 28, 11, 10, 10,130,122,245,234,245, 43,128, 78,117,238, 88, 11, 49, 49, 49,162,156,156,156,137, +205,155, 55,127,175,117,235,214,242,171, 87,175,230, 40, 20,138, 69,254,254,254, 95, 39, 36, 36,212,105,216,155, 55,111,174, 16, + 10,133, 35, 0, 12, 71,197, 5,116, 29,128, 85, 23, 46, 92,184,253, 56,113,253, 91, 48,155,205,190, 7,102, 77, 3, 17, 8, 32, +237,212, 19, 28,199, 33,127,254,116, 88,239,230,195,123,214, 34, 88,173, 86,244,236,217,179, 86, 3,246, 47,230,236,211, 14,160, +190, 84,107,176, 36,142, 78, 98,214,106,142,204,211, 92,124,185, 77,220, 34, 55, 0, 56,187,103,252,203, 94,202, 38,151, 37, 66, +167,235, 14,174,210, 45,131,250,247,140, 30,220,175, 11, 81,201,125,145,165,201,245,251,105,221,222,184, 29,123, 15,111, 65,197, +184, 20,117, 82, 82, 82, 50, 59, 40, 40,200,231,224,193,131,105, 18,137,196, 81, 42,149,146,151, 94,122,201,113,232,208,161,141, + 15, 29, 58, 20,186,103,207,158,193, 3, 6, 12,216, 35, 22,139,119,110,220,184,177,176, 46, 61,191,102, 3, 27,251, 11,253, 55, + 13,120, 33,190, 65,223,231,124, 37, 65,254, 62,224, 56, 41, 82, 82,205,129,251,143, 95,136,219,181,103,223,135,190,141, 7,190, +148,123,117,235, 37,123, 63,156,166, 77,221,220, 29, 25, 58,193, 81, 66, 95,137,235,212, 56,184,127,124, 7, 18,210, 48, 4,215, +147,175,135, 30, 62,122,110, 68,183, 54, 46,119,244, 38,178, 78,207,145, 5,151, 47, 23, 23,213,166, 37, 17,146,149, 73, 87,110, + 42, 88,150,197,151,243,190,216, 63,101,202,148,202,209,213,109, 15,150,101,209,183,239, 0,124,245,213, 87, 48, 26,141,104, 29, +221,100, 37, 0,165,189,241, 2,248,245,234,213,171, 94, 58,157, 14,123,246,236,249, 88,163,209,124,188,119,239, 94,141, 66,161, +248, 80,163,209,172,123, 2,119,247,139,151, 46, 93,234,213,166, 77, 27,129,249,222, 24, 41,177,177,177,130, 79, 62,249,196,115, +206,156, 57, 11, 1,188, 82,211,142,148, 82,186,103,207, 30,252,252,243,207,249,243,230,205,203, 2, 0,111,111,111,229,171,175, +190,234,179,102,205,154,188, 5, 11, 22,100, 81, 74,225,229,229,165, 26, 50,100,136,143,189,161, 6, 4, 4,132,196,180,110, 59, +126,213,202,149,109,139,239,222, 53,252,184, 96,233, 5,163,208, 65, 23, 20, 21, 33,158, 54,125,150,219,231,159,126,252,118, 64, + 64,192,229,204,204,204, 84,123, 15, 82, 46,151, 7, 54,104,208, 96,203, 39,159,124,210,180, 99,199,142, 34, 95, 95, 95,104,181, + 90,164,164,164, 52, 61,113,226,196, 11,219,182,109,155, 40,151,203, 7,105, 52,154, 58,111, 38, 40,165,225,191,125,249,133,175, +131,151, 55, 56,139, 5, 30,205,162, 43,215,101, 31,218, 11,206, 98, 1,103,177, 32,160,239, 11,182,237,209,173, 91,183, 71, 26, +146, 92,165, 82, 41, 34, 34, 34,126,153, 60,121,178,216,104, 52,226,226,197,139, 56,117,234, 20,151,155,155, 91,235, 64,182,132, + 16, 33, 33,100,223,244,233,211, 85, 29, 59,118,116,201,207,207, 7,203,178,222,219,182,109, 27,219,178,101, 75, 87,149, 74, 37, + 89,189,122,181,109,134, 0,207,208,208, 80,207,161, 67,135,154,126,254,249,231,137, 0,230, 85,167, 57,243, 93,101,187,162, 91, +220,180, 28, 97,104, 92,163, 86,111, 32, 71,184, 55,110, 66,111,249,110,247, 80,166, 50,147, 21,223,176,161, 75, 72,164,211, 36, +153,107, 83,207, 98,245,254, 73,241, 13, 27,174,216,125,235, 86,157,147,166, 19, 66, 24,165, 82,249,109,159, 62,125, 94, 93,186, +116,169, 83,114,114,178, 83, 84, 84, 20, 56,142,131,213,106, 5,203,178,182,121, 55, 81,117,192,224,154, 16, 48, 2,213,137, 45, + 87,124, 29, 29, 29, 43,255, 15,109,207,229,229,229,232,253,122,187, 58, 53,236,129,227, 56,137,237,119,109,181, 90,165, 0, 68, + 0,106,157,212,188, 10, 51, 78,158, 60,249,210,238,221,187,135,205,154, 53, 43, 28,192,187, 28,199, 77, 75, 78, 78,238, 2, 0, + 81, 81, 81, 18, 0,135, 21, 10,197,200, 49, 99,198,140, 25, 55,110, 28, 94,127,253,245,105,132,144,217,143,250,127, 47,145, 72, + 62,125,231,157,119, 28, 45, 22, 11, 28, 29, 29, 97, 54,155, 27, 62,138,142,141,198,141, 27,139,117, 58,221,230, 25, 51,102,244, + 27, 48, 96,128,109, 10, 47,255, 99,199,142,205,249,224,131, 15, 58,196,196,196, 12,172,201,100,197,196,196, 68, 3,248, 60, 44, + 44,172,247,235,175,191, 46,136,141,141, 69, 89, 89, 25,246,237,219, 55,101,203,150, 45, 83, 98, 98, 98, 78, 2,152,150,144,144, +112,228,113, 98,124,224, 61,211, 1, 4,222,123,153,145,144,144, 16,244,164,180, 31, 7,129,204, 5, 41,131,186, 33, 52,185, 0, + 0,144,243,253,124, 0,128,235,167, 95, 61,205,176,120,170,225,145,166, 62,209,233,116, 45, 63, 30, 63, 28, 12, 83,113,151, 24, + 22, 18,136, 57,159,140, 38,191,237,216,219,178,182,253,218,183,111,191,128,101,217,112, 79, 79,207, 15, 13, 6,131,116,225,194, +133, 82,181, 90, 29,185,121,243,102,154,152,152, 8,177, 88, 12, 55, 55, 55,116,239,222,221, 33, 46, 46,174,225,201,147, 39, 3, +183,108,217, 50,160,111,223,190,171,118,238,220,185,189, 38, 93,239,102,207,135,251,249,248, 31,253,106,214, 91,158, 77, 67, 66, + 97,178, 88,144,149,171, 6,133, 4,254,190,206, 24,246, 66, 11,113,108, 43,113,216,215, 75, 14, 30,241,107, 58,160,179,246,242, +111, 87,234, 58,198, 78, 49,206,103, 7,118,105, 24,243,124,239, 14, 76, 88, 84, 99,136, 29,156, 42,215, 53,107,217, 18,205, 90, +182, 36,163, 71,151,134, 36, 94, 72,156,186,231,224,153, 79, 58,197, 56, 39, 28, 79, 40,175,121, 98, 76, 10, 7,219,220,105,131, + 94,124, 25, 17, 17, 17,247,157,204,109,127,167,165,165,129, 16,130,252,252,124,112, 20,146,186,226,124, 16,157, 78,135,211,167, + 79,163, 69,139, 22,232,213,171, 23, 94,121,229, 21,249,182,109,219,126, 93,188,120,113, 23, 0,163,235,171, 87, 21,150,101, 99, + 91,182,108, 41, 48,155,205, 16, 8, 4, 40, 40, 40, 64,106,106, 42, 66, 67, 67, 5, 44,203,118,173,109, 95, 74, 41, 58,116,232, +128,121,243,230,101, 29, 61,122,180, 37, 0,116,238,220,249, 66,219,182,109,125, 22, 44, 88,144,117,252,248,241, 24, 0,136,141, +141, 77,104,213,170,149,221,229,180, 78, 78, 78,111,190,255,223, 15,124,138,239, 22,234, 45,165,165,102, 25,199, 90, 93,165, 34, + 82,146, 87, 80,116, 39,211, 85,247,230,152,241,194, 79, 39, 79,120, 19,128, 93,109,246,114,185, 60, 48, 50, 50,242,236,138, 21, + 43,124,189,188,188, 80, 84, 84,132,130,130, 2,156, 61,123, 22, 28,199, 33, 46, 46,206,161,101,243,230, 45,191, 94,176,224,148, + 92, 46,111,111,143,201,114,240,242,198,230, 46, 21,255, 26, 47,221,174, 56, 41, 18, 66,176,231,149,254,149,219, 12, 77,175,152, +220, 92, 42,149, 62,242,180, 62,148,210,246,177,177,177, 98, 0,152, 56,113, 98, 73,121,121,249, 28, 66,200,175,217,217,217,234, + 58,118,157, 56,117,234, 84,101, 72, 72, 72,208,175,191,254,138,178,178, 50, 0,240, 13, 9, 9, 65,120,120, 56,123,244,232, 81, + 68, 68, 68,192,197,197, 5, 71,143, 30,197,233,211,167, 17, 29, 29,237, 34, 22,139, 95, 70, 13, 6,171,115,159, 46,211, 28, 68, +145,157, 26,181,122, 3, 50, 87, 57, 86,172, 93,143,148,243,171, 58, 25, 45,215,166,125,242,174,242, 53, 1,117,120, 67, 25, 46, +155, 28,220,170,171, 87, 88,147, 1,104, 16,115,209,219,200, 30, 75,157, 54, 46,116,174, 80,106, 88, 61,253,171,236,130,234,116, + 9, 33,140,191,191,255,252,248,248,248,151,150, 46, 93,234, 14, 0,151, 46, 93, 66, 78, 78, 14,124,124,124, 32,149, 74, 33, 18, +137, 32, 20, 10,235, 53, 85,150,163,163, 35, 52, 26, 13,108, 55, 14, 44,203,162,180,180,180,114,210,240, 25, 51, 8, 51,125,186, +125,217, 38,185, 92,222,177,101,203,150,107, 84, 42, 85, 64,213,229,241,241,241, 24, 61,122, 52,202,203,203, 17, 29, 29, 29,235, +231,231,103,124,235,173,183,192,113, 28,180, 90,109,217,165, 75,151,158, 83,171,213,103,106, 56,110,125, 78, 78, 14,198,140, 25, +131,140,140,140,113, 10,133, 34,157, 97, 24,169, 68, 34,177,173,151, 40, 20,138,136,136,136,136,111,223,122,235, 45,164,165,165, +225,250,245,235,103, 31,231,166,202,193,193,161,156,101, 89, 95,171,213, 10,189, 94,143,184,184, 56,105,100,100,164, 86, 36, 18, + 93, 43, 42, 42, 26,150,153,153,169,177, 71,135, 16, 34,148,203,229,254, 34,145,104,233,248,241,227,251,116,233,210, 5,215,174, + 93,195,158, 61,123,240,252,243,207,163,107,215,174,152, 50,101, 74,223,105,211,166, 77, 4, 80,211,205,192,166,205,155, 55, 7, +171, 84,170,202, 41,145, 92, 93, 93,241,230,155,111, 98,248,240,225,216,181,107, 87,135, 47,190,248, 98,115,215,174, 93,125,143, + 60, 70, 75,197, 3, 4, 38, 36, 84, 76,197, 23, 19, 19, 19, 88,199,182,127, 27, 14,173, 58, 32, 52,185, 0,183,163,188, 0,160, +210,104,217, 94, 67, 89,235,101,152,231,111,164, 90,131,101,210,235,204, 66,134, 94,243,145, 71,111, 56,187,103,124,101, 19, 33, +172,244,154,201,172, 51, 3, 0,203, 81,148,232,172,112,116, 96,144,166, 41,197,229,219,249, 15,233,208, 7, 74, 45,117, 58,221, +127, 23, 45, 90,132, 47,191,252, 50, 94,175,215,151,165,166,166,106,202,202,202,202,135, 13, 27, 70, 68, 34, 17, 78,156, 56,129, + 59,119,238,160, 89,179,102,112,119,119, 71,199,142, 29,197,189,122,245, 10, 24, 57,114,228,107, 0,182, 87,167, 73, 94,122, 73, + 32,151, 56,252, 62,127,214, 16, 79, 34,184,142,235, 25, 69,104,168,106, 3, 47,183, 0,168,243,202,144,112,117, 23,174,223,218, +137,134,170, 64,140,126,181,161,251, 55, 63,228,237, 32, 49,111, 55,164, 9,127,246,243,122, 80, 19, 0,164, 98,182,245,103,139, + 18,193,150,223, 2,181,100,128,154, 31,154,221, 5, 78,238, 1,136,108,225, 7, 39,137, 15,115, 41,249,155,214,181, 29,187,209, + 74, 63,154, 61,115,198, 79,205,163, 99, 80, 92, 92,140,239,190,251,174,210, 88, 81, 74, 43,239,184,219,181,107, 7,139,197,130, +159,126,250, 9, 22,174, 34,253, 95, 91,156, 15, 48,180,109,219,182,235, 41,165, 18, 71, 71,199,156, 22, 45, 90, 4,189,251,238, +187,194, 33, 67,134, 64,175,215,191, 37,151,203,247,106, 52,154,173,245,212, 4, 0, 52,104,208,160, 99,215,174, 93, 29, 5, 2, + 1,204,102, 51,138,139,139,145,149,149,133,212,212, 84,120,123,123, 3, 85,250,111,213,164,249,224, 92,136,148, 82,106, 59,254, + 42,203, 42, 63, 23,123,226, 36,132, 68,122,184,123, 56,255,248,245,210,243, 62, 14, 2,226, 29,160, 32, 98, 87,119, 33, 35,115, +113,160, 2,129, 62, 40, 64,225, 66, 8,137,172,110,223,135,126, 75,132,144, 6, 13, 26,108, 89,185,114,165,175, 72, 36, 2,203, +178,240,241,241, 65,106,106, 42,138,138,138, 80, 90, 90,138,212,107,201, 8, 86,169,240,159,209,163,228, 51,190, 90,176,133, 16, +210,170,234, 69,172,186, 56, 57,203,253, 55,229, 53, 25,168,154,150,219,251, 29,113, 28,119, 39, 59, 59, 27, 78, 78, 78,136,138, +138,146,157, 59,119,238,184, 90,173,174,214, 92, 85,213,148, 74,165, 47,199,198,198,186,172, 93,187, 22, 49, 49, 49,112,115,115, +195,225,195,135,113,233,210, 37,152,205,102,166,180,180, 20, 50,153, 12,115,231,206, 69, 96, 96, 32,138,139,139,145,158,158,238, + 37, 18,137,188,107,210, 60,182,235,232,204,194,219,135,167,229, 8,246,198,173, 88,187, 30,111, 13, 29, 2,127,235,237,227, 30, + 13,153,153,241,125, 59,124, 42, 16, 5,244,115,118,105,234, 17,222,116, 0,196, 18, 25,222,253,232,115, 92,191,252,187,135,174, +244,210, 56,214,146, 25, 0,224, 63, 15,106,146,138, 15,136, 81, 40, 20,163,150, 45, 91,230, 98, 91,206, 48, 12, 68, 34,209,125, +198,202, 54, 25,123,117,159,105,117,159, 39,203,178, 48,155,205, 48,155,205,224, 56, 14,121,121,121, 40, 45, 45,133,135,135, 71, +197, 6,211, 1, 2, 66, 40,170, 55, 44, 85, 53, 25,134, 25,182,126,253,250, 0, 39, 39,167,135,182,203,204,204, 68,113,113, 49, +156,157,157,225,238,238, 14,139,197, 2,171,213, 10,163,209, 40,235,218,181,235, 88, 0,103,170,211, 20, 8, 4, 19,198,140, 25, + 19,187, 99,199,142,208, 89,179,102,193,108, 54,207,207,203,203,131,205,160,117,236,216,177, 29,165, 52,101,252,248,241, 0,128, + 25, 51,102, 88,202,202,202,222,177,231,216,171,195,207,207,175,113,255,254,253, 61, 14, 28, 56,128,142, 29, 59,194,104, 52, 98, +236,216,177,174,163, 70,141,114, 61,121,242,164,207,194,133, 11, 87, 3,232, 89,155,102, 76, 76,140, 72,171,213, 78, 26, 54,108, +216,196,158, 61,123,186,229,231,231,195,193,193, 1, 27, 54,108,192,143, 63,254,184,219,108, 54, 79,221,188,121,243,236,229,203, +151,199, 13, 24, 48, 0,203,151, 47, 31, 79, 8,249,146, 82,202, 85,163,169, 8, 8, 8, 64, 82, 82, 18, 60, 60, 60,224,237,237, +141,226,226, 98,156, 62,125, 26,103,207,158, 69,100,100, 36, 8, 33, 30,168,184,166, 85,107,176,106,137, 51, 29,143,152,169,178, +247,243,172, 15,117,105,218, 42,212,108,103, 72,150,173,232, 18,205, 2,168,201, 77,219, 19, 39, 33, 68,168, 80, 40, 6,184,187, +187,143,163,148, 10, 11, 11, 11,151, 57, 57, 57,109,186,117,235, 86,181, 89,214,191,226,216,159, 53,132, 0, 64, 8,177,125, 47, + 93, 41,165, 71,149,201, 40,201,111,229,113,221,203,175,241,122, 47,101,147,138, 15,209, 74,175, 9, 28, 60,174,251,157,215,149, + 0,128,217, 66,113,242, 90, 33,146,110,106,145,116, 35, 7, 50,105,221,119,221, 94, 94, 94,232,208,161, 3,126,251,237, 55,100, +102,102,202,230,206,157, 27,110, 54,155,205,253,251,247,207,110,208,160, 65, 97,199,142, 29, 33, 18,137,112,230,204, 25,148,148, +148, 64, 32, 16, 64, 34,145,128,227,184, 26, 51,109,190, 55,216, 55, 94, 31,221, 50,212,219,157,193,246, 19,123,209, 46,114, 32, +156, 28, 68,200, 43,212,131, 33, 4,183,238, 28, 0,203, 58, 35,241, 90, 6,218, 55,117, 70,167,182,110,170,178,131,119, 71, 3, + 88, 98,207, 7,100, 86, 31,129,164,193, 32, 64,218, 4,212,116, 11,156, 73, 13, 42,242, 69,185, 78,138,252,180,116, 92, 59,189, + 9,212,170,171, 83, 39, 51, 51,251,127, 10,133,162,227,145,225,111,188,193,113, 28,230,205,155,119,228,198,141, 27,221,170,110, +211,176, 97,195,195, 83,166, 76,233, 90, 88, 88,136,189,123,247,174,202,206,206, 94,105, 79,140, 54,178,179,179, 15, 0,240,180, +189,150,203,229,129, 23, 46, 92, 88,251,203, 47,191,180,127,237,181,215,176,113,227,198, 15, 1,108,173, 89,225, 97,198,143, 31, + 47,250,237,183,223,122, 59, 58, 58,126, 55,109,218, 52,153,201,100,130, 70,163, 65, 78, 78, 78,101,182,237,202,149, 43,172, 80, + 40, 60, 89,155, 78,117,166,201,182,252,193,155,236,123,203,236,189,243, 46, 51, 89, 44, 70,231, 0,133,165,255,128,222,205, 46, +157,189,120,221,209,211,147,105,214, 58,186,241,181,155,105, 9,164,162, 9,198,174,102, 24,149, 74, 53,100,250,244,233,205, 92, + 93, 93,193,113, 28,220,220,220,144,151,151, 87,105, 40, 77,165, 37, 48,151, 20, 35, 41, 61, 21, 29,187,118, 71,175,246,237,162, +118, 90, 44, 67, 0,172,171, 77,215,179,121,203,202,204,213,198, 80,175,202,229,175,164, 21, 85, 26,128, 93,109,194,224, 32,115, + 70,211,247, 63,182,243,176, 31, 70,163,209, 92, 8, 10, 10,218, 21, 23, 23,215,103,244,232,209, 76, 78, 78,206, 30, 63, 63,191, + 88,173, 86,123,181,182,253,100, 50, 89,195,252,252,124,148,150,150,194,205,205, 13, 11, 23, 46,132,175,175, 47,116, 58, 29,206, +157, 59, 71, 85, 42, 21, 57,124,248, 48,148, 74, 37, 10, 10, 10, 96, 54,155,161,211,233,114, 76, 38, 83,141,125, 36,239, 53, 3, +198, 79,232, 37,223,157,114,126, 85, 39, 37, 82,207, 13,254,176,211,141,196,179,215, 51, 15, 29, 60, 49,211,106,144,102, 22,101, +237,159, 20,210, 58,209,123,220,135, 51,176,120,254,116,164,156, 57,122,215, 47,176,116, 9, 75,140,171, 98,123,215, 28,175, 78, +167, 51, 36, 39, 39,187, 36, 38, 38,130, 97, 24,184,186,186,194,217,217,185,114, 98,115,155,185, 18, 10,237, 79,208,219,110,112, +108,230, 42, 47, 47, 15,183,210,175, 99,243,161,213,176, 88, 45,222, 43,219,186,230,132,138,197, 73,222,197,228,147,252,203,244, + 66,109, 90,148,210,101,175,188,242,202, 16,165, 82,233, 82,117,121,139, 22, 45,240,234,171,175, 98,207,158, 61, 56,127,254,252, +125, 55, 88,121,121,121, 26,150,101, 87,213,164,153,145,145, 81,164, 82,169,226, 70,141, 26,149,176,117,235, 86,215,175,190,250, +170,114, 98,115, 91,179,168,237,121,237,218,181, 72, 72, 72,152,150,147,147,115,205,238, 15,160, 10,254,254,254,145,253,251,247, + 63,182,100,201, 18,119,173, 86,139,252,252,124,148,151,151, 67, 36, 18,193,106,181, 34, 44, 44,140,176, 44, 27, 92,155, 70,227, +198,141,197, 12,195,252,126,232,208,161,222,225,225,225, 0, 0,139,197,130, 19, 39, 78, 96,244,232,209, 5, 78, 78, 78, 47,167, +165,165,149, 43, 20,138, 41, 59,118,236,136,107,209,162, 5,154, 53,107,230,159,155,155,235, 2,160,184, 58, 77, 91,150,223,246, +253,252,244,211, 79,149,235, 12,134,138, 41, 39, 77, 38, 19,105,221,186,117,240,185,115,231,234, 83,220, 82, 83,166, 42,163,202, +107,187,250, 22,255, 29,164,255,178, 2,105,159,188,135,160,227, 41, 0,128,132,198, 21, 93,174,130,142, 38, 87,108, 48,124,120, +189,244, 20, 10,133, 23,165,244,173,158, 61,123,190, 31, 23, 23,231, 35,151,203,225,229,229,133, 75,151, 46,197,238,221,187,247, + 59,149, 74,245, 3,203,178, 63,216,147,173,127, 92, 30,244, 34,127,245,251,253,213, 84,158,129, 40,165,228,222,193, 17, 12, 30, +204,122,111,218,148,175,142,146,152, 37, 66,167,235, 0, 96, 50,235,204,126,231,117, 21,195, 52,204, 92, 11, 10, 10,150,187,151, +109,160, 20,172,157,117, 32,134,107, 47,130, 43,250, 29,190, 30, 3,176,124,249, 86,228,230,230,138, 23, 46, 92,216, 96,235,214, +173,170, 97,195,134,101,132,133,133, 21,119,239,222, 29,171, 87,175,134,191,191, 63, 76, 38, 19, 56,142,171,209,189,185,120,178, +131,219, 54, 11, 19, 92, 79,191,132, 86,225, 47, 34, 88,222, 17,183,212,197, 3,211, 49,224, 0, 0, 32, 0, 73, 68, 65, 84, 40, + 44, 53,162,160, 88,143,136,136, 15,161,189,171, 67, 73,185, 1,151, 82,126,133, 74, 30,194, 8, 68,183,226, 96,167,193, 50,222, + 90, 3, 99,234,122,136,229,221, 32, 9, 25, 2,145,119,123,100,166, 28,193,197, 3, 11,144,117,227, 15, 80,142,133, 95, 64,181, + 9,146,135,160,148,126,182,104,209,162, 97,115,230,204, 17,190,247,222,123, 93,149, 74,101, 87,181, 90,125, 4, 0,148, 74,101, +215, 49, 99,198,116,117,113,113,193,236,217,179, 45,148,210,207,236, 18,173, 5,141, 70,147,161, 84, 42,199, 29, 56,112, 32,113, +228,200,145,136,140,140,108, 73, 8, 97,236,233, 88, 27, 22, 22, 54, 90, 34,145,140,176, 90,173,225, 67,135, 14,101,222,122,235, + 45,153,175,175, 47,210,210,210, 96, 52, 26,193, 48, 12,196, 98, 49,174, 92,185,194,253,254,251,239,197, 98,177,120,124, 93,154, + 28,199,193,219,219, 91,217,169, 83,167, 4, 0,240,244,244, 84,113, 28, 7, 47, 47, 47, 85,135, 14, 29, 18, 0,192,195,195, 67, + 89,157, 17,171, 9,179,217,124, 46, 35, 61, 61, 34,182, 83,172,252,216,249,171, 23, 6,189,208,175, 27, 35,100,152, 59,233,154, +115, 62, 94,158,206, 39, 78,254, 81, 98, 54,155,207,217,163, 37, 18,137,250,117,236,216, 81, 88, 88, 88, 8,133, 66,129,188,188, + 60,168,213,106, 88, 44, 22, 24,138, 11, 97, 46, 41,129,185,184, 8, 84, 87,134,219,231,206, 32, 42, 64,233,176,175,162, 19,124, +173, 6,203,230, 21,171,155,152,218,182,204,193, 69, 6, 71, 23,151,202,230, 15,123, 81, 40, 20, 3, 92, 93, 93, 39,149,150,150, +238, 82,171,213,179, 76, 38,211,187,115,230,204,105,253,249,231,159,123, 79,154, 52,201,117,210,164, 73, 27, 27, 52,104, 16,157, +150,150,102,172, 73,163,172,172,236,150,197, 98,241, 2,224,119,240,224, 65,248,248,248,160,164,164, 4, 22,139, 5,122,189,222, +228,225,225, 33, 45, 40, 40,128,193, 96,128,201,100,130,171,171, 43, 18, 18, 18,238, 90,173,214, 26,155,237,109,184, 55,100,102, + 26, 45,215,166,121, 54,118, 86,179,212,171, 75,169,158, 43,156,254, 85,246, 76, 0, 95,199, 55,108,184,194,196, 29, 77,189,126, +249, 55,143,212,115,135,239,102,223,208,133,174,216,121,187,198, 62, 88,180,226, 36,197, 17, 66,104,163, 70,141,144,151,151, 7, +129, 64, 0,103,103,103,200,100, 50, 68, 70, 70, 34, 51, 51,243,145, 13, 86, 85,115,117,224,212, 14,228,151,105,176, 98,254, 90, + 40,253, 3, 24, 0, 62,234,156,204,231, 70, 78,124,169,109, 72, 71,143, 57,169,127, 20,214,216,175, 45, 59, 59,251, 34, 0,215, +170,203,148, 74,101, 55, 15, 15,143, 67,102,179, 25,105,105,105,216,183,111, 95,215,172,172,172,163,118, 7, 8, 32, 43, 43,235, +182, 82,169,140,123,225,133, 23, 86, 55,107,214,172, 33,165, 20,145,145,145, 24, 48, 96, 0, 54,111,222,140,171, 87,175,162,164, +164,132, 59,126,252,248, 74,141, 70,243, 72, 29,114,228,114,121,163,190,125,251,254,177,120,241, 98,143,252,252,124, 24, 12, 6, +148,149,149, 97,211,166, 77,136,141,141,133, 84, 42,197,162, 69,139, 74,172, 86,235,226,154, 52, 26, 55,110, 44,166,148,254,182, +117,235,214,222,161,161,161,184,118,237, 26,142, 31, 63, 14, 31, 31, 31, 56, 58, 58,162,127,255,254, 94,235,215,175,127,183,113, +227,198, 11, 68, 34,209,204, 62,125,250,128,101, 89,156, 63,127, 94,147,158,158, 94,227,247,111,203,212, 84,135,193, 96, 0,165, + 20, 22,139,101, 33,195, 48, 47,199,196,196,244, 74, 72, 72,120,172, 78,209,255,148, 62, 87, 0,160, 82,169,154,136, 68,162,255, +120,120,120, 32, 47, 47, 15, 69, 28, 32,187, 91, 81,116, 91,124,239,116,121,247,238,221,202,115, 77,120,120,248, 78,189, 94,255, + 73, 86, 86, 86,141, 89, 38,165, 82,217,220,201,201,233,253,254,253,251, 15,235,219,183,175,192,108, 54, 99,199,142, 29, 88,188, +120, 49,226,226,226, 16, 22, 22,134, 15, 63,252,208,205,104, 52, 78,222,179,103,207,164,168,168,168, 61,165,165,165, 31,215,166, +249, 36,184,207,139,252,203,169, 60, 3,221, 59,160, 63,251,209, 12, 30,204, 42,129, 66, 0,240,247,247,247,246,244,244, 92,204, +178,108, 55,124,250, 41, 92,132,110, 72,187,117, 3,165,133, 28, 44, 38, 35, 56,142,130,214,236,129,238,131, 43,250, 29,174,157, + 41, 74,142, 17,152,205,102,248,250,250, 98,238,220,185, 40, 46, 46, 22,142, 28, 57, 50,120,198,140, 25, 23, 13, 6, 3,202,203, +203,161,215,235,161,215,235,107, 53, 88, 98,169,177, 89,144, 95, 56, 74,245,109,224, 36,145,160,160,196,136,194, 82, 35,242,139, + 12,216,242,219, 80, 24,245, 58, 88, 77, 38,176,102, 43,100,126, 3, 17,230,217, 13,192, 77,187, 70,166,173, 76,162,112, 86,152, +213,251, 97, 86,239,135, 83,139, 41,248,109,209,107,247,109,103,181,218,215,228,175,209,104, 50, 20, 10,197,247, 35, 70,140, 24, +255,194, 11, 47,224,135, 31,126,248, 18, 64, 43, 0,144,201,100, 95, 14, 28, 56, 16, 87,174, 92,193,177, 99,199,150, 62,169,187, + 5, 74,169,151,167,167, 39, 24,134,129, 78,167, 51,214,101,174, 54,109,218, 68,102,204,152,177,167,127,255,254,237,223,125,247, + 93, 39,127,127,127, 80, 74, 97, 50,153,144,149,149, 5,134, 97, 80, 84, 84,132,159,126,250,169,252,252,249,243, 84, 34,145,156, + 20,137, 68,111, 95,185,114, 37,187,174, 88, 60, 60, 60, 48,116,232, 80,159, 54,109,218,248, 84,173, 24,124,249,229,151,125, 90, +181,106, 85,185, 76,165,170,177,160,235, 33, 12, 6,195, 79,179,103, 78,235,246,203,154, 13,145,141, 34,195, 60,118,237, 59,124, +193,203,203,213, 49, 56, 56,212,161,184,168,200,184,120,225,124, 97,121,121,249,255,236,148,139,242,246,246, 70, 78, 78, 14,110, +222,188, 9,163,209, 88,209,132,163, 43,131,169,168, 8,230,226, 66,192,160,135,132,101, 97,204,215, 34, 56, 52, 24,248,179,194, +176, 86,170,154,169,170,203,108,207,142,110,174,144, 56, 59, 67, 32,170,190, 89,171, 58,228,114,121, 76,203,150, 45, 55, 44, 95, +190, 92, 60, 97,194,132,182, 13, 26, 52, 88,156,147,147,147,174, 82,169,122,204,159, 63,255,236,172, 89,179, 28,134, 13, 27,214, +104,217,178,101,175, 3, 88, 86,147,142,193, 96,216,176,107,215,174, 87, 3, 3, 3,253, 46, 95,190, 12,131,193, 0,142,227, 16, + 31, 31, 15, 0, 82,219,118, 41, 41, 41,122,189, 94,175,189,114,229, 74,105,122,122,186, 25,118, 84,253, 77, 91,172, 62, 61,225, + 37,213, 32,185, 92,113, 74,226, 16, 20,194,232, 18, 6, 78,120, 73,245,213,130,141, 89,134,221,183,110,149, 78, 27, 23, 58, 87, + 87,122,121,156,135,170,124,201,146,237, 53,155,171, 42,208,123, 21,131,240,246,246,174,108, 18, 20,139,197, 0, 0, 63, 63, 63, + 20, 23, 23,215,218, 68, 88, 29, 44,203,162,184,184, 24,197,197,197,184,113,231, 26,242, 74, 53,216,191,238, 20, 88,150,173,204, +142, 40,252, 84, 56,176,238,172, 75,215,193,173, 63,241,106, 78, 14, 23, 36, 81,187,140, 59, 0, 48, 12,243,254,139, 47,190, 8, +179,217,140, 1, 3, 6, 96,237,218,181,239, 3, 56,106,239,254, 54,212,106,245,105, 66, 72,248,205,155, 55, 93, 45, 22,203,243, +253,251,247, 95,213,167, 79, 31,156, 58,117, 10, 7, 15, 30,236,106, 50,153,174,179, 44,171,151,203,229,115,228,114,185, 47, 33, +100, 78,118,118,118,173,213,206, 17, 17, 17,195, 92, 92, 92,102, 59, 58, 58,150,246,233,211, 71, 97,203, 92,149,151,151,195,106, +181, 34, 43, 43, 11,187,119,239,214,236,218,181, 75, 67, 41,117, 42, 43, 43,155,158,145,145,177,169, 58,173,152,152, 24,145,197, + 98,217,246,251,239,191,199,133,134,134,226,232,209,163,152, 55,111, 30, 26, 54,108,136,149, 43, 87,162, 67,135, 14, 8, 14, 14, +134,167,167,231,127, 74, 74, 74,218,207,155, 55,175, 79,203,150, 45,177,117,235, 86,228,230,230,126, 87,219,249,169,182,243,172, + 94,175, 7,165, 20,221,187,119, 31, 61, 97,194, 4,244,239,223,127, 95,171, 86,173,218,156, 63,127,254,134, 29, 31,235, 63, 50, + 83,101, 67,161, 80,204,237,217,179,231,164,230,205,155, 99,205,154, 53, 48,182,234, 8,231,149,219,113,185, 95, 44, 40, 0,197, +202,223, 0, 0,151,159,175, 40,232, 8,238, 49, 24,147, 38, 77,234, 51,112,224,192, 64, 0, 77,106,208,252,234,181,215, 94,155, +248,218,107,175,225,194,133, 11, 88,182,108, 25, 46, 94,188, 88,121,205,179, 88, 44, 72, 78, 78, 70,114,114, 50,228,114, 57,250, +245,235, 71,222,126,251,237,248,248,248,120, 31,220,187,102,253, 85, 60,228, 69,254,197, 84,159,193,170,130,191,191,191,183,135, +135,199,149,197,139, 23,123,181,109,219, 86, 96,181, 90,113,240,208, 33,124,240,222, 72,196,245, 27, 7,131, 81, 2,171,129,128, + 21,203,236,123, 71,215,126, 40, 57, 70,192,201,250,192,100, 50, 97,244, 90, 49,220,137, 22, 11,223,240, 3, 0,162,215,235, 97, + 52, 26,161,215,235, 81, 94, 94,142,242,242,114,176, 44, 91,227, 89,178,180,200,217,108,182,112, 80,231,166, 35, 75,115, 25,110, +178, 64, 80, 38, 0,218,187, 58, 16,248,194, 98, 72, 1,119,239, 31,211,168,207, 66,185,241,241, 76, 49, 91,250,112, 49, 26,199, +217,223,167,146,101,217,217,243,231,207, 31,189,120,241, 98,135,113,227,198,197, 40, 20,138,231, 1, 96,226,196,137, 49, 82,169, + 20, 75,150, 44, 49,178, 44, 59,251,177,130,188, 7, 33, 68,160, 84, 42,223,239,220,185, 51, 74, 74, 74,112,229,202,149, 29,117, +237, 51,101,202,148,177, 47,190,248, 98,251, 25, 51,102, 56, 25, 12, 6,232,116, 21,205,159,197,197,197, 40, 47, 47,135, 86,171, +197,196,137, 19, 11,205,102,243,152, 59,119,238,108,182, 55, 22, 74, 41,126,255,253,119,252,242,203, 47,247, 85, 12,190,252,242, +203, 62,107,215,174,205, 93,180,104,145,154, 82, 74, 61, 61, 61, 85,131, 7, 15,246,181,183,133, 48, 59, 59, 91,175, 80, 40,198, +207,154, 61,235,215,175,230,207,247,189, 91, 80,120, 93, 44,113, 52, 56, 57, 58,120, 78,250, 96, 38,213,106,181, 19,181, 90,109, +221,109,184,247, 40, 44, 44, 68,106,106, 42, 28, 29, 29, 33, 22,139,193,234,202,192,149,151,195, 88, 88, 0,198,100,132, 3,203, +194,211,201, 1, 1,126,126, 8,244,181,175, 47,190,230,240, 62,236, 30, 82, 49,124,139,173, 89,144, 16,130, 61, 29, 26, 65, 34, +115,134, 84, 38, 67,199,109,199, 1,160,194, 40, 44, 92, 94,167,166,191,191,191,183, 66,161,248,253,187,239,190, 19,231,231,231, +227,202,149, 43,137,105,105,105,197,158,158,158, 46, 34,145,136,187,113,227,198,129,148,148,148,126,193,193,193,160,148,214, 85, +253,245,245,150, 45, 91,158,139,141,141,181, 6, 7, 7, 59,231,229,229, 5, 22, 22, 22, 18,141,230,254, 62,204,231,206,157,147, +102,100,100,232, 56,142,219,138,138,113,176,234,252,225, 79,120, 73, 37, 61,121, 1,227,187,120, 7, 55,119,243,105,142,124,203, +197,230,167, 19,115,198, 79,120, 73,181,104,193,198, 44, 3, 75,140,171, 88, 75,102,128, 80,106, 88, 93,231, 65,163, 34,139,213, +184,113, 99, 80, 74,113,238,220, 57, 28, 63,126, 28,199,143, 31, 71, 90, 90, 90,229, 54,110,110,110,216,191,127, 63,186,117,235, + 86,139,210,253,232,116, 58,200,229,114,184,187,187, 99,235,145,159,241,227, 87,107, 43, 59,186,219,200,207,207,135,147,147, 19, +102,127,176, 64, 54,242,163,193, 51, 1,244,178, 71, 59, 32, 32, 32, 36, 54, 54,182,175,159,159, 31, 10, 11, 11,225,227,227,131, +214,173, 91,247,247,243,243, 11,214,106,181,143, 52, 78,155,201,100, 26,219,173, 91,183, 89, 19, 39, 78,132,197, 98,193,144, 33, + 67,144,154,154,186,225,246,237,219, 11,131,130,130,198,143, 27, 55,206,207,219,219, 27, 99,199,142,117, 6, 48,168, 38,157,200, +200,200,255, 78,158, 60,249,139,225,195,135, 59, 88, 44, 22, 28, 60,120,176, 50, 75,109,181, 90,145,158,158,142,233,211,167,107, + 74, 74, 74,186,100,101,101,221,170, 43,174,156,156,156,137,219,182,109,139,143,136,136,192,158, 61,123, 48,102,204,152,157, 50, +153,172, 73,223,190,125, 3,157,157,157,145,152,152, 8,179,217, 12,185, 92,238, 55,121,242,228,126,189,123,247,198,129, 3, 7, + 48,115,230,204, 29,254,254,254,181, 26,118,150,101, 33, 20, 10, 97,121,160, 79,163, 64, 32,192,197,139, 23,209,189,123,119, 76, +154, 52, 9, 0,112,224,192, 1,215, 94,189,122, 93,238,218,181,171,235,145, 35, 71,106,204,222, 2, 53,103,170,254, 41, 85,132, +206,206,206, 35, 86,174, 92,137,155, 55,111,226,143, 63,254, 64, 65, 65, 1, 76, 38, 19,138,185,138, 62, 87, 14,247, 50, 87, 84, + 25,132, 14, 19, 63,193, 43,253, 6, 65,163,209,128, 97, 24,239,154, 52, 9, 33,195, 62,249,228, 19,236,222,189, 27,115,231,206, + 69, 73, 73, 73,181,219, 57, 58, 58,162,117,235,214,136,142,142, 70,106,106, 42, 0,212,168,249,164,120, 38, 51, 88, 53,225,225, +225,177,240,251,239,191,247,138,141,141, 21,148,151,151,131,227, 56,180,111,215, 14,175,191,241, 58,246,110,221, 4,121, 72, 55, + 8, 12,142,176,186, 60,220,161,179, 58,216,128, 85,184,123,247, 46, 28, 28, 28, 32,189,215,161, 52, 41,171, 50,189, 11,131,193, + 80,105,174,108,207,181, 97, 53, 73, 18,146,111,179, 1, 37,101, 23,113, 38,225, 23, 88, 76, 38, 4,135,127, 12,163,213, 27,206, +190,111, 66,111,254, 29,230,162,138,202, 93,137,107, 87,104,181,249, 0,136, 93, 41,206,234, 46,242,156,254,225,206,238, 28,107, +191,193,210,106,181,121,114,185,252,235,139, 23, 47, 78,137,143,143,199,143, 63,254, 56,151, 82,138, 62,125,250,224,220,185,115, + 72, 76, 76,252, 90,171,213,230,217, 45, 88, 3,132, 16,161,191,191,255, 79, 75,150, 44,233,227,231,231,135, 45, 91,182,128, 82, + 90,167, 33,146, 72, 36,111,141, 31, 63,222,201,150,197,144, 72, 36,208,235,245,200,201,201,129,217,108,198,214,173, 91,141, 38, +147,105, 66, 90, 90,154,221,230, 10,168,184, 48,182,105,211, 6, 11, 22, 44,200,250,227,143, 63, 98, 0,160, 67,135, 14, 9,173, + 90,181,242, 89,180,104,145,250,244,233,211, 49, 0,208,182,109,219,243,209,209,209,245, 26,199, 37, 59, 59, 59, 43, 34, 34,226, +150,222, 96, 16,121,120,121,234, 92,156, 37,180,164,180,148, 73, 74,186,160,209,106,181,105,117, 43, 84,146,124,229,202,149,166, +106,181, 26,233,233,233, 96,117,101, 96,140, 70, 16,163, 30, 61,218,183,131, 35, 40, 28,192, 65,204, 89, 32, 18, 8, 81, 90, 90, + 6, 0,201,117,137, 86,237,228,110, 51, 87,132, 16, 72,101, 50, 72, 92,100,112,144,201, 42,215, 1,213,255,238, 30,196,209,209, +241,215,101,203,150,201,229,114, 57,190,249,230, 27,200,229,242,200,158, 61,123,234,186,116,233,226,232,237,237,141,136,136, 8, +180,106,213, 10,135, 15, 31, 6, 33,164,214, 11, 35,165,212, 74, 8,233,245,199, 31,127, 76, 60,121,242,228, 75, 10,133,130, 12, + 31, 62, 28,113,113,113,112,112,112,128, 94,175, 71, 97, 97, 33,118,238,220, 73, 88,150,109, 9, 0,254,254,254, 65, 13, 26, 52, + 88, 75, 8,201,186,115,231,206,203, 15,106,254, 48,187,185,162, 84,207,141,148,251, 43, 6,117,233, 29,220,172,123,239,158, 8, + 9,239,129,238,189, 51, 1, 96,174,183,232,206,144, 47,167, 52,221, 26, 28,224,185,242,228,182, 3,159,118,140,239, 54,117,198, +120,207,153,211, 23,221,181,103,152,134,202,139, 45,195, 48,213,102,169, 4, 2, 1, 24,198,190,185,236, 89,142,205,138,123,163, +125,229,107,139,213,236,173,244, 15, 96,108,153, 43, 0, 40, 41, 41, 65, 70, 70, 6, 44, 22, 11,188,188,188, 96,177,152,155,219, + 37, 14,128,101,217,241, 67,134, 12, 33, 6,131, 1, 19, 39, 78,196,252,249,243, 49, 96,192, 0,114,230,204,153,241, 0,222,183, + 87,199,134, 66,161,152, 63,118,236,216,137, 35, 70,140, 64, 81, 81, 17, 14, 29, 58,132,110,221,186,225,251,239,191,247, 57,116, +232,208, 23, 29, 58,116,128, 64, 32,192,254,253,251, 97, 54,155, 83,106,211,146, 72, 36,239, 13, 31, 62,220, 33, 51, 51, 19, 98, +177, 24,173, 90,181, 66, 86, 86, 22,202,203,203,145,155,155,139,207, 63,255, 60,167,184,184,184,171, 90,173,174,211, 92, 17, 66, +152, 78,157, 58,253, 39, 44, 44, 12, 7, 15, 30,196,216,177, 99,119, 59, 59, 59, 15, 42, 44, 44,124,219,104, 52, 46,234,215,175, + 31, 58,116,232,128,148,148, 20,244,239,223, 31,173, 91,183,198,161, 67,135, 48,105,210,164,157, 78, 78, 78, 47,214, 49, 14,214, +141, 35, 71,142, 52,109,213,170, 21,202,203,203, 81, 90, 90, 10,145, 72, 4,119,119,119, 36, 39, 39, 35, 60, 60, 28,147, 38, 77, +194,130, 5, 11, 48, 97,194, 4,174, 87,175, 94, 86,179,217, 44,182, 85, 89, 62, 34,255,136, 42,194,242,242,114,170,209,104,224, +234,234,138,141, 27, 55,226,210,129,189,216,245,222,155,144, 78,157, 15, 74, 41,178,102, 77, 70,247,143,166,162, 93,226,109,104, + 52, 26,172, 94,189, 26, 12,195, 84, 86,196, 86, 7,165, 20,197,197,197,136,142,142,198,185,115,231,176,122,245,106,124,243,205, + 55,149,217, 90,145, 72,132,174, 93,187,226,185,231,158,195,141, 27, 55,176,108,217, 50,184,186,186,214,168,199, 83, 61, 66,160, +194, 49, 86,125,174, 10,199,113,221, 91,183,110, 45, 40, 43, 43,131,193, 96,128, 86,171,197,157, 59,119,224,232,232, 8,117,110, + 6,218, 52, 44, 67, 14, 49,225,202,197,235, 44, 17,136, 46,214,246,102,182, 74, 29,147,201,132,164,164,164,138,210,247,240, 57, +149,157,159,239,245,249,128,193, 96,192,145, 35, 71,168,163,163, 35,156,157,157, 73,109,109,239,156,213,184,251,240,137,196, 62, +175, 13,236, 46,217,127,228, 71, 88,140, 86,148, 25,221, 81,110, 48,161, 84, 47,130,201,161, 55, 8, 57, 14, 70,224,128, 14,209, + 13,113,232,143, 27, 6,214, 98,222, 99,215,167, 67, 89, 8, 60,155,131,189,155,244,231,251,233,239,191,171, 23, 59,200,192,218, +217, 68,104, 67, 42,149,206,255,250,235,175,223,251,233,167,159, 92,222,126,251,237, 8,219,197, 98,201,146, 37,165, 82,169,116, +126,189,196, 30,224, 94, 73,244,107,177,177,177,159, 79,159, 62, 93, 25, 29, 29,141,132,132, 4,204,153, 51,103,103, 78, 78,206, +111,117,237,111, 50,153, 84, 94, 94, 94, 40, 43, 43,131, 68, 34, 1,203,178,200,205,205, 69, 70, 70, 6, 28, 28, 28,112,246,236, + 89, 83, 80, 80,208,150, 71,137,205,158, 14,237, 85, 43, 42,235,131,163,152,139,153,250,209,232, 48,131, 65,223,184,180,180,212, + 42, 20, 10,133, 14, 34,214,238,177,175, 0,192, 98,177,236, 56,126,252,248, 11, 29, 59,118,116,184,158,116, 17,230,226, 98, 88, + 74,138, 32,102,173,240,140,137, 6, 99, 50,128,152, 44, 80, 70, 81,232,139,156,113,226,194,109,139,197, 98,169, 51, 43,104, 51, + 88,140, 64,112,127,191, 43, 87, 23, 72,100, 21, 6,171,234,114, 82, 71,187,150,159,159,159, 83,124,124,124,143,150, 45, 91,130, + 82,138,249,243,231,195,100, 50, 73, 44, 22, 11, 44, 22, 11,204,102, 51, 74, 75, 75,177,121,243,102,252,252,243,207, 39,220,220, +220,234, 44,150,160,148, 90, 85, 42,213,187, 28,199,249, 90,173, 86,179,143,143,143,120,195,134, 13,144, 74,165, 96, 24, 6,209, +209,209,144, 74,165, 70,133, 66, 97,190, 23,131,229,235,175,191, 22,142, 26, 53, 74, 92,157, 94,139, 54, 17, 31,176,212,171,139, +196, 33, 40,216,205,167, 57, 66,194,123, 0, 0,158,235, 55, 18, 33, 97, 1, 40,206, 75, 10, 49, 25,211, 7, 10, 72,129,199, 47, +167,212,201,157,156,154,142, 40,200, 58,114, 29,192, 79,213,233, 61,244,153,114, 28,122,244,232,129, 94,189,122, 85, 54, 7,250, +250,250,194,100, 50,193,106,181,218,109,174, 0,192, 54,136,232,140, 25,132,193,116, 96,101, 91,151, 28, 0,149,233,201,226,226, + 98,100,102,102, 34, 61, 61, 29, 64,197,121,138,163,246,221, 93, 43, 20, 10,199,144,144,144, 55,154, 52,105,130, 67,135, 14, 33, + 41, 41, 73,125,244,232, 81,101,155, 54,109,160, 82,169, 70, 40, 20,138, 79,178,179,179,237, 30, 80,217,199,199,199,185, 83,167, + 78,239,141, 24, 49, 2, 41, 41, 41,152, 52,105, 82, 65, 78, 78,206,214, 29, 59,118,140,250,239,127,255,203,116,233,210, 5,185, +185,185,248,225,135, 31,216,179,103,207,126,229,225,225,241,121,109,122, 28,199,165,102,103,103, 55, 48, 24, 12, 40, 40, 40,128, +109, 72,134, 61,123,246, 96,239,222,189,218,162,162,162,174,217,217,217, 55,237,137, 45, 40, 40,200, 37, 38, 38,198,239,250,245, +235, 88,183,110, 29,204,102,243,212,180,180, 52,179,155,155,219,154, 37, 75,150, 76, 15, 13, 13,245,236,220,185, 51, 58,116,232, + 0, 74, 41,182,111,223,142,207, 62,251,108,167,163,163,227,160,171, 87,175,214,236, 6, 42, 24, 56,115,230,204,153,222,222,222, + 47,191,250,234,171, 76, 76, 76, 12,206,159, 63, 15,150,101,209,163, 71,143, 74,115,181,103,207,158, 95,247,236,217, 51, 24,128, + 88, 38,147, 73,235,202, 94, 1, 0, 33,164, 63, 0, 91,134, 64, 71, 41,173,179,111,225,223,141,193, 96,192,245,235,215,225,231, +231,135,176, 54,237, 49,233,242, 29, 28, 63,121, 10,148, 82,116,188,114, 7,101,101,229, 88,185,114, 37, 18, 18, 18, 32, 16, 8, + 16, 26, 26, 90,167,166,217,108,198,205,155, 55,145,151,151,135, 1, 3, 6, 96,216,176, 97,248,242,203, 47, 97, 54,155, 49,101, +202, 20,220,189,123, 23,203,151, 47,199,205,155, 55, 33, 20, 10, 33,147,217,217, 74,245, 24,212,230, 69,254,141,216,213, 11,212, +106,181,130,227, 56,100,103,103,227,220,185,115,184,115,231, 14,156,157,157,161,183,114,220,119,167, 19, 57,134,136,212, 44,197, + 31,212,138,143,106,211, 41, 47, 47,167, 22,139,133, 8,133, 66,156, 60,121, 18,183,110,221,130,107, 24,173,204, 94, 89, 44, 22, + 24,141, 70,232,116, 58,136, 68,162,178, 83,167, 78,165,157, 63,127, 62, 68, 40, 20,214, 88, 5,150, 27, 46, 88,181,255,192,193, + 15, 98,162, 27, 71,244,236,242, 25,118,236,248, 20, 69, 37, 37, 40, 55, 10, 81,166, 55,163,220, 64,161,112,105,136,182,205, 91, + 34,175,192,132, 27, 87, 18,178,242,197,158,117,182,193, 88, 88,166,248,215,197,111,187, 61, 63,120, 44,164,254,157, 97,186,179, + 1,156, 94, 91,105,176,196, 82, 23,184,122, 7,162,164, 76,143, 19,201,169,176,176, 76,181,149, 47,213,145,154,154, 90,162, 80, + 40,102,159, 56,113, 98,158,173,242,231,216,177, 99,184,125,251,246,236,236,236,236,234,115,181, 53,160, 80, 40,122, 2, 88, 11, + 64,234,235,235,171,125,251,237,183,229,189,122,245,146,118,233,210, 5, 2,129, 0, 23, 46, 92,192,219,111,191,189, 79, 38,147, + 13,178,167, 50, 79, 34,145,104,139,139,139,221, 28, 28, 28, 96,177, 88,144,147,147,131,148,148, 20,232,245,122,104,181, 90, 16, + 66,178,143, 28, 57, 82,175, 17,246,129, 63,135, 95,168,138,173, 42,232, 65,234, 89, 69, 8,149, 74,213,165, 79, 92,151,166, 95, + 45, 88, 4,189,174, 12,103, 79,237, 64,225,221,124, 44, 91,177,165,153, 74,165,234, 98,111,103,226,172,172,172,245, 91,182,108, +153,216,162, 73,147,150,161, 1, 1,184,148,126, 7, 98,142,133,132,101, 33, 48, 25,192,176, 70,168,154, 82, 48,140, 12,218,156, + 82, 44,221,119,232,114, 86, 86,214,250,186,116,149,241,207, 99,104,122, 49, 8, 33,216,215,169, 49,164, 50, 25,196, 50,103,116, +216,124,164,210, 84,165,205,253, 16, 98,103, 25, 60, 90,215, 61, 48,166, 86,171,213,133,133,133,157,191,118,237, 90,235, 70,141, + 26, 97,198,140, 25,200,204,204, 4,165, 20,185,185,185,134,188,188, 60,117, 65, 65, 65, 26, 33,100,107,118,118,246, 10,123,138, + 26, 0,128,227, 56,223,237,219,183, 3,128, 24, 0, 14, 30, 60, 8,133, 66, 1, 55, 55, 55,148,148,148, 96,248,240,225, 14,211, +166, 77, 3, 0, 92,184,112, 65, 36,149, 74,107,212,186,114, 49,229,235,194, 18, 90,200,148, 39, 12,202,183, 94,108,214,189,119, + 22,158,235, 55, 2,251,119,172,196,161,189, 7,224, 45,186,147,202, 58,150,237,206, 75,205, 47,213,148,135,255,208,184,213, 40, + 65,118,217,222,101,227, 6,120, 8, 85,114,110,227,228,239,107, 31,184,151, 82, 10,129, 64,240, 80,135,246,250,154,171,170, 76, +159, 78, 57, 2, 66, 66, 68,194,139,234,156,204,222, 10, 63, 85,229,205, 69, 70, 70, 6, 50, 51, 51, 17, 22, 22,134, 59,233,183, + 33,145,136,107,189,153,172, 18,231,171,253,250,245,115, 49,153, 76,216,182,109,155,149, 16,210,111,251,246,237,231, 91,180,104, + 33,236,214,173,155,203,202,149, 43, 95, 5,176,162, 30, 97, 58,203,100, 50,177,197, 98,193,170, 85,171,160, 86,171,187,228,228, +228, 36, 43, 20,138, 31,222,121,231,157,239,163,162,162,194,146,147,147,111,232,245,250,177,217,217,217, 73,117,137, 21, 21, 21, +189, 30, 23, 23,183,145,227,184,160,216,216, 88,231,161, 67,135,186, 82, 74, 17, 21, 21,133, 93,187,118,101,103,103,103,219,211, +135, 9, 0,144,158,158, 94,122,252,248,113,109,227,198,141,253,228,114, 57,196, 98,241, 92,185, 92, 62, 75, 38,147,125,213,191, +127,127,207, 13, 27, 54, 96,211,166, 77,112,118,118, 70,106,106,106,246,181,107,215, 22,250,251,251,127,107,207, 8,238, 9, 9, + 9,169, 0,134,182,105,211,230,179,111,190,249,102, 42,195, 48,175,237,219,183,175,114,172, 51,155,185, 10, 14, 14,126,125,227, +198,141,195,236,141,249, 30, 78,182, 33, 7, 8, 33, 85,251,231,254, 83,250,102, 89, 76, 38, 19,188,188,188,144,151,151,135,220, +220, 92, 4, 6, 6,162,125,251,246,176, 88, 44,248,109,199, 78, 28, 63,126, 28,148, 82,120,123,123,195,213,213, 21,137,137,137, + 0, 80, 91,245,176,197,108, 54,195,211,211, 19, 69, 69, 69, 72, 76, 76,132,175,175, 47, 38, 76,152, 0,147,201,132, 13, 27, 54, +224,226,197,139, 96, 24, 6, 62, 62, 62,112,113,113,193,197,139, 23,235,210,228,121,128, 58, 13,150, 64, 32, 56,124,248,240,225, +193,205,155, 55, 23,222,184,113, 3, 55,110, 84,252,191,233,245,122,171, 80,128, 77,218,164,109, 67,107,218,151, 16,210,180,234, + 88, 25, 18,137,100,233,224,193,131,199,142, 28, 57, 18,227,198,141, 3,195, 48,248,233,130, 17, 25, 25, 28,204,102, 51,180, 90, + 45, 46, 93,186, 68, 91,183,110, 77, 56,142, 51,119,237,218,245,173,132,132,132, 54, 2,129,160,164, 38, 77,186,113, 35,235,221, +236,249, 1, 75,150,174, 56,249,198, 27,111,120, 62, 63, 96, 9, 46, 92,189,130,162,242,138, 86, 38,133,183, 51,218, 54,250, 16, +185, 5, 70,236,221,189,163,144,179, 26, 94,164,151,215, 89,106,139, 19, 0,242,116,122,223, 31, 86,111,153,191,110,243,214,183, + 70,191, 62, 84,218,181,235,235, 16,149, 94, 2, 91,144, 0, 69,120, 44,136,192, 9,103, 18, 47, 32,233,102,166, 65,103, 16,172, + 40, 49,235, 63,172, 75,179, 42, 12,195,124,183,124,233,162, 47,246,236, 63, 34, 48,155,205,232, 19,215,131,101, 24,230,187,218, +190,139,234, 52,157,156,156,214, 37, 38, 38,122, 26,141, 70,100,101,101,133, 68, 68, 68,128, 82,138,244,244,116, 44, 92,184,208, +186,107,215,174, 37, 82,169,116, 82, 77,119,136, 15,106, 90, 44,150,181,171, 86,173,250,248,221,119,223,149,230,230,230,226,218, +181,107, 40, 47, 47,135,217,108, 70, 66, 66,130,193, 98,177,212, 90, 49, 87, 83,156, 54,131,229,233,233,169,108,215,174,157,173, +138, 80,201,113, 28, 60, 60, 60, 84,109,218,180, 57, 15, 0,110,110,110,213, 86, 17,214,246,121,102,101,101, 29, 13,111, 24,136, + 85, 43, 22,192,108, 54, 66,163, 78, 7, 0,228, 23, 20,163, 54,115,245,208,111,137, 82, 42,151,203, 7,125,179,112,225,255,177, +119,230,113, 81, 85,239, 31,255,156,123,103,135, 1, 17,100, 27,192, 61, 77, 16, 69, 64,113, 43,113, 43, 51,115,169,204, 37,151, + 44, 45,247,114,203,165,114, 23,210, 50,119, 77,203,180, 82,203, 45,203, 29, 83,220, 21,217, 20, 81,113,151,101, 64, 64,100, 17, +102,159,123,126,127,192, 16,203,108, 40,125,179,126,247,253,122,241,154,185,219,231,158, 59,119,152,249,204,115,158,243,156, 11, + 99, 71, 12,243,122,169, 91,119,164, 93, 78,132, 54, 47, 7,140,209, 0, 33, 21,160, 36, 91,134,135, 15,159, 96,201,193, 99,217, + 42,181,186,154,105,181,212,206,242,110, 65,103, 39, 72,228,114,136,203,162, 86,166,109, 98,185, 19,132,142,114,176, 34,145,185, +100,248,106,154, 37, 37, 37,111,141, 25, 51,230,242,193,131, 7,235, 14, 25, 50, 4,125,251,246,141,207,207,207,239,154,151,103, +187,139,205,146, 38,195, 48,217,189,123,247,246,208,106,181,134, 65,131, 6, 9,114,115,115, 97, 26, 98, 95, 84, 84,132, 67,135, + 14,225,197, 23, 75,103,157,185,122,245, 42, 2, 2, 2, 44,106,126, 48,227, 74, 6,128,133, 83, 6,250,126,117, 33, 49,107, 18, +128,200,198, 47,248,226,248,145, 99, 56,125,252,220,204,246,129,220,170,215,135,182, 91, 32,237,246,206,244,128,144, 15, 88,185, +179, 55,182,238,217,205, 38,199,125,183, 88, 93,156,212, 4,192,116, 75,237, 36,132,148,206, 84, 95,193, 92, 9, 4, 2,148,148, +148,216,101,174,172,189,151, 40, 40,173, 87, 72, 62, 27, 57,101, 96,135, 63,119, 92,116,114,116,116, 44,207,249,105,218,180, 41, + 4, 66, 1,190,223,187,186, 56, 63, 63,247,115,123, 52, 29, 29, 29, 39,116,237,218, 21,119,238,220,193,229,203,151,119, 43,149, +202,203, 10,133, 98,247,221,187,119, 7,181,107,215, 14,191,252,242,203, 4, 88, 48, 88,150, 52, 77, 21,235,203,162,189,121, 0, +160, 84, 42, 19, 1,216, 44, 57, 95, 85,179,172, 88,104, 39, 0,240,247,247, 79, 27, 48, 96,128,179,193, 96, 64,153,121,118,179, + 32, 99, 86,147, 82,202, 41, 20,138,149, 49, 49, 49, 17,109,218,180,193,224,193,131,123,198,198,198,246, 12, 10, 10, 66,147, 38, + 77,240,248,241, 99, 68, 71, 71,255,196,113,220, 71,153,153,153,106,107, 63,162, 44, 93,123, 76, 76,204, 45, 0,195, 67, 66, 66, +222, 17, 8, 4,112,118,118,102, 51, 50, 50,216,163, 71,143, 2,192,152,157, 59,119, 90,236,238,176,245,153, 92, 21,123,114,174, +106,170,105, 15, 85, 53, 9, 33,115, 70,140, 24,177,225,195, 15, 63,148,182,107,215, 14, 5, 5, 5,229,166,255,224,193,131, 40, + 27,137, 13, 55, 55, 55,220,186,117, 11,123,247,238,213, 22, 20, 20,172, 16,137, 68,145,214, 52,135, 15, 31, 94, 73,211,100,222, +246,239,223, 15,211, 32, 18, 55, 55, 55,220,188,121, 19,123,246,236, 81, 23, 20, 20, 44,215,106,181, 75,255,206,107,255,175, 97, +211, 96,229,229,229, 77,158, 53,107, 86,215,247,223,127,223, 77,165, 82,177,245,234,213,131, 82,169, 52, 28, 57,114, 36,175,168, +168,104,114, 77, 78,118,238,220,185,241,125,250,244, 89,177,121,243,230,141, 27, 55,110,236, 50,120,240, 96, 12,239,221, 27,227, + 58, 56, 66,163,209,128, 16,130, 35, 71,142,220, 56,113,226, 68, 99,145, 72,164,153, 59,119, 46, 7,160,218, 4,177, 85,201,189, +242,251, 77,207, 86, 3,186,172, 90,189,110, 87,112,104,251, 6, 13, 27, 53,148,116,242,171, 3,157,222,136,135,217,143,112,242, + 92,178,230,102,114, 98, 26,167,211, 14,204, 78,182, 93,197, 29, 0,146,147,169, 14,192,228,128, 0,231,249, 75,215,111, 91,255, +227,206,221, 3, 70, 15,126, 83, 16,210,170, 43,238,101,237,195,169,216, 19,134,199, 69,116,111,145,150, 29,155,156, 92,104,115, + 42,159,170,164,167,167,171, 95,104,228, 83,160, 86,171, 93,239,221,187,135,135,153,202,194,244,244, 12,181,237, 35, 43,195,113, + 28, 52, 26, 13,238,220,185,131, 99,199,142, 33, 62, 62, 30,103,207,158,213, 29, 61,122,116, 51,195, 48,139, 45, 21,154,180, 68, + 96, 96,224,151,223,125,247,221,219, 70,163,177, 73,120,120,184,212,213,213, 21,185,185,185,136,137,137,209, 38, 36, 36,220, 9, + 12, 12, 92,106, 91,197, 60, 94, 94, 94, 24, 56,112,160, 71, 72, 72,136,135,105,196,160,159,159, 31,222,122,235, 45,143,160,160, +160,242,117,245,235,215, 55, 91, 51,203, 18,101, 17, 44,140,252,224, 19,168, 84, 79,112,225,220,126,228,231,229,226,252,165, 20, +212, 36,130, 5,148,142,244,244,246,246,110,191,104,197,170, 61,189,194,218,250, 55, 87,120, 73,220, 26, 53,132,163,187, 23,242, + 30, 61,194,133,196,219,250, 53, 81, 39,147, 84,106,181, 93, 83,229, 0,165,247,200, 52,202, 45, 96,210, 76, 48, 12, 83, 62, 11, +130,105,187,115,104,103, 48, 2, 33,140, 20,208,233,116, 54,163,119, 74,165, 50,221,199,199,231,173,137, 19, 39,254,185,101,203, + 22, 38, 60, 60,188,205,239,191,255,254, 76,147,230,166,167,167,251, 2,128, 66,161, 40,116,118,118, 22,188,247,222,123,208,235, +245, 40, 41, 41, 65, 97, 97, 33, 30, 61,122,164,249,248,227,143, 37, 0, 32, 18,137,244,189,122,245,178,249,249,177,124,103,186, +122,202, 64,223, 85,245,132,247, 6, 21,228, 92,110, 92, 79,120,239,110,251, 64,110,213,242,157,233,234, 47, 63,172,187, 40, 35, + 39, 58, 69,249,228,200,183, 91,247,236,102, 71, 12,120,203,232, 45,191, 57,179,158, 31,118,118,237,107,187,189, 85, 13,214,211, + 70,174,170,146,155, 68,227, 27,119,168, 19,209,117, 96,187,217,139,166,126, 45,175,231, 94, 15, 6,131, 1,119, 83,239, 96,243, +158, 53,197, 69,154,199,139, 31, 37,211, 88,123,180, 26, 55,110,220,136,101, 89,236,219,183, 15, 0, 76,165, 13,214, 28, 58,116, +104,208,208,161, 67, 81,191,126,253,128,134, 13, 27, 74,172,149,209,168,138, 41,226, 95,211,110,116, 91, 16, 66,238, 36, 38, 38, +250,248,248,248,144, 29, 59,118, 60,209,233,116,243,106,170,225,229,229,245,245,129, 3, 7, 94,162,148,246, 10, 14, 14, 70,131, + 6, 13, 0, 0,201,201,201, 56,125,250,244,246,140,140,140,145,246, 70, 84,109, 64, 9, 33, 40, 44, 44, 52,213, 53,209,201,229, +242,167,213, 45,169, 16,185,178,123, 64,204,255,138,140,140,140, 31, 61, 61, 61,143,204,155, 55,239,139,166, 77,155,126, 52,102, +204, 24,182,121,243,230, 40, 40, 40,128,179,179, 51,188,189,189,145,145,145,129, 31,127,252,209,152,157,157,189,153, 97,152,249, + 74,165,210,234,168,110,107,154,117,235,214,133,183,183, 55,210,211,211, 77,154, 27,245,122,253,130,156,156,156,255,249,100,201, +255,118,136, 61,255,164,101,101, 26, 86, 26,141,198,174, 64,105, 84, 43, 47, 47,111,114, 86, 86, 86,245,242,237, 21,197,173, 56, +220, 62,125,250, 52,205,205,205,221,168,211,233,186,244,237,219, 23,131, 7, 15,198, 27,111,188,129,193,131, 7,179,166,168,213, +190,125,251,170, 21,202,179,166,105,154,236,153, 97, 69,125, 40,165,173, 1, 16,194, 48, 54, 39,123,182,199,137, 7, 7, 56, 55, +145, 73,184, 77, 50, 49,215, 89,165,101,206,168, 52,204,232,248,228, 66,139, 19,140,218,163, 89, 54,177,243,207, 0,160,209,211, + 97,105,105,202, 40,107,251,155,211, 44,235, 34,220, 65, 8, 97, 41,165,171, 41,165, 59,188,189,189,239,216, 19,118, 55,163,201, + 0,165,197, 69,143, 29, 59,246, 5, 33,100,152, 70,163,113,151, 72, 36, 57,148,210,159,122,244,232,177, 96,213,170, 85,214,116, + 57, 75,237,244,243,243,219,166, 80, 40,154, 1,168,150,115,101,122, 52,173, 47,171, 71,116, 59, 61, 61,125,168,181,107,175, 72, +211, 38,190, 71,154, 52,242,121,165, 73, 35, 5, 0,224,206, 61, 37,238,220,203, 56,122,251, 78,186,197,146,149, 86,223, 75,228, +175,201,158, 73, 89, 41, 6,106,199,100,207, 85, 53, 91,182,108, 25,203,178,150, 39, 18, 54, 7,199,113,202,164,164,164,242,249, + 46,172,181, 83,161, 80, 12,241,243,243,139, 84, 42,149,123,210,210,210, 62,177,247, 28, 54, 52, 59, 50, 12,115,144,227, 56, 89, +197,245, 12,195,100,155, 76,152,151,151, 87, 3,137, 68, 82, 41,201,221,154,230,210, 57,129,159,119,234,242,210,128,179, 39, 79, +239,157,177, 56,105, 97,197,109, 19, 6,184,142, 26, 58,126,242,210,109,107, 87,206, 88,179, 55,175, 82, 73, 13,115,154,173, 91, +183,142, 6,208,172,108,187,213,235, 52, 26,141,202,164,164,164, 74,195,202,237,253,229,237,214,154,180,117,113,172,183, 80,171, +211, 5, 49, 4, 84, 40, 18, 37,230,231,231,126,110,206, 92, 89,210,244,245,245,141,124,225,133, 23, 38,223,190,125,123,123, 90, + 90,218,251,166,245, 10,133,226,171,134, 13, 27,142, 79, 75, 75, 91,147,150,150, 54,189,234,113,150, 52, 27, 55,110,236, 28, 20, + 20,244,120,254,252,249,204,220,185,115, 17, 19, 19,227,154,158,158,110,247, 15, 60,107,215,222,160, 65, 3, 47,169, 84,186,149, +227,184, 38, 70,163,113,237,157, 59,119,236,154,124,187,170,102, 64, 64,128, 40, 63, 63,127,178,159,159,223, 20, 79, 79, 79, 19, + 69,177,168, 0, 0, 32, 0, 73, 68, 65, 84,207,135, 15, 31, 62, 72, 77, 77,141,200,202,202,250,206, 94,115,101,207, 61, 10, 9, + 9,209, 0,165,211,137,217,147,111,245,191,136, 54,253,221,154,190,190,190, 77, 56,142, 91, 28, 20, 20,244,246,168, 81,163,200, +181,107,215, 16, 21, 21,133,251,247,239,239,165,148,206,182,212,165, 91, 83,205, 35, 71,142,208, 7, 15, 30,236,100, 24,230,179, +244,244,116,179,223,115,124, 4,203, 14,202,190,216,254,150, 63, 0,129,182,246,121,253,245,215,155,182,107,215, 46,186, 85,171, + 86, 92,171, 86,173,138,106, 67,243,239,104,167,233,175, 75,151,122,142,181,173,249,119,180,243, 41, 53,153,103,252,251,199,175, +253,133, 23, 94,160, 40,243,112,207,193,235,201,107,150,253,173, 95,212, 74,113,241,216, 59,223,108,250, 50,208,167,234,182,121, + 19,235, 58,253,185,239,205,165,243, 38,214,117,250,167,219,249,119,104, 2, 96, 44,172, 39, 79,163,233,231,231,183,161,127,255, +254, 70, 63, 63,191,141,207,243,181, 3, 32, 13, 26, 52,144,252, 27,238,209,191, 77,211,211,211, 51,212,219,219,251, 15,111,111, +239, 63,124,124,124,218,213,178,230,111, 94, 94, 94,193,255,196,181,255,215,254,158,106,178,231,218,100,255,254,253,183, 1,132, +247,237,219,215,131,101,217,218,154,164,243,111, 35, 58, 58,199,122,221,136,127, 55,181, 17,186,255, 71,185,121,243,230,127, 98, +244,201,127,141,143,230, 92, 86, 2,248,164, 93,247,234,219,202, 74, 51,204,232,102, 71,183,224,191, 17,106, 33,106, 67,203,190, +165,106, 74,106,106,234, 71, 10,133, 98, 74, 77, 70, 31,254, 19,148, 93,159,221, 93,159, 60,246,147,149,149, 21, 11,224, 13,155, + 59,254,195,154,255,223,249,199, 13,150,137,223,127,255, 61,251,159,110, 3, 15, 15, 15,207,191,129,231,221, 92,241,240,240,148, + 86, 74, 53, 59,109, 12,173, 65,223,106,149,161,173,118, 97, 75,159,215,228, 53,121, 77, 94,147,215,228, 53,121,205,255,158,166, + 45,237,154,248,143,231, 25,187,146,220,159, 90,252, 63,144, 84,200,107,242,154,188, 38,175,201,107,242,154,188,230,223,175,249, + 95,163,118,198, 53,243,240, 88, 97,245,104,226,179,122, 52,241,249,187,246,231,225,225,225,225,225,121,222,120,110,114,176,106, +139,208,208,208, 0, 74,233, 80, 66,200,219, 0, 64, 41,221, 69, 8,217, 22, 27, 27,107, 87, 5, 90,153, 76,150,165, 86,171, 61, + 0, 64, 42,149,102,171,213,106,239, 10,155, 73,133, 63,160,116,174, 77,211,168, 53,139,161,192,198,141, 27,103,105, 52, 26,123, +230,215, 75, 32,132,196,115, 28, 23, 39,151,203,207,220,188,121, 51,197,158, 54, 3, 64,207,158, 61, 63,114,116,116,252, 92,165, + 82, 45, 61,114,228,200, 74,123,143,123, 90, 8, 33, 97,126, 10,175, 31,244, 6, 29,151,149,157, 55,135, 82,106,118, 26,158,117, +239,147, 8, 1, 41, 45, 26,185,238,125,178,108,220,247,116,150, 53,221,154,238,111,165,125,161, 66,161,112,130,167,167,231,107, +233,233,233,177, 0,102, 80, 74,249, 42,196, 60, 60, 60, 60, 60,255, 19,106,100,176, 58,132,184, 53, 39,156,110,186,144,165, 47, +233,141,228, 52,101, 68,203,206,199, 61,178,219, 4,152, 67,161, 80,248, 17, 66,194, 41,165,254, 12,195, 92,225, 56,238,168, 82, +169,124, 84, 19,141,144,144, 16, 63, 0,131, 1, 12,105,223,190,125,224,216,177, 99,241,194, 11, 47, 64,173, 86, 35, 38, 38,102, +230,207, 63,255, 60, 51, 36, 36, 36, 9,165, 83,202,236,136,139,139, 75,179,164,165, 86,171, 61, 76, 94,137, 16,226,241,246,219, +111,199,144,191, 38,225, 37,166,201,101, 41,165, 23, 0,156, 39,132,156,219,177, 99, 71,250,139, 30,178,246, 13,253,220, 95, 63, + 20,251, 96, 78, 85, 77,141, 70,227,145,240,199, 94, 80,131, 17, 79, 50, 82,209,244,205,193,229,219,162,222,236, 14, 90, 92, 8, +161, 68,148,208,245,247,115,241, 0,226, 82, 83, 83,227,235,215,175,159, 98, 77,179, 42,109,218,180, 89, 48,111,222,188,122,125, +251,246,157, 0,192,162,193,170,137,166, 37, 8, 33,146,246,161,173, 79,252,177,123,135, 20,132, 65,255, 1,111,111, 39,132, 12, +167, 85, 38,147, 94,247, 30,241, 36, 44,166,143,253,120, 44, 11, 0,235, 86,172,159,177, 98, 24, 89,245,241, 79, 52,203,199,199, +167, 43,165,116, 70,153,222,210,140,140,140, 19,235,222, 35,158, 96,240,233,216,143,199, 18, 0, 88,191, 98,253,244,117,239,145, +149,227,126,160, 53, 42,112, 71, 8, 25, 55,114,228,200, 85,139, 23, 47,102,203,138,240,245, 10, 8, 8,104, 78, 8, 9,160,148, +242,201,193, 60, 60, 60, 60, 60,127, 59, 54, 13, 86, 96, 96, 29, 23, 25, 67,167,200,196,116,112,175,151, 2, 26,189,241, 90, 71, +210,184,105, 99,164, 92, 75,105,114,226,228,165,247,186,182,115,186,167,210,146, 29, 42,142, 44, 79, 74,178, 62,127,216,231,163, +137,222, 96, 40, 61,167, 64, 0,227,214,163,190,123,123,244,232,209,104,212,168, 81, 8, 14, 14, 70,108,108,108,215,157, 59,119, + 78,246,243,243,187,164,215,235, 15, 74, 36,146,104, 91, 21,142, 67, 66, 66, 34,125,124,124,102, 76,157, 58,149,132,134,134, 66, + 34,145,148,111,147,203,229,232,222,189, 59,186,119,239,142,172,172,172,192,232,232,232,192,109,219,182, 69,132,132,132, 44,141, +139,139,155,105,207, 11,244,249,231,159,135,152, 89,125,132, 16,114,155, 97,152,184, 22, 45, 90,164,191,224, 45,127,209,211,221, +109,255,151,139,231, 3,128, 69,227,242,219,171, 29, 1,160,146,193,210,229, 62,132,212, 73,158, 32,146,201,226, 1,196, 1,136, +175, 95,191,126,130,189,154, 0, 16, 30, 30, 46,113,114,114, 34,148, 82,180,107,215,206,245,213, 87, 95, 77, 97, 24,102,229,161, + 67,135,214, 87,220,175, 38,154, 54, 8,155, 55,125,188, 40,247, 78, 2,174,159, 59,138,126, 33, 62,210,248,171, 55, 22, 1,216, +109,237, 32, 66, 24,102, 75,108,189,153, 31, 3,147, 57,142,251,252,218,181,107, 93, 0,192,223,223, 95, 12,224,196,214,152,186, +189, 71,118, 44,120,234, 50, 11,132, 16, 17,203,178,107,183,110,221,250,193,240,225,195,241,224,193, 3,156, 57,115, 6,114,185, + 28, 11, 22, 44,104, 56,117,234,212, 8, 0, 53,154,125,128,135,135,135,135,135,231,105,176,106,176, 94, 10,113,140, 25,208,165, +105, 72,223, 87, 59, 50, 47,248, 7, 64, 36,113, 40,223,214, 42, 56, 24,173,130,131,201,152, 49, 69,141, 19,227, 19, 63, 59,252, +231,197,217, 47,133, 56,198,157,142, 43,110,103, 73,207, 96,128, 32, 98,241, 54, 0,192,214, 77, 67,217,148,148,148, 70, 50,217, + 95,197,162,187,116,233,130, 46, 93,186, 48, 17, 17, 17, 97, 39, 78,156, 8,219,177, 99,135,206,199,199,103, 69, 70, 70,198, 78, + 43,205,156,177,115,231, 78,194,178, 44, 88,150,181,184,147,151,151, 23,122,246,236, 9, 47, 47, 47, 50,125,250,244, 25, 0,204, + 26, 44,169, 84,154, 77, 8,241, 0,128,186,117,235, 26,231,205,155,151, 72,203, 0, 0,142,227, 46,176, 44,123,158, 16,114, 97, +207,158, 61, 25, 77,125,100, 62, 78, 18,135,163, 27, 55,172,134,190,240,161,171,165,243,151, 40,211, 75,159, 84,169, 60, 45,118, +116, 72, 16, 59, 58,198,139,229,242, 56, 0,241, 0, 18,236,213, 4, 74,205,149, 76, 38, 59,181, 97,195,134,186, 0, 48,113,226, + 68,151,146,146, 18,151,209,163, 71,207, 4, 80,110,176,106,162,105, 9, 66,136,203, 75, 29, 66,239,175,138,252,194, 57, 56,172, + 51, 46,236, 90,135,252,252, 98, 20, 23,149,128,227,184,106, 51,255,142,251,129, 62, 92,247, 62, 89,182,238,155,245,159, 18,134, + 33, 65,175,206,192,171,174,116,146, 66,161,184, 74, 8, 17,138,197, 98,147,174,192,215,215, 87,209,188,121,155,101, 47,116,126, + 17,235, 87,174, 5,229, 56, 10, 96,153,189,209, 43, 66,136,135,147,147,211,190,163, 71,143,134,181,109,219, 22, 23, 46, 92,192, +157, 59,119, 48,126,252,120,237,248,241,227, 69, 35, 70,140, 32, 83,166, 76,153, 72, 8,217, 69, 41, 61,251, 52,215,207,195,195, +195,195,195, 99, 47, 86, 13,150, 84,100,108, 59,111, 85, 34,140,197,183, 65,245,169,160,186,172,106,251, 56,184,248,161, 69,144, + 39, 28,196,238,204,149,107,223,180,173,184,205,214, 8, 3,147,185,218,245,181,162,165,170, 56, 83, 4, 0, 50, 71,111,221, 91, + 83, 50,174,182,109,219, 22,238,238,238,162,115,231,206, 77, 1, 80,110,176,204,104, 18,237,229, 88, 92,127,163, 19,154, 94,207, +131,131,131, 3, 76, 95,220, 38, 82, 82, 82,112,234,212, 41, 60,120,240, 0, 77,154, 52, 1,254,202,161,170,166,169, 82,169,188, +122,245,234, 21,189,116,233,210,151, 35, 35, 35,175,108,223,190, 61,156, 82,106,118,126,170,192,250,117, 92,196, 84,120,116,211, +250,111,132,208, 22,187,222,184,116, 22, 45, 95,251,208,108, 59, 27,189,241, 22,198,230,151,118, 61,254, 26,160,128,212, 89, 14, +137,220, 41,161,231,145, 75,229,145, 43, 0, 9,246,106,118,235,214,237, 61,129, 64, 48, 7, 64,157,111,191,253,214,197,197,197, +133,217,183,111,159,110,195,134, 13, 69, 34,145, 72, 75, 8, 89,242, 52,237,180,134,144,101, 23,126, 53,111,186,179, 3, 99, 64, +252,193,159,144,254, 32, 21,151,111,101,232,127, 57,157,108,212,234,141,163,204,189,158,227,190,167,179,166, 14,144,252, 16,155, +217,228,143, 62,115,199, 55, 91,212,215, 19, 58,157,110, 83, 78, 78, 14, 70,143, 30, 13,142,227,208,185,115,231, 78,148,210,140, + 73,147, 38,161, 73,147, 38,216,244,251,205, 18, 65,225,197,240,159,255, 44,140, 53,167, 89, 21, 66, 72, 96,131, 6, 13,142,158, + 56,113,194,211,199,199, 7,209,209,209,200,202,202,130,183,183, 55,198,143, 31, 47,142,140,140,220, 90, 88, 88, 56,112,241,226, +197,210,164,164,164, 29,132, 16,191, 50,207, 92,235, 35, 96,120, 77, 94,147,215,228, 53,121,205,191,133,182, 0,220, 1,228, 0, +184, 84,101, 25,101,207, 97,102, 57, 23,165,223,249, 21, 39, 47,207, 69,105,254,180, 59, 0, 35,128, 24, 0, 53,158, 83,216, 22, + 2, 0, 32,132,116, 1, 16, 13, 96, 62,165,116, 94,213,157,116, 25,209, 16, 55,124, 19,144,182, 4,213,222, 6,167,205, 0, 21, +122,160,184, 68,138,220,251, 15,112,253,194, 46, 80,131,237, 57, 50, 5, 2, 24, 86,175, 24, 42,112,114, 0, 68, 18,119, 93, 81, + 81, 17, 28, 29, 29,161, 42,206, 20,141, 24, 93, 30,217, 18,157, 56,113, 2,113,113,113, 80, 40, 20,229,109,180, 6,213,150,246, + 34,106,181, 90,104,181, 90,100,245,110, 7,199,246, 47,227,241,176,241, 56,118,236, 24,114,114,114, 32, 18,137, 32, 18,137, 96, + 48,216, 46, 22,207,148,205,196,107, 10, 90,153,219,199,215,151, 72,157,140,178,253,171,151, 47,113,118,150, 59,120,198, 30,253, + 13, 15, 30, 84, 55,160,230, 16, 59, 58, 64, 44,115, 72, 16, 59,202, 42,153,171,154,104,178, 44,187, 96,247,238,221, 62, 26,141, + 6, 34,145, 8,187,118,237,210,109,217,178,229,106,113,113,241, 75,113,113,113,229,121, 70,207,210,206,170,184,185,187, 31,120, +243,221, 15,199, 47,122,191, 39, 84,197,106,236, 61,157,140, 63,175,220,235, 11,224, 12,165,212, 98,133,251,175,247,106,110,249, +248,248,116, 31, 61,122,116,194,158, 61,123,234,125,245,213, 87, 48, 26,141, 48, 24, 12, 48, 24, 12,229,207,141, 70, 35,182,111, +223,142, 51, 23,147, 39, 41,149,133,118, 77,166, 75, 8, 81, 52,106,212,232,216,197,139, 23,221, 29, 28, 28, 16, 21, 21,133,252, +252,124,140, 27, 55,174, 60,114,149,159,159, 63,120,253,250,245,111,221,191,127,255,171,211,167, 79, 63, 2,192, 2,120,238,103, + 13,224,225,225,225,249,255,132, 13, 47,226, 78, 8,217, 79, 41,237, 3,160, 7, 0,113,133,101, 16, 66,246, 3, 64,213,229,153, + 51,103,206,142,136,136,184,106, 90, 54,237, 51,107,214,172,150,145,145,145, 75, 58,116,232,176,227,220,185,115,119,241,119, 25, + 44, 0,209,148, 82,139,185, 47,154,219, 63, 67,115,247, 23,136,188,187, 66,220,120, 16,132,245, 58, 32,237, 70, 52, 18,142, 45, + 71,250,205, 51,160,156, 17,158,126, 45,108,158,108,225, 38, 42, 84, 40, 20,113, 74,165, 18,241,241,241,184,125,251, 54,164,210, +106, 61, 75,248,243,207, 63, 1, 0,158,158,158,118, 93,132,184,109, 39,248, 37,102, 34, 45,168,116,192,159, 95, 98, 38, 0, 96, +201,172, 89, 16,139,197, 16,137, 68,229,251, 26,141, 70,155,122,164, 44,171,189,172, 91,176,218,232, 64, 66, 8,105,234,233,180, +115,238,204, 9, 13, 26, 53,121, 65,113,241,192,175,184,123, 55, 3, 15, 31,218,119,127, 36,114,199, 4,137,147, 99,188, 88,246, + 87,183,224, 83,104,254, 58,112,224,192,247, 6, 12, 24, 32,107,223,190,189,228,251,239,191,207,175,106,174,158,181,157, 21,241, +246,246,126,245,245,215, 95, 63, 48,102,204, 24,244,235,213, 3, 67, 59,251,211,244,236, 2, 21,128, 40, 74,169,205, 23, 53, 35, + 35, 35,195,199,199,167,231,155,111,190,249,115,203,150, 45,253, 41,165,104,209,162, 5,250,245,235,135,221,187,119, 35, 57, 57, + 25, 69, 69, 69,186,211,167, 79,175, 80, 42,149,155,109,233,149, 93,159, 67,221,186,117, 15, 31, 63,126,220,221,193,193, 1, 71, +143, 30, 69, 73, 73, 73,181,200,213,146, 37, 75,164,247,238,221, 91,115,228,200,145,134, 40,157, 23,142, 55, 87, 60, 60, 60, 60, +207, 31, 86,189, 8, 80,106,156, 40,165,125, 42, 26,166,170, 70,203,244,220,180, 95, 68, 68, 68,249,178,233,152,200,200,200, 37, + 21,150,109, 71,136,158, 2,147,193, 10, 39,132, 80, 0,225,148,210,147, 21,119, 40,175, 62,192, 25,160,203,136,130, 46, 35, 10, + 14, 65,115,176,111,213,176, 74, 66,246, 68,134,204,161, 86,171, 33, 20,187,233,182,110, 26, 42, 2, 0, 35,117,212, 85, 59,183, + 13,106, 82, 44,213,158,118, 18, 66,152, 10,186,213,204,131,175,175,239,215, 29, 58,133,117,126,161, 85, 59,135,139,135,247,224, +214,205, 7,200,205, 45, 0, 40,212,150, 52,163, 6,189,134,226, 59, 41,144, 57, 59, 39,188,122, 60,177, 82,228,234,105, 52,163, +162,162,166,117,232,208,225,243, 93,187,118, 41,155, 52,105, 34, 17, 8, 4,186,138,230,234,105,219, 89, 17,133, 66,209, 73, 32, + 16, 28,101, 24, 70,214,171, 87, 47, 76,154, 52, 9, 43, 87,174, 52,112, 66,105,159,245,135, 99, 7, 62,209,232,230,216, 99,174, + 76,100,100,100, 92, 6, 16,208,176, 97, 67,137,193, 96,232,250,198, 27,111, 28,236,221,187, 55,206,159, 63,143, 99,199,142, 53, +211,233,116,153,101,231, 93, 0,192,147, 97,152,165, 86,102,114,103, 68, 34,209,142, 99,199,142,181, 84, 40, 20,136,138,138, 66, + 73, 73, 73,121,228,106,228,200,145,149, 34, 87,231,206,157,123, 4,222, 92,241,240,240,240, 60,207, 88,244, 34, 38, 76,166,169, +170,201,178,135, 10,230, 75, 53,115,230,204,217,132,144,253,101, 17, 46, 21, 0,229,179, 55,191, 50,130,178, 6,159, 44, 61, 55, +161,168,146,159,100, 14, 99,209,221,106,235, 56,238,233,191,183,154,245, 56,114, 85, 38,147, 97,253,250,245,112,112,248, 43,145, +222, 94,227, 84,124,112, 15,210,198,191, 91, 30,185, 50, 69,178,240,234,136,106,251,218,105,176, 76, 17,172, 11,168,210, 69,232, +235,235, 59,161,117,235,214,239,111,220,242,179, 83,228,231, 51, 10, 10,175, 95, 21,168, 75, 52,142, 26,189, 65,119,251, 97,174, +197,242, 8,134,194,124, 72, 28, 29, 19,132, 14, 50,115,230,234,169, 52,207,159, 63,175,238,222,189,251, 15, 75,150, 44,105,207, +113,220,150,218,104,167, 9,133, 66,209,201,205,205,237,200,154, 53,107,100, 50,153, 12, 26,141, 6, 75,151, 46,197,159,127,254, +217, 39, 51, 51,243, 8,128, 35,182, 52, 44,161,211,233, 62,232,209,163,199, 55,211,166, 77,131, 94,175,199,160, 65,131,112,255, +254,253,163,183,110,221, 90,233,235,235, 59,109,220,184,113,138,122,245,234, 97,236,216,177, 34, 0, 35, 45,200,124,185,109,219, +182, 62, 65, 65, 65, 56,121,242, 36, 10, 10, 10,224,237,237,141, 9, 19, 38,136, 35, 34, 34,182, 22, 21, 21, 13,140,136,136,224, + 35, 87, 60, 60, 60, 60,255, 18,236,245, 34, 21, 35, 81, 53,212, 55, 29, 39,140,136,136,184, 26, 17, 17, 81, 41,194, 85,219,152, +114,176, 76, 78, 38,220, 76,131,170, 29,196,169,170,231,240,112, 70,251,191,187,236, 53, 78,246,116,231, 1,127,229, 96, 85,133, + 84, 25,177, 71, 8,169, 73, 14,214, 17, 74,233, 57, 84, 48, 88,190,190,190,253,189,188,188,190,220,182,109,155, 76,169, 84,194, +183,121, 96,157, 3,187,127,209,120, 58, 74,212,233,121,121, 35, 18, 51,158,236,178,164,201,169,139, 19,164,142,242,120,169,131, +188,170,185,122,106, 77, 0,248,243,207, 63,167, 86, 93,247,172,154, 10,133,162, 83,189,122,245,142,172, 89,179,198, 65,169, 84, + 66, 36, 18, 65, 46,151,227,248,241,227, 40, 51, 87, 79,141,175,175,239,188,137, 19, 39,206, 29, 57,114, 36, 30, 63,126,140, 99, +199,142,161,107,215,174, 88,179,102, 77,131,227,199,143,127,211,177, 99, 71,176, 44,139,168,168, 40,232,245,250,155,230, 52, 8, + 33, 3,198,140, 25, 51,237,173,183,222, 66, 76, 76, 12, 50, 51, 51, 49,118,236, 88,237,132, 9, 19,202,115,174,214,173, 91,247, +214,189,123,247,248,200, 21, 15, 15, 15,207,191, 4,107, 94,164, 10, 7, 0,188,110, 90,168, 24,205,170,104,190, 76, 17,170,138, +203, 85,247, 47,219,110, 87,175, 78, 77, 49, 69,176, 44, 71,173,168, 17,172,107,107, 24,243, 46,151,175,226, 84,153,149,118, 17, + 73,228, 48,218, 97, 92, 62, 31, 77,244, 51,135, 66,240,227, 2, 6, 66,177,155,174, 89,143, 35, 87, 45,237, 43,151,203,193,113, +102,243,203,171, 98, 20,245,126,139,109,250,106,127,220,105,229, 5,170,215,149, 71,178, 48,187,252,117, 5, 33, 4, 34,145, 8, + 90,173, 22, 48,211,237, 87,133, 24, 66,200,125,150,101,207, 83, 74,105,120,120,248, 38,189, 94,223, 95, 46,151,215, 29, 61,122, +180, 46, 55, 55, 23,123,247,238,197, 15, 63,252,160,122,162, 19,196, 62,126,164, 31,118, 71,249, 36,221,138, 94,194,235, 39,175, + 86,138, 92,213,130,102, 53,106, 67, 83,161, 80,116,242,240,240, 40, 55, 87, 18,137, 4,114,185, 28, 25, 25, 25, 16, 8, 4,207, + 84,164,179, 97,195,134,146,176,176,176, 79, 71,140, 24,129,235,215,175, 99,230,204,153,153, 74,165,114,207,190,125,251,198, 78, +153, 50, 69,208,165, 75, 23,100,103,103, 99,195,134, 13,250,152,152,152, 37, 89, 89, 89,203,204,233, 8, 4,130, 15, 22, 46, 92, + 72,149, 74, 37,185,115,231, 78,165,200, 85, 97, 97,225,192,136,136, 8,233,221,187,119,249,200, 21, 15, 15, 15,207,191, 8, 27, +249, 87,185,101,230,233,161,153,101,182,130,177,170,186,156, 93,101, 25, 0,180, 85,182, 39,214,206, 21, 84,198,234, 8, 61,189, +145, 41,216,182,230,195, 58,125,223, 30, 7,169,215,203,208,222,251, 21,156,234, 97,185,193, 18, 73,157,224, 92,175, 62, 10,159, +168,112,246,218, 93,232,141, 76,129, 53, 61,131, 1,130,137, 31,255, 53, 90,208,197,197, 5, 5, 5, 5,149, 34, 90, 14, 14, 14, + 80, 40, 20, 40, 44, 44,196,174, 93,187, 96,171,102, 17,165,116,225,136, 17, 35,190, 24, 55,110, 28,211,116,200, 40, 60,185,112, +186,210,118, 66, 8,164, 82, 41,100, 50, 25, 50, 50, 50,112,227,198, 13,142, 82,186,208,154, 38, 33,228, 34,195, 48, 9, 59,118, +236, 72, 15, 15, 15, 31, 89,183,110,221, 33,163, 70,141,146,197,196,196, 96,225,194,133,130,168,168, 40,221,165, 75,151, 12, 70, +163,113,106, 70, 70,198, 6,107, 90,101,122, 85,205,213, 51,107, 86,165, 54, 52, 21, 10, 69, 71,133, 66,113,100,229,202,149, 14, + 89, 89, 89,144, 72, 36,112,114,114, 66,106,106, 42, 22, 46, 92, 88,108, 48, 24,122,213,180, 93, 85,144, 56, 58, 58, 74,244,122, + 61,182,108,217,130,140,140,140, 14,153,153,153,169, 94, 94, 94, 27, 62,250,232,163, 85,254,254,254, 45,110,220,184,113,243,201, +147, 39,227,179,178,178,174, 91, 18,113,113,113,233,224,238,238, 78,206,159, 63,143,177, 99,199,106, 39, 78,156, 88,158,115,197, + 71,174,120,120,120,120,254,147,196,216, 88,126,238,176,106,176,114, 74, 84, 30, 27,182,238, 89,182, 99,247,222,209, 99, 70, 12, +145,134,135,143,128,176,232, 10,140,143,226,160,104,214, 9,132,117,192,197,132,120, 92,190,157,166, 46, 81,179,155, 10,117,170, +233, 21,143,183, 53,219,118, 65, 65, 1, 26, 54,108,136,163,155, 94,108,169, 85,103,139,130, 93, 1,130, 58,186,168,227,189,175, +158, 58,117,234, 9,128, 77,205,154, 53,171, 84,100,180,170,102,124,124,252,252, 54,109,218,236,155, 53,107, 86, 68,179,102,205, +122,141, 89,176, 22,162,143, 71, 64,149,124, 25, 14,225, 3,225,226,226,130,188,188, 60,196,198,198,162,168,168,232, 48,165,116, + 86, 66, 66,194, 21,107,154,148,210, 11, 45, 90,180, 72, 15, 11, 11,115,210,106,181, 43, 63,249,228, 19, 89,113,113, 49,114,115, +115,241,232,209, 35, 92,188,120, 49, 74,175,215, 79,126,248,240,225, 61, 75,215, 86, 81,147,227,184,114,115, 85, 91,154, 21,169, + 45, 77, 71, 71,199,233,123,247,238,173, 20,185,122,240,224, 1, 22, 44, 88, 80,172, 86,171,123, 41,149, 74,187, 10,116, 90,187, +239, 28,199,193, 96, 48,128, 82, 10,177, 88, 92, 8, 0,101,102,170,187,189,154,185,185,185,209,247,239,223,239,231,232,232,136, +137, 19, 39,138,151, 44, 89,178,181,160,160,160,198,145,171,127,203, 12,243,188, 38,175,201,107,242,154,255, 31, 52,255,107, 88, + 53, 88,201,201, 84, 7, 96,114, 64,128,243,252,165,235,183,173,255,113,231,238, 1,163, 7,191, 41, 8,105,213, 21,247,178,246, +225, 84,236, 9,195,227, 34,186,183, 72,203,142, 77, 78, 46,180, 57,246, 95, 32,128, 97,214,156,161, 2, 0, 16, 10, 97,152,221, +167, 79,116,203,150, 45, 59,247, 13,202, 22,141,157, 88, 26,217, 90,191,122,168, 40, 58, 58,122,167, 68, 34,249,246,238,221,187, +133,246, 92, 68,153, 97,122,173,109,219,182, 47, 79,155, 54,237,203,222,141,124,219, 13,232, 16, 14,161, 80,136, 75,151, 46, 33, + 47, 47, 47,134, 97,152, 79,227,227,227, 79,217,163,183,111,223,190,116, 0, 40, 41, 41, 89,216,172, 89, 51,241,181,107,215,112, +251,246,109,164,164,164,192,104, 52,222, 74, 79, 79,175, 81, 66,156, 84, 42,189, 8,224,106,109,106, 86,164,182, 52, 85, 42,213, +146, 69,139, 22,189, 50,127,254,124,137,147,147, 19, 18, 18, 18, 48,127,254,252, 26,153, 43, 91, 80, 74,161,215,235,107, 52,242, +211, 12,159, 6, 5, 5,189,184,104,209,162,102,101,185, 92,124,228,138,135,135,135,135,231,185,194,174,201,158,203,204,211, 59, +193, 1,206, 77,150,172,253,121,147, 76,204,117, 86,105,153, 51, 42, 13, 51, 58, 62,185,208,236, 48,122,115, 44,220, 68,133, 21, +151, 23, 0, 8, 8, 8,112, 76,243,194, 19,211,186,180,135,128, 82,169, 92,106,175,102, 69, 46, 93,186,116, 10, 64, 88,112,112, +240,128,131,132,204, 6,238,130, 82,186, 36, 62, 62,126,111, 77,116,218,181,107,215,176,184,184,248, 71,157, 78,215,134,227, 56, +241,201,147, 39,161, 86,171,113,237,218, 53, 21,199,113, 86, 19,196,205,113,247,238,221,171,181,173,249,119,180, 51, 61, 61,253, +146, 66,161,232, 65, 8, 57,246,233,167,159, 74,106, 26,185,178,133,171,171,107, 73, 86, 86,214, 35,181, 90,237,246,240,225, 67, +173,171,171,235, 83,213, 30,161,148,222, 34,132,180,250,228,147, 79, 22, 76,155, 54,109,250,151, 95,126, 41,226,115,174,120,120, +120,120,120,158, 39,236, 50, 88, 38,202,204, 84,120,120,184,187,227,153,115, 57, 22, 43,119,215,132,228,228,228,226,207, 71,147, +242,200,150, 64,240,236, 21,182,203, 12, 85,141, 76, 85, 69,138,138,138,150,228,229,229,181, 47, 44, 44, 52,220,187,119, 79, 69, + 8, 49, 16, 66, 84, 28,199, 45,224, 56,174,198,249, 81,255, 38, 77,165, 82,121,214,203,203,235,165,179,103,207, 78, 41, 46, 46, + 94,163, 84, 42,207, 61,141,142, 57,226,226,226,244,222,222,222,239,190,241,198, 27,163, 56,142,219,144,145,145,161,127, 90, 45, + 74,169, 22,192,167,132,144, 61, 87,174, 92,249,245,220,185,115,153,224,205, 21, 15, 15, 15, 15,207,115, 66,141, 12,150,137,232, +232,218, 49, 87, 38,170, 70,182,254,105,110,220,184, 49, 24,192,224,255,143,154, 0,144,149,149, 21,251,119,232, 2, 64,102,102, +230, 81, 0, 71,107, 75,143, 82,122,137, 16,210, 8,165,163, 68,120,115,197,195,195,195,195,243, 92,240, 84, 6,139,135,231,121, +162,108, 74, 35,222, 92,241,240,240,240,240, 60, 55, 16, 0,129,230, 54,212,100,116, 0, 33,196,172,134, 53,108,233,243,154,188, + 38,175,201,107,242,154,188, 38,175,249,223,211,180,165,253, 95, 25,157, 72,158,113, 52,151,117,241,127,201,208, 80, 94,147,215, +228, 53,121, 77, 94,147,215,228, 53,255, 89,205,255, 26,204, 63,221, 0, 30, 30, 30, 30, 30, 30, 30,158,255, 26, 53,206,193,106, +215,174,221, 11, 0, 16, 19, 19,115,171,246,155, 83, 10, 33,100,130,183,183,247,232,214,173, 91,251,139, 68, 34,166,160,160, 96, +126,116,116,244,124,115,251, 6, 5, 5,197,190,242,202, 43, 77, 78,156, 56,161, 45, 59, 22, 21, 31,141, 70, 99,122,108,108,108, +232,223,213, 86, 30,235,120,123,123, 31,145, 74,165, 13, 74, 11,140, 82, 24, 56, 35,140, 28,133,209,200, 65,111,164,208,105,213, + 15, 52,197, 5,175, 62,149,118,155, 55,235, 27,141, 92, 4, 5, 93, 79, 40, 25, 75, 9, 93, 79, 40,249,136, 50,100, 61,225,232, +135, 16, 24,190,130, 65, 48, 77,192, 9,231, 40,147,119,166,213,246,181,253, 19,204,159, 63,255,153,126, 20,205,157, 59,215,236, +252, 83,193,193,193,251,165, 82,105, 83, 75,199,149,148,148,100, 38, 38, 38,118,125,150,115, 63,239,120,121,121,189,204, 48,204, +106, 0, 45,171,108,186, 14, 96,178, 82,169,252,243, 31,104,150, 85, 60, 60, 60, 78,177, 44,219,172,184,164,164,184,168,176,176, +137,147,147,211, 29,153,131,163,163,209, 96,188,153,155,155,253,242, 63,221, 62, 30,158,255,207,216, 52, 88, 33, 33, 33,205, 1, +116, 33,132,116,161,148,190,220,162, 69, 11,207,146,146, 18,132,132,132, 60, 36,132,156, 42,155,253,250,100, 92, 92, 92, 74,109, + 52,136,101,217,101, 43, 87,174,156, 58,113,226,196,114,147,148,148,100, 57, 10,201,178,172,111,100,100,100,157,212,212, 84,136, + 68, 34,136,197,226,242, 63,150,101,209,190,125,251, 26,157,223,213,213,213,201,195,195, 99, 62, 33,100, 32,195, 48,172,173,253, + 57,142, 51, 82, 74,119,102,103,103,207,205,203,203, 43,170,201,185,218,134,182,214, 3,196,194, 57,168,241, 82,236,101,171,163, + 43, 95,124,241,197, 88,129, 64,224, 11,152,159,216,218,220,115,163,209,152,126,245,234, 85,187, 12,167,171,171,171,147,212,193, + 97, 58, 97, 4, 61, 64,185, 22,165, 98,204,117,202, 25,142,169, 75, 74,150,217,115,189, 18,137,164, 65, 92,124,124,179,228, 27, +119,209,164,113,125,104,117, 6,104,180,122,236, 59,118, 9, 65,254,141,208,183,119, 79,123,154, 98, 22, 3, 71,230,205,153, 48, +172,219,146,213,219,219,206,158, 56, 68,190,100,245,246,208,217, 19,135, 56, 45, 89,179, 61,116,206,164,161, 78,139, 86,111, 11, +157, 51,105,104,157,197,171,183,105, 1,124,240, 52,231,120,191, 85,131, 98,198,104,144,152,219,198,177, 2,205,247, 87, 30, 56, + 62,245, 5, 60, 3, 75,150, 44,105,174,211,233,174,141, 28, 20,186,176,197, 11, 30,217,230,246, 41, 40,200,246,184,125, 61,246, +115, 8, 69,254,254,237,102, 91,253,255, 20,137, 68,141, 79,157, 58,213,204, 84,105,223,104, 52,194,104, 52,194, 96, 48, 64,171, +213,226,173,183,222,170,149, 1, 49,161,161,161,163, 40,165,139, 1, 16, 66,200,162,216,216,216, 53, 79,171, 69, 8,145, 11, 4, +130, 79,196, 98,113, 23,131,193,224, 15, 0, 66,161,240,154, 70,163, 57,105, 48, 24,190,161,148, 62,177,165, 81, 17,134, 97, 86, +196,196,196, 4, 56, 57, 57, 65,167,211,149, 79, 12,207,178,108,139,176,176,176,181, 0,154,217,171,229,235,235, 27, 75, 8,241, +173,201,249, 41,165,233,233,233,233, 53,250, 49,200,178,108,179,251,169, 74,143,134,245, 21, 0, 0, 7, 7, 71,199, 75, 73,247, + 60, 66, 90, 54,172,137, 12, 15, 15,207,223,128,197, 15,205,144,144,144,131, 0,186,180,104,209, 66,214,179,103, 79, 4, 7, 7, +163, 65,131, 6,144, 74,165, 0,128,188,188, 60,207,228,228,228,119, 18, 18, 18,222, 57,127,254, 60, 66, 66, 66, 84, 0,206,196, +197,197,153,141, 70,244,120,227,165,137, 82,185,100, 37, 0,228,100, 60,202, 76,191,147,189, 58, 51, 51,115, 25,165,180,252, 23, + 53, 33,164,201,200,145, 35,167, 76,154, 52, 9,251,247,239,199,246,237,219,161,209,104, 80, 80, 80,128,232,232,104,179,237, 52, + 26,141,233,195,135, 15, 23,164,164,164, 24,202, 52, 80,241,209,104, 52,214,104,194,100, 15, 15,143,249,131, 6, 13,250, 56, 32, + 32,160,124, 90, 23,189, 94, 95,254,248,248,241, 99, 76,153, 50, 5, 64,105, 85,114,142,227,112,252,248,241,137, 51,102,204, 0, +128, 79,204,105,246,236,210, 52, 86, 64,136,175,233, 66, 57,142, 75,143, 58,117, 39, 20, 32,236,165,216,196, 74,206,200,148, 19, +215,174,109, 27,155,230, 78, 32, 16,248,198,199,199,123,136, 68, 34,187,174,141,227, 56, 4, 7, 7,219,181,175,143,143, 79, 87, + 71,185,243,246, 1,131,223,175,219, 38, 56, 88,232,171,240,134,222, 96,192,221,123,169,237, 18, 19,226,218, 28,253,227,151,209, + 62, 62, 62, 67, 50, 50, 50, 78, 88,211,209, 27, 57, 36, 94,189,133,168, 51,241,120, 67, 36, 69,137, 90,139,162, 18, 45,126,252, +253, 44,210,179,173, 78, 93,105,149,176,176, 48, 31, 71, 65,189,176, 73, 31,244,119,252,106,221, 86,199, 73, 31,244,199,215,235, +127, 44,127,156,248,126, 63, 44, 91,183, 85, 62,233,253,126, 88,189,225,135, 14, 97, 97, 97, 62, 23, 47, 94,204,176,164,103,233, + 30, 49, 70,131,100, 83,114, 6, 11, 0, 57, 27, 54, 64,247,240, 33, 20,115,231, 2, 0,198,180,244, 53,107,188, 44, 17, 24, 24, + 88,110,136,173, 97, 48, 24,210,147,146,146, 44,126,209,154,204,149,193, 96,160, 2,129,224,243,211,135,230,239,234,216,174,121, +165, 23, 51,229,102, 74,157,121, 95,204,125,251,215,195, 69,244,157, 94, 78,215,174,197, 44,177,106,178, 56,142, 99, 52, 26, 13, +110,222,188,105,182,202, 62,195, 48,182, 38, 72, 55, 75,120,120,184,164,184,184,120,155, 92, 46,111, 93, 92, 92, 60,138, 82,250, + 69,116,116,180, 39,195, 48,232,209,163,199, 23,161,161,161,247, 36, 18,201, 58,181, 90,157, 32,151,203,135, 68, 71, 71,107,236, +209, 37,132,188,236,228,228,244,227,111,191,253, 86, 55, 56, 56,152,201,205,205, 69,163, 70,141,144,151,151,215,238,212,169, 83, + 33,239,191,255,254,251,132,144,225,148, 82,187,102,111, 40,227, 69, 71, 71, 71, 58, 98,196, 8, 98, 52,254,117,185,223,127,255, + 61, 66,154, 62,108, 58,246,109, 89,137, 90, 71, 11, 78, 95,150,126, 68, 25,122,230,254,253,124,139,111, 96, 66,136,239,252, 77, +147, 61,196, 98, 49,244,122,125,249, 31,229, 0, 80,128,114, 0,229, 40, 40, 5, 64, 9, 56, 35,135,175,103,109,170, 65, 83, 43, +227,224,232,232,224,229,229,253, 80,230,224,224,240,247,101,213,242,240,240,212, 4,107,191, 74, 95,139,142,142,134,193, 96,128, +147,147, 19, 88,182,242,247,189,171,171, 43, 94,126,249,101,132,133,133,161, 71,143, 30,184,113,227,134,236,203, 47,191,180, 24, +142, 24, 58,181, 15,252,154,121, 2, 0, 40,165,222,167,247,199, 71,124, 55,127,119, 61, 0,211, 42,236, 54,106,204,152, 49,228, +209,163, 71, 24, 56,112,224, 41,141, 70,211,143, 82,106,117,186,156,196,196,196, 90,237,254, 35,132, 12,244,246,246,198,142, 29, + 59,160,213,106,171,109,119,118,118,198,213,171, 87,203,151, 89,150, 69,155, 54,109, 88, 66,200, 64, 88, 48, 88, 12, 33,190,135, +162,111,121,152,150, 7,245,109, 35,122,165, 75,211,135, 2, 70, 76, 1,144, 57,115,230, 0, 40, 53, 87,148, 82, 44, 88,176,192, +238,246,138, 68, 34, 92,191,126, 29, 44,203,226, 78,231,230, 0,128,192,248, 52,176, 44,139,196,214,165,191,106, 59,220,124, 12, +129, 64, 0,185, 92,110,151,166,143,143, 79,184,167,183,239,111,179,230, 70, 56,169,245, 20, 7,142,199, 32, 85, 25, 5, 74, 41, +188, 61, 92,209, 49, 36, 88,232,223,170,181,199,230,181,203,126,243,241,241,233,151,145,145, 97,222,253, 2, 48, 24,140,240,111, +222, 24, 91,126, 59,133,197,235,118,225, 81,161, 26, 69, 37,165,175,107,143, 14, 1,248,254,107,187, 47,181, 18, 44,203, 46,107, +209,184,177,223,150, 95,143,160, 99,251,118,216,242,235, 97,116,104,223, 14, 91,118,150, 46,111,221,121, 4, 47,117, 8,195,214, +157, 71, 16,232,223,172,254,163,251, 5,203, 96,165,182, 87,181,123,212,175,244, 30, 53, 98, 69, 4, 40,189, 55,247,199,142, 5, +128,114,131, 85, 83, 76,134,216,214,126,214, 76,112, 5,115,133,236,236,108,146,159,159, 79, 93, 92, 92,222,174,104,178, 76,230, +234,151, 67,133, 80,165,172, 38, 63,255,124,146,123,247,221, 46,215,174,197, 44,241, 7,230,154,157, 68, 91,167,211,221,123,229, +149, 87, 40, 0,104,181, 90, 31,177, 88, 92,201,181,115, 28,167,232,212,169, 83, 53,131,102,171,235,176,184,184,120,219,206,157, + 59, 7,120,122,122,162, 95,191,126, 71, 3, 2, 2,196, 14, 14, 14, 56,116,232, 16,124,125,125,235, 57, 59, 59, 31,140,136,136, +192,242,229,203,235, 31, 61,122,116, 59,128, 1,182, 94, 31, 66, 72,143,174, 93,187,238,216,191,127,191, 84, 36, 18, 65,165, 82, +225,234,213,171,168, 83,167, 14,196, 98, 49,250,245,235,199,118,236,216,209,173,107,215,174,187, 9, 33, 67, 40,165,199,108,105, +154, 80,169, 84,116,214,172, 89,112,112,112,128,163,163, 99,249,159, 76,108, 36,235,231, 53,150,125, 28,153, 37,155, 51,227,221, +200,141,155,255, 56, 81,191,126,157, 47, 82, 83, 11,242, 45,105,249,178,173, 48,115,218, 76, 0, 0,195, 48, 16,139,197,149,162, +236,166,231, 34,145, 8,109,218,180,177,217, 54,127,127,255, 13, 44,203,186, 87, 92,199, 48, 12,251,249,103,179, 13, 87,174,222, +112,212, 27,224,168,214,234,177,104,193, 23, 6,150, 97,217,192,192,192,189,148,210,156,171, 87,175,126,100,239,245,243,240,240, +212, 30, 86,195,254,114,185, 28,151, 46, 93, 2, 33, 4, 78, 78, 78,112,118,118, 70,157, 58,117, 80, 88, 88,136,228,228,100, 92, +191,126, 29,247,238,221, 3,195, 48,104,210,164, 9, 80, 90,246,161,156,138, 35, 12,182,125,189, 31, 82,185, 4,132, 0,109,123, +182, 70,104,183, 32, 36, 93,188, 51, 89,161, 80,108, 82, 42,149, 55, 9, 33,130,192,192,192,247,219,183,111,143,229,203,151, 67, +163,209,124, 99,206, 92,153, 27,181,240,209, 0,225,105,145,128,241,211, 25,184,180, 13,123,245, 47,181,105,211, 38, 54, 56, 56, +184,209,149, 43, 87,244, 64,105, 52,171,106, 55, 89,197,188,172,170,154,185,185,185,224, 56,179,169, 42,213,224, 56, 14,249,249, +213, 63, 99,171, 76, 30, 93,105,219,162,136,229, 46, 69, 5,217, 88,184,244, 39,232,245,122, 76,157, 58, 21, 28,199,129,227, 56, + 24,141, 70, 60,126,252, 24, 48,243, 51,180,106, 59, 77,215,196,178,108, 37, 3,108,107,217,154,166,187,187,187,163, 68,234,176, +125,218,156,133, 78,151, 83,210,177,255,120, 12, 40,165,216,183,241, 11, 0, 64,191, 49, 11,144,145,153,131,142, 33, 45, 48,242, +195, 79,156, 86, 68,204,217,238,238,238,222, 52, 39,231,175,226,179, 21, 53,245, 6, 14,187, 14,159, 71,230,163, 39, 24, 62,160, + 27, 52, 90, 61,178, 31,102,226,135,117, 95, 97,220,123,123, 80, 87, 46,243,106,210,164, 73, 74,197,215,200,201,201,137, 85,171, +213,167, 82, 82, 82, 62, 48,167, 9, 0,122,189,254,181, 89, 31,143,198,138, 77,187,208,178,137, 39,246, 71, 93, 64,219,192, 6, + 56,120, 60, 6, 29, 90, 53,194,225,147,177,232, 24,212, 4, 39,206, 39, 97,242, 71,239, 98,250,228, 83,175, 89,187,246,106,247, +104,201,114,151,162,194,108, 28, 88,178, 21,217,107,214,224,193,196,137,104, 91,246,158,184,196, 48, 16,249,248, 0,206,182, 95, + 79,115, 92,191,126, 29, 26, 77,245, 64,141, 68, 34, 65,139, 22, 45,172,106,154, 34, 87, 15, 31, 62, 36, 15, 31, 62,132,163,163, + 35,185,118, 53,201,232,223, 50,240,109, 99,222,175,155, 0,160, 52,114, 85,136,146, 27,171,160,186,185, 26,162,252, 43,204,198, + 5, 31,106,199,124,241,237, 53,148,253,143, 86,109,103, 98, 98, 98,249,235,211,190,125,251,235,103,206,156,121,177, 66, 20, 24, + 6,131, 65,100, 48, 24,154,153,186, 13, 13, 69,136,103,115, 0, 0, 32, 0, 73, 68, 65, 84, 6, 3, 52, 26, 13,134, 12, 25, 82, +254,198, 50,119,237, 50,153,172,181,167,167, 39, 46, 94,188,136,121,243,230,137, 91,182,108,137,155, 55,111,130, 97, 24,140, 26, + 53, 10, 1, 1, 1,200,201,201, 65,219,182,109,113,250,244,233,106, 46,195,204,123,222,201,209,209,113,243, 31,127,252, 33,101, + 24, 6, 69, 69, 69,224, 56, 14,157, 58,117, 2, 33, 4, 87,174, 92,193,103,159,125,134, 61,123,246,224,183,223,126,147,133,132, +132,108, 38,132,248, 83, 74,139, 44,105, 86, 60,157, 70,163,161, 82,169, 20, 82,169, 20, 18,137, 4, 18,137, 4, 34,145, 8, 42, + 45,139, 15,231,222,211, 8, 37,114,174,117,171, 38, 77,199,141, 25,192, 44,140,252,225, 56,128,125,150, 52,149,244, 42, 92, 91, + 18, 28,253, 33, 22,253,198,190, 12,145, 80, 12,145, 80, 4,177, 72, 12, 97,217,115,145, 80, 4,177, 80, 2,182,158,186,122, 99, +170,104, 10,133,194,122,241,241,241, 46, 21,255,151, 13, 6,195,181,137, 19, 39, 54, 25,208,183,143,231,175,123,246,179,195, 6, +245, 51,122,121,122,228,166,165, 61,184, 5,192, 37, 36, 36,132, 90,211,172, 13,120, 77, 94,243,127, 68, 91, 0, 21,127, 96,104, + 1,136,203,158,231,162,244,179,205,173,202,122, 0,200, 41,123,116,183,176,156, 11, 32, 25,128,127,217, 58, 35,128, 24, 0, 54, +231, 87,182,133, 0, 0, 8, 33,229,255,132,148, 82, 82,117, 39, 74, 41, 10, 11, 11, 81, 88, 88,136,180,180, 52,172, 95,191, 30, + 66,161, 16, 2,129, 0, 2,129, 0, 12,195,148,231, 43, 88,226,216, 31,167, 87, 3, 88, 29, 18, 18, 34,252,238,252,174,131,115, +182, 76,238, 30,214, 51,132,141,141,186,242, 54,128, 69, 0, 94, 27, 49, 98, 68, 61, 0,216,186,117,107, 46,128, 67,246, 94,132, + 72,192,248,173, 90,249, 83,253, 73,147,135, 1, 40,205,203,218,180,105, 83,221,244,244,244, 74,191, 18, 69, 34,145,205,188, 44, + 74,233,206, 91,183,110,125,236,237,237, 93,254, 69, 82,177,155,208, 96, 48, 64, 42,149,150,155, 33,141, 70,131,109,219,182, 25, + 40,165, 59,173,104, 34,229,234,159,184,121,245, 4,140, 70,174,146,153, 82,171,213,152, 55,111, 94,121,244, 10, 0,198,150, 69, + 74,236,197, 90,228,138,101, 89,156,105, 82,234, 4,122,231,208,106,185, 90, 85, 17,138,165, 83,123,191,249,174,171,129,178,229, +230,170,244, 26, 74,205,133, 88, 40,128, 76, 34,196,205, 59,105,104,228, 19,130,238,189,250,215, 61,118,112,247, 84, 0,102, 7, + 33,232,141, 28,122,135,135, 96,221,142, 19, 40,124,162, 70, 97,126, 30,114,211,174,227,218,229, 24,136,197, 98, 92,184,112,193, +169, 78, 29, 23,167,198,141, 27,193,104,228,112,230, 66, 44, 28, 28,100,216,177,253,231, 70, 13, 26, 53,198,131,123,119,205,230, + 78,113, 28, 39,232, 24,234,143,194,220, 84, 8, 4, 2,116, 12,110, 10,129, 64,128, 78, 33,205,192,178, 44, 58,183,125, 17, 44, +203,162, 75, 88, 0,154, 54,109, 10,142,227,172,254,152,160,148, 34, 37,233, 79,164, 36,159, 0,229, 56, 24,185,210,238, 95, 10, + 64,151,153, 89,253,186,178,178, 64,157,109, 6,163,204,158,231,211, 79, 63,205, 87, 42,149,186,170,219, 20, 10,133,104,207,158, + 61, 46,214, 74,167,136, 68, 34,127,129, 64,112, 45, 47, 47,143,115,112,112, 96,140, 70, 3,231,223, 50,144, 61,125,104,126,249, +220,147,243, 22,204,223,245, 78, 47,231,183,127,250,225, 15, 42,114,239, 68, 8, 43, 49,140,254,226, 91, 49,132, 34,127,123,218, +104,234, 46,188,113,227,134,205, 73,185,205,125, 94, 84,164,184,184,120,100,191,126,253,142,126,244,209, 71, 82,160,244,199,139, + 64, 32, 40, 55,253,183,111,223, 6,195, 48,216,184,113, 35, 52, 26,141,205, 55,190, 64, 32,248,120,247,238,221,117,196, 98,113, +185,185,162,148,130,101, 89, 92,191,126, 29, 95,127,253, 53, 70,140, 24,129,212,212, 84,120,123,123, 99,234,212,169,242,200,200, +200,143, 81, 58,245,169, 45, 46,107,181,218, 80,153, 76, 6,137, 68, 2,147,209, 2,128,184,219,158, 73,119,239,222,109,213,160, + 65, 61,175, 70, 1, 87,126, 15,239,220, 58,200,205,205,165, 3,202, 12,150, 57,228, 79,234,163, 40, 69,128, 46, 93,186,224,228, +201, 83,232,211,167, 15,140, 34, 17, 56,177, 24,156, 88, 12, 42, 18, 1, 98, 49,136, 88, 12,234,224, 96, 71,243, 64, 89,150, 69, + 86, 86, 86,165,117, 99,198,140,121,240,238,187,239,122, 0, 20, 74,101, 6,253,228,227, 73, 25,185,185,185,212,211,211,211, 30, + 77, 30,158,231, 6, 27, 94,196,157, 16,178,191,194,246, 62,166,229,153, 51,103,206,142,136,136,184, 74, 8,217, 95,113,189,105, +191, 50,237,253,230,150,203,142,117,155, 53,107, 86, 96,100,100,228,146, 14, 29, 58,236, 56,119,238,220, 93,212,150,193,162,148, + 18, 66, 8,181,245, 97,105,194,220,151,180, 45,131,101, 34, 46, 46, 78,239,227,227,243,221,245,216,187,221, 95, 12,109, 6,153, +163,164, 39, 33,100,181, 68, 34,249,100,248,240,225,184,112,225, 2,146,146,146,190,167, 53,152,246, 68,103,224,210, 38, 77, 30, + 6,157,129, 75, 3, 74, 35, 84, 83,167, 78, 21,157, 57,115, 70,103,106,111,213, 8,150, 37,173,236,236,236,185, 49, 49, 49,176, +150,228,254,206, 59,239,148, 63,175,152,228,110, 73,147,114, 20, 58,157, 30,197,197,170, 82, 99, 85,246,229,109, 52, 26, 81, 92, + 92,140, 65,131, 6,149,155, 46,142,227,144,157,109, 54,103,217, 38, 12,195,216, 29,185,178,168,193,178,175,182, 14, 10, 22, 30, + 63,119,185,210,151,107,255, 15, 23, 65, 44, 42, 53, 87, 50,169, 8, 50,137, 16,105,202,135,104,225,223, 82,116, 50,106,255,171, +176,100,176, 12, 70,172,254, 57, 10, 32, 4,187,246, 31, 71,104, 35, 7,204,255,236, 83, 12, 28, 56, 16, 98,177, 20,187,119,239, +196,178,181, 91, 48,182, 65, 3, 80, 0, 97,161,109,176,116,195, 14, 44, 92,176,128,217,249,235,174,206,182,218, 43, 20, 10,193, +178,108,249,151,118,213, 71,150,101,109,154, 4,160,236, 30,233,245, 40, 41, 86,193,200,113,224, 56, 10,202,113, 0,165,240, 89, +188, 24, 62,139, 23,227, 18, 83, 58,128, 47,160,184, 24, 42,149, 10, 8,111,109,231,171, 90,118, 14, 74,161,213,106,161, 84, 42, +117,137,137,137,213,190,253,130,130,130, 30,106,181, 90,171,237,157, 61,123,118,202,146, 37, 75,252, 93, 93, 93,175, 93,190,156, +168,111,221, 58, 72, 88, 53, 7,171,121,179,230, 5,243, 22,204,223, 53,236,189, 55,222,222,240,217, 96,195, 71,115,127, 20,216, +147,232,110, 66,167,211,221,235,209,163,135, 93,169, 60, 42,149, 42,203,210,182,208,208,208, 81,132,144,197,205,155, 55,151,116, +235,214, 13,167, 78,157,194,226,197,139, 57,131,193,144, 11, 0, 29, 59,118,116, 95,184,112, 33, 73, 78, 78,134,139,139, 11,178, +179,179,183,132,134,134, 46,180,150,248, 46, 22,139,195,219,182,109,203,104, 52,154,242, 31, 37, 12,195,224,250,245,235,136,140, +140,196,144, 33, 67,208,188,121,243,242,255,173,174, 93,187, 10, 87,173, 90, 21, 14, 59, 12, 22,195, 48,147,187,119,239,254, 21, + 74, 71, 17, 86,252,144,187, 6, 96, 58, 0, 60,120,144,155, 53,228,173,142, 87,187,119, 9, 14,109,218,200,199,219,154,222, 35, +225,109,120, 7,203, 32, 18,138, 48, 98, 70, 95,236,223,191, 31,227,231,189, 91, 22,201, 42,141, 96, 9,133, 34,136,132, 98,136, +221,159,110, 34,130,178,207, 17,226,236, 92, 7, 0, 80,167, 78,233,163,209,104, 36, 0, 40,195, 48,124, 74, 22,207,191, 6,123, +188,136,201, 32, 85, 92, 38,132,236,143,136,136,232, 83,117, 93, 69, 51,101,238,121,197, 99, 35, 35, 35,151, 84,208, 46,169,141, +235,169,181,169,114,244,122,235,243,246,118,235,214,109,162,147,147,211, 74, 0, 8, 13, 13,197,253,179, 25,184,127, 54, 3,254, + 47,182,236, 20, 28, 20,154, 63,100,200, 16,184,185,185, 97,250,244,233, 20,192,230,154,156,123,195, 94,253, 75, 21,151, 19, 18, + 18,158, 58, 47,171,108,100,220, 39,176,144, 79,245, 52, 80, 74,161,215,233, 81, 92,162,134, 78,167,131, 94,111,132,193, 96, 68, + 72,128, 19,126,252,246, 83,104,181, 58,232,141,165,235, 74, 35,101, 70, 72, 68, 26,116,105,239,167, 7, 97, 84, 39,207, 63, 48, +211, 25,245, 23, 45,227, 82,193,178, 44, 46, 7,249, 0,168, 30,185,234,169,212,217,109,180, 40,103,124,209,211,211, 3,169,135, + 47, 2, 0,228, 14, 82, 28,217,186, 16,142, 14,165,191,228, 95, 27, 49,187,212,100, 73, 68,208,233,180,240,240,108, 8,131, 81, +255,162, 37, 61,131, 94,167,109,221,204, 7, 46, 78, 50, 36, 94, 58,143, 79, 38,124,128, 81,163,222,135, 72,234,132,147, 39, 79, + 32, 85,153,141,219,233,143, 49, 97,238, 58,232,245, 70,232, 12, 70,232, 13, 28, 86,252,176, 31, 58,163,109,103, 36, 18,137, 48, +117,234, 84,153,165,237, 59,118,236, 80,217,101,176,104,153, 9, 46, 81, 65,163,214, 64,171, 43,189, 23,198,198, 66, 44,250,236, + 93,232,245,122,168, 6,119,128, 78,175,135,113,242, 0,232,116, 58,164, 57, 8,152,206,161, 10, 61, 8,163, 58,115, 41,221,234, + 61, 50,157,195,154,129,162,148,154,237, 58,172,138,201,100,181,110, 29,116,109,196,160,208,136,179,231, 46,229,156, 61,119,169, +218,126,141,155,135,222,249,104,209,142, 89, 53, 49, 87, 64,229,238,194,103,193,148,208, 46,151,203,145,146,146, 2,150,101, 65, + 8,121, 20, 23, 23,231, 9, 0,243,230,205,203, 21, 10,133,110, 44,203,226,227,143, 63, 6,203,178,238,227,199,143,255, 28,128, + 69,131,101, 48, 24,252,157,156,156, 80, 84, 84, 84,254, 58,138,197, 98,204,156, 57, 19,195,134, 13, 43, 55, 87, 98,177, 24, 91, +182,108, 65, 72, 72, 8,180, 90,173, 93,145,187,244,244,244, 75, 0, 94,178,181, 31,199,113,165,221,172, 28,103,245,141, 37, 47, +246,131,250,158, 24, 70,145, 8, 59,246,237,195,176, 97,195, 32, 22, 75,202, 35, 87, 16,137, 64,196, 98, 48, 34, 17,140,108,141, +198, 75,152,218,129,194,194, 66,118,203,150, 45,141, 91,182,108, 73, 40,128, 22, 45, 2,200,254, 3, 7,234,203,229,242,187,174, +174,174,213,162,164, 60, 60,255,118, 42, 26,164,218,208,154, 57,115,230,108, 0,116,230,204,153,179, 77,203, 17, 17, 17, 42, 0, +202,103,213,175, 53,131,101, 43,130,181,124,249,114,180,106,213,202,226,118, 74, 41, 86,173, 90,133, 31,127,252,113, 57,165,244, + 78, 77,206,253, 97,127,225, 69, 7,153,200,187, 68,165,203,252,246, 55,125, 88, 80, 80, 80,108,135, 14, 29, 26,199,198,198, 90, +140, 96, 89,170,141,245,119,148,105,160,148, 66,171,211,163,164, 68, 5,181, 86,139, 41,159,174,181,231,178,136, 78, 91, 36,120, +189,215,203, 22,205, 67, 77,114,176,108,117, 13, 86, 68,175, 55,192,228, 1,158,148,168,209,117,200, 76, 92,250,125, 37, 0,148, +155, 43,153, 68, 8,169, 88, 8,134, 0, 4,150,181,245,170,194,190, 51, 38,126,112,122,253,247, 63,250,246,127,121, 52, 38, 77, +154, 4,129,216, 1,117,221,220, 97, 48, 82,212, 87,120,224,118,250, 99,236, 94,243,105, 89,218, 25,197,203, 67,231, 97,249,103, +163,177,108,158,237, 95,245, 44,203, 98,205,154, 53,170,170, 81,171,138,145, 44,123, 40, 55, 88,197, 42,168, 52, 90, 76,155,181, +206,158,195, 74,239,209,171, 47, 89,188, 71, 85, 49, 55,112,162, 98, 27,108, 69,176, 76,204,158, 61, 59, 5, 0, 11, 0,150,190, + 69, 37,110,128,127,167,222,159,217,219,182,191, 3,142,227,112,224,192,129,106,209,213,138,152,238,153, 61, 63, 2, 56,142,195, +131, 7, 15,144,148,148,132, 14, 29, 58,160,160,160, 0, 2, 0, 83,175, 92, 65,192,240,225,208,148,165, 46,136,197, 98,140, 25, + 51,166,150,175,166,140,178, 55, 60, 37,214,111, 84,177, 67, 58, 60, 3, 37,216, 28,185, 23, 19, 23,140,128,123, 11, 41,190,158, +181,177,124,251,178,239,230,149,229, 97,137, 33,181,111,252, 73, 37, 10, 11, 11, 5, 95,125,253,117,235,176,118,237,101,195, 70, +140, 98,180, 6, 14,139,190, 92,201,254,186,125,171,219,214,173, 63,201,164, 82,233,181,154,171,242,240, 60,223,212,150,185, 50, +105,153, 34, 88, 17, 17, 17, 87, 35, 34, 34,170, 69,195,158, 5,155,223, 62, 44,203,162,226,144,229,170, 16, 66,236,202,193,154, + 50,101, 10,156,156,156,204,110,211,233,116,244,242,229,203,201,153,153,153,155, 40,165, 53,174,139, 35, 22, 50,158,203,191,250, +193,119,210,228, 97, 28, 80, 58, 90,107,237,218,181, 46,166, 28,172,138,121, 88,182,114,176, 60, 60, 60,230, 47, 93,186,116,210, +107,175,189,198, 48,204, 95, 53, 29, 77,221, 17, 21,187,242, 56,142,131, 94,175,199, 31,127,252, 49, 41, 34, 34, 2,176, 16,245, +162,180,180,251,169,184, 68, 5,181,166,244, 11,246,118,210, 46,115,187,154, 59,216,230, 46,166,200, 85,251,148, 60,179,145,171, +195,158,165, 95, 92,189,115,108,107, 17,134, 77,185,247, 32,173,157, 87, 61, 23, 60, 46,120, 2, 73, 89,183,160, 9,147,185,146, + 73, 68,168, 91, 71,142,188, 71,217, 16, 10,133, 22,163, 35,148,210, 7,132,144,151, 6, 13,232,125,148, 97, 5,210,138,219,132, + 50,103,135,168,179, 87,234, 62,124, 92, 2,174,194,117,114,148, 98,226, 66,251,130,152, 66,161, 16,227,199,143,183,104,112,246, +237,219,167,178, 71,167,178,193, 42,141, 34,217,125,143,236,196,158, 8,150,189, 6,171, 42,166,209,133, 34,145,200,191,204,124, +217, 77, 80, 80,208, 33, 7, 7,135, 70,246,238,111,111,209, 81, 66,200,130,110,221,186, 45,246,245,245,245,248,232,163,143,136, + 64, 32, 64,104,104,104,189, 47,190,248,162, 0, 0,252,253,253,157,128,210,207,152, 21, 43, 86,224,218,181,107, 57,132,144,133, +214, 52,197, 98,241,245, 58,117,234,132,118,235,214, 13, 5, 5, 5, 72, 77, 77,133, 92, 46, 71,192,215, 95,227,202,184,113, 8, +218,176, 1, 76,183,110, 0, 74, 7, 13, 92,185,114, 5, 18,137,196,236,200, 73, 0,240,241,241, 9,163,148, 46, 5,208, 9,127, +117, 11, 82, 0,103, 9, 33, 51, 50, 50, 50, 46, 86, 59,136, 33, 12, 0, 24,109, 68, 88,197, 5,158,208,164, 73, 48,114,228, 72, +136, 68, 98, 64, 44,198,180,105,211, 42,124, 30,137,193,150,229, 99,113, 70,177, 53, 41, 0,149,243, 83, 0, 64,171,213, 18,137, + 88, 44, 25,241,222,251,204,140,105,159,112,122,131,129, 19, 8,132,204,212, 57, 75,152,155, 55,146, 36,197,197,197, 12,169,201, + 47, 43, 30,158,127, 1,230,114,169,202,162, 80,150,200,169,152,151,101,201,160, 85,204,201, 2, 96, 87,185, 24, 91,148, 27, 44, + 51,125,158, 55, 19, 19, 19,155,181,108,217, 18,169,169,169,102, 71,202, 1, 40, 29,194, 44,147,225,214,173, 91, 0,112,211,210, +137,142, 31, 63,190, 26,192,106,211,178, 66,161,232, 16, 62, 48,252,108, 80,183, 96,236,250,230,215,130,204,204,204, 32, 83, 77, + 44, 66, 8, 81, 40, 20,195,132, 98,193, 59, 77, 3,235,119, 49,114,220,210,227,191,159, 49,155,227, 3, 84,207,193, 50, 24, 12, + 79,157,131, 69, 8, 25,248,218,107,175, 49,201,201,201, 24, 52,104, 16,126,250,233, 39, 75,187, 98,216,176, 97,216,177, 99, 7, + 94,125,245, 85, 38, 50, 50,210, 98,153, 6, 74, 1,189,206,128,226, 18, 53,212,234, 90,185,111,102,121,214,200, 21, 0, 80,206, +112,236, 74, 66, 92,155, 86, 33, 29,132,247,210,178, 32, 21, 11, 43, 25, 44, 7,137, 8, 82, 73,233, 58, 47,247,186,136, 57,119, + 82,103, 48,232,173, 14,131,167,148, 62,128,153, 34,141, 18,167,122, 41, 61, 59,181,170,107,238,152,229,179, 70,160,213, 47,203, +109,182, 87, 40, 20,226,251,239,191, 87, 89,138, 94,217,251, 26, 80,138,242, 46,194, 18, 85,237,222, 35, 79, 79, 79,119, 15, 15, +143,245, 46, 46, 46, 82, 83,238,144,165,237,214, 34, 92,150,168, 82, 23,235,218,146, 37, 75,106,100,178,196, 98,113,163,179,103, +207, 54, 51,229, 5, 90,123,212,106,181,120,231,157,119,236, 10, 11,198,198,198,110, 14, 14, 14,190,237,238,238, 30,213,177, 99, + 71, 73,114,114, 50, 22, 45, 90, 68,132, 66,161, 51, 80,250,127, 89, 84, 84, 4,129, 64,128,199,143, 31,131, 16, 50, 50, 54, 54, +246,176, 53, 77,141, 70, 19, 29, 29, 29,221,166,111,223,190,236,181,107,215, 32, 16, 8,192,113, 28, 52,237,219, 35,104,195, 6, + 36,125,242, 9, 94,190,119, 15, 26,189, 30, 82,169, 20,135, 15, 31,214,149,148,148, 88, 44, 35, 34, 22,139, 55,158, 63,127,190, +165, 84, 42,133, 78,167, 3,199,113, 96, 24,134,176, 44,219,185,101,203,150,171, 80, 58,114,169,156, 70,141, 60, 60,198,127,208, +251, 69, 35,199, 25, 51,148, 57, 57, 22,100, 1, 0, 90,167, 28,184,251, 75,202,243,173, 68, 66, 17, 68,130, 82, 99,101,138, 92, +137,132, 34,136, 68, 98, 72,196,118,117,225,211,170,239, 29, 83,238,149,163,163, 3,247,194, 11, 47, 36,223,188,117, 59, 0, 0, + 83,167,142,139,221,121,177, 60, 60,207, 19, 86,242,175,114,170,152, 35,109,133,229, 28,148,206,173,220,167,236, 57, 42, 60,191, + 4,160,109,149,125, 77,219,181, 85, 30, 77,219, 19,107,227, 90,172,125, 80,246,254,224,131, 15, 54,188,242,202, 43,221,167, 78, +157, 10,185, 92,142,204,204,204,242,127, 90,177, 88, 12, 63, 63, 63,168, 84, 42,156, 58,117, 10,249,249,249,199, 1,124,104,239, +137, 51, 51, 51, 47,220, 74,184,249,168,115,223, 48, 55,255,176, 23, 93,210, 83,210,219, 3, 56, 71, 8, 33, 62, 62, 62,223, 13, +254,228,181,247,186,190,217, 14, 34,177, 16,105,183, 44,230,209, 2,168,158,131,245, 44,181,177, 24,134, 97, 9, 33, 24, 52,104, +144, 93,251, 15, 30, 60, 24, 39, 79,158,132,181,238,196,210, 46, 66, 29, 74,138, 85, 40,169, 69,131, 69, 8,129,209,104, 44,143, + 92,153,254,122, 42,117, 96, 24,166,220, 88,188,150,109, 95,201, 9, 0, 80,151,148, 44, 59,125,108,223,152, 23, 3, 90,187,119, + 8,110,142,155,119,211,176,108,246, 95, 93, 45,211,198, 14,198,150, 29,127, 64,225,229, 6,141,234, 9,142, 28,252,163,160,176, +176,112,217,211, 94,195,150,189, 39, 1, 0, 47, 13,173, 60, 70, 96,208,199, 43,236, 58, 94, 32, 16, 96,212,168, 81, 22, 35, 88, + 81, 81, 81,170,138,145, 72, 75,152,238, 81,113,177, 26, 37, 42,187,130, 94,118,161, 80, 40,130,218,183,111, 31,245,237,183,223, +186,213,171, 87, 15, 74,165,178,146,193, 82, 40, 20, 65, 97, 97, 97, 81,223,126,251,173,155,187,187, 59, 82, 83, 83,237, 46, 17, + 2, 84,174,139,149,147,147, 67, 30, 63,126,204,213,173, 91,183, 70, 38,139, 97, 24,104, 52, 26, 92,187,102, 95,143, 82, 77,138, +142, 54,106,212,232,167,149, 43, 87, 74,238,223,191, 15,189, 94,143,228,228,228,106,131, 16, 88,150,197,204,153, 51, 49,103,206, +156,245, 0, 26, 88,211, 51, 24, 12,223, 12, 31, 62,252,131,140,140,140,186,158,158,158,200,204,204,132, 72, 36, 2,165, 20,164, +107, 87,188,116,247, 46,116, 70, 35,100, 50, 25,110,220,184,129, 77,155, 54, 21,235,116,186,111,204,105, 53,109,218, 84,204, 48, + 76, 51,145, 72,132,119,223,125,183,210,182,173, 91,183,162,131,255,227,208, 15,223, 20, 63, 49, 82,145,230, 9,252, 15, 49, 12, + 67, 38,140,238,221,188,115,135, 86,129, 87,147,239,221, 86,102,231,157,181,214, 86, 97,129, 27,116, 74, 9, 32, 18,253,149,111, + 85,150,115,197,138,197,229, 35, 10,169, 88, 12, 78,108, 95,177,224,138,166,137, 16, 2, 55, 55, 55,205,138,111,150, 73, 28, 29, + 29,141, 0,224, 36,119, 52,254,186,117, 45,220, 92, 93, 53,213,220, 24, 15,207,191,155,234,137,166,255,155, 99,159, 26,139, 6, + 43, 46, 46,238, 46,128, 30,193,193,193, 67, 79,157, 58,181,124,202,148, 41,238,157, 59,119, 70, 94, 94, 30, 26, 52,104, 0,111, +111,111,196,198,198, 34, 49, 49, 49,151, 82, 58, 53, 54, 54,182, 90,168,199,218,108,219,148, 82,170, 80, 40,118,234, 74, 74,198, + 5,117,126, 17, 39,119,157,142,240,246,246,254,208,215,215,119,242,136, 89,125,223, 11,239,223, 22, 41,241,247,112,225,232, 21, +100,166,230, 98,228, 75, 51, 44,106,218,147,131, 85,241,177,106, 14, 86, 69, 77,142,227,140, 90,173, 22,191,252,242,139, 93, 38, +107,251,246,237, 80,171,213,224, 56,174,210,151, 78, 69, 77, 35,103, 36, 78,206,238,240,169,239, 15,157,182, 24, 28,103,255, 47, +203,138,159,144,230,174,221, 96, 48, 96,254,252,249,152, 62,125, 58, 22, 46,180,220,187, 34, 16, 8,176,118,109,245,220,175,170, +154,121,121,121, 69, 10,133, 98,216,142,239, 87,238, 26, 58,122,146,147,111,199, 32,108,254,245, 32,244, 58, 61,164, 18, 1,234, + 58,203,241, 66, 35, 31,104,213, 37, 88,183,122,121,161, 90,173, 26, 86, 53,247,172, 38,179,172,143, 28,208, 5, 95,110,250, 29, +167,183,253, 21,160,124,105,232, 92,252,252,213, 68, 4, 7,255, 96, 85,211,104, 52, 66, 40, 20, 98,219,182,109, 42, 75,163, 9, + 89,150,133, 37,131, 85,245, 30, 57, 59,187,195,183, 97, 0,180,234, 39,181,118,143,220,220,220,166,127,247,221,119,110, 42,149, + 10,215,175, 95,199,245,235,215, 65, 8,185, 86,117,123,113,113, 49,146,146,146, 76, 38,167,146,211,177,246,122,154, 34, 87, 57, + 57, 57, 36, 51, 51, 19, 14, 14, 14,204,229,203,151,213,173, 91,183,190,134,178, 28, 45, 91,215,174,209,104,238,119,239,222,221, +236,126, 26,141,198, 71, 34,145, 84,154,178,201, 84,116,180,106, 87,161,185,118,166,165,165, 37,172, 92,185,178,126,243,230,205, +177,113,227, 70,141,147,147,147,120,202,148, 41, 96, 89,150,172, 88,177,130,230,229,229,233,102,206,156, 41, 62,115,230, 12,138, +139,139, 19,172,181, 19, 0, 40,165, 69,132,144, 49, 29, 59,118,252,241,208,161, 67,178,102,205,154,161,160,160,116, 0,229,150, + 45, 91, 48, 97,194, 4,200,100, 50,164,164,164,160, 95,191,126, 37, 37, 37, 37, 99, 42,214,192,170,168,105, 48, 24,136, 80, 40, +164, 28,199,225,179,207, 62,171, 84, 88,212,193,193, 1, 50,177, 17,223, 46,104,226,248,201,151, 89,142,147,198, 13, 31, 14, 0, + 70,142, 51, 94, 77,190,119,251,219,205,191,159, 0,112,202, 82, 59, 1,128,171, 83,128,122,205, 74, 35, 88, 66, 83,205, 43,145, +164,210,232,193,210, 58, 88,165,117,177,108, 93,123,213, 84, 12, 87, 87, 87, 67, 72, 72,112,178, 74,165, 98, 77, 94,170, 94,189, +122, 73,101,251, 82, 63, 63, 63, 45,170, 84,212,171,201,255,166,189,240,154,188, 38,143,121,108,134,250,227,227,227,183, 5, 6, + 6, 30,138,140,140,140,220,187,119,239,232, 73,147, 38, 17,103,103,103,236,220,185,147,230,229,229,253, 32, 22,139,167,159, 63, +127,254,169,234, 69, 80, 74,183,156,249,227,194,216, 33,159,188, 65, 38,125, 53,178, 83, 66,116,210,181,214,157,154,161, 85,199, +102,136, 61,158,140,181,179,119,252,100,208, 27,190,200,204,204, 76,181,166, 99, 79, 14,150,233, 79, 32, 16,216,172,131,181,119, +239,222, 73,189,123,247,102, 98, 98, 98,170,229, 92, 85,204,195,138,138,138,130, 78,167,195,206,157, 59, 57,107,117,176, 56, 96, +223, 55, 95,125, 49,226,251,173, 7,196, 12,209,225,252,169,221, 40,120,108, 61, 42, 39, 18, 9,241,243,246,125, 58,129,128,189, + 97,165,173, 15,226,226,226,220,190,252,242, 75,150, 97, 24,172, 93,187,182, 82,228,170, 42, 87,174, 92,225,244,122,189,205,123, +165, 84, 42,163,188,188,188, 6,111,248,102,193,150,174,175,246,117,105,209,162,165,192,195,163, 62, 4, 12,131,252,188, 28, 92, +186,112,198,112,248,192,111,249, 90,173,118,164, 82,169,140,178,165,103,141,136,111,127, 51,187,254,173, 73,214,187, 7, 25,134, + 49,232,245,122,129,163,163, 35, 12, 6,131, 89,115,213,189,123,119,217,217,179,103, 85, 58,157, 14, 44,203, 90,117, 76,165,247, +104,238,136,239,127,172,221,123,100, 52, 26,253, 31, 63,126,140,226,226, 98,196,198,198,210,181,107,215,230,228,231,231,207,174, +184, 61, 47, 47, 15, 69, 69, 69,184,116,233, 18,221,184,113, 99, 78, 97, 97,161,181,124,130, 42,109, 40,173,139,245,248,241, 99, +206,193,193,129,209,235,245,250,214,173, 91, 75, 69, 34,251,106, 94, 1, 64, 66, 66, 66, 47, 75,219, 58,117,234,116,243,236,217, +179, 47, 84,156,155,208, 96, 48,136, 52, 26, 77,179,126,253,250,217,252,252,144,201,100, 67,118,239,222,189, 77, 42,149,182, 82, +171,213, 31,100,103,103,111, 1, 80,159,101, 89,220,186,117, 43,215, 96, 48, 12,252,236,179,207,190, 47, 46, 46,190, 34,151,203, +135,218,211, 94, 74,233, 97, 66,200,208,128,128,128,205,243,230,205,115, 12, 15, 15, 23, 42, 20, 10,132,132,132, 32, 37, 37, 5, + 7, 14, 28,208,173, 91,183,174,164,164,164,100, 20,165,212,226,251, 83, 32, 16, 80, 0,196, 96, 48, 84,154,195, 84, 44, 22, 67, + 40, 20,162, 68,195, 96,244,103,119, 84, 28,132,170, 37,203,126, 58, 64, 41,136, 50, 51, 55, 55,235, 97,254, 69,129, 94,127,234, +190,178,200,234, 92, 79,198, 92, 7, 52,116, 14, 4,240, 87,154, 2,195, 49, 32, 58, 2,214,200,130,213,179, 32, 2, 65,105,116, +203,190,233,174,168,193, 96, 64,159, 62,125,176,127,255,126,244,239,223,159,194, 74,174,200,254,253,251, 45,254,184,224,225,225, +249,251,177, 43,151, 34, 41, 41, 41, 31,192,135,109,219,182,221, 58,113,226,196,253, 28,199, 9, 57,142,123, 61, 33, 33,225,244, +179,156, 60, 51, 51, 51, 78,161, 80,204,118,247,113,137,232, 53,180, 19, 90,182,109, 0,163,193,136,179, 7, 19,240,195,146,223, +118,164,167,165,191, 71, 43,204, 85,104, 9,123,114,176, 42, 62,218,170,131,181,104,209, 34, 44, 94,188,184,198,163, 8, 45,237, +115,238, 82,198,135, 29, 66,189,125,223,234,219,233, 85,134, 16,170,177,146,103, 67, 8,168, 41,211, 66, 32, 96,111,156,188,144, +102,177,216, 82, 86, 86, 86,247,113,227,198,253,201, 48, 76,131,191,142,183,156,111,100, 52, 26, 51, 31, 61,122,244,138,173,107, + 42,211, 62,228,235,235,219,252,228,225,223,103,157, 57,118, 40,220,104,212, 53, 37, 32, 16,137, 68,183,245, 70, 67,180, 94,171, +141, 72, 79, 79,127,230, 66,108,179, 62,236,143, 7,202, 92, 8, 4,108,105,237,169,178,219,189,123,213, 20, 4, 7,255,108,241, + 56,137, 68,114,104,243,230,205,125,134, 15, 31, 78, 4, 2, 65,121,183,155,233,250, 25,134,193,133, 11, 23, 84, 90,173, 22, 63, +252,240, 3,149,201,100, 86, 11,215,254, 93,247,232,201,147, 39,163,250,245,235,183, 5,128, 4,192,173,130,130,130,143,148, 74, +101,122,197,237,253,251,247,223, 2, 64, 66, 8,169,182,221, 22,166,146, 13,117,235,214,189, 86, 22,185,146, 62, 77,162,187, 37, + 56,142, 99, 45,117, 31,218,211, 85, 88, 54,183,224,155,166,229,208,208,208, 5, 99,199,142,173, 56,217,243, 41, 0, 77,106,218, + 46, 74,105, 20, 33,164,229,103,159,125, 54, 89, 38,147,117, 85,169, 84, 45, 0,192,193,193,225,122, 73, 73,201, 9,157, 78,183, +146, 82,106,113, 26, 27, 0,184,125,251,182,182,113,227,198, 41, 6,131, 33,208,195,195,163,124,244,161, 88, 92, 26, 77,186,112, +221, 53, 54, 35, 35,163,173, 53, 13, 43,237, 75,183, 22, 81,182,116,140,181,237, 90,173, 54,231,220,185,115,174,199,142, 29, 99, +141, 70, 35, 14, 31, 62, 92,254,163,207, 92,111,224,157, 59,119,160,213,106,171,151,136,231,225,225,249,159, 64,254,206,110,122, +123, 67,136, 10,133, 98,144,212, 81, 50,174, 65,115,239,214,202,187,217,201, 69,249, 37, 63,103,102,102,126, 75, 41,173,246, 1, +254,111, 9,117,242,154,182, 53,197, 14,206, 71, 8, 43,106, 96,105, 59, 53,234, 30,104, 75, 10, 95, 53,167, 25, 22, 22,230, 35, + 18,137,150,105, 52,154,215,172, 85,105,103, 89,214, 32,147,201, 14,169,213,234,233, 85, 39,123,254, 55,190,158,243,231,207, 55, + 27,146,176,119, 20,225,220,185,115, 77, 3, 73,236,106,103, 80, 80,208, 9, 7, 7, 7,179, 5, 53, 75, 74, 74, 82, 19, 19, 19, +203, 13,251, 63,249,122,154, 70,203,217,147,119, 84, 81,243,169, 70, 17, 62, 67, 59,107, 66, 85, 77, 95, 95, 95,169,179,179,243, + 50,134, 97,172, 22, 56, 53,193,113,156, 54, 59, 59,123, 74,110,110,110,121, 40,246,223,248,158,231, 53,255,255,104,254,215,168, +181, 58, 88,207,130, 82,169,252, 5,192, 47,255,116, 59,120,254,183,152,204,211,211, 80,102,150, 44, 78,222,252, 95,197,100,144, +204,172,191, 14, 88, 41, 72,246,148,216, 83,142,225,121,224,105, 19,186,203, 12,148,205,226,162,207, 3,233,233,233,106, 0, 19, +254,233,118,240,240,240,216, 7,223, 65,207,195,195,195,195,195,195,195, 83,203, 16, 0,129,230, 54,212, 36,244, 71, 8, 49,171, + 97, 13, 91,250,188, 38,175,201,107,242,154,188, 38,175,201,107,254,247, 52,109,105,255, 87,186, 30,159,139, 28, 44, 94,147,215, +228, 53,121, 77, 94,147,215,228, 53,255,127,107,254,215,224,187, 8,121,120,120,120,120,120,120,120,106, 25,187, 13,150,220,203, +223,223,189, 97,208, 22, 87,191,214,151, 93,253, 90, 95,118,111, 24,180, 69,238,229,111,119,173,157,255, 18, 10,133, 66,230,237, +237, 61,180,126,253,250, 81,109,218,180, 41,244,241,241, 49, 59, 69, 14,143,117,194, 9, 17, 12, 38,100,252, 8, 66, 82, 71, 16, +146, 58,152,144,241,225,132, 60, 23, 3, 47,106,147,133, 19,124,218,159, 62,252,238,161,133, 19,124,204, 22, 96,155, 63, 77,225, +118,246,200, 59, 43,103, 79,240,113,173,141,243, 17, 66,156, 60, 61, 61, 55,122,121,121,221,247,244,244,124,224,233,233,185,153, + 16, 82,167, 54,180,121,120,120,120,120,236,195,174, 47, 51,215, 6,173, 62,240,111,241,226,244, 5,115,103, 17, 31, 47,119, 7, +189,193,168,187,119, 63, 61, 96,238,162,200, 93,174, 13, 90, 45,207,123,112,229,187,154,158,152, 16, 66,124,125,125, 7, 9,133, +194, 62, 0, 76, 70,237,154, 94,175,223,159,158,158,254,139,189,163,130, 90,183,110,125,134,101,217,250, 53, 57, 55,199,113,247, + 19, 19, 19, 95,174,105,155, 1,192,199,199,103,160,143,143,207,230,246,237,219, 59,180,105,211, 6, 34,145, 8, 75,151, 46,157, + 10,192,236,116, 28,230, 32,225,225, 2,143,124,215,225,172, 64,240, 6,128,214,148, 2, 32,236,101, 78,175, 59,144, 93,247,209, + 22, 26, 29,109, 87, 25,113,111,111,239,217,132,144,145, 40, 29, 86,254,157, 82,169,124,234, 41,107,172,161, 80, 40,252, 8, 33, + 93, 41,165, 45, 24,134,185,194,113,220, 81,165, 82,249,232, 89,117, 61,129, 15, 59,118,238,188,114,196,212,169,172,234,212, 41, +172,220,188,121, 5, 10, 11, 1,160,122,201,121, 43, 16, 66, 72, 88, 88,155,183,157,156,208,135, 0,193, 32, 32, 12,104, 66, 94, + 62,115,240,210,165,248, 95,236,169,165,102,137,144,144,144, 3, 0,122,151, 45, 30,140,139,139,123,189,166, 26,143,239,112,159, + 75,132, 45, 94,122,124,251,196,231, 0, 94,171,186,221,160,150,142, 96,133,126,125, 88, 26,159, 6,224,235,167,109, 43, 0, 16, + 66, 28,220,221,221, 47,255,246,219,111,190, 97, 97, 97, 2, 0,136,141,141, 29,222,167, 79,159,110,101, 33,253,194,103,209,127, + 90, 58,116,232, 80,215, 96, 48,108,101, 9,105,207,113,156, 11, 0, 48, 12,147,111,164,244,130, 64, 32, 24,241,180,197,138,121, +120,120,120,158, 87,108, 26, 44,185,103,139,128,150, 45,253,167, 30,222,187,213, 47, 63, 47, 95,189,118,217,150,120,149, 64, 92, +210, 40,160,153,104,213,242, 47, 93, 38,124, 60,237, 99,185,103,139,139, 79, 30, 94, 79,182,247,164,222,222,222,245, 27, 54,108, +184,103,246,236,217,129,157, 59,119, 22,122,120,120,224,225,195,135,184,113,227, 70,224,217,179,103,251,255,246,219,111, 83,189, +189,189,223,180, 85,193, 29, 0, 28,197,162,198,191,124,185,196, 75,236, 82, 23,212,104,128, 75,203, 32, 0, 0,229, 56,100, 70, + 71,129,211,235, 65, 57, 35,124,123,245, 45, 93, 79, 41,218,181,107,103,223,196, 95, 85,240,245,245, 85, 52,111,222,252,167,153, + 51,103,138, 52, 26, 13, 18, 18, 18,112,254,252,121, 46, 59, 59, 59,210, 94, 13,207, 86, 3, 2,188, 4, 94,187,250,245,127,173, +225,235, 61, 61,196, 13,188,220,193,113, 82,220,184,171,171, 31,117, 58,190,215,193,195, 71,167,123, 4, 12, 24,152,157,188,247, +138, 53,157,192,192,192,246, 12,195, 44,206,200, 40, 45,237,164, 80, 40,150,134,133,133,125, 81,113,159,170, 30,149,227, 56, 8, + 4,130,135, 37, 37, 37,131,146,146,146,226,205,233,126, 62,154,232, 13,134,210,247,133, 64, 0,227,214,163,190,123,123,244,232, +209,104,212,168, 81, 8, 14, 14, 70,108,108,108,215,157, 59,119, 78,246,243,243,187,164,215,235, 15, 74, 36,146,232,251,247,239, + 63,213, 4,139, 34, 96,198,136,169, 83, 89,249,253,251,144, 39, 36,224,221,194, 66,193,151,192, 12,212,192, 96,133,132,132, 52, +126,165, 71,240,174,254,111,118,241,247,242, 10, 16, 9,133,245, 64, 41,133, 94,159,215, 60, 39,231,218,219,117,234, 96,102,187, +118,237,222,138,137,137,185,101,143, 94,219,182,109, 61, 57,142,219, 64, 41, 21, 17, 66, 38, 2,232,125,248,240, 97, 24,141, 70, +188,254,250,235,189, 67, 66, 66, 26, 83, 74, 87,203,229,114,170, 82,169,222,191,116,233,210, 67, 75, 90, 11, 39,248,180,207,191, +205,125,158, 37,104,210,235,197,208,145,200, 18, 28,233, 53,229, 85,239, 67, 46, 77,152,133,159,175,201,184, 0, 0,175, 53,109, +234,212,184,133,195,167,114,231, 64,215,130,140,168, 79, 95,107,218,116,211,161,219,183,139, 44,105,218, 66,161, 80, 44,219,186, +117,171, 95,251,246,237,203,139,228,182,105,211,134, 93,186,116,169,207,148, 41, 83, 86, 0,120,207, 78,157,230,110,110,110, 71, + 56,142,211, 92,189,122,181,185,105,189, 71,208,155, 29,221,156, 28,187,231, 60, 46, 58,149,123,245,183,147,246,104,133,134,134, +142, 18, 49,255,199,222,121,135, 71, 81,117, 97,252,189,179,125,179,155, 77, 79,216, 77,161, 36,132, 18, 2,132,132, 94, 2,138, + 72, 9,130, 10, 40, 69,138,130, 72,147, 15, 69,193, 70,149, 32, 72, 71,138,160,128,128, 32, 77,145, 46,189,151, 36,212, 0, 9, + 73, 8,164,247,158,205,182,153,251,253,145,108, 12, 49,201,110, 40,130, 58,191,231,217,103,103,118,102,222, 57, 51, 41,243,238, +185,247,158,203,124,191,248,139, 9,130,166, 45, 90,192,198,217, 21,134,228,100, 20,153,140,142, 23,175,221,234,243,205,146,239, + 51,130,130,130,198,132,133,133,253, 88,219,235,229,225,225,225,121, 81,177,104,176,164, 82,201,180, 25,159,127, 74,114,178,114, +181,134,130,124,131, 13,213,155, 84, 54, 50,146,159,158,145,123, 95,101, 83, 60,101,242, 36,217,167,211, 62,159, 6, 96,168, 37, + 45,160,212, 92, 53,105,210,228,242,186,117,235, 92, 29, 29, 29,145,151,151,135,172,172, 44, 92,190,124, 25,148, 82,244,234,213, + 75,218,178,121,243, 86,139,151, 44,185,160, 86,171,219, 91, 50, 89, 66,145,144,136, 20, 10,236, 10,110, 5, 70, 44,198,155,119, + 82, 0, 0,212,104,192,161,183,251, 2, 0, 4, 18, 9, 6, 69,167, 3, 0,100, 50,153, 53, 97, 86, 9,165,180,125,199,142, 29, +197, 0,240,209, 71, 31,229, 23, 21, 21,133, 18, 66,182, 38, 39, 39, 39, 89, 58, 22, 0,156,155,191,230,235,230, 82,231,212,183, +115, 71, 59,250, 55,240,134,222,104, 68, 98,122, 18, 40, 36,168,227,170,192,208,254, 45,197, 29,131,196, 13, 23,125,119,236,164, +155,127,191, 46,105, 55,127,187, 85,157,150, 66,161,216,180,116,233, 82,252,242,203, 47, 0,128, 19, 39, 78,192,215,215, 87, 97, + 41,134,187,119,239,122,143, 24, 49, 98, 27,128,134, 85,109, 55,153, 32, 12,253,122, 43, 0, 96,211,186, 33,130,168,168,168,250, +114,249,159,115, 41, 7, 7, 7, 35, 56, 56,152, 9, 13, 13,109,123,226,196,137,182,219,182,109, 51,184,187,187, 47, 77, 74, 74, +170,118,170,160,154,208,158, 62, 13,229,213,171,192,233,211,150,119,174, 68, 64, 64,128, 87,179,102, 46, 23, 22,125,251,149,203, +239,251,110,225,219,111,127, 68, 76, 76, 12, 0,192,219,219, 27, 67, 6, 15, 20,109,221,178,166,217,180,105, 51,207, 7, 6, 6, +118, 10, 15, 15,183, 88,221,156,227,184, 53,161,161,161,175, 41,149, 74, 76,155, 54, 45,170, 65,131, 6, 80,169, 84, 88,187,118, + 45, 28, 28, 28, 96, 52, 26,163, 22, 44, 88, 32, 76, 78, 78,198,242,229,203,127,192,159,217,173,191,208,165,119,240,151, 82, 81, +147,206,141,131, 70, 64,169, 82, 99,221,207,219,113, 55,108, 99,103,157,241,206,151,159, 77,112, 31, 38,160,210, 17,238,190,202, +105,245,131,186, 58, 53,108,214, 15,245, 2,175, 58,235,216,211,113, 95,142,247,158, 47,148,149,108,154,241,237, 95,179,132,100, +224, 78,129,127,254, 21,199,155,127, 40,178, 40, 45, 47, 26, 74, 80, 86, 3,171,142, 90,211,174,113, 81, 38, 0, 0, 32, 0, 73, + 68, 65, 84, 55, 56, 56, 88, 0,148, 26,236,248,248,120,232,245,122,248,249,249, 49,122,189,222,170,154, 86, 26,141,166, 81,151, + 46, 93,206,110,222,188,217,169,115,231,206, 25, 21,183,213,113,178,127,245,212,238,165,147,190, 94,182,165,137,171,223,235,185, +150,190, 8, 4, 5, 5,141,106,222,200,123,253,210, 5, 51,136,160, 40, 17, 66,251, 44,128,203, 66,202,182, 31, 0, 27, 71,244, + 25, 59, 5,173,219,182, 21, 76,154,252,217,250,214,173, 91,211, 43, 87,174,108,168, 73,143,135,135,135,231,159,130, 69,131,197, + 81,174,133,139,139,163,108,249,194,141, 97,106, 25, 67,234,120,104,136, 68,101, 47,132, 82, 33,101, 4, 34,173,183,183,135,152, +163, 92,149, 83,133, 84, 30, 97, 64, 8, 33,245,234,213,219,189, 97,195, 6, 87,145, 72, 4,142,227,224,226,226,130,184,184, 56, +228,228,228,160,176,176, 16, 49,183,111,163,158,167, 7, 38,141, 25,173,158,243,237,162,221,132,144,160,138,205,133,149, 53, 41, + 71,193,153, 30,109, 81, 35,132,160,170,246,197,234,166,145,177,118, 36, 4,199,113,247,147,147,147, 97, 99, 99,131,166, 77,155, + 42,175, 92,185,114, 38,201,156, 66,178,116,237, 3, 7, 10,212, 18,233,222,133,115,223,114, 36,130, 40, 68, 61,204,133,143, 71, + 27, 56,217,121, 34, 41,163, 16,225,145, 7, 16, 21,179, 31, 62, 30, 94, 24, 51,196,199,126,201,154,140,125, 36,240,125, 31, 26, +190,214, 88,149,102, 65, 65,129,210,203,203, 11,238,238,238,224, 56, 14, 44,203,226,214,173, 91,229,203,230,249, 18,205,203, 75, +183,158,131,131, 32, 19,111,189,222, 27,217,217,217, 74,107,175,221,108,174,118, 46,210, 52,211, 22,165,136, 1, 64,174, 80, 27, +222,156,146,116,171,117,235,214,112,113,113, 17,159, 63,127,126, 10,128,114,131,101,237,253, 52, 0, 11,150,109,216,176,124,104, + 94, 30, 3, 0,235, 9,225, 12,165, 85,181, 45,223, 79, 66, 72,143, 87, 2,246, 44, 89,242,165, 11,161,145,112,180,251, 6,151, + 47, 63,128,193, 80,250,147,207,202, 74,199,196,241,249, 16, 10,109,177,104,209, 12,167, 65,111,125,176,171,172,137,140,171, 78, +179,236, 51,241,157, 59,119,208,172, 89, 51,108,219,182, 77, 40, 16, 8,112,233,210, 37,200,229,114,140, 24, 49, 2,254,254,254, + 66,185, 92,142, 51,103,206, 32, 63, 63,255, 47,191, 80, 21, 53, 79, 31, 56, 53, 39, 39,246,196,151,169,130,195, 61,215,253,188, + 29,163, 7,191,133, 58,166,216, 51, 14, 62,204,156, 94,125, 58,124, 37, 16,121,134, 40,108,253, 29,124,253,251, 65, 44, 81, 98, +194, 39,179, 17,117,115,175, 67,113,193,141,241,172, 49,193, 19,192,135,149, 53,233,142, 1,236,226,141,174,129, 71,189, 34,234, +106, 2,223,191,148, 18,241,253,245, 63,207,222, 84, 8, 70,107, 95,118, 12,238,221,187,135,152,152, 24, 8, 4, 2,104,181,218, + 71, 38, 10,174,168,217,170, 85,171,247, 89,150,253, 10, 0,244,122,253, 70, 55, 55,183, 81, 43, 86,172,112, 18, 8,254,156, 41, +202,156,185,202,206,205,207, 57,127,229,214,221, 41,239, 15,232,122,250,226,205, 4,251,150,253, 31,230, 94,251, 53,175,170,251, +217,190,125,123, 7,137, 64,240,253,178,111,103, 17, 54,246, 24,164, 77,187, 66,168,244, 5,107, 76, 66, 73, 78, 33,180,113,169, + 48,172, 93, 9,239,177,147,177,112,193,215,100,240,176,119,191,247,241,241,217, 29, 83, 33,131,247, 44, 70, 41,241,154,188, 38, +175,249, 98,106,254,219,176,104,176, 8, 97,242, 13, 6,163, 72,229,233,110,124,243,141, 46,205, 35, 46,221,140, 82, 58,218, 49, + 45,219, 52,247,187, 25,149, 24, 14, 19,107, 32,132,177,170, 95,135,135,135,199, 91, 51,102,204,104,174, 82,169,192,113, 28,236, +236,236,144,145,145, 1,131,193,128,252,252,124,232, 10, 11, 96, 40,200,199,181,135,241,232,212,181, 43, 94,105,223,190,233, 1, +163,241, 45, 0,219,170,211,100, 25, 1,117,106,213, 6, 3, 99,179,192, 25,244,216,225,237, 4,160, 52,107,245,118,124, 46, 8, + 33, 96,245, 58, 28,104,211, 16, 82,165, 2, 45,166, 86, 59,101,160, 69, 82, 82, 82, 34,234,214,173,123,176,103,207,158,189,198, +140, 25,195,164,166,166, 30,114,115,115,235,152,150,150,102,177,121,212, 53,154, 29, 49,124, 76, 43,111,103,123, 6,191,159, 59, +140,118, 77, 94,135,141, 84,132,140, 28, 45, 24, 66, 16,115,255, 40, 88, 86,129,107,119, 30,162,189,191, 2,157,219,218,121, 20, + 30,203, 30,131,234,155,203, 72, 78, 78, 14,210,211,211, 97, 52, 26, 97, 50,153, 48, 96,224, 64,108,218,184, 17, 69, 69, 69, 40, + 41, 41,129, 94,175, 7,199,149,250,137,212,140, 66, 92,190,118, 8, 65,205, 27, 1, 53, 84,252, 22, 10, 97, 90,177,116,136,208, +214, 6, 16, 75, 93, 12, 5, 5, 5, 80, 40, 20,208, 22,165,136,135,143, 46,207,108,137, 79,156, 56,129,240,240,112,104, 52, 26, +224, 49,103, 4,136, 1,190,191,207,178, 95,244,218,179,199,245,220,158, 61,220,197,223,127, 79,148, 22, 20,172,181,230,216,182, +109, 3, 6, 76,152,208,167,169, 92, 38, 71,226,195,165,104,210, 68,140,143,254,231,132,208,111, 50, 1, 0,147, 38,120, 32, 40, +200, 9,249,185, 59,225,236,250, 25, 62,154,210,223,167,176,144,190, 3, 96, 99, 77,186,132,144,137, 91,182,108,137,234,209,163, +135, 48, 34, 34, 2, 82,169, 20,114,185, 28, 50,153, 12,114,185, 28,169,169,169,208,235,245,216,177, 99,135,169,172, 9,177, 90, +202,154, 1,123, 77,233,161, 62,120, 55,108, 99,103,119, 38,238, 90,255, 41, 29,238, 71, 92,186, 86,120,252,216,185, 57,166, 18, + 89, 66,110,226, 31,159, 54,104,125,205,121,252,212, 89, 88,185,112, 6,238, 94, 58,149,237,230, 85,240, 29, 75,116, 27, 59, 86, + 81,231,190,107,215, 89,194,113, 95, 12, 54,142, 27,245,166,221, 62,245,249,209,251,132,200, 76,203,190,241, 45, 98, 47,107,165, +190,205,134, 53,106, 64,244,199,143, 31,151,119,233,210, 5, 90,173, 22, 0, 32, 16, 8,176,101,203, 22,206,100, 50,157,168, 42, + 78,163,209,248, 85,120,120,184,186,184,184, 24,131, 7, 15,158, 52,115,230, 76,133, 72, 36, 2, 0,176,108,233,108, 85,230,204, +213,220, 37, 63, 29,158,252,213,119, 39, 14,111,251, 70, 51,119,218,168,174, 67, 39,124,125, 2,192,161,170,116, 77, 38,211,166, + 37,223, 76, 23, 72,237, 13, 32,173,123,192,144,174,197,131,245, 99,160,207,211,162,209,156,217, 0,196,208, 27, 4,216,215,127, + 32, 4,142, 26,188,215,165,163,112,237,169,179,155, 0,244,175,233,190,242,240,240,252, 39,105, 13,192,165,108, 57, 19,165,207, + 49, 39, 0,230, 44,187, 11, 0, 61, 0, 73,133, 99, 42,175, 87,220,183,242,122,197,229, 76,148,246,109,118, 1,192, 2,184, 12, +160,214,253, 68, 25, 0, 32,132,148, 39,124, 42, 46, 3, 0,199,113,167, 99, 98,227,181, 93,131,131,212, 39, 46, 71, 71,244,124, +253,149, 54, 93, 94,106,219, 46, 45, 43, 63,182,142,139, 74,113,254,210, 69, 41,199,113, 86,181,239,136, 68,162,144, 78,157, 58, + 9,115,114,114, 96, 99, 99,131,140,140, 12, 36, 37, 37,193, 96, 48, 64,155,151, 11, 93,110, 14,180, 57,217, 48, 22,228, 34,230, +202, 37, 52,246,114,151,150,117,130,183,138,202, 25, 42,243, 12,246,132, 97, 32, 83,217, 66,174, 82, 65, 32,168, 93,101, 10,141, + 70,211,175, 73,147, 38, 23,221,221,221,191, 0, 0,189, 94, 63, 62, 52, 52, 52,147, 82,138, 79, 63,253, 84,165, 82,169,118,212, +171, 87, 79,106, 73,199,214,145, 29,208,182,121, 67, 65,212,131, 27, 8,242,125, 19,245,213, 93, 16,147,148,135,140,188, 18,164, +102, 23,161, 81,163,169,112,209,140,134, 93,157,177,184,113, 55, 1,234, 58,245, 25,129, 72,220,179, 38,205,212,212,212, 71,214, +127,222,186, 21,197,197,197,104,216,176, 33,222,126,251,109,124,242,201, 39,120,235,173,183,160,209,104,208,185,161, 16,163,134, + 13, 64,122,122,122,141,113,206, 89, 71, 69,243,183,170, 35,134,207,160, 17, 13, 95, 62,120, 43, 38, 38, 6, 81, 81,127,109, 89, + 59,118,236, 24,242,242,242,202, 31,192,214,224,230,230, 54, 93,173, 86, 95, 87,171,213,183,212,106,245,129, 52,141,230,142,209, +219,219,173, 99,255,254,196,111,208, 32, 65,130, 66, 65,238,123,122, 42, 45, 43, 1, 42, 21,250, 4, 5,117,146,228,230,252, 8, +160,212, 68,142, 26,233,130,179,167,154,225,220,153, 64, 76,156,224, 13,134,200, 64, 24, 49,138,139,142,193,175,153,191,216,214, +150,214,248,187, 84,214,161, 61,182, 89,179,102,194, 15, 62,248, 0, 82,169, 20,155, 54,109,194,234,213,171,177,120,241, 98, 68, + 69, 69,161,110,221,186, 80,171,213,112,115,115, 19, 2,136, 45, 59,166, 70,236,125,152, 57, 58,227,157, 51, 14,190,138, 88,194, +184,118,208,153,100,111,206,248, 54, 57,107,206,119,177,139,238,223,213,122,223,185,116, 42, 43,234,230,111, 92,220,149, 19,153, +201,209,133,222,115,190,139, 93, 52,111,101, 82,118, 85, 90,167, 78,205, 96,127, 61,112,202, 80, 84, 88, 44,236,215,235,101,237, +216,145,111, 55,114,180,105,188, 5,238, 61, 2,234,121,170,135,205,152,183, 92,255,222, 7,147, 13,235,127,248,145, 22, 20, 20, + 32, 63, 63, 31,203,150, 45, 51,253,254,251,239, 73, 44,203, 78,174, 38, 68, 1, 0,152, 76, 38, 12, 28, 56, 80, 33,151,203,145, +144,144, 80,158, 5, 5,128,148,140,172, 27,231,174,220,188, 51,101,236,192,224, 34,157, 78,119,248,100,216,109, 63,223,186, 30, +132,208,122,213, 93,183,128,144,118,205, 90,180, 0,165,185, 96,132, 94, 72,252,233, 91,104, 83,179, 81,156,145, 13, 70,164,128, + 17, 50, 24,168, 4,178, 22,109,240, 32,252, 42,220,148, 42, 8, 9,233,104,233,126,242,240,240,252, 59,169,201,139, 0,112, 33, +132,236, 35,132,236,155, 62,125,122, 55, 0, 78,132,144,125, 40, 53, 65, 46,101,203, 18,243, 62,213,172,187, 84,212,169,116,108, +197,101,231,233,211,167,191, 68, 8,217,215,161, 67,135, 97, 40, 53,114,181,198,162,219, 16,148,232, 67,167,127, 49,131, 81, 41, + 37,182,126, 77,235, 59,252,126,228,116,196,185,139, 87,111,219,218,200,164,133, 69, 69,146,197, 43, 86,123,145, 98,173,181,157, +188,155, 58, 59, 59,195, 96, 48,224,222,189,123, 72, 76, 76,132,193, 96,128,169,184, 8,186,220, 92,148,228,228,128, 43, 46,132, +152,229,160,205,204,128,131, 76, 2,252, 57,194,176, 90, 40,165,229,102,170, 34,230,117, 66, 8,100, 42, 91, 72,108,149, 96,132, +130,170, 36,170, 68,173, 86, 7, 6, 4, 4,252,114,252,248,241,182,157, 58,117,154, 83,175, 94, 61,187,212,212,212, 7,105,105, +105, 47, 47, 92,184, 80,231,226,226,130,161, 67,135, 54, 54, 26,141,195, 45,105,137,101,186,230,117,221,124,225,229,214, 15, 26, +167,118,200,202,215, 33, 35, 87,139,212,172, 98,108,223,245, 54,254, 56,248, 54,174,158, 25,134,123,151, 70, 33,171, 72, 5,153, + 99, 55, 0,180,198, 10,186, 23, 47, 94,196,154, 53,107,202, 95, 43, 87,174, 68,118,118, 54,154, 53,107,134,132,132, 4, 28, 58, +116, 8,169,169,169,112,113,113,193,213,171, 87,177,118,237, 90, 92,186,100,213,220,181,143, 80, 82, 82, 2,145,196,201,176,105, +221, 16,108, 90, 55, 4, 44, 85, 24,204,219,106, 83,168,150, 97,152, 17, 41,253,251, 55, 79,177,183,247,107,209,162, 69,175, 65, +131, 6,121,183,109,219,182,124,187,143,143,143,151, 80, 40, 76,213,104, 52,235, 53, 26, 77, 64,141, 98, 28,109,229,224,216, 20, +122,221, 29, 0, 0, 33, 66, 16, 34,197, 75,175,220, 70,199,206,225, 48, 24, 37, 32,140, 20, 12,145,193,100,202,130,202,214, 13, +148, 90,172, 72,220,251,208,161, 67, 88,179,102, 13,226,226,226,202,155, 71, 67, 66, 66, 38, 14, 30, 60,120, 55,203,178,216,183, +111, 31,126,253,245, 87, 52,104,208, 0, 1, 1, 1, 48, 24, 12,213,246,193, 50,243,229,202,164,139, 91, 23, 31,124, 91,100,178, + 15,144, 72,235, 54, 96, 10,108,250,141,239,234,162, 0,128,131, 49, 49, 5,110, 94, 5,243,139, 11,110, 62,116,240, 40,250,198, + 82, 7,119, 74, 65,195,162,110, 93,218,182,235, 72, 94, 90,102,150,168, 85, 75,127,237,215,179,166,138,235,213,111,184, 96,198, +167,227,220,146,242,101,121,175, 76, 58,120,103,247,161,203,133,239,140, 26, 99,122,119,204,132,146,195, 71,142,237,225, 56,174, + 69,117, 35, 8, 57,142, 67, 74, 74, 10,110,222,188,137,184,184, 56,100,102,102, 34, 35, 35, 3, 5, 5, 5,229,205,138, 54, 5, +249,251, 87,110,248,253,154, 66, 46,183,105,219,220,215,235, 82, 68,100,186, 66, 46,183,241,173,239,213,136,144,170, 39,160,230, + 56,206,190,244, 30, 18, 20,220, 60,141,146,236, 2,104,115, 11,161,205, 46,132,206, 32, 64,137,142, 65,137,129,129,115,231, 30, + 40, 44,210,162, 36, 59, 23, 28,165, 14,150,238, 39, 15, 15,207,127, 23, 74,105,200,252,249,243,231,213,180,189,194,187,190,210, + 58, 8, 33,251, 40,165, 33,148,210,144, 50, 51, 5,243,231, 21,117,230,207,159, 63,143, 82, 26,114,254,252,249,159, 1, 20, 63, + 78,172, 22,155,118, 50, 51,163, 10, 85, 46,126,111, 76,254,244,171, 3, 91,214, 45,119,205,206,206,137, 18,203,228, 37, 50,153, +196,241,147, 79,103,217, 23, 21,231,189, 81,152,109,253,168,167,156,156,156,242,135,151, 88, 44, 6, 91, 92, 4, 86, 91,140,146, +156, 44, 16,131, 14, 98,150,133,163,141, 13,188, 52,110,168,231, 86,199,162,158,128, 99, 73,242, 31, 7,112,120,216,235,143, 52, + 11,114, 6, 61, 14,117,104, 12,137, 82, 1,185,189, 3, 58,253,122, 6, 0, 32, 22,139,129, 25,223, 88,212,173, 83,167,142,179, + 70,163,217,187, 98,197, 10,113,102,102, 38,110,221,186,117, 45, 62, 62, 62,207,209,209,209, 86, 36, 18,113,209,209,209, 71,239, +222,189, 27, 82,191,126,125, 80, 74,125, 44,233, 21,228, 42, 12, 6, 35,135,164,244, 7, 72, 76,185, 9, 59,165, 23, 40,227,137, +180,236, 98, 16,184,194, 88,114,183,188, 47,153, 78,155,136, 34,157,117,243,246, 26, 12, 6, 24,141, 70, 24,141, 70,232,245,122, +188,243,206, 59, 56,127,225, 2,182,254,122, 18, 9, 9, 9,104, 80,199, 6,111,191, 53, 16, 45, 91,182, 68, 88, 88,152, 85,154, + 85,225,219,253,240, 45,185, 92,142,213,171, 87,195,198,198,166,252,115,107, 13,150, 90,173, 94,212,164, 73,147,134,119,139,138, + 16,121,231, 14,218, 12, 28, 8, 0, 56,123,246,108,249, 62, 90,173, 22, 67,134, 12,145,196,197,197,189,123,231,206,157,119,213, +106,245,226,148,148,148,143,170,211,220,191,255, 2,198,142,141, 68, 70, 70,105,102,119,251,207,126,229,219,238,199, 25,208,179, + 79,105,203,149,189,189, 61, 22, 45,178,110,182, 7,150,101,177,118,237, 90,200,229,242,114,131, 37, 22,139, 59, 78,153, 50,229, +141,170,246,247,243,243,171,234,227, 71,152, 50,208, 67,118,245,129,124,188, 93,195,250,254,118, 46, 45,144,105,186,218, 60, 34, + 41,117,226,148,129, 30, 75, 23,239, 72, 44, 97,137,110, 35,107, 76,240, 20,202, 74, 54, 89, 19, 99,204,193,229,122,135, 6,239, +111, 74, 77,207,251,124,194,152,161, 78,246, 14,110,133,235, 87,132,218, 51, 12,131,223,195,245, 57,205,188,157, 28,250,181, 91, + 86, 56,246,127, 95, 70,232, 77, 15, 38, 34, 97,223, 93,160,202,110,137, 0, 74, 13, 86, 82, 82, 18, 50, 51, 51,241,240,225, 67, +100,100,100,128, 16,130,140,140,140, 90,101, 40, 43, 67, 8,129, 62, 49, 9,169,123,126, 64,157, 33, 67,209,104,246,108,112,156, + 8,218, 98, 19,118,118,126, 25,249,121, 90,232, 57, 2,251,192, 14,120,101,223, 25, 48,156, 9,184,112,254,177,207,199,195,195, +243,239,135, 16,178,111,218,180,105,159, 89,185,251, 81, 0, 86,149,214,169,108,184,166, 77,155,246,153,249, 92,161,161,161, 90, + 0,201,181,141,213,170,190, 51,249, 25,145,177, 78,117, 91,164, 20, 22,107,101, 14,142, 14,197,182, 74, 9,205,203,205, 19,220, +185, 23, 85, 82,152,114,239,110, 45,206,119,251,214,173, 91,254, 73, 73, 73,120,248,224, 1,140,197, 69, 32,122, 29, 80,162, 69, +247,206, 29, 33, 3, 32, 35,128,152, 51, 64, 32,144,160,176, 48, 31, 0,110, 91, 18,229,140,229,253,192, 31,109, 22,180,181,133, + 68,169,128, 84,101, 91,190,205, 90,228,114,249,214,181,107,215,170,213,106, 53,150, 44, 89, 2,181, 90,221,164,123,247,238,197, +193,193,193,114,103,103,103, 52,106,212, 8, 65, 65, 65, 56,113,226, 4, 8, 33, 49,150,244, 76,122, 73,248,237, 88,214, 51,191, +240, 42, 46,133,111,134, 81,175, 71,125,223,233,208,153,156,161,112,125, 23, 90,195, 94, 24,114, 79, 2, 0, 36,170,174, 72, 75, +203, 4, 64,106,236, 68, 88,217,220, 80, 74,113,253,250,117,108,220,115, 22, 94, 77,187, 34, 53,251, 16,110,222, 12,131,155,195, + 17,248,250, 53,131,177,194,125,178,132,181,198,201,218, 7, 48, 33,100,200,244,233,211,145, 39,151, 3,125,250, 64, 28, 27, 11, +131,193,128,118,237,218,161,117,235,214, 0,128,118,237,218, 65, 32, 16,160, 97,195,134,112,116,116,196,238,221,187,135, 0,168, +210, 96, 81, 66,174,114,108, 86, 19,111,111,239,114,131,181,233,167, 12, 68,132,117, 7,129, 4,203, 87,254,249, 35,241,242,242, + 66,106,106, 28, 8,177,216, 41,243, 64,159, 62,125,122, 59, 56, 56, 96,228,200,145,144,203,229,120,253,245,215,161,213,106, 7, + 1,192,252,249,243, 49,125,250,116, 0,192,140, 25, 51, 48,115,230, 76, 20, 23, 23, 87, 91,162, 98,205,215, 45, 52, 5, 90,110, +148, 90,173,121,189,155,115,253, 22, 47,189,218, 29, 13,124, 95,198, 75,175, 38, 0,192, 60,103,209,253,129, 11, 62,247,223, 83, +223,211,113,195,249, 95,143,126,213,169, 87,183, 47,102, 77,114,156, 51, 99,121,182,197, 47, 44,185,247,191, 47,184, 35,234,187, +116,249, 26,211,146, 25,159, 77,145, 62,200, 52,100, 39,231,112,133, 10,169,208,214,199, 13,202,137,159,204,137, 75, 78,190,247, + 49, 18,142, 88, 28, 57,201,178, 44,226,226,226,160,211,233,192,178, 44,116, 58, 29, 10, 11, 11,145,152,152, 88,254,243,213, 42, + 84, 61, 39,140,236,219,178, 72,171, 45,190,116, 35,250,225, 23,147,134,182, 47,210,106,139,163,239, 63,140,162,116, 89,149,117, +198, 8, 33,185,197, 5,133,142,250, 2, 35,114,175, 69,193,249,165,186,208,155, 8,116, 38, 1,178, 51, 11, 96, 96, 1, 35, 35, +130,199,128,119, 96, 34, 66,228,103,164,130, 33,132,175,135,197,195,195, 83, 45,102, 35, 20, 26, 26,106,117,247,161,218,106, 3, + 64,104,104,232,173,208,208,208, 39, 58,151,217, 96,117,173,208,222,217,181,242, 78,132, 16, 18,208,194,203,125,222,103,111,104, +140, 70,125,147,194,194, 66, 86, 40,148, 8, 61,237,180,169,149,247,173, 9,163,209,184,239,204,153, 51,253, 59,119,238, 44,141, +190,113, 13,186,188, 60,232,242,114, 33,230, 76,112,148, 5,129, 49,234, 65,244, 58,184, 55,230,160,205,151,225,194,149,187, 70, +163,209,184,175, 38, 77, 10, 74, 57, 83,169,113, 96, 24,193, 35, 77,133, 82, 91, 37, 36, 74, 37,164, 74,219, 42,155, 16,171,195, +205,205,205,166, 87,175, 94, 47,183,106,213, 10,148, 82, 44, 92,184, 16,122,189, 94, 98,206, 20, 25, 12, 6, 20, 20, 20, 96,215, +174, 93,248,233,167,159,206,217,217,217, 89, 28, 90,206,153,116, 7, 79,156,187,214,123,216,235, 47, 73,254, 56,185, 30, 70,157, + 9,133, 58,123, 20,149,232, 81,160, 21, 65, 47,125, 21,132,156, 1, 35,144,162, 67,128, 15,142,159,141, 46, 97,141,134, 42, 59, + 15,255,229, 30,148,153, 33, 66, 8,116, 58, 29,210,211, 51,144, 93,112, 2, 40, 72,130,179,161, 0,133,247, 99, 16,240,206,112, +232,245,122,139, 90, 95,142, 38,198,105, 67, 32,252,105, 54, 3,145,196,201,224,219,253,112,181,165, 34,148, 74,101,121, 31, 29, +107,200,207,207,199,230,205,155,209,174, 93, 59, 4, 7, 7, 35, 41, 41, 9,177,177,177,232,221,251,207, 86,182,107,215,174, 33, + 34, 34, 2, 62, 62, 53, 39, 5,243,243,233,129,236,236,123, 3,251,245,235, 39,190,120,241, 34, 40,165,240,245,181,131,202, 86, + 9,194, 72,209,180,169, 11,128,187, 32,132,160,107,215,174, 48, 24,146, 77, 69, 69, 56, 80,147,102,120,120,120,159,192,192,192, + 6, 70,163, 49,202,223,223, 95,152,154,154,138, 1, 3, 6, 96,251,246,237, 0,128,105,211,166, 97,218,180,105,143, 28, 83, 88, + 88, 88, 82,157, 94,203, 54,141, 62,102,169, 83,176, 68, 90,183,129,157, 75, 11, 52,240,125, 25, 0,240, 74,200, 40, 52,104,232, +137,188,140,235, 13,244,186, 7,175, 11, 72,150,195,150,139, 73,145,157,109,252, 71,102, 38,156,140, 6, 96,177,112, 47,165,148, + 18, 66,210, 30,138, 84,191,236,252,109,223,251,125,251,190, 38, 52,178,156,201,223, 75,104,183,125,247,254,244,164, 7, 15,151, +225,225,145, 91, 21,247,175, 78,139,101, 89, 54, 55, 55, 23, 74,165, 18,177,177,177,186,190,125,251, 74,181, 90, 45,162,163,163, +203, 13,150,171,179,163, 95,199,214,254, 77,230, 46,249,233,176, 66, 42,149,190,218, 53,168,105,100,244,131, 68, 74, 73,124,181, +186,148, 94,140,190,125,187,143,139,179, 23, 82, 78,158,135,162, 83, 47,232,116, 4, 37, 6, 14,122, 22, 48, 9,196,176,107,217, + 6,114,239,166,224, 40,112,251,198, 53,152, 40, 61,103,233,218,121,120,120,254,181,212,232, 69,128,210, 12, 86,251,246,237,183, + 1,127,102,153,204,203, 0,116, 0,106,234, 19,157, 81,209, 68,153,155, 13,171, 59, 79, 37,221, 90, 35, 44, 59,201, 41,212, 48, +178,204,217,217,217,181,105,227,102,222,235,126, 88, 15,131, 46, 15,177,145, 27, 80, 84,144,134, 47,231, 93,240,241,240,240, 8, + 78, 76, 76, 60,101,205,201, 18, 19, 19,183,239,222,189,251,163,150,205,154,181,170,231,225,129,235,241,247, 33,166, 44,196, 44, + 11,198,160,131,144,213,195,195,143, 3,195, 40,144,154, 90,128,181,135,142,221, 76, 76, 76,220, 94,147, 38, 75, 4,240,236,251, + 38, 6,191,210, 7,212,104,192,145,206,126,144, 41,149,144,218,219,163,195,174,147,165, 37, 27, 76, 70,196,207,159, 10,177, 66, + 9,199,118, 85,254,204, 30, 33, 45, 45,173,184, 97,195,134, 97,119,238,220,105,221,184,113, 99,204,154, 53, 11, 9, 9, 9,160, +148, 34, 61, 61,189, 36, 35, 35, 35, 41, 43, 43, 43,158, 16,178, 39, 57, 57,121,157, 53,149,194,211,125, 5, 27,255, 56,122,236, +227,192, 0,191, 70,221,131,103, 98,223,190,175,144,155,159,143, 34,157, 16,133, 90, 3,138, 74, 40, 52,182, 62,104,219,162, 21, + 50,178,244,136,190, 21,158,152, 41,118,252,222,154,251,106,134, 16,130,107,215,174,161,174, 35, 65,100, 84, 4,156, 75,178,209, +216, 94,137, 86,157, 58, 35, 46, 46, 14,128,229,204,148,201, 4,225,196,201,127,142, 22,180,183,183, 71, 94, 94,222, 35,199,217, +216,216, 64,163,209, 32, 63, 63, 31, 59,119,238, 4,181,238,161,104,212,235,245,104,210,164, 9,174, 92,185,130,163, 71,143,226, +165,151, 94, 66,151, 46, 93,112,242,228, 73,132,133,133, 33, 34, 34, 2,132, 16, 56, 57, 57,153,179,109,213,166,220, 46, 95,190, +182, 67,169, 36,211, 71,142,252,192,127,232,208,161,216,181,107, 27, 70,141,108, 12,194, 72, 65,136, 20,175,245,109,130,217,115, +194,208,182,109, 87, 56, 59,139,113,244,232,173, 56,161,208,238, 39, 75, 65, 82, 74, 87, 44, 88,176, 64, 40,147,201,160,215,235, + 81, 88, 88,136,172,172,210,114, 84, 85,101,176,180, 90,109,181,133,213,110, 93,189,187, 40, 39,159,230, 48,197,225,175,103, 26, +175,182,120,233,213, 68,188, 18, 50, 18,127,236,219,128,227,135,143,194, 89,116, 63,142,149, 23, 30,204,136,203, 44, 72, 46,244, + 93,235, 23,244,158, 32,165,232,240,154,241,253, 28, 4, 30,106,110,199,180, 85,121,185,150,226,205,142,220,188,119, 47,197,107, +157,218,181,241,105,238,165,145,100,103,165, 99,247,111, 7,111, 25,238,239,218,135,210,102, 65,107, 82,145,179,151, 47, 95,254, + 21, 0,112, 28,183,113,201,146, 37,239,125,252,241,199, 46, 73, 73, 73,229, 6, 43, 61, 51,251,120,135, 62, 19,217,172,220, 60, +253,143, 75, 62, 25, 32,151, 73, 37, 95,204,255,241,164, 81,128,139,213,137, 10,133,194,225,159,173,218,146,177,115,199, 6,129, +139, 76,140,179,159,206, 64,236,177, 19, 48, 16, 49, 94, 61,114, 9,122, 3,139,252,244, 44, 28, 31, 57, 14, 14,106, 71, 28,200, +138,102,243, 10,242, 45,246,103,228,225,225,249,119, 98,193,139,100, 84, 48, 68,217, 0,226, 67, 67, 67, 51, 43,100,151, 50, 0, + 92, 3,208,178,108,191,140, 74,199,101, 0,184, 2,160,117, 5,157,140,178,243,134, 84, 90,214, 87,218,231,218,227, 92,143, 85, + 77,132,153,153,153,233,151,195,110,226,220, 31,171, 97, 50,234,144,151, 93, 90,251, 51, 57,173, 4, 42,149,234, 66,117,199, 85, +158,109,155, 82, 74,213,106,245, 27, 75,150, 46,189,248,254,240, 97,117,186,188,252, 50, 30,220,184, 14, 93,118, 38, 4, 44, 11, + 1, 17,161, 48, 83,134,180,212,124,132,238, 61,152,174, 45, 41,121,163,242, 55,239,170,102,240, 54,119,114,167,132, 64,102,167, +130, 84,161,128,212, 78,245,103,198,138, 16, 72,148,182, 16, 41,148, 16,136, 43,142,216,172, 94,179,184,184,248,205, 49, 99,198, + 92, 63,112,224,128,195,224,193,131,241,218,107,175, 69,228,230,230,118,203,206,182,220,124, 83,229,181,239,216,193, 58, 55,127, +173,223,119,171,215,157, 31, 49, 98,132,227,107,253,190, 67, 68,228, 45,228, 22,185, 2, 0, 52,206, 10,180,109, 60, 21,233, 89, + 58, 28, 62,184, 47,135, 51,149,188, 73,111,110, 51, 86,167, 73, 41,165,206,206,206,143,100,229, 4, 2, 1, 78,158, 60,137, 15, + 63,252, 16,206,182, 39, 81, 16, 31,139,230,157,131,241,202,208,225, 24, 53,106, 20, 4, 2, 1,156,156,156,128, 10, 15, 93, 75, + 51,162,231,229,229,161, 94,189,122, 56,178,174,113, 51,125, 73,186,184,149, 35, 64, 96,103,248,227,120,239, 91,167, 79,159, 46, + 4,176,206,215,215,247,145, 34,163, 85,105, 18, 66, 62,159, 55,111,222,234,142, 29, 59,202,149, 74, 37,124,125,125,113,238,220, + 57,156, 59,119, 14,103,206,148,246,143,115,114,114,130,163,163, 35,114,115,115,145,144,144,160, 37,132,124, 94,237,253,164,148, +107,221,186,117,255, 63,254,216,115,169,111,223, 55,156,123,246,108,143, 58,117, 10, 96, 50,101,130, 48, 98, 72,101,174, 88,183, +110, 62,210,211,178,113,254,194,133,236,194, 66,225,155, 97, 97,143, 78, 65, 84, 77,156,134, 67,135, 14, 65, 38,147, 97,215,174, + 93, 38, 55, 55, 55,161,189,189, 61,128,170, 51, 88, 37, 37, 37,210, 74,199,151,107,190,247,201,141, 36, 0,115,166, 12,244,248, +246,252,173,180,254, 0,182, 54,104,232,129,227,135,143,226,204,241,243,211,218,249,115,203,251, 12,105, 51, 91,246,210,160,169, +126,129,239, 9,148, 42, 53, 54,237,222, 37,136, 12, 95,255,117, 73,209, 77,111, 0, 83, 45,252,140, 40, 0, 20,166,167, 77, 15, + 93,188,114, 99,232,172,175,228, 11,151,173, 74,214,102,166,126,134,210,161,149,180,226,126,213,197, 25, 27, 27,187, 22, 64,121, +121, 12,141, 70,179,121,254,252,249,167,135, 13, 27,230, 98,206, 80,166,223,250,237, 2,128, 11,254,221,222,253,178, 67,235,102, +141,191, 94,182,229,240,195,132,180, 45,185,145,165, 53,176,170,138,243,194,133, 11, 57, 65, 65, 65, 99,166,126, 58,115,253,172, +217, 51, 72,147,201,211, 16,117,238, 10,116, 90, 3, 12, 84, 0, 35, 8,194,231, 46,134,173,139, 10,103,105, 54,213, 9,152,209, + 49,149, 58,249, 91,250,253,124, 28,120, 77, 94,147,215,124, 49, 53, 45,112,165,138,207,170,154, 73,163,242,126,150,214,159, 25, + 86, 25, 44,119,119,247, 46,175,188,220, 14, 29, 95,249, 0, 6, 93, 46, 98,111,253,136,194,130, 52,184,215,145, 34,246, 97,126, +123, 0,167,172, 61, 97, 74, 74,202, 67,181, 90,221,238,235,165,203,119,191,218,166,117, 83, 95,119,181,212,190, 94, 93, 40, 92, +221,144,153,145,129, 75,225, 81,198, 85,135,143,223,212,150,148, 88, 53, 85, 14,199,113,148, 82, 10,177, 88, 12, 42, 16,192,111, +226,167, 96, 24,166,210,104, 65, 2, 85, 80, 39, 48, 66, 17,140, 86,246, 25, 74, 78, 78, 78,116,119,119,127,115,226,196,137,199, + 54,110,220,200,116,237,218, 53, 96,239,222,189,143, 61,167, 29, 0,100,222,216, 27,237,214,252,245,224,229, 43, 86,237,108, 21, +212,174,110,189,250,245,164, 29, 61,237, 96, 48,178, 72, 75,207,194,169,243,145,186,232,200,107, 9,156, 65, 63, 48, 61,178,250, + 42,238, 0, 96, 52, 26, 31,106, 52, 26,183,153, 51,103,194,100, 50,129,101, 89,152, 76, 38,100,102,102, 34, 34, 34, 2,129,237, +218,163,201,187,239, 33, 59, 59, 27, 63,252,240, 3, 60, 60, 60,208,187,119,111, 20, 20, 20,224,244,233,211,213,222, 87,161, 16, +166,233,159, 15, 17, 2,128, 72, 4,211,103, 33, 33, 39,155, 53,107,214,233,181,150,233,226, 15, 38,150,102,182,190,153, 63, 68, +124,242,228,201, 29, 82,169,116,109, 92, 92, 92,141, 53,208,124,124,124, 36, 37, 37, 37, 1,148, 82, 97,126,126,254, 82,157, 78, + 55, 98,202,148, 41,234, 5, 11, 22,160, 69,139, 22,200,204,204,132,163,163, 35,212,106, 53, 10, 11, 11, 17, 23, 23,199, 26, 12, +134, 53, 44,203,206, 78, 75, 75,203,168, 73,251,202,149, 43,247, 91,181,106,213, 62, 45,117,245,238, 15,198,246,240, 53, 26,131, + 36, 42,187,206,160,212,132,220,156, 4, 16,122,221,176,231,215, 99, 49,185,185,130, 55,194,194,194,162,107,210, 50,195, 48,204, +216,223,127,255, 29,230,169,114,146,147,147, 99, 25,166,116,144, 92, 85, 25, 44,107, 88,188, 35,177, 4,192,207,223,254,175,253, +228,188,140,235,141,156, 69,247,227,218,249,115,203, 23,239, 72, 44,249,230,125,135,185, 73, 25, 39,163,146, 11, 15,175,221,180, +123,151, 96,248,235,111,178,106,101,244, 52,103, 79,236,232,246, 90,205,186,148, 82,218,178,101, 75, 47,134,201,174,159,158,117, + 55,108,212,232,247, 7,217,137,181, 7, 90,184,103, 54, 52,185,249,201, 34, 35, 35,227,203,118,179,126,168, 39,128,228,228,228, + 40,141, 70,211,101,209,162, 69,135, 81, 41, 53,158,158,153,125,188,125,200, 4,154,155,155,119, 53, 61,242,183, 26,171,184, 3, + 64, 88, 88,216,143, 65, 65, 65,120,103,216,168,239, 71,191, 59, 70,224, 63,233, 19, 36,158, 56, 6,152,140, 72, 57,115, 10, 54, +182, 44,246,101,198,179,197, 2,102, 76, 88, 88, 24, 95,197,157,135,135,231, 95, 3,177,246,127,175,143,183,199, 97,239,250,238, + 61,188,235,107, 0, 0,177,247,147, 17,123, 63,233, 72, 76,108, 98, 21,229, 16,203,196,107,112,184, 21, 39,123, 38,101,165, 24, +168, 21,147, 61, 87,214,244,247,247,143, 96, 24, 70, 99,213, 69,148,193,178,108,226,173, 91,183,130,172,137, 83,163,209, 12,246, +244,244,156,159,156,156,188, 59, 33, 33,225,127,214,158,163,198,107, 47,155,236,153, 17,136, 67, 40,165, 45, 0, 16,194, 48, 22, + 39,123,174,168,233,238,238,222, 92, 46,151,175, 21, 10,133, 94, 40, 75,169,154,111,153,193, 96, 16,228,229,229,201,244,122,189, + 0, 0, 17,139,197, 38,165, 82, 89, 34, 18,137, 76, 44,203, 62, 52, 26,141,239, 39, 37, 37,221,176, 20,167, 25, 63, 63, 63, 69, + 72,208,237, 66,243, 20, 58,211, 63, 31,130,208, 13,180,218, 38,229,138,154,247,238,221,107,228,224,224,240, 22, 33,100, 0,165, +180,113, 65, 65,129,238,171,175,190,186,122,234,212,169,124, 47, 47,175,158,157, 59,119, 38,215,175, 95, 71,124,124, 60, 45, 44, + 44,220,201, 48,204,231,137,137,137,177,181,186,159,132, 48, 29, 58, 4,188,109,171, 68, 31,142,162, 37, 64, 9, 33,228, 70, 97, + 33, 57,160, 86,215,223,178, 99,199,142, 42, 93,181, 53,215, 30, 24, 24,184,191,176,176,176,119,116,116,213,254,140, 16, 2, 74, +255,188, 23, 53,105,126,251,121,243,207,219, 7,119,122,243,220,169, 51,123, 62,249,250,230,156,138,219, 38,188,238, 56,106,200, +248, 15, 23,108,253,110,217, 39, 43,247,100, 63, 50, 39, 95,117,154,129,129,129, 13, 0,188, 77, 41,109, 70, 8,241,229, 56,200, + 8,161,217,132,144, 72,142,227,174,113, 28,247,251,245,235,215,171, 28,249,242,119,127,163,173, 56,217, 51, 97, 89,123,150, 16, +171, 38,123,254,167,124,243,230, 53,121, 77, 94,147,167, 50, 86, 87,224, 54, 27, 41, 95, 95, 95,122,239,222,189, 71, 30, 42,143, + 67,153,129,218,134, 26,170,180, 91,195,205,155, 55, 91, 61,201,241,150, 72, 78, 78,254, 25,192,207, 79, 83,179,204, 64,253, 88, +246,122, 44,202, 12, 82, 91,139, 59, 62, 5, 34, 35, 35,139,190, 28, 77,202, 51, 91, 66, 33,170, 52,128, 85,209,163, 71,143, 7, + 6,131,225, 40,128, 68, 0,246, 0,178,141, 70,227,161,140,140,140,180, 58,117,234, 4, 61,120,240,224, 75, 0,224, 56,110, 78, +106,106,234, 99,213,145, 40,235, 3,183,181,236,245, 84, 9, 15, 15,239,163,209,104, 34,156,156,156,124, 74, 74, 74, 36, 37, 37, + 37,162,138,191,251,114,185,188,198, 44, 91, 69,236, 84,216, 36, 32, 89, 78, 14, 42,242,151, 76,141,179, 59,118,105,139,110, 54, +114,118,199,174, 90,196, 22, 23, 16, 16,176,153, 97,152,250, 28,199,185, 1, 80, 81,138, 76, 74,105, 38,203,178,137, 55,110,220, +168,245,176,226,103, 69,153,129,122,234,163,126,120,120,120,120, 94, 84,106, 61,197, 73,116,116,244, 19, 25, 43,158,127, 38,115, +214, 81,209,227, 28, 23, 31, 31,175, 3,112,190,236,245, 8,101,134,170,239, 19,134,246,204, 73, 78, 78,126, 42, 38,190,172, 79, +214,255,218,188,252,215,109,101,165, 25, 62,121,201, 66,179, 96,101,174, 94,189,250, 16,128,197,166,116, 30, 30, 30, 30,158,191, +151,218,205, 27,195,195,195,195,195,195,195,195,195, 99, 17, 2,160,202, 18,215,181,105, 91, 37,196,226, 20, 36,181,214,231, 53, +121, 77, 94,147,215,228, 53,121, 77, 94,243,223,167,105, 73,251,223,210,183,203,234, 78,238,143, 37,254, 15,233, 88,199,107,242, +154,188, 38,175,201,107,242,154,188,230,243,213,252,183,193, 55, 17,242,240,240,240,240,240,240,240, 60,101,120,131,197,195,195, +195,195,195,195,195,243,148,225, 13, 22, 15, 15, 15, 15, 15, 15, 15,207, 83,134, 55, 88, 60, 60, 60, 60, 60, 60, 60, 60, 79, 25, +222, 96,241,240,240,240,240,240,240,240, 60,101,158,233, 40, 66, 30, 30, 30, 30, 30, 30, 30,158,255, 34,124, 6,139,135,135,135, +135,135,135,135,231, 41,195, 0, 0, 33,132, 86,124,231,225,225,225,225,225,225,225,249, 59,249,183,121, 17, 62,131,197,195,195, +195,195,195,195,195,243,148,225, 13, 22, 15, 15, 15, 15, 15, 15, 15,207, 83,198,108,176,186,150,165,228,186, 62,207, 96,120,120, +120,120,120,120,120,254,179,252,171,188, 72,249, 40, 66, 66, 8,165,148,146,231, 28, 15, 15, 15, 15, 15, 15, 15,207,127,148,127, +147, 23,225,203, 52,240,240,240,240,240,240,240,240, 60,101,158,105, 31, 44, 66,136, 63,175,201,107,242,154,188, 38,175,201,107, +242,154,188,230,127, 13,190,147, 59, 15, 15, 15, 15, 15, 15, 15,207, 83,134, 55, 88, 60, 60, 60, 60, 60, 60, 60, 60, 79, 25,222, + 96,241,240,240,240,240,240,240,240, 60,101,120,131,197,195,195,195,195,195,195,195,243,148,225, 13, 22, 15, 15, 15, 15, 15, 15, + 15,207, 83,134, 0,168,114, 36, 0,165,244,166,213, 34,143, 49,154,192,146, 62,175,201,107,242,154,188, 38,175,201,107,242,154, +255, 62, 77, 75,218,181,241, 31, 47, 50,207,180, 14, 22, 33,196,255,105,223, 40, 94,147,215,228, 53,121, 77, 94,147,215,228, 53, +255,125,154,255, 54,248, 38, 66, 30, 30, 30, 30, 30, 30, 30,158,167, 12,111,176, 30, 3, 66,200, 59,132,144, 67,132,144,155,132, +144,195,132,144,119,158, 64, 75, 78, 8,153, 86, 65,239, 32, 33,228, 19, 66,136,244,105,198,204,243,116, 33,132, 8,158,119, 12, + 60, 60, 21,209,104, 52,141,252,252,252,194, 53, 26, 77,163,231, 29, 11, 15, 15, 15, 32,172,110,131,143,143,207,121,134, 97, 26, + 48, 76,169, 7, 35,228,207,169,129,204,203,149,223, 41,165,113,145,145,145, 29,170,211,108,208,160, 65,185, 38,195, 48, 32,132, +128, 97, 24, 24,141, 70, 91,129, 64, 80, 80,149, 38,203,178,137,119,239,222, 13,122,130,107,124,170, 16, 66, 54, 59, 56, 56, 24, + 87,173, 90,245, 93,171, 86,173, 26,102,103,103, 23,141, 25, 51,230, 85, 66, 72,119, 74,233,176, 90,106,249, 19, 66,126,106,221, +186,245,238, 9, 19, 38,236,240,243,243,179, 45, 42, 42,146,110,223,190,189,206,154, 53,107,206, 16, 66, 70, 81, 74, 35,159,213, +181,240,212, 30,181, 90,221,138, 16,178,210,215,215, 55, 72,163,209, 92, 1, 48, 62, 57, 57,249,218,243,142,235,191, 4, 33,228, + 61,137, 68, 91,165,206,121, 0, 0, 32, 0, 73, 68, 65, 84,210,211,215,215,183,141, 78,167,203,137,139,139,187,204,178,236, 87, +148,210,212,167,164,111, 7,224, 43,169, 84,218,214,199,199,199, 51, 58, 58, 58,193, 96, 48, 92, 2, 48,155, 82,154,247, 52,206, +241,180,209,104, 52,141,218,182,109,123,118,222,188,121, 78,211,167, 79, 63,171,209,104, 58, 37, 39, 39, 71, 61,239,184,120, 94, +124,188,188,188,236,139,138,138,214, 51, 12,211, 74, 38,147,213,177,181,181,133, 82,169, 76,149, 74,165, 87,109,108,108,222,221, +191,127,127,238,243,142,241,159, 74,181, 6, 75, 32, 16,120, 92,190,124,217,213,214,214, 22, 44,203,130,227, 56,112, 28, 7, 74, +105,249,187, 25, 74, 41, 88,150, 69,183,110,221, 12, 53,158, 76, 40,244, 12, 15, 15,119, 85, 42,149,229,159, 25, 12, 6,180,104, +209,130,139,136,136,112,149,201,100,143,236,175,215,235, 17, 24, 24,248,194, 76,150, 72, 8, 25,234,228,228,164,127,240,224, 97, +251, 18,157,161,195,184,169,115,190,122,235,181, 96,187, 11, 23, 46, 48,125,251,246, 21, 17, 66,222,161,148,254,100,165,150,156, + 16,242,195, 23, 95,124, 49, 95, 40,182,113,221,121,224,188,112,197,218,173, 9,254, 77,235,147,201, 19,199,217, 76,154, 52,233, +114,147, 38, 77,126, 36,132,116,166,148,234,158,245,181,241, 88,134, 16, 34,244,244,244,252, 45, 52, 52,212, 61, 53, 37, 5,139, +151, 44,105, 7, 96, 21,128,118,207, 59,182,255, 10,132,144,105,179,102,205, 10, 29, 50,100, 8, 76, 38, 19,180, 90,173, 38, 38, + 38,166,217, 23, 95,124,241, 58, 33,164, 13,165, 52,246, 9,245, 93,124,125,125,239, 76,158, 60,217,177, 77,155, 54, 96, 24, 6, +185,185,185,154,179,103,207,182,251,225,135, 31,222, 33,132, 52,161,148,102, 60,129, 62,227,228,228, 52, 9, 64, 55,142,227,164, + 0, 46,229,228,228,204,165,148,214,248,191,211, 18, 14, 14, 14, 91,190,253,246, 91, 39,169, 84,138, 13, 27, 54, 56, 13, 26, 52, +232,140, 70,163,233,204,155, 44,158,154,112,118,118,126,175,160,160,224, 59, 27, 27, 27,177,189,189, 61,228,114, 57,196, 98, 49, + 36, 18,137,151,131,131,131,151, 82,169,236, 61,120,240,224,241, 63,255,252,243,250,231, 29,235, 63,145,106, 13, 22,195, 48,144, +203,229,216,190,125, 59, 4, 2, 1,196, 98, 49, 68, 34, 17, 68, 34,209, 35,203,230,117, 79, 79, 79,139, 39, 51,103,165,246,238, +221, 11, 59, 59, 59,168, 84, 42, 52,109,218, 20,132, 16, 72,165, 82, 28, 61,122,244, 17,221,160,160,160, 71, 50,103,127, 7, 3, +187, 19, 10, 0, 59,150, 54, 41, 93,159,124, 7,230,245, 62, 93,148,232, 59,100,222,155,197, 58, 99, 23, 74,137, 54, 53,199,152, + 61,123,225,119,145, 1,205,154,146, 95,126,249, 37,208,217,217,121, 48, 0,171, 12, 22,128, 15,219,180,105,179,215, 4,137,219, +168, 17, 35, 71,140,100,136,233,141,145, 31,205, 58, 27, 17,147,179,222,175,213,214,140,140,196,177, 43, 86,172,136, 26, 55,110, +220, 36, 0, 11,172,141,191,117,235,214, 15, 57,142,243, 4, 0,129, 64,144, 41,151,203,213, 39, 79,158, 52,213,226, 22, 60, 19, + 8, 33, 26, 0, 11, 1, 24, 1,124, 67, 41,189, 83, 97, 91, 35,177, 88,188,192, 96, 48,100, 3,152, 65, 41, 77,120, 94,113,214, +132,187,187,123,147, 97,195,134, 57,103,101,100, 96,241,146, 37,230,143,131, 8, 33, 2, 74, 41,251,119,198, 18, 24, 24,216, 64, + 38,147, 45, 4,208, 74,167,211,185, 3,128, 92, 46, 79,162,148,238,209,106,181,159,135,135,135,107, 31, 71,151, 16,226, 9,160, + 25, 74, 71, 24, 87, 5, 93,176, 96, 65,212,212,169, 83,227,254,110, 77, 66, 72, 61, 55, 55,183,121, 3, 7, 14,196,254,253,251, +113,224,192, 1,163, 76, 38, 19,142, 24, 49,130,140, 31, 63,222, 97,242,228,201,189, 1, 44,179, 54,174,106,232, 61,107,214, 44, +199,166, 77,155, 98,231,206,157,184,118,237,154,182, 81,163, 70,242,224,224, 96, 8, 4, 2,199,207, 63,255,188, 23,128,141,181, + 17, 44,107,238,159, 4,160,155, 64, 32,232, 60, 98,196, 8,211,196,137, 19, 69, 12,195, 24,151, 46, 93,234,178,126,253,250,183, +156,157,157, 91,101,102,102, 22, 62,110,208, 57, 57, 57,115,231,204,153,179,105,229,202,149,182,177,177,177,152, 53,107,150,243, +132, 9, 19, 78,105, 52,154, 96,222,100, 85,143, 64, 32, 48,112, 28, 39, 2, 32,163,148,234, 44,173, 63,231,112,159, 42, 78, 78, + 78, 31,228,228,228,172,210,104, 52,112,113,113, 41,127,214,114, 28,135,162,162, 34,104,181, 90, 52,104,208, 64,220,180,105,211, +117, 19, 38, 76, 16,173, 92,185,114,245,115, 14,249, 31,135,144, 16, 18, 76, 41, 61,101,254,192,188, 78, 8, 1,199,113, 16,137, + 68, 16, 8, 4, 16, 10,133,229,198,167,226,178,249, 85,149, 17,170, 60,194,128, 97, 24, 82, 80, 80, 80,110,174,236,236,236,202, + 51, 97, 70,163,241, 47,154, 44,203,130, 97, 24, 90,147,230,211,160,162,230,142,165, 77,176, 49,108,234,219, 27,195, 74,215,123, + 13, 41,125,223, 24, 6, 28,189, 52,118,225,130,213, 29, 61, 63,156,187, 33, 52, 43, 43, 55,221,207,195,197, 52,120, 72,112, 93, + 73,102, 90,166, 83,253,250, 33, 0,210,107, 17,103,167,177, 99,199,238,220,121,226,158, 66, 42,149, 72, 4, 12, 4,141,188, 27, +136,220, 85, 13, 29, 93, 94,109, 35,137,143,141, 61,243,206, 59,239,140, 29, 55,110,156, 19,202, 12,150, 53,215, 78, 41, 85, 31, + 57,114, 4, 66,161, 16,221,187,119,119, 64,169,137,174,214, 96, 61,235,251, 89,129, 47,210,210,210,222, 46, 41, 41, 65, 80, 80, +208,107,132,144,110,148,210,171,132,144,230,253,250,245, 59,179, 99,199, 14,219,136,136, 8,180,107,215, 78, 14, 96,208,115,140, +243, 47,104, 52,154, 35, 0, 94, 17, 8, 4,208,151,148,232, 23, 46, 90, 84,113,115, 88, 69,115,245,119,196, 25, 16, 16,208,196, +198,198,230,252,162, 69,139, 84,126,126,126, 68, 36, 18,193,100, 50, 33, 58, 58,218,115,243,230,205,239, 95,185,114,165, 87, 96, + 96,160, 95,120,120,184,209, 90,205, 10, 52, 59,115,230, 76,145,183,183,119,149,134,177,184,184, 88,224,237,237,221, 21,192, 95, +204,208,223,160,153,152,150,150,214,255,149, 87, 94, 25,155,154,154,122,199,100, 50,125, 10,192,223,217,217, 57,226,205, 55,223, +132, 92, 46,239, 6, 43, 12, 86, 77, 63, 35, 87, 87,215,126, 29, 58,116,192,202,149, 43,241,205, 55,223,116,167,148, 30, 35,132, +188,156,159,159,127,244,181,215, 94,131,189,189,125,127, 84, 97,176,170,211, 36,132,248, 73,165,210,141, 63,255,252,179,210,219, +219,219, 91, 44, 22, 51,222,222,222,200,206,206, 70, 73, 73,137,116,238,220,185,205,101, 50,217,181,101,203,150,109, 4,240,134, +181,113, 86, 68,163,209, 52,106,211,166,205,186, 41, 83,166,216,238,219,183, 15,190,190,190,200,207,207,199,168, 81,163, 92,151, + 47, 95,126, 82,163,209,116, 53,155,172,191,251,239,136, 16,146, 7, 64, 5,192,190, 54,205,171, 53,220,207, 60, 0,229,253, 83, + 69, 34, 17,164, 82, 41,100, 50, 25,100, 50, 25,226,226,226,118, 9, 4,130,145, 40,253, 34,103, 81,147,252,249,224,106, 73, 8, +185, 44, 16, 8,106, 92,167,148,114,214,196,249, 36, 88, 81, 54,193,131, 16,178, 20, 64, 55,148,246,163, 62,229,234,234,250, 97, +106,106,234, 3,107, 53, 53, 26,141, 83, 97, 97,225, 50,141, 70, 3, 87, 87, 87, 0,128, 64, 32, 64, 80, 80, 16, 74, 74, 74,112, +235,214, 45,112, 28,135,152,152, 24,168, 84, 42, 52,111,222,124,217,172, 89,179,118,206,152, 49, 35,203,218, 56,107, 75,117, 94, +228,105,158,227,239, 70, 8,224, 36, 74,127,207,204, 23,115, 18,101,223, 52, 89,150, 45, 55, 88,149,205, 79,101,195, 69, 8, 1, +165,180,198,116, 19, 33,132,209,235,245,229,230, 74,165, 82,149,155, 51,147,201, 84,165,193,122, 92, 28, 28, 28, 14,231,230,230, + 46,161,148, 30,121,156,227, 71,140, 24,241,151,254, 28,211,166, 77, 75,200,200,200, 96,251,117,106, 36,253,233,167,253, 89,239, +132,116,173,227,231,227,209, 88,225,228,218,178,184,184,248, 10, 0, 81, 45, 78,225,238,231,231,103,187,250,231, 83,233, 67, 38, + 45,156,237,225,166,100, 91,251,186,169,124, 28, 21, 18, 39,153,208,100, 79, 77,185, 54, 54, 54,205, 0,100, 89, 84,170,132,157, +157, 29,246,238,221, 91,219,195,158, 53, 14, 90,173, 22, 57, 57, 57, 88,179,102,141,106,236,216,177, 39, 8, 33, 31,246,235,215, +111,229,206,157, 59, 21,185,185,185, 48, 24, 12, 0,240, 88,153,151,103,204, 28, 7, 7,135, 46,221,186,117,147,108,251,229, 23, + 9,165,180, 8, 0, 5, 80, 72, 41,157,240,119, 7, 35,147,201, 62,158, 59,119,174,202,207,207,143,100,102,102,130, 82, 10,134, + 97,224,236,236,140,169, 83,167,202, 62,255,252,115,247,168,168,168,207, 0,204,122, 12,121, 82,157, 17, 2, 0, 27, 27, 27, 22, +181, 31, 28, 83,165,166,201,100, 34, 29, 59,118,156,154,153,153,217, 92,171,213,126,109, 73,132, 82,106, 2,176,183,236, 85, 42, + 76,200,181, 59,119,238,104,133, 66,161,188,126,253,250,109,107, 25,215, 95,104,212,168, 81,123,145, 72,132, 75,151, 46,233, 0, +156, 42,251,248,212,245,235,215,117,111,188,241,134,212,211,211,179,189,181, 90,132, 16,169, 84, 42,221,120,239,222,189,198,106, +181, 90,126,241,226, 69,180,104,209, 2,153,153,153, 72, 77, 77, 69, 97, 97, 33, 82, 83, 83,241,238,187,239,186, 46, 94,188, 88, +109,141,166, 70,163,105,228,227,227,243,135,179,179,179,156, 82, 10, 74, 41,250,244,233, 35, 90,176, 96,129,109, 98, 98, 34, 76, + 38, 19,166, 79,159,142,144,144, 16, 56, 56, 56, 96,228,200,145,110,235,214,173,219, 2, 32,176,246,119,227,169,146, 43, 18,137, +160, 80, 40,236,115,115,115,159,164, 31,155, 20,128, 4, 0,132, 66, 97,185,185,146, 74,165,144, 74,255,253,227,130, 8, 33,238, +132,144, 72,145, 72, 36, 85, 40, 20, 98,134, 97,160, 80, 40, 94,245,240,240,184,245,206, 59,239,248,255,244,211, 79,241,214,232, +148,148,148,252, 36,151,203, 69, 46, 46, 46, 0,128, 30, 61,122, 96,196,136, 17,200,200,200,224,146,147,147,209,184,113, 99,230, +212,169, 83, 72, 75, 75,195,181,107,215,208,186,117,107,145,163,163,227, 79, 0,122, 61,195,203,171,214,139,252, 83,169,216, 68, +248,151,139,225, 56,238, 17,115, 85, 85,230,170, 98, 6,203, 82,115, 30, 33, 4, 44,203,162, 78,157, 58,176,177,177,129,141,141, + 77,249, 54,179,153,171,248,162,148, 62,118, 19, 97,195,134, 13, 95,178,177,177,233, 76, 8,121,141, 82,122,212,218,227, 6, 78, +190, 83,158,181,170, 76,203,150, 45,207, 79,159, 62,189,231,241,227,199,115,218,183,104,192, 73,147, 19,178,108, 28,156, 91, 16, + 23,215,238,227, 70,143,185, 0,224,231, 90,132,152, 92, 82, 82, 34,173, 87,135,209, 38,231,229,235, 27,168,236,236, 27,216, 41, +109,234, 57,219, 57, 57,200, 36,140,194,205, 85, 99, 52, 26,115, 1, 36, 91, 18,170,216, 44, 40,147,201,244,132, 16,161,189,189, + 61,236,236,236, 12, 57, 57, 57, 37,129,129,129,144, 72, 36,153, 98,177,216,234,230,194, 54,109,218,164,177, 44,235, 90,211, 62, + 98,177, 56,253,194,133, 11,110, 86, 93, 45,240,121,203,150, 45,131, 87,173, 90,229,226,235,235,139, 53,107,214,168,118,238,220, +185,113,203,150, 45,200,205,205,197,253,251,247, 49,106,212,168,124,148, 54, 35,190, 80, 56, 58, 58,158, 29, 48, 96, 0,214,175, + 95, 79,203,190, 68, 40, 8, 33, 45,236,236,236,238, 70, 70, 70, 62, 81,223,153,199,129, 97,152, 87, 27, 55,110, 76,242,242,242, + 64, 41,133, 64, 32,120,228, 53,117,234, 84,249,187,239,190,251, 69,251,246,237,167,138, 68,162,124,147,201,180,173,176,176,240, +235,155, 55,111,190, 80,157, 85, 59,119,238,252,191,132,132,132,144,186,117,235,254,254,184, 26,148, 82,218,186,117,107, 61,165, + 84, 46, 16, 8,106,243, 5,167, 74,204,163, 67, 89,150, 45, 41, 51,116,160,148,154, 2, 3, 3, 75, 80,250,112,175,205,232,209, + 73, 59,118,236,176, 85,171,213,114,173, 86,139,216,216, 88, 4, 6, 6,162,160,160, 0, 69, 69, 69, 40, 46, 46,134,193, 96, 64, + 94, 94,158, 61,203,178,122,107, 4, 29, 29, 29,183,108,222,188,217,195,195,195, 3, 70,163, 17, 70,163, 17, 69, 69, 69, 56,117, +234, 20,116, 58, 29,140, 70, 35, 26, 55,110,140,249,243,231,151,140, 31, 63, 94,246,203, 47,191,164,107,181,218,161,181,190, 17, + 79, 25,129, 64, 0,169, 84, 10,145, 72,148,235,229,229, 5,134, 97,100,241,241,241,143,211,228,166, 2,144, 47, 20, 10, 37, 21, +141,149, 76, 38,195,205,155, 55,183, 87,151,189,170, 14, 90,169, 16,164,165,245,231, 13, 33,100,169, 72, 36,146, 58, 57, 57,137, +205,159, 25, 12, 6,177,131,131, 3,234,214,173,187, 18, 64,111, 43,117, 2,156,156,156, 64, 8,129, 88, 44,198,232,209,163,113, +249,242,229, 61,137,137,137,239,164,167,167,163,176,176,240, 39,149, 74,245,122,122,122, 58, 88,150, 69,124,124, 60, 90,182,108, + 25,240,204, 46,236, 81,254,241,198,202,140, 16, 40, 77,197, 85,124, 47, 91, 6,165,212, 98,230,170,166, 38,194,202, 24, 12, 6, +101, 72, 72, 8,103, 54, 99,230, 81,132, 0, 8,203,178, 16,139,197,143,104,150, 25,172,199,250, 5,151, 74,165,232,221,187,183, +204,198,198,230,215, 50,147,117,252,113,116, 0, 96,239,206,173,110, 11,102, 76,159,225,168,169,239,243,217,103,159, 9,123,245, +234,117,116,219,182,109,173,157, 59,189,212,243,244,177,237,110,107, 62,221,251,251,246,237,219, 11,172,237,224, 94,198,185, 61, +123,246,168, 63,158, 56, 78, 28, 28, 28,188,107,120,243, 41, 66,181,132,179,117,148,138, 5, 54, 2, 33, 35,245,172,215,243,216, +169,211, 41, 0, 78, 91, 18,162,148,170,143, 30, 61, 10,123,123,123, 0,144,232,245,122,216,219,219, 99,205,154, 53, 50,149, 74, + 5,149, 74,133, 14, 29, 58, 56,136,197,226, 26,155, 11, 43,194,178,172,235,201,147, 39,161, 84, 42, 81, 84, 84, 4,157, 78, 7, +147,201, 4, 74,105,249, 55,199,174, 93,187,214,104,192, 42,197, 24, 75, 8,233, 50,110,220,184,211,171, 86,173,114,241,241,241, +193,236,217,179,145,149,149,133,135, 15, 31, 98,232,208,161,249,113,113,113,221, 42,246,205,122, 17,104,222,188, 57, 61,119,238, + 28, 14, 30, 60,136,190,125,251,146,189,123,247, 26, 88,150, 21, 39, 37, 37,221,120, 94, 49,153, 76, 38, 91,137, 68, 2,163,209, + 8,161, 80, 88,222,132,111, 54, 88,238,238,238,248,227,143, 63,132,197,197,197,194,172,172, 44,155, 31,126,248, 97, 98, 88, 88, +152, 26,192,224,231, 21, 51, 0,172, 94,189,186,238,232,209,163, 31, 10,133, 66,218,179,103,207, 97, 15, 30, 60,232,175, 86,171, +143,157, 56,113, 98, 17,128, 90,151, 22,240,247,247, 15, 19, 8, 4, 30, 0,196,191,254,250,171,145,101, 89,113,243,230,205,211, +204,153, 29,243,179,209,100, 50, 37, 70, 69, 69, 89, 28,137,236,239,239, 31, 38,147,201,196,223,127,255,189,177,164,164, 68,220, +162, 69,139,180, 10, 58,226,223,126,251,205,104, 52, 26,197,141, 27, 55, 14,179,114,100,115,215,182,109,219,214,205,205,205,133, +157,157, 29, 10, 11, 11, 17, 22, 22, 6, 63, 63, 63, 36, 39, 39,131, 97, 24,216,219,219, 99,245,234,213,197,132,144,108,107,174, + 57, 59, 59,123,232,228,201,147,207,108,223,190,221, 89, 32, 16,224,193,131, 7,200,206,206,134,189,189, 61, 54,111,222,140,122, +245,234,225,232,209,163,217, 44,203,190,183,126,253,250, 47,180, 90,237,208,231,221, 7,139, 97,152,114, 35, 84,193, 16,149,180, +107,215, 14,231,206,157,219, 90, 27, 83, 68, 41,213,155,155, 5, 43, 54, 13, 74,165, 82, 8, 4,130, 90, 55,121,176, 44, 43, 38, +132, 4,224,207, 86,155, 26,215, 95, 0,130, 21, 10,133,184,242,135, 57, 57, 57,226,198,141, 27,119,182, 86, 68, 42,149, 58,201, +229,242, 82,193,224, 96,164,167,167,179,222,222,222,111, 13, 26, 52,200, 8, 0,239,191,255,254, 91, 25, 25, 25, 37, 70,163, 81, + 32, 20, 10,145,145,145,129, 6, 13, 26, 56, 61,181,171,168,134,170,188,200, 63, 25, 33,165,148, 16, 66,104,197,119,243, 70,115, + 31,172,154, 50, 87,230,109,102,163, 84,211,201, 24,134,201, 13, 15, 15, 87, 40, 20,138,242,207,140, 70, 35, 2, 2, 2, 56,142, +227, 72,229,115, 61, 73, 6, 75, 42,149,194,222,222, 30,131, 7, 15,182, 73, 74, 74,218, 8,192,195,154,227, 74,251, 96,253,185, +190,119,231, 86,183,181,223,204, 94,185, 98,193, 92,167,152,131, 27,176,126,249,183,172, 66,161,140,104,217,178,101,151,188,188, + 60,157,189, 66,135,212, 44,236,164,148,110,177, 54, 54, 66, 8, 3, 96,251,133, 11, 23,174,246,232,209,227,194,253,251,247, 29, + 30,220,187,119, 86,165, 47, 44, 84,122,214, 55,137, 93,221,250,105, 13, 70,225,128, 1, 3,220, 0, 44,183, 66, 15, 28,199, 97, +255,254,253,176,181,181,133, 74,165,130,189,189, 61,204,230,234,113,137,139,139, 67, 98, 98, 34, 20, 10, 5, 20, 10, 5,148, 74, + 37,148, 74, 37, 36, 18,201, 35,217, 71,107,161,148, 70, 17, 66, 62,220,189,123,247,182,208,208, 80,228,228,228,160,168,168, 8, + 51,102,204, 64,108,108,236,100, 74,233,213,199, 14,246, 25,208,162, 69, 11,122,225,194, 5,156, 61,123, 22, 69, 69, 69, 88,185, +114, 37,212,106,245, 75, 0,190,124,158,113,113, 28, 39, 54,151, 58, 97, 24,230, 47, 25, 44,179,217,146,203,229,112,118,118,198, +244,233,211,197,253,250,245, 11,121,158, 49, 47, 88,176,160,225,210,165, 75,127,216,180,105,211,193,161, 67,135,254,114,243,230, +205,145,118,118,118, 55,142, 31, 63, 62, 87, 42,149,114,150, 21,254,138, 80, 40,244,184,122,245,106, 69,147, 47, 98, 89,214,134, +101, 89,152, 76, 38, 24,141, 70, 20, 23, 23,163,123,247,238, 86,235, 93,190,124,217, 6, 0,190,252,242, 75, 17, 0, 27,142,227, + 80, 81, 79,171,213,138, 94,126,249,101,171,254,151, 0,208, 56, 56, 56,136, 30, 62,124, 8,147,201,132, 86,173, 90, 97,245,234, +213, 24, 52,104, 16,154, 53,107,134,130,130, 2, 68, 70, 70, 98,227,198,141, 14, 98,177,248, 77,107, 4,147,147,147,163, 52, 26, + 77,231,183,222,122,235,252,182,109,219, 28,234,214,173,139,196,196, 68, 36, 39, 39,195,199,199, 7,203,151, 47, 47,162,148,118, + 44, 51, 85,191, 89, 25,231, 51,131, 97,152,114, 19, 84,213,235,113, 48,153, 76, 42,153, 76,150, 47,147,201, 36,102,163,117,229, +202,149, 90,103,175,204, 84,254,191, 99,105,253,121, 98,254, 31,108, 52, 62,122,153, 10,133, 2,190,190,190, 86,235, 40, 20, 10, + 98,126,198, 26,141, 70,164,164,164,176, 55,111,222,100, 91,181,106, 5, 0, 80,171,213,236,197,139, 23, 89,157, 78, 39,176,181, +181, 5, 0,216,219,219, 63, 83,147, 89,147, 23,249,167, 98,110, 34, 60, 93,233,189, 60,131,101, 54, 60, 53,117,114, 23, 10,133, +214, 26, 44, 8, 4, 2, 28, 58,116, 8, 74,165, 18,182,182,182,104,210,164,116,180,158, 57, 91, 86, 57, 43,246,184, 6, 75, 34, +145,192,206,206, 14, 71,142, 28, 41,185,118,237,218,232,199,209, 48,155,171,249, 95,207,114,202,186,125, 1,137,201, 41,200, 74, + 51,132,157,187, 25,127, 24,192, 97, 0,192,237,166,167,208,244,182,213,230,170,169,139, 77,203,118,190,117,126,235,246, 74, 79, +247,254,195,199, 49,227,199,143,111, 63, 98,196,136,236, 97,195,134, 77,146,203,229,205, 76, 38, 83,206,209, 83,167,226, 7, 14, + 28,232,148,151,151, 55,130, 82,106,177, 79,146, 64, 32, 72,233,209,163,135, 39, 0,216,218,218,234,127,252,241, 71,137,189,189, + 61,134, 12, 25, 82,146,154,154, 42, 43,187, 31, 57,176, 50,123, 5, 0, 66,161, 48,253,189,247,222,171, 49, 67, 37,145, 72,210, +107,218, 94, 25, 66, 72, 64, 72, 72,200,186,237,219,183, 35, 43, 43, 11, 69, 69, 69, 16,139,197, 88,184,112, 33, 30, 62,124,184, +140, 16,114,243, 69,249,103,214,178,101, 75,122,233,210, 37,220,184,113, 3, 58,157, 14,163, 71,143,174,216,199,176,199,115, 13, + 14, 32, 73, 73, 73,216,188,121, 51, 88,150,197,208,161, 67, 81,175, 94,189,114,131,149,154,154,138, 31,127,252, 17, 44,203,226, +189,247,222,131,151,151, 23,140, 70,163,172,107,215,174,194,231, 53,162,116,202,148, 41, 49,123,246,236, 57,152,144,144,208,235, +155,111,190, 9, 38,132,112, 83,167, 78,157,175, 82,169,158,104,244,101, 78, 94, 1,238,222,123, 0,147,201, 84,229,203,197,217, +177,214,122,209,177, 15, 97, 50,177,229, 26, 44,251,167,158,147, 99,173,244,146,178,179,179,125, 5, 2,129,248,222,189,123,168, + 91,183, 46,218,180,105,131,121,243,230, 33, 35, 35, 3, 38,147, 9,174,174,174,156,209,104,140,208,235,245, 22, 51,213,102, 82, + 82, 82,138,179,178,178,138,222,123,239, 61,251,117,235,214, 17, 95, 95, 95,220,191,127, 31, 34,145, 8,182,182,182,197,119,238, +220,121, 97, 70, 13, 86,206, 92,153, 95,101,153, 43, 6,192,239, 0,106,101,176, 41,165,122, 79, 79,207, 71,250, 95, 61, 78,246, +234, 89,241, 44, 71, 38,250,250,250,158, 82,169, 84, 33,119,238,220,121, 36,139, 53,120,240, 96,131,143,143,207, 25,107,117, 84, + 42, 85,142, 68, 34,113, 42, 41, 41,193,133, 11, 23,208,164, 73, 19,113, 94, 94, 94, 40, 33,100, 26, 0,180,104,209, 34, 52, 45, + 45, 77,236,238,238, 14, 0,104,220,184, 49,242,242,242,114,172,169, 22,240,132,252,197,139,252,147, 17, 2, 0,165, 52,184,226, +187,153,202, 77,132, 53,153, 44,115, 65,210,154, 32,132, 64,171,213,150,103, 68, 20, 10, 5, 56,142,123,164, 57,178,178,193,170, + 60,138,208, 90,164, 82, 41, 78,156, 56, 81,178,118,237,218, 1,148,210,195,214, 30, 87,177, 15,214,247,139,231, 46, 48,155,171, +235,103,255,192,111,119,242, 50,167,206, 91,188,244,113,226, 1, 0, 63, 23, 69,139, 58,110,206, 39, 23, 47,156,175, 74,186,116, + 16,191,172, 93, 76,175, 95,190,220,250,131,203,151,223,252,224,131, 15, 28, 81,218,223, 42, 9,192, 89, 0,203,172, 49, 87, 0, +112,241,226, 69, 47,243,114,155, 54,109,140, 42,149, 10, 74,165, 18, 25, 25, 25, 98,165, 82, 41, 59,121,242,100,173,251, 58, 92, +186,116,201,218,190, 85, 86, 65, 8,105,212,183,111,223,211,187,118,237, 82,228,230,230, 34, 62, 62, 30,159,124,242, 9,190,251, +238, 59,168, 84, 42,236,223,191,223, 54, 36, 36,228, 36, 33,164, 3,125,206,197, 85, 3, 2, 2,232,149, 43, 87, 16, 31, 31, 15, +147,201,132,254,253,251, 91, 28,192,241,119,194,113, 28,157, 60,121, 50,214,173, 91, 7,134, 97, 48,124,248,112,228,231,231,151, +111,119,116,116,172,106,155, 0, 22, 70,148, 62, 75,132, 66, 33, 61,117,234,212, 55,193,193,193, 72, 72, 72,232, 21, 24, 24,184, + 98,228,200,145, 73, 79,170,235, 96,103,139,150,126,222,208,233,116,208,233,116,208,104, 52, 40, 40, 40, 64, 76, 76, 12,116, 58, + 29,220, 92,237,107,173, 23,208,172, 33,244,122, 61,116, 58, 29, 92, 93, 93, 81, 84, 84,132,251,247,239, 67,167,211,193,197,197, +161, 54,114,167,206,158, 61, 91,183,123,247,238,141, 35, 35, 35,113,250,244,105,232,245,122, 4, 4, 4, 32, 58, 58, 26,237,219, +183, 71,126,126,254,165, 43, 87,174, 88, 61, 34,133, 16,226,249,234,171,175,158,216,186,117,171,211,150, 45, 91,244,111,188,241, +134,100,246,236,217, 68,165, 82, 33, 45, 45,237,145,250,132, 47, 2,149,141, 85, 88, 88,216,118,177, 88, 76, 1, 60, 86,182,201, + 76, 66, 66,130,180,121,243,230, 58,169, 84, 42, 57,127,254,124,173,154, 25,159, 53, 79, 58, 50,177, 38, 26, 54,108, 56,217,195, +195,163,123,171, 86,173, 16, 25, 25, 41,150, 74,165, 24, 54,108,152,161,119,239,222, 6,161, 80,104,245,128, 27,153, 76,118,219, +214,214,182,139, 78,167,131, 94,175,199,209,163, 71,225,232,232,248, 73, 72, 72,200,135, 41, 41, 41, 72, 78, 78,150, 72,165,210, +242, 44,121,183,110,221,144,157,157,125,219, 90,253,199,165, 58, 47,242, 79,165,218, 58, 88,149, 51, 88, 53, 53, 15, 90,107,176, + 24,134,129, 94,175,135,141,141, 77,185,193,170, 88, 41,254,113, 52,171,227,234,213,171,231, 99, 99, 99, 23, 81, 74, 15, 60,206, +241, 59,182,108, 82,219,113,197,158,201,151, 14,224,238,245, 48,236,137,204,205,156, 58,111,241,196,215, 6, 12, 73,171,184,223, +192,201,119,176,195,138, 46,244,141, 92, 21,254,238,110, 78, 39, 23, 47,156,175,202,186,125, 1,247,110,132,225,192,165,196,112, + 29,165,209, 0, 44,142,160,170, 13,230,182,245, 23, 9,169, 84, 58,217, 60, 90, 48, 54, 54, 22, 67,135, 14,205,141,143,143, 31, +215,191,127,255,239, 14, 31, 62,236,224,224,224,128, 35, 71,142,216,122,122,122,134, 2,120,110,205, 89,132, 16,202,178, 44,178, +178, 74, 7,111,118,236,216,241,133, 50, 87, 0, 16, 22, 22, 38,238,219,183,239, 49, 0, 47,221,190,125, 27, 28,199,157, 15, 15, + 15,239,104,222, 94,211, 54, 43,224, 10, 10, 10, 68,182,182,182, 85, 62,172,196, 98,177, 24,181,204, 56, 84,212, 60,119,238,220, +252, 69,139, 22,237,249,232,163,143,238, 61,161, 38,128,191,102,176, 66, 66, 66, 80,162, 51, 34, 49, 45, 15, 38,147, 9,197,250, + 52,203, 34,149,244, 42,102,176, 66, 66, 66,160, 45,209,227, 97, 74, 54, 76, 38, 19, 10, 75,106,149, 40, 89, 62,120,240,224, 1, +231,206,157,203,110,220,184,177,227,149, 43, 87,144,158,158, 14,163,209,136,151, 94,122, 9, 82,169,244, 65,104,104,168, 24, 86, +116, 3, 0, 0, 66,136,205, 43,175,188,114,120,219,182,109,117,206,159, 63, 15,189, 94,207,133,133,133,221, 31, 51,102,140,234, +221,119,223,117, 42,189,141, 47, 22,102, 99,117,251,246,109,179,177, 26,142,167,100,132,204, 25,172,255, 18, 91,182,108, 73,218, +176, 97,131,159, 90,173, 94, 58,108,216,176,110, 26,141,134,145, 72, 36,167,132, 66,225,135, 0, 30, 88,171, 35,149, 74, 71, 58, + 56, 56,196, 8, 4, 2, 65, 82, 82, 18,238,221,187, 7,129, 64, 0, 74,169, 68,171,213,194,205,205, 13, 2, 65,233,120,142,193, +131, 7,195,195,195,131,141,142,142, 30,249,140, 46,235, 95, 75,181, 6,203,204,156, 57,115,176,118,237, 90,188,255,254,251, 53, +238, 87, 86, 22,224,145, 7, 17,169, 52,219,182,121, 20,225,204,153, 51, 31, 57,206,220, 20, 56,110,220,184, 71, 52,127,253,245, +215,191, 52, 17, 86,214,172,142,152,152,152, 96, 75,251, 84,165,105,238,131, 53,112,232,240,148,149,243,103,220,216,184,247, 88, +243, 20, 45, 77,153, 58,111,241,148,202,230,202, 90,205,166,117,148, 77, 61, 92,157, 78, 45, 90, 56,223,206,156, 13,219, 22,145, +154, 7, 19,173,249,166,214,160, 89, 29, 34,145, 40,165, 67,135, 14,158,128,117,205,130,214,222,207,218, 80,149,166, 78,167,195, +197,139, 23, 1, 0,163, 70,141,202,141,143,143,239, 66, 41,189, 69, 8,185,221,179,103,207, 83,135, 14, 29,114, 40,251,246, 93, +101, 89,138,191, 43, 78,160,116, 68,171, 80, 40,132,175,175,111,173,205,213,223, 21,103, 74, 74,202,251, 99,199,142, 93,171,211, +233,132, 69, 69, 69,239, 91,187,205, 82,156, 59,118,236,184,231,235,235, 27,140,234, 75, 49,112, 0, 46, 60,137,230,210,165, 75, + 1,160,241,147,104,154,169,156,193,218,190,125, 59, 88,150,133,135,155, 29,116, 58, 29, 42,246,247,180, 70,179,114, 6,235,151, + 95,126, 1,199,113,240, 82, 59, 66,167,211, 85,219,247,176, 42, 77, 74,169,142, 16, 50,178, 67,135, 14, 63,205,157, 59, 55,174, + 73,147, 38,158, 29, 58,116,112,200,206,206, 78,191,122,245,106,252,218,181,107,149, 38,147,105,100,117,205, 68,149, 53,157,156, +156, 22,111,218,180,201,227,246,237,219, 72, 74, 74,194,146, 37, 75, 30,100,100,100,244, 22, 10,133,210, 21, 43, 86,156,236,211, +167,143,155,201,100,170, 49, 91,253,119,254, 29, 1, 64,114,114,242, 94,148,150,175,169,149,177,178, 38,206,203,151, 47,255, 82, +166,125,192, 26,237,191,235,218,159,116,100,162,165, 56, 71,142, 28,153,136, 74, 53,211,106, 27,231,145, 35, 71,226,223,126,251, +237, 57,254,254,254, 51,149, 74, 37,162,162,162,202,203, 34,153,191,160, 19, 66, 48,112,224, 64,124,240,193, 7, 56,114,228,200, +156, 1, 3, 6,196,215,164,201,243, 87,170, 53, 88, 44,203, 38,196,199,199,171, 55,109,218, 36, 32,132, 96,243,230,205,168,220, +177,214,252, 14, 0, 23, 47, 94, 52, 81, 74, 99,106, 58, 25,203,178, 9, 97, 97, 97,110, 27, 54,108, 16,201,229,114, 72,165, 82, + 36, 39, 39,131,227, 56, 46, 45, 45,141,217,186,117,235, 35,157,117, 47, 92,184, 96, 50, 24, 12, 15,159,242, 53, 91,205,153,200, + 7, 31, 30,218,191,199,185,125,187, 46,185, 42, 71,199, 42,141,138,185,226,123, 77, 40,108, 85,243, 23, 45,156,111,111, 54, 87, +219, 35, 82,115, 75,116,108,183,219, 25,197,215,159,118,204,231,206,157,243,178,188,215,115, 97, 70,112,112, 48, 7,192, 25,192, + 23,180, 52,115,135, 50,147,213,206,215,215,247, 35, 0,114, 0, 51,158, 87,128,132, 16,202,113, 92,121,230,244, 69,203, 92, 85, + 36, 60, 60, 60, 14,192,203,181,221,102,137, 1, 3, 6,196, 2,120,162,233,102,254, 14, 77, 51,217,185,249,136,185,159, 84, 54, +149, 23, 11,246, 65,106,133,254, 83, 70,100,231,215,174,140, 92, 78, 94, 1, 98,238, 39,130,227,104,169, 30,155, 84,222,201,221, +100, 50, 33, 51,183,118,101,218, 40,165,145,132,144,246,159,126,250,233, 36, 0,157, 0,120, 1,120,136,210,110, 0,203,173,237, +131, 35, 18,137, 58, 45, 93,186,180, 55,195, 48,204,197,139, 23,117, 11, 23, 46, 76,200,200,200,232, 71, 41,125, 8, 0, 26,141, +166,235,175,191,254,186,229, 69, 40,201, 80,137,225,255, 80,237,199,230,159, 50, 50,113,219,182,109,179,198,141, 27, 39,108,219, +182,237,103,173, 91,183,102,238,223,191,143,244,244,244,242, 47,151,175,190,250, 42,234,214,173,203, 29, 56,112, 96,222,235,175, +191,254, 56, 53,245,254,243, 84,107,176, 50, 51, 51, 95, 29, 62,124,248, 31, 12,195,212, 55,103,145,170,123, 7, 0,142,227,226, +211,210,210,106, 44, 66,150,153,153,249,234,140, 25, 51,254, 16, 10,133,229,154, 44,203,234,178,178,178,198, 13, 28, 56,112,149, + 72, 36, 42,175, 20, 87, 54, 50,238, 65, 74, 74,202,223,218,161,184,114, 29,172,158,125, 94,207,124, 82, 77,133, 4,222, 9, 23, +247,227,222,141,112,108,143, 72,205, 41,208,179, 93,163, 50,138,254, 83,206,159, 82,154, 14, 96, 92, 53,219,238, 1,168, 85, 54, +239, 89,240,111, 26,189,242, 95,192,100, 50, 37,118,127,169,107,121, 73, 6,115, 98,160,242, 58,203,178,137,214,234,189,220, 45, +184, 90, 29,243,178,181,122,102,202, 76,212, 2,212, 98,202,171,202, 8, 4,130,143,218,182,109, 43,248,232,163,143,210, 14, 30, + 60,120, 44, 39, 39,103, 10,165,180,216,188,189,108,212,224,243, 46, 38,202, 83,198, 63,101,100,226,170, 85,171,190,252,228,147, + 79, 54,106, 52,154,205,157, 58,117,106,236,227,227,163,178,181,181, 69,126,126,126, 65,118,118,246,221,253,251,247, 15, 29, 62, +124,184,213,211, 98,241, 60, 74,181, 6, 43, 35, 35,163, 8,128,213, 85,139,173,193,130,102,221,167,121,174, 39, 97, 68,208,194, +109,184,189,240,145,121, 8, 1, 84,191,110,161, 15, 86, 74,102,254, 7,115, 55,238,255, 86,103,162,156,193,196,141,138, 74, 47, +122,174,157,184,121,170,135, 55, 87,255, 28,110,222,188,105, 77, 45,170,231,166,247, 52,209,235,245, 31,118,232,208, 97, 25,203, +178,139,140, 70,227,217,231, 29, 15,207,191,135, 5, 11, 22,196,161,236,185, 60,112,224, 64, 1, 0,236,216,177,227,133, 25,149, + 89,129,214, 0, 92, 0,152, 39, 91,119, 1,160, 71,105,101,255, 12, 0, 87,158, 83, 92,213, 98,177, 15,214,127,141, 29, 71,255, +124,192, 86, 54, 78,150,214,171,227,110,106,225, 41,240,223, 46,121,120,120, 30,147,178,166,192,126,207, 59, 14,158,127, 55, 47, +168,177, 50,227, 66, 8,217, 71, 41, 13, 1, 0,243,114,197,207, 94, 52, 30,127,152, 30, 15, 15, 15, 15, 15, 15, 15, 15, 79,149, + 16, 0,254, 85,109,168,205,232, 0, 66, 72,149, 26, 53, 97, 73,159,215,228, 53,121, 77, 94,147,215,228, 53,121,205,127,159,166, + 37,237,106,142,239, 99, 33,131,181,191,182,113, 62,107,200,179, 44, 76,247,119, 15, 9,230, 53,121, 77, 94,147,215,228, 53,121, + 77, 94,243,159,169,105,129,127,156,193,226,251, 96,241,240,240,240,240,240,240,188,232,104,167, 77,155,246, 25, 33,100, 31, 0, + 76,155, 54,237,179,231, 29,144, 37,120,131,197,195,195,195, 83, 1,141, 70,211, 23,192, 44,148,118,161, 8, 77, 78, 78,254,229, + 57,135,196,195,243, 84,113,113,113, 81, 56, 57, 57, 29, 99, 24,166, 46,240,104,201,165,202,197,189, 1,128,227,184,148,236,236, +236, 30,169,169,169,213,150, 45,122, 22,154,149, 56, 31, 26, 26, 90, 28, 26, 26,106,238,208,158,129,210, 86,184, 16,252, 57,178, +240,133,162,214, 6,107, 90,143,250,157, 53,238,238, 91,115,179,178, 34,116,197, 5,239,206, 59,150,148,253, 56, 39, 38,132, 56, + 73, 36,146,183, 20, 10, 69,119, 74,169,183, 64, 32,184,147,151,151,119,212,104, 52,110,163,148, 22, 62,142, 38, 15,207,211, 36, + 32, 32,160,185, 68, 34,249,132, 16,210,206,100, 50,121,136, 68,162,100, 0,151,116, 58,221,194,136,136,136,136,231, 29, 31,207, +211,129, 16,194,168,213,234,101,246,246,246,109,115,115,115,135, 2,248, 44, 42, 42,170, 5,195, 48,240,243,243,251, 76,163,209, +196,216,218,218,174, 47, 40, 40, 56,159,146,146,242, 33,173,197,220,113, 60, 47, 46, 62, 62, 62, 97, 12,195,120, 84,156,174,205, + 76,117, 53, 31, 41,165,113,145,145,145, 29,170,211,244,240,240,240, 86,169, 84,171, 0,180,174,202, 84, 84,164,172,123,206,149, +252,252,252,113,137,137,137, 85, 22,226,117,116,116,180,117,117,117,157, 69, 8, 25,200, 48,140,192,210, 53,113, 28,199, 82, 74, +119,164,167,167,207,200,206,206, 46,168,110, 63, 39, 39,167,163,167, 79,159,110,237,236,236,108,177, 44,141,201,100, 66, 98, 98, +162, 75, 72, 72,200,105, 0,213, 86,214,126, 22,154,149,208, 3,184,108,229,190, 47, 4,181, 54, 88,132,197,176,119, 71, 15,119, +207, 77,136,114,223,180,237, 80,163,207, 95,173,219,245,235,195, 15, 82,107,163, 33,151,203,223,242,247,247, 95,190,124,249,114, +167,250,245,235, 19,185, 92,142,148,148,148, 38,215,174, 93,123,125,230,204,153, 51, 68, 34,209, 72,163,209,248, 71,109, 99,123, + 36, 78, 66,236, 29,149,194, 79,178, 10,140,211,159, 68,135,231,191,199,192,129, 3, 5, 9, 9, 9, 51,157,157,157, 63,254,244, +211, 79,165, 13, 26, 52,128, 82,169, 68,122,122,186, 87,116,116,180,231,170, 85,171,250,118,232,208, 97,133, 88, 44,254,252,228, +201,147,207,101,242,100,158,167,135, 90,173, 94,118,250,244,233, 9, 26,141, 6, 29, 59,118, 60, 31, 16, 16,160,178,177,177,193, +193,131, 7,225,237,237,221,204,206,206,238,210,154, 53,107, 68,179,102,205,106,185,123,247,110, 0,152,248,188, 99,230,121,114, + 24,134,241,136,136,136,112,181,177,177, 1,203,178,101,179, 1,112,160,148,150,191,155, 41, 43, 48,139,110,221,186, 25,106,210, +148,201,100,223,221,184,113,163,187,121,134, 19,243,177,213,145,156,156,220,189, 91,183,110,223, 1,168,178,160,182,171,171,235, +172, 65,131, 6, 77,110,214,172, 89,249, 84,115, 28,199,149,191,103,102,102, 98,252,248,241,229,231,224, 56, 14,167, 79,159,158, +244,191,255,253, 15, 0,254, 87,195,181,215,117,118,118, 38,150,166,192,155, 57,115, 38,102,206,156,137,229,203,151, 19,161, 80, + 88,227,204,233,207, 66,243,159, 78,237, 13, 22,232,129, 3, 59,127,121, 55, 36,184, 49, 25,209,175,149,239,150,189, 97, 23,166, +117,111,208,101,254,209,184, 4,107,142,151,203,229,147,198,142, 29, 59,127,246,236,217,178,187,119,239, 34, 50, 50, 18, 38,147, + 9, 74,165, 18,205,155, 55,103, 14, 28, 56,160,158, 52,105,210, 78,137, 68, 50, 74,175,215,239,174,253, 37,149, 82,199, 65,176, + 80, 33, 23, 12,145, 8,133,151,244, 38,147,213,179,213,255,157,180,109,219,246,136,209,104,252, 38, 34, 34,226,196,243,142,197, + 90, 2, 3, 3, 59,138,197,226, 25, 18,137,164,231,191,213, 92, 60,120,240, 96, 70,231,206,157, 63,158, 57,115,166,244,254,253, +251,136,138,138, 66, 74, 74, 10,234,215,175,143,250,245,235,147,229,203,151,203, 86,172, 88, 49,241,218,181,107, 12,128,169,214, +234, 18, 66,152, 58,117,234,188,247,242,203, 47,191,233,236,236,108,151,148,148,148,119,238,220,185,223, 82, 82, 82,190,167,148, + 62,214,189, 36,132, 48,206,206,206, 35, 66, 66, 66,222,116, 74,241,242,177, 0, 0, 25, 53, 73, 68, 65, 84,116,116,116, 76, 73, + 73,201, 62,118,236,216,111,233,233,233,235,159, 36,211, 66, 8, 81, 3,104, 1,192,169,236,163,148,122,245,234,221,186,127,255, +126,250, 83,212, 76,174, 87,175, 94,228,227,104,186,184,184, 40,132, 66,225, 47,132, 16, 77,117,251, 80, 74,147, 77, 38,211,160, +178, 2,199,213,162, 82,169,218,169,213,106, 92,186,116, 9, 95,124,241,133, 99,183,110,221, 16, 29, 29, 13,134, 97,240,241,199, + 31, 19, 63, 63, 63, 81,106,106, 42,130,130,130,112,244,232,209,106,179, 23, 60,127,133, 16,178, 3,128, 61,128,193,148,210,204, + 10,159, 59, 3,248, 21, 64, 58,165,180, 86,243,234, 61, 77,228,114, 57,126,254,249,103,136, 68, 34,136,197, 98,228,228,228,192, +221,221, 29, 98,177, 24, 34,145,168,252, 37, 22,139,225,233,233,105, 81,143,227,254,223,222,153, 71, 69,113,166,107,252,249,170, +170,187,122, 7, 26, 65, 64, 80, 80, 65, 65, 65, 17, 16,140,122, 53, 49,152,184,141, 38,113, 25, 39,137,154,113,137,193, 61,198, + 16, 69,130, 43,142,142,163,137,113, 4,163, 68,163,102, 49, 30, 39, 99,226,141, 26,146, 25, 73,226,130,178,196,157,237, 10, 42, + 40, 59, 34, 75, 87,111, 85,247, 15,232, 22, 9, 75, 55, 65, 81,211,191,115,234,208,221,213,253,244, 91, 13,116, 61,245,126,239, +247,126,124, 40, 77,211,168,170,170,130,209,104, 52, 47,179,116,247,238, 93, 8,130, 0,150,101,205,143,155,246,241, 60, 31,218, +156, 30, 33,100,114,151, 46, 93,240,197, 23, 95, 64,171,213,254,102,191,157,157, 29, 46, 94,188, 95,103, 78,211, 52, 2, 3, 3, + 41, 66,200,100,180, 96,176, 8, 33, 2, 0,204,158, 61,251,129,229,233, 26,111,166,181,131, 5, 65, 48, 47, 33,246, 40, 53,159, +116, 90, 52, 88,203,159,239, 17,225, 31, 20,248,119,150, 21,201,120,163, 30,188, 65, 15,255,128, 94,224,121, 3,254, 47,239, 54, +122,118,102,241,215,209,222,158,251, 78,100, 94, 92,241, 66,175,176,216, 19,153, 25, 13, 95,223,120,134, 1, 33,196,107,224,192, +129,171,215,173, 91, 39,253,225,135, 31,112,237,218, 53,196,198,198, 2, 0, 20, 10, 5,190,251,238, 59, 24,141, 70,108,217,178, + 69, 53,106,212,168, 29,132,144,147,130, 32,148,181,164,217, 20,132, 16,207, 97, 33, 30, 19, 14,111, 30, 38,241,127,249,208, 7, +132,144,163,130, 32, 52,219, 64,237, 97,204,132,176, 68,211, 96, 48,140, 20,137, 68,131,131,130,130,254,100,137,201,234,168, 56, + 77, 4, 7, 7, 15, 17,137, 68,199,116, 58,157,156,101, 89, 6,205, 44, 36,221,209,113,254, 30,205, 1, 3, 6,244,115,116,116, +124, 39, 38, 38, 70,114,230,204, 25,148,151,151,163,168,168, 8,139, 22, 45, 66, 92, 92, 28,252,253,253,161, 80, 40,176, 96,193, + 2,233,188,121,243, 34, 6, 14, 28,248,213,185,115,231,206,183, 22, 39, 33,132, 26, 62,124,248,231,251,247,239,239,110, 48, 24, + 40, 0,208,235,245,234,188,188,188,233,203,151, 47, 31, 78, 8,249, 75,115, 38,171, 37,205,193,131, 7,239, 63,112,224,128, 55, +203,178, 84,253,151,181,243,180,105,211,102, 70, 69, 69, 61, 71, 8,121,181,185,191,251,150, 62, 79, 66,200, 0,185, 92,222, 39, + 34, 34,162,100,194,132, 9,249, 0,144,146,146, 66,210,210,210,134,172, 94,189, 58, 55, 38, 38,166,201,101, 62, 90,209, 12,150, +203,229,190,243,231,207, 47, 30, 51,102, 76,129, 88, 44,230,207,156, 57, 67, 95,188,120,113,104,108,108,108,206,138, 21, 43,154, + 92,151,179, 57, 77,145, 72,244,229,225,195,135,135,187,187,187, 27, 1, 8,245,239, 33, 16, 66, 4,138,162, 4,138,162,144,147, +147,227, 53,105,210,164,207, 0,140,111, 73,179,162,162, 98,250,208,161, 67,147, 86,174, 92,233, 8, 0, 73, 73, 73, 96, 24,198, +124, 66,184,118,237, 26, 56,142,195,182,109,219,116,247,238,221,155,101,237,177,183,149,167, 68,179, 43,128, 80, 0, 63, 18, 66, + 70, 8,130, 80, 82,111,174,254, 3,160, 47,128, 95, 58, 42, 78,138,162, 96, 52, 26,205, 38,234,251,239,191, 71, 92, 92, 28,190, +248,226, 11,184,187,187, 63, 96,176, 68, 34, 81,147,117, 68, 77,156,227, 0,212, 13,129, 25,141, 70, 36, 39, 39, 99,247,238,221, +232,220,185, 51,156, 58,117,130,147,179, 51,194,194,194, 96,202,154, 25,141,198,223,232, 54,214, 44, 41, 41, 1,207, 91,118,173, + 36, 8, 2, 42, 43, 43, 91,141,211, 68, 75, 70,168,225,214,204,123,181,187,230,211, 70,139, 6,203,205,213, 41,106,210,196,145, + 50, 24, 13,128,174, 26,208,213, 64,208,213, 64,208, 86,131,176, 50, 8,122, 13, 20,116, 41,222,124,222,197,238,208,233,194, 43, +239,141,240, 28,251,183, 31,243,142, 53,167,103,103,103, 23,189,115,231, 78,251, 11, 23, 46, 32, 35, 35, 3, 91,183,110,197,154, + 53,107,204, 87, 14,227,199,143,199,169, 83,167,160,213,106,177,114,229, 74,199,200,200,200,249,168, 43, 54,181, 10,215, 78, 76, +220,193,125,219, 28, 29,101, 37,248,235,132,115,157,254,121, 48, 55, 2,192, 71,214,234, 60, 10, 34, 35, 35,229,155, 54,109,250, +198, 82,147,213, 81, 4, 7, 7, 15,145, 72, 36,199,162,163,163, 21,209,209,209,237,210,237, 55, 56, 56,216,159, 97,152, 47,245, +122,253,210,212,212,212,227,237,161,249,123,145, 72, 36, 11,223,121,231, 29,233,173, 91,183, 80, 81, 81, 1,137, 68,242,192,151, +155, 68, 34, 1, 69, 81, 96, 89, 22,211,166, 77,147, 38, 36, 36,188, 13, 96,106,107,186,174,174,174,179,246,237,219,215, 93,167, +211, 81,213,213,213, 16,139,197, 16,139,197,232,215,175, 31,189,108,217,178,174,139, 23, 47,158, 11, 96,187, 53,177,170,213,234, +233,251,247,239,247,102, 89,150,186,125,251, 54,134, 12, 25,130,179,103,207, 34, 44, 44,140, 94,182,108, 89,183, 5, 11, 22,204, + 1, 16,103,141, 38, 33,196, 77, 46,151,251, 39, 37, 37,221,236,210,229,126,114,168,123,247,238,194,232,209,163,203, 50, 50, 50, +124, 83, 83, 83, 75,131,130,130, 44,202, 88,215,107,186,203,229,114,191,227,199,143,223, 94,179,102,205,243,113,113,113, 19, 0, + 32, 52, 52,244, 72,108,108,236, 15,165,165,165,125,147,147,147, 75, 67, 67, 67,243,173, 8,181,147,171,171,171, 33, 34, 34, 66, +213,120, 71, 76, 76, 12, 86,175, 94,141,189,123,247,150, 2,232,220,146, 72,151, 46, 93,254, 68, 81,212,106,127,127,127,187, 17, + 35, 70, 32, 41, 41, 9, 11, 22, 44,224,244,122,125, 38, 0,132,135,135,247, 94,181,106, 21,155,154,154, 10,181, 90, 45,186,125, +251,246, 39, 93,186,116,177, 21,190, 91,206, 4, 0,255, 5,224,143, 58,147, 53, 5,192, 33, 0,125, 0,100, 0,152,212,129,177, +153, 13, 86,126,126, 62, 18, 18, 18, 16, 27, 27,139, 94,189,122, 65,167,211,129, 97, 24,179,185, 98, 24, 6,132, 16,139,151,210, + 50, 26,141, 56,119,238, 28,246,237,219,135,149, 81, 81, 80,169,234,254, 76,117, 58, 29,202,202,203, 33,149, 74,205, 38,172, 37, + 4, 65,248, 42, 43, 43,107,177,187,187,187,121,152,178,225, 16, 33, 0, 40,149, 74,240, 60, 15,131,193, 0,142,227,176,107,215, + 46,131, 32, 8, 95,181,164,107, 50,117, 52, 77, 99,201,146, 37,224,184,251,107,142,247,239,223, 31, 0,224,229,229,133,192,192, + 64,243,125, 83,134,202, 18,205,221, 67,250,161,182,193,179,125, 87,109, 6, 0,120,120,120,192,215,215, 23,110,110,110, 22,105, + 62,233, 48, 64,221, 65, 10, 77, 44,116,123,231, 78,209,198,189,241,159,108,102, 69,148, 40,124,176, 47,212, 18, 3,136,220, 17, +226,225,239,129, 56,120, 2, 0,132,178, 28,104,143,191,135, 41,129, 37,212, 62,142,254,122,245,104,111,231,152,239,178,155, 44, +174,163, 40,106, 80,183,110,221,144,148,148,132,238,221,187, 35, 58, 58, 26,126,126,126,144,203,229, 40, 44, 44, 68,117,117, 53, + 20, 10, 5,140, 70, 35,130,130,130,104,149, 74,245, 28,172, 52, 88,132,144,160, 89, 83,194, 66, 25, 59, 63, 12, 25,245, 12, 78, +236, 24,174,216,251,109,193,114, 66,200, 39, 13, 23, 71,125, 92,120,233,165,151, 80, 88, 88, 40,223,191,127,127,155, 77, 86, 88, + 88,216, 9,131,193, 48,178,181,231,201,100,178,255,252,244,211, 79, 35,172,213, 55,153,171,132,132, 4,133,131,131, 67,147, 87, +114,109,208,244,103, 24,230,231,233,211,167,219,237,223,191,255, 95, 65, 65, 65, 47, 63, 14, 38,139, 16, 50,184, 71,143, 30,184, +113,227, 6, 10, 11, 11,193,113, 28, 10, 11, 11, 1, 0,183,110,221,130,135,135, 7,212,106, 53, 60, 60, 60,208,187,119,111, 66, + 81, 84,152, 37,186,207, 61,247,220, 4, 0, 84, 78, 78, 14,138,139,139, 97,111,111, 15,133, 66, 1,119,119,119,140, 24, 49,130, +241,246,246, 30, 3, 43, 13,214,232,209,163, 39,202,229,114, 42, 47, 47, 15,185,185,185,224, 56, 14,153,153,153,176,183,183, 71, +120,120,184,200,219,219,123, 28,172, 52, 88, 0, 2,230,204,153, 83,212,208, 92,153, 80, 40, 20,196,215,215,183,204,193,193, 33, + 4,128,197, 6, 11, 64,192,130, 5, 11, 10, 55,108,216, 48, 44, 49, 49, 49,210,244, 96, 98, 98,226,187, 0,176,125,251,246, 36, + 71, 71,199, 16, 0,214, 24, 44, 8,130,192,207,156, 57, 51,139,101, 89,152, 54,147,113,221,188,121, 51, 40,138,178,183, 64,102, + 69, 70, 70, 70,127,165, 82,137,140,140, 12,208, 52, 13, 66, 72, 86, 65, 65, 65,127, 0,136,140,140,204,214,104, 52, 61, 53, 26, + 13, 38, 77,154, 68,198,142, 29,219,111,235,214,173, 81, 0, 30, 11,131, 69, 8, 25, 8, 96, 11,234, 10,128,163, 4, 65, 56,219, +193, 33, 61,128, 32, 8,133,132,144,103,113,223,100,165, 1,144,160,206, 92, 61, 43, 8, 66, 97, 71,197, 70, 8, 1,207,243, 96, + 24, 6,155, 55,111,134, 78,167,195,129, 3, 7,112,232,208, 33, 80, 20, 5, 66, 8, 8, 33,176,179,179,195,135, 31,126,104,190, +111, 9, 6,131, 1,123,246,236,193,123,145,145,102,115, 5, 0, 98,177, 24,174, 46, 46,232,228,228,132,156,156,156, 86, 13, 86, + 81, 81, 81, 76,114,114, 50, 90, 42,114,127,229,149,251, 35,172, 13,139,220, 45,137,147,166,105,112, 28,135,145, 35,239,159, 62, +230,207,159,111,190, 93, 94, 94,110,250,159, 0,177,240,224,105,154, 70,173, 0,188, 36,189,255,216,152,165, 75,205,183, 75, 74, + 74,154,213,108,206,139, 60,169,180,152,193, 98,135,230,109,191,126,138, 10,156, 60,238,153, 25,142,118, 50,240,247, 10, 32,126, +126, 21, 46,148,201,241, 65,124,221,185,112,241,164, 32, 4,140, 92, 7,238,147, 23, 48,194, 75,203,126,146, 42, 91, 6, 32,186, + 41, 61, 39, 39, 39, 39,131,193, 0,138,162,160, 80, 40,224,232,232, 8,153, 76,134,146,146, 18, 44, 92,184, 16,199,142, 29,131, + 86,171,133, 88, 44, 70,143, 30, 61,160,211,233,122, 90,123, 64,174,106,102,247,214,205,177, 14,165, 57,159, 33,229, 90, 5,228, +246, 30,136,154, 19,162, 94,181,227,124, 12,128,119,173,213,123, 20,244,237,219, 23,139, 22, 45,146,127,244,209, 71,109, 50, 89, + 6,131, 97, 45,195, 48, 67,150, 46, 93, 42,155, 52,233,183, 23,132,151, 47, 95,198,220,185,115,107,107,106,106,214, 91, 27, 91, +112,112,240, 16,150,101,143,237,222,189, 91, 97,111,111,143, 27, 55,110, 88, 43,209,148,166, 63,195, 48, 63,111,219,182,205,174, +103,207,158, 16,137, 68,210, 61,123,246, 60, 22, 38,203, 96, 48,116,147,203,229, 40, 41, 41,193,226,197,139, 31, 40, 80, 53, 13, +103, 3, 64, 70, 70, 6, 60, 60, 60,160,209,104,220, 45,209,117,116,116, 84, 11,130,128,217,179,103,227,230,205,251,222,196,221, +221, 29, 55,111,222,132,193, 96,112,180, 54, 86,181, 90,237,168,215,235, 49,124,248,112,104, 52, 26, 0,192,148, 41, 83, 32, 18, +137, 80, 84, 84, 4,157, 78,215,169, 21,137,166,112, 26, 59,118,108, 65,115, 59, 21, 10,133, 94,173, 86,123, 89,169,217,105,220, +184,113,249, 59,119,238, 28,223,120, 71,114,114,242,120,123,123,251, 68, 71, 71, 71, 95,171, 35, 5,120,137, 68, 2,137, 68, 2, +145, 72, 4,150,101, 33,145, 72,192,178, 44, 68, 34, 17,104,154,182,104, 92,133,231,121, 28, 61,122, 20, 20, 69, 61, 48,116, 17, + 29, 29,253,166,131,131,131,203,201,147, 39,205, 23,128, 85, 85, 85,240,241,241,233, 17, 30, 30,158,126,231,206,157,220,203,151, + 47,191,220,134,184,219,147,191, 3, 48,213,133,197, 1, 8,236,192, 88,154,164,222,100, 77, 6,112, 30,117,230, 74, 11, 96, 98, + 71,154, 43, 19, 38,131,101,250, 63,151, 74,165, 8, 10, 10, 50,155, 41, 66, 8,106,106,106,204, 67,132,150,158,244,239,222,189, + 11, 55, 55, 55,168, 84, 42,248,244,234,133,172,204, 76, 0, 48,223,102, 89, 22, 64,157, 17,107,137,250,153,128, 75,208, 66, 61, + 85, 91, 48,101,142, 24,166,229, 50,108, 55, 55, 55,240, 60,111, 50,150,173,101,176, 44,210,116,114,114, 66, 85, 85,149, 69,154, + 79, 58, 12, 0, 52,229, 24, 87,175, 38, 20,119,170,123,194,228, 49,161, 51,250,120, 40,192,149,228,128, 85,118, 2,113,240,194, + 7,241,199,113, 37,183,174, 52,234,131, 67,169,216,187,252, 69, 16,185, 35,220,106,175, 65, 37,149,188,140,102, 12, 86,105,105, +105,149, 78,167,115,148,201,100, 96, 24, 6, 98,177, 24, 37, 37, 37,120,255,253,247,113,240,224, 65,120,121,121,193, 96, 48,128, +101, 89, 20, 23, 23, 67, 44, 22, 91, 53, 59,145, 97,200,216, 85,139, 70,119, 87,116,234,133,210,212, 53,117, 15,218, 5, 97,206, + 20,154,253,199,190, 75,211, 9, 33,255, 16, 4,161,205, 69,186, 15, 11,165, 82,137,192,192, 64,188,250,234,171,242, 3, 7, 14, +124, 10,192,195,154,215,167,164,164,252, 18, 28, 28,252,194,150, 45, 91, 78,220,190,125, 91, 54, 96,192, 0, 40,149, 74, 40,149, + 74,228,228,228, 96,205,154, 53, 26,142,227,198,181, 37, 59,198, 48,204,158,153, 51,103, 42,236,236,236,144,147,147, 3, 71, 71, +171,125,192, 3, 4, 7, 7,251,139, 68,162,159,183,109,219,102,231,237,237,141,171, 87,175, 34, 56, 56, 24,174,174,174,210, 13, + 27, 54,116,184,201, 18,139,197,183,138,139,139,189,187,118,237,138,132,132, 4, 80, 20,133,130,130, 2, 68, 69, 69, 97,195,134, + 13, 8, 11, 11,131, 74,165, 66,215,174, 93,145,149,149, 5,169, 84,122,219, 18,221,252,252,252, 50, 0,157,143, 29, 59,134,226, +226,251, 45, 91, 60, 61, 61, 81, 86, 86, 6,142,227, 74,173,141, 53, 63, 63,191, 20,128, 75,122,122, 58,114,115,115, 49,106,212, + 40,124,253,245,215, 8, 9, 9,129,209,104,132, 94,175,183, 90, 19,128,145,166,233,102,191,244,234,175, 56,213, 86,106, 26, 90, +210, 68, 93,191, 41,107, 53, 33, 8,130,208,156,185, 98, 89, 22,173,188,167,137, 88, 63, 63,191,213, 61,122,244,232, 19, 21, 21, + 37, 98, 24, 6, 67,135, 14,237,189,108,217,178, 60,153, 76,214,233,189,247,222,147, 55,241, 26, 25,128,254,125,250,244, 81, 88, + 27,243, 67,160, 97,150,238,177,156,116, 66, 8,233,140,186,140, 31, 11, 64, 87,255,243, 11, 83, 77, 86, 7,198, 5,158,231, 33, + 22,139,177,106,213, 42,188,245,214, 91,112,113,113, 65,100,100, 36, 24,134, 49,111, 64, 93, 86,198,148,213,178, 4, 65, 16,224, +210,185,197,209,105,115,145,123, 75, 60,172, 54, 13, 38, 51,100, 73, 45, 84,131,108, 83,139,207,107, 15,205,167, 41,123, 5, 52, + 51, 68,104, 54, 87,163,130,103,248,121,200,144,150,122, 17, 1,174,122, 8, 34, 81,243, 74, 70, 61,136, 88, 1, 7, 25,211,172, + 57, 32,132,164,230,230,230,122, 58, 56, 56, 64,167,211,129,101, 89, 4, 4, 4,224,244,233,211,224, 56, 14, 90,173, 22, 18,137, + 4, 98,177, 24,151, 46, 93,130, 78,167, 75,178,244, 64, 8, 33,180,139,154,222,246,238,138, 53, 42,228, 39,192, 65,197,226,185, + 65,222,128,162, 15,232,234,107,216,178,114,156,227,155, 81, 95,127, 0, 11,234,101, 30, 53, 74,165, 18,121,121,121,248,252,243, +207,107, 56,142,155,222, 22, 13,147,201, 58,120,240,224, 9, 7, 7, 7, 89, 88, 88, 24, 50, 51, 51,177,126,253,122, 13,199,113, + 99,219, 90,223,101, 48, 24,222,216,181,107,215, 49,131,193,160, 48,153,139,182, 98,202, 92, 45, 92,184, 80,229,227,227,131,236, +236,108,216,219,219, 67,165, 82,161,123,247,238,112,115,115,147, 46, 92,184,176, 67, 77, 22,207,243,167,178,179,179,123,250,249, +249,145,222,189,123,131,101, 89,184,187,215, 37,169,250,247,239, 15, 63, 63, 63,136,197, 98, 0, 64,118,118, 54, 96, 97, 95,150, +159,126,250,233,223, 25, 25, 25,179, 66, 66, 66,104, 87, 87,215, 7,102, 39,109,216,176, 65,151,151,151,103,245, 50, 15, 63,254, +248,227,215, 23, 47, 94,156, 61,116,232, 80, 70,173, 86, 67, 34,145, 32, 32, 32, 0,110,110,110, 88,191,126,189,238,250,245,235, +109, 89, 58,226, 70,122,122,186,180, 87,175, 94, 77,142, 93, 40,149, 74, 21, 0,107, 51, 15,183, 82, 82, 82,196,131, 6, 13, 58, +242,221,119,223,249, 55,220, 17, 26, 26,122, 68,169, 84,218, 3,176,200,168, 54,130,111, 56, 52,216,112,168,144,101, 89, 48, 12, +211,106, 6,171,160,160,224, 27, 87, 87,215,255,115,113,113,249,101,240,224,193,246,231,207,159, 71,116,116,180,152,227,184,110, +137,137,137, 0,154,110,146, 40, 8, 2,170,171,171,165,191,217,241,232, 89, 12, 96, 43, 0, 57,128,200, 86,158,251,200, 33,132, +184,160,174,160,221, 23,117,195,130, 83, 80,103,182, 76, 53, 89, 29,106,178,120,158,135, 72, 36,130,175,175, 47,150, 44, 89,130, +141, 27, 55, 34, 34, 34, 2, 62, 62, 62,166,248,205, 53, 88,245, 51,222, 44, 58,241,139,197, 98,184,184,186, 66,175,215,155,179, + 87, 0,144,149,153, 9,134, 97,192,243, 60, 56,142,107,117,136,176,115,231,206,171, 55,109,218,180,112,244,232,209, 84,195, 25, +119,130, 32,152,219, 73, 52,220,244,122, 61,190,249,230,155,133, 27, 54,108, 0, 44,200,122,209, 52,141,254,253,251, 63, 48, 44, +184,125,251,253, 74,133,160,160, 32,132,135,135, 91, 53,219,143,166,105,248,174,218,252,192,176,224,255, 58,223,255,216,186, 78, +155, 3,159,245,219,154,212,124,218,134, 8,155,252,212,116,167, 61,215, 77,122, 49,112,134,159,187, 4,233,169,151,240,109,242, +237,107, 37, 37, 21,224, 11, 47,130, 47,190,138,197,147,130,208,199,203, 17,125,188, 28,177,120, 82, 16,248,162, 75, 16,202,115, + 32, 72,213, 40,170, 38,205, 14, 47,148,149,149,253,125,237,218,181,229,106,181, 26, 82,169, 20, 44,203,226,214,173, 91,232,219, +183,175,249,126,253,149, 39,162,163,163,139,139,139,139,227, 45, 61, 16,133,140,154,179, 49,106,170,139, 88,162, 2,202,146, 96, +103,167, 68, 66,252,102,128, 43, 0, 40, 22,127, 10, 15,164,221, 92, 28, 70, 16, 66,122,183,229,131,122,152,220,184,113, 3,171, + 86,173,170,169,173,173,253, 93,133,238, 41, 41, 41,191,232,116,186, 23,226,227,227,107,191,253,246,219,223,109,174, 76,154,122, +189,126,212,167,159,126, 90,125,227,198, 13, 40,149,202,182, 74, 65, 44, 22,191,103, 48, 24,236,182,110,221,202,143, 28, 57,210, + 56,111,222, 60,227, 27,111,188, 97,124,229,149, 87,140,225,225,225,198,185,115,231, 26, 57,142,147,200,229,242, 77,109,126,147, +223, 9,199,113,219,227,226,226, 52, 20, 69, 65,169, 84,130,101, 89, 56, 59, 59, 3,168, 51,194,166, 19,185, 78,167,195,142, 29, + 59,106,107,107,107, 63,176, 68,183,180,180, 52, 97,217,178,101,215, 79,156, 56,161, 55,205,242, 41, 40, 40,192,250,245,235,117, +241,241,241,249, 21, 21, 21, 31, 91, 27,107,101,101,229,158,119,223,125, 55,247,232,209,163,122,138,162, 80, 94, 94, 14, 7, 7, + 7,172, 95,191, 94,247,241,199, 31,231,223,187,119,207,106,205,103,158,121, 38, 59, 63, 63, 95,197,113,220,111,178, 63, 34,145, +136, 72,165,210, 80, 0, 63, 90,163, 25, 18, 18,146,157,155,155,107,183,110,221,186,147,225,225,225, 27, 85, 42, 85,166, 74,165, +202, 12, 15, 15,223,180, 99,199,142,255,212,107, 38, 90, 27, 43, 69, 81,102,131,101, 26, 42, 52,101,177,234, 51, 89, 22, 13, 17, +250,249,249,125,182,111,223, 62,251,204,204, 76, 84, 86, 86, 34, 45, 45, 13,169,169,169,230,161, 92,211,201,172,225, 6, 0, 53, + 53, 53, 50,107, 99,110,111, 4, 65,248,175, 32, 8,253, 5, 65,240, 22, 4,225,113,156, 36,115, 8,247,205,213,179,245, 51,207, +158,173,191,239, 15,224,223, 29, 21, 88,253,144,159,249, 98,103,234,212,169, 72, 76, 76,132,143,143,143,217, 84, 53,156, 69,104, +141,201, 48, 26,141, 8, 8, 8, 0,167,213, 62, 96,208, 25,134,129,179,179, 51,178,179,179, 97, 48, 24, 90,205, 96, 17, 66, 38, +143, 30, 61,154,186,124,249, 50,252,252,252,144,154,154,138,212,212, 84,164,165,165, 33, 61, 61, 29, 23, 46, 92,192,165, 75,151, +112,229,202, 21, 4, 7, 7, 35, 47, 47, 15, 47,190,248,162,169, 77, 67, 75, 88,149,109,178, 48,123,247, 48, 52,159,104,204, 67, +132, 13,127,186,168, 21,111,244,113, 99,144,158,126, 5, 71, 82,202,246, 18, 66, 29, 78,189,206,125,251, 98,143,123,208, 29,252, + 11, 2, 38,239,199,222,229, 47, 2, 0,248,162, 75,208,125,245, 58,136,220, 9, 89,149, 10,212,106, 43,154,189,106, 22, 4, 33, + 89,173, 86,127,185,111,223,190,153, 51,102,204, 96,121,158,135, 76, 38,195,219,111,191,109,238, 17, 66,211, 52, 34, 34, 34,170, +138,138,138,182, 10,130,144,109,201, 65, 16, 66,100,238,206,236,202,215,102, 71, 75,113,115, 39, 64,137, 81,130, 1,232, 63,108, + 38,138,114, 79, 3,213, 87, 0, 34, 70,252,223,102, 57,141,127,227, 31, 31, 3,248,159,223,251,193,181, 23, 87,175, 94, 69, 76, + 76,204,239, 54, 87, 38, 76,153,172, 35, 71,142,124,202,113,220,236,118,212, 28,181,113,227,198, 99,157, 59,119,110,243,176,136, +187,187,251,180,146,146,146,153, 22, 60,181,195,134, 58, 82, 83, 83, 83, 7, 13, 26, 20,183,117,235,214,136, 69,139, 22, 73,101, + 50, 25,236,236,236,144,145,145,129,110,221,186, 1, 0,106,107,107,177,124,249,242, 90,189, 94,191,247,220,185,115,167, 45,209, + 21, 4,129, 39,132,188, 54,119,238,220, 89,189,123,247, 30,207,243,124, 39,173, 86, 91,154,151,151,119,244,222,189,123,109,234, +131, 85,175,249,234, 91,111,189, 53,163, 87,175, 94, 19,117, 58, 93, 39,131,193, 80,122,243,230,205, 35,149,149,149, 9,109,209, + 60,117,234, 84,241,238,221,187,115,238,220,185,211,215,205,205,237,174,189,189,189, 86,171,213,210, 74,165, 82,197,178,108, 48, +128,211, 0,174, 88,163,121,238,220,185,194,248,248,248, 92,142,227,122,239,218,181, 43, 73,161, 80,252, 64, 8, 33, 98,177, 88, +173, 80, 40,158, 3,112, 18, 64,150,181,177, 82, 20,197, 55, 52, 84, 13,179, 88, 98,177, 24,132, 16,139, 12, 86,118,118,246, 47, +107,215,174,237,215,163, 71, 15,196,199,199,151, 41,149, 74,213,196,137, 19,153,187,119,239, 18,160,249, 12, 86,109,109,237,227, +144,193,122,220, 41, 69, 93,150,119,130,169,230,170, 65,225,251, 33, 0, 21, 29, 25,156, 32, 8, 15, 24,169,110,221,186, 61, 96, +170, 26,238,179,198, 96, 25, 12, 6,136,197, 98, 48, 12, 3, 87, 55, 55,179,153, 19, 4, 1,153, 89, 89, 40, 47, 47, 55,183,105, +104, 9,138,162,104, 66, 8,254,252,231, 63, 91,244,190, 83,167, 78,197,201,147, 39,209,218,112, 98,195, 25,127, 94, 94, 45,151, + 84,154, 12, 19, 69, 81, 22,207, 34,244,240,104,185,202,165, 57,205,198, 94,228, 73,167,201,106,180,130,178,154,117,187,255,149, +182,188,160,210,112, 88, 50, 56,111,201,170, 85, 16,150, 63,239,117,194, 67,193,190,208,135,202, 7,247,241, 80, 16,187,186,147, +141, 80, 85, 0,162,112, 69,185,168, 27,190, 73,189,115,135, 18,209, 45,102, 31, 42, 42, 42, 22,127,248,225,135,244,177, 99,199, + 38,199,198,198, 58,248,250,250,226,181,215, 94,131, 86,171,197,133, 11, 23, 48,119,238,220,178,226,226,226,157, 21, 21, 21, 27, + 45, 61, 8, 39, 59,230,253, 15, 86,188,208,137,226,171,128,202, 20,128,177,135,147,163, 10,191,158, 79, 2,238,158, 7, 40, 49, + 64,177, 8, 25,224,135,254,254,222,126,132,144,161,130, 32,252,108,213, 39,245,144,120,243,205, 55,219,205, 92,153, 72, 73, 73, +249, 5, 64,143,246,210, 51,105, 6, 7, 7,143, 90,186,116,233, 49,158,231,155,170, 75,105,149,175,190,250,202, 8,160, 93, 90, + 60, 60, 76,244,122,253,242,203,151, 47, 99,254,252,249,111,189,254,250,235, 50, 95, 95, 95,120,122,122, 34, 51, 51, 19, 25, 25, + 25,136,139,139,211,240, 60,159, 80, 81, 81,241,142, 53,186,245, 61,169,118,214,111,237, 66,125, 51,209, 79,234,183,118, 97,214, +172, 89, 23,179,178,178,202,220,221,221,195,104,154,238,135,186, 70,145,183,235,223,195,106, 35, 4, 0,115,231,206, 77,207,201, +201, 41,113,117,117, 13, 19,139,197,222,245,154,249, 0, 18,218,168, 89,250,235,175,191,122,135,134,134,242, 52, 77, 11, 34,145, + 72,168, 63, 25, 10, 12,195, 8,132, 16,225,248,241,227, 82, 0,173,214, 92,222,186,117,107,225,222,189,123, 5,165, 82, 25, 86, + 85, 85,245, 26,128, 79,107,107,107, 67, 43, 42,234,206,253,205,117,226,214,104, 52,146, 54,196,253,135, 66, 16,132,151,154,121, +188, 16,192,208, 71, 28, 78,147,172, 93,187, 22, 59,119,238, 68,107, 29,200,143, 28, 57, 2,180, 50, 68,104,250, 91, 49,213, 87, +105,181, 90, 92,190,124, 25,132, 16,243,253,134, 77, 70,141, 70, 99,139,157,222,121,158, 55,106,181, 90,124,249,229,151, 22,153, +172,207, 63,255, 28, 26,141, 6, 60,207, 91,244, 61, 91,223,152, 20,229,229,229,230,214, 9, 65, 65, 65,230,253, 58, 93,139,141, +235,155,213,244,245,245, 69, 73, 73, 9,156,156,156, 0,212, 13, 11,154, 48, 84,183,216,247,247,169,130,180,244,203,109,200,234, +103,189,236, 53, 12,245,175, 64,119,254,217, 16, 79, 9,156, 28,164,160, 69, 18, 84,106, 8, 46, 23,104,240,243,149,202,155, 70, +131, 48,110,253, 15,215, 45,106, 16, 71, 8, 25,228,230,230,182,194,104, 52,250, 83, 20, 37, 23, 4,161,138,166,233,180,130,130, +130,213,130, 32, 92,178,230, 32, 28, 84,116,150, 90, 65,219,139, 88, 86, 48, 26,120, 0, 20, 64, 81, 0,161, 0,208,245, 63,235, +238,215,214,234,196, 70,158, 28, 46, 44, 46,105,178, 97,224,163,100,216,176, 97, 39,170,171,171,159,184, 78,238, 50,153, 44,134, +166,233,167,182,147,187,137,129, 3, 7,134,200,100,178, 21, 60,207, 15,212,104, 52,174, 50,153,172,144, 16,114,254,222,189,123, +127, 75, 75, 75, 59,211,209,241,253,145,105,207, 78,238,141, 49, 45,246,236,228,228,212,235,215, 95,127,149, 54,204, 96, 53,252, +190,180,102, 86,153,141,199,143, 62,125,250,156,253,236,179,207, 66,186,117,235, 70,153, 10,174, 41,138, 50,111,166, 97, 44, 83, +182,229,204,153, 51,134,121,243,230,157, 78, 79, 79, 31,214,156,166,143,143,207,137,196,196,196,145, 13, 51, 84, 38, 35,213,248, +182,209,104, 68, 77, 77, 13, 98, 98, 98,190,207,202,202,106,114,169, 28, 63, 63,191,173, 43, 87,174, 92, 56,102,204, 24,138,162, +168,223,212, 92, 53,174,195,210,233,116, 56,124,248, 48,191,103,207,158,109, 87,175, 94,109,182, 6,107,192,128, 1, 55,211,210, +210, 60, 76, 45, 19, 26,111,141,103,212, 2,192,160, 65,131,110,159, 61,123,182,217,255,183,135,161,249,164, 99,177,193, 2,234, +102, 16, 69,142,240,156, 66, 64, 77,166, 8, 31, 0, 66, 88, 94, 64, 6, 1, 78,176, 82,237,142,152,111, 10,106, 27, 61, 63,160, +189, 59,242,218, 52,109,154, 29,161, 73, 8,161, 4, 11,150,158,233,232, 56,109,154,237,167,233,227,227,147,149,149,149,229,221, +130,142,217, 96, 61,109,199,254, 71,208,116,118,118, 86, 56, 59, 59,255, 64, 81,148,167,201, 68, 55,247, 19, 0,120,158,207, 45, + 44, 44,124,190,176,176,176,166, 57, 77, 15, 15,143,158, 82,169,244,159, 60,207,135,182, 86, 95, 36,212, 45, 21,147,172,209,104, +230, 53, 92,236,185,161,102,123,205, 34,108, 28,167,191,191,127,118,114,114,114, 79,153, 76,246, 64, 93, 97,227, 99, 54,113,253, +250,117, 76,156, 56, 49, 47, 61, 61,221,171,193,243,218, 93,243,105,195,170,181, 8,133,186, 79,236,203,250,205,134,141, 63, 12, +150,152, 43, 27, 79, 23,181,181,181,229,206,206,206, 85, 26,141, 70,196,113,156,200, 96, 48, 60,112,130,147,201,100,197,205,189, +214,198,227, 79,125,102,211,162, 70,193,150, 82,111,148,154,204, 70,181,133,135,213, 7,171,188,188,124,220,192,129, 3,143, 51, + 12, 35,105,108,126,154, 50, 67, 70,163, 81, 83, 90, 90, 58,234, 81,107, 62,233, 88,189,216,179, 13, 27, 54,108,252, 17,200,207, +207,111,215,147,175, 13, 27,143, 11, 5, 5, 5, 25, 0, 60, 31,119,205, 39,157,167,123, 41,107, 27, 54,108,216,176, 97,195,134, +141, 14,192,102,176,108,216,176, 97,195,134, 13, 27, 54,218, 25,155,193,178, 97,195,134, 13, 27, 54,108,216,104,103,108, 6,203, +134, 13, 27, 54,108,216,176, 97,163,157,249,127,251,242,228,233,243, 39,139,130, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, 0}; diff --git a/source/blender/editors/datafiles/prvicons.c b/source/blender/editors/datafiles/prvicons.c index 2a470e056cf..2c606230345 100644 --- a/source/blender/editors/datafiles/prvicons.c +++ b/source/blender/editors/datafiles/prvicons.c @@ -1,304 +1,409 @@ /* DataToC output of file */ -int datatoc_prvicons_size= 9534; +int datatoc_prvicons_size= 12878; char datatoc_prvicons[]= { -137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 0,192, 0, 0, 0,192, 8, 6, 0, 0, 0, 82, -220,108, 7, 0, 0, 0, 1,115, 82, 71, 66, 0,174,206, 28,233, 0, 0, 0, 6, 98, 75, 71, 68, 0,255, 0,255, 0,255,160,189, -167,147, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 11, 19, 0, 0, 11, 19, 1, 0,154,156, 24, 0, 0, 0, 7,116, 73, 77, 69, 7, -217, 3, 14, 12, 53, 26, 8,211, 40, 12, 0, 0, 0, 29,116, 69, 88,116, 67,111,109,109,101,110,116, 0, 67,114,101, 97,116,101, -100, 32,119,105,116,104, 32, 84,104,101, 32, 71, 73, 77, 80,239,100, 37,110, 0, 0, 32, 0, 73, 68, 65, 84,120,218,237,125,123, -120, 20, 85,182,239,175, 30, 93,213,121,116, 58, 47, 72, 32, 64,194, 0,137,134, 16, 68, 6, 6, 66, 8,207,235, 1,230,160,131, -115,124,220, 17,189,119,230,206,225, 19,207,232,204,248, 64, 16,197,232,213,113, 12,160,163, 40,122, 70, 4, 6,225,115,102,206, -209, 15,225,158,163, 3,142,142, 56, 38,228, 33, 4, 3, 73, 32, 60, 66, 72, 32,129,188, 31,221,233, 71, 85,221, 63,160,234, 84, - 63,211,143,170,238,228,176,127,223,215, 95, 63,170,171,123,213,174,223, 90,123,173,181,215,222, 27, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,184, 14,234,102,186,216, 89,179,102,165,139,162,120, 24, 64,158, 94,255, -193,113, 92, 91, 89, 89, 89,186, 30,191, 61,121,242,100, 62, 41, 41,105,142, 32, 8, 38,189,228, 55, 24, 12,182,242,242,242,195, - 55, 11, 39,216,155,133, 64, 55,100,255,242,181,215, 94,227,138,138,138, 80, 85, 85,133,140,140, 12, 24,141, 70, 48, 12, 3,138, -162, 64,211,244,127, 89, 6,138,242,251, 90,253,153,252,222, 98,177, 96,233,210,165,105,122,145, 63, 49, 49,113,238,150, 45, 91, -232,162,162, 34, 28, 59,118, 12, 25, 25, 25,224, 56, 14, 44,123,253, 54, 50, 12,227,243,124,127,199,100,216,237,118, 44, 92,184, -144,191,153,140, 34, 27, 44,129,182,110,221,202, 45, 88,176, 64, 33, 16,207,243, 96, 24, 6, 52, 77,123,144, 99, 40,226,184,191, -214,139, 64,178,236, 91,182,108,225,139,138,138, 38, 2, 64, 85, 85, 21, 6, 7, 7,145,144,144, 0,150,101,149,107,144,175,195, -215,195,223,241, 11, 23, 46, 64, 79,242,191,250,234,171,116, 81, 81, 81, 44, 0, 84, 84, 84, 32, 47, 47, 15,137,137,137,138,252, -106,146,203, 74,225, 78,126, 95,159, 51, 12,163,155,252, 35, 94, 1,212, 4, 90,176, 96,193, 68, 0, 40, 47, 47, 71, 94, 94, 30, -204,102,179, 79, 2,185,147,101,168, 99,231,207,159,215,203,237,249,114,243,230,205,252,194,133, 11, 39,202,159,211, 52, 13, 81, - 20, 93, 20,208, 31,185, 3, 85, 12, 61,201,191,120,241,226,216, 64, 44,122, 40,228,191, 89,193,134, 74, 32,134, 97, 32, 73,146, - 79, 2, 5, 75,126,249,181, 30,228, 47, 41, 41, 49, 46, 90,180, 40,203,151, 75, 16, 14,249,245,146,221, 31,249,221,201,172,190, -158, 80,201,239,254,123, 68, 1,194, 32, 80,168,228,215,146, 68,106,217, 23, 47, 94,156,229,205, 39, 14,150,224,129, 28,139, 4, -249, 3, 33, 49, 33,127,152, 10, 16, 40,129,100,119, 34, 88,242,251,250, 94, 36,200, 47,223,116, 57,232,213,138,252, 90,201, 63, - 20,249,229,246,247,229,186,132, 74,254,155,209, 21, 98, 67, 37,144,193, 96, 8,217,210,235,233, 2,169, 93, 54,247, 94, 75, 13, -158,247, 76,118, 4,235,239,235,161, 0,129,144,223,151,252,196,242,107,160, 0,129, 18,136,227, 56,175,228, 9,135,252,234, 52, -100,184,217, 30,117,188, 2, 0, 54,155, 13,141,141,141,104,106,106, 66,103,103,167, 75,250, 51, 92,171,175,149,252,254,200,111, -179,217,112,225,194, 5, 52, 53, 53,161,171,171, 11,177,177,177, 30,100, 15,135,252, 55,107, 32,204, 6, 67, 32,249, 6,116,118, -118, 34, 38, 38,198, 37,127, 30,109,242, 3,128, 40,138,135,111,228,249, 39,138,162,136,150,150, 22,212,213,213,225,244,233,211, -104,111,111, 71, 66, 66, 2,146,147,147, 97, 54,155, 97, 50,153, 60, 20, 32,220, 88, 32, 92, 36, 37, 37,205,185,145,231,143, 21, - 4, 1, 45, 45, 45,168,175,175, 71, 67, 67, 3,218,219,219, 97, 50,153,144,148,148,132,196,196, 68,152, 76, 38,176, 44,235, 65, -252,112,200,127,211,187, 64,162, 40, 30,190,145,231, 87, 8, 84, 91, 91,171, 16,200,100, 50, 33, 57, 57, 25,137,137,137,136,139, -139,115,201,255,135, 75,126,141, 92,136,188,220,220, 92,108,223,190, 29, 13, 13, 13, 96, 24, 6,105,105,105, 72, 73, 73,193,216, -177, 99,149, 65, 35,142,227, 96, 52, 26, 21, 2, 13,149,255, 15,230, 88, 56, 16, 4,193,148,155,155,139,183,223,126, 27,231,207, -159, 7,195, 48, 24, 53,106, 20, 82, 83, 83,145,159,159, 15,150,101,193,243, 60, 56,142, 83,198, 95,124, 89,125, 66,254,208, 92, -160,188,169, 83,167,226,173,183,222, 66, 67, 67, 3, 88,150, 69, 90, 90, 26,146,147,147, 49,109,218, 52,133, 64, 60,207,195,104, - 52,194, 96, 48,128,101, 89,205,200,175,133, 21,237,235,235, 67,124,124, 60,138,138,138,144,152,152,168, 4,233,234, 96,221, 96, - 48,120,144,200, 23,201, 35,157, 5,234,237,237,133,201,100, 66, 97, 97, 33,146,146,146, 60,200, 45,203,203,243,188, 34,191,183, - 94,128,144, 63,196, 24,160,183,183, 23,113,113,113, 10,129,220, 51, 61, 52, 77, 43, 74,192,243,188,242, 62,216,108,143,175, 99, -225, 34, 46, 46, 14,249,249,249, 16, 4, 65,137, 77,212,207, 52, 77,131, 97, 24, 24, 12, 6,229,217, 91, 15, 16,106, 32, 28, 46, - 18, 18, 18, 48,125,250,116, 69,126, 95,153, 31,119,242, 19,183, 71, 35, 5,144, 9,228, 62, 74,170, 38, 16,203,178, 10,113, 56, -142,115, 33, 80,184, 46, 81,216, 23,116,195,197,145, 36,201, 43,249,229,255, 83, 91,126,173, 98, 1, 45,228,151,173,187,211,233, - 28,146,180, 90,146, 95,118, 7,111,122, 5,144,173,187, 40,138, 30, 55, 86, 38,250,147,123,175,225,211,138, 86, 8,162, 20,210, -159,246,239, 95,161, 91, 26, 84,125, 35,101, 37, 80, 63,220, 7,192,130,177,252,145, 8,132,189,213,245,248,203,238,120, 35,127, - 32,113,129,191,239,220,244, 10,160,190, 1,238, 55,153,166,105,252,105,195,237,232, 24, 0,254, 87, 73, 37,190,172,190,170,156, -219,189,255, 71, 48,199, 25, 92,126,175,173,107, 16,223,157,239,193, 75,251,234,112,164,230,154,223,148,169, 22, 80,187, 82, 90, -167, 56,135, 74,127,106,117, 13,129,100,117, 66, 33, 54, 33,191, 39,104, 95, 4,146,173,139,252,144, 3, 94,134, 97,208,209,209, - 1,214,217,131, 23, 30,204,113, 57,183,179,163, 3,237,237,237,232,232,232, 64,103,103, 39,186,186,186, 16,195,216, 49,239, 86, - 19, 62, 47, 41,196,242,217,233,126, 7,156,180,136, 1,180, 28,213, 13,134,252,122, 21,195, 69,138,252, 55,107, 44,224, 83, 1, -134,242,221, 69, 81, 68, 70,162,251,205,242, 78,104, 65, 16, 96,183,217,240,220, 3,183,250,253, 15,173,160, 21,249, 3, 77,143, -234, 85, 16, 71,200, 31, 5, 23,200, 87,208,232, 77, 17,226, 88,215, 27,206,120, 33,132,250,253,237,147, 76, 88,124,219,104, 93, -201,239, 79,126, 45, 21, 67,175, 58, 32,119,191, 62, 28,242, 7, 26, 71,144, 44, 80,144, 46,132,175,238,158,166,135,174,243, 57, -252,234,124, 8,130,160, 43,249,135,122,232,161, 24,122,129,144, 63, 10, 61,128,123, 16, 25,232,192, 21,195, 12,237, 58,233, 73, -126, 95,242,235, 29, 11, 16,242,255, 55,139, 1, 66, 29,184,162,189,156,247, 96,201, 49,175,196,209,139,252,122,184, 60,145, 38, -191, 58, 11, 71,200, 63, 76, 98,128, 64, 6,174, 24,198,245,152,213, 46,226,179,170,171, 17, 35,191,187,252,122,250,251,122, 90, -126, 45,130, 89, 66,126, 13, 99,128, 64,235,247,153, 27, 89, 19,135, 32,161,165,221,138,205,255,126, 14, 22,155, 16,113,242,171, - 21, 64,175, 64, 56,146,196, 39,228,143, 98, 12, 16, 76, 9,115,194,221,159,249, 37,165,222,228, 15, 38, 11, 20,205, 73, 47,129, -248,253,132,252, 81,238, 1, 2, 73,131,186,147, 65, 58,124, 15, 0,192,238, 20,113,233,170, 5,191,249,176, 30, 59, 63,187, 16, - 81,242, 7,146, 9,138,102,173, 79,168, 10, 65,200, 31,161, 32, 56, 80,203,239,141, 16, 86,171, 21, 54,155, 13, 16,157,200, 28, -109,196, 27,143, 76, 71, 44,207, 16,242, 19,242,143, 60, 5, 8,165,126,223, 93, 49, 98,121, 6, 63,252,193,152,136, 95, 20, 33, - 63, 33,127, 84,210,160,222,206,251,243,115,115,163, 78,254,112,102,124, 17,242,223,164,105,208, 80,234,247,189, 29, 83, 47,158, - 21, 13, 37, 8,135,248,209, 32,127, 48,196, 38, 19,220,117, 10,130, 67,157,194,168,231, 18,129,161, 40, 0, 33, 63, 65,216, 49, - 64, 80, 35,193,132,252,218, 90, 39, 66,254,232,198, 0, 67,145,191,215,226,116, 57,215,253,125,212, 46,106, 4,147, 95, 38, 53, - 33,127,148,123,128, 64,252,255, 51, 45, 3, 46,231,213, 94,236,141,250, 5,133, 90,219, 79, 44, 63, 81, 0,175, 22,212, 23,249, - 47,180, 90,240,236,238, 90,151,243,214,191, 95,131,186,166,225,167, 4,129, 16,127,184,144,223, 23,177, 9,249, 35, 24, 4, 15, - 69,254, 5, 79,126,141,163,117,157, 30, 63,246,117, 77, 59,166,254,252, 16,242,191,103,198,161,223, 22, 97,116, 34, 31,117, 5, - 32,228, 39, 8, 74, 1, 2,201, 4,149,189,185,100,200, 31,142, 70,250,147,144,159, 64,147, 30, 96,168,165, 66,228, 37, 83,134, -173, 95, 23, 0,241, 35, 89,158, 17,174, 34, 16,242, 71, 33, 8,142,196, 58,254,145, 12,130, 9,249, 9, 2, 82,128,145, 76,254, - 64,148,128,144,159, 32,172, 24, 96,184,195,110,183,227,236,217,179, 94,253,124,189,201,111, 48, 24,194,254, 13,167,211,137,134, -134, 6,175, 10,160, 55,220,247,124,184, 41, 21,192,225,112,224,220,185,115, 81, 9, 22,195, 37, 16,207,243,109,243,231,207, 79, -139,102,131,242, 60,223, 22,234,185, 49, 49, 49,182,130,130,130,168,238,211, 27, 19, 19, 99,187,153, 20,192,133,213, 5, 5, 5, -173, 54,155, 45,234, 4, 42, 45, 45, 77, 7, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,129, 38, - 8, 42,185,127, 99, 31,225,195, 0,242,244, 18,136,227,184,182,178,178, 50, 93,210,160,179,102,205,202, 23, 69,177, 28,128, 81, - 71,249,197,178,178, 50, 70, 39,249, 71,122,251, 15, 59,249,217, 32,133,255,242,198, 62,194,168,170,170,194,184,113,227,192,243, -188,178, 85,170,251,128, 89,176,175,173, 86, 43,150, 44, 89,146,166, 35,249, 43,183,110,221, 74,233, 44, 63,173, 35,121,148,246, -175,172,172, 68, 70, 70,134,135,252,190,228,243, 54,127,219,253,243,190,190, 62, 44, 95,190, 60, 77, 79,249,111,108,100, 62,108, -248,195, 6, 35,252,150, 45, 91,248, 5, 11, 22, 76, 4,128,170,170, 42,216,108, 54,152,205,102,101,235, 36,127, 19,105, 2, 41, - 83, 62,127,254, 60,244, 36,255,230,205,155,233, 5, 11, 22,176, 35, 80,254,116, 81, 20,191,220,188,121,179,210,254,229,229,229, -152, 58,117, 42, 18, 18, 18,188,202, 31,202,242,143, 23, 46, 92,208, 85,254, 45, 91,182,240, 69, 69, 69,195,138, 63,108, 48,194, - 47, 92,184,112,162,114, 34,203,186,212,252, 7, 34, 96, 36,118, 89,244, 71,254, 69,139, 22,177, 35, 80,254,116, 81, 20,191,124, -245,213, 87,249, 69,139, 22, 41,237,207, 48,140,178,149,173, 86,107,159,234, 77,254,225,200, 31, 54, 64,203, 99, 92,184,112, 97, -150,250,152, 92, 88,230,190, 21,105,184, 59,174,235, 65,254,146,146, 18, 23,242,143, 32,249,101,242, 27,151, 44, 89,226,209,254, -238,174, 64,160,147,128, 34,181,240,239, 72,224, 15, 29,136,240,139, 22, 45,202,242,208,156, 27,126, 91, 32,141, 31, 76,119,166, - 7,249, 23, 47, 94,204,142, 64,249,125,146, 95,238, 1, 2,149, 63, 26,171,224,141, 20,254,176,161, 8,175,190, 0, 45,133,215, -234, 6, 12, 69,254, 17, 32,191, 95,242,123, 35,144, 22,228,215,170, 92, 60, 16,254, 28, 56,112, 0,102,179, 25, 70,163, 17, 44, -203,186,244,104,238,138,225, 45,104,151,229,125,250,233,167,181, 85, 0, 55,159, 45,203,215,137,114,233,178,183,110, 56, 28, 82, -233,229,243,123,147,223, 91,214, 97, 24,200,175,248,252,190,200,175,110,127,111,132, 9,101, 85, 12,173, 98,152, 64,249,115,223, -125,247, 33, 35, 35, 3,102,179, 25, 28,199,193, 96, 48, 40,189, 90, 36,219,159, 13, 36, 96, 1, 0,155,205,134,198,198, 70, 52, - 53, 53,161,171,171, 75,209,220, 96, 27, 93,207, 46,216, 31,249,189,201,207, 48, 12,174, 94,189,170,108, 6, 62,126,252,248, 33, -229, 60,119,238,156,226,187,222,122,235,173, 90,203,175,100,123,212, 1,175, 44,255,133, 11, 23,112,241,226, 69,180,183,183, 35, - 38, 38,198,107,230, 39, 28,242,107, 37,191, 55,254,244,247,247,163,186,186, 26,199,142, 29,195,201,147, 39, 49, 48, 48,128,184, -184, 56,151, 13,216, 3,181,252,234, 9, 78,235,215,175,215, 78, 1, 68, 81, 60,124, 35, 79, 59, 81, 20, 69,180,180,180,160,190, -190, 30,167, 79,159, 70, 71, 71, 7,226,227,227,145,146,146, 2,179,217,140,132,132, 4, 69,232, 64,211,111,122,103, 81, 68, 81, - 44,191,145,231,103, 3,149,191,170,170, 10, 63,254,241,143,113,240,224, 65,165, 87,240,230, 87,202,159,151,150,150,226,167, 63, -253, 41,118,237,218,133,220,220, 92,173,229, 63,124, 35,207, 63, 81, 20, 69, 52, 55, 55,163,174,174, 14,245,245,245,104,111,111, - 71,124,124, 60,146,146,146,144,148,148,132,184,184, 56, 15,139, 25, 77,242, 7,195,159,229,203,151, 35, 41, 41, 9, 38,147, 9, -177,177,177,202, 88,128, 47, 62, 69, 50, 11,148,151,155,155,139,237,219,183,227,236,217,179, 96, 24, 6,163, 71,143, 70,106,106, - 42,198,142, 29, 11,142,227,192,178, 44,120,158, 87,122, 0,117, 47,160,197, 70,116, 97,194, 56,117,234,212,160,228, 63,118,236, - 24,142, 31, 63, 14,138,162,144,158,158,238,211,250, 40, 75,194,148,149,161,180,180, 20,146, 36,225,231, 63,255,185,214,242,231, -229,230,230,226,173,183,222, 66, 67, 67, 3,104,154, 86,228,207,203,203, 83,172, 37,207,243,136,137,137, 81,222, 15,163, 93, 47, -125,242,231,155,111,190, 1, 69, 81,202, 70,224, 44,203, 42,110,143, 58, 6, 8,196,242,171,123,128, 13, 27, 54,132,213,254, 30, - 62,114,127,127, 63, 76, 38, 19, 22, 44, 88,128,196,196, 68, 23, 63, 83, 94, 94,208, 96, 48,192, 96, 48,128,231,121,208, 52,173, -108,235,169,133, 59, 20, 46,130,149,191,178,178, 82,249,206,209,163, 71, 21,247, 70,126,200,239,213,159,203,175,245,144,191,175, -175, 15,177,177,177, 40, 44, 44,132,217,108,246, 32,128, 76, 24,142,227,192,113,156,210,246,129, 14, 34,233, 29,195,248,106,255, -181,107,215,122,180,191,209,104, 84, 94,187, 43, 65,164,248,227,161, 0,113,113,113,152, 62,125, 58, 4, 65, 80,114,180,234,220, -173, 76,120,131,193,160, 92,140, 63, 95, 52,216,207,195, 69,176,242,159, 59,119, 14,205,205,205, 24, 55,110, 92, 80, 36, 53,153, - 76,186,200, 31, 27, 27,139,105,211,166, 65, 20, 69,143,129, 34,185,205,100,249,213,214, 83, 62, 22,110, 76,160, 87,251,255,254, -247,191,247,112, 39,101,222,248,202, 0,249,139, 7,228,199,198,141, 27,181, 85, 0,185,107, 82,167,217,188,237, 28,175,182,252, -222,172,191, 32, 8,104,105,105,193,165, 75,151,208,218,218,138,246,246,118,116,117,117, 97, 96, 96, 0, 91,183,110,213,237, 6, - 4, 43, 63, 0,133,252,197,197,197,160,105, 26, 5, 5, 5,200,205,205, 69, 74, 74, 10, 58, 58, 58, 80, 91, 91,139,210,210, 82, -136,162,136,226,226, 98,152, 76, 38,159, 89, 23, 45,228,231, 56,206,101,241, 49, 95,139, 21,171, 13,207,156, 57,115,208,214,118, -125, 62,126,122,122, 58, 42, 43, 43, 67, 42,141,208,171,253,127,245,171, 95, 5,197,159,168,100,129,228, 1, 22,121, 57, 14,111, -221,188,250, 61,195, 48,232,237,237, 69, 83, 83, 19,174, 92,185,130,107,215,174,161,171,171, 11,189,189,189,176, 88, 44,232,237, -237, 69, 79, 79, 15,186,187,187,209,211,211,163,188,126,237,181,215,116, 27,132, 9, 86,126,247,209,201,135, 30,122, 8,153,153, -153,202,103, 99,198,140,193,152, 49, 99, 48,121,242,100,236,217,179,199,229,251,122,200, 47,251,199,178,187,229,111,165,110,153, - 72,221,221,221,200,202,202, 66,125,125, 61, 0, 96,249,242,229,232,237,237, 69,114,114,114,196,199, 0,124,181,255,182,109,219, -188, 38, 22,220,173,251,186,117,235, 34,186,119,179,135, 2,200,141,170, 30,110,247, 39,200,203, 47,191,236, 65,240,158,158, 30, -244,245,245, 65, 20, 69, 36, 36, 36, 96,202,148, 41,152, 57,115, 38,178,179,179,241,194, 11, 47,232,122, 19,130,149, 31, 0,218, -218,218,144,150,150,134,130,130, 2, 23,242, 83, 20,165,184, 33,153,153,153, 40, 40, 40, 0,112,189,234, 48, 38, 38, 70, 23,249, -229,223,241, 70,126, 81, 20,241,248,227,143,227,242,229,203,120,241,197, 23,145,151,151, 7,154,166,209,211,211,131,185,115,231, -226,210,165, 75, 74,111,208,221,221,141,148,148, 20, 80, 20,133, 83,167, 78, 97,221,186,117,152, 48, 97, 2,222,125,247, 93,151, - 49, 16,173, 51, 65,190,218,255,241,199, 31,215,101,224, 49,220,246,247,187, 71, 88, 32,130,236,221,187, 23, 52, 77, 99,252,248, -241,152, 50,101, 10,230,205,155,135, 41, 83,166, 32, 59, 59, 27,217,217,217, 74,102, 69, 62,199,151, 2,104,185,104, 85,176,169, -191,180,180,235, 21,180,185,185,185, 30,131, 75,106,200,199, 99, 98, 98,188, 22,112,105, 37,187,175,209,221, 39,158,120, 2, 51, -103,206,196,139, 47,190,136, 13, 27, 54, 32, 61, 61, 29,171, 87,175,198, 31,255,248, 71,204,153, 51, 7,253,253,253,160,105, 26, -185,185,185,216,181,107, 23, 86,175, 94,141,125,251,246, 65, 16, 4,236,217,179, 7, 31,127,252, 49,214,174, 93,139,247,223,127, - 95,215, 82, 14,138,162, 80, 83, 83, 3,150,101, 49,109,218, 52, 77,139,221,180, 54,158, 67,238, 20, 31, 72,212,125,233,210, 37, - 24,141,198,128, 9,167,247,114,133,193,202, 47, 35, 37, 37, 69,121,237, 30, 64,187, 31,119,143, 41,180,132,175,118,148, 45,191, - 40,138,216,177, 99, 7,254,246,183,191, 97,211,166, 77, 88,179,102, 13, 86,172, 88,129,227,199,143,131,166,105,220,117,215, 93, - 72, 72, 72,192, 7, 31,124,128,181,107,215, 34, 53, 53, 21, 3, 3, 3,184,243,206, 59,113,224,192, 1,221, 75, 57,104,154, 6, -207,243,184,229,150, 91,192,178, 44, 4, 65,208, 44, 77,174,181,241,244,187, 83,124,160, 89, 27, 95,228,247,213,192,122,146, 63, - 20,249, 59, 58, 58,148,128,119,204, 24,223,251, 26,119,116,116, 0,184,190,252, 34,199,113,186,173, 53,234, 75,129, 95,122,233, - 37,172, 95,191, 30,239,191,255, 62,190,249,230, 27,228,231,231,227,147, 79, 62,193,229,203,151, 81, 89, 89,137,193,193, 65, 24, -141, 70,212,214,214, 98,234,212,169,152, 61,123, 54,218,218,218, 80, 87, 87,135,156,156, 28, 60,247,220,115, 74, 2, 66,175, 44, -156,252, 59,185,185,185, 46,228,127,227,141, 55, 92,140, 74,176,163,190,190,142, 61,255,252,243,225,197, 92,129, 16,104,168,192, - 35,216, 52,167,158,245,243,161,200, 47, 91,246,218,218, 90, 69, 1,212,191, 33,199, 1,181,181,215,119,196,145,215,208,212,131, -252,254,218, 53, 55, 55, 23,227,198,141,195, 23, 95,124,129, 25, 51,102,160,166,166, 6,181,181,181,168,175,175,199,161, 67,135, -148,193,167,153, 51,103, 98,245,234,213,200,201,201,193,192,192, 0, 82, 82, 82,112,233,210, 37,196,199,199, 99,250,244,233,186, -142, 3,168,127, 71,109,249,221, 99,128,112, 75,102,180,226, 15, 27,172, 31,234,205,122, 7, 27,169,235,189,208,110,176,242,203, - 40, 45, 45,197,228,201,147,145,153,153,233,177,193,199,197,139, 23, 81, 90, 90, 10,189, 49,148,171,120,255,253,247,163,184,184, - 24,251,247,239, 71,109,109, 45,246,239,223,143, 35, 71,142,224,217,103,159,197,220,185,215, 55, 37,175,168,168,192, 83, 79, 61, -133, 95,255,250,215, 88,185,114, 37, 56,142,195,198,141, 27,241,232,163,143, 70,164, 28,218, 91,251,191,254,250,235, 30, 61, 64, - 56,150, 95,126,189,105,211, 38,253, 20, 32, 16,237, 12,212,213,240, 53,103, 85, 79, 5, 8, 84,126,249,198,136,162,136, 61,123, -246,248, 29, 7,240, 21, 31,232,165,192,114, 15,212,219,219,139,174,174, 46,236,219,183, 15,107,214,172,193,149, 43, 87, 80, 95, - 95,143, 35, 71,142,224,171,175,190, 66, 98, 98,162,242,253,204,204, 76, 44, 91,182, 12,133,133,133, 40, 42, 42, 66, 90, 90, 26, -150, 46, 93,138, 15, 62,248, 0,107,214,172, 65,106,106, 42,146,146,146,116,155,203,224,173,253,159,120,226, 9,205,252,125, 45, -101,101,195,201,160, 4, 59, 33, 35, 18,107,243,135, 42,191, 60, 16, 22,204, 13,142,148, 2, 20, 20, 20, 32, 43, 43, 11,115,230, -204, 65, 97, 97, 33, 86,172, 88,129,202,202, 74, 28, 62,124, 24,207, 62,251,172, 11,249,229,135,217,108,198,166, 77,155,176,111, -223, 62,108,220,184, 17, 75,150, 44, 65,107,107, 43, 94,127,253,117, 28, 63,126, 28,237,237,237,184,112,225,130,110, 46,144,251, -227,181,215, 94,115,153,253, 21,142,229, 87,255,151, 46, 61, 64,176, 89,148,104,104,174, 30, 89,160,225, 0,111,174, 98,107,107, - 43,234,235,235,209,220,220,140,254,254,126,156, 56,113, 2, 14,135, 3, 13, 13, 13,152, 59,119,174,207, 54, 47, 40, 40,192,219, -111,191,141,146,146, 18,180,180,180,224,238,187,239, 6,207,243,136,139,139,195,232,209,163,117,115,129,188,181,255,147, 79, 62, - 57,172, 44,191,166, 89,160,225, 68,254, 80,228,183, 88, 44,136,141,141, 13,184, 20, 66, 20, 69, 93,123, 51, 95,164, 84,143,254, -202,243, 1,134,234,245,212, 37,198,238, 50,235, 57, 6,227, 46,215,214,173, 91,189,246,112,161, 88,126,221,123,128, 96, 6, 46, -134,186, 1,209,218, 89, 38, 24,249, 99, 99, 99,131, 42,133,208,155,252,238,237,154,158,158,142,101,203,150, 97,238,220,185,200, -205,205,197, 93,119,221,133,179,103,207, 98,246,236,217,168,168,168, 64,102,102,166,215,107, 59,122,244, 40, 86,174, 92, 9,171, -213,138,184,184, 56,236,222,189, 27, 13, 13, 13,168,169,169, 65, 70, 70,134,174,110,169,187, 44,235,214,173,139,234, 76,181,144, - 71,130,135, 10, 36,253,165, 65,171,171,171,241,209, 71, 31,225,242,229,203,184,120,241, 34,146,147,147,135, 21,249,221, 27, 86, - 93, 10,161, 14,144,221, 75, 33, 34, 33,191,250, 58, 42, 43, 43,209,219,219,139,238,238,110,252,225, 15,127, 0,199,113,152, 55, -111, 30, 30,122,232, 33,252,242,151,191,196,178,101,203,148,210,105,249,218,250,250,250, 80, 92, 92,140,242,242,114,216,108, 54, - 28, 56,112, 0,221,221,221,216,180,105, 19, 82, 82, 82,144,156,156,172, 43,249, 43, 42, 42,192, 48, 12,230,204,153, 3, 0,216, -188,121,179,207, 94, 34, 88,203,175,107, 15, 16,108,142,214,155, 2,136,162,136,157, 59,119,162,167,167, 7,113,113,113,176, 90, -173,104,106,106, 82,234,237,135, 11,249,101,249,229,218, 30,117, 41,132, 76,124,245, 56,128,124, 92, 79, 23,200,151,251,150,156, -156,140,212,212, 84, 60,240,192, 3, 88,191,126, 61, 86,174, 92,137,236,236,108,172, 91,183, 14,133,133,133,216,180,105, 19, 10, - 10, 10, 64, 81, 20,142, 30, 61,138,226,226, 98,188,247,222,123,136,143,143,135,197, 98,193,238,221,187,177,123,247,110,100,103, -103, 71,196,242,115, 28,135,156,156, 28,165,174, 73, 61,121, 61,152,146,109,189,225, 51, 8,246, 38, 88, 77, 77, 13, 14, 30, 60, -136, 43, 87,174,224,226,197,139, 72, 74, 74,242,122,179, 94,121,229, 21, 52, 54, 54, 98,194,132, 9,232,233,233, 65, 71, 71, 7, -172, 86, 43, 4, 65, 64,122,186,254,187, 31, 5,187,140,134, 92,219,227,173,212, 65, 61, 30, 32, 31,215, 59,155,229, 79,238, 61, -123,246,224,209, 71, 31, 69,103,103, 39, 58, 59, 59,177,114,229, 74,204,159, 63, 31,251,246,237,195,246,237,219,193, 48, 12, 86, -174, 92,137,242,242,114,196,199,199, 43, 3, 96,171, 87,175,198,142, 29, 59,240,230,155,111,234, 46, 63, 77,211,152, 53,107,150, - 75, 81, 95, 73, 73,201,144, 22, 63, 80,203, 31,177, 30, 64, 93,219,255,225,135, 31,194, 98,177, 32, 33, 33, 1,141,141,141,104, -110,110, 70, 69, 69,133, 11, 33,228,155,244,167, 63,253, 9, 6,131, 1,231,206,157,131,197, 98, 65, 91, 91, 27,186,187,187, 33, - 8, 2, 30,124,240,193,168,165, 65,135,202, 2,169, 75, 33,220,201, 47, 31,143,180, 11,167,150,251,228,201,147,104,110,110,198, -146, 37, 75,112,250,244,105,140, 31, 63, 30, 38,147, 9, 70,163, 17,207, 60,243, 12, 94,121,229, 21, 80, 20, 5,139,197, 2,187, -221, 14,171,213,170,244, 0,247,222,123, 47, 86,173, 90,133, 19, 39, 78, 96,198,140, 25, 17, 73, 66,168,211,158,235,215,175, 31, - 50, 22,139,164,229, 15, 56, 6,160, 40, 10,191,251,221,239,208,210,210,226,215,162,171,133, 55,153, 76, 74, 53,160, 32, 8,112, - 56, 28,144, 36, 9,207, 61,247, 28, 54,110,220, 24,149,177, 0,127, 89, 32,185,182, 71, 93, 10,225, 45, 14,144, 75, 33,244,118, -129,124,201,253,244,211, 79,227,253,247,223, 71,111,111, 47, 38, 79,158,140,207, 62,251, 12,239,188,243, 14,126,246,179,159, 97, -249,242,229,104,105,105, 81, 50, 68, 7, 14, 28, 80, 42, 66,239,189,247, 94,176, 44,139,226,226, 98, 60,246,216, 99,248,250,235, -175, 35,222,254, 37, 37, 37, 62,107,129,130,181,252,186,103,129,220,133,255,232,163,143,192,113,156, 87,139,254,192, 3, 15,120, -104,238,222,189,123,241,212, 83, 79,161,169,169, 9,241,241,241, 72, 78, 78,198,134, 13, 27, 48,107,214,172,168, 90, 80, 95,150, - 71,174,237, 9,180, 20, 34, 82, 46,144,187,220,227,199,143,199, 39,159,124,130, 21, 43, 86,224,225,135, 31,198,164, 73,147,176, -109,219, 54,236,217,179, 7, 29, 29, 29,184,239,190,251, 64, 81, 20,118,237,218,133,238,238,110,236,222,189, 27, 59,118,236,192, -170, 85,171, 80, 92, 92,140, 67,135, 14,185,100,184, 34,217,254, 27, 54,108, 24, 86,150, 63,168, 32, 56, 62, 62, 30,167, 78,157, -242,176,232, 27, 55,110,116,153,147, 41, 99,210,164, 73,248,248,227,143,163, 58,144, 20,108, 29,144,108,217, 3, 41,133,136,196, - 53,120,147,253,221,119,223,197, 35,143, 60,130,131, 7, 15, 98,235,214,173,184,237,182,219, 64, 81, 20,214,172, 89,131,173, 91, -183, 42,138,220,208,208,128, 77,155, 54, 33, 59, 59, 27,219,182,109, 67,117,117, 53, 30,123,236, 49,100,102,102, 98,247,238,221, - 81,105,255,223,254,246,183, 67, 86,131,134,242, 95,186,245, 0,106,225,119,238,220,137,103,158,121, 70, 9,168,212, 22,125, 56, -142,168, 6,187, 12,139,236,210, 4, 90, 10,161,183, 11,228, 75,118,131,193,128, 29, 59,118,120, 28, 79, 77, 77, 69,117,117,181, - 50,158,241,221,119,223, 33, 37, 37, 69,249,222,140, 25, 51,116,119,123,134,186,134,103,158,121,102, 88,142,200, 7,148, 5,154, - 52,105, 18,254,252,231, 63,143,152,114,130, 96,179, 64,193,146, 57, 26, 89, 32,127,228, 73, 74, 74, 66, 71, 71, 7, 70,141, 26, - 5, 0,200,200,200, 80,166, 67, 14,151,246,255,205,111,126,227,115, 12, 32,146, 22, 63,164, 44,208, 72,172,165, 9, 69,254, 64, - 75, 33,134,147,252,242,231,234,194,182,104,141,190,251,147,255,217,103,159, 29,150,252, 9, 40, 8,214,107,246, 80,180,131, 96, -119,151, 38,208, 82,136, 72,215, 2, 5, 90, 54, 16,109,242,143, 68,254,208, 55, 59,249,213, 46,141,123, 41,132,250,123,234, 82, -136, 72,186, 64,234,133,163, 8,249, 93,241,194, 11, 47,192,233,116,234,215, 3,140, 52,242,135, 43,127,160,165, 16,195, 33,139, - 53, 28,201, 31,105,254,132, 59, 31,216,107, 15, 48, 84, 38, 98, 36, 32, 88,249,229,244,102,160,165, 16,122,167, 67, 71, 50,249, - 71, 26,127, 60,122, 0,135,195,129,115,231,206,249, 92,193, 75, 79,168, 55,125, 8, 21,161,200, 47,187, 52,238,171, 66,200,121, -107, 89, 9,228, 82, 8,249,251,103,206,156,209, 92,254,129,129, 1,156, 63,127, 62,160,149, 52,180, 38, 86,180,218, 63,154,252, -113,145,170,160,160,160,213,102,179,165, 69, 83, 35,121,158,111, 43, 45, 45, 13,169, 98,110,238,220,185,130,221,110,167,163, 44, -191, 88, 90, 90,202,132, 40,127,171,221,110, 31,177,237, 63,210,249, 67, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, - 64, 64,240,223, 21, 20,105, 2,130, 72,225,198, 62,194,135, 1,228,233,245, 31, 28,199,181,149,149,149, 5,156, 6,101,201,109, - 33,136, 32,249,191,188,177,143, 48,170,170,170,144,145,145,161,108, 88,238, 62, 73,201,125, 65, 48,247,215,222,150, 73,180, 88, - 44, 88,186,116,105, 80,227, 16, 68, 1, 8, 34, 70,254, 45, 91,182,240, 69, 69, 69, 19, 1,160,170,170, 10,131,131,131, 72, 72, - 72, 80, 54,201, 14,164,240,207,223,241, 11, 23, 46, 4, 45,155,203,168,169,209,104, 44,166,105,218, 1, 64, 10,228, 65, 81,148, - 13,192, 6,114,139, 9,134, 34,255,230,205,155,249,133, 11, 23, 78, 84,136, 71,211, 46, 53, 85,129,204,226,211,125,167,120,187, -221,190,177,166,166,134,157, 56, 81,145,211, 99,114,184, 26,205,205,205,214,156,156,156,231, 1,188, 66,110, 53,129, 47,242,151, -148,148, 24, 23, 45, 90,148,165, 62,166,222,161, 83,171,237,147, 66,129,139, 2,136,162,200,102,101,101,161,183,183,215,163,226, -209,155, 34,164,165,165, 93, 3, 48,153,220,106, 2,127,228, 95,188,120,113,150,251,113,245,222,192, 90,238, 29, 22,150, 2,168, - 20,193,239, 68, 3, 89, 25, 4, 65, 16,201,173, 38, 8,150,252, 0,148, 29,238,229, 30, 64,171,141,243,194,138, 1,124, 89,123, -121,211,102,249,161,238, 49, 0, 12, 2,200, 32,183,157,192,221,231,247, 69,126, 0,224,121,222,227,179, 96,253,125, 93,118,138, -111,110,110,198,145, 35, 71, 48, 48, 48,160,144, 93, 77,122,245,103, 44,203,166,254,226, 23,191,232,123,231,157,119, 46,250,136, - 21, 40, 47, 10, 69,121, 81, 56,151,207,104,154,118,114, 28,247,242,224,224, 96, 49,161,212,200,204,246,168, 3, 94, 0,176,217, -108,104,108,108, 68, 83, 83, 19, 58, 59, 59, 93,210,159,195,106,163,108,134, 97, 16, 19, 19,227, 98,237,125, 41, 0,128,132,123, -238,185, 7,143, 60,242,136, 18, 51,200, 19, 72,124,229,113,213, 83, 13,221,143,201,104,106,106, 98,151, 47, 95,190, 17, 0, 81, -128, 17, 4, 81, 20, 15,223,200,243, 79, 20, 69, 17, 45, 45, 45,168,171,171,195,233,211,167,209,222,222,142,132,132, 4, 36, 39, - 39,195,108, 54,195,100, 50,121, 40, 64,184,177, 64,216, 65, 48, 0, 56,157, 78,244,247,247,163,191,191,223, 27,225, 61,148,161, -172,172, 76,209,102,111,110,148,183,158,193,215,111,202,207, 61, 61, 61,178,123, 69, 48,178,144,151,155,155,139,237,219,183,163, -161,161, 1, 12,195, 32, 45, 45, 13, 41, 41, 41, 24, 59,118, 44, 56,142, 3,203,178,224, 56, 14, 70,163, 17, 44,203, 42,177,128, - 86,129,176, 38, 61, 64,108,108,172,203,142,136, 67,244, 2,144, 36,201,231,247,135, 58,207,219,177, 72, 45, 65, 72,160, 61,250, -250,250, 16, 31, 31,143,162,162, 34, 36, 38, 38,202, 46,173,242, 44,175,112,199,113, 28,120,158, 7,195, 48, 16,122,175,161,225, -173,255,141,254,150,179,136, 73, 29,131, 49,119, 60,140,177,119,252,159,232,100,129,156, 78, 39,250,250,250,208,215,215, 23,176, - 5,215,138,248,242,179,197, 98, 33, 76, 26,161,136,139,139, 67,126,126, 62, 4, 65,240,234,234,210, 52, 13,134, 97, 96, 48, 24, -148,231,150,175,246, 34, 65,186,134,249,247, 44,133,197, 98,199,241, 67,111, 97,160,177, 26,217,255,252, 6, 40, 47,113,130,150, - 89, 32, 15, 5,144,151,215, 22, 69, 81, 83, 82, 7,115, 44,220,181, 94, 8,162, 7,217,197,241,182, 16,174,154,180, 12,195, 40, -229, 15,163,231,174,194,201,191,238, 68,231,229, 22,140,190,117, 38, 10, 87,164,225,196,223,171,112,226,133,229,152,246,244,191, -129, 55,167, 6,181, 15,181,102, 49, 64, 36, 20,192, 91,207, 66,122,128,145,173, 0, 44,203, 42,247,211,215,174,149,234,116,103, -220,184, 91, 48,245,233,127,199,177, 45,247, 35,207, 1,140,187,125, 62,110,191, 99, 9,206,125, 91,137,111,215,207,199,109, 27, -247, 35,126,194,173,250,151, 66,200, 49,128,209,104,132, 32, 8, 97, 19, 62,212,243,237,118, 59, 97,210, 8,133,175,101, 91, 36, -135, 13,151,246,174, 71,111,221,223, 33,216,108,144, 36, 17,144, 36, 72,162,120,253, 53, 0,138,166,241,221,183,103, 64,153, 51, - 48,238,214,169,152, 52,243, 7, 72, 72, 78,194,177,231,151, 97,234,163,239, 97,244,172,229, 67,238, 86,170, 73, 15, 48, 48, 48, -224, 17, 3,132, 74,106,111,239,135, 58,207,106,181, 18, 38,141, 96, 5,240,182,150, 81,235, 95,222, 69,220, 96, 51,110,255,209, - 63,128,229, 56, 80, 52, 11,138, 97,111, 60, 51, 0,197, 0, 20,125,253,193,242,144,156, 54,192, 97,193,168,239,229,160, 48,105, - 20,202,255,245, 23, 24,184,180, 22,147,254,105,157,223, 77, 54, 52,235, 1,100, 63, 92, 38,103, 93, 93, 29,170,171,171, 49, 56, - 56, 8,187,221, 14,135,195, 1,187,221,238,242,218,225,112,104,150,193,161,105, 90, 20, 69, 81,242,209,200, 86, 73,146, 54, 2, -120,157, 80,110,120, 42,129, 90, 1,104,154,134,104,183, 34, 54, 54, 6, 28,108,160, 4, 1,144, 88, 64, 50, 0, 52, 11, 9, 70, - 64, 24, 0,104,246,186, 34, 56, 44,128, 36, 1, 6, 35,224,180, 33, 46,209,140,249,247,172, 66,213,103, 31,160,191,177, 6,183, - 61,245, 1, 40,138,214, 47, 11,228,173, 7, 56,121,242, 36,246,238,221,139,212,212,212, 72,181,163,207, 97,189,150,150,150,152, -217,179,103,191,234,116, 58,137, 2, 12, 99, 5, 80, 19, 52,109,209, 67,104,220,245,107,156, 62,118,200,165, 22,128,102, 12,184, -117,217, 61,152, 48,214, 4, 26, 34, 40,134,189,113,235, 69, 72,130, 19, 0, 5, 8,118, 24, 40, 96,206,157,255,136,227,127,253, - 18,117,239, 61,137,105,107,223,208,100,217, 69,175, 89, 32,163,209, 8,135,195,225,226,150,112, 28,135,212,212, 84, 52, 53, 53, -185, 28, 11, 7,254, 74,173,253,161,175,175, 15, 78,167,211, 64,168, 54,124, 93, 32,247, 71, 76, 90, 22,114, 55,236, 87,122, 4, -123, 71, 11,106,183,254, 79,228,204,153,143,140,172, 81,144,108,189,160, 24, 14, 84,242, 36,208, 19,139, 64, 37,100, 0, 20, 13, -169,251, 34,196,179,159, 67,188, 82, 13, 88, 59, 49,125,225, 2,124,179,255, 0, 46, 29,154,129,204,101, 63, 11,123,217, 69, 15, - 5, 16, 4,193,101, 36,216,221, 87,183,219,237,176,217,108, 81,109,100,185,119, 34, 24,158,240, 87,229, 73,211, 52,250,206,126, -139,134,119, 30,198,237, 63,188, 11, 73,102, 14,210,192, 53,128, 53,130,154,184, 0, 76,246, 10, 80,234,169,145,105,121,160, 71, - 79,133,112,250, 63,225, 60,177, 15,204, 96, 59,102, 47, 91,130, 35,127,120, 6, 19,254,199,131,160, 13,124,120, 89, 43,111,194, -199,196,196,192,233,116,186, 88,104,185,122,207,189, 34, 52, 26,136,246,255, 19, 4, 31, 4,203,228,191,250,247,127,195,229,131, -175, 99,238,170, 31, 35,150,177, 0,150, 94,128,225,129,132,113,160, 38,255, 3, 4, 81,196,153,166, 78,212, 54,118,194, 50,232, -196,196,177, 9,152,153, 61, 26,252,148,101,144,202,182, 65,104,248, 11,184, 81, 57, 24, 53,126, 2,174, 30,251, 28, 99,126,240, - 67,109, 21, 64, 16, 4, 12, 12, 12,184,140, 3,184,247, 2,132,128, 4,193, 4,193, 20, 69,129,166, 40, 52,126, 88,140,193,179, -101,152,183,234, 71,224,108, 87, 33, 57,132,235,214,158, 18, 32,101, 21, 65, 16, 37,156,187,220,141,191, 84, 52,193, 41,136, 56, -118,230, 42,206,182,116,227,159,255,113, 42, 30,186,227, 22, 72,115, 31, 7, 26,254, 2,169,255, 42,198,140,189, 13,151, 14,239, -210, 94, 1,228, 24, 64,206,197,203,100,231,121,222,235,156, 0,210, 3, 16,248,235, 1,228, 12, 80,237,155, 63,131,137, 19, 48, -251,142,133, 96,196, 1, 88,185,116, 56, 41, 30,241,150, 6, 80,160, 32,198,141,129,228,116,162,236, 84, 43, 46,119, 12,160,170, -190, 21,253,214,235,177,230,159,191,108,192,143, 11,179,192,143,206, 7, 77,209,144,172, 93, 48,103, 36,160,174,186, 50,108,121, -253,246, 0,106,178,169,139,221,136, 2, 16, 4,154, 5,114,116,181,226, 84,201, 63, 33, 51, 39, 27,147,110,153, 0, 56, 7,208, -221,231, 64,233,199,251, 48,239,254,135, 0,138,129, 36,216, 33, 56,157,144, 4, 1, 45,215,250,240, 85,245, 37,168,111,177,145, - 99, 0, 73,132,195,233, 0,127,253, 15,192, 24, 56, 56,172,253,218, 43, 0, 77,211,224,121, 30, 70,163,209,174,244, 93,155, 0, - 0, 4,137, 73, 68, 65, 84,133,112,242,123,162, 0, 4,129,246, 2,131, 87, 47,226,228,203,119, 34,191,168, 16,233,163,227, 1, -209,137,182,214, 30,156,248,219, 87,136, 31,151, 3,199, 64, 15, 40, 51, 3,105,112, 0, 98,199, 89, 88, 17,139, 41, 99, 99,225, -126,123, 23, 79, 31, 3, 65,112, 2, 45,223, 2,146, 8, 24, 98, 97,119, 72,136, 73, 14,127, 43, 2,143, 92,187, 60, 14, 32,247, - 2,253,253,253,202,236,176,225,244, 32, 24,222,228,167, 40, 10, 13,255,250, 47,200,159, 63, 15,105,137, 20, 36,198,128,198,243, -173, 56, 89, 86,137, 89,175,124,137,180,194,123,208,121,249, 50,192, 39, 92, 31,248,250,250, 21,216,172, 22,204,201, 78,194,125, - 69,153, 24,101, 54,194, 28,103,192,178,239,143,197,157,115,198,194,225,112,128,173,120,227, 58,105, 19, 51,209,221,213,135,164, - 91,230,106,223, 3,200, 35,193,118,187,221, 37,240,245, 54,135, 51, 90, 86,153, 40,192,200, 80, 2,103,239, 53, 36,143,155, 7, - 73,178,227,244,137,211,104,191,218,141,217,175, 30,129, 33, 62, 17,227, 22,175, 70,217,255,123, 27, 89,121,121,160, 91,190, 5, -107,237,130,177,244, 37,244,205,122, 26,119, 23,140,197,221, 5, 99,255, 43,150,128, 8, 67,197, 27, 48, 52,253, 13,160, 89,136, - 99,102,226,204,127,124,133,121,175,188,169,189, 2, 56,157, 78, 88, 44, 22, 12, 12, 12,184,144, 77,174,239, 38, 22,152, 32,208, - 30, 32,225,150, 2,148,127,250, 57, 28,150,126,152, 38,127, 31,183,255,223, 63,129, 49,240,215, 39,197,196,153, 49,126,249, 26, -156, 59,245, 53,110,201,248, 62,132,115,159, 35,254,228, 78,112,173, 85,232,207, 95, 3,123,106, 62, 68,138, 1,215, 81,131,248, - 83,127, 0,127,165,236,186,245, 31, 55, 27,205, 45, 93, 24,117,219, 18,196,103, 76,209, 39, 6,144,103,235,168, 21,128,196, 0, - 4,193, 42,193, 45, 15,191, 5, 75,115, 61, 56, 83, 50,140, 41, 99, 61,198, 5, 38,174,252, 23,124,245,200,187, 48, 39, 23, 96, - 76,222, 61, 16, 78,255, 39,184,246,239,144,252,197, 47, 60,127,148,225,192, 76, 94,138, 46,167, 25,167, 43,190,192,226,237,199, - 53,145,213,107, 22,200,106,181,122,237, 1,252,213,242, 19, 5, 32,112, 87, 0,154,166, 97,202,156,234,187,126,159,143, 65,225, -230,175, 81,245,210, 42,116,143, 78, 70,206,109, 15,129,106, 61, 6,169,175, 21, 82,223, 21, 64, 20, 64,197,167,129, 50,141, 1, -149,158,143,198,243, 87,208,120,178, 12,133,175,254, 21,198,228,116,125, 20,192,189, 7,144, 9, 23, 19, 19, 67,122, 0,130,160, -200, 31,200, 92,222,152,212, 12,204,127,173, 12,167,222,123, 2,127, 63,240, 23,140,157, 50, 5, 73,163, 38,195,148,147, 14,138, -166,209,223,126, 13, 61,215,218,113,249,175, 21, 48,142,202,194,226,119,190, 3, 27, 19,175,153,188, 94,123, 0,139,197, 2,139, -197,226, 98,241, 29, 14,135, 50, 97, 93,239, 73,235, 67, 17,156, 76,154, 31,222, 8,122,133, 7,214,128,252, 71,182,161,239, 82, - 61, 58, 78,254, 29,205,213,135,209,241,197, 62, 72,130, 19, 73,217,223, 71,202,140, 59, 48,253,174, 66, 36, 77,153,169,185,172, - 62,199, 1,228,145, 95,181, 98, 72,146, 4,167,211,169,217,156,221, 80, 45, 57,153, 51, 60, 50,130,224, 96, 22,181,162, 40, 10, -230,204, 92,152, 51,115,241,189, 31,174,137,152,188, 94,123, 0,155,205,230,210, 3,200,100, 21, 69, 17, 14,135, 67,119, 2, 14, -165, 24, 54,155, 13, 20, 69,137,196, 21, 26, 25, 74, 16, 8,249, 35,177,147,252,144, 10,192,178,108,255,213,171, 87,227, 71,143, - 30,237, 82, 10, 33,138, 34,210,210,210,148, 50,137,104, 90,127, 73,146,112,229,202, 21,240, 60,127,105,112,112,144,176,109,152, - 43,192,112, 38,191,135, 2, 24,141,198,147,135, 15, 31,158,179,116,233, 82,212,213,213, 65, 16, 4,101,121,148,217,179,103,163, -171,171, 43,104,235,175,181,149,150, 36, 9, 53, 53, 53,131,162, 40,150, 17,170, 17,242,107,170, 0, 14,135, 99,211,206,157, 59, -255, 99,213,170, 85,134,159,252,228, 39, 56,115,230, 12, 40,138, 66, 78, 78, 14,210,211,211,113,252,248,241,168,251,255,151, 47, - 95,198,167,159,126,234,176,219,237,207, 19,186,141,188, 32, 56,156,133,108,117, 87, 0,155,205,118,152,231,249,119, 86,174, 92, -185,118,237,218,181,134, 69,139, 22, 33, 61, 61, 29, 61, 61, 61, 40, 47, 47, 15,105,185, 18, 45,122, 0, 65, 16,208,214,214,134, -154,154, 26,235,193,131, 7, 5, 81, 20,127, 13,224, 12,161,218,200, 9,130,135, 35,249,125,107, 5,203, 46,141,141,141, 61,202, -178,108, 63, 2,220, 47, 76,207, 7, 69, 81, 2,207,243,141, 6,131,225, 67, 0,217,132,102,195, 19, 51,103,206,148,156, 78,167, -100,177, 88, 36,171,213, 42, 13, 14, 14, 74, 54,155, 77,178,219,237,146,195,225,144,156, 78,167, 36,138,162,110,143,250,250,122, -105,230,204,153, 65, 89, 92,175, 43, 48, 59,157,206,207,157, 78,231,231,195,165, 97, 37, 73,138,250, 60,100,130,192, 96,183,219, -113,246,236, 89,175,126,190,222,150,223, 96, 8,126,157, 4,178, 4, 57,129,102,224,121,190,109,254,252,249,105,209,150,129,220, - 9, 2, 2, 2, 2, 2, 2, 2, 2,191,248,255, 88,111,246,205,191, 63,162, 3, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, +137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, + 68, 82, 0, 0, 0,192, 0, 0, 0,192, 8, 6, 0, 0, 0, 82,220,108, 7, 0, 0, 0, 4,115, 66, 73, 84, 8, 8, 8, 8,124, + 8,100,136, 0, 0, 0, 9,112, 72, 89,115, 0, 0, 13,215, 0, 0, 13,215, 1, 66, 40,155,120, 0, 0, 0, 25,116, 69, 88,116, + 83,111,102,116,119, 97,114,101, 0,119,119,119, 46,105,110,107,115, 99, 97,112,101, 46,111,114,103,155,238, 60, 26, 0, 0, 32, + 0, 73, 68, 65, 84,120,156,237,125,121,124, 20, 85,186,246, 83, 85,221,213, 91, 58, 59, 36, 16, 32, 48, 64,192,128, 65, 68, 17, + 66, 8,171, 10, 40,174, 51, 46, 31,200,111,116,188, 92,113, 70,199,141, 77, 16,163, 51,138,128,224, 40,138,203,160, 32,202,117, +197, 65,244,122, 85, 28, 29, 81,194,146, 24, 64, 48, 4, 66, 32, 9, 9, 16,204,218,221,233,164,151,170,250,254,232, 84,165,186, +187,186,187,122,203, 98,215,195,175, 72,117, 45,167,158,115,234,121,207,121,207,123, 78, 85, 17, 28,199, 65,129,130, 88, 5,217, +221, 4, 20, 40,232, 78, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166, +161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26, +138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, + 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, + 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24, +128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, + 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128, +130,152,134, 98, 0, 10, 98, 26,138, 1, 40,136,105, 40, 6,160, 32,166,161, 24,128,130,152,134, 98, 0, 10, 98, 26,138, 1, 40, +136,105,168,186,155, 64, 87, 98,252,248,241,233, 44,203,238, 6, 48, 58, 90,215,160,105,186,174,176,176, 48, 61, 26,105, 15, 31, + 62, 92,147,148,148, 52,129, 97, 24, 99, 52,210, 7, 0,181, 90,109,219,191,127,255,238,104,165,223,211, 16,148, 1,244,102, 1, +117,112,255,110,253,250,245,244,148, 41, 83, 80, 92, 92,140,140,140, 12,104,181, 90, 80, 20, 5,130, 32, 64,146,157, 13, 34, 65, + 16,126,215,197,219,248,223, 86,171, 21, 51,103,206, 76,139, 52,119,192, 37,254,196,196,196,137,207, 61,247, 28, 57,125,250,116, +148,148,148, 32, 35, 35, 3, 52, 77, 67,165,114,221, 70,138,162,124,158,239,111, 31, 15,187,221,142,169, 83,167,106, 34, 70,186, + 23, 64,182, 1,248, 18,144, 70,163, 1, 69, 81, 32, 73,210, 75, 28,129,132,227,185, 30, 45, 1,241,220,159,127,254,121,205,148, + 41, 83,134, 0, 64,113,113, 49,218,219,219, 17, 31, 31, 15,149, 74, 37,228,129,207,135,175,197,223,254, 51,103,206, 68,154, 58, +128, 78,241,175, 89,179,134,156, 62,125,186, 30, 0, 14, 30, 60,136,209,163, 71, 35, 49, 49, 81,224, 47, 22, 57,111, 20, 0,100, +109,167, 40, 42,106,252,123, 50,100, 25,128,148,128, 14, 28, 56,128,209,163, 71, 35, 33, 33,193,167,128, 60,197, 18,104,223,233, +211,167, 35,158, 65,158,251,186,117,235, 52, 83,167, 78, 29,194,111, 39, 73, 18, 44,203, 10,199, 5, 18,183, 92,195,136, 52,164, +196, 15,248,175,209, 67, 17,127,172, 34,160, 1,248, 18, 16, 69, 81,224, 56, 78, 56, 78,142,192,229,236,139, 36,120,238,107,215, +174,213, 78,155, 54,109,176,120,159,248,166,135, 35,254,104,113, 7,124,139, 31,112, 23,179, 56, 63,161,138,223, 51,189, 88,129, +223, 92,135, 42,160, 80,197, 31, 73, 17,137,185, 79,159, 62,125,176,231,126,222,239,143,148,248, 35,205,223,159,248,121,254,158, +235,138,248,131,135,207,156,203, 21, 16,128,144,196,239,235,184, 72, 32, 16,119,192,117,211,249, 78,111,164,196, 31, 41,254,129, +196, 15,192,203,231,247,220, 39,206,167,212,246, 64, 70, 19, 43,144, 52, 0, 57, 2, 82,171,213, 33,215,244,209,116,129,196, 46, +155,103,171, 37,134, 70,163,241,186, 94,176,254,126, 52, 12, 64,142,248,121,254, 82, 80,106,254,224,224, 85, 2,114, 5, 68,211, +180,219, 13,247, 39,144, 96, 12, 35, 28,136, 59,235,226,254, 10, 0,216,108, 54, 84, 86, 86,162,186,186, 26,141,141,141,208,106, +181,146, 66, 14,183, 35, 28, 14,252,137,223,102,179,225,204,153, 51,168,174,174, 70, 83, 83, 19,244,122,189,151,216,195, 17,127, + 44,214,254,128,135, 1,200, 17, 80, 85, 85, 21, 26, 27, 27,161,211,233, 4, 65, 68,162,230, 15, 87, 60, 0,192,178,236,238, 13, + 27, 54,208,249,249,249, 67, 88,150, 69,109,109, 45,142, 31, 63,142, 19, 39, 78,160,190,190, 30,241,241,241, 72, 78, 78, 70, 66, + 66, 2,140, 70,163, 91, 63, 32, 18,125,129,112,145,148,148, 52,225,249,231,159, 39,243,243,243,245, 12,195,160,182,182, 22,101, +101,101, 40, 47, 47, 71,125,125, 61,140, 70, 35,146,146,146,144,152,152, 8,163,209, 8,149, 74,229, 37,124, 32,116,241,199,162, + 17,184,149, 4,203,178,187, 59,226,252,130,128, 74, 75, 75, 5, 1, 25,141, 70, 36, 39, 39, 35, 49, 49, 17, 6,131,193, 45,254, + 31,174,248, 35,228, 66,140,206,206,206,198,166, 77,155, 80, 94, 94, 14,138,162,144,150,150,134,148,148, 20,244,239,223, 95, 24, + 52,162,105, 26, 90,173, 86, 16, 80,160,248,127, 48,251,194, 1,195, 48,198,236,236,108,188,242,202, 43, 56,125,250, 52, 40,138, + 66,159, 62,125,144,154,154,138,156,156, 28,168, 84, 42,104, 52, 26,208, 52, 45,140,191,248,170,245, 1, 69,252,114,224,233, 2, +141, 30, 53,106, 20, 94,126,249,101,148,151,151, 67,165, 82, 33, 45, 45, 13,201,201,201,184,244,210, 75, 5, 1,105, 52, 26,104, +181, 90,168,213,106,168, 84,170,136,137, 63, 18,181,168,217,108, 70, 92, 92, 28,242,243,243,145,152,152, 8, 0, 66,235,194, 95, + 75,173, 86,123,137,200,151,200,187, 58, 10,100, 50,153, 96, 52, 26,145,151,151,135,164,164, 36, 97,187,120,180,151,162, 40,104, + 52, 26,129,191, 84, 43,160,136, 95, 30,188,250, 0, 38,147, 9, 6,131, 65, 16, 16,127, 83,197,238, 14,111, 4, 26,141, 70,248, + 29,108,180,199,215,190,112, 97, 48, 24,144,147,147, 3,134, 97, 0,120,143, 64,147, 36, 9,138,162,160, 86,171,133,191, 82, 45, + 64,168, 29,225,112, 17, 31, 31,143, 49, 99,198, 8,252,197, 16,215,248,158,226, 87,220,158,208,224,101, 0,188,128, 60, 71, 73, +197, 2, 82,169, 84,130,112,104,154,118, 19, 80,184, 46, 81,216, 25,234,112,113, 56,142,147, 20, 63,127, 61,113,205, 31,169,190, + 64, 36,248,243,181,187,211,233, 12, 40,218, 72,138,159,119, 7, 99, 13, 94, 57,230,107,119,150,101,189,110, 44, 47,244,130,215, +255,141,226, 95,106,193,136,140, 36, 24, 28,221,185,210,167,168,194,133,248, 70,242, 70, 32, 94, 60, 7,192,130,169,249,187,162, + 35, 44, 53,175,199, 95,116, 71, 74,252,114,250, 5,254,142,137, 37, 72, 26,128,248, 6,120,222,100,146, 36,241,236, 3,179,209, +208,210,134,231,222,250, 22, 37,199,107,133,115,119,191,177, 8, 70,131,123,120,177,201,212,134, 83,213,191, 98,243,142,125,248, +169,180, 90, 50,205, 72,137,159, 79,219,215, 0, 87, 36,230,250,248,218,199, 95, 47, 18,144, 19,213, 9, 69,216,138,248,189,225, +229,116,243, 55,148,175, 93,248,133,239,240,242,219,211, 83,227,177,240,247, 19,221,206,165, 36,106,212,212,164, 56, 76,188,236, +119,216,252,183,121,152, 60,110,152,112,141,104,245, 1,194,169,189,195, 17,127,180, 38,195,117,149,248, 99,181, 47,224,211, 0, +124, 9, 64,188, 62, 36, 35,197,237, 92, 74,229,219,151, 86, 81, 20, 22,221,145,239,247, 26,145, 66,164,196, 47, 55, 60, 26,233, + 86,140,135, 34,254,232, 67,178,253,227,111,100, 32, 67, 48, 26,180,110,231, 81, 18,130, 16,255, 30, 51, 98, 0,174,202, 25, 18, + 85,241,251,227, 31, 73,195,144,218, 30, 9,120,250,245,252, 54, 32, 60, 97, 43,226,151,134,151, 1,200,185,233,190,106,188, 64, +157, 74,146, 36,241,246,234, 63, 70, 93,252,129,150,104, 24, 70,180,160,136, 63,186,144,108, 1, 60, 59,145,114, 7,174, 40, 74, +126,216, 51, 26,226,247,197, 63, 18,181,190, 34,254,223, 38, 36,251, 0,114, 69,236, 41, 96, 74,226,216, 71,215,238,232, 82,241, + 71,195,229,233,106,241,139,163,112,138,248,163, 11,217,125, 0, 57, 3, 87, 36,229,222, 7,104,183, 59,177,167,184,188,203,196, +239,201, 63, 18,226,247,183, 47,218, 80,196, 31,125,200,234, 3,248,243,235,197,224,195,160, 78,134, 69, 93,189, 9,111,124,188, + 23,109, 54, 71,151,139, 95,108, 0,209,234, 8, 71, 19, 82,177,121, 69,252,209, 65,192, 62, 64,160, 78,173, 24, 99,110,121, 86, +242, 34, 93, 37,126,241,245, 0,255, 81,160,112, 12, 35,154,144, 18,169, 34,254,232,193,103, 11, 0, 4, 14,131,122,138,225,216, +167, 79,128, 32, 8, 48, 44,135,186,122, 19, 94,251,240, 7,236,248,186,164, 75,197, 47,206, 67,164,107,253,174,112,123, 60,161, +136, 63,186,144, 84,165,156,154, 95, 74, 16,252, 62, 90,173,194,160,254, 41, 88,117,255,245,208,105,212,138,248, 67,132, 34,254, +232,195,167, 1,200, 17,191,167, 40, 60,247, 25,116, 26, 76,187,106,100,151,100,196, 31,127, 69,252, 10,124, 33, 96, 39, 56,152, + 48,168,212,121, 27, 87,222,217,101,153,145,226, 31,174,191,175,136,255,183, 13,159, 97, 80, 57,226,151,114,129,124,237,235, 74, + 68,170,214,239,206, 60, 4, 35,126,229, 1,247,208, 33,217, 2,200,245,255,125,245, 1,186, 83, 56, 60, 15, 69,252, 10,228, 32, + 96, 31, 32, 24, 23, 72, 17,127,100,161,136, 63,250,240, 59, 21, 34,144,248, 45, 86,155,219,185,158,191,187, 11,189, 89,252,188, +168, 21,241,119, 13,100,133, 65,125,185, 68,167,107,234,221,206, 43,175,186,216, 37,164,253,193,159,240,123,186,248,121, 40,226, +239, 58, 72, 26,128, 28,241,215, 92,104,194, 11,111,127,227,118,222,218, 55,191,196,169,234,158,103, 4,114,132,223, 83,196, 47, +134, 34,254,232,195,111, 24,212,151,248,239,124,108, 51, 14, 29, 63,235,149, 88,209,209, 74, 92,123,239, 63, 48,242,119,233,216, +246,220, 61, 72, 73,140,235,146, 76,120, 66, 17,191, 2,185,240, 25, 6,245, 23, 9,250, 96,195,194, 30,209,225,149,130, 34,126, + 5,193, 32,232, 48,168,248,119, 79,133, 28,225,119,229,244,140, 80,161,136, 63,250, 8, 42, 12,218, 27,196, 47,167,198, 87,196, +175,128,135,236, 48,104,111, 16, 63, 15, 69,252, 10,228, 34,232, 62, 64, 79,135,221,110,199,169, 83,167, 36,253,252,104,139, 95, +173, 86,135,157,134,211,233, 68,121,121, 57,128,174,127,105, 21, 77,211, 93,122,189,158, 0,175, 18,118, 56, 28,168,168,168,232, +150,206, 98,184, 2,210,104, 52,117,147, 39, 79,142,202,119,122,131,225, 16,234,185, 58,157,206,150,155,155,219,173,223,233,213, +233,116, 61, 99, 52,179,139, 64,136,191,244, 56,105,210,164, 11, 54,155,173,219, 5,180,119,239,222,168,124,105, 93,129, 2, 79, +184, 25,128, 2, 5,177,134,158,223, 35, 84,160, 32,138, 80, 12, 64, 65, 76, 67, 49, 0, 5, 49, 13,197, 0, 20,196, 52, 20, 3, + 80, 16,211, 8,106,164,165,227, 59,194,187, 1,140,142, 18, 31,208, 52, 93, 87, 88, 88, 24,149, 48,168,194, 63, 48, 98,141,191, +108, 3,224, 63,162,221,241, 29, 97, 20, 23, 23, 99,192,128, 1,208,104, 52,194,167, 82, 61, 7,204,130, 93,111,107,107,195,140, + 25, 51,162, 50, 14,193,243,239,248,144,118,175,229,207,151,127, 81, 81, 17, 50, 50, 50,188,248,251,226,231, 57,144, 41,181,221, +108, 54, 99,246,236,217, 49, 85,254,178, 12, 64,252, 5,249, 41, 83,166, 12, 1,128,226,226, 98,216,108, 54, 36, 36, 36, 8,159, + 78, 10,244, 58,244, 64,251, 78,159, 62, 29, 12,119,217, 16,243,207,207,207,239,181,252,215,173, 91, 39,148,255,129, 3, 7, 48, +106,212, 40,196,199,199, 75,242,151, 51, 29,220,115,255,153, 51,103,162,202,191, 39,150,127, 64, 3, 16,147,159, 58,117,234, 16, +225, 68,149, 10,226, 65, 52, 57, 4,229,100, 42,210,248,173,240, 95,179,102,141,102,218,180,105, 2,127,138,162,132, 79,217, 6, +203,213,215,254,104,160,167,151,191, 95, 3, 16,213, 60,218,169, 83,167, 14, 22,239,227, 39,150,121,126,138, 52, 28,242,145,190, + 9,191, 21,254,107,214,172,209,206,152, 49,195,139,191,248,122,114,133, 31,232,152,104,240,239,201,229,239, 51, 10, 36, 38, 63, +109,218,180,193,158,251,121,191, 13, 8, 92,248,193, 52,103,145,194,111,133,191,148,248, 1, 87, 11, 32,151,191,220,188,196, 98, +249, 75,182, 0,129,200,139, 51, 16, 73,242,145,186, 1,191, 21,254,190,196, 47,230, 15,200,251, 14,130,156, 99, 34, 53, 93, 92, + 78,249,239,218,181, 11, 9, 9, 9,208,106,181, 80,169, 84,110, 45,154,167, 97,120,110, 19,231,121,233,210,165,145, 53, 0, 15, +159, 77,146, 60,224,154,186,236,121, 81,185, 5, 30,205, 38,248,183,194,127,205,154, 53, 26, 95,226, 23,243,231,121, 75,241,151, + 43,124,241, 49,145,226, 31,168,252,111,191,253,118, 12, 24, 48, 0,241,241,241,160,105, 26,106,181, 90,104,213,186,178,252,221, + 12,192, 87,135, 5, 0,108, 54, 27,170,170,170, 80, 85, 85,133,166,166, 38,104,181, 90, 47,194,225,146, 15,247, 6, 4,226, 95, + 89, 89,137,234,234,106, 55,254, 23, 47, 94, 20, 62, 6, 62,112,224,192,128, 60, 43, 42, 42, 0,184,124,215, 75, 46,185, 36, 42, +252,215,173, 91,231,214,225,229,249,159, 57,115, 6, 85, 85, 85,168,175,175,135, 78,167,147,245,174,163, 96, 91,134, 72,240,151, + 42,127,139,197,130,195,135, 15,163,164,164, 4,199,142, 29, 67,107,107, 43, 12, 6,131,219, 7,216,229,214,252,252, 58, 73,146, + 88,182,108, 89,228, 12,128,101,217,221, 29,113,218, 33, 44,203,162,182,182, 22,101,101,101, 56,113,226, 4, 26, 26, 26, 16, 23, + 23,135,148,148, 20, 36, 36, 36, 32, 62, 62, 94, 32, 45, 55,252, 22,237, 40, 74, 40,252,139,139,139,113,235,173,183,226,179,207, + 62, 19,106, 85, 41,191,146,223, 94, 88, 88,136,187,239,190, 27, 91,182,108, 65,118,118,118,196,249,119,196,249,135,176, 44,139, +154,154, 26, 28, 63,126, 28,101,101,101,168,175,175, 71, 92, 92, 28,146,146,146,144,148,148, 4,131,193,224,183, 2,234,106,241, + 7, 83,254,179,103,207, 70, 82, 82, 18,140, 70, 35,244,122,189, 48, 22,224, 75, 79,209,212,143,167, 11, 52, 58, 59, 59, 27,155, + 54,109,194,169, 83,167, 64, 81, 20,250,246,237,139,212,212, 84,244,239,223, 31, 52, 77, 67,165, 82, 65,163,209, 8,190,155,216, +151, 14,245,149,132, 17,188, 9, 65,243, 47, 41, 41,193,161, 67,135, 64, 16, 4,210,211,211,125,214, 62,252,178,111,223, 62, 20, + 22, 22,130,227, 56,220,123,239,189, 81,225,255,242,203, 47,163,188,188, 28, 36, 73, 10,252, 71,143, 30, 45,212,150, 26,141, 6, + 58,157, 78,248, 29,138,248,125,237,143, 4,127,169,242,223,187,119, 47, 8,130, 16, 62, 4,174, 82,169, 4,183, 71,220, 7,144, + 83,243,139, 91,128,229,203,151,135, 85,254, 94,125, 0,139,197, 2,163,209,136, 41, 83,166, 32, 49, 49, 81,216,206, 23, 26, 73, +146, 80,171,213, 80,171,213,208,104, 52, 32, 73, 82,248,172,103,176,133, 29,141, 78,100,176,252,139,138,138,132, 99,246,239,223, + 15,192,229,222,240, 11,255, 91,188,157, 95,143, 6,127,179,217, 12,189, 94,143,188,188, 60, 36, 36, 36,120, 9,128, 23, 12, 77, +211,160,105, 90, 40,123,185,131, 72,129,246,135, 11, 95,229,191,104,209, 34,175,242,215,106,181,194,186,167, 17,116,149,126,188, + 12,192, 96, 48, 96,204,152, 49, 96, 24, 70,136,209,242,224, 51, 64, 81, 20,212,106,181,144, 25,169, 81,200, 80,200, 71,226, 6, + 4,203,191,162,162, 2, 53, 53, 53, 24, 48, 96,128,236,107,152,205,102, 24,141,198,168,240,215,235,245,184,244,210, 75,193,178, +172,215, 64, 17, 95,102, 60,127,113,237,201,239, 11,183, 79, 16, 46,124,149,255, 27,111,188,225,102,204,252,125, 16,115,231,247, +121,254,245,181,141, 32, 8,172, 88,177, 34,178, 6,192, 55, 77,226, 48, 27, 31, 30, 19, 23,162,184,230,151,170,253, 25,134, 65, +109,109, 45,206,158, 61,139, 11, 23, 46,160,190,190, 30, 77, 77, 77,104,109,109,197,250,245,235,163,118, 3,130,229, 15, 64, 16, +127, 65, 65, 1, 72,146, 68,110,110, 46,178,179,179,145,146,146,130,134,134, 6,148,150,150,162,176,176, 16, 44,203,162,160,160, + 0, 70,163,209, 45,189, 72,243,167,105, 26, 44,203,122, 9,198, 83,196,226,138,103,194,132, 9,168,171,115, 61,143,159,158,158, +142,162,162, 34,217,125, 51,241,254, 72,240,151, 42,255,135, 30,122, 40, 40,253,132, 82,121, 70,196, 0,248, 90, 5,144,110,230, +197,191, 41,138,130,201,100, 66,117,117, 53,206,159, 63,143, 95,127,253, 21, 77, 77, 77, 48,153, 76,176, 90,173, 48,153, 76,104, +105,105, 65,115,115, 51, 90, 90, 90,132,245, 13, 27, 54, 68, 69, 60,161,240, 23,131, 36, 73, 44, 88,176, 0,153,153,153,194,182, +126,253,250,161, 95,191,126, 24, 54,108, 24,182,109,219,230,118,124, 52,248,243,254, 49,239,110,249, 18,191, 88, 72,205,205,205, + 24, 60,120, 48,202,202,202, 0, 0,179,103,207,134,201,100, 66,114,114,114,151,138, 31,240, 93,254, 27, 55,110,244, 42, 43,169, +218,125,201,146, 37, 33,247, 37, 67,129,151, 1,240,133,202,175, 7, 34,242,204, 51,207,120, 9,188,165,165, 5,102,179, 25, 44, +203, 34, 62, 62, 30,195,135, 15,199,184,113,227,144,149,149,133,167,158,122, 42,170, 55, 33, 88,254, 0, 80, 87, 87,135,180,180, + 52,228,230,230,186,137,159, 32, 8,193, 13,201,204,204, 68,110,110, 46, 0,215,172, 67,157, 78, 23, 21,254,124, 58, 82,226,103, + 89, 22,143, 60,242, 8,206,157, 59,135,167,159,126, 26,163, 71,143, 6, 73,146,104,105,105,193,196,137, 19,113,246,236, 89,161, + 53,104,110,110, 70, 74, 74, 10, 8,130,192, 47,191,252,130, 37, 75,150, 96,208,160, 65,120,237,181,215,220,198, 64, 60,175, 17, + 46,124,149,255, 35,143, 60, 18,118,237, 30, 13, 35,246,251,141, 48, 57, 68,222,125,247, 93,144, 36,137,129, 3, 7, 98,248,240, +225,152, 52,105, 18,134, 15, 31,142,172,172, 44,100,101,101, 9,145, 21,254, 28, 95, 6, 16,169, 26, 40, 88,254, 0,144,150,230, +154, 65,155,157,157,237,150,134, 39,248,253, 58,157,206,235, 58,145,226, 47,174, 17, 61,111,248,163,143, 62,138,113,227,198,225, +233,167,159,198,242,229,203,145,158,158,142,249,243,231,227,253,247,223,199,132, 9, 19, 96,177, 88, 64,146, 36,178,179,179,177, +101,203, 22,204,159, 63, 31,219,183,111, 7,195, 48,216,182,109, 27, 62,249,228, 19, 44, 90,180, 8,111,190,249,166, 79, 81, 69, + 42, 15, 71,143, 30,133, 74,165,194,165,151, 94, 42,108,235,105,226, 7,100,124, 41, 62, 16, 9, 0, 56,123,246, 44,180, 90,173, +108,193, 69, 83,252,161,240,231,145,146,146, 34,172,123,118,160, 61,247,139,211,143, 52,127, 95,229,200,215,252, 44,203, 98,243, +230,205,248,207,127,254,131, 85,171, 86, 97,225,194,133,152, 51,103, 14, 14, 29, 58, 4,146, 36,113,227,141, 55, 34, 62, 62, 30, +239,188,243, 14, 22, 45, 90,132,212,212, 84,180,182,182,226,134, 27,110,192,174, 93,187,100,151, 71,168, 32, 73, 18, 26,141, 6, + 35, 71,142,132, 74,165, 2,195, 48, 97, 9, 60,154,238,155,223, 47,197,203, 33, 1,192,167,248,125, 21,112, 52,197, 31, 10,255, +134,134, 6,161,195,219,175, 95, 63,159,105, 55, 52, 52, 0,112,189,126,145,166,233,168,240, 7,124, 27,240,223,255,254,119, 44, + 91,182, 12,111,190,249, 38,246,238,221,139,156,156, 28,124,250,233,167, 56,119,238, 28,138,138,138,208,222,222, 14,173, 86,139, +210,210, 82,140, 26, 53, 10,227,199,143, 71, 93, 93, 29,142, 31, 63,142, 17, 35, 70,224,137, 39,158, 16, 2, 16,209,138,194,241, +233,100,103,103,187,137,255,197, 23, 95,116,171, 84, 60,239,145,231, 54,185,251,158,124,242,201,176,248,202, 50,128, 64, 29,143, + 96,172,150, 63, 94,236,131, 71, 18,161,240,231,107,246,210,210, 82,193, 0,196,105,240,253,128,210,210, 82, 0,157,239,208,140, +134,248,253,149,107,118,118, 54, 6, 12, 24,128,111,191,253, 22, 99,199,142,197,209,163, 71, 81, 90, 90,138,178,178, 50,124,253, +245,215,194,224,211,184,113,227, 48,127,254,124,140, 24, 49, 2,173,173,173, 72, 73, 73,193,217,179,103, 17, 23, 23,135, 49, 99, +198, 68,117, 28, 64,156,142,184,230,247,236, 3, 4,186, 55,114,195,185,225,194,103, 31,128,255, 27,168,105, 18,103, 90,174,224, +162, 37,254, 80,249,243, 40, 44, 44,196,176, 97,195,144,153,153, 9,207, 55,230, 85, 85, 85,161,176,176, 48,106,156,197,220,125, + 25, 0, 73,146,184,227,142, 59, 80, 80, 80,128,157, 59,119,162,180,180, 20, 59,119,238,196,158, 61,123,176,114,229, 74, 76,156, + 56, 17, 0,112,240,224, 65, 44, 94,188, 24, 15, 63,252, 48,230,206,157, 11,154,166,177, 98,197, 10, 60,240,192, 3, 81, 31, 7, +224,121,243,127,249,235,189,240,194, 11, 94, 45, 64, 56, 53, 63,191,190,106,213,170,176,184,250, 53, 0, 57,214, 41, 38, 37,199, +114,197,233, 71, 11,193,242,231,111, 12,203,178,216,182,109,155,223,113, 0,241,241,209,230,207,115,228, 56, 14, 38,147, 9, 77, + 77, 77,216,190,125, 59, 22, 46, 92,136,243,231,207,163,172,172, 12,123,246,236,193,247,223,127,143,196,196, 68,225,248,204,204, + 76,204,154, 53, 11,121,121,121,200,207,207, 71, 90, 90, 26,102,206,156,137,119,222,121, 7, 11, 23, 46, 68,106,106, 42,146,146, +146,162,210, 1, 22,243, 23,167,255,232,163,143,202,210, 72, 87,213,252, 60,252,126, 35, 76, 14, 65,241, 57, 93, 21,107,246,135, + 80,249, 3,174,129, 48,185,215,136, 38, 60,203, 53, 55, 55, 23,131, 7, 15,198,132, 9, 19,144,151,151,135, 57,115,230,160,168, +168, 8,187,119,239,198,202,149, 43,221,196,207, 47, 9, 9, 9, 88,181,106, 21,182,111,223,142, 21, 43, 86, 96,198,140, 25,184, +112,225, 2, 94,120,225, 5, 28, 58,116, 8,245,245,245, 56,115,230, 76,196, 91, 0, 95,229,190, 97,195, 6,183,167,191, 60,243, + 41, 62, 55,208, 62,241,181,162,210, 2, 4, 27, 69,233, 14,203,245,135, 80,163, 64, 61, 1, 98, 94, 60,223, 11, 23, 46,160,172, +172, 12, 53, 53, 53,176, 88, 44, 56,114,228, 8, 28, 14, 7,202,203,203, 49,113,226, 68,159,101,158,155,155,139, 87, 94,121, 5, +107,215,174, 69,109,109, 45,110,185,229, 22,104, 52, 26, 24, 12, 6,244,237,219, 87,242,156, 72, 64,170,252, 31,123,236,177, 30, + 85,243,243,136, 72, 20,168, 39,137, 63, 20,254, 86,171, 21,122,189, 94,246, 84, 8,150,101,163,218,154,249, 18, 37,159, 15,146, + 36,161,211,233,132,145,108,127,101, 47,158, 98,236,201, 89, 92, 54,145,230,238,201,107,253,250,245,110,199,120,254, 13,166,230, + 23,167, 19,149, 22,192,147,188, 63, 95,218,243,216,238, 20,127,168,252,245,122, 61, 0,249, 83, 33,162, 45,126,207,114, 77, 79, + 79,199,172, 89,179, 48,113,226, 68,100,103,103,227,198, 27,111,196,169, 83,167, 48,126,252,120, 28, 60,120, 16,153,153,153,146, +121,219,191,127, 63,230,206,157,139,182,182, 54, 24, 12, 6,108,221,186, 21,229,229,229, 56,122,244, 40, 50, 50, 50, 34, 46,126, +207,124,136,185, 44, 89,178, 36,232, 90,191, 43,244, 19,112, 36, 56, 80, 71,210,243,120,241,254,195,135, 15, 99,199,142, 29, 56, +119,238, 28,170,170,170,144,156,156, 28,181,140,132,195,159,135,120, 42, 4,191, 79,106, 42, 68, 87,240, 23,231,163,168,168, 8, + 38,147, 9,205,205,205,120,251,237,183, 65,211, 52, 38, 77,154,132, 5, 11, 22,224,175,127,253, 43,102,205,154, 37, 76,157,230, +243,102, 54,155, 81, 80, 80,128, 3, 7, 14,192,102,179, 97,215,174, 93,104,110,110,198,170, 85,171,144,146,146,130,228,228,228, +168,138,255,224,193,131,160, 40, 10, 19, 38, 76, 0, 0,172, 91,183,206,109,191,191, 26,223,243, 24,127,215,137,120, 11, 16,140, +120,124, 25, 0,203,178,120,235,173,183,208,210,210, 2,131,193,128,182,182, 54, 84, 87, 87, 11,243,237,163,137, 80,248,243,115, +123,196, 83, 33,120,225, 19, 68,231, 56, 0,191, 63,154, 46,144, 84,153,146, 36,137,228,228,100,164,166,166, 98,222,188,121, 88, +182,108, 25,230,206,157,139,172,172, 44, 44, 89,178, 4,121,121,121, 88,181,106, 21,114,115,115, 65, 16, 4,246,239,223,143,130, +130, 2,252,243,159,255, 68, 92, 92, 28,172, 86, 43,182,110,221,138,173, 91,183, 34, 43, 43,171, 75,106,126,154,166, 49, 98,196, + 8, 97, 94,147,248,225,117,185, 46,115, 87,120, 14, 62, 59,193, 82,196,142, 30, 61,138,207, 62,251, 12,231,207,159, 71, 85, 85, + 21,146,146,146,220, 50,205,147, 95,189,122, 53, 42, 43, 43, 49,104,208, 32,180,180,180,160,161,161, 1,109,109,109, 96, 24, 6, +233,233,209,255,250, 81, 48,157, 45,160,115,110,143,212, 84, 7,241,120, 0,191, 63,218,209, 44,127,188,183,109,219,134, 7, 30, +120, 0,141,141,141,104,108,108,196,220,185,115, 49,121,242,100,108,223,190, 29,155, 54,109, 2, 69, 81,152, 59,119, 46, 14, 28, + 56,128,184,184, 56, 97, 0,108,254,252,249,216,188,121, 51, 94,122,233,165,168,243, 39, 73, 18, 87, 94,121,165, 32,126,130, 32, +176,118,237, 90, 33,111,129,254,202, 21,126,212, 91, 0,126, 97, 24, 6,239,189,247, 30,172, 86, 43,226,227,227, 81, 89, 89,137, +154,154, 26, 28, 60,120, 80,200, 48,255,151, 32, 8,124,240,193, 7, 80,171,213,168,168,168,128,213,106, 69, 93, 93, 29,154,155, +155,193, 48, 12,238,186,235,174,176, 8, 7,130,220,154, 69,170,160,197, 83, 33, 60,197,207,239,239, 10,248,226,125,236,216, 49, +212,212,212, 96,198,140, 25, 56,113,226, 4, 6, 14, 28, 8,163,209, 8,173, 86,139,199, 31,127, 28,171, 87,175, 6, 65, 16,176, + 90,173,176,219,237,104,107,107, 19, 90,128,219,110,187, 13, 55,223,124, 51,142, 28, 57,130,177, 99,199, 70,157, 59,224,254,210, +171,101,203,150, 5,236,139,117,101,205,207, 67,214,108,208,127,252,227, 31,168,173,173,245, 91,163,139,201, 27,141, 70, 97, 54, + 32,195, 48,112, 56, 28,224, 56, 14, 79, 60,241, 4, 86,172, 88, 17,245, 76,201, 21, 63, 95,208,252,220, 30,241, 84, 8, 62, 29, + 0, 94, 83, 33,162,237, 2,249,226,189,116,233, 82,188,249,230,155, 48,153, 76, 24, 54,108, 24,190,252,242, 75,188,250,234,171, +184,231,158,123, 48,123,246,108,212,214,214, 10, 17,162, 93,187,118, 9, 51, 66,111,187,237, 54,168, 84, 42, 20, 20, 20,224,193, + 7, 31,196, 15, 63,252, 16, 21,238,190,242,192,183, 0,190,230, 2,137,207, 9,246, 58, 81, 27, 9, 22, 47, 59,118,236, 0, 77, +211,146, 53,250,188,121,243,188, 44,247,221,119,223,197,226,197,139, 81, 93, 93,141,184,184, 56, 36, 39, 39, 99,249,242,229,184, +242,202, 43,195, 34, 43, 23,114,197,207,139,152,159,219, 35,119, 42, 68, 87,185, 64,158,188, 7, 14, 28,136, 79, 63,253, 20,115, +230,204,193,125,247,221,135,161, 67,135, 98,227,198,141,216,182,109, 27, 26, 26, 26,112,251,237,183,131, 32, 8,108,217,178, 5, +205,205,205,216,186,117, 43, 54,111,222,140,155,111,190, 25, 5, 5, 5,248,250,235,175,221, 34, 92,209,230, 47,206,199,242,229, +203,123, 84,205,207, 67, 86, 39, 56, 46, 46, 14,191,252,242,139, 87,141,190, 98,197, 10,183,103, 50,121, 12, 29, 58, 20,159,124, +242, 73,151,102,196, 31,127,127,226, 23, 67,238, 84,136,174,200,131, 20,247,215, 94,123, 13,247,223,127, 63, 62,251,236, 51,172, + 95,191, 30,151, 93,118, 25, 8,130,192,194,133, 11,177,126,253,122,193,144,203,203,203,177,106,213, 42,100,101,101, 97,227,198, +141, 56,124,248, 48, 30,124,240, 65,100,102,102, 98,235,214,173, 81,231, 46, 85,254,207, 61,247, 92,192,217,160,161, 92, 43,106, + 45,128,152,252, 91,111,189,133,199, 31,127, 92,232, 80,137,107,244,238,178, 92,127,144, 35,126, 49,111,222,165,145, 59, 21, 34, +218, 46,144, 47,238,106,181, 26,155, 55,111,246,218,159,154,154,138,195,135, 15, 11,227, 25, 63,255,252, 51, 82, 82, 82,132,227, +198,142, 29, 27,117,183, 39, 80, 30, 30,127,252,113,191, 21, 83,119, 65, 86, 20,104,232,208,161,248,240,195, 15,123, 28,121, 95, + 8, 54, 10, 20,172,152,187, 35, 10,228, 79, 60, 73, 73, 73,104,104,104, 64,159, 62,125, 0, 0, 25, 25, 25,194,227,144,221, 1, + 41,142,207, 62,251,172, 91,222,248,245, 96, 16,137, 26,223, 19, 65, 77,134,235, 13,226, 15,135,191,220,169, 16, 61,137, 63,191, + 93, 60,177,173,187, 70,223,253,241, 95,185,114,101,143,212,143,172, 78,176,191, 8, 74, 79, 68,176,252,121,151, 70,238, 84,136, +174,158, 11,228, 47, 15,190,142,235, 78,244, 38,253,120,221,197,222, 68, 94, 10,161,240,231,197,236, 57, 21, 66,124,156,120, 42, + 68, 87,186, 64,188, 97, 42,226,247,198, 83, 79, 61, 5,167,211, 25, 86, 26,126, 91,128,222, 38,126, 30,161,242,151, 59, 21, 34, +154, 8,165,214,239, 41,226,231,209, 85,250, 9,247,121, 96,192,199, 23, 98,122,179,248,129,224,249,243,225, 77,185, 83, 33,162, + 29, 14,237,205,226, 7,122,151,126,188, 90, 0,135,195,129,138,138, 10, 55,194, 93, 69, 94,173, 86,135,157, 70, 40,252,121,151, +198,243,173, 16,124,220,154, 55, 2,126, 42, 4,127,252,201,147, 39, 35,206,191,181,181, 21,167, 79,159,246, 18,141,167,224, 61, +183, 69, 2,221, 85,254,145, 66, 40,252, 9,113, 13, 55,105,210,164, 11, 54,155, 45, 42,223,137,149, 11,141, 70, 83,183,119,239, +222,144,102,204,245,118,254,185,185,185, 23,236,118,123,175,229,223, 27,203,159,240, 28,242, 87,160, 32,150, 16,253,167,212, 21, + 40,232,193, 80, 12, 64, 65, 76, 67, 49, 0, 5, 49, 13,197, 0, 20,196, 52, 20, 3, 80, 16,211,240,249, 90, 20, 5, 10, 34,141, +142,239, 8,239, 6, 48, 58, 90,215,160,105,186,174,176,176, 80,118, 24, 84, 49, 0, 5, 93, 2,254, 35,218, 29,223, 65, 70,113, +113, 49, 50, 50, 50,220, 62,184, 46,158, 99, 37, 30, 56,147, 90,247, 28, 88, 35, 8,215,179,208, 51,103,206, 12,106, 28, 66, 49, + 0, 5, 81,135,248, 11,242, 83,166, 76, 25, 2, 0,197,197,197,104,111,111, 71,124,124,188,240,145,108, 57, 19,255,252,237, 63, +115,230, 76,208,220, 84, 6,131,174,192,102,179,175, 96, 24, 86,150, 49, 16, 4, 97,231, 56,174,128,227,184,213, 65, 95, 45, 10, + 48, 24, 12,227,108, 54,219, 88,134, 97,228,246,103, 88, 0,197, 28,199, 29,142, 38, 47,185,232,237,252, 3,129, 23,255,186,117, +235, 52, 83,167, 78, 29,194,111, 39, 73,210,109, 78, 85, 32,113,203, 53,140, 96, 65,218,108,246, 21,101,199,143,170, 28,118, 43, +228, 44,167, 78,158,112, 0, 8,127, 26, 94,132, 96,179,217,198,158, 56,254, 51,105,183,183, 66,206, 82, 94, 94,206, 2, 24,215, +221,188,121,244,118,254,254,192,139,127,237,218,181,218,105,211,166, 13, 17,239, 19,127,161, 51, 28,241,139, 91,141, 80,160, 98, + 24, 86,149, 57,120, 8,218, 90, 27,193, 50, 76,199,230,206,233, 17,158, 19, 37,250,165, 39, 95, 0, 48, 52,164,171, 69, 1, 12, +195,144,131, 6, 15,134,205,218, 4,198,193, 4, 60, 62, 35, 61,197, 10, 32, 62,250,204,228,161,183,243,247, 5,177,248,167, 79, +159, 62,216,115,191,248,219,192,225,136, 63,220,217,166,130,219,195, 48, 78,176,172,143,135, 11, 68, 86,192,114,108,224,187,212, + 13, 96, 28, 12, 88, 56,164,119,138,102, 47, 51,140,179, 71, 78,126,234,237,252,197, 8, 36,126, 0,194, 23,238, 1,223,143, 81, +134, 98, 24,193,194,197,128, 47, 82, 78,188,112,194,199,154,221,254,113,172, 10, 64, 59, 65, 16, 25, 65, 95, 45,218, 96,221, 23, +134, 95,208,185,128, 98, 9, 0, 12, 65, 16,134,238, 35,234, 3,189,157, 63,220,125,126, 95,226, 7, 0,141, 70, 35, 25,201,241, +116,107,130, 53,140, 96,161, 2, 0, 83,115, 29, 74,246,125,140, 54,107,179,203, 22, 56, 81,165, 47,172,187, 86, 40, 74,213,103, +241,226,135,219, 55,108,120,169, 74,165,162,132, 99, 68,135, 19,158, 27, 57, 14, 94,204, 56,142,115,219, 70,145,164, 83,163, 85, + 61,211,218,106, 43, 8, 54, 19, 45, 77, 23, 81, 82,184,195,229, 70,248, 59,144, 5, 8,138,210, 45, 94,252, 16,179, 97,195,198, +255,199,127,209, 92, 26,157, 41, 49,140, 55,127, 79, 80, 20,197,106, 52,228,161,214, 86,251, 79,242,153,187,208,219,249,243, 16, + 71,123,196, 29, 94, 0,176,217,108,168,172,172, 68,117,117, 53, 26, 27, 27,161,213,106, 37,133, 28,110, 71, 56, 88,168, 92,153, + 39, 96, 48,104, 65,145,122,240, 66,119, 25,130, 32,125,215, 95,215,111,227,194, 63,206,197, 99, 15,223, 15,134,115,181,205, 4, +231, 29,155,237,140,215,138,174,198,111,115,219,228,250, 85, 85, 85,165,186,114,194,140, 21, 0, 10,130,205,132,154, 36, 97, 52, +106,161,166,244,194, 54, 22, 0, 24,119, 57,117,252, 82,255,247, 31,111,192, 99, 15,255, 5, 12,239, 91,116,252,161, 36, 10,208, +109, 11,229,181, 91,216, 88, 93,125,134, 28, 63,225,234,177, 0,130, 22, 80,111,231, 47,112,102,217,221, 27, 54,108,160,243,243, +243,135,176, 44,139,218,218, 90, 28, 63,126, 28, 39, 78,156, 64,125,125, 61,226,227,227,145,156,156,140,132,132, 4, 24,141, 70, +183,126, 64, 36,250, 2,161, 64, 5, 0, 78, 39,139, 22,147, 21,214, 86,139,203,245,225,247,186,173, 11,255,225,208,193, 47,161, +209,197,129, 36, 41,247, 22, 2,238,221,103,183, 71, 13,196,173, 4,231,214, 58, 0,224,208,212,220, 2,150,149, 23,138,245,132, +131,101,209,210, 98,133,213,106, 6, 24,248,169, 69, 93, 74, 41, 41,250, 18, 90,109, 7,127,184,185,216, 34, 48, 96,124, 61,249, + 40,113,129,166,150, 22, 4, 17,202,116, 67,111,231, 47,194,232,236,236,108,108,218,180, 9,229,229,229,160, 40, 10,105,105,105, + 72, 73, 73, 65,255,254,253, 65,211, 52, 84, 42, 21,104,154,134, 86,171,133, 74,165, 18,250, 2,145,234, 8, 7, 11, 21, 0,144, + 20, 1,131, 65, 3,138,208, 74,138, 83,122,221, 9,116,116,218,196, 45, 4, 33, 58,151,112,115,131, 56,209,118,215, 89, 28, 0, +162, 35, 93,130,179, 7, 77,158, 7, 69, 2,250, 56, 13, 72, 82, 15,136, 98,203,110,247,159, 17,254,235,248,223, 33,240, 39, 37, + 78, 96, 1, 80,110,189, 79,183, 63,240, 82, 17,107, 11,145,125,239,231, 47,134,217,108, 70, 92, 92, 28,242,243,243,145,152,152, +232,226,231,241, 14, 80,181, 90, 13,154,166,161,209,104, 64, 81, 20, 24,211,175, 40,127,249,143,176,212,158,130, 46,181, 31,250, + 93,115, 31,250, 95,243,167,174,139, 2, 49, 78, 22, 38, 83, 43,172, 22,139, 80,143,187,215,222,156,100,205, 46, 54, 10,215,111, + 79,227,113,107, 56, 60,210,117,191,134,217,210, 22, 52,121, 30,140,131,129,185,197, 2,171,197,210,113,203, 61,110,174,140, 90, + 21,112,211,158,248, 84,209,201,190, 83, 49,155,219,229,145,149, 64,111,231, 47,134,193, 96, 64, 78, 78, 14,152, 14,247,173,211, + 21,238,124, 11, 31, 69, 81, 80,171,213,194,223,218,239,223, 69, 60,247, 43, 38,255, 97, 38,172, 86, 59, 14,125,253, 50, 90, 43, + 15, 35,235,191, 94, 4,225,225, 38, 69, 58, 10,212,209, 2,144, 48,232, 52, 32, 56,109,199,102,119,113,250,111, 21, 60,143,247, + 45,114, 78,212,187,246,236, 99,216,237, 97,188,223, 69, 77, 65,175,215, 0,208,116,110,115,171, 13,189,107, 66,247, 85,207,218, + 80,114,213,245,203,171, 38,117,193,102,243, 17,194,148,131,222,206, 95, 4,222,197,145,122, 17,174, 88,180, 20, 69, 9,211, 31, +250, 78,188, 25,199,254,253, 22, 26,207,213,162,239, 37,227,144, 55, 39, 13, 71,126, 44,198,145,167,102,227,210,165, 31, 65,147, +144, 42,187, 35, 28, 52, 95, 0, 96,156, 12, 90,204,109,104,181, 88, 0,248, 18,185,184, 54,247, 45,108,241, 73, 82, 29,105,222, +245, 17,210,233, 88,111,181,134,222, 2,176, 14,166,195,135,118,241,247,245,214, 18,198,253, 63, 63, 9,138,255,120, 39, 38,149, + 78,123,123,232, 46, 68,111,231, 47, 6,239,215, 3,238, 31,200, 16, 11,223, 51,220,105, 24, 48, 18,163,150,126,140,146,231,239, +192,104, 7, 48,224,242,201,184,252,154, 25,168,248,169, 8, 63, 45,155,140,203, 86,236, 68,220,160, 75,162,210, 17,118,181, 0, + 36, 9,189,222,213, 2,136,197,233,202,132,235, 64, 95,181, 55,159,209,206, 51,208,233, 50,137,211,233,248,143,115, 75,164, 51, + 93,135, 35,244, 22,128,164, 40,232,245, 90,184,213,160, 0, 14, 20,151, 99, 79,225, 73,152,173, 54, 56,108,237,176,182, 59, 96, +179, 57,208,222,110,131,205,214,142,246,246,200,212,122, 60, 58,110,238, 66,169,125,106,181,154,205,201,201, 42, 43, 46, 62,246, +227,111,141,191, 24, 4, 0, 10, 53, 0, 0, 17,191, 73, 68, 65, 84,226,112,164, 88,160,156,195,134,179,239, 46,131,233,248,143, + 96,108, 54,112, 28,235,210, 9,203,186,214, 1, 16, 36,137,159,127, 58, 9, 34, 33, 3, 3, 46, 25,133,161,227,174, 66,124,114, + 18, 74,158,156,133, 81, 15,252, 19,125,175,156,237, 55,252, 25,122, 11,192, 48, 48,153,172,104,181,180,186,251,254, 98,209,139, + 5,223,241,191,103,132, 72,236,239,187, 27,140,111,215,135, 95, 55,183,134,238,131,178, 12,131, 22,139, 21, 86,179,213,109,251, +158,194, 50,124,248,225,199, 72, 77,237,214, 55,117, 0, 0,206, 84,158, 33,115, 46,155, 48, 18,128,151,128,122, 59,127, 49,196, +174,136, 88,164, 23,190,122, 13,134,246, 26, 92,126,211,181, 80,209, 52, 8, 82, 5,130, 82,117,252,165, 0,130, 2, 8,210,181, +168, 52,224,156, 54,192, 97, 69,159,223,141, 64, 94, 82, 31, 28,120,253, 47,104, 61,187, 8, 67,127,191, 68, 82,252, 97,183, 0, + 6, 61, 13,112, 90, 55,113, 30, 58,114, 26, 63,236, 43,131,181,205, 14,155,205, 1,187,221, 1, 91,199,226, 90,119,194,102,115, + 8, 29,158,112, 65,146, 36, 75, 16,132,228, 80, 63, 65, 16,109, 28,199,173,224, 56,238, 5,175,243, 0, 24,245, 26,128,209,186, +109, 87,171, 73,164,166,166,162,241,226, 47,112, 48,145,173, 45,131,133,181,165, 30, 14,135, 67, 50,204, 24,152,127, 25, 88, 38, + 50,157,212, 80,225,143,191, 39, 60, 13,128, 36, 73,176,246, 54,232,245, 58,208,176,129, 96, 24,128, 83, 1,156, 26, 32, 85,224, +160, 5,152, 86,128, 84,185, 12,193, 97,117,233, 80,173, 5,156, 54, 24, 18, 19, 48,249, 15, 55,163,248,203,119, 96,169, 60,138, +203, 22,191, 3,130,144, 14,157, 6,139,206, 22,192, 98,133,197,212, 10,113,205,190,191,184, 28,239,125,176, 3,169, 41,169, 65, + 39, 28, 34,124, 22,112, 77,109,141, 46,123,212, 21,107, 0,120, 25,128,131,101,209, 98,182,194,220, 98,133,187,127, 76,129, 1, +224,112,216,224,112, 88, 61, 79,235, 82,248,187,190, 63,254,252,185,172,163,123, 13, 32,152,242,147,234,244,166, 77, 91,128,202, + 45, 15,227, 68,201,215,110, 35,161, 36,165,198, 37,179,254,128, 65,253,141, 32,193,130,160, 84,112,201,128, 5,199, 56, 1, 16, + 0, 99,135,154, 0, 38,220,112, 61, 14,253,251, 59, 28,255,231, 99,184,116,209,139, 97,139, 31, 16,181, 0, 58,157, 6,156,211, +229,131,242, 46, 11, 77,107, 92,239,200,175, 43, 5,227,236,222, 27, 96, 51, 91,224,112, 58, 37,223,125, 71,145, 36,244,122, 53, +224,112,241,231, 71, 72, 53, 90,254,240,224, 90,168,214,214,118,234,182,249, 75,238,254,240,221,181, 91, 12, 6,173,159,147,131, + 72,215,207,161,254,248,243,145,127, 70,162, 51,235, 15,255,251,229,143,253,223,125,239,139, 73,167, 42,170,178,109,237,118,131, +205,238,212,165, 36,199,159,203, 28,216,175,226,134, 27,166, 29,188,243, 15,215, 86, 6,149,160,204,172,250,234,164,234,210, 6, + 35,123,249, 78,161, 69,176, 55,212,162,116,253,157, 24, 49, 97, 50, 50, 6,247, 1,103, 51,129,160,104, 16,201, 67, 65, 14,201, + 7, 17,159, 1, 16, 36,184,230, 42,176,167,190, 1,123,254, 48,208,214,136, 49, 83,167, 96,239,206, 93, 56,251,245, 88,100,206, +186, 39, 44,241, 3, 66, 11,192,194,108,178,194, 98,110,117,243,203,217,142,206,137,211,209, 6,167,195, 51, 74, 35,233,169, 68, + 13, 38, 83,179,207,125, 12,203,194,220, 98,133,197, 98,113, 15,110, 48,162,152, 95, 16,110,218, 29, 11,150, 46, 56, 89, 94, 53, +238,142, 5, 75,153,207, 62,220,176, 37, 84,206, 98,176,126, 4, 28, 73,254, 53,181, 23,181,127,186,255,111,127,172, 56, 83,227, +245, 45,212,139,191, 54, 13,190,248,107,211,224,162,146,210,233,255,243,254, 23, 7, 86, 63,185,104,199,232, 81,195, 77,225,242, +247,132,191, 89,158, 36, 73,194,124,234, 39,148,191,122, 31, 46,159,115, 35,146, 18,105,112,173,191, 2, 42, 45,136, 33, 83, 64, +101,205, 1, 33,126, 52, 50,109, 52,200,190,163,192,156,248, 2,206, 35,219, 65,181,215, 99,252,172, 25,216,243,246,227, 24,116, +245, 93, 32,213, 26, 95, 52,228,113,117, 17, 38,160,215,209,208,235, 53, 48,232, 53, 48,232,181,208,235, 53,208,105, 93, 31, 93, +115,205, 10,101,187,117, 1,231,251, 6,184,106, 80, 23,103, 99,199,162,215,107,160,213,187,124,106,214,115,154,165,159,101,233, +170,141,147, 79, 85,156, 29,195,113, 28,121,170,226,236,152,165,171, 54, 78,150,123,174,255,197,183,128, 35,201,255,238, 69, 79, +221, 35, 37,126, 15, 16,199,203,206, 76, 88,176,240,169,197,199,126, 41,143, 15,151,191, 91,194,126, 98,244, 36, 73,226,226,143, + 31,161,226,159,127,193,132,155,111, 69,146,222, 14, 88,235, 93,247, 54,126, 0,136, 97,215,130, 97, 89,148, 86,214,227,227,255, +156,196,182, 47, 75,241,195,207, 53,176,218, 28,192,240, 89,224,172,141,112,254,252, 62,232,243,133,232, 51,112, 16, 46,150,124, + 35,139,147, 63,116,182, 0,150, 54,152, 76, 86,239, 57, 59, 28,231, 34,232, 71,128, 82,224, 34,220, 66,112,254,106, 80, 7,139, + 22,139, 21,150, 22, 15, 63,149,101,248, 89,101, 96,101,220,192,175,191, 61,144,254,213,238,125,179, 29, 14,167, 14, 0, 28, 14, +167,238,171,221,251,102, 79,155, 58,182,252,154,233, 87, 93, 8,135,191, 63, 4,230,223,241, 83, 70, 30, 30,252,243,109, 59, 31, + 91,246, 82, 54,195,176,234, 97, 67, 7,254,116,253,156,188, 31,114, 39,142, 62,103,212,235,156,187,191, 43, 26,180,235,243, 31, +243, 78, 85,156,189, 2, 0, 76,230,214,190,119,223,255,183,135,118,127,254,210,179,241, 70, 67,120, 95,154, 16, 65, 42, 10, 68, + 18, 4, 42,223, 43, 64, 91,121, 33, 38,221,124, 19,104,219,175,224, 28, 78, 16, 36, 5, 16, 12,184,193,249, 96, 88, 14, 21,231, +154,241,213,193,106, 56, 25, 22, 37, 39, 47,226, 84,109, 51,254,235,250, 81, 88,112,205, 72,112, 19, 31, 1,202,191, 2,103,185, +136,126,253, 47,195,217,221, 91,208,239,170,235,194,226,218,209, 7, 32,160,213,209, 96,156,180, 56,242, 9,157,150,239, 19,116, +198,106, 35,135, 32, 13,196,223,245, 41, 64,175,209,128,213,187,119, 17, 52, 26, 45, 4,217, 4,160,223,216,100, 86, 63,249,244, +230, 63, 89, 90,219,220, 62, 18, 96,105,109, 75,121,242,233,205,127,186, 98, 76,246,218,228, 36, 99,200,161, 36,198,223, 55, 5, +252,242, 7, 0, 6,172,204,231,144,174,187, 58,247,220,161,146,147,111, 3,192,202,165,127, 44, 18,239, 27,122,247,128,227,247, +221,125,243,241,213, 27,222,249,105,235, 59,159,255, 23,199,113,100, 83,147, 57,163,224,239,111, 78,222,176,250,193,239,252, 38, + 44,243,155, 8,158, 97, 80, 62, 2, 84,250,210,221, 48,210, 44,174,186,118, 26, 40,214,138, 54, 58, 29, 78, 66,131, 56,107, 57, + 8, 16, 96, 13,253,192, 57,157,216,247,203, 5,156,107,104, 69,113,217, 5, 88,218, 92,197,253,225,119,229,184, 53,111, 48, 52, +125,115, 64, 18, 36,184,182, 38, 36,100,196,227,248,225, 34,127, 84,100,129, 4, 92, 45,128,197,210, 14,147,169, 13, 45,102, 43, + 76, 29, 11,195,176,252, 67, 48, 81, 88, 56, 25,139,251,241,190,192, 50, 12, 44, 86, 43,204,102, 27, 90,204, 86, 97, 17, 68,195, + 6,110,226,231,221,179,234, 79,109,109,237,241, 6,131,174, 65,156,182,193,160,107,104,107,107,143,159,119,207,170, 63,185,218, +145,208, 22,191,179,121,252,242,103, 59,140,199,247, 98,179,181,147, 31,124,188,123, 48,255,123,229,210, 5, 69, 43,151, 46, 40, +242,117,252,242, 71,230,149,204,156,118,197, 78,254,250,223,124,123,112,142,205,214, 78, 30, 63, 81, 97,252,223,175, 10,251, 75, +157, 19, 76, 24, 65,236,242,216,155,206,227,231, 85, 87, 35, 61, 85,143,156,241,217,160,156,173,104,110,105,199,119, 91, 94, 3, +107,109, 2, 8, 10, 28, 99, 7,227,116,130, 97, 24,212,254,106,198,247,135,207, 10,226, 7, 0, 45, 77, 1, 28, 11,135,195,193, + 95, 0,148,154,134,163,205, 18, 4, 43,105, 8, 45,128, 78,171,134,211, 78, 67, 60, 98,165,211,209, 29,235,209,104, 1,130,131, + 63, 3, 32, 41, 10, 26,173, 26, 14,155, 26, 64,103, 45,170,215,119,214,160,129,198, 42, 62,255,120,237,107,252,250, 37,227,230, +189,206,175, 23,239,217,252,184,112, 80, 56,227, 29,126, 78, 13,151,255,226, 21, 47, 79,255,110,207,161,217,159,127, 85,184,247, +173, 77,203,254, 69,146,100,192,230,245,169,199,239,253,246,187, 61, 37,215, 57,157,140,166,221,102,143,159,124,237,253,171,218, +172, 54,227, 93,119,206,122,103,214,204, 43,207,121,243,151,159,119,222, 0,218, 47, 86,225,216, 51, 55, 32, 39, 63, 15,233,125, +227, 0,214,137,186, 11, 45, 56,242,159,239, 17, 55, 96, 4, 28,173, 45, 32, 18, 40,112,237,173, 96, 27, 78,161, 13,122, 12,239, +175,135,231,173,158, 62,166, 31, 24,198, 9,212,254,228,242, 4,212,122,216, 29, 28,116,201,225, 15, 16, 10,125, 0,139,165, 13, + 38, 97, 36,210, 53,215,135, 97, 59,134,171, 59,106,227,238,132,191,235,179, 12, 3,171,217, 6,179,104, 36,149, 5, 58, 69, 35, +199, 7,242,157,122,136,231,201, 79, 71, 30,127,105, 56,156, 78,162,168,228,196, 4,155,221, 17, 87,244,211,241, 25, 87,223,240, +240,224, 87, 95,124,236,141,172,161, 3, 37,171,199,186,186, 70,205,194,191,174,157,223,216,104, 74,227, 56, 78, 8,183, 52, 55, + 91,250,245,237,147,120,250,209, 7,239,240,241,186,149,224, 92, 32,130, 32, 80,254,250,159,145, 51,121, 18,210, 18, 9,112,148, + 26, 85,167, 47,160,226,200, 49, 92,185,250, 59, 92, 60,248, 57, 26,203,191, 66,106,223, 75, 0,243, 5,224,135,213,176, 93,251, + 38, 38,100, 37,225,246,252, 76,124,123,164, 14,118, 39,131,137,151,244,193, 13, 19,250,195,225,112, 64,115,240, 69, 0, 0,153, +152,137,230, 38, 51,146, 70, 78,148,197,201, 31,132, 22, 64,163, 85, 67,111,231,163, 62, 0,192, 65,175,227,127,247,132, 22,192, +247,245, 73, 0,106,173, 26,250,142, 56,186,203, 93,101, 93,177,117,184,220, 8,132,250, 44,127,132,222, 1,224,207,135,247,207, +223,181,238, 75,128, 79, 63,251, 86,110, 83,179,185,159,235, 60, 86,117,238,124,253,136,187,238,253,219,226,249,183, 95,253,241, + 3,247,221,122,212,243,248,180,180, 68,219,204,169,227, 14,190,251,193,238,223, 51, 12, 43, 52, 55, 36, 73, 58,243,115,199,252, +232,235, 58,193, 56, 65,188, 1, 56, 77,191, 34,121,192, 36,112,156, 29, 39,142,156, 64,253,197,102,140, 95,179, 7,234,184, 68, + 12,152, 62, 31,251, 62,127, 5,131, 71,143, 6, 89,251, 19, 84,109, 77,208, 22,254, 29,230, 43,151,226,150,220,254,184, 37,183, +127,103, 95, 2, 44,212, 7, 95,132,186,250, 63, 0,169, 2,219,111, 28, 78,254,239,247,152,180,250, 37,217,156,124,193,245, 68, + 24,223, 7,224,107,160, 14, 3,112, 58, 88,215,143, 16,162, 64,129, 16,108,140,200,159, 1, 56, 88,192,106,110, 71,139, 91, 20, +133, 5,239, 50,178,108,176,195, 72,226, 84, 34,133, 80,249,119, 60, 14,239,195,128,246, 20, 30,201, 19, 63, 73, 71, 81,164,131, + 86,171,108,223,252,231,167,241,183,221, 56,229,100, 90, 90,146,215, 52,207, 7, 22,222,116,244,218, 25, 87,156, 89,244,240, 11, + 11, 47,212, 53, 13,101, 89, 86,149,152, 24,119,126,229,210,187, 10,125, 26,170,204,130, 16,183, 0,241, 35,115,113,224,255,190, +129,195,106,129,113,216, 21,184,252,111, 31,128, 82,187, 30,134, 87, 27, 18, 48,112,246, 66, 84,252,242, 3, 70,102, 92, 1,166, +226, 27,196, 29,123, 11,244,133, 98, 88,114, 22,194,158,154, 3,150,160, 64, 55, 28, 69,220, 47,111, 67,115,126, 31, 0,128, 28, + 48, 30, 53,181, 77,232,115,217, 12,196,101, 12,151, 71,202, 15, 68,125, 0, 26, 14, 59,237,166, 76,157,142, 6,135,158,209, 2, +120, 57,134, 34, 80, 36,160,213,171,225,112,184, 71, 81,244, 90,181,104, 80, 41, 68,254,161,158,231,153,140,223,145, 96, 63,252, +225,106, 17,164, 6,162, 54,188,252,209,101, 45, 45,173,125, 19,227, 13,231,155, 77,173,253, 0,128, 32, 8,246, 95,239, 61,189, +142,143, 88,249, 26,192, 26, 54,180,191,229,203,157,107, 94,184,247,254,231,111, 62,114,180, 98,210,149,151,143,216,175, 86,147, +156,111,165,203, 47, 7,222, 0, 70,222,247, 50,172, 53,101,160,141,201,208,166,244,247, 26, 23, 24, 50,247,207,248,254,254,215, +144,144,156,139,126,163,255, 0,230,196, 23,160,235,127, 70,242,183,127,145, 40, 36, 26,212,176,153,104,114, 38,224,196,193,111, + 49,125,211, 33,217,124,252, 65, 5, 0, 44,195,194, 98,109,135,217,220, 57,218,203,193,213, 55,112,245, 1,196,157,208,174, 29, + 1, 22,248,248, 49, 64,134,101, 97,182,218,208, 98,113,143,163, 59,120,241, 50,242, 7,114, 0,128,166, 85,173,118,187,211, 0, + 0,159,127, 85, 56,224,250,107,175,170,113,187,158,236,148,228,157,229,151, 63,223,127,145,176,160,236,172,204,139,255,179,121, +121,193,144,193,233,173,185, 87, 63,180,166,221,102,143,119, 58, 25,205, 83,207,108,157,254,226,154,251,191, 10,196,136, 2,184, + 45,175, 60,250,201, 71, 59,247,148,220, 48,103, 98,181, 63, 43, 13,102,194,163, 56, 10,100,204, 28,229,123,254,190, 70,135,188, +117, 63,160,248,239, 55,163,185,111, 50, 70, 92,182, 0,196,133, 18,112,230, 11,224,204,231, 1,150, 1, 17,151, 6,194,216, 15, + 68,122, 14, 42, 79,159, 71,229,177,125,200, 91,243,111,104,147, 67,250,142,159, 23, 72, 0, 32, 72, 2, 90,141, 10, 58, 45, 13, +157, 86, 13,173, 86, 13,157, 70, 13, 93, 71, 13, 20, 94,248, 50,130,163,193, 62,115, 65, 66,175, 38,161,215,104,161,215,168, 59, +151, 14,254, 12, 24,183,119,235, 4, 90, 18,226, 13, 23,249,164, 55,109,222,117,227,174,175, 14, 12, 16,239,143, 56, 2,241,103, +164,121, 94, 61, 99,220,185,225, 89, 3,205, 42, 90,205, 78,155, 50,230, 11, 62,185,127,239, 57,124,211,154,141, 31, 93,238, 43, +127,207,108,120,255,202,191,173,251,159,171,248,223,183,220,148, 95,169,162,213,172,191, 50,145, 11, 57, 79,110,137,247,233, 82, + 51, 48,121,195, 62,112, 41, 35,241,227,174,175, 80,209,148,136,166,164, 60, 48, 87, 60, 0,118,194, 35,104, 73,191, 6, 85,214, +126, 40,252,247, 65, 52, 90, 40, 76,127,245,103,196,103, 70,238,131,229,157, 45, 64,107,187,240, 92, 46, 63, 25,206,238,100, 59, +126, 69,218, 5, 10,190, 21,241,123,125, 7, 11,139,213, 6, 75, 71, 13,202,223, 48,135,184,214, 10,226,227,214,151,102,255,238, +208,183,123, 14, 13, 1,128,170,179, 23,115,150, 63,185, 57,103,249,147,155, 37,143,253,185,240,245,255,150,151,106, 56,252, 25, +255,231, 3, 88,185,100,222, 15,251, 15, 30,159,220,212,108,201,224, 56,142,220,182,253,235,255,222,187,239, 88,241,245,215,142, +255,113, 90,126, 78,181,213,106, 87,237, 59, 88,218,255,139,221, 69,147, 43, 78,159, 31, 7,128,163,212, 4,179,244,161,219,139, +195,230,239,129,160,223,240,160, 82, 35,231,254,141, 48,159, 45, 67,195,177, 31, 81,115,120, 55, 26,190,221, 14,142,113, 34, 41, +235, 10,164,140,189, 6, 99,110,204, 67,210,240,200,191, 18, 85, 5,116,180, 0,180, 26,118,173,218,109, 50,156, 94,199,191,227, +170,179, 19,220, 53, 14,144,212, 85,252,143,164,106,212,106,104, 52,158, 62, 52,127, 86,112, 46,208, 51, 79, 44,248,230,250,219, + 43,198, 53, 52,154, 50, 3, 31, 45, 51, 93,127,209, 36, 57,252, 3, 68,163,140,122,218,185,105,195, 3,255, 88,248,224,139,139, +205, 22,107, 95, 0,168, 56,125,238,138, 23, 95,221,121,197,139,175,238,148, 58,133,248,225,199, 99, 19,150, 62,248,123,153, 6, + 16,222, 92,160, 64,207,242, 18, 4,129,132,204,108, 36,100,102,227,119,215, 73, 62,148, 22, 21,144, 4, 65,176,237,237, 54,180, +181,219, 97,182,180,193, 98,105,131,197,226,106, 13, 56,182,195,165, 97,157,238,147,210,162,190,112, 94,139,211,233, 4, 65, 16, + 82, 86,192,217,218,219, 97,181, 57, 96,177,182,187, 22, 75, 59, 44, 22,107,135,102, 92, 35,136,193, 44, 52, 77, 50,255,122,119, +229,154,105,121, 57,159,244, 73, 77, 56, 67,171, 85,173,190, 10, 80,110,154, 86,215, 51,183, 82,150, 29,144,191,220, 80,236,168, +145, 3, 77,111,188,244,192,186,145,195, 7,236,247,113, 45, 1, 67, 50,211, 15,189,254,210,131,210,205,154,143,124, 6, 74,147, + 71, 40,226, 15,103, 74,115, 56, 80, 25,244,154, 95, 79,148,157, 72,235,155,214, 31,214,214, 70, 97, 46, 16,195, 48, 72, 73, 27, + 8,198,233,128,169,165, 81, 56, 33,208,135,181,229,124,119, 59,208, 68, 57,207,107,112, 28,135,242,138, 90,104,181,244, 89,207, + 99, 13, 6,109,123, 89, 89,185, 46,173,111, 63, 88,173,141, 66, 69,197,178, 14,100,244,205, 0,227,112,160,165,165, 62, 48, 41, + 15, 16, 20,152,167,159,152,255, 21, 0,191,157, 73,171,156,135,201, 89, 6,149,213,231,161,211,209, 94,134, 20,144, 63,203,160, +197,220, 36,155,247,144,193,233,166,173,175, 63,186,101,231,231,251,190,251,191,221,197,227,107,106,235,135, 54,183, 88, 50, 84, + 42,170, 77,163, 81, 91,134, 14, 78, 47,253,253, 13,121,123,103, 76,205, 57, 7, 0, 86,171,188, 7, 93, 42, 42,206,195, 32,193, + 95, 10,189, 69,252, 0,160,210,106,212, 37, 31,239,216, 49,251,207,247,223,139,227,165,135, 93,115, 50, 88, 14, 14, 7,131,153, +179,167,163,169,241, 28,204,226,232, 68, 32, 3,144,113,209,192, 70,228,109, 0,133, 7,142,183, 51, 12,187,207,243, 88, 61, 77, +215,239,248,100,199,192, 69,139,238, 69, 89,217, 97, 48, 14, 7, 28, 44,224,112,176,152, 49,107, 38,154,154,106, 96,181,118,239, +195, 60, 96, 89, 20, 30, 56,193,112, 28, 91,231,185,203, 47,255,235,102,162,165,177, 86, 38,127,247,198,241,154,233, 99, 42,175, +153, 62,166,210,215,209,178, 12, 87,148,244,190,226,147, 12, 35,193,223, 19,189, 73,252, 0,160,210,171,201,191,124,188,227,179, +147,191,191,245, 22,234,206,187, 30,193,201,178, 18, 48, 12,131,172,145, 99,209,167, 79, 95, 28, 41,250, 20,182,246,206, 41, 18, +129, 16,168, 5, 8, 36,126,169, 99,206,214,214,227,227, 79,247, 58,236,118,231,147,158,199, 38, 16,170,189, 31,237,248,236,246, + 91,111,185,137,184,253,174, 71, 81, 94, 86, 2,134,113, 32,107,228,229,232,155,154,134, 35,197,187,130,124,229, 71,228,227, 60, +181,181,245,248,104,231, 94,214,225,112,122,249,219,126,249,167,245, 67,217,225,207, 96,179,186,119,142,187, 26,213,213,245,120, +127,199, 30, 73,254, 82,144, 35,252, 80, 94,100, 27, 13, 16, 28,199, 97,208,160,212, 69, 13,245,150,141,119,222,113, 3, 53,247, +250,235,144, 53,252,119,104, 53,215,227,116,121, 17,236,182,206,218, 95,142,120, 3,217,136, 44, 3, 0, 7,134, 97,113,225, 98, + 51,142, 28,171,108,219,249,249, 65,134, 97,157, 15, 57,157,220,155, 82,199,103,102,166,100,215,215, 91, 39,253,191, 59,230, 18, + 55,204,189, 14,195,135, 14,133,213, 90,143,202,242, 98,180,183,119,207,179,192, 44,203,224,124, 93, 11, 74,142,156,113,238,216, +181,143,115, 56, 28,251, 56,142, 43,147, 58,182,147,255, 77,196, 77,115,175, 67, 86,214, 96, 88,173, 77,168,174, 40,129, 35, 66, +252,131, 53, 30,150,101,112,254,124, 19, 14, 29, 57,229,124,239, 95,254,249,243,184,226,138, 43,184, 3, 7, 14,192,102,179,117, +139,248, 79,158, 60,137,121,243,230,161,184,184, 88,118,179, 66,240,130, 76, 72, 72, 24,166,166,216,151,219,237,206,203,172, 86, + 91, 31,241, 68,169,238, 0, 65,128,165,105,245, 89,150,101,247, 57, 28,204,147, 28,199,157,244,119,124, 74, 74, 74, 60,197, 57, +243,172,118,123, 74,107,107,187, 22, 8,252, 74,240, 40,131,211,209,116, 43,199,178,117,237, 78,103, 49,199,113, 45,254, 14,238, +237,252,129, 78, 3,176,219,237,221, 82,243,135, 98, 0,194, 28,146,150,150,150, 83, 0,102, 69,133, 89, 23,160,161,161,193, 4, +224,139,128, 7,246, 80,244,118,254, 60,236,118, 59, 78,157, 58, 37,233,231, 71,219,237, 81,171, 37,223,153,224, 23,202,103, 82, + 21, 68, 12, 26,141,166,110,242,228,201,221,250, 22, 47,141, 70, 19,176,163, 46, 6, 33,203,175, 87,160,224, 55,138,158,209, 21, + 87,160,160,155,160, 24,128,130,152,198,255, 7,109, 43,244, 49, 78,182, 48,112, 0, 0, 0, 0, 73, 69, 78, 68,174, 66, 96,130, 0}; diff --git a/source/blender/editors/gpencil/Makefile b/source/blender/editors/gpencil/Makefile index bb76c9c2b23..f4c1cd246f4 100644 --- a/source/blender/editors/gpencil/Makefile +++ b/source/blender/editors/gpencil/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I$(NAN_ELBEEM)/include diff --git a/source/blender/editors/gpencil/SConscript b/source/blender/editors/gpencil/SConscript index 6c47b2f69ff..af3cbdb901d 100644 --- a/source/blender/editors/gpencil/SConscript +++ b/source/blender/editors/gpencil/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu' +incs += ' #/intern/guardedalloc ../../gpu' incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern' env.BlenderLib ( 'bf_editors_gpencil', sources, Split(incs), [], libtype=['core'], priority=[45] ) diff --git a/source/blender/editors/gpencil/drawgpencil.c b/source/blender/editors/gpencil/drawgpencil.c index fd59539bb56..e5868338f75 100644 --- a/source/blender/editors/gpencil/drawgpencil.c +++ b/source/blender/editors/gpencil/drawgpencil.c @@ -37,8 +37,6 @@ #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" -#include "BMF_Api.h" - #include "BLI_arithb.h" #include "BLI_blenlib.h" @@ -874,6 +872,7 @@ static void gp_draw_data (bGPdata *gpd, int offsx, int offsy, int winx, int winy glDisable(GL_LINE_SMOOTH); // smooth lines /* show info for debugging the status of gpencil */ +#if 0 if ( ((dflag & GP_DRAWDATA_NOSTATUS)==0) && (gpd->flag & GP_DATA_DISPINFO) ) { char printable[256]; short xmax; @@ -907,10 +906,10 @@ static void gp_draw_data (bGPdata *gpd, int offsx, int offsy, int winx, int winy /* only draw it if view is wide enough (assume padding of 20 is enough for now) */ if (winx > (xmax + 20)) { - glRasterPos2i(winx-xmax, winy-20); - BMF_DrawString(G.fonts, printable); + BLF_draw_default(winx-xmax, winy-20, 0.0f, printable); } } +#endif /* restore initial gl conditions */ glLineWidth(1.0); diff --git a/source/blender/editors/gpencil/editaction_gpencil.c b/source/blender/editors/gpencil/editaction_gpencil.c index 28748d4a631..beb4ed06810 100644 --- a/source/blender/editors/gpencil/editaction_gpencil.c +++ b/source/blender/editors/gpencil/editaction_gpencil.c @@ -33,8 +33,6 @@ #include "MEM_guardedalloc.h" -#include "BMF_Api.h" - #include "BLI_arithb.h" #include "BLI_blenlib.h" @@ -68,6 +66,8 @@ #include "gpencil_intern.h" +#if 0 // XXX disabled until grease pencil code stabilises again + /* XXX */ static void actdata_filter() {} // is now ANIM_animdata_filter() static void BIF_undo_push() {} @@ -507,7 +507,8 @@ void paste_gpdata (Scene *scene) ScrArea *sa; /* get area that gp-data comes from */ - sa= gpencil_data_findowner((bGPdata *)ale->owner); + //sa= gpencil_data_findowner((bGPdata *)ale->owner); + sa = NULL; /* this should be the right frame... as it may be a pre-existing frame, * must make sure that only compatible stroke types get copied over @@ -738,3 +739,4 @@ void mirror_gplayer_frames (bGPDlayer *gpl, Scene *scene, short mode) } /* ***************************************** */ +#endif // XXX disabled until Grease Pencil code stabilises again... diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c index a745e5f4084..bad86c170ab 100644 --- a/source/blender/editors/gpencil/gpencil_edit.c +++ b/source/blender/editors/gpencil/gpencil_edit.c @@ -33,8 +33,6 @@ #include "MEM_guardedalloc.h" -#include "BMF_Api.h" - #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" @@ -524,6 +522,7 @@ static void gp_stroke_to_bonechain (bGPDlayer *gpl, bGPDstroke *gps, bArmature * } /* convert a given grease-pencil layer to a 3d-curve representation (using current view if appropriate) */ +// XXX depreceated... we now have etch-a-ton for this... static void gp_layer_to_armature (bGPdata *gpd, bGPDlayer *gpl, Scene *scene, View3D *v3d, short mode) { bGPDframe *gpf= gpencil_layer_getframe(gpl, scene->r.cfra, 0); @@ -622,21 +621,6 @@ void gpencil_convert_operation (short mode) BIF_undo_push("GPencil Convert"); } -/* display a menu for converting grease-pencil strokes */ -void gpencil_convert_menu (void) -{ - bGPdata *gpd= gpencil_data_getactive(NULL); - short mode; - - /* only show menu if it will be relevant */ - if (gpd == NULL) return; - - mode= pupmenu("Grease Pencil Convert %t|Active Layer To Path%x1|Active Layer to Bezier%x2|Active Layer to Armature%x3"); - if (mode <= 0) return; - - gpencil_convert_operation(mode); -} - /* ************************************************** */ /* GREASE-PENCIL EDITING MODE - Painting */ diff --git a/source/blender/editors/include/BIF_transform.h b/source/blender/editors/include/BIF_transform.h index d16ac563eb3..e02202eb8e0 100644 --- a/source/blender/editors/include/BIF_transform.h +++ b/source/blender/editors/include/BIF_transform.h @@ -37,7 +37,7 @@ struct ListBase; struct wmEvent; struct bContext; struct Object; -struct uiMenuItem; +struct uiLayout; void transform_keymap_for_space(struct wmWindowManager *wm, struct ListBase *keymap, int spaceid); void transform_operatortypes(void); @@ -114,7 +114,7 @@ int BIF_menuselectTransformOrientation(void); void BIF_selectTransformOrientation(struct bContext *C, struct TransformOrientation *ts); void BIF_selectTransformOrientationValue(struct bContext *C, int orientation); -void BIF_menuTransformOrientation(struct bContext *C, struct uiMenuItem *head, void *arg); +void BIF_menuTransformOrientation(struct bContext *C, struct uiLayout *layout, void *arg); char * BIF_menustringTransformOrientation(const struct bContext *C, char *title); /* the returned value was allocated and needs to be freed after use */ int BIF_countTransformOrientation(const struct bContext *C); diff --git a/source/blender/editors/include/ED_anim_api.h b/source/blender/editors/include/ED_anim_api.h index 0210e3d6a85..efc0a0b9a57 100644 --- a/source/blender/editors/include/ED_anim_api.h +++ b/source/blender/editors/include/ED_anim_api.h @@ -64,6 +64,7 @@ typedef struct bAnimContext { struct Scene *scene; /* active scene */ struct Object *obact; /* active object */ + ListBase *markers; /* active set of markers */ } bAnimContext; /* Main Data container types */ diff --git a/source/blender/editors/include/ED_keyframes_edit.h b/source/blender/editors/include/ED_keyframes_edit.h index 44d4e26fea5..77e95dc77de 100644 --- a/source/blender/editors/include/ED_keyframes_edit.h +++ b/source/blender/editors/include/ED_keyframes_edit.h @@ -137,6 +137,7 @@ BeztEditFunc ANIM_editkeyframes_ipo(short mode); /* ----------- BezTriple Callback (Assorted Utilities) ---------- */ short bezt_calc_average(BeztEditData *bed, struct BezTriple *bezt); +short bezt_to_cfraelem(BeztEditData *bed, struct BezTriple *bezt); /* ************************************************ */ /* Destructive Editing API (keyframes_general.c) */ diff --git a/source/blender/editors/include/ED_markers.h b/source/blender/editors/include/ED_markers.h index 0e9a82083a6..048bbbd7463 100644 --- a/source/blender/editors/include/ED_markers.h +++ b/source/blender/editors/include/ED_markers.h @@ -28,6 +28,11 @@ #ifndef ED_MARKERS_H #define ED_MARKERS_H +struct wmWindowManager; +struct bContext; +struct TimeMarker; + +/* Drawing API ------------------------------ */ /* flags for drawing markers */ enum { @@ -35,11 +40,18 @@ enum { DRAW_MARKERS_LOCAL = (1<<1) }; -struct wmWindowManager; -struct bContext; - void draw_markers_time(const struct bContext *C, int flag); -int find_nearest_marker_time(ListBase *markers, float dx); + +/* Backend API ----------------------------- */ + +struct TimeMarker *ED_markers_find_nearest_marker(ListBase *markers, float x); +int ED_markers_find_nearest_marker_time(ListBase *markers, float x); + +void ED_markers_get_minmax(ListBase *markers, short sel, float *first, float *last); + +void ED_markers_make_cfra_list(ListBase *markers, ListBase *lb, short sel); + +/* Operators ------------------------------ */ /* called in screen_ops.c:ED_operatortypes_screen() */ void ED_marker_operatortypes(void); diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 5a827a2311b..0e34b3702ed 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -48,11 +48,13 @@ struct PointerRNA; struct PropertyRNA; struct ReportList; struct rcti; +struct uiStyle; struct uiFontStyle; typedef struct uiBut uiBut; typedef struct uiBlock uiBlock; typedef struct uiPopupBlockHandle uiPopupBlockHandle; +typedef struct uiLayout uiLayout; /* Defines */ @@ -108,7 +110,7 @@ typedef struct uiPopupBlockHandle uiPopupBlockHandle; /* but->flag */ #define UI_TEXT_LEFT 64 #define UI_ICON_LEFT 128 -#define UI_ICON_RIGHT 256 +#define UI_ICON_SUBMENU 256 /* control for button type block */ #define UI_MAKE_TOP 512 #define UI_MAKE_DOWN 1024 @@ -199,51 +201,23 @@ void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad); void uiDrawMenuBox(float minx, float miny, float maxx, float maxy, short flag, short direction); void uiDrawBoxShadow(unsigned char alpha, float minx, float miny, float maxx, float maxy); -/* Menus - * - * These functions are used by popup menus, toolbox and header menus. They - * assume uiMenuItem head is already created, which is done by uiMenuButton - * for header menus, or can be done with uiPupMenuBegin for popups. These - * functions do not use uiDefBut functions in order to simplify creating - * them, and to permit other types of menus (radial, ..) in the future. */ +/* Menu Callbacks */ -typedef struct uiMenuItem uiMenuItem; - -typedef void (*uiMenuCreateFunc)(struct bContext *C, uiMenuItem *head, void *arg1); +typedef void (*uiMenuCreateFunc)(struct bContext *C, struct uiLayout *layout, void *arg1); typedef void (*uiMenuHandleFunc)(struct bContext *C, void *arg, int event); -void uiMenuFunc(uiMenuItem *head, uiMenuHandleFunc handlefunc, void *argv); -void uiMenuContext(uiMenuItem *head, int opcontext); - -void uiMenuItemVal(uiMenuItem *head, const char *name, int icon, int argval); - -void uiMenuItemEnumO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value); -void uiMenuItemBooleanO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value); -void uiMenuItemsEnumO(uiMenuItem *head, char *opname, char *propname); -void uiMenuItemIntO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value); -void uiMenuItemFloatO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, float value); -void uiMenuItemStringO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, char *value); -void uiMenuItemO(uiMenuItem *head, int icon, char *opname); - -void uiMenuItemBooleanR(uiMenuItem *head, struct PointerRNA *ptr, char *propname); -void uiMenuItemEnumR(uiMenuItem *head, struct PointerRNA *ptr, char *propname, int value); -void uiMenuItemsEnumR(uiMenuItem *head, struct PointerRNA *ptr, char *propname); - -void uiMenuLevel(uiMenuItem *head, const char *name, uiMenuCreateFunc newlevel); -void uiMenuLevelEnumO(uiMenuItem *head, char *opname, char *propname); -void uiMenuLevelEnumR(uiMenuItem *head, struct PointerRNA *ptr, char *propname); - -void uiMenuSeparator(uiMenuItem *head); - /* Popup Menus * * Functions used to create popup menus. For more extended menus the * uiPupMenuBegin/End functions can be used to define own items with - * the uiMenu functions inbetween. If it is a simple confirmation menu + * the uiItem functions inbetween. If it is a simple confirmation menu * or similar, popups can be created with a single function call. */ -uiMenuItem *uiPupMenuBegin(const char *title, int icon); -void uiPupMenuEnd(struct bContext *C, struct uiMenuItem *head); +typedef struct uiPopupMenu uiPopupMenu; + +uiPopupMenu *uiPupMenuBegin(const char *title, int icon); +void uiPupMenuEnd(struct bContext *C, struct uiPopupMenu *head); +struct uiLayout *uiPupMenuLayout(uiPopupMenu *head); void uiPupMenuOkee(struct bContext *C, char *opname, char *str, ...); void uiPupMenuSaveOver(struct bContext *C, struct wmOperator *op, char *filename); @@ -555,12 +529,16 @@ uiBut *uiDefMenuTogR(uiBlock *block, struct PointerRNA *ptr, char *propname, cha #define UI_LAYOUT_HORIZONTAL 0 #define UI_LAYOUT_VERTICAL 1 -typedef struct uiLayout uiLayout; +#define UI_LAYOUT_PANEL 0 +#define UI_LAYOUT_HEADER 1 +#define UI_LAYOUT_MENU 2 -uiLayout *uiLayoutBegin(int dir, int x, int y, int size, int em); -void uiLayoutContext(uiLayout *layout, int opcontext); +uiLayout *uiLayoutBegin(int dir, int type, int x, int y, int size, int em, struct uiStyle *style); void uiLayoutEnd(const struct bContext *C, uiBlock *block, uiLayout *layout, int *x, int *y); +void uiLayoutContext(uiLayout *layout, int opcontext); +void uiLayoutFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv); + /* layout specifiers */ void uiLayoutRow(uiLayout *layout); void uiLayoutColumn(uiLayout *layout); @@ -570,10 +548,9 @@ uiLayout *uiLayoutBox(uiLayout *layout); uiLayout *uiLayoutSub(uiLayout *layout, int n); /* templates */ -void uiTemplateHeaderMenus(uiLayout *layout); -void uiTemplateHeaderButtons(uiLayout *layout); -void uiTemplateHeaderID(uiLayout *layout, struct PointerRNA *ptr, char *propname, int flag, uiIDPoinFunc func); -void uiTemplateSetColor(uiLayout *layout, int color); +void uiTemplateHeader(uiLayout *layout); +void uiTemplateHeaderID(uiLayout *layout, struct PointerRNA *ptr, char *propname, + char *newop, char *openop, char *unlinkop); /* items */ void uiItemO(uiLayout *layout, char *name, int icon, char *opname); @@ -586,11 +563,18 @@ void uiItemStringO(uiLayout *layout, char *name, int icon, char *opname, char *p void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, struct IDProperty *properties, int context); void uiItemR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int expand); -void uiItemFullR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, int expand); +void uiItemFullR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, struct PropertyRNA *prop, int index, int value, int expand); +void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int value); +void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname); -void uiItemL(uiLayout *layout, char *name, int icon); +void uiItemL(uiLayout *layout, char *name, int icon); /* label */ +void uiItemM(uiLayout *layout, char *name, int icon, char *menuname); /* menu */ +void uiItemV(uiLayout *layout, char *name, int icon, int argval); /* value */ +void uiItemS(uiLayout *layout); /* separator */ -void uiItemM(uiLayout *layout, char *name, int icon, uiMenuCreateFunc func); +void uiItemMenuF(uiLayout *layout, char *name, int icon, uiMenuCreateFunc func); +void uiItemMenuEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname); +void uiItemMenuEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname); /* utilities */ #define UI_PANEL_WIDTH 340 @@ -606,6 +590,7 @@ void uiRegionHeaderLayout(const struct bContext *C, struct ARegion *ar); void uiAnimContextProperty(const struct bContext *C, struct PointerRNA *ptr, struct PropertyRNA **prop, int *index); + /* Styled text draw */ void uiStyleFontSet(struct uiFontStyle *fs); void uiStyleFontDraw(struct uiFontStyle *fs, struct rcti *rect, char *str); diff --git a/source/blender/editors/include/UI_resources.h b/source/blender/editors/include/UI_resources.h index c1b009fffac..09635f3d914 100644 --- a/source/blender/editors/include/UI_resources.h +++ b/source/blender/editors/include/UI_resources.h @@ -213,7 +213,7 @@ typedef enum { ICON_OBJECT_DATA, ICON_MESH_DATA, ICON_CURVE_DATA, - ICON_MBALL_DATA, + ICON_META_DATA, ICON_LATTICE_DATA, ICON_LAMP_DATA, ICON_MATERIAL_DATA, @@ -239,11 +239,11 @@ typedef enum { ICON_IMAGE_DATA, ICON_FILE, ICON_FCURVE, - ICON_FONT, + ICON_FONT_DATA, ICON_RENDER_RESULT, - ICON_BLANK080A, - ICON_BLANK080B, - ICON_BLANK080C, + ICON_SURFACE_DATA, + ICON_EMPTY_DATA, + ICON_SETTINGS, ICON_BLANK080D, ICON_BLANK080E, ICON_BLANK080F, @@ -319,7 +319,7 @@ typedef enum { ICON_BLANK127b, /* OUTLINER */ - ICON_BLANK128, + ICON_OUTLINER_DATA_EMPTY, ICON_OUTLINER_DATA_MESH, ICON_OUTLINER_DATA_CURVE, ICON_OUTLINER_DATA_LATTICE, @@ -355,7 +355,7 @@ typedef enum { ICON_MOD_SOFT, ICON_MOD_SUBSURF, ICON_HOOK, - ICON_MOD_PARTICLEINSTANCE, + ICON_MOD_PHYSICS, ICON_MOD_PARTICLES, ICON_MOD_BOOLEAN, ICON_MOD_EDGESPLIT, @@ -366,19 +366,19 @@ typedef enum { ICON_MOD_LATTICE, ICON_BLANK143, ICON_MOD_ARMATURE, - ICON_BLANK147, - ICON_BLANK148, - ICON_BLANK149, - ICON_BLANK150, - ICON_BLANK151, - ICON_BLANK152, - ICON_BLANK152b, + ICON_MOD_SHRINKWRAP, + ICON_MOD_CAST, + ICON_MOD_MESHDEFORM, + ICON_MOD_BEVEL, + ICON_MOD_SMOOTH, + ICON_MOD_SIMPLEDEFORM, + ICON_MOD_MASK, - /* available */ - ICON_BLANK153, - ICON_BLANK154, - ICON_BLANK155, - ICON_BLANK156, + /* MODIFIERS */ + ICON_MOD_CLOTH, + ICON_MOD_EXPLODE, + ICON_MOD_FLUIDSIM, + ICON_MOD_MULTIRES, ICON_BLANK157, ICON_BLANK158, ICON_BLANK159, @@ -612,7 +612,7 @@ typedef enum { ICON_BOOKMARKS, ICON_FONTPREVIEW, ICON_FILTER, - ICON_BLANK285E, + ICON_NEWFOLDER, ICON_BLANK285F, ICON_FILE_PARENT, ICON_FILE_REFRESH, @@ -652,7 +652,7 @@ typedef enum { ICON_BLANK314, ICON_BLANK315, ICON_BLANK316, - ICON_BLANK316b, + ICON_DISK_DRIVE, /* SHADING / TEXT */ ICON_MATPLANE, @@ -794,45 +794,31 @@ typedef enum { } BIFColorID; -/* XXX WARNING: this is saved in file, so do not change order! */ enum { - TH_AUTO, /* for buttons, to signal automatic color assignment */ - -// uibutton colors - TH_BUT_OUTLINE, - TH_BUT_NEUTRAL, - TH_BUT_ACTION, - TH_BUT_SETTING, - TH_BUT_SETTING1, - TH_BUT_SETTING2, - TH_BUT_NUM, - TH_BUT_TEXTFIELD, - TH_BUT_POPUP, - TH_BUT_TEXT, - TH_BUT_TEXT_HI, - TH_MENU_BACK, - TH_MENU_ITEM, - TH_MENU_HILITE, - TH_MENU_TEXT, - TH_MENU_TEXT_HI, - - TH_BUT_DRAWTYPE, - TH_REDALERT, - TH_CUSTOM, - - TH_BUT_TEXTFIELD_HI, - TH_ICONFILE, - + TH_THEMEUI, // common colors among spaces TH_BACK, TH_TEXT, TH_TEXT_HI, + TH_TITLE, + TH_HEADER, TH_HEADERDESEL, + TH_HEADER_TEXT, + TH_HEADER_TEXT_HI, + + /* float panels */ TH_PANEL, + TH_PANEL_TEXT, + TH_PANEL_TEXT_HI, + + TH_BUTBACK, + TH_BUTBACK_TEXT, + TH_BUTBACK_TEXT_HI, + TH_SHADE1, TH_SHADE2, TH_HILITE, @@ -947,16 +933,13 @@ void UI_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, in // get pointer from RNA pointer int UI_GetIconRNA(struct PointerRNA *ptr); -struct ScrArea; - // internal (blender) usage only, for init and set active -void UI_SetTheme(struct ScrArea *sa); -void ui_theme_init_userdef (void); -void ui_resources_init (void); -void ui_resources_free (void); +void UI_SetTheme(int spacetype, int regionid); /* only for buttons in theme editor! */ char *UI_ThemeGetColorPtr(struct bTheme *btheme, int spacetype, int colorid); char *UI_ThemeColorsPup(int spacetype); +void UI_make_axis_color(char *src_col, char *dst_col, char axis); + #endif /* UI_ICONS_H */ diff --git a/source/blender/editors/interface/Makefile b/source/blender/editors/interface/Makefile index fa9550041c5..dfc8187de49 100644 --- a/source/blender/editors/interface/Makefile +++ b/source/blender/editors/interface/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I../../windowmanager @@ -48,7 +47,6 @@ CPPFLAGS += -I../../blenlib CPPFLAGS += -I../../makesdna CPPFLAGS += -I../../makesrna CPPFLAGS += -I../../imbuf -CPPFLAGS += -I../../ftfont CPPFLAGS += -I../../blenfont # own include diff --git a/source/blender/editors/interface/SConscript b/source/blender/editors/interface/SConscript index fa89cd4891c..bac3742c12f 100644 --- a/source/blender/editors/interface/SConscript +++ b/source/blender/editors/interface/SConscript @@ -7,14 +7,12 @@ for source in env.Glob('*_api.c'): sources.remove(source) incs = '../include ../../blenlib ../../blenfont ../../blenkernel ../../makesdna ../../imbuf' -incs += ' ../../makesrna ../../windowmanager #/intern/guardedalloc #intern/bmfont' +incs += ' ../../makesrna ../../windowmanager #/intern/guardedalloc' incs += ' #/extern/glew/include' defs = [] if env['WITH_BF_INTERNATIONAL']: - incs += ' ../../ftfont' defs.append('INTERNATIONAL') - defs.append('FTGL_STATIC_LIBRARY') env.BlenderLib ( 'bf_editors_interface', sources, Split(incs), Split(defs), libtype=['core'], priority=[110] ) diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c index 221ad23a846..fd082c34238 100644 --- a/source/blender/editors/interface/interface.c +++ b/source/blender/editors/interface/interface.c @@ -444,7 +444,7 @@ static int ui_but_equals_old(uiBut *but, uiBut *oldbut) if(but->funcN != oldbut->funcN) return 0; if(oldbut->func_arg1 != oldbut && but->func_arg1 != oldbut->func_arg1) return 0; if(oldbut->func_arg2 != oldbut && but->func_arg2 != oldbut->func_arg2) return 0; - if(!but->funcN && (but->poin != oldbut->poin || but->pointype != oldbut->pointype)) return 0; + if(!but->funcN && ((but->poin != oldbut->poin && (uiBut*)oldbut->poin != oldbut) || but->pointype != oldbut->pointype)) return 0; return 1; } @@ -650,7 +650,7 @@ void uiDrawBlock(const bContext *C, uiBlock *block) if(block->flag & UI_BLOCK_LOOP) ui_draw_menu_back(&style, block, &rect); else if(block->panel) - ui_draw_panel(ar, &style, block, &rect); + ui_draw_aligned_panel(ar, &style, block, &rect); if(block->drawextra) block->drawextra(C, block); @@ -1970,12 +1970,6 @@ void uiBlockEndAlign(uiBlock *block) { uiBut *prev, *but=NULL, *next; int flag= 0, cols=0, rows=0; - int theme= UI_GetThemeValue(TH_BUT_DRAWTYPE); - - if ( !(ELEM4(theme, TH_MINIMAL, TH_SHADED, TH_ROUNDED, TH_ROUNDSHADED)) ) { - block->flag &= ~UI_BUT_ALIGN; // all 4 flags - return; - } /* auto align: - go back to first button of align start (ALIGN_DOWN) @@ -2747,7 +2741,7 @@ uiBut *uiDefMenuSep(uiBlock *block) uiBut *uiDefMenuSub(uiBlock *block, uiBlockCreateFunc func, char *name) { int y= ui_menu_y(block) - MENU_ITEM_HEIGHT; - return uiDefIconTextBlockBut(block, func, NULL, ICON_RIGHTARROW_THIN, name, 0, y, MENU_WIDTH, MENU_ITEM_HEIGHT-1, ""); + return uiDefIconTextBlockBut(block, func, NULL, ICON_BLANK1, name, 0, y, MENU_WIDTH, MENU_ITEM_HEIGHT-1, ""); } uiBut *uiDefMenuTogR(uiBlock *block, PointerRNA *ptr, char *propname, char *propvalue, char *name) @@ -2997,7 +2991,7 @@ uiBut *uiDefIconTextMenuBut(uiBlock *block, uiMenuCreateFunc func, void *arg, in but->flag|= UI_HAS_ICON; but->flag|= UI_ICON_LEFT; - but->flag|= UI_ICON_RIGHT; + but->flag|= UI_ICON_SUBMENU; but->menu_create_func= func; ui_check_but(but); @@ -3010,11 +3004,13 @@ uiBut *uiDefIconTextBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, { uiBut *but= ui_def_but(block, BLOCK, 0, str, x1, y1, x2, y2, arg, 0.0, 0.0, 0.0, 0.0, tip); - but->icon= (BIFIconID) icon; + /* XXX temp, old menu calls pass on icon arrow, which is now UI_ICON_SUBMENU flag */ + if(icon!=ICON_RIGHTARROW_THIN) { + but->icon= (BIFIconID) icon; + but->flag|= UI_ICON_LEFT; + } but->flag|= UI_HAS_ICON; - - but->flag|= UI_ICON_LEFT; - but->flag|= UI_ICON_RIGHT; + but->flag|= UI_ICON_SUBMENU; but->block_create_func= func; ui_check_but(but); @@ -3031,7 +3027,7 @@ uiBut *uiDefIconBlockBut(uiBlock *block, uiBlockCreateFunc func, void *arg, int but->flag|= UI_HAS_ICON; but->flag|= UI_ICON_LEFT; - but->flag|= UI_ICON_RIGHT; + but->flag|= UI_ICON_SUBMENU; but->block_create_func= func; ui_check_but(but); @@ -3052,15 +3048,19 @@ void UI_init(void) ui_resources_init(); } -void UI_init_userdef() +/* after reading userdef file */ +void UI_init_userdef(void) { - uiStyleInit(); + /* fix saved themes */ + init_userdef_do_versions(); + /* set default colors in default theme */ ui_theme_init_userdef(); + + uiStyleInit(); } void UI_exit(void) { - uiStyleExit(); ui_resources_free(); } diff --git a/source/blender/editors/interface/interface_anim.c b/source/blender/editors/interface/interface_anim.c index 6775a639597..ac6f5d970eb 100644 --- a/source/blender/editors/interface/interface_anim.c +++ b/source/blender/editors/interface/interface_anim.c @@ -114,44 +114,59 @@ void ui_but_anim_remove_driver(bContext *C) // TODO: refine the logic for adding/removing drivers... void ui_but_anim_menu(bContext *C, uiBut *but) { - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; int length; if(but->rnapoin.data && but->rnaprop) { - head= uiPupMenuBegin(RNA_property_ui_name(but->rnaprop), 0); - + pup= uiPupMenuBegin(RNA_property_ui_name(but->rnaprop), 0); + layout= uiPupMenuLayout(pup); + length= RNA_property_array_length(but->rnaprop); - + if(but->flag & UI_BUT_ANIMATED_KEY) { if(length) { - uiMenuItemBooleanO(head, "Delete Keyframes", 0, "ANIM_OT_delete_keyframe_button", "all", 1); - uiMenuItemBooleanO(head, "Delete Single Keyframe", 0, "ANIM_OT_delete_keyframe_button", "all", 0); - - uiMenuItemBooleanO(head, "Remove Driver", 0, "ANIM_OT_remove_driver_button", "all", 1); - uiMenuItemBooleanO(head, "Remove Single Driver", 0, "ANIM_OT_remove_driver_button", "all", 0); + uiItemBooleanO(layout, "Replace Keyframes", 0, "ANIM_OT_insert_keyframe_button", "all", 1); + uiItemBooleanO(layout, "Replace Single Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0); + uiItemBooleanO(layout, "Delete Keyframes", 0, "ANIM_OT_delete_keyframe_button", "all", 1); + uiItemBooleanO(layout, "Delete Single Keyframe", 0, "ANIM_OT_delete_keyframe_button", "all", 0); } else { - uiMenuItemBooleanO(head, "Delete Keyframe", 0, "ANIM_OT_delete_keyframe_button", "all", 0); - - uiMenuItemBooleanO(head, "Remove Driver", 0, "ANIM_OT_remove_driver_button", "all", 0); + uiItemBooleanO(layout, "Replace Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0); + uiItemBooleanO(layout, "Delete Keyframe", 0, "ANIM_OT_delete_keyframe_button", "all", 0); } } else if(RNA_property_animateable(&but->rnapoin, but->rnaprop)) { if(length) { - uiMenuItemBooleanO(head, "Insert Keyframes", 0, "ANIM_OT_insert_keyframe_button", "all", 1); - uiMenuItemBooleanO(head, "Insert Single Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0); - - uiMenuItemBooleanO(head, "Add Driver", 0, "ANIM_OT_add_driver_button", "all", 1); - uiMenuItemBooleanO(head, "Add Single Driver", 0, "ANIM_OT_add_driver_button", "all", 0); + uiItemBooleanO(layout, "Insert Keyframes", 0, "ANIM_OT_insert_keyframe_button", "all", 1); + uiItemBooleanO(layout, "Insert Single Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0); } - else { - uiMenuItemBooleanO(head, "Insert Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0); - - uiMenuItemBooleanO(head, "Add Driver", 0, "ANIM_OT_add_driver_button", "all", 0); + else + uiItemBooleanO(layout, "Insert Keyframe", 0, "ANIM_OT_insert_keyframe_button", "all", 0); + } + + if(but->flag & UI_BUT_DRIVEN) { + uiItemS(layout); + + if(length) { + uiItemBooleanO(layout, "Remove Driver", 0, "ANIM_OT_remove_driver_button", "all", 1); + uiItemBooleanO(layout, "Remove Single Driver", 0, "ANIM_OT_remove_driver_button", "all", 0); } + else + uiItemBooleanO(layout, "Remove Driver", 0, "ANIM_OT_remove_driver_button", "all", 0); + } + else if(RNA_property_animateable(&but->rnapoin, but->rnaprop)) { + uiItemS(layout); + + if(length) { + uiItemBooleanO(layout, "Add Driver", 0, "ANIM_OT_add_driver_button", "all", 1); + uiItemBooleanO(layout, "Add Single Driver", 0, "ANIM_OT_add_driver_button", "all", 0); + } + else + uiItemBooleanO(layout, "Add Driver", 0, "ANIM_OT_add_driver_button", "all", 0); } - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); } } diff --git a/source/blender/editors/interface/interface_api.c b/source/blender/editors/interface/interface_api.c index a184655df83..1cd804851b5 100644 --- a/source/blender/editors/interface/interface_api.c +++ b/source/blender/editors/interface/interface_api.c @@ -40,6 +40,15 @@ static void api_ui_item_common(FunctionRNA *func) RNA_def_int(func, "icon", 0, 0, INT_MAX, "", "Override automatic icon of the item.", 0, INT_MAX); } +static void api_ui_item_op_common(FunctionRNA *func) +{ + PropertyRNA *parm; + + api_ui_item_common(func); + parm= RNA_def_string(func, "operator", "", 0, "", "Identifier of the operator."); + RNA_def_property_flag(parm, PROP_REQUIRED); +} + void RNA_api_ui_layout(StructRNA *srna) { FunctionRNA *func; @@ -68,9 +77,6 @@ void RNA_api_ui_layout(StructRNA *srna) parm= RNA_def_pointer(func, "layout", "UILayout", "", "Sub-layout to put items in."); RNA_def_function_return(func, parm); - func= RNA_def_function(srna, "template_header_menus", "uiTemplateHeaderMenus"); - //func= RNA_def_function(srna, "template_header_ID", "uiTemplateHeaderID"); - /* items */ func= RNA_def_function(srna, "itemR", "uiItemR"); api_ui_item_common(func); @@ -80,12 +86,97 @@ void RNA_api_ui_layout(StructRNA *srna) RNA_def_property_flag(parm, PROP_REQUIRED); RNA_def_boolean(func, "expand", 0, "", "Expand button to show more detail."); - func= RNA_def_function(srna, "itemO", "uiItemO"); + func= RNA_def_function(srna, "items_enumR", "uiItemsEnumR"); + parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in data."); + RNA_def_property_flag(parm, PROP_REQUIRED); + + func= RNA_def_function(srna, "item_menu_enumR", "uiItemMenuEnumR"); api_ui_item_common(func); + parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in data."); + RNA_def_property_flag(parm, PROP_REQUIRED); + + /*func= RNA_def_function(srna, "item_enumR", "uiItemEnumR"); + api_ui_item_common(func); + parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in data."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_string(func, "value", "", 0, "", "Enum property value."); + RNA_def_property_flag(parm, PROP_REQUIRED);*/ + + func= RNA_def_function(srna, "itemO", "uiItemO"); + api_ui_item_op_common(func); + + /*func= RNA_def_function(srna, "item_enumO", "uiItemEnumO"); + api_ui_item_op_common(func); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_string(func, "value", "", 0, "", "Enum property value."); + RNA_def_property_flag(parm, PROP_REQUIRED);*/ + + func= RNA_def_function(srna, "items_enumO", "uiItemsEnumO"); parm= RNA_def_string(func, "operator", "", 0, "", "Identifier of the operator."); RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator."); + RNA_def_property_flag(parm, PROP_REQUIRED); + + func= RNA_def_function(srna, "item_menu_enumO", "uiItemMenuEnumO"); + api_ui_item_op_common(func); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator."); + RNA_def_property_flag(parm, PROP_REQUIRED); + + func= RNA_def_function(srna, "item_booleanO", "uiItemBooleanO"); + api_ui_item_op_common(func); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_boolean(func, "value", 0, "", "Value of the property to call the operator with."); + RNA_def_property_flag(parm, PROP_REQUIRED); + + func= RNA_def_function(srna, "item_intO", "uiItemIntO"); + api_ui_item_op_common(func); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_int(func, "value", 0, INT_MIN, INT_MAX, "", "Value of the property to call the operator with.", INT_MIN, INT_MAX); + RNA_def_property_flag(parm, PROP_REQUIRED); + + func= RNA_def_function(srna, "item_floatO", "uiItemFloatO"); + api_ui_item_op_common(func); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_float(func, "value", 0, -FLT_MAX, FLT_MAX, "", "Value of the property to call the operator with.", -FLT_MAX, FLT_MAX); + RNA_def_property_flag(parm, PROP_REQUIRED); + + func= RNA_def_function(srna, "item_stringO", "uiItemStringO"); + api_ui_item_op_common(func); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of property in operator."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_string(func, "value", "", 0, "", "Value of the property to call the operator with."); + RNA_def_property_flag(parm, PROP_REQUIRED); func= RNA_def_function(srna, "itemL", "uiItemL"); api_ui_item_common(func); + + func= RNA_def_function(srna, "itemM", "uiItemM"); + api_ui_item_common(func); + parm= RNA_def_string(func, "menu", "", 0, "", "Identifier of the menu."); + RNA_def_property_flag(parm, PROP_REQUIRED); + + func= RNA_def_function(srna, "itemS", "uiItemS"); + + /* templates */ + func= RNA_def_function(srna, "template_header", "uiTemplateHeader"); + + func= RNA_def_function(srna, "template_header_ID", "uiTemplateHeaderID"); + parm= RNA_def_pointer(func, "data", "AnyType", "", "Data from which to take property."); + RNA_def_property_flag(parm, PROP_REQUIRED); + parm= RNA_def_string(func, "property", "", 0, "", "Identifier of pointer property in data."); + RNA_def_property_flag(parm, PROP_REQUIRED); + RNA_def_string(func, "new", "", 0, "", "Operator identifier to create a new ID block."); + RNA_def_string(func, "open", "", 0, "", "Operator identifier to open a new ID block."); + RNA_def_string(func, "unlink", "", 0, "", "Operator identifier to unlink the ID block."); } diff --git a/source/blender/editors/interface/interface_draw.c b/source/blender/editors/interface/interface_draw.c index 153db7aa77d..8be2084ab01 100644 --- a/source/blender/editors/interface/interface_draw.c +++ b/source/blender/editors/interface/interface_draw.c @@ -61,10 +61,7 @@ void uiSetRoundBox(int type) /* Not sure the roundbox function is the best place to change this * if this is undone, its not that big a deal, only makes curves edges * square for the */ - if (UI_GetThemeValue(TH_BUT_DRAWTYPE) == TH_MINIMAL) - roundboxtype= 0; - else - roundboxtype= type; + roundboxtype= type; /* flags to set which corners will become rounded: @@ -77,10 +74,7 @@ void uiSetRoundBox(int type) int uiGetRoundBox(void) { - if (ELEM3(UI_GetThemeValue(TH_BUT_DRAWTYPE), TH_MINIMAL, TH_SHADED, TH_OLDSKOOL)) - return 0; - else - return roundboxtype; + return roundboxtype; } void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad) @@ -176,10 +170,8 @@ void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy coldown[1]= color[1]+shadedown; if(coldown[1]<0.0) coldown[1]= 0.0; coldown[2]= color[2]+shadedown; if(coldown[2]<0.0) coldown[2]= 0.0; - if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) { - glShadeModel(GL_SMOOTH); - glBegin(mode); - } + glShadeModel(GL_SMOOTH); + glBegin(mode); /* start with corner right-bottom */ if(roundboxtype & 4) { @@ -285,10 +277,8 @@ void gl_round_box_vertical_shade(int mode, float minx, float miny, float maxx, f colRight[1]= color[1]+shadeRight; if(colRight[1]<0.0) colRight[1]= 0.0; colRight[2]= color[2]+shadeRight; if(colRight[2]<0.0) colRight[2]= 0.0; - if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) { - glShadeModel(GL_SMOOTH); - glBegin(mode); - } + glShadeModel(GL_SMOOTH); + glBegin(mode); /* start with corner right-bottom */ if(roundboxtype & 4) { @@ -379,10 +369,8 @@ void uiRoundRect(float minx, float miny, float maxx, float maxy, float rad) } /* set antialias line */ - if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) { - glEnable( GL_LINE_SMOOTH ); - glEnable( GL_BLEND ); - } + glEnable( GL_LINE_SMOOTH ); + glEnable( GL_BLEND ); gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad); @@ -435,10 +423,8 @@ void uiRoundBox(float minx, float miny, float maxx, float maxy, float rad) gl_round_box(GL_POLYGON, minx, miny, maxx, maxy, rad); /* set antialias line */ - if (UI_GetThemeValue(TH_BUT_DRAWTYPE) != TH_MINIMAL) { - glEnable( GL_LINE_SMOOTH ); - glEnable( GL_BLEND ); - } + glEnable( GL_LINE_SMOOTH ); + glEnable( GL_BLEND ); gl_round_box(GL_LINE_LOOP, minx, miny, maxx, maxy, rad); @@ -663,7 +649,7 @@ static void ui_draw_but_CHARTAB(uiBut *but) #endif // INTERNATIONAL #endif -void ui_draw_but_COLORBAND(uiBut *but, rcti *rect) +void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *wcol, rcti *rect) { ColorBand *coba; CBData *cbd; @@ -790,7 +776,7 @@ void ui_draw_but_COLORBAND(uiBut *but, rcti *rect) glEnd(); } -void ui_draw_but_NORMAL(uiBut *but, rcti *rect) +void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, rcti *rect) { static GLuint displist=0; int a, old[8]; @@ -802,7 +788,7 @@ void ui_draw_but_NORMAL(uiBut *but, rcti *rect) glGetMaterialfv(GL_FRONT, GL_DIFFUSE, diff); /* backdrop */ - UI_ThemeColor(TH_BUT_NEUTRAL); + glColor3ubv(wcol->inner); uiSetRoundBox(15); gl_round_box(GL_POLYGON, rect->xmin, rect->ymin, rect->xmax, rect->ymax, 5.0f); @@ -892,7 +878,14 @@ static void ui_draw_but_curve_grid(rcti *rect, float zoomx, float zoomy, float o } -void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect) +static void glColor3ubvShade(char *col, int shade) +{ + glColor3ub(col[0]-shade>0?col[0]-shade:0, + col[1]-shade>0?col[1]-shade:0, + col[2]-shade>0?col[2]-shade:0); +} + +void ui_draw_but_CURVE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect) { CurveMapping *cumap; CurveMap *cuma; @@ -916,27 +909,27 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect) /* backdrop */ if(cumap->flag & CUMA_DO_CLIP) { - UI_ThemeColorShade(TH_BUT_NEUTRAL, -20); + glColor3ubvShade(wcol->inner, -20); glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax); - UI_ThemeColor(TH_BUT_NEUTRAL); + glColor3ubv(wcol->inner); glRectf(rect->xmin + zoomx*(cumap->clipr.xmin-offsx), rect->ymin + zoomy*(cumap->clipr.ymin-offsy), rect->xmin + zoomx*(cumap->clipr.xmax-offsx), rect->ymin + zoomy*(cumap->clipr.ymax-offsy)); } else { - UI_ThemeColor(TH_BUT_NEUTRAL); + glColor3ubv(wcol->inner); glRectf(rect->xmin, rect->ymin, rect->xmax, rect->ymax); } /* grid, every .25 step */ - UI_ThemeColorShade(TH_BUT_NEUTRAL, -16); + glColor3ubvShade(wcol->inner, -16); ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 0.25f); /* grid, every 1.0 step */ - UI_ThemeColorShade(TH_BUT_NEUTRAL, -24); + glColor3ubvShade(wcol->inner, -24); ui_draw_but_curve_grid(rect, zoomx, zoomy, offsx, offsy, 1.0f); /* axes */ - UI_ThemeColorShade(TH_BUT_NEUTRAL, -50); + glColor3ubvShade(wcol->inner, -50); glBegin(GL_LINES); glVertex2f(rect->xmin, rect->ymin + zoomy*(-offsy)); glVertex2f(rect->xmax, rect->ymin + zoomy*(-offsy)); @@ -981,7 +974,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect) }*/ /* the curve */ - UI_ThemeColorBlend(TH_TEXT, TH_BUT_NEUTRAL, 0.35); + glColor3ubv(wcol->item); glEnable(GL_LINE_SMOOTH); glEnable(GL_BLEND); glBegin(GL_LINE_STRIP); @@ -1035,7 +1028,7 @@ void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect) glScissor(scissor[0], scissor[1], scissor[2], scissor[3]); /* outline */ - UI_ThemeColor(TH_BUT_OUTLINE); + glColor3ubv(wcol->outline); fdrawbox(rect->xmin, rect->ymin, rect->xmax, rect->ymax); } diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 924d7df8c45..5aa2cded642 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -2833,11 +2833,11 @@ static uiBut *ui_but_find_mouse_over(ARegion *ar, int x, int y) ui_window_to_block(ar, block, &mx, &my); for(but=block->buttons.first; but; but= but->next) { - /* give precedence to already activated buttons */ if(but->flag & UI_NO_HILITE) continue; if(ui_but_contains_pt(but, mx, my)) + /* give precedence to already activated buttons */ if(!butover || (!butover->active && but->active)) butover= but; } diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index 06041dc202e..0edcc95f7af 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -40,6 +40,7 @@ struct uiHandleButtonData; struct wmEvent; struct wmWindow; struct uiStyle; +struct uiWidgetColors; /* ****************** general defines ************** */ @@ -47,6 +48,7 @@ struct uiStyle; /* for time being separated from functional types */ typedef enum { /* standard set */ + UI_WTYPE_LABEL, UI_WTYPE_TOGGLE, UI_WTYPE_OPTION, UI_WTYPE_RADIO, @@ -97,7 +99,7 @@ typedef enum { /* internal panel drawing defines */ #define PNL_GRID 4 -#define PNL_DIST 8 +#define PNL_DIST 4 #define PNL_SAFETY 8 #define PNL_HEADER 20 @@ -353,7 +355,7 @@ void autocomplete_end(struct AutoComplete *autocpl, char *autoname); /* interface_panel.c */ extern int ui_handler_panel_region(struct bContext *C, struct wmEvent *event); -extern void ui_draw_panel(struct ARegion *ar, struct uiStyle *style, uiBlock *block, rcti *rect); +extern void ui_draw_aligned_panel(struct ARegion *ar, struct uiStyle *style, uiBlock *block, rcti *rect); /* interface_draw.c */ extern void ui_dropshadow(rctf *rct, float radius, float aspect, int select); @@ -362,9 +364,9 @@ extern void gl_round_box(int mode, float minx, float miny, float maxx, float max extern void gl_round_box_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadetop, float shadedown); extern void gl_round_box_vertical_shade(int mode, float minx, float miny, float maxx, float maxy, float rad, float shadeLeft, float shadeRight); -void ui_draw_but_COLORBAND(uiBut *but, rcti *rect); -void ui_draw_but_NORMAL(uiBut *but, rcti *rect); -void ui_draw_but_CURVE(ARegion *ar, uiBut *but, rcti *rect); +void ui_draw_but_COLORBAND(uiBut *but, struct uiWidgetColors *wcol, rcti *rect); +void ui_draw_but_NORMAL(uiBut *but, struct uiWidgetColors *wcol, rcti *rect); +void ui_draw_but_CURVE(ARegion *ar, uiBut *but, struct uiWidgetColors *wcol, rcti *rect); /* interface_handlers.c */ @@ -374,10 +376,18 @@ extern void ui_button_active_cancel(const struct bContext *C, uiBut *but); void ui_draw_anti_tria(float x1, float y1, float x2, float y2, float x3, float y3); void ui_draw_menu_back(struct uiStyle *style, uiBlock *block, rcti *rect); extern void ui_draw_but(ARegion *ar, struct uiStyle *style, uiBut *but, rcti *rect); + /* theme color init */ +struct ThemeUI; +void ui_widget_color_init(struct ThemeUI *tui); /* interface_style.c */ void uiStyleInit(void); -void uiStyleExit(void); + +/* resources.c */ +void init_userdef_do_versions(void); +void ui_theme_init_userdef(void); +void ui_resources_init(void); +void ui_resources_free(void); /* interface_anim.c */ diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c index e0059041774..6a02e992390 100644 --- a/source/blender/editors/interface/interface_layout.c +++ b/source/blender/editors/interface/interface_layout.c @@ -9,13 +9,16 @@ #include "DNA_ID.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" +#include "DNA_userdef_types.h" #include "DNA_windowmanager_types.h" #include "BLI_listbase.h" +#include "BLI_string.h" #include "BKE_context.h" #include "BKE_global.h" #include "BKE_idprop.h" +#include "BKE_library.h" #include "BKE_screen.h" #include "BKE_utildefines.h" @@ -38,24 +41,24 @@ /************************ Structs and Defines *************************/ -#define COLUMN_SPACE 5 -#define TEMPLATE_SPACE 5 -#define BOX_SPACE 5 -#define BUTTON_SPACE_X 5 -#define BUTTON_SPACE_Y 2 - #define RNA_NO_INDEX -1 +#define RNA_ENUM_VALUE -2 #define EM_UNIT_X XIC #define EM_UNIT_Y YIC +#define EM_SEPR_X 6 +#define EM_SEPR_Y 6 + /* Item */ typedef enum uiItemType { ITEM_OPERATOR, ITEM_RNA_PROPERTY, ITEM_MENU, - ITEM_LABEL + ITEM_LABEL, + ITEM_VALUE, + ITEM_SEPARATOR } uiItemType; enum uiItemFlag { @@ -69,7 +72,9 @@ typedef struct uiItem { int slot; char *name; + char namestr[UI_MAX_NAME_STR]; int icon; + int disabled; } uiItem; typedef struct uiItemRNA { @@ -77,7 +82,7 @@ typedef struct uiItemRNA { PointerRNA ptr; PropertyRNA *prop; - int index; + int index, value; int expand; } uiItemRNA; @@ -89,11 +94,19 @@ typedef struct uiItemOp { int context; } uiItemOp; -typedef struct uiItemLMenu { +typedef struct uiItemMenu { uiItem item; + char *menuname; uiMenuCreateFunc func; -} uiItemLMenu; + void *arg, *argN; +} uiItemMenu; + +typedef struct uiItemValue { + uiItem item; + + int argval; +} uiItemValue; /* Template */ @@ -104,8 +117,7 @@ typedef enum uiTemplateType { TEMPLATE_SPLIT, TEMPLATE_BOX, - TEMPLATE_HEADER_MENUS, - TEMPLATE_HEADER_BUTTONS, + TEMPLATE_HEADER, TEMPLATE_HEADER_ID } uiTemplateType; @@ -114,7 +126,7 @@ typedef struct uiTemplate { uiTemplateType type; ListBase items; - int color, slot; + int slot; } uiTemplate; typedef struct uiTemplateFlow { @@ -138,9 +150,13 @@ typedef struct uiTemplateHeadID { uiTemplate template; PointerRNA ptr; - char *propname; + PropertyRNA *prop; + int flag; - uiIDPoinFunc func; + short browse; + char *newop; + char *openop; + char *unlinkop; } uiTemplateHeadID; /* Layout */ @@ -148,9 +164,14 @@ typedef struct uiTemplateHeadID { struct uiLayout { ListBase templates; int opcontext; - int dir; + int dir, type; int x, y, w, h; int emw, emh; + + uiMenuHandleFunc handlefunc; + void *argv; + + uiStyle *style; }; void ui_layout_free(uiLayout *layout); @@ -158,6 +179,23 @@ void ui_layout_end(const bContext *C, uiBlock *block, uiLayout *layout, int *x, /************************** Item ***************************/ +static void ui_item_name(uiItem *item, char *name) +{ + if(!item->name && name) { + BLI_strncpy(item->namestr, name, sizeof(item->namestr)); + item->name= item->namestr; + } +} +static void ui_item_name_add_colon(uiItem *item) +{ + int len= strlen(item->namestr); + + if(len != 0 && len+1 < sizeof(item->namestr)) { + item->namestr[len]= ':'; + item->namestr[len+1]= '\0'; + } +} + #define UI_FIT_EXPAND 1 static int ui_item_fit(int item, int pos, int all, int available, int spacing, int last, int flag) @@ -183,11 +221,11 @@ static int ui_item_fit(int item, int pos, int all, int available, int spacing, i } /* create buttons for an item with an RNA array */ -static void ui_item_array(uiBlock *block, uiItemRNA *rnaitem, int len, int x, int y, int w, int h) +static void ui_item_array(uiLayout *layout, uiBlock *block, uiItemRNA *rnaitem, int len, int x, int y, int w, int h) { + uiStyle *style= layout->style; PropertyType type; PropertySubType subtype; - char *name; int a; /* retrieve type and subtype */ @@ -195,13 +233,8 @@ static void ui_item_array(uiBlock *block, uiItemRNA *rnaitem, int len, int x, in subtype= RNA_property_subtype(rnaitem->prop); /* create label */ - if(rnaitem->item.name) - name= (char*)rnaitem->item.name; - else - name= (char*)RNA_property_ui_name(rnaitem->prop); - - if(strcmp(name, "") != 0) - uiDefBut(block, LABEL, 0, name, x, y + h - EM_UNIT_Y, w, EM_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); + if(strcmp(rnaitem->item.name, "") != 0) + uiDefBut(block, LABEL, 0, rnaitem->item.name, x, y + h - EM_UNIT_Y, w, EM_UNIT_Y, NULL, 0.0, 0.0, 0, 0, ""); /* create buttons */ uiBlockBeginAlign(block); @@ -210,7 +243,7 @@ static void ui_item_array(uiBlock *block, uiItemRNA *rnaitem, int len, int x, in /* special check for layer layout */ int butw, buth; - butw= ui_item_fit(EM_UNIT_X, 0, EM_UNIT_X*10 + BUTTON_SPACE_X, w, 0, 0, UI_FIT_EXPAND); + butw= ui_item_fit(EM_UNIT_X, 0, EM_UNIT_X*10 + style->buttonspacex, w, 0, 0, UI_FIT_EXPAND); buth= MIN2(EM_UNIT_Y, butw); y += 2*(EM_UNIT_Y - buth); @@ -222,7 +255,7 @@ static void ui_item_array(uiBlock *block, uiItemRNA *rnaitem, int len, int x, in uiDefAutoButR(block, &rnaitem->ptr, rnaitem->prop, a+10, "", ICON_BLANK1, x + butw*a, y, butw, buth); uiBlockEndAlign(block); - x += 5*butw + BUTTON_SPACE_X; + x += 5*butw + style->buttonspacex; uiBlockBeginAlign(block); for(a=0; a<5; a++) @@ -305,16 +338,9 @@ static void ui_item_enum_row(uiBlock *block, uiItemRNA *rnaitem, int x, int y, i /* create label + button for RNA property */ static void ui_item_with_label(uiBlock *block, uiItemRNA *rnaitem, int x, int y, int w, int h) { - char *name; - - if(rnaitem->item.name) - name= (char*)rnaitem->item.name; - else - name= (char*)RNA_property_ui_name(rnaitem->prop); - - if(strcmp(name, "") != 0) { + if(strcmp(rnaitem->item.name, "") != 0) { w= w/2; - uiDefBut(block, LABEL, 0, name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 0, rnaitem->item.name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, ""); x += w; } @@ -322,7 +348,7 @@ static void ui_item_with_label(uiBlock *block, uiItemRNA *rnaitem, int x, int y, } /* create buttons for an arbitrary item */ -static void ui_item_buts(uiBlock *block, uiItem *item, int x, int y, int w, int h) +static void ui_item_buts(uiLayout *layout, uiBlock *block, uiItem *item, int x, int y, int w, int h) { if(item->type == ITEM_RNA_PROPERTY) { /* RNA property */ @@ -336,7 +362,18 @@ static void ui_item_buts(uiBlock *block, uiItem *item, int x, int y, int w, int /* array property */ if(rnaitem->index == RNA_NO_INDEX && len > 0) - ui_item_array(block, rnaitem, len, x, y, w, h); + ui_item_array(layout, block, rnaitem, len, x, y, w, h); + /* enum item */ + else if(type == PROP_ENUM && rnaitem->index == RNA_ENUM_VALUE) { + char *identifier= (char*)RNA_property_identifier(rnaitem->prop); + + if(item->icon && strcmp(item->name, "") != 0) + uiDefIconTextButR(block, ROW, 0, item->icon, item->name, x, y, w, h, &rnaitem->ptr, identifier, -1, 0, rnaitem->value, -1, -1, NULL); + else if(item->icon) + uiDefIconButR(block, ROW, 0, item->icon, x, y, w, h, &rnaitem->ptr, identifier, -1, 0, rnaitem->value, -1, -1, NULL); + else + uiDefButR(block, ROW, 0, item->name, x, y, w, h, &rnaitem->ptr, identifier, -1, 0, rnaitem->value, -1, -1, NULL); + } /* expanded enum */ else if(type == PROP_ENUM && rnaitem->expand) ui_item_enum_row(block, rnaitem, x, y, w, h); @@ -352,7 +389,7 @@ static void ui_item_buts(uiBlock *block, uiItem *item, int x, int y, int w, int uiItemOp *opitem= (uiItemOp*)item; uiBut *but; - if(item->icon && item->name) + if(item->icon && strcmp(item->name, "") != 0) but= uiDefIconTextButO(block, BUT, opitem->ot->idname, opitem->context, item->icon, (char*)item->name, x, y, w, h, NULL); else if(item->icon) but= uiDefIconButO(block, BUT, opitem->ot->idname, opitem->context, item->icon, x, y, w, h, NULL); @@ -369,19 +406,53 @@ static void ui_item_buts(uiBlock *block, uiItem *item, int x, int y, int w, int } else if(item->type == ITEM_MENU) { /* menu */ - uiItemLMenu *menuitem= (uiItemLMenu*)item; + uiBut *but; + uiItemMenu *menuitem= (uiItemMenu*)item; - uiDefMenuBut(block, menuitem->func, NULL, (char*)item->name, x, y-2, w-3, h+4, ""); + if(layout->type == UI_LAYOUT_HEADER) { /* ugly .. */ + y -= 2; + w -= 3; + h += 4; + } + + if(item->icon) + but= uiDefIconTextMenuBut(block, menuitem->func, menuitem->arg, item->icon, (char*)item->name, x, y, w, h, ""); + else + but= uiDefMenuBut(block, menuitem->func, menuitem->arg, (char*)item->name, x, y, w, h, ""); + + if(menuitem->argN) { /* ugly .. */ + but->poin= (char*)but; + but->func_argN= menuitem->argN; + } } else if(item->type == ITEM_LABEL) { /* label */ + uiBut *but; - if(item->icon && item->name) - uiDefIconTextBut(block, LABEL, 0, item->icon, (char*)item->name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, ""); + if(item->icon && strcmp(item->name, "") != 0) + but= uiDefIconTextBut(block, LABEL, 0, item->icon, (char*)item->name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, ""); else if(item->icon) - uiDefIconBut(block, LABEL, 0, item->icon, x, y, w, h, NULL, 0.0, 0.0, 0, 0, ""); - else if((char*)item->name) - uiDefBut(block, LABEL, 0, (char*)item->name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, ""); + but= uiDefIconBut(block, LABEL, 0, item->icon, x, y, w, h, NULL, 0.0, 0.0, 0, 0, ""); + else + but= uiDefBut(block, LABEL, 0, (char*)item->name, x, y, w, h, NULL, 0.0, 0.0, 0, 0, ""); + + if(item->disabled) { + but->flag |= UI_BUT_DISABLED; + but->lock = 1; + but->lockstr = ""; + } + } + else if(item->type == ITEM_VALUE) { + /* label */ + uiItemValue *vitem= (uiItemValue*)item; + float *retvalue= (block->handle)? &block->handle->retvalue: NULL; + + if(item->icon && strcmp(item->name, "") != 0) + uiDefIconTextButF(block, BUTM, 0, item->icon, (char*)item->name, x, y, w, h, retvalue, 0.0, 0.0, 0, vitem->argval, ""); + else if(item->icon) + uiDefIconButF(block, BUTM, 0, item->icon, x, y, w, h, retvalue, 0.0, 0.0, 0, vitem->argval, ""); + else + uiDefButF(block, BUTM, 0, (char*)item->name, x, y, w, h, retvalue, 0.0, 0.0, 0, vitem->argval, ""); } else { /* separator */ @@ -390,18 +461,21 @@ static void ui_item_buts(uiBlock *block, uiItem *item, int x, int y, int w, int } /* estimated size of text + icon */ -static int ui_text_icon_width(char *name, int icon) +static int ui_text_icon_width(char *name, int icon, int variable) { - if(icon && name && strcmp(name, "") == 0) + if(icon && strcmp(name, "") == 0) return EM_UNIT_X; /* icon only */ else if(icon) - return 10*EM_UNIT_X; /* icon + text */ + return (variable)? UI_GetStringWidth(name) + EM_UNIT_X: 10*EM_UNIT_X; /* icon + text */ else - return 10*EM_UNIT_X; /* text only */ + return (variable)? UI_GetStringWidth(name) + EM_UNIT_X: 10*EM_UNIT_X; /* text only */ } /* estimated size of an item */ -static void ui_item_size(uiItem *item, int *r_w, int *r_h) +#define UI_ITEM_VARY_X 1 +#define UI_ITEM_VARY_Y 2 + +static void ui_item_size(uiItem *item, int *r_w, int *r_h, int flag) { int w, h; @@ -412,7 +486,7 @@ static void ui_item_size(uiItem *item, int *r_w, int *r_h) PropertySubType subtype; int len; - w= ui_text_icon_width(item->name, item->icon); + w= ui_text_icon_width(item->name, item->icon, flag & UI_ITEM_VARY_X); h= EM_UNIT_Y; /* arbitrary extended width by type */ @@ -425,7 +499,7 @@ static void ui_item_size(uiItem *item, int *r_w, int *r_h) /* increase height for arrays */ if(rnaitem->index == RNA_NO_INDEX && len > 0) { - if(item->name && strcmp(item->name, "") == 0 && item->icon == 0) + if(strcmp(item->name, "") == 0 && item->icon == 0) h= 0; if(type == PROP_BOOLEAN && len == 20) @@ -435,11 +509,21 @@ static void ui_item_size(uiItem *item, int *r_w, int *r_h) else h += len*EM_UNIT_Y; } + else if(flag & UI_ITEM_VARY_X) { + if(type == PROP_BOOLEAN && strcmp(item->name, "") != 0) + w += EM_UNIT_X; + } } else { /* other */ - w= ui_text_icon_width(item->name, item->icon); - h= EM_UNIT_Y; + if(item->type == ITEM_SEPARATOR) { + w= EM_SEPR_X; + h= EM_SEPR_Y; + } + else { + w= ui_text_icon_width(item->name, item->icon, flag & UI_ITEM_VARY_X); + h= EM_UNIT_Y; + } } if(r_w) *r_w= w; @@ -458,6 +542,25 @@ static void ui_item_free(uiItem *item) } } +/* disabled item */ +static void ui_item_disabled(uiLayout *layout, char *name) +{ + uiTemplate *template= layout->templates.last; + uiItem *item; + + if(!template) + return; + + item= MEM_callocN(sizeof(uiItem), "uiItem"); + + ui_item_name(item, name); + item->disabled= 1; + item->type= ITEM_LABEL; + item->slot= template->slot; + + BLI_addtail(&template->items, item); +} + /* operator items */ void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDProperty *properties, int context) { @@ -467,12 +570,14 @@ void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDPropert if(!template) return; - if(!ot) + if(!ot) { + ui_item_disabled(layout, idname); return; + } opitem= MEM_callocN(sizeof(uiItemOp), "uiItemOp"); - opitem->item.name= name; + ui_item_name(&opitem->item, name); opitem->item.icon= icon; opitem->item.type= ITEM_OPERATOR; opitem->item.slot= template->slot; @@ -484,6 +589,33 @@ void uiItemFullO(uiLayout *layout, char *name, int icon, char *idname, IDPropert BLI_addtail(&template->items, opitem); } +static char *ui_menu_enumpropname(char *opname, char *propname, int retval) +{ + wmOperatorType *ot= WM_operatortype_find(opname); + PointerRNA ptr; + PropertyRNA *prop; + + if(!ot || !ot->srna) + return ""; + + RNA_pointer_create(NULL, ot->srna, NULL, &ptr); + prop= RNA_struct_find_property(&ptr, propname); + + if(prop) { + const EnumPropertyItem *item; + int totitem, i; + + RNA_property_enum_items(&ptr, prop, &item, &totitem); + + for (i=0; iopcontext); } @@ -500,8 +635,10 @@ void uiItemsEnumO(uiLayout *layout, char *opname, char *propname) PointerRNA ptr; PropertyRNA *prop; - if(!ot || !ot->srna) + if(!ot || !ot->srna) { + ui_item_disabled(layout, opname); return; + } RNA_pointer_create(NULL, ot->srna, NULL, &ptr); prop= RNA_struct_find_property(&ptr, propname); @@ -513,7 +650,7 @@ void uiItemsEnumO(uiLayout *layout, char *opname, char *propname) RNA_property_enum_items(&ptr, prop, &item, &totitem); for(i=0; itemplates.last; uiItemRNA *rnaitem; @@ -575,7 +712,7 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper rnaitem= MEM_callocN(sizeof(uiItemRNA), "uiItemRNA"); - rnaitem->item.name= name; + ui_item_name(&rnaitem->item, name); rnaitem->item.icon= icon; rnaitem->item.type= ITEM_RNA_PROPERTY; rnaitem->item.slot= template->slot; @@ -583,6 +720,7 @@ void uiItemFullR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, Proper rnaitem->ptr= *ptr; rnaitem->prop= prop; rnaitem->index= index; + rnaitem->value= value; rnaitem->expand= expand; BLI_addtail(&template->items, rnaitem); @@ -592,35 +730,90 @@ void uiItemR(uiLayout *layout, char *name, int icon, PointerRNA *ptr, char *prop { PropertyRNA *prop; + if(!ptr->data || !propname) + return; + prop= RNA_struct_find_property(ptr, propname); - if(!ptr->data) - return; if(!prop) { - printf("uiItemR: property not found: %s\n",propname); + ui_item_disabled(layout, propname); + printf("uiItemR: property not found: %s\n", propname); return; } - uiItemFullR(layout, name, icon, ptr, prop, RNA_NO_INDEX, expand); + uiItemFullR(layout, name, icon, ptr, prop, RNA_NO_INDEX, 0, expand); +} + +void uiItemEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname, int value) +{ + PropertyRNA *prop; + + if(!ptr->data || !propname) + return; + + prop= RNA_struct_find_property(ptr, propname); + + if(!prop) { + ui_item_disabled(layout, propname); + printf("uiItemEnumR: property not found: %s\n", propname); + return; + } + + uiItemFullR(layout, name, icon, ptr, prop, RNA_ENUM_VALUE, value, 0); +} + +void uiItemsEnumR(uiLayout *layout, struct PointerRNA *ptr, char *propname) +{ + PropertyRNA *prop; + + prop= RNA_struct_find_property(ptr, propname); + + if(!prop) { + ui_item_disabled(layout, propname); + return; + } + + if(RNA_property_type(prop) == PROP_ENUM) { + const EnumPropertyItem *item; + int totitem, i; + + RNA_property_enum_items(ptr, prop, &item, &totitem); + + for(i=0; idraw(C, &menu); +} + +void uiItemM(uiLayout *layout, char *name, int icon, char *menuname) { uiTemplate *template= layout->templates.last; - uiItemLMenu *menuitem; + uiItemMenu *menuitem; if(!template) return; + if(!menuname) + return; - menuitem= MEM_callocN(sizeof(uiItemLMenu), "uiItemLMenu"); + menuitem= MEM_callocN(sizeof(uiItemMenu), "uiItemMenu"); - menuitem->item.name= name; + ui_item_name(&menuitem->item, name); menuitem->item.icon= icon; menuitem->item.type= ITEM_MENU; menuitem->item.slot= template->slot; - menuitem->func= func; + menuitem->func= ui_item_menutype_func; + menuitem->menuname= menuname; BLI_addtail(&template->items, menuitem); } @@ -636,7 +829,7 @@ void uiItemL(uiLayout *layout, char *name, int icon) item= MEM_callocN(sizeof(uiItem), "uiItem"); - item->name= name; + ui_item_name(item, name); item->icon= icon; item->type= ITEM_LABEL; item->slot= template->slot; @@ -644,17 +837,173 @@ void uiItemL(uiLayout *layout, char *name, int icon) BLI_addtail(&template->items, item); } +/* value item */ +void uiItemV(uiLayout *layout, char *name, int icon, int argval) +{ + uiTemplate *template= layout->templates.last; + uiItemValue *vitem; + + if(!template) + return; + + vitem= MEM_callocN(sizeof(uiItemValue), "uiItemValue"); + + vitem->item.name= name; + vitem->item.icon= icon; + vitem->item.type= ITEM_VALUE; + vitem->item.slot= template->slot; + vitem->argval= argval; + + BLI_addtail(&template->items, vitem); +} + +/* separator item */ +void uiItemS(uiLayout *layout) +{ + uiTemplate *template= layout->templates.last; + uiItem *item; + + if(!template) + return; + + item= MEM_callocN(sizeof(uiItem), "uiItem"); + + item->type= ITEM_SEPARATOR; + item->slot= template->slot; + + BLI_addtail(&template->items, item); +} + +/* level items */ +void uiItemMenuF(uiLayout *layout, char *name, int icon, uiMenuCreateFunc func) +{ + uiTemplate *template= layout->templates.last; + uiItemMenu *menuitem; + + if(!template) + return; + if(!func) + return; + + menuitem= MEM_callocN(sizeof(uiItemMenu), "uiItemMenu"); + + ui_item_name(&menuitem->item, name); + menuitem->item.icon= icon; + menuitem->item.type= ITEM_MENU; + menuitem->item.slot= template->slot; + + menuitem->func= func; + + BLI_addtail(&template->items, menuitem); +} + +typedef struct MenuItemLevel { + int opcontext; + char *opname; + char *propname; + PointerRNA rnapoin; +} MenuItemLevel; + +static void menu_item_enum_opname_menu(bContext *C, uiLayout *layout, void *arg) +{ + MenuItemLevel *lvl= (MenuItemLevel*)(((uiBut*)arg)->func_argN); + + uiLayoutContext(layout, WM_OP_EXEC_REGION_WIN); + uiItemsEnumO(layout, lvl->opname, lvl->propname); +} + +void uiItemMenuEnumO(uiLayout *layout, char *name, int icon, char *opname, char *propname) +{ + wmOperatorType *ot= WM_operatortype_find(opname); + uiTemplate *template= layout->templates.last; + uiItemMenu *menuitem; + MenuItemLevel *lvl; + + if(!ot || !ot->srna) { + ui_item_disabled(layout, opname); + return; + } + if(!template) + return; + + menuitem= MEM_callocN(sizeof(uiItemMenu), "uiItemMenu"); + + if(!name) + name= ot->name; + + ui_item_name(&menuitem->item, name); + menuitem->item.icon= icon; + menuitem->item.type= ITEM_MENU; + menuitem->item.slot= template->slot; + + lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel"); + lvl->opname= opname; + lvl->propname= propname; + lvl->opcontext= layout->opcontext; + + menuitem->func= menu_item_enum_opname_menu; + menuitem->argN= lvl; + + BLI_addtail(&template->items, menuitem); +} + +static void menu_item_enum_rna_menu(bContext *C, uiLayout *layout, void *arg) +{ + MenuItemLevel *lvl= (MenuItemLevel*)(((uiBut*)arg)->func_argN); + + uiLayoutContext(layout, lvl->opcontext); + uiItemsEnumR(layout, &lvl->rnapoin, lvl->propname); +} + +void uiItemMenuEnumR(uiLayout *layout, char *name, int icon, struct PointerRNA *ptr, char *propname) +{ + uiTemplate *template= layout->templates.last; + uiItemMenu *menuitem; + MenuItemLevel *lvl; + PropertyRNA *prop; + + if(!template) + return; + + prop= RNA_struct_find_property(ptr, propname); + if(!prop) { + ui_item_disabled(layout, propname); + return; + } + + menuitem= MEM_callocN(sizeof(uiItemMenu), "uiItemMenu"); + + if(!name) + name= (char*)RNA_property_ui_name(prop); + + ui_item_name(&menuitem->item, name); + menuitem->item.icon= icon; + menuitem->item.type= ITEM_MENU; + menuitem->item.slot= template->slot; + + lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel"); + lvl->rnapoin= *ptr; + lvl->propname= propname; + lvl->opcontext= layout->opcontext; + + menuitem->func= menu_item_enum_rna_menu; + menuitem->argN= lvl; + + BLI_addtail(&template->items, menuitem); +} + /**************************** Template ***************************/ /* single row layout */ static void ui_layout_row(uiLayout *layout, uiBlock *block, uiTemplate *template) { + uiStyle *style= layout->style; uiItem *item; int tot=0, totw= 0, maxh= 0, itemw, itemh, x, w; /* estimate total width of buttons */ for(item=template->items.first; item; item=item->next) { - ui_item_size(item, &itemw, &itemh); + ui_item_size(item, &itemw, &itemh, UI_ITEM_VARY_Y); totw += itemw; maxh= MAX2(maxh, itemh); tot++; @@ -668,11 +1017,11 @@ static void ui_layout_row(uiLayout *layout, uiBlock *block, uiTemplate *template w= layout->w; for(item=template->items.first; item; item=item->next) { - ui_item_size(item, &itemw, &itemh); - itemw= ui_item_fit(itemw, x, totw, w, (tot-1)*BUTTON_SPACE_X, !item->next, UI_FIT_EXPAND); + ui_item_size(item, &itemw, &itemh, UI_ITEM_VARY_Y); + itemw= ui_item_fit(itemw, x, totw, w, (tot-1)*style->buttonspacex, !item->next, UI_FIT_EXPAND); - ui_item_buts(block, item, layout->x+x, layout->y-itemh, itemw, itemh); - x += itemw+BUTTON_SPACE_X; + ui_item_buts(layout, block, item, layout->x+x, layout->y-itemh, itemw, itemh); + x += itemw+style->buttonspacex; } layout->y -= maxh; @@ -681,6 +1030,7 @@ static void ui_layout_row(uiLayout *layout, uiBlock *block, uiTemplate *template /* multi-column layout */ static void ui_layout_column(uiLayout *layout, uiBlock *block, uiTemplate *template) { + uiStyle *style= layout->style; uiItem *item; int col, totcol= 0, x, y, miny, itemw, itemh, w; @@ -699,20 +1049,20 @@ static void ui_layout_column(uiLayout *layout, uiBlock *block, uiTemplate *templ for(col=0; colcolumnspace, col == totcol-1, UI_FIT_EXPAND); for(item=template->items.first; item; item=item->next) { if(item->slot != col) continue; - ui_item_size(item, NULL, &itemh); + ui_item_size(item, NULL, &itemh, UI_ITEM_VARY_Y); y -= itemh; - ui_item_buts(block, item, layout->x+x, layout->y+y, itemw, itemh); - y -= BUTTON_SPACE_Y; + ui_item_buts(layout, block, item, layout->x+x, layout->y+y, itemw, itemh); + y -= style->buttonspacey; } - x += itemw + COLUMN_SPACE; + x += itemw + style->columnspace; miny= MIN2(miny, y); } @@ -722,6 +1072,7 @@ static void ui_layout_column(uiLayout *layout, uiBlock *block, uiTemplate *templ /* multi-column layout, automatically flowing to the next */ static void ui_layout_column_flow(uiLayout *layout, uiBlock *block, uiTemplate *template) { + uiStyle *style= layout->style; uiTemplateFlow *flow= (uiTemplateFlow*)template; uiItem *item; int col, x, y, w, emh, emy, miny, itemw, itemh, maxw=0; @@ -731,7 +1082,7 @@ static void ui_layout_column_flow(uiLayout *layout, uiBlock *block, uiTemplate * toth= 0; totitem= 0; for(item=template->items.first; item; item=item->next) { - ui_item_size(item, &itemw, &itemh); + ui_item_size(item, &itemw, &itemh, UI_ITEM_VARY_Y); maxw= MAX2(maxw, itemw); toth += itemh; totitem++; @@ -760,18 +1111,18 @@ static void ui_layout_column_flow(uiLayout *layout, uiBlock *block, uiTemplate * /* create column per column */ col= 0; for(item=template->items.first; item; item=item->next) { - ui_item_size(item, NULL, &itemh); - itemw= ui_item_fit(1, x, totcol, w, (totcol-1)*COLUMN_SPACE, col == totcol-1, UI_FIT_EXPAND); + ui_item_size(item, NULL, &itemh, UI_ITEM_VARY_Y); + itemw= ui_item_fit(1, x, totcol, w, (totcol-1)*style->columnspace, col == totcol-1, UI_FIT_EXPAND); y -= itemh; emy -= itemh; - ui_item_buts(block, item, layout->x+x, layout->y+y, itemw, itemh); - y -= BUTTON_SPACE_Y; + ui_item_buts(layout, block, item, layout->x+x, layout->y+y, itemw, itemh); + y -= style->buttonspacey; miny= MIN2(miny, y); /* decide to go to next one */ if(col < totcol-1 && emy <= -emh) { - x += itemw + COLUMN_SPACE; + x += itemw + style->columnspace; y= 0; col++; } @@ -789,7 +1140,7 @@ static void ui_layout_split(uiLayout *layout, uiBlock *block, uiTemplate *templa /* estimate total width of buttons */ for(item=template->items.first; item; item=item->next) { - ui_item_size(item, &itemw, &itemh); + ui_item_size(item, &itemw, &itemh, UI_ITEM_VARY_Y); totw += itemw; maxh= MAX2(maxh, itemh); tot++; @@ -801,20 +1152,20 @@ static void ui_layout_split(uiLayout *layout, uiBlock *block, uiTemplate *templa /* create buttons starting from left and right */ lx= 0; rx= 0; - w= layout->w - BUTTON_SPACE_X*(tot-1) + BUTTON_SPACE_X; + w= layout->w - style->buttonspacex*(tot-1) + style->buttonspacex; for(item=template->items.first; item; item=item->next) { - ui_item_size(item, &itemw, &itemh); + ui_item_size(item, &itemw, &itemh, UI_ITEM_VARY_Y); if(item->slot == UI_TSLOT_LR_LEFT) { itemw= ui_item_fit(itemw, lx, totw, w, 0, 0); - ui_item_buts(block, item, layout->x+lx, layout->y-itemh, itemw, itemh); - lx += itemw + BUTTON_SPACE_X; + ui_item_buts(layout, block, item, layout->x+lx, layout->y-itemh, itemw, itemh); + lx += itemw + style->buttonspacex; } else { itemw= ui_item_fit(itemw, totw + rx, totw, w, 0, 0); - rx -= itemw + BUTTON_SPACE_X; - ui_item_buts(block, item, layout->x+layout->w+rx, layout->y-itemh, itemw, itemh); + rx -= itemw + style->buttonspacex; + ui_item_buts(layout, block, item, layout->x+layout->w+rx, layout->y-itemh, itemw, itemh); } } @@ -825,6 +1176,7 @@ static void ui_layout_split(uiLayout *layout, uiBlock *block, uiTemplate *templa /* split in columns */ static void ui_layout_split(const bContext *C, uiLayout *layout, uiBlock *block, uiTemplate *template) { + uiStyle *style= layout->style; uiTemplateSplt *split= (uiTemplateSplt*)template; uiLayout *sublayout; int a, x, y, miny, w= layout->w, h= layout->h, splitw; @@ -836,7 +1188,7 @@ static void ui_layout_split(const bContext *C, uiLayout *layout, uiBlock *block, for(a=0; anumber; a++) { sublayout= split->sublayout[a]; - splitw= ui_item_fit(1, x, split->number, w, (split->number-1)*COLUMN_SPACE, a == split->number-1, UI_FIT_EXPAND); + splitw= ui_item_fit(1, x, split->number, w, (split->number-1)*style->columnspace, a == split->number-1, UI_FIT_EXPAND); sublayout->x= layout->x + x; sublayout->w= splitw; sublayout->y= layout->y; @@ -849,7 +1201,7 @@ static void ui_layout_split(const bContext *C, uiLayout *layout, uiBlock *block, ui_layout_end(C, block, sublayout, NULL, &y); miny= MIN2(y, miny); - x += splitw + COLUMN_SPACE; + x += splitw + style->columnspace; } layout->y= miny; @@ -858,6 +1210,7 @@ static void ui_layout_split(const bContext *C, uiLayout *layout, uiBlock *block, /* element in a box layout */ static void ui_layout_box(const bContext *C, uiLayout *layout, uiBlock *block, uiTemplate *template) { + uiStyle *style= layout->style; uiTemplateBx *box= (uiTemplateBx*)template; int starty, startx, w= layout->w, h= layout->h; @@ -865,9 +1218,9 @@ static void ui_layout_box(const bContext *C, uiLayout *layout, uiBlock *block, u starty= layout->y; /* some extra padding */ - box->sublayout->x= layout->x + BOX_SPACE; - box->sublayout->w= w - 2*BOX_SPACE; - box->sublayout->y= layout->y - BOX_SPACE; + box->sublayout->x= layout->x + style->boxspace; + box->sublayout->w= w - 2*style->boxspace; + box->sublayout->y= layout->y - style->boxspace; box->sublayout->h= h; box->sublayout->emw= layout->emw; @@ -888,15 +1241,15 @@ static void ui_layout_header_buttons(uiLayout *layout, uiBlock *block, uiTemplat uiBlockBeginAlign(block); for(item=template->items.first; item; item=item->next) { - ui_item_size(item, &itemw, &itemh); - ui_item_buts(block, item, layout->x, layout->y, itemw, itemh); + ui_item_size(item, &itemw, &itemh, UI_ITEM_VARY_X); + ui_item_buts(layout, block, item, layout->x, layout->y, itemw, itemh); layout->x += itemw; } uiBlockEndAlign(block); } -static void ui_layout_header_menus(const bContext *C, uiLayout *layout, uiBlock *block, uiTemplate *template) +static void ui_layout_header(const bContext *C, uiLayout *layout, uiBlock *block, uiTemplate *template) { ScrArea *sa= CTX_wm_area(C); @@ -910,16 +1263,127 @@ static void ui_layout_header_menus(const bContext *C, uiLayout *layout, uiBlock uiBlockSetEmboss(block, UI_EMBOSS); } +static void header_id_cb(bContext *C, void *arg_template, void *arg_event) +{ + uiTemplateHeadID *idtemplate= (uiTemplateHeadID*)arg_template; + PointerRNA idptr= RNA_property_pointer_get(&idtemplate->ptr, idtemplate->prop); + ID *idtest, *id= idptr.data; + ListBase *lb= wich_libbase(CTX_data_main(C), ID_TXT); // XXX + int nr, event= GET_INT_FROM_POINTER(arg_event); + + if(event == UI_ID_BROWSE && idtemplate->browse == 32767) + event= UI_ID_ADD_NEW; + else if(event == UI_ID_BROWSE && idtemplate->browse == 32766) + event= UI_ID_OPEN; + + switch(event) { + case UI_ID_BROWSE: { + if(id==0) id= lb->first; + if(id==0) return; + + if(idtemplate->browse== -2) { + /* XXX implement or find a replacement + * activate_databrowse((ID *)G.buts->lockpoin, GS(id->name), 0, B_MESHBROWSE, &idtemplate->browse, do_global_buttons); */ + return; + } + if(idtemplate->browse < 0) + return; + + for(idtest=lb->first, nr=1; idtest; idtest=idtest->next, nr++) { + if(nr==idtemplate->browse) { + if(id == idtest) + return; + + id= idtest; + RNA_id_pointer_create(id, &idptr); + RNA_property_pointer_set(&idtemplate->ptr, idtemplate->prop, idptr); + RNA_property_update(C, &idtemplate->ptr, idtemplate->prop); + /* XXX */ + + break; + } + } + break; + } +#if 0 + case UI_ID_DELETE: + id= NULL; + break; + case UI_ID_FAKE_USER: + if(id) { + if(id->flag & LIB_FAKEUSER) id->us++; + else id->us--; + } + else return; + break; +#endif + case UI_ID_PIN: + break; + case UI_ID_ADD_NEW: + WM_operator_name_call(C, idtemplate->newop, WM_OP_INVOKE_REGION_WIN, NULL); + break; + case UI_ID_OPEN: + WM_operator_name_call(C, idtemplate->openop, WM_OP_INVOKE_REGION_WIN, NULL); + break; +#if 0 + case UI_ID_ALONE: + if(!id || id->us < 1) + return; + break; + case UI_ID_LOCAL: + if(!id || id->us < 1) + return; + break; + case UI_ID_AUTO_NAME: + break; +#endif + } +} + static void ui_layout_header_id(const bContext *C, uiLayout *layout, uiBlock *block, uiTemplate *template) { - uiTemplateHeadID *idtemplate= (uiTemplateHeadID*)template; - PointerRNA idptr; + uiTemplateHeadID *duptemplate, *idtemplate= (uiTemplateHeadID*)template; + uiBut *but; + PointerRNA idptr= RNA_property_pointer_get(&idtemplate->ptr, idtemplate->prop); + ListBase *lb= wich_libbase(CTX_data_main(C), ID_TXT); // XXX - idptr= RNA_pointer_get(&idtemplate->ptr, idtemplate->propname); + if(idtemplate->flag & UI_ID_BROWSE) { + char *extrastr, *str; + + if((idtemplate->flag & UI_ID_ADD_NEW) && (idtemplate->flag && UI_ID_OPEN)) + extrastr= "OPEN NEW %x 32766 |ADD NEW %x 32767"; + else if(idtemplate->flag & UI_ID_ADD_NEW) + extrastr= "ADD NEW %x 32767"; + else if(idtemplate->flag & UI_ID_OPEN) + extrastr= "OPEN NEW %x 32766"; + else + extrastr= NULL; - layout->x= uiDefIDPoinButs(block, CTX_data_main(C), NULL, (ID*)idptr.data, ID_TXT, NULL, - layout->x, layout->y, idtemplate->func, - UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_DELETE); + duptemplate= MEM_dupallocN(idtemplate); + IDnames_to_pupstring(&str, NULL, extrastr, lb, idptr.data, &duptemplate->browse); + + but= uiDefButS(block, MENU, 0, str, layout->x, layout->y, EM_UNIT_X, EM_UNIT_Y, &duptemplate->browse, 0, 0, 0, 0, "Browse existing choices, or add new"); + uiButSetNFunc(but, header_id_cb, duptemplate, SET_INT_IN_POINTER(UI_ID_BROWSE)); + layout->x+= EM_UNIT_X; + + MEM_freeN(str); + } + + /* text button with name */ + if(idptr.data) { + char name[64]; + + text_idbutton(idptr.data, name); + but= uiDefButR(block, TEX, 0, name, layout->x, layout->y, EM_UNIT_X*6, EM_UNIT_Y, &idptr, "name", -1, 0, 0, -1, -1, NULL); + uiButSetNFunc(but, header_id_cb, MEM_dupallocN(idtemplate), SET_INT_IN_POINTER(UI_ID_RENAME)); + layout->x += EM_UNIT_X*6; + + /* delete button */ + if(idtemplate->flag & UI_ID_DELETE) { + but= uiDefIconButO(block, BUT, idtemplate->unlinkop, WM_OP_EXEC_REGION_WIN, ICON_X, layout->x, layout->y, EM_UNIT_X, EM_UNIT_Y, NULL); + layout->x += EM_UNIT_X; + } + } } void ui_template_free(uiTemplate *template) @@ -982,7 +1446,7 @@ uiLayout *uiLayoutBox(uiLayout *layout) box= MEM_callocN(sizeof(uiTemplateBx), "uiTemplateBx"); box->template.type= TEMPLATE_BOX; - box->sublayout= uiLayoutBegin(layout->dir, 0, 0, 0, 0); + box->sublayout= uiLayoutBegin(layout->dir, layout->type, 0, 0, 0, 0, layout->style); BLI_addtail(&layout->templates, box); return box->sublayout; @@ -1000,7 +1464,7 @@ void uiLayoutSplit(uiLayout *layout, int number, int lr) split->sublayout= MEM_callocN(sizeof(uiLayout*)*number, "uiTemplateSpltSub"); for(a=0; asublayout[a]= uiLayoutBegin(layout->dir, 0, 0, 0, 0); + split->sublayout[a]= uiLayoutBegin(layout->dir, layout->type, 0, 0, 0, 0, layout->style); BLI_addtail(&layout->templates, split); } @@ -1026,48 +1490,53 @@ uiLayout *uiLayoutSub(uiLayout *layout, int n) return NULL; } -void uiTemplateHeaderMenus(uiLayout *layout) +void uiTemplateHeader(uiLayout *layout) { uiTemplate *template; template= MEM_callocN(sizeof(uiTemplate), "uiTemplate"); - template->type= TEMPLATE_HEADER_MENUS; + template->type= TEMPLATE_HEADER; BLI_addtail(&layout->templates, template); } -void uiTemplateHeaderButtons(uiLayout *layout) -{ - uiTemplate *template; - - template= MEM_callocN(sizeof(uiTemplate), "uiTemplate"); - template->type= TEMPLATE_HEADER_BUTTONS; - - BLI_addtail(&layout->templates, template); -} - -void uiTemplateHeaderID(uiLayout *layout, PointerRNA *ptr, char *propname, int flag, uiIDPoinFunc func) +void uiTemplateHeaderID(uiLayout *layout, PointerRNA *ptr, char *propname, char *newop, char *openop, char *unlinkop) { uiTemplateHeadID *idtemplate; + PropertyRNA *prop; + + if(!ptr->data) + return; + + prop= RNA_struct_find_property(ptr, propname); + + if(!prop) { + printf("uiTemplateHeaderID: property not found: %s\n", propname); + return; + } idtemplate= MEM_callocN(sizeof(uiTemplateHeadID), "uiTemplateHeadID"); idtemplate->template.type= TEMPLATE_HEADER_ID; idtemplate->ptr= *ptr; - idtemplate->propname= propname; - idtemplate->flag= flag; - idtemplate->func= func; + idtemplate->prop= prop; + idtemplate->flag= UI_ID_BROWSE|UI_ID_RENAME; + + if(newop) { + idtemplate->flag |= UI_ID_ADD_NEW; + idtemplate->newop= newop; + } + if(openop) { + idtemplate->flag |= UI_ID_OPEN; + idtemplate->openop= openop; + } + if(unlinkop) { + idtemplate->flag |= UI_ID_DELETE; + idtemplate->unlinkop= unlinkop; + } BLI_addtail(&layout->templates, idtemplate); } -void uiTemplateSetColor(uiLayout *layout, int color) -{ - uiTemplate *template= layout->templates.last; - - if(template) - template->color= color; -} - void uiTemplateSlot(uiLayout *layout, int slot) { uiTemplate *template= layout->templates.last; @@ -1078,35 +1547,94 @@ void uiTemplateSlot(uiLayout *layout, int slot) /********************** Layout *******************/ +static void ui_layout_init_items(const bContext *C, uiLayout *layout) +{ + ARegion *ar= CTX_wm_region(C); + MenuType *mt; + uiTemplate *template; + uiItem *item; + uiItemMenu *menuitem; + uiItemRNA *rnaitem; + uiItemOp *opitem; + PropertyType type; + + for(template=layout->templates.first; template; template=template->next) { + for(item=template->items.first; item; item=item->next) { + /* initialize buttons names */ + if(item->type == ITEM_MENU) { + menuitem= (uiItemMenu*)item; + + if(menuitem->menuname) { + for(mt=ar->type->menutypes.first; mt; mt=mt->next) { + if(strcmp(menuitem->menuname, mt->idname) == 0) { + menuitem->arg= mt; + ui_item_name(item, mt->label); + break; + } + } + } + } + else if(item->type == ITEM_RNA_PROPERTY) { + rnaitem= (uiItemRNA*)item; + type= RNA_property_type(rnaitem->prop); + + ui_item_name(item, (char*)RNA_property_ui_name(rnaitem->prop)); + + if(ELEM4(type, PROP_INT, PROP_FLOAT, PROP_STRING, PROP_ENUM)) + ui_item_name_add_colon(item); + } + else if(item->type == ITEM_OPERATOR) { + opitem= (uiItemOp*)item; + ui_item_name(item, opitem->ot->name); + } + + ui_item_name(item, ""); + + /* initialize icons */ + if(layout->type == UI_LAYOUT_MENU) { + if(item->type == ITEM_RNA_PROPERTY) { + rnaitem= (uiItemRNA*)item; + type= RNA_property_type(rnaitem->prop); + + if(type == PROP_BOOLEAN) + item->icon= (RNA_property_boolean_get(&rnaitem->ptr, rnaitem->prop))? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT; + else if(type == PROP_ENUM && rnaitem->index == RNA_ENUM_VALUE) + item->icon= (RNA_property_enum_get(&rnaitem->ptr, rnaitem->prop) == rnaitem->value)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT; + } + + if(!item->icon) + item->icon= ICON_BLANK1; + } + } + } +} + static void ui_layout_templates(const bContext *C, uiBlock *block, uiLayout *layout) { + uiStyle *style= layout->style; uiTemplate *template; + ui_layout_init_items(C, layout); + if(layout->dir == UI_LAYOUT_HORIZONTAL) { for(template=layout->templates.first; template; template=template->next) { switch(template->type) { - case TEMPLATE_HEADER_MENUS: - ui_layout_header_menus(C, layout, block, template); + case TEMPLATE_HEADER: + ui_layout_header(C, layout, block, template); break; case TEMPLATE_HEADER_ID: ui_layout_header_id(C, layout, block, template); break; - case TEMPLATE_HEADER_BUTTONS: default: ui_layout_header_buttons(layout, block, template); break; } - } - layout->x += TEMPLATE_SPACE; + layout->x += style->templatespace; + } } else { for(template=layout->templates.first; template; template=template->next) { - if(template->color) { - // XXX oldcolor= uiBlockGetCol(block); - // XXX uiBlockSetCol(block, template->color); - } - switch(template->type) { case TEMPLATE_ROW: ui_layout_row(layout, block, template); @@ -1126,16 +1654,16 @@ static void ui_layout_templates(const bContext *C, uiBlock *block, uiLayout *lay break; } - // XXX if(template->color) - // XXX uiBlockSetCol(block, oldcolor); - - layout->y -= TEMPLATE_SPACE; + layout->y -= style->templatespace; } } } void ui_layout_end(const bContext *C, uiBlock *block, uiLayout *layout, int *x, int *y) { + if(layout->handlefunc) + uiBlockSetButmFunc(block, layout->handlefunc, layout->argv); + ui_layout_templates(C, block, layout); if(x) *x= layout->x; @@ -1154,15 +1682,17 @@ void ui_layout_free(uiLayout *layout) MEM_freeN(layout); } -uiLayout *uiLayoutBegin(int dir, int x, int y, int size, int em) +uiLayout *uiLayoutBegin(int dir, int type, int x, int y, int size, int em, uiStyle *style) { uiLayout *layout; layout= MEM_callocN(sizeof(uiLayout), "uiLayout"); layout->opcontext= WM_OP_INVOKE_REGION_WIN; layout->dir= dir; + layout->type= type; layout->x= x; layout->y= y; + layout->style= style; if(dir == UI_LAYOUT_HORIZONTAL) { layout->h= size; @@ -1181,6 +1711,12 @@ void uiLayoutContext(uiLayout *layout, int opcontext) layout->opcontext= opcontext; } +void uiLayoutFunc(uiLayout *layout, uiMenuHandleFunc handlefunc, void *argv) +{ + layout->handlefunc= handlefunc; + layout->argv= argv; +} + void uiLayoutEnd(const bContext *C, uiBlock *block, uiLayout *layout, int *x, int *y) { ui_layout_end(C, block, layout, x, y); @@ -1191,6 +1727,7 @@ void uiLayoutEnd(const bContext *C, uiBlock *block, uiLayout *layout, int *x, in void uiRegionPanelLayout(const bContext *C, ARegion *ar, int vertical, char *context) { + uiStyle *style= U.uistyles.first; uiBlock *block; PanelType *pt; Panel *panel; @@ -1200,7 +1737,7 @@ void uiRegionPanelLayout(const bContext *C, ARegion *ar, int vertical, char *con // XXX this only hides cruft /* clear */ - UI_GetThemeColor3fv(TH_HEADER, col); + UI_GetThemeColor3fv(TH_BACK, col); glClearColor(col[0], col[1], col[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); @@ -1229,7 +1766,7 @@ void uiRegionPanelLayout(const bContext *C, ARegion *ar, int vertical, char *con } panel->type= pt; - panel->layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, PNL_SAFETY, 0, w-2*PNL_SAFETY, em); + panel->layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, PNL_SAFETY, 0, w-2*PNL_SAFETY, em, style); pt->draw(C, panel); @@ -1259,6 +1796,7 @@ void uiRegionPanelLayout(const bContext *C, ARegion *ar, int vertical, char *con void uiRegionHeaderLayout(const bContext *C, ARegion *ar) { + uiStyle *style= U.uistyles.first; uiBlock *block; uiLayout *layout; HeaderType *ht; @@ -1286,7 +1824,7 @@ void uiRegionHeaderLayout(const bContext *C, ARegion *ar) /* draw all headers types */ for(ht= ar->type->headertypes.first; ht; ht= ht->next) { block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS); - layout= uiLayoutBegin(UI_LAYOUT_HORIZONTAL, xco, yco, 24, 1); + layout= uiLayoutBegin(UI_LAYOUT_HORIZONTAL, UI_LAYOUT_HEADER, xco, yco, 24, 1, style); if(ht->draw) { header.type= ht; diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c index 7d1f8d59552..730f22e3390 100644 --- a/source/blender/editors/interface/interface_panel.c +++ b/source/blender/editors/interface/interface_panel.c @@ -575,7 +575,6 @@ void ui_draw_anti_x(float x1, float y1, float x2, float y2) /* x 'icon' for panel header */ static void ui_draw_x_icon(float x, float y) { - UI_ThemeColor(TH_TEXT_HI); ui_draw_anti_x(x, y, x+9.375, y+9.375); @@ -634,7 +633,7 @@ static void ui_draw_panel_dragwidget(rctf *rect) } -static void ui_draw_panel_header_style(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect) +static void ui_draw_aligned_panel_header(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect) { Panel *panel= block->panel; Panel *pa; @@ -657,7 +656,7 @@ static void ui_draw_panel_header_style(ARegion *ar, uiStyle *style, uiBlock *blo /* active tab */ /* draw text label */ - UI_ThemeColor(TH_TEXT); + UI_ThemeColor(TH_TITLE); hrect= *rect; hrect.xmin= rect->xmin+pnl_icons; @@ -674,7 +673,7 @@ static void ui_draw_panel_header_style(ARegion *ar, uiStyle *style, uiBlock *blo if((pa->runtime_flag & PNL_ACTIVE) && (pa==panel || pa->paneltab==panel)) { float col[3]; - UI_GetThemeColor3fv(TH_TEXT, col); + UI_GetThemeColor3fv(TH_TITLE, col); /* active tab */ if(pa==panel) @@ -705,7 +704,8 @@ static void rectf_scale(rctf *rect, float scale) rect->ymax= centy + sizey; } -void ui_draw_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect) +/* panel integrated in buttonswindow, tool/property lists etc */ +void ui_draw_aligned_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect) { Panel *panel= block->panel, *prev; rcti headrect; @@ -728,7 +728,7 @@ void ui_draw_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect) if(prev) { float minx= rect->xmin+10.0f/block->aspect; - float maxx= rect->xmax-10.0f/block->aspect; + float maxx= rect->xmax-5.0f/block->aspect; float y= headrect.ymax; glEnable(GL_BLEND); @@ -741,7 +741,7 @@ void ui_draw_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect) /* title */ if(!(panel->flag & PNL_CLOSEDX)) { - ui_draw_panel_header_style(ar, style, block, &headrect); + ui_draw_aligned_panel_header(ar, style, block, &headrect); /* itemrect smaller */ itemrect.xmax= headrect.xmax - 10.0f/block->aspect; @@ -776,7 +776,7 @@ void ui_draw_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect) if(panel->control & UI_PNL_SOLID) uiSetRoundBox(15); else uiSetRoundBox(3); - UI_ThemeColorShade(TH_HEADER, -120); + UI_ThemeColorShade(TH_BACK, -120); uiRoundRect(rect->xmin, rect->ymin, rect->xmax, headrect.ymax+1, 8); } if(panel->flag & PNL_OVERLAP) { @@ -796,6 +796,7 @@ void ui_draw_panel(ARegion *ar, uiStyle *style, uiBlock *block, rcti *rect) ofsx= 6; if(panel->control & UI_PNL_CLOSE) { + UI_ThemeColor(TH_TEXT); ui_draw_x_icon(rect->xmin+2+ofsx, rect->ymax+2); ofsx= 22; } diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c index 181513b58bc..59725cc4954 100644 --- a/source/blender/editors/interface/interface_regions.c +++ b/source/blender/editors/interface/interface_regions.c @@ -1643,30 +1643,14 @@ static uiBlock *ui_block_func_MENU_ITEM(bContext *C, uiPopupBlockHandle *handle, #define MENU_ITEM_LEVEL_OPNAME_ENUM 31 #define MENU_ITEM_LEVEL_RNA_ENUM 32 -struct uiMenuItem { - struct uiMenuItem *next, *prev; - - int type; +struct uiPopupMenu { + uiLayout *layout; int icon; char name[MAX_MENU_STR]; - - char *opname; /* static string */ - char *propname; /* static string */ - - int retval, enumval, boolval, intval; - float fltval; - char *strval; - int opcontext; - uiMenuHandleFunc eventfunc; - void *argv; - uiMenuCreateFunc newlevel; - PointerRNA rnapoin; - - ListBase items; }; typedef struct uiMenuInfo { - uiMenuItem *head; + uiPopupMenu *pup; int mx, my, popup, slideout; int startx, starty; } uiMenuInfo; @@ -1707,201 +1691,49 @@ typedef struct MenuItemLevel { PointerRNA rnapoin; } MenuItemLevel; -/* make a menu level from enum properties */ -static void menu_item_enum_opname_menu(bContext *C, uiMenuItem *head, void *arg) -{ - MenuItemLevel *lvl= (MenuItemLevel*)(((uiBut*)arg)->func_argN); - - head->opcontext= lvl->opcontext; - uiMenuItemsEnumO(head, lvl->opname, lvl->propname); -} - -static void menu_item_enum_rna_menu(bContext *C, uiMenuItem *head, void *arg) -{ - MenuItemLevel *lvl= (MenuItemLevel*)(((uiBut*)arg)->func_argN); - - head->opcontext= lvl->opcontext; - uiMenuItemsEnumR(head, &lvl->rnapoin, lvl->propname); -} - static uiBlock *ui_block_func_MENU_ITEM(bContext *C, uiPopupBlockHandle *handle, void *arg_info) { uiBlock *block; uiBut *but; uiMenuInfo *info= arg_info; - uiMenuItem *head, *item; - MenuItemLevel *lvl; + uiPopupMenu *pup; ScrArea *sa; ARegion *ar; static int counter= 0; - int width, height, icon; - int startx, starty, x1, y1; char str[16]; - head= info->head; - height= 0; + pup= info->pup; /* block stuff first, need to know the font */ sprintf(str, "tb %d", counter++); block= uiBeginBlock(C, handle->region, str, UI_EMBOSSP); - uiBlockSetButmFunc(block, head->eventfunc, head->argv); block->direction= UI_DOWN; - width= 50; // fixed with, uiMenuPopupBoundsBlock will compute actual width - - for(item= head->items.first; item; item= item->next) { - if(0) height+= PUP_LABELH; // XXX sepr line - else height+= MENU_BUTTON_HEIGHT; - } - - startx= 0; - starty= 0; - /* here we go! */ - if(head->name[0]) { + if(pup->name[0]) { char titlestr[256]; - if(head->icon) { - width+= 20; - sprintf(titlestr, " %s", head->name); - uiDefIconTextBut(block, LABEL, 0, head->icon, titlestr, startx, (short)(starty+height), width, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, ""); + if(pup->icon) { + sprintf(titlestr, " %s", pup->name); + uiDefIconTextBut(block, LABEL, 0, pup->icon, titlestr, 0, 0, 200, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, ""); } else { - but= uiDefBut(block, LABEL, 0, head->name, startx, (short)(starty+height), width, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, ""); + but= uiDefBut(block, LABEL, 0, pup->name, 0, 0, 200, MENU_BUTTON_HEIGHT, NULL, 0.0, 0.0, 0, 0, ""); but->flag= UI_TEXT_LEFT; } //uiDefBut(block, SEPR, 0, "", startx, (short)(starty+height)-MENU_SEPR_HEIGHT, width, MENU_SEPR_HEIGHT, NULL, 0.0, 0.0, 0, 0, ""); } - x1= startx; - y1= starty + height - MENU_BUTTON_HEIGHT; // - MENU_SEPR_HEIGHT; - - for(item= head->items.first; item; item= item->next) { - - if(item->type==MENU_ITEM_LEVEL) { - uiDefIconTextMenuBut(block, item->newlevel, NULL, ICON_RIGHTARROW_THIN, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL); - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_LEVEL_OPNAME_ENUM) { - but= uiDefIconTextMenuBut(block, menu_item_enum_opname_menu, NULL, ICON_RIGHTARROW_THIN, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL); - - /* XXX warning, abuse of func_arg! */ - lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel"); - lvl->opname= item->opname; - lvl->propname= item->propname; - lvl->opcontext= item->opcontext; - - but->poin= (char*)but; - but->func_argN= lvl; - - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_LEVEL_RNA_ENUM) { - but= uiDefIconTextMenuBut(block, menu_item_enum_rna_menu, NULL, ICON_RIGHTARROW_THIN, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL); - - /* XXX warning, abuse of func_arg! */ - lvl= MEM_callocN(sizeof(MenuItemLevel), "MenuItemLevel"); - lvl->rnapoin= item->rnapoin; - lvl->propname= item->propname; - lvl->opcontext= item->opcontext; - - but->poin= (char*)but; - but->func_argN= lvl; - - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_OPNAME_BOOL) { - but= uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, ""); - RNA_boolean_set(uiButGetOperatorPtrRNA(but), item->propname, item->boolval); - - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_OPNAME_ENUM) { - const char *name; - char bname[64]; - - /* If no name is given, use the enum name */ - if (item->name[0] == '\0') - name= ui_menu_enumpropname(item->opname, item->propname, item->enumval); - else - name= item->name; - - BLI_strncpy(bname, name, sizeof(bname)); - - but= uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, bname, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, ""); - RNA_enum_set(uiButGetOperatorPtrRNA(but), item->propname, item->enumval); - - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_OPNAME_INT) { - but= uiDefIconTextButO(block, BUTM, item->opname, head->opcontext, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, ""); - RNA_int_set(uiButGetOperatorPtrRNA(but), item->propname, item->intval); - - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_OPNAME_FLOAT) { - but= uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, ""); - RNA_float_set(uiButGetOperatorPtrRNA(but), item->propname, item->fltval); - - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_OPNAME_STRING) { - but= uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, ""); - RNA_string_set(uiButGetOperatorPtrRNA(but), item->propname, item->strval); - - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_OPNAME) { - uiDefIconTextButO(block, BUTM, item->opname, item->opcontext, item->icon, NULL, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL); - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_RNA_BOOL) { - PropertyRNA *prop= RNA_struct_find_property(&item->rnapoin, item->propname); - - if(prop && RNA_property_type(prop) == PROP_BOOLEAN) { - icon= (RNA_property_boolean_get(&item->rnapoin, prop))? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT; - uiDefIconTextButR(block, TOG, 0, icon, NULL, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, &item->rnapoin, item->propname, 0, 0, 0, 0, 0, NULL); - } - else { - uiBlockSetButLock(block, 1, ""); - uiDefIconTextBut(block, BUT, 0, ICON_BLANK1, item->propname, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL, 0.0, 0.0, 0, 0, ""); - uiBlockClearButLock(block); - } - - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type==MENU_ITEM_RNA_ENUM) { - PropertyRNA *prop= RNA_struct_find_property(&item->rnapoin, item->propname); - - if(prop && RNA_property_type(prop) == PROP_ENUM) { - icon= (RNA_property_enum_get(&item->rnapoin, prop) == item->enumval)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT; - uiDefIconTextButR(block, ROW, 0, icon, NULL, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, &item->rnapoin, item->propname, 0, 0, item->enumval, 0, 0, NULL); - } - else { - uiBlockSetButLock(block, 1, ""); - uiDefIconTextBut(block, BUT, 0, ICON_BLANK1, item->propname, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, NULL, 0.0, 0.0, 0, 0, ""); - uiBlockClearButLock(block); - } - - y1 -= MENU_BUTTON_HEIGHT; - } - else if(item->type == MENU_ITEM_ITEM) { - uiDefIconTextButF(block, BUTM, B_NOP, item->icon, item->name, x1, y1, width+16, MENU_BUTTON_HEIGHT-1, &handle->retvalue, 0.0, 0.0, 0, item->retval, ""); - y1 -= MENU_BUTTON_HEIGHT; - } - else { - uiDefBut(block, SEPR, 0, "", x1, y1, width+16, MENU_SEPR_HEIGHT-1, NULL, 0.0, 0.0, 0, 0, ""); - y1 -= MENU_SEPR_HEIGHT; - } - } + block->handle= handle; + uiLayoutEnd(C, block, pup->layout, NULL, NULL); if(info->popup) { uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_NUMSELECT|UI_BLOCK_RET_1); uiBlockSetDirection(block, UI_DOWN); /* here we set an offset for the mouse position */ - uiMenuPopupBoundsBlock(block, 1, 0, -height+MENU_BUTTON_HEIGHT/2); + uiMenuPopupBoundsBlock(block, 1, 0, MENU_BUTTON_HEIGHT/2); } else { /* for a header menu we set the direction automatic */ @@ -1931,263 +1763,54 @@ static uiBlock *ui_block_func_MENU_ITEM(bContext *C, uiPopupBlockHandle *handle, uiPopupBlockHandle *ui_popup_menu_create(bContext *C, ARegion *butregion, uiBut *but, uiMenuCreateFunc menu_func, void *arg) { + uiStyle *style= U.uistyles.first; uiPopupBlockHandle *handle; - uiMenuItem *head; + uiPopupMenu *pup; uiMenuInfo info; - head= MEM_callocN(sizeof(uiMenuItem), "menu dummy"); - head->opcontext= WM_OP_INVOKE_REGION_WIN; + pup= MEM_callocN(sizeof(uiPopupMenu), "menu dummy"); + pup->layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, UI_LAYOUT_MENU, 0, 0, 200, 0, style); + uiLayoutContext(pup->layout, WM_OP_INVOKE_REGION_WIN); + uiLayoutColumn(pup->layout); - menu_func(C, head, arg); + menu_func(C, pup->layout, arg); memset(&info, 0, sizeof(info)); - info.head= head; + info.pup= pup; info.slideout= (but && (but->block->flag & UI_BLOCK_LOOP)); handle= ui_popup_block_create(C, butregion, but, NULL, ui_block_func_MENU_ITEM, &info); - BLI_freelistN(&head->items); - MEM_freeN(head); + MEM_freeN(pup); return handle; } /*************************** Menu Creating API **************************/ -/* internal add func */ -static uiMenuItem *ui_menu_add_item(uiMenuItem *head, const char *name, int icon, int argval) -{ - uiMenuItem *item= MEM_callocN(sizeof(uiMenuItem), "menu item"); - - BLI_strncpy(item->name, name, MAX_MENU_STR); - if(icon) - item->icon= icon; - else - item->icon= ICON_BLANK1; - item->retval= argval; - - item->opcontext= head->opcontext; - - BLI_addtail(&head->items, item); - - return item; -} - -/* set callback for regular items */ -void uiMenuFunc(uiMenuItem *head, void (*eventfunc)(bContext *, void *, int), void *argv) -{ - head->eventfunc= eventfunc; - head->argv= argv; -} - -/* optionally set different context for all items in one level */ -void uiMenuContext(uiMenuItem *head, int opcontext) -{ - head->opcontext= opcontext; -} - - -/* regular item, with retval */ -void uiMenuItemVal(uiMenuItem *head, const char *name, int icon, int argval) -{ - uiMenuItem *item= ui_menu_add_item(head, name, icon, argval); - - item->type = MENU_ITEM_ITEM; -} - -/* regular operator item */ -void uiMenuItemO(uiMenuItem *head, int icon, char *opname) -{ - uiMenuItem *item= ui_menu_add_item(head, "", icon, 0); - - item->opname= opname; // static! - item->type = MENU_ITEM_OPNAME; -} - -/* single operator item with property */ -void uiMenuItemEnumO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value) -{ - uiMenuItem *item= ui_menu_add_item(head, name, icon, 0); - - item->opname= opname; // static! - item->propname= propname; // static! - item->enumval= value; - item->type = MENU_ITEM_OPNAME_ENUM; -} - -/* single operator item with property */ -void uiMenuItemIntO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value) -{ - uiMenuItem *item= ui_menu_add_item(head, name, icon, 0); - - item->opname= opname; // static! - item->propname= propname; // static! - item->intval= value; - item->type = MENU_ITEM_OPNAME_INT; -} - -/* single operator item with property */ -void uiMenuItemFloatO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, float value) -{ - uiMenuItem *item= ui_menu_add_item(head, name, icon, 0); - - item->opname= opname; // static! - item->propname= propname; // static! - item->fltval= value; - item->type = MENU_ITEM_OPNAME_FLOAT; -} - -/* single operator item with property */ -void uiMenuItemBooleanO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, int value) -{ - uiMenuItem *item= ui_menu_add_item(head, name, icon, 0); - - item->opname= opname; // static! - item->propname= propname; // static! - item->boolval= value; - item->type = MENU_ITEM_OPNAME_BOOL; -} - -/* single operator item with property */ -void uiMenuItemStringO(uiMenuItem *head, const char *name, int icon, char *opname, char *propname, char *value) -{ - uiMenuItem *item= ui_menu_add_item(head, name, icon, 0); - - item->opname= opname; // static! - item->propname= propname; // static! - item->strval= value; - item->type = MENU_ITEM_OPNAME_STRING; -} - -/* add all operator items with property */ -void uiMenuItemsEnumO(uiMenuItem *head, char *opname, char *propname) -{ - wmOperatorType *ot= WM_operatortype_find(opname); - PointerRNA ptr; - PropertyRNA *prop; - - if(!ot || !ot->srna) - return; - - RNA_pointer_create(NULL, ot->srna, NULL, &ptr); - prop= RNA_struct_find_property(&ptr, propname); - - if(prop && RNA_property_type(prop) == PROP_ENUM) { - const EnumPropertyItem *item; - int totitem, i; - - RNA_property_enum_items(&ptr, prop, &item, &totitem); - - for (i=0; ipropname= propname; // static! - item->rnapoin= *ptr; - item->type = MENU_ITEM_RNA_BOOL; -} - -void uiMenuItemEnumR(uiMenuItem *head, PointerRNA *ptr, char *propname, int value) -{ - uiMenuItem *item= ui_menu_add_item(head, "", 0, 0); - - item->propname= propname; // static! - item->rnapoin= *ptr; - item->enumval= value; - item->type = MENU_ITEM_RNA_ENUM; -} - -/* add all rna items with property */ -void uiMenuItemsEnumR(uiMenuItem *head, PointerRNA *ptr, char *propname) -{ - PropertyRNA *prop; - - prop= RNA_struct_find_property(ptr, propname); - - if(prop && RNA_property_type(prop) == PROP_ENUM) { - const EnumPropertyItem *item; - int totitem, i; - - RNA_property_enum_items(ptr, prop, &item, &totitem); - - for (i=0; itype = MENU_ITEM_LEVEL; - item->newlevel= newlevel; -} - -/* make a new level from enum properties */ -void uiMenuLevelEnumO(uiMenuItem *head, char *opname, char *propname) -{ - uiMenuItem *item= ui_menu_add_item(head, "", 0, 0); - wmOperatorType *ot; - - item->type = MENU_ITEM_LEVEL_OPNAME_ENUM; - ot= WM_operatortype_find(opname); - if(ot) - BLI_strncpy(item->name, ot->name, MAX_MENU_STR); - - item->opname= opname; // static! - item->propname= propname; // static! -} - -/* make a new level from enum properties */ -void uiMenuLevelEnumR(uiMenuItem *head, PointerRNA *ptr, char *propname) -{ - uiMenuItem *item= ui_menu_add_item(head, "", 0, 0); - PropertyRNA *prop; - - item->type = MENU_ITEM_LEVEL_RNA_ENUM; - prop= RNA_struct_find_property(ptr, propname); - if(prop) - BLI_strncpy(item->name, RNA_property_ui_name(prop), MAX_MENU_STR); - - item->rnapoin= *ptr; - item->propname= propname; // static! -} - -/* separator */ -void uiMenuSeparator(uiMenuItem *head) -{ - uiMenuItem *item= ui_menu_add_item(head, "", 0, 0); - - item->type = MENU_ITEM_SEPARATOR; -} /*************************** Popup Menu API **************************/ /* only return handler, and set optional title */ -uiMenuItem *uiPupMenuBegin(const char *title, int icon) +uiPopupMenu *uiPupMenuBegin(const char *title, int icon) { - uiMenuItem *item= MEM_callocN(sizeof(uiMenuItem), "menu start"); + uiStyle *style= U.uistyles.first; + uiPopupMenu *pup= MEM_callocN(sizeof(uiPopupMenu), "menu start"); - item->type = MENU_ITEM_TITLE; - item->opcontext= WM_OP_EXEC_REGION_WIN; - item->icon= icon; + pup->icon= icon; + pup->layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, UI_LAYOUT_MENU, 0, 0, 200, 0, style); + uiLayoutContext(pup->layout, WM_OP_EXEC_REGION_WIN); + uiLayoutColumn(pup->layout); /* NULL is no title */ if(title) - BLI_strncpy(item->name, title, MAX_MENU_STR); + BLI_strncpy(pup->name, title, MAX_MENU_STR); - return item; + return pup; } /* set the whole structure to work */ -void uiPupMenuEnd(bContext *C, uiMenuItem *head) +void uiPupMenuEnd(bContext *C, uiPopupMenu *pup) { wmWindow *window= CTX_wm_window(C); uiMenuInfo info; @@ -2197,7 +1820,7 @@ void uiPupMenuEnd(bContext *C, uiMenuItem *head) info.popup= 1; info.mx= window->eventstate->x; info.my= window->eventstate->y; - info.head= head; + info.pup= pup; menu= ui_popup_block_create(C, NULL, NULL, NULL, ui_block_func_MENU_ITEM, &info); menu->popup= 1; @@ -2205,8 +1828,12 @@ void uiPupMenuEnd(bContext *C, uiMenuItem *head) UI_add_popup_handlers(C, &window->handlers, menu); WM_event_add_mousemove(C); - BLI_freelistN(&head->items); - MEM_freeN(head); + MEM_freeN(pup); +} + +uiLayout *uiPupMenuLayout(uiPopupMenu *pup) +{ + return pup->layout; } /* ************** standard pupmenus *************** */ diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c index 99702097329..d0361174e70 100644 --- a/source/blender/editors/interface/interface_style.c +++ b/source/blender/editors/interface/interface_style.c @@ -115,6 +115,12 @@ static uiStyle *ui_style_new(ListBase *styles, const char *name) style->widget.uifont_id= UIFONT_DEFAULT; style->widget.points= 11; style->widget.shadowalpha= 0.25f; + + style->columnspace= 5; + style->templatespace= 5; + style->boxspace= 5; + style->buttonspacex= 5; + style->buttonspacey= 2; return style; } @@ -229,12 +235,16 @@ void uiStyleInit(void) if(font->blf_id == -1) font->blf_id= BLF_load_mem("default", (unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size); } - + if (font->blf_id == -1) printf("uiStyleInit error, no fonts available\n"); else { BLF_set(font->blf_id); - BLF_size(11, U.dpi); /* ? just for speed to initialize? */ + /* ? just for speed to initialize? + * Yes, this build the glyph cache and create + * the texture. + */ + BLF_size(11, U.dpi); BLF_size(12, U.dpi); BLF_size(14, U.dpi); } @@ -245,14 +255,6 @@ void uiStyleInit(void) } } - -void uiStyleExit(void) -{ - BLI_freelistN(&U.uifonts); - BLI_freelistN(&U.uistyles); - -} - void uiStyleFontSet(uiFontStyle *fs) { uiFont *font= uifont_to_blfont(fs->uifont_id); diff --git a/source/blender/editors/interface/interface_utils.c b/source/blender/editors/interface/interface_utils.c index 5ef1e68bd59..dc346be7af2 100644 --- a/source/blender/editors/interface/interface_utils.c +++ b/source/blender/editors/interface/interface_utils.c @@ -55,6 +55,8 @@ #include "WM_api.h" #include "WM_types.h" +#include "interface_intern.h" + #define DEF_BUT_WIDTH 150 #define DEF_ICON_BUT_WIDTH 20 #define DEF_BUT_HEIGHT 20 @@ -88,7 +90,7 @@ int UI_GetIconRNA(PointerRNA *ptr) else if(rnatype == &RNA_Curve) return ICON_CURVE_DATA; else if(rnatype == &RNA_MetaBall) - return ICON_MBALL_DATA; + return ICON_META_DATA; else if(rnatype == &RNA_MetaElement) return ICON_OUTLINER_DATA_META; else if(rnatype == &RNA_Lattice) @@ -140,7 +142,7 @@ int UI_GetIconRNA(PointerRNA *ptr) else if(rnatype == &RNA_Brush) return ICON_BRUSH_DATA; else if(rnatype == &RNA_VectorFont) - return ICON_FONT; + return ICON_FONT_DATA; else if(rnatype == &RNA_Library) return ICON_LIBRARY_DATA_DIRECT; else if(rnatype == &RNA_Action) @@ -202,7 +204,7 @@ int UI_GetIconRNA(PointerRNA *ptr) else if(rnatype == &RNA_BooleanModifier) return ICON_MOD_BOOLEAN; else if(rnatype == &RNA_ParticleInstanceModifier) - return ICON_MOD_PARTICLEINSTANCE; + return ICON_MOD_PARTICLES; else if(rnatype == &RNA_ParticleSystemModifier) return ICON_MOD_PARTICLES; else if(rnatype == &RNA_EdgeSplitModifier) @@ -213,6 +215,30 @@ int UI_GetIconRNA(PointerRNA *ptr) return ICON_MOD_UVPROJECT; else if(rnatype == &RNA_DisplaceModifier) return ICON_MOD_DISPLACE; + else if(rnatype == &RNA_ShrinkwrapModifier) + return ICON_MOD_SHRINKWRAP; + else if(rnatype == &RNA_CastModifier) + return ICON_MOD_CAST; + else if(rnatype == &RNA_MeshDeformModifier) + return ICON_MOD_MESHDEFORM; + else if(rnatype == &RNA_BevelModifier) + return ICON_MOD_BEVEL; + else if(rnatype == &RNA_SmoothModifier) + return ICON_MOD_SMOOTH; + else if(rnatype == &RNA_SimpleDeformModifier) + return ICON_MOD_SIMPLEDEFORM; + else if(rnatype == &RNA_MaskModifier) + return ICON_MOD_MASK; + else if(rnatype == &RNA_ClothModifier) + return ICON_MOD_CLOTH; + else if(rnatype == &RNA_ExplodeModifier) + return ICON_MOD_EXPLODE; + else if(rnatype == &RNA_CollisionModifier) + return ICON_MOD_PHYSICS; + else if(rnatype == &RNA_FluidSimulationModifier) + return ICON_MOD_FLUIDSIM; + else if(rnatype == &RNA_MultiresModifier) + return ICON_MOD_MULTIRES; else return ICON_DOT; } @@ -291,13 +317,14 @@ uiBut *uiDefAutoButR(uiBlock *block, PointerRNA *ptr, PropertyRNA *prop, int ind int uiDefAutoButsRNA(const bContext *C, uiBlock *block, PointerRNA *ptr) { + uiStyle *style= U.uistyles.first; CollectionPropertyIterator iter; PropertyRNA *iterprop, *prop; uiLayout *layout; char *name; int x= 0, y= 0; - layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, x, y, DEF_BUT_WIDTH*2, 20); + layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, x, y, DEF_BUT_WIDTH*2, 20, style); uiLayoutColumn(layout); uiItemL(layout, (char*)RNA_struct_ui_name(ptr->type), 0); @@ -317,7 +344,7 @@ int uiDefAutoButsRNA(const bContext *C, uiBlock *block, PointerRNA *ptr) uiLayoutColumn(uiLayoutSub(layout, 0)); uiItemL(uiLayoutSub(layout, 0), name, 0); uiLayoutColumn(uiLayoutSub(layout, 1)); - uiItemFullR(uiLayoutSub(layout, 1), "", 0, ptr, prop, -1, 0); + uiItemFullR(uiLayoutSub(layout, 1), "", 0, ptr, prop, -1, 0, 0); } RNA_property_collection_end(&iter); @@ -326,6 +353,46 @@ int uiDefAutoButsRNA(const bContext *C, uiBlock *block, PointerRNA *ptr) return -y; } +/* temp call, single collumn, test for toolbar only */ +int uiDefAutoButsRNA_single(const bContext *C, uiBlock *block, PointerRNA *ptr) +{ + uiStyle *style= U.uistyles.first; + CollectionPropertyIterator iter; + PropertyRNA *iterprop, *prop; + uiLayout *layout; + char *name; + int x= 0, y= 0; + + layout= uiLayoutBegin(UI_LAYOUT_VERTICAL, UI_LAYOUT_PANEL, x, y, block->panel->sizex, 20, style); + + uiLayoutColumn(layout); + uiItemL(layout, (char*)RNA_struct_ui_name(ptr->type), 0); + + iterprop= RNA_struct_iterator_property(ptr->type); + RNA_property_collection_begin(ptr, iterprop, &iter); + + for(; iter.valid; RNA_property_collection_next(&iter)) { + prop= iter.ptr.data; + + if(strcmp(RNA_property_identifier(prop), "rna_type") == 0) + continue; + + uiLayoutSplit(layout, 1, 0); + uiLayoutColumn(uiLayoutSub(layout, 0)); + + name= (char*)RNA_property_ui_name(prop); + uiItemL(uiLayoutSub(layout, 0), name, 0); + + uiItemFullR(uiLayoutSub(layout, 0), "", 0, ptr, prop, -1, 0, 0); + } + + RNA_property_collection_end(&iter); + uiLayoutEnd(C, block, layout, &x, &y); + + return -y; +} + + /***************************** ID Utilities *******************************/ typedef struct uiIDPoinParams { @@ -506,18 +573,7 @@ int uiDefIDPoinButs(uiBlock *block, Main *bmain, ID *parid, ID *id, int id_code, uiBlockSetButLock(block, id->lib!=0, "Can't edit external libdata"); /* name button */ - if(GS(id->name)==ID_SCE) - strcpy(str1, "SCE:"); - else if(GS(id->name)==ID_SCE) - strcpy(str1, "SCR:"); - else if(GS(id->name)==ID_MA && ((Material*)id)->use_nodes) - strcpy(str1, "NT:"); - else { - str1[0]= id->name[0]; - str1[1]= id->name[1]; - str1[2]= ':'; - str1[3]= 0; - } + text_idbutton(id, str1); if(GS(id->name)==ID_IP) len= 110; else if((y) && (GS(id->name)==ID_AC)) len= 100; // comes from button panel (poselib) diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 3025b1bfc29..8fc1d6aee7f 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -85,26 +85,14 @@ typedef struct uiWidgetTrias { } uiWidgetTrias; typedef struct uiWidgetStateColors { - float inner_anim[4]; - float inner_anim_sel[4]; - float inner_key[4]; - float inner_key_sel[4]; - float inner_driven[4]; - float inner_driven_sel[4]; + char inner_anim[4]; + char inner_anim_sel[4]; + char inner_key[4]; + char inner_key_sel[4]; + char inner_driven[4]; + char inner_driven_sel[4]; } uiWidgetStateColors; -typedef struct uiWidgetColors { - float outline[3]; - float inner[4]; - float inner_sel[4]; - float item[3]; - float text[3]; - float text_sel[3]; - short shaded; - float shadetop, shadedown; - -} uiWidgetColors; - typedef struct uiWidgetBase { int totvert, halfwayvert; @@ -133,7 +121,7 @@ typedef struct uiWidgetType { void (*state)(struct uiWidgetType *, int state); void (*draw)(uiWidgetColors *, rcti *, int state, int roundboxalign); void (*custom)(uiBut *, uiWidgetColors *, rcti *, int state, int roundboxalign); - void (*text)(uiFontStyle *, uiBut *, rcti *, float *col); + void (*text)(uiFontStyle *, uiWidgetColors *, uiBut *, rcti *); } uiWidgetType; @@ -518,30 +506,34 @@ static void widget_check_trias(uiWidgetTrias *tria, rcti *rect) /* prepares shade colors */ -static void shadecolors4(float *coltop, float *coldown, float *color, float shadetop, float shadedown) +static void shadecolors4(char *coltop, char *coldown, char *color, short shadetop, short shadedown) { - coltop[0]= CLAMPIS(color[0]+shadetop, 0.0f, 1.0f); - coltop[1]= CLAMPIS(color[1]+shadetop, 0.0f, 1.0f); - coltop[2]= CLAMPIS(color[2]+shadetop, 0.0f, 1.0f); + coltop[0]= CLAMPIS(color[0]+shadetop, 0, 255); + coltop[1]= CLAMPIS(color[1]+shadetop, 0, 255); + coltop[2]= CLAMPIS(color[2]+shadetop, 0, 255); coltop[3]= color[3]; - coldown[0]= CLAMPIS(color[0]+shadedown, 0.0f, 1.0f); - coldown[1]= CLAMPIS(color[1]+shadedown, 0.0f, 1.0f); - coldown[2]= CLAMPIS(color[2]+shadedown, 0.0f, 1.0f); + coldown[0]= CLAMPIS(color[0]+shadedown, 0, 255); + coldown[1]= CLAMPIS(color[1]+shadedown, 0, 255); + coldown[2]= CLAMPIS(color[2]+shadedown, 0, 255); coldown[3]= color[3]; } -static void round_box_shade_col4(float *col1, float *col2, float fac) +static void round_box_shade_col4(char *col1, char *col2, float fac) { - float col[4]; + int faci, facm; + char col[4]; - col[0]= (fac*col1[0] + (1.0-fac)*col2[0]); - col[1]= (fac*col1[1] + (1.0-fac)*col2[1]); - col[2]= (fac*col1[2] + (1.0-fac)*col2[2]); - col[3]= (fac*col1[3] + (1.0-fac)*col2[3]); + faci= floor(255.1f*fac); + facm= 255-faci; - glColor4fv(col); + col[0]= (faci*col1[0] + facm*col2[0])>>8; + col[1]= (faci*col1[1] + facm*col2[1])>>8; + col[2]= (faci*col1[2] + facm*col2[2])>>8; + col[3]= (faci*col1[3] + facm*col2[3])>>8; + + glColor4ubv(col); } static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol) @@ -554,14 +546,14 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol) if(wtb->inner) { if(wcol->shaded==0) { /* filled center, solid */ - glColor4fv(wcol->inner); + glColor4ubv(wcol->inner); glBegin(GL_POLYGON); for(a=0; atotvert; a++) glVertex2fv(wtb->inner_v[a]); glEnd(); } else { - float col1[4], col2[4]; + char col1[4], col2[4]; shadecolors4(col1, col2, wcol->inner, wcol->shadetop, wcol->shadedown); @@ -582,7 +574,7 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol) glTranslatef(1.0*jit[j][0], 1.0*jit[j][1], 0.0f); /* outline */ - glColor4f(wcol->outline[0], wcol->outline[1], wcol->outline[0], 0.125); + glColor4ub(wcol->outline[0], wcol->outline[1], wcol->outline[2], 32); glBegin(GL_QUAD_STRIP); for(a=0; atotvert; a++) { glVertex2fv(wtb->outer_v[a]); @@ -614,11 +606,11 @@ static void widgetbase_draw(uiWidgetBase *wtb, uiWidgetColors *wcol) glTranslatef(1.0*jit[j][0], 1.0*jit[j][1], 0.0f); if(wtb->tria1.tot) { - glColor4f(wcol->item[0], wcol->item[1], wcol->item[2], 0.125); + glColor4ub(wcol->item[0], wcol->item[1], wcol->item[2], 32); widget_trias_draw(&wtb->tria1); } if(wtb->tria2.tot) { - glColor4f(wcol->item[0], wcol->item[1], wcol->item[2], 0.125); + glColor4ub(wcol->item[0], wcol->item[1], wcol->item[2], 32); widget_trias_draw(&wtb->tria2); } @@ -641,7 +633,7 @@ static void widget_draw_icon(uiBut *but, BIFIconID icon, int blend, rcti *rect) float xs=0, ys=0, aspect, height; /* this icon doesn't need draw... */ - if(icon==ICON_BLANK1) return; + if(icon==ICON_BLANK1 && (but->flag & UI_ICON_SUBMENU)==0) return; /* we need aspect from block, for menus... these buttons are scaled in uiPositionBlock() */ aspect= but->block->aspect; @@ -658,45 +650,49 @@ static void widget_draw_icon(uiBut *but, BIFIconID icon, int blend, rcti *rect) else height= ICON_HEIGHT; - if(but->flag & UI_ICON_LEFT) { - if (but->type==BUT_TOGDUAL) { - if (but->drawstr[0]) { - xs= rect->xmin-1.0; - } else { - xs= (rect->xmin+rect->xmax- height)/2.0; - } - } - else if (but->block->flag & UI_BLOCK_LOOP) { - xs= rect->xmin+1.0; - } - else if ((but->type==ICONROW) || (but->type==ICONTEXTROW)) { - xs= rect->xmin+3.0; - } - else { - xs= rect->xmin+4.0; - } - ys= (rect->ymin+rect->ymax- height)/2.0; - } - if(but->flag & UI_ICON_RIGHT) { - xs= rect->xmax-17.0; - ys= (rect->ymin+rect->ymax- height)/2.0; - } - if (!((but->flag & UI_ICON_RIGHT) || (but->flag & UI_ICON_LEFT))) { - xs= (rect->xmin+rect->xmax- height)/2.0; - ys= (rect->ymin+rect->ymax- height)/2.0; - } - - glEnable(GL_BLEND); - /* calculate blend color */ if ELEM3(but->type, TOG, ROW, TOGN) { if(but->flag & UI_SELECT); else if(but->flag & UI_ACTIVE); else blend= -60; } - if (but->flag & UI_BUT_DISABLED) blend = -100; - UI_icon_draw_aspect_blended(xs, ys, icon, aspect, blend); + glEnable(GL_BLEND); + + if(icon && icon!=ICON_BLANK1) { + if(but->flag & UI_ICON_LEFT) { + if (but->type==BUT_TOGDUAL) { + if (but->drawstr[0]) { + xs= rect->xmin-1.0; + } else { + xs= (rect->xmin+rect->xmax- height)/2.0; + } + } + else if (but->block->flag & UI_BLOCK_LOOP) { + xs= rect->xmin+1.0; + } + else if ((but->type==ICONROW) || (but->type==ICONTEXTROW)) { + xs= rect->xmin+3.0; + } + else { + xs= rect->xmin+4.0; + } + ys= (rect->ymin+rect->ymax- height)/2.0; + } + else { + xs= (rect->xmin+rect->xmax- height)/2.0; + ys= (rect->ymin+rect->ymax- height)/2.0; + } + + UI_icon_draw_aspect_blended(xs, ys, icon, aspect, blend); + } + + if(but->flag & UI_ICON_SUBMENU) { + xs= rect->xmax-17.0; + ys= (rect->ymin+rect->ymax- height)/2.0; + + UI_icon_draw_aspect_blended(xs, ys, ICON_RIGHTARROW_THIN, aspect, blend); + } glDisable(GL_BLEND); } @@ -739,15 +735,17 @@ static void ui_text_leftclip(uiFontStyle *fstyle, uiBut *but, rcti *rect) static void widget_draw_text(uiFontStyle *fstyle, uiBut *but, rcti *rect) { // int transopts; - char *cpoin; + char *cpoin = NULL; // ui_rasterpos_safe(x, y, but->aspect); // if(but->type==IDPOIN) transopts= 0; // no translation, of course! // else transopts= ui_translate_buttons(); - /* cut string in 2 parts */ - cpoin= strchr(but->drawstr, '|'); - if(cpoin) *cpoin= 0; + /* cut string in 2 parts - only for menu entries */ + if(ELEM5(but->type, SLI, NUM, TEX, NUMSLI, NUMABS)==0) { + cpoin= strchr(but->drawstr, '|'); + if(cpoin) *cpoin= 0; + } if(but->editstr || (but->flag & UI_TEXT_LEFT)) fstyle->align= UI_STYLE_TEXT_LEFT; @@ -766,7 +764,7 @@ static void widget_draw_text(uiFontStyle *fstyle, uiBut *but, rcti *rect) } /* draws text and icons for buttons */ -static void widget_draw_text_icon(uiFontStyle *fstyle, uiBut *but, rcti *rect, float *col) +static void widget_draw_text_icon(uiFontStyle *fstyle, uiWidgetColors *wcol, uiBut *but, rcti *rect) { short t, pos, ch; short selsta_tmp, selend_tmp, selsta_draw, selwidth_draw; @@ -811,7 +809,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiBut *but, rcti *rect, f but->drawstr[selend_tmp]= ch; - UI_ThemeColor(TH_BUT_TEXTFIELD_HI); + glColor3ubv(wcol->item); glRects(rect->xmin+selsta_draw+1, rect->ymin+2, rect->xmin+selwidth_draw+1, rect->ymax-2); } } else { @@ -851,7 +849,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiBut *but, rcti *rect, f /* If there's an icon too (made with uiDefIconTextBut) then draw the icon and offset the text label to accomodate it */ - if ( (but->flag & UI_HAS_ICON) && (but->flag & UI_ICON_LEFT) ) { + if (but->flag & UI_HAS_ICON) { widget_draw_icon(but, but->icon, 0, rect); rect->xmin += UI_icon_get_width(but->icon); @@ -862,7 +860,7 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiBut *but, rcti *rect, f else if(but->flag & UI_TEXT_LEFT) rect->xmin += 5; - glColor3fv(col); + glColor3ubv(wcol->text); widget_draw_text(fstyle, but, rect); } @@ -879,22 +877,22 @@ static void widget_draw_text_icon(uiFontStyle *fstyle, uiBut *but, rcti *rect, f /* uiWidgetStateColors - float inner_anim[4]; - float inner_anim_sel[4]; - float inner_key[4]; - float inner_key_sel[4]; - float inner_driven[4]; - float inner_driven_sel[4]; + char inner_anim[4]; + char inner_anim_sel[4]; + char inner_key[4]; + char inner_key_sel[4]; + char inner_driven[4]; + char inner_driven_sel[4]; */ static struct uiWidgetStateColors wcol_state= { - {0.45, 0.75, 0.3f, 1.0f}, - {0.35, 0.65, 0.2f, 1.0f}, - {0.95, 0.9, 0.4f, 1.0f}, - {0.85, 0.8, 0.3f, 1.0f}, - {0.7f, 0.0, 1.0f, 1.0f}, - {0.6f, 0.0, 0.9f, 1.0f} + {115, 190, 76, 255}, + {90, 166, 51, 255}, + {240, 235, 100, 255}, + {148, 204, 76, 255}, + {180, 0, 255, 255}, + {153, 0, 230, 255} }; /* uiWidgetColors @@ -910,153 +908,172 @@ static struct uiWidgetStateColors wcol_state= { */ static struct uiWidgetColors wcol_num= { - {0.1f, 0.1f, 0.1f}, - {0.7f, 0.7f, 0.7f, 1.0f}, - {0.6f, 0.6f, 0.6f, 1.0f}, - {0.35f, 0.35f, 0.35f}, + {25, 25, 25, 255}, + {180, 180, 180, 255}, + {153, 153, 153, 255}, + {90, 90, 90, 255}, - {0.0f, 0.0f, 0.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {255, 255, 255, 255}, 1, - -0.08f, 0.0f + -20, 0 }; static struct uiWidgetColors wcol_numslider= { - {0.1f, 0.1f, 0.1f}, - {0.7f, 0.7f, 0.7f, 1.0f}, - {0.6f, 0.6f, 0.6f, 1.0f}, - {0.5f, 0.5f, 0.5f}, + {25, 25, 25, 255}, + {180, 180, 180, 255}, + {153, 153, 153, 255}, + {128, 128, 128, 255}, - {0.0f, 0.0f, 0.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {255, 255, 255, 255}, 1, - -0.08f, 0.0f + -20, 0 }; static struct uiWidgetColors wcol_text= { - {0.1f, 0.1f, 0.1f}, - {0.6f, 0.6f, 0.6f, 1.0f}, - {0.6f, 0.6f, 0.6f, 1.0f}, - {0.35f, 0.35f, 0.35f}, + {25, 25, 25, 255}, + {153, 153, 153, 255}, + {153, 153, 153, 255}, + {90, 90, 90, 255}, - {0.0f, 0.0f, 0.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {255, 255, 255, 255}, 1, - 0.0f, 0.1f + 0, 25 }; static struct uiWidgetColors wcol_option= { - {0.0f, 0.0f, 0.0f}, - {0.25f, 0.25f, 0.25f, 1.0f}, - {0.25f, 0.25f, 0.25f, 1.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {70, 70, 70, 255}, + {70, 70, 70, 255}, + {255, 255, 255, 255}, - {0.0f, 0.0f, 0.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {255, 255, 255, 255}, 1, - 0.1f, -0.08f + 25, -20 }; /* button that shows popup */ static struct uiWidgetColors wcol_menu= { - {0.0f, 0.0f, 0.0f}, - {0.25f, 0.25f, 0.25f, 1.0f}, - {0.25f, 0.25f, 0.25f, 1.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {70, 70, 70, 255}, + {70, 70, 70, 255}, + {255, 255, 255, 255}, - {1.0f, 1.0f, 1.0f}, - {0.8f, 0.8f, 0.8f}, + {255, 255, 255, 255}, + {204, 204, 204, 255}, 1, - 0.1f, -0.08f + 25, -20 }; /* button that starts pulldown */ static struct uiWidgetColors wcol_pulldown= { - {0.0f, 0.0f, 0.0f}, - {0.25f, 0.25f, 0.25f, 1.0f}, - {0.18f, 0.48f, 0.85f, 1.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {63, 63, 63, 255}, + {86, 128, 194, 255}, + {255, 255, 255, 255}, - {1.0f, 1.0f, 1.0f}, - {0.0f, 0.0f, 0.0f}, + {0, 0, 0, 255}, + {0, 0, 0, 255}, 0, - 0.1f, -0.08f + 25, -20 }; /* button inside menu */ static struct uiWidgetColors wcol_menu_item= { - {0.0f, 0.0f, 0.0f}, - {0.0f, 0.0f, 0.0f, 0.3}, - {0.23f, 0.53f, 0.9f, 1.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {0, 0, 0, 0}, + {86, 128, 194, 255}, + {255, 255, 255, 255}, - {1.0f, 1.0f, 1.0f}, - {0.0f, 0.0f, 0.0f}, + {255, 255, 255, 255}, + {0, 0, 0, 255}, 0, - 0.15f, 0.0f + 38, 0 }; /* backdrop menu + title text color */ static struct uiWidgetColors wcol_menu_back= { - {0.0f, 0.0f, 0.0f}, - {0.0f, 0.0f, 0.0f, 0.6}, - {0.18f, 0.48f, 0.85f, 0.8f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {25, 25, 25, 230}, + {46, 124, 217, 204}, + {255, 255, 255, 255}, - {1.0f, 1.0f, 1.0f}, - {0.0f, 0.0f, 0.0f}, + {255, 255, 255, 255}, + {0, 0, 0, 255}, 0, - 0.1f, -0.08f + 25, -20 }; static struct uiWidgetColors wcol_radio= { - {0.0f, 0.0f, 0.0f}, - {0.25f, 0.25f, 0.25f, 1.0f}, - {0.34f, 0.5f, 0.76f, 1.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {70, 70, 70, 255}, + {86, 128, 194, 255}, + {255, 255, 255, 255}, - {1.0f, 1.0f, 1.0f}, - {0.0f, 0.0f, 0.0f}, + {255, 255, 255, 255}, + {0, 0, 0, 255}, 1, - 0.1f, -0.1f + 25, -25 }; static struct uiWidgetColors wcol_regular= { - {0.1f, 0.1f, 0.1f}, - {0.6f, 0.6f, 0.6f, 1.0f}, - {0.4f, 0.4f, 0.4f, 1.0f}, - {0.1f, 0.1f, 0.1f}, + {25, 25, 25, 255}, + {153, 153, 153, 255}, + {100, 100, 100, 255}, + {25, 25, 25, 255}, - {0.0f, 0.0f, 0.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {255, 255, 255, 255}, 0, - 0.0f, 0.0f + 0, 0 }; -static struct uiWidgetColors wcol_regular_shade= { - {0.1f, 0.1f, 0.1f}, - {0.6f, 0.6f, 0.6f, 1.0f}, - {0.4f, 0.4f, 0.4f, 1.0f}, - {0.1f, 0.1f, 0.1f}, +static struct uiWidgetColors wcol_tool= { + {25, 25, 25, 255}, + {153, 153, 153, 255}, + {100, 100, 100, 255}, + {25, 25, 25, 255}, - {0.0f, 0.0f, 0.0f}, - {1.0f, 1.0f, 1.0f}, + {0, 0, 0, 255}, + {255, 255, 255, 255}, 1, - 0.1f, -0.1f + 25, -25 }; +/* called for theme init (new theme) and versions */ +void ui_widget_color_init(ThemeUI *tui) +{ + + tui->wcol_regular= wcol_regular; + tui->wcol_tool= wcol_tool; + tui->wcol_radio= wcol_radio; + tui->wcol_text= wcol_text; + tui->wcol_option= wcol_option; + tui->wcol_num= wcol_num; + tui->wcol_numslider= wcol_numslider; + tui->wcol_menu= wcol_menu; + tui->wcol_pulldown= wcol_pulldown; + tui->wcol_menu_back= wcol_menu_back; + tui->wcol_menu_item= wcol_menu_item; + + tui->iconfile[0]= 0; +} + /* ************ button callbacks, state ***************** */ /* copy colors from theme, and set changes in it based on state */ @@ -1078,7 +1095,7 @@ static void widget_state(uiWidgetType *wt, int state) /* only flip shade if it's not "pushed in" already */ if(wt->wcol.shaded && wt->wcol.shadetop>wt->wcol.shadedown) { - SWAP(float, wt->wcol.shadetop, wt->wcol.shadedown); + SWAP(short, wt->wcol.shadetop, wt->wcol.shadedown); } } else { @@ -1089,11 +1106,28 @@ static void widget_state(uiWidgetType *wt, int state) else if(state & UI_BUT_DRIVEN) QUATCOPY(wt->wcol.inner, wcol_state.inner_driven) - if(state & UI_ACTIVE) /* mouse over? */ - VecMulf(wt->wcol.inner, 1.1f); + if(state & UI_ACTIVE) { /* mouse over? */ + wt->wcol.inner[0]= wt->wcol.inner[0]>=240? 255 : wt->wcol.inner[0]+15; + wt->wcol.inner[1]= wt->wcol.inner[1]>=240? 255 : wt->wcol.inner[1]+15; + wt->wcol.inner[2]= wt->wcol.inner[2]>=240? 255 : wt->wcol.inner[2]+15; + } } } +/* labels use theme colors for text */ +static void widget_state_label(uiWidgetType *wt, int state) +{ + /* call this for option button */ + widget_state(wt, state); + + if(state & UI_SELECT) + UI_GetThemeColor4ubv(TH_TEXT_HI, wt->wcol.text); + else + UI_GetThemeColor4ubv(TH_TEXT, wt->wcol.text); + +} + + /* special case, button that calls pulldown */ static void widget_state_pulldown(uiWidgetType *wt, int state) { @@ -1342,7 +1376,8 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s uiWidgetBase wtb, wtb1; rcti rect1; double value; - float offs, fac, outline[3]; + float offs, fac; + char outline[3]; widget_init(&wtb); widget_init(&wtb1); @@ -1368,11 +1403,11 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s VECCOPY(outline, wcol->outline); VECCOPY(wcol->outline, wcol->item); VECCOPY(wcol->inner, wcol->item); - SWAP(float, wcol->shadetop, wcol->shadedown); + SWAP(short, wcol->shadetop, wcol->shadedown); widgetbase_draw(&wtb1, wcol); VECCOPY(wcol->outline, outline); - SWAP(float, wcol->shadetop, wcol->shadedown); + SWAP(short, wcol->shadetop, wcol->shadedown); /* outline */ wtb.outline= 1; @@ -1384,13 +1419,17 @@ static void widget_numslider(uiBut *but, uiWidgetColors *wcol, rcti *rect, int s static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int state, int roundboxalign) { uiWidgetBase wtb; + float col[4]; widget_init(&wtb); /* half rounded */ round_box_edges(&wtb, roundboxalign, rect, 4.0f); - ui_get_but_vectorf(but, wcol->inner); + ui_get_but_vectorf(but, col); + wcol->inner[0]= FTOCHAR(col[0]); + wcol->inner[1]= FTOCHAR(col[1]); + wcol->inner[2]= FTOCHAR(col[2]); widgetbase_draw(&wtb, wcol); @@ -1487,7 +1526,7 @@ static void widget_optionbut(uiWidgetColors *wcol, rcti *rect, int state, int ro widgetbase_draw(&wtb, wcol); /* text space */ - rect->xmin += (rect->ymax-rect->ymin) + delta; + rect->xmin += (rect->ymax-rect->ymin)*0.7 + delta; } @@ -1545,48 +1584,55 @@ static void widget_disabled(rcti *rect) static uiWidgetType *widget_type(uiWidgetTypeEnum type) { + bTheme *btheme= U.themes.first; static uiWidgetType wt; /* defaults */ - wt.wcol_theme= &wcol_regular; + wt.wcol_theme= &btheme->tui.wcol_regular; wt.state= widget_state; wt.draw= widget_but; wt.custom= NULL; wt.text= widget_draw_text_icon; switch(type) { + case UI_WTYPE_LABEL: + wt.draw= NULL; + wt.state= widget_state_label; + break; + case UI_WTYPE_TOGGLE: break; case UI_WTYPE_OPTION: - wt.wcol_theme= &wcol_option; + wt.wcol_theme= &btheme->tui.wcol_option; wt.draw= widget_optionbut; + wt.state= widget_state_label; break; case UI_WTYPE_RADIO: - wt.wcol_theme= &wcol_radio; + wt.wcol_theme= &btheme->tui.wcol_radio; wt.draw= widget_radiobut; break; case UI_WTYPE_NUMBER: - wt.wcol_theme= &wcol_num; + wt.wcol_theme= &btheme->tui.wcol_num; wt.draw= widget_numbut; break; case UI_WTYPE_SLIDER: - wt.wcol_theme= &wcol_numslider; + wt.wcol_theme= &btheme->tui.wcol_numslider; wt.custom= widget_numslider; break; case UI_WTYPE_EXEC: - wt.wcol_theme= &wcol_regular_shade; + wt.wcol_theme= &btheme->tui.wcol_tool; wt.draw= widget_roundbut; break; /* strings */ case UI_WTYPE_NAME: - wt.wcol_theme= &wcol_text; + wt.wcol_theme= &btheme->tui.wcol_text; wt.draw= widget_textbut; break; @@ -1602,31 +1648,31 @@ static uiWidgetType *widget_type(uiWidgetTypeEnum type) /* start menus */ case UI_WTYPE_MENU_RADIO: - wt.wcol_theme= &wcol_menu; + wt.wcol_theme= &btheme->tui.wcol_menu; wt.draw= widget_menubut; break; case UI_WTYPE_MENU_POINTER_LINK: - wt.wcol_theme= &wcol_menu; + wt.wcol_theme= &btheme->tui.wcol_menu; wt.draw= widget_menubut; break; case UI_WTYPE_PULLDOWN: - wt.wcol_theme= &wcol_pulldown; + wt.wcol_theme= &btheme->tui.wcol_pulldown; wt.draw= widget_pulldownbut; wt.state= widget_state_pulldown; break; /* in menus */ case UI_WTYPE_MENU_ITEM: - wt.wcol_theme= &wcol_menu_item; + wt.wcol_theme= &btheme->tui.wcol_menu_item; wt.draw= widget_menu_itembut; wt.state= widget_state_menu_item; break; case UI_WTYPE_MENU_BACK: - wt.wcol_theme= &wcol_menu_back; + wt.wcol_theme= &btheme->tui.wcol_menu_back; wt.draw= widget_menu_back; break; @@ -1698,13 +1744,16 @@ static int widget_roundbox_set(uiBut *but, rcti *rect) /* conversion from old to new buttons, so still messy */ void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect) { + bTheme *btheme= U.themes.first; + ThemeUI *tui= &btheme->tui; + uiFontStyle *fstyle= &style->widget; uiWidgetType *wt= NULL; /* handle menus seperately */ if(but->dt==UI_EMBOSSP) { switch (but->type) { case LABEL: - widget_draw_text_icon(&style->widgetlabel, but, rect, wcol_menu_back.text); + widget_draw_text_icon(&style->widgetlabel, &tui->wcol_menu_back, but, rect); break; case SEPR: break; @@ -1722,9 +1771,11 @@ void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect) switch (but->type) { case LABEL: if(but->block->flag & UI_BLOCK_LOOP) - widget_draw_text_icon(&style->widgetlabel, but, rect, wcol_menu_back.text); - else - widget_draw_text_icon(&style->widgetlabel, but, rect, wcol_regular.text); + widget_draw_text_icon(&style->widgetlabel, &tui->wcol_menu_back, but, rect); + else { + wt= widget_type(UI_WTYPE_LABEL); + fstyle= &style->widgetlabel; + } break; case SEPR: break; @@ -1781,13 +1832,13 @@ void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect) ui_draw_but_HSVCUBE(but, rect); break; case BUT_COLORBAND: - ui_draw_but_COLORBAND(but, rect); + ui_draw_but_COLORBAND(but, &tui->wcol_regular, rect); break; case BUT_NORMAL: - ui_draw_but_NORMAL(but, rect); + ui_draw_but_NORMAL(but, &tui->wcol_regular, rect); break; case BUT_CURVE: - ui_draw_but_CURVE(ar, but, rect); + ui_draw_but_CURVE(ar, but, &tui->wcol_regular, rect); break; default: @@ -1808,7 +1859,7 @@ void ui_draw_but(ARegion *ar, uiStyle *style, uiBut *but, rcti *rect) wt->custom(but, &wt->wcol, rect, state, roundboxalign); else if(wt->draw) wt->draw(&wt->wcol, rect, state, roundboxalign); - wt->text(&style->widget, but, rect, wt->wcol.text); + wt->text(fstyle, &wt->wcol, but, rect); if(state & UI_BUT_DISABLED) if(but->dt!=UI_EMBOSSP) @@ -1828,39 +1879,4 @@ void ui_draw_menu_back(uiStyle *style, uiBlock *block, rcti *rect) } -/* test function only */ -void drawnewstuff() -{ - rcti rect; - - rect.xmin= 10; rect.xmax= 10+100; - rect.ymin= -30; rect.ymax= -30+18; - widget_numbut(&wcol_num, &rect, 0, 15); - - rect.xmin= 120; rect.xmax= 120+100; - rect.ymin= -30; rect.ymax= -30+20; - widget_numbut(&wcol_num, &rect, 0, 15); - - rect.xmin= 10; rect.xmax= 10+100; - rect.ymin= -60; rect.ymax= -60+20; - widget_menubut(&wcol_menu, &rect, 0, 15); - - rect.xmin= 120; rect.xmax= 120+100; - widget_but(&wcol_regular, &rect, 0, 15); - - rect.xmin= 10; rect.xmax= 10+100; - rect.ymin= -90; rect.ymax= -90+20; - widget_radiobut(&wcol_radio, &rect, 1, 9); - - rect.xmin= 109; rect.xmax= 110+100; - rect.ymin= -90; rect.ymax= -90+20; - widget_radiobut(&wcol_radio, &rect, 0, 6); - - rect.xmin= 240; rect.xmax= 240+30; - rect.ymin= -90; rect.ymax= -90+30; - widget_roundbut(&wcol_regular_shade, &rect, 0, 15); -} - - - diff --git a/source/blender/editors/interface/resources.c b/source/blender/editors/interface/resources.c index 039ebcc91f9..661e9af178e 100644 --- a/source/blender/editors/interface/resources.c +++ b/source/blender/editors/interface/resources.c @@ -40,30 +40,38 @@ #include "MEM_guardedalloc.h" + +#include "DNA_curve_types.h" #include "DNA_listBase.h" #include "DNA_userdef_types.h" #include "DNA_screen_types.h" #include "DNA_space_types.h" +#include "BLI_blenlib.h" + #include "IMB_imbuf.h" #include "IMB_imbuf_types.h" +#include "BKE_DerivedMesh.h" +#include "BKE_global.h" +#include "BKE_main.h" +#include "BKE_texture.h" #include "BKE_utildefines.h" #include "BIF_gl.h" +#include "UI_interface.h" #include "UI_resources.h" #include "UI_interface_icons.h" -//#include "UI_icons.h" -#include "BLI_blenlib.h" +#include "interface_intern.h" /* global for themes */ typedef void (*VectorDrawFunc)(int x, int y, int w, int h, float alpha); static bTheme *theme_active=NULL; static int theme_spacetype= SPACE_VIEW3D; - +static int theme_regionid= RGN_TYPE_WINDOW; void ui_resources_init(void) { @@ -86,7 +94,6 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) static char error[4]={240, 0, 240, 255}; static char alert[4]={240, 60, 60, 255}; static char headerdesel[4]={0,0,0,255}; - static char custom[4]={0,0,0,255}; char *cp= error; @@ -96,51 +103,9 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) if(colorid < TH_THEMEUI) { switch(colorid) { - case TH_BUT_OUTLINE: - cp= btheme->tui.outline; break; - case TH_BUT_NEUTRAL: - cp= btheme->tui.neutral; break; - case TH_BUT_ACTION: - cp= btheme->tui.action; break; - case TH_BUT_SETTING: - cp= btheme->tui.setting; break; - case TH_BUT_SETTING1: - cp= btheme->tui.setting1; break; - case TH_BUT_SETTING2: - cp= btheme->tui.setting2; break; - case TH_BUT_NUM: - cp= btheme->tui.num; break; - case TH_BUT_TEXTFIELD: - cp= btheme->tui.textfield; break; - case TH_BUT_TEXTFIELD_HI: - cp= btheme->tui.textfield_hi; break; - case TH_BUT_POPUP: - cp= btheme->tui.popup; break; - case TH_BUT_TEXT: - cp= btheme->tui.text; break; - case TH_BUT_TEXT_HI: - cp= btheme->tui.text_hi; break; - case TH_MENU_BACK: - cp= btheme->tui.menu_back; break; - case TH_MENU_ITEM: - cp= btheme->tui.menu_item; break; - case TH_MENU_HILITE: - cp= btheme->tui.menu_hilite; break; - case TH_MENU_TEXT: - cp= btheme->tui.menu_text; break; - case TH_MENU_TEXT_HI: - cp= btheme->tui.menu_text_hi; break; - - case TH_BUT_DRAWTYPE: - cp= &btheme->tui.but_drawtype; break; - case TH_ICONFILE: - cp= btheme->tui.iconfile; break; - case TH_REDALERT: cp= alert; break; - case TH_CUSTOM: - cp= custom; break; } } else { @@ -198,11 +163,46 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) switch(colorid) { case TH_BACK: - cp= ts->back; break; + if(theme_regionid==RGN_TYPE_WINDOW) + cp= ts->back; + else if(theme_regionid==RGN_TYPE_CHANNELS) + cp= ts->list; + else if(theme_regionid==RGN_TYPE_HEADER) + cp= ts->header; + else + cp= ts->button; + break; case TH_TEXT: - cp= ts->text; break; + if(theme_regionid==RGN_TYPE_WINDOW) + cp= ts->text; + else if(theme_regionid==RGN_TYPE_CHANNELS) + cp= ts->list_text; + else if(theme_regionid==RGN_TYPE_HEADER) + cp= ts->header_text; + else + cp= ts->button_text; + break; case TH_TEXT_HI: - cp= ts->text_hi; break; + if(theme_regionid==RGN_TYPE_WINDOW) + cp= ts->text_hi; + else if(theme_regionid==RGN_TYPE_CHANNELS) + cp= ts->list_text_hi; + else if(theme_regionid==RGN_TYPE_HEADER) + cp= ts->header_text_hi; + else + cp= ts->button_text_hi; + break; + case TH_TITLE: + if(theme_regionid==RGN_TYPE_WINDOW) + cp= ts->title; + else if(theme_regionid==RGN_TYPE_CHANNELS) + cp= ts->list_title; + else if(theme_regionid==RGN_TYPE_HEADER) + cp= ts->header_title; + else + cp= ts->button_title; + break; + case TH_HEADER: cp= ts->header; break; case TH_HEADERDESEL: @@ -213,8 +213,25 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) headerdesel[2]= cp[2]>10?cp[2]-10:0; cp= headerdesel; break; + case TH_HEADER_TEXT: + cp= ts->header_text; break; + case TH_HEADER_TEXT_HI: + cp= ts->header_text_hi; break; + case TH_PANEL: cp= ts->panel; break; + case TH_PANEL_TEXT: + cp= ts->panel_text; break; + case TH_PANEL_TEXT_HI: + cp= ts->panel_text_hi; break; + + case TH_BUTBACK: + cp= ts->button; break; + case TH_BUTBACK_TEXT: + cp= ts->button_text; break; + case TH_BUTBACK_TEXT_HI: + cp= ts->button_text_hi; break; + case TH_SHADE1: cp= ts->shade1; break; case TH_SHADE2: @@ -340,11 +357,56 @@ char *UI_ThemeGetColorPtr(bTheme *btheme, int spacetype, int colorid) return cp; } -#define SETCOL(col, r, g, b, a) col[0]=r; col[1]=g; col[2]= b; col[3]= a; +#define SETCOLTEST(col, r, g, b, a) if(col[3]==0) {col[0]=r; col[1]=g; col[2]= b; col[3]= a;} -/* initialize +/* use this call to init new variables in themespace, if they're same for all */ +static void ui_theme_init_new_do(ThemeSpace *ts) +{ + SETCOLTEST(ts->header_text, 0, 0, 0, 255); + SETCOLTEST(ts->header_title, 0, 0, 0, 255); + SETCOLTEST(ts->header_text_hi, 255, 255, 255, 255); + + SETCOLTEST(ts->panel_text, 0, 0, 0, 255); + SETCOLTEST(ts->panel_title, 0, 0, 0, 255); + SETCOLTEST(ts->panel_text_hi, 255, 255, 255, 255); + + SETCOLTEST(ts->button, 145, 145, 145, 245); + SETCOLTEST(ts->button_title, 0, 0, 0, 255); + SETCOLTEST(ts->button_text, 0, 0, 0, 255); + SETCOLTEST(ts->button_text_hi, 255, 255, 255, 255); + + SETCOLTEST(ts->list, 165, 165, 165, 255); + SETCOLTEST(ts->list_title, 0, 0, 0, 255); + SETCOLTEST(ts->list_text, 0, 0, 0, 255); + SETCOLTEST(ts->list_text_hi, 255, 255, 255, 255); +} + +static void ui_theme_init_new(bTheme *btheme) +{ + ui_theme_init_new_do(&btheme->tbuts); + ui_theme_init_new_do(&btheme->tv3d); + ui_theme_init_new_do(&btheme->tfile); + ui_theme_init_new_do(&btheme->tipo); + ui_theme_init_new_do(&btheme->tinfo); + ui_theme_init_new_do(&btheme->tsnd); + ui_theme_init_new_do(&btheme->tact); + ui_theme_init_new_do(&btheme->tnla); + ui_theme_init_new_do(&btheme->tseq); + ui_theme_init_new_do(&btheme->tima); + ui_theme_init_new_do(&btheme->timasel); + ui_theme_init_new_do(&btheme->text); + ui_theme_init_new_do(&btheme->toops); + ui_theme_init_new_do(&btheme->ttime); + ui_theme_init_new_do(&btheme->tnode); + +} + +#define SETCOL(col, r, g, b, a) col[0]=r; col[1]=g; col[2]= b; col[3]= a; +#define SETCOLF(col, r, g, b, a) col[0]=r*255; col[1]=g*255; col[2]= b*255; col[3]= a*255; + +/* initialize default theme, can't be edited Note: when you add new colors, created & saved themes need initialized - in usiblender.c, search for "versionfile" + use function below, init_userdef_do_versions() */ void ui_theme_init_userdef(void) { @@ -361,43 +423,26 @@ void ui_theme_init_userdef(void) strcpy(btheme->name, "Default"); } - UI_SetTheme(NULL); // make sure the global used in this file is set + UI_SetTheme(0, 0); // make sure the global used in this file is set /* UI buttons */ - SETCOL(btheme->tui.outline, 130, 130, 130, 255); - SETCOL(btheme->tui.neutral, 165, 165, 165, 255); - SETCOL(btheme->tui.action, 165, 165, 165, 255); - SETCOL(btheme->tui.setting, 165, 165, 165, 255); - SETCOL(btheme->tui.setting1, 165, 165, 165, 255); - SETCOL(btheme->tui.setting2, 165, 165, 165, 255); - SETCOL(btheme->tui.num, 165, 165, 165, 255); - SETCOL(btheme->tui.textfield, 143, 142, 143, 255); - SETCOL(btheme->tui.textfield_hi,255, 151, 26, 255); - SETCOL(btheme->tui.popup, 174, 174, 174, 255); - - SETCOL(btheme->tui.text, 0,0,0, 255); - SETCOL(btheme->tui.text_hi, 255, 255, 255, 255); - - SETCOL(btheme->tui.menu_back, 220, 220, 220, 235); - SETCOL(btheme->tui.menu_item, 255, 255, 255, 20); - SETCOL(btheme->tui.menu_hilite, 110, 110, 110, 255); - SETCOL(btheme->tui.menu_text, 0, 0, 0, 255); - SETCOL(btheme->tui.menu_text_hi, 255, 255, 255, 255); - - btheme->tui.but_drawtype= TH_ROUNDSHADED; - BLI_strncpy(btheme->tui.iconfile, "", sizeof(btheme->tui.iconfile)); + ui_widget_color_init(&btheme->tui); + /* common (new) variables */ + ui_theme_init_new(btheme); + /* space view3d */ - SETCOL(btheme->tv3d.back, 90, 90, 90, 255); + SETCOLF(btheme->tv3d.back, 0.225, 0.225, 0.225, 1.0); SETCOL(btheme->tv3d.text, 0, 0, 0, 255); SETCOL(btheme->tv3d.text_hi, 255, 255, 255, 255); - SETCOL(btheme->tv3d.header, 185, 185, 185, 255); + + SETCOLF(btheme->tv3d.header, 0.45, 0.45, 0.45, 1.0); SETCOL(btheme->tv3d.panel, 165, 165, 165, 127); - + SETCOL(btheme->tv3d.shade1, 160, 160, 160, 100); SETCOL(btheme->tv3d.shade2, 0x7f, 0x70, 0x70, 100); - SETCOL(btheme->tv3d.grid, 74, 74, 74 , 255); + SETCOLF(btheme->tv3d.grid, 0.222, 0.222, 0.222, 1.0); SETCOL(btheme->tv3d.wire, 0x0, 0x0, 0x0, 255); SETCOL(btheme->tv3d.lamp, 0, 0, 0, 40); SETCOL(btheme->tv3d.select, 241, 88, 0, 255); @@ -427,19 +472,16 @@ void ui_theme_init_userdef(void) /* to have something initialized */ btheme->tbuts= btheme->tv3d; - SETCOL(btheme->tbuts.back, 0x82, 0x82, 0x82, 255); - SETCOL(btheme->tbuts.header, 185, 185, 185, 255); + SETCOLF(btheme->tbuts.back, 0.45, 0.45, 0.45, 1.0); SETCOL(btheme->tbuts.panel, 0x82, 0x82, 0x82, 255); - /* space ipo */ - /* to have something initialized */ + /* graph editor */ btheme->tipo= btheme->tv3d; - + SETCOLF(btheme->tipo.back, 0.42, 0.42, 0.42, 1.0); + SETCOLF(btheme->tipo.list, 0.4, 0.4, 0.4, 1.0); SETCOL(btheme->tipo.grid, 94, 94, 94, 255); - SETCOL(btheme->tipo.back, 120, 120, 120, 255); - SETCOL(btheme->tipo.header, 185, 185, 185, 255); SETCOL(btheme->tipo.panel, 255, 255, 255, 150); - SETCOL(btheme->tipo.shade1, 172, 172, 172, 100); + SETCOL(btheme->tipo.shade1, 150, 150, 150, 100); /* scrollbars */ SETCOL(btheme->tipo.shade2, 0x70, 0x70, 0x70, 100); SETCOL(btheme->tipo.vertex, 0, 0, 0, 255); SETCOL(btheme->tipo.vertex_select, 255, 133, 0, 255); @@ -455,13 +497,15 @@ void ui_theme_init_userdef(void) SETCOL(btheme->tipo.group, 79, 101, 73, 255); SETCOL(btheme->tipo.group_active, 135, 177, 125, 255); + /* dopesheet */ + btheme->tact= btheme->tipo; + /* space file */ /* to have something initialized */ btheme->tfile= btheme->tv3d; SETCOL(btheme->tfile.back, 90, 90, 90, 255); SETCOL(btheme->tfile.text, 250, 250, 250, 255); SETCOL(btheme->tfile.text_hi, 15, 15, 15, 255); - SETCOL(btheme->tfile.header, 185, 185, 185, 255); SETCOL(btheme->tfile.panel, 180, 180, 180, 255); // bookmark/ui regions SETCOL(btheme->tfile.active, 130, 130, 130, 255); // selected files SETCOL(btheme->tfile.hilite, 255, 140, 25, 255); // selected files @@ -472,31 +516,13 @@ void ui_theme_init_userdef(void) SETCOL(btheme->tfile.scene, 250, 250, 250, 255); - /* space action */ - btheme->tact= btheme->tv3d; - SETCOL(btheme->tact.back, 116, 116, 116, 255); - SETCOL(btheme->tact.text, 0, 0, 0, 255); - SETCOL(btheme->tact.text_hi, 255, 255, 255, 255); - SETCOL(btheme->tact.header, 185, 185, 185, 255); - SETCOL(btheme->tact.grid, 94, 94, 94, 255); - SETCOL(btheme->tact.face, 166, 166, 166, 255); // RVK - SETCOL(btheme->tact.shade1, 172, 172, 172, 255); // sliders - SETCOL(btheme->tact.shade2, 74, 74, 74, 100); // bar - SETCOL(btheme->tact.hilite, 255, 160, 0, 100); // bar - SETCOL(btheme->tact.strip_select, 255, 160, 0, 255); - SETCOL(btheme->tact.strip, 78, 78, 78, 255); - SETCOL(btheme->tact.group, 79, 101, 73, 255); - SETCOL(btheme->tact.group_active, 135, 177, 125, 255) - SETCOL(btheme->tact.ds_channel, 82, 96, 110, 255); - SETCOL(btheme->tact.ds_subchannel, 124, 137, 150, 255); - + /* space nla */ btheme->tnla= btheme->tv3d; SETCOL(btheme->tnla.back, 116, 116, 116, 255); SETCOL(btheme->tnla.text, 0, 0, 0, 255); SETCOL(btheme->tnla.text_hi, 255, 255, 255, 255); - SETCOL(btheme->tnla.header, 185, 185, 185, 255); SETCOL(btheme->tnla.grid, 94, 94, 94, 255); SETCOL(btheme->tnla.shade1, 172, 172, 172, 255); // sliders SETCOL(btheme->tnla.shade2, 84, 44, 31, 100); // bar @@ -533,7 +559,6 @@ void ui_theme_init_userdef(void) SETCOL(btheme->timasel.active, 195, 195, 195, 255); /* active tile */ SETCOL(btheme->timasel.grid, 94, 94, 94, 255); /* active file text */ SETCOL(btheme->timasel.back, 110, 110, 110, 255); - SETCOL(btheme->timasel.header, 185, 185, 185, 255); SETCOL(btheme->timasel.shade1, 94, 94, 94, 255); /* bar */ SETCOL(btheme->timasel.shade2, 172, 172, 172, 255); /* sliders */ SETCOL(btheme->timasel.hilite, 17, 27, 60, 100); /* selected tile */ @@ -557,17 +582,17 @@ void ui_theme_init_userdef(void) /* space oops */ btheme->toops= btheme->tv3d; - SETCOL(btheme->toops.back, 153, 153, 153, 255); - + SETCOLF(btheme->toops.back, 0.45, 0.45, 0.45, 1.0); + /* space info */ btheme->tinfo= btheme->tv3d; SETCOL(btheme->tinfo.back, 153, 153, 153, 255); /* space sound */ btheme->tsnd= btheme->tv3d; - SETCOL(btheme->tsnd.back, 153, 153, 153, 255); + SETCOLF(btheme->tsnd.back, 0.45, 0.45, 0.45, 1.0); + SETCOLF(btheme->tsnd.grid, 0.36, 0.36, 0.36, 1.0); SETCOL(btheme->tsnd.shade1, 173, 173, 173, 255); // sliders - SETCOL(btheme->tsnd.grid, 140, 140, 140, 255); /* space time */ btheme->ttime= btheme->tsnd; // same as sound space @@ -583,188 +608,19 @@ void ui_theme_init_userdef(void) } -char *UI_ThemeColorsPup(int spacetype) -{ - char *cp= MEM_callocN(32*32, "theme pup"); - char *str = cp; - - if(spacetype==0) { - str += sprintf(str, "Outline %%x%d|", TH_BUT_OUTLINE); - str += sprintf(str, "Neutral %%x%d|", TH_BUT_NEUTRAL); - str += sprintf(str, "Action %%x%d|", TH_BUT_ACTION); - str += sprintf(str, "Setting %%x%d|", TH_BUT_SETTING); - str += sprintf(str, "Special Setting 1%%x%d|", TH_BUT_SETTING1); - str += sprintf(str, "Special Setting 2 %%x%d|", TH_BUT_SETTING2); - str += sprintf(str, "Number Input %%x%d|", TH_BUT_NUM); - str += sprintf(str, "Text Input %%x%d|", TH_BUT_TEXTFIELD); - str += sprintf(str, "Text Input Highlight %%x%d|", TH_BUT_TEXTFIELD_HI); - str += sprintf(str, "Popup %%x%d|", TH_BUT_POPUP); - str += sprintf(str, "Text %%x%d|", TH_BUT_TEXT); - str += sprintf(str, "Text Highlight %%x%d|", TH_BUT_TEXT_HI); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Menu Background %%x%d|", TH_MENU_BACK); - str += sprintf(str, "Menu Item %%x%d|", TH_MENU_ITEM); - str += sprintf(str, "Menu Item Highlight %%x%d|", TH_MENU_HILITE); - str += sprintf(str, "Menu Text %%x%d|", TH_MENU_TEXT); - str += sprintf(str, "Menu Text Highlight %%x%d|", TH_MENU_TEXT_HI); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Drawtype %%x%d|", TH_BUT_DRAWTYPE); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Icon File %%x%d|", TH_ICONFILE); - } - else { - // first defaults for each space - str += sprintf(str, "Background %%x%d|", TH_BACK); - str += sprintf(str, "Text %%x%d|", TH_TEXT); - str += sprintf(str, "Text Highlight %%x%d|", TH_TEXT_HI); - str += sprintf(str, "Header %%x%d|", TH_HEADER); - - switch(spacetype) { - case SPACE_VIEW3D: - str += sprintf(str, "Panel %%x%d|", TH_PANEL); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Grid %%x%d|", TH_GRID); - str += sprintf(str, "Wire %%x%d|", TH_WIRE); - str += sprintf(str, "Lamp %%x%d|", TH_LAMP); - str += sprintf(str, "Object Selected %%x%d|", TH_SELECT); - str += sprintf(str, "Object Active %%x%d|", TH_ACTIVE); - str += sprintf(str, "Object Grouped %%x%d|", TH_GROUP); - str += sprintf(str, "Object Grouped Active %%x%d|", TH_GROUP_ACTIVE); - str += sprintf(str, "Transform %%x%d|", TH_TRANSFORM); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Vertex %%x%d|", TH_VERTEX); - str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT); - str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE); - str += sprintf(str, "Edge Selected %%x%d|", TH_EDGE_SELECT); - str += sprintf(str, "Edge Seam %%x%d|", TH_EDGE_SEAM); - str += sprintf(str, "Edge Sharp %%x%d|", TH_EDGE_SHARP); - str += sprintf(str, "Edge UV Face Select %%x%d|", TH_EDGE_FACESEL); - str += sprintf(str, "Face (transp) %%x%d|", TH_FACE); - str += sprintf(str, "Face Selected (transp) %%x%d|", TH_FACE_SELECT); - str += sprintf(str, "Face Dot Selected %%x%d|", TH_FACE_DOT); - str += sprintf(str, "Face Dot Size %%x%d|", TH_FACEDOT_SIZE); - str += sprintf(str, "Active Vert/Edge/Face %%x%d|", TH_EDITMESH_ACTIVE); - str += sprintf(str, "Normal %%x%d|", TH_NORMAL); - str += sprintf(str, "Bone Solid %%x%d|", TH_BONE_SOLID); - str += sprintf(str, "Bone Pose %%x%d", TH_BONE_POSE); - str += sprintf(str, "Current Frame %%x%d", TH_CFRAME); - break; - case SPACE_IPO: - str += sprintf(str, "Panel %%x%d|", TH_PANEL); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Grid %%x%d|", TH_GRID); - str += sprintf(str, "Window Sliders %%x%d|", TH_SHADE1); - str += sprintf(str, "Ipo Channels %%x%d|", TH_SHADE2); - str += sprintf(str, "Vertex %%x%d|", TH_VERTEX); - str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT); - str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE); - str += sprintf(str, "Current Frame %%x%d", TH_CFRAME); - break; - case SPACE_FILE: - str += sprintf(str, "Selected file %%x%d", TH_HILITE); - break; - case SPACE_NLA: - //str += sprintf(str, "Panel %%x%d|", TH_PANEL); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Grid %%x%d|", TH_GRID); - str += sprintf(str, "View Sliders %%x%d|", TH_SHADE1); - str += sprintf(str, "Bars %%x%d|", TH_SHADE2); - str += sprintf(str, "Bars selected %%x%d|", TH_HILITE); - str += sprintf(str, "Strips %%x%d|", TH_STRIP); - str += sprintf(str, "Strips selected %%x%d|", TH_STRIP_SELECT); - str += sprintf(str, "Current Frame %%x%d", TH_CFRAME); - break; - case SPACE_ACTION: - //str += sprintf(str, "Panel %%x%d|", TH_PANEL); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Grid %%x%d|", TH_GRID); - str += sprintf(str, "RVK Sliders %%x%d|", TH_FACE); - str += sprintf(str, "View Sliders %%x%d|", TH_SHADE1); - str += sprintf(str, "Channels %%x%d|", TH_SHADE2); - str += sprintf(str, "Channels Selected %%x%d|", TH_HILITE); - str += sprintf(str, "Long Key %%x%d|", TH_STRIP); - str += sprintf(str, "Long Key selected %%x%d|", TH_STRIP_SELECT); - str += sprintf(str, "Current Frame %%x%d", TH_CFRAME); - break; - case SPACE_IMAGE: - str += sprintf(str, "%%l|"); - str += sprintf(str, "Vertex %%x%d|", TH_VERTEX); - str += sprintf(str, "Vertex Selected %%x%d|", TH_VERTEX_SELECT); - str += sprintf(str, "Vertex Size %%x%d|", TH_VERTEX_SIZE); - str += sprintf(str, "Face %%x%d|", TH_FACE); - str += sprintf(str, "Face Selected %%x%d", TH_FACE_SELECT); - break; - case SPACE_SEQ: - str += sprintf(str, "Grid %%x%d|", TH_GRID); - str += sprintf(str, "Window Sliders %%x%d|", TH_SHADE1); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Movie Strip %%x%d|", TH_SEQ_MOVIE); - str += sprintf(str, "Image Strip %%x%d|", TH_SEQ_IMAGE); - str += sprintf(str, "Scene Strip %%x%d|", TH_SEQ_SCENE); - str += sprintf(str, "Audio Strip %%x%d|", TH_SEQ_AUDIO); - str += sprintf(str, "Effect Strip %%x%d|", TH_SEQ_EFFECT); - str += sprintf(str, "Plugin Strip %%x%d|", TH_SEQ_PLUGIN); - str += sprintf(str, "Transition Strip %%x%d|", TH_SEQ_TRANSITION); - str += sprintf(str, "Meta Strip %%x%d|", TH_SEQ_META); - str += sprintf(str, "Current Frame %%x%d", TH_CFRAME); - break; - case SPACE_SOUND: - str += sprintf(str, "Grid %%x%d|", TH_GRID); - str += sprintf(str, "Window Slider %%x%d|", TH_SHADE1); - str += sprintf(str, "Current Frame %%x%d", TH_CFRAME); - break; - case SPACE_BUTS: - str += sprintf(str, "Panel %%x%d|", TH_PANEL); - break; - case SPACE_IMASEL: - str += sprintf(str, "Tiles %%x%d|", TH_PANEL); - str += sprintf(str, "Scrollbar %%x%d|", TH_SHADE1); - str += sprintf(str, "Scroll Handle %%x%d|", TH_SHADE2); - str += sprintf(str, "Selected File %%x%d|", TH_HILITE); - str += sprintf(str, "Active File %%x%d|", TH_ACTIVE); - str += sprintf(str, "Active File Text%%x%d|", TH_GRID); - break; - case SPACE_TEXT: - str += sprintf(str, "Scroll Bar %%x%d|", TH_SHADE1); - str += sprintf(str, "Selected Text %%x%d|", TH_SHADE2); - str += sprintf(str, "Cursor %%x%d|", TH_HILITE); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Syntax Builtin %%x%d|", TH_SYNTAX_B); - str += sprintf(str, "Syntax Special %%x%d|", TH_SYNTAX_V); - str += sprintf(str, "Syntax Comment %%x%d|", TH_SYNTAX_C); - str += sprintf(str, "Syntax Strings %%x%d|", TH_SYNTAX_L); - str += sprintf(str, "Syntax Numbers %%x%d|", TH_SYNTAX_N); - break; - case SPACE_TIME: - str += sprintf(str, "Grid %%x%d|", TH_GRID); - str += sprintf(str, "Current Frame %%x%d", TH_CFRAME); - break; - case SPACE_NODE: - str += sprintf(str, "Wires %%x%d|", TH_WIRE); - str += sprintf(str, "Wires Select %%x%d|", TH_EDGE_SELECT); - str += sprintf(str, "%%l|"); - str += sprintf(str, "Node Backdrop %%x%d|", TH_NODE); - str += sprintf(str, "In/Out Node %%x%d|", TH_NODE_IN_OUT); - str += sprintf(str, "Convertor Node %%x%d|", TH_NODE_CONVERTOR); - str += sprintf(str, "Operator Node %%x%d|", TH_NODE_OPERATOR); - str += sprintf(str, "Group Node %%x%d|", TH_NODE_GROUP); - break; - } - } - return cp; -} -void UI_SetTheme(ScrArea *sa) +void UI_SetTheme(int spacetype, int regionid) { - if(sa==NULL) { // called for safety, when delete themes + if(spacetype==0) { // called for safety, when delete themes theme_active= U.themes.first; theme_spacetype= SPACE_VIEW3D; + theme_regionid= RGN_TYPE_WINDOW; } else { // later on, a local theme can be found too theme_active= U.themes.first; - theme_spacetype= sa->spacetype; - + theme_spacetype= spacetype; + theme_regionid= regionid; } } @@ -985,3 +841,417 @@ void UI_GetColorPtrBlendShade3ubv(char *cp1, char *cp2, char *col, float fac, in col[2] = b; } +void UI_make_axis_color(char *src_col, char *dst_col, char axis) +{ + switch(axis) + { + case 'x': + case 'X': + dst_col[0]= src_col[0]>219?255:src_col[0]+36; + dst_col[1]= src_col[1]<26?0:src_col[1]-26; + dst_col[2]= src_col[2]<26?0:src_col[2]-26; + break; + case 'y': + case 'Y': + dst_col[0]= src_col[0]<46?0:src_col[0]-36; + dst_col[1]= src_col[1]>189?255:src_col[1]+66; + dst_col[2]= src_col[2]<46?0:src_col[2]-36; + break; + default: + dst_col[0]= src_col[0]<26?0:src_col[0]-26; + dst_col[1]= src_col[1]<26?0:src_col[1]-26; + dst_col[2]= src_col[2]>209?255:src_col[2]+46; + } +} + +/* ************************************************************* */ + +/* patching UserDef struct and Themes */ +void init_userdef_do_versions(void) +{ +// countall(); + + /* the UserDef struct is not corrected with do_versions() .... ugh! */ + if(U.wheellinescroll == 0) U.wheellinescroll = 3; + if(U.menuthreshold1==0) { + U.menuthreshold1= 5; + U.menuthreshold2= 2; + } + if(U.tb_leftmouse==0) { + U.tb_leftmouse= 5; + U.tb_rightmouse= 5; + } + if(U.mixbufsize==0) U.mixbufsize= 2048; + if (BLI_streq(U.tempdir, "/")) { + char *tmp= getenv("TEMP"); + + strcpy(U.tempdir, tmp?tmp:"/tmp/"); + } + if (U.savetime <= 0) { + U.savetime = 1; +// XXX error(".B.blend is buggy, please consider removing it.\n"); + } + /* transform widget settings */ + if(U.tw_hotspot==0) { + U.tw_hotspot= 14; + U.tw_size= 20; // percentage of window size + U.tw_handlesize= 16; // percentage of widget radius + } + if(U.pad_rot_angle==0) + U.pad_rot_angle= 15; + + if(U.flag & USER_CUSTOM_RANGE) + vDM_ColorBand_store(&U.coba_weight); /* signal for derivedmesh to use colorband */ + + if (G.main->versionfile <= 191) { + strcpy(U.plugtexdir, U.textudir); + strcpy(U.sounddir, "/"); + } + + /* patch to set Dupli Armature */ + if (G.main->versionfile < 220) { + U.dupflag |= USER_DUP_ARM; + } + + /* added seam, normal color, undo */ + if (G.main->versionfile <= 234) { + bTheme *btheme; + + U.uiflag |= USER_GLOBALUNDO; + if (U.undosteps==0) U.undosteps=32; + + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + /* check for alpha==0 is safe, then color was never set */ + if(btheme->tv3d.edge_seam[3]==0) { + SETCOL(btheme->tv3d.edge_seam, 230, 150, 50, 255); + } + if(btheme->tv3d.normal[3]==0) { + SETCOL(btheme->tv3d.normal, 0x22, 0xDD, 0xDD, 255); + } + if(btheme->tv3d.face_dot[3]==0) { + SETCOL(btheme->tv3d.face_dot, 255, 138, 48, 255); + btheme->tv3d.facedot_size= 4; + } + } + } + if (G.main->versionfile <= 235) { + /* illegal combo... */ + if (U.flag & USER_LMOUSESELECT) + U.flag &= ~USER_TWOBUTTONMOUSE; + } + if (G.main->versionfile <= 236) { + bTheme *btheme; + /* new space type */ + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + /* check for alpha==0 is safe, then color was never set */ + if(btheme->ttime.back[3]==0) { + btheme->ttime = btheme->tsnd; // copy from sound + } + if(btheme->text.syntaxn[3]==0) { + SETCOL(btheme->text.syntaxn, 0, 0, 200, 255); /* Numbers Blue*/ + SETCOL(btheme->text.syntaxl, 100, 0, 0, 255); /* Strings red */ + SETCOL(btheme->text.syntaxc, 0, 100, 50, 255); /* Comments greenish */ + SETCOL(btheme->text.syntaxv, 95, 95, 0, 255); /* Special */ + SETCOL(btheme->text.syntaxb, 128, 0, 80, 255); /* Builtin, red-purple */ + } + } + } + if (G.main->versionfile <= 237) { + bTheme *btheme; + /* bone colors */ + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + /* check for alpha==0 is safe, then color was never set */ + if(btheme->tv3d.bone_solid[3]==0) { + SETCOL(btheme->tv3d.bone_solid, 200, 200, 200, 255); + SETCOL(btheme->tv3d.bone_pose, 80, 200, 255, 80); + } + } + } + if (G.main->versionfile <= 238) { + bTheme *btheme; + /* bone colors */ + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + /* check for alpha==0 is safe, then color was never set */ + if(btheme->tnla.strip[3]==0) { + SETCOL(btheme->tnla.strip_select, 0xff, 0xff, 0xaa, 255); + SETCOL(btheme->tnla.strip, 0xe4, 0x9c, 0xc6, 255); + } + } + } + if (G.main->versionfile <= 239) { + bTheme *btheme; + + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + /* Lamp theme, check for alpha==0 is safe, then color was never set */ + if(btheme->tv3d.lamp[3]==0) { + SETCOL(btheme->tv3d.lamp, 0, 0, 0, 40); +/* TEMPORAL, remove me! (ton) */ + U.uiflag |= USER_PLAINMENUS; + } + + } + if(U.obcenter_dia==0) U.obcenter_dia= 6; + } + if (G.main->versionfile <= 241) { + bTheme *btheme; + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + /* Node editor theme, check for alpha==0 is safe, then color was never set */ + if(btheme->tnode.syntaxn[3]==0) { + /* re-uses syntax color storage */ + btheme->tnode= btheme->tv3d; + SETCOL(btheme->tnode.edge_select, 255, 255, 255, 255); + SETCOL(btheme->tnode.syntaxl, 150, 150, 150, 255); /* TH_NODE, backdrop */ + SETCOL(btheme->tnode.syntaxn, 129, 131, 144, 255); /* in/output */ + SETCOL(btheme->tnode.syntaxb, 127,127,127, 255); /* operator */ + SETCOL(btheme->tnode.syntaxv, 142, 138, 145, 255); /* generator */ + SETCOL(btheme->tnode.syntaxc, 120, 145, 120, 255); /* group */ + } + /* Group theme colors */ + if(btheme->tv3d.group[3]==0) { + SETCOL(btheme->tv3d.group, 0x10, 0x40, 0x10, 255); + SETCOL(btheme->tv3d.group_active, 0x66, 0xFF, 0x66, 255); + } + /* Sequence editor theme*/ + if(btheme->tseq.movie[3]==0) { + SETCOL(btheme->tseq.movie, 81, 105, 135, 255); + SETCOL(btheme->tseq.image, 109, 88, 129, 255); + SETCOL(btheme->tseq.scene, 78, 152, 62, 255); + SETCOL(btheme->tseq.audio, 46, 143, 143, 255); + SETCOL(btheme->tseq.effect, 169, 84, 124, 255); + SETCOL(btheme->tseq.plugin, 126, 126, 80, 255); + SETCOL(btheme->tseq.transition, 162, 95, 111, 255); + SETCOL(btheme->tseq.meta, 109, 145, 131, 255); + } + } + + /* set defaults for 3D View rotating axis indicator */ + /* since size can't be set to 0, this indicates it's not saved in .B.blend */ + if (U.rvisize == 0) { + U.rvisize = 15; + U.rvibright = 8; + U.uiflag |= USER_SHOW_ROTVIEWICON; + } + + } + if (G.main->versionfile <= 242) { + bTheme *btheme; + + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + /* long keyframe color */ + /* check for alpha==0 is safe, then color was never set */ + if(btheme->tact.strip[3]==0) { + SETCOL(btheme->tv3d.edge_sharp, 255, 32, 32, 255); + SETCOL(btheme->tact.strip_select, 0xff, 0xff, 0xaa, 204); + SETCOL(btheme->tact.strip, 0xe4, 0x9c, 0xc6, 204); + } + + /* IPO-Editor - Vertex Size*/ + if(btheme->tipo.vertex_size == 0) { + btheme->tipo.vertex_size= 3; + } + } + } + if (G.main->versionfile <= 243) { + /* set default number of recently-used files (if not set) */ + if (U.recent_files == 0) U.recent_files = 10; + } + if (G.main->versionfile < 245 || (G.main->versionfile == 245 && G.main->subversionfile < 3)) { + bTheme *btheme; + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + SETCOL(btheme->tv3d.editmesh_active, 255, 255, 255, 128); + } + if(U.coba_weight.tot==0) + init_colorband(&U.coba_weight, 1); + } + if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) { + bTheme *btheme; + for (btheme= U.themes.first; btheme; btheme= btheme->next) { + /* these should all use the same colour */ + SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255); + } + } + if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) { + bTheme *btheme; + for (btheme= U.themes.first; btheme; btheme= btheme->next) { + /* these should all use the same color */ + SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255); + SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255); + } + } + if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 13)) { + bTheme *btheme; + for (btheme= U.themes.first; btheme; btheme= btheme->next) { + /* action channel groups (recolor anyway) */ + SETCOL(btheme->tact.group, 0x39, 0x7d, 0x1b, 255); + SETCOL(btheme->tact.group_active, 0x7d, 0xe9, 0x60, 255); + + /* bone custom-color sets */ + // FIXME: this check for initialised colors is bad + if (btheme->tarm[0].solid[3] == 0) { + /* set 1 */ + SETCOL(btheme->tarm[0].solid, 0x9a, 0x00, 0x00, 255); + SETCOL(btheme->tarm[0].select, 0xbd, 0x11, 0x11, 255); + SETCOL(btheme->tarm[0].active, 0xf7, 0x0a, 0x0a, 255); + /* set 2 */ + SETCOL(btheme->tarm[1].solid, 0xf7, 0x40, 0x18, 255); + SETCOL(btheme->tarm[1].select, 0xf6, 0x69, 0x13, 255); + SETCOL(btheme->tarm[1].active, 0xfa, 0x99, 0x00, 255); + /* set 3 */ + SETCOL(btheme->tarm[2].solid, 0x1e, 0x91, 0x09, 255); + SETCOL(btheme->tarm[2].select, 0x59, 0xb7, 0x0b, 255); + SETCOL(btheme->tarm[2].active, 0x83, 0xef, 0x1d, 255); + /* set 4 */ + SETCOL(btheme->tarm[3].solid, 0x0a, 0x36, 0x94, 255); + SETCOL(btheme->tarm[3].select, 0x36, 0x67, 0xdf, 255); + SETCOL(btheme->tarm[3].active, 0x5e, 0xc1, 0xef, 255); + /* set 5 */ + SETCOL(btheme->tarm[4].solid, 0xa9, 0x29, 0x4e, 255); + SETCOL(btheme->tarm[4].select, 0xc1, 0x41, 0x6a, 255); + SETCOL(btheme->tarm[4].active, 0xf0, 0x5d, 0x91, 255); + /* set 6 */ + SETCOL(btheme->tarm[5].solid, 0x43, 0x0c, 0x78, 255); + SETCOL(btheme->tarm[5].select, 0x54, 0x3a, 0xa3, 255); + SETCOL(btheme->tarm[5].active, 0x87, 0x64, 0xd5, 255); + /* set 7 */ + SETCOL(btheme->tarm[6].solid, 0x24, 0x78, 0x5a, 255); + SETCOL(btheme->tarm[6].select, 0x3c, 0x95, 0x79, 255); + SETCOL(btheme->tarm[6].active, 0x6f, 0xb6, 0xab, 255); + /* set 8 */ + SETCOL(btheme->tarm[7].solid, 0x4b, 0x70, 0x7c, 255); + SETCOL(btheme->tarm[7].select, 0x6a, 0x86, 0x91, 255); + SETCOL(btheme->tarm[7].active, 0x9b, 0xc2, 0xcd, 255); + /* set 9 */ + SETCOL(btheme->tarm[8].solid, 0xf4, 0xc9, 0x0c, 255); + SETCOL(btheme->tarm[8].select, 0xee, 0xc2, 0x36, 255); + SETCOL(btheme->tarm[8].active, 0xf3, 0xff, 0x00, 255); + /* set 10 */ + SETCOL(btheme->tarm[9].solid, 0x1e, 0x20, 0x24, 255); + SETCOL(btheme->tarm[9].select, 0x48, 0x4c, 0x56, 255); + SETCOL(btheme->tarm[9].active, 0xff, 0xff, 0xff, 255); + /* set 11 */ + SETCOL(btheme->tarm[10].solid, 0x6f, 0x2f, 0x6a, 255); + SETCOL(btheme->tarm[10].select, 0x98, 0x45, 0xbe, 255); + SETCOL(btheme->tarm[10].active, 0xd3, 0x30, 0xd6, 255); + /* set 12 */ + SETCOL(btheme->tarm[11].solid, 0x6c, 0x8e, 0x22, 255); + SETCOL(btheme->tarm[11].select, 0x7f, 0xb0, 0x22, 255); + SETCOL(btheme->tarm[11].active, 0xbb, 0xef, 0x5b, 255); + /* set 13 */ + SETCOL(btheme->tarm[12].solid, 0x8d, 0x8d, 0x8d, 255); + SETCOL(btheme->tarm[12].select, 0xb0, 0xb0, 0xb0, 255); + SETCOL(btheme->tarm[12].active, 0xde, 0xde, 0xde, 255); + /* set 14 */ + SETCOL(btheme->tarm[13].solid, 0x83, 0x43, 0x26, 255); + SETCOL(btheme->tarm[13].select, 0x8b, 0x58, 0x11, 255); + SETCOL(btheme->tarm[13].active, 0xbd, 0x6a, 0x11, 255); + /* set 15 */ + SETCOL(btheme->tarm[14].solid, 0x08, 0x31, 0x0e, 255); + SETCOL(btheme->tarm[14].select, 0x1c, 0x43, 0x0b, 255); + SETCOL(btheme->tarm[14].active, 0x34, 0x62, 0x2b, 255); + } + } + } + if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 16)) { + U.flag |= USER_ADD_VIEWALIGNED|USER_ADD_EDITMODE; + } + if ((G.main->versionfile < 247) || (G.main->versionfile == 247 && G.main->subversionfile <= 2)) { + bTheme *btheme; + + /* adjust themes */ + for (btheme= U.themes.first; btheme; btheme= btheme->next) { + char *col; + + /* IPO Editor: Handles/Vertices */ + col = btheme->tipo.vertex; + SETCOL(btheme->tipo.handle_vertex, col[0], col[1], col[2], 255); + col = btheme->tipo.vertex_select; + SETCOL(btheme->tipo.handle_vertex_select, col[0], col[1], col[2], 255); + btheme->tipo.handle_vertex_size= btheme->tipo.vertex_size; + + /* Sequence/Image Editor: colors for GPencil text */ + col = btheme->tv3d.bone_pose; + SETCOL(btheme->tseq.bone_pose, col[0], col[1], col[2], 255); + SETCOL(btheme->tima.bone_pose, col[0], col[1], col[2], 255); + col = btheme->tv3d.vertex_select; + SETCOL(btheme->tseq.vertex_select, col[0], col[1], col[2], 255); + } + } + if (G.main->versionfile < 250) { + bTheme *btheme; + + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + /* this was not properly initialized in 2.45 */ + if(btheme->tima.face_dot[3]==0) { + SETCOL(btheme->tima.editmesh_active, 255, 255, 255, 128); + SETCOL(btheme->tima.face_dot, 255, 133, 0, 255); + btheme->tima.facedot_size= 2; + } + + /* DopeSheet - (Object) Channel color */ + SETCOL(btheme->tact.ds_channel, 82, 96, 110, 255); + SETCOL(btheme->tact.ds_subchannel, 124, 137, 150, 255); + /* DopeSheet - Group Channel color (saner version) */ + SETCOL(btheme->tact.group, 79, 101, 73, 255); + SETCOL(btheme->tact.group_active, 135, 177, 125, 255); + + /* Graph Editor - (Object) Channel color */ + SETCOL(btheme->tipo.ds_channel, 82, 96, 110, 255); + SETCOL(btheme->tipo.ds_subchannel, 124, 137, 150, 255); + /* Graph Editor - Group Channel color */ + SETCOL(btheme->tipo.group, 79, 101, 73, 255); + SETCOL(btheme->tipo.group_active, 135, 177, 125, 255); + } + + /* adjust grease-pencil distances */ + U.gp_manhattendist= 1; + U.gp_euclideandist= 2; + + /* adjust default interpolation for new IPO-curves */ + U.ipo_new= BEZT_IPO_BEZ; + } + + if (G.main->versionfile < 250 || (G.main->versionfile == 250 && G.main->subversionfile < 1)) { + bTheme *btheme; + + for(btheme= U.themes.first; btheme; btheme= btheme->next) { + + /* common (new) variables, it checks for alpha==0 */ + ui_theme_init_new(btheme); + + if(btheme->tui.wcol_num.outline[3]==0) + ui_widget_color_init(&btheme->tui); + } + } + + /* GL Texture Garbage Collection (variable abused above!) */ + if (U.textimeout == 0) { + U.texcollectrate = 60; + U.textimeout = 120; + } + if (U.memcachelimit <= 0) { + U.memcachelimit = 32; + } + if (U.frameserverport == 0) { + U.frameserverport = 8080; + } + + /* funny name, but it is GE stuff, moves userdef stuff to engine */ +// XXX space_set_commmandline_options(); + /* this timer uses U */ +// XXX reset_autosave(); + +} + + + diff --git a/source/blender/editors/interface/view2d.c b/source/blender/editors/interface/view2d.c index 3b503f00fd3..191f38ad7d0 100644 --- a/source/blender/editors/interface/view2d.c +++ b/source/blender/editors/interface/view2d.c @@ -47,9 +47,9 @@ #include "BIF_gl.h" #include "BIF_glutil.h" -#include "ED_screen.h" +#include "BLF_api.h" -#include "BMF_Api.h" +#include "ED_screen.h" #include "UI_interface.h" #include "UI_resources.h" @@ -1391,8 +1391,7 @@ static void scroll_printstr(View2DScrollers *scrollers, Scene *scene, float x, f } /* draw it */ - glRasterPos2f(x, y); - BMF_DrawString(G.fonts, str); // XXX check this again when new text-drawing api is done + BLF_draw_default(x, y, 0.0f, str); } /* local defines for scrollers drawing */ diff --git a/source/blender/editors/mesh/Makefile b/source/blender/editors/mesh/Makefile index 60b1fa1c329..650771519cd 100644 --- a/source/blender/editors/mesh/Makefile +++ b/source/blender/editors/mesh/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I$(NAN_ELBEEM)/include diff --git a/source/blender/editors/mesh/SConscript b/source/blender/editors/mesh/SConscript index e99351e1a70..df1f297698d 100644 --- a/source/blender/editors/mesh/SConscript +++ b/source/blender/editors/mesh/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu' +incs += ' #/intern/guardedalloc ../../gpu' incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern' env.BlenderLib ( 'bf_editors_mesh', sources, Split(incs), [], libtype=['core'], priority=[45] ) diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c index f3868b1f01c..b6e679468e0 100644 --- a/source/blender/editors/mesh/editmesh_tools.c +++ b/source/blender/editors/mesh/editmesh_tools.c @@ -82,8 +82,6 @@ editmesh_tool.c: UI called tools for editmesh, geometry changes here, otherwise #include "WM_api.h" #include "WM_types.h" -#include "BMF_Api.h" - #include "ED_mesh.h" #include "ED_view3d.h" #include "ED_util.h" @@ -6587,11 +6585,13 @@ void MESH_OT_subdivide_smooth(wmOperatorType *ot) static int subdivs_invoke(bContext *C, wmOperator *op, wmEvent *event) { - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; - head= uiPupMenuBegin("Subdivision Type", 0); - uiMenuItemsEnumO(head, "MESH_OT_subdivs", "type"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Subdivision Type", 0); + layout= uiPupMenuLayout(pup); + uiItemsEnumO(layout, "MESH_OT_subdivs", "type"); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/object/Makefile b/source/blender/editors/object/Makefile index 9011f566bc6..c0312023bfd 100644 --- a/source/blender/editors/object/Makefile +++ b/source/blender/editors/object/Makefile @@ -37,7 +37,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I../../windowmanager diff --git a/source/blender/editors/object/SConscript b/source/blender/editors/object/SConscript index 5cd7a3b91af..3371e172a82 100644 --- a/source/blender/editors/object/SConscript +++ b/source/blender/editors/object/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc' -incs += ' #/intern/guardedalloc #intern/bmfont' +incs += ' #/intern/guardedalloc' incs += ' ../../makesrna ../../python' defs = [] diff --git a/source/blender/editors/object/object_edit.c b/source/blender/editors/object/object_edit.c index eeba0ad22ae..68a2cf04692 100644 --- a/source/blender/editors/object/object_edit.c +++ b/source/blender/editors/object/object_edit.c @@ -120,8 +120,6 @@ #include "ED_util.h" #include "ED_view3d.h" -#include "BMF_Api.h" - #include "BIF_transform.h" #include "UI_interface.h" @@ -405,7 +403,7 @@ static int object_add_mesh_exec(bContext *C, wmOperator *op) void OBJECT_OT_mesh_add(wmOperatorType *ot) { /* identifiers */ - ot->name= "Add Mesh"; + ot->name= "Mesh"; ot->description = "Add a mesh object to the scene."; ot->idname= "OBJECT_OT_mesh_add"; @@ -462,14 +460,16 @@ static int object_add_curve_exec(bContext *C, wmOperator *op) static int object_add_curve_invoke(bContext *C, wmOperator *op, wmEvent *event) { Object *obedit= CTX_data_edit_object(C); - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; - head= uiPupMenuBegin(op->type->name, 0); + pup= uiPupMenuBegin(op->type->name, 0); + layout= uiPupMenuLayout(pup); if(!obedit || obedit->type == OB_CURVE) - uiMenuItemsEnumO(head, op->type->idname, "type"); + uiItemsEnumO(layout, op->type->idname, "type"); else - uiMenuItemsEnumO(head, "OBJECT_OT_surface_add", "type"); - uiPupMenuEnd(C, head); + uiItemsEnumO(layout, "OBJECT_OT_surface_add", "type"); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } @@ -477,7 +477,7 @@ static int object_add_curve_invoke(bContext *C, wmOperator *op, wmEvent *event) void OBJECT_OT_curve_add(wmOperatorType *ot) { /* identifiers */ - ot->name= "Add Curve"; + ot->name= "Curve"; ot->description = "Add a curve object to the scene."; ot->idname= "OBJECT_OT_curve_add"; @@ -535,7 +535,7 @@ static int object_add_surface_exec(bContext *C, wmOperator *op) void OBJECT_OT_surface_add(wmOperatorType *ot) { /* identifiers */ - ot->name= "Add Surface"; + ot->name= "Surface"; ot->description = "Add a surface object to the scene."; ot->idname= "OBJECT_OT_surface_add"; @@ -572,7 +572,7 @@ static int object_add_text_exec(bContext *C, wmOperator *op) void OBJECT_OT_text_add(wmOperatorType *ot) { /* identifiers */ - ot->name= "Add Text"; + ot->name= "Text"; ot->description = "Add a text object to the scene"; ot->idname= "OBJECT_OT_text_add"; @@ -617,7 +617,7 @@ static int object_armature_add_exec(bContext *C, wmOperator *op) void OBJECT_OT_armature_add(wmOperatorType *ot) { /* identifiers */ - ot->name= "Add Armature"; + ot->name= "Armature"; ot->description = "Add an armature object to the scene."; ot->idname= "OBJECT_OT_armature_add"; @@ -632,20 +632,21 @@ void OBJECT_OT_armature_add(wmOperatorType *ot) static int object_primitive_add_invoke(bContext *C, wmOperator *op, wmEvent *event) { - uiMenuItem *head= uiPupMenuBegin("Add Object", 0); + uiPopupMenu *pup= uiPupMenuBegin("Add Object", 0); + uiLayout *layout= uiPupMenuLayout(pup); - uiMenuLevelEnumO(head, "OBJECT_OT_mesh_add", "type"); - uiMenuLevelEnumO(head, "OBJECT_OT_curve_add", "type"); - uiMenuLevelEnumO(head, "OBJECT_OT_surface_add", "type"); - uiMenuItemO(head, 0, "OBJECT_OT_text_add"); - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_MBALL); - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_CAMERA); - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_LAMP); - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_EMPTY); - uiMenuItemO(head, 0, "OBJECT_OT_armature_add"); - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_object_add", "type", OB_LATTICE); + uiItemMenuEnumO(layout, NULL, ICON_OUTLINER_OB_MESH, "OBJECT_OT_mesh_add", "type"); + uiItemMenuEnumO(layout, NULL, ICON_OUTLINER_OB_CURVE, "OBJECT_OT_curve_add", "type"); + uiItemMenuEnumO(layout, NULL, ICON_OUTLINER_OB_SURFACE, "OBJECT_OT_surface_add", "type"); + uiItemO(layout, NULL, ICON_OUTLINER_OB_FONT, "OBJECT_OT_text_add"); + uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_META, "OBJECT_OT_object_add", "type", OB_MBALL); + uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_CAMERA, "OBJECT_OT_object_add", "type", OB_CAMERA); + uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_LAMP, "OBJECT_OT_object_add", "type", OB_LAMP); + uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_EMPTY, "OBJECT_OT_object_add", "type", OB_EMPTY); + uiItemO(layout, NULL, ICON_OUTLINER_OB_ARMATURE, "OBJECT_OT_armature_add"); + uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_LATTICE, "OBJECT_OT_object_add", "type", OB_LATTICE); - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); /* this operator is only for a menu, not used further */ return OPERATOR_CANCELLED; @@ -2622,26 +2623,27 @@ static int parent_set_exec(bContext *C, wmOperator *op) static int parent_set_invoke(bContext *C, wmOperator *op, wmEvent *event) { Object *ob= CTX_data_active_object(C); - uiMenuItem *head= uiPupMenuBegin("Set Parent To", 0); + uiPopupMenu *pup= uiPupMenuBegin("Set Parent To", 0); + uiLayout *layout= uiPupMenuLayout(pup); - uiMenuContext(head, WM_OP_EXEC_DEFAULT); - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_OBJECT); + uiLayoutContext(layout, WM_OP_EXEC_DEFAULT); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_OBJECT); /* ob becomes parent, make the associated menus */ if(ob->type==OB_ARMATURE) { - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_ARMATURE); - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_BONE); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_ARMATURE); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_BONE); } else if(ob->type==OB_CURVE) { - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_CURVE); - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_FOLLOW); - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_PATH_CONST); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_CURVE); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_FOLLOW); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_PATH_CONST); } else if(ob->type == OB_LATTICE) { - uiMenuItemEnumO(head, "", 0, "OBJECT_OT_parent_set", "type", PAR_LATTICE); + uiItemEnumO(layout, NULL, 0, "OBJECT_OT_parent_set", "type", PAR_LATTICE); } - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } @@ -3200,7 +3202,6 @@ void ED_object_exit_editmode(bContext *C, int flag) { Scene *scene= CTX_data_scene(C); Object *obedit= CTX_data_edit_object(C); - Object *ob; int freedata = flag & EM_FREEDATA; if(obedit==NULL) return; @@ -3248,22 +3249,20 @@ void ED_object_exit_editmode(bContext *C, int flag) // if(freedata) BLI_freelistN(&editelems); } - ob= obedit; + /* freedata only 0 now on file saves */ + if(freedata) { + /* for example; displist make is different in editmode */ + scene->obedit= NULL; // XXX for context + + /* also flush ob recalc, doesn't take much overhead, but used for particles */ + DAG_object_flush_update(scene, obedit, OB_RECALC_OB|OB_RECALC_DATA); - /* for example; displist make is different in editmode */ - if(freedata) obedit= NULL; - scene->obedit= obedit; // XXX for context - - /* also flush ob recalc, doesn't take much overhead, but used for particles */ - DAG_object_flush_update(scene, ob, OB_RECALC_OB|OB_RECALC_DATA); - - if(obedit==NULL) // XXX && (flag & EM_FREEUNDO)) ED_undo_push(C, "Editmode"); - if(flag & EM_WAITCURSOR) waitcursor(0); + if(flag & EM_WAITCURSOR) waitcursor(0); - WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, scene); - + WM_event_add_notifier(C, NC_SCENE|ND_MODE|NS_MODE_OBJECT, scene); + } } diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h index 1c56b0c7115..7203f56b40f 100644 --- a/source/blender/editors/object/object_intern.h +++ b/source/blender/editors/object/object_intern.h @@ -84,5 +84,8 @@ void GROUP_OT_objects_remove(struct wmOperatorType *ot); void GROUP_OT_objects_add_active(struct wmOperatorType *ot); void GROUP_OT_objects_remove_active(struct wmOperatorType *ot); +/* object_modifier.c */ +void OBJECT_OT_modifier_add(struct wmOperatorType *ot); + #endif /* ED_OBJECT_INTERN_H */ diff --git a/source/blender/editors/object/object_modifier.c b/source/blender/editors/object/object_modifier.c new file mode 100644 index 00000000000..b430cdd67bc --- /dev/null +++ b/source/blender/editors/object/object_modifier.c @@ -0,0 +1,98 @@ +/** + * $Id$ + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * Contributor(s): Blender Foundation, 2009 + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include + +#include "DNA_modifier_types.h" +#include "DNA_object_types.h" +#include "DNA_scene_types.h" + +#include "BLI_listbase.h" + +#include "BKE_context.h" +#include "BKE_depsgraph.h" +#include "BKE_modifier.h" + +#include "RNA_access.h" +#include "RNA_define.h" +#include "RNA_enum_types.h" + +#include "ED_screen.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "object_intern.h" + +/********************* add modifier operator ********************/ + +static int modifier_add_exec(bContext *C, wmOperator *op) +{ + Scene *scene= CTX_data_scene(C); + Object *ob = CTX_data_active_object(C); + ModifierData *md; + int type= RNA_enum_get(op->ptr, "type"); + ModifierTypeInfo *mti = modifierType_getInfo(type); + + if(mti->flags&eModifierTypeFlag_RequiresOriginalData) { + md = ob->modifiers.first; + + while(md && modifierType_getInfo(md->type)->type==eModifierTypeType_OnlyDeform) + md = md->next; + + BLI_insertlinkbefore(&ob->modifiers, md, modifier_new(type)); + } + else + BLI_addtail(&ob->modifiers, modifier_new(type)); + + DAG_object_flush_update(scene, ob, OB_RECALC_DATA); + WM_event_add_notifier(C, NC_OBJECT|ND_MODIFIER, ob); + + return OPERATOR_FINISHED; +} + +void OBJECT_OT_modifier_add(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Add Modifier"; + ot->description = "Add a modifier to the active object."; + ot->idname= "OBJECT_OT_modifier_add"; + + /* api callbacks */ + ot->invoke= WM_menu_invoke; + ot->exec= modifier_add_exec; + + ot->poll= ED_operator_object_active; + + /* flags */ + ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + + /* XXX only some types should be here */ + RNA_def_enum(ot->srna, "type", modifier_type_items, 0, "Type", ""); +} + diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c index 6c8c6e6b60f..e668c494fba 100644 --- a/source/blender/editors/object/object_ops.c +++ b/source/blender/editors/object/object_ops.c @@ -98,6 +98,8 @@ void ED_operatortypes_object(void) WM_operatortype_append(OBJECT_OT_armature_add); WM_operatortype_append(OBJECT_OT_object_add); WM_operatortype_append(OBJECT_OT_primitive_add); + + WM_operatortype_append(OBJECT_OT_modifier_add); } void ED_keymap_object(wmWindowManager *wm) diff --git a/source/blender/editors/physics/Makefile b/source/blender/editors/physics/Makefile index bd2dbc65f91..a71ea9e2083 100644 --- a/source/blender/editors/physics/Makefile +++ b/source/blender/editors/physics/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I$(NAN_ELBEEM)/include diff --git a/source/blender/editors/physics/SConscript b/source/blender/editors/physics/SConscript index 241962442d4..5718ae0c217 100644 --- a/source/blender/editors/physics/SConscript +++ b/source/blender/editors/physics/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu' +incs += ' #/intern/guardedalloc ../../gpu' incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern' env.BlenderLib ( 'bf_editors_physics', sources, Split(incs), [], libtype=['core'], priority=[45] ) diff --git a/source/blender/editors/physics/editparticle.c b/source/blender/editors/physics/editparticle.c index 96f3ad2f8df..0d58a0bfdcd 100644 --- a/source/blender/editors/physics/editparticle.c +++ b/source/blender/editors/physics/editparticle.c @@ -3839,19 +3839,21 @@ void PE_change_act_psys(Scene *scene, Object *ob, ParticleSystem *psys) static int specials_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) { Scene *scene= CTX_data_scene(C); - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; - head= uiPupMenuBegin("Specials", 0); + pup= uiPupMenuBegin("Specials", 0); + layout= uiPupMenuLayout(pup); - uiMenuItemO(head, 0, "PARTICLE_OT_rekey"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_rekey"); if(scene->selectmode & SCE_SELECT_POINT) { - uiMenuItemO(head, 0, "PARTICLE_OT_subdivide"); - uiMenuItemO(head, 0, "PARTICLE_OT_select_first"); - uiMenuItemO(head, 0, "PARTICLE_OT_select_last"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_subdivide"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_select_first"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_select_last"); } - uiMenuItemO(head, 0, "PARTICLE_OT_remove_doubles"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_remove_doubles"); - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/preview/Makefile b/source/blender/editors/preview/Makefile index 84514d73570..c44da6753f3 100644 --- a/source/blender/editors/preview/Makefile +++ b/source/blender/editors/preview/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I$(NAN_ELBEEM)/include diff --git a/source/blender/editors/preview/SConscript b/source/blender/editors/preview/SConscript index dcc80e8c626..922232822ff 100644 --- a/source/blender/editors/preview/SConscript +++ b/source/blender/editors/preview/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' #/intern/guardedalloc #intern/bmfont ../../gpu' +incs += ' #/intern/guardedalloc ../../gpu' incs += ' ../../makesrna ../../render/extern/include #/intern/elbeem/extern' incs += ' ../../blenloader' diff --git a/source/blender/editors/screen/CMakeLists.txt b/source/blender/editors/screen/CMakeLists.txt index 42480f65268..4ed1e59a87f 100644 --- a/source/blender/editors/screen/CMakeLists.txt +++ b/source/blender/editors/screen/CMakeLists.txt @@ -33,7 +33,7 @@ SET(INC ../../windowmanager ../../editors/include ../../../../intern/guardedalloc ../../../../intern/memutil ../../blenlib ../../makesdna ../../makesrna ../../blenkernel - ../../include ../../../../intern/bmfont ../../imbuf + ../../include ../../imbuf ../../render/extern/include ../../../../intern/bsp/extern ../../radiosity/extern/include ../../../intern/decimation/extern ../../blenloader @@ -45,9 +45,7 @@ SET(INC ../../windowmanager ) IF(WITH_INTERNATIONAL) - SET(INC ${INC} ../../ftfont) ADD_DEFINITIONS(-DINTERNATIONAL) - ADD_DEFINITIONS(-DFTGL_STATIC_LIBRARY) ENDIF(WITH_INTERNATIONAL) IF(WITH_OPENEXR) diff --git a/source/blender/editors/screen/Makefile b/source/blender/editors/screen/Makefile index d18d15d00d9..cf6e692c304 100644 --- a/source/blender/editors/screen/Makefile +++ b/source/blender/editors/screen/Makefile @@ -37,7 +37,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include # not very neat.... CPPFLAGS += -I../../windowmanager @@ -49,6 +48,7 @@ CPPFLAGS += -I../../makesrna CPPFLAGS += -I../../imbuf CPPFLAGS += -I../../python CPPFLAGS += -I../../render/extern/include +CPPFLAGS += -I../../blenfont CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include # own include diff --git a/source/blender/editors/screen/SConscript b/source/blender/editors/screen/SConscript index c291533790a..3972efd8eed 100644 --- a/source/blender/editors/screen/SConscript +++ b/source/blender/editors/screen/SConscript @@ -3,10 +3,10 @@ Import ('env') sources = env.Glob('*.c') -incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' +incs = '../include ../../blenlib ../../blenkernel ../../blenfont ../../makesdna ../../imbuf' incs += ' ../../blenloader ../../windowmanager ../../python ../../makesrna' incs += ' ../../render/extern/include' -incs += ' #/intern/guardedalloc #/extern/glew/include #intern/bmfont' +incs += ' #/intern/guardedalloc #/extern/glew/include' defs = '' diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c index 54775c4e5ab..6b7b7a914f4 100644 --- a/source/blender/editors/screen/area.c +++ b/source/blender/editors/screen/area.c @@ -50,13 +50,12 @@ #include "BIF_gl.h" #include "BIF_glutil.h" +#include "BLF_api.h" #include "UI_interface.h" #include "UI_resources.h" #include "UI_view2d.h" -#include "BMF_Api.h" - #ifndef DISABLE_PYTHON #include "BPY_extern.h" #endif @@ -65,12 +64,15 @@ /* general area and region code */ -static void region_draw_emboss(ARegion *ar) +static void region_draw_emboss(ARegion *ar, rcti *scirct) { - short winx, winy; + rcti rect; - winx= ar->winrct.xmax-ar->winrct.xmin; - winy= ar->winrct.ymax-ar->winrct.ymin; + /* translate scissor rect to region space */ + rect.xmin= scirct->xmin - ar->winrct.xmin; + rect.ymin= scirct->ymin - ar->winrct.ymin; + rect.xmax= scirct->xmax - ar->winrct.xmin; + rect.ymax= scirct->ymax - ar->winrct.ymin; /* set transp line */ glEnable( GL_BLEND ); @@ -78,19 +80,19 @@ static void region_draw_emboss(ARegion *ar) /* right */ glColor4ub(0,0,0, 50); - sdrawline(winx, 0, winx, winy); + sdrawline(rect.xmax, rect.ymin, rect.xmax, rect.ymax); /* bottom */ glColor4ub(0,0,0, 80); - sdrawline(0, 0, winx, 0); + sdrawline(rect.xmin, rect.ymin, rect.xmax, rect.ymin); /* top */ glColor4ub(255,255,255, 60); - sdrawline(0, winy, winx, winy); + sdrawline(rect.xmin, rect.ymax, rect.xmax, rect.ymax); /* left */ glColor4ub(255,255,255, 50); - sdrawline(0, 0, 0, winy); + sdrawline(rect.xmin, rect.ymin, rect.xmin, rect.ymax); glDisable( GL_BLEND ); } @@ -161,6 +163,27 @@ void ED_area_overdraw_flush(bContext *C, ScrArea *sa, ARegion *ar) } } +static void area_draw_azone(short x1, short y1, short x2, short y2) +{ + float xmin = x1; + float xmax = x2-2; + float ymin = y1-1; + float ymax = y2-3; + + float dx= 0.3f*(xmax-xmin); + float dy= 0.3f*(ymax-ymin); + + glColor4ub(255, 255, 255, 80); + fdrawline(xmin, ymax, xmax, ymin); + fdrawline(xmin, ymax-dy, xmax-dx, ymin); + fdrawline(xmin, ymax-2*dy, xmax-2*dx, ymin); + + glColor4ub(0, 0, 0, 150); + fdrawline(xmin, ymax+1, xmax+1, ymin); + fdrawline(xmin, ymax-dy+1, xmax-dx+1, ymin); + fdrawline(xmin, ymax-2*dy+1, xmax-2*dx+1, ymin); +} + /* only exported for WM */ void ED_area_overdraw(bContext *C) { @@ -179,8 +202,7 @@ void ED_area_overdraw(bContext *C) for(az= sa->actionzones.first; az; az= az->next) { if(az->do_draw) { if(az->type==AZONE_TRI) { - glColor4ub(0, 0, 0, 70); - sdrawtrifill(az->x1, az->y1, az->x2, az->y2); + area_draw_azone(az->x1, az->y1, az->x2, az->y2); } az->do_draw= 0; } @@ -190,49 +212,74 @@ void ED_area_overdraw(bContext *C) } +/* get scissor rect, checking overlapping regions */ +static void region_scissor_winrct(ARegion *ar, rcti *winrct) +{ + *winrct= ar->winrct; + + if(ELEM(ar->alignment, RGN_OVERLAP_LEFT, RGN_OVERLAP_RIGHT)) + return; + + while(ar->prev) { + ar= ar->prev; + + if(ar->flag & RGN_FLAG_HIDDEN); + else if(ar->alignment==RGN_OVERLAP_LEFT) { + winrct->xmin= ar->winrct.xmax + 1; + } + else if(ar->alignment==RGN_OVERLAP_RIGHT) { + winrct->xmax= ar->winrct.xmin - 1; + } + else break; + } +} + /* only exported for WM */ void ED_region_do_draw(bContext *C, ARegion *ar) { wmWindow *win= CTX_wm_window(C); ScrArea *sa= CTX_wm_area(C); ARegionType *at= ar->type; - + rcti winrct; + + /* checks other overlapping regions */ + region_scissor_winrct(ar, &winrct); + /* if no partial draw rect set, full rect */ if(ar->drawrct.xmin == ar->drawrct.xmax) - ar->drawrct= ar->winrct; - - /* extra clip for safety */ - ar->drawrct.xmin= MAX2(ar->winrct.xmin, ar->drawrct.xmin); - ar->drawrct.ymin= MAX2(ar->winrct.ymin, ar->drawrct.ymin); - ar->drawrct.xmax= MIN2(ar->winrct.xmax, ar->drawrct.xmax); - ar->drawrct.ymax= MIN2(ar->winrct.ymax, ar->drawrct.ymax); + ar->drawrct= winrct; + else { + /* extra clip for safety */ + ar->drawrct.xmin= MAX2(winrct.xmin, ar->drawrct.xmin); + ar->drawrct.ymin= MAX2(winrct.ymin, ar->drawrct.ymin); + ar->drawrct.xmax= MIN2(winrct.xmax, ar->drawrct.xmax); + ar->drawrct.ymax= MIN2(winrct.ymax, ar->drawrct.ymax); + } /* note; this sets state, so we can use wmOrtho and friends */ wmSubWindowScissorSet(win, ar->swinid, &ar->drawrct); + UI_SetTheme(sa?sa->spacetype:0, ar->type?ar->type->regionid:0); + /* optional header info instead? */ if(ar->headerstr) { float col[3]; - UI_SetTheme(sa); UI_GetThemeColor3fv(TH_HEADER, col); glClearColor(col[0], col[1], col[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); - UI_ThemeColor(TH_MENU_TEXT); - glRasterPos2i(20, 6); - BMF_DrawString(G.font, ar->headerstr); + UI_ThemeColor(TH_TEXT); + BLF_draw_default(20, 6, 0.0f, ar->headerstr); } else if(at->draw) { - UI_SetTheme(sa); at->draw(C, ar); - UI_SetTheme(NULL); } - if(sa) - region_draw_emboss(ar); - uiFreeInactiveBlocks(C, &ar->uiblocks); + if(sa) + region_draw_emboss(ar, &winrct); + /* XXX test: add convention to end regions always in pixel space, for drawing of borders/gestures etc */ ED_region_pixelspace(ar); diff --git a/source/blender/editors/screen/screen_ops.c b/source/blender/editors/screen/screen_ops.c index bf57e2e7d52..e441a93fe23 100644 --- a/source/blender/editors/screen/screen_ops.c +++ b/source/blender/editors/screen/screen_ops.c @@ -1573,19 +1573,21 @@ static int repeat_history_invoke(bContext *C, wmOperator *op, wmEvent *event) { wmWindowManager *wm= CTX_wm_manager(C); wmOperator *lastop; - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; int items, i; items= BLI_countlist(&wm->operators); if(items==0) return OPERATOR_CANCELLED; - head= uiPupMenuBegin(op->type->name, 0); + pup= uiPupMenuBegin(op->type->name, 0); + layout= uiPupMenuLayout(pup); for (i=items-1, lastop= wm->operators.last; lastop; lastop= lastop->prev, i--) - uiMenuItemIntO(head, lastop->type->name, 0, op->type->idname, "index", i); + uiItemIntO(layout, lastop->type->name, 0, op->type->idname, "index", i); - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } @@ -1813,27 +1815,28 @@ static void testfunc(bContext *C, void *argv, int arg) printf("arg %d\n", arg); } -static void newlevel1(bContext *C, uiMenuItem *head, void *arg) +static void newlevel1(bContext *C, uiLayout *layout, void *arg) { - uiMenuFunc(head, testfunc, NULL); + uiLayoutFunc(layout, testfunc, NULL); - uiMenuItemVal(head, "First", ICON_PROP_ON, 1); - uiMenuItemVal(head, "Second", ICON_PROP_CON, 2); - uiMenuItemVal(head, "Third", ICON_SMOOTHCURVE, 3); - uiMenuItemVal(head, "Fourth", ICON_SHARPCURVE, 4); + uiItemV(layout, "First", ICON_PROP_ON, 1); + uiItemV(layout, "Second", ICON_PROP_CON, 2); + uiItemV(layout, "Third", ICON_SMOOTHCURVE, 3); + uiItemV(layout, "Fourth", ICON_SHARPCURVE, 4); } static int testing123(bContext *C, wmOperator *op, wmEvent *event) { - uiMenuItem *head= uiPupMenuBegin("Hello world", 0); + uiPopupMenu *pup= uiPupMenuBegin("Hello world", 0); + uiLayout *layout= uiPupMenuLayout(pup); - uiMenuContext(head, WM_OP_EXEC_DEFAULT); - uiMenuItemO(head, ICON_PROP_ON, "SCREEN_OT_region_flip"); - uiMenuItemO(head, ICON_PROP_CON, "SCREEN_OT_screen_full_area"); - uiMenuItemO(head, ICON_SMOOTHCURVE, "SCREEN_OT_region_foursplit"); - uiMenuLevel(head, "Submenu", newlevel1); + uiLayoutContext(layout, WM_OP_EXEC_DEFAULT); + uiItemO(layout, NULL, ICON_PROP_ON, "SCREEN_OT_region_flip"); + uiItemO(layout, NULL, ICON_PROP_CON, "SCREEN_OT_screen_full_area"); + uiItemO(layout, NULL, ICON_SMOOTHCURVE, "SCREEN_OT_region_foursplit"); + uiItemMenuF(layout, "Submenu", 0, newlevel1); - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); /* this operator is only for a menu, not used further */ return OPERATOR_CANCELLED; @@ -2443,6 +2446,9 @@ void ED_keymap_screen(wmWindowManager *wm) WM_keymap_verify_item(keymap, "SCREEN_OT_repeat_last", F4KEY, KM_PRESS, 0, 0); WM_keymap_add_item(keymap, "SCREEN_OT_region_flip", F5KEY, KM_PRESS, 0, 0); WM_keymap_verify_item(keymap, "SCREEN_OT_redo_last", F6KEY, KM_PRESS, 0, 0); + + RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_python_file_run", F7KEY, KM_PRESS, 0, 0)->ptr, "filename", "test.py"); + WM_keymap_verify_item(keymap, "SCRIPT_OT_python_run_ui_scripts", F8KEY, KM_PRESS, 0, 0); /* files */ WM_keymap_add_item(keymap, "FILE_OT_exec", RETKEY, KM_PRESS, 0, 0); diff --git a/source/blender/editors/sculpt_paint/Makefile b/source/blender/editors/sculpt_paint/Makefile index e810f7efbe4..9353116a4bc 100644 --- a/source/blender/editors/sculpt_paint/Makefile +++ b/source/blender/editors/sculpt_paint/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I$(NAN_ELBEEM)/include diff --git a/source/blender/editors/sculpt_paint/SConscript b/source/blender/editors/sculpt_paint/SConscript index 3e00453e049..01e1d80c24c 100644 --- a/source/blender/editors/sculpt_paint/SConscript +++ b/source/blender/editors/sculpt_paint/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' ../../render/extern/include #/intern/guardedalloc #intern/bmfont' +incs += ' ../../render/extern/include #/intern/guardedalloc' incs += ' ../../gpu ../../makesrna' env.BlenderLib ( 'bf_editors_sculpt_paint', sources, Split(incs), [], libtype=['core'], priority=[40] ) diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c index a551b4f463c..6eae581aa40 100644 --- a/source/blender/editors/space_action/action_draw.c +++ b/source/blender/editors/space_action/action_draw.c @@ -999,7 +999,7 @@ void draw_channel_strips(bAnimContext *ac, SpaceAction *saction, ARegion *ar) /* get theme colors */ - UI_GetThemeColor3ubv(TH_SHADE2, col2); + UI_GetThemeColor3ubv(TH_BACK, col2); UI_GetThemeColor3ubv(TH_HILITE, col1); UI_GetThemeColor3ubv(TH_GROUP, col2a); UI_GetThemeColor3ubv(TH_GROUP_ACTIVE, col1a); diff --git a/source/blender/editors/space_action/action_edit.c b/source/blender/editors/space_action/action_edit.c index 9e679a5b722..af074ca348d 100644 --- a/source/blender/editors/space_action/action_edit.c +++ b/source/blender/editors/space_action/action_edit.c @@ -60,6 +60,7 @@ #include "RNA_access.h" #include "RNA_define.h" +#include "RNA_enum_types.h" #include "BKE_action.h" #include "BKE_depsgraph.h" @@ -872,14 +873,6 @@ void ACT_OT_keyframes_extrapolation_type_set (wmOperatorType *ot) /* ******************** Set Interpolation-Type Operator *********************** */ -/* defines for set ipo-type for selected keyframes tool */ -EnumPropertyItem prop_actkeys_ipo_types[] = { - {BEZT_IPO_CONST, "CONSTANT", "Constant Interpolation", ""}, - {BEZT_IPO_LIN, "LINEAR", "Linear Interpolation", ""}, - {BEZT_IPO_BEZ, "BEZIER", "Bezier Interpolation", ""}, - {0, NULL, NULL, NULL} -}; - /* this function is responsible for setting interpolation mode for keyframes */ static void setipo_action_keys(bAnimContext *ac, short mode) { @@ -945,21 +938,11 @@ void ACT_OT_keyframes_interpolation_type (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* id-props */ - RNA_def_enum(ot->srna, "type", prop_actkeys_ipo_types, 0, "Type", ""); + RNA_def_enum(ot->srna, "type", beztriple_interpolation_mode_items, 0, "Type", ""); } /* ******************** Set Handle-Type Operator *********************** */ -/* defines for set handle-type for selected keyframes tool */ -EnumPropertyItem prop_actkeys_handletype_types[] = { - {HD_AUTO, "AUTO", "Auto Handles", ""}, - {HD_VECT, "VECTOR", "Vector Handles", ""}, - {HD_FREE, "FREE", "Free Handles", ""}, - {HD_ALIGN, "ALIGN", "Aligned Handles", ""}, -// {-1, "TOGGLE", "Toggle between Free and Aligned Handles", ""}, - {0, NULL, NULL, NULL} -}; - /* this function is responsible for setting handle-type of selected keyframes */ static void sethandles_action_keys(bAnimContext *ac, short mode) { @@ -1043,7 +1026,7 @@ void ACT_OT_keyframes_handle_type_set (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* id-props */ - RNA_def_enum(ot->srna, "type", prop_actkeys_handletype_types, 0, "Type", ""); + RNA_def_enum(ot->srna, "type", beztriple_handle_type_items, 0, "Type", ""); } /* ************************************************************************** */ @@ -1135,6 +1118,10 @@ static void snap_action_keys(bAnimContext *ac, short mode) memset(&bed, 0, sizeof(BeztEditData)); bed.scene= ac->scene; + if (mode == ACTKEYS_SNAP_NEAREST_MARKER) { + bed.list.first= (ac->markers) ? ac->markers->first : NULL; + bed.list.last= (ac->markers) ? ac->markers->last : NULL; + } /* snap keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -1227,13 +1214,14 @@ static void mirror_action_keys(bAnimContext *ac, short mode) /* for 'first selected marker' mode, need to find first selected marker first! */ // XXX should this be made into a helper func in the API? if (mode == ACTKEYS_MIRROR_MARKER) { - Scene *scene= ac->scene; TimeMarker *marker= NULL; /* find first selected marker */ - for (marker= scene->markers.first; marker; marker=marker->next) { - if (marker->flag & SELECT) { - break; + if (ac->markers) { + for (marker= ac->markers->first; marker; marker=marker->next) { + if (marker->flag & SELECT) { + break; + } } } diff --git a/source/blender/editors/space_action/action_select.c b/source/blender/editors/space_action/action_select.c index ced80647fec..d4782418be7 100644 --- a/source/blender/editors/space_action/action_select.c +++ b/source/blender/editors/space_action/action_select.c @@ -74,6 +74,7 @@ #include "ED_keyframing.h" #include "ED_keyframes_draw.h" #include "ED_keyframes_edit.h" +#include "ED_markers.h" #include "ED_screen.h" #include "ED_space_api.h" @@ -389,21 +390,19 @@ static void markers_selectkeys_between (bAnimContext *ac) bAnimListElem *ale; int filter; - BeztEditFunc select_cb; + BeztEditFunc ok_cb, select_cb; BeztEditData bed; float min, max; /* get extreme markers */ - //get_minmax_markers(1, &min, &max); // FIXME... add back markers api! - min= (float)ac->scene->r.sfra; // xxx temp code - max= (float)ac->scene->r.efra; // xxx temp code - - if (min==max) return; + ED_markers_get_minmax(ac->markers, 1, &min, &max); min -= 0.5f; max += 0.5f; /* get editing funcs + data */ + ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE); select_cb= ANIM_editkeyframes_select(SELECT_ADD); + memset(&bed, 0, sizeof(BeztEditData)); bed.f1= min; bed.f2= max; @@ -418,11 +417,11 @@ static void markers_selectkeys_between (bAnimContext *ac) if (nob) { ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); - ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, select_cb, NULL); + ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); } else { - ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, select_cb, NULL); + ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); } } @@ -431,21 +430,6 @@ static void markers_selectkeys_between (bAnimContext *ac) } -/* helper callback for columnselect_action_keys() -> populate list CfraElems with frame numbers from selected beztriples */ -// TODO: if some other code somewhere needs this, it'll be time to port this over to keyframes_edit.c!!! -static short bezt_to_cfraelem(BeztEditData *bed, BezTriple *bezt) -{ - /* only if selected */ - if (bezt->f2 & SELECT) { - CfraElem *ce= MEM_callocN(sizeof(CfraElem), "cfraElem"); - BLI_addtail(&bed->list, ce); - - ce->cfra= bezt->vec[1][0]; - } - - return 0; -} - /* Selects all visible keyframes in the same frames as the specified elements */ static void columnselect_action_keys (bAnimContext *ac, short mode) { @@ -490,9 +474,7 @@ static void columnselect_action_keys (bAnimContext *ac, short mode) break; case ACTKEYS_COLUMNSEL_MARKERS_COLUMN: /* list of selected markers */ - // FIXME: markers api needs to be improved for this first! - //make_marker_cfra_list(&elems, 1); - return; // XXX currently, this does nothing! + ED_markers_make_cfra_list(ac->markers, &bed.list, 1); break; default: /* invalid option */ @@ -509,7 +491,7 @@ static void columnselect_action_keys (bAnimContext *ac, short mode) if (ac->datatype == ANIMCONT_GPENCIL) filter= (ANIMFILTER_VISIBLE); else - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVESONLY); ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); for (ale= anim_data.first; ale; ale= ale->next) { @@ -784,6 +766,7 @@ static void mouse_action_keys (bAnimContext *ac, int mval[2], short select_mode, if (ale == NULL) { /* channel not found */ printf("Error: animation channel (index = %d) not found in mouse_action_keys() \n", channel_index); + return; } else { /* found match - must return here... */ diff --git a/source/blender/editors/space_buttons/buttons_header.c b/source/blender/editors/space_buttons/buttons_header.c index 53fb4c388d3..9cea5959e2f 100644 --- a/source/blender/editors/space_buttons/buttons_header.c +++ b/source/blender/editors/space_buttons/buttons_header.c @@ -29,6 +29,7 @@ #include #include +#include "DNA_object_types.h" #include "DNA_space_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" @@ -40,6 +41,7 @@ #include "BKE_context.h" #include "BKE_screen.h" +#include "BKE_utildefines.h" #include "ED_screen.h" #include "ED_types.h" @@ -133,8 +135,9 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) { ScrArea *sa= CTX_wm_area(C); SpaceButs *sbuts= (SpaceButs*)CTX_wm_space_data(C); + Object *ob= CTX_data_active_object(C); uiBlock *block; - int xco, yco= 3; + int xco, yco= 3, dataicon= ICON_OBJECT_DATA; block= uiBeginBlock(C, ar, "header buttons", UI_EMBOSS); uiBlockSetHandleFunc(block, do_buttons_buttons, NULL); @@ -150,6 +153,22 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) xco+=XIC+xmax; } + + if(ob) { + switch(ob->type) { + case OB_EMPTY: dataicon= ICON_EMPTY_DATA; break; + case OB_MESH: dataicon= ICON_MESH_DATA; break; + case OB_CURVE: dataicon= ICON_CURVE_DATA; break; + case OB_SURF: dataicon= ICON_SURFACE_DATA; break; + case OB_FONT: dataicon= ICON_FONT_DATA; break; + case OB_MBALL: dataicon= ICON_META_DATA; break; + case OB_LAMP: dataicon= ICON_LAMP_DATA; break; + case OB_CAMERA: dataicon= ICON_CAMERA_DATA; break; + case OB_LATTICE: dataicon= ICON_LATTICE_DATA; break; + case OB_ARMATURE: dataicon= ICON_ARMATURE_DATA; break; + default: break; + } + } uiBlockSetEmboss(block, UI_EMBOSS); @@ -157,10 +176,15 @@ void buttons_header_buttons(const bContext *C, ARegion *ar) uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_SCENE, xco, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_SCENE, 0, 0, "Scene"); uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_WORLD, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_WORLD, 0, 0, "World"); uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_OBJECT_DATA, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_OBJECT, 0, 0, "Object"); - uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_EDIT, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_GAME, 0, 0, "Object Data"); - uiDefIconButS(block, ROW, B_BUTSPREVIEW, ICON_MATERIAL, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_MATERIAL, 0, 0, "Material"); - uiDefIconButS(block, ROW, B_BUTSPREVIEW, ICON_TEXTURE, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_TEXTURE, 0, 0, "Texture"); - uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PARTICLES, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_PARTICLE, 0, 0, "Particles"); + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, dataicon, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_DATA, 0, 0, "Object Data"); + if(ob && ELEM5(ob->type, OB_MESH, OB_SURF, OB_MBALL, OB_CURVE, OB_FONT)) + uiDefIconButS(block, ROW, B_BUTSPREVIEW, ICON_MATERIAL, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_MATERIAL, 0, 0, "Material"); + if(ob && ELEM6(ob->type, OB_MESH, OB_SURF, OB_MBALL, OB_CURVE, OB_FONT, OB_LAMP)) + uiDefIconButS(block, ROW, B_BUTSPREVIEW, ICON_TEXTURE, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_TEXTURE, 0, 0, "Texture"); + if(ob && ELEM5(ob->type, OB_MESH, OB_SURF, OB_MBALL, OB_CURVE, OB_FONT)) + uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PARTICLES, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_PARTICLE, 0, 0, "Particles"); + + if(ob && ELEM6(ob->type, OB_MESH, OB_SURF, OB_MBALL, OB_CURVE, OB_FONT, OB_EMPTY)) uiDefIconButS(block, ROW, B_CONTEXT_SWITCH, ICON_PHYSICS, xco+=XIC, yco, XIC, YIC, &(sbuts->mainb), 0.0, (float)BCONTEXT_PHYSICS, 0, 0, "Physics"); xco+= XIC; diff --git a/source/blender/editors/space_buttons/space_buttons.c b/source/blender/editors/space_buttons/space_buttons.c index 34b6859310d..2013c3d72a9 100644 --- a/source/blender/editors/space_buttons/space_buttons.c +++ b/source/blender/editors/space_buttons/space_buttons.c @@ -237,6 +237,17 @@ static void buttons_area_listener(ARegion *ar, wmNotifier *wmn) case NC_SCENE: switch(wmn->data) { case ND_FRAME: + case ND_OB_ACTIVE: + ED_region_tag_redraw(ar); + break; + } + break; + case NC_OBJECT: + switch(wmn->data) { + case ND_TRANSFORM: + case ND_BONE_ACTIVE: + case ND_BONE_SELECT: + case ND_GEOM_SELECT: ED_region_tag_redraw(ar); break; } diff --git a/source/blender/editors/space_file/Makefile b/source/blender/editors/space_file/Makefile index 480a4ee3889..c8f2af9c2e8 100644 --- a/source/blender/editors/space_file/Makefile +++ b/source/blender/editors/space_file/Makefile @@ -37,7 +37,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include # not very neat.... CPPFLAGS += -I../../windowmanager diff --git a/source/blender/editors/space_file/SConscript b/source/blender/editors/space_file/SConscript index 8302d6eecef..699b988f50f 100644 --- a/source/blender/editors/space_file/SConscript +++ b/source/blender/editors/space_file/SConscript @@ -4,7 +4,7 @@ Import ('env') sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' -incs += ' ../../blenloader #intern/bmfont ../../makesrna' +incs += ' ../../blenloader ../../makesrna' incs += ' ../../render/extern/include ' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' diff --git a/source/blender/editors/space_file/file_draw.c b/source/blender/editors/space_file/file_draw.c index 6184425885e..dafb254f4bc 100644 --- a/source/blender/editors/space_file/file_draw.c +++ b/source/blender/editors/space_file/file_draw.c @@ -37,7 +37,6 @@ #include "BIF_gl.h" #include "BIF_glutil.h" -#include "BMF_Api.h" #include "BKE_colortools.h" #include "BKE_context.h" @@ -551,9 +550,9 @@ static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCate short sx, sy, xpos, ypos; int bmwidth = ar->v2d.cur.xmax - ar->v2d.cur.xmin - 2*TILE_BORDER_X - ICON_DEFAULT_WIDTH - 4; int fontsize = gFontsize; + int cat_icon; int i; - sx = ar->v2d.cur.xmin + TILE_BORDER_X; sy = *starty; @@ -562,6 +561,15 @@ static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCate sy -= linestep; + switch(category) { + case FS_CATEGORY_SYSTEM: + cat_icon = ICON_DISK_DRIVE; break; + case FS_CATEGORY_BOOKMARKS: + cat_icon = ICON_BOOKMARKS; break; + case FS_CATEGORY_RECENT: + cat_icon = ICON_FILE_FOLDER; break; + } + for (i=0; i< nentries && (sy > ar->v2d.cur.ymin) ;++i) { char *fname = fsmenu_get_entry(fsmenu, category, i); @@ -570,10 +578,13 @@ static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCate BLI_strncpy(bookmark, fname, FILE_MAX); sl = strlen(bookmark)-1; - while (bookmark[sl] == '\\' || bookmark[sl] == '/') { - bookmark[sl] = '\0'; - sl--; + if (sl > 1) { + while (bookmark[sl] == '\\' || bookmark[sl] == '/') { + bookmark[sl] = '\0'; + sl--; + } } + if (fsmenu_is_selected(fsmenu, category, i) ) { UI_ThemeColor(TH_HILITE); //uiSetRoundBox(15); @@ -587,7 +598,7 @@ static void file_draw_fsmenu_category(const bContext *C, ARegion *ar, FSMenuCate xpos = sx; ypos = sy - (TILE_BORDER_Y * 0.5); - file_draw_icon(xpos, ypos, ICON_FILE_FOLDER, ICON_DEFAULT_WIDTH, ICON_DEFAULT_WIDTH); + file_draw_icon(xpos, ypos, cat_icon, ICON_DEFAULT_WIDTH, ICON_DEFAULT_WIDTH); xpos += ICON_DEFAULT_WIDTH + 4; file_draw_string(xpos, ypos, bookmark, bmwidth, fontsize, FILE_SHORTEN_FRONT); sy -= linestep; diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c index 6ef946c9697..59e8dcf82e6 100644 --- a/source/blender/editors/space_file/fsmenu.c +++ b/source/blender/editors/space_file/fsmenu.c @@ -47,6 +47,12 @@ #include "BLI_winstuff.h" #endif +#ifdef __APPLE__ +#include + +#include "BKE_utildefines.h" +#endif + #include "fsmenu.h" /* include ourselves */ @@ -303,6 +309,27 @@ void fsmenu_read_file(struct FSMenu* fsmenu, const char *filename) } #endif +#ifdef __APPLE__ + { + OSErr err=noErr; + int i; + + /* loop through all the OS X Volumes, and add them to the SYSTEM section */ + for (i=1; err!=nsvErr; i++) + { + FSRef dir; + unsigned char path[FILE_MAXDIR+FILE_MAXFILE]; + + err = FSGetVolumeInfo(kFSInvalidVolumeRefNum, i, NULL, kFSVolInfoNone, NULL, NULL, &dir); + if (err != noErr) + continue; + + FSRefMakePath(&dir, path, FILE_MAXDIR+FILE_MAXFILE); + fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, (char *)path, 1, 0); + } + } +#endif + fp = fopen(filename, "r"); if (!fp) return; diff --git a/source/blender/editors/space_graph/graph_buttons.c b/source/blender/editors/space_graph/graph_buttons.c index 357079a2c3c..16628f31b63 100644 --- a/source/blender/editors/space_graph/graph_buttons.c +++ b/source/blender/editors/space_graph/graph_buttons.c @@ -460,7 +460,7 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm /* closing bracket and '+' sign */ if ( (i != (data->poly_order - 1)) || ((i==0) && data->poly_order==2) ) - uiDefBut(block, LABEL, 1, ") ×", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); + uiDefBut(block, LABEL, 1, ") â—Š", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); else uiDefBut(block, LABEL, 1, ")", 280, cy, 30, 20, NULL, 0.0, 0.0, 0, 0, ""); @@ -545,7 +545,7 @@ static void draw_modifier__generator(uiBlock *block, FCurve *fcu, FModifier *fcm static void draw_modifier__cycles(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) { FMod_Cycles *data= (FMod_Cycles *)fcm->data; - char cyc_mode[]="Cycling Mode%t|No Cycles%x0|Repeat Motion%x1|Repeat with Offset%x2"; + char cyc_mode[]="Cycling Mode%t|No Cycles%x0|Repeat Motion%x1|Repeat with Offset%x2|Repeat Mirrored%x3"; int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); /* set the height */ @@ -571,6 +571,36 @@ static void draw_modifier__cycles(uiBlock *block, FCurve *fcu, FModifier *fcm, i /* --------------- */ +/* draw settings for noise modifier */ +static void draw_modifier__noise(uiBlock *block, FCurve *fcu, FModifier *fcm, int *yco, short *height, short width, short active, int rb_col) +{ + FMod_Noise *data= (FMod_Noise *)fcm->data; + int cy= (*yco - 30), cy1= (*yco - 50), cy2= (*yco - 70); + char cyc_mode[]="Modification %t|Replace %x0|Add %x1|Subtract %x2|Multiply %x3"; + + /* set the height */ + (*height) = 80; + + /* basic settings (backdrop + some padding) */ + DRAW_BACKDROP((*height)); + + uiDefButS(block, MENU, B_FMODIFIER_REDRAW, cyc_mode, + 3, cy, 150, 20, &data->modification, 0, 0, 0, 0, "Method of modifying the existing F-Curve use before first keyframe"); + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Size:", + 3, cy1, 150, 20, &data->size, 0.000001, 10000.0, 0.01, 3, ""); + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Strength:", + 3, cy2, 150, 20, &data->strength, 0.0, 10000.0, 0.01, 3, ""); + + uiDefButF(block, NUM, B_FMODIFIER_REDRAW, "Phase:", + 155, cy1, 150, 20, &data->phase, 0.0, 100000.0, 0.1, 3, ""); + uiDefButS(block, NUM, B_FMODIFIER_REDRAW, "Depth:", + 155, cy2, 150, 20, &data->depth, 0, 128, 1, 3, ""); + +} + +/* --------------- */ + #define BINARYSEARCH_FRAMEEQ_THRESH 0.0001 /* Binary search algorithm for finding where to insert Envelope Data Point. @@ -841,17 +871,20 @@ static void graph_panel_modifier_draw(uiBlock *block, FCurve *fcu, FModifier *fc but= uiDefBut(block, ROUNDBOX, B_REDR, "", 0, *yco-2, width, 24, NULL, 5.0, 0.0, 15.0, (float)(rb_col-20), ""); /* expand */ - uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 5, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded"); + uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_EXPANDED, B_REDR, ICON_TRIA_RIGHT, 5, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is expanded."); /* checkbox for 'active' status (for now) */ - but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one"); + but= uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_ACTIVE, B_REDR, ICON_RADIOBUT_OFF, 25, *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is active one."); uiButSetFunc(but, activate_fmodifier_cb, fcu, fcm); /* name */ if (fmi) - but= uiDefBut(block, LABEL, 1, fmi->name, 10+40, *yco, 240, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + uiDefBut(block, LABEL, 1, fmi->name, 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); else - but= uiDefBut(block, LABEL, 1, "", 10+40, *yco, 240, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + uiDefBut(block, LABEL, 1, "", 10+40, *yco, 150, 20, NULL, 0.0, 0.0, 0, 0, "F-Curve Modifier Type. Click to make modifier active one."); + + /* 'mute' button */ + uiDefIconButBitS(block, ICONTOG, FMODIFIER_FLAG_MUTED, B_REDR, ICON_MUTE_IPO_OFF, 10+(width-60), *yco-1, 20, 20, &fcm->flag, 0.0, 0.0, 0, 0, "Modifier is temporarily muted (not evaluated)."); /* delete button */ but= uiDefIconBut(block, BUT, B_REDR, ICON_X, 10+(width-30), *yco, 19, 19, NULL, 0.0, 0.0, 0.0, 0.0, "Delete F-Curve Modifier."); @@ -880,6 +913,10 @@ static void graph_panel_modifier_draw(uiBlock *block, FCurve *fcu, FModifier *fc draw_modifier__limits(block, fcu, fcm, yco, &height, width, active, rb_col); break; + case FMODIFIER_TYPE_NOISE: /* Noise */ + draw_modifier__noise(block, fcu, fcm, yco, &height, width, active, rb_col); + break; + default: /* unknown type */ height= 96; //DRAW_BACKDROP(height); // XXX buggy... diff --git a/source/blender/editors/space_graph/graph_draw.c b/source/blender/editors/space_graph/graph_draw.c index 6f33a5dd682..e3a6d502332 100644 --- a/source/blender/editors/space_graph/graph_draw.c +++ b/source/blender/editors/space_graph/graph_draw.c @@ -775,6 +775,37 @@ void graph_draw_ghost_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, Vie glDisable(GL_BLEND); } +/* check if any FModifiers to draw controls for - fcm is 'active' modifier */ +static short fcurve_needs_draw_fmodifier_controls (FCurve *fcu, FModifier *fcm) +{ + /* don't draw if there aren't any modifiers at all */ + if (fcu->modifiers.first == NULL) + return 0; + + /* if there's an active modifier - don't draw if it is cycles modifier, since + * that basically still shows the original points + */ + if ((fcm) && (fcm->type == FMODIFIER_TYPE_CYCLES)) + return 0; + + /* if only one modifier - don't draw if it is muted or disabled */ + if (fcu->modifiers.first == fcu->modifiers.last) { + fcm= fcu->modifiers.first; + if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) + return 0; + } + + /* if only active modifier - don't draw if it is muted or disabled */ + if (fcm) { + if (fcm->flag & (FMODIFIER_FLAG_DISABLED|FMODIFIER_FLAG_MUTED)) + return 0; + } + + /* if we're still here, this means that there are modifiers with controls to be drawn */ + // FIXME: what happens if all the modifiers were muted/disabled + return 1; +} + /* This is called twice from space_graph.c -> graph_main_area_draw() * Unselected then selected F-Curves are drawn so that they do not occlude each other. */ @@ -853,14 +884,8 @@ void graph_draw_curves (bAnimContext *ac, SpaceIpo *sipo, ARegion *ar, View2DGri } /* 2) draw handles and vertices as appropriate based on active */ - if ( ((fcm) && (fcm->type != FMODIFIER_TYPE_CYCLES)) || (fcu->modifiers.first && !fcm) ) { - /* draw controls for the 'active' modifier - * - there may not be an 'active' modifier on this curve to draw - * - this curve may not be active, so modifier controls shouldn't get drawn either - * - * NOTE: cycles modifier is currently an exception where the original points can still be edited, so - * this branch is skipped... (TODO: set up the generic system for this so that we don't need special hacks like this) - */ + if (fcurve_needs_draw_fmodifier_controls(fcu, fcm)) { + /* only draw controls if this is the active modifier */ if ((fcu->flag & FCURVE_ACTIVE) && (fcm)) { switch (fcm->type) { case FMODIFIER_TYPE_ENVELOPE: /* envelope */ diff --git a/source/blender/editors/space_graph/graph_edit.c b/source/blender/editors/space_graph/graph_edit.c index 52301ac1b0f..d4bdfce5414 100644 --- a/source/blender/editors/space_graph/graph_edit.c +++ b/source/blender/editors/space_graph/graph_edit.c @@ -60,6 +60,7 @@ #include "RNA_access.h" #include "RNA_define.h" +#include "RNA_enum_types.h" #include "BKE_action.h" #include "BKE_depsgraph.h" @@ -1070,14 +1071,6 @@ void GRAPHEDIT_OT_keyframes_extrapolation_type (wmOperatorType *ot) /* ******************** Set Interpolation-Type Operator *********************** */ -/* defines for set ipo-type for selected keyframes tool */ -EnumPropertyItem prop_graphkeys_ipo_types[] = { - {BEZT_IPO_CONST, "CONSTANT", "Constant Interpolation", ""}, - {BEZT_IPO_LIN, "LINEAR", "Linear Interpolation", ""}, - {BEZT_IPO_BEZ, "BEZIER", "Bezier Interpolation", ""}, - {0, NULL, NULL, NULL} -}; - /* this function is responsible for setting interpolation mode for keyframes */ static void setipo_graph_keys(bAnimContext *ac, short mode) { @@ -1141,21 +1134,11 @@ void GRAPHEDIT_OT_keyframes_interpolation_type (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* id-props */ - RNA_def_enum(ot->srna, "type", prop_graphkeys_ipo_types, 0, "Type", ""); + RNA_def_enum(ot->srna, "type", beztriple_interpolation_mode_items, 0, "Type", ""); } /* ******************** Set Handle-Type Operator *********************** */ -/* defines for set handle-type for selected keyframes tool */ -EnumPropertyItem prop_graphkeys_handletype_types[] = { - {HD_AUTO, "AUTO", "Auto Handles", ""}, - {HD_VECT, "VECTOR", "Vector Handles", ""}, - {HD_FREE, "FREE", "Free Handles", ""}, - {HD_ALIGN, "ALIGN", "Aligned Handles", ""}, -// {-1, "TOGGLE", "Toggle between Free and Aligned Handles", ""}, - {0, NULL, NULL, NULL} -}; - /* this function is responsible for setting handle-type of selected keyframes */ static void sethandles_graph_keys(bAnimContext *ac, short mode) { @@ -1238,7 +1221,7 @@ void GRAPHEDIT_OT_keyframes_handletype (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* id-props */ - RNA_def_enum(ot->srna, "type", prop_graphkeys_handletype_types, 0, "Type", ""); + RNA_def_enum(ot->srna, "type", beztriple_handle_type_items, 0, "Type", ""); } /* ************************************************************************** */ @@ -1405,7 +1388,7 @@ static void snap_graph_keys(bAnimContext *ac, short mode) BeztEditFunc edit_cb; /* filter data */ - filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE| ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); + filter= (ANIMFILTER_VISIBLE | ANIMFILTER_CURVEVISIBLE | ANIMFILTER_FOREDIT | ANIMFILTER_CURVESONLY); ANIM_animdata_filter(ac, &anim_data, filter, ac->data, ac->datatype); /* get beztriple editing callbacks */ @@ -1413,6 +1396,10 @@ static void snap_graph_keys(bAnimContext *ac, short mode) memset(&bed, 0, sizeof(BeztEditData)); bed.scene= ac->scene; + if (mode == GRAPHKEYS_SNAP_NEAREST_MARKER) { + bed.list.first= (ac->markers) ? ac->markers->first : NULL; + bed.list.last= (ac->markers) ? ac->markers->last : NULL; + } /* snap keyframes */ for (ale= anim_data.first; ale; ale= ale->next) { @@ -1503,13 +1490,14 @@ static void mirror_graph_keys(bAnimContext *ac, short mode) /* for 'first selected marker' mode, need to find first selected marker first! */ // XXX should this be made into a helper func in the API? if (mode == GRAPHKEYS_MIRROR_MARKER) { - Scene *scene= ac->scene; TimeMarker *marker= NULL; /* find first selected marker */ - for (marker= scene->markers.first; marker; marker=marker->next) { - if (marker->flag & SELECT) { - break; + if (ac->markers) { + for (marker= ac->markers->first; marker; marker=marker->next) { + if (marker->flag & SELECT) { + break; + } } } @@ -1638,19 +1626,6 @@ void GRAPHEDIT_OT_keyframes_smooth (wmOperatorType *ot) /* ******************** Add F-Curve Modifier Operator *********************** */ -/* F-Modifier types - duplicate of existing codes... */ - // XXX how can we have this list from the RNA definitions instead? -EnumPropertyItem prop_fmodifier_types[] = { - {FMODIFIER_TYPE_GENERATOR, "GENERATOR", "Generator", ""}, - {FMODIFIER_TYPE_ENVELOPE, "ENVELOPE", "Envelope", ""}, - {FMODIFIER_TYPE_CYCLES, "CYCLES", "Cycles", ""}, - {FMODIFIER_TYPE_NOISE, "NOISE", "Noise", ""}, - {FMODIFIER_TYPE_FILTER, "FILTER", "Filter", ""}, - {FMODIFIER_TYPE_PYTHON, "PYTHON", "Python", ""}, - {FMODIFIER_TYPE_LIMITS, "LIMITS", "Limits", ""}, - {0, NULL, NULL, NULL} -}; - static int graph_fmodifier_add_exec(bContext *C, wmOperator *op) { bAnimContext ac; @@ -1709,7 +1684,7 @@ void GRAPHEDIT_OT_fmodifier_add (wmOperatorType *ot) ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; /* id-props */ - RNA_def_enum(ot->srna, "type", prop_fmodifier_types, 0, "Type", ""); + RNA_def_enum(ot->srna, "type", fmodifier_type_items, 0, "Type", ""); } /* ************************************************************************** */ diff --git a/source/blender/editors/space_graph/graph_select.c b/source/blender/editors/space_graph/graph_select.c index 4b6e55d2a03..3a99c9498ac 100644 --- a/source/blender/editors/space_graph/graph_select.c +++ b/source/blender/editors/space_graph/graph_select.c @@ -73,6 +73,7 @@ #include "ED_keyframing.h" #include "ED_keyframes_draw.h" #include "ED_keyframes_edit.h" +#include "ED_markers.h" #include "ED_screen.h" #include "ED_space_api.h" @@ -353,21 +354,19 @@ static void markers_selectkeys_between (bAnimContext *ac) bAnimListElem *ale; int filter; - BeztEditFunc select_cb; + BeztEditFunc ok_cb, select_cb; BeztEditData bed; float min, max; /* get extreme markers */ - //get_minmax_markers(1, &min, &max); // FIXME... add back markers api! - min= (float)ac->scene->r.sfra; // xxx temp code - max= (float)ac->scene->r.efra; // xxx temp code - - if (min==max) return; + ED_markers_get_minmax(ac->markers, 1, &min, &max); min -= 0.5f; max += 0.5f; /* get editing funcs + data */ + ok_cb= ANIM_editkeyframes_ok(BEZT_OK_FRAMERANGE); select_cb= ANIM_editkeyframes_select(SELECT_ADD); + memset(&bed, 0, sizeof(BeztEditData)); bed.f1= min; bed.f2= max; @@ -382,11 +381,11 @@ static void markers_selectkeys_between (bAnimContext *ac) if (nob) { ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 0, 1); - ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, select_cb, NULL); + ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); ANIM_nla_mapping_apply_fcurve(nob, ale->key_data, 1, 1); } else { - ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, NULL, select_cb, NULL); + ANIM_fcurve_keys_bezier_loop(&bed, ale->key_data, ok_cb, select_cb, NULL); } } @@ -395,21 +394,6 @@ static void markers_selectkeys_between (bAnimContext *ac) } -/* helper callback for columnselect_graph_keys() -> populate list CfraElems with frame numbers from selected beztriples */ -// TODO: if some other code somewhere needs this, it'll be time to port this over to keyframes_edit.c!!! -static short bezt_to_cfraelem(BeztEditData *bed, BezTriple *bezt) -{ - /* only if selected */ - if (bezt->f2 & SELECT) { - CfraElem *ce= MEM_callocN(sizeof(CfraElem), "cfraElem"); - BLI_addtail(&bed->list, ce); - - ce->cfra= bezt->vec[1][0]; - } - - return 0; -} - /* Selects all visible keyframes in the same frames as the specified elements */ static void columnselect_graph_keys (bAnimContext *ac, short mode) { @@ -446,9 +430,7 @@ static void columnselect_graph_keys (bAnimContext *ac, short mode) break; case GRAPHKEYS_COLUMNSEL_MARKERS_COLUMN: /* list of selected markers */ - // FIXME: markers api needs to be improved for this first! - //make_marker_cfra_list(&elems, 1); - return; // XXX currently, this does nothing! + ED_markers_make_cfra_list(&ac->markers, &bed.list, 1); break; default: /* invalid option */ diff --git a/source/blender/editors/space_graph/space_graph.c b/source/blender/editors/space_graph/space_graph.c index 782611aaad7..66ebc145621 100644 --- a/source/blender/editors/space_graph/space_graph.c +++ b/source/blender/editors/space_graph/space_graph.c @@ -293,7 +293,7 @@ static void graph_channel_area_draw(const bContext *C, ARegion *ar) float col[3]; /* clear and setup matrix */ - UI_GetThemeColor3fv(TH_SHADE2, col); + UI_GetThemeColor3fv(TH_BACK, col); glClearColor(col[0], col[1], col[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); @@ -359,7 +359,7 @@ static void graph_buttons_area_draw(const bContext *C, ARegion *ar) float col[3]; /* clear */ - UI_GetThemeColor3fv(TH_HEADER, col); + UI_GetThemeColor3fv(TH_BACK, col); glClearColor(col[0], col[1], col[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); diff --git a/source/blender/editors/space_image/image_header.c b/source/blender/editors/space_image/image_header.c index 288fc76d8e4..457d322f565 100644 --- a/source/blender/editors/space_image/image_header.c +++ b/source/blender/editors/space_image/image_header.c @@ -86,21 +86,21 @@ #define B_SIMA_RECORD 8 #define B_SIMA_PLAY 9 -static void image_view_viewnavmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void image_view_viewnavmenu(bContext *C, uiLayout *layout, void *arg_unused) { int a; - uiMenuItemO(head, 0, "IMAGE_OT_view_zoom_in"); - uiMenuItemO(head, 0, "IMAGE_OT_view_zoom_out"); + uiItemO(layout, NULL, 0, "IMAGE_OT_view_zoom_in"); + uiItemO(layout, NULL, 0, "IMAGE_OT_view_zoom_out"); - uiMenuSeparator(head); + uiItemS(layout); for(a=0; a<7; a++) { const int ratios[7][2] = {{1, 8}, {1, 4}, {1, 2}, {1, 1}, {2, 1}, {4, 1}, {8, 1}}; char namestr[128]; sprintf(namestr, "Zoom %d:%d", ratios[a][0], ratios[a][1]); - uiMenuItemFloatO(head, namestr, 0, "IMAGE_OT_view_zoom_ratio", "ratio", (float)ratios[a][0]/(float)ratios[a][1]); + uiItemFloatO(layout, namestr, 0, "IMAGE_OT_view_zoom_ratio", "ratio", (float)ratios[a][0]/(float)ratios[a][1]); } } @@ -123,7 +123,7 @@ static void do_viewmenu(bContext *C, void *arg, int event) } #endif -static void image_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void image_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) { bScreen *sc= CTX_wm_screen(C); ScrArea *sa= CTX_wm_area(C); @@ -140,44 +140,44 @@ static void image_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused) show_uvedit= ED_space_image_show_uvedit(sima, CTX_data_edit_object(C)); /* create menu */ - uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_view_properties_panel"); // View Properties... - uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_image_properties_panel"); // Image Properties...|N - uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_realtime_properties_panel"); // Real-time properties... - if(show_paint) uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_paint_panel"); // Paint Tool...|C - uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_curves_panel"); // Curves Tool... - if(show_render) uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_compositing_preview_panel"); // Compositing Preview...|Shift P - uiMenuItemO(head, ICON_MENU_PANEL, "IMAGE_OT_toggle_grease_pencil_panel"); // Grease Pencil... + uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_view_properties_panel"); // View Properties... + uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_image_properties_panel"); // Image Properties...|N + uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_realtime_properties_panel"); // Real-time properties... + if(show_paint) uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_paint_panel"); // Paint Tool...|C + uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_curves_panel"); // Curves Tool... + if(show_render) uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_compositing_preview_panel"); // Compositing Preview...|Shift P + uiItemO(layout, NULL, ICON_MENU_PANEL, "IMAGE_OT_toggle_grease_pencil_panel"); // Grease Pencil... - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemBooleanR(head, &spaceptr, "update_automatically"); - // XXX if(show_uvedit) uiMenuItemBooleanR(head, &uvptr, "local_view"); // "UV Local View", Numpad / + uiItemR(layout, NULL, 0, &spaceptr, "update_automatically", 0); + // XXX if(show_uvedit) uiItemR(layout, NULL, 0, &uvptr, "local_view", 0); // "UV Local View", Numpad / - uiMenuSeparator(head); + uiItemS(layout); - uiMenuLevel(head, "View Navigation", image_view_viewnavmenu); - if(show_uvedit) uiMenuItemO(head, 0, "IMAGE_OT_view_selected"); - uiMenuItemO(head, 0, "IMAGE_OT_view_all"); + uiItemMenuF(layout, "View Navigation", 0, image_view_viewnavmenu); + if(show_uvedit) uiItemO(layout, NULL, 0, "IMAGE_OT_view_selected"); + uiItemO(layout, NULL, 0, "IMAGE_OT_view_all"); - if(sa->full) uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow - else uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow + if(sa->full) uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow + else uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow } -static void image_selectmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void image_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemO(head, 0, "UV_OT_select_border"); - uiMenuItemBooleanO(head, "Border Select Pinned", 0, "UV_OT_select_border", "pinned", 1); // Border Select Pinned|Shift B + uiItemO(layout, NULL, 0, "UV_OT_select_border"); + uiItemBooleanO(layout, "Border Select Pinned", 0, "UV_OT_select_border", "pinned", 1); // Border Select Pinned|Shift B - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "UV_OT_select_all_toggle"); - uiMenuItemO(head, 0, "UV_OT_select_invert"); - uiMenuItemO(head, 0, "UV_OT_unlink_selection"); + uiItemO(layout, NULL, 0, "UV_OT_select_all_toggle"); + uiItemO(layout, NULL, 0, "UV_OT_select_invert"); + uiItemO(layout, NULL, 0, "UV_OT_unlink_selection"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "UV_OT_select_pinned"); - uiMenuItemO(head, 0, "UV_OT_select_linked"); + uiItemO(layout, NULL, 0, "UV_OT_select_pinned"); + uiItemO(layout, NULL, 0, "UV_OT_select_linked"); } #if 0 @@ -190,7 +190,7 @@ static void do_image_imagemenu(void *arg, int event) } #endif -static void image_imagemenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void image_imagemenu(bContext *C, uiLayout *layout, void *arg_unused) { bScreen *sc= CTX_wm_screen(C); SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); @@ -208,37 +208,37 @@ static void image_imagemenu(bContext *C, uiMenuItem *head, void *arg_unused) RNA_pointer_create(&sc->id, &RNA_SpaceImageEditor, sima, &spaceptr); /* create menu */ - uiMenuItemO(head, 0, "IMAGE_OT_new"); // New... - uiMenuItemO(head, 0, "IMAGE_OT_open"); // Open... + uiItemO(layout, NULL, 0, "IMAGE_OT_new"); // New... + uiItemO(layout, NULL, 0, "IMAGE_OT_open"); // Open... if(ima) { if(!show_render) { - uiMenuItemO(head, 0, "IMAGE_OT_replace"); // Replace... - uiMenuItemO(head, 0, "IMAGE_OT_reload"); // Reload... + uiItemO(layout, NULL, 0, "IMAGE_OT_replace"); // Replace... + uiItemO(layout, NULL, 0, "IMAGE_OT_reload"); // Reload... } - uiMenuItemO(head, 0, "IMAGE_OT_save"); // Save - uiMenuItemO(head, 0, "IMAGE_OT_save_as"); // Save As... + uiItemO(layout, NULL, 0, "IMAGE_OT_save"); // Save + uiItemO(layout, NULL, 0, "IMAGE_OT_save_as"); // Save As... if(ima->source == IMA_SRC_SEQUENCE) - uiMenuItemO(head, 0, "IMAGE_OT_save_sequence"); // Save Changed Sequence Images + uiItemO(layout, NULL, 0, "IMAGE_OT_save_sequence"); // Save Changed Sequence Images if(!show_render) { - uiMenuSeparator(head); + uiItemS(layout); - if(ima->packedfile) uiMenuItemO(head, 0, "IMAGE_OT_unpack"); // Unpack Image... - else uiMenuItemO(head, 0, "IMAGE_OT_pack"); // Pack Image + if(ima->packedfile) uiItemO(layout, NULL, 0, "IMAGE_OT_unpack"); // Unpack Image... + else uiItemO(layout, NULL, 0, "IMAGE_OT_pack"); // Pack Image /* only for dirty && specific image types : XXX poll? */ if(ibuf && (ibuf->userflags & IB_BITMAPDIRTY)) if(ELEM(ima->source, IMA_SRC_FILE, IMA_SRC_GENERATED) && ima->type != IMA_TYPE_MULTILAYER) - uiMenuItemBooleanO(head, "Pack As PNG", 0, "IMAGE_OT_pack", "as_png", 1); // Pack Image As PNG + uiItemBooleanO(layout, "Pack As PNG", 0, "IMAGE_OT_pack", "as_png", 1); // Pack Image As PNG - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemBooleanR(head, &spaceptr, "image_painting"); + uiItemR(layout, NULL, 0, &spaceptr, "image_painting", 0); /* move to realtime properties panel */ RNA_id_pointer_create(&ima->id, &imaptr); - uiMenuLevelEnumR(head, &imaptr, "mapping"); + uiItemMenuEnumR(layout, NULL, 0, &imaptr, "mapping"); } } @@ -260,30 +260,30 @@ static void image_imagemenu(bContext *C, uiMenuItem *head, void *arg_unused) #endif } -static void image_uvs_showhidemenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void image_uvs_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemO(head, 0, "UV_OT_reveal"); - uiMenuItemO(head, 0, "UV_OT_hide"); - uiMenuItemBooleanO(head, "Hide Unselected", 0, "UV_OT_hide", "unselected", 1); + uiItemO(layout, NULL, 0, "UV_OT_reveal"); + uiItemO(layout, NULL, 0, "UV_OT_hide"); + uiItemBooleanO(layout, "Hide Unselected", 0, "UV_OT_hide", "unselected", 1); } -static void image_uvs_transformmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void image_uvs_transformmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_TRANSLATION); - uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_ROTATION); - uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_RESIZE); + uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TRANSLATION); + uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_ROTATION); + uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_RESIZE); } -static void image_uvs_mirrormenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void image_uvs_mirrormenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemEnumO(head, "", 0, "UV_OT_mirror", "axis", 'x'); // "X Axis", M, 1 - uiMenuItemEnumO(head, "", 0, "UV_OT_mirror", "axis", 'y'); // "Y Axis", M, 2 + uiItemEnumO(layout, NULL, 0, "UV_OT_mirror", "axis", 'x'); // "X Axis", M, 1 + uiItemEnumO(layout, NULL, 0, "UV_OT_mirror", "axis", 'y'); // "Y Axis", M, 2 } -static void image_uvs_weldalignmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void image_uvs_weldalignmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemO(head, 0, "UV_OT_weld"); // W, 1 - uiMenuItemsEnumO(head, "UV_OT_align", "axis"); // W, 2/3/4 + uiItemO(layout, NULL, 0, "UV_OT_weld"); // W, 1 + uiItemsEnumO(layout, "UV_OT_align", "axis"); // W, 2/3/4 } #if 0 @@ -321,7 +321,7 @@ static void image_uvs_scriptsmenu (void *args_unused) #endif /* DISABLE_PYTHON */ #endif -static void image_uvsmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void image_uvsmenu(bContext *C, uiLayout *layout, void *arg_unused) { bScreen *sc= CTX_wm_screen(C); Scene *scene= CTX_data_scene(C); @@ -338,43 +338,43 @@ static void image_uvsmenu(bContext *C, uiMenuItem *head, void *arg_unused) RNA_id_pointer_create(&scene->id, &sceneptr); /* create menu */ - uiMenuItemBooleanR(head, &uvptr, "snap_to_pixels"); - uiMenuItemBooleanR(head, &uvptr, "constrain_to_image_bounds"); + uiItemR(layout, NULL, 0, &uvptr, "snap_to_pixels", 0); + uiItemR(layout, NULL, 0, &uvptr, "constrain_to_image_bounds", 0); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemBooleanR(head, &uvptr, "live_unwrap"); - uiMenuItemO(head, 0, "UV_OT_unwrap"); - uiMenuItemBooleanO(head, "Unpin", 0, "UV_OT_pin", "clear", 1); - uiMenuItemO(head, 0, "UV_OT_pin"); + uiItemR(layout, NULL, 0, &uvptr, "live_unwrap", 0); + uiItemO(layout, NULL, 0, "UV_OT_unwrap"); + uiItemBooleanO(layout, "Unpin", 0, "UV_OT_pin", "clear", 1); + uiItemO(layout, NULL, 0, "UV_OT_pin"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "UV_OT_pack_islands"); - uiMenuItemO(head, 0, "UV_OT_average_islands_scale"); - uiMenuItemO(head, 0, "UV_OT_minimize_stretch"); - uiMenuItemO(head, 0, "UV_OT_stitch"); + uiItemO(layout, NULL, 0, "UV_OT_pack_islands"); + uiItemO(layout, NULL, 0, "UV_OT_average_islands_scale"); + uiItemO(layout, NULL, 0, "UV_OT_minimize_stretch"); + uiItemO(layout, NULL, 0, "UV_OT_stitch"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuLevel(head, "Transform", image_uvs_transformmenu); - uiMenuLevel(head, "Mirror", image_uvs_mirrormenu); - uiMenuLevel(head, "Weld/Align", image_uvs_weldalignmenu); + uiItemMenuF(layout, "Transform", 0, image_uvs_transformmenu); + uiItemMenuF(layout, "Mirror", 0, image_uvs_mirrormenu); + uiItemMenuF(layout, "Weld/Align", 0, image_uvs_weldalignmenu); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemBooleanR(head, &sceneptr, "proportional_editing"); - uiMenuLevelEnumR(head, &sceneptr, "proportional_editing_falloff"); + uiItemR(layout, NULL, 0, &sceneptr, "proportional_editing", 0); + uiItemMenuEnumR(layout, NULL, 0, &sceneptr, "proportional_editing_falloff"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuLevel(head, "Show/Hide Faces", image_uvs_showhidemenu); + uiItemMenuF(layout, "Show/Hide Faces", 0, image_uvs_showhidemenu); #if 0 #ifndef DISABLE_PYTHON - uiMenuSeparator(head); + uiItemS(layout); - uiMenuLevel(head, "Scripts", image_uvs_scriptsmenu); + uiItemMenuF(layout, "Scripts", image_uvs_scriptsmenu); #endif #endif } @@ -939,19 +939,21 @@ static int toolbox_invoke(bContext *C, wmOperator *op, wmEvent *event) { SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); Object *obedit= CTX_data_edit_object(C); - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; int show_uvedit; show_uvedit= ED_space_image_show_uvedit(sima, obedit); - head= uiPupMenuBegin("Toolbox", 0); + pup= uiPupMenuBegin("Toolbox", 0); + layout= uiPupMenuLayout(pup); - uiMenuLevel(head, "View", image_viewmenu); - if(show_uvedit) uiMenuLevel(head, "Select", image_selectmenu); - uiMenuLevel(head, "Image", image_imagemenu); - if(show_uvedit) uiMenuLevel(head, "UVs", image_uvsmenu); + uiItemMenuF(layout, "View", 0, image_viewmenu); + if(show_uvedit) uiItemMenuF(layout, "Select", 0, image_selectmenu); + uiItemMenuF(layout, "Image", 0, image_imagemenu); + if(show_uvedit) uiItemMenuF(layout, "UVs", 0, image_uvsmenu); - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c index fcafcd22a3d..908b24bd84d 100644 --- a/source/blender/editors/space_image/image_ops.c +++ b/source/blender/editors/space_image/image_ops.c @@ -1125,16 +1125,18 @@ static int pack_invoke(bContext *C, wmOperator *op, wmEvent *event) { SpaceImage *sima= (SpaceImage*)CTX_wm_space_data(C); ImBuf *ibuf= ED_space_image_buffer(sima); - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; int as_png= RNA_boolean_get(op->ptr, "as_png"); if(!pack_test(C, op)) return OPERATOR_CANCELLED; if(!as_png && (ibuf && (ibuf->userflags & IB_BITMAPDIRTY))) { - head= uiPupMenuBegin("OK", ICON_HELP); - uiMenuItemBooleanO(head, "Can't pack edited image from disk. Pack as internal PNG?", 0, op->idname, "as_png", 1); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("OK", ICON_HELP); + layout= uiPupMenuLayout(pup); + uiItemBooleanO(layout, "Can't pack edited image from disk. Pack as internal PNG?", 0, op->idname, "as_png", 1); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/space_image/space_image.c b/source/blender/editors/space_image/space_image.c index fab9317bbd0..5f743afd65d 100644 --- a/source/blender/editors/space_image/space_image.c +++ b/source/blender/editors/space_image/space_image.c @@ -47,6 +47,7 @@ #include "BKE_colortools.h" #include "BKE_context.h" #include "BKE_image.h" +#include "BKE_mesh.h" #include "BKE_screen.h" #include "BKE_utildefines.h" diff --git a/source/blender/editors/space_info/info_header.c b/source/blender/editors/space_info/info_header.c index 8b940bd6ca8..af792d0b22c 100644 --- a/source/blender/editors/space_info/info_header.c +++ b/source/blender/editors/space_info/info_header.c @@ -258,22 +258,22 @@ uiBlock *info_externalfiles(bContext *C, ARegion *ar, void *arg_unused) -static void info_filemenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void info_filemenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuContext(head, WM_OP_EXEC_AREA); - uiMenuItemO(head, 0, "WM_OT_read_homefile"); - uiMenuContext(head, WM_OP_INVOKE_AREA); - uiMenuItemO(head, 0, "WM_OT_open_mainfile"); + uiLayoutContext(layout, WM_OP_EXEC_AREA); + uiItemO(layout, NULL, 0, "WM_OT_read_homefile"); + uiLayoutContext(layout, WM_OP_INVOKE_AREA); + uiItemO(layout, NULL, 0, "WM_OT_open_mainfile"); // uiDefIconTextBlockBut(block, info_openrecentmenu, NULL, ICON_RIGHTARROW_THIN, "Open Recent",0, yco-=20, 120, 19, ""); // uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recover Last Session", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, ""); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuContext(head, WM_OP_EXEC_AREA); - uiMenuItemO(head, 0, "WM_OT_save_mainfile"); - uiMenuContext(head, WM_OP_INVOKE_AREA); - uiMenuItemO(head, 0, "WM_OT_save_as_mainfile"); + uiLayoutContext(layout, WM_OP_EXEC_AREA); + uiItemO(layout, NULL, 0, "WM_OT_save_mainfile"); + uiLayoutContext(layout, WM_OP_INVOKE_AREA); + uiItemO(layout, NULL, 0, "WM_OT_save_as_mainfile"); #if 0 if(U.flag & USER_FILECOMPRESS) { diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c index 66d807eb69c..12f23f03e66 100644 --- a/source/blender/editors/space_info/space_info.c +++ b/source/blender/editors/space_info/space_info.c @@ -48,7 +48,6 @@ #include "ED_screen.h" #include "BIF_gl.h" -#include "BLF_api.h" #include "WM_api.h" #include "WM_types.h" @@ -133,7 +132,6 @@ static void info_main_area_draw(const bContext *C, ARegion *ar) // SpaceInfo *sinfo= (SpaceInfo*)CTX_wm_space_data(C); View2D *v2d= &ar->v2d; float col[3]; - float width, height; /* clear and setup matrix */ UI_GetThemeColor3fv(TH_BACK, col); @@ -143,38 +141,6 @@ static void info_main_area_draw(const bContext *C, ARegion *ar) UI_view2d_view_ortho(C, v2d); /* data... */ - // XXX 2.50 Testing new font library - Diego - glColor3f(1.0, 0.0, 0.0); - BLF_aspect(1.0); - - BLF_size(14, 96); - BLF_position(5.0, 5.0, 0.0); - - width= BLF_width("Hello Blender, size 14, dpi 96"); - height= BLF_height("Hello Blender, size 14, dpi 96"); - - glRectf(7.0, 20.0, 7.0+width, 20.0+height); - glRectf(5.0+width+10.0, 3.0, 5.0+width+10.0+width, 3.0+height); - BLF_draw("Hello Blender, size 14, dpi 96"); - - glColor3f(0.0, 0.0, 1.0); - BLF_size(11, 96); - BLF_position(200.0, 50.0, 0.0); - BLF_enable(BLF_ROTATION); - BLF_rotation(45.0f); - BLF_draw("Another Hello Blender, size 11 and dpi 96!!"); - - glColor3f(0.8, 0.0, 0.7); - BLF_size(12, 72); - BLF_position(200.0, 100.0, 0.0); - BLF_rotation(180.0f); - BLF_draw("Hello World, size 12, dpi 72"); - - glColor3f(0.8, 0.7, 0.5); - BLF_size(12, 96); - BLF_position(5.0, 200.0, 0.0); - BLF_disable(BLF_ROTATION); - BLF_draw("And this make a new glyph cache!!"); /* reset view matrix */ UI_view2d_view_restore(C); diff --git a/source/blender/editors/space_node/Makefile b/source/blender/editors/space_node/Makefile index 233572dbfb1..60f81255a74 100644 --- a/source/blender/editors/space_node/Makefile +++ b/source/blender/editors/space_node/Makefile @@ -37,7 +37,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include # not very neat.... CPPFLAGS += -I../../windowmanager diff --git a/source/blender/editors/space_node/SConscript b/source/blender/editors/space_node/SConscript index babd8dc9080..ad57970950d 100644 --- a/source/blender/editors/space_node/SConscript +++ b/source/blender/editors/space_node/SConscript @@ -4,7 +4,7 @@ Import ('env') sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../makesrna ../../imbuf' -incs += ' ../../nodes #intern/bmfont ../../render/extern/include' +incs += ' ../../nodes ../../render/extern/include' incs += ' ../../windowmanager #intern/guardedalloc #extern/glew/include' defs = [] cf = [] diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 25693009bf2..9c2cf5dc5dd 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -71,8 +71,6 @@ #include "BIF_gl.h" #include "BIF_glutil.h" -#include "BMF_Api.h" - #include "MEM_guardedalloc.h" #include "ED_node.h" diff --git a/source/blender/editors/space_node/node_draw.c b/source/blender/editors/space_node/node_draw.c index ab6d3c245f1..0670dd9e01f 100644 --- a/source/blender/editors/space_node/node_draw.c +++ b/source/blender/editors/space_node/node_draw.c @@ -68,7 +68,6 @@ #include "BIF_gl.h" #include "BIF_glutil.h" -#include "BMF_Api.h" #include "WM_api.h" #include "WM_types.h" diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index 493ef6954b5..775f46b8e04 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -201,7 +201,7 @@ static void node_channel_area_draw(const bContext *C, ARegion *ar) float col[3]; /* clear and setup matrix */ - UI_GetThemeColor3fv(TH_SHADE2, col); + UI_GetThemeColor3fv(TH_BACK, col); glClearColor(col[0], col[1], col[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); diff --git a/source/blender/editors/space_outliner/outliner.c b/source/blender/editors/space_outliner/outliner.c index 6394e38c6e7..7104fad1767 100644 --- a/source/blender/editors/space_outliner/outliner.c +++ b/source/blender/editors/space_outliner/outliner.c @@ -100,6 +100,7 @@ #include "RNA_access.h" #include "ED_armature.h" +#include "ED_keyframing.h" #include "ED_object.h" #include "ED_screen.h" @@ -3270,7 +3271,6 @@ static void do_outliner_drivers_editop(SpaceOops *soops, ListBase *tree, short m static int outliner_drivers_addsel_exec(bContext *C, wmOperator *op) { SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C); - Scene *scene= CTX_data_scene(C); /* check for invalid states */ if (soutliner == NULL) @@ -3306,7 +3306,6 @@ void OUTLINER_OT_drivers_add(wmOperatorType *ot) static int outliner_drivers_deletesel_exec(bContext *C, wmOperator *op) { SpaceOops *soutliner= (SpaceOops*)CTX_wm_space_data(C); - Scene *scene= CTX_data_scene(C); /* check for invalid states */ if (soutliner == NULL) @@ -3565,7 +3564,7 @@ static void tselem_draw_icon(float x, float y, TreeStoreElem *tselem, TreeElemen case eModifierType_Boolean: UI_icon_draw(x, y, ICON_MOD_BOOLEAN); break; case eModifierType_ParticleSystem: - UI_icon_draw(x, y, ICON_MOD_PARTICLEINSTANCE); break; + UI_icon_draw(x, y, ICON_MOD_PARTICLES); break; case eModifierType_ParticleInstance: UI_icon_draw(x, y, ICON_MOD_PARTICLES); break; case eModifierType_EdgeSplit: @@ -3576,6 +3575,30 @@ static void tselem_draw_icon(float x, float y, TreeStoreElem *tselem, TreeElemen UI_icon_draw(x, y, ICON_MOD_UVPROJECT); break; case eModifierType_Displace: UI_icon_draw(x, y, ICON_MOD_DISPLACE); break; + case eModifierType_Shrinkwrap: + UI_icon_draw(x, y, ICON_MOD_SHRINKWRAP); break; + case eModifierType_Cast: + UI_icon_draw(x, y, ICON_MOD_CAST); break; + case eModifierType_MeshDeform: + UI_icon_draw(x, y, ICON_MOD_MESHDEFORM); break; + case eModifierType_Bevel: + UI_icon_draw(x, y, ICON_MOD_BEVEL); break; + case eModifierType_Smooth: + UI_icon_draw(x, y, ICON_MOD_SMOOTH); break; + case eModifierType_SimpleDeform: + UI_icon_draw(x, y, ICON_MOD_SIMPLEDEFORM); break; + case eModifierType_Mask: + UI_icon_draw(x, y, ICON_MOD_MASK); break; + case eModifierType_Cloth: + UI_icon_draw(x, y, ICON_MOD_CLOTH); break; + case eModifierType_Explode: + UI_icon_draw(x, y, ICON_MOD_EXPLODE); break; + case eModifierType_Collision: + UI_icon_draw(x, y, ICON_MOD_PHYSICS); break; + case eModifierType_Fluidsim: + UI_icon_draw(x, y, ICON_MOD_FLUIDSIM); break; + case eModifierType_Multires: + UI_icon_draw(x, y, ICON_MOD_MULTIRES); break; default: UI_icon_draw(x, y, ICON_DOT); break; } @@ -3965,6 +3988,9 @@ static void outliner_draw_tree(Scene *scene, ARegion *ar, SpaceOops *soops) float col[4]; #if 0 // XXX was #ifdef INTERNATIONAL + /* Maybe the INTERNATIONAL was really for check about freetype2 ? + * anyway I think that we can remove this now - Diego + */ FTF_SetFontSize('l'); BIF_SetScale(1.0); #endif @@ -4229,17 +4255,14 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar bt= uiDefIconButBitS(block, ICONTOG, OB_RESTRICT_VIEW, 0, ICON_RESTRICT_VIEW_OFF, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(ob->restrictflag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View"); uiButSetFunc(bt, restrictbutton_view_cb, scene, ob); - uiButSetFlag(bt, UI_NO_HILITE); bt= uiDefIconButBitS(block, ICONTOG, OB_RESTRICT_SELECT, 0, ICON_RESTRICT_SELECT_OFF, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_SELECTX, (short)te->ys, 17, OL_H-1, &(ob->restrictflag), 0, 0, 0, 0, "Restrict/Allow selection in the 3D View"); uiButSetFunc(bt, restrictbutton_sel_cb, scene, ob); - uiButSetFlag(bt, UI_NO_HILITE); bt= uiDefIconButBitS(block, ICONTOG, OB_RESTRICT_RENDER, 0, ICON_RESTRICT_RENDER_OFF, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_RENDERX, (short)te->ys, 17, OL_H-1, &(ob->restrictflag), 0, 0, 0, 0, "Restrict/Allow renderability"); uiButSetFunc(bt, restrictbutton_rend_cb, NULL, NULL); - uiButSetFlag(bt, UI_NO_HILITE); uiBlockSetEmboss(block, UI_EMBOSS); } @@ -4278,12 +4301,10 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar bt= uiDefIconButBitI(block, ICONTOGN, eModifierMode_Realtime, 0, ICON_RESTRICT_VIEW_OFF, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(md->mode), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View"); uiButSetFunc(bt, restrictbutton_modifier_cb, scene, ob); - uiButSetFlag(bt, UI_NO_HILITE); bt= uiDefIconButBitI(block, ICONTOGN, eModifierMode_Render, 0, ICON_RESTRICT_RENDER_OFF, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_RENDERX, (short)te->ys, 17, OL_H-1, &(md->mode), 0, 0, 0, 0, "Restrict/Allow renderability"); uiButSetFunc(bt, restrictbutton_modifier_cb, scene, ob); - uiButSetFlag(bt, UI_NO_HILITE); } else if(tselem->type==TSE_POSE_CHANNEL) { bPoseChannel *pchan= (bPoseChannel *)te->directdata; @@ -4293,7 +4314,6 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar bt= uiDefIconButBitI(block, ICONTOG, BONE_HIDDEN_P, 0, ICON_RESTRICT_VIEW_OFF, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(bone->flag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View"); uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL); - uiButSetFlag(bt, UI_NO_HILITE); } else if(tselem->type==TSE_EBONE) { EditBone *ebone= (EditBone *)te->directdata; @@ -4302,7 +4322,6 @@ static void outliner_draw_restrictbuts(uiBlock *block, Scene *scene, ARegion *ar bt= uiDefIconButBitI(block, ICONTOG, BONE_HIDDEN_A, 0, ICON_RESTRICT_VIEW_OFF, (int)ar->v2d.cur.xmax-OL_TOG_RESTRICT_VIEWX, (short)te->ys, 17, OL_H-1, &(ebone->flag), 0, 0, 0, 0, "Restrict/Allow visibility in the 3D View"); uiButSetFunc(bt, restrictbutton_bone_cb, NULL, NULL); - uiButSetFlag(bt, UI_NO_HILITE); } } diff --git a/source/blender/editors/space_script/script_edit.c b/source/blender/editors/space_script/script_edit.c index cc8764fd67d..797302a8652 100644 --- a/source/blender/editors/space_script/script_edit.c +++ b/source/blender/editors/space_script/script_edit.c @@ -86,3 +86,33 @@ void SCRIPT_OT_python_file_run(wmOperatorType *ot) RNA_def_string_file_path(ot->srna, "filename", "", 512, "Filename", ""); } +static int run_ui_scripts_exec(bContext *C, wmOperator *op) +{ +#ifndef DISABLE_PYTHON + BPY_run_ui_scripts(C, 1); /* reload */ +#endif + return OPERATOR_FINISHED; +} + +static int run_ui_scripts_invoke(bContext *C, wmOperator *op, wmEvent *event) +{ + int ret= run_ui_scripts_exec(C, op); + + if(ret==OPERATOR_FINISHED) + WM_event_add_notifier(C, NC_WINDOW, NULL); + + return ret; +} + + +void SCRIPT_OT_python_run_ui_scripts(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Reload Python Interface"; + ot->idname= "SCRIPT_OT_python_run_ui_scripts"; + + /* api callbacks */ + ot->exec= run_ui_scripts_exec; + ot->invoke= run_ui_scripts_invoke; + ot->poll= ED_operator_areaactive; +} diff --git a/source/blender/editors/space_script/script_intern.h b/source/blender/editors/space_script/script_intern.h index e39dd168e71..59858ee6289 100644 --- a/source/blender/editors/space_script/script_intern.h +++ b/source/blender/editors/space_script/script_intern.h @@ -40,6 +40,7 @@ void script_keymap(struct wmWindowManager *wm); /* script_edit.c */ void SCRIPT_OT_python_file_run(struct wmOperatorType *ot); +void SCRIPT_OT_python_run_ui_scripts(struct wmOperatorType *ot); #endif /* ED_SCRIPT_INTERN_H */ diff --git a/source/blender/editors/space_script/script_ops.c b/source/blender/editors/space_script/script_ops.c index d2aa9959a9d..aa35ba54b7f 100644 --- a/source/blender/editors/space_script/script_ops.c +++ b/source/blender/editors/space_script/script_ops.c @@ -60,6 +60,7 @@ void script_operatortypes(void) { WM_operatortype_append(SCRIPT_OT_python_file_run); + WM_operatortype_append(SCRIPT_OT_python_run_ui_scripts); } void script_keymap(wmWindowManager *wm) @@ -67,6 +68,7 @@ void script_keymap(wmWindowManager *wm) ListBase *keymap= WM_keymap_listbase(wm, "Script", SPACE_SCRIPT, 0); /* TODO - this is just while we have no way to load a text datablock */ - RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_python_file_run", PKEY, KM_PRESS, 0, 0)->ptr, "filename", "test.py"); + RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_python_file_run", PKEY, KM_PRESS, KM_CTRL|KM_SHIFT|KM_ALT, 0)->ptr, "filename", "test.py"); + WM_keymap_add_item(keymap, "SCRIPT_OT_python_run_ui_scripts", PKEY, KM_PRESS, KM_SHIFT, 0); } diff --git a/source/blender/editors/space_sequencer/Makefile b/source/blender/editors/space_sequencer/Makefile index c04202cba73..80699db4baa 100644 --- a/source/blender/editors/space_sequencer/Makefile +++ b/source/blender/editors/space_sequencer/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include # not very neat.... CPPFLAGS += -I../../windowmanager @@ -49,6 +48,7 @@ CPPFLAGS += -I../../makesdna CPPFLAGS += -I../../makesrna CPPFLAGS += -I../../imbuf CPPFLAGS += -I../../python +CPPFLAGS += -I../../blenfont CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include # own include diff --git a/source/blender/editors/space_sequencer/SConscript b/source/blender/editors/space_sequencer/SConscript index 1794ef29257..ab51068a529 100644 --- a/source/blender/editors/space_sequencer/SConscript +++ b/source/blender/editors/space_sequencer/SConscript @@ -3,8 +3,8 @@ Import ('env') sources = env.Glob('*.c') -incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' +incs = '../include ../../blenlib ../../blenkernel ../../blenfont ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' #intern/bmfont ../../makesrna' +incs += ' ../../makesrna' env.BlenderLib ( 'bf_editors_space_sequencer', sources, Split(incs), [], libtype=['core'], priority=[100] ) diff --git a/source/blender/editors/space_sequencer/sequencer_draw.c b/source/blender/editors/space_sequencer/sequencer_draw.c index e71abec8e4b..5e07689f536 100644 --- a/source/blender/editors/space_sequencer/sequencer_draw.c +++ b/source/blender/editors/space_sequencer/sequencer_draw.c @@ -30,8 +30,6 @@ #include "MEM_guardedalloc.h" -#include "BMF_Api.h" - #include "BLI_blenlib.h" #include "BLI_arithb.h" @@ -57,6 +55,7 @@ #include "BIF_gl.h" #include "BIF_glutil.h" +#include "BLF_api.h" #include "ED_anim_api.h" #include "ED_space_api.h" @@ -404,12 +403,14 @@ static void draw_seq_handle(SpaceSeq *sseq, Sequence *seq, float pixelx, short d cpack(0xFFFFFF); if (direction == SEQ_LEFTHANDLE) { sprintf(str, "%d", seq->startdisp); - glRasterPos3f(rx1, y1-0.15, 0.0); + x1= rx1; + y1 -= 0.15; } else { sprintf(str, "%d", seq->enddisp - 1); - glRasterPos3f((x2-BMF_GetStringWidth(G.fonts, str)*pixelx), y2+0.05, 0.0); + x1= x2 - BLF_width_default(str) * pixelx; + y1= y2 + 0.05; } - BMF_DrawString(G.fonts, str); + BLF_draw_default(x1, y1, 0.0f, str); } } @@ -572,8 +573,9 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float } strp= str; - - while( (len= BMF_GetStringWidth(G.font, strp)) > size) { + // XXX + /* The correct thing is used a Styla and set the clipping region. */ + while( (len= BLF_width_default(strp)) > size) { if(len < 10) break; if(strp[1]==0) break; strp++; @@ -590,8 +592,7 @@ static void draw_seq_text(View2D *v2d, Sequence *seq, float x1, float x2, float }else{ cpack(0); } - glRasterPos3f(x1, y1+SEQ_STRIP_OFSBOTTOM, 0.0); - BMF_DrawString(G.font, strp); + BLF_draw_default(x1, y1+SEQ_STRIP_OFSBOTTOM, 0.0, strp); } /* draws a shaded strip, made from gradient + flat color + gradient */ diff --git a/source/blender/editors/space_sequencer/sequencer_header.c b/source/blender/editors/space_sequencer/sequencer_header.c index aee589cb982..0e9a9d7130b 100644 --- a/source/blender/editors/space_sequencer/sequencer_header.c +++ b/source/blender/editors/space_sequencer/sequencer_header.c @@ -144,22 +144,22 @@ static uiBlock *seq_viewmenu(bContext *C, ARegion *ar, void *arg_unused) } //static uiBlock *seq_selectmenu(bContext *C, ARegion *ar, void *arg_unused) -static void seq_selectmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void seq_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuContext(head, WM_OP_INVOKE_REGION_WIN); + uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN); - uiMenuItemEnumO(head, "Strips to the Left", 0, "SEQUENCER_OT_select_active_side", "side", SEQ_SIDE_LEFT); - uiMenuItemEnumO(head, "Strips to the Right", 0, "SEQUENCER_OT_select_active_side", "side", SEQ_SIDE_RIGHT); - uiMenuSeparator(head); - uiMenuItemEnumO(head, "Surrounding Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_BOTH); - uiMenuItemEnumO(head, "Left Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_LEFT); - uiMenuItemEnumO(head, "Right Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_RIGHT); - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_select_linked"); - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_select_linked"); - uiMenuItemO(head, 0, "SEQUENCER_OT_select_all_toggle"); - uiMenuItemO(head, 0, "SEQUENCER_OT_select_invert"); + uiItemEnumO(layout, "Strips to the Left", 0, "SEQUENCER_OT_select_active_side", "side", SEQ_SIDE_LEFT); + uiItemEnumO(layout, "Strips to the Right", 0, "SEQUENCER_OT_select_active_side", "side", SEQ_SIDE_RIGHT); + uiItemS(layout); + uiItemEnumO(layout, "Surrounding Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_BOTH); + uiItemEnumO(layout, "Left Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_LEFT); + uiItemEnumO(layout, "Right Handles", 0, "SEQUENCER_OT_select_handles", "side", SEQ_SIDE_RIGHT); + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_select_linked"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_select_linked"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_select_all_toggle"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_select_invert"); } static uiBlock *seq_markermenu(bContext *C, ARegion *ar, void *arg_unused) @@ -210,114 +210,113 @@ static uiBlock *seq_markermenu(bContext *C, ARegion *ar, void *arg_unused) } //static uiBlock *seq_addmenu_effectmenu(bContext *C, ARegion *ar, void *arg_unused) -static void seq_addmenu_effectmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void seq_addmenu_effectmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuContext(head, WM_OP_INVOKE_REGION_WIN); + uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_ADD); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_SUB); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_MUL); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_CROSS); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_GAMCROSS); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_ALPHAOVER); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_ALPHAUNDER); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_OVERDROP); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_WIPE); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_GLOW); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_TRANSFORM); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_ADD); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_SUB); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_MUL); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_CROSS); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_GAMCROSS); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_ALPHAOVER); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_ALPHAUNDER); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_OVERDROP); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_WIPE); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_GLOW); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_TRANSFORM); /* Color is an effect but moved to the other menu since its not that exciting */ - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_SPEED); - uiMenuSeparator(head); - uiMenuItemEnumO(head, "", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_PLUGIN); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_SPEED); + uiItemS(layout); + uiItemEnumO(layout, NULL, 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_PLUGIN); } //static uiBlock *seq_addmenu(bContext *C, ARegion *ar, void *arg_unused) -static void seq_addmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void seq_addmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuLevel(head, "Effects...", seq_addmenu_effectmenu); - uiMenuSeparator(head); + uiItemMenuF(layout, "Effects...", 0, seq_addmenu_effectmenu); + uiItemS(layout); - uiMenuContext(head, WM_OP_INVOKE_REGION_WIN); + uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN); #ifdef WITH_FFMPEG - uiMenuItemBooleanO(head, "Audio (RAM)", 0, "SEQUENCER_OT_sound_strip_add", "hd", FALSE); - uiMenuItemBooleanO(head, "Audio (HD)", 0, "SEQUENCER_OT_sound_strip_add", "hd", TRUE); + uiItemBooleanO(layout, "Audio (RAM)", 0, "SEQUENCER_OT_sound_strip_add", "hd", FALSE); + uiItemBooleanO(layout, "Audio (HD)", 0, "SEQUENCER_OT_sound_strip_add", "hd", TRUE); #else - uiMenuItemO(head, 0, "SEQUENCER_OT_sound_strip_add"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_sound_strip_add"); #endif - uiMenuItemEnumO(head, "Add Color Strip", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_COLOR); + uiItemEnumO(layout, "Add Color Strip", 0, "SEQUENCER_OT_effect_strip_add", "type", SEQ_COLOR); - uiMenuItemO(head, 0, "SEQUENCER_OT_image_strip_add"); - uiMenuItemO(head, 0, "SEQUENCER_OT_movie_strip_add"); - uiMenuItemO(head, 0, "SEQUENCER_OT_scene_strip_add"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_image_strip_add"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_movie_strip_add"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_scene_strip_add"); #ifdef WITH_FFMPEG - uiMenuItemBooleanO(head, "Movie and Sound", 0, "SEQUENCER_OT_movie_strip_add", "sound", TRUE); + uiItemBooleanO(layout, "Movie and Sound", 0, "SEQUENCER_OT_movie_strip_add", "sound", TRUE); #endif } //static uiBlock *seq_editmenu(bContext *C, ARegion *ar, void *arg_unused) -static void seq_editmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void seq_editmenu(bContext *C, uiLayout *layout, void *arg_unused) { - Scene *scene= CTX_data_scene(C); Editing *ed= seq_give_editing(scene, FALSE); - uiMenuContext(head, WM_OP_INVOKE_REGION_WIN); + uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN); - uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_TRANSLATION); - uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND); + uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TRANSLATION); + uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TIME_EXTEND); - // uiMenuItemO(head, 0, "SEQUENCER_OT_strip_snap"); // TODO - add this operator + // uiItemO(layout, NULL, 0, "SEQUENCER_OT_strip_snap"); // TODO - add this operator - uiMenuItemEnumO(head, "Cut Hard", 0, "SEQUENCER_OT_cut", "type", SEQ_CUT_HARD); - uiMenuItemEnumO(head, "Cut Soft", 0, "SEQUENCER_OT_cut", "type", SEQ_CUT_SOFT); + uiItemEnumO(layout, "Cut Hard", 0, "SEQUENCER_OT_cut", "type", SEQ_CUT_HARD); + uiItemEnumO(layout, "Cut Soft", 0, "SEQUENCER_OT_cut", "type", SEQ_CUT_SOFT); - uiMenuItemO(head, 0, "SEQUENCER_OT_images_separate"); - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_duplicate_add"); - uiMenuItemO(head, 0, "SEQUENCER_OT_delete"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_images_separate"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_duplicate_add"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_delete"); if (ed && ed->act_seq) { switch(ed->act_seq->type) { case SEQ_EFFECT: - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_effect_change"); - uiMenuItemO(head, 0, "SEQUENCER_OT_effect_reassign_inputs"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_effect_change"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_effect_reassign_inputs"); break; case SEQ_IMAGE: - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_image_change"); // Change Scene... + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_image_change"); // Change Scene... break; case SEQ_SCENE: - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_scene_change"); // Remap Paths... + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_scene_change"); // Remap Paths... break; case SEQ_MOVIE: - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_movie_change"); // Remap Paths... + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_movie_change"); // Remap Paths... break; } } - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "SEQUENCER_OT_meta_make"); - uiMenuItemO(head, 0, "SEQUENCER_OT_meta_separate"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_meta_make"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_meta_separate"); if (ed && (ed->metastack.first || (ed->act_seq && ed->act_seq->type == SEQ_META))) { - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_meta_toggle"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_meta_toggle"); } - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_reload"); - uiMenuSeparator(head); - uiMenuItemO(head, 0, "SEQUENCER_OT_lock"); - uiMenuItemO(head, 0, "SEQUENCER_OT_unlock"); - uiMenuItemO(head, 0, "SEQUENCER_OT_mute"); - uiMenuItemO(head, 0, "SEQUENCER_OT_unmute"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_reload"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_lock"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_unlock"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_mute"); + uiItemO(layout, NULL, 0, "SEQUENCER_OT_unmute"); - uiMenuItemEnumO(head, "Mute Deselected Strips", 0, "SEQUENCER_OT_mute", "type", SEQ_UNSELECTED); + uiItemEnumO(layout, "Mute Deselected Strips", 0, "SEQUENCER_OT_mute", "type", SEQ_UNSELECTED); } void sequencer_header_buttons(const bContext *C, ARegion *ar) diff --git a/source/blender/editors/space_text/SConscript b/source/blender/editors/space_text/SConscript index 3d5ccc318e1..09ba961bfce 100644 --- a/source/blender/editors/space_text/SConscript +++ b/source/blender/editors/space_text/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') defs = [] incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' #/intern/bmfont ../../python ../../makesrna ../../blenfont' +incs += ' ../../python ../../makesrna ../../blenfont' if not env['WITH_BF_PYTHON']: defs.append('DISABLE_PYTHON') diff --git a/source/blender/editors/space_text/space_text.c b/source/blender/editors/space_text/space_text.c index 89852955ca3..577dae433c1 100644 --- a/source/blender/editors/space_text/space_text.c +++ b/source/blender/editors/space_text/space_text.c @@ -127,13 +127,17 @@ static void text_listener(ScrArea *sa, wmNotifier *wmn) if(!wmn->reference || wmn->reference == st->text) { ED_area_tag_redraw(sa); - if(wmn->data == ND_CURSOR) { + if(wmn->data == ND_CURSOR || wmn->action == NA_EDITED) { ARegion *ar; for(ar=sa->regionbase.first; ar; ar= ar->next) if(ar->regiontype==RGN_TYPE_WINDOW) text_update_cursor_moved(st, ar); } + + if(wmn->action == NA_EDITED) + if(st->text) + text_update_edited(st->text); } else if(wmn->data == ND_DISPLAY) ED_area_tag_redraw(sa); @@ -147,6 +151,7 @@ static void text_operatortypes(void) WM_operatortype_append(TEXT_OT_new); WM_operatortype_append(TEXT_OT_open); WM_operatortype_append(TEXT_OT_reload); + WM_operatortype_append(TEXT_OT_unlink); WM_operatortype_append(TEXT_OT_save); WM_operatortype_append(TEXT_OT_save_as); WM_operatortype_append(TEXT_OT_make_internal); @@ -401,9 +406,6 @@ void ED_spacetype_text(void) art->init= text_properties_area_init; art->draw= text_properties_area_draw; - - text_properties_register(art); - BLI_addhead(&st->regiontypes, art); /* regions: header */ diff --git a/source/blender/editors/space_text/text_header.c b/source/blender/editors/space_text/text_header.c index 0ab43cbf455..83c144d88c5 100644 --- a/source/blender/editors/space_text/text_header.c +++ b/source/blender/editors/space_text/text_header.c @@ -155,44 +155,46 @@ static uiBlock *text_plugin_scriptsmenu(bContext *C, void *args_unused) } #endif -static void text_editmenu_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void text_editmenu_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemEnumO(head, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP); - uiMenuItemEnumO(head, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM); + uiItemEnumO(layout, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP); + uiItemEnumO(layout, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM); } -static void text_editmenu_selectmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void text_editmenu_selectmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemO(head, 0, "TEXT_OT_select_all"); - uiMenuItemO(head, 0, "TEXT_OT_select_line"); + uiItemO(layout, NULL, 0, "TEXT_OT_select_all"); + uiItemO(layout, NULL, 0, "TEXT_OT_select_line"); } -static void text_editmenu_markermenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void text_editmenu_markermenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemO(head, 0, "TEXT_OT_markers_clear"); - uiMenuItemO(head, 0, "TEXT_OT_next_marker"); - uiMenuItemO(head, 0, "TEXT_OT_previous_marker"); + uiItemO(layout, NULL, 0, "TEXT_OT_markers_clear"); + uiItemO(layout, NULL, 0, "TEXT_OT_next_marker"); + uiItemO(layout, NULL, 0, "TEXT_OT_previous_marker"); } -static void text_formatmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void text_formatmenu(const bContext *C, Menu *menu) { - uiMenuItemO(head, 0, "TEXT_OT_indent"); - uiMenuItemO(head, 0, "TEXT_OT_unindent"); + uiLayout *layout= menu->layout; - uiMenuSeparator(head); + uiItemO(layout, NULL, 0, "TEXT_OT_indent"); + uiItemO(layout, NULL, 0, "TEXT_OT_unindent"); - uiMenuItemO(head, 0, "TEXT_OT_comment"); - uiMenuItemO(head, 0, "TEXT_OT_uncomment"); + uiItemS(layout); - uiMenuSeparator(head); + uiItemO(layout, NULL, 0, "TEXT_OT_comment"); + uiItemO(layout, NULL, 0, "TEXT_OT_uncomment"); - uiMenuLevelEnumO(head, "TEXT_OT_convert_whitespace", "type"); + uiItemS(layout); + + uiItemMenuEnumO(layout, NULL, 0, "TEXT_OT_convert_whitespace", "type"); } -static void text_editmenu_to3dmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void text_editmenu_to3dmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemBooleanO(head, "One Object", 0, "TEXT_OT_to_3d_object", "split_lines", 0); - uiMenuItemBooleanO(head, "One Object Per Line", 0, "TEXT_OT_to_3d_object", "split_lines", 1); + uiItemBooleanO(layout, "One Object", 0, "TEXT_OT_to_3d_object", "split_lines", 0); + uiItemBooleanO(layout, "One Object Per Line", 0, "TEXT_OT_to_3d_object", "split_lines", 1); } static int text_menu_edit_poll(bContext *C) @@ -200,308 +202,56 @@ static int text_menu_edit_poll(bContext *C) return (CTX_data_edit_text(C) != NULL); } -static void text_editmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void text_editmenu(const bContext *C, Menu *menu) { - uiMenuItemO(head, 0, "ED_OT_undo"); - uiMenuItemO(head, 0, "ED_OT_redo"); + uiLayout *layout= menu->layout; - uiMenuSeparator(head); + uiItemO(layout, NULL, 0, "ED_OT_undo"); + uiItemO(layout, NULL, 0, "ED_OT_redo"); - uiMenuItemO(head, 0, "TEXT_OT_cut"); - uiMenuItemO(head, 0, "TEXT_OT_copy"); - uiMenuItemO(head, 0, "TEXT_OT_paste"); + uiItemS(layout); - uiMenuSeparator(head); + uiItemO(layout, NULL, 0, "TEXT_OT_cut"); + uiItemO(layout, NULL, 0, "TEXT_OT_copy"); + uiItemO(layout, NULL, 0, "TEXT_OT_paste"); - uiMenuLevel(head, "View", text_editmenu_viewmenu); - uiMenuLevel(head, "Select", text_editmenu_selectmenu); - uiMenuLevel(head, "Markers", text_editmenu_markermenu); + uiItemS(layout); - uiMenuSeparator(head); + uiItemMenuF(layout, "View", 0, text_editmenu_viewmenu); + uiItemMenuF(layout, "Select", 0, text_editmenu_selectmenu); + uiItemMenuF(layout, "Markers", 0, text_editmenu_markermenu); - uiMenuItemO(head, 0, "TEXT_OT_jump"); - uiMenuItemO(head, 0, "TEXT_OT_properties"); + uiItemS(layout); - uiMenuSeparator(head); + uiItemO(layout, NULL, 0, "TEXT_OT_jump"); + uiItemO(layout, NULL, 0, "TEXT_OT_properties"); - uiMenuLevel(head, "Text to 3D Object", text_editmenu_to3dmenu); -} + uiItemS(layout); -static void text_filemenu(bContext *C, uiMenuItem *head, void *arg_unused) -{ - SpaceText *st= (SpaceText*)CTX_wm_space_data(C); - Text *text= st->text; - - uiMenuItemO(head, 0, "TEXT_OT_new"); - uiMenuItemO(head, 0, "TEXT_OT_open"); - - if(text) { - uiMenuItemO(head, 0, "TEXT_OT_reload"); - - uiMenuSeparator(head); - - uiMenuItemO(head, 0, "TEXT_OT_save"); - uiMenuItemO(head, 0, "TEXT_OT_save_as"); - - if(text->name) - uiMenuItemO(head, 0, "TEXT_OT_make_internal"); - - uiMenuSeparator(head); - - uiMenuItemO(head, 0, "TEXT_OT_run_script"); - -#ifndef DISABLE_PYTHON - if(BPY_is_pyconstraint(text)) - uiMenuItemO(head, 0, "TEXT_OT_refresh_pyconstraints"); -#endif - } - -#ifndef DISABLE_PYTHON - // XXX uiMenuSeparator(head); - - // XXX uiDefIconTextBlockBut(block, text_template_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Script Templates", 0, yco-=20, 120, 19, ""); - // XXX uiDefIconTextBlockBut(block, text_plugin_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Text Plugins", 0, yco-=20, 120, 19, ""); -#endif -} - -/*********************** datablock browse *************************/ - -static void text_unlink(Main *bmain, Text *text) -{ - bScreen *scr; - ScrArea *area; - SpaceLink *sl; - - /* XXX this ifdef is in fact dangerous, if python is - * disabled it will leave invalid pointers in files! */ - -#ifndef DISABLE_PYTHON - // XXX BPY_clear_bad_scriptlinks(text); - // XXX BPY_free_pyconstraint_links(text); - // XXX free_text_controllers(text); - // XXX free_dome_warp_text(text); - - /* check if this text was used as script link: - * this check function unsets the pointers and returns how many - * script links used this Text */ - if(0) // XXX BPY_text_check_all_scriptlinks (text)) - ; // XXX notifier: allqueue(REDRAWBUTSSCRIPT, 0); - - /* equivalently for pynodes: */ - if(0) // XXX nodeDynamicUnlinkText ((ID*)text)) - ; // XXX notifier: allqueue(REDRAWNODE, 0); -#endif - - for(scr= bmain->screen.first; scr; scr= scr->id.next) { - for(area= scr->areabase.first; area; area= area->next) { - for(sl= area->spacedata.first; sl; sl= sl->next) { - if(sl->spacetype==SPACE_TEXT) { - SpaceText *st= (SpaceText*) sl; - - if(st->text==text) { - st->text= NULL; - st->top= 0; - - if(st==area->spacedata.first) - ED_area_tag_redraw(area); - } - } - } - } - } - - free_libblock(&bmain->text, text); -} - -static void text_idpoin_handle(bContext *C, ID *id, int event) -{ - SpaceText *st= (SpaceText*)CTX_wm_space_data(C); - Text *text; - - switch(event) { - case UI_ID_BROWSE: - st->text= (Text*)id; - st->top= 0; - - text_update_edited(st->text); - WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text); - - ED_undo_push(C, "Browse Text"); - break; - case UI_ID_DELETE: - text= st->text; - - /* make the previous text active, if its not there make the next text active */ - if(text->id.prev) { - st->text = text->id.prev; - WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text); - } - else if(text->id.next) { - st->text = text->id.next; - WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text); - } - - text_unlink(CTX_data_main(C), text); - WM_event_add_notifier(C, NC_TEXT|NA_REMOVED, text); - - ED_undo_push(C, "Delete Text"); - break; - case UI_ID_RENAME: - break; - case UI_ID_ADD_NEW: - WM_operator_name_call(C, "TEXT_OT_new", WM_OP_INVOKE_REGION_WIN, NULL); - break; - case UI_ID_OPEN: - WM_operator_name_call(C, "TEXT_OT_open", WM_OP_INVOKE_REGION_WIN, NULL); - break; - } + uiItemMenuF(layout, "Text to 3D Object", 0, text_editmenu_to3dmenu); } /********************** header buttons ***********************/ -static void text_header_draw(const bContext *C, Header *header) -{ - bScreen *sc= CTX_wm_screen(C); - SpaceText *st= (SpaceText*)CTX_wm_space_data(C); - PointerRNA spaceptr; - Text *text= st->text; - uiLayout *layout= header->layout; - - RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr); - - uiTemplateHeaderMenus(layout); - uiItemM(layout, "Text", 0, text_filemenu); - if(text) { - uiItemM(layout, "Edit", 0, text_editmenu); - uiItemM(layout, "Format", 0, text_formatmenu); - } - - /* warning button if text is out of date */ - if(text && text_file_modified(text)) { - uiTemplateHeaderButtons(layout); - uiTemplateSetColor(layout, TH_REDALERT); - uiItemO(layout, "", ICON_HELP, "TEXT_OT_resolve_conflict"); - } - - uiTemplateHeaderButtons(layout); - uiItemR(layout, "", ICON_LINENUMBERS_OFF, &spaceptr, "line_numbers", 0); - uiItemR(layout, "", ICON_WORDWRAP_OFF, &spaceptr, "word_wrap", 0); - uiItemR(layout, "", ICON_SYNTAX_OFF, &spaceptr, "syntax_highlight", 0); - // XXX uiItemR(layout, "", ICON_SCRIPTPLUGINS, &spaceptr, "do_python_plugins", 0); - - uiTemplateHeaderID(layout, &spaceptr, "text", - UI_ID_BROWSE|UI_ID_RENAME|UI_ID_ADD_NEW|UI_ID_OPEN|UI_ID_DELETE, - text_idpoin_handle); - - /* file info */ - if(text) { - char fname[HEADER_PATH_MAX]; - static char headtxt[HEADER_PATH_MAX+17]; - int len; - - if(text->name) { - len = strlen(text->name); - if(len > HEADER_PATH_MAX-1) - len = HEADER_PATH_MAX-1; - strncpy(fname, text->name, len); - fname[len]='\0'; - if(text->flags & TXT_ISDIRTY) - sprintf(headtxt, "File: *%s (unsaved)", fname); - else - sprintf(headtxt, "File: %s", fname); - } - else - sprintf(headtxt, text->id.lib? "Text: External": "Text: Internal"); - - uiTemplateHeaderButtons(layout); - uiItemL(layout, headtxt, 0); - } -} - void text_header_register(ARegionType *art) { - HeaderType *ht; + MenuType *mt; - /* header */ - ht= MEM_callocN(sizeof(HeaderType), "spacetype text header"); - strcpy(ht->idname, "TEXT_HT_header"); - ht->draw= text_header_draw; - BLI_addhead(&art->headertypes, ht); + mt= MEM_callocN(sizeof(MenuType), "spacetype text menu edit"); + strcpy(mt->idname, "TEXT_MT_edit"); + strcpy(mt->label, "Edit"); + mt->draw= text_editmenu; + BLI_addhead(&art->menutypes, mt); + + mt= MEM_callocN(sizeof(MenuType), "spacetype text menu format"); + strcpy(mt->idname, "TEXT_MT_format"); + strcpy(mt->label, "Format"); + mt->draw= text_formatmenu; + BLI_addhead(&art->menutypes, mt); } /************************** properties ******************************/ -static void text_properties_panel_draw(const bContext *C, Panel *panel) -{ - bScreen *sc= CTX_wm_screen(C); - SpaceText *st= CTX_wm_space_text(C); - uiLayout *layout= panel->layout; - PointerRNA spaceptr; - - RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr); - - uiLayoutColumn(layout); - uiItemR(layout, NULL, ICON_LINENUMBERS_OFF, &spaceptr, "line_numbers", 0); - uiItemR(layout, NULL, ICON_WORDWRAP_OFF, &spaceptr, "word_wrap", 0); - uiItemR(layout, NULL, ICON_SYNTAX_OFF, &spaceptr, "syntax_highlight", 0); - - uiLayoutColumn(layout); - uiItemR(layout, NULL, 0, &spaceptr, "font_size", 0); - uiItemR(layout, NULL, 0, &spaceptr, "tab_width", 0); -} - -static void text_find_panel_draw(const bContext *C, Panel *panel) -{ - bScreen *sc= CTX_wm_screen(C); - SpaceText *st= CTX_wm_space_text(C); - uiLayout *layout= panel->layout; - PointerRNA spaceptr; - - RNA_pointer_create(&sc->id, &RNA_SpaceTextEditor, st, &spaceptr); - - /* find */ - uiLayoutRow(layout); - uiItemR(layout, "", 0, &spaceptr, "find_text", 0); - uiItemO(layout, "", ICON_TEXT, "TEXT_OT_find_set_selected"); - uiLayoutColumn(layout); - uiItemO(layout, NULL, 0, "TEXT_OT_find"); - - /* replace */ - uiLayoutRow(layout); - uiItemR(layout, "", 0, &spaceptr, "replace_text", 0); - uiItemO(layout, "", ICON_TEXT, "TEXT_OT_replace_set_selected"); - uiLayoutColumn(layout); - uiItemO(layout, NULL, 0, "TEXT_OT_replace"); - - /* mark */ - uiLayoutColumn(layout); - uiItemO(layout, NULL, 0, "TEXT_OT_mark_all"); - - /* settings */ - uiLayoutColumnFlow(layout, 0); - uiItemR(layout, "Wrap", 0, &spaceptr, "find_wrap", 0); - uiItemR(layout, "All", 0, &spaceptr, "find_all", 0); -} - -void text_properties_register(ARegionType *art) -{ - PanelType *pt; - - /* panels: properties */ - pt= MEM_callocN(sizeof(PanelType), "spacetype text panel"); - strcpy(pt->idname, "TEXT_PT_properties"); - strcpy(pt->label, "Properties"); - pt->draw= text_properties_panel_draw; - BLI_addtail(&art->paneltypes, pt); - - /* panels: find */ - pt= MEM_callocN(sizeof(PanelType), "spacetype text panel"); - strcpy(pt->idname, "TEXT_PT_find"); - strcpy(pt->label, "Find"); - pt->draw= text_find_panel_draw; - BLI_addtail(&art->paneltypes, pt); -} - ARegion *text_has_properties_region(ScrArea *sa) { ARegion *ar, *arnew; @@ -570,75 +320,75 @@ void TEXT_OT_properties(wmOperatorType *ot) { // RMB - uiMenuItem *head; + uiPopupMenu *pup; if(text) { - head= uiPupMenuBegin("Text", 0); + pup= uiPupMenuBegin("Text", 0); if(txt_has_sel(text)) { - uiMenuItemO(head, 0, "TEXT_OT_cut"); - uiMenuItemO(head, 0, "TEXT_OT_copy"); + uiItemO(layout, NULL, 0, "TEXT_OT_cut"); + uiItemO(layout, NULL, 0, "TEXT_OT_copy"); } - uiMenuItemO(head, 0, "TEXT_OT_paste"); - uiMenuItemO(head, 0, "TEXT_OT_new"); - uiMenuItemO(head, 0, "TEXT_OT_open"); - uiMenuItemO(head, 0, "TEXT_OT_save"); - uiMenuItemO(head, 0, "TEXT_OT_save_as"); - uiMenuItemO(head, 0, "TEXT_OT_run_script"); - uiPupMenuEnd(C, head); + uiItemO(layout, NULL, 0, "TEXT_OT_paste"); + uiItemO(layout, NULL, 0, "TEXT_OT_new"); + uiItemO(layout, NULL, 0, "TEXT_OT_open"); + uiItemO(layout, NULL, 0, "TEXT_OT_save"); + uiItemO(layout, NULL, 0, "TEXT_OT_save_as"); + uiItemO(layout, NULL, 0, "TEXT_OT_run_script"); + uiPupMenuEnd(C, pup); } else { - head= uiPupMenuBegin("File", 0); - uiMenuItemO(head, 0, "TEXT_OT_new"); - uiMenuItemO(head, 0, "TEXT_OT_open"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("File", 0); + uiItemO(layout, NULL, 0, "TEXT_OT_new"); + uiItemO(layout, NULL, 0, "TEXT_OT_open"); + uiPupMenuEnd(C, pup); } } { // Alt+Shift+E - uiMenuItem *head; + uiPopupMenu *pup; - head= uiPupMenuBegin("Edit", 0); - uiMenuItemO(head, 0, "TEXT_OT_cut"); - uiMenuItemO(head, 0, "TEXT_OT_copy"); - uiMenuItemO(head, 0, "TEXT_OT_paste"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Edit", 0); + uiItemO(layout, NULL, 0, "TEXT_OT_cut"); + uiItemO(layout, NULL, 0, "TEXT_OT_copy"); + uiItemO(layout, NULL, 0, "TEXT_OT_paste"); + uiPupMenuEnd(C, pup); } { // Alt+Shift+F - uiMenuItem *head; + uiPopupMenu *pup; if(text) { - head= uiPupMenuBegin("Text", 0); - uiMenuItemO(head, 0, "TEXT_OT_new"); - uiMenuItemO(head, 0, "TEXT_OT_open"); - uiMenuItemO(head, 0, "TEXT_OT_save"); - uiMenuItemO(head, 0, "TEXT_OT_save_as"); - uiMenuItemO(head, 0, "TEXT_OT_run_script"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Text", 0); + uiItemO(layout, NULL, 0, "TEXT_OT_new"); + uiItemO(layout, NULL, 0, "TEXT_OT_open"); + uiItemO(layout, NULL, 0, "TEXT_OT_save"); + uiItemO(layout, NULL, 0, "TEXT_OT_save_as"); + uiItemO(layout, NULL, 0, "TEXT_OT_run_script"); + uiPupMenuEnd(C, pup); } else { - head= uiPupMenuBegin("File", 0); - uiMenuItemO(head, 0, "TEXT_OT_new"); - uiMenuItemO(head, 0, "TEXT_OT_open"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("File", 0); + uiItemO(layout, NULL, 0, "TEXT_OT_new"); + uiItemO(layout, NULL, 0, "TEXT_OT_open"); + uiPupMenuEnd(C, pup); } } { // Alt+Shift+V - uiMenuItem *head; + uiPopupMenu *pup; - head= uiPupMenuBegin("Text", 0); - uiMenuItemEnumO(head, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP); - uiMenuItemEnumO(head, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM); - uiMenuItemEnumO(head, "Page Up", 0, "TEXT_OT_move", "type", PREV_PAGE); - uiMenuItemEnumO(head, "Page Down", 0, "TEXT_OT_move", "type", NEXT_PAGE); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Text", 0); + uiItemEnumO(layout, "Top of File", 0, "TEXT_OT_move", "type", FILE_TOP); + uiItemEnumO(layout, "Bottom of File", 0, "TEXT_OT_move", "type", FILE_BOTTOM); + uiItemEnumO(layout, "Page Up", 0, "TEXT_OT_move", "type", PREV_PAGE); + uiItemEnumO(layout, "Page Down", 0, "TEXT_OT_move", "type", NEXT_PAGE); + uiPupMenuEnd(C, pup); } #endif diff --git a/source/blender/editors/space_text/text_intern.h b/source/blender/editors/space_text/text_intern.h index 7ec75e292ce..259811aee0f 100644 --- a/source/blender/editors/space_text/text_intern.h +++ b/source/blender/editors/space_text/text_intern.h @@ -33,7 +33,6 @@ struct ARegion; struct ARegionType; struct bContext; -struct BMF_Font; struct ReportList; struct ScrArea; struct SpaceText; @@ -43,7 +42,6 @@ struct wmOperatorType; struct wmWindowManager; /* text_header.c */ -void text_properties_register(struct ARegionType *art); void text_header_register(struct ARegionType *art); /* text_draw.c */ @@ -106,6 +104,7 @@ enum { DEL_NEXT_CHAR, DEL_PREV_CHAR, DEL_NEXT_WORD, DEL_PREV_WORD }; void TEXT_OT_new(struct wmOperatorType *ot); void TEXT_OT_open(struct wmOperatorType *ot); void TEXT_OT_reload(struct wmOperatorType *ot); +void TEXT_OT_unlink(struct wmOperatorType *ot); void TEXT_OT_save(struct wmOperatorType *ot); void TEXT_OT_save_as(struct wmOperatorType *ot); void TEXT_OT_make_internal(struct wmOperatorType *ot); diff --git a/source/blender/editors/space_text/text_ops.c b/source/blender/editors/space_text/text_ops.c index c7fe02975ef..913bd307ab2 100644 --- a/source/blender/editors/space_text/text_ops.c +++ b/source/blender/editors/space_text/text_ops.c @@ -49,6 +49,7 @@ #include "BKE_context.h" #include "BKE_depsgraph.h" #include "BKE_global.h" +#include "BKE_library.h" #include "BKE_main.h" #include "BKE_report.h" #include "BKE_suggestions.h" @@ -269,6 +270,90 @@ void TEXT_OT_reload(wmOperatorType *ot) ot->poll= text_edit_poll; } +/******************* delete operator *********************/ + +static void text_unlink(Main *bmain, Text *text) +{ + bScreen *scr; + ScrArea *area; + SpaceLink *sl; + + /* XXX this ifdef is in fact dangerous, if python is + * disabled it will leave invalid pointers in files! */ + +#ifndef DISABLE_PYTHON + // XXX BPY_clear_bad_scriptlinks(text); + // XXX BPY_free_pyconstraint_links(text); + // XXX free_text_controllers(text); + // XXX free_dome_warp_text(text); + + /* check if this text was used as script link: + * this check function unsets the pointers and returns how many + * script links used this Text */ + if(0) // XXX BPY_text_check_all_scriptlinks (text)) + ; // XXX notifier: allqueue(REDRAWBUTSSCRIPT, 0); + + /* equivalently for pynodes: */ + if(0) // XXX nodeDynamicUnlinkText ((ID*)text)) + ; // XXX notifier: allqueue(REDRAWNODE, 0); +#endif + + for(scr= bmain->screen.first; scr; scr= scr->id.next) { + for(area= scr->areabase.first; area; area= area->next) { + for(sl= area->spacedata.first; sl; sl= sl->next) { + if(sl->spacetype==SPACE_TEXT) { + SpaceText *st= (SpaceText*) sl; + + if(st->text==text) { + st->text= NULL; + st->top= 0; + + if(st==area->spacedata.first) + ED_area_tag_redraw(area); + } + } + } + } + } + + free_libblock(&bmain->text, text); +} + +static int unlink_exec(bContext *C, wmOperator *op) +{ + SpaceText *st= CTX_wm_space_text(C); + Text *text= CTX_data_edit_text(C); + + /* make the previous text active, if its not there make the next text active */ + if(st) { + if(text->id.prev) { + st->text = text->id.prev; + WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text); + } + else if(text->id.next) { + st->text = text->id.next; + WM_event_add_notifier(C, NC_TEXT|ND_CURSOR, st->text); + } + } + + text_unlink(CTX_data_main(C), text); + WM_event_add_notifier(C, NC_TEXT|NA_REMOVED, text); + + return OPERATOR_FINISHED; +} + +void TEXT_OT_unlink(wmOperatorType *ot) +{ + /* identifiers */ + ot->name= "Unlink"; + ot->idname= "TEXT_OT_unlink"; + + /* api callbacks */ + ot->exec= unlink_exec; + ot->invoke= WM_operator_confirm; + ot->poll= text_edit_poll; +} + /******************* make internal operator *********************/ static int make_internal_exec(bContext *C, wmOperator *op) @@ -2448,31 +2533,35 @@ static int resolve_conflict_exec(bContext *C, wmOperator *op) static int resolve_conflict_invoke(bContext *C, wmOperator *op, wmEvent *event) { Text *text= CTX_data_edit_text(C); - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; switch(text_file_modified(text)) { case 1: if(text->flags & TXT_ISDIRTY) { /* modified locally and externally, ahhh. offer more possibilites. */ - head= uiPupMenuBegin("File Modified Outside and Inside Blender", 0); - uiMenuItemEnumO(head, "Reload from disk (ignore local changes)", 0, op->type->idname, "resolution", RESOLVE_RELOAD); - uiMenuItemEnumO(head, "Save to disk (ignore outside changes)", 0, op->type->idname, "resolution", RESOLVE_SAVE); - uiMenuItemEnumO(head, "Make text internal (separate copy)", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("File Modified Outside and Inside Blender", 0); + layout= uiPupMenuLayout(pup); + uiItemEnumO(layout, "Reload from disk (ignore local changes)", 0, op->type->idname, "resolution", RESOLVE_RELOAD); + uiItemEnumO(layout, "Save to disk (ignore outside changes)", 0, op->type->idname, "resolution", RESOLVE_SAVE); + uiItemEnumO(layout, "Make text internal (separate copy)", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL); + uiPupMenuEnd(C, pup); } else { - head= uiPupMenuBegin("File Modified Outside Blender", 0); - uiMenuItemEnumO(head, "Reload from disk", 0, op->type->idname, "resolution", RESOLVE_RELOAD); - uiMenuItemEnumO(head, "Make text internal (separate copy)", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL); - uiMenuItemEnumO(head, "Ignore", 0, op->type->idname, "resolution", RESOLVE_IGNORE); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("File Modified Outside Blender", 0); + layout= uiPupMenuLayout(pup); + uiItemEnumO(layout, "Reload from disk", 0, op->type->idname, "resolution", RESOLVE_RELOAD); + uiItemEnumO(layout, "Make text internal (separate copy)", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL); + uiItemEnumO(layout, "Ignore", 0, op->type->idname, "resolution", RESOLVE_IGNORE); + uiPupMenuEnd(C, pup); } break; case 2: - head= uiPupMenuBegin("File Deleted Outside Blender", 0); - uiMenuItemEnumO(head, "Make text internal", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL); - uiMenuItemEnumO(head, "Recreate file", 0, op->type->idname, "resolution", RESOLVE_SAVE); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("File Deleted Outside Blender", 0); + layout= uiPupMenuLayout(pup); + uiItemEnumO(layout, "Make text internal", 0, op->type->idname, "resolution", RESOLVE_MAKE_INTERNAL); + uiItemEnumO(layout, "Recreate file", 0, op->type->idname, "resolution", RESOLVE_SAVE); + uiPupMenuEnd(C, pup); break; } diff --git a/source/blender/editors/space_view3d/Makefile b/source/blender/editors/space_view3d/Makefile index 442ab502e65..dd4eab89411 100644 --- a/source/blender/editors/space_view3d/Makefile +++ b/source/blender/editors/space_view3d/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include # not very neat.... CPPFLAGS += -I../../windowmanager @@ -51,6 +50,7 @@ CPPFLAGS += -I../../python CPPFLAGS += -I../../gpu CPPFLAGS += -I../../makesrna CPPFLAGS += -I../../render/extern/include +CPPFLAGS += -I../../blenfont CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include # own include diff --git a/source/blender/editors/space_view3d/SConscript b/source/blender/editors/space_view3d/SConscript index c9b29f61e44..b771095c781 100644 --- a/source/blender/editors/space_view3d/SConscript +++ b/source/blender/editors/space_view3d/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' ../../render/extern/include #/intern/guardedalloc #intern/bmfont' -incs += ' ../../gpu ../../makesrna' +incs += ' ../../render/extern/include #/intern/guardedalloc' +incs += ' ../../gpu ../../makesrna ../../blenfont' env.BlenderLib ( 'bf_editors_space_view3d', sources, Split(incs), [], libtype=['core'], priority=[40] ) diff --git a/source/blender/editors/space_view3d/drawarmature.c b/source/blender/editors/space_view3d/drawarmature.c index 5d130cee48d..dfdd70b11e7 100644 --- a/source/blender/editors/space_view3d/drawarmature.c +++ b/source/blender/editors/space_view3d/drawarmature.c @@ -37,8 +37,6 @@ #include "MEM_guardedalloc.h" -#include "BMF_Api.h" - #include "DNA_action_types.h" #include "DNA_armature_types.h" #include "DNA_constraint_types.h" @@ -74,6 +72,7 @@ #include "WM_api.h" #include "WM_types.h" +#include "BLF_api.h" #include "UI_resources.h" @@ -1806,9 +1805,8 @@ static void draw_pose_channels(Scene *scene, View3D *v3d, RegionView3D *rv3d, Ba /* Draw names of bone */ if (arm->flag & ARM_DRAWNAMES) { VecMidf(vec, pchan->pose_head, pchan->pose_tail); - glRasterPos3fv(vec); - BMF_DrawString(G.font, " "); - BMF_DrawString(G.font, pchan->name); + BLF_draw_default(vec[0], vec[1], vec[2], " "); + BLF_draw_default(vec[0] + BLF_width_default(" "), vec[1], vec[2], pchan->name); } /* Draw additional axes on the bone tail */ @@ -1993,8 +1991,8 @@ static void draw_ebones(View3D *v3d, RegionView3D *rv3d, Object *ob, int dt) if (arm->flag & ARM_DRAWNAMES) { VecMidf(vec, eBone->head, eBone->tail); glRasterPos3fv(vec); - BMF_DrawString(G.font, " "); - BMF_DrawString(G.font, eBone->name); + BLF_draw_default(vec[0], vec[1], vec[2], " "); + BLF_draw_default(vec[0] + BLF_width_default(" "), vec[1], vec[2], eBone->name); } /* Draw additional axes */ if (arm->flag & ARM_DRAWAXES) { @@ -2155,15 +2153,13 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec /* only draw framenum if several consecutive highlighted points don't occur on same point */ if (a == 0) { - glRasterPos3fv(fp); sprintf(str, " %d\n", (a+sfra)); - BMF_DrawString(G.font, str); + BLF_draw_default(fp[0], fp[1], fp[2], str); } else if ((a > stepsize) && (a < len-stepsize)) { if ((VecEqual(fp, fp-(stepsize*3))==0) || (VecEqual(fp, fp+(stepsize*3))==0)) { - glRasterPos3fv(fp); sprintf(str, " %d\n", (a+sfra)); - BMF_DrawString(G.font, str); + BLF_draw_default(fp[0], fp[1], fp[2], str); } } } @@ -2205,9 +2201,8 @@ static void draw_pose_paths(Scene *scene, View3D *v3d, RegionView3D *rv3d, Objec if (ak->cfra == (a+sfra)) { char str[32]; - glRasterPos3fv(fp); sprintf(str, " %d\n", (a+sfra)); - BMF_DrawString(G.font, str); + BLF_draw_default(fp[0], fp[1], fp[2], str); } } } diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 74667f933c2..3725fc24b6c 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -34,8 +34,6 @@ #include "MEM_guardedalloc.h" -#include "BMF_Api.h" - #include "IMB_imbuf.h" @@ -107,6 +105,7 @@ #include "UI_interface_icons.h" #include "WM_api.h" +#include "BLF_api.h" #include "view3d_intern.h" // own include @@ -361,16 +360,15 @@ void drawaxes(float size, int flag, char drawtype) glEnd(); v2[axis]+= size*0.125; - glRasterPos3fv(v2); // patch for 3d cards crashing on glSelect for text drawing (IBM) if((flag & DRAW_PICKING) == 0) { if (axis==0) - BMF_DrawString(G.font, "x"); + BLF_draw_default(v2[0], v2[1], v2[2], "x"); else if (axis==1) - BMF_DrawString(G.font, "y"); + BLF_draw_default(v2[0], v2[1], v2[2], "y"); else - BMF_DrawString(G.font, "z"); + BLF_draw_default(v2[0], v2[1], v2[2], "z"); } } break; @@ -1778,7 +1776,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E Mesh *me= ob->data; EditEdge *eed; EditFace *efa; - float v1[3], v2[3], v3[3], v4[3]; + float v1[3], v2[3], v3[3], v4[3], x, y, z; float fvec[3]; char val[32]; /* Stores the measurement display text here */ char conv_float[5]; /* Use a float conversion matching the grid size */ @@ -1818,7 +1816,9 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E VECCOPY(v1, eed->v1->co); VECCOPY(v2, eed->v2->co); - glRasterPos3f( 0.5*(v1[0]+v2[0]), 0.5*(v1[1]+v2[1]), 0.5*(v1[2]+v2[2])); + x= 0.5*(v1[0]+v2[0]); + y= 0.5*(v1[1]+v2[1]); + z= 0.5*(v1[2]+v2[2]); if(v3d->flag & V3D_GLOBAL_STATS) { Mat4MulVecfl(ob->obmat, v1); @@ -1826,7 +1826,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E } sprintf(val, conv_float, VecLenf(v1, v2)); - BMF_DrawString( G.fonts, val); + BLF_draw_default(x, y, z, val); } } } @@ -1861,8 +1861,7 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E area = AreaT3Dfl(v1, v2, v3); sprintf(val, conv_float, area); - glRasterPos3fv(efa->cent); - BMF_DrawString( G.fonts, val); + BLF_draw_default(efa->cent[0], efa->cent[1], efa->cent[2], val); } } } @@ -1904,15 +1903,13 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E /* Vec 1 */ sprintf(val,"%.3f", VecAngle3(v4, v1, v2)); VecLerpf(fvec, efa->cent, efa->v1->co, 0.8); - glRasterPos3fv(fvec); - BMF_DrawString( G.fonts, val); + BLF_draw_default(efa->cent[0], efa->cent[1], efa->cent[2], val); } if( (e1->f & e2->f & SELECT) || (G.moving && (efa->v2->f & SELECT)) ) { /* Vec 2 */ sprintf(val,"%.3f", VecAngle3(v1, v2, v3)); VecLerpf(fvec, efa->cent, efa->v2->co, 0.8); - glRasterPos3fv(fvec); - BMF_DrawString( G.fonts, val); + BLF_draw_default(fvec[0], fvec[1], fvec[2], val); } if( (e2->f & e3->f & SELECT) || (G.moving && (efa->v3->f & SELECT)) ) { /* Vec 3 */ @@ -1921,16 +1918,14 @@ static void draw_em_measure_stats(View3D *v3d, RegionView3D *rv3d, Object *ob, E else sprintf(val,"%.3f", VecAngle3(v2, v3, v1)); VecLerpf(fvec, efa->cent, efa->v3->co, 0.8); - glRasterPos3fv(fvec); - BMF_DrawString( G.fonts, val); + BLF_draw_default(fvec[0], fvec[1], fvec[2], val); } /* Vec 4 */ if(efa->v4) { if( (e3->f & e4->f & SELECT) || (G.moving && (efa->v4->f & SELECT)) ) { sprintf(val,"%.3f", VecAngle3(v3, v4, v1)); VecLerpf(fvec, efa->cent, efa->v4->co, 0.8); - glRasterPos3fv(fvec); - BMF_DrawString( G.fonts, val); + BLF_draw_default(fvec[0], fvec[1], fvec[2], val); } } } @@ -3257,9 +3252,8 @@ static void draw_new_particle_system(Scene *scene, View3D *v3d, RegionView3D *rv if(part->draw&PART_DRAW_NUM && !(G.f & G_RENDER_SHADOW)){ /* in path drawing state.co is the end point */ - glRasterPos3f(state.co[0], state.co[1], state.co[2]); sprintf(val," %i",a); - BMF_DrawString(G.font, val); + BLF_draw_default(state.co[0], state.co[1], state.co[2], val); } } } @@ -3574,9 +3568,8 @@ static void draw_particle_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Ob for(k=0, key=edit->keys[i]+k; ktotkey; k++, key++){ if(key->flag & PEK_HIDE) continue; - glRasterPos3fv(key->world_co); sprintf(val," %.1f",*key->time); - BMF_DrawString(G.font, val); + BLF_draw_default(key->world_co[0], key->world_co[1], key->world_co[2], val); } } } @@ -3598,9 +3591,8 @@ static void draw_particle_edit(Scene *scene, View3D *v3d, RegionView3D *rv3d, Ob glEnd(); if((pset->flag & PE_SHOW_TIME) && !(G.f & G_RENDER_SHADOW)){ - glRasterPos3fv(key->world_co); sprintf(val," %.1f",*key->time); - BMF_DrawString(G.font, val); + BLF_draw_default(key->world_co[0], key->world_co[1], key->world_co[2], val); } } } @@ -4625,13 +4617,12 @@ void drawRBpivot(bRigidBodyJointConstraint *data) glVertex3fv(v1); glVertex3fv(v); glEnd(); - glRasterPos3fv(v); if (axis==0) - BMF_DrawString(G.font, "px"); + BLF_draw_default(v[0], v[1], v[2], "px"); else if (axis==1) - BMF_DrawString(G.font, "py"); + BLF_draw_default(v[0], v[1], v[2], "py"); else - BMF_DrawString(G.font, "pz"); + BLF_draw_default(v[0], v[1], v[2], "pz"); } glLineWidth (1.0f); setlinestyle(0); @@ -5051,10 +5042,8 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* but, we also dont draw names for sets or duplicators */ if(flag == 0) { if(v3d->zbuf) glDisable(GL_DEPTH_TEST); - glRasterPos3f(0.0, 0.0, 0.0); - - BMF_DrawString(G.font, " "); - BMF_DrawString(G.font, ob->id.name+2); + BLF_draw_default(0.0, 0.0, 0.0, " "); + BLF_draw_default(0.0 + BLF_width_default(" "), 0.0, 0.0, ob->id.name+2); if(v3d->zbuf) glEnable(GL_DEPTH_TEST); } } @@ -5135,7 +5124,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) char col[4], col2[4]; UI_GetThemeColor3ubv(TH_GRID, col); - make_axis_color(col, col2, 'z'); + UI_make_axis_color(col, col2, 'z'); glColor3ubv((GLubyte *)col2); cob= constraints_make_evalob(scene, ob, NULL, CONSTRAINT_OBTYPE_OBJECT); diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index b7682225fe3..9ed7dd50d2e 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -88,13 +88,41 @@ ARegion *view3d_has_buttons_region(ScrArea *sa) BLI_insertlinkafter(&sa->regionbase, ar, arnew); arnew->regiontype= RGN_TYPE_UI; - arnew->alignment= RGN_ALIGN_LEFT; + arnew->alignment= RGN_ALIGN_RIGHT; arnew->flag = RGN_FLAG_HIDDEN; return arnew; } +ARegion *view3d_has_tools_region(ScrArea *sa) +{ + ARegion *ar, *arnew; + + for(ar= sa->regionbase.first; ar; ar= ar->next) + if(ar->regiontype==RGN_TYPE_TOOLS) + return ar; + + /* add subdiv level; after header */ + for(ar= sa->regionbase.first; ar; ar= ar->next) + if(ar->regiontype==RGN_TYPE_HEADER) + break; + + /* is error! */ + if(ar==NULL) return NULL; + + arnew= MEM_callocN(sizeof(ARegion), "tools for view3d"); + + BLI_insertlinkafter(&sa->regionbase, ar, arnew); + arnew->regiontype= RGN_TYPE_TOOLS; + arnew->alignment= RGN_OVERLAP_LEFT; + + arnew->flag = RGN_FLAG_HIDDEN; + + return arnew; +} + + /* ******************** default callbacks for view3d space ***************** */ @@ -155,7 +183,6 @@ static SpaceLink *view3d_new(const bContext *C) rv3d->persp= 1; rv3d->view= 7; rv3d->dist= 10.0; - Mat4One(rv3d->twmat); return (SpaceLink *)v3d; } @@ -474,7 +501,7 @@ static void view3d_buttons_area_draw(const bContext *C, ARegion *ar) float col[3]; /* clear */ - UI_GetThemeColor3fv(TH_HEADER, col); + UI_GetThemeColor3fv(TH_BACK, col); glClearColor(col[0], col[1], col[2], 0.0); glClear(GL_COLOR_BUFFER_BIT); @@ -517,6 +544,40 @@ static void view3d_buttons_area_listener(ARegion *ar, wmNotifier *wmn) } } +/* add handlers, stuff you only do once or on area/region changes */ +static void view3d_tools_area_init(wmWindowManager *wm, ARegion *ar) +{ + ListBase *keymap; + + keymap= WM_keymap_listbase(wm, "View2D Buttons List", 0, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); + keymap= WM_keymap_listbase(wm, "View3D Generic", SPACE_VIEW3D, 0); + WM_event_add_keymap_handler(&ar->handlers, keymap); + // XXX +20 temp... need init for this + UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_PANELS_UI, ar->winx+20, ar->winy); +} + + +static void view3d_tools_area_draw(const bContext *C, ARegion *ar) +{ + float col[3]; + + /* clear */ + UI_GetThemeColor3fv(TH_BACK, col); + + glClearColor(col[0], col[1], col[2], 0.0); + glClear(GL_COLOR_BUFFER_BIT); + + /* set view2d view matrix for scrolling (without scrollers) */ + UI_view2d_view_ortho(C, &ar->v2d); + + view3d_tools_area_defbuts(C, ar); + + /* restore view matrix? */ + UI_view2d_view_restore(C); +} + + /* * Returns true if the Object is a from an external blend file (libdata) */ @@ -788,6 +849,18 @@ void ED_spacetype_view3d(void) art->init= view3d_buttons_area_init; art->draw= view3d_buttons_area_draw; BLI_addhead(&st->regiontypes, art); + + /* regions: tool(bar) */ + art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region"); + art->regionid = RGN_TYPE_TOOLS; + art->minsizex= 120; // XXX + art->minsizey= 50; // XXX + art->keymapflag= ED_KEYMAP_UI|ED_KEYMAP_FRAMES; + art->listener= view3d_buttons_area_listener; + art->init= view3d_tools_area_init; + art->draw= view3d_tools_area_draw; + BLI_addhead(&st->regiontypes, art); + /* regions: header */ art= MEM_callocN(sizeof(ARegionType), "spacetype view3d region"); diff --git a/source/blender/editors/space_view3d/view3d_buttons.c b/source/blender/editors/space_view3d/view3d_buttons.c index 9a9786cebff..5dad3f8cc7d 100644 --- a/source/blender/editors/space_view3d/view3d_buttons.c +++ b/source/blender/editors/space_view3d/view3d_buttons.c @@ -984,7 +984,6 @@ static void view3d_panel_transform_spaces(const bContext *C, ARegion *ar, short for (index = V3D_MANIP_CUSTOM, ts = transform_spaces->first ; ts ; ts = ts->next, index++) { - UI_ThemeColor(TH_BUT_ACTION); if (v3d->twmode == index) { but = uiDefIconButS(block,ROW, B_REDR, ICON_CHECKBOX_HLT, xco,yco,XIC,YIC, &v3d->twmode, 5.0, (float)index, 0, 0, "Use this Custom Transform Orientation"); } @@ -1726,7 +1725,7 @@ static void view3d_panel_operator_redo(const bContext *C, ARegion *ar, short cnt wmOperator *op; PointerRNA ptr; uiBlock *block; - int height; + int height = 0; block= uiBeginBlock(C, ar, "view3d_panel_operator_redo", UI_EMBOSS); if(uiNewPanel(C, ar, block, "Last Operator", "View3d", 340, 10, 318, height)==0) return; diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 0a063182368..bbf0279692a 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -69,9 +69,9 @@ #include "BIF_gl.h" #include "BIF_glutil.h" -#include "BMF_Api.h" #include "WM_api.h" +#include "BLF_api.h" #include "ED_armature.h" #include "ED_keyframing.h" @@ -232,27 +232,6 @@ static void drawgrid_draw(ARegion *ar, float wx, float wy, float x, float y, flo } -// not intern, called in editobject for constraint axis too -void make_axis_color(char *col, char *col2, char axis) -{ - if(axis=='x') { - col2[0]= col[0]>219?255:col[0]+36; - col2[1]= col[1]<26?0:col[1]-26; - col2[2]= col[2]<26?0:col[2]-26; - } - else if(axis=='y') { - col2[0]= col[0]<46?0:col[0]-36; - col2[1]= col[1]>189?255:col[1]+66; - col2[2]= col[2]<46?0:col[2]-36; - } - else { - col2[0]= col[0]<26?0:col[0]-26; - col2[1]= col[1]<26?0:col[1]-26; - col2[2]= col[2]>209?255:col[2]+46; - } - -} - static void drawgrid(ARegion *ar, View3D *v3d) { /* extern short bgpicmode; */ @@ -365,15 +344,15 @@ static void drawgrid(ARegion *ar, View3D *v3d) /* center cross */ if( ELEM(rv3d->view, V3D_VIEW_RIGHT, V3D_VIEW_LEFT)) - make_axis_color(col, col2, 'y'); - else make_axis_color(col, col2, 'x'); + UI_make_axis_color(col, col2, 'y'); + else UI_make_axis_color(col, col2, 'x'); glColor3ubv((GLubyte *)col2); fdrawline(0.0, y, (float)ar->winx, y); if( ELEM(rv3d->view, V3D_VIEW_TOP, V3D_VIEW_BOTTOM)) - make_axis_color(col, col2, 'y'); - else make_axis_color(col, col2, 'z'); + UI_make_axis_color(col, col2, 'y'); + else UI_make_axis_color(col, col2, 'z'); glColor3ubv((GLubyte *)col2); fdrawline(x, 0.0, x, (float)ar->winy); @@ -412,7 +391,7 @@ static void drawfloor(Scene *scene, View3D *v3d) if(a==0) { /* check for the 'show Y axis' preference */ if (v3d->gridflag & V3D_SHOW_Y) { - make_axis_color(col, col2, 'y'); + UI_make_axis_color(col, col2, 'y'); glColor3ubv((GLubyte *)col2); draw_line = 1; @@ -451,7 +430,7 @@ static void drawfloor(Scene *scene, View3D *v3d) if(a==0) { /* check for the 'show X axis' preference */ if (v3d->gridflag & V3D_SHOW_X) { - make_axis_color(col, col2, 'x'); + UI_make_axis_color(col, col2, 'x'); glColor3ubv((GLubyte *)col2); draw_line = 1; @@ -488,7 +467,7 @@ static void drawfloor(Scene *scene, View3D *v3d) /* draw the Z axis line */ /* check for the 'show Z axis' preference */ if (v3d->gridflag & V3D_SHOW_Z) { - make_axis_color(col, col2, 'z'); + UI_make_axis_color(col, col2, 'z'); glColor3ubv((GLubyte *)col2); glBegin(GL_LINE_STRIP); @@ -567,7 +546,7 @@ static void draw_view_axis(RegionView3D *rv3d) vec[1] = vec[2] = 0; QuatMulVecf(rv3d->viewquat, vec); - make_axis_color((char *)gridcol, (char *)col, 'x'); + UI_make_axis_color((char *)gridcol, (char *)col, 'x'); rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); s = s<0.5 ? s+0.5 : 1.0; v = 0.3; @@ -579,8 +558,7 @@ static void draw_view_axis(RegionView3D *rv3d) dy = vec[1] * k; fdrawline(start, start + ydisp, start + dx, start + dy + ydisp); if (fabs(dx) > toll || fabs(dy) > toll) { - glRasterPos2i(start + dx + 2, start + dy + ydisp + 2); - BMF_DrawString(G.fonts, "x"); + BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "x"); } /* Y */ @@ -588,7 +566,7 @@ static void draw_view_axis(RegionView3D *rv3d) vec[0] = vec[2] = 0; QuatMulVecf(rv3d->viewquat, vec); - make_axis_color((char *)gridcol, (char *)col, 'y'); + UI_make_axis_color((char *)gridcol, (char *)col, 'y'); rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); s = s<0.5 ? s+0.5 : 1.0; v = 0.3; @@ -600,8 +578,7 @@ static void draw_view_axis(RegionView3D *rv3d) dy = vec[1] * k; fdrawline(start, start + ydisp, start + dx, start + dy + ydisp); if (fabs(dx) > toll || fabs(dy) > toll) { - glRasterPos2i(start + dx + 2, start + dy + ydisp + 2); - BMF_DrawString(G.fonts, "y"); + BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "y"); } /* Z */ @@ -609,7 +586,7 @@ static void draw_view_axis(RegionView3D *rv3d) vec[1] = vec[0] = 0; QuatMulVecf(rv3d->viewquat, vec); - make_axis_color((char *)gridcol, (char *)col, 'z'); + UI_make_axis_color((char *)gridcol, (char *)col, 'z'); rgb_to_hsv(col[0]/255.0f, col[1]/255.0f, col[2]/255.0f, &h, &s, &v); s = s<0.5 ? s+0.5 : 1.0; v = 0.5; @@ -621,8 +598,7 @@ static void draw_view_axis(RegionView3D *rv3d) dy = vec[1] * k; fdrawline(start, start + ydisp, start + dx, start + dy + ydisp); if (fabs(dx) > toll || fabs(dy) > toll) { - glRasterPos2i(start + dx + 2, start + dy + ydisp + 2); - BMF_DrawString(G.fonts, "z"); + BLF_draw_default(start + dx + 2, start + dy + ydisp + 2, 0.0f, "z"); } /* restore line-width */ @@ -714,8 +690,7 @@ static void draw_viewport_name(ARegion *ar, View3D *v3d) if (printable) { UI_ThemeColor(TH_TEXT_HI); - glRasterPos2i(10, ar->winy-20); - BMF_DrawString(G.fonts, printable); + BLF_draw_default(10, ar->winy-20, 0.0f, printable); } if (v3d->localview) { @@ -820,7 +795,7 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d) } /* colour depends on whether there is a keyframe */ - if (id_frame_has_keyframe((ID *)ob, /*frame_to_float(scene, CFRA)*/(float)(CFRA), v3d->keyflags)) + if (id_frame_has_keyframe((ID *)ob, /*frame_to_float(scene, CFRA)*/(float)(CFRA), v3d->keyflags)) UI_ThemeColor(TH_VERTEX_SELECT); else UI_ThemeColor(TH_TEXT_HI); @@ -838,9 +813,8 @@ static void draw_selected_name(Scene *scene, Object *ob, View3D *v3d) if (U.uiflag & USER_SHOW_ROTVIEWICON) offset = 14 + (U.rvisize * 2); - - glRasterPos2i(offset, 10); - BMF_DrawString(G.fonts, info); + + BLF_draw_default(offset, 10, 0.0f, info); } static void view3d_get_viewborder_size(Scene *scene, ARegion *ar, float size_r[2]) @@ -1020,9 +994,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) /* camera name - draw in highlighted text color */ if (ca && (ca->flag & CAM_SHOWNAME)) { UI_ThemeColor(TH_TEXT_HI); - glRasterPos2f(x1, y1-15); - - BMF_DrawString(G.font, v3d->camera->id.name+2); + BLF_draw_default(x1, y1-15, 0.0f, v3d->camera->id.name+2); UI_ThemeColor(TH_WIRE); } diff --git a/source/blender/editors/space_view3d/view3d_header.c b/source/blender/editors/space_view3d/view3d_header.c index 5d149fb2f9b..24d211d81ab 100644 --- a/source/blender/editors/space_view3d/view3d_header.c +++ b/source/blender/editors/space_view3d/view3d_header.c @@ -92,8 +92,6 @@ #include "UI_resources.h" #include "UI_view2d.h" -#include "BMF_Api.h" - #include "view3d_intern.h" @@ -620,82 +618,82 @@ static void do_view3d_viewmenu(bContext *C, void *arg, int event) } #endif -static void view3d_view_viewnavmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_view_viewnavmenu(bContext *C, uiLayout *layout, void *arg_unused) { -// uiMenuItemO(head, 0, "VIEW3D_OT_view_fly_mode"); +// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_fly_mode"); -// uiMenuSeparator(head); +// uiItemS(layout); - uiMenuItemsEnumO(head, "VIEW3D_OT_view_orbit", "type"); + uiItemsEnumO(layout, "VIEW3D_OT_view_orbit", "type"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemsEnumO(head, "VIEW3D_OT_view_pan", "type"); + uiItemsEnumO(layout, "VIEW3D_OT_view_pan", "type"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemFloatO(head, "Zoom in", 0, "VIEW3D_OT_zoom", "delta", 1.0f); - uiMenuItemFloatO(head, "Zoom out", 0, "VIEW3D_OT_zoom", "delta", -1.0f); + uiItemFloatO(layout, "Zoom in", 0, "VIEW3D_OT_zoom", "delta", 1.0f); + uiItemFloatO(layout, "Zoom out", 0, "VIEW3D_OT_zoom", "delta", -1.0f); } -static void view3d_view_alignviewmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_view_alignviewmenu(bContext *C, uiLayout *layout, void *arg_unused) { } -static void view3d_viewmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_viewmenu(bContext *C, uiLayout *layout, void *arg_unused) { ScrArea *sa= CTX_wm_area(C); -// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_transform_orientations_panel"); // Transform Orientations... -// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_render_preview_panel"); // render preview... -// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_view_properties_panel"); // View Properties.... -// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_background_image_panel"); // Background Image.... -// uiMenuItemO(head, ICON_MENU_PANEL, "VIEW3D_OT_toggle_grease_pencil_panel"); // Grease Pencil.... +// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_transform_orientations_panel"); // Transform Orientations... +// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_render_preview_panel"); // render preview... +// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_view_properties_panel"); // View Properties.... +// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_background_image_panel"); // Background Image.... +// uiItemO(layout, ICON_MENU_PANEL, "VIEW3D_OT_toggle_grease_pencil_panel"); // Grease Pencil.... -// uiMenuSeparator(head); +// uiItemS(layout); - uiMenuItemEnumO(head, "", 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_CAMERA); - uiMenuItemEnumO(head, "", 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_TOP); - uiMenuItemEnumO(head, "", 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_FRONT); - uiMenuItemEnumO(head, "", 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_RIGHT); + uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_CAMERA); + uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_TOP); + uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_FRONT); + uiItemEnumO(layout, NULL, 0, "VIEW3D_OT_viewnumpad", "type", V3D_VIEW_RIGHT); - //uiMenuLevel(head, "Cameras", view3d_view_camerasmenu); + //uiItemMenuF(layout, "Cameras", view3d_view_camerasmenu); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "VIEW3D_OT_view_persportho"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_view_persportho"); - uiMenuSeparator(head); + uiItemS(layout); -// uiMenuItemO(head, 0, "VIEW3D_OT_view_show_all_layers"); +// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_show_all_layers"); -// uiMenuSeparator(head); +// uiItemS(layout); -// uiMenuItemO(head, 0, "VIEW3D_OT_view_local_view"); -// uiMenuItemO(head, 0, "VIEW3D_OT_view_global_view"); +// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_local_view"); +// uiItemO(layout, NULL, 0, "VIEW3D_OT_view_global_view"); -// uiMenuSeparator(head); +// uiItemS(layout); - uiMenuLevel(head, "View Navigation", view3d_view_viewnavmenu); - uiMenuLevel(head, "Align View", view3d_view_alignviewmenu); + uiItemMenuF(layout, "View Navigation", 0, view3d_view_viewnavmenu); + uiItemMenuF(layout, "Align View", 0, view3d_view_alignviewmenu); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuContext(head, WM_OP_INVOKE_REGION_WIN); + uiLayoutContext(layout, WM_OP_INVOKE_REGION_WIN); - uiMenuItemO(head, 0, "VIEW3D_OT_clipping"); - uiMenuItemO(head, 0, "VIEW3D_OT_zoom_border"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_clipping"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_zoom_border"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "VIEW3D_OT_viewcenter"); - uiMenuItemO(head, 0, "VIEW3D_OT_viewhome"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_viewcenter"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_viewhome"); - uiMenuSeparator(head); + uiItemS(layout); - if(sa->full) uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow - else uiMenuItemO(head, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow + if(sa->full) uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Tile Window", Ctrl UpArrow + else uiItemO(layout, NULL, 0, "SCREEN_OT_screen_full_area"); // "Maximize Window", Ctr DownArrow } #if 0 static uiBlock *view3d_viewmenu(bContext *C, ARegion *ar, void *arg_unused) @@ -1208,39 +1206,39 @@ static uiBlock *view3d_select_meshmenu(bContext *C, ARegion *ar, void *arg_unuse return block; } -static void view3d_select_curvemenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_select_curvemenu(bContext *C, uiLayout *layout, void *arg_unused) { Object *obedit= CTX_data_edit_object(C); - uiMenuItemO(head, 0, "VIEW3D_OT_select_border"); - uiMenuItemO(head, 0, "VIEW3D_OT_select_circle"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_select_circle"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "CURVE_OT_select_all_toggle"); - uiMenuItemO(head, 0, "CURVE_OT_select_invert"); - uiMenuItemO(head, 0, "CURVE_OT_select_random"); // Random... - uiMenuItemO(head, 0, "CURVE_OT_select_every_nth"); // Every Nth.. + uiItemO(layout, NULL, 0, "CURVE_OT_select_all_toggle"); + uiItemO(layout, NULL, 0, "CURVE_OT_select_invert"); + uiItemO(layout, NULL, 0, "CURVE_OT_select_random"); // Random... + uiItemO(layout, NULL, 0, "CURVE_OT_select_every_nth"); // Every Nth.. - uiMenuSeparator(head); + uiItemS(layout); if(obedit->type == OB_SURF) { - uiMenuItemO(head, 0, "CURVE_OT_select_row"); + uiItemO(layout, NULL, 0, "CURVE_OT_select_row"); } else { - uiMenuItemO(head, 0, "CURVE_OT_de_select_first"); - uiMenuItemO(head, 0, "CURVE_OT_de_select_last"); - uiMenuItemO(head, 0, "CURVE_OT_select_next"); - uiMenuItemO(head, 0, "CURVE_OT_select_previous"); + uiItemO(layout, NULL, 0, "CURVE_OT_de_select_first"); + uiItemO(layout, NULL, 0, "CURVE_OT_de_select_last"); + uiItemO(layout, NULL, 0, "CURVE_OT_select_next"); + uiItemO(layout, NULL, 0, "CURVE_OT_select_previous"); } - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "CURVE_OT_select_more"); - uiMenuItemO(head, 0, "CURVE_OT_select_less"); + uiItemO(layout, NULL, 0, "CURVE_OT_select_more"); + uiItemO(layout, NULL, 0, "CURVE_OT_select_less"); /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */ - /* uiMenuItemO(head, 0, "CURVE_OT_select_linked"); */ + /* uiItemO(layout, NULL, 0, "CURVE_OT_select_linked"); */ #if 0 G.qual |= LR_CTRLKEY; @@ -3288,44 +3286,44 @@ static uiBlock *view3d_edit_meshmenu(bContext *C, ARegion *ar, void *arg_unused) return block; } -static void view3d_edit_curve_controlpointsmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_edit_curve_controlpointsmenu(bContext *C, uiLayout *layout, void *arg_unused) { Object *obedit= CTX_data_edit_object(C); if(obedit->type == OB_CURVE) { - uiMenuItemEnumO(head, "", 0, "TFM_OT_transform", "mode", TFM_TILT); - uiMenuItemO(head, 0, "CURVE_OT_tilt_clear"); - uiMenuItemO(head, 0, "CURVE_OT_separate"); + uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TILT); + uiItemO(layout, NULL, 0, "CURVE_OT_tilt_clear"); + uiItemO(layout, NULL, 0, "CURVE_OT_separate"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemEnumO(head, "", 0, "CURVE_OT_handle_type_set", "type", 1); - uiMenuItemEnumO(head, "", 0, "CURVE_OT_handle_type_set", "type", 3); - uiMenuItemEnumO(head, "", 0, "CURVE_OT_handle_type_set", "type", 2); + uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 1); + uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 3); + uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 2); - uiMenuSeparator(head); + uiItemS(layout); } - // XXX uiMenuItemO(head, 0, "OBJECT_OT_make_vertex_parent"); Make VertexParent|Ctrl P + // XXX uiItemO(layout, NULL, 0, "OBJECT_OT_make_vertex_parent"); Make VertexParent|Ctrl P // make_parent() - // XXX uiMenuItemO(head, 0, "OBJECT_OT_add_hook"); Add Hook| Ctrl H + // XXX uiItemO(layout, NULL, 0, "OBJECT_OT_add_hook"); Add Hook| Ctrl H // add_hook_menu() } -static void view3d_edit_curve_segmentsmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_edit_curve_segmentsmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemO(head, 0, "CURVE_OT_subdivide"); - uiMenuItemO(head, 0, "CURVE_OT_switch_direction"); + uiItemO(layout, NULL, 0, "CURVE_OT_subdivide"); + uiItemO(layout, NULL, 0, "CURVE_OT_switch_direction"); } -static void view3d_edit_curve_showhidemenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_edit_curve_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemO(head, 0, "CURVE_OT_reveal"); - uiMenuItemO(head, 0, "CURVE_OT_hide"); - uiMenuItemBooleanO(head, "Hide Unselected", 0, "CURVE_OT_hide", "unselected", 1); + uiItemO(layout, NULL, 0, "CURVE_OT_reveal"); + uiItemO(layout, NULL, 0, "CURVE_OT_hide"); + uiItemBooleanO(layout, "Hide Unselected", 0, "CURVE_OT_hide", "unselected", 1); } -static void view3d_edit_curvemenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_edit_curvemenu(bContext *C, uiLayout *layout, void *arg_unused) { PointerRNA sceneptr; Scene *scene= CTX_data_scene(C); @@ -3338,7 +3336,7 @@ static void view3d_edit_curvemenu(bContext *C, uiMenuItem *head, void *arg_unuse uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, ""); uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, ""); - uiMenuSeparator(head); + uiItemS(layout); #endif // XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, ""); @@ -3347,26 +3345,26 @@ static void view3d_edit_curvemenu(bContext *C, uiMenuItem *head, void *arg_unuse // common_deletekey(); - uiMenuItemO(head, 0, "CURVE_OT_extrude"); - uiMenuItemO(head, 0, "CURVE_OT_duplicate"); - uiMenuItemO(head, 0, "CURVE_OT_separate"); - uiMenuItemO(head, 0, "CURVE_OT_make_segment"); - uiMenuItemO(head, 0, "CURVE_OT_cyclic_toggle"); - uiMenuItemO(head, 0, "CURVE_OT_delete"); // Delete... + uiItemO(layout, NULL, 0, "CURVE_OT_extrude"); + uiItemO(layout, NULL, 0, "CURVE_OT_duplicate"); + uiItemO(layout, NULL, 0, "CURVE_OT_separate"); + uiItemO(layout, NULL, 0, "CURVE_OT_make_segment"); + uiItemO(layout, NULL, 0, "CURVE_OT_cyclic_toggle"); + uiItemO(layout, NULL, 0, "CURVE_OT_delete"); // Delete... - uiMenuSeparator(head); + uiItemS(layout); - uiMenuLevel(head, "Control Points", view3d_edit_curve_controlpointsmenu); - uiMenuLevel(head, "Segments", view3d_edit_curve_segmentsmenu); + uiItemMenuF(layout, "Control Points", 0, view3d_edit_curve_controlpointsmenu); + uiItemMenuF(layout, "Segments", 0, view3d_edit_curve_segmentsmenu); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemBooleanR(head, &sceneptr, "proportional_editing"); // |O - uiMenuLevelEnumR(head, &sceneptr, "proportional_editing_falloff"); + uiItemR(layout, NULL, 0, &sceneptr, "proportional_editing", 0); // |O + uiItemMenuEnumR(layout, NULL, 0, &sceneptr, "proportional_editing_falloff"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuLevel(head, "Show/Hide Control Points", view3d_edit_curve_showhidemenu); + uiItemMenuF(layout, "Show/Hide Control Points", 0, view3d_edit_curve_showhidemenu); } static void do_view3d_edit_mball_showhidemenu(bContext *C, void *arg, int event) @@ -3477,43 +3475,43 @@ static uiBlock *view3d_edit_metaballmenu(bContext *C, ARegion *ar, void *arg_unu return block; } -static void view3d_edit_text_charsmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_edit_text_charsmenu(bContext *C, uiLayout *layout, void *arg_unused) { /* the character codes are specified in UTF-8 */ - uiMenuItemStringO(head, "Copyright|Alt C", 0, "FONT_OT_text_insert", "text", "\xC2\xA9"); - uiMenuItemStringO(head, "Registered Trademark|Alt R", 0, "FONT_OT_text_insert", "text", "\xC2\xAE"); + uiItemStringO(layout, "Copyright|Alt C", 0, "FONT_OT_text_insert", "text", "\xC2\xA9"); + uiItemStringO(layout, "Registered Trademark|Alt R", 0, "FONT_OT_text_insert", "text", "\xC2\xAE"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemStringO(head, "Degree Sign|Alt G", 0, "FONT_OT_text_insert", "text", "\xC2\xB0"); - uiMenuItemStringO(head, "Multiplication Sign|Alt x", 0, "FONT_OT_text_insert", "text", "\xC3\x97"); - uiMenuItemStringO(head, "Circle|Alt .", 0, "FONT_OT_text_insert", "text", "\xC2\x8A"); - uiMenuItemStringO(head, "Superscript 1|Alt 1", 0, "FONT_OT_text_insert", "text", "\xC2\xB9"); - uiMenuItemStringO(head, "Superscript 2|Alt 2", 0, "FONT_OT_text_insert", "text", "\xC2\xB2"); - uiMenuItemStringO(head, "Superscript 3|Alt 3", 0, "FONT_OT_text_insert", "text", "\xC2\xB3"); - uiMenuItemStringO(head, "Double >>|Alt >", 0, "FONT_OT_text_insert", "text", "\xC2\xBB"); - uiMenuItemStringO(head, "Double <<|Alt <", 0, "FONT_OT_text_insert", "text", "\xC2\xAB"); - uiMenuItemStringO(head, "Promillage|Alt %", 0, "FONT_OT_text_insert", "text", "\xE2\x80\xB0"); + uiItemStringO(layout, "Degree Sign|Alt G", 0, "FONT_OT_text_insert", "text", "\xC2\xB0"); + uiItemStringO(layout, "Multiplication Sign|Alt x", 0, "FONT_OT_text_insert", "text", "\xC3\x97"); + uiItemStringO(layout, "Circle|Alt .", 0, "FONT_OT_text_insert", "text", "\xC2\x8A"); + uiItemStringO(layout, "Superscript 1|Alt 1", 0, "FONT_OT_text_insert", "text", "\xC2\xB9"); + uiItemStringO(layout, "Superscript 2|Alt 2", 0, "FONT_OT_text_insert", "text", "\xC2\xB2"); + uiItemStringO(layout, "Superscript 3|Alt 3", 0, "FONT_OT_text_insert", "text", "\xC2\xB3"); + uiItemStringO(layout, "Double >>|Alt >", 0, "FONT_OT_text_insert", "text", "\xC2\xBB"); + uiItemStringO(layout, "Double <<|Alt <", 0, "FONT_OT_text_insert", "text", "\xC2\xAB"); + uiItemStringO(layout, "Promillage|Alt %", 0, "FONT_OT_text_insert", "text", "\xE2\x80\xB0"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemStringO(head, "Dutch Florin|Alt F", 0, "FONT_OT_text_insert", "text", "\xC2\xA4"); - uiMenuItemStringO(head, "British Pound|Alt L", 0, "FONT_OT_text_insert", "text", "\xC2\xA3"); - uiMenuItemStringO(head, "Japanese Yen|Alt Y", 0, "FONT_OT_text_insert", "text", "\xC2\xA5"); + uiItemStringO(layout, "Dutch Florin|Alt F", 0, "FONT_OT_text_insert", "text", "\xC2\xA4"); + uiItemStringO(layout, "British Pound|Alt L", 0, "FONT_OT_text_insert", "text", "\xC2\xA3"); + uiItemStringO(layout, "Japanese Yen|Alt Y", 0, "FONT_OT_text_insert", "text", "\xC2\xA5"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemStringO(head, "German S|Alt S", 0, "FONT_OT_text_insert", "text", "\xC3\x9F"); - uiMenuItemStringO(head, "Spanish Question Mark|Alt ?", 0, "FONT_OT_text_insert", "text", "\xC2\xBF"); - uiMenuItemStringO(head, "Spanish Exclamation Mark|Alt !", 0, "FONT_OT_text_insert", "text", "\xC2\xA1"); + uiItemStringO(layout, "German S|Alt S", 0, "FONT_OT_text_insert", "text", "\xC3\x9F"); + uiItemStringO(layout, "Spanish Question Mark|Alt ?", 0, "FONT_OT_text_insert", "text", "\xC2\xBF"); + uiItemStringO(layout, "Spanish Exclamation Mark|Alt !", 0, "FONT_OT_text_insert", "text", "\xC2\xA1"); } -static void view3d_edit_textmenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_edit_textmenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemO(head, 0, "FONT_OT_file_paste"); - uiMenuSeparator(head); - uiMenuLevel(head, "Special Characters", view3d_edit_text_charsmenu); + uiItemO(layout, NULL, 0, "FONT_OT_file_paste"); + uiItemS(layout); + uiItemMenuF(layout, "Special Characters", 0, view3d_edit_text_charsmenu); } static void do_view3d_edit_latticemenu(bContext *C, void *arg, int event) @@ -4527,7 +4525,7 @@ uiBlock *view3d_sculpt_inputmenu(bContext *C, ARegion *ar, void *arg_unused) return block; } -static void view3d_sculpt_menu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_sculpt_menu(bContext *C, uiLayout *layout, void *arg_unused) { bScreen *sc= CTX_wm_screen(C); Sculpt *s = CTX_data_tool_settings(C)->sculpt; @@ -4535,30 +4533,30 @@ static void view3d_sculpt_menu(bContext *C, uiMenuItem *head, void *arg_unused) RNA_pointer_create(&sc->id, &RNA_Sculpt, s, &rna); - uiMenuItemBooleanR(head, &rna, "symmetry_x"); - uiMenuItemBooleanR(head, &rna, "symmetry_y"); - uiMenuItemBooleanR(head, &rna, "symmetry_z"); - uiMenuItemBooleanR(head, &rna, "lock_x"); - uiMenuItemBooleanR(head, &rna, "lock_y"); - uiMenuItemBooleanR(head, &rna, "lock_z"); + uiItemR(layout, NULL, 0, &rna, "symmetry_x", 0); + uiItemR(layout, NULL, 0, &rna, "symmetry_y", 0); + uiItemR(layout, NULL, 0, &rna, "symmetry_z", 0); + uiItemR(layout, NULL, 0, &rna, "lock_x", 0); + uiItemR(layout, NULL, 0, &rna, "lock_y", 0); + uiItemR(layout, NULL, 0, &rna, "lock_z", 0); /* Brush settings */ RNA_pointer_create(&sc->id, &RNA_Brush, s->brush, &rna); /* Curve */ - uiMenuSeparator(head); - uiMenuItemEnumO(head, "", 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_SHARP); - uiMenuItemEnumO(head, "", 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_SMOOTH); - uiMenuItemEnumO(head, "", 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_MAX); + uiItemS(layout); + uiItemEnumO(layout, NULL, 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_SHARP); + uiItemEnumO(layout, NULL, 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_SMOOTH); + uiItemEnumO(layout, NULL, 0, "SCULPT_OT_brush_curve_preset", "mode", BRUSH_PRESET_MAX); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemBooleanR(head, &rna, "airbrush"); - uiMenuItemBooleanR(head, &rna, "rake"); - uiMenuItemBooleanR(head, &rna, "anchored"); - uiMenuItemBooleanR(head, &rna, "space"); + uiItemR(layout, NULL, 0, &rna, "airbrush", 0); + uiItemR(layout, NULL, 0, &rna, "rake", 0); + uiItemR(layout, NULL, 0, &rna, "anchored", 0); + uiItemR(layout, NULL, 0, &rna, "space", 0); - uiMenuItemBooleanR(head, &rna, "flip_direction"); + uiItemR(layout, NULL, 0, &rna, "flip_direction", 0); } uiBlock *view3d_sculptmenu(bContext *C, ARegion *ar, void *arg_unused) @@ -4695,59 +4693,59 @@ static uiBlock *view3d_faceselmenu(bContext *C, ARegion *ar, void *arg_unused) return block; } -static void view3d_select_particlemenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_select_particlemenu(bContext *C, uiLayout *layout, void *arg_unused) { Scene *scene= CTX_data_scene(C); - uiMenuItemO(head, 0, "VIEW3D_OT_select_border"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border"); - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "PARTICLE_OT_select_all_toggle"); - uiMenuItemO(head, 0, "PARTICLE_OT_select_linked"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_select_all_toggle"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_select_linked"); if(scene->selectmode & SCE_SELECT_POINT) { - uiMenuItemO(head, 0, "PARTICLE_OT_select_last"); // |W, 4 - uiMenuItemO(head, 0, "PARTICLE_OT_select_first"); // |W, 3 + uiItemO(layout, NULL, 0, "PARTICLE_OT_select_last"); // |W, 4 + uiItemO(layout, NULL, 0, "PARTICLE_OT_select_first"); // |W, 3 } - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "PARTICLE_OT_select_more"); - uiMenuItemO(head, 0, "PARTICLE_OT_select_less"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_select_more"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_select_less"); } -static void view3d_particle_showhidemenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_particle_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused) { - uiMenuItemO(head, 0, "PARTICLE_OT_reveal"); - uiMenuItemO(head, 0, "PARTICLE_OT_hide"); - uiMenuItemBooleanO(head, "Hide Unselected", 0, "PARTICLE_OT_hide", "unselected", 1); + uiItemO(layout, NULL, 0, "PARTICLE_OT_reveal"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_hide"); + uiItemBooleanO(layout, "Hide Unselected", 0, "PARTICLE_OT_hide", "unselected", 1); } -static void view3d_particlemenu(bContext *C, uiMenuItem *head, void *arg_unused) +static void view3d_particlemenu(bContext *C, uiLayout *layout, void *arg_unused) { Scene *scene= CTX_data_scene(C); // XXX uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Particle Edit Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, ""); // add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW); - // XXX uiMenuSeparator(head); + // XXX uiItemS(layout); // // XXX uiDefIconTextBut(block, BUTM, 1, (pset->flag & PE_X_MIRROR)? ICON_CHECKBOX_HLT: ICON_CHECKBOX_DEHLT, "X-Axis Mirror Editing", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); // pset->flag ^= PE_X_MIRROR; - uiMenuItemO(head, 0, "PARTICLE_OT_mirror"); // |Ctrl M + uiItemO(layout, NULL, 0, "PARTICLE_OT_mirror"); // |Ctrl M - uiMenuSeparator(head); + uiItemS(layout); - uiMenuItemO(head, 0, "PARTICLE_OT_remove_doubles"); // |W, 5 - uiMenuItemO(head, 0, "PARTICLE_OT_delete"); + uiItemO(layout, NULL, 0, "PARTICLE_OT_remove_doubles"); // |W, 5 + uiItemO(layout, NULL, 0, "PARTICLE_OT_delete"); if(scene->selectmode & SCE_SELECT_POINT) - uiMenuItemO(head, 0, "PARTICLE_OT_subdivide"); // |W, 2 - uiMenuItemO(head, 0, "PARTICLE_OT_rekey"); // |W, 1 + uiItemO(layout, NULL, 0, "PARTICLE_OT_subdivide"); // |W, 2 + uiItemO(layout, NULL, 0, "PARTICLE_OT_rekey"); // |W, 1 - uiMenuSeparator(head); + uiItemS(layout); - uiMenuLevel(head, "Show/Hide Particles", view3d_particle_showhidemenu); + uiItemMenuF(layout, "Show/Hide Particles", 0, view3d_particle_showhidemenu); } static char *view3d_modeselect_pup(Scene *scene) @@ -5553,18 +5551,20 @@ void view3d_header_buttons(const bContext *C, ARegion *ar) /* edit face toolbox */ static int editmesh_face_toolbox_invoke(bContext *C, wmOperator *op, wmEvent *event) { - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; - head= uiPupMenuBegin("Edit Faces", 0); + pup= uiPupMenuBegin("Edit Faces", 0); + layout= uiPupMenuLayout(pup); - uiMenuItemO(head, 0, "MESH_OT_fill"); - uiMenuItemO(head, 0, "MESH_OT_beauty_fill"); - uiMenuItemO(head, 0, "MESH_OT_quads_convert_to_tris"); - uiMenuItemO(head, 0, "MESH_OT_tris_convert_to_quads"); - uiMenuItemO(head, 0, "MESH_OT_edge_flip"); - uiMenuItemO(head, 0, "MESH_OT_faces_shade_smooth"); - uiMenuItemO(head, 0, "MESH_OT_faces_shade_solid"); - uiPupMenuEnd(C, head); + uiItemO(layout, NULL, 0, "MESH_OT_fill"); + uiItemO(layout, NULL, 0, "MESH_OT_beauty_fill"); + uiItemO(layout, NULL, 0, "MESH_OT_quads_convert_to_tris"); + uiItemO(layout, NULL, 0, "MESH_OT_tris_convert_to_quads"); + uiItemO(layout, NULL, 0, "MESH_OT_edge_flip"); + uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_smooth"); + uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_solid"); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h index ae77b4293bf..58ed8e9ba11 100644 --- a/source/blender/editors/space_view3d/view3d_intern.h +++ b/source/blender/editors/space_view3d/view3d_intern.h @@ -99,7 +99,6 @@ void draw_depth(Scene *scene, struct ARegion *ar, View3D *v3d, int (* func)(void void view3d_clr_clipping(void); void view3d_set_clipping(RegionView3D *rv3d); void add_view3d_after(View3D *v3d, Base *base, int type, int flag); -void make_axis_color(char *col, char *col2, char axis); void calc_viewborder(Scene *scene, struct ARegion *ar, View3D *v3d, rctf *viewborder_r); void circf(float x, float y, float rad); @@ -134,9 +133,12 @@ void setviewmatrixview3d(Scene *scene, View3D *v3d, RegionView3D *rv3d); /* view3d_buttons.c */ void VIEW3D_OT_properties(struct wmOperatorType *ot); - void view3d_buttons_area_defbuts(const struct bContext *C, ARegion *ar); +/* view3d_buttons.c */ +void VIEW3D_OT_toolbar(struct wmOperatorType *ot); +void view3d_tools_area_defbuts(const struct bContext *C, ARegion *ar); + /* view3d_snap.c */ int minmax_verts(Object *obedit, float *min, float *max); @@ -150,6 +152,7 @@ void VIEW3D_OT_snap_menu(struct wmOperatorType *ot); /* space_view3d.c */ ARegion *view3d_has_buttons_region(ScrArea *sa); +ARegion *view3d_has_tools_region(ScrArea *sa); #endif /* ED_VIEW3D_INTERN_H */ diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c index 41ef16bea4a..0ed43bead17 100644 --- a/source/blender/editors/space_view3d/view3d_ops.c +++ b/source/blender/editors/space_view3d/view3d_ops.c @@ -84,10 +84,12 @@ void view3d_operatortypes(void) WM_operatortype_append(VIEW3D_OT_setcameratoview); WM_operatortype_append(VIEW3D_OT_drawtype); WM_operatortype_append(VIEW3D_OT_editmesh_face_toolbox); - WM_operatortype_append(VIEW3D_OT_properties); WM_operatortype_append(VIEW3D_OT_localview); WM_operatortype_append(VIEW3D_OT_layers); + WM_operatortype_append(VIEW3D_OT_properties); + WM_operatortype_append(VIEW3D_OT_toolbar); + WM_operatortype_append(VIEW3D_OT_snap_selected_to_grid); WM_operatortype_append(VIEW3D_OT_snap_selected_to_cursor); WM_operatortype_append(VIEW3D_OT_snap_selected_to_center); @@ -108,6 +110,7 @@ void view3d_keymap(wmWindowManager *wm) WM_keymap_add_item(keymap, "PAINT_OT_weight_paint_toggle", TABKEY, KM_PRESS, KM_CTRL, 0); WM_keymap_add_item(keymap, "VIEW3D_OT_properties", NKEY, KM_PRESS, 0, 0); + WM_keymap_add_item(keymap, "VIEW3D_OT_toolbar", TKEY, KM_PRESS, 0, 0); /* only for region 3D window */ keymap= WM_keymap_listbase(wm, "View3D", SPACE_VIEW3D, 0); @@ -223,9 +226,6 @@ void view3d_keymap(wmWindowManager *wm) RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_weight_paint_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", WM_RADIALCONTROL_STRENGTH); RNA_enum_set(WM_keymap_add_item(keymap, "PAINT_OT_texture_paint_radial_control", FKEY, KM_PRESS, KM_SHIFT, 0)->ptr, "mode", WM_RADIALCONTROL_STRENGTH); - /* TODO - this is just while we have no way to load a text datablock */ - RNA_string_set(WM_keymap_add_item(keymap, "SCRIPT_OT_python_file_run", PKEY, KM_PRESS, 0, 0)->ptr, "filename", "test.py"); - transform_keymap_for_space(wm, keymap, SPACE_VIEW3D); } diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index d03586da2d5..9c4f0b576da 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -765,7 +765,7 @@ void VIEW3D_OT_select_lasso(wmOperatorType *ot) ot->poll= WM_operator_winactive; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_UNDO; RNA_def_collection_runtime(ot->srna, "path", &RNA_OperatorMousePath, "Path", ""); RNA_def_enum(ot->srna, "type", lasso_select_types, 0, "Type", ""); @@ -1546,7 +1546,7 @@ void VIEW3D_OT_select_border(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_UNDO; /* rna */ RNA_def_int(ot->srna, "event_type", 0, INT_MIN, INT_MAX, "Event Type", "", INT_MIN, INT_MAX); @@ -1599,7 +1599,7 @@ void VIEW3D_OT_select(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_UNDO; /* properties */ RNA_def_enum(ot->srna, "type", prop_select_types, 0, "Type", ""); @@ -1834,7 +1834,7 @@ void VIEW3D_OT_select_circle(wmOperatorType *ot) ot->poll= ED_operator_view3d_active; /* flags */ - ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO; + ot->flag= OPTYPE_UNDO; RNA_def_int(ot->srna, "x", 0, INT_MIN, INT_MAX, "X", "", INT_MIN, INT_MAX); RNA_def_int(ot->srna, "y", 0, INT_MIN, INT_MAX, "Y", "", INT_MIN, INT_MAX); diff --git a/source/blender/editors/space_view3d/view3d_snap.c b/source/blender/editors/space_view3d/view3d_snap.c index ad9d3f85538..7b417c94a73 100644 --- a/source/blender/editors/space_view3d/view3d_snap.c +++ b/source/blender/editors/space_view3d/view3d_snap.c @@ -1113,17 +1113,18 @@ int minmax_verts(Object *obedit, float *min, float *max) static int snap_menu_invoke(bContext *C, wmOperator *unused, wmEvent *event) { - uiMenuItem *head= uiPupMenuBegin("Snap", 0); + uiPopupMenu *pup= uiPupMenuBegin("Snap", 0); + uiLayout *layout= uiPupMenuLayout(pup); - uiMenuItemO(head, 0, "VIEW3D_OT_snap_selected_to_grid"); - uiMenuItemO(head, 0, "VIEW3D_OT_snap_selected_to_cursor"); - uiMenuItemO(head, 0, "VIEW3D_OT_snap_selected_to_center"); - uiMenuSeparator(head); - uiMenuItemO(head, 0, "VIEW3D_OT_snap_cursor_to_selected"); - uiMenuItemO(head, 0, "VIEW3D_OT_snap_cursor_to_grid"); - uiMenuItemO(head, 0, "VIEW3D_OT_snap_cursor_to_active"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_grid"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_cursor"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_center"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_selected"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_grid"); + uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_active"); - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); /* this operator is only for a menu, not used further */ return OPERATOR_CANCELLED; diff --git a/source/blender/editors/space_view3d/view3d_toolbar.c b/source/blender/editors/space_view3d/view3d_toolbar.c new file mode 100644 index 00000000000..9f16e124f77 --- /dev/null +++ b/source/blender/editors/space_view3d/view3d_toolbar.c @@ -0,0 +1,195 @@ +/** + * $Id: + * + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2009 Blender Foundation. + * All rights reserved. + * + * + * Contributor(s): Blender Foundation + * + * ***** END GPL LICENSE BLOCK ***** + */ + +#include +#include +#include +#include + +#include "DNA_ID.h" +#include "DNA_action_types.h" +#include "DNA_armature_types.h" +#include "DNA_curve_types.h" +#include "DNA_camera_types.h" +#include "DNA_lamp_types.h" +#include "DNA_lattice_types.h" +#include "DNA_meta_types.h" +#include "DNA_mesh_types.h" +#include "DNA_meshdata_types.h" +#include "DNA_object_types.h" +#include "DNA_space_types.h" +#include "DNA_scene_types.h" +#include "DNA_screen_types.h" +#include "DNA_userdef_types.h" +#include "DNA_view3d_types.h" +#include "DNA_world_types.h" + +#include "MEM_guardedalloc.h" + +#include "BLI_arithb.h" +#include "BLI_blenlib.h" +#include "BLI_editVert.h" +#include "BLI_rand.h" + +#include "BKE_action.h" +#include "BKE_brush.h" +#include "BKE_context.h" +#include "BKE_curve.h" +#include "BKE_customdata.h" +#include "BKE_depsgraph.h" +#include "BKE_idprop.h" +#include "BKE_mesh.h" +#include "BKE_object.h" +#include "BKE_global.h" +#include "BKE_scene.h" +#include "BKE_screen.h" +#include "BKE_utildefines.h" + +#include "BIF_gl.h" +#include "BIF_transform.h" + +#include "WM_api.h" +#include "WM_types.h" + +#include "RNA_access.h" +#include "RNA_define.h" + +#include "ED_armature.h" +#include "ED_curve.h" +#include "ED_image.h" +#include "ED_keyframing.h" +#include "ED_mesh.h" +#include "ED_object.h" +#include "ED_particle.h" +#include "ED_screen.h" +#include "ED_types.h" +#include "ED_util.h" + +#include "UI_interface.h" +#include "UI_resources.h" +#include "UI_view2d.h" + +#include "view3d_intern.h" // own include + + +/* ******************* view3d space & buttons ************** */ + + +/* op->invoke */ +static void redo_cb(bContext *C, void *arg_op, void *arg2) +{ + wmOperator *lastop= arg_op; + + if(lastop) { + int retval; + + printf("operator redo %s\n", lastop->type->name); + ED_undo_pop(C); + retval= WM_operator_repeat(C, lastop); + if((retval & OPERATOR_FINISHED)==0) { + printf("operator redo failed %s\n", lastop->type->name); + ED_undo_redo(C); + } + } +} + +static void view3d_panel_operator_redo(const bContext *C, ARegion *ar, short cntrl) +{ + /* XXX temp */ + extern int uiDefAutoButsRNA_single(const bContext *C, uiBlock *block, PointerRNA *ptr); + wmWindowManager *wm= CTX_wm_manager(C); + wmOperator *op; + PointerRNA ptr; + uiBlock *block; + int height = 0; + + block= uiBeginBlock(C, ar, "view3d_panel_operator_redo", UI_EMBOSS); + if(uiNewPanel(C, ar, block, "Operator", "View3d", 0, 10, 120, height)==0) return; + + /* only for operators that are registered and did an undo push */ + for(op= wm->operators.last; op; op= op->prev) + if((op->type->flag & OPTYPE_REGISTER) && (op->type->flag & OPTYPE_UNDO)) + break; + + if(op==NULL) + return; + if(op->type->poll && op->type->poll(C)==0) + return; + + uiBlockSetFunc(block, redo_cb, op, NULL); + + if(!op->properties) { + IDPropertyTemplate val = {0}; + op->properties= IDP_New(IDP_GROUP, val, "wmOperatorProperties"); + } + + RNA_pointer_create(&wm->id, op->type->srna, op->properties, &ptr); + height= uiDefAutoButsRNA_single(C, block, &ptr); + + uiNewPanelHeight(block, height); + + uiEndBlock(C, block); +} + + +void view3d_tools_area_defbuts(const bContext *C, ARegion *ar) +{ + uiBeginPanels(C, ar); + + view3d_panel_operator_redo(C, ar, 0); + + uiEndPanels(C, ar); +} + + +static int view3d_toolbar(bContext *C, wmOperator *op) +{ + ScrArea *sa= CTX_wm_area(C); + ARegion *ar= view3d_has_tools_region(sa); + + if(ar) { + ar->flag ^= RGN_FLAG_HIDDEN; + ar->v2d.flag &= ~V2D_IS_INITIALISED; /* XXX should become hide/unhide api? */ + + ED_area_initialize(CTX_wm_manager(C), CTX_wm_window(C), sa); + ED_area_tag_redraw(sa); + } + return OPERATOR_FINISHED; +} + +void VIEW3D_OT_toolbar(wmOperatorType *ot) +{ + ot->name= "Toolbar"; + ot->idname= "VIEW3D_OT_toolbar"; + + ot->exec= view3d_toolbar; + ot->poll= ED_operator_view3d_active; + + /* flags */ + ot->flag= 0; +} diff --git a/source/blender/editors/transform/Makefile b/source/blender/editors/transform/Makefile index 36758190b52..bc3e08a2ae8 100644 --- a/source/blender/editors/transform/Makefile +++ b/source/blender/editors/transform/Makefile @@ -38,7 +38,6 @@ CFLAGS += $(LEVEL_1_C_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include CPPFLAGS += -I../../windowmanager diff --git a/source/blender/editors/transform/SConscript b/source/blender/editors/transform/SConscript index 2c44204afa9..b2dee8c3358 100644 --- a/source/blender/editors/transform/SConscript +++ b/source/blender/editors/transform/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.c') incs = '../include ../../blenlib ../../blenkernel ../../makesdna ../../imbuf' incs += ' ../../windowmanager #/intern/guardedalloc #/extern/glew/include' -incs += ' ../../render/extern/include #/intern/guardedalloc #intern/bmfont' +incs += ' ../../render/extern/include #/intern/guardedalloc' incs += ' ../../gpu ../../makesrna' env.BlenderLib ( 'bf_editors_transform', sources, Split(incs), [], libtype=['core'], priority=[40] ) \ No newline at end of file diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c index d588a73789c..4212964ccec 100644 --- a/source/blender/editors/transform/transform.c +++ b/source/blender/editors/transform/transform.c @@ -89,15 +89,13 @@ #include "BKE_utildefines.h" #include "BKE_context.h" -//#include "BSE_drawipo.h" -//#include "BSE_editnla_types.h" /* for NLAWIDTH */ //#include "BSE_editaction_types.h" -//#include "BSE_time.h" //#include "BSE_view.h" #include "ED_image.h" #include "ED_screen.h" #include "ED_space_api.h" +#include "ED_markers.h" #include "ED_util.h" #include "ED_view3d.h" @@ -111,54 +109,14 @@ #include "PIL_time.h" /* sleep */ +#include "UI_resources.h" + //#include "blendef.h" // //#include "mydevice.h" #include "transform.h" -/* ************************** Dashed help line **************************** */ - - -/* bad frontbuffer call... because it is used in transform after force_draw() */ -static void helpline(TransInfo *t, float *vec) -{ -#if 0 // TRANSFORM_FIX_ME - float vecrot[3], cent[2]; - short mval[2]; - - VECCOPY(vecrot, vec); - if(t->flag & T_EDIT) { - Object *ob= t->obedit; - if(ob) Mat4MulVecfl(ob->obmat, vecrot); - } - else if(t->flag & T_POSE) { - Object *ob=t->poseobj; - if(ob) Mat4MulVecfl(ob->obmat, vecrot); - } - - getmouseco_areawin(mval); - projectFloatView(t, vecrot, cent); // no overflow in extreme cases - - persp(PERSP_WIN); - - glDrawBuffer(GL_FRONT); - - BIF_ThemeColor(TH_WIRE); - - setlinestyle(3); - glBegin(GL_LINE_STRIP); - glVertex2sv(mval); - glVertex2fv(cent); - glEnd(); - setlinestyle(0); - - persp(PERSP_VIEW); - bglFlush(); // flush display for frontbuffer - glDrawBuffer(GL_BACK); -#endif -} - /* ************************** SPACE DEPENDANT CODE **************************** */ void setTransformViewMatrices(TransInfo *t) @@ -936,6 +894,231 @@ int calculateTransformCenter(bContext *C, wmEvent *event, int centerMode, float return success; } +typedef enum { + UP, + DOWN, + LEFT, + RIGHT +} ArrowDirection; +static void drawArrow(ArrowDirection d, short offset, short length, short size) +{ + switch(d) + { + case LEFT: + offset = -offset; + length = -length; + size = -size; + case RIGHT: + glBegin(GL_LINES); + glVertex2s( offset, 0); + glVertex2s( offset + length, 0); + glVertex2s( offset + length, 0); + glVertex2s( offset + length - size, -size); + glVertex2s( offset + length, 0); + glVertex2s( offset + length - size, size); + glEnd(); + break; + case DOWN: + offset = -offset; + length = -length; + size = -size; + case UP: + glBegin(GL_LINES); + glVertex2s( 0, offset); + glVertex2s( 0, offset + length); + glVertex2s( 0, offset + length); + glVertex2s(-size, offset + length - size); + glVertex2s( 0, offset + length); + glVertex2s( size, offset + length - size); + glEnd(); + break; + } +} + +static void drawArrowHead(ArrowDirection d, short size) +{ + switch(d) + { + case LEFT: + size = -size; + case RIGHT: + glBegin(GL_LINES); + glVertex2s( 0, 0); + glVertex2s( -size, -size); + glVertex2s( 0, 0); + glVertex2s( -size, size); + glEnd(); + break; + case DOWN: + size = -size; + case UP: + glBegin(GL_LINES); + glVertex2s( 0, 0); + glVertex2s(-size, -size); + glVertex2s( 0, 0); + glVertex2s( size, -size); + glEnd(); + break; + } +} + +static void drawArc(float size, float angle_start, float angle_end, int segments) +{ + float delta = (angle_end - angle_start) / segments; + float angle; + + glBegin(GL_LINE_STRIP); + + for( angle = angle_start; angle < angle_end; angle += delta) + { + glVertex2f( cosf(angle) * size, sinf(angle) * size); + } + glVertex2f( cosf(angle_end) * size, sinf(angle_end) * size); + + glEnd(); +} + +void drawHelpline(const struct bContext *C, TransInfo *t) +{ + if (t->helpline != HLP_NONE && !(t->flag & T_USES_MANIPULATOR)) + { + float vecrot[3], cent[2]; + + VECCOPY(vecrot, t->center); + if(t->flag & T_EDIT) { + Object *ob= t->obedit; + if(ob) Mat4MulVecfl(ob->obmat, vecrot); + } + else if(t->flag & T_POSE) { + Object *ob=t->poseobj; + if(ob) Mat4MulVecfl(ob->obmat, vecrot); + } + + projectFloatView(t, vecrot, cent); // no overflow in extreme cases + + glDisable(GL_DEPTH_TEST); + + glMatrixMode(GL_PROJECTION); + glPushMatrix(); + glMatrixMode(GL_MODELVIEW); + glPushMatrix(); + + ED_region_pixelspace(t->ar); + + switch(t->helpline) + { + case HLP_SPRING: + UI_ThemeColor(TH_WIRE); + + setlinestyle(3); + glBegin(GL_LINE_STRIP); + glVertex2sv(t->mval); + glVertex2fv(cent); + glEnd(); + + glTranslatef(t->mval[0], t->mval[1], 0); + glRotatef(-180 / M_PI * atan2f(cent[0] - t->mval[0], cent[1] - t->mval[1]), 0, 0, 1); + + setlinestyle(0); + glLineWidth(3.0); + drawArrow(UP, 5, 10, 5); + drawArrow(DOWN, 5, 10, 5); + glLineWidth(1.0); + break; + case HLP_HARROW: + UI_ThemeColor(TH_WIRE); + + glTranslatef(t->mval[0], t->mval[1], 0); + + glLineWidth(3.0); + drawArrow(RIGHT, 5, 10, 5); + drawArrow(LEFT, 5, 10, 5); + glLineWidth(1.0); + break; + case HLP_VARROW: + UI_ThemeColor(TH_WIRE); + + glTranslatef(t->mval[0], t->mval[1], 0); + + glLineWidth(3.0); + glBegin(GL_LINES); + drawArrow(UP, 5, 10, 5); + drawArrow(DOWN, 5, 10, 5); + glLineWidth(1.0); + break; + case HLP_ANGLE: + { + float dx = t->mval[0] - cent[0], dy = t->mval[1] - cent[1]; + float angle = atan2f(dy, dx); + float dist = sqrtf(dx*dx + dy*dy); + float delta_angle = MIN2(15 / dist, M_PI/4); + float spacing_angle = MIN2(5 / dist, M_PI/12); + UI_ThemeColor(TH_WIRE); + + setlinestyle(3); + glBegin(GL_LINE_STRIP); + glVertex2sv(t->mval); + glVertex2fv(cent); + glEnd(); + + glTranslatef(cent[0], cent[1], 0); + + setlinestyle(0); + glLineWidth(3.0); + drawArc(dist, angle - delta_angle, angle - spacing_angle, 10); + drawArc(dist, angle + spacing_angle, angle + delta_angle, 10); + + glPushMatrix(); + + glTranslatef(cosf(angle - delta_angle) * dist, sinf(angle - delta_angle) * dist, 0); + glRotatef(180 / M_PI * (angle - delta_angle), 0, 0, 1); + + drawArrowHead(DOWN, 5); + + glPopMatrix(); + + glTranslatef(cosf(angle + delta_angle) * dist, sinf(angle + delta_angle) * dist, 0); + glRotatef(180 / M_PI * (angle + delta_angle), 0, 0, 1); + + drawArrowHead(UP, 5); + + glLineWidth(1.0); + break; + } + case HLP_TRACKBALL: + { + char col[3], col2[3]; + UI_GetThemeColor3ubv(TH_GRID, col); + + glTranslatef(t->mval[0], t->mval[1], 0); + + glLineWidth(3.0); + + UI_make_axis_color(col, col2, 'x'); + glColor3ubv((GLubyte *)col2); + + drawArrow(RIGHT, 5, 10, 5); + drawArrow(LEFT, 5, 10, 5); + + UI_make_axis_color(col, col2, 'y'); + glColor3ubv((GLubyte *)col2); + + drawArrow(UP, 5, 10, 5); + drawArrow(DOWN, 5, 10, 5); + glLineWidth(1.0); + break; + } + } + + glMatrixMode(GL_PROJECTION); + glPopMatrix(); + glMatrixMode(GL_MODELVIEW); + glPopMatrix(); + + glEnable(GL_DEPTH_TEST); + } +} + void drawTransform(const struct bContext *C, struct ARegion *ar, void *arg) { TransInfo *t = arg; @@ -943,6 +1126,7 @@ void drawTransform(const struct bContext *C, struct ARegion *ar, void *arg) drawConstraint(C, t); drawPropCircle(C, t); drawSnapping(C, t); + drawHelpline(C, t); } void saveTransform(bContext *C, TransInfo *t, wmOperator *op) @@ -985,9 +1169,8 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op) RNA_boolean_set(op->ptr, "mirror", t->flag & T_MIRROR); } - if (RNA_struct_find_property(op->ptr, "constraint_mode")) + if (RNA_struct_find_property(op->ptr, "constraint_axis")) { - RNA_int_set(op->ptr, "constraint_mode", t->con.mode); RNA_int_set(op->ptr, "constraint_orientation", t->current_orientation); if (t->con.mode & CON_APPLY) @@ -1038,18 +1221,11 @@ int initTransform(bContext *C, TransInfo *t, wmOperator *op, wmEvent *event, int return 0; } - initTransformOrientation(C, t); - if(t->spacetype == SPACE_VIEW3D) { //calc_manipulator_stats(curarea); - if (t->ar->regiontype == RGN_TYPE_WINDOW) - { - RegionView3D *rv3d = t->ar->regiondata; - Mat3CpyMat4(t->spacemtx, rv3d->twmat); - } - Mat3Ortho(t->spacemtx); - + initTransformOrientation(C, t); + t->draw_handle = ED_region_draw_cb_activate(t->ar->type, drawTransform, t, REGION_DRAW_POST); } else if(t->spacetype == SPACE_IMAGE) { @@ -1821,7 +1997,7 @@ void initWarp(TransInfo *t) t->snap[2] = 1.0f; t->flag |= T_NO_CONSTRAINT; - + /* we need min/max in view space */ for(i = 0; i < t->total; i++) { float center[3]; @@ -1957,8 +2133,6 @@ int Warp(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline(t, gcursor); - return 1; } @@ -2079,8 +2253,6 @@ int Shear(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -2357,8 +2529,6 @@ int Resize(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -2382,7 +2552,7 @@ void initToSphere(TransInfo *t) t->num.flag |= NUM_NULL_ONE | NUM_NO_NEGATIVE; t->flag |= T_NO_CONSTRAINT; - + // Calculate average radius for(i = 0 ; i < t->total; i++, td++) { t->val += VecLenf(t->center, td->iloc); @@ -2784,8 +2954,6 @@ int Rotation(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -2891,8 +3059,6 @@ int Trackball(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3238,8 +3404,6 @@ int Tilt(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -3304,8 +3468,6 @@ int CurveShrinkFatten(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3577,8 +3739,6 @@ int BevelWeight(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -3653,8 +3813,6 @@ int Crease(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -3770,8 +3928,6 @@ int BoneSize(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3838,8 +3994,6 @@ int BoneEnvelope(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3904,8 +4058,6 @@ int BoneRoll(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - if(!(t->flag & T_USES_MANIPULATOR)) helpline (t, t->center); - return 1; } @@ -3982,8 +4134,6 @@ int BakeTime(TransInfo *t, short mval[2]) ED_area_headerprint(t->sa, str); - helpline (t, t->center); - return 1; } @@ -4236,8 +4386,8 @@ static void doAnimEdit_SnapFrame(TransInfo *t, TransData *td, Object *ob, short val= *(td->val); /* snap to nearest marker */ - // XXX missing function! - //val= (float)find_nearest_marker_time(val); + // TODO: need some more careful checks for where data comes from + val= (float)ED_markers_find_nearest_marker_time(&t->scene->markers, val); /* convert frame out of nla-action time */ if (ob) @@ -4514,6 +4664,7 @@ void initTimeScale(TransInfo *t) t->transform = TimeScale; initMouseInputMode(t, &t->mouse, INPUT_NONE); + t->helpline = HLP_SPRING; /* set manually because we don't use a predefined input */ t->flag |= T_NULL_ONE; t->num.flag |= NUM_NULL_ONE; diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index 4ac82fcd73f..ee767fada58 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -232,6 +232,7 @@ typedef struct TransInfo { short persp; short around; char spacetype; /* spacetype where transforming is */ + char helpline; /* helpline modes (not to be confused with hotline) */ float vec[3]; /* translation, to show for widget */ float mat[3][3]; /* rot/rescale, to show for widget */ @@ -325,6 +326,14 @@ typedef struct TransInfo { /* ******************************************************************************** */ +/* transinfo->helpline */ +#define HLP_NONE 0 +#define HLP_SPRING 1 +#define HLP_ANGLE 2 +#define HLP_HARROW 3 +#define HLP_VARROW 4 +#define HLP_TRACKBALL 5 + /* transinfo->con->mode */ #define CON_APPLY 1 #define CON_AXIS0 2 diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 27f1a59c14b..171665c9282 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -620,7 +620,6 @@ void recalcData(TransInfo *t) void drawLine(TransInfo *t, float *center, float *dir, char axis, short options) { - extern void make_axis_color(char *col, char *col2, char axis); // view3d_draw.c float v1[3], v2[3], v3[3]; char col[3], col2[3]; @@ -645,7 +644,7 @@ void drawLine(TransInfo *t, float *center, float *dir, char axis, short options) else { UI_GetThemeColor3ubv(TH_GRID, col); } - make_axis_color(col, col2, axis); + UI_make_axis_color(col, col2, axis); glColor3ubv((GLubyte *)col2); setlinestyle(0); @@ -684,6 +683,8 @@ int initTransInfo (bContext *C, TransInfo *t, wmOperator *op, wmEvent *event) t->data = NULL; t->ext = NULL; + t->helpline = HLP_NONE; + t->flag = 0; t->redraw = 1; /* redraw first time */ diff --git a/source/blender/editors/transform/transform_input.c b/source/blender/editors/transform/transform_input.c index 3272c35f5fa..4d721a83c78 100644 --- a/source/blender/editors/transform/transform_input.c +++ b/source/blender/editors/transform/transform_input.c @@ -251,35 +251,44 @@ void initMouseInputMode(TransInfo *t, MouseInput *mi, MouseInputMode mode) { case INPUT_VECTOR: mi->apply = InputVector; + t->helpline = HLP_NONE; break; case INPUT_SPRING: calcSpringFactor(mi); mi->apply = InputSpring; + t->helpline = HLP_SPRING; break; case INPUT_SPRING_FLIP: calcSpringFactor(mi); mi->apply = InputSpringFlip; + t->helpline = HLP_SPRING; break; case INPUT_ANGLE: mi->apply = InputAngle; + t->helpline = HLP_ANGLE; break; case INPUT_TRACKBALL: /* factor has to become setting or so */ mi->factor = 0.1f; mi->apply = InputTrackBall; + t->helpline = HLP_TRACKBALL; break; case INPUT_HORIZONTAL_RATIO: mi->factor = (float)(mi->center[0] - mi->imval[0]); mi->apply = InputHorizontalRatio; + t->helpline = HLP_HARROW; break; case INPUT_HORIZONTAL_ABSOLUTE: mi->apply = InputHorizontalAbsolute; + t->helpline = HLP_HARROW; break; case INPUT_VERTICAL_RATIO: mi->apply = InputVerticalRatio; + t->helpline = HLP_VARROW; break; case INPUT_VERTICAL_ABSOLUTE: mi->apply = InputVerticalAbsolute; + t->helpline = HLP_VARROW; break; case INPUT_NONE: default: diff --git a/source/blender/editors/transform/transform_ops.c b/source/blender/editors/transform/transform_ops.c index f5a581fc4fd..46a6f121990 100644 --- a/source/blender/editors/transform/transform_ops.c +++ b/source/blender/editors/transform/transform_ops.c @@ -119,11 +119,13 @@ static int select_orientation_exec(bContext *C, wmOperator *op) static int select_orientation_invoke(bContext *C, wmOperator *op, wmEvent *event) { - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; - head= uiPupMenuBegin("Orientation", 0); - BIF_menuTransformOrientation(C, head, NULL); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("Orientation", 0); + layout= uiPupMenuLayout(pup); + BIF_menuTransformOrientation(C, layout, NULL); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c index df785f92166..d3e4e2b1421 100644 --- a/source/blender/editors/transform/transform_orientations.c +++ b/source/blender/editors/transform/transform_orientations.c @@ -354,19 +354,19 @@ void BIF_selectTransformOrientationValue(bContext *C, int orientation) { v3d->twmode = orientation; } -void BIF_menuTransformOrientation(bContext *C, uiMenuItem *head, void *arg) +void BIF_menuTransformOrientation(bContext *C, uiLayout *layout, void *arg) { ListBase *transform_spaces = &CTX_data_scene(C)->transform_spaces; TransformOrientation *ts; int i= V3D_MANIP_CUSTOM; - uiMenuItemEnumO(head, "", 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_GLOBAL); - uiMenuItemEnumO(head, "", 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_LOCAL); - uiMenuItemEnumO(head, "", 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_NORMAL); - uiMenuItemEnumO(head, "", 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_VIEW); + uiItemEnumO(layout, NULL, 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_GLOBAL); + uiItemEnumO(layout, NULL, 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_LOCAL); + uiItemEnumO(layout, NULL, 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_NORMAL); + uiItemEnumO(layout, NULL, 0, "TFM_OT_select_orientation", "orientation", V3D_MANIP_VIEW); for(ts = transform_spaces->first; ts; ts = ts->next) - uiMenuItemIntO(head, ts->name, 0, "TFM_OT_select_orientation", "custom_index", i++); + uiItemIntO(layout, ts->name, 0, "TFM_OT_select_orientation", "custom_index", i++); } char * BIF_menustringTransformOrientation(const bContext *C, char *title) { @@ -405,7 +405,6 @@ int BIF_countTransformOrientation(const bContext *C) { void applyTransformOrientation(bContext *C, TransInfo *t) { TransformOrientation *ts; View3D *v3d = CTX_wm_view3d(C); - RegionView3D *rv3d= CTX_wm_region_view3d(C); int selected_index = (v3d->twmode - V3D_MANIP_CUSTOM); int i; @@ -414,7 +413,6 @@ void applyTransformOrientation(bContext *C, TransInfo *t) { if (selected_index == i) { strcpy(t->spacename, ts->name); Mat3CpyMat3(t->spacemtx, ts->mat); - Mat4CpyMat3(rv3d->twmat, ts->mat); break; } } @@ -448,14 +446,11 @@ static int count_bone_select(bArmature *arm, ListBase *lb, int do_it) void initTransformOrientation(bContext *C, TransInfo *t) { View3D *v3d = CTX_wm_view3d(C); - RegionView3D *rv3d = CTX_wm_region_view3d(C); Object *ob = CTX_data_active_object(C); Object *obedit = CTX_data_active_object(C); float normal[3]={0.0, 0.0, 0.0}; float plane[3]={0.0, 0.0, 0.0}; - if(t->spacetype != SPACE_VIEW3D) return; - switch(t->current_orientation) { case V3D_MANIP_GLOBAL: strcpy(t->spacename, "global"); @@ -500,28 +495,35 @@ void initTransformOrientation(bContext *C, TransInfo *t) if (type == ORIENTATION_NONE) { - Mat4One(rv3d->twmat); + Mat3One(t->spacemtx); } else { - Mat4CpyMat3(rv3d->twmat, mat); + Mat3CpyMat3(t->spacemtx, mat); } break; } /* no break we define 'normal' as 'local' in Object mode */ case V3D_MANIP_LOCAL: strcpy(t->spacename, "local"); - Mat4CpyMat4(rv3d->twmat, ob->obmat); - Mat4Ortho(rv3d->twmat); + Mat3CpyMat4(t->spacemtx, ob->obmat); + Mat3Ortho(t->spacemtx); break; case V3D_MANIP_VIEW: + if (t->ar->regiontype == RGN_TYPE_WINDOW) { + RegionView3D *rv3d = t->ar->regiondata; float mat[3][3]; + strcpy(t->spacename, "view"); Mat3CpyMat4(mat, rv3d->viewinv); Mat3Ortho(mat); - Mat4CpyMat3(rv3d->twmat, mat); + Mat3CpyMat3(t->spacemtx, mat); + } + else + { + Mat3One(t->spacemtx); } break; default: /* V3D_MANIP_CUSTOM */ diff --git a/source/blender/editors/util/ed_util.c b/source/blender/editors/util/ed_util.c index 5623e538eb4..ae1e932bb81 100644 --- a/source/blender/editors/util/ed_util.c +++ b/source/blender/editors/util/ed_util.c @@ -42,6 +42,7 @@ #include "BKE_context.h" #include "BKE_global.h" +#include "BKE_main.h" #include "ED_armature.h" #include "ED_mesh.h" @@ -52,39 +53,45 @@ /* ********* general editor util funcs, not BKE stuff please! ********* */ +/* frees all editmode stuff */ void ED_editors_exit(bContext *C) { - Object *ob= CTX_data_edit_object(C); + Scene *sce; /* frees all editmode undos */ undo_editmode_clear(); undo_imagepaint_clear(); - /* global in meshtools... */ - mesh_octree_table(ob, NULL, NULL, 'e'); - - if(ob) { - if(ob->type==OB_MESH) { - Mesh *me= ob->data; - if(me->edit_mesh) { - free_editMesh(me->edit_mesh); - MEM_freeN(me->edit_mesh); - me->edit_mesh= NULL; + for(sce=G.main->scene.first; sce; sce= sce->id.next) { + if(sce->obedit) { + Object *ob= sce->obedit; + + /* global in meshtools... */ + mesh_octree_table(ob, NULL, NULL, 'e'); + + if(ob) { + if(ob->type==OB_MESH) { + Mesh *me= ob->data; + if(me->edit_mesh) { + free_editMesh(me->edit_mesh); + MEM_freeN(me->edit_mesh); + me->edit_mesh= NULL; + } + } + else if(ob->type==OB_ARMATURE) { + ED_armature_edit_free(ob); + } + else if(ob->type==OB_FONT) { + // free_editText(); + } + // else if(ob->type==OB_MBALL) + // BLI_freelistN(&editelems); + // free_editLatt(); + // free_posebuf(); } } - else if(ob->type==OB_ARMATURE) { - ED_armature_edit_free(ob); - } - else if(ob->type==OB_FONT) { - // free_editText(); - } - // else if(ob->type==OB_MBALL) - // BLI_freelistN(&editelems); } - // free_editLatt(); - // free_posebuf(); - } diff --git a/source/blender/editors/uvedit/uvedit_unwrap_ops.c b/source/blender/editors/uvedit/uvedit_unwrap_ops.c index 4d12700d98c..be571c132ab 100644 --- a/source/blender/editors/uvedit/uvedit_unwrap_ops.c +++ b/source/blender/editors/uvedit/uvedit_unwrap_ops.c @@ -1284,18 +1284,22 @@ void UV_OT_cube_project(wmOperatorType *ot) static int mapping_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) { - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; - head= uiPupMenuBegin("UV Mapping", 0); - uiMenuItemO(head, 0, "UV_OT_unwrap"); - uiMenuSeparator(head); - uiMenuItemO(head, 0, "UV_OT_cube_project"); - uiMenuItemO(head, 0, "UV_OT_cylinder_project"); - uiMenuItemO(head, 0, "UV_OT_sphere_project"); - uiMenuItemO(head, 0, "UV_OT_project_from_view"); - uiMenuSeparator(head); - uiMenuItemO(head, 0, "UV_OT_reset"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("UV Mapping", 0); + layout= uiPupMenuLayout(pup); + + uiItemO(layout, NULL, 0, "UV_OT_unwrap"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "UV_OT_cube_project"); + uiItemO(layout, NULL, 0, "UV_OT_cylinder_project"); + uiItemO(layout, NULL, 0, "UV_OT_sphere_project"); + uiItemO(layout, NULL, 0, "UV_OT_project_from_view"); + uiItemS(layout); + uiItemO(layout, NULL, 0, "UV_OT_reset"); + + uiPupMenuEnd(C, pup); /* XXX python */ #ifndef DISABLE_PYTHON diff --git a/source/blender/makesdna/DNA_anim_types.h b/source/blender/makesdna/DNA_anim_types.h index 7ca3110912d..c0cdc1ab589 100644 --- a/source/blender/makesdna/DNA_anim_types.h +++ b/source/blender/makesdna/DNA_anim_types.h @@ -28,6 +28,7 @@ typedef struct FModifier { struct FModifier *next, *prev; void *data; /* pointer to modifier data */ + void *edata; /* pointer to temporary data used during evaluation */ char name[64]; /* user-defined description for the modifier */ short type; /* type of f-curve modifier */ @@ -61,6 +62,8 @@ enum { FMODIFIER_FLAG_EXPANDED = (1<<1), /* modifier is active one (in UI) for editing purposes */ FMODIFIER_FLAG_ACTIVE = (1<<2), + /* user wants modifier to be skipped */ + FMODIFIER_FLAG_MUTED = (1<<3), } eFModifier_Flags; /* --- */ @@ -141,6 +144,7 @@ enum { FCM_EXTRAPOLATE_NONE = 0, /* don't do anything */ FCM_EXTRAPOLATE_CYCLIC, /* repeat keyframe range as-is */ FCM_EXTRAPOLATE_CYCLIC_OFFSET, /* repeat keyframe range, but with offset based on gradient between values */ + FCM_EXTRAPOLATE_MIRROR, /* alternate between forward and reverse playback of keyframe range */ } eFMod_Cycling_Modes; @@ -166,6 +170,26 @@ enum { FCM_LIMIT_YMAX = (1<<3), } eFMod_Limit_Flags; +/* noise modifier data */ +typedef struct FMod_Noise { + float size; + float strength; + float phase; + float pad; + + short depth; + short modification; + +} FMod_Noise; + +/* modification modes */ +enum { + FCM_NOISE_MODIF_REPLACE = 0, /* Modify existing curve, matching it's shape */ + FCM_NOISE_MODIF_ADD, /* Add noise to the curve */ + FCM_NOISE_MODIF_SUBTRACT, /* Subtract noise from the curve */ + FCM_NOISE_MODIF_MULTIPLY, /* Multiply the curve by noise */ +} eFMod_Noise_Modifications; + /* Drivers -------------------------------------- */ /* Driver Target diff --git a/source/blender/makesdna/DNA_screen_types.h b/source/blender/makesdna/DNA_screen_types.h index d131bfc2081..7a6e48f2ca9 100644 --- a/source/blender/makesdna/DNA_screen_types.h +++ b/source/blender/makesdna/DNA_screen_types.h @@ -110,6 +110,11 @@ typedef struct Header { struct uiLayout *layout; /* runtime for drawing */ } Header; +typedef struct Menu { + struct MenuType *type; /* runtime */ + struct uiLayout *layout; /* runtime for drawing */ +} Menu; + typedef struct ScrArea { struct ScrArea *next, *prev; @@ -212,6 +217,7 @@ typedef struct ARegion { #define RGN_TYPE_CHANNELS 2 #define RGN_TYPE_TEMPORARY 3 #define RGN_TYPE_UI 4 +#define RGN_TYPE_TOOLS 5 /* region alignment */ #define RGN_ALIGN_NONE 0 diff --git a/source/blender/makesdna/DNA_space_types.h b/source/blender/makesdna/DNA_space_types.h index a3dc657217a..0e19a6845da 100644 --- a/source/blender/makesdna/DNA_space_types.h +++ b/source/blender/makesdna/DNA_space_types.h @@ -137,9 +137,9 @@ typedef struct SpaceButs { short re_align; short oldkeypress; /* for keeping track of the sub tab key cycling */ - char pad, flag; + char flag, texact; - char texact, tab[7]; /* storing tabs for each context */ + char tab[8]; /* storing tabs for each context */ } SpaceButs; @@ -418,8 +418,8 @@ typedef struct SpaceImaSel { /* **************** SPACE DEFINES ********************* */ -/* button defines */ -/* warning: the values of these defines are used in sbuts->tabs[7] */ +/* button defines (deprecated) */ +/* warning: the values of these defines are used in sbuts->tabs[8] */ /* sbuts->mainb new */ #define CONTEXT_SCENE 0 #define CONTEXT_OBJECT 1 @@ -429,7 +429,7 @@ typedef struct SpaceImaSel { #define CONTEXT_SCRIPT 5 #define CONTEXT_LOGIC 6 -/* sbuts->mainb old */ +/* sbuts->mainb old (deprecated) */ #define BUTS_VIEW 0 #define BUTS_LAMP 1 #define BUTS_MAT 2 @@ -446,7 +446,7 @@ typedef struct SpaceImaSel { #define BUTS_CONSTRAINT 13 #define BUTS_EFFECTS 14 -/* sbuts->tab new */ +/* sbuts->tab new (deprecated) */ #define TAB_SHADING_MAT 0 #define TAB_SHADING_TEX 1 #define TAB_SHADING_RAD 2 diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h index c1a0e72256f..ab2b7ba498a 100644 --- a/source/blender/makesdna/DNA_userdef_types.h +++ b/source/blender/makesdna/DNA_userdef_types.h @@ -94,45 +94,72 @@ typedef struct uiStyle { short minlabelchars; /* in characters */ short minwidgetchars; /* in characters */ - int pad; - + + short columnspace; + short templatespace; + short boxspace; + short buttonspacex; + short buttonspacey; + + short pad; } uiStyle; - -/* global, button colors */ -typedef struct ThemeUI { +typedef struct uiWidgetColors { char outline[4]; - char neutral[4]; - char action[4]; - char setting[4]; - char setting1[4]; - char setting2[4]; - char num[4]; - char textfield[4]; - char textfield_hi[4]; - char popup[4]; + char inner[4]; + char inner_sel[4]; + char item[4]; char text[4]; - char text_hi[4]; - char menu_back[4]; - char menu_item[4]; - char menu_hilite[4]; - char menu_text[4]; - char menu_text_hi[4]; + char text_sel[4]; + short shaded; + short shadetop, shadedown; + short pad; +} uiWidgetColors; + +typedef struct ThemeUI { + + /* Interface Elements (buttons, menus, icons) */ + uiWidgetColors wcol_regular, wcol_tool, wcol_radio, wcol_text, wcol_option; + uiWidgetColors wcol_num, wcol_numslider; + uiWidgetColors wcol_menu, wcol_pulldown, wcol_menu_back, wcol_menu_item; - char but_drawtype; - char pad[3]; char iconfile[80]; // FILE_MAXFILE length + } ThemeUI; /* try to put them all in one, if needed a special struct can be created as well * for example later on, when we introduce wire colors for ob types or so... */ typedef struct ThemeSpace { + /* main window colors */ char back[4]; + char title[4]; char text[4]; char text_hi[4]; + + /* header colors */ char header[4]; + char header_title[4]; + char header_text[4]; + char header_text_hi[4]; + + /* button/tool regions */ + char button[4]; + char button_title[4]; + char button_text[4]; + char button_text_hi[4]; + + /* listview regions */ + char list[4]; + char list_title[4]; + char list_text[4]; + char list_text_hi[4]; + + /* float panel */ char panel[4]; + char panel_title[4]; + char panel_text[4]; + char panel_text_hi[4]; char shade1[4]; char shade2[4]; @@ -166,8 +193,12 @@ typedef struct ThemeSpace { char handle_vertex[4]; char handle_vertex_select[4]; + char handle_vertex_size; char hpad[3]; + + char pad[4]; + } ThemeSpace; @@ -190,7 +221,6 @@ typedef struct bTheme { struct bTheme *next, *prev; char name[32]; - /* Interface Elements (buttons, menus, icons) */ ThemeUI tui; /* Individual Spacetypes */ @@ -213,7 +243,7 @@ typedef struct bTheme { /* 20 sets of bone colors for this theme */ ThemeWireColor tarm[20]; /*ThemeWireColor tobj[20];*/ - + } bTheme; typedef struct SolidLight { diff --git a/source/blender/makesdna/DNA_view3d_types.h b/source/blender/makesdna/DNA_view3d_types.h index 3b56fd96493..5d9aac45102 100644 --- a/source/blender/makesdna/DNA_view3d_types.h +++ b/source/blender/makesdna/DNA_view3d_types.h @@ -78,7 +78,6 @@ typedef struct RegionView3D { float viewinv[4][4]; float persmat[4][4]; float persinv[4][4]; - float twmat[4][4]; /* transform widget */ float viewquat[4], dist, zfac; /* zfac is initgrabz() result */ float camdx, camdy; /* camera view offsets, 1.0 = viewplane moves entire width/height */ diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h index f8c0ba18c29..2262c73a9af 100644 --- a/source/blender/makesrna/RNA_enum_types.h +++ b/source/blender/makesrna/RNA_enum_types.h @@ -32,6 +32,12 @@ extern EnumPropertyItem prop_mode_items[]; extern EnumPropertyItem space_type_items[]; extern EnumPropertyItem region_type_items[]; +extern EnumPropertyItem modifier_type_items[]; + +extern EnumPropertyItem beztriple_handle_type_items[]; +extern EnumPropertyItem beztriple_interpolation_mode_items[]; + +extern EnumPropertyItem fmodifier_type_items[]; #endif /* RNA_ENUM_TYPES */ diff --git a/source/blender/makesrna/intern/rna_context.c b/source/blender/makesrna/intern/rna_context.c index d3089917649..ece5b6cc1f9 100644 --- a/source/blender/makesrna/intern/rna_context.c +++ b/source/blender/makesrna/intern/rna_context.c @@ -37,31 +37,31 @@ static PointerRNA rna_Context_manager_get(PointerRNA *ptr) { bContext *C= (bContext*)ptr->data; - return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_manager(C)); + return rna_pointer_inherit_refine(ptr, &RNA_WindowManager, CTX_wm_manager(C)); } /*static PointerRNA rna_Context_window_get(PointerRNA *ptr) { bContext *C= (bContext*)ptr->data; - return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_window(C)); + return rna_pointer_inherit_refine(ptr, &RNA_Window, CTX_wm_window(C)); }*/ static PointerRNA rna_Context_screen_get(PointerRNA *ptr) { bContext *C= (bContext*)ptr->data; - return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_screen(C)); + return rna_pointer_inherit_refine(ptr, &RNA_Screen, CTX_wm_screen(C)); } static PointerRNA rna_Context_area_get(PointerRNA *ptr) { bContext *C= (bContext*)ptr->data; - return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_area(C)); + return rna_pointer_inherit_refine(ptr, &RNA_Area, CTX_wm_area(C)); } static PointerRNA rna_Context_space_data_get(PointerRNA *ptr) { bContext *C= (bContext*)ptr->data; - return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_space_data(C)); + return rna_pointer_inherit_refine(ptr, &RNA_Space, CTX_wm_space_data(C)); } static PointerRNA rna_Context_region_get(PointerRNA *ptr) @@ -73,7 +73,7 @@ static PointerRNA rna_Context_region_get(PointerRNA *ptr) /*static PointerRNA rna_Context_region_data_get(PointerRNA *ptr) { bContext *C= (bContext*)ptr->data; - return rna_pointer_inherit_refine(ptr, &RNA_Region, CTX_wm_region_data(C)); + return rna_pointer_inherit_refine(ptr, &RNA_RegionData, CTX_wm_region_data(C)); }*/ static PointerRNA rna_Context_main_get(PointerRNA *ptr) diff --git a/source/blender/makesrna/intern/rna_curve.c b/source/blender/makesrna/intern/rna_curve.c index dd1c620fe45..719c6cb3c89 100644 --- a/source/blender/makesrna/intern/rna_curve.c +++ b/source/blender/makesrna/intern/rna_curve.c @@ -32,6 +32,19 @@ #include "DNA_curve_types.h" #include "DNA_material_types.h" +EnumPropertyItem beztriple_handle_type_items[] = { + {HD_FREE, "FREE", "Free", ""}, + {HD_AUTO, "AUTO", "Auto", ""}, + {HD_VECT, "VECTOR", "Vector", ""}, + {HD_ALIGN, "ALIGNED", "Aligned", ""}, + {HD_AUTO_ANIM, "AUTO_CLAMPED", "Auto Clamped", ""}, + {0, NULL, NULL, NULL}}; +EnumPropertyItem beztriple_interpolation_mode_items[] = { + {BEZT_IPO_CONST, "CONSTANT", "Constant", ""}, + {BEZT_IPO_LIN, "LINEAR", "Linear", ""}, + {BEZT_IPO_BEZ, "BEZIER", "Bezier", ""}, + {0, NULL, NULL, NULL}}; + #ifdef RNA_RUNTIME static void rna_BezTriple_handle1_get(PointerRNA *ptr, float *values) @@ -160,18 +173,6 @@ static void rna_def_beztriple(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem prop_handle_type_items[] = { - {HD_FREE, "FREE", "Free", ""}, - {HD_AUTO, "AUTO", "Auto", ""}, - {HD_VECT, "VECTOR", "Vector", ""}, - {HD_ALIGN, "ALIGNED", "Aligned", ""}, - {HD_AUTO_ANIM, "AUTO_CLAMPED", "Auto Clamped", ""}, - {0, NULL, NULL, NULL}}; - static EnumPropertyItem prop_mode_interpolation_items[] = { - {BEZT_IPO_CONST, "CONSTANT", "Constant", ""}, - {BEZT_IPO_LIN, "LINEAR", "Linear", ""}, - {BEZT_IPO_BEZ, "BEZIER", "Bezier", ""}, - {0, NULL, NULL, NULL}}; srna= RNA_def_struct(brna, "BezierCurvePoint", NULL); RNA_def_struct_sdna(srna, "BezTriple"); @@ -197,18 +198,18 @@ static void rna_def_beztriple(BlenderRNA *brna) /* Enums */ prop= RNA_def_property(srna, "handle1_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "h1"); - RNA_def_property_enum_items(prop, prop_handle_type_items); + RNA_def_property_enum_items(prop, beztriple_handle_type_items); RNA_def_property_ui_text(prop, "Handle 1 Type", "Handle types"); prop= RNA_def_property(srna, "handle2_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "h2"); - RNA_def_property_enum_items(prop, prop_handle_type_items); + RNA_def_property_enum_items(prop, beztriple_handle_type_items); RNA_def_property_ui_text(prop, "Handle 2 Type", "Handle types"); prop= RNA_def_property(srna, "interpolation", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "ipo"); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_enum_items(prop, prop_mode_interpolation_items); + RNA_def_property_enum_items(prop, beztriple_interpolation_mode_items); RNA_def_property_ui_text(prop, "Interpolation", "(For F-Curves Only) Interpolation to use for segment of curve starting from current BezTriple."); /* Vector values */ diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c index 23557b3aa31..d57e302263e 100644 --- a/source/blender/makesrna/intern/rna_fcurve.c +++ b/source/blender/makesrna/intern/rna_fcurve.c @@ -34,6 +34,17 @@ #include "MEM_guardedalloc.h" +EnumPropertyItem fmodifier_type_items[] = { + {FMODIFIER_TYPE_NULL, "NULL", "Invalid", ""}, + {FMODIFIER_TYPE_GENERATOR, "GENERATOR", "Generator", ""}, + {FMODIFIER_TYPE_ENVELOPE, "ENVELOPE", "Envelope", ""}, + {FMODIFIER_TYPE_CYCLES, "CYCLES", "Cycles", ""}, + {FMODIFIER_TYPE_NOISE, "NOISE", "Noise", ""}, + {FMODIFIER_TYPE_FILTER, "FILTER", "Filter", ""}, + {FMODIFIER_TYPE_PYTHON, "PYTHON", "Python", ""}, + {FMODIFIER_TYPE_LIMITS, "LIMITS", "Limits", ""}, + {0, NULL, NULL, NULL}}; + #ifdef RNA_RUNTIME float FModGenFunc_amplitude_get(PointerRNA *ptr) @@ -118,8 +129,8 @@ StructRNA *rna_FModifierType_refine(struct PointerRNA *ptr) return &RNA_FModifierEnvelope; case FMODIFIER_TYPE_CYCLES: return &RNA_FModifierCycles; - //case FMODIFIER_TYPE_NOISE: - // return &RNA_FModifierNoise; + case FMODIFIER_TYPE_NOISE: + return &RNA_FModifierNoise; //case FMODIFIER_TYPE_FILTER: // return &RNA_FModifierFilter; case FMODIFIER_TYPE_PYTHON: @@ -325,9 +336,10 @@ static void rna_def_fmodifier_cycles(BlenderRNA *brna) PropertyRNA *prop; static EnumPropertyItem prop_type_items[] = { - {0, "NONE", "No Cycles", ""}, - {1, "REPEAT", "Repeat Motion", ""}, - {1, "REPEAT_OFFSET", "Repeat with Offset", ""}, + {FCM_EXTRAPOLATE_NONE, "NONE", "No Cycles", "Don't do anything."}, + {FCM_EXTRAPOLATE_CYCLIC, "REPEAT", "Repeat Motion", "Repeat keyframe range as-is."}, + {FCM_EXTRAPOLATE_CYCLIC_OFFSET, "REPEAT_OFFSET", "Repeat with Offset", "Repeat keyframe range, but with offset based on gradient between values"}, + {FCM_EXTRAPOLATE_MIRROR, "MIRROR", "Repeat Mirrored", "Alternate between forward and reverse playback of keyframe range"}, {0, NULL, NULL, NULL}}; srna= RNA_def_struct(brna, "FModifierCycles", "FModifier"); @@ -408,6 +420,47 @@ static void rna_def_fmodifier_limits(BlenderRNA *brna) RNA_def_property_ui_text(prop, "Maximum Y", "Highest Y value to allow."); } +/* --------- */ + +static void rna_def_fmodifier_noise(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + static EnumPropertyItem prop_modification_items[] = { + {FCM_NOISE_MODIF_REPLACE, "REPLACE", "Replace", ""}, + {FCM_NOISE_MODIF_ADD, "ADD", "Add", ""}, + {FCM_NOISE_MODIF_SUBTRACT, "SUBTRACT", "Subtract", ""}, + {FCM_NOISE_MODIF_MULTIPLY, "MULTIPLY", "Multiply", ""}, + {0, NULL, NULL, NULL}}; + + srna= RNA_def_struct(brna, "FModifierNoise", "FModifier"); + RNA_def_struct_ui_text(srna, "Noise F-Curve Modifier", "Gives randomness to the modified F-Curve."); + RNA_def_struct_sdna_from(srna, "FMod_Noise", "data"); + + prop= RNA_def_property(srna, "modification", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_items(prop, prop_modification_items); + RNA_def_property_ui_text(prop, "Modification", "Method of modifying the existing F-Curve."); + + prop= RNA_def_property(srna, "size", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "size"); + RNA_def_property_ui_text(prop, "Size", "Scaling (in time) of the noise"); + + prop= RNA_def_property(srna, "strength", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "strength"); + RNA_def_property_ui_text(prop, "Strength", "Amplitude of the noise - the amount that it modifies the underlying curve"); + + prop= RNA_def_property(srna, "phase", PROP_FLOAT, PROP_NONE); + RNA_def_property_float_sdna(prop, NULL, "phase"); + RNA_def_property_ui_text(prop, "Phase", "A random seed for the noise effect"); + + prop= RNA_def_property(srna, "depth", PROP_INT, PROP_NONE); + RNA_def_property_int_sdna(prop, NULL, "depth"); + RNA_def_property_ui_text(prop, "Depth", "Amount of fine level detail present in the noise"); + +} + + /* --------- */ void rna_def_fmodifier(BlenderRNA *brna) @@ -415,18 +468,6 @@ void rna_def_fmodifier(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem prop_type_items[] = { - {FMODIFIER_TYPE_NULL, "NULL", "Invalid", ""}, - {FMODIFIER_TYPE_GENERATOR, "GENERATOR", "Generator", ""}, - {FMODIFIER_TYPE_ENVELOPE, "ENVELOPE", "Envelope", ""}, - {FMODIFIER_TYPE_CYCLES, "CYCLES", "Cycles", ""}, - {FMODIFIER_TYPE_NOISE, "NOISE", "Noise", ""}, - {FMODIFIER_TYPE_FILTER, "FILTER", "Filter", ""}, - {FMODIFIER_TYPE_PYTHON, "PYTHON", "Python", ""}, - {FMODIFIER_TYPE_LIMITS, "LIMITS", "Limits", ""}, - {0, NULL, NULL, NULL}}; - - /* base struct definition */ srna= RNA_def_struct(brna, "FModifier", NULL); RNA_def_struct_refine_func(srna, "rna_FModifierType_refine"); @@ -442,7 +483,7 @@ void rna_def_fmodifier(BlenderRNA *brna) /* type */ prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_enum_items(prop, prop_type_items); + RNA_def_property_enum_items(prop, fmodifier_type_items); RNA_def_property_ui_text(prop, "Type", "F-Curve Modifier Type"); /* settings */ @@ -450,10 +491,15 @@ void rna_def_fmodifier(BlenderRNA *brna) RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_EXPANDED); RNA_def_property_ui_text(prop, "Expanded", "F-Curve Modifier's panel is expanded in UI."); + prop= RNA_def_property(srna, "muted", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_MUTED); + RNA_def_property_ui_text(prop, "Muted", "F-Curve Modifier will not be evaluated."); + // XXX this is really an internal flag, but it may be useful for some tools to be able to access this... prop= RNA_def_property(srna, "disabled", PROP_BOOLEAN, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); - RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_DISABLED ); + RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_DISABLED); RNA_def_property_ui_text(prop, "Disabled", "F-Curve Modifier has invalid settings and will not be evaluated."); // TODO: setting this to true must ensure that all others in stack are turned off too... @@ -603,6 +649,7 @@ void RNA_def_fcurve(BlenderRNA *brna) rna_def_fmodifier_cycles(brna); rna_def_fmodifier_python(brna); rna_def_fmodifier_limits(brna); + rna_def_fmodifier_noise(brna); } diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c index 5c609550d3f..3263c6d4bfc 100644 --- a/source/blender/makesrna/intern/rna_modifier.c +++ b/source/blender/makesrna/intern/rna_modifier.c @@ -40,6 +40,39 @@ #include "WM_types.h" +EnumPropertyItem modifier_type_items[] ={ + {eModifierType_Subsurf, "SUBSURF", "Subsurf", ""}, + {eModifierType_Lattice, "LATTICE", "Lattice", ""}, + {eModifierType_Curve, "CURVE", "Curve", ""}, + {eModifierType_Build, "BUILD", "Build", ""}, + {eModifierType_Mirror, "MIRROR", "Mirror", ""}, + {eModifierType_Decimate, "DECIMATE", "Decimate", ""}, + {eModifierType_Wave, "WAVE", "Wave", ""}, + {eModifierType_Armature, "ARMATURE", "Armature", ""}, + {eModifierType_Hook, "HOOK", "Hook", ""}, + {eModifierType_Softbody, "SOFTBODY", "Softbody", ""}, + {eModifierType_Boolean, "BOOLEAN", "Boolean", ""}, + {eModifierType_Array, "ARRAY", "Array", ""}, + {eModifierType_EdgeSplit, "EDGE_SPLIT", "Edge Split", ""}, + {eModifierType_Displace, "DISPLACE", "Displace", ""}, + {eModifierType_UVProject, "UV_PROJECT", "UV Project", ""}, + {eModifierType_Smooth, "SMOOTH", "Smooth", ""}, + {eModifierType_Cast, "CAST", "Cast", ""}, + {eModifierType_MeshDeform, "MESH_DEFORM", "Mesh Deform", ""}, + {eModifierType_ParticleSystem, "PARTICLE_SYSTEM", "Particle System", ""}, + {eModifierType_ParticleInstance, "PARTICLE_INSTANCE", "Particle Instance", ""}, + {eModifierType_Explode, "EXPLODE", "Explode", ""}, + {eModifierType_Cloth, "CLOTH", "Cloth", ""}, + {eModifierType_Collision, "COLLISION", "Collision", ""}, + {eModifierType_Bevel, "BEVEL", "Bevel", ""}, + {eModifierType_Shrinkwrap, "SHRINKWRAP", "Shrinkwrap", ""}, + {eModifierType_Fluidsim, "FLUID_SIMULATION", "Fluid Simulation", ""}, + {eModifierType_Mask, "MASK", "Mask", ""}, + {eModifierType_SimpleDeform, "SIMPLE_DEFORM", "Simple Deform", ""}, + {eModifierType_Multires, "MULTIRES", "Multires", ""}, + {0, NULL, NULL, NULL}}; + + #ifdef RNA_RUNTIME #include "BKE_context.h" @@ -634,10 +667,10 @@ static void rna_def_modifier_armature(BlenderRNA *brna) RNA_def_struct_ui_text(srna, "Armature Modifier", "Armature deformation modifier."); RNA_def_struct_sdna(srna, "ArmatureModifierData"); - prop= RNA_def_property(srna, "armature", PROP_POINTER, PROP_NONE); + prop= RNA_def_property(srna, "object", PROP_POINTER, PROP_NONE); RNA_def_property_pointer_sdna(prop, NULL, "object"); RNA_def_property_struct_type(prop, "Object"); - RNA_def_property_ui_text(prop, "Armature", "Armature object to deform with."); + RNA_def_property_ui_text(prop, "Object", "Armature object to deform with."); RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); prop= RNA_def_property(srna, "vertex_group", PROP_STRING, PROP_NONE); @@ -668,7 +701,12 @@ static void rna_def_modifier_armature(BlenderRNA *brna) prop= RNA_def_property(srna, "b_bone_rest", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "deformflag", ARM_DEF_B_BONE_REST); - RNA_def_property_ui_text(prop, "Quaternion", "Make B-Bones deform already in rest position"); + RNA_def_property_ui_text(prop, "B-Bone Rest", "Make B-Bones deform already in rest position"); + RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); + + prop= RNA_def_property(srna, "multi_modifier", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "multi", 0); + RNA_def_property_ui_text(prop, "Multi Modifier", "Use same input as previous modifier, and mix results using overall vgroup"); RNA_def_property_update(prop, NC_OBJECT|ND_MODIFIER, "rna_Modifier_update"); } @@ -1524,38 +1562,6 @@ void RNA_def_modifier(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem type_items[] ={ - {eModifierType_Subsurf, "SUBSURF", "Subsurf", ""}, - {eModifierType_Lattice, "LATTICE", "Lattice", ""}, - {eModifierType_Curve, "CURVE", "Curve", ""}, - {eModifierType_Build, "BUILD", "Build", ""}, - {eModifierType_Mirror, "MIRROR", "Mirror", ""}, - {eModifierType_Decimate, "DECIMATE", "Decimate", ""}, - {eModifierType_Wave, "WAVE", "Wave", ""}, - {eModifierType_Armature, "ARMATURE", "Armature", ""}, - {eModifierType_Hook, "HOOK", "Hook", ""}, - {eModifierType_Softbody, "SOFTBODY", "Softbody", ""}, - {eModifierType_Boolean, "BOOLEAN", "Boolean", ""}, - {eModifierType_Array, "ARRAY", "Array", ""}, - {eModifierType_EdgeSplit, "EDGE_SPLIT", "Edge Split", ""}, - {eModifierType_Displace, "DISPLACE", "Displace", ""}, - {eModifierType_UVProject, "UV_PROJECT", "UV Project", ""}, - {eModifierType_Smooth, "SMOOTH", "Smooth", ""}, - {eModifierType_Cast, "CAST", "Cast", ""}, - {eModifierType_MeshDeform, "MESH_DEFORM", "Mesh Deform", ""}, - {eModifierType_ParticleSystem, "PARTICLE_SYSTEM", "Particle System", ""}, - {eModifierType_ParticleInstance, "PARTICLE_INSTANCE", "Particle Instance", ""}, - {eModifierType_Explode, "EXPLODE", "Explode", ""}, - {eModifierType_Cloth, "CLOTH", "Cloth", ""}, - {eModifierType_Collision, "COLLISION", "Collision", ""}, - {eModifierType_Bevel, "BEVEL", "Bevel", ""}, - {eModifierType_Shrinkwrap, "SHRINKWRAP", "Shrinkwrap", ""}, - {eModifierType_Fluidsim, "FLUID_SIMULATION", "Fluid Simulation", ""}, - {eModifierType_Mask, "MASK", "Mask", ""}, - {eModifierType_SimpleDeform, "SIMPLE_DEFORM", "Simple Deform", ""}, - {eModifierType_SimpleDeform, "MULTIRES", "Multires", ""}, - {0, NULL, NULL, NULL}}; - /* data */ srna= RNA_def_struct(brna, "Modifier", NULL); RNA_def_struct_ui_text(srna , "Modifier", "Modifier affecting the geometry data of an object."); @@ -1571,7 +1577,7 @@ void RNA_def_modifier(BlenderRNA *brna) prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_enum_sdna(prop, NULL, "type"); - RNA_def_property_enum_items(prop, type_items); + RNA_def_property_enum_items(prop, modifier_type_items); RNA_def_property_ui_text(prop, "Type", ""); /* flags */ diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c index 1df01e4cabf..6a14fec4656 100644 --- a/source/blender/makesrna/intern/rna_object.c +++ b/source/blender/makesrna/intern/rna_object.c @@ -442,6 +442,20 @@ static StructRNA *rna_def_object(BlenderRNA *brna) {PARVERT3, "VERTEX_3", "3 Vertices", ""}, {PARBONE, "BONE", "Bone", ""}, {0, NULL, NULL, NULL}}; + + static EnumPropertyItem object_type_items[] = { + {OB_EMPTY, "EMPTY", "Empty", ""}, + {OB_MESH, "MESH", "Mesh", ""}, + {OB_CURVE, "CURVE", "Curve", ""}, + {OB_SURF, "SURFACE", "Surface", ""}, + {OB_FONT, "TEXT", "Text", ""}, + {OB_MBALL, "META", "Meta", ""}, + {OB_LAMP, "LAMP", "Lamp", ""}, + {OB_CAMERA, "CAMERA", "Camera", ""}, + {OB_WAVE, "WAVE", "Wave", ""}, + {OB_LATTICE, "LATTICE", "Lattice", ""}, + {OB_ARMATURE, "ARMATURE", "Armature", ""}, + {0, NULL, NULL, NULL}}; static EnumPropertyItem empty_drawtype_items[] = { {OB_ARROWS, "ARROWS", "Arrows", ""}, @@ -519,6 +533,12 @@ static StructRNA *rna_def_object(BlenderRNA *brna) prop= RNA_def_property(srna, "parent", PROP_POINTER, PROP_NONE); RNA_def_property_ui_text(prop, "Parent", "Parent Object"); + prop= RNA_def_property(srna, "type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "type"); + RNA_def_property_enum_items(prop, object_type_items); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "Type", "Type of Object."); + prop= RNA_def_property(srna, "parent_type", PROP_ENUM, PROP_NONE); RNA_def_property_enum_sdna(prop, NULL, "partype"); RNA_def_property_enum_items(prop, parent_type_items); diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index 5108bdabbc9..2f732138643 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -181,6 +181,12 @@ void rna_def_scene_render_data(BlenderRNA *brna) {R_ALPHAKEY, "STRAIGHT", "Straight Alpha", "Transparent RGB and alpha pixels are unmodified"}, {0, NULL, NULL, NULL}}; + static EnumPropertyItem color_mode_items[] ={ + {R_PLANESBW, "BW", "BW", "Images are saved with BW (grayscale) data"}, + {R_PLANES24, "RGB", "RGB", "Images are saved with RGB (color) data"}, + {R_PLANES32, "RGBA", "RGBA", "Images are saved with RGB and Alpha data (if supported)"}, + {0, NULL, NULL, NULL}}; + static EnumPropertyItem octree_resolution_items[] = { {64, "OCTREE_RES_64", "64", ""}, {128, "OCTREE_RES_128", "128", ""}, @@ -204,23 +210,65 @@ void rna_def_scene_render_data(BlenderRNA *brna) {0, "THREADS_AUTO", "Auto-detect", ""}, {R_FIXED_THREADS, "THREADS_FIXED", "Fixed Number", ""}, {0, NULL, NULL, NULL}}; + + static EnumPropertyItem image_type_items[] = { + {R_FRAMESERVER, "FRAMESERVER", "Frame Server", ""}, +#ifdef WITH_FFMPEG + {R_FFMPEG, "FFMPEG", "FFMpeg", ""}, +#endif + {R_AVIRAW, "AVIRAW", "AVI Raw", ""}, + {R_AVIJPEG, "AVIJPEG", "AVI JPEG", ""}, +#ifdef _WIN32 + {R_AVICODEC, "AVICODEC", "AVI Codec", ""}, +#endif +#ifdef WITH_QUICKTIME + {R_QUICKTIME, "QUICKTIME", "QuickTime", ""}, +#endif + {R_TARGA, "TARGA", "Targa", ""}, + {R_RAWTGA, "RAWTARGA", "Targa Raw", ""}, + {R_PNG, "PNG", "PNG", ""}, + //{R_DDS, "DDS", "DDS", ""}, // XXX not yet implemented +#ifdef WITH_OPENJPEG + {R_JP2, "JPEG2000", "JPEG 2000", ""}, +#endif + {R_BMP, "BMP", "BMP", ""}, + {R_JPEG90, "JPEG", "JPEG", ""}, + {R_HAMX, "HAMX", "HamX", ""}, + {R_IRIS, "IRIS", "Iris", ""}, + {R_RADHDR, "RADHDR", "Radiance HDR", ""}, + {R_CINEON, "CINEON", "Cineon", ""}, + {R_DPX, "DPX", "DPX", ""}, +#ifdef __sgi + {R_MOVIE, "MOVIE", "Movie", ""}, +#endif +#ifdef WITH_OPENEXR + {R_OPENEXR, "OPENEXR", "OpenEXR", ""}, + {R_MULTILAYER, "MULTILAYER", "MultiLayer", ""}, +#endif + {R_TIFF, "TIFF", "TIFF", ""}, // XXX only with G.have_libtiff + {0, NULL, NULL, NULL}}; srna= RNA_def_struct(brna, "SceneRenderData", NULL); RNA_def_struct_sdna(srna, "RenderData"); RNA_def_struct_nested(brna, srna, "Scene"); RNA_def_struct_ui_text(srna, "Render Data", "Rendering settings for a Scene datablock."); + prop= RNA_def_property(srna, "color_mode", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_bitflag_sdna(prop, NULL, "planes"); + RNA_def_property_enum_items(prop, color_mode_items); + RNA_def_property_ui_text(prop, "Colour Mode", "What Colour Mode images are saved in (BW, RGB, RGBA)"); + prop= RNA_def_property(srna, "resolution_x", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "xsch"); RNA_def_property_range(prop, 4, 10000); RNA_def_property_ui_text(prop, "Resolution X", "Number of horizontal pixels in the rendered image."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT, NULL); prop= RNA_def_property(srna, "resolution_y", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "ysch"); RNA_def_property_range(prop, 4, 10000); RNA_def_property_ui_text(prop, "Resolution Y", "Number of vertical pixels in the rendered image."); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT, NULL); prop= RNA_def_property(srna, "resolution_percentage", PROP_INT, PROP_PERCENTAGE); RNA_def_property_int_sdna(prop, NULL, "size"); @@ -243,13 +291,13 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "xasp"); RNA_def_property_range(prop, 1.0f, 200.0f); RNA_def_property_ui_text(prop, "Pixel Aspect X", "Horizontal aspect ratio - for anamorphic or non-square pixel output"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT, NULL); prop= RNA_def_property(srna, "pixel_aspect_y", PROP_FLOAT, PROP_NONE); RNA_def_property_float_sdna(prop, NULL, "yasp"); RNA_def_property_range(prop, 1.0f, 200.0f); RNA_def_property_ui_text(prop, "Pixel Aspect Y", "Vertical aspect ratio - for anamorphic or non-square pixel output"); - RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS|NC_OBJECT, NULL); prop= RNA_def_property(srna, "quality", PROP_INT, PROP_NONE); RNA_def_property_int_sdna(prop, NULL, "quality"); @@ -428,6 +476,12 @@ void rna_def_scene_render_data(BlenderRNA *brna) RNA_def_property_ui_text(prop, "File Extensions", "Add the file format extensions to the rendered file name (eg: filename + .jpg)"); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + prop= RNA_def_property(srna, "image_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "imtype"); + RNA_def_property_enum_items(prop, image_type_items); + RNA_def_property_ui_text(prop, "Image Type", "File format to save the rendered images as."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + prop= RNA_def_property(srna, "free_image_textures", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "scemode", R_FREE_IMAGE); RNA_def_property_ui_text(prop, "Free Image Textures", "Free all image texture from memory after render, to save memory before compositing."); @@ -464,7 +518,11 @@ void RNA_def_scene(BlenderRNA *brna) prop= RNA_def_property(srna, "camera", PROP_POINTER, PROP_NONE); RNA_def_property_flag(prop, PROP_EDITABLE); - RNA_def_property_ui_text(prop, "Active Camera", "Active camera used for rendering the scene."); + RNA_def_property_ui_text(prop, "Camera", "Active camera used for rendering the scene."); + + prop= RNA_def_property(srna, "world", PROP_POINTER, PROP_NONE); + RNA_def_property_flag(prop, PROP_EDITABLE); + RNA_def_property_ui_text(prop, "World", "World used for rendering the scene."); prop= RNA_def_property(srna, "cursor_location", PROP_FLOAT, PROP_VECTOR); RNA_def_property_float_sdna(prop, NULL, "cursor"); diff --git a/source/blender/makesrna/intern/rna_screen.c b/source/blender/makesrna/intern/rna_screen.c index 5be3130609c..034fd603367 100644 --- a/source/blender/makesrna/intern/rna_screen.c +++ b/source/blender/makesrna/intern/rna_screen.c @@ -37,7 +37,7 @@ EnumPropertyItem region_type_items[] = { {RGN_TYPE_HEADER, "HEADER", "Header", ""}, {RGN_TYPE_CHANNELS, "CHANNELS", "Channels", ""}, {RGN_TYPE_TEMPORARY, "TEMPORARY", "Temporary", ""}, - {RGN_TYPE_UI, "BUTTONS_WINDOW", "Window", ""}, + {RGN_TYPE_UI, "UI", "UI", ""}, {0, NULL, NULL, NULL}}; #ifdef RNA_RUNTIME diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c index 9950d70af24..229a260efce 100644 --- a/source/blender/makesrna/intern/rna_space.c +++ b/source/blender/makesrna/intern/rna_space.c @@ -341,7 +341,7 @@ static void rna_def_space_text(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Text", "Text displayed and edited in this space."); RNA_def_property_pointer_funcs(prop, NULL, "rna_SpaceTextEditor_text_set"); - RNA_def_property_update(prop, NC_TEXT|ND_CURSOR, NULL); + RNA_def_property_update(prop, NC_TEXT|NA_EDITED, NULL); /* display */ prop= RNA_def_property(srna, "syntax_highlight", PROP_BOOLEAN, PROP_NONE); diff --git a/source/blender/makesrna/intern/rna_text.c b/source/blender/makesrna/intern/rna_text.c index 838822119e8..3dacd4c0898 100644 --- a/source/blender/makesrna/intern/rna_text.c +++ b/source/blender/makesrna/intern/rna_text.c @@ -40,6 +40,8 @@ #ifdef RNA_RUNTIME +int text_file_modified(Text *text); + static void rna_Text_filename_get(PointerRNA *ptr, char *value) { Text *text= (Text*)ptr->data; @@ -69,6 +71,12 @@ static void rna_Text_filename_set(PointerRNA *ptr, const char *value) text->name= NULL; } +static int rna_Text_modified_get(PointerRNA *ptr) +{ + Text *text= (Text*)ptr->data; + return text_file_modified(text); +} + static void rna_TextLine_line_get(PointerRNA *ptr, char *value) { TextLine *line= (TextLine*)ptr->data; @@ -174,6 +182,11 @@ static void rna_def_text(BlenderRNA *brna) RNA_def_property_clear_flag(prop, PROP_EDITABLE); RNA_def_property_ui_text(prop, "Dirty", "Text file has been edited since last save."); + prop= RNA_def_property(srna, "modified", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_clear_flag(prop, PROP_EDITABLE); + RNA_def_property_boolean_funcs(prop, "rna_Text_modified_get", NULL); + RNA_def_property_ui_text(prop, "Modified", "Text file on disk is different than the one in memory."); + prop= RNA_def_property(srna, "memory", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flags", TXT_ISMEM); RNA_def_property_clear_flag(prop, PROP_EDITABLE); diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c index 4ad5273dd5d..405ae9a0f74 100644 --- a/source/blender/makesrna/intern/rna_ui.c +++ b/source/blender/makesrna/intern/rna_ui.c @@ -276,6 +276,121 @@ static StructRNA* rna_Header_refine(struct PointerRNA *htr) return (hdr->type)? hdr->type->py_srna: &RNA_Header; } +/* Menu */ + +static int menu_poll(const bContext *C, MenuType *pt) +{ + PointerRNA ptr; + ParameterList *list; + FunctionRNA *func; + void *ret; + int visible; + + RNA_pointer_create(NULL, pt->py_srna, NULL, &ptr); /* dummy */ + func= RNA_struct_find_function(&ptr, "poll"); + + list= RNA_parameter_list_create(&ptr, func); + RNA_parameter_set_lookup(list, "context", &C); + pt->py_call(&ptr, func, list); + + RNA_parameter_get_lookup(list, "visible", &ret); + visible= *(int*)ret; + + RNA_parameter_list_free(list); + + return visible; +} + +static void menu_draw(const bContext *C, Menu *hdr) +{ + PointerRNA mtr; + ParameterList *list; + FunctionRNA *func; + + RNA_pointer_create(&CTX_wm_screen(C)->id, hdr->type->py_srna, hdr, &mtr); + func= RNA_struct_find_function(&mtr, "draw"); + + list= RNA_parameter_list_create(&mtr, func); + RNA_parameter_set_lookup(list, "context", &C); + hdr->type->py_call(&mtr, func, list); + + RNA_parameter_list_free(list); +} + +static void rna_Menu_unregister(const bContext *C, StructRNA *type) +{ + ARegionType *art; + MenuType *mt= RNA_struct_blender_type_get(type); + + if(!mt) + return; + if(!(art=region_type_find(NULL, mt->space_type, RGN_TYPE_HEADER))) + return; + + BLI_freelinkN(&art->menutypes, mt); + RNA_struct_free(&BLENDER_RNA, type); + + /* update while blender is running */ + if(C) + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); +} + +static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void *data, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free) +{ + ARegionType *art; + MenuType *mt, dummymt = {0}; + Menu dummymenu= {0}; + PointerRNA dummymtr; + int have_function[2]; + + /* setup dummy menu & menu type to store static properties in */ + dummymenu.type= &dummymt; + RNA_pointer_create(NULL, &RNA_Menu, &dummymenu, &dummymtr); + + /* validate the python class */ + if(validate(&dummymtr, data, have_function) != 0) + return NULL; + + if(!(art=region_type_find(reports, dummymt.space_type, RGN_TYPE_HEADER))) + return NULL; + + /* check if we have registered this menu type before, and remove it */ + for(mt=art->menutypes.first; mt; mt=mt->next) { + if(strcmp(mt->idname, dummymt.idname) == 0) { + if(mt->py_srna) + rna_Menu_unregister(C, mt->py_srna); + break; + } + } + + /* create a new menu type */ + mt= MEM_callocN(sizeof(MenuType), "python buttons menu"); + memcpy(mt, &dummymt, sizeof(dummymt)); + + mt->py_srna= RNA_def_struct(&BLENDER_RNA, mt->idname, "Menu"); + mt->py_data= data; + mt->py_call= call; + mt->py_free= free; + RNA_struct_blender_type_set(mt->py_srna, mt); + + mt->poll= (have_function[0])? menu_poll: NULL; + mt->draw= (have_function[1])? menu_draw: NULL; + + BLI_addtail(&art->menutypes, mt); + + /* update while blender is running */ + if(C) + WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL); + + return mt->py_srna; +} + +static StructRNA* rna_Menu_refine(struct PointerRNA *mtr) +{ + Menu *hdr= (Menu*)mtr->data; + return (hdr->type)? hdr->type->py_srna: &RNA_Menu; +} + #else static void rna_def_ui_layout(BlenderRNA *brna) @@ -373,11 +488,55 @@ static void rna_def_header(BlenderRNA *brna) RNA_def_property_flag(prop, PROP_REGISTER); } +static void rna_def_menu(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + FunctionRNA *func; + + srna= RNA_def_struct(brna, "Menu", NULL); + RNA_def_struct_ui_text(srna, "Menu", "Editor menu containing buttons."); + RNA_def_struct_sdna(srna, "Menu"); + RNA_def_struct_refine_func(srna, "rna_Menu_refine"); + RNA_def_struct_register_funcs(srna, "rna_Menu_register", "rna_Menu_unregister"); + + /* poll */ + func= RNA_def_function(srna, "poll", NULL); + RNA_def_function_ui_description(func, "Test if the menu is visible or not."); + RNA_def_function_flag(func, FUNC_REGISTER|FUNC_REGISTER_OPTIONAL); + RNA_def_function_return(func, RNA_def_boolean(func, "visible", 1, "", "")); + RNA_def_pointer(func, "context", "Context", "", ""); + + /* draw */ + func= RNA_def_function(srna, "draw", NULL); + RNA_def_function_ui_description(func, "Draw buttons into the menu UI layout."); + RNA_def_function_flag(func, FUNC_REGISTER); + RNA_def_pointer(func, "context", "Context", "", ""); + + prop= RNA_def_property(srna, "layout", PROP_POINTER, PROP_NONE); + RNA_def_property_struct_type(prop, "UILayout"); + + /* registration */ + prop= RNA_def_property(srna, "idname", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "type->idname"); + RNA_def_property_flag(prop, PROP_REGISTER); + + prop= RNA_def_property(srna, "label", PROP_STRING, PROP_NONE); + RNA_def_property_string_sdna(prop, NULL, "type->label"); + RNA_def_property_flag(prop, PROP_REGISTER); + + prop= RNA_def_property(srna, "space_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "type->space_type"); + RNA_def_property_enum_items(prop, space_type_items); + RNA_def_property_flag(prop, PROP_REGISTER); +} + void RNA_def_ui(BlenderRNA *brna) { rna_def_ui_layout(brna); rna_def_panel(brna); rna_def_header(brna); + rna_def_menu(brna); } #endif diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c index 74faa0f4a96..43e67fdfa57 100644 --- a/source/blender/makesrna/intern/rna_userdef.c +++ b/source/blender/makesrna/intern/rna_userdef.c @@ -30,8 +30,13 @@ #include "rna_internal.h" #include "DNA_curve_types.h" +#include "DNA_space_types.h" #include "DNA_userdef_types.h" +#include "WM_types.h" + +#include "BKE_utildefines.h" + #ifdef RNA_RUNTIME static void rna_userdef_lmb_select_set(struct PointerRNA *ptr,int value) @@ -118,130 +123,291 @@ static PointerRNA rna_UserDef_system_get(PointerRNA *ptr) #else +static void rna_def_userdef_theme_ui_font_style(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "ThemeFontStyle", NULL); + RNA_def_struct_sdna(srna, "uiFontStyle"); + RNA_def_struct_ui_text(srna, "Font Style", "Theme settings for Font."); + + prop= RNA_def_property(srna, "points", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, 6, 48); + RNA_def_property_ui_text(prop, "Points", ""); + + prop= RNA_def_property(srna, "shadow", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, 0, 5); + RNA_def_property_ui_text(prop, "Shadow Size", "Shadow size in pixels (0, 3 and 5 supported)"); + + prop= RNA_def_property(srna, "shadx", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, -10, 10); + RNA_def_property_ui_text(prop, "Shadow X Offset", "Shadow offset in pixels"); + + prop= RNA_def_property(srna, "shady", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, -10, 10); + RNA_def_property_ui_text(prop, "Shadow Y Offset", "Shadow offset in pixels"); + + prop= RNA_def_property(srna, "shadowalpha", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Shadow Alpha", ""); + + prop= RNA_def_property(srna, "shadowcolor", PROP_FLOAT, PROP_NONE); + RNA_def_property_range(prop, 0.0f, 1.0f); + RNA_def_property_ui_text(prop, "Shadow Brightness", "Shadow color in grey value"); +} + + +static void rna_def_userdef_theme_ui_style(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + rna_def_userdef_theme_ui_font_style(brna); + + srna= RNA_def_struct(brna, "ThemeStyle", NULL); + RNA_def_struct_sdna(srna, "uiStyle"); + RNA_def_struct_ui_text(srna, "Style", "Theme settings for style sets."); + + prop= RNA_def_property(srna, "paneltitle", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "paneltitle"); + RNA_def_property_struct_type(prop, "ThemeFontStyle"); + RNA_def_property_ui_text(prop, "Panel Font", ""); + + prop= RNA_def_property(srna, "grouplabel", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "grouplabel"); + RNA_def_property_struct_type(prop, "ThemeFontStyle"); + RNA_def_property_ui_text(prop, "Group Label Font", ""); + + prop= RNA_def_property(srna, "widgetlabel", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "widgetlabel"); + RNA_def_property_struct_type(prop, "ThemeFontStyle"); + RNA_def_property_ui_text(prop, "Widget Label Font", ""); + + prop= RNA_def_property(srna, "widget", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "widget"); + RNA_def_property_struct_type(prop, "ThemeFontStyle"); + RNA_def_property_ui_text(prop, "Widget Font", ""); + +} + +static void rna_def_userdef_theme_ui_wcol(BlenderRNA *brna) +{ + StructRNA *srna; + PropertyRNA *prop; + + srna= RNA_def_struct(brna, "ThemeWidgetColors", NULL); + RNA_def_struct_sdna(srna, "uiWidgetColors"); + RNA_def_struct_ui_text(srna, "Theme Widget Color Set", "Theme settings for widget color sets."); + + prop= RNA_def_property(srna, "outline", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Outline", ""); + + prop= RNA_def_property(srna, "inner", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Inner", ""); + + prop= RNA_def_property(srna, "inner_sel", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Inner Selected", ""); + + prop= RNA_def_property(srna, "item", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 4); + RNA_def_property_ui_text(prop, "Item", ""); + + prop= RNA_def_property(srna, "text", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Text", ""); + + prop= RNA_def_property(srna, "text_sel", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Text Selected", ""); + + prop= RNA_def_property(srna, "shaded", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "shaded", 1); + RNA_def_property_ui_text(prop, "Shaded", ""); + + prop= RNA_def_property(srna, "shadetop", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, -100, 100); + RNA_def_property_ui_text(prop, "Shade Top", ""); + + prop= RNA_def_property(srna, "shadedown", PROP_INT, PROP_NONE); + RNA_def_property_range(prop, -100, 100); + RNA_def_property_ui_text(prop, "Shade Down", ""); + +} + static void rna_def_userdef_theme_ui(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem button_theme_styles[] = { - {TH_MINIMAL, "MINIMAL", "Minimal", ""}, - {TH_SHADED, "SHADED", "Shaded", ""}, - {TH_ROUNDED, "ROUNDED", "Rounded", ""}, - {TH_ROUNDSHADED, "ROUNDSHADED", "Round Shaded", ""}, - {TH_OLDSKOOL, "OLDSKOOL", "Old Skool", ""}, - {0, NULL, NULL, NULL}}; - + rna_def_userdef_theme_ui_wcol(brna); + srna= RNA_def_struct(brna, "ThemeUserInterface", NULL); RNA_def_struct_sdna(srna, "ThemeUI"); RNA_def_struct_ui_text(srna, "Theme User Interface", "Theme settings for user interface elements."); - prop= RNA_def_property(srna, "outline", PROP_FLOAT, PROP_COLOR); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Outline", ""); - - prop= RNA_def_property(srna, "neutral", PROP_FLOAT, PROP_COLOR); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Neutral", ""); - - prop= RNA_def_property(srna, "action", PROP_FLOAT, PROP_COLOR); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Action", ""); - - prop= RNA_def_property(srna, "setting", PROP_FLOAT, PROP_COLOR); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Setting", ""); - - prop= RNA_def_property(srna, "special_setting_1", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "setting1"); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Special Setting 1", ""); - - prop= RNA_def_property(srna, "special_setting_2", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "setting2"); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Special Setting 2", ""); - - prop= RNA_def_property(srna, "number_input", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "num"); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Number Input", ""); - - prop= RNA_def_property(srna, "text_field", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "textfield"); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Text Field", ""); - - prop= RNA_def_property(srna, "textfield_highlight", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "textfield_hi"); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Text Field Highlight", ""); - - prop= RNA_def_property(srna, "popup", PROP_FLOAT, PROP_COLOR); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Popup", ""); - - prop= RNA_def_property(srna, "text", PROP_FLOAT, PROP_COLOR); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Text", ""); - - prop= RNA_def_property(srna, "text_highlight", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "text_hi"); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Text highlight", ""); - - prop= RNA_def_property(srna, "menu_background", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "menu_back"); - RNA_def_property_array(prop, 4); - RNA_def_property_ui_text(prop, "Menu Background", ""); - - prop= RNA_def_property(srna, "menu_item", PROP_FLOAT, PROP_COLOR); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Menu Item", ""); - - prop= RNA_def_property(srna, "menu_highlight", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "menu_hilite"); - RNA_def_property_array(prop, 4); - RNA_def_property_ui_text(prop, "Menu Highlight", ""); - - prop= RNA_def_property(srna, "menu_text", PROP_FLOAT, PROP_COLOR); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Menu Text", ""); - - prop= RNA_def_property(srna, "menu_text_highlight", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "menu_text_hi"); - RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Menu Text Highlight", ""); - - prop= RNA_def_property(srna, "button_draw_type", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "but_drawtype"); - RNA_def_property_enum_items(prop, button_theme_styles); - RNA_def_property_ui_text(prop, "Button Draw Type", ""); - + prop= RNA_def_property(srna, "wcol_regular", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_regular"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Regular Widget Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_tool", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_tool"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Tool Widget Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_radio", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_radio"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Radio Widget Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_text", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_text"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Text Widget Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_option", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_option"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Option Widget Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_num", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_num"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Number Widget Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_numslider", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_numslider"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Slider Widget Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_menu", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_menu"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Menu Widget Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_pulldown", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_pulldown"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Pulldown Widget Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_menu_back", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_menu_back"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Menu Backdrop Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "wcol_menu_item", PROP_POINTER, PROP_NEVER_NULL); + RNA_def_property_pointer_sdna(prop, NULL, "wcol_menu_item"); + RNA_def_property_struct_type(prop, "ThemeWidgetColors"); + RNA_def_property_ui_text(prop, "Menu Item Colors", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "icon_file", PROP_STRING, PROP_FILEPATH); RNA_def_property_string_sdna(prop, NULL, "iconfile"); RNA_def_property_ui_text(prop, "Icon File", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } -static void rna_def_userdef_theme_spaces_main(StructRNA *srna) +static void rna_def_userdef_theme_spaces_main(StructRNA *srna, int spacetype) { PropertyRNA *prop; + /* window */ prop= RNA_def_property(srna, "back", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Back", ""); + RNA_def_property_ui_text(prop, "Window Back", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + prop= RNA_def_property(srna, "title", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Window Title", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + prop= RNA_def_property(srna, "text", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Text", ""); + RNA_def_property_ui_text(prop, "Window Text", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); - prop= RNA_def_property(srna, "text_highlight", PROP_FLOAT, PROP_COLOR); - RNA_def_property_float_sdna(prop, NULL, "text_hi"); + prop= RNA_def_property(srna, "text_hi", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); - RNA_def_property_ui_text(prop, "Text Highlight", ""); + RNA_def_property_ui_text(prop, "Window Text Highlight", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + /* header */ prop= RNA_def_property(srna, "header", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Header", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "header_text", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Header Text", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "header_text_hi", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Header Text Highlight", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + /* buttons */ + if(! ELEM(spacetype, SPACE_BUTS, SPACE_OUTLINER)) { + prop= RNA_def_property(srna, "button", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Button Back", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "button_title", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Button Title", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "button_text", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Button Text", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "button_text_hi", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "Button Text Highlight", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + } + + /* list/channels */ + if(ELEM4(spacetype, SPACE_IPO, SPACE_ACTION, SPACE_NLA, SPACE_NODE)) { + prop= RNA_def_property(srna, "list", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "List Back", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "list_title", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "List Title", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "list_text", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "List Text", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + + prop= RNA_def_property(srna, "list_text_hi", PROP_FLOAT, PROP_COLOR); + RNA_def_property_array(prop, 3); + RNA_def_property_ui_text(prop, "List Text Highlight", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); + } } static void rna_def_userdef_theme_spaces_vertex(StructRNA *srna) @@ -251,14 +417,17 @@ static void rna_def_userdef_theme_spaces_vertex(StructRNA *srna) prop= RNA_def_property(srna, "vertex", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Vertex", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "vertex_select", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Vertex Select", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "vertex_size", PROP_INT, PROP_NONE); RNA_def_property_range(prop, 1, 10); RNA_def_property_ui_text(prop, "Vertex Size", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_spaces_edge(StructRNA *srna) @@ -268,18 +437,22 @@ static void rna_def_userdef_theme_spaces_edge(StructRNA *srna) prop= RNA_def_property(srna, "edge_select", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "edge Select", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "edge_seam", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Edge Seam", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "edge_sharp", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Edge Sharp", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "edge_facesel", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Edge UV Face Select", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_spaces_face(StructRNA *srna) @@ -289,18 +462,22 @@ static void rna_def_userdef_theme_spaces_face(StructRNA *srna) prop= RNA_def_property(srna, "face", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Face", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "face_select", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Face Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "face_dot", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Face Dot Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "facedot_size", PROP_INT, PROP_NONE); RNA_def_property_range(prop, 1, 10); RNA_def_property_ui_text(prop, "Face Dot Size", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna) @@ -314,47 +491,56 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme 3D View", "Theme settings for the 3D View."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_VIEW3D); prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Grid", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Panel", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "wire", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Wire", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "lamp", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Lamp", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "object_selected", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "select"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Object Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "object_active", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "active"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Active Object", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "object_grouped", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "group"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Object Grouped", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "object_grouped_active", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "group_active"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Object Grouped Active", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "transform", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Transform", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); rna_def_userdef_theme_spaces_vertex(srna); rna_def_userdef_theme_spaces_edge(srna); @@ -363,55 +549,64 @@ static void rna_def_userdef_theme_space_view3d(BlenderRNA *brna) prop= RNA_def_property(srna, "editmesh_active", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Active Vert/Edge/Face", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "normal", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Normal", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "bone_solid", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Bone Solid", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "bone_pose", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Bone Pose", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "cframe"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Current Frame", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } -static void rna_def_userdef_theme_space_ipo(BlenderRNA *brna) +static void rna_def_userdef_theme_space_graph(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; - /* space_ipo */ + /* space_graph */ srna= RNA_def_struct(brna, "ThemeGraphEditor", NULL); RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme Graph Editor", "Theme settings for the Ipo Editor."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_IPO); prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Grid", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Panel", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "window_sliders", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade1"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Window Sliders", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "channels_region", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade2"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Channels Region", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); rna_def_userdef_theme_spaces_vertex(srna); @@ -419,38 +614,46 @@ static void rna_def_userdef_theme_space_ipo(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "cframe"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Current Frame", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "handle_vertex", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Handle Vertex", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "handle_vertex_select", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Handle Vertex Select", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "handle_vertex_size", PROP_INT, PROP_NONE); RNA_def_property_range(prop, 0, 255); RNA_def_property_ui_text(prop, "Handle Vertex Size", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "channel_group", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "group"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Channel Group", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "active_channels_group", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "group_active"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Active Channel Group", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "dopesheet_channel", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "ds_channel"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "DopeSheet Channel", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "dopesheet_subchannel", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "ds_subchannel"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "DopeSheet Sub-Channel", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_file(BlenderRNA *brna) @@ -464,50 +667,56 @@ static void rna_def_userdef_theme_space_file(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme File Browser", "Theme settings for the File Browser."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_FILE); prop= RNA_def_property(srna, "selected_file", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "hilite"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Selected File", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "tiles", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "panel"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Tiles", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "scrollbar", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade1"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Scrollbar", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "scroll_handle", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade2"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Scroll Handle", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "active_file", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "active"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Active File", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "active_file_text", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "grid"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Active File Text", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } -static void rna_def_userdef_theme_space_oops(BlenderRNA *brna) +static void rna_def_userdef_theme_space_outliner(BlenderRNA *brna) { StructRNA *srna; - /* space_oops */ + /* space_outliner */ srna= RNA_def_struct(brna, "ThemeOutliner", NULL); RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme Outliner", "Theme settings for the Outliner."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_OUTLINER); } static void rna_def_userdef_theme_space_info(BlenderRNA *brna) @@ -520,7 +729,7 @@ static void rna_def_userdef_theme_space_info(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme User Preferences", "Theme settings for the User Preferences."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_INFO); } static void rna_def_userdef_theme_space_text(BlenderRNA *brna) @@ -534,52 +743,61 @@ static void rna_def_userdef_theme_space_text(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme Text Editor", "Theme settings for the Text Editor."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_TEXT); prop= RNA_def_property(srna, "line_numbers_background", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "grid"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Line Numbers Background", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "scroll_bar", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade1"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Scroll Bar", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "selected_text", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade2"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Selected Text", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "cursor", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "hilite"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Cursor", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "syntax_builtin", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxb"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Syntax Builtin", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "syntax_special", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxv"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Syntax Special", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "syntax_comment", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxc"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Syntax Comment", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "syntax_string", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxl"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Syntax String", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "syntax_numbers", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxn"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Syntax Numbers", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_node(BlenderRNA *brna) @@ -593,47 +811,55 @@ static void rna_def_userdef_theme_space_node(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme Node Editor", "Theme settings for the Node Editor."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_NODE); prop= RNA_def_property(srna, "wires", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "wire"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Wires", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "wire_select", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "edge_select"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Wire Select", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "selected_text", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade2"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Selected Text", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "node_backdrop", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxl"); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Node Backdrop", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "in_out_node", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxn"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "In/Out Node", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "converter_node", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxv"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Converter Node", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "operator_node", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxb"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Operator Node", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "group_node", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "syntaxc"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Group Node", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_buts(BlenderRNA *brna) @@ -647,11 +873,12 @@ static void rna_def_userdef_theme_space_buts(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme Buttons Window", "Theme settings for the Buttons Window."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_BUTS); prop= RNA_def_property(srna, "panel", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Panel", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_time(BlenderRNA *brna) @@ -665,16 +892,18 @@ static void rna_def_userdef_theme_space_time(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme Timeline", "Theme settings for the Timeline."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_TIME); prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Grid", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "cframe"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Current Frame", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_sound(BlenderRNA *brna) @@ -688,21 +917,24 @@ static void rna_def_userdef_theme_space_sound(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme Audio Window", "Theme settings for the Audio Window."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_SOUND); prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Grid", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "window_sliders", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade1"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Window Sliders", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "cframe"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Current Frame", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_image(BlenderRNA *brna) @@ -716,13 +948,14 @@ static void rna_def_userdef_theme_space_image(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme Image Editor", "Theme settings for the Image Editor."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_IMAGE); rna_def_userdef_theme_spaces_vertex(srna); rna_def_userdef_theme_spaces_face(srna); prop= RNA_def_property(srna, "editmesh_active", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 4); RNA_def_property_ui_text(prop, "Active Vert/Edge/Face", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_seq(BlenderRNA *brna) @@ -739,66 +972,79 @@ static void rna_def_userdef_theme_space_seq(BlenderRNA *brna) prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Grid", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "window_sliders", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade1"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Window Sliders", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "movie_strip", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "movie"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Movie Strip", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "image_strip", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "image"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Image Strip", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "scene_strip", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "scene"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Scene Strip", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "audio_strip", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "audio"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Audio Strip", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "effect_strip", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "effect"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Effect Strip", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "plugin_strip", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "plugin"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Plugin Strip", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "transition_strip", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "transition"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Transition Strip", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "meta_strip", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "meta"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Meta Strip", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "cframe"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Current Frame", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "keyframe", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "vertex_select"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Keyframe", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "draw_action", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "bone_pose"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Draw Action", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_action(BlenderRNA *brna) @@ -812,66 +1058,78 @@ static void rna_def_userdef_theme_space_action(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme DopeSheet", "Theme settings for the DopeSheet."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_ACTION); prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Grid", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "value_sliders", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "face"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Value Sliders", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "view_sliders", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade1"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "View Sliders", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "channels", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade2"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Channels", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "channels_selected", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "hilite"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Channels Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "channel_group", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "group"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Channel Group", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "active_channels_group", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "group_active"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Active Channel Group", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "long_key", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "strip"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Long Key", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "long_key_selected", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "strip_select"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Long Key Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "cframe"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Current Frame", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "dopesheet_channel", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "ds_channel"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "DopeSheet Channel", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "dopesheet_subchannel", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "ds_subchannel"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "DopeSheet Sub-Channel", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_space_nla(BlenderRNA *brna) @@ -885,41 +1143,48 @@ static void rna_def_userdef_theme_space_nla(BlenderRNA *brna) RNA_def_struct_sdna(srna, "ThemeSpace"); RNA_def_struct_ui_text(srna, "Theme NLA Editor", "Theme settings for the NLA Editor."); - rna_def_userdef_theme_spaces_main(srna); + rna_def_userdef_theme_spaces_main(srna, SPACE_NLA); prop= RNA_def_property(srna, "grid", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Grid", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "view_sliders", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade1"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "View Sliders", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "bars", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "shade2"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Bars", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "bars_selected", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "hilite"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Bars Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "strips", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "strip"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "strips", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "strips_selected", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "strip_select"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Strips Selected", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "current_frame", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "cframe"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Current Frame", ""); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_theme_colorset(BlenderRNA *brna) @@ -935,19 +1200,23 @@ static void rna_def_userdef_theme_colorset(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "solid"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Normal", "Color used for the surface of bones."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "selected", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "select"); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Selected", "Color used for selected bones."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "active", PROP_FLOAT, PROP_COLOR); RNA_def_property_array(prop, 3); RNA_def_property_ui_text(prop, "Active", "Color used for active bones."); + RNA_def_property_update(prop, NC_WINDOW, NULL); prop= RNA_def_property(srna, "colored_constraints", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "flag", TH_WIRECOLOR_CONSTCOLS); RNA_def_property_ui_text(prop, "Colored Constraints", "Allow the use of colors indicating constraints/keyed status."); + RNA_def_property_update(prop, NC_WINDOW, NULL); } static void rna_def_userdef_themes(BlenderRNA *brna) @@ -1041,9 +1310,12 @@ static void rna_def_userdef_themes(BlenderRNA *brna) static void rna_def_userdef_dothemes(BlenderRNA *brna) { + + rna_def_userdef_theme_ui_style(brna); rna_def_userdef_theme_ui(brna); + rna_def_userdef_theme_space_view3d(brna); - rna_def_userdef_theme_space_ipo(brna); + rna_def_userdef_theme_space_graph(brna); rna_def_userdef_theme_space_file(brna); rna_def_userdef_theme_space_nla(brna); rna_def_userdef_theme_space_action(brna); @@ -1053,7 +1325,7 @@ static void rna_def_userdef_dothemes(BlenderRNA *brna) rna_def_userdef_theme_space_text(brna); rna_def_userdef_theme_space_time(brna); rna_def_userdef_theme_space_node(brna); - rna_def_userdef_theme_space_oops(brna); + rna_def_userdef_theme_space_outliner(brna); rna_def_userdef_theme_space_info(brna); rna_def_userdef_theme_space_sound(brna); rna_def_userdef_theme_colorset(brna); @@ -1791,6 +2063,11 @@ void RNA_def_userdef(BlenderRNA *brna) RNA_def_property_collection_sdna(prop, NULL, "themes", NULL); RNA_def_property_struct_type(prop, "Theme"); RNA_def_property_ui_text(prop, "Themes", ""); + + prop= RNA_def_property(srna, "uistyles", PROP_COLLECTION, PROP_NONE); + RNA_def_property_collection_sdna(prop, NULL, "uistyles", NULL); + RNA_def_property_struct_type(prop, "ThemeStyle"); + RNA_def_property_ui_text(prop, "Styles", ""); /* nested structs */ prop= RNA_def_property(srna, "view", PROP_POINTER, PROP_NEVER_NULL); diff --git a/source/blender/makesrna/intern/rna_world.c b/source/blender/makesrna/intern/rna_world.c index fbe67e14c78..7a9638af314 100644 --- a/source/blender/makesrna/intern/rna_world.c +++ b/source/blender/makesrna/intern/rna_world.c @@ -237,6 +237,12 @@ static void rna_def_world_mist(BlenderRNA *brna) { StructRNA *srna; PropertyRNA *prop; + + static EnumPropertyItem falloff_items[] = { + {0, "QUADRATIC", "Quadratic", "Mist uses quadratic progression."}, + {1, "LINEAR", "Linear", "Mist uses linear progression."}, + {2, "INVERSE_QUADRATIC", "Inverse Quadratic", "Mist uses inverse quadratic progression."}, + {0, NULL, NULL, NULL}}; srna= RNA_def_struct(brna, "WorldMistSettings", NULL); RNA_def_struct_sdna(srna, "World"); @@ -268,6 +274,11 @@ static void rna_def_world_mist(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "misthi"); RNA_def_property_range(prop, 0, 100); RNA_def_property_ui_text(prop, "Height", "Factor for a less dense mist with increasing height."); + + prop= RNA_def_property(srna, "falloff", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "mistype"); + RNA_def_property_enum_items(prop, falloff_items); + RNA_def_property_ui_text(prop, "Falloff", "Falloff method for mist."); } static void rna_def_world_stars(BlenderRNA *brna) @@ -275,12 +286,6 @@ static void rna_def_world_stars(BlenderRNA *brna) StructRNA *srna; PropertyRNA *prop; - static EnumPropertyItem falloff_items[] = { - {0, "QUADRATIC", "Quadratic", "Mist uses quadratic progression."}, - {1, "LINEAR", "Linear", "Mist uses linear progression."}, - {2, "INVERSE_QUADRATIC", "Inverse Quadratic", "Mist uses inverse quadratic progression."}, - {0, NULL, NULL, NULL}}; - srna= RNA_def_struct(brna, "WorldStarsSettings", NULL); RNA_def_struct_sdna(srna, "World"); RNA_def_struct_nested(brna, srna, "World"); @@ -309,12 +314,7 @@ static void rna_def_world_stars(BlenderRNA *brna) RNA_def_property_float_sdna(prop, NULL, "starcolnoise"); RNA_def_property_range(prop, 0, 1); RNA_def_property_ui_text(prop, "Color Randomization", "Randomizes star color."); - - prop= RNA_def_property(srna, "falloff", PROP_ENUM, PROP_NONE); - RNA_def_property_enum_sdna(prop, NULL, "mistype"); - RNA_def_property_enum_items(prop, falloff_items); - RNA_def_property_ui_text(prop, "Falloff", "Falloff method for mist."); - + /* unused prop= RNA_def_property(srna, "color", PROP_FLOAT, PROP_COLOR); RNA_def_property_float_sdna(prop, NULL, "starr"); diff --git a/source/blender/nodes/CMakeLists.txt b/source/blender/nodes/CMakeLists.txt index 1f76cd0b424..a4d5b0f0ed2 100644 --- a/source/blender/nodes/CMakeLists.txt +++ b/source/blender/nodes/CMakeLists.txt @@ -55,9 +55,5 @@ ELSE(WITH_PYTHON) ADD_DEFINITIONS(-DDISABLE_PYTHON) ENDIF(WITH_PYTHON) -IF(WITH_INTERNATIONAL) - ADD_DEFINITIONS(-DWITH_FREETYPE2) -ENDIF(WITH_INTERNATIONAL) - BLENDERLIB(bf_nodes "${SRC}" "${INC}") diff --git a/source/blender/nodes/SConscript b/source/blender/nodes/SConscript index a9f303c8dd3..164e30c7d05 100644 --- a/source/blender/nodes/SConscript +++ b/source/blender/nodes/SConscript @@ -27,9 +27,6 @@ if env['WITH_BF_PYTHON']: else: defs.append('DISABLE_PYTHON') -if env['WITH_BF_INTERNATIONAL']: - defs.append('WITH_FREETYPE2') - if env['WITH_BF_OPENEXR']: defs.append('WITH_OPENEXR') diff --git a/source/blender/python/BPY_extern.h b/source/blender/python/BPY_extern.h index d8e4611d9df..ff3e89a6e25 100644 --- a/source/blender/python/BPY_extern.h +++ b/source/blender/python/BPY_extern.h @@ -99,7 +99,7 @@ extern "C" { /* 2.5 UI Scripts */ int BPY_run_python_script( struct bContext *C, const char *filename, struct Text *text ); // 2.5 working int BPY_run_script_space_draw(struct bContext *C, struct SpaceScript * sc); // 2.5 working - void BPY_run_ui_scripts(struct bContext *C); + void BPY_run_ui_scripts(struct bContext *C, int reload); // int BPY_run_script_space_listener(struct bContext *C, struct SpaceScript * sc, struct ARegion *ar, struct wmNotifier *wmn); // 2.5 working void BPY_update_modules( void ); // XXX - annoying, need this for pointers that get out of date diff --git a/source/blender/python/CMakeLists.txt b/source/blender/python/CMakeLists.txt index b94ae8749df..d15970e1df4 100644 --- a/source/blender/python/CMakeLists.txt +++ b/source/blender/python/CMakeLists.txt @@ -47,8 +47,3 @@ ENDIF(WITH_FFMPEG) ADD_DEFINITIONS(-DWITH_CCGSUBSURF) BLENDERLIB(bf_python "${SRC}" "${INC}") - -IF(WITH_INTERNATIONAL) - ADD_DEFINITIONS(-DWITH_FREETYPE2) -ENDIF(WITH_INTERNATIONAL) - diff --git a/source/blender/python/intern/Makefile b/source/blender/python/intern/Makefile index ea08ecac945..3e28f5aac31 100644 --- a/source/blender/python/intern/Makefile +++ b/source/blender/python/intern/Makefile @@ -42,7 +42,6 @@ CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION) # PreProcessor stuff CPPFLAGS += -I$(NAN_GHOST)/include -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include $(NAN_SDLCFLAGS) # modules diff --git a/source/blender/python/intern/bpy_interface.c b/source/blender/python/intern/bpy_interface.c index 86406134253..27dc95a3f44 100644 --- a/source/blender/python/intern/bpy_interface.c +++ b/source/blender/python/intern/bpy_interface.c @@ -179,7 +179,7 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text ) MEM_freeN( buf ); if( PyErr_Occurred( ) ) { - PyErr_Print(); + PyErr_Print(); PyErr_Clear(); BPY_free_compiled_text( text ); PyGILState_Release(gilstate); return 0; @@ -195,10 +195,12 @@ int BPY_run_python_script( bContext *C, const char *fn, struct Text *text ) } if (!py_result) { - PyErr_Print(); + PyErr_Print(); PyErr_Clear(); } else { Py_DECREF( py_result ); } + + Py_DECREF(py_dict); PyGILState_Release(gilstate); //BPY_end_python(); @@ -220,7 +222,7 @@ static void exit_pydraw( SpaceScript * sc, short err ) script = sc->script; if( err ) { - PyErr_Print( ); + PyErr_Print(); PyErr_Clear(); script->flags = 0; /* mark script struct for deletion */ SCRIPT_SET_NULL(script); script->scriptname[0] = '\0'; @@ -327,13 +329,14 @@ int BPY_run_python_script_space(const char *modulename, const char *func) } } - if (!py_result) - PyErr_Print(); - else + if (!py_result) { + PyErr_Print(); PyErr_Clear(); + } else Py_DECREF( py_result ); Py_XDECREF(module); + Py_DECREF(py_dict); PyGILState_Release(gilstate); return 1; @@ -347,7 +350,7 @@ int BPY_run_python_script_space(const char *modulename, const char *func) #endif /* XXX this is temporary, need a proper script registration system for 2.5 */ -void BPY_run_ui_scripts(bContext *C) +void BPY_run_ui_scripts(bContext *C, int reload) { #ifdef TIME_REGISTRATION double time = PIL_check_seconds_timer(); @@ -396,13 +399,19 @@ void BPY_run_ui_scripts(bContext *C) mod= PyImport_ImportModuleLevel(path, NULL, NULL, NULL, 0); if (mod) { - Py_DECREF(mod); - } - else { - PyErr_Print(); - fprintf(stderr, "unable to import \"%s\" %s/%s\n", path, dirname, de->d_name); + if (reload) { + PyObject *mod_orig= mod; + mod= PyImport_ReloadModule(mod); + Py_DECREF(mod_orig); + } } + if(mod) { + Py_DECREF(mod); /* could be NULL from reloading */ + } else { + PyErr_Print(); PyErr_Clear(); + fprintf(stderr, "unable to import \"%s\" %s/%s\n", path, dirname, de->d_name); + } } } @@ -521,7 +530,7 @@ static float pydriver_error(ChannelDriver *driver) driver->flag |= DRIVER_FLAG_INVALID; /* py expression failed */ fprintf(stderr, "\nError in Driver: The following Python expression failed:\n\t'%s'\n\n", driver->expression); - PyErr_Print(); + PyErr_Print(); PyErr_Clear(); return 0.0f; } @@ -560,7 +569,7 @@ float BPY_pydriver_eval (ChannelDriver *driver) } } - /* add target values to a py dictionary that we add to the drivers dict as 'd' */ + /* add target values to a dict that will be used as '__locals__' dict */ driver_vars = PyDict_New(); // XXX do we need to decref this? for (dtar= driver->targets.first; dtar; dtar= dtar->next) { PyObject *driver_arg = NULL; @@ -569,11 +578,10 @@ float BPY_pydriver_eval (ChannelDriver *driver) /* try to get variable value */ tval= driver_get_target_value(driver, dtar); driver_arg= PyFloat_FromDouble((double)tval); - if (driver_arg == NULL) continue; /* try to add to dictionary */ if (PyDict_SetItemString(driver_vars, dtar->name, driver_arg)) { - /* this target failed */ + /* this target failed - bad name */ if (targets_ok) { /* first one - print some extra info for easier identification */ fprintf(stderr, "\nBPY_pydriver_eval() - Error while evaluating PyDriver:\n"); @@ -581,7 +589,7 @@ float BPY_pydriver_eval (ChannelDriver *driver) } fprintf(stderr, "\tBPY_pydriver_eval() - couldn't add variable '%s' to namespace \n", dtar->name); - PyErr_Print(); + PyErr_Print(); PyErr_Clear(); } } diff --git a/source/blender/python/intern/bpy_rna.c b/source/blender/python/intern/bpy_rna.c index 0b05b11deff..d0e5d508325 100644 --- a/source/blender/python/intern/bpy_rna.c +++ b/source/blender/python/intern/bpy_rna.c @@ -1144,7 +1144,7 @@ static PyObject * pyrna_func_call(PyObject * self, PyObject *args, PyObject *kw) i++; } else if (kw != NULL) - item= PyDict_GetItemString(kw, pid); + item= PyDict_GetItemString(kw, pid); /* borrow ref */ if (item==NULL) { if(flag & PROP_REQUIRED) { @@ -1957,12 +1957,10 @@ PyObject *pyrna_basetype_register(PyObject *self, PyObject *args) } /* get the context, so register callback can do necessary refreshes */ - item= PyDict_GetItemString(PyEval_GetGlobals(), "__bpy_context__"); + item= PyDict_GetItemString(PyEval_GetGlobals(), "__bpy_context__"); /* borrow ref */ - if(item) { + if(item) C= (bContext*)PyCObject_AsVoidPtr(item); - Py_DECREF(item); - } /* call the register callback */ BKE_reports_init(&reports, RPT_PRINT); @@ -1989,7 +1987,7 @@ PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *args) BPy_StructRNA *py_srna; StructUnregisterFunc unreg; - if(!PyArg_ParseTuple(args, "O:register", &py_class)) + if(!PyArg_ParseTuple(args, "O:unregister", &py_class)) return NULL; if(!PyType_Check(py_class)) { @@ -1998,18 +1996,14 @@ PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *args) } /* check we got an __rna__ attribute */ - item= PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "__rna__"); + item= PyDict_GetItemString(((PyTypeObject*)py_class)->tp_dict, "__rna__"); /* borrow ref */ if(!item || !BPy_StructRNA_Check(item)) { - if(item) { - Py_DECREF(item); - } PyErr_SetString(PyExc_AttributeError, "expected a Type subclassed from a registerable rna type (no __rna__ property)."); return NULL; } /* check the __rna__ attribute has the right type */ - Py_DECREF(item); py_srna= (BPy_StructRNA*)item; if(py_srna->ptr.type != &RNA_Struct) { @@ -2026,12 +2020,10 @@ PyObject *pyrna_basetype_unregister(PyObject *self, PyObject *args) } /* get the context, so register callback can do necessary refreshes */ - item= PyDict_GetItemString(PyEval_GetGlobals(), "__bpy_context__"); + item= PyDict_GetItemString(PyEval_GetGlobals(), "__bpy_context__"); /* borrow ref */ - if(item) { + if(item) C= (bContext*)PyCObject_AsVoidPtr(item); - Py_DECREF(item); - } /* call unregister */ unreg(C, py_srna->ptr.data); diff --git a/source/blender/python/intern/bpy_ui.c b/source/blender/python/intern/bpy_ui.c index e7143e8f84c..b795409c1c9 100644 --- a/source/blender/python/intern/bpy_ui.c +++ b/source/blender/python/intern/bpy_ui.c @@ -63,20 +63,6 @@ static PyObject *Method_pupMenuEnd( PyObject * self, PyObject * args ) Py_RETURN_NONE; } -static PyObject *Method_menuItemO( PyObject * self, PyObject * args ) -{ - PyObject *py_head; - char *opname; - int icon; - - if( !PyArg_ParseTuple( args, "O!is:menuItemO", &PyCObject_Type, &py_head, &icon, &opname)) - return NULL; - - uiMenuItemO(PyCObject_AsVoidPtr(py_head), icon, opname); - - Py_RETURN_NONE; -} - static PyObject *Method_defButO( PyObject * self, PyObject * args ) { uiBut *but; @@ -358,7 +344,7 @@ static PyObject *Method_registerKey( PyObject * self, PyObject * args ) static bContext *get_py_context__internal(void) { PyObject *globals = PyEval_GetGlobals(); - PyObject *val= PyDict_GetItemString(globals, "__bpy_context__"); + PyObject *val= PyDict_GetItemString(globals, "__bpy_context__"); /* borrow ref */ return PyCObject_AsVoidPtr(val); } @@ -405,7 +391,6 @@ static PyObject *Method_getWindowPtr( PyObject * self ) static struct PyMethodDef ui_methods[] = { {"pupMenuBegin", (PyCFunction)Method_pupMenuBegin, METH_VARARGS, ""}, {"pupMenuEnd", (PyCFunction)Method_pupMenuEnd, METH_VARARGS, ""}, - {"menuItemO", (PyCFunction)Method_menuItemO, METH_VARARGS, ""}, {"defButO", (PyCFunction)Method_defButO, METH_VARARGS, ""}, {"defAutoButR", (PyCFunction)Method_defAutoButR, METH_VARARGS, ""}, {"pupBlock", (PyCFunction)Method_pupBlock, METH_VARARGS, ""}, diff --git a/source/blender/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt index f9dd6a19fb7..088bdc99687 100644 --- a/source/blender/windowmanager/CMakeLists.txt +++ b/source/blender/windowmanager/CMakeLists.txt @@ -30,7 +30,7 @@ SET(INC . ../editors/include ../../../intern/guardedalloc ../../../intern/memutil ../blenlib ../makesdna ../makesrna ../blenkernel - ../include ../../../intern/bmfont ../imbuf ../render/extern/include + ../include ../imbuf ../render/extern/include ../../../intern/bsp/extern ../radiosity/extern/include ../../../intern/decimation/extern ../blenloader ../../kernel/gen_system ../../../intern/SoundSystem ../readstreamglue @@ -43,9 +43,7 @@ SET(INC . ) IF(WITH_INTERNATIONAL) - SET(INC ${INC} ../ftfont) ADD_DEFINITIONS(-DINTERNATIONAL) - ADD_DEFINITIONS(-DFTGL_STATIC_LIBRARY) ENDIF(WITH_INTERNATIONAL) IF(WITH_OPENEXR) diff --git a/source/blender/windowmanager/SConscript b/source/blender/windowmanager/SConscript index 862235d7b4b..91635904524 100644 --- a/source/blender/windowmanager/SConscript +++ b/source/blender/windowmanager/SConscript @@ -8,10 +8,10 @@ sources = env.Glob('intern/*.c') incs = '. ../editors/include ../python ../makesdna ../blenlib ../blenkernel' incs += ' ../nodes ../imbuf ../blenloader ../render/extern/include' -incs += ' ../ftfont ../radiosity/extern/include ../../kernel/gen_system' +incs += ' ../radiosity/extern/include ../../kernel/gen_system' incs += ' ../makesrna ../gpu ../blenfont' -incs += ' #/intern/guardedalloc #/intern/memutil #/intern/ghost #/intern/bmfont' +incs += ' #/intern/guardedalloc #/intern/memutil #/intern/ghost' incs += ' #/intern/elbeem #/extern/glew/include' defs = [] diff --git a/source/blender/windowmanager/intern/Makefile b/source/blender/windowmanager/intern/Makefile index 0bf161e3250..80ae58f9398 100644 --- a/source/blender/windowmanager/intern/Makefile +++ b/source/blender/windowmanager/intern/Makefile @@ -43,7 +43,6 @@ CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION) # PreProcessor stuff CPPFLAGS += -I$(NAN_GHOST)/include -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_ELBEEM)/include CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include $(NAN_SDLCFLAGS) @@ -59,7 +58,6 @@ CPPFLAGS += -I../../imbuf CPPFLAGS += -I../../blenloader CPPFLAGS += -I../../gpu CPPFLAGS += -I../../render/extern/include -CPPFLAGS += -I../../ftfont CPPFLAGS += -I../../radiosity/extern/include CPPFLAGS += -I../../../kernel/gen_system CPPFLAGS += -I../../blenfont diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c index 066b1321947..6bd5b9e0c6c 100644 --- a/source/blender/windowmanager/intern/wm_files.c +++ b/source/blender/windowmanager/intern/wm_files.c @@ -78,6 +78,7 @@ #include "RNA_define.h" #include "ED_datafiles.h" +#include "ED_object.h" #include "ED_screen.h" #include "ED_util.h" @@ -94,400 +95,6 @@ #include "wm.h" #include "wm_window.h" -/***/ - -/* define for setting colors in theme below */ -#define SETCOL(col, r, g, b, a) {col[0]=r; col[1]=g; col[2]= b; col[3]= a;} - -/* patching UserDef struct and Themes */ -static void init_userdef_themes(void) -{ -// countall(); - - /* the UserDef struct is not corrected with do_versions() .... ugh! */ - if(U.wheellinescroll == 0) U.wheellinescroll = 3; - if(U.menuthreshold1==0) { - U.menuthreshold1= 5; - U.menuthreshold2= 2; - } - if(U.tb_leftmouse==0) { - U.tb_leftmouse= 5; - U.tb_rightmouse= 5; - } - if(U.mixbufsize==0) U.mixbufsize= 2048; - if (BLI_streq(U.tempdir, "/")) { - char *tmp= getenv("TEMP"); - - strcpy(U.tempdir, tmp?tmp:"/tmp/"); - } - if (U.savetime <= 0) { - U.savetime = 1; -// XXX error(".B.blend is buggy, please consider removing it.\n"); - } - /* transform widget settings */ - if(U.tw_hotspot==0) { - U.tw_hotspot= 14; - U.tw_size= 20; // percentage of window size - U.tw_handlesize= 16; // percentage of widget radius - } - if(U.pad_rot_angle==0) - U.pad_rot_angle= 15; - - if(U.flag & USER_CUSTOM_RANGE) - vDM_ColorBand_store(&U.coba_weight); /* signal for derivedmesh to use colorband */ - - if (G.main->versionfile <= 191) { - strcpy(U.plugtexdir, U.textudir); - strcpy(U.sounddir, "/"); - } - - /* patch to set Dupli Armature */ - if (G.main->versionfile < 220) { - U.dupflag |= USER_DUP_ARM; - } - - /* added seam, normal color, undo */ - if (G.main->versionfile <= 234) { - bTheme *btheme; - - U.uiflag |= USER_GLOBALUNDO; - if (U.undosteps==0) U.undosteps=32; - - for(btheme= U.themes.first; btheme; btheme= btheme->next) { - /* check for alpha==0 is safe, then color was never set */ - if(btheme->tv3d.edge_seam[3]==0) { - SETCOL(btheme->tv3d.edge_seam, 230, 150, 50, 255); - } - if(btheme->tv3d.normal[3]==0) { - SETCOL(btheme->tv3d.normal, 0x22, 0xDD, 0xDD, 255); - } - if(btheme->tv3d.face_dot[3]==0) { - SETCOL(btheme->tv3d.face_dot, 255, 138, 48, 255); - btheme->tv3d.facedot_size= 4; - } - } - } - if (G.main->versionfile <= 235) { - /* illegal combo... */ - if (U.flag & USER_LMOUSESELECT) - U.flag &= ~USER_TWOBUTTONMOUSE; - } - if (G.main->versionfile <= 236) { - bTheme *btheme; - /* new space type */ - for(btheme= U.themes.first; btheme; btheme= btheme->next) { - /* check for alpha==0 is safe, then color was never set */ - if(btheme->ttime.back[3]==0) { - btheme->ttime = btheme->tsnd; // copy from sound - } - if(btheme->text.syntaxn[3]==0) { - SETCOL(btheme->text.syntaxn, 0, 0, 200, 255); /* Numbers Blue*/ - SETCOL(btheme->text.syntaxl, 100, 0, 0, 255); /* Strings red */ - SETCOL(btheme->text.syntaxc, 0, 100, 50, 255); /* Comments greenish */ - SETCOL(btheme->text.syntaxv, 95, 95, 0, 255); /* Special */ - SETCOL(btheme->text.syntaxb, 128, 0, 80, 255); /* Builtin, red-purple */ - } - } - } - if (G.main->versionfile <= 237) { - bTheme *btheme; - /* bone colors */ - for(btheme= U.themes.first; btheme; btheme= btheme->next) { - /* check for alpha==0 is safe, then color was never set */ - if(btheme->tv3d.bone_solid[3]==0) { - SETCOL(btheme->tv3d.bone_solid, 200, 200, 200, 255); - SETCOL(btheme->tv3d.bone_pose, 80, 200, 255, 80); - } - } - } - if (G.main->versionfile <= 238) { - bTheme *btheme; - /* bone colors */ - for(btheme= U.themes.first; btheme; btheme= btheme->next) { - /* check for alpha==0 is safe, then color was never set */ - if(btheme->tnla.strip[3]==0) { - SETCOL(btheme->tnla.strip_select, 0xff, 0xff, 0xaa, 255); - SETCOL(btheme->tnla.strip, 0xe4, 0x9c, 0xc6, 255); - } - } - } - if (G.main->versionfile <= 239) { - bTheme *btheme; - - for(btheme= U.themes.first; btheme; btheme= btheme->next) { - /* Lamp theme, check for alpha==0 is safe, then color was never set */ - if(btheme->tv3d.lamp[3]==0) { - SETCOL(btheme->tv3d.lamp, 0, 0, 0, 40); -/* TEMPORAL, remove me! (ton) */ - U.uiflag |= USER_PLAINMENUS; - } - - /* check for text field selection highlight, set it to text editor highlight by default */ - if(btheme->tui.textfield_hi[3]==0) { - SETCOL(btheme->tui.textfield_hi, - btheme->text.shade2[0], - btheme->text.shade2[1], - btheme->text.shade2[2], - 255); - } - } - if(U.obcenter_dia==0) U.obcenter_dia= 6; - } - if (G.main->versionfile <= 241) { - bTheme *btheme; - for(btheme= U.themes.first; btheme; btheme= btheme->next) { - /* Node editor theme, check for alpha==0 is safe, then color was never set */ - if(btheme->tnode.syntaxn[3]==0) { - /* re-uses syntax color storage */ - btheme->tnode= btheme->tv3d; - SETCOL(btheme->tnode.edge_select, 255, 255, 255, 255); - SETCOL(btheme->tnode.syntaxl, 150, 150, 150, 255); /* TH_NODE, backdrop */ - SETCOL(btheme->tnode.syntaxn, 129, 131, 144, 255); /* in/output */ - SETCOL(btheme->tnode.syntaxb, 127,127,127, 255); /* operator */ - SETCOL(btheme->tnode.syntaxv, 142, 138, 145, 255); /* generator */ - SETCOL(btheme->tnode.syntaxc, 120, 145, 120, 255); /* group */ - } - /* Group theme colors */ - if(btheme->tv3d.group[3]==0) { - SETCOL(btheme->tv3d.group, 0x10, 0x40, 0x10, 255); - SETCOL(btheme->tv3d.group_active, 0x66, 0xFF, 0x66, 255); - } - /* Sequence editor theme*/ - if(btheme->tseq.movie[3]==0) { - SETCOL(btheme->tseq.movie, 81, 105, 135, 255); - SETCOL(btheme->tseq.image, 109, 88, 129, 255); - SETCOL(btheme->tseq.scene, 78, 152, 62, 255); - SETCOL(btheme->tseq.audio, 46, 143, 143, 255); - SETCOL(btheme->tseq.effect, 169, 84, 124, 255); - SETCOL(btheme->tseq.plugin, 126, 126, 80, 255); - SETCOL(btheme->tseq.transition, 162, 95, 111, 255); - SETCOL(btheme->tseq.meta, 109, 145, 131, 255); - } - if(!(btheme->tui.iconfile)) { - BLI_strncpy(btheme->tui.iconfile, "", sizeof(btheme->tui.iconfile)); - } - } - - /* set defaults for 3D View rotating axis indicator */ - /* since size can't be set to 0, this indicates it's not saved in .B.blend */ - if (U.rvisize == 0) { - U.rvisize = 15; - U.rvibright = 8; - U.uiflag |= USER_SHOW_ROTVIEWICON; - } - - } - if (G.main->versionfile <= 242) { - bTheme *btheme; - - for(btheme= U.themes.first; btheme; btheme= btheme->next) { - /* long keyframe color */ - /* check for alpha==0 is safe, then color was never set */ - if(btheme->tact.strip[3]==0) { - SETCOL(btheme->tv3d.edge_sharp, 255, 32, 32, 255); - SETCOL(btheme->tact.strip_select, 0xff, 0xff, 0xaa, 204); - SETCOL(btheme->tact.strip, 0xe4, 0x9c, 0xc6, 204); - } - - /* IPO-Editor - Vertex Size*/ - if(btheme->tipo.vertex_size == 0) { - btheme->tipo.vertex_size= 3; - } - } - } - if (G.main->versionfile <= 243) { - /* set default number of recently-used files (if not set) */ - if (U.recent_files == 0) U.recent_files = 10; - } - if (G.main->versionfile < 245 || (G.main->versionfile == 245 && G.main->subversionfile < 3)) { - bTheme *btheme; - for(btheme= U.themes.first; btheme; btheme= btheme->next) { - SETCOL(btheme->tv3d.editmesh_active, 255, 255, 255, 128); - } - if(U.coba_weight.tot==0) - init_colorband(&U.coba_weight, 1); - } - if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) { - bTheme *btheme; - for (btheme= U.themes.first; btheme; btheme= btheme->next) { - /* these should all use the same colour */ - SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255); - } - } - if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 11)) { - bTheme *btheme; - for (btheme= U.themes.first; btheme; btheme= btheme->next) { - /* these should all use the same color */ - SETCOL(btheme->tv3d.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tipo.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tact.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tnla.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tseq.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->tsnd.cframe, 0x60, 0xc0, 0x40, 255); - SETCOL(btheme->ttime.cframe, 0x60, 0xc0, 0x40, 255); - } - } - if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 13)) { - bTheme *btheme; - for (btheme= U.themes.first; btheme; btheme= btheme->next) { - /* action channel groups (recolor anyway) */ - SETCOL(btheme->tact.group, 0x39, 0x7d, 0x1b, 255); - SETCOL(btheme->tact.group_active, 0x7d, 0xe9, 0x60, 255); - - /* bone custom-color sets */ - // FIXME: this check for initialised colors is bad - if (btheme->tarm[0].solid[3] == 0) { - /* set 1 */ - SETCOL(btheme->tarm[0].solid, 0x9a, 0x00, 0x00, 255); - SETCOL(btheme->tarm[0].select, 0xbd, 0x11, 0x11, 255); - SETCOL(btheme->tarm[0].active, 0xf7, 0x0a, 0x0a, 255); - /* set 2 */ - SETCOL(btheme->tarm[1].solid, 0xf7, 0x40, 0x18, 255); - SETCOL(btheme->tarm[1].select, 0xf6, 0x69, 0x13, 255); - SETCOL(btheme->tarm[1].active, 0xfa, 0x99, 0x00, 255); - /* set 3 */ - SETCOL(btheme->tarm[2].solid, 0x1e, 0x91, 0x09, 255); - SETCOL(btheme->tarm[2].select, 0x59, 0xb7, 0x0b, 255); - SETCOL(btheme->tarm[2].active, 0x83, 0xef, 0x1d, 255); - /* set 4 */ - SETCOL(btheme->tarm[3].solid, 0x0a, 0x36, 0x94, 255); - SETCOL(btheme->tarm[3].select, 0x36, 0x67, 0xdf, 255); - SETCOL(btheme->tarm[3].active, 0x5e, 0xc1, 0xef, 255); - /* set 5 */ - SETCOL(btheme->tarm[4].solid, 0xa9, 0x29, 0x4e, 255); - SETCOL(btheme->tarm[4].select, 0xc1, 0x41, 0x6a, 255); - SETCOL(btheme->tarm[4].active, 0xf0, 0x5d, 0x91, 255); - /* set 6 */ - SETCOL(btheme->tarm[5].solid, 0x43, 0x0c, 0x78, 255); - SETCOL(btheme->tarm[5].select, 0x54, 0x3a, 0xa3, 255); - SETCOL(btheme->tarm[5].active, 0x87, 0x64, 0xd5, 255); - /* set 7 */ - SETCOL(btheme->tarm[6].solid, 0x24, 0x78, 0x5a, 255); - SETCOL(btheme->tarm[6].select, 0x3c, 0x95, 0x79, 255); - SETCOL(btheme->tarm[6].active, 0x6f, 0xb6, 0xab, 255); - /* set 8 */ - SETCOL(btheme->tarm[7].solid, 0x4b, 0x70, 0x7c, 255); - SETCOL(btheme->tarm[7].select, 0x6a, 0x86, 0x91, 255); - SETCOL(btheme->tarm[7].active, 0x9b, 0xc2, 0xcd, 255); - /* set 9 */ - SETCOL(btheme->tarm[8].solid, 0xf4, 0xc9, 0x0c, 255); - SETCOL(btheme->tarm[8].select, 0xee, 0xc2, 0x36, 255); - SETCOL(btheme->tarm[8].active, 0xf3, 0xff, 0x00, 255); - /* set 10 */ - SETCOL(btheme->tarm[9].solid, 0x1e, 0x20, 0x24, 255); - SETCOL(btheme->tarm[9].select, 0x48, 0x4c, 0x56, 255); - SETCOL(btheme->tarm[9].active, 0xff, 0xff, 0xff, 255); - /* set 11 */ - SETCOL(btheme->tarm[10].solid, 0x6f, 0x2f, 0x6a, 255); - SETCOL(btheme->tarm[10].select, 0x98, 0x45, 0xbe, 255); - SETCOL(btheme->tarm[10].active, 0xd3, 0x30, 0xd6, 255); - /* set 12 */ - SETCOL(btheme->tarm[11].solid, 0x6c, 0x8e, 0x22, 255); - SETCOL(btheme->tarm[11].select, 0x7f, 0xb0, 0x22, 255); - SETCOL(btheme->tarm[11].active, 0xbb, 0xef, 0x5b, 255); - /* set 13 */ - SETCOL(btheme->tarm[12].solid, 0x8d, 0x8d, 0x8d, 255); - SETCOL(btheme->tarm[12].select, 0xb0, 0xb0, 0xb0, 255); - SETCOL(btheme->tarm[12].active, 0xde, 0xde, 0xde, 255); - /* set 14 */ - SETCOL(btheme->tarm[13].solid, 0x83, 0x43, 0x26, 255); - SETCOL(btheme->tarm[13].select, 0x8b, 0x58, 0x11, 255); - SETCOL(btheme->tarm[13].active, 0xbd, 0x6a, 0x11, 255); - /* set 15 */ - SETCOL(btheme->tarm[14].solid, 0x08, 0x31, 0x0e, 255); - SETCOL(btheme->tarm[14].select, 0x1c, 0x43, 0x0b, 255); - SETCOL(btheme->tarm[14].active, 0x34, 0x62, 0x2b, 255); - } - } - } - if ((G.main->versionfile < 245) || (G.main->versionfile == 245 && G.main->subversionfile < 16)) { - U.flag |= USER_ADD_VIEWALIGNED|USER_ADD_EDITMODE; - } - if ((G.main->versionfile < 247) || (G.main->versionfile == 247 && G.main->subversionfile <= 2)) { - bTheme *btheme; - - /* adjust themes */ - for (btheme= U.themes.first; btheme; btheme= btheme->next) { - char *col; - - /* IPO Editor: Handles/Vertices */ - col = btheme->tipo.vertex; - SETCOL(btheme->tipo.handle_vertex, col[0], col[1], col[2], 255); - col = btheme->tipo.vertex_select; - SETCOL(btheme->tipo.handle_vertex_select, col[0], col[1], col[2], 255); - btheme->tipo.handle_vertex_size= btheme->tipo.vertex_size; - - /* Sequence/Image Editor: colors for GPencil text */ - col = btheme->tv3d.bone_pose; - SETCOL(btheme->tseq.bone_pose, col[0], col[1], col[2], 255); - SETCOL(btheme->tima.bone_pose, col[0], col[1], col[2], 255); - col = btheme->tv3d.vertex_select; - SETCOL(btheme->tseq.vertex_select, col[0], col[1], col[2], 255); - } - } - if (G.main->versionfile < 250) { - bTheme *btheme; - - for(btheme= U.themes.first; btheme; btheme= btheme->next) { - /* this was not properly initialized in 2.45 */ - if(btheme->tima.face_dot[3]==0) { - SETCOL(btheme->tima.editmesh_active, 255, 255, 255, 128); - SETCOL(btheme->tima.face_dot, 255, 133, 0, 255); - btheme->tima.facedot_size= 2; - } - - /* DopeSheet - (Object) Channel color */ - SETCOL(btheme->tact.ds_channel, 82, 96, 110, 255); - SETCOL(btheme->tact.ds_subchannel, 124, 137, 150, 255); - /* DopeSheet - Group Channel color (saner version) */ - SETCOL(btheme->tact.group, 79, 101, 73, 255); - SETCOL(btheme->tact.group_active, 135, 177, 125, 255); - - /* Graph Editor - (Object) Channel color */ - SETCOL(btheme->tipo.ds_channel, 82, 96, 110, 255); - SETCOL(btheme->tipo.ds_subchannel, 124, 137, 150, 255); - /* Graph Editor - Group Channel color */ - SETCOL(btheme->tipo.group, 79, 101, 73, 255); - SETCOL(btheme->tipo.group_active, 135, 177, 125, 255); - } - - /* adjust grease-pencil distances */ - U.gp_manhattendist= 1; - U.gp_euclideandist= 2; - - /* adjust default interpolation for new IPO-curves */ - U.ipo_new= BEZT_IPO_BEZ; - } - - /* GL Texture Garbage Collection (variable abused above!) */ - if (U.textimeout == 0) { - U.texcollectrate = 60; - U.textimeout = 120; - } - if (U.memcachelimit <= 0) { - U.memcachelimit = 32; - } - if (U.frameserverport == 0) { - U.frameserverport = 8080; - } - - MEM_CacheLimiter_set_maximum(U.memcachelimit * 1024 * 1024); - - // sets themes, fonts, .. from userdef - UI_init_userdef(); - - /* funny name, but it is GE stuff, moves userdef stuff to engine */ -// XXX space_set_commmandline_options(); - /* this timer uses U */ -// XXX reset_autosave(); - -} /* To be able to read files without windows closing, opening, moving we try to prepare for worst case: @@ -612,6 +219,14 @@ static void wm_window_match_do(bContext *C, ListBase *oldwmlist) } } +/* in case UserDef was read, we re-initialize all, and do versioning */ +static void wm_init_userdef() +{ + UI_init_userdef(); + MEM_CacheLimiter_set_maximum(U.memcachelimit * 1024 * 1024); + +} + void WM_read_file(bContext *C, char *name, ReportList *reports) { int retval; @@ -639,7 +254,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports) // XXX mainwindow_set_filename_to_title(G.main->name); // XXX sound_initialize_sounds(); - if(retval==2) init_userdef_themes(); // in case a userdef is read from regular .blend + if(retval==2) wm_init_userdef(); // in case a userdef is read from regular .blend if (retval!=0) G.relbase_valid = 1; @@ -663,6 +278,7 @@ void WM_read_file(bContext *C, char *name, ReportList *reports) /* called on startup, (context entirely filled with NULLs) */ /* or called for 'Erase All' */ +/* op can be NULL */ int WM_read_homefile(bContext *C, wmOperator *op) { ListBase wmbase; @@ -676,7 +292,11 @@ int WM_read_homefile(bContext *C, wmOperator *op) free_ttfont(); /* still weird... what does it here? */ G.relbase_valid = 0; - if (!from_memory) BLI_make_file_string(G.sce, tstr, home, ".B.blend"); + if (!from_memory) { + BLI_make_file_string(G.sce, tstr, home, ".B25.blend"); + if(!BLI_exists(tstr)) + BLI_make_file_string(G.sce, tstr, home, ".B.blend"); + } strcpy(scestr, G.sce); /* temporary store */ /* prevent loading no UI */ @@ -697,7 +317,7 @@ int WM_read_homefile(bContext *C, wmOperator *op) strcpy(G.sce, scestr); /* restore */ - init_userdef_themes(); + wm_init_userdef(); /* When loading factory settings, the reset solid OpenGL lights need to be applied. */ GPU_default_lights(); @@ -950,16 +570,16 @@ void WM_write_file(bContext *C, char *target, ReportList *reports) strcpy(di, target); } - if (BLI_exists(di)) { +// if (BLI_exists(di)) { // XXX if(!saveover(di)) // XXX return; - } +// } if (G.fileflags & G_AUTOPACK) { packAll(); } -// XXX waitcursor(1); // exit_editmode sets cursor too + ED_object_exit_editmode(C, 0); do_history(di, reports); @@ -987,7 +607,7 @@ int WM_write_homefile(bContext *C, wmOperator *op) char tstr[FILE_MAXDIR+FILE_MAXFILE]; int write_flags; - BLI_make_file_string("/", tstr, BLI_gethome(), ".B.blend"); + BLI_make_file_string("/", tstr, BLI_gethome(), ".B25.blend"); /* force save as regular blend file */ write_flags = G.fileflags & ~(G_FILE_COMPRESS | G_FILE_LOCK | G_FILE_SIGN); diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c index 64d61210c14..adbc43e439d 100644 --- a/source/blender/windowmanager/intern/wm_init_exit.c +++ b/source/blender/windowmanager/intern/wm_init_exit.c @@ -54,8 +54,6 @@ #include "BKE_utildefines.h" #include "BKE_packedFile.h" -#include "BMF_Api.h" - #include "BLI_blenlib.h" #include "RE_pipeline.h" /* RE_ free stuff */ @@ -120,7 +118,7 @@ void WM_init(bContext *C) ED_file_init(); /* for fsmenu */ ED_init_node_butfuncs(); - BLF_init(); + BLF_init(11, U.dpi); BLF_lang_init(); init_builtin_keyingsets(); /* editors/animation/keyframing.c */ @@ -130,11 +128,6 @@ void WM_init(bContext *C) UI_init(); - /* goes away */ - G.font= BMF_GetFont(BMF_kHelvetica12); - G.fonts= BMF_GetFont(BMF_kHelvetica10); - G.fontss= BMF_GetFont(BMF_kHelveticaBold8); - // clear_matcopybuf(); /* XXX */ // glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA); @@ -264,7 +257,7 @@ void WM_exit(bContext *C) ED_file_exit(); /* for fsmenu */ UI_exit(); - BLI_freelistN(&U.themes); + BKE_userdef_free(); RNA_exit(); diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c index c8a0dbd018a..5a10aa4490e 100644 --- a/source/blender/windowmanager/intern/wm_operators.c +++ b/source/blender/windowmanager/intern/wm_operators.c @@ -201,7 +201,8 @@ void WM_operator_properties_free(PointerRNA *ptr) int WM_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) { PropertyRNA *prop= RNA_struct_find_property(op->ptr, "type"); - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; if(prop==NULL) { printf("WM_menu_invoke: %s has no \"type\" enum property\n", op->type->idname); @@ -210,9 +211,10 @@ int WM_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) printf("WM_menu_invoke: %s \"type\" is not an enum property\n", op->type->idname); } else { - head= uiPupMenuBegin(op->type->name, 0); - uiMenuItemsEnumO(head, op->type->idname, "type"); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin(op->type->name, 0); + layout= uiPupMenuLayout(pup); + uiItemsEnumO(layout, op->type->idname, "type"); + uiPupMenuEnd(C, pup); } return OPERATOR_CANCELLED; @@ -221,11 +223,13 @@ int WM_menu_invoke(bContext *C, wmOperator *op, wmEvent *event) /* op->invoke */ int WM_operator_confirm(bContext *C, wmOperator *op, wmEvent *event) { - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; - head= uiPupMenuBegin("OK?", ICON_HELP); - uiMenuItemO(head, 0, op->type->idname); - uiPupMenuEnd(C, head); + pup= uiPupMenuBegin("OK?", ICON_HELP); + layout= uiPupMenuLayout(pup); + uiItemO(layout, NULL, 0, op->type->idname); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } @@ -370,21 +374,23 @@ static int recentfile_exec(bContext *C, wmOperator *op) static int wm_recentfile_invoke(bContext *C, wmOperator *op, wmEvent *event) { struct RecentFile *recent; - uiMenuItem *head; + uiPopupMenu *pup; + uiLayout *layout; int i, ofs= 0; - head= uiPupMenuBegin("Open Recent", 0); + pup= uiPupMenuBegin("Open Recent", 0); + layout= uiPupMenuLayout(pup); if(G.sce[0]) { - uiMenuItemIntO(head, G.sce, 0, op->type->idname, "nr", 1); + uiItemIntO(layout, G.sce, 0, op->type->idname, "nr", 1); ofs = 1; } for(recent = G.recent_files.first, i=0; (inext, i++) if(strcmp(recent->filename, G.sce)) - uiMenuItemIntO(head, recent->filename, 0, op->type->idname, "nr", i+ofs+1); + uiItemIntO(layout, recent->filename, 0, op->type->idname, "nr", i+ofs+1); - uiPupMenuEnd(C, head); + uiPupMenuEnd(C, pup); return OPERATOR_CANCELLED; } diff --git a/source/creator/CMakeLists.txt b/source/creator/CMakeLists.txt index 14263580c4a..fe0f741bb96 100644 --- a/source/creator/CMakeLists.txt +++ b/source/creator/CMakeLists.txt @@ -243,11 +243,8 @@ IF(UNIX) bf_guardedalloc blender_CTR bf_moto - bf_bmfont bf_windowmanager - bf_editors - bf_ftfont - extern_ftgl + bf_editors bf_blroutines bf_converter bf_dummy diff --git a/source/creator/creator.c b/source/creator/creator.c index 082f2395b3f..2ac65f7a08a 100644 --- a/source/creator/creator.c +++ b/source/creator/creator.c @@ -529,7 +529,7 @@ int main(int argc, char **argv) */ BPY_post_start_python(); - BPY_run_ui_scripts(C); + BPY_run_ui_scripts(C, 0); /* dont need to reload the first time */ #endif #ifdef WITH_QUICKTIME diff --git a/source/darwin/Makefile b/source/darwin/Makefile index 2df891d5887..35ecc6de8f1 100644 --- a/source/darwin/Makefile +++ b/source/darwin/Makefile @@ -52,7 +52,7 @@ ifeq ($(APPLICATION), blender) @echo "---> copying ui scripts" @cp -R $(NANBLENDERHOME)/release/ui $(DIR)/bin/$(APPLICATION).app/Contents/MacOS/.blender/ endif - @echo "---> removing CVS directories and Mac hidden files from distribution" + @echo "---> removing SNV directories and Mac hidden files from distribution" @find $(DIR)/bin/$(APPLICATION).app -name CVS -prune -exec rm -rf {} \; @find $(DIR)/bin/$(APPLICATION).app -name .DS_Store -exec rm -f {} \; - @find $(DIR)/bin/$(APPLICATION).app -name .svn -exec rm -rf {} \; + @find $(DIR)/bin/$(APPLICATION).app -name .svn -prune -exec rm -rf {} \; diff --git a/source/gameengine/BlenderRoutines/CMakeLists.txt b/source/gameengine/BlenderRoutines/CMakeLists.txt index e090a4b9c56..3b690a21584 100644 --- a/source/gameengine/BlenderRoutines/CMakeLists.txt +++ b/source/gameengine/BlenderRoutines/CMakeLists.txt @@ -7,7 +7,6 @@ SET(INC ../../../intern/string ../../../intern/guardedalloc ../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer - ../../../intern/bmfont ../../../source/gameengine/Converter ../../../source/blender/imbuf ../../../intern/ghost/include @@ -15,6 +14,7 @@ SET(INC ../../../source/gameengine/Ketsji ../../../source/blender/blenlib ../../../source/blender/blenkernel + ../../../source/blender/blenfont ../../../source/blender/editors/include ../../../source/blender/windowmanager ../../../source/blender diff --git a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp index 648ad79210e..de7a7f54fde 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderGL.cpp @@ -27,6 +27,7 @@ */ #include "KX_BlenderGL.h" +#include "BLF_api.h" #ifdef HAVE_CONFIG_H #include @@ -42,8 +43,6 @@ #include #include -#include "BMF_Api.h" - #include "GL/glew.h" #include "BL_Material.h" // MAXTEX @@ -148,8 +147,7 @@ void BL_print_gamedebug_line(char* text, int xco, int yco, int width, int height /* the actual drawing */ glColor3ub(255, 255, 255); - glRasterPos2s(xco, height-yco); - BMF_DrawString(G.fonts, text); + BLF_draw_default(xco, height-yco, 0.0f, text); glMatrixMode(GL_TEXTURE); glPopMatrix(); @@ -184,11 +182,9 @@ void BL_print_gamedebug_line_padded(char* text, int xco, int yco, int width, int /* draw in black first*/ glColor3ub(0, 0, 0); - glRasterPos2s(xco+1, height-yco-1); - BMF_DrawString(G.fonts, text); + BLF_draw_default(xco+1, height-yco-1, 0.0f, text); glColor3ub(255, 255, 255); - glRasterPos2s(xco, height-yco); - BMF_DrawString(G.fonts, text); + BLF_draw_default(xco, height-yco, 0.0f, text); glMatrixMode(GL_TEXTURE); glPopMatrix(); diff --git a/source/gameengine/BlenderRoutines/Makefile b/source/gameengine/BlenderRoutines/Makefile index 03a7a247727..f5486bae87b 100644 --- a/source/gameengine/BlenderRoutines/Makefile +++ b/source/gameengine/BlenderRoutines/Makefile @@ -40,7 +40,6 @@ CPPFLAGS += -I$(NAN_SUMO)/include -I$(NAN_SOLID)/include CPPFLAGS += -I$(NAN_SOLID) CPPFLAGS += -I$(NAN_STRING)/include CPPFLAGS += -I$(NAN_MOTO)/include -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_FUZZICS)/include CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include CPPFLAGS += -I$(NAN_GLEW)/include @@ -55,7 +54,7 @@ CPPFLAGS += -I../../blender/blenlib CPPFLAGS += -I../../blender/blenkernel CPPFLAGS += -I../../blender/render/extern/include CPPFLAGS += -I../../blender/blenloader -CPPFLAGS += -I../../blender/blenkernel +CPPFLAGS += -I../../blender/blenfont CPPFLAGS += -I../../blender/gpu CPPFLAGS += -I../Converter CPPFLAGS += -I../Expressions diff --git a/source/gameengine/BlenderRoutines/SConscript b/source/gameengine/BlenderRoutines/SConscript index 020402e9bcd..a0cc3af3611 100644 --- a/source/gameengine/BlenderRoutines/SConscript +++ b/source/gameengine/BlenderRoutines/SConscript @@ -5,11 +5,12 @@ sources = env.Glob('*.cpp') defs = [] incs = '. #source/kernel/gen_system #intern/string #intern/guardedalloc' -incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer #intern/bmfont' +incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer' incs += ' #source/gameengine/Converter #source/blender/imbuf' incs += ' #intern/ghost/include' incs += ' #intern/moto/include #source/gameengine/Ketsji #source/blender/blenlib' -incs += ' #source/blender/blenkernel #source/blender #source/blender/editors/include' +incs += ' #source/blender/blenkernel #source/blender' +incs += ' #source/blender/blenfont #source/blender/editors/include' incs += ' #source/blender/makesdna #source/gameengine/Rasterizer #source/gameengine/GameLogic' incs += ' #source/gameengine/Expressions #source/gameengine/Network' incs += ' #source/gameengine/SceneGraph #source/gameengine/Physics/common' diff --git a/source/gameengine/Converter/CMakeLists.txt b/source/gameengine/Converter/CMakeLists.txt index a5219b9e759..44692241e6f 100644 --- a/source/gameengine/Converter/CMakeLists.txt +++ b/source/gameengine/Converter/CMakeLists.txt @@ -32,7 +32,6 @@ SET(INC ../../../intern/string ../../../intern/guardedalloc ../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer - ../../../intern/bmfont ../../../intern/SoundSystem ../../../intern/SoundSystem/include ../../../intern/SoundSystem/openal diff --git a/source/gameengine/Converter/SConscript b/source/gameengine/Converter/SConscript index 98b7c71bad2..af0d39771de 100644 --- a/source/gameengine/Converter/SConscript +++ b/source/gameengine/Converter/SConscript @@ -5,7 +5,7 @@ sources = env.Glob('*.cpp') defs = [] incs = '. #source/kernel/gen_system #intern/string #intern/guardedalloc' -incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer #intern/bmfont' +incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer' incs += ' #intern/SoundSystem #intern/SoundSystem/include #intern/SoundSystem/openal' incs += ' #intern/SoundSystem/dummy #intern/SoundSystem/intern #source/gameengine/Converter' incs += ' #source/gameengine/BlenderRoutines #source/blender/imbuf' diff --git a/source/gameengine/GamePlayer/common/CMakeLists.txt b/source/gameengine/GamePlayer/common/CMakeLists.txt index 0c6c4179e2d..ce1cd217f60 100644 --- a/source/gameengine/GamePlayer/common/CMakeLists.txt +++ b/source/gameengine/GamePlayer/common/CMakeLists.txt @@ -42,7 +42,6 @@ SET(INC ../../../../intern/string ../../../../intern/ghost ../../../../intern/guardedalloc - ../../../../intern/bmfont ../../../../intern/moto/include ../../../../intern/SoundSystem ../../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp index eafdb8a96bb..a036f9821a4 100644 --- a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp +++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp @@ -29,8 +29,6 @@ #include "GL/glew.h" -#include "BMF_Api.h" - #include "DNA_scene_types.h" #include "RAS_IRenderTools.h" @@ -61,7 +59,7 @@ unsigned int GPC_RenderTools::m_numgllights; GPC_RenderTools::GPC_RenderTools() { - m_font = BMF_GetFont(BMF_kHelvetica10); +// XXX m_font = BMF_GetFont(BMF_kHelvetica10); glGetIntegerv(GL_MAX_LIGHTS, (GLint*) &m_numgllights); if (m_numgllights < 8) diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.h b/source/gameengine/GamePlayer/common/GPC_RenderTools.h index 316860a7d43..478d8b1a3c5 100644 --- a/source/gameengine/GamePlayer/common/GPC_RenderTools.h +++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.h @@ -38,8 +38,6 @@ #include "RAS_IRenderTools.h" -#include "BMF_Api.h" - struct KX_ClientObjectInfo; class KX_RayCast; @@ -57,7 +55,7 @@ class GPC_RenderTools : public RAS_IRenderTools void *m_lastauxinfo; static unsigned int m_numgllights; - BMF_Font* m_font; +// XXX BMF_Font* m_font; public: GPC_RenderTools(); diff --git a/source/gameengine/GamePlayer/common/Makefile b/source/gameengine/GamePlayer/common/Makefile index 6a12e659be6..84b4a4170a9 100644 --- a/source/gameengine/GamePlayer/common/Makefile +++ b/source/gameengine/GamePlayer/common/Makefile @@ -56,7 +56,6 @@ CPPFLAGS += -I$(NAN_PNG)/include CPPFLAGS += -I$(NAN_ZLIB)/include CPPFLAGS += -I$(NAN_PYTHON)/include/python$(NAN_PYTHON_VERSION) -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include CPPFLAGS += -I../../../gameengine/Converter CPPFLAGS += -I../../../gameengine/Expressions diff --git a/source/gameengine/GamePlayer/common/SConscript b/source/gameengine/GamePlayer/common/SConscript index 23ad413350b..e96b2c5400b 100644 --- a/source/gameengine/GamePlayer/common/SConscript +++ b/source/gameengine/GamePlayer/common/SConscript @@ -18,7 +18,6 @@ incs = ['.', '#intern/string', '#intern/ghost', '#intern/guardedalloc', - '#intern/bmfont', '#intern/moto/include', '#intern/SoundSystem', '#source/gameengine/Rasterizer/RAS_OpenGLRasterizer', diff --git a/source/gameengine/GamePlayer/common/unix/Makefile b/source/gameengine/GamePlayer/common/unix/Makefile index 3d44a41afee..90342c7b735 100644 --- a/source/gameengine/GamePlayer/common/unix/Makefile +++ b/source/gameengine/GamePlayer/common/unix/Makefile @@ -60,7 +60,6 @@ CPPFLAGS += -I$(NAN_FUZZICS)/include CPPFLAGS += -I$(NAN_SUMO)/include CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include CPPFLAGS += -I$(NAN_MOTO)/include -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_SOLID)/include # Blender stuff diff --git a/source/gameengine/GamePlayer/common/windows/Makefile b/source/gameengine/GamePlayer/common/windows/Makefile index f35642f9651..b622ee974c8 100644 --- a/source/gameengine/GamePlayer/common/windows/Makefile +++ b/source/gameengine/GamePlayer/common/windows/Makefile @@ -48,7 +48,6 @@ CPPFLAGS += -I$(SRCHOME)/gameengine/Physics/Sumo/include CPPFLAGS += -I$(NAN_MOTO)/include CPPFLAGS += -I$(NAN_STRING)/include -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include CPPFLAGS += -I$(NAN_GLEW)/include diff --git a/source/gameengine/GamePlayer/ghost/CMakeLists.txt b/source/gameengine/GamePlayer/ghost/CMakeLists.txt index a3cd8296da3..71961f27339 100644 --- a/source/gameengine/GamePlayer/ghost/CMakeLists.txt +++ b/source/gameengine/GamePlayer/ghost/CMakeLists.txt @@ -37,7 +37,6 @@ SET(INC ../../../../intern/string ../../../../intern/ghost ../../../../intern/guardedalloc - ../../../../intern/bmfont ../../../../intern/moto/include ../../../../intern/SoundSystem ../../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer diff --git a/source/gameengine/GamePlayer/ghost/Makefile b/source/gameengine/GamePlayer/ghost/Makefile index 5f90d804611..c82edca0d45 100644 --- a/source/gameengine/GamePlayer/ghost/Makefile +++ b/source/gameengine/GamePlayer/ghost/Makefile @@ -39,7 +39,6 @@ CCFLAGS += $(LEVEL_1_CPP_WARNINGS) CPPFLAGS += -I$(NAN_GLEW)/include CPPFLAGS += -I$(OPENGL_HEADERS) CPPFLAGS += -I$(NAN_STRING)/include -CPPFLAGS += -I$(NAN_BMFONT)/include CPPFLAGS += -I$(NAN_SOUNDSYSTEM)/include CPPFLAGS += -I$(NAN_GUARDEDALLOC)/include diff --git a/source/gameengine/GamePlayer/ghost/SConscript b/source/gameengine/GamePlayer/ghost/SConscript index 9b17ed3757b..1cb7c9f2457 100644 --- a/source/gameengine/GamePlayer/ghost/SConscript +++ b/source/gameengine/GamePlayer/ghost/SConscript @@ -12,7 +12,6 @@ incs = ['.', '#intern/string', '#intern/ghost', '#intern/guardedalloc', - '#intern/bmfont', '#intern/moto/include', '#intern/SoundSystem', '#source/gameengine/Rasterizer/RAS_OpenGLRasterizer', diff --git a/source/gameengine/Ketsji/CMakeLists.txt b/source/gameengine/Ketsji/CMakeLists.txt index 73d7191ffde..ca9ce4dc50c 100644 --- a/source/gameengine/Ketsji/CMakeLists.txt +++ b/source/gameengine/Ketsji/CMakeLists.txt @@ -47,7 +47,6 @@ SET(INC ../../../intern/string ../../../intern/guardedalloc ../../../source/gameengine/Rasterizer/RAS_OpenGLRasterizer - ../../../intern/bmfont ../../../source/gameengine/Converter ../../../source/blender/imbuf ../../../intern/ghost/include diff --git a/source/gameengine/Ketsji/SConscript b/source/gameengine/Ketsji/SConscript index 0e888edd43b..921aba9c11f 100644 --- a/source/gameengine/Ketsji/SConscript +++ b/source/gameengine/Ketsji/SConscript @@ -31,7 +31,7 @@ defs = '' incs = '. #source/blender/python/api2_2x' # Only for Mathutils! and bpy_internal_import.h, be very careful incs += ' #source/kernel/gen_system #intern/string #intern/guardedalloc' -incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer #intern/bmfont' +incs += ' #source/gameengine/Rasterizer/RAS_OpenGLRasterizer' incs += ' #intern/SoundSystem #intern/SoundSystem/include #intern/SoundSystem/openal' incs += ' #intern/SoundSystem/dummy #intern/SoundSystem/intern #source/gameengine/Converter' incs += ' #source/gameengine/BlenderRoutines #source/blender/imbuf #intern/moto/include' diff --git a/source/nan_definitions.mk b/source/nan_definitions.mk index eadc334431d..ba2f8f04233 100644 --- a/source/nan_definitions.mk +++ b/source/nan_definitions.mk @@ -106,17 +106,14 @@ endif export NAN_ACTION ?= $(LCGDIR)/action export NAN_GHOST ?= $(LCGDIR)/ghost export NAN_TEST_VERBOSITY ?= 1 - export NAN_BMFONT ?= $(LCGDIR)/bmfont export NAN_OPENNL ?= $(LCGDIR)/opennl export NAN_ELBEEM ?= $(LCGDIR)/elbeem export NAN_SUPERLU ?= $(LCGDIR)/superlu export NAN_GLEW ?= $(LCGDIR)/glew ifeq ($(FREE_WINDOWS), true) - export NAN_FTGL ?= $(LCGDIR)/gcc/ftgl export NAN_FFMPEG ?= $(LCGDIR)/gcc/ffmpeg export NAN_FFMPEGLIBS ?= $(NAN_FFMPEG)/lib/libavformat.a $(NAN_FFMPEG)/lib/libavutil.a $(NAN_FFMPEG)/lib/libavcodec.a $(NAN_FFMPEG)/lib/libavdevice.a else - export NAN_FTGL ?= $(LCGDIR)/ftgl export NAN_FFMPEG ?= $(LCGDIR)/ffmpeg export NAN_FFMPEGLIBS ?= $(NAN_FFMPEG)/lib/libavformat.a $(NAN_FFMPEG)/lib/libavcodec.a $(NAN_FFMPEG)/lib/libswscale.a $(NAN_FFMPEG)/lib/libavutil.a $(NAN_FFMPEG)/lib/libavdevice.a endif @@ -172,9 +169,6 @@ endif # l10n #export INTERNATIONAL ?= true - # enable freetype2 support for text objects - #export WITH_FREETYPE2 ?= true - else ifeq ($(OS),darwin) @@ -246,9 +240,6 @@ endif # enable l10n export INTERNATIONAL ?= true - # enable freetype2 support for text objects - export WITH_FREETYPE2 ?= true - else ifeq ($(OS),freebsd) @@ -290,9 +281,6 @@ endif # enable l10n # export INTERNATIONAL ?= true - # enable freetype2 support for text objects - # export WITH_FREETYPE2 ?= true - else ifeq ($(OS),irix) @@ -347,9 +335,6 @@ endif # enable l10n export INTERNATIONAL ?= true - # enable freetype2 support for text objects - export WITH_FREETYPE2 ?= true - else ifeq ($(OS),linux) @@ -403,9 +388,6 @@ endif # l10n export INTERNATIONAL ?= true - # enable freetype2 support for text objects - export WITH_FREETYPE2 ?= true - export WITH_BINRELOC ?= true # enable ffmpeg support @@ -454,9 +436,6 @@ endif # l10n #export INTERNATIONAL ?= true - # enable freetype2 support for text objects - #export WITH_FREETYPE2 ?= true - else ifeq ($(OS),solaris) @@ -502,9 +481,6 @@ endif # l10n #export INTERNATIONAL ?= true - # enable freetype2 support for text objects - #export WITH_FREETYPE2 ?= true - else ifeq ($(OS),windows) @@ -561,9 +537,6 @@ endif # l10n export INTERNATIONAL ?= true - # enable freetype2 support for text objects - export WITH_FREETYPE2 ?= true - # enable quicktime support # export WITH_QUICKTIME ?= true @@ -605,9 +578,6 @@ endif # l10n #export INTERNATIONAL ?= true - # enable freetype2 support for text objects - #export WITH_FREETYPE2 ?= true - endif # windows + fallback endif # solaris endif # openbsd @@ -624,8 +594,3 @@ ifeq ($(NAN_NO_KETSJI), true) export NAN_JUST_BLENDERDYNAMIC=true export NAN_NO_OPENAL=true endif - -# INTERNATIONAL implies WITH_FREETYPE2 -ifeq ($(INTERNATIONAL), true) - export WITH_FREETYPE2=true -endif diff --git a/tools/Blender.py b/tools/Blender.py index d24a7c4c2cb..6ffc0b8d76d 100644 --- a/tools/Blender.py +++ b/tools/Blender.py @@ -119,6 +119,7 @@ def setup_staticlibs(lenv): lenv['BF_ICONV_LIBPATH'] ] + libincs += Split(lenv['BF_FREETYPE_LIBPATH']) if lenv['WITH_BF_PYTHON']: libincs += Split(lenv['BF_PYTHON_LIBPATH']) if lenv['WITH_BF_SDL']: @@ -133,7 +134,6 @@ def setup_staticlibs(lenv): statlibs += Split(lenv['BF_OPENEXR_LIB_STATIC']) if lenv['WITH_BF_INTERNATIONAL']: libincs += Split(lenv['BF_GETTEXT_LIBPATH']) - libincs += Split(lenv['BF_FREETYPE_LIBPATH']) if lenv['WITH_BF_OPENAL']: libincs += Split(lenv['BF_OPENAL_LIBPATH']) if lenv['WITH_BF_STATICOPENAL']: @@ -157,13 +157,13 @@ def setup_syslibs(lenv): lenv['BF_ZLIB_LIB'] ] + syslibs += Split(lenv['BF_FREETYPE_LIB']) if lenv['WITH_BF_PYTHON'] and not lenv['WITH_BF_STATICPYTHON']: if lenv['BF_DEBUG'] and lenv['OURPLATFORM'] in ('win32-vc', 'win64-vc'): syslibs.append(lenv['BF_PYTHON_LIB']+'_d') else: syslibs.append(lenv['BF_PYTHON_LIB']) if lenv['WITH_BF_INTERNATIONAL']: - syslibs += Split(lenv['BF_FREETYPE_LIB']) syslibs += Split(lenv['BF_GETTEXT_LIB']) if lenv['WITH_BF_OPENAL']: if not lenv['WITH_BF_STATICOPENAL']: diff --git a/tools/btools.py b/tools/btools.py index 7c77e9c1b0a..2c9b564b8a1 100755 --- a/tools/btools.py +++ b/tools/btools.py @@ -49,7 +49,6 @@ def validate_arguments(args, bc): 'WITH_BF_FREETYPE', 'BF_FREETYPE', 'BF_FREETYPE_INC', 'BF_FREETYPE_LIB', 'BF_FREETYPE_LIBPATH', 'WITH_BF_QUICKTIME', 'BF_QUICKTIME', 'BF_QUICKTIME_INC', 'BF_QUICKTIME_LIB', 'BF_QUICKTIME_LIBPATH', 'WITH_BF_STATICOPENGL', 'BF_OPENGL', 'BF_OPENGL_INC', 'BF_OPENGL_LIB', 'BF_OPENGL_LIBPATH', 'BF_OPENGL_LIB_STATIC', - 'WITH_BF_FTGL', 'BF_FTGL', 'BF_FTGL_INC', 'BF_FTGL_LIB', 'WITH_BF_PLAYER', 'WITH_BF_NOBLENDER', 'WITH_BF_BINRELOC', @@ -235,7 +234,7 @@ def read_opts(cfg, args): ('BF_ZLIB_LIB', 'ZLib library', ''), ('BF_ZLIB_LIBPATH', 'ZLib library path', ''), - (BoolVariable('WITH_BF_INTERNATIONAL', 'Use Gettext and Freetype if true', True)), + (BoolVariable('WITH_BF_INTERNATIONAL', 'Use Gettext if true', True)), ('BF_GETTEXT', 'gettext base path', ''), ('BF_GETTEXT_INC', 'gettext include path', ''), @@ -308,11 +307,6 @@ def read_opts(cfg, args): ('BF_OPENGL_LIB_STATIC', 'OpenGL static libraries', ''), ('BF_OPENGL_LINKFLAGS', 'OpenGL link flags', ''), - (BoolVariable('WITH_BF_FTGL', 'Use FTGL if true', True)), - ('BF_FTGL', 'FTGL base path', ''), - ('BF_FTGL_INC', 'FTGL include path', ''), - ('BF_FTGL_LIB', 'FTGL libraries', ''), - (BoolVariable('WITH_BF_PLAYER', 'Build blenderplayer if true', False)), (BoolVariable('WITH_BF_NOBLENDER', 'Do not build blender if true', False)),