Full Code of fohristiwhirl/nibbler for AI

master fb29b0467172 cached
60 files
883.4 KB
288.8k tokens
122 symbols
1 requests
Download .txt
Showing preview only (945K chars total). Download the full file or copy to clipboard to get everything.
Repository: fohristiwhirl/nibbler
Branch: master
Commit: fb29b0467172
Files: 60
Total size: 883.4 KB

Directory structure:
gitextract_lqka34fb/

├── LICENSE.md
├── README.md
└── files/
    ├── .editorconfig
    ├── .gitignore
    ├── misc/
    │   ├── chess960.txt
    │   ├── escape_and_missing_quotes.pgn
    │   ├── nibbler_menu_translations_template.json
    │   ├── pathological.pgn
    │   ├── pgn.txt
    │   ├── scraps.js
    │   ├── state_logic.txt
    │   └── uci.txt
    ├── res/
    │   └── linux/
    │       └── nibbler.desktop
    ├── scripts/
    │   ├── builder.py
    │   ├── install.sh
    │   └── install_mac.sh
    └── src/
        ├── main.js
        ├── modules/
        │   ├── alert_main.js
        │   ├── background.js
        │   ├── config_io.js
        │   ├── custom_uci.js
        │   ├── debork_json.js
        │   ├── empty.js
        │   ├── engineconfig_io.js
        │   ├── images.js
        │   ├── messages.js
        │   ├── running_as_electron.js
        │   ├── stringify.js
        │   ├── translate.js
        │   └── translations.js
        ├── nibbler.css
        ├── nibbler.html
        ├── package.json
        └── renderer/
            ├── 10_globals.js
            ├── 20_utils.js
            ├── 30_point.js
            ├── 31_sliders.js
            ├── 40_position.js
            ├── 41_fen.js
            ├── 42_perft.js
            ├── 43_chess960.js
            ├── 50_table.js
            ├── 51_node.js
            ├── 52_sorted_moves.js
            ├── 55_winrate_graph.js
            ├── 60_pgn_utils.js
            ├── 61_pgn_parse.js
            ├── 63_polyglot.js
            ├── 65_loaders.js
            ├── 71_tree_handler.js
            ├── 72_tree_draw.js
            ├── 75_looker.js
            ├── 80_info.js
            ├── 81_arrows.js
            ├── 82_infobox.js
            ├── 83_statusbox.js
            ├── 90_engine.js
            ├── 95_hub.js
            ├── 97_drag.js
            └── 99_start.js

================================================
FILE CONTENTS
================================================

================================================
FILE: LICENSE.md
================================================
### GNU GENERAL PUBLIC LICENSE

Version 3, 29 June 2007

Copyright (C) 2007 Free Software Foundation, Inc.
<https://fsf.org/>

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.

        <one line to give the program's name and a brief idea of what it does.>
        Copyright (C) <year>  <name of author>

        This program is free software: you can redistribute it and/or modify
        it under the terms of the GNU General Public License as published by
        the Free Software Foundation, either version 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 <https://www.gnu.org/licenses/>.

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:

        <program>  Copyright (C) <year>  <name of author>
        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 <https://www.gnu.org/licenses/>.

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 <https://www.gnu.org/licenses/why-not-lgpl.html>.


================================================
FILE: README.md
================================================
# Nibbler

