From fd171c5d2f3bd8fe674ccabcd33f4bc1d713dd29 Mon Sep 17 00:00:00 2001 From: Matthew Brades Date: Sat, 23 Mar 2013 19:29:14 +0000 Subject: [PATCH] Delete things. --- Firenzina.depend | 54 +- Firenzina.layout | 16 +- Firenzina.sln | 26 - Firenzina/50move.c | 53 - Firenzina/Copying.rtf | 674 ----- Firenzina/Firenzina.vcxproj | 241 -- Firenzina/Firenzina.vcxproj.filters | 270 -- Firenzina/Firenzina_2-2-2_xTreme.rtf | 234 -- Firenzina/Firenzina_history.rtf | 447 --- Firenzina/SEE.c | 230 -- Firenzina/SMP.c | 398 --- Firenzina/SMP.h | 65 - Firenzina/SMP_init.c | 240 -- Firenzina/SMP_search.c | 283 -- Firenzina/all_node.c | 418 --- Firenzina/arrays.c | 502 ---- Firenzina/arrays.h | 156 - Firenzina/benchmark.c | 98 - Firenzina/bits.h | 96 - Firenzina/black.h | 191 -- Firenzina/board.h | 132 - Firenzina/common.h | 51 - Firenzina/control.c | 340 --- Firenzina/control.h | 43 - Firenzina/cut_node.c | 493 --- Firenzina/endgame.c | 137 - Firenzina/evaluation.c | 1289 -------- Firenzina/evaluation.h | 253 -- Firenzina/exclude_node.c | 395 --- Firenzina/fire.h | 299 -- Firenzina/functions.h | 224 -- Firenzina/hash.h | 114 - Firenzina/hash_init.c | 223 -- Firenzina/hash_use.c | 289 -- Firenzina/history.h | 45 - Firenzina/init.c | 1980 ------------ Firenzina/init_gen.h | 132 - Firenzina/input.c | 739 ----- Firenzina/kp_black.h | 4126 -------------------------- Firenzina/kp_white.h | 4126 -------------------------- Firenzina/low_depth.c | 355 --- Firenzina/magic_mult.c | 224 -- Firenzina/main.c | 247 -- Firenzina/make_move.c | 365 --- Firenzina/make_unmake.h | 50 - Firenzina/material_value.c | 790 ----- Firenzina/material_value.h | 36 - Firenzina/mem_handler.c | 218 -- Firenzina/mobility.c | 190 -- Firenzina/move.h | 103 - Firenzina/move_gen.c | 653 ---- Firenzina/next_move.c | 205 -- Firenzina/null_move.h | 60 - Firenzina/ok_move.c | 129 - Firenzina/pawn_eval.c | 699 ----- Firenzina/pawn_eval.h | 103 - Firenzina/pv_node.c | 338 --- Firenzina/qsearch.c | 310 -- Firenzina/qsearch_pv.c | 403 --- Firenzina/robbo_cache.c | 202 -- Firenzina/robbo_comp.c | 507 ---- Firenzina/robbo_count.c | 132 - Firenzina/robbo_decomp.c | 311 -- Firenzina/robbo_glue.c | 439 --- Firenzina/robbo_init.c | 283 -- Firenzina/robbo_init_IO.c | 1149 ------- Firenzina/robbo_suffix.c | 212 -- Firenzina/robbo_totalbase.h | 204 -- Firenzina/robbo_triple.c | 515 ---- Firenzina/robbo_triple_disk.c | 309 -- Firenzina/robbo_triple_init.c | 1016 ------- Firenzina/robbo_triple_value.c | 625 ---- Firenzina/robbo_triplebase.h | 90 - Firenzina/robbo_utility.c | 423 --- Firenzina/root_analysis.c | 265 -- Firenzina/root_multipv.c | 356 --- Firenzina/root_node.c | 267 -- Firenzina/search.c | 414 --- Firenzina/set_position.c | 391 --- Firenzina/signals.c | 57 - Firenzina/slab_memory.c | 150 - Firenzina/slab_memory.h | 83 - Firenzina/static.c | 217 -- Firenzina/top_analysis.c | 275 -- Firenzina/top_node.c | 282 -- Firenzina/undef.h | 189 -- Firenzina/unmake_move.c | 178 -- Firenzina/utility.c | 486 --- Firenzina/white.h | 192 -- Firenzina/win-linux.h | 132 - Firenzina/win32bits.h | 89 - Firenzina/win64bits.h | 83 - src/patch.diff | 876 ------ 93 files changed, 36 insertions(+), 36963 deletions(-) delete mode 100644 Firenzina.sln delete mode 100644 Firenzina/50move.c delete mode 100644 Firenzina/Copying.rtf delete mode 100644 Firenzina/Firenzina.vcxproj delete mode 100644 Firenzina/Firenzina.vcxproj.filters delete mode 100644 Firenzina/Firenzina_2-2-2_xTreme.rtf delete mode 100644 Firenzina/Firenzina_history.rtf delete mode 100644 Firenzina/SEE.c delete mode 100644 Firenzina/SMP.c delete mode 100644 Firenzina/SMP.h delete mode 100644 Firenzina/SMP_init.c delete mode 100644 Firenzina/SMP_search.c delete mode 100644 Firenzina/all_node.c delete mode 100644 Firenzina/arrays.c delete mode 100644 Firenzina/arrays.h delete mode 100644 Firenzina/benchmark.c delete mode 100644 Firenzina/bits.h delete mode 100644 Firenzina/black.h delete mode 100644 Firenzina/board.h delete mode 100644 Firenzina/common.h delete mode 100644 Firenzina/control.c delete mode 100644 Firenzina/control.h delete mode 100644 Firenzina/cut_node.c delete mode 100644 Firenzina/endgame.c delete mode 100644 Firenzina/evaluation.c delete mode 100644 Firenzina/evaluation.h delete mode 100644 Firenzina/exclude_node.c delete mode 100644 Firenzina/fire.h delete mode 100644 Firenzina/functions.h delete mode 100644 Firenzina/hash.h delete mode 100644 Firenzina/hash_init.c delete mode 100644 Firenzina/hash_use.c delete mode 100644 Firenzina/history.h delete mode 100644 Firenzina/init.c delete mode 100644 Firenzina/init_gen.h delete mode 100644 Firenzina/input.c delete mode 100644 Firenzina/kp_black.h delete mode 100644 Firenzina/kp_white.h delete mode 100644 Firenzina/low_depth.c delete mode 100644 Firenzina/magic_mult.c delete mode 100644 Firenzina/main.c delete mode 100644 Firenzina/make_move.c delete mode 100644 Firenzina/make_unmake.h delete mode 100644 Firenzina/material_value.c delete mode 100644 Firenzina/material_value.h delete mode 100644 Firenzina/mem_handler.c delete mode 100644 Firenzina/mobility.c delete mode 100644 Firenzina/move.h delete mode 100644 Firenzina/move_gen.c delete mode 100644 Firenzina/next_move.c delete mode 100644 Firenzina/null_move.h delete mode 100644 Firenzina/ok_move.c delete mode 100644 Firenzina/pawn_eval.c delete mode 100644 Firenzina/pawn_eval.h delete mode 100644 Firenzina/pv_node.c delete mode 100644 Firenzina/qsearch.c delete mode 100644 Firenzina/qsearch_pv.c delete mode 100644 Firenzina/robbo_cache.c delete mode 100644 Firenzina/robbo_comp.c delete mode 100644 Firenzina/robbo_count.c delete mode 100644 Firenzina/robbo_decomp.c delete mode 100644 Firenzina/robbo_glue.c delete mode 100644 Firenzina/robbo_init.c delete mode 100644 Firenzina/robbo_init_IO.c delete mode 100644 Firenzina/robbo_suffix.c delete mode 100644 Firenzina/robbo_totalbase.h delete mode 100644 Firenzina/robbo_triple.c delete mode 100644 Firenzina/robbo_triple_disk.c delete mode 100644 Firenzina/robbo_triple_init.c delete mode 100644 Firenzina/robbo_triple_value.c delete mode 100644 Firenzina/robbo_triplebase.h delete mode 100644 Firenzina/robbo_utility.c delete mode 100644 Firenzina/root_analysis.c delete mode 100644 Firenzina/root_multipv.c delete mode 100644 Firenzina/root_node.c delete mode 100644 Firenzina/search.c delete mode 100644 Firenzina/set_position.c delete mode 100644 Firenzina/signals.c delete mode 100644 Firenzina/slab_memory.c delete mode 100644 Firenzina/slab_memory.h delete mode 100644 Firenzina/static.c delete mode 100644 Firenzina/top_analysis.c delete mode 100644 Firenzina/top_node.c delete mode 100644 Firenzina/undef.h delete mode 100644 Firenzina/unmake_move.c delete mode 100644 Firenzina/utility.c delete mode 100644 Firenzina/white.h delete mode 100644 Firenzina/win-linux.h delete mode 100644 Firenzina/win32bits.h delete mode 100644 Firenzina/win64bits.h delete mode 100644 src/patch.diff diff --git a/Firenzina.depend b/Firenzina.depend index 0ce5cb0..300c0eb 100644 --- a/Firenzina.depend +++ b/Firenzina.depend @@ -2,7 +2,7 @@ 1364058925 source:/home/matthew/Projects/Firenzina/src/50move.c "fire.h" -1364058601 /home/matthew/Projects/Firenzina/src/fire.h +1364066654 /home/matthew/Projects/Firenzina/src/fire.h @@ -16,18 +16,20 @@ "functions.h" "common.h" -1364058602 /home/matthew/Projects/Firenzina/src/win-linux.h +1364066486 /home/matthew/Projects/Firenzina/src/win-linux.h "win64bits.h" "win32bits.h" "bits.h" -1364058595 /home/matthew/Projects/Firenzina/src/win64bits.h +1364066153 /home/matthew/Projects/Firenzina/src/win64bits.h + "bits.h" -1364058600 /home/matthew/Projects/Firenzina/src/win32bits.h +1364066153 /home/matthew/Projects/Firenzina/src/win32bits.h + "bits.h" -1364058600 /home/matthew/Projects/Firenzina/src/bits.h +1364066153 /home/matthew/Projects/Firenzina/src/bits.h @@ -48,13 +50,13 @@ 1364058600 /home/matthew/Projects/Firenzina/src/common.h -1364058925 source:/home/matthew/Projects/Firenzina/src/SEE.c +1364059605 source:/home/matthew/Projects/Firenzina/src/SEE.c "fire.h" "SEE.c" "white.h" "black.h" -1364058925 /home/matthew/Projects/Firenzina/src/SEE.c +1364059605 /home/matthew/Projects/Firenzina/src/SEE.c "fire.h" "SEE.c" "white.h" @@ -67,20 +69,20 @@ 1364058600 /home/matthew/Projects/Firenzina/src/black.h -1364058925 source:/home/matthew/Projects/Firenzina/src/SMP.c +1364066153 source:/home/matthew/Projects/Firenzina/src/SMP.c "fire.h" -1364058925 source:/home/matthew/Projects/Firenzina/src/SMP_init.c +1364066153 source:/home/matthew/Projects/Firenzina/src/SMP_init.c "fire.h" -1364058925 source:/home/matthew/Projects/Firenzina/src/SMP_search.c +1364066153 source:/home/matthew/Projects/Firenzina/src/SMP_search.c "fire.h" "SMP_search.c" "white.h" "black.h" -1364058925 /home/matthew/Projects/Firenzina/src/SMP_search.c +1364066153 /home/matthew/Projects/Firenzina/src/SMP_search.c "fire.h" "SMP_search.c" "white.h" @@ -96,7 +98,7 @@ 1364058601 /home/matthew/Projects/Firenzina/src/history.h -1364058601 /home/matthew/Projects/Firenzina/src/null_move.h +1364066153 /home/matthew/Projects/Firenzina/src/null_move.h 1364058925 /home/matthew/Projects/Firenzina/src/all_node.c "fire.h" @@ -116,7 +118,7 @@ "fire.h" "control.h" -1364058601 /home/matthew/Projects/Firenzina/src/control.h +1364066153 /home/matthew/Projects/Firenzina/src/control.h @@ -173,11 +175,11 @@ 1364058925 source:/home/matthew/Projects/Firenzina/src/hash_use.c "fire.h" -1364058925 source:/home/matthew/Projects/Firenzina/src/init.c +1364066153 source:/home/matthew/Projects/Firenzina/src/init.c "fire.h" -1364058925 source:/home/matthew/Projects/Firenzina/src/input.c +1364066679 source:/home/matthew/Projects/Firenzina/src/input.c "fire.h" "control.h" @@ -203,10 +205,10 @@ 1364058925 source:/home/matthew/Projects/Firenzina/src/magic_mult.c "fire.h" -1364058925 source:/home/matthew/Projects/Firenzina/src/main.c +1364066153 source:/home/matthew/Projects/Firenzina/src/main.c "fire.h" -1364058925 source:/home/matthew/Projects/Firenzina/src/make_move.c +1364066153 source:/home/matthew/Projects/Firenzina/src/make_move.c "fire.h" "make_unmake.h" "material_value.h" @@ -218,7 +220,7 @@ 1364058925 source:/home/matthew/Projects/Firenzina/src/material_value.c "fire.h" -1364058925 source:/home/matthew/Projects/Firenzina/src/mem_handler.c +1364066153 source:/home/matthew/Projects/Firenzina/src/mem_handler.c "fire.h" @@ -347,7 +349,7 @@ "fire.h" "robbo_totalbase.h" -1364058925 source:/home/matthew/Projects/Firenzina/src/robbo_init_IO.c +1364066153 source:/home/matthew/Projects/Firenzina/src/robbo_init_IO.c "fire.h" "robbo_totalbase.h" @@ -373,14 +375,14 @@ "robbo_triplebase.h" "robbo_totalbase.h" -1364058926 source:/home/matthew/Projects/Firenzina/src/robbo_triple_init.c - "fire.h" - "robbo_totalbase.h" - "robbo_triplebase.h" +1364066153 source:/home/matthew/Projects/Firenzina/src/robbo_triple_init.c - + + "fire.h" + "robbo_totalbase.h" + "robbo_triplebase.h" 1364058926 source:/home/matthew/Projects/Firenzina/src/robbo_triple_value.c "fire.h" @@ -441,7 +443,7 @@ 1364058926 source:/home/matthew/Projects/Firenzina/src/set_position.c "fire.h" -1364058926 source:/home/matthew/Projects/Firenzina/src/signals.c +1364066153 source:/home/matthew/Projects/Firenzina/src/signals.c "fire.h" @@ -479,7 +481,7 @@ "white.h" "black.h" -1364058926 source:/home/matthew/Projects/Firenzina/src/unmake_move.c +1364066153 source:/home/matthew/Projects/Firenzina/src/unmake_move.c "fire.h" "make_unmake.h" diff --git a/Firenzina.layout b/Firenzina.layout index 3658d16..4f160c7 100644 --- a/Firenzina.layout +++ b/Firenzina.layout @@ -32,7 +32,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -92,7 +92,7 @@ - + @@ -107,7 +107,7 @@ - + @@ -236,24 +236,24 @@ - + - + - + - + diff --git a/Firenzina.sln b/Firenzina.sln deleted file mode 100644 index 320df6d..0000000 --- a/Firenzina.sln +++ /dev/null @@ -1,26 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2012 -Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Firenzina", "Firenzina\Firenzina.vcxproj", "{2643F986-8801-46D1-BDDF-6779FB0EF4D9}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Debug|x64 = Debug|x64 - Release|Win32 = Release|Win32 - Release|x64 = Release|x64 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {2643F986-8801-46D1-BDDF-6779FB0EF4D9}.Debug|Win32.ActiveCfg = Debug|Win32 - {2643F986-8801-46D1-BDDF-6779FB0EF4D9}.Debug|Win32.Build.0 = Debug|Win32 - {2643F986-8801-46D1-BDDF-6779FB0EF4D9}.Debug|x64.ActiveCfg = Debug|x64 - {2643F986-8801-46D1-BDDF-6779FB0EF4D9}.Debug|x64.Build.0 = Debug|x64 - {2643F986-8801-46D1-BDDF-6779FB0EF4D9}.Release|Win32.ActiveCfg = Release|Win32 - {2643F986-8801-46D1-BDDF-6779FB0EF4D9}.Release|Win32.Build.0 = Release|Win32 - {2643F986-8801-46D1-BDDF-6779FB0EF4D9}.Release|x64.ActiveCfg = Release|x64 - {2643F986-8801-46D1-BDDF-6779FB0EF4D9}.Release|x64.Build.0 = Release|x64 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/Firenzina/50move.c b/Firenzina/50move.c deleted file mode 100644 index d0fcfec..0000000 --- a/Firenzina/50move.c +++ /dev/null @@ -1,53 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -int Move50(typePos *Position) - { - typeMoveList List[256]; - typeMoveList *p; - EvasionMoves(Position, List, 0xffffffffffffffff); - p = List; - while (p->move) - { - Make(Position, p->move); - Mobility(Position); - if (!Position->wtm ? (wBitboardK & Position->Dyn->bAtt) : (bBitboardK & Position->Dyn->wAtt)) - { - Undo(Position, p->move); - p++; - continue; - } - Undo(Position, p->move); - return 0; - } - return HeightMultiplier * Height(Position) - ValueMate; - } \ No newline at end of file diff --git a/Firenzina/Copying.rtf b/Firenzina/Copying.rtf deleted file mode 100644 index 5c6556a..0000000 --- a/Firenzina/Copying.rtf +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them 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 prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If 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 convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state 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 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 3 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, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. \ No newline at end of file diff --git a/Firenzina/Firenzina.vcxproj b/Firenzina/Firenzina.vcxproj deleted file mode 100644 index 4308b20..0000000 --- a/Firenzina/Firenzina.vcxproj +++ /dev/null @@ -1,241 +0,0 @@ - - - - - Debug - Win32 - - - Debug - x64 - - - Release - Win32 - - - Release - x64 - - - - {2643F986-8801-46D1-BDDF-6779FB0EF4D9} - Firenzina - - - - Application - true - Intel C++ Compiler XE 13.0 - MultiByte - - - Application - true - Intel C++ Compiler XE 13.0 - MultiByte - - - Application - false - Intel C++ Compiler XE 13.0 - PGInstrument - NotSet - PGOOptimize - true - false - - - Application - false - Intel C++ Compiler XE 13.0 - true - NotSet - true - false - No - PGOOptimize - - - - - - - - - - - - - - - - - - - - - Level3 - Disabled - - - true - - - - - Level3 - Disabled - - - true - - - - - Level3 - true - true - AnySuitable - Speed - true - true - false - MultiThreaded - false - WIN32;NDEBUG;_CONSOLE;NOALIAS - true - LoopsSuccessUnsuccessVect2 - StreamingSIMDExtensions2 - MaxSpeedHighLevel - Precise - Cdecl - - - true - true - true - - - - - Level3 - MaxSpeedHighLevel - true - false - Speed - true - AnySuitable - true - Precise - LoopsSuccessUnsuccessVect2 - _MBCS;%(PreprocessorDefinitions);NOALIAS - false - false - None - SSE42 - true - true - false - MultiThreaded - false - true - - - true - true - true - NotSet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Firenzina/Firenzina.vcxproj.filters b/Firenzina/Firenzina.vcxproj.filters deleted file mode 100644 index de415a1..0000000 --- a/Firenzina/Firenzina.vcxproj.filters +++ /dev/null @@ -1,270 +0,0 @@ - - - - - {4FC737F1-C7A5-4376-A066-2A32D752A2FF} - cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx - - - {93995380-89BD-4b04-88EB-625FBE52EBFB} - h;hpp;hxx;hm;inl;inc;xsd - - - {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} - rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms - - - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - Header Files - - - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - Source Files - - - \ No newline at end of file diff --git a/Firenzina/Firenzina_2-2-2_xTreme.rtf b/Firenzina/Firenzina_2-2-2_xTreme.rtf deleted file mode 100644 index acdbf54..0000000 --- a/Firenzina/Firenzina_2-2-2_xTreme.rtf +++ /dev/null @@ -1,234 +0,0 @@ -{\rtf1\adeflang1037\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} -{\f34\fbidi \froman\fcharset1\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} -{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} -{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f40\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f41\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f43\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f44\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f45\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f46\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f47\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f48\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f60\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f61\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} -{\f63\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f64\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f65\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f66\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} -{\f67\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f68\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;}{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;} -{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;}{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;} -{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;}{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;} -{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;}{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;} -{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;}{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} -{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; -\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; -\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\chyperlink\ctint255\cshade255\red0\green0\blue255;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1037 -\ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* -\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1037 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused -Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 \sbasedon10 \sunhideused \styrsid5317973 Hyperlink;}}{\*\rsidtbl \rsid4788630\rsid4927562\rsid5317973\rsid6954368}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1 -\mlMargin0\mrMargin0\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator DMITRI}{\creatim\yr2013\mo2\dy25\hr12\min15}{\revtim\yr2013\mo2\dy25\hr12\min21}{\version4}{\edmins6}{\nofpages2}{\nofwords341}{\nofchars1949}{\nofcharsws2286}{\vern49275}} -{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect -\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701 -\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot4788630 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}} -{\*\pnseclvl2\pnucltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnqc\pnstart1\pnindent720\pnhang -{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (} -{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1037 \ltrch\fcs0 -\fs22\lang1033\langfe1033\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4927562 \hich\af2\dbch\af31505\loch\f2 Fire}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 -\hich\af2\dbch\af31505\loch\f2 nzina}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4927562 \hich\af2\dbch\af31505\loch\f2 2.2}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 \hich\af2\dbch\af31505\loch\f2 .2}{\rtlch\fcs1 \af2\afs20 -\ltrch\fcs0 \f2\fs20\insrsid4927562 \hich\af2\dbch\af31505\loch\f2 xTreme}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 \hich\af2\dbch\af31505\loch\f2 by Yuri Censor (Dmitri\hich\af2\dbch\af31505\loch\f2 Gusev),}{\rtlch\fcs1 \af2\afs20 -\ltrch\fcs0 \f2\fs20\insrsid4927562 -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 \hich\af2\dbch\af31505\loch\f2 a\hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 clone of Fire 2.2 xTreme }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4927562 -\hich\af2\dbch\af31505\loch\f2 by Kranium}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 \hich\af2\dbch\af31505\loch\f2 (Norman Schmidt)}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4927562 \hich\af2\dbch\af31505\loch\f2 , }{ -\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4927562 \hich\af2\dbch\af31505\loch\f2 based on Ippolit}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 .}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4927562 -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 -\par \hich\af2\dbch\af31505\loch\f2 Description by Yuri Censor -\par \hich\af2\dbch\af31505\loch\f2 February 25, 2013 -\par -\par \hich\af2\dbch\af31505\loch\f2 Now faster, thanks to }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630\charrsid4788630 \hich\af2\dbch\af31505\loch\f2 _mm_popcnt_u64(}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 -\hich\af2\dbch\af31505\loch\f2 ) and a newer compiler (Intel C++ 13.0 Update 3, Feb. 6, 2013).\hich\af2\dbch\af31505\loch\f2 Now allows up to twice as many threads as there are CPUs (but no more than 64)}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 -\f2\fs20\insrsid6954368 \hich\af2\dbch\af31505\loch\f2 , to improve xTreme configurability}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 . -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5317973 -\par \hich\af2\dbch\af31505\loch\f2 Best regards- -\par \hich\af2\dbch\af31505\loch\f2 Yuri Censor (Dmitri Gusev) -\par }{\field{\*\fldinst {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5317973 \hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 HYPERLINK \hich\af2\dbch\af31505\loch\f2 "\hich\af2\dbch\af31505\loch\f2 mailto:\hich\af2\dbch\af31505\loch\f2 d -\hich\af2\dbch\af31505\loch\f2 mitri.\hich\af2\dbch\af31505\loch\f2 a.gusev@gmail.com\hich\af2\dbch\af31505\loch\f2 "\hich\af2\dbch\af31505\loch\f2 }}{\fldrslt {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \cs15\f2\fs20\ul\cf17\insrsid5317973\charrsid3016014 -\hich\af2\dbch\af31505\loch\f2 d\hich\af2\dbch\af31505\loch\f2 mitri.\hich\af2\dbch\af31505\loch\f2 a.gusev@gmail.com}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5317973 \hich\af2\dbch\af31505\loch\f2 - -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4788630 -\par \hich\af2\dbch\af31505\loch\f2 Description by Kranium -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4927562 \hich\af2\dbch\af31505\loch\f2 July 6, 2011 -\par -\par \hich\af2\dbch\af31505\loch\f2 w/ extreme user configurability: -\par \hich\af2\dbch\af31505\loch\f2 (70+ system, search, eval, and material options available via an external fire.cfg) -\par \hich\af2\dbch\af31505\loch\f2 for an intensive and rich user experimentation/testing/configuration experience... -\par \hich\af2\dbch\af31505\loch\f2 one of the world's top engines, now with you firmly in the drivers seat! -\par -\par \hich\af2\dbch\af31505\loch\f2 Fire supports up to 6 piece endgame RobboBases (TripleBases and TotalBases). -\par -\par \hich\af2\dbch\af31505\loch\f2 Optional configuratio\hich\af2\dbch\af31505\loch\f2 n file creation options: -\par \hich\af2\dbch\af31505\loch\f2 type: -\par \hich\af2\dbch\af31505\loch\f2 'default' (generates a fire.cfg w/ default parameters) -\par \hich\af2\dbch\af31505\loch\f2 or: -\par \hich\af2\dbch\af31505\loch\f2 'random' (generates a fire.cfg w/ random parameters) -\par \hich\af2\dbch\af31505\loch\f2 'rand_eval' (generates a fire.cfg w/ random evaluation parameters) -\par \hich\af2\dbch\af31505\loch\f2 'rand_material' (generates a fire.\hich\af2\dbch\af31505\loch\f2 cfg w/ random material value parameters) -\par \hich\af2\dbch\af31505\loch\f2 'rand_prune' (generates a fire.cfg w/ random search prune parameters) -\par \hich\af2\dbch\af31505\loch\f2 'rand_search' (generates a fire.cfg w/ random search parameters) -\par \hich\af2\dbch\af31505\loch\f2 'rand_time' (generates a fire.cfg w/ random time management parameters) -\par \hich\af2\dbch\af31505\loch\f2 at the console prompt to generate a unique fire.cfg file. -\par -\par \hich\af2\dbch\af31505\loch\f2 In the fire.cfg file: -\par \hich\af2\dbch\af31505\loch\f2 Use 'Random_Range' paramter to determine range of variance... -\par \hich\af2\dbch\af31505\loch\f2 Random_Range is set by default to 20 (this means +- 20%) -\par -\par \hich\af2\dbch\af31505\loch\f2 After creation, the fire.cfg file will be loaded on ne\hich\af2\dbch\af31505\loch\f2 xt startup. -\par \hich\af2\dbch\af31505\loch\f2 Excellent for saving and loading custom user options. -\par -\par \hich\af2\dbch\af31505\loch\f2 If a fire.cfg file exists in the same directory as Fire.exe, -\par \hich\af2\dbch\af31505\loch\f2 UCI options are disabled, except for Hash, Pawn Hash, MultiPV, and Max Threads. -\par -\par \hich\af2\dbch\af31505\loch\f2 Many thanks to all 2.0 beta testers: -\par -\par \hich\af2\dbch\af31505\loch\f2 Arif Ressmann -\par \hich\af2\dbch\af31505\loch\f2 Angels77 -\par \hich\af2\dbch\af31505\loch\f2 Bernardo Wesler -\par \hich\af2\dbch\af31505\loch\f2 Brent Xie -\par \hich\af2\dbch\af31505\loch\f2 Chris Gloc -\par \hich\af2\dbch\af31505\loch\f2 Giuseppe Petruccelli -\par \hich\af2\dbch\af31505\loch\f2 Gustavo Carballo -\par \hich\af2\dbch\af31505\loch\f2 IPMan -\par \hich\af2\dbch\af31505\loch\f2 Menno Beetsma -\par \hich\af2\dbch\af31505\loch\f2 Michael Canji -\par \hich\af2\dbch\af31505\loch\f2 Nolan Denson -\par \hich\af2\dbch\af31505\loch\f2 Reda Menshawi -\par \hich\af2\dbch\af31505\loch\f2 Robert Jones -\par \hich\af2\dbch\af31505\loch\f2 Vladimir -\par \hich\af2\dbch\af31505\loch\f2 Wolfgang Draeger -\par -\par \hich\af2\dbch\af31505\loch\f2 and a very special thanks to Izak (PeterPan) for his supp\hich\af2\dbch\af31505\loch\f2 ort, testing, 64-bit -\par \hich\af2\dbch\af31505\loch\f2 compiling, and programming. -\par -\par \hich\af2\dbch\af31505\loch\f2 Best regards- -\par -\par \hich\af2\dbch\af31505\loch\f2 Norman Schmidt -\par \hich\af2\dbch\af31505\loch\f2 kranium@telenet.be -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4927562 -\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a -9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad -5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 -b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 -0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 -a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f -c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 -0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 -a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 -6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b -4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b -4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f -7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 -615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad -79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b -5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab -999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 -699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 -8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 -0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f -9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be -15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 -3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d -32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a -f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 -e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 -fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 -ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae -a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 -399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 -4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 -0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b -c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 -689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 -5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 -aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d -316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 -545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a -c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 -0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 -8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 -d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 -1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f -bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 -a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a -0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 -0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 -00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} -{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d -617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 -6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 -656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} -{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; -\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; -\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; -\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 -4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 -d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e5000000000000000000000000a035 -1e8e7c13ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Firenzina/Firenzina_history.rtf b/Firenzina/Firenzina_history.rtf deleted file mode 100644 index cf00030..0000000 --- a/Firenzina/Firenzina_history.rtf +++ /dev/null @@ -1,447 +0,0 @@ -{\rtf1\adeflang1037\ansi\ansicpg1252\uc1\adeff31507\deff0\stshfdbch31505\stshfloch31506\stshfhich31506\stshfbi31507\deflang1033\deflangfe1033\themelang1033\themelangfe0\themelangcs0{\fonttbl{\f0\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\f2\fbidi \fmodern\fcharset0\fprq1{\*\panose 02070309020205020404}Courier New;} -{\f34\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria Math;}{\flomajor\f31500\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbmajor\f31501\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhimajor\f31502\fbidi \froman\fcharset0\fprq2{\*\panose 02040503050406030204}Cambria;} -{\fbimajor\f31503\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\flominor\f31504\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;} -{\fdbminor\f31505\fbidi \froman\fcharset0\fprq2{\*\panose 02020603050405020304}Times New Roman;}{\fhiminor\f31506\fbidi \fswiss\fcharset0\fprq2{\*\panose 020f0502020204030204}Calibri;} -{\fbiminor\f31507\fbidi \fswiss\fcharset0\fprq2{\*\panose 020b0604020202020204}Arial;}{\f471\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\f472\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\f474\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\f475\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\f476\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\f477\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\f478\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\f479\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\f491\fbidi \fmodern\fcharset238\fprq1 Courier New CE;}{\f492\fbidi \fmodern\fcharset204\fprq1 Courier New Cyr;} -{\f494\fbidi \fmodern\fcharset161\fprq1 Courier New Greek;}{\f495\fbidi \fmodern\fcharset162\fprq1 Courier New Tur;}{\f496\fbidi \fmodern\fcharset177\fprq1 Courier New (Hebrew);}{\f497\fbidi \fmodern\fcharset178\fprq1 Courier New (Arabic);} -{\f498\fbidi \fmodern\fcharset186\fprq1 Courier New Baltic;}{\f499\fbidi \fmodern\fcharset163\fprq1 Courier New (Vietnamese);}{\f811\fbidi \froman\fcharset238\fprq2 Cambria Math CE;}{\f812\fbidi \froman\fcharset204\fprq2 Cambria Math Cyr;} -{\f814\fbidi \froman\fcharset161\fprq2 Cambria Math Greek;}{\f815\fbidi \froman\fcharset162\fprq2 Cambria Math Tur;}{\f818\fbidi \froman\fcharset186\fprq2 Cambria Math Baltic;}{\f819\fbidi \froman\fcharset163\fprq2 Cambria Math (Vietnamese);} -{\flomajor\f31508\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flomajor\f31509\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flomajor\f31511\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\flomajor\f31512\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flomajor\f31513\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flomajor\f31514\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\flomajor\f31515\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flomajor\f31516\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbmajor\f31518\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fdbmajor\f31519\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbmajor\f31521\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbmajor\f31522\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fdbmajor\f31523\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbmajor\f31524\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbmajor\f31525\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fdbmajor\f31526\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhimajor\f31528\fbidi \froman\fcharset238\fprq2 Cambria CE;}{\fhimajor\f31529\fbidi \froman\fcharset204\fprq2 Cambria Cyr;} -{\fhimajor\f31531\fbidi \froman\fcharset161\fprq2 Cambria Greek;}{\fhimajor\f31532\fbidi \froman\fcharset162\fprq2 Cambria Tur;}{\fhimajor\f31535\fbidi \froman\fcharset186\fprq2 Cambria Baltic;} -{\fhimajor\f31536\fbidi \froman\fcharset163\fprq2 Cambria (Vietnamese);}{\fbimajor\f31538\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\fbimajor\f31539\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;} -{\fbimajor\f31541\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fbimajor\f31542\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\fbimajor\f31543\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);} -{\fbimajor\f31544\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fbimajor\f31545\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\fbimajor\f31546\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);} -{\flominor\f31548\fbidi \froman\fcharset238\fprq2 Times New Roman CE;}{\flominor\f31549\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\flominor\f31551\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;} -{\flominor\f31552\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;}{\flominor\f31553\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\flominor\f31554\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);} -{\flominor\f31555\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;}{\flominor\f31556\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fdbminor\f31558\fbidi \froman\fcharset238\fprq2 Times New Roman CE;} -{\fdbminor\f31559\fbidi \froman\fcharset204\fprq2 Times New Roman Cyr;}{\fdbminor\f31561\fbidi \froman\fcharset161\fprq2 Times New Roman Greek;}{\fdbminor\f31562\fbidi \froman\fcharset162\fprq2 Times New Roman Tur;} -{\fdbminor\f31563\fbidi \froman\fcharset177\fprq2 Times New Roman (Hebrew);}{\fdbminor\f31564\fbidi \froman\fcharset178\fprq2 Times New Roman (Arabic);}{\fdbminor\f31565\fbidi \froman\fcharset186\fprq2 Times New Roman Baltic;} -{\fdbminor\f31566\fbidi \froman\fcharset163\fprq2 Times New Roman (Vietnamese);}{\fhiminor\f31568\fbidi \fswiss\fcharset238\fprq2 Calibri CE;}{\fhiminor\f31569\fbidi \fswiss\fcharset204\fprq2 Calibri Cyr;} -{\fhiminor\f31571\fbidi \fswiss\fcharset161\fprq2 Calibri Greek;}{\fhiminor\f31572\fbidi \fswiss\fcharset162\fprq2 Calibri Tur;}{\fhiminor\f31575\fbidi \fswiss\fcharset186\fprq2 Calibri Baltic;} -{\fhiminor\f31576\fbidi \fswiss\fcharset163\fprq2 Calibri (Vietnamese);}{\fbiminor\f31578\fbidi \fswiss\fcharset238\fprq2 Arial CE;}{\fbiminor\f31579\fbidi \fswiss\fcharset204\fprq2 Arial Cyr;} -{\fbiminor\f31581\fbidi \fswiss\fcharset161\fprq2 Arial Greek;}{\fbiminor\f31582\fbidi \fswiss\fcharset162\fprq2 Arial Tur;}{\fbiminor\f31583\fbidi \fswiss\fcharset177\fprq2 Arial (Hebrew);} -{\fbiminor\f31584\fbidi \fswiss\fcharset178\fprq2 Arial (Arabic);}{\fbiminor\f31585\fbidi \fswiss\fcharset186\fprq2 Arial Baltic;}{\fbiminor\f31586\fbidi \fswiss\fcharset163\fprq2 Arial (Vietnamese);}}{\colortbl;\red0\green0\blue0;\red0\green0\blue255; -\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0; -\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;\chyperlink\ctint255\cshade255\red0\green0\blue255;}{\*\defchp \fs22\loch\af31506\hich\af31506\dbch\af31505 }{\*\defpap \ql \li0\ri0\sa200\sl276\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 }\noqfpromote {\stylesheet{\ql \li0\ri0\sa200\sl276\slmult1\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1037 -\ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext0 \sqformat \spriority0 Normal;}{\*\cs10 \additive \ssemihidden \sunhideused \spriority1 Default Paragraph Font;}{\* -\ts11\tsrowd\trftsWidthB3\trpaddl108\trpaddr108\trpaddfl3\trpaddft3\trpaddfb3\trpaddfr3\trcbpat1\trcfpat1\tblind0\tblindtype3\tsvertalt\tsbrdrt\tsbrdrl\tsbrdrb\tsbrdrr\tsbrdrdgl\tsbrdrdgr\tsbrdrh\tsbrdrv \ql \li0\ri0\sa200\sl276\slmult1 -\widctlpar\wrapdefault\aspalpha\aspnum\faauto\adjustright\rin0\lin0\itap0 \rtlch\fcs1 \af31507\afs22\alang1037 \ltrch\fcs0 \fs22\lang1033\langfe1033\loch\f31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 \snext11 \ssemihidden \sunhideused -Normal Table;}{\*\cs15 \additive \rtlch\fcs1 \af0 \ltrch\fcs0 \ul\cf17 \sbasedon10 \sunhideused \styrsid3023402 Hyperlink;}}{\*\rsidtbl \rsid1250065\rsid1274771\rsid3023402\rsid3148252\rsid3228932\rsid4072361\rsid4076455\rsid4488989\rsid6560939 -\rsid6903008\rsid7213630\rsid7882241\rsid8652154\rsid9779845\rsid10765666\rsid12390100\rsid13763945\rsid13785636\rsid14167516\rsid14764979\rsid15075939\rsid15946234}{\mmathPr\mmathFont34\mbrkBin0\mbrkBinSub0\msmallFrac0\mdispDef1\mlMargin0\mrMargin0 -\mdefJc1\mwrapIndent1440\mintLim0\mnaryLim1}{\info{\operator DMITRI}{\creatim\yr2013\mo2\dy25\hr11\min20}{\revtim\yr2013\mo2\dy25\hr12\min15}{\version19}{\edmins55}{\nofpages5}{\nofwords1390}{\nofchars7929}{\nofcharsws9301}{\vern49275}} -{\*\xmlnstbl {\xmlns1 http://schemas.microsoft.com/office/word/2003/wordml}}\paperw12240\paperh15840\margl1440\margr1440\margt1440\margb1440\gutter0\ltrsect -\widowctrl\ftnbj\aenddoc\trackmoves0\trackformatting1\donotembedsysfont0\relyonvml0\donotembedlingdata1\grfdocevents0\validatexml0\showplaceholdtext0\ignoremixedcontent0\saveinvalidxml0\showxmlerrors0\horzdoc\dghspace120\dgvspace120\dghorigin1701 -\dgvorigin1984\dghshow0\dgvshow3\jcompress\viewkind1\viewscale100\rsidroot1250065 \fet0{\*\wgrffmtfilter 2450}\ilfomacatclnup0\ltrpar \sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\*\pnseclvl1\pnucrm\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}} -{\*\pnseclvl2\pnucltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl3\pndec\pnqc\pnstart1\pnindent720\pnhang {\pntxta .}}{\*\pnseclvl4\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxta )}}{\*\pnseclvl5\pndec\pnqc\pnstart1\pnindent720\pnhang -{\pntxtb (}{\pntxta )}}{\*\pnseclvl6\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl7\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}{\*\pnseclvl8\pnlcltr\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (} -{\pntxta )}}{\*\pnseclvl9\pnlcrm\pnqc\pnstart1\pnindent720\pnhang {\pntxtb (}{\pntxta )}}\pard\plain \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid1250065 \rtlch\fcs1 \af31507\afs22\alang1037 \ltrch\fcs0 -\fs22\lang1033\langfe1033\loch\af31506\hich\af31506\dbch\af31505\cgrid\langnp1033\langfenp1033 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 Fire}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 -\hich\af2\dbch\af31505\loch\f2 nzina\hich\af2\dbch\af31505\loch\f2 by Yuri Censor (Dmitri Gusev),}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 a\hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 clone of Fire }{ -\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 by Kranium}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 (Norman Schmidt),}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 -\f2\fs20\insrsid5513045 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid1250065 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 a derivative \hich\af2\dbch\af31505\loch\f2 (via Fire) of FireBird -\hich\af2\dbch\af31505\loch\f2 by Kranium (Norman Schmidt) and Sentinel\hich\af2\dbch\af31505\loch\f2 (}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065\charrsid1250065 \hich\af2\dbch\af31505\loch\f2 Milos Stanisavljevic}{\rtlch\fcs1 -\af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 ), -\par \hich\af2\dbch\af31505\loch\f2 based on (via Fire and FireBird)}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid15075939 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 -IppoLit engines -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 by Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, Roberto Pescatore, -\par \hich\af2\dbch\af31505\loch\f2 Yusuf Ralf Weisskopf, Ivan Skavinsky Skavar and all Decembrists -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9779845 -\par \hich\af2\dbch\af31505\loch\f2 Firenzina 2.2.2 xTreme -\par \hich\af2\dbch\af31505\loch\f2 Following the advice of Jose Velasco (Velmarin), switched to }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9779845\charrsid9779845 \hich\af2\dbch\af31505\loch\f2 _mm_popcnt_u64}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 -\f2\fs20\insrsid9779845 \hich\af2\dbch\af31505\loch\f2 ()\hich\af2\dbch\af31505\loch\f2 from\hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9779845\charrsid9779845 \hich\af2\dbch\af31505\loch\f2 }{ -\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9779845 . -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid6560939 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9779845 \hich\af2\dbch\af31505\loch\f2 In orde\hich\af2\dbch\af31505\loch\f2 r to improv -\hich\af2\dbch\af31505\loch\f2 e xTreme configurability,\hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 a\hich\af2\dbch\af31505\loch\f2 llowed up to twice as many threads as ther\hich\af2\dbch\af31505\loch\f2 e ar -\hich\af2\dbch\af31505\loch\f2 e processors }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6560939 \hich\af2\dbch\af31505\loch\f2 (CPUs) }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9779845 \hich\af2\dbch\af31505\loch\f2 reported. -\hich\af2\dbch\af31505\loch\f2 (\hich\af2\dbch\af31505\loch\f2 Hyperthreaded designs report twice as many }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6560939 \hich\af2\dbch\af31505\loch\f2 CPUs}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 -\f2\fs20\insrsid9779845 \hich\af2\dbch\af31505\loch\f2 as \hich\af2\dbch\af31505\loch\f2 cores. For example, my\hich\af2\dbch\af31505\loch\f2 Core \hich\af2\dbch\af31505\loch\f2 i7\hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 -quad reports having 8 processors. }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6560939 \hich\af2\dbch\af31505\loch\f2 Then the\hich\af2\dbch\af31505\loch\f2 default NumThreads is }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4072361 -\hich\af2\dbch\af31505\loch\f2 now }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6560939 \hich\af2\dbch\af31505\loch\f2 set to 8\hich\af2\dbch\af31505\loch\f2 <<1\hich\af2\dbch\af31505\loch\f2 = 16. Limit by setting Max_Threads to a lower value}{ -\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid14167516 \hich\af2\dbch\af31505\loch\f2 than the default 64}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6560939 .}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4072361 -\hich\af2\dbch\af31505\loch\f2 In the past, there was no way to have more threads than CPUs.}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6560939 \hich\af2\dbch\af31505\loch\f2 )}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid9779845 -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6903008 \hich\af2\dbch\af31505\loch\f2 Compiled using Intel}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid10765666 \hich\af2\dbch\af31505\loch\f2 C++}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 -\f2\fs20\insrsid1274771 \hich\af2\dbch\af31505\loch\f2 13.0 Update 3 (Feb. 6, 2013) \hich\af2\dbch\af31505\loch\f2 under Microsoft Visual Studio Ultimate 2012 Update 1.}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid6903008 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid3148252 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3228932 \hich\af2\dbch\af31505\loch\f2 Added a new \hich\af2\dbch\af31505\loch\f2 Firenzina logo based on -\hich\af2\dbch\af31505\loch\f2 a fragment of \hich\af2\dbch\af31505\loch\f2 the \hich\af2\dbch\af31505\loch\f2 classic \hich\af2\dbch\af31505\loch\f2 portrait of Giovanna Tuornabuoni by \hich\af2\dbch\af31505\loch\f2 Domenico -\hich\af2\dbch\af31505\loch\f2 Ghirlandaio\hich\af2\dbch\af31505\loch\f2 (public domain).}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3148252 \hich\af2\dbch\af31505\loch\f2 Rededication to the memories of }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 -\f2\fs20\insrsid3148252\charrsid3148252 \hich\af2\dbch\af31505\loch\f2 Giovanna Tornabuoni and Domenico Ghirlandaio}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3148252 \hich\af2\dbch\af31505\loch\f2 added.}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 -\f2\fs20\insrsid3228932 \hich\af2\dbch\af31505\loch\f2 -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid14764979 \hich\af2\dbch\af31505\loch\f2 R}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4488989 \hich\af2\dbch\af31505\loch\f2 eleased }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4076455 -\hich\af2\dbch\af31505\loch\f2 on February}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid12390100 \hich\af2\dbch\af31505\loch\f2 25, 2013, }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4488989 \hich\af2\dbch\af31505\loch\f2 -under GNU GENERAL PUBLIC LICENSE Version 3, \hich\af2\dbch\af31505\loch\f2 29 June\hich\af2\dbch\af31505\loch\f2 2007}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid12390100 .}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid4488989 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 Fire }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 2.2 xTreme -\par \hich\af2\dbch\af31505\loch\f2 PVHash now initializes correctly as LargePage memory -\par \hich\af2\dbch\af31505\loch\f2 TotalBaseHash size change issue fixed -\par \hich\af2\dbch\af31505\loch\f2 TBHits also display in Fritz GUI -\par \hich\af2\dbch\af31505\loch\f2 capability for non-LargePage compiles added -\par \hich\af2\dbch\af31505\loch\f2 LowDepth razoring added -> UCI option Low Depth Margin -\par \hich\af2\dbch\af31505\loch\f2 RobboInformatory removed, this wa\hich\af2\dbch\af31505\loch\f2 s almost never used -\par \hich\af2\dbch\af31505\loch\f2 Bulk Load Name, Bulk Unload Name, Bulk UnLoad Directory removed -\par \hich\af2\dbch\af31505\loch\f2 (unneeded and unused by most users) -\par \hich\af2\dbch\af31505\loch\f2 this release includes Fire_22_x64_NLP (NoLargePages), for systems -\par \hich\af2\dbch\af31505\loch\f2 experiencing difficulty with Large Page memory configuration (Win XP) -\par \hich\af2\dbch\af31505\loch\f2 released under GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 Fire }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 2.1 xTreme -\par \hich\af2\dbch\af31505\loch\f2 maintenance release -\par \hich\af2\dbch\af31505\loch\f2 MultiPV fixed -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 Fire }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 2.0 xTreme -\par \hich\af2\dbch\af31505\loch\f2 supports up to 64 cores/threads -\par \hich\af2\dbch\af31505\loch\f2 occasional crash fixed -\par \hich\af2\dbch\af31505\loch\f2 code improvements, bitwise optimizations -\par \hich\af2\dbch\af31505\loch\f2 SEE piece/capture values ar\hich\af2\dbch\af31505\loch\f2 e no longer constant entities -\par \hich\af2\dbch\af31505\loch\f2 fire.cfg incorrect default value for Prune_Pawn fixed: Prune_pawn = 160 -\par \hich\af2\dbch\af31505\loch\f2 Fire now recognizes whether or not the system supports hardware popcount -\par \hich\af2\dbch\af31505\loch\f2 and/or large pages, and self-configures itself accordingly -\par \hich\af2\dbch\af31505\loch\f2 some code cleanup, \hich\af2\dbch\af31505\loch\f2 formatting, and re-organization -\par \hich\af2\dbch\af31505\loch\f2 more complete Log implementation -\par \hich\af2\dbch\af31505\loch\f2 UCI clear hash button added -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.5 xTreme -\par \hich\af2\dbch\af31505\loch\f2 Triplebases (TBHit) fixed -\par \hich\af2\dbch\af31505\loch\f2 Historic Piece Values can now be changed 'on-the-fly' -\par \hich\af2\dbch\af31505\loch\f2 Ahmed default piece values implemented: -\par \hich\af2\dbch\af31505\loch\f2 100, 320, 335, 515, 1000 -\par \hich\af2\dbch\af31505\loch\f2 Top Mi\hich\af2\dbch\af31505\loch\f2 n Depth min/max values inversion -\par \hich\af2\dbch\af31505\loch\f2 option Draw Weight added -\par \hich\af2\dbch\af31505\loch\f2 5 TM options added: -\par \hich\af2\dbch\af31505\loch\f2 AbsoluteFactor -\par \hich\af2\dbch\af31505\loch\f2 BattleFactor -\par \hich\af2\dbch\af31505\loch\f2 EasyFactor -\par \hich\af2\dbch\af31505\loch\f2 EasyFactorPonder -\par \hich\af2\dbch\af31505\loch\f2 NormalFactor -\par \hich\af2\dbch\af31505\loch\f2 back to TM from 1.4 beta -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.4 xTreme beta 2 -\par \hich\af2\dbch\af31505\loch\f2 Historic Piece Value bug fixed -\par \hich\af2\dbch\af31505\loch\f2 Aspiration Window o\hich\af2\dbch\af31505\loch\f2 ption added -\par \hich\af2\dbch\af31505\loch\f2 Min Trans Move Depth option added -\par \hich\af2\dbch\af31505\loch\f2 Positional Weight added -\par \hich\af2\dbch\af31505\loch\f2 Static Weight->PST Weight -\par \hich\af2\dbch\af31505\loch\f2 Time Management from Fire 1.32 -\par \hich\af2\dbch\af31505\loch\f2 some code cleanup -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.4 xTreme beta -\par \hich\af2\dbch\af31505\loch\f2 extreme user configurability... -\par \hich\af2\dbch\af31505\loch\f2 60 system, search, eval, and material user options available via an external fire.cfg -\par \hich\af2\dbch\af31505\loch\f2 (or via UCI option dialogue) -\par \hich\af2\dbch\af31505\loch\f2 now supports 6 piece RobboBases -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.32 -\par \hich\af2\dbch\af31505\loch\f2 maintenance release -\par \hich\af2\dbch\af31505\loch\f2 fixes UCI and Fire.cfg piece value change issue -\par \hich\af2\dbch\af31505\loch\f2 (thx to Matt Weaver for identifying\hich\af2\dbch\af31505\loch\f2 this) -\par \hich\af2\dbch\af31505\loch\f2 knight = 320 -\par \hich\af2\dbch\af31505\loch\f2 bishop = 330 -\par \hich\af2\dbch\af31505\loch\f2 queen = 980 -\par \hich\af2\dbch\af31505\loch\f2 tr and col changed to rank and file for improved source code readability/consistency -\par \hich\af2\dbch\af31505\loch\f2 the above changes are mainly functional and likely do not affect overall strength (ELO) -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.31 -\par \hich\af2\dbch\af31505\loch\f2 maintenance release -\par \hich\af2\dbch\af31505\loch\f2 with Fire}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 Bird}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1. -\hich\af2\dbch\af31505\loch\f2 2 and 1.3, Totalbases and Triplebases can be configured to autoload on engine -\par \hich\af2\dbch\af31505\loch\f2 start only via the fire.cfg file...so i've added 2 new UCI options, and associated code, -\par \hich\af2\dbch\af31505\loch\f2 which enables configuration of 'autoloading of Robbobases' via UCI GUIs: -\par \hich\af2\dbch\af31505\loch\f2 Autoload Tota\hich\af2\dbch\af31505\loch\f2 lbases -\par \hich\af2\dbch\af31505\loch\f2 Autoload Triplebases -\par \hich\af2\dbch\af31505\loch\f2 id name and id author are now placed outside of 'if (CfgFound)' in static void uci() -\par \hich\af2\dbch\af31505\loch\f2 this was causing Fire}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 Bird}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 - 1.3 to not load in Fritz and CB -\par \hich\af2\dbch\af31505\loch\f2 Hash size wasn't being read properly from fire.cfg. this has now been fixed -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.3 -\par \hich\af2\dbch\af31505\loch\f2 new/faster bitboard LSB/MSB routines -\par \hich\af2\dbch\af31505\loch\f2 mutually exclusive fire.cfg/UCI GUI options -\par \hich\af2\dbch\af31505\loch\f2 (simply type 'default' at the command prompt to create a default fire.cfg file... -\par \hich\af2\dbch\af31505\loch\f2 on next start, Fire will read this file, and disable the GUI UCI options in order to -\par \hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 prevent any possible parameter or configuration conflict. If fire.cfg does does not -\par \hich\af2\dbch\af31505\loch\f2 exist in the same directory as Fire_13.exe, then all UCI options are enabled and available -\par \hich\af2\dbch\af31505\loch\f2 to the GUI as usual...) -\par \hich\af2\dbch\af31505\loch\f2 Phase-scaled piece values improved -\par \hich\af2\dbch\af31505\loch\f2 QSearch fix/imp\hich\af2\dbch\af31505\loch\f2 rovement -\par \hich\af2\dbch\af31505\loch\f2 MaxThreads = 256 -\par \hich\af2\dbch\af31505\loch\f2 Several new/improved eval routines -\par \hich\af2\dbch\af31505\loch\f2 Phase multiplier fix -\par \hich\af2\dbch\af31505\loch\f2 code cleanup -\par \hich\af2\dbch\af31505\loch\f2 speed improvement -\par \hich\af2\dbch\af31505\loch\f2 MultiPV now automatically disabled in 'game' mode, works only in 'analysis' mode -\par -\par \hich\af2\dbch\af31505\loch\f2 UCI options added: -\par \hich\af2\dbch\af31505\loch\f2 Lazy Eval 1 -\par \hich\af2\dbch\af31505\loch\f2 Lazy Eval 2 -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\cf1\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 UCI_EngineAbout}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 -\par \hich\af2\dbch\af31505\loch\f2 AspirationWindow -\par \hich\af2\dbch\af31505\loch\f2 Split At CN -\par \hich\af2\dbch\af31505\loch\f2 Split At EN -\par \hich\af2\dbch\af31505\loch\f2 ANSplitDepth -\par \hich\af2\dbch\af31505\loch\f2 ENSplitDepth -\par \hich\af2\dbch\af31505\loch\f2 PVSplitDepth -\par \hich\af2\dbch\af31505\loch\f2 Contempt -\par \hich\af2\dbch\af31505\loch\f2 Material Weight -\par \hich\af2\dbch\af31505\loch\f2 Positional Weight -\par \hich\af2\dbch\af31505\loch\f2 UseRobboBases -\par \hich\af2\dbch\af31505\loch\f2 Low Depth PVs -\par \hich\af2\dbch\af31505\loch\f2 Time Info -\par \hich\af2\dbch\af31505\loch\f2 Verbose UCI -\par \hich\af2\dbch\af31505\loch\f2 UCI_EngineAbout -\par -\par \hich\af2\dbch\af31505\loch\f2 UCI options removed: -\par \hich\af2\dbch\af31505\loch\f2 NMR Smooth Scaling -\par \hich\af2\dbch\af31505\loch\f2 Extra Info -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.2 -\par \hich\af2\dbch\af31505\loch\f2 SMP improvements/changes -\par \hich\af2\dbch\af31505\loch\f2 major RobboTripleBase bug fixed (TripleBases now work perfectly) -\par \hich\af2\dbch\af31505\loch\f2 support for new RobboTriple/Total Blocked (Z) bases added -\par \hich\af2\dbch\af31505\loch\f2 improved hash functions -\par \hich\af2\dbch\af31505\loch\f2 UCI options added: UCI_AnalyseMode, CPU Load Info, Current Move, -\par \hich\af2\dbch\af31505\loch\f2 Depth Info, Hash Fu\hich\af2\dbch\af31505\loch\f2 ll Info, TB Hits Info, Time Info -\par \hich\af2\dbch\af31505\loch\f2 UCI options removed: Analysis Mode, Extra Info Multi History, -\par \hich\af2\dbch\af31505\loch\f2 Multi Positional Gain -\par \hich\af2\dbch\af31505\loch\f2 NMR Smooth Scaling renamed NMR Scaling (Null Move Reduction Scaling) -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.1 -\par \hich\af2\dbch\af31505\loch\f2 RobboTripleBase and\hich\af2\dbch\af31505\loch\f2 RobboTotalBase support added (default directories: -\par \hich\af2\dbch\af31505\loch\f2 the sub-directories /TripleBases and /TotalBases, located same directory -\par \hich\af2\dbch\af31505\loch\f2 as program executable) -\par \hich\af2\dbch\af31505\loch\f2 engine now reads firebird.cfg on start -\par \hich\af2\dbch\af31505\loch\f2 TotalBase and TripleBase auto-load/verbose-load options are read from -\par \hich\af2\dbch\af31505\loch\f2 firebird.cfg on startup -\par \hich\af2\dbch\af31505\loch\f2 writes dated/timestamped I/O log_file (this is optional - can be turned -\par \hich\af2\dbch\af31505\loch\f2 on/off via firebird.cfg...recommended 'off' for tournament play) -\par \hich\af2\dbch\af31505\loch\f2 NMR Smooth Scaling default = off -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.01 -\par \hich\af2\dbch\af31505\loch\f2 bug fix: -\par \hich\af2\dbch\af31505\loch\f2 changes to SMP (to prevent occasional except\hich\af2\dbch\af31505\loch\f2 ion error/timeout) -\par \hich\af2\dbch\af31505\loch\f2 changes to NMR Smooth Scaling -\par \hich\af2\dbch\af31505\loch\f2 Null Move verification default = true -\par \hich\af2\dbch\af31505\loch\f2 verification reduction default = 7 -\par \hich\af2\dbch\af31505\loch\f2 GetNumberOfConsoleInputEvents ->_kbhit -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireB\hich\af2\dbch\af31505\loch\f2 ird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.0 -\par \hich\af2\dbch\af31505\loch\f2 several minor bugs fixed: -\par \hich\af2\dbch\af31505\loch\f2 no longer occasionally displays score of 0.01 -\par \hich\af2\dbch\af31505\loch\f2 no longer drop\hich\af2\dbch\af31505\loch\f2 s a thread after ~16 hours in analysis mode -\par \hich\af2\dbch\af31505\loch\f2 engine now initializes at 128 Mb hash -\par \hich\af2\dbch\af31505\loch\f2 move lists enlarged to accommodate really long games -\par \hich\af2\dbch\af31505\loch\f2 pawn hash set to 32 Mb by default -\par \hich\af2\dbch\af31505\loch\f2 improved time management -\par \hich\af2\dbch\af31505\loch\f2 new UCI options added: -\par \hich\af2\dbch\af31505\loch\f2 Get FEN -\par \hich\af2\dbch\af31505\loch\f2 Analysis (Fritz) Mode -\par \hich\af2\dbch\af31505\loch\f2 Verbose UCI -\par \hich\af2\dbch\af31505\loch\f2 Move on Ponderhit (Never, Sometimes, Always) -\par \hich\af2\dbch\af31505\loch\f2 NMR Smooth Scaling (Null Move Reduction Smooth Scaling) -\par \hich\af2\dbch\af31505\loch\f2 Pawn Value -\par \hich\af2\dbch\af31505\loch\f2 Knight Value -\par \hich\af2\dbch\af31505\loch\f2 Bishop Value -\par \hich\af2\dbch\af31505\loch\f2 Rook Value -\par \hich\af2\dbch\af31505\loch\f2 Queen Value -\par \hich\af2\dbch\af31505\loch\f2 Bishop Pair Value -\par \hich\af2\dbch\af31505\loch\f2 Null Move Verification -\par \hich\af2\dbch\af31505\loch\f2 Verification Reducti\hich\af2\dbch\af31505\loch\f2 on -\par \hich\af2\dbch\af31505\loch\f2 Move on Ponderhit -\par \hich\af2\dbch\af31505\loch\f2 Extra Info -\par \hich\af2\dbch\af31505\loch\f2 UCI options removed: -\par \hich\af2\dbch\af31505\loch\f2 MultiCentiPawnPV -\par \hich\af2\dbch\af31505\loch\f2 RandomCount -\par \hich\af2\dbch\af31505\loch\f2 RandomBits -\par \hich\af2\dbch\af31505\loch\f2 Enhanced Time Management -\par \hich\af2\dbch\af31505\loch\f2 ETM is now used by default -\par \hich\af2\dbch\af31505\loch\f2 CPU Load implemented -\par \hich\af2\dbch\af31505\loch\f2 new and improved SMP routines -\par \hich\af2\dbch\af31505\loch\f2 MultiPV now works in 'game' mode as well as in '\hich\af2\dbch\af31505\loch\f2 Analysis' mode -\par -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 \hich\af2\dbch\af31505\loch\f2 FireBird }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 1.0 beta -\par \hich\af2\dbch\af31505\loch\f2 native Windows SMP threads/multiprocessing -\par \hich\af2\dbch\af31505\loch\f2 code cleanup and formatting -\par \hich\af2\dbch\af31505\loch\f2 Max Threads UCI option -\par \hich\af2\dbch\af31505\loch\f2 get_sys_info function: -\par \hich\af2\dbch\af31505\loch\f2 queries Windows for # CPUs, -\par \hich\af2\dbch\af31505\loch\f2 sets appropriate # threads -\par \hich\af2\dbch\af31505\loch\f2 searchmoves -\par \hich\af2\dbch\af31505\loch\f2 pondering improved -\par \hich\af2\dbch\af31505\loch\f2 several bugfixes -\par \hich\af2\dbch\af31505\loch\f2 SMP code vastly improved -\par \hich\af2\dbch\af31505\loch\f2 auto CPU (Max Thread) detect/config -\par \hich\af2\dbch\af31505\loch\f2 UCI Max Thread configuration option -\par \hich\af2\dbch\af31505\loch\f2 improved prefetch routine -\par \hich\af2\dbch\af31505\loch\f2 improved bitscan routines -\par \hich\af2\dbch\af31505\loch\f2 sparse one POPCNT -\par -\par --------------------------- -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 \hich\af2\dbch\af31505\loch\f2 S\hich\af2\dbch\af31505\loch\f2 tatement \hich\af2\dbch\af31505\loch\f2 by Kranium (Norman Schmidt): -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 my goal with Fire is to combine all the best ideas, features, -\par \hich\af2\dbch\af31505\loch\f2 and strengths from the IppoLit chain of releases: -\par \hich\af2\dbch\af31505\loch\f2 IppoLito, RobboLito, Igorrit, and IvanHoe, into one engine. -\par -\par \hich\af2\dbch\af31505\loch\f2 in addition i have added all the best ideas that Sentinel and i came up -\par \hich\af2\dbch\af31505\loch\f2 with during the development of Robbolito 0.085g3 and 0.09 and previous -\par \hich\af2\dbch\af31505\loch\f2 versions. with enormous beta testing help from the Decembrists and -\par \hich\af2\dbch\af31505\loch\f2 Robbolito comrades, we posted more than a dozen public betas on -\par \hich\af2\dbch\af31505\loch\f2 Immortal223 for testing during the last months of 2009. -\par -\par \hich\af2\dbch\af31505\loch\f2 Fire is based on the IppoLit family of engines, more info here: -\par \hich\af2\dbch\af31505\loch\f2 http\hich\af2\dbch\af31505\loch\f2 ://ippolit.wikispaces.com/ -\par -\par \hich\af2\dbch\af31505\loch\f2 please check: -\par \hich\af2\dbch\af31505\loch\f2 http://www.chesslogik.com/ -\par \hich\af2\dbch\af31505\loch\f2 for new releases, fixes, and updates -\par -\par \hich\af2\dbch\af31505\loch\f2 this chess ship is a truly glorious achievement of the -\par \hich\af2\dbch\af31505\loch\f2 October Revolution and Decembrists movement! -\par -\par \hich\af2\dbch\af31505\loch\f2 Many thanks to Sentinel for his programming work on 1.31 and earlier -\par \hich\af2\dbch\af31505\loch\f2 versions. -\par -\par \hich\af2\dbch\af31505\loch\f2 Best Regards- -\par -\par \hich\af2\dbch\af31505\loch\f2 Norman Schmidt -\par \hich\af2\dbch\af31505\loch\f2 kranium -\par }{\field{\*\fldinst {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 HYPERLINK "mailto:kranium@telenet.be" }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid1250065 {\*\datafield -00d0c9ea79f9bace118c8200aa004ba90b0200000003000000e0c9ea79f9bace118c8200aa004ba90b4c0000006d00610069006c0074006f003a006b00720061006e00690075006d004000740065006c0065006e00650074002e00620065000000795881f43b1d7f48af2c825dc485276300000000a5ab0000}}}{\fldrslt -{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\ul\cf2\insrsid5513045 \hich\af2\dbch\af31505\loch\f2 kranium@telenet.be}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 -\par }{\rtlch\fcs1 \af0\afs24 \ltrch\fcs0 \f0\fs24\insrsid5513045 -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 ---------------------------}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid5513045 -\par }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402\charrsid3023402 \hich\af2\dbch\af31505\loch\f2 Statem}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 \hich\af2\dbch\af31505\loch\f2 ent by Yuri Censor (Dmitri Gusev) -\par -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0\pararsid13785636 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 \hich\af2\dbch\af31505\loch\f2 I have cloned Fire with the intent to resume this -\hich\af2\dbch\af31505\loch\f2 open-source \hich\af2\dbch\af31505\loch\f2 project discont\hich\af2\dbch\af31505\loch\f2 inued\hich\af2\dbch\af31505\loch\f2 by Kranium (Norman Schmidt) after the rel\hich\af2\dbch\af31505\loch\f2 ease of Fire 2 -\hich\af2\dbch\af31505\loch\f2 .2}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid15075939 \hich\af2\dbch\af31505\loch\f2 b}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 \hich\af2\dbch\af31505\loch\f2 xT\hich\af2\dbch\af31505\loch\f2 -reme in July 20\hich\af2\dbch\af31505\loch\f2 11\hich\af2\dbch\af31505\loch\f2 . I b\hich\af2\dbch\af31505\loch\f2 elieve that continuing \hich\af2\dbch\af31505\loch\f2 development of the strong\hich\af2\dbch\af31505\loch\f2 - open-source engine supporting end-game tablebases (EGTB)\hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 will\hich\af2\dbch\af31505\loch\f2 benefit the chess programming co\hich\af2\dbch\af31505\loch\f2 mmunity. If y -\hich\af2\dbch\af31505\loch\f2 ou would like to contribute to the }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid8652154 \hich\af2\dbch\af31505\loch\f2 Firenzina }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 -\hich\af2\dbch\af31505\loch\f2 project }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid13763945 \hich\af2\dbch\af31505\loch\f2 by programming, testing, or simply providing}{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 -\hich\af2\dbch\af31505\loch\f2 feedback, please feel free to contact me at }{\field{\*\fldinst {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 \hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 HYPERLINK -\hich\af2\dbch\af31505\loch\f2 "\hich\af2\dbch\af31505\loch\f2 mailto:\hich\af2\dbch\af31505\loch\f2 d\hich\af2\dbch\af31505\loch\f2 mitri.\hich\af2\dbch\af31505\loch\f2 a.g\hich\af2\dbch\af31505\loch\f2 usev@gmail.com\hich\af2\dbch\af31505\loch\f2 " -\hich\af2\dbch\af31505\loch\f2 }}{\fldrslt {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \cs15\f2\fs20\ul\cf17\insrsid3023402\charrsid6322516 \hich\af2\dbch\af31505\loch\f2 d\hich\af2\dbch\af31505\loch\f2 mitri.\hich\af2\dbch\af31505\loch\f2 a.g -\hich\af2\dbch\af31505\loch\f2 usev@gmail.com}}}\sectd \ltrsect\linex0\sectdefaultcl\sftnbj {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 -\par }\pard \ltrpar\ql \li0\ri0\nowidctlpar\wrapdefault\faauto\rin0\lin0\itap0 {\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402 -\par \hich\af2\dbch\af31505\loch\f2 Best Regards- -\par -\par \hich\af2\dbch\af31505\loch\f2 Yuri Censor (Dmitri Gusev)\hich\af2\dbch\af31505\loch\f2 \hich\af2\dbch\af31505\loch\f2 }{\rtlch\fcs1 \af2\afs20 \ltrch\fcs0 \f2\fs20\insrsid3023402\charrsid3023402 -\par }{\*\themedata 504b030414000600080000002100e9de0fbfff0000001c020000130000005b436f6e74656e745f54797065735d2e786d6cac91cb4ec3301045f748fc83e52d4a -9cb2400825e982c78ec7a27cc0c8992416c9d8b2a755fbf74cd25442a820166c2cd933f79e3be372bd1f07b5c3989ca74aaff2422b24eb1b475da5df374fd9ad -5689811a183c61a50f98f4babebc2837878049899a52a57be670674cb23d8e90721f90a4d2fa3802cb35762680fd800ecd7551dc18eb899138e3c943d7e503b6 -b01d583deee5f99824e290b4ba3f364eac4a430883b3c092d4eca8f946c916422ecab927f52ea42b89a1cd59c254f919b0e85e6535d135a8de20f20b8c12c3b0 -0c895fcf6720192de6bf3b9e89ecdbd6596cbcdd8eb28e7c365ecc4ec1ff1460f53fe813d3cc7f5b7f020000ffff0300504b030414000600080000002100a5d6 -a7e7c0000000360100000b0000005f72656c732f2e72656c73848fcf6ac3300c87ef85bd83d17d51d2c31825762fa590432fa37d00e1287f68221bdb1bebdb4f -c7060abb0884a4eff7a93dfeae8bf9e194e720169aaa06c3e2433fcb68e1763dbf7f82c985a4a725085b787086a37bdbb55fbc50d1a33ccd311ba548b6309512 -0f88d94fbc52ae4264d1c910d24a45db3462247fa791715fd71f989e19e0364cd3f51652d73760ae8fa8c9ffb3c330cc9e4fc17faf2ce545046e37944c69e462 -a1a82fe353bd90a865aad41ed0b5b8f9d6fd010000ffff0300504b0304140006000800000021006b799616830000008a0000001c0000007468656d652f746865 -6d652f7468656d654d616e616765722e786d6c0ccc4d0ac3201040e17da17790d93763bb284562b2cbaebbf600439c1a41c7a0d29fdbd7e5e38337cedf14d59b -4b0d592c9c070d8a65cd2e88b7f07c2ca71ba8da481cc52c6ce1c715e6e97818c9b48d13df49c873517d23d59085adb5dd20d6b52bd521ef2cdd5eb9246a3d8b -4757e8d3f729e245eb2b260a0238fd010000ffff0300504b03041400060008000000210030dd4329a8060000a41b0000160000007468656d652f7468656d652f -7468656d65312e786d6cec594f6fdb3614bf0fd87720746f6327761a07758ad8b19b2d4d1bc46e871e698996d850a240d2497d1bdae38001c3ba618715d86d87 -615b8116d8a5fb34d93a6c1dd0afb0475292c5585e9236d88aad3e2412f9e3fbff1e1fa9abd7eec70c1d1221294fda5efd72cd4324f1794093b0eddd1ef62fad -79482a9c0498f184b4bd2991deb58df7dfbb8ad755446282607d22d771db8b944ad79796a40fc3585ee62949606ecc458c15bc8a702910f808e8c66c69b9565b -5d8a314d3c94e018c8de1a8fa94fd05093f43672e23d06af89927ac06762a049136785c10607758d9053d965021d62d6f6804fc08f86e4bef210c352c144dbab -999fb7b4717509af678b985ab0b6b4ae6f7ed9ba6c4170b06c788a705430adf71bad2b5b057d03606a1ed7ebf5babd7a41cf00b0ef83a6569632cd467faddec9 -699640f6719e76b7d6ac355c7c89feca9cccad4ea7d36c65b258a206641f1b73f8b5da6a6373d9c11b90c537e7f08dce66b7bbeae00dc8e257e7f0fd2badd586 -8b37a088d1e4600ead1ddaef67d40bc898b3ed4af81ac0d76a197c86826828a24bb318f3442d8ab518dfe3a20f000d6458d104a9694ac6d88728eee2782428d6 -0cf03ac1a5193be4cbb921cd0b495fd054b5bd0f530c1931a3f7eaf9f7af9e3f45c70f9e1d3ff8e9f8e1c3e3073f5a42ceaa6d9c84e5552fbffdeccfc71fa33f -9e7ef3f2d117d57859c6fffac327bffcfc793510d26726ce8b2f9ffcf6ecc98baf3efdfdbb4715f04d814765f890c644a29be408edf3181433567125272371be -15c308d3f28acd249438c19a4b05fd9e8a1cf4cd296699771c393ac4b5e01d01e5a30a787d72cf1178108989a2159c77a2d801ee72ce3a5c545a6147f32a9979 -3849c26ae66252c6ed637c58c5bb8b13c7bfbd490a75330f4b47f16e441c31f7184e140e494214d273fc80900aedee52ead87597fa824b3e56e82e451d4c2b4d -32a423279a668bb6690c7e9956e90cfe766cb37b077538abd27a8b1cba48c80acc2a841f12e698f13a9e281c57911ce298950d7e03aba84ac8c154f8655c4f2a -f074481847bd804859b5e696007d4b4edfc150b12addbecba6b18b148a1e54d1bc81392f23b7f84137c2715a851dd0242a633f900710a218ed715505dfe56e86 -e877f0034e16bafb0e258ebb4faf06b769e888340b103d331115bebc4eb813bf83291b63624a0d1475a756c734f9bbc2cd28546ecbe1e20a3794ca175f3fae90 -fb6d2dd99bb07b55e5ccf68942bd0877b23c77b908e8db5f9db7f024d9239010f35bd4bbe2fcae387bfff9e2bc289f2fbe24cfaa301468dd8bd846dbb4ddf1c2 -ae7b4c191ba8292337a469bc25ec3d411f06f53a73e224c5292c8de0516732307070a1c0660d125c7d44553488700a4d7bddd3444299910e254ab984c3a219ae -a4adf1d0f82b7bd46cea4388ad1c12ab5d1ed8e1153d9c9f350a3246aad01c6873462b9ac05999ad5cc988826eafc3acae853a33b7ba11cd1445875ba1b236b1 -399483c90bd560b0b0263435085a21b0f22a9cf9356b38ec6046026d77eba3dc2dc60b17e92219e180643ed27acffba86e9c94c7ca9c225a0f1b0cfae0788ad5 -4adc5a9aec1b703b8b93caec1a0bd8e5de7b132fe5113cf312503b998e2c2927274bd051db6b35979b1ef271daf6c6704e86c73805af4bdd476216c26593af84 -0dfb5393d964f9cc9bad5c313709ea70f561ed3ea7b053075221d51696910d0d339585004b34272bff7213cc7a510a5454a3b349b1b206c1f0af490176745d4b -c663e2abb2b34b23da76f6352ba57ca2881844c1111ab189d8c7e07e1daaa04f40255c77988aa05fe06e4e5bdb4cb9c5394bbaf28d98c1d971ccd20867e556a7 -689ec9166e0a522183792b8907ba55ca6e943bbf2a26e52f48957218ffcf54d1fb09dc3eac04da033e5c0d0b8c74a6b43d2e54c4a10aa511f5fb021a07533b20 -5ae07e17a621a8e082dafc17e450ffb739676998b48643a4daa7211214f623150942f6a02c99e83b85583ddbbb2c4996113211551257a656ec1139246ca86be0 -aadedb3d1441a89b6a929501833b197fee7b9641a3503739e57c732a59b1f7da1cf8a73b1f9bcca0945b874d4393dbbf10b1680f66bbaa5d6f96e77b6f59113d -316bb31a795600b3d256d0cad2fe354538e7566b2bd69cc6cbcd5c38f0e2bcc63058344429dc2121fd07f63f2a7c66bf76e80d75c8f7a1b622f878a18941d840 -545fb28d07d205d20e8ea071b283369834296bdaac75d256cb37eb0bee740bbe278cad253b8bbfcf69eca23973d939b97891c6ce2cecd8da8e2d343578f6648a -c2d0383fc818c798cf64e52f597c740f1cbd05df0c264c49134cf09d4a60e8a107260f20f92d47b374e32f000000ffff0300504b030414000600080000002100 -0dd1909fb60000001b010000270000007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73848f4d0ac2301484f7 -8277086f6fd3ba109126dd88d0add40384e4350d363f2451eced0dae2c082e8761be9969bb979dc9136332de3168aa1a083ae995719ac16db8ec8e4052164e89 -d93b64b060828e6f37ed1567914b284d262452282e3198720e274a939cd08a54f980ae38a38f56e422a3a641c8bbd048f7757da0f19b017cc524bd62107bd500 -1996509affb3fd381a89672f1f165dfe514173d9850528a2c6cce0239baa4c04ca5bbabac4df000000ffff0300504b01022d0014000600080000002100e9de0f -bfff0000001c0200001300000000000000000000000000000000005b436f6e74656e745f54797065735d2e786d6c504b01022d0014000600080000002100a5d6 -a7e7c0000000360100000b00000000000000000000000000300100005f72656c732f2e72656c73504b01022d00140006000800000021006b799616830000008a -0000001c00000000000000000000000000190200007468656d652f7468656d652f7468656d654d616e616765722e786d6c504b01022d00140006000800000021 -0030dd4329a8060000a41b00001600000000000000000000000000d60200007468656d652f7468656d652f7468656d65312e786d6c504b01022d001400060008 -00000021000dd1909fb60000001b0100002700000000000000000000000000b20900007468656d652f7468656d652f5f72656c732f7468656d654d616e616765722e786d6c2e72656c73504b050600000000050005005d010000ad0a00000000} -{\*\colorschememapping 3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d225554462d3822207374616e64616c6f6e653d22796573223f3e0d0a3c613a636c724d -617020786d6c6e733a613d22687474703a2f2f736368656d61732e6f70656e786d6c666f726d6174732e6f72672f64726177696e676d6c2f323030362f6d6169 -6e22206267313d226c743122207478313d22646b3122206267323d226c743222207478323d22646b322220616363656e74313d22616363656e74312220616363 -656e74323d22616363656e74322220616363656e74333d22616363656e74332220616363656e74343d22616363656e74342220616363656e74353d22616363656e74352220616363656e74363d22616363656e74362220686c696e6b3d22686c696e6b2220666f6c486c696e6b3d22666f6c486c696e6b222f3e} -{\*\latentstyles\lsdstimax267\lsdlockeddef0\lsdsemihiddendef1\lsdunhideuseddef1\lsdqformatdef0\lsdprioritydef99{\lsdlockedexcept \lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority0 \lsdlocked0 Normal; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority9 \lsdlocked0 heading 1;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 2;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 3;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 4; -\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 5;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 6;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 7;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 8;\lsdqformat1 \lsdpriority9 \lsdlocked0 heading 9; -\lsdpriority39 \lsdlocked0 toc 1;\lsdpriority39 \lsdlocked0 toc 2;\lsdpriority39 \lsdlocked0 toc 3;\lsdpriority39 \lsdlocked0 toc 4;\lsdpriority39 \lsdlocked0 toc 5;\lsdpriority39 \lsdlocked0 toc 6;\lsdpriority39 \lsdlocked0 toc 7; -\lsdpriority39 \lsdlocked0 toc 8;\lsdpriority39 \lsdlocked0 toc 9;\lsdqformat1 \lsdpriority35 \lsdlocked0 caption;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority10 \lsdlocked0 Title;\lsdpriority1 \lsdlocked0 Default Paragraph Font; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority11 \lsdlocked0 Subtitle;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority22 \lsdlocked0 Strong;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority20 \lsdlocked0 Emphasis; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority59 \lsdlocked0 Table Grid;\lsdunhideused0 \lsdlocked0 Placeholder Text;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority1 \lsdlocked0 No Spacing; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 1;\lsdunhideused0 \lsdlocked0 Revision; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority34 \lsdlocked0 List Paragraph;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority29 \lsdlocked0 Quote;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority30 \lsdlocked0 Intense Quote; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 1; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 1;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 2; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 2;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 3;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 3; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 4; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 4;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 5; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 5;\lsdsemihidden0 \lsdunhideused0 \lsdpriority60 \lsdlocked0 Light Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority61 \lsdlocked0 Light List Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority62 \lsdlocked0 Light Grid Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority63 \lsdlocked0 Medium Shading 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority64 \lsdlocked0 Medium Shading 2 Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority65 \lsdlocked0 Medium List 1 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority66 \lsdlocked0 Medium List 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority67 \lsdlocked0 Medium Grid 1 Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority68 \lsdlocked0 Medium Grid 2 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority69 \lsdlocked0 Medium Grid 3 Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority70 \lsdlocked0 Dark List Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdpriority71 \lsdlocked0 Colorful Shading Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority72 \lsdlocked0 Colorful List Accent 6;\lsdsemihidden0 \lsdunhideused0 \lsdpriority73 \lsdlocked0 Colorful Grid Accent 6; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority19 \lsdlocked0 Subtle Emphasis;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority21 \lsdlocked0 Intense Emphasis; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority31 \lsdlocked0 Subtle Reference;\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority32 \lsdlocked0 Intense Reference; -\lsdsemihidden0 \lsdunhideused0 \lsdqformat1 \lsdpriority33 \lsdlocked0 Book Title;\lsdpriority37 \lsdlocked0 Bibliography;\lsdqformat1 \lsdpriority39 \lsdlocked0 TOC Heading;}}{\*\datastore 010500000200000018000000 -4d73786d6c322e534158584d4c5265616465722e362e3000000000000000000000060000 -d0cf11e0a1b11ae1000000000000000000000000000000003e000300feff090006000000000000000000000001000000010000000000000000100000feffffff00000000feffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -fffffffffffffffffdfffffffeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff -ffffffffffffffffffffffffffffffff52006f006f007400200045006e00740072007900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000016000500ffffffffffffffffffffffff0c6ad98892f1d411a65f0040963251e500000000000000000000000000c1 -dcb27b13ce01feffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000 -00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000 -000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffff000000000000000000000000000000000000000000000000 -0000000000000000000000000000000000000000000000000105000000000000}} \ No newline at end of file diff --git a/Firenzina/SEE.c b/Firenzina/SEE.c deleted file mode 100644 index e67fe7f..0000000 --- a/Firenzina/SEE.c +++ /dev/null @@ -1,230 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef SEE -#define SEE -#include "fire.h" - -static int Value[16] = - { - 0, 100, 320, 12345678, 330, 330, 510, 1000, - 0, 100, 320, 12345678, 330, 330, 510, 1000 - }; - -void SetValueArray() - { - Value[0] = Value[8] = 0; - Value[1] = Value[9] = PValue; - Value[2] = Value[10] = NValue; - Value[3] = Value[11] = 12345678; - Value[4] = Value[12] = BValue; - Value[5] = Value[13] = BValue; - Value[6]= Value[14] = RValue; - Value[7] = Value[15] = QValue; - } - -#include "SEE.c" -#include "white.h" -#else -#include "black.h" -#endif - -bool MySEE(typePos *Position, uint32 move) - { - int fr, to, PieceValue, CaptureValue, d, dir; - uint64 bit, cbf, mask, TableIndex[4], gcm = 0, T; - int b, w; - T = MyXray & OppOccupied; - fr = From(move); - to = To(move); - while (T) - { - b = BSF(T); - w = MyXrayTable[b]; - BitClear(b, T); - if (fr != w && Line(to, b) != Line(b, OppKingSq)) - gcm |= SqSet[b]; - } - gcm = ~gcm; - PieceValue = Value[Position->sq[fr]]; - CaptureValue = Value[Position->sq[to]]; - if (PieceValue - CaptureValue > PValue && OppAttackedPawns[to] & BitboardOppP & gcm) - return false; - bit = (BitboardMyN | (BitboardOppN & gcm)) & AttN[to]; - d = PieceValue - CaptureValue; - if (d > NValue && BitboardOppN & bit) - return false; - mask = BitboardMyQ | BitboardMyB | ((BitboardOppQ | BitboardOppB) & gcm); - mask &= Diag[to]; - TableIndex[Direction_h1a8] = TableIndex[Direction_a1h8] = mask; - bit |= AttB(to) & mask; - if (d > BValue && (BitboardOppB & bit)) - return false; - mask = BitboardMyQ | BitboardMyR | ((BitboardOppQ | BitboardOppR) & gcm); - mask &= Ortho[to]; - TableIndex[Direction_horz] = TableIndex[Direction_vert] = mask; - bit |= AttR(to) & mask; - bit |= (BitboardMyK | BitboardOppK) & AttK[to]; - bit |= BitboardOppP & OppAttackedPawns[to] & gcm; - bit |= BitboardMyP & MyAttackedPawns[to]; - cbf = ~(SqSet[fr] | SqSet[to]); - bit &= cbf; - dir = Line(fr, to); - if (dir == Direction_h1a8 || dir == Direction_a1h8) - bit |= AttB(fr) & TableIndex[dir] & cbf; - if (dir == Direction_horz || dir == Direction_vert) - bit |= AttR(fr) & TableIndex[dir] & cbf; - CaptureValue -= PieceValue; - do - { - cbf &= ~bit; - mask = BitboardOppP & bit; - if (mask) - { - bit ^= (~(mask - 1)) & mask; - PieceValue = PValue; - } - else - { - mask = BitboardOppN & bit; - if (mask) - { - bit ^= (~(mask - 1)) & mask; - PieceValue = NValue; - } - else - { - mask = BitboardOppB & bit; - if (mask) - { - PieceValue = BValue; - fr = BSF(mask); - mask = AttB(fr) & cbf & TableIndex[Direction_a1h8]; - bit = mask | (SqClear[fr] & bit); - } - else - { - mask = BitboardOppR & bit; - if (mask) - { - PieceValue = RValue; - fr = BSF(mask); - mask = AttR(fr) & cbf & TableIndex[Direction_horz]; - bit = mask | (SqClear[fr] & bit); - } - else - { - mask = BitboardOppQ & bit; - if (mask) - { - PieceValue = QValue; - fr = BSF(mask); - if (Rank(fr) == Rank(to) || File(fr) == File(to)) - mask = AttR(fr) & cbf & TableIndex[Direction_horz]; - else - mask = AttB(fr) & cbf & TableIndex[Direction_a1h8]; - bit = mask | (SqClear[fr] & bit); - } - else - { - if (!(BitboardOppK & bit)) - return true; - PieceValue = 12345; - } - } - } - } - } - CaptureValue += PieceValue; - if (CaptureValue < -60) - return false; - mask = BitboardMyP & bit; - if (mask) - { - bit ^= (~(mask - 1)) & mask; - PieceValue = PValue; - } - else - { - mask = BitboardMyN & bit; - if (mask) - { - bit ^= (~(mask - 1)) & mask; - PieceValue = NValue; - } - else - { - mask = BitboardMyB & bit; - if (mask) - { - PieceValue = BValue; - fr = BSF(mask); - mask = AttB(fr) & cbf & TableIndex[Direction_a1h8]; - bit = mask | (SqClear[fr] & bit); - } - else - { - mask = BitboardMyR & bit; - if (mask) - { - PieceValue = RValue; - fr = BSF(mask); - mask = AttR(fr) & cbf & TableIndex[Direction_horz]; - bit = mask | (SqClear[fr] & bit); - } - else - { - mask = BitboardMyQ & bit; - if (mask) - { - PieceValue = QValue; - fr = BSF(mask); - if (Rank(fr) == Rank(to) || File(fr) == File(to)) - mask = AttR(fr) & cbf & TableIndex[Direction_horz]; - else - mask = AttB(fr) & cbf & TableIndex[Direction_a1h8]; - bit = mask | (SqClear[fr] & bit); - } - else - { - if (!(BitboardMyK & bit)) - return false; - if (CaptureValue > 6174) - return true; - PieceValue = 23456; - } - } - } - } - } - CaptureValue -= PieceValue; - } while (CaptureValue < -60); - return true; - } \ No newline at end of file diff --git a/Firenzina/SMP.c b/Firenzina/SMP.c deleted file mode 100644 index f4b4e55..0000000 --- a/Firenzina/SMP.c +++ /dev/null @@ -1,398 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#define DoLocked(x) { Lock (SMP); (x); UnLock (SMP); } -#define MaxSplit 8 -#include -volatile uint64 SMPFree; -typePos -* volatile Working[MaxCPUs]; -void StubIvan() - { - typePos *RP00; - int h, cpu, rp, sp; - int volatile x; - RP00 = &RootPosition[0][0]; - RP00->used = true; - RP00->stop = false; - memcpy(RP00, RootPosition0, NumBytesToCopy); - memcpy(RP00->DynRoot, RootPosition0->DynRoot, (sizeof(typeDynamic) << 1)); - RP00->Dyn = RP00->DynRoot + 1; - h = RootPosition0->StackHeight; - memcpy(RP00->Stack, RootPosition0->Stack, h * sizeof(uint64)); - RP00->StackHeight = h; - RP00->ChildCount = 0; - RP00->parent = NULL; - for (cpu = 0; cpu < NumThreads; cpu++) - RP00->children[cpu] = NULL; - IvanAllHalt = false; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - { - RootPosition[cpu][rp].used = false; - RootPosition[cpu][rp].stop = false; - RootPosition[cpu][rp].nodes = 0; - -#ifdef RobboBases - if (UseRobboBases) - RootPosition[cpu][rp].tbhits = 0; -#endif - - } - RootPosition[0][0].used = true; - for (sp = 0; sp < MaxSP; sp++) - RootSP[sp].active = false; - for (cpu = 0; cpu < NumThreads; cpu++) - Working[cpu] = NULL; - NullParent->ChildCount = 123; - RP00->SplitPoint = NULL; - Working[0] = RP00; - SMPisActive = true; - SignalForLock(*Wakeup_IO, *Wakeup_Lock_IO); - for (x = 0; x < 10000; x++); - SearchIsDone = true; - while (!IOAwake) - { - SignalForLock(*Wakeup_IO, *Wakeup_Lock_IO); - NanoSleep(1000000); - } - SearchIsDone = false; - } -static void SMPGoodHistory(typePos *Pos, uint32 m, SplitPoint *sp) - { - int sv = HistoryValue(Pos, m); - HistoryValue(Pos, m) = sv +(((0xff00 - sv) * sp->depth) >> 8); - } -void FailHigh(SplitPoint *sp, typePos *Position, uint32 m) - { - int cpu; - Lock(sp->splock); - if (sp->tot || Position->stop) - { - UnLock(sp->splock); - return; - } - sp->tot = true; - sp->move = m; - sp->value = sp->beta; - UnLock(sp->splock); - if (Position->sq[To(m)] == 0 && MoveHistory(m)) - SMPGoodHistory(Position, m, sp); - if (sp->node_type == NodeTypeAll) - HashLowerAll(Position, m, sp->depth, sp->beta); - else - HashLower(Position->Dyn->Hash, m, sp->depth, sp->beta); - Lock(SMP); - Lock(Position->parent->padlock); - if (!Position->stop) - { - for (cpu = 0; cpu < NumThreads; cpu++) - if (Position->parent->children[cpu] && cpu != Position->cpu) - ThreadHalt(Position->parent->children[cpu]); - } - UnLock(Position->parent->padlock); - UnLock(SMP); - } -static INLINE void SMPBadHistory(typePos *Position, uint32 m, SplitPoint *sp) - { - if ((Position->Dyn + 1)->cp == 0 && MoveHistory(m)) - { - int sv = HistoryValue(Position, m); - if (Position->Dyn->Value > sp->alpha - 50) - HistoryValue(Position, m) = sv -((sv * sp->depth) >> 8); - } - } -static void SearchCutNode(typePos *Position) - { - SplitPoint *sp; - sp = Position->SplitPoint; - Lock(sp->splock); - sp->childs++; - UnLock(sp->splock); - Position->wtm ? WhiteCutSMP(Position) : BlackCutSMP(Position); - Lock(sp->splock); - sp->childs--; - if (!sp->tot && !sp->childs && !Position->stop) - HashUpperCut(Position, sp->depth, sp->value); - UnLock(sp->splock); - } -static void SearchAllNode(typePos *Position) - { - SplitPoint *sp; - sp = Position->SplitPoint; - Lock(sp->splock); - sp->childs++; - UnLock(sp->splock); - Position->wtm ? WhiteAllSMP(Position) : BlackAllSMP(Position); - Lock(sp->splock); - sp->childs--; - if (!sp->tot && !sp->childs && !Position->stop) - HashUpper(Position->Dyn->Hash, sp->depth, sp->value); - UnLock(sp->splock); - } -void search(typePos *Position) - { - SplitPoint *sp; - sp = Position->SplitPoint; - if (sp->node_type == NodeTypeAll) - { - SearchAllNode(Position); - return; - } - if (sp->node_type == NodeTypeCut) - { - SearchCutNode(Position); - return; - } - Lock(sp->splock); - sp->childs++; - UnLock(sp->splock); - Position->wtm ? WhitePVNodeSMP(Position) : BlackPVNodeSMP(Position); - Lock(sp->splock); - sp->childs--; - if (!sp->tot && !sp->childs && !Position->stop) - { - uint32 m = sp->good_move; - if (m) - { - HashExact(Position, m, sp->depth, sp->value, FlagExact); - if (Position->sq[To(m)] == 0 && MoveHistory(m)) - SMPGoodHistory(Position, m, sp); - } - else - HashUpper(Position->Dyn->Hash, sp->depth, sp->value); - } - UnLock(sp->splock); - } -static void CopyFromChild(typePos *Parent, typePos *Child) - { - if (Child->SplitPoint->value >= Child->SplitPoint->beta) - Parent->Dyn->move = Child->SplitPoint->move; - else - Parent->Dyn->move = 0; - } -void ThreadStall(typePos *Parent, int cpu) - { - typePos *W; - while (true) - { - DoLocked(SMPFree |= (1 << cpu)); - while (!Working[cpu] && Parent->ChildCount) - { - if (Die[cpu]) - return; -#ifdef WINDOWS - WaitForLock(PThreadCondWait[cpu], PThreadCondMutex[cpu]); -#else - Lock(&PThreadCondMutex[cpu]); - if (Working[cpu] || !Parent->ChildCount) - { - UnLock(&PThreadCondMutex[cpu]); - break; // doble wakeup ? - } - Wait(&PThreadCondWait[cpu], &PThreadCondMutex[cpu]); - UnLock(&PThreadCondMutex[cpu]); -#endif - if (Die[cpu]) - return; - } - Lock(SMP); - SMPFree &= ~(1 << cpu); - W = Working[cpu]; - if (!W && Parent != NullParent && !Parent->ChildCount) - { - Working[cpu] = Parent; - UnLock(SMP); - return; - } - UnLock(SMP); - if (!W) - continue; - search(W); - Lock(SMP); - Lock(W->parent->padlock); - CopyFromChild(W->parent, W); - W->parent->ChildCount--; - if (W->parent->ChildCount == 0) - { - int icpu = W->parent->cpu; - SignalForLock(PThreadCondWait[icpu], PThreadCondMutex[icpu]); - } - W->parent->children[cpu] = NULL; - UnLock(W->parent->padlock); - Working[cpu] = NULL; - W->used = false; - UnLock(SMP); - } - } -static void ThreadHalt(typePos *Pos) - { - int n; - Lock(Pos->padlock); - Pos->stop = true; - for (n = 0; n < NumThreads; n++) - { - if (Pos->children[n] != NULL) - ThreadHalt(Pos->children[n]); - } - UnLock(Pos->padlock); - } -static typePos *GetPosition(int cpu) - { - int u; - for (u = 0; u < RPperCPU; u++) - if (!RootPosition[cpu][u].used) - break; - if (u == RPperCPU) - return NULL; - RootPosition[cpu][u].used = true; - RootPosition[cpu][u].stop = false; - return &RootPosition[cpu][u]; - } -static void CopyPosition(typePos *Child, typePos *Parent) - { - int h; - memcpy(Child, Parent, NumBytesToCopy); - memcpy(Child->DynRoot, Parent->Dyn - 1, (sizeof(typeDynamic) << 1)); - Child->Dyn = Child->DynRoot + 1; - h = Parent->StackHeight; - memcpy(Child->Stack, Parent->Stack, h * sizeof(uint64)); - Child->StackHeight = h; - } -static typePos *CopyToChild(int icpu, typePos *Parent) - { - typePos *Child; - int cpu; - Child = GetPosition(icpu); - if (!Child) - return NULL; - for (cpu = 0; cpu < NumThreads; cpu++) - Child->children[cpu] = NULL; - CopyPosition(Child, Parent); - return Child; - } -static void EndSplitpoint(SplitPoint *sp) - { - sp->active = false; - } -static SplitPoint *new_splitpoint() - { - int sp; - for (sp = 0; sp < MaxSP; sp++) - if (!RootSP[sp].active) - return &RootSP[sp]; - return NULL; - } -bool IvanSplit(typePos *Position, typeNext *NextMove, int depth, int beta, int alpha, int NodeType, int * r) - { - int cpu; - int split; - typePos *Child; - SplitPoint *sp; - Lock(SMP); - for (cpu = 0; cpu < NumThreads; cpu++) - if (!Working[cpu]) - break; - if (Position->stop || cpu == NumThreads) - { - UnLock(SMP); - return false; - } - Working[Position->cpu] = NULL; - Position->ChildCount = 0; - sp = new_splitpoint(); - if (sp == NULL) - { - Working[Position->cpu] = Position; - UnLock(SMP); - return false; - } - Lock(sp->splock); - sp->alpha = alpha; - sp->beta = beta; - sp->depth = depth; - sp->node_type = NodeType; - if (NodeType != NodeTypePV) - sp->value = sp->beta - 1; - else - sp->value = sp->alpha; - sp->move = MoveNone; - sp->good_move = MoveNone; - sp->childs = 0; - sp->MovePick = NextMove; - sp->tot = false; - sp->active = true; - UnLock(sp->splock); - split = 0; - for (cpu = 0; cpu < NumThreads && split < MaxSplit; cpu++) - { - Position->children[cpu] = NULL; - if (Working[cpu] == NULL) - { - Child = CopyToChild(cpu, Position); - if (!Child) - continue; - split++; - Position->children[cpu] = Child; - Child->cpu = cpu; - Child->parent = Position; - Child->stop = false; - Child->SplitPoint = sp; - Position->ChildCount++; - } - } - if (split == 0) - { - Working[Position->cpu] = Position; - Lock(sp->splock); - EndSplitpoint(sp); - UnLock(sp->splock); - UnLock(SMP); - return false; - } - for (cpu = 0; cpu < NumThreads; cpu++) - { - if (Position->children[cpu]) - { - Working[cpu] = Position->children[cpu]; - SignalForLock(PThreadCondWait[cpu], PThreadCondMutex[cpu]); - } - } - UnLock(SMP); - ThreadStall(Position, Position->cpu); - Lock(SMP); - Lock(sp->splock); - * r = sp->value; - EndSplitpoint(sp); - UnLock(sp->splock); - UnLock(SMP); - return true; - } diff --git a/Firenzina/SMP.h b/Firenzina/SMP.h deleted file mode 100644 index fc386c2..0000000 --- a/Firenzina/SMP.h +++ /dev/null @@ -1,65 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -MutexType PThreadCondMutex[MaxCPUs]; -MutexType Wakeup_Lock_IO[1]; -MutexType SMP[1]; -CondType PThreadCondWait[MaxCPUs]; -CondType Wakeup_IO[1]; -bool volatile Die[MaxCPUs]; -bool volatile SMPisActive; -bool volatile IvanAllHalt; -bool volatile IOAwake; -bool volatile InfiniteLoop; -bool volatile SearchIsDone; -bool volatile StallMode; -int volatile NumThreads; -typedef struct - { - int alpha; - int beta; - int depth; - int node_type; - int value; - uint32 move; - uint32 good_move; - uint32 childs; - typeNext *MovePick; - bool tot; - bool active; - MutexType splock[1]; - } SplitPoint; -SplitPoint RootSP[MaxSP]; -volatile uint64 SMPFree; -#define NodeTypePV 1 -#define NodeTypeAll 2 -#define NodeTypeCut 3 -#include - diff --git a/Firenzina/SMP_init.c b/Firenzina/SMP_init.c deleted file mode 100644 index f171e63..0000000 --- a/Firenzina/SMP_init.c +++ /dev/null @@ -1,240 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#define DoLocked(x) { Lock (SMP); (x); UnLock (SMP); } -#define MaxSplit 8 - -void NanoSleep(int x) - { -#ifdef WINDOWS - Sleep(x / 1000000); -#else - struct timespec TS[1]; - TS->tv_sec = 0; - TS->tv_nsec = x; - nanosleep(TS, NULL); -#endif - } -typedef struct - { - int cpu; - } t_args; -t_args ARGS[MaxCPUs]; -volatile int init_threads; -volatile int io_init; -typePos* volatile Working[MaxCPUs]; -void ThreadStall(typePos *, int); -static bool SMPInit = false; -static int CurrCPUS = 0; -static bool volatile Destroy, Destroyed; - -void EndSMP() - { - int cpu, rp, sp; - IvanAllHalt = true; - while (true) - { - for (cpu = 0; cpu < NumThreads; cpu++) - SignalForLock(PThreadCondWait[cpu], PThreadCondMutex[cpu]); - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - RootPosition[cpu][rp].stop = true; - Lock(SMP); - if (!SMPisActive) - break; - UnLock(SMP); - } - UnLock(SMP); - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - RootPosition[cpu][rp].used = false; - for (sp = 0; sp < MaxSP; sp++) - RootSP[sp].active = false; - } -IvanThread(A) - { - t_args *B; - B = (t_args *)A; - DoLocked(init_threads++); - ThreadStall(NullParent, B->cpu); - return(VoidStarType)NULL; - } -IOThread(A) - { - while (true) - { - IOAwake = false; - StallMode = true; - -#ifdef RobboBases - if (UseRobboBases) - OfftoneTripleSMP(); -#endif - - while (!SearchIsDone) - NanoSleep(1000000); - StallMode = false; - io_init = true; - SuppressInput = false; - WaitAgain: - WaitForLock(*Wakeup_IO, *Wakeup_Lock_IO); - if (Destroy) - break; - if (!SMPisActive) - goto WaitAgain; - IOAwake = true; - while (SMPisActive) - { - StallMode = true; - NanoSleep(1000000); - if (SMPisActive) - CheckDone(RootPosition0, 0); -#ifdef RobboBases - if (UseRobboBases) - { - if (LoadOnWeakProbe) - while (SMPisActive && SubsumeTripleSMP()) - CheckDone(RootPosition0, 0); - } -#endif - - } - } - Destroyed = true; - return(VoidStarType)NULL; - } -static void SMPCleanup() - { - int cpu; - for (cpu = 0; cpu < CurrCPUS; cpu++) - { -#ifndef WINDOWS - LockDestroy(&PThreadCondMutex[cpu]); -#endif - if (cpu > 0) - { - Die[cpu] = true; - SignalForLock(PThreadCondWait[cpu], PThreadCondMutex[cpu]); - PThreadJoin(PThread[cpu]); - Die[cpu] = false; - } -#ifndef WINDOWS - LockInit(&PThreadCondMutex[cpu]); -#endif - } - Destroy = true; - Destroyed = false; - SignalForLock(*Wakeup_IO, *Wakeup_Lock_IO); - while (!Destroyed) { } - { - } -#ifndef WINDOWS - LockDestroy(Wakeup_Lock_IO); -#endif - Destroyed = false; - } -int InitSMP() - { - int cpu, rp, sp; - GetSysInfo(); - Destroy = false; - if (CurrCPUS) - SMPCleanup(); - Destroy = false; - IvanAllHalt = false; - CondInit(*Wakeup_IO, *Wakeup_Lock_IO); - SMPFree = 0; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - { - RootPosition[cpu][rp].used = false; - RootPosition[cpu][rp].nodes = 0; - -#ifdef RobboBases - if (UseRobboBases) - RootPosition[cpu][rp].tbhits = 0; -#endif - - } - for (sp = 0; sp < MaxSP; sp++) - RootSP[sp].active = false; - for (cpu = 0; cpu < NumThreads; cpu++) - Working[cpu] = NULL; - for (cpu = 0; cpu < NumThreads; cpu++) - Die[cpu] = false; - NullParent->ChildCount = 123; - io_init = false; - PThreadCreate(&PThreadIO, NULL, io_thread, NULL); - init_threads = 1; - for (cpu = 1; cpu < NumThreads; cpu++) - { - ARGS[cpu].cpu = cpu; - PThreadCreate(&PThread[cpu], NULL, SMPThread, &ARGS[cpu]); - } - while (init_threads < NumThreads || !io_init) - NanoSleep(1000000); - CurrCPUS = NumThreads; - NanoSleep(1000000); - return NumThreads; - } -static void SPInit() - { - int sp; - for (sp = 0; sp < MaxSP; sp++) - { - RootSP[sp].active = false; - LockInit(RootSP[sp].splock); - } - } -void RPinit() - { - int cpu; - int rp; - if (SMPInit) - return; - LockInit(SMP); - for (cpu = 0; cpu < MaxCPUs; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - { - memset((void *) &RootPosition[cpu][rp], 0, sizeof(typePos)); - RootPosition[cpu][rp].DynRoot = malloc(MaxPly * sizeof(typeDynamic)); - RootPosition[cpu][rp].used = false; - RootPosition[cpu][rp].parent = NULL; - RootPosition[cpu][rp].Dyn = RootPosition[cpu][rp].DynRoot; - RootPosition[cpu][rp].cpu = cpu; - RootPosition[cpu][rp].rp = rp; - LockInit(RootPosition[cpu][rp].padlock); - } - for (cpu = 0; cpu < MaxCPUs; cpu++) - CondInit(PThreadCondWait[cpu], PThreadCondMutex[cpu]); - SPInit(); - SMPInit = true; - } diff --git a/Firenzina/SMP_search.c b/Firenzina/SMP_search.c deleted file mode 100644 index e3731c2..0000000 --- a/Firenzina/SMP_search.c +++ /dev/null @@ -1,283 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef SMPSearch -#define SMPSearch -#include "fire.h" -static INLINE void SMPBadHistory(typePos *Pos, uint32 m, SplitPoint *sp) - { - if ((Pos->Dyn + 1)->cp == 0 && MoveHistory(m)) - { - int sv = HistoryValue(Pos, m); - if (Pos->Dyn->Value > sp->alpha - 50) - HistoryValue(Pos, m) = sv - ((sv * sp->depth) >> 8); - } - } -#include "SMP_search.c" -#include "white.h" -#else -#include "black.h" -#endif - -void MyPVNodeSMP(typePos *Position) - { - int v; - int alpha; - int beta; - int m; - typeNext *NextMove; - SplitPoint *sp; - int extend; - int to; - int new_depth; - sp = Position->SplitPoint; - while (true) - { - Lock(sp->splock); - beta = sp->beta; - alpha = sp->alpha; - if (sp->tot) - { - UnLock(sp->splock); - return; - } - NextMove = sp->MovePick; - m = MyNext(Position, NextMove); - if (!m) - { - NextMove->phase = Fase0; - UnLock(sp->splock); - return; - } - UnLock(sp->splock); - Make(Position, m); - Eval(Position, -0x7fff0000, 0x7fff0000, m, sp->depth); - if (MyKingCheck) - { - Undo(Position, m); - continue; - } - extend = 0; - to = To(m); - if (PassedPawnPush(to, SixthRank(to))) - extend = 2; - else - { - if (Position->Dyn->cp != 0 || OppKingCheck != 0) - extend = 1; - else if (PassedPawnPush(to, FourthRank(to))) - extend = 1; - } - - new_depth = sp->depth - 2 + extend; - - if (OppKingCheck) - v = -OppCutCheck(Position, -alpha, new_depth); - else - v = -OppCut(Position, -alpha, new_depth); - if (v <= alpha) - { - Undo(Position, m); - if (Position->stop) - return; - SMPBadHistory(Position, m, sp); - continue; - } - if (!sp->tot && !Position->stop) - { - bool b = (OppKingCheck != 0); - v = -OppPV(Position, -beta, -alpha, new_depth, b); - Undo(Position, m); - if (Position->stop) - return; - if (v > alpha) - { - Lock(sp->splock); - if (v > sp->alpha) - { - sp->alpha = v; - sp->value = v; - sp->good_move = m; - } - UnLock(sp->splock); - HashLower(Position->Dyn->Hash, m, sp->depth, v); - } - } - else - Undo(Position, m); - if (Position->stop) - return; - if (v >= beta) - { - FailHigh(sp, Position, m); - return; - } - } - } -void MyAllSMP(typePos *Position) - { - int v; - int m; - typeNext *NextMove; - SplitPoint *sp; - int scout, depth, ph, c; - sp = Position->SplitPoint; - scout = sp->beta; - depth = sp->depth; - while (true) - { - Lock(sp->splock); - if (sp->tot) - { - UnLock(sp->splock); - return; - } - NextMove = sp->MovePick; - m = MyNext(Position, NextMove) & 0x7fff; - ph = NextMove->phase; - c = NextMove->move; - if (!m) - { - NextMove->phase = Fase0; - UnLock(sp->splock); - return; - } - UnLock(sp->splock); - if (m == NextMove->exclude) - continue; - Make(Position, m); - Eval(Position, -0x7fff0000, 0x7fff0000, m, depth); - if (MyKingCheck) - { - Undo(Position, m); - continue; - } - m &= 0x7fff; - if (OppKingCheck) - { - v = -OppCutCheck(Position, 1 - scout, depth - 1); - } - else - { - int to = To(m); - int extend = 0; - if (PassedPawnPush(to, SixthRank(to))) - extend = 1; - if (ph == Ordinary_Moves && !extend) - { - int Reduction = 2 + BSR(2 + c); - int NewDepth = MAX(8, depth - Reduction); - v = -OppCut(Position, 1 - scout, NewDepth); - if (v < scout) - goto I; - } - v = -OppCut(Position, 1 - scout, depth - 2 + extend); - } - I: - Undo(Position, m); - if (Position->stop) - return; - if (v >= scout) - { - FailHigh(sp, Position, m); - return; - } - SMPBadHistory(Position, m, sp); - } - } -void MyCutSMP(typePos *Position) - { - int v; - int m; - typeNext *NextMove; - SplitPoint *sp; - int scout, depth, ph, c; - sp = Position->SplitPoint; - scout = sp->beta; - depth = sp->depth; - while (true) - { - Lock(sp->splock); - if (sp->tot) - { - UnLock(sp->splock); - return; - } - NextMove = sp->MovePick; - m = MyNext(Position, NextMove); - ph = NextMove->phase; - c = NextMove->move; - if (!m) - { - NextMove->phase = Fase0; - UnLock(sp->splock); - return; - } - UnLock(sp->splock); - Make(Position, m); - Eval(Position, -0x7fff0000, 0x7fff0000, m, depth); - if (MyKingCheck) - { - Undo(Position, m); - continue; - } - m &= 0x7fff; - if (OppKingCheck) - { - v = -OppAllCheck(Position, 1 - scout, depth - 1); - } - else - { - int to = To(m); - int extend = 0; - if (PassedPawnPush(to, SixthRank(to))) - extend = 1; - if (ph == Ordinary_Moves && !extend) - { - int Reduction = 4 + BSR(5 + c); - int NewDepth = MAX(8, depth - Reduction); - v = -OppAll(Position, 1 - scout, NewDepth); - if (v < scout) - goto I; - } - v = -OppAll(Position, 1 - scout, depth - 2 + extend); - } - I: - Undo(Position, m); - if (Position->stop) - return; - if (v >= scout) - { - FailHigh(sp, Position, m); - return; - } - SMPBadHistory(Position, m, sp); - } - } \ No newline at end of file diff --git a/Firenzina/all_node.c b/Firenzina/all_node.c deleted file mode 100644 index 40dbf7c..0000000 --- a/Firenzina/all_node.c +++ /dev/null @@ -1,418 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef all_node -#define all_node -#include "fire.h" -#include "history.h" -#include "null_move.h" -#include "all_node.c" -#include "white.h" -#else -#include "black.h" -#endif - -int MyAll(typePos *Position, int value, int depth) - { - int move, i; - TransDeclare(); - int trans_depth, move_depth = 0, trans_move = 0, Value, cnt; - int v, extend, new_depth, move_is_check; - typeNext NextMove[1]; - typeDynamic *Pos0 = Position->Dyn; - uint64 zob = Position->Dyn->Hash; - int to, fr; - bool Split; - - CheckForMate (value); - - (Pos0 + 1)->move = 0; - CheckRepetition(false); - Trans = HashPointer(zob); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (zob >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return 0; - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - (Pos0 + 1)->move = trans_move = move; - } - trans_depth = MAX(trans->DepthLower, trans->DepthUpper); - if (trans->DepthLower >= depth) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - { - if (MyNull || move) - { - UpdateAge(); - return(Value); - } - } - } - if (trans->DepthUpper >= depth) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - { - if (!((trans->flags & FlagCut) == FlagCut)) - { - UpdateAge(); - return(Value); - } - } - } - } - } - NextMove->trans_move = trans_move; - if (Pos0->Value >= value && MyNull) - { - new_depth = depth - NullReduction; - new_depth -= ScoreReduction(Pos0->Value - value); - new_depth += KingDangerAdjust(Pos0->wKdanger, Pos0->bKdanger); - v = value; - if (v >= value) - { - MakeNull(Position); - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - UndoNull(Position); - CheckHalt(); - } - if (VerifyNull && v >= value) - { - int Flags = Position->Dyn->flags; - Position->Dyn->flags &= ~3; - new_depth -= VerifyReduction; - if (QSearchCondition) - v = MyQsearch(Position, value, 0); - else if (LowDepthCondition) - v = MyLowDepth(Position, value, new_depth); - else - v = MyAll(Position, value, new_depth); - Position->Dyn->flags = Flags; - CheckHalt(); - } - if (v >= value) - { - if (trans_move == 0) - HashLowerAll(Position, 0, depth, v); - return(v); - } - } - cnt = 0; - NextMove->trans_move = trans_move; - NextMove->phase = Trans1; - NextMove->Target = OppOccupied; - if (depth < SearchDepthMin && value - Pos0->Value >= MinDepthMultiplier *(depth - 4)) - { - NextMove->phase = Trans2; - cnt = 1; - if (value - Pos0->Value >= MinDepthMultiplier * (depth - 2)) - NextMove->Target ^= BitboardOppP; - } - NextMove->move = 0; - NextMove->bc = 0; - NextMove->exclude = 0; - v = value; - Split = false; - while (true) - { - if (SMPFree != 0 && depth >= ANSplitDepth && !Split && NextMove->phase != Trans1 && cnt >= 1 - && NextMove->phase <= Ordinary_Moves) - { - int r; - bool b; - Split = true; - b = IvanSplit(Position, NextMove, depth, value, value, NodeTypeAll, &r); - CheckHalt(); - if (b) - return r; - } - move = MyNext(Position, NextMove); - if (!move) - break; - to = To(move); - fr = From(move); - if (IsRepetition(0)) - { - cnt++; - continue; - } - if (cnt > CountLimit && NextMove->phase == Ordinary_Moves && (move & 0xe000) == 0 && SqSet[fr] & ~MyXray && depth < SearchDepthMin) - { - if ((5 << (depth - SearchDepthReduction)) + MaxPositional(move) + (Pos0->Value) < value + 35 + 2 *cnt) - { - cnt++; - continue; - } - } - if (depth < SearchDepthMin && (2 << (depth - SearchDepthReduction)) + (Pos0->Value) < value - + 125 && NextMove->phase == Ordinary_Moves && MyKingSq != fr && SqSet[fr] & ~MyXray && (move & 0x8000) == 0 - && !MySEE(Position, move)) - { - cnt++; - continue; - } - move &= 0x7fff; - Make(Position, move); - EvalCutAll(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (MoveIsCheck) - move_is_check = 1; - else - move_is_check = 0; - extend = 0; - if (PassedPawnPush(to, SixthRank(to))) - extend = 1; - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (move_is_check) - v = -OppCutCheck(Position, 1 - value, depth - 1); - else - { - if (cnt > CountLimit && depth < SearchDepthMin && Pos1->cp == 0 && (2 << (depth - SearchDepthReduction)) - Pos1->Value < value + cnt - UndoCountThreshold) - { - Undo(Position, move); - cnt++; - continue; - } - if (NextMove->phase == Ordinary_Moves && cnt >= 3) - { - new_depth = depth - 2 + extend - BSR(1 + cnt); - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - if (v < value) - goto Done; - } - new_depth = depth - 2 + extend; - if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - } - Done: - Undo(Position, move); - CheckHalt(); - cnt++; - if (v >= value) - { - if ((Pos0 + 1)->cp == 0 && MoveHistory(move)) - HistoryGood(move, depth); - HashLowerAll(Position, move, depth, v); - return(v); - } - if ((Pos0 + 1)->cp == 0 && MoveHistory(move)) - HistoryBad(move, depth); - } - if (!cnt && NextMove->phase <= Trans2) - return(0); - v = value - 1; - HashUpper(Position->Dyn->Hash, depth, v); - return(v); - } -int MyAllCheck(typePos *Position, int value, int depth) - { - int move, cnt; - int trans_depth, move_depth = 0, trans_move = 0, Value, new_depth, v, i; - TransDeclare(); - typeMoveList List[256], *list, *p, *q; - uint64 zob = Position->Dyn->Hash; - int best_value; - typeDynamic *Pos0 = Position->Dyn; - bool Gen; - - CheckForMate (value); - - (Pos0 + 1)->move = MoveNone; - CheckRepetition(true); - Trans = HashPointer(zob); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (zob >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return(HeightMultiplier * Height(Position) - ValueMate); - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - (Pos0 + 1)->move = trans_move = move; - } - trans_depth = MAX(trans->DepthLower, trans->DepthUpper); - if (trans->DepthLower >= depth) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - { - UpdateAge(); - return(Value); - } - } - if (trans->DepthUpper >= depth) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - { - if (!((trans->flags & FlagCut) == FlagCut)) - { - UpdateAge(); - return(Value); - } - } - } - } - } - if (trans_move && !MyOK(Position, trans_move)) - trans_move = MoveNone; - best_value = HeightMultiplier * Height(Position) - ValueMate; - p = List; - List[0].move = trans_move; - cnt = 0; - Gen = false; - List[1].move = 0; - while (p->move || !Gen) - { - if (!p->move) - { - list = MyEvasion(Position, List + 1, 0xffffffffffffffff); - Gen = true; - for (p = list - 1; p >= List + 1; p--) - { - if ((p->move & 0x7fff) == trans_move) - p->move = 0; - else if (p->move <= (0x80 << 24)) - { - if ((p->move & 0x7fff) == Pos0->killer1) - p->move |= 0x7fff8000; - else if ((p->move & 0x7fff) == Pos0->killer2) - p->move |= 0x7fff0000; - else - p->move |= (p->move & 0x7fff) | (HistoryValue(Position, p->move) << 15); - } - move = p->move; - for (q = p + 1; q < list; q++) - { - if (move < q->move) - (q - 1)->move = q->move; - else - break; - } - q--; - q->move = move; - } - p = List + 1; - continue; - } - move = p->move & 0x7fff; - p++; - if (IsRepetition(0)) - { - best_value = MAX(0, best_value); - cnt++; - continue; - } - Make(Position, move); - EvalCutAll(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - { - new_depth = depth - 1; - if (LowDepthCondition) - v = -OppLowDepthCheck(Position, 1 - value, new_depth); - else - v = -OppCutCheck(Position, 1 - value, new_depth); - } - else - { - if (cnt >= 1) - { - new_depth = depth - 2 - MIN(2, cnt) + ExtendInCheck; - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - if (v < value) - goto Loop; - } - new_depth = depth - 2 + ExtendInCheck; - if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - } - Loop: - Undo(Position, move); - CheckHalt(); - if (v > best_value) - best_value = v; - if (v < value) - { - cnt++; - continue; - } - HashLowerAll(Position, move, MAX(1, depth), v); - return(v); - } - HashUpper(Position->Dyn->Hash, MAX(1, depth), best_value); - return(best_value); - } \ No newline at end of file diff --git a/Firenzina/arrays.c b/Firenzina/arrays.c deleted file mode 100644 index d98fd2d..0000000 --- a/Firenzina/arrays.c +++ /dev/null @@ -1,502 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -#define Distance(i, j)(MAX (FileDistance (i, j), RankDistance (i, j))) - -const uint8 Left90[64] = - { - 7, 15, 23, 31, 39, 47, 55, 63, - 6, 14, 22, 30, 38, 46, 54, 62, - 5, 13, 21, 29, 37, 45, 53, 61, - 4, 12, 20, 28, 36, 44, 52, 60, - 3, 11, 19, 27, 35, 43, 51, 59, - 2, 10, 18, 26, 34, 42, 50, 58, - 1, 9, 17, 25, 33, 41, 49, 57, - 0, 8, 16, 24, 32, 40, 48, 56 - }; -const uint8 Left45[64] = - { - 0, 2, 5, 9, 14, 20, 27, 35, - 1, 4, 8, 13, 19, 26, 34, 42, - 3, 7, 12, 18, 25, 33, 41, 48, - 6, 11, 17, 24, 32, 40, 47, 53, - 10, 16, 23, 31, 39, 46, 52, 57, - 15, 22, 30, 38, 45, 51, 56, 60, - 21, 29, 37, 44, 50, 55, 59, 62, - 28, 36, 43, 49, 54, 58, 61, 63 - }; -const uint8 Right45[64] = - { - 28, 21, 15, 10, 6, 3, 1, 0, - 36, 29, 22, 16, 11, 7, 4, 2, - 43, 37, 30, 23, 17, 12, 8, 5, - 49, 44, 38, 31, 24, 18, 13, 9, - 54, 50, 45, 39, 32, 25, 19, 14, - 58, 55, 51, 46, 40, 33, 26, 20, - 61, 59, 56, 52, 47, 41, 34, 27, - 63, 62, 60, 57, 53, 48, 42, 35 - }; -static int Left54[64], Right54[64], Left09[64]; -static int Shift[64] = - { - 1, - 2, 2, - 4, 4, 4, - 7, 7, 7, 7, - 11, 11, 11, 11, 11, - 16, 16, 16, 16, 16, 16, - 22, 22, 22, 22, 22, 22, 22, - 29, 29, 29, 29, 29, 29, 29, 29, - 37, 37, 37, 37, 37, 37, 37, - 44, 44, 44, 44, 44, 44, - 50, 50, 50, 50, 50, - 55, 55, 55, 55, - 59, 59, 59, - 62, 62, - 64 - }; -static int Length[64], Where[64]; -static int Hop[8] = - { - 6, 10, 15, 17, -6, -10, -15, -17 - }; -static uint64 randkey = 1; -uint16 RAND16() - { - randkey = randkey * 8765432181103515245ULL + 1234567891ULL; - return((randkey >> 32) % 65536); - } -uint64 GetRand() - { - return(((uint64)RAND16()) << 48) | (((uint64)RAND16()) << 32) | - (((uint64)RAND16()) << 16) | (((uint64)RAND16()) << 0); - } - -void RandHash() - { - int i, j; - - GetRand(); - HashCastling[0] = 0; - HashCastling[1] = GetRand(); - HashCastling[2] = GetRand(); - HashCastling[4] = GetRand(); - HashCastling[8] = GetRand(); - for (i = 0; i < 16; i++) - { - if (POPCNT(i) < 2) - continue; - HashCastling[i] = 0; - for (j = 1; j < 16; j <<= 1) - if (i & j) - HashCastling[i] ^= HashCastling[j]; - } - for (i = 0; i < 16; i++) - for (j = A1; j <= H8; j++) - Hash(i, j) = GetRand(); - for (i = FA; i <= FH; i++) - HashEP[i] = GetRand(); - for (i = 0; i < 16; i++) - HashRev[i] = 0ULL; - - InitRandom32(GetRand()); - } -void InitArrays() - { - int sq2, i, sq = 0, j, file, rank, king, dir; - uint64 T; - - for (i = 1; i <= 8; i++) - for (j = 1; j <= i; j++) - { - Length[sq] = i; - Where[sq++] = j - 1; - } - for (i = 7; i >= 1; i--) - for (j = 1; j <= i; j++) - { - Length[sq] = i; - Where[sq++] = j - 1; - } - for (i = A1; i <= H8; i++) - { - Left54[Left45[i]] = i; - Left09[Left90[i]] = i; - Right54[Right45[i]] = i; - } - for (i = A1; i <= H8; i++) - { - SqSet[i] = 0; - BitSet(i, SqSet[i]); - SqClear[i] = ~SqSet[i]; - } - - for (i = A1; i <= H8; i++) - { - AttN[i] = 0; - for (j = 0; j < 8; j++) - { - sq = i + Hop[j]; - if ((sq < A1) || (sq > H8)) - continue; - if ((FileDistance(i, sq) > 2) || (RankDistance(i, sq) > 2)) - continue; - BitSet(sq, AttN[i]); - } - } - for (i = A1; i <= H8; i++) - { - AttK[i] = 0; - for (j = A1; j <= H8; j++) - { - if (MAX(FileDistance(i, j), RankDistance(i, j)) == 1) - BitSet(j, AttK[i]); - } - } - for (i = A1; i <= H1; i++) - { - AttPw[i] = 0; - AttPb[i] = SqSet[i + 7] | SqSet[i + 9]; - } - for (i = A2; i <= H7; i++) - { - AttPw[i] = SqSet[i - 7] | SqSet[i - 9]; - AttPb[i] = SqSet[i + 7] | SqSet[i + 9]; - } - for (i = A8; i <= H8; i++) - { - AttPb[i] = 0; - AttPw[i] = SqSet[i - 7] | SqSet[i - 9]; - } - for (i = A1; i <= A8; i += 8) - { - AttPw[i] = SqSet[i - 7]; - AttPb[i] = SqSet[i + 9]; - } - for (i = H1; i <= H8; i += 8) - { - AttPw[i] = SqSet[i - 9]; - AttPb[i] = SqSet[i + 7]; - } - AttPw[A1] = 0; - AttPw[A2] = SqSet[B1]; - AttPb[A7] = SqSet[B8]; - AttPb[A8] = 0; - AttPw[H1] = 0; - AttPw[H2] = SqSet[G1]; - AttPb[H7] = SqSet[G8]; - AttPb[H8] = 0; - IsolatedFiles[FA] = FileB; - IsolatedFiles[FH] = FileG; - for (file = FB; file <= FG; file++) - IsolatedFiles[file] = FileArray[file - 1] | FileArray[file + 1]; - for (sq = A1; sq <= H8; sq++) - { - IsolatedPawnW[sq] = 0; - IsolatedPawnB[sq] = 0; - file = File(sq); - rank = Rank(sq); - if (rank < R8) - IsolatedPawnW[sq] |= IsolatedFiles[file] & RankArray[rank + 1]; - if (rank < R7) - IsolatedPawnW[sq] |= IsolatedFiles[file] & RankArray[rank + 2]; - if (rank > R1) - IsolatedPawnB[sq] |= IsolatedFiles[file] & RankArray[rank - 1]; - if (rank > R2) - IsolatedPawnB[sq] |= IsolatedFiles[file] & RankArray[rank - 2]; - ConnectedPawns[sq] = IsolatedPawnW[sq] | IsolatedPawnB[sq] | (RankArray[rank] & IsolatedFiles[file]); - } - for (rank = R1; rank <= R8; rank++) - { - InFrontW[rank] = 0; - for (j = rank + 1; j <= R8; j++) - InFrontW[rank] |= RankArray[j]; - NotInFrontW[rank] = ~InFrontW[rank]; - } - for (rank = R8; rank >= R1; rank--) - { - InFrontB[rank] = 0; - for (j = rank - 1; j >= R1; j--) - InFrontB[rank] |= RankArray[j]; - NotInFrontB[rank] = ~InFrontB[rank]; - } - - for (sq = A1; sq <= H8; sq++) - { - PassedPawnW[sq] = (IsolatedFiles[File(sq)] | FileArray[File(sq)]) & InFrontW[Rank(sq)]; - PassedPawnB[sq] = (IsolatedFiles[File(sq)] | FileArray[File(sq)]) & InFrontB[Rank(sq)]; - } - for (sq = A1; sq <= H8; sq++) - { - if (File(sq) >= FC) - Left2[sq] = SqSet[sq - 2]; - else - Left2[sq] = 0; - if (File(sq) <= FF) - Right2[sq] = SqSet[sq + 2]; - else - Right2[sq] = 0; - if (File(sq) >= FB) - Left1[sq] = SqSet[sq - 1]; - else - Left1[sq] = 0; - if (File(sq) <= FG) - Right1[sq] = SqSet[sq + 1]; - else - Right1[sq] = 0; - Adjacent[sq] = Left1[sq] | Right1[sq]; - } - for (sq = A1; sq <= H8; sq++) - { - ProtectedPawnW[sq] = (IsolatedFiles[File(sq)]) &NotInFrontW[Rank(sq)]; - ProtectedPawnB[sq] = (IsolatedFiles[File(sq)]) &NotInFrontB[Rank(sq)]; - } - for (sq = A1; sq <= H8; sq++) - { - file = File(sq); - rank = Rank(sq); - LongDiag[sq] = 0; - if (file <= FD) - { - while (file < FH && rank < R8) - { - file++; - rank++; - LongDiag[sq] |= SqSet[(rank << 3) + file]; - } - file = File(sq); - rank = Rank(sq); - while (file < FH && rank > R1) - { - file++; - rank--; - LongDiag[sq] |= SqSet[(rank << 3) + file]; - } - } - else - { - while (file > FA && rank < R8) - { - file--; - rank++; - LongDiag[sq] |= SqSet[(rank << 3) + file]; - } - file = File(sq); - rank = Rank(sq); - while (file > FA && rank > R1) - { - file--; - rank--; - LongDiag[sq] |= SqSet[(rank << 3) + file]; - } - } - } - for (sq = A1; sq <= H8; sq++) - OpenFileW[sq] = FileArray[File(sq)] & InFrontW[Rank(sq)]; - for (sq = A1; sq <= H8; sq++) - OpenFileB[sq] = FileArray[File(sq)] & InFrontB[Rank(sq)]; - for (sq = A1; sq <= H8; sq++) - Doubled[sq] = FileArray[File(sq)] ^ (1ULL << sq); - - for (sq = A1; sq <= H8; sq++) - { - QuadrantBKwtm[sq] = QuadrantBKbtm[sq] = 0; - j = (sq & 7) + 56; - if (Rank(sq) == R2) - sq2 = sq + 8; - else - sq2 = sq; - for (i = A1; i <= H8; i++) - { - if (Distance(sq2, j) < Distance(j, i) - 1) - BitSet(i, QuadrantBKbtm[sq]); - if (Distance(sq2, j) < Distance(j, i)) - BitSet(i, QuadrantBKwtm[sq]); - } - } - for (sq = A1; sq <= H8; sq++) - { - QuadrantWKwtm[sq] = QuadrantWKbtm[sq] = 0; - j = (sq & 7); - if (Rank(sq) == R7) - sq2 = sq - 8; - else - sq2 = sq; - for (i = A1; i <= H8; i++) - { - if (Distance(sq2, j) < Distance(j, i) - 1) - BitSet(i, QuadrantWKwtm[sq]); - if (Distance(sq2, j) < Distance(j, i)) - BitSet(i, QuadrantWKbtm[sq]); - } - } - for (sq = A1; sq <= H8; sq++) - { - ShepherdWK[sq] = ShepherdBK[sq] = 0; - file = File(sq); - if (file == FA || file == FH) - T = IsolatedFiles[file]; - else - T = IsolatedFiles[file] | FileArray[file]; - if (Rank(sq) >= R6) - ShepherdWK[sq] |= (T & Rank8); - if (Rank(sq) >= R5) - ShepherdWK[sq] |= (T & Rank7); - if (Rank(sq) <= R3) - ShepherdBK[sq] |= (T & Rank1); - if (Rank(sq) <= R4) - ShepherdBK[sq] |= (T & Rank2); - } - for (sq = A1; sq <= H8; sq++) - { - Northwest[sq] = (Rank(sq) != R8 && File(sq) != FA) ? SqSet[sq + 7] : 0; - Northeast[sq] = (Rank(sq) != R8 && File(sq) != FH) ? SqSet[sq + 9] : 0; - Southwest[sq] = (Rank(sq) != R1 && File(sq) != FA) ? SqSet[sq - 9] : 0; - Souteast[sq] = (Rank(sq) != R1 && File(sq) != FH) ? SqSet[sq - 7] : 0; - } - for (sq = A1; sq <= H8; sq++) - for (king = A1; king <= H8; king++) - { - Evade(king, sq) = AttK[king]; - if (Rank(king) == Rank(sq)) - { - if (File(king) != FA) - Evade(king, sq) ^= SqSet[king - 1]; - if (File(king) != FH) - Evade(king, sq) ^= SqSet[king + 1]; - } - if (File(king) == File(sq)) - { - if (Rank(king) != R1) - Evade(king, sq) ^= SqSet[king - 8]; - if (Rank(king) != R8) - Evade(king, sq) ^= SqSet[king + 8]; - } - if ((Rank(king) - Rank(sq)) == (File(king) - File(sq))) - { - if (Rank(king) != R8 && File(king) != FH) - Evade(king, sq) ^= SqSet[king + 9]; - if (Rank(king) != R1 && File(king) != FA) - Evade(king, sq) ^= SqSet[king - 9]; - } - if ((Rank(king) - Rank(sq)) == (File(sq) - File(king))) - { - if (Rank(king) != R8 && File(king) != FA) - Evade(king, sq) ^= SqSet[king + 7]; - if (Rank(king) != R1 && File(king) != FH) - Evade(king, sq) ^= SqSet[king - 7]; - } - if (AttK[king] & SqSet[sq]) - Evade(king, sq) |= SqSet[sq]; - } - for (file = FA; file <= FH; file++) - { - FilesLeft[file] = FilesRight[file] = 0; - for (i = FA; i < file; i++) - FilesLeft[file] |= FileArray[i]; - for (i = file + 1; i <= FH; i++) - FilesRight[file] |= FileArray[i]; - } - for (sq = A1; sq <= H8; sq++) - for (king = A1; king <= H8; king++) - { - InterPose(king, sq) = SqSet[sq]; - dir = 0; - if (Rank(king) == Rank(sq)) - { - if (king > sq) - dir = 1; - else - dir = -1; - } - if (File(king) == File(sq)) - { - if (king > sq) - dir = 8; - else - dir = -8; - } - if ((Rank(king) - Rank(sq)) == (File(king) - File(sq))) - { - if (king > sq) - dir = 9; - else - dir = -9; - } - if ((Rank(king) - Rank(sq)) == (File(sq) - File(king))) - { - if (king > sq) - dir = 7; - else - dir = -7; - } - if (dir) - for (i = sq; i != king; i += dir) - BitSet(i, InterPose(king, sq)); - } - for (sq = A1; sq <= H8; sq++) - { - Ortho[sq] = RankArray[Rank(sq)] | FileArray[File(sq)]; - Diag[sq] = 0; - for (file = File(sq), rank = Rank(sq); file <= FH && rank <= R8; file++, rank++) - BitSet((rank << 3) + file, Diag[sq]); - for (file = File(sq), rank = Rank(sq); file <= FH && rank >= R1; file++, rank--) - BitSet((rank << 3) + file, Diag[sq]); - for (file = File(sq), rank = Rank(sq); file >= FA && rank <= R8; file--, rank++) - BitSet((rank << 3) + file, Diag[sq]); - for (file = File(sq), rank = Rank(sq); file >= FA && rank >= R1; file--, rank--) - BitSet((rank << 3) + file, Diag[sq]); - Ortho[sq] &= SqClear[sq]; - Diag[sq] &= SqClear[sq]; - NonOrtho[sq] = ~Ortho[sq]; - NonDiag[sq] = ~Diag[sq]; - OrthoDiag[sq] = Ortho[sq] | Diag[sq]; - } - for (j = A1; j <= H8; j++) - for (i = A1; i <= H8; i++) - { - Line(i, j) = BadDirection; - if (i == j) - continue; - if (Rank(j) == Rank(i)) - Line(i, j) = Direction_horz; - if (File(j) == File(i)) - Line(i, j) = Direction_vert; - if ((File(i) - File(j)) == (Rank(i) - Rank(j))) - Line(i, j) = Direction_a1h8; - if ((File(j) - File(i)) == (Rank(i) - Rank(j))) - Line(i, j) = Direction_h1a8; - } - randkey = 1; - RandHash(); - MagicMultInit(); - } \ No newline at end of file diff --git a/Firenzina/arrays.h b/Firenzina/arrays.h deleted file mode 100644 index 77a20a4..0000000 --- a/Firenzina/arrays.h +++ /dev/null @@ -1,156 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define HashWTM (0x1220ab8c00000004) - -#ifdef OneDimensional -#define InterPose(x, y) Interpose[64 * (x) + (y)] -#define Evade(x, y) Evade[64 * (x) + (y)] -#define Line(x, y) Line[64 * (x) + (y)] -#define Hash(pi, sq) Zobrist[64 * (pi) + (sq)] -SlabDeclare3(uint64, Interpose, 0100 * 0100); -SlabDeclare3(uint64, Evade, 0100 * 0100); -SlabDeclare3(sint8, Line, 0100 * 0100); -SlabDeclare3(uint64, Zobrist, 0x10 * 0100); -#else -#define InterPose(x, y) Interpose[x][y] -#define Evade(x, y) Evade[x][y] -#define Line(x, y) Line[x][y] -#define Hash(pi, sq) Zobrist[pi][sq] -uint64 Interpose[64][64], Evade[64][64]; -sint8 Line[64][64]; -uint64 Zobrist[16][64]; -#endif - -#define Rank1 0x00000000000000ff -#define Rank2 0x000000000000ff00 -#define Rank3 0x0000000000ff0000 -#define Rank4 0x00000000ff000000 -#define Rank5 0x000000ff00000000 -#define Rank6 0x0000ff0000000000 -#define Rank7 0x00ff000000000000 -#define Rank8 0xff00000000000000 - -#define FileA 0x0101010101010101 -#define FileB 0x0202020202020202 -#define FileC 0x0404040404040404 -#define FileD 0x0808080808080808 -#define FileE 0x1010101010101010 -#define FileF 0x2020202020202020 -#define FileG 0x4040404040404040 -#define FileH 0x8080808080808080 - -static const uint64 RankArray[8] = - { - 0x00000000000000ff, 0x000000000000ff00, - 0x0000000000ff0000, 0x00000000ff000000, - 0x000000ff00000000, 0x0000ff0000000000, - 0x00ff000000000000, 0xff00000000000000 - }; -static const uint64 FileArray[8] = - { - 0x0101010101010101, 0x0202020202020202, - 0x0404040404040404, 0x0808080808080808, - 0x1010101010101010, 0x2020202020202020, - 0x4040404040404040, 0x8080808080808080 - }; - -SlabDeclare1(uint64, SqSet, 64); -SlabDeclare1(uint64, SqClear, 64); -SlabDeclare1(uint64, NonDiag, 64); -SlabDeclare1(uint64, NonOrtho, 64); -SlabDeclare1(uint64, Ortho, 64); -SlabDeclare1(uint64, Diag, 64); -SlabDeclare1(uint64, OrthoDiag, 64); -SlabDeclare1(uint64, OpenFileW, 64); -SlabDeclare1(uint64, OpenFileB, 64); -SlabDeclare1(uint64, PassedPawnW, 64); -SlabDeclare1(uint64, PassedPawnB, 64); -SlabDeclare1(uint64, ProtectedPawnW, 64); -SlabDeclare1(uint64, ProtectedPawnB, 64); -SlabDeclare1(uint64, IsolatedPawnW, 64); -SlabDeclare1(uint64, IsolatedPawnB, 64); -SlabDeclare1(uint64, ConnectedPawns, 64); -SlabDeclare1(uint64, InFrontW, 8); -SlabDeclare1(uint64, NotInFrontW, 8); -SlabDeclare1(uint64, InFrontB, 8); -SlabDeclare1(uint64, NotInFrontB, 8); -SlabDeclare1(uint64, IsolatedFiles, 8); -SlabDeclare1(uint64, FilesLeft, 8); -SlabDeclare1(uint64, FilesRight, 8); -SlabDeclare1(uint64, Doubled, 64); -SlabDeclare1(uint64, Left2, 64); -SlabDeclare1(uint64, Right2, 64); -SlabDeclare1(uint64, Left1, 64); -SlabDeclare1(uint64, Right1, 64); -SlabDeclare1(uint64, Adjacent, 64); -SlabDeclare1(uint64, LongDiag, 64); -SlabDeclare1(uint64, Northwest, 64); -SlabDeclare1(uint64, Southwest, 64); -SlabDeclare1(uint64, Northeast, 64); -SlabDeclare1(uint64, Souteast, 64); -SlabDeclare1(uint64, QuadrantWKwtm, 64); -SlabDeclare1(uint64, QuadrantBKwtm, 64); -SlabDeclare1(uint64, QuadrantWKbtm, 64); -SlabDeclare1(uint64, QuadrantBKbtm, 64); -SlabDeclare1(uint64, ShepherdWK, 64); -SlabDeclare1(uint64, ShepherdBK, 64); -SlabDeclare1(uint64, HashCastling, 16); -SlabDeclare1(uint64, HashEP, 8); -SlabDeclare1(uint64, HashRev, 16); -SlabDeclare1(uint64, AttN, 64); -SlabDeclare1(uint64, AttK, 64); -SlabDeclare1(uint64, AttPw, 64); -SlabDeclare1(uint64, AttPb, 64); - -static const uint64 Ranks2to6NotA = 0x0000fefefefefe00; -static const uint64 Ranks2to6NotAB = 0x0000fcfcfcfcfc00; -static const uint64 Ranks2to6 = 0x0000ffffffffff00; -static const uint64 Ranks2to6NotH = 0x00007f7f7f7f7f00; -static const uint64 Ranks2to6NotGH = 0x00003f3f3f3f3f00; -static const uint64 Ranks3to7NotA = 0x00fefefefefe0000; -static const uint64 Ranks3to7NotAB = 0x00fcfcfcfcfc0000; -static const uint64 Ranks3to7 = 0x00ffffffffffff0000; -static const uint64 Ranks3to7NotGH = 0x003f3f3f3f3f0000; -static const uint64 Ranks3to7NotH = 0x007f7f7f7f7f0000; -static const uint64 White = 0x55aa55aa55aa55aa; -static const uint64 Black = 0xaa55aa55aa55aa55; -static const uint64 Rank2NotA = 0x000000000000fe00; -static const uint64 Rank2NotH = 0x0000000000007f00; -static const uint64 Rank7NotA = 0x00fe000000000000; -static const uint64 Rank7NotH = 0x007f000000000000; -static const uint64 NotA = 0xfefefefefefefefe; -static const uint64 NotH = 0x7f7f7f7f7f7f7f7f; -static const uint64 F1G1 = 0x0000000000000060; -static const uint64 C1D1 = 0x000000000000000c; -static const uint64 B1C1D1 = 0x000000000000000e; -static const uint64 F8G8 = 0x6000000000000000; -static const uint64 C8D8 = 0x0c00000000000000; -static const uint64 B8C8D8 = 0x0e00000000000000; \ No newline at end of file diff --git a/Firenzina/benchmark.c b/Firenzina/benchmark.c deleted file mode 100644 index ff0a183..0000000 --- a/Firenzina/benchmark.c +++ /dev/null @@ -1,98 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -char BenchmarkPos[16][128] = - { - "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", - "rnbqkb1r/pppp1ppp/4pn2/8/2PP4/2N5/PP2PPPP/R1BQKBNR b KQkq - 1 3", - "rnbqkb1r/pp2pppp/1n1p4/8/2PP4/8/PP3PPP/RNBQKBNR w KQkq - 0 6", - "r1bq1rk1/pppp1ppp/5n2/4n3/2P5/1PN3P1/P2PPKBP/R1BQ3R b - - 0 8", - "r4rk1/ppqbbppp/2nppn2/8/4PP2/1NN1B3/PPP1B1PP/R2Q1RK1 w - - 1 11", - "r2q1rk1/1pp2ppp/p1pbb3/4P3/4NB2/8/PPP2PPP/R2QR1K1 b - - 0 13", - "r4rk1/3np1bp/pq1p2p1/2pP3n/6P1/2N1Bp2/PPQ1BPP1/R4RK1 w - - 0 16", - "rnb2r2/p1p2pk1/1p1pqn1p/P7/Q1PPp1pP/2P3P1/4PPB1/1RB1K1NR b K - 3 18", - "4rk1r/1b2pNbp/pq2Bn1p/1ppP4/P1p2Q2/2N4P/1P3PP1/R3K2R w KQ - 8 21", - "r3r1k1/2p1np1p/1p2p1pB/p1q1P3/P1P1Q3/3R3P/1P3PP1/5RK1 b - - 2 23", - "r2q1r1k/6np/1p1p1pp1/pNpPn3/P1P1P1P1/1PB1Q2P/5R2/5R1K w - - 0 26", - "2kn4/ppN1R3/3p4/6rp/2NP3n/2P5/PP5r/4KR2 b - - 4 28", - "r1br2k1/pp4p1/4p1Bp/4P3/2Rp3N/4n1P1/PP2P2P/R5K1 w - - 8 31", - "6k1/1p3pp1/p2p4/3P1P2/P1Bpn3/1P2q3/2P4P/5Q1K b - - 0 33", - "4q3/r4pkp/1p1P4/2n1P1p1/2Q2b2/7P/2R1B1P1/5R1K w - - 0 36", - "3rr1k1/p4pbp/2bN1p2/8/2B3P1/2P3Bn/P2N4/3R1K2 b - - 1 38" - }; -void BenchMark(typePos *Position, char *GoString) - { - int i; - char String[1024], Go_String[1024]; - int cpu, rp; - uint64 Nodes, C, TIME; - uint64 TotalTime = 0, TotalNodes = 0; - for (i = 0; i < 16; i++) - { - sprintf(String, "%s %s\n", "fen", BenchmarkPos[i]); - InitPosition(Position, String); - strcpy(Go_String, GoString); - InitSearch(Position, Go_String); - C = GetClock(); - Search(Position); - TIME = GetClock() - C; - Nodes = 0; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - Nodes += RootPosition[cpu][rp].nodes; - Send("Position %d: Nodes: %lld Time: %lldms\n", 1 + i, Nodes, TIME / 1000); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Position %d: Nodes: %lld Time: %lldms\n", 1 + i, Nodes, TIME / 1000); - close_log(); - } -#endif - - TotalNodes += Nodes; - TotalTime += TIME; - } - Send("Total Nodes: %lld Time: %lldms\n", TotalNodes, TotalTime / 1000); - Send("Total NPS: %lld\n", ((TotalNodes * 1000) / TotalTime) * 1000); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Total Nodes: %lld Time: %lldms\n", TotalNodes, TotalTime / 1000); - fprintf(log_file, "Total NPS: %lld\n", ((TotalNodes * 1000) / TotalTime) * 1000); - close_log(); - } -#endif - } diff --git a/Firenzina/bits.h b/Firenzina/bits.h deleted file mode 100644 index 03074e3..0000000 --- a/Firenzina/bits.h +++ /dev/null @@ -1,96 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifdef x86_64 -static INLINE int BSR (uint64 w) - { - uint64 x; - asm ("bsrq %1,%0\n": "=&r" (x):"r" (w)); - return x; - } -static INLINE int BSF (uint64 w) - { - uint64 x; - asm ("bsfq %1,%0\n": "=&r" (x):"r" (w)); - return x; - } - -#ifdef HasPopCNT -static INLINE int POPCNT (uint64 w) - { - uint64 x; - asm ("popcntq %1,%0\n": "=&r" (x):"r" (w)); - return x; - } -#else -static INLINE int POPCNT (uint64 w) -{ - w = w - ((w >> 1) & 0x5555555555555555ull); - w = (w & 0x3333333333333333ull) + ((w >> 2) & 0x3333333333333333ull); - w = (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0full; - return(w * 0x0101010101010101ull) >> 56; -} -#endif - -#else -static INLINE int BSR (uint64 w) - { - int x1, x2; - asm ("bsr %1,%0\n" "jnz 1f\n" "bsr %0,%0\n" - "subl $32,%0\n" "1: addl $32,%0\n": - "=&q" (x1), "=&q" (x2): - "1"((int) (w >> 32)), "0"((int) w)); - return x1; - } - -static INLINE int BSF (uint64 w) - { - int x1, x2; - asm ("bsf %0,%0\n" "jnz 1f\n" "bsf %1,%0\n" "jz 1f\n" "addl $32,%0\n" "1:": - "=&q" (x1), "=&q" (x2): - "1"((int) (w >> 32)), "0"((int) w)); - return x1; - } - -static INLINE int POPCNT (uint64 w) - { - uint32 u, v; - u = (w & 0xffffffff); - v = w >> 32; - u -=((u >> 1) & 0x55555555); - v -=((v >> 1) & 0x55555555); - u =(((u >> 2) & 0x33333333) + (u & 0x33333333)); - v =(((v >> 2) & 0x33333333) + (v & 0x33333333)); - u =(((u >> 4) + u) & 0x0f0f0f0f); - v =(((v >> 4) + v) & 0x0f0f0f0f); - return((u * 0x01010101) >> 24) +((v * 0x01010101) >> 24); - } -#endif - diff --git a/Firenzina/black.h b/Firenzina/black.h deleted file mode 100644 index 77309de..0000000 --- a/Firenzina/black.h +++ /dev/null @@ -1,191 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define MyPVNodeSMP BlackPVNodeSMP -#define OppPVNodeSMP WhitePVNodeSMP -#define MyAllSMP BlackAllSMP -#define OppAllSMP WhiteAllSMP -#define MyCutSMP BlackCutSMP -#define OppCutSMP WhiteCutSMP -#define MyMultiPV BlackMultiPV -#define MyPVQsearch PVQsearchBlack -#define MyPVQsearchCheck PVQsearchBlackCheck -#define MyQsearchCheck QsearchBlackCheck -#define MyQsearch QsearchBlack -#define MyLowDepth LowDepthBlack -#define MyLowDepthCheck LowDepthBlackCheck -#define MyExclude ExcludeBlack -#define MyExcludeCheck ExcludeBlackCheck -#define MyCut CutNodeBlack -#define MyCutCheck CutNodeBlackCheck -#define MyAll AllNodeBlack -#define MyAllCheck AllNodeBlackCheck -#define MyPV PVNodeBlack -#define MyRootNode RootBlack -#define MyAnalysis BlackAnalysis -#define MyTop TopBlack -#define MyTopAnalysis BlackTopAnalysis -#define MyAttacked Position->Dyn->bAtt -#define OppAttacked Position->Dyn->wAtt -#define MyAttackedPawns AttPb -#define OppAttackedPawns AttPw -#define OppPVQsearch PVQsearchWhite -#define OppPVQsearchCheck PVQsearchWhiteCheck -#define OppQsearch QsearchWhite -#define OppQsearchCheck QsearchWhiteCheck -#define OppLowDepth LowDepthWhite -#define OppLowDepthCheck LowDepthWhiteCheck -#define OppExclude ExcludeWhite -#define OppExcludeCheck ExcludeWhiteCheck -#define OppCut CutNodeWhite -#define OppCutCheck CutNodeWhiteCheck -#define OppAll AllNodeWhite -#define OppAllCheck AllNodeWhiteCheck -#define OppPV PVNodeWhite -#define OppRootNode RootWhite -#define OppAnalysis WhiteAnalysis -#define OppTop TopWhite -#define OppTopAnalysis WhiteTopAnalysis -#define OppOccupied wBitboardOcc -#define BitboardOppP wBitboardP -#define BitboardOppN wBitboardN -#define BitboardOppBL wBitboardBL -#define BitboardOppBD wBitboardBD -#define BitboardOppB (BitboardOppBL | BitboardOppBD) -#define BitboardOppR wBitboardR -#define BitboardOppQ wBitboardQ -#define BitboardOppK wBitboardK -#define MyOccupied bBitboardOcc -#define BitboardMyP bBitboardP -#define BitboardMyN bBitboardN -#define BitboardMyBL bBitboardBL -#define BitboardMyBD bBitboardBD -#define BitboardMyB (BitboardMyBL | BitboardMyBD) -#define BitboardMyR bBitboardR -#define BitboardMyQ bBitboardQ -#define BitboardMyK bBitboardK -#define MyKingSq Position->bKsq -#define OppKingSq Position->wKsq -#define EnumOppP wEnumP -#define EnumOppN wEnumN -#define EnumOppBL wEnumBL -#define EnumOppBD wEnumBD -#define EnumOppR wEnumR -#define EnumOppQ wEnumQ -#define EnumOppK wEnumK -#define EnumMyP bEnumP -#define EnumMyN bEnumN -#define EnumMyBL bEnumBL -#define EnumMyBD bEnumBD -#define EnumMyR bEnumR -#define EnumMyQ bEnumQ -#define EnumMyK bEnumK -#define OppKingCheck Position->Dyn->wKcheck -#define MyCapture BlackCaptures -#define MyOrdinary BlackOrdinary -#define MyPositionalGain PositionalMovesBlack -#define MyEvasion BlackEvasions -#define MyQuietChecks QuietChecksBlack -#define MySEE BlackSEE -#define Make MakeBlack -#define Undo UndoBlack -#define IllegalMove MoveIsCheckBlack -#define MoveIsCheck MoveIsCheckWhite -#define MyOK BlackOK -#define MyNext NextBlack -#define MyNull ((Position->Dyn->flags) & 1) -#define HasPiece (bBitboardOcc ^ bBitboardK ^ bBitboardP) -#define SixthRank(x) ((x) <= H3) -#define FifthRank(x) ((x) <= H4) -#define FourthRank(x) ((x) <= H5) -#define IsPassedPawn PassedPawnB -#define MyXray (Position->Dyn->bXray) -#define OppXray (Position->Dyn->wXray) -#define MyXrayTable Position->XrayB -#define OppXrayTable Position->XrayW -#define MyKingCheck Position->Dyn->bKcheck -#define MyCount CountBlack -#define CountEvasions count_black_evasions -#define InCheck BlackInCheck -#define OppKdanger wKdanger -#define EighthRank(x) (x <= H1) -#define CaptureRight ((bBitboardP & ~FileH) >> 7) -#define FromLeft(x) (((x) + 7) << 6) -#define CaptureLeft ((bBitboardP & ~FileA) >> 9) -#define FromRight(x) (((x) + 9) << 6) -#define Forward(x) ((x) - 8) -#define ForwardLeft(x) ((x) - 9) -#define ForwardRight(x) ((x) - 7) -#define Backward(x) ((x) + 8) -#define ForwardShift(x) ((x) >> 8) -#define BackShift(x) ((x) << 8) -#define SeventhRank(x) (x <= H2) -#define BackShift2(x) ((x) << 16) -#define Forward2(x) ((x) - 16) -#define SecondRank Rank7 -#define OnThirdRank(x) ((x & 070) == 050) -#define FourthRankBitBoard Rank5 -#define SecondSixthRanks Ranks3to7 -#define BitBoardSeventhRank Rank2 -#define BitBoardEighthRank Rank1 -#define WhiteA7 A2 -#define WhiteH7 H2 -#define CaptureEP CaptureValue[bEnumP][wEnumP] -#define PromQueenCap ((0x28 << 24) + CaptureValue[bEnumP][c]) -#define PromKnightCap ((0x1a << 24) + CaptureValue[bEnumP][c]) -#define CastleOO BlackOO -#define CastleOOO BlackOOO -#define WhiteF1G1 F8G8 -#define WhiteC1D1 C8D8 -#define WhiteB1C1D1 B8C8D8 -#define WhiteE1 E8 -#define WhiteC1 C8 -#define WhiteG1 G8 -#define UnderProm UnderPromBlack -#define OnSecondRank(x) ((x & 070) == 060) -#define CanCaptureRight (((SqSet[fr] & NotH) >> 7) & wBitboardOcc & mask) -#define CanCaptureLeft (((SqSet[fr] & NotA) >> 9) & wBitboardOcc & mask) -#define PawnGuard(x,y) \ - (Position->Dyn->bAtt & SqSet[x] || AttFile((y)) & (bBitboardR | bBitboardQ)) -#define FourthEighthRankNoH (0x0000007f7f7f7f7f) -#define FourthEighthRankNoA (0x000000fefefefefe) -#define BackRight(x) ((x) + 9) -#define BackRight2(x) ((x) + 17) -#define BackRight3(x) ((x) + 25) -#define BackLeft(x) ((x) + 7) -#define BackLeft2(x) ((x) + 15) -#define BackLeft3(x) ((x) + 23) -#define NumberRank5 R4 -#define NumberRank2 R7 -#define NumberRank7 R2 -#define PieceIsMine PieceIsBlack -#define PieceIsOpp PieceIsWhite -#define Backward2(x) ((x) + 16) -#define PieceIsOppPawn(x) ((x == wEnumP) ? 0xffffffffffffffff : 0) \ No newline at end of file diff --git a/Firenzina/board.h b/Firenzina/board.h deleted file mode 100644 index cd663ca..0000000 --- a/Firenzina/board.h +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define File(s) ((s) & 7) -#define Rank(s) ((s) >> 3) -#define From(s) (((s) >> 6) & 077) -#define To(s) ((s) & 077) -typedef enum - { - wEnumOcc, wEnumP, wEnumN, wEnumK, wEnumBL, wEnumBD, wEnumR, wEnumQ, - bEnumOcc, bEnumP, bEnumN, bEnumK, bEnumBL, bEnumBD, bEnumR, bEnumQ - } EnumPieces; -typedef enum - { - A1, B1, C1, D1, E1, F1, G1, H1, A2, B2, C2, D2, E2, F2, G2, H2, - A3, B3, C3, D3, E3, F3, G3, H3, A4, B4, C4, D4, E4, F4, G4, H4, - A5, B5, C5, D5, E5, F5, G5, H5, A6, B6, C6, D6, E6, F6, G6, H6, - A7, B7, C7, D7, E7, F7, G7, H7, A8, B8, C8, D8, E8, F8, G8, H8 - } EnumSquares; -typedef enum - { - R1, R2, R3, R4, R5, R6, R7, R8 - } EnumRanks; -typedef enum - { - FA, FB, FC, FD, FE, FF, FG, FH - } EnumFiles; -#define wBitboardK Position->bitboard[wEnumK] -#define wBitboardQ Position->bitboard[wEnumQ] -#define wBitboardR Position->bitboard[wEnumR] -#define wBitboardBL Position->bitboard[wEnumBL] -#define wBitboardBD Position->bitboard[wEnumBD] -#define wBitboardB (wBitboardBL|wBitboardBD) -#define wBitboardN Position->bitboard[wEnumN] -#define wBitboardP Position->bitboard[wEnumP] -#define wBitboardOcc Position->bitboard[wEnumOcc] -#define bBitboardK Position->bitboard[bEnumK] -#define bBitboardQ Position->bitboard[bEnumQ] -#define bBitboardR Position->bitboard[bEnumR] -#define bBitboardBL Position->bitboard[bEnumBL] -#define bBitboardBD Position->bitboard[bEnumBD] -#define bBitboardB (bBitboardBL|bBitboardBD) -#define bBitboardN Position->bitboard[bEnumN] -#define bBitboardP Position->bitboard[bEnumP] -#define bBitboardOcc Position->bitboard[bEnumOcc] - -#ifdef OneDimensional -#define ShiftLeft45 (LineShift + 0100 * Direction_h1a8) -#define ShiftRight45 (LineShift + 0100 * Direction_a1h8) -#define ShiftAttack (LineShift + 0100 * Direction_horz) -#define ShiftLeft90 (LineShift + 0100 * Direction_vert) -#define AttLeft45 (LineMask + 0100 * 0100 * Direction_h1a8) -#define AttRight45 (LineMask + 0100 * 0100 * Direction_a1h8) -#define AttNormal (LineMask + 0100 * 0100 * Direction_horz) -#define AttLeft90 (LineMask + 0100 * 0100 * Direction_vert) -#else -#define ShiftLeft45 LineShift[Direction_h1a8] -#define ShiftRight45 LineShift[Direction_a1h8] -#define ShiftAttack LineShift[Direction_horz] -#define ShiftLeft90 LineShift[Direction_vert] -#define AttLeft45 LineMask[Direction_h1a8] -#define AttRight45 LineMask[Direction_a1h8] -#define AttNormal LineMask[Direction_horz] -#define AttLeft90 LineMask[Direction_vert] -#endif - -typedef struct - { - uint64 mask, mult, shift; - uint64 *index; - } typeMM; -#define AttRocc(sq, OCC) RookMM[sq].index \ - [((OCC & RookMM[sq].mask) * RookMM[sq].mult) >> RookMM[sq].shift] -#define AttBocc(sq, OCC) BishopMM[sq].index \ - [((OCC & BishopMM[sq].mask) * BishopMM[sq].mult) >> BishopMM[sq].shift] -#define AttB(sq) AttBocc (sq, Position->OccupiedBW) -#define AttR(sq) AttRocc (sq, Position->OccupiedBW) -#define AttFile(sq) (AttR (sq) & FileArray[File (sq)]) -#define AttQ(fr) (AttR(fr) | AttB(fr)) -#define MaxStack 256 -#define NumBytesToCopy (64 + 128 + 32 + 128 + 4) - -struct TP - { - uint8 sq[64]; - uint64 bitboard[16]; - uint64 OccupiedBW, _0, _1, _2; - uint8 XrayW[64], XrayB[64]; - uint8 wtm, wKsq, bKsq, height; - typeDynamic *Dyn, *DynRoot; - uint64 Stack[MaxStack], StackHeight; - uint64 nodes; - -#ifdef RobboBases - uint64 tbhits; -#endif - - uint8 cpu, rp; - bool stop, used; - MutexType padlock[1]; - int ChildCount; - struct TP *parent, *children[MaxCPUs]; - SplitPoint *SplitPoint; - }; -typedef struct TP typePos; \ No newline at end of file diff --git a/Firenzina/common.h b/Firenzina/common.h deleted file mode 100644 index f490ac4..0000000 --- a/Firenzina/common.h +++ /dev/null @@ -1,51 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define TempoValue (4 + ((Position->Dyn->material & 0xff) >> 2)) -#define TempoValue2 (4 + ((Position->Dyn->material & 0xff) >> 2)) -#define EVAL(m, dp) Eval (Position, -0x7fff0000, 0x7fff0000, m, dp) -#define EvalLazy(B, A, p, m) Eval (Position, (B) - (p), (A) + (p), m, depth) -#define EvalQsearch(v, m) EvalLazy ((v), (v), LazyEvalMin, (m)) -#define EvalLowDepth(v, m) EvalLazy ((v), (v), LazyEvalMin, (m)) -#define EvalCutAll(v, m) EvalLazy ((v), (v), LazyEvalMax, (m)) -#define MaxPositional(m) MaxPosGain (Position->sq[From (m)], (m) & 07777) -#define IsRepetition(x) \ - (value > x && Pos0->reversible >= 2 && \ - ((To(move) << 6) | From(move)) == (Pos0 - 1)->move && \ - Position->sq[To(move)] == 0) -#define IsInterpose(x) (x & (1 << 15)) -#define EasySEE(x) (x & 0x300000) -#define PassedPawnPush(to, x) \ - (Position->sq[to] == EnumMyP && x && (BitboardOppP & IsPassedPawn[to]) == 0) -#define PieceIsWhite(pi) (pi <= 7) -#define PieceIsBlack(pi) (pi >= 8) -#define QSearchCondition (new_depth <= 1) -#define LowDepthCondition (new_depth <= 9) -#define LowDepthConditionPV (new_depth <= 9) \ No newline at end of file diff --git a/Firenzina/control.c b/Firenzina/control.c deleted file mode 100644 index 635ae69..0000000 --- a/Firenzina/control.c +++ /dev/null @@ -1,340 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#include "control.h" - -#define Infinity 0x7ffffffffffffff -#define StrTok(p) p = strtok (NULL, " ") - -static sint64 LastMessage; -static sint64 AbsoluteTime, DesiredTime, Increment; -static int Depth; -static bool NewPonderhit; -jmp_buf J; -static sint64 BattleTime, EasyTime, NormalTime; - -void PonderHit() - { - if (!DoPonder) - return; - Ponder_Hit = true; - DoPonder = false; - NewPonderhit = true; - AbsoluteTime += GetClock() - StartClock; - } -void HaltSearch(int d, int rank) - { - Stop = true; - DoPonder = false; - DoInfinite = false; - SuppressInput = true; - IvanAllHalt = true; - if (d == 0) - EndSMP(); - } - -static int DoHashFull(uint64 x) - { - int d; - float c = 0.499f; - typeHash* Trans; - for (d = 0; d < 1000; d++) - { - x = (0xeca97530f2468bd1) * x + 0x43218765edcb09af; - Trans = HashPointer0 (x); - if (Trans->hash && Trans->age == GlobalAge) - c += 1.0f; - } - return (int) c; - } - -void Info(sint64 x) - { - uint64 t, nps, Nodes = 0; - int cpu, rp, hash_full = 0; - clock_t u; - -#ifdef RobboBases - uint64 TBHits = 0; -#endif - - if (x < 0) - return; - DoOutput = true; - - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - Nodes += RootPosition[cpu][rp].nodes; - -#ifdef RobboBases - if (UseRobboBases) - { - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - TBHits += RootPosition[cpu][rp].tbhits; - } -#endif - - u = clock(); - - if (HashFullInfo) - hash_full = DoHashFull (((sint64) u) + x + Nodes); - t = x / 1000; - - if (t == 0) - nps = 0; - else - nps = Nodes / t; - u = ProcessClock() - CPUtime; - - if (NPSInfo) - Send("info time " Type64Bit " nodes " Type64Bit " nps " Type64Bit"\n", t, Nodes, nps * 1000); - - if (HashFullInfo && hash_full) - Send ("info hashfull %d\n", hash_full); - -#ifdef RobboBases - if (UseRobboBases) - { - if (TBHitInfo && TBHits) - Send("info tbhits " Type64Bit"\n", TBHits); - } -#endif - - if (CPULoadInfo) - Send("info cpuload %d\n", (int) MIN(((double) u / (double) ((x - LastMessage) * NumCPUs) * 1000.0), 1000)); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - - if (NPSInfo) - fprintf(log_file, "info time " Type64Bit " nodes " Type64Bit " nps " Type64Bit"\n", t, Nodes, nps * 1000); - - if (HashFullInfo && hash_full) - fprintf(log_file, "info hashfull %d\n", hash_full); - -#ifdef RobboBases - if (UseRobboBases) - { - if (TBHitInfo && TBHits) - fprintf(log_file, " tbhits " Type64Bit, TBHits); - } -#endif - - if (CPULoadInfo) - fprintf(log_file, "info cpuload %d\n", - (int)MIN(((double)u / (double)((x - LastMessage) * NumCPUs) * 1000.0), 1000)); - close_log(); - } -#endif - - LastMessage = x; - CPUtime += u; - } - -void CheckDone(typePos *Position, int d) - { - sint64 x; - if (!RootBestMove) - return; - if (IvanAllHalt) - { - HaltSearch(d, 1); - return; - } - if (SuppressInput) - return; - if (!JumpIsSet) - return; - x = GetClock() - StartClock; - if (d && d == Depth) - { - HaltSearch(d, 1); - return; - } - if (x - LastMessage > 1000000) - Info(x); - if (DoPonder) - goto End; - if (DoInfinite) - goto End; - if (d >= 1 && d < 8) - goto End; - if (x > AbsoluteTime) - { - HaltSearch(d, 1); - return; - } - if (d == 0 && !NewPonderhit) - goto End; - NewPonderhit = false; - - if (!BadMove && x >= BattleTime) - { - HaltSearch(d, 2); - return; - } - if (EasyMove && x >= EasyTime) - { - HaltSearch(d, 3); - return; - } - if (!BattleMove && x >= NormalTime && !BadMove) - { - HaltSearch(d, 4); - return; - } - End: - if (d) - return; - while (TryInput()) - { - Input(Position); - if (d == 0 && !SMPisActive) - return; - } - } - -void TimeManager(sint64 Time, sint64 OppTime, sint64 Increment, int mtg) - { - if (mtg) - { - if (mtg > 25) - mtg = 25; - DesiredTime = Time / mtg + Increment; - AbsoluteTime = (Time * mtg) / ((mtg << 2) - 3) - MIN(1000000, Time / 10); - if (mtg == 1) - AbsoluteTime -= MIN(1000000, AbsoluteTime / 10); - if (AbsoluteTime < 1000) - AbsoluteTime = 1000; - } - else - { - AbsoluteTime = (Time * AbsoluteFactor) / 100 - 10000; - if (AbsoluteTime < 1000) - AbsoluteTime = 1000; - DesiredTime = (Time * DesiredMillis) / 1000 + Increment; - } - if (DesiredTime > AbsoluteTime) - DesiredTime = AbsoluteTime; - if (DesiredTime < 1000) - DesiredTime = 1000; - EasyTime = (DesiredTime * EasyFactor) / 100; - if (Ponder) - EasyTime = (DesiredTime * EasyFactorPonder) / 100; - BattleTime = (DesiredTime * BattleFactor) / 100; - NormalTime = (DesiredTime * NormalFactor) / 100; - } - -void InitSearch(typePos *Position, char *str) - { - char *p; - sint64 wtime = Infinity, btime = Infinity, winc = 0, binc = 0, Time, OppTime, mtg = 0; - int sm = 0; - Depth = 255; - AbsoluteTime = DesiredTime = Infinity; - Stop = false; - DoInfinite = false; - DoPonder = false; - NewPonderhit = false; - DoSearchMoves = false; - LastMessage = 0; - p = strtok(str, " "); - for (StrTok(p); p != NULL; StrTok(p)) - { - if (!strcmp(p, "depth")) - { - StrTok(p); - Depth = MAX(1, atoi(p)); - } - else if (!strcmp(p, "movetime")) - { - StrTok(p); - AbsoluteTime = MAX(1, atoll(p)) * 1000; - } - else if (!strcmp(p, "wtime")) - { - StrTok(p); - wtime = atoll(p) * 1000; - } - else if (!strcmp(p, "winc")) - { - StrTok(p); - winc = atoll(p) * 1000; - } - else if (!strcmp(p, "btime")) - { - StrTok(p); - btime = atoll(p) * 1000; - } - else if (!strcmp(p, "binc")) - { - StrTok(p); - binc = atoll(p) * 1000; - } - else if (!strcmp(p, "movestogo")) - { - StrTok(p); - mtg = atoi(p); - } - else if (!strcmp(p, "infinite")) - DoInfinite = true; - else if (!strcmp(p, "ponder")) - DoPonder = true; - else if (!strcmp(p, "searchmoves")) - DoSearchMoves = true; - else if (DoSearchMoves) - SearchMoves[sm++] = NumericMove(Position, p); - else - ErrorEnd("go string: %s", p); - } - BattleTime = Infinity; - NormalTime = Infinity; - EasyTime = Infinity; - - Time = Position->wtm ? wtime : btime; - OppTime = Position->wtm ? btime : wtime; - if (Time < 0) - Time = 0; - if (Time == Infinity) - goto End; - Increment = Position->wtm ? winc : binc; - TimeManager(Time, OppTime, Increment, mtg); - End: - if (Time == Infinity) - Analysing = true; - else - Analysing = false; - if (DoSearchMoves) - SearchMoves[sm] = MoveNone; - } \ No newline at end of file diff --git a/Firenzina/control.h b/Firenzina/control.h deleted file mode 100644 index 3d1438d..0000000 --- a/Firenzina/control.h +++ /dev/null @@ -1,43 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifdef WINDOWS -#include -#include -#endif - -uint32 RootBestMove; -int RootScore, RootPrevious; -int RootDepth, PreviousDepth, PreviousFast; -extern jmp_buf J; -volatile bool JumpIsSet; -bool EasyMove, BadMove, BattleMove; -uint64 StartClock, CPUtime; -bool Analysing; diff --git a/Firenzina/cut_node.c b/Firenzina/cut_node.c deleted file mode 100644 index ee3a9f9..0000000 --- a/Firenzina/cut_node.c +++ /dev/null @@ -1,493 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef cut_node -#define cut_node -#include "fire.h" -#include "history.h" -#include "null_move.h" -#include "cut_node.c" -#include "white.h" -#else -#include "black.h" -#endif - -#define ValueRed1 (depth) -#define ValueRed2 (depth << 1) - -int MyCut(typePos *Position, int value, int depth) - { - int height, move, i, singular; - TransDeclare(); - int trans_depth, move_depth = 0, trans_move = 0, Value, cnt; - int v, extend, new_depth, move_is_check; - typeNext NextMove[1]; - typeDynamic *Pos0 = Position->Dyn; - uint64 zob = Position->Dyn->Hash; - int to, fr; - bool Split; - - CheckForMate (value); - - (Pos0 + 1)->move = 0; - CheckRepetition(false); - Trans = HashPointer(zob); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (zob >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return 0; - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - (Pos0 + 1)->move = trans_move = move; - } - trans_depth = MAX(trans->DepthLower, trans->DepthUpper); - if (trans->DepthLower >= depth) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - { - if (!((trans->flags & FlagAll) == FlagAll)) - if (MyNull || move) - { - UpdateAge(); - return(Value); - } - } - } - if (trans->DepthUpper >= depth) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - { - UpdateAge(); - return(Value); - } - } - } - } - NextMove->trans_move = trans_move; - if (Pos0->Value >= value && MyNull) - { - new_depth = depth - NullReduction; - new_depth -= ScoreReduction(Pos0->Value - value); - new_depth += KingDangerAdjust(Pos0->wKdanger, Pos0->bKdanger); - v = value; - if (v >= value) - { - MakeNull(Position); - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppAll(Position, 1 - value, new_depth); - UndoNull(Position); - CheckHalt(); - } - if (VerifyNull && v >= value) - { - int Flags = Position->Dyn->flags; - Position->Dyn->flags &= ~3; - new_depth -= VerifyReduction; - if (QSearchCondition) - v = MyQsearch(Position, value, 0); - else if (LowDepthCondition) - v = MyLowDepth(Position, value, new_depth); - else - v = MyCut(Position, value, new_depth); - Position->Dyn->flags = Flags; - CheckHalt(); - } - if (v >= value) - { - if (trans_move == MoveNone) - HashLower(Position->Dyn->Hash, 0, depth, v); - return(v); - } - } - if (trans_move == MoveNone && depth >= 6) - { - new_depth = depth - 4; - if (LowDepthCondition) - v = MyLowDepth(Position, value, new_depth); - else - v = MyCut(Position, value, new_depth); - CheckHalt(); - if (v >= value) - trans_move = (Pos0 + 1)->move; - } - - singular = 0; - if (depth >= MinTransMoveDepth && trans_move && MyOK(Position, trans_move)) - { - v = MyExclude(Position, value - ValueRed1, depth - DepthRed, trans_move & 0x7fff); - CheckHalt(); - if (v < value - ValueRed1) - { - singular++; - height = Height(Position); - if (height << 2 <= depth) - singular++; - v = MyExclude(Position, value - ValueRed2, depth - DepthRed, trans_move & 0x7fff); - CheckHalt(); - if (v < value - ValueRed2) - { - singular++; - if (height << 3 <= depth) - singular++; - } - } - } - cnt = 0; - NextMove->trans_move = trans_move; - NextMove->phase = Trans1; - NextMove->Target = OppOccupied; - if (depth < SearchDepthMin && value - Pos0->Value >= MinDepthMultiplier * (depth - 5)) - { - NextMove->phase = Trans2; - cnt = 1; - if (value - Pos0->Value >= MinDepthMultiplier * (depth - 2)) - NextMove->Target ^= BitboardOppP; - } - NextMove->move = MoveNone; - NextMove->bc = 0; - v = value; - Split = false; - while (true) - { - if (SMPFree != 0 && SplitAtCN && depth >= CNSplitDepth && !Split - && NextMove->phase != Trans1 && cnt >= 1 && NextMove->phase <= Ordinary_Moves) - { - int r; - bool b; - Split = true; - b = IvanSplit(Position, NextMove, depth, value, value, NodeTypeCut, &r); - if (b) - return r; - } - move = MyNext(Position, NextMove); - if (!move) - break; - to = To(move); - fr = From(move); - if (IsRepetition(0)) - { - cnt++; - continue; - } - if (cnt > CountLimit && NextMove->phase == Ordinary_Moves && (move & 0xe000) == 0 && SqSet[fr] & ~MyXray && depth < SearchDepthMin) - { - if ((1 << (depth - SearchDepthReduction)) + MaxPositional(move) + (Pos0->Value) < value + 35 + 2 *cnt) - { - cnt++; - continue; - } - } - move &= 0x7fff; - Make(Position, move); - EvalCutAll(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (MoveIsCheck) - move_is_check = 1; - else - move_is_check = 0; - if (move != NextMove->trans_move) - singular = 0; - extend = 0; - if (move == NextMove->trans_move) - { - if (PassedPawnPush(to, FourthRank(to))) - extend = 1; - } - else - { - if (PassedPawnPush(to, SixthRank(to))) - extend = 1; - } - if (NextMove->trans_move == move && To((Pos1 - 1)->move) == To(Pos1->move) && (Pos1 - 1)->cp != 0) - extend++; - extend = MAX(extend, singular); - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (move_is_check) - { - new_depth = depth - 2 + MAX(1, extend); - v = -OppAllCheck(Position, 1 - value, new_depth); - } - else - { - if (cnt > 2 && depth < SearchDepthMin && NextMove->phase == Ordinary_Moves && - !extend && (2 << (depth - SearchDepthReduction)) - Pos1->Value < value + cnt - UndoCountThreshold) - { - Undo(Position, move); - cnt++; - continue; - } - if (NextMove->phase == Ordinary_Moves && !extend) - { - new_depth = depth - 2 - (4 + BSR(4 + cnt)); - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppAll(Position, 1 - value, new_depth); - if (v < value) - goto Done; - } - new_depth = depth - 2 + extend; - if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppAll(Position, 1 - value, new_depth); - } - Done: - Undo(Position, move); - CheckHalt(); - cnt++; - if (v >= value) - { - if ((Pos0 + 1)->cp == 0 && MoveHistory(move)) - HistoryGood(move, depth); - HashLower(Position->Dyn->Hash, move, depth, v); - return(v); - } - if ((Pos0 + 1)->cp == 0 && MoveHistory(move)) - HistoryBad(move, depth); - } - if (!cnt && NextMove->phase <= Trans2) - return(0); - v = value - 1; - HashUpperCut(Position, depth, v); - return(v); - } -int MyCutCheck(typePos *Position, int value, int depth) - { - int height, move, cnt, Reduction, extend; - int trans_depth, move_depth = 0, trans_move = 0, Value, new_depth, v, i; - TransDeclare(); - typeMoveList List[256], *list, *p, *q; - uint64 zob = Position->Dyn->Hash; - int best_value, singular; - typeDynamic *Pos0 = Position->Dyn; - bool Gen; - - CheckForMate (value); - - (Pos0 + 1)->move = MoveNone; - CheckRepetition(true); - Trans = HashPointer(zob); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (zob >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return(HeightMultiplier * Height(Position) - ValueMate); - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - (Pos0 + 1)->move = trans_move = move; - } - trans_depth = MAX(trans->DepthLower, trans->DepthUpper); - if (trans->DepthLower >= depth) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - { - if (!((trans->flags & FlagAll) == FlagAll)) - { - UpdateAge(); - return(Value); - } - } - } - if (trans->DepthUpper >= depth) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - { - UpdateAge(); - return(Value); - } - } - } - } - if (trans_move && !MyOK(Position, trans_move)) - trans_move = MoveNone; - best_value = HeightMultiplier * Height(Position) - ValueMate; - singular = 0; - if (depth >= MinTransMoveDepth && trans_move) - { - v = MyExcludeCheck(Position, value - depth, depth - DepthRed, trans_move & 0x7fff); - CheckHalt(); - if (v < value - depth) - { - singular++; - height = Height(Position); - if (height << 2 <= depth) - singular++; - v = MyExcludeCheck(Position, value - 2 * depth, depth - DepthRed, trans_move & 0x7fff); - CheckHalt(); - if (v < value - 2 *depth) - { - singular++; - if (height << 3 <= depth) - singular++; - } - } - } - p = List; - List[0].move = trans_move; - cnt = 0; - Gen = false; - List[1].move = 0; - while (p->move || !Gen) - { - if (!p->move) - { - list = MyEvasion(Position, List + 1, 0xffffffffffffffff); - Gen = true; - for (p = list - 1; p >= List + 1; p--) - { - if ((p->move & 0x7fff) == trans_move) - p->move = 0; - else if (p->move <= (0x80 << 24)) - { - if ((p->move & 0x7fff) == Pos0->killer1) - p->move |= 0x7fff8000; - else if ((p->move & 0x7fff) == Pos0->killer2) - p->move |= 0x7fff0000; - else - p->move |= (p->move & 0x7fff) | (HistoryValue(Position, p->move) << 15); - } - move = p->move; - for (q = p + 1; q < list; q++) - { - if (move < q->move) - (q - 1)->move = q->move; - else - break; - } - q--; - q->move = move; - } - p = List + 1; - continue; - } - move = p->move & 0x7fff; - p++; - if (move != trans_move) - singular = 0; - if (IsRepetition(0)) - { - cnt++; - best_value = MAX(0, best_value); - continue; - } - Make(Position, move); - EvalCutAll(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - { - new_depth = depth - 2; - if (singular) - new_depth += singular; - else - new_depth++; - if (LowDepthCondition) - v = -OppLowDepthCheck(Position, 1 - value, new_depth); - else - v = -OppAllCheck(Position, 1 - value, new_depth); - } - else - { - if (cnt >= 1) - { - if (depth > 8) - Reduction = BSR(depth - 7); - else - Reduction = 0; - Reduction += 1 + MIN(cnt, 2); - new_depth = depth + ExtendInCheck - Reduction - 2; - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppAll(Position, 1 - value, new_depth); - if (v < value) - goto Loop; - } - extend = !singular && ExtendInCheck; - new_depth = depth - 2 + extend + singular; - if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppAll(Position, 1 - value, new_depth); - } - Loop: - Undo(Position, move); - CheckHalt(); - if (v > best_value) - best_value = v; - if (v < value) - { - cnt++; - continue; - } - HashLower(Position->Dyn->Hash, move, MAX(1, depth), v); - return(v); - } - HashUpperCut(Position, MAX(1, depth), best_value); - return(best_value); - } \ No newline at end of file diff --git a/Firenzina/endgame.c b/Firenzina/endgame.c deleted file mode 100644 index 49a5033..0000000 --- a/Firenzina/endgame.c +++ /dev/null @@ -1,137 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -#define BishopKnightMate (Position->Dyn->flags & 128) -#define MaxDist(i,j) (MAX (FileDistance (i, j), RankDistance (i, j))) -#define MinDist(i,j) (MIN (FileDistance (i, j), RankDistance (i, j))) -#define WhiteMinorOnly (Position->Dyn->flags & 32) -#define WhiteHasPiece (Position->Dyn->flags & 2) -#define BlackMinorOnly (Position->Dyn->flags & 64) -#define BlackHasPiece (Position->Dyn->flags & 1) - -int EvalEnding(typePos *Position, int Value, uint64 wPatt, uint64 bPatt) - { - - if (BishopKnightMate) - { - if (Value > 0) - { - if (wBitboardBL) - Value -= 20 * MIN(MaxDist(A8, Position->bKsq), MaxDist(H1, Position->bKsq)) - + 10 * MIN(MinDist(A8, Position->bKsq), MinDist(H1, Position->bKsq)); - else - Value -= 20 * MIN(MaxDist(A1, Position->bKsq), MaxDist(H8, Position->bKsq)) - + 10 * MIN(MinDist(A1, Position->bKsq), MinDist(H8, Position->bKsq)); - } - else - { - if (bBitboardBL) - Value += 20 * MIN(MaxDist(A8, Position->wKsq), MaxDist(H1, Position->wKsq)) - + 10 * MIN(MinDist(A8, Position->wKsq), MinDist(H1, Position->wKsq)); - else - Value += 20 * MIN(MaxDist(A1, Position->wKsq), MaxDist(H8, Position->wKsq)) - + 10 * MIN(MinDist(A1, Position->wKsq), MinDist(H8, Position->wKsq)); - } - } - if (Position->Dyn->reversible > 50) - { - Value *= (114 - Position->Dyn->reversible); - Value /= 64; - } - if (Value > 0) - { - if (!Position->wtm && !BlackHasPiece && (bBitboardK ^ bBitboardP) == bBitboardOcc - && !((bBitboardP >> 8) & ~Position->OccupiedBW) && !(bPatt & wBitboardOcc) && !Position->Dyn->ep - && !(AttK[Position->bKsq]& ~Position->Dyn->wAtt) && !Position->Dyn->bKcheck) - Value = 0; - if (WhiteMinorOnly) - { - if (wBitboardN) - { - if (wBitboardP == SqSet[A7] && (bBitboardK | AttK[Position->bKsq]) & SqSet[A8]) - Value = 0; - if (wBitboardP == SqSet[H7] && (bBitboardK | AttK[Position->bKsq]) & SqSet[H8]) - Value = 0; - } - else if (wBitboardBL && !(wBitboardP & NotH) && (bBitboardK | AttK[Position->bKsq]) & SqSet[H8]) - { - if (wBitboardP & SqSet[H5] && bBitboardP == (SqSet[G7] | SqSet[H6])) - ; - else - Value = 0; - } - else if (wBitboardBD && !(wBitboardP & NotA) && (bBitboardK | AttK[Position->bKsq]) & SqSet[A8]) - { - if (wBitboardP & SqSet[A5] && bBitboardP == (SqSet[B7] | SqSet[A6])) - ; - else - Value = 0; - } - if (!wBitboardP) - Value = 0; - } - } - else - { - if (Position->wtm && !WhiteHasPiece && (wBitboardK ^ wBitboardP) == wBitboardOcc - && !((wBitboardP << 8) & ~Position->OccupiedBW) && !(wPatt & bBitboardOcc) && !Position->Dyn->ep - && !(AttK[Position->wKsq]& ~Position->Dyn->bAtt) && !Position->Dyn->wKcheck) - Value = 0; - if (BlackMinorOnly) - { - if (bBitboardN) - { - if (bBitboardP == SqSet[A2] && (wBitboardK | AttK[Position->wKsq]) & SqSet[A1]) - Value = 0; - if (bBitboardP == SqSet[H2] && (wBitboardK | AttK[Position->wKsq]) & SqSet[H1]) - Value = 0; - } - else if (bBitboardBD && !(bBitboardP & NotH) && (wBitboardK | AttK[Position->wKsq]) & SqSet[H1]) - { - if (bBitboardP & SqSet[H4] && wBitboardP == (SqSet[G2] | SqSet[H3])) - ; - else - Value = 0; - } - else if (bBitboardBL && !(bBitboardP & NotA) && (wBitboardK | AttK[Position->wKsq]) & SqSet[A1]) - { - if (bBitboardP & SqSet[A4] && wBitboardP == (SqSet[B2] | SqSet[A3])) - ; - else - Value = 0; - } - if (!bBitboardP) - Value = 0; - } - } - return Value; - } \ No newline at end of file diff --git a/Firenzina/evaluation.c b/Firenzina/evaluation.c deleted file mode 100644 index 7e64cd4..0000000 --- a/Firenzina/evaluation.c +++ /dev/null @@ -1,1289 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#include "evaluation.h" - -#define Ranks78 0xffff000000000000 -#define Ranks678 0xffffff0000000000 -#define Ranks12 0x000000000000ffff -#define Ranks123 0x00000000000ffffff - -#ifdef HasPreFetch -#define PrefetchPawnHash __builtin_prefetch (&PawnPointer, 1, 2); -#else -#define PrefetchPawnHash -#endif - -#define EvalTweak 0x12345678 -#define GetEvalHash(Z) EvalHash[(Z ^ EvalTweak) & EvalHashMask] - -#define QueenEnd ((Position->Dyn->flags & 28) == 4) -#define RookEnd ((Position->Dyn->flags & 28) == 8) - -#define WhiteMinorOnly (8 << 2) -#define BlackMinorOnly (16 << 2) - -typedef struct - { - uint64 RandKey; - uint8 pad[56]; - } RAND; -static RAND Rand[MaxCPUs]; - -uint8 KPwtm[24576] = - { -#include "kp_white.h" - }; -uint8 KPbtm[24576] = - { -#include "kp_black.h" - }; - -static uint32 Random32(int cpu) - { - Rand[cpu].RandKey = Rand[cpu].RandKey * 0x7913cc52088a6cfULL + 0x99f2e6bb0313ca0dULL; - return ((Rand[cpu].RandKey >> 18) & 0xffffffff); - } -void InitRandom32(uint64 x) - { - int cpu; - for (cpu = 0; cpu < MaxCPUs; cpu++) - { - x = x * 0xb18ec564ff729005ULL + 0x86ee25701b5e244fULL; - Rand[cpu].RandKey = x; - } - } -static void AdjustPositionalGain(typePos *Position, int move) - { - int v, p, m; - if (Position->Dyn->cp) - return; - p = Position->sq[To(move)]; - m = move & 07777; - v = ((Position->Dyn - 1)->PositionalValue) - Position->Dyn->PositionalValue; - v = Position->wtm ? v : -v; - if (MaxPosGain(p, m) <= v) - MaxPosGain(p, m) = v; - else - MaxPosGain(p, m)--; - } - -static int MaterialValue(typePos *Position) - { - int Value = QValue * (POPCNT(wBitboardQ) - POPCNT(bBitboardQ)); - Value += RValue * (POPCNT(wBitboardR) - POPCNT(bBitboardR)); - Value += BValue * (POPCNT(wBitboardB) - POPCNT(bBitboardB)); - Value += NValue * (POPCNT(wBitboardN) - POPCNT(bBitboardN)); - Value += PValue * (POPCNT(wBitboardP) - POPCNT(bBitboardP)); - - if (wBitboardBL && wBitboardBD) - Value += BPValue; - if (bBitboardBL && bBitboardBD) - Value -= BPValue; - - Value *= (MaterialWeight << 10) / 100; - Value >>= 10; - return Value; - } -static void KingPawnWhite(typePos *Position, int matval, uint8 Token, typePawnEval *PawnInfo) - { - int Value, WhiteLeader, BlackLeader, sq, rank; - uint8 C; - uint64 A, T, wPatt, bPatt; - if (PawnInfo->PawnHash != Position->Dyn->PawnHash) - PawnEval(Position, PawnInfo); - Position->Dyn->wXray = Position->Dyn->bXray = 0; - Value = ((Position->Dyn->Static)+(PawnInfo->Score)); - Value = (sint16)(Value & 0xffff); - WhiteLeader = 0; - C = PawnInfo->wPassedFiles; - while (C) - { - sq = BSR(FileArray[BSF(C)] & wBitboardP); - rank = Rank(sq); - BitClear(0, C); - if ((ShepherdWK[sq] & wBitboardK) == 0) - { - if (wBitboardOcc & OpenFileW[sq] || (bBitboardK & QuadrantBKwtm[sq]) == 0) - continue; - if (WhiteLeader <= rank) - WhiteLeader = rank; - } - else if (WhiteLeader <= rank) - WhiteLeader = rank; - } - BlackLeader = 0; - C = PawnInfo->bPassedFiles; - while (C) - { - sq = BSF(FileArray[BSF(C)] & bBitboardP); - rank = R8 - Rank(sq); - BitClear(0, C); - if ((ShepherdBK[sq] & bBitboardK) == 0) - { - if (bBitboardOcc & OpenFileB[sq] || (wBitboardK & QuadrantWKwtm[sq]) == 0) - continue; - if (BlackLeader <= rank) - BlackLeader = rank; - } - else if (BlackLeader <= rank) - BlackLeader = rank; - } - Position->Dyn->Value = (Token * (Value + matval)) >> 7; - Position->Dyn->bKcheck = Position->Dyn->wKcheck = 0; - if (WhiteLeader > BlackLeader && (bBitboardP & InFrontB[R8 - WhiteLeader + 1]) == 0) - Position->Dyn->Value += 150 + 50 * WhiteLeader; - if (BlackLeader > WhiteLeader + 1 && (wBitboardP & InFrontW[BlackLeader - 2]) == 0) - Position->Dyn->Value -= 150 + 50 * BlackLeader; - A = (wBitboardP &(~FileA)) << 7; - T = A & bBitboardK; - Position->Dyn->bKcheck |= (T >> 7); - Position->Dyn->wAtt = A; - A = (wBitboardP &(~FileH)) << 9; - T = A & bBitboardK; - Position->Dyn->bKcheck |= (T >> 9); - Position->Dyn->wAtt |= A; - wPatt = Position->Dyn->wAtt; - Position->Dyn->wAtt |= AttK[Position->wKsq]; - A = (bBitboardP &(~FileH)) >> 7; - T = A & wBitboardK; - Position->Dyn->wKcheck |= (T << 7); - Position->Dyn->bAtt = A; - A = (bBitboardP &(~FileA)) >> 9; - T = A & wBitboardK; - Position->Dyn->wKcheck |= (T << 9); - Position->Dyn->bAtt |= A; - bPatt = Position->Dyn->bAtt; - Position->Dyn->bAtt |= AttK[Position->bKsq]; - if (bBitboardK & AttK[Position->wKsq]) - { - Position->Dyn->bKcheck |= SqSet[Position->wKsq]; - Position->Dyn->wKcheck |= SqSet[Position->bKsq]; - } - if (Position->Dyn->Value > 0 && !wBitboardP) - Position->Dyn->Value = 0; - if (Position->Dyn->Value < 0 && !bBitboardP) - Position->Dyn->Value = 0; - if (Position->Dyn->Value > 0) - { - if ((wBitboardP & ~FileH) == 0 && (bBitboardK | AttK[Position->bKsq]) & SqSet[H8]) - Position->Dyn->Value = 0; - if ((wBitboardP & ~FileA) == 0 && (bBitboardK | AttK[Position->bKsq]) & SqSet[A8]) - Position->Dyn->Value = 0; - if ((Position->Dyn->flags & 28) == 28) - { - sq = BSF(wBitboardP); - rank = Rank(sq); - Value = KPwtm[384 * Position->wKsq + 6 * Position->bKsq + rank - 1]&(1 << File(sq)); - if (!Value) - Position->Dyn->Value = 0; - else - Position->Dyn->Value = ((sint16)(Position->Dyn->Static & 0xffff)) + 75 * rank + 250; - } - } - if (Position->Dyn->Value < 0) - { - if ((bBitboardP & ~FileH) == 0 && (wBitboardK | AttK[Position->wKsq]) & SqSet[H1]) - Position->Dyn->Value = 0; - if ((bBitboardP & ~FileA) == 0 && (wBitboardK | AttK[Position->wKsq]) & SqSet[A1]) - Position->Dyn->Value = 0; - if ((Position->Dyn->flags & 28) == 28) - { - sq = H8 - BSR(bBitboardP); - rank = Rank(sq); - Value = KPbtm[384 * (H8 - Position->bKsq) + 6 * (H8 - Position->wKsq) + rank - 1]&(1 << File(sq)); - if (!Value) - Position->Dyn->Value = 0; - else - Position->Dyn->Value = ((sint16)(Position->Dyn->Static & 0xffff)) - 75 * rank - 250; - } - } - if (Position->Dyn->Value < 0 && !((wBitboardP << 8) & ~Position->OccupiedBW) && !(wPatt & bBitboardOcc) - && !Position->Dyn->ep && !(AttK[Position->wKsq]& ~Position->Dyn->bAtt) && !Position->Dyn->wKcheck) - Position->Dyn->Value = 0; - } -static void KingPawnBlack(typePos *Position, int matval, uint8 Token, typePawnEval *PawnInfo) - { - int Value, WhiteLeader, BlackLeader, sq, rank; - uint8 C; - uint64 A, T, wPatt, bPatt; - if (PawnInfo->PawnHash != Position->Dyn->PawnHash) - PawnEval(Position, PawnInfo); - Position->Dyn->wXray = Position->Dyn->bXray = 0; - Value = ((Position->Dyn->Static)+(PawnInfo->Score)); - Value = (sint16)(Value & 0xffff); - WhiteLeader = 0; - C = PawnInfo->wPassedFiles; - while (C) - { - sq = BSR(FileArray[BSF(C)] & wBitboardP); - rank = Rank(sq); - BitClear(0, C); - if ((ShepherdWK[sq] & wBitboardK) == 0) - { - if (wBitboardOcc & OpenFileW[sq] || (bBitboardK & QuadrantBKbtm[sq]) == 0) - continue; - if (WhiteLeader <= rank) - WhiteLeader = rank; - } - else if (WhiteLeader <= rank) - WhiteLeader = rank; - } - BlackLeader = 0; - C = PawnInfo->bPassedFiles; - while (C) - { - sq = BSF(FileArray[BSF(C)] & bBitboardP); - rank = R8 - Rank(sq); - BitClear(0, C); - if ((ShepherdBK[sq] & bBitboardK) == 0) - { - if (bBitboardOcc & OpenFileB[sq] || (wBitboardK & QuadrantWKbtm[sq]) == 0) - continue; - if (BlackLeader <= rank) - BlackLeader = rank; - } - else if (BlackLeader <= rank) - BlackLeader = rank; - } - Position->Dyn->Value = -(Token * (Value + matval)) >> 7; - Position->Dyn->bKcheck = Position->Dyn->wKcheck = 0; - if (WhiteLeader > BlackLeader + 1 && (bBitboardP & InFrontB[R8 - WhiteLeader + 2]) == 0) - Position->Dyn->Value -= 150 + 50 * WhiteLeader; - if (BlackLeader > WhiteLeader && (wBitboardP & InFrontW[BlackLeader - 1]) == 0) - Position->Dyn->Value += 150 + 50 * BlackLeader; - A = (wBitboardP &(~FileA)) << 7; - T = A & bBitboardK; - Position->Dyn->bKcheck |= (T >> 7); - Position->Dyn->wAtt = A; - A = (wBitboardP &(~FileH)) << 9; - T = A & bBitboardK; - Position->Dyn->bKcheck |= (T >> 9); - Position->Dyn->wAtt |= A; - wPatt = Position->Dyn->wAtt; - Position->Dyn->wAtt |= AttK[Position->wKsq]; - A = (bBitboardP &(~FileH)) >> 7; - T = A & wBitboardK; - Position->Dyn->wKcheck |= (T << 7); - Position->Dyn->bAtt = A; - A = (bBitboardP &(~FileA)) >> 9; - T = A & wBitboardK; - Position->Dyn->wKcheck |= (T << 9); - Position->Dyn->bAtt |= A; - bPatt = Position->Dyn->bAtt; - Position->Dyn->bAtt |= AttK[Position->bKsq]; - if (bBitboardK & AttK[Position->wKsq]) - { - Position->Dyn->bKcheck |= SqSet[Position->wKsq]; - Position->Dyn->wKcheck |= SqSet[Position->bKsq]; - } - if (Position->Dyn->Value < 0 && !wBitboardP) - Position->Dyn->Value = 0; - if (Position->Dyn->Value > 0 && !bBitboardP) - Position->Dyn->Value = 0; - if (Position->Dyn->Value < 0) - { - if ((wBitboardP & ~FileH) == 0 && (AttK[Position->bKsq] | bBitboardK) & SqSet[H8]) - Position->Dyn->Value = 0; - if ((wBitboardP & ~FileA) == 0 && (AttK[Position->bKsq] | bBitboardK) & SqSet[A8]) - Position->Dyn->Value = 0; - if ((Position->Dyn->flags & 28) == 28) - { - sq = BSF(wBitboardP); - rank = Rank(sq); - Value = KPbtm[384 * Position->wKsq + 6 * Position->bKsq + rank - 1]&(1 << File(sq)); - if (!Value) - Position->Dyn->Value = 0; - else - Position->Dyn->Value = -((sint16)(Position->Dyn->Static & 0xffff)) - 75 * rank - 250; - } - } - if (Position->Dyn->Value > 0) - { - if ((bBitboardP & ~FileH) == 0 && (AttK[Position->wKsq] | wBitboardK) & SqSet[H1]) - Position->Dyn->Value = 0; - if ((bBitboardP & ~FileA) == 0 && (AttK[Position->wKsq] | wBitboardK) & SqSet[A1]) - Position->Dyn->Value = 0; - if ((Position->Dyn->flags & 28) == 28) - { - sq = H8 - BSR(bBitboardP); - rank = Rank(sq); - Value = KPwtm[384 * (H8 - Position->bKsq) + 6 * (H8 - Position->wKsq) + rank - 1]&(1 << File(sq)); - if (!Value) - Position->Dyn->Value = 0; - else - Position->Dyn->Value = -((sint16)(Position->Dyn->Static & 0xffff)) + 75 * rank + 250; - } - } - if (Position->Dyn->Value < 0 && !((bBitboardP >> 8) & ~Position->OccupiedBW) && !(bPatt & wBitboardOcc) - && !Position->Dyn->ep && !(AttK[Position->bKsq]& ~Position->Dyn->wAtt) && !Position->Dyn->bKcheck) - Position->Dyn->Value = 0; - } - -void Eval(typePos *Position, int min, int max, int move, int depth) - { - typePawnEval *PawnPointer; - int index, matval, Value, MobValue = 0; - int b, rank, antiphase, phase; - int to, cp, wKs, bKs; - uint64 U, wKatt, bKatt, A, AttB, AttR; - sint32 wKhit, bKhit; - uint64 wGoodMinor, bGoodMinor, wSafeMob, bSafeMob, wOKxray, bOKxray; - uint64 T, bPatt, wPatt; - int open, end; - uint8 bGoodAtt, wGoodAtt; - uint8 Token; - int v, positional; - typePawnEval PawnInfo[1]; - int ch; - PawnPointer = PawnHash + (Position->Dyn->PawnHash &(CurrentPHashSize - 1)); - PrefetchPawnHash; - index = (Position->Dyn->material >> 8) & 0x7ffff; - Token = Material[index].token; - Position->Dyn->flags = Material[index].flags; - Position->Dyn->exact = false; - if (!(Position->Dyn->material & 0x80000000)) - matval = Material[index].Value; - else - { - if (POPCNT(wBitboardQ) > 1 || POPCNT(bBitboardQ) > 1 || POPCNT(wBitboardR) > 2 || POPCNT(bBitboardR) > 2 - || POPCNT(wBitboardBL) > 1 || POPCNT(bBitboardBL) > 1 || POPCNT(wBitboardBD) > 1 || POPCNT(bBitboardBD) > 1 - || POPCNT(wBitboardN) > 2 || POPCNT(bBitboardN) > 2) - { - Token = 0x80; - matval = MaterialValue(Position); - Position->Dyn->flags = 0; - if (wBitboardQ | wBitboardR | wBitboardB | wBitboardN) - Position->Dyn->flags |= 2; - if (bBitboardQ | bBitboardR | bBitboardB | bBitboardN) - Position->Dyn->flags |= 1; - } - else - { - matval = Material[index].Value; - Position->Dyn->material &= 0x7fffffff; - } - } - if (((Position->Dyn->Hash ^ GetEvalHash(Position->Dyn->Hash)) & 0xffffffffffff0000) == 0) - { - Value = (int)((sint16)(GetEvalHash(Position->Dyn->Hash) & 0xffff)); - Position->Dyn->lazy = 0; - Mobility(Position); - Position->Dyn->PositionalValue = ((Position->wtm) ? Value : -Value) - matval; - Position->Dyn->Value = Value; - if (move && !(Position->Dyn - 1)->lazy) - AdjustPositionalGain(Position, move); - if (Value > ValueCut || Value < -ValueCut) - Position->Dyn->exact = true; - return; - } - -#ifdef RobboBases - if(UseRobboBases && TripleBasesLoaded && SearchRobboBases - && depth >= TripleWeakProbeDepth && TripleCondition (Position)) - { - int va; - Mobility(Position); - if (TripleValue (Position, &va, depth < TripleDefiniteProbeDepth && - Height (Position) > TripleDefiniteProbeHeight, false)) - { - int c = POPCNT(Position->OccupiedBW); - int molt = 21000 - (c << 7) - (Height(Position) << 6); - - if(va == 0) - Position->Dyn->Value = 0; - else - { - Position->Dyn->Value = (va > 0) ? molt : -molt; - Position->Dyn->Value += (Position->wtm ? matval : -matval); - } - Position->Dyn->lazy = 1; - Position->Dyn->PositionalValue = 0; - GetEvalHash(Position->Dyn->Hash) = - (Position->Dyn->Hash & 0xffffffffffff0000) | (Position->Dyn->Value & 0xffff); - Position->Dyn->exact = true; - return; - } - } -#endif - - memcpy(PawnInfo, PawnPointer, sizeof(typePawnEval)); - PawnInfo->PawnHash ^= (((uint64 *)(PawnInfo)) + 0x1)[0]; - PawnInfo->PawnHash ^= (((uint64 *)(PawnInfo)) + 0x2)[0]; - PawnInfo->PawnHash ^= (((uint64 *)(PawnInfo)) + 0x3)[0]; - if ((Position->Dyn->material & 0xff) == 0) - { - Position->wtm - ? KingPawnWhite(Position, matval, Token, PawnInfo) : KingPawnBlack(Position, matval, Token, PawnInfo); - Position->Dyn->lazy = 1; - Position->Dyn->PositionalValue = 0; - if (Position->Dyn->Value == 0) - Position->Dyn->Value = 1; - GetEvalHash(Position->Dyn->Hash) = - (Position->Dyn->Hash & 0xffffffffffff0000) | (Position->Dyn->Value & 0xffff); - return; - } - if ((Position->Dyn->flags & WhiteMinorOnly || Position->Dyn->flags & BlackMinorOnly) - && PawnInfo->PawnHash != Position->Dyn->PawnHash) - PawnEval(Position, PawnInfo); - if ((Position->Dyn->flags & WhiteMinorOnly && PawnInfo->wPfile_count <= 1) - || (Position->Dyn->flags & BlackMinorOnly && PawnInfo->bPfile_count <= 1) - || (Position->Dyn->flags & 128)); - else - { - if (Position->wtm) - { - positional = (Position->Dyn - 1)->PositionalValue; - cp = Position->Dyn->cp; - to = To(move); - Value = PST(Position->sq[to], to) - PST(Position->sq[to], From(move)); - if (cp) - Value -= PST(cp, to); - phase = MIN(Position->Dyn->material & 0xff, 32); - end = (sint16)(Value & 0xffff); - open = (end < 0) + (sint16)((Value >> 16) & 0xffff); - antiphase = 32 - phase; - Value = (end * antiphase + open * phase) >> 5; - positional += Value; - v = positional + matval; - if (v < -max - (int)((Position->Dyn - 1)->lazy << 4) || v > -min + (int)((Position->Dyn - 1)->lazy << 4)) - { - Position->Dyn->lazy = (Position->Dyn - 1)->lazy + 1; - Position->Dyn->Value = v; - Position->Dyn->PositionalValue = positional; - Mobility(Position); - return; - } - } - else - { - positional = (Position->Dyn - 1)->PositionalValue; - cp = Position->Dyn->cp; - to = To(move); - Value = PST(Position->sq[to], to) - PST(Position->sq[to], From(move)); - if (cp) - Value -= PST(cp, to); - phase = MIN(Position->Dyn->material & 0xff, 32); - end = (sint16)(Value & 0xffff); - open = (end < 0) + (sint16)((Value >> 16) & 0xffff); - antiphase = 32 - phase; - Value = (end * antiphase + open * phase) >> 5; - positional += Value; - v = positional + matval; - if (v < min - (int)((Position->Dyn - 1)->lazy << 4) || v > max + (int)((Position->Dyn - 1)->lazy << 4)) - { - Position->Dyn->lazy = (Position->Dyn - 1)->lazy + 1; - Position->Dyn->Value = -v; - Position->Dyn->PositionalValue = positional; - Mobility(Position); - return; - } - } - } - wKs = Position->wKsq; - bKs = Position->bKsq; - wKatt = AttK[wKs]; - bKatt = AttK[bKs]; - bGoodAtt = wGoodAtt = 0; - if (PawnInfo->PawnHash != Position->Dyn->PawnHash) - PawnEval(Position, PawnInfo); - Value = (PawnInfo->Score); - end = (sint16)(Position->Dyn->Static & 0xffff); - open = (end < 0) + (sint16)((Position->Dyn->Static >> 16) & 0xffff); - open *= (PSTWeight << 10) / 100; - open >>= 10; - end *= (PSTWeight << 10) / 100; - end >>= 10; - Value += Score(open, end); - Position->Dyn->wXray = 0; - A = (wBitboardP &(~FileA)) << 7; - T = A & bBitboardK; - Position->Dyn->bKcheck = (T >> 7); - wPatt = A; - A = (wBitboardP &(~FileH)) << 9; - T = A & bBitboardK; - Position->Dyn->bKcheck |= (T >> 9); - wPatt |= A; - Position->Dyn->wAtt = wPatt; - A = (bBitboardP &(~FileH)) >> 7; - T = A & wBitboardK; - Position->Dyn->wKcheck = (T << 7); - bPatt = A; - A = (bBitboardP &(~FileA)) >> 9; - T = A & wBitboardK; - Position->Dyn->wKcheck |= (T << 9); - bPatt |= A; - Position->Dyn->bAtt = bPatt; - bOKxray = (~bBitboardP) &~wPatt; - wOKxray = (~wBitboardP) &~bPatt; - wGoodMinor = (wBitboardN | wBitboardB) & wPatt; - bGoodMinor = (bBitboardN | bBitboardB) & bPatt; - if (wPatt & bKatt) - bKhit = HitP; - else - bKhit = 0; - U = (Position->OccupiedBW >> 8) & wBitboardP; - MobValue -= POPCNT(U) * PawnAntiMobility; - wSafeMob = ~(bPatt | wBitboardOcc); - U = wBitboardQ; - while (U) - { - b = BSF(U); - BitClear(b, U); - AttB = AttB(b); - AttR = AttR(b); - if (bBitboardK & Diag[b]) - { - T = AttB(bKs) & AttB; - if (T) - { - Value += wQxrayD[Position->sq[BSF(T)]]; - Position->Dyn->wXray |= T; - Position->XrayW[BSF(T)] = b; - } - } - else if (bBitboardK & Ortho[b]) - { - T = AttR(bKs) & AttR; - if (T) - { - Value += wQxrayO[Position->sq[BSF(T)]]; - Position->Dyn->wXray |= T; - Position->XrayW[BSF(T)] = b; - } - } - A = AttB | AttR; - T = A & wSafeMob; - Position->Dyn->wAtt |= A; - if (A & bKatt) - bKhit += HitQ; - if (A & bBitboardK) - Position->Dyn->bKcheck |= SqSet[b]; - if (A & wKatt) - Value += QguardK; - MobValue += MobQ(T); - if (A &(~bPatt) & bBitboardOcc) - Value += Qatt; - if (bBitboardP & AttPb[b]) - { - Value -= PattQ; - bGoodAtt += 1; - } - if (Rank(b) == R7) - { - if ((bBitboardP | bBitboardK) & Ranks78) - { - Value += Queen7th; - if (wBitboardR & Rank7 & AttR && bBitboardK & Rank8) - Value += DoubQueen7th; - } - } - } - U = wBitboardR; - while (U) - { - b = BSF(U); - BitClear(b, U); - A = AttR(b); - Position->Dyn->wAtt |= A; - if (bBitboardK & Ortho[b]) - { - T = AttR(bKs) & A; - if (T) - { - Value += wRxray[Position->sq[BSF(T)]]; - Position->Dyn->wXray |= T; - Position->XrayW[BSF(T)] = b; - } - } - - if (A & bKatt) - bKhit += HitR; - if (A & bBitboardK) - Position->Dyn->bKcheck |= SqSet[b]; - if (A & wKatt) - Value += RguardK; - MobValue += MobR(A & wOKxray); - if (A &(~bPatt) & bBitboardP) - Value += RattP; - if (A &((bBitboardN | bBitboardB) & ~bPatt)) - Value += RattBN; - if (A & bBitboardQ) - { - Value += RattQ; - wGoodAtt += 1; - } - if (bBitboardP & AttPb[b]) - { - Value -= PattR; - bGoodAtt += 1; - } - - if ((wBitboardP &OpenFileW[b]) == 0) - { - Value += RookHalfOpen; - if ((bBitboardP & OpenFileW[b]) == 0) - { - T = bGoodMinor & OpenFileW[b]; - if (!T) - Value += RookOpenFile; - else - { - int t = BSF(T); - if ((IsolatedFiles[File(t)] & InFrontB[Rank(t)] & wBitboardP) == 0) - Value += RookOpenFixedMinor; - else - Value += RookOpenMinor; - } - } - else - { - T = OpenFileW[b] & bBitboardP; - if (T) - { - int t = BSF(T); - if ((IsolatedFiles[File(t)] & InFrontW[Rank(t)] & bBitboardP) == 0) - Value += RookHalfOpenPawn; - } - } - if (bBitboardK & OpenFileW[b]) - Value += RookHalfOpenKing; - } - if (SqSet[b] & wOutpost && (IsolatedFiles[File(b)] & InFrontW[Rank(b)] & bBitboardP) == 0) - { - if (wBitboardP & AttPw[b]) - { - Value += OutpostRook; - if (A &(bKatt | (bBitboardOcc & ~bPatt)) & RankArray[Rank(b)]) - Value += OutpostRookGuarded; - } - } - if (Rank(b) == R8) - { - if (bBitboardK & Rank8) - Value += RookKing8th; - } - if (Rank(b) == R7) - { - if ((bBitboardP | bBitboardK) & Ranks78) - { - Value += Rook7thKingPawn; - if (bBitboardK & Rank8 && (wBitboardQ | wBitboardR) & Rank7 & A) - Value += DoubRook7thKingPawn; - } - } - if (Rank(b) == R6 && (bBitboardP | bBitboardK) & Ranks678) - Value += Rook6thKingPawn; - } - wSafeMob |= bBitboardOcc ^ bBitboardP; - U = wBitboardB; - while (U) - { - b = BSF(U); - BitClear(b, U); - A = AttB(b); - Position->Dyn->wAtt |= A; - if (bBitboardK & Diag[b]) - { - T = AttB(bKs) & A; - if (T) - { - Value += wBxray[Position->sq[BSF(T)]]; - Position->Dyn->wXray |= T; - Position->XrayW[BSF(T)] = b; - } - } - - if (A & bKatt) - bKhit += HitB; - if (A & bBitboardK) - Position->Dyn->bKcheck |= SqSet[b]; - if (A & wKatt) - Value += BguardK; - MobValue += MobB(A & wSafeMob, InFrontW[Rank(b)]); - if (A &(~bPatt) & bBitboardP) - Value += bAttP; - if (A &(~bPatt) & bBitboardN) - Value += bAttN; - if (A &(bBitboardR | bBitboardQ)) - { - Value += bAttRQ; - wGoodAtt += 1; - } - if (bBitboardP & AttPb[b]) - { - Value -= PattB; - bGoodAtt += 1; - } - if (SqSet[b] & White) - { - Value -= (PawnInfo->wPlight + (PawnInfo->bPlight >> 1)) * Score(1, 1); - Value += POPCNT(bBitboardP & White & InFrontB[Rank(b)] & ~bPatt) * Score(0, 2); - } - else - { - Value -= (PawnInfo->wPdark + (PawnInfo->bPdark >> 1)) * Score(1, 1); - Value += POPCNT(bBitboardP & Black & InFrontB[Rank(b)] & ~bPatt) * Score(0, 2); - } - if (SqSet[b] & wOutpost && (IsolatedFiles[File(b)] & InFrontW[Rank(b)] & bBitboardP) == 0) - { - if (wBitboardP & AttPw[b]) - { - Value += OutpostBishop; - if (A &(bKatt | (bBitboardOcc & ~bPatt))) - Value += OutpostBishopGuarded; - } - } - if (Position->sq[BishopTrapSq[b]] == bEnumP) - { - Value -= BishopTrapValue; - if (Position->sq[GoodBishopTrapSq[b]] == bEnumP) - Value -= BishopTrapGuardValue; - } - } - U = wBitboardN; - while (U) - { - b = BSF(U); - BitClear(b, U); - A = AttN[b]; - Position->Dyn->wAtt |= A; - if (A &(bKatt | bBitboardK)) - bKhit += HitN; - if (A & bBitboardK) - Position->Dyn->bKcheck |= SqSet[b]; - if (A &(wKatt | wBitboardK)) - Value += NguardK; - MobValue += MobN(A & wSafeMob, InFrontW[Rank(b)]); - if (Rank(b) <= R4 && Position->sq[b + 24] == bEnumP) - Value -= Score(R5 - Rank(b), R5 - Rank(b)); - if (A &(~bPatt) & bBitboardP) - Value += NattP; - if (A &(~bPatt) & bBitboardB) - Value += NattB; - if (A &(bBitboardR | bBitboardQ)) - { - Value += NattRQ; - wGoodAtt += 1; - } - if (bBitboardP & AttPb[b]) - { - Value -= PattN; - bGoodAtt += 1; - } - if (SqSet[b] & wOutpost && (IsolatedFiles[File(b)] & InFrontW[Rank(b)] & bBitboardP) == 0) - { - Value += OutpostKnight; - if (wBitboardP & AttPw[b]) - { - Value += OutpostKnightPawn; - if (A &(bKatt | (bBitboardOcc & ~bPatt))) - { - Value += OutpostKnightAttacks; - if (Rank(b) == R5) - Value += OutpostKnight5th; - if (File(b) == FD || File(b) == FE) - Value += OutpostKnightONde; - } - } - } - } - if (bPatt & wKatt) - wKhit = HitP; - else - wKhit = 0; - U = (Position->OccupiedBW << 8) & bBitboardP; - Position->Dyn->bXray = 0; - MobValue += POPCNT(U) * PawnAntiMobility; - bSafeMob = ~(wPatt | bBitboardOcc); - U = bBitboardQ; - while (U) - { - b = BSF(U); - BitClear(b, U); - AttB = AttB(b); - AttR = AttR(b); - if (wBitboardK & Diag[b]) - { - T = AttB(wKs) & AttB; - if (T) - { - Value -= bQxrayD[Position->sq[BSF(T)]]; - Position->Dyn->bXray |= T; - Position->XrayB[BSF(T)] = b; - } - } - else if (wBitboardK & Ortho[b]) - { - T = AttR(wKs) & AttR; - if (T) - { - Value -= bQxrayO[Position->sq[BSF(T)]]; - Position->Dyn->bXray |= T; - Position->XrayB[BSF(T)] = b; - } - } - A = AttB | AttR; - T = A & bSafeMob; - Position->Dyn->bAtt |= A; - if (A & wKatt) - wKhit += HitQ; - if (A & wBitboardK) - Position->Dyn->wKcheck |= SqSet[b]; - if (A & bKatt) - Value -= QguardK; - MobValue -= MobQ(T); - if (A &(~wPatt) & wBitboardOcc) - Value -= Qatt; - if (wBitboardP & AttPw[b]) - { - Value += PattQ; - wGoodAtt += 1; - } - if (Rank(b) == R2) - { - if ((wBitboardP | wBitboardK) & Ranks12) - { - Value -= Queen7th; - if (bBitboardR & Rank2 & AttR && wBitboardK & Rank1) - Value -= DoubQueen7th; - } - } - } - U = bBitboardR; - while (U) - { - b = BSF(U); - BitClear(b, U); - A = AttR(b); - Position->Dyn->bAtt |= A; - if (wBitboardK & Ortho[b]) - { - T = A & AttR(wKs); - if (T) - { - Value -= bRxray[Position->sq[BSF(T)]]; - Position->Dyn->bXray |= T; - Position->XrayB[BSF(T)] = b; - } - } - - if (A & wKatt) - wKhit += HitR; - if (A & wBitboardK) - Position->Dyn->wKcheck |= SqSet[b]; - if (A & bKatt) - Value -= RguardK; - MobValue -= MobR(A & bOKxray); - if (A &(~wPatt) & wBitboardP) - Value -= RattP; - if (A &(wBitboardN | wBitboardB) & ~wPatt) - Value -= RattBN; - if (A & wBitboardQ) - { - Value -= RattQ; - bGoodAtt += 1; - } - if (wBitboardP & AttPw[b]) - { - Value += PattR; - wGoodAtt += 1; - } - - if ((bBitboardP & OpenFileB[b]) == 0) - { - Value -= RookHalfOpen; - if ((wBitboardP & OpenFileB[b]) == 0) - { - T = wGoodMinor & OpenFileB[b]; - if (!T) - Value -= RookOpenFile; - else - { - int t = BSR(T); - if ((IsolatedFiles[File(t)] & InFrontW[Rank(t)] & bBitboardP) == 0) - Value -= RookOpenFixedMinor; - else - Value -= RookOpenMinor; - } - } - else - { - T = OpenFileB[b] & wBitboardP; - if (T) - { - int t = BSR(T); - if ((IsolatedFiles[File(t)] & InFrontB[Rank(t)] & wBitboardP) == 0) - Value -= RookHalfOpenPawn; - } - } - if (wBitboardK & OpenFileB[b]) - Value -= RookHalfOpenKing; - } - if (SqSet[b] & bOutpost && (IsolatedFiles[File(b)] & InFrontB[Rank(b)] & wBitboardP) == 0) - { - if (bBitboardP & AttPb[b]) - { - Value -= OutpostRook; - if (A &(wKatt | (wBitboardOcc & ~wPatt)) & RankArray[Rank(b)]) - Value -= OutpostRookGuarded; - } - } - if (Rank(b) == R1) - { - if (wBitboardK & Rank1) - Value -= RookKing8th; - } - if (Rank(b) == R2) - { - if ((wBitboardP | wBitboardK) & Ranks12) - { - Value -= Rook7thKingPawn; - if (wBitboardK & Rank1 && (bBitboardQ | bBitboardR) & Rank2 & A) - Value -= DoubRook7thKingPawn; - } - } - if (Rank(b) == R3 && (wBitboardP | wBitboardK) & Ranks123) - Value -= Rook6thKingPawn; - } - bSafeMob |= wBitboardOcc ^ wBitboardP; - U = bBitboardB; - while (U) - { - b = BSF(U); - BitClear(b, U); - A = AttB(b); - Position->Dyn->bAtt |= A; - if (wBitboardK & Diag[b]) - { - T = A & AttB(wKs); - if (T) - { - Value -= bBxray[Position->sq[BSF(T)]]; - Position->Dyn->bXray |= T; - Position->XrayB[BSF(T)] = b; - } - } - - if (A & wKatt) - wKhit += HitB; - if (A & wBitboardK) - Position->Dyn->wKcheck |= SqSet[b]; - if (A & bKatt) - Value -= BguardK; - MobValue -= MobB(A & bSafeMob, InFrontB[Rank(b)]); - if (A &(~wPatt) & wBitboardP) - Value -= bAttP; - if (A &(~wPatt) & wBitboardN) - Value -= bAttN; - if (A &(wBitboardR | wBitboardQ)) - { - Value -= bAttRQ; - bGoodAtt += 1; - } - if (wBitboardP & AttPw[b]) - { - Value += PattB; - wGoodAtt += 1; - } - if (SqSet[b] & White) - { - Value += (PawnInfo->bPlight + (PawnInfo->wPlight >> 1)) * Score(1, 1); - Value -= POPCNT(wBitboardP & White & InFrontW[Rank(b)] & ~wPatt) * Score(0, 2); - } - else - { - Value += (PawnInfo->bPdark + (PawnInfo->wPdark >> 1)) * Score(1, 1); - Value -= POPCNT(wBitboardP & Black & InFrontW[Rank(b)] & ~wPatt) * Score(0, 2); - } - if (SqSet[b] & bOutpost && (IsolatedFiles[File(b)] & InFrontB[Rank(b)] & wBitboardP) == 0) - { - if (bBitboardP & AttPb[b]) - { - Value -= OutpostBishop; - if (A &(wKatt | (wBitboardOcc & ~wPatt))) - Value -= OutpostBishopGuarded; - } - } - if (Position->sq[BishopTrapSq[b]] == wEnumP) - { - Value += BishopTrapValue; - if (Position->sq[GoodBishopTrapSq[b]] == wEnumP) - { - Value += BishopTrapGuardValue; - } - } - } - U = bBitboardN; - while (U) - { - b = BSF(U); - BitClear(b, U); - A = AttN[b]; - Position->Dyn->bAtt |= A; - if (A &(wKatt | wBitboardK)) - wKhit += HitN; - if (A & wBitboardK) - Position->Dyn->wKcheck |= SqSet[b]; - if (A &(bKatt | bBitboardK)) - Value -= NguardK; - MobValue -= MobN(A & bSafeMob, InFrontB[Rank(b)]); - if (Rank(b) >= R5 && Position->sq[b - 24] == wEnumP) - Value += Score(Rank(b) - R4, Rank(b) - R4); - if (A &(~wPatt) & wBitboardP) - Value -= NattP; - if (A &(~wPatt) & wBitboardB) - Value -= NattB; - if (A &(wBitboardR | wBitboardQ)) - { - Value -= NattRQ; - bGoodAtt += 1; - } - if (wBitboardP & AttPw[b]) - { - Value += PattN; - wGoodAtt += 1; - } - if (SqSet[b] & bOutpost && (IsolatedFiles[File(b)] & InFrontB[Rank(b)] & wBitboardP) == 0) - { - Value -= OutpostKnight; - if (bBitboardP & AttPb[b]) - { - Value -= OutpostKnightPawn; - if (A &(wKatt | (wBitboardOcc & ~wPatt))) - { - Value -= OutpostKnightAttacks; - if (Rank(b) == R4) - Value -= OutpostKnight5th; - if (File(b) == FD || File(b) == FE) - Value -= OutpostKnightONde; - } - } - } - } - end = (sint16)(MobValue & 0xffff); - open = (end < 0) + (sint16)((MobValue >> 16) & 0xffff); - open *= (MobilityWeight << 10) / 100; - open >>= 10; - end *= (MobilityWeight << 10) / 100; - end >>= 10; - MobValue = Score(open, end); - Value += MobValue; - Position->Dyn->wAtt |= wKatt; - Position->Dyn->bAtt |= bKatt; - if (bKatt & wBitboardK) - { - Position->Dyn->wKcheck |= SqSet[Position->bKsq]; - Position->Dyn->bKcheck |= SqSet[Position->wKsq]; - } - if ((~Position->Dyn->bAtt) &wKatt & bBitboardP) - Value += KingAttUnguardedPawn; - T = RookTrapped[wKs] & wBitboardR; - if (T) - { - int t = BSF(T); - T = OpenFileW[t] & wBitboardP; - if (T) - { - t = BSF(T); - t >>= 3; - Value -= Score(10 * (6 - t), 0); - } - } - phase = MIN(Position->Dyn->material & 0xff, 32); - if (wKatt & bKatt) - wKhit += HitK; - ch = (((KingSafetyMult[wKhit >> 16] * (wKhit & 0xffff)) / KingSafetyDivider) << 16) + PawnInfo->wKdanger; - ch >>= 16; - ch *= (KingSafetyWeight << 10) / 100; - ch >>= 10; - ch <<= 16; - if (!bBitboardQ) - { - ch >>= 16; - ch *= POPCNT(bBitboardR | bBitboardN | bBitboardB); - ch >>= 3; - ch <<= 16; - } - Position->Dyn->wKdanger = (uint8)(((uint32)(ch * phase)) >> 23); - Value -= ch; - if ((~Position->Dyn->wAtt) &bKatt & wBitboardP) - { - Value -= KingAttUnguardedPawn; - } - T = RookTrapped[bKs] & bBitboardR; - if (T) - { - int t = BSR(T); - T = OpenFileB[t] & bBitboardP; - if (T) - { - t = BSR(T); - t >>= 3; - Value += Score(10 * (t - 1), 0); - } - } - if (wKatt & bKatt) - bKhit += HitK; - ch = (((KingSafetyMult[bKhit >> 16] * (bKhit & 0xffff)) / KingSafetyDivider) << 16) + PawnInfo->bKdanger; - ch >>= 16; - ch *= (KingSafetyWeight << 10) / 100; - ch >>= 10; - ch <<= 16; - if (!wBitboardQ) - { - ch >>= 16; - ch *= POPCNT(wBitboardR | wBitboardN | wBitboardB); - ch >>= 3; - ch <<= 16; - } - Position->Dyn->bKdanger = (uint8)(((uint32)(ch * phase)) >> 23); - Value += ch; - if (wGoodAtt >= 2) - Value += MultipleAtt; - if (bGoodAtt >= 2) - Value -= MultipleAtt; - - if ((wBitboardR | wBitboardQ) & CrampFile[File(bKs)]) - { - Value += Score(0, 5); - if ((CrampFile[File(bKs)]&(wBitboardP | bBitboardP)) == 0) - Value += Score(5, 15); - } - if ((bBitboardR | bBitboardQ) & CrampFile[File(wKs)]) - { - Value -= Score(0, 5); - if ((CrampFile[File(wKs)]&(bBitboardP | wBitboardP)) == 0) - Value -= Score(5, 15); - } - U = PawnInfo->wPassedFiles; - while (U) - { - b = BSR(FileArray[BSF(U)] & wBitboardP); - BitClear(0, U); - rank = Rank(b); - if (rank <= R3) - continue; - if (RookEnd) - { - if (wBitboardR & OpenFileW[b]) - { - if (rank == R7) - Value -= Rook7thEnd; - else if (rank == R6) - Value -= Rook6thEnd; - } - if (OpenFileW[b] & wBitboardK && CrampFile[File(wKs)] & bBitboardR) - Value -= Score(0, 1 << (rank - R2)); - } - if (Position->sq[b + 8] == 0) - Value += PassedPawnCanMove[rank]; - if ((OpenFileW[b] & wBitboardOcc) == 0) - Value += PassedPawnMeClear[rank]; - if ((OpenFileW[b] & bBitboardOcc) == 0) - Value += PassedPawnOppClear[rank]; - if ((OpenFileW[b]&(~Position->Dyn->wAtt) & Position->Dyn->bAtt) == 0) - Value += PassedPawnIsFree[rank]; - if (QueenEnd) - { - if (rank == R7 && wBitboardQ & OpenFileW[b]) - Value -= Queen7thEnd; - Value += RankQueenEnd[rank]; - } - } - U = PawnInfo->bPassedFiles; - while (U) - { - b = BSF(FileArray[BSF(U)] & bBitboardP); - BitClear(0, U); - rank = Rank(b); - if (rank >= R6) - continue; - if (RookEnd) - { - if (bBitboardR & OpenFileB[b]) - { - if (rank == R2) - Value += Rook7thEnd; - else if (rank == R3) - Value += Rook6thEnd; - } - if (OpenFileB[b] & bBitboardK && CrampFile[File(bKs)] & wBitboardR) - Value += Score(0, 1 << (R7 - rank)); - } - if (Position->sq[b - 8] == 0) - Value -= PassedPawnCanMove[7 - rank]; - if ((OpenFileB[b] & bBitboardOcc) == 0) - Value -= PassedPawnMeClear[7 - rank]; - if ((OpenFileB[b] & wBitboardOcc) == 0) - Value -= PassedPawnOppClear[7 - rank]; - if ((OpenFileB[b] & Position->Dyn->wAtt & ~Position->Dyn->bAtt) == 0) - Value -= PassedPawnIsFree[7 - rank]; - if (QueenEnd) - { - if (rank == R2 && bBitboardQ & OpenFileB[b]) - Value += Queen7thEnd; - Value -= RankQueenEnd[7 - rank]; - } - } - end = (sint16)(Value & 0xffff); - open = (end < 0) + (sint16)((Value >> 16) & 0xffff); - antiphase = 32 - phase; - Value = end * antiphase + open * phase; - Value = ((Value >> 5) * PositionalWeight / 100) + matval; - Value = (Value * Token) >> 7; - if (Value > 0) - Value -= ((PawnInfo->wDrawWeight * MIN(Value, 100)) >> 6) * DrawWeight / 100; - else - Value += ((PawnInfo->bDrawWeight * MIN(-Value, 100)) >> 6) * DrawWeight / 100; - - Value = EvalEnding(Position, Value, wPatt, bPatt); - if (RandomCount) - { - uint32 r; - int n, adj = 0; - int mask = (1 << RandomBits) - 1; - r = Random32(Position->cpu); - for (n = 0; n < RandomCount; n++) - { - adj = r & mask; - r >>= RandomBits; - Value += (r & 1) ? adj : -adj; - r >>= 1; - } - } - Position->Dyn->Value = Position->wtm ? Value : -Value; - Position->Dyn->PositionalValue = Value - matval; - Position->Dyn->lazy = 0; - GetEvalHash(Position->Dyn->Hash) = (Position->Dyn->Hash & 0xffffffffffff0000) | (Position->Dyn->Value & 0xffff); - if (move && !(Position->Dyn - 1)->lazy) - AdjustPositionalGain(Position, move); - } \ No newline at end of file diff --git a/Firenzina/evaluation.h b/Firenzina/evaluation.h deleted file mode 100644 index c86d3c2..0000000 --- a/Firenzina/evaluation.h +++ /dev/null @@ -1,253 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define wOutpost 0x00007e7e7e000000 -#define bOutpost 0x0000007e7e7e0000 -#define Bitboard2(x, y) (1ULL << (x))|(1ULL << (y)) -static const uint64 RookTrapped[64] = - { - 0, Bitboard2 (A1, A2), Bitboard2 (A1, A2) | Bitboard2 (B1, B2), 0, - 0, Bitboard2 (H1, H2) | Bitboard2 (G1, G2), Bitboard2 (H1, H2), 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 0, Bitboard2 (A8, A7), Bitboard2 (A8, A7) | Bitboard2 (B8, B7), 0, - 0, Bitboard2 (H8, H7) | Bitboard2 (G8, G7), Bitboard2 (H8, H7), 0 - }; -#define Score(x,y) (((x) << 16) + (y)) - -#define PawnAntiMobility Score (3, 10) -#define MobQ(Y) Score (2, 2) * POPCNT (Y) -#define MobB(Y, Z) Score (5, 5) * POPCNT (Y & Z) -#define MobR(Y) Score (2, 3) * POPCNT (Y) -#define MobN(Y, Z) Score (6, 8) * POPCNT (Y & Z) -#define xrayB0 Score(0, 0) -#define xrayBmP Score(3, 5) -#define xrayBmN Score(3, 5) -#define xrayBmK Score(3, 5) -#define xrayBmB Score(0, 0) -#define xrayBmR Score(3, 5) -#define xrayBmQ Score(0, 0) -#define xrayBoP Score(2, 5) -#define xrayBoN Score(2, 5) -#define xrayBoK Score(0, 0) -#define xrayBoB Score(0, 0) -#define xrayBoR Score(15, 25) -#define xrayBoQ Score(10, 20) -#define xrayR0 Score(0, 0) -#define xrayRmP Score(0, 0) -#define xrayRmN Score(3, 5) -#define xrayRmK Score(3, 5) -#define xrayRmB Score(3, 5) -#define xrayRmR Score(0, 0) -#define xrayRmQ Score(0, 0) -#define xrayRoP Score(2, 5) -#define xrayRoN Score(2, 5) -#define xrayRoK Score(0, 0) -#define xrayRoB Score(2, 5) -#define xrayRoR Score(0, 0) -#define xrayRoQ Score(10, 20) -static const uint32 wBxray[16] = - { - xrayB0, xrayBmP, xrayBmN, xrayBmK, xrayBmB, xrayBmB, xrayBmR, xrayBmQ, - xrayB0, xrayBoP, xrayBoN, xrayBoK, xrayBoB, xrayBoB, xrayBoR, xrayBoQ - }; -static const uint32 bBxray[16] = - { - xrayB0, xrayBoP, xrayBoN, xrayBoK, xrayBoB, xrayBoB, xrayBoR, xrayBoQ, - xrayB0, xrayBmP, xrayBmN, xrayBmK, xrayBmB, xrayBmB, xrayBmR, xrayBmQ - }; -static const uint32 wRxray[16] = - { - xrayR0, xrayRmP, xrayRmN, xrayRmK, xrayRmB, xrayRmB, xrayRmR, xrayRmQ, - xrayR0, xrayRoP, xrayRoN, xrayRoK, xrayRoB, xrayRoB, xrayRoR, xrayRoQ - }; -static const uint32 bRxray[16] = - { - xrayR0, xrayRoP, xrayRoN, xrayRoK, xrayRoB, xrayRoB, xrayRoR, xrayRoQ, - xrayR0, xrayRmP, xrayRmN, xrayRmK, xrayRmB, xrayRmB, xrayRmR, xrayRmQ - }; -#define xQ0d Score(0, 0) -#define xQmPd Score(1, 2) -#define xQmNd Score(2, 4) -#define xQmKd Score(2, 4) -#define xQmBd Score(0, 0) -#define xQmRd Score(2, 4) -#define xQmQd Score(0, 0) -#define xQoPd Score(0, 0) -#define xQoNd Score(2, 5) -#define xQoKd Score(0, 0) -#define xQoBd Score(0, 0) -#define xQoRd Score(2, 5) -#define xQoQd Score(0, 0) -#define xQ0hv Score(0, 0) -#define xQmPhv Score(0, 0) -#define xQmNhv Score(2, 4) -#define xQmKhv Score(2, 4) -#define xQmBhv Score(2, 4) -#define xQmRhv Score(0, 0) -#define xQmQhv Score(0, 0) -#define xQoPhv Score(0, 0) -#define xQoNhv Score(2, 5) -#define xQoKhv Score(0, 0) -#define xQoBhv Score(2, 5) -#define xQoRhv Score(0, 0) -#define xQoQhv Score(0, 0) -static const uint32 wQxrayD[16] = - { - xQ0d, xQmPd, xQmNd, xQmKd, xQmBd, xQmBd, xQmRd, xQmQd, - xQ0d, xQoPd, xQoNd, xQoKd, xQoBd, xQoBd, xQoRd, xQoQd - }; -static const uint32 bQxrayD[16] = - { - xQ0d, xQoPd, xQoNd, xQoKd, xQoBd, xQoBd, xQoRd, xQoQd, - xQ0d, xQmPd, xQmNd, xQmKd, xQmBd, xQmBd, xQmRd, xQmQd - }; -static const uint32 wQxrayO[16] = - { - xQ0hv, xQmPhv, xQmNhv, xQmKhv, xQmBhv, xQmBhv, xQmRhv, xQmQhv, - xQ0hv, xQoPhv, xQoNhv, xQoKhv, xQoBhv, xQoBhv, xQoRhv, xQoQhv - }; -static const uint32 bQxrayO[16] = - { - xQ0hv, xQoPhv, xQoNhv, xQoKhv, xQoBhv, xQoBhv, xQoRhv, xQoQhv, - xQ0hv, xQmPhv, xQmNhv, xQmKhv, xQmBhv, xQmBhv, xQmRhv, xQmQhv - }; -static const uint8 BishopTrapSq[64] = - { - 0x00, C2, 0x00, 0x00, 0x00, 0x00, F2, 0x00, - B3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, G3, - B4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, G4, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - B5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, G5, - B6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, G6, - 0x00, C7, 0x00, 0x00, 0x00, 0x00, F7, 0x00 - }; -#define BishopTrapValue Score(40, 40) -#define BishopTrapGuardValue Score(40, 40) -static const uint8 GoodBishopTrapSq[64] = - { - 0x00, D1, 0x00, 0x00, 0x00, 0x00, E1, 0x00, - C2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, F2, - C3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, F3, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - C6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, F6, - C7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, F7, - 0x00, D8, 0x00, 0x00, 0x00, 0x00, E8, 0x00 - }; -static const uint32 PassedPawnMeClear[8] = - { - 0, 0, 0, Score(0, 0), Score(0, 0), Score(3, 5), Score(5, 10), 0 - }; -static const uint32 PassedPawnOppClear[8] = - { - 0, 0, 0, Score(0, 0), Score(5, 10), Score(15, 30), Score(25, 50) - }; -static const uint32 PassedPawnCanMove[8] = - { - 0, 0, 0, Score(1, 2), Score(2, 3), Score(3, 5), Score(5, 10), 0 - }; -static const uint32 PassedPawnIsFree[8] = - { - 0, 0, 0, Score(0, 0), Score(5, 10), Score(10, 20), Score(20, 40) - }; -#define QguardK Score(5, 2) -#define RguardK Score(3, 1) -#define BguardK Score(2, 1) -#define NguardK Score(4, 2) -#define DoubQueen7th Score(10, 15) -#define DoubRook7thKingPawn Score(10, 20) -#define MultipleAtt Score(15, 25) -#define Queen7th Score(5, 25) -#define KingAttUnguardedPawn Score(0, 5) -#define PattQ Score(8, 12) -#define RattQ Score(5, 5) -#define NattRQ Score(7, 10) -#define bAttRQ Score(7, 10) -#define PattR Score(7, 10) -#define PattN Score(5, 7) -#define PattB Score(5, 7) -#define bAttN Score(5, 5) -#define NattB Score(5, 5) -#define Qatt Score(4, 4) -#define RattBN Score(4, 5) -#define RattP Score(2, 3) -#define NattP Score(3, 4) -#define bAttP Score(3, 4) - -#define RookHalfOpen Score(3, 6) -#define RookOpenFile Score(20, 10) -#define RookOpenFixedMinor Score(10, 0) -#define RookOpenMinor Score(15, 5) -#define RookHalfOpenPawn Score(5, 5) -#define RookHalfOpenKing Score(15, 0) -#define RookKing8th Score(5, 10) -#define Rook7thKingPawn Score(10, 30) -#define Rook6thKingPawn Score(5, 15) -#define OutpostBishop Score(1, 2) -#define OutpostBishopGuarded Score(3, 4) -#define OutpostRook Score(1, 2) -#define OutpostRookGuarded Score(3, 4) -#define OutpostKnight Score(2, 3) -#define OutpostKnightPawn Score(2, 3) -#define OutpostKnightAttacks Score(5, 5) -#define OutpostKnight5th Score(2, 2) -#define OutpostKnightONde Score(3, 3) -static const uint32 KingSafetyMult[16] = - { - 0, 1, 4, 9, 16, 25, 36, 49, - 50, 50, 50, 50, 50, 50, 50, 50 - }; -#define Hit(x,y) ((x) << 16) + (y) -#define HitP Hit(1, 0) -#define HitQ Hit(1, 40) -#define HitR Hit(1, 25) -#define HitN Hit(1, 15) -#define HitB Hit(1, 15) -#define HitK Hit(0, 0) -#define KingSafetyDivider 8 -static const uint32 RankQueenEnd[8] = - { - 0, 0, 0, Score(5, 5), Score(10, 10), Score(20, 20), Score(40, 40), 0 - }; - -#define Rook7thEnd Score(100, 100) -#define Rook6thEnd Score(25, 25) -#define Queen7thEnd Score(10, 10) - -static const uint64 CrampFile[8] = - { - FileB, 0, 0, 0, 0, 0, 0, FileG - }; \ No newline at end of file diff --git a/Firenzina/exclude_node.c b/Firenzina/exclude_node.c deleted file mode 100644 index f69aa1b..0000000 --- a/Firenzina/exclude_node.c +++ /dev/null @@ -1,395 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef exclude_node -#define exclude_node -#include "fire.h" -#include "history.h" -#include "null_move.h" -#include "exclude_node.c" -#include "white.h" -#else -#include "black.h" -#endif - -int MyExclude(typePos *Position, int value, int depth, uint32 Move) - { - int move, i; - TransDeclare(); - int trans_depth, move_depth = 0, trans_move = 0, Value, cnt; - int v, extend, new_depth, move_is_check; - typeNext NextMove[1]; - typeDynamic *Pos0 = Position->Dyn; - uint64 zob = Position->Dyn->Hash; - int to, fr; - int Reduction; - - CheckForMate (value); - - (Pos0 + 1)->move = 0; - CheckRepetition(false); - zob ^= Hash(EnumMyK, From(Move)) ^ Hash(EnumOppK, To(Move)); - Trans = HashPointer(zob); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (zob >> 32)) == 0) - { - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - (Pos0 + 1)->move = trans_move = move; - } - trans_depth = MAX(trans->DepthLower, trans->DepthUpper); - if (trans->DepthLower >= depth) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - { - if (MyNull || move) - { - UpdateAge(); - return(Value); - } - } - } - if (trans->DepthUpper >= depth) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - { - UpdateAge(); - return(Value); - } - } - } - } - NextMove->trans_move = trans_move; - if (Pos0->Value >= value && MyNull) - { - new_depth = depth - NullReduction; - new_depth -= ScoreReduction(Pos0->Value - value); - new_depth += KingDangerAdjust(Pos0->wKdanger, Pos0->bKdanger); - v = value; - if (v >= value) - { - MakeNull(Position); - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - UndoNull(Position); - CheckHalt(); - } - new_depth -= VerifyReduction; - if (VerifyNull && v >= value && new_depth > 7) - { - int Flags = Position->Dyn->flags; - Position->Dyn->flags &= ~3; - v = MyExclude(Position, value, new_depth, Move); - Position->Dyn->flags = Flags; - CheckHalt(); - } - if (v >= value) - { - if (trans_move == 0) - HashLower(zob, 0, depth, v); - return(v); - } - } - cnt = 0; - NextMove->trans_move = trans_move; - NextMove->phase = Trans1; - NextMove->Target = OppOccupied; - if (depth < SearchDepthMin && value - Pos0->Value >= MinDepthMultiplier *(depth - 4)) - { - NextMove->phase = Trans2; - cnt = 1; - if (value - Pos0->Value >= MinDepthMultiplier * (depth - 2)) - NextMove->Target ^= BitboardOppP; - } - NextMove->move = 0; - NextMove->bc = 0; - NextMove->exclude = Move & 0x7fff; - v = value; - while (true) - { - move = MyNext(Position, NextMove); - if (!move) - break; - if ((move & 0x7fff) == (Move & 0x7fff)) - continue; - to = To(move); - fr = From(move); - if (IsRepetition(0)) - { - cnt++; - continue; - } - if (cnt > CountLimit && NextMove->phase == Ordinary_Moves && (move & 0xe000) == 0 && SqSet[fr] & ~MyXray && depth < SearchDepthMin) - { - if ((6 << (depth - SearchDepthReduction)) + MaxPositional(move) + (Pos0->Value) < value + 30 + 2 *cnt) - { - cnt++; - continue; - } - } - Reduction = 0; - if (depth < SearchDepthMin && (2 << (depth - SearchDepthReduction)) + (Pos0->Value) < value + 125 - && NextMove->phase == Ordinary_Moves && MyKingSq != fr && SqSet[fr] & ~MyXray && (move & 0x8000) == 0 - && !MySEE(Position, move)) - { - cnt++; - continue; - } - move &= 0x7fff; - Make(Position, move); - EvalCutAll(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (MoveIsCheck) - move_is_check = 1; - else - move_is_check = 0; - extend = 0; - if (PassedPawnPush(to, SixthRank(to))) - extend = 1; - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (move_is_check) - v = -OppCutCheck(Position, 1 - value, depth - 1); - else - { - if (cnt > CountLimit && depth < SearchDepthMin && Pos1->cp == 0 && (2 << (depth - SearchDepthReduction)) - Pos1->Value < value + cnt - UndoCountThreshold) - { - Undo(Position, move); - cnt++; - continue; - } - if (NextMove->phase == Ordinary_Moves && (cnt >= 3 || Reduction)) - { - new_depth = depth - 2 + extend - BSR(1 + cnt) - Reduction; - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - if (v < value) - goto Done; - } - new_depth = depth - 2 + extend; - if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - } - Done: - Undo(Position, move); - CheckHalt(); - cnt++; - if (v >= value) - { - if ((Pos0 + 1)->cp == 0 && MoveHistory(move)) - HistoryGood(move, depth); - HashLower(zob, move, depth, v); - return(v); - } - if ((Pos0 + 1)->cp == 0 && MoveHistory(move)) - HistoryBad(move, depth); - } - v = value - 1; - HashUpper(zob, depth, v); - return(v); - } -int MyExcludeCheck(typePos *Position, int value, int depth, uint32 Move) - { - int move, cnt; - int trans_depth, move_depth = 0, trans_move = 0, Value, new_depth, v, i; - TransDeclare(); - typeMoveList List[256], *list, *p, *q; - uint64 zob = Position->Dyn->Hash; - int best_value; - typeDynamic *Pos0 = Position->Dyn; - bool Gen; - CheckForMate (value); - - zob ^= Hash(EnumMyK, From(Move)) ^ Hash(EnumOppK, To(Move)); - (Pos0 + 1)->move = MoveNone; - CheckRepetition(true); - Trans = HashPointer(zob); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (zob >> 32)) == 0) - { - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - (Pos0 + 1)->move = trans_move = move; - } - trans_depth = MAX(trans->DepthLower, trans->DepthUpper); - if (trans->DepthLower >= depth) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - { - UpdateAge(); - return(Value); - } - } - if (trans->DepthUpper >= depth) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - { - UpdateAge(); - return(Value); - } - } - } - } - if (trans_move && !MyOK(Position, trans_move)) - trans_move = MoveNone; - best_value = HeightMultiplier * Height(Position) - ValueMate; - p = List; - List[0].move = trans_move; - cnt = 0; - Gen = false; - List[1].move = 0; - while (p->move || !Gen) - { - if (!p->move) - { - list = MyEvasion(Position, List + 1, 0xffffffffffffffff); - Gen = true; - for (p = list - 1; p >= List + 1; p--) - { - if ((p->move & 0x7fff) == trans_move) - p->move = 0; - else if (p->move <= (0x80 << 24)) - { - if ((p->move & 0x7fff) == Pos0->killer1) - p->move |= 0x7fff8000; - else if ((p->move & 0x7fff) == Pos0->killer2) - p->move |= 0x7fff0000; - else - p->move |= (p->move & 0x7fff) | (HistoryValue(Position, p->move) << 15); - } - move = p->move; - for (q = p + 1; q < list; q++) - { - if (move < q->move) - (q - 1)->move = q->move; - else - break; - } - q--; - q->move = move; - } - p = List + 1; - continue; - } - move = p->move & 0x7fff; - p++; - if (move == Move) - continue; - if (IsRepetition(0)) - { - best_value = MAX(0, best_value); - cnt++; - continue; - } - Make(Position, move); - EvalCutAll(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - { - new_depth = depth - 1; - if (LowDepthCondition) - v = -OppLowDepthCheck(Position, 1 - value, new_depth); - else - v = -OppCutCheck(Position, 1 - value, new_depth); - } - else - { - if (cnt >= 1) - { - new_depth = depth - 2 - MIN(2, cnt) + ExtendInCheck; - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - if (v < value) - goto Loop; - } - new_depth = depth - 2 + ExtendInCheck; - if (LowDepthCondition) - v = -OppLowDepth(Position, 1 - value, new_depth); - else - v = -OppCut(Position, 1 - value, new_depth); - } - Loop: - Undo(Position, move); - CheckHalt(); - if (v > best_value) - best_value = v; - if (v < value) - { - cnt++; - continue; - } - HashLower(zob, move, MAX(1, depth), v); - return(v); - } - HashUpper(zob, MAX(1, depth), best_value); - return(best_value); - } \ No newline at end of file diff --git a/Firenzina/fire.h b/Firenzina/fire.h deleted file mode 100644 index 42375e1..0000000 --- a/Firenzina/fire.h +++ /dev/null @@ -1,299 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include -#include - -//#define bool char - -#define true 1 -#define false 0 - -#define WINDOWS -//#define WINDOWS_X64 - -#define Engine "Firenzina" -#define Vers "2.2.3 xTreme" -#define Author "Yuri Censor and ZirconiumX, a clone of Fire 2.2 xTreme by Kranium" - -#define HasPopCNT -#define HasPreFetch -#define InitCFG -//#define LargePages -//#define LinuxLargePages -#define Log -#define MatFactors -#define MultiplePosGain -#define MultipleHistory -#define OneDimensional -#define RobboBases -#define SlabMemory - -#ifdef SlabMemory -#ifndef OneDimensional -#error SlabMemory requires OneDimensional -#endif -#define SlabDeclare1(Type, v, c) Type v[c] -#define SlabAlloc1(Type, v, c) -#define SlabDeclare2(Type, v, c) Type *v -#define SlabAlloc2(Type, v, c) v = FromSlab ((c) * sizeof (Type)) -#define SlabDeclare3 SlabDeclare1 -#define SlabAlloc3 SlabAlloc1 -#else -#define SlabDeclare1(Type, v, c) Type v[c] -#define SlabAlloc1(Type, v, c) -#define SlabDeclare2(Type, v, c) Type v[c] -#define SlabAlloc2(Type, v, c) -#define SlabDeclare3 SlabDeclare1 -#define SlabAlloc3 SlabAlloc1 -#endif - -#define MaxCPUs 64 -#define RPperCPU 8 -#define MaxSP 16 - -#include "win-linux.h" -#include "hash.h" - -int NumCPUs; -uint64 NodeCheck; -#define ZobRev(Pos) (0ULL) -#define CheckHalt() { if (Position->stop) { return(0); } } -#define Height(x)((x)->height) -#define Is_Exact(x) (x) -#include "move.h" -bool BoardIsOk, isNewGame; - -#define CheckRepetition(in_check) \ - CheckHalt (); \ - if (in_check && Position->Dyn->reversible == 100) return Move50 (Position); \ - if (Position->Dyn->reversible >= 100) return(0); \ - for (i = 4; i <= Position->Dyn->reversible && \ - i <= Position->StackHeight; i += 2) \ - if (Position->Stack[Position->StackHeight - i] == \ - (Position->Dyn->Hash ^ ZobRev (Position))) return(0); - -typedef struct - { - uint64 Hash, PawnHash; - uint32 material; - sint32 Static; - uint8 age, _9, wKdanger, bKdanger; - uint8 oo, reversible, ep, cp; - uint64 wAtt, bAtt, wXray, bXray; - sint32 Value, PositionalValue; - uint16 _5, _6, killer1, killer2, move; - uint8 _0, _3, exact, lazy, SavedFlags, flags; - uint64 wKcheck, bKcheck, _1, _2, _8; - } typeDynamic; - -#include "SMP.h" -#include "board.h" -#include "slab_memory.h" - -#define MAX(x, y) (((x) >= (y)) ? (x) : (y)) -#define MIN(x, y) (((x) <= (y)) ? (x) : (y)) -#define ABS(x) (((x) >= 0) ? (x) : -(x)) -#define FileDistance(x, y) (ABS(File(x) - File(y))) -#define RankDistance(x, y) (ABS(Rank(x) - Rank(y))) -#define DepthRed (MIN (12, depth / 2)) - -#define ValueMate 30000 -#define ValueInfinity 32750 -#define CountLimit 5 -#define MultiCentiPawnPV 65535 -#define RandomCount 0 -#define RandomBits 1 - -#define DesiredMillis 40 -#define MaxDepth 256 - -#ifdef RobboBases -#define TripleWeakProbeDepth -10 -#define TripleDefiniteProbeDepth 40 -#define TripleDefiniteProbeHeight 5 -#define LoadOnWeakProbe true -#endif - -#define ScoreReduction(x)(((uint32) (MIN ((x), 96))) >> 5) -#define KingDangerAdjust(wK, bK) (0) - -#define BitClear(b, B) B &= (B - 1) -#define BitSet(b, B) B |=((uint64) 1) << (b) - -// System -volatile bool DoPonder; -volatile bool Ponder_Hit; -volatile bool DoInfinite; -volatile bool SuppressInput; -volatile bool Stop; -volatile bool UCINewGame; - -bool Ponder; -bool CfgFound; -bool DoOutput; -bool StallInput; -bool NoSupport; - -int CfgFile; -int MultiPV; -int OptHashSize; -int OptPHashSize; -int OptMaxThreads; -int RandRange; -//int (*POPCNT)(uint64); -long long (*POPCNT) (unsigned long long); // Modification by Yuri Censor for Firenzina, 2/17/2013 - // Reason: To comply with types for _mm_popcnt_u64 in MS Visual Studio Ultimate 2012 -uint8 HasPopcnt; - -#ifdef Log -bool WriteLog; -#endif - -// Eval Weights -int DrawWeight; -int KingSafetyWeight; -int MaterialWeight; -int MobilityWeight; -int PawnWeight; -int PositionalWeight; -int PSTWeight; - -// Lazy Eval -int LazyEvalMin; -int LazyEvalMax; - -//Piece Values -int PValue; -int NValue; -int BValue; -int RValue; -int QValue; -int BPValue; - -// Pruning Thresholds -int PrunePawn; -int PruneMinor; -int PruneRook; -int PruneCheck; - -// RobboBases -#ifdef RobboBases -bool UseRobboBases; -bool VerboseRobboBases; -bool AutoloadTotalBases; -bool AutoloadTripleBases; -char TotalDir[1024]; -char TripleDir[1024]; -int TotalBaseCache; -int TripleBaseHash; -int DynamicTripleBaseCache; -bool TotalBasesLoaded; -bool TripleBasesLoaded; -bool SearchRobboBases; -int TripleMaxUsage; -char BulkDirectory[1024]; -char BulkName[1024]; -#endif - -//Search Vars -int AspirationWindow; -bool ExtendInCheck; -int ValueCut; -int NullReduction; -int VerifyReduction; -bool VerifyNull; -int DeltaCutoff; -int DepthRedMin; -int HeightMultiplier; -int HistoryThreshold; -int LowDepthMargin; -int MinDepthMultiplier; -int MinTransMoveDepth; -int QSAlphaThreshold; -int SearchDepthMin; -int SearchDepthReduction; -int TopMinDepth; -int UndoCountThreshold; - -//Split Depths -bool SplitAtCN; -int ANSplitDepth; -int CNSplitDepth; -int PVSplitDepth; -bool SlitDepth; - -//Time Management -int AbsoluteFactor; -int BattleFactor; -int EasyFactor; -int EasyFactorPonder; -int NormalFactor; - -//UCI Info Strings -bool CPULoadInfo; -bool CurrMoveInfo; -bool DepthInfo; -bool HashFullInfo; -bool LowDepthPVs; -bool NPSInfo; -bool VerboseUCI; -int MinPVDepth; - -#ifdef RobboBases - bool TBHitInfo; -#endif - -#define CheckForMate(v) \ - { \ - if (v < -ValueMate + 64) return (-ValueMate + 64); \ - if (v > ValueMate - 64) return (ValueMate - 64); \ - } \ - -#ifdef Log -FILE *log_file; -char log_filename[256]; -#endif - -#include "arrays.h" -#include "functions.h" -#include "common.h" - -char String1[MaxCPUs][64], String2[MaxCPUs][64]; -char String3[MaxCPUs][64], String4[MaxCPUs][64]; - -#ifdef RobboBases -#define TripleCondition(Position) \ - (POPCNT (Position->OccupiedBW ^ (wBitboardP & (bBitboardP >> 8))) <= TripleMaxUsage) -#define TotalCondition(Position) \ - (POPCNT (Position->OccupiedBW ^ (wBitboardP & (bBitboardP >> 8))) <= 6) -#endif - -char *InputBuffer, *input_ptr; diff --git a/Firenzina/functions.h b/Firenzina/functions.h deleted file mode 100644 index 5906e4e..0000000 --- a/Firenzina/functions.h +++ /dev/null @@ -1,224 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -void NanoSleep(int); -int InitPawnHash(int); -int InitPawnHashWrapper(int); -void InitArrays(); -void InitCaptureValues(); -void InitSlab(int); -void CreateMem(void **, int, uint64, int *, bool *, char *); -void FreeMem(void *, int *, bool *); -uint64 GetRand(); -void HaltSearch(int, int); -void CheckDone(typePos *, int); -void InitSearch(typePos *, char *); -void Info(sint64); -void Eval (typePos *, int, int, int, int); -void Mobility(typePos *); -void EvalHashClear(); -int InitEvalHash(int); -int EvalEnding(typePos *Position, int Value, uint64 wPatt, uint64 bPatt); -void SetValueArray(); -void InitRandom32(uint64); -void SetPOPCNT(); - -#ifdef RobboBases -void TripleHashClear(); -int InitTripleHash(int); -#endif - -typeMoveList *CaptureMoves(typePos *, typeMoveList *, uint64); -typeMoveList *OrdinaryMoves(typePos *, typeMoveList *); -typeMoveList *EvasionMoves(typePos *, typeMoveList *, uint64); -void InitCaptureValues(); -typeMoveList *WhiteCaptures(typePos *, typeMoveList *, uint64); -typeMoveList *BlackCaptures(typePos *, typeMoveList *, uint64); -typeMoveList *WhiteOrdinary(typePos *, typeMoveList *); -typeMoveList *BlackOrdinary(typePos *, typeMoveList *); -void SortOrdinary(typeMoveList *, typeMoveList *, uint32, uint32, uint32); -typeMoveList *QuietChecksWhite(typePos *, typeMoveList *, uint64); -typeMoveList *QuietChecksBlack(typePos *, typeMoveList *, uint64); -typeMoveList *PositionalMovesWhite(typePos *, typeMoveList *, int); -typeMoveList *PositionalMovesBlack(typePos *, typeMoveList *, int); -typeMoveList *BlackEvasions(typePos *, typeMoveList *, uint64); -typeMoveList *WhiteEvasions(typePos *, typeMoveList *, uint64); -void IncrementAge(); -void HashClear(); -int HashClearAll(); -int InitHash(int); -void HashLowerAllNew(uint64, int, int, int, int, int); -void HashUpperCutNew(uint64, int, int, int, int); -void HashLowerNew(uint64, int, int, int, int, int, int); -void HashUpperNew(uint64, int, int, int, int, int); -void HashExactNew(uint64, int, int, int, int, int, int); -int InitPVHash(int); -int PVHashClear(); -void Input(typePos *); -void ResetHistory(); -void ResetPositionalGain(); -void Make(typePos *, uint32); -void Undo(typePos *, uint32); -void MakeWhite(typePos *, uint32); -void UndoWhite(typePos *, uint32); -void MakeBlack(typePos *, uint32); -void UndoBlack(typePos *, uint32); -int InitMaterialValue(); -uint32 NextWhite(typePos *, typeNext *); -uint32 NextBlack(typePos *, typeNext *); -bool WhiteOK(typePos *, uint32); -bool BlackOK(typePos *, uint32); -void InitPawns(); -void PawnEval(typePos *, typePawnEval *); -int Move50(typePos *); -int PVQsearchWhite(typePos *, int, int, int); -int PVQsearchWhiteCheck(typePos *, int, int, int); -int PVQsearchBlack(typePos *, int, int, int); -int PVQsearchBlackCheck(typePos *, int, int, int); -void TopWhite(typePos *); -void TopBlack(typePos *); -int RootWhite(typePos *, int, int, int); -int RootBlack(typePos *, int, int, int); -int PVNodeWhite(typePos *, int, int, int, int); -int PVNodeBlack(typePos *, int, int, int, int); -int ExcludeWhite(typePos *, int, int, uint32); -int ExcludeWhiteCheck(typePos *, int, int, uint32); -int ExcludeBlack(typePos *, int, int, uint32); -int ExcludeBlackCheck(typePos *, int, int, uint32); -int CutNodeWhite(typePos *, int, int); -int CutNodeBlack(typePos *, int, int); -int CutNodeWhiteCheck(typePos *, int, int); -int CutNodeBlackCheck(typePos *, int, int); -int AllNodeWhite(typePos *, int, int); -int AllNodeBlack(typePos *, int, int); -int AllNodeWhiteCheck(typePos *, int, int); -int AllNodeBlackCheck(typePos *, int, int); -int LowDepthWhite(typePos *, int, int); -int LowDepthBlack(typePos *, int, int); -int LowDepthWhiteCheck(typePos *, int, int); -int LowDepthBlackCheck(typePos *, int, int); -int QsearchWhite(typePos *, int, int); -int QsearchBlack(typePos *, int, int); -int QsearchWhiteCheck(typePos *, int, int); -int QsearchBlackCheck(typePos *, int, int); -void OutputBestMove(); -void Search(typePos *); -void Information(typePos *, sint64, int, int, int); -bool WhiteSEE(typePos *, uint32); -bool BlackSEE(typePos *, uint32); -void InitPosition(typePos *, char *); -void InitStatic(); -uint32 FullMove(typePos *, uint32); -uint32 NumericMove(typePos *, char *); -void ErrorEnd(char *, ...); -void ErrorFen(char *, ...); -void Send(char *, ...); -char *Notate(uint32, char *); -uint64 GetClock(); -uint64 ProcessClock(); -void InitBitboards(typePos *); -void NewGame(typePos *, bool); -bool TryInput(); - -#ifdef RobboBases -bool RobboMake(typePos *); -void InitTotalBaseUtility(bool); -void TotalInit(); -int SetTotalBaseCache(int); -int SetTripleBaseCache(int); -void InitTotalBaseCache(uint64); -void InitTripleBaseCache(uint64); -bool TripleValue(typePos *, int *, bool, bool); -void InitTotalBase(); -void TripleStatistics(); -void CleanupTriple(); -int LoadRobboTripleBases(); -int RegisterRobboTotalBases(); -int UnLoadRobboTripleBases(); -int DeRegisterRobboTotalBases(); -int RobboBulkDirectory(); -int RobboBulkLoad(); -int RobboBulkDirectoryDetach(); -int RobboBulkDetach(); -void OfftoneTripleSMP(); -void QuitTripleHash(); -void MainLine(typePos *Position); -bool SubsumeTripleSMP(); -#endif - -bool IvanSplit(typePos *, typeNext *, int, int, int, int, int *); -void FailHigh(SplitPoint *, typePos *, uint32); -void StubIvan(); -void ThreadHalt(typePos *); -void ThreadStall(typePos *, int); -void WhitePVNodeSMP(typePos *); -void BlackPVNodeSMP(typePos *); -void WhiteAllSMP(typePos *); -void BlackAllSMP(typePos *); -void WhiteCutSMP(typePos *); -void BlackCutSMP(typePos *); -int InitSMP(); -void EndSMP(); -void RPinit(); -int PawnHashReset(); -void PonderHit(); -void ShowBanner(); -void GetSysInfo(); -void WhiteTopAnalysis(typePos *); -void BlackTopAnalysis(typePos *); -int WhiteAnalysis(typePos *, int, int, int); -int BlackAnalysis(typePos *, int, int, int); -int WhiteMultiPV(typePos *, int); -int BlackMultiPV(typePos *, int); -char *EmitFen(typePos *, char *); -void BenchMark(typePos *, char *); -int Stat(char *); -void QuitLargePawns(); -void QuitPV(); -void DetachAllMemory(); -void QuitEvalHash(); -void SetupPrivileges(); -void MagicMultInit(); -void FillSlab(); - -#ifdef InitCFG -void read_cfg_file(char *file_name); -void gen_cfg_file(char *file_name); -static int get_rand_num(int min, int max); -#endif - -#ifdef Log -int create_log(); -void close_log(); -#endif - -#ifdef SlabMemory -void DeleteSlab(); -#endif diff --git a/Firenzina/hash.h b/Firenzina/hash.h deleted file mode 100644 index 82c77a3..0000000 --- a/Firenzina/hash.h +++ /dev/null @@ -1,114 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -typedef struct - { - uint64 volatile PawnHash; - uint8 wPfile_count, bPfile_count, OpenFileCount; - bool locked; - uint32 wKdanger, bKdanger; - uint8 wPlight, wPdark, bPlight, bPdark, wPassedFiles, bPassedFiles, wDrawWeight, bDrawWeight; - uint32 Score; - } typePawnEval; -typePawnEval *PawnHash; -#define CheckHalt() { if (Position->stop) { return(0); } } -#define FlagLower 1 -#define FlagUpper 2 -#define FlagCut 4 -#define FlagAll 8 -#define FlagExact 16 -#define FlagMoveLess 32 -#define UpperFromPV 64 -#define LowerFromPV 128 -#define IsCut(rank) ((rank->flags) & FlagCut) -#define IsAll(rank) ((rank->flags) & FlagAll) -#define IsExact(rank) ((rank)->flags & FlagExact) -typedef struct - { - uint32 hash; - uint8 flags, age, DepthUpper, DepthLower; - sint16 ValueLower, ValueUpper; - uint16 move; - uint8 reversibles, sticky; - } typeHash; -typeHash *HashTable; -uint64 HashMask, GlobalAge; -#define HashPointer(x) (HashTable + ((x) & HashMask)) -#define HashPointer0(x) (HashTable + ((x) & (3 + HashMask))) -#define VAS(v) ValueAdjustStore ((v), (Height (Position))) -#define AgePass (Position->Dyn->age) -#define HashLowerAll(Pos, mv, dp, v) \ - HashLowerAllNew (Pos->Dyn->Hash, mv, dp, v, Height (Pos), AgePass) -#define HashUpperCut(Pos, dp, v) \ - HashUpperCutNew (Pos->Dyn->Hash, dp, v, Height (Pos), AgePass) -#define HashLower(Z, mv, dp, v) \ - HashLowerNew (Z, mv, dp, v, 0, Height (Position), AgePass) -#define HashUpper(Z, dp, v) \ - HashUpperNew (Z, dp, v, 0, Height (Position), AgePass) -#define HashLowerPV(Z, mv, dp, v) \ - HashLowerNew (Z, mv, dp, v, LowerFromPV, Height (Position), AgePass) -#define HashUpperPV(Z, dp, v) \ - HashUpperNew (Z, dp, v, UpperFromPV, Height (Position), AgePass) -#define HashExact(Pos, mv, dp, v, FL) \ - HashExactNew (Pos->Dyn->Hash, mv, dp, v, FL, Height (Position), AgePass) -#define ValueAdjustStore(Value, height) (Value) -#define HashUpperValue(rank) (rank->ValueUpper) -#define HashLowerValue(rank) (rank->ValueLower) -#define HashUpperBound(rank) (rank->ValueUpper) -#define HashLowerBound(rank) (rank->ValueLower) -#define HashReBound(Va, VA) -#define Trans trans -#define Trans_pv trans_pv -#define TransDeclare() typeHash *trans -#define TransPVDeclare() typePVHash *trans_pv -#define HyattHash(x, y) -#define HyattHashWrite(x, y) -#define UpdateAge() trans->age = (AgePass); -typedef struct - { - uint64 hash; - sint32 Value; - uint16 move; - uint8 depth, age; - } typePVHash; -typePVHash *PVHashTable; -uint64 PVHashMask; -sint64 EvalHashSize; -uint64 EvalHashMask; -uint64 *EvalHash; -int CurrentHashSize; -int CurrentPHashSize; - -#ifdef RobboBases -sint64 TripleHashSize; -uint64 TripleHashMask; -uint64 *TripleHash; -#endif - diff --git a/Firenzina/hash_init.c b/Firenzina/hash_init.c deleted file mode 100644 index eb1ea96..0000000 --- a/Firenzina/hash_init.c +++ /dev/null @@ -1,223 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#define MaxAge 256 - -static uint64 PVHashSize = 0x20000; -static uint64 HashSize; -static bool PVFlagHashInit = false; -static bool LargePVHash = false; -static bool LargeEvalHash = false; -static bool LargePawnsHash = false; -static bool PawnHashWrapper = false; -static bool FlagHashInit = false; -static bool Use = false; -static int LargeEvalNumber = -1; -static int LargePV = -1; -static int LargePawns = -1; -static int Large = -1; - -#ifdef RobboBases -static bool LargeTripleHash = false; -static int LargeTripleNumber = -1; -#endif - -int PVHashClear() - { - memset(PVHashTable, 0, PVHashSize * sizeof(typePVHash)); - return false; - } -int InitPVHash(int mb) - { - if (mb > 1024) - mb = 1024; - if (mb < 1) - mb = 1; - PVHashSize = ((1ULL << BSR(mb)) << 20) / sizeof(typePVHash); - mb = (PVHashSize * sizeof(typePVHash)) >> 20; - PVHashMask = PVHashSize - 4; - if (PVFlagHashInit) - FreeMem(PVHashTable, &LargePV, &LargePVHash); - PVFlagHashInit = true; - CreateMem(&PVHashTable, 64, PVHashSize * sizeof(typePVHash), &LargePV, &LargePVHash, "PVHash"); - PVHashClear(); - return mb; - } -void QuitPV() - { - FreeMem(PVHashTable, &LargePV, &LargePVHash); - } -int PawnHashReset() - { - memset(PawnHash, 0, CurrentPHashSize * sizeof(typePawnEval)); - return false; - } -int InitPawnHash(int mb) - { - if (mb > 1024) - mb = 1024; - if (mb < 1) - mb = 1; - CurrentPHashSize = ((1ULL << BSR(mb)) << 20) / sizeof(typePawnEval); - mb = (CurrentPHashSize * sizeof(typePawnEval)) >> 20; - if (PawnHash) - FreeMem(PawnHash, &LargePawns, &LargePawnsHash); - CreateMem(&PawnHash, 64, CurrentPHashSize * sizeof(typePawnEval), &LargePawns, &LargePawnsHash, "PawnHash"); - PawnHashReset(); - return mb; - } -int InitPawnHashWrapper(int mb) - { - PawnHashWrapper = true; - return InitPawnHash(mb); - } -void QuitLargePawns() - { - FreeMem(PawnHash, &LargePawns, &LargePawnsHash); - } - -#ifdef RobboBases -void TripleHashClear() - { - int c; - for (c = 0; c < TripleHashSize; c++) - TripleHash[c] = 0; - } -int InitTripleHash(int mb) - { - uint64 size; - if (mb > 4096) - mb = 4096; - if (mb < 1) - mb = 1; - TripleHashSize = ((1ULL << BSR(mb)) << 20) / sizeof(uint64); - TripleHashMask = TripleHashSize - 1; - mb = (TripleHashSize * sizeof(uint64)) >> 20; - if (TripleHash) - FreeMem(TripleHash, &LargeTripleNumber, &LargeTripleHash); - size = TripleHashSize * sizeof(uint64); - size = MAX((1 << 21), size); - CreateMem(&TripleHash, 64, size, &LargeTripleNumber, &LargeTripleHash, "TripleHash"); - TripleHashClear(); - return mb; - } -void QuitTripleHash() - { - FreeMem(TripleHash, &LargeTripleNumber, &LargeTripleHash); - } -#endif - -void EvalHashClear() - { - int c; - for (c = 0; c < EvalHashSize; c++) - EvalHash[c] = 0; - } -int InitEvalHash(int kb) - { - uint64 size; - if (kb > 1048576) - kb = 1048576; - if (kb < 1) - kb = 1; - EvalHashSize = ((1ULL << BSR(kb)) << 10) / sizeof(uint64); - EvalHashMask = EvalHashSize - 1; - kb = (EvalHashSize * sizeof(uint64)) >> 10; - if (EvalHash) - FreeMem(EvalHash, &LargeEvalNumber, &LargeEvalHash); - size = EvalHashSize * sizeof(uint64); - size = MAX((1 << 21), size); - -#ifdef LinuxLargePages - size = MAX((1 << 21), size); -#endif - - CreateMem(&EvalHash, 64, size, &LargeEvalNumber, &LargeEvalHash, "EvalHash"); - EvalHashClear(); - return kb; - } -void QuitEvalHash() - { - FreeMem(EvalHash, &LargeEvalNumber, &LargeEvalHash); - } -void HashClear() - { - uint64 i; - memset(HashTable, 0, HashSize * sizeof(typeHash)); - for (i = 0; i < HashSize; i++) - (HashTable + i)->age = (MaxAge >> 1); - GlobalAge = 0; - } -int HashClearAll() - { - PVHashClear(); - HashClear(); - EvalHashClear(); - return true; - } -int InitHash(int mb) - { - int PawnHash_MB; - GlobalAge = 0; - mb = CurrentHashSize; - HashSize = ((1ULL << BSR(mb)) << 20) / sizeof(typeHash); - if (HashSize > 0x100000000) - HashSize = 0x100000000; - mb = (HashSize * sizeof(typeHash)) >> 20; - HashMask = HashSize - 4; - if (FlagHashInit) - FreeMem(HashTable, &Large, &Use); - else - SetupPrivileges(); - FlagHashInit = true; - CreateMem(&HashTable, 128, HashSize * sizeof(typeHash), &Large, &Use, "Hash"); - HashClear(); - CurrentHashSize = mb; - if (!PawnHashWrapper) - PawnHash_MB = (((mb << 1) - 1) >> 3); - else - PawnHash_MB = (CurrentPHashSize * sizeof(typePawnEval)) >> 20; - InitPawnHash(PawnHash_MB); - InitPVHash((PVHashSize * sizeof(typePVHash)) >> 20); - InitEvalHash((EvalHashSize * sizeof(uint64)) >> 10); - -#ifdef SlabMemory - InitSlab(16); -#else - InitSlab(0); -#endif - - return mb; - } -void DetachAllMemory() - { - FreeMem(HashTable, &Large, &Use); - } diff --git a/Firenzina/hash_use.c b/Firenzina/hash_use.c deleted file mode 100644 index 0dd744d..0000000 --- a/Firenzina/hash_use.c +++ /dev/null @@ -1,289 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#define MaxAge 256 -#define MaxDepth 256 - -#define AgeDepthMix(a, x, y) \ - ((((a) - (x)) & (MaxAge - 1)) * MaxDepth + (MaxDepth - ((y) + 1))) - -void IncrementAge() - { - GlobalAge += 1; - if (GlobalAge == MaxAge) - GlobalAge = 0; - } -void HashLowerAllNew(uint64 Z, int move, int depth, int Value, int ht, int age) - { - int Depth, i; - TransDeclare(); - int max = 0, w = 0, mix; - move &= 0x7fff; - Trans = HashPointer(Z); - Value = ValueAdjustStore(Value, ht); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Z >> 32)) == 0 && (!trans->DepthLower || IsAll(trans)) && trans->DepthLower <= depth) - { - trans->DepthLower = depth; - trans->move = move; - trans->ValueLower = Value; - trans->age = age; - trans->flags |= FlagLower | FlagAll; - HyattHashWrite(trans, Trans); - return; - } - Depth = MAX(trans->DepthLower, trans->DepthUpper); - mix = AgeDepthMix(age, trans->age, Depth); - if (mix > max) - { - max = mix; - w = i; - } - } - Trans = HashPointer(Z) + w; - trans->hash = (Z >> 32); - trans->DepthUpper = 0; - trans->ValueUpper = 0; - trans->DepthLower = depth; - trans->move = move; - trans->ValueLower = Value; - trans->age = age; - trans->flags = FlagLower | FlagAll; - HyattHashWrite(trans, Trans); - return; - } -void HashUpperCutNew(uint64 Z, int depth, int Value, int ht, int age) - { - int Depth, i; - TransDeclare(); - int max = 0, w = 0, mix; - Trans = HashPointer(Z); - Value = ValueAdjustStore(Value, ht); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if (!(trans->hash ^ (Z >> 32)) && (!trans->DepthUpper || IsCut(trans)) && trans->DepthUpper <= depth) - { - trans->DepthUpper = depth; - trans->ValueUpper = Value; - trans->age = age; - trans->flags |= FlagUpper | FlagCut; - HyattHashWrite(trans, Trans); - return; - } - Depth = MAX(trans->DepthLower, trans->DepthUpper); - mix = AgeDepthMix(age, trans->age, Depth); - if (mix > max) - { - max = mix; - w = i; - } - } - Trans = HashPointer(Z) + w; - trans->hash = (Z >> 32); - trans->DepthLower = 0; - trans->move = 0; - trans->ValueLower = 0; - trans->DepthUpper = depth; - trans->ValueUpper = Value; - trans->age = age; - trans->flags = FlagUpper | FlagCut; - HyattHashWrite(trans, Trans); - return; - } -void HashLowerNew(uint64 Z, int move, int depth, int Value, int Flags, int ht, int age) - { - int Depth, i; - TransDeclare(); - int max = 0, w = 0, mix; - move &= 0x7fff; - Trans = HashPointer(Z); - Value = ValueAdjustStore(Value, ht); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if (!(trans->hash ^ (Z >> 32)) && !IsExact(trans) && trans->DepthLower <= depth) - { - trans->DepthLower = depth; - trans->move = move; - trans->ValueLower = Value; - trans->age = age; - trans->flags &= ~(FlagAll | LowerFromPV); - trans->flags |= FlagLower | Flags; - HyattHashWrite(trans, Trans); - return; - } - Depth = MAX(trans->DepthLower, trans->DepthUpper); - mix = AgeDepthMix(age, trans->age, Depth); - if (mix > max) - { - max = mix; - w = i; - } - } - Trans = HashPointer(Z) + w; - trans->hash = (Z >> 32); - trans->DepthUpper = 0; - trans->ValueUpper = 0; - trans->DepthLower = depth; - trans->move = move; - trans->ValueLower = Value; - trans->age = age; - trans->flags = FlagLower | Flags; - HyattHashWrite(trans, Trans); - return; - } -void HashUpperNew(uint64 Z, int depth, int Value, int Flags, int ht, int age) - { - int Depth, i; - TransDeclare(); - int max = 0, w = 0, mix; - Trans = HashPointer(Z); - Value = ValueAdjustStore(Value, ht); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if (!(trans->hash ^ (Z >> 32)) && !IsExact(trans) && trans->DepthUpper <= depth) - { - trans->DepthUpper = depth; - trans->ValueUpper = Value; - trans->age = age; - trans->flags &= ~(FlagCut | UpperFromPV); - trans->flags |= FlagUpper | Flags; - HyattHashWrite(trans, Trans); - return; - } - Depth = MAX(trans->DepthLower, trans->DepthUpper); - mix = AgeDepthMix(age, trans->age, Depth); - if (mix > max) - { - max = mix; - w = i; - } - } - Trans = HashPointer(Z) + w; - trans->hash = (Z >> 32); - trans->DepthLower = 0; - trans->move = 0; - trans->ValueLower = 0; - trans->DepthUpper = depth; - trans->ValueUpper = Value; - trans->age = age; - trans->flags = FlagUpper | Flags; - HyattHashWrite(trans, Trans); - return; - } -static void pv_zobrist(uint64 Z, int move, int depth, int Value, int age) - { - int i, k = Z & PVHashMask; - TransPVDeclare(); - int w = 0, max = 0, mix; - for (i = 0; i < 4; i++) - { - Trans_pv = PVHashTable + (k + i); - HyattHash(Trans_pv, trans_pv); - if (trans_pv->hash == Z) - { - trans_pv->depth = depth; - trans_pv->Value = Value; - trans_pv->move = move; - trans_pv->age = age; - HyattHashWrite(trans_pv, Trans_pv); - return; - } - mix = AgeDepthMix(age, trans_pv->age, trans_pv->depth); - if (mix > max) - { - max = mix; - w = i; - } - } - Trans_pv = PVHashTable + (k + w); - trans_pv->hash = Z; - trans_pv->depth = depth; - trans_pv->move = move; - trans_pv->Value = Value; - trans_pv->age = age; - HyattHashWrite(trans_pv, Trans_pv); - } -void HashExactNew(uint64 Z, int move, int depth, int Value, int Flags, int ht, int age) - { - int Depth, i, j; - TransDeclare(); - int max = 0, w = 0, mix; - move &= 0x7fff; - pv_zobrist(Z, move, depth, Value, age); - Trans = HashPointer(Z); - Value = ValueAdjustStore(Value, ht); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Z >> 32)) == 0 && MAX(trans->DepthUpper, trans->DepthLower) <= depth) - { - trans->DepthUpper = trans->DepthLower = depth; - trans->move = move; - trans->ValueUpper = trans->ValueLower = Value; - trans->age = age; - trans->flags = Flags; - HyattHashWrite(trans, Trans); - for (j = i + 1; j < 4; j++) - { - Trans++; - HyattHash(Trans, trans); - if ((trans->hash ^ (Z >> 32)) == 0 && MAX(trans->DepthUpper, trans->DepthLower) <= depth) - { - memset(trans, 0, 16); - trans->age = age ^ (MaxAge >> 1); - HyattHashWrite(trans, Trans); - } - } - return; - } - Depth = MAX(trans->DepthLower, trans->DepthUpper); - mix = AgeDepthMix(age, trans->age, Depth); - if (mix > max) - { - max = mix; - w = i; - } - } - Trans = HashPointer(Z) + w; - trans->hash = (Z >> 32); - trans->DepthUpper = trans->DepthLower = depth; - trans->move = move; - trans->ValueUpper = trans->ValueLower = Value; - trans->age = age; - trans->flags = Flags; - HyattHashWrite(trans, Trans); - return; - } \ No newline at end of file diff --git a/Firenzina/history.h b/Firenzina/history.h deleted file mode 100644 index 6fa8f36..0000000 --- a/Firenzina/history.h +++ /dev/null @@ -1,45 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define Shift 8 -#define HistoryGood(move, depth) \ - { int sv = HistoryValue (Position , move); \ - HistoryValue (Position, move) = sv + (((0xff00 - sv) * depth) >> Shift); \ - if (move != Position->Dyn->killer1) \ - { Position->Dyn->killer2 = Position->Dyn->killer1; \ - Position->Dyn->killer1 = move; } } -#define HistoryBad(move, depth) \ - { int sv = HistoryValue (Position, move); \ - if (Pos0->Value > value - HistoryThreshold) \ - HistoryValue (Position, move) = sv - ((sv * depth) >> Shift); } -#define HistoryBad1(move, depth) \ - { int sv = HistoryValue (Position, move); \ - if (Pos0->Value > Alpha - HistoryThreshold) \ - HistoryValue (Position, move) = sv - ((sv * depth) >> Shift); } \ No newline at end of file diff --git a/Firenzina/init.c b/Firenzina/init.c deleted file mode 100644 index bc1f654..0000000 --- a/Firenzina/init.c +++ /dev/null @@ -1,1980 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -#ifdef InitCFG -FILE *fp; - -static int get_rand_num(int min, int max) - { - int range; - int r; - - srand(rand()*GetTickCount()); - range = max - min + 1; - r = (rand() % (range)) + min; - return r; - } - -static void parse_option(const char *str) - { - -#ifdef RobboBases - char *s; -#endif - - char arg[6][256]; - arg[0][0] = arg[1][0] = arg[2][0] = arg[3][0] = arg[4][0] = arg[5][0] = '\0'; - sscanf(str, "%s %s %s %s %s %s", arg[0], arg[1], arg[2], arg[3], arg[4], arg[5]); - - if (!strcmp(arg[0], "//")) { } - - // System - if (!strcmp(arg[0], "Verbose_UCI")) - { - int input = atoi(arg[1]); - Send("\n// System\n"); - if (input == 1) - { - VerboseUCI = true; - Send("Verbose UCI: %s\n", "true"); - Send("info string Verbose UCI: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Verbose UCI: %s\n", "true"); - close_log(); - } -#endif - } - else - { - VerboseUCI = false; - Send("Verbose UCI: %s\n", "false"); - if (VerboseUCI) - Send("info string Verbose UCI: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Verbose UCI: %s\n", "false"); - close_log(); - } -#endif - } - } - -#ifdef Log - if (!strcmp(arg[0], "Write_Log")) - { - int input = atoi(arg[1]); - if (input == 1) - { - WriteLog = true; - Send("Write Log: %s\n", "true"); - if (VerboseUCI) - Send("info string Write Log: %s\n", "true"); - create_log(); - log_file = fopen(log_filename, "a"); - fprintf(log_file, "%s found:\n", "fire.cfg"); - fprintf(log_file, "Write Log: %s\n", "true"); - close_log(); - } - else - { - WriteLog = false; - Send("Write Log: %s\n", "false"); - if (VerboseUCI) - Send("info string Write Log: %s\n", "false"); - } - } -#endif - - if (!strcmp(arg[0], "Hash")) - { - int input = atoi(arg[1]); - OptHashSize = input; - if (OptHashSize == 0) - OptHashSize = 128; - Send("Hash: %d Mb\n", OptHashSize); - if (VerboseUCI) - Send("info string Hash: %d Mb\n", OptHashSize); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Hash: %d Mb\n", OptHashSize); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Pawn_Hash")) - { - int input = atoi(arg[1]); - OptPHashSize = input; - if (OptPHashSize == 0) - OptPHashSize = 32; - Send("Pawn Hash: %d Mb\n", OptPHashSize); - if (VerboseUCI) - Send("info string Pawn Hash: %d Mb\n", OptPHashSize); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Pawn Hash: %d Mb\n", OptPHashSize); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Max_Threads")) - { - int input = atoi(arg[1]); - OptMaxThreads = input; - if (OptMaxThreads == 0) - OptMaxThreads = MaxCPUs; - Send("Max Threads: %d\n", OptMaxThreads); - if (VerboseUCI) - Send("info string Max Threads: %d\n", OptMaxThreads); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Max Threads: %d\n", OptMaxThreads); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "MultiPV")) - { - int input = atoi(arg[1]); - MultiPV = input; - Send("MultiPV: %d\n", MultiPV); - if (VerboseUCI) - Send("info string MultiPV: %d\n", MultiPV); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "MultiPV: %d\n", MultiPV); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Random_Range")) - { - int input = atoi(arg[1]); - RandRange = input; - Send("Random Range: %d\n", RandRange); - if (VerboseUCI) - Send("info string Random Range: %d\n", RandRange); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Random Range: %d\n", RandRange); - close_log(); - } -#endif - } - - // RobboBases -#ifdef RobboBases - if (!strcmp(arg[0], "Use_RobboBases")) - { - int input = atoi(arg[1]); - Send("\n// RobboBases\n"); - if (input == 1) - { - UseRobboBases = true; - Send("Use RobboBases: %s\n", "true"); - if (VerboseUCI) - Send("info string Use RobboBases: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Use RobboBases: %s\n", "true"); - close_log(); - } -#endif - } - else - { - UseRobboBases = false; - Send("Use RobboBases: %s\n", "false"); - if (VerboseUCI) - Send("info string Use RobboBases: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Use RobboBases: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "Verbose_RobboBases")) - { - int input = atoi(arg[1]); - if (input == 1) - { - VerboseRobboBases = true; - Send("Verbose RobboBases: %s\n", "true"); - if (VerboseUCI) - Send("info string Verbose RobboBases: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Verbose RobboBases: %s\n", "true"); - close_log(); - } -#endif - } - else - { - VerboseRobboBases = false; - Send("Verbose RobboBases: %s\n", "false"); - if (VerboseUCI) - Send("info string Verbose RobboBases: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Verbose RobboBases: %s\n", "false"); - close_log(); - } -#endif - } - } - - // TotalBases - if (!strcmp(arg[0], "AutoLoad_TotalBases")) - { - int input = atoi(arg[1]); - Send("\n// TotalBases\n"); - if (input == 1) - { - AutoloadTotalBases = true; - Send("AutoLoad TotalBases: %s\n", "true"); - if (VerboseUCI) - Send("info string AutoLoad TotalBases: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "AutoLoad TotalBases: %s\n", "true"); - close_log(); - } -#endif - } - else - { - AutoloadTotalBases = false; - Send("AutoLoad TotalBases: %s\n", "false"); - if (VerboseUCI) - Send("info string AutoLoad TotalBases: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "AutoLoad TotalBases: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "TotalBase_Path")) - { - s = arg[1]; - strcpy(TotalDir, s); - Send("TotalBase Path: %s\n", TotalDir); - if (VerboseUCI) - Send("info string TotalBase Path: %s\n", TotalDir); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "TotalBase Path: %s\n", TotalDir); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "TotalBase_Cache")) - { - int input = atoi(arg[1]); - TotalBaseCache = input; - if (TotalBaseCache < 1) - TotalBaseCache = 1; - if (TotalBaseCache > 1024) - TotalBaseCache = 1024; - InitTotalBaseCache(TotalBaseCache); - Send("TotalBase Cache: %d Mb\n", TotalBaseCache); - if (VerboseUCI) - Send("info string TotalBase Cache: %d Mb\n", TotalBaseCache); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "TotalBase Cache: %d Mb\n", TotalBaseCache); - close_log(); - } -#endif - } - - // TripleBases - if (!strcmp(arg[0], "AutoLoad_TripleBases")) - { - int input = atoi(arg[1]); - Send("\n// TripleBases\n"); - if (input == 1) - { - AutoloadTripleBases = true; - Send("AutoLoad TripleBases: %s\n", "true"); - if (VerboseUCI) - Send("info string AutoLoad TripleBases: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "AutoLoad TripleBases: %s\n", "true"); - close_log(); - } -#endif - } - else - { - AutoloadTripleBases = false; - Send("AutoLoad TripleBases: %s\n", "false"); - if (VerboseUCI) - Send("info string AutoLoad TripleBases: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "AutoLoad TripleBases: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "TripleBase_Path")) - { - s = arg[1]; - strcpy(TripleDir, s); - Send("TripleBase Path: %s\n", TripleDir); - if (VerboseUCI) - Send("info string TripleBase Path: %s\n", TripleDir); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "TripleBase Path: %s\n", TripleDir); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "TripleBase_Hash")) - { - TripleBaseHash = atoi(arg[1]); - if (TripleBaseHash < 1) - TripleBaseHash = 1; - if (TripleBaseHash > 4096) - TripleBaseHash = 4096; - Send("TripleBase Hash: %d Mb\n", TripleBaseHash); - if (VerboseUCI) - Send("info string TripleBase Hash: %d Mb\n", TripleBaseHash); - InitTripleHash(TripleBaseHash); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "TripleBase Hash: %d Mb\n", TripleBaseHash); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Dynamic_TripleBase_Cache")) - { - DynamicTripleBaseCache = atoi(arg[1]); - if (DynamicTripleBaseCache < 1) - DynamicTripleBaseCache = 1; - if (DynamicTripleBaseCache > 65536) - DynamicTripleBaseCache = 65536; - Send("Dynamic TripleBase Cache: %d Mb\n", DynamicTripleBaseCache); - if (VerboseUCI) - Send("info string Dynamic TripleBase Cache: %d Mb\n", DynamicTripleBaseCache); - SetTripleBaseCache(DynamicTripleBaseCache); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Dynamic TripleBase Cache: %d Mb\n", DynamicTripleBaseCache); - close_log(); - } -#endif - } -#endif - - // Eval Weights - if (!strcmp(arg[0], "Draw_Weight")) - { - Send("\n// Eval Weights\n"); - DrawWeight = atoi(arg[1]); - if (DrawWeight < 1) - DrawWeight = 1; - if (DrawWeight > 200) - DrawWeight = 200; - Send("Draw Weight: %d\n", DrawWeight); - if (VerboseUCI) - Send("info string Draw Weight: %d\n", DrawWeight); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Draw Weight: %d\n", DrawWeight); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "King_Safety_Weight")) - { - KingSafetyWeight = atoi(arg[1]); - if (KingSafetyWeight < 1) - KingSafetyWeight = 1; - if (KingSafetyWeight > 200) - KingSafetyWeight = 200; - Send("King Safety Weight: %d\n", KingSafetyWeight); - if (VerboseUCI) - Send("info string King Safety Weight: %d\n", KingSafetyWeight); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "King Safety Weight: %d\n", KingSafetyWeight); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Material_Weight")) - { - MaterialWeight = atoi(arg[1]); - Send("Material Weight: %d\n", MaterialWeight); - if (VerboseUCI) - Send("info string Material Weight: %d\n", MaterialWeight); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Material Weight: %d\n", MaterialWeight); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Mobility_Weight")) - { - MobilityWeight = atoi(arg[1]); - if (MobilityWeight < 1) - MobilityWeight = 1; - if (MobilityWeight > 200) - MobilityWeight = 200; - Send("Mobility Weight: %d\n", MobilityWeight); - if (VerboseUCI) - Send("info string Mobility Weight: %d\n", MobilityWeight); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Mobility Weight: %d\n", MobilityWeight); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Pawn_Weight")) - { - PawnWeight = atoi(arg[1]); - if (PawnWeight < 1) - PawnWeight = 1; - if (PawnWeight > 200) - PawnWeight = 200; - Send("Pawn Weight: %d\n", PawnWeight); - if (VerboseUCI) - Send("info string Pawn Weight: %d\n", PawnWeight); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Pawn Weight: %d\n", PawnWeight); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Positional_Weight")) - { - PositionalWeight = atoi(arg[1]); - if (PositionalWeight < 1) - PositionalWeight = 1; - if (PositionalWeight > 200) - PositionalWeight = 200; - Send("Positional Weight: %d\n", PositionalWeight); - if (VerboseUCI) - Send("info string Positional Weight: %d\n", PositionalWeight); - } - if (!strcmp(arg[0], "PST_Weight")) - { - PSTWeight = atoi(arg[1]); - Send("PST Weight: %d\n", PSTWeight); - if (VerboseUCI) - Send("info string PST Weight: %d\n", PSTWeight); - } - if (!strcmp(arg[0], "PST_Weight")) - { - PSTWeight = atoi(arg[1]); - if (PSTWeight < 1) - PSTWeight = 1; - if (PSTWeight > 200) - PSTWeight = 200; - Send("PST Weight: %d\n", PSTWeight); - if (VerboseUCI) - Send("info string PST Weight: %d\n", PSTWeight); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "PST Weight: %d\n", PSTWeight); - close_log(); - } -#endif - } - - // Lazy Eval - if (!strcmp(arg[0], "Lazy_Eval_Min")) - { - Send("\n// Lazy Eval\n"); - LazyEvalMin = atoi(arg[1]); - if (LazyEvalMin < 1) - LazyEvalMin = 1; - if (LazyEvalMin > 300) - LazyEvalMin = 300; - Send("Lazy Eval Min: %d\n", LazyEvalMin); - if (VerboseUCI) - Send("info string Lazy Eval Min: %d\n", LazyEvalMin); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Lazy Eval Min: %d\n", LazyEvalMin); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Lazy_Eval_Max")) - { - LazyEvalMax = atoi(arg[1]); - if (LazyEvalMax < 1) - LazyEvalMax = 1; - if (LazyEvalMax > 600) - LazyEvalMax = 600; - Send("Lazy Eval Max: %d\n", LazyEvalMax); - if (VerboseUCI) - Send("info string Lazy Eval Max: %d\n", LazyEvalMax); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Lazy Eval Max: %d\n", LazyEvalMax); - close_log(); - } -#endif - } - - // Piece Values - if (!strcmp(arg[0], "Pawn_Value")) - { - Send("\n// Piece Values\n"); - PValue = atoi(arg[1]); - if (PValue < 1) - PValue = 1; - if (PValue > 200) - PValue = 200; - Send("Pawn Value: %d\n", PValue); - if (VerboseUCI) - Send("info string Pawn Value: %d\n", PValue); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Pawn Value: %d\n", PValue); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Knight_Value")) - { - NValue = atoi(arg[1]); - if (NValue < 1) - NValue = 1; - if (NValue > 640) - NValue = 640; - Send("Knight Value: %d\n", NValue); - if (VerboseUCI) - Send("info string Knight Value: %d\n", NValue); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Knight Value: %d\n", NValue); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Bishop_Value")) - { - BValue = atoi(arg[1]); - if (BValue < 1) - BValue = 1; - if (BValue > 640) - BValue = 640; - Send("Bishop Value: %d\n", BValue); - if (VerboseUCI) - Send("info string Bishop Value: %d\n", BValue); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Bishop Value: %d\n", BValue); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Rook_Value")) - { - RValue = atoi(arg[1]); - if (RValue < 1) - RValue = 1; - if (RValue > 1000) - RValue = 1000; - Send("Rook Value: %d\n", RValue); - if (VerboseUCI) - Send("info string Rook Value: %d\n", RValue); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Rook Value: %d\n", RValue); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Queen_Value")) - { - QValue = atoi(arg[1]); - if (QValue < 1) - QValue = 1; - if (QValue > 2000) - QValue = 2000; - Send("Queen Value: %d\n", QValue); - if (VerboseUCI) - Send("info string Queen Value: %d\n", QValue); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Queen Value: %d\n", QValue); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Bishop_Pair_Value")) - { - BPValue = atoi(arg[1]); - if (BPValue < 1) - BPValue = 1; - if (BPValue > 200) - BPValue = 200; - Send("Bishop Pair Value: %d\n", BPValue); - if (VerboseUCI) - Send("info string Bishop Pair Value: %d\n", BPValue); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Bishop Pair Value: %d\n", BPValue); - close_log(); - } -#endif - } - - // Prune Thresholds - if (!strcmp(arg[0], "Prune_Check")) - { - Send("\n// Prune Thresholds\n"); - PruneCheck = atoi(arg[1]); - if (PruneCheck < 1) - PruneCheck = 1; - if (PruneCheck > 30) - PruneCheck = 30; - Send("Prune Check: %d\n", PruneCheck); - if (VerboseUCI) - Send("info string Prune Check: %d\n", PruneCheck); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Prune Check: %d\n", PruneCheck); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Prune_Pawn")) - { - PrunePawn = atoi(arg[1]); - if (PruneCheck < 1) - PruneCheck = 1; - if (PruneCheck > 320) - PruneCheck = 320; - Send("Prune Pawn: %d\n", PrunePawn); - if (VerboseUCI) - Send("info string Prune Pawn: %d\n", PrunePawn); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Prune Pawn: %d\n", PrunePawn); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Prune_Minor")) - { - PruneMinor = atoi(arg[1]); - if (PruneCheck < 1) - PruneCheck = 1; - if (PruneCheck > 1000) - PruneCheck = 1000; - Send("Prune Minor: %d\n", PruneMinor); - if (VerboseUCI) - Send("info string Prune Minor: %d\n", PruneMinor); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Prune Minor: %d\n", PruneMinor); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Prune_Rook")) - { - PruneRook = atoi(arg[1]); - if (PruneCheck < 1) - PruneCheck = 1; - if (PruneCheck > 1600) - PruneCheck = 1600; - Send("Prune Rook: %d\n", PruneRook); - if (VerboseUCI) - Send("info string Prune Rook: %d\n", PruneRook); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Prune Rook: %d\n", PruneRook); - close_log(); - } -#endif - } - - // Search Parameters - if (!strcmp(arg[0], "Aspiration_Window")) - { - Send("\n// Search Parameters\n"); - AspirationWindow = atoi(arg[1]); - if (AspirationWindow < 1) - AspirationWindow = 1; - if (AspirationWindow > 100) - AspirationWindow = 100; - Send("Aspiration Window: %d\n", AspirationWindow); - if (VerboseUCI) - Send("info string Aspiration Window: %d\n", AspirationWindow); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Aspiration Window: %d\n", AspirationWindow); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Delta_Cutoff")) - { - DeltaCutoff = atoi(arg[1]); - if (DeltaCutoff < 20000) - DeltaCutoff = 20000; - if (DeltaCutoff > 28000) - DeltaCutoff = 28000; - Send("Delta Cutoff: %d\n", DeltaCutoff); - if (VerboseUCI) - Send("info string Delta Cutoff: %d\n", DeltaCutoff); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Delta Cutoff: %d\n", DeltaCutoff); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "DepthRed_Min")) - { - DepthRedMin = atoi(arg[1]); - if (DepthRedMin < 1) - DepthRedMin = 1; - if (DepthRedMin > 30) - DepthRedMin = 30; - Send("DepthRed Min: %d\n", DepthRedMin); - if (VerboseUCI) - Send("info string DepthRed Min: %d\n", DepthRedMin); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "DepthRed Min: %d\n", DepthRedMin); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Extend_In_Check")) - { - int input = atoi(arg[1]); - if (input == 1) - { - ExtendInCheck = true; - Send("Extend In Check: %s\n", "true"); - if (VerboseUCI) - Send("info string Extend In Check: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Extend In Check: %s\n", "true"); - close_log(); - } -#endif - } - else - { - ExtendInCheck = false; - Send("Extend In Check: %s\n", "false"); - if (VerboseUCI) - Send("info string Extend In Check: %s\n", "false"); - - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Extend In Check: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "Height_Multiplier")) - { - HeightMultiplier = atoi(arg[1]); - if (HeightMultiplier < 1) - HeightMultiplier = 1; - if (HeightMultiplier > 128) - HeightMultiplier = 128; - Send("Height Multiplier: %d\n", HeightMultiplier); - if (VerboseUCI) - Send("info string Height Multiplier: %d\n", HeightMultiplier); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Height Multiplier: %d\n", HeightMultiplier); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "History_Threshold")) - { - HistoryThreshold = atoi(arg[1]); - if (HistoryThreshold < 1) - HistoryThreshold = 1; - if (HistoryThreshold > 100) - HistoryThreshold = 100; - Send("History Threshold: %d\n", HistoryThreshold); - if (VerboseUCI) - Send("info string History Threshold: %d\n", HistoryThreshold); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "History Threshold: %d\n", HistoryThreshold); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Low_Depth_Margin")) - { - LowDepthMargin = atoi(arg[1]); - if (LowDepthMargin < 1) - LowDepthMargin = 1; - if (LowDepthMargin > 2000) - LowDepthMargin = 2000; - Send("Low Depth CutOff: %d\n", LowDepthMargin); - if (VerboseUCI) - Send("info string Low Depth CutOff: %d\n", LowDepthMargin); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "History Threshold: %d\n", LowDepthMargin); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Min_Depth_Multiplier")) - { - MinDepthMultiplier = atoi(arg[1]); - if (MinDepthMultiplier < 1) - MinDepthMultiplier = 1; - if (MinDepthMultiplier > 80) - MinDepthMultiplier = 80; - Send("Min Depth Multiplier: %d\n", MinDepthMultiplier); - if (VerboseUCI) - Send("info string Min Depth Multiplier: %d\n", MinDepthMultiplier); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Min Depth Multiplier: %d\n", MinDepthMultiplier); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Min_Trans_Move_Depth")) - { - MinTransMoveDepth = atoi(arg[1]); - if (MinTransMoveDepth < 1) - MinTransMoveDepth = 1; - if (MinTransMoveDepth > 24) - MinTransMoveDepth = 24; - Send("Min Trans Move Depth: %d\n", MinTransMoveDepth); - if (VerboseUCI) - Send("info string Min Trans Move Depth: %d\n", MinTransMoveDepth); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Min Trans Move Depth: %d\n", MinTransMoveDepth); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Null_Reduction")) - { - NullReduction = atoi(arg[1]); - if (NullReduction < 1) - NullReduction = 1; - if (NullReduction > 16) - NullReduction = 16; - Send("Null Reduction: %d\n", NullReduction); - if (VerboseUCI) - Send("info string Null Reduction: %d\n", NullReduction); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Null Reduction: %d\n", NullReduction); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "QS_Alpha_Threshold")) - { - QSAlphaThreshold = atoi(arg[1]); - if (QSAlphaThreshold < 1) - QSAlphaThreshold = 1; - if (QSAlphaThreshold > 280) - QSAlphaThreshold = 280; - Send("QS Alpha Threshold: %d\n", QSAlphaThreshold); - if (VerboseUCI) - Send("info string QS Alpha Threshold: %d\n", QSAlphaThreshold); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "QS Alpha Threshold: %d\n", QSAlphaThreshold); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Search_Depth_Min")) - { - SearchDepthMin = atoi(arg[1]); - if (SearchDepthMin < 1) - SearchDepthMin = 1; - if (SearchDepthMin > 40) - SearchDepthMin = 40; - Send("Search Depth Min: %d\n", SearchDepthMin); - if (VerboseUCI) - Send("info string Search Depth Min: %d\n", SearchDepthMin); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Search Depth Min: %d\n", SearchDepthMin); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Search_Depth_Reduction")) - { - SearchDepthReduction = atoi(arg[1]); - if (SearchDepthReduction < 1) - SearchDepthReduction = 1; - if (SearchDepthReduction > 12) - SearchDepthReduction = 12; - Send("Search Depth Reduction: %d\n", SearchDepthReduction); - if (VerboseUCI) - Send("info string Search Depth Reduction: %d\n", SearchDepthReduction); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Search Depth Reduction: %d\n", SearchDepthReduction); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Top_Min_Depth")) - { - TopMinDepth = atoi(arg[1]); - if (TopMinDepth < 1) - TopMinDepth = 1; - if (TopMinDepth > 20) - TopMinDepth = 20; - Send("Top Min Depth: %d\n", TopMinDepth); - if (VerboseUCI) - Send("info string Top Min Depth: %d\n", TopMinDepth); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Top Min Depth: %d\n", TopMinDepth); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Undo_Count_Threshold")) - { - UndoCountThreshold = atoi(arg[1]); - if (UndoCountThreshold < 1) - UndoCountThreshold = 1; - if (UndoCountThreshold > 22) - UndoCountThreshold = 22; - Send("Undo Count Threshold: %d\n", UndoCountThreshold); - if (VerboseUCI) - Send("info string Undo Count Threshold: %d\n", UndoCountThreshold); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Undo Count Threshold: %d\n", UndoCountThreshold); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Value_Cut")) - { - ValueCut = atoi(arg[1]); - Send("Value Cut: %d\n", ValueCut); - if (ValueCut < 1000) - ValueCut = 1000; - if (ValueCut > 30000) - ValueCut = 30000; - if (VerboseUCI) - Send("info string Value Cut: %d\n", ValueCut); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Value Cut: %d\n", ValueCut); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Verify_Null")) - { - int input = atoi(arg[1]); - if (input == 1) - { - VerifyNull = true; - Send("Verify Null: %s\n", "true"); - if (VerboseUCI) - Send("info string Verify Null: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Verify Null: %s\n", "true"); - close_log(); - } -#endif - } - else - { - VerifyNull = false; - Send("Verify Null: %s\n", "false"); - if (VerboseUCI) - Send("info string Verify Null: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Verify Null: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "Verify_Reduction")) - { - VerifyReduction = atoi(arg[1]); - if (VerifyReduction < 1) - VerifyReduction = 1; - if (VerifyReduction > 16) - VerifyReduction = 16; - Send("Verify Reduction: %d\n", VerifyReduction); - if (VerboseUCI) - Send("info string Verify Reduction: %d\n", VerifyReduction); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Verify Reduction: %d\n", VerifyReduction); - close_log(); - } -#endif - } - - // Split Depths - if (!strcmp(arg[0], "Split_At_CN")) - { - int input = atoi(arg[1]); - Send("\n// Split Depths\n"); - if (input == 1) - { - SplitAtCN = true; - Send("Split At CN: %s\n", "true"); - if (VerboseUCI) - Send("info string Split At CN: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Split At CN: %s\n", "true"); - close_log(); - } -#endif - } - else - { - SplitAtCN = false; - Send("Split At CN: %s\n", "false"); - if (VerboseUCI) - Send("info string Split At CN: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Split At CN: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "AN_Split_Depth")) - { - ANSplitDepth = atoi(arg[1]); - if (ANSplitDepth < 12) - ANSplitDepth = 12; - if (ANSplitDepth > 24) - ANSplitDepth = 24; - Send("AN Split Depth: %d\n", ANSplitDepth); - if (VerboseUCI) - Send("info string AN Split Depth: %d\n", ANSplitDepth); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "AN Split Depth: %d\n", ANSplitDepth); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "CN_Split_Depth")) - { - CNSplitDepth = atoi(arg[1]); - if (CNSplitDepth < 12) - CNSplitDepth = 12; - if (CNSplitDepth > 24) - CNSplitDepth = 24; - Send("CN Split Depth: %d\n", CNSplitDepth); - if (VerboseUCI) - Send("info string CN Split Depth: %d\n", CNSplitDepth); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "CN Split Depth: %d\n", CNSplitDepth); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "PV_Split_Depth")) - { - PVSplitDepth = atoi(arg[1]); - if (PVSplitDepth < 12) - PVSplitDepth = 12; - if (PVSplitDepth > 24) - PVSplitDepth = 24; - Send("PV Split Depth: %d\n", PVSplitDepth); - if (VerboseUCI) - Send("info string PV Split Depth: %d\n", PVSplitDepth); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "PV Split Depth: %d\n", PVSplitDepth); - close_log(); - } -#endif - } - - // Time Management - if (!strcmp(arg[0], "Absolute_Factor")) - { - Send("\n// Time Management\n"); - AbsoluteFactor = atoi(arg[1]); - if (AbsoluteFactor < 1) - AbsoluteFactor = 1; - if (AbsoluteFactor > 100) - AbsoluteFactor = 100; - Send("Absolute Factor: %d\n", AbsoluteFactor); - if (VerboseUCI) - Send("info string Absolute Factor: %d\n", AbsoluteFactor); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Absolute Factor: %d\n", AbsoluteFactor); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Battle_Factor")) - { - BattleFactor = atoi(arg[1]); - if (BattleFactor < 1) - BattleFactor = 1; - if (BattleFactor > 200) - BattleFactor = 200; - Send("Battle Factor: %d\n", BattleFactor); - if (VerboseUCI) - Send("info string Battle Factor: %d\n", BattleFactor); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Battle Factor: %d\n", BattleFactor); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Easy_Factor")) - { - EasyFactor = atoi(arg[1]); - if (EasyFactor < 1) - EasyFactor = 1; - if (EasyFactor > 100) - EasyFactor = 100; - Send("Easy Factor: %d\n", EasyFactor); - if (VerboseUCI) - Send("info string Easy Factor: %d\n", EasyFactor); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Easy Factor: %d\n", EasyFactor); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Easy_Factor_Ponder")) - { - EasyFactorPonder = atoi(arg[1]); - if (EasyFactorPonder < 1) - EasyFactorPonder = 1; - if (EasyFactorPonder > 100) - EasyFactorPonder = 100; - Send("Easy Factor Ponder: %d\n", EasyFactorPonder); - if (VerboseUCI) - Send("info string Easy Factor Ponder: %d\n", EasyFactorPonder); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Easy Factor Ponder: %d\n", EasyFactorPonder); - close_log(); - } -#endif - } - if (!strcmp(arg[0], "Normal_Factor")) - { - NormalFactor = atoi(arg[1]); - if (NormalFactor < 1) - NormalFactor = 1; - if (NormalFactor > 200) - NormalFactor = 200; - Send("Normal Factor: %d\n", NormalFactor); - if (VerboseUCI) - Send("info string Normal Factor: %d\n", NormalFactor); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Normal Factor: %d\n", NormalFactor); - close_log(); - } -#endif - } - - // UCI Info Strings - if (!strcmp(arg[0], "CPULoad_Info")) - { - int input = atoi(arg[1]); - Send("\n// UCI Info Strings\n"); - if (input == 1) - { - CPULoadInfo = true; - Send("CPU Load Info: %s\n", "true"); - if (VerboseUCI) - Send("info string CPU Load Info: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "CPU Load Info: %s\n", "true"); - close_log(); - } -#endif - } - else - { - CPULoadInfo = false; - Send("CPU Load Info: %s\n", "false"); - if (VerboseUCI) - Send("info string CPU Load Info: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "CPU Load Info: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "CurrentMove_Info")) - { - int input = atoi(arg[1]); - - if (input == 1) - { - CurrMoveInfo = true; - Send("Current Move Info: %s\n", "true"); - if (VerboseUCI) - Send("info string Current Move Info: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Current Move Info: %s\n", "true"); - close_log(); - } -#endif - } - else - { - CurrMoveInfo = false; - Send("Current Move Info: %s\n", "false"); - if (VerboseUCI) - Send("info string Current Move Info: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Current Move Info: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "Depth_Info")) - { - int input = atoi(arg[1]); - - if (input == 1) - { - DepthInfo = true; - Send("Depth Info: %s\n", "true"); - if (VerboseUCI) - Send("info string Depth Info: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Depth Info: %s\n", "true"); - close_log(); - } -#endif - } - else - { - DepthInfo = false; - Send("Depth Info: %s\n", "false"); - if (VerboseUCI) - Send("info string Depth Info: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Depth Info: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "HashFull_Info")) - { - int input = atoi(arg[1]); - - if (input == 1) - { - HashFullInfo = true; - Send("Hash Full Info: %s\n", "true"); - if (VerboseUCI) - Send("info string Hash Full Info: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Hash Full Info: %s\n", "true"); - close_log(); - } -#endif - } - else - { - HashFullInfo = false; - Send("Hash Full Info: %s\n", "false"); - if (VerboseUCI) - Send("info string Hash Full Info: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Hash Full Info: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "LowDepth_PVs")) - { - int input = atoi(arg[1]); - - if (input == 1) - { - LowDepthPVs = true; - Send("Low Depth PVs: %s\n", "true"); - if (VerboseUCI) - Send("info string Low Depth PVs: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Low Depth PVs: %s\n", "true"); - close_log(); - } -#endif - } - else - { - LowDepthPVs = false; - Send("Low Depth PVs: %s\n", "false"); - if (VerboseUCI) - Send("info string Low Depth PVs: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Low Depth PVs: %s\n", "false"); - close_log(); - } -#endif - } - } - if (!strcmp(arg[0], "NPS_Info")) - { - int input = atoi(arg[1]); - - if (input == 1) - { - NPSInfo = true; - Send("NPS Info: %s\n", "true"); - if (VerboseUCI) - Send("info string NPS Info: %s\n", "true"); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "NPS Info: %s\n", "true"); - close_log(); - } -#endif - } - else - { - NPSInfo = false; - Send("NPS Info: %s\n", "false"); - if (VerboseUCI) - Send("info string NPS Info: %s\n", "false"); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "NPS Info: %s\n", "false"); - close_log(); - } -#endif - } - } - -#ifdef RobboBases - if (!strcmp(arg[0], "TBHit_Info")) - { - int input = atoi(arg[1]); - - if (input == 1) - { - TBHitInfo = true; - Send("TB Hit Info: %s", "true"); - if (VerboseUCI) - Send("info string TB Hit Info: %s\n", "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "TB Hit Info: %s\n", "true"); - close_log(); - } -#endif - } - else - { - TBHitInfo = false; - Send("TB Hit Info: %s", "false"); - if (VerboseUCI) - Send("info string TB Hit Info: %s\n", "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "TB Hit Info: %s\n", "false"); - close_log(); - } -#endif - } - } -#endif - - } - -void read_cfg_file(char *file_name) - { - char parambuf[256]; - FILE *cfgFile; - cfgFile = fopen(file_name, "rt"); - - if (cfgFile) - { - CfgFound = true; - Send("info string %s found\n", "fire.cfg"); - Send("info string UCI options disabled\n"); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string %s found\n", "fire.cfg"); - fprintf(log_file, "info string UCI options disabled\n"); - close_log(); - } -#endif - - while (!feof(cfgFile)) - { - strcpy(parambuf, ""); - fgets(parambuf, 256, cfgFile); - parse_option(parambuf); - } - fclose(cfgFile); - cfgFile = NULL; - Send("\n"); - } - else - { - CfgFound = false; - Send("info string %s not found\n", "fire.cfg"); - Send("info string UCI options enabled\n"); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string %s not found\n", "fire.cfg"); - fprintf(log_file, "info string UCI options enabled\n"); - close_log(); - } -#endif - } - } - -void gen_cfg_file(char *file_name) - { - if (CfgFile == 0) - Send("writing default fire.cfg\n"); - else if (CfgFile == 1) - Send("writing random fire.cfg\n"); - else if (CfgFile == 2) - Send("writing random eval fire.cfg\n"); - else if (CfgFile == 3) - Send("writing random material fire.cfg\n"); - else if (CfgFile == 4) - Send("writing random prune fire.cfg\n"); - else if (CfgFile == 5) - Send("writing random search fire.cfg\n"); - else if (CfgFile == 6) - Send("writing random time fire.cfg\n"); - else - Send("writing default fire.cfg\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - if (CfgFile == 0) - fprintf(fp, "writing default fire.cfg\n"); - else if (CfgFile == 1) - fprintf(fp, "writing random fire.cfg\n"); - else if (CfgFile == 2) - fprintf(fp, "writing random eval fire.cfg\n"); - else if (CfgFile == 3) - fprintf(fp, "writing random material fire.cfg\n"); - else if (CfgFile == 4) - fprintf(fp, "writing random prune fire.cfg\n"); - else if (CfgFile == 5) - fprintf(fp, "writing random search fire.cfg\n"); - else if (CfgFile == 6) - fprintf(fp, "writing random time fire.cfg\n"); - else - fprintf(fp, "writing default fire.cfg\n"); - close_log(); - } -#endif - - fp = fopen(file_name, "w"); - if (CfgFile == 0) - fprintf(fp, "// " Engine " " Vers " default fire.cfg\n"); - else if (CfgFile == 1) - fprintf(fp, "// " Engine " " Vers " random fire.cfg\n"); - else if (CfgFile == 2) - fprintf(fp, "// " Engine " " Vers " random eval fire.cfg\n"); - else if (CfgFile == 3) - fprintf(fp, "// " Engine " " Vers " random material fire.cfg\n"); - else if (CfgFile == 4) - fprintf(fp, "// " Engine " " Vers " random prune fire.cfg\n"); - else if (CfgFile == 5) - fprintf(fp, "// " Engine " " Vers " random search fire.cfg\n"); - else if (CfgFile == 6) - fprintf(fp, "// " Engine " " Vers " random time fire.cfg\n"); - else - fprintf(fp, "// " Engine " " Vers " default fire.cfg\n"); - - fprintf(fp, "\n// System\n"); - fprintf(fp, "Verbose_UCI %d\n", 0); - fprintf(fp, "Write_Log %d\n", 0); - fprintf(fp, "Hash %d\n", 128); - fprintf(fp, "Pawn_Hash %d\n", 32); - fprintf(fp, "Max_Threads %d\n", OptMaxThreads); - fprintf(fp, "MultiPV %d\n", 1); - fprintf(fp, "Random_Range %d\n", RandRange); - -#ifdef RobboBases - fprintf(fp, "\n// RobboBases\n"); - fprintf(fp, "Use_RobboBases %d\n", 0); - fprintf(fp, "Verbose_RobboBases %d\n", 0); - - fprintf(fp, "\n// TotalBases\n"); - fprintf(fp, "AutoLoad_TotalBases %d\n", 0); - fprintf(fp, "TotalBase_Path %s\n", "c:\\TotalBases"); - fprintf(fp, "TotalBase_Cache %d\n", 1); - - fprintf(fp, "\n// TripleBases\n"); - fprintf(fp, "AutoLoad_TripleBases %d\n", 0); - fprintf(fp, "TripleBase_Path %s\n", "c:\\TripleBases"); - fprintf(fp, "TripleBase_Hash %d\n", 1); - fprintf(fp, "Dynamic_TripleBase_Cache %d\n", 1); -#endif - - fprintf(fp, "\n// Eval Weights\n"); - if (CfgFile == 1 || CfgFile == 2) - { - fprintf(fp, "Draw_Weight %d\n", get_rand_num(DrawWeight * (100 - RandRange) / 100, DrawWeight * (100 + RandRange) / 100)); - fprintf(fp, "King_Safety_Weight %d\n", get_rand_num(KingSafetyWeight * (100 - RandRange) / 100, KingSafetyWeight * (100 + RandRange) / 100)); - fprintf(fp, "Material_Weight %d\n", get_rand_num(MaterialWeight * (100 - RandRange) / 100, MaterialWeight * (100 + RandRange) / 100)); - fprintf(fp, "Mobility_Weight %d\n", get_rand_num(MobilityWeight * (100 - RandRange) / 100, MobilityWeight * (100 + RandRange) / 100)); - fprintf(fp, "Pawn_Weight %d\n", get_rand_num(PawnWeight * (100 - RandRange) / 100, PawnWeight * (100 + RandRange) / 100)); - fprintf(fp, "Positional_Weight %d\n", get_rand_num(PositionalWeight * (100 - RandRange) / 100, PositionalWeight * (100 + RandRange) / 100)); - fprintf(fp, "PST_Weight %d\n", get_rand_num(PSTWeight * (100 - RandRange) / 100, PSTWeight * (100 + RandRange) / 100)); - } - else - { - fprintf(fp, "Draw_Weight %d\n", 100); - fprintf(fp, "King_Safety_Weight %d\n", 100); - fprintf(fp, "Material_Weight %d\n", 100); - fprintf(fp, "Mobility_Weight %d\n", 100); - fprintf(fp, "Pawn_Weight %d\n", 100); - fprintf(fp, "Positional_Weight %d\n", 100); - fprintf(fp, "PST_Weight %d\n", 100); - } - - fprintf(fp, "\n// Lazy Eval\n"); - if (CfgFile == 1 || CfgFile == 2) - { - fprintf(fp, "Lazy_Eval_Min %d\n", get_rand_num(LazyEvalMin * (100 - RandRange) / 100, LazyEvalMin * (100 + RandRange) / 100)); - fprintf(fp, "Lazy_Eval_Max %d\n", get_rand_num(LazyEvalMax * (100 - RandRange) / 100, LazyEvalMax * (100 + RandRange) / 100)); - } - else - { - fprintf(fp, "Lazy_Eval_Min %d\n", 150); - fprintf(fp, "Lazy_Eval_Max %d\n", 300); - } - - fprintf(fp, "\n// Piece Values\n"); - if (CfgFile == 1 || CfgFile == 3) - { - fprintf(fp, "Pawn_Value %d\n", get_rand_num(PValue * (100 - RandRange) / 100, PValue * (100 + RandRange) / 100)); - fprintf(fp, "Knight_Value %d\n", get_rand_num(NValue * (100 - RandRange) / 100, NValue * (100 + RandRange) / 100)); - fprintf(fp, "Bishop_Value %d\n", get_rand_num(BValue * (100 - RandRange) / 100, BValue * (100 + RandRange) / 100)); - fprintf(fp, "Rook_Value %d\n", get_rand_num(RValue * (100 - RandRange) / 100, RValue * (100 + RandRange) / 100)); - fprintf(fp, "Queen_Value %d\n", get_rand_num(QValue * (100 - RandRange) / 100, QValue * (100 + RandRange) / 100)); - fprintf(fp, "Bishop_Pair_Value %d\n", get_rand_num(BPValue * (100 - RandRange) / 100, BPValue * (100 + RandRange) / 100)); - } - else - { - fprintf(fp, "Pawn_Value %d\n", 100); - fprintf(fp, "Knight_Value %d\n", 320); - fprintf(fp, "Bishop_Value %d\n", 330); - fprintf(fp, "Rook_Value %d\n", 510); - fprintf(fp, "Queen_Value %d\n", 1000); - fprintf(fp, "Bishop_Pair_Value %d\n", 50); - } - - fprintf(fp, "\n// Prune Thresholds\n"); - if (CfgFile == 1 || CfgFile == 4) - { - fprintf(fp, "Prune_Check %d\n", get_rand_num(PruneCheck * (100 - RandRange) / 100, PruneCheck * (100 + RandRange) / 100)); - fprintf(fp, "Prune_Pawn %d\n", get_rand_num(PrunePawn * (100 - RandRange) / 100, PrunePawn * (100 + RandRange) / 100)); - fprintf(fp, "Prune_Minor %d\n", get_rand_num(PruneMinor * (100 - RandRange) / 100, PruneMinor * (100 + RandRange) / 100)); - fprintf(fp, "Prune_Rook %d\n", get_rand_num(PruneRook * (100 - RandRange) / 100, PruneRook * (100 + RandRange) / 100)); - } - else - { - fprintf(fp, "Prune_Check %d\n", 10); - fprintf(fp, "Prune_Pawn %d\n", 160); - fprintf(fp, "Prune_Minor %d\n", 500); - fprintf(fp, "Prune_Rook %d\n", 800); - } - - fprintf(fp, "\n// Search Parameters\n"); - if (CfgFile == 1 || CfgFile == 5) - { - fprintf(fp, "Aspiration_Window %d\n", get_rand_num(AspirationWindow * (100 - RandRange) / 100, AspirationWindow * (100 + RandRange) / 100)); - fprintf(fp, "Delta_Cutoff %d\n", get_rand_num(DeltaCutoff * (100 - RandRange) / 100, DeltaCutoff * (100 + RandRange) / 100)); - fprintf(fp, "DepthRed_Min %d\n", get_rand_num(DepthRedMin * (100 - RandRange) / 100, DepthRedMin * (100 + RandRange) / 100)); - fprintf(fp, "Extend_In_Check %d\n", get_rand_num(0, 1)); - fprintf(fp, "Height_Multiplier %d\n", get_rand_num(HeightMultiplier * (100 - RandRange) / 100, HeightMultiplier * (100 + RandRange) / 100)); - fprintf(fp, "History_Threshold %d\n", get_rand_num(HistoryThreshold * (100 - RandRange) / 100, HistoryThreshold * (100 + RandRange) / 100)); - fprintf(fp, "Low_Depth_Margin %d\n", get_rand_num(LowDepthMargin * (100 - RandRange) / 100, LowDepthMargin * (100 + RandRange) / 100)); - fprintf(fp, "Min_Depth_Multiplier %d\n", get_rand_num(MinDepthMultiplier * (100 - RandRange) / 100, MinDepthMultiplier * (100 + RandRange) / 100)); - fprintf(fp, "Min_Trans_Move_Depth %d\n", get_rand_num(MinTransMoveDepth * (100 - RandRange) / 100, MinTransMoveDepth * (100 + RandRange) / 100)); - fprintf(fp, "Null_Reduction %d\n", get_rand_num(NullReduction * (100 - RandRange) / 100, NullReduction * (100 + RandRange) / 100)); - fprintf(fp, "QS_Alpha_Threshold %d\n", get_rand_num(QSAlphaThreshold * (100 - RandRange) / 100, QSAlphaThreshold * (100 + RandRange) / 100)); - fprintf(fp, "Search_Depth_Min %d\n", get_rand_num(SearchDepthMin * (100 - RandRange) / 100, SearchDepthMin * (100 + RandRange) / 100)); - fprintf(fp, "Search_Depth_Reduction %d\n", get_rand_num(SearchDepthReduction * (100 - RandRange) / 100, SearchDepthReduction * (100 + RandRange) / 100)); - fprintf(fp, "Top_Min_Depth %d\n", get_rand_num(TopMinDepth * (100 - RandRange) / 100, TopMinDepth * (100 + RandRange) / 100)); - fprintf(fp, "Undo_Count_Threshold %d\n", get_rand_num(UndoCountThreshold * (100 - RandRange) / 100, UndoCountThreshold * (100 + RandRange) / 100)); - fprintf(fp, "Value_Cut %d\n", get_rand_num(ValueCut * (100 - RandRange) / 100, ValueCut * (100 + RandRange) / 100)); - fprintf(fp, "Verify_Null %d\n", get_rand_num(0, 1)); - fprintf(fp, "Verify_Reduction %d\n", get_rand_num(VerifyReduction * (100 - RandRange) / 100, VerifyReduction * (100 + RandRange) / 100)); - } - else - { - fprintf(fp, "Aspiration_Window %d\n", 8); - fprintf(fp, "Delta_Cutoff %d\n", 25000); - fprintf(fp, "DepthRed_Min %d\n", 12); - fprintf(fp, "Extend_In_Check %d\n", 0); - fprintf(fp, "Height_Multiplier %d\n", 64); - fprintf(fp, "History_Threshold %d\n", 50); - fprintf(fp, "Low_Depth_Margin %d\n", 1125); - fprintf(fp, "Min_Depth_Multiplier %d\n", 48); - fprintf(fp, "Min_Trans_Move_Depth %d\n", 16); - fprintf(fp, "Null_Reduction %d\n", 8); - fprintf(fp, "QS_Alpha_Threshold %d\n", 200); - fprintf(fp, "Search_Depth_Min %d\n", 20); - fprintf(fp, "Search_Depth_Reduction %d\n", 6); - fprintf(fp, "Top_Min_Depth %d\n", 14); - fprintf(fp, "Undo_Count_Threshold %d\n", 15); - fprintf(fp, "Value_Cut %d\n", 15000); - fprintf(fp, "Verify_Null %d\n", 1); - fprintf(fp, "Verify_Reduction %d\n", 2); - } - - fprintf(fp, "\n// Split Depths\n"); - if (CfgFile == 1 || CfgFile == 5) - { - fprintf(fp, "Split_At_CN %d\n", get_rand_num(0, 1)); - fprintf(fp, "AN_Split_Depth %d\n", get_rand_num(ANSplitDepth * (100 - RandRange) / 100, ANSplitDepth * (100 + RandRange) / 100)); - fprintf(fp, "CN_Split_Depth %d\n", get_rand_num(CNSplitDepth * (100 - RandRange) / 100, CNSplitDepth * (100 + RandRange) / 100)); - fprintf(fp, "PV_Split_Depth %d\n", get_rand_num(PVSplitDepth * (100 - RandRange) / 100, PVSplitDepth * (100 + RandRange) / 100)); - } - else - { - fprintf(fp, "Split_At_CN %d\n", 1); - fprintf(fp, "AN_Split_Depth %d\n", 12); - fprintf(fp, "CN_Split_Depth %d\n", 14); - fprintf(fp, "PV_Split_Depth %d\n", 12); - } - - fprintf(fp, "\n// Time Management\n"); - if (CfgFile == 1 || CfgFile == 6) - { - fprintf(fp, "Absolute_Factor %d\n", get_rand_num(AbsoluteFactor * (100 - RandRange) / 100, AbsoluteFactor * (100 + RandRange) / 100)); - fprintf(fp, "Battle_Factor %d\n", get_rand_num(BattleFactor * (100 - RandRange) / 100, BattleFactor * (100 + RandRange) / 100)); - fprintf(fp, "Easy_Factor %d\n", get_rand_num(EasyFactor * (100 - RandRange) / 100, EasyFactor * (100 + RandRange) / 100)); - fprintf(fp, "Easy_Factor_Ponder %d\n", get_rand_num(EasyFactorPonder * (100 - RandRange) / 100, EasyFactorPonder * (100 + RandRange) / 100)); - fprintf(fp, "Normal_Factor %d\n", get_rand_num(NormalFactor * (100 - RandRange) / 100, NormalFactor * (100 + RandRange) / 100)); - } - else - { - fprintf(fp, "Absolute_Factor %d\n", 25); - fprintf(fp, "Battle_Factor %d\n", 100); - fprintf(fp, "Easy_Factor %d\n", 15); - fprintf(fp, "Easy_Factor_Ponder %d\n", 33); - fprintf(fp, "Normal_Factor %d\n", 75); - } - - fprintf(fp, "\n// UCI Info strings\n"); - fprintf(fp, "CPULoad_Info %d\n", 0); - fprintf(fp, "CurrentMove_Info %d\n", 0); - fprintf(fp, "Depth_Info %d\n", 0); - fprintf(fp, "HashFull_Info %d\n", 0); - fprintf(fp, "LowDepth_PVs %d\n", 0); - fprintf(fp, "NPS_Info %d\n", 0); - fprintf(fp, "TBHit_Info %d\n", 0); - - fclose(fp); - Send("done\n\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "done.\n\n"); - close_log(); - } -#endif - } -#endif \ No newline at end of file diff --git a/Firenzina/init_gen.h b/Firenzina/init_gen.h deleted file mode 100644 index 5381bc0..0000000 --- a/Firenzina/init_gen.h +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -static uint32 CaptureValue[16][16]; -void InitCaptureValues() - { - CaptureValue[wEnumP][bEnumQ] = (0xd0 << 24) + (0x02 << 20); - CaptureValue[wEnumN][bEnumQ] = (0xcf << 24) + (0x02 << 20); - CaptureValue[wEnumBL][bEnumQ] = (0xce << 24) + (0x02 << 20); - CaptureValue[wEnumBD][bEnumQ] = (0xce << 24) + (0x02 << 20); - CaptureValue[wEnumR][bEnumQ] = (0xcd << 24) + (0x02 << 20); - CaptureValue[wEnumQ][bEnumQ] = (0xcc << 24) + (0x01 << 20); - CaptureValue[wEnumP][bEnumR] = (0xc8 << 24) + (0x02 << 20); - CaptureValue[wEnumN][bEnumR] = (0xc7 << 24) + (0x02 << 20); - CaptureValue[wEnumBL][bEnumR] = (0xc6 << 24) + (0x02 << 20); - CaptureValue[wEnumBD][bEnumR] = (0xc6 << 24) + (0x02 << 20); - CaptureValue[wEnumR][bEnumR] = (0xc5 << 24) + (0x01 << 20); - CaptureValue[wEnumQ][bEnumR] = (0xc4 << 24) + (0x00 << 20); - CaptureValue[wEnumP][bEnumBL] = (0xc0 << 24) + (0x02 << 20); - CaptureValue[wEnumN][bEnumBL] = (0xbf << 24) + (0x01 << 20); - CaptureValue[wEnumBL][bEnumBL] = (0xbe << 24) + (0x01 << 20); - CaptureValue[wEnumBD][bEnumBL] = (0xbe << 24) + (0x01 << 20); - CaptureValue[wEnumR][bEnumBL] = (0xbd << 24) + (0x00 << 20); - CaptureValue[wEnumQ][bEnumBL] = (0xbc << 24) + (0x00 << 20); - CaptureValue[wEnumP][bEnumBD] = (0xc0 << 24) + (0x02 << 20); - CaptureValue[wEnumN][bEnumBD] = (0xbf << 24) + (0x01 << 20); - CaptureValue[wEnumBL][bEnumBD] = (0xbe << 24) + (0x01 << 20); - CaptureValue[wEnumBD][bEnumBD] = (0xbe << 24) + (0x01 << 20); - CaptureValue[wEnumR][bEnumBD] = (0xbd << 24) + (0x00 << 20); - CaptureValue[wEnumQ][bEnumBD] = (0xbc << 24) + (0x00 << 20); - CaptureValue[wEnumP][bEnumN] = (0xb8 << 24) + (0x02 << 20); - CaptureValue[wEnumN][bEnumN] = (0xb7 << 24) + (0x01 << 20); - CaptureValue[wEnumBL][bEnumN] = (0xb6 << 24) + (0x01 << 20); - CaptureValue[wEnumBD][bEnumN] = (0xb6 << 24) + (0x01 << 20); - CaptureValue[wEnumR][bEnumN] = (0xb5 << 24) + (0x00 << 20); - CaptureValue[wEnumQ][bEnumN] = (0xb4 << 24) + (0x00 << 20); - CaptureValue[wEnumP][bEnumP] = (0xb0 << 24) + (0x01 << 20); - CaptureValue[wEnumN][bEnumP] = (0xaf << 24) + (0x00 << 20); - CaptureValue[wEnumBL][bEnumP] = (0xae << 24) + (0x00 << 20); - CaptureValue[wEnumBD][bEnumP] = (0xae << 24) + (0x00 << 20); - CaptureValue[wEnumR][bEnumP] = (0xad << 24) + (0x00 << 20); - CaptureValue[wEnumQ][bEnumP] = (0xac << 24) + (0x00 << 20); - CaptureValue[wEnumK][bEnumQ] = (0xcb << 24) + (0x03 << 20); - CaptureValue[wEnumK][bEnumR] = (0xc3 << 24) + (0x03 << 20); - CaptureValue[wEnumK][bEnumBL] = (0xbb << 24) + (0x03 << 20); - CaptureValue[wEnumK][bEnumBD] = (0xbb << 24) + (0x03 << 20); - CaptureValue[wEnumK][bEnumN] = (0xb3 << 24) + (0x03 << 20); - CaptureValue[wEnumK][bEnumP] = (0xab << 24) + (0x03 << 20); - CaptureValue[wEnumK][0] = (0x07 << 24) + (0x00 << 15); - CaptureValue[wEnumP][0] = (0x06 << 24) + (0x01 << 15); - CaptureValue[wEnumN][0] = (0x05 << 24) + (0x01 << 15); - CaptureValue[wEnumBL][0] = (0x04 << 24) + (0x01 << 15); - CaptureValue[wEnumBD][0] = (0x04 << 24) + (0x01 << 15); - CaptureValue[wEnumR][0] = (0x03 << 24) + (0x01 << 15); - CaptureValue[wEnumQ][0] = (0x02 << 24) + (0x01 << 15); - CaptureValue[bEnumP][wEnumQ] = (0xd0 << 24) + (0x02 << 20); - CaptureValue[bEnumN][wEnumQ] = (0xcf << 24) + (0x02 << 20); - CaptureValue[bEnumBL][wEnumQ] = (0xce << 24) + (0x02 << 20); - CaptureValue[bEnumBD][wEnumQ] = (0xce << 24) + (0x02 << 20); - CaptureValue[bEnumR][wEnumQ] = (0xcd << 24) + (0x02 << 20); - CaptureValue[bEnumQ][wEnumQ] = (0xcc << 24) + (0x01 << 20); - CaptureValue[bEnumP][wEnumR] = (0xc8 << 24) + (0x02 << 20); - CaptureValue[bEnumN][wEnumR] = (0xc7 << 24) + (0x02 << 20); - CaptureValue[bEnumBL][wEnumR] = (0xc6 << 24) + (0x02 << 20); - CaptureValue[bEnumBD][wEnumR] = (0xc6 << 24) + (0x02 << 20); - CaptureValue[bEnumR][wEnumR] = (0xc5 << 24) + (0x01 << 20); - CaptureValue[bEnumQ][wEnumR] = (0xc4 << 24) + (0x00 << 20); - CaptureValue[bEnumP][wEnumBL] = (0xc0 << 24) + (0x02 << 20); - CaptureValue[bEnumN][wEnumBL] = (0xbf << 24) + (0x01 << 20); - CaptureValue[bEnumBL][wEnumBL] = (0xbe << 24) + (0x01 << 20); - CaptureValue[bEnumBD][wEnumBL] = (0xbe << 24) + (0x01 << 20); - CaptureValue[bEnumR][wEnumBL] = (0xbd << 24) + (0x00 << 20); - CaptureValue[bEnumQ][wEnumBL] = (0xbc << 24) + (0x00 << 20); - CaptureValue[bEnumP][wEnumBD] = (0xc0 << 24) + (0x02 << 20); - CaptureValue[bEnumN][wEnumBD] = (0xbf << 24) + (0x01 << 20); - CaptureValue[bEnumBL][wEnumBD] = (0xbe << 24) + (0x01 << 20); - CaptureValue[bEnumBD][wEnumBD] = (0xbe << 24) + (0x01 << 20); - CaptureValue[bEnumR][wEnumBD] = (0xbd << 24) + (0x00 << 20); - CaptureValue[bEnumQ][wEnumBD] = (0xbc << 24) + (0x00 << 20); - CaptureValue[bEnumP][wEnumN] = (0xb8 << 24) + (0x02 << 20); - CaptureValue[bEnumN][wEnumN] = (0xb7 << 24) + (0x01 << 20); - CaptureValue[bEnumBL][wEnumN] = (0xb6 << 24) + (0x01 << 20); - CaptureValue[bEnumBD][wEnumN] = (0xb6 << 24) + (0x01 << 20); - CaptureValue[bEnumR][wEnumN] = (0xb5 << 24) + (0x00 << 20); - CaptureValue[bEnumQ][wEnumN] = (0xb4 << 24) + (0x00 << 20); - CaptureValue[bEnumP][wEnumP] = (0xb0 << 24) + (0x01 << 20); - CaptureValue[bEnumN][wEnumP] = (0xaf << 24) + (0x00 << 20); - CaptureValue[bEnumBL][wEnumP] = (0xae << 24) + (0x00 << 20); - CaptureValue[bEnumBD][wEnumP] = (0xae << 24) + (0x00 << 20); - CaptureValue[bEnumR][wEnumP] = (0xad << 24) + (0x00 << 20); - CaptureValue[bEnumQ][wEnumP] = (0xac << 24) + (0x00 << 20); - CaptureValue[bEnumK][wEnumQ] = (0xcb << 24) + (0x03 << 20); - CaptureValue[bEnumK][wEnumR] = (0xc3 << 24) + (0x03 << 20); - CaptureValue[bEnumK][wEnumBL] = (0xbb << 24) + (0x03 << 20); - CaptureValue[bEnumK][wEnumBD] = (0xbb << 24) + (0x03 << 20); - CaptureValue[bEnumK][wEnumN] = (0xb3 << 24) + (0x03 << 20); - CaptureValue[bEnumK][wEnumP] = (0xab << 24) + (0x03 << 20); - CaptureValue[bEnumK][0] = (0x07 << 24) + (0x00 << 15); - CaptureValue[bEnumP][0] = (0x06 << 24) + (0x01 << 15); - CaptureValue[bEnumN][0] = (0x05 << 24) + (0x01 << 15); - CaptureValue[bEnumBL][0] = (0x04 << 24) + (0x01 << 15); - CaptureValue[bEnumBD][0] = (0x04 << 24) + (0x01 << 15); - CaptureValue[bEnumR][0] = (0x03 << 24) + (0x01 << 15); - CaptureValue[bEnumQ][0] = (0x02 << 24) + (0x01 << 15); - } \ No newline at end of file diff --git a/Firenzina/input.c b/Firenzina/input.c deleted file mode 100644 index edfcb1a..0000000 --- a/Firenzina/input.c +++ /dev/null @@ -1,739 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#include "control.h" -#define MaxVar 8 -#define NumSubClasses 8 - -static bool HasDeletion = false; -static MutexType InputDelete[1]; -static bool Init = false; -static bool QuitDemand = false; - -static int UCIFen () - { - Send("info string %s\n", EmitFen (RootPosition0, String1[0])); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string %s\n", EmitFen (RootPosition0, String1[0])); - close_log(); - } -#endif - - return true; - } -typedef enum - { - UCISpin, - UCICheck, - UCIButton, - UCIString, - UCICombo, - UCIIgnore - } enumUCI; -typedef struct - { - char name[0x100]; - char sub_class[0x40]; - int type; - sint32 min, max, def; - void *var; - int(*action)(int); - } UCItype; - -char Combo[1][MaxVar][16] = - { - { "Tic", "Tac", "Toe" } - }; -char TicTacToe[16]; - -char SubClassList[NumSubClasses][16] = - { - "Eval", "System", "Info", "Other", "RobboBases", "Search", "SMP", "Time" - }; -UCItype UCIOptions[256] = - { -// System - { "Hash", "System", UCISpin, 1, 65536, 128, &CurrentHashSize, &InitHash }, - { "Pawn_Hash", "System", UCISpin, 1, 1024, 32, &CurrentPHashSize, &InitPawnHashWrapper }, - -#ifdef RobboBases - { "TripleBase_Hash", "RobboBases", UCISpin, 1, 4096, 1, NULL, &InitTripleHash }, - { "TotalBase_Cache", "RobboBases", UCISpin, 1, 1024, 1, NULL, &SetTotalBaseCache }, - { "Dynamic_TripleBase_Cache", "RobboBases", UCISpin, 1, 65536, 1, NULL, &SetTripleBaseCache }, -#endif - - { "Max_Threads", "SMP", UCISpin, 1, MaxCPUs, MaxCPUs, &OptMaxThreads, &InitSMP }, - { "MultiPV", "System", UCISpin, 1, 250, 1, &MultiPV, NULL }, -// Split Depths - { "AN_Split_Depth", "SMP", UCISpin, 12, 24, 12, &ANSplitDepth, NULL }, - { "CN_Split_Depth", "SMP", UCISpin, 12, 24, 14, &CNSplitDepth, NULL }, - { "PV_Split_Depth", "SMP", UCISpin, 12, 24, 12, &PVSplitDepth, NULL }, -// Piece Values - { "Pawn_Value", "Eval", UCISpin, 1, 200, 100, &PValue, &InitMaterialValue }, - { "Knight_Value", "Eval", UCISpin, 1, 640, 320, &NValue, &InitMaterialValue }, - { "Bishop_Value", "Eval", UCISpin, 1, 640, 330, &BValue, &InitMaterialValue }, - { "Rook_Value", "Eval", UCISpin, 1, 1000, 510, &RValue, &InitMaterialValue }, - { "Queen_Value", "Eval", UCISpin, 1, 2000, 1000, &QValue, &InitMaterialValue }, - { "Bishop_Pair_Value", "Eval", UCISpin, 1, 200, 50, &BPValue, &InitMaterialValue }, -// Eval Weights - { "Draw_Weight", "Eval", UCISpin, 1, 200, 100, &DrawWeight, NULL }, - { "King_Safety_Weight", "Eval", UCISpin, 1, 200, 100, &KingSafetyWeight, NULL }, - { "Material_Weight", "Eval", UCISpin, 1, 200, 100, &MaterialWeight, NULL }, - { "Mobility_Weight", "Eval", UCISpin, 1, 200, 100, &MobilityWeight, NULL }, - { "Pawn_Weight", "Eval", UCISpin, 1, 200, 100, &PawnWeight, &PawnHashReset }, - { "Positional_Weight", "Eval", UCISpin, 1, 200, 100, &PositionalWeight, NULL }, - { "PST_Weight", "Eval", UCISpin, 1, 200, 100, &PSTWeight, NULL }, -// Lazy Eval - { "Lazy_Eval_Min", "Search", UCISpin, 1, 300, 150, &LazyEvalMin, NULL }, - { "Lazy_Eval_Max", "Search", UCISpin, 1, 600, 300, &LazyEvalMax, NULL }, -// Search Vars - { "Aspiration_Window", "Search", UCISpin, 1, 100, 8, &AspirationWindow, NULL }, - { "Delta_Cutoff", "Search", UCISpin, 20000, 30000, 25000, &DeltaCutoff, NULL }, - { "Depth_Red_Min", "Search", UCISpin, 1, 24, 12, &DepthRedMin, NULL }, - { "Height_Multiplier", "Search", UCISpin, 1, 128, 64, &HeightMultiplier, NULL }, - { "History_Threshold", "Search", UCISpin, 1, 100, 50, &HistoryThreshold, NULL }, - { "Low_Depth_Margin", "Search", UCISpin, 1, 2000, 1125, &LowDepthMargin, NULL }, - { "Min_Depth_Multiplier", "Search", UCISpin, 1, 96, 48, &MinDepthMultiplier, NULL }, - { "Min_Trans_Move_Depth", "Search", UCISpin, 1, 32, 16, &MinTransMoveDepth, NULL }, - { "Null_Reduction", "Search", UCISpin, 1, 16, 8, &NullReduction, NULL }, -// Prune Thresholds - { "Prune_Check", "Search", UCISpin, 1, 30, 10, &PruneCheck, NULL }, - { "Prune_Pawn", "Search", UCISpin, 1, 320, 160, &PrunePawn, NULL }, - { "Prune_Minor", "Search", UCISpin, 1, 1000, 500, &PruneMinor, NULL }, - { "Prune_Rook", "Search", UCISpin, 1, 1600, 800, &PruneRook, NULL }, -// Search Vars - { "QS_Alpha_Threshold", "Search", UCISpin, 1, 400, 200, &QSAlphaThreshold, NULL }, - { "Search_Depth_Min", "Search", UCISpin, 1, 40, 20, &SearchDepthMin, NULL }, - { "Search_Depth_Reduction", "Search", UCISpin, 1, 12, 6, &SearchDepthReduction, NULL }, - { "Top_Min_Depth", "Search", UCISpin, 1, 28, 14, &TopMinDepth, NULL }, - { "Undo_Count_Threshold", "Search", UCISpin, 1, 20, 15, &UndoCountThreshold, NULL }, - { "Value_Cut", "Search", UCISpin, 1000, 30000, 15000, &ValueCut, NULL }, - { "Verify_Reduction", "Search", UCISpin, 1, 16, 2, &VerifyReduction, NULL }, -// Time Management - { "Absolute_Factor", "Time", UCISpin, 1, 100, 25, &AbsoluteFactor, NULL }, - { "Battle_Factor", "Time", UCISpin, 1, 200, 100, &BattleFactor, NULL }, - { "Easy_Factor", "Time", UCISpin, 1, 100, 15, &EasyFactor, NULL }, - { "Easy_Factor_Ponder", "Time", UCISpin, 1, 100, 33, &EasyFactorPonder, NULL }, - { "Normal_Factor", "Time", UCISpin, 1, 200, 75, &NormalFactor, NULL}, -//UCI Info Strings - { "CPU_Load_Info", "Info", UCICheck, 0, 0, false, &CPULoadInfo, NULL }, - { "Current_Move_Info", "Info", UCICheck, 0, 0, false, &CurrMoveInfo, NULL }, - { "Depth_Info", "Info", UCICheck, 0, 0, false, &DepthInfo, NULL }, - { "Hash_Full_Info", "Info", UCICheck, 0, 0, false, &HashFullInfo, NULL }, - { "Low_Depth_PVs", "Info", UCICheck, 0, 0, false, &LowDepthPVs, NULL }, - { "NPS_Info", "Info", UCICheck, 0, 0, false, &NPSInfo, NULL }, - -#ifdef RobboBases - { "TBHit_Info", "Info", UCICheck, 0, 0, false, &TBHitInfo, NULL }, -#endif - - { "Extend_In_Check", "Search", UCICheck, 0, 0, false, &ExtendInCheck, NULL }, - { "Ponder", "System", UCICheck, 0, 0, false, &Ponder, NULL }, - { "Split_at_CN", "SMP", UCICheck, 0, 0, true, &SplitAtCN, NULL }, - { "Verbose_UCI", "Info", UCICheck, 0, 0, false, &VerboseUCI, NULL }, - -#ifdef RobboBases - { "Verbose_RobboBases", "RobboBases", UCICheck, 0, 0, false, &VerboseRobboBases, NULL }, -#endif - - { "Verify_Null", "Search", UCICheck, 0, 0, true, &VerifyNull, NULL }, - -#ifdef Log - { "Write_Log", "System", UCICheck, 0, 0, false, &WriteLog, &create_log }, -#endif - -//RobboBases -#ifdef RobboBases - { "Use_RobboBases", "RobboBases", UCICheck, 0, 0, false, &UseRobboBases, NULL }, - { "TripleBase_Directory", "RobboBases", UCIString, 0, 0, 0, TripleDir, &LoadRobboTripleBases }, - { "TotalBase_Directory", "RobboBases", UCIString, 0, 0, 0, TotalDir, &RegisterRobboTotalBases }, - { "Bulk_Load_Directory", "RobboBases", UCIString, 0, 0, 0, BulkDirectory, &RobboBulkDirectory }, -#endif - { "Clear_Hash", "Other", UCIButton, 0, 0, 0, NULL, &HashClearAll }, - { "Get_FEN_String", "Other", UCIButton, 0, 0, 0, NULL, &UCIFen }, - { "", "", -1, 0, 0, false, NULL, NULL } - }; - -UCItype BaseUCIOptions[256] = - { -// System - { "Hash", "System", UCISpin, 1, 65536, 128, &CurrentHashSize, &InitHash }, - { "Pawn_Hash", "System", UCISpin, 1, 1024, 32, &CurrentPHashSize, &InitPawnHashWrapper }, - { "Max_Threads", "SMP", UCISpin, 1, MaxCPUs, MaxCPUs, &OptMaxThreads, &InitSMP }, - { "MultiPV", "System", UCISpin, 1, 250, 1, &MultiPV, NULL }, - { "", "", -1, 0, 0, false, NULL, NULL } - }; - -static void uci() - { - UCItype *uci; - char string[256]; - char *str; - char TYPE[5][16] = - { - "spin", "check", "button", "string", "combo" - }; - Send("id name %s %s %s\n", Engine, Vers, Platform); - Send("id author %s\n", Author); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "id name %s %s %s\n", Engine, Vers, Platform); - fprintf(log_file, "id author %s\n", Author); - close_log(); - } -#endif - -#ifdef InitCFG - if (!CfgFound) - { -#endif - - for (uci = UCIOptions; uci->type != -1; uci++) - { - str = string; - sprintf(str, "option name %s type %s", uci->name, TYPE[uci->type]); - str += strlen(str); - if (uci->type == UCICheck) - sprintf(str, " default %s", uci->def ? "true" : "false"); - if (uci->type == UCIString) - sprintf(str, " default NULL"); - if (uci->type == UCISpin) - sprintf(str, " min %d max %d default %d", uci->min, uci->max, uci->def); - if (uci->type == UCICombo) - { - int i; - for (i = 0; i < uci->max; i++) - { - sprintf(str, " var %s", Combo[uci->min][i]); - str += strlen(str); - } - sprintf(str, " default %s", Combo[uci->min][uci->def]); - } - str += strlen(str); - sprintf(str, "\n"); - Send("%s", string); - - #ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "%s", string); - close_log(); - } - #endif - - } - -#ifdef InitCFG - } - else - { - for (uci = BaseUCIOptions; uci->type != -1; uci++) - { - str = string; - sprintf(str, "option name %s type %s", uci->name, TYPE[uci->type]); - str += strlen(str); - if (uci->type == UCICheck) - sprintf(str, " default %s", uci->def ? "true" : "false"); - if (uci->type == UCIString) - sprintf(str, " default NULL"); - if (uci->type == UCISpin) - sprintf(str, " min %d max %d default %d", uci->min, uci->max, uci->def); - if (uci->type == UCICombo) - { - int i; - for (i = 0; i < uci->max; i++) - { - sprintf(str, " var %s", Combo[uci->min][i]); - str += strlen(str); - } - sprintf(str, " default %s", Combo[uci->min][uci->def]); - } - str += strlen(str); - sprintf(str, "\n"); - Send("%s", string); - - #ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "%s", string); - close_log(); - } - #endif - - } - } -#endif - - Send("uciok\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "uciok\n"); - close_log(); - } -#endif - - } -static void SetOption(char *string) - { - UCItype *uci; - char *v; - char *u; - int Value, r; - while (string[0] == ' ' || string[0] == '\t') - string++; - r = strlen(string) - 1; - while (string[r] == ' ' || string[r] == '\t') - string[r--] = 0; - u = strstr(string, "value"); - if (u) - { - while ((*u) == ' ' || (*u) == '\t') - u--; - } - else - u = string + strlen(string); - for (uci = UCIOptions; uci->type != -1; uci++) - { - if (!memcmp(uci->name, string, u - string - 1)) - { - if (uci->type == UCIButton) - { - Value = uci->action(true); - if (VerboseUCI) - Send ("info string Button %s pushed %s\n", uci->name, Value ? "true" : "false"); - return; - } - v = strstr(string, "value"); - if (!v) - return; - if (uci->type == UCIString) - { - strcpy((char *)(uci->var), v + 6); - if (VerboseUCI) - Send("info string Option %s %s\n", uci->name, (char*) (uci->var)); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Option %s %s\n", uci->name, (char*) (uci->var)); - close_log(); - } -#endif - - if (uci->action) - (uci->action)(true); - } - if (uci->type == UCICheck) - { - if (!strcmp(v + 6, "false")) - { - if (* ((bool *)(uci->var)) == false) - { - if (VerboseUCI) - Send ("info string Option %s %s\n", uci->name, "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Option %s %s\n", uci->name, "false"); - close_log(); - } -#endif - - return; - } - * ((bool *)(uci->var)) = false; - if (uci->action) - uci->action(false); - } - if (!strcmp(v + 6, "true")) - { - if (* ((bool *)(uci->var)) == true) - { - if (VerboseUCI) - Send ("info string Option %s %s\n", uci->name, "true"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Option %s %s\n", uci->name, "true"); - close_log(); - } -#endif - - return; - } - * ((bool *)(uci->var)) = true; - if (uci->action) - uci->action(true); - } - if (VerboseUCI) - Send ("info string Option %s %s\n", uci->name, (* ((bool*) (uci->var))) ? "true" : "false"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Option %s %s\n", uci->name,(*((bool*) (uci->var))) ? "true" : "false"); - close_log(); - } -#endif - - } - if (uci->type == UCISpin) - { - Value = atoi(v + 6); - if (Value < uci->min) - Value = uci->min; - if (Value > uci->max) - Value = uci->max; - if (uci->var) - { - if (* ((sint32 *)(uci->var)) == Value) - { - if (VerboseUCI) - Send ("info string Option %s %d\n", uci->name, Value); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Option %s %d\n", uci->name, Value); - close_log(); - } -#endif - - return; - } - * ((sint32 *)(uci->var)) = Value; - } - if (uci->action) - { - r = uci->action(Value); - if (r) - Value = r; - } - if (VerboseUCI) - Send ("info string Option %s %d\n", uci->name, Value); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Option %s %d\n", uci->name, Value); - close_log(); - } -#endif - - } - if (uci->type == UCICombo) - { - strcpy((char *)(uci->var), v + 6); - if (VerboseUCI) - Send ("info string Option %s %s\n", uci->name, (char*) (uci->var)); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Option %s %s\n", uci->name, (char*) (uci->var)); - close_log(); - } -#endif - - if (uci->action) - (uci->action)(true); - } - return; - } - } - if (VerboseUCI) - Send ("info string Option unknown: %s\n", string); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Option unknown: %s\n", string); - close_log(); - } -#endif - - } - -void SharedDelete() - { - Lock(InputDelete); - if (HasDeletion) - { - UnLock(InputDelete); - return; - } - QuitPV(); - QuitLargePawns(); - DetachAllMemory(); - QuitEvalHash(); - -#ifdef RobboBases - QuitTripleHash(); -#endif - -#ifdef SlabMemory - DeleteSlab(); - HasDeletion = true; -#endif - - UnLock(InputDelete); - } -static void Quit() - { - SharedDelete(); - exit(0); - } - -static void ParseInput(typePos *Position, char *I) - { - if (!Init) - { - Init = true; - LockInit(InputDelete); - } - UCINewGame = false; - if (!strcmp(I, "quit")) - { - QuitDemand = true; - ParseInput(Position, "stop"); - Quit(); - } - if (!strcmp(I, "stop")) - { - if (SearchIsDone) - return; - HaltSearch(0, 0); - if (InfiniteLoop) - return; - StallMode = true; - while (!SearchIsDone) - NanoSleep(1000000); - StallMode = false; - SuppressInput = false; - return; - } - if (!strcmp(I, "isready")) - { - Send ("readyok\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "readyok\n"); - close_log(); - } -#endif - - return; - } - if (!strcmp(I, "stall")) - { - StallInput = true; - return; - } - if (!strcmp(I, "ponderhit")) - { - PonderHit(); - return; - } - if (!strcmp(I, "ucinewgame")) - { - if (SearchIsDone) - { - NewGame(Position, true); - return; - } - UCINewGame = true; - HaltSearch(0, 0); - if (InfiniteLoop) - return; - StallMode = true; - while (!SearchIsDone) - NanoSleep(1000000); - StallMode = false; - SuppressInput = false; - return; - } - if (JumpIsSet) - return; - - if (!strcmp(I, "benchmark")) - BenchMark(Position, "go movetime 1000"); - else if (!memcmp(I, "benchmark", 9)) - BenchMark(Position, I + 10); - -#ifdef RobboBases - if (!memcmp(I, "mainline", 8)) - MainLine(Position); -#endif - - if (!memcmp(I, "go", 2)) - { - InitSearch(Position, I); - if (BoardIsOk) - Search(Position); - } - if (!memcmp(I, "position", 8)) - InitPosition(Position, I + 9); - if (!memcmp(I, "setoption name", 14)) - SetOption(I + 15); - if (!strcmp(I, "uci")) - uci(); - -#ifdef InitCFG - if (!strcmp(I, "default")) - if (!strcmp(I, "default")) - { - CfgFile = 0; - gen_cfg_file("fire.cfg"); - } - if (!strcmp(I, "random")) - { - CfgFile = 1; - gen_cfg_file("fire.cfg"); - } - if (!strcmp(I, "rand_eval")) - { - CfgFile = 2; - gen_cfg_file("fire.cfg"); - } - if (!strcmp(I, "rand_material")) - { - CfgFile = 3; - gen_cfg_file("fire.cfg"); - } - if (!strcmp(I, "rand_prune")) - { - CfgFile = 4; - gen_cfg_file("fire.cfg"); - } - if (!strcmp(I, "rand_search")) - { - CfgFile = 5; - gen_cfg_file("fire.cfg"); - } - if (!strcmp(I, "rand_time")) - { - CfgFile = 6; - gen_cfg_file("fire.cfg"); - } -#endif - - SuppressInput = false; - } - -#ifdef WINDOWS -#include -#include -void Input(typePos *Position) - { - int r = 0; - if (SuppressInput) - return; - if (QuitDemand) - ParseInput(Position, "quit"); - if (_kbhit()) - { - InputBuffer[r] = (char)getche(); - while (InputBuffer[r++] != '\r') - InputBuffer[r] = (char)getche(); - } - else - { - _read(_fileno(stdin), InputBuffer, 1); - while (InputBuffer[r++] != '\n') - _read(_fileno(stdin), InputBuffer + r, 1); - } - InputBuffer[r - 1] = 0; - InputBuffer[r] = 0; - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, InputBuffer); - fprintf(log_file, "\n"); - close_log(); - } -#endif - - ParseInput(Position, InputBuffer); - if (QuitDemand) - ParseInput(Position, "quit"); - } -#else -#include -void Input(typePos *Position) - { - int i, r = 0; - if (SuppressInput) - return; - if (QuitDemand) - ParseInput(Position, "quit"); - read(STDIN_FileNO, InputBuffer, 1); - ReadMe: - while (InputBuffer[r++] != '\n') - read(STDIN_FileNO, InputBuffer + r, 1); - if (InputBuffer[r - 2] == '\\') - { - r -= 3; - goto ReadMe; - } - InputBuffer[r - 1] = 0; - InputBuffer[r] = 0; - ParseInput(Position, InputBuffer); - if (QuitDemand) - ParseInput(Position, "quit"); - } -#endif \ No newline at end of file diff --git a/Firenzina/kp_black.h b/Firenzina/kp_black.h deleted file mode 100644 index 5140357..0000000 --- a/Firenzina/kp_black.h +++ /dev/null @@ -1,4126 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xc2,0xc1,0xff,0xff,0xff,0xff, -0x85,0x82,0xff,0xff,0xff,0xff, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x16,0x0a,0xff,0xff,0xff,0xff, -0x2e,0x16,0xff,0xff,0xff,0xff, -0x5e,0x2e,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xc0,0xc2,0xe1,0xff,0xff,0xff, -0x80,0x85,0xc2,0xff,0xff,0xff, -0x00,0x0a,0x84,0xff,0xff,0xff, -0x02,0x14,0x08,0xff,0xff,0xff, -0x06,0x2a,0x10,0xff,0xff,0xff, -0x0e,0x56,0x23,0xff,0xff,0xff, -0x0f,0xaf,0x47,0xff,0xff,0xff, -0x1f,0x1f,0x0f,0xff,0xff,0xff, -0xc0,0xc0,0xe2,0xf1,0xff,0xff, -0x80,0x80,0xc5,0xe2,0xff,0xff, -0x00,0x00,0x8a,0xc4,0xff,0xff, -0x02,0x00,0x14,0x88,0xff,0xff, -0x06,0x02,0x28,0x11,0xff,0xff, -0x0e,0x06,0x53,0x23,0xff,0xff, -0x0f,0x0f,0x07,0x07,0xff,0xff, -0x1f,0x1f,0x0f,0x0f,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xf8,0xff, -0x80,0x80,0xc0,0xe5,0xf2,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x02,0x00,0x00,0x94,0xc9,0xff, -0x06,0x02,0x00,0x01,0x83,0xff, -0x0e,0x06,0x03,0x03,0x07,0xff, -0x0f,0x0f,0x07,0x07,0x0f,0xff, -0x1f,0x1f,0x0f,0x0f,0x1f,0xff, -0xc0,0xc0,0xe0,0xf0,0xf8,0xfc, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf1, -0x02,0x00,0x00,0x80,0xd5,0xeb, -0x06,0x02,0x00,0x01,0x83,0xc7, -0x0e,0x06,0x03,0x03,0x07,0x8f, -0x0f,0x0f,0x07,0x07,0x0f,0x1f, -0x1f,0x1f,0x0f,0x0f,0x5f,0xbf, -0xfe,0xc0,0xe0,0xf0,0xf8,0xfe, -0xfe,0x80,0xc0,0xe0,0xf0,0xfd, -0x1e,0x00,0x80,0xc0,0xe0,0xfb, -0x1e,0x00,0x00,0x80,0xc1,0xf7, -0x1e,0x02,0x00,0x01,0x83,0xef, -0x1e,0x06,0x03,0x03,0x07,0xdf, -0x1f,0x0f,0x07,0x07,0x0f,0xbf, -0x1f,0x1f,0x0f,0x0f,0x1f,0x7f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf5,0xff,0xff,0xff,0xff, -0x85,0x82,0xff,0xff,0xff,0xff, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x16,0x0a,0xff,0xff,0xff,0xff, -0x2e,0x16,0xff,0xff,0xff,0xff, -0x5e,0x2e,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xf8,0xf2,0xe1,0xff,0xff,0xff, -0x80,0x85,0xc2,0xff,0xff,0xff, -0x00,0x0a,0x84,0xff,0xff,0xff, -0x02,0x14,0x08,0xff,0xff,0xff, -0x06,0x2a,0x10,0xff,0xff,0xff, -0x0e,0x56,0x23,0xff,0xff,0xff, -0x1f,0xaf,0x47,0xff,0xff,0xff, -0x1f,0x1f,0x0f,0xff,0xff,0xff, -0xf8,0xf0,0xe2,0xf1,0xff,0xff, -0x80,0x80,0xc5,0xe2,0xff,0xff, -0x00,0x00,0x8a,0xc4,0xff,0xff, -0x02,0x00,0x14,0x88,0xff,0xff, -0x06,0x02,0x28,0x11,0xff,0xff, -0x0e,0x06,0x53,0x23,0xff,0xff, -0x1f,0x0f,0x07,0x07,0xff,0xff, -0x1f,0x1f,0x0f,0x0f,0xff,0xff, -0xf8,0xf0,0xe0,0xf0,0xf8,0xff, -0x80,0x80,0xc0,0xe5,0xf2,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x02,0x00,0x00,0x94,0xc9,0xff, -0x06,0x02,0x00,0x01,0x83,0xff, -0x0e,0x06,0x03,0x03,0x07,0xff, -0x1f,0x0f,0x07,0x07,0x0f,0xff, -0x1f,0x1f,0x0f,0x0f,0x1f,0xff, -0xf8,0xf0,0xe0,0xf0,0xf8,0xfc, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf1, -0x02,0x00,0x00,0x80,0xd5,0xeb, -0x06,0x02,0x00,0x01,0x83,0xc7, -0x0e,0x06,0x03,0x03,0x07,0x8f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0x1f,0x1f,0x0f,0x0f,0x5f,0xbf, -0xfe,0xf0,0xe0,0xf0,0xf8,0xfe, -0xfe,0x80,0xc0,0xe0,0xf0,0xfd, -0x7e,0x00,0x80,0xc0,0xe0,0xfb, -0x3e,0x00,0x00,0x80,0xc1,0xf7, -0x3e,0x02,0x00,0x01,0x83,0xef, -0x3e,0x06,0x03,0x03,0x07,0xdf, -0x3f,0x0f,0x07,0x07,0x0f,0xbf, -0x3f,0x1f,0x0f,0x0f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xf5,0xea,0xff,0xff,0xff,0xff, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x14,0x0a,0xff,0xff,0xff,0xff, -0x2e,0x16,0xff,0xff,0xff,0xff, -0x5e,0x2e,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfc,0xfa,0xf1,0xff,0xff,0xff, -0xf0,0xe5,0xc2,0xff,0xff,0xff, -0x00,0x0a,0x84,0xff,0xff,0xff, -0x00,0x14,0x08,0xff,0xff,0xff, -0x06,0x2a,0x10,0xff,0xff,0xff, -0x0e,0x56,0x23,0xff,0xff,0xff, -0x1f,0xaf,0x47,0xff,0xff,0xff, -0x3f,0x1f,0x0f,0xff,0xff,0xff, -0xfc,0xf8,0xf2,0xf1,0xff,0xff, -0xf0,0xe0,0xc5,0xe2,0xff,0xff, -0x00,0x00,0x8a,0xc4,0xff,0xff, -0x00,0x00,0x14,0x88,0xff,0xff, -0x06,0x02,0x28,0x11,0xff,0xff, -0x0e,0x06,0x53,0x23,0xff,0xff, -0x1f,0x0f,0x07,0x07,0xff,0xff, -0x3f,0x1f,0x0f,0x0f,0xff,0xff, -0xfc,0xf8,0xf0,0xf0,0xf8,0xff, -0xf0,0xe0,0xc0,0xe5,0xf2,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x94,0xc9,0xff, -0x06,0x02,0x00,0x01,0x83,0xff, -0x0e,0x06,0x03,0x03,0x07,0xff, -0x1f,0x0f,0x07,0x07,0x0f,0xff, -0x3f,0x1f,0x0f,0x0f,0x1f,0xff, -0xfc,0xf8,0xf0,0xf0,0xf8,0xfc, -0xf0,0xe0,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf1, -0x00,0x00,0x00,0x80,0xd5,0xeb, -0x06,0x02,0x00,0x01,0x83,0xc7, -0x0e,0x06,0x03,0x03,0x07,0x8f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0x3f,0x1f,0x0f,0x0f,0x5f,0xbf, -0xfe,0xf8,0xf0,0xf0,0xf8,0xfe, -0xfe,0xe0,0xc0,0xe0,0xf0,0xfd, -0x7e,0x00,0x80,0xc0,0xe0,0xfb, -0x7e,0x00,0x00,0x80,0xc1,0xf7, -0x7e,0x02,0x00,0x01,0x83,0xef, -0x7e,0x06,0x03,0x03,0x07,0xdf, -0x7f,0x0f,0x07,0x07,0x0f,0xbf, -0x7f,0x1f,0x0f,0x0f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0x6a,0x54,0xff,0xff,0xff,0xff, -0x14,0x08,0xff,0xff,0xff,0xff, -0x2a,0x14,0xff,0xff,0xff,0xff, -0x5e,0x2e,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfc,0xfa,0xf1,0xff,0xff,0xff, -0xf8,0xf5,0xe2,0xff,0xff,0xff, -0x60,0x4a,0x84,0xff,0xff,0xff, -0x00,0x14,0x08,0xff,0xff,0xff, -0x02,0x28,0x10,0xff,0xff,0xff, -0x0e,0x56,0x23,0xff,0xff,0xff, -0x1f,0xaf,0x47,0xff,0xff,0xff, -0x3f,0x1f,0x0f,0xff,0xff,0xff, -0xfc,0xf8,0xf2,0xf1,0xff,0xff, -0xf8,0xf0,0xe5,0xe2,0xff,0xff, -0x60,0x40,0x8a,0xc4,0xff,0xff, -0x00,0x00,0x14,0x88,0xff,0xff, -0x02,0x00,0x28,0x11,0xff,0xff, -0x0e,0x06,0x53,0x23,0xff,0xff, -0x1f,0x0f,0x07,0x07,0xff,0xff, -0x3f,0x1f,0x0f,0x0f,0xff,0xff, -0xfc,0xf8,0xf0,0xf0,0xf8,0xff, -0xf8,0xf0,0xe0,0xe5,0xf2,0xff, -0x60,0x40,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x94,0xc9,0xff, -0x02,0x00,0x00,0x01,0x83,0xff, -0x0e,0x06,0x03,0x03,0x07,0xff, -0x1f,0x0f,0x07,0x07,0x0f,0xff, -0x3f,0x1f,0x0f,0x0f,0x1f,0xff, -0xfc,0xf8,0xf0,0xf0,0xf8,0xfc, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x60,0x40,0x80,0xc0,0xe0,0xf1, -0x00,0x00,0x00,0x80,0xd5,0xeb, -0x02,0x00,0x00,0x01,0x83,0xc7, -0x0e,0x06,0x03,0x03,0x07,0x8f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0x3f,0x1f,0x0f,0x0f,0x5f,0xbf, -0xfe,0xf8,0xf0,0xf0,0xf8,0xfe, -0xfe,0xf0,0xe0,0xe0,0xf0,0xfd, -0x7e,0x40,0x80,0xc0,0xe0,0xfb, -0x7e,0x00,0x00,0x80,0xc1,0xf7, -0x7e,0x00,0x00,0x01,0x83,0xef, -0x7e,0x06,0x03,0x03,0x07,0xdf, -0x7f,0x0f,0x07,0x07,0x0f,0xbf, -0x7f,0x1f,0x0f,0x0f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0x7a,0x74,0xff,0xff,0xff,0xff, -0x54,0x28,0xff,0xff,0xff,0xff, -0x28,0x10,0xff,0xff,0xff,0xff, -0x56,0x2a,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xf0,0xff,0xff,0xff, -0xf8,0xf5,0xe2,0xff,0xff,0xff, -0x70,0x6a,0xc4,0xff,0xff,0xff, -0x40,0x14,0x08,0xff,0xff,0xff, -0x00,0x28,0x10,0xff,0xff,0xff, -0x06,0x52,0x21,0xff,0xff,0xff, -0x1f,0xaf,0x47,0xff,0xff,0xff, -0x3f,0x5f,0x8f,0xff,0xff,0xff, -0xfc,0xf8,0xf0,0xf0,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xff,0xff, -0x70,0x60,0xca,0xc4,0xff,0xff, -0x40,0x00,0x14,0x88,0xff,0xff, -0x00,0x00,0x28,0x11,0xff,0xff, -0x06,0x02,0x51,0x23,0xff,0xff, -0x1f,0x0f,0xa7,0x47,0xff,0xff, -0x3f,0x1f,0x4f,0x8f,0xff,0xff, -0xfc,0xf8,0xf0,0xf0,0xf8,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xff, -0x70,0x60,0xc0,0xc0,0xe0,0xff, -0x40,0x00,0x00,0x80,0xc1,0xff, -0x00,0x00,0x00,0x29,0x93,0xff, -0x06,0x02,0x01,0x03,0x07,0xff, -0x1f,0x0f,0x07,0xa7,0x4f,0xff, -0x3f,0x1f,0x0f,0x0f,0x1f,0xff, -0xfc,0xf8,0xf0,0xf0,0xfa,0xfd, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf1, -0x40,0x00,0x00,0x80,0xc1,0xe3, -0x00,0x00,0x00,0x01,0xab,0xd7, -0x06,0x02,0x01,0x03,0x07,0x8f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0x3f,0x1f,0x0f,0x0f,0x1f,0x3f, -0xfe,0xf8,0xf0,0xf0,0xf8,0xfe, -0xfe,0xf0,0xe0,0xe0,0xf0,0xfd, -0x7e,0x60,0xc0,0xc0,0xe0,0xfb, -0x7e,0x00,0x00,0x80,0xc1,0xf7, -0x7e,0x00,0x00,0x01,0x83,0xef, -0x7e,0x02,0x01,0x03,0x07,0xdf, -0x7f,0x0f,0x07,0x07,0x0f,0xbf, -0x7f,0x1f,0x0f,0x0f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0x7a,0x74,0xff,0xff,0xff,0xff, -0x74,0x68,0xff,0xff,0xff,0xff, -0x28,0x50,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0xaf,0x57,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xf0,0xff,0xff,0xff, -0xf8,0xf5,0xe2,0xff,0xff,0xff, -0x70,0x6a,0xc4,0xff,0xff,0xff, -0x60,0x54,0x08,0xff,0xff,0xff, -0x00,0x28,0x10,0xff,0xff,0xff, -0x00,0x50,0x21,0xff,0xff,0xff, -0x0f,0xa7,0x43,0xff,0xff,0xff, -0x3f,0x5f,0x8f,0xff,0xff,0xff, -0xfc,0xf8,0xf0,0xf0,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xff,0xff, -0x70,0x60,0xca,0xc4,0xff,0xff, -0x60,0x40,0x14,0x88,0xff,0xff, -0x00,0x00,0x28,0x11,0xff,0xff, -0x00,0x00,0x51,0x23,0xff,0xff, -0x0f,0x07,0xa3,0x47,0xff,0xff, -0x3f,0x1f,0x4f,0x8f,0xff,0xff, -0xfc,0xf8,0xf0,0xf0,0xf8,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xff, -0x70,0x60,0xc0,0xc0,0xe0,0xff, -0x60,0x40,0x00,0x80,0xc1,0xff, -0x00,0x00,0x00,0x29,0x93,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x0f,0x07,0x03,0xa7,0x4f,0xff, -0x3f,0x1f,0x0f,0x0f,0x1f,0xff, -0xfc,0xf8,0xf0,0xf0,0xfa,0xfd, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf1, -0x60,0x40,0x00,0x80,0xc1,0xe3, -0x00,0x00,0x00,0x01,0xab,0xd7, -0x00,0x00,0x01,0x03,0x07,0x8f, -0x0f,0x07,0x03,0x07,0x0f,0x1f, -0x3f,0x1f,0x0f,0x0f,0x1f,0x3f, -0xfe,0xf8,0xf0,0xf0,0xf8,0xfe, -0xfe,0xf0,0xe0,0xe0,0xf0,0xfd, -0x7e,0x60,0xc0,0xc0,0xe0,0xfb, -0x7e,0x40,0x00,0x80,0xc1,0xf7, -0x7e,0x00,0x00,0x01,0x83,0xef, -0x7e,0x00,0x01,0x03,0x07,0xdf, -0x7f,0x07,0x03,0x07,0x0f,0xbf, -0x7f,0x1f,0x0f,0x0f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0x7a,0x74,0xff,0xff,0xff,0xff, -0x74,0x68,0xff,0xff,0xff,0xff, -0x68,0x50,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0xa1,0x41,0xff,0xff,0xff,0xff, -0x5f,0xaf,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xf0,0xff,0xff,0xff, -0xf8,0xf5,0xe2,0xff,0xff,0xff, -0x70,0x6a,0xc4,0xff,0xff,0xff, -0x60,0x54,0x08,0xff,0xff,0xff, -0x40,0x28,0x10,0xff,0xff,0xff, -0x00,0x50,0x21,0xff,0xff,0xff, -0x01,0xa1,0x43,0xff,0xff,0xff, -0x1f,0x4f,0x87,0xff,0xff,0xff, -0xf8,0xf8,0xf0,0xf0,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xff,0xff, -0x70,0x60,0xca,0xc4,0xff,0xff, -0x60,0x40,0x14,0x88,0xff,0xff, -0x40,0x00,0x28,0x11,0xff,0xff, -0x00,0x00,0x51,0x23,0xff,0xff, -0x01,0x01,0xa3,0x47,0xff,0xff, -0x1f,0x0f,0x47,0x8f,0xff,0xff, -0xf8,0xf8,0xf0,0xf0,0xf8,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xff, -0x70,0x60,0xc0,0xc0,0xe0,0xff, -0x60,0x40,0x00,0x80,0xc1,0xff, -0x40,0x00,0x00,0x29,0x93,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0xa7,0x4f,0xff, -0x1f,0x0f,0x07,0x0f,0x1f,0xff, -0xf8,0xf8,0xf0,0xf0,0xfa,0xfd, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf1, -0x60,0x40,0x00,0x80,0xc1,0xe3, -0x40,0x00,0x00,0x01,0xab,0xd7, -0x00,0x00,0x01,0x03,0x07,0x8f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0x1f,0x0f,0x07,0x0f,0x1f,0x3f, -0xfc,0xf8,0xf0,0xf0,0xf8,0xfe, -0xfc,0xf0,0xe0,0xe0,0xf0,0xfd, -0x7c,0x60,0xc0,0xc0,0xe0,0xfb, -0x7c,0x40,0x00,0x80,0xc1,0xf7, -0x7c,0x00,0x00,0x01,0x83,0xef, -0x7e,0x00,0x01,0x03,0x07,0xdf, -0x7f,0x01,0x03,0x07,0x0f,0xbf, -0x7f,0x0f,0x07,0x0f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0x7a,0x74,0xff,0xff,0xff,0xff, -0x74,0x68,0xff,0xff,0xff,0xff, -0x68,0x50,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0xa1,0x41,0xff,0xff,0xff,0xff, -0x43,0x83,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xf0,0xff,0xff,0xff, -0xf0,0xf5,0xe2,0xff,0xff,0xff, -0x70,0x6a,0xc4,0xff,0xff,0xff, -0x60,0x54,0x08,0xff,0xff,0xff, -0x40,0x28,0x10,0xff,0xff,0xff, -0x00,0x50,0x21,0xff,0xff,0xff, -0x01,0xa1,0x43,0xff,0xff,0xff, -0x03,0x43,0x87,0xff,0xff,0xff, -0xf8,0xf8,0xf0,0xf0,0xff,0xff, -0xf0,0xf0,0xe0,0xe0,0xff,0xff, -0x70,0x60,0xca,0xc4,0xff,0xff, -0x60,0x40,0x14,0x88,0xff,0xff, -0x40,0x00,0x28,0x11,0xff,0xff, -0x00,0x00,0x51,0x23,0xff,0xff, -0x01,0x01,0xa3,0x47,0xff,0xff, -0x03,0x03,0x47,0x8f,0xff,0xff, -0xf8,0xf8,0xf0,0xf0,0xf8,0xff, -0xf0,0xf0,0xe0,0xe0,0xf0,0xff, -0x70,0x60,0xc0,0xc0,0xe0,0xff, -0x60,0x40,0x00,0x80,0xc1,0xff, -0x40,0x00,0x00,0x29,0x93,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0xa7,0x4f,0xff, -0x03,0x03,0x07,0x0f,0x1f,0xff, -0xf8,0xf8,0xf0,0xf0,0xfa,0xfd, -0xf0,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf1, -0x60,0x40,0x00,0x80,0xc1,0xe3, -0x40,0x00,0x00,0x01,0xab,0xd7, -0x00,0x00,0x01,0x03,0x07,0x8f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0x03,0x03,0x07,0x0f,0x1f,0x3f, -0xf8,0xf8,0xf0,0xf0,0xf8,0xfe, -0xf8,0xf0,0xe0,0xe0,0xf0,0xfd, -0x78,0x60,0xc0,0xc0,0xe0,0xfb, -0x78,0x40,0x00,0x80,0xc1,0xf7, -0x78,0x00,0x00,0x01,0x83,0xef, -0x78,0x00,0x01,0x03,0x07,0xdf, -0x7f,0x01,0x03,0x07,0x0f,0xbf, -0x7f,0x03,0x07,0x0f,0x1f,0x7f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0a,0x06,0xff,0xff,0xff,0xff, -0x17,0x0f,0xff,0xff,0xff,0xff, -0x2f,0x17,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xc0,0xc2,0xe1,0xff,0xff,0xff, -0x80,0x85,0xc2,0xff,0xff,0xff, -0x03,0x0a,0x84,0xff,0xff,0xff, -0x07,0x16,0x0a,0xff,0xff,0xff, -0x07,0x2e,0x16,0xff,0xff,0xff, -0x0f,0x5e,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x4f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0xff,0xc0,0xe2,0xf1,0xff,0xff, -0xff,0x80,0xc5,0xe2,0xff,0xff, -0x03,0x00,0x8a,0xc4,0xff,0xff, -0x07,0x02,0x14,0x88,0xff,0xff, -0x07,0x06,0x2a,0x11,0xff,0xff, -0x0f,0x0e,0x07,0x03,0xff,0xff, -0x0f,0x0f,0x0f,0x07,0xff,0xff, -0x1f,0x1f,0x1f,0x0f,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xf8,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x03,0x00,0x80,0xca,0xe4,0xff, -0x07,0x02,0x00,0x94,0xc9,0xff, -0x07,0x06,0x02,0x01,0x83,0xff, -0x0f,0x0e,0x07,0x03,0x07,0xff, -0x0f,0x0f,0x0f,0x07,0x0f,0xff, -0x1f,0x1f,0x1f,0x4f,0x9f,0xff, -0xff,0xc0,0xe0,0xf0,0xfa,0xfd, -0xff,0x80,0xc0,0xe0,0xf5,0xfa, -0x0f,0x00,0x80,0xc0,0xea,0xf5, -0x0f,0x02,0x00,0x80,0xc1,0xe3, -0x0f,0x06,0x02,0x01,0x83,0xc7, -0x0f,0x0e,0x07,0x03,0x57,0xaf, -0x0f,0x0f,0x0f,0x07,0x0f,0x1f, -0x1f,0x1f,0x1f,0x0f,0x1f,0x3f, -0xff,0xc0,0xe0,0xf0,0xf8,0xfc, -0xff,0x80,0xc0,0xe0,0xf0,0xf8, -0x1f,0x00,0x80,0xc0,0xe0,0xf1, -0x1f,0x02,0x00,0x80,0xc1,0xf7, -0x1f,0x06,0x02,0x01,0x83,0xef, -0x1f,0x0e,0x07,0x03,0x07,0xdf, -0x1f,0x0f,0x0f,0x07,0x0f,0xbf, -0x1f,0x1f,0x1f,0x0f,0x1f,0x7f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x15,0x0f,0xff,0xff,0xff,0xff, -0x2f,0x1f,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xfe,0xfa,0xf5,0xff,0xff,0xff, -0x80,0x85,0xc2,0xff,0xff,0xff, -0x00,0x0a,0x84,0xff,0xff,0xff, -0x06,0x16,0x0a,0xff,0xff,0xff, -0x0e,0x2e,0x16,0xff,0xff,0xff, -0x0e,0x5e,0x2f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0xfe,0xf8,0xf2,0xf1,0xff,0xff, -0xfe,0x80,0xc5,0xe2,0xff,0xff, -0x7e,0x00,0x8a,0xc4,0xff,0xff, -0x06,0x02,0x14,0x88,0xff,0xff, -0x0e,0x06,0x2a,0x11,0xff,0xff, -0x0e,0x0e,0x07,0x03,0xff,0xff, -0x1f,0x1f,0x0f,0x07,0xff,0xff, -0x1f,0x1f,0x1f,0x0f,0xff,0xff, -0xfe,0xf8,0xf0,0xf0,0xf8,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xca,0xe4,0xff, -0x06,0x02,0x00,0x94,0xc9,0xff, -0x0e,0x06,0x02,0x01,0x83,0xff, -0x0e,0x0e,0x07,0x03,0x07,0xff, -0x1f,0x1f,0x0f,0x07,0x0f,0xff, -0x1f,0x1f,0x1f,0x4f,0x9f,0xff, -0xfe,0xf8,0xf0,0xf0,0xfa,0xfd, -0xfe,0x80,0xc0,0xe0,0xf5,0xfa, -0x7e,0x00,0x80,0xc0,0xea,0xf5, -0x1e,0x02,0x00,0x80,0xc1,0xe3, -0x1e,0x06,0x02,0x01,0x83,0xc7, -0x1e,0x0e,0x07,0x03,0x57,0xaf, -0x1f,0x1f,0x0f,0x07,0x0f,0x1f, -0x1f,0x1f,0x1f,0x0f,0x1f,0x3f, -0xfe,0xf8,0xf0,0xf0,0xf8,0xfc, -0xfe,0x80,0xc0,0xe0,0xf0,0xf8, -0x7e,0x00,0x80,0xc0,0xe0,0xf1, -0x3e,0x02,0x00,0x80,0xc1,0xf7, -0x3e,0x06,0x02,0x01,0x83,0xef, -0x3e,0x0e,0x07,0x03,0x07,0xdf, -0x3f,0x1f,0x0f,0x07,0x0f,0xbf, -0x3f,0x1f,0x1f,0x0f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x1f,0xff,0xff,0xff,0xff, -0x5f,0x3f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfe,0xfe,0xfd,0xff,0xff,0xff, -0xfc,0xf5,0xea,0xff,0xff,0xff, -0x00,0x0a,0x84,0xff,0xff,0xff, -0x02,0x14,0x0a,0xff,0xff,0xff, -0x0e,0x2e,0x16,0xff,0xff,0xff, -0x1e,0x5e,0x2f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfc,0xfa,0xf1,0xff,0xff, -0xfe,0xf0,0xe5,0xe2,0xff,0xff, -0x7e,0x00,0x8a,0xc4,0xff,0xff, -0x7e,0x00,0x14,0x88,0xff,0xff, -0x0e,0x06,0x2a,0x11,0xff,0xff, -0x1e,0x0e,0x07,0x03,0xff,0xff, -0x1f,0x1f,0x0f,0x07,0xff,0xff, -0x3f,0x3f,0x1f,0x0f,0xff,0xff, -0xfe,0xfc,0xf8,0xf0,0xf8,0xff, -0xfc,0xf0,0xe0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xca,0xe4,0xff, -0x02,0x00,0x00,0x94,0xc9,0xff, -0x0e,0x06,0x02,0x01,0x83,0xff, -0x1e,0x0e,0x07,0x03,0x07,0xff, -0x1f,0x1f,0x0f,0x07,0x0f,0xff, -0x3f,0x3f,0x1f,0x4f,0x9f,0xff, -0xfe,0xfc,0xf8,0xf0,0xfa,0xfd, -0xfe,0xf0,0xe0,0xe0,0xf5,0xfa, -0x7e,0x00,0x80,0xc0,0xea,0xf5, -0x7e,0x00,0x00,0x80,0xc1,0xe3, -0x3e,0x06,0x02,0x01,0x83,0xc7, -0x3e,0x0e,0x07,0x03,0x57,0xaf, -0x3f,0x1f,0x0f,0x07,0x0f,0x1f, -0x3f,0x3f,0x1f,0x0f,0x1f,0x3f, -0xfe,0xfc,0xf8,0xf0,0xf8,0xfc, -0xfe,0xf0,0xe0,0xe0,0xf0,0xf8, -0x7e,0x00,0x80,0xc0,0xe0,0xf1, -0x7e,0x00,0x00,0x80,0xc1,0xf7, -0x7e,0x06,0x02,0x01,0x83,0xef, -0x7e,0x0e,0x07,0x03,0x07,0xdf, -0x7f,0x1f,0x0f,0x07,0x0f,0xbf, -0x7f,0x3f,0x1f,0x0f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0xfd,0xfe,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x57,0x3f,0xff,0xff,0xff,0xff, -0xbf,0x7f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfe,0xfe,0xfd,0xff,0xff,0xff, -0xfc,0xfd,0xfa,0xff,0xff,0xff, -0x78,0x6a,0xd4,0xff,0xff,0xff, -0x00,0x14,0x08,0xff,0xff,0xff, -0x06,0x2a,0x14,0xff,0xff,0xff, -0x1e,0x5e,0x2f,0xff,0xff,0xff, -0x3f,0xbf,0x5f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfc,0xfa,0xf1,0xff,0xff, -0xfc,0xf8,0xf5,0xe2,0xff,0xff, -0x7e,0x60,0xca,0xc4,0xff,0xff, -0x7e,0x00,0x14,0x88,0xff,0xff, -0x7e,0x02,0x28,0x11,0xff,0xff, -0x1e,0x0e,0x07,0x03,0xff,0xff, -0x3f,0x1f,0x0f,0x07,0xff,0xff, -0x3f,0x3f,0x1f,0x0f,0xff,0xff, -0xfe,0xfc,0xf8,0xf0,0xf8,0xff, -0xfc,0xf8,0xf0,0xe0,0xf0,0xff, -0x78,0x60,0xc0,0xca,0xe4,0xff, -0x00,0x00,0x00,0x94,0xc9,0xff, -0x06,0x02,0x00,0x01,0x83,0xff, -0x1e,0x0e,0x07,0x03,0x07,0xff, -0x3f,0x1f,0x0f,0x07,0x0f,0xff, -0x3f,0x3f,0x1f,0x4f,0x9f,0xff, -0xfe,0xfc,0xf8,0xf0,0xfa,0xfd, -0xfe,0xf8,0xf0,0xe0,0xf5,0xfa, -0x7e,0x60,0xc0,0xc0,0xea,0xf5, -0x7e,0x00,0x00,0x80,0xc1,0xe3, -0x7e,0x02,0x00,0x01,0x83,0xc7, -0x7e,0x0e,0x07,0x03,0x57,0xaf, -0x7f,0x1f,0x0f,0x07,0x0f,0x1f, -0x7f,0x3f,0x1f,0x0f,0x1f,0x3f, -0xfe,0xfc,0xf8,0xf0,0xf8,0xfc, -0xfe,0xf8,0xf0,0xe0,0xf0,0xf8, -0x7e,0x60,0xc0,0xc0,0xe0,0xf1, -0x7e,0x00,0x00,0x80,0xc1,0xf7, -0x7e,0x02,0x00,0x01,0x83,0xef, -0x7e,0x0e,0x07,0x03,0x07,0xdf, -0x7f,0x1f,0x0f,0x07,0x0f,0xbf, -0x7f,0x3f,0x1f,0x0f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfe,0xff,0xff,0xff,0xff, -0xea,0xfc,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xbf,0x7f,0xff,0xff,0xff,0xff, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xfc,0xfd,0xfa,0xff,0xff,0xff, -0x78,0x7a,0xf4,0xff,0xff,0xff, -0x60,0x54,0x28,0xff,0xff,0xff, -0x00,0x28,0x10,0xff,0xff,0xff, -0x1e,0x56,0x2b,0xff,0xff,0xff, -0x3f,0xbf,0x5f,0xff,0xff,0xff, -0x7f,0x7f,0xbf,0xff,0xff,0xff, -0xfc,0xfc,0xf8,0xf0,0xff,0xff, -0xfc,0xf8,0xf0,0xe0,0xff,0xff, -0x78,0x70,0xe0,0xc0,0xff,0xff, -0x7e,0x40,0x14,0x88,0xff,0xff, -0x7e,0x00,0x28,0x11,0xff,0xff, -0x7e,0x06,0x53,0x23,0xff,0xff, -0x3f,0x1f,0xaf,0x47,0xff,0xff, -0x7f,0x3f,0x5f,0x8f,0xff,0xff, -0xfc,0xfc,0xf8,0xf2,0xf9,0xff, -0xfc,0xf8,0xf0,0xe0,0xf0,0xff, -0x78,0x70,0xe0,0xc0,0xe0,0xff, -0x60,0x40,0x00,0x80,0xc1,0xff, -0x00,0x00,0x00,0x29,0x93,0xff, -0x1e,0x06,0x03,0x53,0x27,0xff, -0x3f,0x1f,0x0f,0x07,0x0f,0xff, -0x7f,0x3f,0x1f,0x0f,0x1f,0xff, -0xfe,0xfc,0xf8,0xf0,0xf8,0xfc, -0xfe,0xf8,0xf0,0xe0,0xf0,0xf8, -0x7e,0x70,0xe0,0xc0,0xea,0xf5, -0x7e,0x40,0x00,0x80,0xc1,0xe3, -0x7e,0x00,0x00,0x01,0x83,0xc7, -0x7e,0x06,0x03,0x03,0x57,0xaf, -0x7f,0x1f,0x0f,0x07,0xaf,0x5f, -0x7f,0x3f,0x1f,0x0f,0x5f,0xbf, -0xfe,0xfc,0xf8,0xf0,0xf8,0xfe, -0xfe,0xf8,0xf0,0xe0,0xf0,0xfd, -0x7e,0x70,0xe0,0xc0,0xe0,0xfb, -0x7e,0x40,0x00,0x80,0xc1,0xf7, -0x7e,0x00,0x00,0x01,0x83,0xef, -0x7e,0x06,0x03,0x03,0x07,0x8f, -0x7f,0x1f,0x0f,0x07,0x0f,0x1f, -0x7f,0x3f,0x1f,0x0f,0x1f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xfc,0xff,0xff,0xff,0xff, -0xd4,0xf8,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0x78,0x7a,0xf4,0xff,0xff,0xff, -0x70,0x74,0x68,0xff,0xff,0xff, -0x40,0x28,0x50,0xff,0xff,0xff, -0x00,0x50,0x21,0xff,0xff,0xff, -0x3f,0xaf,0x57,0xff,0xff,0xff, -0x7f,0x7f,0xbf,0xff,0xff,0xff, -0xfc,0xfc,0xf8,0xf0,0xff,0xff, -0xf8,0xf8,0xf0,0xe0,0xff,0xff, -0x78,0x70,0xe0,0xc0,0xff,0xff, -0x70,0x60,0x54,0x88,0xff,0xff, -0x7e,0x00,0x28,0x11,0xff,0xff, -0x7e,0x00,0x51,0x23,0xff,0xff, -0x7f,0x0f,0xa7,0x47,0xff,0xff, -0x7f,0x3f,0x5f,0x8f,0xff,0xff, -0xfc,0xfc,0xf8,0xf2,0xf9,0xff, -0xf8,0xf8,0xf0,0xe0,0xf0,0xff, -0x78,0x70,0xe0,0xc0,0xe0,0xff, -0x70,0x60,0x40,0x80,0xc1,0xff, -0x40,0x00,0x00,0x29,0x93,0xff, -0x00,0x00,0x01,0x53,0x27,0xff, -0x3f,0x0f,0x07,0x07,0x0f,0xff, -0x7f,0x3f,0x1f,0x0f,0x1f,0xff, -0xfc,0xfc,0xf8,0xf0,0xf8,0xfc, -0xfc,0xf8,0xf0,0xe0,0xf0,0xf8, -0x7c,0x70,0xe0,0xc0,0xea,0xf5, -0x7c,0x60,0x40,0x80,0xc1,0xe3, -0x7e,0x00,0x00,0x01,0x83,0xc7, -0x7e,0x00,0x01,0x03,0x57,0xaf, -0x7f,0x0f,0x07,0x07,0xaf,0x5f, -0x7f,0x3f,0x1f,0x0f,0x5f,0xbf, -0xfe,0xfc,0xf8,0xf0,0xf8,0xfe, -0xfe,0xf8,0xf0,0xe0,0xf0,0xfd, -0x7e,0x70,0xe0,0xc0,0xe0,0xfb, -0x7e,0x60,0x40,0x80,0xc1,0xf7, -0x7e,0x00,0x00,0x01,0x83,0xef, -0x7e,0x00,0x01,0x03,0x07,0x8f, -0x7f,0x0f,0x07,0x07,0x0f,0x1f, -0x7f,0x3f,0x1f,0x0f,0x1f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xf8,0xff,0xff,0xff,0xff, -0xa8,0xf0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0x70,0x7a,0xf4,0xff,0xff,0xff, -0x70,0x74,0x68,0xff,0xff,0xff, -0x60,0x68,0x50,0xff,0xff,0xff, -0x00,0x50,0x21,0xff,0xff,0xff, -0x01,0xa1,0x43,0xff,0xff,0xff, -0x7f,0x5f,0xaf,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xf0,0xff,0xff, -0xf8,0xf8,0xf0,0xe0,0xff,0xff, -0x70,0x70,0xe0,0xc0,0xff,0xff, -0x70,0x60,0x54,0x88,0xff,0xff, -0x60,0x40,0x28,0x11,0xff,0xff, -0x7e,0x00,0x51,0x23,0xff,0xff, -0x7f,0x01,0xa3,0x47,0xff,0xff, -0x7f,0x1f,0x4f,0x8f,0xff,0xff, -0xf8,0xf8,0xf8,0xf2,0xf9,0xff, -0xf8,0xf8,0xf0,0xe0,0xf0,0xff, -0x70,0x70,0xe0,0xc0,0xe0,0xff, -0x70,0x60,0x40,0x80,0xc1,0xff, -0x60,0x40,0x00,0x29,0x93,0xff, -0x00,0x00,0x01,0x53,0x27,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0x7f,0x1f,0x0f,0x0f,0x1f,0xff, -0xf8,0xf8,0xf8,0xf0,0xf8,0xfc, -0xf8,0xf8,0xf0,0xe0,0xf0,0xf8, -0x78,0x70,0xe0,0xc0,0xea,0xf5, -0x78,0x60,0x40,0x80,0xc1,0xe3, -0x78,0x40,0x00,0x01,0x83,0xc7, -0x7e,0x00,0x01,0x03,0x57,0xaf, -0x7f,0x01,0x03,0x07,0xaf,0x5f, -0x7f,0x1f,0x0f,0x0f,0x5f,0xbf, -0xfc,0xf8,0xf8,0xf0,0xf8,0xfe, -0xfc,0xf8,0xf0,0xe0,0xf0,0xfd, -0x7c,0x70,0xe0,0xc0,0xe0,0xfb, -0x7c,0x60,0x40,0x80,0xc1,0xf7, -0x7c,0x40,0x00,0x01,0x83,0xef, -0x7e,0x00,0x01,0x03,0x07,0x8f, -0x7f,0x01,0x03,0x07,0x0f,0x1f, -0x7f,0x1f,0x0f,0x0f,0x1f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xe8,0xff,0xff,0xff,0xff, -0xe8,0xf0,0xff,0xff,0xff,0xff, -0x50,0x60,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf0,0xf5,0xf2,0xff,0xff,0xff, -0xf0,0x7a,0xf4,0xff,0xff,0xff, -0xe0,0x74,0x68,0xff,0xff,0xff, -0xe0,0x68,0x50,0xff,0xff,0xff, -0xc0,0x50,0x21,0xff,0xff,0xff, -0x01,0xa1,0x43,0xff,0xff,0xff, -0x03,0x43,0x87,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xf0,0xff,0xff, -0xf0,0xf0,0xf0,0xe0,0xff,0xff, -0xf0,0x70,0xe0,0xc0,0xff,0xff, -0xe0,0x60,0x54,0x88,0xff,0xff, -0xe0,0x40,0x28,0x11,0xff,0xff, -0xc0,0x00,0x51,0x23,0xff,0xff, -0xff,0x01,0xa3,0x47,0xff,0xff, -0xff,0x03,0x47,0x8f,0xff,0xff, -0xf8,0xf8,0xf8,0xf2,0xf9,0xff, -0xf0,0xf0,0xf0,0xe0,0xf0,0xff, -0xf0,0x70,0xe0,0xc0,0xe0,0xff, -0xe0,0x60,0x40,0x80,0xc1,0xff, -0xe0,0x40,0x00,0x29,0x93,0xff, -0xc0,0x00,0x01,0x53,0x27,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0x03,0x03,0x07,0x0f,0x1f,0xff, -0xf8,0xf8,0xf8,0xf0,0xf8,0xfc, -0xf0,0xf0,0xf0,0xe0,0xf0,0xf8, -0xf0,0x70,0xe0,0xc0,0xea,0xf5, -0xf0,0x60,0x40,0x80,0xc1,0xe3, -0xf0,0x40,0x00,0x01,0x83,0xc7, -0xf0,0x00,0x01,0x03,0x57,0xaf, -0xff,0x01,0x03,0x07,0xaf,0x5f, -0xff,0x03,0x07,0x0f,0x5f,0xbf, -0xf8,0xf8,0xf8,0xf0,0xf8,0xfe, -0xf8,0xf0,0xf0,0xe0,0xf0,0xfd, -0xf8,0x70,0xe0,0xc0,0xe0,0xfb, -0xf8,0x60,0x40,0x80,0xc1,0xf7, -0xf8,0x40,0x00,0x01,0x83,0xef, -0xf8,0x00,0x01,0x03,0x07,0x8f, -0xff,0x01,0x03,0x07,0x0f,0x1f, -0xff,0x03,0x07,0x0f,0x1f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0a,0x07,0xff,0xff,0xff,0xff, -0x17,0x0f,0xff,0xff,0xff,0xff, -0x2f,0x17,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x0a,0x86,0xff,0xff,0xff, -0x07,0x17,0x0f,0xff,0xff,0xff, -0x07,0x2f,0x17,0xff,0xff,0xff, -0x0f,0x5f,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x4f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0xc0,0xc0,0xe2,0xf1,0xff,0xff, -0xfe,0x80,0xc5,0xe2,0xff,0xff, -0x02,0x03,0x8a,0xc4,0xff,0xff, -0x06,0x07,0x16,0x8a,0xff,0xff, -0x06,0x07,0x2e,0x17,0xff,0xff, -0x0e,0x0f,0x0f,0x0f,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0xfe,0xff,0xe0,0xf0,0xf8,0xff, -0xfe,0xff,0xc0,0xe0,0xf0,0xff, -0x06,0x03,0x80,0xca,0xe4,0xff, -0x06,0x07,0x02,0x94,0xc9,0xff, -0x06,0x07,0x06,0x03,0x83,0xff, -0x0e,0x0f,0x0f,0x07,0x07,0xff, -0x0f,0x0f,0x0f,0x0f,0x0f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0xfe,0xc0,0xe0,0xf0,0xfa,0xfd, -0xfe,0x80,0xc0,0xe0,0xf5,0xfa, -0x0e,0x03,0x80,0xc0,0xea,0xf5, -0x0e,0x07,0x02,0x80,0xc1,0xe3, -0x0e,0x07,0x06,0x03,0x83,0xc7, -0x0e,0x0f,0x0f,0x07,0x57,0xaf, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0xfe,0xff,0xe0,0xf0,0xf8,0xfc, -0xfe,0xff,0xc0,0xe0,0xf0,0xf8, -0x1e,0x0f,0x80,0xc0,0xe0,0xf1, -0x1e,0x0f,0x02,0x80,0xc1,0xf7, -0x1e,0x0f,0x06,0x03,0x83,0xef, -0x1e,0x0f,0x0f,0x07,0x07,0xdf, -0x1f,0x0f,0x0f,0x0f,0x0f,0xbf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x0f,0xff,0xff,0xff,0xff, -0x2f,0x1f,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x15,0x0f,0xff,0xff,0xff, -0x0f,0x2f,0x1f,0xff,0xff,0xff, -0x0f,0x5f,0x2f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0xfe,0xfe,0xfa,0xf5,0xff,0xff, -0x80,0x80,0xc5,0xe2,0xff,0xff, -0x7e,0x00,0x8a,0xc4,0xff,0xff, -0x06,0x06,0x16,0x8a,0xff,0xff, -0x0e,0x0e,0x2e,0x17,0xff,0xff, -0x0e,0x0e,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0xfe,0xfe,0xf8,0xf0,0xf8,0xff, -0xfe,0xfe,0xc0,0xe0,0xf0,0xff, -0x7e,0x7e,0x80,0xca,0xe4,0xff, -0x0e,0x06,0x02,0x94,0xc9,0xff, -0x0e,0x0e,0x06,0x03,0x83,0xff, -0x0e,0x0e,0x0f,0x07,0x07,0xff, -0x1f,0x1f,0x1f,0x0f,0x0f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0xfe,0xfe,0xf8,0xf0,0xfa,0xfd, -0xfe,0x80,0xc0,0xe0,0xf5,0xfa, -0x7e,0x00,0x80,0xc0,0xea,0xf5, -0x1e,0x06,0x02,0x80,0xc1,0xe3, -0x1e,0x0e,0x06,0x03,0x83,0xc7, -0x1e,0x0e,0x0f,0x07,0x57,0xaf, -0x1f,0x1f,0x1f,0x0f,0x0f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0xfe,0xfe,0xf8,0xf0,0xf8,0xfc, -0xfe,0xfe,0xc0,0xe0,0xf0,0xf8, -0x7e,0x7e,0x80,0xc0,0xe0,0xf1, -0x3e,0x1e,0x02,0x80,0xc1,0xf7, -0x3e,0x1e,0x06,0x03,0x83,0xef, -0x3e,0x1e,0x0f,0x07,0x07,0xdf, -0x3f,0x1f,0x1f,0x0f,0x0f,0xbf, -0x3f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x2f,0x1f,0xff,0xff,0xff,0xff, -0x5f,0x3f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfe,0xfe,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x2b,0x1f,0xff,0xff,0xff, -0x1f,0x5f,0x3f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfe,0xfe,0xfd,0xff,0xff, -0xfe,0xfc,0xf5,0xea,0xff,0xff, -0x00,0x00,0x8a,0xc4,0xff,0xff, -0x7e,0x02,0x14,0x8a,0xff,0xff, -0x0e,0x0e,0x2e,0x17,0xff,0xff, -0x1e,0x1e,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0x3f,0x3f,0x3f,0x3f,0xff,0xff, -0xfe,0xfe,0xfc,0xf8,0xf8,0xff, -0xfe,0xfe,0xf0,0xe0,0xf0,0xff, -0x7e,0x7e,0x80,0xca,0xe4,0xff, -0x7e,0x7e,0x00,0x94,0xc9,0xff, -0x1e,0x0e,0x06,0x03,0x83,0xff, -0x1e,0x1e,0x0f,0x07,0x07,0xff, -0x1f,0x1f,0x1f,0x0f,0x0f,0xff, -0x3f,0x3f,0x3f,0x5f,0x9f,0xff, -0xfe,0xfe,0xfc,0xf8,0xfa,0xfd, -0xfe,0xfc,0xf0,0xe0,0xf5,0xfa, -0x7e,0x00,0x80,0xc0,0xea,0xf5, -0x7e,0x02,0x00,0x80,0xc1,0xe3, -0x3e,0x0e,0x06,0x03,0x83,0xc7, -0x3e,0x1e,0x0f,0x07,0x57,0xaf, -0x3f,0x1f,0x1f,0x0f,0x0f,0x1f, -0x3f,0x3f,0x3f,0x1f,0x1f,0x3f, -0xfe,0xfe,0xfc,0xf8,0xf8,0xfc, -0xfe,0xfe,0xf0,0xe0,0xf0,0xf8, -0x7e,0x7e,0x80,0xc0,0xe0,0xf1, -0x7e,0x7e,0x00,0x80,0xc1,0xf7, -0x7e,0x3e,0x06,0x03,0x83,0xef, -0x7e,0x3e,0x0f,0x07,0x07,0xdf, -0x7f,0x3f,0x1f,0x0f,0x0f,0xbf, -0x7f,0x3f,0x3f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0xfd,0xfe,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x5f,0x3f,0xff,0xff,0xff,0xff, -0xbf,0x7f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfe,0xfe,0xff,0xff,0xff,0xff, -0xfc,0xfd,0xfe,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x57,0x3f,0xff,0xff,0xff, -0x3f,0xbf,0x7f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfe,0xfe,0xfd,0xff,0xff, -0xfc,0xfc,0xfd,0xfa,0xff,0xff, -0x7e,0x78,0xea,0xd4,0xff,0xff, -0x00,0x00,0x14,0x88,0xff,0xff, -0x7e,0x06,0x2a,0x15,0xff,0xff, -0x1e,0x1e,0x0f,0x0f,0xff,0xff, -0x3f,0x3f,0x1f,0x1f,0xff,0xff, -0x3f,0x3f,0x3f,0x3f,0xff,0xff, -0xfe,0xfe,0xfc,0xf8,0xf8,0xff, -0xfe,0xfc,0xf8,0xf0,0xf0,0xff, -0x7e,0x7e,0xe0,0xca,0xe4,0xff, -0x7e,0x7e,0x00,0x94,0xc9,0xff, -0x7e,0x7e,0x02,0x01,0x83,0xff, -0x3e,0x1e,0x0f,0x07,0x07,0xff, -0x3f,0x3f,0x1f,0x0f,0x0f,0xff, -0x3f,0x3f,0x3f,0x5f,0x9f,0xff, -0xfe,0xfe,0xfc,0xf8,0xfa,0xfd, -0xfe,0xfc,0xf8,0xf0,0xf5,0xfa, -0x7e,0x78,0xe0,0xc0,0xea,0xf5, -0x7e,0x00,0x00,0x80,0xc1,0xe3, -0x7e,0x06,0x02,0x01,0x83,0xc7, -0x7e,0x1e,0x0f,0x07,0x57,0xaf, -0x7f,0x3f,0x1f,0x0f,0x0f,0x1f, -0x7f,0x3f,0x3f,0x1f,0x1f,0x3f, -0xfe,0xfe,0xfc,0xf8,0xf8,0xfc, -0xfe,0xfe,0xf8,0xf0,0xf0,0xf8, -0x7e,0x7e,0xe0,0xc0,0xe0,0xf1, -0x7e,0x7e,0x00,0x80,0xc1,0xf7, -0x7e,0x7e,0x02,0x01,0x83,0xef, -0x7e,0x7e,0x0f,0x07,0x07,0xdf, -0x7f,0x7f,0x1f,0x0f,0x0f,0xbf, -0x7f,0x7f,0x3f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfe,0xff,0xff,0xff,0xff, -0xfa,0xfc,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xbf,0x7f,0xff,0xff,0xff,0xff, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xfc,0xfd,0xfe,0xff,0xff,0xff, -0xf8,0xea,0xfc,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0xbf,0x7f,0xff,0xff,0xff, -0x7f,0x7f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xff,0xff, -0xfc,0xfc,0xf8,0xf8,0xff,0xff, -0x78,0x78,0xf0,0xf0,0xff,0xff, -0x7e,0x60,0x54,0xa8,0xff,0xff, -0x00,0x00,0x28,0x11,0xff,0xff, -0x7e,0x1e,0x57,0x2b,0xff,0xff, -0x3f,0x3f,0xbf,0x5f,0xff,0xff, -0x7f,0x7f,0x7f,0xbf,0xff,0xff, -0xfc,0xfc,0xfc,0xfa,0xf9,0xff, -0xfc,0xfc,0xf8,0xf0,0xf0,0xff, -0x7c,0x78,0xf0,0xe0,0xe0,0xff, -0x7e,0x7e,0x40,0x80,0xc1,0xff, -0x7e,0x7e,0x00,0x29,0x93,0xff, -0x7e,0x7e,0x07,0x53,0x27,0xff, -0x7f,0x3f,0x1f,0x0f,0x0f,0xff, -0x7f,0x7f,0x3f,0x1f,0x1f,0xff, -0xfe,0xfc,0xfc,0xf8,0xf8,0xfc, -0xfe,0xfc,0xf8,0xf0,0xf0,0xf8, -0x7e,0x78,0xf0,0xe0,0xea,0xf5, -0x7e,0x60,0x40,0x80,0xc1,0xe3, -0x7e,0x00,0x00,0x01,0x83,0xc7, -0x7e,0x1e,0x07,0x03,0x57,0xaf, -0x7f,0x3f,0x1f,0x0f,0xaf,0x5f, -0x7f,0x7f,0x3f,0x1f,0x5f,0xbf, -0xfe,0xfe,0xfc,0xf8,0xf8,0xfe, -0xfe,0xfe,0xf8,0xf0,0xf0,0xfd, -0x7e,0x7e,0xf0,0xe0,0xe0,0xfb, -0x7e,0x7e,0x40,0x80,0xc1,0xf7, -0x7e,0x7e,0x00,0x01,0x83,0xef, -0x7e,0x7e,0x07,0x03,0x07,0x8f, -0x7f,0x7f,0x1f,0x0f,0x0f,0x1f, -0x7f,0x7f,0x3f,0x1f,0x1f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xfc,0xff,0xff,0xff,0xff, -0xf4,0xf8,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0xf8,0xfa,0xfc,0xff,0xff,0xff, -0xf0,0xd4,0xf8,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xff,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0x78,0x78,0xf0,0xf0,0xff,0xff, -0x70,0x70,0x74,0xe8,0xff,0xff, -0x7e,0x40,0x28,0x51,0xff,0xff, -0x00,0x00,0x51,0x23,0xff,0xff, -0x7f,0x3f,0xaf,0x57,0xff,0xff, -0x7f,0x7f,0x7f,0xbf,0xff,0xff, -0xfc,0xfc,0xfc,0xfa,0xf9,0xff, -0xf8,0xf8,0xf8,0xf0,0xf0,0xff, -0x78,0x78,0xf0,0xe0,0xe0,0xff, -0x78,0x70,0x60,0xc0,0xc1,0xff, -0x7e,0x7e,0x00,0x29,0x93,0xff, -0x7e,0x7e,0x01,0x53,0x27,0xff, -0x7f,0x7f,0x0f,0x07,0x0f,0xff, -0x7f,0x7f,0x3f,0x1f,0x1f,0xff, -0xfc,0xfc,0xfc,0xf8,0xf8,0xfc, -0xfc,0xf8,0xf8,0xf0,0xf0,0xf8, -0x7c,0x78,0xf0,0xe0,0xea,0xf5, -0x7c,0x70,0x60,0xc0,0xc1,0xe3, -0x7e,0x40,0x00,0x01,0x83,0xc7, -0x7e,0x00,0x01,0x03,0x57,0xaf, -0x7f,0x3f,0x0f,0x07,0xaf,0x5f, -0x7f,0x7f,0x3f,0x1f,0x5f,0xbf, -0xfe,0xfc,0xfc,0xf8,0xf8,0xfe, -0xfe,0xfc,0xf8,0xf0,0xf0,0xfd, -0x7e,0x7c,0xf0,0xe0,0xe0,0xfb, -0x7e,0x7c,0x60,0xc0,0xc1,0xf7, -0x7e,0x7e,0x00,0x01,0x83,0xef, -0x7e,0x7e,0x01,0x03,0x07,0x8f, -0x7f,0x7f,0x0f,0x07,0x0f,0x1f, -0x7f,0x7f,0x3f,0x1f,0x1f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xf8,0xff,0xff,0xff,0xff, -0xe8,0xf0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0xf0,0xfa,0xf4,0xff,0xff,0xff, -0xf0,0xf4,0xf8,0xff,0xff,0xff, -0xe0,0xa8,0xf0,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0x70,0x70,0xf0,0xf0,0xff,0xff, -0x70,0x70,0x74,0xe8,0xff,0xff, -0x60,0x60,0x68,0x51,0xff,0xff, -0x7e,0x00,0x51,0x23,0xff,0xff, -0x01,0x01,0xa3,0x47,0xff,0xff, -0x7f,0x7f,0x5f,0xaf,0xff,0xff, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf8,0xf8,0xf8,0xf0,0xf0,0xff, -0x70,0x70,0xf0,0xe0,0xe0,0xff, -0x70,0x70,0x60,0xc0,0xc1,0xff, -0x70,0x60,0x40,0x29,0x93,0xff, -0x7e,0x7e,0x01,0x53,0x27,0xff, -0x7f,0x7f,0x03,0x07,0x0f,0xff, -0x7f,0x7f,0x1f,0x0f,0x1f,0xff, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf8,0xf8,0xf8,0xf0,0xf0,0xf8, -0x78,0x70,0xf0,0xe0,0xea,0xf5, -0x78,0x70,0x60,0xc0,0xc1,0xe3, -0x78,0x60,0x40,0x01,0x83,0xc7, -0x7e,0x00,0x01,0x03,0x57,0xaf, -0x7f,0x01,0x03,0x07,0xaf,0x5f, -0x7f,0x7f,0x1f,0x0f,0x5f,0xbf, -0xfc,0xf8,0xf8,0xf8,0xf8,0xfe, -0xfc,0xf8,0xf8,0xf0,0xf0,0xfd, -0x7c,0x78,0xf0,0xe0,0xe0,0xfb, -0x7c,0x78,0x60,0xc0,0xc1,0xf7, -0x7c,0x78,0x40,0x01,0x83,0xef, -0x7e,0x7e,0x01,0x03,0x07,0x8f, -0x7f,0x7f,0x03,0x07,0x0f,0x1f, -0x7f,0x7f,0x1f,0x0f,0x1f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xe8,0xff,0xff,0xff,0xff, -0xe8,0xf0,0xff,0xff,0xff,0xff, -0x50,0xe0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf0,0xf5,0xf2,0xff,0xff,0xff, -0xf0,0xfa,0xf4,0xff,0xff,0xff, -0xe0,0xf4,0xe8,0xff,0xff,0xff, -0xe0,0xe8,0xf0,0xff,0xff,0xff, -0x40,0x50,0x61,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0x70,0xf0,0xf0,0xf0,0xff,0xff, -0x60,0xe0,0x74,0xe8,0xff,0xff, -0x60,0xe0,0x68,0x51,0xff,0xff, -0x40,0xc0,0x51,0x23,0xff,0xff, -0x7f,0x01,0xa3,0x47,0xff,0xff, -0x03,0x03,0x47,0x8f,0xff,0xff, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf0,0xf0,0xf0,0xf0,0xf0,0xff, -0x70,0xf0,0xf0,0xe0,0xe0,0xff, -0x60,0xe0,0x60,0xc0,0xc1,0xff, -0x60,0xe0,0x40,0x29,0x93,0xff, -0x60,0xc0,0x01,0x53,0x27,0xff, -0x7f,0xff,0x03,0x07,0x0f,0xff, -0x7f,0xff,0x07,0x0f,0x1f,0xff, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0x70,0xf0,0xf0,0xe0,0xea,0xf5, -0x70,0xe0,0x60,0xc0,0xc1,0xe3, -0x70,0xe0,0x40,0x01,0x83,0xc7, -0x70,0xc0,0x01,0x03,0x57,0xaf, -0x7f,0x01,0x03,0x07,0xaf,0x5f, -0x7f,0x03,0x07,0x0f,0x5f,0xbf, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfe, -0xf8,0xf0,0xf0,0xf0,0xf0,0xfd, -0x78,0xf0,0xf0,0xe0,0xe0,0xfb, -0x78,0xf0,0x60,0xc0,0xc1,0xf7, -0x78,0xf0,0x40,0x01,0x83,0xef, -0x78,0xf0,0x01,0x03,0x07,0x8f, -0x7f,0xff,0x03,0x07,0x0f,0x1f, -0x7f,0xff,0x07,0x0f,0x1f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0b,0x07,0xff,0xff,0xff,0xff, -0x17,0x0f,0xff,0xff,0xff,0xff, -0x2f,0x17,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x0a,0x87,0xff,0xff,0xff, -0x07,0x17,0x0f,0xff,0xff,0xff, -0x07,0x2f,0x17,0xff,0xff,0xff, -0x0f,0x5f,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x4f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x8a,0xc6,0xff,0xff, -0x07,0x07,0x17,0x8f,0xff,0xff, -0x07,0x07,0x2f,0x17,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0xfe,0xc0,0xe0,0xf0,0xf8,0xff, -0xfe,0xfe,0xc0,0xe0,0xf0,0xff, -0x06,0x02,0x83,0xca,0xe4,0xff, -0x06,0x06,0x07,0x96,0xcb,0xff, -0x06,0x06,0x07,0x2f,0x97,0xff, -0x0f,0x0f,0x0f,0x0f,0x0f,0xff, -0x0f,0x0f,0x0f,0xaf,0x4f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0xfe,0xfe,0xff,0xf8,0xfe,0xfd, -0xfe,0xfe,0xff,0xe0,0xfd,0xfa, -0x0e,0x06,0x83,0xc0,0xea,0xf5, -0x0e,0x06,0x07,0x82,0xd7,0xeb, -0x0e,0x06,0x07,0x07,0x87,0xc7, -0x0f,0x0f,0x0f,0x0f,0x5f,0xaf, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0xfe,0xfe,0xe0,0xf8,0xfc,0xfc, -0xfe,0xfe,0xc0,0xe0,0xf8,0xf8, -0x1e,0x0e,0x83,0xc0,0xe0,0xf1, -0x1e,0x0e,0x07,0x82,0xc3,0xf7, -0x1e,0x0e,0x07,0x07,0x87,0xef, -0x1f,0x0f,0x0f,0x0f,0x0f,0xdf, -0x1f,0x0f,0x0f,0x0f,0x0f,0xbf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x17,0x0f,0xff,0xff,0xff,0xff, -0x2f,0x1f,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x17,0x0f,0xff,0xff,0xff, -0x0f,0x2f,0x1f,0xff,0xff,0xff, -0x0f,0x5f,0x2f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x15,0x8f,0xff,0xff, -0x0f,0x0f,0x2f,0x1f,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0xfe,0xfe,0xfe,0xf8,0xfc,0xff, -0xfe,0x80,0xc0,0xe0,0xf0,0xff, -0x7e,0x7e,0x80,0xca,0xe4,0xff, -0x0e,0x06,0x06,0x96,0xcb,0xff, -0x0e,0x0e,0x0e,0x2f,0x97,0xff, -0x0f,0x0f,0x0f,0x0f,0x0f,0xff, -0x1f,0x1f,0x1f,0xbf,0x5f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0xfe,0xfe,0xfe,0xf8,0xfe,0xfd, -0xfe,0xfe,0xfe,0xf0,0xfd,0xfa, -0x7e,0x7e,0xfe,0xc0,0xfa,0xf5, -0x1e,0x0e,0x06,0x82,0xd7,0xeb, -0x1e,0x0e,0x0e,0x07,0x87,0xc7, -0x1f,0x0f,0x0f,0x0f,0x5f,0xaf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0xfe,0xfe,0xfe,0xf8,0xfc,0xfc, -0xfe,0xfe,0xc0,0xf0,0xf8,0xf8, -0x7e,0x7e,0x80,0xc0,0xf0,0xf1, -0x3e,0x1e,0x06,0x82,0xc3,0xf7, -0x3e,0x1e,0x0e,0x07,0x87,0xef, -0x3f,0x1f,0x0f,0x0f,0x0f,0xdf, -0x3f,0x1f,0x1f,0x1f,0x1f,0xbf, -0x3f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x2f,0x1f,0xff,0xff,0xff,0xff, -0x5f,0x3f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfe,0xfe,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x2f,0x1f,0xff,0xff,0xff, -0x1f,0x5f,0x3f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfe,0xfe,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x2b,0x1f,0xff,0xff, -0x1f,0x1f,0x0f,0x1f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0x3f,0x3f,0x3f,0x3f,0xff,0xff, -0xfe,0xfe,0xfe,0xfc,0xfc,0xff, -0xfe,0xfe,0xfc,0xf0,0xf8,0xff, -0x7e,0x00,0x80,0xca,0xe4,0xff, -0x7e,0x7e,0x02,0x94,0xcb,0xff, -0x1e,0x0e,0x0e,0x2f,0x97,0xff, -0x1f,0x1f,0x1f,0x0f,0x0f,0xff, -0x1f,0x1f,0x1f,0xbf,0x5f,0xff, -0x3f,0x3f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfc,0xfe,0xfd, -0xfe,0xfe,0xfe,0xf0,0xfd,0xfa, -0x7e,0x7e,0xfe,0xe0,0xfa,0xf5, -0x7e,0x7e,0x7e,0x80,0xf7,0xeb, -0x3e,0x1e,0x0e,0x07,0x87,0xc7, -0x3f,0x1f,0x1f,0x0f,0x5f,0xaf, -0x3f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfe,0xfe,0xfe,0xfc,0xfc,0xfc, -0xfe,0xfe,0xfc,0xf0,0xf8,0xf8, -0x7e,0x7e,0x80,0xe0,0xf0,0xf1, -0x7e,0x7e,0x02,0x80,0xe3,0xf7, -0x7e,0x3e,0x0e,0x07,0x87,0xef, -0x7f,0x3f,0x1f,0x0f,0x0f,0xdf, -0x7f,0x3f,0x1f,0x1f,0x1f,0xbf, -0x7f,0x3f,0x3f,0x3f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0xfd,0xfe,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x5f,0x3f,0xff,0xff,0xff,0xff, -0xbf,0x7f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfe,0xfe,0xff,0xff,0xff,0xff, -0xfc,0xfd,0xfe,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x5f,0x3f,0xff,0xff,0xff, -0x3f,0xbf,0x7f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfe,0xfe,0xff,0xff,0xff, -0xfc,0xfc,0xfd,0xfe,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x57,0x3f,0xff,0xff, -0x3f,0x3f,0x1f,0x3f,0xff,0xff, -0x3f,0x3f,0x3f,0x3f,0xff,0xff, -0xfe,0xfe,0xfe,0xfc,0xfc,0xff, -0xfe,0xfc,0xfc,0xf8,0xf8,0xff, -0xfe,0xfe,0xf8,0xea,0xf4,0xff, -0x7e,0x00,0x00,0x94,0xc9,0xff, -0x7e,0x7e,0x06,0x2b,0x97,0xff, -0x3f,0x1f,0x1f,0x0f,0x0f,0xff, -0x3f,0x3f,0x3f,0xbf,0x5f,0xff, -0x3f,0x3f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfc,0xfe,0xfd, -0xfe,0xfe,0xfc,0xf8,0xfd,0xfa, -0xfe,0xfe,0xfe,0xe0,0xfa,0xf5, -0x7e,0x7e,0x7e,0xc0,0xf7,0xeb, -0x7e,0x7e,0x7e,0x03,0xc7,0xc7, -0x7f,0x3f,0x1f,0x0f,0x5f,0xaf, -0x7f,0x3f,0x3f,0x1f,0xbf,0x5f, -0x7f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfe,0xfe,0xfe,0xfc,0xfc,0xfc, -0xfe,0xfe,0xfc,0xf8,0xf8,0xf8, -0xfe,0xfe,0xf8,0xe0,0xf0,0xf1, -0x7e,0x7e,0x00,0xc0,0xe3,0xf7, -0x7e,0x7e,0x06,0x03,0xc7,0xef, -0x7f,0x7f,0x1f,0x0f,0x0f,0xdf, -0x7f,0x7f,0x3f,0x1f,0x1f,0xbf, -0x7f,0x7f,0x3f,0x3f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfe,0xff,0xff,0xff,0xff, -0xfa,0xfc,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xbf,0x7f,0xff,0xff,0xff,0xff, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xfc,0xfd,0xfe,0xff,0xff,0xff, -0xf8,0xfa,0xfc,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0xbf,0x7f,0xff,0xff,0xff, -0x7f,0x7f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xff,0xff, -0xfc,0xfc,0xf8,0xfc,0xff,0xff, -0xf8,0xf8,0xea,0xfc,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0xbf,0x7f,0xff,0xff, -0x7f,0x7f,0x7f,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfe,0xfd,0xff, -0xfc,0xfc,0xfc,0xfd,0xfa,0xff, -0xfc,0xf8,0xf8,0xf0,0xf0,0xff, -0x7e,0x7e,0x60,0xd4,0xe9,0xff, -0x7e,0x00,0x00,0x29,0x93,0xff, -0x7f,0x7f,0x1f,0x57,0x2f,0xff, -0x7f,0x3f,0x3f,0x1f,0x1f,0xff, -0x7f,0x7f,0x7f,0x3f,0x3f,0xff, -0xfe,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfe,0xfc,0xfc,0xf8,0xfd,0xfa, -0xfe,0xfc,0xf8,0xf0,0xfa,0xf5, -0x7e,0x7e,0x7e,0xc0,0xe3,0xe3, -0x7e,0x7e,0x7e,0x03,0xef,0xd7, -0x7f,0x7f,0x7f,0x07,0x5f,0xaf, -0x7f,0x7f,0x3f,0x1f,0xbf,0x5f, -0x7f,0x7f,0x7f,0x3f,0x7f,0xbf, -0xfe,0xfe,0xfc,0xfc,0xfc,0xfe, -0xfe,0xfe,0xfc,0xf8,0xf8,0xfd, -0xfe,0xfe,0xf8,0xf0,0xf0,0xfb, -0x7e,0x7e,0x60,0xc0,0xe3,0xf7, -0x7e,0x7e,0x00,0x03,0xc7,0xef, -0x7f,0x7f,0x1f,0x07,0x0f,0x8f, -0x7f,0x7f,0x3f,0x1f,0x1f,0x1f, -0x7f,0x7f,0x7f,0x3f,0x3f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xfc,0xff,0xff,0xff,0xff, -0xf4,0xf8,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0xf8,0xfa,0xfc,0xff,0xff,0xff, -0xf0,0xf4,0xf8,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xff,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf8,0xf8,0xf0,0xf8,0xff,0xff, -0xf0,0xf0,0xd4,0xf8,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfe,0xfd,0xff, -0xf8,0xf8,0xf8,0xfd,0xfa,0xff, -0xf8,0xf8,0xf8,0xf0,0xf0,0xff, -0x78,0x70,0x70,0xf4,0xe9,0xff, -0x7e,0x7e,0x40,0x29,0xd3,0xff, -0x7e,0x00,0x01,0x53,0x27,0xff, -0x7f,0x7f,0x3f,0x0f,0x1f,0xff, -0x7f,0x7f,0x7f,0x3f,0x3f,0xff, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfc,0xf8,0xf8,0xf8,0xf8,0xf8, -0xfc,0xf8,0xf8,0xf0,0xfa,0xf5, -0x7c,0x78,0x70,0xe0,0xe1,0xe3, -0x7e,0x7e,0x7e,0x01,0xef,0xd7, -0x7e,0x7e,0x7f,0x07,0x5f,0xaf, -0x7f,0x7f,0x7f,0x0f,0xbf,0x5f, -0x7f,0x7f,0x7f,0x3f,0x7f,0xbf, -0xfe,0xfc,0xfc,0xfc,0xfc,0xfe, -0xfe,0xfc,0xf8,0xf8,0xf8,0xfd, -0xfe,0xfc,0xf8,0xf0,0xf0,0xfb, -0x7e,0x7c,0x70,0xe0,0xe1,0xf7, -0x7e,0x7e,0x40,0x01,0xc7,0xef, -0x7e,0x7e,0x01,0x07,0x0f,0x8f, -0x7f,0x7f,0x3f,0x0f,0x1f,0x1f, -0x7f,0x7f,0x7f,0x3f,0x3f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xf8,0xff,0xff,0xff,0xff, -0xe8,0xf0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0xf0,0xfa,0xf4,0xff,0xff,0xff, -0xf0,0xf4,0xf8,0xff,0xff,0xff, -0xe0,0xe8,0xf0,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xf0,0xf0,0xf4,0xf8,0xff,0xff, -0xe0,0xe0,0xa8,0xf1,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf8,0xf8,0xf8,0xfd,0xfa,0xff, -0xf0,0xf0,0xf0,0xf0,0xf0,0xff, -0x70,0x70,0x70,0xf4,0xe9,0xff, -0x70,0x60,0x60,0x69,0xd3,0xff, -0x7e,0x7e,0x01,0x53,0x27,0xff, -0x7f,0x01,0x03,0x07,0x0f,0xff, -0x7f,0x7f,0x7f,0x1f,0x3f,0xff, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf0,0xf0,0xf0,0xfa,0xf5, -0x78,0x70,0x70,0xe0,0xe1,0xe3, -0x78,0x70,0x60,0x41,0xeb,0xd7, -0x7e,0x7e,0x7f,0x03,0x5f,0xaf, -0x7f,0x7f,0x7f,0x0f,0xbf,0x5f, -0x7f,0x7f,0x7f,0x1f,0x7f,0xbf, -0xfc,0xf8,0xf8,0xf8,0xf8,0xfe, -0xfc,0xf8,0xf8,0xf8,0xf8,0xfd, -0xfc,0xf8,0xf0,0xf0,0xf0,0xfb, -0x7c,0x78,0x70,0xe0,0xe1,0xf7, -0x7c,0x78,0x60,0x41,0xc3,0xef, -0x7e,0x7e,0x01,0x03,0x0f,0x8f, -0x7f,0x7f,0x03,0x0f,0x1f,0x1f, -0x7f,0x7f,0x7f,0x1f,0x3f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xe8,0xff,0xff,0xff,0xff, -0xe8,0xf0,0xff,0xff,0xff,0xff, -0xd0,0xe0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf0,0xf5,0xf2,0xff,0xff,0xff, -0xf0,0xfa,0xf4,0xff,0xff,0xff, -0xe0,0xf4,0xe8,0xff,0xff,0xff, -0xe0,0xe8,0xf0,0xff,0xff,0xff, -0x40,0x50,0xe1,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xe0,0xe0,0xf4,0xe8,0xff,0xff, -0xe0,0xe0,0xe8,0xf1,0xff,0xff, -0x40,0x40,0x51,0x63,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf0,0xf0,0xf0,0xf5,0xf2,0xff, -0xf0,0xf0,0xf0,0xf0,0xf0,0xff, -0x60,0x60,0xe0,0xf4,0xe9,0xff, -0x60,0x60,0xe0,0x69,0xd3,0xff, -0x60,0x40,0xc1,0x53,0x27,0xff, -0x7f,0x7f,0x03,0x07,0x0f,0xff, -0x7f,0x03,0x07,0x0f,0x1f,0xff, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0xf0,0xf0,0xfa,0xf5, -0x70,0x60,0xe0,0xe0,0xe1,0xe3, -0x70,0x60,0xe0,0x41,0xeb,0xd7, -0x70,0x60,0xc1,0x03,0x57,0xaf, -0x7f,0x7f,0xff,0x07,0xbf,0x5f, -0x7f,0x7f,0xff,0x1f,0x7f,0xbf, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfe, -0xf8,0xf0,0xf0,0xf0,0xf0,0xfd, -0xf8,0xf0,0xf0,0xf0,0xf0,0xfb, -0x78,0x70,0xe0,0xe0,0xe1,0xf7, -0x78,0x70,0xe0,0x41,0xc3,0xef, -0x78,0x70,0xc1,0x03,0x07,0x8f, -0x7f,0x7f,0x03,0x07,0x1f,0x1f, -0x7f,0x7f,0x07,0x1f,0x3f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0xfd,0x83,0xff,0xff,0xff,0xff, -0x0b,0x07,0xff,0xff,0xff,0xff, -0x17,0x0f,0xff,0xff,0xff,0xff, -0x2f,0x17,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x0a,0x87,0xff,0xff,0xff, -0x07,0x17,0x0f,0xff,0xff,0xff, -0x07,0x2f,0x17,0xff,0xff,0xff, -0x0f,0x5f,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x4f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x8a,0xc7,0xff,0xff, -0x07,0x07,0x17,0x8f,0xff,0xff, -0x07,0x07,0x2f,0x07,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x06,0x02,0x82,0xca,0xe6,0xff, -0x07,0x07,0x07,0x97,0xcf,0xff, -0x07,0x07,0x07,0x2f,0x97,0xff, -0x0f,0x0f,0x0f,0x0f,0x0f,0xff, -0x0f,0x0f,0x0f,0xaf,0x4f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0xfe,0xfe,0xe0,0xfc,0xfe,0xfd, -0xfe,0xfe,0xfe,0xe0,0xfd,0xfa, -0x0e,0x06,0x82,0xc3,0xea,0xf5, -0x0e,0x06,0x06,0x87,0xd7,0xeb, -0x0f,0x07,0x07,0x07,0x87,0xc7, -0x0f,0x0f,0x0f,0x0f,0x5f,0xaf, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0xfe,0xfe,0xfe,0xff,0xfe,0xfc, -0xfe,0xfe,0xfe,0xff,0xfc,0xfa, -0x1e,0x0e,0x86,0xc7,0xe2,0xf5, -0x1e,0x0e,0x06,0x87,0xc7,0xf7, -0x1f,0x0f,0x07,0x07,0x87,0xef, -0x1f,0x0f,0x0f,0x0f,0x0f,0xdf, -0x1f,0x0f,0x0f,0x0f,0x0f,0xbf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0xfd,0xff,0xff,0xff,0xff,0xff, -0xfb,0x07,0xff,0xff,0xff,0xff, -0x17,0x0f,0xff,0xff,0xff,0xff, -0x2f,0x1f,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x17,0x0f,0xff,0xff,0xff, -0x0f,0x2f,0x1f,0xff,0xff,0xff, -0x0f,0x5f,0x2f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x17,0x87,0xff,0xff, -0x0f,0x0f,0x07,0x0f,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x5f,0xff,0xff, -0x1f,0x1f,0x5f,0x9f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x07,0x07,0x95,0xcf,0xff, -0x0f,0x0f,0x0f,0x2f,0x9f,0xff, -0x0f,0x0f,0x0f,0x0f,0x0f,0xff, -0x1f,0x1f,0x1f,0xbf,0x5f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfd, -0xfe,0xfe,0xc0,0xf8,0xfd,0xfa, -0x7e,0x7e,0xfe,0xc0,0xfa,0xf5, -0x1e,0x0e,0x06,0x86,0xd7,0xeb, -0x1f,0x0f,0x0f,0x0f,0x87,0xc7, -0x1f,0x0f,0x0f,0x0f,0x5f,0xaf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfc, -0xfe,0xfe,0xfe,0xfe,0xfc,0xfa, -0x7e,0x7e,0xfe,0xfe,0xfa,0xf5, -0x3e,0x1e,0x0e,0x8e,0xc7,0xff, -0x3f,0x1f,0x0f,0x0f,0x8f,0xef, -0x3f,0x1f,0x0f,0x0f,0x0f,0xdf, -0x3f,0x1f,0x1f,0x1f,0x1f,0xbf, -0x3f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0xfd,0xfe,0xff,0xff,0xff,0xff, -0xfb,0xff,0xff,0xff,0xff,0xff, -0xf7,0x0f,0xff,0xff,0xff,0xff, -0x2f,0x1f,0xff,0xff,0xff,0xff, -0x5f,0x3f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfe,0xfe,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x2f,0x1f,0xff,0xff,0xff, -0x1f,0x5f,0x3f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfe,0xfe,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x07,0x1f,0xff,0xff, -0x1f,0x1f,0x5f,0x3f,0xff,0xff, -0x1f,0x1f,0xbf,0x5f,0xff,0xff, -0x3f,0x3f,0x7f,0xbf,0xff,0xff, -0xfe,0xfe,0xfe,0xfe,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x0f,0x0f,0x2b,0x9f,0xff, -0x1f,0x1f,0x1f,0x0f,0x1f,0xff, -0x1f,0x1f,0x1f,0xbf,0x5f,0xff, -0x3f,0x3f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfd, -0xfe,0xfe,0xfe,0xfc,0xfd,0xfa, -0x7e,0x7e,0x80,0xf0,0xfa,0xf5, -0x7e,0x7e,0x7e,0x82,0xf7,0xeb, -0x3f,0x1f,0x0f,0x0f,0x87,0xc7, -0x3f,0x1f,0x1f,0x1f,0x5f,0xaf, -0x3f,0x1f,0x1f,0x1f,0xbf,0x5f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfc, -0xfe,0xfe,0xfe,0xfe,0xfc,0xfa, -0x7e,0x7e,0xfe,0xfe,0xfa,0xf5, -0x7e,0x7e,0x7e,0xfe,0xf7,0xff, -0x7f,0x3f,0x1f,0x1f,0x8f,0xff, -0x7f,0x3f,0x1f,0x1f,0x1f,0xdf, -0x7f,0x3f,0x1f,0x1f,0x1f,0xbf, -0x7f,0x3f,0x3f,0x3f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0xfd,0xfe,0xff,0xff,0xff,0xff, -0xfb,0xfc,0xff,0xff,0xff,0xff, -0xf7,0xff,0xff,0xff,0xff,0xff, -0xef,0x1f,0xff,0xff,0xff,0xff, -0x5f,0x3f,0xff,0xff,0xff,0xff, -0xbf,0x7f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfe,0xfe,0xff,0xff,0xff,0xff, -0xfc,0xfd,0xfe,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x5f,0x3f,0xff,0xff,0xff, -0x3f,0xbf,0x7f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfe,0xfe,0xff,0xff,0xff, -0xfc,0xfc,0xfd,0xfe,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x5f,0x3f,0xff,0xff, -0x3f,0x3f,0xbf,0x7f,0xff,0xff, -0x3f,0x3f,0x7f,0xbf,0xff,0xff, -0xfe,0xfe,0xfe,0xfe,0xff,0xff, -0xfe,0xfc,0xfc,0xfd,0xfe,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x1f,0x1f,0x07,0x1f,0xff, -0x3f,0x3f,0x3f,0xbf,0x7f,0xff, -0x3f,0x3f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfd, -0xfe,0xfe,0xfc,0xfc,0xfd,0xfa, -0xfe,0xfe,0xfe,0xf8,0xfa,0xf5, -0x7e,0x7e,0x00,0xe2,0xf7,0xeb, -0x7f,0x7f,0x7f,0x07,0xc7,0xc7, -0x7f,0x3f,0x1f,0x1f,0x5f,0xaf, -0x7f,0x3f,0x3f,0x3f,0xbf,0x5f, -0x7f,0x3f,0x3f,0x3f,0x7f,0xbf, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfe, -0xfe,0xfe,0xfe,0xfe,0xfc,0xfa, -0xfe,0xfe,0xfe,0xfe,0xfa,0xf5, -0x7e,0x7e,0x7e,0xfe,0xf7,0xff, -0x7f,0x7f,0x7f,0x7f,0xef,0xff, -0x7f,0x7f,0x3f,0x3f,0x1f,0xff, -0x7f,0x7f,0x3f,0x3f,0x3f,0xbf, -0x7f,0x7f,0x3f,0x3f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfe,0xff,0xff,0xff,0xff, -0xfa,0xfc,0xff,0xff,0xff,0xff, -0xf7,0xf8,0xff,0xff,0xff,0xff, -0xef,0xff,0xff,0xff,0xff,0xff, -0xdf,0x3f,0xff,0xff,0xff,0xff, -0xbf,0x7f,0xff,0xff,0xff,0xff, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xfc,0xfd,0xfe,0xff,0xff,0xff, -0xf8,0xfa,0xfc,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0xbf,0x7f,0xff,0xff,0xff, -0x7f,0x7f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfe,0xfd,0xff,0xff, -0xfc,0xfc,0xfd,0xfe,0xff,0xff, -0xf8,0xf8,0xfa,0xfc,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0xbf,0x7f,0xff,0xff, -0x7f,0x7f,0x7f,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfe,0xfd,0xff, -0xfc,0xfc,0xfc,0xfd,0xfe,0xff, -0xfc,0xf8,0xf8,0xe0,0xf8,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x3f,0x3f,0xbf,0x7f,0xff, -0x7f,0x7f,0x7f,0x7f,0xff,0xff, -0xfe,0xfc,0xfc,0xfc,0xfe,0xfd, -0xfe,0xfc,0xfc,0xfc,0xfd,0xfa, -0xfe,0xfc,0xf8,0xf8,0xfa,0xf5, -0xfe,0xfe,0xfe,0xe0,0xe3,0xe3, -0x7e,0x7e,0x00,0x47,0xef,0xd7, -0x7f,0x7f,0x7f,0x1f,0x5f,0xaf, -0x7f,0x7f,0x3f,0x3f,0xbf,0x5f, -0x7f,0x7f,0x7f,0x7f,0x7f,0xbf, -0xfe,0xfe,0xfc,0xfc,0xfc,0xfe, -0xfe,0xfe,0xfc,0xfc,0xfc,0xfd, -0xfe,0xfe,0xfc,0xfc,0xf8,0xff, -0xfe,0xfe,0xfe,0xfe,0xf7,0xff, -0x7e,0x7e,0x7e,0x7f,0xef,0xff, -0x7f,0x7f,0x7f,0x7f,0x5f,0xaf, -0x7f,0x7f,0x7f,0x7f,0x3f,0x5f, -0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xfc,0xff,0xff,0xff,0xff, -0xf4,0xf8,0xff,0xff,0xff,0xff, -0xef,0xf0,0xff,0xff,0xff,0xff, -0xdf,0xff,0xff,0xff,0xff,0xff, -0xbf,0x7f,0xff,0xff,0xff,0xff, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0xf8,0xfa,0xfc,0xff,0xff,0xff, -0xf0,0xf4,0xf8,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfe,0xfd,0xff,0xff, -0xf8,0xf8,0xfd,0xfa,0xff,0xff, -0xf8,0xf8,0xfa,0xfc,0xff,0xff, -0xf0,0xf0,0xe0,0xf8,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfe,0xfd,0xff, -0xf8,0xf8,0xf8,0xfd,0xfa,0xff, -0xf8,0xf8,0xf8,0xf0,0xf8,0xff, -0xf8,0xf0,0xf0,0xd4,0xf9,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfc,0xf8,0xf8,0xf8,0xfd,0xfa, -0xfc,0xf8,0xf8,0xf8,0xfa,0xf5, -0xfc,0xf8,0xf0,0xf0,0xe1,0xe3, -0x7e,0x7e,0x7e,0x41,0xef,0xd7, -0x7e,0x7e,0x01,0x0f,0x5f,0xaf, -0x7f,0x7f,0x7f,0x3f,0xbf,0x5f, -0x7f,0x7f,0x7f,0x7f,0x7f,0xbf, -0xfe,0xfc,0xfc,0xfc,0xfc,0xfe, -0xfe,0xfc,0xf8,0xf8,0xf8,0xfd, -0xfe,0xfc,0xf8,0xf8,0xf8,0xfb, -0xfe,0xfc,0xf8,0xf8,0xf1,0xff, -0x7e,0x7e,0x7e,0x7f,0xef,0xff, -0x7e,0x7e,0x7f,0x7f,0x5f,0xaf, -0x7f,0x7f,0x7f,0x7f,0x3f,0x5f, -0x7f,0x7f,0x7f,0x7f,0x7f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xf8,0xff,0xff,0xff,0xff, -0xe8,0xf0,0xff,0xff,0xff,0xff, -0xdf,0xe0,0xff,0xff,0xff,0xff, -0xbf,0xff,0xff,0xff,0xff,0xff, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0xf0,0xfa,0xf4,0xff,0xff,0xff, -0xf0,0xf4,0xf8,0xff,0xff,0xff, -0xe0,0xe8,0xf0,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xfa,0xf9,0xff,0xff, -0xf8,0xf8,0xf8,0xfa,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xf0,0xf0,0xe0,0xf0,0xff,0xff, -0xe0,0xe0,0xe8,0xe1,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf8,0xf8,0xf8,0xfd,0xfa,0xff, -0xf0,0xf0,0xf0,0xf0,0xf0,0xff, -0xf0,0xf0,0xf0,0xf4,0xf9,0xff, -0xf0,0xe0,0xe0,0xa9,0xf3,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf0,0xf0,0xf0,0xfa,0xf5, -0xf8,0xf0,0xf0,0xf0,0xe1,0xe3, -0x78,0x70,0x60,0x61,0xeb,0xd7, -0x7e,0x7e,0x7f,0x03,0x5f,0xaf, -0x7f,0x7f,0x03,0x1f,0xbf,0x5f, -0x7f,0x7f,0x7f,0x7f,0x7f,0xbf, -0xfc,0xf8,0xf8,0xf8,0xf8,0xfe, -0xfc,0xf8,0xf8,0xf8,0xf8,0xfd, -0xfc,0xf8,0xf0,0xf0,0xf0,0xfb, -0xfc,0xf8,0xf0,0xf0,0xf1,0xf7, -0x7c,0x78,0x70,0x71,0xe3,0xff, -0x7e,0x7e,0x7f,0x7f,0x5f,0xaf, -0x7f,0x7f,0x7f,0x7f,0x3f,0x5f, -0x7f,0x7f,0x7f,0x7f,0x7f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xe8,0xff,0xff,0xff,0xff, -0xe8,0xf0,0xff,0xff,0xff,0xff, -0xd0,0xe0,0xff,0xff,0xff,0xff, -0xbf,0xc1,0xff,0xff,0xff,0xff, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf0,0xf5,0xf2,0xff,0xff,0xff, -0xf0,0xfa,0xf4,0xff,0xff,0xff, -0xe0,0xf4,0xe8,0xff,0xff,0xff, -0xe0,0xe8,0xf0,0xff,0xff,0xff, -0x40,0x50,0xe1,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xe0,0xe0,0xf4,0xe0,0xff,0xff, -0xe0,0xe0,0xe8,0xf1,0xff,0xff, -0x40,0x40,0x51,0xe3,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf0,0xf0,0xf0,0xf5,0xf2,0xff, -0xf0,0xf0,0xf0,0xf0,0xf0,0xff, -0xe0,0xe0,0xe0,0xf4,0xe9,0xff, -0xe0,0xe0,0xe0,0xe9,0xf3,0xff, -0x60,0x40,0x41,0x53,0x67,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0xf0,0xf0,0xfa,0xf5, -0xf0,0xe0,0xe0,0xe0,0xe1,0xe3, -0x70,0x60,0x60,0xe1,0xeb,0xd7, -0x70,0x60,0x41,0xc3,0x57,0xaf, -0x7f,0x7f,0x7f,0x07,0xbf,0x5f, -0x7f,0x7f,0x07,0x3f,0x7f,0xbf, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfe, -0xf8,0xf0,0xf0,0xf0,0xf0,0xfd, -0xf8,0xf0,0xf0,0xf0,0xf0,0xfb, -0xf8,0xf0,0xe0,0xe0,0xe1,0xf7, -0x78,0x70,0x60,0xe1,0xe3,0xef, -0x78,0x70,0x61,0xe3,0x47,0xaf, -0x7f,0x7f,0x7f,0xff,0x3f,0x5f, -0x7f,0x7f,0x7f,0xff,0x7f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0x82,0xff,0xff,0xff,0xff, -0x0b,0x05,0xff,0xff,0xff,0xff, -0x17,0x0b,0xff,0xff,0xff,0xff, -0x2f,0x17,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xc0,0xc2,0xff,0xff,0xff,0xff, -0x80,0x85,0xc3,0xff,0xff,0xff, -0x00,0x0a,0x87,0xff,0xff,0xff, -0x03,0x17,0x0f,0xff,0xff,0xff, -0x07,0x2f,0x17,0xff,0xff,0xff, -0x0f,0x5f,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x4f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x8a,0xc7,0xff,0xff, -0x07,0x07,0x17,0x8f,0xff,0xff, -0x07,0x07,0x2f,0x17,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x82,0xc0,0xe7,0xff, -0x07,0x07,0x07,0x97,0xc7,0xff, -0x07,0x07,0x07,0x07,0x87,0xff, -0x0f,0x0f,0x0f,0x0f,0x2f,0xff, -0x0f,0x0f,0x0f,0xaf,0x4f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0e,0x06,0x82,0xc2,0xea,0xf7, -0x0f,0x07,0x07,0x87,0xd7,0xef, -0x0f,0x07,0x07,0x07,0xaf,0xd7, -0x0f,0x0f,0x0f,0x0f,0x5f,0xaf, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0xfe,0xfe,0xfe,0xfe,0xfc,0xfc, -0xfe,0xfe,0xfe,0xfe,0xff,0xf8, -0x1e,0x0e,0x86,0xc6,0xe3,0xf5, -0x1f,0x0f,0x07,0x87,0xc7,0xf7, -0x1f,0x0f,0x07,0x07,0x87,0xef, -0x1f,0x0f,0x0f,0x0f,0x0f,0xdf, -0x1f,0x0f,0x0f,0x0f,0x0f,0xbf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfb,0x05,0xff,0xff,0xff,0xff, -0x17,0x0b,0xff,0xff,0xff,0xff, -0x2f,0x17,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xff,0xff,0xff,0xff, -0x80,0x85,0xff,0xff,0xff,0xff, -0x01,0x0b,0x87,0xff,0xff,0xff, -0x03,0x17,0x0f,0xff,0xff,0xff, -0x07,0x2f,0x1f,0xff,0xff,0xff, -0x0f,0x5f,0x2f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x17,0x8f,0xff,0xff, -0x0f,0x0f,0x07,0x0f,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0x1f,0x1f,0x5f,0x9f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x83,0xc7,0xff, -0x0f,0x0f,0x0f,0x07,0x9f,0xff, -0x0f,0x0f,0x0f,0x5f,0x2f,0xff, -0x1f,0x1f,0x1f,0xbf,0x5f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x0f,0x07,0x87,0xd5,0xef, -0x1f,0x0f,0x0f,0x0f,0xaf,0xdf, -0x1f,0x0f,0x0f,0x0f,0x5f,0xaf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfc, -0xfe,0xfe,0xfe,0xfe,0xf8,0xfa, -0x7e,0x7e,0xfe,0xfe,0xff,0xf1, -0x3f,0x1f,0x0f,0x8f,0xc7,0xff, -0x3f,0x1f,0x0f,0x0f,0x8f,0xef, -0x3f,0x1f,0x0f,0x0f,0x0f,0xdf, -0x3f,0x1f,0x1f,0x1f,0x1f,0xbf, -0x3f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfb,0xf5,0xff,0xff,0xff,0xff, -0xf7,0x0b,0xff,0xff,0xff,0xff, -0x2f,0x17,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xff,0xff,0xff,0xff, -0xf8,0xfd,0xfe,0xff,0xff,0xff, -0x00,0x0a,0xff,0xff,0xff,0xff, -0x03,0x17,0x0f,0xff,0xff,0xff, -0x07,0x2f,0x1f,0xff,0xff,0xff, -0x0f,0x5f,0x3f,0xff,0xff,0xff, -0x1f,0xbf,0x5f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfe,0xfe,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x07,0x0f,0xff,0xff, -0x1f,0x1f,0x5f,0x3f,0xff,0xff, -0x1f,0x1f,0xbf,0x5f,0xff,0xff, -0x3f,0x3f,0x7f,0xbf,0xff,0xff, -0xfe,0xfe,0xfe,0xfe,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x2f,0x9f,0xff, -0x1f,0x1f,0x1f,0x5f,0x3f,0xff, -0x1f,0x1f,0x1f,0xbf,0x5f,0xff, -0x3f,0x3f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfe,0xfc,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x1f,0x0f,0x0f,0xab,0xdf, -0x3f,0x1f,0x1f,0x1f,0x5f,0xbf, -0x3f,0x1f,0x1f,0x1f,0xbf,0x5f, -0x3f,0x3f,0x3f,0x3f,0x7f,0xbf, -0xfe,0xfe,0xfe,0xfe,0xfc,0xfe, -0xfe,0xfe,0xfe,0xfe,0xfe,0xf8, -0x7e,0x7e,0xfe,0xfe,0xf1,0xff, -0x7f,0x7f,0x7f,0xff,0xff,0xf7, -0x7f,0x3f,0x1f,0x1f,0x8f,0xff, -0x7f,0x3f,0x1f,0x1f,0x1f,0xdf, -0x7f,0x3f,0x1f,0x1f,0x1f,0xbf, -0x7f,0x3f,0x3f,0x3f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfb,0xf4,0xff,0xff,0xff,0xff, -0xf7,0xeb,0xff,0xff,0xff,0xff, -0xef,0x17,0xff,0xff,0xff,0xff, -0x5f,0x2f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xff,0xff,0xff,0xff, -0xf8,0xfd,0xfe,0xff,0xff,0xff, -0xf0,0xfa,0xfc,0xff,0xff,0xff, -0x00,0x14,0xff,0xff,0xff,0xff, -0x07,0x2f,0x1f,0xff,0xff,0xff, -0x0f,0x5f,0x3f,0xff,0xff,0xff, -0x1f,0xbf,0x7f,0xff,0xff,0xff, -0x3f,0x7f,0xbf,0xff,0xff,0xff, -0xfe,0xfe,0xfe,0xff,0xff,0xff, -0xfc,0xfc,0xfd,0xfe,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x5f,0x3f,0xff,0xff, -0x3f,0x3f,0xbf,0x7f,0xff,0xff, -0x3f,0x3f,0x7f,0xbf,0xff,0xff, -0xfe,0xfe,0xfe,0xfe,0xff,0xff, -0xfc,0xfc,0xfc,0xfd,0xfe,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x5f,0x3f,0xff, -0x3f,0x3f,0x3f,0xbf,0x7f,0xff, -0x3f,0x3f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfe, -0xfe,0xfe,0xfc,0xfc,0xf8,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x3f,0x1f,0x1f,0x57,0xbf, -0x7f,0x3f,0x3f,0x3f,0xbf,0x7f, -0x7f,0x3f,0x3f,0x3f,0x7f,0xbf, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfe, -0xfe,0xfe,0xfe,0xfe,0xfc,0xff, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfb, -0x7e,0x7e,0x7e,0xfe,0xe3,0xff, -0x7f,0x7f,0x7f,0x7f,0xff,0xef, -0x7f,0x7f,0x3f,0x3f,0x1f,0xff, -0x7f,0x7f,0x3f,0x3f,0x3f,0xbf, -0x7f,0x7f,0x3f,0x3f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf7,0xe8,0xff,0xff,0xff,0xff, -0xef,0xd7,0xff,0xff,0xff,0xff, -0xdf,0x2f,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xf8,0xfd,0xfe,0xff,0xff,0xff, -0xf0,0xfa,0xfc,0xff,0xff,0xff, -0xe0,0xf4,0xf8,0xff,0xff,0xff, -0x00,0x28,0xff,0xff,0xff,0xff, -0x0f,0x5f,0x3f,0xff,0xff,0xff, -0x1f,0xbf,0x7f,0xff,0xff,0xff, -0x3f,0x7f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfe,0xfd,0xff,0xff, -0xfc,0xfc,0xfd,0xfe,0xff,0xff, -0xf8,0xf8,0xfa,0xfc,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0xbf,0x7f,0xff,0xff, -0x7f,0x7f,0x7f,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfe,0xfd,0xff, -0xfc,0xfc,0xfc,0xfd,0xfe,0xff, -0xf8,0xf8,0xf8,0xfa,0xfc,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0xbf,0x7f,0xff, -0x7f,0x7f,0x7f,0x7f,0xff,0xff, -0xfe,0xfc,0xfc,0xfc,0xfe,0xfd, -0xfe,0xfc,0xfc,0xfc,0xfd,0xfe, -0xfe,0xfc,0xf8,0xf8,0xea,0xfd, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x3f,0x3f,0x1f,0x7f, -0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, -0xfe,0xfe,0xfc,0xfc,0xfc,0xfe, -0xfe,0xfe,0xfc,0xfc,0xfc,0xfd, -0xfe,0xfe,0xfc,0xfc,0xf8,0xff, -0xfe,0xfe,0xfe,0xfe,0xff,0xf7, -0x7e,0x7e,0x7e,0x7f,0xc7,0xff, -0x7f,0x7f,0x7f,0x7f,0x7f,0xdf, -0x7f,0x7f,0x7f,0x7f,0x3f,0xff, -0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfe,0xfd,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xe8,0xff,0xff,0xff,0xff, -0xef,0xd0,0xff,0xff,0xff,0xff, -0xdf,0xaf,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xfd,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0xf0,0xfa,0xfc,0xff,0xff,0xff, -0xe0,0xf4,0xf8,0xff,0xff,0xff, -0xc0,0xe8,0xf0,0xff,0xff,0xff, -0x00,0x50,0xff,0xff,0xff,0xff, -0x1f,0xbf,0x7f,0xff,0xff,0xff, -0x3f,0x7f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfe,0xfd,0xff,0xff, -0xf8,0xf8,0xfd,0xfa,0xff,0xff, -0xf8,0xf8,0xfa,0xfc,0xff,0xff, -0xf0,0xf0,0xe0,0xf0,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfe,0xfd,0xff, -0xf8,0xf8,0xf8,0xfd,0xfa,0xff, -0xf8,0xf8,0xf8,0xfa,0xfc,0xff, -0xf0,0xf0,0xf0,0xf4,0xf9,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xfe,0xfd, -0xfc,0xf8,0xf8,0xf8,0xfd,0xfa, -0xfc,0xf8,0xf8,0xf8,0xfa,0xfd, -0xfc,0xf8,0xf0,0xf0,0xd5,0xfb, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x3f,0x7f, -0xfe,0xfc,0xfc,0xfc,0xfc,0xfe, -0xfe,0xfc,0xf8,0xf8,0xf8,0xfd, -0xfe,0xfc,0xf8,0xf8,0xf8,0xfb, -0xfe,0xfc,0xf8,0xf8,0xf1,0xff, -0xfe,0xfe,0xfe,0xff,0xff,0xef, -0x7e,0x7e,0x7f,0x7f,0x8f,0xff, -0x7f,0x7f,0x7f,0x7f,0x7f,0x1f, -0x7f,0x7f,0x7f,0x7f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xfd,0xfa,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xe8,0xff,0xff,0xff,0xff, -0xe8,0xd0,0xff,0xff,0xff,0xff, -0xdf,0xa0,0xff,0xff,0xff,0xff, -0xbf,0x5f,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf8,0xfd,0xfa,0xff,0xff,0xff, -0xf0,0xfa,0xf4,0xff,0xff,0xff, -0xe0,0xf4,0xf8,0xff,0xff,0xff, -0xc0,0xe8,0xf0,0xff,0xff,0xff, -0x80,0xd0,0xe1,0xff,0xff,0xff, -0x01,0xa1,0xff,0xff,0xff,0xff, -0x3f,0x7f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xfa,0xf9,0xff,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xf0,0xf0,0xe0,0xf0,0xff,0xff, -0xe0,0xe0,0xe8,0xf1,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf8,0xf8,0xf8,0xfd,0xfa,0xff, -0xf0,0xf0,0xf0,0xfa,0xf4,0xff, -0xf0,0xf0,0xf0,0xe0,0xf9,0xff, -0xe0,0xe0,0xe0,0xc1,0xe3,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf0,0xf0,0xf0,0xfa,0xf5, -0xf8,0xf0,0xf0,0xf0,0xf5,0xfb, -0xf8,0xf0,0xe0,0xe1,0xab,0xf7, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfc,0xf8,0xf8,0xf8,0xf8,0xfe, -0xfc,0xf8,0xf8,0xf8,0xf8,0xfd, -0xfc,0xf8,0xf0,0xf0,0xf0,0xfb, -0xfc,0xf8,0xf0,0xf0,0xf1,0xf7, -0xfc,0xf8,0xf0,0xf1,0xe3,0xff, -0x7e,0x7e,0x7f,0x7f,0xff,0x8f, -0x7f,0x7f,0x7f,0x7f,0x1f,0x5f, -0x7f,0x7f,0x7f,0x7f,0x7f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xfa,0xf4,0xff,0xff,0xff,0xff, -0xf4,0xe8,0xff,0xff,0xff,0xff, -0xe8,0xd0,0xff,0xff,0xff,0xff, -0xd0,0xa0,0xff,0xff,0xff,0xff, -0xbf,0x41,0xff,0xff,0xff,0xff, -0x7f,0xbf,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf0,0xf5,0xf2,0xff,0xff,0xff, -0xf0,0xfa,0xf4,0xff,0xff,0xff, -0xe0,0xf4,0xe8,0xff,0xff,0xff, -0xc0,0xe8,0xf0,0xff,0xff,0xff, -0x00,0x50,0xe1,0xff,0xff,0xff, -0x01,0xa1,0xc3,0xff,0xff,0xff, -0x03,0x43,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xe0,0xe0,0xf4,0xe8,0xff,0xff, -0xe0,0xe0,0xe8,0xf1,0xff,0xff, -0x40,0x40,0x51,0xe3,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf0,0xf0,0xf0,0xf5,0xf2,0xff, -0xf0,0xf0,0xf0,0xf0,0xf4,0xff, -0xe0,0xe0,0xe0,0xe0,0xe1,0xff, -0xe0,0xe0,0xe0,0xe9,0xe3,0xff, -0x40,0x40,0x41,0x03,0xe7,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0xf0,0xf0,0xfa,0xf5, -0xf0,0xe0,0xe0,0xe0,0xf5,0xeb, -0xf0,0xe0,0xe0,0xe1,0xeb,0xf7, -0x70,0x60,0x41,0x43,0x57,0xef, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfe, -0xf8,0xf0,0xf0,0xf0,0xf0,0xfd, -0xf8,0xf0,0xf0,0xf0,0xf0,0xfb, -0xf8,0xf0,0xe0,0xe0,0xe1,0xf7, -0xf8,0xf0,0xe0,0xe1,0xe3,0xef, -0x78,0x70,0x61,0x63,0xc7,0xaf, -0x7f,0x7f,0x7f,0x7f,0xff,0x1f, -0x7f,0x7f,0x7f,0x7f,0x3f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xc2,0xc1,0xff,0xff,0xff,0xff, -0x85,0x82,0xff,0xff,0xff,0xff, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x15,0x09,0xff,0xff,0xff,0xff, -0x2b,0x13,0xff,0xff,0xff,0xff, -0x57,0x27,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xc0,0xc2,0xfd,0xff,0xff,0xff, -0x80,0x85,0xc2,0xff,0xff,0xff, -0x00,0x0a,0x85,0xff,0xff,0xff, -0x01,0x15,0x0b,0xff,0xff,0xff, -0x03,0x2b,0x17,0xff,0xff,0xff, -0x07,0x57,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x4f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0xc0,0xc0,0xe2,0xff,0xff,0xff, -0x80,0x80,0xc5,0xe3,0xff,0xff, -0x00,0x00,0x8a,0xc7,0xff,0xff, -0x01,0x03,0x17,0x8f,0xff,0xff, -0x03,0x07,0x07,0x07,0xff,0xff, -0x07,0x0f,0x0f,0x0f,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x82,0xca,0xe7,0xff, -0x07,0x07,0x07,0x83,0xc7,0xff, -0x07,0x07,0x07,0x07,0x87,0xff, -0x0f,0x0f,0x0f,0x5f,0x2f,0xff, -0x0f,0x0f,0x0f,0xaf,0x4f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x82,0xc2,0xea,0xf7, -0x07,0x07,0x07,0x87,0xc3,0xef, -0x07,0x07,0x07,0x07,0xaf,0xd7, -0x0f,0x0f,0x0f,0x0f,0x5f,0x8f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1e,0x0e,0x86,0xc6,0xe2,0xf5, -0x1f,0x0f,0x07,0x87,0xc7,0xf7, -0x1f,0x0f,0x07,0x07,0x87,0xef, -0x1f,0x0f,0x0f,0x0f,0x0f,0xdf, -0x1f,0x0f,0x0f,0x0f,0x0f,0xbf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0x85,0x82,0xff,0xff,0xff,0xff, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x15,0x09,0xff,0xff,0xff,0xff, -0x2b,0x13,0xff,0xff,0xff,0xff, -0x57,0x27,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xfd,0xff,0xff,0xff, -0x80,0x85,0xfa,0xff,0xff,0xff, -0x00,0x0a,0x85,0xff,0xff,0xff, -0x01,0x15,0x0b,0xff,0xff,0xff, -0x03,0x2b,0x17,0xff,0xff,0xff, -0x07,0x57,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0x9f,0xff,0xff,0xff, -0xf8,0xfc,0xfe,0xff,0xff,0xff, -0x80,0x80,0xc5,0xff,0xff,0xff, -0x00,0x00,0x8b,0xc7,0xff,0xff, -0x01,0x03,0x03,0x87,0xff,0xff, -0x03,0x07,0x07,0x0f,0xff,0xff, -0x07,0x0f,0x0f,0x0f,0xff,0xff, -0x0f,0x1f,0xbf,0x5f,0xff,0xff, -0x1f,0x1f,0x5f,0x9f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x83,0xc7,0xff, -0x0f,0x0f,0x0f,0x2f,0x9f,0xff, -0x0f,0x0f,0x0f,0x5f,0x2f,0xff, -0x1f,0x1f,0x1f,0xbf,0x5f,0xff, -0x1f,0x1f,0x1f,0x5f,0x9f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x87,0xd7,0xef, -0x0f,0x0f,0x0f,0x0f,0xaf,0xdf, -0x0f,0x0f,0x0f,0x0f,0x5f,0x8f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x3f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x1f,0x0f,0x8f,0xc7,0xff, -0x3f,0x1f,0x0f,0x0f,0x8f,0xef, -0x3f,0x1f,0x0f,0x0f,0x0f,0xdf, -0x3f,0x1f,0x1f,0x1f,0x1f,0xbf, -0x3f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x15,0x09,0xff,0xff,0xff,0xff, -0x2b,0x13,0xff,0xff,0xff,0xff, -0x57,0x27,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xfd,0xff,0xff,0xff, -0xf0,0xf5,0xfa,0xff,0xff,0xff, -0x00,0x0a,0xf5,0xff,0xff,0xff, -0x01,0x15,0x0b,0xff,0xff,0xff, -0x03,0x2b,0x17,0xff,0xff,0xff, -0x07,0x57,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0xbf,0xff,0xff,0xff, -0xf8,0xfc,0xfe,0xff,0xff,0xff, -0xf0,0xf8,0xfd,0xfe,0xff,0xff, -0x00,0x00,0x8a,0xff,0xff,0xff, -0x01,0x03,0x17,0x8f,0xff,0xff, -0x03,0x07,0x2f,0x1f,0xff,0xff, -0x07,0x0f,0x5f,0x3f,0xff,0xff, -0x0f,0x1f,0xbf,0x5f,0xff,0xff, -0x1f,0x3f,0x7f,0xbf,0xff,0xff, -0xfe,0xfe,0xfe,0xfe,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x2f,0x9f,0xff, -0x1f,0x1f,0x1f,0x5f,0x3f,0xff, -0x1f,0x1f,0x1f,0xbf,0x5f,0xff, -0x3f,0x3f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfe,0xfe,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x0f,0xaf,0xcf, -0x1f,0x1f,0x1f,0x1f,0x0f,0x9f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x3f,0x3f,0x3f,0x3f,0x7f,0xbf, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x3f,0x1f,0x1f,0x8f,0xff, -0x7f,0x3f,0x1f,0x1f,0x1f,0xdf, -0x7f,0x3f,0x1f,0x1f,0x1f,0xbf, -0x7f,0x3f,0x3f,0x3f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xea,0xe4,0xff,0xff,0xff,0xff, -0x14,0x08,0xff,0xff,0xff,0xff, -0x2b,0x13,0xff,0xff,0xff,0xff, -0x57,0x27,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xfd,0xff,0xff,0xff, -0xf0,0xf5,0xfa,0xff,0xff,0xff, -0xe0,0xea,0xf4,0xff,0xff,0xff, -0x00,0x14,0xeb,0xff,0xff,0xff, -0x03,0x2b,0x17,0xff,0xff,0xff, -0x07,0x57,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0xbf,0xff,0xff,0xff, -0xf8,0xfc,0xfe,0xff,0xff,0xff, -0xf0,0xf8,0xfd,0xfe,0xff,0xff, -0xe0,0xf0,0xfa,0xfc,0xff,0xff, -0x00,0x00,0x14,0xff,0xff,0xff, -0x03,0x07,0x2f,0x1f,0xff,0xff, -0x07,0x0f,0x5f,0x3f,0xff,0xff, -0x0f,0x1f,0xbf,0x7f,0xff,0xff, -0x1f,0x3f,0x7f,0xbf,0xff,0xff, -0xfe,0xfe,0xfe,0xfe,0xff,0xff, -0xfc,0xfc,0xfc,0xfd,0xfe,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x5f,0x3f,0xff, -0x3f,0x3f,0x3f,0xbf,0x7f,0xff, -0x3f,0x3f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfe,0xfe,0xff, -0xfc,0xfc,0xfc,0xfc,0xf8,0xfc, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x1f,0x0f,0x9f, -0x3f,0x3f,0x3f,0x3f,0x1f,0x7f, -0x3f,0x3f,0x3f,0x3f,0x7f,0xbf, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfe, -0xfe,0xfe,0xfe,0xfe,0xfc,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x3f,0x3f,0x1f,0xff, -0x7f,0x7f,0x3f,0x3f,0x3f,0xbf, -0x7f,0x7f,0x3f,0x3f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xea,0xe4,0xff,0xff,0xff,0xff, -0xd4,0xc8,0xff,0xff,0xff,0xff, -0x28,0x10,0xff,0xff,0xff,0xff, -0x57,0x27,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xfd,0xff,0xff,0xff, -0xf0,0xf5,0xfa,0xff,0xff,0xff, -0xe0,0xea,0xf4,0xff,0xff,0xff, -0xc0,0xd4,0xe8,0xff,0xff,0xff, -0x00,0x28,0xd7,0xff,0xff,0xff, -0x07,0x57,0x2f,0xff,0xff,0xff, -0x0f,0xaf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0xbf,0xff,0xff,0xff, -0xf8,0xfc,0xfe,0xfd,0xff,0xff, -0xf0,0xf8,0xfd,0xfe,0xff,0xff, -0xe0,0xf0,0xfa,0xfc,0xff,0xff, -0xc0,0xe0,0xf4,0xf8,0xff,0xff, -0x00,0x00,0x28,0xff,0xff,0xff, -0x07,0x0f,0x5f,0x3f,0xff,0xff, -0x0f,0x1f,0xbf,0x7f,0xff,0xff, -0x1f,0x3f,0x7f,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfe,0xfd,0xff, -0xfc,0xfc,0xfc,0xfd,0xfe,0xff, -0xf8,0xf8,0xf8,0xfa,0xfc,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0xbf,0x7f,0xff, -0x7f,0x7f,0x7f,0x7f,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xfe,0xfd, -0xfc,0xfc,0xfc,0xfc,0xf8,0xfe, -0xf8,0xf8,0xf8,0xf8,0xf0,0xf9, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x3f,0x1f,0x3f, -0x7f,0x7f,0x7f,0x7f,0x7f,0xff, -0xfe,0xfe,0xfc,0xfc,0xfc,0xfe, -0xfe,0xfe,0xfc,0xfc,0xfc,0xfd, -0xfe,0xfe,0xfc,0xfc,0xf8,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x3f,0xff, -0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xea,0xe4,0xff,0xff,0xff,0xff, -0xd4,0xc8,0xff,0xff,0xff,0xff, -0xa8,0x90,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0xaf,0x4f,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xfd,0xff,0xff,0xff, -0xf0,0xf5,0xfa,0xff,0xff,0xff, -0xe0,0xea,0xf4,0xff,0xff,0xff, -0xc0,0xd4,0xe8,0xff,0xff,0xff, -0x80,0xa8,0xd0,0xff,0xff,0xff, -0x00,0x50,0xaf,0xff,0xff,0xff, -0x0f,0xaf,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0xbf,0xff,0xff,0xff, -0xf8,0xfc,0xfe,0xfd,0xff,0xff, -0xf0,0xf8,0xfd,0xfa,0xff,0xff, -0xe0,0xf0,0xfa,0xfc,0xff,0xff, -0xc0,0xe0,0xf4,0xf8,0xff,0xff, -0x80,0xc0,0xe8,0xf1,0xff,0xff, -0x00,0x00,0x51,0xff,0xff,0xff, -0x0f,0x1f,0xbf,0x7f,0xff,0xff, -0x1f,0x3f,0x7f,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfe,0xfd,0xff, -0xf8,0xf8,0xf8,0xfd,0xfa,0xff, -0xf8,0xf8,0xf8,0xfa,0xfc,0xff, -0xf0,0xf0,0xf0,0xf4,0xf9,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xfe,0xfd, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xf0,0xf9, -0xf0,0xf0,0xf0,0xf0,0xf5,0xf3, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x7f,0xff, -0xfe,0xfc,0xfc,0xfc,0xfc,0xfe, -0xfe,0xfc,0xf8,0xf8,0xf8,0xfd, -0xfe,0xfc,0xf8,0xf8,0xf8,0xfb, -0xfe,0xfc,0xf8,0xf8,0xf1,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xea,0xe4,0xff,0xff,0xff,0xff, -0xd4,0xc8,0xff,0xff,0xff,0xff, -0xa8,0x90,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0xa1,0x41,0xff,0xff,0xff,0xff, -0x5f,0x9f,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf0,0xf5,0xfa,0xff,0xff,0xff, -0xe0,0xea,0xf4,0xff,0xff,0xff, -0xc0,0xd4,0xe8,0xff,0xff,0xff, -0x80,0xa8,0xd0,0xff,0xff,0xff, -0x00,0x50,0xa1,0xff,0xff,0xff, -0x01,0xa1,0x5f,0xff,0xff,0xff, -0x1f,0x5f,0xbf,0xff,0xff,0xff, -0xf8,0xf8,0xfa,0xf9,0xff,0xff, -0xf0,0xf8,0xfd,0xfa,0xff,0xff, -0xe0,0xf0,0xf0,0xf0,0xff,0xff, -0xc0,0xe0,0xe0,0xf0,0xff,0xff, -0x80,0xc0,0xc0,0xe1,0xff,0xff, -0x00,0x00,0xd1,0xe3,0xff,0xff, -0x01,0x01,0xa3,0xff,0xff,0xff, -0x1f,0x3f,0x7f,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf8,0xf8,0xf8,0xfd,0xfa,0xff, -0xf0,0xf0,0xf0,0xfa,0xf4,0xff, -0xf0,0xf0,0xf0,0xf4,0xf9,0xff, -0xe0,0xe0,0xe0,0xc1,0xe3,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf0,0xf0,0xf0,0xf0,0xfa,0xf1, -0xf0,0xf0,0xf0,0xf0,0xf5,0xfb, -0xe0,0xe0,0xe0,0xe1,0xeb,0xf7, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfc,0xf8,0xf8,0xf8,0xf8,0xfe, -0xfc,0xf8,0xf8,0xf8,0xf8,0xfd, -0xfc,0xf8,0xf0,0xf0,0xf0,0xfb, -0xfc,0xf8,0xf0,0xf0,0xf1,0xf7, -0xfc,0xf8,0xf0,0xf1,0xe3,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfa,0xf9,0xff,0xff,0xff,0xff, -0xf5,0xf2,0xff,0xff,0xff,0xff, -0xea,0xe4,0xff,0xff,0xff,0xff, -0xd4,0xc8,0xff,0xff,0xff,0xff, -0xa8,0x90,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0xa1,0x41,0xff,0xff,0xff,0xff, -0x43,0x83,0xff,0xff,0xff,0xff, -0xf8,0xfa,0xf9,0xff,0xff,0xff, -0xf0,0xf5,0xf2,0xff,0xff,0xff, -0xe0,0xea,0xf4,0xff,0xff,0xff, -0xc0,0xd4,0xe8,0xff,0xff,0xff, -0x80,0xa8,0xd0,0xff,0xff,0xff, -0x00,0x50,0xa1,0xff,0xff,0xff, -0x01,0xa1,0x43,0xff,0xff,0xff, -0x03,0x43,0xbf,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xe0,0xf0,0xf0,0xf0,0xff,0xff, -0xc0,0xe0,0xe0,0xe0,0xff,0xff, -0x80,0xc0,0xe8,0xf1,0xff,0xff, -0x00,0x00,0x51,0xe3,0xff,0xff, -0x01,0x01,0xa3,0xc7,0xff,0xff, -0x03,0x03,0x47,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xfa,0xf9,0xff, -0xf0,0xf0,0xf0,0xf5,0xf2,0xff, -0xf0,0xf0,0xf0,0xfa,0xf4,0xff, -0xe0,0xe0,0xe0,0xe0,0xe1,0xff, -0xe0,0xe0,0xe0,0xc1,0xe3,0xff, -0x40,0x40,0x41,0x53,0xe7,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfc, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0xf0,0xf0,0xfa,0xf1, -0xe0,0xe0,0xe0,0xe0,0xf5,0xeb, -0xe0,0xe0,0xe0,0xe1,0xc3,0xf7, -0x40,0x40,0x41,0x43,0x57,0xef, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfe, -0xf8,0xf0,0xf0,0xf0,0xf0,0xfd, -0xf8,0xf0,0xf0,0xf0,0xf0,0xfb, -0xf8,0xf0,0xe0,0xe0,0xe1,0xf7, -0xf8,0xf0,0xe0,0xe1,0xe3,0xef, -0x78,0x70,0x61,0x63,0x47,0xaf, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xc2,0xc1,0xff,0xff,0xff,0xff, -0x85,0x82,0xff,0xff,0xff,0xff, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x14,0x08,0xff,0xff,0xff,0xff, -0x29,0x11,0xff,0xff,0xff,0xff, -0x53,0x23,0xff,0xff,0xff,0xff, -0xa7,0x47,0xff,0xff,0xff,0xff, -0x4f,0x8f,0xff,0xff,0xff,0xff, -0xc0,0xc2,0xe1,0xff,0xff,0xff, -0x80,0x85,0xc2,0xff,0xff,0xff, -0x00,0x0a,0x84,0xff,0xff,0xff, -0x00,0x14,0x09,0xff,0xff,0xff, -0x01,0x29,0x13,0xff,0xff,0xff, -0x03,0x53,0x27,0xff,0xff,0xff, -0x07,0xa7,0x4f,0xff,0xff,0xff, -0x0f,0x0f,0x1f,0xff,0xff,0xff, -0xc0,0xc0,0xe2,0xfd,0xff,0xff, -0x80,0x80,0xc5,0xe2,0xff,0xff, -0x00,0x00,0x8a,0xc5,0xff,0xff, -0x00,0x00,0x15,0x8b,0xff,0xff, -0x01,0x01,0x2b,0x17,0xff,0xff, -0x03,0x03,0x57,0x2f,0xff,0xff, -0x07,0x07,0x0f,0x0f,0xff,0xff, -0x0f,0x0f,0x1f,0x1f,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xfe,0xff, -0x80,0x80,0xc0,0xe5,0xf2,0xff, -0x00,0x00,0x80,0xc0,0xe3,0xff, -0x00,0x00,0x03,0x83,0xc7,0xff, -0x01,0x03,0x07,0x07,0x87,0xff, -0x03,0x07,0x0f,0x0f,0x0f,0xff, -0x07,0x0f,0x0f,0x0f,0x0f,0xff, -0x0f,0x1f,0x1f,0x1f,0x1f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x82,0xc2,0xe0,0xf2, -0x07,0x07,0x07,0x87,0xc3,0xe7, -0x07,0x07,0x07,0x07,0x87,0xc7, -0x0f,0x0f,0x0f,0x0f,0x0f,0x8f, -0x0f,0x0f,0x0f,0x0f,0xaf,0x5f, -0x1f,0x1f,0x1f,0x1f,0x5f,0xbf, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x82,0xc2,0xe2,0xfa, -0x07,0x07,0x07,0x87,0xc7,0xf7, -0x07,0x07,0x07,0x07,0x87,0xef, -0x0f,0x0f,0x0f,0x0f,0x0f,0xdf, -0x0f,0x0f,0x0f,0x0f,0x0f,0xbf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf2,0xf1,0xff,0xff,0xff,0xff, -0x85,0x82,0xff,0xff,0xff,0xff, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x14,0x08,0xff,0xff,0xff,0xff, -0x29,0x11,0xff,0xff,0xff,0xff, -0x53,0x23,0xff,0xff,0xff,0xff, -0xa7,0x47,0xff,0xff,0xff,0xff, -0x4f,0x8f,0xff,0xff,0xff,0xff, -0xf0,0xf2,0xf9,0xff,0xff,0xff, -0x80,0x85,0xc2,0xff,0xff,0xff, -0x00,0x0a,0x84,0xff,0xff,0xff, -0x00,0x14,0x09,0xff,0xff,0xff, -0x01,0x29,0x13,0xff,0xff,0xff, -0x03,0x53,0x27,0xff,0xff,0xff, -0x07,0xa7,0x4f,0xff,0xff,0xff, -0x0f,0x0f,0x1f,0xff,0xff,0xff, -0xf0,0xf0,0xfa,0xfd,0xff,0xff, -0x80,0x80,0xc5,0xfa,0xff,0xff, -0x00,0x00,0x8a,0xc5,0xff,0xff, -0x00,0x00,0x15,0x8b,0xff,0xff, -0x01,0x01,0x2b,0x17,0xff,0xff, -0x03,0x03,0x57,0x2f,0xff,0xff, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0x0f,0x0f,0x1f,0x1f,0xff,0xff, -0xf0,0xf8,0xfc,0xfc,0xfe,0xff, -0x80,0x80,0xc0,0xe5,0xff,0xff, -0x00,0x00,0x80,0xc1,0xe3,0xff, -0x00,0x00,0x03,0x83,0xc7,0xff, -0x01,0x03,0x07,0x07,0x8f,0xff, -0x03,0x07,0x0f,0x0f,0x0f,0xff, -0x07,0x0f,0x1f,0x1f,0x1f,0xff, -0x0f,0x1f,0x1f,0x1f,0x1f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x87,0xc3,0xe7, -0x0f,0x0f,0x0f,0x0f,0x87,0xcf, -0x0f,0x0f,0x0f,0x0f,0x5f,0xaf, -0x1f,0x1f,0x1f,0x1f,0xbf,0x5f, -0x1f,0x1f,0x1f,0x1f,0x5f,0xbf, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x87,0xc7,0xf7, -0x0f,0x0f,0x0f,0x0f,0x8f,0xef, -0x0f,0x0f,0x0f,0x0f,0x0f,0xdf, -0x1f,0x1f,0x1f,0x1f,0x1f,0xbf, -0x1f,0x1f,0x1f,0x1f,0x1f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf2,0xf1,0xff,0xff,0xff,0xff, -0xe5,0xe2,0xff,0xff,0xff,0xff, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x14,0x08,0xff,0xff,0xff,0xff, -0x29,0x11,0xff,0xff,0xff,0xff, -0x53,0x23,0xff,0xff,0xff,0xff, -0xa7,0x47,0xff,0xff,0xff,0xff, -0x4f,0x8f,0xff,0xff,0xff,0xff, -0xf0,0xf2,0xf9,0xff,0xff,0xff, -0xe0,0xe5,0xf2,0xff,0xff,0xff, -0x00,0x0a,0x84,0xff,0xff,0xff, -0x00,0x14,0x09,0xff,0xff,0xff, -0x01,0x29,0x13,0xff,0xff,0xff, -0x03,0x53,0x27,0xff,0xff,0xff, -0x07,0xa7,0x4f,0xff,0xff,0xff, -0x0f,0x0f,0x1f,0xff,0xff,0xff, -0xf0,0xf0,0xfa,0xfd,0xff,0xff, -0xe0,0xe0,0xf5,0xfa,0xff,0xff, -0x00,0x00,0x8a,0xf5,0xff,0xff, -0x00,0x00,0x15,0x8b,0xff,0xff, -0x01,0x01,0x2b,0x17,0xff,0xff, -0x03,0x03,0x57,0x2f,0xff,0xff, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0x0f,0x0f,0x1f,0x3f,0xff,0xff, -0xf0,0xf8,0xfc,0xfc,0xfe,0xff, -0xe0,0xf0,0xf8,0xfd,0xfe,0xff, -0x00,0x00,0x80,0xc0,0xfb,0xff, -0x00,0x00,0x03,0x97,0xcf,0xff, -0x01,0x03,0x07,0x07,0x8f,0xff, -0x03,0x07,0x0f,0x5f,0x3f,0xff, -0x07,0x0f,0x1f,0xbf,0x5f,0xff, -0x0f,0x1f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfe,0xfe,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x0f,0xaf,0xdf, -0x1f,0x1f,0x1f,0x1f,0x5f,0xbf, -0x1f,0x1f,0x1f,0x1f,0xbf,0x5f, -0x3f,0x3f,0x3f,0x3f,0x7f,0xbf, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x0f,0x8f,0xef, -0x1f,0x1f,0x1f,0x1f,0x1f,0xdf, -0x1f,0x1f,0x1f,0x1f,0x1f,0xbf, -0x3f,0x3f,0x3f,0x3f,0x3f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf2,0xf1,0xff,0xff,0xff,0xff, -0xe5,0xe2,0xff,0xff,0xff,0xff, -0xca,0xc4,0xff,0xff,0xff,0xff, -0x14,0x08,0xff,0xff,0xff,0xff, -0x29,0x11,0xff,0xff,0xff,0xff, -0x53,0x23,0xff,0xff,0xff,0xff, -0xa7,0x47,0xff,0xff,0xff,0xff, -0x4f,0x8f,0xff,0xff,0xff,0xff, -0xf0,0xf2,0xf9,0xff,0xff,0xff, -0xe0,0xe5,0xf2,0xff,0xff,0xff, -0xc0,0xca,0xe4,0xff,0xff,0xff, -0x00,0x14,0x08,0xff,0xff,0xff, -0x01,0x29,0x13,0xff,0xff,0xff, -0x03,0x53,0x27,0xff,0xff,0xff, -0x07,0xa7,0x4f,0xff,0xff,0xff, -0x0f,0x0f,0x1f,0xff,0xff,0xff, -0xf0,0xf0,0xfa,0xfd,0xff,0xff, -0xe0,0xe0,0xf5,0xfa,0xff,0xff, -0xc0,0xc0,0xea,0xf4,0xff,0xff, -0x00,0x00,0x14,0xeb,0xff,0xff, -0x01,0x01,0x2b,0x17,0xff,0xff, -0x03,0x03,0x57,0x2f,0xff,0xff, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0x0f,0x0f,0x1f,0x3f,0xff,0xff, -0xf0,0xf8,0xfc,0xfc,0xfe,0xff, -0xe0,0xf0,0xf8,0xfd,0xfe,0xff, -0xc0,0xe0,0xf0,0xf0,0xf8,0xff, -0x00,0x00,0x00,0x94,0xff,0xff, -0x01,0x03,0x07,0x2f,0x9f,0xff, -0x03,0x07,0x0f,0x5f,0x3f,0xff, -0x07,0x0f,0x1f,0xbf,0x7f,0xff, -0x0f,0x1f,0x3f,0x7f,0xbf,0xff, -0xfe,0xfe,0xfe,0xfe,0xfe,0xff, -0xfc,0xfc,0xfc,0xfc,0xfd,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x1f,0x5f,0xbf, -0x3f,0x3f,0x3f,0x3f,0xbf,0x7f, -0x3f,0x3f,0x3f,0x3f,0x7f,0xbf, -0xfe,0xfe,0xfe,0xfe,0xfc,0xfc, -0xfc,0xfc,0xfc,0xfc,0xfc,0xf8, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x1f,0x1f,0x8f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x1f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf2,0xf1,0xff,0xff,0xff,0xff, -0xe5,0xe2,0xff,0xff,0xff,0xff, -0xca,0xc4,0xff,0xff,0xff,0xff, -0x94,0x88,0xff,0xff,0xff,0xff, -0x28,0x10,0xff,0xff,0xff,0xff, -0x53,0x23,0xff,0xff,0xff,0xff, -0xa7,0x47,0xff,0xff,0xff,0xff, -0x4f,0x8f,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xff, -0xe0,0xe5,0xf2,0xff,0xff,0xff, -0xc0,0xca,0xe4,0xff,0xff,0xff, -0x80,0x94,0xc8,0xff,0xff,0xff, -0x00,0x28,0x10,0xff,0xff,0xff, -0x03,0x53,0x27,0xff,0xff,0xff, -0x07,0xa7,0x4f,0xff,0xff,0xff, -0x0f,0x4f,0x9f,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xfc,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0xc0,0xc0,0xea,0xf4,0xff,0xff, -0x80,0x80,0xd4,0xe8,0xff,0xff, -0x00,0x00,0x28,0xd7,0xff,0xff, -0x03,0x03,0x57,0x2f,0xff,0xff, -0x07,0x07,0xaf,0x5f,0xff,0xff, -0x0f,0x0f,0x5f,0xbf,0xff,0xff, -0xf0,0xf8,0xfc,0xfe,0xfd,0xff, -0xe0,0xf0,0xf8,0xfd,0xfe,0xff, -0xc0,0xe0,0xf0,0xfa,0xfc,0xff, -0x80,0xc0,0xe0,0xf4,0xf9,0xff, -0x00,0x00,0x00,0x29,0xff,0xff, -0x03,0x07,0x0f,0x0f,0x1f,0xff, -0x07,0x0f,0x1f,0xbf,0x7f,0xff, -0x0f,0x1f,0x3f,0x3f,0x7f,0xff, -0xfc,0xfc,0xfc,0xfc,0xfe,0xfd, -0xfc,0xfc,0xfc,0xfc,0xfd,0xfe, -0xf8,0xf8,0xf8,0xf8,0xfa,0xfd, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x3f,0xbf,0x7f, -0x7f,0x7f,0x7f,0x7f,0x7f,0xff, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfc,0xfc,0xfc,0xfc,0xfc,0xf8, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf1, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x3f,0x3f,0x1f, -0x7f,0x7f,0x7f,0x7f,0x3f,0x3f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf2,0xf1,0xff,0xff,0xff,0xff, -0xe5,0xe2,0xff,0xff,0xff,0xff, -0xca,0xc4,0xff,0xff,0xff,0xff, -0x94,0x88,0xff,0xff,0xff,0xff, -0x28,0x10,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0xa7,0x47,0xff,0xff,0xff,0xff, -0x4f,0x8f,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xff, -0xe0,0xe5,0xf2,0xff,0xff,0xff, -0xc0,0xca,0xe4,0xff,0xff,0xff, -0x80,0x94,0xc8,0xff,0xff,0xff, -0x00,0x28,0x90,0xff,0xff,0xff, -0x00,0x50,0x21,0xff,0xff,0xff, -0x07,0xa7,0x4f,0xff,0xff,0xff, -0x0f,0x4f,0x9f,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xfc,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0xc0,0xc0,0xea,0xf4,0xff,0xff, -0x80,0x80,0xd4,0xe8,0xff,0xff, -0x00,0x00,0xa8,0xd1,0xff,0xff, -0x00,0x00,0x51,0xaf,0xff,0xff, -0x07,0x07,0xaf,0x5f,0xff,0xff, -0x0f,0x0f,0x5f,0xbf,0xff,0xff, -0xf0,0xf8,0xfc,0xfe,0xfd,0xff, -0xe0,0xf0,0xf8,0xfd,0xfa,0xff, -0xc0,0xe0,0xf0,0xfa,0xfc,0xff, -0x80,0xc0,0xe0,0xe0,0xf1,0xff, -0x00,0x00,0xc0,0xe9,0xf3,0xff, -0x00,0x00,0x01,0x03,0xdf,0xff, -0x07,0x0f,0x1f,0xbf,0x7f,0xff, -0x0f,0x1f,0x3f,0x3f,0x7f,0xff, -0xfc,0xfc,0xfc,0xfc,0xfe,0xfd, -0xf8,0xf8,0xf8,0xf8,0xfd,0xfa, -0xf8,0xf8,0xf8,0xf8,0xfa,0xfd, -0xf0,0xf0,0xf0,0xf0,0xf5,0xfb, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x7f,0xff, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfe, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfd, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfb, -0xf0,0xf0,0xf0,0xf0,0xf1,0xf7, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x7f,0x7f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf2,0xf1,0xff,0xff,0xff,0xff, -0xe5,0xe2,0xff,0xff,0xff,0xff, -0xca,0xc4,0xff,0xff,0xff,0xff, -0x94,0x88,0xff,0xff,0xff,0xff, -0x28,0x10,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0xa1,0x41,0xff,0xff,0xff,0xff, -0x4f,0x8f,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xff, -0xe0,0xe5,0xf2,0xff,0xff,0xff, -0xc0,0xca,0xe4,0xff,0xff,0xff, -0x80,0x94,0xc8,0xff,0xff,0xff, -0x00,0x28,0x90,0xff,0xff,0xff, -0x00,0x50,0x21,0xff,0xff,0xff, -0x01,0xa1,0x43,0xff,0xff,0xff, -0x0f,0x4f,0x9f,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xf8,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0xc0,0xc0,0xea,0xf4,0xff,0xff, -0x80,0x80,0xd4,0xe8,0xff,0xff, -0x00,0x00,0xa8,0xd1,0xff,0xff, -0x00,0x00,0x51,0xa3,0xff,0xff, -0x01,0x01,0xa3,0x5f,0xff,0xff, -0x0f,0x0f,0x5f,0xbf,0xff,0xff, -0xf0,0xf8,0xf8,0xf8,0xf8,0xff, -0xe0,0xf0,0xf8,0xf8,0xf8,0xff, -0xc0,0xe0,0xf0,0xf0,0xf0,0xff, -0x80,0xc0,0xe0,0xe0,0xf1,0xff, -0x00,0x00,0xc0,0xc1,0xe3,0xff, -0x00,0x00,0x01,0x83,0xc7,0xff, -0x01,0x01,0x03,0xa7,0xff,0xff, -0x0f,0x1f,0x3f,0x3f,0x7f,0xff, -0xf8,0xf8,0xf8,0xf8,0xfa,0xfd, -0xf8,0xf8,0xf8,0xf8,0xfd,0xfa, -0xf0,0xf0,0xf0,0xf0,0xfa,0xf5, -0xf0,0xf0,0xf0,0xf0,0xe1,0xf3, -0xe0,0xe0,0xe0,0xe1,0xc3,0xe7, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfe, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfd, -0xf0,0xf0,0xf0,0xf0,0xf0,0xfb, -0xf0,0xf0,0xf0,0xf0,0xf1,0xf7, -0xe0,0xe0,0xe0,0xe1,0xe3,0xef, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf2,0xf1,0xff,0xff,0xff,0xff, -0xe5,0xe2,0xff,0xff,0xff,0xff, -0xca,0xc4,0xff,0xff,0xff,0xff, -0x94,0x88,0xff,0xff,0xff,0xff, -0x28,0x10,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0xa1,0x41,0xff,0xff,0xff,0xff, -0x43,0x83,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xff, -0xe0,0xe5,0xf2,0xff,0xff,0xff, -0xc0,0xca,0xe4,0xff,0xff,0xff, -0x80,0x94,0xc8,0xff,0xff,0xff, -0x00,0x28,0x90,0xff,0xff,0xff, -0x00,0x50,0x21,0xff,0xff,0xff, -0x01,0xa1,0x43,0xff,0xff,0xff, -0x03,0x43,0x87,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xf8,0xff,0xff, -0xe0,0xe0,0xf0,0xf0,0xff,0xff, -0xc0,0xc0,0xea,0xf4,0xff,0xff, -0x80,0x80,0xd4,0xe8,0xff,0xff, -0x00,0x00,0xa8,0xd1,0xff,0xff, -0x00,0x00,0x51,0xa3,0xff,0xff, -0x01,0x01,0xa3,0x47,0xff,0xff, -0x03,0x03,0x47,0xbf,0xff,0xff, -0xf0,0xf8,0xf8,0xf8,0xf8,0xff, -0xe0,0xf0,0xf0,0xf0,0xf0,0xff, -0xc0,0xe0,0xf0,0xf0,0xf0,0xff, -0x80,0xc0,0xe0,0xe0,0xe1,0xff, -0x00,0x00,0xc0,0xc1,0xe3,0xff, -0x00,0x00,0x01,0x03,0xc7,0xff, -0x01,0x01,0x03,0xa7,0x4f,0xff, -0x03,0x03,0x07,0x0f,0x7f,0xff, -0xf8,0xf8,0xf8,0xf8,0xfa,0xfd, -0xf0,0xf0,0xf0,0xf0,0xf5,0xfa, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf1, -0xe0,0xe0,0xe0,0xe0,0xe1,0xe3, -0xe0,0xe0,0xe0,0xe1,0xc3,0xe7, -0x40,0x40,0x41,0x43,0x07,0x4f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xfe, -0xf0,0xf0,0xf0,0xf0,0xf0,0xfd, -0xf0,0xf0,0xf0,0xf0,0xf0,0xfb, -0xe0,0xe0,0xe0,0xe0,0xe1,0xf7, -0xe0,0xe0,0xe0,0xe1,0xe3,0xef, -0x40,0x40,0x41,0x43,0x47,0x5f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/Firenzina/kp_white.h b/Firenzina/kp_white.h deleted file mode 100644 index 7ebe6eb..0000000 --- a/Firenzina/kp_white.h +++ /dev/null @@ -1,4126 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf3,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0xff,0xff,0xff,0xff, -0x02,0x00,0xff,0xff,0xff,0xff, -0x06,0x02,0xff,0xff,0xff,0xff, -0x0e,0x06,0xff,0xff,0xff,0xff, -0x0e,0x0e,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x02,0x00,0x00,0xff,0xff,0xff, -0x06,0x02,0x00,0xff,0xff,0xff, -0x0e,0x06,0x03,0xff,0xff,0xff, -0x0f,0x0f,0x07,0xff,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x02,0x00,0x00,0x00,0xff,0xff, -0x06,0x02,0x00,0x01,0xff,0xff, -0x0e,0x06,0x03,0x03,0xff,0xff, -0x0f,0x0f,0x07,0x07,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x02,0x00,0x00,0x00,0x01,0xff, -0x06,0x02,0x00,0x01,0x03,0xff, -0x0e,0x06,0x03,0x03,0x07,0xff, -0x0f,0x0f,0x07,0x07,0x0f,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x02,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x0f,0x0f,0x07,0x07,0x0f,0x1f, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x02,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x0f,0x0f,0x07,0x07,0x0f,0x1f, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x02,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x0f,0x0f,0x07,0x07,0x0f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xe7,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x00,0xff,0xff,0xff,0xff, -0x06,0x02,0xff,0xff,0xff,0xff, -0x0e,0x06,0xff,0xff,0xff,0xff, -0x1e,0x0e,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x02,0x00,0x00,0xff,0xff,0xff, -0x06,0x02,0x00,0xff,0xff,0xff, -0x0e,0x06,0x03,0xff,0xff,0xff, -0x1f,0x0f,0x07,0xff,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x02,0x00,0x00,0x00,0xff,0xff, -0x06,0x02,0x00,0x01,0xff,0xff, -0x0e,0x06,0x03,0x03,0xff,0xff, -0x1f,0x0f,0x07,0x07,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x02,0x00,0x00,0x00,0x01,0xff, -0x06,0x02,0x00,0x01,0x03,0xff, -0x0e,0x06,0x03,0x03,0x07,0xff, -0x1f,0x0f,0x07,0x07,0x0f,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x02,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x02,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x02,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xfe,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xcf,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf4,0xe8,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x02,0xff,0xff,0xff,0xff, -0x0e,0x06,0xff,0xff,0xff,0xff, -0x1e,0x0e,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xf0,0xe0,0xc0,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x06,0x02,0x00,0xff,0xff,0xff, -0x0e,0x06,0x03,0xff,0xff,0xff, -0x1f,0x0f,0x07,0xff,0xff,0xff, -0xf0,0xe0,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x06,0x02,0x00,0x01,0xff,0xff, -0x0e,0x06,0x03,0x03,0xff,0xff, -0x1f,0x0f,0x07,0x07,0xff,0xff, -0xf0,0xe0,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x06,0x02,0x00,0x01,0x03,0xff, -0x0e,0x06,0x03,0x03,0x07,0xff, -0x1f,0x0f,0x07,0x07,0x0f,0xff, -0xf0,0xe0,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xf0,0xe0,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xf0,0xe0,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xfc,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x9f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0x68,0x50,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0a,0x04,0xff,0xff,0xff,0xff, -0x1e,0x0e,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xe0,0xff,0xff,0xff, -0x60,0x40,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x02,0x00,0x00,0xff,0xff,0xff, -0x0e,0x06,0x03,0xff,0xff,0xff, -0x1f,0x0f,0x07,0xff,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xff,0xff, -0x60,0x40,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x02,0x00,0x00,0x01,0xff,0xff, -0x0e,0x06,0x03,0x03,0xff,0xff, -0x1f,0x0f,0x07,0x07,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xff, -0x60,0x40,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x02,0x00,0x00,0x01,0x03,0xff, -0x0e,0x06,0x03,0x03,0x07,0xff, -0x1f,0x0f,0x07,0x07,0x0f,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x60,0x40,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x02,0x00,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x60,0x40,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x02,0x00,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x60,0x40,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x02,0x00,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf9,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0x78,0x70,0xff,0xff,0xff,0xff, -0x50,0x20,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x16,0x0a,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xe0,0xff,0xff,0xff, -0x70,0x60,0xc0,0xff,0xff,0xff, -0x40,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x06,0x02,0x01,0xff,0xff,0xff, -0x1f,0x0f,0x07,0xff,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xff,0xff, -0x70,0x60,0xc0,0xc0,0xff,0xff, -0x40,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x06,0x02,0x01,0x03,0xff,0xff, -0x1f,0x0f,0x07,0x07,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xff, -0x70,0x60,0xc0,0xc0,0xe0,0xff, -0x40,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x06,0x02,0x01,0x03,0x07,0xff, -0x1f,0x0f,0x07,0x07,0x0f,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x40,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x06,0x02,0x01,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x40,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x06,0x02,0x01,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x40,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x06,0x02,0x01,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xf3,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0x78,0x70,0xff,0xff,0xff,0xff, -0x70,0x60,0xff,0xff,0xff,0xff, -0x20,0x40,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x2f,0x17,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xe0,0xff,0xff,0xff, -0x70,0x60,0xc0,0xff,0xff,0xff, -0x60,0x40,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x01,0xff,0xff,0xff, -0x0f,0x07,0x03,0xff,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xff,0xff, -0x70,0x60,0xc0,0xc0,0xff,0xff, -0x60,0x40,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x0f,0x07,0x03,0x07,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xff, -0x70,0x60,0xc0,0xc0,0xe0,0xff, -0x60,0x40,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x0f,0x07,0x03,0x07,0x0f,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x0f,0x07,0x03,0x07,0x0f,0x1f, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x0f,0x07,0x03,0x07,0x0f,0x1f, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x0f,0x07,0x03,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xe7,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0x78,0x70,0xff,0xff,0xff,0xff, -0x70,0x60,0xff,0xff,0xff,0xff, -0x60,0x40,0xff,0xff,0xff,0xff, -0x40,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf0,0xe0,0xff,0xff,0xff, -0x70,0x60,0xc0,0xff,0xff,0xff, -0x60,0x40,0x00,0xff,0xff,0xff, -0x40,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x01,0xff,0xff,0xff, -0x01,0x01,0x03,0xff,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xff,0xff, -0x70,0x60,0xc0,0xc0,0xff,0xff, -0x60,0x40,0x00,0x80,0xff,0xff, -0x40,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x01,0x01,0x03,0x07,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xff, -0x70,0x60,0xc0,0xc0,0xe0,0xff, -0x60,0x40,0x00,0x80,0xc0,0xff, -0x40,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x40,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x40,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x40,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0xcf,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0x70,0x70,0xff,0xff,0xff,0xff, -0x70,0x60,0xff,0xff,0xff,0xff, -0x60,0x40,0xff,0xff,0xff,0xff, -0x40,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xe0,0xff,0xff,0xff, -0x70,0x60,0xc0,0xff,0xff,0xff, -0x60,0x40,0x00,0xff,0xff,0xff, -0x40,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x01,0xff,0xff,0xff, -0x01,0x01,0x03,0xff,0xff,0xff, -0xf0,0xf0,0xe0,0xe0,0xff,0xff, -0x70,0x60,0xc0,0xc0,0xff,0xff, -0x60,0x40,0x00,0x80,0xff,0xff, -0x40,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x01,0x01,0x03,0x07,0xff,0xff, -0xf0,0xf0,0xe0,0xe0,0xf0,0xff, -0x70,0x60,0xc0,0xc0,0xe0,0xff, -0x60,0x40,0x00,0x80,0xc0,0xff, -0x40,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0xf0,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x40,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0xf0,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x40,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0xf0,0xf0,0xe0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x40,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf3,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x02,0xff,0xff,0xff,0xff, -0x03,0x02,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0xff,0xff,0xff, -0x02,0x02,0x00,0xff,0xff,0xff, -0x07,0x06,0x02,0xff,0xff,0xff, -0x07,0x06,0x06,0xff,0xff,0xff, -0x0f,0x0e,0x0f,0xff,0xff,0xff, -0x0f,0x0f,0x0f,0xff,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x02,0x00,0x00,0x00,0xff,0xff, -0x06,0x02,0x00,0x00,0xff,0xff, -0x06,0x06,0x02,0x01,0xff,0xff, -0x0e,0x0e,0x07,0x03,0xff,0xff, -0x0e,0x0f,0x0f,0x07,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x02,0x00,0x00,0x00,0x80,0xff, -0x06,0x02,0x00,0x00,0x01,0xff, -0x06,0x06,0x02,0x01,0x03,0xff, -0x0e,0x0e,0x07,0x03,0x07,0xff, -0x0f,0x0f,0x0f,0x07,0x0f,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x02,0x00,0x00,0x00,0x80,0xc1, -0x06,0x02,0x00,0x00,0x01,0x83, -0x06,0x06,0x02,0x01,0x03,0x07, -0x0e,0x0e,0x07,0x03,0x07,0x0f, -0x0f,0x0f,0x0f,0x07,0x0f,0x1f, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x02,0x00,0x00,0x00,0x80,0xc1, -0x06,0x02,0x00,0x00,0x01,0x83, -0x06,0x06,0x02,0x01,0x03,0x07, -0x0e,0x0e,0x07,0x03,0x07,0x0f, -0x0f,0x0f,0x0f,0x07,0x0f,0x1f, -0xfe,0x80,0xc0,0xe0,0xf0,0xf8, -0x0e,0x00,0x80,0xc0,0xe0,0xf0, -0x0e,0x00,0x00,0x80,0xc0,0xe0, -0x0e,0x00,0x00,0x00,0x80,0xc1, -0x0e,0x02,0x00,0x00,0x01,0x83, -0x0e,0x06,0x02,0x01,0x03,0x07, -0x0e,0x0e,0x07,0x03,0x07,0x0f, -0x0e,0x0f,0x0f,0x07,0x0f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xe7,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x00,0xff,0xff,0xff, -0x06,0x06,0x02,0xff,0xff,0xff, -0x0e,0x0e,0x06,0xff,0xff,0xff, -0x0e,0x0e,0x0f,0xff,0xff,0xff, -0x1f,0x1f,0x1f,0xff,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x04,0x02,0x00,0x00,0xff,0xff, -0x0c,0x06,0x02,0x01,0xff,0xff, -0x0c,0x0e,0x07,0x03,0xff,0xff, -0x1f,0x1f,0x0f,0x07,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x04,0x02,0x00,0x00,0x01,0xff, -0x0c,0x06,0x02,0x01,0x03,0xff, -0x0e,0x0e,0x07,0x03,0x07,0xff, -0x1f,0x1f,0x0f,0x07,0x0f,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x04,0x02,0x00,0x00,0x01,0x83, -0x0c,0x06,0x02,0x01,0x03,0x07, -0x0e,0x0e,0x07,0x03,0x07,0x0f, -0x1f,0x1f,0x0f,0x07,0x0f,0x1f, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x04,0x02,0x00,0x00,0x01,0x83, -0x0c,0x06,0x02,0x01,0x03,0x07, -0x0e,0x0e,0x07,0x03,0x07,0x0f, -0x1f,0x1f,0x0f,0x07,0x0f,0x1f, -0xfc,0x80,0xc0,0xe0,0xf0,0xf8, -0x7c,0x00,0x80,0xc0,0xe0,0xf0, -0x1c,0x00,0x00,0x80,0xc0,0xe0, -0x1c,0x00,0x00,0x00,0x80,0xc1, -0x1c,0x02,0x00,0x00,0x01,0x83, -0x1c,0x06,0x02,0x01,0x03,0x07, -0x1c,0x0e,0x07,0x03,0x07,0x0f, -0x1d,0x1f,0x0f,0x07,0x0f,0x1f, -0xfe,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xcf,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xff,0xfe,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xf8,0xf4,0xe8,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x06,0x04,0x02,0xff,0xff,0xff, -0x0e,0x0e,0x06,0xff,0xff,0xff, -0x1e,0x1e,0x0f,0xff,0xff,0xff, -0x1f,0x1f,0x1f,0xff,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x02,0x00,0x00,0x00,0xff,0xff, -0x0a,0x06,0x02,0x01,0xff,0xff, -0x1e,0x0e,0x07,0x03,0xff,0xff, -0x1f,0x1f,0x0f,0x07,0xff,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x02,0x00,0x00,0x00,0x01,0xff, -0x0e,0x06,0x02,0x01,0x03,0xff, -0x1e,0x0e,0x07,0x03,0x07,0xff, -0x1f,0x1f,0x0f,0x07,0x0f,0xff, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x02,0x00,0x00,0x00,0x01,0x83, -0x0e,0x06,0x02,0x01,0x03,0x07, -0x1e,0x0e,0x07,0x03,0x07,0x0f, -0x1f,0x1f,0x0f,0x07,0x0f,0x1f, -0xf8,0xf0,0xe0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x02,0x00,0x00,0x00,0x01,0x83, -0x0e,0x06,0x02,0x01,0x03,0x07, -0x1e,0x0e,0x07,0x03,0x07,0x0f, -0x1f,0x1f,0x0f,0x07,0x0f,0x1f, -0xfa,0xf0,0xe0,0xe0,0xf0,0xf8, -0x7a,0x00,0x80,0xc0,0xe0,0xf0, -0x7a,0x00,0x00,0x80,0xc0,0xe0, -0x3a,0x00,0x00,0x00,0x80,0xc1, -0x3a,0x00,0x00,0x00,0x01,0x83, -0x3a,0x06,0x02,0x01,0x03,0x07, -0x3a,0x0e,0x07,0x03,0x07,0x0f, -0x3b,0x1f,0x0f,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xfc,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x9f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xfe,0xfc,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xf4,0xfc,0xf8,0xff,0xff,0xff, -0x70,0x68,0xd0,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0e,0x0a,0x04,0xff,0xff,0xff, -0x1e,0x1e,0x0f,0xff,0xff,0xff, -0x3f,0x3f,0x1f,0xff,0xff,0xff, -0xf4,0xf8,0xf0,0xe0,0xff,0xff, -0x70,0x60,0xc0,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x0e,0x02,0x00,0x01,0xff,0xff, -0x1e,0x0e,0x07,0x03,0xff,0xff, -0x3f,0x1f,0x0f,0x07,0xff,0xff, -0xf4,0xf8,0xf0,0xe0,0xf0,0xff, -0x70,0x60,0xc0,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x06,0x02,0x00,0x01,0x03,0xff, -0x16,0x0e,0x07,0x03,0x07,0xff, -0x37,0x1f,0x0f,0x07,0x0f,0xff, -0xf4,0xf8,0xf0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x16,0x0e,0x07,0x03,0x07,0x0f, -0x37,0x1f,0x0f,0x07,0x0f,0x1f, -0xf4,0xf8,0xf0,0xe0,0xf0,0xf8, -0x70,0x60,0xc0,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x06,0x02,0x00,0x01,0x03,0x07, -0x16,0x0e,0x07,0x03,0x07,0x0f, -0x37,0x1f,0x0f,0x07,0x0f,0x1f, -0xf6,0xf8,0xf0,0xe0,0xf0,0xf8, -0x76,0x60,0xc0,0xc0,0xe0,0xf0, -0x76,0x00,0x00,0x80,0xc0,0xe0, -0x76,0x00,0x00,0x00,0x80,0xc1, -0x76,0x00,0x00,0x00,0x01,0x83, -0x76,0x02,0x00,0x01,0x03,0x07, -0x76,0x0e,0x07,0x03,0x07,0x0f, -0x77,0x1f,0x0f,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf9,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x3f,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xf8,0xff,0xff,0xff, -0x78,0x78,0xf0,0xff,0xff,0xff, -0x70,0x50,0x20,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0e,0x16,0x0b,0xff,0xff,0xff, -0x2f,0x3f,0x1f,0xff,0xff,0xff, -0xfc,0xf8,0xf0,0xe0,0xff,0xff, -0x78,0x70,0xe0,0xc0,0xff,0xff, -0x70,0x40,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x0e,0x06,0x03,0x03,0xff,0xff, -0x2f,0x1f,0x0f,0x07,0xff,0xff, -0xec,0xf8,0xf0,0xe0,0xf0,0xff, -0x68,0x70,0xe0,0xc0,0xe0,0xff, -0x60,0x40,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x0e,0x06,0x03,0x03,0x07,0xff, -0x2f,0x1f,0x0f,0x07,0x0f,0xff, -0xec,0xf8,0xf0,0xe0,0xf0,0xf8, -0x68,0x70,0xe0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x2f,0x1f,0x0f,0x07,0x0f,0x1f, -0xec,0xf8,0xf0,0xe0,0xf0,0xf8, -0x68,0x70,0xe0,0xc0,0xe0,0xf0, -0x60,0x40,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x0e,0x06,0x03,0x03,0x07,0x0f, -0x2f,0x1f,0x0f,0x07,0x0f,0x1f, -0xee,0xf8,0xf0,0xe0,0xf0,0xf8, -0x6e,0x70,0xe0,0xc0,0xe0,0xf0, -0x6e,0x40,0x00,0x80,0xc0,0xe0, -0x6e,0x00,0x00,0x00,0x80,0xc1, -0x6e,0x00,0x00,0x00,0x01,0x83, -0x6e,0x00,0x00,0x01,0x03,0x07, -0x6e,0x06,0x03,0x03,0x07,0x0f, -0x6f,0x1f,0x0f,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xf3,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0x7f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xff,0xff,0xff, -0x78,0x78,0xf0,0xff,0xff,0xff, -0x70,0x70,0x60,0xff,0xff,0xff, -0x60,0x20,0x40,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x2f,0x17,0xff,0xff,0xff, -0xf8,0xf8,0xf0,0xe0,0xff,0xff, -0x78,0x70,0xe0,0xc0,0xff,0xff, -0x50,0x60,0x40,0x80,0xff,0xff, -0x40,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x1f,0x0f,0x07,0x07,0xff,0xff, -0xf8,0xf8,0xf0,0xe0,0xf0,0xff, -0x78,0x70,0xe0,0xc0,0xe0,0xff, -0x70,0x60,0x40,0x80,0xc0,0xff, -0x40,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x1f,0x0f,0x07,0x07,0x0f,0xff, -0xf8,0xf8,0xf0,0xe0,0xf0,0xf8, -0x78,0x70,0xe0,0xc0,0xe0,0xf0, -0x70,0x60,0x40,0x80,0xc0,0xe0, -0x40,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xf8,0xf8,0xf0,0xe0,0xf0,0xf8, -0x78,0x70,0xe0,0xc0,0xe0,0xf0, -0x70,0x60,0x40,0x80,0xc0,0xe0, -0x40,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x1f,0x0f,0x07,0x07,0x0f,0x1f, -0xdc,0xf8,0xf0,0xe0,0xf0,0xf8, -0x5c,0x70,0xe0,0xc0,0xe0,0xf0, -0x5c,0x60,0x40,0x80,0xc0,0xe0, -0x5c,0x00,0x00,0x00,0x80,0xc1, -0x5c,0x00,0x00,0x00,0x01,0x83, -0x5e,0x00,0x00,0x01,0x03,0x07, -0x5e,0x00,0x01,0x03,0x07,0x0f, -0x5f,0x0f,0x07,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xe7,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xff,0xff,0xff, -0x70,0x70,0xf0,0xff,0xff,0xff, -0x70,0x70,0x60,0xff,0xff,0xff, -0x60,0x60,0x40,0xff,0xff,0xff, -0x40,0x40,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf0,0xe0,0xff,0xff, -0x30,0x70,0xe0,0xc0,0xff,0xff, -0x30,0x60,0x40,0x80,0xff,0xff, -0x20,0x40,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x01,0x01,0x03,0x07,0xff,0xff, -0xf8,0xf8,0xf0,0xe0,0xf0,0xff, -0x70,0x70,0xe0,0xc0,0xe0,0xff, -0x30,0x60,0x40,0x80,0xc0,0xff, -0x20,0x40,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0xf8,0xf8,0xf0,0xe0,0xf0,0xf8, -0x70,0x70,0xe0,0xc0,0xe0,0xf0, -0x30,0x60,0x40,0x80,0xc0,0xe0, -0x20,0x40,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0xf8,0xf8,0xf0,0xe0,0xf0,0xf8, -0x70,0x70,0xe0,0xc0,0xe0,0xf0, -0x30,0x60,0x40,0x80,0xc0,0xe0, -0x20,0x40,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0xb8,0xf8,0xf0,0xe0,0xf0,0xf8, -0x38,0x70,0xe0,0xc0,0xe0,0xf0, -0x38,0x60,0x40,0x80,0xc0,0xe0, -0x38,0x40,0x00,0x00,0x80,0xc1, -0x38,0x00,0x00,0x00,0x01,0x83, -0x38,0x00,0x00,0x01,0x03,0x07, -0x3e,0x00,0x01,0x03,0x07,0x0f, -0x3f,0x01,0x03,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0xcf,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xe0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0x40,0xff,0xff,0xff,0xff, -0xc0,0x40,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0xff,0xff,0xff, -0xf0,0x70,0xf0,0xff,0xff,0xff, -0xe0,0x60,0x60,0xff,0xff,0xff, -0xe0,0x60,0x40,0xff,0xff,0xff, -0x40,0x40,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x70,0xf0,0xf0,0xe0,0xff,0xff, -0x70,0x70,0xe0,0xc0,0xff,0xff, -0x60,0x60,0x40,0x80,0xff,0xff, -0x60,0x40,0x00,0x00,0xff,0xff, -0x40,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x01,0x01,0x03,0x07,0xff,0xff, -0xf0,0xf0,0xf0,0xe0,0xf0,0xff, -0x70,0x70,0xe0,0xc0,0xe0,0xff, -0x60,0x60,0x40,0x80,0xc0,0xff, -0x60,0x40,0x00,0x00,0x80,0xff, -0x40,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0xf0,0xf0,0xf0,0xe0,0xf0,0xf8, -0x70,0x70,0xe0,0xc0,0xe0,0xf0, -0x60,0x60,0x40,0x80,0xc0,0xe0, -0x60,0x40,0x00,0x00,0x80,0xc1, -0x40,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0xf0,0xf0,0xf0,0xe0,0xf0,0xf8, -0x70,0x70,0xe0,0xc0,0xe0,0xf0, -0x60,0x60,0x40,0x80,0xc0,0xe0, -0x60,0x40,0x00,0x00,0x80,0xc1, -0x40,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0x70,0xf0,0xf0,0xe0,0xf0,0xf8, -0x70,0x70,0xe0,0xc0,0xe0,0xf0, -0x70,0x60,0x40,0x80,0xc0,0xe0, -0x70,0x40,0x00,0x00,0x80,0xc1, -0x70,0x00,0x00,0x00,0x01,0x83, -0x70,0x00,0x00,0x01,0x03,0x07, -0x70,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x01,0x03,0x07,0x0f,0x1f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xfb,0xff,0xff,0xff,0xff,0xff, -0xf3,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x03,0xff,0xff,0xff,0xff, -0x02,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0xff,0xff,0xff, -0x02,0x02,0x02,0xff,0xff,0xff, -0x07,0x06,0x07,0xff,0xff,0xff, -0x07,0x06,0x07,0xff,0xff,0xff, -0x0f,0x0e,0x0f,0xff,0xff,0xff, -0x0f,0x0e,0x0f,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x00,0x00,0x80,0xff,0xff, -0x02,0x02,0x02,0x00,0xff,0xff, -0x06,0x06,0x06,0x02,0xff,0xff, -0x06,0x06,0x06,0x07,0xff,0xff, -0x0e,0x0e,0x0f,0x0f,0xff,0xff, -0x0f,0x0e,0x0f,0x0f,0xff,0xff, -0xfe,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x02,0x00,0x00,0x80,0xc0,0xff, -0x02,0x02,0x00,0x00,0x80,0xff, -0x06,0x06,0x02,0x00,0x01,0xff, -0x06,0x06,0x06,0x03,0x03,0xff, -0x0e,0x0e,0x0f,0x07,0x07,0xff, -0x0f,0x0e,0x0f,0x0f,0x0f,0xff, -0xc0,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x02,0x00,0x00,0x80,0xc0,0xe0, -0x02,0x02,0x00,0x00,0x80,0xc1, -0x06,0x06,0x02,0x00,0x01,0x83, -0x06,0x06,0x06,0x03,0x03,0x07, -0x0e,0x0e,0x0f,0x07,0x07,0x0f, -0x0f,0x0e,0x0f,0x0f,0x0f,0x1f, -0xfe,0x80,0xc0,0xe0,0xf0,0xf8, -0x06,0x00,0x80,0xc0,0xe0,0xf0, -0x06,0x00,0x00,0x80,0xc0,0xe0, -0x06,0x02,0x00,0x00,0x80,0xc1, -0x06,0x06,0x02,0x00,0x01,0x83, -0x06,0x06,0x06,0x03,0x03,0x07, -0x0e,0x0e,0x0f,0x07,0x07,0x0f, -0x0f,0x0e,0x0f,0x0f,0x0f,0x1f, -0xfe,0x81,0xc0,0xe0,0xf0,0xf8, -0x0e,0x00,0x80,0xc0,0xe0,0xf0, -0x0e,0x00,0x00,0x80,0xc0,0xe0, -0x0e,0x02,0x00,0x00,0x80,0xc1, -0x0e,0x06,0x02,0x00,0x01,0x83, -0x0e,0x06,0x06,0x03,0x03,0x07, -0x0e,0x0e,0x0f,0x07,0x07,0x0f, -0x0f,0x0e,0x0f,0x0f,0x0f,0x1f, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf7,0xff,0xff,0xff,0xff,0xff, -0xe7,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x05,0x07,0xff,0xff,0xff, -0x07,0x05,0x07,0xff,0xff,0xff, -0x0f,0x0d,0x0f,0xff,0xff,0xff, -0x0f,0x0d,0x0f,0xff,0xff,0xff, -0x1f,0x1d,0x1f,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x06,0x00,0x02,0x00,0xff,0xff, -0x06,0x04,0x06,0x02,0xff,0xff, -0x0e,0x0c,0x0e,0x07,0xff,0xff, -0x0e,0x0c,0x0f,0x0f,0xff,0xff, -0x1f,0x1d,0x1f,0x1f,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x7e,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x06,0x00,0x00,0x00,0x80,0xff, -0x06,0x04,0x02,0x00,0x01,0xff, -0x0e,0x0c,0x06,0x03,0x03,0xff, -0x0e,0x0c,0x0f,0x07,0x07,0xff, -0x1f,0x1d,0x1f,0x0f,0x0f,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x06,0x00,0x00,0x00,0x80,0xc1, -0x06,0x04,0x02,0x00,0x01,0x83, -0x0e,0x0c,0x06,0x03,0x03,0x07, -0x0e,0x0c,0x0f,0x07,0x07,0x0f, -0x1f,0x1d,0x1f,0x0f,0x0f,0x1f, -0xfe,0x80,0xc0,0xe0,0xf0,0xf8, -0x7e,0x00,0x80,0xc0,0xe0,0xf0, -0x0e,0x00,0x00,0x80,0xc0,0xe0, -0x0e,0x00,0x00,0x00,0x80,0xc1, -0x0e,0x04,0x02,0x00,0x01,0x83, -0x0e,0x0c,0x06,0x03,0x03,0x07, -0x0e,0x0c,0x0f,0x07,0x07,0x0f, -0x1f,0x1d,0x1f,0x0f,0x0f,0x1f, -0xfe,0x82,0xc0,0xe0,0xf0,0xf8, -0x7e,0x00,0x80,0xc0,0xe0,0xf0, -0x1e,0x00,0x00,0x80,0xc0,0xe0, -0x1e,0x00,0x00,0x00,0x80,0xc1, -0x1e,0x04,0x02,0x00,0x01,0x83, -0x1e,0x0c,0x06,0x03,0x03,0x07, -0x1e,0x0c,0x0f,0x07,0x07,0x0f, -0x1f,0x1d,0x1f,0x0f,0x0f,0x1f, -0xfe,0xff,0xff,0xff,0xff,0xff, -0xfe,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xef,0xff,0xff,0xff,0xff,0xff, -0xcf,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xff,0xfe,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xfe,0xfb,0xfe,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x1b,0x0f,0xff,0xff,0xff, -0x0f,0x0b,0x0f,0xff,0xff,0xff, -0x1f,0x1b,0x1f,0xff,0xff,0xff, -0x1f,0x1b,0x1f,0xff,0xff,0xff, -0xfe,0xf8,0xf4,0xe8,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0e,0x02,0x04,0x02,0xff,0xff, -0x0e,0x0a,0x0e,0x07,0xff,0xff, -0x1e,0x1a,0x1f,0x0f,0xff,0xff, -0x1f,0x1b,0x1f,0x1f,0xff,0xff, -0xfe,0xf8,0xf0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x7e,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x0e,0x02,0x00,0x00,0x01,0xff, -0x0e,0x0a,0x06,0x03,0x03,0xff, -0x1e,0x1a,0x0f,0x07,0x07,0xff, -0x1f,0x1b,0x1f,0x0f,0x0f,0xff, -0xfe,0xf8,0xf0,0xe0,0xf0,0xf8, -0x00,0x00,0x80,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x0e,0x02,0x00,0x00,0x01,0x83, -0x0e,0x0a,0x06,0x03,0x03,0x07, -0x1e,0x1a,0x0f,0x07,0x07,0x0f, -0x1f,0x1b,0x1f,0x0f,0x0f,0x1f, -0xfe,0xf8,0xf0,0xe0,0xf0,0xf8, -0x7e,0x00,0x80,0xc0,0xe0,0xf0, -0x7e,0x00,0x00,0x80,0xc0,0xe0, -0x1e,0x00,0x00,0x00,0x80,0xc1, -0x1e,0x02,0x00,0x00,0x01,0x83, -0x1e,0x0a,0x06,0x03,0x03,0x07, -0x1e,0x1a,0x0f,0x07,0x07,0x0f, -0x1f,0x1b,0x1f,0x0f,0x0f,0x1f, -0xfe,0xfc,0xf0,0xe0,0xf0,0xf8, -0x7e,0x00,0x80,0xc0,0xe0,0xf0, -0x7e,0x00,0x00,0x80,0xc0,0xe0, -0x3e,0x00,0x00,0x00,0x80,0xc1, -0x3e,0x02,0x00,0x00,0x01,0x83, -0x3e,0x0a,0x06,0x03,0x03,0x07, -0x3e,0x1a,0x0f,0x07,0x07,0x0f, -0x3f,0x1b,0x1f,0x0f,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xfd,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xdf,0xff,0xff,0xff,0xff,0xff, -0x9f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xfe,0xfc,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xfc,0xf4,0xfc,0xff,0xff,0xff, -0xfc,0xf6,0xfc,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x37,0x1f,0xff,0xff,0xff, -0x1f,0x17,0x1f,0xff,0xff,0xff, -0x3f,0x37,0x3f,0xff,0xff,0xff, -0xfc,0xf4,0xfc,0xf8,0xff,0xff, -0x7c,0x70,0xe8,0xd0,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1e,0x06,0x0a,0x05,0xff,0xff, -0x1e,0x16,0x1f,0x0f,0xff,0xff, -0x3f,0x37,0x3f,0x1f,0xff,0xff, -0xfc,0xf4,0xf8,0xf0,0xf0,0xff, -0x7c,0x70,0xe0,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x7e,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x1e,0x06,0x02,0x01,0x03,0xff, -0x1e,0x16,0x0f,0x07,0x07,0xff, -0x3f,0x37,0x1f,0x0f,0x0f,0xff, -0xfc,0xf4,0xf8,0xf0,0xf0,0xf8, -0x7c,0x70,0xe0,0xc0,0xe0,0xf0, -0x00,0x00,0x00,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x1e,0x06,0x02,0x01,0x03,0x07, -0x1e,0x16,0x0f,0x07,0x07,0x0f, -0x3f,0x37,0x1f,0x0f,0x0f,0x1f, -0xfe,0xf4,0xf8,0xf0,0xf0,0xf8, -0x7e,0x70,0xe0,0xc0,0xe0,0xf0, -0x7e,0x00,0x00,0x80,0xc0,0xe0, -0x7e,0x00,0x00,0x00,0x80,0xc1, -0x3e,0x00,0x00,0x00,0x01,0x83, -0x3e,0x06,0x02,0x01,0x03,0x07, -0x3e,0x16,0x0f,0x07,0x07,0x0f, -0x3f,0x37,0x1f,0x0f,0x0f,0x1f, -0xfe,0xf4,0xf8,0xf0,0xf0,0xf8, -0x7e,0x70,0xe0,0xc0,0xe0,0xf0, -0x7e,0x00,0x00,0x80,0xc0,0xe0, -0x7e,0x00,0x00,0x00,0x80,0xc1, -0x7e,0x00,0x00,0x00,0x01,0x83, -0x7e,0x06,0x02,0x01,0x03,0x07, -0x7e,0x16,0x0f,0x07,0x07,0x0f, -0x7f,0x37,0x1f,0x0f,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf9,0xff,0xff,0xff,0xff,0xff, -0xfb,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xbf,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x3f,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xfc,0xec,0xfc,0xff,0xff,0xff, -0xf8,0xe8,0xf8,0xff,0xff,0xff, -0xf8,0xec,0xf8,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x6f,0x3f,0xff,0xff,0xff, -0x3f,0x2f,0x3f,0xff,0xff,0xff, -0xfc,0xec,0xfc,0xf8,0xff,0xff, -0x78,0x68,0xf8,0xf0,0xff,0xff, -0x78,0x60,0x50,0xa0,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3e,0x0e,0x17,0x0b,0xff,0xff, -0x3f,0x2f,0x3f,0x1f,0xff,0xff, -0xfc,0xec,0xf8,0xf0,0xf0,0xff, -0x78,0x68,0xf0,0xe0,0xe0,0xff, -0x78,0x60,0x40,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x7e,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x3e,0x0e,0x07,0x03,0x07,0xff, -0x3f,0x2f,0x1f,0x0f,0x0f,0xff, -0xfc,0xec,0xf8,0xf0,0xf0,0xf8, -0x78,0x68,0xf0,0xe0,0xe0,0xf0, -0x78,0x60,0x40,0x80,0xc0,0xe0, -0x00,0x00,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x3e,0x0e,0x07,0x03,0x07,0x0f, -0x3f,0x2f,0x1f,0x0f,0x0f,0x1f, -0xfc,0xec,0xf8,0xf0,0xf0,0xf8, -0x7c,0x68,0xf0,0xe0,0xe0,0xf0, -0x7c,0x60,0x40,0x80,0xc0,0xe0, -0x7c,0x00,0x00,0x00,0x80,0xc1, -0x7e,0x00,0x00,0x00,0x01,0x83, -0x7e,0x00,0x00,0x01,0x03,0x07, -0x7e,0x0e,0x07,0x03,0x07,0x0f, -0x7f,0x2f,0x1f,0x0f,0x0f,0x1f, -0xfe,0xec,0xf8,0xf0,0xf0,0xf8, -0x7e,0x68,0xf0,0xe0,0xe0,0xf0, -0x7e,0x60,0x40,0x80,0xc0,0xe0, -0x7e,0x00,0x00,0x00,0x80,0xc1, -0x7e,0x00,0x00,0x00,0x01,0x83, -0x7e,0x00,0x00,0x01,0x03,0x07, -0x7e,0x0e,0x07,0x03,0x07,0x0f, -0x7f,0x2f,0x1f,0x0f,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xf3,0xff,0xff,0xff,0xff,0xff, -0xf7,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0x7f,0xff,0xff,0xff,0xff,0xff, -0x7f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xff,0x7f,0xff,0xff,0xff,0xff, -0xf8,0xd8,0xf8,0xff,0xff,0xff, -0xf8,0xd8,0xf8,0xff,0xff,0xff, -0xf0,0xd0,0xf0,0xff,0xff,0xff, -0xf0,0xd8,0xf0,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0xdf,0x7f,0xff,0xff,0xff, -0xf8,0xd8,0xf8,0xf8,0xff,0xff, -0x78,0x58,0xf8,0xf0,0xff,0xff, -0x70,0x50,0x70,0xe0,0xff,0xff, -0x70,0x40,0x20,0x40,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x1f,0x2f,0x17,0xff,0xff, -0xf8,0xd8,0xf8,0xf0,0xf0,0xff, -0x78,0x58,0xf0,0xe0,0xe0,0xff, -0x70,0x50,0x60,0xc0,0xc0,0xff, -0x70,0x40,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x7e,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x7f,0x1f,0x0f,0x07,0x0f,0xff, -0xf8,0xd8,0xf8,0xf0,0xf0,0xf8, -0x78,0x58,0xf0,0xe0,0xe0,0xf0, -0x70,0x50,0x60,0xc0,0xc0,0xe0, -0x70,0x40,0x00,0x00,0x80,0xc1, -0x00,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x1f,0x0f,0x07,0x0f,0x1f, -0xf8,0xd8,0xf8,0xf0,0xf0,0xf8, -0x78,0x58,0xf0,0xe0,0xe0,0xf0, -0x78,0x50,0x60,0xc0,0xc0,0xe0, -0x78,0x40,0x00,0x00,0x80,0xc1, -0x78,0x00,0x00,0x00,0x01,0x83, -0x7e,0x00,0x00,0x01,0x03,0x07, -0x7e,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x1f,0x0f,0x07,0x0f,0x1f, -0xfc,0xd8,0xf8,0xf0,0xf0,0xf8, -0x7c,0x58,0xf0,0xe0,0xe0,0xf0, -0x7c,0x50,0x60,0xc0,0xc0,0xe0, -0x7c,0x40,0x00,0x00,0x80,0xc1, -0x7c,0x00,0x00,0x00,0x01,0x83, -0x7e,0x00,0x00,0x01,0x03,0x07, -0x7e,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x3f,0x0f,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xe7,0xff,0xff,0xff,0xff,0xff, -0xef,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xb8,0xf8,0xff,0xff,0xff, -0xf0,0xb0,0xf0,0xff,0xff,0xff, -0xf0,0xb0,0xf0,0xff,0xff,0xff, -0xe0,0xa0,0xe0,0xff,0xff,0xff, -0xe0,0xa0,0xe0,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xb8,0xf8,0xf8,0xff,0xff, -0x70,0x30,0xf0,0xf0,0xff,0xff, -0x70,0x30,0x70,0xe0,0xff,0xff, -0x60,0x20,0x60,0x40,0xff,0xff, -0x60,0x00,0x40,0x00,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xb8,0xf8,0xf0,0xf0,0xff, -0x70,0x30,0xf0,0xe0,0xe0,0xff, -0x70,0x30,0x60,0xc0,0xc0,0xff, -0x60,0x20,0x40,0x00,0x80,0xff, -0x60,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x7e,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0xf8,0xb8,0xf8,0xf0,0xf0,0xf8, -0x70,0x30,0xf0,0xe0,0xe0,0xf0, -0x70,0x30,0x60,0xc0,0xc0,0xe0, -0x60,0x20,0x40,0x00,0x80,0xc1, -0x60,0x00,0x00,0x00,0x01,0x83, -0x00,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0xf8,0xb8,0xf8,0xf0,0xf0,0xf8, -0x70,0x30,0xf0,0xe0,0xe0,0xf0, -0x70,0x30,0x60,0xc0,0xc0,0xe0, -0x70,0x20,0x40,0x00,0x80,0xc1, -0x70,0x00,0x00,0x00,0x01,0x83, -0x70,0x00,0x00,0x01,0x03,0x07, -0x7e,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x01,0x03,0x07,0x0f,0x1f, -0xf8,0xb8,0xf8,0xf0,0xf0,0xf8, -0x78,0x30,0xf0,0xe0,0xe0,0xf0, -0x78,0x30,0x60,0xc0,0xc0,0xe0, -0x78,0x20,0x40,0x00,0x80,0xc1, -0x78,0x00,0x00,0x00,0x01,0x83, -0x78,0x00,0x00,0x01,0x03,0x07, -0x7e,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x41,0x03,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0xcf,0xff,0xff,0xff,0xff,0xff, -0xdf,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xe0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0x40,0xc0,0xff,0xff,0xff,0xff, -0x40,0xc0,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0x70,0xf0,0xff,0xff,0xff, -0xf0,0x70,0xf0,0xff,0xff,0xff, -0xe0,0x60,0xe0,0xff,0xff,0xff, -0xe0,0x60,0xe0,0xff,0xff,0xff, -0x40,0x40,0x40,0xff,0xff,0xff, -0x40,0x40,0x40,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0x70,0xf0,0xf0,0xff,0xff, -0x70,0x70,0xf0,0xf0,0xff,0xff, -0x60,0x60,0x60,0xe0,0xff,0xff, -0x60,0x60,0x60,0x40,0xff,0xff, -0x40,0x40,0x40,0x00,0xff,0xff, -0x40,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0x70,0xf0,0xf0,0xf0,0xff, -0x70,0x70,0xf0,0xe0,0xe0,0xff, -0x60,0x60,0x60,0xc0,0xc0,0xff, -0x60,0x60,0x40,0x00,0x80,0xff, -0x40,0x40,0x00,0x00,0x01,0xff, -0x40,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x7f,0x01,0x03,0x07,0x0f,0xff, -0xf0,0x70,0xf0,0xf0,0xf0,0xf8, -0x70,0x70,0xf0,0xe0,0xe0,0xf0, -0x60,0x60,0x60,0xc0,0xc0,0xe0, -0x60,0x60,0x40,0x00,0x80,0xc1, -0x40,0x40,0x00,0x00,0x01,0x83, -0x40,0x00,0x00,0x01,0x03,0x07, -0x00,0x00,0x01,0x03,0x07,0x0f, -0x03,0x01,0x03,0x07,0x0f,0x1f, -0xf0,0x70,0xf0,0xf0,0xf0,0xf8, -0x70,0x70,0xf0,0xe0,0xe0,0xf0, -0x60,0x60,0x60,0xc0,0xc0,0xe0, -0x60,0x60,0x40,0x00,0x80,0xc1, -0x60,0x40,0x00,0x00,0x01,0x83, -0x60,0x00,0x00,0x01,0x03,0x07, -0x60,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x01,0x03,0x07,0x0f,0x1f, -0xf0,0x70,0xf0,0xf0,0xf0,0xf8, -0x70,0x70,0xf0,0xe0,0xe0,0xf0, -0x70,0x60,0x60,0xc0,0xc0,0xe0, -0x70,0x60,0x40,0x00,0x80,0xc1, -0x70,0x40,0x00,0x00,0x01,0x83, -0x70,0x00,0x00,0x01,0x03,0x07, -0x70,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x81,0x03,0x07,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xff,0xff,0xff,0xff,0xff, -0x08,0x03,0xff,0xff,0xff,0xff, -0x01,0x03,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x02,0x03,0xff,0xff,0xff, -0x02,0x02,0x03,0xff,0xff,0xff, -0x07,0x07,0x06,0xff,0xff,0xff, -0x07,0x07,0x06,0xff,0xff,0xff, -0x0f,0x0f,0x0e,0xff,0xff,0xff, -0x0f,0x0f,0x0e,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x82,0xff,0xff, -0x02,0x02,0x03,0x02,0xff,0xff, -0x07,0x07,0x06,0x07,0xff,0xff, -0x07,0x07,0x06,0x07,0xff,0xff, -0x0f,0x0f,0x0e,0x0f,0xff,0xff, -0x0f,0x0f,0x0e,0x0f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x00,0x80,0xc0,0xff, -0x02,0x02,0x02,0x02,0x80,0xff, -0x06,0x06,0x06,0x06,0x03,0xff, -0x06,0x06,0x06,0x07,0x07,0xff, -0x0f,0x0f,0x0e,0x0f,0x0f,0xff, -0x0f,0x0f,0x0e,0x0f,0x0f,0xff, -0xfe,0xfe,0xc0,0xe0,0xf0,0xf8, -0x02,0x00,0x80,0xc0,0xe0,0xf0, -0x02,0x02,0x00,0x80,0xc0,0xe0, -0x02,0x02,0x02,0x00,0x80,0xc1, -0x06,0x06,0x06,0x02,0x03,0x83, -0x06,0x06,0x06,0x07,0x07,0x07, -0x0f,0x0f,0x0e,0x0f,0x0f,0x0f, -0x0f,0x0f,0x0e,0x0f,0x0f,0x1f, -0xfe,0xc0,0xc0,0xe0,0xf0,0xf8, -0x06,0x00,0x80,0xc0,0xe0,0xf0, -0x06,0x02,0x00,0x80,0xc0,0xe0, -0x06,0x02,0x02,0x00,0x80,0xc1, -0x06,0x06,0x06,0x02,0x03,0x83, -0x06,0x06,0x06,0x07,0x07,0x07, -0x0f,0x0f,0x0e,0x0f,0x0f,0x0f, -0x0f,0x0f,0x0e,0x0f,0x0f,0x1f, -0xfe,0xfe,0xc1,0xe0,0xf8,0xf8, -0x0e,0x06,0x81,0xc0,0xe0,0xf0, -0x0e,0x06,0x00,0x80,0xc0,0xe0, -0x0e,0x06,0x02,0x00,0x80,0xc1, -0x0e,0x06,0x06,0x02,0x03,0x83, -0x0e,0x06,0x06,0x07,0x07,0x07, -0x0f,0x0f,0x0e,0x0f,0x0f,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0x11,0x07,0xff,0xff,0xff,0xff, -0x03,0x07,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x07,0x07,0xff,0xff,0xff, -0x07,0x07,0x05,0xff,0xff,0xff, -0x0f,0x0f,0x0d,0xff,0xff,0xff, -0x0f,0x0f,0x0d,0xff,0xff,0xff, -0x1f,0x1f,0x1d,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x07,0xff,0xff, -0x07,0x07,0x05,0x07,0xff,0xff, -0x0f,0x0f,0x0d,0x0f,0xff,0xff, -0x0f,0x0f,0x0d,0x0f,0xff,0xff, -0x1f,0x1f,0x1d,0x1f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x06,0x06,0x00,0x02,0x80,0xff, -0x06,0x06,0x04,0x06,0x03,0xff, -0x0e,0x0e,0x0c,0x0f,0x07,0xff, -0x0f,0x0f,0x0d,0x0f,0x0f,0xff, -0x1f,0x1f,0x1d,0x1f,0x1f,0xff, -0xfe,0x80,0xc0,0xe0,0xf0,0xf8, -0x7e,0x7e,0x80,0xc0,0xe0,0xf0, -0x06,0x00,0x00,0x80,0xc0,0xe0, -0x06,0x06,0x00,0x00,0x80,0xc1, -0x06,0x06,0x04,0x02,0x03,0x83, -0x0e,0x0e,0x0c,0x07,0x07,0x07, -0x0f,0x0f,0x0d,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1d,0x1f,0x1f,0x1f, -0xfe,0x80,0xc0,0xe0,0xf0,0xf8, -0x7e,0x00,0x80,0xc0,0xe0,0xf0, -0x0e,0x00,0x00,0x80,0xc0,0xe0, -0x0e,0x06,0x00,0x00,0x80,0xc1, -0x0e,0x06,0x04,0x02,0x03,0x83, -0x0e,0x0e,0x0c,0x07,0x07,0x07, -0x0f,0x0f,0x0d,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1d,0x1f,0x1f,0x1f, -0xfe,0xfe,0xc2,0xf0,0xf8,0xf8, -0x7e,0x7e,0x82,0xc0,0xf0,0xf0, -0x1e,0x0e,0x00,0x80,0xc0,0xe0, -0x1e,0x0e,0x00,0x00,0x80,0xc1, -0x1e,0x0e,0x04,0x02,0x03,0x83, -0x1e,0x0e,0x0c,0x07,0x07,0x07, -0x1f,0x0f,0x0d,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfe,0xff,0xff,0xff,0xff, -0xf8,0xfe,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0x23,0x0f,0xff,0xff,0xff,0xff, -0x07,0x0f,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xfc,0xff,0xfa,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x1f,0x0b,0xff,0xff,0xff, -0x0f,0x0f,0x0b,0xff,0xff,0xff, -0x1f,0x1f,0x1b,0xff,0xff,0xff, -0x1f,0x1f,0x1b,0xff,0xff,0xff, -0xfe,0xfe,0xfb,0xfe,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x1b,0x0f,0xff,0xff, -0x0f,0x0f,0x0b,0x0f,0xff,0xff, -0x1f,0x1f,0x1b,0x1f,0xff,0xff, -0x1f,0x1f,0x1b,0x1f,0xff,0xff, -0xfe,0xfe,0xf8,0xf4,0xf8,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0e,0x0e,0x02,0x04,0x03,0xff, -0x0e,0x0e,0x0a,0x0f,0x07,0xff, -0x1f,0x1f,0x1b,0x1f,0x0f,0xff, -0x1f,0x1f,0x1b,0x1f,0x1f,0xff, -0xfe,0xfe,0xf8,0xf0,0xf8,0xf8, -0x7e,0x00,0x80,0xc0,0xe0,0xf0, -0x7e,0x7e,0x00,0x80,0xc0,0xe0, -0x0e,0x00,0x00,0x00,0x80,0xc1, -0x0e,0x0e,0x02,0x00,0x03,0x83, -0x0e,0x0e,0x0a,0x07,0x07,0x07, -0x1f,0x1f,0x1b,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1b,0x1f,0x1f,0x1f, -0xfe,0xfe,0xf8,0xf0,0xf8,0xf8, -0x7e,0x00,0x80,0xc0,0xe0,0xf0, -0x7e,0x00,0x00,0x80,0xc0,0xe0, -0x1e,0x00,0x00,0x00,0x80,0xc1, -0x1e,0x0e,0x02,0x00,0x03,0x83, -0x1e,0x0e,0x0a,0x07,0x07,0x07, -0x1f,0x1f,0x1b,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1b,0x1f,0x1f,0x1f, -0xfe,0xfe,0xfc,0xf0,0xf8,0xf8, -0x7e,0x7e,0x84,0xe0,0xf0,0xf0, -0x7e,0x7e,0x00,0x80,0xe0,0xe0, -0x3e,0x1e,0x00,0x00,0x80,0xc1, -0x3e,0x1e,0x02,0x00,0x03,0x83, -0x3e,0x1e,0x0a,0x07,0x07,0x07, -0x3f,0x1f,0x1b,0x0f,0x0f,0x0f, -0x3f,0x1f,0x1b,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xf8,0xfc,0xff,0xff,0xff,0xff, -0xf1,0xfc,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0x47,0x1f,0xff,0xff,0xff,0xff, -0x0f,0x1f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xff,0xff,0xff, -0xf8,0xfe,0xf4,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x3f,0x17,0xff,0xff,0xff, -0x1f,0x1f,0x17,0xff,0xff,0xff, -0x3f,0x3f,0x37,0xff,0xff,0xff, -0xfc,0xfc,0xf4,0xfc,0xff,0xff, -0xfc,0xfc,0xf6,0xfc,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x37,0x1f,0xff,0xff, -0x1f,0x1f,0x17,0x1f,0xff,0xff, -0x3f,0x3f,0x37,0x3f,0xff,0xff, -0xfc,0xfc,0xf4,0xfc,0xf8,0xff, -0xfc,0xfc,0xf0,0xe8,0xf0,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1e,0x1e,0x06,0x0b,0x07,0xff, -0x1f,0x1f,0x17,0x1f,0x0f,0xff, -0x3f,0x3f,0x37,0x3f,0x1f,0xff, -0xfc,0xfc,0xf4,0xf8,0xf8,0xf8, -0xfc,0xfc,0xf0,0xe0,0xf0,0xf0, -0x7c,0x00,0x00,0x80,0xc0,0xe0, -0x7e,0x7e,0x00,0x00,0x80,0xc1, -0x1e,0x00,0x00,0x00,0x01,0x83, -0x1e,0x1e,0x06,0x03,0x07,0x07, -0x1f,0x1f,0x17,0x0f,0x0f,0x0f, -0x3f,0x3f,0x37,0x1f,0x1f,0x1f, -0xfe,0xfc,0xf4,0xf8,0xf8,0xf8, -0xfe,0xfc,0xf0,0xe0,0xf0,0xf0, -0x7e,0x00,0x00,0x80,0xc0,0xe0, -0x7e,0x00,0x00,0x00,0x80,0xc1, -0x3e,0x00,0x00,0x00,0x01,0x83, -0x3e,0x1e,0x06,0x03,0x07,0x07, -0x3f,0x1f,0x17,0x0f,0x0f,0x0f, -0x3f,0x3f,0x37,0x1f,0x1f,0x1f, -0xfe,0xfe,0xf4,0xf8,0xf8,0xf8, -0xfe,0xfe,0xf0,0xe0,0xf0,0xf0, -0x7e,0x7e,0x00,0xc0,0xe0,0xe0, -0x7e,0x7e,0x00,0x00,0xc0,0xc1, -0x7e,0x3e,0x00,0x00,0x03,0x83, -0x7e,0x3e,0x06,0x03,0x07,0x07, -0x7f,0x3f,0x17,0x0f,0x0f,0x0f, -0x7f,0x3f,0x37,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf0,0xf8,0xff,0xff,0xff,0xff, -0xe2,0xf8,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0x3f,0xff,0xff,0xff,0xff, -0x1f,0x3f,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xec,0xff,0xff,0xff, -0xf8,0xf8,0xe8,0xff,0xff,0xff, -0xf0,0xfc,0xe8,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x7f,0x2f,0xff,0xff,0xff, -0x3f,0x3f,0x3f,0xff,0xff,0xff, -0xfc,0xfc,0xec,0xfc,0xff,0xff, -0xf8,0xf8,0xe8,0xf8,0xff,0xff, -0xf8,0xf8,0xec,0xf8,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x6f,0x3f,0xff,0xff, -0x3f,0x3f,0x2f,0x3f,0xff,0xff, -0xfc,0xfc,0xec,0xfc,0xf8,0xff, -0xf8,0xf8,0xe8,0xf8,0xf0,0xff, -0x78,0x78,0x60,0xd0,0xe0,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x0f,0x17,0x0f,0xff, -0x3f,0x3f,0x2f,0x3f,0x1f,0xff, -0xfc,0xfc,0xec,0xf8,0xf8,0xf8, -0xf8,0xf8,0xe8,0xf0,0xf0,0xf0, -0x78,0x78,0x60,0xc0,0xe0,0xe0, -0x78,0x00,0x00,0x00,0x80,0xc1, -0x7e,0x7e,0x00,0x00,0x01,0x83, -0x3e,0x00,0x00,0x01,0x03,0x07, -0x3f,0x3f,0x0f,0x07,0x0f,0x0f, -0x3f,0x3f,0x2f,0x1f,0x1f,0x1f, -0xfc,0xfc,0xec,0xf8,0xf8,0xf8, -0xfc,0xf8,0xe8,0xf0,0xf0,0xf0, -0x7c,0x78,0x60,0xc0,0xe0,0xe0, -0x7c,0x00,0x00,0x00,0x80,0xc1, -0x7e,0x00,0x00,0x00,0x01,0x83, -0x7e,0x00,0x00,0x01,0x03,0x07, -0x7f,0x3f,0x0f,0x07,0x0f,0x0f, -0x7f,0x3f,0x2f,0x1f,0x1f,0x1f, -0xfe,0xfc,0xec,0xf8,0xf8,0xf8, -0xfe,0xfc,0xe8,0xf0,0xf0,0xf0, -0x7e,0x7c,0x60,0xc0,0xe0,0xe0, -0x7e,0x7c,0x00,0x00,0xc0,0xc1, -0x7e,0x7e,0x00,0x00,0x03,0x83, -0x7e,0x7e,0x00,0x03,0x07,0x07, -0x7f,0x7f,0x0f,0x07,0x0f,0x0f, -0x7f,0x7f,0x2f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xf0,0xff,0xff,0xff,0xff, -0xc4,0xf0,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0x7f,0xff,0xff,0xff,0xff, -0x3f,0x7f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xd8,0xff,0xff,0xff, -0xf8,0xf8,0xd8,0xff,0xff,0xff, -0xf0,0xf0,0xd0,0xff,0xff,0xff, -0xe0,0xf8,0xd0,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0xff,0x5f,0xff,0xff,0xff, -0xf8,0xf8,0xd8,0xf8,0xff,0xff, -0xf8,0xf8,0xd8,0xf8,0xff,0xff, -0xf0,0xf0,0xd0,0xf0,0xff,0xff, -0xf0,0xf0,0xd8,0xf0,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0xdf,0x7f,0xff,0xff, -0xf8,0xf8,0xd8,0xf8,0xf8,0xff, -0xf8,0xf8,0xd8,0xf8,0xf0,0xff, -0x70,0x70,0x50,0xf0,0xe0,0xff, -0x70,0x70,0x40,0x20,0xc0,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x1f,0x2f,0x1f,0xff, -0xf8,0xf8,0xd8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xd8,0xf0,0xf0,0xf0, -0x70,0x70,0x50,0xe0,0xe0,0xe0, -0x70,0x70,0x40,0x00,0xc0,0xc1, -0x70,0x00,0x00,0x00,0x01,0x83, -0x7e,0x7e,0x00,0x01,0x03,0x07, -0x7e,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x7f,0x1f,0x0f,0x1f,0x1f, -0xf8,0xf8,0xd8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xd8,0xf0,0xf0,0xf0, -0x78,0x70,0x50,0xe0,0xe0,0xe0, -0x78,0x70,0x40,0x00,0xc0,0xc1, -0x78,0x00,0x00,0x00,0x01,0x83, -0x7e,0x00,0x00,0x01,0x03,0x07, -0x7e,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x7f,0x1f,0x0f,0x1f,0x1f, -0xfc,0xf8,0xd8,0xf8,0xf8,0xf8, -0xfc,0xf8,0xd8,0xf0,0xf0,0xf0, -0x7c,0x78,0x50,0xe0,0xe0,0xe0, -0x7c,0x78,0x40,0x00,0xc0,0xc1, -0x7c,0x78,0x00,0x00,0x01,0x83, -0x7e,0x7e,0x00,0x01,0x07,0x07, -0x7e,0x7e,0x21,0x07,0x0f,0x0f, -0x7f,0x7f,0x3f,0x0f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xe0,0xff,0xff,0xff,0xff, -0x88,0xe0,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xb8,0xff,0xff,0xff, -0xf0,0xf0,0xb0,0xff,0xff,0xff, -0xf0,0xf0,0xb0,0xff,0xff,0xff, -0xe0,0xe0,0xa0,0xff,0xff,0xff, -0xc0,0xe0,0xe0,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xb8,0xf8,0xff,0xff, -0xf0,0xf0,0xb0,0xf0,0xff,0xff, -0xf0,0xf0,0xb0,0xf0,0xff,0xff, -0xe0,0xe0,0xa0,0xe0,0xff,0xff, -0xe0,0xe0,0xe0,0xe0,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xb8,0xf8,0xf8,0xff, -0xf0,0xf0,0xb0,0xf0,0xf0,0xff, -0x70,0x70,0x30,0xf0,0xe0,0xff, -0x60,0x60,0x20,0x60,0xc0,0xff, -0x60,0x60,0x00,0x40,0x01,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xb8,0xf8,0xf8,0xf8, -0xf0,0xf0,0xb0,0xf0,0xf0,0xf0, -0x70,0x70,0x30,0xe0,0xe0,0xe0, -0x60,0x60,0x20,0x40,0xc0,0xc1, -0x60,0x60,0x00,0x00,0x01,0x83, -0x60,0x00,0x00,0x01,0x03,0x07, -0x7e,0x7e,0x01,0x03,0x07,0x0f, -0x7f,0x01,0x03,0x07,0x0f,0x1f, -0xf8,0xf8,0xb8,0xf8,0xf8,0xf8, -0xf0,0xf0,0xb0,0xf0,0xf0,0xf0, -0x70,0x70,0x30,0xe0,0xe0,0xe0, -0x70,0x60,0x20,0x40,0xc0,0xc1, -0x70,0x60,0x00,0x00,0x01,0x83, -0x70,0x00,0x00,0x01,0x03,0x07, -0x7e,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x01,0x03,0x07,0x0f,0x1f, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf0,0xb0,0xf0,0xf0,0xf0, -0x78,0x70,0x30,0xe0,0xe0,0xe0, -0x78,0x70,0x20,0x40,0xc0,0xc1, -0x78,0x70,0x00,0x00,0x01,0x83, -0x78,0x70,0x00,0x01,0x03,0x07, -0x7e,0x7e,0x41,0x03,0x0f,0x0f, -0x7f,0x7f,0x43,0x0f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xe0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x80,0xc0,0xff,0xff,0xff,0xff, -0x10,0xc0,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0x70,0xff,0xff,0xff, -0xf0,0xf0,0x70,0xff,0xff,0xff, -0xe0,0xe0,0x60,0xff,0xff,0xff, -0xe0,0xe0,0x60,0xff,0xff,0xff, -0x40,0x40,0xc0,0xff,0xff,0xff, -0x00,0x40,0xc0,0xff,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0x70,0xf0,0xff,0xff, -0xf0,0xf0,0x70,0xf0,0xff,0xff, -0xe0,0xe0,0x60,0xe0,0xff,0xff, -0xe0,0xe0,0x60,0xe0,0xff,0xff, -0x40,0x40,0xc0,0x40,0xff,0xff, -0x40,0x40,0x40,0x41,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0x70,0xf0,0xf0,0xff, -0xf0,0xf0,0x70,0xf0,0xf0,0xff, -0x60,0x60,0x60,0xe0,0xe0,0xff, -0x60,0x60,0x60,0x60,0xc0,0xff, -0x40,0x40,0x40,0x40,0x01,0xff, -0x40,0x40,0x00,0x01,0x03,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0x70,0xf0,0xf0,0xf8, -0xf0,0xf0,0x70,0xf0,0xf0,0xf0, -0x60,0x60,0x60,0xe0,0xe0,0xe0, -0x60,0x60,0x60,0x40,0xc0,0xc1, -0x40,0x40,0x40,0x00,0x01,0x83, -0x40,0x40,0x00,0x01,0x03,0x07, -0x40,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x7f,0x03,0x07,0x0f,0x1f, -0xf0,0xf0,0x70,0xf0,0xf0,0xf8, -0xf0,0xf0,0x70,0xf0,0xf0,0xf0, -0x60,0x60,0x60,0xe0,0xe0,0xe0, -0x60,0x60,0x60,0x40,0xc0,0xc1, -0x60,0x40,0x40,0x00,0x01,0x83, -0x60,0x40,0x00,0x01,0x03,0x07, -0x60,0x00,0x01,0x03,0x07,0x0f, -0x7f,0x03,0x03,0x07,0x0f,0x1f, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0x70,0xf0,0xf0,0xf0, -0x70,0x60,0x60,0xe0,0xe0,0xe0, -0x70,0x60,0x60,0x40,0xc0,0xc1, -0x70,0x60,0x40,0x00,0x01,0x83, -0x70,0x60,0x00,0x01,0x03,0x07, -0x70,0x60,0x81,0x03,0x07,0x0f, -0x7f,0x7f,0x83,0x07,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0x80,0xff,0xff,0xff,0xff, -0x08,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0xfc,0x80,0xff,0xfe,0xff,0xff, -0x00,0x00,0x83,0xfe,0xff,0xff, -0x00,0x00,0x03,0xfe,0xff,0xff, -0x02,0x02,0x03,0xfe,0xff,0xff, -0x07,0x07,0x07,0xfe,0xff,0xff, -0x07,0x07,0x07,0xfe,0xff,0xff, -0x0f,0x0f,0x0f,0xfe,0xff,0xff, -0x0f,0x0f,0x0f,0xfe,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x02,0x82,0xff,0xff, -0x02,0x02,0x02,0x02,0xff,0xff, -0x07,0x07,0x07,0x06,0xff,0xff, -0x07,0x07,0x07,0x06,0xff,0xff, -0x0f,0x0f,0x0f,0x0e,0xff,0xff, -0x0f,0x0f,0x0f,0x0e,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x82,0xc2,0xff, -0x02,0x02,0x02,0x02,0x82,0xff, -0x07,0x07,0x07,0x06,0x07,0xff, -0x07,0x07,0x07,0x06,0x07,0xff, -0x0f,0x0f,0x0f,0x0e,0x0f,0xff, -0x0f,0x0f,0x0f,0x0e,0x0f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x80,0xc0,0xe0, -0x02,0x02,0x02,0x02,0x82,0xc1, -0x06,0x06,0x06,0x06,0x07,0x83, -0x07,0x07,0x07,0x06,0x07,0x07, -0x0f,0x0f,0x0f,0x0e,0x0f,0x0f, -0x0f,0x0f,0x0f,0x0e,0x0f,0x1f, -0xfe,0xfe,0xfe,0xe0,0xfc,0xf8, -0x06,0x02,0x80,0xc0,0xe0,0xf0, -0x06,0x02,0x02,0x80,0xc0,0xe0, -0x06,0x02,0x02,0x02,0x82,0xc1, -0x06,0x06,0x06,0x06,0x07,0x83, -0x07,0x07,0x07,0x06,0x07,0x07, -0x0f,0x0f,0x0f,0x0e,0x0f,0x0f, -0x0f,0x0f,0x0f,0x0e,0x0f,0x1f, -0xfe,0xfe,0xe0,0xe1,0xfc,0xf8, -0x0e,0x06,0x80,0xc1,0xe0,0xf0, -0x0e,0x06,0x02,0x81,0xc0,0xe0, -0x0e,0x06,0x02,0x02,0x82,0xc1, -0x0e,0x06,0x06,0x06,0x07,0x83, -0x0f,0x07,0x07,0x06,0x07,0x07, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xf8,0x00,0xff,0xff,0xff,0xff, -0x11,0x01,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xfd,0xff,0xff, -0xf8,0x00,0xff,0xfd,0xff,0xff, -0x01,0x01,0x07,0xfd,0xff,0xff, -0x03,0x03,0x07,0xfd,0xff,0xff, -0x07,0x07,0x07,0xfd,0xff,0xff, -0x0f,0x0f,0x0f,0xfd,0xff,0xff, -0x0f,0x0f,0x0f,0xfd,0xff,0xff, -0x1f,0x1f,0x1f,0xfd,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x03,0x07,0x07,0xff,0xff, -0x07,0x07,0x07,0x05,0xff,0xff, -0x0f,0x0f,0x0f,0x0d,0xff,0xff, -0x0f,0x0f,0x0f,0x0d,0xff,0xff, -0x1f,0x1f,0x1f,0x1d,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x05,0x87,0xff, -0x07,0x07,0x07,0x05,0x07,0xff, -0x0f,0x0f,0x0f,0x0d,0x0f,0xff, -0x0f,0x0f,0x0f,0x0d,0x0f,0xff, -0x1f,0x1f,0x1f,0x1d,0x1f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x06,0x06,0x06,0x00,0x82,0xc1, -0x06,0x06,0x06,0x04,0x07,0x83, -0x0f,0x0f,0x0f,0x0d,0x0f,0x07, -0x0f,0x0f,0x0f,0x0d,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1d,0x1f,0x1f, -0xfe,0xfe,0xc0,0xf8,0xfc,0xf8, -0x7e,0x7e,0xfe,0xc0,0xf8,0xf0, -0x0e,0x06,0x00,0x80,0xc0,0xe0, -0x0e,0x06,0x06,0x00,0x82,0xc1, -0x0e,0x06,0x06,0x04,0x07,0x83, -0x0f,0x0f,0x0f,0x0d,0x0f,0x07, -0x0f,0x0f,0x0f,0x0d,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1d,0x1f,0x1f, -0xfe,0xfe,0xc0,0xfa,0xfc,0xf8, -0x7e,0x7e,0xc0,0xc2,0xf8,0xf0, -0x1e,0x0e,0x00,0x82,0xc0,0xe0, -0x1e,0x0e,0x06,0x00,0x82,0xc1, -0x1e,0x0e,0x06,0x04,0x07,0x83, -0x1f,0x0f,0x0f,0x0d,0x0f,0x07, -0x1f,0x0f,0x0f,0x0d,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf1,0x00,0xff,0xff,0xff,0xff, -0x23,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfe,0xfb,0xff,0xff, -0xf8,0xf8,0xfe,0xfb,0xff,0xff, -0xf1,0x00,0xff,0xfb,0xff,0xff, -0x03,0x03,0x0f,0xfb,0xff,0xff, -0x07,0x07,0x0f,0xfb,0xff,0xff, -0x0f,0x0f,0x0f,0xfb,0xff,0xff, -0x1f,0x1f,0x1f,0xfb,0xff,0xff, -0x1f,0x1f,0x1f,0xfb,0xff,0xff, -0xfc,0xfc,0xff,0xfa,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x1f,0x0b,0xff,0xff, -0x0f,0x0f,0x0f,0x0b,0xff,0xff, -0x1f,0x1f,0x1f,0x1b,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0xfe,0xfe,0xfe,0xfb,0xfe,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x1b,0x0f,0xff, -0x0f,0x0f,0x0f,0x0b,0x0f,0xff, -0x1f,0x1f,0x1f,0x1b,0x1f,0xff, -0x1f,0x1f,0x1f,0x1b,0x1f,0xff, -0xfe,0xfe,0xfe,0xf8,0xfc,0xf8, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0e,0x0e,0x0e,0x02,0x07,0x83, -0x0f,0x0f,0x0f,0x0b,0x0f,0x07, -0x1f,0x1f,0x1f,0x1b,0x1f,0x0f, -0x1f,0x1f,0x1f,0x1b,0x1f,0x1f, -0xfe,0xfe,0xfe,0xf8,0xfc,0xf8, -0x7e,0x7e,0x80,0xf0,0xf8,0xf0, -0x7e,0x7e,0x7e,0x80,0xf0,0xe0, -0x1e,0x0e,0x00,0x00,0x82,0xc1, -0x1e,0x0e,0x0e,0x02,0x07,0x83, -0x1f,0x0f,0x0f,0x0b,0x0f,0x07, -0x1f,0x1f,0x1f,0x1b,0x1f,0x0f, -0x1f,0x1f,0x1f,0x1b,0x1f,0x1f, -0xfe,0xfe,0xfe,0xfc,0xfc,0xf8, -0x7e,0x7e,0x80,0xf4,0xf8,0xf0, -0x7e,0x7e,0x00,0x80,0xf0,0xe0, -0x3e,0x1e,0x00,0x00,0x82,0xc1, -0x3e,0x1e,0x0e,0x02,0x07,0x83, -0x3f,0x1f,0x0f,0x0b,0x0f,0x07, -0x3f,0x1f,0x1f,0x1b,0x1f,0x0f, -0x3f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf1,0xf0,0xff,0xff,0xff,0xff, -0xe3,0x00,0xff,0xff,0xff,0xff, -0x47,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xff,0xff,0xff, -0xf8,0xf8,0xfc,0xf7,0xff,0xff, -0xf0,0xf0,0xfc,0xf7,0xff,0xff, -0xe3,0x00,0xff,0xf7,0xff,0xff, -0x07,0x07,0x1f,0xff,0xff,0xff, -0x0f,0x0f,0x1f,0xf7,0xff,0xff, -0x1f,0x1f,0x1f,0xf7,0xff,0xff, -0x3f,0x3f,0x3f,0xf7,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xff,0xff, -0xf8,0xf8,0xfe,0xfc,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x3f,0x17,0xff,0xff, -0x1f,0x1f,0x1f,0x17,0xff,0xff, -0x3f,0x3f,0x3f,0x3f,0xff,0xff, -0xfc,0xfc,0xfc,0xf4,0xfc,0xff, -0xfc,0xfc,0xfc,0xf6,0xfc,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x37,0x1f,0xff, -0x1f,0x1f,0x1f,0x17,0x1f,0xff, -0x3f,0x3f,0x3f,0x37,0x3f,0xff, -0xfc,0xfc,0xfc,0xf4,0xfc,0xf8, -0xfc,0xfc,0xfc,0xf0,0xf8,0xf0, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x07,0x0f,0x07, -0x1f,0x1f,0x1f,0x17,0x1f,0x0f, -0x3f,0x3f,0x3f,0x37,0x3f,0x1f, -0xfe,0xfc,0xfc,0xf4,0xfc,0xf8, -0xfe,0xfc,0xfc,0xf0,0xf8,0xf0, -0x7e,0x7c,0x00,0xe0,0xf0,0xe0, -0x7e,0x7e,0x7e,0x00,0xe2,0xc1, -0x3e,0x1e,0x00,0x02,0x07,0x83, -0x3f,0x1f,0x1f,0x07,0x0f,0x07, -0x3f,0x1f,0x1f,0x17,0x1f,0x0f, -0x3f,0x3f,0x3f,0x37,0x3f,0x1f, -0xfe,0xfe,0xfc,0xf4,0xfc,0xf8, -0xfe,0xfe,0xfc,0xf0,0xf8,0xf0, -0x7e,0x7e,0x00,0xe0,0xf0,0xe0, -0x7e,0x7e,0x00,0x00,0xe2,0xc1, -0x7e,0x3e,0x00,0x02,0x07,0x83, -0x7f,0x3f,0x1f,0x07,0x0f,0x07, -0x7f,0x3f,0x1f,0x17,0x1f,0x0f, -0x7f,0x3f,0x3f,0x3f,0x3f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe2,0xe0,0xff,0xff,0xff,0xff, -0xc7,0x00,0xff,0xff,0xff,0xff, -0x8f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xef,0xff,0xff, -0xf8,0xf8,0xf8,0xef,0xff,0xff, -0xf0,0xf0,0xf8,0xef,0xff,0xff, -0xe0,0xe0,0xf8,0xff,0xff,0xff, -0xc7,0x00,0xff,0xef,0xff,0xff, -0x0f,0x0f,0x3f,0xef,0xff,0xff, -0x1f,0x1f,0x3f,0xef,0xff,0xff, -0x3f,0x3f,0x3f,0xff,0xff,0xff, -0xfc,0xfc,0xfc,0xfc,0xff,0xff, -0xf8,0xf8,0xf8,0xe8,0xff,0xff, -0xf0,0xf0,0xfc,0xe8,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x7f,0x3f,0xff,0xff, -0x3f,0x3f,0x3f,0x3f,0xff,0xff, -0xfc,0xfc,0xfc,0xec,0xfc,0xff, -0xf8,0xf8,0xf8,0xe8,0xf8,0xff, -0xf8,0xf8,0xf8,0xec,0xf8,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x6f,0x3f,0xff, -0x3f,0x3f,0x3f,0x2f,0x3f,0xff, -0xfc,0xfc,0xfc,0xec,0xfc,0xf8, -0xf8,0xf8,0xf8,0xe8,0xf8,0xf0, -0xf8,0xf8,0xf8,0xe0,0xf0,0xe0, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x0f,0x1f,0x0f, -0x3f,0x3f,0x3f,0x2f,0x3f,0x1f, -0xfc,0xfc,0xfc,0xec,0xfc,0xf8, -0xfc,0xf8,0xf8,0xe8,0xf8,0xf0, -0xfc,0xf8,0xf8,0xe0,0xf0,0xe0, -0x7c,0x78,0x00,0x40,0xe0,0xc1, -0x7e,0x7e,0x7e,0x00,0x47,0x83, -0x7e,0x3e,0x00,0x07,0x0f,0x07, -0x7f,0x3f,0x3f,0x0f,0x1f,0x0f, -0x7f,0x3f,0x3f,0x2f,0x3f,0x1f, -0xfe,0xfc,0xfc,0xfc,0xfc,0xf8, -0xfe,0xfc,0xf8,0xe8,0xf8,0xf0, -0xfe,0xfc,0xf8,0xe0,0xf0,0xe0, -0x7e,0x7c,0x00,0x40,0xe0,0xc1, -0x7e,0x7e,0x00,0x00,0x47,0x83, -0x7e,0x7e,0x00,0x07,0x0f,0x07, -0x7f,0x7f,0x3f,0x0f,0x1f,0x0f, -0x7f,0x7f,0x3f,0x2f,0x3f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc4,0xc0,0xff,0xff,0xff,0xff, -0x8f,0x00,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xdf,0xff,0xff, -0xf8,0xf8,0xf8,0xdf,0xff,0xff, -0xf0,0xf0,0xf0,0xdf,0xff,0xff, -0xe0,0xe0,0xf0,0xdf,0xff,0xff, -0xc0,0xc0,0xf0,0xdf,0xff,0xff, -0x8f,0x00,0xff,0xdf,0xff,0xff, -0x1f,0x1f,0x7f,0xdf,0xff,0xff, -0x3f,0x3f,0x7f,0xdf,0xff,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf8,0xf8,0xf8,0xd8,0xff,0xff, -0xf0,0xf0,0xf0,0xd0,0xff,0xff, -0xe0,0xe0,0xf8,0xd0,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0xff,0x5f,0xff,0xff, -0xf8,0xf8,0xf8,0xd8,0xf8,0xff, -0xf8,0xf8,0xf8,0xd8,0xf8,0xff, -0xf0,0xf0,0xf0,0xd0,0xf0,0xff, -0xf0,0xf0,0xf0,0xd8,0xf0,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0xdf,0x7f,0xff, -0xf8,0xf8,0xf8,0xd8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xd8,0xf8,0xf0, -0xf0,0xf0,0xf0,0xd0,0xf0,0xe0, -0x70,0x70,0x70,0x40,0xe0,0xc1, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x1f,0x3f,0x1f, -0xf8,0xf8,0xf8,0xd8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xd8,0xf8,0xf0, -0xf8,0xf0,0xf0,0xd0,0xf0,0xe0, -0x78,0x70,0x70,0x40,0xe0,0xc1, -0x78,0x70,0x00,0x00,0x41,0x83, -0x7e,0x7e,0x7e,0x01,0x0f,0x07, -0x7e,0x7e,0x01,0x0f,0x1f,0x0f, -0x7f,0x7f,0x7f,0x1f,0x3f,0x1f, -0xfc,0xf8,0xf8,0xf8,0xf8,0xf8, -0xfc,0xf8,0xf8,0xd8,0xf8,0xf0, -0xfc,0xf8,0xf0,0xd0,0xf0,0xe0, -0x7c,0x78,0x70,0x40,0xe0,0xc1, -0x7c,0x78,0x00,0x00,0x41,0x83, -0x7e,0x7e,0x00,0x01,0x0f,0x07, -0x7e,0x7e,0x01,0x2f,0x1f,0x0f, -0x7f,0x7f,0x7f,0x3f,0x3f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x88,0x80,0xff,0xff,0xff,0xff, -0x1f,0x00,0xff,0xff,0xff,0xff, -0x3f,0x3f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xbf,0xff,0xff, -0xf0,0xf0,0xf0,0xbf,0xff,0xff, -0xf0,0xf0,0xf0,0xbf,0xff,0xff, -0xe0,0xe0,0xe0,0xbf,0xff,0xff, -0xc0,0xc0,0xe0,0xbf,0xff,0xff, -0x80,0x80,0xe0,0xbf,0xff,0xff, -0x1f,0x00,0xff,0xbf,0xff,0xff, -0x3f,0x3f,0xff,0xbf,0xff,0xff, -0xf8,0xf8,0xf8,0xb8,0xff,0xff, -0xf0,0xf0,0xf0,0xb0,0xff,0xff, -0xf0,0xf0,0xf0,0xb0,0xff,0xff, -0xe0,0xe0,0xe0,0xa0,0xff,0xff, -0xc0,0xc0,0xe0,0xe0,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xb8,0xf8,0xff, -0xf0,0xf0,0xf0,0xb0,0xf0,0xff, -0xf0,0xf0,0xf0,0xb0,0xf0,0xff, -0xe0,0xe0,0xe0,0xa0,0xe0,0xff, -0xe0,0xe0,0xe0,0xa0,0xe1,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xb8,0xf8,0xf8, -0xf0,0xf0,0xf0,0xb0,0xf0,0xf0, -0xf0,0xf0,0xf0,0xb0,0xf0,0xe0, -0x60,0x60,0x60,0x20,0xe0,0xc1, -0x60,0x60,0x60,0x00,0x41,0x83, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xb8,0xf8,0xf8, -0xf0,0xf0,0xf0,0xb0,0xf0,0xf0, -0xf0,0xf0,0xf0,0xb0,0xf0,0xe0, -0x70,0x60,0x60,0x20,0xe0,0xc1, -0x70,0x60,0x60,0x00,0x41,0x83, -0x70,0x60,0x00,0x01,0x03,0x07, -0x7e,0x7e,0x7f,0x03,0x1f,0x0f, -0x7f,0x7f,0x03,0x1f,0x3f,0x1f, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf0,0xf0,0xb0,0xf0,0xf0, -0xf8,0xf0,0xf0,0xb0,0xf0,0xe0, -0x78,0x70,0x60,0x20,0xe0,0xc1, -0x78,0x70,0x60,0x00,0x41,0x83, -0x78,0x70,0x00,0x41,0x03,0x07, -0x7e,0x7e,0x03,0x43,0x1f,0x0f, -0x7f,0x7f,0x03,0x5f,0x3f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xe0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x10,0x00,0xff,0xff,0xff,0xff, -0x3f,0x01,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf0,0x7f,0xff,0xff, -0xf0,0xf0,0xf0,0x7f,0xff,0xff, -0xe0,0xe0,0xe0,0x7f,0xff,0xff, -0xe0,0xe0,0xe0,0x7f,0xff,0xff, -0x40,0x40,0xc0,0x7f,0xff,0xff, -0x00,0x00,0xc0,0x7f,0xff,0xff, -0x00,0x00,0xc1,0x7f,0xff,0xff, -0x3f,0x01,0xff,0x7f,0xff,0xff, -0xf0,0xf0,0xf0,0x70,0xff,0xff, -0xf0,0xf0,0xf0,0x70,0xff,0xff, -0xe0,0xe0,0xe0,0x60,0xff,0xff, -0xe0,0xe0,0xe0,0x60,0xff,0xff, -0x40,0x40,0x40,0x40,0xff,0xff, -0x00,0x00,0x40,0x41,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0x70,0xf0,0xff, -0xf0,0xf0,0xf0,0x70,0xf0,0xff, -0xe0,0xe0,0xe0,0x60,0xe0,0xff, -0xe0,0xe0,0xe0,0x60,0xe0,0xff, -0x40,0x40,0x40,0x40,0x41,0xff, -0x40,0x40,0x40,0x41,0x43,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0x70,0xf0,0xf8, -0xf0,0xf0,0xf0,0x70,0xf0,0xf0, -0xe0,0xe0,0xe0,0x60,0xe0,0xe0, -0x60,0x60,0x60,0x60,0xe0,0xc1, -0x40,0x40,0x40,0x40,0x41,0x83, -0x40,0x40,0x40,0x01,0x03,0x07, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0x70,0xf0,0xf8, -0xf0,0xf0,0xf0,0x70,0xf0,0xf0, -0xe0,0xe0,0xe0,0x60,0xe0,0xe0, -0x60,0x60,0x60,0x60,0xe0,0xc1, -0x60,0x40,0x40,0x40,0x41,0x83, -0x60,0x40,0x40,0x01,0x03,0x07, -0x60,0x40,0x01,0x03,0x07,0x0f, -0x7f,0x7f,0x7f,0x07,0x3f,0x1f, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf0,0xe0,0xe0,0x60,0xe0,0xe0, -0x70,0x60,0x60,0x60,0xe0,0xc1, -0x70,0x60,0x40,0x40,0x41,0x83, -0x70,0x60,0x40,0x81,0x03,0x07, -0x70,0x60,0x01,0x83,0x07,0x0f, -0x7f,0x7f,0x07,0x87,0x3f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0x80,0xff,0xff,0xff,0xff, -0x08,0x00,0xff,0xff,0xff,0xff, -0x01,0x00,0xff,0xff,0xff,0xff, -0x03,0x01,0xff,0xff,0xff,0xff, -0x07,0x03,0xff,0xff,0xff,0xff, -0x0f,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xfe,0xff, -0x00,0x00,0x80,0xff,0xfe,0xff, -0x00,0x00,0x01,0xff,0xfe,0xff, -0x00,0x00,0x03,0xff,0xfe,0xff, -0x03,0x03,0x07,0xff,0xfe,0xff, -0x07,0x07,0x07,0xff,0xfe,0xff, -0x0f,0x0f,0x0f,0xff,0xfe,0xff, -0x0f,0x0f,0x0f,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xff, -0x00,0x00,0x80,0xc3,0xff,0xff, -0x00,0x00,0x00,0x83,0xfe,0xff, -0x00,0x00,0x02,0x03,0xfe,0xff, -0x03,0x03,0x07,0x07,0xfe,0xff, -0x07,0x07,0x07,0x07,0xfe,0xff, -0x0f,0x0f,0x0f,0x0f,0xfe,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x82,0xc2,0xff, -0x00,0x02,0x02,0x02,0x82,0xff, -0x03,0x07,0x07,0x07,0x06,0xff, -0x07,0x07,0x07,0x07,0x06,0xff, -0x0f,0x0f,0x0f,0x0f,0x0e,0xff, -0x0f,0x0f,0x0f,0x0f,0x0f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x82,0xc2,0xe3, -0x02,0x02,0x02,0x02,0x82,0xc3, -0x07,0x07,0x07,0x07,0x06,0x87, -0x07,0x07,0x07,0x07,0x06,0x07, -0x0f,0x0f,0x0f,0x0f,0x0e,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0e,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x82,0xc2,0xe1, -0x02,0x02,0x02,0x02,0x82,0xc3, -0x07,0x07,0x07,0x07,0x06,0x87, -0x07,0x07,0x07,0x07,0x06,0x07, -0x0f,0x0f,0x0f,0x0f,0x0e,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0xfe,0xfe,0xfe,0xfe,0xff,0xf8, -0x0e,0x06,0x82,0xc2,0xe1,0xf2, -0x0e,0x06,0x02,0x82,0xc3,0xe1, -0x0e,0x06,0x02,0x02,0x83,0xc3, -0x0f,0x07,0x07,0x07,0x06,0x87, -0x0f,0x07,0x07,0x07,0x07,0x07, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0xf8,0x00,0xff,0xff,0xff,0xff, -0x11,0x00,0xff,0xff,0xff,0xff, -0x03,0x01,0xff,0xff,0xff,0xff, -0x07,0x03,0xff,0xff,0xff,0xff, -0x0f,0x07,0xff,0xff,0xff,0xff, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x1f,0x1f,0xff,0xff,0xff,0xff, -0x80,0x80,0xfc,0xff,0xfd,0xff, -0x00,0x00,0x80,0xff,0xfd,0xff, -0x00,0x00,0x01,0xff,0xfd,0xff, -0x01,0x01,0x03,0xff,0xfd,0xff, -0x03,0x03,0x07,0xff,0xff,0xff, -0x07,0x07,0x0f,0xff,0xff,0xff, -0x0f,0x0f,0x0f,0xff,0xff,0xff, -0x1f,0x1f,0x1f,0xff,0xff,0xff, -0x80,0x80,0xfc,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xfd,0xff, -0x00,0x00,0x01,0x87,0xfd,0xff, -0x01,0x01,0x03,0x07,0xfd,0xff, -0x03,0x03,0x07,0x07,0xfd,0xff, -0x07,0x07,0x0f,0x0f,0xfd,0xff, -0x0f,0x0f,0x0f,0x0f,0xfd,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x03,0x03,0x07,0x85,0xff, -0x03,0x07,0x07,0x07,0x05,0xff, -0x07,0x0f,0x0f,0x0f,0x0d,0xff, -0x0f,0x0f,0x0f,0x0f,0x0d,0xff, -0x1f,0x1f,0x1f,0x1f,0x1f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x07,0x85,0xc7, -0x07,0x07,0x07,0x07,0x05,0x87, -0x0f,0x0f,0x0f,0x0f,0x0d,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0d,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1d,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x06,0x06,0x06,0x06,0x87,0xc3, -0x07,0x07,0x07,0x07,0x07,0x87, -0x0f,0x0f,0x0f,0x0f,0x0d,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfe,0xfe,0xfe,0xfe,0xfa,0xfa, -0x7e,0x7e,0xfe,0xfe,0xfe,0xf8, -0x1e,0x0e,0x06,0x86,0xc2,0xe7, -0x1e,0x0e,0x06,0x06,0x87,0xc3, -0x1f,0x0f,0x07,0x07,0x05,0x87, -0x1f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x1f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0xf1,0x00,0xff,0xff,0xff,0xff, -0x23,0x01,0xff,0xff,0xff,0xff, -0x07,0x03,0xff,0xff,0xff,0xff, -0x0f,0x07,0xff,0xff,0xff,0xff, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xfc,0xff,0xfb,0xff, -0x00,0x00,0xf8,0xff,0xfb,0xff, -0x00,0x00,0x00,0xff,0xfb,0xff, -0x00,0x00,0x03,0xff,0xfb,0xff, -0x03,0x03,0x07,0xff,0xff,0xff, -0x07,0x07,0x0f,0xff,0xff,0xff, -0x0f,0x0f,0x1f,0xff,0xff,0xff, -0x1f,0x1f,0x1f,0xff,0xff,0xff, -0xf8,0xf8,0xfc,0xfe,0xfb,0xff, -0x00,0x00,0xf8,0xfe,0xfb,0xff, -0x00,0x00,0x00,0xff,0xfb,0xff, -0x00,0x00,0x03,0x0f,0xfb,0xff, -0x03,0x03,0x07,0x0f,0xfb,0xff, -0x07,0x07,0x0f,0x0f,0xfb,0xff, -0x0f,0x0f,0x1f,0x1f,0xff,0xff, -0x1f,0x1f,0x1f,0x1f,0xff,0xff, -0xf8,0xfc,0xfc,0xff,0xfa,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x07,0x07,0x1f,0x0b,0xff, -0x07,0x0f,0x0f,0x0f,0x0b,0xff, -0x0f,0x1f,0x1f,0x1f,0x1f,0xff, -0x1f,0x1f,0x1f,0x1f,0x1f,0xff, -0xfe,0xfe,0xfe,0xfe,0xfb,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x0f,0x1b,0x8f, -0x0f,0x0f,0x0f,0x0f,0x0b,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1b,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfe,0xfe,0xfe,0xfe,0xf8,0xfc, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x0f,0x0b,0x87, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1b,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfc, -0x7e,0x7e,0xfe,0xfe,0xf4,0xfe, -0x7e,0x7e,0x7e,0xfe,0xfe,0xf1, -0x3e,0x1e,0x0e,0x0e,0x85,0xcf, -0x3f,0x1f,0x0f,0x0f,0x0b,0x87, -0x3f,0x1f,0x0f,0x0f,0x0b,0x0f, -0x3f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x3f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0xf1,0xe0,0xff,0xff,0xff,0xff, -0xe3,0x00,0xff,0xff,0xff,0xff, -0x47,0x03,0xff,0xff,0xff,0xff, -0x0f,0x07,0xff,0xff,0xff,0xff, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xfc,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xf7,0xff, -0x00,0x00,0xf0,0xff,0xf7,0xff, -0x00,0x00,0x00,0xff,0xf7,0xff, -0x00,0x00,0x07,0xff,0xff,0xff, -0x07,0x07,0x0f,0xff,0xff,0xff, -0x0f,0x0f,0x1f,0xff,0xff,0xff, -0x1f,0x1f,0x3f,0xff,0xff,0xff, -0xf8,0xf8,0xfc,0xfc,0xff,0xff, -0xf0,0xf0,0xf8,0xfc,0xff,0xff, -0x00,0x00,0xf0,0xfc,0xf7,0xff, -0x00,0x00,0x00,0xff,0xf7,0xff, -0x00,0x00,0x07,0x1f,0xff,0xff, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0x0f,0x0f,0x1f,0x1f,0xff,0xff, -0x1f,0x1f,0x3f,0x3f,0xff,0xff, -0xf8,0xfc,0xfc,0xfc,0xfc,0xff, -0xf0,0xf8,0xf8,0xfe,0xfc,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x0f,0x0f,0x3f,0x1f,0xff, -0x0f,0x1f,0x1f,0x1f,0x1f,0xff, -0x1f,0x3f,0x3f,0x3f,0x3f,0xff, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfc,0xfc,0xfc,0xfc,0xfe,0xfc, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x1f,0x37,0x1f, -0x1f,0x1f,0x1f,0x1f,0x17,0x1f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfc,0xfc,0xfc,0xfc,0xf4,0xf8, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x1f,0x17,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x3f,0x3f,0x3f,0x3f,0x37,0x3f, -0xfe,0xfe,0xfc,0xfc,0xfc,0xfc, -0xfe,0xfe,0xfc,0xfc,0xf4,0xf8, -0x7e,0x7e,0x7c,0xfc,0xe0,0xfc, -0x7e,0x7e,0x7e,0x7e,0xf6,0xe3, -0x7e,0x3e,0x1e,0x1e,0x03,0x9f, -0x7f,0x3f,0x1f,0x1f,0x17,0x0f, -0x7f,0x3f,0x1f,0x1f,0x17,0x1f, -0x7f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xe0,0xff,0xff,0xff,0xff, -0xe2,0xc0,0xff,0xff,0xff,0xff, -0xc7,0x00,0xff,0xff,0xff,0xff, -0x8f,0x07,0xff,0xff,0xff,0xff, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xfc,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xff, -0x00,0x00,0xe0,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xef,0xff, -0x00,0x00,0x0f,0xff,0xef,0xff, -0x0f,0x0f,0x1f,0xff,0xef,0xff, -0x1f,0x1f,0x3f,0xff,0xff,0xff, -0xf8,0xf8,0xfc,0xfc,0xff,0xff, -0xf0,0xf0,0xf8,0xf8,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0x00,0x00,0xe0,0xf8,0xff,0xff, -0x00,0x00,0x00,0xff,0xef,0xff, -0x00,0x00,0x0f,0x3f,0xef,0xff, -0x0f,0x0f,0x1f,0x3f,0xff,0xff, -0x1f,0x1f,0x3f,0x3f,0xff,0xff, -0xf8,0xfc,0xfc,0xfc,0xfc,0xff, -0xf0,0xf8,0xf8,0xf8,0xf8,0xff, -0xe0,0xf0,0xf0,0xfc,0xf8,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x1f,0x1f,0x7f,0x3f,0xff, -0x1f,0x3f,0x3f,0x3f,0x3f,0xff, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xf8,0xf8,0xf8,0xf8,0xe8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xec,0xf8, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x3f,0x7f,0x3f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xfc,0xfc,0xfc,0xec,0xfc, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xe8,0xf0, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x3f,0x2f,0x1f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfe,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfe,0xfc,0xf8,0xf8,0xe8,0xf8, -0xfe,0xfc,0xf8,0xf8,0xe8,0xf0, -0x7e,0x7c,0x78,0x78,0xc0,0xf9, -0x7e,0x7e,0x7e,0x7e,0x6f,0xc7, -0x7e,0x7e,0x3e,0x3f,0x07,0x3f, -0x7f,0x7f,0x3f,0x3f,0x2f,0x1f, -0x7f,0x7f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xfc,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xe0,0xff,0xff,0xff,0xff, -0xe0,0xc0,0xff,0xff,0xff,0xff, -0xc4,0x80,0xff,0xff,0xff,0xff, -0x8f,0x00,0xff,0xff,0xff,0xff, -0x1f,0x0f,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xff, -0xc0,0xc0,0xe0,0xff,0xff,0xff, -0x00,0x00,0xc0,0xff,0xdf,0xff, -0x00,0x00,0x00,0xff,0xdf,0xff, -0x00,0x00,0x1f,0xff,0xdf,0xff, -0x1f,0x1f,0x3f,0xff,0xdf,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf0,0xf0,0xf8,0xf8,0xff,0xff, -0xe0,0xe0,0xf0,0xf0,0xdf,0xff, -0xc0,0xc0,0xe0,0xf0,0xdf,0xff, -0x00,0x00,0xc0,0xf0,0xdf,0xff, -0x00,0x00,0x00,0xff,0xdf,0xff, -0x00,0x00,0x1f,0x7f,0xdf,0xff, -0x1f,0x1f,0x3f,0x7f,0xdf,0xff, -0xf8,0xf8,0xf8,0xf8,0xf8,0xff, -0xf0,0xf8,0xf8,0xf8,0xf8,0xff, -0xe0,0xf0,0xf0,0xf0,0xd0,0xff, -0xc0,0xe0,0xe0,0xf8,0xd0,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x3f,0x3f,0xff,0x5f,0xff, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xd8,0xf8, -0xf0,0xf0,0xf0,0xf0,0xd0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xd8,0xf1, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0xdf,0x7f, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xd8,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xd0,0xe1, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x1f,0x3f, -0xfc,0xf8,0xf8,0xf8,0xf8,0xf8, -0xfc,0xf8,0xf8,0xf8,0xf8,0xf8, -0xfc,0xf8,0xf0,0xf0,0xd0,0xf0, -0xfc,0xf8,0xf0,0xf0,0xd0,0xe1, -0x7c,0x78,0x70,0x70,0xa1,0xf3, -0x7e,0x7e,0x7e,0x7f,0x7f,0x8f, -0x7e,0x7e,0x7f,0x7f,0x2f,0x7f, -0x7f,0x7f,0x7f,0x7f,0x7f,0x3f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xff,0xff,0xff,0xff, -0xf8,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xe0,0xff,0xff,0xff,0xff, -0xe0,0xc0,0xff,0xff,0xff,0xff, -0xc0,0x80,0xff,0xff,0xff,0xff, -0x88,0x00,0xff,0xff,0xff,0xff, -0x1f,0x00,0xff,0xff,0xff,0xff, -0x3f,0x1f,0xff,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xff,0xff,0xff, -0xf0,0xf0,0xf0,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xff, -0xc0,0xc0,0xe0,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xbf,0xff, -0x00,0x00,0x80,0xff,0xbf,0xff, -0x00,0x00,0x01,0xff,0xbf,0xff, -0x01,0x01,0x3f,0xff,0xbf,0xff, -0xf8,0xf8,0xf8,0xf8,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xbf,0xff, -0xe0,0xe0,0xf0,0xf0,0xbf,0xff, -0xc0,0xc0,0xe0,0xe0,0xbf,0xff, -0x80,0x80,0xc0,0xe0,0xbf,0xff, -0x00,0x00,0x80,0xe1,0xbf,0xff, -0x00,0x00,0x01,0xff,0xbf,0xff, -0x01,0x01,0x3f,0xff,0xff,0xff, -0xf8,0xf8,0xf8,0xf8,0xf8,0xff, -0xf0,0xf0,0xf0,0xf0,0xb0,0xff, -0xe0,0xf0,0xf0,0xf0,0xb0,0xff, -0xc0,0xe0,0xe0,0xe0,0xa0,0xff, -0x80,0xc0,0xc0,0xe0,0xa1,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xb8,0xf8, -0xf0,0xf0,0xf0,0xf0,0xb0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xb0,0xf0, -0xe0,0xe0,0xe0,0xe0,0xa0,0xe1, -0xe0,0xe0,0xe0,0xe0,0xa1,0xe3, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xb0,0xf0, -0xe0,0xe0,0xe0,0xe0,0xe0,0xe1, -0x60,0x60,0x60,0x60,0xe1,0xc3, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf8,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf8,0xf0,0xe0,0xe0,0xa0,0xe1, -0x78,0x70,0x60,0x60,0xe1,0xc3, -0x78,0x70,0x60,0x61,0x43,0xe7, -0x7e,0x7e,0x7f,0x7f,0x7f,0x1f, -0x7f,0x7f,0x7f,0x7f,0x5f,0x5f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xf0,0xe0,0xff,0xff,0xff,0xff, -0xe0,0xc0,0xff,0xff,0xff,0xff, -0xc0,0x80,0xff,0xff,0xff,0xff, -0x80,0x00,0xff,0xff,0xff,0xff, -0x10,0x00,0xff,0xff,0xff,0xff, -0x3f,0x01,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf0,0xff,0xff,0xff, -0xf0,0xf0,0xf0,0xff,0x7f,0xff, -0xe0,0xe0,0xe0,0xff,0x7f,0xff, -0xc0,0xc0,0xe0,0xff,0x7f,0xff, -0x00,0x00,0xc0,0xff,0x7f,0xff, -0x00,0x00,0x80,0xff,0x7f,0xff, -0x00,0x00,0x01,0xff,0x7f,0xff, -0x01,0x01,0x03,0xff,0x7f,0xff, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0x7f,0xff, -0xe0,0xe0,0xe0,0xe0,0x7f,0xff, -0xc0,0xc0,0xe0,0xe0,0x7f,0xff, -0x00,0x00,0x40,0xc0,0x7f,0xff, -0x00,0x00,0x00,0xc1,0x7f,0xff, -0x00,0x00,0x01,0xc3,0xff,0xff, -0x01,0x01,0x03,0xff,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xf0,0xff, -0xf0,0xf0,0xf0,0xf0,0x70,0xff, -0xe0,0xe0,0xe0,0xe0,0x60,0xff, -0xc0,0xe0,0xe0,0xe0,0x60,0xff, -0x00,0x40,0x40,0x40,0x41,0xff, -0x00,0x00,0x00,0x41,0x43,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0xf0,0x70,0xf8, -0xf0,0xf0,0xf0,0xf0,0x70,0xf0, -0xe0,0xe0,0xe0,0xe0,0x60,0xe0, -0xe0,0xe0,0xe0,0xe0,0x60,0xe1, -0x40,0x40,0x40,0x40,0x41,0xc3, -0x40,0x40,0x40,0x41,0x43,0xc7, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0xf0,0xf0,0x70,0xf0, -0xe0,0xe0,0xe0,0xe0,0x60,0xe0, -0xe0,0xe0,0xe0,0xe0,0x60,0xe1, -0x40,0x40,0x40,0x40,0x41,0xc3, -0x40,0x40,0x40,0x41,0x43,0x87, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf0,0xe0,0xe0,0xe0,0xe0,0xe0, -0xf0,0xe0,0xe0,0xe0,0x60,0xe1, -0x70,0x60,0x40,0x40,0xc1,0xc3, -0x70,0x60,0x40,0x41,0xc3,0x87, -0x70,0x60,0x41,0x43,0x87,0x4f, -0x7f,0x7f,0x7f,0x7f,0xff,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xfe, -0x00,0x00,0x80,0xff,0xff,0xfe, -0x00,0x00,0x00,0xff,0xff,0xfe, -0x00,0x00,0x01,0xff,0xff,0xfe, -0x01,0x01,0x03,0xff,0xff,0xfe, -0x03,0x03,0x07,0xff,0xff,0xfe, -0x07,0x07,0x0f,0xff,0xff,0xfe, -0x0f,0x0f,0x0f,0xff,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xfe, -0x00,0x00,0x00,0x81,0xff,0xfe, -0x00,0x00,0x00,0x03,0xff,0xfe, -0x01,0x01,0x03,0x07,0xff,0xfe, -0x03,0x03,0x07,0x07,0xff,0xfe, -0x07,0x07,0x0f,0x0f,0xff,0xff, -0x0f,0x0f,0x0f,0x0f,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xe3,0xfe, -0x00,0x00,0x00,0x80,0xc3,0xfe, -0x00,0x00,0x00,0x02,0x83,0xfe, -0x01,0x01,0x03,0x07,0x07,0xfe, -0x03,0x03,0x07,0x07,0x07,0xfe, -0x07,0x07,0x0f,0x0f,0x0f,0xfe, -0x0f,0x0f,0x0f,0x0f,0x0f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x80,0xc2,0xe2, -0x00,0x00,0x02,0x02,0x82,0xc2, -0x01,0x03,0x07,0x07,0x07,0x86, -0x03,0x07,0x07,0x07,0x07,0x06, -0x07,0x0f,0x0f,0x0f,0x0f,0x0e, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x82,0xc2,0xe2, -0x02,0x02,0x02,0x02,0x82,0xc2, -0x07,0x07,0x07,0x07,0x07,0x86, -0x07,0x07,0x07,0x07,0x07,0x06, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0e, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1e, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x82,0xc2,0xe2, -0x02,0x02,0x02,0x02,0x82,0xc2, -0x07,0x07,0x07,0x07,0x07,0x87, -0x07,0x07,0x07,0x07,0x07,0x07, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0x80,0x80,0xf8,0xff,0xff,0xfd, -0x00,0x00,0x80,0xff,0xff,0xfd, -0x00,0x00,0x00,0xff,0xff,0xfd, -0x00,0x00,0x01,0xff,0xff,0xfd, -0x01,0x01,0x03,0xff,0xff,0xfd, -0x03,0x03,0x07,0xff,0xff,0xfd, -0x07,0x07,0x0f,0xff,0xff,0xfd, -0x0f,0x0f,0x1f,0xff,0xff,0xff, -0x80,0x80,0xc0,0xfc,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xfd, -0x00,0x00,0x00,0x81,0xff,0xfd, -0x00,0x00,0x01,0x03,0xff,0xfd, -0x01,0x01,0x03,0x07,0xff,0xfd, -0x03,0x03,0x07,0x0f,0xff,0xfd, -0x07,0x07,0x0f,0x0f,0xff,0xff, -0x0f,0x0f,0x1f,0x1f,0xff,0xff, -0x80,0x80,0xc0,0xfc,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xfd, -0x00,0x00,0x00,0x81,0xc7,0xfd, -0x00,0x00,0x01,0x03,0x87,0xfd, -0x01,0x01,0x03,0x07,0x07,0xfd, -0x03,0x03,0x07,0x0f,0x0f,0xfd, -0x07,0x07,0x0f,0x0f,0x0f,0xfd, -0x0f,0x0f,0x1f,0x1f,0x1f,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x03,0x87,0xc5, -0x01,0x03,0x07,0x07,0x07,0x85, -0x03,0x07,0x0f,0x0f,0x0f,0x0d, -0x07,0x0f,0x0f,0x0f,0x0f,0x0d, -0x0f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x07,0x87,0xc5, -0x07,0x07,0x07,0x07,0x07,0x85, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0d, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0d, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1d, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x07,0x87,0xc5, -0x07,0x07,0x07,0x07,0x07,0x87, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xfb, -0x00,0x00,0xf0,0xff,0xff,0xfb, -0x00,0x00,0x00,0xff,0xff,0xfb, -0x00,0x00,0x01,0xff,0xff,0xfb, -0x01,0x01,0x03,0xff,0xff,0xfb, -0x03,0x03,0x07,0xff,0xff,0xfb, -0x07,0x07,0x0f,0xff,0xff,0xfb, -0x0f,0x0f,0x1f,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xfc,0xff,0xfb, -0x00,0x00,0x80,0xf8,0xff,0xfb, -0x00,0x00,0x00,0x80,0xff,0xfb, -0x00,0x00,0x00,0x03,0xff,0xfb, -0x01,0x01,0x03,0x07,0xff,0xfb, -0x03,0x03,0x07,0x0f,0xff,0xfb, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0x0f,0x0f,0x1f,0x1f,0xff,0xff, -0xf0,0xf0,0xf8,0xfc,0xfe,0xfb, -0x00,0x00,0x80,0xf8,0xfe,0xfb, -0x00,0x00,0x00,0x80,0xff,0xfb, -0x00,0x00,0x00,0x03,0x8f,0xfb, -0x01,0x01,0x03,0x07,0x0f,0xfb, -0x03,0x03,0x07,0x0f,0x0f,0xfb, -0x07,0x07,0x0f,0x1f,0x1f,0xff, -0x0f,0x0f,0x1f,0x1f,0x1f,0xff, -0xf0,0xf8,0xfc,0xfc,0xff,0xfa, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x03,0x07,0x07,0x1f,0x8b, -0x03,0x07,0x0f,0x0f,0x0f,0x0b, -0x07,0x0f,0x1f,0x1f,0x1f,0x1f, -0x0f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfe,0xfe,0xfe,0xfe,0xfe,0xfb, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x0f,0x0f,0x9b, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0b, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1b, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfe,0xfe,0xfe,0xfe,0xfc,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x0f,0x0f,0x8b, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xf7, -0xe0,0xe0,0xf0,0xff,0xff,0xf7, -0x00,0x00,0xe0,0xff,0xff,0xf7, -0x00,0x00,0x00,0xff,0xff,0xf7, -0x00,0x00,0x03,0xff,0xff,0xf7, -0x03,0x03,0x07,0xff,0xff,0xf7, -0x07,0x07,0x0f,0xff,0xff,0xf7, -0x0f,0x0f,0x1f,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xfc,0xff,0xf7, -0xe0,0xe0,0xf0,0xf8,0xff,0xf7, -0x00,0x00,0x00,0xf0,0xff,0xf7, -0x00,0x00,0x00,0x00,0xff,0xf7, -0x00,0x00,0x00,0x07,0xff,0xf7, -0x03,0x03,0x07,0x0f,0xff,0xf7, -0x07,0x07,0x0f,0x1f,0xff,0xf7, -0x0f,0x0f,0x1f,0x3f,0xff,0xff, -0xf0,0xf0,0xf8,0xfc,0xfc,0xff, -0xe0,0xe0,0xf0,0xf8,0xfc,0xff, -0x00,0x00,0x00,0xf0,0xfc,0xf7, -0x00,0x00,0x00,0x00,0xff,0xf7, -0x00,0x00,0x00,0x07,0x1f,0xf7, -0x03,0x03,0x07,0x0f,0x1f,0xf7, -0x07,0x07,0x0f,0x1f,0x1f,0xff, -0x0f,0x0f,0x1f,0x3f,0x3f,0xff, -0xf0,0xf8,0xfc,0xfc,0xfc,0xfc, -0xe0,0xf0,0xf8,0xf8,0xfe,0xfc, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x07,0x0f,0x0f,0x3f,0x1f, -0x07,0x0f,0x1f,0x1f,0x1f,0x1f, -0x0f,0x1f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x1f,0x1f,0x37, -0x1f,0x1f,0x1f,0x1f,0x1f,0x17, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfc,0xfc,0xfc,0xfc,0xfc,0xf4, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x1f,0x1f,0x17, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xef, -0xc0,0xc0,0xe0,0xff,0xff,0xef, -0x00,0x00,0xc0,0xff,0xff,0xef, -0x00,0x00,0x00,0xff,0xff,0xef, -0x00,0x00,0x07,0xff,0xff,0xef, -0x07,0x07,0x0f,0xff,0xff,0xef, -0x0f,0x0f,0x1f,0xff,0xff,0xef, -0xf0,0xf0,0xf8,0xfc,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xef, -0xc0,0xc0,0xe0,0xf0,0xff,0xef, -0x00,0x00,0x00,0xe0,0xff,0xef, -0x00,0x00,0x00,0x00,0xff,0xef, -0x00,0x00,0x00,0x0f,0xff,0xef, -0x07,0x07,0x0f,0x1f,0xff,0xef, -0x0f,0x0f,0x1f,0x3f,0xff,0xef, -0xf0,0xf0,0xf8,0xfc,0xfc,0xff, -0xe0,0xe0,0xf0,0xf8,0xf8,0xff, -0xc0,0xc0,0xe0,0xf0,0xf8,0xef, -0x00,0x00,0x00,0xe0,0xf8,0xef, -0x00,0x00,0x00,0x00,0xff,0xef, -0x00,0x00,0x00,0x0f,0x3f,0xef, -0x07,0x07,0x0f,0x1f,0x3f,0xff, -0x0f,0x0f,0x1f,0x3f,0x3f,0xff, -0xf0,0xf8,0xfc,0xfc,0xfc,0xfc, -0xe0,0xf0,0xf8,0xf8,0xf8,0xf8, -0xc0,0xe0,0xf0,0xf0,0xfc,0xf8, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x0f,0x1f,0x1f,0x7f,0x3f, -0x0f,0x1f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xf8,0xf8,0xf8,0xf8,0xf8,0xe8, -0xf8,0xf8,0xf8,0xf8,0xf8,0xec, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x3f,0x3f,0x7f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xf8,0xe8, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x3f,0x3f,0x2f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x0f,0x0f,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xdf, -0xc0,0xc0,0xe0,0xff,0xff,0xdf, -0x80,0x80,0xc0,0xff,0xff,0xdf, -0x00,0x00,0x80,0xff,0xff,0xdf, -0x00,0x00,0x00,0xff,0xff,0xdf, -0x00,0x00,0x0f,0xff,0xff,0xdf, -0x0f,0x0f,0x1f,0xff,0xff,0xdf, -0xf0,0xf0,0xf8,0xf8,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xff,0xdf, -0x80,0x80,0xc0,0xe0,0xff,0xdf, -0x00,0x00,0x00,0xc0,0xff,0xdf, -0x00,0x00,0x00,0x01,0xff,0xdf, -0x00,0x00,0x01,0x1f,0xff,0xdf, -0x0f,0x0f,0x1f,0x3f,0xff,0xdf, -0xf0,0xf0,0xf8,0xf8,0xf8,0xff, -0xe0,0xe0,0xf0,0xf8,0xf8,0xff, -0xc0,0xc0,0xe0,0xf0,0xf0,0xdf, -0x80,0x80,0xc0,0xe0,0xf0,0xdf, -0x00,0x00,0x00,0xc0,0xf1,0xdf, -0x00,0x00,0x00,0x01,0xff,0xdf, -0x00,0x00,0x01,0x1f,0x7f,0xdf, -0x0f,0x0f,0x1f,0x3f,0x7f,0xdf, -0xf0,0xf8,0xf8,0xf8,0xf8,0xf8, -0xe0,0xf0,0xf8,0xf8,0xf8,0xf8, -0xc0,0xe0,0xf0,0xf0,0xf0,0xd0, -0x80,0xc0,0xe0,0xe0,0xf8,0xd1, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x1f,0x3f,0x3f,0xff,0x5f, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xf8,0xd8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xd0, -0xf0,0xf0,0xf0,0xf0,0xf0,0xd9, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x7f,0xdf, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xf0,0xd1, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x3f,0x7f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf8,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xbf, -0xc0,0xc0,0xe0,0xff,0xff,0xbf, -0x80,0x80,0xc0,0xff,0xff,0xbf, -0x00,0x00,0x80,0xff,0xff,0xbf, -0x00,0x00,0x00,0xff,0xff,0xbf, -0x00,0x00,0x01,0xff,0xff,0xbf, -0x01,0x01,0x1f,0xff,0xff,0xbf, -0xf0,0xf0,0xf8,0xf8,0xff,0xff, -0xe0,0xe0,0xf0,0xf0,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xff,0xbf, -0x80,0x80,0xc0,0xe0,0xff,0xbf, -0x00,0x00,0x80,0xc0,0xff,0xbf, -0x00,0x00,0x00,0x81,0xff,0xbf, -0x00,0x00,0x01,0x03,0xff,0xbf, -0x01,0x01,0x03,0x3f,0xff,0xff, -0xf0,0xf0,0xf8,0xf8,0xf8,0xff, -0xe0,0xe0,0xf0,0xf0,0xf0,0xbf, -0xc0,0xc0,0xe0,0xf0,0xf0,0xbf, -0x80,0x80,0xc0,0xe0,0xe0,0xbf, -0x00,0x00,0x80,0xc0,0xe1,0xbf, -0x00,0x00,0x00,0x81,0xe3,0xbf, -0x00,0x00,0x01,0x03,0xff,0xbf, -0x01,0x01,0x03,0x3f,0xff,0xff, -0xf0,0xf8,0xf8,0xf8,0xf8,0xf8, -0xe0,0xf0,0xf0,0xf0,0xf0,0xb0, -0xc0,0xe0,0xf0,0xf0,0xf0,0xb0, -0x80,0xc0,0xe0,0xe0,0xe0,0xa1, -0x00,0x00,0xc0,0xc0,0xe1,0xa3, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xb8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xb0, -0xf0,0xf0,0xf0,0xf0,0xf0,0xb0, -0xe0,0xe0,0xe0,0xe0,0xe0,0xa1, -0xe0,0xe0,0xe0,0xe0,0xe1,0xa3, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xe0,0xe0,0xe0,0xe0,0xe0,0xe1, -0xe0,0xe0,0xe0,0xe0,0xe1,0xa3, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0xf0,0xf0,0xf0,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0x7f, -0xc0,0xc0,0xe0,0xff,0xff,0x7f, -0x80,0x80,0xc0,0xff,0xff,0x7f, -0x00,0x00,0x80,0xff,0xff,0x7f, -0x00,0x00,0x00,0xff,0xff,0x7f, -0x00,0x00,0x01,0xff,0xff,0x7f, -0x01,0x01,0x03,0xff,0xff,0x7f, -0xf0,0xf0,0xf0,0xf0,0xff,0xff, -0xe0,0xe0,0xf0,0xf0,0xff,0xff, -0xc0,0xc0,0xe0,0xe0,0xff,0x7f, -0x80,0x80,0xc0,0xe0,0xff,0x7f, -0x00,0x00,0x00,0xc0,0xff,0x7f, -0x00,0x00,0x00,0x81,0xff,0x7f, -0x00,0x00,0x01,0x03,0xff,0x7f, -0x01,0x01,0x03,0x07,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xf0,0xff, -0xe0,0xe0,0xf0,0xf0,0xf0,0x7f, -0xc0,0xc0,0xe0,0xe0,0xe0,0x7f, -0x80,0x80,0xc0,0xe0,0xe0,0x7f, -0x00,0x00,0x00,0x40,0xc1,0x7f, -0x00,0x00,0x00,0x01,0xc3,0x7f, -0x00,0x00,0x01,0x03,0xc7,0x7f, -0x01,0x01,0x03,0x07,0xff,0xff, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xe0,0xf0,0xf0,0xf0,0xf0,0x70, -0xc0,0xe0,0xe0,0xe0,0xe0,0x60, -0x80,0xc0,0xe0,0xe0,0xe0,0x61, -0x00,0x00,0x40,0x40,0x41,0x43, -0x00,0x00,0x00,0x01,0x43,0x47, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0xf0,0xf0,0x78, -0xf0,0xf0,0xf0,0xf0,0xf0,0x70, -0xe0,0xe0,0xe0,0xe0,0xe0,0x60, -0xe0,0xe0,0xe0,0xe0,0xe0,0x61, -0x40,0x40,0x40,0x40,0x41,0x43, -0x40,0x40,0x40,0x41,0x43,0x47, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xe0,0xe0,0xe0,0xe0,0xe0,0xe0, -0xe0,0xe0,0xe0,0xe0,0xe0,0xe1, -0x40,0x40,0x40,0x40,0x41,0x43, -0x40,0x40,0x40,0x41,0x43,0x47, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x01,0xff,0xff,0xff, -0x01,0x01,0x03,0xff,0xff,0xff, -0x03,0x03,0x07,0xff,0xff,0xff, -0x07,0x07,0x0f,0xff,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x01,0x01,0x03,0x07,0xff,0xff, -0x03,0x03,0x07,0x0f,0xff,0xff, -0x07,0x07,0x0f,0x0f,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x83,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x07,0xff, -0x03,0x03,0x07,0x0f,0x0f,0xff, -0x07,0x07,0x0f,0x0f,0x0f,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xf2, -0x00,0x00,0x00,0x80,0xc0,0xe2, -0x00,0x00,0x00,0x00,0x82,0xc2, -0x00,0x00,0x01,0x03,0x07,0x87, -0x01,0x01,0x03,0x07,0x07,0x07, -0x03,0x03,0x07,0x0f,0x0f,0x0f, -0x07,0x07,0x0f,0x0f,0x0f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x80,0xc0,0xe2, -0x00,0x00,0x00,0x02,0x82,0xc2, -0x00,0x00,0x03,0x07,0x07,0x87, -0x01,0x03,0x07,0x07,0x07,0x07, -0x03,0x07,0x0f,0x0f,0x0f,0x0f, -0x07,0x0f,0x0f,0x0f,0x0f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x02,0x02,0x82,0xc2,0xe2, -0x02,0x02,0x02,0x02,0x82,0xc2, -0x07,0x07,0x07,0x07,0x07,0x87, -0x07,0x07,0x07,0x07,0x07,0x07, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x01,0xff,0xff,0xff, -0x01,0x01,0x03,0xff,0xff,0xff, -0x03,0x03,0x07,0xff,0xff,0xff, -0x07,0x07,0x0f,0xff,0xff,0xff, -0x80,0x80,0xc0,0xf8,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x01,0x01,0x03,0x07,0xff,0xff, -0x03,0x03,0x07,0x0f,0xff,0xff, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xfc,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc1,0xff, -0x00,0x00,0x00,0x01,0x83,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0x03,0x03,0x07,0x0f,0x0f,0xff, -0x07,0x07,0x0f,0x1f,0x1f,0xff, -0x80,0x80,0xc0,0xe0,0xfc,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc1,0xe7, -0x00,0x00,0x00,0x01,0x83,0xc7, -0x00,0x00,0x01,0x03,0x07,0x87, -0x01,0x01,0x03,0x07,0x0f,0x0f, -0x03,0x03,0x07,0x0f,0x0f,0x0f, -0x07,0x07,0x0f,0x1f,0x1f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x03,0x83,0xc7, -0x00,0x00,0x03,0x07,0x07,0x87, -0x01,0x03,0x07,0x0f,0x0f,0x0f, -0x03,0x07,0x0f,0x0f,0x0f,0x0f, -0x07,0x0f,0x1f,0x1f,0x1f,0x1f, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x07,0x07,0x07,0x87,0xc7, -0x07,0x07,0x07,0x07,0x07,0x87, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x01,0xff,0xff,0xff, -0x01,0x01,0x03,0xff,0xff,0xff, -0x03,0x03,0x07,0xff,0xff,0xff, -0x07,0x07,0x0f,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0x00,0x00,0x80,0xf0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x01,0x01,0x03,0x07,0xff,0xff, -0x03,0x03,0x07,0x0f,0xff,0xff, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xfc,0xff, -0x00,0x00,0x80,0xc0,0xf8,0xff, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x83,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0x03,0x03,0x07,0x0f,0x1f,0xff, -0x07,0x07,0x0f,0x1f,0x1f,0xff, -0xe0,0xe0,0xf0,0xf8,0xfc,0xfe, -0x00,0x00,0x80,0xc0,0xf8,0xfe, -0x00,0x00,0x00,0x80,0xc0,0xff, -0x00,0x00,0x00,0x00,0x83,0xcf, -0x00,0x00,0x01,0x03,0x07,0x8f, -0x01,0x01,0x03,0x07,0x0f,0x0f, -0x03,0x03,0x07,0x0f,0x1f,0x1f, -0x07,0x07,0x0f,0x1f,0x1f,0x1f, -0xe0,0xf0,0xf8,0xfc,0xfc,0xff, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x03,0x07,0x07,0x9f, -0x01,0x03,0x07,0x0f,0x0f,0x0f, -0x03,0x07,0x0f,0x1f,0x1f,0x1f, -0x07,0x0f,0x1f,0x1f,0x1f,0x1f, -0xfe,0xfe,0xfe,0xfe,0xfc,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x0f,0x0f,0x0f,0x0f,0x8f, -0x0f,0x0f,0x0f,0x0f,0x0f,0x0f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xff, -0xc0,0xc0,0xe0,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x01,0x01,0x03,0xff,0xff,0xff, -0x03,0x03,0x07,0xff,0xff,0xff, -0x07,0x07,0x0f,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xff,0xff, -0x00,0x00,0x00,0xe0,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x03,0xff,0xff, -0x01,0x01,0x03,0x07,0xff,0xff, -0x03,0x03,0x07,0x0f,0xff,0xff, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xfc,0xff, -0xc0,0xc0,0xe0,0xf0,0xf8,0xff, -0x00,0x00,0x00,0x80,0xf0,0xff, -0x00,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x07,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0x03,0x03,0x07,0x0f,0x1f,0xff, -0x07,0x07,0x0f,0x1f,0x3f,0xff, -0xe0,0xe0,0xf0,0xf8,0xfc,0xfc, -0xc0,0xc0,0xe0,0xf0,0xf8,0xfc, -0x00,0x00,0x00,0x80,0xf0,0xfc, -0x00,0x00,0x00,0x00,0x80,0xff, -0x00,0x00,0x00,0x00,0x07,0x9f, -0x01,0x01,0x03,0x07,0x0f,0x1f, -0x03,0x03,0x07,0x0f,0x1f,0x1f, -0x07,0x07,0x0f,0x1f,0x3f,0x3f, -0xe0,0xf0,0xf8,0xfc,0xfc,0xfc, -0xc0,0xe0,0xf0,0xf8,0xf8,0xfe, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x03,0x07,0x0f,0x0f,0x3f, -0x03,0x07,0x0f,0x1f,0x1f,0x1f, -0x07,0x0f,0x1f,0x3f,0x3f,0x3f, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x1f,0x1f,0x1f,0x1f,0x1f,0x1f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x03,0x03,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xff, -0xc0,0xc0,0xe0,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x03,0x03,0x07,0xff,0xff,0xff, -0x07,0x07,0x0f,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x00,0xc0,0xff,0xff, -0x00,0x00,0x00,0x00,0xff,0xff, -0x00,0x00,0x00,0x07,0xff,0xff, -0x03,0x03,0x07,0x0f,0xff,0xff, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xfc,0xff, -0xc0,0xc0,0xe0,0xf0,0xf8,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x00,0x00,0xe0,0xff, -0x00,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x0f,0xff, -0x03,0x03,0x07,0x0f,0x1f,0xff, -0x07,0x07,0x0f,0x1f,0x3f,0xff, -0xe0,0xe0,0xf0,0xf8,0xfc,0xfc, -0xc0,0xc0,0xe0,0xf0,0xf8,0xf8, -0x80,0x80,0xc0,0xe0,0xf0,0xf8, -0x00,0x00,0x00,0x00,0xe0,0xf9, -0x00,0x00,0x00,0x00,0x01,0xff, -0x00,0x00,0x00,0x01,0x0f,0x3f, -0x03,0x03,0x07,0x0f,0x1f,0x3f, -0x07,0x07,0x0f,0x1f,0x3f,0x3f, -0xe0,0xf0,0xf8,0xfc,0xfc,0xfc, -0xc0,0xe0,0xf0,0xf8,0xf8,0xf8, -0x80,0xc0,0xe0,0xf0,0xf0,0xfc, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x07,0x0f,0x1f,0x1f,0x7f, -0x07,0x0f,0x1f,0x3f,0x3f,0x3f, -0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0x3f,0x3f,0x3f,0x3f,0x3f,0x3f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x07,0x07,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xff, -0xc0,0xc0,0xe0,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x01,0xff,0xff,0xff, -0x07,0x07,0x0f,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x0f,0xff,0xff, -0x07,0x07,0x0f,0x1f,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xf8,0xff, -0xc0,0xc0,0xe0,0xf0,0xf8,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x00,0xc1,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x1f,0xff, -0x07,0x07,0x0f,0x1f,0x3f,0xff, -0xe0,0xe0,0xf0,0xf8,0xf8,0xf8, -0xc0,0xc0,0xe0,0xf0,0xf8,0xf8, -0x80,0x80,0xc0,0xe0,0xf0,0xf0, -0x00,0x00,0x80,0xc0,0xe0,0xf1, -0x00,0x00,0x00,0x00,0xc1,0xf3, -0x00,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x1f,0x7f, -0x07,0x07,0x0f,0x1f,0x3f,0x7f, -0xe0,0xf0,0xf8,0xf8,0xf8,0xf8, -0xc0,0xe0,0xf0,0xf8,0xf8,0xf8, -0x80,0xc0,0xe0,0xf0,0xf0,0xf0, -0x00,0x00,0xc0,0xe0,0xe0,0xf9, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x07,0x0f,0x1f,0x3f,0x3f,0xff, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf1, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x7f,0x7f,0x7f,0x7f,0x3f,0x7f, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xff, -0xc0,0xc0,0xe0,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x01,0xff,0xff,0xff, -0x01,0x01,0x03,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x01,0x01,0x03,0x1f,0xff,0xff, -0xe0,0xe0,0xf0,0xf8,0xf8,0xff, -0xc0,0xc0,0xe0,0xf0,0xf0,0xff, -0x80,0x80,0xc0,0xe0,0xf0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x80,0xc1,0xff, -0x00,0x00,0x00,0x01,0x83,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x3f,0xff, -0xe0,0xe0,0xf0,0xf8,0xf8,0xf8, -0xc0,0xc0,0xe0,0xf0,0xf0,0xf0, -0x80,0x80,0xc0,0xe0,0xf0,0xf0, -0x00,0x00,0x80,0xc0,0xe0,0xe1, -0x00,0x00,0x00,0x80,0xc1,0xe3, -0x00,0x00,0x00,0x01,0x83,0xe7, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x3f,0xff, -0xe0,0xf0,0xf8,0xf8,0xf8,0xf8, -0xc0,0xe0,0xf0,0xf0,0xf0,0xf0, -0x80,0xc0,0xe0,0xf0,0xf0,0xf0, -0x00,0x00,0xc0,0xe0,0xe0,0xe1, -0x00,0x00,0x00,0xc0,0xc1,0xe3, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf8,0xf8,0xf8,0xf8,0xf8,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xe0,0xe0,0xe0,0xe0,0xe0,0xe1, -0xe0,0xe0,0xe0,0xe0,0xe1,0xe3, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xfc,0xff,0xff,0xff,0xff,0xff, -0xf8,0xff,0xff,0xff,0xff,0xff, -0xf1,0xff,0xff,0xff,0xff,0xff, -0xe3,0xff,0xff,0xff,0xff,0xff, -0xc7,0xff,0xff,0xff,0xff,0xff, -0x8f,0xff,0xff,0xff,0xff,0xff, -0x1f,0xff,0xff,0xff,0xff,0xff, -0x3f,0xff,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xff,0xff,0xff,0xff, -0xc0,0xc0,0xff,0xff,0xff,0xff, -0x80,0x80,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0xff,0xff,0xff,0xff, -0x01,0x01,0xff,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xff,0xff,0xff, -0xc0,0xc0,0xe0,0xff,0xff,0xff, -0x80,0x80,0xc0,0xff,0xff,0xff, -0x00,0x00,0x80,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x00,0xff,0xff,0xff, -0x00,0x00,0x01,0xff,0xff,0xff, -0x01,0x01,0x03,0xff,0xff,0xff, -0xe0,0xe0,0xf0,0xf0,0xff,0xff, -0xc0,0xc0,0xe0,0xf0,0xff,0xff, -0x80,0x80,0xc0,0xe0,0xff,0xff, -0x00,0x00,0x80,0xc0,0xff,0xff, -0x00,0x00,0x00,0x80,0xff,0xff, -0x00,0x00,0x00,0x01,0xff,0xff, -0x00,0x00,0x01,0x03,0xff,0xff, -0x01,0x01,0x03,0x07,0xff,0xff, -0xe0,0xe0,0xf0,0xf0,0xf0,0xff, -0xc0,0xc0,0xe0,0xf0,0xf0,0xff, -0x80,0x80,0xc0,0xe0,0xe0,0xff, -0x00,0x00,0x80,0xc0,0xe0,0xff, -0x00,0x00,0x00,0x00,0xc1,0xff, -0x00,0x00,0x00,0x01,0x03,0xff, -0x00,0x00,0x01,0x03,0x07,0xff, -0x01,0x01,0x03,0x07,0x0f,0xff, -0xe0,0xe0,0xf0,0xf0,0xf0,0xf8, -0xc0,0xc0,0xe0,0xf0,0xf0,0xf0, -0x80,0x80,0xc0,0xe0,0xe0,0xe0, -0x00,0x00,0x80,0xc0,0xe0,0xe1, -0x00,0x00,0x00,0x00,0x41,0x43, -0x00,0x00,0x00,0x01,0x03,0x47, -0x00,0x00,0x01,0x03,0x07,0x4f, -0x01,0x01,0x03,0x07,0x0f,0xff, -0xe0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xc0,0xe0,0xf0,0xf0,0xf0,0xf0, -0x80,0xc0,0xe0,0xe0,0xe0,0xe0, -0x00,0x00,0xc0,0xe0,0xe0,0xe1, -0x00,0x00,0x00,0x40,0x41,0x43, -0x00,0x00,0x00,0x01,0x03,0x47, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf8, -0xf0,0xf0,0xf0,0xf0,0xf0,0xf0, -0xe0,0xe0,0xe0,0xe0,0xe0,0xe0, -0xe0,0xe0,0xe0,0xe0,0xe0,0xe1, -0x40,0x40,0x40,0x40,0x41,0x43, -0x40,0x40,0x40,0x41,0x43,0x47, -0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/Firenzina/low_depth.c b/Firenzina/low_depth.c deleted file mode 100644 index 73c48c9..0000000 --- a/Firenzina/low_depth.c +++ /dev/null @@ -1,355 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef low_depth -#define low_depth -#include "fire.h" -#include "history.h" -#include "null_move.h" -#include "low_depth.c" -#include "white.h" -#else -#include "black.h" -#endif - -int MyLowDepth(typePos *Position, int value, int depth) - { - int cnt, Value, best_value, v, i, trans_move = 0; - int move, move_depth = 0, trans_depth, to, fr; - typeNext NextMove[1]; - typeDynamic *Pos0 = Position->Dyn; - TransDeclare(); - - CheckForMate (value); - - (Pos0 + 1)->move = MoveNone; - CheckRepetition(false); - Trans = HashPointer(Position->Dyn->Hash); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Position->Dyn->Hash >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return 0; - if (trans->DepthLower >= depth) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - { - (Pos0 + 1)->move = trans->move; - return(Value); - } - } - if (trans->DepthUpper >= depth) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - return(Value); - } - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - trans_move = move; - } - } - } - v = Pos0->Value + LowDepthMargin; - if (v < value) - return (value - 1); - v = Pos0->Value - (70 + 10 * depth); - if (v >= value && value >= -10000) - return(Pos0->Value); - best_value = MIN(Pos0->Value, value - 1); - if (Pos0->Value >= value && MyNull) - { - v = value; - if (v >= value) - { - int new_depth = depth - NullReduction; - new_depth -= ScoreReduction (Pos0->Value - value); - MakeNull(Position); - if (QSearchCondition) - v = -OppQsearch (Position, 1 - value, 0); - else - v = -OppLowDepth (Position, 1 - value, new_depth); - UndoNull(Position); - CheckHalt(); - } - if (VerifyNull && v >= value) - { - - v = MyQsearch(Position, value, 0); - CheckHalt(); - } - if (v >= value) - { - if (trans_move == MoveNone) - HashLower(Position->Dyn->Hash, 0, depth, v); - return(v); - } - } - NextMove->phase = Trans1; - NextMove->Target = OppOccupied; - if (Pos0->Value + 50 + (depth << 3) < value) - { - NextMove->phase = Trans2; - if (value >= Pos0->Value + 75 + (depth << 5)) - { - NextMove->Target ^= BitboardOppP; - if (BitboardOppP & MyAttacked) - best_value += 125; - if (depth <= 3 && value >= Pos0->Value + 400 + (depth << 5)) - { - NextMove->Target ^= (BitboardOppN | BitboardOppB); - best_value += 300; - if (value >= Pos0->Value + 600 + (depth << 5)) - { - NextMove->Target ^= BitboardOppR; - best_value += 200; - } - } - } - } - else if (depth <= 3 && Pos0->Value + (depth << 2) < value) - { - NextMove->phase = Trans3; - NextMove->mask = (value - Pos0->Value) - (depth << 2) + 5; - } - NextMove->bc = 0; - NextMove->move = 0; - NextMove->trans_move = trans_move; - cnt = 0; - while ((move = MyNext(Position, NextMove))) - { - to = To(move); - fr = From(move); - if (IsRepetition(0)) - { - best_value = MAX(0, best_value); - cnt++; - continue; - } - if (cnt >= depth && NextMove->phase == Ordinary_Moves && (move & 0xe000) == 0 && (SqSet[fr] & ~MyXray) - && MyOccupied ^ (BitboardMyP | BitboardMyK)) - { - if ((depth << 1) + MaxPositional(move) + Pos0->Value < value + 40 + (cnt << 1)) - { - cnt++; - continue; - } - } - if (Position->sq[fr] != EnumMyK && (Position->sq[to] == 0 || (depth <= 5 && !EasySEE(move))) - && (SqSet[fr] & ~MyXray) && !MoveIsEP(move) && move != trans_move && !MySEE(Position, move)) - { - cnt++; - continue; - } - move &= 0x7fff; - Make(Position, move); - EvalLowDepth(value, move); - if (IllegalMove || (NextMove->phase == PositionalGainPhase && MoveIsCheck)) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - v = -OppLowDepthCheck(Position, 1 - value, depth - 1); - else - { - int new_depth = depth - 2; - if (cnt >= depth && (depth << 1) - Pos1->Value < value + cnt) - { - Undo(Position, move); - cnt++; - continue; - } - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else - v = -OppLowDepth(Position, 1 - value, new_depth); - } - Undo(Position, move); - CheckHalt(); - cnt++; - if (v >= value) - { - if ((Pos0 + 1)->cp == 0 && MoveHistory(move)) - HistoryGood(move, depth); - HashLower(Position->Dyn->Hash, move, depth, v); - return(v); - } - if (v >= best_value) - best_value = v; - if ((Pos0 + 1)->cp == 0 && MoveHistory(move)) - HistoryBad(move, depth); - } - if (!cnt && NextMove->phase <= Trans2) - return(0); - HashUpper(Position->Dyn->Hash, depth, best_value); - return(best_value); - } -int MyLowDepthCheck(typePos *Position, int value, int depth) - { - int ignored, trans_move = 0, trans_depth, move_depth = 0; - int Value, i, move, best_value, v, new_depth; - bool Gen; - TransDeclare(); - typeMoveList List[256], *list, *p, *q; - typeDynamic *Pos0 = Position->Dyn; - CheckForMate (value); - - CheckRepetition(true); - Trans = HashPointer(Position->Dyn->Hash); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Position->Dyn->Hash >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return(HeightMultiplier * Height(Position) - ValueMate); - if (trans->DepthLower && trans->DepthLower >= depth) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - return(Value); - } - if (trans->DepthUpper && trans->DepthUpper >= depth) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - return(Value); - } - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - trans_move = move; - } - } - } - if (trans_move && !MyOK(Position, trans_move)) - trans_move = 0; - best_value = HeightMultiplier * Height(Position) - ValueMate; - p = List; - List[0].move = trans_move; - Gen = false; - List[1].move = 0; - ignored = 0; - while (p->move || !Gen) - { - if (!p->move) - { - list = MyEvasion(Position, List + 1, 0xffffffffffffffff); - Gen = true; - for (p = list - 1; p >= List + 1; p--) - { - if ((p->move & 0x7fff) == trans_move) - p->move = 0; - else if (p->move <= (0x80 << 24)) - { - if ((p->move & 0x7fff) == Pos0->killer1) - p->move |= 0x7fff8000; - else if ((p->move & 0x7fff) == Pos0->killer2) - p->move |= 0x7fff0000; - else - p->move |= (p->move & 0xffff) | ((HistoryValue(Position, p->move) >> 1) << 16); - } - move = p->move; - for (q = p + 1; q < list; q++) - { - if (move < q->move) - (q - 1)->move = q->move; - else - break; - } - q--; - q->move = move; - } - p = List + 1; - continue; - } - move = p->move; - p++; - if (IsRepetition(0)) - { - best_value = MAX(0, best_value); - continue; - } - if (IsInterpose(move) && value > -ValueCut && (move & 0x7fff) != trans_move && !MySEE(Position, move)) - { - ignored++; - continue; - } - move &= 0x7fff; - Make(Position, move); - EvalLowDepth(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - v = -OppLowDepthCheck(Position, 1 - value, depth - 1 + ExtendInCheck); - else - { - new_depth = depth - 2 + ExtendInCheck; - if (QSearchCondition) - v = -OppQsearch(Position, 1 - value, 0); - else - v = -OppLowDepth(Position, 1 - value, new_depth); - } - Undo(Position, move); - CheckHalt(); - if (v <= best_value) - continue; - best_value = v; - if (v >= value) - { - HashLower(Position->Dyn->Hash, move, MAX(1, depth), v); - return(v); - } - } - if (ignored && best_value < -ValueCut) - best_value = value - 1; - HashUpper(Position->Dyn->Hash, MAX(1, depth), best_value); - return(best_value); - } \ No newline at end of file diff --git a/Firenzina/magic_mult.c b/Firenzina/magic_mult.c deleted file mode 100644 index 7078fc0..0000000 --- a/Firenzina/magic_mult.c +++ /dev/null @@ -1,224 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -static int BI[64], RI[64]; -static int BS[64] = - { - 6, 5, 5, 5, 5, 5, 5, 6, - 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 7, 7, 7, 7, 5, 5, - 5, 5, 7, 9, 9, 7, 5, 5, - 5, 5, 7, 9, 9, 7, 5, 5, - 5, 5, 7, 7, 7, 7, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, - 6, 5, 5, 5, 5, 5, 5, 6 - }; -static int RS[64] = - { - 12, 11, 11, 11, 11, 11, 11, 12, - 11, 10, 10, 10, 10, 10, 10, 11, - 11, 10, 10, 10, 10, 10, 10, 11, - 11, 10, 10, 10, 10, 10, 10, 11, - 11, 10, 10, 10, 10, 10, 10, 11, - 11, 10, 10, 10, 10, 10, 10, 11, - 11, 10, 10, 10, 10, 10, 10, 11, - 12, 11, 11, 11, 11, 11, 11, 12 - }; -static uint64 BMask[64], RMask[64]; -static uint64 RMult[64] = - { - 0x6C80104004208000, 0x1080102004400080, 0x208020001000800A, 0x2080100208000480, - 0x1280040080080002, 0x7200041002000801, 0x0400011008008204, 0x028002C131000080, - 0x0042002200410080, 0x8201401000C12000, 0x1082801000A00280, 0x0001001000090020, - 0x0001000800110006, 0x0001000804000300, 0x00040002040128B0, 0x2120801040800100, - 0x0041228002804000, 0x0000810020401101, 0x4080808010002000, 0x0008008010060880, - 0xA000050008001100, 0x4800808004000200, 0x2400040041021028, 0x0008020008610084, - 0x4080400080008022, 0x000C400C80200485, 0x0010200080100882, 0x0208100080080080, - 0x0048080080800400, 0x0021002900021400, 0x0000280400010250, 0x400A004200008421, - 0x0080002000C00042, 0x0800201000400040, 0x0489001041002000, 0x8010080080801000, - 0x6120800800800400, 0x8101008209000400, 0x8060904104000208, 0x011029114E00008C, - 0x0000401080288000, 0x0000201000404000, 0x8230040800202000, 0x0204201005010008, - 0x0008000400088080, 0x0002020004008080, 0x0140040200010100, 0x2100810080420004, - 0x0080004003200240, 0x00009060C0030300, 0x1044144104200100, 0x400040100A002200, - 0x0010800800040080, 0x2280020080040080, 0x0000100881020400, 0xD082241044870200, - 0x3005218001015043, 0x880200104A210082, 0x02112200C039D082, 0x0800100004210109, - 0x0051000204080011, 0x8011000812040025, 0x00A03008108A212C, 0x10810C0301402082 - }; -static uint64 BMult[64] = - { - 0x26101008A48C0040, 0x5208021084290011, 0x0211041400404100, 0x0420920040050020, - 0x8A44042040010AA0, 0xC200901068402000, 0x0004110482202582, 0x800040209008A006, - 0x0042409084210040, 0x0000119002044040, 0x2000100400544008, 0x0080080A08200004, - 0x0000340422080402, 0x0000309010089620, 0x8249140C88043000, 0x9260008201108200, - 0xA008444019880482, 0x0110400210060490, 0x0008041000401020, 0x0004001801A06010, - 0x09A2211400A01808, 0x001080811000A003, 0x8401802602B00801, 0x30102802020A024A, - 0x8020044012242844, 0x1016132010040800, 0x0208040002003202, 0x0020080001004008, - 0x0401001001004010, 0x1004090008104208, 0x0098025000A20810, 0x2421102001041100, - 0x4201901005082001, 0x2001012000101C80, 0x1064020809011440, 0x0032200804010104, - 0x04200C8400008220, 0x0108044900009000, 0x0102082450090400, 0x0A01112604190243, - 0x0012022021000420, 0x204A0A0F04402010, 0x240604A028038400, 0xC0000A0122007408, - 0x0400085902408C01, 0x0051A01800800440, 0x0190100081204080, 0x0090850042842100, - 0x0032014320070100, 0x4028240A18048840, 0x0143404404040004, 0x4121130042020018, - 0x0000010610440002, 0x0438602002022000, 0x01481050808900E1, 0x020D04180B410000, - 0x0402008201012011, 0x0000804408880812, 0x00000050444C5000, 0x1820000048420226, - 0x0820000010020204, 0x0004084044880084, 0x1800602002008520, 0x1264043818010098, - }; -static uint64 BishopAtt(uint64 O, int sq) - { - uint64 T = 0; - int f, r; - f = File(sq); - r = Rank(sq); - for (f--, r--; f >= FA && r >= R1 && !(SqSet[8 * r + f]&O); f--, r--) - T |= SqSet[8 * r + f]; - if (f > FA && r > R1) - T |= SqSet[8 * r + f]; - f = File(sq); - r = Rank(sq); - for (f++, r--; f <= FH && r >= R1 && !(SqSet[8 * r + f]&O); f++, r--) - T |= SqSet[8 * r + f]; - if (f < FH && r > R1) - T |= SqSet[8 * r + f]; - f = File(sq); - r = Rank(sq); - for (f++, r++; f <= FH && r <= R8 && !(SqSet[8 * r + f]&O); f++, r++) - T |= SqSet[8 * r + f]; - if (f < FH && r < R8) - T |= SqSet[8 * r + f]; - f = File(sq); - r = Rank(sq); - for (f--, r++; f >= FA && r <= R8 && !(SqSet[8 * r + f]&O); f--, r++) - T |= SqSet[8 * r + f]; - if (f > FA && r < R8) - T |= SqSet[8 * r + f]; - return T; - } -static uint64 RookAtt(uint64 O, int sq) - { - uint64 T = 0; - int f, r; - f = File(sq); - r = Rank(sq); - for (f--; f >= FA && !(SqSet[8 * r + f]&O); f--) - T |= SqSet[8 * r + f]; - if (f > FA) - T |= SqSet[8 * r + f]; - f = File(sq); - r = Rank(sq); - for (f++; f <= FH && !(SqSet[8 * r + f]&O); f++) - T |= SqSet[8 * r + f]; - if (f < FH) - T |= SqSet[8 * r + f]; - f = File(sq); - r = Rank(sq); - for (r++; r <= R8 && !(SqSet[8 * r + f]&O); r++) - T |= SqSet[8 * r + f]; - if (r < R8) - T |= SqSet[8 * r + f]; - f = File(sq); - r = Rank(sq); - for (r--; r >= R1 && !(SqSet[8 * r + f]&O); r--) - T |= SqSet[8 * r + f]; - if (r > R1) - T |= SqSet[8 * r + f]; - return T; - } -void MagicMultInit() - { - int sq, ATT[64], i, j, cnt, b; - uint64 T; - BI[A1] = RI[A1] = 0; - for (sq = A1; sq < H8; sq++) - { - BI[sq + 1] = BI[sq] + (1 << BS[sq]); - RI[sq + 1] = RI[sq] + (1 << RS[sq]); - } - for (sq = A1; sq <= H8; sq++) - { - BMask[sq] = Diag[sq] & 0x007e7e7e7e7e7e00; - RMask[sq] = Ortho[sq]; - if (Rank(sq) != R1) - RMask[sq] &= ~Rank1; - if (Rank(sq) != R8) - RMask[sq] &= ~Rank8; - if (File(sq) != FA) - RMask[sq] &= ~FileA; - if (File(sq) != FH) - RMask[sq] &= ~FileH; - } - for (sq = A1; sq <= H8; sq++) - { - BishopMM[sq].index = MMDiag + BI[sq]; - RookMM[sq].index = MMOrtho + RI[sq]; - BishopMM[sq].shift = 64 - BS[sq]; - RookMM[sq].shift = 64 - RS[sq]; - RookMM[sq].mult = RMult[sq]; - BishopMM[sq].mult = BMult[sq]; - RookMM[sq].mask = RMask[sq]; - BishopMM[sq].mask = BMask[sq]; - } - for (sq = A1; sq <= H8; sq++) - { - T = BMask[sq]; - cnt = 0; - while (T) - { - b = BSF(T); - BitClear(b, T); - ATT[cnt++] = b; - } - for (i = 0; i < (1 << cnt); i++) - { - T = 0; - for (j = 0; j < cnt; j++) - if (i &(1 << j)) - T |= 1ULL << ATT[j]; - BishopMM[sq].index[(T *BishopMM[sq].mult) >> BishopMM[sq].shift] = BishopAtt(T, sq); - } - T = RMask[sq]; - cnt = 0; - while (T) - { - b = BSF(T); - BitClear(b, T); - ATT[cnt++] = b; - } - for (i = 0; i < (1 << cnt); i++) - { - T = 0; - for (j = 0; j < cnt; j++) - if (i &(1 << j)) - T |= 1ULL << ATT[j]; - RookMM[sq].index[(T *RookMM[sq].mult) >> RookMM[sq].shift] = RookAtt(T, sq); - } - } - } diff --git a/Firenzina/main.c b/Firenzina/main.c deleted file mode 100644 index f132d99..0000000 --- a/Firenzina/main.c +++ /dev/null @@ -1,247 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -void ResetPositionalGain() - { - int p, m; - -#ifdef MultiplePosGain - typePos Position[1]; - for (Position->cpu = 0; Position->cpu < MaxCPUs; Position->cpu++) -#endif - - for (p = 0; p < 0x10; p++) - for (m = 0; m < 010000; m++) - MaxPosGain(p, m) = 0; - } - -void ResetHistory() - { - int pi, sq; - -#ifdef MultipleHistory - typePos Position[1]; - for (Position->cpu = 0; Position->cpu < MaxCPUs; Position->cpu++) -#endif - - for (pi = 0; pi < 0x10; pi++) - for (sq = A1; sq <= H8; sq++) - HistoryPITo(Position, pi, sq) = 0x800; - } - -void InitHashTables() - { - PVHashTable = NULL; - EvalHash = NULL; - PawnHash = NULL; - CurrentPHashSize = (1 << 16); - EvalHashSize = (1 << 15); - -#ifdef RobboBases - TripleHash = NULL; - TripleHashSize = (1 << 17); -#endif - - OptHashSize = 128; - OptPHashSize = 32; - } - -void InitRootPosition() - { - memset((void *)RootPosition0, 0, sizeof(typePos)); - RootPosition0->DynRoot = malloc(MaxPly * sizeof(typeDynamic)); - RootPosition0->Dyn = RootPosition0->DynRoot + 1; - RootPosition0->stop = false; - } - -void InitGlobals() - { -// Eval Weights - DrawWeight = 100; - KingSafetyWeight = 100; - MaterialWeight = 100; - MobilityWeight = 100; - PawnWeight = 100; - PositionalWeight = 100; - PSTWeight = 100; - -// Lazy Eval - LazyEvalMin = 150; - LazyEvalMax = 300; - -// Piece Values - PValue = 100; - NValue = 320; - BValue = 330; - RValue = 510; - QValue = 1000; - BPValue = 50; - -// Prune Thresholds - PrunePawn = 160; - PruneMinor = 500; - PruneRook = 800; - PruneCheck = 10; - -// Search Vars - AspirationWindow = 8; - DeltaCutoff = 25000; - DepthRedMin = 12; - ExtendInCheck = false; - HeightMultiplier = 64; - HistoryThreshold = 50; - LowDepthMargin = 1125; - MinDepthMultiplier = 48; - MinTransMoveDepth = 16; - NullReduction = 8; - QSAlphaThreshold = 200; - SearchDepthMin = 20; - SearchDepthReduction = 6; - TopMinDepth = 14; - UndoCountThreshold = 15; - ValueCut = 15000; - VerifyNull = true; - VerifyReduction = 2; - -// Split Depths - SplitAtCN = true; - ANSplitDepth = 12; - CNSplitDepth = 14; - PVSplitDepth = 12; - -// Time Management - AbsoluteFactor = 25; - BattleFactor = 100; - EasyFactor = 15; - EasyFactorPonder = 33; - NormalFactor = 75; - -//UCI Info Strings - CPULoadInfo = false; - CurrMoveInfo = false; - DepthInfo = false; - HashFullInfo = false; - LowDepthPVs = false; - NPSInfo = false; - VerboseUCI = false; - MinPVDepth = 15; - -#ifdef RobboBases - TBHitInfo = false; -#endif - -//Miscellaneous - CfgFile = 0; - CfgFound = false; - InfiniteLoop = false; - MultiPV = 1; - NumThreads = 1; - OptMaxThreads = MaxCPUs; - Ponder = false; - RandRange = 20; - SearchIsDone = true; - SMPisActive = false; - StallMode = false; - StallInput = false; - SuppressInput = false; - UCINewGame = false; - -#ifdef Log - WriteLog = false; -#endif - -//RobboBases -#ifdef RobboBases - AutoloadTotalBases = false; - AutoloadTripleBases = false; - TotalBaseCache = 1; - TripleBaseHash = 1; - DynamicTripleBaseCache = 1; - UseRobboBases = false; - VerboseRobboBases = false; - strcpy(TripleDir, ""); - strcpy(TotalDir, ""); - TripleBasesLoaded = false; - TotalBasesLoaded = false; - SearchRobboBases = true; -#endif - } - -int main() - { - ShowBanner(); - SetPOPCNT(); - InitHashTables(); - InitRootPosition(); - InitGlobals(); - RPinit(); - -#ifdef InitCFG - read_cfg_file("fire.cfg"); -#endif - - CurrentHashSize = OptHashSize; - CurrentPHashSize = OptPHashSize; - InitHash(CurrentHashSize); - -#ifdef RobboBases - InitTripleHash(TripleBaseHash); -#endif - - InitCaptureValues(); - InitPawns(); - NewGame(RootPosition0, true); - InputBuffer = malloc(65536); - input_ptr = InputBuffer; - -#ifdef RobboBases - SearchRobboBases = true; - TotalInit(); - if (UseRobboBases) - { - if (AutoloadTotalBases) - RegisterRobboTotalBases(); - InitTotalBaseCache(TotalBaseCache); - if (AutoloadTripleBases) - LoadRobboTripleBases(); - } -#endif - -#ifdef LinuxLargePages - LinuxHandleSignals(); -#endif - - InitSMP(); - while (1) - Input(RootPosition0); - return 0; - } \ No newline at end of file diff --git a/Firenzina/make_move.c b/Firenzina/make_move.c deleted file mode 100644 index e89d4b7..0000000 --- a/Firenzina/make_move.c +++ /dev/null @@ -1,365 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#include "make_unmake.h" -#include "material_value.h" - -#define RevCastle(Pos) (Pos)->Dyn->reversible = 0 - -typedef enum - { - ooK = 1, - ooQ = 2, - ook = 4, - ooq = 8 - } CastlingTable; -typedef enum - { - KQkq = ooK | ooQ | ook | ooq, - Qkq = ooQ | ook | ooq, - Kkq = ooK | ook | ooq, - kq = ook | ooq, - KQk = ooK | ooQ | ook, - KQ = ooK | ooQ, - KQq = ooK | ooQ | ooq - } KQkqTable; -static const uint64 CastleTable[64] = - { - Kkq, KQkq, KQkq, KQkq, kq, KQkq, KQkq, Qkq, - KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, - KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, - KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, - KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, - KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, - KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, KQkq, - KQk, KQkq, KQkq, KQkq, KQ, KQkq, KQkq, KQq - }; -const static uint64 WhiteEP[8] = - { - Bitboard2 (B4, B4), Bitboard2 (A4, C4), - Bitboard2 (B4, D4), Bitboard2 (C4, E4), - Bitboard2 (D4, F4), Bitboard2 (E4, G4), - Bitboard2 (F4, H4), Bitboard2 (G4, G4) - }; -const static uint64 BlackEP[8] = - { - Bitboard2 (B5, B5), Bitboard2 (A5, C5), - Bitboard2 (B5, D5), Bitboard2 (C5, E5), - Bitboard2 (D5, F5), Bitboard2 (E5, G5), - Bitboard2 (F5, H5), Bitboard2 (G5, G5) - }; -const static uint8 PromW[8] = - { - 0, 0, 0, 0, wEnumN, wEnumBL, wEnumR, wEnumQ - }; -const static uint8 PromB[8] = - { - 0, 0, 0, 0, bEnumN, bEnumBL, bEnumR, bEnumQ - }; -static INLINE void MakeWhiteOO(typePos *Position, int to) - { - if (to == G1) - { - wBitboardOcc ^= F1H1; - wBitboardR ^= F1H1; - Position->OccupiedBW ^= F1H1; - Position->Dyn->Static += PST(wEnumR, F1) - PST(wEnumR, H1); - Position->Dyn->Hash ^= Hash(wEnumR, F1) ^ Hash(wEnumR, H1); - Position->sq[H1] = 0; - Position->sq[F1] = wEnumR; - } - else if (to == C1) - { - wBitboardOcc ^= A1D1; - wBitboardR ^= A1D1; - Position->OccupiedBW ^= A1D1; - Position->Dyn->Static += PST(wEnumR, D1) - PST(wEnumR, A1); - Position->Dyn->Hash ^= Hash(wEnumR, A1) ^ Hash(wEnumR, D1); - Position->sq[A1] = 0; - Position->sq[D1] = wEnumR; - } - } -static INLINE void MakeBlackOO(typePos *Position, int to) - { - if (to == G8) - { - bBitboardOcc ^= F8H8; - bBitboardR ^= F8H8; - Position->OccupiedBW ^= F8H8; - Position->Dyn->Static += PST(bEnumR, F8) - PST(bEnumR, H8); - Position->Dyn->Hash ^= Hash(bEnumR, F8) ^ Hash(bEnumR, H8); - Position->sq[H8] = 0; - Position->sq[F8] = bEnumR; - } - else if (to == C8) - { - bBitboardOcc ^= A8D8; - bBitboardR ^= A8D8; - Position->OccupiedBW ^= A8D8; - Position->Dyn->Static += PST(bEnumR, D8) - PST(bEnumR, A8); - Position->Dyn->Hash ^= Hash(bEnumR, A8) ^ Hash(bEnumR, D8); - Position->sq[A8] = 0; - Position->sq[D8] = bEnumR; - } - } -void MakeWhite(typePos *Position, uint32 move) - { - int fr, to, pi, fl, cp, z; - uint64 mask; - Position->nodes++; - memcpy(Position->Dyn + 1, Position->Dyn, 32); - fr = From(move); - to = To(move); - pi = Position->sq[fr]; - Position->Dyn++; - Position->Dyn->reversible++; - Position->Dyn->move = move; - fl = CastleTable[fr] & CastleTable[to] & Position->Dyn->oo; - Position->Dyn->Hash ^= HashCastling[Position->Dyn->oo ^ fl]; - Position->Dyn->PawnHash ^= HashCastling[Position->Dyn->oo ^ fl]; - Position->Dyn->oo = fl; - if (Position->Dyn->ep) - { - Position->Dyn->Hash ^= HashEP[Position->Dyn->ep & 7]; - Position->Dyn->ep = 0; - } - Position->sq[fr] = 0; - mask = SqClear[fr]; - wBitboardOcc &= mask; - Position->bitboard[pi] &= mask; - ClearOccupied(mask, fr); - Position->Dyn->Static += PST(pi, to) - PST(pi, fr); - mask = Hash(pi, fr) ^ Hash(pi, to); - cp = Position->sq[to]; - Position->Dyn->cp = cp; - Position->Dyn->Hash ^= mask; - if (pi == wEnumP) - Position->Dyn->PawnHash ^= mask; - Position->wtm ^= 1; - Position->height++; - Position->Dyn->Hash ^= HashWTM; - if (pi == wEnumK) - { - Position->Dyn->PawnHash ^= mask; - Position->wKsq = to; - } - if (cp) - { - mask = SqClear[to]; - bBitboardOcc &= mask; - Position->bitboard[cp] &= mask; - Position->Dyn->material -= MaterialValue[cp]; - Position->Dyn->Static -= PST(cp, to); - if (cp == bEnumP) - Position->Dyn->PawnHash ^= Hash(cp, to); - Position->Dyn->Hash ^= Hash(cp, to); - Position->Dyn->reversible = 0; - } - else - { - mask = SqSet[to]; - SetOccupied(mask, to); - if (MoveIsOO(move)) - { - RevCastle(Position); - MakeWhiteOO(Position, to); - } - } - Position->sq[to] = pi; - wBitboardOcc |= SqSet[to]; - Position->bitboard[pi] |= SqSet[to]; - if (pi == wEnumP) - { - Position->Dyn->reversible = 0; - if (MoveIsEP(move)) - { - z = to ^ 8; - mask = SqClear[z]; - bBitboardOcc &= mask; - bBitboardP &= mask; - ClearOccupied(mask, z); - Position->Dyn->material -= MaterialValue[bEnumP]; - Position->Dyn->Static -= PST(bEnumP, z); - Position->Dyn->Hash ^= Hash(bEnumP, z); - Position->Dyn->PawnHash ^= Hash(bEnumP, z); - Position->sq[z] = 0; - } - else if (MoveIsProm(move)) - { - pi = PromW[(move & FlagMask) >> 12]; - if (pi == wEnumBL && SqSet[to] & Black) - pi = wEnumBD; - Position->sq[to] = pi; - if (Position->bitboard[pi]) - Position->Dyn->material |= 0x80000000; - wBitboardP &= SqClear[to]; - Position->bitboard[pi] |= SqSet[to]; - Position->Dyn->material += MaterialValue[pi] - MaterialValue[wEnumP]; - Position->Dyn->Static += PST(pi, to) - PST(wEnumP, to); - Position->Dyn->Hash ^= Hash(pi, to) ^ Hash(wEnumP, to); - Position->Dyn->PawnHash ^= Hash(wEnumP, to); - } - else if ((to ^ fr) == 16) - { - if (WhiteEP[to & 7] & bBitboardP) - { - z = (fr + to) >> 1; - Position->Dyn->ep = z; - Position->Dyn->Hash ^= HashEP[z & 7]; - } - } - } - Position->Stack[++(Position->StackHeight)] = Position->Dyn->Hash; - } -void MakeBlack(typePos *Position, uint32 move) - { - int fr, to, pi, fl, cp, z; - uint64 mask; - Position->nodes++; - memcpy(Position->Dyn + 1, Position->Dyn, 32); - fr = From(move); - to = To(move); - pi = Position->sq[fr]; - Position->Dyn++; - Position->Dyn->reversible++; - Position->Dyn->move = move; - fl = CastleTable[fr] & CastleTable[to] & Position->Dyn->oo; - Position->Dyn->Hash ^= HashCastling[Position->Dyn->oo ^ fl]; - Position->Dyn->PawnHash ^= HashCastling[Position->Dyn->oo ^ fl]; - Position->Dyn->oo = fl; - if (Position->Dyn->ep) - { - Position->Dyn->Hash ^= HashEP[Position->Dyn->ep & 7]; - Position->Dyn->ep = 0; - } - Position->sq[fr] = 0; - mask = SqClear[fr]; - bBitboardOcc &= mask; - Position->bitboard[pi] &= mask; - ClearOccupied(mask, fr); - Position->Dyn->Static += PST(pi, to) - PST(pi, fr); - mask = Hash(pi, fr) ^ Hash(pi, to); - cp = Position->sq[to]; - Position->Dyn->cp = cp; - Position->Dyn->Hash ^= mask; - if (pi == bEnumP) - Position->Dyn->PawnHash ^= mask; - Position->wtm ^= 1; - Position->height++; - Position->Dyn->Hash ^= HashWTM; - if (pi == bEnumK) - { - Position->Dyn->PawnHash ^= mask; - Position->bKsq = to; - } - if (cp) - { - mask = SqClear[to]; - wBitboardOcc &= mask; - Position->bitboard[cp] &= mask; - Position->Dyn->material -= MaterialValue[cp]; - Position->Dyn->Static -= PST(cp, to); - if (cp == wEnumP) - Position->Dyn->PawnHash ^= Hash(cp, to); - Position->Dyn->Hash ^= Hash(cp, to); - Position->Dyn->reversible = 0; - } - else - { - mask = SqSet[to]; - SetOccupied(mask, to); - if (MoveIsOO(move)) - { - RevCastle(Position); - MakeBlackOO(Position, to); - } - } - Position->sq[to] = pi; - bBitboardOcc |= SqSet[to]; - Position->bitboard[pi] |= SqSet[to]; - if (pi == bEnumP) - { - Position->Dyn->reversible = 0; - if (MoveIsEP(move)) - { - z = to ^ 8; - mask = SqClear[z]; - wBitboardOcc &= mask; - wBitboardP &= mask; - ClearOccupied(mask, z); - Position->Dyn->material -= MaterialValue[wEnumP]; - Position->Dyn->Static -= PST(wEnumP, z); - Position->Dyn->Hash ^= Hash(wEnumP, z); - Position->Dyn->PawnHash ^= Hash(wEnumP, z); - Position->sq[z] = 0; - } - else if (MoveIsProm(move)) - { - pi = PromB[(move & FlagMask) >> 12]; - if (pi == bEnumBL && SqSet[to] & Black) - pi = bEnumBD; - Position->sq[to] = pi; - if (Position->bitboard[pi]) - Position->Dyn->material |= 0x80000000; - Position->bitboard[bEnumP] &= SqClear[to]; - Position->bitboard[pi] |= SqSet[to]; - Position->Dyn->material += MaterialValue[pi] - MaterialValue[bEnumP]; - Position->Dyn->Static += PST(pi, to) - PST(bEnumP, to); - Position->Dyn->Hash ^= Hash(pi, to) ^ Hash(bEnumP, to); - Position->Dyn->PawnHash ^= Hash(bEnumP, to); - } - else if ((to ^ fr) == 16) - { - if (BlackEP[to & 7] & wBitboardP) - { - z = (fr + to) >> 1; - Position->Dyn->ep = z; - Position->Dyn->Hash ^= HashEP[z & 7]; - } - } - } - Position->Stack[++(Position->StackHeight)] = Position->Dyn->Hash; - } -void Make(typePos *Position, uint32 move) - { - if (Position->wtm) - { - if (NodeCheck & 4095) - NodeCheck--; - Position->nodes--; - MakeWhite(Position, move); - } - else - { - Position->nodes--; - MakeBlack(Position, move); - } - } \ No newline at end of file diff --git a/Firenzina/make_unmake.h b/Firenzina/make_unmake.h deleted file mode 100644 index f23eb80..0000000 --- a/Firenzina/make_unmake.h +++ /dev/null @@ -1,50 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define Bitboard2(x, y) (1ULL << (x))|(1ULL << (y)) -#define F1H1 Bitboard2 (F1, H1) -#define F1H1Left90 Bitboard2 (47, 63) -#define F1H1Left45 Bitboard2 (20, 35) -#define F1H1Right45 Bitboard2 (3, 0) -#define A1D1 Bitboard2 (A1, D1) -#define A1D1Left90 Bitboard2 (7, 31) -#define A1D1Left45 Bitboard2 (0, 9) -#define A1D1Right45 Bitboard2 (28, 10) -#define F8H8 Bitboard2 (F8, H8) -#define F8H8Left90 Bitboard2 (40, 56) -#define F8H8Left45 Bitboard2 (58, 63) -#define F8H8Right45 Bitboard2 (48, 35) -#define A8D8 Bitboard2 (A8, D8) -#define A8D8Left90 Bitboard2 (0, 24) -#define A8D8Left45 Bitboard2 (28, 49) -#define A8D8Right45 Bitboard2 (63, 57) - -#define ClearOccupied(M, x) { Position->OccupiedBW &= M; } -#define SetOccupied(M, x) { Position->OccupiedBW |= M; } diff --git a/Firenzina/material_value.c b/Firenzina/material_value.c deleted file mode 100644 index 7dd4445..0000000 --- a/Firenzina/material_value.c +++ /dev/null @@ -1,790 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#define QueenEnding 1 -#define RookEnding 2 -#define OppositeBishopEnding 3 -#define BishopEnding 4 -#define KnightEnding 5 -#define BishopKnightEnding 6 -#define PawnEnding 7 -#define WhiteMinorOnly 8 -#define BlackMinorOnly 16 -#define BishopKnightMate 32 - -#define Value4(w, x, y, z) \ - ((((uint64) (z)) << 48) + (((uint64) (y)) << 32) + \ - (((uint64) (x)) << 16) + (((uint64) (w)) << 0)) -#define Value4Scaled(w, x, y, z, av, sc) \ - Value4 ((w * sc) / av, (x * sc) / av, (y * sc) / av, (z * sc) / av) - -#ifdef MatFactors -#define Factor1 80 -#define Factor2 90 -#define Factor3 110 -#define Factor4 120 -#define ValueP Value4 (PValue * Factor1 / 100, PValue * Factor2 / 100, PValue * Factor3 / 100, PValue * Factor4 / 100) -#define ValueN Value4 (NValue * Factor1 / 100, NValue * Factor2 / 100, NValue * Factor3 / 100, NValue * Factor4 / 100) -#define ValueB Value4 (BValue * Factor1 / 100, BValue * Factor2 / 100, BValue * Factor3 / 100, BValue * Factor4 / 100) -#define ValueR Value4 (RValue * Factor1 / 100, RValue * Factor2 / 100, RValue * Factor3 / 100, RValue * Factor4 / 100) -#define ValueQ Value4 (QValue * Factor1 / 100, QValue * Factor2 / 100, QValue * Factor3 / 100, QValue * Factor4 / 100) -#define ValueBP Value4 (BPValue * Factor1 / 100, BPValue * Factor2 / 100, BPValue * Factor3 / 100, BPValue * Factor4 / 100) -#else -#define ValueP Value4Scaled (80, 90, 110, 125, 100, PValue) -#define ValueN Value4Scaled (270, 295, 345, 370, 320, NValue) -#define ValueB Value4Scaled (280, 305, 355, 380, 330, BValue) -#define ValueR Value4Scaled (410, 460, 560, 610, 510, RValue) -#define ValueQ Value4Scaled (850, 925, 1075, 1150, 1000, QValue) -#define ValueBP Value4Scaled (30, 40, 60, 70, 50, BPValue) -#endif - -#define KnightPawnAdjust Value4 (0, 2, 4, 5) -#define RookPawnAdjust Value4 (5, 4, 2, 0) - -#define Phase_Minor (1) -#define PhaseRook (3) -#define PhaseQueen (6) - -static int InitFlags(int wP, int wN, int wB, int wBL, int wBD, int wR, int wQ, int bP, int bN, int bB, int bBL, - int bBD, int bR, int bQ) - { - uint8 Flags = ((wN || wB || wQ || wR) << 1) | ((bN || bB || bQ || bR) << 0); - if (!wQ && !wR && wB + wN == 1 && wP <= 4 && bP <= 4) - Flags &= 1; - if (!bQ && !bR && bB + bN == 1 && wP <= 4 && bP <= 4) - Flags &= 2; - if (wQ == 1 && bQ == 1 && !wR && !bR && !wB && !bB && !wN && !bN) - Flags |= QueenEnding << 2; - if (wR == 1 && bR == 1 && !wQ && !bQ && !wB && !bB && !wN && !bN) - Flags |= RookEnding << 2; - if (wB == 1 && bB == 1 && !wQ && !bQ && !wR && !bR && !wN && !bN) - { - if ((wBL == 1 && bBD == 1) || (wBD == 1 && bBL == 1)) - Flags |= BishopEnding << 2; - else - Flags |= OppositeBishopEnding << 2; - Flags |= (WhiteMinorOnly | BlackMinorOnly) << 2; - } - if (wN == 1 && bN == 1 && !wQ && !bQ && !wR && !bR && !wB && !bB) - Flags |= KnightEnding << 2; - if (wN == 1 && bB == 1 && !wQ && !bQ && !wR && !bR && !wB && !bN) - Flags |= BishopKnightEnding << 2; - if (wB == 1 && bN == 1 && !wQ && !bQ && !wR && !bR && !bB && !wN) - Flags |= BishopKnightEnding << 2; - if (wB == 1 && !wQ && !wR && !wN) - Flags |= WhiteMinorOnly << 2; - if (bB == 1 && !bQ && !bR && !bN) - Flags |= BlackMinorOnly << 2; - if (wN == 1 && !wQ && !wR && !wB) - Flags |= WhiteMinorOnly << 2; - if (bN == 1 && !bQ && !bR && !bB) - Flags |= BlackMinorOnly << 2; - if (!wN && !wB && !wR && !wQ && !bN && !bB && !bQ && !bQ && wP + bP == 1) - Flags |= PawnEnding << 2; - if (wN == 1 && wB == 1 && !wR && !wQ && !wP && !bQ && !bR && !bB && !bN && !bP) - Flags |= BishopKnightMate << 2; - if (bN == 1 && bB == 1 && !bR && !bQ && !bP && !wQ && !wR && !wB && !wN && !wP) - Flags |= BishopKnightMate << 2; - return Flags; - } -static int InitTokens(int wP, int wN, int wB, int wBL, int wBD, int wR, int wQ, int bP, int bN, int bB, int bBL, - int bBD, int bR, int bQ) - { - int token = 0x80; - if (wN == 0 && bN == 0 && wB == 0 && bB == 0 && wR == 0 && bR == 0 && wQ == 1 && bQ == 1) - token = 0x70 + MAX(wP, bP); - if (wN == 0 && bN == 0 && wB == 0 && bB == 0 && wQ == 0 && bQ == 0 && wR == 1 && bR == 1) - token = 0x60 + (MAX(wP, bP) << 1); - if (wN == 0 && bN == 0 && wR == 0 && bR == 0 && wQ == 0 && bQ == 0 && wB == 1 && bB == 1) - { - if ((wBL == 1 && wBD == 0 && bBL == 0 && bBD == 1) || (wBL == 0 && wBD == 1 && bBL == 1 && bBD == 0)) - token = 0x30 + (MAX(wP, bP) << 2); - else - token = 0x78 + (MAX(wP, bP) << 1); - } - if (wN == 1 && bN == 1 && wR == 0 && bR == 0 && wQ == 0 && bQ == 0 && wB == 0 && bB == 0) - token = 0x80 + MAX(wP, bP); - if (wN == 0 && bN == 0 && wR == 0 && bR == 0 && wQ == 0 && bQ == 0 && wB == 0 && bB == 0) - token = 0xc0 - (MAX(wP, bP) << 3); - if (wN == 0 && bN == 0 && wB == 1 && bB == 1 && wR == 1 && bR == 1 && wQ == 0 && bQ == 0) - { - if ((wBL == 1 && wBD == 0 && bBL == 0 && bBD == 1) || (wBL == 0 && wBD == 1 && bBL == 1 && bBD == 0)) - token = 0x70 + MAX(wP, bP); - } - return token; - } -static int WhiteWeight(int wP, int wN, int wB, int wBL, int wBD, int wR, int wQ, int bP, int bN, int bB, int bBL, - int bBD, int bR, int bQ) - { - int wMinor, bMinor, wPhase, bPhase, wWeight, wValue, bValue; - wMinor = wB + wN; - bMinor = bB + bN; - wPhase = wMinor + (wR << 1) + (wQ << 2); - bPhase = bMinor + (bR << 1) + (bQ << 2); - wValue = 3 * (wB + wN) + 5 * wR + 9 * wQ; - bValue = 3 * (bB + bN) + 5 * bR + 9 * bQ; - wWeight = 10; - if (!wP) - { - if (wPhase == 1) - wWeight = 0; - if (wPhase == 2) - { - if (bPhase == 0) - { - if (wN == 2) - { - if (bP >= 1) - wWeight = 3; - else - wWeight = 0; - } - } - if (bPhase == 1) - { - wWeight = 1; - if (wB == 2 && bN == 1) - wWeight = 8; - if (wR == 1 && bN == 1) - wWeight = 2; - } - if (bPhase == 2) - wWeight = 1; - } - if (wPhase == 3 && wR == 1) - { - if (bPhase == 2 && bR == 1) - { - if (wN == 1) - wWeight = 1; - if (wB == 1) - wWeight = 1; - } - if (bPhase == 2 && bR == 0) - { - wWeight = 2; - if (wB == 1 && bN == 2) - wWeight = 6; - if (bN == 1 && ((wBL == 1 && bBL == 1) || (wBD == 1 && bBD == 1))) - wWeight = 2; - if (bN == 1 && ((wBD == 1 && bBL == 1) || (wBL == 1 && bBD == 1))) - wWeight = 7; - } - if (bPhase == 3) - wWeight = 2; - } - if (wPhase == 3 && wR == 0) - { - if (bPhase == 2 && bR == 1) - { - if (wN == 2) - wWeight = 2; - if (wB == 2) - wWeight = 7; - } - if (bPhase == 2 && bR == 0) - { - wWeight = 2; - if (wB == 2 && bN == 2) - wWeight = 4; - } - if (bPhase == 3) - wWeight = 2; - } - if (wPhase == 4 && wQ) - { - if (bPhase == 2 && bN == 2) - wWeight = 2; - if (bPhase == 2 && bN == 1) - wWeight = 8; - if (bPhase == 2 && bN == 0) - wWeight = 7; - if (bPhase == 3) - wWeight = 1; - if (bPhase == 4) - wWeight = 1; - } - if (wPhase == 4 && wR == 2) - { - if (bPhase == 2 && bR == 0) - wWeight = 7; - if (bPhase == 3) - wWeight = 2; - if (bPhase == 4) - wWeight = 1; - } - if (wPhase == 4 && wR == 1) - { - if (bPhase == 3 && bR == 1) - wWeight = 3; - if (bPhase == 3 && bR == 0) - wWeight = 2; - if (bPhase == 4) - wWeight = 2; - } - if (wPhase == 4 && wR == 0 && wQ == 0) - { - if (bPhase == 3 && bR == 1) - wWeight = 4; - if (bPhase == 3 && bR == 0) - wWeight = 2; - if (bPhase == 4 && bQ) - wWeight = 8; - if (bPhase == 4 && bQ == 0) - wWeight = 1; - } - if (wPhase == 5 && wQ) - { - if (bPhase == 4) - wWeight = 2; - if (bPhase == 5) - wWeight = 1; - if (bPhase == 4 && bR == 2) - { - if (wN) - wWeight = 3; - if (wB) - wWeight = 7; - } - if (bPhase == 5) - wWeight = 1; - } - if (wPhase == 5 && wR == 1) - { - if (bPhase == 4 && bQ) - wWeight = 9; - if (bPhase == 4 && bR == 2) - wWeight = 7; - if (bPhase == 4 && bR == 1) - wWeight = 3; - if (bPhase == 4 && bQ == 0 && bR == 0) - wWeight = 1; - if (bPhase == 5) - wWeight = 2; - } - if (wPhase == 5 && wR == 2) - { - if (bPhase == 4 && bQ && wB == 1) - wWeight = 8; - if (bPhase == 4 && bQ && wN == 1) - wWeight = 7; - if (bPhase == 4 && bR == 2) - wWeight = 3; - if (bPhase == 4 && bR == 1) - wWeight = 2; - if (bPhase == 4 && bQ == 0 && bR == 0) - wWeight = 1; - if (bPhase == 5) - wWeight = 1; - } - if (wPhase == 6 && wQ && wR) - { - if (bPhase == 4 && bQ == 0 && bR == 0) - wWeight = 2; - if (bPhase == 5 && bQ) - wWeight = 1; - if (bPhase == 4 && bR == 1) - wWeight = 6; - if (bPhase == 4 && bR == 2) - wWeight = 3; - if (bPhase == 5 && bR) - wWeight = 1; - if (bPhase == 6) - wWeight = 1; - } - if (wPhase == 6 && wQ && wR == 0) - { - if (bPhase == 4 && bQ == 0 && bR == 0) - wWeight = 5; - if (bPhase == 5 && bQ) - wWeight = 2; - if (bPhase == 5 && bR == 2) - wWeight = 2; - if (bPhase == 5 && bR == 1) - wWeight = 1; - if (bPhase == 6) - wWeight = 1; - } - if (wPhase == 6 && wQ == 0 && wR == 2) - { - if (bPhase == 5 && bQ) - wWeight = 7; - if (bPhase == 5 && bR == 1) - wWeight = 1; - if (bPhase == 5 && bR == 2) - wWeight = 2; - if (bPhase == 6) - wWeight = 1; - } - if (wPhase == 6 && wQ == 0 && wR == 1) - { - if (bPhase == 5 && bQ) - wWeight = 9; - if (bPhase == 5 && bR == 2) - wWeight = 3; - if (bPhase == 5 && bR == 1) - wWeight = 2; - if (bPhase == 6) - wWeight = 1; - if (bPhase == 6 && bQ) - wWeight = 2; - if (bPhase == 6 && bQ && bR) - wWeight = 4; - } - if (wPhase >= 7) - { - if (wValue > bValue + 4) - wWeight = 9; - if (wValue == bValue + 4) - wWeight = 7; - if (wValue == bValue + 3) - wWeight = 4; - if (wValue == bValue + 2) - wWeight = 2; - if (wValue < bValue + 2) - wWeight = 1; - } - } - if (wP == 1) - { - if (bPhase == 1) - { - if (wPhase == 1) - wWeight = 3; - if (wPhase == 2 && wN == 2) - { - if (bP == 0) - wWeight = 3; - else - wWeight = 5; - } - if (wPhase == 2 && wR == 1) - wWeight = 7; - } - if (bPhase == 2 && bR == 1 && wPhase == 2 && wR == 1) - wWeight = 8; - if (bPhase == 2 && bR == 0 && wPhase == 2) - wWeight = 4; - if (bPhase >= 3 && bMinor > 0 && wPhase == bPhase) - wWeight = 3; - if (bPhase >= 3 && bMinor == 0 && wPhase == bPhase) - wWeight = 5; - if (bPhase == 4 && bQ == 1 && wPhase == bPhase) - wWeight = 7; - } - return wWeight; - } -static int BlackWeight(int wP, int wN, int wB, int wBL, int wBD, int wR, int wQ, int bP, int bN, int bB, int bBL, - int bBD, int bR, int bQ) - { - int wMinor, bMinor, wPhase, bPhase, bWeight, wValue, bValue; - wMinor = wB + wN; - bMinor = bB + bN; - wPhase = wMinor + (wR << 1) + (wQ << 2); - bPhase = bMinor + (bR << 1) + (bQ << 2); - wValue = 3 * (wB + wN) + 5 * wR + 9 * wQ; - bValue = 3 * (bB + bN) + 5 * bR + 9 * bQ; - bWeight = 10; - if (!bP) - { - if (bPhase == 1) - bWeight = 0; - if (bPhase == 2) - { - if (wPhase == 0) - { - if (bN == 2) - { - if (bP >= 1) - bWeight = 3; - else - bWeight = 0; - } - } - if (wPhase == 1) - { - bWeight = 1; - if (bB == 2 && wN == 1) - bWeight = 8; - if (bR == 1 && wN == 1) - bWeight = 2; - } - if (wPhase == 2) - bWeight = 1; - } - if (bPhase == 3 && bR == 1) - { - if (wPhase == 2 && wR == 1) - { - if (bN == 1) - bWeight = 1; - if (bB == 1) - bWeight = 1; - } - if (wPhase == 2 && wR == 0) - { - bWeight = 2; - if (bB == 1 && wN == 2) - bWeight = 6; - if (wN == 1 && ((bBL == 1 && wBL == 1) || (bBD == 1 && wBD == 1))) - bWeight = 2; - if (wN == 1 && ((bBD == 1 && wBL == 1) || (bBL == 1 && wBD == 1))) - bWeight = 7; - } - if (wPhase == 3) - bWeight = 2; - } - if (bPhase == 3 && bR == 0) - { - if (wPhase == 2 && wR == 1) - { - if (bN == 2) - bWeight = 2; - if (bB == 2) - bWeight = 7; - } - if (wPhase == 2 && wR == 0) - { - bWeight = 2; - if (bB == 2 && wN == 2) - bWeight = 4; - } - if (wPhase == 3) - bWeight = 2; - } - if (bPhase == 4 && bQ) - { - if (wPhase == 2 && wN == 2) - bWeight = 2; - if (wPhase == 2 && wN == 1) - bWeight = 8; - if (wPhase == 2 && wN == 0) - bWeight = 7; - if (wPhase == 3) - bWeight = 1; - if (wPhase == 4) - bWeight = 1; - } - if (bPhase == 4 && bR == 2) - { - if (wPhase == 2 && wR == 0) - bWeight = 7; - if (wPhase == 3) - bWeight = 2; - if (wPhase == 4) - bWeight = 1; - } - if (bPhase == 4 && bR == 1) - { - if (wPhase == 3 && wR == 1) - bWeight = 3; - if (wPhase == 3 && wR == 0) - bWeight = 2; - if (wPhase == 4) - bWeight = 2; - } - if (bPhase == 4 && bR == 0 && bQ == 0) - { - if (wPhase == 3 && wR == 1) - bWeight = 4; - if (wPhase == 3 && wR == 0) - bWeight = 2; - if (wPhase == 4 && wQ) - bWeight = 8; - if (wPhase == 4 && wQ == 0) - bWeight = 1; - } - if (bPhase == 5 && bQ) - { - if (wPhase == 4) - bWeight = 2; - if (wPhase == 5) - bWeight = 1; - if (wPhase == 4 && wR == 2) - { - if (bN) - bWeight = 3; - if (bB) - bWeight = 7; - } - if (wPhase == 5) - bWeight = 1; - } - if (bPhase == 5 && bR == 1) - { - if (wPhase == 4 && wQ) - bWeight = 9; - if (wPhase == 4 && wR == 2) - bWeight = 7; - if (wPhase == 4 && wR == 1) - bWeight = 3; - if (wPhase == 4 && wQ == 0 && wR == 0) - bWeight = 1; - if (wPhase == 5) - bWeight = 2; - } - if (bPhase == 5 && bR == 2) - { - if (wPhase == 4 && wQ && bB == 1) - bWeight = 8; - if (wPhase == 4 && wQ && bN == 1) - bWeight = 7; - if (wPhase == 4 && wR == 2) - bWeight = 3; - if (wPhase == 4 && wR == 1) - bWeight = 2; - if (wPhase == 4 && wQ == 0 && wR == 0) - bWeight = 1; - if (wPhase == 5) - bWeight = 1; - } - if (bPhase == 6 && bQ && bR) - { - if (wPhase == 4 && wQ == 0 && wR == 0) - bWeight = 2; - if (wPhase == 5 && wQ) - bWeight = 1; - if (wPhase == 4 && wR == 1) - bWeight = 6; - if (wPhase == 4 && wR == 2) - bWeight = 3; - if (wPhase == 5 && wR) - bWeight = 1; - if (wPhase == 6) - bWeight = 1; - } - if (bPhase == 6 && bQ && bR == 0) - { - if (wPhase == 4 && wQ == 0 && wR == 0) - bWeight = 5; - if (wPhase == 5 && wQ) - bWeight = 2; - if (wPhase == 5 && wR == 2) - bWeight = 2; - if (wPhase == 5 && wR == 1) - bWeight = 1; - if (wPhase == 6) - bWeight = 1; - } - if (bPhase == 6 && bQ == 0 && bR == 2) - { - if (wPhase == 5 && wQ) - bWeight = 7; - if (wPhase == 5 && wR == 1) - bWeight = 1; - if (wPhase == 5 && wR == 2) - bWeight = 2; - if (wPhase == 6) - bWeight = 1; - } - if (bPhase == 6 && bQ == 0 && bR == 1) - { - if (wPhase == 5 && wQ) - bWeight = 9; - if (wPhase == 5 && wR == 2) - bWeight = 3; - if (wPhase == 5 && wR == 1) - bWeight = 2; - if (wPhase == 6) - bWeight = 1; - if (wPhase == 6 && wQ) - bWeight = 2; - if (wPhase == 6 && wQ && wR) - bWeight = 4; - } - if (bPhase >= 7) - { - if (bValue > wValue + 4) - bWeight = 9; - if (bValue == wValue + 4) - bWeight = 7; - if (bValue == wValue + 3) - bWeight = 4; - if (bValue == wValue + 2) - bWeight = 2; - if (bValue < wValue + 2) - bWeight = 1; - } - } - if (bP == 1) - { - if (wPhase == 1) - { - if (bPhase == 1) - bWeight = 3; - if (bPhase == 2 && bN == 2) - { - if (wP == 0) - bWeight = 3; - else - bWeight = 5; - } - if (bPhase == 2 && bR == 1) - bWeight = 7; - } - if (wPhase == 2 && wR == 1 && bPhase == 2 && bR == 1) - bWeight = 8; - if (wPhase == 2 && wR == 0 && bPhase == 2) - bWeight = 4; - if (wPhase >= 3 && wMinor > 0 && bPhase == wPhase) - bWeight = 3; - if (wPhase >= 3 && wMinor == 0 && bPhase == wPhase) - bWeight = 5; - if (wPhase == 4 && wQ == 1 && bPhase == wPhase) - bWeight = 7; - } - return bWeight; - } - -static uint64 ComputeValue(int wP, int wN, int wB, int wBL, int wBD, int wR, int wQ, int bP, int bN, int bB, int bBL, - int bBD, int bR, int bQ) - { - uint64 va = 0; - int wMinor = wN + wB; - int bMinor = bN + bB; - - va += ((wB >> 1) - (bB >> 1)) * ValueBP; - va += (wP - bP) * ValueP; - va += (wN - bN) * ValueN; - va += (wB - bB) * ValueB; - va += (wR - bR) * ValueR; - va += (wQ - bQ) * ValueQ; - - if (wR == 2) - va -= Value4(16, 20, 28, 32); - if (bR == 2) - va += Value4(16, 20, 28, 32); - if (wQ + wR >= 2) - va -= Value4(8, 10, 14, 16); - if (bQ + bR >= 2) - va += Value4(8, 10, 14, 16); - if (wMinor > bMinor) - va += Value4(20, 15, 10, 5); - if (bMinor > wMinor) - va -= Value4(20, 15, 10, 5); - va -= (wP - 5) * wR * RookPawnAdjust; - va += (wP - 5) * wN * KnightPawnAdjust; - va += (bP - 5) * bR * RookPawnAdjust; - va -= (bP - 5) * bN * KnightPawnAdjust; - va -= (wP - 5) * (wB >> 1) * Value4(0, 1, 2, 3); - va += (bP - 5) * (bB >> 1) * Value4(0, 1, 2, 3); - if (wB == 2 && bMinor == 0) - va += Value4(5, 5, 5, 5); - if (bB == 2 && wMinor == 0) - va -= Value4(5, 5, 5, 5); - return va; - } - -static void CalculateMaterialValue(int c) - { - int wQ, bQ, wR, bR, wBL, bBL, wBD, bBD, wN, bN, wP, bP, n, Value, wB, bB; - int wt, wWeight, bWeight, phase, va1, va2, va3, va4; - uint64 va; - n = c; - wQ = n & 1; - n /= 2; - bQ = n & 1; - n /= 2; - wR = n % 3; - n /= 3; - bR = n % 3; - n /= 3; - wBL = n & 1; - n /= 2; - wBD = n & 1; - n /= 2; - bBL = n & 1; - n /= 2; - bBD = n & 1; - n /= 2; - wN = n % 3; - n /= 3; - bN = n % 3; - n /= 3; - wP = n % 9; - n /= 9; - bP = n % 9; - wB = wBL + wBD; - bB = bBL + bBD; - va = ComputeValue(wP, wN, wB, wBL, wBD, wR, wQ, bP, bN, bB, bBL, bBD, bR, bQ); - phase = Phase_Minor * (wN + wB + bN + bB) + PhaseRook * (wR + bR) + PhaseQueen * (wQ + bQ); - va1 = va & 0xffff; - va2 = ((va >> 16) & 0xffff) + (va1 > 0x8000); - va1 = (sint16)va1; - va3 = ((va >> 32) & 0xffff) + (va2 > 0x8000); - va2 = (sint16)va2; - va4 = ((va >> 48) & 0xffff) + (va3 > 0x8000); - va3 = (sint16)va3; - va4 = (sint16)va4; - if (phase < 8) - { - va4 *= 8 - phase; - va3 *= phase; - va = va3 + va4; - Value =(((int)va) >> 3); - } - else if (phase < 24) - { - va3 *= 24 - phase; - va2 *= phase - 8; - va = va2 + va3; - Value =((int)va) >> 4; - } - else - { - va2 *= 32 - phase; - va1 *= phase - 24; - va = va1 + va2; - Value =(((int)va) >> 3); - } - wWeight = WhiteWeight(wP, wN, wB, wBL, wBD, wR, wQ, bP, bN, bB, bBL, bBD, bR, bQ); - bWeight = BlackWeight(wP, wN, wB, wBL, wBD, wR, wQ, bP, bN, bB, bBL, bBD, bR, bQ); - if (Value > 0) - wt = wWeight; - else - wt = bWeight; - Value *= wt; - Value /= 10; - Value *= (MaterialWeight << 10) / 100; - Value >>= 10; - Material[c].Value = Value; - Material[c].token = InitTokens(wP, wN, wB, wBL, wBD, wR, wQ, bP, bN, bB, bBL, bBD, bR, bQ); - Material[c].flags = InitFlags(wP, wN, wB, wBL, wBD, wR, wQ, bP, bN, bB, bBL, bBD, bR, bQ); - } -int InitMaterialValue() - { - int c; - SetValueArray(); - for (c = 0; c < 419904; c++) - CalculateMaterialValue(c); - EvalHashClear(); - return false; - } \ No newline at end of file diff --git a/Firenzina/material_value.h b/Firenzina/material_value.h deleted file mode 100644 index a6b4b97..0000000 --- a/Firenzina/material_value.h +++ /dev/null @@ -1,36 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define I(a,b,c) ((a & 0xff) | (b << 8) | (0 << 27)) -const static uint32 MaterialValue[16] = - { - 0, I(0, 0x1440, 1), I(1, 0x240, 1), 0, I(1, 0x24, 1), I(1, 0x48, 1), I(3, 0x04, 1), I(6, 0x1, 1), - 0, I(0, 0xb640, 1), I(1, 0x6c0, 1), 0, I(1, 0x90, 1), I(1, 0x120, 1), I(3, 0xc, 1), I(6, 0x2, 1) - }; diff --git a/Firenzina/mem_handler.c b/Firenzina/mem_handler.c deleted file mode 100644 index f60e3d6..0000000 --- a/Firenzina/mem_handler.c +++ /dev/null @@ -1,218 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -#ifdef LinuxLargePages -#include -#include -#endif - -#ifdef LinuxLargePages -void SetupPrivileges() { } -void CreateMem(void ** A, int align, uint64 size, int *w, bool *use, char *string) - { - *w = shmget(IPC_PRIVATE, size, IPC_CREAT | SHM_R | SHM_W | SHM_HUGETLB); - if ((*w) == -1) - MemAlign((*A), align, size); - else - { - (*A) = shmat((*w), NULL, 0x0); - (*use) = true; - if (VerboseUCI) - Send("info string %s as HUGETLB %d\n", string, size >> 20); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - if (VerboseUCI) - fprintf(log_file, "info string %s as HUGETLB %d\n", string, size >> 20); - close_log(); - } -#endif - - } - } - if ((*w) == -1) - (*use) = false; - } - -void FreeMem(void *A, int *w, bool *use) - { - if (!A) - return; - if ((*w) == -1) - { - AlignedFree(A); - return; - } - shmdt(A); - shmctl((*w), IPC_RMID, NULL); - (*w) = -1; - (*use) = false; - } -#endif - -#ifdef LargePages -void CreateMem( void ** A, int align, uint64 size, int *w, bool *use, char *string ) - { - DWORD ErrorLP; - if (NoSupport == true) - goto NotSupported; - (*A) = VirtualAlloc(NULL, size, MEM_LARGE_PAGES | MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); - if ((*A)) - { - (*use) = true; - Send("%s LP Size = %dM allocated successfully\n", string, size >> 20); - if (VerboseUCI) - Send("info string %s Large Pages size %d\n", string, size >> 20); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "%s LP Size = %dM allocated successfully\n", string, size >> 20); - if (VerboseUCI) - fprintf(log_file, "info string %s Large Pages size %d\n", string, size >> 20); - close_log(); - } -#endif - - } - else - { - ErrorLP = GetLastError(); - if (ErrorLP == 1450) - Send("LP %s = %dM : Not enough memory, please reboot system\n", string, size >> 20); - else if (ErrorLP == 87) - Send("LP %s = %dM : Invalid memory size parameter\n", string, size >> 20); - else if (ErrorLP == 1314) - Send("LP %s = %dM : No privileges, enable in gpedit.msc\n", string, size >> 20); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - if (ErrorLP == 1450) - fprintf(log_file, "LP %s = %dM : Not enough memory, please reboot system\n", string, size >> 20); - else if (ErrorLP == 87) - fprintf(log_file, "LP %s = %dM : Invalid memory size parameter\n", string, size >> 20); - else if (ErrorLP == 1314) - fprintf(log_file, "LP %s = %dM : No privileges, enable in gpedit.msc\n", string, size >> 20); - close_log(); - } -#endif - - NotSupported: - (*use) = false; - MemAlign((*A), align, size); - } - } -void FreeMem( void *A, int *w, bool *use ) - { - if (!A) - return; - if (!( *use)) - { - AlignedFree(A); - return; - } - VirtualFree(A, 0, MEM_RELEASE); - } -void SetupPrivileges() - { - HANDLE token_handle; - TOKEN_PRIVILEGES tp; - int MinimumPSize = GetLargePageMinimum(); - if (!MinimumPSize) - { - Send("Large Pages not supported\n"); - if (VerboseUCI) - Send("info string Large Pages not supported\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Large Pages not supported\n"); - if (VerboseUCI) - fprintf(log_file, "info string Large Pages not supported\n"); - close_log(); - } -#endif - - NoSupport = true; - return; - } - NoSupport = false; - Send("Large Pages supported\n"); - Send("Minimum Large Pages size = %i\n", MinimumPSize); - if (VerboseUCI) - { - Send("info string Large Pages supported\n"); - Send("info string Minimum Large Pages size = %i\n", MinimumPSize); - } - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Large Pages supported\n"); - fprintf(log_file, "Minimum Large Pages size = %i\n", MinimumPSize); - if (VerboseUCI) - { - fprintf(log_file, "info string Large Pages supported\n"); - fprintf(log_file, "info string Minimum Large Pages size = %i\n", MinimumPSize); - } - close_log(); - } -#endif - - OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &token_handle); - LookupPrivilegeValue(NULL, TEXT("SeLockMemoryPrivilege"), &tp.Privileges[0].Luid); - tp.PrivilegeCount = 1; - tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; - AdjustTokenPrivileges(token_handle, false, &tp, 0, NULL, 0); - CloseHandle(token_handle); - } -#endif - -#if !defined( LinuxLargePages) && !defined(LargePages) -void FreeMem( void *A, int *w, bool *use ) - { - AlignedFree(A); - } -void CreateMem( void ** A, int align, uint64 size, int *w, bool *use, char *string ) - { - MemAlign((*A), align, size); - } -void SetupPrivileges() { } -#endif \ No newline at end of file diff --git a/Firenzina/mobility.c b/Firenzina/mobility.c deleted file mode 100644 index 081ce79..0000000 --- a/Firenzina/mobility.c +++ /dev/null @@ -1,190 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -void Mobility(typePos *Position) - { - uint64 U, A, T, AttB, AttR; - int b; - Position->Dyn->wXray = 0; - Position->Dyn->bXray = 0; - A = AttK[Position->wKsq]; - Position->Dyn->wAtt = A; - if (A & bBitboardK) - Position->Dyn->bKcheck = SqSet[Position->wKsq]; - else - Position->Dyn->bKcheck = 0; - A = AttK[Position->bKsq]; - Position->Dyn->bAtt = A; - if (A & wBitboardK) - Position->Dyn->wKcheck = SqSet[Position->bKsq]; - else - Position->Dyn->wKcheck = 0; - for (U = wBitboardN; U; BitClear(b, U)) - { - b = BSF(U); - A = AttN[b]; - Position->Dyn->wAtt |= A; - if (A & bBitboardK) - Position->Dyn->bKcheck |= SqSet[b]; - } - for (U = wBitboardB; U; BitClear(b, U)) - { - b = BSF(U); - A = AttB(b); - Position->Dyn->wAtt |= A; - if (A & bBitboardK) - Position->Dyn->bKcheck |= SqSet[b]; - else if (bBitboardK & Diag[b]) - { - T = AttB(Position->bKsq) & A; - Position->Dyn->wXray |= T; - if (T) - Position->XrayW[BSF(T)] = b; - } - } - for (U = wBitboardR; U; BitClear(b, U)) - { - b = BSF(U); - A = AttR(b); - Position->Dyn->wAtt |= A; - if (A & bBitboardK) - Position->Dyn->bKcheck |= SqSet[b]; - else if (bBitboardK & Ortho[b]) - { - T = AttR(Position->bKsq) & A; - Position->Dyn->wXray |= T; - if (T) - Position->XrayW[BSF(T)] = b; - } - } - for (U = wBitboardQ; U; BitClear(b, U)) - { - b = BSF(U); - AttR = AttR(b); - AttB = AttB(b); - A = AttB | AttR; - Position->Dyn->wAtt |= A; - if (A & bBitboardK) - Position->Dyn->bKcheck |= SqSet[b]; - else if (bBitboardK & Diag[b]) - { - T = AttB(Position->bKsq) & AttB; - Position->Dyn->wXray |= T; - if (T) - Position->XrayW[BSF(T)] = b; - } - else if (bBitboardK & Ortho[b]) - { - T = AttR(Position->bKsq) & AttR; - Position->Dyn->wXray |= T; - if (T) - Position->XrayW[BSF(T)] = b; - } - } - for (U = bBitboardN; U; BitClear(b, U)) - { - b = BSF(U); - A = AttN[b]; - Position->Dyn->bAtt |= A; - if (A & wBitboardK) - Position->Dyn->wKcheck |= SqSet[b]; - } - for (U = bBitboardB; U; BitClear(b, U)) - { - b = BSF(U); - A = AttB(b); - Position->Dyn->bAtt |= A; - if (A & wBitboardK) - Position->Dyn->wKcheck |= SqSet[b]; - else if (wBitboardK & Diag[b]) - { - T = AttB(Position->wKsq) & A; - Position->Dyn->bXray |= T; - if (T) - Position->XrayB[BSF(T)] = b; - } - } - for (U = bBitboardR; U; BitClear(b, U)) - { - b = BSF(U); - A = AttR(b); - Position->Dyn->bAtt |= A; - if (A & wBitboardK) - Position->Dyn->wKcheck |= SqSet[b]; - else if (wBitboardK & Ortho[b]) - { - T = AttR(Position->wKsq) & A; - Position->Dyn->bXray |= T; - if (T) - Position->XrayB[BSF(T)] = b; - } - } - for (U = bBitboardQ; U; BitClear(b, U)) - { - b = BSF(U); - AttB = AttB(b); - AttR = AttR(b); - A = AttB | AttR; - Position->Dyn->bAtt |= A; - if (A & wBitboardK) - Position->Dyn->wKcheck |= SqSet[b]; - else if (wBitboardK & Diag[b]) - { - T = AttB(Position->wKsq) & AttB; - Position->Dyn->bXray |= T; - if (T) - Position->XrayB[BSF(T)] = b; - } - else if (wBitboardK & Ortho[b]) - { - T = AttR(Position->wKsq) & AttR; - Position->Dyn->bXray |= T; - if (T) - Position->XrayB[BSF(T)] = b; - } - } - A = (wBitboardP &(~FileA)) << 7; - T = A & bBitboardK; - Position->Dyn->bKcheck |= (T >> 7); - Position->Dyn->wAtt |= A; - A = (wBitboardP &(~FileH)) << 9; - T = A & bBitboardK; - Position->Dyn->bKcheck |= (T >> 9); - Position->Dyn->wAtt |= A; - A = (bBitboardP &(~FileH)) >> 7; - T = A & wBitboardK; - Position->Dyn->wKcheck |= (T << 7); - Position->Dyn->bAtt |= A; - A = (bBitboardP &(~FileA)) >> 9; - T = A & wBitboardK; - Position->Dyn->wKcheck |= (T << 9); - Position->Dyn->bAtt |= A; - } \ No newline at end of file diff --git a/Firenzina/move.h b/Firenzina/move.h deleted file mode 100644 index 1c499b3..0000000 --- a/Firenzina/move.h +++ /dev/null @@ -1,103 +0,0 @@ -/* -Fire is a UCI chess playing engine by Kranium (Norman Schmidt) -Fire is based on Ippolit source code: http://ippolit.wikispaces.com/ -authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore copyright: (C) 2009 Yakov Petrovich Golyadkin -date: 92th and 93rd year from Revolution -owners: PUBLICDOMAIN (workers) -dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Fire 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 3 of the License, or -(at your option) any later version. - -Fire 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, see http://www.gnu.org/licenses/. -*/ - -#define WhiteInCheck (Position->Dyn->bAtt & wBitboardK) -#define BlackInCheck (Position->Dyn->wAtt & bBitboardK) -#define Pos1 (Pos0 + 1) -#define MoveIsCheckWhite (Pos1->wKcheck) -#define MoveIsCheckBlack (Pos1->bKcheck) -#define Height(x) ((x)->height) -typedef struct - { - uint32 move; - } typeMoveList; -typedef struct - { - uint32 move; - sint32 value; - uint64 nodes; - } typeRootMoveList; -typedef struct - { - int phase, mask, bc; - uint32 trans_move, move, exclude; - uint64 Target; - typeMoveList List[256]; - uint32 BadCaps[64]; - } typeNext; -#define MaxPly 2048 -#define WhiteOO (Position->Dyn->oo & 0x1) -#define WhiteOOO (Position->Dyn->oo & 0x2) -#define BlackOO (Position->Dyn->oo & 0x4) -#define BlackOOO (Position->Dyn->oo & 0x8) -typedef enum - { - Trans1, - CaptureGen, - Capture_Moves, - Killer1, - Killer2, - Ordinary_Moves, - BadCaps, - Trans2, - Capture_PGen2, - CaptureMoves2, - QuietChecks, - Evade_Phase, - Trans3, - CaptureGen3, - CaptureMoves3, - QuietChecks3, - PositionalGainPhase, - Fase0 - } EnumPhases; -#define FlagEP 030000 -#define FlagOO 010000 -#define FlagMask 070000 -#define FlagPromQ 070000 -#define FlagPromR 060000 -#define FlagPromB 050000 -#define FlagPromN 040000 -#define MoveIsEP(x) (((x) & FlagMask) == FlagEP) -#define MoveIsProm(x) (((x) & FlagMask) >= FlagPromN) -#define MoveIsOO(x) (((x) & FlagMask) == FlagOO) -#define MoveHistory(x) (((x) & 060000) == 0) -#define Direction_h1a8 0 -#define Direction_a1h8 1 -#define Direction_horz 2 -#define Direction_vert 3 -#define BadDirection 37 -#define MoveNone 0 -typedef struct - { - uint32 move; - sint32 Value, alpha, beta; - uint32 depth, _0; - uint64 nodes; - } typeMPV; -typeMPV MPV[256]; -int MultiPV; -bool DoSearchMoves; -uint32 SearchMoves[256]; \ No newline at end of file diff --git a/Firenzina/move_gen.c b/Firenzina/move_gen.c deleted file mode 100644 index bebb5c4..0000000 --- a/Firenzina/move_gen.c +++ /dev/null @@ -1,653 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef move_gen -#define move_gen -#include "fire.h" -#define Add(L, x, y) { (L++)->move = (x) | (y);} -#define AddTo(T, w) \ - { while (T) \ - { to = BSF(T); c = Position->sq[to]; \ - Add (List, (sq << 6) | to, w); BitClear (to, T); } } -#include "init_gen.h" -#define PtoQ (0xd8 << 24) -#define PtoN (0xc2 << 24) -#define FlagCheck 0x8000 -#define MoveAdd(L, x, pi, to, check) \ - { (L++)->move = (x) | ((SqSet[to] & (check)) ? FlagCheck : 0) \ - | (HistoryPITo (Position, (pi), (to)) << 16); } -#define MovesTo(T, pi, check) \ - { while (T) \ - { to = BSF(T); MoveAdd (List, (sq << 6) | to, pi, to, check); \ - BitClear (to, T); } } -#define UnderPromWhite() \ - { if ((AttN[to] & bBitboardK) == 0) \ - MoveAdd (List, FlagPromN | (sq << 6) | to, wEnumP, to, 0); \ - MoveAdd (List, FlagPromR | (sq << 6) | to, wEnumP, to, 0); \ - MoveAdd (List, FlagPromB | (sq << 6) | to, wEnumP, to, 0); } -#define UnderPromBlack() \ - { if ((AttN[to] & wBitboardK) == 0) \ - MoveAdd (List, FlagPromN | (sq << 6) | to, bEnumP, to, 0); \ - MoveAdd (List, FlagPromR | (sq << 6) | to, bEnumP, to, 0); \ - MoveAdd (List, FlagPromB | (sq << 6) | to, bEnumP, to, 0); } -#define OK(x) \ - (((x & 0x7fff) != s1) && ((x & 0x7fff) != s2) && ((x & 0x7fff) != s3)) -void SortOrdinary(typeMoveList *m1, typeMoveList *m2, uint32 s1, uint32 s2, uint32 s3) - { - typeMoveList *p, *q; - int move; - if (m1 == m2) - return; - for (p = m2 - 1; p >= m1; p--) - { - if (OK(p->move)) - break; - p->move = 0; - } - while (p > m1) - { - p--; - move = p->move; - if (OK(move)) - { - for (q = p + 1; q < m2; q++) - { - if (move < q->move) - (q - 1)->move = q->move; - else - break; - } - q--; - q->move = move; - } - else - { - m2--; - for (q = p; q < m2; q++) - q->move = (q + 1)->move; - m2->move = 0; - } - } - } -#define AddGain(L, x, pi, to) \ - { int v = ((int) MaxPosGain ((pi), (x) & 07777)); \ - if (v >= av) (L++)->move = (x) | (v << 16); } -#define AddGainTo(T, pi) \ - { while (T) \ - { to = BSF(T); \ - AddGain (List, (sq << 6) | to, pi, to); BitClear(to, T); } } -#define Sort \ - for (p = List - 1; p >= sm; p--) \ - { move = p->move; \ - for (q = p + 1; q < List; q++) \ - { \ - if (move < q->move) (q - 1)->move = q->move; \ - else break; \ - } \ - q--; \ - q->move = move; } -typeMoveList *EvasionMoves(typePos *Position, typeMoveList *list, uint64 mask) - { - if (Position->wtm) - return WhiteEvasions(Position, list, mask); - return BlackEvasions(Position, list, mask); - } -typeMoveList *OrdinaryMoves(typePos *Position, typeMoveList *list) - { - if (Position->wtm) - return WhiteOrdinary(Position, list); - return BlackOrdinary(Position, list); - } -typeMoveList *CaptureMoves(typePos *Position, typeMoveList *list, uint64 mask) - { - if (Position->wtm) - return WhiteCaptures(Position, list, mask & bBitboardOcc); - return BlackCaptures(Position, list, mask & wBitboardOcc); - } -#include "move_gen.c" -#include "white.h" -#else -#include "black.h" -#endif -typeMoveList *MyEvasion(typePos *Position, typeMoveList *List, uint64 c2) - { - uint64 U, T, att, mask; - int sq, to, fr, c, king, pi; - king = MyKingSq; - att = MyKingCheck; - sq = BSF(att); - pi = Position->sq[sq]; - mask = (~OppAttacked) &(((pi == EnumOppP) ? AttK[king] : 0) | Evade(king, sq)) & (~MyOccupied) &c2; - BitClear(sq, att); - if (att) - { - sq = BSF(att); - pi = Position->sq[sq]; - mask = mask &(PieceIsOppPawn(pi) | Evade(king, sq)); - sq = king; - AddTo(mask, CaptureValue[EnumMyK][c]); - List->move = 0; - return List; - } - c2 &= InterPose(king, sq); - sq = king; - AddTo(mask, CaptureValue[EnumMyK][c]); - if (!c2) - { - List->move = 0; - return List; - } - if (CaptureRight &(c2 & OppOccupied)) - { - to = BSF(c2 & OppOccupied); - c = Position->sq[to]; - if (EighthRank(to)) - { - Add(List, FlagPromQ | FromLeft(to) | to, (0x20 << 24) + CaptureValue[EnumMyP][c]); - Add(List, FlagPromN | FromLeft(to) | to, 0); - Add(List, FlagPromR | FromLeft(to) | to, 0); - Add(List, FlagPromB | FromLeft(to) | to, 0); - } - else - Add(List, FromLeft(to) | to, CaptureValue[EnumMyP][c]); - } - if (CaptureLeft &(c2 & OppOccupied)) - { - to = BSF(c2 & OppOccupied); - c = Position->sq[to]; - if (EighthRank(to)) - { - Add(List, FlagPromQ | FromRight(to) | to, (0x20 << 24) + CaptureValue[EnumMyP][c]); - Add(List, FlagPromN | FromRight(to) | to, 0); - Add(List, FlagPromR | FromRight(to) | to, 0); - Add(List, FlagPromB | FromRight(to) | to, 0); - } - else - Add(List, FromRight(to) | to, CaptureValue[EnumMyP][c]); - } - to = Position->Dyn->ep; - if (to) - { - if (CaptureRight & SqSet[to] && SqSet[Backward(to)] & c2) - Add(List, FlagEP | FromLeft(to) | to, CaptureValue[EnumMyP][EnumOppP]); - if (CaptureLeft & SqSet[to] && SqSet[Backward(to)] & c2) - Add(List, FlagEP | FromRight(to) | to, CaptureValue[EnumMyP][EnumOppP]); - } - T = BitboardMyP & BackShift((c2 & OppOccupied) ^ c2); - while (T) - { - fr = BSF(T); - BitClear(fr, T); - if (SeventhRank(fr)) - { - Add(List, FlagPromQ | (fr << 6) | Forward(fr), CaptureValue[EnumMyP][0]); - Add(List, FlagPromN | (fr << 6) | Forward(fr), 0); - Add(List, FlagPromR | (fr << 6) | Forward(fr), 0); - Add(List, FlagPromB | (fr << 6) | Forward(fr), 0); - } - else - Add(List, (fr << 6) | Forward(fr), CaptureValue[EnumMyP][0]); - } - T = BitboardMyP & BackShift2((c2 & OppOccupied) ^ c2) & SecondRank & BackShift(~Position->OccupiedBW); - while (T) - { - fr = BSF(T); - BitClear(fr, T); - Add(List, (fr << 6) | Forward2(fr), CaptureValue[EnumMyP][0]); - } - for (U = BitboardMyN; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttN[sq] & c2; - AddTo(T, CaptureValue[EnumMyN][c]); - } - for (U = BitboardMyB; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttB(sq) & c2; - AddTo(T, CaptureValue[EnumMyBL][c]); - } - for (U = BitboardMyR; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttR(sq) & c2; - AddTo(T, CaptureValue[EnumMyR][c]); - } - for (U = BitboardMyQ; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttQ(sq) & c2; - AddTo(T, CaptureValue[EnumMyQ][c]); - } - List->move = 0; - return List; - } -typeMoveList *MyPositionalGain(typePos *Position, typeMoveList *List, int av) - { - uint64 empty = ~Position->OccupiedBW, U, T; - int to, sq; - typeMoveList *sm, *p, *q; - int move; - sm = List; - for (U = ForwardShift(BitboardMyP & SecondSixthRanks) & empty; U; BitClear(sq, U)) - { - to = BSF(U); - if (OnThirdRank(to) && Position->sq[Forward(to)] == 0) - AddGain(List, (Backward(to) << 6) | Forward(to), EnumMyP, Forward(to)); - AddGain(List, (Backward(to) << 6) | to, EnumMyP, to); - } - for (U = BitboardMyN; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttN[sq] & empty; - AddGainTo(T, EnumMyN); - } - for (U = BitboardMyBL; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttB(sq) & empty; - AddGainTo(T, EnumMyBL); - } - for (U = BitboardMyBD; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttB(sq) & empty; - AddGainTo(T, EnumMyBD); - } - for (U = BitboardMyR; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttR(sq) & empty; - AddGainTo(T, EnumMyR); - } - for (U = BitboardMyQ; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttQ(sq) & empty; - AddGainTo(T, EnumMyQ); - } - sq = MyKingSq; - T = AttK[sq] & empty &(~OppAttacked); - AddGainTo(T, EnumMyK); - List->move = 0; - Sort; - return List; - } -typeMoveList *MyCapture(typePos *Position, typeMoveList *List, uint64 mask) - { - uint64 U, T, AttR, AttB; - int sq, to, c; - to = Position->Dyn->ep; - if (to) - { - if (CaptureLeft & SqSet[to]) - Add(List, FlagEP | FromRight(to) | to, CaptureEP); - if (CaptureRight & SqSet[to]) - Add(List, FlagEP | FromLeft(to) | to, CaptureEP); - } - if ((mask & MyAttacked) == 0) - goto NoTarget; - T = CaptureLeft &(~BitBoardEighthRank) & mask; - while (T) - { - to = BSF(T); - c = Position->sq[to]; - Add(List, FromRight(to) | to, CaptureValue[EnumMyP][c]); - BitClear(to, T); - } - T = CaptureRight &(~BitBoardEighthRank) & mask; - while (T) - { - to = BSF(T); - c = Position->sq[to]; - Add(List, FromLeft(to) | to, CaptureValue[EnumMyP][c]); - BitClear(to, T); - } - for (U = BitboardMyN; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttN[sq] & mask; - AddTo(T, CaptureValue[EnumMyN][c]); - } - for (U = BitboardMyB; U; BitClear(sq, U)) - { - sq = BSF(U); - AttB = AttB(sq); - T = AttB & mask; - AddTo(T, CaptureValue[EnumMyBL][c]); - } - for (U = BitboardMyR; U; BitClear(sq, U)) - { - sq = BSF(U); - AttR = AttR(sq); - T = AttR & mask; - AddTo(T, CaptureValue[EnumMyR][c]); - } - for (U = BitboardMyQ; U; BitClear(sq, U)) - { - sq = BSF(U); - AttR = AttR(sq); - AttB = AttB(sq); - T = (AttB | AttR) & mask; - AddTo(T, CaptureValue[EnumMyQ][c]); - } - sq = BSF(BitboardMyK); - T = AttK[sq] & mask &(~OppAttacked); - AddTo(T, CaptureValue[EnumMyK][c]); - NoTarget: - for (U = BitboardMyP & BitBoardSeventhRank; U; BitClear(sq, U)) - { - sq = BSF(U); - to = Forward(sq); - if (Position->sq[to] == 0) - { - Add(List, FlagPromQ | (sq << 6) | to, PtoQ); - if (AttN[to] & BitboardOppK) - Add(List, FlagPromN | (sq << 6) | to, PtoN); - } - to = ForwardLeft(sq); - if (sq != WhiteA7 && SqSet[to] & mask) - { - c = Position->sq[to]; - Add(List, FlagPromQ | (sq << 6) | to, PromQueenCap); - if (AttN[to] & BitboardOppK) - Add(List, FlagPromN | (sq << 6) | to, PromKnightCap); - } - to = ForwardRight(sq); - if (sq != WhiteH7 && SqSet[to] & mask) - { - c = Position->sq[to]; - Add(List, FlagPromQ | (sq << 6) | to, PromQueenCap); - if (AttN[to] & BitboardOppK) - Add(List, FlagPromN | (sq << 6) | to, PromKnightCap); - } - } - List->move = 0; - return List; - } -typeMoveList *MyOrdinary(typePos *Position, typeMoveList *List) - { - uint64 empty = ~Position->OccupiedBW, U, T, Rook, Bishop, Pawn; - int to, sq, opks = OppKingSq; - if (CastleOO && ((Position->OccupiedBW | OppAttacked) & WhiteF1G1) == 0) - MoveAdd(List, FlagOO | (WhiteE1 << 6) | WhiteG1, EnumMyK, WhiteG1, 0); - if (CastleOOO && (Position->OccupiedBW & WhiteB1C1D1) == 0 && (OppAttacked & WhiteC1D1) == 0) - MoveAdd(List, FlagOO | (WhiteE1 << 6) | WhiteC1, EnumMyK, WhiteC1, 0); - Pawn = MyAttackedPawns[opks]; - if (BitboardMyQ | BitboardMyR) - Rook = AttR(opks); - if (BitboardMyQ | BitboardMyB) - Bishop = AttB(opks); - for (U = ForwardShift(BitboardMyP & SecondSixthRanks) & empty; U; BitClear(sq, U)) - { - to = BSF(U); - if (OnThirdRank(to) && Position->sq[Forward(to)] == 0) - MoveAdd(List, (Backward(to) << 6) | Forward(to), EnumMyP, Forward(to), Pawn); - MoveAdd(List, (Backward(to) << 6) | to, EnumMyP, to, Pawn); - } - for (U = BitboardMyQ; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttQ(sq) & empty; - MovesTo(T, EnumMyQ, Rook | Bishop); - } - for (U = BitboardMyR; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttR(sq) & empty; - MovesTo(T, EnumMyR, Rook); - } - for (U = BitboardMyB; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttB(sq) & empty; - MovesTo(T, ((SqSet[sq] & Black) ? EnumMyBD : EnumMyBL), Bishop); - } - sq = BSF(BitboardMyK); - T = AttK[sq] & empty &(~OppAttacked); - MovesTo(T, EnumMyK, 0); - for (U = BitboardMyN; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttN[sq] & empty; - MovesTo(T, EnumMyN, AttN[opks]); - } - for (U = BitboardMyP & BitBoardSeventhRank; U; BitClear(sq, U)) - { - sq = BSF(U); - to = Forward(sq); - if (Position->sq[to] == 0) - UnderProm(); - to = ForwardLeft(sq); - if (sq != WhiteA7 && SqSet[to] & OppOccupied) - UnderProm(); - to = ForwardRight(sq); - if (sq != WhiteH7 && SqSet[to] & OppOccupied) - UnderProm(); - } - List->move = 0; - return List; - } -typeMoveList *MyQuietChecks(typePos *Position, typeMoveList *List, uint64 mask) - { - int opks, king, sq, to, fr, pi; - uint64 U, T, V; - typeMoveList *list; - uint32 move; - uint64 gcm; - gcm = ~MyXray; - mask = (~mask) &~MyOccupied; - ; - list = List; - king = OppKingSq; - list = List; - for (U = MyXray & MyOccupied; U; BitClear(fr, U)) - { - fr = BSF(U); - pi = Position->sq[fr]; - if (pi == EnumMyP) - { - if (File(fr) != File(king) && !SeventhRank(fr) && Position->sq[Forward(fr)] == 0) - { - (List++)->move = (fr << 6) | Forward(fr); - if (OnSecondRank(fr) && Position->sq[Forward2(fr)] == 0) - (List++)->move = (fr << 6) | Forward2(fr); - } - if (CanCaptureRight && Rank(fr) != NumberRank7) - (List++)->move = (fr << 6) | ForwardRight(fr); - if (CanCaptureLeft && Rank(fr) != NumberRank7) - (List++)->move = (fr << 6) | ForwardLeft(fr); - } - else if (pi == EnumMyN) - { - V = AttN[fr] & mask; - while (V) - { - to = BSF(V); - (List++)->move = (fr << 6) | to; - BitClear(to, V); - } - } - else if (pi == EnumMyBL || pi == EnumMyBD) - { - V = AttB(fr) & mask; - while (V) - { - to = BSF(V); - (List++)->move = (fr << 6) | to; - BitClear(to, V); - } - } - else if (pi == EnumMyR) - { - V = AttR(fr) & mask; - while (V) - { - to = BSF(V); - (List++)->move = (fr << 6) | to; - BitClear(to, V); - } - } - else if (pi == EnumMyK) - { - if (File(fr) == File(king) || Rank(fr) == Rank(king)) - V = AttK[fr] & NonOrtho[king] & mask &(~OppAttacked); - else - V = AttK[fr] & NonDiag[king] & mask &(~OppAttacked); - while (V) - { - to = BSF(V); - (List++)->move = (fr << 6) | to; - BitClear(to, V); - } - } - } - opks = OppKingSq; - T = CaptureLeft &(~BitBoardEighthRank) & mask & OppOccupied & MyAttackedPawns[opks]; - while (T) - { - to = BSF(T); - (List++)->move = FromRight(to) | to; - BitClear(to, T); - } - T = CaptureRight &(~BitBoardEighthRank) & mask & OppOccupied & MyAttackedPawns[opks]; - while (T) - { - to = BSF(T); - (List++)->move = FromLeft(to) | to; - BitClear(to, T); - } - for (U = BitboardMyQ; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttQ(sq) & AttQ(king) & mask; - while (T) - { - to = BSF(T); - BitClear(to, T); - if ((OppAttackedPawns[to] & BitboardOppP & gcm) == 0 && (AttN[to] & BitboardOppN & gcm) == 0) - { - move = (sq << 6) | to; - if (MySEE(Position, move)) - (List++)->move = (sq << 6) | to; - } - } - } - for (U = BitboardMyR; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttR(sq) & AttR(king) & mask; - while (T) - { - to = BSF(T); - BitClear(to, T); - if ((OppAttackedPawns[to] & BitboardOppP & gcm) == 0 && (AttN[to] & BitboardOppN & gcm) == 0) - { - move = (sq << 6) | to; - if (MySEE(Position, move)) - (List++)->move = (sq << 6) | to; - } - } - } - for (U = BitboardMyB; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttB(sq) & AttB(king) & mask; - while (T) - { - to = BSF(T); - BitClear(to, T); - if ((OppAttackedPawns[to] & BitboardOppP & gcm) == 0) - { - move = (sq << 6) | to; - if (MySEE(Position, move)) - (List++)->move = (sq << 6) | to; - } - } - } - for (U = BitboardMyN; U; BitClear(sq, U)) - { - sq = BSF(U); - T = AttN[sq] & AttN[king] & mask; - while (T) - { - to = BSF(T); - BitClear(to, T); - if ((OppAttackedPawns[to] & BitboardOppP & gcm) == 0) - { - move = (sq << 6) | to; - if (MySEE(Position, move)) - (List++)->move = (sq << 6) | to; - } - } - } - if (BitboardOppK & FourthEighthRankNoH && Position->sq[BackRight(opks)] == 0) - { - if (Position->sq[BackRight2(opks)] == EnumMyP) - { - fr = BackRight2(opks); - to = BackRight(opks); - move = (fr << 6) | to; - if (PawnGuard(to, fr) && MySEE(Position, move)) - (List++)->move = move; - } - if (Rank(opks) == NumberRank5 && Position->sq[BackRight2(opks)] == 0 - && Position->sq[BackRight3(opks)] == EnumMyP) - { - to = BackRight(opks); - fr = BackRight3(opks); - move = (fr << 6) | to; - if (PawnGuard(to, fr) && MySEE(Position, move)) - (List++)->move = move; - } - } - if (BitboardOppK & FourthEighthRankNoA && Position->sq[BackLeft(opks)] == 0) - { - if (Position->sq[BackLeft2(opks)] == EnumMyP) - { - fr = BackLeft2(opks); - to = BackLeft(opks); - move = (fr << 6) | to; - if (PawnGuard(to, fr) && MySEE(Position, move)) - (List++)->move = move; - } - if (Rank(opks) == NumberRank5 && Position->sq[BackLeft2(opks)] == 0 - && Position->sq[BackLeft3(opks)] == EnumMyP) - { - to = BackLeft(opks); - fr = BackLeft3(opks); - move = (fr << 6) | to; - if (PawnGuard(to, fr) && MySEE(Position, move)) - (List++)->move = move; - } - } - List->move = MoveNone; - return List; - } \ No newline at end of file diff --git a/Firenzina/next_move.c b/Firenzina/next_move.c deleted file mode 100644 index 9acbedf..0000000 --- a/Firenzina/next_move.c +++ /dev/null @@ -1,205 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef next_move -#define next_move -#include "fire.h" -#include "next_move.c" -#include "white.h" -#else -#include "black.h" -#endif - -uint32 MyNext(typePos *Position, typeNext *NextMove) - { - typeMoveList *p, *q, *list; - uint32 move, Temp; - switch (NextMove->phase) - { - case Trans1: - NextMove->phase = CaptureGen; - if (NextMove->trans_move && MyOK(Position, NextMove->trans_move)) - return(NextMove->trans_move); - case CaptureGen: - NextMove->phase = Capture_Moves; - NextMove->move = 0; - MyCapture(Position, NextMove->List, OppOccupied); - case Capture_Moves: - while (1) - { - p = NextMove->List + NextMove->move; - move = p->move; - if (!move) - break; - q = p + 1; - NextMove->move++; - while (q->move) - { - if (move < q->move) - { - Temp = q->move; - q->move = move; - move = Temp; - } - q++; - } - if ((move & 0x7fff) == NextMove->trans_move) - continue; - if (!EasySEE(move) && !MySEE(Position, move)) - NextMove->BadCaps[NextMove->bc++] = move; - else - break; - } - if (move) - return(move); - NextMove->phase = Killer1; - move = Position->Dyn->killer1; - if (move && move != NextMove->trans_move && Position->sq[To(move)] == 0 && MyOK(Position, move)) - return(move); - case Killer1: - NextMove->phase = Killer2; - move = Position->Dyn->killer2; - if (move && move != NextMove->trans_move && Position->sq[To(move)] == 0 && MyOK(Position, move)) - return(move); - case Killer2: - NextMove->phase = Ordinary_Moves; - NextMove->move = 0; - list = MyOrdinary(Position, NextMove->List); - SortOrdinary(NextMove->List, list, NextMove->trans_move, Position->Dyn->killer1, Position->Dyn->killer2); - case Ordinary_Moves: - move = (NextMove->List + NextMove->move)->move; - NextMove->move++; - if (move) - return(move); - NextMove->phase = BadCaps; - NextMove->BadCaps[NextMove->bc] = 0; - NextMove->move = 0; - case BadCaps: - move = NextMove->BadCaps[NextMove->move++]; - return(move); - case Trans2: - NextMove->phase = Capture_PGen2; - if (NextMove->trans_move && MyOK(Position, NextMove->trans_move)) - return(NextMove->trans_move); - case Capture_PGen2: - NextMove->phase = CaptureMoves2; - NextMove->move = 0; - MyCapture(Position, NextMove->List, NextMove->Target); - case CaptureMoves2: - while (1) - { - p = NextMove->List + NextMove->move; - move = p->move; - if (!move) - break; - q = p + 1; - NextMove->move++; - while (q->move) - { - if (move < q->move) - { - Temp = q->move; - q->move = move; - move = Temp; - } - q++; - } - if ((move & 0x7fff) == NextMove->trans_move) - continue; - else - break; - } - if (move) - return(move); - NextMove->move = 0; - NextMove->phase = QuietChecks; - MyQuietChecks(Position, NextMove->List, NextMove->Target); - case QuietChecks: - move = (NextMove->List + NextMove->move)->move; - NextMove->move++; - return(move); - case Evade_Phase: - move = (NextMove->List + NextMove->move)->move; - NextMove->move++; - return(move); - case Trans3: - NextMove->phase = CaptureGen3; - if (NextMove->trans_move && MyOK(Position, NextMove->trans_move)) - return(NextMove->trans_move); - case CaptureGen3: - NextMove->phase = CaptureMoves3; - NextMove->move = 0; - MyCapture(Position, NextMove->List, OppOccupied); - case CaptureMoves3: - while (1) - { - p = NextMove->List + NextMove->move; - move = p->move; - if (!move) - break; - q = p + 1; - NextMove->move++; - while (q->move) - { - if (move < q->move) - { - Temp = q->move; - q->move = move; - move = Temp; - } - q++; - } - if ((move & 0x7fff) == NextMove->trans_move) - continue; - else - break; - } - if (move) - return(move); - NextMove->move = 0; - NextMove->phase = QuietChecks3; - MyQuietChecks(Position, NextMove->List, OppOccupied); - case QuietChecks3: - move = (NextMove->List + NextMove->move)->move; - NextMove->move++; - if (move) - return(move); - NextMove->move = 0; - NextMove->phase = PositionalGainPhase; - MyPositionalGain(Position, NextMove->List, NextMove->mask); - case PositionalGainPhase: - move = (NextMove->List + NextMove->move)->move; - NextMove->move++; - return(move); - case Fase0: - return(0); - } - return 0; - } \ No newline at end of file diff --git a/Firenzina/null_move.h b/Firenzina/null_move.h deleted file mode 100644 index 7eba648..0000000 --- a/Firenzina/null_move.h +++ /dev/null @@ -1,60 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -static INLINE void MakeNull(typePos *Position) - { - Position->nodes++; - Position->Dyn->SavedFlags = Position->Dyn->flags; - memcpy(Position->Dyn + 1, Position->Dyn, 64); - Position->Dyn++; - Position->Dyn->Hash ^= HashWTM; - Position->wtm ^= 1; - Position->height++; - Position->Dyn->reversible++; - if (Position->Dyn->ep) - { - Position->Dyn->Hash ^= HashEP[Position->Dyn->ep & 7]; - Position->Dyn->ep = 0; - } - Position->Dyn->Value = -((Position->Dyn - 1)->Value + TempoValue); - Position->Dyn->PositionalValue = (Position->Dyn - 1)->PositionalValue; - Position->Dyn->lazy = (Position->Dyn - 1)->lazy; - Position->Dyn->flags &= ~3; - Position->Dyn->move = 0; - Position->Stack[++(Position->StackHeight)] = Position->Dyn->Hash; - } -static INLINE void UndoNull(typePos *Position) - { - Position->Dyn--; - Position->StackHeight--; - Position->height--; - Position->wtm ^= 1; - Position->Dyn->flags = Position->Dyn->SavedFlags; - } diff --git a/Firenzina/ok_move.c b/Firenzina/ok_move.c deleted file mode 100644 index 97dd6f6..0000000 --- a/Firenzina/ok_move.c +++ /dev/null @@ -1,129 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef ok_move -#define ok_move -#include "fire.h" -#include "ok_move.c" -#include "white.h" -#else -#include "black.h" -#endif - -bool MyOK(typePos *Position, uint32 move) - { - int fr, to, pi, cp; - uint64 toSet; - to = To(move); - toSet = SqSet[to]; - fr = From(move); - pi = Position->sq[fr]; - if (pi == 0) - return false; - if (PieceIsOpp(pi)) - return false; - cp = Position->sq[to]; - if (cp && PieceIsMine(cp)) - return false; - if (cp == EnumOppK) - return false; - if (pi == EnumMyP) - { - if (EighthRank(to) && !MoveIsProm(move)) - return false; - if (MoveIsEP(move) && to == Position->Dyn->ep && (fr == BackLeft(to) || fr == BackRight(to))) - return true; - if (fr == BackLeft(to) || fr == BackRight(to)) - { - if (toSet & OppOccupied) - return true; - return false; - } - if (fr == Backward(to)) - { - if ((toSet & Position->OccupiedBW) == 0) - return true; - return false; - } - if (fr != Backward2(to) || Rank(fr) != NumberRank2) - return false; - if (Position->OccupiedBW & SqSet[Forward(fr)]) - return false; - return true; - } - if (MoveIsProm(move)) - return false; - if (pi == EnumMyN) - { - if (AttN[fr] & toSet) - return true; - return false; - } - if (pi == EnumMyBL || pi == EnumMyBD) - { - if (AttB(fr) & toSet) - return true; - return false; - } - if (MoveIsOO(move)) - { - if (to == WhiteG1) - { - if (!CastleOO || Position->OccupiedBW & WhiteF1G1 || OppAttacked & WhiteF1G1) - return false; - return true; - } - if (to == WhiteC1) - { - if (!CastleOOO || Position->OccupiedBW & WhiteB1C1D1 || OppAttacked & WhiteC1D1) - return false; - return true; - } - } - if (pi == EnumMyR) - { - if (AttR(fr) & toSet) - return true; - return false; - } - if (pi == EnumMyQ) - { - if (AttQ(fr) & toSet) - return true; - return false; - } - if (pi == EnumMyK) - { - if (AttK[fr] & toSet && (toSet & OppAttacked) == 0) - return true; - return false; - } - return false; - } \ No newline at end of file diff --git a/Firenzina/pawn_eval.c b/Firenzina/pawn_eval.c deleted file mode 100644 index 66f4066..0000000 --- a/Firenzina/pawn_eval.c +++ /dev/null @@ -1,699 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#include "pawn_eval.h" - -typedef struct - { - uint64 Edge, Middle, Center; - uint8 ShelterEdge[8], ShelterMiddle[8], ShelterCenter[8]; - uint8 StormEdge[8], StormMiddle[8], StormCenter[8], ShelterDiag[8], Zero, ValueZero; - } typePawnPtr; - -typePawnPtr PawnPtr[8]; - -const uint8 ShelterAA[8] = - { - 30, 0, 5, 15, 20, 25, 25, 25 - }; -const uint8 ShelterAB[8] = - { - 55, 0, 15, 40, 50, 55, 55, 55 - }; -const uint8 ShelterAC[8] = - { - 30, 0, 10, 20, 25, 30, 30, 30 - }; -const uint8 StormAA[8] = - { - 5, 0, 35, 15, 5, 0, 0, 0 - }; -const uint8 StormAB[8] = - { - 10, 0, 50, 20, 10, 0, 0, 0 - }; -const uint8 StormAC[8] = - { - 10, 0, 50, 20, 10, 0, 0, 0 - }; -const uint8 ShelterBA[8] = - { - 30, 0, 5, 15, 20, 25, 25, 25 - }; -const uint8 ShelterBB[8] = - { - 55, 0, 15, 40, 50, 55, 55, 55 - }; -const uint8 ShelterBC[8] = - { - 30, 0, 10, 20, 25, 30, 30, 30 - }; -const uint8 StormBA[8] = - { - 5, 0, 35, 15, 5, 0, 0, 0 - }; -const uint8 StormBB[8] = - { - 10, 0, 50, 20, 10, 0, 0, 0 - }; -const uint8 StormBC[8] = - { - 10, 0, 50, 20, 10, 0, 0, 0 - }; -const uint8 ShelterCB[8] = - { - 30, 0, 5, 15, 20, 25, 25, 25 - }; -const uint8 ShelterCC[8] = - { - 55, 0, 15, 40, 50, 55, 55, 55 - }; -const uint8 ShelterCD[8] = - { - 30, 0, 10, 20, 25, 30, 30, 30 - }; -const uint8 StormCB[8] = - { - 5, 0, 35, 15, 5, 0, 0, 0 - }; -const uint8 StormCC[8] = - { - 10, 0, 50, 20, 10, 0, 0, 0 - }; -const uint8 StormCD[8] = - { - 10, 0, 50, 20, 10, 0, 0, 0 - }; -const uint8 ShelterDC[8] = - { - 30, 0, 5, 15, 20, 25, 25, 25 - }; -const uint8 ShelterDD[8] = - { - 55, 0, 15, 40, 50, 55, 55, 55 - }; -const uint8 ShelterDE[8] = - { - 30, 0, 10, 20, 25, 30, 30, 30 - }; -const uint8 StormDC[8] = - { - 5, 0, 35, 15, 5, 0, 0, 0 - }; -const uint8 StormDD[8] = - { - 10, 0, 50, 20, 10, 0, 0, 0 - }; -const uint8 StormDE[8] = - { - 10, 0, 50, 20, 10, 0, 0, 0 - }; -const uint8 ShelterLongDiagA[8] = - { - 10, 0, 2, 4, 6, 8, 10, 10 - }; -const uint8 ShelterLongDiagB[8] = - { - 8, 0, 2, 4, 6, 7, 8, 8 - }; -const uint8 ShelterLongDiagC[8] = - { - 6, 0, 2, 3, 4, 5, 6, 6 - }; -const uint8 ShelterLongDiagD[8] = - { - 4, 0, 1, 2, 3, 4, 4, 4 - }; -void InitPawns() - { - int file, rank; - int Target[8] = - { - FB, FB, FC, FD, FE, FF, FG, FG - }; - - int Switch[8] = - { - 1, 1, 1, 1, -1, -1, -1, -1 - }; - - for (file = FA; file <= FH; file++) - { - PawnPtr[file].Edge = FileArray[Target[file] - Switch[file]]; - PawnPtr[file].Middle = FileArray[Target[file]]; - PawnPtr[file].Center = FileArray[Target[file] + Switch[file]]; - } - - for (rank = R1; rank <= R8; rank++) - { - PawnPtr[FA].ShelterEdge[rank] = ShelterAA[rank]; - PawnPtr[FA].StormEdge[rank] = StormAA[rank]; - PawnPtr[FA].ShelterMiddle[rank] = ShelterAB[rank]; - PawnPtr[FA].StormMiddle[rank] = StormAB[rank]; - PawnPtr[FA].ShelterCenter[rank] = ShelterAC[rank]; - PawnPtr[FA].StormCenter[rank] = StormAC[rank]; - PawnPtr[FH].ShelterEdge[rank] = ShelterAA[rank]; - PawnPtr[FH].StormEdge[rank] = StormAA[rank]; - PawnPtr[FH].ShelterMiddle[rank] = ShelterAB[rank]; - PawnPtr[FH].StormMiddle[rank] = StormAB[rank]; - PawnPtr[FH].ShelterCenter[rank] = ShelterAC[rank]; - PawnPtr[FH].StormCenter[rank] = StormAC[rank]; - PawnPtr[FA].ShelterDiag[rank] = ShelterLongDiagA[rank]; - PawnPtr[FH].ShelterDiag[rank] = ShelterLongDiagA[rank]; - } - - for (rank = R1; rank <= R8; rank++) - { - PawnPtr[FB].ShelterEdge[rank] = ShelterBA[rank]; - PawnPtr[FB].StormEdge[rank] = StormBA[rank]; - PawnPtr[FB].ShelterMiddle[rank] = ShelterBB[rank]; - PawnPtr[FB].StormMiddle[rank] = StormBB[rank]; - PawnPtr[FB].ShelterCenter[rank] = ShelterBC[rank]; - PawnPtr[FB].StormCenter[rank] = StormBC[rank]; - PawnPtr[FG].ShelterEdge[rank] = ShelterBA[rank]; - PawnPtr[FG].StormEdge[rank] = StormBA[rank]; - PawnPtr[FG].ShelterMiddle[rank] = ShelterBB[rank]; - PawnPtr[FG].StormMiddle[rank] = StormBB[rank]; - PawnPtr[FG].ShelterCenter[rank] = ShelterBC[rank]; - PawnPtr[FG].StormCenter[rank] = StormBC[rank]; - PawnPtr[FB].ShelterDiag[rank] = ShelterLongDiagB[rank]; - PawnPtr[FG].ShelterDiag[rank] = ShelterLongDiagB[rank]; - } - - for (rank = R1; rank <= R8; rank++) - { - PawnPtr[FC].ShelterEdge[rank] = ShelterCB[rank]; - PawnPtr[FC].StormEdge[rank] = StormCB[rank]; - PawnPtr[FC].ShelterMiddle[rank] = ShelterCC[rank]; - PawnPtr[FC].StormMiddle[rank] = StormCC[rank]; - PawnPtr[FC].ShelterCenter[rank] = ShelterCD[rank]; - PawnPtr[FC].StormCenter[rank] = StormCD[rank]; - PawnPtr[FF].ShelterEdge[rank] = ShelterCB[rank]; - PawnPtr[FF].StormEdge[rank] = StormCB[rank]; - PawnPtr[FF].ShelterMiddle[rank] = ShelterCC[rank]; - PawnPtr[FF].StormMiddle[rank] = StormCC[rank]; - PawnPtr[FF].ShelterCenter[rank] = ShelterCD[rank]; - PawnPtr[FF].StormCenter[rank] = StormCD[rank]; - PawnPtr[FC].ShelterDiag[rank] = ShelterLongDiagC[rank]; - PawnPtr[FF].ShelterDiag[rank] = ShelterLongDiagC[rank]; - } - - for (rank = R1; rank <= R8; rank++) - { - PawnPtr[FD].ShelterEdge[rank] = ShelterDC[rank]; - PawnPtr[FD].StormEdge[rank] = StormDC[rank]; - PawnPtr[FD].ShelterMiddle[rank] = ShelterDD[rank]; - PawnPtr[FD].StormMiddle[rank] = StormDD[rank]; - PawnPtr[FD].ShelterCenter[rank] = ShelterDE[rank]; - PawnPtr[FD].StormCenter[rank] = StormDE[rank]; - PawnPtr[FE].ShelterEdge[rank] = ShelterDC[rank]; - PawnPtr[FE].StormEdge[rank] = StormDC[rank]; - PawnPtr[FE].ShelterMiddle[rank] = ShelterDD[rank]; - PawnPtr[FE].StormMiddle[rank] = StormDD[rank]; - PawnPtr[FE].ShelterCenter[rank] = ShelterDE[rank]; - PawnPtr[FE].StormCenter[rank] = StormDE[rank]; - PawnPtr[FD].ShelterDiag[rank] = ShelterLongDiagD[rank]; - PawnPtr[FE].ShelterDiag[rank] = ShelterLongDiagD[rank]; - } - - for (file = FA; file <= FH; file++) - { - PawnPtr[file].Zero = PawnPtr[file].ShelterEdge[R2] + PawnPtr[file].ShelterMiddle[R2] + PawnPtr[file].ShelterCenter[R2]; - PawnPtr[file].ValueZero = 10; - } - } -static int WhiteKingDanger(typePos *Position, int wKs) - { - int e, RankWa, RankWb, RankWc, RankBa, RankBb, RankBc, v, rank = Rank(wKs); - uint64 T, A = wBitboardP & NotInFrontB[rank]; - typePawnPtr Z = PawnPtr[File(wKs)]; - T = A & Z.Edge; - RankWa = BSF(T); - if (!T) - RankWa = 0; - RankWa >>= 3; - T = A & Z.Middle; - RankWb = BSF(T); - if (!T) - RankWb = 0; - RankWb >>= 3; - T = A & Z.Center; - RankWc = BSF(T); - if (!T) - RankWc = 0; - RankWc >>= 3; - T = bBitboardP & Z.Edge; - RankBa = BSF(T); - if (!T) - RankBa = 0; - RankBa >>= 3; - T = bBitboardP & Z.Middle; - RankBb = BSF(T); - if (!T) - RankBb = 0; - RankBb >>= 3; - T = bBitboardP & Z.Center; - RankBc = BSF(T); - if (!T) - RankBc = 0; - RankBc >>= 3; - v = (Z.ShelterEdge)[RankWa]+(Z.ShelterMiddle)[RankWb]+(Z.ShelterCenter)[RankWc]; - if (v == Z.Zero) - v = Z.ValueZero; - T = A & LongDiag[wKs]; - e = BSF(T); - if (!T) - e = 0; - e >>= 3; - v += (Z.ShelterDiag)[e]; - e = (Z.StormEdge)[RankBa]; - if (RankBa == (RankWa + 1)) - e >>= 1; - v += e; - e = (Z.StormMiddle)[RankBb]; - if (RankBb == (RankWb + 1)) - e >>= 1; - v += e; - e = (Z.StormCenter)[RankBc]; - if (RankBc == (RankWc + 1)) - e >>= 1; - v += e; - return v; - } -static int BlackKingDanger(typePos *Position, int bKs) - { - int e, RankWa, RankWb, RankWc, RankBa, RankBb, RankBc, v, rank = Rank(bKs); - uint64 T, A = bBitboardP & NotInFrontW[rank]; - typePawnPtr Z = PawnPtr[File(bKs)]; - T = A & Z.Edge; - RankBa = BSR(T); - if (!T) - RankBa = 56; - RankBa >>= 3; - RankBa = 7 - RankBa; - T = A & Z.Middle; - RankBb = BSR(T); - if (!T) - RankBb = 56; - RankBb >>= 3; - RankBb = 7 - RankBb; - T = A & Z.Center; - RankBc = BSR(T); - if (!T) - RankBc = 56; - RankBc >>= 3; - RankBc = 7 - RankBc; - T = wBitboardP & Z.Edge; - RankWa = BSR(T); - if (!T) - RankWa = 56; - RankWa >>= 3; - RankWa = 7 - RankWa; - T = wBitboardP & Z.Middle; - RankWb = BSR(T); - if (!T) - RankWb = 56; - RankWb >>= 3; - RankWb = 7 - RankWb; - T = wBitboardP & Z.Center; - RankWc = BSR(T); - if (!T) - RankWc = 56; - RankWc >>= 3; - RankWc = 7 - RankWc; - v = (Z.ShelterEdge)[RankBa]+(Z.ShelterMiddle)[RankBb]+(Z.ShelterCenter)[RankBc]; - if (v == Z.Zero) - v = Z.ValueZero; - T = A & LongDiag[bKs]; - e = BSR(T); - if (!T) - e = 56; - e >>= 3; - e = 7 - e; - v += (Z.ShelterDiag)[e]; - e = (Z.StormEdge)[RankWa]; - if (RankWa == (RankBa + 1)) - e >>= 1; - v += e; - e = (Z.StormMiddle)[RankWb]; - if (RankWb == (RankBb + 1)) - e >>= 1; - v += e; - e = (Z.StormCenter)[RankWc]; - if (RankWc == (RankBc + 1)) - e >>= 1; - v += e; - return v; - } -void PawnEval(typePos *Position, typePawnEval *Result) - { - int c, Value = 0, B, DistanceWhiteKing, DistanceBlackKing, BestWhiteKingDistance, BestBlackKingDistance; - int wKs = Position->wKsq, bKs = Position->bKsq; - int b, rank, file, v, ValuePassedPawn; - int v1, v2; - uint64 T, U, V, Connected; - typePawnEval *ptr; - Result->wPlight = Result->bPlight = Result->wPdark = Result->bPdark = 0; - Result->wKdanger = Result->bKdanger = 0; - Result->wPassedFiles = Result->bPassedFiles = 0; - BestBlackKingDistance = BestWhiteKingDistance = 30000; - Connected = 0; - c = 0; - for (file = FA; file <= FH; file++) - { - if ((wBitboardP & FileArray[file]) == 0) - c = 0; - else - { - if (c == 0) - Value -= Islands; - c = 1; - } - } - T = wBitboardP; - while (T) - { - b = BSF(T); - BitClear(b, T); - rank = Rank(b); - file = File(b); - DistanceWhiteKing = WhiteKingPawnDistance(b, wKs); - if (DistanceWhiteKing < BestWhiteKingDistance) - BestWhiteKingDistance = DistanceWhiteKing; - DistanceBlackKing = WhiteKingPawnDistance(b, bKs); - if (DistanceBlackKing < BestBlackKingDistance) - BestBlackKingDistance = DistanceBlackKing; - if (SqSet[b] & White) - { - Result->wPlight += BlockedPawnValue[b]; - if (Position->sq[b + 8] == bEnumP) - Result->wPlight += BlockedPawnValue[b]; - } - else - { - Result->wPdark += BlockedPawnValue[b]; - if (Position->sq[b + 8] == bEnumP) - Result->wPdark += BlockedPawnValue[b]; - } - if (wBitboardP & Left2[b] && (wBitboardP & InFrontW[rank - 1] & FileArray[file - 1]) == 0) - Value -= Hole; - if ((wBitboardP | bBitboardP) & OpenFileW[b]) - { - if (wBitboardP & Doubled[b]) - { - Value -= DoubledClosed; - if ((wBitboardP & IsolatedFiles[file]) == 0) - { - Value -= DoubledClosedIsolated; - } - } - if ((wBitboardP & IsolatedFiles[file]) == 0) - { - Value -= IsolatedClosed; - continue; - } - if ((wBitboardP & ProtectedPawnW[b]) == 0) - { - B = b + 8; - if ((wBitboardP & AttPb[b]) == 0) - { - B += 8; - if ((wBitboardP & AttPb[b + 8]) == 0) - B += 8; - } - if (bBitboardP & AttPb[B]) - Value -= BackwardClosed; - } - continue; - } - if (wBitboardP & Doubled[b]) - { - Value -= DoubledOpen; - if ((wBitboardP & IsolatedFiles[file]) == 0) - Value -= DoubledOpenIsolated; - } - if ((wBitboardP & IsolatedFiles[file]) == 0) - Value -= IsolatedOpen; - else - { - if ((wBitboardP & ProtectedPawnW[b]) == 0) - { - B = b + 8; - if ((wBitboardP & AttPb[b]) == 0) - { - B += 8; - if ((wBitboardP & AttPb[b + 8]) == 0) - B += 8; - } - if (bBitboardP & AttPb[B]) - Value -= BackwardOpen; - } - } - if ((bBitboardP & PassedPawnW[b]) == 0) - goto PassedW; - if (bBitboardP & PassedPawnW[b] & ~AttPb[b]) - { - Value += CandidatePawnValue[rank]; - continue; - } - if (POPCNT(AttPb[b] & bBitboardP) > POPCNT(AttPw[b] & wBitboardP)) - { - Value += CandidatePawnValue[rank]; - continue; - } - PassedW: - ValuePassedPawn = PassedPawnValue[rank]; - if (wBitboardP & AttPw[b]) - ValuePassedPawn += ProtectedPassedPawnValue[rank]; - if ((bBitboardP & FilesLeft[file]) == 0 || (bBitboardP & FilesRight[file]) == 0) - ValuePassedPawn += OutsidePassedPawnValue[rank]; - V = ConnectedPawns[b] & Connected; - Connected |= SqSet[b]; - if (V) - { - ValuePassedPawn += ConnectedPassedPawnValue[rank] + ConnectedPassedPawnValue[Rank(BSF(V))]; - BitClear(0, V); - if (V) - ValuePassedPawn += ConnectedPassedPawnValue[rank] + ConnectedPassedPawnValue[Rank(BSF(V))]; - } - Value += ValuePassedPawn; - Result->wPassedFiles |= (uint8)(1 << file); - if (b <= H3) - continue; - Value += (WhiteKingPawnDistance(b + 8, bKs) * OppKingPawnDistance[Rank(b)]); - Value -= (WhiteKingPawnDistance(b + 8, wKs) * MyKingPawnDistance[Rank(b)]); - } - c = 0; - for (file = FA; file <= FH; file++) - { - if ((bBitboardP & FileArray[file]) == 0) - c = 0; - else - { - if (c == 0) - Value += Islands; - c = 1; - } - } - Connected = 0; - T = bBitboardP; - while (T) - { - b = BSF(T); - BitClear(b, T); - rank = Rank(b); - file = File(b); - DistanceBlackKing = BlackKingPawnDistance(b, bKs); - if (DistanceBlackKing < BestBlackKingDistance) - BestBlackKingDistance = DistanceBlackKing; - DistanceWhiteKing = BlackKingPawnDistance(b, wKs); - if (DistanceWhiteKing < BestWhiteKingDistance) - BestWhiteKingDistance = DistanceWhiteKing; - if (SqSet[b] & White) - { - Result->bPlight += BlockedPawnValue[b]; - if (Position->sq[b - 8] == wEnumP) - Result->bPlight += BlockedPawnValue[b]; - } - else - { - Result->bPdark += BlockedPawnValue[b]; - if (Position->sq[b - 8] == wEnumP) - Result->bPdark += BlockedPawnValue[b]; - } - if (bBitboardP & Left2[b] && (bBitboardP & InFrontB[rank + 1] & FileArray[file - 1]) == 0) - { - Value += Hole; - } - if ((wBitboardP | bBitboardP) & OpenFileB[b]) - { - if (bBitboardP & Doubled[b]) - { - Value += DoubledClosed; - if ((bBitboardP & IsolatedFiles[file]) == 0) - Value += DoubledClosedIsolated; - } - if ((bBitboardP & IsolatedFiles[file]) == 0) - { - Value += IsolatedClosed; - continue; - } - if ((bBitboardP & ProtectedPawnB[b]) == 0) - { - B = b - 8; - if ((bBitboardP & AttPw[b]) == 0) - { - B -= 8; - if ((bBitboardP & AttPw[b - 8]) == 0) - B -= 8; - } - if (wBitboardP & AttPw[B]) - Value += BackwardClosed; - } - continue; - } - if (bBitboardP & Doubled[b]) - { - Value += DoubledOpen; - if ((bBitboardP & IsolatedFiles[file]) == 0) - { - Value += DoubledOpenIsolated; - } - } - if ((bBitboardP & IsolatedFiles[file]) == 0) - Value += IsolatedOpen; - else - { - if ((bBitboardP & ProtectedPawnB[b]) == 0) - { - B = b - 8; - if ((bBitboardP & AttPw[b]) == 0) - { - B -= 8; - if ((bBitboardP & AttPw[b - 8]) == 0) - B -= 8; - } - if (wBitboardP & AttPw[B]) - Value += BackwardOpen; - } - } - if ((wBitboardP & PassedPawnB[b]) == 0) - goto PassedB; - if (wBitboardP & PassedPawnB[b] & ~AttPw[b]) - { - Value -= CandidatePawnValue[7 - rank]; - continue; - } - if (POPCNT(AttPw[b] & wBitboardP) > POPCNT(AttPb[b] & bBitboardP)) - { - Value -= CandidatePawnValue[7 - rank]; - continue; - } - PassedB: - ValuePassedPawn = PassedPawnValue[7 - rank]; - if (bBitboardP & AttPb[b]) - ValuePassedPawn += ProtectedPassedPawnValue[7 - rank]; - if ((wBitboardP & FilesLeft[file]) == 0 || (wBitboardP & FilesRight[file]) == 0) - ValuePassedPawn += OutsidePassedPawnValue[7 - rank]; - V = ConnectedPawns[b] & Connected; - Connected |= SqSet[b]; - if (V) - { - ValuePassedPawn += ConnectedPassedPawnValue[7 - rank] + ConnectedPassedPawnValue[7 - (BSF(V) >> 3)]; - BitClear(0, V); - if (V) - ValuePassedPawn += ConnectedPassedPawnValue[7 - rank] + ConnectedPassedPawnValue[7 - (BSF(V) >> 3)]; - } - Value -= ValuePassedPawn; - Result->bPassedFiles |= (uint8)(1 << file); - if (b >= A6) - continue; - Value -= (BlackKingPawnDistance(b - 8, wKs) * OppKingPawnDistance[R8 - Rank(b)]); - Value += (BlackKingPawnDistance(b - 8, bKs) * MyKingPawnDistance[R8 - Rank(b)]); - } - T = 0; - for (rank = R2; rank <= R7; rank++) - T |= ((wBitboardP >> ((rank << 3))) & 0xff); - U = 0; - for (rank = R2; rank <= R7; rank++) - U |= ((bBitboardP >> ((rank << 3))) & 0xff); - Result->wPfile_count = POPCNT(T); - Result->bPfile_count = POPCNT(U); - Result->OpenFileCount = 8 - POPCNT(T | U); - Result->wDrawWeight = OpposingPawnsMult[POPCNT(T & ~U)] * PawnCountMult[Result->wPfile_count]; - Result->bDrawWeight = OpposingPawnsMult[POPCNT(U & ~T)] * PawnCountMult[Result->bPfile_count]; - if (wBitboardP | bBitboardP) - Value += BestBlackKingDistance - BestWhiteKingDistance; - T = ((bBitboardP &(~FileA)) >> 9) | ((bBitboardP &(~FileH)) >> 7); - if ((~T) &AttK[wKs] & bBitboardP) - Value += KingAttPawn; - if (Position->Dyn->oo & 1) - Value += KingOO; - if (Position->Dyn->oo & 2) - Value += KingOOO; - T = ((wBitboardP &(~FileA)) << 7) | ((wBitboardP &(~FileH)) << 9); - if ((~T) &AttK[bKs] & wBitboardP) - Value -= KingAttPawn; - if (Position->Dyn->oo & 4) - Value -= KingOO; - if (Position->Dyn->oo & 8) - Value -= KingOOO; - v1 = (sint16)(Value & 0xffff); - v2 = (v1 < 0) + (sint16)((Value >> 16) & 0xffff); - v1 *= (PawnWeight << 10) / 100; - v1 >>= 10; - v2 *= (PawnWeight << 10) / 100; - v2 >>= 10; - Value = Score(v2, v1); - Result->Score = Value; - v = WhiteKingDanger(Position, wKs); - if (WhiteOO) - v = MIN(v, 5 + WhiteKingDanger(Position, G1)); - if (WhiteOOO) - v = MIN(v, 5 + WhiteKingDanger(Position, C1)); - Result->wKdanger = Score(v, 0); - v = BlackKingDanger(Position, bKs); - if (BlackOO) - v = MIN(v, 5 + BlackKingDanger(Position, G8)); - if (BlackOOO) - v = MIN(v, 5 + BlackKingDanger(Position, C8)); - Result->bKdanger = Score(v, 0); - Result->PawnHash = Position->Dyn->PawnHash; - Result->PawnHash ^= (((uint64 *)(Result)) + 0x1)[0]; - Result->PawnHash ^= (((uint64 *)(Result)) + 0x2)[0]; - Result->PawnHash ^= (((uint64 *)(Result)) + 0x3)[0]; - ptr = PawnHash + (Position->Dyn->PawnHash &(CurrentPHashSize - 1)); - memcpy(ptr, Result, sizeof(typePawnEval)); - Result->PawnHash ^= (((uint64 *)(Result)) + 0x1)[0]; - Result->PawnHash ^= (((uint64 *)(Result)) + 0x2)[0]; - Result->PawnHash ^= (((uint64 *)(Result)) + 0x3)[0]; - return; - } \ No newline at end of file diff --git a/Firenzina/pawn_eval.h b/Firenzina/pawn_eval.h deleted file mode 100644 index 09bc137..0000000 --- a/Firenzina/pawn_eval.h +++ /dev/null @@ -1,103 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define Score(x,y) (((x) << 16) + (y)) -#define WhiteKingPawnDistance(pawn, king) \ - MAX (((king > pawn) ? 3 : 6) * ABS (Rank (pawn) - Rank (king)), \ - 6 * ABS (File (pawn) - File (king))) -#define BlackKingPawnDistance(pawn, king) \ - MAX (((king < pawn) ? 3 : 6) * ABS (Rank (pawn) - Rank (king)), \ - 6 * ABS (File (pawn) - File (king))) -static uint8 OpposingPawnsMult[9] = - { - 6, 5, 4, 3, 2, 1, 0, 0, 0 - }; -static uint8 PawnCountMult[9] = - { - 6, 5, 4, 3, 2, 1, 0, 0, 0 - }; -static const uint8 BlockedPawnValue[64] = - { - 0, 0, 0, 0, 0, 0, 0, 0, - 1, 1, 2, 2, 2, 2, 1, 1, - 1, 2, 3, 3, 3, 3, 2, 1, - 1, 2, 3, 5, 5, 3, 2, 1, - 1, 2, 3, 5, 5, 3, 2, 1, - 1, 2, 3, 3, 3, 3, 2, 1, - 1, 1, 2, 2, 2, 2, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0 - - }; -static const sint32 MyKingPawnDistance[8] = - { - 0, 0, 0, 1, 2, 3, 5, 0 - }; -static const sint32 OppKingPawnDistance[8] = - { - 0, 0, 0, 2, 4, 6, 10, 0 - }; -static const sint32 PassedPawnValue[8] = - { - Score(0, 0), Score(0, 0), Score(0, 0), Score(10, 10), - Score(20, 25), Score(40, 50), Score(60, 75), Score(0, 0) - }; -static const sint32 OutsidePassedPawnValue[8] = - { - Score(0, 0), Score(0, 0), Score(0, 0), Score(0, 0), - Score(2, 5), Score(5, 10), Score(10, 20), Score(0, 0) - }; -static const sint32 ProtectedPassedPawnValue[8] = - { - Score(0, 0), Score(0, 0), Score(0, 0), Score(0, 0), - Score(5, 10), Score(10, 15), Score(15, 25), Score(0, 0) - }; -static const sint32 ConnectedPassedPawnValue[8] = - { - Score(0, 0), Score(0, 0), Score(0, 0), Score(0, 0), - Score(5, 10), Score(10, 15), Score(20, 30), Score(0, 0) - }; -static const sint32 CandidatePawnValue[8] = - { - Score(0, 0), Score(0, 0), Score(0, 0), Score(5, 5), - Score(10, 12), Score(20, 25), Score(0, 0), Score(0, 0) - }; -#define Islands Score(0, 3) -#define Hole Score(1, 2) -#define DoubledClosed Score(2, 4) -#define DoubledOpen Score(4, 8) -#define DoubledClosedIsolated Score(2, 4) -#define DoubledOpenIsolated Score(6, 10) -#define IsolatedClosed Score(5, 8) -#define IsolatedOpen Score(15, 20) -#define BackwardClosed Score(5, 5) -#define BackwardOpen Score(10, 15) -#define KingAttPawn Score(0, 5) -#define KingOO Score(5, 0) -#define KingOOO Score(5, 0) \ No newline at end of file diff --git a/Firenzina/pv_node.c b/Firenzina/pv_node.c deleted file mode 100644 index f83a017..0000000 --- a/Firenzina/pv_node.c +++ /dev/null @@ -1,338 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef pv_node -#define pv_node -#include "fire.h" -#include "history.h" -#include "control.h" -#include "pv_node.c" -#include "white.h" -#else -#include "black.h" -#endif - -#define ValueRed1 (depth >> 1) -#define ValueRed2 (depth) - -int MyPV(typePos *Position, int Alpha, int Beta, int depth, int check) - { - typeNext NextMove[1]; - TransDeclare(); - int good_move, v, Value, i, trans_depth, move, move_depth = 0, trans_move = 0, hash_depth; - typeMoveList *list, *p, *q; - int extend, best_value, new_depth, move_is_check, to, fr; - typeDynamic *Pos0 = Position->Dyn; - int singular, LMR, cnt, Median, Margin; - bool Split, see; - if (Beta < -ValueMate) - return(-ValueMate); - if (Alpha > ValueMate) - return(ValueMate); - Median = (Beta + Alpha) >> 1; - Margin = (Beta - Alpha); - if (depth <= 1) - { - if (check) - return MyPVQsearchCheck(Position, Alpha, Beta, 1); - else - return MyPVQsearch(Position, Alpha, Beta, 1); - } - CheckRepetition(check); - NextMove->trans_move = 0; - hash_depth = 0; - NextMove->move = 0; - NextMove->bc = 0; - Trans = HashPointer(Position->Dyn->Hash); - (Pos0 + 1)->move = 0; - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Position->Dyn->Hash >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return(check) ? (HeightMultiplier * Height(Position) - ValueMate) : 0; - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - (Pos0 + 1)->move = trans_move = move; - } - trans_depth = MAX(trans->DepthLower, trans->DepthUpper); - if (IsExact(trans) && trans_depth >= depth) - { - Value = HashLowerBound(trans); - UpdateAge(); - - if (!Analysing) - return(Value); - } - if (trans_depth > hash_depth) - hash_depth = trans_depth; - if (trans->DepthLower > trans->DepthUpper) - { - Value = HashLowerBound(trans); - if (trans->flags & LowerFromPV && trans_depth >= depth && Value >= Beta) - return(Beta); - } - else - { - Value = HashUpperBound(trans); - if (trans->flags & UpperFromPV && trans_depth >= depth && Value <= Alpha) - return(Alpha); - } - } - } - if (!trans_move && depth >= 6) - { - v = Alpha; - if (depth >= 10) - { - v = MyPV(Position, Alpha - depth, Beta + depth, depth - 8, check); - CheckHalt(); - if (v > Alpha - depth) - trans_move = (Pos0 + 1)->move; - } - if (v > Alpha - depth) - v = MyPV(Position, Alpha - depth, Beta + depth, depth - 4, check); - CheckHalt(); - if (v > Alpha - depth) - trans_move = (Pos0 + 1)->move; - } - else if (depth >= 10 && depth > hash_depth + 8) - { - v = MyPV(Position, Alpha - depth, Beta + depth, depth - 8, check); - CheckHalt(); - if (v > Alpha - depth) - trans_move = (Pos0 + 1)->move; - if (v > Alpha - depth) - { - v = MyPV(Position, Alpha - depth, Beta + depth, depth - 4, check); - CheckHalt(); - if (v > Alpha - depth) - trans_move = (Pos0 + 1)->move; - } - } - NextMove->trans_move = trans_move; - NextMove->phase = Trans1; - extend = 0; - NextMove->Target = OppOccupied; - singular = 0; - if (check) - { - list = MyEvasion(Position, NextMove->List, 0xffffffffffffffff); - NextMove->phase = Evade_Phase; - for (p = list - 1; p >= NextMove->List; p--) - { - if ((p->move & 0x7fff) == trans_move) - p->move |= 0xffff0000; - else if (p->move <= (0x80 << 24)) - { - if ((p->move & 0x7fff) == Pos0->killer1) - p->move |= 0x7fff8000; - else if ((p->move & 0x7fff) == Pos0->killer2) - p->move |= 0x7fff0000; - else - p->move |= (p->move & 0x7fff) | (HistoryValue(Position, p->move) << 15); - } - move = p->move; - for (q = p + 1; q < list; q++) - { - if (move < q->move) - (q - 1)->move = q->move; - else - break; - } - q--; - q->move = move; - } - if ((list - NextMove->List) <= 1) - singular = 2; - if ((list - NextMove->List) == 2) - singular = 1; - if ((list - NextMove->List) > 2) - singular = 0; - } - - if (depth >= MinTransMoveDepth && NextMove->trans_move && singular < 2 && MyOK(Position, NextMove->trans_move)) - { - move = NextMove->trans_move; - if (check) - v = MyExcludeCheck(Position, Alpha - ValueRed1, depth - DepthRed, move & 0x7fff); - else - v = MyExclude(Position, Alpha - ValueRed1, depth - DepthRed, move & 0x7fff); - CheckHalt(); - if (v < Alpha - ValueRed1) - { - singular = 1; - if (check) - v = MyExcludeCheck(Position, Alpha - ValueRed2, depth - DepthRed, move & 0x7fff); - else - v = MyExclude(Position, Alpha - ValueRed2, depth - DepthRed, move & 0x7fff); - CheckHalt(); - if (v < Alpha - ValueRed2) - singular = 2; - } - } - best_value = -ValueInfinity; - NextMove->move = 0; - NextMove->bc = 0; - good_move = 0; - Split = false; - cnt = 0; - while (true) - { - if (SMPFree != 0 && !check && depth >= PVSplitDepth && !Split - && best_value != -ValueInfinity) - { - int r; - bool b; - Split = true; - b = IvanSplit(Position, NextMove, depth, Beta, Alpha, NodeTypePV, &r); - CheckHalt(); - if (b) - { - if (r > Alpha || !good_move) - return r; - move = good_move; - (Pos0 + 1)->move = good_move & 0x7fff; - best_value = r; - goto Ivan; - } - } - move = MyNext(Position, NextMove); - if (!move) - break; - to = To(move); - fr = From(move); - if (Alpha > 0 && Pos0->reversible >= 2 && ((To(move) << 6) | From(move)) == (Pos0 - 1)->move - && Position->sq[To(move)] == 0) - { - best_value = MAX(0, best_value); - cnt++; - continue; - } - if (MoveIsEP(move) || Position->sq[fr] == EnumMyK) - see = true; - else if (Position->sq[to] != 0) - see = EasySEE(move) || MySEE(Position, move); - else - see = MySEE(Position, move); - move &= 0x7fff; - Make(Position, move); - EVAL (move, depth); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - move_is_check = (MoveIsCheck != 0); - extend = 0; - if (check) - extend = 1; - if (see && (Pos1->cp || move_is_check)) - extend = 1; - if (PassedPawnPush (to, FourthRank (to))) - extend = 1; - if (see && Pos1->cp && Pos1->cp != EnumOppP) - extend = 2; - if (Pos1->cp && (Pos1->material & 0xff) == 0 && Pos1->cp != EnumOppP) - extend = 6; - if (NextMove->trans_move != move) - singular = 0; - if (!extend && cnt >= 3 && NextMove->phase == Ordinary_Moves && Margin < 100 && depth >= 10) - LMR = BSR(1 + cnt) - 1; - else - LMR = 0; - new_depth = depth - 2 + MAX(extend, singular) - LMR; - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (NextMove->trans_move != move && new_depth > 1) - { - if (LowDepthConditionPV) - { - if (move_is_check) - v = -OppLowDepthCheck(Position, -Alpha, new_depth); - else - v = -OppLowDepth(Position, -Alpha, new_depth); - } - else - { - if (move_is_check) - v = -OppCutCheck(Position, -Alpha, new_depth); - else - v = -OppCut(Position, -Alpha, new_depth); - } - new_depth += LMR; - if (v > Alpha) - v = -OppPV(Position, -Beta, -Alpha, new_depth, move_is_check); - } - else - v = -OppPV(Position, -Beta, -Alpha, new_depth, move_is_check); - Undo(Position, move); - cnt++; - CheckHalt(); - if (v <= Alpha && Position->sq[To(move)] == 0 && MoveHistory(move)) - HistoryBad1(move, depth); - if (v <= best_value) - continue; - best_value = v; - if (v <= Alpha) - continue; - Alpha = v; - good_move = move; - HashLowerPV(Position->Dyn->Hash, move, depth, v); - if (v >= Beta) - { - if (Position->sq[To(move)] == 0 && MoveHistory(move)) - HistoryGood(move, depth); - return(v); - } - } - move = good_move; - (Pos0 + 1)->move = good_move & 0x7fff; - if (best_value == -ValueInfinity) - { - best_value = (check) ? (HeightMultiplier * Height(Position) - ValueMate) : 0; - HashExact(Position, MoveNone, depth, best_value, FlagExact | FlagMoveLess); - return(best_value); - } - Ivan: - if (move) - { - if (Position->sq[To(move)] == 0 && MoveHistory(move)) - HistoryGood(move, depth); - HashExact(Position, move, depth, best_value, FlagExact); - return(best_value); - } - HashUpperPV(Position->Dyn->Hash, depth, best_value); - return(best_value); - } \ No newline at end of file diff --git a/Firenzina/qsearch.c b/Firenzina/qsearch.c deleted file mode 100644 index 63eab85..0000000 --- a/Firenzina/qsearch.c +++ /dev/null @@ -1,310 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef qsearch -#define qsearch -#include "fire.h" -#include "qsearch.c" -#include "white.h" -#else -#include "black.h" -#endif - -int MyQsearch(typePos *Position, int value, int depth) - { - int Value, i, v, best_value; - uint32 Temp, move, trans_move = 0, trans_depth, move_depth = 0; - uint64 Target; - typeMoveList List[256], *list, *p, *q; - typeDynamic *Pos0 = Position->Dyn; - TransDeclare(); - - CheckForMate (value); - - CheckRepetition(false); - Trans = HashPointer(Position->Dyn->Hash); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Position->Dyn->Hash >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return 0; - if (trans->DepthLower) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - return(Value); - } - if (trans->DepthUpper) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - return(Value); - } - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - trans_move = move; - } - } - } - best_value = Pos0->Value + TempoValue2; - if (best_value >= value) - return(best_value); - v = value - PrunePawn; - Target = OppOccupied; - if (v > best_value && HasPiece) - { - v = value - PruneMinor; - Target ^= BitboardOppP; - if (v > best_value) - { - Target ^= (BitboardOppN | BitboardOppB); - v = value - PruneRook; - if (v > best_value) - Target ^= BitboardOppR; - } - if (BitboardOppP & MyAttacked) - best_value += PrunePawn; - } - list = MyCapture(Position, List, Target); - p = List; - while (p->move) - { - if ((p->move & 0x7fff) == trans_move) - p->move |= 0xffff0000; - p++; - } - p = List; - while (p->move) - { - move = p->move; - q = ++p; - while (q->move) - { - if (move < q->move) - { - Temp = q->move; - q->move = move; - move = Temp; - } - q++; - } - if (!EasySEE(move) && (move & 0x7fff) != trans_move && SqSet[From(move)] & ~MyXray && !MySEE(Position, move)) - continue; - move &= 0x7fff; - Make(Position, move); - EvalQsearch(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - v = -OppQsearchCheck(Position, 1 - value, depth - 1); - else - v = -OppQsearch(Position, 1 - value, depth - 1); - Undo(Position, move); - CheckHalt(); - if (v <= best_value) - continue; - best_value = v; - if (v >= value) - { - HashLower(Position->Dyn->Hash, move, 1, v); - return(v); - } - } - if (depth >= -1 && Pos0->Value >= value - (100 + (12 << (depth + 4)))) - { - list = MyQuietChecks(Position, List, Target); - for (i = 0; i < list - List; i++) - { - move = List[i].move; - move &= 0x7fff; - Make(Position, move); - EvalQsearch(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else - v = -OppQsearchCheck(Position, 1 - value, depth - 1); - Undo(Position, move); - CheckHalt(); - if (v <= best_value) - continue; - best_value = v; - if (v >= value) - { - HashLower(Position->Dyn->Hash, move, 1, v); - return(v); - } - } - } - HashUpper(Position->Dyn->Hash, 1, best_value); - return(best_value); - } -int MyQsearchCheck(typePos *Position, int value, int depth) - { - int ignored, Value, i; - int v, best_value, trans_depth, move_depth = 0; - TransDeclare(); - uint64 Target; - typeMoveList List[256], *list, *p, *q; - typeDynamic *Pos0; - uint32 move, Temp, trans_move = 0; - Pos0 = Position->Dyn; - CheckForMate (value); - CheckRepetition(true); - Trans = HashPointer(Position->Dyn->Hash); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Position->Dyn->Hash >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return(HeightMultiplier * Height(Position) - ValueMate); - if (trans->DepthLower) - { - Value = HashLowerValue(trans); - HashReBound(Value, value); - if (Value >= value) - return(Value); - } - if (trans->DepthUpper) - { - Value = HashUpperValue(trans); - HashReBound(Value, value); - if (Value < value) - return(Value); - } - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - trans_move = move; - } - } - } - best_value = HeightMultiplier * Height(Position) - ValueMate; - Target = 0xffffffffffffffff; - if (Pos0->Value + PruneCheck < value && HasPiece) - { - best_value = Pos0->Value + PruneCheck; - v = value - 200; - Target = OppOccupied; - if (v > best_value) - { - Target ^= BitboardOppP; - v = value - 500; - best_value += 200; - if (v > best_value) - Target ^= (BitboardOppN | BitboardOppB); - } - } - list = MyEvasion(Position, List, Target); - if ((list - List) > 1) - depth--; - p = List; - while (p->move) - { - if ((p->move & 0x7fff) == trans_move) - p->move |= 0xfff00000; - p++; - } - p = List; - ignored = 0; - while (p->move) - { - move = p->move; - q = ++p; - while (q->move) - { - if (move < q->move) - { - Temp = q->move; - q->move = move; - move = Temp; - } - q++; - } - if (IsInterpose(move) && value > -ValueCut && (move & 0x7fff) != trans_move && !MySEE(Position, move)) - { - ignored++; - continue; - } - if (Position->sq[To(move)] == 0 && (move & 0x6000) == 0 && (move & 0x7fff) - != trans_move && HasPiece && MaxPositional(move) + Pos0->Value < value + 25 && value > -ValueCut) - { - ignored++; - continue; - } - move &= 0x7fff; - Make(Position, move); - EvalQsearch(value, move); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - v = -OppQsearchCheck(Position, 1 - value, depth); - else - v = -OppQsearch(Position, 1 - value, depth); - Undo(Position, move); - CheckHalt(); - if (v <= best_value) - continue; - best_value = v; - if (v >= value) - { - HashLower(Position->Dyn->Hash, move, 1, v); - return(v); - } - } - if (ignored && best_value < -ValueCut) - best_value = value - 1; - HashUpper(Position->Dyn->Hash, 1, best_value); - return(best_value); - } \ No newline at end of file diff --git a/Firenzina/qsearch_pv.c b/Firenzina/qsearch_pv.c deleted file mode 100644 index eb5734c..0000000 --- a/Firenzina/qsearch_pv.c +++ /dev/null @@ -1,403 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef qsearch_pv -#define qsearch_pv -#include "fire.h" -#include "qsearch_pv.c" -#include "white.h" -#else -#include "black.h" -#endif - -int MyPVQsearch(typePos *Position, int Alpha, int Beta, int depth) - { - int i; - uint32 good_move = 0, trans_move = 0, move, BadCaps[64]; - uint32 trans_depth, move_depth = 0; - int best_value, Value; - uint64 Target; - typeMoveList List[256], *list, *p, *q; - int Temp, v; - typeDynamic *Pos0 = Position->Dyn; - int bc = 0; - TransDeclare(); - CheckRepetition(false); - if (Beta < -ValueMate) - return(-ValueMate); - if (Alpha > ValueMate) - return(ValueMate); - Trans = HashPointer(Position->Dyn->Hash); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Position->Dyn->Hash >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return 0; - if (IsExact(trans)) - { - Value = HashUpperBound(trans); - return(Value); - } - if (trans->DepthLower) - { - Value = HashLowerBound(trans); - if (Value >= Beta) - return(Value); - } - if (trans->DepthUpper) - { - Value = HashUpperBound(trans); - if (Value <= Alpha) - return(Value); - } - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - trans_move = move; - } - } - } - best_value = Pos0->Value + TempoValue2; - Target = OppOccupied; - if (best_value >= Beta) - { - return(best_value); - } - else if (best_value > Alpha) - Alpha = best_value; - else - { - if (best_value < Alpha - PrunePawn && HasPiece) - { - Target ^= BitboardOppP; - if (best_value < Alpha - PruneMinor) - { - Target ^= (BitboardOppN | BitboardOppB); - if (best_value < Alpha - PruneRook) - Target ^= BitboardOppR; - } - best_value += PrunePawn; - } - } - list = MyCapture(Position, List, Target); - p = List; - while (p->move) - { - if ((p->move & 0x7fff) == trans_move) - p->move |= 0xffff0000; - p++; - } - p = List; - while (p->move) - { - move = p->move; - q = ++p; - while (q->move) - { - if (move < q->move) - { - Temp = q->move; - q->move = move; - move = Temp; - } - q++; - } - if (EasySEE(move) || (move & 0x7fff) == trans_move || MySEE(Position, move)) - { - move &= 0x7fff; - Make(Position, move); - EVAL (move, depth); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - v = -OppPVQsearchCheck(Position, -Beta, -Alpha, depth - 1); - else - v = -OppPVQsearch(Position, -Beta, -Alpha, depth - 1); - Undo(Position, move); - CheckHalt(); - if (v <= best_value) - continue; - best_value = v; - if (v <= Alpha) - continue; - Alpha = v; - good_move = move; - if (v >= Beta) - { - HashLower(Position->Dyn->Hash, move, 1, v); - return(v); - } - } - else - BadCaps[bc++] = move; - } - if (depth > 0) - for (i = 0; i < bc; i++) - { - move = BadCaps[i] & 0x7fff; - Make(Position, move); - EVAL (move, depth); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - v = -OppPVQsearchCheck(Position, -Beta, -Alpha, depth - 1); - else - v = -OppPVQsearch(Position, -Beta, -Alpha, depth - 1); - Undo(Position, move); - CheckHalt(); - if (v <= best_value) - continue; - best_value = v; - if (v <= Alpha) - continue; - Alpha = v; - good_move = move; - if (v >= Beta) - { - HashLower(Position->Dyn->Hash, move, 1, v); - return(v); - } - } - if (depth >= -5 && Pos0->Value >= Alpha - (16 << (depth + 5))) - { - list = MyQuietChecks(Position, List, Target); - for (i = 0; i < list - List; i++) - { - move = List[i].move & 0x7fff; - Make(Position, move); - EVAL (move, depth); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else - v = -OppPVQsearchCheck(Position, -Beta, -Alpha, depth - 1); - Undo(Position, move); - CheckHalt(); - if (v <= best_value) - continue; - best_value = v; - if (v <= Alpha) - continue; - Alpha = v; - good_move = move; - if (v >= Beta) - { - HashLower(Position->Dyn->Hash, move, 1, v); - return(v); - } - } - if (depth >= -4 && Pos0->Value >= Alpha - (2 << (4 + depth))) - { - list = MyPositionalGain(Position, List, Alpha - Pos0->Value + 5); - for (i = 0; i < list - List; i++) - { - move = List[i].move & 0x7fff; - Make(Position, move); - EVAL (move, depth); - if (-Pos1->Value < Alpha) - { - Undo(Position, move); - continue; - } - if (IllegalMove || MoveIsCheck) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else - v = -OppPVQsearch(Position, -Beta, -Alpha, depth - 1); - Undo(Position, move); - CheckHalt(); - if (v <= best_value) - continue; - best_value = v; - if (v <= Alpha) - continue; - Alpha = v; - good_move = move; - HashLower(Position->Dyn->Hash, move, 1, v); - if (v >= Beta) - return(v); - } - } - } - if (good_move) - { - HashExact(Position, good_move, 1, best_value, FlagExact); - return(best_value); - } - HashUpper(Position->Dyn->Hash, 1, best_value); - return(best_value); - } -int MyPVQsearchCheck(typePos *Position, int Alpha, int Beta, int depth) - { - int i; - uint32 trans_move = 0, good_move = 0, move, Temp; - int best_value, Value; - uint64 Target; - typeMoveList List[256], *list, *p, *q; - int v, trans_depth, move_depth = 0; - typeDynamic *Pos0 = Position->Dyn; - TransDeclare(); - CheckRepetition(true); - if (Beta < -ValueMate) - return(-ValueMate); - if (Alpha > ValueMate) - return(ValueMate); - Trans = HashPointer(Position->Dyn->Hash); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Position->Dyn->Hash >> 32)) == 0) - { - if (trans->flags & FlagMoveLess) - return(HeightMultiplier * Height(Position) - ValueMate); - if (IsExact(trans)) - { - Value = HashUpperBound(trans); - return(Value); - } - if (trans->DepthLower) - { - Value = HashLowerBound(trans); - if (Value >= Beta) - return(Value); - } - if (trans->DepthUpper) - { - Value = HashUpperBound(trans); - if (Value <= Alpha) - return(Value); - } - trans_depth = trans->DepthLower; - move = trans->move; - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - trans_move = move; - } - } - } - best_value = HeightMultiplier * Height(Position) - ValueMate; - Target = 0xffffffffffffffff; - if (Pos0->Value + PruneCheck < Alpha && HasPiece) - { - best_value = Pos0->Value + PruneCheck; - v = Alpha - QSAlphaThreshold; - Target = OppOccupied; - if (v > best_value) - { - Target ^= BitboardOppP; - v = Alpha - QSAlphaThreshold * 250 / 100; - best_value += QSAlphaThreshold; - if (v > best_value) - Target ^= (BitboardOppN | BitboardOppB); - } - } - list = MyEvasion(Position, List, Target); - if ((list - List) != 1) - depth--; - p = List; - while (p->move) - { - if ((p->move & 0x7fff) == trans_move) - p->move |= 0xfff00000; - p++; - } - p = List; - while (p->move) - { - move = p->move; - q = ++p; - while (q->move) - { - if (move < q->move) - { - Temp = q->move; - q->move = move; - move = Temp; - } - q++; - } - move &= 0x7fff; - Make(Position, move); - EVAL(move, depth); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (MoveIsCheck) - v = -OppPVQsearchCheck(Position, -Beta, -Alpha, depth); - else - v = -OppPVQsearch(Position, -Beta, -Alpha, depth); - Undo(Position, move); - CheckHalt(); - if (v <= best_value) - continue; - best_value = v; - if (v <= Alpha) - continue; - Alpha = v; - good_move = move; - HashLower(Position->Dyn->Hash, move, 1, v); - if (v >= Beta) - return(v); - } - if (good_move) - { - HashExact(Position, good_move, 1, best_value, FlagExact); - return(best_value); - } - HashUpper(Position->Dyn->Hash, 1, best_value); - return(best_value); - } \ No newline at end of file diff --git a/Firenzina/robbo_cache.c b/Firenzina/robbo_cache.c deleted file mode 100644 index 7415fc7..0000000 --- a/Firenzina/robbo_cache.c +++ /dev/null @@ -1,202 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef RobboBases -#include "robbo_totalbase.h" - -#define TotalCachePer 65536 -#define GetCache0(a, b) ((123 * (a) + 321 * (b)) & (TBCacheCount - 1)) -#define GetCache1(a, b) ((179 * (a) + 557 * (b)) & (TBCacheCount - 1)) -#define GetCache2(a, b) ((671 * (a) + 409 * (b)) & (TBCacheCount - 1)) -#define GetCache3(a, b) ((773 * (a) + 187 * (b)) & (TBCacheCount - 1)) -#define GetCache(x ,a, b) \ - ((x) >= 2) ? (((x) == 2) ? GetCache2 (a, b) : GetCache3 (a, b)) \ - : (((x) == 1) ? GetCache1 (a, b) : GetCache0 (a, b)) -static uint32 ExcludeCount = 0; -static int fc = 0; -static volatile uint64 CurrentXOR = 0; -static uint8 *** TotalBase_Cache = NULL; -uint8 *Block; -static volatile uint64 *CacheInfo[4]; -static uint64 TBCacheCount = 0; -static MutexType SweepStackLock[1]; - -int SetTotalBaseCache(int mb) - { - int i, j; - mb = 1 << BSR(mb); - TBCacheCount = mb << 2; - for (i = 0; i < 4; i++) - if (CacheInfo[i]) - free(CacheInfo[i]); - for (i = 0; i < 4; i++) - if (TotalBase_Cache[i]) - { - for (j = 0; j < TotalBaseCache << 2; j++) - if (TotalBase_Cache[i][j]) - free(TotalBase_Cache[i][j]); - free(TotalBase_Cache[i]); - } - CacheInfo[0] = malloc(TBCacheCount * sizeof(uint64)); - CacheInfo[1] = malloc(TBCacheCount * sizeof(uint64)); - CacheInfo[2] = malloc(TBCacheCount * sizeof(uint64)); - CacheInfo[3] = malloc(TBCacheCount * sizeof(uint64)); - TotalBase_Cache[0] = malloc(TBCacheCount * sizeof(uint8 *)); - TotalBase_Cache[1] = malloc(TBCacheCount * sizeof(uint8 *)); - TotalBase_Cache[2] = malloc(TBCacheCount * sizeof(uint8 *)); - TotalBase_Cache[3] = malloc(TBCacheCount * sizeof(uint8 *)); - for (j = 0; j < 4; j++) - for (i = 0; i < TBCacheCount; i++) - TotalBase_Cache[j][i] = NULL; - for (j = 0; j < 4; j++) - for (i = 0; i < TBCacheCount; i++) - CacheInfo[j][i] = 0xffffffff; - if (VerboseRobboBases) - Send("info string TotalBase Cache is %dmb + (1mb)\n", mb); - TotalBaseCache = mb; - return mb; - } -void InitTotalBaseCache(uint64 mb) - { - int i; - LockInit(SweepStackLock); - TotalBase_Cache = malloc(sizeof(uint8 **) << 2); - Block = malloc(128 + (TotalCachePer << 4)); - for (i = 0; i < 4; i++) - { - CacheInfo[i] = NULL; - TotalBase_Cache[i] = NULL; - } - SetTotalBaseCache(mb); - } - -static uint8 SweepStack(RobboTotalBase *tb, uint64 PositionCount) - { - uint64 n = tb->num; - uint64 zo = PositionCount / TotalCachePer, ci = (n << 32) | zo, ZO; - int h[4], e, i; - uint8 *BPTR; - uint8 u; - uint64 SaveXOR; - Prim: - SaveXOR = CurrentXOR; - for (i = 0; i < 4; i++) - { - h[i] = GetCache(i, n, zo); - if (CacheInfo[i][h[i]] == ci) - { - u = TotalBase_Cache[i][h[i]][PositionCount % TotalCachePer]; - if (CacheInfo[i][h[i]] == ci) - return u; - } - } - Lock(SweepStackLock); - if (SaveXOR != CurrentXOR) - { - UnLock(SweepStackLock); - goto Prim; - } - ExcludeCount++; - e = -1; - for (i = 0; i < 4; i++) - if (CacheInfo[i][h[i]] == 0xffffffff) - e = i; - if (e == -1) - { - e = 0; - for (i = 0; i < 16; i++) - e += (ExcludeCount >> i); - e &= 3; - } - if (!TotalBase_Cache[e][h[e]]) - TotalBase_Cache[e][h[e]] = malloc(TotalCachePer); - CacheInfo[e][h[e]] = 0xfffeefff; - if (tb->Blockpro == 0x100000) - { - ZO = zo & 0xf; - zo >>= 4; - } - if (tb->TYPE == DiskCompressed || tb->TYPE == DiskHuffman) - { - uint32 ba = tb->indexes[zo]; - sint32 lun = tb->indexes[zo + 1] - ba; - uint64 f = 0; - uint64 pr = ba; - char STR[1024]; - while (zo >= tb->supp_indice[f]) - f++; - pr += (f << 32); - if (!tb->Fdata) - { - fc++; - if (fc == MaximumFopen) - { - for (i = 0; i < MaxTables; i++) - if ((TableTotalBases + i)->Fdata) - { - fclose((TableTotalBases + i)->Fdata); - (TableTotalBases + i)->Fdata = NULL; - } - fc = 1; - } - sprintf(STR, "%s%s%s", tb->DirNome, CompressPrefix + 1, tb->string); - tb->Fdata = fopen(STR, "rb"); - } - fseek(tb->Fdata, pr, SEEK_SET); - fread(Block, 1, lun, tb->Fdata); - if (tb->Blockpro == 0x100000) - { - BPTR = Block + ((uint32 *)(Block + (ZO << 3)))[0]; - lun = ((uint32 *)(Block + ((ZO << 3) + 4)))[0]; - } - else - BPTR = Block; - BlockDecompress(TotalBase_Cache[e][h[e]], BPTR, lun, tb->TYPE); - } - CacheInfo[e][h[e]] = ci; - CurrentXOR ^= ci | (((uint64)h[e]) << 44) | (((uint64)(e)) << 62); - u = TotalBase_Cache[e][h[e]][PositionCount % TotalCachePer]; - UnLock(SweepStackLock); - return u; - } -int TotalValue(RobboTotalBase *tb, uint64 PositionCount) - { - uint8 u; - u = SweepStack(tb, PositionCount); - return u; - } -void KingSlice(RobboTotalBase *tb, int rf) - { - uint64 r, u = rf *tb->PawnMult, v = u + tb->PawnMult; - for (r = u; r < v; r += TotalCachePer) - SweepStack(tb, r); - } -#endif \ No newline at end of file diff --git a/Firenzina/robbo_comp.c b/Firenzina/robbo_comp.c deleted file mode 100644 index d39d2cc..0000000 --- a/Firenzina/robbo_comp.c +++ /dev/null @@ -1,507 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef RobboBases - -#define uint8 unsigned char -#define RIP1 0xFD -#define RIP2 0xFE -#define RIP(S,s) \ - { if (s > 0) \ - { s--; while (1) { if (s & 1) S[w++] = RIP2; \ - else S[w++] = RIP1; \ - if (s < 2) break; \ - s = (s - 2) >> 1; } \ - s = 0; } } -#define UINT64 unsigned long long int - -void SuffixMake(uint8 *Data, int *IDX, int N); -static UINT64 bi; -typedef struct - { - unsigned char sim; - int count; - } tipoSC; -typedef struct - { - int wt; - int c1, c2; - } NODO; -typedef struct - { - int lun; - int va; - } bits; -typedef struct - { - int byte; - int bit; - unsigned char *O; - } bitstring; -typedef struct - { - int c; - int r; - } cr; - -static int BWTMake(unsigned char *bufI, unsigned char *bufO, int pro) - { - int i, u; - int *indexes; - unsigned char *BUFqsort = NULL; - indexes = malloc(sizeof(int) * pro); - SuffixMake(bufI, indexes, pro); - for (i = 0; i < pro; i++) - { - u = indexes[i] + pro - 1; - if (u >= pro) - u -= pro; - bufO[i] = bufI[u]; - } - for (i = 0; i < pro; i++) - { - if (indexes[i] == 0) - { - free(indexes); - return i; - } - } - if (VerboseRobboBases) - { - Send("Bad bwt\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Bad bwt\n"); - close_log(); - } -#endif - } - - exit(1); - } -static int QsortTrie(const void *a, const void *b) - { - cr *x, *y; - x = (cr *)a; - y = (cr *)b; - if (x->c < y->c) - return -1; - if (x->c > y->c) - return 1; - return 0; - } -static int Estr(char *s, int l) - { - int x = 0; - int i; - for (i = 0; i < l; i++) - { - x <<= 1; - if (s[i] == '1') - x++; - } - return x; - } -static void Trie(cr *T, NODO *U, int ue, char *s, int alt, bits *E) - { - UINT64 w; - s[alt] = '0'; - s[alt + 1] = 0; - if (U[ue].c1 > 0) - Trie(T, U, U[ue].c1, s, alt + 1, E); - else - { - w = T[-U[ue].c1].c; - bi += (alt + 1) * w; - E[T[-U[ue].c1].r].lun = alt + 1; - E[T[-U[ue].c1].r].va = Estr(s, alt + 1); - } - s[alt] = '1'; - s[alt + 1] = 0; - if (U[ue].c2 > 0) - Trie(T, U, U[ue].c2, s, alt + 1, E); - else - { - w = T[-U[ue].c2].c; - bi += (alt + 1) * w; - E[T[-U[ue].c2].r].lun = alt + 1; - E[T[-U[ue].c2].r].va = Estr(s, alt + 1); - } - } -static void Huffman(cr *T, int c, bits *E) - { - int w, c1, c2, i, u = 1, t = 0, ue = 1, su = 0; - char s[1024]; - NODO *U; - qsort(T, c, sizeof(cr), QsortTrie); - U = malloc((c + 1) * sizeof(NODO)); - while (c - t + ue - u > 1) - { - if (ue == u || (t < c && T[t].c <= U[u].wt)) - { - c1 = -t; - t++; - } - else - { - c1 = u; - u++; - } - if (ue == u || (t < c && T[t].c <= U[u].wt)) - { - c2 = -t; - t++; - } - else - { - c2 = u; - u++; - } - U[ue].c1 = c1; - U[ue].c2 = c2; - if (c1 <= 0) - w = T[-c1].c; - else - w = U[c1].wt; - if (c2 <= 0) - w += T[-c2].c; - else - w += U[c2].wt; - U[ue].wt = w; - ue++; - } - bi = 0; - Trie(T, U, ue - 1, s, 0, E); - for (i = 0; i < c; i++) - su += T[i].c; - free(U); - } -static void BitsMake(bits E, bitstring *BS) - { - int l = E.lun + BS->bit; - int v = E.va, c = BS->bit; - while (l >= 8) - { - BS->O[BS->byte++] |= (v << c) & 255; - v >>= (8 - c); - c = 0; - l -= 8; - } - BS->O[BS->byte] |= (v << c); - BS->bit = l; - } -static int Inverse(int v, int l) - { - int u = 0, i; - for (i = 0; i < l; i++) - if (v &(1 << i)) - u |= (1 << (l - 1 - i)); - return u; - } - -static int QsortSC(const void *x, const void *y) - { - tipoSC *a, *b; - a = (tipoSC *)x; - b = (tipoSC *)y; - if (a->count > b->count) - return -1; - if (a->count < b->count) - return 1; - return 0; - } -static int MTFMake(unsigned char *I, unsigned char *O, int n) - { - unsigned char sim[256]; - int i, j, c = 0, w = 0, r = 0, J, B[256]; - tipoSC E[256]; - for (i = 0; i < 256; i++) - B[i] = 0; - for (i = 0; i < n; i++) - B[I[i]]++; - for (i = 0; i < 256; i++) - if (B[i]) - sim[c++] = i; - for (j = 0; j < c; j++) - { - E[j].count = B[sim[j]]; - E[j].sim = sim[j]; - } - qsort(E, c, sizeof(tipoSC), QsortSC); - O[w++] = c; - for (j = 0; j < c; j++) - sim[j] = E[j].sim; - for (j = 0; j < c; j++) - O[w++] = sim[j]; - for (i = 0; i < n; i++) - { - if (I[i] == sim[0]) - { - r++; - continue; - } - else - { - RIP(O, r); - for (j = 1; j < c; j++) - if (I[i] == sim[j]) - break; - if (j == c) - { - if (VerboseRobboBases) - { - Send("Symbol bad %d %d %d\n", I[i], i, sim[0]); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Symbol bad %d %d %d\n", I[i], i, sim[0]); - close_log(); - } -#endif - - } - } - - J = sim[j]; - O[w++] = j; - r = 0; - for (; j > 0; j--) - sim[j] = sim[j - 1]; - sim[0] = J; - } - } - if (r > 0) - RIP(O, r); - return w; - } -#define SEG1 0xFB -#define SEG2 0xFC -#define RLE(X,t,r) \ - { if (r > 0) \ - { r--; while (1) { if (r & 1) X[w++] = SEG2; \ - else X[w++] = SEG1; \ - if (r < 2) break; \ - r = (r - 2) >> 1; } \ - r = 0; } \ - X[w++]=t; } -static int RLEMake(unsigned char *A, int count) - { - int i, rip = 0, w = 0; - if (A[0] == SEG1 || A[0] == SEG2 || A[0] == RIP1 || A[0] == RIP2) - { - if (VerboseRobboBases) - { - Send("Bad RLEMake 0/%d 0x%x\n", count, A[0]); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Bad RLEMake 0/%d 0x%x\n", count, A[0]); - close_log(); - } -#endif - - for (i = 0; i < 256; i++) - Send("0x%x ", A[i]); - Send("\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - for (i = 0; i < 256; i++) - fprintf(log_file, "0x%x ", A[i]); - fprintf(log_file, "\n"); - close_log(); - } -#endif - } - exit(1); - } - for (i = 1; i < count; i++) - { - if (A[i] == SEG1 || A[i] == SEG2 || A[i] == RIP1 || A[i] == RIP2) - { - if (VerboseRobboBases) - { - Send("Bad RLEMake %d/%d 0x%x\n", i, count, A[i]); - for (i = 0; i < 256; i++) - Send("0x%x ", A[i]); - Send("\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - for (i = 0; i < 256; i++) - fprintf(log_file, "0x%x ", A[i]); - fprintf(log_file, "\n"); - close_log(); - } -#endif - - } - exit(1); - } - if (A[i] == A[i - 1]) - { - rip++; - continue; - } - RLE(A, A[i - 1], rip); - } - RLE(A, A[i - 1], rip); - return w; - } -#define MHL 24 -int huffman_fare(unsigned char *Data, int nb, unsigned char *O) - { - int o = 0, f, i, y = 0, LK[256], KL[256], B[256]; - cr Y[256]; - bits E[256]; - bitstring BS[1]; - int min = 4096; - if (nb > 4096) - min = nb; - for (i = 0; i < min; i++) - O[i] = 0; - O[o++] = nb & 255; - O[o++] = (nb >> 8) & 255; - O[o++] = (nb >> 16) & 255; - O[o++] = (nb >> 24) & 255; - for (i = 0; i < 256; i++) - B[i] = 0; - for (i = 0; i < nb; i++) - B[Data[i]]++; - BS->bit = 0; - BS->byte = 0; - y = 0; - for (i = 0; i < 256; i++) - Y[i].c = 0; - for (i = 0; i < 256; i++) - if (B[i]) - { - LK[i] = y; - KL[y] = i; - Y[y].r = y; - Y[y++].c = B[i]; - } - while (1) - { - int m = 0; - Huffman(Y, y, E); - for (i = 0; i < y; i++) - if (E[i].lun > m) - m = E[i].lun; - if (m <= MHL) - break; - for (i = 0; i < y; i++) - Y[i].c = (1 + (Y[i].c >> 9)) << 8; - } - for (i = 0; i < y; i++) - E[i].va = Inverse(E[i].va, E[i].lun); - O[o++] = y; - O[o++] = SEG1; - O[o++] = SEG2; - for (i = 0; i < y; i++) - { - O[o++] = KL[i]; - O[o++] = E[i].lun; - } - BS->byte = 0; - BS->bit = 0; - BS->O = O + o; - for (i = 0; i < y; i++) - BitsMake(E[i], BS); - if (BS->bit) - BS->byte++; - f = BS->byte; - BS->byte = 0; - BS->bit = 0; - BS->O = O + o + f; - for (i = 0; i < nb; i++) - BitsMake(E[LK[Data[i]]], BS); - if (BS->bit) - BS->byte++; - return 4 + BS->byte + 3 + (y << 1) + f; - } -#define uBWT 5 -int Compression(unsigned char *A, int Touch, int TYPE) - { - int i, b, ex, v; - unsigned int f = 0; - unsigned char *B; - if (Touch < 256) - { - Send("Compression < 256: %d\n", Touch); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Compression < 256: %d\n", Touch); - close_log(); - } -#endif - - exit(1); - } - B = malloc(Touch + 4096); - if (TYPE == uBWT) - ex = 4; - else - ex = 0; - b = RLEMake(A, Touch); - if (TYPE == uBWT) - { - f = BWTMake(A, B, b); - b = MTFMake(B, A, b); - } - v = huffman_fare(A, b, B); - for (i = 0; i < v; i++) - A[i + ex] = B[i]; - if (TYPE == uBWT) - { - A[0] = f & 255; - A[1] = (f >> 8) & 255; - A[2] = (f >> 16) & 255; - A[3] = (f >> 24) & 255; - } - free(B); - return v + ex; - } -#endif diff --git a/Firenzina/robbo_count.c b/Firenzina/robbo_count.c deleted file mode 100644 index 7ecc552..0000000 --- a/Firenzina/robbo_count.c +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef robbo_count -#define robbo_count -#include "fire.h" -#include "robbo_count.c" -#include "white.h" -#else -#include "black.h" -#endif - -static int CountEvasions(typePos *Position, uint64 *ep) - { - int king, count, pi, sq; - uint64 att, ip, T, flee, U; - *ep = 0; - king = MyKingSq; - att = MyKingCheck; - sq = BSF(att); - pi = Position->sq[sq]; - flee = (~OppAttacked) &(((pi == EnumOppP || pi == EnumOppK) ? AttK[king] : 0) - | Evade(king, sq)) & (~Position->OccupiedBW); - BitClear(sq, att); - if (att) - { - sq = BSF(att); - pi = Position->sq[sq]; - BitClear(sq, att); - if (att) - { - *ep = -1; - return 0; - } - return POPCNT(flee &(((pi == EnumOppP || pi == EnumOppK) ? AttK[king] : 0) | Evade(king, sq))); - } - count = POPCNT(flee); - ip = InterPose(king, sq) & ~Position->OccupiedBW; - if (!ip) - return count; - T = BitboardMyP & ~BitBoardSeventhRank & BackShift((ip & OppOccupied) ^ ip) & ~OppXray; - count += POPCNT(T); - T = - BitboardMyP & BackShift2((ip & OppOccupied) ^ ip) & SecondRank & BackShift(~Position->OccupiedBW) & ~OppXray; - T = ForwardShift(ForwardShift(T)); - count += POPCNT(T); - *ep = T &(((BitboardOppP & FourthRankBitBoard) << 1) | ((BitboardOppP & FourthRankBitBoard) >> 1)); - for (U = BitboardMyN & ~OppXray; U; BitClear(sq, U)) - count += POPCNT(AttN[BSF(U)] & ip); - for (U = BitboardMyB & ~OppXray; U; BitClear(sq, U)) - count += POPCNT(AttB(BSF(U)) & ip); - for (U = BitboardMyR & ~OppXray; U; BitClear(sq, U)) - count += POPCNT(AttR(BSF(U)) & ip); - for (U = BitboardMyQ & ~OppXray; U; BitClear(sq, U)) - count += POPCNT(AttQ(BSF(U)) & ip); - return count; - } -int MyCount(typePos *Position, uint64 *ep) - { - uint64 empty = ~Position->OccupiedBW, U, A, T; - int b, count = 0; - Mobility(Position); - if (InCheck) - return CountEvasions(Position, ep); - for (U = BitboardMyN; U; BitClear(b, U)) - { - b = BSF(U); - if (OppXray & SqSet[b]) - continue; - A = AttN[b] & empty; - count += POPCNT(A); - } - for (U = BitboardMyB; U; BitClear(b, U)) - { - b = BSF(U); - A = AttB(b) & empty; - if (OppXray & SqSet[b]) - A &= InterPose(MyKingSq, OppXrayTable[b]); - count += POPCNT(A); - } - for (U = BitboardMyR; U; BitClear(b, U)) - { - b = BSF(U); - A = AttR(b) & empty; - if (OppXray & SqSet[b]) - A &= InterPose(MyKingSq, OppXrayTable[b]); - count += POPCNT(A); - } - for (U = BitboardMyQ; U; BitClear(b, U)) - { - b = BSF(U); - A = AttQ(b) & empty; - if (OppXray & SqSet[b]) - A &= InterPose(MyKingSq, OppXrayTable[b]); - count += POPCNT(A); - } - count += POPCNT(AttK[MyKingSq] & empty & ~OppAttacked); - count += - POPCNT(BitboardMyP &(~BitBoardSeventhRank) & BackShift(empty) & (FileArray[File(MyKingSq)] | ~OppXray)); - T = BitboardMyP & SecondRank & BackShift(empty) & BackShift2(empty) & (FileArray[File(MyKingSq)] | ~OppXray); - T = ForwardShift(ForwardShift(T)); - count += POPCNT(T); - *ep = T &(((BitboardOppP & FourthRankBitBoard) << 1) | ((BitboardOppP & FourthRankBitBoard) >> 1)); - return count; - } \ No newline at end of file diff --git a/Firenzina/robbo_decomp.c b/Firenzina/robbo_decomp.c deleted file mode 100644 index 321e926..0000000 --- a/Firenzina/robbo_decomp.c +++ /dev/null @@ -1,311 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef RobboBases - -#define UINT64 unsigned long long int -#define SEG1 0xFB -#define SEG2 0xFC -#define uBWT 5 -#define RIP1 0xFD -#define RIP2 0xFE - -typedef struct - { - int byte; - int bit; - unsigned char *data; - } bitstring; -static void StackMake(unsigned int *Stack, unsigned int *l, unsigned int *va, UINT64 *b, int ns) - { - int c, Hop = 0, JumpDue, prJump; - unsigned char Prefix[256], Prefix2[256]; - unsigned int SA[256]; - unsigned int j, k, p, j2, i, pr; - for (c = 0; c < 256; c++) - Stack[c] = (1 << 24); - for (c = 0; c < 256; c++) - Prefix[c] = 0; - for (c = 0; c < ns; c++) - { - if (l[c] <= 8) - for (k = b[c]; k < 256; k += 1 << l[c]) - Stack[k] = va[c] | (l[c] << 24); - else - Prefix[b[c] & 255] = 1; - } - for (p = 0; p < 256; p++) - if (Prefix[p]) - { - SA[Hop] = p; - Stack[p] = Hop++; - } - JumpDue = Hop; - for (j = 0; j < Hop; j++) - { - pr = SA[j]; - for (i = 0; i < 256; i++) - Prefix2[i] = 0; - prJump = JumpDue; - for (c = 0; c < ns; c++) - if (pr == (b[c] & 255)) - { - if (l[c] <= 16) - for (k = (b[c] >> 8); k < 256; k += (1 << (l[c] - 8))) - Stack[((j + 1) << 8) + k] = va[c] | (l[c] << 24); - else - Prefix2[(b[c] >> 8) & 255] = 1; - } - for (p = 0; p < 256; p++) - if (Prefix2[p]) - { - SA[JumpDue] = p; - Stack[((j + 1) << 8) + p] = JumpDue++; - } - for (j2 = prJump; j2 < JumpDue; j2++) - { - p = SA[j2]; - for (c = 0; c < ns; c++) - if (p ==((b[c] >> 8) & 255) && pr == (b[c] & 255)) - for (k = (b[c] >> 16); k < 256; k += (1 << (l[c] - 16))) - Stack[((j2 + 1) << 8) + k] = va[c] | (l[c] << 24); - } - } - } -static UINT64 BitsMake(int n, bitstring *BS) - { - UINT64 r = 0; - int l = n + BS->bit, bc = 0; - while (l >= 8) - { - r |= (BS->data[BS->byte++] >> BS->bit) << bc; - bc += (8 - BS->bit); - BS->bit = 0; - l -= 8; - } - if (l) - r |= ((BS->data[BS->byte] >> BS->bit) & ((1 << (l - BS->bit)) - 1)) << bc; - BS->bit = l; - return r; - } -static void BytesMake(unsigned char *Data, unsigned int *Stack, int pro, unsigned char *B) - { - int b = 0, vb = 0, d = 0; - unsigned int va = 0, t; - while (b < pro) - { - if (vb < 8) - { - va |= (((unsigned int)Data[d++]) << vb); - vb += 8; - } - if (vb < 16) - { - va |= (((unsigned int)Data[d++]) << vb); - vb += 8; - } - if (vb < 24) - { - va |= (((unsigned int)Data[d++]) << vb); - vb += 8; - } - t = Stack[va & 255]; - if (t >= (1 << 24)) - { - B[b++] = t & 255; - va >>= t >> 24; - vb -= t >> 24; - continue; - } - t = Stack[((t + 1) << 8) + ((va >> 8) & 255)]; - if (t >= (1 << 24)) - { - B[b++] = t & 255; - va >>= t >> 24; - vb -= t >> 24; - continue; - } - t = Stack[((t + 1) << 8) + ((va >> 16) & 255)]; - B[b++] = t & 255; - va >>= t >> 24; - vb -= t >> 24; - } - } -static void BWTAnnul(unsigned char *I, int pro, unsigned char *O, int ind) - { - int B[257], *L, i, j, w = 0, *b; - unsigned char *S; - L = malloc(sizeof(int) * pro); - S = malloc(pro); - b = B + 1; - for (i = 0; i <= 256; i++) - B[i] = 0; - for (i = 0; i < pro; i++) - b[I[i]]++; - for (i = 0; i < 256; i++) - for (j = 0; j < b[i]; j++) - S[w++] = i; - for (i = 1; i < 256; i++) - b[i] += b[i - 1]; - for (i = 0; i < pro; i++) - L[b[I[i] - 1]++] = i; - for (i = 0; i < pro; i++) - { - O[i] = S[ind]; - ind = L[ind]; - } - free(L); - free(S); - } -static unsigned int HuffmanAnnul(unsigned char *I, unsigned char *O) - { - long w = 0; - int i, ns, seg1, seg2; - bitstring BS[1]; - UINT64 pro = 0, bits[256]; - unsigned int va[256], lun[256], *Stack; - for (w = 0; w < 4; w++) - pro += I[w] << (w << 3); - ns = I[w++]; - seg1 = I[w++]; - seg2 = I[w++]; - for (i = 0; i < ns; i++) - { - va[i] = I[w++]; - lun[i] = I[w++]; - } - for (i = 0; i < ns; i++) - if (lun[i] > 24) - { - if (VerboseRobboBases) - { - Send("HuffmanAnnul lun %d %d\n", i, lun[i]); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "HuffmanAnnul lun %d %d\n", i, lun[i]); - close_log(); - } -#endif - } - exit(1); - } - BS->data = (I + w); - BS->bit = 0; - BS->byte = 0; - for (i = 0; i < ns; i++) - bits[i] = BitsMake(lun[i], BS); - Stack = malloc(65536 * sizeof(int)); - if (BS->bit) - BS->byte++; - w += BS->byte; - StackMake(Stack, lun, va, bits, ns); - BS->data = (I + w); - BS->bit = 0; - BS->byte = 0; - BytesMake(BS->data, Stack, pro, O); - free(Stack); - return pro; - } - -static unsigned int RLEAnnul(unsigned char *I, int pro, unsigned char *O) - { - int i = 0, o = 0, s = 0, rip = 1, b, j; - while (i < pro) - { - b = I[i++]; - if (b == SEG1) - rip += (1 << s++); - else if (b == SEG2) - rip += (2 << s++); - else - { - for (j = 0; j < rip; j++) - O[o++] = b; - rip = 1; - s = 0; - } - } - return o; - } -static unsigned int mtfAnnul(unsigned char *I, int pro, unsigned char *O) - { - int b, j, w, i = 0, o = 0, c, rip = 0, s = 0; - unsigned char sim[256]; - c = I[i++]; - for (j = 0; j < c; j++) - sim[j] = I[i++]; - while (i < pro) - { - b = I[i++]; - if (b == RIP1) - rip += (1 << s++); - else if (b == RIP2) - rip += (2 << s++); - else - { - w = sim[b]; - for (j = 0; j < rip; j++) - O[o++] = sim[0]; - rip = 1; - s = 0; - for (; b > 0; b--) - sim[b] = sim[b - 1]; - sim[0] = w; - } - } - if (rip) - for (j = 0; j < rip; j++) - O[o++] = sim[0]; - return o; - } - -int BlockDecompress(unsigned char *O, unsigned char *I, int lun, int TYPE) - { - int i = 0, f = 0, b; - unsigned char *B; - B = malloc(65536); - if (TYPE == uBWT) - for (i = 0; i < 4; i++) - f |= I[i] << (i << 3); - b = HuffmanAnnul(I + i, B); - if (TYPE == uBWT) - { - b = mtfAnnul(B, b, O); - BWTAnnul(O, b, B, f); - } - b = RLEAnnul(B, b, O); - free(B); - return b; - } -#endif \ No newline at end of file diff --git a/Firenzina/robbo_glue.c b/Firenzina/robbo_glue.c deleted file mode 100644 index 769a956..0000000 --- a/Firenzina/robbo_glue.c +++ /dev/null @@ -1,439 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef RobboBases -#include "robbo_totalbase.h" -#include "robbo_triplebase.h" - -#define IsCheck \ - (Position->wtm ? \ - (wBitboardK & Position->Dyn->bAtt) : (bBitboardK & Position->Dyn->wAtt)) -#define IsIllegal \ - (!Position->wtm ? \ - (wBitboardK & Position->Dyn->bAtt) : (bBitboardK & Position->Dyn->wAtt)) - -extern uint32 RootBestMove; - -void TotalBaseInit() - { - int pi1, pi2, pi3, pi4; - int i; - InitTotalBaseUtility(false); - NumTotalBases = 0; - for (pi1 = 0; pi1 < 16; pi1++) - for (pi2 = 0; pi2 < 16; pi2++) - for (pi3 = 0; pi3 < 16; pi3++) - for (pi4 = 0; pi4 < 16; pi4++) - TotalBaseTable[pi1][pi2][pi3][pi4] = -1; - TableTotalBases = malloc(MaxTables * sizeof(RobboTotalBase)); - for (i = 0; i < MaxTables; i++) - (TableTotalBases + i)->Fdata = NULL; - for (i = 0; i < MaxTables; i++) - (TableTotalBases + i)->indexes = NULL; - InitTotalBaseCache(TotalBaseCache); - TotIndexes = 0; - } -void TotalInit() - { - TotalBaseInit(); - ReadyTripleBase(); - NumTripleBases = 0; - } -int RegisterRobboTotalBases() - { - char DIR[1024]; - Send("info string Registering TotalBases, please wait...\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Registering TotalBases, please wait...\n"); - close_log(); - } -#endif - - DeRegisterRobboTotalBases(); - strcpy(TotalBaseDir, TotalDir); - sprintf(DIR, "%s", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/3", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/4", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/5", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/6", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/51", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/42", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/33", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/Z", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/345Z", TotalBaseDir); - GetTotalBase(DIR); - sprintf(DIR, "%s/6Z", TotalBaseDir); - GetTotalBase(DIR); - Send("info string " "%d TotalBases registered\n", NumTotalBases); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string " "%d TotalBases registered\n", NumTotalBases); - close_log(); - } -#endif - TotalBasesLoaded = true; - return true; - } -int DeRegisterRobboTotalBases() - { - int pi1, pi2, pi3, pi4, i; - RobboTotalBase *tb; - for (i = 0; i < NumTotalBases; i++) - { - tb = (TableTotalBases + i); - if (tb->indexes) - free(tb->indexes); - if (tb->Fdata) - fclose(tb->Fdata); - tb->Fdata = NULL; - } - NumTotalBases = 0; - TotIndexes = 0; - for (pi1 = 0; pi1 < 16; pi1++) - for (pi2 = 0; pi2 < 16; pi2++) - for (pi3 = 0; pi3 < 16; pi3++) - for (pi4 = 0; pi4 < 16; pi4++) - TotalBaseTable[pi1][pi2][pi3][pi4] = -1; - SetTotalBaseCache(TotalBaseCache); - TotalBasesLoaded = false; - return true; - } -int UnLoadRobboTripleBases() - { - CleanupTriple(); - TripleBasesLoaded = false; - return true; - } -int LoadRobboTripleBases() - { - char DIR[1024]; - Send("info string Loading TripleBases, please wait...\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Loading TripleBases, please wait...\n"); - close_log(); - } -#endif - - CleanupTriple(); - strcpy(TripleBaseDir, TripleDir); - sprintf(DIR, "%s", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/2", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/3", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/4", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/5", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/6", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/51", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/42", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/33", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/345Z", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/Z", TripleBaseDir); - GetTripleBase(DIR); - sprintf(DIR, "%s/6Z", TripleBaseDir); - GetTripleBase(DIR); - TripleStatistics(); - TripleBasesLoaded = true; - return true; - } -bool RobboMove(typePos *Position, uint32 *am, int *v, int *cap) - { - int va, v2, av = 0xff, zv = 0x00, cp; - typeMoveList move_list[256]; - typeMoveList *q; - uint32 m; - if (Position->Dyn->oo) - return false; - if (!RobboTotalBaseScore(Position, &va) || va == dLoss) - return false; - Mobility(Position); - if (IsCheck) - EvasionMoves(Position, move_list, 0xffffffffffffffff); - else - { - q = CaptureMoves(Position, move_list, 0xffffffffffffffff); - OrdinaryMoves(Position, q); - } - for (q = move_list; q->move; q++) - { - m = q->move & 0x7fff; - Position->StackHeight = 0; - Make(Position, m); - Position->StackHeight = 1; - Mobility(Position); - if (IsIllegal) - { - Undo(Position, m); - Position->StackHeight = 1; - continue; - } - if (!RobboTotalBaseScore(Position, &v2)) - { - Undo(Position, m); - Position->StackHeight = 1; - return false; - } - if (DiskLoss(va)) - { - uint32 m3; - int v3; - if (!RobboMove(Position, &m3, &v3, &cp)) - { - Undo(Position, m); - Position->StackHeight = 1; - return false; - } - if (v3 > zv - && ((!Position->Dyn->cp && !(m & FlagMask) && ((!cp && (!(m3 & FlagMask))))) || va <= dLoss + 1)) - { - *am = m; - *v = zv = v3; - *cap = Position->Dyn->cp; - } - } - Undo(Position, m); - Position->StackHeight = 1; - if (DiskDraw(va) && DiskDraw(v2)) - { - *am = m; - *v = dDraw; - *cap = false; - return true; - } - if (DiskWin(va) && DiskLoss(v2)) - { - if (Position->sq[To(m)] || (m & FlagMask)) - { - *am = m; - *v = v2; - *cap = true; - return true; - } - if (v2 < av) - { - *am = m; - *v = av = v2; - *cap = false; - } - } - } - return true; - } -bool RobboMake(typePos *Position) - { - int va, v2, cp; - uint32 m; - Position->Dyn->Hash ^= 0xfa73e65b089c41d2; - SearchRobboBases = true; - Eval(Position, -0x7fff0000, 0x7fff0000, 0, 0xff); - Position->Dyn->Hash ^= 0xfa73e65b089c41d2; - if (Position->Dyn->exact) - SearchRobboBases = false; - else - SearchRobboBases = true; - if (!TotalCondition(Position) || !RobboTotalBaseScore(Position, &va)) - return false; - if (!RobboMove(Position, &m, &v2, &cp)) - return false; - if (DiskDraw(va)) - { - Send("info multipv 1 depth 0 score cp 0 pv %s\n", Notate(m, String1[Position->cpu])); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info multipv 1 depth 0 score cp 0 pv %s\n", Notate(m, String1[Position->cpu])); - close_log(); - } -#endif - - RootBestMove = m; - return true; - } - if (DiskLoss(va)) - { - Send("info multipv 1 depth 0 score cp %d pv %s\n", -28000 + 1000 * POPCNT(Position->OccupiedBW) + v2, - Notate(m, String1[Position->cpu])); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info multipv 1 depth 0 score cp %d pv %s\n", -28000 + 1000 * POPCNT(Position->OccupiedBW) + v2, - Notate(m, String1[Position->cpu])); - close_log(); - } -#endif - - RootBestMove = m; - return true; - } - if (DiskWin(va)) - { - Send("info multipv 1 depth 0 score cp %d pv %s\n", 28000 - 1000 * POPCNT(Position->OccupiedBW) - v2, - Notate(m, String1[Position->cpu])); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info multipv 1 depth 0 score cp %d pv %s\n", 28000 - 1000 * POPCNT(Position->OccupiedBW) - v2, - Notate(m, String1[Position->cpu])); - close_log(); - } -#endif - - RootBestMove = m; - return true; - } - return false; - } -static void MainLineIterate(typePos *Position) - { - int va, v2, cp; - uint32 m; - (Position->Dyn + 1)->move = MoveNone; - Mobility(Position); - if (!RobboTotalBaseScore(Position, &va)) - { - if (VerboseRobboBases) - { - Send("info string Failure in MainLine\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Failure in MainLine\n"); - close_log(); - } -#endif - } - - (Position->Dyn + 1)->move = MoveNone; - Position->StackHeight = 0; - return; - } - if (!RobboMove(Position, &m, &v2, &cp)) - { - (Position->Dyn + 1)->move = MoveNone; - Position->StackHeight = 0; - return; - } - if (va == dDraw) - { - Position->StackHeight = 0; - Make(Position, m); - Position->StackHeight = 1; - Undo(Position, m); - return; - } - m &= 0x7fff; - Position->StackHeight = 0; - Make(Position, m); - Position->StackHeight = 1; - MainLineIterate(Position); - Undo(Position, m); - Position->StackHeight = 1; - } -void MainLine(typePos *Position) - { - typeDynamic *p; - char String[16]; - int va; - MainLineIterate(Position); - if (!RobboTotalBaseScore(Position, &va) || va == dBreak) - { - if (VerboseRobboBases) - { - Send("info string Failure in MainLine\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Failure in MainLine\n"); - close_log(); - } -#endif - - } - return; - } - sprintf(String, "%d", va - dLoss); - Send("mainline (%c%s): ", (va == dWin) ? 'W' :((va == dDraw) ? 'D' : 'L'), (va < dLoss) ? "" : String); - for (p = Position->Dyn + 1; p->move; p++) - Send("%s ", Notate(p->move & 0x7fff, String)); - Send("\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "mainline (%c%s): ", (va == dWin) ? 'W' :((va == dDraw) ? 'D' : 'L'), (va < dLoss) ? "" : String); - for (p = Position->Dyn + 1; p->move; p++) - fprintf(log_file, "%s ", Notate(p->move & 0x7fff, String)); - fprintf(log_file, "\n"); - close_log(); - } -#endif - - } -#endif \ No newline at end of file diff --git a/Firenzina/robbo_init.c b/Firenzina/robbo_init.c deleted file mode 100644 index 1366129..0000000 --- a/Firenzina/robbo_init.c +++ /dev/null @@ -1,283 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#include "robbo_totalbase.h" -static void InitKingNormal() - { - int a, b, s = 0; - for (a = A1; a <= H8; a++) - for (b = A1; b <= H8; b++) - { - if (a == b || AttK[a] & SqSet[b]) - { - KingNormal[(b << 6) + a] = -1; - continue; - } - if (!(Triangle & SqSet[a])) - { - KingNormal[(b << 6) + a] = -1; - continue; - } - if (Margin & SqSet[a] && !(TriMar & SqSet[b])) - { - KingNormal[(b << 6) + a] = -1; - continue; - } - KingNormal[(b << 6) + a] = s++; - } - } -static void InitKingPawn() - { - int a, b, s = 0; - for (a = A1; a <= H8; a++) - for (b = A1; b <= H8; b++) - { - if (a == b || AttK[a] & SqSet[b]) - { - KingPawn[(b << 6) + a] = -1; - continue; - } - if (File(a) >= FE) - { - KingPawn[(b << 6) + a] = -1; - continue; - } - KingPawn[(b << 6) + a] = s++; - } - } -static void InitInverse() - { - int wK, bK; - for (wK = A1; wK <= H8; wK++) - for (bK = A1; bK <= H8; bK++) - { - if (KingNormal[(wK << 6) + bK] != -1) - InverseNormalKing[KingNormal[(wK << 6) + bK]] = (wK << 6) | bK; - if (KingPawn[(wK << 6) + bK] != -1) - InversePawnKing[KingPawn[(wK << 6) + bK]] = (wK << 6) | bK; - } - } -static void InitDoubleSquare() - { - int a, b, s = 0; - for (a = A1; a <= H8; a++) - for (b = A1; b < a; b++) - Sq2Normal[s++] = a | (b << 6); - s = 0; - for (a = A2; a <= H7; a++) - for (b = A2; b < a; b++) - Sq2Pawn[s++] = a | (b << 6); - s = 0; - for (a = A2; a <= H6; a++) - for (b = A2; b < a; b++) - Sq2Blocked[s++] = a | (b << 6); - } -static void InitTriple3() - { - int a, b, c, s = 0; - for (a = A1; a <= H8; a++) - for (b = A1; b < a; b++) - for (c = A1; c < b; c++) - Sq3normal[s++] = a | (b << 6) | (c << 12); - s = 0; - for (a = A2; a <= H7; a++) - for (b = A2; b < a; b++) - for (c = A2; c < b; c++) - Sq3Pawn[s++] = a | (b << 6) | (c << 12); - s = 0; - for (a = A2; a <= H6; a++) - for (b = A2; b < a; b++) - for (c = A2; c < b; c++) - Sq3blocked[s++] = a | (b << 6) | (c << 12); - } -static void InitQuadruple4() - { - int a, b, c, d, s = 0; - for (a = A1; a <= H8; a++) - for (b = A1; b < a; b++) - for (c = A1; c < b; c++) - for (d = A1; d < c; d++) - Sq4normal[s++] = a | (b << 6) | (c << 12) | (d << 18); - s = 0; - for (a = A2; a <= H7; a++) - for (b = A2; b < a; b++) - for (c = A2; c < b; c++) - for (d = A2; d < c; d++) - Sq4Pawn[s++] = a | (b << 6) | (c << 12) | (d << 18); - s = 0; - for (a = A2; a <= H6; a++) - for (b = A2; b < a; b++) - for (c = A2; c < b; c++) - for (d = A2; d < c; d++) - Sq4blocked[s++] = a | (b << 6) | (c << 12) | (d << 18); - } -static void InitSpear() - { - int wK, bK, K1, K2, u, sq; - for (wK = A1; wK <= H8; wK++) - for (bK = A1; bK <= H8; bK++) - { - K1 = bK; - K2 = wK; - u = 0; - if (File(K1) >= FE) - { - u = 4; - SpearNorm(4, K1); - SpearNorm(4, K2); - } - if (Rank(K1) >= R5) - { - u |= 2; - SpearNorm(2, K1); - SpearNorm(2, K2); - } - if (Rank(K1) == File(K1) && Rank(K2) > File(K2)) - u |= 1; - else if (Rank(K1) > File(K1)) - u |= 1; - oSpear[wK][bK] = u; - } - for (sq = A1; sq <= H8; sq++) - { - SpearPawn[0][sq] = sq; - SpearPawn[1][sq] = SpearVert[sq]; - SpearPawn[2][sq] = SpearHoriz[sq]; - SpearPawn[3][sq] = (FH - File(sq)) + ((R8 - Rank(sq)) << 3); - } - } -static void InitSpearNormal() - { - int i, sq, w; - for (i = 0; i < 8; i++) - for (sq = A1; sq <= H8; sq++) - { - w = sq; - if (i & 4) - w = SpearHoriz[w]; - if (i & 2) - w = SpearVert[w]; - if (i & 1) - w = SpearDiag[w]; - SpearNorm[i][sq] = w; - } - } -static void InitDoubleSame() - { - int i, j; - for (i = A1; i <= H8; i++) - for (j = A1; j <= H8; j++) - { - SameO2[i][j] = (i > j) ? ((i * (i + 1)) >> 1) + j - i : ((j * (j + 1)) >> 1) + i - j; - } - } -static void InitTriple() - { - int i, j, k, mas, mez, min; - for (i = A1; i <= H8; i++) - for (j = A1; j <= H8; j++) - for (k = A1; k <= H8; k++) - { - mas = MAX(MAX(i, j), k); - min = MIN(MIN(i, j), k); - if (i == mas) - mez = MAX(j, k); - if (j == mas) - mez = MAX(i, k); - if (k == mas) - mez = MAX(i, j); - SameO3[i][j][k] = (mas * (mas - 1) * (mas - 2)) / 6 + ((mez * (mez + 1)) >> 1) - mez + min; - } - } -static void InitQuadruple() - { - int i, j, k, l, mas, mez2, mez3, min; - for (i = A1; i <= H8; i++) - for (j = A1; j <= H8; j++) - for (k = A1; k <= H8; k++) - for (l = A1; l <= H8; l++) - { - mas = MAX(MAX(i, j), MAX(k, l)); - min = MIN(MIN(i, j), MIN(k, l)); - if (i == mas) - mez2 = MAX(MAX(j, k), l); - if (j == mas) - mez2 = MAX(MAX(i, k), l); - if (k == mas) - mez2 = MAX(MAX(i, j), l); - if (l == mas) - mez2 = MAX(MAX(i, j), k); - if (i == min) - mez3 = MIN(MIN(j, k), l); - if (j == min) - mez3 = MIN(MIN(i, k), l); - if (k == min) - mez3 = MIN(MIN(i, j), l); - if (l == min) - mez3 = MIN(MIN(i, j), k); - SameO4[i][j][k][l] = - (mas * (mas - 1) * (mas - 2) * (mas - 3)) / 24 + (mez2 * (mez2 - 1) * (mez2 - 2)) / 6 - + (mez3 * ((mez3 - 1)) >> 1) + min; - } - } -static void StackSpear() - { - int pi, sq; - for (pi = 0; pi < 16; pi++) - ColScamb[pi] = pi ^ 8; - ColScamb[0] = 0; - ColScamb[8] = 8; - for (sq = A1; sq <= H8; sq++) - { - SpearHoriz[sq] = (FH - File(sq)) + (Rank(sq) << 3); - SpearVert[sq] = File(sq) + ((R8 - Rank(sq)) << 3); - SpearDiag[sq] = (File(sq) << 3) + Rank(sq); - } - } -void InitTotalBaseUtility(bool Build) - { - StackSpear(); - strcpy(TotalBaseDir, "RobboTotalBase"); - strcpy(CompressPrefix, "iCOMP."); - InitKingNormal(); - InitKingPawn(); - InitInverse(); - InitDoubleSquare(); - InitTriple3(); - if (Build) - InitQuadruple4(); - InitSpearNormal(); - InitSpear(); - InitDoubleSame(); - InitTriple(); - if (Build) - InitQuadruple(); - } \ No newline at end of file diff --git a/Firenzina/robbo_init_IO.c b/Firenzina/robbo_init_IO.c deleted file mode 100644 index 4d252c0..0000000 --- a/Firenzina/robbo_init_IO.c +++ /dev/null @@ -1,1149 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef RobboBases -#include "robbo_totalbase.h" - -#define IsUVWXZ(x) (((x) == 'U') || ((x) == 'V') || ((x) == 'W') || \ - ((x) == 'X') || ((x) == 'Z')) -#define RTBx(a, b, c, d) TotalBaseTable[p[a]][p[b]][p[c]][p[d]] = -1; -#define WINDOWS_Prefix "icomp." -int Stat(char * filename); - -static int canonico_windows(char *AB, bool *simm) - { - char Sort[32] = "KQRBNPEFGHIJZUVWX"; - char A[32]; - int j, n, n2, i, SO[32]; - strcpy(A, AB); - A[16] = 0; - for (i = 0; i < 16; i++) - if (A[i] == '0') - A[i] = 0; - for (n = 0; n < 16; n++) - if (!A[n]) - break; - for (i = n; i < 16; i++) - A[i] = 0; - for (i = 0; i < 16; i++) - if (A[i] >= 'a') - A[i] -= 32; - for (i = 0; i < 16; i++) - if (A[i] == 0) - for (j = i; j < 4; j++) - A[j] = 0; - for (i = 0; i < 16; i++) - if (!strchr(Sort, A[i])) - A[i] = 0; - for (n = 1; A[n] != 'K'; n++); - for (i = 0; i < n; i++) - for (j = 0; j < strlen(Sort); j++) - if (Sort[j] == A[i]) - SO[i] = j; - for (i = n - 1; i >= 1; i--) - for (j = i + 1; j < n && SO[j - 1] > SO[j]; j++) - { - Exchange(A[j - 1], A[j]); - Exchange(SO[j - 1], SO[j]); - } - for (n2 = n + 1; A[n2]; n2++); - for (i = n; i < n2; i++) - for (j = 0; j < strlen(Sort); j++) - if (Sort[j] == A[i]) - SO[i] = j; - for (i = n + 1; i < n2; i++) - for (j = 0; j < strlen(Sort); j++) - if (Sort[j] == A[i]) - SO[i] = j; - for (i = n2 - 1; i >= n + 1; i--) - for (j = i + 1; j < n2 && SO[j - 1] > SO[j]; j++) - { - Exchange(A[j - 1], A[j]); - Exchange(SO[j - 1], SO[j]); - } - if (n == 0) - *simm = true; - if (n == 1 && IsUVWXZ(Sort[SO[0]])) - *simm = true; - if (n == 2 && Sort[SO[0]] == (Sort[SO[1]] ^ 32)) - *simm = true; - if (n == 2 && Sort[SO[0]] == 'Z' && Sort[SO[1]] == 'Z') - *simm = true; - if (n == 3 && IsUVWXZ(Sort[SO[1]]) - && ((Sort[SO[0]] == 'Z' && Sort[SO[2]] == 'Z') || Sort[SO[0]] == (Sort[SO[2]] ^ 32))) - *simm = true; - if (n == 4 && Sort[SO[1]] == 'Z' && Sort[SO[2]] == 'Z' - && ((Sort[SO[0]] == 'Z' && Sort[SO[3]] == 'Z') || Sort[SO[0]] == (Sort[SO[3]] ^ 32))) - *simm = true; - if (n == 4 && (Sort[SO[0]] == (Sort[SO[2]] ^ 32)) && (Sort[SO[1]] == (Sort[SO[3]] ^ 32))) - *simm = true; - if (n2 == 2) - *simm = true; - if (n2 == 3 && IsUVWXZ(Sort[SO[1]])) - *simm = true; - if (n2 == 4 && Sort[SO[1]] == Sort[SO[3]]) - *simm = true; - if (n2 == 4 && Sort[SO[1]] == 'Z' && Sort[SO[2]] == 'Z') - *simm = true; - if (n2 == 5 && IsUVWXZ(Sort[SO[2]]) && ((Sort[SO[1]] == 'Z' && Sort[SO[3]] == 'Z') || Sort[SO[1]] == Sort[SO[4]])) - *simm = true; - if (n2 == 6 && Sort[SO[2]] == 'Z' && Sort[SO[3]] == 'Z' - && ((Sort[SO[1]] == 'Z' && Sort[SO[4]] == 'Z') || Sort[SO[1]] == Sort[SO[5]])) - *simm = true; - if (n2 == 6 && Sort[SO[1]] == Sort[SO[4]] && Sort[SO[2]] == Sort[SO[5]]) - *simm = true; - return n; - } -int NomeCanonico(char *A, bool *simm) - { - char Sort[32] = "QRBNPEFGHIJZUVWXqrbnpefghij"; - int j, n, i, SO[MaxNum]; - if (A[0] == 'K' || A[0] == 'k') - return canonico_windows(A, simm); - A[MaxNum] = 0; - for (i = 0; i < MaxNum; i++) - if (A[i] == '0') - A[i] = 0; - for (i = 0; i < MaxNum; i++) - if (A[i] == 0) - for (j = i; j < 4; j++) - A[j] = 0; - for (i = 0; i < MaxNum; i++) - if (!strchr(Sort, A[i])) - A[i] = 0; - for (n = 0; A[n]; n++); - for (i = 0; i < n; i++) - for (j = 0; j < strlen(Sort); j++) - if (Sort[j] == A[i]) - SO[i] = j; - for (i = n - 1; i >= 0; i--) - for (j = i + 1; j < n && SO[j - 1] > SO[j]; j++) - { - Exchange(A[j - 1], A[j]); - Exchange(SO[j - 1], SO[j]); - } - if (n == 0) - *simm = true; - if (n == 1 && IsUVWXZ(Sort[SO[0]])) - *simm = true; - if (n == 2 && Sort[SO[0]] == (Sort[SO[1]] ^ 32)) - *simm = true; - if (n == 2 && Sort[SO[0]] == 'Z' && Sort[SO[1]] == 'Z') - *simm = true; - if (n == 3 && IsUVWXZ(Sort[SO[1]]) - && ((Sort[SO[0]] == 'Z' && Sort[SO[2]] == 'Z') || Sort[SO[0]] == (Sort[SO[2]] ^ 32))) - *simm = true; - if (n == 4 && Sort[SO[1]] == 'Z' && Sort[SO[2]] == 'Z' - && ((Sort[SO[0]] == 'Z' && Sort[SO[3]] == 'Z') || Sort[SO[0]] == (Sort[SO[3]] ^ 32))) - *simm = true; - if (n == 4 && (Sort[SO[0]] == (Sort[SO[2]] ^ 32)) && (Sort[SO[1]] == (Sort[SO[3]] ^ 32))) - *simm = true; - return n; - } -int RobboTotalSweep(char *NOME) - { - RobboTotalBase *tb; - int i, p[4] = - { - 0, 0, 0, 0 - }, v, EFGH = -1, IJ1 = -1, IJ2 = -1, file, file1, file2; - for (i = 0; i < 4 && NOME[i]; i++) - { - switch (NOME[i]) - { - case 'Q': - p[i] = wEnumQ; - break; - case 'q': - p[i] = bEnumQ; - break; - case 'R': - p[i] = wEnumR; - break; - case 'r': - p[i] = bEnumR; - break; - case 'B': - p[i] = wEnumB; - break; - case 'b': - p[i] = bEnumB; - break; - case 'N': - p[i] = wEnumN; - break; - case 'n': - p[i] = bEnumN; - break; - case 'I': - case 'J': - if (IJ1 == -1) - IJ1 = i; - else - IJ2 = i; - p[i] = wEnumP; - break; - case 'E': - case 'F': - case 'G': - case 'H': - EFGH = i; - case 'P': - p[i] = wEnumP; - break; - case 'i': - case 'j': - if (IJ1 == -1) - IJ1 = i; - else - IJ2 = i; - p[i] = bEnumP; - break; - case 'e': - case 'f': - case 'g': - case 'h': - EFGH = i; - case 'p': - p[i] = bEnumP; - break; - case 'U': - case 'V': - case 'W': - case 'X': - EFGH = i; - case 'Z': - p[i] = BlockedPawn; - break; - default: - p[i] = 0; - } - switch (NOME[i]) - { - case 'E': - case 'e': - case 'U': - file = 3; - break; - case 'F': - case 'f': - case 'V': - file = 2; - break; - case 'G': - case 'g': - case 'W': - file = 1; - break; - case 'H': - case 'h': - case 'X': - file = 0; - break; - } - switch (NOME[i]) - { - case 'I': - file1 = 0; - break; - case 'J': - file1 = 1; - break; - case 'i': - file2 = 0; - break; - case 'j': - file2 = 1; - break; - } - } - v = TotalBaseTable[p[0]][p[1]][p[2]][p[3]]; - if (v == -1) - return -1; - v &= 0xffff; - tb = TableTotalBases + v; - if (EFGH != -1) - v = tb->efgh[file]; - if (IJ1 != -1) - v = tb->efgh[file1 + (file2 << 1)]; - return v; - } -void RobboTotalSott(char *NOME) - { - int u, i, p[4] = - { - 0, 0, 0, 0 - }, v; - int i0, i1, i2, i3, file, file1, file2; - RobboTotalBase *tb; - for (i = 0; i < 4 && NOME[i]; i++) - { - switch (NOME[i]) - { - case 'Q': - p[i] = wEnumQ; - break; - case 'q': - p[i] = bEnumQ; - break; - case 'R': - p[i] = wEnumR; - break; - case 'r': - p[i] = bEnumR; - break; - case 'B': - p[i] = wEnumB; - break; - case 'b': - p[i] = bEnumB; - break; - case 'N': - p[i] = wEnumN; - break; - case 'n': - p[i] = bEnumN; - break; - case 'I': - case 'J': - case 'E': - case 'F': - case 'G': - case 'H': - case 'P': - p[i] = wEnumP; - break; - case 'i': - case 'j': - case 'e': - case 'f': - case 'g': - case 'h': - case 'p': - p[i] = bEnumP; - break; - case 'U': - case 'V': - case 'W': - case 'X': - case 'Z': - p[i] = BlockedPawn; - break; - default: - p[i] = 0; - } - switch (NOME[i]) - { - case 'E': - case 'e': - case 'U': - file = 3; - break; - case 'F': - case 'f': - case 'V': - file = 2; - break; - case 'G': - case 'g': - case 'W': - file = 1; - break; - case 'H': - case 'h': - case 'X': - file = 0; - break; - } - switch (NOME[i]) - { - case 'I': - file1 = 0; - break; - case 'J': - file1 = 1; - break; - case 'i': - file2 = 0; - break; - case 'j': - file2 = 1; - } - } - v = TotalBaseTable[p[0]][p[1]][p[2]][p[3]]; - if (v == -1) - return; - v &= 0xffff; - tb = TableTotalBases + v; - if (tb->indexes) - free(tb->indexes); - if (tb->efgh1 != -1) - { - for (u = 0; u < 4; u++) - if (tb->efgh[u] != 0xffff && (TableTotalBases + tb->efgh[u])->Fdata) - { - fclose((TableTotalBases + tb->efgh[u])->Fdata); - (TableTotalBases + tb->efgh[u])->Fdata = NULL; - } - } - else if (tb->Fdata) - { - fclose(tb->Fdata); - tb->Fdata = NULL; - } - - for (i0 = 0; i0 < 4; i0++) - for (i1 = 0; i1 < 4; i1++) - { - if (i0 == i1) - continue; - for (i2 = 0; i2 < 4; i2++) - { - if (i2 == i1 || i2 == i0) - continue; - for (i3 = 0; i3 < 4; i3++) - { - if (i3 == i2 || i3 == i1 || i3 == i0) - continue; - RTBx(i0, i1, i2, i3); - } - } - } - } -void UnWindows(char *NOME) - { - int c = 1, w = 0; - while (NOME[c] != 'k' && NOME[c] != 'K') - { - NOME[w] = NOME[c++]; - if (NOME[w] > 96) - NOME[w] -= 32; - w++; - } - c++; - while (NOME[c]) - { - NOME[w] = NOME[c++]; - if (NOME[w] < 96) - NOME[w] += 32; - w++; - } - for (; w <= 4; w++) - NOME[w] = 0; - } -void hack_windows_total(char *NOME) - { - char Temp[16]; - int j = 0, c = 1; - strcpy(Temp, NOME); - Temp[0] = 'K'; - while (NOME[j] >= 'A' && NOME[j] <= 'Z') - Temp[c++] = NOME[j++]; - Temp[c++] = 'K'; - while (NOME[j]) - Temp[c++] = NOME[j++] - 32; - Temp[c] = 0; - strcpy(NOME, Temp); - } - -void get_name(char *output, char *input) - { - strcpy(output, input); - if (output[0] == 'K' || output[0] == 'k') - UnWindows(output); - -#ifdef NomeWindows - hack_windows_total(output); -#endif - - } -void RobboTotalAdd(RobboTotalBase *tb, char *nome, char *DIRECTORY) - { - int i, p[4], v, w, u; - char NOME2[16], NOME[16]; - bool PawnFlag = false; - int c = 1, file; - for (i = 0; i < 16; i++) - NOME[i] = NOME2[i] = 0; - strcpy(NOME, nome); - if (NOME[0] == 'K' || NOME[0] == 'k') - UnWindows(NOME); - if (NOME[0] == '.') - return; - v = RobboTotalSweep(NOME); - if (v != -1 && v != 0xffff) - return; - strcpy(NOME2, NOME); - -#ifdef NomeWindows - hack_windows_total(NOME2); -#endif - - if (VerboseRobboBases) - { - Send("info string Register RobboTotalBase #%d %s\n", NumTotalBases, NOME2); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Register RobboTotalBase #%d %s\n", NumTotalBases, NOME2); - close_log(); - } -#endif - - } - sprintf(tb->DirNome, "%s/", DIRECTORY); - strcpy(tb->string, NOME2); - tb->efgh1 = tb->efgh2 = -1; - for (i = 0; i < 4; i++) - { - tb->efgh_shift[i] = 0; - tb->efgh_file[i] = -1; - tb->efgh[i] = 0xffff; - switch (NOME[i]) - { - case 'Q': - p[i] = wEnumQ; - break; - case 'q': - p[i] = bEnumQ; - break; - case 'R': - p[i] = wEnumR; - break; - case 'r': - p[i] = bEnumR; - break; - case 'B': - p[i] = wEnumB; - break; - case 'b': - p[i] = bEnumB; - break; - case 'N': - p[i] = wEnumN; - break; - case 'n': - p[i] = bEnumN; - break; - case 'I': - case 'J': - tb->efgh1 = i; - p[i] = wEnumP; - break; - case 'E': - case 'F': - case 'G': - case 'H': - tb->efgh1 = i; - case 'P': - p[i] = wEnumP; - break; - case 'i': - case 'j': - tb->efgh2 = i; - p[i] = bEnumP; - break; - case 'e': - case 'f': - case 'g': - case 'h': - tb->efgh1 = i; - case 'p': - p[i] = bEnumP; - break; - case 'U': - case 'V': - case 'W': - case 'X': - tb->efgh1 = i; - case 'Z': - p[i] = BlockedPawn; - break; - default: - p[i] = 0; - } - switch (NOME[i]) - { - case 'E': - case 'e': - case 'U': - file = 3; - break; - case 'F': - case 'f': - case 'V': - file = 2; - break; - case 'G': - case 'g': - case 'W': - case 'J': - case 'j': - file = 1; - break; - case 'H': - case 'h': - case 'X': - case 'I': - case 'i': - file = 0; - } - if (p[i]) - { - if (p[i] == wEnumP || p[i] == bEnumP) - tb->m[i] = 48; - else if (p[i] == BlockedPawn) - tb->m[i] = 40; - else - tb->m[i] = 64; - if (tb->efgh2 == i) - { - tb->m[i] >>= 1; - tb->efgh_shift[i] = 1; - tb->efgh_file[i] = file; - tb->m[tb->efgh1] <<= 1; - tb->efgh_shift[tb->efgh1] = 1; - file = (file << 1)+ tb->efgh_file[tb->efgh1]; - } - else if (tb->efgh1 == i) - { - tb->m[i] >>= 2; - tb->efgh_shift[i] = 2; - tb->efgh_file[i] = file; - } - } - else - tb->m[i] = 1; - } - if (p[0] && p[0] == p[3]) - { - tb->m[0] = (tb->m[0] * (tb->m[0] - 1) * (tb->m[0] - 2) * (tb->m[0] - 3)) / 24; - tb->m[1] = tb->m[2] = tb->m[3] = 1; - } - else if (p[0] && p[0] == p[2]) - { - tb->m[0] = (tb->m[0] * (tb->m[0] - 1) * (tb->m[0] - 2)) / 6; - tb->m[1] = tb->m[2] = 1; - } - else if (p[1] && p[1] == p[3]) - { - tb->m[1] = (tb->m[1] * (tb->m[1] - 1) * (tb->m[1] - 2)) / 6; - tb->m[2] = tb->m[3] = 1; - } - else - { - if (p[0] && p[0] == p[1]) - { - tb->m[0] = (tb->m[0] * (tb->m[0] - 1)) >> 1; - tb->m[1] = 1; - } - if (p[1] && p[1] == p[2]) - { - tb->m[1] = (tb->m[1] * (tb->m[1] - 1)) >> 1; - tb->m[2] = 1; - } - if (p[2] && p[2] == p[3]) - { - tb->m[2] = (tb->m[2] * (tb->m[2] - 1)) >> 1; - tb->m[3] = 1; - } - } - for (i = 0; i < 4; i++) - { - tb->p[i] = p[i]; - if (p[i] == wEnumP || p[i] == bEnumP || p[i] == BlockedPawn) - PawnFlag = true; - } - tb->num = NumTotalBases; - tb->Pawn = PawnFlag; - tb->pro = 1; - for (i = 0; i < 4; i++) - tb->pro *= tb->m[i]; - tb->PawnMult = tb->pro; - if (!PawnFlag) - tb->pro *= 462; - else - tb->pro *= 1806; - if (TotalBaseTable[p[0]][p[1]][p[2]][p[3]] != -1) - goto EfghijFix; - TotalBaseTable[p[0]][p[1]][p[2]][p[3]] = NumTotalBases + (0 << 16) + (1 << 18) + (2 << 20) + (3 << 22); - TotalBaseTable[p[1]][p[0]][p[2]][p[3]] = NumTotalBases + (1 << 16) + (0 << 18) + (2 << 20) + (3 << 22); - TotalBaseTable[p[0]][p[2]][p[1]][p[3]] = NumTotalBases + (0 << 16) + (2 << 18) + (1 << 20) + (3 << 22); - TotalBaseTable[p[1]][p[2]][p[0]][p[3]] = NumTotalBases + (2 << 16) + (0 << 18) + (1 << 20) + (3 << 22); - TotalBaseTable[p[2]][p[0]][p[1]][p[3]] = NumTotalBases + (1 << 16) + (2 << 18) + (0 << 20) + (3 << 22); - TotalBaseTable[p[2]][p[1]][p[0]][p[3]] = NumTotalBases + (2 << 16) + (1 << 18) + (0 << 20) + (3 << 22); - TotalBaseTable[p[0]][p[1]][p[3]][p[2]] = NumTotalBases + (0 << 16) + (1 << 18) + (3 << 20) + (2 << 22); - TotalBaseTable[p[0]][p[2]][p[3]][p[1]] = NumTotalBases + (0 << 16) + (3 << 18) + (1 << 20) + (2 << 22); - TotalBaseTable[p[1]][p[0]][p[3]][p[2]] = NumTotalBases + (1 << 16) + (0 << 18) + (3 << 20) + (2 << 22); - TotalBaseTable[p[1]][p[2]][p[3]][p[0]] = NumTotalBases + (3 << 16) + (0 << 18) + (1 << 20) + (2 << 22); - TotalBaseTable[p[2]][p[0]][p[3]][p[1]] = NumTotalBases + (1 << 16) + (3 << 18) + (0 << 20) + (2 << 22); - TotalBaseTable[p[2]][p[1]][p[3]][p[0]] = NumTotalBases + (3 << 16) + (1 << 18) + (0 << 20) + (2 << 22); - TotalBaseTable[p[0]][p[3]][p[1]][p[2]] = NumTotalBases + (0 << 16) + (2 << 18) + (3 << 20) + (1 << 22); - TotalBaseTable[p[0]][p[3]][p[2]][p[1]] = NumTotalBases + (0 << 16) + (3 << 18) + (2 << 20) + (1 << 22); - TotalBaseTable[p[1]][p[3]][p[0]][p[2]] = NumTotalBases + (2 << 16) + (0 << 18) + (3 << 20) + (1 << 22); - TotalBaseTable[p[1]][p[3]][p[2]][p[0]] = NumTotalBases + (3 << 16) + (0 << 18) + (2 << 20) + (1 << 22); - TotalBaseTable[p[2]][p[3]][p[0]][p[1]] = NumTotalBases + (2 << 16) + (3 << 18) + (0 << 20) + (1 << 22); - TotalBaseTable[p[2]][p[3]][p[1]][p[0]] = NumTotalBases + (3 << 16) + (2 << 18) + (0 << 20) + (1 << 22); - TotalBaseTable[p[3]][p[0]][p[1]][p[2]] = NumTotalBases + (1 << 16) + (2 << 18) + (3 << 20) + (0 << 22); - TotalBaseTable[p[3]][p[0]][p[2]][p[1]] = NumTotalBases + (1 << 16) + (3 << 18) + (2 << 20) + (0 << 22); - TotalBaseTable[p[3]][p[1]][p[0]][p[2]] = NumTotalBases + (2 << 16) + (1 << 18) + (3 << 20) + (0 << 22); - TotalBaseTable[p[3]][p[1]][p[2]][p[0]] = NumTotalBases + (3 << 16) + (1 << 18) + (2 << 20) + (0 << 22); - TotalBaseTable[p[3]][p[2]][p[0]][p[1]] = NumTotalBases + (2 << 16) + (3 << 18) + (1 << 20) + (0 << 22); - TotalBaseTable[p[3]][p[2]][p[1]][p[0]] = NumTotalBases + (3 << 16) + (2 << 18) + (1 << 20) + (0 << 22); - if (tb->efgh1 != -1) - tb->efgh[file] = NumTotalBases; - NumTotalBases++; - return; - EfghijFix: - v = TotalBaseTable[p[0]][p[1]][p[2]][p[3]] & 0xffff; - for (u = 0; u < 4; u++) - if (((w = (TableTotalBases + v)->efgh[u])) != 0xffff) - { - (TableTotalBases + w)->efgh[file] = NumTotalBases; - tb->efgh[u] = w; - } - tb->efgh[file] = NumTotalBases; - NumTotalBases++; - } - -bool RobboTotalRegister(char *nome, char *DIRECTORY) - { - int i, j, v; - RobboTotalBase *tb; - char NOME[64], NomeFile[1024], String[16]; - FILE *F; - uint8 A[4]; - uint32 n = 0; - int num_indexes = 0; - int e = 0; - strcpy(NOME, nome); - if (NOME[0] == 'K' || NOME[0] == 'k') - UnWindows(NOME); - for (i = 0; i < 4; i++) - if (NOME[i] == '0') - NOME[i] = 0; - for (i = 0; i < 4; i++) - if (NOME[i] == 0) - for (j = i; j < 4; j++) - NOME[j] = 0; - NOME[4] = 0; - v = RobboTotalSweep(NOME); - if (v != -1 && v != 0xffff) - return false; - get_name(String, NOME); - sprintf(NomeFile, "%s/%s%s", DIRECTORY, CompressPrefix + 1, String); - if (Stat(NomeFile) == -1) - { - if (String[0] == 'K') - UnWindows(String); - else - hack_windows_total(String); - sprintf(NomeFile, "%s/%s%s", DIRECTORY, CompressPrefix + 1, String); - if (Stat(NomeFile) == -1) - { - if (VerboseRobboBases) - { - Send("Stat failed %s\n", NomeFile); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Stat failed %s\n", NomeFile); - close_log(); - } -#endif - - } - return false; - } - } - sprintf(NomeFile, "%s/%s%s", DIRECTORY, CompressPrefix, String); - F = fopen(NomeFile, "rb"); - if (!F) - { - if (VerboseRobboBases) - { - Send("FOPEN failed %s\n", NomeFile); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "FOPEN failed %s\n", NomeFile); - close_log(); - } -#endif - - } - return false; - } - fread(A, 1, 4, F); - if (A[0] != 0xca || A[1] != 0x7f || A[2] != 0x0b || A[3] != 0xaa) - { - if (VerboseRobboBases) - { - Send("iCOMP bytes failed %s\n", NomeFile); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "iCOMP bytes failed %s\n", NomeFile); - close_log(); - } -#endif - - } - fclose(F); - return false; - } - tb = TableTotalBases + NumTotalBases; - RobboTotalAdd(tb, NOME, DIRECTORY); - tb->TYPE = DiskCompressed; - tb->Fdata = NULL; - strcpy(tb->string, String); - - fread(A, 1, 4, F); - for (i = 0; i < 4; i++) - n |= A[i] << (i << 3); - tb->Blockpro = n &((1 << 28) - 1); - tb->BWT = n >> 28; - fread(A, 1, 4, F); - fread(A, 1, 4, F); - for (i = 0; i < 4; i++) - num_indexes |= A[i] << (i << 3); - tb->indexes = malloc(num_indexes << 2); - fread(tb->indexes, 4, num_indexes, F); - TotIndexes += num_indexes; - fclose(F); - - for (i = 0; i < 8; i++) - tb->supp_indice[i] = 0xffffffff; - for (i = 1; i <= num_indexes - 1; i++) - if (tb->indexes[i] < tb->indexes[i - 1]) - tb->supp_indice[e++] = i; - tb->num_indexes = num_indexes; - return true; - } - -#ifdef WINDOWS -#include -#include -int Stat(char *filename) - { - struct _stat buf[1]; - if (_stat(filename, buf) == -1) - return -1; - return (buf->st_mode & _S_IREAD) ? 0 : -1; - } -#else -#include -#include -#include -int Stat(char *filename) - { - struct stat buf[1]; - if (stat(filename, buf) == -1) - return -1; - return (buf->st_mode & S_IRUSR) ? 0 : -1; - } -#endif - -static void add_nome_total(char *NOME, char *DIRECTORY) - { - int n = strlen(CompressPrefix); - if (memcmp(NOME, CompressPrefix, n) && memcmp(NOME, WINDOWS_Prefix, n)) - return; - RobboTotalRegister(NOME + n, DIRECTORY); - } -static void TotalBaseCountList() - { - if (VerboseRobboBases) - { - Send("info string Now %d RobboTotalBases with %dmb for indexing\n", NumTotalBases, (int)((TotIndexes << 2) >> 20)); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Now %d RobboTotalBases with %dmb for indexing\n", NumTotalBases, (int)((TotIndexes << 2) >> 20)); - close_log(); - } -#endif - - } - } -static void BlockTotalIndexRegister(char *DIR, FILE *F) - { - char NOME[16], String[16]; - uint8 A[4]; - unsigned char B[16]; - RobboTotalBase *tb; - int i, num_indexes, n, v, e; - bool SOTT; - char NomeFile[1024]; - NOME[4] = 0; - while (fread(B, 1, 4, F)) - { - if (B[0] != 0xee || B[1] != 0x63 || B[2] != 0x70 || B[3] != 0x41) - { - if (VerboseRobboBases) - { - Send("BlockIndex mask failure!\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "BlockIndex mask failure!\n"); - close_log(); - } -#endif - - } - return; - } - fread(NOME, 1, 4, F); - v = RobboTotalSweep(NOME); - if (v != -1 && v != 0xffff) - { - tb = TableTotalBases + (v & 0xffff); - if (VerboseRobboBases) - { - Send("Notably loaded %s\n", tb->string); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Notably loaded %s\n", tb->string); - close_log(); - } -#endif - - } - free(tb->indexes); - if (tb->Fdata) - fclose(tb->Fdata); - } - get_name(String, NOME); - sprintf(NomeFile, "%s/%s%s", DIR, CompressPrefix + 1, String); - if (Stat(NomeFile) == -1) - { - if (String[0] == 'K') - UnWindows(String); - else - hack_windows_total(String); - sprintf(NomeFile, "%s/%s%s", DIR, CompressPrefix + 1, String); - if (Stat(NomeFile) == -1) - { - if (VerboseRobboBases) - { - Send("Stat failed %s\n", NomeFile); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Stat failed %s\n", NomeFile); - close_log(); - } -#endif - - } - SOTT = true; - } - else - SOTT = false; - } - else - SOTT = false; - if (!SOTT) - { - tb = TableTotalBases + NumTotalBases; - RobboTotalAdd(tb, NOME, DIR); - strcpy(tb->string, String); - tb->TYPE = DiskCompressed; - tb->Fdata = NULL; - } - fread(A, 1, 4, F); - for (i = 0; i < 4; i++) - n |= A[i] << (i << 3); - tb->Blockpro = n &((1 << 28) - 1); - tb->BWT = n >> 28; - fread(A, 1, 4, F); - num_indexes = 0; - for (i = 0; i < 4; i++) - num_indexes |= A[i] << (i << 3); - tb->indexes = malloc(num_indexes << 2); - fread(tb->indexes, 4, num_indexes, F); - if (!SOTT) - TotIndexes += num_indexes; - for (i = 0; i < 8; i++) - tb->supp_indice[i] = 0xffffffff; - e = 0; - for (i = 1; i <= num_indexes - 1; i++) - if (tb->indexes[i] < tb->indexes[i - 1]) - tb->supp_indice[e++] = i; - tb->num_indexes = num_indexes; - } - TotalBaseCountList(); - } -static bool HasTotalBlockIndex(char *DIR) - { - FILE *F; - char Name[256]; - sprintf(Name, "%s/Block.Index", DIR); - F = fopen(Name, "rb"); - if (!F) - return false; - if (VerboseRobboBases) - { - Send("Using Block.Index for %s\n", DIR); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Using Block.Index for %s\n", DIR); - close_log(); - } -#endif - - } - BlockTotalIndexRegister(DIR, F); - fclose(F); - return true; - } -#ifdef WINDOWS -void GetTotalBase(char *A) - { - char B[1024]; - WIN32_FIND_DATA ffd; - HANDLE hFind = INVALID_HANDLE_VALUE; - if (HasTotalBlockIndex(A)) - return; - if (VerboseRobboBases) - { - Send("info string Reading directory %s\n", A); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Reading directory %s\n", A); - close_log(); - } -#endif - - } - strcpy(B, A); - strcat(B, "\\*"); - hFind = FindFirstFile(B, &ffd); - if (hFind == INVALID_HANDLE_VALUE) - { - if (VerboseRobboBases) - { - Send("info string Directory %s not found\n", A); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Directory %s not found\n", A); - close_log(); - } -#endif - } - - return; - } - do - { - if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - add_nome_total(ffd.cFileName, A); - } while (FindNextFile(hFind, &ffd)); - FindClose(hFind); - TotalBaseCountList(); - } -#else -#include -#include -#include -void GetTotalBase(char *A) - { - DIR *dir; - struct dirent *DE; - if (HasTotalBlockIndex(A)) - return; - if (VerboseRobboBases) - { - Send("info string Reading directory %s\n", A); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Reading directory %s\n", A); - close_log(); - } -#endif - } - - dir = opendir(A); - if (!dir) - { - if (VerboseRobboBases) - { - Send("info string Directory %s not found\n", A); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Directory %s not found\n", A); - close_log(); - } -#endif - - } - return; - } - while ((DE = readdir(dir))) - add_nome_total(DE->d_name, A); - closedir(dir); - TotalBaseCountList(); - } -#endif -#endif \ No newline at end of file diff --git a/Firenzina/robbo_suffix.c b/Firenzina/robbo_suffix.c deleted file mode 100644 index ce9918c..0000000 --- a/Firenzina/robbo_suffix.c +++ /dev/null @@ -1,212 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include -#include - -#define true 1 -#define MIN(x, y) ((x) <= (y) ? (x) : (y)) -#define MAX(x, y) ((x) >= (y) ? (x) : (y)) -#define uint8 unsigned char -#define AuxArrVal(x) (AUX[(IDX[x] + h >= N) ? (IDX[x] + h - N) : (IDX[x] + h)]) -#define SwapIdxVal(p, q) { int _x; _x = IDX[p]; IDX[p] = IDX[q]; IDX[q] = _x; } -#define Median3(a, b, c) \ - (AuxArrVal(a) < AuxArrVal(b) ? \ - (AuxArrVal(b) < AuxArrVal(c) ? (b) : \ - AuxArrVal(c) < AuxArrVal(a) ? (a) : (c)) : \ - (AuxArrVal(b) > AuxArrVal(c) ? (b) : \ - AuxArrVal(c) > AuxArrVal(a) ? (a) : (c))) -#define SELECT_LIMIT (9) -#define SMALL_ARRAY_SIZE (9) -#define LARGE_ARRAY_SIZE (81) - -static void SamePacket(int *IDX, int *AUX, int lo, int hi) - { - AUX[IDX[lo]] = hi; - if (lo == hi) - IDX[lo] = -1; - else - { - while (lo < hi) - AUX[IDX[++lo]] = hi; - } - } -static void SelectionSorter(int *IDX, int *AUX, int N, int h, int lo, int hi) - { - int s, small, val, pack_sz; - while (lo < hi) - { - pack_sz = 1; - s = lo + pack_sz; - small = AuxArrVal(lo); - while (s <= hi) - { - val = AuxArrVal(s); - if (val == small) - { - SwapIdxVal(s, lo + pack_sz); - pack_sz++; - } - if (val < small) - { - small = val; - SwapIdxVal(lo, s); - pack_sz = 1; - } - s++; - } - SamePacket(IDX, AUX, lo, lo + pack_sz - 1); - lo = lo + pack_sz; - } - if (lo == hi) - { - AUX[IDX[lo]] = lo; - IDX[lo] = -1; - } - } -static int PivotSelectionValue(int *IDX, int *AUX, int N, int h, int w, int sz) - { - int med; - if (sz < SMALL_ARRAY_SIZE) - med = w + (sz >> 1); - else if (sz < LARGE_ARRAY_SIZE) - med = Median3(w, w + (sz >> 1), w + sz - 1); - else - { - int lo, mid, hi, sh, m1, m2, m3; - lo = w; - mid = w + (sz >> 1); - hi = w + sz - 1; - sh = (sz >> 3); - m1 = Median3(lo, lo + sh, lo + (sh << 1)); - m2 = Median3(mid - sh, mid, mid + sh); - m3 = Median3(hi - (sh << 1), hi - sh, hi); - med = Median3(m1, m2, m3); - } - return AuxArrVal(med); - } -static void MainSorter(int *IDX, int *AUX, int N, int h, int LO, int HI) - { - int lo, slo, hi, shi, piv, val, s, q; - if ((HI - LO + 1) < SELECT_LIMIT) - { - SelectionSorter(IDX, AUX, N, h, LO, HI); - return; - } - piv = PivotSelectionValue(IDX, AUX, N, h, LO, HI - LO + 1); - lo = LO; - hi = HI; - slo = lo; - shi = hi; - while (true) - { - while (slo <= shi && (val = AuxArrVal(slo)) <= piv) - { - if (val == piv) - { - SwapIdxVal(lo, slo); - lo++; - } - slo++; - } - while (shi >= slo && (val = AuxArrVal(shi)) >= piv) - { - if (val == piv) - { - SwapIdxVal(hi, shi); - hi--; - } - shi--; - } - if (slo > shi) - break; - SwapIdxVal(slo, shi); - slo++; - shi--; - } - s = MIN(lo - LO, slo - lo); - for (q = 0; q < s; q++) - SwapIdxVal(LO + q, slo - s + q); - s = MIN(HI - hi, hi - shi); - for (q = 0; q < s; q++) - SwapIdxVal(slo + q, HI + 1 - s + q); - if (slo > lo) - MainSorter(IDX, AUX, N, h, LO, LO - 1 + slo - lo); - SamePacket(IDX, AUX, LO + slo - lo, HI - (hi - shi)); - if (hi > shi) - MainSorter(IDX, AUX, N, h, HI + 1 - (hi - shi), HI); - } -void SuffixSort(int *IDX, int *AUX, int N) - { - int w, ind, sort_run, h = 1; - MainSorter(IDX, AUX, N, 0, 0, N - 1); - while (IDX[0] > -N) - { - w = 0; - sort_run = 0; - while (w < N) - { - ind = IDX[w]; - if (ind < 0) - { - w += -ind; - sort_run += -ind; - } - else - { - if (sort_run) - { - IDX[w - sort_run] = -sort_run; - sort_run = 0; - } - MainSorter(IDX, AUX, N, h, w, AUX[ind]); - w = AUX[ind] + 1; - } - } - if (sort_run) - IDX[w - sort_run] = -sort_run; - h <<= 1; - } - } -void SuffixMake(uint8 *Data, int *IDX, int N) - { - int *AUX; - int i; - AUX = malloc(N * sizeof(int)); - for (i = 0; i < N; i++) - { - AUX[i] = Data[i]; - IDX[i] = i; - } - SuffixSort(IDX, AUX, N); - for (i = 0; i < N; i++) - IDX[AUX[i]] = i; - free(AUX); - } \ No newline at end of file diff --git a/Firenzina/robbo_totalbase.h b/Firenzina/robbo_totalbase.h deleted file mode 100644 index 3b3e32e..0000000 --- a/Firenzina/robbo_totalbase.h +++ /dev/null @@ -1,204 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -uint8 SpearPawn[4][64]; -#define Triangle 0x00000000080c0e0f -#define Margin 0x0000000008040201 -#define TriMar 0x80c0e0f0f8fcfeff -#define MaxTables 4096 -#define TripleMax 4096 -#define MaximumFopen 64 -uint16 InverseNormalKing[462], InversePawnKing[1806]; -uint16 Sq2Blocked[780], Sq2Pawn[1128], Sq2Normal[2016]; -uint32 Sq3blocked[9880], Sq3Pawn[17296], Sq3normal[41664]; -uint32 Sq4blocked[91390], Sq4Pawn[194580], Sq4normal[635376]; -sint16 KingNormal[4096], KingPawn[4096]; -int SameO4[64][64][64][64]; -int SameO3[64][64][64]; -int SameO2[64][64]; -typedef struct - { - uint8 pi[4], sq[4], wK, bK; - bool wtm, Pawn; - uint32 n; - uint64 Blocked; - bool DTR; - } type_PiSq; -int RB_CPUS; -uint64 ListSize; -#ifndef WINDOWS -#define UseSpinLocks true -#endif -#ifdef UseSpinLocks -#define RobboLockType pthread_spinlock_t -#define RobboLockIt(x) pthread_spin_lock (x) -#define RobboUnLockIt(x) pthread_spin_unlock (x) -#define RobboLock(tb, ind) pthread_spin_lock (&(tb->locks)[ind]); -#define RobboUnLock(tb, ind) pthread_spin_unlock (&(tb->locks)[ind]); -#define RobboLockInit(x) pthread_spin_init (x, 1) -#define RobboLockDestroy(x) pthread_spin_destroy (x) -#else -#define RobboLockType MutexType -#define RobboLockIt(x) Lock (x) -#define RobboUnLockIt(x) UnLock (x) -#define RobboLock(tb, ind) Lock (&(tb->locks)[ind]); -#define RobboUnLock(tb, ind) UnLock (&(tb->locks)[ind]); -#define RobboLockInit(x) LockInit (x) -#define RobboLockDestroy(x) LockDestroy (x) -#endif -MutexType RB_SMP[1]; -MutexType FWriteLock[1]; -bool DiskSwap; -typedef struct - { - uint64 m[4]; - uint8 *data, *Mar, *Win, *Loss; - uint8 p[4]; - uint64 pro, PawnMult, PawnMult8, supp; - int num, maximum_rima, shift, num_indexes; - uint32 *indexes, Blockpro, BWT; - bool Pawn, simm, Memory, TYPE, is_uno, DTR; - sint8 efgh1, efgh2, _0; - uint16 efgh[4]; - uint8 efgh_shift[4], efgh_file[4]; - FILE *Fdata, *Frima, *Fvit, *Fmar, *Fper, *Fsupp; - int *rima_pro, *vit_pro, *per_pro, *mar_pro; - uint32 supp_indice[8]; - char DirNome[256]; - char string[16]; - RobboLockType *locks; - } RobboTotalBase; -typeMoveList *GenCapturesTotal(typePos *, typeMoveList *); -typeMoveList *WhiteQueenPromotions(typePos *, typeMoveList *, uint64); -void LoadTriple(char *, char *); -void GetTripleBase(char *); -#define Mark(A,w) (A[(w) >> 3] & (1 << ((w) & 7))) -#define Set(A,w) (A[(w) >> 3] |= (1 << ((w) & 7))) -#define UnSet(A,w) (A[(w) >> 3] &= ~(1 << ((w) & 7))) -int CountWhite(typePos *, uint64 *); -void InitTotalBase(); -void DiskFread1(uint8 *, uint64, uint64, FILE *, uint64); -void DiskFread2(uint8 *, uint64, uint64, FILE *, uint64); -int DiskFwrite1(uint8 *, uint64, uint64, FILE *); -int DiskFwrite2(uint8 *, uint64, uint64, FILE *); -void UnWindows(char *); - -#define DIV(X,a,b) \ - { if ((b) == 1) X = (a); \ - else if ((b) == 10) X = (a) / 10; \ - else if ((b) == 12) X = (a) / 12; \ - else if ((b) == 24) X = (a) / 24; \ - else if ((b) == 40) X = (a) / 40; \ - else if ((b) == 48) X = (a) / 48; \ - else if ((b) == 64) X = (a) / 64; \ - else if ((b) == 780) X = (a) / 780; \ - else if ((b) == 1128) X = (a) / 1128; \ - else if ((b) == 2016) X = (a) / 2016; \ - else if ((b) == 9880) X = (a) / 9880; \ - else if ((b) == 17296) X = (a) / 17296; \ - else if ((b) == 41664) X = (a) / 41664; \ - else if ((b) == 91390) X = (a) / 91390; \ - else if ((b) == 194580) X = (a) / 194580; \ - else if ((b) == 635376) X = (a) / 635376; } -uint8 SpearHoriz[64], SpearVert[64], SpearDiag[64]; -typedef struct - { - uint8 sq[4], pi[4], rip[4], rip_ai[4], efgh_shift[4], wK, bK; - bool capW[4], capB[4]; - uint64 m[4], KingSlice_molt, Double, ind, Occupied, Pawn, KingSlice, PawnOnFourth; - } tipo_fPos; -bool TotIndOtt(type_PiSq *, int *, uint64 *, uint64 *, int *); -uint64 MakeMark(RobboTotalBase *, int, RobboTotalBase *); -uint64 MakeRima(RobboTotalBase *, int, RobboTotalBase *); -void InitVariation(); -int Compression(unsigned char *, int, int); -int BlockDecompress(unsigned char *, unsigned char *, int, int); -void InitTotalBaseCache(uint64); -bool BitboardPQ(typePos *, type_PiSq *); -char TripleBaseDir[1024]; -uint64 TotIndexes; -#define wEnumB wEnumBL -#define bEnumB bEnumBL -#define BlockedPawn 8 -#define MaxNum 4 -int NomeCanonico(char *, bool *); -void RobboTotalSott(char *); -char TotalBaseDir[1024]; -char CompressPrefix[1024]; -int RobboTotalSweep(char *); -void GetTotalBase(char *); -#define DiskCompressed 0x05 -#define DiskHuffman 0x03 -RobboTotalBase *TableTotalBases; -int NumTotalBases; -int TotalBaseTable[16][16][16][16]; -int ColScamb[16]; -#define DiskNon 1 -#define InCheck \ - (Position->wtm ? \ - (wBitboardK & Position->Dyn->bAtt) : (bBitboardK & Position->Dyn->wAtt)) -#define IsIllegal \ - (!Position->wtm ? \ - (wBitboardK & Position->Dyn->bAtt) : (bBitboardK & Position->Dyn->wAtt)) -#define MaximumRima 125 -#define ValueBroken (MaximumRima + 1) -#define ValueUnknown (MaximumRima + 2) -#define ValueWin (MaximumRima + 3) -#define ValueDraw (MaximumRima + 4) -#define FirstLoss (MaximumRima + 5) -#define LossIn(x) (FirstLoss + (x)) -#define eWinTotal(Value)((Value) == ValueWin) -#define eDrawTotal(Value)((Value) == ValueDraw) -#define eLossTotal(Value)((Value) >= FirstLoss) -#define DrawLoss(Value) ((Value) >= ValueDraw) -#define Largh (240 - MaximumRima) -#define LossEnd ((FirstLoss) + (Largh)) -#define dBreak 0x00 -#define dWin 0x01 -#define dDraw 0x02 -#define dLoss (dDraw + 1) -#define DiskDrawLoss(x) ((x) >= dDraw) -#define DiskWin(x) ((x) == dWin) -#define DiskDraw(x) ((x) == dDraw) -#define DiskLoss(x) ((x) >= dLoss) -bool OttIndice(type_PiSq *, uint64 *, uint64 *, int *); -bool RobboTotalBaseScore(typePos *, int *); -int TotalValue(RobboTotalBase *, uint64); -void KingSlice(RobboTotalBase *, int); -void RobboTotalAdd(RobboTotalBase *, char *, char *); -bool RobboTotalRegister(char *, char *); -void InitTotalBaseUtility(bool); -void InitTotalBaseCache(); -void InitTripleBase(); -#define Exchange(x,y) { x ^= y; y ^= x; x ^= y; } -#define SpearPiece(u,x) x = SpearPawn[u][x] -#define SpearNorm(u,x) x = SpearNorm[u][x] -uint8 oSpear[64][64], SpearNorm[8][64]; -void Send(char *fmt, ...); \ No newline at end of file diff --git a/Firenzina/robbo_triple.c b/Firenzina/robbo_triple.c deleted file mode 100644 index a5793ba..0000000 --- a/Firenzina/robbo_triple.c +++ /dev/null @@ -1,515 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef RobboBases -#include "robbo_triplebase.h" -#include "robbo_totalbase.h" - -#define SaferFree(x) if ((x)) free ((x)) -#define SaferFreeAligned(x) if ((x)) AlignedFree ((x)) - -uint64 BytesTriple, IndTriple, IndTripleEx; -RobboTripleBase *TableTripleBases; -int NumTripleBases = 0; -uint64 StartClock; -int TripleBaseTable[16][16][16][16]; - -void UnWindowsTriple(char *A) - { - int s = strlen(A); - if (A[1] == 'w') - A[0] = A[2] - 32; - if (A[1] == 'b') - A[0] = A[2]; - if (s > 3 && A[3] == 'w') - A[1] = A[4] - 32; - if (s > 3 && A[3] == 'b') - A[1] = A[4]; - if (s > 5 && A[5] == 'w') - A[2] = A[6] - 32; - if (s > 5 && A[5] == 'b') - A[2] = A[6]; - if (s > 7 && A[7] == 'w') - A[3] = A[8] - 32; - if (s > 7 && A[7] == 'b') - A[3] = A[8]; - A[s >> 1] = 0; - } -void HackWindowsTriple(char *NOME) - { - char Temp[16]; - int i; - strcpy(Temp, NOME); - NOME[0] = 'K'; - for (i = 0; i < 4; i++) - { - if (Temp[i] == 0) - NOME[(i << 1) + 1] = NOME[(i << 1) + 2] = 0; - else if (Temp[i] >= 'A' && Temp[i] <= 'Z') - { - NOME[(i << 1) + 1] = 'w'; - NOME[(i << 1) + 2] = Temp[i] - 'A' + 'a'; - } - else - { - NOME[(i << 1) + 1] = 'b'; - NOME[(i << 1) + 2] = Temp[i]; - } - } - NOME[9] = 0; - } -void TripleEnumerateReset() - { - int i; - for (i = 0; i < NumTripleBases; i++) - (TableTripleBases + i)->weak = (TableTripleBases + i)->hit = 0; - } -RobboTripleBase *LookupTriple(char *I) - { - int v, p[4] = - { - 0, 0, 0, 0 - }, i; - int EFGH = -1, IJ1 = -1, IJ2 = -1; - int file, file1, file2; - RobboTripleBase *rtb; - for (i = 0; i < 4 && i < strlen(I); i++) - { - switch (I[i]) - { - case 'Q': - p[i] = wEnumQ; - break; - case 'q': - p[i] = bEnumQ; - break; - case 'R': - p[i] = wEnumR; - break; - case 'r': - p[i] = bEnumR; - break; - case 'B': - p[i] = wEnumB; - break; - case 'b': - p[i] = bEnumB; - break; - case 'N': - p[i] = wEnumN; - break; - case 'n': - p[i] = bEnumN; - break; - case 'E': - case 'F': - case 'G': - case 'H': - EFGH = i; - case 'e': - case 'f': - case 'g': - case 'h': - EFGH = i; - case 'P': - p[i] = wEnumP; - break; - case 'p': - p[i] = bEnumP; - break; - case 'U': - case 'V': - case 'W': - case 'X': - EFGH = i; - case 'Z': - p[i] = BlockedPawn; - break; - case 'I': - case 'J': - if (IJ1 == -1) - IJ1 = i; - else - IJ2 = i; - p[i] = wEnumP; - break; - case 'i': - case 'j': - if (IJ1 == -1) - IJ1 = i; - else - IJ2 = i; - p[i] = bEnumP; - break; - default: - return NULL; - } - switch (I[i]) - { - case 'E': - case 'e': - case 'U': - file = 3; - break; - case 'F': - case 'f': - case 'V': - file = 2; - break; - case 'G': - case 'g': - case 'W': - file = 1; - break; - case 'H': - case 'h': - case 'X': - file = 0; - break; - } - switch (I[i]) - { - case 'I': - file1 = 0; - break; - case 'J': - file1 = 1; - break; - case 'i': - file2 = 0; - break; - case 'j': - file2 = 1; - break; - } - } - v = TripleBaseTable[p[0]][p[1]][p[2]][p[3]]; - if (v == -1) - return NULL; - v &= 0xffff; - rtb = TableTripleBases + v; - if (EFGH != -1) - v = rtb->efgh[file]; - if (IJ1 != -1) - v = rtb->efgh[file1 + (file2 << 1)]; - return (TableTripleBases + v); - } -void CleanupTriple() - { - int i, j, k, l; - RobboTripleBase *rtb; - for (i = 0; i < NumTripleBases; i++) - { - rtb = (TableTripleBases + i); - SaferFree(rtb->ind); - SaferFree(rtb->data); - for (j = 0; j < 8; j++) - { - SaferFreeAligned(rtb->direct_cache[j].Data); - SaferFreeAligned(rtb->direct_cache[j].Index); - SaferFreeAligned(rtb->huffman_table[j]); - SaferFree(rtb->ind_split[j]); - SaferFree(rtb->packet_offset[j]); - } - } - for (i = 0; i < 16; i++) - for (j = 0; j < 16; j++) - for (k = 0; k < 16; k++) - for (l = 0; l < 16; l++) - TripleBaseTable[i][j][k][l] = -1; - NumTripleBases = 0; - BytesTriple = IndTriple = IndTripleEx = 0; - BulkBytes = BulkInd = 0; - BulkCount = LoadCount = DirectCount = 0; - TripleMaxUsage = 0; - TrivialCount = 0; - } -void InitTripleBase() - { - int i, j, k, l; - for (i = 0; i < 16; i++) - for (j = 0; j < 16; j++) - for (k = 0; k < 16; k++) - for (l = 0; l < 16; l++) - TripleBaseTable[i][j][k][l] = -1; - TableTripleBases = malloc(TripleMax * sizeof(RobboTripleBase)); - InitTripleBaseCache(1); - } -void RobboTriple_delete(char *NOME) - { - RobboTripleBase *triple; - int heaps, h; - triple = LookupTriple(NOME); - if (triple == NULL) - return; - heaps = (triple->size >> 30) + 1; - for (h = 0; h < heaps; h++) - free(triple->ind_split[h]); - for (h = 0; h < heaps; h++) - free(triple->packet_offset[h]); - } -void TripleUtility(RobboTripleBase *rtb, char *iNOME) - { - int i, p[4]; - char NOME[256]; - int file; - int u, v, w; - rtb->disk = NULL; - rtb->direct = false; - for (i = 0; i < 8; i++) - rtb->direct_cache[i].Data = NULL; - for (i = 0; i < 8; i++) - rtb->direct_cache[i].Index = NULL; - for (i = 0; i < 8; i++) - rtb->huffman_table[i] = NULL; - strcpy(NOME, iNOME); - if (NOME[0] == 'K' || NOME[0] == 'k') - UnWindows(NOME); - strcpy(rtb->nome, NOME); - for (i = 0; NOME[i]; i++); - for (; i < 4; i++) - NOME[i] = 0; - rtb->pawns = false; - rtb->efgh1 = -1; - rtb->efgh2 = -1; - for (i = 0; i < 4; i++) - { - rtb->efgh_shift[i] = 0; - rtb->efgh_file[i] = -1; - rtb->efgh[i] = 0xffff; - switch (NOME[i]) - { - case 'Q': - p[i] = wEnumQ; - break; - case 'q': - p[i] = bEnumQ; - break; - case 'R': - p[i] = wEnumR; - break; - case 'r': - p[i] = bEnumR; - break; - case 'B': - p[i] = wEnumB; - break; - case 'b': - p[i] = bEnumB; - break; - case 'N': - p[i] = wEnumN; - break; - case 'n': - p[i] = bEnumN; - break; - case 'I': - case 'J': - rtb->efgh1 = i; - p[i] = wEnumP; - break; - case 'E': - case 'F': - case 'G': - case 'H': - rtb->efgh1 = i; - case 'P': - p[i] = wEnumP; - break; - case 'i': - case 'j': - rtb->efgh2 = i; - p[i] = bEnumP; - break; - case 'e': - case 'f': - case 'g': - case 'h': - rtb->efgh1 = i; - case 'p': - p[i] = bEnumP; - break; - case 'U': - case 'V': - case 'W': - case 'X': - rtb->efgh1 = i; - case 'Z': - p[i] = BlockedPawn; - break; - default: - p[i] = 0; - } - switch (NOME[i]) - { - case 'E': - case 'e': - case 'U': - file = 3; - break; - case 'F': - case 'f': - case 'V': - file = 2; - break; - case 'G': - case 'g': - case 'W': - case 'J': - case 'j': - file = 1; - break; - case 'H': - case 'h': - case 'X': - case 'I': - case 'i': - file = 0; - } - if (p[i]) - { - if (p[i] == wEnumP || p[i] == bEnumP) - rtb->m[i] = 48; - else if (p[i] == BlockedPawn) - rtb->m[i] = 40; - else - rtb->m[i] = 64; - if (p[i] == wEnumP || p[i] == bEnumP || p[i] == BlockedPawn) - rtb->pawns = true; - if (rtb->efgh2 == i) - { - rtb->m[i] >>= 1; - rtb->efgh_shift[i] = 1; - rtb->efgh_file[i] = file; - if (rtb->efgh1 != -1) - { - rtb->m[rtb->efgh1] <<= 1; - rtb->efgh_shift[rtb->efgh1] = 1; - file = (file << 1) + rtb->efgh_file[rtb->efgh1]; - } - } - else if (rtb->efgh1 == i) - { - if (rtb->efgh2 != -1) - { - rtb->m[i] >>= 1; - rtb->efgh_shift[i] = 1; - rtb->efgh_file[i] = file; - file = (rtb->efgh_file[rtb->efgh2] << 1) + file; - } - else - { - rtb->m[i] >>= 2; - rtb->efgh_shift[i] = 2; - rtb->efgh_file[i] = file; - } - } - } - else - rtb->m[i] = 1; - rtb->p[i] = p[i]; - } - if (p[0] && p[0] == p[3]) - { - rtb->m[0] = (rtb->m[0] * (rtb->m[0] - 1) * (rtb->m[0] - 2) * (rtb->m[0] - 3)) / 24; - rtb->m[1] = rtb->m[2] = rtb->m[3] = 1; - } - else if (p[0] && p[0] == p[2]) - { - rtb->m[0] = (rtb->m[0] * (rtb->m[0] - 1) * (rtb->m[0] - 2)) / 6; - rtb->m[1] = rtb->m[2] = 1; - } - else if (p[1] && p[1] == p[3]) - { - rtb->m[1] = (rtb->m[1] * (rtb->m[1] - 1) * (rtb->m[1] - 2)) / 6; - rtb->m[2] = rtb->m[3] = 1; - } - else - { - if (p[0] && p[0] == p[1]) - { - rtb->m[0] = (rtb->m[0] * (rtb->m[0] - 1)) >> 1; - rtb->m[1] = 1; - } - if (p[1] && p[1] == p[2]) - { - rtb->m[1] = (rtb->m[1] * (rtb->m[1] - 1)) >> 1; - rtb->m[2] = 1; - } - if (p[2] && p[2] == p[3]) - { - rtb->m[2] = (rtb->m[2] * (rtb->m[2] - 1)) >> 1; - rtb->m[3] = 1; - } - } - rtb->num = NumTripleBases; - if (TripleBaseTable[p[0]][p[1]][p[2]][p[3]] != -1) - goto EfghijFix; - TripleBaseTable[p[0]][p[1]][p[2]][p[3]] = NumTripleBases + (0 << 16) + (1 << 18) + (2 << 20) + (3 << 22); - TripleBaseTable[p[1]][p[0]][p[2]][p[3]] = NumTripleBases + (1 << 16) + (0 << 18) + (2 << 20) + (3 << 22); - TripleBaseTable[p[0]][p[2]][p[1]][p[3]] = NumTripleBases + (0 << 16) + (2 << 18) + (1 << 20) + (3 << 22); - TripleBaseTable[p[1]][p[2]][p[0]][p[3]] = NumTripleBases + (2 << 16) + (0 << 18) + (1 << 20) + (3 << 22); - TripleBaseTable[p[2]][p[0]][p[1]][p[3]] = NumTripleBases + (1 << 16) + (2 << 18) + (0 << 20) + (3 << 22); - TripleBaseTable[p[2]][p[1]][p[0]][p[3]] = NumTripleBases + (2 << 16) + (1 << 18) + (0 << 20) + (3 << 22); - TripleBaseTable[p[0]][p[1]][p[3]][p[2]] = NumTripleBases + (0 << 16) + (1 << 18) + (3 << 20) + (2 << 22); - TripleBaseTable[p[0]][p[2]][p[3]][p[1]] = NumTripleBases + (0 << 16) + (3 << 18) + (1 << 20) + (2 << 22); - TripleBaseTable[p[1]][p[0]][p[3]][p[2]] = NumTripleBases + (1 << 16) + (0 << 18) + (3 << 20) + (2 << 22); - TripleBaseTable[p[1]][p[2]][p[3]][p[0]] = NumTripleBases + (3 << 16) + (0 << 18) + (1 << 20) + (2 << 22); - TripleBaseTable[p[2]][p[0]][p[3]][p[1]] = NumTripleBases + (1 << 16) + (3 << 18) + (0 << 20) + (2 << 22); - TripleBaseTable[p[2]][p[1]][p[3]][p[0]] = NumTripleBases + (3 << 16) + (1 << 18) + (0 << 20) + (2 << 22); - TripleBaseTable[p[0]][p[3]][p[1]][p[2]] = NumTripleBases + (0 << 16) + (2 << 18) + (3 << 20) + (1 << 22); - TripleBaseTable[p[0]][p[3]][p[2]][p[1]] = NumTripleBases + (0 << 16) + (3 << 18) + (2 << 20) + (1 << 22); - TripleBaseTable[p[1]][p[3]][p[0]][p[2]] = NumTripleBases + (2 << 16) + (0 << 18) + (3 << 20) + (1 << 22); - TripleBaseTable[p[1]][p[3]][p[2]][p[0]] = NumTripleBases + (3 << 16) + (0 << 18) + (2 << 20) + (1 << 22); - TripleBaseTable[p[2]][p[3]][p[0]][p[1]] = NumTripleBases + (2 << 16) + (3 << 18) + (0 << 20) + (1 << 22); - TripleBaseTable[p[2]][p[3]][p[1]][p[0]] = NumTripleBases + (3 << 16) + (2 << 18) + (0 << 20) + (1 << 22); - TripleBaseTable[p[3]][p[0]][p[1]][p[2]] = NumTripleBases + (1 << 16) + (2 << 18) + (3 << 20) + (0 << 22); - TripleBaseTable[p[3]][p[0]][p[2]][p[1]] = NumTripleBases + (1 << 16) + (3 << 18) + (2 << 20) + (0 << 22); - TripleBaseTable[p[3]][p[1]][p[0]][p[2]] = NumTripleBases + (2 << 16) + (1 << 18) + (3 << 20) + (0 << 22); - TripleBaseTable[p[3]][p[1]][p[2]][p[0]] = NumTripleBases + (3 << 16) + (1 << 18) + (2 << 20) + (0 << 22); - TripleBaseTable[p[3]][p[2]][p[0]][p[1]] = NumTripleBases + (2 << 16) + (3 << 18) + (1 << 20) + (0 << 22); - TripleBaseTable[p[3]][p[2]][p[1]][p[0]] = NumTripleBases + (3 << 16) + (2 << 18) + (1 << 20) + (0 << 22); - if (rtb->efgh1 != -1) - rtb->efgh[file] = NumTripleBases; - NumTripleBases++; - return; - EfghijFix: - v = TripleBaseTable[p[0]][p[1]][p[2]][p[3]] & 0xffff; - for (u = 0; u < 4; u++) - if (((w = (TableTripleBases + v)->efgh[u])) != 0xffff) - { - (TableTripleBases + w)->efgh[file] = NumTripleBases; - rtb->efgh[u] = w; - } - rtb->efgh[file] = NumTripleBases; - NumTripleBases++; - } -#endif \ No newline at end of file diff --git a/Firenzina/robbo_triple_disk.c b/Firenzina/robbo_triple_disk.c deleted file mode 100644 index 152f95f..0000000 --- a/Firenzina/robbo_triple_disk.c +++ /dev/null @@ -1,309 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef RobboBases -#include "robbo_triplebase.h" -#include "robbo_totalbase.h" - -static TripleBaseCache *TripleCache[4]; -static volatile uint64 *TripleCacheNotE[4]; -static MutexType TripleBaseDiskAccess[1]; -static uint64 TripleCacheNum = 0; -static uint64 CurrentTripleCacheSize = 0; -MutexType TripleBaseUsage[1]; - -static volatile uint32 TripleLoaded = 0; -#define CheckByte(x, y) \ - if (x != y) { Send ("Bad Triple watermark %s %d %d %d\n", \ - rtb->string, rtb->num, heap, slice); return false; } -#define CheckByte0(x, y) \ - if (x != y) { Send ("Bad Triple watermark (SMP) %s %d " Type64Bit "\n", \ - rtb->string, rtb->num, meld); } -#define GetCache0(a, b, c) \ - ((411 * (a) + 517 * (b) + 373 * (c)) & (TripleCacheNum - 1)) -#define GetCache1(a, b, c) \ - ((725 * (a) + 309 * (b) + 611 * (c)) & (TripleCacheNum - 1)) -#define GetCache2(a, b, c) \ - ((887 * (a) + 521 * (b) + 225 * (c)) & (TripleCacheNum - 1)) -#define GetCache3(a, b, c) \ - ((921 * (a) + 1011 * (b) + 703 * (c)) & (TripleCacheNum - 1)) -#define GetCache(x ,a, b, c) \ - ((x) >= 2) ? (((x) == 2) ? GetCache2 (a, b, c) : GetCache3 (a, b, c)) \ - : (((x) == 1) ? GetCache1 (a, b, c) : GetCache0 (a, b, c)) -#define MaxFopen 64 -static uint32 open_file_count = 0; - -typedef struct - { - RobboTripleBase *rtb; - int e, he; - uint64 offset, meld; - } typeTNG; -static typeTNG NextGet[1]; - -int SetTripleBaseCache(int mb) - { - int i, j; - mb = 1 << BSR(mb); - TripleCacheNum = mb; - for (i = 0; i < 4; i++) - if (TripleCacheNotE[i]) - free(TripleCacheNotE[i]); - for (i = 0; i < 4; i++) - if (TripleCache[i]) - { - for (j = 0; j < CurrentTripleCacheSize; j++) - if (TripleCache[i][j].Data) - AlignedFree(TripleCache[i][j].Data); - for (j = 0; j < CurrentTripleCacheSize; j++) - if (TripleCache[i][j].Data) - AlignedFree(TripleCache[i][j].Index); - free(TripleCache[i]); - } - TripleCacheNotE[0] = malloc(TripleCacheNum * sizeof(uint64)); - TripleCacheNotE[1] = malloc(TripleCacheNum * sizeof(uint64)); - TripleCacheNotE[2] = malloc(TripleCacheNum * sizeof(uint64)); - TripleCacheNotE[3] = malloc(TripleCacheNum * sizeof(uint64)); - TripleCache[0] = malloc(TripleCacheNum * sizeof(TripleBaseCache)); - TripleCache[1] = malloc(TripleCacheNum * sizeof(TripleBaseCache)); - TripleCache[2] = malloc(TripleCacheNum * sizeof(TripleBaseCache)); - TripleCache[3] = malloc(TripleCacheNum * sizeof(TripleBaseCache)); - for (j = 0; j < 4; j++) - for (i = 0; i < TripleCacheNum; i++) - { - TripleCache[j][i].Data = NULL; - TripleCache[j][i].Index = NULL; - TripleCache[j][i].user = 0; - } - for (j = 0; j < 4; j++) - for (i = 0; i < TripleCacheNum; i++) - TripleCacheNotE[j][i] = 0xffffffff; - CurrentTripleCacheSize = mb; - if (VerboseRobboBases) - Send("info string TripleCacheSize is %dmb\n", mb); - return mb; - } -void InitTripleBaseCache(uint64 mb) - { - int i; - LockInit(TripleBaseUsage); - LockInit(TripleBaseDiskAccess); - for (i = 0; i < 4; i++) - { - TripleCacheNotE[i] = NULL; - TripleCache[i] = NULL; - } - SetTripleBaseCache(mb); - NextGet->rtb = NULL; - NextGet->e = 0; - NextGet->he = 0; - NextGet->offset = 0; - NextGet->meld = 0; - } -void OpenTripleFile(RobboTripleBase *rtb) - { - int i; - char STR[512]; - if (rtb->disk) - return; - open_file_count++; - if (open_file_count == MaxFopen) - { - for (i = 0; i < TripleMax; i++) - if (rtb->disk) - { - fclose(rtb->disk); - rtb->disk = NULL; - } - open_file_count = 1; - } - sprintf(STR, "%s/%s", rtb->DirNome, rtb->path); - rtb->disk = fopen(STR, "rb"); - } -void OfftoneTripleSMP() - { - NextGet->rtb = NULL; - } -bool SubsumeTripleSMP() - { - RobboTripleBase *rtb; - uint64 off_set, meld; - int ind, bytes, e, he; - if (!NextGet->rtb) - return false; - Lock(TripleBaseUsage); - rtb = NextGet->rtb; - off_set = NextGet->offset; - e = NextGet->e; - he = NextGet->he; - meld = NextGet->meld; - NextGet->rtb = NULL; - if (TripleCache[e][he].user) - { - UnLock(TripleBaseUsage); - return false; - } - TripleCacheNotE[e][he] = 0xffffbad0; - UnLock(TripleBaseUsage); - Lock(TripleBaseDiskAccess); - if (!rtb->disk) - OpenTripleFile(rtb); - fseek(rtb->disk, off_set, SEEK_SET); - CheckByte0(fgetc(rtb->disk), 0xf2); - CheckByte0(fgetc(rtb->disk), 0x77); - CheckByte0(fgetc(rtb->disk), 0x83); - CheckByte0(fgetc(rtb->disk), 0x83); - fread(&ind, 4, 1, rtb->disk); - fread(&bytes, 4, 1, rtb->disk); - fread(TripleCache[e][he].Index, 4, ind, rtb->disk); - fread(TripleCache[e][he].Data, 1, bytes, rtb->disk); - UnLock(TripleBaseDiskAccess); - Lock(TripleBaseUsage); - TripleCacheNotE[e][he] = meld; - UnLock(TripleBaseUsage); - return true; - } -bool DemandDynamicTripleCache(RobboTripleBase *rtb, int heap, int slice, TripleBaseCache ** Cache, uint8 ** Data, - uint32 ** Index, bool ProbingWeak, bool ProbingImpale) - { - int i, h[4], e, bytes, ind; - uint64 meld = (((uint64)rtb->num) << 48) | (((uint64)heap) << 32) | slice; - if (rtb->direct == true) - { - *Cache = &rtb->direct_cache[heap]; - *Data = ((*Cache)->Data) + (0x40000 * slice); - *Index = ((*Cache)->Index) + (0x1220 * slice); - return true; - } - Redo: - for (i = 0; i < 4; i++) - { - h[i] = GetCache(i, rtb->num, heap, slice); - if (TripleCacheNotE[i][h[i]] == meld) - { - Lock(TripleBaseUsage); - if (TripleCacheNotE[i][h[i]] != meld) - { - UnLock(TripleBaseUsage); - if (ProbingImpale) - goto Redo; - return false; - } - TripleCache[i][h[i]].user++; - *Cache = &TripleCache[i][h[i]]; - *Data = (*Cache)->Data; - *Index = (*Cache)->Index; - UnLock(TripleBaseUsage); - return true; - } - } - TripleLoaded++; - e = -1; - for (i = 0; i < 4; i++) - if (TripleCacheNotE[i][h[i]] == 0xffffffff) - e = i; - if (e == -1) - { - e = 0; - for (i = 0; i < 12; i += 3) - e += (TripleLoaded >> i); - e &= 3; - } - Lock(TripleBaseUsage); - -#define TripleConditionDisk \ - (!TripleCache[e][h[e]].user && TripleCacheNotE[e][h[e]] != 0xffffbad0) - while (!TripleConditionDisk) - { - e ^= 1; - if (TripleConditionDisk) - break; - e ^= 2; - if (TripleConditionDisk) - break; - e ^= 1; - if (TripleConditionDisk) - break; - UnLock(TripleBaseUsage); - if (ProbingImpale) - goto Redo; - return false; - } - if (!ProbingWeak) - { - TripleCache[e][h[e]].user = 1; - TripleCacheNotE[e][h[e]] = 0xffffbad0; - } - UnLock(TripleBaseUsage); - if (!TripleCache[e][h[e]].Data) - MemAlign(TripleCache[e][h[e]].Data, 0x40, 0x40000); - if (!TripleCache[e][h[e]].Index) - MemAlign(TripleCache[e][h[e]].Index, 0x40, 0x1220 * sizeof(uint32)); - - if (ProbingWeak) - { - Lock(TripleBaseUsage); - if (TripleCacheNotE[e][h[e]] == 0xffffbad0) - { - UnLock(TripleBaseUsage); - return false; - } - rtb->weak++; - NextGet->rtb = rtb; - NextGet->e = e; - NextGet->he = h[e]; - NextGet->offset = rtb->packet_offset[heap][slice]; - NextGet->meld = meld; - UnLock(TripleBaseUsage); - return false; - } - Lock(TripleBaseDiskAccess); - if (!rtb->disk) - OpenTripleFile(rtb); - fseek(rtb->disk, rtb->packet_offset[heap][slice], SEEK_SET); - CheckByte(fgetc(rtb->disk), 0xf2); - CheckByte(fgetc(rtb->disk), 0x77); - CheckByte(fgetc(rtb->disk), 0x83); - CheckByte(fgetc(rtb->disk), 0x83); - fread(&ind, 4, 1, rtb->disk); - fread(&bytes, 4, 1, rtb->disk); - fread(TripleCache[e][h[e]].Index, 4, ind, rtb->disk); - fread(TripleCache[e][h[e]].Data, 1, bytes, rtb->disk); - UnLock(TripleBaseDiskAccess); - *Cache = &TripleCache[e][h[e]]; - *Data = (*Cache)->Data; - *Index = (*Cache)->Index; - Lock(TripleBaseUsage); - TripleCacheNotE[e][h[e]] = meld; - UnLock(TripleBaseUsage); - return true; - } -#endif \ No newline at end of file diff --git a/Firenzina/robbo_triple_init.c b/Firenzina/robbo_triple_init.c deleted file mode 100644 index dac9109..0000000 --- a/Firenzina/robbo_triple_init.c +++ /dev/null @@ -1,1016 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef RobboBases -#include "robbo_totalbase.h" -#include "robbo_triplebase.h" - -#define WindowsTriplePrefix "triple" -#define CheckByte(x, y) \ - if ((x) != (y)) \ - { Send ("Bad DynamicLoad watermark %5s %d %d\n", rtb->string, x, y); \ - return; } -void ReFactorDirectoryNaming(char *); -uint64 BytesTriple = 0, IndTriple = 0, IndTripleEx = 0; -void HackWindowsTriple(char * NOME); -void OpenTripleFile(RobboTripleBase *); - -static uint32 fgetI(FILE *F) - { - int i; - uint32 r = 0; - for (i = 0; i < 4; i++) - r |= (fgetc(F) << (8 * i)); - return r; - } -static void RobboDynamicLoadSetUp(RobboTripleBase *rtb, FILE *F) - { - uint64 sz = rtb->size; - uint64 heaps = (sz >> 30) + 1; - int u, v, i, j, b, uc, hsz, uu; - LoadCount++; - CheckByte(fgetc(F), 0x53); - CheckByte(fgetc(F), 0xa1); - CheckByte(fgetc(F), 0x78); - CheckByte(fgetc(F), 0x0e); - u = fgetc(F); - v = fgetc(F); - rtb->prop_ind = u | (v << 8); - if (u != 0x40) - { - if (VerboseRobboBases) - { - Send("Dynamic Load requires 64 byte canals. Bytes %d\n", u); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Dynamic Load requires 64 byte canals. Bytes %d\n", u); - close_log(); - } -#endif - - } - } - u = fgetc(F); - if (u != 18) - { - if (VerboseRobboBases) - { - Send("Dynamic Load requires shift of 18. Shift %d\n", u); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Dynamic Load requires shift of 18. Shift %d\n", u); - close_log(); - } -#endif - - } - } - u = fgetc(F); - if (u != heaps) - { - if (VerboseRobboBases) - { - Send("Heap count corrupted in DynamicLoad %d %d %s " Type64Bit "\n", u, heaps, rtb->string, rtb->size); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Heap count corrupted in DynamicLoad %d %d %s " Type64Bit "\n", u, heaps, rtb->string, rtb->size); - close_log(); - } -#endif - - } - } - - u = fgetI(F); - for (i = 0; i < heaps; i++) - { - uu = fgetI(F); - u = uu & 0xfffffff; - u &= 0xfffffff; - b = 0; - uc = u; - while (uc >>= 1) - b++; - rtb->packet_count[i] = u; - rtb->bs_split[i] = b - 1; - rtb->ind_split[i] = malloc((2 << b) * sizeof(uint32)); - rtb->packet_offset[i] = malloc(u * sizeof(uint32)); - for (j = 0; j < u; j++) - rtb->ind_split[i][j] = fgetI(F); - for (j = u; j < (2 << b); j++) - rtb->ind_split[i][j] = (0x3fffffffULL << 2) | 0; - for (j = 0; j < u; j++) - rtb->packet_offset[i][j] = fgetI(F); - if (uu & 0x10000000) - { - CheckByte(fgetc(F), 0x93); - CheckByte(fgetc(F), 0x06); - CheckByte(fgetc(F), 0xe1); - CheckByte(fgetc(F), 0x88); - hsz = fgetI(F); - MemAlign(rtb->huffman_table[i], 0x40, hsz * sizeof(uint32)); - for (j = 0; j < hsz; j++) - rtb->huffman_table[i][j] = fgetI(F); - } - } - } -void DetachDirectDynamicLoad(RobboTripleBase *rtb) - { - int heap; - if (!rtb->direct) - return; - if (!(rtb->variant & RobboDynamicLoad)) - return; - if (rtb->w[2] == 0) - return; - rtb->direct = false; - for (heap = 0; heap < 1 + (rtb->size >> 30); heap++) - { - AlignedFree(rtb->direct_cache[heap].Index); - AlignedFree(rtb->direct_cache[heap].Data); - } - BulkCount--; - BulkBytes -= rtb->by; - BulkInd -= rtb->index; - } -void IncurDirectDynamicLoad(RobboTripleBase *rtb) - { - int heap, slice, ind, bytes, ind_sz, byte_sz, Slices; - if (rtb->direct) - return; - rtb->direct = true; - BulkCount++; - if (!rtb->disk) - OpenTripleFile(rtb); - rtb->index = rtb->by = 0; - for (heap = 0; heap < 1 + (rtb->size >> 30); heap++) - { - ind_sz = byte_sz = 0; - Slices = rtb->packet_count[heap]; - fseek(rtb->disk, rtb->packet_offset[heap][Slices - 1], SEEK_SET); - CheckByte(fgetc(rtb->disk), 0xf2); - CheckByte(fgetc(rtb->disk), 0x77); - CheckByte(fgetc(rtb->disk), 0x83); - CheckByte(fgetc(rtb->disk), 0x83); - fread(&ind, 4, 1, rtb->disk); - fread(&bytes, 4, 1, rtb->disk); - ind = (0x1220 * (Slices - 1) + ind); - if (ind & 0xf) - ind += 0x10 - (ind & 0xf); - MemAlign(rtb->direct_cache[heap].Index, 0x40, ind * sizeof(uint32)); - bytes = (0x40000 * (Slices - 1) + bytes); - if (bytes & 0x3f) - bytes += 0x40 - (ind & 0x3f); - MemAlign(rtb->direct_cache[heap].Data, 0x40, bytes); - for (slice = 0; slice < Slices; slice++) - { - fseek(rtb->disk, rtb->packet_offset[heap][slice], SEEK_SET); - CheckByte(fgetc(rtb->disk), 0xf2); - CheckByte(fgetc(rtb->disk), 0x77); - CheckByte(fgetc(rtb->disk), 0x83); - CheckByte(fgetc(rtb->disk), 0x83); - fread(&ind, 4, 1, rtb->disk); - fread(&bytes, 4, 1, rtb->disk); - fread(rtb->direct_cache[heap].Index + ind_sz, 4, ind, rtb->disk); - fread(rtb->direct_cache[heap].Data + byte_sz, 1, bytes, rtb->disk); - ind_sz += ind; - byte_sz += bytes; - BulkBytes += bytes; - BulkInd += ind; - } - rtb->index += ind_sz; - rtb->by += byte_sz; - } - fclose(rtb->disk); - rtb->disk = NULL; - } - -void LoadTriple(char *fnin, char *DIR) - { - int u, i, by, n, j, PR, ni, s; - char FN[1024], NOME[1024]; - RobboTripleBase *triple; - FILE *F; - char Temp[1024]; - strcpy(NOME, fnin); - for (i = 0; NOME[i] != '.'; i++); - strcpy(Temp, fnin + 1 + i); - if (Temp[0] == 'K' || Temp[0] == 'k') - UnWindowsTriple(Temp); - s = strlen(Temp); - sprintf(FN, "%s/%s%s", DIR, TriplePrefix, NOME); - F = fopen(FN, "rb"); - if (F == NULL) - { - if (VerboseRobboBases) - { - Send("No File %s\n", FN); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "No File %s\n", FN); - close_log(); - } -#endif - - } - return; - } - if (VerboseRobboBases) - { - Send("info string RobboTriple %d %s\n", NumTripleBases, FN); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string RobboTriple %d %s\n", NumTripleBases, FN); - close_log(); - } -#endif - - } - for (i = 1; i <= 4; i++) - Temp[s + i] = 0; - triple = TableTripleBases + NumTripleBases; - TripleUtility(triple, Temp); - strcpy(triple->DirNome, DIR); -#ifndef WINDOWS - strcat(triple->DirNome, "/"); -#else - strcat(triple->DirNome, "\\"); -#endif - ReFactorDirectoryNaming(triple->DirNome); - strcpy(triple->string, NOME + 2); - sprintf(triple->path, "%s%s", TriplePrefix, NOME); - triple->direct = false; - triple->data = NULL; - triple->ind = NULL; - triple->disk = NULL; - triple->size = triple->pawns ? 1806 : 462; - triple->weak = triple->hit = 0; - triple->scacco = false; - for (i = 0; i < 4; i++) - if (triple->p[i]) - TripleMaxUsage = MAX(TripleMaxUsage, (i + 3)); - for (i = 0; i < 4; i++) - triple->size *= triple->m[i]; - for (i = 1; i <= 3; i++) - { - u = fgetc(F); - triple->w[i] = u; - } - if (triple->w[2] == 0) - { - triple->direct = true; - triple->w[3] = 0; - fclose(F); - F = 0; - if (VerboseRobboBases) - { - Send("one result %s %d\n", FN, triple->w[1]); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "one result %s %d\n", FN, triple->w[1]); - close_log(); - } -#endif - } - - TrivialCount++; - return; - } - for (i = 1; i <= 3; i++) - triple->wi[triple->w[i]] = i; - if (VerboseRobboBases) - { - Send("w: %d/%d/%d ", triple->w[1], triple->w[2], triple->w[3]); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "w: %d/%d/%d ", triple->w[1], triple->w[2], triple->w[3]); - close_log(); - } -#endif - } - - u = fgetc(F); - triple->variant = u; - if (u & RobboScaccoKnowBit) - triple->scacco = ((u & RobboScaccoBit) != 0); - else - triple->scacco = (triple->p[2] != 0); - if (u & RobboDynamicLoad) - { - RobboDynamicLoadSetUp(triple, F); - fclose(F); - if (0 && u & RobboDirectDynamicBit) - IncurDirectDynamicLoad(triple); - return; - } - triple->direct = true; - by = 0; - for (i = 0; i < 4; i++) - by += (fgetc(F) << (i << 3)); - if (VerboseRobboBases) - { - Send("%d by ", by); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "%d by ", by); - close_log(); - } -#endif - - } - n = 0; - for (i = 0; i < 4; i++) - n += (fgetc(F) << (8 * i)); - if (VerboseRobboBases) - { - Send("%d arch ", n); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "%d by ", by); - close_log(); - } -#endif - } - - PR = 0; - for (i = 0; i < 2; i++) - PR += (fgetc(F) << (i << 3)); - if (VerboseRobboBases) - { - Send("PR %d ", PR); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "%d by ", by); - close_log(); - } -#endif - } - - for (i = 0; i < 2; i++) - fgetc(F); - ni = by / PR; - triple->prop_ind = PR; - u = ni; - i = 0; - while (u >>= 1) - i++; - triple->bs = i - 1; - triple->index = (2 << i) - 1; - triple->ind = malloc((triple->index + 1) * sizeof(int)); - for (i = 0; i < ni; i++) - { - u = 0; - for (j = 0; j < 4; j++) - u += (fgetc(F) << (j << 3)); - triple->ind[i] = u; - } - for (i = ni; i < triple->index + 1; i++) - triple->ind[i] = (n << 2); - DirectCount++; - triple->by = by; - BytesTriple += by; - IndTriple += triple->index + 1; - IndTripleEx += ni; - triple->data = malloc(PR * ni); - fread(triple->data, 1, PR * ni, F); - if (VerboseRobboBases) - { - Send("data (10): "); - for (i = 0; i < 10; i++) - Send("%x ", triple->data[i]); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "data (10): "); - for (i = 0; i < 10; i++) - fprintf(log_file, "%x ", triple->data[i]); - close_log(); - } -#endif - - } - if (VerboseRobboBases) - { - Send("\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "\n"); - close_log(); - } -#endif - } - - fclose(F); - } -void TripleStatistics() - { - if (1 + (NumTripleBases / 256) + (int)((BytesTriple + (IndTriple << 2)) >> 20) == 1) - { - Send("info string %d TripleBases Loaded\n", NumTripleBases); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string %d TripleBases Loaded\n", NumTripleBases); - close_log(); - } -#endif - - } - else - { - Send("info string %d TripleBases Loaded (%dmb)\n", - NumTripleBases, 1 + (NumTripleBases / 256) + (int)((BytesTriple + (IndTriple << 2)) >> 20)); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string %d TripleBases Loaded (%dmb)\n", - NumTripleBases, 1 + (NumTripleBases / 256) + (int)((BytesTriple + (IndTriple << 2)) >> 20)); - close_log(); - } -#endif - - } - } -void TripleEmit() - { - Send("info string %d RobboTripleBases in all\n", NumTripleBases); - Send("info string %d CompleteDirect (%dmb) plus %d BulkDynamic (%dmb)\n", DirectCount, - (int)((BytesTriple + (IndTriple << 2)) >> 20), BulkCount, (int)((BulkBytes + (BulkInd << 2)) >> 20)); - Send("info string Loadable are %d more RobboTripleBases" " " - "Plus: %d buy the trivially!\n", LoadCount - BulkCount, TrivialCount); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Now %d RobboTripleBases in all\n", NumTripleBases); - fprintf(log_file, "info string %d CompleteDirect (%dmb) plus %d BulkDynamic (%dmb)\n", DirectCount, - (int)((BytesTriple + (IndTriple << 2)) >> 20), BulkCount, (int)((BulkBytes + (BulkInd << 2)) >> 20)); - fprintf(log_file, "info string Loadable are %d more RobboTripleBases" " " - "Plus: %d buy the trivially!\n", LoadCount - BulkCount, TrivialCount); - close_log(); - } -#endif - - } - -#ifndef WINDOWS -void ReFactorDirectoryNaming(char *S) - { - char T[1024]; - int i, j = 0; - for (i = 0; S[i]; i++) - { - if (i > 0 && S[i - 1] == '/' && S[i] == '/') - continue; - T[j++] = S[i]; - } - if (T[j - 1] != '/') - T[j++] = '/'; - T[j] = 0; - strcpy(S, T); - } -#else -void ReFactorDirectoryNaming(char *S) - { - char T[1024]; - int i, j = 0; - for (i = 0; S[i]; i++) - if (S[i] == '/') - S[i] = '\\'; - for (i = 0; S[i]; i++) - { - if (i > 0 && S[i - 1] == '\\' && S[i] == '\\') - continue; - T[j++] = S[i]; - } - if (T[j - 1] != '\\') - T[j++] = '\\'; - T[j] = 0; - strcpy(S, T); - } -#endif - -void BulkLoadDirectory(char *T) - { - int i; - char S[4096]; - strcpy(S, T); - ReFactorDirectoryNaming(S); - if (VerboseRobboBases) - { - Send("info string RobboBulkLoad for registered TripleBases with directory %s\n", S); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string RobboBulkLoad for registered TripleBases with directory %s\n", S); - close_log(); - } -#endif - - } - for (i = 0; i < NumTripleBases; i++) - if (!strcmp(S, (TableTripleBases + i)->DirNome)) - IncurDirectDynamicLoad(TableTripleBases + i); - } -int RobboBulkDirectory() - { - char Temp[4096]; - char *p; - strcpy(Temp, BulkDirectory); - ReFactorDirectoryNaming(Temp); - for (p = strtok(Temp, "|"); p != NULL; p = strtok(NULL, "|")) - BulkLoadDirectory(p); - if (VerboseRobboBases) - TripleEmit(); - return true; - } -int BulkLoadOne(char *S) - { - RobboTripleBase *triple; - triple = LookupTriple(S); - if (triple == NULL) - { - if (VerboseRobboBases) - { - Send("info string Unfound string in BulkLoad %s\n", S); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Unfound string in BulkLoad %s\n", S); - close_log(); - } -#endif - - } - return false; - } - if (triple->efgh1 != -1 && strcspn(S, "EFGHefghIJijUVWX") == strlen(S)) - { - int i; - for (i = 0; i < 4; i++) - IncurDirectDynamicLoad(TableTripleBases + (triple->efgh[i])); - } - else - IncurDirectDynamicLoad(triple); - return true; - } -int RobboBulkLoad() - { - char Temp[4096]; - char *p; - strcpy(Temp, BulkName); - for (p = strtok(Temp, "|"); p != NULL; p = strtok(NULL, "|")) - BulkLoadOne(p); - if (VerboseRobboBases) - TripleEmit(); - return true; - } -int BulkDetachOne(char *S) - { - RobboTripleBase *triple; - triple = LookupTriple(S); - if (triple == NULL) - { - if (VerboseRobboBases) - { - Send("info string Unfound string in BulkDetach %s\n", S); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Unfound string in BulkDetach %s\n", S); - close_log(); - } -#endif - - } - return false; - } - if (triple->efgh1 != -1 && strcspn(S, "EFGHefghIJijUVWX") == strlen(S)) - { - int i; - for (i = 0; i < 4; i++) - DetachDirectDynamicLoad(TableTripleBases + (triple->efgh[i])); - } - else - DetachDirectDynamicLoad(triple); - return true; - } -int RobboBulkDetach() - { - char Temp[4096]; - char *p; - strcpy(Temp, BulkName); - for (p = strtok(Temp, "|"); p != NULL; p = strtok(NULL, "|")) - BulkDetachOne(p); - if (VerboseRobboBases) - TripleEmit(); - return true; - } -void BulkDetachDirectory(char *T) - { - int i; - char S[4096]; - strcpy(S, T); - ReFactorDirectoryNaming(S); - if (VerboseRobboBases) - { - Send("info string RobboBulkLoad for registered TripleBases with directory %s\n", S); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string RobboBulkLoad for registered TripleBases with directory %s\n", S); - close_log(); - } -#endif - - } - - for (i = 0; i < NumTripleBases; i++) - if (!strcmp(S, (TableTripleBases + i)->DirNome)) - DetachDirectDynamicLoad(TableTripleBases + i); - } -int RobboBulkDirectoryDetach() - { - char Temp[4096]; - char *p; - strcpy(Temp, BulkDirectory); - ReFactorDirectoryNaming(Temp); - for (p = strtok(Temp, "|"); p != NULL; p = strtok(NULL, "|")) - BulkDetachDirectory(p); - if (VerboseRobboBases) - TripleEmit(); - return true; - } -static void AddNomeTriple(char *NOME, char *DIR) - { - int n = strlen(TriplePrefix); - if (strstr(NOME, "TRIPLE_") || strstr(NOME, "triple_")) - return; - if (strstr(NOME, "bz2") || strstr(NOME, "00") || strstr(NOME, "tar")) - return; - if (memcmp(NOME, TriplePrefix, n) && memcmp(NOME, WindowsTriplePrefix, n)) - return; - LoadTriple(NOME + n, DIR); - } - -static void BlockTripleIndexRegister(char *DIR, FILE *F) - { - char NOME[16], Temp[16], Temp2[16]; - uint8 A[4]; - unsigned char B[16]; - RobboTripleBase *triple; - int i, heaps, h, j; - bool IS_OK; - char NomeFile[1024], Path[128]; - NOME[4] = 0; - while (fread(B, 1, 4, F)) - { - if (B[0] != 0x09 || B[1] != 0x36 || B[2] != 0xf4 || B[3] != 0x2b) - { - if (VerboseRobboBases) - { - Send("BlockIndex mask failure!\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "BlockIndex mask failure!\n"); - close_log(); - } -#endif - } - return; - } - fread(NOME, 1, 4, F); - if (NOME[2] == 0) - { - strcpy(Temp, NOME); - sprintf(NomeFile, "%s/TRIPLE0.%s", DIR, Temp); - if (Stat(NomeFile) == -1) - { - if (Temp[0] == 'K' || Temp[0] == 'k') - UnWindows(Temp); - else - HackWindowsTriple(Temp); - sprintf(NomeFile, "%s/TRIPLE0.%s", DIR, Temp); - if (Stat(NomeFile) == -1) - continue; - } - strcpy(Temp2, "0."); - strcat(Temp2, Temp); - LoadTriple(Temp2, DIR); - continue; - } - fread(A, 1, 4, F); - if (A[1] == 0) - { - triple = TableTripleBases + NumTripleBases; - TripleUtility(triple, NOME); - triple->direct = true; - triple->w[1] = A[0]; - triple->w[2] = triple->w[3] = 0; - TrivialCount++; - continue; - } - strcpy(Temp, NOME); - -#ifdef NomeWindows - HackWindowsTriple(Temp); -#endif - - sprintf(Path, "TRIPLE%c.%s", NOME[3] ? '2' : '3', Temp); - sprintf(NomeFile, "%s/%s", DIR, Path); - if (Stat(NomeFile) == -1) - { - if (Temp[0] == 'K' || Temp[0] == 'k') - UnWindows(Temp); - else - HackWindowsTriple(Temp); - sprintf(Path, "TRIPLE%c.%s", NOME[3] ? '2' : '3', Temp); - sprintf(NomeFile, "%s/%s", DIR, Path); - if (Stat(NomeFile) == -1) - IS_OK = false; - else - IS_OK = true; - } - else - IS_OK = true; - triple = TableTripleBases + NumTripleBases; - if (IS_OK) - { - TripleUtility(triple, NOME); - strcpy(triple->DirNome, DIR); - -#ifndef WINDOWS - strcat(triple->DirNome, "/"); -#else - strcat(triple->DirNome, "\\"); -#endif - - ReFactorDirectoryNaming(triple->DirNome); - strcpy(triple->string, NOME); - strcpy(triple->path, Path); - } - triple->direct = false; - triple->data = NULL; - triple->ind = NULL; - triple->disk = NULL; - triple->size = triple->pawns ? 1806 : 462; - triple->weak = triple->hit = 0; - triple->scacco = false; - for (i = 1; i <= 3; i++) - triple->w[i] = A[i - 1]; - for (i = 1; i <= 3; i++) - triple->wi[triple->w[i]] = i; - triple->variant = A[3]; - for (i = 0; i < 4; i++) - if (triple->p[i] && IS_OK) - TripleMaxUsage = MAX(TripleMaxUsage, (i + 3)); - for (i = 0; i < 4; i++) - triple->size *= triple->m[i]; - fread(A, 1, 4, F); - heaps = A[3]; - for (h = 0; h < heaps; h++) - { - int u = fgetI(F); - int t = u; - int b = 0; - while (t >>= 1) - b++; - triple->packet_count[h] = u; - triple->bs_split[h] = b - 1; - triple->ind_split[h] = malloc((2 << b) * sizeof(uint32)); - triple->packet_offset[h] = malloc(u * sizeof(uint32)); - for (j = 0; j < u; j++) - triple->ind_split[h][j] = fgetI(F); - for (j = u; j < (2 << b); j++) - triple->ind_split[h][j] = (0x3fffffffULL << 2) | 0; - for (j = 0; j < u; j++) - triple->packet_offset[h][j] = fgetI(F); - } - if (!IS_OK) - { - for (h = 0; h < heaps; h++) - free(triple->ind_split[h]); - for (h = 0; h < heaps; h++) - free(triple->packet_offset[h]); - } - else - LoadCount++; - } - if (VerboseRobboBases) - TripleEmit(); - } -static bool HasTripleBlockIndex(char *DIR) - { - FILE *F; - char Name[256]; - sprintf(Name, "%s/BlockTriple.Index", DIR); - F = fopen(Name, "rb"); - if (!F) - return false; - if (VerboseRobboBases) - { - Send("Using BlockTriple.Index for %s\n", DIR); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Using BlockTriple.Index for %s\n", DIR); - close_log(); - } -#endif - } - - BlockTripleIndexRegister(DIR, F); - fclose(F); - return true; - } - -#ifdef WINDOWS -void GetTripleBase(char *A) - { - char B[1024]; - WIN32_FIND_DATA ffd; - HANDLE hFind = INVALID_HANDLE_VALUE; - if (HasTripleBlockIndex(A)) - return; - if (VerboseRobboBases) - { - Send("info string Reading directory %s\n", A); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Reading directory %s\n", A); - close_log(); - } -#endif - - } - strcpy(B, A); - strcat(B, "\\*"); - hFind = FindFirstFile(B, &ffd); - if (hFind == INVALID_HANDLE_VALUE) - { - if (VerboseRobboBases) - { - Send("info string Directory %s not found\n", A); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Directory %s not found\n", A); - close_log(); - } -#endif - - } - return; - } - do - { - if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) - AddNomeTriple(ffd.cFileName, A); - } while (FindNextFile(hFind, &ffd)); - FindClose(hFind); - if (VerboseRobboBases) - TripleEmit(); - } -#else -#include -#include -#include -#include -void GetTripleBase(char *A) - { - DIR *DIR; - struct dirent DE[1], *ptr; - if (HasTripleBlockIndex(A)) - return; - if (VerboseRobboBases) - { - Send("info string Reading directory %s\n", A); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Directory %s not found\n", A); - close_log(); - } -#endif - - } - DIR = opendir(A); - if (!DIR) - { - if (VerboseRobboBases) - { - Send("info string Directory %s not found\n", A); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info string Directory %s not found\n", A); - close_log(); - } -#endif - - } - return; - } - while (1) - { - readdir_r(DIR, DE, &ptr); - if (!ptr) - break; - AddNomeTriple(DE->d_name, A); - } - closedir(DIR); - if (VerboseRobboBases) - TripleEmit(); - } -#endif -#endif \ No newline at end of file diff --git a/Firenzina/robbo_triple_value.c b/Firenzina/robbo_triple_value.c deleted file mode 100644 index e092cd6..0000000 --- a/Firenzina/robbo_triple_value.c +++ /dev/null @@ -1,625 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef RobboBases -#include "robbo_triplebase.h" -#include "robbo_totalbase.h" - -#define wEnumB wEnumBL -#define bEnumB bEnumBL -#define NewBitString(bs, Data) { bs->byte = bs->bit = 0; bs->data = Data; } - -static unsigned char nMune[64]; -static unsigned char alfMune[64]; -static unsigned char nepedMune[64]; -static unsigned char bipedMune[64]; -static unsigned char BLockedMune[64]; -static const uint8 NX[4][2] = - { - { 0, 0 }, - { 2, 3 }, - { 1, 3 }, - { 1, 2 } - }; -extern MutexType TripleBaseUsage[1]; - -#define reQU(x) \ - { if (P[x] == wEnumP) Q[x] = bipedMune[Q[x]]; \ - else if (P[x] == bEnumP) Q[x] = nepedMune[Q[x]]; \ - else if (P[x] == BlockedPawn) Q[x] = BLockedMune[Q[x]]; \ - else if (P[x] == wEnumB || P[x] == bEnumB) Q[x] = alfMune[Q[x]]; \ - else Q[x] = nMune[Q[x]]; } - -#define vaWIN 1 -#define vaDRAW 0 -#define vaLOSS -1 -#define InCheck \ - (Position->wtm ? \ - (wBitboardK & Position->Dyn->bAtt) : (bBitboardK & Position->Dyn->wAtt)) -#define IsIllegal \ - (!Position->wtm ? \ - (wBitboardK & Position->Dyn->bAtt) : (bBitboardK & Position->Dyn->wAtt)) -#define SaveTripleHash() \ - TripleHash[Position->Dyn->Hash & TripleHashMask] = \ - (Position->Dyn->Hash & 0xfffffffffffffff0) | ((*Value) + 1); - -typedef struct - { - int byte, bit; - uint8 *data; - } BitString; - -static char EnumN[65] = - { - A1, A2, B1, B2, A3, A4, B3, B4, C1, C2, D1, D2, C3, C4, D3, D4, A8, A7, B8, B7, A6, A5, B6, B5, C8, C7, D8, D7, C6, - C5, D6, D5, H1, H2, G1, G2, H3, H4, G3, G4, F1, F2, E1, E2, F3, F4, E3, E4, H8, H7, G8, G7, H6, H5, G6, G5, F8, - F7, E8, E7, F6, F5, E6, E5, -1 - }; -static char EnumBiPed[49] = - { - A2, B2, C2, D2, E2, F2, G2, H2, A3, B3, C3, D3, E3, F3, G3, H3, A4, B4, C4, D4, E4, F4, G4, H4, A5, B5, C5, D5, E5, - F5, G5, H5, A6, B6, C6, D6, E6, F6, G6, H6, A7, B7, C7, D7, E7, F7, G7, H7, -1 - }; -static char EnumNePed[49] = - { - A7, B7, C7, D7, E7, F7, G7, H7, A6, B6, C6, D6, E6, F6, G6, H6, A5, B5, C5, D5, E5, F5, G5, H5, A4, B4, C4, D4, E4, - F4, G4, H4, A3, B3, C3, D3, E3, F3, G3, H3, A2, B2, C2, D2, E2, F2, G2, H2, -1 - }; -static char EnumAlf[65] = - { - A1, A3, B2, C1, A5, B4, C3, D2, E1, A7, B6, C5, D4, E3, F2, G1, B8, C7, D6, E5, F4, G3, H2, D8, E7, F6, G5, H4, F8, - G7, H6, H8, H1, H3, G2, F1, H5, G4, F3, E2, D1, H7, G6, F5, E4, D3, C2, B1, G8, F7, E6, D5, C4, B3, A2, E8, D7, - C6, B5, A4, C8, B7, A6, A8, -1 - }; -static char EnumBlocked[41] = - { - A2, B2, C2, D2, E2, F2, G2, H2, A3, B3, C3, D3, E3, F3, G3, H3, A4, B4, C4, D4, E4, F4, G4, H4, A5, B5, C5, D5, E5, - F5, G5, H5, A6, B6, C6, D6, E6, F6, G6, H6, -1 - }; -int TripleBaseTable[16][16][16][16]; - -static uint8 NextByteDecoded(BitString *BS, uint32 *Huffman) - { - uint32 t, va = BS->data[BS->byte] >> BS->bit; - if (BS->byte + 1 < 0x40) - va |= (((uint32)(BS->data[BS->byte + 1])) << 8) >> BS->bit; - t = Huffman[va & 0xff]; - if (t >= (1 << 24)) - { - BS->bit += (t >> 24); - BS->byte += (BS->bit >> 3); - BS->bit &= 0x7; - return (t & 0xff); - } - if (BS->byte + 2 < 0x40) - va |= (((uint32)(BS->data[BS->byte + 2])) << 16) >> BS->bit; - t = Huffman[0x100 * (t + 1) + ((va >> 8) & 0xff)]; - BS->bit += (t >> 24); - BS->byte += (BS->bit >> 3); - BS->bit &= 0x7; - return (t & 0xff); - } -static int GetDataHuffman(uint8 *Data, int ba, uint8 *AB, uint8 *A, int PR, int sb, uint32 *Huffman) - { - int n, b, i = 0, r = A[sb]; - uint8 ch, rank; - BitString BS[1]; - NewBitString(BS, Data); - while (ba >= 0 && BS->byte < PR) - { - ch = NextByteDecoded(BS, Huffman); - rank = (ch & 64) >> 6; - n = ch & 31; - b = 0; - if (ch & 32) - { - if (!ba) - return AB[NX[r][rank]]; - else - ba--; - } - else - r = NX[r][rank]; - while (ch & 128) - { - b++; - ch = NextByteDecoded(BS, Huffman); - n += ((ch & 127) << (7 * b - 2)); - } - ba -= n; - } - return AB[r]; - } -static int GetData(uint8 *E, int ba, uint8 *AB, uint8 *A, int PR, int sb, uint32 *HuffmanTable) - { - int n, b, i = 0, r = A[sb]; - uint8 ch, rank; - if (HuffmanTable) - return GetDataHuffman(E, ba, AB, A, PR, sb, HuffmanTable); - while (ba >= 0 && i < PR) - { - ch = E[i++]; - rank = (ch & 64) >> 6; - n = ch & 31; - b = 0; - if (ch & 32) - { - if (!ba) - return AB[NX[r][rank]]; - else - ba--; - } - else - r = NX[r][rank]; - while (ch & 128) - { - b++; - ch = E[i++]; - n += ((ch & 127) << (7 * b - 2)); - } - ba -= n; - } - return AB[r]; - } -static bool Dynamic256kbBlockLookup(RobboTripleBase *rtb, int heap, uint64 ind, int w, int *res, - bool ProbingWeak, bool ProbingImpale) - { - int f; - uint32 *I; - uint8 *D; - uint32 z, cmp; - TripleBaseCache *Cache; - if (!DemandDynamicTripleCache(rtb, heap, w, &Cache, &D, &I, ProbingWeak, ProbingImpale)) - return false; - z = 8; - cmp = I[z] >> 2; - z += ((ind > cmp) - (ind < cmp)) << 2; - cmp = I[z] >> 2; - z += ((ind > cmp) - (ind < cmp)) << 1; - cmp = I[z] >> 2; - z += ((ind > cmp) - (ind < cmp)) << 0; - cmp = I[z] >> 2; - z -= (ind < cmp); - I += I[z + 16]; - f = (z << 14); - z = 8; - cmp = I[z] >> 2; - z += ((ind > cmp) - (ind < cmp)) << 2; - cmp = I[z] >> 2; - z += ((ind > cmp) - (ind < cmp)) << 1; - cmp = I[z] >> 2; - z += ((ind > cmp) - (ind < cmp)) << 0; - cmp = I[z] >> 2; - z -= (ind < cmp); - I += I[z + 16]; - f += (z << 10); - z = 8; - cmp = I[z] >> 2; - z += ((ind > cmp) - (ind < cmp)) << 2; - cmp = I[z] >> 2; - z += ((ind > cmp) - (ind < cmp)) << 1; - cmp = I[z] >> 2; - z += ((ind > cmp) - (ind < cmp)) << 0; - cmp = I[z] >> 2; - z -= (ind < cmp); - if (ind == 0x3fffffff) - while ((I[z] >> 2) == 0x3fffffff) - z--; - f += (z << 6); - *res = GetData(D + f, ind - (I[z] >> 2), rtb->w, rtb->wi, 64, I[z] & 3, rtb->huffman_table[heap]); - rtb->hit++; - if (!rtb->direct) - { - Lock(TripleBaseUsage); - Cache->user--; - UnLock(TripleBaseUsage); - } - return true; - } -static bool RobboDynamicValue(RobboTripleBase *rtb, uint64 ind, int *res, bool ProbingWeak, - bool ProbingImpale) - { - int heap, l, w; - uint32 *I; - heap = ind >> 30; - ind &= 0x3fffffff; - l = rtb->bs_split[heap]; - I = rtb->ind_split[heap]; - if (l == -1) - w = 0; - else - { - w = (2 << l) - 1; - while (l >= 0) - { - uint32 u = (I[w] >> 2); - w += ((ind > u) - (ind < u)) << l; - l--; - } - while (ind >= (I[w] >> 2)) - w++; - w--; - } - return Dynamic256kbBlockLookup(rtb, heap, ind, w, res, ProbingWeak, ProbingImpale); - } -static bool RobboTripleValue(RobboTripleBase *rtb, uint64 ind, int *res, bool ProbingWeak, - bool ProbingImpale) - { - int w = 0, l, u; - if (rtb->w[2] == 0) - { - *res = (rtb->w[1]); - return true; - } - if (rtb->variant & RobboDynamicLoad) - return RobboDynamicValue(rtb, ind, res, ProbingWeak, ProbingImpale); - l = rtb->bs; - if (l == -1) - w = 0; - else - { - w = (2 << l) - 1; - while (l >= 0) - { - u = rtb->ind[w] >> 2; - w += ((ind > u) - (ind < u)) << l; - l--; - } - while (ind >= (rtb->ind[w] >> 2)) - w++; - w--; - } - *res = GetData((rtb->data)+(rtb->prop_ind * w), ind - (rtb->ind[w] >> 2), rtb->w, rtb->wi, rtb->prop_ind, - rtb->ind[w] & 3, NULL); - rtb->hit++; - return true; - } - -static bool TripleIndex(type_PiSq *PISQ, int *tb_num, uint64 *ind) - { - int v, i, x, K1, K2, P[4], Q[4]; - int rf; - RobboTripleBase *rtb; - if (PISQ->wtm) - { - K1 = PISQ->wK; - K2 = PISQ->bK; - } - else - { - K1 = PISQ->bK; - K2 = PISQ->wK; - for (i = 0; i < 4; i++) - PISQ->pi[i] = ColScamb[PISQ->pi[i]]; - } - v = TripleBaseTable[PISQ->pi[0]][PISQ->pi[1]][PISQ->pi[2]][PISQ->pi[3]]; - if ((v % 65536) == -1) - return false; - *tb_num = v % 65536; - rtb = TableTripleBases + (v % 65536); - if (rtb->w[2] == 0) - return true; - for (i = 0; i < 4; i++) - { - x = (v >> (16 + (i << 1))) & 3; - Q[i] = PISQ->sq[x]; - P[i] = PISQ->pi[x]; - } - if (PISQ->Pawn) - { - int w = ((File(K2) >= FE) << 1) + (!PISQ->wtm); - for (i = 0; i < 4; i++) - { - SpearPiece(w, Q[i]); - if (P[i] == BlockedPawn && !PISQ->wtm) - Q[i] -= 8; - } - SpearPiece(w, K1); - SpearPiece(w, K2); - rf = KingPawn[(K1 << 6) + K2]; - } - else - { - uint8 w = oSpear[K1][K2]; - for (i = 0; i < 4; i++) - SpearNorm(w, Q[i]); - SpearNorm(w, K1); - SpearNorm(w, K2); - rf = KingNormal[(K1 << 6) + K2]; - } - if (rf == -1) - return false; - for (i = 0; i < 4; i++) - reQU(i); - for (i = 0; i < 4; i++) - if (!P[i]) - Q[i] = 0; - if (rtb->efgh2 != -1) - { - int f1 = File(Q[rtb->efgh1]); - int f2 = File(Q[rtb->efgh2]); - f1 = MIN(f1, (FH - f1)) & 1; - f2 = MIN(f2, (FH - f2)) & 1; - *tb_num = rtb->efgh[f1 + (f2 << 1)]; - } - else if (rtb->efgh1 != -1) - { - int f = File(Q[rtb->efgh1]); - *tb_num = rtb->efgh[MIN(f, (FH - f))]; - } - if (*tb_num == -1 || *tb_num == 0xffff) - return false; - for (i = 0; i < 4; i++) - Q[i] >>= rtb->efgh_shift[i]; - - if (P[0] == P[3] && P[3]) - { - int m0, m1, m2, m3, t0, t1, u0, u1; - t0 = MAX(Q[0], Q[1]); - u0 = MIN(Q[0], Q[1]); - t1 = MAX(Q[2], Q[3]); - u1 = MIN(Q[2], Q[3]); - m0 = MAX(t0, t1); - m1 = MIN(t0, t1); - m2 = MAX(u0, u1); - m3 = MIN(u0, u1); - if (m1 < m2) - Exchange(m1, m2); - Q[0] = (m0 * (m0 - 1) * (m0 - 2) * (m0 - 3)) / 24 + (m1 * (m1 - 1) * (m1 - 2)) / 6 + ((m2 * (m2 - 1)) >> 1) + m3; - Q[1] = Q[2] = Q[3] = 0; - } - else if (P[0] == P[2] && P[2]) - { - Q[0] = SameO3[Q[0]][Q[1]][Q[2]]; - Q[1] = Q[2] = 0; - } - else if (P[1] == P[3] && P[3]) - { - Q[1] = SameO3[Q[1]][Q[2]][Q[3]]; - Q[2] = Q[3] = 0; - } - else - { - if (P[0] == P[1] && P[1]) - { - Q[0] = SameO2[Q[0]][Q[1]]; - Q[1] = 0; - } - if (P[1] == P[2] && P[2]) - { - Q[1] = SameO2[Q[1]][Q[2]]; - Q[2] = 0; - } - if (P[2] == P[3] && P[3]) - { - Q[2] = SameO2[Q[2]][Q[3]]; - Q[3] = 0; - } - } - *ind = ((((rf * rtb->m[0]) + Q[0]) * rtb->m[1] + Q[1]) * rtb->m[2] + Q[2]) * rtb->m[3] + Q[3]; - return true; - } -static RobboTripleBase *ThisTripleBase(typePos *Position) - { - type_PiSq PiSq[1]; - bool b; - int i, v; - uint64 U, V, W; - PiSq->pi[0] = PiSq->pi[1] = PiSq->pi[2] = PiSq->pi[3] = 0; - PiSq->sq[0] = PiSq->sq[1] = PiSq->sq[2] = PiSq->sq[3] = 0; - U = wBitboardP &(bBitboardP >> 8); - V = (U << 1) & U & ~FileA; - W = (V << 1) & V; - PiSq->Blocked = (U & ~V) | (W & ~((W << 1) & W)); - b = BitboardPQ(Position, PiSq); - if (Position->wtm) - for (i = 0; i < 4; i++) - PiSq->pi[i] = ColScamb[PiSq->pi[i]]; - v = TripleBaseTable[PiSq->pi[0]][PiSq->pi[1]][PiSq->pi[2]][PiSq->pi[3]]; - if ((v % 65536) != -1) - return TableTripleBases + (v % 65536); - while (PiSq->Blocked && PiSq->n < 4) - { - BitClear(0, PiSq->Blocked); - b = BitboardPQ(Position, PiSq); - if (Position->wtm) - for (i = 0; i < 4; i++) - PiSq->pi[i] = ColScamb[PiSq->pi[i]]; - v = TripleBaseTable[PiSq->pi[0]][PiSq->pi[1]][PiSq->pi[2]][PiSq->pi[3]]; - if ((v % 65536) != -1) - return TableTripleBases + (v % 65536); - } - return NULL; - } -static bool TripleWork(typePos *Position, int *r, bool ProbingWeak, bool ProbingImpale) - { - int tb; - uint64 ind, U, V, W; - type_PiSq PiSq[1]; - bool b; - PiSq->pi[0] = PiSq->pi[1] = PiSq->pi[2] = PiSq->pi[3] = 0; - PiSq->sq[0] = PiSq->sq[1] = PiSq->sq[2] = PiSq->sq[3] = 0; - U = wBitboardP &(bBitboardP >> 8); - V = (U << 1) & U & ~FileA; - W = (V << 1) & V; - PiSq->Blocked = (U & ~V) | (W & ~((W << 1) & W)); - b = BitboardPQ(Position, PiSq); - if (b) - b = TripleIndex(PiSq, &tb, &ind); - if (b) - { - RobboTripleBase *rtb = (TableTripleBases + tb); - if (rtb->w[2] == 0) - *r = 2 - rtb->w[1]; - else - { - if (!RobboTripleValue(rtb, ind, r, ProbingWeak, ProbingImpale)) - return false; - *r = 2 - (*r); - } - Position->tbhits++; - return true; - } - while (PiSq->Blocked && PiSq->n < 4) - { - BitClear(0, PiSq->Blocked); - b = BitboardPQ(Position, PiSq); - if (b) - b = TripleIndex(PiSq, &tb, &ind); - if (b) - { - RobboTripleBase *rtb = (TableTripleBases + tb); - if (rtb->w[2] == 0) - *r = 2 - rtb->w[1]; - else - { - if (!RobboTripleValue(rtb, ind, r, ProbingWeak, ProbingImpale)) - return false; - *r = 2 - (*r); - } - Position->tbhits++; - return true; - } - } - return false; - } - -bool TripleValue(typePos *Position, int *Value, bool ProbingWeak, bool ProbingImpale) - { - int r = vaLOSS, b = vaLOSS, i, move; - typeMoveList List[256], *list; - uint64 H; - if (Position->Dyn->oo) - return false; - if (IsIllegal) - return false; - H = TripleHash[Position->Dyn->Hash & TripleHashMask]; - if (((H ^ Position->Dyn->Hash) & 0xfffffffffffffff0) == 0) - { - *Value = (H & 0xf) - 1; - Position->tbhits++; - return true; - } - if (InCheck) - { - RobboTripleBase *rtb = ThisTripleBase(Position); - if (!rtb || !rtb->scacco) - goto NoScacco; - list = EvasionMoves(Position, List, 0xffffffffffffffff); - if (list == List) - { - *Value = vaLOSS; - SaveTripleHash(); - return true; - } - for (i = 0; i < list - List; i++) - { - move = List[i].move & 0x7fff; - Make(Position, move); - Mobility(Position); - if (IsIllegal) - { - Undo(Position, move); - continue; - } - if (!TripleValue(Position, &r, ProbingWeak, ProbingImpale)) - { - Undo(Position, move); - return false; - } - r = -r; - Undo(Position, move); - if (r == vaWIN) - { - *Value = vaWIN; - SaveTripleHash(); - return true; - } - if (r == vaDRAW) - b = vaDRAW; - } - *Value = b; - SaveTripleHash(); - return true; - } - NoScacco: - list = CaptureMoves(Position, List, 0xffffffffffffffff); - for (i = 0; i < list - List; i++) - { - move = List[i].move & 0x7fff; - if ((move >> 12) == 0x4) - continue; - Make(Position, move); - Mobility(Position); - if (!IsIllegal) - { - if (!TripleValue(Position, &r, ProbingWeak, ProbingImpale)) - { - Undo(Position, move); - return false; - } - r = -r; - } - Undo(Position, move); - if (r == vaWIN) - { - *Value = r; - SaveTripleHash(); - return true; - } - if (r == vaDRAW) - b = vaDRAW; - } - if (!TripleWork(Position, &r, ProbingWeak, ProbingImpale)) - return false; - if (b > r) - *Value = b; - else - *Value = r; - SaveTripleHash(); - return true; - } -void ReadyTripleBase() - { - int i; - for (i = A1; i <= H8; i++) - nMune[EnumN[i]] = i; - for (i = A1; i <= H8; i++) - alfMune[EnumAlf[i]] = i; - for (i = 0; i < 48; i++) - bipedMune[EnumBiPed[i]] = i; - for (i = 0; i < 48; i++) - nepedMune[EnumNePed[i]] = i; - for (i = 0; i < 40; i++) - BLockedMune[EnumBlocked[i]] = i; - InitTripleBase(); - } -#endif \ No newline at end of file diff --git a/Firenzina/robbo_triplebase.h b/Firenzina/robbo_triplebase.h deleted file mode 100644 index d73e287..0000000 --- a/Firenzina/robbo_triplebase.h +++ /dev/null @@ -1,90 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define Clock ((double) (GetClock() - StartClock) / 1000000.0) -typedef struct - { - uint8 *Data; - uint32 *Index; - uint8 user; - } TripleBaseCache; -typedef struct - { - int len, bits; - } TypeSymbols; -typedef struct - { - uint8 *data; - uint32 *ind; - uint32 *ind_split[8]; - uint32 packet_count[8]; - uint32 *packet_offset[8]; - uint32 *huffman_table[8]; - int bs_split[8]; - TripleBaseCache direct_cache[8]; - uint8 variant, scacco; - int prop_ind; - uint8 w[4], wi[4]; - sint8 p[4]; - int num, index, by, bs; - uint64 size, weak, hit; - uint64 m[4]; - char nome[8]; - FILE *disk; - char DirNome[256]; - char string[16], path[32]; - bool pawns, direct; - sint8 efgh1, efgh2; - uint16 efgh[4]; - uint8 efgh_shift[4], efgh_file[4]; - } RobboTripleBase; -RobboTripleBase *TableTripleBases; -int NumTripleBases; -uint64 BulkBytes; -uint64 BulkInd; -uint32 BulkCount, LoadCount, DirectCount; -int TrivialCount; -#define RobboScaccoKnowBit 8 -#define RobboScaccoBit 4 -#define RobboDynamicLoad 2 -#define RobboDirectDynamicBit 1 -#define vNon 0 -#define eWinTriple 1 -#define eDrawTriple 2 -#define eLossTriple 3 -void TripleUtility(RobboTripleBase *, char *); -RobboTripleBase *LookupTriple(char *); -void UnWindowsTriple(char *); -void InitTripleBase(); -void ReadyTripleBase(); -void VerifyTripleBase(int *); -bool DemandDynamicTripleCache(RobboTripleBase *, int, int, TripleBaseCache **, uint8 **, uint32 **, bool, - bool); -#define TriplePrefix "TRIPLE" \ No newline at end of file diff --git a/Firenzina/robbo_utility.c b/Firenzina/robbo_utility.c deleted file mode 100644 index dae0158..0000000 --- a/Firenzina/robbo_utility.c +++ /dev/null @@ -1,423 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -#ifdef RobboBases -#include "robbo_totalbase.h" - -static char RiMap[16] = - { - 0, wEnumP, wEnumN, wEnumK, wEnumB, wEnumB, wEnumR, wEnumQ, 8, bEnumP, bEnumN, bEnumK, bEnumB, bEnumB, bEnumR, bEnumQ - }; - -bool BitboardPQ(typePos *Position, type_PiSq *PiSq) - { - uint64 T; - int n = 0, sq; - T = Position->OccupiedBW ^ (wBitboardK | bBitboardK); - PiSq->wtm = Position->wtm; - PiSq->wK = Position->wKsq; - PiSq->bK = Position->bKsq; - PiSq->Pawn = false; - while (T && n < 4) - { - sq = BSF(T); - if (PiSq->Blocked & SqSet[sq]) - { - PiSq->pi[n] = BlockedPawn; - T ^= SqSet[sq + 8]; - } - else - PiSq->pi[n] = RiMap[Position->sq[sq]]; - if (PiSq->pi[n] == wEnumP || PiSq->pi[n] == bEnumP || PiSq->pi[n] == BlockedPawn) - PiSq->Pawn = true; - PiSq->sq[n++] = sq; - BitClear(sq, T); - } - PiSq->n = n; - if (n == 4 && T) - return false; - return true; - } - -bool TotIndOtt(type_PiSq *PiSq, int *tb_num, uint64 *ind, uint64 *Double, int *KingSlice) - { - int K1, K2, rf; - int i = 0, v, PI[4], Squ[4], x; - RobboTotalBase *TotalBase; - bool simm = false; - if (Double != NULL) - *Double = -1; - if (PiSq->wtm) - { - K1 = PiSq->wK; - K2 = PiSq->bK; - } - else - { - K1 = PiSq->bK; - K2 = PiSq->wK; - for (i = 0; i < 4; i++) - PiSq->pi[i] = ColScamb[PiSq->pi[i]]; - } - v = TotalBaseTable[PiSq->pi[0]][PiSq->pi[1]][PiSq->pi[2]][PiSq->pi[3]]; - TotalBase = TableTotalBases + (v % 65536); - if ((v % 65536) == -1) - return false; - for (i = 0; i < 4; i++) - { - x = (v >> (16 + (i << 1))) & 3; - Squ[i] = PiSq->sq[x]; - PI[i] = PiSq->pi[x]; - } - if (PiSq->Pawn) - { - int w = ((File(K2) >= FE) << 1) + (!PiSq->wtm); - for (i = 0; i < 4; i++) - { - SpearPiece(w, Squ[i]); - if (PI[i] == BlockedPawn && !PiSq->wtm) - Squ[i] -= 8; - } - SpearPiece(w, K1); - SpearPiece(w, K2); - rf = KingPawn[(K1 << 6) + K2]; - } - else - { - uint8 w = oSpear[K1][K2]; - for (i = 0; i < 4; i++) - SpearNorm(w, Squ[i]); - SpearNorm(w, K1); - SpearNorm(w, K2); - if (Rank(K1) == File(K1) && Rank(K2) == File(K2)) - simm = true; - rf = KingNormal[(K1 << 6) + K2]; - } - if (rf == -1) - return false; - *KingSlice = rf; - for (i = 0; i < 4; i++) - { - if (!PI[i]) - Squ[i] = 0; - if (PI[i] == wEnumP || PI[i] == bEnumP || PI[i] == BlockedPawn) - Squ[i] -= 8; - } - *tb_num = v % 65536; - if (TotalBase->efgh2 != -1) - { - int f1 = File(Squ[TotalBase->efgh1]); - int f2 = File(Squ[TotalBase->efgh2]); - f1 = MIN(f1, (FH - f1)) & 1; - f2 = MIN(f2, (FH - f2)) & 1; - *tb_num = TotalBase->efgh[f1 + (f2 << 1)]; - } - else if (TotalBase->efgh1 != -1) - { - int f = File(Squ[TotalBase->efgh1]); - *tb_num = TotalBase->efgh[MIN(f, (FH - f))]; - } - if (*tb_num == -1 || *tb_num == 0xffff) - return false; - for (i = 0; i < 4; i++) - Squ[i] >>= TotalBase->efgh_shift[i]; - if (PI[0] == PI[3] && PI[3]) - { - int m0, m1, m2, m3, t0, t1, u0, u1; - t0 = MAX(Squ[0], Squ[1]); - u0 = MIN(Squ[0], Squ[1]); - t1 = MAX(Squ[2], Squ[3]); - u1 = MIN(Squ[2], Squ[3]); - m0 = MAX(t0, t1); - m1 = MIN(t0, t1); - m2 = MAX(u0, u1); - m3 = MIN(u0, u1); - if (m1 < m2) - Exchange(m1, m2); - Squ[0] = (m0 * (m0 - 1) * (m0 - 2) * (m0 - 3)) / 24 + (m1 * (m1 - 1) * (m1 - 2)) / 6 + ((m2 * (m2 - 1)) >> 1) + m3; - Squ[1] = Squ[2] = Squ[3] = 0; - } - else if (PI[0] == PI[2] && PI[2]) - { - Squ[0] = SameO3[Squ[0]][Squ[1]][Squ[2]]; - Squ[1] = Squ[2] = 0; - } - else if (PI[1] == PI[3] && PI[3]) - { - Squ[1] = SameO3[Squ[1]][Squ[2]][Squ[3]]; - Squ[2] = Squ[3] = 0; - } - else - { - if (PI[0] == PI[1] && PI[1]) - { - Squ[0] = SameO2[Squ[0]][Squ[1]]; - Squ[1] = 0; - } - if (PI[1] == PI[2] && PI[2]) - { - Squ[1] = SameO2[Squ[1]][Squ[2]]; - Squ[2] = 0; - } - if (PI[2] == PI[3] && PI[3]) - { - Squ[2] = SameO2[Squ[2]][Squ[3]]; - Squ[3] = 0; - } - } - *ind = ((Squ[0] * TotalBase->m[1] + Squ[1]) * TotalBase->m[2] + Squ[2]) * TotalBase->m[3] + Squ[3]; - if (Double == NULL) - return true; - if (simm) - { - if (PI[0] == PI[3] && PI[3]) - { - i = Sq4normal[Squ[0]]; - Squ[0] = i & 077; - Squ[1] = (i >> 6) & 077; - Squ[2] = (i >> 12) & 077; - Squ[3] = i >> 18; - } - else if (PI[0] == PI[2] && PI[2]) - { - i = Sq3normal[Squ[0]]; - Squ[0] = i & 077; - Squ[1] = (i >> 6) & 077; - Squ[2] = i >> 12; - } - else if (PI[1] == PI[3] && PI[3]) - { - i = Sq3normal[Squ[1]]; - Squ[1] = i & 077; - Squ[2] = (i >> 6) & 077; - Squ[3] = i >> 12; - } - else - { - if (PI[0] == PI[1] && PI[1]) - { - i = Sq2Normal[Squ[0]]; - Squ[0] = i & 077; - Squ[1] = i >> 6; - } - if (PI[1] == PI[2] && PI[2]) - { - i = Sq2Normal[Squ[1]]; - Squ[1] = i & 077; - Squ[2] = i >> 6; - } - if (PI[2] == PI[3] && PI[3]) - { - i = Sq2Normal[Squ[2]]; - Squ[2] = i & 077; - Squ[3] = i >> 6; - } - } - for (i = 0; i < 4; i++) - SpearNorm(1, Squ[i]); - if (PI[0] == PI[3] && PI[3]) - { - int m0, m1, m2, m3, t0, t1, u0, u1; - t0 = MAX(Squ[0], Squ[1]); - u0 = MIN(Squ[0], Squ[1]); - t1 = MAX(Squ[2], Squ[3]); - u1 = MIN(Squ[2], Squ[3]); - m0 = MAX(t0, t1); - m1 = MIN(t0, t1); - m2 = MAX(u0, u1); - m3 = MIN(u0, u1); - if (m1 < m2) - Exchange(m1, m2); - Squ[0] = - (m0 * (m0 - 1) * (m0 - 2) * (m0 - 3)) / 24 + (m1 * (m1 - 1) * (m1 - 2)) / 6 + ((m2 * (m2 - 1)) >> 1) + m3; - Squ[1] = Squ[2] = Squ[3] = 0; - } - else if (PI[0] == PI[2] && PI[2]) - { - Squ[0] = SameO3[Squ[0]][Squ[1]][Squ[2]]; - Squ[1] = Squ[2] = 0; - } - else if (PI[1] == PI[3] && PI[3]) - { - Squ[1] = SameO3[Squ[1]][Squ[2]][Squ[3]]; - Squ[2] = Squ[3] = 0; - } - else - { - if (PI[0] == PI[1] && PI[1]) - { - Squ[0] = SameO2[Squ[0]][Squ[1]]; - Squ[1] = 0; - } - if (PI[1] == PI[2] && PI[2]) - { - Squ[1] = SameO2[Squ[1]][Squ[2]]; - Squ[2] = 0; - } - if (PI[2] == PI[3] && PI[3]) - { - Squ[2] = SameO2[Squ[2]][Squ[3]]; - Squ[3] = 0; - } - } - *Double = ((Squ[0] * TotalBase->m[1] + Squ[1]) * TotalBase->m[2] + Squ[2]) * TotalBase->m[3] + Squ[3]; - } - else - *Double = -1; - return true; - } -bool MakePQ(type_PiSq *PiSq, int *Value, uint64 *ind, uint64 *Double, int *rf) - { - int tb; - RobboTotalBase *TotalBase; - *Value = 0; - if (!TotIndOtt(PiSq, &tb, ind, Double, rf)) - return false; - TotalBase = TableTotalBases + tb; - *Value = TotalValue(TotalBase, (TotalBase->PawnMult) * (*rf)+(*ind)); - if ((*Value) != dBreak) - return true; - return false; - } -static bool TotalBaseScore(typePos *Position, int *Value) - { - uint64 ind, U, V, W; - int rf; - type_PiSq PiSq[1]; - bool b; - PiSq->pi[0] = PiSq->pi[1] = PiSq->pi[2] = PiSq->pi[3] = 0; - PiSq->sq[0] = PiSq->sq[1] = PiSq->sq[2] = PiSq->sq[3] = 0; - U = wBitboardP &(bBitboardP >> 8); - V = (U << 1) & U & ~FileA; - W = (V << 1) & V; - PiSq->Blocked = (U & ~V) | (W & ~((W << 1) & W)); - b = BitboardPQ(Position, PiSq); - if (b) - b = MakePQ(PiSq, Value, &ind, NULL, &rf); - while (!b && PiSq->Blocked && PiSq->n < 4) - { - BitClear(0, PiSq->Blocked); - b = BitboardPQ(Position, PiSq); - if (b) - b = MakePQ(PiSq, Value, &ind, NULL, &rf); - } - return b; - } -bool OttIndice(type_PiSq *PiSq, uint64 *ind, uint64 *Double, int *rf) - { - int tb; - if (TotIndOtt(PiSq, &tb, ind, Double, rf)) - return true; - return false; - } -bool RobboTotalBaseScore(typePos *Position, int *Value) - { - int ep = Position->Dyn->ep, move, w, vb = 255; - bool b, b1, b2; - if (Position->Dyn->oo) - return false; - if (!ep) - return TotalBaseScore(Position, Value); - b = TotalBaseScore(Position, Value); - if (!b) - return false; - if (*Value == dWin) - return true; - if (Position->wtm) - { - if (File(ep) != FH && (wBitboardP & SqSet[ep - 7])) - { - move = ((ep - 7) << 6) | ep | FlagEP; - Make(Position, move); - Mobility(Position); - if (!IsIllegal) - { - b1 = TotalBaseScore(Position, &w); - if (w < vb) - vb = w; - } - Undo(Position, move); - } - if (File(ep) != FA && (wBitboardP & SqSet[ep - 9])) - { - move = ((ep - 9) << 6) | ep | FlagEP; - Make(Position, move); - Mobility(Position); - if (!IsIllegal) - { - b2 = TotalBaseScore(Position, &w); - if (w < vb) - vb = w; - } - Undo(Position, move); - } - } - else - { - if (File(ep) != FH && (bBitboardP & SqSet[ep + 9])) - { - move = ((ep + 9) << 6) | ep | FlagEP; - Make(Position, move); - Mobility(Position); - if (!IsIllegal) - { - b1 = TotalBaseScore(Position, &w); - if (w < vb) - vb = w; - } - Undo(Position, move); - } - if (File(ep) != FA && (bBitboardP & SqSet[ep + 7])) - { - move = ((ep + 7) << 6) | ep | FlagEP; - Make(Position, move); - Mobility(Position); - if (!IsIllegal) - { - b2 = TotalBaseScore(Position, &w); - if (w < vb) - vb = w; - } - Undo(Position, move); - } - } - if (DiskLoss(vb)) - vb = dWin; - else if (vb == dWin) - vb = dLoss; - if (DiskLoss(vb) && DiskLoss(*Value)) - *Value = MAX (*Value, vb); - else - *Value = MIN(*Value, vb); - return true; - } -#endif \ No newline at end of file diff --git a/Firenzina/root_analysis.c b/Firenzina/root_analysis.c deleted file mode 100644 index 32f1592..0000000 --- a/Firenzina/root_analysis.c +++ /dev/null @@ -1,265 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef root_analysis -#define root_analysis -#include "fire.h" -#include "control.h" -typeRootMoveList RootMoveList[256]; -#include "root_analysis.c" -#include "white.h" -#else -#include "black.h" -#endif - -int MyAnalysis(typePos *Position, int Alpha, int Beta, int depth) - { - int Cnt, origAlpha, best_value, cnt, move_is_check, new_depth, v; - typeRootMoveList *p, *q; - typeDynamic *Pos0 = Position->Dyn; - uint32 move; - int cpu, rp; - int extend, LMR; - int to, value; - uint64 Nodes, NodesStore, nodes; - - if (MultiPV != 1) - return MyMultiPV(Position, depth); - - if (Beta > ValueMate) - Beta = ValueMate; - if (Alpha < -ValueMate) - Alpha = -ValueMate; - if (DoOutput && DepthInfo) - { - Send("info depth %d\n", depth >> 1); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info depth %d\n", depth >> 1); - close_log(); - } -#endif - } - Cnt = 0; - for (p = RootMoveList; p->move; p++) - { - Cnt++; - p->move &= 0x7fff; - } - origAlpha = Alpha; - p = RootMoveList; - v = best_value = -ValueInfinity; - Nodes = 0; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - Nodes += RootPosition[cpu][rp].nodes; - NodesStore = Nodes; - cnt = 0; - while ((move = p->move)) - { - Make(Position, move); - EVAL (move, depth); - move_is_check = (MoveIsCheck != 0); - extend = 0; - to = To(move); - LMR = 0; - if (!extend && cnt >= 3 && depth >= 10) - LMR = 1; - if (!extend && cnt >= 6 && depth >= 10) - LMR = 2; - new_depth = depth - 2 + extend - LMR; - if (Pos1->cp || move_is_check) - extend = 1; - if (PassedPawnPush (to, FourthRank (to))) - extend = 1; - - new_depth = depth - 2 + extend; - if (DoOutput && CurrMoveInfo && Analysing && depth >= 24) - { - Send("info currmove %s currmovenumber %d\n", Notate(move, String1[Position->cpu]),(p - RootMoveList) + 1); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info currmove %s currmovenumber %d\n", Notate(move, String1[Position->cpu]),(p - RootMoveList) + 1); - close_log(); - } -#endif - } - if (Is_Exact (Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (best_value == -ValueInfinity || depth <= 2) - v = -OppPV(Position, -Beta, -Alpha, new_depth, move_is_check); - else - { - if (LowDepthConditionPV) - { - if (move_is_check) - v = -OppLowDepthCheck(Position, -Alpha, new_depth); - else - v = -OppLowDepth(Position, -Alpha, new_depth); - } - else - { - if (new_depth >= MinTransMoveDepth && Analysing) - { - int an = new_depth - 12; - v = ValueInfinity; - while (an <= new_depth && v > Alpha) - { - v = -OppPV(Position, -Alpha - 1, -Alpha, an, move_is_check); - an += 4; - } - if (an > new_depth) - { - goto Dec; - new_depth += LMR; - } - } - if (move_is_check) - v = -OppCutCheck(Position, -Alpha, new_depth); - else - v = -OppCut(Position, -Alpha, new_depth); - } - new_depth += LMR; - if (v > Alpha) - v = -OppPV(Position, -Alpha - 1, -Alpha, new_depth, move_is_check); - Dec: - if (v > Alpha) - v = -OppPV(Position, -Beta, -Alpha, new_depth, move_is_check); - if (v <= Alpha) - v = Alpha; - } - Undo(Position, move); - CheckHalt(); - cnt++; - if (v <= Alpha) - p->value = origAlpha; - else - p->value = v; - Nodes = 0; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - Nodes += RootPosition[cpu][rp].nodes; - p->nodes = Nodes - NodesStore; - NodesStore = Nodes; - if (v > best_value) - { - best_value = v; - if (best_value == -ValueInfinity || v > Alpha) - { - HashLowerPV(Position->Dyn->Hash, move, depth, v); - RootBestMove = move; - RootScore = v; - RootDepth = depth; - - if (LowDepthPVs) - { - if (v > Alpha && v < Beta) - Information(Position, GetClock() - StartClock, origAlpha, v, Beta); - } - else - if (depth > MinPVDepth) - { - if (v > Alpha && v < Beta) - Information(Position, GetClock() - StartClock, origAlpha, v, Beta); - } - } - } - if (v > Alpha) - Alpha = v; - if (v < Beta) - { - p++; - continue; - } - break; - } - for (p = RootMoveList + (Cnt - 1); p >= RootMoveList; p--) - { - move = p->move; - value = p->value; - nodes = p->nodes; - for (q = p + 1; q < RootMoveList + Cnt; q++) - { - if (value < q->value) - { - (q - 1)->move = q->move; - (q - 1)->value = q->value; - (q - 1)->nodes = q->nodes; - } - else - break; - } - q--; - q->move = move; - q->value = value; - q->nodes = nodes; - } - for (p = RootMoveList + Cnt; p > RootMoveList; p--) - { - move = p->move; - value = p->value; - nodes = p->nodes; - for (q = p + 1; q < RootMoveList + Cnt; q++) - { - if (nodes < q->nodes) - { - (q - 1)->move = q->move; - (q - 1)->value = q->value; - (q - 1)->nodes = q->nodes; - } - else - break; - } - (q - 1)->move = move; - (q - 1)->value = value; - (q - 1)->nodes = nodes; - } - - RootDepth = depth; - if (!DoSearchMoves) - { - if (best_value <= origAlpha) - HashUpperPV(Position->Dyn->Hash, depth, origAlpha); - else if (best_value < Beta) - HashExact(Position, RootBestMove, depth, best_value, FlagExact); - } - if (LowDepthPVs) - Information(Position, GetClock() - StartClock, origAlpha, best_value, Beta); - else - { - if (depth > MinPVDepth) - Information(Position, GetClock() - StartClock, origAlpha, best_value, Beta); - } - return best_value; - } \ No newline at end of file diff --git a/Firenzina/root_multipv.c b/Firenzina/root_multipv.c deleted file mode 100644 index e2a42a1..0000000 --- a/Firenzina/root_multipv.c +++ /dev/null @@ -1,356 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef root_multipv -#define root_multipv -#include "fire.h" -#include "control.h" -typeRootMoveList RootMoveList[256]; -void ApplySort(int n, typeMPV *mpv) - { - typeMPV *p; - int s, x; - uint64 y; - for (s = 0; s < n && mpv[s].move; s++) - { - if (s == 0) - continue; - p = &mpv[s]; - while (p != mpv && p->Value > (p - 1)->Value) - { - x = p->Value; - p->Value = (p - 1)->Value; - (p - 1)->Value = x; - x = p->move; - p->move = (p - 1)->move; - (p - 1)->move = x; - x = p->depth; - p->depth = (p - 1)->depth; - (p - 1)->depth = x; - x = p->alpha; - p->alpha = (p - 1)->alpha; - (p - 1)->alpha = x; - x = p->beta; - p->beta = (p - 1)->beta; - (p - 1)->beta = x; - y = p->nodes; - p->nodes = (p - 1)->nodes; - (p - 1)->nodes = y; - p--; - } - } - } -#include "root_multipv.c" -#include "white.h" -#else -#include "black.h" -#endif -#define CheckHaltMulti() { if (IvanAllHalt || Position->stop) goto UndoLabel; } - -int MyMultiPV(typePos *Position, int depth) - { - int Cnt, cnt, best_value, move_is_check, new_depth, v; - typeRootMoveList *p, *q; - typeDynamic *Pos0 = Position->Dyn; - uint32 move; - int cpu, rp; - int extend, LMR, value; - int to; - int i, j, x, moveno; - int Alpha = -ValueMate, Target, Delta, Alpha2, Lower; - int GoodMoves = 0; - uint64 Nodes, NodesStore, nodes, y; - if (depth < 14) - for (i = 0; i < 0x100; i++) - MPV[i].move = MPV[i].Value = 0; - if (DoOutput && DepthInfo) - { - Send("info depth %d\n", depth >> 1); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info depth %d\n", depth >> 1); - close_log(); - } -#endif - } - - Cnt = 0; - for (p = RootMoveList; p->move; p++) - { - Cnt++; - p->move &= 0x7fff; - } - p = RootMoveList; - v = best_value = -ValueInfinity; - Nodes = 0; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - Nodes += RootPosition[cpu][rp].nodes; - NodesStore = Nodes; - cnt = 0; - while ((move = p->move)) - { - Target = -ValueInfinity; - Delta = ValueMate; - for (moveno = 0; MPV[moveno].move; moveno++) - if (MPV[moveno].move == move) - { - Target = MPV[moveno].Value; - break; - } - if (Target == -ValueInfinity) - Target = 0; - else - Delta = 8; - - if (GoodMoves > 0) - Alpha2 = MPV[0].Value - MultiCentiPawnPV; - else - Alpha2 = -ValueInfinity; - - Make(Position, move); - EVAL (move, depth); - move_is_check = (MoveIsCheck != 0); - extend = 0; - to = To(move); - - if (Pos1->cp || move_is_check) - extend = 1; - if (PassedPawnPush (to, FourthRank (to))) - extend = 1; - - LMR = 0; - if (!extend && cnt >= (GoodMoves << 1) + 3 && depth >= 10) - LMR = 1; - if (!extend && cnt >= (GoodMoves << 1) + 6 && depth >= 10) - LMR = 2; - new_depth = depth - 2 + extend - LMR; - if (DoOutput && CurrMoveInfo && Analysing && depth >= 24) - { - Send("info currmove %s currmovenumber %d\n", Notate(move, String1[Position->cpu]),(p - RootMoveList) + 1); -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info currmove %s currmovenumber %d\n", Notate(move, String1[Position->cpu]),(p - RootMoveList) + 1); - close_log(); - } -#endif - } - - if (GoodMoves < MultiPV || depth <= 2) - { - while (true) - { - Lower = MAX(Target - Delta, Alpha2); - if (Is_Exact (Position->Dyn->exact)) - v = -Position->Dyn->Value; - else - v = -OppPV(Position, -Target - Delta, -Lower, new_depth, move_is_check); - CheckHaltMulti(); - if (v < Target + Delta && v > Lower) - break; - if (GoodMoves && v <= Alpha2) - break; - new_depth += LMR; - LMR = 0; - MPV[moveno].move = move; - MPV[moveno].depth = depth; - MPV[moveno].alpha = Lower; - MPV[moveno].beta = Target + Delta; - MPV[moveno].Value = v; - Undo(Position, move); - Information(Position, GetClock() - StartClock, MPV[moveno].alpha, MPV[moveno].Value, MPV[moveno].beta); - Make(Position, move); - EVAL (move, depth); - if (v >= Target + Delta) - Target = Target + (Delta >> 1); - else - Target = Target - (Delta >> 1); - if (Target + Delta >= DeltaCutoff || Target - Delta <= -DeltaCutoff) - { - Target = 0; - Delta = ValueMate; - } - else - Delta += Delta >> 1; - } - } - else - { - if (LowDepthConditionPV) - { - if (Is_Exact (Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (move_is_check) - v = -OppLowDepthCheck(Position, -Alpha, new_depth); - else - v = -OppLowDepth(Position, -Alpha, new_depth); - CheckHaltMulti(); - } - else - { - if (new_depth >= MinTransMoveDepth && Analysing) - { - int an = new_depth - 12; - v = ValueInfinity; - while (an <= new_depth && v > Alpha) - { - if (Is_Exact (Position->Dyn->exact)) - v = -Position->Dyn->Value; - else - v = -OppPV(Position, -Alpha - 1, -Alpha, an, move_is_check); - CheckHaltMulti(); - an += 4; - } - if (an > new_depth) - { - new_depth += LMR; - goto EnCircle; - } - } - if (Is_Exact (Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (move_is_check) - v = -OppCutCheck(Position, -Alpha, new_depth); - else - v = -OppCut(Position, -Alpha, new_depth); - CheckHaltMulti(); - } - new_depth += LMR; - if (v > Alpha) - v = -OppPV(Position, -Alpha - 1, -Alpha, new_depth, move_is_check); - EnCircle: - CheckHaltMulti(); - Delta = 8; - while (v > Alpha) - { - if (Is_Exact(Position->Dyn->exact)) - v = -Position->Dyn->Value; - else - v = -OppPV(Position, -Alpha - Delta, -Alpha, new_depth, move_is_check); - if (IvanAllHalt) - break; - if (v < Alpha + Delta) - break; - Delta += Delta >> 1; - if (Alpha + Delta >= DeltaCutoff) - Delta = ValueMate - Alpha; - } - } - UndoLabel: - Undo(Position, move); - CheckHalt(); - Nodes = 0; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - Nodes += RootPosition[cpu][rp].nodes; - p->nodes = Nodes - NodesStore; - NodesStore = Nodes; - if (v > Alpha) - { - p->value = v; - if (v > best_value) - HashLowerPV(Position->Dyn->Hash, move, depth, v); - MPV[GoodMoves].move = move; - MPV[GoodMoves].depth = depth; - MPV[GoodMoves].alpha = -ValueMate; - MPV[GoodMoves].beta = ValueMate; - MPV[GoodMoves++].Value = v; - ApplySort(GoodMoves, MPV); - - if (GoodMoves >= MultiPV) - Alpha = MPV[MultiPV - 1].Value; - else - Alpha = MAX(MPV[0].Value - MultiCentiPawnPV, -ValueMate); - - RootBestMove = MPV[0].move; - best_value = RootScore = MPV[0].Value; - if (LowDepthPVs) - Information(Position, GetClock() - StartClock, -ValueMate, MPV[0].Value, ValueMate); - else - { - if (depth > MinPVDepth) - Information(Position, GetClock() - StartClock, -ValueMate, MPV[0].Value, ValueMate); - } - } - else - p->value = Alpha; - p++; - } - MPV[GoodMoves].move = MoveNone; - for (i = 0; i < GoodMoves; i++) - { - for (j = 0; j < Cnt; j++) - { - if (RootMoveList[j].move == MPV[i].move) - { - x = RootMoveList[i].move; - RootMoveList[i].move = RootMoveList[j].move; - RootMoveList[j].move = x; - x = RootMoveList[i].value; - RootMoveList[i].value = RootMoveList[j].value; - RootMoveList[j].value = x; - y = RootMoveList[i].nodes; - RootMoveList[i].nodes = RootMoveList[j].nodes; - RootMoveList[j].nodes = y; - break; - } - } - } - - for (p = RootMoveList + Cnt; p >= RootMoveList + GoodMoves; p--) - { - move = p->move; - value = p->value; - nodes = p->nodes; - for (q = p + 1; q < RootMoveList + Cnt; q++) - { - if (nodes < q->nodes) - { - (q - 1)->move = q->move; - (q - 1)->value = q->value; - (q - 1)->nodes = q->nodes; - } - else - break; - } - (q - 1)->move = move; - (q - 1)->value = value; - (q - 1)->nodes = nodes; - } - RootDepth = depth; - if (!DoSearchMoves) - HashExact(Position, MPV[0].move, depth, MPV[0].Value, FlagExact); - Information(Position, GetClock() - StartClock, -ValueMate, MPV[0].Value, ValueMate); - return MPV[0].Value; - } \ No newline at end of file diff --git a/Firenzina/root_node.c b/Firenzina/root_node.c deleted file mode 100644 index ae42609..0000000 --- a/Firenzina/root_node.c +++ /dev/null @@ -1,267 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef root_node -#define root_node -#include "fire.h" -#include "control.h" -typeRootMoveList RootMoveList[256]; -#include "root_node.c" -#include "white.h" -#else -#include "black.h" -#endif - -int MyRootNode(typePos *Position, int Alpha, int Beta, int depth) - { - int cpu, rp; - int Cnt, origAlpha, best_value, cnt, move_is_check, new_depth, v; - typeRootMoveList *p, *q; - typeDynamic *Pos0 = Position->Dyn; - uint32 move; - int extend, LMR; - int to, value; - uint64 Nodes, NodesStore, nodes; - if (Beta > ValueMate) - Beta = ValueMate; - if (Alpha < -ValueMate) - Alpha = -ValueMate; - if (DoOutput && DepthInfo) - { - Send("info depth %d\n", depth >> 1); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info depth %d\n", depth >> 1); - close_log(); - } -#endif - - } - - Cnt = 0; - for (p = RootMoveList; p->move; p++) - { - Cnt++; - p->move &= 0x7fff; - } - origAlpha = Alpha; - p = RootMoveList; - v = best_value = -ValueInfinity; - cnt = 0; - Nodes = 0; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - Nodes += RootPosition[cpu][rp].nodes; - NodesStore = Nodes; - cnt = 0; - while ((move = p->move)) - { - Make(Position, move); - EVAL(move, depth); - move_is_check = (MoveIsCheck != 0); - extend = 0; - to = To(move); - if (Pos1->cp || move_is_check) - extend = 1; - if (PassedPawnPush (to, FourthRank (to))) - extend = 1; - LMR = 0; - if (!extend && cnt >= 3 && depth >= 10) - LMR = 1; - if (!extend && cnt >= 6 && depth >= 10) - LMR = 2; - new_depth = depth - 2 + extend - LMR; - if (DoOutput && CurrMoveInfo && depth >= 22) - { - Send("info currmove %s currmovenumber %d\n", Notate(move, String1[Position->cpu]),(p - RootMoveList) + 1); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info currmove %s currmovenumber %d\n", Notate(move, String1[Position->cpu]),(p - RootMoveList) + 1); - close_log(); - } -#endif - - } - - if (Is_Exact (Position->Dyn->exact)) - v = -Position->Dyn->Value; - else if (best_value == -ValueInfinity || depth <= 2) - v = -OppPV(Position, -Beta, -Alpha, new_depth, move_is_check); - else - { - if (LowDepthConditionPV) - { - if (move_is_check) - v = -OppLowDepthCheck(Position, -Alpha, new_depth); - else - v = -OppLowDepth(Position, -Alpha, new_depth); - } - else - { - if (move_is_check) - v = -OppCutCheck(Position, -Alpha, new_depth); - else - v = -OppCut(Position, -Alpha, new_depth); - } - if (v > Alpha) - { - BattleMove = true; - EasyMove = false; - } - new_depth += LMR; - if (v > Alpha) - v = -OppPV(Position, -Alpha - 1, -Alpha, new_depth, move_is_check); - if (v > Alpha) - v = -OppPV(Position, -Beta, -Alpha, new_depth, move_is_check); - if (v <= Alpha) - v = Alpha; - } - Undo(Position, move); - cnt++; - CheckHalt(); - if (v <= Alpha) - p->value = origAlpha; - else - p->value = v; - Nodes = 0; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - Nodes += RootPosition[cpu][rp].nodes; - p->nodes = Nodes - NodesStore; - NodesStore = Nodes; - if (v > best_value) - { - best_value = v; - if (best_value == -ValueInfinity || v > Alpha) - { - HashLowerPV(Position->Dyn->Hash, move, depth, v); - RootBestMove = move; - RootScore = v; - RootDepth = depth; - if (LowDepthPVs) - { - if (v > Alpha && v < Beta) - Information(Position, GetClock() - StartClock, origAlpha, v, Beta); - } - else - { - if (depth > MinPVDepth) - { - if (v > Alpha && v < Beta) - Information(Position, GetClock() - StartClock, origAlpha, v, Beta); - } - } - if (v >= RootPrevious - 25) - BadMove = false; - else - { - BadMove = true; - EasyMove = false; - } - } - } - if (v <= Alpha) - { - if (cnt == 0) - { - BadMove = true; - EasyMove = false; - } - } - else - Alpha = v; - if (v < Beta) - { - p++; - continue; - } - break; - } - for (p = RootMoveList + (Cnt - 1); p >= RootMoveList; p--) - { - move = p->move; - value = p->value; - nodes = p->nodes; - for (q = p + 1; q < RootMoveList + Cnt; q++) - { - if (value < q->value) - { - (q - 1)->move = q->move; - (q - 1)->value = q->value; - (q - 1)->nodes = q->nodes; - } - else - break; - } - q--; - q->move = move; - q->value = value; - q->nodes = nodes; - } - for (p = RootMoveList + Cnt; p > RootMoveList; p--) - { - move = p->move; - value = p->value; - nodes = p->nodes; - for (q = p + 1; q < RootMoveList + Cnt; q++) - { - if (nodes < q->nodes) - { - (q - 1)->move = q->move; - (q - 1)->value = q->value; - (q - 1)->nodes = q->nodes; - } - else - break; - } - (q - 1)->move = move; - (q - 1)->value = value; - (q - 1)->nodes = nodes; - } - RootDepth = depth; - if (best_value <= origAlpha) - HashUpperPV(Position->Dyn->Hash, depth, origAlpha); - else if (best_value < Beta) - HashExact(Position, RootBestMove, depth, best_value, FlagExact); - if (LowDepthPVs) - Information(Position, GetClock() - StartClock, origAlpha, best_value, Beta); - else - { - if (depth > MinPVDepth) - Information(Position, GetClock() - StartClock, origAlpha, best_value, Beta); - } - return best_value; - } \ No newline at end of file diff --git a/Firenzina/search.c b/Firenzina/search.c deleted file mode 100644 index 6d9ce3f..0000000 --- a/Firenzina/search.c +++ /dev/null @@ -1,414 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#include "control.h" -#include "null_move.h" - -#define Legal (Position->wtm ? !BlackInCheck : !WhiteInCheck) -#define InCheck (Position->wtm ? WhiteInCheck : BlackInCheck) -#define MaxMatePly 128 - -static void OutputBestMove(typePos *Position) - { - int i, k; - bool b; - TransPVDeclare(); - int PonderMove = MoveNone; - if (!RootBestMove) - { - Send("bestmove NULL\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "bestmove NULL\n"); - fprintf(log_file, "\n"); - close_log(); - } -#endif - - return; - } - Make(Position, RootBestMove); - Mobility (Position); - k = Position->Dyn->Hash & PVHashMask; - for (i = 0; i < 4; i++) - { - Trans_pv = PVHashTable + (k + i); - HyattHash(Trans_pv, trans_pv); - if (trans_pv->hash == Position->Dyn->Hash) - { - PonderMove = trans_pv->move; - break; - } - } - if (Ponder && !PonderMove) - { - int depth; - for (depth = 2; depth <= 10; depth += 2) - Position->wtm - ? PVNodeWhite(Position, -ValueInfinity, ValueInfinity, depth, Position->Dyn->bAtt & wBitboardK) - : PVNodeBlack(Position, -ValueInfinity, ValueInfinity, depth, Position->Dyn->wAtt & bBitboardK); - PonderMove = (Position->Dyn + 1)->move; - } - if ((Position->wtm ? !WhiteOK(Position, PonderMove) : !BlackOK(Position, PonderMove))) - PonderMove = MoveNone; - else - { - Make(Position, PonderMove); - Mobility (Position); - b = (Legal); - Undo(Position, PonderMove); - if (!b) - PonderMove = MoveNone; - } - Undo(Position, RootBestMove); - Send("bestmove %s ponder %s\n", Notate(RootBestMove, String1[Position->cpu]), - Notate(PonderMove, String2[Position->cpu])); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "bestmove %s ponder %s\n", Notate(RootBestMove, String1[Position->cpu]), - Notate(PonderMove, String2[Position->cpu])); - fprintf(log_file, "\n"); - close_log(); - } -#endif - } -static char *Modifier(int Alpha, int Value, int Beta, char *s) - { - s[0] = 0; - if (Value <= Alpha) - strcpy(s, " upperbound"); - else if (Value >= Beta) - strcpy(s, " lowerbound"); - else - strcpy(s, ""); - return s; - } - -static char *cp_mate(int Value, char *s) - { - if (Value > ValueMate - (MaxMatePly << 6)) - sprintf (s, "mate %d", (ValueMate + 64 - Value) >> 7); - else if (Value < -ValueMate + (MaxMatePly << 6)) - sprintf (s, "mate %d",(-ValueMate - Value) >> 7); - else - sprintf(s, "cp %d", Value); - return s; - } -void Information(typePos *Position, sint64 x, int Alpha, int Value, int Beta) - { - uint64 t, nps, Nodes = 0; - int cpu, rp; - int sd, k, move; - char pv[0x100 << 3], *q; - TransPVDeclare(); - TransDeclare(); - uint64 HashStack[256]; - int i; - int cnt = 0; - bool B; - int mpv; - -#ifdef RobboBases - uint64 TBHits = 0; -#endif - - if (x < 0) - return; - DoOutput = true; - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - Nodes += RootPosition[cpu][rp].nodes; - -#ifdef RobboBases - if (UseRobboBases) - { - for (cpu = 0; cpu < NumThreads; cpu++) - for (rp = 0; rp < RPperCPU; rp++) - TBHits += RootPosition[cpu][rp].tbhits; - } -#endif - - sd = 0; - memset(HashStack, 0, (sizeof(uint64) << 8)); - t = x / 1000; - if (t == 0) - nps = 0; - else - nps = Nodes / t; - if (MultiPV == 1) - { - MPV[0].move = RootBestMove; - MPV[0].Value = Value; - MPV[0].alpha = Alpha; - MPV[0].beta = Beta; - MPV[0].depth = RootDepth; - } - for (mpv = 0; mpv < MultiPV; mpv++) - { - move = MPV[mpv].move; - if (move == MoveNone) - break; - q = pv; - cnt = 0; - HashStack[cnt++] = Position->Dyn->Hash; - Notate(move, String1[Position->cpu]); - strcpy(q, String1[Position->cpu]); - q += strlen(String1[Position->cpu]); - strcpy(q, " "); - q++; - while (move) - { - Make(Position, move); - Mobility (Position); - B = false; - for (i = 0; i < cnt; i++) - if (HashStack[i] == Position->Dyn->Hash) - B = true; - if (B) - break; - HashStack[cnt++] = Position->Dyn->Hash; - move = 0; - k = Position->Dyn->Hash & PVHashMask; - for (i = 0; i < 4; i++) - { - Trans_pv = PVHashTable + (k + i); - HyattHash(Trans_pv, trans_pv); - if (trans_pv->hash == Position->Dyn->Hash) - { - move = trans_pv->move; - break; - } - } - if (!move) - { - Trans = HashPointer(Position->Dyn->Hash); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if (trans->hash == Position->Dyn->Hash) - { - move = trans->move; - break; - } - } - } - if (!move || (Position->wtm ? !WhiteOK(Position, move) : !BlackOK(Position, move))) - break; - if (cnt > 250 || Position->Dyn->reversible > 100) - break; - Notate(move, String1[Position->cpu]); - strcpy(q, String1[Position->cpu]); - q += strlen(String1[Position->cpu]); - strcpy(q, " "); - q++; - } - q--; - *q = 0; - while (Position->Dyn != (Position->DynRoot + 1)) - { - if (!Position->Dyn->move) - UndoNull(Position); - else - Undo(Position, Position->Dyn->move); - } - Send("info multipv %d time " Type64Bit " nodes " Type64Bit " nps " Type64Bit, mpv + 1, t, Nodes, nps * 1000); - -#ifdef RobboBases - if (UseRobboBases) - { - if (TBHitInfo && TBHits) - Send (" tbhits " Type64Bit, TBHits); - } -#endif - - Send(" score %s%s depth %d pv %s\n", cp_mate(MPV[mpv].Value, String2[Position->cpu]), - Modifier(MPV[mpv].alpha, MPV[mpv].Value, MPV[mpv].beta, String3[Position->cpu]), MPV[mpv].depth >> 1, pv); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "info multipv %d time " Type64Bit " nodes " Type64Bit - " nps " Type64Bit, mpv + 1, t, Nodes, nps * 1000); - -#ifdef RobboBases - if (UseRobboBases) - { - if (TBHitInfo && TBHits) - fprintf(log_file, " tbhits " Type64Bit, TBHits); - } -#endif - - fprintf(log_file, " score %s%s depth %d pv %s\n", cp_mate(MPV[mpv].Value, String2[Position->cpu]), - Modifier(MPV[mpv].alpha, MPV[mpv].Value, MPV[mpv].beta, String3[Position->cpu]), MPV[mpv].depth >> 1, pv); - close_log(); - } -#endif - } - } -void Search(typePos *Position) - { - int z, i; - typeDynamic *p, *q, *S; - typePos *Pos; - SearchIsDone = false; - SuppressInput = false; - isNewGame = false; - StartClock = GetClock(); - CPUtime = ProcessClock(); - DoOutput = false; - Ponder_Hit = false; - NodeCheck = 0; - RootPosition0->nodes = 0; - RootBestMove = RootDepth = RootScore = 0; - Position->StackHeight = 0; - if (Position->Dyn->reversible > 110) - goto SkipRepCheck; - Position->StackHeight = -1; - S = MAX(Position->DynRoot + 1, Position->Dyn - Position->Dyn->reversible); - for (p = S; p <= Position->Dyn; p++) - Position->Stack[++(Position->StackHeight)] = p->Hash; - if (Analysing) - { - bool Repetition; - for (p = S; p < Position->Dyn; p++) - { - Repetition = false; - for (q = p + 2; q < Position->Dyn; q += 2) - if (p->Hash == q->Hash) - { - Repetition = true; - break; - } - if (!Repetition) - Position->Stack[p - Position->Dyn + Position->Dyn->reversible] = 0; - (p + 1)->move = 0; - } - } - if (Position->StackHeight == -1) - Position->StackHeight = 0; - SkipRepCheck: - memcpy(Position->DynRoot + 1, Position->Dyn, sizeof(typeDynamic)); - memset(Position->DynRoot + 2, 0, 254 * sizeof(typeDynamic)); - memset(Position->DynRoot, 0, sizeof(typeDynamic)); - Position->Dyn = Position->DynRoot + 1; - Position->height = 0; - - if (Analysing) - GlobalAge = 0; - else - IncrementAge(); - - for (i = 0; i < 256; i++) - (Position->DynRoot + i)->age = GlobalAge; - -#ifdef RobboBases - if (UseRobboBases) - { - SearchRobboBases = true; - SuppressInput = true; - if (RobboMake(Position)) - goto INFINITY; - SuppressInput = false; - } -#endif - - RootPrevious = -ValueMate; - EasyMove = false; - JumpIsSet = true; - Pos = Position; - -#ifdef RobboBases - if (UseRobboBases) - RootPosition0->tbhits = 0; -#endif - - StubIvan(); - Pos = &RootPosition[0][0]; - z = setjmp(J); - if (!z) - { - if (Pos->wtm) - TopWhite(Pos); - else - TopBlack(Pos); - } - SuppressInput = true; - Lock(SMP); - SMPisActive = false; - UnLock(SMP); - JumpIsSet = false; - PreviousDepth = RootDepth; - if (Pos == Position) - { - while (Pos->Dyn != (Pos->DynRoot + 1)) - { - if (!Pos->Dyn->move) - UndoNull(Pos); - else - Undo(Pos, Pos->Dyn->move); - } - } - Information(Position, GetClock() - StartClock, -32767, RootScore, 32767); - -#ifdef RobboBases - INFINITY: -#endif - - SuppressInput = false; - if (DoInfinite && !Stop) - { - InfiniteLoop = true; - while (!Stop) - Input(Position); - } - if (DoPonder && !Stop && !Ponder_Hit) - { - InfiniteLoop = true; - while (!Stop && !Ponder_Hit) - Input(Position); - } - InfiniteLoop = false; - SuppressInput = true; - OutputBestMove(Position); - SuppressInput = false; - SearchIsDone = true; - if (isNewGame) - NewGame(Position, true); - while (StallMode) - NanoSleep(1000000); - } \ No newline at end of file diff --git a/Firenzina/set_position.c b/Firenzina/set_position.c deleted file mode 100644 index 4455209..0000000 --- a/Firenzina/set_position.c +++ /dev/null @@ -1,391 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" - -#define InCheck (Position->wtm ? \ - (Position->Dyn->bAtt & wBitboardK) : \ - (Position->Dyn->wAtt & bBitboardK)) - -static const char StartPosition[80] = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; - -char *EmitFen(typePos *Position, char *ARR) - { - int r, f, e = 0; - int n = 0; - char PieceChar[32] = "0PNKBBRQ0pnkbbrq"; - for (r = R8; r >= R1; r--) - { - for (f = FA; f <= FH; f++) - { - if (!Position->sq[(r << 3) + f]) - e++; - else - { - if (e) - ARR[n++] = '0' + e; - e = 0; - ARR[n++] = PieceChar[Position->sq[(r << 3) + f]]; - } - } - if (e) - ARR[n++] = '0' + e; - e = 0; - if (r != R1) - ARR[n++] = '/'; - } - ARR[n++] = ' '; - ARR[n++] = (Position->wtm) ? 'w' : 'b'; - ARR[n++] = ' '; - if (WhiteOO) - ARR[n++] = 'K'; - if (WhiteOOO) - ARR[n++] = 'Q'; - if (BlackOO) - ARR[n++] = 'k'; - if (BlackOOO) - ARR[n++] = 'q'; - if (!Position->Dyn->oo) - ARR[n++] = '-'; - ARR[n++] = ' '; - if (!Position->Dyn->ep) - ARR[n++] = '-'; - else - { - ARR[n++] = (Position->Dyn->ep & 7) + 'a'; - ARR[n++] = (Position->Dyn->ep >> 3) + '1'; - } - ARR[n++] = ' '; - if (Position->Dyn->reversible >= 100) - ARR[n++] = (Position->Dyn->reversible / 100) + '0'; - if (Position->Dyn->reversible >= 10) - ARR[n++] = ((Position->Dyn->reversible / 10) % 10) + '0'; - ARR[n++] = (Position->Dyn->reversible % 10) + '0'; - ARR[n++] = ' '; - ARR[n++] = '0'; - ARR[n++] = 0; - return ARR; - } -static void ParseFen(typePos *Position, char *I) - { - int rank = 7, file = 0, c = 0, i, p; - for (i = A1; i <= H8; i++) - Position->sq[i] = 0; - while (1) - { - if (rank < 0 || file > 8) - ErrorFen("FEN %s file: %d rank: %d\n", I, file, rank); - p = I[c++]; - if (p == 0) - return; - if (file == 8 && p != '/') - ErrorFen("FEN %s file: %d rank: %d piece: %d\n", I, file, rank, p); - switch (p) - { - case '/': - rank--; - file = 0; - break; - case 'p': - Position->sq[file + (rank << 3)] = bEnumP; - file++; - break; - case 'b': - if (SqSet[file + (rank << 3)] & Black) - Position->sq[file + (rank << 3)] = bEnumBD; - else - Position->sq[file + (rank << 3)] = bEnumBL; - file++; - break; - case 'n': - Position->sq[file + (rank << 3)] = bEnumN; - file++; - break; - case 'r': - Position->sq[file + (rank << 3)] = bEnumR; - file++; - break; - case 'q': - Position->sq[file + (rank << 3)] = bEnumQ; - file++; - break; - case 'k': - Position->sq[file + (rank << 3)] = bEnumK; - file++; - break; - case 'P': - Position->sq[file + (rank << 3)] = wEnumP; - file++; - break; - case 'B': - if (SqSet[file + (rank << 3)] & Black) - Position->sq[file + (rank << 3)] = wEnumBD; - else - Position->sq[file + (rank << 3)] = wEnumBL; - file++; - break; - case 'N': - Position->sq[file + (rank << 3)] = wEnumN; - file++; - break; - case 'R': - Position->sq[file + (rank << 3)] = wEnumR; - file++; - break; - case 'Q': - Position->sq[file + (rank << 3)] = wEnumQ; - file++; - break; - case 'K': - Position->sq[file + (rank << 3)] = wEnumK; - file++; - break; - case '1': - file += 1; - break; - case '2': - file += 2; - break; - case '3': - file += 3; - break; - case '4': - file += 4; - break; - case '5': - file += 5; - break; - case '6': - file += 6; - break; - case '7': - file += 7; - break; - case '8': - file += 8; - break; - default: - ErrorFen("FEN %s file:%d rank:%d piece:%d\n", I, file, rank, p); - } - if ((rank == 0) && (file >= 8)) - break; - } - } -static char *ReadFEN(typePos *Position, char *I) - { - char i[1024]; - bool ok; - int ep; - sscanf(I, "%s", i); - ParseFen(Position, i); - memset(Position->DynRoot, 0, (sizeof(typeDynamic) << 8)); - Position->Dyn = Position->DynRoot; - I += strlen(i) + 1; - sscanf(I, "%s", i); - if (i[0] == 'w') - Position->wtm = true; - else if (i[0] == 'b') - Position->wtm = false; - else - ErrorFen("FEN wb %s\n", i); - I += strlen(i) + 1; - sscanf(I, "%s", i); - Position->Dyn->oo = 16; - if (!strcmp(i, "KQkq")) - Position->Dyn->oo = 15; - if (!strcmp(i, "Qkq")) - Position->Dyn->oo = 14; - if (!strcmp(i, "Kkq")) - Position->Dyn->oo = 13; - if (!strcmp(i, "kq")) - Position->Dyn->oo = 12; - if (!strcmp(i, "KQq")) - Position->Dyn->oo = 11; - if (!strcmp(i, "Qq")) - Position->Dyn->oo = 10; - if (!strcmp(i, "Kq")) - Position->Dyn->oo = 9; - if (!strcmp(i, "q")) - Position->Dyn->oo = 8; - if (!strcmp(i, "KQk")) - Position->Dyn->oo = 7; - if (!strcmp(i, "Qk")) - Position->Dyn->oo = 6; - if (!strcmp(i, "Kk")) - Position->Dyn->oo = 5; - if (!strcmp(i, "k")) - Position->Dyn->oo = 4; - if (!strcmp(i, "KQ")) - Position->Dyn->oo = 3; - if (!strcmp(i, "Q")) - Position->Dyn->oo = 2; - if (!strcmp(i, "K")) - Position->Dyn->oo = 1; - if (!strcmp(i, "-")) - Position->Dyn->oo = 0; - if (Position->Dyn->oo == 16) - ErrorFen("FEN oo %s\n", i); - I += strlen(i) + 1; - sscanf(I, "%s", i); - Position->Dyn->ep = 0; - if (!strcmp(i, "-")) - ep = 0; - else - { - ep = (i[0] - 'a') + ((i[1] - '1') << 3); - if (ep > H8) - ErrorFen("FEN ep %s\n", i); - ok = 0; - } - if (ep) - { - if (Position->wtm) - { - if (File(ep) != FA && (Position->sq[ep - 9] == wEnumP)) - ok = true; - if (File(ep) != FH && (Position->sq[ep - 7] == wEnumP)) - ok = true; - } - else - { - if (File(ep) != FA && (Position->sq[ep + 7] == bEnumP)) - ok = true; - if (File(ep) != FH && (Position->sq[ep + 9] == bEnumP)) - ok = true; - } - if (ok) - Position->Dyn->ep = ep; - } - I += strlen(i) + 1; - sscanf(I, "%s", i); - Position->Dyn->reversible = (uint8)atoi(i); - I += strlen(i) + 1; - sscanf(I, "%s", i); - I += strlen(i) + 1; - InitBitboards(Position); - return I; - } - -static void ReadMoves(typePos *Position, char *I) - { - typeMoveList List[256], *list; - char T[256]; - int i; - uint32 full; - while (I[0]) - { - Mobility(Position); - if (InCheck) - { - list = EvasionMoves(Position, List, 0xffffffffffffffff); - list++; - } - else - { - list = CaptureMoves(Position, List, Position->OccupiedBW); - list = OrdinaryMoves(Position, list); - } - full = FullMove(Position, (I[2] - 'a') + ((I[3] - '1') << 3) + ((I[0] - 'a') << 6) + ((I[1] - '1') << 9)); - sscanf(I, "%s", T); - if (strlen(T) == 5) - { - if (I[4] == 'b') - full |= FlagPromB; - if (I[4] == 'n') - full |= FlagPromN; - if (I[4] == 'r') - full |= FlagPromR; - if (I[4] == 'q') - full |= FlagPromQ; - } - for (i = 0; i < list - List; i++) - { - if (full == (List[i].move & 0x7fff)) - { - Make(Position, full); - Position->StackHeight = 0; - break; - } - } - if (i == list - List) - { - ErrorEnd("moves? %s\n", T); - } - I += strlen(T); - while (I[0] == ' ' || I[0] == '\t') - I++; - } - } -void InitPosition(typePos *Position, char *I) - { - char i[1024], *II, *J; - NodeCheck = 0; - II = malloc(strlen(I) + 256); - strcpy(II, I); - J = strstr(II, "moves"); - sscanf(I, "%s", i); - if (!strcmp(i, "startpos")) - { - ReadFEN(Position, StartPosition); - I += strlen("startpos") + 1; - } - if (!strcmp(i, "fen")) - { - I += strlen("fen") + 1; - I = ReadFEN(Position, I); - } - Position->StackHeight = 0; - if (J && I[0] == 'm') - { - sscanf(I, "%s", i); - if (!strcmp(i, "moves")) - { - I += strlen("moves"); - while (I[0] == ' ' || I[0] == '\t') - I++; - ReadMoves(Position, I); - } - } - else - { - if (J) - { - J += strlen("moves"); - while (J[0] == ' ') - J++; - ReadMoves(Position, J); - } - } - free(II); - Position->height = 0; - if (isNewGame) - ResetPositionalGain(); - Mobility(Position); - } \ No newline at end of file diff --git a/Firenzina/signals.c b/Firenzina/signals.c deleted file mode 100644 index 4de9c51..0000000 --- a/Firenzina/signals.c +++ /dev/null @@ -1,57 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#ifdef LinuxLargePages -#include -static MutexType DeletionLock[1]; -static void SignalHandle(int signo) - { - struct sigaction sig_action[1]; - Lock(DeletionLock); - SharedDelete(); - sig_action->sa_handler = SIG_DFL; - sigaction(signo, sig_action, NULL); - ; - UnLock(DeletionLock); - raise(signo); - } -void LinuxHandleSignals() - { - struct sigaction sig_action[1]; - sig_action->sa_handler = SignalHandle; - sigaction(SIGABRT, sig_action, NULL); - sigaction(SIGHUP, sig_action, NULL); - sigaction(SIGINT, sig_action, NULL); - sigaction(SIGSEGV, sig_action, NULL); - sigaction(SIGTERM, sig_action, NULL); - LockInit(DeletionLock); - } -#endif \ No newline at end of file diff --git a/Firenzina/slab_memory.c b/Firenzina/slab_memory.c deleted file mode 100644 index 30e7ff7..0000000 --- a/Firenzina/slab_memory.c +++ /dev/null @@ -1,150 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -static uint8 *SlabRootLoc = NULL; -static uint8 *CurrentSlabLoc; -static sint64 CurrentSlabSize = 0; -void *FromSlab(uint64 sz) - { - void *A; - uint64 pageset = ((uint64)(CurrentSlabLoc)) & 0xfff; - if (sz >= 0x1000 && pageset & 0xfff) - CurrentSlabLoc += (0x1000 - pageset); - A = CurrentSlabLoc; - if (sz & 0x3f) - sz = sz + (0x40 - (sz & 0x3f)); - CurrentSlabLoc += sz; - if (CurrentSlabLoc - SlabRootLoc > CurrentSlabSize) - { - CurrentSlabLoc -= sz; - Send("FromSlab %d failed\n", (int)(sz)); - return NULL; - } - return A; - } - -static int SlabNumber = -1; -static bool LargeSlab = false; -void DeleteSlab() - { - FreeMem(SlabRootLoc, &SlabNumber, &LargeSlab); - } -void InitSlab(int mb) - { - -#ifdef SlabMemory - if (SlabRootLoc) - DeleteSlab(); - CurrentSlabSize = mb * 0x100000; - CreateMem(&SlabRootLoc, 64, CurrentSlabSize, &SlabNumber, &LargeSlab, "SLAB"); - CurrentSlabLoc = SlabRootLoc + (0x40 - ((uint64)(SlabRootLoc) &0x3f)); -#endif - - FillSlab(); - } -static void FillSlab() - { - SlabAlloc1(uint64, AttN, 64); - SlabAlloc1(uint64, AttK, 64); - SlabAlloc1(uint64, AttPw, 64); - SlabAlloc1(uint64, AttPb, 64); - SlabAlloc1(typeMM, RookMM, 64); - SlabAlloc1(typeMM, BishopMM, 64); - SlabAlloc2(uint64, MMOrtho, 102400); - SlabAlloc2(uint64, MMDiag, 5248); - SlabAlloc1(uint64, SqSet, 64); - SlabAlloc1(uint64, SqClear, 64); - SlabAlloc1(uint64, NonDiag, 64); - SlabAlloc1(uint64, NonOrtho, 64); - SlabAlloc1(uint64, Ortho, 64); - SlabAlloc1(uint64, Diag, 64); - SlabAlloc1(uint64, OrthoDiag, 64); - SlabAlloc1(uint64, OpenFileW, 64); - SlabAlloc1(uint64, OpenFileB, 64); - SlabAlloc1(uint64, PassedPawnW, 64); - SlabAlloc1(uint64, PassedPawnB, 64); - SlabAlloc1(uint64, ProtectedPawnW, 64); - SlabAlloc1(uint64, ProtectedPawnB, 64); - SlabAlloc1(uint64, IsolatedPawnW, 64); - SlabAlloc1(uint64, IsolatedPawnB, 64); - SlabAlloc1(uint64, ConnectedPawns, 64); - SlabAlloc1(uint64, InFrontW, 8); - SlabAlloc1(uint64, NotInFrontW, 8); - SlabAlloc1(uint64, InFrontB, 8); - SlabAlloc1(uint64, NotInFrontB, 8); - SlabAlloc1(uint64, IsolatedFiles, 8); - SlabAlloc1(uint64, FilesLeft, 8); - SlabAlloc1(uint64, FilesRight, 8); - SlabAlloc1(uint64, Doubled, 64); - SlabAlloc1(uint64, Left2, 64); - SlabAlloc1(uint64, Right2, 64); - SlabAlloc1(uint64, Left1, 64); - SlabAlloc1(uint64, Right1, 64); - SlabAlloc1(uint64, Adjacent, 64); - SlabAlloc1(uint64, LongDiag, 64); - SlabAlloc1(uint64, Northwest, 64); - SlabAlloc1(uint64, Southwest, 64); - SlabAlloc1(uint64, Northeast, 64); - SlabAlloc1(uint64, Souteast, 64); - SlabAlloc1(uint64, QuadrantWKwtm, 64); - SlabAlloc1(uint64, QuadrantBKwtm, 64); - SlabAlloc1(uint64, QuadrantWKbtm, 64); - SlabAlloc1(uint64, QuadrantBKbtm, 64); - SlabAlloc1(uint64, ShepherdWK, 64); - SlabAlloc1(uint64, ShepherdBK, 64); - SlabAlloc3(uint64, Interpose, 0100 * 0100); - SlabAlloc3(uint64, Evade, 0100 * 0100); - SlabAlloc3(uint64, Zobrist, 0x10 * 0100); - SlabAlloc3(sint8, Line, 0100 * 0100); - SlabAlloc1(uint64, HashCastling, 16); - SlabAlloc1(uint64, HashEP, 8); - SlabAlloc1(uint64, HashRev, 16); - -#ifdef MultiplePosGain - SlabAlloc2(sint16, MaxPositionalGain, MaxCPUs * 0x10 * 010000); -#else - SlabAlloc2(sint16, MaxPositionalGain, 0x10 * 010000); -#endif - -#ifdef MultipleHistory - SlabAlloc2(uint16, History, MaxCPUs * 0x10 * 0100); -#else - SlabAlloc2(uint16, History, 0x10 * 0100); -#endif - - SlabAlloc2(sint32, PieceSquareValue, 0x10 * 0100); - SlabAlloc2(typeMaterial, Material, 419904); - ResetHistory(); - ResetPositionalGain(); - InitArrays(); - InitMaterialValue(); - InitStatic(); - } \ No newline at end of file diff --git a/Firenzina/slab_memory.h b/Firenzina/slab_memory.h deleted file mode 100644 index dac88b1..0000000 --- a/Firenzina/slab_memory.h +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -typedef struct - { - sint16 Value; - uint8 token, flags; - } typeMaterial; -SlabDeclare2(typeMaterial, Material, 419904); - -SlabDeclare1(typeMM, RookMM, 64); -SlabDeclare1(typeMM, BishopMM, 64); -SlabDeclare2(uint64, MMOrtho, 102400); -SlabDeclare2(uint64, MMDiag, 5248); - -typePos RootPosition[MaxCPUs][RPperCPU]; -typePos RootPosition0[1], NullParent[1]; - -#ifdef OneDimensional -#ifdef MultiplePosGain -SlabDeclare2(sint16, MaxPositionalGain, MaxCPUs * 0x10 * 010000); -#define MaxPosGain(piece, mos) \ - MaxPositionalGain[Position->cpu * 0x10 * 010000 + (piece) * 010000 + (mos)] -#else -SlabDeclare2(sint16, MaxPositionalGain, 0x10 *010000); -#define MaxPosGain(piece, mos) MaxPositionalGain[(piece) * 010000 + (mos)] -#endif -#define HistoryValue(P, M) HistoryPITo (P, P->sq[From (M)],To (M)) -#ifdef MultipleHistory -SlabDeclare2(uint16, History, MaxCPUs * 0x10 * 0100); -#define HistoryPITo(P, PI, To) History[P->cpu * 0x10 * 0100 + 0100 * (PI) + (To)] -#else -SlabDeclare2(uint16, History, 0x10 * 0100); -#define HistoryPITo(P, PI, To) History[(PI) * 0100 + (To)] -#endif -SlabDeclare2(sint32, PieceSquareValue, 0x10 * 0100); -#define PST(pi, sq) PieceSquareValue[(pi) * 0100 + (sq)] -#else -#ifdef MultiplePosGain -sint16 MaxPositionalGain[MaxCPUs][0x10][010000]; -#define MaxPosGain(piece, mos) MaxPositionalGain[Position->cpu][piece][mos] -#else -sint16 MaxPositionalGain[0x10][010000]; -#define MaxPosGain(piece, mos) MaxPositionalGain[piece][mos] -#endif -#define HistoryValue(P, M) HistoryPITo (P, P->sq[From (M)],To (M)) -#ifdef MultipleHistory -uint16 History[MaxCPUs][0x10][0100]; -#define HistoryPITo(P, PI, To) History[P->cpu][PI][To] -#else -uint16 History[0x10 * 0100]; -#define HistoryPITo(P, PI, To) History[PI][To] -#endif -sint32 PieceSquareValue[0x10][0100]; -#define PST(pi, sq) PieceSquareValue[pi][sq] -#endif \ No newline at end of file diff --git a/Firenzina/static.c b/Firenzina/static.c deleted file mode 100644 index 6b442c3..0000000 --- a/Firenzina/static.c +++ /dev/null @@ -1,217 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#define Combine(x,y)(((x) << 16) +(y)) -static void BlackFromWhite() - { - int sq, pi; - for (sq = A1; sq <= H8; sq++) - for (pi = bEnumP; pi <= bEnumQ; pi++) - PST(pi, sq) = -PST(pi - 8, H8 - sq); - } -static int ValueOpenP(int sq) - { - int C[8] = - { - -20, -8, -2, 5, 5, -2, -8, -20 - }; - int T[8] = - { - 0, -3, -2, -1, 1, 2, 3, 0 - }; - int file = File(sq), rank = Rank(sq); - if (rank == R1 || rank == R8) - return 0; - return C[file] + T[rank]; - } -static int ValueEndP(int sq) - { - int C[8] = - { - -4, -6, -8, -10, -10, -8, -6, -4 - }; - int T[8] = - { - 0, -3, -3, -2, -1, 0, 2, 0 - }; - int file = File(sq), rank = Rank(sq); - if (rank == R1 || rank == R8) - return 0; - return C[file] + T[rank]; - } -static int ValueOpenN(int sq) - { - int T[8] = - { - -32, -10, 6, 15, 21, 19, 10, -11 - }; - int C[8] = - { - -26, -10, 1, 5, 5, 1, -10, -26 - }; - int rank = Rank(sq), file = File(sq); - return(sq == A8 || sq == H8) ? (-120) : (T[rank] + C[file]); - } -static int ValueEndN(int sq) - { - int V[8] = - { - 2, 1, 0, -1, -2, -4, -7, -10 - }; - int T[8] = - { - -10, -5, -2, 1, 3, 5, 2, -3 - }; - int C[8] = - { - -4, -1, 2, 4, 4, 2, -1, -4 - }; - int rank = Rank(sq), file = File(sq); - int d = ABS(file - rank), e = ABS(file + rank - 7); - return V[d] + V[e] + T[rank] + C[file]; - } -static int ValueOpenB(int sq) - { - int V[8] = - { - 10, 5, 1, -3, -5, -7, -8, -12 - }; - int W[8] = - { - -5, 0, 0, 0, 0, 0, 0, 0 - }; - int rank = Rank(sq), file = File(sq); - int d = ABS(file - rank), e = ABS(file + rank - 7); - return V[d] + V[e] + W[rank]; - } -static int ValueEndB(int sq) - { - int V[8] = - { - 3, 2, 0, 0, -2, -2, -3, -3 - }; - int rank = Rank(sq), file = File(sq); - int d = ABS(file - rank), e = ABS(file + rank - 7); - return V[d] + V[e]; - } -static int ValueOpenR(int sq) - { - int C[8] = - { - -4, 0, 4, 8, 8, 4, 0, -4 - }; - return C[File(sq)]; - } -static int ValueEndR(int sq) - { - int T[8] = - { - 0, 0, 0, 0, 1, 1, 1, -2 - }; - return T[Rank(sq)]; - } -static int ValueOpenQ(int sq) - { - int V[8] = - { - 3, 2, 1, 0, -2, -4, -7, -10 - }; - int W[8] = - { - -2, 0, 1, 2, 2, 1, 0, -2 - }; - int rank = Rank(sq), file = File(sq); - int d = ABS(file - rank), e = ABS(file + rank - 7); - return V[d] + V[e] + W[rank] + W[file] - 5 * (rank == R1); - } -static int ValueEndQ(int sq) - { - int V[8] = - { - 1, 0, -1, -3, -4, -6, -8, -12 - }; - int W[8] = - { - -2, 0, 1, 2, 2, 1, 0, -2 - }; - int rank = Rank(sq), file = File(sq); - int d = ABS(file - rank), e = ABS(file + rank - 7); - return V[d] + V[e] + W[rank] + W[file]; - } -static int ValueOpenK(int sq) - { - int T[8] = - { - 4, 1, -2, -5, -10, -15, -25, -35 - }; - int C[8] = - { - 40, 45, 15, -5, -5, 15, 45, 40 - }; - int rank = Rank(sq), file = File(sq); - return T[rank] + C[file]; - } -static int ValueEndK(int sq) - { - int V[8] = - { - 2, 0, -2, -5, -8, -12, -20, -30 - }; - int T[8] = - { - -30, -5, 0, 5, 10, 5, 0, -10 - }; - int C[8] = - { - -15, 0, 10, 15, 15, 10, 0, -15 - }; - int rank = Rank(sq), file = File(sq); - int d = ABS(file - rank), e = ABS(file + rank - 7); - return V[d] + V[e] + T[rank] + C[file]; - } - -void InitStatic() - { - int sq; - for (sq = A1; sq <= H8; sq++) - PST(wEnumP, sq) = Combine(ValueOpenP(sq), ValueEndP(sq)); - for (sq = A1; sq <= H8; sq++) - PST(wEnumN, sq) = Combine(ValueOpenN(sq), ValueEndN(sq)); - for (sq = A1; sq <= H8; sq++) - PST(wEnumBL, sq) = PST(wEnumBD, sq) = Combine(ValueOpenB(sq), ValueEndB(sq)); - for (sq = A1; sq <= H8; sq++) - PST(wEnumR, sq) = Combine(ValueOpenR(sq), ValueEndR(sq)); - for (sq = A1; sq <= H8; sq++) - PST(wEnumQ, sq) = Combine(ValueOpenQ(sq), ValueEndQ(sq)); - for (sq = A1; sq <= H8; sq++) - PST(wEnumK, sq) = Combine(ValueOpenK(sq), ValueEndK(sq)); - BlackFromWhite(); - } \ No newline at end of file diff --git a/Firenzina/top_analysis.c b/Firenzina/top_analysis.c deleted file mode 100644 index 6a1bd6b..0000000 --- a/Firenzina/top_analysis.c +++ /dev/null @@ -1,275 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef top_analysis -#define top_analysis -#include "fire.h" -#include "control.h" -#define IsCheck \ - (Position->wtm ? \ - (wBitboardK & Position->Dyn->bAtt) : (bBitboardK & Position->Dyn->wAtt)) -typeRootMoveList RootMoveList[256]; -#include "top_analysis.c" -#include "white.h" -#else -#include "black.h" -#endif - -void MyTopAnalysis(typePos *Position) - { - int i, depth, A, L, U, v, Value = 0, trans_depth; - int move_depth = 0, ExactDepth = 0; - uint32 move, HashMove = 0, ExactMove = 0, to, fr; - typeMoveList *mlx, *ml, ML[256]; - typeRootMoveList *p, *q, *list; - TransDeclare(); - typeDynamic *Pos0 = Position->Dyn; - int PieceValue[16] = - { - 0, 1, 3, 0, 3, 3, 5, 9, 0, 1, 3, 0, 3, 3, 5, 9 - }; - int sm = 0; - - bool TriplePeek = false; - int TriplePeekValue = -ValueInfinity; - - Mobility (Position); - if (IsCheck) - ml = MyEvasion(Position, ML, 0xffffffffffffffff); - else - { - mlx = MyCapture(Position, ML, OppOccupied); - ml = MyOrdinary(Position, mlx); - SortOrdinary(ml, mlx, 0, 0, 0); - } - Trans = HashPointer(Position->Dyn->Hash); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Position->Dyn->Hash >> 32)) == 0) - { - trans_depth = trans->DepthLower; - move = trans->move; - if (IsExact(trans)) - { - ExactDepth = trans_depth; - ExactMove = move; - Value = HashUpperBound(trans); - } - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - HashMove = move; - } - } - } - for (i = 0; i < ml - ML; i++) - RootMoveList[i].move = ML[i].move; - RootMoveList[ml - ML].move = MoveNone; - list = RootMoveList + (ml - ML); - -#ifdef RobboBases - if (UseRobboBases) - { - if (TripleBasesLoaded && TripleCondition(Position) && TripleValue(Position, &v, false, true)) - { - TriplePeek = true; - TriplePeekValue = v; - } - } -#endif - - q = RootMoveList; - for (p = RootMoveList; p < list; p++) - { - move = p->move & 0x7fff; - Make(Position, move); - Mobility (Position); - if (IllegalMove) - { - Undo(Position, move); - continue; - } - if (Analysing && DoSearchMoves) - { - sm = 0; - while (SearchMoves[sm]) - { - if (SearchMoves[sm] == move) - { - (q++)->move = move & 0x7fff; - break; - } - sm++; - } - } - -#ifdef RobboBases - else if (UseRobboBases && TripleBasesLoaded && TriplePeek && TripleValue(Position, &v, false, true)) - { - v = -v; - if (TriplePeekValue > 0 && v > 0) - (q++)->move = move & 0x7fff; - if (TriplePeekValue == 0 && v >= 0) - { - if (v > 0) - TriplePeekValue = 1; - (q++)->move = move & 0x7fff; - } - if (TriplePeekValue < 0) - { - (q++)->move = move & 0x7fff; - if (v > 0) - TriplePeekValue = 1; - if (v == 0) - TriplePeekValue = 0; - } - } -#endif - - else - (q++)->move = move & 0x7fff; - Undo(Position, move); - } - q->move = 0; - list = q; - -#ifdef RobboBases - if (UseRobboBases) - { - q = RootMoveList; - for (p = RootMoveList; p < list; p++) - { - move = p->move & 0x7fff; - Make(Position, move); - Mobility(Position); - if (UseRobboBases && TripleBasesLoaded && TriplePeek && TripleValue(Position, &v, false, true)) - { - v = -v; - if (TriplePeekValue > 0 && v > 0) - (q++)->move = move & 0x7fff; - if (TriplePeekValue == 0 && v >= 0) - (q++)->move = move & 0x7fff; - if (TriplePeekValue < 0) - (q++)->move = move & 0x7fff; - } - else - (q++)->move = move & 0x7fff; - Undo(Position, move); - } - q->move = 0; - list = q; - } -#endif - - for (p = RootMoveList; p < list; p++) - { - if (Position->sq[To(p->move)]) - { - to = Position->sq[To(p->move)]; - fr = Position->sq[From(p->move)]; - p->move |= 0xff000000 + (((PieceValue[to] << 4) - PieceValue[fr]) << 16); - } - } - for (p = RootMoveList; p < list; p++) - if (p->move == HashMove) - p->move |= 0xffff0000; - for (p = list - 1; p >= RootMoveList; p--) - { - move = p->move; - for (q = p + 1; q < list; q++) - { - if (move < q->move) - (q - 1)->move = q->move; - else - break; - } - q--; - q->move = move; - } - L = -ValueMate; - U = ValueMate; - if (!RootMoveList[0].move) - { - if (IsCheck) - { - RootScore = L; - } - else - { - RootScore = 0; - } - RootBestMove = 0; - RootDepth = 0; - return; - } - for (depth = 2; depth <= 250; depth += 2) - { - if (depth >= TopMinDepth && RootScore <= DeltaCutoff && -DeltaCutoff <= RootScore && MultiPV == 1) - { - A = 8; - L = RootScore - A; - U = RootScore + A; - if (L < -DeltaCutoff) - L = -ValueMate; - if (U > DeltaCutoff) - U = ValueMate; - Again: - v = MyAnalysis(Position, L, U, depth); - if (IvanAllHalt) - goto CheckIfDone; - if (v > L && v < U) - goto CheckIfDone; - if (v <= L) - { - RootScore = L; - L -= A; - A += A >> 1; - goto Again; - } - else - { - RootScore = U; - U += A; - A += A >> 1; - goto Again; - } - } - else - v = MyAnalysis(Position, -ValueMate, ValueMate, depth); - CheckIfDone: - RootPrevious = RootScore; - if (IvanAllHalt) - return; - CheckDone(Position, depth >> 1); - if (IvanAllHalt) - return; - } - } \ No newline at end of file diff --git a/Firenzina/top_node.c b/Firenzina/top_node.c deleted file mode 100644 index 700cd79..0000000 --- a/Firenzina/top_node.c +++ /dev/null @@ -1,282 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifndef top_node -#define top_node -#include "fire.h" -#include "control.h" -#define IsCheck \ - (Position->wtm ? \ - (wBitboardK & Position->Dyn->bAtt) : (bBitboardK & Position->Dyn->wAtt)) -typeRootMoveList RootMoveList[256]; -#include "top_node.c" -#include "white.h" -#else -#include "black.h" -#endif - -void MyTop(typePos *Position) - { - int i, depth, A, L, U, v, Value = 0, trans_depth; - int move_depth = 0, ExactDepth = 0; - uint32 move, HashMove = 0, ExactMove = 0, to, fr; - typeMoveList *mlx, *ml, ML[256]; - typeRootMoveList *p, *q, *list; - TransDeclare(); - typeDynamic *Pos0 = Position->Dyn; - int PieceValue[16] = - { - 0, 1, 3, 0, 3, 3, 5, 9, 0, 1, 3, 0, 3, 3, 5, 9 - }; - -#ifdef RobboBases - bool TriplePeek = false; - int TriplePeekValue = -ValueInfinity; -#endif - - if (Analysing) - { - MyTopAnalysis(Position); - return; - } - Mobility (Position); - if (IsCheck) - ml = MyEvasion(Position, ML, 0xffffffffffffffff); - else - { - mlx = MyCapture(Position, ML, OppOccupied); - ml = MyOrdinary(Position, mlx); - SortOrdinary(ml, mlx, 0, 0, 0); - } - Trans = HashPointer(Position->Dyn->Hash); - for (i = 0; i < 4; i++, Trans++) - { - HyattHash(Trans, trans); - if ((trans->hash ^ (Position->Dyn->Hash >> 32)) == 0) - { - trans_depth = trans->DepthLower; - move = trans->move; - if (IsExact(trans)) - { - ExactDepth = trans_depth; - ExactMove = move; - Value = HashUpperBound(trans); - } - if (move && trans_depth > move_depth) - { - move_depth = trans_depth; - HashMove = move; - } - } - } - if (ExactDepth >= PreviousDepth - 6 && ExactMove == HashMove && !Ponder && ExactMove && PreviousFast - && PreviousDepth >= 18 && MyOK(Position, ExactMove) && Value < DeltaCutoff && Value > -DeltaCutoff) - { - RootScore = Value; - RootBestMove = ExactMove; - RootDepth = ExactDepth; - PreviousFast = false; - if (!IsCheck) - v = MyExclude(Position, Value - 50, PreviousDepth - 6, ExactMove); - else - v = MyExcludeCheck(Position, Value - 50, PreviousDepth - 6, ExactMove); - if (v < Value - 50) - return; - } - PreviousFast = true; - for (i = 0; i < ml - ML; i++) - RootMoveList[i].move = ML[i].move; - RootMoveList[ml - ML].move = MoveNone; - list = RootMoveList + (ml - ML); - -#ifdef RobboBases - if (UseRobboBases) - { - if (TripleBasesLoaded && TripleCondition(Position) && TripleValue(Position, &v, false, true)) - { - TriplePeek = true; - TriplePeekValue = v; - } - } -#endif - - q = RootMoveList; - for (p = RootMoveList; p < list; p++) - { - move = p->move & 0x7fff; - Make(Position, move); - Mobility (Position); - if (IllegalMove) - { - Undo(Position, move); - continue; - } -#ifdef RobboBases - else if (UseRobboBases && TripleBasesLoaded && TriplePeek && TripleValue(Position, &v, false, true)) - { - v = -v; - if (TriplePeekValue > 0 && v > 0) - (q++)->move = move & 0x7fff; - if (TriplePeekValue == 0 && v >= 0) - { - if (v > 0) - TriplePeekValue = 1; - (q++)->move = move & 0x7fff; - } - if (TriplePeekValue < 0) - { - (q++)->move = move & 0x7fff; - if (v > 0) - TriplePeekValue = 1; - if (v == 0) - TriplePeekValue = 0; - } - } -#endif - - else - (q++)->move = move & 0x7fff; - Undo(Position, move); - } - q->move = 0; - list = q; - -#ifdef RobboBases - if (UseRobboBases) - { - q = RootMoveList; - for (p = RootMoveList; p < list; p++) - { - move = p->move & 0x7fff; - Make(Position, move); - Mobility(Position); - if (UseRobboBases && TripleBasesLoaded && TriplePeek && TripleValue(Position, &v, false, true)) - { - v = -v; - if (TriplePeekValue > 0 && v > 0) - (q++)->move = move & 0x7fff; - if (TriplePeekValue == 0 && v >= 0) - (q++)->move = move & 0x7fff; - if (TriplePeekValue < 0) - (q++)->move = move & 0x7fff; - } - else - (q++)->move = move & 0x7fff; - Undo(Position, move); - } - q->move = 0; - list = q; - } -#endif - - for (p = RootMoveList; p < list; p++) - { - if (Position->sq[To(p->move)]) - { - to = Position->sq[To(p->move)]; - fr = Position->sq[From(p->move)]; - p->move |= 0xff000000 +((16 * PieceValue[to] - PieceValue[fr]) << 16); - } - } - for (p = RootMoveList; p < list; p++) - if (p->move == HashMove) - p->move |= 0xffff0000; - for (p = list - 1; p >= RootMoveList; p--) - { - move = p->move; - for (q = p + 1; q < list; q++) - { - if (move < q->move) - (q - 1)->move = q->move; - else - break; - } - q--; - q->move = move; - } - L = -ValueMate; - U = ValueMate; - if (!RootMoveList[0].move) - { - if (IsCheck) - RootScore = L; - else - RootScore = 0; - RootBestMove = 0; - RootDepth = 0; - return; - } - for (depth = 2; depth <= MaxDepth; depth += 2) - { - BadMove = false; - BattleMove = false; - if (depth >= TopMinDepth && RootScore <= DeltaCutoff && -DeltaCutoff <= RootScore) - { - A = AspirationWindow; - L = RootScore - A; - U = RootScore + A; - if (L < -DeltaCutoff) - L = -ValueMate; - if (U > DeltaCutoff) - U = ValueMate; - Again: - v = MyRootNode(Position, L, U, depth); - if (IvanAllHalt) - goto CheckIfDone; - if (v > L && v < U) - goto CheckIfDone; - if (v <= L) - { - RootScore = L; - L -= A; - A += A >> 1; - goto Again; - } - else - { - RootScore = U; - U += A; - A += A >> 1; - goto Again; - } - } - else - v = MyRootNode(Position, -ValueMate, ValueMate, depth); - CheckIfDone: - if (depth == 2) - EasyMove = true; - RootPrevious = RootScore; - if (IvanAllHalt) - return; - CheckDone(Position, depth >> 1); - if (IvanAllHalt) - return; - } - } \ No newline at end of file diff --git a/Firenzina/undef.h b/Firenzina/undef.h deleted file mode 100644 index 87dee01..0000000 --- a/Firenzina/undef.h +++ /dev/null @@ -1,189 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#undef MyPVNodeSMP -#undef OppPVNodeSMP -#undef MyAllSMP -#undef OppAllSMP -#undef MyCutSMP -#undef OppCutSMP -#undef MyMultiPV -#undef MyPVQsearch -#undef MyPVQsearchCheck -#undef MyQsearch -#undef MyQsearchCheck -#undef MyLowDepth -#undef MyLowDepthCheck -#undef MyExclude -#undef MyExcludeCheck -#undef MyCut -#undef MyCutCheck -#undef MyAll -#undef MyAllCheck -#undef MyPV -#undef MyRootNode -#undef MyAnalysis -#undef MyTop -#undef MyTopAnalysis -#undef MyAttacked -#undef OppAttacked -#undef MyAttackedPawns -#undef OppAttackedPawns -#undef OppPVQsearch -#undef OppPVQsearchCheck -#undef OppQsearch -#undef OppQsearchCheck -#undef OppLowDepth -#undef OppLowDepthCheck -#undef OppExclude -#undef OppExcludeCheck -#undef OppCut -#undef OppCutCheck -#undef OppAll -#undef OppAllCheck -#undef OppPV -#undef OppRootNode -#undef OppAnalysis -#undef OppTop -#undef OppTopAnalysis -#undef OppOccupied -#undef BitboardOppP -#undef BitboardOppN -#undef BitboardOppBL -#undef BitboardOppBD -#undef BitboardOppR -#undef BitboardOppQ -#undef BitboardOppK -#undef MyOccupied -#undef BitboardMyP -#undef BitboardMyN -#undef BitboardMyBL -#undef BitboardMyBD -#undef BitboardMyR -#undef BitboardMyQ -#undef BitboardMyK -#undef MyKingSq -#undef OppKingSq -#undef EnumOppP -#undef EnumOppN -#undef EnumOppBL -#undef EnumOppBD -#undef EnumOppR -#undef EnumOppQ -#undef EnumOppK -#undef EnumMyP -#undef EnumMyN -#undef EnumMyBL -#undef EnumMyBD -#undef EnumMyR -#undef EnumMyQ -#undef EnumMyK -#undef OppKingCheck -#undef MyCapture -#undef MyOrdinary -#undef MyPositionalGain -#undef MyEvasion -#undef MyQuietChecks -#undef MySEE -#undef Make -#undef Undo -#undef IllegalMove -#undef MoveIsCheck -#undef MyOK -#undef MyNext -#undef MyNull -#undef HasPiece -#undef SixthRank -#undef FifthRank -#undef FourthRank -#undef FourthRankBitBoard -#undef IsPassedPawn -#undef MyXray -#undef OppXray -#undef MyXrayTable -#undef OppXrayTable -#undef MyKingCheck -#undef MyCount -#undef CountEvasions -#undef InCheck -#undef OppKdanger -#undef EighthRank -#undef CaptureRight -#undef FromLeft -#undef CaptureLeft -#undef FromRight -#undef Forward -#undef ForwardLeft -#undef ForwardRight -#undef Backward -#undef ForwardShift -#undef BackShift -#undef SeventhRank -#undef BackShift2 -#undef Forward2 -#undef SecondRank -#undef SecondSixthRanks -#undef OnThirdRank -#undef SecondSixthRanks -#undef BitBoardSeventhRank -#undef BitBoardEighthRank -#undef WhiteA7 -#undef WhiteH7 -#undef CaptureEP -#undef PromQueenCap -#undef PromKnightCap -#undef CastleOO -#undef CastleOOO -#undef WhiteF1G1 -#undef WhiteC1D1 -#undef WhiteB1C1D1 -#undef WhiteE1 -#undef WhiteC1 -#undef WhiteG1 -#undef UnderProm -#undef OnSecondRank -#undef CanCaptureRight -#undef CanCaptureLeft -#undef PawnGuard -#undef FourthEighthRankNoH -#undef FourthEighthRankNoA -#undef BackRight -#undef BackRight2 -#undef BackRight3 -#undef BackLeft -#undef BackLeft2 -#undef BackLeft3 -#undef NumberRank5 -#undef NumberRank2 -#undef NumberRank7 -#undef PieceIsMine -#undef PieceIsOpp -#undef Backward2 -#undef PieceIsOppPawn \ No newline at end of file diff --git a/Firenzina/unmake_move.c b/Firenzina/unmake_move.c deleted file mode 100644 index c633927..0000000 --- a/Firenzina/unmake_move.c +++ /dev/null @@ -1,178 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#include "make_unmake.h" - -static INLINE void UnMakeWhiteOO(typePos *Position, int to) - { - if (to == G1) - { - wBitboardOcc ^= F1H1; - wBitboardR ^= F1H1; - Position->sq[F1] = 0; - Position->sq[H1] = wEnumR; - Position->OccupiedBW ^= F1H1; - } - else if (to == C1) - { - wBitboardOcc ^= A1D1; - wBitboardR ^= A1D1; - Position->sq[D1] = 0; - Position->sq[A1] = wEnumR; - Position->OccupiedBW ^= A1D1; - } - } -static INLINE void UnMakeBlackOO(typePos *Position, int to) - { - if (to == G8) - { - bBitboardOcc ^= F8H8; - bBitboardR ^= F8H8; - Position->sq[F8] = 0; - Position->sq[H8] = bEnumR; - Position->OccupiedBW ^= F8H8; - } - else if (to == C8) - { - bBitboardOcc ^= A8D8; - bBitboardR ^= A8D8; - Position->sq[D8] = 0; - Position->sq[A8] = bEnumR; - Position->OccupiedBW ^= A8D8; - } - } -void UndoWhite(typePos *Position, uint32 move) - { - int fr, to, pi, cp, z; - uint64 mask; - fr = From(move); - to = To(move); - pi = Position->sq[to]; - Position->wtm ^= 1; - Position->height--; - if (MoveIsProm(move)) - { - Position->bitboard[pi] &= SqClear[to]; - pi = wEnumP; - } - Position->sq[fr] = pi; - Position->sq[to] = Position->Dyn->cp; - if (pi == wEnumK) - Position->wKsq = fr; - mask = SqSet[fr]; - wBitboardOcc |= mask; - Position->bitboard[pi] |= mask; - SetOccupied(mask, fr); - mask = SqClear[to]; - wBitboardOcc &= mask; - Position->bitboard[pi] &= mask; - cp = Position->Dyn->cp; - if (cp) - { - mask = ~mask; - bBitboardOcc |= mask; - Position->bitboard[cp] |= mask; - } - else - { - ClearOccupied(mask, to); - if (MoveIsOO(move)) - UnMakeWhiteOO(Position, to); - else if (MoveIsEP(move)) - { - z = to ^ 8; - Position->sq[z] = bEnumP; - mask = SqSet[z]; - bBitboardOcc |= mask; - bBitboardP |= mask; - SetOccupied(mask, z); - } - } - Position->Dyn--; - Position->StackHeight--; - } -void UndoBlack(typePos *Position, uint32 move) - { - int fr, to, pi, cp, z; - uint64 mask; - fr = From(move); - to = To(move); - pi = Position->sq[to]; - Position->wtm ^= 1; - Position->height--; - if (MoveIsProm(move)) - { - Position->bitboard[pi] &= SqClear[to]; - pi = bEnumP; - } - Position->sq[fr] = pi; - Position->sq[to] = Position->Dyn->cp; - if (pi == bEnumK) - Position->bKsq = fr; - mask = SqSet[fr]; - bBitboardOcc |= mask; - Position->bitboard[pi] |= mask; - SetOccupied(mask, fr); - mask = SqClear[to]; - bBitboardOcc &= mask; - Position->bitboard[pi] &= mask; - cp = Position->Dyn->cp; - if (cp) - { - mask = ~mask; - wBitboardOcc |= mask; - Position->bitboard[cp] |= mask; - } - else - { - ClearOccupied(mask, to); - if (MoveIsOO(move)) - UnMakeBlackOO(Position, to); - else if (MoveIsEP(move)) - { - z = to ^ 8; - Position->sq[z] = wEnumP; - mask = SqSet[z]; - wBitboardOcc |= mask; - wBitboardP |= mask; - SetOccupied(mask, z); - } - } - Position->Dyn--; - Position->StackHeight--; - } -void Undo(typePos *Position, uint32 move) - { - if (!Position->wtm) - UndoWhite(Position, move); - else - UndoBlack(Position, move); - } \ No newline at end of file diff --git a/Firenzina/utility.c b/Firenzina/utility.c deleted file mode 100644 index 0257a05..0000000 --- a/Firenzina/utility.c +++ /dev/null @@ -1,486 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "fire.h" -#include "material_value.h" -#include "intrin.h" - -#define Tweak (0x74d3c012a8bf965e) -int PreviousDepth, PreviousFast; - -char *Notate(uint32 move, char *M) - { - int fr, to, pr; - char c[16] = "0123nbrq"; - fr = From(move); - to = To(move); - if (move == MoveNone) - { - M[0] = 'N'; - M[1] = 'U'; - M[2] = M[3] = 'L'; - M[4] = 0; - return M; - } - sprintf(M, "%c%c%c%c", 'a' + (fr & 7), '1' + ((fr >> 3) & 7), 'a' + (to & 7), '1' + ((to >> 3) & 7)); - if (MoveIsProm(move)) - { - pr = (move & FlagMask) >> 12; - sprintf(M + 4, "%c", c[pr]); - } - return M; - } -uint32 FullMove(typePos *Position, uint32 x) - { - int pi, to = To(x), fr = From(x); - if (!x) - return x; - pi = Position->sq[fr]; - if (pi == wEnumK || pi == bEnumK) - { - if (to - fr == 2 || fr - to == 2) - x |= FlagOO; - } - if (To(x) != 0 && To(x) == Position->Dyn->ep && (pi == wEnumP || pi == bEnumP)) - x |= FlagEP; - return x; - } -uint32 NumericMove(typePos *Position, char *str) - { - int x; - x = FullMove(Position, (str[2] - 'a') + ((str[3] - '1') << 3) + ((str[0] - 'a') << 6) + ((str[1] - '1') << 9)); - if (str[4] == 'b') - x |= FlagPromB; - if (str[4] == 'n') - x |= FlagPromN; - if (str[4] == 'r') - x |= FlagPromR; - if (str[4] == 'q') - x |= FlagPromQ; - return x; - } - -void InitBitboards(typePos *Position) - { - int i, pi; - uint64 O; - - BoardIsOk = false; - for (i = 0; i < 16; i++) - Position->bitboard[i] = 0; - Position->Dyn->Hash = Position->Dyn->PawnHash = 0; - Position->Dyn->material = 0; - Position->Dyn->Static = 0; - for (i = A1; i <= H8; i++) - { - if ((pi = Position->sq[i])) - { - Position->Dyn->Static += PST(pi, i); - Position->Dyn->Hash ^= Hash(pi, i); - if (pi == wEnumP || pi == bEnumP) - Position->Dyn->PawnHash ^= Hash(pi, i); - Position->Dyn->material += MaterialValue[pi]; - BitSet(i, Position->bitboard[Position->sq[i]]); - } - } - wBitboardOcc = wBitboardK | wBitboardQ | wBitboardR | wBitboardB | wBitboardN | wBitboardP; - bBitboardOcc = bBitboardK | bBitboardQ | bBitboardR | bBitboardB | bBitboardN | bBitboardP; - Position->OccupiedBW = wBitboardOcc | bBitboardOcc; - O = Position->OccupiedBW; - if (POPCNT(wBitboardQ) > 1 || POPCNT(bBitboardQ) > 1 - || POPCNT(wBitboardR) > 2 || POPCNT(bBitboardR) > 2 - || POPCNT(wBitboardBL) > 1 || POPCNT(bBitboardBL) > 1 - || POPCNT(wBitboardN) > 2 || POPCNT(bBitboardN) > 2 - || POPCNT(wBitboardBD) > 1 || POPCNT(bBitboardBD) > 1) - Position->Dyn->material |= 0x80000000; - if (POPCNT(wBitboardK) != 1) - BoardIsOk = false; - if (POPCNT(bBitboardK) != 1) - BoardIsOk = false; - if (POPCNT(wBitboardQ) > 9) - BoardIsOk = false; - if (POPCNT(bBitboardQ) > 9) - BoardIsOk = false; - if (POPCNT(wBitboardR) > 10) - BoardIsOk = false; - if (POPCNT(bBitboardR) > 10) - BoardIsOk = false; - if (POPCNT(wBitboardBL) > 9) - BoardIsOk = false; - if (POPCNT(bBitboardBL) > 9) - BoardIsOk = false; - if (POPCNT(wBitboardBD) > 9) - BoardIsOk = false; - if (POPCNT(bBitboardBD) > 9) - BoardIsOk = false; - if (POPCNT(wBitboardBL | wBitboardBD) > 10) - BoardIsOk = false; - if (POPCNT(bBitboardBL | bBitboardBD) > 10) - BoardIsOk = false; - if (POPCNT(wBitboardN) > 10) - BoardIsOk = false; - if (POPCNT(bBitboardN) > 10) - BoardIsOk = false; - if (POPCNT(wBitboardP) > 8) - BoardIsOk = false; - if (POPCNT(bBitboardP) > 8) - BoardIsOk = false; - if (POPCNT(wBitboardOcc) > 16) - BoardIsOk = false; - if (POPCNT(bBitboardOcc) > 16) - BoardIsOk = false; - if ((wBitboardP | bBitboardP) & (Rank1 | Rank8)) - BoardIsOk = false; - - Position->wKsq = BSF(wBitboardK); - Position->bKsq = BSF(bBitboardK); - if ((WhiteOO && (Position->wKsq != E1 || !(wBitboardR & SqSet[H1]))) - || (WhiteOOO && (Position->wKsq != E1 || !(wBitboardR & SqSet[A1]))) - || (BlackOO && (Position->bKsq != E8 || !(bBitboardR & SqSet[H8]))) - || (BlackOOO && (Position->bKsq != E8 || !(bBitboardR & SqSet[A8])))) - BoardIsOk = false; - Position->Dyn->Hash ^= HashCastling[Position->Dyn->oo]; - if (Position->Dyn->ep) - Position->Dyn->Hash ^= HashEP[Position->Dyn->ep & 7]; - Position->Dyn->PawnHash ^= - HashCastling[Position->Dyn->oo] ^ Tweak ^ Hash(wEnumK, Position->wKsq) ^ Hash(bEnumK, Position->bKsq); - if (Position->wtm) - Position->Dyn->Hash ^= HashWTM; - Mobility(Position); - if (Position->wtm && Position->Dyn->wAtt & bBitboardK) - BoardIsOk = false; - if (!Position->wtm && Position->Dyn->bAtt & wBitboardK) - BoardIsOk = false; - if (POPCNT(Position->Dyn->bKcheck) >= 3 || POPCNT(Position->Dyn->wKcheck) >= 3) - BoardIsOk = false; - BoardIsOk = true; - } -#ifdef WINDOWS -#include -boolean TryInput() - { - static int init = 0, is_pipe; - static HANDLE stdin_h; - DWORD val; - if (SuppressInput) - return false; - if (!SearchIsDone && StallInput) - return false; - if (!init) - { - init = 1; - stdin_h = GetStdHandle(STD_INPUT_HANDLE); - is_pipe = !GetConsoleMode(stdin_h, &val); - if (!is_pipe) - { - SetConsoleMode(stdin_h, val & ~(ENABLE_MOUSE_INPUT | ENABLE_WINDOW_INPUT)); - FlushConsoleInputBuffer(stdin_h); - } - } - if (is_pipe) - { - if (!PeekNamedPipe(stdin_h, NULL, 0, NULL, &val, NULL)) - return 1; - return val > 0; - } - else - { - GetNumberOfConsoleInputEvents(stdin_h, &val); - return val > 1; - } - return 0; - } -uint64 GetClock() - { - return(GetTickCount() * 1000ULL); - } - -uint64 ProcessClock() -{ - FILETIME ftProcCreation, ftProcExit, ftProcKernel, ftProcUser; - LARGE_INTEGER user_time, kernel_time; - uint64 x; - uint64 tt = 10; - - GetProcessTimes(GetCurrentProcess(), &ftProcCreation, &ftProcExit, &ftProcKernel, &ftProcUser); - - user_time.LowPart = ftProcUser.dwLowDateTime; - user_time.HighPart = ftProcUser.dwHighDateTime; - kernel_time.LowPart = ftProcKernel.dwLowDateTime; - kernel_time.HighPart = ftProcKernel.dwHighDateTime; - x = (uint64) (user_time.QuadPart + kernel_time.QuadPart) / tt; - return x; -} -#else -#include -boolean TryInput() - { - int v; - fd_set fd[1]; - struct timeval tv[1]; - if (SuppressInput) - return false; - if (!SearchIsDone && StallInput) - return false; - FD_Zero(fd); - FD_SET(STDIN_FILENO, fd); - tv->tv_sec = 0; - tv->tv_usec = 0; - v = select(STDIN_FILENO + 1, fd, NULL, NULL, tv); - return(v > 0); - } -#include -uint64 GetClock() - { - uint64 x; - struct timeval tv; - gettimeofday(&tv, NULL); - x = tv.tv_sec; - x *= 1000000; - x += tv.tv_usec; - return x; - } -uint64 ProcessClock() - { - return (uint64)clock(); - } -#endif - -#include -void Send(char *fmt, ...) - { - va_list Value; - va_start(Value, fmt); - vfprintf(stdout, fmt, Value); - va_end(Value); - fflush(stdout); - } -void ErrorEnd(char *fmt, ...) - { - va_list Value; - va_start(Value, fmt); - va_end(Value); - fprintf(stdout, "Error\n"); - vfprintf(stdout, fmt, Value); - exit(1); - } -void ErrorFen(char *fmt, ...) - { - va_list Value; - va_start(Value, fmt); - va_end(Value); - fprintf(stdout, "Fen Error\n"); - vfprintf(stdout, fmt, Value); - exit(1); - } -void NewGame(typePos *Position, boolean full) - { - int i; - for (i = A1; i <= H8; i++) - Position->sq[i] = 0; - memset(Position->DynRoot, 0, (sizeof(typeDynamic) << 8)); - Position->Dyn = Position->DynRoot + 1; - Position->wtm = true; - Position->height = 0; - Position->Dyn->oo = 0x0f; - Position->Dyn->ep = 0; - Position->Dyn->reversible = 0; - for (i = A2; i <= H2; i++) - Position->sq[i] = wEnumP; - for (i = A7; i <= H7; i++) - Position->sq[i] = bEnumP; - Position->sq[D1] = wEnumQ; - Position->sq[D8] = bEnumQ; - Position->sq[E1] = wEnumK; - Position->sq[E8] = bEnumK; - Position->sq[A1] = Position->sq[H1] = wEnumR; - Position->sq[A8] = Position->sq[H8] = bEnumR; - Position->sq[B1] = Position->sq[G1] = wEnumN; - Position->sq[B8] = Position->sq[G8] = bEnumN; - Position->sq[C1] = wEnumBD; - Position->sq[F1] = wEnumBL; - Position->sq[C8] = bEnumBL; - Position->sq[F8] = bEnumBD; - PreviousDepth = 1000; - PreviousFast = false; - isNewGame = true; - Position->StackHeight = 0; - InitBitboards(Position); - if (!full) - return; - PVHashClear(); - HashClear(); - EvalHashClear(); - ResetHistory(); - ResetPositionalGain(); - PawnHashReset(); - } -void ShowBanner() - { - char *startup_banner = "" Engine " " Vers " " Platform "\n" // Modification by Yuri Censor for Firenzina, 2/16/2013: - "by Yuri Censor and ZirconiumX, a clone of Fire 2.2 xTreme by Kranium, based on Ippolit\n" // ZirconiumX added, 3/19/2013 - "compiled by Yuri Censor\n" // Modified by Yuri Censor for Firenzina, 2/23/2013; Was: compiled by NS (i.e., Norman Schmidt) - "" __DATE__ " " __TIME__ "\n\n"; - - Send(startup_banner); - fflush(stdout); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, startup_banner); - close_log(); - } -#endif - } - -void GetSysInfo() - { - SYSTEM_INFO sysinfo; - GetSystemInfo(&sysinfo); - NumCPUs = sysinfo.dwNumberOfProcessors; - - if(NumCPUs < 1) - NumCPUs = 1; - - if(NumCPUs > 1) - { - Send("\n%d CPUs found\n", NumCPUs); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "\n%d CPUs found\n", NumCPUs); - close_log(); - } -#endif - - } - else - { - Send("\n%d CPU found\n", NumCPUs); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "\n%d CPU found\n", NumCPUs); - close_log(); - } -#endif - - } - - NumThreads = NumCPUs<<1; // Modification by Yuri Censor for Firenzina, 2/16/2013 - // Was: NumThreads = NumCPUs; - // Problem: We couldn't have more threads than processors - if(NumThreads > MaxCPUs) - NumThreads = MaxCPUs; - - if(NumThreads > OptMaxThreads) - NumThreads = OptMaxThreads; - - - if(NumThreads > 1) - { - Send("using %d threads\n\n", NumThreads); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "using %d threads\n\n", NumThreads); - close_log(); - } -#endif - - } - else - { - Send("using %d thread\n\n", NumThreads); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "using %d thread\n\n", NumThreads); - close_log(); - } -#endif - } - } - -void SetPOPCNT() - { - int CPUInfo[4] = {-1}; - __cpuid(CPUInfo, 0x00000001); - HasPopcnt = (CPUInfo[2] >> 23) & 1; - // Direction by Yuri Censor for Firenzina, 03/19/2013. - // Comment out the section below to disable hardware POPCNT support: - /**/if(HasPopcnt) - { - POPCNT = &PopcntHard; - Send("Hardware POPCNT supported\n\n"); - -#ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); - fprintf(log_file, "Hardware POPCNT supported\n\n"); - close_log(); - } -#endif - } - else/**/ - POPCNT = &PopcntEmul; - } - -#ifdef Log -int create_log(void) - { - char buf[256]; - time_t now; - struct tm tnow; - time(&now); - tnow = *localtime(&now); - strftime(buf, 32, "%d%b-%H%M", &tnow); - sprintf(log_filename, "%s %s %s %s.txt", Engine, Vers, Platform, buf); - log_file = fopen(log_filename, "wt"); - close_log(); - return false; - } - -void close_log(void) - { - fclose(log_file); - } -#endif \ No newline at end of file diff --git a/Firenzina/white.h b/Firenzina/white.h deleted file mode 100644 index b2e34e2..0000000 --- a/Firenzina/white.h +++ /dev/null @@ -1,192 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#include "undef.h" -#define MyPVNodeSMP WhitePVNodeSMP -#define OppPVNodeSMP BlackPVNodeSMP -#define MyAllSMP WhiteAllSMP -#define OppAllSMP BlackAllSMP -#define MyCutSMP WhiteCutSMP -#define OppCutSMP BlackCutSMP -#define MyMultiPV WhiteMultiPV -#define MyPVQsearch PVQsearchWhite -#define MyPVQsearchCheck PVQsearchWhiteCheck -#define MyQsearch QsearchWhite -#define MyQsearchCheck QsearchWhiteCheck -#define MyLowDepth LowDepthWhite -#define MyLowDepthCheck LowDepthWhiteCheck -#define MyExclude ExcludeWhite -#define MyExcludeCheck ExcludeWhiteCheck -#define MyCut CutNodeWhite -#define MyCutCheck CutNodeWhiteCheck -#define MyAll AllNodeWhite -#define MyAllCheck AllNodeWhiteCheck -#define MyPV PVNodeWhite -#define MyRootNode RootWhite -#define MyAnalysis WhiteAnalysis -#define MyTop TopWhite -#define MyTopAnalysis WhiteTopAnalysis -#define MyAttacked Position->Dyn->wAtt -#define OppAttacked Position->Dyn->bAtt -#define MyAttackedPawns AttPw -#define OppAttackedPawns AttPb -#define OppPVQsearch PVQsearchBlack -#define OppPVQsearchCheck PVQsearchBlackCheck -#define OppQsearch QsearchBlack -#define OppQsearchCheck QsearchBlackCheck -#define OppLowDepth LowDepthBlack -#define OppLowDepthCheck LowDepthBlackCheck -#define OppExclude ExcludeBlack -#define OppExcludeCheck ExcludeBlackCheck -#define OppCut CutNodeBlack -#define OppCutCheck CutNodeBlackCheck -#define OppAll AllNodeBlack -#define OppAllCheck AllNodeBlackCheck -#define OppPV PVNodeBlack -#define OppRootNode RootBlack -#define OppAnalysis BlackAnalysis -#define OppTop TopBlack -#define OppTopAnalysis BlackTopAnalysis -#define OppOccupied bBitboardOcc -#define BitboardOppP bBitboardP -#define BitboardOppN bBitboardN -#define BitboardOppBL bBitboardBL -#define BitboardOppBD bBitboardBD -#define BitboardOppB (BitboardOppBL | BitboardOppBD) -#define BitboardOppR bBitboardR -#define BitboardOppQ bBitboardQ -#define BitboardOppK bBitboardK -#define MyOccupied wBitboardOcc -#define BitboardMyP wBitboardP -#define BitboardMyN wBitboardN -#define BitboardMyBL wBitboardBL -#define BitboardMyBD wBitboardBD -#define BitboardMyB (BitboardMyBL | BitboardMyBD) -#define BitboardMyR wBitboardR -#define BitboardMyQ wBitboardQ -#define BitboardMyK wBitboardK -#define MyKingSq Position->wKsq -#define OppKingSq Position->bKsq -#define EnumOppP bEnumP -#define EnumOppN bEnumN -#define EnumOppBL bEnumBL -#define EnumOppBD bEnumBD -#define EnumOppR bEnumR -#define EnumOppQ bEnumQ -#define EnumOppK bEnumK -#define EnumMyP wEnumP -#define EnumMyN wEnumN -#define EnumMyBL wEnumBL -#define EnumMyBD wEnumBD -#define EnumMyR wEnumR -#define EnumMyQ wEnumQ -#define EnumMyK wEnumK -#define OppKingCheck Position->Dyn->bKcheck -#define MyCapture WhiteCaptures -#define MyOrdinary WhiteOrdinary -#define MyPositionalGain PositionalMovesWhite -#define MyEvasion WhiteEvasions -#define MyQuietChecks QuietChecksWhite -#define MySEE WhiteSEE -#define Make MakeWhite -#define Undo UndoWhite -#define IllegalMove MoveIsCheckWhite -#define MoveIsCheck MoveIsCheckBlack -#define MyOK WhiteOK -#define MyNext NextWhite -#define MyNull ((Position->Dyn->flags) & 2) -#define HasPiece (wBitboardOcc ^ wBitboardK ^ wBitboardP) -#define FourthRank(x) ((x) >= A4) -#define FifthRank(x) ((x) <= A5) -#define SixthRank(x) ((x) >= A6) -#define FourthRankBitBoard Rank4 -#define IsPassedPawn PassedPawnW -#define MyXray (Position->Dyn->wXray) -#define OppXray (Position->Dyn->bXray) -#define MyXrayTable Position->XrayW -#define OppXrayTable Position->XrayB -#define MyKingCheck Position->Dyn->wKcheck -#define MyCount CountWhite -#define CountEvasions count_white_evasions -#define InCheck WhiteInCheck -#define OppKdanger bKdanger -#define EighthRank(x) (x >= A8) -#define CaptureRight ((wBitboardP & ~FileH) << 9) -#define FromLeft(x) (((x) - 9) << 6) -#define CaptureLeft ((wBitboardP & ~FileA) << 7) -#define FromRight(x) (((x) - 7) << 6) -#define Forward(x) ((x) + 8) -#define ForwardLeft(x) ((x) + 7) -#define ForwardRight(x) ((x) + 9) -#define Backward(x) ((x) - 8) -#define ForwardShift(x) ((x) << 8) -#define BackShift(x) ((x) >> 8) -#define SeventhRank(x) (x >= A7) -#define BackShift2(x) ((x) >> 16) -#define Forward2(x) ((x) + 16) -#define SecondRank Rank2 -#define OnThirdRank(x) ((x & 070) == 020) -#define SecondSixthRanks Ranks2to6 -#define BitBoardSeventhRank Rank7 -#define BitBoardEighthRank Rank8 -#define WhiteA7 A7 -#define WhiteH7 H7 -#define CaptureEP CaptureValue[wEnumP][bEnumP] -#define PromQueenCap ((0x28 << 24) + CaptureValue[wEnumP][c]) -#define PromKnightCap ((0x1a << 24) + CaptureValue[wEnumP][c]) -#define CastleOO WhiteOO -#define CastleOOO WhiteOOO -#define WhiteF1G1 F1G1 -#define WhiteC1D1 C1D1 -#define WhiteB1C1D1 B1C1D1 -#define WhiteE1 E1 -#define WhiteC1 C1 -#define WhiteG1 G1 -#define UnderProm UnderPromWhite -#define OnSecondRank(x) ((x & 070) == 010) -#define CanCaptureRight (((SqSet[fr] & NotH) << 9) & bBitboardOcc & mask) -#define CanCaptureLeft (((SqSet[fr] & NotA) << 7) & bBitboardOcc & mask) -#define PawnGuard(x,y) \ - (Position->Dyn->wAtt & SqSet[x] || AttFile((y)) & (wBitboardR|wBitboardQ)) -#define FourthEighthRankNoH (0x7f7f7f7f7f000000) -#define FourthEighthRankNoA (0xfefefefefe000000) -#define BackRight(x) ((x) - 7) -#define BackRight2(x) ((x) - 15) -#define BackRight3(x) ((x) - 23) -#define BackLeft(x) ((x) - 9) -#define BackLeft2(x) ((x) - 17) -#define BackLeft3(x) ((x) - 25) -#define NumberRank5 R5 -#define NumberRank2 R2 -#define NumberRank7 R7 -#define PieceIsMine PieceIsWhite -#define PieceIsOpp PieceIsBlack -#define Backward2(x) ((x) - 16) -#define PieceIsOppPawn(x) ((x == bEnumP) ? 0xffffffffffffffff : 0) \ No newline at end of file diff --git a/Firenzina/win-linux.h b/Firenzina/win-linux.h deleted file mode 100644 index ee3b28c..0000000 --- a/Firenzina/win-linux.h +++ /dev/null @@ -1,132 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#ifdef WINDOWS -#include -#define NomeWindows - -#pragma warning(disable : 4244) -// conversion from 'int' to 'short', possible loss of data -#pragma warning(disable : 4018) -// signed/unsigned mismatch -#pragma warning(disable : 4996) -// 'sscanf': This function or variable may be unsafe -#pragma warning(disable : 4334) -// '<<' : result of 32-bit shift implicitly converted to 64 bits -#pragma warning(disable : 4761) -// integral size mismatch in argument; conversion supplied -#pragma warning(disable : 4311) -// pointer truncation from 'void *' to 'DWORD' -#pragma warning(disable : 4090) -// different 'const' qualifiers -#pragma warning(disable : 4113) -// 'int (__cdecl *)()' differs in parameter list -#pragma warning(disable : 4146) -// unary minus operator applied to unsigned type, result still unsigned - -typedef __int8 sint8; -typedef __int16 sint16; -typedef __int32 sint32; -typedef __int64 sint64; -typedef unsigned __int8 bool; -typedef unsigned __int8 uint8; -typedef unsigned __int16 uint16; -typedef unsigned __int32 uint32; -typedef unsigned __int64 uint64; - -#define INLINE _inline -#define atoll _atoi64 -#define Type64Bit "%I64d" -#define MemAlign(a, b, c) a = _aligned_malloc (c, b) -#define AlignedFree(x) _aligned_free (x) -#define __builtin_prefetch -#define WINDOWS_X64 // Added by Yuri Censor for Firenzina, 2/16/2013 -#ifdef WINDOWS_X64 -#include "win64bits.h" -#define Platform "x64" -#else -#include "win32bits.h" -#define Platform "w32" -#endif - -#define MutexType CRITICAL_SECTION -#define CondType HANDLE -#define Lock(x) EnterCriticalSection (x) -#define UnLock(x) LeaveCriticalSection (x) -#define WaitForLock(x, y) WaitForSingleObject (x, INFINITE) -#define SignalForLock(x, y) SetEvent (x) -#define LockInit(x) InitializeCriticalSection (x) -#define LockDestroy DeleteCriticalSection -#define CondInit(x, y) (x) = CreateEvent (0, false, false, 0) -#define TryLock(x) (!TryEnterCriticalSection (x)) -#define PThreadCreate(N, b, thr, d) \ - (* (N)) = CreateThread (NULL, 0, thr, (LPVOID) (d), 0, NULL); -#define PThreadJoin(x) \ - { DWORD w; do { GetExitCodeThread (x, &w); } while (w == STILL_ACTIVE); } -HANDLE PThread[MaxCPUs], PThreadIO; -#define IvanThread(A) DWORD WINAPI SMPThread (LPVOID A) -#define IOThread(A) DWORD WINAPI io_thread (LPVOID A) -#define VoidStarType DWORD -#else -#define sint8 signed char -#define sint16 signed short int -#define sint32 int -#define sint64 long long int -#define uint8 unsigned char -#define uint16 unsigned short int -#define uint32 unsigned int -#define uint64 unsigned long long int -#define INLINE inline -#define Type64Bit "%lld" -#define MemAlign(a, b, c) posix_memalign ((void*) &(a), b, c) -#define AlignedFree(x) free (x) -#include "bits.h" -#include -#define MutexType pthread_mutex_t -#define CondType pthread_cond_t -#define Lock(x) pthread_mutex_lock (x) -#define UnLock(x) pthread_mutex_unlock (x) -#define Wait(x, y) pthread_cond_wait (x, y) -#define Signal(x) pthread_cond_signal (x) -#define WaitForLock(x, y) { Lock (&(y)); Wait (&(x), &(y)); UnLock (&(y)); } -#define SignalForLock(x, y) { Lock (&(y)); Signal (&(x)); UnLock (&(y)); } -#define LockInit(x) pthread_mutex_init ((x), NULL) -#define LockDestroy pthread_mutex_destroy -#define TryLock(x) pthread_mutex_trylock (x) -#define CondInit(x, y) \ - { pthread_cond_init (&(x), NULL); pthread_mutex_init (&(y), NULL); } -#define PThreadCreate(N, b, thr, d) pthread_create (N, NULL, thr, (void*) (d)) -#define PThreadJoin(x) pthread_join (x, NULL) -pthread_t PThread[MaxCPUs], PThreadIO; -#define IvanThread(A) void* SMPThread (void* A) -#define IOThread(A) void* io_thread (void* A) -#define VoidStarType void* -#define LinuxLargePages true -#endif \ No newline at end of file diff --git a/Firenzina/win32bits.h b/Firenzina/win32bits.h deleted file mode 100644 index b767f19..0000000 --- a/Firenzina/win32bits.h +++ /dev/null @@ -1,89 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ - -#define UINT64 unsigned long long int // Added by Yuri Censor for Firenzina, 3/4/2013 -static _inline int BSF(UINT64 x) // Modified by Yuri Censor for Firenzina, 3/4/2013: _inline instead of INLINE - { // Reason: Intel 13.0 compiler seems happy this way - { - _asm - { - mov eax, dword ptr x[0] - test eax, eax - jz f_hi - bsf eax, eax - jmp f_ret - f_hi: bsf eax, dword ptr x[4] - add eax, 20h - f_ret: - } - } - } -static _inline int BSR(UINT64 x) // Modified by Yuri Censor for Firenzina, 3/4/2013: _inline instead of INLINE - { // Reason: Intel 13.0 compiler seems happy this way - { - _asm - { - mov eax, dword ptr x[4] - test eax, eax - jz l_lo - bsr eax, eax - add eax, 20h - jmp l_ret - l_lo: bsr eax, dword ptr x[0] - l_ret: - } - } - } - static _inline int PopcntHard (UINT64 w) // Modified by Yuri Censor for Firenzina, 3/4/2013: _inline instead of INLINE - { // Reason: Intel 13.0 compiler seems happy this way - { - _asm - { - popcnt edx,dword ptr w[0] - popcnt eax,dword ptr w[4] - add eax,edx - } - } - } - -static _inline int PopcntEmul (UINT64 v) // Modified by Yuri Censor for Firenzina, 3/4/2013: _inline instead of INLINE - { // Reason: Intel 13.0 compiler seems happy this way - unsigned int v1, v2; - v1 = (unsigned int) (v & 0xFFFFFFFF); - v1 -= (v1 >> 1) & 0x55555555; - v1 = (v1 & 0x33333333) + ((v1 >> 2) & 0x33333333); - v1 = (v1 + (v1 >> 4)) & 0x0F0F0F0F; - v2 = (unsigned int) (v >> 32); - v2 -= (v2 >> 1) & 0x55555555; - v2 = (v2 & 0x33333333) + ((v2 >> 2) & 0x33333333); - v2 = (v2 + (v2 >> 4)) & 0x0F0F0F0F; - return ((v1 * 0x01010101) >> 24) + ((v2 * 0x01010101) >> 24); - } - diff --git a/Firenzina/win64bits.h b/Firenzina/win64bits.h deleted file mode 100644 index cfac5f2..0000000 --- a/Firenzina/win64bits.h +++ /dev/null @@ -1,83 +0,0 @@ -/******************************************************************************* -Firenzina is a UCI chess playing engine by Yuri Censor (Dmitri Gusev). -Rededication: To the memories of Giovanna Tornabuoni and Domenico Ghirlandaio. -Firenzina is a clone of Fire 2.2 xTreme by Kranium (Norman Schmidt). -Firenzina is a derivative (via Fire) of FireBird by Kranium (Norman Schmidt) -and Sentinel (Milos Stanisavljevic). Firenzina is based (via Fire and FireBird) -on Ippolit source code: http://ippolit.wikispaces.com/ -Ippolit authors: Yakov Petrovich Golyadkin, Igor Igorovich Igoronov, -and Roberto Pescatore -Ippolit copyright: (C) 2009 Yakov Petrovich Golyadkin -Ippolit date: 92th and 93rd year from Revolution -Ippolit owners: PUBLICDOMAIN (workers) -Ippolit dedication: To Vladimir Ilyich -"This Russian chess ship is a truly glorious achievement of the - October Revolution and Decembrists movement!" - -Firenzina 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 3 of the License, or -(at your option) any later version. - -Firenzina 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, see http://www.gnu.org/licenses/. -*******************************************************************************/ -#include // Modification by Yuri Censor for Firenzina, 2/16/2013 - // Needed to have access to _mm_popcnt_u64, an intrinsic function. -#include // Returned by Yuri Censor for Firenzina, 3/4/2013 -//#pragma intrinsic(_BitScanForward64) -#ifdef _MSC_VER -static INLINE int BSF(UINT64 x) - { - int r; - _BitScanForward64(&r, x); - return r; - } -static INLINE int BSR(UINT64 x) - { - int r; - _BitScanReverse64(&r, x); - return r; - } -#else -static int BSF(UINT64 x) - { - _asm - { - bsf rax, x - } - } -static int BSR(UINT64 x) - { - _asm - { - bsr rax, x - } - } -#endif -//static INLINE int PopcntHard (UINT64 x) -static INLINE long long PopcntHard (unsigned long long x) // Modified by Yuri Censor for Firenzina, 2/17/2013 - { // Reason: Types changed for __popcnt64 in MS Visual Studio Ultimate 2012 - /* // Commented out by Yuri Censor, 2/16/2013 - _asm - { - popcnt rax, x - } - */ // Modification by Yuri Censor for Firenzina, 2/17/2013 - return _mm_popcnt_u64(x); // Was: return x; - // Problem: MS Visual Studio Ultimate 2012 does not support asm. - // It provides intrinsic functions such as _mm_popcnt_u64 instead. - } -//static INLINE int PopcntEmul (uint64 w) -static INLINE long long PopcntEmul (unsigned long long w) // Modified by Yuri Censor for Firenzina, 2/17/2013 - { // Reason: To comply with types for _mm_popcnt_u64 in MS Visual Studio Ultimate 2012 - w = w - ((w >> 1) & 0x5555555555555555ULL); - w = (w & 0x3333333333333333ULL) + ((w >> 2) & 0x3333333333333333ULL); - w = (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0fULL; - return (w * 0x0101010101010101ull) >> 56; - } diff --git a/src/patch.diff b/src/patch.diff deleted file mode 100644 index e1bba78..0000000 --- a/src/patch.diff +++ /dev/null @@ -1,876 +0,0 @@ -diff -u fire-22-old/bits.h fire-22-new/bits.h ---- fire-22-old/bits.h 2013-03-23 13:43:08.000000000 +0000 -+++ fire-22-new/bits.h 2013-03-23 16:32:14.000000000 +0000 -@@ -23,7 +23,47 @@ - along with this program. If not, see http://www.gnu.org/licenses/. - */ - --#if defined(_WIN64) -+ -+ -+#if defined(__GNUC__) -+ -+#include -+#include -+ -+#define INLINE inline -+ -+static INLINE int BSR (uint64 w) -+ { -+ int64_t ret = sizeof(uint64) * CHAR_BIT - 1; -+ -+ return w ? ret - __builtin_clzll(w) : ret; -+ } -+ -+static INLINE int BSF (uint64 w) -+ { -+ return __builtin_ffsll(w) - 1; -+ } -+ -+ -+#if defined(HasPopCNT) -+static INLINE int POPCNT (uint64 w) -+ { -+ return __builtin_popcountll(w); -+ } -+ -+#else -+ -+static INLINE int POPCNT (uint64 w) -+{ -+ w = w - ((w >> 1) & 0x5555555555555555ull); -+ w = (w & 0x3333333333333333ull) + ((w >> 2) & 0x3333333333333333ull); -+ w = (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0full; -+ return(w * 0x0101010101010101ull) >> 56; -+} -+ -+#endif -+ -+#elif defined(_WIN64) - static INLINE int BSR (uint64 w) - { - uint64 x; -@@ -89,42 +129,5 @@ - return((u * 0x01010101) >> 24) +((v * 0x01010101) >> 24); - } - --#endif -- --#if defined(__GNUC__) -- --#include --#include -- --static INLINE int BSR (uint64 w) -- { -- int64_t ret = sizeof(uint64) * CHAR_BIT - 1; -- -- return w ? ret - __builtin_clzll(w) : ret; -- } -- --static INLINE int BSF (uint64 w) -- { -- return __builtin_ffsll(w) - 1; -- } -- -- --#if defined(HasPopCNT) --static INLINE int POPCNT (uint64 w) -- { -- return __builtin_popcountll(w); -- } -- --#else -- --static INLINE int POPCNT (uint64 w) --{ -- w = w - ((w >> 1) & 0x5555555555555555ull); -- w = (w & 0x3333333333333333ull) + ((w >> 2) & 0x3333333333333333ull); -- w = (w + (w >> 4)) & 0x0f0f0f0f0f0f0f0full; -- return(w * 0x0101010101010101ull) >> 56; --} -- --#endif - - #endif -\ No newline at end of file -diff -u fire-22-old/control.h fire-22-new/control.h ---- fire-22-old/control.h 2013-03-23 12:59:50.000000000 +0000 -+++ fire-22-new/control.h 2013-03-23 17:19:44.000000000 +0000 -@@ -23,7 +23,7 @@ - along with this program. If not, see http://www.gnu.org/licenses/. - */ - --#ifdef WINDOWS -+#if defined(_WIN32) || defined(_WIN64) - #include - #include - #endif -Only in fire-22-old: fire.c -diff -u fire-22-old/fire.h fire-22-new/fire.h ---- fire-22-old/fire.h 2013-03-23 13:32:42.000000000 +0000 -+++ fire-22-new/fire.h 2013-03-23 16:50:34.000000000 +0000 -@@ -30,20 +30,26 @@ - - #define Engine "Fire" - #define Vers "2.2 xTreme" --#if defined(__GNUC__) && !defined(__MINGW32__) && !defined(__MINGW64__) -+#if defined(__GNUC__) - #define STDIN_FileNO 0 - - #if defined(__i386__) --#define Platform "Linux 32" -+#define PLatform "Linux 32" - #else --#define Platform "Linux 64" -+#define PLatform "Linux 64" - #endif - - #elif defined(_WIN64) --#define Platform "x64" -+#define PLatform "x64" -+#if defined(__GNUC__) -+#define INLINE inline -+#endif - - #else --#define Platform "w32" -+#define PLatform "w32" -+#if defined(__GNUC__) -+#define INLINE inline -+#endif - #endif - - #define true 1 -@@ -173,7 +179,7 @@ - int OptMaxThreads; - int RandRange; - --#if defined(_WIN32) || defined(_WIN64) -+#if defined(_WIN32) && !defined(__GNUC__) || defined(_WIN64) && !defined(__GNUC__) - int (*POPCNT)(uint64); - #endif - -diff -u fire-22-old/init.c fire-22-new/init.c ---- fire-22-old/init.c 2013-03-23 13:19:58.000000000 +0000 -+++ fire-22-new/init.c 2013-03-23 17:13:02.000000000 +0000 -@@ -28,12 +28,18 @@ - - #if defined(__GNUC__) && !defined(__MINGW32__) && !defined(__MINGW64__) - --#include -- --static int GetTickCount() { -- struct timeval t; -- gettimeofday(&t, NULL); -- return t.tv_sec*1000 + t.tv_usec/1000; -+#include -+ -+ -+ -+static int GetTickCount() { -+ -+ struct timeval t; -+ -+ gettimeofday(&t, NULL); -+ -+ return t.tv_sec*1000 + t.tv_usec/1000; -+ - } - #endif - -diff -u fire-22-old/init_gen.h fire-22-new/init_gen.h ---- fire-22-old/init_gen.h 2011-07-05 22:02:00.000000000 +0100 -+++ fire-22-new/init_gen.h 2013-03-23 17:21:32.000000000 +0000 -@@ -23,105 +23,105 @@ - along with this program. If not, see http://www.gnu.org/licenses/. - */ - --static uint32 CaptureValue[16][16]; --void InitCaptureValues() -- { -- CaptureValue[wEnumP][bEnumQ] = (0xd0 << 24) + (0x02 << 20); -- CaptureValue[wEnumN][bEnumQ] = (0xcf << 24) + (0x02 << 20); -- CaptureValue[wEnumBL][bEnumQ] = (0xce << 24) + (0x02 << 20); -- CaptureValue[wEnumBD][bEnumQ] = (0xce << 24) + (0x02 << 20); -- CaptureValue[wEnumR][bEnumQ] = (0xcd << 24) + (0x02 << 20); -- CaptureValue[wEnumQ][bEnumQ] = (0xcc << 24) + (0x01 << 20); -- CaptureValue[wEnumP][bEnumR] = (0xc8 << 24) + (0x02 << 20); -- CaptureValue[wEnumN][bEnumR] = (0xc7 << 24) + (0x02 << 20); -- CaptureValue[wEnumBL][bEnumR] = (0xc6 << 24) + (0x02 << 20); -- CaptureValue[wEnumBD][bEnumR] = (0xc6 << 24) + (0x02 << 20); -- CaptureValue[wEnumR][bEnumR] = (0xc5 << 24) + (0x01 << 20); -- CaptureValue[wEnumQ][bEnumR] = (0xc4 << 24) + (0x00 << 20); -- CaptureValue[wEnumP][bEnumBL] = (0xc0 << 24) + (0x02 << 20); -- CaptureValue[wEnumN][bEnumBL] = (0xbf << 24) + (0x01 << 20); -- CaptureValue[wEnumBL][bEnumBL] = (0xbe << 24) + (0x01 << 20); -- CaptureValue[wEnumBD][bEnumBL] = (0xbe << 24) + (0x01 << 20); -- CaptureValue[wEnumR][bEnumBL] = (0xbd << 24) + (0x00 << 20); -- CaptureValue[wEnumQ][bEnumBL] = (0xbc << 24) + (0x00 << 20); -- CaptureValue[wEnumP][bEnumBD] = (0xc0 << 24) + (0x02 << 20); -- CaptureValue[wEnumN][bEnumBD] = (0xbf << 24) + (0x01 << 20); -- CaptureValue[wEnumBL][bEnumBD] = (0xbe << 24) + (0x01 << 20); -- CaptureValue[wEnumBD][bEnumBD] = (0xbe << 24) + (0x01 << 20); -- CaptureValue[wEnumR][bEnumBD] = (0xbd << 24) + (0x00 << 20); -- CaptureValue[wEnumQ][bEnumBD] = (0xbc << 24) + (0x00 << 20); -- CaptureValue[wEnumP][bEnumN] = (0xb8 << 24) + (0x02 << 20); -- CaptureValue[wEnumN][bEnumN] = (0xb7 << 24) + (0x01 << 20); -- CaptureValue[wEnumBL][bEnumN] = (0xb6 << 24) + (0x01 << 20); -- CaptureValue[wEnumBD][bEnumN] = (0xb6 << 24) + (0x01 << 20); -- CaptureValue[wEnumR][bEnumN] = (0xb5 << 24) + (0x00 << 20); -- CaptureValue[wEnumQ][bEnumN] = (0xb4 << 24) + (0x00 << 20); -- CaptureValue[wEnumP][bEnumP] = (0xb0 << 24) + (0x01 << 20); -- CaptureValue[wEnumN][bEnumP] = (0xaf << 24) + (0x00 << 20); -- CaptureValue[wEnumBL][bEnumP] = (0xae << 24) + (0x00 << 20); -- CaptureValue[wEnumBD][bEnumP] = (0xae << 24) + (0x00 << 20); -- CaptureValue[wEnumR][bEnumP] = (0xad << 24) + (0x00 << 20); -- CaptureValue[wEnumQ][bEnumP] = (0xac << 24) + (0x00 << 20); -- CaptureValue[wEnumK][bEnumQ] = (0xcb << 24) + (0x03 << 20); -- CaptureValue[wEnumK][bEnumR] = (0xc3 << 24) + (0x03 << 20); -- CaptureValue[wEnumK][bEnumBL] = (0xbb << 24) + (0x03 << 20); -- CaptureValue[wEnumK][bEnumBD] = (0xbb << 24) + (0x03 << 20); -- CaptureValue[wEnumK][bEnumN] = (0xb3 << 24) + (0x03 << 20); -- CaptureValue[wEnumK][bEnumP] = (0xab << 24) + (0x03 << 20); -- CaptureValue[wEnumK][0] = (0x07 << 24) + (0x00 << 15); -- CaptureValue[wEnumP][0] = (0x06 << 24) + (0x01 << 15); -- CaptureValue[wEnumN][0] = (0x05 << 24) + (0x01 << 15); -- CaptureValue[wEnumBL][0] = (0x04 << 24) + (0x01 << 15); -- CaptureValue[wEnumBD][0] = (0x04 << 24) + (0x01 << 15); -- CaptureValue[wEnumR][0] = (0x03 << 24) + (0x01 << 15); -- CaptureValue[wEnumQ][0] = (0x02 << 24) + (0x01 << 15); -- CaptureValue[bEnumP][wEnumQ] = (0xd0 << 24) + (0x02 << 20); -- CaptureValue[bEnumN][wEnumQ] = (0xcf << 24) + (0x02 << 20); -- CaptureValue[bEnumBL][wEnumQ] = (0xce << 24) + (0x02 << 20); -- CaptureValue[bEnumBD][wEnumQ] = (0xce << 24) + (0x02 << 20); -- CaptureValue[bEnumR][wEnumQ] = (0xcd << 24) + (0x02 << 20); -- CaptureValue[bEnumQ][wEnumQ] = (0xcc << 24) + (0x01 << 20); -- CaptureValue[bEnumP][wEnumR] = (0xc8 << 24) + (0x02 << 20); -- CaptureValue[bEnumN][wEnumR] = (0xc7 << 24) + (0x02 << 20); -- CaptureValue[bEnumBL][wEnumR] = (0xc6 << 24) + (0x02 << 20); -- CaptureValue[bEnumBD][wEnumR] = (0xc6 << 24) + (0x02 << 20); -- CaptureValue[bEnumR][wEnumR] = (0xc5 << 24) + (0x01 << 20); -- CaptureValue[bEnumQ][wEnumR] = (0xc4 << 24) + (0x00 << 20); -- CaptureValue[bEnumP][wEnumBL] = (0xc0 << 24) + (0x02 << 20); -- CaptureValue[bEnumN][wEnumBL] = (0xbf << 24) + (0x01 << 20); -- CaptureValue[bEnumBL][wEnumBL] = (0xbe << 24) + (0x01 << 20); -- CaptureValue[bEnumBD][wEnumBL] = (0xbe << 24) + (0x01 << 20); -- CaptureValue[bEnumR][wEnumBL] = (0xbd << 24) + (0x00 << 20); -- CaptureValue[bEnumQ][wEnumBL] = (0xbc << 24) + (0x00 << 20); -- CaptureValue[bEnumP][wEnumBD] = (0xc0 << 24) + (0x02 << 20); -- CaptureValue[bEnumN][wEnumBD] = (0xbf << 24) + (0x01 << 20); -- CaptureValue[bEnumBL][wEnumBD] = (0xbe << 24) + (0x01 << 20); -- CaptureValue[bEnumBD][wEnumBD] = (0xbe << 24) + (0x01 << 20); -- CaptureValue[bEnumR][wEnumBD] = (0xbd << 24) + (0x00 << 20); -- CaptureValue[bEnumQ][wEnumBD] = (0xbc << 24) + (0x00 << 20); -- CaptureValue[bEnumP][wEnumN] = (0xb8 << 24) + (0x02 << 20); -- CaptureValue[bEnumN][wEnumN] = (0xb7 << 24) + (0x01 << 20); -- CaptureValue[bEnumBL][wEnumN] = (0xb6 << 24) + (0x01 << 20); -- CaptureValue[bEnumBD][wEnumN] = (0xb6 << 24) + (0x01 << 20); -- CaptureValue[bEnumR][wEnumN] = (0xb5 << 24) + (0x00 << 20); -- CaptureValue[bEnumQ][wEnumN] = (0xb4 << 24) + (0x00 << 20); -- CaptureValue[bEnumP][wEnumP] = (0xb0 << 24) + (0x01 << 20); -- CaptureValue[bEnumN][wEnumP] = (0xaf << 24) + (0x00 << 20); -- CaptureValue[bEnumBL][wEnumP] = (0xae << 24) + (0x00 << 20); -- CaptureValue[bEnumBD][wEnumP] = (0xae << 24) + (0x00 << 20); -- CaptureValue[bEnumR][wEnumP] = (0xad << 24) + (0x00 << 20); -- CaptureValue[bEnumQ][wEnumP] = (0xac << 24) + (0x00 << 20); -- CaptureValue[bEnumK][wEnumQ] = (0xcb << 24) + (0x03 << 20); -- CaptureValue[bEnumK][wEnumR] = (0xc3 << 24) + (0x03 << 20); -- CaptureValue[bEnumK][wEnumBL] = (0xbb << 24) + (0x03 << 20); -- CaptureValue[bEnumK][wEnumBD] = (0xbb << 24) + (0x03 << 20); -- CaptureValue[bEnumK][wEnumN] = (0xb3 << 24) + (0x03 << 20); -- CaptureValue[bEnumK][wEnumP] = (0xab << 24) + (0x03 << 20); -- CaptureValue[bEnumK][0] = (0x07 << 24) + (0x00 << 15); -- CaptureValue[bEnumP][0] = (0x06 << 24) + (0x01 << 15); -- CaptureValue[bEnumN][0] = (0x05 << 24) + (0x01 << 15); -- CaptureValue[bEnumBL][0] = (0x04 << 24) + (0x01 << 15); -- CaptureValue[bEnumBD][0] = (0x04 << 24) + (0x01 << 15); -- CaptureValue[bEnumR][0] = (0x03 << 24) + (0x01 << 15); -- CaptureValue[bEnumQ][0] = (0x02 << 24) + (0x01 << 15); -+static uint32 CaptureValue[16][16]; -+void InitCaptureValues() -+ { -+ CaptureValue[wEnumP][bEnumQ] = (0xd0 << 24) + (0x02 << 20); -+ CaptureValue[wEnumN][bEnumQ] = (0xcf << 24) + (0x02 << 20); -+ CaptureValue[wEnumBL][bEnumQ] = (0xce << 24) + (0x02 << 20); -+ CaptureValue[wEnumBD][bEnumQ] = (0xce << 24) + (0x02 << 20); -+ CaptureValue[wEnumR][bEnumQ] = (0xcd << 24) + (0x02 << 20); -+ CaptureValue[wEnumQ][bEnumQ] = (0xcc << 24) + (0x01 << 20); -+ CaptureValue[wEnumP][bEnumR] = (0xc8 << 24) + (0x02 << 20); -+ CaptureValue[wEnumN][bEnumR] = (0xc7 << 24) + (0x02 << 20); -+ CaptureValue[wEnumBL][bEnumR] = (0xc6 << 24) + (0x02 << 20); -+ CaptureValue[wEnumBD][bEnumR] = (0xc6 << 24) + (0x02 << 20); -+ CaptureValue[wEnumR][bEnumR] = (0xc5 << 24) + (0x01 << 20); -+ CaptureValue[wEnumQ][bEnumR] = (0xc4 << 24) + (0x00 << 20); -+ CaptureValue[wEnumP][bEnumBL] = (0xc0 << 24) + (0x02 << 20); -+ CaptureValue[wEnumN][bEnumBL] = (0xbf << 24) + (0x01 << 20); -+ CaptureValue[wEnumBL][bEnumBL] = (0xbe << 24) + (0x01 << 20); -+ CaptureValue[wEnumBD][bEnumBL] = (0xbe << 24) + (0x01 << 20); -+ CaptureValue[wEnumR][bEnumBL] = (0xbd << 24) + (0x00 << 20); -+ CaptureValue[wEnumQ][bEnumBL] = (0xbc << 24) + (0x00 << 20); -+ CaptureValue[wEnumP][bEnumBD] = (0xc0 << 24) + (0x02 << 20); -+ CaptureValue[wEnumN][bEnumBD] = (0xbf << 24) + (0x01 << 20); -+ CaptureValue[wEnumBL][bEnumBD] = (0xbe << 24) + (0x01 << 20); -+ CaptureValue[wEnumBD][bEnumBD] = (0xbe << 24) + (0x01 << 20); -+ CaptureValue[wEnumR][bEnumBD] = (0xbd << 24) + (0x00 << 20); -+ CaptureValue[wEnumQ][bEnumBD] = (0xbc << 24) + (0x00 << 20); -+ CaptureValue[wEnumP][bEnumN] = (0xb8 << 24) + (0x02 << 20); -+ CaptureValue[wEnumN][bEnumN] = (0xb7 << 24) + (0x01 << 20); -+ CaptureValue[wEnumBL][bEnumN] = (0xb6 << 24) + (0x01 << 20); -+ CaptureValue[wEnumBD][bEnumN] = (0xb6 << 24) + (0x01 << 20); -+ CaptureValue[wEnumR][bEnumN] = (0xb5 << 24) + (0x00 << 20); -+ CaptureValue[wEnumQ][bEnumN] = (0xb4 << 24) + (0x00 << 20); -+ CaptureValue[wEnumP][bEnumP] = (0xb0 << 24) + (0x01 << 20); -+ CaptureValue[wEnumN][bEnumP] = (0xaf << 24) + (0x00 << 20); -+ CaptureValue[wEnumBL][bEnumP] = (0xae << 24) + (0x00 << 20); -+ CaptureValue[wEnumBD][bEnumP] = (0xae << 24) + (0x00 << 20); -+ CaptureValue[wEnumR][bEnumP] = (0xad << 24) + (0x00 << 20); -+ CaptureValue[wEnumQ][bEnumP] = (0xac << 24) + (0x00 << 20); -+ CaptureValue[wEnumK][bEnumQ] = (0xcb << 24) + (0x03 << 20); -+ CaptureValue[wEnumK][bEnumR] = (0xc3 << 24) + (0x03 << 20); -+ CaptureValue[wEnumK][bEnumBL] = (0xbb << 24) + (0x03 << 20); -+ CaptureValue[wEnumK][bEnumBD] = (0xbb << 24) + (0x03 << 20); -+ CaptureValue[wEnumK][bEnumN] = (0xb3 << 24) + (0x03 << 20); -+ CaptureValue[wEnumK][bEnumP] = (0xab << 24) + (0x03 << 20); -+ CaptureValue[wEnumK][0] = (0x07 << 24) + (0x00 << 15); -+ CaptureValue[wEnumP][0] = (0x06 << 24) + (0x01 << 15); -+ CaptureValue[wEnumN][0] = (0x05 << 24) + (0x01 << 15); -+ CaptureValue[wEnumBL][0] = (0x04 << 24) + (0x01 << 15); -+ CaptureValue[wEnumBD][0] = (0x04 << 24) + (0x01 << 15); -+ CaptureValue[wEnumR][0] = (0x03 << 24) + (0x01 << 15); -+ CaptureValue[wEnumQ][0] = (0x02 << 24) + (0x01 << 15); -+ CaptureValue[bEnumP][wEnumQ] = (0xd0 << 24) + (0x02 << 20); -+ CaptureValue[bEnumN][wEnumQ] = (0xcf << 24) + (0x02 << 20); -+ CaptureValue[bEnumBL][wEnumQ] = (0xce << 24) + (0x02 << 20); -+ CaptureValue[bEnumBD][wEnumQ] = (0xce << 24) + (0x02 << 20); -+ CaptureValue[bEnumR][wEnumQ] = (0xcd << 24) + (0x02 << 20); -+ CaptureValue[bEnumQ][wEnumQ] = (0xcc << 24) + (0x01 << 20); -+ CaptureValue[bEnumP][wEnumR] = (0xc8 << 24) + (0x02 << 20); -+ CaptureValue[bEnumN][wEnumR] = (0xc7 << 24) + (0x02 << 20); -+ CaptureValue[bEnumBL][wEnumR] = (0xc6 << 24) + (0x02 << 20); -+ CaptureValue[bEnumBD][wEnumR] = (0xc6 << 24) + (0x02 << 20); -+ CaptureValue[bEnumR][wEnumR] = (0xc5 << 24) + (0x01 << 20); -+ CaptureValue[bEnumQ][wEnumR] = (0xc4 << 24) + (0x00 << 20); -+ CaptureValue[bEnumP][wEnumBL] = (0xc0 << 24) + (0x02 << 20); -+ CaptureValue[bEnumN][wEnumBL] = (0xbf << 24) + (0x01 << 20); -+ CaptureValue[bEnumBL][wEnumBL] = (0xbe << 24) + (0x01 << 20); -+ CaptureValue[bEnumBD][wEnumBL] = (0xbe << 24) + (0x01 << 20); -+ CaptureValue[bEnumR][wEnumBL] = (0xbd << 24) + (0x00 << 20); -+ CaptureValue[bEnumQ][wEnumBL] = (0xbc << 24) + (0x00 << 20); -+ CaptureValue[bEnumP][wEnumBD] = (0xc0 << 24) + (0x02 << 20); -+ CaptureValue[bEnumN][wEnumBD] = (0xbf << 24) + (0x01 << 20); -+ CaptureValue[bEnumBL][wEnumBD] = (0xbe << 24) + (0x01 << 20); -+ CaptureValue[bEnumBD][wEnumBD] = (0xbe << 24) + (0x01 << 20); -+ CaptureValue[bEnumR][wEnumBD] = (0xbd << 24) + (0x00 << 20); -+ CaptureValue[bEnumQ][wEnumBD] = (0xbc << 24) + (0x00 << 20); -+ CaptureValue[bEnumP][wEnumN] = (0xb8 << 24) + (0x02 << 20); -+ CaptureValue[bEnumN][wEnumN] = (0xb7 << 24) + (0x01 << 20); -+ CaptureValue[bEnumBL][wEnumN] = (0xb6 << 24) + (0x01 << 20); -+ CaptureValue[bEnumBD][wEnumN] = (0xb6 << 24) + (0x01 << 20); -+ CaptureValue[bEnumR][wEnumN] = (0xb5 << 24) + (0x00 << 20); -+ CaptureValue[bEnumQ][wEnumN] = (0xb4 << 24) + (0x00 << 20); -+ CaptureValue[bEnumP][wEnumP] = (0xb0 << 24) + (0x01 << 20); -+ CaptureValue[bEnumN][wEnumP] = (0xaf << 24) + (0x00 << 20); -+ CaptureValue[bEnumBL][wEnumP] = (0xae << 24) + (0x00 << 20); -+ CaptureValue[bEnumBD][wEnumP] = (0xae << 24) + (0x00 << 20); -+ CaptureValue[bEnumR][wEnumP] = (0xad << 24) + (0x00 << 20); -+ CaptureValue[bEnumQ][wEnumP] = (0xac << 24) + (0x00 << 20); -+ CaptureValue[bEnumK][wEnumQ] = (0xcb << 24) + (0x03 << 20); -+ CaptureValue[bEnumK][wEnumR] = (0xc3 << 24) + (0x03 << 20); -+ CaptureValue[bEnumK][wEnumBL] = (0xbb << 24) + (0x03 << 20); -+ CaptureValue[bEnumK][wEnumBD] = (0xbb << 24) + (0x03 << 20); -+ CaptureValue[bEnumK][wEnumN] = (0xb3 << 24) + (0x03 << 20); -+ CaptureValue[bEnumK][wEnumP] = (0xab << 24) + (0x03 << 20); -+ CaptureValue[bEnumK][0] = (0x07 << 24) + (0x00 << 15); -+ CaptureValue[bEnumP][0] = (0x06 << 24) + (0x01 << 15); -+ CaptureValue[bEnumN][0] = (0x05 << 24) + (0x01 << 15); -+ CaptureValue[bEnumBL][0] = (0x04 << 24) + (0x01 << 15); -+ CaptureValue[bEnumBD][0] = (0x04 << 24) + (0x01 << 15); -+ CaptureValue[bEnumR][0] = (0x03 << 24) + (0x01 << 15); -+ CaptureValue[bEnumQ][0] = (0x02 << 24) + (0x01 << 15); - } -\ No newline at end of file -diff -u fire-22-old/input.c fire-22-new/input.c ---- fire-22-old/input.c 2013-03-23 12:22:16.000000000 +0000 -+++ fire-22-new/input.c 2013-03-23 17:13:02.000000000 +0000 -@@ -200,14 +200,14 @@ - { - "spin", "check", "button", "string", "combo" - }; -- Send("id name %s %s %s\n", Engine, Vers, Platform); -+ Send("id name %s %s %s\n", Engine, Vers, PLatform); - Send("id author Kranium\n"); - - #ifdef Log - if (WriteLog) - { - log_file = fopen(log_filename, "a"); -- fprintf(log_file, "id name %s %s %s\n", Engine, Vers, Platform); -+ fprintf(log_file, "id name %s %s %s\n", Engine, Vers, PLatform); - fprintf(log_file, "id author Kranium\n"); - close_log(); - } -@@ -668,7 +668,7 @@ - SuppressInput = false; - } - --#ifdef WINDOWS -+#if defined(_WIN32) || defined(_WIN64) - #include - #include - void Input(typePos *Position) -Only in fire-22-new: Logfile001.log -diff -u fire-22-old/main.c fire-22-new/main.c ---- fire-22-old/main.c 2013-03-23 13:59:58.000000000 +0000 -+++ fire-22-new/main.c 2013-03-23 16:11:28.000000000 +0000 -@@ -231,7 +231,7 @@ - } - #endif - --#undef LinuxLargePages -+ - #ifdef LinuxLargePages - LinuxHandleSignals(); - #endif -diff -u fire-22-old/Makefile fire-22-new/Makefile ---- fire-22-old/Makefile 2013-03-23 14:04:00.000000000 +0000 -+++ fire-22-new/Makefile 2013-03-23 18:48:26.000000000 +0000 -@@ -4,6 +4,7 @@ - - LIBS = -lpthread - -+ - default: fire - - OFILES = main.o \ -@@ -73,19 +74,18 @@ - rm -f *.o fire - - .c.o: main.c -- gcc -c -g $*.c -Wall -w -pipe -s -std=c99 -DNDEBUG -Ofast -static \ -- -flto -fwhole-program -finline-functions -fprefetch-loop-arrays \ -- -Wfatal-errors -DHasPreFetch -DRobboBases -mtune=native \ -- -+ gcc -c -g $*.c -Wall -w -pipe -s -std=c99 -DNDEBUG -DHAVE_STRUCT_TIMESPEC -Ofast -static \ -+ -flto -fwhole-program -finline-functions -fprefetch-loop-arrays \ -+ -Wfatal-errors -mtune=native -DHasPreFetch -DRobboBases \ -+ -+ - - # for popcount (AMD) = -march=amdfam10 -mtune=amdfam10 -mpopcnt -DHasPopCNT - # for popcount (INTEL) = -msse4.2 -march=corei7 -mtune=corei7 -mpopcnt -DHasPopCNT - --# for RobboBase support = -DRobboBases -- --# for Windows builds (otherwise Linux) = -DWINDOWS -+# for RobboBase support = -DRobboBases - --# for SSE cpus (and above) = -DHasPreFetch -+# for SSE cpus (and above) = -DHasPreFetch -msse - - - -diff -u fire-22-old/make_move.c fire-22-new/make_move.c ---- fire-22-old/make_move.c 2011-07-05 22:20:06.000000000 +0100 -+++ fire-22-new/make_move.c 2013-03-23 16:18:04.000000000 +0000 -@@ -27,6 +27,11 @@ - #include "make_unmake.h" - #include "material_value.h" - -+#if defined(__GNUC__) -+#define INLINE inline -+#endif -+ -+ - #define RevCastle(Pos) (Pos)->Dyn->reversible = 0 - - typedef enum -diff -u fire-22-old/mem_handler.c fire-22-new/mem_handler.c ---- fire-22-old/mem_handler.c 2013-03-23 13:47:50.000000000 +0000 -+++ fire-22-new/mem_handler.c 2013-03-23 17:14:58.000000000 +0000 -@@ -25,7 +25,7 @@ - - #include "fire.h" - --#undef LinuxLargePages -+ - - #if defined(LinuxLargePages) - #include -diff -u fire-22-old/null_move.h fire-22-new/null_move.h ---- fire-22-old/null_move.h 2011-07-05 22:20:06.000000000 +0100 -+++ fire-22-new/null_move.h 2013-03-23 16:13:46.000000000 +0000 -@@ -23,6 +23,11 @@ - along with this program. If not, see http://www.gnu.org/licenses/. - */ - -+#if defined(__GNUC__) -+#define INLINE inline -+#endif -+ -+ - static INLINE void MakeNull(typePos *Position) - { - Position->nodes++; -diff -u fire-22-old/robbo_init_IO.c fire-22-new/robbo_init_IO.c ---- fire-22-old/robbo_init_IO.c 2013-03-23 12:30:28.000000000 +0000 -+++ fire-22-new/robbo_init_IO.c 2013-03-23 17:14:56.000000000 +0000 -@@ -852,7 +852,7 @@ - return true; - } - --#ifdef WINDOWS -+#if defined(_WIN32) || defined(_WIN64) - #include - #include - int Stat(char *filename) -@@ -1041,7 +1041,7 @@ - fclose(F); - return true; - } --#ifdef WINDOWS -+#if defined(_WIN32) || defined(_WIN64) - void GetTotalBase(char *A) - { - char B[1024]; -diff -u fire-22-old/robbo_triple_init.c fire-22-new/robbo_triple_init.c ---- fire-22-old/robbo_triple_init.c 2013-03-23 12:31:26.000000000 +0000 -+++ fire-22-new/robbo_triple_init.c 2013-03-23 17:16:50.000000000 +0000 -@@ -23,6 +23,13 @@ - along with this program. If not, see http://www.gnu.org/licenses/. - */ - -+#if defined(__GNUC__) -+#include -+#include -+#include -+#include -+#endif -+ - #include "fire.h" - #ifdef RobboBases - #include "robbo_totalbase.h" -@@ -269,7 +276,7 @@ - triple = TableTripleBases + NumTripleBases; - TripleUtility(triple, Temp); - strcpy(triple->DirNome, DIR); --#ifndef WINDOWS -+#if !defined(_WIN32) && !defined(_WIN64) - strcat(triple->DirNome, "/"); - #else - strcat(triple->DirNome, "\\"); -@@ -516,7 +523,7 @@ - - } - --#ifndef WINDOWS -+#if !defined(_WIN32) && !defined(_WIN64) - void ReFactorDirectoryNaming(char *S) - { - char T[1024]; -@@ -813,7 +820,7 @@ - TripleUtility(triple, NOME); - strcpy(triple->DirNome, DIR); - --#ifndef WINDOWS -+#if !defined(_WIN32) && !defined(_WIN64) - strcat(triple->DirNome, "/"); - #else - strcat(triple->DirNome, "\\"); -@@ -900,7 +907,7 @@ - return true; - } - --#ifdef WINDOWS -+#if defined(_WIN32) || defined(_WIN64) - void GetTripleBase(char *A) - { - char B[1024]; -@@ -953,10 +960,7 @@ - TripleEmit(); - } - #else --#include --#include --#include --#include -+ - void GetTripleBase(char *A) - { - DIR *DIR; -diff -u fire-22-old/signals.c fire-22-new/signals.c ---- fire-22-old/signals.c 2013-03-23 13:58:02.000000000 +0000 -+++ fire-22-new/signals.c 2013-03-23 17:17:36.000000000 +0000 -@@ -25,8 +25,6 @@ - - #include "fire.h" - --#undef LinuxLargePages -- - #if defined(LinuxLargePages) - #include - static MutexType DeletionLock[1]; -diff -u fire-22-old/SMP.c fire-22-new/SMP.c ---- fire-22-old/SMP.c 2013-03-23 12:34:08.000000000 +0000 -+++ fire-22-new/SMP.c 2013-03-23 17:17:56.000000000 +0000 -@@ -23,6 +23,8 @@ - along with this program. If not, see http://www.gnu.org/licenses/. - */ - -+ -+ - #include "fire.h" - #define DoLocked(x) { Lock (SMP); (x); UnLock (SMP); } - #define MaxSplit 8 -@@ -116,6 +118,12 @@ - UnLock(Position->parent->padlock); - UnLock(SMP); - } -+ -+#if defined(__GNUC__) -+#define INLINE inline -+#endif -+ -+ - static INLINE void SMPBadHistory(typePos *Position, uint32 m, SplitPoint *sp) - { - if ((Position->Dyn + 1)->cp == 0 && MoveHistory(m)) -@@ -204,7 +212,7 @@ - { - if (Die[cpu]) - return; --#ifdef WINDOWS -+#if defined(_WIN32) || defined(_WIN64) - WaitForLock(PThreadCondWait[cpu], PThreadCondMutex[cpu]); - #else - Lock(&PThreadCondMutex[cpu]); -diff -u fire-22-old/SMP_init.c fire-22-new/SMP_init.c ---- fire-22-old/SMP_init.c 2013-03-23 12:34:20.000000000 +0000 -+++ fire-22-new/SMP_init.c 2013-03-23 17:18:44.000000000 +0000 -@@ -29,8 +29,9 @@ - - void NanoSleep(int x) - { --#ifdef WINDOWS -+#if defined(_WIN32) || defined(_WIN64) - Sleep(x / 1000000); -+ - #else - struct timespec TS[1]; - TS->tv_sec = 0; -@@ -131,7 +132,7 @@ - int cpu; - for (cpu = 0; cpu < CurrCPUS; cpu++) - { --#ifndef WINDOWS -+#if !defined(_WIN32) && !defined(_WIN64) - LockDestroy(&PThreadCondMutex[cpu]); - #endif - if (cpu > 0) -@@ -141,7 +142,7 @@ - PThreadJoin(PThread[cpu]); - Die[cpu] = false; - } --#ifndef WINDOWS -+#if !defined(_WIN32) && !defined(_WIN64) - LockInit(&PThreadCondMutex[cpu]); - #endif - } -@@ -151,7 +152,7 @@ - while (!Destroyed) { } - { - } --#ifndef WINDOWS -+#if !defined(_WIN32) && !defined(_WIN64) - LockDestroy(Wakeup_Lock_IO); - #endif - Destroyed = false; -diff -u fire-22-old/SMP_search.c fire-22-new/SMP_search.c ---- fire-22-old/SMP_search.c 2013-03-23 12:34:34.000000000 +0000 -+++ fire-22-new/SMP_search.c 2013-03-23 16:25:14.000000000 +0000 -@@ -26,6 +26,12 @@ - #ifndef SMPSearch - #define SMPSearch - #include "fire.h" -+ -+#if defined(__GNUC__) -+#define INLINE inline -+#endif -+ -+ - static INLINE void SMPBadHistory(typePos *Pos, uint32 m, SplitPoint *sp) - { - if ((Pos->Dyn + 1)->cp == 0 && MoveHistory(m)) -diff -u fire-22-old/unmake_move.c fire-22-new/unmake_move.c ---- fire-22-old/unmake_move.c 2011-07-05 22:20:04.000000000 +0100 -+++ fire-22-new/unmake_move.c 2013-03-23 16:26:10.000000000 +0000 -@@ -26,6 +26,10 @@ - #include "fire.h" - #include "make_unmake.h" - -+#if defined(__GNUC__) -+#define INLINE inline -+#endif -+ - static INLINE void UnMakeWhiteOO(typePos *Position, int to) - { - if (to == G1) -diff -u fire-22-old/utility.c fire-22-new/utility.c ---- fire-22-old/utility.c 2013-03-23 13:22:10.000000000 +0000 -+++ fire-22-new/utility.c 2013-03-23 17:08:58.000000000 +0000 -@@ -25,12 +25,17 @@ - - #include "fire.h" - #include "material_value.h" --#if defined(_WIN32) || defined(_WIN64) --#include --#else -+ -+#if defined(__GNUC__) - #include -+#if !defined(_WIN32) && !defined(_WIN64) - #include -+#else -+#include -+#endif - #define FD_Zero FD_ZERO -+#else -+#include - #endif - - #define Tweak (0x74d3c012a8bf965e) -@@ -183,7 +188,7 @@ - BoardIsOk = false; - BoardIsOk = true; - } --#ifdef WINDOWS -+#if defined(_WIN32) || defined(_WIN64) - #include - bool TryInput() - { -@@ -345,7 +350,7 @@ - } - void ShowBanner() - { -- char *startup_banner = "" Engine " " Vers " " Platform "\n" -+ char *startup_banner = "" Engine " " Vers " " PLatform "\n" - "by Kranium, based on Ippolit\n" - "compiled by NS\n" - "" __DATE__ " " __TIME__ "\n\n"; -@@ -448,7 +453,7 @@ - void SetPOPCNT() - { - --#if defined(_WIN32) || defined(_WIN64) -+#if defined(_WIN32) && !defined(__GNUC__) || defined(_WIN64) && !defined(__GNUC__) - int CPUInfo[4] = {-1}; - __cpuid(CPUInfo, 0x00000001); - HasPopcnt = (CPUInfo[2] >> 23) & 1; -@@ -482,7 +487,7 @@ - time(&now); - tnow = *localtime(&now); - strftime(buf, 32, "%d%b-%H%M", &tnow); -- sprintf(log_filename, "%s %s %s %s.txt", Engine, Vers, Platform, buf); -+ sprintf(log_filename, "%s %s %s %s.txt", Engine, Vers, PLatform, buf); - log_file = fopen(log_filename, "wt"); - close_log(); - return false; -diff -u fire-22-old/win32bits.h fire-22-new/win32bits.h ---- fire-22-old/win32bits.h 2013-03-23 12:11:26.000000000 +0000 -+++ fire-22-new/win32bits.h 2013-03-23 16:29:14.000000000 +0000 -@@ -22,11 +22,12 @@ - You should have received a copy of the GNU General Public License - along with this program. If not, see http://www.gnu.org/licenses/. - */ -- --#if defined(_WIN32) -+#if defined(_WIN32) && defined(_MSC_VER) - - static int BSF(UINT64 x) - { -+ -+ - { - _asm - { -@@ -82,4 +83,8 @@ - return ((v1 * 0x01010101) >> 24) + ((v2 * 0x01010101) >> 24); - } - -+#else -+ -+#include "bits.h" -+ - #endif -diff -u fire-22-old/win64bits.h fire-22-new/win64bits.h ---- fire-22-old/win64bits.h 2013-03-23 12:11:56.000000000 +0000 -+++ fire-22-new/win64bits.h 2013-03-23 18:26:30.000000000 +0000 -@@ -23,7 +23,12 @@ - along with this program. If not, see http://www.gnu.org/licenses/. - */ - --#if defined(_WIN64) -+#if defined(__GNUC__) -+ -+#include "bits.h" -+ -+#elif defined(_WIN64) && defined(_MSC_VER) -+ - static INLINE int BSF(UINT64 x) - { - int r; -@@ -36,22 +41,8 @@ - _BitScanReverse64(&r, x); - return r; - } --#else --static int BSF(UINT64 x) -- { -- _asm -- { -- bsf rax, x -- } -- } --static int BSR(UINT64 x) -- { -- _asm -- { -- bsr rax, x -- } -- } --#endif -+ -+ - static INLINE int PopcntHard (UINT64 x) - { - _asm -@@ -67,4 +58,7 @@ - return (w * 0x0101010101010101ull) >> 56; - } - --#endif -\ No newline at end of file -+#endif -+ -+ -+ -diff -u fire-22-old/win-linux.h fire-22-new/win-linux.h ---- fire-22-old/win-linux.h 2013-03-23 12:14:04.000000000 +0000 -+++ fire-22-new/win-linux.h 2013-03-23 18:24:14.000000000 +0000 -@@ -23,7 +23,7 @@ - along with this program. If not, see http://www.gnu.org/licenses/. - */ - --#ifdef WINDOWS -+#if defined(_WIN32) || defined(_WIN64) - #include - #define NomeWindows - -@@ -120,5 +120,5 @@ - #define IvanThread(A) void* SMPThread (void* A) - #define IOThread(A) void* io_thread (void* A) - #define VoidStarType void* --#define LinuxLargePages true -+//#define LinuxLargePages false - #endif -\ No newline at end of file