On 19-Feb-09, at 4:49 PM, Mikael More wrote:
Cool!
Useful!
What is the approx speed on your machine btw?
On my 2GHz Mac Book Pro:
For MD5: 0.06 seconds per MB. For SHA-1: 0.13 seconds per MB.
That's still about 3 times slower than the "md5" utility on my machine, but still not too bad for bit-bashing code entirely written in Scheme.
Marc
Afficher les réponses par date
On 19-Feb-09, at 4:57 PM, Marc Feeley wrote:
On my 2GHz Mac Book Pro:
For MD5: 0.06 seconds per MB. For SHA-1: 0.13 seconds per MB.
That's still about 3 times slower than the "md5" utility on my machine, but still not too bad for bit-bashing code entirely written in Scheme.
By the way this slowdown is due to the 16-bit algorithms which are used to perform the computations without overflowing the fixnums. The C version probably does 32-bit operations, which is at least a factor of 2 faster, and probably more when shifts are involved.
Marc
And this is the last line of digest#digest-update-sha-256 when digest.scm is expanded to its full 89MB glory by the compiler ...
NEWH- H))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ))
Reminds me of the joke about the guy who threatened to reveal the source code for the US Star Wars missile defense system ...
Brad
Brad you forgot all the spaces!
Seriously though the size (of the expanded source) comes down by a factor of 5 when inlining is disabled, with no loss in speed. There is just a slight saving in code space. Go figure! The change is now in the repository.
Marc
On 19-Feb-09, at 9:36 PM, Bradley Lucier wrote:
And this is the last line of digest#digest-update-sha-256 when digest.scm is expanded to its full 89MB glory by the compiler ...
NEWH
H ))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))
On Feb 19, 2009, at 11:49 PM, Marc Feeley wrote:
Brad you forgot all the spaces!
Well, actually, I didn't, my guess is that Mac Mail is screwing up the display somehow (at least, my version of Mac Mail isn't showing all the spaces); but check the (message) source, Marc.
Brad
On 19-Feb-09, at 11:49 PM, Marc Feeley wrote:
Seriously though the size (of the expanded source) comes down by a factor of 5 when inlining is disabled, with no loss in speed. There is just a slight saving in code space. Go figure! The change is now in the repository.
The pretty-printing algorithm is also to blame. I have now implemented an algorithm which slides a window left and right as the nesting increases/decreases.
In the case of digest.scm this brings down the size of the pretty- printed expansion by a factor of 7.
The patch has been committed to the repository.
Below are a few examples.
Marc
% gsi -e "(define (f n) (if (> n 0) (list 'aaaaa 'bbbbb (f (- n 1)) 'ccccc 'ddddd) 'end))(pp (f 10))" (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< end ccccc ddddd) ccccc ddddd) ccccc ddddd) ;;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ccccc ddddd) ccccc ddddd) ccccc ddddd) ccccc ddddd) ccccc ddddd) ccccc ddddd) ccccc ddddd)
% gsi -e "(define (f n) (if (> n 0) (list 'aaaaa 'bbbbb (f (- n 1))) 'end))(pp (f 20))" (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb ;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb (aaaaa bbbbb
end))))))))))))))))))))
Best hide that from the usenet lisp group(s), where a common message posted is "Lisp sucks because the parentheses are spammy" to which somebody replies "any decent editor will colour-highlight the parentheses!" ;)
That's a lovely speedup, though.
Oisín
2009/2/20 Bradley Lucier lucier@math.purdue.edu:
And this is the last line of digest#digest-update-sha-256 when digest.scm is expanded to its full 89MB glory by the compiler ...
NEWH- H))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) )))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))) ))
Reminds me of the joke about the guy who threatened to reveal the source code for the US Star Wars missile defense system ...
Brad _______________________________________________ Gambit-list mailing list Gambit-list@iro.umontreal.ca https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
On Thu, 2009-02-19 at 17:07 -0500, Marc Feeley wrote:
On 19-Feb-09, at 4:57 PM, Marc Feeley wrote:
On my 2GHz Mac Book Pro:
For MD5: 0.06 seconds per MB. For SHA-1: 0.13 seconds per MB.
That's still about 3 times slower than the "md5" utility on my machine, but still not too bad for bit-bashing code entirely written in Scheme.
By the way this slowdown is due to the 16-bit algorithms which are used to perform the computations without overflowing the fixnums. The C version probably does 32-bit operations, which is at least a factor of 2 faster, and probably more when shifts are involved.
And on my 64-bit Core 2 duo running ubuntu it's quite a bit worse:
(time (digest#digest-file "Fedora-12-ppc-DVD.iso" 'sha-1))
(time (digest#digest-file "Fedora-12-ppc-DVD.iso" 'sha-1)) 245908 ms real time 244740 ms cpu time (241710 user, 3030 system) no collections 12312 bytes allocated 8 minor faults no major faults "548e1b544c400d39be4fbd080080424e2b5c7674" heine:~/Desktop/Fedora-12-ppc-DVD> time sha1sum Fedora-12-ppc-DVD.iso 548e1b544c400d39be4fbd080080424e2b5c7674 Fedora-12-ppc-DVD.iso 18.390u 1.670s 2:03.13 16.2% 0+0k 1160296+0io 0pf+0w
Brad
On Wed, 2009-11-18 at 13:05 -0500, Bradley Lucier wrote:
On Thu, 2009-02-19 at 17:07 -0500, Marc Feeley wrote:
On 19-Feb-09, at 4:57 PM, Marc Feeley wrote:
On my 2GHz Mac Book Pro:
For MD5: 0.06 seconds per MB. For SHA-1: 0.13 seconds per MB.
That's still about 3 times slower than the "md5" utility on my machine, but still not too bad for bit-bashing code entirely written in Scheme.
By the way this slowdown is due to the 16-bit algorithms which are used to perform the computations without overflowing the fixnums. The C version probably does 32-bit operations, which is at least a factor of 2 faster, and probably more when shifts are involved.
And on my 64-bit Core 2 duo running ubuntu it's quite a bit worse:
(time (digest#digest-file "Fedora-12-ppc-DVD.iso" 'sha-1))
(time (digest#digest-file "Fedora-12-ppc-DVD.iso" 'sha-1)) 245908 ms real time 244740 ms cpu time (241710 user, 3030 system) no collections 12312 bytes allocated 8 minor faults no major faults "548e1b544c400d39be4fbd080080424e2b5c7674" heine:~/Desktop/Fedora-12-ppc-DVD> time sha1sum Fedora-12-ppc-DVD.iso 548e1b544c400d39be4fbd080080424e2b5c7674 Fedora-12-ppc-DVD.iso 18.390u 1.670s 2:03.13 16.2% 0+0k 1160296+0io 0pf+0w
and for sha-256 it's much worse:
(time (digest#digest-file "Fedora-12-ppc-DVD.iso" 'sha-256))
(time (digest#digest-file "Fedora-12-ppc-DVD.iso" 'sha-256)) 860775 ms real time 860580 ms cpu time (853140 user, 7440 system) no collections 12600 bytes allocated 36 minor faults no major faults "800ef4f121e178dcc9c8dc128825021949abe0d6d029f36cd47e39a4033c3aaa"
*** EOF again to exit heine:~/Desktop/Fedora-12-ppc-DVD> time sha256sum Fedora-12-ppc-DVD.iso 800ef4f121e178dcc9c8dc128825021949abe0d6d029f36cd47e39a4033c3aaa Fedora-12-ppc-DVD.iso 28.850u 1.190s 0:30.04 100.0% 0+0k 0+0io 0pf+0w
Date: Wed, 18 Nov 2009 13:05:41 -0500 From: Bradley Lucier lucier@math.purdue.edu
By the way this slowdown is due to the 16-bit algorithms which are used to perform the computations without overflowing the fixnums. The C version probably does 32-bit operations, which is at least a factor of 2 faster, and probably more when shifts are involved.
Common Lisp systems are capable of open-coding modular arithmetic up to the machine word width; all you need to do is insert the occasional (LOGAND #xFFFF...) into your usual generic arithmetic expressions. It's unfortunate that no Scheme system -- to my knowledge -- does this. Instead the extent of any abstraction for `fast integers' provided by Scheme systems is fixnums -- to the ridiculous point that they have been formalized in the R6RS.
On Wed, 2009-11-18 at 14:02 -0500, Taylor R Campbell wrote:
Date: Wed, 18 Nov 2009 13:05:41 -0500 From: Bradley Lucier lucier@math.purdue.edu
By the way this slowdown is due to the 16-bit algorithms which are used to perform the computations without overflowing the fixnums. The C version probably does 32-bit operations, which is at least a factor of 2 faster, and probably more when shifts are involved.
Common Lisp systems are capable of open-coding modular arithmetic up to the machine word width; all you need to do is insert the occasional (LOGAND #xFFFF...) into your usual generic arithmetic expressions. It's unfortunate that no Scheme system -- to my knowledge -- does this. Instead the extent of any abstraction for `fast integers' provided by Scheme systems is fixnums -- to the ridiculous point that they have been formalized in the R6RS.
Even this wouldn't be so bad except that the gambit compiler puts only the first five WORD variables in registers (even locally-declared variables are put on the stack after the first five) so you get code like I include at the bottom from digest-update-sha-256. It would help to have a 32-bit version for use on 64-bit machines.
Brad
From digest.i (using -cc-options "-save-temps"):
___L6_digest_23_digest_2d_update_2d_sha_2d_256: ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-9)]=(((long)((___fp[-(-9)])+(___fp[-(-3)])))); ___r1=(((long)((___r1)+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-9)])))); ___fp[-(-9)]=((((___fp[-(-9)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___r1=(((long)((___r1)+(___fp[-(-9)])))); ___r1=(((long)(((((long)(65535L))<<2))&(___r1)))); ___fp[-(-15)]=(((long)((___fp[-(-15)])+(___fp[-(-5)])))); ___fp[-(-9)]=(((long)((___fp[-(-8)])+(___fp[-(-4)])))); ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)])))); ___fp[-(-15)]=((((___fp[-(-15)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-15)]=(((long)((___fp[-(-9)])+(___fp[-(-15)])))); ___fp[-(-15)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)])))); ___fp[-(-17)]=(((long)((___fp[-(-7)])+(___fp[-(-17)])))); ___fp[-(-16)]=(((long)((___r1)+(___fp[-(-16)])))); ___fp[-(-9)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-17)])))); ___fp[-(-17)]=((((___fp[-(-17)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-17)]=(((long)((___fp[-(-16)])+(___fp[-(-17)])))); ___fp[-(-17)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-17)])))); ___fp[-(-16)]=(((long)((___fp[-(-7)])+(___fp[-(-8)])))); ___r1=(((long)((___r1)+(___fp[-(-15)])))); ___fp[-(-15)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)])))); ___fp[-(-16)]=((((___fp[-(-16)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___r1=(((long)((___r1)+(___fp[-(-16)])))); ___r1=(((long)(((((long)(65535L))<<2))&(___r1)))); ___fp[-(-16)]=((((___fp[-(-15)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-8)]=(((long)((___r1)&((((long)(3L))<<2))))); ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-16)]=(((long)((___fp[-(-8)])|(___fp[-(-16)])))); ___fp[-(-8)]=((((___r1)>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-15)])&((((long)(3L))<<2))))); ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)])))); ___fp[-(-7)]=((((___fp[-(-15)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___r1)&((((long)(8191L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___r1)>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-15)])&((((long)(8191L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___r1)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-15)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-15)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___r1)&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___fp[-(-9)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-17)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-17)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-9)])&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-5)]=((((___fp[-(-9)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-17)])&((((long)(2047L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-17)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-9)])&((((long)(2047L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=((((___fp[-(-17)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-9)])&((((long)(511L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-9)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-17)])&((((long)(511L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=(((long)((___fp[-(-15)])|(___r3)))); ___fp[-(-4)]=(((long)((___r1)|(___r2)))); ___fp[-(-5)]=(((long)((___fp[-(-21)])&(___fp[-(-5)])))); ___fp[-(-4)]=(((long)((___fp[-(-20)])&(___fp[-(-4)])))); ___fp[-(-3)]=(((long)((___fp[-(-15)])&(___r3)))); ___fp[-(-2)]=(((long)((___r1)&(___r2)))); ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)])))); ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-14)])^(___fp[-(-13)])))); ___fp[-(-2)]=(((long)((___r4)^(___fp[-(-12)])))); ___fp[-(-3)]=(((long)((___fp[-(-9)])&(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___fp[-(-17)])&(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-13)])^(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___fp[-(-12)])^(___fp[-(-2)])))); ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(4L))<<2))<<(3 -2)))); ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(5L))<<2))<<(3 -2)))); ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)])))); ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)])))); ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)])))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(64463L))<<2))))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(46528L))<<2))))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-11)]=(((long)((___fp[-(-11)])+(___fp[-(-3)])))); ___fp[-(-10)]=(((long)((___fp[-(-10)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-11)])))); ___fp[-(-11)]=((((___fp[-(-11)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-11)]=(((long)((___fp[-(-10)])+(___fp[-(-11)])))); ___fp[-(-11)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-11)])))); ___fp[-(-16)]=(((long)((___fp[-(-16)])+(___fp[-(-5)])))); ___fp[-(-10)]=(((long)((___fp[-(-8)])+(___fp[-(-4)])))); ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)])))); ___fp[-(-16)]=((((___fp[-(-16)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-16)]=(((long)((___fp[-(-10)])+(___fp[-(-16)])))); ___fp[-(-16)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)])))); ___fp[-(-19)]=(((long)((___fp[-(-7)])+(___fp[-(-19)])))); ___fp[-(-18)]=(((long)((___fp[-(-11)])+(___fp[-(-18)])))); ___fp[-(-10)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-19)])))); ___fp[-(-19)]=((((___fp[-(-19)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-19)]=(((long)((___fp[-(-18)])+(___fp[-(-19)])))); ___fp[-(-19)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-19)])))); ___fp[-(-18)]=(((long)((___fp[-(-7)])+(___fp[-(-8)])))); ___fp[-(-16)]=(((long)((___fp[-(-11)])+(___fp[-(-16)])))); ___fp[-(-11)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-18)])))); ___fp[-(-18)]=((((___fp[-(-18)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-18)]=(((long)((___fp[-(-16)])+(___fp[-(-18)])))); ___fp[-(-18)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-18)])))); ___fp[-(-16)]=((((___fp[-(-11)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-8)]=(((long)((___fp[-(-18)])&((((long)(3L))<<2))))); ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-16)]=(((long)((___fp[-(-8)])|(___fp[-(-16)])))); ___fp[-(-8)]=((((___fp[-(-18)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-11)])&((((long)(3L))<<2))))); ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)])))); ___fp[-(-7)]=((((___fp[-(-11)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-18)])&((((long)(8191L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-18)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-11)])&((((long)(8191L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___fp[-(-18)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-11)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-11)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-18)])&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___fp[-(-10)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-19)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-19)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-10)])&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-5)]=((((___fp[-(-10)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-19)])&((((long)(2047L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-19)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-10)])&((((long)(2047L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=((((___fp[-(-19)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-10)])&((((long)(511L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-10)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-19)])&((((long)(511L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=(((long)((___fp[-(-11)])|(___fp[-(-15)])))); ___fp[-(-4)]=(((long)((___fp[-(-18)])|(___r1)))); ___fp[-(-5)]=(((long)((___r3)&(___fp[-(-5)])))); ___fp[-(-4)]=(((long)((___r2)&(___fp[-(-4)])))); ___fp[-(-3)]=(((long)((___fp[-(-11)])&(___fp[-(-15)])))); ___fp[-(-2)]=(((long)((___fp[-(-18)])&(___r1)))); ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)])))); ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-9)])^(___fp[-(-14)])))); ___fp[-(-2)]=(((long)((___fp[-(-17)])^(___r4)))); ___fp[-(-3)]=(((long)((___fp[-(-10)])&(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___fp[-(-19)])&(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-14)])^(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___r4)^(___fp[-(-2)])))); ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(6L))<<2))<<(3 -2)))); ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(7L))<<2))<<(3 -2)))); ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)])))); ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)])))); ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)])))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(56229L))<<2))))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(59829L))<<2))))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-13)]=(((long)((___fp[-(-13)])+(___fp[-(-3)])))); ___fp[-(-12)]=(((long)((___fp[-(-12)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-13)])))); ___fp[-(-13)]=((((___fp[-(-13)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-13)]=(((long)((___fp[-(-12)])+(___fp[-(-13)])))); ___fp[-(-13)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-13)])))); ___fp[-(-16)]=(((long)((___fp[-(-16)])+(___fp[-(-5)])))); ___fp[-(-12)]=(((long)((___fp[-(-8)])+(___fp[-(-4)])))); ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)])))); ___fp[-(-16)]=((((___fp[-(-16)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-16)]=(((long)((___fp[-(-12)])+(___fp[-(-16)])))); ___fp[-(-16)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)])))); ___fp[-(-21)]=(((long)((___fp[-(-7)])+(___fp[-(-21)])))); ___fp[-(-20)]=(((long)((___fp[-(-13)])+(___fp[-(-20)])))); ___fp[-(-12)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-21)])))); ___fp[-(-21)]=((((___fp[-(-21)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-21)]=(((long)((___fp[-(-20)])+(___fp[-(-21)])))); ___fp[-(-21)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-21)])))); ___fp[-(-20)]=(((long)((___fp[-(-7)])+(___fp[-(-8)])))); ___fp[-(-16)]=(((long)((___fp[-(-13)])+(___fp[-(-16)])))); ___fp[-(-13)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-20)])))); ___fp[-(-20)]=((((___fp[-(-20)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-20)]=(((long)((___fp[-(-16)])+(___fp[-(-20)])))); ___fp[-(-20)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-20)])))); ___fp[-(-16)]=((((___fp[-(-13)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-8)]=(((long)((___fp[-(-20)])&((((long)(3L))<<2))))); ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-16)]=(((long)((___fp[-(-8)])|(___fp[-(-16)])))); ___fp[-(-8)]=((((___fp[-(-20)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-13)])&((((long)(3L))<<2))))); ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)])))); ___fp[-(-7)]=((((___fp[-(-13)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-20)])&((((long)(8191L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-20)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-13)])&((((long)(8191L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___fp[-(-20)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-13)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-13)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-20)])&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-16)]=(((long)((___fp[-(-16)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___fp[-(-12)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-21)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-21)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-12)])&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-5)]=((((___fp[-(-12)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-21)])&((((long)(2047L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-21)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-12)])&((((long)(2047L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=((((___fp[-(-21)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-12)])&((((long)(511L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-12)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-21)])&((((long)(511L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=(((long)((___fp[-(-13)])|(___fp[-(-11)])))); ___fp[-(-4)]=(((long)((___fp[-(-20)])|(___fp[-(-18)])))); ___fp[-(-5)]=(((long)((___fp[-(-15)])&(___fp[-(-5)])))); ___fp[-(-4)]=(((long)((___r1)&(___fp[-(-4)])))); ___fp[-(-3)]=(((long)((___fp[-(-13)])&(___fp[-(-11)])))); ___fp[-(-2)]=(((long)((___fp[-(-20)])&(___fp[-(-18)])))); ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)])))); ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-10)])^(___fp[-(-9)])))); ___fp[-(-2)]=(((long)((___fp[-(-19)])^(___fp[-(-17)])))); ___fp[-(-3)]=(((long)((___fp[-(-12)])&(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___fp[-(-21)])&(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-9)])^(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___fp[-(-17)])^(___fp[-(-2)])))); ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(8L))<<2))<<(3 -2)))); ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(9L))<<2))<<(3 -2)))); ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)])))); ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)])))); ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)])))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(49755L))<<2))))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(14678L))<<2))))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-14)]=(((long)((___fp[-(-14)])+(___fp[-(-3)])))); ___r4=(((long)((___r4)+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-14)])))); ___fp[-(-14)]=((((___fp[-(-14)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___r4=(((long)((___r4)+(___fp[-(-14)])))); ___r4=(((long)(((((long)(65535L))<<2))&(___r4)))); ___fp[-(-16)]=(((long)((___fp[-(-16)])+(___fp[-(-5)])))); ___fp[-(-14)]=(((long)((___fp[-(-8)])+(___fp[-(-4)])))); ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)])))); ___fp[-(-16)]=((((___fp[-(-16)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-16)]=(((long)((___fp[-(-14)])+(___fp[-(-16)])))); ___fp[-(-16)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-16)])))); ___r3=(((long)((___fp[-(-7)])+(___r3)))); ___r2=(((long)((___r4)+(___r2)))); ___fp[-(-14)]=(((long)(((((long)(65535L))<<2))&(___r3)))); ___r3=((((___r3)>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___r2=(((long)((___r2)+(___r3)))); ___r2=(((long)(((((long)(65535L))<<2))&(___r2)))); ___r3=(((long)((___fp[-(-7)])+(___fp[-(-8)])))); ___r4=(((long)((___r4)+(___fp[-(-16)])))); ___fp[-(-16)]=(((long)(((((long)(65535L))<<2))&(___r3)))); ___r3=((((___r3)>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___r3=(((long)((___r4)+(___r3)))); ___r3=(((long)(((((long)(65535L))<<2))&(___r3)))); ___r4=((((___fp[-(-16)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-8)]=(((long)((___r3)&((((long)(3L))<<2))))); ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2))); ___r4=(((long)((___fp[-(-8)])|(___r4)))); ___fp[-(-8)]=((((___r3)>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-16)])&((((long)(3L))<<2))))); ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)])))); ___fp[-(-7)]=((((___fp[-(-16)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___r3)&((((long)(8191L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___r3)>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-16)])&((((long)(8191L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___r4=(((long)((___r4)^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___r3)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-16)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-16)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___r3)&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___r4=(((long)((___r4)^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___fp[-(-14)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___r2)&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___r2)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-14)])&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-5)]=((((___fp[-(-14)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___r2)&((((long)(2047L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___r2)>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-14)])&((((long)(2047L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=((((___r2)>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-14)])&((((long)(511L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-14)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___r2)&((((long)(511L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=(((long)((___fp[-(-16)])|(___fp[-(-13)])))); ___fp[-(-4)]=(((long)((___r3)|(___fp[-(-20)])))); ___fp[-(-5)]=(((long)((___fp[-(-11)])&(___fp[-(-5)])))); ___fp[-(-4)]=(((long)((___fp[-(-18)])&(___fp[-(-4)])))); ___fp[-(-3)]=(((long)((___fp[-(-16)])&(___fp[-(-13)])))); ___fp[-(-2)]=(((long)((___r3)&(___fp[-(-20)])))); ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)])))); ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-12)])^(___fp[-(-10)])))); ___fp[-(-2)]=(((long)((___fp[-(-21)])^(___fp[-(-19)])))); ___fp[-(-3)]=(((long)((___fp[-(-14)])&(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___r2)&(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-10)])^(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___fp[-(-19)])^(___fp[-(-2)])))); ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(10L))<<2))<<(3 -2)))); ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(11L))<<2))<<(3 -2)))); ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)])))); ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)])))); ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)])))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(4593L))<<2))))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(23025L))<<2))))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-9)]=(((long)((___fp[-(-9)])+(___fp[-(-3)])))); ___fp[-(-17)]=(((long)((___fp[-(-17)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-9)])))); ___fp[-(-9)]=((((___fp[-(-9)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-17)]=(((long)((___fp[-(-17)])+(___fp[-(-9)])))); ___fp[-(-17)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-17)])))); ___r4=(((long)((___r4)+(___fp[-(-5)])))); ___fp[-(-9)]=(((long)((___fp[-(-8)])+(___fp[-(-4)])))); ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___r4)))); ___r4=((((___r4)>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___r4=(((long)((___fp[-(-9)])+(___r4)))); ___r4=(((long)(((((long)(65535L))<<2))&(___r4)))); ___fp[-(-15)]=(((long)((___fp[-(-7)])+(___fp[-(-15)])))); ___r1=(((long)((___fp[-(-17)])+(___r1)))); ___fp[-(-9)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)])))); ___fp[-(-15)]=((((___fp[-(-15)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___r1=(((long)((___r1)+(___fp[-(-15)])))); ___r1=(((long)(((((long)(65535L))<<2))&(___r1)))); ___fp[-(-15)]=(((long)((___fp[-(-7)])+(___fp[-(-8)])))); ___r4=(((long)((___fp[-(-17)])+(___r4)))); ___fp[-(-17)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)])))); ___fp[-(-15)]=((((___fp[-(-15)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___r4=(((long)((___r4)+(___fp[-(-15)])))); ___r4=(((long)(((((long)(65535L))<<2))&(___r4)))); ___fp[-(-15)]=((((___fp[-(-17)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-8)]=(((long)((___r4)&((((long)(3L))<<2))))); ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-15)]=(((long)((___fp[-(-8)])|(___fp[-(-15)])))); ___fp[-(-8)]=((((___r4)>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-17)])&((((long)(3L))<<2))))); ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)])))); ___fp[-(-7)]=((((___fp[-(-17)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___r4)&((((long)(8191L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___r4)>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-17)])&((((long)(8191L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-15)]=(((long)((___fp[-(-15)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___r4)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-17)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-17)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___r4)&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-15)]=(((long)((___fp[-(-15)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___fp[-(-9)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___r1)&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___r1)>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-9)])&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-5)]=((((___fp[-(-9)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___r1)&((((long)(2047L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___r1)>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-9)])&((((long)(2047L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=((((___r1)>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-9)])&((((long)(511L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-9)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___r1)&((((long)(511L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=(((long)((___fp[-(-17)])|(___fp[-(-16)])))); ___fp[-(-4)]=(((long)((___r4)|(___r3)))); ___fp[-(-5)]=(((long)((___fp[-(-13)])&(___fp[-(-5)])))); ___fp[-(-4)]=(((long)((___fp[-(-20)])&(___fp[-(-4)])))); ___fp[-(-3)]=(((long)((___fp[-(-17)])&(___fp[-(-16)])))); ___fp[-(-2)]=(((long)((___r4)&(___r3)))); ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)])))); ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-14)])^(___fp[-(-12)])))); ___fp[-(-2)]=(((long)((___r2)^(___fp[-(-21)])))); ___fp[-(-3)]=(((long)((___fp[-(-9)])&(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___r1)&(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-12)])^(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___fp[-(-21)])^(___fp[-(-2)])))); ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(12L))<<2))<<(3 -2)))); ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(13L))<<2))<<(3 -2)))); ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)])))); ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)])))); ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)])))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(33444L))<<2))))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(37439L))<<2))))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-10)]=(((long)((___fp[-(-10)])+(___fp[-(-3)])))); ___fp[-(-19)]=(((long)((___fp[-(-19)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-10)])))); ___fp[-(-10)]=((((___fp[-(-10)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-19)]=(((long)((___fp[-(-19)])+(___fp[-(-10)])))); ___fp[-(-19)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-19)])))); ___fp[-(-15)]=(((long)((___fp[-(-15)])+(___fp[-(-5)])))); ___fp[-(-10)]=(((long)((___fp[-(-8)])+(___fp[-(-4)])))); ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)])))); ___fp[-(-15)]=((((___fp[-(-15)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-15)]=(((long)((___fp[-(-10)])+(___fp[-(-15)])))); ___fp[-(-15)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-15)])))); ___fp[-(-11)]=(((long)((___fp[-(-7)])+(___fp[-(-11)])))); ___fp[-(-18)]=(((long)((___fp[-(-19)])+(___fp[-(-18)])))); ___fp[-(-10)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-11)])))); ___fp[-(-11)]=((((___fp[-(-11)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-18)]=(((long)((___fp[-(-18)])+(___fp[-(-11)])))); ___fp[-(-18)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-18)])))); ___fp[-(-11)]=(((long)((___fp[-(-7)])+(___fp[-(-8)])))); ___fp[-(-19)]=(((long)((___fp[-(-19)])+(___fp[-(-15)])))); ___fp[-(-15)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-11)])))); ___fp[-(-11)]=((((___fp[-(-11)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-19)]=(((long)((___fp[-(-19)])+(___fp[-(-11)])))); ___fp[-(-19)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-19)])))); ___fp[-(-11)]=((((___fp[-(-15)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-8)]=(((long)((___fp[-(-19)])&((((long)(3L))<<2))))); ___fp[-(-8)]=(((___fp[-(-8)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-11)]=(((long)((___fp[-(-8)])|(___fp[-(-11)])))); ___fp[-(-8)]=((((___fp[-(-19)])>>(((((long)(2L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-15)])&((((long)(3L))<<2))))); ___fp[-(-7)]=(((___fp[-(-7)])<<(((((long)(14L))<<2))>>2))); ___fp[-(-8)]=(((long)((___fp[-(-7)])|(___fp[-(-8)])))); ___fp[-(-7)]=((((___fp[-(-15)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-19)])&((((long)(8191L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-19)])>>(((((long)(13L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-15)])&((((long)(8191L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(3L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-11)]=(((long)((___fp[-(-11)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___fp[-(-19)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-15)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-15)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-19)])&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-11)]=(((long)((___fp[-(-11)])^(___fp[-(-7)])))); ___fp[-(-8)]=(((long)((___fp[-(-8)])^(___fp[-(-6)])))); ___fp[-(-7)]=((((___fp[-(-10)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-6)]=(((long)((___fp[-(-18)])&((((long)(63L))<<2))))); ___fp[-(-6)]=(((___fp[-(-6)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-7)]=(((long)((___fp[-(-6)])|(___fp[-(-7)])))); ___fp[-(-6)]=((((___fp[-(-18)])>>(((((long)(6L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-5)]=(((long)((___fp[-(-10)])&((((long)(63L))<<2))))); ___fp[-(-5)]=(((___fp[-(-5)])<<(((((long)(10L))<<2))>>2))); ___fp[-(-6)]=(((long)((___fp[-(-5)])|(___fp[-(-6)])))); ___fp[-(-5)]=((((___fp[-(-10)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-18)])&((((long)(2047L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-18)])>>(((((long)(11L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-10)])&((((long)(2047L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(5L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=((((___fp[-(-18)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-4)]=(((long)((___fp[-(-10)])&((((long)(511L))<<2))))); ___fp[-(-4)]=(((___fp[-(-4)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-5)]=(((long)((___fp[-(-4)])|(___fp[-(-5)])))); ___fp[-(-4)]=((((___fp[-(-10)])>>(((((long)(9L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-3)]=(((long)((___fp[-(-18)])&((((long)(511L))<<2))))); ___fp[-(-3)]=(((___fp[-(-3)])<<(((((long)(7L))<<2))>>2))); ___fp[-(-4)]=(((long)((___fp[-(-3)])|(___fp[-(-4)])))); ___fp[-(-7)]=(((long)((___fp[-(-7)])^(___fp[-(-5)])))); ___fp[-(-6)]=(((long)((___fp[-(-6)])^(___fp[-(-4)])))); ___fp[-(-5)]=(((long)((___fp[-(-15)])|(___fp[-(-17)])))); ___fp[-(-4)]=(((long)((___fp[-(-19)])|(___r4)))); ___fp[-(-5)]=(((long)((___fp[-(-16)])&(___fp[-(-5)])))); ___fp[-(-4)]=(((long)((___r3)&(___fp[-(-4)])))); ___fp[-(-3)]=(((long)((___fp[-(-15)])&(___fp[-(-17)])))); ___fp[-(-2)]=(((long)((___fp[-(-19)])&(___r4)))); ___fp[-(-5)]=(((long)((___fp[-(-5)])|(___fp[-(-3)])))); ___fp[-(-4)]=(((long)((___fp[-(-4)])|(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-9)])^(___fp[-(-14)])))); ___fp[-(-2)]=(((long)((___r1)^(___r2)))); ___fp[-(-3)]=(((long)((___fp[-(-10)])&(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___fp[-(-18)])&(___fp[-(-2)])))); ___fp[-(-3)]=(((long)((___fp[-(-14)])^(___fp[-(-3)])))); ___fp[-(-2)]=(((long)((___r2)^(___fp[-(-2)])))); ___fp[-(-1)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(14L))<<2))<<(3 -2)))); ___fp[-(0)]=(*(long*)(((long)(((long*)((___fp[-(-22)])-(1)))+1))+(((((long)(15L))<<2))<<(3 -2)))); ___fp[-(-7)]=(((long)((___fp[-(-1)])+(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(0)])+(___fp[-(-6)])))); ___fp[-(-1)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-7)]=((((___fp[-(-7)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-6)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+(___fp[-(-1)])))); ___fp[-(-7)]=(((long)((___fp[-(-2)])+(___fp[-(-7)])))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-6)]=(((long)((___fp[-(-3)])+((((long)(24277L))<<2))))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+((((long)(43804L))<<2))))); ___fp[-(-3)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-6)])))); ___fp[-(-6)]=((((___fp[-(-6)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-7)]=(((long)((___fp[-(-7)])+(___fp[-(-6)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-7)])))); ___fp[-(-12)]=(((long)((___fp[-(-12)])+(___fp[-(-3)])))); ___fp[-(-21)]=(((long)((___fp[-(-21)])+(___fp[-(-7)])))); ___fp[-(-7)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-12)])))); ___fp[-(-12)]=((((___fp[-(-12)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-21)]=(((long)((___fp[-(-21)])+(___fp[-(-12)])))); ___fp[-(-21)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-21)])))); ___fp[-(-12)]=(((long)((___fp[-(-11)])+(___fp[-(-5)])))); ___fp[-(-11)]=(((long)((___fp[-(-8)])+(___fp[-(-4)])))); ___fp[-(-8)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-12)])))); ___fp[-(-12)]=((((___fp[-(-12)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-12)]=(((long)((___fp[-(-11)])+(___fp[-(-12)])))); ___fp[-(-12)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-12)])))); ___fp[-(-13)]=(((long)((___fp[-(-7)])+(___fp[-(-13)])))); ___fp[-(-20)]=(((long)((___fp[-(-21)])+(___fp[-(-20)])))); ___fp[-(-11)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-13)])))); ___fp[-(-13)]=((((___fp[-(-13)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-20)]=(((long)((___fp[-(-20)])+(___fp[-(-13)])))); ___fp[-(-20)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-20)])))); ___fp[-(-13)]=(((long)((___fp[-(-7)])+(___fp[-(-8)])))); ___fp[-(-21)]=(((long)((___fp[-(-21)])+(___fp[-(-12)])))); ___fp[-(-12)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-13)])))); ___fp[-(-13)]=((((___fp[-(-13)])>>(((((long)(16L))<<2))>>2))&~((1<<2)-1))); ___fp[-(-21)]=(((long)((___fp[-(-21)])+(___fp[-(-13)])))); ___fp[-(-21)]=(((long)(((((long)(65535L))<<2))&(___fp[-(-21)])))); ___fp[-(-13)]=(___fp[-(-21)]); ___fp[-(-21)]=(___fp[-(-12)]); ___fp[-(-12)]=(___fp[-(-20)]); ___fp[-(-20)]=(___fp[-(-13)]); ___fp[-(-13)]=(___fp[-(-19)]); ___fp[-(-19)]=(___fp[-(-15)]); ___fp[-(-15)]=(___fp[-(-18)]); ___fp[-(-18)]=(___fp[-(-13)]); ___fp[-(-13)]=(___fp[-(-16)]); ___fp[-(-16)]=(___r4); ___fp[-(-8)]=(___fp[-(-15)]); ___fp[-(-15)]=(___fp[-(-13)]); ___fp[-(-13)]=(___fp[-(-14)]); ___fp[-(-14)]=(___r3); ___fp[-(-7)]=(___fp[-(-13)]); ___fp[-(-13)]=(___fp[-(-11)]); ___fp[-(-11)]=(___fp[-(-10)]); ___fp[-(-10)]=(___fp[-(-8)]); ___r3=(___r2); ___r2=(___fp[-(-7)]); ___fp-=(-9);