Nibbler is a real-time analysis GUI for [Leela Chess Zero](http://lczero.org/play/quickstart/) (Lc0), which runs Leela in the background and constantly displays opinions about the current position. You can also compel the engine to evaluate one or more specific moves. Nibbler is loosely inspired by [Lizzie](https://github.com/featurecat/lizzie) and [Sabaki](https://github.com/SabakiHQ/Sabaki).

These days, Nibbler more-or-less works with traditional engines like [Stockfish](https://stockfishchess.org/), too. (Ensure `MultiPV` is `1`, `Threads` (CPU) is set, and `Hash` is set (more is better), for maximum strength.)

For prebuilt binary releases, see the [Releases](https://github.com/rooklift/nibbler/releases) section. For help, the [Discord](https://discordapp.com/invite/pKujYxD) may be your best bet, or open an issue here.

![Screenshot](https://user-images.githubusercontent.com/16438795/270297798-a432ea17-3601-4143-bddb-97420a0d6e6c.png)

## Features

* Display Leela's top choices graphically.
* Winrate graph.
* Optionally shows Leela statistics like N, P, Q, S, U, V, and WDL for each move.
* UCI `searchmoves` functionality.
* Automatic full-game analysis.
* Play against Leela from any position.
* Leela self-play from any position.
* PGN loading via menu, clipboard, or drag-and-drop.
* Supports PGN variations of arbitrary depth.
* FEN loading.
* Chess 960.

## Installation - Windows / Linux

Some Windows and Linux standalone releases are uploaded to the [Releases](https://github.com/rooklift/nibbler/releases) section from time to time.

*Alternatively*, it is possible to run Nibbler from source. This requires Electron, but has no other dependencies. If you have Electron installed (e.g. `npm install -g electron`) you can likely enter the `/src` directory, then do `electron .` to run it. Nibbler should be compatible with at least version 5 and above.

You could also build a standalone app. See comments inside the Python script `builder.py` for info.

## Linux install script

Linux users can make use of the following *one-liner* to install the latest version of Nibbler:

```bash
curl -L https://raw.githubusercontent.com/rooklift/nibbler/master/files/scripts/install.sh | bash
```

## Installation - Mac

Mac builds have been made by [twoplan](https://github.com/twoplan/Nibbler-for-macOS) and [Jac-Zac](https://github.com/Jac-Zac/Nibbler_MacOS) and [Zamana](https://github.com/Zamana/nibbler) - the last of which is probably the most up-to-date.

## Mac install script

Alternatively, MacOS users can run the following *one-liner* to assemble Nibbler locally. This (hopefully) removes any codesigning issues (Gatekeeper refusing to open unauthorized apps) by building Nibbler on-the-fly, though I can't test it myself:

```bash
curl -L https://raw.githubusercontent.com/rooklift/nibbler/master/files/scripts/install_mac.sh | bash
```

## Advanced engine options

Most people won't need them, but all of Leela's engine options can be set in two ways:

* Leela automatically loads options from a file called `lc0.config` at startup - see [here](https://lczero.org/play/configuration/flags/#config-file).
* Nibbler will send UCI options specified in Nibbler's own `engines.json` file (which you can find via the Dev menu).

## Hints and tips

An option to enable the UCI `searchmoves` feature is available in the Analysis menu. Once enabled, one or more moves can be specified as moves to focus on; Leela will ignore other moves. This is useful when you think Leela isn't giving a certain move enough attention.

Leela forgets much of the evaluation if the position changes. To mitigate this, an option in the Analysis menu allows you to hover over a PV (on the right) and see it play out on the board, without changing the position we're actually analysing. You might prefer to halt Leela while doing this, so that the PVs don't change while you're looking at them.

Leela running out of RAM can be a problem if searches go on too long. You might like to set a reasonable node limit (in the Engine menu), perhaps 10 million or so.

## Thanks

Thanks to everyone in Discord and GitHub who's offered advice and suggestions; and thanks to all Lc0 devs and GPU-hours contributors!

The pieces are from [Lichess](https://lichess.org/).

Icon design by [ciriousjoker](https://github.com/ciriousjoker) based on [this](https://www.svgrepo.com/svg/155301/chess).


================================================
FILE: files/.editorconfig
================================================
[*]
indent_style = tab
indent_size = 4
trim_trailing_whitespace = true


================================================
FILE: files/.gitignore
================================================
.DS_Store
scripts/dist
scripts/electron_zipped
scripts/update_my_installation.py


================================================
FILE: files/misc/chess960.txt
================================================
https://www.mark-weeks.com/cfaa/chess960/c960strt.htm
I've verified Nibbler produces exactly the same results given a Chess960 number.

000	BBQNNRKR	bbqnnrkr	959	RKRNNQBB
001	BQNBNRKR	bqnbnrkr	955	RKRNBNQB
002	BQNNRBKR	bqnnrbkr	951	RKBRNNQB
003	BQNNRKRB	bqnnrkrb	947	BRKRNNQB
004	QBBNNRKR	qbbnnrkr	958	RKRNNBBQ
005	QNBBNRKR	qnbbnrkr	954	RKRNBBNQ
006	QNBNRBKR	qnbnrbkr	950	RKBRNBNQ
007	QNBNRKRB	qnbnrkrb	946	BRKRNBNQ
008	QBNNBRKR	qbnnbrkr	957	RKRBNNBQ
009	QNNBBRKR	qnnbbrkr	953	RKRBBNNQ
010	QNNRBBKR	qnnrbbkr	949	RKBBRNNQ
011	QNNRBKRB	qnnrbkrb	945	BRKBRNNQ
012	QBNNRKBR	qbnnrkbr	956	RBKRNNBQ
013	QNNBRKBR	qnnbrkbr	952	RBKRBNNQ
014	QNNRKBBR	qnnrkbbr	948	RBBKRNNQ
015	QNNRKRBB	qnnrkrbb	944	BBRKRNNQ
016	BBNQNRKR	bbnqnrkr	943	RKRNQNBB
017	BNQBNRKR	bnqbnrkr	939	RKRNBQNB
018	BNQNRBKR	bnqnrbkr	935	RKBRNQNB
019	BNQNRKRB	bnqnrkrb	931	BRKRNQNB
020	NBBQNRKR	nbbqnrkr	942	RKRNQBBN
021	NQBBNRKR	nqbbnrkr	938	RKRNBBQN
022	NQBNRBKR	nqbnrbkr	934	RKBRNBQN
023	NQBNRKRB	nqbnrkrb	930	BRKRNBQN
024	NBQNBRKR	nbqnbrkr	941	RKRBNQBN
025	NQNBBRKR	nqnbbrkr	937	RKRBBNQN
026	NQNRBBKR	nqnrbbkr	933	RKBBRNQN
027	NQNRBKRB	nqnrbkrb	929	BRKBRNQN
028	NBQNRKBR	nbqnrkbr	940	RBKRNQBN
029	NQNBRKBR	nqnbrkbr	936	RBKRBNQN
030	NQNRKBBR	nqnrkbbr	932	RBBKRNQN
031	NQNRKRBB	nqnrkrbb	928	BBRKRNQN
032	BBNNQRKR	bbnnqrkr	927	RKRQNNBB
033	BNNBQRKR	bnnbqrkr	923	RKRQBNNB
034	BNNQRBKR	bnnqrbkr	919	RKBRQNNB
035	BNNQRKRB	bnnqrkrb	915	BRKRQNNB
036	NBBNQRKR	nbbnqrkr	926	RKRQNBBN
037	NNBBQRKR	nnbbqrkr	922	RKRQBBNN
038	NNBQRBKR	nnbqrbkr	918	RKBRQBNN
039	NNBQRKRB	nnbqrkrb	914	BRKRQBNN
040	NBNQBRKR	nbnqbrkr	925	RKRBQNBN
041	NNQBBRKR	nnqbbrkr	921	RKRBBQNN
042	NNQRBBKR	nnqrbbkr	917	RKBBRQNN
043	NNQRBKRB	nnqrbkrb	913	BRKBRQNN
044	NBNQRKBR	nbnqrkbr	924	RBKRQNBN
045	NNQBRKBR	nnqbrkbr	920	RBKRBQNN
046	NNQRKBBR	nnqrkbbr	916	RBBKRQNN
047	NNQRKRBB	nnqrkrbb	912	BBRKRQNN
048	BBNNRQKR	bbnnrqkr	911	RKQRNNBB
049	BNNBRQKR	bnnbrqkr	907	RKQRBNNB
050	BNNRQBKR	bnnrqbkr	903	RKBQRNNB
051	BNNRQKRB	bnnrqkrb	899	BRKQRNNB
052	NBBNRQKR	nbbnrqkr	910	RKQRNBBN
053	NNBBRQKR	nnbbrqkr	906	RKQRBBNN
054	NNBRQBKR	nnbrqbkr	902	RKBQRBNN
055	NNBRQKRB	nnbrqkrb	898	BRKQRBNN
056	NBNRBQKR	nbnrbqkr	909	RKQBRNBN
057	NNRBBQKR	nnrbbqkr	905	RKQBBRNN
058	NNRQBBKR	nnrqbbkr	901	RKBBQRNN
059	NNRQBKRB	nnrqbkrb	897	BRKBQRNN
060	NBNRQKBR	nbnrqkbr	908	RBKQRNBN
061	NNRBQKBR	nnrbqkbr	904	RBKQBRNN
062	NNRQKBBR	nnrqkbbr	900	RBBKQRNN
063	NNRQKRBB	nnrqkrbb	896	BBRKQRNN
064	BBNNRKQR	bbnnrkqr	895	RQKRNNBB
065	BNNBRKQR	bnnbrkqr	891	RQKRBNNB
066	BNNRKBQR	bnnrkbqr	887	RQBKRNNB
067	BNNRKQRB	bnnrkqrb	883	BRQKRNNB
068	NBBNRKQR	nbbnrkqr	894	RQKRNBBN
069	NNBBRKQR	nnbbrkqr	890	RQKRBBNN
070	NNBRKBQR	nnbrkbqr	886	RQBKRBNN
071	NNBRKQRB	nnbrkqrb	882	BRQKRBNN
072	NBNRBKQR	nbnrbkqr	893	RQKBRNBN
073	NNRBBKQR	nnrbbkqr	889	RQKBBRNN
074	NNRKBBQR	nnrkbbqr	885	RQBBKRNN
075	NNRKBQRB	nnrkbqrb	881	BRQBKRNN
076	NBNRKQBR	nbnrkqbr	892	RBQKRNBN
077	NNRBKQBR	nnrbkqbr	888	RBQKBRNN
078	NNRKQBBR	nnrkqbbr	884	RBBQKRNN
079	NNRKQRBB	nnrkqrbb	880	BBRQKRNN
080	BBNNRKRQ	bbnnrkrq	879	QRKRNNBB
081	BNNBRKRQ	bnnbrkrq	875	QRKRBNNB
082	BNNRKBRQ	bnnrkbrq	871	QRBKRNNB
083	BNNRKRQB	bnnrkrqb	867	BQRKRNNB
084	NBBNRKRQ	nbbnrkrq	878	QRKRNBBN
085	NNBBRKRQ	nnbbrkrq	874	QRKRBBNN
086	NNBRKBRQ	nnbrkbrq	870	QRBKRBNN
087	NNBRKRQB	nnbrkrqb	866	BQRKRBNN
088	NBNRBKRQ	nbnrbkrq	877	QRKBRNBN
089	NNRBBKRQ	nnrbbkrq	873	QRKBBRNN
090	NNRKBBRQ	nnrkbbrq	869	QRBBKRNN
091	NNRKBRQB	nnrkbrqb	865	BQRBKRNN
092	NBNRKRBQ	nbnrkrbq	876	QBRKRNBN
093	NNRBKRBQ	nnrbkrbq	872	QBRKBRNN
094	NNRKRBBQ	nnrkrbbq	868	QBBRKRNN
095	NNRKRQBB	nnrkrqbb	864	BBQRKRNN
096	BBQNRNKR	bbqnrnkr	863	RKNRNQBB
097	BQNBRNKR	bqnbrnkr	859	RKNRBNQB
098	BQNRNBKR	bqnrnbkr	855	RKBNRNQB
099	BQNRNKRB	bqnrnkrb	851	BRKNRNQB
100	QBBNRNKR	qbbnrnkr	862	RKNRNBBQ
101	QNBBRNKR	qnbbrnkr	858	RKNRBBNQ
102	QNBRNBKR	qnbrnbkr	854	RKBNRBNQ
103	QNBRNKRB	qnbrnkrb	850	BRKNRBNQ
104	QBNRBNKR	qbnrbnkr	861	RKNBRNBQ
105	QNRBBNKR	qnrbbnkr	857	RKNBBRNQ
106	QNRNBBKR	qnrnbbkr	853	RKBBNRNQ
107	QNRNBKRB	qnrnbkrb	849	BRKBNRNQ
108	QBNRNKBR	qbnrnkbr	860	RBKNRNBQ
109	QNRBNKBR	qnrbnkbr	856	RBKNBRNQ
110	QNRNKBBR	qnrnkbbr	852	RBBKNRNQ
111	QNRNKRBB	qnrnkrbb	848	BBRKNRNQ
112	BBNQRNKR	bbnqrnkr	847	RKNRQNBB
113	BNQBRNKR	bnqbrnkr	843	RKNRBQNB
114	BNQRNBKR	bnqrnbkr	839	RKBNRQNB
115	BNQRNKRB	bnqrnkrb	835	BRKNRQNB
116	NBBQRNKR	nbbqrnkr	846	RKNRQBBN
117	NQBBRNKR	nqbbrnkr	842	RKNRBBQN
118	NQBRNBKR	nqbrnbkr	838	RKBNRBQN
119	NQBRNKRB	nqbrnkrb	834	BRKNRBQN
120	NBQRBNKR	nbqrbnkr	845	RKNBRQBN
121	NQRBBNKR	nqrbbnkr	841	RKNBBRQN
122	NQRNBBKR	nqrnbbkr	837	RKBBNRQN
123	NQRNBKRB	nqrnbkrb	833	BRKBNRQN
124	NBQRNKBR	nbqrnkbr	844	RBKNRQBN
125	NQRBNKBR	nqrbnkbr	840	RBKNBRQN
126	NQRNKBBR	nqrnkbbr	836	RBBKNRQN
127	NQRNKRBB	nqrnkrbb	832	BBRKNRQN
128	BBNRQNKR	bbnrqnkr	831	RKNQRNBB
129	BNRBQNKR	bnrbqnkr	827	RKNQBRNB
130	BNRQNBKR	bnrqnbkr	823	RKBNQRNB
131	BNRQNKRB	bnrqnkrb	819	BRKNQRNB
132	NBBRQNKR	nbbrqnkr	830	RKNQRBBN
133	NRBBQNKR	nrbbqnkr	826	RKNQBBRN
134	NRBQNBKR	nrbqnbkr	822	RKBNQBRN
135	NRBQNKRB	nrbqnkrb	818	BRKNQBRN
136	NBRQBNKR	nbrqbnkr	829	RKNBQRBN
137	NRQBBNKR	nrqbbnkr	825	RKNBBQRN
138	NRQNBBKR	nrqnbbkr	821	RKBBNQRN
139	NRQNBKRB	nrqnbkrb	817	BRKBNQRN
140	NBRQNKBR	nbrqnkbr	828	RBKNQRBN
141	NRQBNKBR	nrqbnkbr	824	RBKNBQRN
142	NRQNKBBR	nrqnkbbr	820	RBBKNQRN
143	NRQNKRBB	nrqnkrbb	816	BBRKNQRN
144	BBNRNQKR	bbnrnqkr	815	RKQNRNBB
145	BNRBNQKR	bnrbnqkr	811	RKQNBRNB
146	BNRNQBKR	bnrnqbkr	807	RKBQNRNB
147	BNRNQKRB	bnrnqkrb	803	BRKQNRNB
148	NBBRNQKR	nbbrnqkr	814	RKQNRBBN
149	NRBBNQKR	nrbbnqkr	810	RKQNBBRN
150	NRBNQBKR	nrbnqbkr	806	RKBQNBRN
151	NRBNQKRB	nrbnqkrb	802	BRKQNBRN
152	NBRNBQKR	nbrnbqkr	813	RKQBNRBN
153	NRNBBQKR	nrnbbqkr	809	RKQBBNRN
154	NRNQBBKR	nrnqbbkr	805	RKBBQNRN
155	NRNQBKRB	nrnqbkrb	801	BRKBQNRN
156	NBRNQKBR	nbrnqkbr	812	RBKQNRBN
157	NRNBQKBR	nrnbqkbr	808	RBKQBNRN
158	NRNQKBBR	nrnqkbbr	804	RBBKQNRN
159	NRNQKRBB	nrnqkrbb	800	BBRKQNRN
160	BBNRNKQR	bbnrnkqr	799	RQKNRNBB
161	BNRBNKQR	bnrbnkqr	795	RQKNBRNB
162	BNRNKBQR	bnrnkbqr	791	RQBKNRNB
163	BNRNKQRB	bnrnkqrb	787	BRQKNRNB
164	NBBRNKQR	nbbrnkqr	798	RQKNRBBN
165	NRBBNKQR	nrbbnkqr	794	RQKNBBRN
166	NRBNKBQR	nrbnkbqr	790	RQBKNBRN
167	NRBNKQRB	nrbnkqrb	786	BRQKNBRN
168	NBRNBKQR	nbrnbkqr	797	RQKBNRBN
169	NRNBBKQR	nrnbbkqr	793	RQKBBNRN
170	NRNKBBQR	nrnkbbqr	789	RQBBKNRN
171	NRNKBQRB	nrnkbqrb	785	BRQBKNRN
172	NBRNKQBR	nbrnkqbr	796	RBQKNRBN
173	NRNBKQBR	nrnbkqbr	792	RBQKBNRN
174	NRNKQBBR	nrnkqbbr	788	RBBQKNRN
175	NRNKQRBB	nrnkqrbb	784	BBRQKNRN
176	BBNRNKRQ	bbnrnkrq	783	QRKNRNBB
177	BNRBNKRQ	bnrbnkrq	779	QRKNBRNB
178	BNRNKBRQ	bnrnkbrq	775	QRBKNRNB
179	BNRNKRQB	bnrnkrqb	771	BQRKNRNB
180	NBBRNKRQ	nbbrnkrq	782	QRKNRBBN
181	NRBBNKRQ	nrbbnkrq	778	QRKNBBRN
182	NRBNKBRQ	nrbnkbrq	774	QRBKNBRN
183	NRBNKRQB	nrbnkrqb	770	BQRKNBRN
184	NBRNBKRQ	nbrnbkrq	781	QRKBNRBN
185	NRNBBKRQ	nrnbbkrq	777	QRKBBNRN
186	NRNKBBRQ	nrnkbbrq	773	QRBBKNRN
187	NRNKBRQB	nrnkbrqb	769	BQRBKNRN
188	NBRNKRBQ	nbrnkrbq	780	QBRKNRBN
189	NRNBKRBQ	nrnbkrbq	776	QBRKBNRN
190	NRNKRBBQ	nrnkrbbq	772	QBBRKNRN
191	NRNKRQBB	nrnkrqbb	768	BBQRKNRN
192	BBQNRKNR	bbqnrknr	671	RNKRNQBB
193	BQNBRKNR	bqnbrknr	667	RNKRBNQB
194	BQNRKBNR	bqnrkbnr	663	RNBKRNQB
195	BQNRKNRB	bqnrknrb	659	BRNKRNQB
196	QBBNRKNR	qbbnrknr	670	RNKRNBBQ
197	QNBBRKNR	qnbbrknr	666	RNKRBBNQ
198	QNBRKBNR	qnbrkbnr	662	RNBKRBNQ
199	QNBRKNRB	qnbrknrb	658	BRNKRBNQ
200	QBNRBKNR	qbnrbknr	669	RNKBRNBQ
201	QNRBBKNR	qnrbbknr	665	RNKBBRNQ
202	QNRKBBNR	qnrkbbnr	661	RNBBKRNQ
203	QNRKBNRB	qnrkbnrb	657	BRNBKRNQ
204	QBNRKNBR	qbnrknbr	668	RBNKRNBQ
205	QNRBKNBR	qnrbknbr	664	RBNKBRNQ
206	QNRKNBBR	qnrknbbr	660	RBBNKRNQ
207	QNRKNRBB	qnrknrbb	656	BBRNKRNQ
208	BBNQRKNR	bbnqrknr	655	RNKRQNBB
209	BNQBRKNR	bnqbrknr	651	RNKRBQNB
210	BNQRKBNR	bnqrkbnr	647	RNBKRQNB
211	BNQRKNRB	bnqrknrb	643	BRNKRQNB
212	NBBQRKNR	nbbqrknr	654	RNKRQBBN
213	NQBBRKNR	nqbbrknr	650	RNKRBBQN
214	NQBRKBNR	nqbrkbnr	646	RNBKRBQN
215	NQBRKNRB	nqbrknrb	642	BRNKRBQN
216	NBQRBKNR	nbqrbknr	653	RNKBRQBN
217	NQRBBKNR	nqrbbknr	649	RNKBBRQN
218	NQRKBBNR	nqrkbbnr	645	RNBBKRQN
219	NQRKBNRB	nqrkbnrb	641	BRNBKRQN
220	NBQRKNBR	nbqrknbr	652	RBNKRQBN
221	NQRBKNBR	nqrbknbr	648	RBNKBRQN
222	NQRKNBBR	nqrknbbr	644	RBBNKRQN
223	NQRKNRBB	nqrknrbb	640	BBRNKRQN
224	BBNRQKNR	bbnrqknr	639	RNKQRNBB
225	BNRBQKNR	bnrbqknr	635	RNKQBRNB
226	BNRQKBNR	bnrqkbnr	631	RNBKQRNB
227	BNRQKNRB	bnrqknrb	627	BRNKQRNB
228	NBBRQKNR	nbbrqknr	638	RNKQRBBN
229	NRBBQKNR	nrbbqknr	634	RNKQBBRN
230	NRBQKBNR	nrbqkbnr	630	RNBKQBRN
231	NRBQKNRB	nrbqknrb	626	BRNKQBRN
232	NBRQBKNR	nbrqbknr	637	RNKBQRBN
233	NRQBBKNR	nrqbbknr	633	RNKBBQRN
234	NRQKBBNR	nrqkbbnr	629	RNBBKQRN
235	NRQKBNRB	nrqkbnrb	625	BRNBKQRN
236	NBRQKNBR	nbrqknbr	636	RBNKQRBN
237	NRQBKNBR	nrqbknbr	632	RBNKBQRN
238	NRQKNBBR	nrqknbbr	628	RBBNKQRN
239	NRQKNRBB	nrqknrbb	624	BBRNKQRN
240	BBNRKQNR	bbnrkqnr	623	RNQKRNBB
241	BNRBKQNR	bnrbkqnr	619	RNQKBRNB
242	BNRKQBNR	bnrkqbnr	615	RNBQKRNB
243	BNRKQNRB	bnrkqnrb	611	BRNQKRNB
244	NBBRKQNR	nbbrkqnr	622	RNQKRBBN
245	NRBBKQNR	nrbbkqnr	618	RNQKBBRN
246	NRBKQBNR	nrbkqbnr	614	RNBQKBRN
247	NRBKQNRB	nrbkqnrb	610	BRNQKBRN
248	NBRKBQNR	nbrkbqnr	621	RNQBKRBN
249	NRKBBQNR	nrkbbqnr	617	RNQBBKRN
250	NRKQBBNR	nrkqbbnr	613	RNBBQKRN
251	NRKQBNRB	nrkqbnrb	609	BRNBQKRN
252	NBRKQNBR	nbrkqnbr	620	RBNQKRBN
253	NRKBQNBR	nrkbqnbr	616	RBNQBKRN
254	NRKQNBBR	nrkqnbbr	612	RBBNQKRN
255	NRKQNRBB	nrkqnrbb	608	BBRNQKRN
256	BBNRKNQR	bbnrknqr	607	RQNKRNBB
257	BNRBKNQR	bnrbknqr	603	RQNKBRNB
258	BNRKNBQR	bnrknbqr	599	RQBNKRNB
259	BNRKNQRB	bnrknqrb	595	BRQNKRNB
260	NBBRKNQR	nbbrknqr	606	RQNKRBBN
261	NRBBKNQR	nrbbknqr	602	RQNKBBRN
262	NRBKNBQR	nrbknbqr	598	RQBNKBRN
263	NRBKNQRB	nrbknqrb	594	BRQNKBRN
264	NBRKBNQR	nbrkbnqr	605	RQNBKRBN
265	NRKBBNQR	nrkbbnqr	601	RQNBBKRN
266	NRKNBBQR	nrknbbqr	597	RQBBNKRN
267	NRKNBQRB	nrknbqrb	593	BRQBNKRN
268	NBRKNQBR	nbrknqbr	604	RBQNKRBN
269	NRKBNQBR	nrkbnqbr	600	RBQNBKRN
270	NRKNQBBR	nrknqbbr	596	RBBQNKRN
271	NRKNQRBB	nrknqrbb	592	BBRQNKRN
272	BBNRKNRQ	bbnrknrq	591	QRNKRNBB
273	BNRBKNRQ	bnrbknrq	587	QRNKBRNB
274	BNRKNBRQ	bnrknbrq	583	QRBNKRNB
275	BNRKNRQB	bnrknrqb	579	BQRNKRNB
276	NBBRKNRQ	nbbrknrq	590	QRNKRBBN
277	NRBBKNRQ	nrbbknrq	586	QRNKBBRN
278	NRBKNBRQ	nrbknbrq	582	QRBNKBRN
279	NRBKNRQB	nrbknrqb	578	BQRNKBRN
280	NBRKBNRQ	nbrkbnrq	589	QRNBKRBN
281	NRKBBNRQ	nrkbbnrq	585	QRNBBKRN
282	NRKNBBRQ	nrknbbrq	581	QRBBNKRN
283	NRKNBRQB	nrknbrqb	577	BQRBNKRN
284	NBRKNRBQ	nbrknrbq	588	QBRNKRBN
285	NRKBNRBQ	nrkbnrbq	584	QBRNBKRN
286	NRKNRBBQ	nrknrbbq	580	QBBRNKRN
287	NRKNRQBB	nrknrqbb	576	BBQRNKRN
288	BBQNRKRN	bbqnrkrn	383	NRKRNQBB
289	BQNBRKRN	bqnbrkrn	379	NRKRBNQB
290	BQNRKBRN	bqnrkbrn	375	NRBKRNQB
291	BQNRKRNB	bqnrkrnb	371	BNRKRNQB
292	QBBNRKRN	qbbnrkrn	382	NRKRNBBQ
293	QNBBRKRN	qnbbrkrn	378	NRKRBBNQ
294	QNBRKBRN	qnbrkbrn	374	NRBKRBNQ
295	QNBRKRNB	qnbrkrnb	370	BNRKRBNQ
296	QBNRBKRN	qbnrbkrn	381	NRKBRNBQ
297	QNRBBKRN	qnrbbkrn	377	NRKBBRNQ
298	QNRKBBRN	qnrkbbrn	373	NRBBKRNQ
299	QNRKBRNB	qnrkbrnb	369	BNRBKRNQ
300	QBNRKRBN	qbnrkrbn	380	NBRKRNBQ
301	QNRBKRBN	qnrbkrbn	376	NBRKBRNQ
302	QNRKRBBN	qnrkrbbn	372	NBBRKRNQ
303	QNRKRNBB	qnrkrnbb	368	BBNRKRNQ
304	BBNQRKRN	bbnqrkrn	367	NRKRQNBB
305	BNQBRKRN	bnqbrkrn	363	NRKRBQNB
306	BNQRKBRN	bnqrkbrn	359	NRBKRQNB
307	BNQRKRNB	bnqrkrnb	355	BNRKRQNB
308	NBBQRKRN	nbbqrkrn	366	NRKRQBBN
309	NQBBRKRN	nqbbrkrn	362	NRKRBBQN
310	NQBRKBRN	nqbrkbrn	358	NRBKRBQN
311	NQBRKRNB	nqbrkrnb	354	BNRKRBQN
312	NBQRBKRN	nbqrbkrn	365	NRKBRQBN
313	NQRBBKRN	nqrbbkrn	361	NRKBBRQN
314	NQRKBBRN	nqrkbbrn	357	NRBBKRQN
315	NQRKBRNB	nqrkbrnb	353	BNRBKRQN
316	NBQRKRBN	nbqrkrbn	364	NBRKRQBN
317	NQRBKRBN	nqrbkrbn	360	NBRKBRQN
318	NQRKRBBN	nqrkrbbn	356	NBBRKRQN
319	NQRKRNBB	nqrkrnbb	352	BBNRKRQN
320	BBNRQKRN	bbnrqkrn	351	NRKQRNBB
321	BNRBQKRN	bnrbqkrn	347	NRKQBRNB
322	BNRQKBRN	bnrqkbrn	343	NRBKQRNB
323	BNRQKRNB	bnrqkrnb	339	BNRKQRNB
324	NBBRQKRN	nbbrqkrn	350	NRKQRBBN
325	NRBBQKRN	nrbbqkrn	346	NRKQBBRN
326	NRBQKBRN	nrbqkbrn	342	NRBKQBRN
327	NRBQKRNB	nrbqkrnb	338	BNRKQBRN
328	NBRQBKRN	nbrqbkrn	349	NRKBQRBN
329	NRQBBKRN	nrqbbkrn	345	NRKBBQRN
330	NRQKBBRN	nrqkbbrn	341	NRBBKQRN
331	NRQKBRNB	nrqkbrnb	337	BNRBKQRN
332	NBRQKRBN	nbrqkrbn	348	NBRKQRBN
333	NRQBKRBN	nrqbkrbn	344	NBRKBQRN
334	NRQKRBBN	nrqkrbbn	340	NBBRKQRN
335	NRQKRNBB	nrqkrnbb	336	BBNRKQRN
336	BBNRKQRN	bbnrkqrn	335	NRQKRNBB
337	BNRBKQRN	bnrbkqrn	331	NRQKBRNB
338	BNRKQBRN	bnrkqbrn	327	NRBQKRNB
339	BNRKQRNB	bnrkqrnb	323	BNRQKRNB
340	NBBRKQRN	nbbrkqrn	334	NRQKRBBN
341	NRBBKQRN	nrbbkqrn	330	NRQKBBRN
342	NRBKQBRN	nrbkqbrn	326	NRBQKBRN
343	NRBKQRNB	nrbkqrnb	322	BNRQKBRN
344	NBRKBQRN	nbrkbqrn	333	NRQBKRBN
345	NRKBBQRN	nrkbbqrn	329	NRQBBKRN
346	NRKQBBRN	nrkqbbrn	325	NRBBQKRN
347	NRKQBRNB	nrkqbrnb	321	BNRBQKRN
348	NBRKQRBN	nbrkqrbn	332	NBRQKRBN
349	NRKBQRBN	nrkbqrbn	328	NBRQBKRN
350	NRKQRBBN	nrkqrbbn	324	NBBRQKRN
351	NRKQRNBB	nrkqrnbb	320	BBNRQKRN
352	BBNRKRQN	bbnrkrqn	319	NQRKRNBB
353	BNRBKRQN	bnrbkrqn	315	NQRKBRNB
354	BNRKRBQN	bnrkrbqn	311	NQBRKRNB
355	BNRKRQNB	bnrkrqnb	307	BNQRKRNB
356	NBBRKRQN	nbbrkrqn	318	NQRKRBBN
357	NRBBKRQN	nrbbkrqn	314	NQRKBBRN
358	NRBKRBQN	nrbkrbqn	310	NQBRKBRN
359	NRBKRQNB	nrbkrqnb	306	BNQRKBRN
360	NBRKBRQN	nbrkbrqn	317	NQRBKRBN
361	NRKBBRQN	nrkbbrqn	313	NQRBBKRN
362	NRKRBBQN	nrkrbbqn	309	NQBBRKRN
363	NRKRBQNB	nrkrbqnb	305	BNQBRKRN
364	NBRKRQBN	nbrkrqbn	316	NBQRKRBN
365	NRKBRQBN	nrkbrqbn	312	NBQRBKRN
366	NRKRQBBN	nrkrqbbn	308	NBBQRKRN
367	NRKRQNBB	nrkrqnbb	304	BBNQRKRN
368	BBNRKRNQ	bbnrkrnq	303	QNRKRNBB
369	BNRBKRNQ	bnrbkrnq	299	QNRKBRNB
370	BNRKRBNQ	bnrkrbnq	295	QNBRKRNB
371	BNRKRNQB	bnrkrnqb	291	BQNRKRNB
372	NBBRKRNQ	nbbrkrnq	302	QNRKRBBN
373	NRBBKRNQ	nrbbkrnq	298	QNRKBBRN
374	NRBKRBNQ	nrbkrbnq	294	QNBRKBRN
375	NRBKRNQB	nrbkrnqb	290	BQNRKBRN
376	NBRKBRNQ	nbrkbrnq	301	QNRBKRBN
377	NRKBBRNQ	nrkbbrnq	297	QNRBBKRN
378	NRKRBBNQ	nrkrbbnq	293	QNBBRKRN
379	NRKRBNQB	nrkrbnqb	289	BQNBRKRN
380	NBRKRNBQ	nbrkrnbq	300	QBNRKRBN
381	NRKBRNBQ	nrkbrnbq	296	QBNRBKRN
382	NRKRNBBQ	nrkrnbbq	292	QBBNRKRN
383	NRKRNQBB	nrkrnqbb	288	BBQNRKRN
384	BBQRNNKR	bbqrnnkr	767	RKNNRQBB
385	BQRBNNKR	bqrbnnkr	763	RKNNBRQB
386	BQRNNBKR	bqrnnbkr	759	RKBNNRQB
387	BQRNNKRB	bqrnnkrb	755	BRKNNRQB
388	QBBRNNKR	qbbrnnkr	766	RKNNRBBQ
389	QRBBNNKR	qrbbnnkr	762	RKNNBBRQ
390	QRBNNBKR	qrbnnbkr	758	RKBNNBRQ
391	QRBNNKRB	qrbnnkrb	754	BRKNNBRQ
392	QBRNBNKR	qbrnbnkr	765	RKNBNRBQ
393	QRNBBNKR	qrnbbnkr	761	RKNBBNRQ
394	QRNNBBKR	qrnnbbkr	757	RKBBNNRQ
395	QRNNBKRB	qrnnbkrb	753	BRKBNNRQ
396	QBRNNKBR	qbrnnkbr	764	RBKNNRBQ
397	QRNBNKBR	qrnbnkbr	760	RBKNBNRQ
398	QRNNKBBR	qrnnkbbr	756	RBBKNNRQ
399	QRNNKRBB	qrnnkrbb	752	BBRKNNRQ
400	BBRQNNKR	bbrqnnkr	751	RKNNQRBB
401	BRQBNNKR	brqbnnkr	747	RKNNBQRB
402	BRQNNBKR	brqnnbkr	743	RKBNNQRB
403	BRQNNKRB	brqnnkrb	739	BRKNNQRB
404	RBBQNNKR	rbbqnnkr	750	RKNNQBBR
405	RQBBNNKR	rqbbnnkr	746	RKNNBBQR
406	RQBNNBKR	rqbnnbkr	742	RKBNNBQR
407	RQBNNKRB	rqbnnkrb	738	BRKNNBQR
408	RBQNBNKR	rbqnbnkr	749	RKNBNQBR
409	RQNBBNKR	rqnbbnkr	745	RKNBBNQR
410	RQNNBBKR	rqnnbbkr	741	RKBBNNQR
411	RQNNBKRB	rqnnbkrb	737	BRKBNNQR
412	RBQNNKBR	rbqnnkbr	748	RBKNNQBR
413	RQNBNKBR	rqnbnkbr	744	RBKNBNQR
414	RQNNKBBR	rqnnkbbr	740	RBBKNNQR
415	RQNNKRBB	rqnnkrbb	736	BBRKNNQR
416	BBRNQNKR	bbrnqnkr	735	RKNQNRBB
417	BRNBQNKR	brnbqnkr	731	RKNQBNRB
418	BRNQNBKR	brnqnbkr	727	RKBNQNRB
419	BRNQNKRB	brnqnkrb	723	BRKNQNRB
420	RBBNQNKR	rbbnqnkr	734	RKNQNBBR
421	RNBBQNKR	rnbbqnkr	730	RKNQBBNR
422	RNBQNBKR	rnbqnbkr	726	RKBNQBNR
423	RNBQNKRB	rnbqnkrb	722	BRKNQBNR
424	RBNQBNKR	rbnqbnkr	733	RKNBQNBR
425	RNQBBNKR	rnqbbnkr	729	RKNBBQNR
426	RNQNBBKR	rnqnbbkr	725	RKBBNQNR
427	RNQNBKRB	rnqnbkrb	721	BRKBNQNR
428	RBNQNKBR	rbnqnkbr	732	RBKNQNBR
429	RNQBNKBR	rnqbnkbr	728	RBKNBQNR
430	RNQNKBBR	rnqnkbbr	724	RBBKNQNR
431	RNQNKRBB	rnqnkrbb	720	BBRKNQNR
432	BBRNNQKR	bbrnnqkr	719	RKQNNRBB
433	BRNBNQKR	brnbnqkr	715	RKQNBNRB
434	BRNNQBKR	brnnqbkr	711	RKBQNNRB
435	BRNNQKRB	brnnqkrb	707	BRKQNNRB
436	RBBNNQKR	rbbnnqkr	718	RKQNNBBR
437	RNBBNQKR	rnbbnqkr	714	RKQNBBNR
438	RNBNQBKR	rnbnqbkr	710	RKBQNBNR
439	RNBNQKRB	rnbnqkrb	706	BRKQNBNR
440	RBNNBQKR	rbnnbqkr	717	RKQBNNBR
441	RNNBBQKR	rnnbbqkr	713	RKQBBNNR
442	RNNQBBKR	rnnqbbkr	709	RKBBQNNR
443	RNNQBKRB	rnnqbkrb	705	BRKBQNNR
444	RBNNQKBR	rbnnqkbr	716	RBKQNNBR
445	RNNBQKBR	rnnbqkbr	712	RBKQBNNR
446	RNNQKBBR	rnnqkbbr	708	RBBKQNNR
447	RNNQKRBB	rnnqkrbb	704	BBRKQNNR
448	BBRNNKQR	bbrnnkqr	703	RQKNNRBB
449	BRNBNKQR	brnbnkqr	699	RQKNBNRB
450	BRNNKBQR	brnnkbqr	695	RQBKNNRB
451	BRNNKQRB	brnnkqrb	691	BRQKNNRB
452	RBBNNKQR	rbbnnkqr	702	RQKNNBBR
453	RNBBNKQR	rnbbnkqr	698	RQKNBBNR
454	RNBNKBQR	rnbnkbqr	694	RQBKNBNR
455	RNBNKQRB	rnbnkqrb	690	BRQKNBNR
456	RBNNBKQR	rbnnbkqr	701	RQKBNNBR
457	RNNBBKQR	rnnbbkqr	697	RQKBBNNR
458	RNNKBBQR	rnnkbbqr	693	RQBBKNNR
459	RNNKBQRB	rnnkbqrb	689	BRQBKNNR
460	RBNNKQBR	rbnnkqbr	700	RBQKNNBR
461	RNNBKQBR	rnnbkqbr	696	RBQKBNNR
462	RNNKQBBR	rnnkqbbr	692	RBBQKNNR
463	RNNKQRBB	rnnkqrbb	688	BBRQKNNR
464	BBRNNKRQ	bbrnnkrq	687	QRKNNRBB
465	BRNBNKRQ	brnbnkrq	683	QRKNBNRB
466	BRNNKBRQ	brnnkbrq	679	QRBKNNRB
467	BRNNKRQB	brnnkrqb	675	BQRKNNRB
468	RBBNNKRQ	rbbnnkrq	686	QRKNNBBR
469	RNBBNKRQ	rnbbnkrq	682	QRKNBBNR
470	RNBNKBRQ	rnbnkbrq	678	QRBKNBNR
471	RNBNKRQB	rnbnkrqb	674	BQRKNBNR
472	RBNNBKRQ	rbnnbkrq	685	QRKBNNBR
473	RNNBBKRQ	rnnbbkrq	681	QRKBBNNR
474	RNNKBBRQ	rnnkbbrq	677	QRBBKNNR
475	RNNKBRQB	rnnkbrqb	673	BQRBKNNR
476	RBNNKRBQ	rbnnkrbq	684	QBRKNNBR
477	RNNBKRBQ	rnnbkrbq	680	QBRKBNNR
478	RNNKRBBQ	rnnkrbbq	676	QBBRKNNR
479	RNNKRQBB	rnnkrqbb	672	BBQRKNNR
480	BBQRNKNR	bbqrnknr	575	RNKNRQBB
481	BQRBNKNR	bqrbnknr	571	RNKNBRQB
482	BQRNKBNR	bqrnkbnr	567	RNBKNRQB
483	BQRNKNRB	bqrnknrb	563	BRNKNRQB
484	QBBRNKNR	qbbrnknr	574	RNKNRBBQ
485	QRBBNKNR	qrbbnknr	570	RNKNBBRQ
486	QRBNKBNR	qrbnkbnr	566	RNBKNBRQ
487	QRBNKNRB	qrbnknrb	562	BRNKNBRQ
488	QBRNBKNR	qbrnbknr	573	RNKBNRBQ
489	QRNBBKNR	qrnbbknr	569	RNKBBNRQ
490	QRNKBBNR	qrnkbbnr	565	RNBBKNRQ
491	QRNKBNRB	qrnkbnrb	561	BRNBKNRQ
492	QBRNKNBR	qbrnknbr	572	RBNKNRBQ
493	QRNBKNBR	qrnbknbr	568	RBNKBNRQ
494	QRNKNBBR	qrnknbbr	564	RBBNKNRQ
495	QRNKNRBB	qrnknrbb	560	BBRNKNRQ
496	BBRQNKNR	bbrqnknr	559	RNKNQRBB
497	BRQBNKNR	brqbnknr	555	RNKNBQRB
498	BRQNKBNR	brqnkbnr	551	RNBKNQRB
499	BRQNKNRB	brqnknrb	547	BRNKNQRB
500	RBBQNKNR	rbbqnknr	558	RNKNQBBR
501	RQBBNKNR	rqbbnknr	554	RNKNBBQR
502	RQBNKBNR	rqbnkbnr	550	RNBKNBQR
503	RQBNKNRB	rqbnknrb	546	BRNKNBQR
504	RBQNBKNR	rbqnbknr	557	RNKBNQBR
505	RQNBBKNR	rqnbbknr	553	RNKBBNQR
506	RQNKBBNR	rqnkbbnr	549	RNBBKNQR
507	RQNKBNRB	rqnkbnrb	545	BRNBKNQR
508	RBQNKNBR	rbqnknbr	556	RBNKNQBR
509	RQNBKNBR	rqnbknbr	552	RBNKBNQR
510	RQNKNBBR	rqnknbbr	548	RBBNKNQR
511	RQNKNRBB	rqnknrbb	544	BBRNKNQR
512	BBRNQKNR	bbrnqknr	543	RNKQNRBB
513	BRNBQKNR	brnbqknr	539	RNKQBNRB
514	BRNQKBNR	brnqkbnr	535	RNBKQNRB
515	BRNQKNRB	brnqknrb	531	BRNKQNRB
516	RBBNQKNR	rbbnqknr	542	RNKQNBBR
517	RNBBQKNR	rnbbqknr	538	RNKQBBNR
518	RNBQKBNR	rnbqkbnr	534	RNBKQBNR
519	RNBQKNRB	rnbqknrb	530	BRNKQBNR
520	RBNQBKNR	rbnqbknr	541	RNKBQNBR
521	RNQBBKNR	rnqbbknr	537	RNKBBQNR
522	RNQKBBNR	rnqkbbnr	533	RNBBKQNR
523	RNQKBNRB	rnqkbnrb	529	BRNBKQNR
524	RBNQKNBR	rbnqknbr	540	RBNKQNBR
525	RNQBKNBR	rnqbknbr	536	RBNKBQNR
526	RNQKNBBR	rnqknbbr	532	RBBNKQNR
527	RNQKNRBB	rnqknrbb	528	BBRNKQNR
528	BBRNKQNR	bbrnkqnr	527	RNQKNRBB
529	BRNBKQNR	brnbkqnr	523	RNQKBNRB
530	BRNKQBNR	brnkqbnr	519	RNBQKNRB
531	BRNKQNRB	brnkqnrb	515	BRNQKNRB
532	RBBNKQNR	rbbnkqnr	526	RNQKNBBR
533	RNBBKQNR	rnbbkqnr	522	RNQKBBNR
534	RNBKQBNR	rnbkqbnr	518	RNBQKBNR
535	RNBKQNRB	rnbkqnrb	514	BRNQKBNR
536	RBNKBQNR	rbnkbqnr	525	RNQBKNBR
537	RNKBBQNR	rnkbbqnr	521	RNQBBKNR
538	RNKQBBNR	rnkqbbnr	517	RNBBQKNR
539	RNKQBNRB	rnkqbnrb	513	BRNBQKNR
540	RBNKQNBR	rbnkqnbr	524	RBNQKNBR
541	RNKBQNBR	rnkbqnbr	520	RBNQBKNR
542	RNKQNBBR	rnkqnbbr	516	RBBNQKNR
543	RNKQNRBB	rnkqnrbb	512	BBRNQKNR
544	BBRNKNQR	bbrnknqr	511	RQNKNRBB
545	BRNBKNQR	brnbknqr	507	RQNKBNRB
546	BRNKNBQR	brnknbqr	503	RQBNKNRB
547	BRNKNQRB	brnknqrb	499	BRQNKNRB
548	RBBNKNQR	rbbnknqr	510	RQNKNBBR
549	RNBBKNQR	rnbbknqr	506	RQNKBBNR
550	RNBKNBQR	rnbknbqr	502	RQBNKBNR
551	RNBKNQRB	rnbknqrb	498	BRQNKBNR
552	RBNKBNQR	rbnkbnqr	509	RQNBKNBR
553	RNKBBNQR	rnkbbnqr	505	RQNBBKNR
554	RNKNBBQR	rnknbbqr	501	RQBBNKNR
555	RNKNBQRB	rnknbqrb	497	BRQBNKNR
556	RBNKNQBR	rbnknqbr	508	RBQNKNBR
557	RNKBNQBR	rnkbnqbr	504	RBQNBKNR
558	RNKNQBBR	rnknqbbr	500	RBBQNKNR
559	RNKNQRBB	rnknqrbb	496	BBRQNKNR
560	BBRNKNRQ	bbrnknrq	495	QRNKNRBB
561	BRNBKNRQ	brnbknrq	491	QRNKBNRB
562	BRNKNBRQ	brnknbrq	487	QRBNKNRB
563	BRNKNRQB	brnknrqb	483	BQRNKNRB
564	RBBNKNRQ	rbbnknrq	494	QRNKNBBR
565	RNBBKNRQ	rnbbknrq	490	QRNKBBNR
566	RNBKNBRQ	rnbknbrq	486	QRBNKBNR
567	RNBKNRQB	rnbknrqb	482	BQRNKBNR
568	RBNKBNRQ	rbnkbnrq	493	QRNBKNBR
569	RNKBBNRQ	rnkbbnrq	489	QRNBBKNR
570	RNKNBBRQ	rnknbbrq	485	QRBBNKNR
571	RNKNBRQB	rnknbrqb	481	BQRBNKNR
572	RBNKNRBQ	rbnknrbq	492	QBRNKNBR
573	RNKBNRBQ	rnkbnrbq	488	QBRNBKNR
574	RNKNRBBQ	rnknrbbq	484	QBBRNKNR
575	RNKNRQBB	rnknrqbb	480	BBQRNKNR
576	BBQRNKRN	bbqrnkrn	287	NRKNRQBB
577	BQRBNKRN	bqrbnkrn	283	NRKNBRQB
578	BQRNKBRN	bqrnkbrn	279	NRBKNRQB
579	BQRNKRNB	bqrnkrnb	275	BNRKNRQB
580	QBBRNKRN	qbbrnkrn	286	NRKNRBBQ
581	QRBBNKRN	qrbbnkrn	282	NRKNBBRQ
582	QRBNKBRN	qrbnkbrn	278	NRBKNBRQ
583	QRBNKRNB	qrbnkrnb	274	BNRKNBRQ
584	QBRNBKRN	qbrnbkrn	285	NRKBNRBQ
585	QRNBBKRN	qrnbbkrn	281	NRKBBNRQ
586	QRNKBBRN	qrnkbbrn	277	NRBBKNRQ
587	QRNKBRNB	qrnkbrnb	273	BNRBKNRQ
588	QBRNKRBN	qbrnkrbn	284	NBRKNRBQ
589	QRNBKRBN	qrnbkrbn	280	NBRKBNRQ
590	QRNKRBBN	qrnkrbbn	276	NBBRKNRQ
591	QRNKRNBB	qrnkrnbb	272	BBNRKNRQ
592	BBRQNKRN	bbrqnkrn	271	NRKNQRBB
593	BRQBNKRN	brqbnkrn	267	NRKNBQRB
594	BRQNKBRN	brqnkbrn	263	NRBKNQRB
595	BRQNKRNB	brqnkrnb	259	BNRKNQRB
596	RBBQNKRN	rbbqnkrn	270	NRKNQBBR
597	RQBBNKRN	rqbbnkrn	266	NRKNBBQR
598	RQBNKBRN	rqbnkbrn	262	NRBKNBQR
599	RQBNKRNB	rqbnkrnb	258	BNRKNBQR
600	RBQNBKRN	rbqnbkrn	269	NRKBNQBR
601	RQNBBKRN	rqnbbkrn	265	NRKBBNQR
602	RQNKBBRN	rqnkbbrn	261	NRBBKNQR
603	RQNKBRNB	rqnkbrnb	257	BNRBKNQR
604	RBQNKRBN	rbqnkrbn	268	NBRKNQBR
605	RQNBKRBN	rqnbkrbn	264	NBRKBNQR
606	RQNKRBBN	rqnkrbbn	260	NBBRKNQR
607	RQNKRNBB	rqnkrnbb	256	BBNRKNQR
608	BBRNQKRN	bbrnqkrn	255	NRKQNRBB
609	BRNBQKRN	brnbqkrn	251	NRKQBNRB
610	BRNQKBRN	brnqkbrn	247	NRBKQNRB
611	BRNQKRNB	brnqkrnb	243	BNRKQNRB
612	RBBNQKRN	rbbnqkrn	254	NRKQNBBR
613	RNBBQKRN	rnbbqkrn	250	NRKQBBNR
614	RNBQKBRN	rnbqkbrn	246	NRBKQBNR
615	RNBQKRNB	rnbqkrnb	242	BNRKQBNR
616	RBNQBKRN	rbnqbkrn	253	NRKBQNBR
617	RNQBBKRN	rnqbbkrn	249	NRKBBQNR
618	RNQKBBRN	rnqkbbrn	245	NRBBKQNR
619	RNQKBRNB	rnqkbrnb	241	BNRBKQNR
620	RBNQKRBN	rbnqkrbn	252	NBRKQNBR
621	RNQBKRBN	rnqbkrbn	248	NBRKBQNR
622	RNQKRBBN	rnqkrbbn	244	NBBRKQNR
623	RNQKRNBB	rnqkrnbb	240	BBNRKQNR
624	BBRNKQRN	bbrnkqrn	239	NRQKNRBB
625	BRNBKQRN	brnbkqrn	235	NRQKBNRB
626	BRNKQBRN	brnkqbrn	231	NRBQKNRB
627	BRNKQRNB	brnkqrnb	227	BNRQKNRB
628	RBBNKQRN	rbbnkqrn	238	NRQKNBBR
629	RNBBKQRN	rnbbkqrn	234	NRQKBBNR
630	RNBKQBRN	rnbkqbrn	230	NRBQKBNR
631	RNBKQRNB	rnbkqrnb	226	BNRQKBNR
632	RBNKBQRN	rbnkbqrn	237	NRQBKNBR
633	RNKBBQRN	rnkbbqrn	233	NRQBBKNR
634	RNKQBBRN	rnkqbbrn	229	NRBBQKNR
635	RNKQBRNB	rnkqbrnb	225	BNRBQKNR
636	RBNKQRBN	rbnkqrbn	236	NBRQKNBR
637	RNKBQRBN	rnkbqrbn	232	NBRQBKNR
638	RNKQRBBN	rnkqrbbn	228	NBBRQKNR
639	RNKQRNBB	rnkqrnbb	224	BBNRQKNR
640	BBRNKRQN	bbrnkrqn	223	NQRKNRBB
641	BRNBKRQN	brnbkrqn	219	NQRKBNRB
642	BRNKRBQN	brnkrbqn	215	NQBRKNRB
643	BRNKRQNB	brnkrqnb	211	BNQRKNRB
644	RBBNKRQN	rbbnkrqn	222	NQRKNBBR
645	RNBBKRQN	rnbbkrqn	218	NQRKBBNR
646	RNBKRBQN	rnbkrbqn	214	NQBRKBNR
647	RNBKRQNB	rnbkrqnb	210	BNQRKBNR
648	RBNKBRQN	rbnkbrqn	221	NQRBKNBR
649	RNKBBRQN	rnkbbrqn	217	NQRBBKNR
650	RNKRBBQN	rnkrbbqn	213	NQBBRKNR
651	RNKRBQNB	rnkrbqnb	209	BNQBRKNR
652	RBNKRQBN	rbnkrqbn	220	NBQRKNBR
653	RNKBRQBN	rnkbrqbn	216	NBQRBKNR
654	RNKRQBBN	rnkrqbbn	212	NBBQRKNR
655	RNKRQNBB	rnkrqnbb	208	BBNQRKNR
656	BBRNKRNQ	bbrnkrnq	207	QNRKNRBB
657	BRNBKRNQ	brnbkrnq	203	QNRKBNRB
658	BRNKRBNQ	brnkrbnq	199	QNBRKNRB
659	BRNKRNQB	brnkrnqb	195	BQNRKNRB
660	RBBNKRNQ	rbbnkrnq	206	QNRKNBBR
661	RNBBKRNQ	rnbbkrnq	202	QNRKBBNR
662	RNBKRBNQ	rnbkrbnq	198	QNBRKBNR
663	RNBKRNQB	rnbkrnqb	194	BQNRKBNR
664	RBNKBRNQ	rbnkbrnq	205	QNRBKNBR
665	RNKBBRNQ	rnkbbrnq	201	QNRBBKNR
666	RNKRBBNQ	rnkrbbnq	197	QNBBRKNR
667	RNKRBNQB	rnkrbnqb	193	BQNBRKNR
668	RBNKRNBQ	rbnkrnbq	204	QBNRKNBR
669	RNKBRNBQ	rnkbrnbq	200	QBNRBKNR
670	RNKRNBBQ	rnkrnbbq	196	QBBNRKNR
671	RNKRNQBB	rnkrnqbb	192	BBQNRKNR
672	BBQRKNNR	bbqrknnr	479	RNNKRQBB
673	BQRBKNNR	bqrbknnr	475	RNNKBRQB
674	BQRKNBNR	bqrknbnr	471	RNBNKRQB
675	BQRKNNRB	bqrknnrb	467	BRNNKRQB
676	QBBRKNNR	qbbrknnr	478	RNNKRBBQ
677	QRBBKNNR	qrbbknnr	474	RNNKBBRQ
678	QRBKNBNR	qrbknbnr	470	RNBNKBRQ
679	QRBKNNRB	qrbknnrb	466	BRNNKBRQ
680	QBRKBNNR	qbrkbnnr	477	RNNBKRBQ
681	QRKBBNNR	qrkbbnnr	473	RNNBBKRQ
682	QRKNBBNR	qrknbbnr	469	RNBBNKRQ
683	QRKNBNRB	qrknbnrb	465	BRNBNKRQ
684	QBRKNNBR	qbrknnbr	476	RBNNKRBQ
685	QRKBNNBR	qrkbnnbr	472	RBNNBKRQ
686	QRKNNBBR	qrknnbbr	468	RBBNNKRQ
687	QRKNNRBB	qrknnrbb	464	BBRNNKRQ
688	BBRQKNNR	bbrqknnr	463	RNNKQRBB
689	BRQBKNNR	brqbknnr	459	RNNKBQRB
690	BRQKNBNR	brqknbnr	455	RNBNKQRB
691	BRQKNNRB	brqknnrb	451	BRNNKQRB
692	RBBQKNNR	rbbqknnr	462	RNNKQBBR
693	RQBBKNNR	rqbbknnr	458	RNNKBBQR
694	RQBKNBNR	rqbknbnr	454	RNBNKBQR
695	RQBKNNRB	rqbknnrb	450	BRNNKBQR
696	RBQKBNNR	rbqkbnnr	461	RNNBKQBR
697	RQKBBNNR	rqkbbnnr	457	RNNBBKQR
698	RQKNBBNR	rqknbbnr	453	RNBBNKQR
699	RQKNBNRB	rqknbnrb	449	BRNBNKQR
700	RBQKNNBR	rbqknnbr	460	RBNNKQBR
701	RQKBNNBR	rqkbnnbr	456	RBNNBKQR
702	RQKNNBBR	rqknnbbr	452	RBBNNKQR
703	RQKNNRBB	rqknnrbb	448	BBRNNKQR
704	BBRKQNNR	bbrkqnnr	447	RNNQKRBB
705	BRKBQNNR	brkbqnnr	443	RNNQBKRB
706	BRKQNBNR	brkqnbnr	439	RNBNQKRB
707	BRKQNNRB	brkqnnrb	435	BRNNQKRB
708	RBBKQNNR	rbbkqnnr	446	RNNQKBBR
709	RKBBQNNR	rkbbqnnr	442	RNNQBBKR
710	RKBQNBNR	rkbqnbnr	438	RNBNQBKR
711	RKBQNNRB	rkbqnnrb	434	BRNNQBKR
712	RBKQBNNR	rbkqbnnr	445	RNNBQKBR
713	RKQBBNNR	rkqbbnnr	441	RNNBBQKR
714	RKQNBBNR	rkqnbbnr	437	RNBBNQKR
715	RKQNBNRB	rkqnbnrb	433	BRNBNQKR
716	RBKQNNBR	rbkqnnbr	444	RBNNQKBR
717	RKQBNNBR	rkqbnnbr	440	RBNNBQKR
718	RKQNNBBR	rkqnnbbr	436	RBBNNQKR
719	RKQNNRBB	rkqnnrbb	432	BBRNNQKR
720	BBRKNQNR	bbrknqnr	431	RNQNKRBB
721	BRKBNQNR	brkbnqnr	427	RNQNBKRB
722	BRKNQBNR	brknqbnr	423	RNBQNKRB
723	BRKNQNRB	brknqnrb	419	BRNQNKRB
724	RBBKNQNR	rbbknqnr	430	RNQNKBBR
725	RKBBNQNR	rkbbnqnr	426	RNQNBBKR
726	RKBNQBNR	rkbnqbnr	422	RNBQNBKR
727	RKBNQNRB	rkbnqnrb	418	BRNQNBKR
728	RBKNBQNR	rbknbqnr	429	RNQBNKBR
729	RKNBBQNR	rknbbqnr	425	RNQBBNKR
730	RKNQBBNR	rknqbbnr	421	RNBBQNKR
731	RKNQBNRB	rknqbnrb	417	BRNBQNKR
732	RBKNQNBR	rbknqnbr	428	RBNQNKBR
733	RKNBQNBR	rknbqnbr	424	RBNQBNKR
734	RKNQNBBR	rknqnbbr	420	RBBNQNKR
735	RKNQNRBB	rknqnrbb	416	BBRNQNKR
736	BBRKNNQR	bbrknnqr	415	RQNNKRBB
737	BRKBNNQR	brkbnnqr	411	RQNNBKRB
738	BRKNNBQR	brknnbqr	407	RQBNNKRB
739	BRKNNQRB	brknnqrb	403	BRQNNKRB
740	RBBKNNQR	rbbknnqr	414	RQNNKBBR
741	RKBBNNQR	rkbbnnqr	410	RQNNBBKR
742	RKBNNBQR	rkbnnbqr	406	RQBNNBKR
743	RKBNNQRB	rkbnnqrb	402	BRQNNBKR
744	RBKNBNQR	rbknbnqr	413	RQNBNKBR
745	RKNBBNQR	rknbbnqr	409	RQNBBNKR
746	RKNNBBQR	rknnbbqr	405	RQBBNNKR
747	RKNNBQRB	rknnbqrb	401	BRQBNNKR
748	RBKNNQBR	rbknnqbr	412	RBQNNKBR
749	RKNBNQBR	rknbnqbr	408	RBQNBNKR
750	RKNNQBBR	rknnqbbr	404	RBBQNNKR
751	RKNNQRBB	rknnqrbb	400	BBRQNNKR
752	BBRKNNRQ	bbrknnrq	399	QRNNKRBB
753	BRKBNNRQ	brkbnnrq	395	QRNNBKRB
754	BRKNNBRQ	brknnbrq	391	QRBNNKRB
755	BRKNNRQB	brknnrqb	387	BQRNNKRB
756	RBBKNNRQ	rbbknnrq	398	QRNNKBBR
757	RKBBNNRQ	rkbbnnrq	394	QRNNBBKR
758	RKBNNBRQ	rkbnnbrq	390	QRBNNBKR
759	RKBNNRQB	rkbnnrqb	386	BQRNNBKR
760	RBKNBNRQ	rbknbnrq	397	QRNBNKBR
761	RKNBBNRQ	rknbbnrq	393	QRNBBNKR
762	RKNNBBRQ	rknnbbrq	389	QRBBNNKR
763	RKNNBRQB	rknnbrqb	385	BQRBNNKR
764	RBKNNRBQ	rbknnrbq	396	QBRNNKBR
765	RKNBNRBQ	rknbnrbq	392	QBRNBNKR
766	RKNNRBBQ	rknnrbbq	388	QBBRNNKR
767	RKNNRQBB	rknnrqbb	384	BBQRNNKR
768	BBQRKNRN	bbqrknrn	191	NRNKRQBB
769	BQRBKNRN	bqrbknrn	187	NRNKBRQB
770	BQRKNBRN	bqrknbrn	183	NRBNKRQB
771	BQRKNRNB	bqrknrnb	179	BNRNKRQB
772	QBBRKNRN	qbbrknrn	190	NRNKRBBQ
773	QRBBKNRN	qrbbknrn	186	NRNKBBRQ
774	QRBKNBRN	qrbknbrn	182	NRBNKBRQ
775	QRBKNRNB	qrbknrnb	178	BNRNKBRQ
776	QBRKBNRN	qbrkbnrn	189	NRNBKRBQ
777	QRKBBNRN	qrkbbnrn	185	NRNBBKRQ
778	QRKNBBRN	qrknbbrn	181	NRBBNKRQ
779	QRKNBRNB	qrknbrnb	177	BNRBNKRQ
780	QBRKNRBN	qbrknrbn	188	NBRNKRBQ
781	QRKBNRBN	qrkbnrbn	184	NBRNBKRQ
782	QRKNRBBN	qrknrbbn	180	NBBRNKRQ
783	QRKNRNBB	qrknrnbb	176	BBNRNKRQ
784	BBRQKNRN	bbrqknrn	175	NRNKQRBB
785	BRQBKNRN	brqbknrn	171	NRNKBQRB
786	BRQKNBRN	brqknbrn	167	NRBNKQRB
787	BRQKNRNB	brqknrnb	163	BNRNKQRB
788	RBBQKNRN	rbbqknrn	174	NRNKQBBR
789	RQBBKNRN	rqbbknrn	170	NRNKBBQR
790	RQBKNBRN	rqbknbrn	166	NRBNKBQR
791	RQBKNRNB	rqbknrnb	162	BNRNKBQR
792	RBQKBNRN	rbqkbnrn	173	NRNBKQBR
793	RQKBBNRN	rqkbbnrn	169	NRNBBKQR
794	RQKNBBRN	rqknbbrn	165	NRBBNKQR
795	RQKNBRNB	rqknbrnb	161	BNRBNKQR
796	RBQKNRBN	rbqknrbn	172	NBRNKQBR
797	RQKBNRBN	rqkbnrbn	168	NBRNBKQR
798	RQKNRBBN	rqknrbbn	164	NBBRNKQR
799	RQKNRNBB	rqknrnbb	160	BBNRNKQR
800	BBRKQNRN	bbrkqnrn	159	NRNQKRBB
801	BRKBQNRN	brkbqnrn	155	NRNQBKRB
802	BRKQNBRN	brkqnbrn	151	NRBNQKRB
803	BRKQNRNB	brkqnrnb	147	BNRNQKRB
804	RBBKQNRN	rbbkqnrn	158	NRNQKBBR
805	RKBBQNRN	rkbbqnrn	154	NRNQBBKR
806	RKBQNBRN	rkbqnbrn	150	NRBNQBKR
807	RKBQNRNB	rkbqnrnb	146	BNRNQBKR
808	RBKQBNRN	rbkqbnrn	157	NRNBQKBR
809	RKQBBNRN	rkqbbnrn	153	NRNBBQKR
810	RKQNBBRN	rkqnbbrn	149	NRBBNQKR
811	RKQNBRNB	rkqnbrnb	145	BNRBNQKR
812	RBKQNRBN	rbkqnrbn	156	NBRNQKBR
813	RKQBNRBN	rkqbnrbn	152	NBRNBQKR
814	RKQNRBBN	rkqnrbbn	148	NBBRNQKR
815	RKQNRNBB	rkqnrnbb	144	BBNRNQKR
816	BBRKNQRN	bbrknqrn	143	NRQNKRBB
817	BRKBNQRN	brkbnqrn	139	NRQNBKRB
818	BRKNQBRN	brknqbrn	135	NRBQNKRB
819	BRKNQRNB	brknqrnb	131	BNRQNKRB
820	RBBKNQRN	rbbknqrn	142	NRQNKBBR
821	RKBBNQRN	rkbbnqrn	138	NRQNBBKR
822	RKBNQBRN	rkbnqbrn	134	NRBQNBKR
823	RKBNQRNB	rkbnqrnb	130	BNRQNBKR
824	RBKNBQRN	rbknbqrn	141	NRQBNKBR
825	RKNBBQRN	rknbbqrn	137	NRQBBNKR
826	RKNQBBRN	rknqbbrn	133	NRBBQNKR
827	RKNQBRNB	rknqbrnb	129	BNRBQNKR
828	RBKNQRBN	rbknqrbn	140	NBRQNKBR
829	RKNBQRBN	rknbqrbn	136	NBRQBNKR
830	RKNQRBBN	rknqrbbn	132	NBBRQNKR
831	RKNQRNBB	rknqrnbb	128	BBNRQNKR
832	BBRKNRQN	bbrknrqn	127	NQRNKRBB
833	BRKBNRQN	brkbnrqn	123	NQRNBKRB
834	BRKNRBQN	brknrbqn	119	NQBRNKRB
835	BRKNRQNB	brknrqnb	115	BNQRNKRB
836	RBBKNRQN	rbbknrqn	126	NQRNKBBR
837	RKBBNRQN	rkbbnrqn	122	NQRNBBKR
838	RKBNRBQN	rkbnrbqn	118	NQBRNBKR
839	RKBNRQNB	rkbnrqnb	114	BNQRNBKR
840	RBKNBRQN	rbknbrqn	125	NQRBNKBR
841	RKNBBRQN	rknbbrqn	121	NQRBBNKR
842	RKNRBBQN	rknrbbqn	117	NQBBRNKR
843	RKNRBQNB	rknrbqnb	113	BNQBRNKR
844	RBKNRQBN	rbknrqbn	124	NBQRNKBR
845	RKNBRQBN	rknbrqbn	120	NBQRBNKR
846	RKNRQBBN	rknrqbbn	116	NBBQRNKR
847	RKNRQNBB	rknrqnbb	112	BBNQRNKR
848	BBRKNRNQ	bbrknrnq	111	QNRNKRBB
849	BRKBNRNQ	brkbnrnq	107	QNRNBKRB
850	BRKNRBNQ	brknrbnq	103	QNBRNKRB
851	BRKNRNQB	brknrnqb	099	BQNRNKRB
852	RBBKNRNQ	rbbknrnq	110	QNRNKBBR
853	RKBBNRNQ	rkbbnrnq	106	QNRNBBKR
854	RKBNRBNQ	rkbnrbnq	102	QNBRNBKR
855	RKBNRNQB	rkbnrnqb	098	BQNRNBKR
856	RBKNBRNQ	rbknbrnq	109	QNRBNKBR
857	RKNBBRNQ	rknbbrnq	105	QNRBBNKR
858	RKNRBBNQ	rknrbbnq	101	QNBBRNKR
859	RKNRBNQB	rknrbnqb	097	BQNBRNKR
860	RBKNRNBQ	rbknrnbq	108	QBNRNKBR
861	RKNBRNBQ	rknbrnbq	104	QBNRBNKR
862	RKNRNBBQ	rknrnbbq	100	QBBNRNKR
863	RKNRNQBB	rknrnqbb	096	BBQNRNKR
864	BBQRKRNN	bbqrkrnn	095	NNRKRQBB
865	BQRBKRNN	bqrbkrnn	091	NNRKBRQB
866	BQRKRBNN	bqrkrbnn	087	NNBRKRQB
867	BQRKRNNB	bqrkrnnb	083	BNNRKRQB
868	QBBRKRNN	qbbrkrnn	094	NNRKRBBQ
869	QRBBKRNN	qrbbkrnn	090	NNRKBBRQ
870	QRBKRBNN	qrbkrbnn	086	NNBRKBRQ
871	QRBKRNNB	qrbkrnnb	082	BNNRKBRQ
872	QBRKBRNN	qbrkbrnn	093	NNRBKRBQ
873	QRKBBRNN	qrkbbrnn	089	NNRBBKRQ
874	QRKRBBNN	qrkrbbnn	085	NNBBRKRQ
875	QRKRBNNB	qrkrbnnb	081	BNNBRKRQ
876	QBRKRNBN	qbrkrnbn	092	NBNRKRBQ
877	QRKBRNBN	qrkbrnbn	088	NBNRBKRQ
878	QRKRNBBN	qrkrnbbn	084	NBBNRKRQ
879	QRKRNNBB	qrkrnnbb	080	BBNNRKRQ
880	BBRQKRNN	bbrqkrnn	079	NNRKQRBB
881	BRQBKRNN	brqbkrnn	075	NNRKBQRB
882	BRQKRBNN	brqkrbnn	071	NNBRKQRB
883	BRQKRNNB	brqkrnnb	067	BNNRKQRB
884	RBBQKRNN	rbbqkrnn	078	NNRKQBBR
885	RQBBKRNN	rqbbkrnn	074	NNRKBBQR
886	RQBKRBNN	rqbkrbnn	070	NNBRKBQR
887	RQBKRNNB	rqbkrnnb	066	BNNRKBQR
888	RBQKBRNN	rbqkbrnn	077	NNRBKQBR
889	RQKBBRNN	rqkbbrnn	073	NNRBBKQR
890	RQKRBBNN	rqkrbbnn	069	NNBBRKQR
891	RQKRBNNB	rqkrbnnb	065	BNNBRKQR
892	RBQKRNBN	rbqkrnbn	076	NBNRKQBR
893	RQKBRNBN	rqkbrnbn	072	NBNRBKQR
894	RQKRNBBN	rqkrnbbn	068	NBBNRKQR
895	RQKRNNBB	rqkrnnbb	064	BBNNRKQR
896	BBRKQRNN	bbrkqrnn	063	NNRQKRBB
897	BRKBQRNN	brkbqrnn	059	NNRQBKRB
898	BRKQRBNN	brkqrbnn	055	NNBRQKRB
899	BRKQRNNB	brkqrnnb	051	BNNRQKRB
900	RBBKQRNN	rbbkqrnn	062	NNRQKBBR
901	RKBBQRNN	rkbbqrnn	058	NNRQBBKR
902	RKBQRBNN	rkbqrbnn	054	NNBRQBKR
903	RKBQRNNB	rkbqrnnb	050	BNNRQBKR
904	RBKQBRNN	rbkqbrnn	061	NNRBQKBR
905	RKQBBRNN	rkqbbrnn	057	NNRBBQKR
906	RKQRBBNN	rkqrbbnn	053	NNBBRQKR
907	RKQRBNNB	rkqrbnnb	049	BNNBRQKR
908	RBKQRNBN	rbkqrnbn	060	NBNRQKBR
909	RKQBRNBN	rkqbrnbn	056	NBNRBQKR
910	RKQRNBBN	rkqrnbbn	052	NBBNRQKR
911	RKQRNNBB	rkqrnnbb	048	BBNNRQKR
912	BBRKRQNN	bbrkrqnn	047	NNQRKRBB
913	BRKBRQNN	brkbrqnn	043	NNQRBKRB
914	BRKRQBNN	brkrqbnn	039	NNBQRKRB
915	BRKRQNNB	brkrqnnb	035	BNNQRKRB
916	RBBKRQNN	rbbkrqnn	046	NNQRKBBR
917	RKBBRQNN	rkbbrqnn	042	NNQRBBKR
918	RKBRQBNN	rkbrqbnn	038	NNBQRBKR
919	RKBRQNNB	rkbrqnnb	034	BNNQRBKR
920	RBKRBQNN	rbkrbqnn	045	NNQBRKBR
921	RKRBBQNN	rkrbbqnn	041	NNQBBRKR
922	RKRQBBNN	rkrqbbnn	037	NNBBQRKR
923	RKRQBNNB	rkrqbnnb	033	BNNBQRKR
924	RBKRQNBN	rbkrqnbn	044	NBNQRKBR
925	RKRBQNBN	rkrbqnbn	040	NBNQBRKR
926	RKRQNBBN	rkrqnbbn	036	NBBNQRKR
927	RKRQNNBB	rkrqnnbb	032	BBNNQRKR
928	BBRKRNQN	bbrkrnqn	031	NQNRKRBB
929	BRKBRNQN	brkbrnqn	027	NQNRBKRB
930	BRKRNBQN	brkrnbqn	023	NQBNRKRB
931	BRKRNQNB	brkrnqnb	019	BNQNRKRB
932	RBBKRNQN	rbbkrnqn	030	NQNRKBBR
933	RKBBRNQN	rkbbrnqn	026	NQNRBBKR
934	RKBRNBQN	rkbrnbqn	022	NQBNRBKR
935	RKBRNQNB	rkbrnqnb	018	BNQNRBKR
936	RBKRBNQN	rbkrbnqn	029	NQNBRKBR
937	RKRBBNQN	rkrbbnqn	025	NQNBBRKR
938	RKRNBBQN	rkrnbbqn	021	NQBBNRKR
939	RKRNBQNB	rkrnbqnb	017	BNQBNRKR
940	RBKRNQBN	rbkrnqbn	028	NBQNRKBR
941	RKRBNQBN	rkrbnqbn	024	NBQNBRKR
942	RKRNQBBN	rkrnqbbn	020	NBBQNRKR
943	RKRNQNBB	rkrnqnbb	016	BBNQNRKR
944	BBRKRNNQ	bbrkrnnq	015	QNNRKRBB
945	BRKBRNNQ	brkbrnnq	011	QNNRBKRB
946	BRKRNBNQ	brkrnbnq	007	QNBNRKRB
947	BRKRNNQB	brkrnnqb	003	BQNNRKRB
948	RBBKRNNQ	rbbkrnnq	014	QNNRKBBR
949	RKBBRNNQ	rkbbrnnq	010	QNNRBBKR
950	RKBRNBNQ	rkbrnbnq	006	QNBNRBKR
951	RKBRNNQB	rkbrnnqb	002	BQNNRBKR
952	RBKRBNNQ	rbkrbnnq	013	QNNBRKBR
953	RKRBBNNQ	rkrbbnnq	009	QNNBBRKR
954	RKRNBBNQ	rkrnbbnq	005	QNBBNRKR
955	RKRNBNQB	rkrnbnqb	001	BQNBNRKR
956	RBKRNNBQ	rbkrnnbq	012	QBNNRKBR
957	RKRBNNBQ	rkrbnnbq	008	QBNNBRKR
958	RKRNNBBQ	rkrnnbbq	004	QBBNNRKR
959	RKRNNQBB	rkrnnqbb	000	BBQNNRKR


================================================
FILE: files/misc/escape_and_missing_quotes.pgn
================================================
[Event "Test \"quotes\" \\ and escaping and missing quotes in the FEN tag"]
[Site "local"]
[Date "2021.04.01"]
[Round "1"]
[White "Jimmy \"The Pawn\" Smith"]
[Black "Lc0 \\ Stockfish"]
[Result "*"]
[FEN rnbqkb1r/ppp1pppp/5n2/3p4/3P1B2/5N2/PPP1PPPP/RN1QKB1R b KQkq - 3 3]
[SetUp "1"]

3... c5 {EV: 47.0%, N: 63.14% of 63.4k} 4. e3 {EV: 53.3%, N: 95.14% of 66.9k} e6
{EV: 47.4%, N: 67.90% of 115k} 5. Nbd2 {EV: 53.1%, N: 67.58% of 96.2k} Qb6 {EV:
47.8%, N: 77.32% of 198k} 6. Rb1 {EV: 52.7%, N: 90.85% of 166k} *


================================================
FILE: files/misc/nibbler_menu_translations_template.json
================================================
{
	"LANGUAGE_NAME_FIXME": {						// The language name itself, in its own language.
		"File": "TODO",									// As in: "file menu"
			"About": "TODO",
			"New game": "TODO",
			"New 960 game": "TODO",							// New game of Chess960
			"Open PGN...": "TODO",							// Portable game notation file
			"Load FEN / PGN from clipboard": "TODO",		// Examines clipboard for valid FEN or PGN data
			"Save this game...": "TODO",					// Saves as PGN
			"Write PGN to clipboard": "TODO",
			"PGN saved statistics": "TODO",					// Has submenu of which statistics to save to PGN variations...
				"EV": "TODO",									// ... expected value
				"Centipawns": "TODO",							// ...
				"N (%)": "TODO",								// ... N (node count, percent of total)
				"N (absolute)": "TODO",							// ... N (absolute count)
				"...out of total": "TODO",						// ... display total N
				"Depth (A/B only)": "TODO",						// ... search depth, only displayed if alphabeta-style engine
			"Cut": "TODO",
			"Copy": "TODO",
			"Paste": "TODO",
			"Quit": "TODO",
		"Tree": "TODO",									// Game tree manipulation functions
			"Play engine choice": "TODO",					// Adds engine's choice of move to game tree / goes to it if already present
				"1st": "TODO",									// ... i.e. play engine's top choice
				"2nd": "TODO",									// ... i.e. play engine's 2nd choice
				"3rd": "TODO",									// ... i.e. play engine's 3rd choice
				"4th": "TODO",									// ... i.e. play engine's 3rd choice
			"Root": "TODO",									// Move to root node in game tree
			"End": "TODO",									// Move to final node in (this line of) game tree
			"Backward": "TODO",								// Backward one move in game tree
			"Forward": "TODO",								// Forward one move in game tree
			"Previous sibling": "TODO",						// Go to previous sibling in game tree (if extant)
			"Next sibling": "TODO",							// Go to next sibling in game tree (if extant)
			"Return to main line": "TODO",
			"Promote line to main line": "TODO",
			"Promote line by 1 level": "TODO",
			"Delete node": "TODO",
			"Delete children": "TODO",						// i.e. child nodes in game tree
			"Delete siblings": "TODO",
			"Delete ALL other lines": "TODO",
			"Show PGN games list": "TODO",					// For when a PGN file has multiple games
			"Escape": "TODO",								// Escape key function - "escape" out of this screen to main screen
		"Analysis": "TODO",
			"Go": "TODO",									// Starts the engine running
			"Go and lock engine": "TODO",					// Starts the engine running on current position, and does NOT change the engine position even if GUI position changes
			"Return to locked position": "TODO",			// Returns to the position the engine is analysing, IF the "go and lock engine" item was used
			"Halt": "TODO",									// Stops the engine
			"Auto-evaluate line": "TODO",					// Makes engine analyse a whole line of the game tree
			"Auto-evaluate line, backwards": "TODO",		// Makes engine analyse a whole line of the game tree, backwards
			"Show focus (searchmoves) buttons": "TODO",		// Shows buttons next to each legal move to allow the engine to focus analysis on selected moves
			"Clear focus": "TODO",							// Deselects all such buttons
			"Invert focus": "TODO",							// Inverts all such buttons
			"Winrate POV": "TODO",							// Winrate (really EV) displayed from whose point of view?
				"Current": "TODO",								// ... displayed from current player's
				"White": "TODO",								// ... displayed from White's point of view
				"Black": "TODO",								// ... displayed from Black's point of view
			"Centipawn POV": "TODO",						// Centipawn scores displayed from whose point of view? (submenu not in this list)
			"Win / draw / loss POV": "TODO",				// WDL statistic displayed from whose point of view? (submenu not in this list)
			"PV clicks": "TODO",							// What to do when user clicks on a displayed principal variation (PV)
				"Do nothing": "TODO",							// ... nothing
				"Go there": "TODO",								// ... move to that position
				"Add to tree": "TODO",							// ... add PV to game tree
			"Write infobox to clipboard": "TODO",
			"Forget all analysis": "TODO",
		"Display": "TODO",								// Has large submenu of display options
			"Flip board": "TODO",
			"Arrows": "TODO",
			"Piece-click spotlight": "TODO",				// Displays arrows showing legal moves, when a piece is clicked
			"Always show actual move (if known)": "TODO",	// Displays arrow representing move actually played in the game record (if known)
			"...with unique colour": "TODO",				// ... displays that arrow with a unique colour
			"...with outline": "TODO",						// ... and an outline
			"Arrowhead type": "TODO",						// Arrows display what statistic?
				"Winrate": "TODO",								// ... (really expected value)
				"Node %": "TODO",								// ... What % of examined nodes (examined by the engine) were this move?
				"Policy": "TODO",								// Policy / prior
				"MultiPV rank": "TODO",							// Ordinal rank in engine's preferred moves
				"Moves Left Head": "TODO",						// Output of engine neural network head estimating "moves left before game ends"
			"Arrow filter (Lc0)": "TODO",					// Filter criteria for displaying / not displaying arrows (when using Lc0 engine)
				"All moves": "TODO",							// ... always display all arrows
				"Top move": "TODO",								// ... display arrow for top move only
			"Arrow filter (others)": "TODO",				// Filter criteria for displaying / not displaying arrows (when using Stockfish or similar)
				"Diff < 15%": "TODO",							// ... EV was within 15% of best move
				"Diff < 10%": "TODO",							// ... EV was within 10% of best move
				"Diff < 5%": "TODO",							// ... EV was within 5% of best move
			"Infobox stats": "TODO",						// Stats to display in info pane
				"N - nodes (%)": "TODO",						// ...
				"N - nodes (absolute)": "TODO",					// ...
				"P - policy": "TODO",							// ...
				"V - static evaluation": "TODO",				// ...
				"Q - evaluation": "TODO",						// ...
				"U - uncertainty": "TODO",						// ...
				"S - search priority": "TODO",					// ...
				"M - moves left": "TODO",						// ...
				"WDL - win / draw / loss": "TODO",				// ...
				"Linebreak before stats": "TODO",
			"PV move numbers": "TODO",						// Display move numbers when writing principal variation e.g. 40. Kc2 Qf1 41. Rd8 etc etc
			"Online API": "TODO",							// Access an online API to display real-world game outcome stats
				"None": "TODO",									// ... Don't access API
				"ChessDB.cn evals": "TODO",						// ... Use ChessDB.cn
				"Lichess results (masters)": "TODO",			// ... Use results from Lichess master player database
				"Lichess results (plebs)": "TODO",				// ... Use results from Lichess user database
			"Allow API after move 25": "TODO",
			"Draw PV on mouseover": "TODO",
			"Draw PV method": "TODO",						// How to draw a PV when mouse-over-ing part of it
				"Animate": "TODO",								// Animate a series of moves
				"Single move": "TODO",							// Show exactly the position after the move being hovered over
				"Final position": "TODO",						// Show the final position in the sequence
			"Pieces": "TODO",								// Icons / images to use for piece display
				"Choose pieces folder...": "TODO",				// ... Select folder containing such images
				"Default": "TODO",								// ... Just use default images
				"About custom pieces": "TODO",					// Displays text explaining how to create custom images
			"Background": "TODO",							// Background to use for board display
				"Choose background image...": "TODO",			// ... Select image file for background
			"Book frequency arrows": "TODO",				// Dispay arrows representing move frequency in opening book file
			"Lichess frequency arrows": "TODO",				// Dispay arrows representing move frequency in Lichess database
		"Sizes": "TODO",								// Adjust sizes of displayed things
			"Infobox font": "TODO",							// Adjust SIZE of font in info pane
			"Move history font": "TODO",					// Adjust SIZE of font in game tree pane
			"Board": "TODO",								// Adjust SIZE of board
				"Giant": "TODO",								// ...
				"Large": "TODO",								// ...
				"Medium": "TODO",								// ...
				"Small": "TODO",								// ...
			"Graph": "TODO",								// Adjust SIZE (height) of graph displaying winrate
			"Graph lines": "TODO",							// Adjust SIZE of graph line
			"I want other size options!": "TODO",			// Displays text explaining how to set custom size options
		"Engine": "TODO",								// Top level menu item for engine settings
			"Choose engine...": "TODO",						// Choose engine via file picker
			"Choose known engine...": "TODO",				// Choose engine from a list of previously used engines
			"Weights": "TODO",								// Choose neural net weight file
				"Lc0 WeightsFile...": "TODO",					// ... For Lc0
				"Stockfish EvalFile...": "TODO",				// ... For Stockfish
				"Set to <auto>": "TODO",						// ... Just allow engine to use default
			"Backend": "TODO",								// Backend choices for Lc0 engine (submenu not in this list)
			"Choose Syzygy path...": "TODO",				// Find endgame tablebase folder
			"Unset": "TODO",								// Clear endgame tablebase folder
			"Limit - normal": "TODO",						// Node limit for engine in normal circumstances
				"Unlimited": "TODO",							// ... no node limit (note: other options exist but are not in this list)
				"Up slightly": "TODO",							// ... increase node limit slightly
				"Down slightly": "TODO",						// ... decrease node limit slightly
			"Limit - auto-eval / play": "TODO",				// Node limit for engine when playing or evaluating a game
			"Limit by time instead of nodes": "TODO",		// Consider node limit setting as a time limit in milliseconds instead
			"Threads": "TODO",								// How many threads engine should used
				"Warning about threads": "TODO",				// ... Displays a text warning about when not to use too many threads
			"Hash": "TODO",									// Hash size (submenu not in this list)
				"I want other hash options!": "TODO",			// ... Displays text about how to have a custom hash setting
			"MultiPV": "TODO",								// How many lines a Stockfish-like engine should consider at once (multipv setting)
			"Contempt Mode": "TODO",
				"White analysis": "TODO",						// ... Contempt from White's point of view
				"Black analysis": "TODO",						// ... Contempt from Black's point of view
			"Contempt": "TODO",								// Numerical contempt value (submenu not in this list)
			"WDL Calibration Elo": "TODO",					// Technical contempt setting
				"Use default WDL": "TODO",						// ... Technical contempt setting
			"WDL Eval Objectivity": "TODO",					// Technical contempt setting
				"Yes": "TODO",									// ...
				"No": "TODO",									// ...
			"Score Type": "TODO",							// Technical contempt setting
			"Custom scripts": "TODO",
				"How to add scripts": "TODO",					// ... Displays text explanation
				"Show scripts folder": "TODO",					// ... Displays folder in filesystem
			"Restart engine": "TODO",
			"Soft engine reset": "TODO",					// Tells engine to reset cache etc, without actually restarting
		"Play": "TODO",									// Top level menu item for playing against the engine
			"Play this colour": "TODO",						// Engine itself plays current colour from now on
			"Start self-play": "TODO",						// Engine plays against itself
			"Use Polyglot book...": "TODO",
			"Use PGN book...": "TODO",
			"Unload book / abort load": "TODO",
			"Book depth limit": "TODO",						// What depth to stop using the book
			"Temperature": "TODO",							// Temperature for Lc0 neural network
			"Temp Decay Moves": "TODO",						// Technical temperature-related setting (numerical options present, but not in this list)
				"Infinite": "TODO",								// ...
			"About play modes": "TODO",						// Displays text
		"Dev": "TODO",									// Top level menu for Dev / technical settings
			"Toggle Developer Tools": "TODO",
			"Toggle Debug CSS": "TODO",						// Shows red border around HTML elements
			"Permanently enable save": "TODO",				// Allows save function to be used
			"Show config.json": "TODO",						// Displays config file in filesystem
			"Show engines.json": "TODO",					// Displays config file in filesystem
			"Reload engines.json (and restart engine)": "TODO",
			"Random move": "TODO",							// Makes a random move from legal possibilities
			"Disable hardware acceleration for GUI": "TODO",
			"Spin rate": "TODO",							// How frequently to update GUI
				"Frenetic": "TODO",								// ...
				"Fast": "TODO",									// ...
				"Normal": "TODO",								// ...
				"Relaxed": "TODO",								// ...
				"Lazy": "TODO",									// ...
			"Show engine state": "TODO",					// Shows debug info about engine
			"List sent options": "TODO",					// Shows a list of all options ever sent to the engine
			"Show error log": "TODO",						// Shows engine stderr
			"Hacks and kludges": "TODO",					// Submenu with specific hacks
				"Allow arbitrary scripts": "TODO",				// ...
				"Accept any file size": "TODO",					// ...
				"Allow stopped analysis": "TODO",				// ...
				"Never hide focus buttons": "TODO",				// ...
				"Never grayout move info": "TODO",				// ...
				"Use lowerbound / upperbound info": "TODO",		// ...
				"Suppress ucinewgame": "TODO",					// ... do not send ucinewgame token to engine
			"Log RAM state to console": "TODO",
			"Fire GC": "TODO",								// Call JS garbage collector
			"Logging": "TODO",
				"Use logfile...": "TODO",						// ...
				"Disable logging": "TODO",						// ...
				"Clear log when opening": "TODO",				// ...
				"Use unique logfile each time": "TODO",			// ...
				"Log illegal moves": "TODO",					// ...
				"Log positions": "TODO",						// ...
				"Log info lines": "TODO",						// ...
				"...including useless lines": "TODO",			// ...
		"Language": "TODO",

		"RESTART_REQUIRED": "TODO"						// Special item - translate from "The GUI must now be restarted."
	}
}


================================================
FILE: files/misc/pathological.pgn
================================================
[Event "Jeopardy Match 12"]
[Site "brinanSee"]
[Date "2019.06.15"]
[Round "4"]
[White "lc0.net.42518"]
[Black "Stockfish.dev 19061000"]
[Result "1/2-1/2"]
[ECO "D31"]
[Opening "Semi-Slav"]
[Variation "Marshall Gambit, 8.Ne2"]
[TimeControl "5100+1"]
[Termination "normal"]
[PlyCount "304"]

1. d4 (d4 Nf6 c4 e6 g3 Bb4 Bd2 Be7 Bg2 d5 Nf3 O-O O-O c6 Qc2 Nbd7 Rd1 b6
Bf4 Ba6 Nbd2 Nh5 Be3 Rc8 Rac1 h6 Ne5 Nhf6 Qa4 Nb8 Qb3 Nbd7 h3 Bb7 Qa4 a6
cxd5) {+0.27/13 89} d5 {0.00/1} 2. c4 (c4 e6 Nc3 Nf6 cxd5 exd5 Bg5 Be7 e3
h6 Bh4 O-O Bd3 c6 Nge2 Ne4 Bxe7 Qxe7 Bxe4 dxe4 O-O Nd7 d5 Nf6 dxc6 bxc6 Qa4
Rb8) {+0.32/13 52} e6 {0.00/1 0} 3. Nc3 (Nc3 Nf6 cxd5 exd5 Bg5 Be7 e3 h6
Bh4 O-O Bd3 c6 Nge2 Ne4 Bxe7 Qxe7 Bxe4 dxe4 O-O Nd7 d5 f5 Nf4 Ne5 Qb3 Qf7
Rfd1) {+0.32/15 62} c6 {0.00/1 0} 4. e4 (e4 dxe4 Nxe4 Bb4 Bd2 Qxd4 Bxb4
Qxe4 Ne2 Ne7 Qd2 c5 Bxc5 Nbc6 Rd1 O-O Qf4 Qxf4 Nxf4 b6 Ba3 Re8 f3 e5 Nd5
Nxd5 cxd5 Nd4 Kf2 Rd8 f4 Bg4 Rd2 Rxd5 Bc4 Rd7 fxe5 Rc8 b3 b5) {+0.42/18 94}
dxe4 {0.00/1 0} 5. Nxe4 (Nxe4 Bb4 Bd2 Qxd4 Bxb4 Qxe4 Ne2 Nd7 Qd6 Qe5 O-O-O
Qxd6 Bxd6 Nh6 Ng3 f5 Bd3 Kf7 Rhe1 Re8 Bc2 g6 h3 Kg7 Bb4 e5 f4 e4) {+0.41/20
41} Bb4+ {0.00/1 0} 6. Bd2 (Bd2 Qxd4 Bxb4 Qxe4 Ne2 Nd7 Qd6 Qe5 O-O-O Qxd6
Bxd6 b6 g4 Bb7 Bg2 O-O-O Rhe1 Ngf6 g5 Ng4 Ng3 c5 Bxb7 Kxb7 Ne4 f5 gxf6
Ndxf6 Nxf6 gxf6 Rxe6 Nxf2 Rd2 Ng4) {+0.38/20 63} Qxd4 {0.00/1} 7. Bxb4
(Bxb4 Qxe4 Ne2 Nd7 Qd6 Qe5 O-O-O Qxd6 Bxd6 b6 g4 Bb7 Bg2 O-O-O Rhe1 Ngf6 g5
Ng4 Ng3 c5 Bxb7 Kxb7 Ne4 f5 gxf6 Ndxf6 Nxf6 gxf6 Rxe6 Nxf2 Rd2 Ng4)
{+0.38/15 3} Qxe4+ {0.00/1 0} 8. Ne2 (Ne2 Nd7 Qd6 Qe5 O-O-O Qxd6 Bxd6 Nh6
Ng3 f5 Bd3 g6 Rhe1 Kf7 Bc2 Re8 f4 Kg8 Bb4 Nf7 Bc3 Kf8 Nf1 e5 fxe5 Ndxe5 b3)
{+0.32/18 117} Nd7 {0.00/1 0} 9. Qd6 (Qd6 Qe5 O-O-O Qxd6 Bxd6 Nh6 Ng3 f5
Bd3 g6 Rhe1 Kf7 Bc2 Re8 f4 b6 Ne2 Ba6 b3 c5 Ng1 Bb7 Nh3 Kg8 Ng5) {+0.28/18
58} Qe5 {0.00/1 0} 10. O-O-O (O-O-O Qxd6 Bxd6 Nh6 Ng3 f5 Bd3 g6 Rhe1 Kf7
Nh1 Re8 f3 Kg8 Nf2 Nf7 Bb4 e5 Bc2 a5 Bc3 Nc5 b3 b6 h4 Ra7 h5 Rae7)
{+0.23/16 154} Qxd6 {0.00/1 0} 11. Bxd6 (Bxd6 Nh6 Ng3 f5 Bd3 g6 Rhe1 Kf7
Nh1 Re8 f3 Kg8 Nf2 e5 Bc2 Nf7 Bb4 a5 Bc3 Nc5 b3 b6 h4 Ra7 h5 Rae7)
{+0.22/15 19} Nh6 {0.00/1 0} 12. Ng3 (Ng3 f5 Bd3 g6 Rhe1 Kf7 Nh1 Re8 f3 Kg8
Bb4 e5 Nf2 Nf7 Bc2 a5 Bc3 Nc5 b3 b6 h4 Ra7 h5 Rae7 hxg6) {+0.19/14 175} f5
{0.00/1 0} 13. Bd3 (Bd3 g6 Rhe1 Kf7 Nh1 Re8 f3 Kg8 Bb4 a5 Bc3 e5 Nf2 Nf7
Bc2 Nc5 b3 b6 h4 Ra7 h5 Rae7 hxg6 hxg6) {+0.17/14 89} g6 {0.00/1 0} 14.
Rhe1 (Rhe1 Kf7 Nh1 Re8 f3 Kg8 Bb4 a5 Bc3 e5 Nf2 Nf7 Bc2 Nc5 Bd4 Nd7 Bc3 Nc5
Bd4 Nd7 Bc3) {+0.14/14 146} Kf7 {0.00/1 0} 15. Nh1 (Nh1 Re8 f3 Kg8 Bb4 a5
Bc3 e5 Nf2 Nf7 Bc2 Nc5 b3 b6 h4 Ra7 h5 Rae7 hxg6 hxg6 g4 Kf8 Rg1) {+0.12/13
271} a5 (a5 f3 Re8 Ba3 Kg7 h3 Nf7 g4 Nf6 b3 Ng5 Bb2 Kf7 f4 Nxh3 gxf5 gxf5
Rf1 Rg8 Rf3 Ng1 Rff1) {0.00/41 680} 16. Bf4 (Bf4 Ng4 f3 Ngf6 Nf2 e5 Bd2 Re8
Bc3 a4 Bc2 b5 g4 bxc4 gxf5 gxf5 Bxf5 Nc5 Bc2 a3 bxa3 Nd5 Bb4 Nxb4 axb4 Na6
a3) {+0.33/12 86} Ng8 (Ng8 f3 Ngf6 Nf2 Re8 Bg5 a4 g4 b5 cxb5 cxb5 gxf5 gxf5
Bxb5 Ra5 Bxf6 Rxb5 Bc3 e5 Rd6 Re6 Rxe6 Kxe6 Nd3 Bb7 Nxe5 Nxe5 f4 Rc5 Rxe5
Rxe5 Bxe5 Bd5 b3 axb3 axb3 Bxb3 Kb2 Bd5 Kc3 h6 Kb4) {+0.05/35 68} 17. f3
(f3 Ngf6 Nf2 e5 Bd2 Re8 Bc3 a4 h3 h5 h4 e4 fxe4 Nc5 e5 Ng4 Nh3 Be6 Bb4 Nxd3
Rxd3 Bxc4 Rd7 Kg8 Bc3 b5 a3 c5 Rd6 b4 axb4) {+0.36/14 57} Ngf6 (Ngf6 Nf2
Re8 Bd6 b6 g4 Ba6 Nh3 Kg8 Ng5 fxg4 fxg4 e5 h3 b5 Ne4 bxc4 Nxf6 Nxf6 Bc2 Bb7
Bxe5 Nd5 Bd4 Ba6 a3 Rad8 Bc5 Rxe1 Rxe1 Nf4 Bb6 Rd3 Be3 Ng2 Bxd3 cxd3 Bd2
Nxe1 Bxe1 Kf7 Bxa5 Ke6 Kd2) {+0.01/38 53} 18. Nf2 (Nf2 e5 Bd2 Re8 Bc3 a4 h3
h5 h4 e4 fxe4 Nc5 e5 Ng4 Nh3 Be6 Bb4 Nxd3 Rxd3 Bxc4 Rd7 Kg8 Bc3 Bxa2 Nf4
Be6 Rxb7 Nf2 Rc7 a3 bxa3) {+0.40/15 14} Re8 (Re8 Bd6 b6 g4 Ba6 Nh3 Kg8 Ng5
fxg4 fxg4 e5 h3 b5 Ne4 bxc4 Nxf6 Nxf6 Bc2 Nd5 Bxe5 Bb7 Bd4 Rad8 Bc5 Rxe1
Rxe1 Kf7 Rf1 Kg8 Re1) {0.00/37 51} 19. Bd6 (Bd6 b5 cxb5 cxb5 Bxb5 Ba6 Ba4
Rec8 Kb1 Nb6 Bb3 Nfd5 Nh3 h6 Nf4 Bc4 Bxc4 Rxc4 Nd3 Nd7 Rc1 Rd4 Red1 Rd8 Bg3
Ne3 Rd2 Rd5 Bc7 Rc8 Bxa5 Nc4 Rdc2 Na3 bxa3 Rxc2 Kxc2) {+0.23/15 128} b6 (b6
g4 Ba6 Nh3 Kg8 Ng5 fxg4 fxg4 Nxg4 Bf1 e5 Bc7 Bc8 Rd6 Ra7 Rxc6 Bb7 Rd6 Bc8)
{0.00/41 0} 20. g4 (g4 Ba6 Bf1 Ra7 Nh3 e5 gxf5 gxf5 Bd3 h6 b3 e4 fxe4 Nxe4
Bxe4 Rxe4 Rxe4 fxe4 Rf1 Ke6 Bg3 b5 Nf4 Ke7 Re1 Nf6 Bh4 Kf7 Rf1) {+0.40/12
109} Ba6 (Ba6 h4 h5 gxh5 Nxh5 Nh3 e5 Ng5 Kg7 Ba3 b5 cxb5 cxb5 b4 axb4 Bxb4
Ra7 Bc2 Bc8 Bb3 Nb6 Bd6 Kf6 Kb1 Nc4 Bxc4 bxc4 Rd5 e4 fxe4 Kg7 Ka1 Ra6 Re5
Rxe5 Bxe5 Kf8 Kb2 Rb6 Kc2 Ra6 Rd1 Ke7 Kc3 Rxa2) {-0.23/36 65} 21. b3 (b3
Bb7 g5 Nh5 Be2 a4 Bc7 Bc8 f4 e5 fxe5 axb3 axb3 Nf4 Bf3 Ra7 Bd6 Ra2 Nd3 Nxd3
Rxd3 Ra1 Kd2 Rxe1 Kxe1 Nxe5 Bxe5 Rxe5 Kf2 f4 Rd6 Rxg5 Rxc6 Be6 Rxb6)
{+0.37/14 165} b5 (b5 Nh3 Kg8 Ng5 fxg4 fxg4 bxc4 bxc4 Nxg4 Bg3 Nc5 Bc2 e5
h3 Nh6 Rd6 Nf7 Nxf7 Kxf7 Rxe5 Rxe5 Bxe5 Bxc4 Rf6 Ke7 Rxc6 Nd3 Bxd3 Bxd3 Bc3
Kd7 Rc5 Bf5 Rxa5 Rxa5 Bxa5 Bxh3 a4 Kc6 Be1) {+0.40/32 44} 22. g5 (g5 bxc4
bxc4 Ng8 c5 Ne7 Bxa6 Rxa6 Nd3 Nd5 Kd2 Nb4 a3 Nxd3 Kxd3 Ra7 Rb1 e5 Kc4 e4
fxe4 Ne5 Bxe5 Rxe5 exf5 Rxf5 Rf1 Re7 Rxf5 gxf5 Rb6 Re6 Kd3 Kg6) {+0.16/13
98} Nh5 (Nh5 Bf1 bxc4 bxc4 Ra7 Be5 c5 Rd6 Re7 Bc3 Nf4 Red1 e5 Nd3 Nxd3
R1xd3 Bxc4 Rxd7 Raxd7 Rxd7 Bxf1 Rxe7 Kxe7 Bxe5 Ke6 f4 Bc4 Kb2 Kd5 a4 Ke4
Kc3 Bd5 h4 Kf3 Bc7 Kg4 Bd6 Kg3 Bc7 Kxh4 Bxa5 Kg3) {+0.58/33 52} 23. c5 (c5
e5 b4 Nf4 Bc2 Ng2 Re2 Nf4 Red2 Ne6 Bb3 axb4 Re1 Kg7 Nd3 Nxg5 Nxe5 Nh3 Rdd1
Nxe5 Bxe5 Kh6 Rd4 f4 Bf7 Red8 Rd6 Rxd6) {+0.57/16 89} e5 (e5 Bc2 b4 Nd3
Bxd3 Bxd3 Ra7 Bc4 Kg7 Rd4 h6 h4 Kh7 Kb2 Kg7) {0.00/43 188} 24. b4 (b4 Nf4
Bc2 Ng2 Re2 Nf4 Red2 axb4 Nd3 Ne6 Bb3 Kg7 Re1 Nd4 Bxe5 Nxe5 Nxe5 Nxb3 axb3
Bc8 Kb2 f4 Rde2 Bf5 Nxc6 Rxe2 Rxe2 Rc8 Nxb4 Rxc5 Re7 Kf8 Rxh7 Be6 h4 Bf7
Nd3 Rf5 Kc3 Kg8 Rh6 Kg7 b4 Bc4 Nc5 Bd5 Ne4 Bxe4 fxe4 Rf8 Kd2 Re8 Kd3 f3 h5)
{+0.57/33 0} Nf4 (Nf4 Bc2 Ng2 Re2 Nf4) {0.00/42 151} 25. Bc2 (Bc2 Ng2 Re2
Nf4 Red2 axb4 Nd3 Ne6 Bb3 Kg7 Re1 Nd4 Bxe5 Nxe5 Nxe5 Nxb3 axb3 Bc8 Kb2 f4
Rde2 Bf5 Nxc6 Rxe2 Rxe2 Rc8 Nxb4 Rxc5 Re7 Kf8 Rxh7 Be6 h4 Bf7 Nd3 Rf5 Kc3
Kg8 Rh6 Kg7 b4 Bc4 Nc5 Bd5 Ne4 Bxe4 fxe4 Rf8 Kd2 f3 Ke1 Rf4 h5 gxh5 Rxh5)
{+0.55/24 61} Ng2 (Ng2 Re2 Nf4 Ree1) {0.00/43 14} 26. Re2 (Re2 Nf4 Ree1 Ng2
Re2 Nf4 Red2 axb4 Nd3 Ne6 Bb3 Kg7 Re1 Nd4 Bxe5 Nxe5 Nxe5 Nxb3 axb3 Bc8 Kb2
f4 Rde2 Bf5 Nxc6 Rxe2 Rxe2 Rc8 Nxb4 Rxc5 Re7 Kf8 Rxh7 Be6 h4 Bf7 Nd3 Rf5
Kc3 Kg8 Rh6 Kg7 b4 Bc4 Nc5 Bd5 Ne4 Bxe4 fxe4 Rf8 Kd2 f3 Ke1 Rf4) {+0.55/22
19} Nf4 (Nf4 Ree1 Ng2 Re2) {0.00/45 57} 27. Red2 (Red2 axb4 Nd3 Ne6 Bb3 Kg7
Re1 Nd4 Nxe5 Nxb3 axb3 Bc8 Kb2 Nxe5 Bxe5 Kg8 Rd6 Be6 Rxc6 Bd5 Rc7 Bxf3 Rg7
Kf8 Rxh7 Be4 Bf6 f4 Rh4 Bf5 Rxe8 Rxe8 Rxf4 Re2 Ka1 Rc2 Rxb4 Rxc5 Kb2 Rc2
Ka3 Bd3 Rd4 Bf5 h4 Re2 Rd5) {+0.53/26 250} a4 (a4 Nd3 Nd5 Re1 Re6 a3 Rae8
Rde2 Bc8 h4 e4 fxe4 Rxe4 Rxe4 fxe4 Nf4 Nxf4 Bxf4 e3 Bb1 Ne5 Ba2 Nc4 Bxc4
bxc4 Rxe3 Rxe3 Bxe3 Ke6 Kd2 Kd5 Kc3 Bf5 Bc1 Bd3 Bd2 Be2 Be3 Bf3 Bd4 Bg4 Bf6
Be2 Kd2 Bf3 Ke3 Bg4 Kf4 Be6 Bc3 Bd7 Ke3 Bf5 Kf4) {0.00/42 311} 28. a3 (a3
Nd5 Bb1 Nc3 Ba2 Nxa2 Rxa2 Re6 Re2 Rae8 Nd3 Bc8 h4 Kg8 Rde1 e4 Nf4 Ne5 fxe4
fxe4 Nxe6 Nd3 Kd2 Bxe6 Rf1 Bf5 Kc3 Kf7 Kd4 Kg7 h5) {+1.00/14 112} Bc8 (Bc8
Re1 Ng2 Rg1 Nf4 Bb1 Nf8 Re1 Be6 Rxe5 Rac8 Nd3 Nxd3 Bxd3 Bb3 Rde2 Rxe5 Bxe5
Ne6 f4 Rd8 Re3 Bd5 Kc2 Rd7 Bd6 Rd8 Kc3 Re8 Be5 Rd8 Rh3 Kg8 Bd6 Re8 Rg3 Kf7
Be5 Re7 Re3 Re8 Kc2 Bb3 Kd2 Bd5 Re2 Bb3 Kc3 Rd8 Rd2 Bd5 Be2 Be4 Rxd8 Nxd8
h4) {-0.50/42 440} 29. Bb1 (Bb1 Nf8 Re1 Be6 Rxe5 Kg8 Kb2 Rad8 h4 Nd5 Rde2
Nf4 Re1 Ng2 R1e2 Nf4 Rd2 Nd5 Ba2 Nf4 Rxe6 N4xe6 Nd3 Kg7 Be5 Kg8 Bf6 Rd7 Kc3
h6 Ne5 Rxd2 Kxd2 hxg5 hxg5 Nh7 Nxc6 Nxf6 gxf6 Kf7) {+1.08/20 82} Nf8 (Nf8
Re1 Be6 Rxe5 Rac8 Nd3 Nxd3 Bxd3 Bb3 f4 Rcd8 Ree2 Ne6 Rf2 Rd7 h4 Nd8 Be5 Ne6
Be2 Rxd2 Kxd2 Bd5 Rh2 Re7 Bd3 Bb3 Ke3 Nf8 Re2 Nd7 Kd4 Nxe5 Rxe5 Rd7 Kc3 Bd5
h5 Rd8 h6 Rd7 Bc2 Re7 Kd4 Rd7 Ke3 Bc4 Kf3 Bd5 Kg3) {-0.54/41 150} 30. Re1
(Re1 Be6 Rxe5 Kg8 Kb2 Rad8 h4 Nd5 Ba2 Nf4 Rxe6 N4xe6 Nd3 Kg7 Ne5 Rc8 f4 h6
Bxf8 Nxf8 Kc3 Rc7 Rd6 Ree7 Kd3 Re8 Nxc6 hxg5 hxg5) {+1.14/17 0} Be6 (Be6
Rxe5 Rac8 Nd3 Nxd3 Bxd3 Bb3 f4 Ne6 Re3 Ng7 Ree2 Rcd8 Kb2 Rd7 Rxe8 Nxe8 Be5
Ke6 Kc3 Nc7 Bxc7 Rxc7 Be2 Bd5 Rd3 h5 gxh6 Rh7 Rh3 Kf7 Bf1 Kg8 Bd3 Re7 h7
Rxh7 Rxh7 Kxh7 Be2 Kg7 Kd4 Be4 Ke5 Kf7 h4 Ke7 h5 gxh5 Bxh5 Kd8 Kf6 Kc7 Kg5)
{-0.67/42 179} 31. Rxe5 (Rxe5 Kg8 Kb2 Rad8 h4 Nd5 Ba2 Nf4 Rxe6 N4xe6 Nd3
Kh8 Ne5 Rc8 Bxf8 Nxf8 Nf7 Kg7 Nd6 Rcd8 Nxe8 Rxe8 Rd6 Re2 Kb1 Re1 Kc2 Re2
Rd2 Re3 Kb2 Rxf3 Rd6 Rf2 Kb1 Rf1 Kc2 Rf2 Rd2 Rxd2 Kxd2 Nd7 Ke3 Ne5)
{+1.19/19 0} Rac8 (Rac8 Nd3 Nxd3 Bxd3 Bb3 f4 Ne6 Re3 Ng7 Ree2 Rcd8 Kb2 Rd7
Rxe8 Nxe8 Be5 Ke6 Kc3 Nc7 Bxc7 Rxc7 Be2 Bd5 Rd3 h5 gxh6 Rh7 Rh3 Kf7 Bf1 Kg8
Kd4 Re7 h7 Kh8 Bd3 Be4 Kc3 Bxd3 Kxd3 Re4 Rh6 Rxf4 Rxg6 Rf3 Kd4 Rxa3 Rxc6
Rb3 Rc7 Rxb4 Kd5 Rg4 Rf7 Rc4) {-0.70/40 94} 32. Rd4 (Rd4 Nd5 Kd2 Nd7 Re1
Kg7 Nd3 Bf7 Be5 Kg8 Ba2 Nf8 h4 Re7 Bd6 Rxe1 Nxe1 Ne6 Rd3 Nef4 Bxf4 Nxf4
Bxf7 Kxf7 Rd7 Ke6 Rd6 Ke7 Nd3 Nxd3 Kxd3) {+1.27/16 209} Nd5 (Nd5 Kd2 Nd7
Re1 Kg7 Nd3 Bf7 f4 Rcd8 Ne5 Nxe5 Bxe5 Kg8 Kc1 Re7 Rd3 Red7 Red1 Be6 Ba2 Kf8
Kb2 Bf7 R1d2 Kg8 Bb1 Be6 Re2 Bf7 Rc2 Be6 Rc1 Bf7 Ba2 Be6 Rcd1 Re8 R1d2 Bf7
Bb1 Rde7 Bc2 h6 gxh6 Kh7) {-0.89/36 88} 33. Kd2 (Kd2 Nd7 Re1 Kg7 Nd3 Bf7
Be5 Kg8 Ba2 Nf8 h4 Rcd8 Bd6 Rxe1 Nxe1 Ne6 Rd3 Ng7 Be5 Nh5 Nc2 Re8 Bxd5 Bxd5
Rxd5 cxd5 f4 Kf7 Nd4 Nxf4 Bxf4 Re4) {+1.30/16 12} Kg7 (Kg7 Nd3 Nd7 Re1 Bf7
f4 Rcd8 Ne5 Nxe5 Bxe5 Kg8 Kc1 Rd7 Rd3 Red8 Red1 Be6 Ba2 Kf7 R3d2 Kf8 h4 Kg8
Kb2 Bf7 Rd4 Kf8 R1d2 Kg8 Kc1 Re8 R4d3 Red8 Rd1 Kf8 Bb1 Ke8 Re1 Re7 Rd2 Kd7
h5 Kc8 Rh1 Red7) {-0.99/40 80} 34. Bd3 (Bd3 Nd7 Re2 h6 h4 Bf7 Nd1 hxg5 hxg5
Rxe2 Bxe2 Re8 f4 Rh8 Bf3 Rh2 Ke1 Be6 Rd3 Kf7 Ne3 Rh3 Kf2 Nxe3) {+1.38/14
348} Nd7 (Nd7 Re2 h6 h4 hxg5 hxg5 Bf7 Nd1 Nc7 Rxe8 Nxe8 Bg3 Nf8 Be5 Kg8 Nf2
Bb3 Rh4 Ng7 Be2 Rd8 Kc3 Re8 f4 Nd7 Bf3 Nxe5 fxe5 Rxe5 Nd3 Re3 Bxc6 Bc4 Rxc4
bxc4 Kxc4 Ne6 Bxa4 Kf8 Bb3 Ke7 a4 Nxg5 a5) {-1.17/36 237} 35. Re2 (Re2 h6
h4 Bf7 Nd1 Nf8 Rxe8 Rxe8 f4 hxg5 hxg5 Nd7 Be2 Rh8 Bf3 Rh2 Ke1 Be6 Rd3 Rh3
Kf2 Kf7 Kg2 Rh8 Nc3 Nxc3) {+1.52/15 0} h6 (h6 f4 hxg5 fxg5 Rcd8 Nd1 Kf7 Nc3
N7b6 cxb6 Rxd6 Nxd5 Red8 Nc7 Rxd4 Nxe6 Rxd3 Kc2 R3d7 Nxd8 Rxd8 Rd2 Rb8 Rd7
Ke6 Rg7 Rxb6 Rxg6 Ke5 h4 Rb8 Rxc6 Rh8 Rh6 Rc8 Kd3 Rc4 h5 Rg4 g6 Rg3 Ke2 f4
Rh7 Re3 Kf2 Rxa3 Rb7 Rb3 Rxb5 Kf6 Ra5 Rxb4) {-1.13/36 124} 36. h4 (h4 hxg5
hxg5 Rcd8 Nd1 Nf8 f4 Kf7 Rh2 Ne7 Nc3 Nc8 Be5 Rxd4 Bxd4 Ne7 Bf6 Nd5 Be5 Nxc3
Kxc3 Bd5 Rh6 Bf3 Bb1 Bd5 Rh8 Ne6) {+1.55/14 41} hxg5 (hxg5 hxg5 Kg8 Nh3 Bf7
f4 Nf8 Ng1 Red8 Rh2 Rxd6 cxd6 Rd8 Rh4 Kg7 Be2 Ne6 Rxd5 cxd5 Bxb5 Rxd6 Ne2
Rd8 Bd3 Rd6 Rh1 Be8 Rb1 Kf7 b5 Rb6 Rb4 Rb7 Nc3 d4 Ne2 Ke7 b6 Bc6 Bc4 Kd6)
{-1.23/34 52} 37. hxg5 (hxg5 Rcd8 Nd1 Kf7 Rh2 Nf8 f4 Ne7 Nc3 Nc8 Be5 Rxd4
Bxd4 Ne7 Be5 Rd8 Ke3 Nd5 Nxd5 Bxd5 Bd6 Re8 Kd2 Be4 Be2 Bd5 Rh8 Kg7)
{+1.61/14 89} Kg8 (Kg8 Nh3 Bf7 f4 Nf8 Ng1 Red8 Rh2 Rxd6 cxd6 Rd8 Rh4 Kg7
Be2 Ne6 Rxd5 cxd5 Bxb5 Rxd6 Ne2 Rd8 Rh3 Be8 Bd3 d4 Bc4 Nc7 Rd3 Bb5 Nxd4
Bxc4 Nxf5 gxf5 Rxd8 Bf7 Ke3 Nd5 Kf3) {-0.95/34} 38. Nd1 (Nd1 Kf7 Rh4 Rh8
Reh2 Rxh4 Rxh4 Kg7 Be2 Bg8 Rd4 Be6 Ne3 Nxe3 Kxe3 Re8 Kf2 Kf7 f4 Rh8 Bf3 Rc8
Rd1 Bb3 Rh1 Kg7 Re1 Kg8 Re7) {+1.68/14 163} Nf8 (Nf8 Rh2 Rcd8 Nc3 Nxc3 Kxc3
Bb3 Rdh4 Kg7 Kd2 Bg8 Bf1 Bd5 f4 Kf7 Bd3 Rxd6 cxd6 Rd8 Kc3 Rxd6 Rh6 Rd7 Rd2
Kg7 Rh4 Kf7 Rh3 Kg8 Bf1 Kf7 Rh6 Rd6 Bg2 Ne6 Rh7 Kg8 Rh4 Kf8 Bf3 Ke7 Rh7 Kd8
Bxd5 cxd5 Rf2) {-1.61/37 182} 39. f4 (f4 Ne7 Nc3 Kf7 Rh2 Rcd8 Rh3 Nc8 Be5
Rxd4 Bxd4 Ne7 Be5 Rd8 Ke1 Bb3 Bd6 Nc8 Bc7 Rd7 Be5 Ne7 Bf1 Nd5 Bg2 Rd8 Nxd5)
{+1.70/13 254} Ne7 (Ne7 Nc3 Kf7 Rh2 Bb3 Bf1 Ne6 Rd3 Rh8 Rdh3 Rxh3 Rxh3 Nd5
Nxd5 Bxd5 Rh7 Kg8 Re7 Rd8 Be2 Ng7 Bc7 Re8 Rd7 Be4 Be5 Ne6 Ke3 Nxg5 Rg7 Kf8
Rxg6 Nf7 Bg7 Ke7 Bh5 Kd7 Rf6 Bd5 Kf2 Ke7 Bxf7 Bxf7 Rxc6 Bc4) {-1.21/38 231}
40. Nc3 (Nc3 Kf7 Rh2 Rcd8 Rh3 Nc8 Be5 Rxd4 Bxd4 Ne7 Be5 Rd8 Ke1 Bb3 Bd6 Nd5
Nxd5 Bxd5 Kf2 Re8 Bxf8 Rxf8 Rh7 Ke6 Rg7 Rh8 Rxg6) {+1.54/14 0} Kf7 (Kf7 Rh2
Rcd8 Rh8 Bc8 Be2 Ne6 Rxe8 Rxe8 Rd3 Rh8 Bf3 Bd7 Ke1 Rh2 Ne2 Nd5 Kf1 Bc8 Kg1
Rh3 Kg2 Rh8 Be5 Re8 Bxd5 cxd5 Rh3 d4 Kf2 d3 Nc3 d2 Rh7 Kg8 Rh6 Kf7 c6 Rd8
Ke2) {-1.91/36 79} 41. Rh2 (Rh2 Rcd8 Rh3 Nc8 Be5 Rxd4 Bxd4 Ne7 Ne2 Rd8 Rh8
Rd7 Be5 Bc4 Nd4 Ne6 Rh7 Ke8 Rh8 Kf7 Rh7 Ke8 Bxc4 bxc4 Rh8 Kf7 Kc3 Nxd4 Bxd4
Nd5 Kxc4 Nxf4 Be5 Ne6 Rh7 Ke8 Rh6 Kf7 b5 Rd5 Rh7 Kg8) {+1.58/18 18} Rcd8
(Rcd8 Rh8 Bc8 Be2 Ne6 Rxe8 Rxe8 Rd3 Rh8 Bf3 Bb7 Re3 Rd8 Ke1 Rd7 Be2 Nc7 Rh3
Ncd5 Nxd5 Nxd5 Kf2 Ke6 Rh6 Kf7 Be5 Ba6 Bf3 Bb7 Rh8 Ne7 Ke3 Nd5 Bxd5 cxd5
Kd4 Ke6 Bd6) {-1.85/35 16} 42. Rh6 (Rh6 Nc8 Be5 Rxd4 Bxd4 Ne7 Be5 Bb3 Bd6
Nd5 Bxf8 Rxf8 Rh7 Kg8 Nxd5 Bxd5 Rd7 Bg2 Bb1 Bd5 Rd6 Kf7 Bd3 Bg2 Rd7 Kg8 Ke3
Re8 Kf2 Bh1 Be2 Re4 Rd1 Rxf4 Kg3) {+1.56/18 119} Nc8 (Nc8 Be5 Rxd4 Bxd4 Bb3
Be5 Ne7 Rh8 Rd8 Bc7 Re8 Bd6 Nd5 Rh6 Rd8 Nxd5 Bxd5 Ke3 Kg7 Kd4 Ne6 Kc3 Nf8
Be5 Kf7 Rh8 Re8 Rh2 Rd8 Rd2 Ne6 Bd6 Bf3 Rh2 Nf8 Bc7 Rd7 Be5 Bd5 Bd6 Rd8 Rd2
Ne6 Bf1 Be4 Rh2 Nf8 Rh8 Bd5 Bxf8 Be4 Rh6) {-0.74/36 24} 43. Be5 (Be5 Rxd4
Bxd4 Ne7 Be5 Bb3 Bd6 Nd5 Bxf8 Rxf8 Rh7 Kg8 Nxd5 Bxd5 Rd7 Bg2 Bb1 Bd5 Rd6
Kf7 Bd3 Bg2 Rd7 Kg8 Bb1 Bd5 Kc3 Re8 Rxd5 cxd5 Bd3 Kf7 Bxb5 Re3 Bd3 Rf3)
{+1.52/17 19} Rxd4 (Rxd4 Bxd4 Bb3 Be5 Ne7 Rh8 Rd8 Bc7 Re8 Bd6 Nd5 Nxd5 Bxd5
Rh2 Be4 Be2 Rd8 Kc3 Bd5 Bd3 Re8 Rh6 Kg7 Be5 Kf7 Rh8 Rd8 Be2 Be4 Rh3 Re8 Rh2
Rd8 Rh8 Bd5 Rh3 Bg2 Rh6 Be4 Bd6 Bd5 Bd3 Re8 Bxf8 Rxf8 Rh7 Kg8) {-0.74/40
17} 44. Bxd4 (Bxd4 Ne7 Be5 Bb3 Bd6 Nd5 Bxf8 Rxf8 Rh7 Kg8 Nxd5 Bxd5 Rd7 Bg2
Bb1 Bd5 Rd6 Kf7 Bd3 Bg2 Rd7 Kg8 Bb1 Bd5 Kc3 Re8 Rxd5 cxd5 Bd3 Kf7 Bxb5 Re3
Bd3 Rf3) {+1.47/16 25} Ne7 (Ne7 Ne2 Bb3 Be5 Ne6 Rh7 Kg8 Rh4 Rd8 Rh1 Kf7 Rh7
Ke8 Bd6 Nc8 Bb8 Ne7 Be5 Nd5 Bd6 Rd7 Rh4 Kf7 Be5 Ne7 Rh7 Kg8 Rh8 Kf7 Bd6 Nd5
Ra8 Rd8 Ra7 Kg8 Be5 Rc8 Rd7 Kf8 Rh7 Rd8 Bd6 Kg8 Rh4 Bc4 Bxc4 bxc4 Rh6 Ndxf4
Nxf4 Nxf4 Kc3) {-0.74/39 17} 45. Be5 (Be5 Bb3 Ne2 Ne6 Rh7 Kg8 Rh6 Kf7 Nd4
Nxd4 Bxd4 Rd8 Be5 Rd7 Rh7 Ke6 Rh6 Kf7 Rh7 Ke8 Bd6 Bg8 Rh8 Kf7 Rh1 Nc8 Be5
Ne7 Rh6 Ke8 Bd6 Kf7 Be2) {+1.41/16 272} Bb3 (Bb3 Ne2 Ne6 Ng1 Bd5 Rh4 Kf8
Ne2 Kf7 Rh7 Kg8 Rh6 Kf7 Nc3 Bb3 Rh7 Kg8 Rh2 Kf7 Bf1 Rd8 Ke3 Nd5 Nxd5 Bxd5
Rh7 Ke8 Bd6 Rd7 Rh8 Kf7 Bd3 Kg7 Rh3 Rd8 Be5 Kf7 Rh7 Ke8 Bd6 Rd7 Rh6 Kf7 Be2
Be4 Rh7 Ke8 Rh3 Kf7 Bf3 Bxf3 Kxf3 Nf8 Rh6 Kg7 Bxf8 Kxf8 Rxg6 Rd3 Ke2 Rxa3)
{-0.75/41 61} 46. Ne2 (Ne2 Ne6 Rh7 Kg8 Rh6 Kf7 Nd4 Nxd4 Bxd4 Rd8 Be5 Rd7
Rh7 Ke6 Rh6 Kf7 Rh7 Ke8 Bd6 Bg8 Rh8 Kf7 Rh1 Nc8 Be5 Ne7 Rh6 Ke8 Bd6 Kf7
Be2) {+1.40/15 24} Ne6 (Ne6 Ng1 Bd5 Rh4 Kf8 Ne2 Kf7 Rh7 Kg8 Rh6 Kf7 Nc3 Bb3
Rh7 Kg8 Rh2 Kf7 Be2 Rd8 Ke3 Nd5 Nxd5 Bxd5 Rh7 Ke8 Bd6 Rd7 Rh8 Kf7 Bd3 Kg7
Rh3 Nd8 Kd4 Ne6 Kc3 Nd8 Be5 Kf7 Rh8 Ne6 Bd6 Kg7 Rh6 Nd8 Be5 Kf7 Kd2 Ne6 Rh7
Ke8 Rh8 Kf7 Bd6 Kg7 Rh2 Kf7 Ke3 Kg7 Be5 Kf7 Rh7 Ke8 Rh4 Kf7 Bd6 Nf8 Bxf8
Kxf8 Rh6) {-0.74/41 4} 47. Rh7+ (Rh7 Kg8 Rh6 Kf7 Nd4 Nxd4 Bxd4 Rd8 Rh7 Ke6
Be5 Rd5 Kc3 Rd7 Rh6 Kf7 Rh8 Ke6 Bd6 Nd5 Kd2 Nxf4 Bxf4 Bc4 Bd6 Bxd3 Kxd3 Rf7
Bf4 Rd7 Ke3 Kd5) {+1.35/14 149} Kg8 (Kg8 Rh2 Kf7 Rh4 Bd5 Rh7 Kg8 Rh2 Kf7
Nc3 Bb3 Rh7 Kg8 Rh6 Kf7 Ke3 Nf8 Ne2 Ne6 Rh7 Kg8 Rh8 Kf7 Rh6 Nd5 Kd2 Ne7 Ng1
Bd5 Rh7 Kg8 Rh3 Kf7 Rh6 Rd8 Ne2 Bf3 Nc3 Nd5 Rh7 Kg8 Rh4 Kf7 Bd6 Kg7 Nxd5
Bxd5 Be5 Kg8 Rh6 Kf7 Bf6 Re8 Rh7 Kg8) {-0.74/41 31} 48. Rh6 (Rh6 Kf7 Rh2
Nd5 Rh7 Kf8 Ra7 Rc8 Ra6 Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3
Bc4 Bd6 Ke8 Bg2) {+1.33/15 72} Kf7 (Kf7 Nc3 Nf8 Be2 Rd8 Ke3 Nd5 Nxd5 Bxd5
Bd3 Re8 Kf2 Rd8 Bd6 Re8 Bf1 Be4 Rh3 Kg8 Be5 Rd8 Rh8 Kf7 Bd6 Re8 Rh6 Kg7 Be5
Kf7 Ke3 Rd8 Bd6 Bd5 Bd3 Re8 Kd2 Rd8 Kc3 Kg7 Rh2 Kf7 Rd2 Ne6 Bf1 Be4 Rh2 Nf8
Bxf8 Rxf8 Rh7 Kg8) {-0.74/44 51} 49. Ng1 (Ng1 Nd5 Rh7 Kf8 Ne2 Kg8 Rd7 Rd8
Ra7 Rc8 Ra6 Kf7 Bd6 Ke8 Ra7 Rd8 Rh7 Rd7 Rh8 Kf7 Rc8 Ne7 Ra8 Nd5 Ra6 Ne7
Nc1) {+1.35/15 55} Bd5 (Bd5 Rh7 Kg8 Rh4 Kf7 Ke3 Bb3 Ne2 Nd5 Kd2 Ne7 Rh6 Nd5
Bd6 Kg7 Rh1 Kg8 Rh4 Ne7 Nc3 Nf8 Rh3 Nd5 Nxd5 Bxd5 Rh6 Kf7 Rh4 Be4 Be2 Bd5
Be5 Be4 Ke3 Bd5 Rh3 Rd8 Rh6 Re8 Kf2 Rd8 Bd6 Re8 Bxf8 Rxf8 Rh7 Ke8 Bf3)
{-0.74/45 39} 50. Rh7+ (Rh7 Kg8 Rh2 Kf7 Ne2 Bb3 Nd4 Nxd4 Bxd4 Rd8 Be5 Rd5
Kc3 Rd7 Rh8 Nd5 Kd2 Bc4 Bxc4 bxc4 Kc1 Ne3 Bd6 c3 b5 cxb5 c6) {+1.38/14 1}
Kg8 (Kg8 Rh4 Kf7 Ke3 Bb3 Ne2 Nd5 Kd2 Ne7 Rh6 Nd5 Bd6 Kg7 Rh1 Kg8 Rh4 Ne7
Nc3 Nf8 Rh3 Nd5 Nxd5 Bxd5 Rh6 Kf7 Rh4 Be4 Be2 Bd5 Be5 Be4 Ke3 Bd5 Rh3 Rd8
Rh6 Re8 Kf2 Rd8 Bd6 Re8 Bd3 Bc4 Bxc4 bxc4 Be5 Nd7 Rh7 Ke6) {-0.74/45 28}
51. Rh2 (Rh2 Rd8 Ke3 Re8 Ne2 Bb3 Nc3 Nd5 Nxd5 Bxd5 Rh8 Kf7 Rh7 Kf8 Rd7 Rd8
Bd6 Kg8 Re7 Rf8 Bf1 Rd8 Be2 Rf8 Bf3 Bxf3 Rxe6 Bd5 Rxg6) {+1.49/14 38} Kf7
(Kf7 Ne2 Bb3 Rh7 Kg8 Rh8 Kf7 Rh2 Nd5 Rh7 Kf8 Rh4 Kf7 Bd6 Kg8 Rh2 Kf7 Rh7
Kg8 Rh4 Rd8 Nc3 Nxc3 Kxc3 Nf8 Rh6 Kg7 Rh3 Kf7 Kd2 Bd5 Rh8 Kg7 Be5 Kf7 Kc3
Re8 Rh6 Bb3 Be2 Bd5 Kd2 Rd8 Ke3 Be4 Rh3 Bd5 Bd6 Re8 Kf2 Be4 Rh6 Bd5 Bxf8
Rxf8 Rh7 Ke8) {-0.74/41 36} 52. Ne2 (Ne2 Bb3 Nd4 Nxd4 Bxd4 Rd8 Be5 Rd7 Bd6
Nc8 Bb8 Ne7 Rh7 Kg8 Rh6 Kf7 Rh8 Bc4 Bd6 Bxd3 Kxd3 Nd5 Rf8 Ke6 Rc8 Rh7 Rxc6
Rh3 Kd4 Rxa3 Be5 Ke7 Rxg6 Nxb4) {+1.34/14 65} Bb3 (Bb3) {-0.74/42} 53. Rh1
(Rh1 Nd5 Rh7 Kg8 Rd7 Rd8 Ra7 Rc8 Ra5 Kf8 Ra6 Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8
Nd4 Kf7 Be2 Ba2 Bf3 Bc4 Bd6 Ke8 Bg2) {+1.30/13 113} Nd5 (Nd5 Rh7 Kf8 Bd6
Kg8 Rh4 Ne7 Rh6 Kg7 Ng1 Bd5 Rh4 Kg8 Be5 Kf7 Rh7 Kg8 Rh2 Kf7 Ne2 Bb3 Rh7 Kg8
Rh8 Kf7 Rh2 Nd5 Rh1 Kf8 Rh7 Rd8 Rh4 Kf7 Bd6 Ba2 Rh7 Kg8 Ra7 Bb3 Be5 Rc8 Nd4
Nxd4 Bxd4 Nxf4) {-0.74/39 52} 54. Rh7+ (Rh7 Kg8 Rd7 Rd8 Ra7 Rc8 Ra5 Kf8 Ra6
Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3 Ke8 Bg2 Kd7 Nf3)
{+1.26/15 0} Kf8 (Kf8 Bd6 Kg8 Rh4 Ba2 Rh2 Kf7 Rh6 Rd8 Nc3 Nxc3 Kxc3 Rd7 Kd2
Bb3 Rh7 Ke8 Rh4 Kf7 Kc3 Bd5 Kb2 Nd4 Rh7 Ke6 Rh6 Kf7 Bb1 Ne6 Rh7 Ke8 Rh8 Kf7
Rh6 Bb3 Rh7 Ke8 Rh8 Kf7 Kc3 Kg7 Be5 Kf7 Bd3 Bd5 Rh6 Ba2 Bf1 Bd5 Bd6 Be4 Be2
Kg7 Bd1 Bd5 Be5 Kf7 Rh7 Ke8 Rh4 Kf7 Be2 Nf8 Rh6 Rd8 Bd6 Re8 Bd3 Bf3 Be5 Rd8
Rh8 Bd5 Bd6 Bf3 Kd2 Bd5 Ke3 Re8 Be5 Bg2 Rh2 Bd5 Rh6 Bb3 Be2 Bd5 Kd2 Rd8 Bd6
Be4 Kc3 Kg7 Rh3 Kf7 Bd3 Bd5 Rh6 Bf3 Kd2 Re8 Bxf8 Rxf8 Rh7 Kg8) {-0.74/39
46} 55. Ra7 (Ra7 Rc8 Rd7 Rd8 Bd6 Kg8 Ra7 Re8 Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7
Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3 Bc4 Bd6 Ke8) {+1.28/13 65} Rc8 (Rc8 Rd7
Rd8 Rh7 Kg8 Rh2 Re8 Rh1 Kf7 Rh7 Kf8 Bd6 Kg8 Rh4 Ba2 Rh6 Kf7 Nc3 Nxc3 Kxc3
Bd5 Rh7 Kg8 Rb7 Be4 Bf1 Bf3 Rd7 Be4 Ra7 Bd5 Ra6 Rd8 Bd3 Rd7 Ra8 Kg7 Be5 Kf7
Rh8 Ke7 Rh7 Ke8 Rh4 Kf7 Bd6 Ke8 Bf1 Kf7 Rh7 Ke8 Rh8 Kf7 Bd3 Kg7 Be5 Kf7 Kd2
Rd8 Rh7 Kg8 Rh6 Kf7 Bd6 Kg7 Kc3 Nf8 Rh2 Kf7 Bxf8 Kxf8 Rh7) {-0.74/42 26}
56. Rh7 (Rh7 Re8 Bd6 Kg8 Ra7 Rd8 Be5 Rc8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2
Bf3 Ke8 Bg2 Kd7 Nf3) {+1.22/13 45} Rd8 (Rd8 Rh8 Kf7 Rh6 Re8 Rh7 Kf8 Bd6 Kg8
Rh4 Ba2 Rh6 Kf7 Nc3 Nxc3 Kxc3 Bd5 Rh7 Kg8 Rb7 Be4 Bf1 Bf3 Rd7 Nf8 Rc7 Ne6
Rb7 Bd5 Ra7 Nf8 Bd3 Ne6 Ra6 Kf7 Bc2 Be4 Ra7 Kg8 Rd7 Bd5 Be5 Nxg5 Rg7 Kf8
Rxg6 Ne4 Kb2 Re6) {-0.74/41 26} 57. Bd6+ (Bd6 Kg8 Ra7 Re8 Be5 Rc8 Rd7 Rd8
Rxd8 Nxd8 Nd4 Kf7 Be2 Ke8 Bf3 Kd7 Nxb3 axb3 Kc1 Ne3 Be2 Ne6) {+1.24/13 8}
Kg8 (Kg8 Rh4 Re8 Rh3 Rd8 Be5 Re8 Rh6 Kf7 Rh4 Ne7 Nc3 Nd5 Bd6 Kg7 Nxd5 Bxd5
Kc3 Nf8 Be5 Kg8 Rh8 Kf7 Rh6 Rd8 Bd6 Kg7 Bc7 Rd7 Be5 Kf7 Bd6 Ne6 Rh7 Ke8 Rh4
Kf7 Kd2 Kg8 Rh6 Kg7 Be5 Kf7 Rh7 Ke8 Rh8 Kf7 Kc3 Nf8 Bd6 Ne6 Kb2 Kg7 Rh3 Kf7
Rh7 Ng7 Kc3 Kg8 Rh6 Kf7 Kd4 Rd8 Rh7 Kg8 Rh3 Ne6 Ke3 Re8 Kf2 Nf8 Rh6 Kf7
Bxf8 Rxf8 Rh7 Kg8) {-0.74/43 23} 58. Ra7 (Ra7 Rc8 Rd7 Rd8 Ra7 Re8 Ra6 Rc8
Be5 Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3 Bc4 Bd6 Ke8 Bg2)
{+1.23/13 24} Kh8 (Kh8 Ra6 Rc8 Be5 Kg8 Ra7 Rd8 Rb7 Ba2 Bb8 Bb3 Bd6 Kh8 Be5
Kg8 Ra7 Rc8 Rd7 Kf8 Rh7 Rd8 Rh8 Kf7 Rh6 Re8 Rh4 Ne7 Nc3 Nd5 Bd6 Kg7 Nxd5
Bxd5 Kc3 Nf8 Be5 Kg8 Rh6 Kf7 Rh3 Rd8 Rh2 Re8 Rd2 Rd8 Bc7 Rd7 Bd6 Ne6)
{-0.74/41 51} 59. Ra6 (Ra6 Rc8 Ra5 Kg8 Ra6 Kf7 Be5 Ke7 Ra7 Kf8 Rd7 Rd8 Rxd8
Nxd8 Nd4 Ke8 Be2 Kd7 Bf3 Bc4 Bg2) {+1.25/13 42} Rc8 (Rc8 Be5 Kg8 Ra5 Re8
Ra7 Rd8 Rb7 Ba2 Bb8 Bb3 Bd6 Ra8 Rd7 Rc8 Be5 Kf8 Rh7 Rd8 Rh8 Kf7 Rh6 Re8 Rh4
Ne7 Nc3 Nd5 Bd6 Kg7 Nxd5 Bxd5 Kc3 Nf8 Be5 Kg8 Rh6 Kf7 Rh3 Rd8 Rh2 Re8 Rd2
Rd8 Bc7 Rd7 Bd6 Ne6) {-0.74/45} 60. Ra5 (Ra5 Kg8 Ra6 Kf7 Be5 Ke7 Ra7 Kf8
Rd7 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Rc8 Ne7 Ra8 Nd5 Ra6 Ne7 Nc1) {+1.24/12 15}
Re8 (Re8 Be5 Kg8 Ra6 Rc8 Bd6 Kh8 Ra7 Rd8 Rb7 Kg8 Be5 Rc8 Rd7 Kf8 Rh7 Rd8
Rh8 Kf7 Rh4 Rd7 Rh7 Ke8 Rh8 Kf7 Bd6 Rd8 Rh6 Rd7 Rh7 Ke8 Rh4 Kf7 Nc3 Nd4 Rh3
Ne6 Rh7 Ke8 Rh8 Kf7 Nxd5 Bxd5 Ke3 Kg7 Rh6 Kf7 Rh7 Ke8 Rh3 Kf7 Rh6 Kg7 Be5
Kf7) {-0.76/40 66} 61. Ra7 (Ra7 Kg8 Be5 Rc8 Rd7 Rd8 Ra7 Rc8 Rd7 Kf8 Rd6 Kf7
Ke1 Ne3 Nd4 Nxd4 Bxd4 Ng2 Kd2 Nxf4 Rf6) {+1.24/13 28} Rd8 (Rd8 Be5 Kg8 Ra6
Rc8 Bd6 Kh8 Bxb5 cxb5 Be5 Kg8 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8 Re3 Kf7
c6 Bc4 Kd2 Rxe3 Kxe3 f4 Kd4 Ke8 Bxf4 Kd8 Kc5 Bd3 Kd6 Kc8 Kd5 Kd8 Kc5 Bc4
Bh2 Kc8 Kd4 Kd8 Ke5 Kc8 Kf6 Bd3 Bf4 Kd8 Bd6 Kc8 Ke6 Bc4 Ke5 Be2 Kf4 Bd3 Ke3
Bc4 Ke4 Kd8 c7 Kc8) {-0.52/39 20} 62. Ra6 (Ra6 Rc8 Be5 Kg8 Ra7 Kf8 Rd7 Rd8
Bd6 Kg8 Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7 Nf3 Nf7 Ne5 Nxe5 Bxe5) {+1.15/14
14} Rc8 (Rc8 Bxb5 cxb5 Be5 Kg8 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8 Re3 Kf7
c6 Bc4 Kd2 Rxe3 Kxe3 f4 Kd4 Ke8 Bxf4 Kd8 Kc5 Bd3 Kd6 Kc8 Kd5 Kd8 Kc5 Bc4
Bh2 Kc8 Kd6 Bd3 Kd5 Bc4 Kc5 Bd3 Bd6 Bc4 Kb6 Be2 Be5 Bc4 Bd4 Bd3 c7 Bc4 Be5
Bd3 Kc5) {-0.52/42 21} 63. Ra5 (Ra5 Kg7 Ra7 Kg8 Be5 Kf8 Rd7 Rd8 Bd6 Kg8
Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7 Nf3 Nf7 Bb8 Kc8 Be5) {+1.13/13 5} Re8
(Re8 Be5 Kg8 Ra7 Rd8 Ra6 Rc8 Bxb5 cxb5 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8
Re3 Kf7 c6 Bc4 Kd2 Rxe3 Kxe3 f4 Kd4 Ke8 Bxf4 Kd8 Kc5 Bd3 Kd6 Kc8 Kd5 Kd8
Kc5 Bc4 Bh2 Bd3 Kb6 Kc8 Bf4 Bc4 Be5 Bd3 Bd4 Bc4 Kc5 Kd8 Kd6 Bd3 Be5 Bc4 c7
Kc8 Kc6 Bd3 Bf4) {-0.52/43 25} 64. Be5+ (Be5 Kg8 Ra6 Rc8 Ra7 Kf8 Rd7 Rd8
Bd6 Kg8 Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7 Nf3 Nf7 Bb8 Kc8 Be5) {+1.16/13
10} Kg8 (Kg8 Ra7 Rd8 Ra6 Rc8 Bxb5 cxb5 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8
Re3 Kf7 c6 Bc4 Kd2 Rxe3 Kxe3 f4 Kd4 Ke8 Bxf4 Kd8 Kc5 Bd3 Kd6 Kc8 Kd5 Kd8
Kc5 Bc4 Bh2 Bd3 Kb6 Kc8 Bf4 Bc4 Be5 Bd3 Bh2 Be2 Bg3 Bd3 Kc5 Bc4 Kd6 Kd8 Be5
Kc8 Ke7 Bd3 c7 Be2 Bg3) {-0.52/45 11} 65. Ra6 (Ra6 Rc8 Ra5 Kf7 Ra6 Ke7 Ra7
Kf8 Rd7 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Rc8 Ne7 Ra8 Nd5 Rh8 Ne7 Ng1 Bd5)
{+1.14/13 21} Rc8 (Rc8 Bxb5 cxb5 Rxe6 Nxf4 Re7 Nxe2 Kxe2 Kf8 Bd6 Re8 Re3
Kf7 c6 Bc4 Kd2 f4 Bxf4 Rxe3 Kxe3 Ke7 Kd4 Kd8 Ke5 Kc8 Kf6 Bd3 Bd6 Be4 Kg7
Bd3 Kf7 Kd8 Kf6 Be4 Bf4 Bd3 c7 Kd7 Ke5 Bf5 Kd5 Be6 Kc5 Bc4 Be5 Bd3 Bg3 Bf1
Bd6 Kc8 Kd5 Be2 Bf4 Bd3 Kc6 Bc4) {-0.52/45 23} 66. Ra5 (Ra5 Kf7 Ra6 Ke7 Ra7
Kf8 Rd7 Rd8 Bd6 Kg8 Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7 Nf3 Nf7 Ne5 Nxe5 Bxe5
Bc4) {+1.13/15 0} Re8 (Re8 Ra7 Rd8 Rb7 Kf8 Rh7 Kg8 Rh8 Kf7 Rh6 Ne7 Rh7 Ke8
Bd6 Rd7 Nc3 Nf8 Rh8 Kf7 Ke3 Rd8 Rh6 Nd5 Nxd5 Bxd5 Kd4 Bb3 Kc3 Kg7 Bc7 Re8
Be5 Kf7 Rh8 Bd5 Rh3 Rd8 Rh6 Re8 Rh8 Ne6 Rh7 Kg8 Ra7 Nxg5 Rd7 Ne4 Kd4 Bf7
Rc7 Nf2 Rxc6 Nxd3) {-1.04/40 91} 67. Ra7 (Ra7 Rc8 Rd7 Kf8 Bd6 Kg8 Ra7 Rd8
Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7 Rd8 Rxd8 Nxd8 Nd4 Kf7 Be2 Ba2 Bf3 Bc4)
{+1.14/12 10} Rd8 (Rd8 Rb7 Ba2 Bb8 Bb3 Bd6 Rc8 Ra7 Re8 Ra6 Rc8 Be5 Kf7 Ra7
Kg8 Rd7 Kf8 Rh7 Rd8 Rh8 Ke7 Rh2 Ke8 Rh6 Kf7 Rh4 Kf8 Bd6 Kg8 Rh6 Kf7 Be5 Rd7
Rh7 Ke8 Rh4 Kf8 Bd6 Kg7 Ng1 Bc4 Bxc4 bxc4 Nf3 Rd8 Kc2 Re8 Be5 Kf7 Rh7 Kf8
Rh8 Kf7 Rh4 Rd8 Rh7 Kg8 Rh6 Kf7) {-1.04/42 28} 68. Rb7 (Rb7 Kf8 Rh7 Re8 Bd6
Kg8 Rd7 Rc8 Ra7 Rd8 Ra6 Rc8 Be5 Ba2 Nc3 Nxc3 Kxc3 Bd5 Ra7 Re8 Rd7 Rd8 Re7)
{+1.10/13 9} Kf8 (Kf8 Rh7 Kg8 Ra7 Rc8 Rd7 Kf8 Rh7 Rd8 Rh4 Kf7 Nc3 Re8 Bd6
Nd4 Rh7 Kg8 Rh3 Kf7 Ne2 Ne6 Rh7 Kg8 Rh4 Rd8 Nc3 Nxc3 Kxc3 Nf8 Rh6 Kg7 Be5
Kf7 Rh4 Re8 Rh1 Bd5 Rh3 Rd8 Rh8 Bb3 Be2 Bd5 Bd6 Kg7 Rh6 Nd7) {-0.84/37 5}
69. Rh7 (Rh7 Re8 Ra7 Rc8 Rd7 Rd8 Bd6 Kg8 Rxd8 Nxd8 Nd4 Kf7 Bf1 Ke8 Bg2 Kd7
Nf3 Nf7 Bb8 Kc8 Be5 Kd7 Bh1) {+1.08/12 0} Kg8 (Kg8 Ra7 Rc8 Rd7 Kf8 Rh7 Re8
Bd6 Kg8 Rh4 Rd8 Nc3 Nxc3 Kxc3 Nf8 Rh6 Kg7 Be5 Kf7 Be2 Bd5 Bd6 Kg7 Rh3 Re8
Be5 Kf7 Bf1 Rd8 Bd3 Re8 Rh8 Bb3 Rh2 Rd8 Bd6 Re8 Rh6 Kg7 Be5 Kf7 Rh8 Rd8 Be2
Bd5 Rh6 Re8 Bf1 Rd8 Bd6 Kg7 Rh2 Be4 Rh3 Kf7 Bd3 Bxd3 Kxd3 Re8) {-0.81/40
18} 70. Ra7 (Ra7 Rc8 Rd7 Kf8 Ra7 Kg8 Rd7 Kf8 Kc1 Ke8 Rh7 Rd8 Bd6 Rd7 Rh8
Kf7 Bb1 Bc4 Ng1 Ndxf4) {+1.13/11 7} Rc8 (Rc8 Rd7 Kf8 Rh7 Rd8 Rh8 Kf7 Rh2
Ke8 Bd6 Kf7 Rh4 Ba2 Rh3 Re8 Rh7 Kg8 Rh4 Bb3 Rh6 Kg7 Be5 Kf7 Rh7 Kf8 Bd6 Kg8
Rh4 Ne7 Be5 Kf7 Rh7 Kg8 Rh3 Kf7 Nc3 Nd5 Rh7 Kg8 Rh6 Nexf4 Nxd5 Nxd5 Rxg6
Kf7 Rg7 Kf8) {-0.81/39 18} 71. Rd7 (Rd7 Kf8 Bd6 Kg8 Ra7 Rd8 Be5 Rc8 Rd7 Kf8
Ke1 Rd8 Rxd8 Nxd8 Nd4 Ne3 Kd2 Nc4 Bxc4 Bxc4 Bf6 Ne6) {+1.06/12 4} Kf8 (Kf8
Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Rh6 Kg7 Ng1 Bd5 Be5 Kf7 Rh7 Kg8 Rh2 Kf7 Ne2 Bb3 Nc3
Nd5 Rh7 Kg8 Rh4 Kf7 Bd6 Kg8 Nxd5 Bxd5 Rh6 Kg7 Kc3 Nf8 Be5 Kf7 Rh3 Bb3 Rh4
Ba2 Rh1 Bd5 Rh6 Bb3 Bd6 Kg7 Bxf8 Rxf8) {-0.81/37 13} 72. Bd6+ (Bd6 Kg8 Ra7
Rd8 Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7 Kf8 Kc1 Ke8 Rh7 Rd8 Bd6 Rd7 Rh8 Kf7 Kd2 Rd8
Rh7) {+1.03/13 0} Kg8 (Kg8 Be5 Kf8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Rh3 Nd5 Be5 Kf7
Rh4 Ne7 Ng1 Bd5 Rh7 Kg8 Rh3 Kf7 Ne2 Bb3 Nc3 Nd5 Rh7 Kg8 Rh4 Kf7 Bd6 Kg8
Nxd5 Bxd5 Rh6 Kg7 Kc3 Nf8 Be5 Kf7 Rh3 Bb3 Bf1 Bd5 Rh8 Rd8 Bd3 Re8 Rh6 Bb3)
{-0.81/42 26} 73. Ra7 (Ra7 Rd8 Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7 Kf8 Rd6 Ke7 Ke1
Ne3 Kd2 Nd5 Kc1 Kf7 Kd2 Ke7) {+0.99/14 0} Re8 (Re8 Rd7 Rd8 Rb7 Rc8 Be5 Rd8
Ra7 Rc8 Rd7 Kf8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Be5 Nd5 Nc3 Kf7 Bd6 Nd4 Rh7 Kg8 Rh3
Kf7 Ne2 Ne6 Rh6 Rd8 Rh4 Kg8 Ng1 Bc4 Bxc4 bxc4 Ne2 Ndc7 Rh6 Kg7 Kc2 Nb5 Be5
Kf7 Rh7 Ke8 Nc3 Ned4 Bxd4 Nxd4 Kb2 Ne6 Rh8 Ke7 Rxd8 Kxd8 Nxa4 Nxf4 Nb6 Ne6)
{-0.81/43 15} 74. Ra6 (Ra6 Rc8 Be5 Kf7 Ra7 Kg8 Rd7 Kf8 Kc1 Rd8 Rxd8 Nxd8
Nd4 Ke8 Nxb3 axb3 Be2 Nf7 Bb8 Kd7 Kb2 Kc8 Bf3) {+0.96/12 16} Rc8 (Rc8 Be5
Kf7 Ra7 Kf8 Rd7 Rd8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Nc3 Nd5 Be5 Kf7 Ne2 Ne7 Ng1 Bd5
Rh2 Rd8 Ke3 Re8 Ne2 Bb3 Nc3 Nf8 Rh8 Ne6 Rh6 Nf8 Kd2 Nd5 Nxd5 Bxd5 Kc3 Bb3
Bd6 Bd5 Bxf8 Rxf8 Rh7 Kg8 Rd7 Bg2 Bb1 Re8) {-0.81/41 20} 75. Be5 (Be5 Kf7
Ra7 Kg8 Rd7 Kf8 Kc1 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Kd2 Rd8 Rxd8 Nxd8 Nd4 Ke8
Be5 Kd7 Nxf5 gxf5 Bxf5) {+0.93/13 0} Kf7 (Kf7 Ra7 Kg8 Rd7 Kf8 Rh7 Re8 Bd6
Kg8 Rh4 Ne7 Nc3 Nd5 Be5 Kf7 Ne2 Ne7 Rh2 Rd8 Rh7 Ke8 Rh6 Kf7 Nc3 Nf8 Ke3 Re8
Rh2 Rd8 Be2 Nd5 Nxd5 Bxd5 Rh8 Re8 Kd2 Rd8 Kc3 Re8 Bd3 Bb3 Bd6 Kg7 Rxf8)
{-0.80/39 12} 76. Ra7+ (Ra7 Kg8 Rd7 Kf8 Kc1 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Kd2
Rd8 Rxd8 Nxd8 Nd4 Ke8 Bf1 Kd7 Bg2 Ne6 Nxe6 Kxe6 Bf3 Bc4 Be5) {+0.90/13 7}
Kg8 (Kg8 Rd7 Kf8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Rh1 Nd5 Be5 Kf7 Rh4 Ne7 Rh7 Kg8
Rh3 Kf7 Ng1 Bd5 Rh6 Rd8 Ne2 Bb3 Rh1 Re8 Nc3 Nf8 Rh8 Nd5 Nxd5 Bxd5 Kc3 Bb3
Bf1 Bd5 Rh3 Rd8 Rh6 Re8 Bd3 Bb3 Rh8 Bd5 Bd6 Kg7) {-0.80/41 11} 77. Rd7 (Rd7
Kf8 Kc1 Rd8 Bd6 Ke8 Rh7 Rd7 Rh8 Kf7 Rc8 Ne7 Ra8 Nd5 Kd2 Ne7 Ra6 Bd5 Nc3 Bg2
Ke3 Nc8) {+0.90/13 0} Kf8 (Kf8 Rh7 Re8 Bd6 Kg8 Rh4 Ne7 Rh6 Kg7 Ng1 Bd5 Be5
Kf7 Rh7 Kg8 Rh2 Kf7 Ne2 Bb3 Nc3 Nf8 Rh8 Rd8 Bc7 Re8 Bd6 Kg7 Rh2 Nd5 Nxd5
Bxd5 Be5 Kf7 Kc3 Bb3 Rh8 Bd5 Rh6 Bb3 Bd6 Kg7 Rh3) {-0.80/38 14} 78. Rd6
(Rd6 Ke7 Ke1 Ne3 Bf6 Kf7 Kd2 Nd5 Be5 Ke7 Ke1 Ne3 Nd4 Nxd4 Bxd4 Ng2 Kd2 Nxf4
Bf1 Bd5 Bf6 Kf7 Rd7 Kf8) {+0.87/13 7} Ke7 (Ke7 Nd4 Nxd4 Bxd4 Nxf4 Bf1 Kf7
Ke3 Nd5 Kf2 Bc4 Bg2 Re8 Bxd5 Bxd5 Rf6 Ke7 Rxg6 Kf8 Rf6 Kg8 Be3 Re4 Rxf5 Rc4
Ke2 Be4 Rf4 Bd5 Rxc4 Bxc4 Kf3 Kf7 Bc1 Ke6 Kf4 Kf7 Kf5 Bd3 Kg4 Kg6)
{-0.31/29 13} 79. Ke1 (Ke1 Ne3 Kd2 Nd5 Ng1 Ndxf4 Nf3 Bd5 Bf6 Ke8 Ne5 Nxd3
Kxd3 Rc7 Nxg6 Rh7 Ne5 Rh3 Kd2 Rh2 Ke1 Rh1 Kf2 Rh2 Kg3 Rg2 Kh3 Nf4)
{+0.81/14 0} Rd8 (Rd8 Rxc6 Nxb4 axb4 Rxd3 Ra6 Bc4 Bf6 Kf7 Ra7 Ke8 Nc3 Nd4
Ra8 Kf7 Bxd4 Rxd4 c6 Be6 Ra7 Kf8 c7 Rxb4 Ke2 Rxf4 Ra8 Kf7 Nxb5 Ke7 c8=Q
Bxc8 Rxc8 Rg4 Ra8 Rxg5 Nd4 Rg4 Rxa4 Re4 Kd3 Kf6 Ra6 Ke5 Ne2 g5 Ra3 Kf6 Ra8
Re5 Rf8 Ke7) {-0.24/34 22} 80. Rxc6 (Rxc6 Nxb4 axb4 Rxd3 Ra6 Bc4 Nc1 Rd5 c6
Rxe5 fxe5 Kd8 Ne2 Kc7 Kf2 f4 Nc3 Nxg5 Kg2 Ne6 Kf3 g5 Kg4 Nd4 Ra7 Kxc6)
{+0.89/14 1} Nxb4 (Nxb4 axb4 Rxd3 Ra6 Bc4 Bf6 Ke8 Nc3 Nd4 Ra8 Kf7 Bxd4 Rxd4
c6 Be6 Ra7 Kf8 c7 Rxb4 Ke2 Rxf4 Ra8 Kf7 Nxb5 Ke7 c8=N Bxc8 Rxc8 Rg4 Ra8
Rxg5 Nd4 Rg2 Kf3 Rg4 Ke3 Re4 Kd3 Kf6 Ra6 Ke5 Rxa4 Kf4 Ne6 Ke5 Ra6 Rg4)
{-0.22/36 10} 81. axb4 (axb4 Rxd3 Ra6 Bc4 Nc1 Rd5 c6 Rxe5 fxe5 Kd8 Ra7 Nxg5
Nd3 Ne6 Nb2 Bb3 Nd3 Bc4 Kd2 g5 Nc5 Nxc5 bxc5 f4 Rd7 Kc8 Rd6) {+0.89/16 0}
Rxd3 (Rxd3 Ra6 Bc4 Bf6 Ke8 Nc3 Nd4 Ra8 Kf7 Bxd4 Rxd4 c6 Be6 Ra7 Kf8 c7 Rxb4
Ke2 Rxf4 Ra8 Kf7 Nxb5 Ke7 c8=N Bxc8 Rxc8 Rg4 Ra8 Rxg5 Nd4 Rg3 Kf2 Rd3 Rxa4
f4 Ke2 Re3 Kd2 Kf6 Ra6 Ke5 Nc6 Ke6 Ra5 g5 Nd4 Kf6 Nf5 Re8) {-0.13/36 14}
82. Ra6 (Ra6 Bc4 Nc1 Rd5 Ne2 Rd3 Nc1 Rd5 c6 Rxe5 fxe5 Kd8 Ra7 Nxg5 Nd3 Ne6
Nb2 Bb3 Nd3 Bc4 Kd2 g5 Nc5 Nxc5 bxc5 f4 Rd7 Kc8 Rd6) {+0.76/16 0} Bc4 (Bc4
Nc1 Rd5 c6 Rxe5 fxe5 Kd8 Ne2 Kc7 Kf2 f4 Nc3 Nxg5 Ra7 Kxc6 Ra6 Kc7 Rxg6 Nf7
Rg7 Kc6 Rg6) {0.00/37 37} 83. Nc1 (Nc1 Rd5 Ne2 Rd3 Nc1 Rd5 c6 Rxe5 fxe5 Kd8
Ra7 Nxg5 Nd3 Ne6 Kd2 g5 Nb2 Bb3 Nd1 Kc8 Ne3 Nd4 Kc3 Nxc6 Rg7 f4 Nf5 f3 Nd6
Kd8 Rxg5) {+0.60/18 0} Rd5 (Rd5 c6 Rxe5 fxe5 Kd8 Ra7 Nxg5 Nd3 Ne6 Kf2 f4
Nb2 Bb3 Nd1 Kc8 Nc3 Nd4 Rg7 g5 Ne4 Nxc6 Nd6 Kd8 Nxb5 Nxe5 Rxg5 Nc6 Kf3 Nxb4
Kxf4 a3 Nd4 Bd5 Rg3 Kc7 Rxa3) {0.00/35 8} 84. Ne2 (Ne2 Rd3 Nc1 Rd5 c6 Rxe5
fxe5 Kd8 Ra7 Nxg5 Nd3 Ne6 Nc5 Nxc5 bxc5 g5 c7 Kc8 Ra6 Kxc7 e6 Kd8 c6 a3 Ra8
Ke7 c7 Bxe6 Rxa3 Kd7 Ra6 Bc4 Rc6 Kc8 Rc5 Be6 Rxb5 Kxc7) {+0.56/19 1} Rd3
(Rd3 Ng1 a3 Bf6 Ke8 c6 Nxf4 Ra8 Kf7 Ra7 Kf8 Ra8) {0.00/37 22} 85. Bf6+ (Bf6
Ke8 Nc3 Nxf4 c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Ne6 Na3 Bf1 Ke3 Nxg5 Kf4 Ne6 Ke5
Nd8 Kd5 f4 Kc5 Ne6 Kd5 Nd8 Kc5 Ne6 Kd5 Nd8) {+0.55/20 3} Ke8 (Ke8 Nc3 Nxf4
c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Bd5 Ra7 Kxc6 Ra6 Kb7 Rd6 Kc7 Rf6 Be6 Kc2 Bd5)
{0.00/36 20} 86. Nc3 (Nc3 Nxf4 c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Nd5 Ra7 Kxc6
Rg7 Nf4 Na3 Kd5 Rd7 Kc6 Rd8 Bf1 Rc8 Kd5 Rc5 Ke4 Nxb5 Bxb5 Rxb5 Nd5 Rb8 a3)
{+0.53/20 0} Nxf4 (Nxf4 c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Bd5 Ra7 Kxc6 Ra6 Kc7
Rf6 Be6 Kc2 Bd5) {0.00/37 9} 87. c6 (c6 Rd8 Bxd8 Kxd8 Kd2 Kc7 Nb1 Nd5 Ra7
Kxc6 Rg7 Nf4 Na3 Kd5 Rd7 Kc6 Rd8 Bf1 Rc8 Kd5 Rc5 Ke4 Nxb5 Bxb5 Rxb5 Nd5 Rb8
a3) {+0.50/21 0} Rd8 (Rd8 Bxd8 Kxd8 Ra7 Nd3 Kd2 Nxb4 c7 Kd7 Nxa4 bxa4 Rxa4
Na6 c8=Q Kxc8 Rxc4 Kd7 Rh4 Nc5 Ke3 Ne6 Rh7 Kd6 Rh6 Nxg5) {0.00/39 9} 88.
Bxd8 (Bxd8 Kxd8 Kd2 Kc7 Nb1 Nd5 Ra7 Kxc6 Rg7 Nf4 Na3 Kd5 Rd7 Kc6 Rd8 Bf1
Rc8 Kd5 Rc5 Ke4 Nxb5 Bxb5 Rxb5 Nd5 Rb8 a3) {+0.48/18 0} Kxd8 (Kxd8 Ra7 Nd3
Kd2 Nxb4 c7 Kd7 Nxa4 bxa4 Rxa4 Na6 c8=Q Kxc8 Rxc4 Kd7 Rh4 Nc5 Ke3 Ne6 Rh7
Kd6 Rh6 Nxg5) {0.00/42 11} 89. Kd2 (Kd2 Kc7 Nb1 Nd5 Ra7 Kxc6 Rg7 Nxb4 Rxg6
Kc5 Na3 Bd5 Rf6 Nc6 Nc2 b4 Rxf5 b3 Na3 Nd4 Rf4 b2 g6 Nb5 Kc2 Nxa3 Kxb2 Nc4
Ka1 Ne3 g7 Nc2) {+0.46/17 0} Kc7 (Kc7 Nb1 Nd5 Na3 Nxb4 Ra7 Kxc6 Nxc4 bxc4
Kc3 Nd5 Kxc4 Nc7 Rxa4 Kd7 Kb4 Ne6 Ra7 Kd6 Ra6 Ke5 Kc4 Nxg5) {0.00/41 9} 90.
Nb1 (Nb1 Nd5 Ra7 Kxc6 Rg7 Nxb4 Rxg6 Kc5 Na3 Bd5 Rf6 Nc6 Nc2 b4 Rxf5 b3 Ne3
Ne7 Re5 a3 Kc1 Kd6 Rxe7 Kxe7 Nxd5 Kf7 Nf4 Kg7) {+0.47/18 0} Nd5 (Nd5 Na3
Nxb4 Ra7 Kxc6 Nxc4 bxc4 Kc3 Nd5 Kxc4 Nc7 Rxa4 Kd7 Kb4 Ne6 Ra7 Kd6 Ra6 Ke5
Kc4 Nxg5) {0.00/41 8} 91. Ra7+ (Ra7 Kxc6 Rg7 Nxb4 Rxg6 Kc5 Na3 Bd5 Rf6 Nc6
Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7 g7 Bd5 Kc2 Kd4 Kb2 Ke5 Rf8 f4 Nc2 b3
Nb4 Bg8 Nd3) {+0.48/18 8} Kxc6 (Kxc6 Ra6 Nb6 Na3 Bf1 Ra7 Nc4 Nxc4 Bxc4 Ra6
Kd5 Rxg6 f4 Ra6 Ke4 g6 f3 g7 f2 Rf6 a3 Rxf2 a2 Re2 Bxe2 Kxe2) {0.00/40 8}
92. Rg7 (Rg7 Nxb4 Rxg6 Kc5 Na3 Bd5 Rf6 Nc6 Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2 Na1
Ne7 Re6 Ng8 g7 Bd5 Re5 f4 Rf5 f3 Kc2 Kd4 Kb2 Ke4 Rf8 b3) {+0.46/18 0} Nxb4
(Nxb4 Rxg6 Kc5 Rf6 Nd5 Rxf5 b4 Kc2 Kd4 Rf3 Ne3 Kd2 a3 Nxa3 bxa3 Rxe3)
{0.00/40 12} 93. Na3 (Na3 Bd5 Rxg6 Kc5 Rf6 Nc6 Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2
Na1 Ne7 Re6 Ng8 Re8 Bd5 Rf8 Ne7 g7 b3 Kc3 Kd6 Nxb3 Bxb3 Kxb3 a1=Q g8=Q)
{+0.41/17 3} Bd5 (Bd5 Rxg6 Kc5 Rf6 Nc6 Nxb5 Kxb5 Rxf5 Kc5 Rxd5) {0.00/42
10} 94. Rxg6+ (Rxg6 Kc5 Rf6 Nc6 Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7 g7 Bd5
Kd3 Bg8 Kc2 Kd5 Kb2 Ke5 Rf8 f4 Nc2 b3 Ne1 Ke4 Ng2) {+0.28/18 0} Kc5 (Kc5
Rf6 Nc6 Nc2 b4 g6 b3 Rxf5 bxc2 Rxd5 Kxd5) {0.00/39 9} 95. Rf6 (Rf6 Nc6 Nc2
b4 Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7 g7 Bd5 Kd3 Bc4 Kc2 Kd4 Kb2 Ke5 Rf8 f4 Nb3
Bd5 Nc1 f3 Nxa2 Nf5) {+0.27/16 0} Nc6 (Nc6 Nc2 b4 Rxf5 b3 g6 bxc2 Rxd5
Kxd5) {0.00/41 7} 96. Nc2 (Nc2 b4 Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7 g7 Bd5 Kd3
Bg8 Kc2 Kd5 Kb2 Ke5 Rf8 f4 Nc2 b3 Ne1 Ke4 Re8 Kf5) {+0.27/16 0} b4 (b4 g6
b3 Rxf5 bxc2 Rxd5 Kxd5) {0.00/41 16} 97. Ne3 (Ne3 Be4 g6 a3 Nc2 a2 Na1 Ne7
g7 Bd5 Kd3 Bg8 Kc2 Kd5 Kb2 Ke5 Rf8 b3 Nxb3 Bxb3 Re8 Kf6 Rxe7 Kxe7 Kxb3)
{+0.22/17 0} Be4 (Be4 g6 Ne7 Re6 Nxg6 Rxg6 a3 Rg1 b3 Kc3 b2 Kb3 b1=R Rxb1
Bxb1) {0.00/37 8} 98. g6 (g6 a3 Nc2 a2 Na1 Ne7 Kc1 Bd5 Kb2 Kd4 Nc2 Ke5 Rb6
f4 Nxb4 Bg8 Nd3 Kf5 g7 f3 Ra6 Kg5 Nf2 Nf5) {+0.19/16 0} a3 (a3 Nc2 Ne7 Re6
Nxg6 Rxg6 b3 Nxa3 Kb4 Ra6 b2 Ra7 Kb3 Ke2 b1=Q Nxb1) {0.00/38 6} 99. Nc2
(Nc2 a2 Na1 Ne7 g7 Bd5 Kd3 Bg8 Kc2 Kd4 Kb2 Ke5 Rf8 b3 Ka3 f4 Kb2 Bd5 Nxb3
f3 Nd2 f2) {+0.18/15 0} Ne7 (Ne7 Re6 Nxg6 Rxg6 b3 Nxa3 Kb4 Ra6 b2 Ra7 Kb3
Ke2 b1=Q Nxb1) {0.00/40 5} 100. g7 (g7 a2 Na1 Bd5 Kd3 Bc4 Kc2 Kd4 Kb2 Ke5
Rf8 b3 Kc3 Be6 Nxb3 Bxb3 Kxb3) {+0.22/10 4} a2 (a2 Na1 Bd5 Kc2 Kd4 Ra6 Ke5
Nb3 f4 Rxa2 Bxb3 Kxb3 Kf6 Rg2 Ng8 Kb2 f3 Rg3 f2 Rf3 Kxg7) {0.00/39 8} 101.
Na1 (Na1 Bd5 Kd3 Bg8 Kc2 Kd4 Kb2 Ke5 Rf8 b3 Rb8 Kf6 Nxb3 Kxg7 Kxa2 f4 Kb2
f3 Nd2 Bd5) {+0.07/12 0} Bd5 (Bd5 Kc2 Kd4 Ra6 f4 Nb3 Ke5 Rxa2 Nf5 Ra5 Nxg7
Kd3 Nf5 Nd2 Kd6 Rb5 f3 Rxb4 f2 Rf4 f1=Q Nxf1) {0.00/41 4} 102. Kc2 (Kc2 Kd4
Kb2 Ke5 Rb6 f4 Nc2 f3 Ne3 Be6 Rxb4 f2 Ra4 Kf6 Rf4 Kxg7 Rxf2 Kg6 Ng2 Kg5)
{+0.04/11 1} b3+ (b3 Kb2 Kd4 Ra6 Ke5 Nxb3 Bxb3 Kxb3 a1=Q Rxa1) {0.00/42 5}
103. Kc3 (Kc3 Bc4 Kb2 Kd4 Rb6 Ke5 Nxb3 f4 Nd2 Bd5 Ra6 f3 Nxf3 Bxf3 Ra7 Ng8)
{+0.31/8 1} Bc4 (Bc4 Rf8 Bd5 Kb2 Kd4 Re8 Ng8 Rb8 Ke5 Nxb3 Bxb3 Rxb3 a1=Q
Kxa1) {0.00/43 6} 104. Kb2 (Kb2 Kd4 Rb6 Ke5 Nxb3 f4 Nd2 Bd5 Rb5 Ke6 Rb4 Kf7
Rxf4 Kxg7 Ne4 a1=Q Kxa1) {+0.31/10 0} Kd4 (Kd4 Rf8 Ke5 g8=Q Nxg8 Re8 Kf6
Re1 f4 Nxb3 f3 Nd2 f2 Ne4 Kg6 Nxf2 a1=Q Rxa1) {0.00/46 5} 105. Rb6 (Rb6 Ke5
Nxb3 Bxb3 Rxb3 Kf6 Rb7 Ng8 Kxa2 Kg6 Kb3 f4 Kc4 f3 Kd3 f2 Ke2 Nh6) {+0.27/11
0} Ke5 (Ke5 Nxb3 Bxb3 Rxb3 a1=Q Kxa1) {0.00/48 5} 106. Nxb3 (Nxb3 Bxb3 Rxb3
Kf6 Rb7 Ng8 Kxa2 Kg6 Kb3 f4 Kc4 f3 Kd3 Nh6 Ke3 Nf5 Kxf3) {+0.23/11 0} Bxb3
(Bxb3 Rxb3 a1=Q Kxa1) {0.00/53 7} 107. Rxb3 (Rxb3 Kf6 Rb7 Ng8 Kxa2 Kg6 Kb3
f4 Kc4 f3 Kd3 Nh6 Ke3 Nf5 Kxf3 Nxg7) {+0.17/10 0} a1=Q+ (a1=Q Kxa1)
{0.00/105 4} 108. Kxa1 (Kxa1 Kf6 Rb7 Ng8 Kb2 Kg6 Kc3 f4 Kd4 f3 Ke3 Nh6 Kxf3
Kh7 Kf4) {+0.25/8 1} Kf6 (Kf6 Rb7 Ng8 Kb2 Ke6 Kb3 Kf6 Kb4 Nh6 Kc3 Ng8 Ra7
Kg6 Kd4 Kf6 Kd3 Kg6 Ke2 Nh6 Rb7 Kf6 Kf3 Kg6 Kf2 Kf6 Rd7 Kg6 Kg2 Ng8 Kf3 Nh6
Rb7 Ng8 Kf4 Kf6 Ra7 Nh6 Rd7 Ng8 Kf3 Kg6 Kg2 Nf6 Rb7 Ng8 Kg1 Nf6 Kf2 Ne4 Kf3
Nf6 Ra7 Ng8 Kf4 Nh6 Ke5 Nf7 Ke6 Nh6 Rb7 f4 Kd5 f3) {0.00/55 16} 109. Rb7
(Rb7 Ng8 Kb2 Kg6 Kc3 Nh6 Kd4 Kf6 Kd5 Ng8 Ra7 Nh6 Rd7 Ng8 Kd6 Nh6) {+0.26/11
0} Ng8 (Ng8 Kb2 Ke6 Kb3 Kf6 Kb4 Nh6 Kc3 Ng8 Ra7 Nh6 Kd3 Kg6 Kd4 Kf6 Rc7 Kg6
Ke5 Nf7 Kd5 Nh6 Rb7 Kf6 Rd7 Kg6 Ke5 Ng4 Kd4 Nh6 Ke3 Ng8 Rb7 Nh6 Kf4 Kf6 Rd7
Kg6 Rc7 Kf6 Kg3 Ng8 Ra7 Kg6 Kh4 Nf6 Kh3 Kh7 Kg3 Kg6 Kf3 Ng8 Rb7 Nf6 Ke3 Ng8
Rd7 Nh6 Ke2 Ng8 Kd1 Nf6 Kc2 f4 Ra7 Kh7) {0.00/58 8} 110. Kb2 (Kb2 Kg6 Kc3
Nh6 Kd4 Kf6 Kd5 Ng8 Rc7 Nh6 Rb7 Kg6 Ke6 Ng8 Rf7 Nh6) {+0.31/10 0} Nh6 (Nh6
Kc3 Ng8 Ra7 Kg6 Kd4 Kf6 Kd3 Kg6 Ke3 Nh6 Kd4 Kf6 Rc7 Kg6 Ke5 Nf7 Kd5 Nh6 Rb7
Kf6 Rd7 Ng8 Kc4 Nh6 Kd3 Ng8 Rc7 Kg6 Ke3 Nf6 Kd4 Ng8 Ke5 Nh6 Rd7 Nf7 Kf4 Nh6
Kf3 Ng8 Rc7 Nh6 Rb7 Ng8 Kg3 Nf6 Kf2 Ng8 Rc7 Nf6 Ra7 Ng8 Kg2 Nh6 Kg3 Ng8 Kh3
Nf6 Kg2 Kh7 Kg3 Nh5 Kh4 Nxg7 Kg5 Kg8) {0.00/56 3} 111. Kc3 (Kc3 Kg6 Kd4 Kf6
Rc7 Kg6 Ke5 Ng8 Ra7 Nh6 Ke6 Ng8 Ra1 Kxg7) {+0.34/9 0} Ng8 (Ng8 Ra7 Kg6 Kd4
Nh6 Kd3 Ng8 Rd7 Kh7 Kd4 Nh6 Kd5 Kg6 Rc7 Kf6 Kd4 Ng8 Kc4 Nh6 Kd5 Kg6 Rd7 Kf6
Kd4 Kg6 Ra7 Ng8 Ke5 Nh6 Kf4 Kf6 Rc7 Ng8 Rd7 Nh6 Ke3 Kg6 Kf3 Kf6 Rb7 Kg6 Ra7
Kf6 Kf2 Ng8 Kg2 Kg6 Kh3 Nh6 Rc7 Ng8 Rb7 Kf6 Rd7 Kg6 Rc7 Kh7 Rb7 Kg6 Kh2 Nh6
Rd7 Ng4 Kh3 Nf6 Kh4 f4 Ra7 f3) {0.00/50 3} 112. Kd4 (Kd4 Nh6 Ke3 Kg6 Kf4
Ng8 Ke5 Nh6 Rd7 Ng8 Ke6 Nh6 Rc7 Ng8) {+0.40/8 3} Kg6 (Kg6 Ke5 Nh6 Rd7 Nf7
Ke6 Nh6 Kd5 Kf6 Ra7 Kg6 Rc7 Kf6 Rd7 Kg6 Kd4 Kf6 Ke3 Kg6 Kf3 Ng8 Kf2 Nf6 Rb7
Ng8 Kg2 Nh6 Kg3 Ng8 Kh3 Nf6 Kg2 Kh7 Kg3 Ng8 Kf4 Kg6 Ra7 Nh6 Kf3 Ng8 Ke3 Nf6
Kd4 Ng8 Rb7 Nf6 Rc7 Ng8 Kc3 Nf6 Ra7 Ng8 Rd7 Nh6 Rb7 f4 Kd3 f3) {0.00/53 53}
113. Ke5 (Ke5 Nh6 Ra7 Ng8 Ke6 Nh6 Ra1 Kxg7 Rg1 Kh7 Kf6 Ng8 Kf7 Nh6 Ke6)
{+0.42/9 1} Nh6 (Nh6 Rd7 Nf7 Ke6 Nh6 Kd5 Kf6 Ra7 Kg6 Rc7 Kf6 Rd7 Kg6 Kd4
Kf6 Kd3 Kg6 Ke2 Kh7 Kf3 Ng8 Kg3 Nf6 Rf7 Ng8 Rb7 Kg6 Kf4 Nf6 Ke5 Ng4 Kd4 Nf6
Kc4 Ng8 Kc3 Kf6 Ra7 Nh6 Kd3 Kg6 Rd7 Ng8 Kd4 Nh6 Rc7 Ng8 Ke5 Nh6 Kf4 Ng8 Ra7
Nf6 Kf3 Ng8 Kg2 Nh6 Kf2 Ng8 Rd7 Nf6 Rb7 Ng8 Kg3 Nf6 Kh4 f4 Ra7 f3) {0.00/55
2} 114. Rc7 (Rc7 Ng8 Ra7 Nh6 Ke6 f4 Ra1 Kxg7 Rg1 Kf8 Kf6 Ng8 Ke6 Nh6 Rg6)
{+0.39/9 2} Ng4+ (Ng4 Kd4 Nh6 Rd7 Ng8 Ke5 Nh6 Kf4 Ng8 Rb7 Nf6 Ke5 Ng4 Kd4
Nf6 Re7 Ng8 Rd7 Nf6 Rb7 Ng8 Ke5 Nh6 Rd7 Ng4 Kd5 Nh6 Ra7 Kf6 Kd4 Kg6 Kd3 Ng8
Kc3 Nh6 Kd2 Ng8 Ke1 Nf6 Kf2 Ng4 Kg3 Nf6 Kh3 Ng8 Kg2 Nh6 Kg3 Kf6 Rd7 Kg6 Rc7
Kh7 Ra7 Ng8 Rd7 Nh6 Kh3 f4 Kg2 Nf5) {0.00/51 4} 115. Ke6 (Ke6 Nh6 Rf7 Ng8
Rd7 Nh6 Ra7 f4 Ke5 f3 Ke6 f2 Ra1 Kxg7 Rf1) {+0.38/8 0} Nh6 (Nh6 Kd5 Kf6 Rb7
Kg6 Kd4 Ng8 Ke5 Nh6 Rd7 Nf7 Kd5 Nh6 Kd4 Ng8 Rb7 Nf6 Rc7 Ng8 Kc3 Kf6 Kd2 Kg6
Rb7 Kh7 Ke3 Kg6 Ra7 Nf6 Kd3 Ng8 Kc2 Kf6 Kb3 Kg6 Kb2 Nh6 Kb1 f4 Kc2 f3 Kd1
Kh7) {0.00/38 31} 116. Rf7 (Rf7 Ng8 Rc7 Nh6 Ra7 f4 Ke5 f3 Ke4 f2 Ra1 Kxg7
Ke3 f1=B Ra7 Kf6) {+0.32/10 0} Ng8 (Ng8 Rxf5 Kxg7 Rf7 Kg6 Rf1 Kg7 Rg1 Kf8
Rg6 Ne7 Rf6 Ke8 Rf3 Ng8 Rf1 Nh6 Kf6 Ng8 Ke5 Nh6 Rb1 Kf7 Rb7 Kg6 Ke6 Ng8 Rf7
Nh6 Ra7 Ng8 Ra8 Kg7 Re8 Nh6 Re7 Kg6 Kd5 Kg5 Ra7 Kf4 Ra1 Kg5 Kd4 Ng4 Ra7 Kf5
Rf7 Kg5 Kc3 Nh6 Kb2 Nxf7 Kb1 Kh4) {0.00/40 2} 117. Rc7 (Rc7 Nh6 Rb7 f4 Rf7
Ng8 Rxf4 Kxg7 Rg4 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8) {+0.28/9 1} f4 (f4 Rf7 f3
Rxf3 Kxg7 Kf5 Nh6 Ke5 Kg6 Rg3 Kf7 Kd5 Ng8 Rf3 Ke7 Re3 Kf8 Ke5 Kg7 Rg3 Kf8
Ke6 Nh6 Kf6 Ng8 Kg5 Kf7 Rg2 Ne7 Rd2 Ke6 Re2 Kf7 Kf4 Kf6 Ke4 Ng8 Rg2 Kf7 Kd4
Ne7 Rg1 Kf6 Rf1 Ke6 Kc5 Ng6 Re1 Kf5 Kd4 Kf6 Ke4 Ne7 Rf1 Kg7 Rg1 Kf7 Ke5 Ng8
Rf1 Kg7 Kf5 Ne7 Ke4 Ng8 Ke5 Nh6 Rg1 Kf7 Kf4 Kf6 Ke4 Kf7 Ke3 Nf5 Kf4 Nd4 Ke4
Ne6 Ke5 Nd8 Kd5 Ke7 Rg7 Nf7 Rg3 Kf6 Rf3 Kg6 Ke6 Ng5 Ke7 Nxf3 Kd8 Kf6)
{0.00/46 3} 118. Rf7 (Rf7 f3 Rxf3 Kxg7 Rg3 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rh8
Kf8 Rh7 Ke8) {+0.19/8 1} f3 (f3 Rf8 Kxg7 Rf7 Kh6 Rxf3 Kg7 Rg3 Kf8 Rg1 Nh6
Kf6 Ng8 Kf5 Kf7 Re1 Nh6 Kf4 Ng8 Kg5 Kf8 Re6 Kf7 Rb6 Kg7 Rb7 Kf8 Rd7 Ne7 Kf4
Ng8 Kf5 Ne7 Kg5 Ng8 Rd8 Kf7 Rb8 Kg7 Ra8 Kf7 Kf4 Kg7 Ra7 Kf6 Ra6 Kf7 Ke5 Ne7
Ra3 Ng6 Kf5 Ne7 Kg5 Ng8 Rf3 Ke6 Rf1 Ne7 Rg1 Nc6 Re1 Kd6 Kf4 Kd5 Re8 Kd6 Ke4
Ne7 Rd8 Ke6 Rb8 Nd5 Kd4 Ne7 Rb6 Kf7 Ke3 Nd5 Kd2 Nxb6 Ke1 Ke6) {0.00/49 0}
119. Rxf3 (Rxf3 Kxg7 Rg3 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rh8 Kf8 Rh7 Ke8 Ra7)
{+0.13/8 0} Kxg7 (Kxg7 Ke5 Kg6 Rg3 Kf7 Rd3 Nh6 Rf3 Ke7 Rg3 Nf7 Ke4 Nd6 Kd5
Ne8 Ke5 Kd7 Rg6 Nc7 Rg5 Ne6 Rh5 Nc7 Rh7 Kc6 Kf5 Nd5 Ke6 Nc7 Ke5 Nb5 Rh6 Kc5
Rh1 Kc6 Rf1 Nc7 Rc1 Kd7 Rd1 Kc6 Rd6 Kc5 Rd8 Kc6 Rc8 Kb7 Rg8 Kc6 Rg4 Nb5 Rc4
Kd7 Kf6 Kd6 Rf4 Na3 Rf3 Nb5 Rd3 Kc6 Rd8 Nc7 Kg6 Ne6 Kf5 Nxd8 Kf6 Kd7)
{0.00/51 3} 120. Rg3+ (Rg3 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rh8 Kf8 Rh7 Ke8 Ra7
Kf8 Rf7) {+0.13/7 0} Kf8 (Kf8 Rf3 Kg7 Ke5 Kg6 Rg3 Kf7 Rd3 Nh6 Rf3 Ke7 Rg3
Nf7 Ke4 Nd6 Kd5 Ne8 Ke5 Kd7 Rg6 Nc7 Rg5 Ne6 Rh5 Nc7 Rh7 Kc6 Kf5 Nd5 Ke6 Nc7
Ke5 Nb5 Rh6 Kc5 Rh1 Kc6 Rf1 Nc7 Rc1 Kd7 Rd1 Kc6 Ke4 Nb5 Rg1 Nc7 Rg6 Kd7 Kd3
Ne8 Kd4 Nc7 Rb6 Ne8 Kd5 Nc7 Kc5 Ne6 Kc4 Nd8 Kd3 Ke7 Kd4 Ne6 Kd5 Nc7 Kc6 Ne8
Kc5 Kd7 Rb7 Ke6 Kd4 Nf6 Rb6 Kf5 Rb5 Ke6 Ra5 Ng4 Ra8 Kf5 Re8 Kg6 Kd5 Nf6 Ke6
Nxe8 Ke5 Kg5) {0.00/54 2} 121. Rg6 (Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rh8 Kf8 Rh7 Ke8
Ra7 Kf8 Rf7 Ke8) {+0.18/7 1} Ne7 (Ne7 Rg3 Ng8 Rf3 Kg7 Ke5 Kg6 Rg3 Kf7 Rd3
Nh6 Rf3 Ke7 Rg3 Nf7 Ke4 Nd6 Kd5 Ne8 Ke5 Kd7 Rg6 Nc7 Rg5 Ne6 Rh5 Nc7 Rh7 Kc6
Kf5 Nd5 Ke6 Nc7 Ke5 Nb5 Rh6 Kc5 Rh1 Kc6 Rf1 Nc7 Rc1 Kd7 Kd4 Kd6 Ke4 Nb5 Kf5
Kd5 Rd1 Kc5 Ke6 Na3 Rd7 Nb5 Rg7 Kc6 Rg6 Nd4 Ke5 Kc5 Kf4 Nc6 Ke4 Nb4 Rg1 Nc6
Rd1 Na7 Rd3 Nb5 Rd8 Nd6 Ke5 Nc4 Ke6 Ne3 Rd7 Kc6 Kf6 Kxd7 Kg5 Ke6) {0.00/56
2} 122. Rf6+ (Rf6 Ke8 Rh6 Ng8 Rg6 Kf8 Kd6 Kf7 Rg2 Nh6 Ke5 Ng8) {+0.15/7 1}
Ke8 (Ke8 Kd6 Nc8 Kc5 Ke7 Ra6 Kf7 Ra8 Ne7 Kd4 Ke6 Ra6 Kf5 Rb6 Ng6 Kd5 Nf4
Kd6 Ke4 Ra6 Nd3 Ra8 Kf5 Ra5 Kf6 Kd5 Nf4 Ke4 Ne6 Rf5 Ke7 Ke5 Nf8 Rf1 Nd7 Kd4
Nf6 Ra1 Kf8 Ke5 Ng8 Ra7 Ne7 Rd7 Ng8 Kf5 Ne7 Kg5 Ng8 Rd8 Kg7 Kf5 Ne7 Ke6 Ng8
Rc8 Nh6 Ke5 Ng4 Kf4 Nh6 Rc7 Kf6 Rc6 Kg7 Kg5 Ng8 Re6 Kf8 Rb6 Kf7 Rb7 Ke6 Rb1
Kf7 Rg1 Ke7 Rf1 Kd6 Re1 Kd7 Rd1 Ke7 Kf5 Kf7 Kf4 Kg7 Rf1 Nh6 Ke5 Ng4 Kf5 Ne3
Ke4 Nxf1 Ke5 Ng3) {0.00/50 2} 123. Rh6 (Rh6 Ng8 Rg6 Kf8 Kd6 Kf7 Ke5 Kxg6)
{+0.14/7 1} Ng8 (Ng8 Rh8 Kf8 Rh7 Ke8 Ra7 Kf8 Ra8 Kg7 Rc8 Nh6 Rc7 Kg6 Ke5
Ng4 Kf4 Nh6 Ke4 Kf6 Kd4 Kf5 Rb7 Kf4 Kd3 Nf5 Rb5 Ng7 Kc4 Ke4 Rb1 Ne6 Ra1 Ke5
Re1 Kf5 Kd5 Nf4 Kd6 Kf6 Ra1 Kf5 Ra4 Nd3 Ra5 Kf6 Kd5 Nf4 Ke4 Ne6 Rf5 Ke7 Ke5
Nf8 Rf1 Nd7 Kd4 Ke6 Ra1 Ke7 Ra7 Ke6 Ke4 Nc5 Ke3 Kd5 Kf4 Ne6 Kg4 Ke5 Ra5 Kd4
Kf5 Nc5 Ra7 Kd5 Rh7 Ne4 Re7 Nd6 Kf4 Kd4 Rc7 Nc4 Rc6 Ne3 Re6 Nd5 Kf5 Ne3
Rxe3 Kxe3 Ke5 Kf3) {0.00/51 2} 124. Rh7 (Rh7 Kf8 Rf7 Ke8 Ra7 Kf8 Rf7 Ke8
Rf3 Nh6 Ra3 Kf8) {+0.11/7 1} Kf8 (Kf8 Ra7 Nh6 Ra3 Kg7 Rg3 Kf8 Rf3 Kg7 Ke5
Ng8 Ke4 Nf6 Kf5 Ng8 Rg3 Kf8 Ke4 Nf6 Kd3 Kf7 Kd4 Ng8 Rg1 Nf6 Re1 Ng8 Ra1 Nh6
Ra7 Kg6 Ra6 Kg5 Kc5 Nf5 Kd5 Nh6 Ra7 Kf5 Kc5 Ng4 Rf7 Ke4 Re7 Kf5 Kd6 Kg5 Rg7
Kf4 Rf7 Ke4 Rf8 Ne3 Re8 Kd4 Ke6 Nc4 Rd8 Ke3 Kd5 Nd2 Rd7 Nf3 Rf7 Nh2 Re7 Kf4
Re4 Kf5 Re6 Ng4 Ra6 Nf6 Kc4 Kg6 Kd3 Kg7 Ra8 Kh6 Rf8 Nd7 Ke3 Nxf8 Kf2 Ne6)
{0.00/52 2} 125. Rf7+ (Rf7 Ke8 Rg7 Kf8 Rg6 Ne7 Rf6 Ke8 Rh6 Ng8 Rg6 Kf8 Rg4)
{+0.11/8 0} Ke8 (Ke8) {0.00/1 0} 126. Rf2 (Rf2 Nh6 Ra2 Kf8 Ra7 Ng8 Rh7 Ke8
Ra7 Kf8 Rf7 Ke8 Rf4) {+0.15/7 1} Nh6 (Nh6 Kd5 Ke7 Rf1 Nf7 Rf3 Nh6 Ke5 Ng8
Re3 Kf7 Rg3 Kf8 Kf4 Ne7 Rg1 Ng8 Rd1 Kf7 Rf1 Kf6 Kg3 Ke7 Ra1 Ke6 Kf4 Kf6 Ra6
Kf7 Kg3 Ne7 Ra7 Ke6 Ra8 Ke5 Kf3 Ke6 Ra6 Ke5 Ra5 Nd5 Ra1 Kd4 Ra4 Ke5 Re4 Kf5
Re8 Nf6 Rf8 Ke5 Ra8 Ke6 Kf4 Nd5 Ke4 Nf6 Kf3 Kd6 Kf4 Nd5 Kf5 Ne7 Ke4 Nc6 Rg8
Ne7 Rg1 Ke6 Rf1 Nc6 Rd1 Nb4 Rc1 Kd6 Rg1 Nc6 Rg6 Kd7 Ke3 Ne5 Kf4 Nxg6 Ke4
Ne7) {0.00/53 6} 127. Ra2 (Ra2 Kf8 Ra7 Ng8 Kf5 Ne7 Ke6 Ng8 Rf7 Ke8 Rf4 Nh6
Rf6 Ng8) {+0.16/8 1} Kf8 (Kf8 Rg2 Ng8 Kd6 Nh6 Kc5 Ng8 Rb2 Kf7 Rb1 Ke6 Kd4
Ne7 Ke4 Nd5 Ra1 Nf6 Kd4 Nd7 Ra6 Ke7 Rg6 Nf6 Ke5 Nd7 Kf4 Kf7 Ra6 Ke7 Ra7 Kd6
Rb7 Ke6 Rb1 Kd6 Rd1 Ke6 Rg1 Nc5 Re1 Kd5 Rd1 Ke6 Rd8 Ke7 Rg8 Ke6 Ke3 Ke5 Rg5
Kd6 Kd4 Ne6 Kd3 Nxg5 Kc4 Ke5) {0.00/50 3} 128. Rg2 (Rg2 Ng8 Rg6 Ne7 Rg5 Ng8
Rg1 Nh6 Kf6 Ng8 Kg5 Kf7 Rf1) {+0.14/8 0} Ng8 (Ng8 Kd6 Nh6 Kc5 Ng8 Rb2 Kf7
Rb1 Ke6 Kd4 Ne7 Ke4 Nd5 Ra1 Nf6 Kd4 Nd7 Ra6 Ke7 Rg6 Nf6 Kd3 Kf7 Rg5 Nd7 Ke4
Ke6 Rg6 Ke7 Rc6 Nf6 Kf5 Nd7 Re6 Kf7 Rd6 Nf8 Rd1 Ng6 Rd7 Ne7 Ke5 Kf8 Rd1 Kg7
Rg1 Kf8 Rf1 Kg7 Rf3 Ng8 Ke4 Nf6 Kf5 Ng8 Rg3 Kf8 Kg5 Ke7 Re3 Kd6 Re1 Ne7 Kf6
Nd5 Kg6 Ne7 Kf7 Nf5 Re4 Kd5 Kf6 Kxe4 Kg5 Nd4) {0.00/51 1} 129. Rg6 (Rg6 Ne7
Rf6 Ke8 Rh6 Ng8 Rh8 Kf8 Rh5 Kg7 Rg5 Kf8) {+0.16/7 0} Ne7 (Ne7 Rg3 Ng8 Rf3
Kg7 Ke5 Kg6 Rg3 Kf7 Kf4 Nh6 Rg2 Kf6 Kf3 Nf5 Ke4 Nh6 Rg3 Kf7 Rf3 Ke6 Kf4 Nf7
Re3 Kf6 Re1 Nd6 Rf1 Ke6 Rg1 Kf6 Rg5 Nc4 Rg8 Nd6 Rb8 Ke6 Rb6 Kd5 Ra6 Nc4 Rg6
Kd4 Kf5 Kd5 Kf6 Nd6 Rg5 Kc6 Ke6 Nb5 Rg3 Nc7 Kf5 Kc5 Rd3 Kc6 Kf6 Nb5 Ke7 Na7
Rd2 Nb5 Rd7 Nc7 Rd6 Kc5 Rd1 Nd5 Ke6 Nc7 Kf5 Nb5 Rg1 Nd4 Ke5 Nf3 Kf4 Nxg1
Ke3 Kb4) {0.00/52 2} 130. Rf6+ (Rf6 Ke8 Rh6 Ng8 Rh5 Kf8 Rh7 Ke8 Ra7 Kf8 Rf7
Ke8 Rf4) {+0.11/7 1} Ke8 (Ke8 Kd6 Nc8 Kc5 Ke7 Ra6 Kf7 Ra8 Ne7 Kd4 Nf5 Ke5
Nh6 Kd5 Kf6 Ra6 Kg7 Ra7 Kf6 Rc7 Ng8 Rc6 Kg7 Rb6 Nf6 Kc4 Kf7 Rb7 Ke6 Ra7 Ne4
Kd4 Nf6 Ra6 Kf5 Rb6 Ne4 Rb5 Kf4 Rb7 Nf6 Rb6 Ne4 Re6 Ng3 Rf6 Nf5 Kd5 Kg5 Ra6
Nh6 Rb6 Ng4 Kd4 Kf4 Rb1 Ne3 Rb8 Nf5 Kd5 Ne3 Kc5 Ke5 Re8 Kf4 Kd4 Nf5 Kd3 Kg5
Ke2 Kf6 Kf3 Kg7 Kf4 Kf7 Kxf5 Kxe8 Ke6 Kf8) {0.00/53 3} 131. Rh6 (Rh6 Ng8
Rg6 Kf8 Kd7 Kf7 Re6 Kg7 Rd6 Kf7) {+0.13/7 0} Ng8 (Ng8 Rh8 Kf8 Rh7 Ke8 Ra7
Kf8 Rf7 Ke8 Rf1 Nh6 Rd1 Ng8 Rb1 Kf8 Kf5 Ne7 Kf4 Kf7 Ke4 Ke6 Rb6 Kf7 Rb7 Kf6
Rc7 Ng6 Rc6 Kf7 Ra6 Ne7 Kd4 Kg7 Rb6 Nf5 Ke5 Nh6 Rb7 Kg6 Kf4 Kf6 Ke4 Nf7 Kf3
Nd6 Rc7 Ke5 Ra7 Nc4 Ra1 Kd5 Rd1 Ke5 Re1 Kd5 Kf4 Kd6 Ke4 Nd2 Kf5 Nc4 Rd1 Kc5
Ke4 Nd6 Kf4 Kc6 Kg5 Nc4 Kf6 Kc5 Kf5 Ne3 Ke5 Nxd1 Kf6 Nc3) {0.00/52 2} 132.
Rg6 (Rg6 Kf8 Kd7 Kf7 Rg2 Nf6 Kd6 Ne8 Ke5 Ng7) {+0.11/7 1} Kf8 (Kf8 Kd6 Kf7
Rg4 Kf8 Rg1 Nf6 Ke5 Ng8 Rf1 Kg7 Kd4 Kg6 Ke3 Nf6 Kf4 Ng8 Rg1 Kf7 Rg2 Nf6 Rb2
Nd5 Ke5 Ne7 Rb7 Kf8 Rb8 Kf7 Ra8 Kg7 Kd4 Nf5 Kc4 Ne3 Kb5 Nf5 Ka4 Kf6 Ra5 Ke6
Kb4 Nd6 Kb3 Ne4 Kc2 Nd6 Kd2 Ne8 Ra6 Kd5 Kd3 Nd6 Rb6 Ke5 Rxd6 Kxd6 Ke2 Kc5)
{0.00/47 2} 133. Rg1 (Rg1 Nh6 Rg2 Ng8 Rd2 Kg7 Rd7 Kg6 Rf7 Nh6) {+0.13/7 1}
Nh6 (Nh6 Re1 Kg7 Kd6 Nf5 Kd7 Kf6 Re6 Kg7 Rb6 Nh6 Rb7 Kg6 Kc6 Nf7 Kd5 Kf6
Rb6 Kg7 Ke6 Nh6 Rb7 Kg6 Kd5 Ng8 Rb8 Nf6 Kd6 Ng4 Rg8 Kf5 Rf8 Ke4 Re8 Kf5 Re2
Kf4 Kc5 Ne3 Kd4 Nf5 Kd3 Kg4 Rg2 Kf4 Rf2 Ke5 Re2 Kd5 Rg2 Nd6 Rg5 Ke6 Ra5 Nf5
Rc5 Ne7 Kd4 Nf5 Kc3 Ng3 Rc8 Kf7 Kd4 Nf5 Kd5 Ne7 Ke4 Nxc8 Kf4 Nd6) {0.00/48
2} 134. Rg2 (Rg2 Ng8 Rg3 Nh6 Kf6 Ng8 Kf5 Kf7 Rf3) {+0.11/7 1} Ng8 (Ng8 Kd6
Nf6 Rf2 Kg7 Rf1 Ng8 Ke5 Ne7 Rf3 Ng8 Rg3 Kf8 Kf4 Ne7 Rg1 Ng8 Rg6 Kf7 Rg2 Nf6
Rb2 Nd5 Ke5 Ne7 Rb7 Kf8 Rb8 Kf7 Ra8 Kg7 Kd4 Nf5 Kc4 Ne3 Kb5 Nf5 Ka4 Kf6 Ra5
Ke6 Kb4 Nd6 Kb3 Ne4 Kc4 Nd6 Kd4 Nf5 Ke4 Ng3 Kf3 Nf5 Ra8 Ke5 Ke2 Ke4 Kd2 Nd4
Re8 Kd5 Re1 Nf3 Kd3 Nxe1 Kc3 Nf3) {0.00/53 2} 135. Rg3 (Rg3 Nh6 Rg1 Ng8 Rf1
Kg7 Rf7 Kg6 Rf8 Kg7 Rf7 Kg6) {+0.11/7 0} Nh6 (Nh6 Rg1 Ng8 Rc1 Nh6 Rf1 Kg7
Rg1 Kf8 Rc1 Kg7 Rc7 Kg6 Ra7 Ng4 Rb7 Nh6 Kd6 Nf5 Kd5 Nh6 Rb6 Kg5 Ke4 Ng4 Rb5
Kf6 Rf5 Kg6 Kf4 Nh6 Rf8 Kg7 Ra8 Kg6 Ra6 Kg7 Kg5 Nf7 Kh5 Ne5 Rb6 Nc4 Rc6 Ne5
Ra6 Nf7 Rg6 Kf8 Rg1 Nd6 Re1 Kf7 Kg5 Ne8 Rf1 Ke7 Ra1 Kd6 Ra6 Ke7 Kg6 Nc7 Kf5
Nxa6 Ke4 Nb4) {0.00/53 2} 136. Rg6 (Rg6 Ng8 Kd6 Kf7 Rg7 Kxg7) {+0.10/6 1}
Ng8 (Ng8 Kd6 Kf7 Rg4 Kf8 Rg1 Nf6 Ke5 Ng8 Ke4 Ne7 Rf1 Kg7 Ke3 Ng6 Kd4 Ne7
Ke4 Ng8 Ke5 Ne7 Rf3 Ng8 Rg3 Kf7 Ke4 Ne7 Kf3 Kf6 Rg2 Ke5 Re2 Kf6 Re1 Nd5 Ke4
Ne7 Kd3 Ng6 Kd2 Nf4 Rb1 Nd5 Kd3 Nf4 Ke4 Ne6 Rf1 Ke7 Ke5 Nc7 Rf6 Ne8 Re6 Kd7
Rg6 Nc7 Rg7 Kc6 Ke4 Nb5 Rf7 Nd6 Kd3 Nxf7 Ke3 Kc7) {0.00/50 2} 137. Rg2 (Rg2
Nh6 Rg3 Ng8 Rh3 Kg7 Rg3 Kf8) {+0.12/6 0} Nh6 (Nh6 Kf6 Ng8 Kg6 Ne7 Kg5 Ng8
Rf2 Ke7 Re2 Kd6 Re1 Ne7 Kf6 Nd5 Kf5 Ne7 Ke4 Nc6 Rd1 Ke6 Rg1 Ne5 Rg5 Nd7 Rg6
Nf6 Kd4 Kf5 Rg1 Nd7 Rf1 Ke6 Re1 Kd6 Ke3 Nc5 Kf3 Kd5 Rd1 Ke6 Ra1 Kd5 Kg4 Ne4
Kf4 Nc5 Rd1 Ke6 Kf3 Ke5 Kg4 Ne4 Rf1 Kd4 Kh5 Ng3 Kg5 Nxf1 Kh6 Kc5) {0.00/51
2} 138. Rg3 (Rg3 Ng8 Rg5 Nh6 Rg1 Ng8 Rg2 Nh6 Rg6 Ng8) {+0.10/6 1} Ng8 (Ng8
Rf3 Kg7 Rb3 Kf8 Kf5 Ne7 Kf4 Ng8 Rf3 Kg7 Re3 Kf7 Re5 Kf6 Rf5 Ke6 Rg5 Ne7 Re5
Kd6 Ke4 Nc6 Rd5 Ke6 Rd1 Ne5 Kf4 Nc6 Rg1 Ne7 Re1 Kd6 Ke4 Nc6 Rd1 Ke6 Rg1 Ne5
Rg8 Nd7 Re8 Kd6 Ra8 Nf6 Kf5 Nd7 Rg8 Kd5 Rg6 Nc5 Rg1 Nd3 Ra1 Nc5 Ra7 Ne4 Rd7
Nd6 Kf4 Kc6 Ke5 Kxd7 Kf4 Ke6 Kg4) {0.00/50 1} 139. Rg5 (Rg5 Nh6 Rg1 Ng8 Rg2
Nh6 Kf6 Ng8 Ke6) {+0.11/6 1} Nh6 (Nh6 Kd5 Kf7 Re5 Kg7 Kc4 Kf7 Kd3 Kf6 Ke4
Ng4 Rf5 Ke6 Rg5 Nf6 Kd3 Kd6 Kd4 Nd7 Rg6 Ke7 Kd5 Nf6 Ke5 Nd7 Kf4 Nf6 Kg5 Ne8
Rc6 Nd6 Rc1 Nf7 Kf4 Kd6 Rg1 Ke6 Rg6 Kd5 Rb6 Nd6 Rb8 Ne4 Rb1 Nc3 Kf5 Nxb1
Kf4 Nc3) {0.00/44 2} 140. Kf6 (Kf6 Ng8 Kg6 Ne7 Kf6 Ng8 Ke6 Nh6 Rg1 Ng8 Rg2
Nh6 Rg6 Ng8) {+0.10/6 0} Ng8+ (Ng8 Ke6 Nh6 Kd5 Nf7 Rg2 Nh6 Rb2 Kf7 Rb7 Kg6
Rb6 Kg5 Ke5 Ng4 Kd4 Kf4 Rb1 Nf6 Rb7 Kf5 Rb5 Ke6 Rb8 Nd7 Ra8 Kd6 Ra6 Ke7 Rg6
Nf6 Ke5 Nd7 Kf4 Nf6 Kg5 Ne8 Rc6 Nd6 Rc1 Nf7 Kf4 Kd6 Ke4 Ke7 Rc7 Ke6 Rc6 Ke7
Kf4 Nd8 Rc8 Kd7 Ke4 Kxc8 Kd5 Kb7) {0.00/45 2} 141. Ke6 (Ke6 Nh6 Rg1 Ng8 Rc1
Nh6 Rc7 Ng8 Rf7 Ke8 Rf4 Nh6) {+0.09/7 0} Nh6 (Nh6 Kd5 Nf7 Rg2 Nh6 Rb2 Kf7
Rb7 Kg6 Rb6 Kg5 Ke5 Ng4 Kd4 Kf4 Rb1 Nf6 Rb7 Kf5 Rb5 Ke6 Rb8 Nd7 Ra8 Kd6 Ra6
Ke7 Rg6 Nf6 Ke5 Nd7 Kf4 Nf6 Kg5 Ne8 Rc6 Nd6 Rc1 Nf7 Kf4 Kd6 Ke4 Ke7 Rc7 Ke6
Rc6 Ke7 Kf4 Nd8 Rc8 Kd7 Ke4 Kxc8 Kd5 Kb7) {0.00/51 0} 142. Rg1 (Rg1 Ng8 Rg2
Nh6 Rd2 Ng8 Rd7 Nh6 Rh7 Ng8) {+0.10/5 0} Ng8 (Ng8 Rc1 Nh6 Rf1 Kg7 Rg1 Kf8
Rc1 Kg7 Rc7 Kg6 Ra7 Ng4 Rb7 Nh6 Kd6 Nf5 Kd5 Nh6 Rb6 Kg5 Ke5 Ng4 Kd4 Kf4 Rb1
Nf6 Rb7 Kf5 Rb5 Ke6 Rb8 Nd7 Ra8 Kd6 Ra6 Ke7 Rg6 Nf6 Ke5 Nd7 Kf4 Nf6 Kf5 Nd5
Rc6 Ne3 Ke4 Ng4 Kf4 Nf6 Rxf6 Kxf6 Ke3 Kg5) {0.00/54 1} 143. Rg3 (Rg3 Nh6
Rg1 Ng8 Rh1 Kg7 Rg1 Kf8) {+0.12/6 1} Nh6 (Nh6 Rg1 Ng8 Rc1 Nh6 Rf1 Kg7 Rg1
Kf8 Rc1 Kg7 Rc7 Kg6 Ra7 Ng4 Rb7 Nh6 Kd6 Nf5 Kd5 Nh6 Rb6 Kg5 Ke5 Ng4 Kd4 Kf4
Rb1 Nf6 Rb7 Kf5 Rb5 Ke6 Re5 Kd6 Re1 Nd5 Ke4 Ne7 Ra1 Kd7 Ra6 Ke8 Ke5 Kf8 Rb6
Ng8 Kf5 Ke8 Rb8 Kf7 Rxg8 Kxg8 Kg6 Kf8 Kh5 Ke7) {0.00/54 3} 144. Rg1 (Rg1
Ng8 Rg2 Nh6 Rg6 Ng8) {+0.09/6 1} Ng8 (Ng8 Rc1 Nh6 Rf1 Kg7 Rg1 Kf8 Rc1 Kg7
Rc7 Kg6 Ra7 Ng4 Rb7 Nh6 Kd6 Nf5 Kd5 Nh6 Rb6 Kg5 Ke5 Ng4 Ke6 Kf4 Rb4 Kf3 Rb1
Kf4 Ra1 Nh6 Ra4 Kg5 Ke5 Nf7 Ke4 Nd6 Kd5 Nf7 Ra7 Kg6 Ke4 Nh6 Kf4 Kf6 Ra6 Kg7
Rxh6 Kxh6 Ke5 Kg6 Ke6 Kg7) {0.00/53 0} 145. Rg2 (Rg2 Nh6 Rg3 Ng8) {+0.10/6
0} Nh6 (Nh6 Rb2 Ng8 Ke5 Kf7 Kd6 Kg7 Rb7 Kf6 Rb6 Ne7 Kd7 Kf7 Rb1 Ng8 Kd6 Kg6
Rg1 Kf7 Rg4 Kf8 Rf4 Kg7 Rf3 Kg6 Ke5 Kg7 Kf5 Nh6 Kg5 Ng8 Rh3 Kf8 Kf5 Kf7 Rh7
Kf8 Ra7 Ne7 Ke4 Nc6 Ra1 Ke7 Kd5 Kd7 Re1 Ne7 Rxe7 Kxe7 Ke5 Kd7 Kf6 Kd6)
{0.00/50 2} 146. Rg5 (Rg5 Ng8 Rg1 Nh6 Kf6 Ng8 Ke5 Kf7 Rf1) {+0.08/6 1} Ng8
(Ng8 Rc5 Kg7 Rc7 Kg6 Ra7 Nh6 Ra3 Ng4 Rg3 Kg5 Rg2 Kf4 Ra2 Ke4 Ra4 Kf3 Kf5
Ne3 Kf6 Ng4 Ke6 Nh6 Rb4 Ng4 Kd5 Ne3 Ke5 Ng4 Kd4 Nh6 Rb1 Kf4 Ra1 Nf5 Kd5 Kf3
Ke5 Ne3 Ra3 Ke2 Kf4 Nf1 Rf3 Ke1 Rxf1 Kxf1 Kg3 Kg1 Kg4 Kf2) {0.00/49 2} 147.
Rg1 (Rg1 Nh6 Rg3 Ng8) {+0.11/6 0} Nh6 (Nh6 Ke5 Nf7 Kf6 Nh6 Kg6 Ng8 Rg5 Ne7
Kh7 Kf7 Ra5 Kf8 Ra3 Ke8 Ra8 Kf7 Ra2 Nd5 Ra6 Nf6 Kh6 Ng8 Kh5 Nf6 Kh4 Nd5 Kg5
Ne7 Rb6 Ke8 Rb7 Ng8 Ra7 Kf8 Kh5 Nf6 Kh6 Ng8 Kg5 Ke8 Kg6 Ne7 Rxe7 Kxe7 Kg7
Ke6) {0.00/43 1} 148. Kf6 (Kf6 Ng8 Kg6 Ne7 Kf6 Ng8 Ke6) {+0.08/6 1} Ng8+
(Ng8 Kg6 Ne7 Kg5 Ng8 Ra1 Kg7 Re1 Kf8 Kf4 Nf6 Rf1 Ng8 Rf3 Kg7 Re3 Kf7 Rd3
Nf6 Ke5 Ke7 Kf5 Ne8 Re3 Kd7 Kg6 Nc7 Re4 Kc6 Kf5 Nb5 Ke5 Kd7 Rf4 Nc7 Rg4 Ne6
Re4 Nd8 Rd4 Ke7 Rxd8 Kxd8 Kd6 Ke8 Kc5 Kf7 Kb4 Ke7) {0.00/47 2} 149. Kg6
(Kg6 Ne7 Kf6 Ng8 Kg6 Ne7 Kh7 Kf7 Rf1 Ke6 Re1 Kf6 Re2) {+0.08/7 0} Ne7+ (Ne7
Kg5 Ng8 Ra1 Kg7 Re1 Kf8 Kf4 Nf6 Rf1 Ng8 Rf3 Kg7 Re3 Kf7 Rd3 Nf6 Ke5 Ke7 Kf5
Ne8 Re3 Kd7 Rf3 Ng7 Kg6 Ne6 Rf6 Nc7 Rf1 Nd5 Kg5 Nc7 Re1 Ne8 Kg4 Nd6 Rd1 Ke6
Rxd6 Kxd6 Kh3 Ke5) {0.00/42 0} 150. Kf6 (Kf6 Ng8 Kg6 Ne7 Kh7 Kf7 Rf1 Ke6
Re1 Kf6 Re2) {+0.09/7 0} Ng8+ (Ng8 Kg6 Ne7 Kg5 Nd5 Rd1 Ne7 Rd7 Kf7 Rb7 Kf8
Kf6 Ng8 Kf5 Ne7 Ke5 Ng8 Kd6 Nh6 Rb6 Nf7 Ke6 Nh6 Rb1 Kg7 Rf1 Ng8 Re1 Kf8 Rh1
Kg7 Rh5 Kg6 Rf5 Nh6 Rf6 Kg5 Rxh6 Kxh6 Kf6 Kh7 Kf7 Kh6 Ke8 Kg6) {0.00/39 15}
151. Kg6 (Kg6 Ne7 Kf6 Ng8) {+0.06/7 1} Ne7+ (Ne7 Kg5 Nd5 Rd1 Ne7 Rd7 Kf7
Rb7 Kf8 Kf6 Ng8 Kf5 Ne7 Ke5 Ng8 Rd7 Nh6 Ra7 Ke8 Kf6 Ng8 Kf5 Kf8 Kg5 Ne7 Ra6
Kg7 Rf6 Ng8 Rf3 Nh6 Rg3 Ng8 Kh4 Kf7 Rxg8 Kxg8 Kh3 Kh7) {0.00/33 0} 152. Kf6
(Kf6 Ng8) {+0.05/5 0} Ng8+ (Ng8) {0.00/52 1 3-fold repetition} 1/2-1/2



================================================
FILE: files/misc/pgn.txt
================================================


Standard: Portable Game Notation Specification and Implementation Guide

Revised: 1994.03.12

Authors: Interested readers of the Internet newsgroup rec.games.chess

Coordinator: Steven J. Edwards (send comments to sje@world.std.com)


0: Preface

From the Tower of Babel story:

"If now, while they are one people, all speaking the same language, they have
started to do this, nothing will later stop them from doing whatever they
propose to do."

Genesis XI, v.6, _New American Bible_


1: Introduction

PGN is "Portable Game Notation", a standard designed for the representation of
chess game data using ASCII text files.  PGN is structured for easy reading and
writing by human users and for easy parsing and generation by computer
programs.  The intent of the definition and propagation of PGN is to facilitate
the sharing of public domain chess game data among chessplayers (both organic
and otherwise), publishers, and computer chess researchers throughout the
world.

PGN is not intended to be a general purpose standard that is suitable for every
possible use; no such standard could fill all conceivable requirements.
Instead, PGN is proposed as a universal portable representation for data
interchange.  The idea is to allow the construction of a family of chess
applications that can quickly and easily process chess game data using PGN for
import and export among themselves.


2: Chess data representation

Computer usage among chessplayers has become quite common in recent years and a
variety of different programs, both commercial and public domain, are used to
generate, access, and propagate chess game data.  Some of these programs are
rather impressive; most are now well behaved in that they correctly follow the
Laws of Chess and handle users' data with reasonable care.  Unfortunately, many
programs have had serious problems with several aspects of the external
representation of chess game data.  Sometimes these problems become more
visible when a user attempts to move significant quantities of data from one
program to another; if there has been no real effort to ensure portability of
data, then the chances for a successful transfer are small at best.


2.1: Data interchange incompatibility

The reasons for format incompatibility are easy to understand.  In fact, most
of them are correlated with the same problems that have already been seen with
commercial software offerings for other domains such as word processing,
spreadsheets, fonts, and graphics.  Sometimes a manufacturer deliberately
designs a data format using encryption or some other secret, proprietary
technique to "lock in" a customer.  Sometimes a designer may produce a format
that can be deciphered without too much difficulty, but at the same time
publicly discourage third party software by claiming trade secret protection.
Another software producer may develop a non-proprietary system, but it may work
well only within the scope of a single program or application because it is not
easily expandable.  Finally, some other software may work very well for many
purposes, but it uses symbols and language not easily understood by people or
computers available to those outside the country of its development.


2.2: Specification goals

A specification for a portable game notation must observe the lessons of
history and be able to handle probable needs of the future.  The design
criteria for PGN were selected to meet these needs.  These criteria include:

1) The details of the system must be publicly available and free of unnecessary
complexity.  Ideally, if the documentation is not available for some reason,
typical chess software developers and users should be able to understand most
of the data without the need for third party assistance.

2) The details of the system must be non-proprietary so that users and software
developers are unrestricted by concerns about infringing on intellectual
property rights.  The idea is to let chess programmers compete in a free market
where customers may choose software based on their real needs and not based on
artificial requirements created by a secret data format.

3) The system must work for a variety of programs.  The format should be such
that it can be used by chess database programs, chess publishing programs,
chess server programs, and chessplaying programs without being unnecessarily
specific to any particular application class.

4) The system must be easily expandable and scalable.  The expansion ability
must include handling data items that may not exist currently but could be
expected to emerge in the future.  (Examples: new opening classifications and
new country names.)  The system should be scalable in that it must not have any
arbitrary restrictions concerning the quantity of stored data.  Also, planned
modes of expansion should either preserve earlier databases or at least allow
for their automatic conversion.

5) The system must be international.  Chess software users are found in many
countries and the system should be free of difficulties caused by conventions
local to a given region.

6) Finally, the system should handle the same kinds and amounts of data that
are already handled by existing chess software and by print media.


2.3: A sample PGN game

Although its description may seem rather lengthy, PGN is actually fairly
simple.  A sample PGN game follows; it has most of the important features
described in later sections of this document.

[Event "F/S Return Match"]
[Site "Belgrade, Serbia JUG"]
[Date "1992.11.04"]
[Round "29"]
[White "Fischer, Robert J."]
[Black "Spassky, Boris V."]
[Result "1/2-1/2"]

1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O Be7 6. Re1 b5 7. Bb3 d6 8. c3
O-O 9. h3 Nb8 10. d4 Nbd7 11. c4 c6 12. cxb5 axb5 13. Nc3 Bb7 14. Bg5 b4 15.
Nb1 h6 16. Bh4 c5 17. dxe5 Nxe4 18. Bxe7 Qxe7 19. exd6 Qf6 20. Nbd2 Nxd6 21.
Nc4 Nxc4 22. Bxc4 Nb6 23. Ne5 Rae8 24. Bxf7+ Rxf7 25. Nxf7 Rxe1+ 26. Qxe1 Kxf7
27. Qe3 Qg5 28. Qxg5 hxg5 29. b3 Ke6 30. a3 Kd6 31. axb4 cxb4 32. Ra5 Nd5 33.
f3 Bc8 34. Kf2 Bf5 35. Ra7 g6 36. Ra6+ Kc5 37. Ke1 Nf4 38. g3 Nxh3 39. Kd2 Kb5
40. Rd6 Kc5 41. Ra6 Nf2 42. g4 Bd3 43. Re6 1/2-1/2


3: Formats: import and export

There are two formats in the PGN specification.  These are the "import" format
and the "export" format.  These are the two different ways of formatting the
same PGN data according to its source.  The details of the two formats are
described throughout the following sections of this document.

Other than formats, there is the additional topic of PGN presentation.  While
both PGN import and export formats are designed to be readable by humans, there
is no recommendation that either of these be an ultimate mode of chess data
presentation.  Rather, software developers are urged to consider all of the
various techniques at their disposal to enhance the display of chess data at
the presentation level (i.e., highest level) of their programs.  This means
that the use of different fonts, character sizes, color, and other tools of
computer aided interaction and publishing should be explored to provide a high
quality presentation appropriate to the function of the particular program.


3.1: Import format allows for manually prepared data

The import format is rather flexible and is used to describe data that may have
been prepared by hand, much like a source file for a high level programming
language.  A program that can read PGN data should be able to handle the
somewhat lax import format.


3.2: Export format used for program generated output

The export format is rather strict and is used to describe data that is usually
prepared under program control, something like a pretty printed source program
reformatted by a compiler.


3.2.1: Byte equivalence

For a given PGN data file, export format representations generated by different
PGN programs on the same computing system should be exactly equivalent, byte
for byte.


3.2.2: Archival storage and the newline character

Export format should also be used for archival storage.  Here, "archival"
storage is defined as storage that may be accessed by a variety of computing
systems.  The only extra requirement for archival storage is that the newline
character have a specific representation that is independent of its value for a
particular computing system's text file usage.  The archival representation of
a newline is the ASCII control character LF (line feed, decimal value 10,
hexadecimal value 0x0a).

Sadly, there are some accidents of history that survive to this day that have
baroque representations for a newline: multicharacter sequences, end-of-line
record markers, start-of-line byte counts, fixed length records, and so forth.
It is well beyond the scope of the PGN project to reconcile all of these to the
unified world of ANSI C and the those enjoying the bliss of a single '\n'
convention.  Some systems may just not be able to handle an archival PGN text
file with native text editors.  In these cases, an indulgence of sorts is
granted to use the local newline convention in non-archival PGN files for those
text editors.


3.2.3: Speed of processing

Several parts of the export format deal with exact descriptions of line and
field justification that are absent from the import format details.  The main
reason for these restrictions on the export format are to allow the
construction of simple data translation programs that can easily scan PGN data
without having to have a full chess engine or other complex parsing routines.
The idea is to encourage chess software authors to always allow for at least a
limited PGN reading capability.  Even when a full chess engine parsing
capability is available, it is likely to be at least two orders of magnitude
slower than a simple text scanner.


3.2.4: Reduced export format

A PGN game represented using export format is said to be in "reduced export
format" if all of the following hold: 1) it has no commentary, 2) it has only
the standard seven tag roster identification information ("STR", see below), 3)
it has no recursive annotation variations ("RAV", see below), and 4) it has no
numeric annotation glyphs ("NAG", see below).  Reduced export format is used
for bulk storage of unannotated games.  It represents a minimum level of
standard conformance for a PGN exporting application.


4: Lexicographical issues

PGN data is composed of characters; non-overlapping contiguous sequences of
characters form lexical tokens.


4.1: Character codes

PGN data is represented using a subset of the eight bit ISO 8859/1 (Latin 1)
character set.  ("ISO" is an acronym for the International Standards
Organization.)  This set is also known as ECMA-94 and is similar to other ISO
Latin character sets.  ISO 8859/1 includes the standard seven bit ASCII
character set for the 32 control character code values from zero to 31.  The 95
printing character code values from 32 to 126 are also equivalent to seven bit
ASCII usage.  (Code value 127, the ASCII DEL control character, is a graphic
character in ISO 8859/1; it is not used for PGN data representation.)

The 32 ISO 8859/1 code values from 128 to 159 are non-printing control
characters.  They are not used for PGN data representation.  The 32 code values
from 160 to 191 are mostly non-alphabetic printing characters and their use for
PGN data is discouraged as their graphic representation varies considerably
among other ISO Latin sets.  Finally, the 64 code values from 192 to 255 are
mostly alphabetic printing characters with various diacritical marks; their use
is encouraged for those languages that require such characters.  The graphic
representations of this last set of 64 characters is fairly constant for the
ISO Latin family.

Printing character codes outside of the seven bit ASCII range may only appear
in string data and in commentary.  They are not permitted for use in symbol
construction.

Because some PGN users' environments may not support presentation of non-ASCII
characters, PGN game authors should refrain from using such characters in
critical commentary or string values in game data that may be referenced in
such environments.  PGN software authors should have their programs handle such
environments by displaying a question mark ("?") for non-ASCII character codes.
This is an important point because there are many computing systems that can
display eight bit character data, but the display graphics may differ among
machines and operating systems from different manufacturers.

Only four of the ASCII control characters are permitted in PGN import format;
these are the horizontal and vertical tabs along with the linefeed and carriage
return codes.

The external representation of the newline character may differ among
platforms; this is an acceptable variation as long as the details of the
implementation are hidden from software implementors and users.  When a choice
is practical, the Unix "newline is linefeed" convention is preferred.


4.2: Tab characters

Tab characters, both horizontal and vertical, are not permitted in the export
format.  This is because the treatment of tab characters is highly dependent
upon the particular software in use on the host computing system.  Also, tab
characters may not appear inside of string data.


4.3: Line lengths

PGN data are organized as simple text lines without any special bytes or
markers for secondary record structure imposed by specific operating systems.
Import format PGN text lines are limited to having a maximum of 255 characters
per line including the newline character.  Lines with 80 or more printing
characters are strongly discouraged because of the difficulties experienced by
common text editors with long lines.

In some cases, very long tag values will require 80 or more columns, but these
are relatively rare.  An example of this is the "FEN" tag pair; it may have a
long tag value, but this particular tag pair is only used to represent a game
that doesn't start from the usual initial position.


5: Commentary

Comment text may appear in PGN data.  There are two kinds of comments.  The
first kind is the "rest of line" comment; this comment type starts with a
semicolon character and continues to the end of the line.  The second kind
starts with a left brace character and continues to the next right brace
character.  Comments cannot appear inside any token.

Brace comments do not nest; a left brace character appearing in a brace comment
loses its special meaning and is ignored.  A semicolon appearing inside of a
brace comment loses its special meaning and is ignored.  Braces appearing
inside of a semicolon comments lose their special meaning and are ignored.

*** Export format representation of comments needs definition work.


6: Escape mechanism

There is a special escape mechanism for PGN data.  This mechanism is triggered
by a percent sign character ("%") appearing in the first column of a line; the
data on the rest of the line is ignored by publicly available PGN scanning
software.  This escape convention is intended for the private use of software
developers and researchers to embed non-PGN commands and data in PGN streams.

A percent sign appearing in any other place other than the first position in a
line does not trigger the escape mechanism.


7: Tokens

PGN character data is organized as tokens.  A token is a contiguous sequence of
characters that represents a basic semantic unit.  Tokens may be separated from
adjacent tokens by white space characters.  (White space characters include
space, newline, and tab characters.)  Some tokens are self delimiting and do
not require white space characters.

A string token is a sequence of zero or more printing characters delimited by a
pair of quote characters (ASCII decimal value 34, hexadecimal value 0x22).  An
empty string is represented by two adjacent quotes.  (Note: an apostrophe is
not a quote.)  A quote inside a string is represented by the backslash
immediately followed by a quote.  A backslash inside a string is represented by
two adjacent backslashes.  Strings are commonly used as tag pair values (see
below).  Non-printing characters like newline and tab are not permitted inside
of strings.  A string token is terminated by its closing quote.  Currently, a
string is limited to a maximum of 255 characters of data.

An integer token is a sequence of one or more decimal digit characters.  It is
a special case of the more general "symbol" token class described below.
Integer tokens are used to help represent move number indications (see below).
An integer token is terminated just prior to the first non-symbol character
following the integer digit sequence.

A period character (".") is a token by itself.  It is used for move number
indications (see below).  It is self terminating.

An asterisk character ("*") is a token by itself.  It is used as one of the
possible game termination markers (see below); it indicates an incomplete game
or a game with an unknown or otherwise unavailable result.  It is self
terminating.

The left and right bracket characters ("[" and "]") are tokens.  They are used
to delimit tag pairs (see below).  Both are self terminating.

The left and right parenthesis characters ("(" and ")") are tokens.  They are
used to delimit Recursive Annotation Variations (see below).  Both are self
terminating.

The left and right angle bracket characters ("<" and ">") are tokens.  They are
reserved for future expansion.  Both are self terminating.

A Numeric Annotation Glyph ("NAG", see below) is a token; it is composed of a
dollar sign character ("$") immediately followed by one or more digit
characters.  It is terminated just prior to the first non-digit character
following the digit sequence.

A symbol token starts with a letter or digit character and is immediately
followed by a sequence of zero or more symbol continuation characters.  These
continuation characters are letter characters ("A-Za-z"), digit characters
("0-9"), the underscore ("_"), the plus sign ("+"), the octothorpe sign ("#"),
the equal sign ("="), the colon (":"),  and the hyphen ("-").  Symbols are used
for a variety of purposes.  All characters in a symbol are significant.  A
symbol token is terminated just prior to the first non-symbol character
following the symbol character sequence.  Currently, a symbol is limited to a
maximum of 255 characters in length.


8: Parsing games

A PGN database file is a sequential collection of zero or more PGN games.  An
empty file is a valid, although somewhat uninformative, PGN database.

A PGN game is composed of two sections.  The first is the tag pair section and
the second is the movetext section.  The tag pair section provides information
that identifies the game by defining the values associated with a set of
standard parameters.  The movetext section gives the usually enumerated and
possibly annotated moves of the game along with the concluding game termination
marker.  The chess moves themselves are represented using SAN (Standard
Algebraic Notation), also described later in this document.


8.1: Tag pair section

The tag pair section is composed of a series of zero or more tag pairs.

A tag pair is composed of four consecutive tokens: a left bracket token, a
symbol token, a string token, and a right bracket token.  The symbol token is
the tag name and the string token is the tag value associated with the tag
name.  (There is a standard set of tag names and semantics described below.)
The same tag name should not appear more than once in a tag pair section.

A further restriction on tag names is that they are composed exclusively of
letters, digits, and the underscore character.  This is done to facilitate
mapping of tag names into key and attribute names for use with general purpose
database programs.

For PGN import format, there may be zero or more white space characters between
any adjacent pair of tokens in a tag pair.

For PGN export format, there are no white space characters between the left
bracket and the tag name, there are no white space characters between the tag
value and the right bracket, and there is a single space character between the
tag name and the tag value.

Tag names, like all symbols, are case sensitive.  All tag names used for
archival storage begin with an upper case letter.

PGN import format may have multiple tag pairs on the same line and may even
have a tag pair spanning more than a single line.  Export format requires each
tag pair to appear left justified on a line by itself; a single empty line
follows the last tag pair.

Some tag values may be composed of a sequence of items.  For example, a
consultation game may have more than one player for a given side.  When this
occurs, the single character ":" (colon) appears between adjacent items.
Because of this use as an internal separator in strings, the colon should not
otherwise appear in a string.

The tag pair format is designed for expansion; initially only strings are
allowed as tag pair values.  Tag value formats associated with the STR (Seven
Tag Roster, see below) will not change; they will always be string values.
However, there are long term plans to allow general list structures as tag
values for non-STR tag pairs.  Use of these expanded tag values will likely be
restricted to special research programs.  In all events, the top level
structure of a tag pair remains the same: left bracket, tag name, tag value,
and right bracket.


8.1.1: Seven Tag Roster

There is a set of tags defined for mandatory use for archival storage of PGN
data.  This is the STR (Seven Tag Roster).  The interpretation of these tags is
fixed as is the order in which they appear.  Although the definition and use of
additional tag names and semantics is permitted and encouraged when needed, the
STR is the common ground that all programs should follow for public data
interchange.

For import format, the order of tag pairs is not important.  For export format,
the STR tag pairs appear before any other tag pairs.  (The STR tag pairs must
also appear in order; this order is described below).  Also for export format,
any additional tag pairs appear in ASCII order by tag name.

The seven tag names of the STR are (in order):

1) Event (the name of the tournament or match event)

