New version: Demolito 2017-08-26

Discussion of anything and everything relating to chess playing software and machines.

Moderators: hgm, Rebel, chrisw

User avatar
Steve Maughan
Posts: 1221
Joined: Wed Mar 08, 2006 8:28 pm
Location: Florida, USA

Re: New version: Demolito 2017-08-26

Post by Steve Maughan »

Hi Lucas,

Congrats - this is an awesome achievement. The code looks beautiful. I hope it's a solid base on which you can build.

Steve
http://www.chessprogramming.net - Maverick Chess Engine
User avatar
lucasart
Posts: 3232
Joined: Mon May 31, 2010 1:29 pm
Full name: lucasart

Re: New version: Demolito 2017-08-26

Post by lucasart »

Ras wrote:Incredible, so little code and so strong. With this line count, I barely get my opening book compiler done. :shock:

Plus that the code is really nice to look at, well structured and maintainable.

Btw., CppCheck shows one issue (apart from style stuff). In smp_resize(), Workers is nulled upon realloc failure, but not freed.
Thanks for the compliments.

On the realloc failure. That's by design. The way I see it, memory allocation failure is an unrecoverable failure, because it takes down the operating system with it. So it's a waste of time, and needlessly messes up the code base, to write pedantically correct code, to manage these memory allocation failures.
Theory and practice sometimes clash. And when that happens, theory loses. Every single time.
User avatar
lucasart
Posts: 3232
Joined: Mon May 31, 2010 1:29 pm
Full name: lucasart

Re: New version: Demolito 2017-08-26

Post by lucasart »

Ras wrote:
mar wrote:Demolito has the cleanest code base I ever saw in a chess engine.
My favourite is the use of setjmp/longjmp. That is goto on steroids and allows for ultimate dirty hacks. The amazing thing is that this actually is exception handling in plain C in a way that even improves the structure. I've never seen anything like this in an application, i.e. outside of low-level system programming.
You uncovered Demolito's dirty secret :lol:

I wouldn't say I'm proud of it. But I'm not ashamed of it either. There's really no other choice in C, if you want to reliably stop immediately, and keep code clean and maintainable:

(1) You can have an abort flag (per thread). This means you need to append every single search() and qsearch() call with code likt "if (worker->abort) return 0;". Erm... No, thanks.

(1.b) You see people (including older versions of Stockfish) doing variations of the above, like only putting that ugly if code in certain recursion calls, and forget others. Supposedly simplifying the code... And then (surprise, surprise...) you have occasional time losses, because of rare code path where unwanted recursions are allowed when the abort flag has been set.

(2) Some (old and bearded) people will tell you should write an iterative search, and that problem (1) is not a problem anymore in an iterative search. But writing an iterative search means doing yourself the job of the compiler, managing explicit stack for local variables. Again: no, thanks.

So the only elegant and reliable solution is to use exceptions. That's in C++, at least.

In C, you also have state-of-the-1970's exceptions with setjmp() and longjmp(). But they're a bit radioactive, so should be used carefully. To be safe, you shouldn't acquire resources (memory and lock) in any possible call tree between setjmp() and longjmp() -- which is the case in Demolito. If you have resources to explicitly release in the unwinding process, you need to back to manual solution (1).
Theory and practice sometimes clash. And when that happens, theory loses. Every single time.
Dann Corbit
Posts: 12538
Joined: Wed Mar 08, 2006 8:57 pm
Location: Redmond, WA USA

Re: New version: Demolito 2017-08-26

Post by Dann Corbit »

Both setjmp and longjmp are stack magic. If you think about implementing this, it is some kind of miracle.

I have seen lots of good programs that use them.

CAVEAT:
Use of setjump/longjmp together with exceptions is undefined behavior.
Don't even think about it with C++.
Taking ideas is not a vice, it is a virtue. We have another word for this. It is called learning.
But sharing ideas is an even greater virtue. We have another word for this. It is called teaching.
User avatar
cdani
Posts: 2204
Joined: Sat Jan 18, 2014 10:24 am
Location: Andorra

Re: New version: Demolito 2017-08-26

Post by cdani »

lucasart wrote: (1) You can have an abort flag (per thread). This means you need to append every single search() and qsearch() call with code likt "if (worker->abort) return 0;". Erm... No, thanks.
I have done this in Andscacs and works flawlessly. It never loses on time, unless the system is incapable, for example playing with 0.01 increment on an old system.
Michel
Posts: 2272
Joined: Mon Sep 29, 2008 1:50 am

Re: New version: Demolito 2017-08-26

Post by Michel »

My favourite is the use of setjmp/longjmp. That is goto on steroids and allows for ultimate dirty hacks. The amazing thing is that this actually is exception handling in plain C in a way that even improves the structure. I've never seen anything like this in an application, i.e. outside of low-level system programming.
Fruit used setjmp/longmp many years ago already. At least since Fruit 2.1 (2005). Probably earlier.

setjmp/longjmp is not a variant of goto. setjmp/longjmp is stack unwinding. This is completely different.
Ideas=science. Simplification=engineering.
Without ideas there is nothing to simplify.
User avatar
lucasart
Posts: 3232
Joined: Mon May 31, 2010 1:29 pm
Full name: lucasart

Re: New version: Demolito 2017-08-26

Post by lucasart »

cdani wrote:
lucasart wrote: (1) You can have an abort flag (per thread). This means you need to append every single search() and qsearch() call with code likt "if (worker->abort) return 0;". Erm... No, thanks.
I have done this in Andscacs and works flawlessly. It never loses on time, unless the system is incapable, for example playing with 0.01 increment on an old system.
Yes, I know it works. But it's ugly…
Theory and practice sometimes clash. And when that happens, theory loses. Every single time.
User avatar
lucasart
Posts: 3232
Joined: Mon May 31, 2010 1:29 pm
Full name: lucasart

Re: New version: Demolito 2017-08-26

Post by lucasart »

Michel wrote:
My favourite is the use of setjmp/longjmp. That is goto on steroids and allows for ultimate dirty hacks. The amazing thing is that this actually is exception handling in plain C in a way that even improves the structure. I've never seen anything like this in an application, i.e. outside of low-level system programming.
Fruit used setjmp/longmp many years ago already. At least since Fruit 2.1 (2005). Probably earlier.

setjmp/longjmp is not a variant of goto. setjmp/longjmp is stack unwinding. This is completely different.
You're wrong: longjmp is a goto. Just a goto that crosses function boundaries. You just abruptly restore the previously stored stack pointer, instruction pointer, and all registers. That's just what it does.

There is no stack unwinding. That's C++ exceptions, which have to carefully de-recurse step by step, calling destructors along the way.
Theory and practice sometimes clash. And when that happens, theory loses. Every single time.
mcostalba
Posts: 2684
Joined: Sat Jun 14, 2008 9:17 pm

Re: New version: Demolito 2017-08-26

Post by mcostalba »

lucasart wrote: So the only elegant and reliable solution is to use exceptions. That's in C++, at least.
Yes, in C++ the solution is to use exceptions.

I tried that in the past, at YBWC time, and it didn't worked, maybe now with lazy SMP is easier to implement...maybe a sub-project for some interested SF developer interested in trying something different and more structured than the usual search/evaluation tweaks :-)

Of course a good understanding of C++ and SF sources is required, definitely more than the average skill needed to submit a test into fishtest.


Just to be clear: to allow people to submit interesting tests even with low C++ skills and low understanding of the general SF code is a feature of SF code base, not a negative thing. I am proud the SF sources allow everybody to test ideas even with very limited programming background. Sources readability is a major goal for us. You don't have to be a C++ guru to have fun with SF and getting started very quickly. I think this is one of the main reasons of why we have so many people on fishtest.
Gusev
Posts: 1476
Joined: Mon Jan 28, 2013 2:51 pm

Re: New version: Demolito 2017-08-26

Post by Gusev »

Damir wrote:How strong is Demolito? What is its elo ? Is it on a pair with Stockfish ? :o
It puts up fierce resistance. (How come it fails to see Bxc6? Must be something about pins...)
[pgn]
[Event "Computer chess game"]
[Site "ASUS-DANDELION"]
[Date "2017.08.30"]
[Round "?"]
[White "AsmFishW_2017-08-10_bmi2"]
[Black "Demolito_20170826_windows_intel_pext"]
[Result "1-0"]
[BlackElo "2000"]
[ECO "D38"]
[Opening "QGD"]
[Time "18:09:33"]
[Variation "Ragozin, 5.Bg5"]
[WhiteElo "2000"]
[TimeControl "300+3"]
[Termination "normal"]
[PlyCount "116"]
[WhiteType "program"]
[BlackType "program"]