2) Site (the location of the event)

3) Date (the starting date of the game)

4) Round (the playing round ordinal of the game)

5) White (the player of the white pieces)

6) Black (the player of the black pieces)

7) Result (the result of the game)

A set of supplemental tag names is given later in this document.

For PGN export format, a single blank line appears after the last of the tag
pairs to conclude the tag pair section.  This helps simple scanning programs to
quickly determine the end of the tag pair section and the beginning of the
movetext section.


8.1.1.1: The Event tag

The Event tag value should be reasonably descriptive.  Abbreviations are to be
avoided unless absolutely necessary.  A consistent event naming should be used
to help facilitate database scanning.  If the name of the event is unknown, a
single question mark should appear as the tag value.

Examples:

[Event "FIDE World Championship"]

[Event "Moscow City Championship"]

[Event "ACM North American Computer Championship"]

[Event "Casual Game"]


8.1.1.2: The Site tag

The Site tag value should include city and region names along with a standard
name for the country.  The use of the IOC (International Olympic Committee)
three letter names is suggested for those countries where such codes are
available.  If the site of the event is unknown, a single question mark should
appear as the tag value.  A comma may be used to separate a city from a region.
No comma is needed to separate a city or region from the IOC country code.  A
later section of this document gives a list of three letter nation codes along
with a few additions for "locations" not covered by the IOC.

Examples:

[Site "New York City, NY USA"]

[Site "St. Petersburg RUS"]

[Site "Riga LAT"]


8.1.1.3: The Date tag

The Date tag value gives the starting date for the game.  (Note: this is not
necessarily the same as the starting date for the event.)  The date is given
with respect to the local time of the site given in the Event tag.  The Date
tag value field always uses a standard ten character format: "YYYY.MM.DD".  The
first four characters are digits that give the year, the next character is a
period, the next two characters are digits that give the month, the next
character is a period, and the final two characters are digits that give the
day of the month.  If the any of the digit fields are not known, then question
marks are used in place of the digits.

Examples:

[Date "1992.08.31"]

[Date "1993.??.??"]

[Date "2001.01.01"]


8.1.1.4: The Round tag

The Round tag value gives the playing round for the game.  In a match
competition, this value is the number of the game played.  If the use of a
round number is inappropriate, then the field should be a single hyphen
character.  If the round is unknown, a single question mark should appear as
the tag value.

Some organizers employ unusual round designations and have multipart playing
rounds and sometimes even have conditional rounds.  In these cases, a multipart
round identifier can be made from a sequence of integer round numbers separated
by periods.  The leftmost integer represents the most significant round and
succeeding integers represent round numbers in descending hierarchical order.