1. d4 {(d2-d4 e7-e6 c2-c4 d7-d5 Ng1-f3 Ng8-f6 a2-a3 d5xc4 e2-e3 b7-b5 a3-a4
b5-b4 Bf1xc4 Bc8-b7 b2-b3 Bf8-e7 O-O O-O Nb1-d2 c7-c5 Bc1-b2 c5xd4 Nf3xd4
Nb8-d7 Bc4-e2 Nd7-c5 Ra1-c1 Ra8-c8 Rc1-c4) +0.15/28 45} Nf6 {(Ng8-f6 Ng1-f3
e7-e6 Nb1-c3 d7-d5 Bc1-g5 Bf8-e7 e2-e3 O-O Bf1-d3 c7-c5 O-O Nb8-c6 Bd3-e2
c5xd4 e3xd4 Bc8-d7 Nf3-e5 Nc6xe5 d4xe5 Nf6-e4 Bg5xe7 Qd8xe7 Nc3xe4)
-0.11/20 8} 2. c4 {(c2-c4 e7-e6 Ng1-f3 d7-d5 a2-a3 b7-b6 c4xd5 e6xd5 Nb1-c3
Bc8-b7 Bc1-g5 Bf8-e7 e2-e3 O-O Bf1-d3 c7-c5 O-O h7-h6 Bg5-f4 Nb8-d7 Bd3-c2
Bb7-c6 Rf1-e1 Nf6-e4 Nf3-e5 Nd7xe5 Bf4xe5) +0.11/26 8} e6 {(e7-e6 Nb1-c3
d7-d5 Ng1-f3 Bf8-e7 e2-e3 O-O Bf1-e2 c7-c5 O-O Nb8-c6 Nf3-e5 c5xd4 e3xd4
Nc6xe5 d4xe5 Nf6-e4 Nc3xe4 d5xe4 Bc1-e3) -0.11/20 10} 3. Nf3 {(Ng1-f3 d7-d5
a2-a3 b7-b6 c4xd5 e6xd5 Bc1-g5 Bf8-e7 e2-e3 O-O Nb1-c3 Bc8-b7 Bf1-e2 Nb8-d7
O-O Nf6-e4 Bg5xe7 Qd8xe7 Qd1-b3 Ne4xc3 b2xc3 Ra8-e8 Be2-d3 c7-c5 c3-c4
Nd7-f6) +0.07/25 8} d5 {(d7-d5 Nb1-c3 c7-c5 c4xd5 c5xd4 Nf3xd4 Nf6xd5
Nd4-b5 Bc8-d7 e2-e4 Nd5xc3 Nb5xc3 Bf8-c5 Bf1-e2 O-O O-O Nb8-c6 Bc1-e3
Bc5xe3 f2xe3 Ra8-c8 Ra1-c1) -0.24/20 19} 4. Nc3 {(g2-g3 Nb8-d7 Bf1-g2
Bf8-b4+ Nf3-d2 O-O O-O c7-c6 a2-a3 Bb4-a5 b2-b4 Ba5-c7 Bc1-b2 a7-a5 Nb1-c3
a5xb4 a3xb4 Ra8xa1 Bb2xa1 Qd8-e7 Qd1-b1 d5xc4 Nd2xc4 Nd7-b6 Nc4xb6 Bc7xb6
e2-e3) +0.19/23 18} Bb4 {(Bf8-b4 e2-e3 O-O Bf1-d3 c7-c5 O-O Nb8-c6 a2-a3
Bb4xc3 b2xc3 b7-b6 d4xc5 b6xc5 Qd1-c2 Rf8-e8 Bc1-b2 g7-g6 c4xd5 e6xd5
c3-c4) -0.27/19 8} 5. Bg5 {(Bc1-g5 O-O e2-e3 h7-h6 Bg5xf6 Bb4xc3+ b2xc3
Qd8xf6 c4xd5 e6xd5 Bf1-d3 Nb8-c6 Qd1-b3 Qf6-d6 O-O b7-b6 h2-h3 Nc6-a5
Qb3-b4 Na5-c4 Qb4xd6 Nc4xd6 Nf3-e5 Bc8-b7 Ra1-b1 c7-c5) +0.21/24 12} c6
{(c7-c6 Bg5xf6 g7xf6 e2-e3 Qd8-a5 Qd1-c2 Rh8-g8 Qc2xh7 Bb4xc3+ Ke1-d1
Ke8-f8 b2xc3 Qa5xc3 Ra1-c1 Qc3-b2 Qh7-c2 Qb2xc2+ Rc1xc2 d5xc4 Rc2xc4 Nb8-d7
h2-h4) -0.26/18 8} 6. Qb3 {(Qd1-b3 Bb4-e7 e2-e3 O-O Bf1-d3 h7-h6 Bg5-h4
d5xc4 Bd3xc4 Nb8-d7 O-O b7-b5 Bc4-e2 b5-b4 Nc3-a4 g7-g5 Bh4-g3 Nf6-e4
Qb3-c2 Ne4xg3 h2xg3 Bc8-b7 Ra1-d1 Qd8-a5) +0.35/24 5} Qa5 {(Qd8-a5 Bg5-d2
d5xc4 Qb3xc4 b7-b6 a2-a3 Bb4xc3 Qc4xc3 Qa5xc3 Bd2xc3 Bc8-a6 Nf3-e5 Nf6-e4
Bc3-b4 f7-f6 Ne5-d3 Nb8-d7 f2-f3 Ba6xd3 e2xd3 Ne4-g5 h2-h4 Ng5-f7) -0.21/18
8} 7. Bxf6 {(Bg5xf6 d5xc4 Qb3xc4 g7xf6 e2-e4 Rh8-g8 a2-a3 Bb4xc3+ b2xc3
b7-b6 Qc4-b4 Bc8-a6 Qb4xa5 b6xa5 g2-g3 Ba6xf1 Rh1xf1 Nb8-d7 Ke1-e2 Ra8-b8
Ra1-b1 Ke8-e7 Nf3-d2 c6-c5 Ke2-e3 c5xd4+ c3xd4 Rg8-c8) +0.51/25 10} dxc4
{(d5xc4 Qb3xc4 g7xf6 e2-e3 Bb4xc3+ b2xc3 Rh8-g8 g2-g3 b7-b6 Nf3-d2 Bc8-a6
Qc4-b4 Qa5xb4 c3xb4 Ba6xf1 Ke1xf1 a7-a5 b4xa5 Ra8xa5 Nd2-c4 Ra5-a6 Kf1-g2)
-0.39/19 8} 8. Qxc4 {(Qb3xc4 g7xf6 e2-e3 Bb4xc3+ b2xc3 b7-b6 Qc4-b3 Nb8-d7
Bf1-c4 Bc8-a6 a2-a4 Ba6xc4 Qb3xc4 Qa5-d5 Qc4-e2 f6-f5 O-O Rh8-g8 a4-a5
Ke8-e7 c3-c4 Qd5-e4 Rf1-b1 c6-c5 a5xb6 a7xb6) +0.38/23 1} gxf6 {(g7xf6
a2-a3 Bb4xc3+ Qc4xc3 Qa5xc3+ b2xc3 Rh8-g8 e2-e4 Nb8-d7 g2-g3 Ke8-e7 Bf1-d3
b7-b6 Nf3-d2 a7-a5 f2-f4 Bc8-a6 Bd3xa6 Ra8xa6 Ke1-f2 Ra6-a8 Rh1-b1 b6-b5
c3-c4) -0.41/20 7} 9. e3 {(e2-e3 Nb8-d7 a2-a3 Bb4xc3+ b2xc3 Rh8-g8 g2-g3
c6-c5 Bf1-e2 b7-b6 O-O Bc8-b7 Qc4-b3 f6-f5 c3-c4 c5xd4 e3xd4 f5-f4 c4-c5
Bb7-d5 Qb3-b4 Qa5xb4 a3xb4 f4xg3 f2xg3 a7-a5 c5xb6 a5xb4 Ra1xa8+ Bd5xa8
Rf1-b1 Ba8xf3) +0.37/26 30} Rg8 {(Rh8-g8 a2-a3 Bb4xc3+ b2xc3 Qa5-b6 Qc4-b4
Nb8-a6 Qb4xb6 a7xb6 g2-g3 e6-e5 Bf1-d3 Bc8-g4 Nf3-d2 h7-h5 h2-h3 Bg4-e6
Ra1-b1 b6-b5 c3-c4 b5xc4 Nd2xc4) -0.42/21 12} 10. g3 {(g2-g3 b7-b6 Qc4-b3
Nb8-d7 Nf3-d2 Bb4xc3 b2xc3 Bc8-a6 Bf1xa6 Qa5xa6 c3-c4 h7-h5 Qb3-d3 Ke8-e7
a2-a4 h5-h4 a4-a5 h4xg3 h2xg3 Rg8-h8 Rh1xh8 Ra8xh8 Ke1-e2 b6xa5 Qd3-a3+
c6-c5 Qa3xa5 Qa6xa5 Ra1xa5) +0.59/23 8} e5 {(e6-e5 a2-a3 Nb8-a6 Ra1-c1
Bb4xc3+ Rc1xc3 Na6-c7 b2-b4 Qa5-d5 Qc4xd5 Nc7xd5 Rc3-c1 e5-e4 Nf3-d2 f6-f5
Bf1-c4 Bc8-e6 Bc4xd5 Be6xd5 Ke1-e2 Ke8-d7) -0.22/18 7} 11. Qb3 {(Qc4-b3
Bc8-e6 Bf1-c4 Be6xc4 Qb3xc4 e5xd4 e3xd4 Nb8-d7 O-O O-O-O Qc4xf7 Bb4xc3
b2xc3 Qa5xc3 Kg1-g2 Qc3-d3 Rf1-e1 Qd3-g6 Re1-e7 Qg6xf7 Re7xf7 h7-h5 Ra1-e1
Rg8-e8 Re1-e3 Re8xe3 f2xe3 c6-c5 Kg2-f2 c5-c4 Rf7-h7 Kc8-c7 Rh7xh5 Kc7-c6
Nf3-e1) +0.90/25 23} Nd7 {(Nb8-d7 Bf1-c4 Rg8-g7 O-O Nd7-b6 Bc4-d3 Bb4xc3
b2xc3 Bc8-e6 Qb3-c2 h7-h5 Nf3-d2 Ra8-d8 Nd2-b3 Qa5-a4 Nb3-c5 Qa4xc2 Bd3xc2
Rd8-b8 f2-f3) -0.41/19 16} 12. Bg2 {(Bf1-g2 f6-f5 d4xe5 Nd7-c5 Qb3-c2
Qa5-a6 Bg2-f1 Qa6-a4 Qc2xa4 Nc5xa4 a2-a3 Bb4-a5 b2-b4 Ba5xb4 a3xb4 Na4xc3
Nf3-d4 Nc3-d5 Bf1-g2 Nd5xb4 O-O Ke8-e7 Rf1-b1 c6-c5 Nd4-e2 a7-a5 Rb1-c1
Nb4-d3 Rc1-c3 Nd3xe5 Rc3xc5 Ne5-c6 Bg2xc6 b7xc6 Rc5xa5 Ra8xa5 Ra1xa5 Ke7-f6
Ne2-d4 Bc8-e6) +0.76/27 13} Nb6 {(Nd7-b6 a2-a3 Bb4xc3+ Qb3xc3 Qa5xc3+ b2xc3
Nb6-c4 Nf3-d2 Bc8-e6 Nd2xc4 Be6xc4 Ke1-d2 Bc4-e6 f2-f4 O-O-O Rh1-b1 Kc8-c7
Bg2-f3 h7-h6 Kd2-d3 b7-b6 a3-a4 e5xf4 e3xf4 Be6-f5+ Bf3-e4 Bf5xe4+ Kd3xe4
Rg8-e8+ Ke4-d3) -0.13/19 7} 13. O-O {(O-O Bc8-e6 Qb3-c2 O-O-O Qc2xh7 Kc8-b8
Rf1-c1 Nb6-d5 Qh7-c2 Bb4-d6 a2-a3 Qa5-c7 Nc3xd5 Be6xd5 Nf3-h4 Bd5xg2 d4xe5
Bg2-d5 e5xd6 Rd8xd6 b2-b4 Rd6-e6 Qc2-h7 Re6-e8 Qh7-f5 Re8-e6 Rc1-d1 Bd5-e4
Qf5-f4) +1.16/25 16} Be6 {(Bc8-e6 Qb3-c2 Bb4xc3 b2xc3 h7-h6 d4xe5 f6xe5
Rf1-d1 Nb6-d7 Nf3-h4 O-O-O Nh4-f5 Rg8-h8 Nf5-g7 Nd7-c5 Ng7xe6 f7xe6 Ra1-b1
Rd8xd1+ Rb1xd1 Rh8-d8 Bg2-f3 Rd8xd1+ Bf3xd1) -0.16/19 8} 14. Qc2 {(Qb3-c2
O-O-O Qc2xh7 Nb6-c4 a2-a3 Bb4xc3 b2xc3 Nc4-d6 Qh7-c2 Be6-d5 Qc2-b2 Nd6-c4
Qb2-e2 f6-f5 Rf1-c1 Kc8-b8 d4xe5 Rg8-h8 h2-h4 Bd5xf3 Qe2xc4 Bf3xg2 Kg1xg2
Qa5xe5 Qc4xf7) +1.17/24 7} Bxc3 {(Bb4xc3 b2xc3 h7-h6 d4xe5 f6xe5 Rf1-d1
Nb6-d7 Nf3-h4 O-O-O Nh4-f5 Rg8-h8 Nf5-g7 Nd7-c5 Ng7xe6 f7xe6 Ra1-b1 Rh8-e8
h2-h4 Re8-f8 Rd1xd8+ Rf8xd8 Bg2-f3 Qa5-a6 Bf3-e2 Qa6-a3) -0.25/19 7} 15.
bxc3 {(b2xc3 O-O-O Qc2xh7 Nb6-d5 Rf1-c1 Nd5xc3 Qh7-d3 Nc3-d5 a2-a4 Nd5-b6
Qd3-e4 Nb6-c4 d4xe5 Nc4xe5 Nf3xe5 Qa5xe5 Rc1xc6+ Kc8-b8 Rc6-c1 Be6-d5
Qe4-f4 Qe5xf4 e3xf4) +1.40/23 4} h6 {(h7-h6 Rf1-b1 O-O-O Nf3-d2 Qa5-a3
Nd2-e4 Be6-f5 Qc2-e2 Bf5xe4 Rb1-b3 Qa3-e7 Bg2xe4 Kc8-b8 Qe2-d3 Qe7-e6
Rb3-b1 Qe6-g4 a2-a4 Qg4-h5 a4-a5 Nb6-d5) -0.31/20 6} 16. Nd2 {(Nf3-d2 O-O-O
a2-a4 f6-f5 Nd2-b3 Be6xb3 Qc2xb3 e5-e4 Qb3xf7 Qa5-d5 Qf7-h5 Qd5-e6 a4-a5
Nb6-c4 Rf1-b1 Rd8-d5 a5-a6 b7-b5 Qh5-e2 Rd5-d8 Bg2-h3 Nc4-d6 Bh3-g2)
+1.52/22 4} O-O-O {(O-O-O Rf1-b1 h6-h5 Nd2-b3 Qa5-a3 h2-h4 Nb6-a4 Bg2-f3
Rg8-h8 c3-c4 Kc8-b8 c4-c5 Rd8-d7 Bf3-e2 Be6-h3 Kg1-h2 Bh3-e6 Be2-d3 Rh8-d8)
-0.32/17 8} 17. a4 {(a2-a4 f6-f5 Nd2-b3 Be6xb3 Qc2xb3 f5-f4 e3xf4 e5xf4
Rf1-e1 Kc8-b8 Re1-e5 Nb6-d5 Bg2xd5 Rd8xd5 Re5-e7 Qa5-b6 Qb3xb6 a7xb6 Re7xf7
f4xg3 f2xg3 c6-c5 Ra1-b1 c5xd4 Rb1xb6 d4-d3 Rb6xb7+ Kb8-c8 Rf7-c7+ Kc8-d8)
+1.56/23 6} Rge8 {(Rg8-e8 Rf1-b1 Nb6-d5 Qc2-b2 Nd5-b6 Nd2-b3 Be6xb3 Qb2xb3
Re8-e7 Qb3-c2 Kc8-b8 Rb1-c1 Nb6-d5 c3-c4 Nd5-c7 Ra1-b1 e5xd4 Bg2xc6 Nc7-e6)
-0.50/19 20} 18. Rfb1 {(Rf1-b1 h6-h5 h2-h4 f6-f5 Nd2-b3 Be6xb3 Rb1xb3 e5-e4
c3-c4 Kc8-b8 c4-c5 Nb6-d5 Ra1-b1 Re8-e7 Qc2-b2 Qa5-c7 a4-a5 Kb8-a8 Bg2-f1
Rd8-g8 Bf1-c4 f5-f4 e3xf4 e4-e3 a5-a6 b7xa6 Kg1-h2 Nd5-f6 f2xe3 Nf6-g4+
Kh2-h1 Ng4xe3 Bc4xf7 Re7xf7 Rb3xe3 Qc7-d8) +1.89/24 8} Nd5 {(Nb6-d5 Nd2-e4
f6-f5 Ne4-c5 Re8-e7 Bg2xd5 Rd8xd5 Nc5-b3 Qa5-c7 c3-c4 Rd5-d8 a4-a5 e5xd4
Nb3xd4 Qc7-d7 a5-a6 b7-b6 Qc2-a4 Kc8-c7 Rb1-d1 Re7-e8) -0.72/18 9} 19. Qb2
{(Qc2-b2 Nd5-b6 Nd2-b3 Be6xb3 Qb2xb3 Re8-e7 Qb3-c2 Kc8-b8 Qc2-f5 Rd8-f8
Qf5-h7 Rf8-e8 Qh7xh6 Re7-e6 Bg2-h3 f6-f5 Qh6-h5 Nb6-d5 Qh5xf5 Nd5xc3 Rb1-b3
Re6-e7 d4xe5 Nc3-d5 e3-e4 Nd5-b6) +2.18/23 4} Nb6 {(Nd5-b6 Nd2-b3 Be6xb3
Qb2xb3 Re8-e7 Qb3-c2 Kc8-b8 Qc2-f5 Rd8-d6 Rb1-b3 Rd6-e6 Qf5-h5 Nb6-c4
Bg2-h3 Re6-d6 Qh5xh6 Nc4-d2 Rb3-b4 Qa5-d8 Bh3-g4) -0.83/20 6} 20. Nb3
{(Nd2-b3 Be6xb3 Qb2xb3 Re8-e7 Qb3-c2 Kc8-b8 Qc2-f5 Rd8-f8 Rb1-b4 Rf8-e8
Qf5xf6 e5xd4 Rb4xd4 a7-a6 Ra1-b1 Kb8-a7 Rd4-b4 Nb6-d5 Qf6-d4+ Ka7-a8 Rb4-b3
Re8-d8 Bg2-f3 Re7-d7 c3-c4 Nd5-e7 Qd4-f6 h6-h5 Qf6xf7 Qa5xa4 Bf3xh5)
+2.30/24 5} Bxb3 {(Be6xb3 Qb2xb3 Re8-e7 Qb3-c2 Kc8-b8 Qc2-f5 Rd8-d6 Rb1-b3
Rd6-e6 Qf5-h5 Nb6-c4 Qh5xh6 Nc4-d2 Rb3-b4 e5xd4 Bg2xc6 d4xe3 f2xe3 Qa5-d8
Rb4-d4 Re6-d6 Rd4xd6 Qd8xd6) -1.05/18 5} 21. Qxb3 {(Qb2xb3 Re8-e7 Qb3-c2
Rd8-e8 Qc2-f5+ Kc8-c7 Rb1-b3 Re7-e6 Qf5-h5 Kc7-b8 Qh5xf7 Kb8-a8 Qf7-h7
e5-e4 Qh7xh6 Nb6-c4 Rb3-b4 Nc4-d6 h2-h4 c6-c5 Qh6-h5 f6-f5 Rb4-b1 c5xd4)
+2.42/22 2} Re7 {(Re8-e7 Qb3-c2 Kc8-b8 Qc2-f5 Rd8-d6 Rb1-b3 Rd6-e6 Qf5-h5
Nb6-c4 Bg2-h3 e5xd4 Qh5xh6 f6-f5 Qh6-f4+ Qa5-c7 Qf4xc7+ Kb8xc7 c3xd4 Nc4-d6
Ra1-c1 Re6-h6 Bh3-g2) -1.02/18 5} 22. Qc2 {(Qb3-c2 h6-h5 Qc2-f5+ Kc8-b8
Qf5xf6 Rd8-e8 c3-c4 e5xd4 e3xd4 Re7-e1+ Bg2-f1 Re1-e6 Qf6xf7 Re6-e7 Qf7-f6
Kb8-a8 h2-h4 Qa5-d2 Rb1-d1 Qd2-b2 Qf6-f4 Nb6-d7 a4-a5 Re8-f8 Qf4-d2 Qb2xd2
Rd1xd2 Nd7-f6 Bf1-g2 Nf6-e4 Rd2-c2 Ka8-b8 a5-a6 Kb8-c7 a6xb7) +2.46/26 13}
Kb8 {(Kc8-b8 Qc2-f5 Rd8-d6 Rb1-b3 Nb6-c4 Qf5-d3 Nc4-b6 Qd3-h7 e5xd4 c3xd4
f6-f5 Bg2-h3 Qa5-d5 Ra1-b1 Nb6-c4 Rb3-d3 Nc4-b6 Qh7xf5 Qd5xf5 Bh3xf5 Nb6xa4
Rd3-b3) -0.98/21 16} 23. Qf5 {(Qc2-f5 Rd8-f8 Rb1-b4 Re7-e6 Ra1-b1 Kb8-a8
Qf5-h5 Rf8-d8 Qh5xf7 Re6-d6 h2-h4 Rd8-b8 Qf7-h5 Nb6-d5 Bg2xd5 Qa5xd5 Qh5xh6
a7-a5 Rb4-b2 e5xd4 c3xd4 b7-b5 Qh6-f4 b5-b4 Rb1-c1 Qd5-e6 Rc1-c5) +2.55/25
7} Rd6 {(Rd8-d6 Rb1-b3 Nb6-c4 Qf5-d3 Nc4-b6 Qd3-h7 e5xd4 c3xd4 f6-f5 Ra1-b1
Qa5xa4 Qh7xf5 Qa4-c4 Rb3-a3 Qc4-e6 Qf5-a5 Nb6-c8 Ra3-a1 b7-b6 Qa5-a6 f7-f5
h2-h4 h6-h5 Qa6-a3 Qe6-f7 Rb1-c1) -1.00/20 5} 24. c4 {(c3-c4 Nb6-c8 Rb1-b3
Re7-c7 Ra1-b1 Nc8-e7 Qf5-h5 Rd6-d8 Qh5xf7 e5xd4 e3xd4 Qa5-f5 a4-a5 Rd8-c8
c4-c5 a7-a6 Rb1-e1 Ne7-d5 Qf7-e6 Qf5xe6 Re1xe6 Rc8-d8 Bg2-f3 Kb8-a8 Kg1-g2
Rc7-d7 h2-h4 Rd7-f7 Bf3xd5 Rd8xd5) +2.54/26 11} Nxc4 {(Nb6xc4 Qf5-c2 Nc4xe3
f2xe3 e5xd4 e3xd4 Rd6xd4 Qc2-h7 Rd4-d6 Qh7-h8+ Rd6-d8 Qh8xh6 Re7-e6 Rb1-f1
Qa5-d2 Qh6xd2 Rd8xd2 Ra1-d1 Rd2xd1 Rf1xd1 Re6-e2 Rd1-d7) -1.49/18 5} 25.
Qc2 {(Qf5-c2 e5xd4 Qc2xc4 d4xe3 f2xe3 Qa5-d2 Kg1-h1 Qd2xe3 Bg2xc6 Re7-c7
Qc4-e4 Qe3xe4+ Bc6xe4 Rd6-d4 Be4-f3 f6-f5 a4-a5 f5-f4 g3xf4 Rd4xf4 Rb1-b3
Kb8-c8 Kh1-g2 Rf4-f6 Ra1-e1 b7-b6 a5xb6 Rf6xb6 Rb3-d3 Rc7-c2+ Kg2-g3 Rb6-e6
Re1-b1 Re6-b6 Rb1-d1 Rb6-g6+ Kg3-h3 a7-a5) +2.76/25 7} Nxe3 {(Nc4xe3 f2xe3
e5xd4 e3xd4 Rd6xd4 Qc2-h7 Rd4-d8 Qh7xh6 Qa5-e5 Rb1-f1 Qe5-d4+ Kg1-h1 c6-c5
Bg2-f3 Qd4-e5 Ra1-d1 Re7-e8 Qh6-c1 Rd8xd1 Qc1xd1 Qe5-d4 Qd1-b3 Re8-e7)
-1.52/18 5} 26. fxe3 {(f2xe3 e5xd4 e3xd4 Rd6xd4 Bg2xc6 Rd4-d2 Qc2-c4 Qa5-e5
Bc6-g2 Qe5-e3+ Kg1-h1 Qe3-f2 Rb1-g1 Qf2-d4 Qc4xd4 Rd2xd4 Rg1-f1 Rd4-d6
a4-a5 Re7-e2 Rf1-b1 b7-b6 Bg2-f3 Re2-e3 a5xb6 Rd6xb6 Rb1xb6+ a7xb6 Ra1-a8+
Kb8-c7 Ra8-a7+ Kc7-d6 Kh1-g2 Re3-c3 Ra7xf7 Kd6-e6 Rf7-b7 Rc3-c2+ Kg2-h3)
+3.20/25 5} exd4 {(e5xd4 e3xd4 Rd6xd4 Qc2-h7 Rd4-d2 Qh7-h8+ Rd2-d8 Qh8xh6
Re7-e6 Rb1-f1 Qa5-d2 Qh6xd2 Rd8xd2 Ra1-d1 Rd2xd1 Rf1xd1 Kb8-c7 h2-h4 Re6-d6
Rd1-f1 c6-c5 h4-h5 c5-c4) -1.66/18 8} 27. exd4 {(e3xd4 Rd6xd4 Bg2xc6 Rd4-d2
Qc2-c4 Qa5-e5 Bc6-g2 f6-f5 a4-a5 a7-a6 Kg1-h1 f5-f4 g3xf4 Qe5-e2 Qc4xe2
Rd2xe2 Kh1-g1 f7-f5 Ra1-a3 Re2-e1+ Rb1xe1 Re7xe1+ Kg1-f2 Re1-b1 Ra3-d3
Kb8-c7 Bg2-f3 b7-b5 a5xb6/ep+ Rb1xb6 Rd3-c3+ Kc7-d7) +3.40/22 3} Rxd4
{(Rd6xd4 Qc2-h7 Qa5-c5 Kg1-h1 Qc5-d6 Rb1-f1 f6-f5 Rf1xf5 Kb8-c7 Ra1-f1
Rd4-d1 Rf1xd1 Qd6xd1+ Rf5-f1 Qd1xa4 Qh7xh6 Qa4-d4 Qh6-g5 Re7-d7 Bg2-h3
Rd7-d5) -1.77/18 5} 28. Bxc6 {(Bg2xc6 Rd4-d2 Qc2-c4 Qa5-e5 Bc6-g2 f6-f5
a4-a5 Qe5-e3+ Kg1-h1 Qe3-f2 Rb1-g1 Qf2-d4 Qc4-f1 f5-f4 g3xf4 Qd4-d3 Qf1xd3
Rd2xd3 Rg1-b1 Rd3-d4 Rb1-b5 Re7-d7 Ra1-f1 Rd4-d6 Bg2-f3 a7-a6 Rb5-b3)
+3.62/24 9} Rd2 {(Rd4-d2 Qc2-c4 Qa5-e5 Bc6-g2 a7-a6 Rb1-d1 Re7-c7 Qc4-f1
Rc7-c2 Rd1xd2 Rc2xd2 Ra1-b1 Rd2-b2 Rb1xb2 Qe5xb2 Qf1-f4+ Qb2-e5 Bg2-d5
Qe5xf4 g3xf4 Kb8-c7 Kg1-g2 b7-b5) -2.08/18 5} 29. Qc4 {(Qc2-c4 Qa5-e5
Bc6-g2 f6-f5 a4-a5 a7-a6 Kg1-h1 Re7-c7 Qc4-f1 Qe5-e2 Qf1xe2 Rd2xe2 Kh1-g1
Re2-e5 Rb1-b6 Re5-b5 Rb6xh6 Rc7-c2 Bg2-f3 Rc2-c3 Bf3-h5 Rc3-c5 Bh5xf7
Rb5xa5 Ra1xa5 Rc5xa5 Kg1-f2 Ra5-a3) +3.58/23 3} Qe5 {(Qa5-e5 Bc6-g2 a7-a6
Kg1-h1 f6-f5 Qc4-f1 Rd2-e2 Rb1-d1 f5-f4 g3xf4 Qe5-e3 Ra1-b1 Qe3-f2 f4-f5
Kb8-a7 Qf1-g1 Qf2xg1+ Kh1xg1 f7-f6 Rd1-d8 Re7-g7) -2.26/18 5} 30. Bg2
{(Bc6-g2 Qe5-e3+ Kg1-h1 Qe3-f2 Rb1-g1 Qf2-d4 Qc4xd4 Rd2xd4 Rg1-f1 Rd4-d6
a4-a5 Re7-e2 Ra1-b1 b7-b6 a5xb6 a7xb6 Rf1-c1 Re2-e7 Kh1-g1 Re7-c7 Rc1-d1
Rd6xd1+ Rb1xd1 b6-b5 Rd1-d5 Rc7-c1+ Bg2-f1 Rc1-b1 Rd5xb5+ Rb1xb5 Bf1xb5
Kb8-c7 Bb5-c4 Kc7-d7 Bc4xf7 Kd7-e7 Bf7-b3 Ke7-d6) +3.62/25 11} a6 {(a7-a6
Kg1-h1 f6-f5 Qc4-f1 Rd2-e2 Rb1-d1 f5-f4 g3xf4 Qe5-e3 Ra1-b1 Qe3-f2 Qf1xf2
Re2xf2 Rd1-d8+ Kb8-a7 Rd8-d4 Rf2-e2 Bg2-d5 b7-b6 Bd5-c6 Re2-e6 Bc6-f3
Re6-e1+ Rb1xe1 Re7xe1+ Kh1-g2 f7-f5) -2.31/20 4} 31. Qf1 {(Qc4-f1 Re7-d7
Kg1-h1 Qe5-e2 Qf1xe2 Rd2xe2 Kh1-g1 h6-h5 Rb1-b4 a6-a5 Rb4-b5 Re2-e5 Rb5-b3
h5-h4 g3xh4 Re5-h5 Ra1-b1 Kb8-a7 Rb3xb7+ Rd7xb7 Rb1xb7+ Ka7-a6 Bg2-c6
Rh5xh4 Rb7xf7 Ka6-b6 Rf7xf6) +3.85/22 9} Qd4+ {(Qe5-d4+ Kg1-h1 Rd2-f2
Qf1-g1 Re7-d7 Rb1-d1 Rf2-d2 Rd1xd2 Qd4xd2 Ra1-b1 Rd7-e7 Qg1-f1 Kb8-a7
Rb1-d1 Qd2-b4 Qf1xf6 Re7-e1+ Rd1xe1 Qb4xe1+ Qf6-f1 Qe1xf1+ Bg2xf1 a6-a5
Bf1-c4) -2.46/20 10} 32. Kh1 {(Kg1-h1 Qd4-c3 a4-a5 Re7-d7 Qf1-f4+ Kb8-a7
Qf4-e4 Ka7-a8 Rb1-c1 Qc3-e5 Qe4-f3 Qe5-e2 Qf3xe2 Rd2xe2 Rc1-b1 f6-f5 Rb1-b6
Re2-e6 Rb6-b4 Re6-d6 Kh1-g1 Ka8-b8 Ra1-f1 Rd6-d1 Rf1xd1 Rd7xd1+ Kg1-f2
b7-b5 a5xb6/ep Rd1-d2+ Kf2-f1 Rd2-c2 Rb4-b1 Kb8-c8 b6-b7+ Kc8-b8 Rb1-e1)
+4.03/22 5} Rf2 {(Rd2-f2 Qf1-g1 Re7-d7 Rb1-d1 Rf2-d2 Rd1xd2 Qd4xd2 Ra1-b1
Qd2-d3 Rb1-e1 Qd3-d4 Qg1xd4 Rd7xd4 Re1-b1 Rd4-d7 Kh1-g1 Kb8-a7 a4-a5 Rd7-c7
Rb1-f1 Rc7-c5 Rf1xf6 Rc5xa5 Rf6xh6) -2.47/20 4} 33. Qg1 {(Qf1-g1 Qd4-d2
Rb1-d1 Qd2-e3 Rd1-e1 Rf2-e2 Re1xe2 Qe3xg1+ Kh1xg1 Re7xe2 Ra1-b1 Re2-e7
Rb1-b6 h6-h5 a4-a5 f6-f5 Bg2-f3 Kb8-c8 Kg1-g2 Re7-e5 Rb6xb7 Re5xa5 Rb7xf7
Ra5-a2+ Kg2-h3 a6-a5 Bf3-d5) +4.30/22 6} Qe3 {(Qd4-e3 Rb1-f1 Rf2xf1 Ra1xf1
Qe3xg1+ Kh1xg1 Re7-e6 Bg2-d5 Re6-d6 Bd5xf7 Kb8-c7 Rf1-f5 Kc7-d7 a4-a5
Kd7-e7 Bf7-d5 b7-b6 a5xb6 Rd6xb6 Rf5-f1 a6-a5 Rf1-a1 Rb6-b5 Ra1-e1+ Ke7-d6
Bd5-c4) -2.80/21 4} 34. Ra3 {(Ra1-a3 Qe3xa3 Qg1xf2 Qa3-c3 Qf2-f4+ Kb8-a8
h2-h4 Re7-d7 Qf4-f2 Ka8-b8 Kh1-h2 Qc3-e5 Qf2-f3 Qe5-e7 Rb1-b6 Kb8-a7 Rb6xf6
Qe7-e5 Rf6xf7 Rd7xf7 Qf3xf7 Ka7-b6 Qf7-f2+ Qe5-c5 Qf2-f6+ Kb6-a5 Qf6xh6
Ka5xa4 Qh6-f4+ Ka4-a3 Bg2xb7) +5.87/21 4} Qxa3 {(Qe3xa3 Qg1xf2 Qa3-c3
Qf2-f4+ Qc3-e5 Qf4xh6 Re7-d7 Qh6-f8+ Kb8-a7 Qf8-c8 Qe5-e7 h2-h4 Rd7-c7
Rb1xb7+ Rc7xb7 Bg2xb7 Qe7xb7+ Qc8xb7+ Ka7xb7 Kh1-g2 f6-f5 h4-h5 f7-f6 h5-h6
Kb7-b6 h6-h7) -3.89/19 4} 35. Qxf2 {(Qg1xf2 Qa3xa4 Qf2xf6 Qa4-c2 Qf6-d6+
Kb8-a7 Qd6-d4+ Ka7-b8 Qd4-d8+ Kb8-a7 Qd8-b6+ Ka7-b8 Bg2xb7 Qc2xb1+ Qb6xb1
Re7xb7 Qb1-e4 Rb7-b6 Qe4-e8+ Kb8-c7 Qe8xf7+ Kc7-c6 Qf7-f5 Kc6-d6 Qf5-h5
Kd6-d7 Kh1-g2 Rb6-c6 Qh5-e5 Rc6-e6 Qe5-g7+ Kd7-e8 Kg2-f3 a6-a5) +6.29/22
11} Qc3 {(Qa3-c3 Qf2-f4+ Kb8-a7 h2-h4 f6-f5 Qf4xf5 Re7-e1+ Rb1xe1 Qc3xe1+
Kh1-h2 Qe1-e6 Qf5-c5+ Qe6-b6 Qc5-e7 f7-f6 Qe7-f7 a6-a5 Qf7-h7 f6-f5 Qh7xf5
Qb6-a6 Qf5-f4 Qa6-g6 Qf4-d4+ Qg6-b6 Qd4-e5) -4.10/20 4} 36. Qf4+ {(Qf2-f4+
Kb8-a8 h2-h4 Re7-d7 Qf4-f2 Ka8-b8 Kh1-h2 Rd7-c7 Qf2-b6 Qc3-c2 Rb1-b2 Qc2-c5
Qb6xf6 Kb8-a7 Qf6-f3 Qc5-e7 Qf3-f2+ Ka7-b8 Qf2-f4 Kb8-a7 Qf4-d4+ Ka7-b8
Rb2-b6 f7-f6 Qd4-f4 Qe7-e5 Qf4-f3) +6.50/21 7} Qe5 {(Qc3-e5 Qf4-f3 Kb8-c8
Qf3-g4+ Qe5-e6 Qg4-g8+ Re7-e8 Qg8-g7 Kc8-d8 Qg7xh6 b7-b6 Qh6-d2+ Qe6-d7
Qd2-f2 Re8-e6 Rb1xb6 Qd7-d1+ Bg2-f1 Re6xb6 Qf2xb6+ Kd8-e7 Qb6-b7+ Ke7-e8
Qb7xa6 Qd1-d5+ Bf1-g2 Qd5-d1+ Qa6-f1 Qd1xf1+ Bg2xf1 Ke8-e7) -4.28/20 5} 37.
Qf3 {(Qf4-f3 Kb8-c8 Qf3-g4+ Qe5-e6 Qg4-g8+ Re7-e8 Qg8-h7 f6-f5 Qh7-g7
Qe6-e1+ Rb1xe1 Re8xe1+ Bg2-f1 Re1xf1+ Kh1-g2 Rf1-c1 Qg7xh6 Rc1-c2+ Kg2-h3
Kc8-d7 Qh6-f6 Rc2-c5 Qf6xf7+ Kd7-c6 Qf7-e6+ Kc6-c7 Qe6-e7+ Kc7-c6 Qe7-f6+
Kc6-c7 Kh3-g2 Rc5-c2+ Kg2-f3) +6.69/23 5} Kc8 {(Kb8-c8 Qf3-g4+ Qe5-e6
Qg4-g8+ Re7-e8 Qg8-g7 Kc8-d8 Qg7xh6 Qe6-f5 Rb1-d1+ Kd8-e7 Qh6-h4 Qf5-a5
Bg2xb7 Ke7-f8 Qh4xf6 Re8-e1+ Rd1xe1 Qa5xe1+ Kh1-g2 Qe1-e2+ Kg2-h3 Qe2-h5+
Qf6-h4 Qh5-f5+ g3-g4 Qf5-d3+ Qh4-g3 Qd3-e2) -4.49/19 4} 38. Qg4+ {(Qf3-g4+
Kc8-b8 Qg4-g8+ Kb8-a7 Qg8-c8 Qe5-e1+ Rb1xe1 Re7xe1+ Bg2-f1 Re1xf1+ Kh1-g2
Rf1-d1 Qc8-c5+ Ka7-b8 Qc5-f8+ Kb8-c7 Qf8xh6 b7-b5 Qh6xf6 Rd1-d6 Qf6xf7+
Kc7-b6 Qf7-f4 Rd6-d5 Qf4-b8+ Kb6-a5 a4xb5 Rd5xb5 Qb8-c7+ Ka5-a4 Qc7-c3
Rb5-b4 Qc3-c6+ Ka4-a5 Qc6-c5+ Rb4-b5 Qc5-d4) +6.72/19 1} Kb8 {(Kc8-b8
Qg4-g8+ Kb8-a7 Qg8-c8 Qe5-e1+ Rb1xe1 Re7xe1+ Bg2-f1 Re1xf1+ Kh1-g2 Rf1-e1
Qc8-c5+ Ka7-b8 Qc5-f8+ Kb8-a7 Qf8xf7 Re1-e4 Qf7xf6 Re4xa4 Qf6xh6 Ra4-a2+
Kg2-h3 a6-a5 Qh6-e6 Ra2-a1 Qe6-e5 Ra1-a2) -5.05/21 4} 39. Qg8+ {(Qg4-g8+
Re7-e8 Qg8xf7 Qe5-e1+ Rb1xe1 Re8xe1+ Bg2-f1 Re1xf1+ Kh1-g2 Rf1-c1 Qf7xf6
Rc1-c2+ Kg2-h3 Rc2-c6 Qf6-d8+ Kb8-a7 a4-a5 Rc6-e6 Kh3-g4 Re6-e2 Qd8-b6+
Ka7-a8 h2-h4 Re2-a2 Qb6xh6 Ra2-a4+ Kg4-f5) +6.83/20 4} Ka7 {(Kb8-a7 Qg8-c8
Qe5-e1+ Rb1xe1 Re7xe1+ Bg2-f1 Re1xf1+ Kh1-g2 Rf1-d1 Qc8-c5+ Ka7-b8 Qc5-f8+
Kb8-c7 Qf8xf7+ Rd1-d7 Qf7xf6 Rd7-d2+ Kg2-h3 Rd2-d6 Qf6-e7+ Kc7-c6 Qe7-e8+
Kc6-c7 Qe8-f7+ Kc7-c6 Qf7-c4+ Kc6-d7 a4-a5 Kd7-d8 Qc4-b3 Kd8-c7 Qb3-f7+
Kc7-b8 Qf7-c4 Rd6-c6 Qc4-f4+ Kb8-c8 Qf4-f8+ Kc8-c7) -5.46/23 4} 40. Qc8
{(Qg8-c8 Qe5-e1+ Rb1xe1 Re7xe1+ Bg2-f1 Re1xf1+ Kh1-g2 Rf1-d1 Qc8-c5+ Ka7-b8
Qc5-f8+ Kb8-c7 Qf8xh6 f6-f5 Qh6-f4+ Kc7-d8 Qf4-b8+ Kd8-e7 Qb8xb7+ Rd1-d7
Qb7xa6 Rd7-d6 Qa6-e2+ Rd6-e6 Qe2-b2 Re6-h6 Qb2-e5+ Ke7-f8 Qe5-c5+ Kf8-g7
Qc5xf5 Rh6-b6 Qf5-e5+ Kg7-g8 Qe5-g5+ Rb6-g6 Qg5-f5 Rg6-c6) +7.18/20 3} Qe1+
{(Qe5-e1+ Rb1xe1 Re7xe1+ Bg2-f1 Re1xf1+ Kh1-g2 Rf1-b1 Qc8-c5+ Ka7-b8
Qc5-f8+ Kb8-a7 Qf8xh6 Rb1-b2+ Kg2-h3 Rb2-b6 Qh6-e3 a6-a5 Kh3-g2 Ka7-a6
Qe3-d4 f6-f5 Qd4-d3+ Ka6-a7 Qd3xf5 Rb6-b2+ Kg2-h3 Ka7-a6 Qf5xf7 Rb2-b4
Qf7-g6+ Ka6-a7 Qg6-e8 Ka7-a6 g3-g4) -5.97/22 4} 41. Rxe1 {(Rb1xe1 Re7xe1+
Bg2-f1 Re1xf1+ Kh1-g2 Rf1-e1 Qc8-c5+ Ka7-b8 Qc5-f8+ Kb8-a7 Qf8xh6 f6-f5
Qh6-d2 Re1-e4 Qd2-f2+ Ka7-b8 Qf2xf5 Re4-e2+ Kg2-h3 Re2-e7 Qf5-f6 Re7-c7
Qf6-d8+ Rc7-c8 Qd8-d6+ Kb8-a8 Qd6-f6 Ka8-a7 Qf6-f2+ Ka7-b8 Qf2xf7 Kb8-a7
Qf7-f6 Rc8-c7 Kh3-g2 a6-a5 Qf6-f4) +7.30/21 3} Rxe1+ {(Re7xe1+ Bg2-f1
Re1xf1+ Kh1-g2 Rf1-d1 Qc8-c5+ Ka7-b8 Qc5-f8+ Kb8-c7 Qf8xh6 Rd1-d6 Qh6-g7
Rd6-d2+ Kg2-h3 Rd2-d6 Qg7xf7+ Kc7-c6 Qf7-c4+ Kc6-d7 Qc4-e4 b7-b6 Qe4-b7+
Kd7-e6 Qb7xa6 f6-f5 Qa6-c4+ Ke6-f6 g3-g4 Kf6-g5 g4xf5 Kg5xf5) -6.06/20 4}
42. Bf1 {(Bg2-f1) +7.30/1} Rxf1+ {(Re1xf1+ Kh1-g2 Rf1-d1 Qc8-c5+ Ka7-b8
Qc5-f8+ Kb8-c7 Qf8xh6 Rd1-d6 Qh6-g7 Rd6-d2+ Kg2-h3 Rd2-d6 Qg7xf7+ Kc7-c6
Qf7-c4+ Kc6-d7 Qc4-e4 b7-b5 a4xb5 a6xb5 Qe4-b7+ Kd7-e6 Qb7xb5 f6-f5 Kh3-h4
Ke6-f6 Qb5-c5 Rd6-e6 Kh4-h5 Re6-e5) -6.14/21 4} 43. Kg2 {(Kh1-g2) +7.30/1}
Re1 {(Rf1-e1 Qc8-c5+ b7-b6 Qc5-c7+ Ka7-a8 Qc7xf7 Re1-c1 Qf7xf6 Ka8-b7
Qf6xh6 Rc1-c2+ Kg2-h3 b6-b5 a4xb5 a6xb5 Qh6-h7+ Rc2-c7 Qh7-e4+ Kb7-b6
Qe4-d4+ Rc7-c5 g3-g4 Kb6-c6 Kh3-g3 Rc5-d5 Qd4-e4 Kc6-c5 Qe4-e3+ Kc5-c4)
-6.42/21 5} 44. Qc5+ {(Qc8-c5+ b7-b6 Qc5-c7+ Ka7-a8 Qc7xf7 Re1-c1 Qf7xf6
Ka8-b7 Qf6-g7+ Rc1-c7 Qg7xh6 Rc7-c2+ Kg2-h3 Rc2-c7 g3-g4 b6-b5 a4-a5
Rc7-c3+ Kh3-h4 Rc3-c6 Qh6-f4 Kb7-c8 Qf4-f5+ Kc8-c7 g4-g5 b5-b4 g5-g6 Kc7-d6
Qf5-f6+ Kd6-d5) +7.80/21 8} b6 {(b7-b6 Qc5-f8 a6-a5 Qf8xf7+ Ka7-a6 Qf7-f8
Ka6-b7 Qf8xf6 Re1-e2+ Kg2-g1 Re2-e1+ Kg1-f2 Re1-c1 Qf6xh6 Rc1-c2+ Kf2-f3
Rc2-c3+ Kf3-g2 Rc3-c2+ Kg2-h3 Rc2-c8 Qh6-f4 Kb7-a6 g3-g4) -6.47/21 4} 45.
Qc7+ {(Qc5-c7+ Ka7-a8 Qc7xf7 Re1-c1 Qf7xf6 Ka8-b7 Qf6xh6 Rc1-c2+ Kg2-h3
b6-b5 a4-a5 Rc2-c6 Qh6-g7+ Rc6-c7 Qg7-e5 Rc7-h7+ Kh3-g2 Rh7-c7 Qe5-e4+
Kb7-b8 h2-h4 b5-b4 Qe4xb4+ Kb8-c8 g3-g4 Rc7-c6 h4-h5 Kc8-d7 g4-g5 Rc6-c2+
Kg2-f3 Rc2-c6 h5-h6 Rc6-c2 g5-g6 Rc2-c7) +8.17/20 4} Ka8 {(Ka7-a8 Qc7xf7
Re1-c1 Qf7xf6 Ka8-b7 Qf6xh6 Rc1-c2+ Kg2-h3 Rc2-c7 g3-g4 Rc7-c3+ Kh3-h4
b6-b5 a4xb5 a6xb5 Qh6-e6 Rc3-c6 Qe6-f7+ Kb7-b6 g4-g5 b5-b4 g5-g6 Rc6-c2
Qf7-f4 b4-b3 g6-g7) -7.01/21 3} 46. Qc8+ {(Qc7-c8+ Ka8-a7 Qc8-c7+ Ka7-a8
Qc7xf7 Re1-c1 Qf7xf6 Ka8-b7 Qf6xh6 Rc1-c2+ Kg2-h3 Rc2-c3 Qh6-h7+ Kb7-c6
Qh7-h8 Rc3-c5 Qh8-f6+ Kc6-c7 g3-g4 Rc5-c6 Qf6-f7+ Kc7-b8 g4-g5 Rc6-c3+
Kh3-h4 Rc3-c7 Qf7-f4 b6-b5 g5-g6 Kb8-b7 Qf4-e4+ Kb7-b6) +10.02/23 7} Ka7
{(Ka8-a7 Qc8-d7+ Ka7-b8 Qd7xf7 Kb8-c8 Qf7xf6 Re1-e2+ Kg2-f1 Re2xh2 Kf1-g1
Rh2-e2 Qf6xb6 Kc8-d7 Qb6-b7+ Kd7-e8 Qb7xa6 Re2-e5 Qa6xh6 Ke8-d7 Kg1-f2
Re5-f5+ Kf2-e3 Rf5-e5+ Ke3-d4 Re5-e6 Qh6-h7+ Kd7-c6 Qh7-f5 Re6-d6+ Kd4-c4)
-6.96/21 3} 47. Qc7+ {(Qc8-c7+ Ka7-a8 Qc7xf7 a6-a5 Qf7xf6 Ka8-a7 Qf6xh6
Re1-e2+ Kg2-h3 Re2-e7 g3-g4 Re7-d7 g4-g5 Rd7-d3+ Kh3-g4 Rd3-d4+ Kg4-f5
Rd4-d5+ Kf5-e6 Rd5-d8 Qh6-h7+ Ka7-b8 g5-g6 Rd8-e8+ Ke6-f5 Re8-c8 g6-g7)
+10.19/21 2} Ka8 {(Ka7-a8) -0.10/127 0} 48. Qxf7 {(Qc7xf7 Re1-c1 Qf7xf6
Ka8-b7 Qf6xh6 Rc1-c2+ Kg2-h3 Rc2-c7 g3-g4 Rc7-c8 Qh6-h7+ Kb7-b8 Qh7-g6
Kb8-b7 Qg6-h6 Rc8-b8 Qh6-g7+ Kb7-a8 g4-g5 b6-b5 Qg7-f6 Ka8-a7 Qf6-d4+
Ka7-b7 g5-g6 Kb7-c6 Qd4-f6+ Kc6-d5 g6-g7 Kd5-c4 Qf6-f7+ Kc4-d3) +11.92/23
12} Rc1 {(Re1-c1 Qf7xf6 Rc1-c2+ Kg2-h3 Ka8-b7 Qf6xh6 Rc2-c4 Qh6-g7+ Kb7-c6
Qg7-f6+ Kc6-c5 Qf6-e7+ Kc5-c6 Qe7-e6+ Kc6-c5 Qe6-c8+ Kc5-d4 Qc8xa6 Rc4-b4
Qa6-e2 Kd4-c3 Qe2-e3+ Kc3-c4 Qe3-e6+ Kc4-c3 g3-g4 Rb4xa4 Qe6xb6) -7.28/21
5} 49. Qxf6 {(Qf7xf6 Ka8-b7 Qf6xh6 Rc1-c2+ Kg2-h3 a6-a5 Qh6-h7+ Rc2-c7
Qh7-e4+ Kb7-a7 g3-g4 Rc7-c3+ Kh3-h4 Rc3-c8 Qe4-h7+ Ka7-a8 g4-g5 Rc8-c4+
Kh4-h5 Rc4-c8 g5-g6 Rc8-c2 Qh7-g8+ Ka8-a7 Qg8-f7+ Ka7-a6 Qf7-f1+ b6-b5
Qf1-f6+ Ka6-b7 Qf6-f3+ Rc2-c6 g6-g7 b5xa4 Qf3-f7+ Kb7-b6 g7-g8Q) +15.89/23
12} Kb7 {(Ka8-b7 Qf6xh6 Rc1-c2+ Kg2-h3 Rc2-c4 Qh6-g7+ Rc4-c7 Qg7-f6 Rc7-c6
Qf6-e7+ Kb7-c8 Qe7-e4 Kc8-d7 g3-g4 Rc6-h6+ Kh3-g2 Rh6-d6 g4-g5 Rd6-e6
Qe4-b7+ Kd7-e8 Qb7xa6 Re6-d6 Qa6-c4 Rd6-d2+ Kg2-h3 Ke8-e7) -7.43/21 4} 50.
Qxh6 {(Qf6xh6 Rc1-c2+ Kg2-h3 Rc2-c4 g3-g4 Rc4-c3+ Kh3-h4 Rc3-c4 Qh6-e6
b6-b5 a4-a5 Rc4-c6 Qe6-e4 Kb7-c7 Qe4-e7+ Kc7-b8 g4-g5 b5-b4 Qe7-f8+ Kb8-b7
g5-g6 Rc6-c4+ Kh4-h5 Kb7-c6 Qf8-f6+ Kc6-b5 g6-g7 Rc4-c5+ Kh5-h6 Kb5xa5
g7-g8Q) +16.04/19 4} Rc2+ {(Rc1-c2+ Kg2-h3 Rc2-c4 Qh6-g7+ Kb7-c6 Qg7-f6+
Kc6-d5 Qf6-d8+ Kd5-c5 Qd8-c8+ Kc5-d4 Qc8xa6 Rc4-b4 Qa6-c8 Rb4-b3 Kh3-g4
Rb3-b4 Qc8-d7+ Kd4-c4 Kg4-g5 Kc4-b3 h2-h4 Rb4xa4 Qd7-e6+ Kb3-c3 Qe6-e3+
Kc3-c4) -7.63/21 5} 51. Kh3 {(Kg2-h3 a6-a5 Qh6-h7+ Rc2-c7 Qh7-e4+ Kb7-a7
g3-g4 Rc7-c3+ Kh3-h4 Rc3-c8 Qe4-h7+ Ka7-a8 g4-g5 Rc8-c4+ Kh4-h5 Rc4-c8
g5-g6 Rc8-c5+ Kh5-h6 Rc5-c2 Qh7-g8+ Ka8-a7 Qg8-g7+ Ka7-a8 Qg7-e5 Ka8-b7
Qe5-d5+ Kb7-c7 g6-g7 Rc2-c6+ Kh6-h7 Rc6-d6 Qd5-c4+ Kc7-d7) +16.94/22 5} Rc7
{(Rc2-c7 g3-g4 Rc7-c3+ Kh3-h4 Rc3-c4 Qh6-f6 b6-b5 a4xb5 a6xb5 Kh4-h3 b5-b4
Qf6-f7+ Rc4-c7 Qf7-f4 b4-b3 Qf4-f3+ Kb7-c8 Qf3xb3 Rc7-c5 Qb3-e3 Rc5-c6
g4-g5 Kc8-d7 Qe3-e4 Rc6-e6) -7.90/22 13} 52. g4 {(g3-g4 Rc7-c3+ Kh3-h4
Rc3-c6 g4-g5 Rc6-c4+ Kh4-h5 Rc4-c5 Qh6-e6 Kb7-a7 Qe6-f7+ Ka7-b8 Kh5-h4
Rc5-a5 Qf7-d7 Ra5-c5 Qd7-d8+ Kb8-b7 Qd8-e7+ Kb7-c6 Qe7-e4+ Kc6-c7 g5-g6
a6-a5 Qe4-e7+ Kc7-c6 Qe7-e6+ Kc6-c7) +20.90/19 4} Rc3+ {(Rc7-c3+ Kh3-h4
Rc3-c4 Qh6-d6 Rc4-c6 Qd6-d7+ Rc6-c7 Qd7-d3 Kb7-c6 Qd3xa6 Rc7-d7 Qa6-b5+
Kc6-c7 g4-g5 Rd7-d6 Kh4-g3 Rd6-c6 h2-h4 Rc6-c5 Qb5-e8) -8.16/16 4} 53. Kh4
{(Kh3-h4 Rc3-c4 Qh6-e6 Rc4-c8 g4-g5 Rc8-h8+ Kh4-g4 Rh8-d8 Qe6-f7+ Kb7-a8
g5-g6 Rd8-d4+ Qf7-f4 Rd4-d8 Qf4-f6 Rd8-d2 Qf6-f3+ Ka8-a7 Qf3-f7+ Ka7-a8
g6-g7 Rd2-d4+ Kg4-g5 Rd4-d8 g7-g8Q Rd8xg8+ Qf7xg8+ Ka8-a7) +132.57/21 6}
Rc4 {(Rc3-c4 Qh6-d6 Kb7-a7 Qd6-e6 Rc4-c2 Qe6-e7+ Ka7-b8 Qe7-e5+ Kb8-a7
g4-g5 Rc2-c4+ Kh4-g3 Rc4-c5 Qe5-e7+ Ka7-b8 g5-g6 Rc5-c3+ Kg3-g4 Rc3-c4+
Kg4-g5 Rc4-c5+ Kg5-h6 Kb8-c8) -8.50/18 6} 54. Qe6 {(Qh6-e6 b6-b5 a4-a5
Rc4-c6 Qe6-e4 Kb7-c7 Qe4-e7+ Kc7-c8 g4-g5 Rc6-c4+ Kh4-h5 Rc4-c2 Qe7-e8+
Kc8-c7 Qe8-e5+ Kc7-b7 g5-g6 Rc2-c8 g6-g7 Kb7-a7 Qe5-e6 Rc8-b8 g7-g8R Rb8xg8
Qe6-b6+ Ka7-a8 Qb6xa6+ Ka8-b8 Qa6xb5+) +132.67/22 2} b5 {(b6-b5 Qe6-d5+
Kb7-b6 a4xb5 a6xb5 Qd5-d6+ Rc4-c6 Qd6-d4+ Kb6-a5 Kh4-h5 Rc6-c2 Qd4-d6 b5-b4
g4-g5 Ka5-a4 g5-g6 Ka4-a3 h2-h4 Rc2-g2 Kh5-h6 Rg2-g4 h4-h5 Ka3-b2 Qd6-d2+
Kb2-a3 Qd2-d1 Rg4-g3 g6-g7) -9.70/21 3} 55. a5 {(a4-a5 Rc4-c6 Qe6-e4 Kb7-c7
Qe4-e7+ Kc7-c8 g4-g5 Rc6-c4+ Kh4-h5 Rc4-c3 Qe7-f8+ Kc8-b7 Qf8-g7+ Rc3-c7
Qg7xc7+ Kb7xc7 g5-g6 Kc7-d6 g6-g7 Kd6-c6 g7-g8Q Kc6-b7 Qg8-g6 Kb7-a7
Qg6-b6+ Ka7-a8 Qb6xa6+) +132.68/28 3} Rc6 {(Rc4-c6 Qe6-e4 Kb7-c7 Qe4-e7+
Kc7-c8 g4-g5 Rc6-c4+ Kh4-h5 Rc4-c7 Qe7-e6+ Kc8-b7 g5-g6 Rc7-c5+ Kh5-h6
Rc5-c6 Qe6-e4 Kb7-c7 Qe4-e7+ Kc7-b8 Kh6-h5 Rc6-c8 Qe7-d6+ Kb8-a8 Qd6xa6+
Ka8-b8 Qa6xc8+ Kb8xc8 g6-g7 Kc8-d7 g7-g8Q b5-b4) -12.61/22 4} 56. Qe4
{(Qe6-e4 Kb7-c7 Qe4-e7+ Kc7-c8 g4-g5 Rc6-c4+ Kh4-h5 Rc4-c3 Qe7-e6+ Kc8-b7
Qe6-b6+ Kb7-c8 Qb6xa6+ Kc8-d7 Qa6xb5+ Kd7-e6 Qb5-e2+ Ke6-f7 g5-g6+ Kf7-f8
g6-g7+ Kf8-f7 g7-g8Q+ Kf7xg8) +132.69/27 1} Kc7 {(Kb7-c7 Qe4-e7+ Kc7-c8
g4-g5 Rc6-c7 Qe7-e6+ Kc8-b7 Qe6-b6+ Kb7-c8 Qb6xa6+ Kc8-b8 Qa6xb5+ Kb8-a8
g5-g6 Rc7-b7 Qb5xb7+ Ka8xb7 g6-g7 Kb7-a6 g7-g8Q Ka6xa5 Qg8-d5+ Ka5-b4
Kh4-g4 Kb4-c3 h2-h4) -13.38/22 3} 57. Qe7+ {(Qe4-e7+ Kc7-c8 g4-g5 Rc6-c4+
Kh4-h5 Rc4-c3 g5-g6 Rc3-h3+ Kh5-g5 Rh3-d3 g6-g7 Rd3-d5+ Kg5-f6 Rd5-d8
Qe7xd8+ Kc8xd8 g7-g8Q+ Kd8-c7 Qg8-a8 b5-b4 Qa8xa6) +132.70/26 3} Kc8
{(Kc7-c8 g4-g5 Rc6-c4+ Kh4-h5 Rc4-c7 Qe7-e6+ Kc8-b8 Qe6xa6 Rc7-h7+ Kh5-g4
b5-b4 g5-g6 Rh7-d7 Qa6-b6+ Rd7-b7 Qb6xb7+ Kb8xb7 g6-g7 Kb7-a6 h2-h4 Ka6-b5
g7-g8Q Kb5-c5 h4-h5 b4-b3 Qg8xb3 Kc5-d4 a5-a6 Kd4-e4 a6-a7) -14.64/21 3}
58. g5 {(g4-g5 Rc6-c4+ Kh4-h5 Rc4-c3 g5-g6 Rc3-d3 g6-g7 Rd3-d5+ Kh5-h6
Rd5-d8 Qe7xd8+ Kc8xd8 g7-g8Q+ Kd8-c7 Qg8-a8 Kc7-d7 Qa8xa6) +132.72/24 1}
Rc4+ {(Rc6-c7 Qe7-e6+ Kc8-b7 Qe6-b6+ Kb7-c8 Qb6xa6+ Kc8-b8 Qa6xb5+ Rc7-b7
Qb5-e5+ Kb8-a7 g5-g6 Ka7-a6 g6-g7 Rb7xg7 Qe5xg7 Ka6xa5 Kh4-g5 Ka5-b4
Qg7-d4+ Kb4-b3 h2-h4 Kb3-a2 h4-h5 Ka2-b3 h5-h6 Kb3-c2) -15.21/21 3 Black
resigns} 1-0
[/pgn]