Examples:

[Round "1"]

[Round "3.1"]

[Round "4.1.2"]


8.1.1.5: The White tag

The White tag value is the name of the player or players of the white pieces.
The names are given as they would appear in a telephone directory.  The family
or last name appears first.  If a first name or first initial is available, it
is separated from the family name by a comma and a space.  Finally, one or more
middle initials may appear.  (Wherever a comma appears, the very next character
should be a space.  Wherever an initial appears, the very next character should
be a period.)  If the name is unknown, a single question mark should appear as
the tag value.

The intent is to allow meaningful ASCII sorting of the tag value that is
independent of regional name formation customs.  If more than one person is
playing the white pieces, the names are listed in alphabetical order and are
separated by the colon character between adjacent entries.  A player who is
also a computer program should have appropriate version information listed
after the name of the program.

The format used in the FIDE Rating Lists is appropriate for use for player name
tags.

Examples:

[White "Tal, Mikhail N."]

[White "van der Wiel, Johan"]

[White "Acme Pawngrabber v.3.2"]

[White "Fine, R."]


8.1.1.6: The Black tag

The Black tag value is the name of the player or players of the black pieces.
The names are given here as they are for the White tag value.

Examples:

[Black "Lasker, Emmanuel"]

[Black "Smyslov, Vasily V."]

[Black "Smith, John Q.:Woodpusher 2000"]

[Black "Morphy"]


8.1.1.7: The Result tag

The Result field value is the result of the game.  It is always exactly the
same as the game termination marker that concludes the associated movetext.  It
is always one of four possible values: "1-0" (White wins), "0-1" (Black wins),
"1/2-1/2" (drawn game), and "*" (game still in progress, game abandoned, or
result otherwise unknown).  Note that the digit zero is used in both of the
first two cases; not the letter "O".

All possible examples:

[Result "0-1"]

[Result "1-0"]

[Result "1/2-1/2"]

[Result "*"]


8.2: Movetext section

The movetext section is composed of chess moves, move number indications,
optional annotations, and a single concluding game termination marker.

Because illegal moves are not real chess moves, they are not permitted in PGN
movetext.  They may appear in commentary, however.  One would hope that illegal
moves are relatively rare in games worthy of recording.


8.2.1: Movetext line justification

In PGN import format, tokens in the movetext do not require any specific line
justification.

In PGN export format, tokens in the movetext are placed left justified on
successive text lines each of which has less than 80 printing characters.  As
many tokens as possible are placed on a line with the remainder appearing on
successive lines.  A single space character appears between any two adjacent
symbol tokens on the same line in the movetext.  As with the tag pair section,
a single empty line follows the last line of data to conclude the movetext
section.

Neither the first or the last character on an export format PGN line is a
space.  (This may change in the case of commentary; this area is currently
under development.)


8.2.2: Movetext move number indications

A move number indication is composed of one or more adjacent digits (an integer
token) followed by zero or more periods.  The integer portion of the indication
gives the move number of the immediately following white move (if present) and
also the immediately following black move (if present).


8.2.2.1: Import format move number indications

PGN import format does not require move number indications.  It does not
prohibit superfluous move number indications anywhere in the movetext as long
as the move numbers are correct.

PGN import format move number indications may have zero or more period
characters following the digit sequence that gives the move number; one or more
white space characters may appear between the digit sequence and the period(s).


8.2.2.2: Export format move number indications

There are two export format move number indication formats, one for use
appearing immediately before a white move element and one for use appearing
immediately before a black move element.  A white move number indication is
formed from the integer giving the fullmove number with a single period
character appended.  A black move number indication is formed from the integer
giving the fullmove number with three period characters appended.

All white move elements have a preceding move number indication.  A black move
element has a preceding move number indication only in two cases: first, if
there is intervening annotation or commentary between the black move and the
previous white move; and second, if there is no previous white move in the
special case where a game starts from a position where Black is the active
player.

There are no other cases where move number indications appear in PGN export
format.


8.2.3: Movetext SAN (Standard Algebraic Notation)

SAN (Standard Algebraic Notation) is a representation standard for chess moves
using the ASCII Latin alphabet.

Examples of SAN recorded games are found throughout most modern chess
publications.  SAN as presented in this document uses English language single
character abbreviations for chess pieces, although this is easily changed in
the source.  English is chosen over other languages because it appears to be
the most widely recognized.

An alternative to SAN is FAN (Figurine Algebraic Notation).  FAN uses miniature
piece icons instead of single letter piece abbreviations.  The two notations
are otherwise identical.


8.2.3.1: Square identification

SAN identifies each of the sixty four squares on the chessboard with a unique
two character name.  The first character of a square identifier is the file of
the square; a file is a column of eight squares designated by a single lower
case letter from "a" (leftmost or queenside) up to and including "h" (rightmost
or kingside).  The second character of a square identifier is the rank of the
square; a rank is a row of eight squares designated by a single digit from "1"
(bottom side [White's first rank]) up to and including "8" (top side [Black's
first rank]).  The initial squares of some pieces are: white queen rook at a1,
white king at e1, black queen knight pawn at b7, and black king rook at h8.


8.2.3.2: Piece identification

SAN identifies each piece by a single upper case letter.  The standard English
values: pawn = "P", knight = "N", bishop = "B", rook = "R", queen = "Q", and
king = "K".

The letter code for a pawn is not used for SAN moves in PGN export format
movetext.  However, some PGN import software disambiguation code may allow for
the appearance of pawn letter codes.  Also, pawn and other piece letter codes
are needed for use in some tag pair and annotation constructs.

It is admittedly a bit chauvinistic to select English piece letters over those
from other languages.  There is a slight justification in that English is a de
facto universal second language among most chessplayers and program users.  It
is probably the best that can be done for now.  A later section of this
document gives alternative piece letters, but these should be used only for
local presentation software and not for archival storage or for dynamic
interchange among programs.


8.2.3.3: Basic SAN move construction

A basic SAN move is given by listing the moving piece letter (omitted for
pawns) followed by the destination square.  Capture moves are denoted by the
lower case letter "x" immediately prior to the destination square; pawn
captures include the file letter of the originating square of the capturing
pawn immediately prior to the "x" character.

SAN kingside castling is indicated by the sequence "O-O"; queenside castling is
indicated by the sequence "O-O-O".  Note that the upper case letter "O" is
used, not the digit zero.  The use of a zero character is not only incompatible
with traditional text practices, but it can also confuse parsing algorithms
which also have to understand about move numbers and game termination markers.
Also note that the use of the letter "O" is consistent with the practice of
having all chess move symbols start with a letter; also, it follows the
convention that all non-pwn move symbols start with an upper case letter.

En passant captures do not have any special notation; they are formed as if the
captured pawn were on the capturing pawn's destination square.  Pawn promotions
are denoted by the equal sign "=" immediately following the destination square
with a promoted piece letter (indicating one of knight, bishop, rook, or queen)
immediately following the equal sign.  As above, the piece letter is in upper
case.


8.2.3.4: Disambiguation

In the case of ambiguities (multiple pieces of the same type moving to the same
square), the first appropriate disambiguating step of the three following steps
is taken:

First, if the moving pieces can be distinguished by their originating files,
the originating file letter of the moving piece is inserted immediately after
the moving piece letter.

Second (when the first step fails), if the moving pieces can be distinguished
by their originating ranks, the originating rank digit of the moving piece is
inserted immediately after the moving piece letter.

Third (when both the first and the second steps fail), the two character square
coordinate of the originating square of the moving piece is inserted
immediately after the moving piece letter.

Note that the above disambiguation is needed only to distinguish among moves of
the same piece type to the same square; it is not used to distinguish among
attacks of the same piece type to the same square.  An example of this would be
a position with two white knights, one on square c3 and one on square g1 and a
vacant square e2 with White to move.  Both knights attack square e2, and if
both could legally move there, then a file disambiguation is needed; the
(nonchecking) knight moves would be "Nce2" and "Nge2".  However, if the white
king were at square e1 and a black bishop were at square b4 with a vacant
square d2 (thus an absolute pin of the white knight at square c3), then only
one white knight (the one at square g1) could move to square e2: "Ne2".


8.2.3.5: Check and checkmate indication characters

If the move is a checking move, the plus sign "+" is appended as a suffix to
the basic SAN move notation; if the move is a checkmating move, the octothorpe
sign "#" is appended instead.

Neither the appearance nor the absence of either a check or checkmating
indicator is used for disambiguation purposes.  This means that if two (or
more) pieces of the same type can move to the same square the differences in
checking status of the moves does not allieviate the need for the standard rank
and file disabiguation described above.  (Note that a difference in checking
status for the above may occur only in the case of a discovered check.)

Neither the checking or checkmating indicators are considered annotation as
they do not communicate subjective information.  Therefore, they are
qualitatively different from move suffix annotations like "!" and "?".
Subjective move annotations are handled using Numeric Annotation Glyphs as
described in a later section of this document.

There are no special markings used for double checks or discovered checks.

There are no special markings used for drawing moves.


8.2.3.6: SAN move length

SAN moves can be as short as two characters (e.g., "d4"), or as long as seven
characters (e.g., "Qa6xb7#", "fxg1=Q+").  The average SAN move length seen in
realistic games is probably just fractionally longer than three characters.  If
the SAN rules seem complicated, be assured that the earlier notation systems of
LEN (Long English Notation) and EDN (English Descriptive Notation) are much
more complex, and that LAN (Long Algebraic Notation, the predecessor of SAN) is
unnecessarily bulky.


8.2.3.7: Import and export SAN

PGN export format always uses the above canonical SAN to represent moves in the
movetext section of a PGN game.  Import format is somewhat more relaxed and it
makes allowances for moves that do not conform exactly to the canonical format.
However, these allowances may differ among different PGN reader programs.  Only
data appearing in export format is in all cases guaranteed to be importable
into all PGN readers.

There are a number of suggested guidelines for use with implementing PGN reader
software for permitting non-canonical SAN move representation.  The idea is to
have a PGN reader apply various transformations to attempt to discover the move
that is represented by non-canonical input.  Some suggested transformations
include: letter case remapping, capture indicator insertion, check indicator
insertion, and checkmate indicator insertion.


8.2.3.8: SAN move suffix annotations

Import format PGN allows for the use of traditional suffix annotations for
moves.  There are exactly six such annotations available: "!", "?", "!!", "!?",
"?!", and "??".  At most one such suffix annotation may appear per move, and if
present, it is always the last part of the move symbol.

When exported, a move suffix annotation is translated into the corresponding
Numeric Annotation Glyph as described in a later section of this document.  For
example, if the single move symbol "Qxa8?" appears in an import format PGN
movetext, it would be replaced with the two adjacent symbols "Qxa8 $2".


8.2.4: Movetext NAG (Numeric Annotation Glyph)

An NAG (Numeric Annotation Glyph) is a movetext element that is used to
indicate a simple annotation in a language independent manner.  An NAG is
formed from a dollar sign ("$") with a non-negative decimal integer suffix.
The non-negative integer must be from zero to 255 in value.


8.2.5: Movetext RAV (Recursive Annotation Variation)

An RAV (Recursive Annotation Variation) is a sequence of movetext containing
one or more moves enclosed in parentheses.  An RAV is used to represent an
alternative variation.  The alternate move sequence given by an RAV is one that
may be legally played by first unplaying the move that appears immediately
prior to the RAV.  Because the RAV is a recursive construct, it may be nested.

*** The specification for import/export representation of RAV elements needs
further development.


8.2.6: Game Termination Markers

Each movetext section has exactly one game termination marker; the marker
always occurs as the last element in the movetext.  The game termination marker
is a symbol that is one of the following four values: "1-0" (White wins), "0-1"
(Black wins), "1/2-1/2" (drawn game), and "*" (game in progress, result
unknown, or game abandoned).  Note that the digit zero is used in the above;
not the upper case letter "O".  The game termination marker appearing in the
movetext of a game must match the value of the game's Result tag pair.  (While
the marker appears as a string in the Result tag, it appears as a symbol
without quotes in the movetext.)


9: Supplemental tag names

The following tag names and their associated semantics are recommended for use
for information not contained in the Seven Tag Roster.


9.1: Player related information

Note that if there is more than one player field in an instance of a player
(White or Black) tag, then there will be corresponding multiple fields in any
of the following tags.  For example, if the White tag has the three field value
"Jones:Smith:Zacharias" (a consultation game), then the WhiteTitle tag could
have a value of "IM:-:GM" if Jones was an International Master, Smith was
untitled, and Zacharias was a Grandmaster.


9.1.1: Tags: WhiteTitle, BlackTitle

These use string values such as "FM", "IM", and "GM"; these tags are used only
for the standard abbreviations for FIDE titles.  A value of "-" is used for an
untitled player.


9.1.2: Tags: WhiteElo, BlackElo

These tags use integer values; these are used for FIDE Elo ratings.  A value of
"-" is used for an unrated player.


9.1.3: Tags: WhiteUSCF, BlackUSCF

These tags use integer values; these are used for USCF (United States Chess
Federation) ratings.  Similar tag names can be constructed for other rating
agencies.


9.1.4: Tags: WhiteNA, BlackNA

These tags use string values; these are the e-mail or network addresses of the
players.  A value of "-" is used for a player without an electronic address.


9.1.5: Tags: WhiteType, BlackType

These tags use string values; these describe the player types.  The value
"human" should be used for a person while the value "program" should be used
for algorithmic (computer) players.


9.2: Event related information

The following tags are used for providing additional information about the
event.


9.2.1: Tag: EventDate

This uses a date value, similar to the Date tag field, that gives the starting
date of the Event.


9.2.2: Tag: EventSponsor

This uses a string value giving the name of the sponsor of the event.


9.2.3: Tag: Section

This uses a string; this is used for the playing section of a tournament (e.g.,
"Open" or "Reserve").


9.2.4: Tag: Stage

This uses a string; this is used for the stage of a multistage event (e.g.,
"Preliminary" or "Semifinal").


9.2.5: Tag: Board

This uses an integer; this identifies the board number in a team event and also
in a simultaneous exhibition.


9.3: Opening information (locale specific)

The following tag pairs are used for traditional opening names.  The associated
tag values will vary according to the local language in use.


9.3.1: Tag: Opening

This uses a string; this is used for the traditional opening name.  This will
vary by locale.  This tag pair is associated with the use of the EPD opcode
"v0" described in a later section of this document.


9.3.2: Tag: Variation

This uses a string; this is used to further refine the Opening tag.  This will
vary by locale.  This tag pair is associated with the use of the EPD opcode
"v1" described in a later section of this document.


9.3.3: Tag: SubVariation

This uses a string; this is used to further refine the Variation tag.  This
will vary by locale.  This tag pair is associated with the use of the EPD
opcode "v2" described in a later section of this document.


9.4: Opening information (third party vendors)

The following tag pairs are used for representing opening identification
according to various third party vendors and organizations.  References to
these organizations does not imply any endorsement of them or any endorsement
by them.


9.4.1: Tag: ECO

This uses a string of either the form "XDD" or the form "XDD/DD" where the "X"
is a letter from "A" to "E" and the "D" positions are digits; this is used for
an opening designation from the five volume _Encyclopedia of Chess Openings_.
This tag pair is associated with the use of the EPD opcode "eco" described in a
later section of this document.


9.4.2: Tag: NIC

This uses a string; this is used for an opening designation from the _New in
Chess_ database.  This tag pair is associated with the use of the EPD opcode
"nic" described in a later section of this document.


9.5: Time and date related information

The following tags assist with further refinement of the time and data
information associated with a game.


9.5.1: Tag: Time

This uses a time-of-day value in the form "HH:MM:SS"; similar to the Date tag
except that it denotes the local clock time (hours, minutes, and seconds) of
the start of the game.  Note that colons, not periods, are used for field
separators for the Time tag value.  The value is taken from the local time
corresponding to the location given in the Site tag pair.


9.5.2: Tag: UTCTime

This tag is similar to the Time tag except that the time is given according to
the Universal Coordinated Time standard.


9.5.3: Tag:; UTCDate

This tag is similar to the Date tag except that the date is given according to
the Universal Coordinated Time standard.


9.6: Time control

The follwing tag is used to help describe the time control used with the game.


9.6.1: Tag: TimeControl

This uses a list of one or more time control fields.  Each field contains a
descriptor for each time control period; if more than one descriptor is present
then they are separated by the colon character (":").  The descriptors appear
in the order in which they are used in the game.  The last field appearing is
considered to be implicitly repeated for further control periods as needed.

There are six kinds of TimeControl fields.

The first kind is a single question mark ("?") which means that the time
control mode is unknown.  When used, it is usually the only descriptor present.

The second kind is a single hyphen ("-") which means that there was no time
control mode in use.  When used, it is usually the only descriptor present.

The third Time control field kind is formed as two positive integers separated
by a solidus ("/") character.  The first integer is the number of moves in the
period and the second is the number of seconds in the period.  Thus, a time
control period of 40 moves in 2 1/2 hours would be represented as "40/9000".

The fourth TimeControl field kind is used for a "sudden death" control period.
It should only be used for the last descriptor in a TimeControl tag value.  It
is sometimes the only descriptor present.  The format consists of a single
integer that gives the number of seconds in the period.  Thus, a blitz game
would be represented with a TimeControl tag value of "300".

The fifth TimeControl field kind is used for an "incremental" control period.
It should only be used for the last descriptor in a TimeControl tag value and
is usually the only descriptor in the value.  The format consists of two
positive integers separated by a plus sign ("+") character.  The first integer
gives the minimum number of seconds allocated for the period and the second
integer gives the number of extra seconds added after each move is made.  So,
an incremental time control of 90 minutes plus one extra minute per move would
be given by "4500+60" in the TimeControl tag value.

The sixth TimeControl field kind is used for a "sandclock" or "hourglass"
control period.  It should only be used for the last descriptor in a
TimeControl tag value and is usually the only descriptor in the value.  The
format consists of an asterisk ("*") immediately followed by a positive
integer.  The integer gives the total number of seconds in the sandclock
period.  The time control is implemented as if a sandclock were set at the
start of the period with an equal amount of sand in each of the two chambers
and the players invert the sandclock after each move with a time forfeit
indicated by an empty upper chamber.  Electronic implementation of a physical
sandclock may be used.  An example sandclock specification for a common three
minute egg timer sandclock would have a tag value of "*180".

Additional TimeControl field kinds will be defined as necessary.


9.7: Alternative starting positions

There are two tags defined for assistance with describing games that did not
start from the usual initial array.


9.7.1: Tag: SetUp

This tag takes an integer that denotes the "set-up" status of the game.  A
value of "0" indicates that the game has started from the usual initial array.
A value of "1" indicates that the game started from a set-up position; this
position is given in the "FEN" tag pair.  This tag must appear for a game
starting with a set-up position.  If it appears with a tag value of "1", a FEN
tag pair must also appear.


9.7.2: Tag: FEN

This tag uses a string that gives the Forsyth-Edwards Notation for the starting
position used in the game.  FEN is described in a later section of this
document.  If a SetUp tag appears with a tag value of "1", the FEN tag pair is
also required.


9.8: Game conclusion

There is a single tag that discusses the conclusion of the game.


9.8.1: Tag: Termination

This takes a string that describes the reason for the conclusion of the game.
While the Result tag gives the result of the game, it does not provide any
extra information and so the Termination tag is defined for this purpose.

Strings that may appear as Termination tag values:

* "abandoned": abandoned game.

* "adjudication": result due to third party adjudication process.

* "death": losing player called to greater things, one hopes.

* "emergency": game concluded due to unforeseen circumstances.

* "normal": game terminated in a normal fashion.

* "rules infraction": administrative forfeit due to losing player's failure to
observe either the Laws of Chess or the event regulations.

* "time forfeit": loss due to losing player's failure to meet time control
requirements.

* "unterminated": game not terminated.


9.9: Miscellaneous

These are tags that can be briefly described and that doon't fit well inother
sections.


9.9.1: Tag: Annotator

This tag uses a name or names in the format of the player name tags; this
identifies the annotator or annotators of the game.


9.9.2: Tag: Mode

This uses a string that gives the playing mode of the game.  Examples: "OTB"
(over the board), "PM" (paper mail), "EM" (electronic mail), "ICS" (Internet
Chess Server), and "TC" (general telecommunication).


9.9.3: Tag: PlyCount

This tag takes a single integer that gives the number of ply (moves) in the
game.


10: Numeric Annotation Glyphs

NAG zero is used for a null annotation; it is provided for the convenience of
software designers as a placeholder value and should probably not be used in
external PGN data.

NAGs with values from 1 to 9 annotate the move just played.

NAGs with values from 10 to 135 modify the current position.

NAGs with values from 136 to 139 describe time pressure.

Other NAG values are reserved for future definition.

Note: the number assignments listed below should be considered preliminary in
nature; they are likely to be changed as a result of reviewer feedback.

NAG    Interpretation
---    --------------
  0    null annotation
  1    good move (traditional "!")
  2    poor move (traditional "?")
  3    very good move (traditional "!!")
  4    very poor move (traditional "??")
  5    speculative move (traditional "!?")
  6    questionable move (traditional "?!")
  7    forced move (all others lose quickly)
  8    singular move (no reasonable alternatives)
  9    worst move
 10    drawish position
 11    equal chances, quiet position
 12    equal chances, active position
 13    unclear position
 14    White has a slight advantage
 15    Black has a slight advantage
 16    White has a moderate advantage
 17    Black has a moderate advantage
 18    White has a decisive advantage
 19    Black has a decisive advantage
 20    White has a crushing advantage (Black should resign)
 21    Black has a crushing advantage (White should resign)
 22    White is in zugzwang
 23    Black is in zugzwang
 24    White has a slight space advantage
 25    Black has a slight space advantage
 26    White has a moderate space advantage
 27    Black has a moderate space advantage
 28    White has a decisive space advantage
 29    Black has a decisive space advantage
 30    White has a slight time (development) advantage
 31    Black has a slight time (development) advantage
 32    White has a moderate time (development) advantage
 33    Black has a moderate time (development) advantage
 34    White has a decisive time (development) advantage
 35    Black has a decisive time (development) advantage
 36    White has the initiative
 37    Black has the initiative
 38    White has a lasting initiative
 39    Black has a lasting initiative
 40    White has the attack
 41    Black has the attack
 42    White has insufficient compensation for material deficit
 43    Black has insufficient compensation for material deficit
 44    White has sufficient compensation for material deficit
 45    Black has sufficient compensation for material deficit
 46    White has more than adequate compensation for material deficit
 47    Black has more than adequate compensation for material deficit
 48    White has a slight center control advantage
 49    Black has a slight center control advantage
 50    White has a moderate center control advantage
 51    Black has a moderate center control advantage
 52    White has a decisive center control advantage
 53    Black has a decisive center control advantage
 54    White has a slight kingside control advantage
 55    Black has a slight kingside control advantage
 56    White has a moderate kingside control advantage
 57    Black has a moderate kingside control advantage
 58    White has a decisive kingside control advantage
 59    Black has a decisive kingside control advantage
 60    White has a slight queenside control advantage
 61    Black has a slight queenside control advantage
 62    White has a moderate queenside control advantage
 63    Black has a moderate queenside control advantage
 64    White has a decisive queenside control advantage
 65    Black has a decisive queenside control advantage
 66    White has a vulnerable first rank
 67    Black has a vulnerable first rank
 68    White has a well protected first rank
 69    Black has a well protected first rank
 70    White has a poorly protected king
 71    Black has a poorly protected king
 72    White has a well protected king
 73    Black has a well protected king
 74    White has a poorly placed king
 75    Black has a poorly placed king
 76    White has a well placed king
 77    Black has a well placed king
 78    White has a very weak pawn structure
 79    Black has a very weak pawn structure
 80    White has a moderately weak pawn structure
 81    Black has a moderately weak pawn structure
 82    White has a moderately strong pawn structure
 83    Black has a moderately strong pawn structure
 84    White has a very strong pawn structure
 85    Black has a very strong pawn structure
 86    White has poor knight placement
 87    Black has poor knight placement
 88    White has good knight placement
 89    Black has good knight placement
 90    White has poor bishop placement
 91    Black has poor bishop placement
 92    White has good bishop placement
 93    Black has good bishop placement
 84    White has poor rook placement
 85    Black has poor rook placement
 86    White has good rook placement
 87    Black has good rook placement
 98    White has poor queen placement
 99    Black has poor queen placement
100    White has good queen placement
101    Black has good queen placement
102    White has poor piece coordination
103    Black has poor piece coordination
104    White has good piece coordination
105    Black has good piece coordination
106    White has played the opening very poorly
107    Black has played the opening very poorly
108    White has played the opening poorly
109    Black has played the opening poorly
110    White has played the opening well
111    Black has played the opening well
112    White has played the opening very well
113    Black has played the opening very well
114    White has played the middlegame very poorly
115    Black has played the middlegame very poorly
116    White has played the middlegame poorly
117    Black has played the middlegame poorly
118    White has played the middlegame well
119    Black has played the middlegame well
120    White has played the middlegame very well
121    Black has played the middlegame very well
122    White has played the ending very poorly
123    Black has played the ending very poorly
124    White has played the ending poorly
125    Black has played the ending poorly
126    White has played the ending well
127    Black has played the ending well
128    White has played the ending very well
129    Black has played the ending very well
130    White has slight counterplay
131    Black has slight counterplay
132    White has moderate counterplay
133    Black has moderate counterplay
134    White has decisive counterplay
135    Black has decisive counterplay
136    White has moderate time control pressure
137    Black has moderate time control pressure
138    White has severe time control pressure
139    Black has severe time control pressure


11: File names and directories

File names chosen for PGN data should be both informative and portable.  The
directory names and arrangements should also be chosen for the same reasons and
also for ease of navigation.

Some of suggested file and directory names may be difficult or impossible to
represent on certain computing systems.  Use of appropriate conversion customs
is encouraged.


11.1: File name suffix for PGN data

The use of the file suffix ".pgn" is encouraged for ASCII text files containing
PGN data.


11.2: File name formation for PGN data for a specific player

PGN games for a specific player should have a file name consisting of the
player's last name followed by the ".pgn" suffix.


11.3: File name formation for PGN data for a specific event

PGN games for a specific event should have a file name consisting of the
event's name followed by the ".pgn" suffix.


11.4: File name formation for PGN data for chronologically ordered games

PGN data files used for chronologically ordered (oldest first) archives use
date information as file name root strings.  A file containing all the PGN
games for a given year would have an eight character name in the format
"YYYY.pgn".  A file containing PGN data for a given month would have a ten
character name in the format "YYYYMM.pgn".  Finally, a file for PGN games for a
single day would have a twelve character name in the format "YYYYMMDD.pgn".
Large files are split into smaller files as needed.

As game files are commonly arranged by chronological order, games with missing
or incomplete Date tag pair data are to be avoided.  Any question mark
characters in a Date tag value will be treated as zero digits for collation
within a file and also for file naming.

Large quantities of PGN data arranged by chronological order should be
organized into hierarchical directories.  A directory containing all PGN data
for a given year would have a four character name in the format "YYYY";
directories containing PGN files for a given month would have a six character
name in the format "YYYYMM".


11.5: Suggested directory tree organization

A suggested directory arrangement for ftp sites and CD-ROM distributions:

* PGN: master directory of the PGN subtree (pub/chess/Game-Databases/PGN)

* PGN/Events: directory of PGN files, each for a specific event

* PGN/Events/News: news and status of the event collection

* PGN/Events/ReadMe: brief description of the local directory contents

* PGN/MGR: directory of the Master Games Repository subtree

* PGN/MGR/News: news and status of the entire PGN/MGR subtree

* PGN/MGR/ReadMe: brief description of the local directory contents

* PGN/MGR/YYYY: directory of games or subtrees for the year YYYY

* PGN/MGR/YYYY/ReadMe: description of local directory for year YYYY

* PGN/MGR/YYYY/News: news and status for year YYYY data

* PGN/News: news and status of the entire PGN subtree

* PGN/Players: directory of PGN files, each for a specific player

* PGN/Players/News: news and status of the player collection

* PGN/Players/ReadMe: brief description of the local directory contents

* PGN/ReadMe: brief description of the local directory contents

* PGN/Standard: the PGN standard (this document)

* PGN/Tools: software utilities that access PGN data


12: PGN collating sequence

There is a standard sorting order for PGN games within a file.  This collation
is based on eight keys; these are the seven tag values of the STR and also the
movetext itself.

The first (most important, primary key) is the Date tag.  Earlier dated games
appear prior to games played at a later date.  This field is sorted by
ascending numeric value first with the year, then the month, and finally the
day of the month.  Query characters used for unknown date digit values will be
treated as zero digit characters for ordering comparison.

The second key is the Event tag.  This is sorted in ascending ASCII order.

The third key is the Site tag.  This is sorted in ascending ASCII order.

The fourth key is the Round tag.  This is sorted in ascending numeric order
based on the value of the integer used to denote the playing round.  A query or
hyphen used for the round is ordered before any integer value.  A query
character is ordered before a hyphen character.

The fifth key is the White tag.  This is sorted in ascending ASCII order.

The sixth key is the Black tag.  This is sorted in ascending ASCII order.

The seventh key is the Result tag.  This is sorted in ascending ASCII order.

The eighth key is the movetext itself.  This is sorted in ascending ASCII order
with the entire text including spaces and newline characters.


13: PGN software

This section describes some PGN software that is either currently available or
expected to be available in the near future.  The entries are presented in
rough chronological order of their being made known to the PGN standard
coordinator.  Authors of PGN capable software are encouraged to contact the
coordinator (e-mail address listed near the start of this document) so that the
information may be included here in this section.

In addition to the PGN standard, there are two more chess standards of interest
to the chess software community.  These are the FEN standard (Forsyth-Edwards
Notation) for position notation and the EPD standard (Extended Position
Description) for comprehensive position description for automated interprogram
processing.  These are described in a later section of this document.

Some PGN software is freeware and can be gotten from ftp sites and other
sources.  Other PGN software is payware and appears as part of commercial
chessplaying programs and chess database managers.  Those who are interested in
the propagation of the PGN standard are encouraged to support manufacturers of
chess software that use the standard.  If a particular vendor does not offer
PGN compatibility, it is likely that a few letters to them along with a copy of
this specification may help them decide to include PGN support in their next
release.

The staff at the University of Oklahoma at Norman (USA) have graciously
provided an ftp site (chess.uoknor.edu) for the storage of chess related data
and programs.  Because file names change over time, those accessing the site
are encouraged to first retrieve the file "pub/chess/ls-lR.gz" for a current
listing.  A scan of this listin
Download .txt
gitextract_lqka34fb/

├── LICENSE.md
├── README.md
└── files/
    ├── .editorconfig
    ├── .gitignore
    ├── misc/
    │   ├── chess960.txt
    │   ├── escape_and_missing_quotes.pgn
    │   ├── nibbler_menu_translations_template.json
    │   ├── pathological.pgn
    │   ├── pgn.txt
    │   ├── scraps.js
    │   ├── state_logic.txt
    │   └── uci.txt
    ├── res/
    │   └── linux/
    │       └── nibbler.desktop
    ├── scripts/
    │   ├── builder.py
    │   ├── install.sh
    │   └── install_mac.sh
    └── src/
        ├── main.js
        ├── modules/
        │   ├── alert_main.js
        │   ├── background.js
        │   ├── config_io.js
        │   ├── custom_uci.js
        │   ├── debork_json.js
        │   ├── empty.js
        │   ├── engineconfig_io.js
        │   ├── images.js
        │   ├── messages.js
        │   ├── running_as_electron.js
        │   ├── stringify.js
        │   ├── translate.js
        │   └── translations.js
        ├── nibbler.css
        ├── nibbler.html
        ├── package.json
        └── renderer/
            ├── 10_globals.js
            ├── 20_utils.js
            ├── 30_point.js
            ├── 31_sliders.js
            ├── 40_position.js
            ├── 41_fen.js
            ├── 42_perft.js
            ├── 43_chess960.js
            ├── 50_table.js
            ├── 51_node.js
            ├── 52_sorted_moves.js
            ├── 55_winrate_graph.js
            ├── 60_pgn_utils.js
            ├── 61_pgn_parse.js
            ├── 63_polyglot.js
            ├── 65_loaders.js
            ├── 71_tree_handler.js
            ├── 72_tree_draw.js
            ├── 75_looker.js
            ├── 80_info.js
            ├── 81_arrows.js
            ├── 82_infobox.js
            ├── 83_statusbox.js
            ├── 90_engine.js
            ├── 95_hub.js
            ├── 97_drag.js
            └── 99_start.js
Download .txt
SYMBOL INDEX (122 symbols across 29 files)

FILE: files/misc/scraps.js
  function NewPGNFileLoader (line 3) | function NewPGNFileLoader(filename, callback) {
  function NewPGNPreParser (line 60) | function NewPGNPreParser(buf, callback) {		// Cannot fail unless aborted.
  function NewLineSplitter (line 184) | function NewLineSplitter(buf, callback) {
  function split_buffer_alternative (line 266) | function split_buffer_alternative(buf) {

FILE: files/src/main.js
  function startup (line 79) | function startup() {
  function menu_build (line 335) | function menu_build() {
  function language_choices_submenu (line 4734) | function language_choices_submenu() {
  function get_submenu_items (line 4756) | function get_submenu_items(menupath) {
  function set_checks (line 4778) | function set_checks(...menupath) {
  function set_one_check (line 4797) | function set_one_check(state, ...menupath) {

FILE: files/src/modules/background.js
  function background (line 3) | function background(light, dark, square_size) {

FILE: files/src/modules/config_io.js
  function Config (line 18) | function Config() {}			// This exists solely to make instanceof work.
  function fix (line 158) | function fix(cfg) {

FILE: files/src/modules/debork_json.js
  function replace_all (line 3) | function replace_all(s, search, replace) {
  function debork_json (line 10) | function debork_json(s) {

FILE: files/src/modules/engineconfig_io.js
  function EngineConfig (line 18) | function EngineConfig() {}			// This exists solely to make instanceof work.
  function fix (line 23) | function fix(cfg) {

FILE: files/src/modules/translations.js
  function checker (line 3714) | function checker() {

FILE: files/src/renderer/20_utils.js
  function XY (line 7) | function XY(s) {				// e.g. "b7" --> [1, 1]
  function S (line 20) | function S(x, y) {				// e.g. (1, 1) --> "b7"
  function InfoVal (line 29) | function InfoVal(s, key) {
  function InfoValMany (line 54) | function InfoValMany(s, keys) {
  function InfoPV (line 83) | function InfoPV(s) {
  function C960_PV_Converter (line 127) | function C960_PV_Converter(pv, board) {
  function InfoWDL (line 168) | function InfoWDL(s) {
  function CompareArrays (line 200) | function CompareArrays(a, b) {
  function ArrayStartsWith (line 219) | function ArrayStartsWith(a, b) {		// where b is itself an array
  function OppositeColour (line 238) | function OppositeColour(s) {
  function ReplaceAll (line 244) | function ReplaceAll(s, search, replace) {
  function SafeStringHTML (line 249) | function SafeStringHTML(s) {
  function UnsafeStringHTML (line 261) | function UnsafeStringHTML(s) {
  function SafeStringPGN (line 273) | function SafeStringPGN(s) {
  function UnsafeStringPGN (line 282) | function UnsafeStringPGN(s) {
  function Log (line 291) | function Log(s) {
  function LogBoth (line 342) | function LogBoth(s) {
  function UniqueFilepath (line 347) | function UniqueFilepath(filepath) {
  function New2DArray (line 384) | function New2DArray(width, height, defval) {
  function CanvasCoords (line 398) | function CanvasCoords(x, y) {
  function EventPathString (line 427) | function EventPathString(event, prefix) {
  function EventPathN (line 451) | function EventPathN(event, prefix) {
  function SwapElements (line 470) | function SwapElements(obj1, obj2) {
  function NString (line 481) | function NString(n) {
  function DateString (line 518) | function DateString(dt) {
  function QfromPawns (line 530) | function QfromPawns(pawns) {
  function QfromWDL (line 547) | function QfromWDL(wdl) {
  function Value (line 562) | function Value(q) {					// Rescale Q to 0..1 range.
  function SmoothStep (line 575) | function SmoothStep(x) {
  function Sign (line 581) | function Sign(n) {
  function CommaNum (line 587) | function CommaNum(n) {
  function DurationString (line 611) | function DurationString(ms) {
  function NumbersBetween (line 632) | function NumbersBetween(a, b) {
  function RandInt (line 649) | function RandInt(min, max) {
  function RandChoice (line 664) | function RandChoice(arr) {
  function HighlightString (line 671) | function HighlightString(s, prefix, classname) {
  function StringIsNumeric (line 682) | function StringIsNumeric(s) {
  function FileExceedsGigabyte (line 692) | function FileExceedsGigabyte(filename, multiplier = 1) {

FILE: files/src/renderer/30_point.js
  function Point (line 3) | function Point(a, b) {
  function PointsBetween (line 38) | function PointsBetween(a, b) {

FILE: files/src/renderer/31_sliders.js
  function generate_movegen_sliders (line 6) | function generate_movegen_sliders() {

FILE: files/src/renderer/40_position.js
  function NewPosition (line 1401) | function NewPosition(state = null, active = "w", castling = "", enpassan...

FILE: files/src/renderer/41_fen.js
  function LoadFEN (line 3) | function LoadFEN(fen) {
  function CastlingRights (line 119) | function CastlingRights(board, s) {						// s is the castling string fro...
  function EnPassantSquare (line 210) | function EnPassantSquare(board, s) {	// board.active must be correct. s ...
  function IsNormalChessPosition (line 262) | function IsNormalChessPosition(board) {

FILE: files/src/renderer/42_perft.js
  function perft (line 22) | function perft(pos, depth, print_moves) {
  function perft_print_move (line 39) | function perft_print_move(pos, mv, val) {
  function Perft (line 54) | function Perft(fen, depth) {
  function PerftFileTest (line 70) | function PerftFileTest(filename, depth, verbose = false) {

FILE: files/src/renderer/43_chess960.js
  function c960_arrangement (line 3) | function c960_arrangement(n) {
  function c960_fen (line 55) | function c960_fen(n) {

FILE: files/src/renderer/50_table.js
  function NewTable (line 5) | function NewTable() {
  function NewInfo (line 89) | function NewInfo(board, move) {

FILE: files/src/renderer/51_node.js
  function NewNode (line 3) | function NewNode(parent, move, board_for_root) {		// move must be legal;...
  function NewRoot (line 37) | function NewRoot(board) {					// Arg is a board (position) object, not a...
  function DestroyTree (line 471) | function DestroyTree(node) {
  function __destroy_tree (line 479) | function __destroy_tree(node) {
  function CleanTree (line 522) | function CleanTree(node) {
  function __clean_tree (line 529) | function __clean_tree(node) {
  function AddTreeToBook (line 552) | function AddTreeToBook(node, book) {
  function __add_tree_to_book (line 567) | function __add_tree_to_book(node, book) {

FILE: files/src/renderer/52_sorted_moves.js
  function SortedMoveInfo (line 3) | function SortedMoveInfo(node) {
  function SortedMoveInfoFromTable (line 12) | function SortedMoveInfoFromTable(table) {

FILE: files/src/renderer/55_winrate_graph.js
  function NewGrapher (line 3) | function NewGrapher() {

FILE: files/src/renderer/60_pgn_utils.js
  function split_buffer (line 3) | function split_buffer(buf) {
  function new_byte_pusher (line 41) | function new_byte_pusher(size) {
  function new_pgndata (line 80) | function new_pgndata(buf, indices) {		// Made by the PGN file loader. Us...
  function SavePGN (line 108) | function SavePGN(filename, node) {
  function PGNToClipboard (line 117) | function PGNToClipboard(node) {
  function make_pgn_string (line 124) | function make_pgn_string(node) {
  function make_movetext (line 170) | function make_movetext(node) {
  function get_ordered_nodes (line 231) | function get_ordered_nodes(node) {
  function __order_nodes (line 237) | function __order_nodes(node, list, skip_self_flag) {

FILE: files/src/renderer/61_pgn_parse.js
  function new_pgn_record (line 3) | function new_pgn_record() {
  function PreParsePGN (line 10) | function PreParsePGN(buf) {								// buf should be the buffer for a sin...
  function LoadPGNRecord (line 71) | function LoadPGNRecord(o) {				// This can throw!

FILE: files/src/renderer/63_polyglot.js
  function KeyFromBoard (line 237) | function KeyFromBoard(board) {
  function ParsePolyglotBlob (line 279) | function ParsePolyglotBlob(buf, off) {		// Args are Buffer + offset.
  function SortAndDeclutterPGNBook (line 306) | function SortAndDeclutterPGNBook(book) {
  function BookAtLogicalIndex (line 357) | function BookAtLogicalIndex(book, i) {
  function BookLogicalLength (line 365) | function BookLogicalLength(book) {
  function BookProbe (line 375) | function BookProbe(key, book) {
  function BookSortedTest (line 452) | function BookSortedTest(book) {		// Returns true if a cursory inspection...
  function HubProbe (line 488) | function HubProbe() {
  function BigIntToHex (line 502) | function BigIntToHex(big) {
  function BookStressTest (line 508) | function BookStressTest() {

FILE: files/src/renderer/65_loaders.js
  function NewFastPGNLoader (line 12) | function NewFastPGNLoader(foo, callback) {
  function NewPolyglotBookLoader (line 117) | function NewPolyglotBookLoader(filename, callback) {
  function NewPGNBookLoader (line 153) | function NewPGNBookLoader(filename, callback) {

FILE: files/src/renderer/71_tree_handler.js
  function NewTreeHandler (line 7) | function NewTreeHandler() {

FILE: files/src/renderer/75_looker.js
  function NewLooker (line 14) | function NewLooker() {
  method query_api (line 131) | query_api(query) {		// Returns a promise, which is solely used by the ca...
  function new_chessdbcn_move (line 229) | function new_chessdbcn_move(board, raw_item) {			// The object with info...
  function new_lichess_move (line 259) | function new_lichess_move(board, raw_item, position_total) {		// The obj...

FILE: files/src/renderer/80_info.js
  function NewInfoHandler (line 3) | function NewInfoHandler() {

FILE: files/src/renderer/83_statusbox.js
  function NewStatusHandler (line 3) | function NewStatusHandler() {

FILE: files/src/renderer/90_engine.js
  constant GUI_WANTS_TO_KNOW (line 42) | const GUI_WANTS_TO_KNOW = ["Backend", "EvalFile", "WeightsFile", "Syzygy...
  function SearchParams (line 52) | function SearchParams(node = null, limit = null, limit_by_time = false, ...
  function NewEngine (line 74) | function NewEngine(hub) {

FILE: files/src/renderer/95_hub.js
  function NewHub (line 3) | function NewHub() {

FILE: files/src/renderer/99_start.js
  function input_loop (line 137) | function input_loop() {
  function force_gc (line 274) | function force_gc() {
  function enter_loop (line 287) | function enter_loop() {
Condensed preview — 60 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,063K chars).
[
  {
    "path": "LICENSE.md",
    "chars": 34916,
    "preview": "### GNU GENERAL PUBLIC LICENSE\n\nVersion 3, 29 June 2007\n\nCopyright (C) 2007 Free Software Foundation, Inc.\n<https://fsf."
  },
  {
    "path": "README.md",
    "chars": 4400,
    "preview": "# Nibbler\n\nNibbler is a real-time analysis GUI for [Leela Chess Zero](http://lczero.org/play/quickstart/) (Lc0), which r"
  },
  {
    "path": "files/.editorconfig",
    "chars": 71,
    "preview": "[*]\nindent_style = tab\nindent_size = 4\ntrim_trailing_whitespace = true\n"
  },
  {
    "path": "files/.gitignore",
    "chars": 81,
    "preview": ".DS_Store\nscripts/dist\nscripts/electron_zipped\nscripts/update_my_installation.py\n"
  },
  {
    "path": "files/misc/chess960.txt",
    "chars": 33736,
    "preview": "https://www.mark-weeks.com/cfaa/chess960/c960strt.htm\nI've verified Nibbler produces exactly the same results given a Ch"
  },
  {
    "path": "files/misc/escape_and_missing_quotes.pgn",
    "chars": 511,
    "preview": "[Event \"Test \\\"quotes\\\" \\\\ and escaping and missing quotes in the FEN tag\"]\n[Site \"local\"]\n[Date \"2021.04.01\"]\n[Round \"1"
  },
  {
    "path": "files/misc/nibbler_menu_translations_template.json",
    "chars": 13833,
    "preview": "{\n\t\"LANGUAGE_NAME_FIXME\": {\t\t\t\t\t\t// The language name itself, in its own language.\n\t\t\"File\": \"TODO\",\t\t\t\t\t\t\t\t\t// As in: \""
  },
  {
    "path": "files/misc/pathological.pgn",
    "chars": 47156,
    "preview": "[Event \"Jeopardy Match 12\"]\n[Site \"brinanSee\"]\n[Date \"2019.06.15\"]\n[Round \"4\"]\n[White \"lc0.net.42518\"]\n[Black \"Stockfish"
  },
  {
    "path": "files/misc/pgn.txt",
    "chars": 121012,
    "preview": "\n\nStandard: Portable Game Notation Specification and Implementation Guide\n\nRevised: 1994.03.12\n\nAuthors: Interested read"
  },
  {
    "path": "files/misc/scraps.js",
    "chars": 6532,
    "preview": "\"use strict\";\n\nfunction NewPGNFileLoader(filename, callback) {\n\n\tlet loader = Object.create(null);\n\tloader.type = \"pgn\";"
  },
  {
    "path": "files/misc/state_logic.txt",
    "chars": 1241,
    "preview": "State logic\nAs of 2020-05-26:\n                                                   /-----------> halt()\n                  "
  },
  {
    "path": "files/misc/uci.txt",
    "chars": 27364,
    "preview": "Description of the universal chess interface (UCI)    April  2006\n======================================================"
  },
  {
    "path": "files/res/linux/nibbler.desktop",
    "chars": 217,
    "preview": "[Desktop Entry]\nCategories=Game;BoardGame;\nComment=Nibbler is a real-time analysis GUI for Leela Chess Zero (Lc0).\nExec="
  },
  {
    "path": "files/scripts/builder.py",
    "chars": 1742,
    "preview": "import json, os, shutil, zipfile\n\nzips = {\n\t\"windows\": \"scripts/electron_zipped/electron-v9.4.4-win32-x64.zip\",\n\t\"linux\""
  },
  {
    "path": "files/scripts/install.sh",
    "chars": 2691,
    "preview": "#!/usr/bin/env bash\nset -e\n\nBASE_URL=\"https://github.com/rooklift/nibbler\"\n\n# check curl\nif ! which curl 1>/dev/null 2>&"
  },
  {
    "path": "files/scripts/install_mac.sh",
    "chars": 2454,
    "preview": "#!/bin/bash\nset -euo pipefail\n\nmsg() {\n\tprintf \"=======================\\n\"\n\tprintf \"\\033[93m%s\\033[0m\\n\" \"$1\"\n}\n\nok() {\n"
  },
  {
    "path": "files/src/main.js",
    "chars": 121549,
    "preview": "\"use strict\";\n\nconst electron = require(\"electron\");\n\n// The docs are a bit vague but it seems there's a limited timefra"
  },
  {
    "path": "files/src/modules/alert_main.js",
    "chars": 1530,
    "preview": "\"use strict\";\n\n// Exports a function we use to draw alert messages.\n// To be used in the main process only (so when the "
  },
  {
    "path": "files/src/modules/background.js",
    "chars": 570,
    "preview": "\"use strict\";\n\nfunction background(light, dark, square_size) {\n\n\tlet c = document.createElement(\"canvas\");\n\tc.width = sq"
  },
  {
    "path": "files/src/modules/config_io.js",
    "chars": 7900,
    "preview": "\"use strict\";\n\nconst electron = require(\"electron\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst query"
  },
  {
    "path": "files/src/modules/custom_uci.js",
    "chars": 1381,
    "preview": "\"use strict\";\n\nconst electron = require(\"electron\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst query"
  },
  {
    "path": "files/src/modules/debork_json.js",
    "chars": 754,
    "preview": "\"use strict\";\n\nfunction replace_all(s, search, replace) {\n\tif (!s.includes(search)) {\t\t\t\t\t// Seems to improve speed over"
  },
  {
    "path": "files/src/modules/empty.js",
    "chars": 131,
    "preview": "\"use strict\";\n\n// The most perfect JS module ever written. Extensive testing\n// shows that this module contains less tha"
  },
  {
    "path": "files/src/modules/engineconfig_io.js",
    "chars": 2958,
    "preview": "\"use strict\";\n\nconst electron = require(\"electron\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst query"
  },
  {
    "path": "files/src/modules/images.js",
    "chars": 2254,
    "preview": "\"use strict\";\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\n\nlet sprites = {\n\n\tloads: 0,\n\n\tfully_loaded: func"
  },
  {
    "path": "files/src/modules/messages.js",
    "chars": 4767,
    "preview": "\"use strict\";\n\nconst config_io = require(\"./config_io\");\nconst engineconfig_io = require(\"./engineconfig_io\");\n\n\nexports"
  },
  {
    "path": "files/src/modules/running_as_electron.js",
    "chars": 217,
    "preview": "\"use strict\";\n\nconst path = require(\"path\");\n\n// Is there not a better way? Perhaps some Electron API somewhere?\n\nmodule"
  },
  {
    "path": "files/src/modules/stringify.js",
    "chars": 452,
    "preview": "\"use strict\";\n\n// Given anything, create a string from it.\n// Helps with sending messages over IPC, displaying alerts, e"
  },
  {
    "path": "files/src/modules/translate.js",
    "chars": 878,
    "preview": "\"use strict\";\n\nconst translations = require(\"./translations\");\n\nlet startup_language = null;\n\nexports.register_startup_l"
  },
  {
    "path": "files/src/modules/translations.js",
    "chars": 145897,
    "preview": "\"use strict\";\n\nconst config_io = require(\"./config_io\");\nconst engineconfig_io = require(\"./engineconfig_io\");\n\n// Some "
  },
  {
    "path": "files/src/nibbler.css",
    "chars": 4412,
    "preview": "html {\n\theight: 100%;\n}\n\nbody {\n\tbackground-color: #080808;\n\tborder: 0;\n\tcolor: #eeeeee;\n\tcursor: default;\n\tmargin: 0;\n\t"
  },
  {
    "path": "files/src/nibbler.html",
    "chars": 2832,
    "preview": "<!DOCTYPE html>\n<html>\n<head>\n\t<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">\n\t<!-- https://content"
  },
  {
    "path": "files/src/package.json",
    "chars": 247,
    "preview": "{\n\t\"name\": \"Nibbler\",\n\t\"version\": \"2.5.9\",\n\t\"author\": \"Rooklift\",\n\t\"description\": \"Leela Chess Zero (Lc0) interface\",\n\t\""
  },
  {
    "path": "files/src/renderer/10_globals.js",
    "chars": 4853,
    "preview": "\"use strict\";\n\n// HTML stuff.......................................................\n//\n// All of this may be redundant s"
  },
  {
    "path": "files/src/renderer/20_utils.js",
    "chars": 14608,
    "preview": "\"use strict\";\n\n// At some point I tried caching the results of XY() and S()\n// but for XY(), object lookups were slower "
  },
  {
    "path": "files/src/renderer/30_point.js",
    "chars": 1610,
    "preview": "\"use strict\";\n\nfunction Point(a, b) {\n\n\t// Each Point is represented by a single object so that naive equality checking "
  },
  {
    "path": "files/src/renderer/31_sliders.js",
    "chars": 1460,
    "preview": "\"use strict\";\n\n// This makes an object storing \"sliders\" for every piece except K and k which are handled\n// differently"
  },
  {
    "path": "files/src/renderer/40_position.js",
    "chars": 34343,
    "preview": "\"use strict\";\n\n\n//\t\tNote that ALL CASTLING MOVES are expected to be in format KING-TO-ROOK (e.g. e1h1).\n//\t\tThat is, onl"
  },
  {
    "path": "files/src/renderer/41_fen.js",
    "chars": 6539,
    "preview": "\"use strict\";\n\nfunction LoadFEN(fen) {\n\n\tif (fen.length > 200) {\n\t\tthrow \"Invalid FEN - size\";\n\t}\n\n\tlet ret = NewPositio"
  },
  {
    "path": "files/src/renderer/42_perft.js",
    "chars": 3043,
    "preview": "\"use strict\";\n\n/* Perft notes:\n\nThe correct perft value for a position and depth is the number of leaf nodes at\nthat dep"
  },
  {
    "path": "files/src/renderer/43_chess960.js",
    "chars": 1685,
    "preview": "\"use strict\";\n\nfunction c960_arrangement(n) {\n\n\t// Given n, generate a string like \"RNBQKBNR\".\n\t// AFAIK, matches the sc"
  },
  {
    "path": "files/src/renderer/50_table.js",
    "chars": 8834,
    "preview": "\"use strict\";\n\n// The table object stores info from the engine about a game-tree (PGN) node.\n\nfunction NewTable() {\n\tlet"
  },
  {
    "path": "files/src/renderer/51_node.js",
    "chars": 13481,
    "preview": "\"use strict\";\n\nfunction NewNode(parent, move, board_for_root) {\t\t// move must be legal; board is only relevant for root "
  },
  {
    "path": "files/src/renderer/52_sorted_moves.js",
    "chars": 4085,
    "preview": "\"use strict\";\n\nfunction SortedMoveInfo(node) {\n\n\tif (!node || node.destroyed) {\n\t\treturn [];\n\t}\n\n\treturn SortedMoveInfoF"
  },
  {
    "path": "files/src/renderer/55_winrate_graph.js",
    "chars": 5258,
    "preview": "\"use strict\";\n\nfunction NewGrapher() {\n\n\tlet grapher = Object.create(null);\n\n\tgrapher.dragging = false;\t\t\t// Used by the"
  },
  {
    "path": "files/src/renderer/60_pgn_utils.js",
    "chars": 6058,
    "preview": "\"use strict\";\n\nfunction split_buffer(buf) {\n\n\t// Split a binary buffer into an array of binary buffers corresponding to "
  },
  {
    "path": "files/src/renderer/61_pgn_parse.js",
    "chars": 5366,
    "preview": "\"use strict\";\n\nfunction new_pgn_record() {\n\treturn {\n\t\ttags: Object.create(null),\n\t\tmovebufs: []\n\t};\n}\n\nfunction PrePars"
  },
  {
    "path": "files/src/renderer/63_polyglot.js",
    "chars": 24564,
    "preview": "\"use strict\";\n\n// http://hgm.nubati.net/book_format.html\n\n// Note on bitwise operations on BigInt values: everything is "
  },
  {
    "path": "files/src/renderer/65_loaders.js",
    "chars": 5644,
    "preview": "\"use strict\";\n\n// Non-blocking loader objects.\n//\n// Implementation rule: The callback property is non-null iff it's sti"
  },
  {
    "path": "files/src/renderer/71_tree_handler.js",
    "chars": 7032,
    "preview": "\"use strict\";\n\n// The point is that updating the node should trigger an immediate redraw. The caller doesn't need\n// to "
  },
  {
    "path": "files/src/renderer/72_tree_draw.js",
    "chars": 3922,
    "preview": "\"use strict\";\n\nlet tree_draw_props = {\n\n\t// Since we use Object.assign(), it's bad form to have any deep objects in the "
  },
  {
    "path": "files/src/renderer/75_looker.js",
    "chars": 8545,
    "preview": "\"use strict\";\n\n// Rate limit strategy - thanks to Sopel:\n//\n// .running holds the item in-flight.\n// .pending holds a si"
  },
  {
    "path": "files/src/renderer/80_info.js",
    "chars": 12026,
    "preview": "\"use strict\";\n\nfunction NewInfoHandler() {\n\n\tlet ih = Object.create(null);\n\tObject.assign(ih, info_misc_props);\n\tObject."
  },
  {
    "path": "files/src/renderer/81_arrows.js",
    "chars": 12668,
    "preview": "\"use strict\";\n\nlet arrow_props = {\n\n\tdraw_arrows: function(node, specific_source, show_move) {\t\t// If not nullish, speci"
  },
  {
    "path": "files/src/renderer/82_infobox.js",
    "chars": 9604,
    "preview": "\"use strict\";\n\nlet infobox_props = {\n\n\tdraw_infobox: function(node, mouse_point, active_square, active_colour, hoverdraw"
  },
  {
    "path": "files/src/renderer/83_statusbox.js",
    "chars": 5314,
    "preview": "\"use strict\";\n\nfunction NewStatusHandler() {\n\n\tlet sh = Object.create(null);\n\n\tsh.special_message = null;\n\tsh.special_me"
  },
  {
    "path": "files/src/renderer/90_engine.js",
    "chars": 14584,
    "preview": "\"use strict\";\n\n/*\n\nWe are in one of these states (currently implicit in the logic):\n\t1. Inactive\n\t2. Running a search\n\t3"
  },
  {
    "path": "files/src/renderer/95_hub.js",
    "chars": 78882,
    "preview": "\"use strict\";\n\nfunction NewHub() {\n\n\tlet hub = Object.create(null);\n\n\thub.engine = NewEngine(hub);\t\t\t\t\t\t// Just a dummy "
  },
  {
    "path": "files/src/renderer/97_drag.js",
    "chars": 5104,
    "preview": "\"use strict\"\n\n// Drag improvements submitted by ObnubiladO in PR #291\n// Back in the day, something like this would be r"
  },
  {
    "path": "files/src/renderer/99_start.js",
    "chars": 8802,
    "preview": "\"use strict\";\n\n// Upon first run, hopefully the prefs directory exists by now\n// (I think the main process makes it...)\n"
  }
]

About this extraction

This page contains the full source code of the fohristiwhirl/nibbler GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 60 files (883.4 KB), approximately 288.8k tokens, and a symbol index with 122 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!