Remove unused Elliptic Curve code.
authorjsing <jsing@openbsd.org>
Sat, 14 Jan 2023 15:45:43 +0000 (15:45 +0000)
committerjsing <jsing@openbsd.org>
Sat, 14 Jan 2023 15:45:43 +0000 (15:45 +0000)
For various reasons, the ecp_nistp* and ecp_nistz* code is unused. While
ecp_nistp* was being compiled, it is disabled due to
OPENSSL_NO_EC_NISTP_64_GCC_128 being defined. On the other hand,
ecp_nistz* was not even being built.

We will bring in new versions or alternative versions of such code, if we
end up enabling it in the future. For now it is just causing complexity
(and grep noise) while trying to improve the EC code.

Discussed with tb@

15 files changed:
lib/libcrypto/Makefile
lib/libcrypto/arch/amd64/Makefile.inc
lib/libcrypto/arch/arm/Makefile.inc
lib/libcrypto/arch/i386/Makefile.inc
lib/libcrypto/arch/sparc64/Makefile.inc
lib/libcrypto/ec/asm/ecp_nistz256-armv4.pl [deleted file]
lib/libcrypto/ec/asm/ecp_nistz256-sparcv9.pl [deleted file]
lib/libcrypto/ec/asm/ecp_nistz256-x86.pl [deleted file]
lib/libcrypto/ec/asm/ecp_nistz256-x86_64.pl [deleted file]
lib/libcrypto/ec/ecp_nistp224.c [deleted file]
lib/libcrypto/ec/ecp_nistp256.c [deleted file]
lib/libcrypto/ec/ecp_nistp521.c [deleted file]
lib/libcrypto/ec/ecp_nistputil.c [deleted file]
lib/libcrypto/ec/ecp_nistz256.c [deleted file]
lib/libcrypto/ec/ecp_nistz256_table.h [deleted file]

index 302ddd6..220cfaa 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile,v 1.90 2022/12/17 22:01:29 tb Exp $
+# $OpenBSD: Makefile,v 1.91 2023/01/14 15:45:43 jsing Exp $
 
 LIB=   crypto
 LIBREBUILD=y
@@ -361,10 +361,6 @@ SRCS+= ec_print.c
 SRCS+= eck_prn.c
 SRCS+= ecp_mont.c
 SRCS+= ecp_nist.c
-SRCS+= ecp_nistp224.c
-SRCS+= ecp_nistp256.c
-SRCS+= ecp_nistp521.c
-SRCS+= ecp_nistputil.c
 SRCS+= ecp_oct.c
 SRCS+= ecp_smpl.c
 SRCS+= ecx_methods.c
index 8b87562..dc615ec 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.inc,v 1.8 2017/08/20 17:53:13 espie Exp $
+# $OpenBSD: Makefile.inc,v 1.9 2023/01/14 15:45:43 jsing Exp $
 
 # amd64-specific libcrypto build rules
 
@@ -31,10 +31,6 @@ SRCS+=       cmll_misc.c
 SSLASM+= camellia cmll-x86_64
 # des
 SRCS+= des_enc.c fcrypt_b.c
-# ec
-#CFLAGS+= -DECP_NISTZ256_ASM
-#SRCS+=        ecp_nistz256.c
-#SSLASM+= ec ecp_nistz256-x86_64
 # md5
 CFLAGS+= -DMD5_ASM
 SSLASM+= md5 md5-x86_64
index b0e499d..1877233 100644 (file)
@@ -18,10 +18,6 @@ SSLASM+= bn armv4-gf2m
 SRCS+= camellia.c cmll_cbc.c cmll_misc.c
 # des
 SRCS+= des_enc.c fcrypt_b.c
-# # ec
-# CFLAGS+= -DECP_NISTZ256_ASM
-# SRCS+=       ecp_nistz256.c
-# SSLASM+= ec ecp_nistz256-armv4
 # modes
 CFLAGS+= -DGHASH_ASM
 SSLASM+= modes ghash-armv4
index 7986a0f..67c2226 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.inc,v 1.6 2017/08/20 17:53:13 espie Exp $
+# $OpenBSD: Makefile.inc,v 1.7 2023/01/14 15:45:43 jsing Exp $
 
 # i386-specific libcrypto build rules
 
@@ -28,10 +28,6 @@ SSLASM+= camellia cmll-x86
 # des
 SRCS+= fcrypt_b.c
 SSLASM+= des des-586
-# # ec
-# CFLAGS+= -DECP_NISTZ256_ASM
-# SRCS+=       ecp_nistz256.c
-# SSLASM+= ec ecp_nistz256-x86
 # md5
 CFLAGS+= -DMD5_ASM
 SSLASM+= md5 md5-586
index 223c941..6ea1409 100644 (file)
@@ -1,4 +1,4 @@
-# $OpenBSD: Makefile.inc,v 1.6 2023/01/13 17:27:26 miod Exp $
+# $OpenBSD: Makefile.inc,v 1.7 2023/01/14 15:45:43 jsing Exp $
 
 # sparc64-specific libcrypto build rules
 
@@ -18,10 +18,6 @@ SRCS+= des_enc-sparc.S
 GENERATED+= des_enc-sparc.S
 des_enc-sparc.S: ${LCRYPTO_SRC}/des/asm/des_enc.m4
        m4 ${LCRYPTO_SRC}/des/asm/des_enc.m4 > ${.TARGET}
-# # ec
-# CFLAGS+= -DECP_NISTZ256_ASM
-# SRCS+=       ecp_nistz256.c
-# SSLASM+= ec ecp_nistz256-sparcv9
 # modes
 CFLAGS+= -DGHASH_ASM
 SSLASM+= modes ghash-sparcv9 ghash-sparcv9
diff --git a/lib/libcrypto/ec/asm/ecp_nistz256-armv4.pl b/lib/libcrypto/ec/asm/ecp_nistz256-armv4.pl
deleted file mode 100644 (file)
index 9e6c659..0000000
+++ /dev/null
@@ -1,1733 +0,0 @@
-#! /usr/bin/env perl
-# $OpenBSD: ecp_nistz256-armv4.pl,v 1.2 2022/12/26 07:18:51 jmc Exp $
-#
-# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License").  You may not use
-# this file except in compliance with the License.  You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-
-
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project. The module is, however, dual licensed under OpenSSL and
-# CRYPTOGAMS licenses depending on where you obtain it. For further
-# details see http://www.openssl.org/~appro/cryptogams/.
-# ====================================================================
-#
-# ECP_NISTZ256 module for ARMv4.
-#
-# October 2014.
-#
-# Original ECP_NISTZ256 submission targeting x86_64 is detailed in
-# http://eprint.iacr.org/2013/816. In the process of adaptation
-# original .c module was made 32-bit savvy in order to make this
-# implementation possible.
-#
-#                      with/without -DECP_NISTZ256_ASM
-# Cortex-A8            +53-170%
-# Cortex-A9            +76-205%
-# Cortex-A15           +100-316%
-# Snapdragon S4                +66-187%
-#
-# Ranges denote minimum and maximum improvement coefficients depending
-# on benchmark. Lower coefficients are for ECDSA sign, server-side
-# operation. Keep in mind that +200% means 3x improvement.
-
-$flavour = shift;
-if ($flavour=~/\w[\w\-]*\.\w+$/) { $output=$flavour; undef $flavour; }
-else { while (($output=shift) && ($output!~/\w[\w\-]*\.\w+$/)) {} }
-
-if ($flavour && $flavour ne "void") {
-    $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-    ( $xlate="${dir}arm-xlate.pl" and -f $xlate ) or
-    ( $xlate="${dir}../../perlasm/arm-xlate.pl" and -f $xlate) or
-    die "can't locate arm-xlate.pl";
-
-    open STDOUT,"| \"$^X\" $xlate $flavour $output";
-} else {
-    open STDOUT,">$output";
-}
-
-$code.=<<___;
-#include "arm_arch.h"
-
-.text
-#if defined(__thumb2__)
-.syntax        unified
-.thumb
-#else
-.code  32
-#endif
-___
-
-$code.=<<___;
-.Lone:
-.long  1,0,0,0,0,0,0,0
-.align 6
-___
-
-########################################################################
-# common register layout, note that $t2 is link register, so that if
-# internal subroutine uses $t2, then it has to offload lr...
-
-($r_ptr,$a_ptr,$b_ptr,$ff,$a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,$t1,$t2)=
-               map("r$_",(0..12,14));
-($t0,$t3)=($ff,$a_ptr);
-
-$code.=<<___;
-@ void ecp_nistz256_from_mont(BN_ULONG r0[8],const BN_ULONG r1[8]);
-.globl ecp_nistz256_from_mont
-.type  ecp_nistz256_from_mont,%function
-ecp_nistz256_from_mont:
-       adr     $b_ptr,.Lone
-       b       .Lecp_nistz256_mul_mont
-.size  ecp_nistz256_from_mont,.-ecp_nistz256_from_mont
-
-@ void ecp_nistz256_mul_by_2(BN_ULONG r0[8],const BN_ULONG r1[8]);
-.globl ecp_nistz256_mul_by_2
-.type  ecp_nistz256_mul_by_2,%function
-.align 4
-ecp_nistz256_mul_by_2:
-       stmdb   sp!,{r4-r12,lr}
-       bl      __ecp_nistz256_mul_by_2
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_mul_by_2,.-ecp_nistz256_mul_by_2
-
-.type  __ecp_nistz256_mul_by_2,%function
-.align 4
-__ecp_nistz256_mul_by_2:
-       ldr     $a0,[$a_ptr,#0]
-       ldr     $a1,[$a_ptr,#4]
-       ldr     $a2,[$a_ptr,#8]
-       adds    $a0,$a0,$a0             @ a[0:7]+=a[0:7], i.e. add with itself
-       ldr     $a3,[$a_ptr,#12]
-       adcs    $a1,$a1,$a1
-       ldr     $a4,[$a_ptr,#16]
-       adcs    $a2,$a2,$a2
-       ldr     $a5,[$a_ptr,#20]
-       adcs    $a3,$a3,$a3
-       ldr     $a6,[$a_ptr,#24]
-       adcs    $a4,$a4,$a4
-       ldr     $a7,[$a_ptr,#28]
-       adcs    $a5,$a5,$a5
-       adcs    $a6,$a6,$a6
-       mov     $ff,#0
-       adcs    $a7,$a7,$a7
-       adc     $ff,$ff,#0
-
-       b       .Lreduce_by_sub
-.size  __ecp_nistz256_mul_by_2,.-__ecp_nistz256_mul_by_2
-
-@ void ecp_nistz256_add(BN_ULONG r0[8],const BN_ULONG r1[8],
-@                                      const BN_ULONG r2[8]);
-.globl ecp_nistz256_add
-.type  ecp_nistz256_add,%function
-.align 4
-ecp_nistz256_add:
-       stmdb   sp!,{r4-r12,lr}
-       bl      __ecp_nistz256_add
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_add,.-ecp_nistz256_add
-
-.type  __ecp_nistz256_add,%function
-.align 4
-__ecp_nistz256_add:
-       str     lr,[sp,#-4]!            @ push lr
-
-       ldr     $a0,[$a_ptr,#0]
-       ldr     $a1,[$a_ptr,#4]
-       ldr     $a2,[$a_ptr,#8]
-       ldr     $a3,[$a_ptr,#12]
-       ldr     $a4,[$a_ptr,#16]
-        ldr    $t0,[$b_ptr,#0]
-       ldr     $a5,[$a_ptr,#20]
-        ldr    $t1,[$b_ptr,#4]
-       ldr     $a6,[$a_ptr,#24]
-        ldr    $t2,[$b_ptr,#8]
-       ldr     $a7,[$a_ptr,#28]
-        ldr    $t3,[$b_ptr,#12]
-       adds    $a0,$a0,$t0
-        ldr    $t0,[$b_ptr,#16]
-       adcs    $a1,$a1,$t1
-        ldr    $t1,[$b_ptr,#20]
-       adcs    $a2,$a2,$t2
-        ldr    $t2,[$b_ptr,#24]
-       adcs    $a3,$a3,$t3
-        ldr    $t3,[$b_ptr,#28]
-       adcs    $a4,$a4,$t0
-       adcs    $a5,$a5,$t1
-       adcs    $a6,$a6,$t2
-       mov     $ff,#0
-       adcs    $a7,$a7,$t3
-       adc     $ff,$ff,#0
-       ldr     lr,[sp],#4              @ pop lr
-
-.Lreduce_by_sub:
-
-       @ if a+b >= modulus, subtract modulus.
-       @
-       @ But since comparison implies subtraction, we subtract
-       @ modulus and then add it back if subtraction borrowed.
-
-       subs    $a0,$a0,#-1
-       sbcs    $a1,$a1,#-1
-       sbcs    $a2,$a2,#-1
-       sbcs    $a3,$a3,#0
-       sbcs    $a4,$a4,#0
-       sbcs    $a5,$a5,#0
-       sbcs    $a6,$a6,#1
-       sbcs    $a7,$a7,#-1
-       sbc     $ff,$ff,#0
-
-       @ Note that because mod has special form, i.e. consists of
-       @ 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       @ using value of borrow as a whole or extracting single bit.
-       @ Follow $ff register...
-
-       adds    $a0,$a0,$ff             @ add synthesized modulus
-       adcs    $a1,$a1,$ff
-       str     $a0,[$r_ptr,#0]
-       adcs    $a2,$a2,$ff
-       str     $a1,[$r_ptr,#4]
-       adcs    $a3,$a3,#0
-       str     $a2,[$r_ptr,#8]
-       adcs    $a4,$a4,#0
-       str     $a3,[$r_ptr,#12]
-       adcs    $a5,$a5,#0
-       str     $a4,[$r_ptr,#16]
-       adcs    $a6,$a6,$ff,lsr#31
-       str     $a5,[$r_ptr,#20]
-       adcs    $a7,$a7,$ff
-       str     $a6,[$r_ptr,#24]
-       str     $a7,[$r_ptr,#28]
-
-       mov     pc,lr
-.size  __ecp_nistz256_add,.-__ecp_nistz256_add
-
-@ void ecp_nistz256_mul_by_3(BN_ULONG r0[8],const BN_ULONG r1[8]);
-.globl ecp_nistz256_mul_by_3
-.type  ecp_nistz256_mul_by_3,%function
-.align 4
-ecp_nistz256_mul_by_3:
-       stmdb   sp!,{r4-r12,lr}
-       bl      __ecp_nistz256_mul_by_3
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_mul_by_3,.-ecp_nistz256_mul_by_3
-
-.type  __ecp_nistz256_mul_by_3,%function
-.align 4
-__ecp_nistz256_mul_by_3:
-       str     lr,[sp,#-4]!            @ push lr
-
-       @ As multiplication by 3 is performed as 2*n+n, below are inline
-       @ copies of __ecp_nistz256_mul_by_2 and __ecp_nistz256_add, see
-       @ corresponding subroutines for details.
-
-       ldr     $a0,[$a_ptr,#0]
-       ldr     $a1,[$a_ptr,#4]
-       ldr     $a2,[$a_ptr,#8]
-       adds    $a0,$a0,$a0             @ a[0:7]+=a[0:7]
-       ldr     $a3,[$a_ptr,#12]
-       adcs    $a1,$a1,$a1
-       ldr     $a4,[$a_ptr,#16]
-       adcs    $a2,$a2,$a2
-       ldr     $a5,[$a_ptr,#20]
-       adcs    $a3,$a3,$a3
-       ldr     $a6,[$a_ptr,#24]
-       adcs    $a4,$a4,$a4
-       ldr     $a7,[$a_ptr,#28]
-       adcs    $a5,$a5,$a5
-       adcs    $a6,$a6,$a6
-       mov     $ff,#0
-       adcs    $a7,$a7,$a7
-       adc     $ff,$ff,#0
-
-       subs    $a0,$a0,#-1             @ .Lreduce_by_sub but without stores
-       sbcs    $a1,$a1,#-1
-       sbcs    $a2,$a2,#-1
-       sbcs    $a3,$a3,#0
-       sbcs    $a4,$a4,#0
-       sbcs    $a5,$a5,#0
-       sbcs    $a6,$a6,#1
-       sbcs    $a7,$a7,#-1
-       sbc     $ff,$ff,#0
-
-       adds    $a0,$a0,$ff             @ add synthesized modulus
-       adcs    $a1,$a1,$ff
-       adcs    $a2,$a2,$ff
-       adcs    $a3,$a3,#0
-       adcs    $a4,$a4,#0
-        ldr    $b_ptr,[$a_ptr,#0]
-       adcs    $a5,$a5,#0
-        ldr    $t1,[$a_ptr,#4]
-       adcs    $a6,$a6,$ff,lsr#31
-        ldr    $t2,[$a_ptr,#8]
-       adc     $a7,$a7,$ff
-
-       ldr     $t0,[$a_ptr,#12]
-       adds    $a0,$a0,$b_ptr          @ 2*a[0:7]+=a[0:7]
-       ldr     $b_ptr,[$a_ptr,#16]
-       adcs    $a1,$a1,$t1
-       ldr     $t1,[$a_ptr,#20]
-       adcs    $a2,$a2,$t2
-       ldr     $t2,[$a_ptr,#24]
-       adcs    $a3,$a3,$t0
-       ldr     $t3,[$a_ptr,#28]
-       adcs    $a4,$a4,$b_ptr
-       adcs    $a5,$a5,$t1
-       adcs    $a6,$a6,$t2
-       mov     $ff,#0
-       adcs    $a7,$a7,$t3
-       adc     $ff,$ff,#0
-       ldr     lr,[sp],#4              @ pop lr
-
-       b       .Lreduce_by_sub
-.size  ecp_nistz256_mul_by_3,.-ecp_nistz256_mul_by_3
-
-@ void ecp_nistz256_div_by_2(BN_ULONG r0[8],const BN_ULONG r1[8]);
-.globl ecp_nistz256_div_by_2
-.type  ecp_nistz256_div_by_2,%function
-.align 4
-ecp_nistz256_div_by_2:
-       stmdb   sp!,{r4-r12,lr}
-       bl      __ecp_nistz256_div_by_2
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_div_by_2,.-ecp_nistz256_div_by_2
-
-.type  __ecp_nistz256_div_by_2,%function
-.align 4
-__ecp_nistz256_div_by_2:
-       @ ret = (a is odd ? a+mod : a) >> 1
-
-       ldr     $a0,[$a_ptr,#0]
-       ldr     $a1,[$a_ptr,#4]
-       ldr     $a2,[$a_ptr,#8]
-       mov     $ff,$a0,lsl#31          @ place least significant bit to most
-                                       @ significant position, now arithmetic
-                                       @ right shift by 31 will produce -1 or
-                                       @ 0, while logical right shift 1 or 0,
-                                       @ this is how modulus is conditionally
-                                       @ synthesized in this case...
-       ldr     $a3,[$a_ptr,#12]
-       adds    $a0,$a0,$ff,asr#31
-       ldr     $a4,[$a_ptr,#16]
-       adcs    $a1,$a1,$ff,asr#31
-       ldr     $a5,[$a_ptr,#20]
-       adcs    $a2,$a2,$ff,asr#31
-       ldr     $a6,[$a_ptr,#24]
-       adcs    $a3,$a3,#0
-       ldr     $a7,[$a_ptr,#28]
-       adcs    $a4,$a4,#0
-        mov    $a0,$a0,lsr#1           @ a[0:7]>>=1, we can start early
-                                       @ because it doesn't affect flags
-       adcs    $a5,$a5,#0
-        orr    $a0,$a0,$a1,lsl#31
-       adcs    $a6,$a6,$ff,lsr#31
-       mov     $b_ptr,#0
-       adcs    $a7,$a7,$ff,asr#31
-        mov    $a1,$a1,lsr#1
-       adc     $b_ptr,$b_ptr,#0        @ top-most carry bit from addition
-
-       orr     $a1,$a1,$a2,lsl#31
-       mov     $a2,$a2,lsr#1
-       str     $a0,[$r_ptr,#0]
-       orr     $a2,$a2,$a3,lsl#31
-       mov     $a3,$a3,lsr#1
-       str     $a1,[$r_ptr,#4]
-       orr     $a3,$a3,$a4,lsl#31
-       mov     $a4,$a4,lsr#1
-       str     $a2,[$r_ptr,#8]
-       orr     $a4,$a4,$a5,lsl#31
-       mov     $a5,$a5,lsr#1
-       str     $a3,[$r_ptr,#12]
-       orr     $a5,$a5,$a6,lsl#31
-       mov     $a6,$a6,lsr#1
-       str     $a4,[$r_ptr,#16]
-       orr     $a6,$a6,$a7,lsl#31
-       mov     $a7,$a7,lsr#1
-       str     $a5,[$r_ptr,#20]
-       orr     $a7,$a7,$b_ptr,lsl#31   @ don't forget the top-most carry bit
-       str     $a6,[$r_ptr,#24]
-       str     $a7,[$r_ptr,#28]
-
-       mov     pc,lr
-.size  __ecp_nistz256_div_by_2,.-__ecp_nistz256_div_by_2
-
-@ void ecp_nistz256_sub(BN_ULONG r0[8],const BN_ULONG r1[8],
-@                                      const BN_ULONG r2[8]);
-.globl ecp_nistz256_sub
-.type  ecp_nistz256_sub,%function
-.align 4
-ecp_nistz256_sub:
-       stmdb   sp!,{r4-r12,lr}
-       bl      __ecp_nistz256_sub
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_sub,.-ecp_nistz256_sub
-
-.type  __ecp_nistz256_sub,%function
-.align 4
-__ecp_nistz256_sub:
-       str     lr,[sp,#-4]!            @ push lr
-
-       ldr     $a0,[$a_ptr,#0]
-       ldr     $a1,[$a_ptr,#4]
-       ldr     $a2,[$a_ptr,#8]
-       ldr     $a3,[$a_ptr,#12]
-       ldr     $a4,[$a_ptr,#16]
-        ldr    $t0,[$b_ptr,#0]
-       ldr     $a5,[$a_ptr,#20]
-        ldr    $t1,[$b_ptr,#4]
-       ldr     $a6,[$a_ptr,#24]
-        ldr    $t2,[$b_ptr,#8]
-       ldr     $a7,[$a_ptr,#28]
-        ldr    $t3,[$b_ptr,#12]
-       subs    $a0,$a0,$t0
-        ldr    $t0,[$b_ptr,#16]
-       sbcs    $a1,$a1,$t1
-        ldr    $t1,[$b_ptr,#20]
-       sbcs    $a2,$a2,$t2
-        ldr    $t2,[$b_ptr,#24]
-       sbcs    $a3,$a3,$t3
-        ldr    $t3,[$b_ptr,#28]
-       sbcs    $a4,$a4,$t0
-       sbcs    $a5,$a5,$t1
-       sbcs    $a6,$a6,$t2
-       sbcs    $a7,$a7,$t3
-       sbc     $ff,$ff,$ff             @ broadcast borrow bit
-       ldr     lr,[sp],#4              @ pop lr
-
-.Lreduce_by_add:
-
-       @ if a-b borrows, add modulus.
-       @
-       @ Note that because mod has special form, i.e. consists of
-       @ 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       @ broadcasting borrow bit to a register, $ff, and using it as
-       @ a whole or extracting single bit.
-
-       adds    $a0,$a0,$ff             @ add synthesized modulus
-       adcs    $a1,$a1,$ff
-       str     $a0,[$r_ptr,#0]
-       adcs    $a2,$a2,$ff
-       str     $a1,[$r_ptr,#4]
-       adcs    $a3,$a3,#0
-       str     $a2,[$r_ptr,#8]
-       adcs    $a4,$a4,#0
-       str     $a3,[$r_ptr,#12]
-       adcs    $a5,$a5,#0
-       str     $a4,[$r_ptr,#16]
-       adcs    $a6,$a6,$ff,lsr#31
-       str     $a5,[$r_ptr,#20]
-       adcs    $a7,$a7,$ff
-       str     $a6,[$r_ptr,#24]
-       str     $a7,[$r_ptr,#28]
-
-       mov     pc,lr
-.size  __ecp_nistz256_sub,.-__ecp_nistz256_sub
-
-@ void ecp_nistz256_neg(BN_ULONG r0[8],const BN_ULONG r1[8]);
-.globl ecp_nistz256_neg
-.type  ecp_nistz256_neg,%function
-.align 4
-ecp_nistz256_neg:
-       stmdb   sp!,{r4-r12,lr}
-       bl      __ecp_nistz256_neg
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_neg,.-ecp_nistz256_neg
-
-.type  __ecp_nistz256_neg,%function
-.align 4
-__ecp_nistz256_neg:
-       ldr     $a0,[$a_ptr,#0]
-       eor     $ff,$ff,$ff
-       ldr     $a1,[$a_ptr,#4]
-       ldr     $a2,[$a_ptr,#8]
-       subs    $a0,$ff,$a0
-       ldr     $a3,[$a_ptr,#12]
-       sbcs    $a1,$ff,$a1
-       ldr     $a4,[$a_ptr,#16]
-       sbcs    $a2,$ff,$a2
-       ldr     $a5,[$a_ptr,#20]
-       sbcs    $a3,$ff,$a3
-       ldr     $a6,[$a_ptr,#24]
-       sbcs    $a4,$ff,$a4
-       ldr     $a7,[$a_ptr,#28]
-       sbcs    $a5,$ff,$a5
-       sbcs    $a6,$ff,$a6
-       sbcs    $a7,$ff,$a7
-       sbc     $ff,$ff,$ff
-
-       b       .Lreduce_by_add
-.size  __ecp_nistz256_neg,.-__ecp_nistz256_neg
-___
-{
-my @acc=map("r$_",(3..11));
-my ($t0,$t1,$bj,$t2,$t3)=map("r$_",(0,1,2,12,14));
-
-$code.=<<___;
-@ void ecp_nistz256_sqr_mont(BN_ULONG r0[8],const BN_ULONG r1[8]);
-.globl ecp_nistz256_sqr_mont
-.type  ecp_nistz256_sqr_mont,%function
-.align 4
-ecp_nistz256_sqr_mont:
-       mov     $b_ptr,$a_ptr
-       b       .Lecp_nistz256_mul_mont
-.size  ecp_nistz256_sqr_mont,.-ecp_nistz256_sqr_mont
-
-@ void ecp_nistz256_mul_mont(BN_ULONG r0[8],const BN_ULONG r1[8],
-@                                           const BN_ULONG r2[8]);
-.globl ecp_nistz256_mul_mont
-.type  ecp_nistz256_mul_mont,%function
-.align 4
-ecp_nistz256_mul_mont:
-.Lecp_nistz256_mul_mont:
-       stmdb   sp!,{r4-r12,lr}
-       bl      __ecp_nistz256_mul_mont
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_mul_mont,.-ecp_nistz256_mul_mont
-
-.type  __ecp_nistz256_mul_mont,%function
-.align 4
-__ecp_nistz256_mul_mont:
-       stmdb   sp!,{r0-r2,lr}                  @ make a copy of arguments too
-
-       ldr     $bj,[$b_ptr,#0]                 @ b[0]
-       ldmia   $a_ptr,{@acc[1]-@acc[8]}
-
-       umull   @acc[0],$t3,@acc[1],$bj         @ r[0]=a[0]*b[0]
-       stmdb   sp!,{$acc[1]-@acc[8]}           @ copy a[0-7] to stack, so
-                                               @ that it can be addressed
-                                               @ without spending register
-                                               @ on address
-       umull   @acc[1],$t0,@acc[2],$bj         @ r[1]=a[1]*b[0]
-       umull   @acc[2],$t1,@acc[3],$bj
-       adds    @acc[1],@acc[1],$t3             @ accumulate high part of mult
-       umull   @acc[3],$t2,@acc[4],$bj
-       adcs    @acc[2],@acc[2],$t0
-       umull   @acc[4],$t3,@acc[5],$bj
-       adcs    @acc[3],@acc[3],$t1
-       umull   @acc[5],$t0,@acc[6],$bj
-       adcs    @acc[4],@acc[4],$t2
-       umull   @acc[6],$t1,@acc[7],$bj
-       adcs    @acc[5],@acc[5],$t3
-       umull   @acc[7],$t2,@acc[8],$bj
-       adcs    @acc[6],@acc[6],$t0
-       adcs    @acc[7],@acc[7],$t1
-       eor     $t3,$t3,$t3                     @ first overflow bit is zero
-       adc     @acc[8],$t2,#0
-___
-for(my $i=1;$i<8;$i++) {
-my $t4=@acc[0];
-
-       # Reduction iteration is normally performed by accumulating
-       # result of multiplication of modulus by "magic" digit [and
-       # omitting least significant word, which is guaranteed to
-       # be 0], but thanks to special form of modulus and "magic"
-       # digit being equal to least significant word, it can be
-       # performed with additions and subtractions alone. Indeed:
-       #
-       #        ffff.0001.0000.0000.0000.ffff.ffff.ffff
-       # *                                         abcd
-       # + xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.abcd
-       #
-       # Now observing that ff..ff*x = (2^n-1)*x = 2^n*x-x, we
-       # rewrite above as:
-       #
-       #   xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.abcd
-       # + abcd.0000.abcd.0000.0000.abcd.0000.0000.0000
-       # -      abcd.0000.0000.0000.0000.0000.0000.abcd
-       #
-       # or marking redundant operations:
-       #
-       #   xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.----
-       # + abcd.0000.abcd.0000.0000.abcd.----.----.----
-       # -      abcd.----.----.----.----.----.----.----
-
-$code.=<<___;
-       @ multiplication-less reduction $i
-       adds    @acc[3],@acc[3],@acc[0]         @ r[3]+=r[0]
-        ldr    $bj,[sp,#40]                    @ restore b_ptr
-       adcs    @acc[4],@acc[4],#0              @ r[4]+=0
-       adcs    @acc[5],@acc[5],#0              @ r[5]+=0
-       adcs    @acc[6],@acc[6],@acc[0]         @ r[6]+=r[0]
-        ldr    $t1,[sp,#0]                     @ load a[0]
-       adcs    @acc[7],@acc[7],#0              @ r[7]+=0
-        ldr    $bj,[$bj,#4*$i]                 @ load b[i]
-       adcs    @acc[8],@acc[8],@acc[0]         @ r[8]+=r[0]
-        eor    $t0,$t0,$t0
-       adc     $t3,$t3,#0                      @ overflow bit
-       subs    @acc[7],@acc[7],@acc[0]         @ r[7]-=r[0]
-        ldr    $t2,[sp,#4]                     @ a[1]
-       sbcs    @acc[8],@acc[8],#0              @ r[8]-=0
-        umlal  @acc[1],$t0,$t1,$bj             @ "r[0]"+=a[0]*b[i]
-        eor    $t1,$t1,$t1
-       sbc     @acc[0],$t3,#0                  @ overflow bit, keep in mind
-                                               @ that netto result is
-                                               @ addition of a value which
-                                               @ makes underflow impossible
-
-       ldr     $t3,[sp,#8]                     @ a[2]
-       umlal   @acc[2],$t1,$t2,$bj             @ "r[1]"+=a[1]*b[i]
-        str    @acc[0],[sp,#36]                @ temporarily offload overflow
-       eor     $t2,$t2,$t2
-       ldr     $t4,[sp,#12]                    @ a[3], $t4 is alias @acc[0]
-       umlal   @acc[3],$t2,$t3,$bj             @ "r[2]"+=a[2]*b[i]
-       eor     $t3,$t3,$t3
-       adds    @acc[2],@acc[2],$t0             @ accumulate high part of mult
-       ldr     $t0,[sp,#16]                    @ a[4]
-       umlal   @acc[4],$t3,$t4,$bj             @ "r[3]"+=a[3]*b[i]
-       eor     $t4,$t4,$t4
-       adcs    @acc[3],@acc[3],$t1
-       ldr     $t1,[sp,#20]                    @ a[5]
-       umlal   @acc[5],$t4,$t0,$bj             @ "r[4]"+=a[4]*b[i]
-       eor     $t0,$t0,$t0
-       adcs    @acc[4],@acc[4],$t2
-       ldr     $t2,[sp,#24]                    @ a[6]
-       umlal   @acc[6],$t0,$t1,$bj             @ "r[5]"+=a[5]*b[i]
-       eor     $t1,$t1,$t1
-       adcs    @acc[5],@acc[5],$t3
-       ldr     $t3,[sp,#28]                    @ a[7]
-       umlal   @acc[7],$t1,$t2,$bj             @ "r[6]"+=a[6]*b[i]
-       eor     $t2,$t2,$t2
-       adcs    @acc[6],@acc[6],$t4
-        ldr    @acc[0],[sp,#36]                @ restore overflow bit
-       umlal   @acc[8],$t2,$t3,$bj             @ "r[7]"+=a[7]*b[i]
-       eor     $t3,$t3,$t3
-       adcs    @acc[7],@acc[7],$t0
-       adcs    @acc[8],@acc[8],$t1
-       adcs    @acc[0],$acc[0],$t2
-       adc     $t3,$t3,#0                      @ new overflow bit
-___
-       push(@acc,shift(@acc));                 # rotate registers, so that
-                                               # "r[i]" becomes r[i]
-}
-$code.=<<___;
-       @ last multiplication-less reduction
-       adds    @acc[3],@acc[3],@acc[0]
-       ldr     $r_ptr,[sp,#32]                 @ restore r_ptr
-       adcs    @acc[4],@acc[4],#0
-       adcs    @acc[5],@acc[5],#0
-       adcs    @acc[6],@acc[6],@acc[0]
-       adcs    @acc[7],@acc[7],#0
-       adcs    @acc[8],@acc[8],@acc[0]
-       adc     $t3,$t3,#0
-       subs    @acc[7],@acc[7],@acc[0]
-       sbcs    @acc[8],@acc[8],#0
-       sbc     @acc[0],$t3,#0                  @ overflow bit
-
-       @ Final step is "if result > mod, subtract mod", but we do it
-       @ "other way around", namely subtract modulus from result
-       @ and if it borrowed, add modulus back.
-
-       adds    @acc[1],@acc[1],#1              @ subs  @acc[1],@acc[1],#-1
-       adcs    @acc[2],@acc[2],#0              @ sbcs  @acc[2],@acc[2],#-1
-       adcs    @acc[3],@acc[3],#0              @ sbcs  @acc[3],@acc[3],#-1
-       sbcs    @acc[4],@acc[4],#0
-       sbcs    @acc[5],@acc[5],#0
-       sbcs    @acc[6],@acc[6],#0
-       sbcs    @acc[7],@acc[7],#1
-       adcs    @acc[8],@acc[8],#0              @ sbcs  @acc[8],@acc[8],#-1
-       ldr     lr,[sp,#44]                     @ restore lr
-       sbc     @acc[0],@acc[0],#0              @ broadcast borrow bit
-       add     sp,sp,#48
-
-       @ Note that because mod has special form, i.e. consists of
-       @ 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       @ broadcasting borrow bit to a register, @acc[0], and using it as
-       @ a whole or extracting single bit.
-
-       adds    @acc[1],@acc[1],@acc[0]         @ add modulus or zero
-       adcs    @acc[2],@acc[2],@acc[0]
-       str     @acc[1],[$r_ptr,#0]
-       adcs    @acc[3],@acc[3],@acc[0]
-       str     @acc[2],[$r_ptr,#4]
-       adcs    @acc[4],@acc[4],#0
-       str     @acc[3],[$r_ptr,#8]
-       adcs    @acc[5],@acc[5],#0
-       str     @acc[4],[$r_ptr,#12]
-       adcs    @acc[6],@acc[6],#0
-       str     @acc[5],[$r_ptr,#16]
-       adcs    @acc[7],@acc[7],@acc[0],lsr#31
-       str     @acc[6],[$r_ptr,#20]
-       adc     @acc[8],@acc[8],@acc[0]
-       str     @acc[7],[$r_ptr,#24]
-       str     @acc[8],[$r_ptr,#28]
-
-       mov     pc,lr
-.size  __ecp_nistz256_mul_mont,.-__ecp_nistz256_mul_mont
-___
-}
-
-{
-my ($out,$inp,$index,$mask)=map("r$_",(0..3));
-$code.=<<___;
-@ void ecp_nistz256_select_w5(P256_POINT *r0,const void *r1,
-@                                            int r2);
-.globl ecp_nistz256_select_w5
-.type  ecp_nistz256_select_w5,%function
-.align 5
-ecp_nistz256_select_w5:
-       stmdb   sp!,{r4-r11}
-
-       cmp     $index,#0
-       mov     $mask,#0
-#ifdef __thumb2__
-       itt     ne
-#endif
-       subne   $index,$index,#1
-       movne   $mask,#-1
-       add     $inp,$inp,$index,lsl#2
-
-       ldr     r4,[$inp,#64*0]
-       ldr     r5,[$inp,#64*1]
-       ldr     r6,[$inp,#64*2]
-       and     r4,r4,$mask
-       ldr     r7,[$inp,#64*3]
-       and     r5,r5,$mask
-       ldr     r8,[$inp,#64*4]
-       and     r6,r6,$mask
-       ldr     r9,[$inp,#64*5]
-       and     r7,r7,$mask
-       ldr     r10,[$inp,#64*6]
-       and     r8,r8,$mask
-       ldr     r11,[$inp,#64*7]
-       add     $inp,$inp,#64*8
-       and     r9,r9,$mask
-       and     r10,r10,$mask
-       and     r11,r11,$mask
-       stmia   $out!,{r4-r11}  @ X
-
-       ldr     r4,[$inp,#64*0]
-       ldr     r5,[$inp,#64*1]
-       ldr     r6,[$inp,#64*2]
-       and     r4,r4,$mask
-       ldr     r7,[$inp,#64*3]
-       and     r5,r5,$mask
-       ldr     r8,[$inp,#64*4]
-       and     r6,r6,$mask
-       ldr     r9,[$inp,#64*5]
-       and     r7,r7,$mask
-       ldr     r10,[$inp,#64*6]
-       and     r8,r8,$mask
-       ldr     r11,[$inp,#64*7]
-       add     $inp,$inp,#64*8
-       and     r9,r9,$mask
-       and     r10,r10,$mask
-       and     r11,r11,$mask
-       stmia   $out!,{r4-r11}  @ Y
-
-       ldr     r4,[$inp,#64*0]
-       ldr     r5,[$inp,#64*1]
-       ldr     r6,[$inp,#64*2]
-       and     r4,r4,$mask
-       ldr     r7,[$inp,#64*3]
-       and     r5,r5,$mask
-       ldr     r8,[$inp,#64*4]
-       and     r6,r6,$mask
-       ldr     r9,[$inp,#64*5]
-       and     r7,r7,$mask
-       ldr     r10,[$inp,#64*6]
-       and     r8,r8,$mask
-       ldr     r11,[$inp,#64*7]
-       and     r9,r9,$mask
-       and     r10,r10,$mask
-       and     r11,r11,$mask
-       stmia   $out,{r4-r11}           @ Z
-
-       ldmia   sp!,{r4-r11}
-#if __ARM_ARCH__>=5 || defined(__thumb__)
-       bx      lr
-#else
-       mov     pc,lr
-#endif
-.size  ecp_nistz256_select_w5,.-ecp_nistz256_select_w5
-
-@ void ecp_nistz256_select_w7(P256_POINT_AFFINE *r0,const void *r1,
-@                                                   int r2);
-.globl ecp_nistz256_select_w7
-.type  ecp_nistz256_select_w7,%function
-.align 5
-ecp_nistz256_select_w7:
-       stmdb   sp!,{r4-r7}
-
-       cmp     $index,#0
-       mov     $mask,#0
-#ifdef __thumb2__
-       itt     ne
-#endif
-       subne   $index,$index,#1
-       movne   $mask,#-1
-       add     $inp,$inp,$index
-       mov     $index,#64/4
-       nop
-.Loop_select_w7:
-       ldrb    r4,[$inp,#64*0]
-       subs    $index,$index,#1
-       ldrb    r5,[$inp,#64*1]
-       ldrb    r6,[$inp,#64*2]
-       ldrb    r7,[$inp,#64*3]
-       add     $inp,$inp,#64*4
-       orr     r4,r4,r5,lsl#8
-       orr     r4,r4,r6,lsl#16
-       orr     r4,r4,r7,lsl#24
-       and     r4,r4,$mask
-       str     r4,[$out],#4
-       bne     .Loop_select_w7
-
-       ldmia   sp!,{r4-r7}
-#if __ARM_ARCH__>=5 || defined(__thumb__)
-       bx      lr
-#else
-       mov     pc,lr
-#endif
-.size  ecp_nistz256_select_w7,.-ecp_nistz256_select_w7
-___
-}
-if (0) {
-# In comparison to integer-only equivalent of below subroutine:
-#
-# Cortex-A8    +10%
-# Cortex-A9    -10%
-# Snapdragon S4        +5%
-#
-# As not all time is spent in multiplication, overall impact is deemed
-# too low to care about.
-
-my ($A0,$A1,$A2,$A3,$Bi,$zero,$temp)=map("d$_",(0..7));
-my $mask="q4";
-my $mult="q5";
-my @AxB=map("q$_",(8..15));
-
-my ($rptr,$aptr,$bptr,$toutptr)=map("r$_",(0..3));
-
-$code.=<<___;
-#if __ARM_ARCH__>=7
-.fpu   neon
-
-.globl ecp_nistz256_mul_mont_neon
-.type  ecp_nistz256_mul_mont_neon,%function
-.align 5
-ecp_nistz256_mul_mont_neon:
-       mov     ip,sp
-       stmdb   sp!,{r4-r9}
-       vstmdb  sp!,{q4-q5}             @ ABI specification says so
-
-       sub             $toutptr,sp,#40
-       vld1.32         {${Bi}[0]},[$bptr,:32]!
-       veor            $zero,$zero,$zero
-       vld1.32         {$A0-$A3}, [$aptr]              @ can't specify :32 :-(
-       vzip.16         $Bi,$zero
-       mov             sp,$toutptr                     @ alloca
-       vmov.i64        $mask,#0xffff
-
-       vmull.u32       @AxB[0],$Bi,${A0}[0]
-       vmull.u32       @AxB[1],$Bi,${A0}[1]
-       vmull.u32       @AxB[2],$Bi,${A1}[0]
-       vmull.u32       @AxB[3],$Bi,${A1}[1]
-        vshr.u64       $temp,@AxB[0]#lo,#16
-       vmull.u32       @AxB[4],$Bi,${A2}[0]
-        vadd.u64       @AxB[0]#hi,@AxB[0]#hi,$temp
-       vmull.u32       @AxB[5],$Bi,${A2}[1]
-        vshr.u64       $temp,@AxB[0]#hi,#16            @ upper 32 bits of a[0]*b[0]
-       vmull.u32       @AxB[6],$Bi,${A3}[0]
-        vand.u64       @AxB[0],@AxB[0],$mask           @ lower 32 bits of a[0]*b[0]
-       vmull.u32       @AxB[7],$Bi,${A3}[1]
-___
-for($i=1;$i<8;$i++) {
-$code.=<<___;
-        vld1.32        {${Bi}[0]},[$bptr,:32]!
-        veor           $zero,$zero,$zero
-       vadd.u64        @AxB[1]#lo,@AxB[1]#lo,$temp     @ reduction
-       vshl.u64        $mult,@AxB[0],#32
-       vadd.u64        @AxB[3],@AxB[3],@AxB[0]
-       vsub.u64        $mult,$mult,@AxB[0]
-        vzip.16        $Bi,$zero
-       vadd.u64        @AxB[6],@AxB[6],@AxB[0]
-       vadd.u64        @AxB[7],@AxB[7],$mult
-___
-       push(@AxB,shift(@AxB));
-$code.=<<___;
-       vmlal.u32       @AxB[0],$Bi,${A0}[0]
-       vmlal.u32       @AxB[1],$Bi,${A0}[1]
-       vmlal.u32       @AxB[2],$Bi,${A1}[0]
-       vmlal.u32       @AxB[3],$Bi,${A1}[1]
-        vshr.u64       $temp,@AxB[0]#lo,#16
-       vmlal.u32       @AxB[4],$Bi,${A2}[0]
-        vadd.u64       @AxB[0]#hi,@AxB[0]#hi,$temp
-       vmlal.u32       @AxB[5],$Bi,${A2}[1]
-        vshr.u64       $temp,@AxB[0]#hi,#16            @ upper 33 bits of a[0]*b[i]+t[0]
-       vmlal.u32       @AxB[6],$Bi,${A3}[0]
-        vand.u64       @AxB[0],@AxB[0],$mask           @ lower 32 bits of a[0]*b[0]
-       vmull.u32       @AxB[7],$Bi,${A3}[1]
-___
-}
-$code.=<<___;
-       vadd.u64        @AxB[1]#lo,@AxB[1]#lo,$temp     @ last reduction
-       vshl.u64        $mult,@AxB[0],#32
-       vadd.u64        @AxB[3],@AxB[3],@AxB[0]
-       vsub.u64        $mult,$mult,@AxB[0]
-       vadd.u64        @AxB[6],@AxB[6],@AxB[0]
-       vadd.u64        @AxB[7],@AxB[7],$mult
-
-       vshr.u64        $temp,@AxB[1]#lo,#16            @ convert
-       vadd.u64        @AxB[1]#hi,@AxB[1]#hi,$temp
-       vshr.u64        $temp,@AxB[1]#hi,#16
-       vzip.16         @AxB[1]#lo,@AxB[1]#hi
-___
-foreach (2..7) {
-$code.=<<___;
-       vadd.u64        @AxB[$_]#lo,@AxB[$_]#lo,$temp
-       vst1.32         {@AxB[$_-1]#lo[0]},[$toutptr,:32]!
-       vshr.u64        $temp,@AxB[$_]#lo,#16
-       vadd.u64        @AxB[$_]#hi,@AxB[$_]#hi,$temp
-       vshr.u64        $temp,@AxB[$_]#hi,#16
-       vzip.16         @AxB[$_]#lo,@AxB[$_]#hi
-___
-}
-$code.=<<___;
-       vst1.32         {@AxB[7]#lo[0]},[$toutptr,:32]!
-       vst1.32         {$temp},[$toutptr]              @ upper 33 bits
-
-       ldr     r1,[sp,#0]
-       ldr     r2,[sp,#4]
-       ldr     r3,[sp,#8]
-       subs    r1,r1,#-1
-       ldr     r4,[sp,#12]
-       sbcs    r2,r2,#-1
-       ldr     r5,[sp,#16]
-       sbcs    r3,r3,#-1
-       ldr     r6,[sp,#20]
-       sbcs    r4,r4,#0
-       ldr     r7,[sp,#24]
-       sbcs    r5,r5,#0
-       ldr     r8,[sp,#28]
-       sbcs    r6,r6,#0
-       ldr     r9,[sp,#32]                             @ top-most bit
-       sbcs    r7,r7,#1
-       sub     sp,ip,#40+16
-       sbcs    r8,r8,#-1
-       sbc     r9,r9,#0
-        vldmia  sp!,{q4-q5}
-
-       adds    r1,r1,r9
-       adcs    r2,r2,r9
-       str     r1,[$rptr,#0]
-       adcs    r3,r3,r9
-       str     r2,[$rptr,#4]
-       adcs    r4,r4,#0
-       str     r3,[$rptr,#8]
-       adcs    r5,r5,#0
-       str     r4,[$rptr,#12]
-       adcs    r6,r6,#0
-       str     r5,[$rptr,#16]
-       adcs    r7,r7,r9,lsr#31
-       str     r6,[$rptr,#20]
-       adcs    r8,r8,r9
-       str     r7,[$rptr,#24]
-       str     r8,[$rptr,#28]
-
-        ldmia   sp!,{r4-r9}
-       bx      lr
-.size  ecp_nistz256_mul_mont_neon,.-ecp_nistz256_mul_mont_neon
-#endif
-___
-}
-
-{{{
-########################################################################
-# Below $aN assignment matches order in which 256-bit result appears in
-# register bank at return from __ecp_nistz256_mul_mont, so that we can
-# skip over reloading it from memory. This means that below functions
-# use custom calling sequence accepting 256-bit input in registers,
-# output pointer in r0, $r_ptr, and optional pointer in r2, $b_ptr.
-#
-# See their "normal" counterparts for insights on calculations.
-
-my ($a0,$a1,$a2,$a3,$a4,$a5,$a6,$a7,
-    $t0,$t1,$t2,$t3)=map("r$_",(11,3..10,12,14,1));
-my $ff=$b_ptr;
-
-$code.=<<___;
-.type  __ecp_nistz256_sub_from,%function
-.align 5
-__ecp_nistz256_sub_from:
-       str     lr,[sp,#-4]!            @ push lr
-
-        ldr    $t0,[$b_ptr,#0]
-        ldr    $t1,[$b_ptr,#4]
-        ldr    $t2,[$b_ptr,#8]
-        ldr    $t3,[$b_ptr,#12]
-       subs    $a0,$a0,$t0
-        ldr    $t0,[$b_ptr,#16]
-       sbcs    $a1,$a1,$t1
-        ldr    $t1,[$b_ptr,#20]
-       sbcs    $a2,$a2,$t2
-        ldr    $t2,[$b_ptr,#24]
-       sbcs    $a3,$a3,$t3
-        ldr    $t3,[$b_ptr,#28]
-       sbcs    $a4,$a4,$t0
-       sbcs    $a5,$a5,$t1
-       sbcs    $a6,$a6,$t2
-       sbcs    $a7,$a7,$t3
-       sbc     $ff,$ff,$ff             @ broadcast borrow bit
-       ldr     lr,[sp],#4              @ pop lr
-
-       adds    $a0,$a0,$ff             @ add synthesized modulus
-       adcs    $a1,$a1,$ff
-       str     $a0,[$r_ptr,#0]
-       adcs    $a2,$a2,$ff
-       str     $a1,[$r_ptr,#4]
-       adcs    $a3,$a3,#0
-       str     $a2,[$r_ptr,#8]
-       adcs    $a4,$a4,#0
-       str     $a3,[$r_ptr,#12]
-       adcs    $a5,$a5,#0
-       str     $a4,[$r_ptr,#16]
-       adcs    $a6,$a6,$ff,lsr#31
-       str     $a5,[$r_ptr,#20]
-       adcs    $a7,$a7,$ff
-       str     $a6,[$r_ptr,#24]
-       str     $a7,[$r_ptr,#28]
-
-       mov     pc,lr
-.size  __ecp_nistz256_sub_from,.-__ecp_nistz256_sub_from
-
-.type  __ecp_nistz256_sub_morf,%function
-.align 5
-__ecp_nistz256_sub_morf:
-       str     lr,[sp,#-4]!            @ push lr
-
-        ldr    $t0,[$b_ptr,#0]
-        ldr    $t1,[$b_ptr,#4]
-        ldr    $t2,[$b_ptr,#8]
-        ldr    $t3,[$b_ptr,#12]
-       subs    $a0,$t0,$a0
-        ldr    $t0,[$b_ptr,#16]
-       sbcs    $a1,$t1,$a1
-        ldr    $t1,[$b_ptr,#20]
-       sbcs    $a2,$t2,$a2
-        ldr    $t2,[$b_ptr,#24]
-       sbcs    $a3,$t3,$a3
-        ldr    $t3,[$b_ptr,#28]
-       sbcs    $a4,$t0,$a4
-       sbcs    $a5,$t1,$a5
-       sbcs    $a6,$t2,$a6
-       sbcs    $a7,$t3,$a7
-       sbc     $ff,$ff,$ff             @ broadcast borrow bit
-       ldr     lr,[sp],#4              @ pop lr
-
-       adds    $a0,$a0,$ff             @ add synthesized modulus
-       adcs    $a1,$a1,$ff
-       str     $a0,[$r_ptr,#0]
-       adcs    $a2,$a2,$ff
-       str     $a1,[$r_ptr,#4]
-       adcs    $a3,$a3,#0
-       str     $a2,[$r_ptr,#8]
-       adcs    $a4,$a4,#0
-       str     $a3,[$r_ptr,#12]
-       adcs    $a5,$a5,#0
-       str     $a4,[$r_ptr,#16]
-       adcs    $a6,$a6,$ff,lsr#31
-       str     $a5,[$r_ptr,#20]
-       adcs    $a7,$a7,$ff
-       str     $a6,[$r_ptr,#24]
-       str     $a7,[$r_ptr,#28]
-
-       mov     pc,lr
-.size  __ecp_nistz256_sub_morf,.-__ecp_nistz256_sub_morf
-
-.type  __ecp_nistz256_add_self,%function
-.align 4
-__ecp_nistz256_add_self:
-       adds    $a0,$a0,$a0             @ a[0:7]+=a[0:7]
-       adcs    $a1,$a1,$a1
-       adcs    $a2,$a2,$a2
-       adcs    $a3,$a3,$a3
-       adcs    $a4,$a4,$a4
-       adcs    $a5,$a5,$a5
-       adcs    $a6,$a6,$a6
-       mov     $ff,#0
-       adcs    $a7,$a7,$a7
-       adc     $ff,$ff,#0
-
-       @ if a+b >= modulus, subtract modulus.
-       @
-       @ But since comparison implies subtraction, we subtract
-       @ modulus and then add it back if subtraction borrowed.
-
-       subs    $a0,$a0,#-1
-       sbcs    $a1,$a1,#-1
-       sbcs    $a2,$a2,#-1
-       sbcs    $a3,$a3,#0
-       sbcs    $a4,$a4,#0
-       sbcs    $a5,$a5,#0
-       sbcs    $a6,$a6,#1
-       sbcs    $a7,$a7,#-1
-       sbc     $ff,$ff,#0
-
-       @ Note that because mod has special form, i.e. consists of
-       @ 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       @ using value of borrow as a whole or extracting single bit.
-       @ Follow $ff register...
-
-       adds    $a0,$a0,$ff             @ add synthesized modulus
-       adcs    $a1,$a1,$ff
-       str     $a0,[$r_ptr,#0]
-       adcs    $a2,$a2,$ff
-       str     $a1,[$r_ptr,#4]
-       adcs    $a3,$a3,#0
-       str     $a2,[$r_ptr,#8]
-       adcs    $a4,$a4,#0
-       str     $a3,[$r_ptr,#12]
-       adcs    $a5,$a5,#0
-       str     $a4,[$r_ptr,#16]
-       adcs    $a6,$a6,$ff,lsr#31
-       str     $a5,[$r_ptr,#20]
-       adcs    $a7,$a7,$ff
-       str     $a6,[$r_ptr,#24]
-       str     $a7,[$r_ptr,#28]
-
-       mov     pc,lr
-.size  __ecp_nistz256_add_self,.-__ecp_nistz256_add_self
-
-___
-
-########################################################################
-# following subroutines are "literal" implementation of those found in
-# ecp_nistz256.c
-#
-########################################################################
-# void ecp_nistz256_point_double(P256_POINT *out,const P256_POINT *inp);
-#
-{
-my ($S,$M,$Zsqr,$in_x,$tmp0)=map(32*$_,(0..4));
-# above map() describes stack layout with 5 temporary
-# 256-bit vectors on top. Then note that we push
-# starting from r0, which means that we have copy of
-# input arguments just below these temporary vectors.
-
-$code.=<<___;
-.globl ecp_nistz256_point_double
-.type  ecp_nistz256_point_double,%function
-.align 5
-ecp_nistz256_point_double:
-       stmdb   sp!,{r0-r12,lr}         @ push from r0, unusual, but intentional
-       sub     sp,sp,#32*5
-
-.Lpoint_double_shortcut:
-       add     r3,sp,#$in_x
-       ldmia   $a_ptr!,{r4-r11}        @ copy in_x
-       stmia   r3,{r4-r11}
-
-       add     $r_ptr,sp,#$S
-       bl      __ecp_nistz256_mul_by_2 @ p256_mul_by_2(S, in_y);
-
-       add     $b_ptr,$a_ptr,#32
-       add     $a_ptr,$a_ptr,#32
-       add     $r_ptr,sp,#$Zsqr
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(Zsqr, in_z);
-
-       add     $a_ptr,sp,#$S
-       add     $b_ptr,sp,#$S
-       add     $r_ptr,sp,#$S
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(S, S);
-
-       ldr     $b_ptr,[sp,#32*5+4]
-       add     $a_ptr,$b_ptr,#32
-       add     $b_ptr,$b_ptr,#64
-       add     $r_ptr,sp,#$tmp0
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(tmp0, in_z, in_y);
-
-       ldr     $r_ptr,[sp,#32*5]
-       add     $r_ptr,$r_ptr,#64
-       bl      __ecp_nistz256_add_self @ p256_mul_by_2(res_z, tmp0);
-
-       add     $a_ptr,sp,#$in_x
-       add     $b_ptr,sp,#$Zsqr
-       add     $r_ptr,sp,#$M
-       bl      __ecp_nistz256_add      @ p256_add(M, in_x, Zsqr);
-
-       add     $a_ptr,sp,#$in_x
-       add     $b_ptr,sp,#$Zsqr
-       add     $r_ptr,sp,#$Zsqr
-       bl      __ecp_nistz256_sub      @ p256_sub(Zsqr, in_x, Zsqr);
-
-       add     $a_ptr,sp,#$S
-       add     $b_ptr,sp,#$S
-       add     $r_ptr,sp,#$tmp0
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(tmp0, S);
-
-       add     $a_ptr,sp,#$Zsqr
-       add     $b_ptr,sp,#$M
-       add     $r_ptr,sp,#$M
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(M, M, Zsqr);
-
-       ldr     $r_ptr,[sp,#32*5]
-       add     $a_ptr,sp,#$tmp0
-       add     $r_ptr,$r_ptr,#32
-       bl      __ecp_nistz256_div_by_2 @ p256_div_by_2(res_y, tmp0);
-
-       add     $a_ptr,sp,#$M
-       add     $r_ptr,sp,#$M
-       bl      __ecp_nistz256_mul_by_3 @ p256_mul_by_3(M, M);
-
-       add     $a_ptr,sp,#$in_x
-       add     $b_ptr,sp,#$S
-       add     $r_ptr,sp,#$S
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S, S, in_x);
-
-       add     $r_ptr,sp,#$tmp0
-       bl      __ecp_nistz256_add_self @ p256_mul_by_2(tmp0, S);
-
-       ldr     $r_ptr,[sp,#32*5]
-       add     $a_ptr,sp,#$M
-       add     $b_ptr,sp,#$M
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(res_x, M);
-
-       add     $b_ptr,sp,#$tmp0
-       bl      __ecp_nistz256_sub_from @ p256_sub(res_x, res_x, tmp0);
-
-       add     $b_ptr,sp,#$S
-       add     $r_ptr,sp,#$S
-       bl      __ecp_nistz256_sub_morf @ p256_sub(S, S, res_x);
-
-       add     $a_ptr,sp,#$M
-       add     $b_ptr,sp,#$S
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S, S, M);
-
-       ldr     $r_ptr,[sp,#32*5]
-       add     $b_ptr,$r_ptr,#32
-       add     $r_ptr,$r_ptr,#32
-       bl      __ecp_nistz256_sub_from @ p256_sub(res_y, S, res_y);
-
-       add     sp,sp,#32*5+16          @ +16 means "skip even over saved r0-r3"
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_point_double,.-ecp_nistz256_point_double
-___
-}
-
-########################################################################
-# void ecp_nistz256_point_add(P256_POINT *out,const P256_POINT *in1,
-#                            const P256_POINT *in2);
-{
-my ($res_x,$res_y,$res_z,
-    $in1_x,$in1_y,$in1_z,
-    $in2_x,$in2_y,$in2_z,
-    $H,$Hsqr,$R,$Rsqr,$Hcub,
-    $U1,$U2,$S1,$S2)=map(32*$_,(0..17));
-my ($Z1sqr, $Z2sqr) = ($Hsqr, $Rsqr);
-# above map() describes stack layout with 18 temporary
-# 256-bit vectors on top. Then note that we push
-# starting from r0, which means that we have copy of
-# input arguments just below these temporary vectors.
-# We use three of them for !in1infty, !in2intfy and
-# result of check for zero.
-
-$code.=<<___;
-.globl ecp_nistz256_point_add
-.type  ecp_nistz256_point_add,%function
-.align 5
-ecp_nistz256_point_add:
-       stmdb   sp!,{r0-r12,lr}         @ push from r0, unusual, but intentional
-       sub     sp,sp,#32*18+16
-
-       ldmia   $b_ptr!,{r4-r11}        @ copy in2_x
-       add     r3,sp,#$in2_x
-       stmia   r3!,{r4-r11}
-       ldmia   $b_ptr!,{r4-r11}        @ copy in2_y
-       stmia   r3!,{r4-r11}
-       ldmia   $b_ptr,{r4-r11}         @ copy in2_z
-       orr     r12,r4,r5
-       orr     r12,r12,r6
-       orr     r12,r12,r7
-       orr     r12,r12,r8
-       orr     r12,r12,r9
-       orr     r12,r12,r10
-       orr     r12,r12,r11
-       cmp     r12,#0
-#ifdef __thumb2__
-       it      ne
-#endif
-       movne   r12,#-1
-       stmia   r3,{r4-r11}
-       str     r12,[sp,#32*18+8]       @ !in2infty
-
-       ldmia   $a_ptr!,{r4-r11}        @ copy in1_x
-       add     r3,sp,#$in1_x
-       stmia   r3!,{r4-r11}
-       ldmia   $a_ptr!,{r4-r11}        @ copy in1_y
-       stmia   r3!,{r4-r11}
-       ldmia   $a_ptr,{r4-r11}         @ copy in1_z
-       orr     r12,r4,r5
-       orr     r12,r12,r6
-       orr     r12,r12,r7
-       orr     r12,r12,r8
-       orr     r12,r12,r9
-       orr     r12,r12,r10
-       orr     r12,r12,r11
-       cmp     r12,#0
-#ifdef __thumb2__
-       it      ne
-#endif
-       movne   r12,#-1
-       stmia   r3,{r4-r11}
-       str     r12,[sp,#32*18+4]       @ !in1infty
-
-       add     $a_ptr,sp,#$in2_z
-       add     $b_ptr,sp,#$in2_z
-       add     $r_ptr,sp,#$Z2sqr
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(Z2sqr, in2_z);
-
-       add     $a_ptr,sp,#$in1_z
-       add     $b_ptr,sp,#$in1_z
-       add     $r_ptr,sp,#$Z1sqr
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(Z1sqr, in1_z);
-
-       add     $a_ptr,sp,#$in2_z
-       add     $b_ptr,sp,#$Z2sqr
-       add     $r_ptr,sp,#$S1
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S1, Z2sqr, in2_z);
-
-       add     $a_ptr,sp,#$in1_z
-       add     $b_ptr,sp,#$Z1sqr
-       add     $r_ptr,sp,#$S2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S2, Z1sqr, in1_z);
-
-       add     $a_ptr,sp,#$in1_y
-       add     $b_ptr,sp,#$S1
-       add     $r_ptr,sp,#$S1
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S1, S1, in1_y);
-
-       add     $a_ptr,sp,#$in2_y
-       add     $b_ptr,sp,#$S2
-       add     $r_ptr,sp,#$S2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S2, S2, in2_y);
-
-       add     $b_ptr,sp,#$S1
-       add     $r_ptr,sp,#$R
-       bl      __ecp_nistz256_sub_from @ p256_sub(R, S2, S1);
-
-       orr     $a0,$a0,$a1             @ see if result is zero
-       orr     $a2,$a2,$a3
-       orr     $a4,$a4,$a5
-       orr     $a0,$a0,$a2
-       orr     $a4,$a4,$a6
-       orr     $a0,$a0,$a7
-        add    $a_ptr,sp,#$in1_x
-       orr     $a0,$a0,$a4
-        add    $b_ptr,sp,#$Z2sqr
-       str     $a0,[sp,#32*18+12]
-
-       add     $r_ptr,sp,#$U1
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(U1, in1_x, Z2sqr);
-
-       add     $a_ptr,sp,#$in2_x
-       add     $b_ptr,sp,#$Z1sqr
-       add     $r_ptr,sp,#$U2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(U2, in2_x, Z1sqr);
-
-       add     $b_ptr,sp,#$U1
-       add     $r_ptr,sp,#$H
-       bl      __ecp_nistz256_sub_from @ p256_sub(H, U2, U1);
-
-       orr     $a0,$a0,$a1             @ see if result is zero
-       orr     $a2,$a2,$a3
-       orr     $a4,$a4,$a5
-       orr     $a0,$a0,$a2
-       orr     $a4,$a4,$a6
-       orr     $a0,$a0,$a7
-       orrs    $a0,$a0,$a4
-
-       bne     .Ladd_proceed           @ is_equal(U1,U2)?
-
-       ldr     $t0,[sp,#32*18+4]
-       ldr     $t1,[sp,#32*18+8]
-       ldr     $t2,[sp,#32*18+12]
-       tst     $t0,$t1
-       beq     .Ladd_proceed           @ (in1infty || in2infty)?
-       tst     $t2,$t2
-       beq     .Ladd_double            @ is_equal(S1,S2)?
-
-       ldr     $r_ptr,[sp,#32*18+16]
-       eor     r4,r4,r4
-       eor     r5,r5,r5
-       eor     r6,r6,r6
-       eor     r7,r7,r7
-       eor     r8,r8,r8
-       eor     r9,r9,r9
-       eor     r10,r10,r10
-       eor     r11,r11,r11
-       stmia   $r_ptr!,{r4-r11}
-       stmia   $r_ptr!,{r4-r11}
-       stmia   $r_ptr!,{r4-r11}
-       b       .Ladd_done
-
-.align 4
-.Ladd_double:
-       ldr     $a_ptr,[sp,#32*18+20]
-       add     sp,sp,#32*(18-5)+16     @ difference in frame sizes
-       b       .Lpoint_double_shortcut
-
-.align 4
-.Ladd_proceed:
-       add     $a_ptr,sp,#$R
-       add     $b_ptr,sp,#$R
-       add     $r_ptr,sp,#$Rsqr
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(Rsqr, R);
-
-       add     $a_ptr,sp,#$H
-       add     $b_ptr,sp,#$in1_z
-       add     $r_ptr,sp,#$res_z
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(res_z, H, in1_z);
-
-       add     $a_ptr,sp,#$H
-       add     $b_ptr,sp,#$H
-       add     $r_ptr,sp,#$Hsqr
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(Hsqr, H);
-
-       add     $a_ptr,sp,#$in2_z
-       add     $b_ptr,sp,#$res_z
-       add     $r_ptr,sp,#$res_z
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(res_z, res_z, in2_z);
-
-       add     $a_ptr,sp,#$H
-       add     $b_ptr,sp,#$Hsqr
-       add     $r_ptr,sp,#$Hcub
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(Hcub, Hsqr, H);
-
-       add     $a_ptr,sp,#$Hsqr
-       add     $b_ptr,sp,#$U1
-       add     $r_ptr,sp,#$U2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(U2, U1, Hsqr);
-
-       add     $r_ptr,sp,#$Hsqr
-       bl      __ecp_nistz256_add_self @ p256_mul_by_2(Hsqr, U2);
-
-       add     $b_ptr,sp,#$Rsqr
-       add     $r_ptr,sp,#$res_x
-       bl      __ecp_nistz256_sub_morf @ p256_sub(res_x, Rsqr, Hsqr);
-
-       add     $b_ptr,sp,#$Hcub
-       bl      __ecp_nistz256_sub_from @  p256_sub(res_x, res_x, Hcub);
-
-       add     $b_ptr,sp,#$U2
-       add     $r_ptr,sp,#$res_y
-       bl      __ecp_nistz256_sub_morf @ p256_sub(res_y, U2, res_x);
-
-       add     $a_ptr,sp,#$Hcub
-       add     $b_ptr,sp,#$S1
-       add     $r_ptr,sp,#$S2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S2, S1, Hcub);
-
-       add     $a_ptr,sp,#$R
-       add     $b_ptr,sp,#$res_y
-       add     $r_ptr,sp,#$res_y
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(res_y, res_y, R);
-
-       add     $b_ptr,sp,#$S2
-       bl      __ecp_nistz256_sub_from @ p256_sub(res_y, res_y, S2);
-
-       ldr     r11,[sp,#32*18+4]       @ !in1intfy
-       ldr     r12,[sp,#32*18+8]       @ !in2intfy
-       add     r1,sp,#$res_x
-       add     r2,sp,#$in2_x
-       and     r10,r11,r12
-       mvn     r11,r11
-       add     r3,sp,#$in1_x
-       and     r11,r11,r12
-       mvn     r12,r12
-       ldr     $r_ptr,[sp,#32*18+16]
-___
-for($i=0;$i<96;$i+=8) {                        # conditional moves
-$code.=<<___;
-       ldmia   r1!,{r4-r5}             @ res_x
-       ldmia   r2!,{r6-r7}             @ in2_x
-       ldmia   r3!,{r8-r9}             @ in1_x
-       and     r4,r4,r10
-       and     r5,r5,r10
-       and     r6,r6,r11
-       and     r7,r7,r11
-       and     r8,r8,r12
-       and     r9,r9,r12
-       orr     r4,r4,r6
-       orr     r5,r5,r7
-       orr     r4,r4,r8
-       orr     r5,r5,r9
-       stmia   $r_ptr!,{r4-r5}
-___
-}
-$code.=<<___;
-.Ladd_done:
-       add     sp,sp,#32*18+16+16      @ +16 means "skip even over saved r0-r3"
-#if __ARM_ARCH__>=5 || defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_point_add,.-ecp_nistz256_point_add
-___
-}
-
-########################################################################
-# void ecp_nistz256_point_add_affine(P256_POINT *out,const P256_POINT *in1,
-#                                   const P256_POINT_AFFINE *in2);
-{
-my ($res_x,$res_y,$res_z,
-    $in1_x,$in1_y,$in1_z,
-    $in2_x,$in2_y,
-    $U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr)=map(32*$_,(0..14));
-my $Z1sqr = $S2;
-# above map() describes stack layout with 18 temporary
-# 256-bit vectors on top. Then note that we push
-# starting from r0, which means that we have copy of
-# input arguments just below these temporary vectors.
-# We use two of them for !in1infty, !in2intfy.
-
-my @ONE_mont=(1,0,0,-1,-1,-1,-2,0);
-
-$code.=<<___;
-.globl ecp_nistz256_point_add_affine
-.type  ecp_nistz256_point_add_affine,%function
-.align 5
-ecp_nistz256_point_add_affine:
-       stmdb   sp!,{r0-r12,lr}         @ push from r0, unusual, but intentional
-       sub     sp,sp,#32*15
-
-       ldmia   $a_ptr!,{r4-r11}        @ copy in1_x
-       add     r3,sp,#$in1_x
-       stmia   r3!,{r4-r11}
-       ldmia   $a_ptr!,{r4-r11}        @ copy in1_y
-       stmia   r3!,{r4-r11}
-       ldmia   $a_ptr,{r4-r11}         @ copy in1_z
-       orr     r12,r4,r5
-       orr     r12,r12,r6
-       orr     r12,r12,r7
-       orr     r12,r12,r8
-       orr     r12,r12,r9
-       orr     r12,r12,r10
-       orr     r12,r12,r11
-       cmp     r12,#0
-#ifdef __thumb2__
-       it      ne
-#endif
-       movne   r12,#-1
-       stmia   r3,{r4-r11}
-       str     r12,[sp,#32*15+4]       @ !in1infty
-
-       ldmia   $b_ptr!,{r4-r11}        @ copy in2_x
-       add     r3,sp,#$in2_x
-       orr     r12,r4,r5
-       orr     r12,r12,r6
-       orr     r12,r12,r7
-       orr     r12,r12,r8
-       orr     r12,r12,r9
-       orr     r12,r12,r10
-       orr     r12,r12,r11
-       stmia   r3!,{r4-r11}
-       ldmia   $b_ptr!,{r4-r11}        @ copy in2_y
-       orr     r12,r12,r4
-       orr     r12,r12,r5
-       orr     r12,r12,r6
-       orr     r12,r12,r7
-       orr     r12,r12,r8
-       orr     r12,r12,r9
-       orr     r12,r12,r10
-       orr     r12,r12,r11
-       stmia   r3!,{r4-r11}
-       cmp     r12,#0
-#ifdef __thumb2__
-       it      ne
-#endif
-       movne   r12,#-1
-       str     r12,[sp,#32*15+8]       @ !in2infty
-
-       add     $a_ptr,sp,#$in1_z
-       add     $b_ptr,sp,#$in1_z
-       add     $r_ptr,sp,#$Z1sqr
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(Z1sqr, in1_z);
-
-       add     $a_ptr,sp,#$Z1sqr
-       add     $b_ptr,sp,#$in2_x
-       add     $r_ptr,sp,#$U2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(U2, Z1sqr, in2_x);
-
-       add     $b_ptr,sp,#$in1_x
-       add     $r_ptr,sp,#$H
-       bl      __ecp_nistz256_sub_from @ p256_sub(H, U2, in1_x);
-
-       add     $a_ptr,sp,#$Z1sqr
-       add     $b_ptr,sp,#$in1_z
-       add     $r_ptr,sp,#$S2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S2, Z1sqr, in1_z);
-
-       add     $a_ptr,sp,#$H
-       add     $b_ptr,sp,#$in1_z
-       add     $r_ptr,sp,#$res_z
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(res_z, H, in1_z);
-
-       add     $a_ptr,sp,#$in2_y
-       add     $b_ptr,sp,#$S2
-       add     $r_ptr,sp,#$S2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S2, S2, in2_y);
-
-       add     $b_ptr,sp,#$in1_y
-       add     $r_ptr,sp,#$R
-       bl      __ecp_nistz256_sub_from @ p256_sub(R, S2, in1_y);
-
-       add     $a_ptr,sp,#$H
-       add     $b_ptr,sp,#$H
-       add     $r_ptr,sp,#$Hsqr
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(Hsqr, H);
-
-       add     $a_ptr,sp,#$R
-       add     $b_ptr,sp,#$R
-       add     $r_ptr,sp,#$Rsqr
-       bl      __ecp_nistz256_mul_mont @ p256_sqr_mont(Rsqr, R);
-
-       add     $a_ptr,sp,#$H
-       add     $b_ptr,sp,#$Hsqr
-       add     $r_ptr,sp,#$Hcub
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(Hcub, Hsqr, H);
-
-       add     $a_ptr,sp,#$Hsqr
-       add     $b_ptr,sp,#$in1_x
-       add     $r_ptr,sp,#$U2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(U2, in1_x, Hsqr);
-
-       add     $r_ptr,sp,#$Hsqr
-       bl      __ecp_nistz256_add_self @ p256_mul_by_2(Hsqr, U2);
-
-       add     $b_ptr,sp,#$Rsqr
-       add     $r_ptr,sp,#$res_x
-       bl      __ecp_nistz256_sub_morf @ p256_sub(res_x, Rsqr, Hsqr);
-
-       add     $b_ptr,sp,#$Hcub
-       bl      __ecp_nistz256_sub_from @  p256_sub(res_x, res_x, Hcub);
-
-       add     $b_ptr,sp,#$U2
-       add     $r_ptr,sp,#$res_y
-       bl      __ecp_nistz256_sub_morf @ p256_sub(res_y, U2, res_x);
-
-       add     $a_ptr,sp,#$Hcub
-       add     $b_ptr,sp,#$in1_y
-       add     $r_ptr,sp,#$S2
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(S2, in1_y, Hcub);
-
-       add     $a_ptr,sp,#$R
-       add     $b_ptr,sp,#$res_y
-       add     $r_ptr,sp,#$res_y
-       bl      __ecp_nistz256_mul_mont @ p256_mul_mont(res_y, res_y, R);
-
-       add     $b_ptr,sp,#$S2
-       bl      __ecp_nistz256_sub_from @ p256_sub(res_y, res_y, S2);
-
-       ldr     r11,[sp,#32*15+4]       @ !in1intfy
-       ldr     r12,[sp,#32*15+8]       @ !in2intfy
-       add     r1,sp,#$res_x
-       add     r2,sp,#$in2_x
-       and     r10,r11,r12
-       mvn     r11,r11
-       add     r3,sp,#$in1_x
-       and     r11,r11,r12
-       mvn     r12,r12
-       ldr     $r_ptr,[sp,#32*15]
-___
-for($i=0;$i<64;$i+=8) {                        # conditional moves
-$code.=<<___;
-       ldmia   r1!,{r4-r5}             @ res_x
-       ldmia   r2!,{r6-r7}             @ in2_x
-       ldmia   r3!,{r8-r9}             @ in1_x
-       and     r4,r4,r10
-       and     r5,r5,r10
-       and     r6,r6,r11
-       and     r7,r7,r11
-       and     r8,r8,r12
-       and     r9,r9,r12
-       orr     r4,r4,r6
-       orr     r5,r5,r7
-       orr     r4,r4,r8
-       orr     r5,r5,r9
-       stmia   $r_ptr!,{r4-r5}
-___
-}
-for(;$i<96;$i+=8) {
-my $j=($i-64)/4;
-$code.=<<___;
-       ldmia   r1!,{r4-r5}             @ res_z
-       ldmia   r3!,{r8-r9}             @ in1_z
-       and     r4,r4,r10
-       and     r5,r5,r10
-       and     r6,r11,#@ONE_mont[$j]
-       and     r7,r11,#@ONE_mont[$j+1]
-       and     r8,r8,r12
-       and     r9,r9,r12
-       orr     r4,r4,r6
-       orr     r5,r5,r7
-       orr     r4,r4,r8
-       orr     r5,r5,r9
-       stmia   $r_ptr!,{r4-r5}
-___
-}
-$code.=<<___;
-       add     sp,sp,#32*15+16         @ +16 means "skip even over saved r0-r3"
-#if __ARM_ARCH__>=5 || !defined(__thumb__)
-       ldmia   sp!,{r4-r12,pc}
-#else
-       ldmia   sp!,{r4-r12,lr}
-       bx      lr                      @ interoperable with Thumb ISA:-)
-#endif
-.size  ecp_nistz256_point_add_affine,.-ecp_nistz256_point_add_affine
-___
-}                                      }}}
-
-foreach (split("\n",$code)) {
-       s/\`([^\`]*)\`/eval $1/geo;
-
-       s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo;
-
-       print $_,"\n";
-}
-close STDOUT;  # enforce flush
diff --git a/lib/libcrypto/ec/asm/ecp_nistz256-sparcv9.pl b/lib/libcrypto/ec/asm/ecp_nistz256-sparcv9.pl
deleted file mode 100644 (file)
index 49460fe..0000000
+++ /dev/null
@@ -1,2890 +0,0 @@
-#! /usr/bin/env perl
-# $OpenBSD: ecp_nistz256-sparcv9.pl,v 1.2 2022/12/26 07:18:51 jmc Exp $
-#
-# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License").  You may not use
-# this file except in compliance with the License.  You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-
-
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project. The module is, however, dual licensed under OpenSSL and
-# CRYPTOGAMS licenses depending on where you obtain it. For further
-# details see http://www.openssl.org/~appro/cryptogams/.
-# ====================================================================
-#
-# ECP_NISTZ256 module for SPARCv9.
-#
-# February 2015.
-#
-# Original ECP_NISTZ256 submission targeting x86_64 is detailed in
-# http://eprint.iacr.org/2013/816. In the process of adaptation
-# original .c module was made 32-bit savvy in order to make this
-# implementation possible.
-#
-#                      with/without -DECP_NISTZ256_ASM
-# UltraSPARC III       +12-18%
-# SPARC T4             +99-550% (+66-150% on 32-bit Solaris)
-#
-# Ranges denote minimum and maximum improvement coefficients depending
-# on benchmark. Lower coefficients are for ECDSA sign, server-side
-# operation. Keep in mind that +200% means 3x improvement.
-
-# Uncomment when all sparcv9 assembly generators are updated to take the output
-# file as last argument...
-# $output = pop;
-# open STDOUT,">$output";
-
-$code.=<<___;
-#define STACK_FRAME    192
-#define        STACK_BIAS      2047
-
-#define LOCALS (STACK_BIAS+STACK_FRAME)
-.register      %g2,#scratch
-.register      %g3,#scratch
-# define STACK64_FRAME STACK_FRAME
-# define LOCALS64      LOCALS
-
-.section       ".text",#alloc,#execinstr
-___
-
-{{{
-my ($rp,$ap,$bp)=map("%i$_",(0..2));
-my @acc=map("%l$_",(0..7));
-my ($t0,$t1,$t2,$t3,$t4,$t5,$t6,$t7)=(map("%o$_",(0..5)),"%g4","%g5");
-my ($bi,$a0,$mask,$carry)=(map("%i$_",(3..5)),"%g1");
-my ($rp_real,$ap_real)=("%g2","%g3");
-
-$code.=<<___;
-.align 64
-.Lone:
-.long  1,0,0,0,0,0,0,0
-
-! void ecp_nistz256_from_mont(BN_ULONG %i0[8],const BN_ULONG %i1[8]);
-.globl ecp_nistz256_from_mont
-.align 32
-ecp_nistz256_from_mont:
-       save    %sp,-STACK_FRAME,%sp
-       nop
-1:     call    .+8
-       add     %o7,.Lone-1b,$bp
-       call    __ecp_nistz256_mul_mont
-       nop
-       ret
-       restore
-.type  ecp_nistz256_from_mont,#function
-.size  ecp_nistz256_from_mont,.-ecp_nistz256_from_mont
-
-! void ecp_nistz256_mul_mont(BN_ULONG %i0[8],const BN_ULONG %i1[8],
-!                                            const BN_ULONG %i2[8]);
-.globl ecp_nistz256_mul_mont
-.align 32
-ecp_nistz256_mul_mont:
-       save    %sp,-STACK_FRAME,%sp
-       nop
-       call    __ecp_nistz256_mul_mont
-       nop
-       ret
-       restore
-.type  ecp_nistz256_mul_mont,#function
-.size  ecp_nistz256_mul_mont,.-ecp_nistz256_mul_mont
-
-! void ecp_nistz256_sqr_mont(BN_ULONG %i0[8],const BN_ULONG %i2[8]);
-.globl ecp_nistz256_sqr_mont
-.align 32
-ecp_nistz256_sqr_mont:
-       save    %sp,-STACK_FRAME,%sp
-       mov     $ap,$bp
-       call    __ecp_nistz256_mul_mont
-       nop
-       ret
-       restore
-.type  ecp_nistz256_sqr_mont,#function
-.size  ecp_nistz256_sqr_mont,.-ecp_nistz256_sqr_mont
-___
-
-########################################################################
-# Special thing to keep in mind is that $t0-$t7 hold 64-bit values,
-# while all others are meant to keep 32. "Meant to" means that additions
-# to @acc[0-7] do "contaminate" upper bits, but they are cleared before
-# they can affect outcome (follow 'and' with $mask). Also keep in mind
-# that addition with carry is addition with 32-bit carry, even though
-# CPU is 64-bit. [Addition with 64-bit carry was introduced in T3, see
-# below for VIS3 code paths.]
-
-$code.=<<___;
-.align 32
-__ecp_nistz256_mul_mont:
-       ld      [$bp+0],$bi             ! b[0]
-       mov     -1,$mask
-       ld      [$ap+0],$a0
-       srl     $mask,0,$mask           ! 0xffffffff
-       ld      [$ap+4],$t1
-       ld      [$ap+8],$t2
-       ld      [$ap+12],$t3
-       ld      [$ap+16],$t4
-       ld      [$ap+20],$t5
-       ld      [$ap+24],$t6
-       ld      [$ap+28],$t7
-       mulx    $a0,$bi,$t0             ! a[0-7]*b[0], 64-bit results
-       mulx    $t1,$bi,$t1
-       mulx    $t2,$bi,$t2
-       mulx    $t3,$bi,$t3
-       mulx    $t4,$bi,$t4
-       mulx    $t5,$bi,$t5
-       mulx    $t6,$bi,$t6
-       mulx    $t7,$bi,$t7
-       srlx    $t0,32,@acc[1]          ! extract high parts
-       srlx    $t1,32,@acc[2]
-       srlx    $t2,32,@acc[3]
-       srlx    $t3,32,@acc[4]
-       srlx    $t4,32,@acc[5]
-       srlx    $t5,32,@acc[6]
-       srlx    $t6,32,@acc[7]
-       srlx    $t7,32,@acc[0]          ! "@acc[8]"
-       mov     0,$carry
-___
-for($i=1;$i<8;$i++) {
-$code.=<<___;
-       addcc   @acc[1],$t1,@acc[1]     ! accumulate high parts
-       ld      [$bp+4*$i],$bi          ! b[$i]
-       ld      [$ap+4],$t1             ! re-load a[1-7]
-       addccc  @acc[2],$t2,@acc[2]
-       addccc  @acc[3],$t3,@acc[3]
-       ld      [$ap+8],$t2
-       ld      [$ap+12],$t3
-       addccc  @acc[4],$t4,@acc[4]
-       addccc  @acc[5],$t5,@acc[5]
-       ld      [$ap+16],$t4
-       ld      [$ap+20],$t5
-       addccc  @acc[6],$t6,@acc[6]
-       addccc  @acc[7],$t7,@acc[7]
-       ld      [$ap+24],$t6
-       ld      [$ap+28],$t7
-       addccc  @acc[0],$carry,@acc[0]  ! "@acc[8]"
-       addc    %g0,%g0,$carry
-___
-       # Reduction iteration is normally performed by accumulating
-       # result of multiplication of modulus by "magic" digit [and
-       # omitting least significant word, which is guaranteed to
-       # be 0], but thanks to special form of modulus and "magic"
-       # digit being equal to least significant word, it can be
-       # performed with additions and subtractions alone. Indeed:
-       #
-       #        ffff.0001.0000.0000.0000.ffff.ffff.ffff
-       # *                                         abcd
-       # + xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.abcd
-       #
-       # Now observing that ff..ff*x = (2^n-1)*x = 2^n*x-x, we
-       # rewrite above as:
-       #
-       #   xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.abcd
-       # + abcd.0000.abcd.0000.0000.abcd.0000.0000.0000
-       # -      abcd.0000.0000.0000.0000.0000.0000.abcd
-       #
-       # or marking redundant operations:
-       #
-       #   xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.----
-       # + abcd.0000.abcd.0000.0000.abcd.----.----.----
-       # -      abcd.----.----.----.----.----.----.----
-
-$code.=<<___;
-       ! multiplication-less reduction
-       addcc   @acc[3],$t0,@acc[3]     ! r[3]+=r[0]
-       addccc  @acc[4],%g0,@acc[4]     ! r[4]+=0
-        and    @acc[1],$mask,@acc[1]
-        and    @acc[2],$mask,@acc[2]
-       addccc  @acc[5],%g0,@acc[5]     ! r[5]+=0
-       addccc  @acc[6],$t0,@acc[6]     ! r[6]+=r[0]
-        and    @acc[3],$mask,@acc[3]
-        and    @acc[4],$mask,@acc[4]
-       addccc  @acc[7],%g0,@acc[7]     ! r[7]+=0
-       addccc  @acc[0],$t0,@acc[0]     ! r[8]+=r[0]    "@acc[8]"
-        and    @acc[5],$mask,@acc[5]
-        and    @acc[6],$mask,@acc[6]
-       addc    $carry,%g0,$carry       ! top-most carry
-       subcc   @acc[7],$t0,@acc[7]     ! r[7]-=r[0]
-       subccc  @acc[0],%g0,@acc[0]     ! r[8]-=0       "@acc[8]"
-       subc    $carry,%g0,$carry       ! top-most carry
-        and    @acc[7],$mask,@acc[7]
-        and    @acc[0],$mask,@acc[0]   ! "@acc[8]"
-___
-       push(@acc,shift(@acc));         # rotate registers to "omit" acc[0]
-$code.=<<___;
-       mulx    $a0,$bi,$t0             ! a[0-7]*b[$i], 64-bit results
-       mulx    $t1,$bi,$t1
-       mulx    $t2,$bi,$t2
-       mulx    $t3,$bi,$t3
-       mulx    $t4,$bi,$t4
-       mulx    $t5,$bi,$t5
-       mulx    $t6,$bi,$t6
-       mulx    $t7,$bi,$t7
-       add     @acc[0],$t0,$t0         ! accumulate low parts, can't overflow
-       add     @acc[1],$t1,$t1
-       srlx    $t0,32,@acc[1]          ! extract high parts
-       add     @acc[2],$t2,$t2
-       srlx    $t1,32,@acc[2]
-       add     @acc[3],$t3,$t3
-       srlx    $t2,32,@acc[3]
-       add     @acc[4],$t4,$t4
-       srlx    $t3,32,@acc[4]
-       add     @acc[5],$t5,$t5
-       srlx    $t4,32,@acc[5]
-       add     @acc[6],$t6,$t6
-       srlx    $t5,32,@acc[6]
-       add     @acc[7],$t7,$t7
-       srlx    $t6,32,@acc[7]
-       srlx    $t7,32,@acc[0]          ! "@acc[8]"
-___
-}
-$code.=<<___;
-       addcc   @acc[1],$t1,@acc[1]     ! accumulate high parts
-       addccc  @acc[2],$t2,@acc[2]
-       addccc  @acc[3],$t3,@acc[3]
-       addccc  @acc[4],$t4,@acc[4]
-       addccc  @acc[5],$t5,@acc[5]
-       addccc  @acc[6],$t6,@acc[6]
-       addccc  @acc[7],$t7,@acc[7]
-       addccc  @acc[0],$carry,@acc[0]  ! "@acc[8]"
-       addc    %g0,%g0,$carry
-
-       addcc   @acc[3],$t0,@acc[3]     ! multiplication-less reduction
-       addccc  @acc[4],%g0,@acc[4]
-       addccc  @acc[5],%g0,@acc[5]
-       addccc  @acc[6],$t0,@acc[6]
-       addccc  @acc[7],%g0,@acc[7]
-       addccc  @acc[0],$t0,@acc[0]     ! "@acc[8]"
-       addc    $carry,%g0,$carry
-       subcc   @acc[7],$t0,@acc[7]
-       subccc  @acc[0],%g0,@acc[0]     ! "@acc[8]"
-       subc    $carry,%g0,$carry       ! top-most carry
-___
-       push(@acc,shift(@acc));         # rotate registers to omit acc[0]
-$code.=<<___;
-       ! Final step is "if result > mod, subtract mod", but we do it
-       ! "other way around", namely subtract modulus from result
-       ! and if it borrowed, add modulus back.
-
-       subcc   @acc[0],-1,@acc[0]      ! subtract modulus
-       subccc  @acc[1],-1,@acc[1]
-       subccc  @acc[2],-1,@acc[2]
-       subccc  @acc[3],0,@acc[3]
-       subccc  @acc[4],0,@acc[4]
-       subccc  @acc[5],0,@acc[5]
-       subccc  @acc[6],1,@acc[6]
-       subccc  @acc[7],-1,@acc[7]
-       subc    $carry,0,$carry         ! broadcast borrow bit
-
-       ! Note that because mod has special form, i.e. consists of
-       ! 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       ! using value of broadcasted borrow and the borrow bit itself.
-       ! To minimize dependency chain we first broadcast and then
-       ! extract the bit by negating (follow $bi).
-
-       addcc   @acc[0],$carry,@acc[0]  ! add modulus or zero
-       addccc  @acc[1],$carry,@acc[1]
-       neg     $carry,$bi
-       st      @acc[0],[$rp]
-       addccc  @acc[2],$carry,@acc[2]
-       st      @acc[1],[$rp+4]
-       addccc  @acc[3],0,@acc[3]
-       st      @acc[2],[$rp+8]
-       addccc  @acc[4],0,@acc[4]
-       st      @acc[3],[$rp+12]
-       addccc  @acc[5],0,@acc[5]
-       st      @acc[4],[$rp+16]
-       addccc  @acc[6],$bi,@acc[6]
-       st      @acc[5],[$rp+20]
-       addc    @acc[7],$carry,@acc[7]
-       st      @acc[6],[$rp+24]
-       retl
-       st      @acc[7],[$rp+28]
-.type  __ecp_nistz256_mul_mont,#function
-.size  __ecp_nistz256_mul_mont,.-__ecp_nistz256_mul_mont
-
-! void ecp_nistz256_add(BN_ULONG %i0[8],const BN_ULONG %i1[8],
-!                                       const BN_ULONG %i2[8]);
-.globl ecp_nistz256_add
-.align 32
-ecp_nistz256_add:
-       save    %sp,-STACK_FRAME,%sp
-       ld      [$ap],@acc[0]
-       ld      [$ap+4],@acc[1]
-       ld      [$ap+8],@acc[2]
-       ld      [$ap+12],@acc[3]
-       ld      [$ap+16],@acc[4]
-       ld      [$ap+20],@acc[5]
-       ld      [$ap+24],@acc[6]
-       call    __ecp_nistz256_add
-       ld      [$ap+28],@acc[7]
-       ret
-       restore
-.type  ecp_nistz256_add,#function
-.size  ecp_nistz256_add,.-ecp_nistz256_add
-
-.align 32
-__ecp_nistz256_add:
-       ld      [$bp+0],$t0             ! b[0]
-       ld      [$bp+4],$t1
-       ld      [$bp+8],$t2
-       ld      [$bp+12],$t3
-       addcc   @acc[0],$t0,@acc[0]
-       ld      [$bp+16],$t4
-       ld      [$bp+20],$t5
-       addccc  @acc[1],$t1,@acc[1]
-       ld      [$bp+24],$t6
-       ld      [$bp+28],$t7
-       addccc  @acc[2],$t2,@acc[2]
-       addccc  @acc[3],$t3,@acc[3]
-       addccc  @acc[4],$t4,@acc[4]
-       addccc  @acc[5],$t5,@acc[5]
-       addccc  @acc[6],$t6,@acc[6]
-       addccc  @acc[7],$t7,@acc[7]
-       addc    %g0,%g0,$carry
-
-.Lreduce_by_sub:
-
-       ! if a+b >= modulus, subtract modulus.
-       !
-       ! But since comparison implies subtraction, we subtract
-       ! modulus and then add it back if subtraction borrowed.
-
-       subcc   @acc[0],-1,@acc[0]
-       subccc  @acc[1],-1,@acc[1]
-       subccc  @acc[2],-1,@acc[2]
-       subccc  @acc[3], 0,@acc[3]
-       subccc  @acc[4], 0,@acc[4]
-       subccc  @acc[5], 0,@acc[5]
-       subccc  @acc[6], 1,@acc[6]
-       subccc  @acc[7],-1,@acc[7]
-       subc    $carry,0,$carry
-
-       ! Note that because mod has special form, i.e. consists of
-       ! 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       ! using value of borrow and its negative.
-
-       addcc   @acc[0],$carry,@acc[0]  ! add synthesized modulus
-       addccc  @acc[1],$carry,@acc[1]
-       neg     $carry,$bi
-       st      @acc[0],[$rp]
-       addccc  @acc[2],$carry,@acc[2]
-       st      @acc[1],[$rp+4]
-       addccc  @acc[3],0,@acc[3]
-       st      @acc[2],[$rp+8]
-       addccc  @acc[4],0,@acc[4]
-       st      @acc[3],[$rp+12]
-       addccc  @acc[5],0,@acc[5]
-       st      @acc[4],[$rp+16]
-       addccc  @acc[6],$bi,@acc[6]
-       st      @acc[5],[$rp+20]
-       addc    @acc[7],$carry,@acc[7]
-       st      @acc[6],[$rp+24]
-       retl
-       st      @acc[7],[$rp+28]
-.type  __ecp_nistz256_add,#function
-.size  __ecp_nistz256_add,.-__ecp_nistz256_add
-
-! void ecp_nistz256_mul_by_2(BN_ULONG %i0[8],const BN_ULONG %i1[8]);
-.globl ecp_nistz256_mul_by_2
-.align 32
-ecp_nistz256_mul_by_2:
-       save    %sp,-STACK_FRAME,%sp
-       ld      [$ap],@acc[0]
-       ld      [$ap+4],@acc[1]
-       ld      [$ap+8],@acc[2]
-       ld      [$ap+12],@acc[3]
-       ld      [$ap+16],@acc[4]
-       ld      [$ap+20],@acc[5]
-       ld      [$ap+24],@acc[6]
-       call    __ecp_nistz256_mul_by_2
-       ld      [$ap+28],@acc[7]
-       ret
-       restore
-.type  ecp_nistz256_mul_by_2,#function
-.size  ecp_nistz256_mul_by_2,.-ecp_nistz256_mul_by_2
-
-.align 32
-__ecp_nistz256_mul_by_2:
-       addcc   @acc[0],@acc[0],@acc[0] ! a+a=2*a
-       addccc  @acc[1],@acc[1],@acc[1]
-       addccc  @acc[2],@acc[2],@acc[2]
-       addccc  @acc[3],@acc[3],@acc[3]
-       addccc  @acc[4],@acc[4],@acc[4]
-       addccc  @acc[5],@acc[5],@acc[5]
-       addccc  @acc[6],@acc[6],@acc[6]
-       addccc  @acc[7],@acc[7],@acc[7]
-       b       .Lreduce_by_sub
-       addc    %g0,%g0,$carry
-.type  __ecp_nistz256_mul_by_2,#function
-.size  __ecp_nistz256_mul_by_2,.-__ecp_nistz256_mul_by_2
-
-! void ecp_nistz256_mul_by_3(BN_ULONG %i0[8],const BN_ULONG %i1[8]);
-.globl ecp_nistz256_mul_by_3
-.align 32
-ecp_nistz256_mul_by_3:
-       save    %sp,-STACK_FRAME,%sp
-       ld      [$ap],@acc[0]
-       ld      [$ap+4],@acc[1]
-       ld      [$ap+8],@acc[2]
-       ld      [$ap+12],@acc[3]
-       ld      [$ap+16],@acc[4]
-       ld      [$ap+20],@acc[5]
-       ld      [$ap+24],@acc[6]
-       call    __ecp_nistz256_mul_by_3
-       ld      [$ap+28],@acc[7]
-       ret
-       restore
-.type  ecp_nistz256_mul_by_3,#function
-.size  ecp_nistz256_mul_by_3,.-ecp_nistz256_mul_by_3
-
-.align 32
-__ecp_nistz256_mul_by_3:
-       addcc   @acc[0],@acc[0],$t0     ! a+a=2*a
-       addccc  @acc[1],@acc[1],$t1
-       addccc  @acc[2],@acc[2],$t2
-       addccc  @acc[3],@acc[3],$t3
-       addccc  @acc[4],@acc[4],$t4
-       addccc  @acc[5],@acc[5],$t5
-       addccc  @acc[6],@acc[6],$t6
-       addccc  @acc[7],@acc[7],$t7
-       addc    %g0,%g0,$carry
-
-       subcc   $t0,-1,$t0              ! .Lreduce_by_sub but without stores
-       subccc  $t1,-1,$t1
-       subccc  $t2,-1,$t2
-       subccc  $t3, 0,$t3
-       subccc  $t4, 0,$t4
-       subccc  $t5, 0,$t5
-       subccc  $t6, 1,$t6
-       subccc  $t7,-1,$t7
-       subc    $carry,0,$carry
-
-       addcc   $t0,$carry,$t0          ! add synthesized modulus
-       addccc  $t1,$carry,$t1
-       neg     $carry,$bi
-       addccc  $t2,$carry,$t2
-       addccc  $t3,0,$t3
-       addccc  $t4,0,$t4
-       addccc  $t5,0,$t5
-       addccc  $t6,$bi,$t6
-       addc    $t7,$carry,$t7
-
-       addcc   $t0,@acc[0],@acc[0]     ! 2*a+a=3*a
-       addccc  $t1,@acc[1],@acc[1]
-       addccc  $t2,@acc[2],@acc[2]
-       addccc  $t3,@acc[3],@acc[3]
-       addccc  $t4,@acc[4],@acc[4]
-       addccc  $t5,@acc[5],@acc[5]
-       addccc  $t6,@acc[6],@acc[6]
-       addccc  $t7,@acc[7],@acc[7]
-       b       .Lreduce_by_sub
-       addc    %g0,%g0,$carry
-.type  __ecp_nistz256_mul_by_3,#function
-.size  __ecp_nistz256_mul_by_3,.-__ecp_nistz256_mul_by_3
-
-! void ecp_nistz256_neg(BN_ULONG %i0[8],const BN_ULONG %i1[8]);
-.globl ecp_nistz256_neg
-.align 32
-ecp_nistz256_neg:
-       save    %sp,-STACK_FRAME,%sp
-       mov     $ap,$bp
-       mov     0,@acc[0]
-       mov     0,@acc[1]
-       mov     0,@acc[2]
-       mov     0,@acc[3]
-       mov     0,@acc[4]
-       mov     0,@acc[5]
-       mov     0,@acc[6]
-       call    __ecp_nistz256_sub_from
-       mov     0,@acc[7]
-       ret
-       restore
-.type  ecp_nistz256_neg,#function
-.size  ecp_nistz256_neg,.-ecp_nistz256_neg
-
-.align 32
-__ecp_nistz256_sub_from:
-       ld      [$bp+0],$t0             ! b[0]
-       ld      [$bp+4],$t1
-       ld      [$bp+8],$t2
-       ld      [$bp+12],$t3
-       subcc   @acc[0],$t0,@acc[0]
-       ld      [$bp+16],$t4
-       ld      [$bp+20],$t5
-       subccc  @acc[1],$t1,@acc[1]
-       subccc  @acc[2],$t2,@acc[2]
-       ld      [$bp+24],$t6
-       ld      [$bp+28],$t7
-       subccc  @acc[3],$t3,@acc[3]
-       subccc  @acc[4],$t4,@acc[4]
-       subccc  @acc[5],$t5,@acc[5]
-       subccc  @acc[6],$t6,@acc[6]
-       subccc  @acc[7],$t7,@acc[7]
-       subc    %g0,%g0,$carry          ! broadcast borrow bit
-
-.Lreduce_by_add:
-
-       ! if a-b borrows, add modulus.
-       !
-       ! Note that because mod has special form, i.e. consists of
-       ! 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       ! using value of broadcasted borrow and the borrow bit itself.
-       ! To minimize dependency chain we first broadcast and then
-       ! extract the bit by negating (follow $bi).
-
-       addcc   @acc[0],$carry,@acc[0]  ! add synthesized modulus
-       addccc  @acc[1],$carry,@acc[1]
-       neg     $carry,$bi
-       st      @acc[0],[$rp]
-       addccc  @acc[2],$carry,@acc[2]
-       st      @acc[1],[$rp+4]
-       addccc  @acc[3],0,@acc[3]
-       st      @acc[2],[$rp+8]
-       addccc  @acc[4],0,@acc[4]
-       st      @acc[3],[$rp+12]
-       addccc  @acc[5],0,@acc[5]
-       st      @acc[4],[$rp+16]
-       addccc  @acc[6],$bi,@acc[6]
-       st      @acc[5],[$rp+20]
-       addc    @acc[7],$carry,@acc[7]
-       st      @acc[6],[$rp+24]
-       retl
-       st      @acc[7],[$rp+28]
-.type  __ecp_nistz256_sub_from,#function
-.size  __ecp_nistz256_sub_from,.-__ecp_nistz256_sub_from
-
-.align 32
-__ecp_nistz256_sub_morf:
-       ld      [$bp+0],$t0             ! b[0]
-       ld      [$bp+4],$t1
-       ld      [$bp+8],$t2
-       ld      [$bp+12],$t3
-       subcc   $t0,@acc[0],@acc[0]
-       ld      [$bp+16],$t4
-       ld      [$bp+20],$t5
-       subccc  $t1,@acc[1],@acc[1]
-       subccc  $t2,@acc[2],@acc[2]
-       ld      [$bp+24],$t6
-       ld      [$bp+28],$t7
-       subccc  $t3,@acc[3],@acc[3]
-       subccc  $t4,@acc[4],@acc[4]
-       subccc  $t5,@acc[5],@acc[5]
-       subccc  $t6,@acc[6],@acc[6]
-       subccc  $t7,@acc[7],@acc[7]
-       b       .Lreduce_by_add
-       subc    %g0,%g0,$carry          ! broadcast borrow bit
-.type  __ecp_nistz256_sub_morf,#function
-.size  __ecp_nistz256_sub_morf,.-__ecp_nistz256_sub_morf
-
-! void ecp_nistz256_div_by_2(BN_ULONG %i0[8],const BN_ULONG %i1[8]);
-.globl ecp_nistz256_div_by_2
-.align 32
-ecp_nistz256_div_by_2:
-       save    %sp,-STACK_FRAME,%sp
-       ld      [$ap],@acc[0]
-       ld      [$ap+4],@acc[1]
-       ld      [$ap+8],@acc[2]
-       ld      [$ap+12],@acc[3]
-       ld      [$ap+16],@acc[4]
-       ld      [$ap+20],@acc[5]
-       ld      [$ap+24],@acc[6]
-       call    __ecp_nistz256_div_by_2
-       ld      [$ap+28],@acc[7]
-       ret
-       restore
-.type  ecp_nistz256_div_by_2,#function
-.size  ecp_nistz256_div_by_2,.-ecp_nistz256_div_by_2
-
-.align 32
-__ecp_nistz256_div_by_2:
-       ! ret = (a is odd ? a+mod : a) >> 1
-
-       and     @acc[0],1,$bi
-       neg     $bi,$carry
-       addcc   @acc[0],$carry,@acc[0]
-       addccc  @acc[1],$carry,@acc[1]
-       addccc  @acc[2],$carry,@acc[2]
-       addccc  @acc[3],0,@acc[3]
-       addccc  @acc[4],0,@acc[4]
-       addccc  @acc[5],0,@acc[5]
-       addccc  @acc[6],$bi,@acc[6]
-       addccc  @acc[7],$carry,@acc[7]
-       addc    %g0,%g0,$carry
-
-       ! ret >>= 1
-
-       srl     @acc[0],1,@acc[0]
-       sll     @acc[1],31,$t0
-       srl     @acc[1],1,@acc[1]
-       or      @acc[0],$t0,@acc[0]
-       sll     @acc[2],31,$t1
-       srl     @acc[2],1,@acc[2]
-       or      @acc[1],$t1,@acc[1]
-       sll     @acc[3],31,$t2
-       st      @acc[0],[$rp]
-       srl     @acc[3],1,@acc[3]
-       or      @acc[2],$t2,@acc[2]
-       sll     @acc[4],31,$t3
-       st      @acc[1],[$rp+4]
-       srl     @acc[4],1,@acc[4]
-       or      @acc[3],$t3,@acc[3]
-       sll     @acc[5],31,$t4
-       st      @acc[2],[$rp+8]
-       srl     @acc[5],1,@acc[5]
-       or      @acc[4],$t4,@acc[4]
-       sll     @acc[6],31,$t5
-       st      @acc[3],[$rp+12]
-       srl     @acc[6],1,@acc[6]
-       or      @acc[5],$t5,@acc[5]
-       sll     @acc[7],31,$t6
-       st      @acc[4],[$rp+16]
-       srl     @acc[7],1,@acc[7]
-       or      @acc[6],$t6,@acc[6]
-       sll     $carry,31,$t7
-       st      @acc[5],[$rp+20]
-       or      @acc[7],$t7,@acc[7]
-       st      @acc[6],[$rp+24]
-       retl
-       st      @acc[7],[$rp+28]
-.type  __ecp_nistz256_div_by_2,#function
-.size  __ecp_nistz256_div_by_2,.-__ecp_nistz256_div_by_2
-___
-
-########################################################################
-# following subroutines are "literal" implementation of those found in
-# ecp_nistz256.c
-#
-########################################################################
-# void ecp_nistz256_point_double(P256_POINT *out,const P256_POINT *inp);
-#
-{
-my ($S,$M,$Zsqr,$tmp0)=map(32*$_,(0..3));
-# above map() describes stack layout with 4 temporary
-# 256-bit vectors on top.
-
-$code.=<<___;
-#if 0
-#ifdef __PIC__
-SPARC_PIC_THUNK(%g1)
-#endif
-#endif
-
-.globl ecp_nistz256_point_double
-.align 32
-ecp_nistz256_point_double:
-#if 0
-       SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
-       ld      [%g1],%g1               ! OPENSSL_sparcv9cap_P[0]
-       and     %g1,(SPARCV9_VIS3|SPARCV9_64BIT_STACK),%g1
-       cmp     %g1,(SPARCV9_VIS3|SPARCV9_64BIT_STACK)
-       be      ecp_nistz256_point_double_vis3
-       nop
-#endif
-
-       save    %sp,-STACK_FRAME-32*4,%sp
-
-       mov     $rp,$rp_real
-       mov     $ap,$ap_real
-
-.Lpoint_double_shortcut:
-       ld      [$ap+32],@acc[0]
-       ld      [$ap+32+4],@acc[1]
-       ld      [$ap+32+8],@acc[2]
-       ld      [$ap+32+12],@acc[3]
-       ld      [$ap+32+16],@acc[4]
-       ld      [$ap+32+20],@acc[5]
-       ld      [$ap+32+24],@acc[6]
-       ld      [$ap+32+28],@acc[7]
-       call    __ecp_nistz256_mul_by_2 ! p256_mul_by_2(S, in_y);
-       add     %sp,LOCALS+$S,$rp
-
-       add     $ap_real,64,$bp
-       add     $ap_real,64,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(Zsqr, in_z);
-       add     %sp,LOCALS+$Zsqr,$rp
-
-       add     $ap_real,0,$bp
-       call    __ecp_nistz256_add      ! p256_add(M, Zsqr, in_x);
-       add     %sp,LOCALS+$M,$rp
-
-       add     %sp,LOCALS+$S,$bp
-       add     %sp,LOCALS+$S,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(S, S);
-       add     %sp,LOCALS+$S,$rp
-
-       ld      [$ap_real],@acc[0]
-       add     %sp,LOCALS+$Zsqr,$bp
-       ld      [$ap_real+4],@acc[1]
-       ld      [$ap_real+8],@acc[2]
-       ld      [$ap_real+12],@acc[3]
-       ld      [$ap_real+16],@acc[4]
-       ld      [$ap_real+20],@acc[5]
-       ld      [$ap_real+24],@acc[6]
-       ld      [$ap_real+28],@acc[7]
-       call    __ecp_nistz256_sub_from ! p256_sub(Zsqr, in_x, Zsqr);
-       add     %sp,LOCALS+$Zsqr,$rp
-
-       add     $ap_real,32,$bp
-       add     $ap_real,64,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(tmp0, in_z, in_y);
-       add     %sp,LOCALS+$tmp0,$rp
-
-       call    __ecp_nistz256_mul_by_2 ! p256_mul_by_2(res_z, tmp0);
-       add     $rp_real,64,$rp
-
-       add     %sp,LOCALS+$Zsqr,$bp
-       add     %sp,LOCALS+$M,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(M, M, Zsqr);
-       add     %sp,LOCALS+$M,$rp
-
-       call    __ecp_nistz256_mul_by_3 ! p256_mul_by_3(M, M);
-       add     %sp,LOCALS+$M,$rp
-
-       add     %sp,LOCALS+$S,$bp
-       add     %sp,LOCALS+$S,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(tmp0, S);
-       add     %sp,LOCALS+$tmp0,$rp
-
-       call    __ecp_nistz256_div_by_2 ! p256_div_by_2(res_y, tmp0);
-       add     $rp_real,32,$rp
-
-       add     $ap_real,0,$bp
-       add     %sp,LOCALS+$S,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S, S, in_x);
-       add     %sp,LOCALS+$S,$rp
-
-       call    __ecp_nistz256_mul_by_2 ! p256_mul_by_2(tmp0, S);
-       add     %sp,LOCALS+$tmp0,$rp
-
-       add     %sp,LOCALS+$M,$bp
-       add     %sp,LOCALS+$M,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(res_x, M);
-       add     $rp_real,0,$rp
-
-       add     %sp,LOCALS+$tmp0,$bp
-       call    __ecp_nistz256_sub_from ! p256_sub(res_x, res_x, tmp0);
-       add     $rp_real,0,$rp
-
-       add     %sp,LOCALS+$S,$bp
-       call    __ecp_nistz256_sub_morf ! p256_sub(S, S, res_x);
-       add     %sp,LOCALS+$S,$rp
-
-       add     %sp,LOCALS+$M,$bp
-       add     %sp,LOCALS+$S,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S, S, M);
-       add     %sp,LOCALS+$S,$rp
-
-       add     $rp_real,32,$bp
-       call    __ecp_nistz256_sub_from ! p256_sub(res_y, S, res_y);
-       add     $rp_real,32,$rp
-
-       ret
-       restore
-.type  ecp_nistz256_point_double,#function
-.size  ecp_nistz256_point_double,.-ecp_nistz256_point_double
-___
-}
-
-########################################################################
-# void ecp_nistz256_point_add(P256_POINT *out,const P256_POINT *in1,
-#                            const P256_POINT *in2);
-{
-my ($res_x,$res_y,$res_z,
-    $H,$Hsqr,$R,$Rsqr,$Hcub,
-    $U1,$U2,$S1,$S2)=map(32*$_,(0..11));
-my ($Z1sqr, $Z2sqr) = ($Hsqr, $Rsqr);
-
-# above map() describes stack layout with 12 temporary
-# 256-bit vectors on top. Then we reserve some space for
-# !in1infty, !in2infty, result of check for zero and return pointer.
-
-my $bp_real=$rp_real;
-
-$code.=<<___;
-.globl ecp_nistz256_point_add
-.align 32
-ecp_nistz256_point_add:
-#if 0
-       SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
-       ld      [%g1],%g1               ! OPENSSL_sparcv9cap_P[0]
-       and     %g1,(SPARCV9_VIS3|SPARCV9_64BIT_STACK),%g1
-       cmp     %g1,(SPARCV9_VIS3|SPARCV9_64BIT_STACK)
-       be      ecp_nistz256_point_add_vis3
-       nop
-#endif
-
-       save    %sp,-STACK_FRAME-32*12-32,%sp
-
-       stx     $rp,[%fp+STACK_BIAS-8]  ! off-load $rp
-       mov     $ap,$ap_real
-       mov     $bp,$bp_real
-
-       ld      [$bp+64],$t0            ! in2_z
-       ld      [$bp+64+4],$t1
-       ld      [$bp+64+8],$t2
-       ld      [$bp+64+12],$t3
-       ld      [$bp+64+16],$t4
-       ld      [$bp+64+20],$t5
-       ld      [$bp+64+24],$t6
-       ld      [$bp+64+28],$t7
-       or      $t1,$t0,$t0
-       or      $t3,$t2,$t2
-       or      $t5,$t4,$t4
-       or      $t7,$t6,$t6
-       or      $t2,$t0,$t0
-       or      $t6,$t4,$t4
-       or      $t4,$t0,$t0             ! !in2infty
-       movrnz  $t0,-1,$t0
-       st      $t0,[%fp+STACK_BIAS-12]
-
-       ld      [$ap+64],$t0            ! in1_z
-       ld      [$ap+64+4],$t1
-       ld      [$ap+64+8],$t2
-       ld      [$ap+64+12],$t3
-       ld      [$ap+64+16],$t4
-       ld      [$ap+64+20],$t5
-       ld      [$ap+64+24],$t6
-       ld      [$ap+64+28],$t7
-       or      $t1,$t0,$t0
-       or      $t3,$t2,$t2
-       or      $t5,$t4,$t4
-       or      $t7,$t6,$t6
-       or      $t2,$t0,$t0
-       or      $t6,$t4,$t4
-       or      $t4,$t0,$t0             ! !in1infty
-       movrnz  $t0,-1,$t0
-       st      $t0,[%fp+STACK_BIAS-16]
-
-       add     $bp_real,64,$bp
-       add     $bp_real,64,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(Z2sqr, in2_z);
-       add     %sp,LOCALS+$Z2sqr,$rp
-
-       add     $ap_real,64,$bp
-       add     $ap_real,64,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(Z1sqr, in1_z);
-       add     %sp,LOCALS+$Z1sqr,$rp
-
-       add     $bp_real,64,$bp
-       add     %sp,LOCALS+$Z2sqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S1, Z2sqr, in2_z);
-       add     %sp,LOCALS+$S1,$rp
-
-       add     $ap_real,64,$bp
-       add     %sp,LOCALS+$Z1sqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S2, Z1sqr, in1_z);
-       add     %sp,LOCALS+$S2,$rp
-
-       add     $ap_real,32,$bp
-       add     %sp,LOCALS+$S1,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S1, S1, in1_y);
-       add     %sp,LOCALS+$S1,$rp
-
-       add     $bp_real,32,$bp
-       add     %sp,LOCALS+$S2,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S2, S2, in2_y);
-       add     %sp,LOCALS+$S2,$rp
-
-       add     %sp,LOCALS+$S1,$bp
-       call    __ecp_nistz256_sub_from ! p256_sub(R, S2, S1);
-       add     %sp,LOCALS+$R,$rp
-
-       or      @acc[1],@acc[0],@acc[0] ! see if result is zero
-       or      @acc[3],@acc[2],@acc[2]
-       or      @acc[5],@acc[4],@acc[4]
-       or      @acc[7],@acc[6],@acc[6]
-       or      @acc[2],@acc[0],@acc[0]
-       or      @acc[6],@acc[4],@acc[4]
-       or      @acc[4],@acc[0],@acc[0]
-       st      @acc[0],[%fp+STACK_BIAS-20]
-
-       add     $ap_real,0,$bp
-       add     %sp,LOCALS+$Z2sqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(U1, in1_x, Z2sqr);
-       add     %sp,LOCALS+$U1,$rp
-
-       add     $bp_real,0,$bp
-       add     %sp,LOCALS+$Z1sqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(U2, in2_x, Z1sqr);
-       add     %sp,LOCALS+$U2,$rp
-
-       add     %sp,LOCALS+$U1,$bp
-       call    __ecp_nistz256_sub_from ! p256_sub(H, U2, U1);
-       add     %sp,LOCALS+$H,$rp
-
-       or      @acc[1],@acc[0],@acc[0] ! see if result is zero
-       or      @acc[3],@acc[2],@acc[2]
-       or      @acc[5],@acc[4],@acc[4]
-       or      @acc[7],@acc[6],@acc[6]
-       or      @acc[2],@acc[0],@acc[0]
-       or      @acc[6],@acc[4],@acc[4]
-       orcc    @acc[4],@acc[0],@acc[0]
-
-       bne,pt  %icc,.Ladd_proceed      ! is_equal(U1,U2)?
-       nop
-
-       ld      [%fp+STACK_BIAS-12],$t0
-       ld      [%fp+STACK_BIAS-16],$t1
-       ld      [%fp+STACK_BIAS-20],$t2
-       andcc   $t0,$t1,%g0
-       be,pt   %icc,.Ladd_proceed      ! (in1infty || in2infty)?
-       nop
-       andcc   $t2,$t2,%g0
-       be,pt   %icc,.Ladd_double       ! is_equal(S1,S2)?
-       nop
-
-       ldx     [%fp+STACK_BIAS-8],$rp
-       st      %g0,[$rp]
-       st      %g0,[$rp+4]
-       st      %g0,[$rp+8]
-       st      %g0,[$rp+12]
-       st      %g0,[$rp+16]
-       st      %g0,[$rp+20]
-       st      %g0,[$rp+24]
-       st      %g0,[$rp+28]
-       st      %g0,[$rp+32]
-       st      %g0,[$rp+32+4]
-       st      %g0,[$rp+32+8]
-       st      %g0,[$rp+32+12]
-       st      %g0,[$rp+32+16]
-       st      %g0,[$rp+32+20]
-       st      %g0,[$rp+32+24]
-       st      %g0,[$rp+32+28]
-       st      %g0,[$rp+64]
-       st      %g0,[$rp+64+4]
-       st      %g0,[$rp+64+8]
-       st      %g0,[$rp+64+12]
-       st      %g0,[$rp+64+16]
-       st      %g0,[$rp+64+20]
-       st      %g0,[$rp+64+24]
-       st      %g0,[$rp+64+28]
-       b       .Ladd_done
-       nop
-
-.align 16
-.Ladd_double:
-       ldx     [%fp+STACK_BIAS-8],$rp_real
-       mov     $ap_real,$ap
-       b       .Lpoint_double_shortcut
-       add     %sp,32*(12-4)+32,%sp    ! difference in frame sizes
-
-.align 16
-.Ladd_proceed:
-       add     %sp,LOCALS+$R,$bp
-       add     %sp,LOCALS+$R,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(Rsqr, R);
-       add     %sp,LOCALS+$Rsqr,$rp
-
-       add     $ap_real,64,$bp
-       add     %sp,LOCALS+$H,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(res_z, H, in1_z);
-       add     %sp,LOCALS+$res_z,$rp
-
-       add     %sp,LOCALS+$H,$bp
-       add     %sp,LOCALS+$H,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(Hsqr, H);
-       add     %sp,LOCALS+$Hsqr,$rp
-
-       add     $bp_real,64,$bp
-       add     %sp,LOCALS+$res_z,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(res_z, res_z, in2_z);
-       add     %sp,LOCALS+$res_z,$rp
-
-       add     %sp,LOCALS+$H,$bp
-       add     %sp,LOCALS+$Hsqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(Hcub, Hsqr, H);
-       add     %sp,LOCALS+$Hcub,$rp
-
-       add     %sp,LOCALS+$U1,$bp
-       add     %sp,LOCALS+$Hsqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(U2, U1, Hsqr);
-       add     %sp,LOCALS+$U2,$rp
-
-       call    __ecp_nistz256_mul_by_2 ! p256_mul_by_2(Hsqr, U2);
-       add     %sp,LOCALS+$Hsqr,$rp
-
-       add     %sp,LOCALS+$Rsqr,$bp
-       call    __ecp_nistz256_sub_morf ! p256_sub(res_x, Rsqr, Hsqr);
-       add     %sp,LOCALS+$res_x,$rp
-
-       add     %sp,LOCALS+$Hcub,$bp
-       call    __ecp_nistz256_sub_from !  p256_sub(res_x, res_x, Hcub);
-       add     %sp,LOCALS+$res_x,$rp
-
-       add     %sp,LOCALS+$U2,$bp
-       call    __ecp_nistz256_sub_morf ! p256_sub(res_y, U2, res_x);
-       add     %sp,LOCALS+$res_y,$rp
-
-       add     %sp,LOCALS+$Hcub,$bp
-       add     %sp,LOCALS+$S1,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S2, S1, Hcub);
-       add     %sp,LOCALS+$S2,$rp
-
-       add     %sp,LOCALS+$R,$bp
-       add     %sp,LOCALS+$res_y,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(res_y, res_y, R);
-       add     %sp,LOCALS+$res_y,$rp
-
-       add     %sp,LOCALS+$S2,$bp
-       call    __ecp_nistz256_sub_from ! p256_sub(res_y, res_y, S2);
-       add     %sp,LOCALS+$res_y,$rp
-
-       ld      [%fp+STACK_BIAS-16],$t1 ! !in1infty
-       ld      [%fp+STACK_BIAS-12],$t2 ! !in2infty
-       ldx     [%fp+STACK_BIAS-8],$rp
-___
-for($i=0;$i<96;$i+=8) {                        # conditional moves
-$code.=<<___;
-       ld      [%sp+LOCALS+$i],@acc[0]         ! res
-       ld      [%sp+LOCALS+$i+4],@acc[1]
-       ld      [$bp_real+$i],@acc[2]           ! in2
-       ld      [$bp_real+$i+4],@acc[3]
-       ld      [$ap_real+$i],@acc[4]           ! in1
-       ld      [$ap_real+$i+4],@acc[5]
-       movrz   $t1,@acc[2],@acc[0]
-       movrz   $t1,@acc[3],@acc[1]
-       movrz   $t2,@acc[4],@acc[0]
-       movrz   $t2,@acc[5],@acc[1]
-       st      @acc[0],[$rp+$i]
-       st      @acc[1],[$rp+$i+4]
-___
-}
-$code.=<<___;
-.Ladd_done:
-       ret
-       restore
-.type  ecp_nistz256_point_add,#function
-.size  ecp_nistz256_point_add,.-ecp_nistz256_point_add
-___
-}
-
-########################################################################
-# void ecp_nistz256_point_add_affine(P256_POINT *out,const P256_POINT *in1,
-#                                   const P256_POINT_AFFINE *in2);
-{
-my ($res_x,$res_y,$res_z,
-    $U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr)=map(32*$_,(0..9));
-my $Z1sqr = $S2;
-# above map() describes stack layout with 10 temporary
-# 256-bit vectors on top. Then we reserve some space for
-# !in1infty, !in2infty, result of check for zero and return pointer.
-
-my @ONE_mont=(1,0,0,-1,-1,-1,-2,0);
-my $bp_real=$rp_real;
-
-$code.=<<___;
-.globl ecp_nistz256_point_add_affine
-.align 32
-ecp_nistz256_point_add_affine:
-#if 0
-       SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
-       ld      [%g1],%g1               ! OPENSSL_sparcv9cap_P[0]
-       and     %g1,(SPARCV9_VIS3|SPARCV9_64BIT_STACK),%g1
-       cmp     %g1,(SPARCV9_VIS3|SPARCV9_64BIT_STACK)
-       be      ecp_nistz256_point_add_affine_vis3
-       nop
-#endif
-
-       save    %sp,-STACK_FRAME-32*10-32,%sp
-
-       stx     $rp,[%fp+STACK_BIAS-8]  ! off-load $rp
-       mov     $ap,$ap_real
-       mov     $bp,$bp_real
-
-       ld      [$ap+64],$t0            ! in1_z
-       ld      [$ap+64+4],$t1
-       ld      [$ap+64+8],$t2
-       ld      [$ap+64+12],$t3
-       ld      [$ap+64+16],$t4
-       ld      [$ap+64+20],$t5
-       ld      [$ap+64+24],$t6
-       ld      [$ap+64+28],$t7
-       or      $t1,$t0,$t0
-       or      $t3,$t2,$t2
-       or      $t5,$t4,$t4
-       or      $t7,$t6,$t6
-       or      $t2,$t0,$t0
-       or      $t6,$t4,$t4
-       or      $t4,$t0,$t0             ! !in1infty
-       movrnz  $t0,-1,$t0
-       st      $t0,[%fp+STACK_BIAS-16]
-
-       ld      [$bp],@acc[0]           ! in2_x
-       ld      [$bp+4],@acc[1]
-       ld      [$bp+8],@acc[2]
-       ld      [$bp+12],@acc[3]
-       ld      [$bp+16],@acc[4]
-       ld      [$bp+20],@acc[5]
-       ld      [$bp+24],@acc[6]
-       ld      [$bp+28],@acc[7]
-       ld      [$bp+32],$t0            ! in2_y
-       ld      [$bp+32+4],$t1
-       ld      [$bp+32+8],$t2
-       ld      [$bp+32+12],$t3
-       ld      [$bp+32+16],$t4
-       ld      [$bp+32+20],$t5
-       ld      [$bp+32+24],$t6
-       ld      [$bp+32+28],$t7
-       or      @acc[1],@acc[0],@acc[0]
-       or      @acc[3],@acc[2],@acc[2]
-       or      @acc[5],@acc[4],@acc[4]
-       or      @acc[7],@acc[6],@acc[6]
-       or      @acc[2],@acc[0],@acc[0]
-       or      @acc[6],@acc[4],@acc[4]
-       or      @acc[4],@acc[0],@acc[0]
-       or      $t1,$t0,$t0
-       or      $t3,$t2,$t2
-       or      $t5,$t4,$t4
-       or      $t7,$t6,$t6
-       or      $t2,$t0,$t0
-       or      $t6,$t4,$t4
-       or      $t4,$t0,$t0
-       or      @acc[0],$t0,$t0         ! !in2infty
-       movrnz  $t0,-1,$t0
-       st      $t0,[%fp+STACK_BIAS-12]
-
-       add     $ap_real,64,$bp
-       add     $ap_real,64,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(Z1sqr, in1_z);
-       add     %sp,LOCALS+$Z1sqr,$rp
-
-       add     $bp_real,0,$bp
-       add     %sp,LOCALS+$Z1sqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(U2, Z1sqr, in2_x);
-       add     %sp,LOCALS+$U2,$rp
-
-       add     $ap_real,0,$bp
-       call    __ecp_nistz256_sub_from ! p256_sub(H, U2, in1_x);
-       add     %sp,LOCALS+$H,$rp
-
-       add     $ap_real,64,$bp
-       add     %sp,LOCALS+$Z1sqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S2, Z1sqr, in1_z);
-       add     %sp,LOCALS+$S2,$rp
-
-       add     $ap_real,64,$bp
-       add     %sp,LOCALS+$H,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(res_z, H, in1_z);
-       add     %sp,LOCALS+$res_z,$rp
-
-       add     $bp_real,32,$bp
-       add     %sp,LOCALS+$S2,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S2, S2, in2_y);
-       add     %sp,LOCALS+$S2,$rp
-
-       add     $ap_real,32,$bp
-       call    __ecp_nistz256_sub_from ! p256_sub(R, S2, in1_y);
-       add     %sp,LOCALS+$R,$rp
-
-       add     %sp,LOCALS+$H,$bp
-       add     %sp,LOCALS+$H,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(Hsqr, H);
-       add     %sp,LOCALS+$Hsqr,$rp
-
-       add     %sp,LOCALS+$R,$bp
-       add     %sp,LOCALS+$R,$ap
-       call    __ecp_nistz256_mul_mont ! p256_sqr_mont(Rsqr, R);
-       add     %sp,LOCALS+$Rsqr,$rp
-
-       add     %sp,LOCALS+$H,$bp
-       add     %sp,LOCALS+$Hsqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(Hcub, Hsqr, H);
-       add     %sp,LOCALS+$Hcub,$rp
-
-       add     $ap_real,0,$bp
-       add     %sp,LOCALS+$Hsqr,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(U2, in1_x, Hsqr);
-       add     %sp,LOCALS+$U2,$rp
-
-       call    __ecp_nistz256_mul_by_2 ! p256_mul_by_2(Hsqr, U2);
-       add     %sp,LOCALS+$Hsqr,$rp
-
-       add     %sp,LOCALS+$Rsqr,$bp
-       call    __ecp_nistz256_sub_morf ! p256_sub(res_x, Rsqr, Hsqr);
-       add     %sp,LOCALS+$res_x,$rp
-
-       add     %sp,LOCALS+$Hcub,$bp
-       call    __ecp_nistz256_sub_from !  p256_sub(res_x, res_x, Hcub);
-       add     %sp,LOCALS+$res_x,$rp
-
-       add     %sp,LOCALS+$U2,$bp
-       call    __ecp_nistz256_sub_morf ! p256_sub(res_y, U2, res_x);
-       add     %sp,LOCALS+$res_y,$rp
-
-       add     $ap_real,32,$bp
-       add     %sp,LOCALS+$Hcub,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(S2, in1_y, Hcub);
-       add     %sp,LOCALS+$S2,$rp
-
-       add     %sp,LOCALS+$R,$bp
-       add     %sp,LOCALS+$res_y,$ap
-       call    __ecp_nistz256_mul_mont ! p256_mul_mont(res_y, res_y, R);
-       add     %sp,LOCALS+$res_y,$rp
-
-       add     %sp,LOCALS+$S2,$bp
-       call    __ecp_nistz256_sub_from ! p256_sub(res_y, res_y, S2);
-       add     %sp,LOCALS+$res_y,$rp
-
-       ld      [%fp+STACK_BIAS-16],$t1 ! !in1infty
-       ld      [%fp+STACK_BIAS-12],$t2 ! !in2infty
-       ldx     [%fp+STACK_BIAS-8],$rp
-___
-for($i=0;$i<64;$i+=8) {                        # conditional moves
-$code.=<<___;
-       ld      [%sp+LOCALS+$i],@acc[0]         ! res
-       ld      [%sp+LOCALS+$i+4],@acc[1]
-       ld      [$bp_real+$i],@acc[2]           ! in2
-       ld      [$bp_real+$i+4],@acc[3]
-       ld      [$ap_real+$i],@acc[4]           ! in1
-       ld      [$ap_real+$i+4],@acc[5]
-       movrz   $t1,@acc[2],@acc[0]
-       movrz   $t1,@acc[3],@acc[1]
-       movrz   $t2,@acc[4],@acc[0]
-       movrz   $t2,@acc[5],@acc[1]
-       st      @acc[0],[$rp+$i]
-       st      @acc[1],[$rp+$i+4]
-___
-}
-for(;$i<96;$i+=8) {
-my $j=($i-64)/4;
-$code.=<<___;
-       ld      [%sp+LOCALS+$i],@acc[0]         ! res
-       ld      [%sp+LOCALS+$i+4],@acc[1]
-       ld      [$ap_real+$i],@acc[4]           ! in1
-       ld      [$ap_real+$i+4],@acc[5]
-       movrz   $t1,@ONE_mont[$j],@acc[0]
-       movrz   $t1,@ONE_mont[$j+1],@acc[1]
-       movrz   $t2,@acc[4],@acc[0]
-       movrz   $t2,@acc[5],@acc[1]
-       st      @acc[0],[$rp+$i]
-       st      @acc[1],[$rp+$i+4]
-___
-}
-$code.=<<___;
-       ret
-       restore
-.type  ecp_nistz256_point_add_affine,#function
-.size  ecp_nistz256_point_add_affine,.-ecp_nistz256_point_add_affine
-___
-}                                                              }}}
-{{{
-my ($out,$inp,$index)=map("%i$_",(0..2));
-my $mask="%o0";
-
-$code.=<<___;
-! void ecp_nistz256_select_w5(P256_POINT *%i0,const void *%i1,
-!                                             int %i2);
-.globl ecp_nistz256_select_w5
-.align 32
-ecp_nistz256_select_w5:
-       save    %sp,-STACK_FRAME,%sp
-
-       neg     $index,$mask
-       srax    $mask,63,$mask
-
-       add     $index,$mask,$index
-       sll     $index,2,$index
-       add     $inp,$index,$inp
-
-       ld      [$inp+64*0],%l0
-       ld      [$inp+64*1],%l1
-       ld      [$inp+64*2],%l2
-       ld      [$inp+64*3],%l3
-       ld      [$inp+64*4],%l4
-       ld      [$inp+64*5],%l5
-       ld      [$inp+64*6],%l6
-       ld      [$inp+64*7],%l7
-       add     $inp,64*8,$inp
-       and     %l0,$mask,%l0
-       and     %l1,$mask,%l1
-       st      %l0,[$out]              ! X
-       and     %l2,$mask,%l2
-       st      %l1,[$out+4]
-       and     %l3,$mask,%l3
-       st      %l2,[$out+8]
-       and     %l4,$mask,%l4
-       st      %l3,[$out+12]
-       and     %l5,$mask,%l5
-       st      %l4,[$out+16]
-       and     %l6,$mask,%l6
-       st      %l5,[$out+20]
-       and     %l7,$mask,%l7
-       st      %l6,[$out+24]
-       st      %l7,[$out+28]
-       add     $out,32,$out
-
-       ld      [$inp+64*0],%l0
-       ld      [$inp+64*1],%l1
-       ld      [$inp+64*2],%l2
-       ld      [$inp+64*3],%l3
-       ld      [$inp+64*4],%l4
-       ld      [$inp+64*5],%l5
-       ld      [$inp+64*6],%l6
-       ld      [$inp+64*7],%l7
-       add     $inp,64*8,$inp
-       and     %l0,$mask,%l0
-       and     %l1,$mask,%l1
-       st      %l0,[$out]              ! Y
-       and     %l2,$mask,%l2
-       st      %l1,[$out+4]
-       and     %l3,$mask,%l3
-       st      %l2,[$out+8]
-       and     %l4,$mask,%l4
-       st      %l3,[$out+12]
-       and     %l5,$mask,%l5
-       st      %l4,[$out+16]
-       and     %l6,$mask,%l6
-       st      %l5,[$out+20]
-       and     %l7,$mask,%l7
-       st      %l6,[$out+24]
-       st      %l7,[$out+28]
-       add     $out,32,$out
-
-       ld      [$inp+64*0],%l0
-       ld      [$inp+64*1],%l1
-       ld      [$inp+64*2],%l2
-       ld      [$inp+64*3],%l3
-       ld      [$inp+64*4],%l4
-       ld      [$inp+64*5],%l5
-       ld      [$inp+64*6],%l6
-       ld      [$inp+64*7],%l7
-       and     %l0,$mask,%l0
-       and     %l1,$mask,%l1
-       st      %l0,[$out]              ! Z
-       and     %l2,$mask,%l2
-       st      %l1,[$out+4]
-       and     %l3,$mask,%l3
-       st      %l2,[$out+8]
-       and     %l4,$mask,%l4
-       st      %l3,[$out+12]
-       and     %l5,$mask,%l5
-       st      %l4,[$out+16]
-       and     %l6,$mask,%l6
-       st      %l5,[$out+20]
-       and     %l7,$mask,%l7
-       st      %l6,[$out+24]
-       st      %l7,[$out+28]
-
-       ret
-       restore
-.type  ecp_nistz256_select_w5,#function
-.size  ecp_nistz256_select_w5,.-ecp_nistz256_select_w5
-
-! void ecp_nistz256_select_w7(P256_POINT_AFFINE *%i0,const void *%i1,
-!                                                    int %i2);
-.globl ecp_nistz256_select_w7
-.align 32
-ecp_nistz256_select_w7:
-       save    %sp,-STACK_FRAME,%sp
-
-       neg     $index,$mask
-       srax    $mask,63,$mask
-
-       add     $index,$mask,$index
-       add     $inp,$index,$inp
-       mov     64/4,$index
-
-.Loop_select_w7:
-       ldub    [$inp+64*0],%l0
-       prefetch [$inp+3840+64*0],1
-       subcc   $index,1,$index
-       ldub    [$inp+64*1],%l1
-       prefetch [$inp+3840+64*1],1
-       ldub    [$inp+64*2],%l2
-       prefetch [$inp+3840+64*2],1
-       ldub    [$inp+64*3],%l3
-       prefetch [$inp+3840+64*3],1
-       add     $inp,64*4,$inp
-       sll     %l1,8,%l1
-       sll     %l2,16,%l2
-       or      %l0,%l1,%l0
-       sll     %l3,24,%l3
-       or      %l0,%l2,%l0
-       or      %l0,%l3,%l0
-       and     %l0,$mask,%l0
-       st      %l0,[$out]
-       bne     .Loop_select_w7
-       add     $out,4,$out
-
-       ret
-       restore
-.type  ecp_nistz256_select_w7,#function
-.size  ecp_nistz256_select_w7,.-ecp_nistz256_select_w7
-___
-}}}
-{{{
-########################################################################
-# Following subroutines are VIS3 counterparts of those above that
-# implement ones found in ecp_nistz256.c. Key difference is that they
-# use 128-bit muliplication and addition with 64-bit carry, and in order
-# to do that they perform conversion from uin32_t[8] to uint64_t[4] upon
-# entry and vice versa on return.
-#
-my ($rp,$ap,$bp)=map("%i$_",(0..2));
-my ($t0,$t1,$t2,$t3,$a0,$a1,$a2,$a3)=map("%l$_",(0..7));
-my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5)=map("%o$_",(0..5));
-my ($bi,$poly1,$poly3,$minus1)=(map("%i$_",(3..5)),"%g1");
-my ($rp_real,$ap_real)=("%g2","%g3");
-my ($acc6,$acc7)=($bp,$bi);    # used in squaring
-
-$code.=<<___;
-#if 0
-.align 32
-__ecp_nistz256_mul_by_2_vis3:
-       addcc   $acc0,$acc0,$acc0
-       addxccc $acc1,$acc1,$acc1
-       addxccc $acc2,$acc2,$acc2
-       addxccc $acc3,$acc3,$acc3
-       b       .Lreduce_by_sub_vis3
-       addxc   %g0,%g0,$acc4           ! did it carry?
-.type  __ecp_nistz256_mul_by_2_vis3,#function
-.size  __ecp_nistz256_mul_by_2_vis3,.-__ecp_nistz256_mul_by_2_vis3
-
-.align 32
-__ecp_nistz256_add_vis3:
-       ldx     [$bp+0],$t0
-       ldx     [$bp+8],$t1
-       ldx     [$bp+16],$t2
-       ldx     [$bp+24],$t3
-
-__ecp_nistz256_add_noload_vis3:
-
-       addcc   $t0,$acc0,$acc0
-       addxccc $t1,$acc1,$acc1
-       addxccc $t2,$acc2,$acc2
-       addxccc $t3,$acc3,$acc3
-       addxc   %g0,%g0,$acc4           ! did it carry?
-
-.Lreduce_by_sub_vis3:
-
-       addcc   $acc0,1,$t0             ! add -modulus, i.e. subtract
-       addxccc $acc1,$poly1,$t1
-       addxccc $acc2,$minus1,$t2
-       addxccc $acc3,$poly3,$t3
-       addxc   $acc4,$minus1,$acc4
-
-       movrz   $acc4,$t0,$acc0         ! ret = borrow ? ret : ret-modulus
-       movrz   $acc4,$t1,$acc1
-       stx     $acc0,[$rp]
-       movrz   $acc4,$t2,$acc2
-       stx     $acc1,[$rp+8]
-       movrz   $acc4,$t3,$acc3
-       stx     $acc2,[$rp+16]
-       retl
-       stx     $acc3,[$rp+24]
-.type  __ecp_nistz256_add_vis3,#function
-.size  __ecp_nistz256_add_vis3,.-__ecp_nistz256_add_vis3
-
-! Trouble with subtraction is that there is no subtraction with 64-bit
-! borrow, only with 32-bit one. For this reason we "decompose" 64-bit
-! $acc0-$acc3 to 32-bit values and pick b[4] in 32-bit pieces. But
-! recall that SPARC is big-endian, which is why you'll observe that
-! b[4] is accessed as 4-0-12-8-20-16-28-24. And prior reduction we
-! "collect" result back to 64-bit $acc0-$acc3.
-.align 32
-__ecp_nistz256_sub_from_vis3:
-       ld      [$bp+4],$t0
-       ld      [$bp+0],$t1
-       ld      [$bp+12],$t2
-       ld      [$bp+8],$t3
-
-       srlx    $acc0,32,$acc4
-       not     $poly1,$poly1
-       srlx    $acc1,32,$acc5
-       subcc   $acc0,$t0,$acc0
-       ld      [$bp+20],$t0
-       subccc  $acc4,$t1,$acc4
-       ld      [$bp+16],$t1
-       subccc  $acc1,$t2,$acc1
-       ld      [$bp+28],$t2
-       and     $acc0,$poly1,$acc0
-       subccc  $acc5,$t3,$acc5
-       ld      [$bp+24],$t3
-       sllx    $acc4,32,$acc4
-       and     $acc1,$poly1,$acc1
-       sllx    $acc5,32,$acc5
-       or      $acc0,$acc4,$acc0
-       srlx    $acc2,32,$acc4
-       or      $acc1,$acc5,$acc1
-       srlx    $acc3,32,$acc5
-       subccc  $acc2,$t0,$acc2
-       subccc  $acc4,$t1,$acc4
-       subccc  $acc3,$t2,$acc3
-       and     $acc2,$poly1,$acc2
-       subccc  $acc5,$t3,$acc5
-       sllx    $acc4,32,$acc4
-       and     $acc3,$poly1,$acc3
-       sllx    $acc5,32,$acc5
-       or      $acc2,$acc4,$acc2
-       subc    %g0,%g0,$acc4           ! did it borrow?
-       b       .Lreduce_by_add_vis3
-       or      $acc3,$acc5,$acc3
-.type  __ecp_nistz256_sub_from_vis3,#function
-.size  __ecp_nistz256_sub_from_vis3,.-__ecp_nistz256_sub_from_vis3
-
-.align 32
-__ecp_nistz256_sub_morf_vis3:
-       ld      [$bp+4],$t0
-       ld      [$bp+0],$t1
-       ld      [$bp+12],$t2
-       ld      [$bp+8],$t3
-
-       srlx    $acc0,32,$acc4
-       not     $poly1,$poly1
-       srlx    $acc1,32,$acc5
-       subcc   $t0,$acc0,$acc0
-       ld      [$bp+20],$t0
-       subccc  $t1,$acc4,$acc4
-       ld      [$bp+16],$t1
-       subccc  $t2,$acc1,$acc1
-       ld      [$bp+28],$t2
-       and     $acc0,$poly1,$acc0
-       subccc  $t3,$acc5,$acc5
-       ld      [$bp+24],$t3
-       sllx    $acc4,32,$acc4
-       and     $acc1,$poly1,$acc1
-       sllx    $acc5,32,$acc5
-       or      $acc0,$acc4,$acc0
-       srlx    $acc2,32,$acc4
-       or      $acc1,$acc5,$acc1
-       srlx    $acc3,32,$acc5
-       subccc  $t0,$acc2,$acc2
-       subccc  $t1,$acc4,$acc4
-       subccc  $t2,$acc3,$acc3
-       and     $acc2,$poly1,$acc2
-       subccc  $t3,$acc5,$acc5
-       sllx    $acc4,32,$acc4
-       and     $acc3,$poly1,$acc3
-       sllx    $acc5,32,$acc5
-       or      $acc2,$acc4,$acc2
-       subc    %g0,%g0,$acc4           ! did it borrow?
-       or      $acc3,$acc5,$acc3
-
-.Lreduce_by_add_vis3:
-
-       addcc   $acc0,-1,$t0            ! add modulus
-       not     $poly3,$t3
-       addxccc $acc1,$poly1,$t1
-       not     $poly1,$poly1           ! restore $poly1
-       addxccc $acc2,%g0,$t2
-       addxc   $acc3,$t3,$t3
-
-       movrnz  $acc4,$t0,$acc0         ! if a-b borrowed, ret = ret+mod
-       movrnz  $acc4,$t1,$acc1
-       stx     $acc0,[$rp]
-       movrnz  $acc4,$t2,$acc2
-       stx     $acc1,[$rp+8]
-       movrnz  $acc4,$t3,$acc3
-       stx     $acc2,[$rp+16]
-       retl
-       stx     $acc3,[$rp+24]
-.type  __ecp_nistz256_sub_morf_vis3,#function
-.size  __ecp_nistz256_sub_morf_vis3,.-__ecp_nistz256_sub_morf_vis3
-
-.align 32
-__ecp_nistz256_div_by_2_vis3:
-       ! ret = (a is odd ? a+mod : a) >> 1
-
-       not     $poly1,$t1
-       not     $poly3,$t3
-       and     $acc0,1,$acc5
-       addcc   $acc0,-1,$t0            ! add modulus
-       addxccc $acc1,$t1,$t1
-       addxccc $acc2,%g0,$t2
-       addxccc $acc3,$t3,$t3
-       addxc   %g0,%g0,$acc4           ! carry bit
-
-       movrnz  $acc5,$t0,$acc0
-       movrnz  $acc5,$t1,$acc1
-       movrnz  $acc5,$t2,$acc2
-       movrnz  $acc5,$t3,$acc3
-       movrz   $acc5,%g0,$acc4
-
-       ! ret >>= 1
-
-       srlx    $acc0,1,$acc0
-       sllx    $acc1,63,$t0
-       srlx    $acc1,1,$acc1
-       or      $acc0,$t0,$acc0
-       sllx    $acc2,63,$t1
-       srlx    $acc2,1,$acc2
-       or      $acc1,$t1,$acc1
-       sllx    $acc3,63,$t2
-       stx     $acc0,[$rp]
-       srlx    $acc3,1,$acc3
-       or      $acc2,$t2,$acc2
-       sllx    $acc4,63,$t3            ! don't forget carry bit
-       stx     $acc1,[$rp+8]
-       or      $acc3,$t3,$acc3
-       stx     $acc2,[$rp+16]
-       retl
-       stx     $acc3,[$rp+24]
-.type  __ecp_nistz256_div_by_2_vis3,#function
-.size  __ecp_nistz256_div_by_2_vis3,.-__ecp_nistz256_div_by_2_vis3
-
-! compared to __ecp_nistz256_mul_mont it's almost 4x smaller and
-! 4x faster [on T4]...
-.align 32
-__ecp_nistz256_mul_mont_vis3:
-       mulx    $a0,$bi,$acc0
-       not     $poly3,$poly3           ! 0xFFFFFFFF00000001
-       umulxhi $a0,$bi,$t0
-       mulx    $a1,$bi,$acc1
-       umulxhi $a1,$bi,$t1
-       mulx    $a2,$bi,$acc2
-       umulxhi $a2,$bi,$t2
-       mulx    $a3,$bi,$acc3
-       umulxhi $a3,$bi,$t3
-       ldx     [$bp+8],$bi             ! b[1]
-
-       addcc   $acc1,$t0,$acc1         ! accumulate high parts of multiplication
-        sllx   $acc0,32,$t0
-       addxccc $acc2,$t1,$acc2
-        srlx   $acc0,32,$t1
-       addxccc $acc3,$t2,$acc3
-       addxc   %g0,$t3,$acc4
-       mov     0,$acc5
-___
-for($i=1;$i<4;$i++) {
-       # Reduction iteration is normally performed by accumulating
-       # result of multiplication of modulus by "magic" digit [and
-       # omitting least significant word, which is guaranteed to
-       # be 0], but thanks to special form of modulus and "magic"
-       # digit being equal to least significant word, it can be
-       # performed with additions and subtractions alone. Indeed:
-       #
-       #            ffff0001.00000000.0000ffff.ffffffff
-       # *                                     abcdefgh
-       # + xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.abcdefgh
-       #
-       # Now observing that ff..ff*x = (2^n-1)*x = 2^n*x-x, we
-       # rewrite above as:
-       #
-       #   xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.abcdefgh
-       # + abcdefgh.abcdefgh.0000abcd.efgh0000.00000000
-       # - 0000abcd.efgh0000.00000000.00000000.abcdefgh
-       #
-       # or marking redundant operations:
-       #
-       #   xxxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx.--------
-       # + abcdefgh.abcdefgh.0000abcd.efgh0000.--------
-       # - 0000abcd.efgh0000.--------.--------.--------
-       #   ^^^^^^^^ but this word is calculated with umulxhi, because
-       #            there is no subtract with 64-bit borrow:-(
-
-$code.=<<___;
-       sub     $acc0,$t0,$t2           ! acc0*0xFFFFFFFF00000001, low part
-       umulxhi $acc0,$poly3,$t3        ! acc0*0xFFFFFFFF00000001, high part
-       addcc   $acc1,$t0,$acc0         ! +=acc[0]<<96 and omit acc[0]
-       mulx    $a0,$bi,$t0
-       addxccc $acc2,$t1,$acc1
-       mulx    $a1,$bi,$t1
-       addxccc $acc3,$t2,$acc2         ! +=acc[0]*0xFFFFFFFF00000001
-       mulx    $a2,$bi,$t2
-       addxccc $acc4,$t3,$acc3
-       mulx    $a3,$bi,$t3
-       addxc   $acc5,%g0,$acc4
-
-       addcc   $acc0,$t0,$acc0         ! accumulate low parts of multiplication
-       umulxhi $a0,$bi,$t0
-       addxccc $acc1,$t1,$acc1
-       umulxhi $a1,$bi,$t1
-       addxccc $acc2,$t2,$acc2
-       umulxhi $a2,$bi,$t2
-       addxccc $acc3,$t3,$acc3
-       umulxhi $a3,$bi,$t3
-       addxc   $acc4,%g0,$acc4
-___
-$code.=<<___   if ($i<3);
-       ldx     [$bp+8*($i+1)],$bi      ! bp[$i+1]
-___
-$code.=<<___;
-       addcc   $acc1,$t0,$acc1         ! accumulate high parts of multiplication 
-        sllx   $acc0,32,$t0
-       addxccc $acc2,$t1,$acc2
-        srlx   $acc0,32,$t1
-       addxccc $acc3,$t2,$acc3
-       addxccc $acc4,$t3,$acc4
-       addxc   %g0,%g0,$acc5
-___
-}
-$code.=<<___;
-       sub     $acc0,$t0,$t2           ! acc0*0xFFFFFFFF00000001, low part
-       umulxhi $acc0,$poly3,$t3        ! acc0*0xFFFFFFFF00000001, high part
-       addcc   $acc1,$t0,$acc0         ! +=acc[0]<<96 and omit acc[0]
-       addxccc $acc2,$t1,$acc1
-       addxccc $acc3,$t2,$acc2         ! +=acc[0]*0xFFFFFFFF00000001
-       addxccc $acc4,$t3,$acc3
-       b       .Lmul_final_vis3        ! see below
-       addxc   $acc5,%g0,$acc4
-.type  __ecp_nistz256_mul_mont_vis3,#function
-.size  __ecp_nistz256_mul_mont_vis3,.-__ecp_nistz256_mul_mont_vis3
-
-! compared to above __ecp_nistz256_mul_mont_vis3 it's 21% less
-! instructions, but only 14% faster [on T4]...
-.align 32
-__ecp_nistz256_sqr_mont_vis3:
-       !  |  |  |  |  |  |a1*a0|  |
-       !  |  |  |  |  |a2*a0|  |  |
-       !  |  |a3*a2|a3*a0|  |  |  |
-       !  |  |  |  |a2*a1|  |  |  |
-       !  |  |  |a3*a1|  |  |  |  |
-       ! *|  |  |  |  |  |  |  | 2|
-       ! +|a3*a3|a2*a2|a1*a1|a0*a0|
-       !  |--+--+--+--+--+--+--+--|
-       !  |A7|A6|A5|A4|A3|A2|A1|A0|, where Ax is $accx, i.e. follow $accx
-       !
-       !  "can't overflow" below mark carrying into high part of
-       !  multiplication result, which can't overflow, because it
-       !  can never be all ones.
-
-       mulx    $a1,$a0,$acc1           ! a[1]*a[0]
-       umulxhi $a1,$a0,$t1
-       mulx    $a2,$a0,$acc2           ! a[2]*a[0]
-       umulxhi $a2,$a0,$t2
-       mulx    $a3,$a0,$acc3           ! a[3]*a[0]
-       umulxhi $a3,$a0,$acc4
-
-       addcc   $acc2,$t1,$acc2         ! accumulate high parts of multiplication
-       mulx    $a2,$a1,$t0             ! a[2]*a[1]
-       umulxhi $a2,$a1,$t1
-       addxccc $acc3,$t2,$acc3
-       mulx    $a3,$a1,$t2             ! a[3]*a[1]
-       umulxhi $a3,$a1,$t3
-       addxc   $acc4,%g0,$acc4         ! can't overflow
-
-       mulx    $a3,$a2,$acc5           ! a[3]*a[2]
-       not     $poly3,$poly3           ! 0xFFFFFFFF00000001
-       umulxhi $a3,$a2,$acc6
-
-       addcc   $t2,$t1,$t1             ! accumulate high parts of multiplication
-       mulx    $a0,$a0,$acc0           ! a[0]*a[0]
-       addxc   $t3,%g0,$t2             ! can't overflow
-
-       addcc   $acc3,$t0,$acc3         ! accumulate low parts of multiplication
-       umulxhi $a0,$a0,$a0
-       addxccc $acc4,$t1,$acc4
-       mulx    $a1,$a1,$t1             ! a[1]*a[1]
-       addxccc $acc5,$t2,$acc5
-       umulxhi $a1,$a1,$a1
-       addxc   $acc6,%g0,$acc6         ! can't overflow
-
-       addcc   $acc1,$acc1,$acc1       ! acc[1-6]*=2
-       mulx    $a2,$a2,$t2             ! a[2]*a[2]
-       addxccc $acc2,$acc2,$acc2
-       umulxhi $a2,$a2,$a2
-       addxccc $acc3,$acc3,$acc3
-       mulx    $a3,$a3,$t3             ! a[3]*a[3]
-       addxccc $acc4,$acc4,$acc4
-       umulxhi $a3,$a3,$a3
-       addxccc $acc5,$acc5,$acc5
-       addxccc $acc6,$acc6,$acc6
-       addxc   %g0,%g0,$acc7
-
-       addcc   $acc1,$a0,$acc1         ! +a[i]*a[i]
-       addxccc $acc2,$t1,$acc2
-       addxccc $acc3,$a1,$acc3
-       addxccc $acc4,$t2,$acc4
-        sllx   $acc0,32,$t0
-       addxccc $acc5,$a2,$acc5
-        srlx   $acc0,32,$t1
-       addxccc $acc6,$t3,$acc6
-        sub    $acc0,$t0,$t2           ! acc0*0xFFFFFFFF00000001, low part
-       addxc   $acc7,$a3,$acc7
-___
-for($i=0;$i<3;$i++) {                  # reductions, see commentary
-                                       # in multiplication for details
-$code.=<<___;
-       umulxhi $acc0,$poly3,$t3        ! acc0*0xFFFFFFFF00000001, high part
-       addcc   $acc1,$t0,$acc0         ! +=acc[0]<<96 and omit acc[0]
-        sllx   $acc0,32,$t0
-       addxccc $acc2,$t1,$acc1
-        srlx   $acc0,32,$t1
-       addxccc $acc3,$t2,$acc2         ! +=acc[0]*0xFFFFFFFF00000001
-        sub    $acc0,$t0,$t2           ! acc0*0xFFFFFFFF00000001, low part
-       addxc   %g0,$t3,$acc3           ! can't overflow
-___
-}
-$code.=<<___;
-       umulxhi $acc0,$poly3,$t3        ! acc0*0xFFFFFFFF00000001, high part
-       addcc   $acc1,$t0,$acc0         ! +=acc[0]<<96 and omit acc[0]
-       addxccc $acc2,$t1,$acc1
-       addxccc $acc3,$t2,$acc2         ! +=acc[0]*0xFFFFFFFF00000001
-       addxc   %g0,$t3,$acc3           ! can't overflow
-
-       addcc   $acc0,$acc4,$acc0       ! accumulate upper half
-       addxccc $acc1,$acc5,$acc1
-       addxccc $acc2,$acc6,$acc2
-       addxccc $acc3,$acc7,$acc3
-       addxc   %g0,%g0,$acc4
-
-.Lmul_final_vis3:
-
-       ! Final step is "if result > mod, subtract mod", but as comparison
-       ! means subtraction, we do the subtraction and then copy outcome
-       ! if it didn't borrow. But note that as we [have to] replace
-       ! subtraction with addition with negative, carry/borrow logic is
-       ! inverse.
-
-       addcc   $acc0,1,$t0             ! add -modulus, i.e. subtract
-       not     $poly3,$poly3           ! restore 0x00000000FFFFFFFE
-       addxccc $acc1,$poly1,$t1
-       addxccc $acc2,$minus1,$t2
-       addxccc $acc3,$poly3,$t3
-       addxccc $acc4,$minus1,%g0       ! did it carry?
-
-       movcs   %xcc,$t0,$acc0
-       movcs   %xcc,$t1,$acc1
-       stx     $acc0,[$rp]
-       movcs   %xcc,$t2,$acc2
-       stx     $acc1,[$rp+8]
-       movcs   %xcc,$t3,$acc3
-       stx     $acc2,[$rp+16]
-       retl
-       stx     $acc3,[$rp+24]
-.type  __ecp_nistz256_sqr_mont_vis3,#function
-.size  __ecp_nistz256_sqr_mont_vis3,.-__ecp_nistz256_sqr_mont_vis3
-___
-
-########################################################################
-# void ecp_nistz256_point_double(P256_POINT *out,const P256_POINT *inp);
-#
-{
-my ($res_x,$res_y,$res_z,
-    $in_x,$in_y,$in_z,
-    $S,$M,$Zsqr,$tmp0)=map(32*$_,(0..9));
-# above map() describes stack layout with 10 temporary
-# 256-bit vectors on top.
-
-$code.=<<___;
-.align 32
-ecp_nistz256_point_double_vis3:
-       save    %sp,-STACK64_FRAME-32*10,%sp
-
-       mov     $rp,$rp_real
-.Ldouble_shortcut_vis3:
-       mov     -1,$minus1
-       mov     -2,$poly3
-       sllx    $minus1,32,$poly1               ! 0xFFFFFFFF00000000
-       srl     $poly3,0,$poly3                 ! 0x00000000FFFFFFFE
-
-       ! convert input to uint64_t[4]
-       ld      [$ap],$a0                       ! in_x
-       ld      [$ap+4],$t0
-       ld      [$ap+8],$a1
-       ld      [$ap+12],$t1
-       ld      [$ap+16],$a2
-       ld      [$ap+20],$t2
-       ld      [$ap+24],$a3
-       ld      [$ap+28],$t3
-       sllx    $t0,32,$t0
-       sllx    $t1,32,$t1
-       ld      [$ap+32],$acc0                  ! in_y
-       or      $a0,$t0,$a0
-       ld      [$ap+32+4],$t0
-       sllx    $t2,32,$t2
-       ld      [$ap+32+8],$acc1
-       or      $a1,$t1,$a1
-       ld      [$ap+32+12],$t1
-       sllx    $t3,32,$t3
-       ld      [$ap+32+16],$acc2
-       or      $a2,$t2,$a2
-       ld      [$ap+32+20],$t2
-       or      $a3,$t3,$a3
-       ld      [$ap+32+24],$acc3
-       sllx    $t0,32,$t0
-       ld      [$ap+32+28],$t3
-       sllx    $t1,32,$t1
-       stx     $a0,[%sp+LOCALS64+$in_x]
-       sllx    $t2,32,$t2
-       stx     $a1,[%sp+LOCALS64+$in_x+8]
-       sllx    $t3,32,$t3
-       stx     $a2,[%sp+LOCALS64+$in_x+16]
-       or      $acc0,$t0,$acc0
-       stx     $a3,[%sp+LOCALS64+$in_x+24]
-       or      $acc1,$t1,$acc1
-       stx     $acc0,[%sp+LOCALS64+$in_y]
-       or      $acc2,$t2,$acc2
-       stx     $acc1,[%sp+LOCALS64+$in_y+8]
-       or      $acc3,$t3,$acc3
-       stx     $acc2,[%sp+LOCALS64+$in_y+16]
-       stx     $acc3,[%sp+LOCALS64+$in_y+24]
-
-       ld      [$ap+64],$a0                    ! in_z
-       ld      [$ap+64+4],$t0
-       ld      [$ap+64+8],$a1
-       ld      [$ap+64+12],$t1
-       ld      [$ap+64+16],$a2
-       ld      [$ap+64+20],$t2
-       ld      [$ap+64+24],$a3
-       ld      [$ap+64+28],$t3
-       sllx    $t0,32,$t0
-       sllx    $t1,32,$t1
-       or      $a0,$t0,$a0
-       sllx    $t2,32,$t2
-       or      $a1,$t1,$a1
-       sllx    $t3,32,$t3
-       or      $a2,$t2,$a2
-       or      $a3,$t3,$a3
-       sllx    $t0,32,$t0
-       sllx    $t1,32,$t1
-       stx     $a0,[%sp+LOCALS64+$in_z]
-       sllx    $t2,32,$t2
-       stx     $a1,[%sp+LOCALS64+$in_z+8]
-       sllx    $t3,32,$t3
-       stx     $a2,[%sp+LOCALS64+$in_z+16]
-       stx     $a3,[%sp+LOCALS64+$in_z+24]
-
-       ! in_y is still in $acc0-$acc3
-       call    __ecp_nistz256_mul_by_2_vis3    ! p256_mul_by_2(S, in_y);
-       add     %sp,LOCALS64+$S,$rp
-
-       ! in_z is still in $a0-$a3
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(Zsqr, in_z);
-       add     %sp,LOCALS64+$Zsqr,$rp
-
-       mov     $acc0,$a0                       ! put Zsqr aside
-       mov     $acc1,$a1
-       mov     $acc2,$a2
-       mov     $acc3,$a3
-
-       add     %sp,LOCALS64+$in_x,$bp
-       call    __ecp_nistz256_add_vis3         ! p256_add(M, Zsqr, in_x);
-       add     %sp,LOCALS64+$M,$rp
-
-       mov     $a0,$acc0                       ! restore Zsqr
-       ldx     [%sp+LOCALS64+$S],$a0           ! forward load
-       mov     $a1,$acc1
-       ldx     [%sp+LOCALS64+$S+8],$a1
-       mov     $a2,$acc2
-       ldx     [%sp+LOCALS64+$S+16],$a2
-       mov     $a3,$acc3
-       ldx     [%sp+LOCALS64+$S+24],$a3
-
-       add     %sp,LOCALS64+$in_x,$bp
-       call    __ecp_nistz256_sub_morf_vis3    ! p256_sub(Zsqr, in_x, Zsqr);
-       add     %sp,LOCALS64+$Zsqr,$rp
-
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(S, S);
-       add     %sp,LOCALS64+$S,$rp
-
-       ldx     [%sp+LOCALS64+$in_z],$bi
-       ldx     [%sp+LOCALS64+$in_y],$a0
-       ldx     [%sp+LOCALS64+$in_y+8],$a1
-       ldx     [%sp+LOCALS64+$in_y+16],$a2
-       ldx     [%sp+LOCALS64+$in_y+24],$a3
-       add     %sp,LOCALS64+$in_z,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(tmp0, in_z, in_y);
-       add     %sp,LOCALS64+$tmp0,$rp
-
-       ldx     [%sp+LOCALS64+$M],$bi           ! forward load
-       ldx     [%sp+LOCALS64+$Zsqr],$a0
-       ldx     [%sp+LOCALS64+$Zsqr+8],$a1
-       ldx     [%sp+LOCALS64+$Zsqr+16],$a2
-       ldx     [%sp+LOCALS64+$Zsqr+24],$a3
-
-       call    __ecp_nistz256_mul_by_2_vis3    ! p256_mul_by_2(res_z, tmp0);
-       add     %sp,LOCALS64+$res_z,$rp
-
-       add     %sp,LOCALS64+$M,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(M, M, Zsqr);
-       add     %sp,LOCALS64+$M,$rp
-
-       mov     $acc0,$a0                       ! put aside M
-       mov     $acc1,$a1
-       mov     $acc2,$a2
-       mov     $acc3,$a3
-       call    __ecp_nistz256_mul_by_2_vis3
-       add     %sp,LOCALS64+$M,$rp
-       mov     $a0,$t0                         ! copy M
-       ldx     [%sp+LOCALS64+$S],$a0           ! forward load
-       mov     $a1,$t1
-       ldx     [%sp+LOCALS64+$S+8],$a1
-       mov     $a2,$t2
-       ldx     [%sp+LOCALS64+$S+16],$a2
-       mov     $a3,$t3
-       ldx     [%sp+LOCALS64+$S+24],$a3
-       call    __ecp_nistz256_add_noload_vis3  ! p256_mul_by_3(M, M);
-       add     %sp,LOCALS64+$M,$rp
-
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(tmp0, S);
-       add     %sp,LOCALS64+$tmp0,$rp
-
-       ldx     [%sp+LOCALS64+$S],$bi           ! forward load
-       ldx     [%sp+LOCALS64+$in_x],$a0
-       ldx     [%sp+LOCALS64+$in_x+8],$a1
-       ldx     [%sp+LOCALS64+$in_x+16],$a2
-       ldx     [%sp+LOCALS64+$in_x+24],$a3
-
-       call    __ecp_nistz256_div_by_2_vis3    ! p256_div_by_2(res_y, tmp0);
-       add     %sp,LOCALS64+$res_y,$rp
-
-       add     %sp,LOCALS64+$S,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S, S, in_x);
-       add     %sp,LOCALS64+$S,$rp
-
-       ldx     [%sp+LOCALS64+$M],$a0           ! forward load
-       ldx     [%sp+LOCALS64+$M+8],$a1
-       ldx     [%sp+LOCALS64+$M+16],$a2
-       ldx     [%sp+LOCALS64+$M+24],$a3
-
-       call    __ecp_nistz256_mul_by_2_vis3    ! p256_mul_by_2(tmp0, S);
-       add     %sp,LOCALS64+$tmp0,$rp
-
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(res_x, M);
-       add     %sp,LOCALS64+$res_x,$rp
-
-       add     %sp,LOCALS64+$tmp0,$bp
-       call    __ecp_nistz256_sub_from_vis3    ! p256_sub(res_x, res_x, tmp0);
-       add     %sp,LOCALS64+$res_x,$rp
-
-       ldx     [%sp+LOCALS64+$M],$a0           ! forward load
-       ldx     [%sp+LOCALS64+$M+8],$a1
-       ldx     [%sp+LOCALS64+$M+16],$a2
-       ldx     [%sp+LOCALS64+$M+24],$a3
-
-       add     %sp,LOCALS64+$S,$bp
-       call    __ecp_nistz256_sub_morf_vis3    ! p256_sub(S, S, res_x);
-       add     %sp,LOCALS64+$S,$rp
-
-       mov     $acc0,$bi
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S, S, M);
-       add     %sp,LOCALS64+$S,$rp
-
-       ldx     [%sp+LOCALS64+$res_x],$a0       ! forward load
-       ldx     [%sp+LOCALS64+$res_x+8],$a1
-       ldx     [%sp+LOCALS64+$res_x+16],$a2
-       ldx     [%sp+LOCALS64+$res_x+24],$a3
-
-       add     %sp,LOCALS64+$res_y,$bp
-       call    __ecp_nistz256_sub_from_vis3    ! p256_sub(res_y, S, res_y);
-       add     %sp,LOCALS64+$res_y,$bp
-
-       ! convert output to uint_32[8]
-       srlx    $a0,32,$t0
-       srlx    $a1,32,$t1
-       st      $a0,[$rp_real]                  ! res_x
-       srlx    $a2,32,$t2
-       st      $t0,[$rp_real+4]
-       srlx    $a3,32,$t3
-       st      $a1,[$rp_real+8]
-       st      $t1,[$rp_real+12]
-       st      $a2,[$rp_real+16]
-       st      $t2,[$rp_real+20]
-       st      $a3,[$rp_real+24]
-       st      $t3,[$rp_real+28]
-
-       ldx     [%sp+LOCALS64+$res_z],$a0       ! forward load
-       srlx    $acc0,32,$t0
-       ldx     [%sp+LOCALS64+$res_z+8],$a1
-       srlx    $acc1,32,$t1
-       ldx     [%sp+LOCALS64+$res_z+16],$a2
-       srlx    $acc2,32,$t2
-       ldx     [%sp+LOCALS64+$res_z+24],$a3
-       srlx    $acc3,32,$t3
-       st      $acc0,[$rp_real+32]             ! res_y
-       st      $t0,  [$rp_real+32+4]
-       st      $acc1,[$rp_real+32+8]
-       st      $t1,  [$rp_real+32+12]
-       st      $acc2,[$rp_real+32+16]
-       st      $t2,  [$rp_real+32+20]
-       st      $acc3,[$rp_real+32+24]
-       st      $t3,  [$rp_real+32+28]
-
-       srlx    $a0,32,$t0
-       srlx    $a1,32,$t1
-       st      $a0,[$rp_real+64]               ! res_z
-       srlx    $a2,32,$t2
-       st      $t0,[$rp_real+64+4]
-       srlx    $a3,32,$t3
-       st      $a1,[$rp_real+64+8]
-       st      $t1,[$rp_real+64+12]
-       st      $a2,[$rp_real+64+16]
-       st      $t2,[$rp_real+64+20]
-       st      $a3,[$rp_real+64+24]
-       st      $t3,[$rp_real+64+28]
-
-       ret
-       restore
-.type  ecp_nistz256_point_double_vis3,#function
-.size  ecp_nistz256_point_double_vis3,.-ecp_nistz256_point_double_vis3
-___
-}
-########################################################################
-# void ecp_nistz256_point_add(P256_POINT *out,const P256_POINT *in1,
-#                            const P256_POINT *in2);
-{
-my ($res_x,$res_y,$res_z,
-    $in1_x,$in1_y,$in1_z,
-    $in2_x,$in2_y,$in2_z,
-    $H,$Hsqr,$R,$Rsqr,$Hcub,
-    $U1,$U2,$S1,$S2)=map(32*$_,(0..17));
-my ($Z1sqr, $Z2sqr) = ($Hsqr, $Rsqr);
-
-# above map() describes stack layout with 18 temporary
-# 256-bit vectors on top. Then we reserve some space for
-# !in1infty, !in2infty and result of check for zero.
-
-$code.=<<___;
-.globl ecp_nistz256_point_add_vis3
-.align 32
-ecp_nistz256_point_add_vis3:
-       save    %sp,-STACK64_FRAME-32*18-32,%sp
-
-       mov     $rp,$rp_real
-       mov     -1,$minus1
-       mov     -2,$poly3
-       sllx    $minus1,32,$poly1               ! 0xFFFFFFFF00000000
-       srl     $poly3,0,$poly3                 ! 0x00000000FFFFFFFE
-
-       ! convert input to uint64_t[4]
-       ld      [$bp],$a0                       ! in2_x
-       ld      [$bp+4],$t0
-       ld      [$bp+8],$a1
-       ld      [$bp+12],$t1
-       ld      [$bp+16],$a2
-       ld      [$bp+20],$t2
-       ld      [$bp+24],$a3
-       ld      [$bp+28],$t3
-       sllx    $t0,32,$t0
-       sllx    $t1,32,$t1
-       ld      [$bp+32],$acc0                  ! in2_y
-       or      $a0,$t0,$a0
-       ld      [$bp+32+4],$t0
-       sllx    $t2,32,$t2
-       ld      [$bp+32+8],$acc1
-       or      $a1,$t1,$a1
-       ld      [$bp+32+12],$t1
-       sllx    $t3,32,$t3
-       ld      [$bp+32+16],$acc2
-       or      $a2,$t2,$a2
-       ld      [$bp+32+20],$t2
-       or      $a3,$t3,$a3
-       ld      [$bp+32+24],$acc3
-       sllx    $t0,32,$t0
-       ld      [$bp+32+28],$t3
-       sllx    $t1,32,$t1
-       stx     $a0,[%sp+LOCALS64+$in2_x]
-       sllx    $t2,32,$t2
-       stx     $a1,[%sp+LOCALS64+$in2_x+8]
-       sllx    $t3,32,$t3
-       stx     $a2,[%sp+LOCALS64+$in2_x+16]
-       or      $acc0,$t0,$acc0
-       stx     $a3,[%sp+LOCALS64+$in2_x+24]
-       or      $acc1,$t1,$acc1
-       stx     $acc0,[%sp+LOCALS64+$in2_y]
-       or      $acc2,$t2,$acc2
-       stx     $acc1,[%sp+LOCALS64+$in2_y+8]
-       or      $acc3,$t3,$acc3
-       stx     $acc2,[%sp+LOCALS64+$in2_y+16]
-       stx     $acc3,[%sp+LOCALS64+$in2_y+24]
-
-       ld      [$bp+64],$acc0                  ! in2_z
-       ld      [$bp+64+4],$t0
-       ld      [$bp+64+8],$acc1
-       ld      [$bp+64+12],$t1
-       ld      [$bp+64+16],$acc2
-       ld      [$bp+64+20],$t2
-       ld      [$bp+64+24],$acc3
-       ld      [$bp+64+28],$t3
-       sllx    $t0,32,$t0
-       sllx    $t1,32,$t1
-       ld      [$ap],$a0                       ! in1_x
-       or      $acc0,$t0,$acc0
-       ld      [$ap+4],$t0
-       sllx    $t2,32,$t2
-       ld      [$ap+8],$a1
-       or      $acc1,$t1,$acc1
-       ld      [$ap+12],$t1
-       sllx    $t3,32,$t3
-       ld      [$ap+16],$a2
-       or      $acc2,$t2,$acc2
-       ld      [$ap+20],$t2
-       or      $acc3,$t3,$acc3
-       ld      [$ap+24],$a3
-       sllx    $t0,32,$t0
-       ld      [$ap+28],$t3
-       sllx    $t1,32,$t1
-       stx     $acc0,[%sp+LOCALS64+$in2_z]
-       sllx    $t2,32,$t2
-       stx     $acc1,[%sp+LOCALS64+$in2_z+8]
-       sllx    $t3,32,$t3
-       stx     $acc2,[%sp+LOCALS64+$in2_z+16]
-       stx     $acc3,[%sp+LOCALS64+$in2_z+24]
-
-       or      $acc1,$acc0,$acc0
-       or      $acc3,$acc2,$acc2
-       or      $acc2,$acc0,$acc0
-       movrnz  $acc0,-1,$acc0                  ! !in2infty
-       stx     $acc0,[%fp+STACK_BIAS-8]
-
-       or      $a0,$t0,$a0
-       ld      [$ap+32],$acc0                  ! in1_y
-       or      $a1,$t1,$a1
-       ld      [$ap+32+4],$t0
-       or      $a2,$t2,$a2
-       ld      [$ap+32+8],$acc1
-       or      $a3,$t3,$a3
-       ld      [$ap+32+12],$t1
-       ld      [$ap+32+16],$acc2
-       ld      [$ap+32+20],$t2
-       ld      [$ap+32+24],$acc3
-       sllx    $t0,32,$t0
-       ld      [$ap+32+28],$t3
-       sllx    $t1,32,$t1
-       stx     $a0,[%sp+LOCALS64+$in1_x]
-       sllx    $t2,32,$t2
-       stx     $a1,[%sp+LOCALS64+$in1_x+8]
-       sllx    $t3,32,$t3
-       stx     $a2,[%sp+LOCALS64+$in1_x+16]
-       or      $acc0,$t0,$acc0
-       stx     $a3,[%sp+LOCALS64+$in1_x+24]
-       or      $acc1,$t1,$acc1
-       stx     $acc0,[%sp+LOCALS64+$in1_y]
-       or      $acc2,$t2,$acc2
-       stx     $acc1,[%sp+LOCALS64+$in1_y+8]
-       or      $acc3,$t3,$acc3
-       stx     $acc2,[%sp+LOCALS64+$in1_y+16]
-       stx     $acc3,[%sp+LOCALS64+$in1_y+24]
-
-       ldx     [%sp+LOCALS64+$in2_z],$a0       ! forward load
-       ldx     [%sp+LOCALS64+$in2_z+8],$a1
-       ldx     [%sp+LOCALS64+$in2_z+16],$a2
-       ldx     [%sp+LOCALS64+$in2_z+24],$a3
-
-       ld      [$ap+64],$acc0                  ! in1_z
-       ld      [$ap+64+4],$t0
-       ld      [$ap+64+8],$acc1
-       ld      [$ap+64+12],$t1
-       ld      [$ap+64+16],$acc2
-       ld      [$ap+64+20],$t2
-       ld      [$ap+64+24],$acc3
-       ld      [$ap+64+28],$t3
-       sllx    $t0,32,$t0
-       sllx    $t1,32,$t1
-       or      $acc0,$t0,$acc0
-       sllx    $t2,32,$t2
-       or      $acc1,$t1,$acc1
-       sllx    $t3,32,$t3
-       stx     $acc0,[%sp+LOCALS64+$in1_z]
-       or      $acc2,$t2,$acc2
-       stx     $acc1,[%sp+LOCALS64+$in1_z+8]
-       or      $acc3,$t3,$acc3
-       stx     $acc2,[%sp+LOCALS64+$in1_z+16]
-       stx     $acc3,[%sp+LOCALS64+$in1_z+24]
-
-       or      $acc1,$acc0,$acc0
-       or      $acc3,$acc2,$acc2
-       or      $acc2,$acc0,$acc0
-       movrnz  $acc0,-1,$acc0                  ! !in1infty
-       stx     $acc0,[%fp+STACK_BIAS-16]
-
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(Z2sqr, in2_z);
-       add     %sp,LOCALS64+$Z2sqr,$rp
-
-       ldx     [%sp+LOCALS64+$in1_z],$a0
-       ldx     [%sp+LOCALS64+$in1_z+8],$a1
-       ldx     [%sp+LOCALS64+$in1_z+16],$a2
-       ldx     [%sp+LOCALS64+$in1_z+24],$a3
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(Z1sqr, in1_z);
-       add     %sp,LOCALS64+$Z1sqr,$rp
-
-       ldx     [%sp+LOCALS64+$Z2sqr],$bi
-       ldx     [%sp+LOCALS64+$in2_z],$a0
-       ldx     [%sp+LOCALS64+$in2_z+8],$a1
-       ldx     [%sp+LOCALS64+$in2_z+16],$a2
-       ldx     [%sp+LOCALS64+$in2_z+24],$a3
-       add     %sp,LOCALS64+$Z2sqr,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S1, Z2sqr, in2_z);
-       add     %sp,LOCALS64+$S1,$rp
-
-       ldx     [%sp+LOCALS64+$Z1sqr],$bi
-       ldx     [%sp+LOCALS64+$in1_z],$a0
-       ldx     [%sp+LOCALS64+$in1_z+8],$a1
-       ldx     [%sp+LOCALS64+$in1_z+16],$a2
-       ldx     [%sp+LOCALS64+$in1_z+24],$a3
-       add     %sp,LOCALS64+$Z1sqr,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S2, Z1sqr, in1_z);
-       add     %sp,LOCALS64+$S2,$rp
-
-       ldx     [%sp+LOCALS64+$S1],$bi
-       ldx     [%sp+LOCALS64+$in1_y],$a0
-       ldx     [%sp+LOCALS64+$in1_y+8],$a1
-       ldx     [%sp+LOCALS64+$in1_y+16],$a2
-       ldx     [%sp+LOCALS64+$in1_y+24],$a3
-       add     %sp,LOCALS64+$S1,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S1, S1, in1_y);
-       add     %sp,LOCALS64+$S1,$rp
-
-       ldx     [%sp+LOCALS64+$S2],$bi
-       ldx     [%sp+LOCALS64+$in2_y],$a0
-       ldx     [%sp+LOCALS64+$in2_y+8],$a1
-       ldx     [%sp+LOCALS64+$in2_y+16],$a2
-       ldx     [%sp+LOCALS64+$in2_y+24],$a3
-       add     %sp,LOCALS64+$S2,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S2, S2, in2_y);
-       add     %sp,LOCALS64+$S2,$rp
-
-       ldx     [%sp+LOCALS64+$Z2sqr],$bi       ! forward load
-       ldx     [%sp+LOCALS64+$in1_x],$a0
-       ldx     [%sp+LOCALS64+$in1_x+8],$a1
-       ldx     [%sp+LOCALS64+$in1_x+16],$a2
-       ldx     [%sp+LOCALS64+$in1_x+24],$a3
-
-       add     %sp,LOCALS64+$S1,$bp
-       call    __ecp_nistz256_sub_from_vis3    ! p256_sub(R, S2, S1);
-       add     %sp,LOCALS64+$R,$rp
-
-       or      $acc1,$acc0,$acc0               ! see if result is zero
-       or      $acc3,$acc2,$acc2
-       or      $acc2,$acc0,$acc0
-       stx     $acc0,[%fp+STACK_BIAS-24]
-
-       add     %sp,LOCALS64+$Z2sqr,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(U1, in1_x, Z2sqr);
-       add     %sp,LOCALS64+$U1,$rp
-
-       ldx     [%sp+LOCALS64+$Z1sqr],$bi
-       ldx     [%sp+LOCALS64+$in2_x],$a0
-       ldx     [%sp+LOCALS64+$in2_x+8],$a1
-       ldx     [%sp+LOCALS64+$in2_x+16],$a2
-       ldx     [%sp+LOCALS64+$in2_x+24],$a3
-       add     %sp,LOCALS64+$Z1sqr,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(U2, in2_x, Z1sqr);
-       add     %sp,LOCALS64+$U2,$rp
-
-       ldx     [%sp+LOCALS64+$R],$a0           ! forward load
-       ldx     [%sp+LOCALS64+$R+8],$a1
-       ldx     [%sp+LOCALS64+$R+16],$a2
-       ldx     [%sp+LOCALS64+$R+24],$a3
-
-       add     %sp,LOCALS64+$U1,$bp
-       call    __ecp_nistz256_sub_from_vis3    ! p256_sub(H, U2, U1);
-       add     %sp,LOCALS64+$H,$rp
-
-       or      $acc1,$acc0,$acc0               ! see if result is zero
-       or      $acc3,$acc2,$acc2
-       orcc    $acc2,$acc0,$acc0
-
-       bne,pt  %xcc,.Ladd_proceed_vis3         ! is_equal(U1,U2)?
-       nop
-
-       ldx     [%fp+STACK_BIAS-8],$t0
-       ldx     [%fp+STACK_BIAS-16],$t1
-       ldx     [%fp+STACK_BIAS-24],$t2
-       andcc   $t0,$t1,%g0
-       be,pt   %xcc,.Ladd_proceed_vis3         ! (in1infty || in2infty)?
-       nop
-       andcc   $t2,$t2,%g0
-       be,a,pt %xcc,.Ldouble_shortcut_vis3     ! is_equal(S1,S2)?
-       add     %sp,32*(12-10)+32,%sp           ! difference in frame sizes
-
-       st      %g0,[$rp_real]
-       st      %g0,[$rp_real+4]
-       st      %g0,[$rp_real+8]
-       st      %g0,[$rp_real+12]
-       st      %g0,[$rp_real+16]
-       st      %g0,[$rp_real+20]
-       st      %g0,[$rp_real+24]
-       st      %g0,[$rp_real+28]
-       st      %g0,[$rp_real+32]
-       st      %g0,[$rp_real+32+4]
-       st      %g0,[$rp_real+32+8]
-       st      %g0,[$rp_real+32+12]
-       st      %g0,[$rp_real+32+16]
-       st      %g0,[$rp_real+32+20]
-       st      %g0,[$rp_real+32+24]
-       st      %g0,[$rp_real+32+28]
-       st      %g0,[$rp_real+64]
-       st      %g0,[$rp_real+64+4]
-       st      %g0,[$rp_real+64+8]
-       st      %g0,[$rp_real+64+12]
-       st      %g0,[$rp_real+64+16]
-       st      %g0,[$rp_real+64+20]
-       st      %g0,[$rp_real+64+24]
-       st      %g0,[$rp_real+64+28]
-       b       .Ladd_done_vis3
-       nop
-
-.align 16
-.Ladd_proceed_vis3:
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(Rsqr, R);
-       add     %sp,LOCALS64+$Rsqr,$rp
-
-       ldx     [%sp+LOCALS64+$H],$bi
-       ldx     [%sp+LOCALS64+$in1_z],$a0
-       ldx     [%sp+LOCALS64+$in1_z+8],$a1
-       ldx     [%sp+LOCALS64+$in1_z+16],$a2
-       ldx     [%sp+LOCALS64+$in1_z+24],$a3
-       add     %sp,LOCALS64+$H,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(res_z, H, in1_z);
-       add     %sp,LOCALS64+$res_z,$rp
-
-       ldx     [%sp+LOCALS64+$H],$a0
-       ldx     [%sp+LOCALS64+$H+8],$a1
-       ldx     [%sp+LOCALS64+$H+16],$a2
-       ldx     [%sp+LOCALS64+$H+24],$a3
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(Hsqr, H);
-       add     %sp,LOCALS64+$Hsqr,$rp
-
-       ldx     [%sp+LOCALS64+$res_z],$bi
-       ldx     [%sp+LOCALS64+$in2_z],$a0
-       ldx     [%sp+LOCALS64+$in2_z+8],$a1
-       ldx     [%sp+LOCALS64+$in2_z+16],$a2
-       ldx     [%sp+LOCALS64+$in2_z+24],$a3
-       add     %sp,LOCALS64+$res_z,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(res_z, res_z, in2_z);
-       add     %sp,LOCALS64+$res_z,$rp
-
-       ldx     [%sp+LOCALS64+$H],$bi
-       ldx     [%sp+LOCALS64+$Hsqr],$a0
-       ldx     [%sp+LOCALS64+$Hsqr+8],$a1
-       ldx     [%sp+LOCALS64+$Hsqr+16],$a2
-       ldx     [%sp+LOCALS64+$Hsqr+24],$a3
-       add     %sp,LOCALS64+$H,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(Hcub, Hsqr, H);
-       add     %sp,LOCALS64+$Hcub,$rp
-
-       ldx     [%sp+LOCALS64+$U1],$bi
-       ldx     [%sp+LOCALS64+$Hsqr],$a0
-       ldx     [%sp+LOCALS64+$Hsqr+8],$a1
-       ldx     [%sp+LOCALS64+$Hsqr+16],$a2
-       ldx     [%sp+LOCALS64+$Hsqr+24],$a3
-       add     %sp,LOCALS64+$U1,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(U2, U1, Hsqr);
-       add     %sp,LOCALS64+$U2,$rp
-
-       call    __ecp_nistz256_mul_by_2_vis3    ! p256_mul_by_2(Hsqr, U2);
-       add     %sp,LOCALS64+$Hsqr,$rp
-
-       add     %sp,LOCALS64+$Rsqr,$bp
-       call    __ecp_nistz256_sub_morf_vis3    ! p256_sub(res_x, Rsqr, Hsqr);
-       add     %sp,LOCALS64+$res_x,$rp
-
-       add     %sp,LOCALS64+$Hcub,$bp
-       call    __ecp_nistz256_sub_from_vis3    !  p256_sub(res_x, res_x, Hcub);
-       add     %sp,LOCALS64+$res_x,$rp
-
-       ldx     [%sp+LOCALS64+$S1],$bi          ! forward load
-       ldx     [%sp+LOCALS64+$Hcub],$a0
-       ldx     [%sp+LOCALS64+$Hcub+8],$a1
-       ldx     [%sp+LOCALS64+$Hcub+16],$a2
-       ldx     [%sp+LOCALS64+$Hcub+24],$a3
-
-       add     %sp,LOCALS64+$U2,$bp
-       call    __ecp_nistz256_sub_morf_vis3    ! p256_sub(res_y, U2, res_x);
-       add     %sp,LOCALS64+$res_y,$rp
-
-       add     %sp,LOCALS64+$S1,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S2, S1, Hcub);
-       add     %sp,LOCALS64+$S2,$rp
-
-       ldx     [%sp+LOCALS64+$R],$bi
-       ldx     [%sp+LOCALS64+$res_y],$a0
-       ldx     [%sp+LOCALS64+$res_y+8],$a1
-       ldx     [%sp+LOCALS64+$res_y+16],$a2
-       ldx     [%sp+LOCALS64+$res_y+24],$a3
-       add     %sp,LOCALS64+$R,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(res_y, res_y, R);
-       add     %sp,LOCALS64+$res_y,$rp
-
-       add     %sp,LOCALS64+$S2,$bp
-       call    __ecp_nistz256_sub_from_vis3    ! p256_sub(res_y, res_y, S2);
-       add     %sp,LOCALS64+$res_y,$rp
-
-       ldx     [%fp+STACK_BIAS-16],$t1         ! !in1infty
-       ldx     [%fp+STACK_BIAS-8],$t2          ! !in2infty
-___
-for($i=0;$i<96;$i+=16) {                       # conditional moves
-$code.=<<___;
-       ldx     [%sp+LOCALS64+$res_x+$i],$acc0  ! res
-       ldx     [%sp+LOCALS64+$res_x+$i+8],$acc1
-       ldx     [%sp+LOCALS64+$in2_x+$i],$acc2  ! in2
-       ldx     [%sp+LOCALS64+$in2_x+$i+8],$acc3
-       ldx     [%sp+LOCALS64+$in1_x+$i],$acc4  ! in1
-       ldx     [%sp+LOCALS64+$in1_x+$i+8],$acc5
-       movrz   $t1,$acc2,$acc0
-       movrz   $t1,$acc3,$acc1
-       movrz   $t2,$acc4,$acc0
-       movrz   $t2,$acc5,$acc1
-       srlx    $acc0,32,$acc2
-       srlx    $acc1,32,$acc3
-       st      $acc0,[$rp_real+$i]
-       st      $acc2,[$rp_real+$i+4]
-       st      $acc1,[$rp_real+$i+8]
-       st      $acc3,[$rp_real+$i+12]
-___
-}
-$code.=<<___;
-.Ladd_done_vis3:
-       ret
-       restore
-.type  ecp_nistz256_point_add_vis3,#function
-.size  ecp_nistz256_point_add_vis3,.-ecp_nistz256_point_add_vis3
-___
-}
-########################################################################
-# void ecp_nistz256_point_add_affine(P256_POINT *out,const P256_POINT *in1,
-#                                   const P256_POINT_AFFINE *in2);
-{
-my ($res_x,$res_y,$res_z,
-    $in1_x,$in1_y,$in1_z,
-    $in2_x,$in2_y,
-    $U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr)=map(32*$_,(0..14));
-my $Z1sqr = $S2;
-# above map() describes stack layout with 15 temporary
-# 256-bit vectors on top. Then we reserve some space for
-# !in1infty and !in2infty.
-
-$code.=<<___;
-.align 32
-ecp_nistz256_point_add_affine_vis3:
-       save    %sp,-STACK64_FRAME-32*15-32,%sp
-
-       mov     $rp,$rp_real
-       mov     -1,$minus1
-       mov     -2,$poly3
-       sllx    $minus1,32,$poly1               ! 0xFFFFFFFF00000000
-       srl     $poly3,0,$poly3                 ! 0x00000000FFFFFFFE
-
-       ! convert input to uint64_t[4]
-       ld      [$bp],$a0                       ! in2_x
-       ld      [$bp+4],$t0
-       ld      [$bp+8],$a1
-       ld      [$bp+12],$t1
-       ld      [$bp+16],$a2
-       ld      [$bp+20],$t2
-       ld      [$bp+24],$a3
-       ld      [$bp+28],$t3
-       sllx    $t0,32,$t0
-       sllx    $t1,32,$t1
-       ld      [$bp+32],$acc0                  ! in2_y
-       or      $a0,$t0,$a0
-       ld      [$bp+32+4],$t0
-       sllx    $t2,32,$t2
-       ld      [$bp+32+8],$acc1
-       or      $a1,$t1,$a1
-       ld      [$bp+32+12],$t1
-       sllx    $t3,32,$t3
-       ld      [$bp+32+16],$acc2
-       or      $a2,$t2,$a2
-       ld      [$bp+32+20],$t2
-       or      $a3,$t3,$a3
-       ld      [$bp+32+24],$acc3
-       sllx    $t0,32,$t0
-       ld      [$bp+32+28],$t3
-       sllx    $t1,32,$t1
-       stx     $a0,[%sp+LOCALS64+$in2_x]
-       sllx    $t2,32,$t2
-       stx     $a1,[%sp+LOCALS64+$in2_x+8]
-       sllx    $t3,32,$t3
-       stx     $a2,[%sp+LOCALS64+$in2_x+16]
-       or      $acc0,$t0,$acc0
-       stx     $a3,[%sp+LOCALS64+$in2_x+24]
-       or      $acc1,$t1,$acc1
-       stx     $acc0,[%sp+LOCALS64+$in2_y]
-       or      $acc2,$t2,$acc2
-       stx     $acc1,[%sp+LOCALS64+$in2_y+8]
-       or      $acc3,$t3,$acc3
-       stx     $acc2,[%sp+LOCALS64+$in2_y+16]
-       stx     $acc3,[%sp+LOCALS64+$in2_y+24]
-
-       or      $a1,$a0,$a0
-       or      $a3,$a2,$a2
-       or      $acc1,$acc0,$acc0
-       or      $acc3,$acc2,$acc2
-       or      $a2,$a0,$a0
-       or      $acc2,$acc0,$acc0
-       or      $acc0,$a0,$a0
-       movrnz  $a0,-1,$a0                      ! !in2infty
-       stx     $a0,[%fp+STACK_BIAS-8]
-
-       ld      [$ap],$a0                       ! in1_x
-       ld      [$ap+4],$t0
-       ld      [$ap+8],$a1
-       ld      [$ap+12],$t1
-       ld      [$ap+16],$a2
-       ld      [$ap+20],$t2
-       ld      [$ap+24],$a3
-       ld      [$ap+28],$t3
-       sllx    $t0,32,$t0
-       sllx    $t1,32,$t1
-       ld      [$ap+32],$acc0                  ! in1_y
-       or      $a0,$t0,$a0
-       ld      [$ap+32+4],$t0
-       sllx    $t2,32,$t2
-       ld      [$ap+32+8],$acc1
-       or      $a1,$t1,$a1
-       ld      [$ap+32+12],$t1
-       sllx    $t3,32,$t3
-       ld      [$ap+32+16],$acc2
-       or      $a2,$t2,$a2
-       ld      [$ap+32+20],$t2
-       or      $a3,$t3,$a3
-       ld      [$ap+32+24],$acc3
-       sllx    $t0,32,$t0
-       ld      [$ap+32+28],$t3
-       sllx    $t1,32,$t1
-       stx     $a0,[%sp+LOCALS64+$in1_x]
-       sllx    $t2,32,$t2
-       stx     $a1,[%sp+LOCALS64+$in1_x+8]
-       sllx    $t3,32,$t3
-       stx     $a2,[%sp+LOCALS64+$in1_x+16]
-       or      $acc0,$t0,$acc0
-       stx     $a3,[%sp+LOCALS64+$in1_x+24]
-       or      $acc1,$t1,$acc1
-       stx     $acc0,[%sp+LOCALS64+$in1_y]
-       or      $acc2,$t2,$acc2
-       stx     $acc1,[%sp+LOCALS64+$in1_y+8]
-       or      $acc3,$t3,$acc3
-       stx     $acc2,[%sp+LOCALS64+$in1_y+16]
-       stx     $acc3,[%sp+LOCALS64+$in1_y+24]
-
-       ld      [$ap+64],$a0                    ! in1_z
-       ld      [$ap+64+4],$t0
-       ld      [$ap+64+8],$a1
-       ld      [$ap+64+12],$t1
-       ld      [$ap+64+16],$a2
-       ld      [$ap+64+20],$t2
-       ld      [$ap+64+24],$a3
-       ld      [$ap+64+28],$t3
-       sllx    $t0,32,$t0
-       sllx    $t1,32,$t1
-       or      $a0,$t0,$a0
-       sllx    $t2,32,$t2
-       or      $a1,$t1,$a1
-       sllx    $t3,32,$t3
-       stx     $a0,[%sp+LOCALS64+$in1_z]
-       or      $a2,$t2,$a2
-       stx     $a1,[%sp+LOCALS64+$in1_z+8]
-       or      $a3,$t3,$a3
-       stx     $a2,[%sp+LOCALS64+$in1_z+16]
-       stx     $a3,[%sp+LOCALS64+$in1_z+24]
-
-       or      $a1,$a0,$t0
-       or      $a3,$a2,$t2
-       or      $t2,$t0,$t0
-       movrnz  $t0,-1,$t0                      ! !in1infty
-       stx     $t0,[%fp+STACK_BIAS-16]
-
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(Z1sqr, in1_z);
-       add     %sp,LOCALS64+$Z1sqr,$rp
-
-       ldx     [%sp+LOCALS64+$in2_x],$bi
-       mov     $acc0,$a0
-       mov     $acc1,$a1
-       mov     $acc2,$a2
-       mov     $acc3,$a3
-       add     %sp,LOCALS64+$in2_x,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(U2, Z1sqr, in2_x);
-       add     %sp,LOCALS64+$U2,$rp
-
-       ldx     [%sp+LOCALS64+$Z1sqr],$bi       ! forward load
-       ldx     [%sp+LOCALS64+$in1_z],$a0
-       ldx     [%sp+LOCALS64+$in1_z+8],$a1
-       ldx     [%sp+LOCALS64+$in1_z+16],$a2
-       ldx     [%sp+LOCALS64+$in1_z+24],$a3
-
-       add     %sp,LOCALS64+$in1_x,$bp
-       call    __ecp_nistz256_sub_from_vis3    ! p256_sub(H, U2, in1_x);
-       add     %sp,LOCALS64+$H,$rp
-
-       add     %sp,LOCALS64+$Z1sqr,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S2, Z1sqr, in1_z);
-       add     %sp,LOCALS64+$S2,$rp
-
-       ldx     [%sp+LOCALS64+$H],$bi
-       ldx     [%sp+LOCALS64+$in1_z],$a0
-       ldx     [%sp+LOCALS64+$in1_z+8],$a1
-       ldx     [%sp+LOCALS64+$in1_z+16],$a2
-       ldx     [%sp+LOCALS64+$in1_z+24],$a3
-       add     %sp,LOCALS64+$H,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(res_z, H, in1_z);
-       add     %sp,LOCALS64+$res_z,$rp
-
-       ldx     [%sp+LOCALS64+$S2],$bi
-       ldx     [%sp+LOCALS64+$in2_y],$a0
-       ldx     [%sp+LOCALS64+$in2_y+8],$a1
-       ldx     [%sp+LOCALS64+$in2_y+16],$a2
-       ldx     [%sp+LOCALS64+$in2_y+24],$a3
-       add     %sp,LOCALS64+$S2,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S2, S2, in2_y);
-       add     %sp,LOCALS64+$S2,$rp
-
-       ldx     [%sp+LOCALS64+$H],$a0           ! forward load
-       ldx     [%sp+LOCALS64+$H+8],$a1
-       ldx     [%sp+LOCALS64+$H+16],$a2
-       ldx     [%sp+LOCALS64+$H+24],$a3
-
-       add     %sp,LOCALS64+$in1_y,$bp
-       call    __ecp_nistz256_sub_from_vis3    ! p256_sub(R, S2, in1_y);
-       add     %sp,LOCALS64+$R,$rp
-
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(Hsqr, H);
-       add     %sp,LOCALS64+$Hsqr,$rp
-
-       ldx     [%sp+LOCALS64+$R],$a0
-       ldx     [%sp+LOCALS64+$R+8],$a1
-       ldx     [%sp+LOCALS64+$R+16],$a2
-       ldx     [%sp+LOCALS64+$R+24],$a3
-       call    __ecp_nistz256_sqr_mont_vis3    ! p256_sqr_mont(Rsqr, R);
-       add     %sp,LOCALS64+$Rsqr,$rp
-
-       ldx     [%sp+LOCALS64+$H],$bi
-       ldx     [%sp+LOCALS64+$Hsqr],$a0
-       ldx     [%sp+LOCALS64+$Hsqr+8],$a1
-       ldx     [%sp+LOCALS64+$Hsqr+16],$a2
-       ldx     [%sp+LOCALS64+$Hsqr+24],$a3
-       add     %sp,LOCALS64+$H,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(Hcub, Hsqr, H);
-       add     %sp,LOCALS64+$Hcub,$rp
-
-       ldx     [%sp+LOCALS64+$Hsqr],$bi
-       ldx     [%sp+LOCALS64+$in1_x],$a0
-       ldx     [%sp+LOCALS64+$in1_x+8],$a1
-       ldx     [%sp+LOCALS64+$in1_x+16],$a2
-       ldx     [%sp+LOCALS64+$in1_x+24],$a3
-       add     %sp,LOCALS64+$Hsqr,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(U2, in1_x, Hsqr);
-       add     %sp,LOCALS64+$U2,$rp
-
-       call    __ecp_nistz256_mul_by_2_vis3    ! p256_mul_by_2(Hsqr, U2);
-       add     %sp,LOCALS64+$Hsqr,$rp
-
-       add     %sp,LOCALS64+$Rsqr,$bp
-       call    __ecp_nistz256_sub_morf_vis3    ! p256_sub(res_x, Rsqr, Hsqr);
-       add     %sp,LOCALS64+$res_x,$rp
-
-       add     %sp,LOCALS64+$Hcub,$bp
-       call    __ecp_nistz256_sub_from_vis3    !  p256_sub(res_x, res_x, Hcub);
-       add     %sp,LOCALS64+$res_x,$rp
-
-       ldx     [%sp+LOCALS64+$Hcub],$bi        ! forward load
-       ldx     [%sp+LOCALS64+$in1_y],$a0
-       ldx     [%sp+LOCALS64+$in1_y+8],$a1
-       ldx     [%sp+LOCALS64+$in1_y+16],$a2
-       ldx     [%sp+LOCALS64+$in1_y+24],$a3
-
-       add     %sp,LOCALS64+$U2,$bp
-       call    __ecp_nistz256_sub_morf_vis3    ! p256_sub(res_y, U2, res_x);
-       add     %sp,LOCALS64+$res_y,$rp
-
-       add     %sp,LOCALS64+$Hcub,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(S2, in1_y, Hcub);
-       add     %sp,LOCALS64+$S2,$rp
-
-       ldx     [%sp+LOCALS64+$R],$bi
-       ldx     [%sp+LOCALS64+$res_y],$a0
-       ldx     [%sp+LOCALS64+$res_y+8],$a1
-       ldx     [%sp+LOCALS64+$res_y+16],$a2
-       ldx     [%sp+LOCALS64+$res_y+24],$a3
-       add     %sp,LOCALS64+$R,$bp
-       call    __ecp_nistz256_mul_mont_vis3    ! p256_mul_mont(res_y, res_y, R);
-       add     %sp,LOCALS64+$res_y,$rp
-
-       add     %sp,LOCALS64+$S2,$bp
-       call    __ecp_nistz256_sub_from_vis3    ! p256_sub(res_y, res_y, S2);
-       add     %sp,LOCALS64+$res_y,$rp
-
-       ldx     [%fp+STACK_BIAS-16],$t1         ! !in1infty
-       ldx     [%fp+STACK_BIAS-8],$t2          ! !in2infty
-1:     call    .+8
-       add     %o7,.Lone_mont_vis3-1b,$bp
-___
-for($i=0;$i<64;$i+=16) {                       # conditional moves
-$code.=<<___;
-       ldx     [%sp+LOCALS64+$res_x+$i],$acc0  ! res
-       ldx     [%sp+LOCALS64+$res_x+$i+8],$acc1
-       ldx     [%sp+LOCALS64+$in2_x+$i],$acc2  ! in2
-       ldx     [%sp+LOCALS64+$in2_x+$i+8],$acc3
-       ldx     [%sp+LOCALS64+$in1_x+$i],$acc4  ! in1
-       ldx     [%sp+LOCALS64+$in1_x+$i+8],$acc5
-       movrz   $t1,$acc2,$acc0
-       movrz   $t1,$acc3,$acc1
-       movrz   $t2,$acc4,$acc0
-       movrz   $t2,$acc5,$acc1
-       srlx    $acc0,32,$acc2
-       srlx    $acc1,32,$acc3
-       st      $acc0,[$rp_real+$i]
-       st      $acc2,[$rp_real+$i+4]
-       st      $acc1,[$rp_real+$i+8]
-       st      $acc3,[$rp_real+$i+12]
-___
-}
-for(;$i<96;$i+=16) {
-$code.=<<___;
-       ldx     [%sp+LOCALS64+$res_x+$i],$acc0  ! res
-       ldx     [%sp+LOCALS64+$res_x+$i+8],$acc1
-       ldx     [$bp+$i-64],$acc2               ! "in2"
-       ldx     [$bp+$i-64+8],$acc3
-       ldx     [%sp+LOCALS64+$in1_x+$i],$acc4  ! in1
-       ldx     [%sp+LOCALS64+$in1_x+$i+8],$acc5
-       movrz   $t1,$acc2,$acc0
-       movrz   $t1,$acc3,$acc1
-       movrz   $t2,$acc4,$acc0
-       movrz   $t2,$acc5,$acc1
-       srlx    $acc0,32,$acc2
-       srlx    $acc1,32,$acc3
-       st      $acc0,[$rp_real+$i]
-       st      $acc2,[$rp_real+$i+4]
-       st      $acc1,[$rp_real+$i+8]
-       st      $acc3,[$rp_real+$i+12]
-___
-}
-$code.=<<___;
-       ret
-       restore
-.type  ecp_nistz256_point_add_affine_vis3,#function
-.size  ecp_nistz256_point_add_affine_vis3,.-ecp_nistz256_point_add_affine_vis3
-.align 64
-.Lone_mont_vis3:
-.long  0x00000000,0x00000001, 0xffffffff,0x00000000
-.long  0xffffffff,0xffffffff, 0x00000000,0xfffffffe
-.align 64
-#endif
-___
-}                                                              }}}
-\f
-# Purpose of these subroutines is to explicitly encode VIS instructions,
-# so that one can compile the module without having to specify VIS
-# extensions on compiler command line, e.g. -xarch=v9 vs. -xarch=v9a.
-# Idea is to reserve for option to produce "universal" binary and let
-# programmer detect if current CPU is VIS capable at run-time.
-sub unvis3 {
-my ($mnemonic,$rs1,$rs2,$rd)=@_;
-my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 );
-my ($ref,$opf);
-my %visopf = ( "addxc"         => 0x011,
-               "addxccc"       => 0x013,
-               "umulxhi"       => 0x016        );
-
-    $ref = "$mnemonic\t$rs1,$rs2,$rd";
-
-    if ($opf=$visopf{$mnemonic}) {
-       foreach ($rs1,$rs2,$rd) {
-           return $ref if (!/%([goli])([0-9])/);
-           $_=$bias{$1}+$2;
-       }
-
-       return  sprintf ".word\t0x%08x !%s",
-                       0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2,
-                       $ref;
-    } else {
-       return $ref;
-    }
-}
-
-foreach (split("\n",$code)) {
-       s/\`([^\`]*)\`/eval $1/ge;
-
-       s/\b(umulxhi|addxc[c]{0,2})\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/
-               &unvis3($1,$2,$3,$4)
-        /ge;
-
-       print $_,"\n";
-}
-
-close STDOUT;
diff --git a/lib/libcrypto/ec/asm/ecp_nistz256-x86.pl b/lib/libcrypto/ec/asm/ecp_nistz256-x86.pl
deleted file mode 100644 (file)
index 085d637..0000000
+++ /dev/null
@@ -1,1740 +0,0 @@
-#! /usr/bin/env perl
-# $OpenBSD: ecp_nistz256-x86.pl,v 1.1 2016/11/04 17:33:20 miod Exp $
-#
-# Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License").  You may not use
-# this file except in compliance with the License.  You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-
-
-# ====================================================================
-# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
-# project. The module is, however, dual licensed under OpenSSL and
-# CRYPTOGAMS licenses depending on where you obtain it. For further
-# details see http://www.openssl.org/~appro/cryptogams/.
-# ====================================================================
-#
-# ECP_NISTZ256 module for x86/SSE2.
-#
-# October 2014.
-#
-# Original ECP_NISTZ256 submission targeting x86_64 is detailed in
-# http://eprint.iacr.org/2013/816. In the process of adaptation
-# original .c module was made 32-bit savvy in order to make this
-# implementation possible.
-#
-#              with/without -DECP_NISTZ256_ASM
-# Pentium      +66-163%
-# PIII         +72-172%
-# P4           +65-132%
-# Core2                +90-215%
-# Sandy Bridge +105-265% (contemporary i[57]-* are all close to this)
-# Atom         +65-155%
-# Opteron      +54-110%
-# Bulldozer    +99-240%
-# VIA Nano     +93-290%
-#
-# Ranges denote minimum and maximum improvement coefficients depending
-# on benchmark. Lower coefficients are for ECDSA sign, server-side
-# operation. Keep in mind that +200% means 3x improvement.
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-push(@INC,"${dir}","${dir}../../perlasm");
-require "x86asm.pl";
-
-# Uncomment when all i386 assembly generators are updated to take the output
-# file as last argument...
-# $output=pop;
-# open STDOUT,">$output";
-
-&asm_init($ARGV[0],"ecp_nistz256-x86.pl",$ARGV[$#ARGV] eq "386");
-
-$sse2=0;
-for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
-
-&external_label("OPENSSL_ia32cap_P") if ($sse2);
-
-
-########################################################################
-# Keep in mind that constants are stored least to most significant word
-&static_label("ONE");
-&set_label("ONE",64);
-&data_word(1,0,0,0,0,0,0,0);
-&align(64);
-
-########################################################################
-# void ecp_nistz256_mul_by_2(BN_ULONG edi[8],const BN_ULONG esi[8]);
-&function_begin("ecp_nistz256_mul_by_2");
-       &mov    ("esi",&wparam(1));
-       &mov    ("edi",&wparam(0));
-       &mov    ("ebp","esi");
-########################################################################
-# common pattern for internal functions is that %edi is result pointer,
-# %esi and %ebp are input ones, %ebp being optional. %edi is preserved.
-       &call   ("_ecp_nistz256_add");
-&function_end("ecp_nistz256_mul_by_2");
-
-########################################################################
-# void ecp_nistz256_div_by_2(BN_ULONG edi[8],const BN_ULONG esi[8]);
-&function_begin("ecp_nistz256_div_by_2");
-       &mov    ("esi",&wparam(1));
-       &mov    ("edi",&wparam(0));
-       &call   ("_ecp_nistz256_div_by_2");
-&function_end("ecp_nistz256_div_by_2");
-
-&function_begin_B("_ecp_nistz256_div_by_2");
-       # tmp = a is odd ? a+mod : a
-       #
-       # note that because mod has special form, i.e. consists of
-       # 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       # assigning least significant bit of input to one register,
-       # %ebp, and its negative to another, %edx.
-
-       &mov    ("ebp",&DWP(0,"esi"));
-       &xor    ("edx","edx");
-       &mov    ("ebx",&DWP(4,"esi"));
-       &mov    ("eax","ebp");
-       &and    ("ebp",1);
-       &mov    ("ecx",&DWP(8,"esi"));
-       &sub    ("edx","ebp");
-
-       &add    ("eax","edx");
-       &adc    ("ebx","edx");
-       &mov    (&DWP(0,"edi"),"eax");
-       &adc    ("ecx","edx");
-       &mov    (&DWP(4,"edi"),"ebx");
-       &mov    (&DWP(8,"edi"),"ecx");
-
-       &mov    ("eax",&DWP(12,"esi"));
-       &mov    ("ebx",&DWP(16,"esi"));
-       &adc    ("eax",0);
-       &mov    ("ecx",&DWP(20,"esi"));
-       &adc    ("ebx",0);
-       &mov    (&DWP(12,"edi"),"eax");
-       &adc    ("ecx",0);
-       &mov    (&DWP(16,"edi"),"ebx");
-       &mov    (&DWP(20,"edi"),"ecx");
-
-       &mov    ("eax",&DWP(24,"esi"));
-       &mov    ("ebx",&DWP(28,"esi"));
-       &adc    ("eax","ebp");
-       &adc    ("ebx","edx");
-       &mov    (&DWP(24,"edi"),"eax");
-       &sbb    ("esi","esi");                  # broadcast carry bit
-       &mov    (&DWP(28,"edi"),"ebx");
-
-       # ret = tmp >> 1
-
-       &mov    ("eax",&DWP(0,"edi"));
-       &mov    ("ebx",&DWP(4,"edi"));
-       &mov    ("ecx",&DWP(8,"edi"));
-       &mov    ("edx",&DWP(12,"edi"));
-
-       &shr    ("eax",1);
-       &mov    ("ebp","ebx");
-       &shl    ("ebx",31);
-       &or     ("eax","ebx");
-
-       &shr    ("ebp",1);
-       &mov    ("ebx","ecx");
-       &shl    ("ecx",31);
-       &mov    (&DWP(0,"edi"),"eax");
-       &or     ("ebp","ecx");
-       &mov    ("eax",&DWP(16,"edi"));
-
-       &shr    ("ebx",1);
-       &mov    ("ecx","edx");
-       &shl    ("edx",31);
-       &mov    (&DWP(4,"edi"),"ebp");
-       &or     ("ebx","edx");
-       &mov    ("ebp",&DWP(20,"edi"));
-
-       &shr    ("ecx",1);
-       &mov    ("edx","eax");
-       &shl    ("eax",31);
-       &mov    (&DWP(8,"edi"),"ebx");
-       &or     ("ecx","eax");
-       &mov    ("ebx",&DWP(24,"edi"));
-
-       &shr    ("edx",1);
-       &mov    ("eax","ebp");
-       &shl    ("ebp",31);
-       &mov    (&DWP(12,"edi"),"ecx");
-       &or     ("edx","ebp");
-       &mov    ("ecx",&DWP(28,"edi"));
-
-       &shr    ("eax",1);
-       &mov    ("ebp","ebx");
-       &shl    ("ebx",31);
-       &mov    (&DWP(16,"edi"),"edx");
-       &or     ("eax","ebx");
-
-       &shr    ("ebp",1);
-       &mov    ("ebx","ecx");
-       &shl    ("ecx",31);
-       &mov    (&DWP(20,"edi"),"eax");
-       &or     ("ebp","ecx");
-
-       &shr    ("ebx",1);
-       &shl    ("esi",31);
-       &mov    (&DWP(24,"edi"),"ebp");
-       &or     ("ebx","esi");                  # handle top-most carry bit
-       &mov    (&DWP(28,"edi"),"ebx");
-
-       &ret    ();
-&function_end_B("_ecp_nistz256_div_by_2");
-
-########################################################################
-# void ecp_nistz256_add(BN_ULONG edi[8],const BN_ULONG esi[8],
-#                                      const BN_ULONG ebp[8]);
-&function_begin("ecp_nistz256_add");
-       &mov    ("esi",&wparam(1));
-       &mov    ("ebp",&wparam(2));
-       &mov    ("edi",&wparam(0));
-       &call   ("_ecp_nistz256_add");
-&function_end("ecp_nistz256_add");
-
-&function_begin_B("_ecp_nistz256_add");
-       &mov    ("eax",&DWP(0,"esi"));
-       &mov    ("ebx",&DWP(4,"esi"));
-       &mov    ("ecx",&DWP(8,"esi"));
-       &add    ("eax",&DWP(0,"ebp"));
-       &mov    ("edx",&DWP(12,"esi"));
-       &adc    ("ebx",&DWP(4,"ebp"));
-       &mov    (&DWP(0,"edi"),"eax");
-       &adc    ("ecx",&DWP(8,"ebp"));
-       &mov    (&DWP(4,"edi"),"ebx");
-       &adc    ("edx",&DWP(12,"ebp"));
-       &mov    (&DWP(8,"edi"),"ecx");
-       &mov    (&DWP(12,"edi"),"edx");
-
-       &mov    ("eax",&DWP(16,"esi"));
-       &mov    ("ebx",&DWP(20,"esi"));
-       &mov    ("ecx",&DWP(24,"esi"));
-       &adc    ("eax",&DWP(16,"ebp"));
-       &mov    ("edx",&DWP(28,"esi"));
-       &adc    ("ebx",&DWP(20,"ebp"));
-       &mov    (&DWP(16,"edi"),"eax");
-       &adc    ("ecx",&DWP(24,"ebp"));
-       &mov    (&DWP(20,"edi"),"ebx");
-       &mov    ("esi",0);
-       &adc    ("edx",&DWP(28,"ebp"));
-       &mov    (&DWP(24,"edi"),"ecx");
-       &adc    ("esi",0);
-       &mov    (&DWP(28,"edi"),"edx");
-
-       # if a+b >= modulus, subtract modulus.
-       #
-       # But since comparison implies subtraction, we subtract modulus
-       # to see if it borrows, and then subtract it for real if
-       # subtraction didn't borrow.
-
-       &mov    ("eax",&DWP(0,"edi"));
-       &mov    ("ebx",&DWP(4,"edi"));
-       &mov    ("ecx",&DWP(8,"edi"));
-       &sub    ("eax",-1);
-       &mov    ("edx",&DWP(12,"edi"));
-       &sbb    ("ebx",-1);
-       &mov    ("eax",&DWP(16,"edi"));
-       &sbb    ("ecx",-1);
-       &mov    ("ebx",&DWP(20,"edi"));
-       &sbb    ("edx",0);
-       &mov    ("ecx",&DWP(24,"edi"));
-       &sbb    ("eax",0);
-       &mov    ("edx",&DWP(28,"edi"));
-       &sbb    ("ebx",0);
-       &sbb    ("ecx",1);
-       &sbb    ("edx",-1);
-       &sbb    ("esi",0);
-
-       # Note that because mod has special form, i.e. consists of
-       # 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       # by using borrow.
-
-       &not    ("esi");
-       &mov    ("eax",&DWP(0,"edi"));
-       &mov    ("ebp","esi");
-       &mov    ("ebx",&DWP(4,"edi"));
-       &shr    ("ebp",31);
-       &mov    ("ecx",&DWP(8,"edi"));
-       &sub    ("eax","esi");
-       &mov    ("edx",&DWP(12,"edi"));
-       &sbb    ("ebx","esi");
-       &mov    (&DWP(0,"edi"),"eax");
-       &sbb    ("ecx","esi");
-       &mov    (&DWP(4,"edi"),"ebx");
-       &sbb    ("edx",0);
-       &mov    (&DWP(8,"edi"),"ecx");
-       &mov    (&DWP(12,"edi"),"edx");
-
-       &mov    ("eax",&DWP(16,"edi"));
-       &mov    ("ebx",&DWP(20,"edi"));
-       &mov    ("ecx",&DWP(24,"edi"));
-       &sbb    ("eax",0);
-       &mov    ("edx",&DWP(28,"edi"));
-       &sbb    ("ebx",0);
-       &mov    (&DWP(16,"edi"),"eax");
-       &sbb    ("ecx","ebp");
-       &mov    (&DWP(20,"edi"),"ebx");
-       &sbb    ("edx","esi");
-       &mov    (&DWP(24,"edi"),"ecx");
-       &mov    (&DWP(28,"edi"),"edx");
-
-       &ret    ();
-&function_end_B("_ecp_nistz256_add");
-
-########################################################################
-# void ecp_nistz256_sub(BN_ULONG edi[8],const BN_ULONG esi[8],
-#                                      const BN_ULONG ebp[8]);
-&function_begin("ecp_nistz256_sub");
-       &mov    ("esi",&wparam(1));
-       &mov    ("ebp",&wparam(2));
-       &mov    ("edi",&wparam(0));
-       &call   ("_ecp_nistz256_sub");
-&function_end("ecp_nistz256_sub");
-
-&function_begin_B("_ecp_nistz256_sub");
-       &mov    ("eax",&DWP(0,"esi"));
-       &mov    ("ebx",&DWP(4,"esi"));
-       &mov    ("ecx",&DWP(8,"esi"));
-       &sub    ("eax",&DWP(0,"ebp"));
-       &mov    ("edx",&DWP(12,"esi"));
-       &sbb    ("ebx",&DWP(4,"ebp"));
-       &mov    (&DWP(0,"edi"),"eax");
-       &sbb    ("ecx",&DWP(8,"ebp"));
-       &mov    (&DWP(4,"edi"),"ebx");
-       &sbb    ("edx",&DWP(12,"ebp"));
-       &mov    (&DWP(8,"edi"),"ecx");
-       &mov    (&DWP(12,"edi"),"edx");
-
-       &mov    ("eax",&DWP(16,"esi"));
-       &mov    ("ebx",&DWP(20,"esi"));
-       &mov    ("ecx",&DWP(24,"esi"));
-       &sbb    ("eax",&DWP(16,"ebp"));
-       &mov    ("edx",&DWP(28,"esi"));
-       &sbb    ("ebx",&DWP(20,"ebp"));
-       &sbb    ("ecx",&DWP(24,"ebp"));
-       &mov    (&DWP(16,"edi"),"eax");
-       &sbb    ("edx",&DWP(28,"ebp"));
-       &mov    (&DWP(20,"edi"),"ebx");
-       &sbb    ("esi","esi");                  # broadcast borrow bit
-       &mov    (&DWP(24,"edi"),"ecx");
-       &mov    (&DWP(28,"edi"),"edx");
-
-       # if a-b borrows, add modulus.
-       #
-       # Note that because mod has special form, i.e. consists of
-       # 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       # assigning borrow bit to one register, %ebp, and its negative
-       # to another, %esi. But we started by calculating %esi...
-
-       &mov    ("eax",&DWP(0,"edi"));
-       &mov    ("ebp","esi");
-       &mov    ("ebx",&DWP(4,"edi"));
-       &shr    ("ebp",31);
-       &mov    ("ecx",&DWP(8,"edi"));
-       &add    ("eax","esi");
-       &mov    ("edx",&DWP(12,"edi"));
-       &adc    ("ebx","esi");
-       &mov    (&DWP(0,"edi"),"eax");
-       &adc    ("ecx","esi");
-       &mov    (&DWP(4,"edi"),"ebx");
-       &adc    ("edx",0);
-       &mov    (&DWP(8,"edi"),"ecx");
-       &mov    (&DWP(12,"edi"),"edx");
-
-       &mov    ("eax",&DWP(16,"edi"));
-       &mov    ("ebx",&DWP(20,"edi"));
-       &mov    ("ecx",&DWP(24,"edi"));
-       &adc    ("eax",0);
-       &mov    ("edx",&DWP(28,"edi"));
-       &adc    ("ebx",0);
-       &mov    (&DWP(16,"edi"),"eax");
-       &adc    ("ecx","ebp");
-       &mov    (&DWP(20,"edi"),"ebx");
-       &adc    ("edx","esi");
-       &mov    (&DWP(24,"edi"),"ecx");
-       &mov    (&DWP(28,"edi"),"edx");
-
-       &ret    ();
-&function_end_B("_ecp_nistz256_sub");
-
-########################################################################
-# void ecp_nistz256_neg(BN_ULONG edi[8],const BN_ULONG esi[8]);
-&function_begin("ecp_nistz256_neg");
-       &mov    ("ebp",&wparam(1));
-       &mov    ("edi",&wparam(0));
-
-       &xor    ("eax","eax");
-       &stack_push(8);
-       &mov    (&DWP(0,"esp"),"eax");
-       &mov    ("esi","esp");
-       &mov    (&DWP(4,"esp"),"eax");
-       &mov    (&DWP(8,"esp"),"eax");
-       &mov    (&DWP(12,"esp"),"eax");
-       &mov    (&DWP(16,"esp"),"eax");
-       &mov    (&DWP(20,"esp"),"eax");
-       &mov    (&DWP(24,"esp"),"eax");
-       &mov    (&DWP(28,"esp"),"eax");
-       
-       &call   ("_ecp_nistz256_sub");
-
-       &stack_pop(8);
-&function_end("ecp_nistz256_neg");
-
-&function_begin_B("_picup_eax");
-       &mov    ("eax",&DWP(0,"esp"));
-       &ret    ();
-&function_end_B("_picup_eax");
-
-########################################################################
-# void ecp_nistz256_from_mont(BN_ULONG edi[8],const BN_ULONG esi[8]);
-&function_begin("ecp_nistz256_from_mont");
-       &mov    ("esi",&wparam(1));
-       &call   ("_picup_eax");
-    &set_label("pic");
-       &lea    ("ebp",&DWP(&label("ONE")."-".&label("pic"),"eax"));
-                                               if ($sse2) {
-       &picmeup("eax","OPENSSL_ia32cap_P","eax",&label("pic"));
-       &mov    ("eax",&DWP(0,"eax"));          }
-       &mov    ("edi",&wparam(0));
-       &call   ("_ecp_nistz256_mul_mont");
-&function_end("ecp_nistz256_from_mont");
-
-########################################################################
-# void ecp_nistz256_mul_mont(BN_ULONG edi[8],const BN_ULONG esi[8],
-#                                           const BN_ULONG ebp[8]);
-&function_begin("ecp_nistz256_mul_mont");
-       &mov    ("esi",&wparam(1));
-       &mov    ("ebp",&wparam(2));
-                                               if ($sse2) {
-       &call   ("_picup_eax");
-    &set_label("pic");
-       &picmeup("eax","OPENSSL_ia32cap_P","eax",&label("pic"));
-       &mov    ("eax",&DWP(0,"eax"));          }
-       &mov    ("edi",&wparam(0));
-       &call   ("_ecp_nistz256_mul_mont");
-&function_end("ecp_nistz256_mul_mont");
-
-########################################################################
-# void ecp_nistz256_sqr_mont(BN_ULONG edi[8],const BN_ULONG esi[8]);
-&function_begin("ecp_nistz256_sqr_mont");
-       &mov    ("esi",&wparam(1));
-                                               if ($sse2) {
-       &call   ("_picup_eax");
-    &set_label("pic");
-       &picmeup("eax","OPENSSL_ia32cap_P","eax",&label("pic"));
-       &mov    ("eax",&DWP(0,"eax"));          }
-       &mov    ("edi",&wparam(0));
-       &mov    ("ebp","esi");
-       &call   ("_ecp_nistz256_mul_mont");
-&function_end("ecp_nistz256_sqr_mont");
-
-&function_begin_B("_ecp_nistz256_mul_mont");
-                                               if ($sse2) {
-       # see if XMM+SSE2 is on
-       &and    ("eax","\$(IA32CAP_MASK0_FXSR | IA32CAP_MASK0_SSE2)");
-       &cmp    ("eax","\$(IA32CAP_MASK0_FXSR | IA32CAP_MASK0_SSE2)");
-       &jne    (&label("mul_mont_ialu"));
-
-       ########################################
-       # SSE2 code path featuring 32x16-bit
-       # multiplications is ~2x faster than
-       # IALU counterpart (except on Atom)...
-       ########################################
-       # stack layout:
-       # +------------------------------------+< %esp
-       # | 7 16-byte temporary XMM words,     |
-       # | "sliding" toward lower address     |
-       # .                                    .
-       # +------------------------------------+
-       # | unused XMM word                    |
-       # +------------------------------------+< +128,%ebx
-       # | 8 16-byte XMM words holding copies |
-       # | of a[i]<<64|a[i]                   |
-       # .                                    .
-       # .                                    .
-       # +------------------------------------+< +256
-       &mov    ("edx","esp");
-       &sub    ("esp",0x100);
-
-       &movd   ("xmm7",&DWP(0,"ebp"));         # b[0] -> 0000.00xy
-       &lea    ("ebp",&DWP(4,"ebp"));
-       &pcmpeqd("xmm6","xmm6");
-       &psrlq  ("xmm6",48);                    # compose 0xffff<<64|0xffff
-
-       &pshuflw("xmm7","xmm7",0b11011100);     # 0000.00xy -> 0000.0x0y
-       &and    ("esp",-64);
-       &pshufd ("xmm7","xmm7",0b11011100);     # 0000.0x0y -> 000x.000y
-       &lea    ("ebx",&DWP(0x80,"esp"));
-
-       &movd   ("xmm0",&DWP(4*0,"esi"));       # a[0] -> 0000.00xy
-       &pshufd ("xmm0","xmm0",0b11001100);     # 0000.00xy -> 00xy.00xy
-       &movd   ("xmm1",&DWP(4*1,"esi"));       # a[1] -> ...
-       &movdqa (&QWP(0x00,"ebx"),"xmm0");      # offload converted a[0]
-       &pmuludq("xmm0","xmm7");                # a[0]*b[0]
-
-       &movd   ("xmm2",&DWP(4*2,"esi"));
-       &pshufd ("xmm1","xmm1",0b11001100);
-       &movdqa (&QWP(0x10,"ebx"),"xmm1");
-       &pmuludq("xmm1","xmm7");                # a[1]*b[0]
-
-        &movq  ("xmm4","xmm0");                # clear upper 64 bits
-        &pslldq("xmm4",6);
-        &paddq ("xmm4","xmm0");
-        &movdqa("xmm5","xmm4");
-        &psrldq("xmm4",10);                    # upper 32 bits of a[0]*b[0]
-        &pand  ("xmm5","xmm6");                # lower 32 bits of a[0]*b[0]
-
-       # Upper half of a[0]*b[i] is carried into next multiplication
-       # iteration, while lower one "participates" in actual reduction.
-       # Normally latter is done by accumulating result of multiplication
-       # of modulus by "magic" digit, but thanks to special form of modulus
-       # and "magic" digit it can be performed only with additions and
-       # subtractions (see note in IALU section below). Note that we are
-       # not bothered with carry bits, they are accumulated in "flatten"
-       # phase after all multiplications and reductions.
-
-       &movd   ("xmm3",&DWP(4*3,"esi"));
-       &pshufd ("xmm2","xmm2",0b11001100);
-       &movdqa (&QWP(0x20,"ebx"),"xmm2");
-       &pmuludq("xmm2","xmm7");                # a[2]*b[0]
-        &paddq ("xmm1","xmm4");                # a[1]*b[0]+hw(a[0]*b[0]), carry
-       &movdqa (&QWP(0x00,"esp"),"xmm1");      # t[0]
-
-       &movd   ("xmm0",&DWP(4*4,"esi"));
-       &pshufd ("xmm3","xmm3",0b11001100);
-       &movdqa (&QWP(0x30,"ebx"),"xmm3");
-       &pmuludq("xmm3","xmm7");                # a[3]*b[0]
-       &movdqa (&QWP(0x10,"esp"),"xmm2");
-
-       &movd   ("xmm1",&DWP(4*5,"esi"));
-       &pshufd ("xmm0","xmm0",0b11001100);
-       &movdqa (&QWP(0x40,"ebx"),"xmm0");
-       &pmuludq("xmm0","xmm7");                # a[4]*b[0]
-        &paddq ("xmm3","xmm5");                # a[3]*b[0]+lw(a[0]*b[0]), reduction step
-       &movdqa (&QWP(0x20,"esp"),"xmm3");
-
-       &movd   ("xmm2",&DWP(4*6,"esi"));
-       &pshufd ("xmm1","xmm1",0b11001100);
-       &movdqa (&QWP(0x50,"ebx"),"xmm1");
-       &pmuludq("xmm1","xmm7");                # a[5]*b[0]
-       &movdqa (&QWP(0x30,"esp"),"xmm0");
-        &pshufd("xmm4","xmm5",0b10110001);     # xmm4 = xmm5<<32, reduction step
-
-       &movd   ("xmm3",&DWP(4*7,"esi"));
-       &pshufd ("xmm2","xmm2",0b11001100);
-       &movdqa (&QWP(0x60,"ebx"),"xmm2");
-       &pmuludq("xmm2","xmm7");                # a[6]*b[0]
-       &movdqa (&QWP(0x40,"esp"),"xmm1");
-        &psubq ("xmm4","xmm5");                # xmm4 = xmm5*0xffffffff, reduction step
-
-       &movd   ("xmm0",&DWP(0,"ebp"));         # b[1] -> 0000.00xy
-       &pshufd ("xmm3","xmm3",0b11001100);
-       &movdqa (&QWP(0x70,"ebx"),"xmm3");
-       &pmuludq("xmm3","xmm7");                # a[7]*b[0]
-
-       &pshuflw("xmm7","xmm0",0b11011100);     # 0000.00xy -> 0000.0x0y
-       &movdqa ("xmm0",&QWP(0x00,"ebx"));      # pre-load converted a[0]
-       &pshufd ("xmm7","xmm7",0b11011100);     # 0000.0x0y -> 000x.000y
-
-       &mov    ("ecx",6);
-       &lea    ("ebp",&DWP(4,"ebp"));
-       &jmp    (&label("madd_sse2"));
-
-&set_label("madd_sse2",16);
-        &paddq ("xmm2","xmm5");                # a[6]*b[i-1]+lw(a[0]*b[i-1]), reduction step [modulo-scheduled]
-        &paddq ("xmm3","xmm4");                # a[7]*b[i-1]+lw(a[0]*b[i-1])*0xffffffff, reduction step [modulo-scheduled]
-       &movdqa ("xmm1",&QWP(0x10,"ebx"));
-       &pmuludq("xmm0","xmm7");                # a[0]*b[i]
-        &movdqa(&QWP(0x50,"esp"),"xmm2");
-
-       &movdqa ("xmm2",&QWP(0x20,"ebx"));
-       &pmuludq("xmm1","xmm7");                # a[1]*b[i]
-        &movdqa(&QWP(0x60,"esp"),"xmm3");
-       &paddq  ("xmm0",&QWP(0x00,"esp"));
-
-       &movdqa ("xmm3",&QWP(0x30,"ebx"));
-       &pmuludq("xmm2","xmm7");                # a[2]*b[i]
-        &movq  ("xmm4","xmm0");                # clear upper 64 bits
-        &pslldq("xmm4",6);
-       &paddq  ("xmm1",&QWP(0x10,"esp"));
-        &paddq ("xmm4","xmm0");
-        &movdqa("xmm5","xmm4");
-        &psrldq("xmm4",10);                    # upper 33 bits of a[0]*b[i]+t[0]
-
-       &movdqa ("xmm0",&QWP(0x40,"ebx"));
-       &pmuludq("xmm3","xmm7");                # a[3]*b[i]
-        &paddq ("xmm1","xmm4");                # a[1]*b[i]+hw(a[0]*b[i]), carry
-       &paddq  ("xmm2",&QWP(0x20,"esp"));
-       &movdqa (&QWP(0x00,"esp"),"xmm1");
-
-       &movdqa ("xmm1",&QWP(0x50,"ebx"));
-       &pmuludq("xmm0","xmm7");                # a[4]*b[i]
-       &paddq  ("xmm3",&QWP(0x30,"esp"));
-       &movdqa (&QWP(0x10,"esp"),"xmm2");
-        &pand  ("xmm5","xmm6");                # lower 32 bits of a[0]*b[i]
-
-       &movdqa ("xmm2",&QWP(0x60,"ebx"));
-       &pmuludq("xmm1","xmm7");                # a[5]*b[i]
-        &paddq ("xmm3","xmm5");                # a[3]*b[i]+lw(a[0]*b[i]), reduction step
-       &paddq  ("xmm0",&QWP(0x40,"esp"));
-       &movdqa (&QWP(0x20,"esp"),"xmm3");
-        &pshufd("xmm4","xmm5",0b10110001);     # xmm4 = xmm5<<32, reduction step
-
-       &movdqa ("xmm3","xmm7");
-       &pmuludq("xmm2","xmm7");                # a[6]*b[i]
-        &movd  ("xmm7",&DWP(0,"ebp"));         # b[i++] -> 0000.00xy
-        &lea   ("ebp",&DWP(4,"ebp"));
-       &paddq  ("xmm1",&QWP(0x50,"esp"));
-        &psubq ("xmm4","xmm5");                # xmm4 = xmm5*0xffffffff, reduction step
-       &movdqa (&QWP(0x30,"esp"),"xmm0");
-        &pshuflw("xmm7","xmm7",0b11011100);    # 0000.00xy -> 0000.0x0y
-
-       &pmuludq("xmm3",&QWP(0x70,"ebx"));      # a[7]*b[i]
-        &pshufd("xmm7","xmm7",0b11011100);     # 0000.0x0y -> 000x.000y
-        &movdqa("xmm0",&QWP(0x00,"ebx"));      # pre-load converted a[0]
-       &movdqa (&QWP(0x40,"esp"),"xmm1");
-       &paddq  ("xmm2",&QWP(0x60,"esp"));
-
-       &dec    ("ecx");
-       &jnz    (&label("madd_sse2"));
-
-        &paddq ("xmm2","xmm5");                # a[6]*b[6]+lw(a[0]*b[6]), reduction step [modulo-scheduled]
-        &paddq ("xmm3","xmm4");                # a[7]*b[6]+lw(a[0]*b[6])*0xffffffff, reduction step [modulo-scheduled]
-       &movdqa ("xmm1",&QWP(0x10,"ebx"));
-       &pmuludq("xmm0","xmm7");                # a[0]*b[7]
-        &movdqa(&QWP(0x50,"esp"),"xmm2");
-
-       &movdqa ("xmm2",&QWP(0x20,"ebx"));
-       &pmuludq("xmm1","xmm7");                # a[1]*b[7]
-        &movdqa(&QWP(0x60,"esp"),"xmm3");
-       &paddq  ("xmm0",&QWP(0x00,"esp"));
-
-       &movdqa ("xmm3",&QWP(0x30,"ebx"));
-       &pmuludq("xmm2","xmm7");                # a[2]*b[7]
-        &movq  ("xmm4","xmm0");                # clear upper 64 bits
-        &pslldq("xmm4",6);
-       &paddq  ("xmm1",&QWP(0x10,"esp"));
-        &paddq ("xmm4","xmm0");
-        &movdqa("xmm5","xmm4");
-        &psrldq("xmm4",10);                    # upper 33 bits of a[0]*b[i]+t[0]
-
-       &movdqa ("xmm0",&QWP(0x40,"ebx"));
-       &pmuludq("xmm3","xmm7");                # a[3]*b[7]
-        &paddq ("xmm1","xmm4");                # a[1]*b[7]+hw(a[0]*b[7]), carry
-       &paddq  ("xmm2",&QWP(0x20,"esp"));
-       &movdqa (&QWP(0x00,"esp"),"xmm1");
-
-       &movdqa ("xmm1",&QWP(0x50,"ebx"));
-       &pmuludq("xmm0","xmm7");                # a[4]*b[7]
-       &paddq  ("xmm3",&QWP(0x30,"esp"));
-       &movdqa (&QWP(0x10,"esp"),"xmm2");
-        &pand  ("xmm5","xmm6");                # lower 32 bits of a[0]*b[i]
-
-       &movdqa ("xmm2",&QWP(0x60,"ebx"));
-       &pmuludq("xmm1","xmm7");                # a[5]*b[7]
-        &paddq ("xmm3","xmm5");                # reduction step
-       &paddq  ("xmm0",&QWP(0x40,"esp"));
-       &movdqa (&QWP(0x20,"esp"),"xmm3");
-        &pshufd("xmm4","xmm5",0b10110001);     # xmm4 = xmm5<<32, reduction step
-
-       &movdqa ("xmm3",&QWP(0x70,"ebx"));
-       &pmuludq("xmm2","xmm7");                # a[6]*b[7]
-       &paddq  ("xmm1",&QWP(0x50,"esp"));
-        &psubq ("xmm4","xmm5");                # xmm4 = xmm5*0xffffffff, reduction step
-       &movdqa (&QWP(0x30,"esp"),"xmm0");
-
-       &pmuludq("xmm3","xmm7");                # a[7]*b[7]
-       &pcmpeqd("xmm7","xmm7");
-       &movdqa ("xmm0",&QWP(0x00,"esp"));
-       &pslldq ("xmm7",8);
-       &movdqa (&QWP(0x40,"esp"),"xmm1");
-       &paddq  ("xmm2",&QWP(0x60,"esp"));
-
-        &paddq ("xmm2","xmm5");                # a[6]*b[7]+lw(a[0]*b[7]), reduction step
-        &paddq ("xmm3","xmm4");                # a[6]*b[7]+lw(a[0]*b[7])*0xffffffff, reduction step
-        &movdqa(&QWP(0x50,"esp"),"xmm2");
-        &movdqa(&QWP(0x60,"esp"),"xmm3");
-
-       &movdqa ("xmm1",&QWP(0x10,"esp"));
-       &movdqa ("xmm2",&QWP(0x20,"esp"));
-       &movdqa ("xmm3",&QWP(0x30,"esp"));
-
-       &movq   ("xmm4","xmm0");                # "flatten"
-       &pand   ("xmm0","xmm7");
-       &xor    ("ebp","ebp");
-       &pslldq ("xmm4",6);
-        &movq  ("xmm5","xmm1");
-       &paddq  ("xmm0","xmm4");
-        &pand  ("xmm1","xmm7");
-       &psrldq ("xmm0",6);
-       &movd   ("eax","xmm0");
-       &psrldq ("xmm0",4);
-
-       &paddq  ("xmm5","xmm0");
-       &movdqa ("xmm0",&QWP(0x40,"esp"));
-       &sub    ("eax",-1);                     # start subtracting modulus,
-                                               # this is used to determine
-                                               # if result is larger/smaller
-                                               # than modulus (see below)
-       &pslldq ("xmm5",6);
-        &movq  ("xmm4","xmm2");
-       &paddq  ("xmm1","xmm5");
-        &pand  ("xmm2","xmm7");
-       &psrldq ("xmm1",6);
-       &mov    (&DWP(4*0,"edi"),"eax");
-       &movd   ("eax","xmm1");
-       &psrldq ("xmm1",4);
-
-       &paddq  ("xmm4","xmm1");
-       &movdqa ("xmm1",&QWP(0x50,"esp"));
-       &sbb    ("eax",-1);
-       &pslldq ("xmm4",6);
-        &movq  ("xmm5","xmm3");
-       &paddq  ("xmm2","xmm4");
-        &pand  ("xmm3","xmm7");
-       &psrldq ("xmm2",6);
-       &mov    (&DWP(4*1,"edi"),"eax");
-       &movd   ("eax","xmm2");
-       &psrldq ("xmm2",4);
-
-       &paddq  ("xmm5","xmm2");
-       &movdqa ("xmm2",&QWP(0x60,"esp"));
-       &sbb    ("eax",-1);
-       &pslldq ("xmm5",6);
-        &movq  ("xmm4","xmm0");
-       &paddq  ("xmm3","xmm5");
-        &pand  ("xmm0","xmm7");
-       &psrldq ("xmm3",6);
-       &mov    (&DWP(4*2,"edi"),"eax");
-       &movd   ("eax","xmm3");
-       &psrldq ("xmm3",4);
-
-       &paddq  ("xmm4","xmm3");
-       &sbb    ("eax",0);
-       &pslldq ("xmm4",6);
-        &movq  ("xmm5","xmm1");
-       &paddq  ("xmm0","xmm4");
-        &pand  ("xmm1","xmm7");
-       &psrldq ("xmm0",6);
-       &mov    (&DWP(4*3,"edi"),"eax");
-       &movd   ("eax","xmm0");
-       &psrldq ("xmm0",4);
-
-       &paddq  ("xmm5","xmm0");
-       &sbb    ("eax",0);
-       &pslldq ("xmm5",6);
-        &movq  ("xmm4","xmm2");
-       &paddq  ("xmm1","xmm5");
-        &pand  ("xmm2","xmm7");
-       &psrldq ("xmm1",6);
-       &movd   ("ebx","xmm1");
-       &psrldq ("xmm1",4);
-       &mov    ("esp","edx");
-
-       &paddq  ("xmm4","xmm1");
-       &pslldq ("xmm4",6);
-       &paddq  ("xmm2","xmm4");
-       &psrldq ("xmm2",6);
-       &movd   ("ecx","xmm2");
-       &psrldq ("xmm2",4);
-       &sbb    ("ebx",0);
-       &movd   ("edx","xmm2");
-       &pextrw ("esi","xmm2",2);               # top-most overflow bit
-       &sbb    ("ecx",1);
-       &sbb    ("edx",-1);
-       &sbb    ("esi",0);                      # borrow from subtraction
-
-       # Final step is "if result > mod, subtract mod", and at this point
-       # we have result - mod written to output buffer, as well as borrow
-       # bit from this subtraction, and if borrow bit is set, we add
-       # modulus back.
-       #
-       # Note that because mod has special form, i.e. consists of
-       # 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       # assigning borrow bit to one register, %ebp, and its negative
-       # to another, %esi. But we started by calculating %esi...
-
-       &sub    ("ebp","esi");
-       &add    (&DWP(4*0,"edi"),"esi");        # add modulus or zero
-       &adc    (&DWP(4*1,"edi"),"esi");
-       &adc    (&DWP(4*2,"edi"),"esi");
-       &adc    (&DWP(4*3,"edi"),0);
-       &adc    ("eax",0);
-       &adc    ("ebx",0);
-       &mov    (&DWP(4*4,"edi"),"eax");
-       &adc    ("ecx","ebp");
-       &mov    (&DWP(4*5,"edi"),"ebx");
-       &adc    ("edx","esi");
-       &mov    (&DWP(4*6,"edi"),"ecx");
-       &mov    (&DWP(4*7,"edi"),"edx");
-
-       &ret    ();
-
-&set_label("mul_mont_ialu",16);                        }
-
-       ########################################
-       # IALU code path suitable for all CPUs.
-       ########################################
-       # stack layout:
-       # +------------------------------------+< %esp
-       # | 8 32-bit temporary words, accessed |
-       # | as circular buffer                 |
-       # .                                    .
-       # .                                    .
-       # +------------------------------------+< +32
-       # | offloaded destination pointer      |
-       # +------------------------------------+
-       # | unused                             |
-       # +------------------------------------+< +40
-       &sub    ("esp",10*4);
-
-       &mov    ("eax",&DWP(0*4,"esi"));                # a[0]
-       &mov    ("ebx",&DWP(0*4,"ebp"));                # b[0]
-       &mov    (&DWP(8*4,"esp"),"edi");                # off-load dst ptr
-
-       &mul    ("ebx");                                # a[0]*b[0]
-       &mov    (&DWP(0*4,"esp"),"eax");                # t[0]
-       &mov    ("eax",&DWP(1*4,"esi"));
-       &mov    ("ecx","edx")
-
-       &mul    ("ebx");                                # a[1]*b[0]
-       &add    ("ecx","eax");
-       &mov    ("eax",&DWP(2*4,"esi"));
-       &adc    ("edx",0);
-       &mov    (&DWP(1*4,"esp"),"ecx");                # t[1]
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[2]*b[0]
-       &add    ("ecx","eax");
-       &mov    ("eax",&DWP(3*4,"esi"));
-       &adc    ("edx",0);
-       &mov    (&DWP(2*4,"esp"),"ecx");                # t[2]
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[3]*b[0]
-       &add    ("ecx","eax");
-       &mov    ("eax",&DWP(4*4,"esi"));
-       &adc    ("edx",0);
-       &mov    (&DWP(3*4,"esp"),"ecx");                # t[3]
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[4]*b[0]
-       &add    ("ecx","eax");
-       &mov    ("eax",&DWP(5*4,"esi"));
-       &adc    ("edx",0);
-       &mov    (&DWP(4*4,"esp"),"ecx");                # t[4]
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[5]*b[0]
-       &add    ("ecx","eax");
-       &mov    ("eax",&DWP(6*4,"esi"));
-       &adc    ("edx",0);
-       &mov    (&DWP(5*4,"esp"),"ecx");                # t[5]
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[6]*b[0]
-       &add    ("ecx","eax");
-       &mov    ("eax",&DWP(7*4,"esi"));
-       &adc    ("edx",0);
-       &mov    (&DWP(6*4,"esp"),"ecx");                # t[6]
-       &mov    ("ecx","edx");
-
-       &xor    ("edi","edi");                          # initial top-most carry
-       &mul    ("ebx");                                # a[7]*b[0]
-       &add    ("ecx","eax");                          # t[7]
-       &mov    ("eax",&DWP(0*4,"esp"));                # t[0]
-       &adc    ("edx",0);                              # t[8]
-
-for ($i=0;$i<7;$i++) {
-       my $j=$i+1;
-
-       # Reduction iteration is normally performed by accumulating
-       # result of multiplication of modulus by "magic" digit [and
-       # omitting least significant word, which is guaranteed to
-       # be 0], but thanks to special form of modulus and "magic"
-       # digit being equal to least significant word, it can be
-       # performed with additions and subtractions alone. Indeed:
-       #
-       #        ffff.0001.0000.0000.0000.ffff.ffff.ffff
-       # *                                         abcd
-       # + xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.abcd
-       #
-       # Now observing that ff..ff*x = (2^n-1)*x = 2^n*x-x, we
-       # rewrite above as:
-       #
-       #   xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.abcd
-       # + abcd.0000.abcd.0000.0000.abcd.0000.0000.0000
-       # -      abcd.0000.0000.0000.0000.0000.0000.abcd
-       #
-       # or marking redundant operations:
-       #
-       #   xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.xxxx.----
-       # + abcd.0000.abcd.0000.0000.abcd.----.----.----
-       # -      abcd.----.----.----.----.----.----.----
-
-       &add    (&DWP((($i+3)%8)*4,"esp"),"eax");       # t[3]+=t[0]
-       &adc    (&DWP((($i+4)%8)*4,"esp"),0);           # t[4]+=0
-       &adc    (&DWP((($i+5)%8)*4,"esp"),0);           # t[5]+=0
-       &adc    (&DWP((($i+6)%8)*4,"esp"),"eax");       # t[6]+=t[0]
-       &adc    ("ecx",0);                              # t[7]+=0
-       &adc    ("edx","eax");                          # t[8]+=t[0]
-       &adc    ("edi",0);                              # top-most carry
-        &mov   ("ebx",&DWP($j*4,"ebp"));               # b[i]
-       &sub    ("ecx","eax");                          # t[7]-=t[0]
-        &mov   ("eax",&DWP(0*4,"esi"));                # a[0]
-       &sbb    ("edx",0);                              # t[8]-=0
-       &mov    (&DWP((($i+7)%8)*4,"esp"),"ecx");
-       &sbb    ("edi",0);                              # top-most carry,
-                                                       # keep in mind that
-                                                       # netto result is
-                                                       # *addition* of value
-                                                       # with (abcd<<32)-abcd
-                                                       # on top, so that
-                                                       # underflow is
-                                                       # impossible, because
-                                                       # (abcd<<32)-abcd
-                                                       # doesn't underflow
-       &mov    (&DWP((($i+8)%8)*4,"esp"),"edx");
-
-       &mul    ("ebx");                                # a[0]*b[i]
-       &add    ("eax",&DWP((($j+0)%8)*4,"esp"));
-       &adc    ("edx",0);
-       &mov    (&DWP((($j+0)%8)*4,"esp"),"eax");
-       &mov    ("eax",&DWP(1*4,"esi"));
-       &mov    ("ecx","edx")
-
-       &mul    ("ebx");                                # a[1]*b[i]
-       &add    ("ecx",&DWP((($j+1)%8)*4,"esp"));
-       &adc    ("edx",0);
-       &add    ("ecx","eax");
-       &adc    ("edx",0);
-       &mov    ("eax",&DWP(2*4,"esi"));
-       &mov    (&DWP((($j+1)%8)*4,"esp"),"ecx");
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[2]*b[i]
-       &add    ("ecx",&DWP((($j+2)%8)*4,"esp"));
-       &adc    ("edx",0);
-       &add    ("ecx","eax");
-       &adc    ("edx",0);
-       &mov    ("eax",&DWP(3*4,"esi"));
-       &mov    (&DWP((($j+2)%8)*4,"esp"),"ecx");
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[3]*b[i]
-       &add    ("ecx",&DWP((($j+3)%8)*4,"esp"));
-       &adc    ("edx",0);
-       &add    ("ecx","eax");
-       &adc    ("edx",0);
-       &mov    ("eax",&DWP(4*4,"esi"));
-       &mov    (&DWP((($j+3)%8)*4,"esp"),"ecx");
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[4]*b[i]
-       &add    ("ecx",&DWP((($j+4)%8)*4,"esp"));
-       &adc    ("edx",0);
-       &add    ("ecx","eax");
-       &adc    ("edx",0);
-       &mov    ("eax",&DWP(5*4,"esi"));
-       &mov    (&DWP((($j+4)%8)*4,"esp"),"ecx");
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[5]*b[i]
-       &add    ("ecx",&DWP((($j+5)%8)*4,"esp"));
-       &adc    ("edx",0);
-       &add    ("ecx","eax");
-       &adc    ("edx",0);
-       &mov    ("eax",&DWP(6*4,"esi"));
-       &mov    (&DWP((($j+5)%8)*4,"esp"),"ecx");
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[6]*b[i]
-       &add    ("ecx",&DWP((($j+6)%8)*4,"esp"));
-       &adc    ("edx",0);
-       &add    ("ecx","eax");
-       &adc    ("edx",0);
-       &mov    ("eax",&DWP(7*4,"esi"));
-       &mov    (&DWP((($j+6)%8)*4,"esp"),"ecx");
-       &mov    ("ecx","edx");
-
-       &mul    ("ebx");                                # a[7]*b[i]
-       &add    ("ecx",&DWP((($j+7)%8)*4,"esp"));
-       &adc    ("edx",0);
-       &add    ("ecx","eax");                          # t[7]
-       &mov    ("eax",&DWP((($j+0)%8)*4,"esp"));       # t[0]
-       &adc    ("edx","edi");                          # t[8]
-       &mov    ("edi",0);
-       &adc    ("edi",0);                              # top-most carry
-}
-       &mov    ("ebp",&DWP(8*4,"esp"));                # restore dst ptr
-       &xor    ("esi","esi");
-       my $j=$i+1;
-
-       # last multiplication-less reduction
-       &add    (&DWP((($i+3)%8)*4,"esp"),"eax");       # t[3]+=t[0]
-       &adc    (&DWP((($i+4)%8)*4,"esp"),0);           # t[4]+=0
-       &adc    (&DWP((($i+5)%8)*4,"esp"),0);           # t[5]+=0
-       &adc    (&DWP((($i+6)%8)*4,"esp"),"eax");       # t[6]+=t[0]
-       &adc    ("ecx",0);                              # t[7]+=0
-       &adc    ("edx","eax");                          # t[8]+=t[0]
-       &adc    ("edi",0);                              # top-most carry
-        &mov   ("ebx",&DWP((($j+1)%8)*4,"esp"));
-       &sub    ("ecx","eax");                          # t[7]-=t[0]
-        &mov   ("eax",&DWP((($j+0)%8)*4,"esp"));
-       &sbb    ("edx",0);                              # t[8]-=0
-       &mov    (&DWP((($i+7)%8)*4,"esp"),"ecx");
-       &sbb    ("edi",0);                              # top-most carry
-       &mov    (&DWP((($i+8)%8)*4,"esp"),"edx");
-
-       # Final step is "if result > mod, subtract mod", but we do it
-       # "other way around", namely write result - mod to output buffer
-       # and if subtraction borrowed, add modulus back.
-
-       &mov    ("ecx",&DWP((($j+2)%8)*4,"esp"));
-       &sub    ("eax",-1);
-       &mov    ("edx",&DWP((($j+3)%8)*4,"esp"));
-       &sbb    ("ebx",-1);
-       &mov    (&DWP(0*4,"ebp"),"eax");
-       &sbb    ("ecx",-1);
-       &mov    (&DWP(1*4,"ebp"),"ebx");
-       &sbb    ("edx",0);
-       &mov    (&DWP(2*4,"ebp"),"ecx");
-       &mov    (&DWP(3*4,"ebp"),"edx");
-
-       &mov    ("eax",&DWP((($j+4)%8)*4,"esp"));
-       &mov    ("ebx",&DWP((($j+5)%8)*4,"esp"));
-       &mov    ("ecx",&DWP((($j+6)%8)*4,"esp"));
-       &sbb    ("eax",0);
-       &mov    ("edx",&DWP((($j+7)%8)*4,"esp"));
-       &sbb    ("ebx",0);
-       &sbb    ("ecx",1);
-       &sbb    ("edx",-1);
-       &sbb    ("edi",0);
-
-       # Note that because mod has special form, i.e. consists of
-       # 0xffffffff, 1 and 0s, we can conditionally synthesize it by
-       # assigning borrow bit to one register, %ebp, and its negative
-       # to another, %esi. But we started by calculating %esi...
-
-       &sub    ("esi","edi");
-       &add    (&DWP(0*4,"ebp"),"edi");                # add modulus or zero
-       &adc    (&DWP(1*4,"ebp"),"edi");
-       &adc    (&DWP(2*4,"ebp"),"edi");
-       &adc    (&DWP(3*4,"ebp"),0);
-       &adc    ("eax",0);
-       &adc    ("ebx",0);
-       &mov    (&DWP(4*4,"ebp"),"eax");
-       &adc    ("ecx","esi");
-       &mov    (&DWP(5*4,"ebp"),"ebx");
-       &adc    ("edx","edi");
-       &mov    (&DWP(6*4,"ebp"),"ecx");
-       &mov    ("edi","ebp");                          # fulfill contract
-       &mov    (&DWP(7*4,"ebp"),"edx");
-
-       &add    ("esp",10*4);
-       &ret    ();
-&function_end_B("_ecp_nistz256_mul_mont");
-
-########################################################################
-# void ecp_nistz256_select_w5(P256_POINT *edi,const void *esi,
-#                                            int ebp);
-&function_begin("ecp_nistz256_select_w5");
-       &mov    ("esi",&wparam(1));
-       &mov    ("ebp",&wparam(2));
-
-       &lea    ("esi",&DWP(0,"esi","ebp",4));
-       &neg    ("ebp");
-       &sar    ("ebp",31);
-       &mov    ("edi",&wparam(0));
-       &lea    ("esi",&DWP(0,"esi","ebp",4));
-
-    for($i=0;$i<24;$i+=4) {
-       &mov    ("eax",&DWP(64*($i+0),"esi"));
-       &mov    ("ebx",&DWP(64*($i+1),"esi"));
-       &mov    ("ecx",&DWP(64*($i+2),"esi"));
-       &mov    ("edx",&DWP(64*($i+3),"esi"));
-       &and    ("eax","ebp");
-       &and    ("ebx","ebp");
-       &and    ("ecx","ebp");
-       &and    ("edx","ebp");
-       &mov    (&DWP(4*($i+0),"edi"),"eax");
-       &mov    (&DWP(4*($i+1),"edi"),"ebx");
-       &mov    (&DWP(4*($i+2),"edi"),"ecx");
-       &mov    (&DWP(4*($i+3),"edi"),"edx");
-    }
-&function_end("ecp_nistz256_select_w5");
-
-########################################################################
-# void ecp_nistz256_select_w7(P256_POINT_AFFINE *edi,const void *esi,
-#                                                   int ebp);
-&function_begin("ecp_nistz256_select_w7");
-       &mov    ("esi",&wparam(1));
-       &mov    ("ebp",&wparam(2));
-
-       &add    ("esi","ebp");
-       &neg    ("ebp"),
-       &sar    ("ebp",31);
-       &mov    ("edi",&wparam(0));
-       &lea    ("esi",&DWP(0,"esi","ebp"));
-
-    for($i=0;$i<64;$i+=4) {
-       &movz   ("eax",&BP(64*($i+0),"esi"));
-       &movz   ("ebx",&BP(64*($i+1),"esi"));
-       &movz   ("ecx",&BP(64*($i+2),"esi"));
-       &and    ("eax","ebp");
-       &movz   ("edx",&BP(64*($i+3),"esi"));
-       &and    ("ebx","ebp");
-       &mov    (&BP($i+0,"edi"),"al");
-       &and    ("ecx","ebp");
-       &mov    (&BP($i+1,"edi"),"bl");
-       &and    ("edx","ebp");
-       &mov    (&BP($i+2,"edi"),"cl");
-       &mov    (&BP($i+3,"edi"),"dl");
-    }
-&function_end("ecp_nistz256_select_w7");
-
-########################################################################
-# following subroutines are "literal" implementation of those found in
-# ecp_nistz256.c
-#
-########################################################################
-# void ecp_nistz256_point_double(P256_POINT *out,const P256_POINT *inp);
-#
-&static_label("point_double_shortcut");
-&function_begin("ecp_nistz256_point_double");
-{   my ($S,$M,$Zsqr,$in_x,$tmp0)=map(32*$_,(0..4));
-
-       &mov    ("esi",&wparam(1));
-
-       # above map() describes stack layout with 5 temporary
-       # 256-bit vectors on top, then we take extra word for
-       # OPENSSL_ia32cap_P copy.
-       &stack_push(8*5+1);
-                                               if ($sse2) {
-       &call   ("_picup_eax");
-    &set_label("pic");
-       &picmeup("edx","OPENSSL_ia32cap_P","eax",&label("pic"));
-       &mov    ("ebp",&DWP(0,"edx"));          }
-
-&set_label("point_double_shortcut");
-       &mov    ("eax",&DWP(0,"esi"));          # copy in_x
-       &mov    ("ebx",&DWP(4,"esi"));
-       &mov    ("ecx",&DWP(8,"esi"));
-       &mov    ("edx",&DWP(12,"esi"));
-       &mov    (&DWP($in_x+0,"esp"),"eax");
-       &mov    (&DWP($in_x+4,"esp"),"ebx");
-       &mov    (&DWP($in_x+8,"esp"),"ecx");
-       &mov    (&DWP($in_x+12,"esp"),"edx");
-       &mov    ("eax",&DWP(16,"esi"));
-       &mov    ("ebx",&DWP(20,"esi"));
-       &mov    ("ecx",&DWP(24,"esi"));
-       &mov    ("edx",&DWP(28,"esi"));
-       &mov    (&DWP($in_x+16,"esp"),"eax");
-       &mov    (&DWP($in_x+20,"esp"),"ebx");
-       &mov    (&DWP($in_x+24,"esp"),"ecx");
-       &mov    (&DWP($in_x+28,"esp"),"edx");
-       &mov    (&DWP(32*5,"esp"),"ebp");       # OPENSSL_ia32cap_P copy
-
-       &lea    ("ebp",&DWP(32,"esi"));
-       &lea    ("esi",&DWP(32,"esi"));
-       &lea    ("edi",&DWP($S,"esp"));
-       &call   ("_ecp_nistz256_add");          # p256_mul_by_2(S, in_y);
-
-       &mov    ("eax",&DWP(32*5,"esp"));       # OPENSSL_ia32cap_P copy
-       &mov    ("esi",64);
-       &add    ("esi",&wparam(1));
-       &lea    ("edi",&DWP($Zsqr,"esp"));
-       &mov    ("ebp","esi");
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(Zsqr, in_z);
-
-       &mov    ("eax",&DWP(32*5,"esp"));       # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($S,"esp"));
-       &lea    ("ebp",&DWP($S,"esp"));
-       &lea    ("edi",&DWP($S,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(S, S);
-
-       &mov    ("eax",&DWP(32*5,"esp"));       # OPENSSL_ia32cap_P copy
-       &mov    ("ebp",&wparam(1));
-       &lea    ("esi",&DWP(32,"ebp"));
-       &lea    ("ebp",&DWP(64,"ebp"));
-       &lea    ("edi",&DWP($tmp0,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(tmp0, in_z, in_y);
-
-       &lea    ("esi",&DWP($in_x,"esp"));
-       &lea    ("ebp",&DWP($Zsqr,"esp"));
-       &lea    ("edi",&DWP($M,"esp"));
-       &call   ("_ecp_nistz256_add");          # p256_add(M, in_x, Zsqr);
-
-       &mov    ("edi",64);
-       &lea    ("esi",&DWP($tmp0,"esp"));
-       &lea    ("ebp",&DWP($tmp0,"esp"));
-       &add    ("edi",&wparam(0));
-       &call   ("_ecp_nistz256_add");          # p256_mul_by_2(res_z, tmp0);
-
-       &lea    ("esi",&DWP($in_x,"esp"));
-       &lea    ("ebp",&DWP($Zsqr,"esp"));
-       &lea    ("edi",&DWP($Zsqr,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(Zsqr, in_x, Zsqr);
-
-       &mov    ("eax",&DWP(32*5,"esp"));       # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($S,"esp"));
-       &lea    ("ebp",&DWP($S,"esp"));
-       &lea    ("edi",&DWP($tmp0,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(tmp0, S);
-
-       &mov    ("eax",&DWP(32*5,"esp"));       # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($M,"esp"));
-       &lea    ("ebp",&DWP($Zsqr,"esp"));
-       &lea    ("edi",&DWP($M,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(M, M, Zsqr);
-
-       &mov    ("edi",32);
-       &lea    ("esi",&DWP($tmp0,"esp"));
-       &add    ("edi",&wparam(0));
-       &call   ("_ecp_nistz256_div_by_2");     # p256_div_by_2(res_y, tmp0);
-
-       &lea    ("esi",&DWP($M,"esp"));
-       &lea    ("ebp",&DWP($M,"esp"));
-       &lea    ("edi",&DWP($tmp0,"esp"));
-       &call   ("_ecp_nistz256_add");          # 1/2 p256_mul_by_3(M, M);
-
-       &mov    ("eax",&DWP(32*5,"esp"));       # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in_x,"esp"));
-       &lea    ("ebp",&DWP($S,"esp"));
-       &lea    ("edi",&DWP($S,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S, S, in_x);
-
-       &lea    ("esi",&DWP($tmp0,"esp"));
-       &lea    ("ebp",&DWP($M,"esp"));
-       &lea    ("edi",&DWP($M,"esp"));
-       &call   ("_ecp_nistz256_add");          # 2/2 p256_mul_by_3(M, M);
-
-       &lea    ("esi",&DWP($S,"esp"));
-       &lea    ("ebp",&DWP($S,"esp"));
-       &lea    ("edi",&DWP($tmp0,"esp"));
-       &call   ("_ecp_nistz256_add");          # p256_mul_by_2(tmp0, S);
-
-       &mov    ("eax",&DWP(32*5,"esp"));       # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($M,"esp"));
-       &lea    ("ebp",&DWP($M,"esp"));
-       &mov    ("edi",&wparam(0));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(res_x, M);
-
-       &mov    ("esi","edi");                  # %edi is still res_x here
-       &lea    ("ebp",&DWP($tmp0,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_x, res_x, tmp0);
-
-       &lea    ("esi",&DWP($S,"esp"));
-       &mov    ("ebp","edi");                  # %edi is still res_x
-       &lea    ("edi",&DWP($S,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(S, S, res_x);
-
-       &mov    ("eax",&DWP(32*5,"esp"));       # OPENSSL_ia32cap_P copy
-       &mov    ("esi","edi");                  # %edi is still &S
-       &lea    ("ebp",&DWP($M,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S, S, M);
-
-       &mov    ("ebp",32);
-       &lea    ("esi",&DWP($S,"esp"));
-       &add    ("ebp",&wparam(0));
-       &mov    ("edi","ebp");
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_y, S, res_y);
-
-       &stack_pop(8*5+1);
-} &function_end("ecp_nistz256_point_double");
-
-########################################################################
-# void ecp_nistz256_point_add(P256_POINT *out,const P256_POINT *in1,
-#                                            const P256_POINT *in2);
-&function_begin("ecp_nistz256_point_add");
-{   my ($res_x,$res_y,$res_z,
-       $in1_x,$in1_y,$in1_z,
-       $in2_x,$in2_y,$in2_z,
-       $H,$Hsqr,$R,$Rsqr,$Hcub,
-       $U1,$U2,$S1,$S2)=map(32*$_,(0..17));
-    my ($Z1sqr, $Z2sqr) = ($Hsqr, $Rsqr);
-
-       &mov    ("esi",&wparam(2));
-
-       # above map() describes stack layout with 18 temporary
-       # 256-bit vectors on top, then we take extra words for
-       # !in1infty, !in2infty, result of check for zero and
-       # OPENSSL_ia32cap_P copy. [one unused word for padding]
-       &stack_push(8*18+5);
-                                               if ($sse2) {
-       &call   ("_picup_eax");
-    &set_label("pic");
-       &picmeup("edx","OPENSSL_ia32cap_P","eax",&label("pic"));
-       &mov    ("ebp",&DWP(0,"edx"));          }
-
-       &lea    ("edi",&DWP($in2_x,"esp"));
-    for($i=0;$i<96;$i+=16) {
-       &mov    ("eax",&DWP($i+0,"esi"));       # copy in2
-       &mov    ("ebx",&DWP($i+4,"esi"));
-       &mov    ("ecx",&DWP($i+8,"esi"));
-       &mov    ("edx",&DWP($i+12,"esi"));
-       &mov    (&DWP($i+0,"edi"),"eax");
-       &mov    (&DWP(32*18+12,"esp"),"ebp")    if ($i==0);
-       &mov    ("ebp","eax")                   if ($i==64);
-       &or     ("ebp","eax")                   if ($i>64);
-       &mov    (&DWP($i+4,"edi"),"ebx");
-       &or     ("ebp","ebx")                   if ($i>=64);
-       &mov    (&DWP($i+8,"edi"),"ecx");
-       &or     ("ebp","ecx")                   if ($i>=64);
-       &mov    (&DWP($i+12,"edi"),"edx");
-       &or     ("ebp","edx")                   if ($i>=64);
-    }
-       &xor    ("eax","eax");
-       &mov    ("esi",&wparam(1));
-       &sub    ("eax","ebp");
-       &or     ("ebp","eax");
-       &sar    ("ebp",31);
-       &mov    (&DWP(32*18+4,"esp"),"ebp");    # !in2infty
-
-       &lea    ("edi",&DWP($in1_x,"esp"));
-    for($i=0;$i<96;$i+=16) {
-       &mov    ("eax",&DWP($i+0,"esi"));       # copy in1
-       &mov    ("ebx",&DWP($i+4,"esi"));
-       &mov    ("ecx",&DWP($i+8,"esi"));
-       &mov    ("edx",&DWP($i+12,"esi"));
-       &mov    (&DWP($i+0,"edi"),"eax");
-       &mov    ("ebp","eax")                   if ($i==64);
-       &or     ("ebp","eax")                   if ($i>64);
-       &mov    (&DWP($i+4,"edi"),"ebx");
-       &or     ("ebp","ebx")                   if ($i>=64);
-       &mov    (&DWP($i+8,"edi"),"ecx");
-       &or     ("ebp","ecx")                   if ($i>=64);
-       &mov    (&DWP($i+12,"edi"),"edx");
-       &or     ("ebp","edx")                   if ($i>=64);
-    }
-       &xor    ("eax","eax");
-       &sub    ("eax","ebp");
-       &or     ("ebp","eax");
-       &sar    ("ebp",31);
-       &mov    (&DWP(32*18+0,"esp"),"ebp");    # !in1infty
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in2_z,"esp"));
-       &lea    ("ebp",&DWP($in2_z,"esp"));
-       &lea    ("edi",&DWP($Z2sqr,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(Z2sqr, in2_z);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in1_z,"esp"));
-       &lea    ("ebp",&DWP($in1_z,"esp"));
-       &lea    ("edi",&DWP($Z1sqr,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(Z1sqr, in1_z);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($Z2sqr,"esp"));
-       &lea    ("ebp",&DWP($in2_z,"esp"));
-       &lea    ("edi",&DWP($S1,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S1, Z2sqr, in2_z);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($Z1sqr,"esp"));
-       &lea    ("ebp",&DWP($in1_z,"esp"));
-       &lea    ("edi",&DWP($S2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S2, Z1sqr, in1_z);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in1_y,"esp"));
-       &lea    ("ebp",&DWP($S1,"esp"));
-       &lea    ("edi",&DWP($S1,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S1, S1, in1_y);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in2_y,"esp"));
-       &lea    ("ebp",&DWP($S2,"esp"));
-       &lea    ("edi",&DWP($S2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S2, S2, in2_y);
-
-       &lea    ("esi",&DWP($S2,"esp"));
-       &lea    ("ebp",&DWP($S1,"esp"));
-       &lea    ("edi",&DWP($R,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(R, S2, S1);
-
-       &or     ("ebx","eax");                  # see if result is zero
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &or     ("ebx","ecx");
-       &or     ("ebx","edx");
-       &or     ("ebx",&DWP(0,"edi"));
-       &or     ("ebx",&DWP(4,"edi"));
-        &lea   ("esi",&DWP($in1_x,"esp"));
-       &or     ("ebx",&DWP(8,"edi"));
-        &lea   ("ebp",&DWP($Z2sqr,"esp"));
-       &or     ("ebx",&DWP(12,"edi"));
-        &lea   ("edi",&DWP($U1,"esp"));
-       &mov    (&DWP(32*18+8,"esp"),"ebx");
-
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(U1, in1_x, Z2sqr);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in2_x,"esp"));
-       &lea    ("ebp",&DWP($Z1sqr,"esp"));
-       &lea    ("edi",&DWP($U2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(U2, in2_x, Z1sqr);
-
-       &lea    ("esi",&DWP($U2,"esp"));
-       &lea    ("ebp",&DWP($U1,"esp"));
-       &lea    ("edi",&DWP($H,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(H, U2, U1);
-
-       &or     ("eax","ebx");                  # see if result is zero
-       &or     ("eax","ecx");
-       &or     ("eax","edx");
-       &or     ("eax",&DWP(0,"edi"));
-       &or     ("eax",&DWP(4,"edi"));
-       &or     ("eax",&DWP(8,"edi"));
-       &or     ("eax",&DWP(12,"edi"));
-
-       &data_byte(0x3e);                       # predict taken
-       &jnz    (&label("add_proceed"));        # is_equal(U1,U2)?
-
-       &mov    ("eax",&DWP(32*18+0,"esp"));
-       &and    ("eax",&DWP(32*18+4,"esp"));
-       &mov    ("ebx",&DWP(32*18+8,"esp"));
-       &jz     (&label("add_proceed"));        # (in1infty || in2infty)?
-       &test   ("ebx","ebx");
-       &jz     (&label("add_double"));         # is_equal(S1,S2)?
-
-       &mov    ("edi",&wparam(0));
-       &xor    ("eax","eax");
-       &mov    ("ecx",96/4);
-       &data_byte(0xfc,0xf3,0xab);             # cld; stosd
-       &jmp    (&label("add_done"));
-
-&set_label("add_double",16);
-       &mov    ("esi",&wparam(1));
-       &mov    ("ebp",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &add    ("esp",4*((8*18+5)-(8*5+1)));   # difference in frame sizes
-       &jmp    (&label("point_double_shortcut"));
-
-&set_label("add_proceed",16);
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($R,"esp"));
-       &lea    ("ebp",&DWP($R,"esp"));
-       &lea    ("edi",&DWP($Rsqr,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(Rsqr, R);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($H,"esp"));
-       &lea    ("ebp",&DWP($in1_z,"esp"));
-       &lea    ("edi",&DWP($res_z,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(res_z, H, in1_z);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($H,"esp"));
-       &lea    ("ebp",&DWP($H,"esp"));
-       &lea    ("edi",&DWP($Hsqr,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(Hsqr, H);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in2_z,"esp"));
-       &lea    ("ebp",&DWP($res_z,"esp"));
-       &lea    ("edi",&DWP($res_z,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(res_z, res_z, in2_z);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($Hsqr,"esp"));
-       &lea    ("ebp",&DWP($U1,"esp"));
-       &lea    ("edi",&DWP($U2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(U2, U1, Hsqr);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($H,"esp"));
-       &lea    ("ebp",&DWP($Hsqr,"esp"));
-       &lea    ("edi",&DWP($Hcub,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(Hcub, Hsqr, H);
-
-       &lea    ("esi",&DWP($U2,"esp"));
-       &lea    ("ebp",&DWP($U2,"esp"));
-       &lea    ("edi",&DWP($Hsqr,"esp"));
-       &call   ("_ecp_nistz256_add");          # p256_mul_by_2(Hsqr, U2);
-
-       &lea    ("esi",&DWP($Rsqr,"esp"));
-       &lea    ("ebp",&DWP($Hsqr,"esp"));
-       &lea    ("edi",&DWP($res_x,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_x, Rsqr, Hsqr);
-
-       &lea    ("esi",&DWP($res_x,"esp"));
-       &lea    ("ebp",&DWP($Hcub,"esp"));
-       &lea    ("edi",&DWP($res_x,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_x, res_x, Hcub);
-
-       &lea    ("esi",&DWP($U2,"esp"));
-       &lea    ("ebp",&DWP($res_x,"esp"));
-       &lea    ("edi",&DWP($res_y,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_y, U2, res_x);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($Hcub,"esp"));
-       &lea    ("ebp",&DWP($S1,"esp"));
-       &lea    ("edi",&DWP($S2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S2, S1, Hcub);
-
-       &mov    ("eax",&DWP(32*18+12,"esp"));   # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($R,"esp"));
-       &lea    ("ebp",&DWP($res_y,"esp"));
-       &lea    ("edi",&DWP($res_y,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(res_y, R, res_y);
-
-       &lea    ("esi",&DWP($res_y,"esp"));
-       &lea    ("ebp",&DWP($S2,"esp"));
-       &lea    ("edi",&DWP($res_y,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_y, res_y, S2);
-
-       &mov    ("ebp",&DWP(32*18+0,"esp"));    # !in1infty
-       &mov    ("esi",&DWP(32*18+4,"esp"));    # !in2infty
-       &mov    ("edi",&wparam(0));
-       &mov    ("edx","ebp");
-       &not    ("ebp");
-       &and    ("edx","esi");
-       &and    ("ebp","esi");
-       &not    ("esi");
-
-       ########################################
-       # conditional moves
-    for($i=64;$i<96;$i+=4) {
-       &mov    ("eax","edx");
-       &and    ("eax",&DWP($res_x+$i,"esp"));
-       &mov    ("ebx","ebp");
-       &and    ("ebx",&DWP($in2_x+$i,"esp"));
-       &mov    ("ecx","esi");
-       &and    ("ecx",&DWP($in1_x+$i,"esp"));
-       &or     ("eax","ebx");
-       &or     ("eax","ecx");
-       &mov    (&DWP($i,"edi"),"eax");
-    }
-    for($i=0;$i<64;$i+=4) {
-       &mov    ("eax","edx");
-       &and    ("eax",&DWP($res_x+$i,"esp"));
-       &mov    ("ebx","ebp");
-       &and    ("ebx",&DWP($in2_x+$i,"esp"));
-       &mov    ("ecx","esi");
-       &and    ("ecx",&DWP($in1_x+$i,"esp"));
-       &or     ("eax","ebx");
-       &or     ("eax","ecx");
-       &mov    (&DWP($i,"edi"),"eax");
-    }
-    &set_label("add_done");
-       &stack_pop(8*18+5);
-} &function_end("ecp_nistz256_point_add");
-
-########################################################################
-# void ecp_nistz256_point_add_affine(P256_POINT *out,
-#                                   const P256_POINT *in1,
-#                                   const P256_POINT_AFFINE *in2);
-&function_begin("ecp_nistz256_point_add_affine");
-{
-    my ($res_x,$res_y,$res_z,
-       $in1_x,$in1_y,$in1_z,
-       $in2_x,$in2_y,
-       $U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr)=map(32*$_,(0..14));
-    my $Z1sqr = $S2;
-    my @ONE_mont=(1,0,0,-1,-1,-1,-2,0);
-
-       &mov    ("esi",&wparam(1));
-
-       # above map() describes stack layout with 15 temporary
-       # 256-bit vectors on top, then we take extra words for
-       # !in1infty, !in2infty, and OPENSSL_ia32cap_P copy.
-       &stack_push(8*15+3);
-                                               if ($sse2) {
-       &call   ("_picup_eax");
-    &set_label("pic");
-       &picmeup("edx","OPENSSL_ia32cap_P","eax",&label("pic"));
-       &mov    ("ebp",&DWP(0,"edx"));          }
-
-       &lea    ("edi",&DWP($in1_x,"esp"));
-    for($i=0;$i<96;$i+=16) {
-       &mov    ("eax",&DWP($i+0,"esi"));       # copy in1
-       &mov    ("ebx",&DWP($i+4,"esi"));
-       &mov    ("ecx",&DWP($i+8,"esi"));
-       &mov    ("edx",&DWP($i+12,"esi"));
-       &mov    (&DWP($i+0,"edi"),"eax");
-       &mov    (&DWP(32*15+8,"esp"),"ebp")     if ($i==0);
-       &mov    ("ebp","eax")                   if ($i==64);
-       &or     ("ebp","eax")                   if ($i>64);
-       &mov    (&DWP($i+4,"edi"),"ebx");
-       &or     ("ebp","ebx")                   if ($i>=64);
-       &mov    (&DWP($i+8,"edi"),"ecx");
-       &or     ("ebp","ecx")                   if ($i>=64);
-       &mov    (&DWP($i+12,"edi"),"edx");
-       &or     ("ebp","edx")                   if ($i>=64);
-    }
-       &xor    ("eax","eax");
-       &mov    ("esi",&wparam(2));
-       &sub    ("eax","ebp");
-       &or     ("ebp","eax");
-       &sar    ("ebp",31);
-       &mov    (&DWP(32*15+0,"esp"),"ebp");    # !in1infty
-
-       &lea    ("edi",&DWP($in2_x,"esp"));
-    for($i=0;$i<64;$i+=16) {
-       &mov    ("eax",&DWP($i+0,"esi"));       # copy in2
-       &mov    ("ebx",&DWP($i+4,"esi"));
-       &mov    ("ecx",&DWP($i+8,"esi"));
-       &mov    ("edx",&DWP($i+12,"esi"));
-       &mov    (&DWP($i+0,"edi"),"eax");
-       &mov    ("ebp","eax")                   if ($i==0);
-       &or     ("ebp","eax")                   if ($i!=0);
-       &mov    (&DWP($i+4,"edi"),"ebx");
-       &or     ("ebp","ebx");
-       &mov    (&DWP($i+8,"edi"),"ecx");
-       &or     ("ebp","ecx");
-       &mov    (&DWP($i+12,"edi"),"edx");
-       &or     ("ebp","edx");
-    }
-       &xor    ("ebx","ebx");
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &sub    ("ebx","ebp");
-        &lea   ("esi",&DWP($in1_z,"esp"));
-       &or     ("ebx","ebp");
-        &lea   ("ebp",&DWP($in1_z,"esp"));
-       &sar    ("ebx",31);
-        &lea   ("edi",&DWP($Z1sqr,"esp"));
-       &mov    (&DWP(32*15+4,"esp"),"ebx");    # !in2infty
-
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(Z1sqr, in1_z);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in2_x,"esp"));
-       &mov    ("ebp","edi");                  # %esi is stull &Z1sqr
-       &lea    ("edi",&DWP($U2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(U2, Z1sqr, in2_x);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in1_z,"esp"));
-       &lea    ("ebp",&DWP($Z1sqr,"esp"));
-       &lea    ("edi",&DWP($S2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S2, Z1sqr, in1_z);
-
-       &lea    ("esi",&DWP($U2,"esp"));
-       &lea    ("ebp",&DWP($in1_x,"esp"));
-       &lea    ("edi",&DWP($H,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(H, U2, in1_x);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in2_y,"esp"));
-       &lea    ("ebp",&DWP($S2,"esp"));
-       &lea    ("edi",&DWP($S2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S2, S2, in2_y);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in1_z,"esp"));
-       &lea    ("ebp",&DWP($H,"esp"));
-       &lea    ("edi",&DWP($res_z,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(res_z, H, in1_z);
-
-       &lea    ("esi",&DWP($S2,"esp"));
-       &lea    ("ebp",&DWP($in1_y,"esp"));
-       &lea    ("edi",&DWP($R,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(R, S2, in1_y);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($H,"esp"));
-       &lea    ("ebp",&DWP($H,"esp"));
-       &lea    ("edi",&DWP($Hsqr,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(Hsqr, H);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($R,"esp"));
-       &lea    ("ebp",&DWP($R,"esp"));
-       &lea    ("edi",&DWP($Rsqr,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_sqr_mont(Rsqr, R);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($in1_x,"esp"));
-       &lea    ("ebp",&DWP($Hsqr,"esp"));
-       &lea    ("edi",&DWP($U2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(U2, in1_x, Hsqr);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($H,"esp"));
-       &lea    ("ebp",&DWP($Hsqr,"esp"));
-       &lea    ("edi",&DWP($Hcub,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(Hcub, Hsqr, H);
-
-       &lea    ("esi",&DWP($U2,"esp"));
-       &lea    ("ebp",&DWP($U2,"esp"));
-       &lea    ("edi",&DWP($Hsqr,"esp"));
-       &call   ("_ecp_nistz256_add");          # p256_mul_by_2(Hsqr, U2);
-
-       &lea    ("esi",&DWP($Rsqr,"esp"));
-       &lea    ("ebp",&DWP($Hsqr,"esp"));
-       &lea    ("edi",&DWP($res_x,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_x, Rsqr, Hsqr);
-
-       &lea    ("esi",&DWP($res_x,"esp"));
-       &lea    ("ebp",&DWP($Hcub,"esp"));
-       &lea    ("edi",&DWP($res_x,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_x, res_x, Hcub);
-
-       &lea    ("esi",&DWP($U2,"esp"));
-       &lea    ("ebp",&DWP($res_x,"esp"));
-       &lea    ("edi",&DWP($res_y,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_y, U2, res_x);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($Hcub,"esp"));
-       &lea    ("ebp",&DWP($in1_y,"esp"));
-       &lea    ("edi",&DWP($S2,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(S2, Hcub, in1_y);
-
-       &mov    ("eax",&DWP(32*15+8,"esp"));    # OPENSSL_ia32cap_P copy
-       &lea    ("esi",&DWP($R,"esp"));
-       &lea    ("ebp",&DWP($res_y,"esp"));
-       &lea    ("edi",&DWP($res_y,"esp"));
-       &call   ("_ecp_nistz256_mul_mont");     # p256_mul_mont(res_y, res_y, R);
-
-       &lea    ("esi",&DWP($res_y,"esp"));
-       &lea    ("ebp",&DWP($S2,"esp"));
-       &lea    ("edi",&DWP($res_y,"esp"));
-       &call   ("_ecp_nistz256_sub");          # p256_sub(res_y, res_y, S2);
-
-       &mov    ("ebp",&DWP(32*15+0,"esp"));    # !in1infty
-       &mov    ("esi",&DWP(32*15+4,"esp"));    # !in2infty
-       &mov    ("edi",&wparam(0));
-       &mov    ("edx","ebp");
-       &not    ("ebp");
-       &and    ("edx","esi");
-       &and    ("ebp","esi");
-       &not    ("esi");
-
-       ########################################
-       # conditional moves
-    for($i=64;$i<96;$i+=4) {
-       my $one=@ONE_mont[($i-64)/4];
-
-       &mov    ("eax","edx");
-       &and    ("eax",&DWP($res_x+$i,"esp"));
-       &mov    ("ebx","ebp")                   if ($one && $one!=-1);
-       &and    ("ebx",$one)                    if ($one && $one!=-1);
-       &mov    ("ecx","esi");
-       &and    ("ecx",&DWP($in1_x+$i,"esp"));
-       &or     ("eax",$one==-1?"ebp":"ebx")    if ($one);
-       &or     ("eax","ecx");
-       &mov    (&DWP($i,"edi"),"eax");
-    }
-    for($i=0;$i<64;$i+=4) {
-       &mov    ("eax","edx");
-       &and    ("eax",&DWP($res_x+$i,"esp"));
-       &mov    ("ebx","ebp");
-       &and    ("ebx",&DWP($in2_x+$i,"esp"));
-       &mov    ("ecx","esi");
-       &and    ("ecx",&DWP($in1_x+$i,"esp"));
-       &or     ("eax","ebx");
-       &or     ("eax","ecx");
-       &mov    (&DWP($i,"edi"),"eax");
-    }
-       &stack_pop(8*15+3);
-} &function_end("ecp_nistz256_point_add_affine");
-
-&asm_finish();
-
-close STDOUT;
diff --git a/lib/libcrypto/ec/asm/ecp_nistz256-x86_64.pl b/lib/libcrypto/ec/asm/ecp_nistz256-x86_64.pl
deleted file mode 100644 (file)
index b772aae..0000000
+++ /dev/null
@@ -1,1971 +0,0 @@
-#!/usr/bin/env perl
-# $OpenBSD: ecp_nistz256-x86_64.pl,v 1.1 2016/11/04 17:33:20 miod Exp $
-#
-# Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
-#
-# Licensed under the OpenSSL license (the "License").  You may not use
-# this file except in compliance with the License.  You can obtain a copy
-# in the file LICENSE in the source distribution or at
-# https://www.openssl.org/source/license.html
-
-# Copyright (c) 2014, Intel Corporation.
-#
-# Permission to use, copy, modify, and/or distribute this software for any
-# purpose with or without fee is hereby granted, provided that the above
-# copyright notice and this permission notice appear in all copies.
-#
-# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
-# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
-# SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
-# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
-# OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
-# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-# Developers and authors:
-# Shay Gueron (1, 2), and Vlad Krasnov (1)
-# (1) Intel Corporation, Israel Development Center
-# (2) University of Haifa
-
-#  Reference:
-#  S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with
-#                           256 Bit Primes"
-
-# Further optimization by <appro@openssl.org>:
-#
-#              this/original   with/without -DECP_NISTZ256_ASM(*)
-# Opteron      +12-49%         +110-150%
-# Bulldozer    +14-45%         +175-210%
-# P4           +18-46%         n/a :-(
-# Westmere     +12-34%         +80-87%
-# Sandy Bridge +9-35%          +110-120%
-# Ivy Bridge   +9-35%          +110-125%
-# Haswell      +8-37%          +140-160%
-# Broadwell    +18-58%         +145-210%
-# Atom         +15-50%         +130-180%
-# VIA Nano     +43-160%        +300-480%
-#
-# (*)  "without -DECP_NISTZ256_ASM" refers to build with
-#      "enable-ec_nistp_64_gcc_128";
-#
-# Ranges denote minimum and maximum improvement coefficients depending
-# on benchmark. Lower coefficients are for ECDSA sign, relatively fastest
-# server-side operation. Keep in mind that +100% means 2x improvement.
-
-$flavour = shift;
-$output  = shift;
-if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
-
-$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
-die "can't locate x86_64-xlate.pl";
-
-open OUT,"| \"$^X\" \"$xlate\" $flavour \"$output\"";
-*STDOUT=*OUT;
-
-$code.=<<___;
-.text
-
-# The polynomial
-.align 64
-.Lpoly:
-.quad 0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001
-
-.LOne:
-.long 1,1,1,1,1,1,1,1
-.LTwo:
-.long 2,2,2,2,2,2,2,2
-.LThree:
-.long 3,3,3,3,3,3,3,3
-.LONE_mont:
-.quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe
-___
-
-{
-################################################################################
-# void ecp_nistz256_mul_by_2(uint64_t res[4], uint64_t a[4]);
-
-my ($a0,$a1,$a2,$a3)=map("%r$_",(8..11));
-my ($t0,$t1,$t2,$t3,$t4)=("%rax","%rdx","%rcx","%r12","%r13");
-my ($r_ptr,$a_ptr,$b_ptr)=("%rdi","%rsi","%rdx");
-
-$code.=<<___;
-
-.globl ecp_nistz256_mul_by_2
-.type  ecp_nistz256_mul_by_2,\@function,2
-.align 64
-ecp_nistz256_mul_by_2:
-       push    %r12
-       push    %r13
-
-       mov     8*0($a_ptr), $a0
-       mov     8*1($a_ptr), $a1
-       add     $a0, $a0                # a0:a3+a0:a3
-       mov     8*2($a_ptr), $a2
-       adc     $a1, $a1
-       mov     8*3($a_ptr), $a3
-       lea     .Lpoly(%rip), $a_ptr
-        mov    $a0, $t0
-       adc     $a2, $a2
-       adc     $a3, $a3
-        mov    $a1, $t1
-       sbb     $t4, $t4
-
-       sub     8*0($a_ptr), $a0
-        mov    $a2, $t2
-       sbb     8*1($a_ptr), $a1
-       sbb     8*2($a_ptr), $a2
-        mov    $a3, $t3
-       sbb     8*3($a_ptr), $a3
-       test    $t4, $t4
-
-       cmovz   $t0, $a0
-       cmovz   $t1, $a1
-       mov     $a0, 8*0($r_ptr)
-       cmovz   $t2, $a2
-       mov     $a1, 8*1($r_ptr)
-       cmovz   $t3, $a3
-       mov     $a2, 8*2($r_ptr)
-       mov     $a3, 8*3($r_ptr)
-
-       pop     %r13
-       pop     %r12
-       ret
-.size  ecp_nistz256_mul_by_2,.-ecp_nistz256_mul_by_2
-
-################################################################################
-# void ecp_nistz256_neg(uint64_t res[4], uint64_t a[4]);
-.globl ecp_nistz256_neg
-.type  ecp_nistz256_neg,\@function,2
-.align 32
-ecp_nistz256_neg:
-       push    %r12
-       push    %r13
-
-       xor     $a0, $a0
-       xor     $a1, $a1
-       xor     $a2, $a2
-       xor     $a3, $a3
-       xor     $t4, $t4
-
-       sub     8*0($a_ptr), $a0
-       sbb     8*1($a_ptr), $a1
-       sbb     8*2($a_ptr), $a2
-        mov    $a0, $t0
-       sbb     8*3($a_ptr), $a3
-       lea     .Lpoly(%rip), $a_ptr
-        mov    $a1, $t1
-       sbb     \$0, $t4
-
-       add     8*0($a_ptr), $a0
-        mov    $a2, $t2
-       adc     8*1($a_ptr), $a1
-       adc     8*2($a_ptr), $a2
-        mov    $a3, $t3
-       adc     8*3($a_ptr), $a3
-       test    $t4, $t4
-
-       cmovz   $t0, $a0
-       cmovz   $t1, $a1
-       mov     $a0, 8*0($r_ptr)
-       cmovz   $t2, $a2
-       mov     $a1, 8*1($r_ptr)
-       cmovz   $t3, $a3
-       mov     $a2, 8*2($r_ptr)
-       mov     $a3, 8*3($r_ptr)
-
-       pop %r13
-       pop %r12
-       ret
-.size  ecp_nistz256_neg,.-ecp_nistz256_neg
-___
-}
-{
-my ($r_ptr,$a_ptr,$b_org,$b_ptr)=("%rdi","%rsi","%rdx","%rbx");
-my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7)=map("%r$_",(8..15));
-my ($t0,$t1,$t2,$t3,$t4)=("%rcx","%rbp","%rbx","%rdx","%rax");
-my ($poly1,$poly3)=($acc6,$acc7);
-
-$code.=<<___;
-################################################################################
-# void ecp_nistz256_mul_mont(
-#   uint64_t res[4],
-#   uint64_t a[4],
-#   uint64_t b[4]);
-
-.globl ecp_nistz256_mul_mont
-.type  ecp_nistz256_mul_mont,\@function,3
-.align 32
-ecp_nistz256_mul_mont:
-.Lmul_mont:
-       push    %rbp
-       push    %rbx
-       push    %r12
-       push    %r13
-       push    %r14
-       push    %r15
-
-       mov     $b_org, $b_ptr
-       mov     8*0($b_org), %rax
-       mov     8*0($a_ptr), $acc1
-       mov     8*1($a_ptr), $acc2
-       mov     8*2($a_ptr), $acc3
-       mov     8*3($a_ptr), $acc4
-
-       call    __ecp_nistz256_mul_montq
-
-       pop     %r15
-       pop     %r14
-       pop     %r13
-       pop     %r12
-       pop     %rbx
-       pop     %rbp
-       ret
-.size  ecp_nistz256_mul_mont,.-ecp_nistz256_mul_mont
-
-.type  __ecp_nistz256_mul_montq,\@abi-omnipotent
-.align 32
-__ecp_nistz256_mul_montq:
-       ########################################################################
-       # Multiply a by b[0]
-       mov     %rax, $t1
-       mulq    $acc1
-       mov     .Lpoly+8*1(%rip),$poly1
-       mov     %rax, $acc0
-       mov     $t1, %rax
-       mov     %rdx, $acc1
-
-       mulq    $acc2
-       mov     .Lpoly+8*3(%rip),$poly3
-       add     %rax, $acc1
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $acc2
-
-       mulq    $acc3
-       add     %rax, $acc2
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $acc3
-
-       mulq    $acc4
-       add     %rax, $acc3
-        mov    $acc0, %rax
-       adc     \$0, %rdx
-       xor     $acc5, $acc5
-       mov     %rdx, $acc4
-
-       ########################################################################
-       # First reduction step
-       # Basically now we want to multiply acc[0] by p256,
-       # and add the result to the acc.
-       # Due to the special form of p256 we do some optimizations
-       #
-       # acc[0] x p256[0..1] = acc[0] x 2^96 - acc[0]
-       # then we add acc[0] and get acc[0] x 2^96
-
-       mov     $acc0, $t1
-       shl     \$32, $acc0
-       mulq    $poly3
-       shr     \$32, $t1
-       add     $acc0, $acc1            # +=acc[0]<<96
-       adc     $t1, $acc2
-       adc     %rax, $acc3
-        mov    8*1($b_ptr), %rax
-       adc     %rdx, $acc4
-       adc     \$0, $acc5
-       xor     $acc0, $acc0
-
-       ########################################################################
-       # Multiply by b[1]
-       mov     %rax, $t1
-       mulq    8*0($a_ptr)
-       add     %rax, $acc1
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    8*1($a_ptr)
-       add     $t0, $acc2
-       adc     \$0, %rdx
-       add     %rax, $acc2
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    8*2($a_ptr)
-       add     $t0, $acc3
-       adc     \$0, %rdx
-       add     %rax, $acc3
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    8*3($a_ptr)
-       add     $t0, $acc4
-       adc     \$0, %rdx
-       add     %rax, $acc4
-        mov    $acc1, %rax
-       adc     %rdx, $acc5
-       adc     \$0, $acc0
-
-       ########################################################################
-       # Second reduction step
-       mov     $acc1, $t1
-       shl     \$32, $acc1
-       mulq    $poly3
-       shr     \$32, $t1
-       add     $acc1, $acc2
-       adc     $t1, $acc3
-       adc     %rax, $acc4
-        mov    8*2($b_ptr), %rax
-       adc     %rdx, $acc5
-       adc     \$0, $acc0
-       xor     $acc1, $acc1
-
-       ########################################################################
-       # Multiply by b[2]
-       mov     %rax, $t1
-       mulq    8*0($a_ptr)
-       add     %rax, $acc2
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    8*1($a_ptr)
-       add     $t0, $acc3
-       adc     \$0, %rdx
-       add     %rax, $acc3
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    8*2($a_ptr)
-       add     $t0, $acc4
-       adc     \$0, %rdx
-       add     %rax, $acc4
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    8*3($a_ptr)
-       add     $t0, $acc5
-       adc     \$0, %rdx
-       add     %rax, $acc5
-        mov    $acc2, %rax
-       adc     %rdx, $acc0
-       adc     \$0, $acc1
-
-       ########################################################################
-       # Third reduction step
-       mov     $acc2, $t1
-       shl     \$32, $acc2
-       mulq    $poly3
-       shr     \$32, $t1
-       add     $acc2, $acc3
-       adc     $t1, $acc4
-       adc     %rax, $acc5
-        mov    8*3($b_ptr), %rax
-       adc     %rdx, $acc0
-       adc     \$0, $acc1
-       xor     $acc2, $acc2
-
-       ########################################################################
-       # Multiply by b[3]
-       mov     %rax, $t1
-       mulq    8*0($a_ptr)
-       add     %rax, $acc3
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    8*1($a_ptr)
-       add     $t0, $acc4
-       adc     \$0, %rdx
-       add     %rax, $acc4
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    8*2($a_ptr)
-       add     $t0, $acc5
-       adc     \$0, %rdx
-       add     %rax, $acc5
-       mov     $t1, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    8*3($a_ptr)
-       add     $t0, $acc0
-       adc     \$0, %rdx
-       add     %rax, $acc0
-        mov    $acc3, %rax
-       adc     %rdx, $acc1
-       adc     \$0, $acc2
-
-       ########################################################################
-       # Final reduction step
-       mov     $acc3, $t1
-       shl     \$32, $acc3
-       mulq    $poly3
-       shr     \$32, $t1
-       add     $acc3, $acc4
-       adc     $t1, $acc5
-        mov    $acc4, $t0
-       adc     %rax, $acc0
-       adc     %rdx, $acc1
-        mov    $acc5, $t1
-       adc     \$0, $acc2
-
-       ########################################################################
-       # Branch-less conditional subtraction of P
-       sub     \$-1, $acc4             # .Lpoly[0]
-        mov    $acc0, $t2
-       sbb     $poly1, $acc5           # .Lpoly[1]
-       sbb     \$0, $acc0              # .Lpoly[2]
-        mov    $acc1, $t3
-       sbb     $poly3, $acc1           # .Lpoly[3]
-       sbb     \$0, $acc2
-
-       cmovc   $t0, $acc4
-       cmovc   $t1, $acc5
-       mov     $acc4, 8*0($r_ptr)
-       cmovc   $t2, $acc0
-       mov     $acc5, 8*1($r_ptr)
-       cmovc   $t3, $acc1
-       mov     $acc0, 8*2($r_ptr)
-       mov     $acc1, 8*3($r_ptr)
-
-       ret
-.size  __ecp_nistz256_mul_montq,.-__ecp_nistz256_mul_montq
-
-################################################################################
-# void ecp_nistz256_sqr_mont(
-#   uint64_t res[4],
-#   uint64_t a[4]);
-
-# we optimize the square according to S.Gueron and V.Krasnov,
-# "Speeding up Big-Number Squaring"
-.globl ecp_nistz256_sqr_mont
-.type  ecp_nistz256_sqr_mont,\@function,2
-.align 32
-ecp_nistz256_sqr_mont:
-       push    %rbp
-       push    %rbx
-       push    %r12
-       push    %r13
-       push    %r14
-       push    %r15
-
-       mov     8*0($a_ptr), %rax
-       mov     8*1($a_ptr), $acc6
-       mov     8*2($a_ptr), $acc7
-       mov     8*3($a_ptr), $acc0
-
-       call    __ecp_nistz256_sqr_montq
-
-       pop     %r15
-       pop     %r14
-       pop     %r13
-       pop     %r12
-       pop     %rbx
-       pop     %rbp
-       ret
-.size  ecp_nistz256_sqr_mont,.-ecp_nistz256_sqr_mont
-
-.type  __ecp_nistz256_sqr_montq,\@abi-omnipotent
-.align 32
-__ecp_nistz256_sqr_montq:
-       mov     %rax, $acc5
-       mulq    $acc6                   # a[1]*a[0]
-       mov     %rax, $acc1
-       mov     $acc7, %rax
-       mov     %rdx, $acc2
-
-       mulq    $acc5                   # a[0]*a[2]
-       add     %rax, $acc2
-       mov     $acc0, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $acc3
-
-       mulq    $acc5                   # a[0]*a[3]
-       add     %rax, $acc3
-        mov    $acc7, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $acc4
-
-       #################################
-       mulq    $acc6                   # a[1]*a[2]
-       add     %rax, $acc3
-       mov     $acc0, %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t1
-
-       mulq    $acc6                   # a[1]*a[3]
-       add     %rax, $acc4
-        mov    $acc0, %rax
-       adc     \$0, %rdx
-       add     $t1, $acc4
-       mov     %rdx, $acc5
-       adc     \$0, $acc5
-
-       #################################
-       mulq    $acc7                   # a[2]*a[3]
-       xor     $acc7, $acc7
-       add     %rax, $acc5
-        mov    8*0($a_ptr), %rax
-       mov     %rdx, $acc6
-       adc     \$0, $acc6
-
-       add     $acc1, $acc1            # acc1:6<<1
-       adc     $acc2, $acc2
-       adc     $acc3, $acc3
-       adc     $acc4, $acc4
-       adc     $acc5, $acc5
-       adc     $acc6, $acc6
-       adc     \$0, $acc7
-
-       mulq    %rax
-       mov     %rax, $acc0
-       mov     8*1($a_ptr), %rax
-       mov     %rdx, $t0
-
-       mulq    %rax
-       add     $t0, $acc1
-       adc     %rax, $acc2
-       mov     8*2($a_ptr), %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    %rax
-       add     $t0, $acc3
-       adc     %rax, $acc4
-       mov     8*3($a_ptr), %rax
-       adc     \$0, %rdx
-       mov     %rdx, $t0
-
-       mulq    %rax
-       add     $t0, $acc5
-       adc     %rax, $acc6
-        mov    $acc0, %rax
-       adc     %rdx, $acc7
-
-       mov     .Lpoly+8*1(%rip), $a_ptr
-       mov     .Lpoly+8*3(%rip), $t1
-
-       ##########################################
-       # Now the reduction
-       # First iteration
-       mov     $acc0, $t0
-       shl     \$32, $acc0
-       mulq    $t1
-       shr     \$32, $t0
-       add     $acc0, $acc1            # +=acc[0]<<96
-       adc     $t0, $acc2
-       adc     %rax, $acc3
-        mov    $acc1, %rax
-       adc     \$0, %rdx
-
-       ##########################################
-       # Second iteration
-       mov     $acc1, $t0
-       shl     \$32, $acc1
-       mov     %rdx, $acc0
-       mulq    $t1
-       shr     \$32, $t0
-       add     $acc1, $acc2
-       adc     $t0, $acc3
-       adc     %rax, $acc0
-        mov    $acc2, %rax
-       adc     \$0, %rdx
-
-       ##########################################
-       # Third iteration
-       mov     $acc2, $t0
-       shl     \$32, $acc2
-       mov     %rdx, $acc1
-       mulq    $t1
-       shr     \$32, $t0
-       add     $acc2, $acc3
-       adc     $t0, $acc0
-       adc     %rax, $acc1
-        mov    $acc3, %rax
-       adc     \$0, %rdx
-
-       ###########################################
-       # Last iteration
-       mov     $acc3, $t0
-       shl     \$32, $acc3
-       mov     %rdx, $acc2
-       mulq    $t1
-       shr     \$32, $t0
-       add     $acc3, $acc0
-       adc     $t0, $acc1
-       adc     %rax, $acc2
-       adc     \$0, %rdx
-       xor     $acc3, $acc3
-
-       ############################################
-       # Add the rest of the acc
-       add     $acc0, $acc4
-       adc     $acc1, $acc5
-        mov    $acc4, $acc0
-       adc     $acc2, $acc6
-       adc     %rdx, $acc7
-        mov    $acc5, $acc1
-       adc     \$0, $acc3
-
-       sub     \$-1, $acc4             # .Lpoly[0]
-        mov    $acc6, $acc2
-       sbb     $a_ptr, $acc5           # .Lpoly[1]
-       sbb     \$0, $acc6              # .Lpoly[2]
-        mov    $acc7, $t0
-       sbb     $t1, $acc7              # .Lpoly[3]
-       sbb     \$0, $acc3
-
-       cmovc   $acc0, $acc4
-       cmovc   $acc1, $acc5
-       mov     $acc4, 8*0($r_ptr)
-       cmovc   $acc2, $acc6
-       mov     $acc5, 8*1($r_ptr)
-       cmovc   $t0, $acc7
-       mov     $acc6, 8*2($r_ptr)
-       mov     $acc7, 8*3($r_ptr)
-
-       ret
-.size  __ecp_nistz256_sqr_montq,.-__ecp_nistz256_sqr_montq
-___
-
-}
-{
-my ($r_ptr,$in_ptr)=("%rdi","%rsi");
-my ($acc0,$acc1,$acc2,$acc3)=map("%r$_",(8..11));
-my ($t0,$t1,$t2)=("%rcx","%r12","%r13");
-
-$code.=<<___;
-################################################################################
-# void ecp_nistz256_from_mont(
-#   uint64_t res[4],
-#   uint64_t in[4]);
-# This one performs Montgomery multiplication by 1, so we only need the reduction
-
-.globl ecp_nistz256_from_mont
-.type  ecp_nistz256_from_mont,\@function,2
-.align 32
-ecp_nistz256_from_mont:
-       push    %r12
-       push    %r13
-
-       mov     8*0($in_ptr), %rax
-       mov     .Lpoly+8*3(%rip), $t2
-       mov     8*1($in_ptr), $acc1
-       mov     8*2($in_ptr), $acc2
-       mov     8*3($in_ptr), $acc3
-       mov     %rax, $acc0
-       mov     .Lpoly+8*1(%rip), $t1
-
-       #########################################
-       # First iteration
-       mov     %rax, $t0
-       shl     \$32, $acc0
-       mulq    $t2
-       shr     \$32, $t0
-       add     $acc0, $acc1
-       adc     $t0, $acc2
-       adc     %rax, $acc3
-        mov    $acc1, %rax
-       adc     \$0, %rdx
-
-       #########################################
-       # Second iteration
-       mov     $acc1, $t0
-       shl     \$32, $acc1
-       mov     %rdx, $acc0
-       mulq    $t2
-       shr     \$32, $t0
-       add     $acc1, $acc2
-       adc     $t0, $acc3
-       adc     %rax, $acc0
-        mov    $acc2, %rax
-       adc     \$0, %rdx
-
-       ##########################################
-       # Third iteration
-       mov     $acc2, $t0
-       shl     \$32, $acc2
-       mov     %rdx, $acc1
-       mulq    $t2
-       shr     \$32, $t0
-       add     $acc2, $acc3
-       adc     $t0, $acc0
-       adc     %rax, $acc1
-        mov    $acc3, %rax
-       adc     \$0, %rdx
-
-       ###########################################
-       # Last iteration
-       mov     $acc3, $t0
-       shl     \$32, $acc3
-       mov     %rdx, $acc2
-       mulq    $t2
-       shr     \$32, $t0
-       add     $acc3, $acc0
-       adc     $t0, $acc1
-        mov    $acc0, $t0
-       adc     %rax, $acc2
-        mov    $acc1, $in_ptr
-       adc     \$0, %rdx
-
-       ###########################################
-       # Branch-less conditional subtraction
-       sub     \$-1, $acc0
-        mov    $acc2, %rax
-       sbb     $t1, $acc1
-       sbb     \$0, $acc2
-        mov    %rdx, $acc3
-       sbb     $t2, %rdx
-       sbb     $t2, $t2
-
-       cmovnz  $t0, $acc0
-       cmovnz  $in_ptr, $acc1
-       mov     $acc0, 8*0($r_ptr)
-       cmovnz  %rax, $acc2
-       mov     $acc1, 8*1($r_ptr)
-       cmovz   %rdx, $acc3
-       mov     $acc2, 8*2($r_ptr)
-       mov     $acc3, 8*3($r_ptr)
-
-       pop     %r13
-       pop     %r12
-       ret
-.size  ecp_nistz256_from_mont,.-ecp_nistz256_from_mont
-___
-}
-{
-my ($val,$in_t,$index)=$win64?("%rcx","%rdx","%r8d"):("%rdi","%rsi","%edx");
-my ($ONE,$INDEX,$Ra,$Rb,$Rc,$Rd,$Re,$Rf)=map("%xmm$_",(0..7));
-my ($M0,$T0a,$T0b,$T0c,$T0d,$T0e,$T0f,$TMP0)=map("%xmm$_",(8..15));
-my ($M1,$T2a,$T2b,$TMP2,$M2,$T2a,$T2b,$TMP2)=map("%xmm$_",(8..15));
-
-$code.=<<___;
-################################################################################
-# void ecp_nistz256_select_w5(uint64_t *val, uint64_t *in_t, int index);
-.globl ecp_nistz256_select_w5
-.type  ecp_nistz256_select_w5,\@abi-omnipotent
-.align 32
-ecp_nistz256_select_w5:
-___
-$code.=<<___   if ($win64);
-       lea     -0x88(%rsp), %rax
-.LSEH_begin_ecp_nistz256_select_w5:
-       .byte   0x48,0x8d,0x60,0xe0             #lea    -0x20(%rax), %rsp
-       .byte   0x0f,0x29,0x70,0xe0             #movaps %xmm6, -0x20(%rax)
-       .byte   0x0f,0x29,0x78,0xf0             #movaps %xmm7, -0x10(%rax)
-       .byte   0x44,0x0f,0x29,0x00             #movaps %xmm8, 0(%rax)
-       .byte   0x44,0x0f,0x29,0x48,0x10        #movaps %xmm9, 0x10(%rax)
-       .byte   0x44,0x0f,0x29,0x50,0x20        #movaps %xmm10, 0x20(%rax)
-       .byte   0x44,0x0f,0x29,0x58,0x30        #movaps %xmm11, 0x30(%rax)
-       .byte   0x44,0x0f,0x29,0x60,0x40        #movaps %xmm12, 0x40(%rax)
-       .byte   0x44,0x0f,0x29,0x68,0x50        #movaps %xmm13, 0x50(%rax)
-       .byte   0x44,0x0f,0x29,0x70,0x60        #movaps %xmm14, 0x60(%rax)
-       .byte   0x44,0x0f,0x29,0x78,0x70        #movaps %xmm15, 0x70(%rax)
-___
-$code.=<<___;
-       movdqa  .LOne(%rip), $ONE
-       movd    $index, $INDEX
-
-       pxor    $Ra, $Ra
-       pxor    $Rb, $Rb
-       pxor    $Rc, $Rc
-       pxor    $Rd, $Rd
-       pxor    $Re, $Re
-       pxor    $Rf, $Rf
-
-       movdqa  $ONE, $M0
-       pshufd  \$0, $INDEX, $INDEX
-
-       mov     \$16, %rax
-.Lselect_loop_sse_w5:
-
-       movdqa  $M0, $TMP0
-       paddd   $ONE, $M0
-       pcmpeqd $INDEX, $TMP0
-
-       movdqa  16*0($in_t), $T0a
-       movdqa  16*1($in_t), $T0b
-       movdqa  16*2($in_t), $T0c
-       movdqa  16*3($in_t), $T0d
-       movdqa  16*4($in_t), $T0e
-       movdqa  16*5($in_t), $T0f
-       lea 16*6($in_t), $in_t
-
-       pand    $TMP0, $T0a
-       pand    $TMP0, $T0b
-       por     $T0a, $Ra
-       pand    $TMP0, $T0c
-       por     $T0b, $Rb
-       pand    $TMP0, $T0d
-       por     $T0c, $Rc
-       pand    $TMP0, $T0e
-       por     $T0d, $Rd
-       pand    $TMP0, $T0f
-       por     $T0e, $Re
-       por     $T0f, $Rf
-
-       dec     %rax
-       jnz     .Lselect_loop_sse_w5
-
-       movdqu  $Ra, 16*0($val)
-       movdqu  $Rb, 16*1($val)
-       movdqu  $Rc, 16*2($val)
-       movdqu  $Rd, 16*3($val)
-       movdqu  $Re, 16*4($val)
-       movdqu  $Rf, 16*5($val)
-___
-$code.=<<___   if ($win64);
-       movaps  (%rsp), %xmm6
-       movaps  0x10(%rsp), %xmm7
-       movaps  0x20(%rsp), %xmm8
-       movaps  0x30(%rsp), %xmm9
-       movaps  0x40(%rsp), %xmm10
-       movaps  0x50(%rsp), %xmm11
-       movaps  0x60(%rsp), %xmm12
-       movaps  0x70(%rsp), %xmm13
-       movaps  0x80(%rsp), %xmm14
-       movaps  0x90(%rsp), %xmm15
-       lea     0xa8(%rsp), %rsp
-.LSEH_end_ecp_nistz256_select_w5:
-___
-$code.=<<___;
-       ret
-.size  ecp_nistz256_select_w5,.-ecp_nistz256_select_w5
-
-################################################################################
-# void ecp_nistz256_select_w7(uint64_t *val, uint64_t *in_t, int index);
-.globl ecp_nistz256_select_w7
-.type  ecp_nistz256_select_w7,\@abi-omnipotent
-.align 32
-ecp_nistz256_select_w7:
-___
-$code.=<<___   if ($win64);
-       lea     -0x88(%rsp), %rax
-.LSEH_begin_ecp_nistz256_select_w7:
-       .byte   0x48,0x8d,0x60,0xe0             #lea    -0x20(%rax), %rsp
-       .byte   0x0f,0x29,0x70,0xe0             #movaps %xmm6, -0x20(%rax)
-       .byte   0x0f,0x29,0x78,0xf0             #movaps %xmm7, -0x10(%rax)
-       .byte   0x44,0x0f,0x29,0x00             #movaps %xmm8, 0(%rax)
-       .byte   0x44,0x0f,0x29,0x48,0x10        #movaps %xmm9, 0x10(%rax)
-       .byte   0x44,0x0f,0x29,0x50,0x20        #movaps %xmm10, 0x20(%rax)
-       .byte   0x44,0x0f,0x29,0x58,0x30        #movaps %xmm11, 0x30(%rax)
-       .byte   0x44,0x0f,0x29,0x60,0x40        #movaps %xmm12, 0x40(%rax)
-       .byte   0x44,0x0f,0x29,0x68,0x50        #movaps %xmm13, 0x50(%rax)
-       .byte   0x44,0x0f,0x29,0x70,0x60        #movaps %xmm14, 0x60(%rax)
-       .byte   0x44,0x0f,0x29,0x78,0x70        #movaps %xmm15, 0x70(%rax)
-___
-$code.=<<___;
-       movdqa  .LOne(%rip), $M0
-       movd    $index, $INDEX
-
-       pxor    $Ra, $Ra
-       pxor    $Rb, $Rb
-       pxor    $Rc, $Rc
-       pxor    $Rd, $Rd
-
-       movdqa  $M0, $ONE
-       pshufd  \$0, $INDEX, $INDEX
-       mov     \$64, %rax
-
-.Lselect_loop_sse_w7:
-       movdqa  $M0, $TMP0
-       paddd   $ONE, $M0
-       movdqa  16*0($in_t), $T0a
-       movdqa  16*1($in_t), $T0b
-       pcmpeqd $INDEX, $TMP0
-       movdqa  16*2($in_t), $T0c
-       movdqa  16*3($in_t), $T0d
-       lea     16*4($in_t), $in_t
-
-       pand    $TMP0, $T0a
-       pand    $TMP0, $T0b
-       por     $T0a, $Ra
-       pand    $TMP0, $T0c
-       por     $T0b, $Rb
-       pand    $TMP0, $T0d
-       por     $T0c, $Rc
-       prefetcht0      255($in_t)
-       por     $T0d, $Rd
-
-       dec     %rax
-       jnz     .Lselect_loop_sse_w7
-
-       movdqu  $Ra, 16*0($val)
-       movdqu  $Rb, 16*1($val)
-       movdqu  $Rc, 16*2($val)
-       movdqu  $Rd, 16*3($val)
-___
-$code.=<<___   if ($win64);
-       movaps  (%rsp), %xmm6
-       movaps  0x10(%rsp), %xmm7
-       movaps  0x20(%rsp), %xmm8
-       movaps  0x30(%rsp), %xmm9
-       movaps  0x40(%rsp), %xmm10
-       movaps  0x50(%rsp), %xmm11
-       movaps  0x60(%rsp), %xmm12
-       movaps  0x70(%rsp), %xmm13
-       movaps  0x80(%rsp), %xmm14
-       movaps  0x90(%rsp), %xmm15
-       lea     0xa8(%rsp), %rsp
-.LSEH_end_ecp_nistz256_select_w7:
-___
-$code.=<<___;
-       ret
-.size  ecp_nistz256_select_w7,.-ecp_nistz256_select_w7
-___
-}
-{{{
-########################################################################
-# This block implements higher level point_double, point_add and
-# point_add_affine. The key to performance in this case is to allow
-# out-of-order execution logic to overlap computations from next step
-# with tail processing from current step. By using tailored calling
-# sequence we minimize inter-step overhead to give processor better
-# shot at overlapping operations...
-#
-# You will notice that input data is copied to stack. Trouble is that
-# there are no registers to spare for holding original pointers and
-# reloading them, pointers, would create undesired dependencies on
-# effective addresses calculation paths. In other words it's too done
-# to favour out-of-order execution logic.
-#                                              <appro@openssl.org>
-
-my ($r_ptr,$a_ptr,$b_org,$b_ptr)=("%rdi","%rsi","%rdx","%rbx");
-my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7)=map("%r$_",(8..15));
-my ($t0,$t1,$t2,$t3,$t4)=("%rax","%rbp","%rcx",$acc4,$acc4);
-my ($poly1,$poly3)=($acc6,$acc7);
-
-sub load_for_mul () {
-my ($a,$b,$src0) = @_;
-my $bias = $src0 eq "%rax" ? 0 : -128;
-
-"      mov     $b, $src0
-       lea     $b, $b_ptr
-       mov     8*0+$a, $acc1
-       mov     8*1+$a, $acc2
-       lea     $bias+$a, $a_ptr
-       mov     8*2+$a, $acc3
-       mov     8*3+$a, $acc4"
-}
-
-sub load_for_sqr () {
-my ($a,$src0) = @_;
-my $bias = $src0 eq "%rax" ? 0 : -128;
-
-"      mov     8*0+$a, $src0
-       mov     8*1+$a, $acc6
-       lea     $bias+$a, $a_ptr
-       mov     8*2+$a, $acc7
-       mov     8*3+$a, $acc0"
-}
-
-                                                                       {
-########################################################################
-# operate in 4-5-0-1 "name space" that matches multiplication output
-#
-my ($a0,$a1,$a2,$a3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3);
-
-$code.=<<___;
-.type  __ecp_nistz256_add_toq,\@abi-omnipotent
-.align 32
-__ecp_nistz256_add_toq:
-       add     8*0($b_ptr), $a0
-       adc     8*1($b_ptr), $a1
-        mov    $a0, $t0
-       adc     8*2($b_ptr), $a2
-       adc     8*3($b_ptr), $a3
-        mov    $a1, $t1
-       sbb     $t4, $t4
-
-       sub     \$-1, $a0
-        mov    $a2, $t2
-       sbb     $poly1, $a1
-       sbb     \$0, $a2
-        mov    $a3, $t3
-       sbb     $poly3, $a3
-       test    $t4, $t4
-
-       cmovz   $t0, $a0
-       cmovz   $t1, $a1
-       mov     $a0, 8*0($r_ptr)
-       cmovz   $t2, $a2
-       mov     $a1, 8*1($r_ptr)
-       cmovz   $t3, $a3
-       mov     $a2, 8*2($r_ptr)
-       mov     $a3, 8*3($r_ptr)
-
-       ret
-.size  __ecp_nistz256_add_toq,.-__ecp_nistz256_add_toq
-
-.type  __ecp_nistz256_sub_fromq,\@abi-omnipotent
-.align 32
-__ecp_nistz256_sub_fromq:
-       sub     8*0($b_ptr), $a0
-       sbb     8*1($b_ptr), $a1
-        mov    $a0, $t0
-       sbb     8*2($b_ptr), $a2
-       sbb     8*3($b_ptr), $a3
-        mov    $a1, $t1
-       sbb     $t4, $t4
-
-       add     \$-1, $a0
-        mov    $a2, $t2
-       adc     $poly1, $a1
-       adc     \$0, $a2
-        mov    $a3, $t3
-       adc     $poly3, $a3
-       test    $t4, $t4
-
-       cmovz   $t0, $a0
-       cmovz   $t1, $a1
-       mov     $a0, 8*0($r_ptr)
-       cmovz   $t2, $a2
-       mov     $a1, 8*1($r_ptr)
-       cmovz   $t3, $a3
-       mov     $a2, 8*2($r_ptr)
-       mov     $a3, 8*3($r_ptr)
-
-       ret
-.size  __ecp_nistz256_sub_fromq,.-__ecp_nistz256_sub_fromq
-
-.type  __ecp_nistz256_subq,\@abi-omnipotent
-.align 32
-__ecp_nistz256_subq:
-       sub     $a0, $t0
-       sbb     $a1, $t1
-        mov    $t0, $a0
-       sbb     $a2, $t2
-       sbb     $a3, $t3
-        mov    $t1, $a1
-       sbb     $t4, $t4
-
-       add     \$-1, $t0
-        mov    $t2, $a2
-       adc     $poly1, $t1
-       adc     \$0, $t2
-        mov    $t3, $a3
-       adc     $poly3, $t3
-       test    $t4, $t4
-
-       cmovnz  $t0, $a0
-       cmovnz  $t1, $a1
-       cmovnz  $t2, $a2
-       cmovnz  $t3, $a3
-
-       ret
-.size  __ecp_nistz256_subq,.-__ecp_nistz256_subq
-
-.type  __ecp_nistz256_mul_by_2q,\@abi-omnipotent
-.align 32
-__ecp_nistz256_mul_by_2q:
-       add     $a0, $a0                # a0:a3+a0:a3
-       adc     $a1, $a1
-        mov    $a0, $t0
-       adc     $a2, $a2
-       adc     $a3, $a3
-        mov    $a1, $t1
-       sbb     $t4, $t4
-
-       sub     \$-1, $a0
-        mov    $a2, $t2
-       sbb     $poly1, $a1
-       sbb     \$0, $a2
-        mov    $a3, $t3
-       sbb     $poly3, $a3
-       test    $t4, $t4
-
-       cmovz   $t0, $a0
-       cmovz   $t1, $a1
-       mov     $a0, 8*0($r_ptr)
-       cmovz   $t2, $a2
-       mov     $a1, 8*1($r_ptr)
-       cmovz   $t3, $a3
-       mov     $a2, 8*2($r_ptr)
-       mov     $a3, 8*3($r_ptr)
-
-       ret
-.size  __ecp_nistz256_mul_by_2q,.-__ecp_nistz256_mul_by_2q
-___
-                                                                       }
-sub gen_double () {
-    my $x = shift;
-    my ($src0,$sfx,$bias);
-    my ($S,$M,$Zsqr,$in_x,$tmp0)=map(32*$_,(0..4));
-
-    if ($x ne "x") {
-       $src0 = "%rax";
-       $sfx  = "";
-       $bias = 0;
-
-$code.=<<___;
-.globl ecp_nistz256_point_double
-.type  ecp_nistz256_point_double,\@function,2
-.align 32
-ecp_nistz256_point_double:
-___
-    } else {
-       $src0 = "%rdx";
-       $sfx  = "x";
-       $bias = 128;
-
-$code.=<<___;
-.type  ecp_nistz256_point_doublex,\@function,2
-.align 32
-ecp_nistz256_point_doublex:
-.Lpoint_doublex:
-___
-    }
-$code.=<<___;
-       push    %rbp
-       push    %rbx
-       push    %r12
-       push    %r13
-       push    %r14
-       push    %r15
-       sub     \$32*5+8, %rsp
-
-.Lpoint_double_shortcut$x:
-       movdqu  0x00($a_ptr), %xmm0             # copy  *(P256_POINT *)$a_ptr.x
-       mov     $a_ptr, $b_ptr                  # backup copy
-       movdqu  0x10($a_ptr), %xmm1
-        mov    0x20+8*0($a_ptr), $acc4         # load in_y in "5-4-0-1" order
-        mov    0x20+8*1($a_ptr), $acc5
-        mov    0x20+8*2($a_ptr), $acc0
-        mov    0x20+8*3($a_ptr), $acc1
-        mov    .Lpoly+8*1(%rip), $poly1
-        mov    .Lpoly+8*3(%rip), $poly3
-       movdqa  %xmm0, $in_x(%rsp)
-       movdqa  %xmm1, $in_x+0x10(%rsp)
-       lea     0x20($r_ptr), $acc2
-       lea     0x40($r_ptr), $acc3
-       movq    $r_ptr, %xmm0
-       movq    $acc2, %xmm1
-       movq    $acc3, %xmm2
-
-       lea     $S(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_by_2$x       # p256_mul_by_2(S, in_y);
-
-       mov     0x40+8*0($a_ptr), $src0
-       mov     0x40+8*1($a_ptr), $acc6
-       mov     0x40+8*2($a_ptr), $acc7
-       mov     0x40+8*3($a_ptr), $acc0
-       lea     0x40-$bias($a_ptr), $a_ptr
-       lea     $Zsqr(%rsp), $r_ptr
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(Zsqr, in_z);
-
-       `&load_for_sqr("$S(%rsp)", "$src0")`
-       lea     $S(%rsp), $r_ptr
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(S, S);
-
-       mov     0x20($b_ptr), $src0             # $b_ptr is still valid
-       mov     0x40+8*0($b_ptr), $acc1
-       mov     0x40+8*1($b_ptr), $acc2
-       mov     0x40+8*2($b_ptr), $acc3
-       mov     0x40+8*3($b_ptr), $acc4
-       lea     0x40-$bias($b_ptr), $a_ptr
-       lea     0x20($b_ptr), $b_ptr
-       movq    %xmm2, $r_ptr
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(res_z, in_z, in_y);
-       call    __ecp_nistz256_mul_by_2$x       # p256_mul_by_2(res_z, res_z);
-
-       mov     $in_x+8*0(%rsp), $acc4          # "5-4-0-1" order
-       mov     $in_x+8*1(%rsp), $acc5
-       lea     $Zsqr(%rsp), $b_ptr
-       mov     $in_x+8*2(%rsp), $acc0
-       mov     $in_x+8*3(%rsp), $acc1
-       lea     $M(%rsp), $r_ptr
-       call    __ecp_nistz256_add_to$x         # p256_add(M, in_x, Zsqr);
-
-       mov     $in_x+8*0(%rsp), $acc4          # "5-4-0-1" order
-       mov     $in_x+8*1(%rsp), $acc5
-       lea     $Zsqr(%rsp), $b_ptr
-       mov     $in_x+8*2(%rsp), $acc0
-       mov     $in_x+8*3(%rsp), $acc1
-       lea     $Zsqr(%rsp), $r_ptr
-       call    __ecp_nistz256_sub_from$x       # p256_sub(Zsqr, in_x, Zsqr);
-
-       `&load_for_sqr("$S(%rsp)", "$src0")`
-       movq    %xmm1, $r_ptr
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(res_y, S);
-___
-{
-######## ecp_nistz256_div_by_2(res_y, res_y); ##########################
-# operate in 4-5-6-7 "name space" that matches squaring output
-#
-my ($poly1,$poly3)=($a_ptr,$t1);
-my ($a0,$a1,$a2,$a3,$t3,$t4,$t1)=($acc4,$acc5,$acc6,$acc7,$acc0,$acc1,$acc2);
-
-$code.=<<___;
-       xor     $t4, $t4
-       mov     $a0, $t0
-       add     \$-1, $a0
-       mov     $a1, $t1
-       adc     $poly1, $a1
-       mov     $a2, $t2
-       adc     \$0, $a2
-       mov     $a3, $t3
-       adc     $poly3, $a3
-       adc     \$0, $t4
-       xor     $a_ptr, $a_ptr          # borrow $a_ptr
-       test    \$1, $t0
-
-       cmovz   $t0, $a0
-       cmovz   $t1, $a1
-       cmovz   $t2, $a2
-       cmovz   $t3, $a3
-       cmovz   $a_ptr, $t4
-
-       mov     $a1, $t0                # a0:a3>>1
-       shr     \$1, $a0
-       shl     \$63, $t0
-       mov     $a2, $t1
-       shr     \$1, $a1
-       or      $t0, $a0
-       shl     \$63, $t1
-       mov     $a3, $t2
-       shr     \$1, $a2
-       or      $t1, $a1
-       shl     \$63, $t2
-       mov     $a0, 8*0($r_ptr)
-       shr     \$1, $a3
-       mov     $a1, 8*1($r_ptr)
-       shl     \$63, $t4
-       or      $t2, $a2
-       or      $t4, $a3
-       mov     $a2, 8*2($r_ptr)
-       mov     $a3, 8*3($r_ptr)
-___
-}
-$code.=<<___;
-       `&load_for_mul("$M(%rsp)", "$Zsqr(%rsp)", "$src0")`
-       lea     $M(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(M, M, Zsqr);
-
-       lea     $tmp0(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_by_2$x
-
-       lea     $M(%rsp), $b_ptr
-       lea     $M(%rsp), $r_ptr
-       call    __ecp_nistz256_add_to$x         # p256_mul_by_3(M, M);
-
-       `&load_for_mul("$S(%rsp)", "$in_x(%rsp)", "$src0")`
-       lea     $S(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S, S, in_x);
-
-       lea     $tmp0(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_by_2$x       # p256_mul_by_2(tmp0, S);
-
-       `&load_for_sqr("$M(%rsp)", "$src0")`
-       movq    %xmm0, $r_ptr
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(res_x, M);
-
-       lea     $tmp0(%rsp), $b_ptr
-       mov     $acc6, $acc0                    # harmonize sqr output and sub input
-       mov     $acc7, $acc1
-       mov     $a_ptr, $poly1
-       mov     $t1, $poly3
-       call    __ecp_nistz256_sub_from$x       # p256_sub(res_x, res_x, tmp0);
-
-       mov     $S+8*0(%rsp), $t0
-       mov     $S+8*1(%rsp), $t1
-       mov     $S+8*2(%rsp), $t2
-       mov     $S+8*3(%rsp), $acc2             # "4-5-0-1" order
-       lea     $S(%rsp), $r_ptr
-       call    __ecp_nistz256_sub$x            # p256_sub(S, S, res_x);
-
-       mov     $M(%rsp), $src0
-       lea     $M(%rsp), $b_ptr
-       mov     $acc4, $acc6                    # harmonize sub output and mul input
-       xor     %ecx, %ecx
-       mov     $acc4, $S+8*0(%rsp)             # have to save:-(
-       mov     $acc5, $acc2
-       mov     $acc5, $S+8*1(%rsp)
-       cmovz   $acc0, $acc3
-       mov     $acc0, $S+8*2(%rsp)
-       lea     $S-$bias(%rsp), $a_ptr
-       cmovz   $acc1, $acc4
-       mov     $acc1, $S+8*3(%rsp)
-       mov     $acc6, $acc1
-       lea     $S(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S, S, M);
-
-       movq    %xmm1, $b_ptr
-       movq    %xmm1, $r_ptr
-       call    __ecp_nistz256_sub_from$x       # p256_sub(res_y, S, res_y);
-
-       add     \$32*5+8, %rsp
-       pop     %r15
-       pop     %r14
-       pop     %r13
-       pop     %r12
-       pop     %rbx
-       pop     %rbp
-       ret
-.size  ecp_nistz256_point_double$sfx,.-ecp_nistz256_point_double$sfx
-___
-}
-&gen_double("q");
-
-sub gen_add () {
-    my $x = shift;
-    my ($src0,$sfx,$bias);
-    my ($H,$Hsqr,$R,$Rsqr,$Hcub,
-       $U1,$U2,$S1,$S2,
-       $res_x,$res_y,$res_z,
-       $in1_x,$in1_y,$in1_z,
-       $in2_x,$in2_y,$in2_z)=map(32*$_,(0..17));
-    my ($Z1sqr, $Z2sqr) = ($Hsqr, $Rsqr);
-
-    if ($x ne "x") {
-       $src0 = "%rax";
-       $sfx  = "";
-       $bias = 0;
-
-$code.=<<___;
-.globl ecp_nistz256_point_add
-.type  ecp_nistz256_point_add,\@function,3
-.align 32
-ecp_nistz256_point_add:
-___
-    } else {
-       $src0 = "%rdx";
-       $sfx  = "x";
-       $bias = 128;
-    }
-$code.=<<___;
-       push    %rbp
-       push    %rbx
-       push    %r12
-       push    %r13
-       push    %r14
-       push    %r15
-       sub     \$32*18+8, %rsp
-
-       movdqu  0x00($a_ptr), %xmm0             # copy  *(P256_POINT *)$a_ptr
-       movdqu  0x10($a_ptr), %xmm1
-       movdqu  0x20($a_ptr), %xmm2
-       movdqu  0x30($a_ptr), %xmm3
-       movdqu  0x40($a_ptr), %xmm4
-       movdqu  0x50($a_ptr), %xmm5
-       mov     $a_ptr, $b_ptr                  # reassign
-       mov     $b_org, $a_ptr                  # reassign
-       movdqa  %xmm0, $in1_x(%rsp)
-       movdqa  %xmm1, $in1_x+0x10(%rsp)
-       por     %xmm0, %xmm1
-       movdqa  %xmm2, $in1_y(%rsp)
-       movdqa  %xmm3, $in1_y+0x10(%rsp)
-       por     %xmm2, %xmm3
-       movdqa  %xmm4, $in1_z(%rsp)
-       movdqa  %xmm5, $in1_z+0x10(%rsp)
-       por     %xmm1, %xmm3
-
-       movdqu  0x00($a_ptr), %xmm0             # copy  *(P256_POINT *)$b_ptr
-        pshufd \$0xb1, %xmm3, %xmm5
-       movdqu  0x10($a_ptr), %xmm1
-       movdqu  0x20($a_ptr), %xmm2
-        por    %xmm3, %xmm5
-       movdqu  0x30($a_ptr), %xmm3
-        mov    0x40+8*0($a_ptr), $src0         # load original in2_z
-        mov    0x40+8*1($a_ptr), $acc6
-        mov    0x40+8*2($a_ptr), $acc7
-        mov    0x40+8*3($a_ptr), $acc0
-       movdqa  %xmm0, $in2_x(%rsp)
-        pshufd \$0x1e, %xmm5, %xmm4
-       movdqa  %xmm1, $in2_x+0x10(%rsp)
-       por     %xmm0, %xmm1
-        movq   $r_ptr, %xmm0                   # save $r_ptr
-       movdqa  %xmm2, $in2_y(%rsp)
-       movdqa  %xmm3, $in2_y+0x10(%rsp)
-       por     %xmm2, %xmm3
-        por    %xmm4, %xmm5
-        pxor   %xmm4, %xmm4
-       por     %xmm1, %xmm3
-
-       lea     0x40-$bias($a_ptr), $a_ptr      # $a_ptr is still valid
-        mov    $src0, $in2_z+8*0(%rsp)         # make in2_z copy
-        mov    $acc6, $in2_z+8*1(%rsp)
-        mov    $acc7, $in2_z+8*2(%rsp)
-        mov    $acc0, $in2_z+8*3(%rsp)
-       lea     $Z2sqr(%rsp), $r_ptr            # Z2^2
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(Z2sqr, in2_z);
-
-       pcmpeqd %xmm4, %xmm5
-       pshufd  \$0xb1, %xmm3, %xmm4
-       por     %xmm3, %xmm4
-       pshufd  \$0, %xmm5, %xmm5               # in1infty
-       pshufd  \$0x1e, %xmm4, %xmm3
-       por     %xmm3, %xmm4
-       pxor    %xmm3, %xmm3
-       pcmpeqd %xmm3, %xmm4
-       pshufd  \$0, %xmm4, %xmm4               # in2infty
-        mov    0x40+8*0($b_ptr), $src0         # load original in1_z
-        mov    0x40+8*1($b_ptr), $acc6
-        mov    0x40+8*2($b_ptr), $acc7
-        mov    0x40+8*3($b_ptr), $acc0
-       movq    $b_ptr, %xmm1
-
-       lea     0x40-$bias($b_ptr), $a_ptr
-       lea     $Z1sqr(%rsp), $r_ptr            # Z1^2
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(Z1sqr, in1_z);
-
-       `&load_for_mul("$Z2sqr(%rsp)", "$in2_z(%rsp)", "$src0")`
-       lea     $S1(%rsp), $r_ptr               # S1 = Z2^3
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S1, Z2sqr, in2_z);
-
-       `&load_for_mul("$Z1sqr(%rsp)", "$in1_z(%rsp)", "$src0")`
-       lea     $S2(%rsp), $r_ptr               # S2 = Z1^3
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S2, Z1sqr, in1_z);
-
-       `&load_for_mul("$S1(%rsp)", "$in1_y(%rsp)", "$src0")`
-       lea     $S1(%rsp), $r_ptr               # S1 = Y1*Z2^3
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S1, S1, in1_y);
-
-       `&load_for_mul("$S2(%rsp)", "$in2_y(%rsp)", "$src0")`
-       lea     $S2(%rsp), $r_ptr               # S2 = Y2*Z1^3
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S2, S2, in2_y);
-
-       lea     $S1(%rsp), $b_ptr
-       lea     $R(%rsp), $r_ptr                # R = S2 - S1
-       call    __ecp_nistz256_sub_from$x       # p256_sub(R, S2, S1);
-
-       or      $acc5, $acc4                    # see if result is zero
-       movdqa  %xmm4, %xmm2
-       or      $acc0, $acc4
-       or      $acc1, $acc4
-       por     %xmm5, %xmm2                    # in1infty || in2infty
-       movq    $acc4, %xmm3
-
-       `&load_for_mul("$Z2sqr(%rsp)", "$in1_x(%rsp)", "$src0")`
-       lea     $U1(%rsp), $r_ptr               # U1 = X1*Z2^2
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(U1, in1_x, Z2sqr);
-
-       `&load_for_mul("$Z1sqr(%rsp)", "$in2_x(%rsp)", "$src0")`
-       lea     $U2(%rsp), $r_ptr               # U2 = X2*Z1^2
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(U2, in2_x, Z1sqr);
-
-       lea     $U1(%rsp), $b_ptr
-       lea     $H(%rsp), $r_ptr                # H = U2 - U1
-       call    __ecp_nistz256_sub_from$x       # p256_sub(H, U2, U1);
-
-       or      $acc5, $acc4                    # see if result is zero
-       or      $acc0, $acc4
-       or      $acc1, $acc4
-
-       .byte   0x3e                            # predict taken
-       jnz     .Ladd_proceed$x                 # is_equal(U1,U2)?
-       movq    %xmm2, $acc0
-       movq    %xmm3, $acc1
-       test    $acc0, $acc0
-       jnz     .Ladd_proceed$x                 # (in1infty || in2infty)?
-       test    $acc1, $acc1
-       jz      .Ladd_double$x                  # is_equal(S1,S2)?
-
-       movq    %xmm0, $r_ptr                   # restore $r_ptr
-       pxor    %xmm0, %xmm0
-       movdqu  %xmm0, 0x00($r_ptr)
-       movdqu  %xmm0, 0x10($r_ptr)
-       movdqu  %xmm0, 0x20($r_ptr)
-       movdqu  %xmm0, 0x30($r_ptr)
-       movdqu  %xmm0, 0x40($r_ptr)
-       movdqu  %xmm0, 0x50($r_ptr)
-       jmp     .Ladd_done$x
-
-.align 32
-.Ladd_double$x:
-       movq    %xmm1, $a_ptr                   # restore $a_ptr
-       movq    %xmm0, $r_ptr                   # restore $r_ptr
-       add     \$`32*(18-5)`, %rsp             # difference in frame sizes
-       jmp     .Lpoint_double_shortcut$x
-
-.align 32
-.Ladd_proceed$x:
-       `&load_for_sqr("$R(%rsp)", "$src0")`
-       lea     $Rsqr(%rsp), $r_ptr             # R^2
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(Rsqr, R);
-
-       `&load_for_mul("$H(%rsp)", "$in1_z(%rsp)", "$src0")`
-       lea     $res_z(%rsp), $r_ptr            # Z3 = H*Z1*Z2
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(res_z, H, in1_z);
-
-       `&load_for_sqr("$H(%rsp)", "$src0")`
-       lea     $Hsqr(%rsp), $r_ptr             # H^2
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(Hsqr, H);
-
-       `&load_for_mul("$res_z(%rsp)", "$in2_z(%rsp)", "$src0")`
-       lea     $res_z(%rsp), $r_ptr            # Z3 = H*Z1*Z2
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(res_z, res_z, in2_z);
-
-       `&load_for_mul("$Hsqr(%rsp)", "$H(%rsp)", "$src0")`
-       lea     $Hcub(%rsp), $r_ptr             # H^3
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(Hcub, Hsqr, H);
-
-       `&load_for_mul("$Hsqr(%rsp)", "$U1(%rsp)", "$src0")`
-       lea     $U2(%rsp), $r_ptr               # U1*H^2
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(U2, U1, Hsqr);
-___
-{
-#######################################################################
-# operate in 4-5-0-1 "name space" that matches multiplication output
-#
-my ($acc0,$acc1,$acc2,$acc3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3);
-my ($poly1, $poly3)=($acc6,$acc7);
-
-$code.=<<___;
-       #lea    $U2(%rsp), $a_ptr
-       #lea    $Hsqr(%rsp), $r_ptr     # 2*U1*H^2
-       #call   __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2);
-
-       add     $acc0, $acc0            # a0:a3+a0:a3
-       lea     $Rsqr(%rsp), $a_ptr
-       adc     $acc1, $acc1
-        mov    $acc0, $t0
-       adc     $acc2, $acc2
-       adc     $acc3, $acc3
-        mov    $acc1, $t1
-       sbb     $t4, $t4
-
-       sub     \$-1, $acc0
-        mov    $acc2, $t2
-       sbb     $poly1, $acc1
-       sbb     \$0, $acc2
-        mov    $acc3, $t3
-       sbb     $poly3, $acc3
-       test    $t4, $t4
-
-       cmovz   $t0, $acc0
-       mov     8*0($a_ptr), $t0
-       cmovz   $t1, $acc1
-       mov     8*1($a_ptr), $t1
-       cmovz   $t2, $acc2
-       mov     8*2($a_ptr), $t2
-       cmovz   $t3, $acc3
-       mov     8*3($a_ptr), $t3
-
-       call    __ecp_nistz256_sub$x            # p256_sub(res_x, Rsqr, Hsqr);
-
-       lea     $Hcub(%rsp), $b_ptr
-       lea     $res_x(%rsp), $r_ptr
-       call    __ecp_nistz256_sub_from$x       # p256_sub(res_x, res_x, Hcub);
-
-       mov     $U2+8*0(%rsp), $t0
-       mov     $U2+8*1(%rsp), $t1
-       mov     $U2+8*2(%rsp), $t2
-       mov     $U2+8*3(%rsp), $t3
-       lea     $res_y(%rsp), $r_ptr
-
-       call    __ecp_nistz256_sub$x            # p256_sub(res_y, U2, res_x);
-
-       mov     $acc0, 8*0($r_ptr)              # save the result, as
-       mov     $acc1, 8*1($r_ptr)              # __ecp_nistz256_sub doesn't
-       mov     $acc2, 8*2($r_ptr)
-       mov     $acc3, 8*3($r_ptr)
-___
-}
-$code.=<<___;
-       `&load_for_mul("$S1(%rsp)", "$Hcub(%rsp)", "$src0")`
-       lea     $S2(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S2, S1, Hcub);
-
-       `&load_for_mul("$R(%rsp)", "$res_y(%rsp)", "$src0")`
-       lea     $res_y(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(res_y, R, res_y);
-
-       lea     $S2(%rsp), $b_ptr
-       lea     $res_y(%rsp), $r_ptr
-       call    __ecp_nistz256_sub_from$x       # p256_sub(res_y, res_y, S2);
-
-       movq    %xmm0, $r_ptr           # restore $r_ptr
-
-       movdqa  %xmm5, %xmm0            # copy_conditional(res_z, in2_z, in1infty);
-       movdqa  %xmm5, %xmm1
-       pandn   $res_z(%rsp), %xmm0
-       movdqa  %xmm5, %xmm2
-       pandn   $res_z+0x10(%rsp), %xmm1
-       movdqa  %xmm5, %xmm3
-       pand    $in2_z(%rsp), %xmm2
-       pand    $in2_z+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-
-       movdqa  %xmm4, %xmm0            # copy_conditional(res_z, in1_z, in2infty);
-       movdqa  %xmm4, %xmm1
-       pandn   %xmm2, %xmm0
-       movdqa  %xmm4, %xmm2
-       pandn   %xmm3, %xmm1
-       movdqa  %xmm4, %xmm3
-       pand    $in1_z(%rsp), %xmm2
-       pand    $in1_z+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-       movdqu  %xmm2, 0x40($r_ptr)
-       movdqu  %xmm3, 0x50($r_ptr)
-
-       movdqa  %xmm5, %xmm0            # copy_conditional(res_x, in2_x, in1infty);
-       movdqa  %xmm5, %xmm1
-       pandn   $res_x(%rsp), %xmm0
-       movdqa  %xmm5, %xmm2
-       pandn   $res_x+0x10(%rsp), %xmm1
-       movdqa  %xmm5, %xmm3
-       pand    $in2_x(%rsp), %xmm2
-       pand    $in2_x+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-
-       movdqa  %xmm4, %xmm0            # copy_conditional(res_x, in1_x, in2infty);
-       movdqa  %xmm4, %xmm1
-       pandn   %xmm2, %xmm0
-       movdqa  %xmm4, %xmm2
-       pandn   %xmm3, %xmm1
-       movdqa  %xmm4, %xmm3
-       pand    $in1_x(%rsp), %xmm2
-       pand    $in1_x+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-       movdqu  %xmm2, 0x00($r_ptr)
-       movdqu  %xmm3, 0x10($r_ptr)
-
-       movdqa  %xmm5, %xmm0            # copy_conditional(res_y, in2_y, in1infty);
-       movdqa  %xmm5, %xmm1
-       pandn   $res_y(%rsp), %xmm0
-       movdqa  %xmm5, %xmm2
-       pandn   $res_y+0x10(%rsp), %xmm1
-       movdqa  %xmm5, %xmm3
-       pand    $in2_y(%rsp), %xmm2
-       pand    $in2_y+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-
-       movdqa  %xmm4, %xmm0            # copy_conditional(res_y, in1_y, in2infty);
-       movdqa  %xmm4, %xmm1
-       pandn   %xmm2, %xmm0
-       movdqa  %xmm4, %xmm2
-       pandn   %xmm3, %xmm1
-       movdqa  %xmm4, %xmm3
-       pand    $in1_y(%rsp), %xmm2
-       pand    $in1_y+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-       movdqu  %xmm2, 0x20($r_ptr)
-       movdqu  %xmm3, 0x30($r_ptr)
-
-.Ladd_done$x:
-       add     \$32*18+8, %rsp
-       pop     %r15
-       pop     %r14
-       pop     %r13
-       pop     %r12
-       pop     %rbx
-       pop     %rbp
-       ret
-.size  ecp_nistz256_point_add$sfx,.-ecp_nistz256_point_add$sfx
-___
-}
-&gen_add("q");
-
-sub gen_add_affine () {
-    my $x = shift;
-    my ($src0,$sfx,$bias);
-    my ($U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr,
-       $res_x,$res_y,$res_z,
-       $in1_x,$in1_y,$in1_z,
-       $in2_x,$in2_y)=map(32*$_,(0..14));
-    my $Z1sqr = $S2;
-
-    if ($x ne "x") {
-       $src0 = "%rax";
-       $sfx  = "";
-       $bias = 0;
-
-$code.=<<___;
-.globl ecp_nistz256_point_add_affine
-.type  ecp_nistz256_point_add_affine,\@function,3
-.align 32
-ecp_nistz256_point_add_affine:
-___
-    } else {
-       $src0 = "%rdx";
-       $sfx  = "x";
-       $bias = 128;
-    }
-$code.=<<___;
-       push    %rbp
-       push    %rbx
-       push    %r12
-       push    %r13
-       push    %r14
-       push    %r15
-       sub     \$32*15+8, %rsp
-
-       movdqu  0x00($a_ptr), %xmm0     # copy  *(P256_POINT *)$a_ptr
-       mov     $b_org, $b_ptr          # reassign
-       movdqu  0x10($a_ptr), %xmm1
-       movdqu  0x20($a_ptr), %xmm2
-       movdqu  0x30($a_ptr), %xmm3
-       movdqu  0x40($a_ptr), %xmm4
-       movdqu  0x50($a_ptr), %xmm5
-        mov    0x40+8*0($a_ptr), $src0 # load original in1_z
-        mov    0x40+8*1($a_ptr), $acc6
-        mov    0x40+8*2($a_ptr), $acc7
-        mov    0x40+8*3($a_ptr), $acc0
-       movdqa  %xmm0, $in1_x(%rsp)
-       movdqa  %xmm1, $in1_x+0x10(%rsp)
-       por     %xmm0, %xmm1
-       movdqa  %xmm2, $in1_y(%rsp)
-       movdqa  %xmm3, $in1_y+0x10(%rsp)
-       por     %xmm2, %xmm3
-       movdqa  %xmm4, $in1_z(%rsp)
-       movdqa  %xmm5, $in1_z+0x10(%rsp)
-       por     %xmm1, %xmm3
-
-       movdqu  0x00($b_ptr), %xmm0     # copy  *(P256_POINT_AFFINE *)$b_ptr
-        pshufd \$0xb1, %xmm3, %xmm5
-       movdqu  0x10($b_ptr), %xmm1
-       movdqu  0x20($b_ptr), %xmm2
-        por    %xmm3, %xmm5
-       movdqu  0x30($b_ptr), %xmm3
-       movdqa  %xmm0, $in2_x(%rsp)
-        pshufd \$0x1e, %xmm5, %xmm4
-       movdqa  %xmm1, $in2_x+0x10(%rsp)
-       por     %xmm0, %xmm1
-        movq   $r_ptr, %xmm0           # save $r_ptr
-       movdqa  %xmm2, $in2_y(%rsp)
-       movdqa  %xmm3, $in2_y+0x10(%rsp)
-       por     %xmm2, %xmm3
-        por    %xmm4, %xmm5
-        pxor   %xmm4, %xmm4
-       por     %xmm1, %xmm3
-
-       lea     0x40-$bias($a_ptr), $a_ptr      # $a_ptr is still valid
-       lea     $Z1sqr(%rsp), $r_ptr            # Z1^2
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(Z1sqr, in1_z);
-
-       pcmpeqd %xmm4, %xmm5
-       pshufd  \$0xb1, %xmm3, %xmm4
-        mov    0x00($b_ptr), $src0             # $b_ptr is still valid
-        #lea   0x00($b_ptr), $b_ptr
-        mov    $acc4, $acc1                    # harmonize sqr output and mul input
-       por     %xmm3, %xmm4
-       pshufd  \$0, %xmm5, %xmm5               # in1infty
-       pshufd  \$0x1e, %xmm4, %xmm3
-        mov    $acc5, $acc2
-       por     %xmm3, %xmm4
-       pxor    %xmm3, %xmm3
-        mov    $acc6, $acc3
-       pcmpeqd %xmm3, %xmm4
-       pshufd  \$0, %xmm4, %xmm4               # in2infty
-
-       lea     $Z1sqr-$bias(%rsp), $a_ptr
-       mov     $acc7, $acc4
-       lea     $U2(%rsp), $r_ptr               # U2 = X2*Z1^2
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(U2, Z1sqr, in2_x);
-
-       lea     $in1_x(%rsp), $b_ptr
-       lea     $H(%rsp), $r_ptr                # H = U2 - U1
-       call    __ecp_nistz256_sub_from$x       # p256_sub(H, U2, in1_x);
-
-       `&load_for_mul("$Z1sqr(%rsp)", "$in1_z(%rsp)", "$src0")`
-       lea     $S2(%rsp), $r_ptr               # S2 = Z1^3
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S2, Z1sqr, in1_z);
-
-       `&load_for_mul("$H(%rsp)", "$in1_z(%rsp)", "$src0")`
-       lea     $res_z(%rsp), $r_ptr            # Z3 = H*Z1*Z2
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(res_z, H, in1_z);
-
-       `&load_for_mul("$S2(%rsp)", "$in2_y(%rsp)", "$src0")`
-       lea     $S2(%rsp), $r_ptr               # S2 = Y2*Z1^3
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S2, S2, in2_y);
-
-       lea     $in1_y(%rsp), $b_ptr
-       lea     $R(%rsp), $r_ptr                # R = S2 - S1
-       call    __ecp_nistz256_sub_from$x       # p256_sub(R, S2, in1_y);
-
-       `&load_for_sqr("$H(%rsp)", "$src0")`
-       lea     $Hsqr(%rsp), $r_ptr             # H^2
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(Hsqr, H);
-
-       `&load_for_sqr("$R(%rsp)", "$src0")`
-       lea     $Rsqr(%rsp), $r_ptr             # R^2
-       call    __ecp_nistz256_sqr_mont$x       # p256_sqr_mont(Rsqr, R);
-
-       `&load_for_mul("$H(%rsp)", "$Hsqr(%rsp)", "$src0")`
-       lea     $Hcub(%rsp), $r_ptr             # H^3
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(Hcub, Hsqr, H);
-
-       `&load_for_mul("$Hsqr(%rsp)", "$in1_x(%rsp)", "$src0")`
-       lea     $U2(%rsp), $r_ptr               # U1*H^2
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(U2, in1_x, Hsqr);
-___
-{
-#######################################################################
-# operate in 4-5-0-1 "name space" that matches multiplication output
-#
-my ($acc0,$acc1,$acc2,$acc3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3);
-my ($poly1, $poly3)=($acc6,$acc7);
-
-$code.=<<___;
-       #lea    $U2(%rsp), $a_ptr
-       #lea    $Hsqr(%rsp), $r_ptr     # 2*U1*H^2
-       #call   __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2);
-
-       add     $acc0, $acc0            # a0:a3+a0:a3
-       lea     $Rsqr(%rsp), $a_ptr
-       adc     $acc1, $acc1
-        mov    $acc0, $t0
-       adc     $acc2, $acc2
-       adc     $acc3, $acc3
-        mov    $acc1, $t1
-       sbb     $t4, $t4
-
-       sub     \$-1, $acc0
-        mov    $acc2, $t2
-       sbb     $poly1, $acc1
-       sbb     \$0, $acc2
-        mov    $acc3, $t3
-       sbb     $poly3, $acc3
-       test    $t4, $t4
-
-       cmovz   $t0, $acc0
-       mov     8*0($a_ptr), $t0
-       cmovz   $t1, $acc1
-       mov     8*1($a_ptr), $t1
-       cmovz   $t2, $acc2
-       mov     8*2($a_ptr), $t2
-       cmovz   $t3, $acc3
-       mov     8*3($a_ptr), $t3
-
-       call    __ecp_nistz256_sub$x            # p256_sub(res_x, Rsqr, Hsqr);
-
-       lea     $Hcub(%rsp), $b_ptr
-       lea     $res_x(%rsp), $r_ptr
-       call    __ecp_nistz256_sub_from$x       # p256_sub(res_x, res_x, Hcub);
-
-       mov     $U2+8*0(%rsp), $t0
-       mov     $U2+8*1(%rsp), $t1
-       mov     $U2+8*2(%rsp), $t2
-       mov     $U2+8*3(%rsp), $t3
-       lea     $H(%rsp), $r_ptr
-
-       call    __ecp_nistz256_sub$x            # p256_sub(H, U2, res_x);
-
-       mov     $acc0, 8*0($r_ptr)              # save the result, as
-       mov     $acc1, 8*1($r_ptr)              # __ecp_nistz256_sub doesn't
-       mov     $acc2, 8*2($r_ptr)
-       mov     $acc3, 8*3($r_ptr)
-___
-}
-$code.=<<___;
-       `&load_for_mul("$Hcub(%rsp)", "$in1_y(%rsp)", "$src0")`
-       lea     $S2(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(S2, Hcub, in1_y);
-
-       `&load_for_mul("$H(%rsp)", "$R(%rsp)", "$src0")`
-       lea     $H(%rsp), $r_ptr
-       call    __ecp_nistz256_mul_mont$x       # p256_mul_mont(H, H, R);
-
-       lea     $S2(%rsp), $b_ptr
-       lea     $res_y(%rsp), $r_ptr
-       call    __ecp_nistz256_sub_from$x       # p256_sub(res_y, H, S2);
-
-       movq    %xmm0, $r_ptr           # restore $r_ptr
-
-       movdqa  %xmm5, %xmm0            # copy_conditional(res_z, ONE, in1infty);
-       movdqa  %xmm5, %xmm1
-       pandn   $res_z(%rsp), %xmm0
-       movdqa  %xmm5, %xmm2
-       pandn   $res_z+0x10(%rsp), %xmm1
-       movdqa  %xmm5, %xmm3
-       pand    .LONE_mont(%rip), %xmm2
-       pand    .LONE_mont+0x10(%rip), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-
-       movdqa  %xmm4, %xmm0            # copy_conditional(res_z, in1_z, in2infty);
-       movdqa  %xmm4, %xmm1
-       pandn   %xmm2, %xmm0
-       movdqa  %xmm4, %xmm2
-       pandn   %xmm3, %xmm1
-       movdqa  %xmm4, %xmm3
-       pand    $in1_z(%rsp), %xmm2
-       pand    $in1_z+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-       movdqu  %xmm2, 0x40($r_ptr)
-       movdqu  %xmm3, 0x50($r_ptr)
-
-       movdqa  %xmm5, %xmm0            # copy_conditional(res_x, in2_x, in1infty);
-       movdqa  %xmm5, %xmm1
-       pandn   $res_x(%rsp), %xmm0
-       movdqa  %xmm5, %xmm2
-       pandn   $res_x+0x10(%rsp), %xmm1
-       movdqa  %xmm5, %xmm3
-       pand    $in2_x(%rsp), %xmm2
-       pand    $in2_x+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-
-       movdqa  %xmm4, %xmm0            # copy_conditional(res_x, in1_x, in2infty);
-       movdqa  %xmm4, %xmm1
-       pandn   %xmm2, %xmm0
-       movdqa  %xmm4, %xmm2
-       pandn   %xmm3, %xmm1
-       movdqa  %xmm4, %xmm3
-       pand    $in1_x(%rsp), %xmm2
-       pand    $in1_x+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-       movdqu  %xmm2, 0x00($r_ptr)
-       movdqu  %xmm3, 0x10($r_ptr)
-
-       movdqa  %xmm5, %xmm0            # copy_conditional(res_y, in2_y, in1infty);
-       movdqa  %xmm5, %xmm1
-       pandn   $res_y(%rsp), %xmm0
-       movdqa  %xmm5, %xmm2
-       pandn   $res_y+0x10(%rsp), %xmm1
-       movdqa  %xmm5, %xmm3
-       pand    $in2_y(%rsp), %xmm2
-       pand    $in2_y+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-
-       movdqa  %xmm4, %xmm0            # copy_conditional(res_y, in1_y, in2infty);
-       movdqa  %xmm4, %xmm1
-       pandn   %xmm2, %xmm0
-       movdqa  %xmm4, %xmm2
-       pandn   %xmm3, %xmm1
-       movdqa  %xmm4, %xmm3
-       pand    $in1_y(%rsp), %xmm2
-       pand    $in1_y+0x10(%rsp), %xmm3
-       por     %xmm0, %xmm2
-       por     %xmm1, %xmm3
-       movdqu  %xmm2, 0x20($r_ptr)
-       movdqu  %xmm3, 0x30($r_ptr)
-
-       add     \$32*15+8, %rsp
-       pop     %r15
-       pop     %r14
-       pop     %r13
-       pop     %r12
-       pop     %rbx
-       pop     %rbp
-       ret
-.size  ecp_nistz256_point_add_affine$sfx,.-ecp_nistz256_point_add_affine$sfx
-___
-}
-&gen_add_affine("q");
-
-}}}
-
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-print $code;
-close STDOUT;
diff --git a/lib/libcrypto/ec/ecp_nistp224.c b/lib/libcrypto/ec/ecp_nistp224.c
deleted file mode 100644 (file)
index caa4c3f..0000000
+++ /dev/null
@@ -1,1690 +0,0 @@
-/* $OpenBSD: ecp_nistp224.c,v 1.30 2022/12/26 07:18:51 jmc Exp $ */
-/*
- * Written by Emilia Kasper (Google) for the OpenSSL project.
- */
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * A 64-bit implementation of the NIST P-224 elliptic curve point multiplication
- *
- * Inspired by Daniel J. Bernstein's public domain nistp224 implementation
- * and Adam Langley's public domain 64-bit C implementation of curve25519
- */
-
-#include <stdint.h>
-#include <string.h>
-
-#include <openssl/opensslconf.h>
-
-#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
-
-#include <openssl/err.h>
-#include "ec_local.h"
-
-#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
-  /* even with gcc, the typedef won't work for 32-bit platforms */
-  typedef __uint128_t uint128_t; /* nonstandard; implemented by gcc on 64-bit platforms */
-#else
-  #error "Need GCC 3.1 or later to define type uint128_t"
-#endif
-
-typedef uint8_t u8;
-typedef uint64_t u64;
-typedef int64_t s64;
-
-
-/******************************************************************************/
-/*                 INTERNAL REPRESENTATION OF FIELD ELEMENTS
- *
- * Field elements are represented as a_0 + 2^56*a_1 + 2^112*a_2 + 2^168*a_3
- * using 64-bit coefficients called 'limbs',
- * and sometimes (for multiplication results) as
- * b_0 + 2^56*b_1 + 2^112*b_2 + 2^168*b_3 + 2^224*b_4 + 2^280*b_5 + 2^336*b_6
- * using 128-bit coefficients called 'widelimbs'.
- * A 4-limb representation is an 'felem';
- * a 7-widelimb representation is a 'widefelem'.
- * Even within felems, bits of adjacent limbs overlap, and we don't always
- * reduce the representations: we ensure that inputs to each felem
- * multiplication satisfy a_i < 2^60, so outputs satisfy b_i < 4*2^60*2^60,
- * and fit into a 128-bit word without overflow. The coefficients are then
- * again partially reduced to obtain an felem satisfying a_i < 2^57.
- * We only reduce to the unique minimal representation at the end of the
- * computation.
- */
-
-typedef uint64_t limb;
-typedef uint128_t widelimb;
-
-typedef limb felem[4];
-typedef widelimb widefelem[7];
-
-/* Field element represented as a byte array.
- * 28*8 = 224 bits is also the group order size for the elliptic curve,
- * and we also use this type for scalars for point multiplication.
-  */
-typedef u8 felem_bytearray[28];
-
-static const felem_bytearray nistp224_curve_params[5] = {
-       {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,    /* p */
-        0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,
-        0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01},
-       {0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,    /* a */
-        0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,
-        0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE},
-       {0xB4,0x05,0x0A,0x85,0x0C,0x04,0xB3,0xAB,0xF5,0x41,    /* b */
-        0x32,0x56,0x50,0x44,0xB0,0xB7,0xD7,0xBF,0xD8,0xBA,
-        0x27,0x0B,0x39,0x43,0x23,0x55,0xFF,0xB4},
-       {0xB7,0x0E,0x0C,0xBD,0x6B,0xB4,0xBF,0x7F,0x32,0x13,    /* x */
-        0x90,0xB9,0x4A,0x03,0xC1,0xD3,0x56,0xC2,0x11,0x22,
-        0x34,0x32,0x80,0xD6,0x11,0x5C,0x1D,0x21},
-       {0xbd,0x37,0x63,0x88,0xb5,0xf7,0x23,0xfb,0x4c,0x22,    /* y */
-        0xdf,0xe6,0xcd,0x43,0x75,0xa0,0x5a,0x07,0x47,0x64,
-        0x44,0xd5,0x81,0x99,0x85,0x00,0x7e,0x34}
-};
-
-/* Precomputed multiples of the standard generator
- * Points are given in coordinates (X, Y, Z) where Z normally is 1
- * (0 for the point at infinity).
- * For each field element, slice a_0 is word 0, etc.
- *
- * The table has 2 * 16 elements, starting with the following:
- * index | bits    | point
- * ------+---------+------------------------------
- *     0 | 0 0 0 0 | 0G
- *     1 | 0 0 0 1 | 1G
- *     2 | 0 0 1 0 | 2^56G
- *     3 | 0 0 1 1 | (2^56 + 1)G
- *     4 | 0 1 0 0 | 2^112G
- *     5 | 0 1 0 1 | (2^112 + 1)G
- *     6 | 0 1 1 0 | (2^112 + 2^56)G
- *     7 | 0 1 1 1 | (2^112 + 2^56 + 1)G
- *     8 | 1 0 0 0 | 2^168G
- *     9 | 1 0 0 1 | (2^168 + 1)G
- *    10 | 1 0 1 0 | (2^168 + 2^56)G
- *    11 | 1 0 1 1 | (2^168 + 2^56 + 1)G
- *    12 | 1 1 0 0 | (2^168 + 2^112)G
- *    13 | 1 1 0 1 | (2^168 + 2^112 + 1)G
- *    14 | 1 1 1 0 | (2^168 + 2^112 + 2^56)G
- *    15 | 1 1 1 1 | (2^168 + 2^112 + 2^56 + 1)G
- * followed by a copy of this with each element multiplied by 2^28.
- *
- * The reason for this is so that we can clock bits into four different
- * locations when doing simple scalar multiplies against the base point,
- * and then another four locations using the second 16 elements.
- */
-static const felem gmul[2][16][3] =
-{{{{0, 0, 0, 0},
-   {0, 0, 0, 0},
-   {0, 0, 0, 0}},
-  {{0x3280d6115c1d21, 0xc1d356c2112234, 0x7f321390b94a03, 0xb70e0cbd6bb4bf},
-   {0xd5819985007e34, 0x75a05a07476444, 0xfb4c22dfe6cd43, 0xbd376388b5f723},
-   {1, 0, 0, 0}},
-  {{0xfd9675666ebbe9, 0xbca7664d40ce5e, 0x2242df8d8a2a43, 0x1f49bbb0f99bc5},
-   {0x29e0b892dc9c43, 0xece8608436e662, 0xdc858f185310d0, 0x9812dd4eb8d321},
-   {1, 0, 0, 0}},
-  {{0x6d3e678d5d8eb8, 0x559eed1cb362f1, 0x16e9a3bbce8a3f, 0xeedcccd8c2a748},
-   {0xf19f90ed50266d, 0xabf2b4bf65f9df, 0x313865468fafec, 0x5cb379ba910a17},
-   {1, 0, 0, 0}},
-  {{0x0641966cab26e3, 0x91fb2991fab0a0, 0xefec27a4e13a0b, 0x0499aa8a5f8ebe},
-   {0x7510407766af5d, 0x84d929610d5450, 0x81d77aae82f706, 0x6916f6d4338c5b},
-   {1, 0, 0, 0}},
-  {{0xea95ac3b1f15c6, 0x086000905e82d4, 0xdd323ae4d1c8b1, 0x932b56be7685a3},
-   {0x9ef93dea25dbbf, 0x41665960f390f0, 0xfdec76dbe2a8a7, 0x523e80f019062a},
-   {1, 0, 0, 0}},
-  {{0x822fdd26732c73, 0xa01c83531b5d0f, 0x363f37347c1ba4, 0xc391b45c84725c},
-   {0xbbd5e1b2d6ad24, 0xddfbcde19dfaec, 0xc393da7e222a7f, 0x1efb7890ede244},
-   {1, 0, 0, 0}},
-  {{0x4c9e90ca217da1, 0xd11beca79159bb, 0xff8d33c2c98b7c, 0x2610b39409f849},
-   {0x44d1352ac64da0, 0xcdbb7b2c46b4fb, 0x966c079b753c89, 0xfe67e4e820b112},
-   {1, 0, 0, 0}},
-  {{0xe28cae2df5312d, 0xc71b61d16f5c6e, 0x79b7619a3e7c4c, 0x05c73240899b47},
-   {0x9f7f6382c73e3a, 0x18615165c56bda, 0x641fab2116fd56, 0x72855882b08394},
-   {1, 0, 0, 0}},
-  {{0x0469182f161c09, 0x74a98ca8d00fb5, 0xb89da93489a3e0, 0x41c98768fb0c1d},
-   {0xe5ea05fb32da81, 0x3dce9ffbca6855, 0x1cfe2d3fbf59e6, 0x0e5e03408738a7},
-   {1, 0, 0, 0}},
-  {{0xdab22b2333e87f, 0x4430137a5dd2f6, 0xe03ab9f738beb8, 0xcb0c5d0dc34f24},
-   {0x764a7df0c8fda5, 0x185ba5c3fa2044, 0x9281d688bcbe50, 0xc40331df893881},
-   {1, 0, 0, 0}},
-  {{0xb89530796f0f60, 0xade92bd26909a3, 0x1a0c83fb4884da, 0x1765bf22a5a984},
-   {0x772a9ee75db09e, 0x23bc6c67cec16f, 0x4c1edba8b14e2f, 0xe2a215d9611369},
-   {1, 0, 0, 0}},
-  {{0x571e509fb5efb3, 0xade88696410552, 0xc8ae85fada74fe, 0x6c7e4be83bbde3},
-   {0xff9f51160f4652, 0xb47ce2495a6539, 0xa2946c53b582f4, 0x286d2db3ee9a60},
-   {1, 0, 0, 0}},
-  {{0x40bbd5081a44af, 0x0995183b13926c, 0xbcefba6f47f6d0, 0x215619e9cc0057},
-   {0x8bc94d3b0df45e, 0xf11c54a3694f6f, 0x8631b93cdfe8b5, 0xe7e3f4b0982db9},
-   {1, 0, 0, 0}},
-  {{0xb17048ab3e1c7b, 0xac38f36ff8a1d8, 0x1c29819435d2c6, 0xc813132f4c07e9},
-   {0x2891425503b11f, 0x08781030579fea, 0xf5426ba5cc9674, 0x1e28ebf18562bc},
-   {1, 0, 0, 0}},
-  {{0x9f31997cc864eb, 0x06cd91d28b5e4c, 0xff17036691a973, 0xf1aef351497c58},
-   {0xdd1f2d600564ff, 0xdead073b1402db, 0x74a684435bd693, 0xeea7471f962558},
-   {1, 0, 0, 0}}},
- {{{0, 0, 0, 0},
-   {0, 0, 0, 0},
-   {0, 0, 0, 0}},
-  {{0x9665266dddf554, 0x9613d78b60ef2d, 0xce27a34cdba417, 0xd35ab74d6afc31},
-   {0x85ccdd22deb15e, 0x2137e5783a6aab, 0xa141cffd8c93c6, 0x355a1830e90f2d},
-   {1, 0, 0, 0}},
-  {{0x1a494eadaade65, 0xd6da4da77fe53c, 0xe7992996abec86, 0x65c3553c6090e3},
-   {0xfa610b1fb09346, 0xf1c6540b8a4aaf, 0xc51a13ccd3cbab, 0x02995b1b18c28a},
-   {1, 0, 0, 0}},
-  {{0x7874568e7295ef, 0x86b419fbe38d04, 0xdc0690a7550d9a, 0xd3966a44beac33},
-   {0x2b7280ec29132f, 0xbeaa3b6a032df3, 0xdc7dd88ae41200, 0xd25e2513e3a100},
-   {1, 0, 0, 0}},
-  {{0x924857eb2efafd, 0xac2bce41223190, 0x8edaa1445553fc, 0x825800fd3562d5},
-   {0x8d79148ea96621, 0x23a01c3dd9ed8d, 0xaf8b219f9416b5, 0xd8db0cc277daea},
-   {1, 0, 0, 0}},
-  {{0x76a9c3b1a700f0, 0xe9acd29bc7e691, 0x69212d1a6b0327, 0x6322e97fe154be},
-   {0x469fc5465d62aa, 0x8d41ed18883b05, 0x1f8eae66c52b88, 0xe4fcbe9325be51},
-   {1, 0, 0, 0}},
-  {{0x825fdf583cac16, 0x020b857c7b023a, 0x683c17744b0165, 0x14ffd0a2daf2f1},
-   {0x323b36184218f9, 0x4944ec4e3b47d4, 0xc15b3080841acf, 0x0bced4b01a28bb},
-   {1, 0, 0, 0}},
-  {{0x92ac22230df5c4, 0x52f33b4063eda8, 0xcb3f19870c0c93, 0x40064f2ba65233},
-   {0xfe16f0924f8992, 0x012da25af5b517, 0x1a57bb24f723a6, 0x06f8bc76760def},
-   {1, 0, 0, 0}},
-  {{0x4a7084f7817cb9, 0xbcab0738ee9a78, 0x3ec11e11d9c326, 0xdc0fe90e0f1aae},
-   {0xcf639ea5f98390, 0x5c350aa22ffb74, 0x9afae98a4047b7, 0x956ec2d617fc45},
-   {1, 0, 0, 0}},
-  {{0x4306d648c1be6a, 0x9247cd8bc9a462, 0xf5595e377d2f2e, 0xbd1c3caff1a52e},
-   {0x045e14472409d0, 0x29f3e17078f773, 0x745a602b2d4f7d, 0x191837685cdfbb},
-   {1, 0, 0, 0}},
-  {{0x5b6ee254a8cb79, 0x4953433f5e7026, 0xe21faeb1d1def4, 0xc4c225785c09de},
-   {0x307ce7bba1e518, 0x31b125b1036db8, 0x47e91868839e8f, 0xc765866e33b9f3},
-   {1, 0, 0, 0}},
-  {{0x3bfece24f96906, 0x4794da641e5093, 0xde5df64f95db26, 0x297ecd89714b05},
-   {0x701bd3ebb2c3aa, 0x7073b4f53cb1d5, 0x13c5665658af16, 0x9895089d66fe58},
-   {1, 0, 0, 0}},
-  {{0x0fef05f78c4790, 0x2d773633b05d2e, 0x94229c3a951c94, 0xbbbd70df4911bb},
-   {0xb2c6963d2c1168, 0x105f47a72b0d73, 0x9fdf6111614080, 0x7b7e94b39e67b0},
-   {1, 0, 0, 0}},
-  {{0xad1a7d6efbe2b3, 0xf012482c0da69d, 0x6b3bdf12438345, 0x40d7558d7aa4d9},
-   {0x8a09fffb5c6d3d, 0x9a356e5d9ffd38, 0x5973f15f4f9b1c, 0xdcd5f59f63c3ea},
-   {1, 0, 0, 0}},
-  {{0xacf39f4c5ca7ab, 0x4c8071cc5fd737, 0xc64e3602cd1184, 0x0acd4644c9abba},
-   {0x6c011a36d8bf6e, 0xfecd87ba24e32a, 0x19f6f56574fad8, 0x050b204ced9405},
-   {1, 0, 0, 0}},
-  {{0xed4f1cae7d9a96, 0x5ceef7ad94c40a, 0x778e4a3bf3ef9b, 0x7405783dc3b55e},
-   {0x32477c61b6e8c6, 0xb46a97570f018b, 0x91176d0a7e95d1, 0x3df90fbc4c7d0e},
-   {1, 0, 0, 0}}}};
-
-/* Precomputation for the group generator. */
-typedef struct {
-       felem g_pre_comp[2][16][3];
-       int references;
-} NISTP224_PRE_COMP;
-
-const EC_METHOD *
-EC_GFp_nistp224_method(void)
-{
-       static const EC_METHOD ret = {
-               .flags = EC_FLAGS_DEFAULT_OCT,
-               .field_type = NID_X9_62_prime_field,
-               .group_init = ec_GFp_nistp224_group_init,
-               .group_finish = ec_GFp_simple_group_finish,
-               .group_clear_finish = ec_GFp_simple_group_clear_finish,
-               .group_copy = ec_GFp_nist_group_copy,
-               .group_set_curve = ec_GFp_nistp224_group_set_curve,
-               .group_get_curve = ec_GFp_simple_group_get_curve,
-               .group_get_degree = ec_GFp_simple_group_get_degree,
-               .group_order_bits = ec_group_simple_order_bits,
-               .group_check_discriminant =
-                   ec_GFp_simple_group_check_discriminant,
-               .point_init = ec_GFp_simple_point_init,
-               .point_finish = ec_GFp_simple_point_finish,
-               .point_clear_finish = ec_GFp_simple_point_clear_finish,
-               .point_copy = ec_GFp_simple_point_copy,
-               .point_set_to_infinity = ec_GFp_simple_point_set_to_infinity,
-               .point_set_Jprojective_coordinates =
-                   ec_GFp_simple_set_Jprojective_coordinates,
-               .point_get_Jprojective_coordinates =
-                   ec_GFp_simple_get_Jprojective_coordinates,
-               .point_set_affine_coordinates =
-                   ec_GFp_simple_point_set_affine_coordinates,
-               .point_get_affine_coordinates =
-                   ec_GFp_nistp224_point_get_affine_coordinates,
-               .add = ec_GFp_simple_add,
-               .dbl = ec_GFp_simple_dbl,
-               .invert = ec_GFp_simple_invert,
-               .is_at_infinity = ec_GFp_simple_is_at_infinity,
-               .is_on_curve = ec_GFp_simple_is_on_curve,
-               .point_cmp = ec_GFp_simple_cmp,
-               .make_affine = ec_GFp_simple_make_affine,
-               .points_make_affine = ec_GFp_simple_points_make_affine,
-               .mul = ec_GFp_nistp224_points_mul,
-               .precompute_mult = ec_GFp_nistp224_precompute_mult,
-               .have_precompute_mult = ec_GFp_nistp224_have_precompute_mult,
-               .field_mul = ec_GFp_nist_field_mul,
-               .field_sqr = ec_GFp_nist_field_sqr,
-               .blind_coordinates = NULL,
-       };
-
-       return &ret;
-}
-
-/* Helper functions to convert field elements to/from internal representation */
-static void
-bin28_to_felem(felem out, const u8 in[28])
-{
-       out[0] = *((const uint64_t *) (in)) & 0x00ffffffffffffff;
-       out[1] = (*((const uint64_t *) (in + 7))) & 0x00ffffffffffffff;
-       out[2] = (*((const uint64_t *) (in + 14))) & 0x00ffffffffffffff;
-       out[3] = (*((const uint64_t *) (in + 21))) & 0x00ffffffffffffff;
-}
-
-static void
-felem_to_bin28(u8 out[28], const felem in)
-{
-       unsigned i;
-       for (i = 0; i < 7; ++i) {
-               out[i] = in[0] >> (8 * i);
-               out[i + 7] = in[1] >> (8 * i);
-               out[i + 14] = in[2] >> (8 * i);
-               out[i + 21] = in[3] >> (8 * i);
-       }
-}
-
-/* To preserve endianness when using BN_bn2bin and BN_bin2bn */
-static void
-flip_endian(u8 *out, const u8 *in, unsigned len)
-{
-       unsigned i;
-       for (i = 0; i < len; ++i)
-               out[i] = in[len - 1 - i];
-}
-
-/* From OpenSSL BIGNUM to internal representation */
-static int
-BN_to_felem(felem out, const BIGNUM *bn)
-{
-       felem_bytearray b_in;
-       felem_bytearray b_out;
-       unsigned num_bytes;
-
-       /* BN_bn2bin eats leading zeroes */
-       memset(b_out, 0, sizeof b_out);
-       num_bytes = BN_num_bytes(bn);
-       if (num_bytes > sizeof b_out) {
-               ECerror(EC_R_BIGNUM_OUT_OF_RANGE);
-               return 0;
-       }
-       if (BN_is_negative(bn)) {
-               ECerror(EC_R_BIGNUM_OUT_OF_RANGE);
-               return 0;
-       }
-       num_bytes = BN_bn2bin(bn, b_in);
-       flip_endian(b_out, b_in, num_bytes);
-       bin28_to_felem(out, b_out);
-       return 1;
-}
-
-/* From internal representation to OpenSSL BIGNUM */
-static BIGNUM *
-felem_to_BN(BIGNUM *out, const felem in)
-{
-       felem_bytearray b_in, b_out;
-       felem_to_bin28(b_in, in);
-       flip_endian(b_out, b_in, sizeof b_out);
-       return BN_bin2bn(b_out, sizeof b_out, out);
-}
-
-/******************************************************************************/
-/*                             FIELD OPERATIONS
- *
- * Field operations, using the internal representation of field elements.
- * NB! These operations are specific to our point multiplication and cannot be
- * expected to be correct in general - e.g., multiplication with a large scalar
- * will cause an overflow.
- *
- */
-
-static void
-felem_one(felem out)
-{
-       out[0] = 1;
-       out[1] = 0;
-       out[2] = 0;
-       out[3] = 0;
-}
-
-static void
-felem_assign(felem out, const felem in)
-{
-       out[0] = in[0];
-       out[1] = in[1];
-       out[2] = in[2];
-       out[3] = in[3];
-}
-
-/* Sum two field elements: out += in */
-static void
-felem_sum(felem out, const felem in)
-{
-       out[0] += in[0];
-       out[1] += in[1];
-       out[2] += in[2];
-       out[3] += in[3];
-}
-
-/* Get negative value: out = -in */
-/* Assumes in[i] < 2^57 */
-static void
-felem_neg(felem out, const felem in)
-{
-       static const limb two58p2 = (((limb) 1) << 58) + (((limb) 1) << 2);
-       static const limb two58m2 = (((limb) 1) << 58) - (((limb) 1) << 2);
-       static const limb two58m42m2 = (((limb) 1) << 58) -
-       (((limb) 1) << 42) - (((limb) 1) << 2);
-
-       /* Set to 0 mod 2^224-2^96+1 to ensure out > in */
-       out[0] = two58p2 - in[0];
-       out[1] = two58m42m2 - in[1];
-       out[2] = two58m2 - in[2];
-       out[3] = two58m2 - in[3];
-}
-
-/* Subtract field elements: out -= in */
-/* Assumes in[i] < 2^57 */
-static void
-felem_diff(felem out, const felem in)
-{
-       static const limb two58p2 = (((limb) 1) << 58) + (((limb) 1) << 2);
-       static const limb two58m2 = (((limb) 1) << 58) - (((limb) 1) << 2);
-       static const limb two58m42m2 = (((limb) 1) << 58) -
-       (((limb) 1) << 42) - (((limb) 1) << 2);
-
-       /* Add 0 mod 2^224-2^96+1 to ensure out > in */
-       out[0] += two58p2;
-       out[1] += two58m42m2;
-       out[2] += two58m2;
-       out[3] += two58m2;
-
-       out[0] -= in[0];
-       out[1] -= in[1];
-       out[2] -= in[2];
-       out[3] -= in[3];
-}
-
-/* Subtract in unreduced 128-bit mode: out -= in */
-/* Assumes in[i] < 2^119 */
-static void
-widefelem_diff(widefelem out, const widefelem in)
-{
-       static const widelimb two120 = ((widelimb) 1) << 120;
-       static const widelimb two120m64 = (((widelimb) 1) << 120) -
-       (((widelimb) 1) << 64);
-       static const widelimb two120m104m64 = (((widelimb) 1) << 120) -
-       (((widelimb) 1) << 104) - (((widelimb) 1) << 64);
-
-       /* Add 0 mod 2^224-2^96+1 to ensure out > in */
-       out[0] += two120;
-       out[1] += two120m64;
-       out[2] += two120m64;
-       out[3] += two120;
-       out[4] += two120m104m64;
-       out[5] += two120m64;
-       out[6] += two120m64;
-
-       out[0] -= in[0];
-       out[1] -= in[1];
-       out[2] -= in[2];
-       out[3] -= in[3];
-       out[4] -= in[4];
-       out[5] -= in[5];
-       out[6] -= in[6];
-}
-
-/* Subtract in mixed mode: out128 -= in64 */
-/* in[i] < 2^63 */
-static void
-felem_diff_128_64(widefelem out, const felem in)
-{
-       static const widelimb two64p8 = (((widelimb) 1) << 64) +
-       (((widelimb) 1) << 8);
-       static const widelimb two64m8 = (((widelimb) 1) << 64) -
-       (((widelimb) 1) << 8);
-       static const widelimb two64m48m8 = (((widelimb) 1) << 64) -
-       (((widelimb) 1) << 48) - (((widelimb) 1) << 8);
-
-       /* Add 0 mod 2^224-2^96+1 to ensure out > in */
-       out[0] += two64p8;
-       out[1] += two64m48m8;
-       out[2] += two64m8;
-       out[3] += two64m8;
-
-       out[0] -= in[0];
-       out[1] -= in[1];
-       out[2] -= in[2];
-       out[3] -= in[3];
-}
-
-/* Multiply a field element by a scalar: out = out * scalar
- * The scalars we actually use are small, so results fit without overflow */
-static void
-felem_scalar(felem out, const limb scalar)
-{
-       out[0] *= scalar;
-       out[1] *= scalar;
-       out[2] *= scalar;
-       out[3] *= scalar;
-}
-
-/* Multiply an unreduced field element by a scalar: out = out * scalar
- * The scalars we actually use are small, so results fit without overflow */
-static void
-widefelem_scalar(widefelem out, const widelimb scalar)
-{
-       out[0] *= scalar;
-       out[1] *= scalar;
-       out[2] *= scalar;
-       out[3] *= scalar;
-       out[4] *= scalar;
-       out[5] *= scalar;
-       out[6] *= scalar;
-}
-
-/* Square a field element: out = in^2 */
-static void
-felem_square(widefelem out, const felem in)
-{
-       limb tmp0, tmp1, tmp2;
-       tmp0 = 2 * in[0];
-       tmp1 = 2 * in[1];
-       tmp2 = 2 * in[2];
-       out[0] = ((widelimb) in[0]) * in[0];
-       out[1] = ((widelimb) in[0]) * tmp1;
-       out[2] = ((widelimb) in[0]) * tmp2 + ((widelimb) in[1]) * in[1];
-       out[3] = ((widelimb) in[3]) * tmp0 +
-           ((widelimb) in[1]) * tmp2;
-       out[4] = ((widelimb) in[3]) * tmp1 + ((widelimb) in[2]) * in[2];
-       out[5] = ((widelimb) in[3]) * tmp2;
-       out[6] = ((widelimb) in[3]) * in[3];
-}
-
-/* Multiply two field elements: out = in1 * in2 */
-static void
-felem_mul(widefelem out, const felem in1, const felem in2)
-{
-       out[0] = ((widelimb) in1[0]) * in2[0];
-       out[1] = ((widelimb) in1[0]) * in2[1] + ((widelimb) in1[1]) * in2[0];
-       out[2] = ((widelimb) in1[0]) * in2[2] + ((widelimb) in1[1]) * in2[1] +
-           ((widelimb) in1[2]) * in2[0];
-       out[3] = ((widelimb) in1[0]) * in2[3] + ((widelimb) in1[1]) * in2[2] +
-           ((widelimb) in1[2]) * in2[1] + ((widelimb) in1[3]) * in2[0];
-       out[4] = ((widelimb) in1[1]) * in2[3] + ((widelimb) in1[2]) * in2[2] +
-           ((widelimb) in1[3]) * in2[1];
-       out[5] = ((widelimb) in1[2]) * in2[3] + ((widelimb) in1[3]) * in2[2];
-       out[6] = ((widelimb) in1[3]) * in2[3];
-}
-
-/* Reduce seven 128-bit coefficients to four 64-bit coefficients.
- * Requires in[i] < 2^126,
- * ensures out[0] < 2^56, out[1] < 2^56, out[2] < 2^56, out[3] <= 2^56 + 2^16 */
-static void
-felem_reduce(felem out, const widefelem in)
-{
-       static const widelimb two127p15 = (((widelimb) 1) << 127) +
-       (((widelimb) 1) << 15);
-       static const widelimb two127m71 = (((widelimb) 1) << 127) -
-       (((widelimb) 1) << 71);
-       static const widelimb two127m71m55 = (((widelimb) 1) << 127) -
-       (((widelimb) 1) << 71) - (((widelimb) 1) << 55);
-       widelimb output[5];
-
-       /* Add 0 mod 2^224-2^96+1 to ensure all differences are positive */
-       output[0] = in[0] + two127p15;
-       output[1] = in[1] + two127m71m55;
-       output[2] = in[2] + two127m71;
-       output[3] = in[3];
-       output[4] = in[4];
-
-       /* Eliminate in[4], in[5], in[6] */
-       output[4] += in[6] >> 16;
-       output[3] += (in[6] & 0xffff) << 40;
-       output[2] -= in[6];
-
-       output[3] += in[5] >> 16;
-       output[2] += (in[5] & 0xffff) << 40;
-       output[1] -= in[5];
-
-       output[2] += output[4] >> 16;
-       output[1] += (output[4] & 0xffff) << 40;
-       output[0] -= output[4];
-
-       /* Carry 2 -> 3 -> 4 */
-       output[3] += output[2] >> 56;
-       output[2] &= 0x00ffffffffffffff;
-
-       output[4] = output[3] >> 56;
-       output[3] &= 0x00ffffffffffffff;
-
-       /* Now output[2] < 2^56, output[3] < 2^56, output[4] < 2^72 */
-
-       /* Eliminate output[4] */
-       output[2] += output[4] >> 16;
-       /* output[2] < 2^56 + 2^56 = 2^57 */
-       output[1] += (output[4] & 0xffff) << 40;
-       output[0] -= output[4];
-
-       /* Carry 0 -> 1 -> 2 -> 3 */
-       output[1] += output[0] >> 56;
-       out[0] = output[0] & 0x00ffffffffffffff;
-
-       output[2] += output[1] >> 56;
-       /* output[2] < 2^57 + 2^72 */
-       out[1] = output[1] & 0x00ffffffffffffff;
-       output[3] += output[2] >> 56;
-       /* output[3] <= 2^56 + 2^16 */
-       out[2] = output[2] & 0x00ffffffffffffff;
-
-       /*
-        * out[0] < 2^56, out[1] < 2^56, out[2] < 2^56, out[3] <= 2^56 + 2^16
-        * (due to final carry), so out < 2*p
-        */
-       out[3] = output[3];
-}
-
-static void
-felem_square_reduce(felem out, const felem in)
-{
-       widefelem tmp;
-       felem_square(tmp, in);
-       felem_reduce(out, tmp);
-}
-
-static void
-felem_mul_reduce(felem out, const felem in1, const felem in2)
-{
-       widefelem tmp;
-       felem_mul(tmp, in1, in2);
-       felem_reduce(out, tmp);
-}
-
-/* Reduce to unique minimal representation.
- * Requires 0 <= in < 2*p (always call felem_reduce first) */
-static void
-felem_contract(felem out, const felem in)
-{
-       static const int64_t two56 = ((limb) 1) << 56;
-       /* 0 <= in < 2*p, p = 2^224 - 2^96 + 1 */
-       /* if in > p , reduce in = in - 2^224 + 2^96 - 1 */
-       int64_t tmp[4], a;
-       tmp[0] = in[0];
-       tmp[1] = in[1];
-       tmp[2] = in[2];
-       tmp[3] = in[3];
-       /* Case 1: a = 1 iff in >= 2^224 */
-       a = (in[3] >> 56);
-       tmp[0] -= a;
-       tmp[1] += a << 40;
-       tmp[3] &= 0x00ffffffffffffff;
-       /*
-        * Case 2: a = 0 iff p <= in < 2^224, i.e., the high 128 bits are all
-        * 1 and the lower part is non-zero
-        */
-       a = ((in[3] & in[2] & (in[1] | 0x000000ffffffffff)) + 1) |
-           (((int64_t) (in[0] + (in[1] & 0x000000ffffffffff)) - 1) >> 63);
-       a &= 0x00ffffffffffffff;
-       /* turn a into an all-one mask (if a = 0) or an all-zero mask */
-       a = (a - 1) >> 63;
-       /* subtract 2^224 - 2^96 + 1 if a is all-one */
-       tmp[3] &= a ^ 0xffffffffffffffff;
-       tmp[2] &= a ^ 0xffffffffffffffff;
-       tmp[1] &= (a ^ 0xffffffffffffffff) | 0x000000ffffffffff;
-       tmp[0] -= 1 & a;
-
-       /*
-        * eliminate negative coefficients: if tmp[0] is negative, tmp[1]
-        * must be non-zero, so we only need one step
-        */
-       a = tmp[0] >> 63;
-       tmp[0] += two56 & a;
-       tmp[1] -= 1 & a;
-
-       /* carry 1 -> 2 -> 3 */
-       tmp[2] += tmp[1] >> 56;
-       tmp[1] &= 0x00ffffffffffffff;
-
-       tmp[3] += tmp[2] >> 56;
-       tmp[2] &= 0x00ffffffffffffff;
-
-       /* Now 0 <= out < p */
-       out[0] = tmp[0];
-       out[1] = tmp[1];
-       out[2] = tmp[2];
-       out[3] = tmp[3];
-}
-
-/* Zero-check: returns 1 if input is 0, and 0 otherwise.
- * We know that field elements are reduced to in < 2^225,
- * so we only need to check three cases: 0, 2^224 - 2^96 + 1,
- * and 2^225 - 2^97 + 2 */
-static limb
-felem_is_zero(const felem in)
-{
-       limb zero, two224m96p1, two225m97p2;
-
-       zero = in[0] | in[1] | in[2] | in[3];
-       zero = (((int64_t) (zero) - 1) >> 63) & 1;
-       two224m96p1 = (in[0] ^ 1) | (in[1] ^ 0x00ffff0000000000)
-           | (in[2] ^ 0x00ffffffffffffff) | (in[3] ^ 0x00ffffffffffffff);
-       two224m96p1 = (((int64_t) (two224m96p1) - 1) >> 63) & 1;
-       two225m97p2 = (in[0] ^ 2) | (in[1] ^ 0x00fffe0000000000)
-           | (in[2] ^ 0x00ffffffffffffff) | (in[3] ^ 0x01ffffffffffffff);
-       two225m97p2 = (((int64_t) (two225m97p2) - 1) >> 63) & 1;
-       return (zero | two224m96p1 | two225m97p2);
-}
-
-static limb
-felem_is_zero_int(const felem in)
-{
-       return (int) (felem_is_zero(in) & ((limb) 1));
-}
-
-/* Invert a field element */
-/* Computation chain copied from djb's code */
-static void
-felem_inv(felem out, const felem in)
-{
-       felem ftmp, ftmp2, ftmp3, ftmp4;
-       widefelem tmp;
-       unsigned i;
-
-       felem_square(tmp, in);
-       felem_reduce(ftmp, tmp);/* 2 */
-       felem_mul(tmp, in, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^2 - 1 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^3 - 2 */
-       felem_mul(tmp, in, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^3 - 1 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp2, tmp);       /* 2^4 - 2 */
-       felem_square(tmp, ftmp2);
-       felem_reduce(ftmp2, tmp);       /* 2^5 - 4 */
-       felem_square(tmp, ftmp2);
-       felem_reduce(ftmp2, tmp);       /* 2^6 - 8 */
-       felem_mul(tmp, ftmp2, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^6 - 1 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp2, tmp);       /* 2^7 - 2 */
-       for (i = 0; i < 5; ++i) {       /* 2^12 - 2^6 */
-               felem_square(tmp, ftmp2);
-               felem_reduce(ftmp2, tmp);
-       }
-       felem_mul(tmp, ftmp2, ftmp);
-       felem_reduce(ftmp2, tmp);       /* 2^12 - 1 */
-       felem_square(tmp, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^13 - 2 */
-       for (i = 0; i < 11; ++i) {      /* 2^24 - 2^12 */
-               felem_square(tmp, ftmp3);
-               felem_reduce(ftmp3, tmp);
-       }
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp2, tmp);       /* 2^24 - 1 */
-       felem_square(tmp, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^25 - 2 */
-       for (i = 0; i < 23; ++i) {      /* 2^48 - 2^24 */
-               felem_square(tmp, ftmp3);
-               felem_reduce(ftmp3, tmp);
-       }
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^48 - 1 */
-       felem_square(tmp, ftmp3);
-       felem_reduce(ftmp4, tmp);       /* 2^49 - 2 */
-       for (i = 0; i < 47; ++i) {      /* 2^96 - 2^48 */
-               felem_square(tmp, ftmp4);
-               felem_reduce(ftmp4, tmp);
-       }
-       felem_mul(tmp, ftmp3, ftmp4);
-       felem_reduce(ftmp3, tmp);       /* 2^96 - 1 */
-       felem_square(tmp, ftmp3);
-       felem_reduce(ftmp4, tmp);       /* 2^97 - 2 */
-       for (i = 0; i < 23; ++i) {      /* 2^120 - 2^24 */
-               felem_square(tmp, ftmp4);
-               felem_reduce(ftmp4, tmp);
-       }
-       felem_mul(tmp, ftmp2, ftmp4);
-       felem_reduce(ftmp2, tmp);       /* 2^120 - 1 */
-       for (i = 0; i < 6; ++i) {       /* 2^126 - 2^6 */
-               felem_square(tmp, ftmp2);
-               felem_reduce(ftmp2, tmp);
-       }
-       felem_mul(tmp, ftmp2, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^126 - 1 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^127 - 2 */
-       felem_mul(tmp, ftmp, in);
-       felem_reduce(ftmp, tmp);/* 2^127 - 1 */
-       for (i = 0; i < 97; ++i) {      /* 2^224 - 2^97 */
-               felem_square(tmp, ftmp);
-               felem_reduce(ftmp, tmp);
-       }
-       felem_mul(tmp, ftmp, ftmp3);
-       felem_reduce(out, tmp); /* 2^224 - 2^96 - 1 */
-}
-
-/* Copy in constant time:
- * if icopy == 1, copy in to out,
- * if icopy == 0, copy out to itself. */
-static void
-copy_conditional(felem out, const felem in, limb icopy)
-{
-       unsigned i;
-       /* icopy is a (64-bit) 0 or 1, so copy is either all-zero or all-one */
-       const limb copy = -icopy;
-       for (i = 0; i < 4; ++i) {
-               const limb tmp = copy & (in[i] ^ out[i]);
-               out[i] ^= tmp;
-       }
-}
-
-/******************************************************************************/
-/*                      ELLIPTIC CURVE POINT OPERATIONS
- *
- * Points are represented in Jacobian projective coordinates:
- * (X, Y, Z) corresponds to the affine point (X/Z^2, Y/Z^3),
- * or to the point at infinity if Z == 0.
- *
- */
-
-/* Double an elliptic curve point:
- * (X', Y', Z') = 2 * (X, Y, Z), where
- * X' = (3 * (X - Z^2) * (X + Z^2))^2 - 8 * X * Y^2
- * Y' = 3 * (X - Z^2) * (X + Z^2) * (4 * X * Y^2 - X') - 8 * Y^2
- * Z' = (Y + Z)^2 - Y^2 - Z^2 = 2 * Y * Z
- * Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed,
- * while x_out == y_in is not (maybe this works, but it's not tested). */
-static void
-point_double(felem x_out, felem y_out, felem z_out,
-    const felem x_in, const felem y_in, const felem z_in)
-{
-       widefelem tmp, tmp2;
-       felem delta, gamma, beta, alpha, ftmp, ftmp2;
-
-       felem_assign(ftmp, x_in);
-       felem_assign(ftmp2, x_in);
-
-       /* delta = z^2 */
-       felem_square(tmp, z_in);
-       felem_reduce(delta, tmp);
-
-       /* gamma = y^2 */
-       felem_square(tmp, y_in);
-       felem_reduce(gamma, tmp);
-
-       /* beta = x*gamma */
-       felem_mul(tmp, x_in, gamma);
-       felem_reduce(beta, tmp);
-
-       /* alpha = 3*(x-delta)*(x+delta) */
-       felem_diff(ftmp, delta);
-       /* ftmp[i] < 2^57 + 2^58 + 2 < 2^59 */
-       felem_sum(ftmp2, delta);
-       /* ftmp2[i] < 2^57 + 2^57 = 2^58 */
-       felem_scalar(ftmp2, 3);
-       /* ftmp2[i] < 3 * 2^58 < 2^60 */
-       felem_mul(tmp, ftmp, ftmp2);
-       /* tmp[i] < 2^60 * 2^59 * 4 = 2^121 */
-       felem_reduce(alpha, tmp);
-
-       /* x' = alpha^2 - 8*beta */
-       felem_square(tmp, alpha);
-       /* tmp[i] < 4 * 2^57 * 2^57 = 2^116 */
-       felem_assign(ftmp, beta);
-       felem_scalar(ftmp, 8);
-       /* ftmp[i] < 8 * 2^57 = 2^60 */
-       felem_diff_128_64(tmp, ftmp);
-       /* tmp[i] < 2^116 + 2^64 + 8 < 2^117 */
-       felem_reduce(x_out, tmp);
-
-       /* z' = (y + z)^2 - gamma - delta */
-       felem_sum(delta, gamma);
-       /* delta[i] < 2^57 + 2^57 = 2^58 */
-       felem_assign(ftmp, y_in);
-       felem_sum(ftmp, z_in);
-       /* ftmp[i] < 2^57 + 2^57 = 2^58 */
-       felem_square(tmp, ftmp);
-       /* tmp[i] < 4 * 2^58 * 2^58 = 2^118 */
-       felem_diff_128_64(tmp, delta);
-       /* tmp[i] < 2^118 + 2^64 + 8 < 2^119 */
-       felem_reduce(z_out, tmp);
-
-       /* y' = alpha*(4*beta - x') - 8*gamma^2 */
-       felem_scalar(beta, 4);
-       /* beta[i] < 4 * 2^57 = 2^59 */
-       felem_diff(beta, x_out);
-       /* beta[i] < 2^59 + 2^58 + 2 < 2^60 */
-       felem_mul(tmp, alpha, beta);
-       /* tmp[i] < 4 * 2^57 * 2^60 = 2^119 */
-       felem_square(tmp2, gamma);
-       /* tmp2[i] < 4 * 2^57 * 2^57 = 2^116 */
-       widefelem_scalar(tmp2, 8);
-       /* tmp2[i] < 8 * 2^116 = 2^119 */
-       widefelem_diff(tmp, tmp2);
-       /* tmp[i] < 2^119 + 2^120 < 2^121 */
-       felem_reduce(y_out, tmp);
-}
-
-/* Add two elliptic curve points:
- * (X_1, Y_1, Z_1) + (X_2, Y_2, Z_2) = (X_3, Y_3, Z_3), where
- * X_3 = (Z_1^3 * Y_2 - Z_2^3 * Y_1)^2 - (Z_1^2 * X_2 - Z_2^2 * X_1)^3 -
- * 2 * Z_2^2 * X_1 * (Z_1^2 * X_2 - Z_2^2 * X_1)^2
- * Y_3 = (Z_1^3 * Y_2 - Z_2^3 * Y_1) * (Z_2^2 * X_1 * (Z_1^2 * X_2 - Z_2^2 * X_1)^2 - X_3) -
- *        Z_2^3 * Y_1 * (Z_1^2 * X_2 - Z_2^2 * X_1)^3
- * Z_3 = (Z_1^2 * X_2 - Z_2^2 * X_1) * (Z_1 * Z_2)
- *
- * This runs faster if 'mixed' is set, which requires Z_2 = 1 or Z_2 = 0.
- */
-
-/* This function is not entirely constant-time:
- * it includes a branch for checking whether the two input points are equal,
- * (while not equal to the point at infinity).
- * This case never happens during single point multiplication,
- * so there is no timing leak for ECDH or ECDSA signing. */
-static void
-point_add(felem x3, felem y3, felem z3,
-    const felem x1, const felem y1, const felem z1,
-    const int mixed, const felem x2, const felem y2, const felem z2)
-{
-       felem ftmp, ftmp2, ftmp3, ftmp4, ftmp5, x_out, y_out, z_out;
-       widefelem tmp, tmp2;
-       limb z1_is_zero, z2_is_zero, x_equal, y_equal;
-
-       if (!mixed) {
-               /* ftmp2 = z2^2 */
-               felem_square(tmp, z2);
-               felem_reduce(ftmp2, tmp);
-
-               /* ftmp4 = z2^3 */
-               felem_mul(tmp, ftmp2, z2);
-               felem_reduce(ftmp4, tmp);
-
-               /* ftmp4 = z2^3*y1 */
-               felem_mul(tmp2, ftmp4, y1);
-               felem_reduce(ftmp4, tmp2);
-
-               /* ftmp2 = z2^2*x1 */
-               felem_mul(tmp2, ftmp2, x1);
-               felem_reduce(ftmp2, tmp2);
-       } else {
-               /* We'll assume z2 = 1 (special case z2 = 0 is handled later) */
-
-               /* ftmp4 = z2^3*y1 */
-               felem_assign(ftmp4, y1);
-
-               /* ftmp2 = z2^2*x1 */
-               felem_assign(ftmp2, x1);
-       }
-
-       /* ftmp = z1^2 */
-       felem_square(tmp, z1);
-       felem_reduce(ftmp, tmp);
-
-       /* ftmp3 = z1^3 */
-       felem_mul(tmp, ftmp, z1);
-       felem_reduce(ftmp3, tmp);
-
-       /* tmp = z1^3*y2 */
-       felem_mul(tmp, ftmp3, y2);
-       /* tmp[i] < 4 * 2^57 * 2^57 = 2^116 */
-
-       /* ftmp3 = z1^3*y2 - z2^3*y1 */
-       felem_diff_128_64(tmp, ftmp4);
-       /* tmp[i] < 2^116 + 2^64 + 8 < 2^117 */
-       felem_reduce(ftmp3, tmp);
-
-       /* tmp = z1^2*x2 */
-       felem_mul(tmp, ftmp, x2);
-       /* tmp[i] < 4 * 2^57 * 2^57 = 2^116 */
-
-       /* ftmp = z1^2*x2 - z2^2*x1 */
-       felem_diff_128_64(tmp, ftmp2);
-       /* tmp[i] < 2^116 + 2^64 + 8 < 2^117 */
-       felem_reduce(ftmp, tmp);
-
-       /*
-        * the formulae are incorrect if the points are equal so we check for
-        * this and do doubling if this happens
-        */
-       x_equal = felem_is_zero(ftmp);
-       y_equal = felem_is_zero(ftmp3);
-       z1_is_zero = felem_is_zero(z1);
-       z2_is_zero = felem_is_zero(z2);
-       /* In affine coordinates, (X_1, Y_1) == (X_2, Y_2) */
-       if (x_equal && y_equal && !z1_is_zero && !z2_is_zero) {
-               point_double(x3, y3, z3, x1, y1, z1);
-               return;
-       }
-       /* ftmp5 = z1*z2 */
-       if (!mixed) {
-               felem_mul(tmp, z1, z2);
-               felem_reduce(ftmp5, tmp);
-       } else {
-               /* special case z2 = 0 is handled later */
-               felem_assign(ftmp5, z1);
-       }
-
-       /* z_out = (z1^2*x2 - z2^2*x1)*(z1*z2) */
-       felem_mul(tmp, ftmp, ftmp5);
-       felem_reduce(z_out, tmp);
-
-       /* ftmp = (z1^2*x2 - z2^2*x1)^2 */
-       felem_assign(ftmp5, ftmp);
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);
-
-       /* ftmp5 = (z1^2*x2 - z2^2*x1)^3 */
-       felem_mul(tmp, ftmp, ftmp5);
-       felem_reduce(ftmp5, tmp);
-
-       /* ftmp2 = z2^2*x1*(z1^2*x2 - z2^2*x1)^2 */
-       felem_mul(tmp, ftmp2, ftmp);
-       felem_reduce(ftmp2, tmp);
-
-       /* tmp = z2^3*y1*(z1^2*x2 - z2^2*x1)^3 */
-       felem_mul(tmp, ftmp4, ftmp5);
-       /* tmp[i] < 4 * 2^57 * 2^57 = 2^116 */
-
-       /* tmp2 = (z1^3*y2 - z2^3*y1)^2 */
-       felem_square(tmp2, ftmp3);
-       /* tmp2[i] < 4 * 2^57 * 2^57 < 2^116 */
-
-       /* tmp2 = (z1^3*y2 - z2^3*y1)^2 - (z1^2*x2 - z2^2*x1)^3 */
-       felem_diff_128_64(tmp2, ftmp5);
-       /* tmp2[i] < 2^116 + 2^64 + 8 < 2^117 */
-
-       /* ftmp5 = 2*z2^2*x1*(z1^2*x2 - z2^2*x1)^2 */
-       felem_assign(ftmp5, ftmp2);
-       felem_scalar(ftmp5, 2);
-       /* ftmp5[i] < 2 * 2^57 = 2^58 */
-
-       /*
-        * x_out = (z1^3*y2 - z2^3*y1)^2 - (z1^2*x2 - z2^2*x1)^3 -
-        * 2*z2^2*x1*(z1^2*x2 - z2^2*x1)^2
-        */
-       felem_diff_128_64(tmp2, ftmp5);
-       /* tmp2[i] < 2^117 + 2^64 + 8 < 2^118 */
-       felem_reduce(x_out, tmp2);
-
-       /* ftmp2 = z2^2*x1*(z1^2*x2 - z2^2*x1)^2 - x_out */
-       felem_diff(ftmp2, x_out);
-       /* ftmp2[i] < 2^57 + 2^58 + 2 < 2^59 */
-
-       /* tmp2 = (z1^3*y2 - z2^3*y1)*(z2^2*x1*(z1^2*x2 - z2^2*x1)^2 - x_out) */
-       felem_mul(tmp2, ftmp3, ftmp2);
-       /* tmp2[i] < 4 * 2^57 * 2^59 = 2^118 */
-
-       /*
-        * y_out = (z1^3*y2 - z2^3*y1)*(z2^2*x1*(z1^2*x2 - z2^2*x1)^2 -
-        * x_out) - z2^3*y1*(z1^2*x2 - z2^2*x1)^3
-        */
-       widefelem_diff(tmp2, tmp);
-       /* tmp2[i] < 2^118 + 2^120 < 2^121 */
-       felem_reduce(y_out, tmp2);
-
-       /*
-        * the result (x_out, y_out, z_out) is incorrect if one of the inputs
-        * is the point at infinity, so we need to check for this separately
-        */
-
-       /* if point 1 is at infinity, copy point 2 to output, and vice versa */
-       copy_conditional(x_out, x2, z1_is_zero);
-       copy_conditional(x_out, x1, z2_is_zero);
-       copy_conditional(y_out, y2, z1_is_zero);
-       copy_conditional(y_out, y1, z2_is_zero);
-       copy_conditional(z_out, z2, z1_is_zero);
-       copy_conditional(z_out, z1, z2_is_zero);
-       felem_assign(x3, x_out);
-       felem_assign(y3, y_out);
-       felem_assign(z3, z_out);
-}
-
-/* select_point selects the |idx|th point from a precomputation table and
- * copies it to out. */
-static void
-select_point(const u64 idx, unsigned int size, const felem pre_comp[ /* size */ ][3], felem out[3])
-{
-       unsigned i, j;
-       limb *outlimbs = &out[0][0];
-       memset(outlimbs, 0, 3 * sizeof(felem));
-
-       for (i = 0; i < size; i++) {
-               const limb *inlimbs = &pre_comp[i][0][0];
-               u64 mask = i ^ idx;
-               mask |= mask >> 4;
-               mask |= mask >> 2;
-               mask |= mask >> 1;
-               mask &= 1;
-               mask--;
-               for (j = 0; j < 4 * 3; j++)
-                       outlimbs[j] |= inlimbs[j] & mask;
-       }
-}
-
-/* get_bit returns the |i|th bit in |in| */
-static char
-get_bit(const felem_bytearray in, unsigned i)
-{
-       if (i >= 224)
-               return 0;
-       return (in[i >> 3] >> (i & 7)) & 1;
-}
-
-/* Interleaved point multiplication using precomputed point multiples:
- * The small point multiples 0*P, 1*P, ..., 16*P are in pre_comp[],
- * the scalars in scalars[]. If g_scalar is non-NULL, we also add this multiple
- * of the generator, using certain (large) precomputed multiples in g_pre_comp.
- * Output point (X, Y, Z) is stored in x_out, y_out, z_out */
-static void
-batch_mul(felem x_out, felem y_out, felem z_out,
-    const felem_bytearray scalars[], const unsigned num_points, const u8 * g_scalar,
-    const int mixed, const felem pre_comp[][17][3], const felem g_pre_comp[2][16][3])
-{
-       int i, skip;
-       unsigned num;
-       unsigned gen_mul = (g_scalar != NULL);
-       felem nq[3], tmp[4];
-       u64 bits;
-       u8 sign, digit;
-
-       /* set nq to the point at infinity */
-       memset(nq, 0, 3 * sizeof(felem));
-
-       /*
-        * Loop over all scalars msb-to-lsb, interleaving additions of
-        * multiples of the generator (two in each of the last 28 rounds) and
-        * additions of other points multiples (every 5th round).
-        */
-       skip = 1;               /* save two point operations in the first
-                                * round */
-       for (i = (num_points ? 220 : 27); i >= 0; --i) {
-               /* double */
-               if (!skip)
-                       point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
-
-               /* add multiples of the generator */
-               if (gen_mul && (i <= 27)) {
-                       /* first, look 28 bits upwards */
-                       bits = get_bit(g_scalar, i + 196) << 3;
-                       bits |= get_bit(g_scalar, i + 140) << 2;
-                       bits |= get_bit(g_scalar, i + 84) << 1;
-                       bits |= get_bit(g_scalar, i + 28);
-                       /* select the point to add, in constant time */
-                       select_point(bits, 16, g_pre_comp[1], tmp);
-
-                       if (!skip) {
-                               point_add(nq[0], nq[1], nq[2],
-                                   nq[0], nq[1], nq[2],
-                                   1 /* mixed */ , tmp[0], tmp[1], tmp[2]);
-                       } else {
-                               memcpy(nq, tmp, 3 * sizeof(felem));
-                               skip = 0;
-                       }
-
-                       /* second, look at the current position */
-                       bits = get_bit(g_scalar, i + 168) << 3;
-                       bits |= get_bit(g_scalar, i + 112) << 2;
-                       bits |= get_bit(g_scalar, i + 56) << 1;
-                       bits |= get_bit(g_scalar, i);
-                       /* select the point to add, in constant time */
-                       select_point(bits, 16, g_pre_comp[0], tmp);
-                       point_add(nq[0], nq[1], nq[2],
-                           nq[0], nq[1], nq[2],
-                           1 /* mixed */ , tmp[0], tmp[1], tmp[2]);
-               }
-               /* do other additions every 5 doublings */
-               if (num_points && (i % 5 == 0)) {
-                       /* loop over all scalars */
-                       for (num = 0; num < num_points; ++num) {
-                               bits = get_bit(scalars[num], i + 4) << 5;
-                               bits |= get_bit(scalars[num], i + 3) << 4;
-                               bits |= get_bit(scalars[num], i + 2) << 3;
-                               bits |= get_bit(scalars[num], i + 1) << 2;
-                               bits |= get_bit(scalars[num], i) << 1;
-                               bits |= get_bit(scalars[num], i - 1);
-                               ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
-
-                               /* select the point to add or subtract */
-                               select_point(digit, 17, pre_comp[num], tmp);
-                               felem_neg(tmp[3], tmp[1]);      /* (X, -Y, Z) is the
-                                                                * negative point */
-                               copy_conditional(tmp[1], tmp[3], sign);
-
-                               if (!skip) {
-                                       point_add(nq[0], nq[1], nq[2],
-                                           nq[0], nq[1], nq[2],
-                                           mixed, tmp[0], tmp[1], tmp[2]);
-                               } else {
-                                       memcpy(nq, tmp, 3 * sizeof(felem));
-                                       skip = 0;
-                               }
-                       }
-               }
-       }
-       felem_assign(x_out, nq[0]);
-       felem_assign(y_out, nq[1]);
-       felem_assign(z_out, nq[2]);
-}
-
-/******************************************************************************/
-/*                    FUNCTIONS TO MANAGE PRECOMPUTATION
- */
-
-static NISTP224_PRE_COMP *
-nistp224_pre_comp_new()
-{
-       NISTP224_PRE_COMP *ret = NULL;
-       ret = malloc(sizeof *ret);
-       if (!ret) {
-               ECerror(ERR_R_MALLOC_FAILURE);
-               return ret;
-       }
-       memset(ret->g_pre_comp, 0, sizeof(ret->g_pre_comp));
-       ret->references = 1;
-       return ret;
-}
-
-static void *
-nistp224_pre_comp_dup(void *src_)
-{
-       NISTP224_PRE_COMP *src = src_;
-
-       /* no need to actually copy, these objects never change! */
-       CRYPTO_add(&src->references, 1, CRYPTO_LOCK_EC_PRE_COMP);
-
-       return src_;
-}
-
-static void
-nistp224_pre_comp_free(void *pre_)
-{
-       int i;
-       NISTP224_PRE_COMP *pre = pre_;
-
-       if (!pre)
-               return;
-
-       i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
-       if (i > 0)
-               return;
-
-       free(pre);
-}
-
-static void
-nistp224_pre_comp_clear_free(void *pre_)
-{
-       int i;
-       NISTP224_PRE_COMP *pre = pre_;
-
-       if (!pre)
-               return;
-
-       i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
-       if (i > 0)
-               return;
-
-       freezero(pre, sizeof *pre);
-}
-
-/******************************************************************************/
-/*                        OPENSSL EC_METHOD FUNCTIONS
- */
-
-int
-ec_GFp_nistp224_group_init(EC_GROUP *group)
-{
-       int ret;
-       ret = ec_GFp_simple_group_init(group);
-       group->a_is_minus3 = 1;
-       return ret;
-}
-
-int
-ec_GFp_nistp224_group_set_curve(EC_GROUP *group, const BIGNUM *p,
-    const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx)
-{
-       int ret = 0;
-       BN_CTX *new_ctx = NULL;
-       BIGNUM *curve_p, *curve_a, *curve_b;
-
-       if (ctx == NULL)
-               if ((ctx = new_ctx = BN_CTX_new()) == NULL)
-                       return 0;
-       BN_CTX_start(ctx);
-       if (((curve_p = BN_CTX_get(ctx)) == NULL) ||
-           ((curve_a = BN_CTX_get(ctx)) == NULL) ||
-           ((curve_b = BN_CTX_get(ctx)) == NULL))
-               goto err;
-       BN_bin2bn(nistp224_curve_params[0], sizeof(felem_bytearray), curve_p);
-       BN_bin2bn(nistp224_curve_params[1], sizeof(felem_bytearray), curve_a);
-       BN_bin2bn(nistp224_curve_params[2], sizeof(felem_bytearray), curve_b);
-       if ((BN_cmp(curve_p, p)) || (BN_cmp(curve_a, a)) ||
-           (BN_cmp(curve_b, b))) {
-               ECerror(EC_R_WRONG_CURVE_PARAMETERS);
-               goto err;
-       }
-       group->field_mod_func = BN_nist_mod_224;
-       ret = ec_GFp_simple_group_set_curve(group, p, a, b, ctx);
- err:
-       BN_CTX_end(ctx);
-       BN_CTX_free(new_ctx);
-       return ret;
-}
-
-/* Takes the Jacobian coordinates (X, Y, Z) of a point and returns
- * (X', Y') = (X/Z^2, Y/Z^3) */
-int
-ec_GFp_nistp224_point_get_affine_coordinates(const EC_GROUP *group,
-    const EC_POINT *point, BIGNUM *x, BIGNUM *y, BN_CTX *ctx)
-{
-       felem z1, z2, x_in, y_in, x_out, y_out;
-       widefelem tmp;
-
-       if (EC_POINT_is_at_infinity(group, point) > 0) {
-               ECerror(EC_R_POINT_AT_INFINITY);
-               return 0;
-       }
-       if ((!BN_to_felem(x_in, &point->X)) || (!BN_to_felem(y_in, &point->Y)) ||
-           (!BN_to_felem(z1, &point->Z)))
-               return 0;
-       felem_inv(z2, z1);
-       felem_square(tmp, z2);
-       felem_reduce(z1, tmp);
-       felem_mul(tmp, x_in, z1);
-       felem_reduce(x_in, tmp);
-       felem_contract(x_out, x_in);
-       if (x != NULL) {
-               if (!felem_to_BN(x, x_out)) {
-                       ECerror(ERR_R_BN_LIB);
-                       return 0;
-               }
-       }
-       felem_mul(tmp, z1, z2);
-       felem_reduce(z1, tmp);
-       felem_mul(tmp, y_in, z1);
-       felem_reduce(y_in, tmp);
-       felem_contract(y_out, y_in);
-       if (y != NULL) {
-               if (!felem_to_BN(y, y_out)) {
-                       ECerror(ERR_R_BN_LIB);
-                       return 0;
-               }
-       }
-       return 1;
-}
-
-static void
-make_points_affine(size_t num, felem points[ /* num */ ][3], felem tmp_felems[ /* num+1 */ ])
-{
-       /*
-        * Runs in constant time, unless an input is the point at infinity
-        * (which normally shouldn't happen).
-        */
-       ec_GFp_nistp_points_make_affine_internal(
-           num,
-           points,
-           sizeof(felem),
-           tmp_felems,
-           (void (*) (void *)) felem_one,
-           (int (*) (const void *)) felem_is_zero_int,
-           (void (*) (void *, const void *)) felem_assign,
-           (void (*) (void *, const void *)) felem_square_reduce,
-           (void (*) (void *, const void *, const void *)) felem_mul_reduce,
-           (void (*) (void *, const void *)) felem_inv,
-           (void (*) (void *, const void *)) felem_contract);
-}
-
-/* Computes scalar*generator + \sum scalars[i]*points[i], ignoring NULL values
- * Result is stored in r (r can equal one of the inputs). */
-int
-ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
-    const BIGNUM *scalar, size_t num, const EC_POINT *points[],
-    const BIGNUM *scalars[], BN_CTX *ctx)
-{
-       int ret = 0;
-       int j;
-       unsigned i;
-       int mixed = 0;
-       BN_CTX *new_ctx = NULL;
-       BIGNUM *x, *y, *z, *tmp_scalar;
-       felem_bytearray g_secret;
-       felem_bytearray *secrets = NULL;
-       felem(*pre_comp)[17][3] = NULL;
-       felem *tmp_felems = NULL;
-       felem_bytearray tmp;
-       unsigned num_bytes;
-       int have_pre_comp = 0;
-       size_t num_points = num;
-       felem x_in, y_in, z_in, x_out, y_out, z_out;
-       NISTP224_PRE_COMP *pre = NULL;
-       const felem(*g_pre_comp)[16][3] = NULL;
-       EC_POINT *generator = NULL;
-       const EC_POINT *p = NULL;
-       const BIGNUM *p_scalar = NULL;
-
-       if (ctx == NULL)
-               if ((ctx = new_ctx = BN_CTX_new()) == NULL)
-                       return 0;
-       BN_CTX_start(ctx);
-       if (((x = BN_CTX_get(ctx)) == NULL) ||
-           ((y = BN_CTX_get(ctx)) == NULL) ||
-           ((z = BN_CTX_get(ctx)) == NULL) ||
-           ((tmp_scalar = BN_CTX_get(ctx)) == NULL))
-               goto err;
-
-       if (scalar != NULL) {
-               pre = EC_EX_DATA_get_data(group->extra_data,
-                   nistp224_pre_comp_dup, nistp224_pre_comp_free,
-                   nistp224_pre_comp_clear_free);
-               if (pre)
-                       /* we have precomputation, try to use it */
-                       g_pre_comp = (const felem(*)[16][3]) pre->g_pre_comp;
-               else
-                       /* try to use the standard precomputation */
-                       g_pre_comp = &gmul[0];
-               generator = EC_POINT_new(group);
-               if (generator == NULL)
-                       goto err;
-               /* get the generator from precomputation */
-               if (!felem_to_BN(x, g_pre_comp[0][1][0]) ||
-                   !felem_to_BN(y, g_pre_comp[0][1][1]) ||
-                   !felem_to_BN(z, g_pre_comp[0][1][2])) {
-                       ECerror(ERR_R_BN_LIB);
-                       goto err;
-               }
-               if (!EC_POINT_set_Jprojective_coordinates(group, generator,
-                   x, y, z, ctx))
-                       goto err;
-               if (0 == EC_POINT_cmp(group, generator, group->generator, ctx))
-                       /* precomputation matches generator */
-                       have_pre_comp = 1;
-               else
-                       /*
-                        * we don't have valid precomputation: treat the
-                        * generator as a random point
-                        */
-                       num_points = num_points + 1;
-       }
-       if (num_points > 0) {
-               if (num_points >= 3) {
-                       /*
-                        * unless we precompute multiples for just one or two
-                        * points, converting those into affine form is time
-                        * well spent
-                        */
-                       mixed = 1;
-               }
-               secrets = calloc(num_points, sizeof(felem_bytearray));
-               pre_comp = calloc(num_points, 17 * 3 * sizeof(felem));
-               if (mixed) {
-                       /* XXX should do more int overflow checking */
-                       tmp_felems = reallocarray(NULL,
-                           (num_points * 17 + 1), sizeof(felem));
-               }
-               if ((secrets == NULL) || (pre_comp == NULL) || (mixed && (tmp_felems == NULL))) {
-                       ECerror(ERR_R_MALLOC_FAILURE);
-                       goto err;
-               }
-               /*
-                * we treat NULL scalars as 0, and NULL points as points at
-                * infinity, i.e., they contribute nothing to the linear
-                * combination
-                */
-               for (i = 0; i < num_points; ++i) {
-                       if (i == num)
-                               /* the generator */
-                       {
-                               p = EC_GROUP_get0_generator(group);
-                               p_scalar = scalar;
-                       } else
-                               /* the i^th point */
-                       {
-                               p = points[i];
-                               p_scalar = scalars[i];
-                       }
-                       if ((p_scalar != NULL) && (p != NULL)) {
-                               /* reduce scalar to 0 <= scalar < 2^224 */
-                               if ((BN_num_bits(p_scalar) > 224) || (BN_is_negative(p_scalar))) {
-                                       /*
-                                        * this is an unusual input, and we
-                                        * don't guarantee constant-timeness
-                                        */
-                                       if (!BN_nnmod(tmp_scalar, p_scalar, &group->order, ctx)) {
-                                               ECerror(ERR_R_BN_LIB);
-                                               goto err;
-                                       }
-                                       num_bytes = BN_bn2bin(tmp_scalar, tmp);
-                               } else
-                                       num_bytes = BN_bn2bin(p_scalar, tmp);
-                               flip_endian(secrets[i], tmp, num_bytes);
-                               /* precompute multiples */
-                               if ((!BN_to_felem(x_out, &p->X)) ||
-                                   (!BN_to_felem(y_out, &p->Y)) ||
-                                   (!BN_to_felem(z_out, &p->Z)))
-                                       goto err;
-                               felem_assign(pre_comp[i][1][0], x_out);
-                               felem_assign(pre_comp[i][1][1], y_out);
-                               felem_assign(pre_comp[i][1][2], z_out);
-                               for (j = 2; j <= 16; ++j) {
-                                       if (j & 1) {
-                                               point_add(
-                                                   pre_comp[i][j][0], pre_comp[i][j][1], pre_comp[i][j][2],
-                                                   pre_comp[i][1][0], pre_comp[i][1][1], pre_comp[i][1][2],
-                                                   0, pre_comp[i][j - 1][0], pre_comp[i][j - 1][1], pre_comp[i][j - 1][2]);
-                                       } else {
-                                               point_double(
-                                                   pre_comp[i][j][0], pre_comp[i][j][1], pre_comp[i][j][2],
-                                                   pre_comp[i][j / 2][0], pre_comp[i][j / 2][1], pre_comp[i][j / 2][2]);
-                                       }
-                               }
-                       }
-               }
-               if (mixed)
-                       make_points_affine(num_points * 17, pre_comp[0], tmp_felems);
-       }
-       /* the scalar for the generator */
-       if ((scalar != NULL) && (have_pre_comp)) {
-               memset(g_secret, 0, sizeof g_secret);
-               /* reduce scalar to 0 <= scalar < 2^224 */
-               if ((BN_num_bits(scalar) > 224) || (BN_is_negative(scalar))) {
-                       /*
-                        * this is an unusual input, and we don't guarantee
-                        * constant-timeness
-                        */
-                       if (!BN_nnmod(tmp_scalar, scalar, &group->order, ctx)) {
-                               ECerror(ERR_R_BN_LIB);
-                               goto err;
-                       }
-                       num_bytes = BN_bn2bin(tmp_scalar, tmp);
-               } else
-                       num_bytes = BN_bn2bin(scalar, tmp);
-               flip_endian(g_secret, tmp, num_bytes);
-               /* do the multiplication with generator precomputation */
-               batch_mul(x_out, y_out, z_out,
-                   (const felem_bytearray(*)) secrets, num_points,
-                   g_secret,
-                   mixed, (const felem(*)[17][3]) pre_comp,
-                   g_pre_comp);
-       } else
-               /* do the multiplication without generator precomputation */
-               batch_mul(x_out, y_out, z_out,
-                   (const felem_bytearray(*)) secrets, num_points,
-                   NULL, mixed, (const felem(*)[17][3]) pre_comp, NULL);
-       /* reduce the output to its unique minimal representation */
-       felem_contract(x_in, x_out);
-       felem_contract(y_in, y_out);
-       felem_contract(z_in, z_out);
-       if ((!felem_to_BN(x, x_in)) || (!felem_to_BN(y, y_in)) ||
-           (!felem_to_BN(z, z_in))) {
-               ECerror(ERR_R_BN_LIB);
-               goto err;
-       }
-       ret = EC_POINT_set_Jprojective_coordinates(group, r, x, y, z, ctx);
-
- err:
-       BN_CTX_end(ctx);
-       EC_POINT_free(generator);
-       BN_CTX_free(new_ctx);
-       free(secrets);
-       free(pre_comp);
-       free(tmp_felems);
-       return ret;
-}
-
-int
-ec_GFp_nistp224_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
-{
-       int ret = 0;
-       NISTP224_PRE_COMP *pre = NULL;
-       int i, j;
-       BN_CTX *new_ctx = NULL;
-       BIGNUM *x, *y;
-       EC_POINT *generator = NULL;
-       felem tmp_felems[32];
-
-       /* throw away old precomputation */
-       EC_EX_DATA_free_data(&group->extra_data, nistp224_pre_comp_dup,
-           nistp224_pre_comp_free, nistp224_pre_comp_clear_free);
-       if (ctx == NULL)
-               if ((ctx = new_ctx = BN_CTX_new()) == NULL)
-                       return 0;
-       BN_CTX_start(ctx);
-       if (((x = BN_CTX_get(ctx)) == NULL) ||
-           ((y = BN_CTX_get(ctx)) == NULL))
-               goto err;
-       /* get the generator */
-       if (group->generator == NULL)
-               goto err;
-       generator = EC_POINT_new(group);
-       if (generator == NULL)
-               goto err;
-       BN_bin2bn(nistp224_curve_params[3], sizeof(felem_bytearray), x);
-       BN_bin2bn(nistp224_curve_params[4], sizeof(felem_bytearray), y);
-       if (!EC_POINT_set_affine_coordinates(group, generator, x, y, ctx))
-               goto err;
-       if ((pre = nistp224_pre_comp_new()) == NULL)
-               goto err;
-       /* if the generator is the standard one, use built-in precomputation */
-       if (0 == EC_POINT_cmp(group, generator, group->generator, ctx)) {
-               memcpy(pre->g_pre_comp, gmul, sizeof(pre->g_pre_comp));
-               ret = 1;
-               goto err;
-       }
-       if ((!BN_to_felem(pre->g_pre_comp[0][1][0], &group->generator->X)) ||
-           (!BN_to_felem(pre->g_pre_comp[0][1][1], &group->generator->Y)) ||
-           (!BN_to_felem(pre->g_pre_comp[0][1][2], &group->generator->Z)))
-               goto err;
-       /*
-        * compute 2^56*G, 2^112*G, 2^168*G for the first table, 2^28*G,
-        * 2^84*G, 2^140*G, 2^196*G for the second one
-        */
-       for (i = 1; i <= 8; i <<= 1) {
-               point_double(
-                   pre->g_pre_comp[1][i][0], pre->g_pre_comp[1][i][1], pre->g_pre_comp[1][i][2],
-                   pre->g_pre_comp[0][i][0], pre->g_pre_comp[0][i][1], pre->g_pre_comp[0][i][2]);
-               for (j = 0; j < 27; ++j) {
-                       point_double(
-                           pre->g_pre_comp[1][i][0], pre->g_pre_comp[1][i][1], pre->g_pre_comp[1][i][2],
-                           pre->g_pre_comp[1][i][0], pre->g_pre_comp[1][i][1], pre->g_pre_comp[1][i][2]);
-               }
-               if (i == 8)
-                       break;
-               point_double(
-                   pre->g_pre_comp[0][2 * i][0], pre->g_pre_comp[0][2 * i][1], pre->g_pre_comp[0][2 * i][2],
-                   pre->g_pre_comp[1][i][0], pre->g_pre_comp[1][i][1], pre->g_pre_comp[1][i][2]);
-               for (j = 0; j < 27; ++j) {
-                       point_double(
-                           pre->g_pre_comp[0][2 * i][0], pre->g_pre_comp[0][2 * i][1], pre->g_pre_comp[0][2 * i][2],
-                           pre->g_pre_comp[0][2 * i][0], pre->g_pre_comp[0][2 * i][1], pre->g_pre_comp[0][2 * i][2]);
-               }
-       }
-       for (i = 0; i < 2; i++) {
-               /* g_pre_comp[i][0] is the point at infinity */
-               memset(pre->g_pre_comp[i][0], 0, sizeof(pre->g_pre_comp[i][0]));
-               /* the remaining multiples */
-               /* 2^56*G + 2^112*G resp. 2^84*G + 2^140*G */
-               point_add(
-                   pre->g_pre_comp[i][6][0], pre->g_pre_comp[i][6][1],
-                   pre->g_pre_comp[i][6][2], pre->g_pre_comp[i][4][0],
-                   pre->g_pre_comp[i][4][1], pre->g_pre_comp[i][4][2],
-                   0, pre->g_pre_comp[i][2][0], pre->g_pre_comp[i][2][1],
-                   pre->g_pre_comp[i][2][2]);
-               /* 2^56*G + 2^168*G resp. 2^84*G + 2^196*G */
-               point_add(
-                   pre->g_pre_comp[i][10][0], pre->g_pre_comp[i][10][1],
-                   pre->g_pre_comp[i][10][2], pre->g_pre_comp[i][8][0],
-                   pre->g_pre_comp[i][8][1], pre->g_pre_comp[i][8][2],
-                   0, pre->g_pre_comp[i][2][0], pre->g_pre_comp[i][2][1],
-                   pre->g_pre_comp[i][2][2]);
-               /* 2^112*G + 2^168*G resp. 2^140*G + 2^196*G */
-               point_add(
-                   pre->g_pre_comp[i][12][0], pre->g_pre_comp[i][12][1],
-                   pre->g_pre_comp[i][12][2], pre->g_pre_comp[i][8][0],
-                   pre->g_pre_comp[i][8][1], pre->g_pre_comp[i][8][2],
-                   0, pre->g_pre_comp[i][4][0], pre->g_pre_comp[i][4][1],
-                   pre->g_pre_comp[i][4][2]);
-               /*
-                * 2^56*G + 2^112*G + 2^168*G resp. 2^84*G + 2^140*G +
-                * 2^196*G
-                */
-               point_add(
-                   pre->g_pre_comp[i][14][0], pre->g_pre_comp[i][14][1],
-                   pre->g_pre_comp[i][14][2], pre->g_pre_comp[i][12][0],
-                   pre->g_pre_comp[i][12][1], pre->g_pre_comp[i][12][2],
-                   0, pre->g_pre_comp[i][2][0], pre->g_pre_comp[i][2][1],
-                   pre->g_pre_comp[i][2][2]);
-               for (j = 1; j < 8; ++j) {
-                       /* odd multiples: add G resp. 2^28*G */
-                       point_add(
-                           pre->g_pre_comp[i][2 * j + 1][0], pre->g_pre_comp[i][2 * j + 1][1],
-                           pre->g_pre_comp[i][2 * j + 1][2], pre->g_pre_comp[i][2 * j][0],
-                           pre->g_pre_comp[i][2 * j][1], pre->g_pre_comp[i][2 * j][2],
-                           0, pre->g_pre_comp[i][1][0], pre->g_pre_comp[i][1][1],
-                           pre->g_pre_comp[i][1][2]);
-               }
-       }
-       make_points_affine(31, &(pre->g_pre_comp[0][1]), tmp_felems);
-
-       if (!EC_EX_DATA_set_data(&group->extra_data, pre, nistp224_pre_comp_dup,
-               nistp224_pre_comp_free, nistp224_pre_comp_clear_free))
-               goto err;
-       ret = 1;
-       pre = NULL;
- err:
-       BN_CTX_end(ctx);
-       EC_POINT_free(generator);
-       BN_CTX_free(new_ctx);
-       nistp224_pre_comp_free(pre);
-       return ret;
-}
-
-int
-ec_GFp_nistp224_have_precompute_mult(const EC_GROUP *group)
-{
-       if (EC_EX_DATA_get_data(group->extra_data, nistp224_pre_comp_dup,
-               nistp224_pre_comp_free, nistp224_pre_comp_clear_free)
-           != NULL)
-               return 1;
-       else
-               return 0;
-}
-
-#endif
diff --git a/lib/libcrypto/ec/ecp_nistp256.c b/lib/libcrypto/ec/ecp_nistp256.c
deleted file mode 100644 (file)
index e218b0c..0000000
+++ /dev/null
@@ -1,2236 +0,0 @@
-/* $OpenBSD: ecp_nistp256.c,v 1.29 2022/12/26 07:18:51 jmc Exp $ */
-/*
- * Written by Adam Langley (Google) for the OpenSSL project
- */
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * A 64-bit implementation of the NIST P-256 elliptic curve point multiplication
- *
- * OpenSSL integration was taken from Emilia Kasper's work in ecp_nistp224.c.
- * Otherwise based on Emilia's P224 work, which was inspired by my curve25519
- * work which got its smarts from Daniel J. Bernstein's work on the same.
- */
-
-#include <stdint.h>
-#include <string.h>
-
-#include <openssl/opensslconf.h>
-
-#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
-
-#include <openssl/err.h>
-#include "ec_local.h"
-
-#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
-  /* even with gcc, the typedef won't work for 32-bit platforms */
-  typedef __uint128_t uint128_t; /* nonstandard; implemented by gcc on 64-bit platforms */
-  typedef __int128_t int128_t;
-#else
-  #error "Need GCC 3.1 or later to define type uint128_t"
-#endif
-
-typedef uint8_t u8;
-typedef uint32_t u32;
-typedef uint64_t u64;
-typedef int64_t s64;
-
-/* The underlying field.
- *
- * P256 operates over GF(2^256-2^224+2^192+2^96-1). We can serialise an element
- * of this field into 32 bytes. We call this an felem_bytearray. */
-
-typedef u8 felem_bytearray[32];
-
-/* These are the parameters of P256, taken from FIPS 186-3, page 86. These
- * values are big-endian. */
-static const felem_bytearray nistp256_curve_params[5] = {
-       {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,       /* p */
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
-       {0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x01,       /* a = -3 */
-        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
-        0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc},      /* b */
-       {0x5a, 0xc6, 0x35, 0xd8, 0xaa, 0x3a, 0x93, 0xe7,
-        0xb3, 0xeb, 0xbd, 0x55, 0x76, 0x98, 0x86, 0xbc,
-        0x65, 0x1d, 0x06, 0xb0, 0xcc, 0x53, 0xb0, 0xf6,
-        0x3b, 0xce, 0x3c, 0x3e, 0x27, 0xd2, 0x60, 0x4b},
-       {0x6b, 0x17, 0xd1, 0xf2, 0xe1, 0x2c, 0x42, 0x47,       /* x */
-        0xf8, 0xbc, 0xe6, 0xe5, 0x63, 0xa4, 0x40, 0xf2,
-        0x77, 0x03, 0x7d, 0x81, 0x2d, 0xeb, 0x33, 0xa0,
-        0xf4, 0xa1, 0x39, 0x45, 0xd8, 0x98, 0xc2, 0x96},
-       {0x4f, 0xe3, 0x42, 0xe2, 0xfe, 0x1a, 0x7f, 0x9b,       /* y */
-        0x8e, 0xe7, 0xeb, 0x4a, 0x7c, 0x0f, 0x9e, 0x16,
-        0x2b, 0xce, 0x33, 0x57, 0x6b, 0x31, 0x5e, 0xce,
-        0xcb, 0xb6, 0x40, 0x68, 0x37, 0xbf, 0x51, 0xf5}
-};
-
-/* The representation of field elements.
- * ------------------------------------
- *
- * We represent field elements with either four 128-bit values, eight 128-bit
- * values, or four 64-bit values. The field element represented is:
- *   v[0]*2^0 + v[1]*2^64 + v[2]*2^128 + v[3]*2^192  (mod p)
- * or:
- *   v[0]*2^0 + v[1]*2^64 + v[2]*2^128 + ... + v[8]*2^512  (mod p)
- *
- * 128-bit values are called 'limbs'. Since the limbs are spaced only 64 bits
- * apart, but are 128-bits wide, the most significant bits of each limb overlap
- * with the least significant bits of the next.
- *
- * A field element with four limbs is an 'felem'. One with eight limbs is a
- * 'longfelem'
- *
- * A field element with four, 64-bit values is called a 'smallfelem'. Small
- * values are used as intermediate values before multiplication.
- */
-
-#define NLIMBS 4
-
-typedef uint128_t limb;
-typedef limb felem[NLIMBS];
-typedef limb longfelem[NLIMBS * 2];
-typedef u64 smallfelem[NLIMBS];
-
-/* This is the value of the prime as four 64-bit words, little-endian. */
-static const u64 kPrime[4] = {0xfffffffffffffffful, 0xffffffff, 0, 0xffffffff00000001ul};
-static const limb bottom32bits = 0xffffffff;
-static const u64 bottom63bits = 0x7ffffffffffffffful;
-
-/* bin32_to_felem takes a little-endian byte array and converts it into felem
- * form. This assumes that the CPU is little-endian. */
-static void
-bin32_to_felem(felem out, const u8 in[32])
-{
-       out[0] = *((u64 *) & in[0]);
-       out[1] = *((u64 *) & in[8]);
-       out[2] = *((u64 *) & in[16]);
-       out[3] = *((u64 *) & in[24]);
-}
-
-/* smallfelem_to_bin32 takes a smallfelem and serialises into a little endian,
- * 32 byte array. This assumes that the CPU is little-endian. */
-static void
-smallfelem_to_bin32(u8 out[32], const smallfelem in)
-{
-       *((u64 *) & out[0]) = in[0];
-       *((u64 *) & out[8]) = in[1];
-       *((u64 *) & out[16]) = in[2];
-       *((u64 *) & out[24]) = in[3];
-}
-
-/* To preserve endianness when using BN_bn2bin and BN_bin2bn */
-static void
-flip_endian(u8 *out, const u8 *in, unsigned len)
-{
-       unsigned i;
-       for (i = 0; i < len; ++i)
-               out[i] = in[len - 1 - i];
-}
-
-/* BN_to_felem converts an OpenSSL BIGNUM into an felem */
-static int
-BN_to_felem(felem out, const BIGNUM *bn)
-{
-       felem_bytearray b_in;
-       felem_bytearray b_out;
-       unsigned num_bytes;
-
-       /* BN_bn2bin eats leading zeroes */
-       memset(b_out, 0, sizeof b_out);
-       num_bytes = BN_num_bytes(bn);
-       if (num_bytes > sizeof b_out) {
-               ECerror(EC_R_BIGNUM_OUT_OF_RANGE);
-               return 0;
-       }
-       if (BN_is_negative(bn)) {
-               ECerror(EC_R_BIGNUM_OUT_OF_RANGE);
-               return 0;
-       }
-       num_bytes = BN_bn2bin(bn, b_in);
-       flip_endian(b_out, b_in, num_bytes);
-       bin32_to_felem(out, b_out);
-       return 1;
-}
-
-/* felem_to_BN converts an felem into an OpenSSL BIGNUM */
-static BIGNUM *
-smallfelem_to_BN(BIGNUM *out, const smallfelem in)
-{
-       felem_bytearray b_in, b_out;
-       smallfelem_to_bin32(b_in, in);
-       flip_endian(b_out, b_in, sizeof b_out);
-       return BN_bin2bn(b_out, sizeof b_out, out);
-}
-
-
-/* Field operations
- * ---------------- */
-
-static void
-smallfelem_one(smallfelem out)
-{
-       out[0] = 1;
-       out[1] = 0;
-       out[2] = 0;
-       out[3] = 0;
-}
-
-static void
-smallfelem_assign(smallfelem out, const smallfelem in)
-{
-       out[0] = in[0];
-       out[1] = in[1];
-       out[2] = in[2];
-       out[3] = in[3];
-}
-
-static void
-felem_assign(felem out, const felem in)
-{
-       out[0] = in[0];
-       out[1] = in[1];
-       out[2] = in[2];
-       out[3] = in[3];
-}
-
-/* felem_sum sets out = out + in. */
-static void
-felem_sum(felem out, const felem in)
-{
-       out[0] += in[0];
-       out[1] += in[1];
-       out[2] += in[2];
-       out[3] += in[3];
-}
-
-/* felem_small_sum sets out = out + in. */
-static void
-felem_small_sum(felem out, const smallfelem in)
-{
-       out[0] += in[0];
-       out[1] += in[1];
-       out[2] += in[2];
-       out[3] += in[3];
-}
-
-/* felem_scalar sets out = out * scalar */
-static void
-felem_scalar(felem out, const u64 scalar)
-{
-       out[0] *= scalar;
-       out[1] *= scalar;
-       out[2] *= scalar;
-       out[3] *= scalar;
-}
-
-/* longfelem_scalar sets out = out * scalar */
-static void
-longfelem_scalar(longfelem out, const u64 scalar)
-{
-       out[0] *= scalar;
-       out[1] *= scalar;
-       out[2] *= scalar;
-       out[3] *= scalar;
-       out[4] *= scalar;
-       out[5] *= scalar;
-       out[6] *= scalar;
-       out[7] *= scalar;
-}
-
-#define two105m41m9 (((limb)1) << 105) - (((limb)1) << 41) - (((limb)1) << 9)
-#define two105 (((limb)1) << 105)
-#define two105m41p9 (((limb)1) << 105) - (((limb)1) << 41) + (((limb)1) << 9)
-
-/* zero105 is 0 mod p */
-static const felem zero105 = {two105m41m9, two105, two105m41p9, two105m41p9};
-
-/* smallfelem_neg sets |out| to |-small|
- * On exit:
- *   out[i] < out[i] + 2^105
- */
-static void
-smallfelem_neg(felem out, const smallfelem small)
-{
-       /* In order to prevent underflow, we subtract from 0 mod p. */
-       out[0] = zero105[0] - small[0];
-       out[1] = zero105[1] - small[1];
-       out[2] = zero105[2] - small[2];
-       out[3] = zero105[3] - small[3];
-}
-
-/* felem_diff subtracts |in| from |out|
- * On entry:
- *   in[i] < 2^104
- * On exit:
- *   out[i] < out[i] + 2^105
- */
-static void
-felem_diff(felem out, const felem in)
-{
-       /* In order to prevent underflow, we add 0 mod p before subtracting. */
-       out[0] += zero105[0];
-       out[1] += zero105[1];
-       out[2] += zero105[2];
-       out[3] += zero105[3];
-
-       out[0] -= in[0];
-       out[1] -= in[1];
-       out[2] -= in[2];
-       out[3] -= in[3];
-}
-
-#define two107m43m11 (((limb)1) << 107) - (((limb)1) << 43) - (((limb)1) << 11)
-#define two107 (((limb)1) << 107)
-#define two107m43p11 (((limb)1) << 107) - (((limb)1) << 43) + (((limb)1) << 11)
-
-/* zero107 is 0 mod p */
-static const felem zero107 = {two107m43m11, two107, two107m43p11, two107m43p11};
-
-/* An alternative felem_diff for larger inputs |in|
- * felem_diff_zero107 subtracts |in| from |out|
- * On entry:
- *   in[i] < 2^106
- * On exit:
- *   out[i] < out[i] + 2^107
- */
-static void
-felem_diff_zero107(felem out, const felem in)
-{
-       /* In order to prevent underflow, we add 0 mod p before subtracting. */
-       out[0] += zero107[0];
-       out[1] += zero107[1];
-       out[2] += zero107[2];
-       out[3] += zero107[3];
-
-       out[0] -= in[0];
-       out[1] -= in[1];
-       out[2] -= in[2];
-       out[3] -= in[3];
-}
-
-/* longfelem_diff subtracts |in| from |out|
- * On entry:
- *   in[i] < 7*2^67
- * On exit:
- *   out[i] < out[i] + 2^70 + 2^40
- */
-static void
-longfelem_diff(longfelem out, const longfelem in)
-{
-       static const limb two70m8p6 = (((limb) 1) << 70) - (((limb) 1) << 8) + (((limb) 1) << 6);
-       static const limb two70p40 = (((limb) 1) << 70) + (((limb) 1) << 40);
-       static const limb two70 = (((limb) 1) << 70);
-       static const limb two70m40m38p6 = (((limb) 1) << 70) - (((limb) 1) << 40) - (((limb) 1) << 38) + (((limb) 1) << 6);
-       static const limb two70m6 = (((limb) 1) << 70) - (((limb) 1) << 6);
-
-       /* add 0 mod p to avoid underflow */
-       out[0] += two70m8p6;
-       out[1] += two70p40;
-       out[2] += two70;
-       out[3] += two70m40m38p6;
-       out[4] += two70m6;
-       out[5] += two70m6;
-       out[6] += two70m6;
-       out[7] += two70m6;
-
-       /* in[i] < 7*2^67 < 2^70 - 2^40 - 2^38 + 2^6 */
-       out[0] -= in[0];
-       out[1] -= in[1];
-       out[2] -= in[2];
-       out[3] -= in[3];
-       out[4] -= in[4];
-       out[5] -= in[5];
-       out[6] -= in[6];
-       out[7] -= in[7];
-}
-
-#define two64m0 (((limb)1) << 64) - 1
-#define two110p32m0 (((limb)1) << 110) + (((limb)1) << 32) - 1
-#define two64m46 (((limb)1) << 64) - (((limb)1) << 46)
-#define two64m32 (((limb)1) << 64) - (((limb)1) << 32)
-
-/* zero110 is 0 mod p */
-static const felem zero110 = {two64m0, two110p32m0, two64m46, two64m32};
-
-/* felem_shrink converts an felem into a smallfelem. The result isn't quite
- * minimal as the value may be greater than p.
- *
- * On entry:
- *   in[i] < 2^109
- * On exit:
- *   out[i] < 2^64
- */
-static void
-felem_shrink(smallfelem out, const felem in)
-{
-       felem tmp;
-       u64 a, b, mask;
-       s64 high, low;
-       static const u64 kPrime3Test = 0x7fffffff00000001ul;    /* 2^63 - 2^32 + 1 */
-
-       /* Carry 2->3 */
-       tmp[3] = zero110[3] + in[3] + ((u64) (in[2] >> 64));
-       /* tmp[3] < 2^110 */
-
-       tmp[2] = zero110[2] + (u64) in[2];
-       tmp[0] = zero110[0] + in[0];
-       tmp[1] = zero110[1] + in[1];
-       /* tmp[0] < 2**110, tmp[1] < 2^111, tmp[2] < 2**65 */
-
-       /*
-        * We perform two partial reductions where we eliminate the high-word
-        * of tmp[3]. We don't update the other words till the end.
-        */
-       a = tmp[3] >> 64;       /* a < 2^46 */
-       tmp[3] = (u64) tmp[3];
-       tmp[3] -= a;
-       tmp[3] += ((limb) a) << 32;
-       /* tmp[3] < 2^79 */
-
-       b = a;
-       a = tmp[3] >> 64;       /* a < 2^15 */
-       b += a;                 /* b < 2^46 + 2^15 < 2^47 */
-       tmp[3] = (u64) tmp[3];
-       tmp[3] -= a;
-       tmp[3] += ((limb) a) << 32;
-       /* tmp[3] < 2^64 + 2^47 */
-
-       /*
-        * This adjusts the other two words to complete the two partial
-        * reductions.
-        */
-       tmp[0] += b;
-       tmp[1] -= (((limb) b) << 32);
-
-       /*
-        * In order to make space in tmp[3] for the carry from 2 -> 3, we
-        * conditionally subtract kPrime if tmp[3] is large enough.
-        */
-       high = tmp[3] >> 64;
-       /* As tmp[3] < 2^65, high is either 1 or 0 */
-       high <<= 63;
-       high >>= 63;
-       /*
-        * high is: all ones   if the high word of tmp[3] is 1 all zeros  if
-        * the high word of tmp[3] if 0
-        */
-       low = tmp[3];
-       mask = low >> 63;
-       /*
-        * mask is: all ones   if the MSB of low is 1 all zeros  if the MSB
-        * of low if 0
-        */
-       low &= bottom63bits;
-       low -= kPrime3Test;
-       /* if low was greater than kPrime3Test then the MSB is zero */
-       low = ~low;
-       low >>= 63;
-       /*
-        * low is: all ones   if low was > kPrime3Test all zeros  if low was
-        * <= kPrime3Test
-        */
-       mask = (mask & low) | high;
-       tmp[0] -= mask & kPrime[0];
-       tmp[1] -= mask & kPrime[1];
-       /* kPrime[2] is zero, so omitted */
-       tmp[3] -= mask & kPrime[3];
-       /* tmp[3] < 2**64 - 2**32 + 1 */
-
-       tmp[1] += ((u64) (tmp[0] >> 64));
-       tmp[0] = (u64) tmp[0];
-       tmp[2] += ((u64) (tmp[1] >> 64));
-       tmp[1] = (u64) tmp[1];
-       tmp[3] += ((u64) (tmp[2] >> 64));
-       tmp[2] = (u64) tmp[2];
-       /* tmp[i] < 2^64 */
-
-       out[0] = tmp[0];
-       out[1] = tmp[1];
-       out[2] = tmp[2];
-       out[3] = tmp[3];
-}
-
-/* smallfelem_expand converts a smallfelem to an felem */
-static void
-smallfelem_expand(felem out, const smallfelem in)
-{
-       out[0] = in[0];
-       out[1] = in[1];
-       out[2] = in[2];
-       out[3] = in[3];
-}
-
-/* smallfelem_square sets |out| = |small|^2
- * On entry:
- *   small[i] < 2^64
- * On exit:
- *   out[i] < 7 * 2^64 < 2^67
- */
-static void
-smallfelem_square(longfelem out, const smallfelem small)
-{
-       limb a;
-       u64 high, low;
-
-       a = ((uint128_t) small[0]) * small[0];
-       low = a;
-       high = a >> 64;
-       out[0] = low;
-       out[1] = high;
-
-       a = ((uint128_t) small[0]) * small[1];
-       low = a;
-       high = a >> 64;
-       out[1] += low;
-       out[1] += low;
-       out[2] = high;
-
-       a = ((uint128_t) small[0]) * small[2];
-       low = a;
-       high = a >> 64;
-       out[2] += low;
-       out[2] *= 2;
-       out[3] = high;
-
-       a = ((uint128_t) small[0]) * small[3];
-       low = a;
-       high = a >> 64;
-       out[3] += low;
-       out[4] = high;
-
-       a = ((uint128_t) small[1]) * small[2];
-       low = a;
-       high = a >> 64;
-       out[3] += low;
-       out[3] *= 2;
-       out[4] += high;
-
-       a = ((uint128_t) small[1]) * small[1];
-       low = a;
-       high = a >> 64;
-       out[2] += low;
-       out[3] += high;
-
-       a = ((uint128_t) small[1]) * small[3];
-       low = a;
-       high = a >> 64;
-       out[4] += low;
-       out[4] *= 2;
-       out[5] = high;
-
-       a = ((uint128_t) small[2]) * small[3];
-       low = a;
-       high = a >> 64;
-       out[5] += low;
-       out[5] *= 2;
-       out[6] = high;
-       out[6] += high;
-
-       a = ((uint128_t) small[2]) * small[2];
-       low = a;
-       high = a >> 64;
-       out[4] += low;
-       out[5] += high;
-
-       a = ((uint128_t) small[3]) * small[3];
-       low = a;
-       high = a >> 64;
-       out[6] += low;
-       out[7] = high;
-}
-
-/* felem_square sets |out| = |in|^2
- * On entry:
- *   in[i] < 2^109
- * On exit:
- *   out[i] < 7 * 2^64 < 2^67
- */
-static void
-felem_square(longfelem out, const felem in)
-{
-       u64 small[4];
-       felem_shrink(small, in);
-       smallfelem_square(out, small);
-}
-
-/* smallfelem_mul sets |out| = |small1| * |small2|
- * On entry:
- *   small1[i] < 2^64
- *   small2[i] < 2^64
- * On exit:
- *   out[i] < 7 * 2^64 < 2^67
- */
-static void
-smallfelem_mul(longfelem out, const smallfelem small1, const smallfelem small2)
-{
-       limb a;
-       u64 high, low;
-
-       a = ((uint128_t) small1[0]) * small2[0];
-       low = a;
-       high = a >> 64;
-       out[0] = low;
-       out[1] = high;
-
-
-       a = ((uint128_t) small1[0]) * small2[1];
-       low = a;
-       high = a >> 64;
-       out[1] += low;
-       out[2] = high;
-
-       a = ((uint128_t) small1[1]) * small2[0];
-       low = a;
-       high = a >> 64;
-       out[1] += low;
-       out[2] += high;
-
-
-       a = ((uint128_t) small1[0]) * small2[2];
-       low = a;
-       high = a >> 64;
-       out[2] += low;
-       out[3] = high;
-
-       a = ((uint128_t) small1[1]) * small2[1];
-       low = a;
-       high = a >> 64;
-       out[2] += low;
-       out[3] += high;
-
-       a = ((uint128_t) small1[2]) * small2[0];
-       low = a;
-       high = a >> 64;
-       out[2] += low;
-       out[3] += high;
-
-
-       a = ((uint128_t) small1[0]) * small2[3];
-       low = a;
-       high = a >> 64;
-       out[3] += low;
-       out[4] = high;
-
-       a = ((uint128_t) small1[1]) * small2[2];
-       low = a;
-       high = a >> 64;
-       out[3] += low;
-       out[4] += high;
-
-       a = ((uint128_t) small1[2]) * small2[1];
-       low = a;
-       high = a >> 64;
-       out[3] += low;
-       out[4] += high;
-
-       a = ((uint128_t) small1[3]) * small2[0];
-       low = a;
-       high = a >> 64;
-       out[3] += low;
-       out[4] += high;
-
-
-       a = ((uint128_t) small1[1]) * small2[3];
-       low = a;
-       high = a >> 64;
-       out[4] += low;
-       out[5] = high;
-
-       a = ((uint128_t) small1[2]) * small2[2];
-       low = a;
-       high = a >> 64;
-       out[4] += low;
-       out[5] += high;
-
-       a = ((uint128_t) small1[3]) * small2[1];
-       low = a;
-       high = a >> 64;
-       out[4] += low;
-       out[5] += high;
-
-
-       a = ((uint128_t) small1[2]) * small2[3];
-       low = a;
-       high = a >> 64;
-       out[5] += low;
-       out[6] = high;
-
-       a = ((uint128_t) small1[3]) * small2[2];
-       low = a;
-       high = a >> 64;
-       out[5] += low;
-       out[6] += high;
-
-
-       a = ((uint128_t) small1[3]) * small2[3];
-       low = a;
-       high = a >> 64;
-       out[6] += low;
-       out[7] = high;
-}
-
-/* felem_mul sets |out| = |in1| * |in2|
- * On entry:
- *   in1[i] < 2^109
- *   in2[i] < 2^109
- * On exit:
- *   out[i] < 7 * 2^64 < 2^67
- */
-static void
-felem_mul(longfelem out, const felem in1, const felem in2)
-{
-       smallfelem small1, small2;
-       felem_shrink(small1, in1);
-       felem_shrink(small2, in2);
-       smallfelem_mul(out, small1, small2);
-}
-
-/* felem_small_mul sets |out| = |small1| * |in2|
- * On entry:
- *   small1[i] < 2^64
- *   in2[i] < 2^109
- * On exit:
- *   out[i] < 7 * 2^64 < 2^67
- */
-static void
-felem_small_mul(longfelem out, const smallfelem small1, const felem in2)
-{
-       smallfelem small2;
-       felem_shrink(small2, in2);
-       smallfelem_mul(out, small1, small2);
-}
-
-#define two100m36m4 (((limb)1) << 100) - (((limb)1) << 36) - (((limb)1) << 4)
-#define two100 (((limb)1) << 100)
-#define two100m36p4 (((limb)1) << 100) - (((limb)1) << 36) + (((limb)1) << 4)
-/* zero100 is 0 mod p */
-static const felem zero100 = {two100m36m4, two100, two100m36p4, two100m36p4};
-
-/* Internal function for the different flavours of felem_reduce.
- * felem_reduce_ reduces the higher coefficients in[4]-in[7].
- * On entry:
- *   out[0] >= in[6] + 2^32*in[6] + in[7] + 2^32*in[7]
- *   out[1] >= in[7] + 2^32*in[4]
- *   out[2] >= in[5] + 2^32*in[5]
- *   out[3] >= in[4] + 2^32*in[5] + 2^32*in[6]
- * On exit:
- *   out[0] <= out[0] + in[4] + 2^32*in[5]
- *   out[1] <= out[1] + in[5] + 2^33*in[6]
- *   out[2] <= out[2] + in[7] + 2*in[6] + 2^33*in[7]
- *   out[3] <= out[3] + 2^32*in[4] + 3*in[7]
- */
-static void
-felem_reduce_(felem out, const longfelem in)
-{
-       int128_t c;
-       /* combine common terms from below */
-       c = in[4] + (in[5] << 32);
-       out[0] += c;
-       out[3] -= c;
-
-       c = in[5] - in[7];
-       out[1] += c;
-       out[2] -= c;
-
-       /* the remaining terms */
-       /* 256: [(0,1),(96,-1),(192,-1),(224,1)] */
-       out[1] -= (in[4] << 32);
-       out[3] += (in[4] << 32);
-
-       /* 320: [(32,1),(64,1),(128,-1),(160,-1),(224,-1)] */
-       out[2] -= (in[5] << 32);
-
-       /* 384: [(0,-1),(32,-1),(96,2),(128,2),(224,-1)] */
-       out[0] -= in[6];
-       out[0] -= (in[6] << 32);
-       out[1] += (in[6] << 33);
-       out[2] += (in[6] * 2);
-       out[3] -= (in[6] << 32);
-
-       /* 448: [(0,-1),(32,-1),(64,-1),(128,1),(160,2),(192,3)] */
-       out[0] -= in[7];
-       out[0] -= (in[7] << 32);
-       out[2] += (in[7] << 33);
-       out[3] += (in[7] * 3);
-}
-
-/* felem_reduce converts a longfelem into an felem.
- * To be called directly after felem_square or felem_mul.
- * On entry:
- *   in[0] < 2^64, in[1] < 3*2^64, in[2] < 5*2^64, in[3] < 7*2^64
- *   in[4] < 7*2^64, in[5] < 5*2^64, in[6] < 3*2^64, in[7] < 2*64
- * On exit:
- *   out[i] < 2^101
- */
-static void
-felem_reduce(felem out, const longfelem in)
-{
-       out[0] = zero100[0] + in[0];
-       out[1] = zero100[1] + in[1];
-       out[2] = zero100[2] + in[2];
-       out[3] = zero100[3] + in[3];
-
-       felem_reduce_(out, in);
-
-       /*
-        * out[0] > 2^100 - 2^36 - 2^4 - 3*2^64 - 3*2^96 - 2^64 - 2^96 > 0
-        * out[1] > 2^100 - 2^64 - 7*2^96 > 0 out[2] > 2^100 - 2^36 + 2^4 -
-        * 5*2^64 - 5*2^96 > 0 out[3] > 2^100 - 2^36 + 2^4 - 7*2^64 - 5*2^96
-        * - 3*2^96 > 0
-        *
-        * out[0] < 2^100 + 2^64 + 7*2^64 + 5*2^96 < 2^101 out[1] < 2^100 +
-        * 3*2^64 + 5*2^64 + 3*2^97 < 2^101 out[2] < 2^100 + 5*2^64 + 2^64 +
-        * 3*2^65 + 2^97 < 2^101 out[3] < 2^100 + 7*2^64 + 7*2^96 + 3*2^64 <
-        * 2^101
-        */
-}
-
-/* felem_reduce_zero105 converts a larger longfelem into an felem.
- * On entry:
- *   in[0] < 2^71
- * On exit:
- *   out[i] < 2^106
- */
-static void
-felem_reduce_zero105(felem out, const longfelem in)
-{
-       out[0] = zero105[0] + in[0];
-       out[1] = zero105[1] + in[1];
-       out[2] = zero105[2] + in[2];
-       out[3] = zero105[3] + in[3];
-
-       felem_reduce_(out, in);
-
-       /*
-        * out[0] > 2^105 - 2^41 - 2^9 - 2^71 - 2^103 - 2^71 - 2^103 > 0
-        * out[1] > 2^105 - 2^71 - 2^103 > 0 out[2] > 2^105 - 2^41 + 2^9 -
-        * 2^71 - 2^103 > 0 out[3] > 2^105 - 2^41 + 2^9 - 2^71 - 2^103 -
-        * 2^103 > 0
-        *
-        * out[0] < 2^105 + 2^71 + 2^71 + 2^103 < 2^106 out[1] < 2^105 + 2^71 +
-        * 2^71 + 2^103 < 2^106 out[2] < 2^105 + 2^71 + 2^71 + 2^71 + 2^103 <
-        * 2^106 out[3] < 2^105 + 2^71 + 2^103 + 2^71 < 2^106
-        */
-}
-
-/* subtract_u64 sets *result = *result - v and *carry to one if the subtraction
- * underflowed. */
-static void
-subtract_u64(u64 *result, u64 *carry, u64 v)
-{
-       uint128_t r = *result;
-       r -= v;
-       *carry = (r >> 64) & 1;
-       *result = (u64) r;
-}
-
-/* felem_contract converts |in| to its unique, minimal representation.
- * On entry:
- *   in[i] < 2^109
- */
-static void
-felem_contract(smallfelem out, const felem in)
-{
-       unsigned i;
-       u64 all_equal_so_far = 0, result = 0, carry;
-
-       felem_shrink(out, in);
-       /* small is minimal except that the value might be > p */
-
-       all_equal_so_far--;
-       /*
-        * We are doing a constant time test if out >= kPrime. We need to
-        * compare each u64, from most-significant to least significant. For
-        * each one, if all words so far have been equal (m is all ones) then
-        * a non-equal result is the answer. Otherwise we continue.
-        */
-       for (i = 3; i < 4; i--) {
-               u64 equal;
-               uint128_t a = ((uint128_t) kPrime[i]) - out[i];
-               /*
-                * if out[i] > kPrime[i] then a will underflow and the high
-                * 64-bits will all be set.
-                */
-               result |= all_equal_so_far & ((u64) (a >> 64));
-
-               /*
-                * if kPrime[i] == out[i] then |equal| will be all zeros and
-                * the decrement will make it all ones.
-                */
-               equal = kPrime[i] ^ out[i];
-               equal--;
-               equal &= equal << 32;
-               equal &= equal << 16;
-               equal &= equal << 8;
-               equal &= equal << 4;
-               equal &= equal << 2;
-               equal &= equal << 1;
-               equal = ((s64) equal) >> 63;
-
-               all_equal_so_far &= equal;
-       }
-
-       /*
-        * if all_equal_so_far is still all ones then the two values are
-        * equal and so out >= kPrime is true.
-        */
-       result |= all_equal_so_far;
-
-       /* if out >= kPrime then we subtract kPrime. */
-       subtract_u64(&out[0], &carry, result & kPrime[0]);
-       subtract_u64(&out[1], &carry, carry);
-       subtract_u64(&out[2], &carry, carry);
-       subtract_u64(&out[3], &carry, carry);
-
-       subtract_u64(&out[1], &carry, result & kPrime[1]);
-       subtract_u64(&out[2], &carry, carry);
-       subtract_u64(&out[3], &carry, carry);
-
-       subtract_u64(&out[2], &carry, result & kPrime[2]);
-       subtract_u64(&out[3], &carry, carry);
-
-       subtract_u64(&out[3], &carry, result & kPrime[3]);
-}
-
-static void
-smallfelem_square_contract(smallfelem out, const smallfelem in)
-{
-       longfelem longtmp;
-       felem tmp;
-
-       smallfelem_square(longtmp, in);
-       felem_reduce(tmp, longtmp);
-       felem_contract(out, tmp);
-}
-
-static void
-smallfelem_mul_contract(smallfelem out, const smallfelem in1, const smallfelem in2)
-{
-       longfelem longtmp;
-       felem tmp;
-
-       smallfelem_mul(longtmp, in1, in2);
-       felem_reduce(tmp, longtmp);
-       felem_contract(out, tmp);
-}
-
-/* felem_is_zero returns a limb with all bits set if |in| == 0 (mod p) and 0
- * otherwise.
- * On entry:
- *   small[i] < 2^64
- */
-static limb
-smallfelem_is_zero(const smallfelem small)
-{
-       limb result;
-       u64 is_p;
-
-       u64 is_zero = small[0] | small[1] | small[2] | small[3];
-       is_zero--;
-       is_zero &= is_zero << 32;
-       is_zero &= is_zero << 16;
-       is_zero &= is_zero << 8;
-       is_zero &= is_zero << 4;
-       is_zero &= is_zero << 2;
-       is_zero &= is_zero << 1;
-       is_zero = ((s64) is_zero) >> 63;
-
-       is_p = (small[0] ^ kPrime[0]) |
-           (small[1] ^ kPrime[1]) |
-           (small[2] ^ kPrime[2]) |
-           (small[3] ^ kPrime[3]);
-       is_p--;
-       is_p &= is_p << 32;
-       is_p &= is_p << 16;
-       is_p &= is_p << 8;
-       is_p &= is_p << 4;
-       is_p &= is_p << 2;
-       is_p &= is_p << 1;
-       is_p = ((s64) is_p) >> 63;
-
-       is_zero |= is_p;
-
-       result = is_zero;
-       result |= ((limb) is_zero) << 64;
-       return result;
-}
-
-static int
-smallfelem_is_zero_int(const smallfelem small)
-{
-       return (int) (smallfelem_is_zero(small) & ((limb) 1));
-}
-
-/* felem_inv calculates |out| = |in|^{-1}
- *
- * Based on Fermat's Little Theorem:
- *   a^p = a (mod p)
- *   a^{p-1} = 1 (mod p)
- *   a^{p-2} = a^{-1} (mod p)
- */
-static void
-felem_inv(felem out, const felem in)
-{
-       felem ftmp, ftmp2;
-       /* each e_I will hold |in|^{2^I - 1} */
-       felem e2, e4, e8, e16, e32, e64;
-       longfelem tmp;
-       unsigned i;
-
-       felem_square(tmp, in);
-       felem_reduce(ftmp, tmp);/* 2^1 */
-       felem_mul(tmp, in, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^2 - 2^0 */
-       felem_assign(e2, ftmp);
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^3 - 2^1 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^4 - 2^2 */
-       felem_mul(tmp, ftmp, e2);
-       felem_reduce(ftmp, tmp);/* 2^4 - 2^0 */
-       felem_assign(e4, ftmp);
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^5 - 2^1 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^6 - 2^2 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^7 - 2^3 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^8 - 2^4 */
-       felem_mul(tmp, ftmp, e4);
-       felem_reduce(ftmp, tmp);/* 2^8 - 2^0 */
-       felem_assign(e8, ftmp);
-       for (i = 0; i < 8; i++) {
-               felem_square(tmp, ftmp);
-               felem_reduce(ftmp, tmp);
-       }                       /* 2^16 - 2^8 */
-       felem_mul(tmp, ftmp, e8);
-       felem_reduce(ftmp, tmp);/* 2^16 - 2^0 */
-       felem_assign(e16, ftmp);
-       for (i = 0; i < 16; i++) {
-               felem_square(tmp, ftmp);
-               felem_reduce(ftmp, tmp);
-       }                       /* 2^32 - 2^16 */
-       felem_mul(tmp, ftmp, e16);
-       felem_reduce(ftmp, tmp);/* 2^32 - 2^0 */
-       felem_assign(e32, ftmp);
-       for (i = 0; i < 32; i++) {
-               felem_square(tmp, ftmp);
-               felem_reduce(ftmp, tmp);
-       }                       /* 2^64 - 2^32 */
-       felem_assign(e64, ftmp);
-       felem_mul(tmp, ftmp, in);
-       felem_reduce(ftmp, tmp);/* 2^64 - 2^32 + 2^0 */
-       for (i = 0; i < 192; i++) {
-               felem_square(tmp, ftmp);
-               felem_reduce(ftmp, tmp);
-       }                       /* 2^256 - 2^224 + 2^192 */
-
-       felem_mul(tmp, e64, e32);
-       felem_reduce(ftmp2, tmp);       /* 2^64 - 2^0 */
-       for (i = 0; i < 16; i++) {
-               felem_square(tmp, ftmp2);
-               felem_reduce(ftmp2, tmp);
-       }                       /* 2^80 - 2^16 */
-       felem_mul(tmp, ftmp2, e16);
-       felem_reduce(ftmp2, tmp);       /* 2^80 - 2^0 */
-       for (i = 0; i < 8; i++) {
-               felem_square(tmp, ftmp2);
-               felem_reduce(ftmp2, tmp);
-       }                       /* 2^88 - 2^8 */
-       felem_mul(tmp, ftmp2, e8);
-       felem_reduce(ftmp2, tmp);       /* 2^88 - 2^0 */
-       for (i = 0; i < 4; i++) {
-               felem_square(tmp, ftmp2);
-               felem_reduce(ftmp2, tmp);
-       }                       /* 2^92 - 2^4 */
-       felem_mul(tmp, ftmp2, e4);
-       felem_reduce(ftmp2, tmp);       /* 2^92 - 2^0 */
-       felem_square(tmp, ftmp2);
-       felem_reduce(ftmp2, tmp);       /* 2^93 - 2^1 */
-       felem_square(tmp, ftmp2);
-       felem_reduce(ftmp2, tmp);       /* 2^94 - 2^2 */
-       felem_mul(tmp, ftmp2, e2);
-       felem_reduce(ftmp2, tmp);       /* 2^94 - 2^0 */
-       felem_square(tmp, ftmp2);
-       felem_reduce(ftmp2, tmp);       /* 2^95 - 2^1 */
-       felem_square(tmp, ftmp2);
-       felem_reduce(ftmp2, tmp);       /* 2^96 - 2^2 */
-       felem_mul(tmp, ftmp2, in);
-       felem_reduce(ftmp2, tmp);       /* 2^96 - 3 */
-
-       felem_mul(tmp, ftmp2, ftmp);
-       felem_reduce(out, tmp); /* 2^256 - 2^224 + 2^192 + 2^96 - 3 */
-}
-
-static void
-smallfelem_inv_contract(smallfelem out, const smallfelem in)
-{
-       felem tmp;
-
-       smallfelem_expand(tmp, in);
-       felem_inv(tmp, tmp);
-       felem_contract(out, tmp);
-}
-
-/* Group operations
- * ----------------
- *
- * Building on top of the field operations we have the operations on the
- * elliptic curve group itself. Points on the curve are represented in Jacobian
- * coordinates */
-
-/* point_double calculates 2*(x_in, y_in, z_in)
- *
- * The method is taken from:
- *   http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
- *
- * Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed.
- * while x_out == y_in is not (maybe this works, but it's not tested). */
-static void
-point_double(felem x_out, felem y_out, felem z_out,
-    const felem x_in, const felem y_in, const felem z_in)
-{
-       longfelem tmp, tmp2;
-       felem delta, gamma, beta, alpha, ftmp, ftmp2;
-       smallfelem small1, small2;
-
-       felem_assign(ftmp, x_in);
-       /* ftmp[i] < 2^106 */
-       felem_assign(ftmp2, x_in);
-       /* ftmp2[i] < 2^106 */
-
-       /* delta = z^2 */
-       felem_square(tmp, z_in);
-       felem_reduce(delta, tmp);
-       /* delta[i] < 2^101 */
-
-       /* gamma = y^2 */
-       felem_square(tmp, y_in);
-       felem_reduce(gamma, tmp);
-       /* gamma[i] < 2^101 */
-       felem_shrink(small1, gamma);
-
-       /* beta = x*gamma */
-       felem_small_mul(tmp, small1, x_in);
-       felem_reduce(beta, tmp);
-       /* beta[i] < 2^101 */
-
-       /* alpha = 3*(x-delta)*(x+delta) */
-       felem_diff(ftmp, delta);
-       /* ftmp[i] < 2^105 + 2^106 < 2^107 */
-       felem_sum(ftmp2, delta);
-       /* ftmp2[i] < 2^105 + 2^106 < 2^107 */
-       felem_scalar(ftmp2, 3);
-       /* ftmp2[i] < 3 * 2^107 < 2^109 */
-       felem_mul(tmp, ftmp, ftmp2);
-       felem_reduce(alpha, tmp);
-       /* alpha[i] < 2^101 */
-       felem_shrink(small2, alpha);
-
-       /* x' = alpha^2 - 8*beta */
-       smallfelem_square(tmp, small2);
-       felem_reduce(x_out, tmp);
-       felem_assign(ftmp, beta);
-       felem_scalar(ftmp, 8);
-       /* ftmp[i] < 8 * 2^101 = 2^104 */
-       felem_diff(x_out, ftmp);
-       /* x_out[i] < 2^105 + 2^101 < 2^106 */
-
-       /* z' = (y + z)^2 - gamma - delta */
-       felem_sum(delta, gamma);
-       /* delta[i] < 2^101 + 2^101 = 2^102 */
-       felem_assign(ftmp, y_in);
-       felem_sum(ftmp, z_in);
-       /* ftmp[i] < 2^106 + 2^106 = 2^107 */
-       felem_square(tmp, ftmp);
-       felem_reduce(z_out, tmp);
-       felem_diff(z_out, delta);
-       /* z_out[i] < 2^105 + 2^101 < 2^106 */
-
-       /* y' = alpha*(4*beta - x') - 8*gamma^2 */
-       felem_scalar(beta, 4);
-       /* beta[i] < 4 * 2^101 = 2^103 */
-       felem_diff_zero107(beta, x_out);
-       /* beta[i] < 2^107 + 2^103 < 2^108 */
-       felem_small_mul(tmp, small2, beta);
-       /* tmp[i] < 7 * 2^64 < 2^67 */
-       smallfelem_square(tmp2, small1);
-       /* tmp2[i] < 7 * 2^64 */
-       longfelem_scalar(tmp2, 8);
-       /* tmp2[i] < 8 * 7 * 2^64 = 7 * 2^67 */
-       longfelem_diff(tmp, tmp2);
-       /* tmp[i] < 2^67 + 2^70 + 2^40 < 2^71 */
-       felem_reduce_zero105(y_out, tmp);
-       /* y_out[i] < 2^106 */
-}
-
-/* point_double_small is the same as point_double, except that it operates on
- * smallfelems */
-static void
-point_double_small(smallfelem x_out, smallfelem y_out, smallfelem z_out,
-    const smallfelem x_in, const smallfelem y_in, const smallfelem z_in)
-{
-       felem felem_x_out, felem_y_out, felem_z_out;
-       felem felem_x_in, felem_y_in, felem_z_in;
-
-       smallfelem_expand(felem_x_in, x_in);
-       smallfelem_expand(felem_y_in, y_in);
-       smallfelem_expand(felem_z_in, z_in);
-       point_double(felem_x_out, felem_y_out, felem_z_out,
-           felem_x_in, felem_y_in, felem_z_in);
-       felem_shrink(x_out, felem_x_out);
-       felem_shrink(y_out, felem_y_out);
-       felem_shrink(z_out, felem_z_out);
-}
-
-/* copy_conditional copies in to out iff mask is all ones. */
-static void
-copy_conditional(felem out, const felem in, limb mask)
-{
-       unsigned i;
-       for (i = 0; i < NLIMBS; ++i) {
-               const limb tmp = mask & (in[i] ^ out[i]);
-               out[i] ^= tmp;
-       }
-}
-
-/* copy_small_conditional copies in to out iff mask is all ones. */
-static void
-copy_small_conditional(felem out, const smallfelem in, limb mask)
-{
-       unsigned i;
-       const u64 mask64 = mask;
-       for (i = 0; i < NLIMBS; ++i) {
-               out[i] = ((limb) (in[i] & mask64)) | (out[i] & ~mask);
-       }
-}
-
-/* point_add calculates (x1, y1, z1) + (x2, y2, z2)
- *
- * The method is taken from:
- *   http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl,
- * adapted for mixed addition (z2 = 1, or z2 = 0 for the point at infinity).
- *
- * This function includes a branch for checking whether the two input points
- * are equal, (while not equal to the point at infinity). This case never
- * happens during single point multiplication, so there is no timing leak for
- * ECDH or ECDSA signing. */
-static void
-point_add(felem x3, felem y3, felem z3,
-    const felem x1, const felem y1, const felem z1,
-    const int mixed, const smallfelem x2, const smallfelem y2, const smallfelem z2)
-{
-       felem ftmp, ftmp2, ftmp3, ftmp4, ftmp5, ftmp6, x_out, y_out, z_out;
-       longfelem tmp, tmp2;
-       smallfelem small1, small2, small3, small4, small5;
-       limb x_equal, y_equal, z1_is_zero, z2_is_zero;
-
-       felem_shrink(small3, z1);
-
-       z1_is_zero = smallfelem_is_zero(small3);
-       z2_is_zero = smallfelem_is_zero(z2);
-
-       /* ftmp = z1z1 = z1**2 */
-       smallfelem_square(tmp, small3);
-       felem_reduce(ftmp, tmp);
-       /* ftmp[i] < 2^101 */
-       felem_shrink(small1, ftmp);
-
-       if (!mixed) {
-               /* ftmp2 = z2z2 = z2**2 */
-               smallfelem_square(tmp, z2);
-               felem_reduce(ftmp2, tmp);
-               /* ftmp2[i] < 2^101 */
-               felem_shrink(small2, ftmp2);
-
-               felem_shrink(small5, x1);
-
-               /* u1 = ftmp3 = x1*z2z2 */
-               smallfelem_mul(tmp, small5, small2);
-               felem_reduce(ftmp3, tmp);
-               /* ftmp3[i] < 2^101 */
-
-               /* ftmp5 = z1 + z2 */
-               felem_assign(ftmp5, z1);
-               felem_small_sum(ftmp5, z2);
-               /* ftmp5[i] < 2^107 */
-
-               /* ftmp5 = (z1 + z2)**2 - (z1z1 + z2z2) = 2z1z2 */
-               felem_square(tmp, ftmp5);
-               felem_reduce(ftmp5, tmp);
-               /* ftmp2 = z2z2 + z1z1 */
-               felem_sum(ftmp2, ftmp);
-               /* ftmp2[i] < 2^101 + 2^101 = 2^102 */
-               felem_diff(ftmp5, ftmp2);
-               /* ftmp5[i] < 2^105 + 2^101 < 2^106 */
-
-               /* ftmp2 = z2 * z2z2 */
-               smallfelem_mul(tmp, small2, z2);
-               felem_reduce(ftmp2, tmp);
-
-               /* s1 = ftmp2 = y1 * z2**3 */
-               felem_mul(tmp, y1, ftmp2);
-               felem_reduce(ftmp6, tmp);
-               /* ftmp6[i] < 2^101 */
-       } else {
-               /* We'll assume z2 = 1 (special case z2 = 0 is handled later) */
-
-               /* u1 = ftmp3 = x1*z2z2 */
-               felem_assign(ftmp3, x1);
-               /* ftmp3[i] < 2^106 */
-
-               /* ftmp5 = 2z1z2 */
-               felem_assign(ftmp5, z1);
-               felem_scalar(ftmp5, 2);
-               /* ftmp5[i] < 2*2^106 = 2^107 */
-
-               /* s1 = ftmp2 = y1 * z2**3 */
-               felem_assign(ftmp6, y1);
-               /* ftmp6[i] < 2^106 */
-       }
-
-       /* u2 = x2*z1z1 */
-       smallfelem_mul(tmp, x2, small1);
-       felem_reduce(ftmp4, tmp);
-
-       /* h = ftmp4 = u2 - u1 */
-       felem_diff_zero107(ftmp4, ftmp3);
-       /* ftmp4[i] < 2^107 + 2^101 < 2^108 */
-       felem_shrink(small4, ftmp4);
-
-       x_equal = smallfelem_is_zero(small4);
-
-       /* z_out = ftmp5 * h */
-       felem_small_mul(tmp, small4, ftmp5);
-       felem_reduce(z_out, tmp);
-       /* z_out[i] < 2^101 */
-
-       /* ftmp = z1 * z1z1 */
-       smallfelem_mul(tmp, small1, small3);
-       felem_reduce(ftmp, tmp);
-
-       /* s2 = tmp = y2 * z1**3 */
-       felem_small_mul(tmp, y2, ftmp);
-       felem_reduce(ftmp5, tmp);
-
-       /* r = ftmp5 = (s2 - s1)*2 */
-       felem_diff_zero107(ftmp5, ftmp6);
-       /* ftmp5[i] < 2^107 + 2^107 = 2^108 */
-       felem_scalar(ftmp5, 2);
-       /* ftmp5[i] < 2^109 */
-       felem_shrink(small1, ftmp5);
-       y_equal = smallfelem_is_zero(small1);
-
-       if (x_equal && y_equal && !z1_is_zero && !z2_is_zero) {
-               point_double(x3, y3, z3, x1, y1, z1);
-               return;
-       }
-       /* I = ftmp = (2h)**2 */
-       felem_assign(ftmp, ftmp4);
-       felem_scalar(ftmp, 2);
-       /* ftmp[i] < 2*2^108 = 2^109 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);
-
-       /* J = ftmp2 = h * I */
-       felem_mul(tmp, ftmp4, ftmp);
-       felem_reduce(ftmp2, tmp);
-
-       /* V = ftmp4 = U1 * I */
-       felem_mul(tmp, ftmp3, ftmp);
-       felem_reduce(ftmp4, tmp);
-
-       /* x_out = r**2 - J - 2V */
-       smallfelem_square(tmp, small1);
-       felem_reduce(x_out, tmp);
-       felem_assign(ftmp3, ftmp4);
-       felem_scalar(ftmp4, 2);
-       felem_sum(ftmp4, ftmp2);
-       /* ftmp4[i] < 2*2^101 + 2^101 < 2^103 */
-       felem_diff(x_out, ftmp4);
-       /* x_out[i] < 2^105 + 2^101 */
-
-       /* y_out = r(V-x_out) - 2 * s1 * J */
-       felem_diff_zero107(ftmp3, x_out);
-       /* ftmp3[i] < 2^107 + 2^101 < 2^108 */
-       felem_small_mul(tmp, small1, ftmp3);
-       felem_mul(tmp2, ftmp6, ftmp2);
-       longfelem_scalar(tmp2, 2);
-       /* tmp2[i] < 2*2^67 = 2^68 */
-       longfelem_diff(tmp, tmp2);
-       /* tmp[i] < 2^67 + 2^70 + 2^40 < 2^71 */
-       felem_reduce_zero105(y_out, tmp);
-       /* y_out[i] < 2^106 */
-
-       copy_small_conditional(x_out, x2, z1_is_zero);
-       copy_conditional(x_out, x1, z2_is_zero);
-       copy_small_conditional(y_out, y2, z1_is_zero);
-       copy_conditional(y_out, y1, z2_is_zero);
-       copy_small_conditional(z_out, z2, z1_is_zero);
-       copy_conditional(z_out, z1, z2_is_zero);
-       felem_assign(x3, x_out);
-       felem_assign(y3, y_out);
-       felem_assign(z3, z_out);
-}
-
-/* point_add_small is the same as point_add, except that it operates on
- * smallfelems */
-static void
-point_add_small(smallfelem x3, smallfelem y3, smallfelem z3,
-    smallfelem x1, smallfelem y1, smallfelem z1,
-    smallfelem x2, smallfelem y2, smallfelem z2)
-{
-       felem felem_x3, felem_y3, felem_z3;
-       felem felem_x1, felem_y1, felem_z1;
-       smallfelem_expand(felem_x1, x1);
-       smallfelem_expand(felem_y1, y1);
-       smallfelem_expand(felem_z1, z1);
-       point_add(felem_x3, felem_y3, felem_z3, felem_x1, felem_y1, felem_z1, 0, x2, y2, z2);
-       felem_shrink(x3, felem_x3);
-       felem_shrink(y3, felem_y3);
-       felem_shrink(z3, felem_z3);
-}
-
-/* Base point pre computation
- * --------------------------
- *
- * Two different sorts of precomputed tables are used in the following code.
- * Each contain various points on the curve, where each point is three field
- * elements (x, y, z).
- *
- * For the base point table, z is usually 1 (0 for the point at infinity).
- * This table has 2 * 16 elements, starting with the following:
- * index | bits    | point
- * ------+---------+------------------------------
- *     0 | 0 0 0 0 | 0G
- *     1 | 0 0 0 1 | 1G
- *     2 | 0 0 1 0 | 2^64G
- *     3 | 0 0 1 1 | (2^64 + 1)G
- *     4 | 0 1 0 0 | 2^128G
- *     5 | 0 1 0 1 | (2^128 + 1)G
- *     6 | 0 1 1 0 | (2^128 + 2^64)G
- *     7 | 0 1 1 1 | (2^128 + 2^64 + 1)G
- *     8 | 1 0 0 0 | 2^192G
- *     9 | 1 0 0 1 | (2^192 + 1)G
- *    10 | 1 0 1 0 | (2^192 + 2^64)G
- *    11 | 1 0 1 1 | (2^192 + 2^64 + 1)G
- *    12 | 1 1 0 0 | (2^192 + 2^128)G
- *    13 | 1 1 0 1 | (2^192 + 2^128 + 1)G
- *    14 | 1 1 1 0 | (2^192 + 2^128 + 2^64)G
- *    15 | 1 1 1 1 | (2^192 + 2^128 + 2^64 + 1)G
- * followed by a copy of this with each element multiplied by 2^32.
- *
- * The reason for this is so that we can clock bits into four different
- * locations when doing simple scalar multiplies against the base point,
- * and then another four locations using the second 16 elements.
- *
- * Tables for other points have table[i] = iG for i in 0 .. 16. */
-
-/* gmul is the table of precomputed base points */
-static const smallfelem gmul[2][16][3] =
-{{{{0, 0, 0, 0},
-{0, 0, 0, 0},
-{0, 0, 0, 0}},
-{{0xf4a13945d898c296, 0x77037d812deb33a0, 0xf8bce6e563a440f2, 0x6b17d1f2e12c4247},
-{0xcbb6406837bf51f5, 0x2bce33576b315ece, 0x8ee7eb4a7c0f9e16, 0x4fe342e2fe1a7f9b},
-{1, 0, 0, 0}},
-{{0x90e75cb48e14db63, 0x29493baaad651f7e, 0x8492592e326e25de, 0x0fa822bc2811aaa5},
-{0xe41124545f462ee7, 0x34b1a65050fe82f5, 0x6f4ad4bcb3df188b, 0xbff44ae8f5dba80d},
-{1, 0, 0, 0}},
-{{0x93391ce2097992af, 0xe96c98fd0d35f1fa, 0xb257c0de95e02789, 0x300a4bbc89d6726f},
-{0xaa54a291c08127a0, 0x5bb1eeada9d806a5, 0x7f1ddb25ff1e3c6f, 0x72aac7e0d09b4644},
-{1, 0, 0, 0}},
-{{0x57c84fc9d789bd85, 0xfc35ff7dc297eac3, 0xfb982fd588c6766e, 0x447d739beedb5e67},
-{0x0c7e33c972e25b32, 0x3d349b95a7fae500, 0xe12e9d953a4aaff7, 0x2d4825ab834131ee},
-{1, 0, 0, 0}},
-{{0x13949c932a1d367f, 0xef7fbd2b1a0a11b7, 0xddc6068bb91dfc60, 0xef9519328a9c72ff},
-{0x196035a77376d8a8, 0x23183b0895ca1740, 0xc1ee9807022c219c, 0x611e9fc37dbb2c9b},
-{1, 0, 0, 0}},
-{{0xcae2b1920b57f4bc, 0x2936df5ec6c9bc36, 0x7dea6482e11238bf, 0x550663797b51f5d8},
-{0x44ffe216348a964c, 0x9fb3d576dbdefbe1, 0x0afa40018d9d50e5, 0x157164848aecb851},
-{1, 0, 0, 0}},
-{{0xe48ecafffc5cde01, 0x7ccd84e70d715f26, 0xa2e8f483f43e4391, 0xeb5d7745b21141ea},
-{0xcac917e2731a3479, 0x85f22cfe2844b645, 0x0990e6a158006cee, 0xeafd72ebdbecc17b},
-{1, 0, 0, 0}},
-{{0x6cf20ffb313728be, 0x96439591a3c6b94a, 0x2736ff8344315fc5, 0xa6d39677a7849276},
-{0xf2bab833c357f5f4, 0x824a920c2284059b, 0x66b8babd2d27ecdf, 0x674f84749b0b8816},
-{1, 0, 0, 0}},
-{{0x2df48c04677c8a3e, 0x74e02f080203a56b, 0x31855f7db8c7fedb, 0x4e769e7672c9ddad},
-{0xa4c36165b824bbb0, 0xfb9ae16f3b9122a5, 0x1ec0057206947281, 0x42b99082de830663},
-{1, 0, 0, 0}},
-{{0x6ef95150dda868b9, 0xd1f89e799c0ce131, 0x7fdc1ca008a1c478, 0x78878ef61c6ce04d},
-{0x9c62b9121fe0d976, 0x6ace570ebde08d4f, 0xde53142c12309def, 0xb6cb3f5d7b72c321},
-{1, 0, 0, 0}},
-{{0x7f991ed2c31a3573, 0x5b82dd5bd54fb496, 0x595c5220812ffcae, 0x0c88bc4d716b1287},
-{0x3a57bf635f48aca8, 0x7c8181f4df2564f3, 0x18d1b5b39c04e6aa, 0xdd5ddea3f3901dc6},
-{1, 0, 0, 0}},
-{{0xe96a79fb3e72ad0c, 0x43a0a28c42ba792f, 0xefe0a423083e49f3, 0x68f344af6b317466},
-{0xcdfe17db3fb24d4a, 0x668bfc2271f5c626, 0x604ed93c24d67ff3, 0x31b9c405f8540a20},
-{1, 0, 0, 0}},
-{{0xd36b4789a2582e7f, 0x0d1a10144ec39c28, 0x663c62c3edbad7a0, 0x4052bf4b6f461db9},
-{0x235a27c3188d25eb, 0xe724f33999bfcc5b, 0x862be6bd71d70cc8, 0xfecf4d5190b0fc61},
-{1, 0, 0, 0}},
-{{0x74346c10a1d4cfac, 0xafdf5cc08526a7a4, 0x123202a8f62bff7a, 0x1eddbae2c802e41a},
-{0x8fa0af2dd603f844, 0x36e06b7e4c701917, 0x0c45f45273db33a0, 0x43104d86560ebcfc},
-{1, 0, 0, 0}},
-{{0x9615b5110d1d78e5, 0x66b0de3225c4744b, 0x0a4a46fb6aaf363a, 0xb48e26b484f7a21c},
-{0x06ebb0f621a01b2d, 0xc004e4048b7b0f98, 0x64131bcdfed6f668, 0xfac015404d4d3dab},
-{1, 0, 0, 0}}},
-{{{0, 0, 0, 0},
-{0, 0, 0, 0},
-{0, 0, 0, 0}},
-{{0x3a5a9e22185a5943, 0x1ab919365c65dfb6, 0x21656b32262c71da, 0x7fe36b40af22af89},
-{0xd50d152c699ca101, 0x74b3d5867b8af212, 0x9f09f40407dca6f1, 0xe697d45825b63624},
-{1, 0, 0, 0}},
-{{0xa84aa9397512218e, 0xe9a521b074ca0141, 0x57880b3a18a2e902, 0x4a5b506612a677a6},
-{0x0beada7a4c4f3840, 0x626db15419e26d9d, 0xc42604fbe1627d40, 0xeb13461ceac089f1},
-{1, 0, 0, 0}},
-{{0xf9faed0927a43281, 0x5e52c4144103ecbc, 0xc342967aa815c857, 0x0781b8291c6a220a},
-{0x5a8343ceeac55f80, 0x88f80eeee54a05e3, 0x97b2a14f12916434, 0x690cde8df0151593},
-{1, 0, 0, 0}},
-{{0xaee9c75df7f82f2a, 0x9e4c35874afdf43a, 0xf5622df437371326, 0x8a535f566ec73617},
-{0xc5f9a0ac223094b7, 0xcde533864c8c7669, 0x37e02819085a92bf, 0x0455c08468b08bd7},
-{1, 0, 0, 0}},
-{{0x0c0a6e2c9477b5d9, 0xf9a4bf62876dc444, 0x5050a949b6cdc279, 0x06bada7ab77f8276},
-{0xc8b4aed1ea48dac9, 0xdebd8a4b7ea1070f, 0x427d49101366eb70, 0x5b476dfd0e6cb18a},
-{1, 0, 0, 0}},
-{{0x7c5c3e44278c340a, 0x4d54606812d66f3b, 0x29a751b1ae23c5d8, 0x3e29864e8a2ec908},
-{0x142d2a6626dbb850, 0xad1744c4765bd780, 0x1f150e68e322d1ed, 0x239b90ea3dc31e7e},
-{1, 0, 0, 0}},
-{{0x78c416527a53322a, 0x305dde6709776f8e, 0xdbcab759f8862ed4, 0x820f4dd949f72ff7},
-{0x6cc544a62b5debd4, 0x75be5d937b4e8cc4, 0x1b481b1b215c14d3, 0x140406ec783a05ec},
-{1, 0, 0, 0}},
-{{0x6a703f10e895df07, 0xfd75f3fa01876bd8, 0xeb5b06e70ce08ffe, 0x68f6b8542783dfee},
-{0x90c76f8a78712655, 0xcf5293d2f310bf7f, 0xfbc8044dfda45028, 0xcbe1feba92e40ce6},
-{1, 0, 0, 0}},
-{{0xe998ceea4396e4c1, 0xfc82ef0b6acea274, 0x230f729f2250e927, 0xd0b2f94d2f420109},
-{0x4305adddb38d4966, 0x10b838f8624c3b45, 0x7db2636658954e7a, 0x971459828b0719e5},
-{1, 0, 0, 0}},
-{{0x4bd6b72623369fc9, 0x57f2929e53d0b876, 0xc2d5cba4f2340687, 0x961610004a866aba},
-{0x49997bcd2e407a5e, 0x69ab197d92ddcb24, 0x2cf1f2438fe5131c, 0x7acb9fadcee75e44},
-{1, 0, 0, 0}},
-{{0x254e839423d2d4c0, 0xf57f0c917aea685b, 0xa60d880f6f75aaea, 0x24eb9acca333bf5b},
-{0xe3de4ccb1cda5dea, 0xfeef9341c51a6b4f, 0x743125f88bac4c4d, 0x69f891c5acd079cc},
-{1, 0, 0, 0}},
-{{0xeee44b35702476b5, 0x7ed031a0e45c2258, 0xb422d1e7bd6f8514, 0xe51f547c5972a107},
-{0xa25bcd6fc9cf343d, 0x8ca922ee097c184e, 0xa62f98b3a9fe9a06, 0x1c309a2b25bb1387},
-{1, 0, 0, 0}},
-{{0x9295dbeb1967c459, 0xb00148833472c98e, 0xc504977708011828, 0x20b87b8aa2c4e503},
-{0x3063175de057c277, 0x1bd539338fe582dd, 0x0d11adef5f69a044, 0xf5c6fa49919776be},
-{1, 0, 0, 0}},
-{{0x8c944e760fd59e11, 0x3876cba1102fad5f, 0xa454c3fad83faa56, 0x1ed7d1b9332010b9},
-{0xa1011a270024b889, 0x05e4d0dcac0cd344, 0x52b520f0eb6a2a24, 0x3a2b03f03217257a},
-{1, 0, 0, 0}},
-{{0xf20fc2afdf1d043d, 0xf330240db58d5a62, 0xfc7d229ca0058c3b, 0x15fee545c78dd9f6},
-{0x501e82885bc98cda, 0x41ef80e5d046ac04, 0x557d9f49461210fb, 0x4ab5b6b2b8753f81},
-{1, 0, 0, 0}}}};
-
-/* select_point selects the |idx|th point from a precomputation table and
- * copies it to out. */
-static void
-select_point(const u64 idx, unsigned int size, const smallfelem pre_comp[16][3], smallfelem out[3])
-{
-       unsigned i, j;
-       u64 *outlimbs = &out[0][0];
-       memset(outlimbs, 0, 3 * sizeof(smallfelem));
-
-       for (i = 0; i < size; i++) {
-               const u64 *inlimbs = (u64 *) & pre_comp[i][0][0];
-               u64 mask = i ^ idx;
-               mask |= mask >> 4;
-               mask |= mask >> 2;
-               mask |= mask >> 1;
-               mask &= 1;
-               mask--;
-               for (j = 0; j < NLIMBS * 3; j++)
-                       outlimbs[j] |= inlimbs[j] & mask;
-       }
-}
-
-/* get_bit returns the |i|th bit in |in| */
-static char
-get_bit(const felem_bytearray in, int i)
-{
-       if ((i < 0) || (i >= 256))
-               return 0;
-       return (in[i >> 3] >> (i & 7)) & 1;
-}
-
-/* Interleaved point multiplication using precomputed point multiples:
- * The small point multiples 0*P, 1*P, ..., 17*P are in pre_comp[],
- * the scalars in scalars[]. If g_scalar is non-NULL, we also add this multiple
- * of the generator, using certain (large) precomputed multiples in g_pre_comp.
- * Output point (X, Y, Z) is stored in x_out, y_out, z_out */
-static void
-batch_mul(felem x_out, felem y_out, felem z_out,
-    const felem_bytearray scalars[], const unsigned num_points, const u8 *g_scalar,
-    const int mixed, const smallfelem pre_comp[][17][3], const smallfelem g_pre_comp[2][16][3])
-{
-       int i, skip;
-       unsigned num, gen_mul = (g_scalar != NULL);
-       felem nq[3], ftmp;
-       smallfelem tmp[3];
-       u64 bits;
-       u8 sign, digit;
-
-       /* set nq to the point at infinity */
-       memset(nq, 0, 3 * sizeof(felem));
-
-       /*
-        * Loop over all scalars msb-to-lsb, interleaving additions of
-        * multiples of the generator (two in each of the last 32 rounds) and
-        * additions of other points multiples (every 5th round).
-        */
-       skip = 1;               /* save two point operations in the first
-                                * round */
-       for (i = (num_points ? 255 : 31); i >= 0; --i) {
-               /* double */
-               if (!skip)
-                       point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
-
-               /* add multiples of the generator */
-               if (gen_mul && (i <= 31)) {
-                       /* first, look 32 bits upwards */
-                       bits = get_bit(g_scalar, i + 224) << 3;
-                       bits |= get_bit(g_scalar, i + 160) << 2;
-                       bits |= get_bit(g_scalar, i + 96) << 1;
-                       bits |= get_bit(g_scalar, i + 32);
-                       /* select the point to add, in constant time */
-                       select_point(bits, 16, g_pre_comp[1], tmp);
-
-                       if (!skip) {
-                               point_add(nq[0], nq[1], nq[2],
-                                   nq[0], nq[1], nq[2],
-                                   1 /* mixed */ , tmp[0], tmp[1], tmp[2]);
-                       } else {
-                               smallfelem_expand(nq[0], tmp[0]);
-                               smallfelem_expand(nq[1], tmp[1]);
-                               smallfelem_expand(nq[2], tmp[2]);
-                               skip = 0;
-                       }
-
-                       /* second, look at the current position */
-                       bits = get_bit(g_scalar, i + 192) << 3;
-                       bits |= get_bit(g_scalar, i + 128) << 2;
-                       bits |= get_bit(g_scalar, i + 64) << 1;
-                       bits |= get_bit(g_scalar, i);
-                       /* select the point to add, in constant time */
-                       select_point(bits, 16, g_pre_comp[0], tmp);
-                       point_add(nq[0], nq[1], nq[2],
-                           nq[0], nq[1], nq[2],
-                           1 /* mixed */ , tmp[0], tmp[1], tmp[2]);
-               }
-               /* do other additions every 5 doublings */
-               if (num_points && (i % 5 == 0)) {
-                       /* loop over all scalars */
-                       for (num = 0; num < num_points; ++num) {
-                               bits = get_bit(scalars[num], i + 4) << 5;
-                               bits |= get_bit(scalars[num], i + 3) << 4;
-                               bits |= get_bit(scalars[num], i + 2) << 3;
-                               bits |= get_bit(scalars[num], i + 1) << 2;
-                               bits |= get_bit(scalars[num], i) << 1;
-                               bits |= get_bit(scalars[num], i - 1);
-                               ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
-
-                               /*
-                                * select the point to add or subtract, in
-                                * constant time
-                                */
-                               select_point(digit, 17, pre_comp[num], tmp);
-                               smallfelem_neg(ftmp, tmp[1]);   /* (X, -Y, Z) is the
-                                                                * negative point */
-                               copy_small_conditional(ftmp, tmp[1], (((limb) sign) - 1));
-                               felem_contract(tmp[1], ftmp);
-
-                               if (!skip) {
-                                       point_add(nq[0], nq[1], nq[2],
-                                           nq[0], nq[1], nq[2],
-                                           mixed, tmp[0], tmp[1], tmp[2]);
-                               } else {
-                                       smallfelem_expand(nq[0], tmp[0]);
-                                       smallfelem_expand(nq[1], tmp[1]);
-                                       smallfelem_expand(nq[2], tmp[2]);
-                                       skip = 0;
-                               }
-                       }
-               }
-       }
-       felem_assign(x_out, nq[0]);
-       felem_assign(y_out, nq[1]);
-       felem_assign(z_out, nq[2]);
-}
-
-/* Precomputation for the group generator. */
-typedef struct {
-       smallfelem g_pre_comp[2][16][3];
-       int references;
-} NISTP256_PRE_COMP;
-
-const EC_METHOD *
-EC_GFp_nistp256_method(void)
-{
-       static const EC_METHOD ret = {
-               .flags = EC_FLAGS_DEFAULT_OCT,
-               .field_type = NID_X9_62_prime_field,
-               .group_init = ec_GFp_nistp256_group_init,
-               .group_finish = ec_GFp_simple_group_finish,
-               .group_clear_finish = ec_GFp_simple_group_clear_finish,
-               .group_copy = ec_GFp_nist_group_copy,
-               .group_set_curve = ec_GFp_nistp256_group_set_curve,
-               .group_get_curve = ec_GFp_simple_group_get_curve,
-               .group_get_degree = ec_GFp_simple_group_get_degree,
-               .group_order_bits = ec_group_simple_order_bits,
-               .group_check_discriminant =
-                   ec_GFp_simple_group_check_discriminant,
-               .point_init = ec_GFp_simple_point_init,
-               .point_finish = ec_GFp_simple_point_finish,
-               .point_clear_finish = ec_GFp_simple_point_clear_finish,
-               .point_copy = ec_GFp_simple_point_copy,
-               .point_set_to_infinity = ec_GFp_simple_point_set_to_infinity,
-               .point_set_Jprojective_coordinates =
-                   ec_GFp_simple_set_Jprojective_coordinates,
-               .point_get_Jprojective_coordinates =
-                   ec_GFp_simple_get_Jprojective_coordinates,
-               .point_set_affine_coordinates =
-                   ec_GFp_simple_point_set_affine_coordinates,
-               .point_get_affine_coordinates =
-                   ec_GFp_nistp256_point_get_affine_coordinates,
-               .add = ec_GFp_simple_add,
-               .dbl = ec_GFp_simple_dbl,
-               .invert = ec_GFp_simple_invert,
-               .is_at_infinity = ec_GFp_simple_is_at_infinity,
-               .is_on_curve = ec_GFp_simple_is_on_curve,
-               .point_cmp = ec_GFp_simple_cmp,
-               .make_affine = ec_GFp_simple_make_affine,
-               .points_make_affine = ec_GFp_simple_points_make_affine,
-               .mul = ec_GFp_nistp256_points_mul,
-               .precompute_mult = ec_GFp_nistp256_precompute_mult,
-               .have_precompute_mult = ec_GFp_nistp256_have_precompute_mult,
-               .field_mul = ec_GFp_nist_field_mul,
-               .field_sqr = ec_GFp_nist_field_sqr,
-               .blind_coordinates = NULL,
-       };
-
-       return &ret;
-}
-
-/******************************************************************************/
-/*                    FUNCTIONS TO MANAGE PRECOMPUTATION
- */
-
-static NISTP256_PRE_COMP *
-nistp256_pre_comp_new()
-{
-       NISTP256_PRE_COMP *ret = NULL;
-       ret = malloc(sizeof *ret);
-       if (!ret) {
-               ECerror(ERR_R_MALLOC_FAILURE);
-               return ret;
-       }
-       memset(ret->g_pre_comp, 0, sizeof(ret->g_pre_comp));
-       ret->references = 1;
-       return ret;
-}
-
-static void *
-nistp256_pre_comp_dup(void *src_)
-{
-       NISTP256_PRE_COMP *src = src_;
-
-       /* no need to actually copy, these objects never change! */
-       CRYPTO_add(&src->references, 1, CRYPTO_LOCK_EC_PRE_COMP);
-
-       return src_;
-}
-
-static void
-nistp256_pre_comp_free(void *pre_)
-{
-       int i;
-       NISTP256_PRE_COMP *pre = pre_;
-
-       if (!pre)
-               return;
-
-       i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
-       if (i > 0)
-               return;
-
-       free(pre);
-}
-
-static void
-nistp256_pre_comp_clear_free(void *pre_)
-{
-       int i;
-       NISTP256_PRE_COMP *pre = pre_;
-
-       if (!pre)
-               return;
-
-       i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
-       if (i > 0)
-               return;
-
-       freezero(pre, sizeof *pre);
-}
-
-/******************************************************************************/
-/*                        OPENSSL EC_METHOD FUNCTIONS
- */
-
-int
-ec_GFp_nistp256_group_init(EC_GROUP *group)
-{
-       int ret;
-       ret = ec_GFp_simple_group_init(group);
-       group->a_is_minus3 = 1;
-       return ret;
-}
-
-int
-ec_GFp_nistp256_group_set_curve(EC_GROUP *group, const BIGNUM *p,
-    const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx)
-{
-       int ret = 0;
-       BN_CTX *new_ctx = NULL;
-       BIGNUM *curve_p, *curve_a, *curve_b;
-
-       if (ctx == NULL)
-               if ((ctx = new_ctx = BN_CTX_new()) == NULL)
-                       return 0;
-       BN_CTX_start(ctx);
-       if (((curve_p = BN_CTX_get(ctx)) == NULL) ||
-           ((curve_a = BN_CTX_get(ctx)) == NULL) ||
-           ((curve_b = BN_CTX_get(ctx)) == NULL))
-               goto err;
-       BN_bin2bn(nistp256_curve_params[0], sizeof(felem_bytearray), curve_p);
-       BN_bin2bn(nistp256_curve_params[1], sizeof(felem_bytearray), curve_a);
-       BN_bin2bn(nistp256_curve_params[2], sizeof(felem_bytearray), curve_b);
-       if ((BN_cmp(curve_p, p)) || (BN_cmp(curve_a, a)) ||
-           (BN_cmp(curve_b, b))) {
-               ECerror(EC_R_WRONG_CURVE_PARAMETERS);
-               goto err;
-       }
-       group->field_mod_func = BN_nist_mod_256;
-       ret = ec_GFp_simple_group_set_curve(group, p, a, b, ctx);
- err:
-       BN_CTX_end(ctx);
-       BN_CTX_free(new_ctx);
-       return ret;
-}
-
-/* Takes the Jacobian coordinates (X, Y, Z) of a point and returns
- * (X', Y') = (X/Z^2, Y/Z^3) */
-int
-ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group,
-    const EC_POINT *point, BIGNUM *x, BIGNUM *y, BN_CTX *ctx)
-{
-       felem z1, z2, x_in, y_in;
-       smallfelem x_out, y_out;
-       longfelem tmp;
-
-       if (EC_POINT_is_at_infinity(group, point) > 0) {
-               ECerror(EC_R_POINT_AT_INFINITY);
-               return 0;
-       }
-       if ((!BN_to_felem(x_in, &point->X)) || (!BN_to_felem(y_in, &point->Y)) ||
-           (!BN_to_felem(z1, &point->Z)))
-               return 0;
-       felem_inv(z2, z1);
-       felem_square(tmp, z2);
-       felem_reduce(z1, tmp);
-       felem_mul(tmp, x_in, z1);
-       felem_reduce(x_in, tmp);
-       felem_contract(x_out, x_in);
-       if (x != NULL) {
-               if (!smallfelem_to_BN(x, x_out)) {
-                       ECerror(ERR_R_BN_LIB);
-                       return 0;
-               }
-       }
-       felem_mul(tmp, z1, z2);
-       felem_reduce(z1, tmp);
-       felem_mul(tmp, y_in, z1);
-       felem_reduce(y_in, tmp);
-       felem_contract(y_out, y_in);
-       if (y != NULL) {
-               if (!smallfelem_to_BN(y, y_out)) {
-                       ECerror(ERR_R_BN_LIB);
-                       return 0;
-               }
-       }
-       return 1;
-}
-
-static void
-make_points_affine(size_t num, smallfelem points[ /* num */ ][3], smallfelem tmp_smallfelems[ /* num+1 */ ])
-{
-       /*
-        * Runs in constant time, unless an input is the point at infinity
-        * (which normally shouldn't happen).
-        */
-       ec_GFp_nistp_points_make_affine_internal(
-           num,
-           points,
-           sizeof(smallfelem),
-           tmp_smallfelems,
-           (void (*) (void *)) smallfelem_one,
-           (int (*) (const void *)) smallfelem_is_zero_int,
-           (void (*) (void *, const void *)) smallfelem_assign,
-           (void (*) (void *, const void *)) smallfelem_square_contract,
-           (void (*) (void *, const void *, const void *)) smallfelem_mul_contract,
-           (void (*) (void *, const void *)) smallfelem_inv_contract,
-           (void (*) (void *, const void *)) smallfelem_assign /* nothing to contract */ );
-}
-
-/* Computes scalar*generator + \sum scalars[i]*points[i], ignoring NULL values
- * Result is stored in r (r can equal one of the inputs). */
-int
-ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
-    const BIGNUM *scalar, size_t num, const EC_POINT *points[],
-    const BIGNUM *scalars[], BN_CTX *ctx)
-{
-       int ret = 0;
-       int j;
-       int mixed = 0;
-       BN_CTX *new_ctx = NULL;
-       BIGNUM *x, *y, *z, *tmp_scalar;
-       felem_bytearray g_secret;
-       felem_bytearray *secrets = NULL;
-       smallfelem(*pre_comp)[17][3] = NULL;
-       smallfelem *tmp_smallfelems = NULL;
-       felem_bytearray tmp;
-       unsigned i, num_bytes;
-       int have_pre_comp = 0;
-       size_t num_points = num;
-       smallfelem x_in, y_in, z_in;
-       felem x_out, y_out, z_out;
-       NISTP256_PRE_COMP *pre = NULL;
-       const smallfelem(*g_pre_comp)[16][3] = NULL;
-       EC_POINT *generator = NULL;
-       const EC_POINT *p = NULL;
-       const BIGNUM *p_scalar = NULL;
-
-       if (ctx == NULL)
-               if ((ctx = new_ctx = BN_CTX_new()) == NULL)
-                       return 0;
-       BN_CTX_start(ctx);
-       if (((x = BN_CTX_get(ctx)) == NULL) ||
-           ((y = BN_CTX_get(ctx)) == NULL) ||
-           ((z = BN_CTX_get(ctx)) == NULL) ||
-           ((tmp_scalar = BN_CTX_get(ctx)) == NULL))
-               goto err;
-
-       if (scalar != NULL) {
-               pre = EC_EX_DATA_get_data(group->extra_data,
-                   nistp256_pre_comp_dup, nistp256_pre_comp_free,
-                   nistp256_pre_comp_clear_free);
-               if (pre)
-                       /* we have precomputation, try to use it */
-                       g_pre_comp = (const smallfelem(*)[16][3]) pre->g_pre_comp;
-               else
-                       /* try to use the standard precomputation */
-                       g_pre_comp = &gmul[0];
-               generator = EC_POINT_new(group);
-               if (generator == NULL)
-                       goto err;
-               /* get the generator from precomputation */
-               if (!smallfelem_to_BN(x, g_pre_comp[0][1][0]) ||
-                   !smallfelem_to_BN(y, g_pre_comp[0][1][1]) ||
-                   !smallfelem_to_BN(z, g_pre_comp[0][1][2])) {
-                       ECerror(ERR_R_BN_LIB);
-                       goto err;
-               }
-               if (!EC_POINT_set_Jprojective_coordinates(group, generator,
-                   x, y, z, ctx))
-                       goto err;
-               if (0 == EC_POINT_cmp(group, generator, group->generator, ctx))
-                       /* precomputation matches generator */
-                       have_pre_comp = 1;
-               else
-                       /*
-                        * we don't have valid precomputation: treat the
-                        * generator as a random point
-                        */
-                       num_points++;
-       }
-       if (num_points > 0) {
-               if (num_points >= 3) {
-                       /*
-                        * unless we precompute multiples for just one or two
-                        * points, converting those into affine form is time
-                        * well spent
-                        */
-                       mixed = 1;
-               }
-               secrets = calloc(num_points, sizeof(felem_bytearray));
-               pre_comp = calloc(num_points, 17 * 3 * sizeof(smallfelem));
-               if (mixed) {
-                       /* XXX should do more int overflow checking */
-                       tmp_smallfelems = reallocarray(NULL,
-                           (num_points * 17 + 1), sizeof(smallfelem));
-               }
-               if ((secrets == NULL) || (pre_comp == NULL) || (mixed && (tmp_smallfelems == NULL))) {
-                       ECerror(ERR_R_MALLOC_FAILURE);
-                       goto err;
-               }
-               /*
-                * we treat NULL scalars as 0, and NULL points as points at
-                * infinity, i.e., they contribute nothing to the linear
-                * combination
-                */
-               for (i = 0; i < num_points; ++i) {
-                       if (i == num)
-                               /*
-                                * we didn't have a valid precomputation, so
-                                * we pick the generator
-                                */
-                       {
-                               p = EC_GROUP_get0_generator(group);
-                               p_scalar = scalar;
-                       } else
-                               /* the i^th point */
-                       {
-                               p = points[i];
-                               p_scalar = scalars[i];
-                       }
-                       if ((p_scalar != NULL) && (p != NULL)) {
-                               /* reduce scalar to 0 <= scalar < 2^256 */
-                               if ((BN_num_bits(p_scalar) > 256) || (BN_is_negative(p_scalar))) {
-                                       /*
-                                        * this is an unusual input, and we
-                                        * don't guarantee constant-timeness
-                                        */
-                                       if (!BN_nnmod(tmp_scalar, p_scalar, &group->order, ctx)) {
-                                               ECerror(ERR_R_BN_LIB);
-                                               goto err;
-                                       }
-                                       num_bytes = BN_bn2bin(tmp_scalar, tmp);
-                               } else
-                                       num_bytes = BN_bn2bin(p_scalar, tmp);
-                               flip_endian(secrets[i], tmp, num_bytes);
-                               /* precompute multiples */
-                               if ((!BN_to_felem(x_out, &p->X)) ||
-                                   (!BN_to_felem(y_out, &p->Y)) ||
-                                   (!BN_to_felem(z_out, &p->Z)))
-                                       goto err;
-                               felem_shrink(pre_comp[i][1][0], x_out);
-                               felem_shrink(pre_comp[i][1][1], y_out);
-                               felem_shrink(pre_comp[i][1][2], z_out);
-                               for (j = 2; j <= 16; ++j) {
-                                       if (j & 1) {
-                                               point_add_small(
-                                                   pre_comp[i][j][0], pre_comp[i][j][1], pre_comp[i][j][2],
-                                                   pre_comp[i][1][0], pre_comp[i][1][1], pre_comp[i][1][2],
-                                                   pre_comp[i][j - 1][0], pre_comp[i][j - 1][1], pre_comp[i][j - 1][2]);
-                                       } else {
-                                               point_double_small(
-                                                   pre_comp[i][j][0], pre_comp[i][j][1], pre_comp[i][j][2],
-                                                   pre_comp[i][j / 2][0], pre_comp[i][j / 2][1], pre_comp[i][j / 2][2]);
-                                       }
-                               }
-                       }
-               }
-               if (mixed)
-                       make_points_affine(num_points * 17, pre_comp[0], tmp_smallfelems);
-       }
-       /* the scalar for the generator */
-       if ((scalar != NULL) && (have_pre_comp)) {
-               memset(g_secret, 0, sizeof(g_secret));
-               /* reduce scalar to 0 <= scalar < 2^256 */
-               if ((BN_num_bits(scalar) > 256) || (BN_is_negative(scalar))) {
-                       /*
-                        * this is an unusual input, and we don't guarantee
-                        * constant-timeness
-                        */
-                       if (!BN_nnmod(tmp_scalar, scalar, &group->order, ctx)) {
-                               ECerror(ERR_R_BN_LIB);
-                               goto err;
-                       }
-                       num_bytes = BN_bn2bin(tmp_scalar, tmp);
-               } else
-                       num_bytes = BN_bn2bin(scalar, tmp);
-               flip_endian(g_secret, tmp, num_bytes);
-               /* do the multiplication with generator precomputation */
-               batch_mul(x_out, y_out, z_out,
-                   (const felem_bytearray(*)) secrets, num_points,
-                   g_secret,
-                   mixed, (const smallfelem(*)[17][3]) pre_comp,
-                   g_pre_comp);
-       } else
-               /* do the multiplication without generator precomputation */
-               batch_mul(x_out, y_out, z_out,
-                   (const felem_bytearray(*)) secrets, num_points,
-                   NULL, mixed, (const smallfelem(*)[17][3]) pre_comp, NULL);
-       /* reduce the output to its unique minimal representation */
-       felem_contract(x_in, x_out);
-       felem_contract(y_in, y_out);
-       felem_contract(z_in, z_out);
-       if ((!smallfelem_to_BN(x, x_in)) || (!smallfelem_to_BN(y, y_in)) ||
-           (!smallfelem_to_BN(z, z_in))) {
-               ECerror(ERR_R_BN_LIB);
-               goto err;
-       }
-       ret = EC_POINT_set_Jprojective_coordinates(group, r, x, y, z, ctx);
-
- err:
-       BN_CTX_end(ctx);
-       EC_POINT_free(generator);
-       BN_CTX_free(new_ctx);
-       free(secrets);
-       free(pre_comp);
-       free(tmp_smallfelems);
-       return ret;
-}
-
-int
-ec_GFp_nistp256_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
-{
-       int ret = 0;
-       NISTP256_PRE_COMP *pre = NULL;
-       int i, j;
-       BN_CTX *new_ctx = NULL;
-       BIGNUM *x, *y;
-       EC_POINT *generator = NULL;
-       smallfelem tmp_smallfelems[32];
-       felem x_tmp, y_tmp, z_tmp;
-
-       /* throw away old precomputation */
-       EC_EX_DATA_free_data(&group->extra_data, nistp256_pre_comp_dup,
-           nistp256_pre_comp_free, nistp256_pre_comp_clear_free);
-       if (ctx == NULL)
-               if ((ctx = new_ctx = BN_CTX_new()) == NULL)
-                       return 0;
-       BN_CTX_start(ctx);
-       if (((x = BN_CTX_get(ctx)) == NULL) ||
-           ((y = BN_CTX_get(ctx)) == NULL))
-               goto err;
-       /* get the generator */
-       if (group->generator == NULL)
-               goto err;
-       generator = EC_POINT_new(group);
-       if (generator == NULL)
-               goto err;
-       BN_bin2bn(nistp256_curve_params[3], sizeof(felem_bytearray), x);
-       BN_bin2bn(nistp256_curve_params[4], sizeof(felem_bytearray), y);
-       if (!EC_POINT_set_affine_coordinates(group, generator, x, y, ctx))
-               goto err;
-       if ((pre = nistp256_pre_comp_new()) == NULL)
-               goto err;
-       /* if the generator is the standard one, use built-in precomputation */
-       if (0 == EC_POINT_cmp(group, generator, group->generator, ctx)) {
-               memcpy(pre->g_pre_comp, gmul, sizeof(pre->g_pre_comp));
-               ret = 1;
-               goto err;
-       }
-       if ((!BN_to_felem(x_tmp, &group->generator->X)) ||
-           (!BN_to_felem(y_tmp, &group->generator->Y)) ||
-           (!BN_to_felem(z_tmp, &group->generator->Z)))
-               goto err;
-       felem_shrink(pre->g_pre_comp[0][1][0], x_tmp);
-       felem_shrink(pre->g_pre_comp[0][1][1], y_tmp);
-       felem_shrink(pre->g_pre_comp[0][1][2], z_tmp);
-       /*
-        * compute 2^64*G, 2^128*G, 2^192*G for the first table, 2^32*G,
-        * 2^96*G, 2^160*G, 2^224*G for the second one
-        */
-       for (i = 1; i <= 8; i <<= 1) {
-               point_double_small(
-                   pre->g_pre_comp[1][i][0], pre->g_pre_comp[1][i][1], pre->g_pre_comp[1][i][2],
-                   pre->g_pre_comp[0][i][0], pre->g_pre_comp[0][i][1], pre->g_pre_comp[0][i][2]);
-               for (j = 0; j < 31; ++j) {
-                       point_double_small(
-                           pre->g_pre_comp[1][i][0], pre->g_pre_comp[1][i][1], pre->g_pre_comp[1][i][2],
-                           pre->g_pre_comp[1][i][0], pre->g_pre_comp[1][i][1], pre->g_pre_comp[1][i][2]);
-               }
-               if (i == 8)
-                       break;
-               point_double_small(
-                   pre->g_pre_comp[0][2 * i][0], pre->g_pre_comp[0][2 * i][1], pre->g_pre_comp[0][2 * i][2],
-                   pre->g_pre_comp[1][i][0], pre->g_pre_comp[1][i][1], pre->g_pre_comp[1][i][2]);
-               for (j = 0; j < 31; ++j) {
-                       point_double_small(
-                           pre->g_pre_comp[0][2 * i][0], pre->g_pre_comp[0][2 * i][1], pre->g_pre_comp[0][2 * i][2],
-                           pre->g_pre_comp[0][2 * i][0], pre->g_pre_comp[0][2 * i][1], pre->g_pre_comp[0][2 * i][2]);
-               }
-       }
-       for (i = 0; i < 2; i++) {
-               /* g_pre_comp[i][0] is the point at infinity */
-               memset(pre->g_pre_comp[i][0], 0, sizeof(pre->g_pre_comp[i][0]));
-               /* the remaining multiples */
-               /* 2^64*G + 2^128*G resp. 2^96*G + 2^160*G */
-               point_add_small(
-                   pre->g_pre_comp[i][6][0], pre->g_pre_comp[i][6][1], pre->g_pre_comp[i][6][2],
-                   pre->g_pre_comp[i][4][0], pre->g_pre_comp[i][4][1], pre->g_pre_comp[i][4][2],
-                   pre->g_pre_comp[i][2][0], pre->g_pre_comp[i][2][1], pre->g_pre_comp[i][2][2]);
-               /* 2^64*G + 2^192*G resp. 2^96*G + 2^224*G */
-               point_add_small(
-                   pre->g_pre_comp[i][10][0], pre->g_pre_comp[i][10][1], pre->g_pre_comp[i][10][2],
-                   pre->g_pre_comp[i][8][0], pre->g_pre_comp[i][8][1], pre->g_pre_comp[i][8][2],
-                   pre->g_pre_comp[i][2][0], pre->g_pre_comp[i][2][1], pre->g_pre_comp[i][2][2]);
-               /* 2^128*G + 2^192*G resp. 2^160*G + 2^224*G */
-               point_add_small(
-                   pre->g_pre_comp[i][12][0], pre->g_pre_comp[i][12][1], pre->g_pre_comp[i][12][2],
-                   pre->g_pre_comp[i][8][0], pre->g_pre_comp[i][8][1], pre->g_pre_comp[i][8][2],
-                   pre->g_pre_comp[i][4][0], pre->g_pre_comp[i][4][1], pre->g_pre_comp[i][4][2]);
-               /*
-                * 2^64*G + 2^128*G + 2^192*G resp. 2^96*G + 2^160*G +
-                * 2^224*G
-                */
-               point_add_small(
-                   pre->g_pre_comp[i][14][0], pre->g_pre_comp[i][14][1], pre->g_pre_comp[i][14][2],
-                   pre->g_pre_comp[i][12][0], pre->g_pre_comp[i][12][1], pre->g_pre_comp[i][12][2],
-                   pre->g_pre_comp[i][2][0], pre->g_pre_comp[i][2][1], pre->g_pre_comp[i][2][2]);
-               for (j = 1; j < 8; ++j) {
-                       /* odd multiples: add G resp. 2^32*G */
-                       point_add_small(
-                           pre->g_pre_comp[i][2 * j + 1][0], pre->g_pre_comp[i][2 * j + 1][1], pre->g_pre_comp[i][2 * j + 1][2],
-                           pre->g_pre_comp[i][2 * j][0], pre->g_pre_comp[i][2 * j][1], pre->g_pre_comp[i][2 * j][2],
-                           pre->g_pre_comp[i][1][0], pre->g_pre_comp[i][1][1], pre->g_pre_comp[i][1][2]);
-               }
-       }
-       make_points_affine(31, &(pre->g_pre_comp[0][1]), tmp_smallfelems);
-
-       if (!EC_EX_DATA_set_data(&group->extra_data, pre, nistp256_pre_comp_dup,
-               nistp256_pre_comp_free, nistp256_pre_comp_clear_free))
-               goto err;
-       ret = 1;
-       pre = NULL;
- err:
-       BN_CTX_end(ctx);
-       EC_POINT_free(generator);
-       BN_CTX_free(new_ctx);
-       nistp256_pre_comp_free(pre);
-       return ret;
-}
-
-int
-ec_GFp_nistp256_have_precompute_mult(const EC_GROUP *group)
-{
-       if (EC_EX_DATA_get_data(group->extra_data, nistp256_pre_comp_dup,
-               nistp256_pre_comp_free, nistp256_pre_comp_clear_free)
-           != NULL)
-               return 1;
-       else
-               return 0;
-}
-#endif
diff --git a/lib/libcrypto/ec/ecp_nistp521.c b/lib/libcrypto/ec/ecp_nistp521.c
deleted file mode 100644 (file)
index caeea14..0000000
+++ /dev/null
@@ -1,2112 +0,0 @@
-/* $OpenBSD: ecp_nistp521.c,v 1.30 2022/12/26 07:18:51 jmc Exp $ */
-/*
- * Written by Adam Langley (Google) for the OpenSSL project
- */
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * A 64-bit implementation of the NIST P-521 elliptic curve point multiplication
- *
- * OpenSSL integration was taken from Emilia Kasper's work in ecp_nistp224.c.
- * Otherwise based on Emilia's P224 work, which was inspired by my curve25519
- * work which got its smarts from Daniel J. Bernstein's work on the same.
- */
-
-#include <stdint.h>
-#include <string.h>
-
-#include <openssl/opensslconf.h>
-
-#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
-
-#include <openssl/err.h>
-#include "ec_local.h"
-
-#if defined(__GNUC__) && (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
-  /* even with gcc, the typedef won't work for 32-bit platforms */
-  typedef __uint128_t uint128_t; /* nonstandard; implemented by gcc on 64-bit platforms */
-#else
-  #error "Need GCC 3.1 or later to define type uint128_t"
-#endif
-
-typedef uint8_t u8;
-typedef uint64_t u64;
-typedef int64_t s64;
-
-/* The underlying field.
- *
- * P521 operates over GF(2^521-1). We can serialise an element of this field
- * into 66 bytes where the most significant byte contains only a single bit. We
- * call this an felem_bytearray. */
-
-typedef u8 felem_bytearray[66];
-
-/* These are the parameters of P521, taken from FIPS 186-3, section D.1.2.5.
- * These values are big-endian. */
-static const felem_bytearray nistp521_curve_params[5] =
-       {
-       {0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,  /* p */
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff},
-       {0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,  /* a = -3 */
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-        0xff, 0xfc},
-       {0x00, 0x51, 0x95, 0x3e, 0xb9, 0x61, 0x8e, 0x1c,  /* b */
-        0x9a, 0x1f, 0x92, 0x9a, 0x21, 0xa0, 0xb6, 0x85,
-        0x40, 0xee, 0xa2, 0xda, 0x72, 0x5b, 0x99, 0xb3,
-        0x15, 0xf3, 0xb8, 0xb4, 0x89, 0x91, 0x8e, 0xf1,
-        0x09, 0xe1, 0x56, 0x19, 0x39, 0x51, 0xec, 0x7e,
-        0x93, 0x7b, 0x16, 0x52, 0xc0, 0xbd, 0x3b, 0xb1,
-        0xbf, 0x07, 0x35, 0x73, 0xdf, 0x88, 0x3d, 0x2c,
-        0x34, 0xf1, 0xef, 0x45, 0x1f, 0xd4, 0x6b, 0x50,
-        0x3f, 0x00},
-       {0x00, 0xc6, 0x85, 0x8e, 0x06, 0xb7, 0x04, 0x04,  /* x */
-        0xe9, 0xcd, 0x9e, 0x3e, 0xcb, 0x66, 0x23, 0x95,
-        0xb4, 0x42, 0x9c, 0x64, 0x81, 0x39, 0x05, 0x3f,
-        0xb5, 0x21, 0xf8, 0x28, 0xaf, 0x60, 0x6b, 0x4d,
-        0x3d, 0xba, 0xa1, 0x4b, 0x5e, 0x77, 0xef, 0xe7,
-        0x59, 0x28, 0xfe, 0x1d, 0xc1, 0x27, 0xa2, 0xff,
-        0xa8, 0xde, 0x33, 0x48, 0xb3, 0xc1, 0x85, 0x6a,
-        0x42, 0x9b, 0xf9, 0x7e, 0x7e, 0x31, 0xc2, 0xe5,
-        0xbd, 0x66},
-       {0x01, 0x18, 0x39, 0x29, 0x6a, 0x78, 0x9a, 0x3b,  /* y */
-        0xc0, 0x04, 0x5c, 0x8a, 0x5f, 0xb4, 0x2c, 0x7d,
-        0x1b, 0xd9, 0x98, 0xf5, 0x44, 0x49, 0x57, 0x9b,
-        0x44, 0x68, 0x17, 0xaf, 0xbd, 0x17, 0x27, 0x3e,
-        0x66, 0x2c, 0x97, 0xee, 0x72, 0x99, 0x5e, 0xf4,
-        0x26, 0x40, 0xc5, 0x50, 0xb9, 0x01, 0x3f, 0xad,
-        0x07, 0x61, 0x35, 0x3c, 0x70, 0x86, 0xa2, 0x72,
-        0xc2, 0x40, 0x88, 0xbe, 0x94, 0x76, 0x9f, 0xd1,
-        0x66, 0x50}
-       };
-
-/* The representation of field elements.
- * ------------------------------------
- *
- * We represent field elements with nine values. These values are either 64 or
- * 128 bits and the field element represented is:
- *   v[0]*2^0 + v[1]*2^58 + v[2]*2^116 + ... + v[8]*2^464  (mod p)
- * Each of the nine values is called a 'limb'. Since the limbs are spaced only
- * 58 bits apart, but are greater than 58 bits in length, the most significant
- * bits of each limb overlap with the least significant bits of the next.
- *
- * A field element with 64-bit limbs is an 'felem'. One with 128-bit limbs is a
- * 'largefelem' */
-
-#define NLIMBS 9
-
-typedef uint64_t limb;
-typedef limb felem[NLIMBS];
-typedef uint128_t largefelem[NLIMBS];
-
-static const limb bottom57bits = 0x1ffffffffffffff;
-static const limb bottom58bits = 0x3ffffffffffffff;
-
-/* bin66_to_felem takes a little-endian byte array and converts it into felem
- * form. This assumes that the CPU is little-endian. */
-static void
-bin66_to_felem(felem out, const u8 in[66])
-{
-       out[0] = (*((limb *) & in[0])) & bottom58bits;
-       out[1] = (*((limb *) & in[7]) >> 2) & bottom58bits;
-       out[2] = (*((limb *) & in[14]) >> 4) & bottom58bits;
-       out[3] = (*((limb *) & in[21]) >> 6) & bottom58bits;
-       out[4] = (*((limb *) & in[29])) & bottom58bits;
-       out[5] = (*((limb *) & in[36]) >> 2) & bottom58bits;
-       out[6] = (*((limb *) & in[43]) >> 4) & bottom58bits;
-       out[7] = (*((limb *) & in[50]) >> 6) & bottom58bits;
-       out[8] = (*((limb *) & in[58])) & bottom57bits;
-}
-
-/* felem_to_bin66 takes an felem and serialises into a little endian, 66 byte
- * array. This assumes that the CPU is little-endian. */
-static void
-felem_to_bin66(u8 out[66], const felem in)
-{
-       memset(out, 0, 66);
-       (*((limb *) & out[0])) = in[0];
-       (*((limb *) & out[7])) |= in[1] << 2;
-       (*((limb *) & out[14])) |= in[2] << 4;
-       (*((limb *) & out[21])) |= in[3] << 6;
-       (*((limb *) & out[29])) = in[4];
-       (*((limb *) & out[36])) |= in[5] << 2;
-       (*((limb *) & out[43])) |= in[6] << 4;
-       (*((limb *) & out[50])) |= in[7] << 6;
-       (*((limb *) & out[58])) = in[8];
-}
-
-/* To preserve endianness when using BN_bn2bin and BN_bin2bn */
-static void
-flip_endian(u8 *out, const u8 *in, unsigned len)
-{
-       unsigned i;
-       for (i = 0; i < len; ++i)
-               out[i] = in[len - 1 - i];
-}
-
-/* BN_to_felem converts an OpenSSL BIGNUM into an felem */
-static int
-BN_to_felem(felem out, const BIGNUM *bn)
-{
-       felem_bytearray b_in;
-       felem_bytearray b_out;
-       unsigned num_bytes;
-
-       /* BN_bn2bin eats leading zeroes */
-       memset(b_out, 0, sizeof b_out);
-       num_bytes = BN_num_bytes(bn);
-       if (num_bytes > sizeof b_out) {
-               ECerror(EC_R_BIGNUM_OUT_OF_RANGE);
-               return 0;
-       }
-       if (BN_is_negative(bn)) {
-               ECerror(EC_R_BIGNUM_OUT_OF_RANGE);
-               return 0;
-       }
-       num_bytes = BN_bn2bin(bn, b_in);
-       flip_endian(b_out, b_in, num_bytes);
-       bin66_to_felem(out, b_out);
-       return 1;
-}
-
-/* felem_to_BN converts an felem into an OpenSSL BIGNUM */
-static BIGNUM *
-felem_to_BN(BIGNUM *out, const felem in)
-{
-       felem_bytearray b_in, b_out;
-       felem_to_bin66(b_in, in);
-       flip_endian(b_out, b_in, sizeof b_out);
-       return BN_bin2bn(b_out, sizeof b_out, out);
-}
-
-
-/* Field operations
- * ---------------- */
-
-static void
-felem_one(felem out)
-{
-       out[0] = 1;
-       out[1] = 0;
-       out[2] = 0;
-       out[3] = 0;
-       out[4] = 0;
-       out[5] = 0;
-       out[6] = 0;
-       out[7] = 0;
-       out[8] = 0;
-}
-
-static void
-felem_assign(felem out, const felem in)
-{
-       out[0] = in[0];
-       out[1] = in[1];
-       out[2] = in[2];
-       out[3] = in[3];
-       out[4] = in[4];
-       out[5] = in[5];
-       out[6] = in[6];
-       out[7] = in[7];
-       out[8] = in[8];
-}
-
-/* felem_sum64 sets out = out + in. */
-static void
-felem_sum64(felem out, const felem in)
-{
-       out[0] += in[0];
-       out[1] += in[1];
-       out[2] += in[2];
-       out[3] += in[3];
-       out[4] += in[4];
-       out[5] += in[5];
-       out[6] += in[6];
-       out[7] += in[7];
-       out[8] += in[8];
-}
-
-/* felem_scalar sets out = in * scalar */
-static void
-felem_scalar(felem out, const felem in, limb scalar)
-{
-       out[0] = in[0] * scalar;
-       out[1] = in[1] * scalar;
-       out[2] = in[2] * scalar;
-       out[3] = in[3] * scalar;
-       out[4] = in[4] * scalar;
-       out[5] = in[5] * scalar;
-       out[6] = in[6] * scalar;
-       out[7] = in[7] * scalar;
-       out[8] = in[8] * scalar;
-}
-
-/* felem_scalar64 sets out = out * scalar */
-static void
-felem_scalar64(felem out, limb scalar)
-{
-       out[0] *= scalar;
-       out[1] *= scalar;
-       out[2] *= scalar;
-       out[3] *= scalar;
-       out[4] *= scalar;
-       out[5] *= scalar;
-       out[6] *= scalar;
-       out[7] *= scalar;
-       out[8] *= scalar;
-}
-
-/* felem_scalar128 sets out = out * scalar */
-static void
-felem_scalar128(largefelem out, limb scalar)
-{
-       out[0] *= scalar;
-       out[1] *= scalar;
-       out[2] *= scalar;
-       out[3] *= scalar;
-       out[4] *= scalar;
-       out[5] *= scalar;
-       out[6] *= scalar;
-       out[7] *= scalar;
-       out[8] *= scalar;
-}
-
-/* felem_neg sets |out| to |-in|
- * On entry:
- *   in[i] < 2^59 + 2^14
- * On exit:
- *   out[i] < 2^62
- */
-static void
-felem_neg(felem out, const felem in)
-{
-       /* In order to prevent underflow, we subtract from 0 mod p. */
-       static const limb two62m3 = (((limb) 1) << 62) - (((limb) 1) << 5);
-       static const limb two62m2 = (((limb) 1) << 62) - (((limb) 1) << 4);
-
-       out[0] = two62m3 - in[0];
-       out[1] = two62m2 - in[1];
-       out[2] = two62m2 - in[2];
-       out[3] = two62m2 - in[3];
-       out[4] = two62m2 - in[4];
-       out[5] = two62m2 - in[5];
-       out[6] = two62m2 - in[6];
-       out[7] = two62m2 - in[7];
-       out[8] = two62m2 - in[8];
-}
-
-/* felem_diff64 subtracts |in| from |out|
- * On entry:
- *   in[i] < 2^59 + 2^14
- * On exit:
- *   out[i] < out[i] + 2^62
- */
-static void
-felem_diff64(felem out, const felem in)
-{
-       /* In order to prevent underflow, we add 0 mod p before subtracting. */
-       static const limb two62m3 = (((limb) 1) << 62) - (((limb) 1) << 5);
-       static const limb two62m2 = (((limb) 1) << 62) - (((limb) 1) << 4);
-
-       out[0] += two62m3 - in[0];
-       out[1] += two62m2 - in[1];
-       out[2] += two62m2 - in[2];
-       out[3] += two62m2 - in[3];
-       out[4] += two62m2 - in[4];
-       out[5] += two62m2 - in[5];
-       out[6] += two62m2 - in[6];
-       out[7] += two62m2 - in[7];
-       out[8] += two62m2 - in[8];
-}
-
-/* felem_diff_128_64 subtracts |in| from |out|
- * On entry:
- *   in[i] < 2^62 + 2^17
- * On exit:
- *   out[i] < out[i] + 2^63
- */
-static void
-felem_diff_128_64(largefelem out, const felem in)
-{
-       /* In order to prevent underflow, we add 0 mod p before subtracting. */
-       static const limb two63m6 = (((limb) 1) << 62) - (((limb) 1) << 5);
-       static const limb two63m5 = (((limb) 1) << 62) - (((limb) 1) << 4);
-
-       out[0] += two63m6 - in[0];
-       out[1] += two63m5 - in[1];
-       out[2] += two63m5 - in[2];
-       out[3] += two63m5 - in[3];
-       out[4] += two63m5 - in[4];
-       out[5] += two63m5 - in[5];
-       out[6] += two63m5 - in[6];
-       out[7] += two63m5 - in[7];
-       out[8] += two63m5 - in[8];
-}
-
-/* felem_diff_128_64 subtracts |in| from |out|
- * On entry:
- *   in[i] < 2^126
- * On exit:
- *   out[i] < out[i] + 2^127 - 2^69
- */
-static void
-felem_diff128(largefelem out, const largefelem in)
-{
-       /* In order to prevent underflow, we add 0 mod p before subtracting. */
-       static const uint128_t two127m70 = (((uint128_t) 1) << 127) - (((uint128_t) 1) << 70);
-       static const uint128_t two127m69 = (((uint128_t) 1) << 127) - (((uint128_t) 1) << 69);
-
-       out[0] += (two127m70 - in[0]);
-       out[1] += (two127m69 - in[1]);
-       out[2] += (two127m69 - in[2]);
-       out[3] += (two127m69 - in[3]);
-       out[4] += (two127m69 - in[4]);
-       out[5] += (two127m69 - in[5]);
-       out[6] += (two127m69 - in[6]);
-       out[7] += (two127m69 - in[7]);
-       out[8] += (two127m69 - in[8]);
-}
-
-/* felem_square sets |out| = |in|^2
- * On entry:
- *   in[i] < 2^62
- * On exit:
- *   out[i] < 17 * max(in[i]) * max(in[i])
- */
-static void
-felem_square(largefelem out, const felem in)
-{
-       felem inx2, inx4;
-       felem_scalar(inx2, in, 2);
-       felem_scalar(inx4, in, 4);
-
-       /*
-        * We have many cases were we want to do in[x] * in[y] + in[y] *
-        * in[x] This is obviously just 2 * in[x] * in[y] However, rather
-        * than do the doubling on the 128 bit result, we double one of the
-        * inputs to the multiplication by reading from |inx2|
-        */
-
-       out[0] = ((uint128_t) in[0]) * in[0];
-       out[1] = ((uint128_t) in[0]) * inx2[1];
-       out[2] = ((uint128_t) in[0]) * inx2[2] +
-           ((uint128_t) in[1]) * in[1];
-       out[3] = ((uint128_t) in[0]) * inx2[3] +
-           ((uint128_t) in[1]) * inx2[2];
-       out[4] = ((uint128_t) in[0]) * inx2[4] +
-           ((uint128_t) in[1]) * inx2[3] +
-           ((uint128_t) in[2]) * in[2];
-       out[5] = ((uint128_t) in[0]) * inx2[5] +
-           ((uint128_t) in[1]) * inx2[4] +
-           ((uint128_t) in[2]) * inx2[3];
-       out[6] = ((uint128_t) in[0]) * inx2[6] +
-           ((uint128_t) in[1]) * inx2[5] +
-           ((uint128_t) in[2]) * inx2[4] +
-           ((uint128_t) in[3]) * in[3];
-       out[7] = ((uint128_t) in[0]) * inx2[7] +
-           ((uint128_t) in[1]) * inx2[6] +
-           ((uint128_t) in[2]) * inx2[5] +
-           ((uint128_t) in[3]) * inx2[4];
-       out[8] = ((uint128_t) in[0]) * inx2[8] +
-           ((uint128_t) in[1]) * inx2[7] +
-           ((uint128_t) in[2]) * inx2[6] +
-           ((uint128_t) in[3]) * inx2[5] +
-           ((uint128_t) in[4]) * in[4];
-
-       /*
-        * The remaining limbs fall above 2^521, with the first falling at
-        * 2^522. They correspond to locations one bit up from the limbs
-        * produced above so we would have to multiply by two to align them.
-        * Again, rather than operate on the 128-bit result, we double one of
-        * the inputs to the multiplication. If we want to double for both
-        * this reason, and the reason above, then we end up multiplying by
-        * four.
-        */
-
-       /* 9 */
-       out[0] += ((uint128_t) in[1]) * inx4[8] +
-           ((uint128_t) in[2]) * inx4[7] +
-           ((uint128_t) in[3]) * inx4[6] +
-           ((uint128_t) in[4]) * inx4[5];
-
-       /* 10 */
-       out[1] += ((uint128_t) in[2]) * inx4[8] +
-           ((uint128_t) in[3]) * inx4[7] +
-           ((uint128_t) in[4]) * inx4[6] +
-           ((uint128_t) in[5]) * inx2[5];
-
-       /* 11 */
-       out[2] += ((uint128_t) in[3]) * inx4[8] +
-           ((uint128_t) in[4]) * inx4[7] +
-           ((uint128_t) in[5]) * inx4[6];
-
-       /* 12 */
-       out[3] += ((uint128_t) in[4]) * inx4[8] +
-           ((uint128_t) in[5]) * inx4[7] +
-           ((uint128_t) in[6]) * inx2[6];
-
-       /* 13 */
-       out[4] += ((uint128_t) in[5]) * inx4[8] +
-           ((uint128_t) in[6]) * inx4[7];
-
-       /* 14 */
-       out[5] += ((uint128_t) in[6]) * inx4[8] +
-           ((uint128_t) in[7]) * inx2[7];
-
-       /* 15 */
-       out[6] += ((uint128_t) in[7]) * inx4[8];
-
-       /* 16 */
-       out[7] += ((uint128_t) in[8]) * inx2[8];
-}
-
-/* felem_mul sets |out| = |in1| * |in2|
- * On entry:
- *   in1[i] < 2^64
- *   in2[i] < 2^63
- * On exit:
- *   out[i] < 17 * max(in1[i]) * max(in2[i])
- */
-static void
-felem_mul(largefelem out, const felem in1, const felem in2)
-{
-       felem in2x2;
-       felem_scalar(in2x2, in2, 2);
-
-       out[0] = ((uint128_t) in1[0]) * in2[0];
-
-       out[1] = ((uint128_t) in1[0]) * in2[1] +
-           ((uint128_t) in1[1]) * in2[0];
-
-       out[2] = ((uint128_t) in1[0]) * in2[2] +
-           ((uint128_t) in1[1]) * in2[1] +
-           ((uint128_t) in1[2]) * in2[0];
-
-       out[3] = ((uint128_t) in1[0]) * in2[3] +
-           ((uint128_t) in1[1]) * in2[2] +
-           ((uint128_t) in1[2]) * in2[1] +
-           ((uint128_t) in1[3]) * in2[0];
-
-       out[4] = ((uint128_t) in1[0]) * in2[4] +
-           ((uint128_t) in1[1]) * in2[3] +
-           ((uint128_t) in1[2]) * in2[2] +
-           ((uint128_t) in1[3]) * in2[1] +
-           ((uint128_t) in1[4]) * in2[0];
-
-       out[5] = ((uint128_t) in1[0]) * in2[5] +
-           ((uint128_t) in1[1]) * in2[4] +
-           ((uint128_t) in1[2]) * in2[3] +
-           ((uint128_t) in1[3]) * in2[2] +
-           ((uint128_t) in1[4]) * in2[1] +
-           ((uint128_t) in1[5]) * in2[0];
-
-       out[6] = ((uint128_t) in1[0]) * in2[6] +
-           ((uint128_t) in1[1]) * in2[5] +
-           ((uint128_t) in1[2]) * in2[4] +
-           ((uint128_t) in1[3]) * in2[3] +
-           ((uint128_t) in1[4]) * in2[2] +
-           ((uint128_t) in1[5]) * in2[1] +
-           ((uint128_t) in1[6]) * in2[0];
-
-       out[7] = ((uint128_t) in1[0]) * in2[7] +
-           ((uint128_t) in1[1]) * in2[6] +
-           ((uint128_t) in1[2]) * in2[5] +
-           ((uint128_t) in1[3]) * in2[4] +
-           ((uint128_t) in1[4]) * in2[3] +
-           ((uint128_t) in1[5]) * in2[2] +
-           ((uint128_t) in1[6]) * in2[1] +
-           ((uint128_t) in1[7]) * in2[0];
-
-       out[8] = ((uint128_t) in1[0]) * in2[8] +
-           ((uint128_t) in1[1]) * in2[7] +
-           ((uint128_t) in1[2]) * in2[6] +
-           ((uint128_t) in1[3]) * in2[5] +
-           ((uint128_t) in1[4]) * in2[4] +
-           ((uint128_t) in1[5]) * in2[3] +
-           ((uint128_t) in1[6]) * in2[2] +
-           ((uint128_t) in1[7]) * in2[1] +
-           ((uint128_t) in1[8]) * in2[0];
-
-       /* See comment in felem_square about the use of in2x2 here */
-
-       out[0] += ((uint128_t) in1[1]) * in2x2[8] +
-           ((uint128_t) in1[2]) * in2x2[7] +
-           ((uint128_t) in1[3]) * in2x2[6] +
-           ((uint128_t) in1[4]) * in2x2[5] +
-           ((uint128_t) in1[5]) * in2x2[4] +
-           ((uint128_t) in1[6]) * in2x2[3] +
-           ((uint128_t) in1[7]) * in2x2[2] +
-           ((uint128_t) in1[8]) * in2x2[1];
-
-       out[1] += ((uint128_t) in1[2]) * in2x2[8] +
-           ((uint128_t) in1[3]) * in2x2[7] +
-           ((uint128_t) in1[4]) * in2x2[6] +
-           ((uint128_t) in1[5]) * in2x2[5] +
-           ((uint128_t) in1[6]) * in2x2[4] +
-           ((uint128_t) in1[7]) * in2x2[3] +
-           ((uint128_t) in1[8]) * in2x2[2];
-
-       out[2] += ((uint128_t) in1[3]) * in2x2[8] +
-           ((uint128_t) in1[4]) * in2x2[7] +
-           ((uint128_t) in1[5]) * in2x2[6] +
-           ((uint128_t) in1[6]) * in2x2[5] +
-           ((uint128_t) in1[7]) * in2x2[4] +
-           ((uint128_t) in1[8]) * in2x2[3];
-
-       out[3] += ((uint128_t) in1[4]) * in2x2[8] +
-           ((uint128_t) in1[5]) * in2x2[7] +
-           ((uint128_t) in1[6]) * in2x2[6] +
-           ((uint128_t) in1[7]) * in2x2[5] +
-           ((uint128_t) in1[8]) * in2x2[4];
-
-       out[4] += ((uint128_t) in1[5]) * in2x2[8] +
-           ((uint128_t) in1[6]) * in2x2[7] +
-           ((uint128_t) in1[7]) * in2x2[6] +
-           ((uint128_t) in1[8]) * in2x2[5];
-
-       out[5] += ((uint128_t) in1[6]) * in2x2[8] +
-           ((uint128_t) in1[7]) * in2x2[7] +
-           ((uint128_t) in1[8]) * in2x2[6];
-
-       out[6] += ((uint128_t) in1[7]) * in2x2[8] +
-           ((uint128_t) in1[8]) * in2x2[7];
-
-       out[7] += ((uint128_t) in1[8]) * in2x2[8];
-}
-
-static const limb bottom52bits = 0xfffffffffffff;
-
-/* felem_reduce converts a largefelem to an felem.
- * On entry:
- *   in[i] < 2^128
- * On exit:
- *   out[i] < 2^59 + 2^14
- */
-static void
-felem_reduce(felem out, const largefelem in)
-{
-       u64 overflow1, overflow2;
-
-       out[0] = ((limb) in[0]) & bottom58bits;
-       out[1] = ((limb) in[1]) & bottom58bits;
-       out[2] = ((limb) in[2]) & bottom58bits;
-       out[3] = ((limb) in[3]) & bottom58bits;
-       out[4] = ((limb) in[4]) & bottom58bits;
-       out[5] = ((limb) in[5]) & bottom58bits;
-       out[6] = ((limb) in[6]) & bottom58bits;
-       out[7] = ((limb) in[7]) & bottom58bits;
-       out[8] = ((limb) in[8]) & bottom58bits;
-
-       /* out[i] < 2^58 */
-
-       out[1] += ((limb) in[0]) >> 58;
-       out[1] += (((limb) (in[0] >> 64)) & bottom52bits) << 6;
-       /*
-        * out[1] < 2^58 + 2^6 + 2^58 = 2^59 + 2^6
-        */
-       out[2] += ((limb) (in[0] >> 64)) >> 52;
-
-       out[2] += ((limb) in[1]) >> 58;
-       out[2] += (((limb) (in[1] >> 64)) & bottom52bits) << 6;
-       out[3] += ((limb) (in[1] >> 64)) >> 52;
-
-       out[3] += ((limb) in[2]) >> 58;
-       out[3] += (((limb) (in[2] >> 64)) & bottom52bits) << 6;
-       out[4] += ((limb) (in[2] >> 64)) >> 52;
-
-       out[4] += ((limb) in[3]) >> 58;
-       out[4] += (((limb) (in[3] >> 64)) & bottom52bits) << 6;
-       out[5] += ((limb) (in[3] >> 64)) >> 52;
-
-       out[5] += ((limb) in[4]) >> 58;
-       out[5] += (((limb) (in[4] >> 64)) & bottom52bits) << 6;
-       out[6] += ((limb) (in[4] >> 64)) >> 52;
-
-       out[6] += ((limb) in[5]) >> 58;
-       out[6] += (((limb) (in[5] >> 64)) & bottom52bits) << 6;
-       out[7] += ((limb) (in[5] >> 64)) >> 52;
-
-       out[7] += ((limb) in[6]) >> 58;
-       out[7] += (((limb) (in[6] >> 64)) & bottom52bits) << 6;
-       out[8] += ((limb) (in[6] >> 64)) >> 52;
-
-       out[8] += ((limb) in[7]) >> 58;
-       out[8] += (((limb) (in[7] >> 64)) & bottom52bits) << 6;
-       /*
-        * out[x > 1] < 2^58 + 2^6 + 2^58 + 2^12 < 2^59 + 2^13
-        */
-       overflow1 = ((limb) (in[7] >> 64)) >> 52;
-
-       overflow1 += ((limb) in[8]) >> 58;
-       overflow1 += (((limb) (in[8] >> 64)) & bottom52bits) << 6;
-       overflow2 = ((limb) (in[8] >> 64)) >> 52;
-
-       overflow1 <<= 1;        /* overflow1 < 2^13 + 2^7 + 2^59 */
-       overflow2 <<= 1;        /* overflow2 < 2^13 */
-
-       out[0] += overflow1;    /* out[0] < 2^60 */
-       out[1] += overflow2;    /* out[1] < 2^59 + 2^6 + 2^13 */
-
-       out[1] += out[0] >> 58;
-       out[0] &= bottom58bits;
-       /*
-        * out[0] < 2^58 out[1] < 2^59 + 2^6 + 2^13 + 2^2 < 2^59 + 2^14
-        */
-}
-
-static void
-felem_square_reduce(felem out, const felem in)
-{
-       largefelem tmp;
-       felem_square(tmp, in);
-       felem_reduce(out, tmp);
-}
-
-static void
-felem_mul_reduce(felem out, const felem in1, const felem in2)
-{
-       largefelem tmp;
-       felem_mul(tmp, in1, in2);
-       felem_reduce(out, tmp);
-}
-
-/* felem_inv calculates |out| = |in|^{-1}
- *
- * Based on Fermat's Little Theorem:
- *   a^p = a (mod p)
- *   a^{p-1} = 1 (mod p)
- *   a^{p-2} = a^{-1} (mod p)
- */
-static void
-felem_inv(felem out, const felem in)
-{
-       felem ftmp, ftmp2, ftmp3, ftmp4;
-       largefelem tmp;
-       unsigned i;
-
-       felem_square(tmp, in);
-       felem_reduce(ftmp, tmp);/* 2^1 */
-       felem_mul(tmp, in, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^2 - 2^0 */
-       felem_assign(ftmp2, ftmp);
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^3 - 2^1 */
-       felem_mul(tmp, in, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^3 - 2^0 */
-       felem_square(tmp, ftmp);
-       felem_reduce(ftmp, tmp);/* 2^4 - 2^1 */
-
-       felem_square(tmp, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^3 - 2^1 */
-       felem_square(tmp, ftmp3);
-       felem_reduce(ftmp3, tmp);       /* 2^4 - 2^2 */
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^4 - 2^0 */
-
-       felem_assign(ftmp2, ftmp3);
-       felem_square(tmp, ftmp3);
-       felem_reduce(ftmp3, tmp);       /* 2^5 - 2^1 */
-       felem_square(tmp, ftmp3);
-       felem_reduce(ftmp3, tmp);       /* 2^6 - 2^2 */
-       felem_square(tmp, ftmp3);
-       felem_reduce(ftmp3, tmp);       /* 2^7 - 2^3 */
-       felem_square(tmp, ftmp3);
-       felem_reduce(ftmp3, tmp);       /* 2^8 - 2^4 */
-       felem_assign(ftmp4, ftmp3);
-       felem_mul(tmp, ftmp3, ftmp);
-       felem_reduce(ftmp4, tmp);       /* 2^8 - 2^1 */
-       felem_square(tmp, ftmp4);
-       felem_reduce(ftmp4, tmp);       /* 2^9 - 2^2 */
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^8 - 2^0 */
-       felem_assign(ftmp2, ftmp3);
-
-       for (i = 0; i < 8; i++) {
-               felem_square(tmp, ftmp3);
-               felem_reduce(ftmp3, tmp);       /* 2^16 - 2^8 */
-       }
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^16 - 2^0 */
-       felem_assign(ftmp2, ftmp3);
-
-       for (i = 0; i < 16; i++) {
-               felem_square(tmp, ftmp3);
-               felem_reduce(ftmp3, tmp);       /* 2^32 - 2^16 */
-       }
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^32 - 2^0 */
-       felem_assign(ftmp2, ftmp3);
-
-       for (i = 0; i < 32; i++) {
-               felem_square(tmp, ftmp3);
-               felem_reduce(ftmp3, tmp);       /* 2^64 - 2^32 */
-       }
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^64 - 2^0 */
-       felem_assign(ftmp2, ftmp3);
-
-       for (i = 0; i < 64; i++) {
-               felem_square(tmp, ftmp3);
-               felem_reduce(ftmp3, tmp);       /* 2^128 - 2^64 */
-       }
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^128 - 2^0 */
-       felem_assign(ftmp2, ftmp3);
-
-       for (i = 0; i < 128; i++) {
-               felem_square(tmp, ftmp3);
-               felem_reduce(ftmp3, tmp);       /* 2^256 - 2^128 */
-       }
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^256 - 2^0 */
-       felem_assign(ftmp2, ftmp3);
-
-       for (i = 0; i < 256; i++) {
-               felem_square(tmp, ftmp3);
-               felem_reduce(ftmp3, tmp);       /* 2^512 - 2^256 */
-       }
-       felem_mul(tmp, ftmp3, ftmp2);
-       felem_reduce(ftmp3, tmp);       /* 2^512 - 2^0 */
-
-       for (i = 0; i < 9; i++) {
-               felem_square(tmp, ftmp3);
-               felem_reduce(ftmp3, tmp);       /* 2^521 - 2^9 */
-       }
-       felem_mul(tmp, ftmp3, ftmp4);
-       felem_reduce(ftmp3, tmp);       /* 2^512 - 2^2 */
-       felem_mul(tmp, ftmp3, in);
-       felem_reduce(out, tmp); /* 2^512 - 3 */
-}
-
-/* This is 2^521-1, expressed as an felem */
-static const felem kPrime =
-{
-       0x03ffffffffffffff, 0x03ffffffffffffff, 0x03ffffffffffffff,
-       0x03ffffffffffffff, 0x03ffffffffffffff, 0x03ffffffffffffff,
-       0x03ffffffffffffff, 0x03ffffffffffffff, 0x01ffffffffffffff
-};
-
-/* felem_is_zero returns a limb with all bits set if |in| == 0 (mod p) and 0
- * otherwise.
- * On entry:
- *   in[i] < 2^59 + 2^14
- */
-static limb
-felem_is_zero(const felem in)
-{
-       felem ftmp;
-       limb is_zero, is_p;
-       felem_assign(ftmp, in);
-
-       ftmp[0] += ftmp[8] >> 57;
-       ftmp[8] &= bottom57bits;
-       /* ftmp[8] < 2^57 */
-       ftmp[1] += ftmp[0] >> 58;
-       ftmp[0] &= bottom58bits;
-       ftmp[2] += ftmp[1] >> 58;
-       ftmp[1] &= bottom58bits;
-       ftmp[3] += ftmp[2] >> 58;
-       ftmp[2] &= bottom58bits;
-       ftmp[4] += ftmp[3] >> 58;
-       ftmp[3] &= bottom58bits;
-       ftmp[5] += ftmp[4] >> 58;
-       ftmp[4] &= bottom58bits;
-       ftmp[6] += ftmp[5] >> 58;
-       ftmp[5] &= bottom58bits;
-       ftmp[7] += ftmp[6] >> 58;
-       ftmp[6] &= bottom58bits;
-       ftmp[8] += ftmp[7] >> 58;
-       ftmp[7] &= bottom58bits;
-       /* ftmp[8] < 2^57 + 4 */
-
-       /*
-        * The ninth limb of 2*(2^521-1) is 0x03ffffffffffffff, which is
-        * greater than our bound for ftmp[8]. Therefore we only have to
-        * check if the zero is zero or 2^521-1.
-        */
-
-       is_zero = 0;
-       is_zero |= ftmp[0];
-       is_zero |= ftmp[1];
-       is_zero |= ftmp[2];
-       is_zero |= ftmp[3];
-       is_zero |= ftmp[4];
-       is_zero |= ftmp[5];
-       is_zero |= ftmp[6];
-       is_zero |= ftmp[7];
-       is_zero |= ftmp[8];
-
-       is_zero--;
-       /*
-        * We know that ftmp[i] < 2^63, therefore the only way that the top
-        * bit can be set is if is_zero was 0 before the decrement.
-        */
-       is_zero = ((s64) is_zero) >> 63;
-
-       is_p = ftmp[0] ^ kPrime[0];
-       is_p |= ftmp[1] ^ kPrime[1];
-       is_p |= ftmp[2] ^ kPrime[2];
-       is_p |= ftmp[3] ^ kPrime[3];
-       is_p |= ftmp[4] ^ kPrime[4];
-       is_p |= ftmp[5] ^ kPrime[5];
-       is_p |= ftmp[6] ^ kPrime[6];
-       is_p |= ftmp[7] ^ kPrime[7];
-       is_p |= ftmp[8] ^ kPrime[8];
-
-       is_p--;
-       is_p = ((s64) is_p) >> 63;
-
-       is_zero |= is_p;
-       return is_zero;
-}
-
-static int
-felem_is_zero_int(const felem in)
-{
-       return (int) (felem_is_zero(in) & ((limb) 1));
-}
-
-/* felem_contract converts |in| to its unique, minimal representation.
- * On entry:
- *   in[i] < 2^59 + 2^14
- */
-static void
-felem_contract(felem out, const felem in)
-{
-       limb is_p, is_greater, sign;
-       static const limb two58 = ((limb) 1) << 58;
-
-       felem_assign(out, in);
-
-       out[0] += out[8] >> 57;
-       out[8] &= bottom57bits;
-       /* out[8] < 2^57 */
-       out[1] += out[0] >> 58;
-       out[0] &= bottom58bits;
-       out[2] += out[1] >> 58;
-       out[1] &= bottom58bits;
-       out[3] += out[2] >> 58;
-       out[2] &= bottom58bits;
-       out[4] += out[3] >> 58;
-       out[3] &= bottom58bits;
-       out[5] += out[4] >> 58;
-       out[4] &= bottom58bits;
-       out[6] += out[5] >> 58;
-       out[5] &= bottom58bits;
-       out[7] += out[6] >> 58;
-       out[6] &= bottom58bits;
-       out[8] += out[7] >> 58;
-       out[7] &= bottom58bits;
-       /* out[8] < 2^57 + 4 */
-
-       /*
-        * If the value is greater than 2^521-1 then we have to subtract
-        * 2^521-1 out. See the comments in felem_is_zero regarding why we
-        * don't test for other multiples of the prime.
-        */
-
-       /*
-        * First, if |out| is equal to 2^521-1, we subtract it out to get
-        * zero.
-        */
-
-       is_p = out[0] ^ kPrime[0];
-       is_p |= out[1] ^ kPrime[1];
-       is_p |= out[2] ^ kPrime[2];
-       is_p |= out[3] ^ kPrime[3];
-       is_p |= out[4] ^ kPrime[4];
-       is_p |= out[5] ^ kPrime[5];
-       is_p |= out[6] ^ kPrime[6];
-       is_p |= out[7] ^ kPrime[7];
-       is_p |= out[8] ^ kPrime[8];
-
-       is_p--;
-       is_p &= is_p << 32;
-       is_p &= is_p << 16;
-       is_p &= is_p << 8;
-       is_p &= is_p << 4;
-       is_p &= is_p << 2;
-       is_p &= is_p << 1;
-       is_p = ((s64) is_p) >> 63;
-       is_p = ~is_p;
-
-       /* is_p is 0 iff |out| == 2^521-1 and all ones otherwise */
-
-       out[0] &= is_p;
-       out[1] &= is_p;
-       out[2] &= is_p;
-       out[3] &= is_p;
-       out[4] &= is_p;
-       out[5] &= is_p;
-       out[6] &= is_p;
-       out[7] &= is_p;
-       out[8] &= is_p;
-
-       /*
-        * In order to test that |out| >= 2^521-1 we need only test if out[8]
-        * >> 57 is greater than zero as (2^521-1) + x >= 2^522
-        */
-       is_greater = out[8] >> 57;
-       is_greater |= is_greater << 32;
-       is_greater |= is_greater << 16;
-       is_greater |= is_greater << 8;
-       is_greater |= is_greater << 4;
-       is_greater |= is_greater << 2;
-       is_greater |= is_greater << 1;
-       is_greater = ((s64) is_greater) >> 63;
-
-       out[0] -= kPrime[0] & is_greater;
-       out[1] -= kPrime[1] & is_greater;
-       out[2] -= kPrime[2] & is_greater;
-       out[3] -= kPrime[3] & is_greater;
-       out[4] -= kPrime[4] & is_greater;
-       out[5] -= kPrime[5] & is_greater;
-       out[6] -= kPrime[6] & is_greater;
-       out[7] -= kPrime[7] & is_greater;
-       out[8] -= kPrime[8] & is_greater;
-
-       /* Eliminate negative coefficients */
-       sign = -(out[0] >> 63);
-       out[0] += (two58 & sign);
-       out[1] -= (1 & sign);
-       sign = -(out[1] >> 63);
-       out[1] += (two58 & sign);
-       out[2] -= (1 & sign);
-       sign = -(out[2] >> 63);
-       out[2] += (two58 & sign);
-       out[3] -= (1 & sign);
-       sign = -(out[3] >> 63);
-       out[3] += (two58 & sign);
-       out[4] -= (1 & sign);
-       sign = -(out[4] >> 63);
-       out[4] += (two58 & sign);
-       out[5] -= (1 & sign);
-       sign = -(out[0] >> 63);
-       out[5] += (two58 & sign);
-       out[6] -= (1 & sign);
-       sign = -(out[6] >> 63);
-       out[6] += (two58 & sign);
-       out[7] -= (1 & sign);
-       sign = -(out[7] >> 63);
-       out[7] += (two58 & sign);
-       out[8] -= (1 & sign);
-       sign = -(out[5] >> 63);
-       out[5] += (two58 & sign);
-       out[6] -= (1 & sign);
-       sign = -(out[6] >> 63);
-       out[6] += (two58 & sign);
-       out[7] -= (1 & sign);
-       sign = -(out[7] >> 63);
-       out[7] += (two58 & sign);
-       out[8] -= (1 & sign);
-}
-
-/* Group operations
- * ----------------
- *
- * Building on top of the field operations we have the operations on the
- * elliptic curve group itself. Points on the curve are represented in Jacobian
- * coordinates */
-
-/* point_double calculates 2*(x_in, y_in, z_in)
- *
- * The method is taken from:
- *   http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
- *
- * Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed.
- * while x_out == y_in is not (maybe this works, but it's not tested). */
-static void
-point_double(felem x_out, felem y_out, felem z_out,
-    const felem x_in, const felem y_in, const felem z_in)
-{
-       largefelem tmp, tmp2;
-       felem delta, gamma, beta, alpha, ftmp, ftmp2;
-
-       felem_assign(ftmp, x_in);
-       felem_assign(ftmp2, x_in);
-
-       /* delta = z^2 */
-       felem_square(tmp, z_in);
-       felem_reduce(delta, tmp);       /* delta[i] < 2^59 + 2^14 */
-
-       /* gamma = y^2 */
-       felem_square(tmp, y_in);
-       felem_reduce(gamma, tmp);       /* gamma[i] < 2^59 + 2^14 */
-
-       /* beta = x*gamma */
-       felem_mul(tmp, x_in, gamma);
-       felem_reduce(beta, tmp);/* beta[i] < 2^59 + 2^14 */
-
-       /* alpha = 3*(x-delta)*(x+delta) */
-       felem_diff64(ftmp, delta);
-       /* ftmp[i] < 2^61 */
-       felem_sum64(ftmp2, delta);
-       /* ftmp2[i] < 2^60 + 2^15 */
-       felem_scalar64(ftmp2, 3);
-       /* ftmp2[i] < 3*2^60 + 3*2^15 */
-       felem_mul(tmp, ftmp, ftmp2);
-       /*
-        * tmp[i] < 17(3*2^121 + 3*2^76) = 61*2^121 + 61*2^76 < 64*2^121 +
-        * 64*2^76 = 2^127 + 2^82 < 2^128
-        */
-       felem_reduce(alpha, tmp);
-
-       /* x' = alpha^2 - 8*beta */
-       felem_square(tmp, alpha);
-       /*
-        * tmp[i] < 17*2^120 < 2^125
-        */
-       felem_assign(ftmp, beta);
-       felem_scalar64(ftmp, 8);
-       /* ftmp[i] < 2^62 + 2^17 */
-       felem_diff_128_64(tmp, ftmp);
-       /* tmp[i] < 2^125 + 2^63 + 2^62 + 2^17 */
-       felem_reduce(x_out, tmp);
-
-       /* z' = (y + z)^2 - gamma - delta */
-       felem_sum64(delta, gamma);
-       /* delta[i] < 2^60 + 2^15 */
-       felem_assign(ftmp, y_in);
-       felem_sum64(ftmp, z_in);
-       /* ftmp[i] < 2^60 + 2^15 */
-       felem_square(tmp, ftmp);
-       /*
-        * tmp[i] < 17(2^122) < 2^127
-        */
-       felem_diff_128_64(tmp, delta);
-       /* tmp[i] < 2^127 + 2^63 */
-       felem_reduce(z_out, tmp);
-
-       /* y' = alpha*(4*beta - x') - 8*gamma^2 */
-       felem_scalar64(beta, 4);
-       /* beta[i] < 2^61 + 2^16 */
-       felem_diff64(beta, x_out);
-       /* beta[i] < 2^61 + 2^60 + 2^16 */
-       felem_mul(tmp, alpha, beta);
-       /*
-        * tmp[i] < 17*((2^59 + 2^14)(2^61 + 2^60 + 2^16)) = 17*(2^120 + 2^75
-        * + 2^119 + 2^74 + 2^75 + 2^30) = 17*(2^120 + 2^119 + 2^76 + 2^74 +
-        * 2^30) < 2^128
-        */
-       felem_square(tmp2, gamma);
-       /*
-        * tmp2[i] < 17*(2^59 + 2^14)^2 = 17*(2^118 + 2^74 + 2^28)
-        */
-       felem_scalar128(tmp2, 8);
-       /*
-        * tmp2[i] < 8*17*(2^118 + 2^74 + 2^28) = 2^125 + 2^121 + 2^81 + 2^77
-        * + 2^35 + 2^31 < 2^126
-        */
-       felem_diff128(tmp, tmp2);
-       /*
-        * tmp[i] < 2^127 - 2^69 + 17(2^120 + 2^119 + 2^76 + 2^74 + 2^30) =
-        * 2^127 + 2^124 + 2^122 + 2^120 + 2^118 + 2^80 + 2^78 + 2^76 + 2^74
-        * + 2^69 + 2^34 + 2^30 < 2^128
-        */
-       felem_reduce(y_out, tmp);
-}
-
-/* copy_conditional copies in to out iff mask is all ones. */
-static void
-copy_conditional(felem out, const felem in, limb mask)
-{
-       unsigned i;
-       for (i = 0; i < NLIMBS; ++i) {
-               const limb tmp = mask & (in[i] ^ out[i]);
-               out[i] ^= tmp;
-       }
-}
-
-/* point_add calculates (x1, y1, z1) + (x2, y2, z2)
- *
- * The method is taken from
- *   http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl,
- * adapted for mixed addition (z2 = 1, or z2 = 0 for the point at infinity).
- *
- * This function includes a branch for checking whether the two input points
- * are equal (while not equal to the point at infinity). This case never
- * happens during single point multiplication, so there is no timing leak for
- * ECDH or ECDSA signing. */
-static void
-point_add(felem x3, felem y3, felem z3,
-    const felem x1, const felem y1, const felem z1,
-    const int mixed, const felem x2, const felem y2, const felem z2)
-{
-       felem ftmp, ftmp2, ftmp3, ftmp4, ftmp5, ftmp6, x_out, y_out, z_out;
-       largefelem tmp, tmp2;
-       limb x_equal, y_equal, z1_is_zero, z2_is_zero;
-
-       z1_is_zero = felem_is_zero(z1);
-       z2_is_zero = felem_is_zero(z2);
-
-       /* ftmp = z1z1 = z1**2 */
-       felem_square(tmp, z1);
-       felem_reduce(ftmp, tmp);
-
-       if (!mixed) {
-               /* ftmp2 = z2z2 = z2**2 */
-               felem_square(tmp, z2);
-               felem_reduce(ftmp2, tmp);
-
-               /* u1 = ftmp3 = x1*z2z2 */
-               felem_mul(tmp, x1, ftmp2);
-               felem_reduce(ftmp3, tmp);
-
-               /* ftmp5 = z1 + z2 */
-               felem_assign(ftmp5, z1);
-               felem_sum64(ftmp5, z2);
-               /* ftmp5[i] < 2^61 */
-
-               /* ftmp5 = (z1 + z2)**2 - z1z1 - z2z2 = 2*z1z2 */
-               felem_square(tmp, ftmp5);
-               /* tmp[i] < 17*2^122 */
-               felem_diff_128_64(tmp, ftmp);
-               /* tmp[i] < 17*2^122 + 2^63 */
-               felem_diff_128_64(tmp, ftmp2);
-               /* tmp[i] < 17*2^122 + 2^64 */
-               felem_reduce(ftmp5, tmp);
-
-               /* ftmp2 = z2 * z2z2 */
-               felem_mul(tmp, ftmp2, z2);
-               felem_reduce(ftmp2, tmp);
-
-               /* s1 = ftmp6 = y1 * z2**3 */
-               felem_mul(tmp, y1, ftmp2);
-               felem_reduce(ftmp6, tmp);
-       } else {
-               /* We'll assume z2 = 1 (special case z2 = 0 is handled later) */
-
-               /* u1 = ftmp3 = x1*z2z2 */
-               felem_assign(ftmp3, x1);
-
-               /* ftmp5 = 2*z1z2 */
-               felem_scalar(ftmp5, z1, 2);
-
-               /* s1 = ftmp6 = y1 * z2**3 */
-               felem_assign(ftmp6, y1);
-       }
-
-       /* u2 = x2*z1z1 */
-       felem_mul(tmp, x2, ftmp);
-       /* tmp[i] < 17*2^120 */
-
-       /* h = ftmp4 = u2 - u1 */
-       felem_diff_128_64(tmp, ftmp3);
-       /* tmp[i] < 17*2^120 + 2^63 */
-       felem_reduce(ftmp4, tmp);
-
-       x_equal = felem_is_zero(ftmp4);
-
-       /* z_out = ftmp5 * h */
-       felem_mul(tmp, ftmp5, ftmp4);
-       felem_reduce(z_out, tmp);
-
-       /* ftmp = z1 * z1z1 */
-       felem_mul(tmp, ftmp, z1);
-       felem_reduce(ftmp, tmp);
-
-       /* s2 = tmp = y2 * z1**3 */
-       felem_mul(tmp, y2, ftmp);
-       /* tmp[i] < 17*2^120 */
-
-       /* r = ftmp5 = (s2 - s1)*2 */
-       felem_diff_128_64(tmp, ftmp6);
-       /* tmp[i] < 17*2^120 + 2^63 */
-       felem_reduce(ftmp5, tmp);
-       y_equal = felem_is_zero(ftmp5);
-       felem_scalar64(ftmp5, 2);
-       /* ftmp5[i] < 2^61 */
-
-       if (x_equal && y_equal && !z1_is_zero && !z2_is_zero) {
-               point_double(x3, y3, z3, x1, y1, z1);
-               return;
-       }
-       /* I = ftmp = (2h)**2 */
-       felem_assign(ftmp, ftmp4);
-       felem_scalar64(ftmp, 2);
-       /* ftmp[i] < 2^61 */
-       felem_square(tmp, ftmp);
-       /* tmp[i] < 17*2^122 */
-       felem_reduce(ftmp, tmp);
-
-       /* J = ftmp2 = h * I */
-       felem_mul(tmp, ftmp4, ftmp);
-       felem_reduce(ftmp2, tmp);
-
-       /* V = ftmp4 = U1 * I */
-       felem_mul(tmp, ftmp3, ftmp);
-       felem_reduce(ftmp4, tmp);
-
-       /* x_out = r**2 - J - 2V */
-       felem_square(tmp, ftmp5);
-       /* tmp[i] < 17*2^122 */
-       felem_diff_128_64(tmp, ftmp2);
-       /* tmp[i] < 17*2^122 + 2^63 */
-       felem_assign(ftmp3, ftmp4);
-       felem_scalar64(ftmp4, 2);
-       /* ftmp4[i] < 2^61 */
-       felem_diff_128_64(tmp, ftmp4);
-       /* tmp[i] < 17*2^122 + 2^64 */
-       felem_reduce(x_out, tmp);
-
-       /* y_out = r(V-x_out) - 2 * s1 * J */
-       felem_diff64(ftmp3, x_out);
-       /*
-        * ftmp3[i] < 2^60 + 2^60 = 2^61
-        */
-       felem_mul(tmp, ftmp5, ftmp3);
-       /* tmp[i] < 17*2^122 */
-       felem_mul(tmp2, ftmp6, ftmp2);
-       /* tmp2[i] < 17*2^120 */
-       felem_scalar128(tmp2, 2);
-       /* tmp2[i] < 17*2^121 */
-       felem_diff128(tmp, tmp2);
-       /*
-        * tmp[i] < 2^127 - 2^69 + 17*2^122 = 2^126 - 2^122 - 2^6 - 2^2 - 1 <
-        * 2^127
-        */
-       felem_reduce(y_out, tmp);
-
-       copy_conditional(x_out, x2, z1_is_zero);
-       copy_conditional(x_out, x1, z2_is_zero);
-       copy_conditional(y_out, y2, z1_is_zero);
-       copy_conditional(y_out, y1, z2_is_zero);
-       copy_conditional(z_out, z2, z1_is_zero);
-       copy_conditional(z_out, z1, z2_is_zero);
-       felem_assign(x3, x_out);
-       felem_assign(y3, y_out);
-       felem_assign(z3, z_out);
-}
-
-/* Base point pre computation
- * --------------------------
- *
- * Two different sorts of precomputed tables are used in the following code.
- * Each contain various points on the curve, where each point is three field
- * elements (x, y, z).
- *
- * For the base point table, z is usually 1 (0 for the point at infinity).
- * This table has 16 elements:
- * index | bits    | point
- * ------+---------+------------------------------
- *     0 | 0 0 0 0 | 0G
- *     1 | 0 0 0 1 | 1G
- *     2 | 0 0 1 0 | 2^130G
- *     3 | 0 0 1 1 | (2^130 + 1)G
- *     4 | 0 1 0 0 | 2^260G
- *     5 | 0 1 0 1 | (2^260 + 1)G
- *     6 | 0 1 1 0 | (2^260 + 2^130)G
- *     7 | 0 1 1 1 | (2^260 + 2^130 + 1)G
- *     8 | 1 0 0 0 | 2^390G
- *     9 | 1 0 0 1 | (2^390 + 1)G
- *    10 | 1 0 1 0 | (2^390 + 2^130)G
- *    11 | 1 0 1 1 | (2^390 + 2^130 + 1)G
- *    12 | 1 1 0 0 | (2^390 + 2^260)G
- *    13 | 1 1 0 1 | (2^390 + 2^260 + 1)G
- *    14 | 1 1 1 0 | (2^390 + 2^260 + 2^130)G
- *    15 | 1 1 1 1 | (2^390 + 2^260 + 2^130 + 1)G
- *
- * The reason for this is so that we can clock bits into four different
- * locations when doing simple scalar multiplies against the base point.
- *
- * Tables for other points have table[i] = iG for i in 0 .. 16. */
-
-/* gmul is the table of precomputed base points */
-static const felem gmul[16][3] =
-{{{0, 0, 0, 0, 0, 0, 0, 0, 0},
-{0, 0, 0, 0, 0, 0, 0, 0, 0},
-{0, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x017e7e31c2e5bd66, 0x022cf0615a90a6fe, 0x00127a2ffa8de334,
-               0x01dfbf9d64a3f877, 0x006b4d3dbaa14b5e, 0x014fed487e0a2bd8,
-0x015b4429c6481390, 0x03a73678fb2d988e, 0x00c6858e06b70404},
-{0x00be94769fd16650, 0x031c21a89cb09022, 0x039013fad0761353,
-       0x02657bd099031542, 0x03273e662c97ee72, 0x01e6d11a05ebef45,
-0x03d1bd998f544495, 0x03001172297ed0b1, 0x011839296a789a3b},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x0373faacbc875bae, 0x00f325023721c671, 0x00f666fd3dbde5ad,
-               0x01a6932363f88ea7, 0x01fc6d9e13f9c47b, 0x03bcbffc2bbf734e,
-0x013ee3c3647f3a92, 0x029409fefe75d07d, 0x00ef9199963d85e5},
-{0x011173743ad5b178, 0x02499c7c21bf7d46, 0x035beaeabb8b1a58,
-       0x00f989c4752ea0a3, 0x0101e1de48a9c1a3, 0x01a20076be28ba6c,
-0x02f8052e5eb2de95, 0x01bfe8f82dea117c, 0x0160074d3c36ddb7},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x012f3fc373393b3b, 0x03d3d6172f1419fa, 0x02adc943c0b86873,
-               0x00d475584177952b, 0x012a4d1673750ee2, 0x00512517a0f13b0c,
-0x02b184671a7b1734, 0x0315b84236f1a50a, 0x00a4afc472edbdb9},
-{0x00152a7077f385c4, 0x03044007d8d1c2ee, 0x0065829d61d52b52,
-       0x00494ff6b6631d0d, 0x00a11d94d5f06bcf, 0x02d2f89474d9282e,
-0x0241c5727c06eeb9, 0x0386928710fbdb9d, 0x01f883f727b0dfbe},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x019b0c3c9185544d, 0x006243a37c9d97db, 0x02ee3cbe030a2ad2,
-               0x00cfdd946bb51e0d, 0x0271c00932606b91, 0x03f817d1ec68c561,
-0x03f37009806a369c, 0x03c1f30baf184fd5, 0x01091022d6d2f065},
-{0x0292c583514c45ed, 0x0316fca51f9a286c, 0x00300af507c1489a,
-       0x0295f69008298cf1, 0x02c0ed8274943d7b, 0x016509b9b47a431e,
-0x02bc9de9634868ce, 0x005b34929bffcb09, 0x000c1a0121681524},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x0286abc0292fb9f2, 0x02665eee9805b3f7, 0x01ed7455f17f26d6,
-               0x0346355b83175d13, 0x006284944cd0a097, 0x0191895bcdec5e51,
-0x02e288370afda7d9, 0x03b22312bfefa67a, 0x01d104d3fc0613fe},
-{0x0092421a12f7e47f, 0x0077a83fa373c501, 0x03bd25c5f696bd0d,
-       0x035c41e4d5459761, 0x01ca0d1742b24f53, 0x00aaab27863a509c,
-0x018b6de47df73917, 0x025c0b771705cd01, 0x01fd51d566d760a7},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x01dd92ff6b0d1dbd, 0x039c5e2e8f8afa69, 0x0261ed13242c3b27,
-               0x0382c6e67026e6a0, 0x01d60b10be2089f9, 0x03c15f3dce86723f,
-0x03c764a32d2a062d, 0x017307eac0fad056, 0x018207c0b96c5256},
-{0x0196a16d60e13154, 0x03e6ce74c0267030, 0x00ddbf2b4e52a5aa,
-       0x012738241bbf31c8, 0x00ebe8dc04685a28, 0x024c2ad6d380d4a2,
-0x035ee062a6e62d0e, 0x0029ed74af7d3a0f, 0x00eef32aec142ebd},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x00c31ec398993b39, 0x03a9f45bcda68253, 0x00ac733c24c70890,
-               0x00872b111401ff01, 0x01d178c23195eafb, 0x03bca2c816b87f74,
-0x0261a9af46fbad7a, 0x0324b2a8dd3d28f9, 0x00918121d8f24e23},
-{0x032bc8c1ca983cd7, 0x00d869dfb08fc8c6, 0x01693cb61fce1516,
-       0x012a5ea68f4e88a8, 0x010869cab88d7ae3, 0x009081ad277ceee1,
-0x033a77166d064cdc, 0x03955235a1fb3a95, 0x01251a4a9b25b65e},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x00148a3a1b27f40b, 0x0123186df1b31fdc, 0x00026e7beaad34ce,
-               0x01db446ac1d3dbba, 0x0299c1a33437eaec, 0x024540610183cbb7,
-0x0173bb0e9ce92e46, 0x02b937e43921214b, 0x01ab0436a9bf01b5},
-{0x0383381640d46948, 0x008dacbf0e7f330f, 0x03602122bcc3f318,
-       0x01ee596b200620d6, 0x03bd0585fda430b3, 0x014aed77fd123a83,
-0x005ace749e52f742, 0x0390fe041da2b842, 0x0189a8ceb3299242},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x012a19d6b3282473, 0x00c0915918b423ce, 0x023a954eb94405ae,
-               0x00529f692be26158, 0x0289fa1b6fa4b2aa, 0x0198ae4ceea346ef,
-0x0047d8cdfbdedd49, 0x00cc8c8953f0f6b8, 0x001424abbff49203},
-{0x0256732a1115a03a, 0x0351bc38665c6733, 0x03f7b950fb4a6447,
-       0x000afffa94c22155, 0x025763d0a4dab540, 0x000511e92d4fc283,
-0x030a7e9eda0ee96c, 0x004c3cd93a28bf0a, 0x017edb3a8719217f},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x011de5675a88e673, 0x031d7d0f5e567fbe, 0x0016b2062c970ae5,
-               0x03f4a2be49d90aa7, 0x03cef0bd13822866, 0x03f0923dcf774a6c,
-0x0284bebc4f322f72, 0x016ab2645302bb2c, 0x01793f95dace0e2a},
-{0x010646e13527a28f, 0x01ca1babd59dc5e7, 0x01afedfd9a5595df,
-       0x01f15785212ea6b1, 0x0324e5d64f6ae3f4, 0x02d680f526d00645,
-0x0127920fadf627a7, 0x03b383f75df4f684, 0x0089e0057e783b0a},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x00f334b9eb3c26c6, 0x0298fdaa98568dce, 0x01c2d24843a82292,
-               0x020bcb24fa1b0711, 0x02cbdb3d2b1875e6, 0x0014907598f89422,
-0x03abe3aa43b26664, 0x02cbf47f720bc168, 0x0133b5e73014b79b},
-{0x034aab5dab05779d, 0x00cdc5d71fee9abb, 0x0399f16bd4bd9d30,
-       0x03582fa592d82647, 0x02be1cdfb775b0e9, 0x0034f7cea32e94cb,
-0x0335a7f08f56f286, 0x03b707e9565d1c8b, 0x0015c946ea5b614f},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x024676f6cff72255, 0x00d14625cac96378, 0x00532b6008bc3767,
-               0x01fc16721b985322, 0x023355ea1b091668, 0x029de7afdc0317c3,
-0x02fc8a7ca2da037c, 0x02de1217d74a6f30, 0x013f7173175b73bf},
-{0x0344913f441490b5, 0x0200f9e272b61eca, 0x0258a246b1dd55d2,
-       0x03753db9ea496f36, 0x025e02937a09c5ef, 0x030cbd3d14012692,
-0x01793a67e70dc72a, 0x03ec1d37048a662e, 0x006550f700c32a8d},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x00d3f48a347eba27, 0x008e636649b61bd8, 0x00d3b93716778fb3,
-               0x004d1915757bd209, 0x019d5311a3da44e0, 0x016d1afcbbe6aade,
-0x0241bf5f73265616, 0x0384672e5d50d39b, 0x005009fee522b684},
-{0x029b4fab064435fe, 0x018868ee095bbb07, 0x01ea3d6936cc92b8,
-       0x000608b00f78a2f3, 0x02db911073d1c20f, 0x018205938470100a,
-0x01f1e4964cbe6ff2, 0x021a19a29eed4663, 0x01414485f42afa81},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x01612b3a17f63e34, 0x03813992885428e6, 0x022b3c215b5a9608,
-               0x029b4057e19f2fcb, 0x0384059a587af7e6, 0x02d6400ace6fe610,
-0x029354d896e8e331, 0x00c047ee6dfba65e, 0x0037720542e9d49d},
-{0x02ce9eed7c5e9278, 0x0374ed703e79643b, 0x01316c54c4072006,
-       0x005aaa09054b2ee8, 0x002824000c840d57, 0x03d4eba24771ed86,
-0x0189c50aabc3bdae, 0x0338c01541e15510, 0x00466d56e38eed42},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}},
-{{0x007efd8330ad8bd6, 0x02465ed48047710b, 0x0034c6606b215e0c,
-               0x016ae30c53cbf839, 0x01fa17bd37161216, 0x018ead4e61ce8ab9,
-0x005482ed5f5dee46, 0x037543755bba1d7f, 0x005e5ac7e70a9d0f},
-{0x0117e1bb2fdcb2a2, 0x03deea36249f40c4, 0x028d09b4a6246cb7,
-       0x03524b8855bcf756, 0x023d7d109d5ceb58, 0x0178e43e3223ef9c,
-0x0154536a0c6e966a, 0x037964d1286ee9fe, 0x0199bcd90e125055},
-{1, 0, 0, 0, 0, 0, 0, 0, 0}}};
-
-/* select_point selects the |idx|th point from a precomputation table and
- * copies it to out. */
-static void
-select_point(const limb idx, unsigned int size, const felem pre_comp[ /* size */ ][3],
-    felem out[3])
-{
-       unsigned i, j;
-       limb *outlimbs = &out[0][0];
-       memset(outlimbs, 0, 3 * sizeof(felem));
-
-       for (i = 0; i < size; i++) {
-               const limb *inlimbs = &pre_comp[i][0][0];
-               limb mask = i ^ idx;
-               mask |= mask >> 4;
-               mask |= mask >> 2;
-               mask |= mask >> 1;
-               mask &= 1;
-               mask--;
-               for (j = 0; j < NLIMBS * 3; j++)
-                       outlimbs[j] |= inlimbs[j] & mask;
-       }
-}
-
-/* get_bit returns the |i|th bit in |in| */
-static char
-get_bit(const felem_bytearray in, int i)
-{
-       if (i < 0)
-               return 0;
-       return (in[i >> 3] >> (i & 7)) & 1;
-}
-
-/* Interleaved point multiplication using precomputed point multiples:
- * The small point multiples 0*P, 1*P, ..., 16*P are in pre_comp[],
- * the scalars in scalars[]. If g_scalar is non-NULL, we also add this multiple
- * of the generator, using certain (large) precomputed multiples in g_pre_comp.
- * Output point (X, Y, Z) is stored in x_out, y_out, z_out */
-static void
-batch_mul(felem x_out, felem y_out, felem z_out,
-    const felem_bytearray scalars[], const unsigned num_points, const u8 *g_scalar,
-    const int mixed, const felem pre_comp[][17][3], const felem g_pre_comp[16][3])
-{
-       int i, skip;
-       unsigned num, gen_mul = (g_scalar != NULL);
-       felem nq[3], tmp[4];
-       limb bits;
-       u8 sign, digit;
-
-       /* set nq to the point at infinity */
-       memset(nq, 0, 3 * sizeof(felem));
-
-       /*
-        * Loop over all scalars msb-to-lsb, interleaving additions of
-        * multiples of the generator (last quarter of rounds) and additions
-        * of other points multiples (every 5th round).
-        */
-       skip = 1;               /* save two point operations in the first
-                                * round */
-       for (i = (num_points ? 520 : 130); i >= 0; --i) {
-               /* double */
-               if (!skip)
-                       point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
-
-               /* add multiples of the generator */
-               if (gen_mul && (i <= 130)) {
-                       bits = get_bit(g_scalar, i + 390) << 3;
-                       if (i < 130) {
-                               bits |= get_bit(g_scalar, i + 260) << 2;
-                               bits |= get_bit(g_scalar, i + 130) << 1;
-                               bits |= get_bit(g_scalar, i);
-                       }
-                       /* select the point to add, in constant time */
-                       select_point(bits, 16, g_pre_comp, tmp);
-                       if (!skip) {
-                               point_add(nq[0], nq[1], nq[2],
-                                   nq[0], nq[1], nq[2],
-                                   1 /* mixed */ , tmp[0], tmp[1], tmp[2]);
-                       } else {
-                               memcpy(nq, tmp, 3 * sizeof(felem));
-                               skip = 0;
-                       }
-               }
-               /* do other additions every 5 doublings */
-               if (num_points && (i % 5 == 0)) {
-                       /* loop over all scalars */
-                       for (num = 0; num < num_points; ++num) {
-                               bits = get_bit(scalars[num], i + 4) << 5;
-                               bits |= get_bit(scalars[num], i + 3) << 4;
-                               bits |= get_bit(scalars[num], i + 2) << 3;
-                               bits |= get_bit(scalars[num], i + 1) << 2;
-                               bits |= get_bit(scalars[num], i) << 1;
-                               bits |= get_bit(scalars[num], i - 1);
-                               ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
-
-                               /*
-                                * select the point to add or subtract, in
-                                * constant time
-                                */
-                               select_point(digit, 17, pre_comp[num], tmp);
-                               felem_neg(tmp[3], tmp[1]);      /* (X, -Y, Z) is the
-                                                                * negative point */
-                               copy_conditional(tmp[1], tmp[3], (-(limb) sign));
-
-                               if (!skip) {
-                                       point_add(nq[0], nq[1], nq[2],
-                                           nq[0], nq[1], nq[2],
-                                           mixed, tmp[0], tmp[1], tmp[2]);
-                               } else {
-                                       memcpy(nq, tmp, 3 * sizeof(felem));
-                                       skip = 0;
-                               }
-                       }
-               }
-       }
-       felem_assign(x_out, nq[0]);
-       felem_assign(y_out, nq[1]);
-       felem_assign(z_out, nq[2]);
-}
-
-
-/* Precomputation for the group generator. */
-typedef struct {
-       felem g_pre_comp[16][3];
-       int references;
-} NISTP521_PRE_COMP;
-
-const EC_METHOD *
-EC_GFp_nistp521_method(void)
-{
-       static const EC_METHOD ret = {
-               .flags = EC_FLAGS_DEFAULT_OCT,
-               .field_type = NID_X9_62_prime_field,
-               .group_init = ec_GFp_nistp521_group_init,
-               .group_finish = ec_GFp_simple_group_finish,
-               .group_clear_finish = ec_GFp_simple_group_clear_finish,
-               .group_copy = ec_GFp_nist_group_copy,
-               .group_set_curve = ec_GFp_nistp521_group_set_curve,
-               .group_get_curve = ec_GFp_simple_group_get_curve,
-               .group_get_degree = ec_GFp_simple_group_get_degree,
-               .group_order_bits = ec_group_simple_order_bits,
-               .group_check_discriminant =
-                   ec_GFp_simple_group_check_discriminant,
-               .point_init = ec_GFp_simple_point_init,
-               .point_finish = ec_GFp_simple_point_finish,
-               .point_clear_finish = ec_GFp_simple_point_clear_finish,
-               .point_copy = ec_GFp_simple_point_copy,
-               .point_set_to_infinity = ec_GFp_simple_point_set_to_infinity,
-               .point_set_Jprojective_coordinates =
-                   ec_GFp_simple_set_Jprojective_coordinates,
-               .point_get_Jprojective_coordinates =
-                   ec_GFp_simple_get_Jprojective_coordinates,
-               .point_set_affine_coordinates =
-                   ec_GFp_simple_point_set_affine_coordinates,
-               .point_get_affine_coordinates =
-                   ec_GFp_nistp521_point_get_affine_coordinates,
-               .add = ec_GFp_simple_add,
-               .dbl = ec_GFp_simple_dbl,
-               .invert = ec_GFp_simple_invert,
-               .is_at_infinity = ec_GFp_simple_is_at_infinity,
-               .is_on_curve = ec_GFp_simple_is_on_curve,
-               .point_cmp = ec_GFp_simple_cmp,
-               .make_affine = ec_GFp_simple_make_affine,
-               .points_make_affine = ec_GFp_simple_points_make_affine,
-               .mul = ec_GFp_nistp521_points_mul,
-               .precompute_mult = ec_GFp_nistp521_precompute_mult,
-               .have_precompute_mult = ec_GFp_nistp521_have_precompute_mult,
-               .field_mul = ec_GFp_nist_field_mul,
-               .field_sqr = ec_GFp_nist_field_sqr,
-               .blind_coordinates = NULL,
-       };
-
-       return &ret;
-}
-
-
-/******************************************************************************/
-/*                    FUNCTIONS TO MANAGE PRECOMPUTATION
- */
-
-static NISTP521_PRE_COMP *
-nistp521_pre_comp_new()
-{
-       NISTP521_PRE_COMP *ret = NULL;
-       ret = malloc(sizeof(NISTP521_PRE_COMP));
-       if (!ret) {
-               ECerror(ERR_R_MALLOC_FAILURE);
-               return ret;
-       }
-       memset(ret->g_pre_comp, 0, sizeof(ret->g_pre_comp));
-       ret->references = 1;
-       return ret;
-}
-
-static void *
-nistp521_pre_comp_dup(void *src_)
-{
-       NISTP521_PRE_COMP *src = src_;
-
-       /* no need to actually copy, these objects never change! */
-       CRYPTO_add(&src->references, 1, CRYPTO_LOCK_EC_PRE_COMP);
-
-       return src_;
-}
-
-static void
-nistp521_pre_comp_free(void *pre_)
-{
-       int i;
-       NISTP521_PRE_COMP *pre = pre_;
-
-       if (!pre)
-               return;
-
-       i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
-       if (i > 0)
-               return;
-
-       free(pre);
-}
-
-static void
-nistp521_pre_comp_clear_free(void *pre_)
-{
-       int i;
-       NISTP521_PRE_COMP *pre = pre_;
-
-       if (!pre)
-               return;
-
-       i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
-       if (i > 0)
-               return;
-
-       freezero(pre, sizeof(*pre));
-}
-
-/******************************************************************************/
-/*                        OPENSSL EC_METHOD FUNCTIONS
- */
-
-int
-ec_GFp_nistp521_group_init(EC_GROUP *group)
-{
-       int ret;
-       ret = ec_GFp_simple_group_init(group);
-       group->a_is_minus3 = 1;
-       return ret;
-}
-
-int
-ec_GFp_nistp521_group_set_curve(EC_GROUP *group, const BIGNUM *p,
-    const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx)
-{
-       int ret = 0;
-       BN_CTX *new_ctx = NULL;
-       BIGNUM *curve_p, *curve_a, *curve_b;
-
-       if (ctx == NULL)
-               if ((ctx = new_ctx = BN_CTX_new()) == NULL)
-                       return 0;
-       BN_CTX_start(ctx);
-       if (((curve_p = BN_CTX_get(ctx)) == NULL) ||
-           ((curve_a = BN_CTX_get(ctx)) == NULL) ||
-           ((curve_b = BN_CTX_get(ctx)) == NULL))
-               goto err;
-       BN_bin2bn(nistp521_curve_params[0], sizeof(felem_bytearray), curve_p);
-       BN_bin2bn(nistp521_curve_params[1], sizeof(felem_bytearray), curve_a);
-       BN_bin2bn(nistp521_curve_params[2], sizeof(felem_bytearray), curve_b);
-       if ((BN_cmp(curve_p, p)) || (BN_cmp(curve_a, a)) ||
-           (BN_cmp(curve_b, b))) {
-               ECerror(EC_R_WRONG_CURVE_PARAMETERS);
-               goto err;
-       }
-       group->field_mod_func = BN_nist_mod_521;
-       ret = ec_GFp_simple_group_set_curve(group, p, a, b, ctx);
- err:
-       BN_CTX_end(ctx);
-       BN_CTX_free(new_ctx);
-       return ret;
-}
-
-/* Takes the Jacobian coordinates (X, Y, Z) of a point and returns
- * (X', Y') = (X/Z^2, Y/Z^3) */
-int
-ec_GFp_nistp521_point_get_affine_coordinates(const EC_GROUP *group,
-    const EC_POINT *point, BIGNUM *x, BIGNUM *y, BN_CTX *ctx)
-{
-       felem z1, z2, x_in, y_in, x_out, y_out;
-       largefelem tmp;
-
-       if (EC_POINT_is_at_infinity(group, point) > 0) {
-               ECerror(EC_R_POINT_AT_INFINITY);
-               return 0;
-       }
-       if ((!BN_to_felem(x_in, &point->X)) || (!BN_to_felem(y_in, &point->Y)) ||
-           (!BN_to_felem(z1, &point->Z)))
-               return 0;
-       felem_inv(z2, z1);
-       felem_square(tmp, z2);
-       felem_reduce(z1, tmp);
-       felem_mul(tmp, x_in, z1);
-       felem_reduce(x_in, tmp);
-       felem_contract(x_out, x_in);
-       if (x != NULL) {
-               if (!felem_to_BN(x, x_out)) {
-                       ECerror(ERR_R_BN_LIB);
-                       return 0;
-               }
-       }
-       felem_mul(tmp, z1, z2);
-       felem_reduce(z1, tmp);
-       felem_mul(tmp, y_in, z1);
-       felem_reduce(y_in, tmp);
-       felem_contract(y_out, y_in);
-       if (y != NULL) {
-               if (!felem_to_BN(y, y_out)) {
-                       ECerror(ERR_R_BN_LIB);
-                       return 0;
-               }
-       }
-       return 1;
-}
-
-static void
-make_points_affine(size_t num, felem points[ /* num */ ][3], felem tmp_felems[ /* num+1 */ ])
-{
-       /*
-        * Runs in constant time, unless an input is the point at infinity
-        * (which normally shouldn't happen).
-        */
-       ec_GFp_nistp_points_make_affine_internal(
-           num,
-           points,
-           sizeof(felem),
-           tmp_felems,
-           (void (*) (void *)) felem_one,
-           (int (*) (const void *)) felem_is_zero_int,
-           (void (*) (void *, const void *)) felem_assign,
-           (void (*) (void *, const void *)) felem_square_reduce,
-           (void (*) (void *, const void *, const void *)) felem_mul_reduce,
-           (void (*) (void *, const void *)) felem_inv,
-           (void (*) (void *, const void *)) felem_contract);
-}
-
-/* Computes scalar*generator + \sum scalars[i]*points[i], ignoring NULL values
- * Result is stored in r (r can equal one of the inputs). */
-int
-ec_GFp_nistp521_points_mul(const EC_GROUP *group, EC_POINT *r,
-    const BIGNUM *scalar, size_t num, const EC_POINT *points[],
-    const BIGNUM *scalars[], BN_CTX *ctx)
-{
-       int ret = 0;
-       int j;
-       int mixed = 0;
-       BN_CTX *new_ctx = NULL;
-       BIGNUM *x, *y, *z, *tmp_scalar;
-       felem_bytearray g_secret;
-       felem_bytearray *secrets = NULL;
-       felem(*pre_comp)[17][3] = NULL;
-       felem *tmp_felems = NULL;
-       felem_bytearray tmp;
-       unsigned i, num_bytes;
-       int have_pre_comp = 0;
-       size_t num_points = num;
-       felem x_in, y_in, z_in, x_out, y_out, z_out;
-       NISTP521_PRE_COMP *pre = NULL;
-       felem(*g_pre_comp)[3] = NULL;
-       EC_POINT *generator = NULL;
-       const EC_POINT *p = NULL;
-       const BIGNUM *p_scalar = NULL;
-
-       if (ctx == NULL)
-               if ((ctx = new_ctx = BN_CTX_new()) == NULL)
-                       return 0;
-       BN_CTX_start(ctx);
-       if (((x = BN_CTX_get(ctx)) == NULL) ||
-           ((y = BN_CTX_get(ctx)) == NULL) ||
-           ((z = BN_CTX_get(ctx)) == NULL) ||
-           ((tmp_scalar = BN_CTX_get(ctx)) == NULL))
-               goto err;
-
-       if (scalar != NULL) {
-               pre = EC_EX_DATA_get_data(group->extra_data,
-                   nistp521_pre_comp_dup, nistp521_pre_comp_free,
-                   nistp521_pre_comp_clear_free);
-               if (pre)
-                       /* we have precomputation, try to use it */
-                       g_pre_comp = &pre->g_pre_comp[0];
-               else
-                       /* try to use the standard precomputation */
-                       g_pre_comp = (felem(*)[3]) gmul;
-               generator = EC_POINT_new(group);
-               if (generator == NULL)
-                       goto err;
-               /* get the generator from precomputation */
-               if (!felem_to_BN(x, g_pre_comp[1][0]) ||
-                   !felem_to_BN(y, g_pre_comp[1][1]) ||
-                   !felem_to_BN(z, g_pre_comp[1][2])) {
-                       ECerror(ERR_R_BN_LIB);
-                       goto err;
-               }
-               if (!EC_POINT_set_Jprojective_coordinates(group, generator,
-                   x, y, z, ctx))
-                       goto err;
-               if (0 == EC_POINT_cmp(group, generator, group->generator, ctx))
-                       /* precomputation matches generator */
-                       have_pre_comp = 1;
-               else
-                       /*
-                        * we don't have valid precomputation: treat the
-                        * generator as a random point
-                        */
-                       num_points++;
-       }
-       if (num_points > 0) {
-               if (num_points >= 2) {
-                       /*
-                        * unless we precompute multiples for just one point,
-                        * converting those into affine form is time well
-                        * spent
-                        */
-                       mixed = 1;
-               }
-               secrets = calloc(num_points, sizeof(felem_bytearray));
-               pre_comp = calloc(num_points, 17 * 3 * sizeof(felem));
-               if (mixed) {
-                       /* XXX should do more int overflow checking */
-                       tmp_felems = reallocarray(NULL,
-                           (num_points * 17 + 1), sizeof(felem));
-               }
-               if ((secrets == NULL) || (pre_comp == NULL) || (mixed && (tmp_felems == NULL))) {
-                       ECerror(ERR_R_MALLOC_FAILURE);
-                       goto err;
-               }
-               /*
-                * we treat NULL scalars as 0, and NULL points as points at
-                * infinity, i.e., they contribute nothing to the linear
-                * combination
-                */
-               for (i = 0; i < num_points; ++i) {
-                       if (i == num)
-                               /*
-                                * we didn't have a valid precomputation, so
-                                * we pick the generator
-                                */
-                       {
-                               p = EC_GROUP_get0_generator(group);
-                               p_scalar = scalar;
-                       } else
-                               /* the i^th point */
-                       {
-                               p = points[i];
-                               p_scalar = scalars[i];
-                       }
-                       if ((p_scalar != NULL) && (p != NULL)) {
-                               /* reduce scalar to 0 <= scalar < 2^521 */
-                               if ((BN_num_bits(p_scalar) > 521) || (BN_is_negative(p_scalar))) {
-                                       /*
-                                        * this is an unusual input, and we
-                                        * don't guarantee constant-timeness
-                                        */
-                                       if (!BN_nnmod(tmp_scalar, p_scalar, &group->order, ctx)) {
-                                               ECerror(ERR_R_BN_LIB);
-                                               goto err;
-                                       }
-                                       num_bytes = BN_bn2bin(tmp_scalar, tmp);
-                               } else
-                                       num_bytes = BN_bn2bin(p_scalar, tmp);
-                               flip_endian(secrets[i], tmp, num_bytes);
-                               /* precompute multiples */
-                               if ((!BN_to_felem(x_out, &p->X)) ||
-                                   (!BN_to_felem(y_out, &p->Y)) ||
-                                   (!BN_to_felem(z_out, &p->Z)))
-                                       goto err;
-                               memcpy(pre_comp[i][1][0], x_out, sizeof(felem));
-                               memcpy(pre_comp[i][1][1], y_out, sizeof(felem));
-                               memcpy(pre_comp[i][1][2], z_out, sizeof(felem));
-                               for (j = 2; j <= 16; ++j) {
-                                       if (j & 1) {
-                                               point_add(
-                                                   pre_comp[i][j][0], pre_comp[i][j][1], pre_comp[i][j][2],
-                                                   pre_comp[i][1][0], pre_comp[i][1][1], pre_comp[i][1][2],
-                                                   0, pre_comp[i][j - 1][0], pre_comp[i][j - 1][1], pre_comp[i][j - 1][2]);
-                                       } else {
-                                               point_double(
-                                                   pre_comp[i][j][0], pre_comp[i][j][1], pre_comp[i][j][2],
-                                                   pre_comp[i][j / 2][0], pre_comp[i][j / 2][1], pre_comp[i][j / 2][2]);
-                                       }
-                               }
-                       }
-               }
-               if (mixed)
-                       make_points_affine(num_points * 17, pre_comp[0], tmp_felems);
-       }
-       /* the scalar for the generator */
-       if ((scalar != NULL) && (have_pre_comp)) {
-               memset(g_secret, 0, sizeof(g_secret));
-               /* reduce scalar to 0 <= scalar < 2^521 */
-               if ((BN_num_bits(scalar) > 521) || (BN_is_negative(scalar))) {
-                       /*
-                        * this is an unusual input, and we don't guarantee
-                        * constant-timeness
-                        */
-                       if (!BN_nnmod(tmp_scalar, scalar, &group->order, ctx)) {
-                               ECerror(ERR_R_BN_LIB);
-                               goto err;
-                       }
-                       num_bytes = BN_bn2bin(tmp_scalar, tmp);
-               } else
-                       num_bytes = BN_bn2bin(scalar, tmp);
-               flip_endian(g_secret, tmp, num_bytes);
-               /* do the multiplication with generator precomputation */
-               batch_mul(x_out, y_out, z_out,
-                   (const felem_bytearray(*)) secrets, num_points,
-                   g_secret,
-                   mixed, (const felem(*)[17][3]) pre_comp,
-                   (const felem(*)[3]) g_pre_comp);
-       } else
-               /* do the multiplication without generator precomputation */
-               batch_mul(x_out, y_out, z_out,
-                   (const felem_bytearray(*)) secrets, num_points,
-                   NULL, mixed, (const felem(*)[17][3]) pre_comp, NULL);
-       /* reduce the output to its unique minimal representation */
-       felem_contract(x_in, x_out);
-       felem_contract(y_in, y_out);
-       felem_contract(z_in, z_out);
-       if ((!felem_to_BN(x, x_in)) || (!felem_to_BN(y, y_in)) ||
-           (!felem_to_BN(z, z_in))) {
-               ECerror(ERR_R_BN_LIB);
-               goto err;
-       }
-       ret = EC_POINT_set_Jprojective_coordinates(group, r, x, y, z, ctx);
-
- err:
-       BN_CTX_end(ctx);
-       EC_POINT_free(generator);
-       BN_CTX_free(new_ctx);
-       free(secrets);
-       free(pre_comp);
-       free(tmp_felems);
-       return ret;
-}
-
-int
-ec_GFp_nistp521_precompute_mult(EC_GROUP *group, BN_CTX *ctx)
-{
-       int ret = 0;
-       NISTP521_PRE_COMP *pre = NULL;
-       int i, j;
-       BN_CTX *new_ctx = NULL;
-       BIGNUM *x, *y;
-       EC_POINT *generator = NULL;
-       felem tmp_felems[16];
-
-       /* throw away old precomputation */
-       EC_EX_DATA_free_data(&group->extra_data, nistp521_pre_comp_dup,
-           nistp521_pre_comp_free, nistp521_pre_comp_clear_free);
-       if (ctx == NULL)
-               if ((ctx = new_ctx = BN_CTX_new()) == NULL)
-                       return 0;
-       BN_CTX_start(ctx);
-       if (((x = BN_CTX_get(ctx)) == NULL) ||
-           ((y = BN_CTX_get(ctx)) == NULL))
-               goto err;
-       /* get the generator */
-       if (group->generator == NULL)
-               goto err;
-       generator = EC_POINT_new(group);
-       if (generator == NULL)
-               goto err;
-       BN_bin2bn(nistp521_curve_params[3], sizeof(felem_bytearray), x);
-       BN_bin2bn(nistp521_curve_params[4], sizeof(felem_bytearray), y);
-       if (!EC_POINT_set_affine_coordinates(group, generator, x, y, ctx))
-               goto err;
-       if ((pre = nistp521_pre_comp_new()) == NULL)
-               goto err;
-       /* if the generator is the standard one, use built-in precomputation */
-       if (0 == EC_POINT_cmp(group, generator, group->generator, ctx)) {
-               memcpy(pre->g_pre_comp, gmul, sizeof(pre->g_pre_comp));
-               ret = 1;
-               goto err;
-       }
-       if ((!BN_to_felem(pre->g_pre_comp[1][0], &group->generator->X)) ||
-           (!BN_to_felem(pre->g_pre_comp[1][1], &group->generator->Y)) ||
-           (!BN_to_felem(pre->g_pre_comp[1][2], &group->generator->Z)))
-               goto err;
-       /* compute 2^130*G, 2^260*G, 2^390*G */
-       for (i = 1; i <= 4; i <<= 1) {
-               point_double(pre->g_pre_comp[2 * i][0], pre->g_pre_comp[2 * i][1],
-                   pre->g_pre_comp[2 * i][2], pre->g_pre_comp[i][0],
-                   pre->g_pre_comp[i][1], pre->g_pre_comp[i][2]);
-               for (j = 0; j < 129; ++j) {
-                       point_double(pre->g_pre_comp[2 * i][0],
-                           pre->g_pre_comp[2 * i][1],
-                           pre->g_pre_comp[2 * i][2],
-                           pre->g_pre_comp[2 * i][0],
-                           pre->g_pre_comp[2 * i][1],
-                           pre->g_pre_comp[2 * i][2]);
-               }
-       }
-       /* g_pre_comp[0] is the point at infinity */
-       memset(pre->g_pre_comp[0], 0, sizeof(pre->g_pre_comp[0]));
-       /* the remaining multiples */
-       /* 2^130*G + 2^260*G */
-       point_add(pre->g_pre_comp[6][0], pre->g_pre_comp[6][1],
-           pre->g_pre_comp[6][2], pre->g_pre_comp[4][0],
-           pre->g_pre_comp[4][1], pre->g_pre_comp[4][2],
-           0, pre->g_pre_comp[2][0], pre->g_pre_comp[2][1],
-           pre->g_pre_comp[2][2]);
-       /* 2^130*G + 2^390*G */
-       point_add(pre->g_pre_comp[10][0], pre->g_pre_comp[10][1],
-           pre->g_pre_comp[10][2], pre->g_pre_comp[8][0],
-           pre->g_pre_comp[8][1], pre->g_pre_comp[8][2],
-           0, pre->g_pre_comp[2][0], pre->g_pre_comp[2][1],
-           pre->g_pre_comp[2][2]);
-       /* 2^260*G + 2^390*G */
-       point_add(pre->g_pre_comp[12][0], pre->g_pre_comp[12][1],
-           pre->g_pre_comp[12][2], pre->g_pre_comp[8][0],
-           pre->g_pre_comp[8][1], pre->g_pre_comp[8][2],
-           0, pre->g_pre_comp[4][0], pre->g_pre_comp[4][1],
-           pre->g_pre_comp[4][2]);
-       /* 2^130*G + 2^260*G + 2^390*G */
-       point_add(pre->g_pre_comp[14][0], pre->g_pre_comp[14][1],
-           pre->g_pre_comp[14][2], pre->g_pre_comp[12][0],
-           pre->g_pre_comp[12][1], pre->g_pre_comp[12][2],
-           0, pre->g_pre_comp[2][0], pre->g_pre_comp[2][1],
-           pre->g_pre_comp[2][2]);
-       for (i = 1; i < 8; ++i) {
-               /* odd multiples: add G */
-               point_add(pre->g_pre_comp[2 * i + 1][0], pre->g_pre_comp[2 * i + 1][1],
-                   pre->g_pre_comp[2 * i + 1][2], pre->g_pre_comp[2 * i][0],
-                   pre->g_pre_comp[2 * i][1], pre->g_pre_comp[2 * i][2],
-                   0, pre->g_pre_comp[1][0], pre->g_pre_comp[1][1],
-                   pre->g_pre_comp[1][2]);
-       }
-       make_points_affine(15, &(pre->g_pre_comp[1]), tmp_felems);
-
-       if (!EC_EX_DATA_set_data(&group->extra_data, pre, nistp521_pre_comp_dup,
-               nistp521_pre_comp_free, nistp521_pre_comp_clear_free))
-               goto err;
-       ret = 1;
-       pre = NULL;
- err:
-       BN_CTX_end(ctx);
-       EC_POINT_free(generator);
-       BN_CTX_free(new_ctx);
-       nistp521_pre_comp_free(pre);
-       return ret;
-}
-
-int
-ec_GFp_nistp521_have_precompute_mult(const EC_GROUP *group)
-{
-       if (EC_EX_DATA_get_data(group->extra_data, nistp521_pre_comp_dup,
-               nistp521_pre_comp_free, nistp521_pre_comp_clear_free)
-           != NULL)
-               return 1;
-       else
-               return 0;
-}
-
-#endif
diff --git a/lib/libcrypto/ec/ecp_nistputil.c b/lib/libcrypto/ec/ecp_nistputil.c
deleted file mode 100644 (file)
index d0fea12..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/* $OpenBSD: ecp_nistputil.c,v 1.8 2022/11/26 16:08:52 tb Exp $ */
-/*
- * Written by Bodo Moeller for the OpenSSL project.
- */
-/*
- * Copyright (c) 2011 Google Inc.
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <stddef.h>
-
-#include <openssl/opensslconf.h>
-
-#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
-
-/*
- * Common utility functions for ecp_nistp224.c, ecp_nistp256.c, ecp_nistp521.c.
- */
-
-#include "ec_local.h"
-
-/* Convert an array of points into affine coordinates.
- * (If the point at infinity is found (Z = 0), it remains unchanged.)
- * This function is essentially an equivalent to EC_POINTs_make_affine(), but
- * works with the internal representation of points as used by ecp_nistp###.c
- * rather than with (BIGNUM-based) EC_POINT data structures.
- *
- * point_array is the input/output buffer ('num' points in projective form,
- * i.e. three coordinates each), based on an internal representation of
- * field elements of size 'felem_size'.
- *
- * tmp_felems needs to point to a temporary array of 'num'+1 field elements
- * for storage of intermediate values.
- */
-void
-ec_GFp_nistp_points_make_affine_internal(size_t num, void *point_array,
-    size_t felem_size, void *tmp_felems,
-    void (*felem_one) (void *out),
-    int (*felem_is_zero) (const void *in),
-    void (*felem_assign) (void *out, const void *in),
-    void (*felem_square) (void *out, const void *in),
-    void (*felem_mul) (void *out, const void *in1, const void *in2),
-    void (*felem_inv) (void *out, const void *in),
-    void (*felem_contract) (void *out, const void *in))
-{
-       int i = 0;
-
-#define tmp_felem(I) (&((char *)tmp_felems)[(I) * felem_size])
-#define X(I) (&((char *)point_array)[3*(I) * felem_size])
-#define Y(I) (&((char *)point_array)[(3*(I) + 1) * felem_size])
-#define Z(I) (&((char *)point_array)[(3*(I) + 2) * felem_size])
-
-       if (!felem_is_zero(Z(0)))
-               felem_assign(tmp_felem(0), Z(0));
-       else
-               felem_one(tmp_felem(0));
-       for (i = 1; i < (int) num; i++) {
-               if (!felem_is_zero(Z(i)))
-                       felem_mul(tmp_felem(i), tmp_felem(i - 1), Z(i));
-               else
-                       felem_assign(tmp_felem(i), tmp_felem(i - 1));
-       }
-       /*
-        * Now each tmp_felem(i) is the product of Z(0) .. Z(i), skipping any
-        * zero-valued factors: if Z(i) = 0, we essentially pretend that Z(i)
-        * = 1
-        */
-
-       felem_inv(tmp_felem(num - 1), tmp_felem(num - 1));
-       for (i = num - 1; i >= 0; i--) {
-               if (i > 0)
-                       /*
-                        * tmp_felem(i-1) is the product of Z(0) .. Z(i-1),
-                        * tmp_felem(i) is the inverse of the product of Z(0)
-                        * .. Z(i)
-                        */
-                       felem_mul(tmp_felem(num), tmp_felem(i - 1), tmp_felem(i));      /* 1/Z(i) */
-               else
-                       felem_assign(tmp_felem(num), tmp_felem(0));     /* 1/Z(0) */
-
-               if (!felem_is_zero(Z(i))) {
-                       if (i > 0)
-                               /*
-                                * For next iteration, replace tmp_felem(i-1)
-                                * by its inverse
-                                */
-                               felem_mul(tmp_felem(i - 1), tmp_felem(i), Z(i));
-
-                       /*
-                        * Convert point (X, Y, Z) into affine form (X/(Z^2),
-                        * Y/(Z^3), 1)
-                        */
-                       felem_square(Z(i), tmp_felem(num));     /* 1/(Z^2) */
-                       felem_mul(X(i), X(i), Z(i));    /* X/(Z^2) */
-                       felem_mul(Z(i), Z(i), tmp_felem(num));  /* 1/(Z^3) */
-                       felem_mul(Y(i), Y(i), Z(i));    /* Y/(Z^3) */
-                       felem_contract(X(i), X(i));
-                       felem_contract(Y(i), Y(i));
-                       felem_one(Z(i));
-               } else {
-                       if (i > 0)
-                               /*
-                                * For next iteration, replace tmp_felem(i-1)
-                                * by its inverse
-                                */
-                               felem_assign(tmp_felem(i - 1), tmp_felem(i));
-               }
-       }
-}
-
-/*
- * This function looks at 5+1 scalar bits (5 current, 1 adjacent less
- * significant bit), and recodes them into a signed digit for use in fast point
- * multiplication: the use of signed rather than unsigned digits means that
- * fewer points need to be precomputed, given that point inversion is easy
- * (a precomputed point dP makes -dP available as well).
- *
- * BACKGROUND:
- *
- * Signed digits for multiplication were introduced by Booth ("A signed binary
- * multiplication technique", Quart. Journ. Mech. and Applied Math., vol. IV,
- * pt. 2 (1951), pp. 236-240), in that case for multiplication of integers.
- * Booth's original encoding did not generally improve the density of nonzero
- * digits over the binary representation, and was merely meant to simplify the
- * handling of signed factors given in two's complement; but it has since been
- * shown to be the basis of various signed-digit representations that do have
- * further advantages, including the wNAF, using the following general approach:
- *
- * (1) Given a binary representation
- *
- *       b_k  ...  b_2  b_1  b_0,
- *
- *     of a nonnegative integer (b_k in {0, 1}), rewrite it in digits 0, 1, -1
- *     by using bit-wise subtraction as follows:
- *
- *        b_k b_(k-1)  ...  b_2  b_1  b_0
- *      -     b_k      ...  b_3  b_2  b_1  b_0
- *       -------------------------------------
- *        s_k b_(k-1)  ...  s_3  s_2  s_1  s_0
- *
- *     A left-shift followed by subtraction of the original value yields a new
- *     representation of the same value, using signed bits s_i = b_(i+1) - b_i.
- *     This representation from Booth's paper has since appeared in the
- *     literature under a variety of different names including "reversed binary
- *     form", "alternating greedy expansion", "mutual opposite form", and
- *     "sign-alternating {+-1}-representation".
- *
- *     An interesting property is that among the nonzero bits, values 1 and -1
- *     strictly alternate.
- *
- * (2) Various window schemes can be applied to the Booth representation of
- *     integers: for example, right-to-left sliding windows yield the wNAF
- *     (a signed-digit encoding independently discovered by various researchers
- *     in the 1990s), and left-to-right sliding windows yield a left-to-right
- *     equivalent of the wNAF (independently discovered by various researchers
- *     around 2004).
- *
- * To prevent leaking information through side channels in point multiplication,
- * we need to recode the given integer into a regular pattern: sliding windows
- * as in wNAFs won't do, we need their fixed-window equivalent -- which is a few
- * decades older: we'll be using the so-called "modified Booth encoding" due to
- * MacSorley ("High-speed arithmetic in binary computers", Proc. IRE, vol. 49
- * (1961), pp. 67-91), in a radix-2^5 setting.  That is, we always combine five
- * signed bits into a signed digit:
- *
- *       s_(4j + 4) s_(4j + 3) s_(4j + 2) s_(4j + 1) s_(4j)
- *
- * The sign-alternating property implies that the resulting digit values are
- * integers from -16 to 16.
- *
- * Of course, we don't actually need to compute the signed digits s_i as an
- * intermediate step (that's just a nice way to see how this scheme relates
- * to the wNAF): a direct computation obtains the recoded digit from the
- * six bits b_(4j + 4) ... b_(4j - 1).
- *
- * This function takes those five bits as an integer (0 .. 63), writing the
- * recoded digit to *sign (0 for positive, 1 for negative) and *digit (absolute
- * value, in the range 0 .. 8).  Note that this integer essentially provides the
- * input bits "shifted to the left" by one position: for example, the input to
- * compute the least significant recoded digit, given that there's no bit b_-1,
- * has to be b_4 b_3 b_2 b_1 b_0 0.
- *
- */
-void
-ec_GFp_nistp_recode_scalar_bits(unsigned char *sign, unsigned char *digit, unsigned char in)
-{
-       unsigned char s, d;
-
-       s = ~((in >> 5) - 1);   /* sets all bits to MSB(in), 'in' seen as
-                                * 6-bit value */
-       d = (1 << 6) - in - 1;
-       d = (d & s) | (in & ~s);
-       d = (d >> 1) + (d & 1);
-
-       *sign = s & 1;
-       *digit = d;
-}
-#endif
diff --git a/lib/libcrypto/ec/ecp_nistz256.c b/lib/libcrypto/ec/ecp_nistz256.c
deleted file mode 100644 (file)
index 62aac44..0000000
+++ /dev/null
@@ -1,1191 +0,0 @@
-/*     $OpenBSD: ecp_nistz256.c,v 1.14 2022/11/26 16:08:52 tb Exp $    */
-/* Copyright (c) 2014, Intel Corporation.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-/* Developers and authors:
- * Shay Gueron (1, 2), and Vlad Krasnov (1)
- * (1) Intel Corporation, Israel Development Center
- * (2) University of Haifa
- * Reference:
- * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with
- *                          256 Bit Primes" */
-
-/*
- * The following license applies to _booth_recode_w5() and
- * _booth_recode_w7():
- */
-/* Copyright (c) 2015, Google Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-#include <string.h>
-
-#include <openssl/crypto.h>
-#include <openssl/bn.h>
-#include <openssl/ec.h>
-#include <openssl/err.h>
-
-#include "ec_local.h"
-
-#if BN_BITS2 != 64
-#define        TOBN(hi,lo)     lo,hi
-#else
-#define        TOBN(hi,lo)     ((BN_ULONG)hi << 32 | lo)
-#endif
-
-#if defined(__GNUC__)
-#define        ALIGN32         __attribute((aligned(32)))
-#elif defined(_MSC_VER)
-#define        ALIGN32         __declspec(align(32))
-#else
-#define        ALIGN32
-#endif
-
-#define        P256_LIMBS      (256 / BN_BITS2)
-
-typedef struct {
-       BN_ULONG X[P256_LIMBS];
-       BN_ULONG Y[P256_LIMBS];
-       BN_ULONG Z[P256_LIMBS];
-} P256_POINT;
-
-typedef struct {
-       BN_ULONG X[P256_LIMBS];
-       BN_ULONG Y[P256_LIMBS];
-} P256_POINT_AFFINE;
-
-typedef P256_POINT_AFFINE PRECOMP256_ROW[64];
-
-/* structure for precomputed multiples of the generator */
-typedef struct ec_pre_comp_st {
-       const EC_GROUP *group;  /* Parent EC_GROUP object */
-       size_t w;               /* Window size */
-       /*
-        * Constant time access to the X and Y coordinates of the pre-computed,
-        * generator multiplies, in the Montgomery domain. Pre-calculated
-        * multiplies are stored in affine form.
-        */
-       PRECOMP256_ROW *precomp;
-       int references;
-} EC_PRE_COMP;
-
-/*
- * Arithmetic on field elements using Almost Montgomery Multiplication. The
- * "almost" means, in particular, that the inputs and outputs of these
- * functions are in the range [0, 2**BN_BITS2), not [0, P). Only
- * |ecp_nistz256_from_mont| outputs a fully reduced value in [0, P). Almost
- * Montgomery Arithmetic is described clearly in "Efficient Software
- * Implementations of Modular Exponentiation" by Shay Gueron.
- */
-
-/* Modular neg: res = -a mod P, where res is not fully reduced. */
-void   ecp_nistz256_neg(BN_ULONG res[P256_LIMBS],
-           const BN_ULONG a[P256_LIMBS]);
-/* Montgomery mul: res = a*b*2^-256 mod P, where res is not fully reduced. */
-void   ecp_nistz256_mul_mont(BN_ULONG res[P256_LIMBS],
-           const BN_ULONG a[P256_LIMBS], const BN_ULONG b[P256_LIMBS]);
-/* Montgomery sqr: res = a*a*2^-256 mod P, where res is not fully reduced. */
-void   ecp_nistz256_sqr_mont(BN_ULONG res[P256_LIMBS],
-           const BN_ULONG a[P256_LIMBS]);
-/* Convert a number from Montgomery domain, by multiplying with 1, where res
- * will be fully reduced mod P. */
-void   ecp_nistz256_from_mont(BN_ULONG res[P256_LIMBS],
-           const BN_ULONG in[P256_LIMBS]);
-
-/* Functions that perform constant time access to the precomputed tables */
-void   ecp_nistz256_select_w5(P256_POINT *val, const P256_POINT *in_t,
-           int index);
-void   ecp_nistz256_select_w7(P256_POINT_AFFINE *val,
-           const P256_POINT_AFFINE *in_t, int index);
-
-/* One converted into the Montgomery domain */
-static const BN_ULONG ONE[P256_LIMBS] = {
-       TOBN(0x00000000, 0x00000001), TOBN(0xffffffff, 0x00000000),
-       TOBN(0xffffffff, 0xffffffff), TOBN(0x00000000, 0xfffffffe)
-};
-
-static void *ecp_nistz256_pre_comp_dup(void *);
-static void ecp_nistz256_pre_comp_free(void *);
-static void ecp_nistz256_pre_comp_clear_free(void *);
-static EC_PRE_COMP *ecp_nistz256_pre_comp_new(const EC_GROUP *group);
-
-/* Precomputed tables for the default generator */
-#include "ecp_nistz256_table.h"
-
-/* This function looks at 5+1 scalar bits (5 current, 1 adjacent less
- * significant bit), and recodes them into a signed digit for use in fast point
- * multiplication: the use of signed rather than unsigned digits means that
- * fewer points need to be precomputed, given that point inversion is easy (a
- * precomputed point dP makes -dP available as well).
- *
- * BACKGROUND:
- *
- * Signed digits for multiplication were introduced by Booth ("A signed binary
- * multiplication technique", Quart. Journ. Mech. and Applied Math., vol. IV,
- * pt. 2 (1951), pp. 236-240), in that case for multiplication of integers.
- * Booth's original encoding did not generally improve the density of nonzero
- * digits over the binary representation, and was merely meant to simplify the
- * handling of signed factors given in two's complement; but it has since been
- * shown to be the basis of various signed-digit representations that do have
- * further advantages, including the wNAF, using the following general
- * approach:
- *
- * (1) Given a binary representation
- *
- *       b_k  ...  b_2  b_1  b_0,
- *
- *     of a nonnegative integer (b_k in {0, 1}), rewrite it in digits 0, 1, -1
- *     by using bit-wise subtraction as follows:
- *
- *        b_k b_(k-1)  ...  b_2  b_1  b_0
- *      -     b_k      ...  b_3  b_2  b_1  b_0
- *       -------------------------------------
- *        s_k b_(k-1)  ...  s_3  s_2  s_1  s_0
- *
- *     A left-shift followed by subtraction of the original value yields a new
- *     representation of the same value, using signed bits s_i = b_(i+1) - b_i.
- *     This representation from Booth's paper has since appeared in the
- *     literature under a variety of different names including "reversed binary
- *     form", "alternating greedy expansion", "mutual opposite form", and
- *     "sign-alternating {+-1}-representation".
- *
- *     An interesting property is that among the nonzero bits, values 1 and -1
- *     strictly alternate.
- *
- * (2) Various window schemes can be applied to the Booth representation of
- *     integers: for example, right-to-left sliding windows yield the wNAF
- *     (a signed-digit encoding independently discovered by various researchers
- *     in the 1990s), and left-to-right sliding windows yield a left-to-right
- *     equivalent of the wNAF (independently discovered by various researchers
- *     around 2004).
- *
- * To prevent leaking information through side channels in point multiplication,
- * we need to recode the given integer into a regular pattern: sliding windows
- * as in wNAFs won't do, we need their fixed-window equivalent -- which is a few
- * decades older: we'll be using the so-called "modified Booth encoding" due to
- * MacSorley ("High-speed arithmetic in binary computers", Proc. IRE, vol. 49
- * (1961), pp. 67-91), in a radix-2^5 setting.  That is, we always combine five
- * signed bits into a signed digit:
- *
- *       s_(4j + 4) s_(4j + 3) s_(4j + 2) s_(4j + 1) s_(4j)
- *
- * The sign-alternating property implies that the resulting digit values are
- * integers from -16 to 16.
- *
- * Of course, we don't actually need to compute the signed digits s_i as an
- * intermediate step (that's just a nice way to see how this scheme relates
- * to the wNAF): a direct computation obtains the recoded digit from the
- * six bits b_(4j + 4) ... b_(4j - 1).
- *
- * This function takes those five bits as an integer (0 .. 63), writing the
- * recoded digit to *sign (0 for positive, 1 for negative) and *digit (absolute
- * value, in the range 0 .. 8).  Note that this integer essentially provides the
- * input bits "shifted to the left" by one position: for example, the input to
- * compute the least significant recoded digit, given that there's no bit b_-1,
- * has to be b_4 b_3 b_2 b_1 b_0 0. */
-
-static unsigned int
-_booth_recode_w5(unsigned int in)
-{
-       unsigned int s, d;
-
-       /* sets all bits to MSB(in), 'in' seen as 6-bit value */
-       s = ~((in >> 5) - 1);
-       d = (1 << 6) - in - 1;
-       d = (d & s) | (in & ~s);
-       d = (d >> 1) + (d & 1);
-
-       return (d << 1) + (s & 1);
-}
-
-static unsigned int
-_booth_recode_w7(unsigned int in)
-{
-       unsigned int s, d;
-
-       /* sets all bits to MSB(in), 'in' seen as 8-bit value */
-       s = ~((in >> 7) - 1);
-       d = (1 << 8) - in - 1;
-       d = (d & s) | (in & ~s);
-       d = (d >> 1) + (d & 1);
-
-       return (d << 1) + (s & 1);
-}
-
-static void
-copy_conditional(BN_ULONG dst[P256_LIMBS], const BN_ULONG src[P256_LIMBS],
-    BN_ULONG move)
-{
-       BN_ULONG mask1 = -move;
-       BN_ULONG mask2 = ~mask1;
-
-       dst[0] = (src[0] & mask1) ^ (dst[0] & mask2);
-       dst[1] = (src[1] & mask1) ^ (dst[1] & mask2);
-       dst[2] = (src[2] & mask1) ^ (dst[2] & mask2);
-       dst[3] = (src[3] & mask1) ^ (dst[3] & mask2);
-       if (P256_LIMBS == 8) {
-               dst[4] = (src[4] & mask1) ^ (dst[4] & mask2);
-               dst[5] = (src[5] & mask1) ^ (dst[5] & mask2);
-               dst[6] = (src[6] & mask1) ^ (dst[6] & mask2);
-               dst[7] = (src[7] & mask1) ^ (dst[7] & mask2);
-       }
-}
-
-static BN_ULONG
-is_zero(BN_ULONG in)
-{
-       in |= (0 - in);
-       in = ~in;
-       in &= BN_MASK2;
-       in >>= BN_BITS2 - 1;
-       return in;
-}
-
-static BN_ULONG
-is_equal(const BN_ULONG a[P256_LIMBS], const BN_ULONG b[P256_LIMBS])
-{
-       BN_ULONG res;
-
-       res = a[0] ^ b[0];
-       res |= a[1] ^ b[1];
-       res |= a[2] ^ b[2];
-       res |= a[3] ^ b[3];
-       if (P256_LIMBS == 8) {
-               res |= a[4] ^ b[4];
-               res |= a[5] ^ b[5];
-               res |= a[6] ^ b[6];
-               res |= a[7] ^ b[7];
-       }
-
-       return is_zero(res);
-}
-
-static BN_ULONG
-is_one(const BIGNUM *z)
-{
-       BN_ULONG res = 0;
-       BN_ULONG *a = z->d;
-
-       if (z->top == (P256_LIMBS - P256_LIMBS / 8)) {
-               res = a[0] ^ ONE[0];
-               res |= a[1] ^ ONE[1];
-               res |= a[2] ^ ONE[2];
-               res |= a[3] ^ ONE[3];
-               if (P256_LIMBS == 8) {
-                       res |= a[4] ^ ONE[4];
-                       res |= a[5] ^ ONE[5];
-                       res |= a[6] ^ ONE[6];
-                       /*
-                        * No check for a[7] (being zero) on 32-bit platforms,
-                        * because value of "one" takes only 7 limbs.
-                        */
-               }
-               res = is_zero(res);
-       }
-
-       return res;
-}
-
-static int
-ecp_nistz256_set_words(BIGNUM *a, BN_ULONG words[P256_LIMBS])
-{
-       if (!bn_wexpand(a, P256_LIMBS)) {
-               ECerror(ERR_R_MALLOC_FAILURE);
-               return 0;
-       }
-       memcpy(a->d, words, sizeof(BN_ULONG) * P256_LIMBS);
-       a->top = P256_LIMBS;
-       bn_correct_top(a);
-       return 1;
-}
-
-void   ecp_nistz256_point_double(P256_POINT *r, const P256_POINT *a);
-void   ecp_nistz256_point_add(P256_POINT *r, const P256_POINT *a,
-           const P256_POINT *b);
-void   ecp_nistz256_point_add_affine(P256_POINT *r, const P256_POINT *a,
-           const P256_POINT_AFFINE *b);
-
-/* r = in^-1 mod p */
-static void
-ecp_nistz256_mod_inverse(BN_ULONG r[P256_LIMBS], const BN_ULONG in[P256_LIMBS])
-{
-       /*
-        * The poly is ffffffff 00000001 00000000 00000000 00000000 ffffffff
-        * ffffffff ffffffff. We use FLT and use poly-2 as exponent.
-        */
-       BN_ULONG p2[P256_LIMBS];
-       BN_ULONG p4[P256_LIMBS];
-       BN_ULONG p8[P256_LIMBS];
-       BN_ULONG p16[P256_LIMBS];
-       BN_ULONG p32[P256_LIMBS];
-       BN_ULONG res[P256_LIMBS];
-       unsigned int i;
-
-       ecp_nistz256_sqr_mont(res, in);
-       ecp_nistz256_mul_mont(p2, res, in);     /* 3*p */
-
-       ecp_nistz256_sqr_mont(res, p2);
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(p4, res, p2);     /* f*p */
-
-       ecp_nistz256_sqr_mont(res, p4);
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(p8, res, p4);     /* ff*p */
-
-       ecp_nistz256_sqr_mont(res, p8);
-       for (i = 0; i < 7; i++)
-               ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(p16, res, p8);    /* ffff*p */
-
-       ecp_nistz256_sqr_mont(res, p16);
-       for (i = 0; i < 15; i++)
-               ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(p32, res, p16);   /* ffffffff*p */
-
-       ecp_nistz256_sqr_mont(res, p32);
-       for (i = 0; i < 31; i++)
-               ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(res, res, in);
-
-       for (i = 0; i < 32 * 4; i++)
-               ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(res, res, p32);
-
-       for (i = 0; i < 32; i++)
-               ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(res, res, p32);
-
-       for (i = 0; i < 16; i++)
-               ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(res, res, p16);
-
-       for (i = 0; i < 8; i++)
-               ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(res, res, p8);
-
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(res, res, p4);
-
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(res, res, p2);
-
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_sqr_mont(res, res);
-       ecp_nistz256_mul_mont(res, res, in);
-
-       memcpy(r, res, sizeof(res));
-}
-
-/*
- * ecp_nistz256_bignum_to_field_elem copies the contents of |in| to |out| and
- * returns one if it fits. Otherwise it returns zero.
- */
-static int
-ecp_nistz256_bignum_to_field_elem(BN_ULONG out[P256_LIMBS], const BIGNUM *in)
-{
-       if (in->top > P256_LIMBS)
-               return 0;
-
-       memset(out, 0, sizeof(BN_ULONG) * P256_LIMBS);
-       memcpy(out, in->d, sizeof(BN_ULONG) * in->top);
-       return 1;
-}
-
-/* r = sum(scalar[i]*point[i]) */
-static int
-ecp_nistz256_windowed_mul(const EC_GROUP *group, P256_POINT *r,
-    const BIGNUM **scalar, const EC_POINT **point, size_t num, BN_CTX *ctx)
-{
-       int ret = 0;
-       unsigned int i, j, index;
-       unsigned char (*p_str)[33] = NULL;
-       const unsigned int window_size = 5;
-       const unsigned int mask = (1 << (window_size + 1)) - 1;
-       unsigned int wvalue;
-       BN_ULONG tmp[P256_LIMBS];
-       /* avoid warning about ignored alignment for stack variable */
-#if defined(__GNUC__) && !defined(__OpenBSD__)
-       ALIGN32
-#endif
-       P256_POINT h;
-       const BIGNUM **scalars = NULL;
-       P256_POINT (*table)[16] = NULL;
-
-       if (posix_memalign((void **)&table, 64, num * sizeof(*table)) != 0 ||
-           (p_str = reallocarray(NULL, num, sizeof(*p_str))) == NULL ||
-           (scalars = reallocarray(NULL, num, sizeof(*scalars))) == NULL) {
-               ECerror(ERR_R_MALLOC_FAILURE);
-               goto err;
-       }
-
-       for (i = 0; i < num; i++) {
-               P256_POINT *row = table[i];
-
-               /*
-                * This is an unusual input, we don't guarantee
-                * constant-timeness.
-                */
-               if (BN_num_bits(scalar[i]) > 256 || BN_is_negative(scalar[i])) {
-                       BIGNUM *mod;
-
-                       if ((mod = BN_CTX_get(ctx)) == NULL)
-                               goto err;
-                       if (!BN_nnmod(mod, scalar[i], &group->order, ctx)) {
-                               ECerror(ERR_R_BN_LIB);
-                               goto err;
-                       }
-                       scalars[i] = mod;
-               } else
-                       scalars[i] = scalar[i];
-
-               for (j = 0; j < scalars[i]->top * BN_BYTES; j += BN_BYTES) {
-                       BN_ULONG d = scalars[i]->d[j / BN_BYTES];
-
-                       p_str[i][j + 0] = d & 0xff;
-                       p_str[i][j + 1] = (d >> 8) & 0xff;
-                       p_str[i][j + 2] = (d >> 16) & 0xff;
-                       p_str[i][j + 3] = (d >> 24) & 0xff;
-                       if (BN_BYTES == 8) {
-                               d >>= 32;
-                               p_str[i][j + 4] = d & 0xff;
-                               p_str[i][j + 5] = (d >> 8) & 0xff;
-                               p_str[i][j + 6] = (d >> 16) & 0xff;
-                               p_str[i][j + 7] = (d >> 24) & 0xff;
-                       }
-               }
-               for (; j < 33; j++)
-                       p_str[i][j] = 0;
-
-               /*
-                * table[0] is implicitly (0,0,0) (the point at infinity),
-                * therefore it is not stored. All other values are actually
-                * stored with an offset of -1 in table.
-                */
-
-               if (!ecp_nistz256_bignum_to_field_elem(row[1 - 1].X,
-                     &point[i]->X) ||
-                   !ecp_nistz256_bignum_to_field_elem(row[1 - 1].Y,
-                     &point[i]->Y) ||
-                   !ecp_nistz256_bignum_to_field_elem(row[1 - 1].Z,
-                     &point[i]->Z)) {
-                       ECerror(EC_R_COORDINATES_OUT_OF_RANGE);
-                       goto err;
-               }
-
-               ecp_nistz256_point_double(&row[ 2 - 1], &row[ 1 - 1]);
-               ecp_nistz256_point_add(&row[ 3 - 1], &row[ 2 - 1], &row[1 - 1]);
-               ecp_nistz256_point_double(&row[ 4 - 1], &row[ 2 - 1]);
-               ecp_nistz256_point_double(&row[ 6 - 1], &row[ 3 - 1]);
-               ecp_nistz256_point_double(&row[ 8 - 1], &row[ 4 - 1]);
-               ecp_nistz256_point_double(&row[12 - 1], &row[ 6 - 1]);
-               ecp_nistz256_point_add(&row[ 5 - 1], &row[ 4 - 1], &row[1 - 1]);
-               ecp_nistz256_point_add(&row[ 7 - 1], &row[ 6 - 1], &row[1 - 1]);
-               ecp_nistz256_point_add(&row[ 9 - 1], &row[ 8 - 1], &row[1 - 1]);
-               ecp_nistz256_point_add(&row[13 - 1], &row[12 - 1], &row[1 - 1]);
-               ecp_nistz256_point_double(&row[14 - 1], &row[ 7 - 1]);
-               ecp_nistz256_point_double(&row[10 - 1], &row[ 5 - 1]);
-               ecp_nistz256_point_add(&row[15 - 1], &row[14 - 1], &row[1 - 1]);
-               ecp_nistz256_point_add(&row[11 - 1], &row[10 - 1], &row[1 - 1]);
-               ecp_nistz256_point_add(&row[16 - 1], &row[15 - 1], &row[1 - 1]);
-       }
-
-       index = 255;
-
-       wvalue = p_str[0][(index - 1) / 8];
-       wvalue = (wvalue >> ((index - 1) % 8)) & mask;
-
-       ecp_nistz256_select_w5(r, table[0], _booth_recode_w5(wvalue) >> 1);
-
-       while (index >= 5) {
-               for (i = (index == 255 ? 1 : 0); i < num; i++) {
-                       unsigned int off = (index - 1) / 8;
-
-                       wvalue = p_str[i][off] | p_str[i][off + 1] << 8;
-                       wvalue = (wvalue >> ((index - 1) % 8)) & mask;
-
-                       wvalue = _booth_recode_w5(wvalue);
-
-                       ecp_nistz256_select_w5(&h, table[i], wvalue >> 1);
-
-                       ecp_nistz256_neg(tmp, h.Y);
-                       copy_conditional(h.Y, tmp, (wvalue & 1));
-
-                       ecp_nistz256_point_add(r, r, &h);
-               }
-
-               index -= window_size;
-
-               ecp_nistz256_point_double(r, r);
-               ecp_nistz256_point_double(r, r);
-               ecp_nistz256_point_double(r, r);
-               ecp_nistz256_point_double(r, r);
-               ecp_nistz256_point_double(r, r);
-       }
-
-       /* Final window */
-       for (i = 0; i < num; i++) {
-               wvalue = p_str[i][0];
-               wvalue = (wvalue << 1) & mask;
-
-               wvalue = _booth_recode_w5(wvalue);
-
-               ecp_nistz256_select_w5(&h, table[i], wvalue >> 1);
-
-               ecp_nistz256_neg(tmp, h.Y);
-               copy_conditional(h.Y, tmp, wvalue & 1);
-
-               ecp_nistz256_point_add(r, r, &h);
-       }
-
-       ret = 1;
- err:
-       free(table);
-       free(p_str);
-       free(scalars);
-       return ret;
-}
-
-/* Coordinates of G, for which we have precomputed tables */
-static const BN_ULONG def_xG[P256_LIMBS] = {
-       TOBN(0x79e730d4, 0x18a9143c), TOBN(0x75ba95fc, 0x5fedb601),
-       TOBN(0x79fb732b, 0x77622510), TOBN(0x18905f76, 0xa53755c6)
-};
-
-static const BN_ULONG def_yG[P256_LIMBS] = {
-       TOBN(0xddf25357, 0xce95560a), TOBN(0x8b4ab8e4, 0xba19e45c),
-       TOBN(0xd2e88688, 0xdd21f325), TOBN(0x8571ff18, 0x25885d85)
-};
-
-/*
- * ecp_nistz256_is_affine_G returns one if |generator| is the standard, P-256
- * generator.
- */
-static int
-ecp_nistz256_is_affine_G(const EC_POINT *generator)
-{
-       return generator->X.top == P256_LIMBS &&
-           generator->Y.top == P256_LIMBS &&
-           is_equal(generator->X.d, def_xG) &&
-           is_equal(generator->Y.d, def_yG) &&
-           is_one(&generator->Z);
-}
-
-static int
-ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
-{
-       /*
-        * We precompute a table for a Booth encoded exponent (wNAF) based
-        * computation. Each table holds 64 values for safe access, with an
-        * implicit value of infinity at index zero. We use a window of size 7,
-        * and therefore require ceil(256/7) = 37 tables.
-        */
-       EC_POINT *P = NULL, *T = NULL;
-       BN_CTX *new_ctx = NULL;
-       const EC_POINT *generator;
-       EC_PRE_COMP *ec_pre_comp;
-       BIGNUM *order;
-       int ret = 0;
-       unsigned int i, j, k;
-       PRECOMP256_ROW *precomp = NULL;
-
-       /* if there is an old EC_PRE_COMP object, throw it away */
-       EC_EX_DATA_free_data(&group->extra_data, ecp_nistz256_pre_comp_dup,
-           ecp_nistz256_pre_comp_free, ecp_nistz256_pre_comp_clear_free);
-
-       generator = EC_GROUP_get0_generator(group);
-       if (generator == NULL) {
-               ECerror(EC_R_UNDEFINED_GENERATOR);
-               return 0;
-       }
-
-       if (ecp_nistz256_is_affine_G(generator)) {
-               /*
-                * No need to calculate tables for the standard generator
-                * because we have them statically.
-                */
-               return 1;
-       }
-
-       if ((ec_pre_comp = ecp_nistz256_pre_comp_new(group)) == NULL)
-               return 0;
-
-       if (ctx == NULL) {
-               ctx = new_ctx = BN_CTX_new();
-               if (ctx == NULL)
-                       goto err;
-       }
-
-       BN_CTX_start(ctx);
-       order = BN_CTX_get(ctx);
-
-       if (order == NULL)
-               goto err;
-
-       if (!EC_GROUP_get_order(group, order, ctx))
-               goto err;
-
-       if (BN_is_zero(order)) {
-               ECerror(EC_R_UNKNOWN_ORDER);
-               goto err;
-       }
-
-       if (posix_memalign((void **)&precomp, 64, 37 * sizeof(*precomp)) != 0) {
-               ECerror(ERR_R_MALLOC_FAILURE);
-               goto err;
-       }
-
-       P = EC_POINT_new(group);
-       T = EC_POINT_new(group);
-       if (P == NULL || T == NULL)
-               goto err;
-
-       /*
-        * The zero entry is implicitly infinity, and we skip it, storing other
-        * values with -1 offset.
-        */
-       if (!EC_POINT_copy(T, generator))
-               goto err;
-
-       for (k = 0; k < 64; k++) {
-               if (!EC_POINT_copy(P, T))
-                       goto err;
-               for (j = 0; j < 37; j++) {
-                       /*
-                        * It would be faster to use EC_POINTs_make_affine and
-                        * make multiple points affine at the same time.
-                        */
-                       if (!EC_POINT_make_affine(group, P, ctx))
-                               goto err;
-                       if (!ecp_nistz256_bignum_to_field_elem(
-                             precomp[j][k].X, &P->X) ||
-                           !ecp_nistz256_bignum_to_field_elem(
-                             precomp[j][k].Y, &P->Y)) {
-                               ECerror(EC_R_COORDINATES_OUT_OF_RANGE);
-                               goto err;
-                       }
-                       for (i = 0; i < 7; i++) {
-                               if (!EC_POINT_dbl(group, P, P, ctx))
-                                       goto err;
-                       }
-               }
-               if (!EC_POINT_add(group, T, T, generator, ctx))
-                       goto err;
-       }
-
-       ec_pre_comp->group = group;
-       ec_pre_comp->w = 7;
-       ec_pre_comp->precomp = precomp;
-
-       if (!EC_EX_DATA_set_data(&group->extra_data, ec_pre_comp,
-           ecp_nistz256_pre_comp_dup, ecp_nistz256_pre_comp_free,
-           ecp_nistz256_pre_comp_clear_free)) {
-               goto err;
-       }
-
-       ec_pre_comp = NULL;
-       ret = 1;
-
- err:
-       if (ctx != NULL)
-               BN_CTX_end(ctx);
-       BN_CTX_free(new_ctx);
-
-       ecp_nistz256_pre_comp_free(ec_pre_comp);
-       free(precomp);
-       EC_POINT_free(P);
-       EC_POINT_free(T);
-       return ret;
-}
-
-static int
-ecp_nistz256_set_from_affine(EC_POINT *out, const EC_GROUP *group,
-    const P256_POINT_AFFINE *in, BN_CTX *ctx)
-{
-       BIGNUM x, y;
-       BN_ULONG d_x[P256_LIMBS], d_y[P256_LIMBS];
-       int ret = 0;
-
-       memcpy(d_x, in->X, sizeof(d_x));
-       x.d = d_x;
-       x.dmax = x.top = P256_LIMBS;
-       x.neg = 0;
-       x.flags = BN_FLG_STATIC_DATA;
-
-       memcpy(d_y, in->Y, sizeof(d_y));
-       y.d = d_y;
-       y.dmax = y.top = P256_LIMBS;
-       y.neg = 0;
-       y.flags = BN_FLG_STATIC_DATA;
-
-       ret = EC_POINT_set_affine_coordinates(group, out, &x, &y, ctx);
-
-       return ret;
-}
-
-/* r = scalar*G + sum(scalars[i]*points[i]) */
-static int
-ecp_nistz256_points_mul(const EC_GROUP *group, EC_POINT *r,
-    const BIGNUM *scalar, size_t num, const EC_POINT *points[],
-    const BIGNUM *scalars[], BN_CTX *ctx)
-{
-       int ret = 0, no_precomp_for_generator = 0, p_is_infinity = 0;
-       size_t j;
-       unsigned char p_str[33] = { 0 };
-       const PRECOMP256_ROW *precomp = NULL;
-       const EC_PRE_COMP *ec_pre_comp = NULL;
-       const EC_POINT *generator = NULL;
-       unsigned int i = 0, index = 0;
-       BN_CTX *new_ctx = NULL;
-       const BIGNUM **new_scalars = NULL;
-       const EC_POINT **new_points = NULL;
-       const unsigned int window_size = 7;
-       const unsigned int mask = (1 << (window_size + 1)) - 1;
-       unsigned int wvalue;
-       /* avoid warning about ignored alignment for stack variable */
-#if defined(__GNUC__) && !defined(__OpenBSD__)
-       ALIGN32
-#endif
-       union {
-               P256_POINT p;
-               P256_POINT_AFFINE a;
-       } t, p;
-       BIGNUM *tmp_scalar;
-
-       if (group->meth != r->meth) {
-               ECerror(EC_R_INCOMPATIBLE_OBJECTS);
-               return 0;
-       }
-
-       if (scalar == NULL && num == 0)
-               return EC_POINT_set_to_infinity(group, r);
-
-       for (j = 0; j < num; j++) {
-               if (group->meth != points[j]->meth) {
-                       ECerror(EC_R_INCOMPATIBLE_OBJECTS);
-                       return 0;
-               }
-       }
-
-       if (ctx == NULL) {
-               ctx = new_ctx = BN_CTX_new();
-               if (ctx == NULL)
-                       goto err;
-       }
-
-       BN_CTX_start(ctx);
-
-       if (scalar) {
-               generator = EC_GROUP_get0_generator(group);
-               if (generator == NULL) {
-                       ECerror(EC_R_UNDEFINED_GENERATOR);
-                       goto err;
-               }
-
-               /* look if we can use precomputed multiples of generator */
-               ec_pre_comp = EC_EX_DATA_get_data(group->extra_data,
-                   ecp_nistz256_pre_comp_dup, ecp_nistz256_pre_comp_free,
-                   ecp_nistz256_pre_comp_clear_free);
-               if (ec_pre_comp != NULL) {
-                       /*
-                        * If there is a precomputed table for the generator,
-                        * check that it was generated with the same generator.
-                        */
-                       EC_POINT *pre_comp_generator = EC_POINT_new(group);
-                       if (pre_comp_generator == NULL)
-                               goto err;
-
-                       if (!ecp_nistz256_set_from_affine(pre_comp_generator,
-                             group, ec_pre_comp->precomp[0], ctx)) {
-                               EC_POINT_free(pre_comp_generator);
-                               goto err;
-                       }
-
-                       if (0 == EC_POINT_cmp(group, generator,
-                             pre_comp_generator, ctx))
-                               precomp = (const PRECOMP256_ROW *)
-                                   ec_pre_comp->precomp;
-
-                       EC_POINT_free(pre_comp_generator);
-               }
-
-               if (precomp == NULL && ecp_nistz256_is_affine_G(generator)) {
-                       /*
-                        * If there is no precomputed data, but the generator
-                        * is the default, a hardcoded table of precomputed
-                        * data is used. This is because applications, such as
-                        * Apache, do not use EC_KEY_precompute_mult.
-                        */
-                       precomp =
-                           (const PRECOMP256_ROW *)ecp_nistz256_precomputed;
-               }
-
-               if (precomp) {
-                       if (BN_num_bits(scalar) > 256 ||
-                           BN_is_negative(scalar)) {
-                               if ((tmp_scalar = BN_CTX_get(ctx)) == NULL)
-                                       goto err;
-
-                               if (!BN_nnmod(tmp_scalar, scalar, &group->order,
-                                     ctx)) {
-                                       ECerror(ERR_R_BN_LIB);
-                                       goto err;
-                               }
-                               scalar = tmp_scalar;
-                       }
-
-                       for (i = 0; i < scalar->top * BN_BYTES; i += BN_BYTES) {
-                               BN_ULONG d = scalar->d[i / BN_BYTES];
-
-                               p_str[i + 0] = d & 0xff;
-                               p_str[i + 1] = (d >> 8) & 0xff;
-                               p_str[i + 2] = (d >> 16) & 0xff;
-                               p_str[i + 3] = (d >> 24) & 0xff;
-                               if (BN_BYTES == 8) {
-                                       d >>= 32;
-                                       p_str[i + 4] = d & 0xff;
-                                       p_str[i + 5] = (d >> 8) & 0xff;
-                                       p_str[i + 6] = (d >> 16) & 0xff;
-                                       p_str[i + 7] = (d >> 24) & 0xff;
-                               }
-                       }
-
-                       for (; i < 33; i++)
-                               p_str[i] = 0;
-
-                       /* First window */
-                       wvalue = (p_str[0] << 1) & mask;
-                       index += window_size;
-
-                       wvalue = _booth_recode_w7(wvalue);
-
-                       ecp_nistz256_select_w7(&p.a, precomp[0], wvalue >> 1);
-
-                       ecp_nistz256_neg(p.p.Z, p.p.Y);
-                       copy_conditional(p.p.Y, p.p.Z, wvalue & 1);
-
-                       /*
-                        * Since affine infinity is encoded as (0,0) and
-                        * Jacobian is (,,0), we need to harmonize them
-                        * by assigning "one" or zero to Z.
-                        */
-                       BN_ULONG infty;
-                       infty = (p.p.X[0] | p.p.X[1] | p.p.X[2] | p.p.X[3] |
-                                p.p.Y[0] | p.p.Y[1] | p.p.Y[2] | p.p.Y[3]);
-                       if (P256_LIMBS == 8)
-                               infty |=
-                                   (p.p.X[4] | p.p.X[5] | p.p.X[6] | p.p.X[7] |
-                                    p.p.Y[4] | p.p.Y[5] | p.p.Y[6] | p.p.Y[7]);
-
-                       infty = 0 - is_zero(infty);
-                       infty = ~infty;
-
-                       p.p.Z[0] = ONE[0] & infty;
-                       p.p.Z[1] = ONE[1] & infty;
-                       p.p.Z[2] = ONE[2] & infty;
-                       p.p.Z[3] = ONE[3] & infty;
-                       if (P256_LIMBS == 8) {
-                               p.p.Z[4] = ONE[4] & infty;
-                               p.p.Z[5] = ONE[5] & infty;
-                               p.p.Z[6] = ONE[6] & infty;
-                               p.p.Z[7] = ONE[7] & infty;
-                       }
-
-                       for (i = 1; i < 37; i++) {
-                               unsigned int off = (index - 1) / 8;
-                               wvalue = p_str[off] | p_str[off + 1] << 8;
-                               wvalue = (wvalue >> ((index - 1) % 8)) & mask;
-                               index += window_size;
-
-                               wvalue = _booth_recode_w7(wvalue);
-
-                               ecp_nistz256_select_w7(&t.a, precomp[i],
-                                   wvalue >> 1);
-
-                               ecp_nistz256_neg(t.p.Z, t.a.Y);
-                               copy_conditional(t.a.Y, t.p.Z, wvalue & 1);
-
-                               ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a);
-                       }
-               } else {
-                       p_is_infinity = 1;
-                       no_precomp_for_generator = 1;
-               }
-       } else
-               p_is_infinity = 1;
-
-       if (no_precomp_for_generator) {
-               /*
-                * Without a precomputed table for the generator, it has to be
-                * handled like a normal point.
-                */
-               new_scalars = reallocarray(NULL, num + 1, sizeof(BIGNUM *));
-               new_points = reallocarray(NULL, num + 1, sizeof(EC_POINT *));
-               if (new_scalars == NULL || new_points == NULL) {
-                       ECerror(ERR_R_MALLOC_FAILURE);
-                       goto err;
-               }
-
-               memcpy(new_scalars, scalars, num * sizeof(BIGNUM *));
-               new_scalars[num] = scalar;
-               memcpy(new_points, points, num * sizeof(EC_POINT *));
-               new_points[num] = generator;
-
-               scalars = new_scalars;
-               points = new_points;
-               num++;
-       }
-
-       if (num != 0) {
-               P256_POINT *out = &t.p;
-               if (p_is_infinity)
-                       out = &p.p;
-
-               if (!ecp_nistz256_windowed_mul(group, out, scalars, points, num,
-                     ctx))
-                       goto err;
-
-               if (!p_is_infinity)
-                       ecp_nistz256_point_add(&p.p, &p.p, out);
-       }
-
-       /* Not constant-time, but we're only operating on the public output. */
-       if (!ecp_nistz256_set_words(&r->X, p.p.X) ||
-           !ecp_nistz256_set_words(&r->Y, p.p.Y) ||
-           !ecp_nistz256_set_words(&r->Z, p.p.Z)) {
-               goto err;
-       }
-       r->Z_is_one = is_one(&r->Z) & 1;
-
-       ret = 1;
-
- err:
-       if (ctx)
-               BN_CTX_end(ctx);
-       BN_CTX_free(new_ctx);
-       free(new_points);
-       free(new_scalars);
-       return ret;
-}
-
-static int
-ecp_nistz256_get_affine(const EC_GROUP *group, const EC_POINT *point,
-    BIGNUM *x, BIGNUM *y, BN_CTX *ctx)
-{
-       BN_ULONG z_inv2[P256_LIMBS];
-       BN_ULONG z_inv3[P256_LIMBS];
-       BN_ULONG point_x[P256_LIMBS], point_y[P256_LIMBS], point_z[P256_LIMBS];
-
-       if (EC_POINT_is_at_infinity(group, point)) {
-               ECerror(EC_R_POINT_AT_INFINITY);
-               return 0;
-       }
-
-       if (!ecp_nistz256_bignum_to_field_elem(point_x, &point->X) ||
-           !ecp_nistz256_bignum_to_field_elem(point_y, &point->Y) ||
-           !ecp_nistz256_bignum_to_field_elem(point_z, &point->Z)) {
-               ECerror(EC_R_COORDINATES_OUT_OF_RANGE);
-               return 0;
-       }
-
-       ecp_nistz256_mod_inverse(z_inv3, point_z);
-       ecp_nistz256_sqr_mont(z_inv2, z_inv3);
-
-       /*
-        * Unlike the |BN_mod_mul_montgomery|-based implementation, we cannot
-        * factor out the two calls to |ecp_nistz256_from_mont| into one call,
-        * because |ecp_nistz256_from_mont| must be the last operation to
-        * ensure that the result is fully reduced mod P.
-        */
-       if (x != NULL) {
-               BN_ULONG x_aff[P256_LIMBS];
-               BN_ULONG x_ret[P256_LIMBS];
-
-               ecp_nistz256_mul_mont(x_aff, z_inv2, point_x);
-               ecp_nistz256_from_mont(x_ret, x_aff);
-               if (!ecp_nistz256_set_words(x, x_ret))
-                       return 0;
-       }
-
-       if (y != NULL) {
-               BN_ULONG y_aff[P256_LIMBS];
-               BN_ULONG y_ret[P256_LIMBS];
-
-               ecp_nistz256_mul_mont(z_inv3, z_inv3, z_inv2);
-               ecp_nistz256_mul_mont(y_aff, z_inv3, point_y);
-               ecp_nistz256_from_mont(y_ret, y_aff);
-               if (!ecp_nistz256_set_words(y, y_ret))
-                       return 0;
-       }
-
-       return 1;
-}
-
-static EC_PRE_COMP *
-ecp_nistz256_pre_comp_new(const EC_GROUP *group)
-{
-       EC_PRE_COMP *ret;
-
-       if (group == NULL)
-               return NULL;
-
-       ret = (EC_PRE_COMP *)malloc(sizeof(EC_PRE_COMP));
-       if (ret == NULL) {
-               ECerror(ERR_R_MALLOC_FAILURE);
-               return ret;
-       }
-
-       ret->group = group;
-       ret->w = 6;             /* default */
-       ret->precomp = NULL;
-       ret->references = 1;
-       return ret;
-}
-
-static void *
-ecp_nistz256_pre_comp_dup(void *src_)
-{
-       EC_PRE_COMP *src = src_;
-
-       /* no need to actually copy, these objects never change! */
-       CRYPTO_add(&src->references, 1, CRYPTO_LOCK_EC_PRE_COMP);
-
-       return src_;
-}
-
-static void
-ecp_nistz256_pre_comp_free(void *pre_)
-{
-       int i;
-       EC_PRE_COMP *pre = pre_;
-
-       if (pre == NULL)
-               return;
-
-       i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
-       if (i > 0)
-               return;
-
-       free(pre->precomp);
-       free(pre);
-}
-
-static void
-ecp_nistz256_pre_comp_clear_free(void *pre_)
-{
-       int i;
-       EC_PRE_COMP *pre = pre_;
-
-       if (pre == NULL)
-               return;
-
-       i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
-       if (i > 0)
-               return;
-
-       if (pre->precomp != NULL) {
-               /*
-                * LSSL XXX
-                * The original OpenSSL code uses an obfuscated
-                * computation which is intended to be
-                *   37 * (1 << pre->w) * sizeof(P256_POINT_AFFINE)
-                * here, but the only place where we allocate this uses
-                * PRECOMP256_ROW (i.e. 64 P256_POINT_AFFINE) but sets w == 7.
-                */
-               freezero(pre->precomp, 37 * sizeof(PRECOMP256_ROW));
-       }
-       freezero(pre, sizeof *pre);
-}
-
-static int
-ecp_nistz256_window_have_precompute_mult(const EC_GROUP *group)
-{
-       /* There is a hard-coded table for the default generator. */
-       const EC_POINT *generator = EC_GROUP_get0_generator(group);
-       if (generator != NULL && ecp_nistz256_is_affine_G(generator)) {
-               /* There is a hard-coded table for the default generator. */
-               return 1;
-       }
-
-       return
-           EC_EX_DATA_get_data(group->extra_data, ecp_nistz256_pre_comp_dup,
-             ecp_nistz256_pre_comp_free, ecp_nistz256_pre_comp_clear_free) !=
-           NULL;
-}
-
-const EC_METHOD *
-EC_GFp_nistz256_method(void)
-{
-       static const EC_METHOD ret = {
-               .flags = EC_FLAGS_DEFAULT_OCT,
-               .field_type = NID_X9_62_prime_field,
-               .group_init = ec_GFp_mont_group_init,
-               .group_finish = ec_GFp_mont_group_finish,
-               .group_clear_finish = ec_GFp_mont_group_clear_finish,
-               .group_copy = ec_GFp_mont_group_copy,
-               .group_set_curve = ec_GFp_mont_group_set_curve,
-               .group_get_curve = ec_GFp_simple_group_get_curve,
-               .group_get_degree = ec_GFp_simple_group_get_degree,
-               .group_order_bits = ec_group_simple_order_bits,
-               .group_check_discriminant =
-                   ec_GFp_simple_group_check_discriminant,
-               .point_init = ec_GFp_simple_point_init,
-               .point_finish = ec_GFp_simple_point_finish,
-               .point_clear_finish = ec_GFp_simple_point_clear_finish,
-               .point_copy = ec_GFp_simple_point_copy,
-               .point_set_to_infinity = ec_GFp_simple_point_set_to_infinity,
-               .point_set_Jprojective_coordinates =
-                   ec_GFp_simple_set_Jprojective_coordinates,
-               .point_get_Jprojective_coordinates =
-                   ec_GFp_simple_get_Jprojective_coordinates,
-               .point_set_affine_coordinates =
-                   ec_GFp_simple_point_set_affine_coordinates,
-               .point_get_affine_coordinates = ecp_nistz256_get_affine,
-               .add = ec_GFp_simple_add,
-               .dbl = ec_GFp_simple_dbl,
-               .invert = ec_GFp_simple_invert,
-               .is_at_infinity = ec_GFp_simple_is_at_infinity,
-               .is_on_curve = ec_GFp_simple_is_on_curve,
-               .point_cmp = ec_GFp_simple_cmp,
-               .make_affine = ec_GFp_simple_make_affine,
-               .points_make_affine = ec_GFp_simple_points_make_affine,
-               .mul = ecp_nistz256_points_mul,
-               .precompute_mult = ecp_nistz256_mult_precompute,
-               .have_precompute_mult =
-                   ecp_nistz256_window_have_precompute_mult,
-               .field_mul = ec_GFp_mont_field_mul,
-               .field_sqr = ec_GFp_mont_field_sqr,
-               .field_encode = ec_GFp_mont_field_encode,
-               .field_decode = ec_GFp_mont_field_decode,
-               .field_set_to_one = ec_GFp_mont_field_set_to_one,
-               .blind_coordinates = NULL,
-       };
-
-       return &ret;
-}
diff --git a/lib/libcrypto/ec/ecp_nistz256_table.h b/lib/libcrypto/ec/ecp_nistz256_table.h
deleted file mode 100644 (file)
index 6aa74ed..0000000
+++ /dev/null
@@ -1,9557 +0,0 @@
-/*     $OpenBSD: ecp_nistz256_table.h,v 1.2 2016/12/21 15:49:29 jsing Exp $    */
-/* Copyright (c) 2015, Intel Inc.
- *
- * Permission to use, copy, modify, and/or distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
- * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
- * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
-
-/* This is the precomputed constant time access table for the code in
- * ecp_nistz256.c, for the default generator. The table consists of 37
- * subtables, each subtable contains 64 affine points. The affine points are
- * encoded as eight uint64's, four for the x coordinate and four for the y.
- * Both values are in little-endian order. There are 37 tables because a
- * signed, 6-bit wNAF form of the scalar is used and ceil(256/(6 + 1)) = 37.
- * Within each table there are 64 values because the 6-bit wNAF value can take
- * 64 values, ignoring the sign bit, which is implemented by performing a
- * negation of the affine point when required. We would like to align it to 2MB
- * in order to increase the chances of using a large page but that appears to
- * lead to invalid ELF files being produced. */
-
-__BEGIN_HIDDEN_DECLS
-
-#if defined(__GNUC__)
-__attribute((aligned(4096)))
-#elif defined(_MSC_VER)
-__declspec(align(4096))
-#elif defined(__SUNPRO_C)
-# pragma align 4096(ecp_nistz256_precomputed)
-#endif
-static const BN_ULONG
-ecp_nistz256_precomputed
-    [37][64 * sizeof(P256_POINT_AFFINE) / sizeof(BN_ULONG)] =
-{
-        {TOBN(0x79e730d4, 0x18a9143c), TOBN(0x75ba95fc, 0x5fedb601),
-         TOBN(0x79fb732b, 0x77622510), TOBN(0x18905f76, 0xa53755c6),
-         TOBN(0xddf25357, 0xce95560a), TOBN(0x8b4ab8e4, 0xba19e45c),
-         TOBN(0xd2e88688, 0xdd21f325), TOBN(0x8571ff18, 0x25885d85),
-         TOBN(0x850046d4, 0x10ddd64d), TOBN(0xaa6ae3c1, 0xa433827d),
-         TOBN(0x73220503, 0x8d1490d9), TOBN(0xf6bb32e4, 0x3dcf3a3b),
-         TOBN(0x2f3648d3, 0x61bee1a5), TOBN(0x152cd7cb, 0xeb236ff8),
-         TOBN(0x19a8fb0e, 0x92042dbe), TOBN(0x78c57751, 0x0a5b8a3b),
-         TOBN(0xffac3f90, 0x4eebc127), TOBN(0xb027f84a, 0x087d81fb),
-         TOBN(0x66ad77dd, 0x87cbbc98), TOBN(0x26936a3f, 0xb6ff747e),
-         TOBN(0xb04c5c1f, 0xc983a7eb), TOBN(0x583e47ad, 0x0861fe1a),
-         TOBN(0x78820831, 0x1a2ee98e), TOBN(0xd5f06a29, 0xe587cc07),
-         TOBN(0x74b0b50d, 0x46918dcc), TOBN(0x4650a6ed, 0xc623c173),
-         TOBN(0x0cdaacac, 0xe8100af2), TOBN(0x577362f5, 0x41b0176b),
-         TOBN(0x2d96f24c, 0xe4cbaba6), TOBN(0x17628471, 0xfad6f447),
-         TOBN(0x6b6c36de, 0xe5ddd22e), TOBN(0x84b14c39, 0x4c5ab863),
-         TOBN(0xbe1b8aae, 0xc45c61f5), TOBN(0x90ec649a, 0x94b9537d),
-         TOBN(0x941cb5aa, 0xd076c20c), TOBN(0xc9079605, 0x890523c8),
-         TOBN(0xeb309b4a, 0xe7ba4f10), TOBN(0x73c568ef, 0xe5eb882b),
-         TOBN(0x3540a987, 0x7e7a1f68), TOBN(0x73a076bb, 0x2dd1e916),
-         TOBN(0x40394737, 0x3e77664a), TOBN(0x55ae744f, 0x346cee3e),
-         TOBN(0xd50a961a, 0x5b17a3ad), TOBN(0x13074b59, 0x54213673),
-         TOBN(0x93d36220, 0xd377e44b), TOBN(0x299c2b53, 0xadff14b5),
-         TOBN(0xf424d44c, 0xef639f11), TOBN(0xa4c9916d, 0x4a07f75f),
-         TOBN(0x0746354e, 0xa0173b4f), TOBN(0x2bd20213, 0xd23c00f7),
-         TOBN(0xf43eaab5, 0x0c23bb08), TOBN(0x13ba5119, 0xc3123e03),
-         TOBN(0x2847d030, 0x3f5b9d4d), TOBN(0x6742f2f2, 0x5da67bdd),
-         TOBN(0xef933bdc, 0x77c94195), TOBN(0xeaedd915, 0x6e240867),
-         TOBN(0x27f14cd1, 0x9499a78f), TOBN(0x462ab5c5, 0x6f9b3455),
-         TOBN(0x8f90f02a, 0xf02cfc6b), TOBN(0xb763891e, 0xb265230d),
-         TOBN(0xf59da3a9, 0x532d4977), TOBN(0x21e3327d, 0xcf9eba15),
-         TOBN(0x123c7b84, 0xbe60bbf0), TOBN(0x56ec12f2, 0x7706df76),
-         TOBN(0x75c96e8f, 0x264e20e8), TOBN(0xabe6bfed, 0x59a7a841),
-         TOBN(0x2cc09c04, 0x44c8eb00), TOBN(0xe05b3080, 0xf0c4e16b),
-         TOBN(0x1eb7777a, 0xa45f3314), TOBN(0x56af7bed, 0xce5d45e3),
-         TOBN(0x2b6e019a, 0x88b12f1a), TOBN(0x086659cd, 0xfd835f9b),
-         TOBN(0x2c18dbd1, 0x9dc21ec8), TOBN(0x98f9868a, 0x0fcf8139),
-         TOBN(0x737d2cd6, 0x48250b49), TOBN(0xcc61c947, 0x24b3428f),
-         TOBN(0x0c2b4078, 0x80dd9e76), TOBN(0xc43a8991, 0x383fbe08),
-         TOBN(0x5f7d2d65, 0x779be5d2), TOBN(0x78719a54, 0xeb3b4ab5),
-         TOBN(0xea7d260a, 0x6245e404), TOBN(0x9de40795, 0x6e7fdfe0),
-         TOBN(0x1ff3a415, 0x8dac1ab5), TOBN(0x3e7090f1, 0x649c9073),
-         TOBN(0x1a768561, 0x2b944e88), TOBN(0x250f939e, 0xe57f61c8),
-         TOBN(0x0c0daa89, 0x1ead643d), TOBN(0x68930023, 0xe125b88e),
-         TOBN(0x04b71aa7, 0xd2697768), TOBN(0xabdedef5, 0xca345a33),
-         TOBN(0x2409d29d, 0xee37385e), TOBN(0x4ee1df77, 0xcb83e156),
-         TOBN(0x0cac12d9, 0x1cbb5b43), TOBN(0x170ed2f6, 0xca895637),
-         TOBN(0x28228cfa, 0x8ade6d66), TOBN(0x7ff57c95, 0x53238aca),
-         TOBN(0xccc42563, 0x4b2ed709), TOBN(0x0e356769, 0x856fd30d),
-         TOBN(0xbcbcd43f, 0x559e9811), TOBN(0x738477ac, 0x5395b759),
-         TOBN(0x35752b90, 0xc00ee17f), TOBN(0x68748390, 0x742ed2e3),
-         TOBN(0x7cd06422, 0xbd1f5bc1), TOBN(0xfbc08769, 0xc9e7b797),
-         TOBN(0xa242a35b, 0xb0cf664a), TOBN(0x126e48f7, 0x7f9707e3),
-         TOBN(0x1717bf54, 0xc6832660), TOBN(0xfaae7332, 0xfd12c72e),
-         TOBN(0x27b52db7, 0x995d586b), TOBN(0xbe29569e, 0x832237c2),
-         TOBN(0xe8e4193e, 0x2a65e7db), TOBN(0x152706dc, 0x2eaa1bbb),
-         TOBN(0x72bcd8b7, 0xbc60055b), TOBN(0x03cc23ee, 0x56e27e4b),
-         TOBN(0xee337424, 0xe4819370), TOBN(0xe2aa0e43, 0x0ad3da09),
-         TOBN(0x40b8524f, 0x6383c45d), TOBN(0xd7663554, 0x42a41b25),
-         TOBN(0x64efa6de, 0x778a4797), TOBN(0x2042170a, 0x7079adf4),
-         TOBN(0x808b0b65, 0x0bc6fb80), TOBN(0x5882e075, 0x3ffe2e6b),
-         TOBN(0xd5ef2f7c, 0x2c83f549), TOBN(0x54d63c80, 0x9103b723),
-         TOBN(0xf2f11bd6, 0x52a23f9b), TOBN(0x3670c319, 0x4b0b6587),
-         TOBN(0x55c4623b, 0xb1580e9e), TOBN(0x64edf7b2, 0x01efe220),
-         TOBN(0x97091dcb, 0xd53c5c9d), TOBN(0xf17624b6, 0xac0a177b),
-         TOBN(0xb0f13975, 0x2cfe2dff), TOBN(0xc1a35c0a, 0x6c7a574e),
-         TOBN(0x227d3146, 0x93e79987), TOBN(0x0575bf30, 0xe89cb80e),
-         TOBN(0x2f4e247f, 0x0d1883bb), TOBN(0xebd51226, 0x3274c3d0),
-         TOBN(0x5f3e51c8, 0x56ada97a), TOBN(0x4afc964d, 0x8f8b403e),
-         TOBN(0xa6f247ab, 0x412e2979), TOBN(0x675abd1b, 0x6f80ebda),
-         TOBN(0x66a2bd72, 0x5e485a1d), TOBN(0x4b2a5caf, 0x8f4f0b3c),
-         TOBN(0x2626927f, 0x1b847bba), TOBN(0x6c6fc7d9, 0x0502394d),
-         TOBN(0xfea912ba, 0xa5659ae8), TOBN(0x68363aba, 0x25e1a16e),
-         TOBN(0xb8842277, 0x752c41ac), TOBN(0xfe545c28, 0x2897c3fc),
-         TOBN(0x2d36e9e7, 0xdc4c696b), TOBN(0x5806244a, 0xfba977c5),
-         TOBN(0x85665e9b, 0xe39508c1), TOBN(0xf720ee25, 0x6d12597b),
-         TOBN(0x8a979129, 0xd2337a31), TOBN(0x5916868f, 0x0f862bdc),
-         TOBN(0x048099d9, 0x5dd283ba), TOBN(0xe2d1eeb6, 0xfe5bfb4e),
-         TOBN(0x82ef1c41, 0x7884005d), TOBN(0xa2d4ec17, 0xffffcbae),
-         TOBN(0x9161c53f, 0x8aa95e66), TOBN(0x5ee104e1, 0xc5fee0d0),
-         TOBN(0x562e4cec, 0xc135b208), TOBN(0x74e1b265, 0x4783f47d),
-         TOBN(0x6d2a506c, 0x5a3f3b30), TOBN(0xecead9f4, 0xc16762fc),
-         TOBN(0xf29dd4b2, 0xe286e5b9), TOBN(0x1b0fadc0, 0x83bb3c61),
-         TOBN(0x7a75023e, 0x7fac29a4), TOBN(0xc086d5f1, 0xc9477fa3),
-         TOBN(0x0fc61135, 0x2f6f3076), TOBN(0xc99ffa23, 0xe3912a9a),
-         TOBN(0x6a0b0685, 0xd2f8ba3d), TOBN(0xfdc777e8, 0xe93358a4),
-         TOBN(0x94a787bb, 0x35415f04), TOBN(0x640c2d6a, 0x4d23fea4),
-         TOBN(0x9de917da, 0x153a35b5), TOBN(0x793e8d07, 0x5d5cd074),
-         TOBN(0xf4f87653, 0x2de45068), TOBN(0x37c7a7e8, 0x9e2e1f6e),
-         TOBN(0xd0825fa2, 0xa3584069), TOBN(0xaf2cea7c, 0x1727bf42),
-         TOBN(0x0360a4fb, 0x9e4785a9), TOBN(0xe5fda49c, 0x27299f4a),
-         TOBN(0x48068e13, 0x71ac2f71), TOBN(0x83d0687b, 0x9077666f),
-         TOBN(0x6d3883b2, 0x15d02819), TOBN(0x6d0d7550, 0x40dd9a35),
-         TOBN(0x61d7cbf9, 0x1d2b469f), TOBN(0xf97b232f, 0x2efc3115),
-         TOBN(0xa551d750, 0xb24bcbc7), TOBN(0x11ea4949, 0x88a1e356),
-         TOBN(0x7669f031, 0x93cb7501), TOBN(0x595dc55e, 0xca737b8a),
-         TOBN(0xa4a319ac, 0xd837879f), TOBN(0x6fc1b49e, 0xed6b67b0),
-         TOBN(0xe3959933, 0x32f1f3af), TOBN(0x966742eb, 0x65432a2e),
-         TOBN(0x4b8dc9fe, 0xb4966228), TOBN(0x96cc6312, 0x43f43950),
-         TOBN(0x12068859, 0xc9b731ee), TOBN(0x7b948dc3, 0x56f79968),
-         TOBN(0x61e4ad32, 0xed1f8008), TOBN(0xe6c9267a, 0xd8b17538),
-         TOBN(0x1ac7c5eb, 0x857ff6fb), TOBN(0x994baaa8, 0x55f2fb10),
-         TOBN(0x84cf14e1, 0x1d248018), TOBN(0x5a39898b, 0x628ac508),
-         TOBN(0x14fde97b, 0x5fa944f5), TOBN(0xed178030, 0xd12e5ac7),
-         TOBN(0x042c2af4, 0x97e2feb4), TOBN(0xd36a42d7, 0xaebf7313),
-         TOBN(0x49d2c9eb, 0x084ffdd7), TOBN(0x9f8aa54b, 0x2ef7c76a),
-         TOBN(0x9200b7ba, 0x09895e70), TOBN(0x3bd0c66f, 0xddb7fb58),
-         TOBN(0x2d97d108, 0x78eb4cbb), TOBN(0x2d431068, 0xd84bde31),
-         TOBN(0x4b523eb7, 0x172ccd1f), TOBN(0x7323cb28, 0x30a6a892),
-         TOBN(0x97082ec0, 0xcfe153eb), TOBN(0xe97f6b6a, 0xf2aadb97),
-         TOBN(0x1d3d393e, 0xd1a83da1), TOBN(0xa6a7f9c7, 0x804b2a68),
-         TOBN(0x4a688b48, 0x2d0cb71e), TOBN(0xa9b4cc5f, 0x40585278),
-         TOBN(0x5e5db46a, 0xcb66e132), TOBN(0xf1be963a, 0x0d925880),
-         TOBN(0x944a7027, 0x0317b9e2), TOBN(0xe266f959, 0x48603d48),
-         TOBN(0x98db6673, 0x5c208899), TOBN(0x90472447, 0xa2fb18a3),
-         TOBN(0x8a966939, 0x777c619f), TOBN(0x3798142a, 0x2a3be21b),
-         TOBN(0xb4241cb1, 0x3298b343), TOBN(0xa3a14e49, 0xb44f65a1),
-         TOBN(0xc5f4d6cd, 0x3ac77acd), TOBN(0xd0288cb5, 0x52b6fc3c),
-         TOBN(0xd5cc8c2f, 0x1c040abc), TOBN(0xb675511e, 0x06bf9b4a),
-         TOBN(0xd667da37, 0x9b3aa441), TOBN(0x460d45ce, 0x51601f72),
-         TOBN(0xe2f73c69, 0x6755ff89), TOBN(0xdd3cf7e7, 0x473017e6),
-         TOBN(0x8ef5689d, 0x3cf7600d), TOBN(0x948dc4f8, 0xb1fc87b4),
-         TOBN(0xd9e9fe81, 0x4ea53299), TOBN(0x2d921ca2, 0x98eb6028),
-         TOBN(0xfaecedfd, 0x0c9803fc), TOBN(0xf38ae891, 0x4d7b4745),
-         TOBN(0xd8c5fccf, 0xc5e3a3d8), TOBN(0xbefd904c, 0x4079dfbf),
-         TOBN(0xbc6d6a58, 0xfead0197), TOBN(0x39227077, 0x695532a4),
-         TOBN(0x09e23e6d, 0xdbef42f5), TOBN(0x7e449b64, 0x480a9908),
-         TOBN(0x7b969c1a, 0xad9a2e40), TOBN(0x6231d792, 0x9591c2a4),
-         TOBN(0x87151456, 0x0f664534), TOBN(0x85ceae7c, 0x4b68f103),
-         TOBN(0xac09c4ae, 0x65578ab9), TOBN(0x33ec6868, 0xf044b10c),
-         TOBN(0x6ac4832b, 0x3a8ec1f1), TOBN(0x5509d128, 0x5847d5ef),
-         TOBN(0xf909604f, 0x763f1574), TOBN(0xb16c4303, 0xc32f63c4),
-         TOBN(0xb6ab2014, 0x7ca23cd3), TOBN(0xcaa7a5c6, 0xa391849d),
-         TOBN(0x5b0673a3, 0x75678d94), TOBN(0xc982ddd4, 0xdd303e64),
-         TOBN(0xfd7b000b, 0x5db6f971), TOBN(0xbba2cb1f, 0x6f876f92),
-         TOBN(0xc77332a3, 0x3c569426), TOBN(0xa159100c, 0x570d74f8),
-         TOBN(0xfd16847f, 0xdec67ef5), TOBN(0x742ee464, 0x233e76b7),
-         TOBN(0x0b8e4134, 0xefc2b4c8), TOBN(0xca640b86, 0x42a3e521),
-         TOBN(0x653a0190, 0x8ceb6aa9), TOBN(0x313c300c, 0x547852d5),
-         TOBN(0x24e4ab12, 0x6b237af7), TOBN(0x2ba90162, 0x8bb47af8),
-         TOBN(0x3d5e58d6, 0xa8219bb7), TOBN(0xc691d0bd, 0x1b06c57f),
-         TOBN(0x0ae4cb10, 0xd257576e), TOBN(0x3569656c, 0xd54a3dc3),
-         TOBN(0xe5ebaebd, 0x94cda03a), TOBN(0x934e82d3, 0x162bfe13),
-         TOBN(0x450ac0ba, 0xe251a0c6), TOBN(0x480b9e11, 0xdd6da526),
-         TOBN(0x00467bc5, 0x8cce08b5), TOBN(0xb636458c, 0x7f178d55),
-         TOBN(0xc5748bae, 0xa677d806), TOBN(0x2763a387, 0xdfa394eb),
-         TOBN(0xa12b448a, 0x7d3cebb6), TOBN(0xe7adda3e, 0x6f20d850),
-         TOBN(0xf63ebce5, 0x1558462c), TOBN(0x58b36143, 0x620088a8),
-         TOBN(0x8a2cc3ca, 0x4d63c0ee), TOBN(0x51233117, 0x0fe948ce),
-         TOBN(0x7463fd85, 0x222ef33b), TOBN(0xadf0c7dc, 0x7c603d6c),
-         TOBN(0x0ec32d3b, 0xfe7765e5), TOBN(0xccaab359, 0xbf380409),
-         TOBN(0xbdaa84d6, 0x8e59319c), TOBN(0xd9a4c280, 0x9c80c34d),
-         TOBN(0xa9d89488, 0xa059c142), TOBN(0x6f5ae714, 0xff0b9346),
-         TOBN(0x068f237d, 0x16fb3664), TOBN(0x5853e4c4, 0x363186ac),
-         TOBN(0xe2d87d23, 0x63c52f98), TOBN(0x2ec4a766, 0x81828876),
-         TOBN(0x47b864fa, 0xe14e7b1c), TOBN(0x0c0bc0e5, 0x69192408),
-         TOBN(0xe4d7681d, 0xb82e9f3e), TOBN(0x83200f0b, 0xdf25e13c),
-         TOBN(0x8909984c, 0x66f27280), TOBN(0x462d7b00, 0x75f73227),
-         TOBN(0xd90ba188, 0xf2651798), TOBN(0x74c6e18c, 0x36ab1c34),
-         TOBN(0xab256ea3, 0x5ef54359), TOBN(0x03466612, 0xd1aa702f),
-         TOBN(0x624d6049, 0x2ed22e91), TOBN(0x6fdfe0b5, 0x6f072822),
-         TOBN(0xeeca1115, 0x39ce2271), TOBN(0x98100a4f, 0xdb01614f),
-         TOBN(0xb6b0daa2, 0xa35c628f), TOBN(0xb6f94d2e, 0xc87e9a47),
-         TOBN(0xc6773259, 0x1d57d9ce), TOBN(0xf70bfeec, 0x03884a7b),
-         TOBN(0x5fb35ccf, 0xed2bad01), TOBN(0xa155cbe3, 0x1da6a5c7),
-         TOBN(0xc2e2594c, 0x30a92f8f), TOBN(0x649c89ce, 0x5bfafe43),
-         TOBN(0xd158667d, 0xe9ff257a), TOBN(0x9b359611, 0xf32c50ae),
-         TOBN(0x4b00b20b, 0x906014cf), TOBN(0xf3a8cfe3, 0x89bc7d3d),
-         TOBN(0x4ff23ffd, 0x248a7d06), TOBN(0x80c5bfb4, 0x878873fa),
-         TOBN(0xb7d9ad90, 0x05745981), TOBN(0x179c85db, 0x3db01994),
-         TOBN(0xba41b062, 0x61a6966c), TOBN(0x4d82d052, 0xeadce5a8),
-         TOBN(0x9e91cd3b, 0xa5e6a318), TOBN(0x47795f4f, 0x95b2dda0),
-         TOBN(0xecfd7c1f, 0xd55a897c), TOBN(0x009194ab, 0xb29110fb),
-         TOBN(0x5f0e2046, 0xe381d3b0), TOBN(0x5f3425f6, 0xa98dd291),
-         TOBN(0xbfa06687, 0x730d50da), TOBN(0x0423446c, 0x4b083b7f),
-         TOBN(0x397a247d, 0xd69d3417), TOBN(0xeb629f90, 0x387ba42a),
-         TOBN(0x1ee426cc, 0xd5cd79bf), TOBN(0x0032940b, 0x946c6e18),
-         TOBN(0x1b1e8ae0, 0x57477f58), TOBN(0xe94f7d34, 0x6d823278),
-         TOBN(0xc747cb96, 0x782ba21a), TOBN(0xc5254469, 0xf72b33a5),
-         TOBN(0x772ef6de, 0xc7f80c81), TOBN(0xd73acbfe, 0x2cd9e6b5),
-         TOBN(0x4075b5b1, 0x49ee90d9), TOBN(0x785c339a, 0xa06e9eba),
-         TOBN(0xa1030d5b, 0xabf825e0), TOBN(0xcec684c3, 0xa42931dc),
-         TOBN(0x42ab62c9, 0xc1586e63), TOBN(0x45431d66, 0x5ab43f2b),
-         TOBN(0x57c8b2c0, 0x55f7835d), TOBN(0x033da338, 0xc1b7f865),
-         TOBN(0x283c7513, 0xcaa76097), TOBN(0x0a624fa9, 0x36c83906),
-         TOBN(0x6b20afec, 0x715af2c7), TOBN(0x4b969974, 0xeba78bfd),
-         TOBN(0x220755cc, 0xd921d60e), TOBN(0x9b944e10, 0x7baeca13),
-         TOBN(0x04819d51, 0x5ded93d4), TOBN(0x9bbff86e, 0x6dddfd27),
-         TOBN(0x6b344130, 0x77adc612), TOBN(0xa7496529, 0xbbd803a0),
-         TOBN(0x1a1baaa7, 0x6d8805bd), TOBN(0xc8403902, 0x470343ad),
-         TOBN(0x39f59f66, 0x175adff1), TOBN(0x0b26d7fb, 0xb7d8c5b7),
-         TOBN(0xa875f5ce, 0x529d75e3), TOBN(0x85efc7e9, 0x41325cc2),
-         TOBN(0x21950b42, 0x1ff6acd3), TOBN(0xffe70484, 0x53dc6909),
-         TOBN(0xff4cd0b2, 0x28766127), TOBN(0xabdbe608, 0x4fb7db2b),
-         TOBN(0x837c9228, 0x5e1109e8), TOBN(0x26147d27, 0xf4645b5a),
-         TOBN(0x4d78f592, 0xf7818ed8), TOBN(0xd394077e, 0xf247fa36),
-         TOBN(0x0fb9c2d0, 0x488c171a), TOBN(0xa78bfbaa, 0x13685278),
-         TOBN(0xedfbe268, 0xd5b1fa6a), TOBN(0x0dceb8db, 0x2b7eaba7),
-         TOBN(0xbf9e8089, 0x9ae2b710), TOBN(0xefde7ae6, 0xa4449c96),
-         TOBN(0x43b7716b, 0xcc143a46), TOBN(0xd7d34194, 0xc3628c13),
-         TOBN(0x508cec1c, 0x3b3f64c9), TOBN(0xe20bc0ba, 0x1e5edf3f),
-         TOBN(0xda1deb85, 0x2f4318d4), TOBN(0xd20ebe0d, 0x5c3fa443),
-         TOBN(0x370b4ea7, 0x73241ea3), TOBN(0x61f1511c, 0x5e1a5f65),
-         TOBN(0x99a5e23d, 0x82681c62), TOBN(0xd731e383, 0xa2f54c2d),
-         TOBN(0x2692f36e, 0x83445904), TOBN(0x2e0ec469, 0xaf45f9c0),
-         TOBN(0x905a3201, 0xc67528b7), TOBN(0x88f77f34, 0xd0e5e542),
-         TOBN(0xf67a8d29, 0x5864687c), TOBN(0x23b92eae, 0x22df3562),
-         TOBN(0x5c27014b, 0x9bbec39e), TOBN(0x7ef2f226, 0x9c0f0f8d),
-         TOBN(0x97359638, 0x546c4d8d), TOBN(0x5f9c3fc4, 0x92f24679),
-         TOBN(0x912e8bed, 0xa8c8acd9), TOBN(0xec3a318d, 0x306634b0),
-         TOBN(0x80167f41, 0xc31cb264), TOBN(0x3db82f6f, 0x522113f2),
-         TOBN(0xb155bcd2, 0xdcafe197), TOBN(0xfba1da59, 0x43465283),
-         TOBN(0xa0425b8e, 0xb212cf53), TOBN(0x4f2e512e, 0xf8557c5f),
-         TOBN(0xc1286ff9, 0x25c4d56c), TOBN(0xbb8a0fea, 0xee26c851),
-         TOBN(0xc28f70d2, 0xe7d6107e), TOBN(0x7ee0c444, 0xe76265aa),
-         TOBN(0x3df277a4, 0x1d1936b1), TOBN(0x1a556e3f, 0xea9595eb),
-         TOBN(0x258bbbf9, 0xe7305683), TOBN(0x31eea5bf, 0x07ef5be6),
-         TOBN(0x0deb0e4a, 0x46c814c1), TOBN(0x5cee8449, 0xa7b730dd),
-         TOBN(0xeab495c5, 0xa0182bde), TOBN(0xee759f87, 0x9e27a6b4),
-         TOBN(0xc2cf6a68, 0x80e518ca), TOBN(0x25e8013f, 0xf14cf3f4),
-         TOBN(0x8fc44140, 0x7e8d7a14), TOBN(0xbb1ff3ca, 0x9556f36a),
-         TOBN(0x6a844385, 0x14600044), TOBN(0xba3f0c4a, 0x7451ae63),
-         TOBN(0xdfcac25b, 0x1f9af32a), TOBN(0x01e0db86, 0xb1f2214b),
-         TOBN(0x4e9a5bc2, 0xa4b596ac), TOBN(0x83927681, 0x026c2c08),
-         TOBN(0x3ec832e7, 0x7acaca28), TOBN(0x1bfeea57, 0xc7385b29),
-         TOBN(0x068212e3, 0xfd1eaf38), TOBN(0xc1329830, 0x6acf8ccc),
-         TOBN(0xb909f2db, 0x2aac9e59), TOBN(0x5748060d, 0xb661782a),
-         TOBN(0xc5ab2632, 0xc79b7a01), TOBN(0xda44c6c6, 0x00017626),
-         TOBN(0xf26c00e8, 0xa7ea82f0), TOBN(0x99cac80d, 0xe4299aaf),
-         TOBN(0xd66fe3b6, 0x7ed78be1), TOBN(0x305f725f, 0x648d02cd),
-         TOBN(0x33ed1bc4, 0x623fb21b), TOBN(0xfa70533e, 0x7a6319ad),
-         TOBN(0x17ab562d, 0xbe5ffb3e), TOBN(0x06374994, 0x56674741),
-         TOBN(0x69d44ed6, 0x5c46aa8e), TOBN(0x2100d5d3, 0xa8d063d1),
-         TOBN(0xcb9727ea, 0xa2d17c36), TOBN(0x4c2bab1b, 0x8add53b7),
-         TOBN(0xa084e90c, 0x15426704), TOBN(0x778afcd3, 0xa837ebea),
-         TOBN(0x6651f701, 0x7ce477f8), TOBN(0xa0624998, 0x46fb7a8b),
-         TOBN(0xdc1e6828, 0xed8a6e19), TOBN(0x33fc2336, 0x4189d9c7),
-         TOBN(0x026f8fe2, 0x671c39bc), TOBN(0xd40c4ccd, 0xbc6f9915),
-         TOBN(0xafa135bb, 0xf80e75ca), TOBN(0x12c651a0, 0x22adff2c),
-         TOBN(0xc40a04bd, 0x4f51ad96), TOBN(0x04820109, 0xbbe4e832),
-         TOBN(0x3667eb1a, 0x7f4c04cc), TOBN(0x59556621, 0xa9404f84),
-         TOBN(0x71cdf653, 0x7eceb50a), TOBN(0x994a44a6, 0x9b8335fa),
-         TOBN(0xd7faf819, 0xdbeb9b69), TOBN(0x473c5680, 0xeed4350d),
-         TOBN(0xb6658466, 0xda44bba2), TOBN(0x0d1bc780, 0x872bdbf3),
-         TOBN(0xe535f175, 0xa1962f91), TOBN(0x6ed7e061, 0xed58f5a7),
-         TOBN(0x177aa4c0, 0x2089a233), TOBN(0x0dbcb03a, 0xe539b413),
-         TOBN(0xe3dc424e, 0xbb32e38e), TOBN(0x6472e5ef, 0x6806701e),
-         TOBN(0xdd47ff98, 0x814be9ee), TOBN(0x6b60cfff, 0x35ace009),
-         TOBN(0xb8d3d931, 0x9ff91fe5), TOBN(0x039c4800, 0xf0518eed),
-         TOBN(0x95c37632, 0x9182cb26), TOBN(0x0763a434, 0x82fc568d),
-         TOBN(0x707c04d5, 0x383e76ba), TOBN(0xac98b930, 0x824e8197),
-         TOBN(0x92bf7c8f, 0x91230de0), TOBN(0x90876a01, 0x40959b70),
-         TOBN(0xdb6d96f3, 0x05968b80), TOBN(0x380a0913, 0x089f73b9),
-         TOBN(0x7da70b83, 0xc2c61e01), TOBN(0x95fb8394, 0x569b38c7),
-         TOBN(0x9a3c6512, 0x80edfe2f), TOBN(0x8f726bb9, 0x8faeaf82),
-         TOBN(0x8010a4a0, 0x78424bf8), TOBN(0x29672044, 0x0e844970)},
-        {TOBN(0x63c5cb81, 0x7a2ad62a), TOBN(0x7ef2b6b9, 0xac62ff54),
-         TOBN(0x3749bba4, 0xb3ad9db5), TOBN(0xad311f2c, 0x46d5a617),
-         TOBN(0xb77a8087, 0xc2ff3b6d), TOBN(0xb46feaf3, 0x367834ff),
-         TOBN(0xf8aa266d, 0x75d6b138), TOBN(0xfa38d320, 0xec008188),
-         TOBN(0x486d8ffa, 0x696946fc), TOBN(0x50fbc6d8, 0xb9cba56d),
-         TOBN(0x7e3d423e, 0x90f35a15), TOBN(0x7c3da195, 0xc0dd962c),
-         TOBN(0xe673fdb0, 0x3cfd5d8b), TOBN(0x0704b7c2, 0x889dfca5),
-         TOBN(0xf6ce581f, 0xf52305aa), TOBN(0x399d49eb, 0x914d5e53),
-         TOBN(0x380a496d, 0x6ec293cd), TOBN(0x733dbda7, 0x8e7051f5),
-         TOBN(0x037e388d, 0xb849140a), TOBN(0xee4b32b0, 0x5946dbf6),
-         TOBN(0xb1c4fda9, 0xcae368d1), TOBN(0x5001a7b0, 0xfdb0b2f3),
-         TOBN(0x6df59374, 0x2e3ac46e), TOBN(0x4af675f2, 0x39b3e656),
-         TOBN(0x44e38110, 0x39949296), TOBN(0x5b63827b, 0x361db1b5),
-         TOBN(0x3e5323ed, 0x206eaff5), TOBN(0x942370d2, 0xc21f4290),
-         TOBN(0xf2caaf2e, 0xe0d985a1), TOBN(0x192cc64b, 0x7239846d),
-         TOBN(0x7c0b8f47, 0xae6312f8), TOBN(0x7dc61f91, 0x96620108),
-         TOBN(0xb830fb5b, 0xc2da7de9), TOBN(0xd0e643df, 0x0ff8d3be),
-         TOBN(0x31ee77ba, 0x188a9641), TOBN(0x4e8aa3aa, 0xbcf6d502),
-         TOBN(0xf9fb6532, 0x9a49110f), TOBN(0xd18317f6, 0x2dd6b220),
-         TOBN(0x7e3ced41, 0x52c3ea5a), TOBN(0x0d296a14, 0x7d579c4a),
-         TOBN(0x35d6a53e, 0xed4c3717), TOBN(0x9f8240cf, 0x3d0ed2a3),
-         TOBN(0x8c0d4d05, 0xe5543aa5), TOBN(0x45d5bbfb, 0xdd33b4b4),
-         TOBN(0xfa04cc73, 0x137fd28e), TOBN(0x862ac6ef, 0xc73b3ffd),
-         TOBN(0x403ff9f5, 0x31f51ef2), TOBN(0x34d5e0fc, 0xbc73f5a2),
-         TOBN(0xf2526820, 0x08913f4f), TOBN(0xea20ed61, 0xeac93d95),
-         TOBN(0x51ed38b4, 0x6ca6b26c), TOBN(0x8662dcbc, 0xea4327b0),
-         TOBN(0x6daf295c, 0x725d2aaa), TOBN(0xbad2752f, 0x8e52dcda),
-         TOBN(0x2210e721, 0x0b17dacc), TOBN(0xa37f7912, 0xd51e8232),
-         TOBN(0x4f7081e1, 0x44cc3add), TOBN(0xd5ffa1d6, 0x87be82cf),
-         TOBN(0x89890b6c, 0x0edd6472), TOBN(0xada26e1a, 0x3ed17863),
-         TOBN(0x276f2715, 0x63483caa), TOBN(0xe6924cd9, 0x2f6077fd),
-         TOBN(0x05a7fe98, 0x0a466e3c), TOBN(0xf1c794b0, 0xb1902d1f),
-         TOBN(0xe5213688, 0x82a8042c), TOBN(0xd931cfaf, 0xcd278298),
-         TOBN(0x069a0ae0, 0xf597a740), TOBN(0x0adbb3f3, 0xeb59107c),
-         TOBN(0x983e951e, 0x5eaa8eb8), TOBN(0xe663a8b5, 0x11b48e78),
-         TOBN(0x1631cc0d, 0x8a03f2c5), TOBN(0x7577c11e, 0x11e271e2),
-         TOBN(0x33b2385c, 0x08369a90), TOBN(0x2990c59b, 0x190eb4f8),
-         TOBN(0x819a6145, 0xc68eac80), TOBN(0x7a786d62, 0x2ec4a014),
-         TOBN(0x33faadbe, 0x20ac3a8d), TOBN(0x31a21781, 0x5aba2d30),
-         TOBN(0x209d2742, 0xdba4f565), TOBN(0xdb2ce9e3, 0x55aa0fbb),
-         TOBN(0x8cef334b, 0x168984df), TOBN(0xe81dce17, 0x33879638),
-         TOBN(0xf6e6949c, 0x263720f0), TOBN(0x5c56feaf, 0xf593cbec),
-         TOBN(0x8bff5601, 0xfde58c84), TOBN(0x74e24117, 0x2eccb314),
-         TOBN(0xbcf01b61, 0x4c9a8a78), TOBN(0xa233e35e, 0x544c9868),
-         TOBN(0xb3156bf3, 0x8bd7aff1), TOBN(0x1b5ee4cb, 0x1d81b146),
-         TOBN(0x7ba1ac41, 0xd628a915), TOBN(0x8f3a8f9c, 0xfd89699e),
-         TOBN(0x7329b9c9, 0xa0748be7), TOBN(0x1d391c95, 0xa92e621f),
-         TOBN(0xe51e6b21, 0x4d10a837), TOBN(0xd255f53a, 0x4947b435),
-         TOBN(0x07669e04, 0xf1788ee3), TOBN(0xc14f27af, 0xa86938a2),
-         TOBN(0x8b47a334, 0xe93a01c0), TOBN(0xff627438, 0xd9366808),
-         TOBN(0x7a0985d8, 0xca2a5965), TOBN(0x3d9a5542, 0xd6e9b9b3),
-         TOBN(0xc23eb80b, 0x4cf972e8), TOBN(0x5c1c33bb, 0x4fdf72fd),
-         TOBN(0x0c4a58d4, 0x74a86108), TOBN(0xf8048a8f, 0xee4c5d90),
-         TOBN(0xe3c7c924, 0xe86d4c80), TOBN(0x28c889de, 0x056a1e60),
-         TOBN(0x57e2662e, 0xb214a040), TOBN(0xe8c48e98, 0x37e10347),
-         TOBN(0x87742862, 0x80ac748a), TOBN(0xf1c24022, 0x186b06f2),
-         TOBN(0xac2dd4c3, 0x5f74040a), TOBN(0x409aeb71, 0xfceac957),
-         TOBN(0x4fbad782, 0x55c4ec23), TOBN(0xb359ed61, 0x8a7b76ec),
-         TOBN(0x12744926, 0xed6f4a60), TOBN(0xe21e8d7f, 0x4b912de3),
-         TOBN(0xe2575a59, 0xfc705a59), TOBN(0x72f1d4de, 0xed2dbc0e),
-         TOBN(0x3d2b24b9, 0xeb7926b8), TOBN(0xbff88cb3, 0xcdbe5509),
-         TOBN(0xd0f399af, 0xe4dd640b), TOBN(0x3c5fe130, 0x2f76ed45),
-         TOBN(0x6f3562f4, 0x3764fb3d), TOBN(0x7b5af318, 0x3151b62d),
-         TOBN(0xd5bd0bc7, 0xd79ce5f3), TOBN(0xfdaf6b20, 0xec66890f),
-         TOBN(0x735c67ec, 0x6063540c), TOBN(0x50b259c2, 0xe5f9cb8f),
-         TOBN(0xb8734f9a, 0x3f99c6ab), TOBN(0xf8cc13d5, 0xa3a7bc85),
-         TOBN(0x80c1b305, 0xc5217659), TOBN(0xfe5364d4, 0x4ec12a54),
-         TOBN(0xbd87045e, 0x681345fe), TOBN(0x7f8efeb1, 0x582f897f),
-         TOBN(0xe8cbf1e5, 0xd5923359), TOBN(0xdb0cea9d, 0x539b9fb0),
-         TOBN(0x0c5b34cf, 0x49859b98), TOBN(0x5e583c56, 0xa4403cc6),
-         TOBN(0x11fc1a2d, 0xd48185b7), TOBN(0xc93fbc7e, 0x6e521787),
-         TOBN(0x47e7a058, 0x05105b8b), TOBN(0x7b4d4d58, 0xdb8260c8),
-         TOBN(0xe33930b0, 0x46eb842a), TOBN(0x8e844a9a, 0x7bdae56d),
-         TOBN(0x34ef3a9e, 0x13f7fdfc), TOBN(0xb3768f82, 0x636ca176),
-         TOBN(0x2821f4e0, 0x4e09e61c), TOBN(0x414dc3a1, 0xa0c7cddc),
-         TOBN(0xd5379437, 0x54945fcd), TOBN(0x151b6eef, 0xb3555ff1),
-         TOBN(0xb31bd613, 0x6339c083), TOBN(0x39ff8155, 0xdfb64701),
-         TOBN(0x7c3388d2, 0xe29604ab), TOBN(0x1e19084b, 0xa6b10442),
-         TOBN(0x17cf54c0, 0xeccd47ef), TOBN(0x89693385, 0x4a5dfb30),
-         TOBN(0x69d023fb, 0x47daf9f6), TOBN(0x9222840b, 0x7d91d959),
-         TOBN(0x439108f5, 0x803bac62), TOBN(0x0b7dd91d, 0x379bd45f),
-         TOBN(0xd651e827, 0xca63c581), TOBN(0x5c5d75f6, 0x509c104f),
-         TOBN(0x7d5fc738, 0x1f2dc308), TOBN(0x20faa7bf, 0xd98454be),
-         TOBN(0x95374bee, 0xa517b031), TOBN(0xf036b9b1, 0x642692ac),
-         TOBN(0xc5106109, 0x39842194), TOBN(0xb7e2353e, 0x49d05295),
-         TOBN(0xfc8c1d5c, 0xefb42ee0), TOBN(0xe04884eb, 0x08ce811c),
-         TOBN(0xf1f75d81, 0x7419f40e), TOBN(0x5b0ac162, 0xa995c241),
-         TOBN(0x120921bb, 0xc4c55646), TOBN(0x713520c2, 0x8d33cf97),
-         TOBN(0xb4a65a5c, 0xe98c5100), TOBN(0x6cec871d, 0x2ddd0f5a),
-         TOBN(0x251f0b7f, 0x9ba2e78b), TOBN(0x224a8434, 0xce3a2a5f),
-         TOBN(0x26827f61, 0x25f5c46f), TOBN(0x6a22bedc, 0x48545ec0),
-         TOBN(0x25ae5fa0, 0xb1bb5cdc), TOBN(0xd693682f, 0xfcb9b98f),
-         TOBN(0x32027fe8, 0x91e5d7d3), TOBN(0xf14b7d17, 0x73a07678),
-         TOBN(0xf88497b3, 0xc0dfdd61), TOBN(0xf7c2eec0, 0x2a8c4f48),
-         TOBN(0xaa5573f4, 0x3756e621), TOBN(0xc013a240, 0x1825b948),
-         TOBN(0x1c03b345, 0x63878572), TOBN(0xa0472bea, 0x653a4184),
-         TOBN(0xf4222e27, 0x0ac69a80), TOBN(0x34096d25, 0xf51e54f6),
-         TOBN(0x00a648cb, 0x8fffa591), TOBN(0x4e87acdc, 0x69b6527f),
-         TOBN(0x0575e037, 0xe285ccb4), TOBN(0x188089e4, 0x50ddcf52),
-         TOBN(0xaa96c9a8, 0x870ff719), TOBN(0x74a56cd8, 0x1fc7e369),
-         TOBN(0x41d04ee2, 0x1726931a), TOBN(0x0bbbb2c8, 0x3660ecfd),
-         TOBN(0xa6ef6de5, 0x24818e18), TOBN(0xe421cc51, 0xe7d57887),
-         TOBN(0xf127d208, 0xbea87be6), TOBN(0x16a475d3, 0xb1cdd682),
-         TOBN(0x9db1b684, 0x439b63f7), TOBN(0x5359b3db, 0xf0f113b6),
-         TOBN(0xdfccf1de, 0x8bf06e31), TOBN(0x1fdf8f44, 0xdd383901),
-         TOBN(0x10775cad, 0x5017e7d2), TOBN(0xdfc3a597, 0x58d11eef),
-         TOBN(0x6ec9c8a0, 0xb1ecff10), TOBN(0xee6ed6cc, 0x28400549),
-         TOBN(0xb5ad7bae, 0x1b4f8d73), TOBN(0x61b4f11d, 0xe00aaab9),
-         TOBN(0x7b32d69b, 0xd4eff2d7), TOBN(0x88ae6771, 0x4288b60f),
-         TOBN(0x159461b4, 0x37a1e723), TOBN(0x1f3d4789, 0x570aae8c),
-         TOBN(0x869118c0, 0x7f9871da), TOBN(0x35fbda78, 0xf635e278),
-         TOBN(0x738f3641, 0xe1541dac), TOBN(0x6794b13a, 0xc0dae45f),
-         TOBN(0x065064ac, 0x09cc0917), TOBN(0x27c53729, 0xc68540fd),
-         TOBN(0x0d2d4c8e, 0xef227671), TOBN(0xd23a9f80, 0xa1785a04),
-         TOBN(0x98c59528, 0x52650359), TOBN(0xfa09ad01, 0x74a1acad),
-         TOBN(0x082d5a29, 0x0b55bf5c), TOBN(0xa40f1c67, 0x419b8084),
-         TOBN(0x3a5c752e, 0xdcc18770), TOBN(0x4baf1f2f, 0x8825c3a5),
-         TOBN(0xebd63f74, 0x21b153ed), TOBN(0xa2383e47, 0xb2f64723),
-         TOBN(0xe7bf620a, 0x2646d19a), TOBN(0x56cb44ec, 0x03c83ffd),
-         TOBN(0xaf7267c9, 0x4f6be9f1), TOBN(0x8b2dfd7b, 0xc06bb5e9),
-         TOBN(0xb87072f2, 0xa672c5c7), TOBN(0xeacb11c8, 0x0d53c5e2),
-         TOBN(0x22dac29d, 0xff435932), TOBN(0x37bdb99d, 0x4408693c),
-         TOBN(0xf6e62fb6, 0x2899c20f), TOBN(0x3535d512, 0x447ece24),
-         TOBN(0xfbdc6b88, 0xff577ce3), TOBN(0x726693bd, 0x190575f2),
-         TOBN(0x6772b0e5, 0xab4b35a2), TOBN(0x1d8b6001, 0xf5eeaacf),
-         TOBN(0x728f7ce4, 0x795b9580), TOBN(0x4a20ed2a, 0x41fb81da),
-         TOBN(0x9f685cd4, 0x4fec01e6), TOBN(0x3ed7ddcc, 0xa7ff50ad),
-         TOBN(0x460fd264, 0x0c2d97fd), TOBN(0x3a241426, 0xeb82f4f9),
-         TOBN(0x17d1df2c, 0x6a8ea820), TOBN(0xb2b50d3b, 0xf22cc254),
-         TOBN(0x03856cba, 0xb7291426), TOBN(0x87fd26ae, 0x04f5ee39),
-         TOBN(0x9cb696cc, 0x02bee4ba), TOBN(0x53121804, 0x06820fd6),
-         TOBN(0xa5dfc269, 0x0212e985), TOBN(0x666f7ffa, 0x160f9a09),
-         TOBN(0xc503cd33, 0xbccd9617), TOBN(0x365dede4, 0xba7730a3),
-         TOBN(0x798c6355, 0x5ddb0786), TOBN(0xa6c3200e, 0xfc9cd3bc),
-         TOBN(0x060ffb2c, 0xe5e35efd), TOBN(0x99a4e25b, 0x5555a1c1),
-         TOBN(0x11d95375, 0xf70b3751), TOBN(0x0a57354a, 0x160e1bf6),
-         TOBN(0xecb3ae4b, 0xf8e4b065), TOBN(0x07a834c4, 0x2e53022b),
-         TOBN(0x1cd300b3, 0x8692ed96), TOBN(0x16a6f792, 0x61ee14ec),
-         TOBN(0x8f1063c6, 0x6a8649ed), TOBN(0xfbcdfcfe, 0x869f3e14),
-         TOBN(0x2cfb97c1, 0x00a7b3ec), TOBN(0xcea49b3c, 0x7130c2f1),
-         TOBN(0x462d044f, 0xe9d96488), TOBN(0x4b53d52e, 0x8182a0c1),
-         TOBN(0x84b6ddd3, 0x0391e9e9), TOBN(0x80ab7b48, 0xb1741a09),
-         TOBN(0xec0e15d4, 0x27d3317f), TOBN(0x8dfc1ddb, 0x1a64671e),
-         TOBN(0x93cc5d5f, 0xd49c5b92), TOBN(0xc995d53d, 0x3674a331),
-         TOBN(0x302e41ec, 0x090090ae), TOBN(0x2278a0cc, 0xedb06830),
-         TOBN(0x1d025932, 0xfbc99690), TOBN(0x0c32fbd2, 0xb80d68da),
-         TOBN(0xd79146da, 0xf341a6c1), TOBN(0xae0ba139, 0x1bef68a0),
-         TOBN(0xc6b8a563, 0x8d774b3a), TOBN(0x1cf307bd, 0x880ba4d7),
-         TOBN(0xc033bdc7, 0x19803511), TOBN(0xa9f97b3b, 0x8888c3be),
-         TOBN(0x3d68aebc, 0x85c6d05e), TOBN(0xc3b88a9d, 0x193919eb),
-         TOBN(0x2d300748, 0xc48b0ee3), TOBN(0x7506bc7c, 0x07a746c1),
-         TOBN(0xfc48437c, 0x6e6d57f3), TOBN(0x5bd71587, 0xcfeaa91a),
-         TOBN(0xa4ed0408, 0xc1bc5225), TOBN(0xd0b946db, 0x2719226d),
-         TOBN(0x109ecd62, 0x758d2d43), TOBN(0x75c8485a, 0x2751759b),
-         TOBN(0xb0b75f49, 0x9ce4177a), TOBN(0x4fa61a1e, 0x79c10c3d),
-         TOBN(0xc062d300, 0xa167fcd7), TOBN(0x4df3874c, 0x750f0fa8),
-         TOBN(0x29ae2cf9, 0x83dfedc9), TOBN(0xf8437134, 0x8d87631a),
-         TOBN(0xaf571711, 0x7429c8d2), TOBN(0x18d15867, 0x146d9272),
-         TOBN(0x83053ecf, 0x69769bb7), TOBN(0xc55eb856, 0xc479ab82),
-         TOBN(0x5ef7791c, 0x21b0f4b2), TOBN(0xaa5956ba, 0x3d491525),
-         TOBN(0x407a96c2, 0x9fe20eba), TOBN(0xf27168bb, 0xe52a5ad3),
-         TOBN(0x43b60ab3, 0xbf1d9d89), TOBN(0xe45c51ef, 0x710e727a),
-         TOBN(0xdfca5276, 0x099b4221), TOBN(0x8dc6407c, 0x2557a159),
-         TOBN(0x0ead8335, 0x91035895), TOBN(0x0a9db957, 0x9c55dc32),
-         TOBN(0xe40736d3, 0xdf61bc76), TOBN(0x13a619c0, 0x3f778cdb),
-         TOBN(0x6dd921a4, 0xc56ea28f), TOBN(0x76a52433, 0x2fa647b4),
-         TOBN(0x23591891, 0xac5bdc5d), TOBN(0xff4a1a72, 0xbac7dc01),
-         TOBN(0x9905e261, 0x62df8453), TOBN(0x3ac045df, 0xe63b265f),
-         TOBN(0x8a3f341b, 0xad53dba7), TOBN(0x8ec269cc, 0x837b625a),
-         TOBN(0xd71a2782, 0x3ae31189), TOBN(0x8fb4f9a3, 0x55e96120),
-         TOBN(0x804af823, 0xff9875cf), TOBN(0x23224f57, 0x5d442a9b),
-         TOBN(0x1c4d3b9e, 0xecc62679), TOBN(0x91da22fb, 0xa0e7ddb1),
-         TOBN(0xa370324d, 0x6c04a661), TOBN(0x9710d3b6, 0x5e376d17),
-         TOBN(0xed8c98f0, 0x3044e357), TOBN(0xc364ebbe, 0x6422701c),
-         TOBN(0x347f5d51, 0x7733d61c), TOBN(0xd55644b9, 0xcea826c3),
-         TOBN(0x80c6e0ad, 0x55a25548), TOBN(0x0aa7641d, 0x844220a7),
-         TOBN(0x1438ec81, 0x31810660), TOBN(0x9dfa6507, 0xde4b4043),
-         TOBN(0x10b515d8, 0xcc3e0273), TOBN(0x1b6066dd, 0x28d8cfb2),
-         TOBN(0xd3b04591, 0x9c9efebd), TOBN(0x425d4bdf, 0xa21c1ff4),
-         TOBN(0x5fe5af19, 0xd57607d3), TOBN(0xbbf773f7, 0x54481084),
-         TOBN(0x8435bd69, 0x94b03ed1), TOBN(0xd9ad1de3, 0x634cc546),
-         TOBN(0x2cf423fc, 0x00e420ca), TOBN(0xeed26d80, 0xa03096dd),
-         TOBN(0xd7f60be7, 0xa4db09d2), TOBN(0xf47f569d, 0x960622f7),
-         TOBN(0xe5925fd7, 0x7296c729), TOBN(0xeff2db26, 0x26ca2715),
-         TOBN(0xa6fcd014, 0xb913e759), TOBN(0x53da4786, 0x8ff4de93),
-         TOBN(0x14616d79, 0xc32068e1), TOBN(0xb187d664, 0xccdf352e),
-         TOBN(0xf7afb650, 0x1dc90b59), TOBN(0x8170e943, 0x7daa1b26),
-         TOBN(0xc8e3bdd8, 0x700c0a84), TOBN(0x6e8d345f, 0x6482bdfa),
-         TOBN(0x84cfbfa1, 0xc5c5ea50), TOBN(0xd3baf14c, 0x67960681),
-         TOBN(0x26398403, 0x0dd50942), TOBN(0xe4b7839c, 0x4716a663),
-         TOBN(0xd5f1f794, 0xe7de6dc0), TOBN(0x5cd0f4d4, 0x622aa7ce),
-         TOBN(0x5295f3f1, 0x59acfeec), TOBN(0x8d933552, 0x953e0607),
-         TOBN(0xc7db8ec5, 0x776c5722), TOBN(0xdc467e62, 0x2b5f290c),
-         TOBN(0xd4297e70, 0x4ff425a9), TOBN(0x4be924c1, 0x0cf7bb72),
-         TOBN(0x0d5dc5ae, 0xa1892131), TOBN(0x8bf8a8e3, 0xa705c992),
-         TOBN(0x73a0b064, 0x7a305ac5), TOBN(0x00c9ca4e, 0x9a8c77a8),
-         TOBN(0x5dfee80f, 0x83774bdd), TOBN(0x63131602, 0x85734485),
-         TOBN(0xa1b524ae, 0x914a69a9), TOBN(0xebc2ffaf, 0xd4e300d7),
-         TOBN(0x52c93db7, 0x7cfa46a5), TOBN(0x71e6161f, 0x21653b50),
-         TOBN(0x3574fc57, 0xa4bc580a), TOBN(0xc09015dd, 0xe1bc1253),
-         TOBN(0x4b7b47b2, 0xd174d7aa), TOBN(0x4072d8e8, 0xf3a15d04),
-         TOBN(0xeeb7d47f, 0xd6fa07ed), TOBN(0x6f2b9ff9, 0xedbdafb1),
-         TOBN(0x18c51615, 0x3760fe8a), TOBN(0x7a96e6bf, 0xf06c6c13),
-         TOBN(0x4d7a0410, 0x0ea2d071), TOBN(0xa1914e9b, 0x0be2a5ce),
-         TOBN(0x5726e357, 0xd8a3c5cf), TOBN(0x1197ecc3, 0x2abb2b13),
-         TOBN(0x6c0d7f7f, 0x31ae88dd), TOBN(0x15b20d1a, 0xfdbb3efe),
-         TOBN(0xcd06aa26, 0x70584039), TOBN(0x2277c969, 0xa7dc9747),
-         TOBN(0xbca69587, 0x7855d815), TOBN(0x899ea238, 0x5188b32a),
-         TOBN(0x37d9228b, 0x760c1c9d), TOBN(0xc7efbb11, 0x9b5c18da),
-         TOBN(0x7f0d1bc8, 0x19f6dbc5), TOBN(0x4875384b, 0x07e6905b),
-         TOBN(0xc7c50baa, 0x3ba8cd86), TOBN(0xb0ce40fb, 0xc2905de0),
-         TOBN(0x70840673, 0x7a231952), TOBN(0xa912a262, 0xcf43de26),
-         TOBN(0x9c38ddcc, 0xeb5b76c1), TOBN(0x746f5285, 0x26fc0ab4),
-         TOBN(0x52a63a50, 0xd62c269f), TOBN(0x60049c55, 0x99458621),
-         TOBN(0xe7f48f82, 0x3c2f7c9e), TOBN(0x6bd99043, 0x917d5cf3),
-         TOBN(0xeb1317a8, 0x8701f469), TOBN(0xbd3fe2ed, 0x9a449fe0),
-         TOBN(0x421e79ca, 0x12ef3d36), TOBN(0x9ee3c36c, 0x3e7ea5de),
-         TOBN(0xe48198b5, 0xcdff36f7), TOBN(0xaff4f967, 0xc6b82228),
-         TOBN(0x15e19dd0, 0xc47adb7e), TOBN(0x45699b23, 0x032e7dfa),
-         TOBN(0x40680c8b, 0x1fae026a), TOBN(0x5a347a48, 0x550dbf4d),
-         TOBN(0xe652533b, 0x3cef0d7d), TOBN(0xd94f7b18, 0x2bbb4381),
-         TOBN(0x838752be, 0x0e80f500), TOBN(0x8e6e2488, 0x9e9c9bfb),
-         TOBN(0xc9751697, 0x16caca6a), TOBN(0x866c49d8, 0x38531ad9),
-         TOBN(0xc917e239, 0x7151ade1), TOBN(0x2d016ec1, 0x6037c407),
-         TOBN(0xa407ccc9, 0x00eac3f9), TOBN(0x835f6280, 0xe2ed4748),
-         TOBN(0xcc54c347, 0x1cc98e0d), TOBN(0x0e969937, 0xdcb572eb),
-         TOBN(0x1b16c8e8, 0x8f30c9cb), TOBN(0xa606ae75, 0x373c4661),
-         TOBN(0x47aa689b, 0x35502cab), TOBN(0xf89014ae, 0x4d9bb64f),
-         TOBN(0x202f6a9c, 0x31c71f7b), TOBN(0x01f95aa3, 0x296ffe5c),
-         TOBN(0x5fc06014, 0x53cec3a3), TOBN(0xeb991237, 0x5f498a45),
-         TOBN(0xae9a935e, 0x5d91ba87), TOBN(0xc6ac6281, 0x0b564a19),
-         TOBN(0x8a8fe81c, 0x3bd44e69), TOBN(0x7c8b467f, 0x9dd11d45),
-         TOBN(0xf772251f, 0xea5b8e69), TOBN(0xaeecb3bd, 0xc5b75fbc),
-         TOBN(0x1aca3331, 0x887ff0e5), TOBN(0xbe5d49ff, 0x19f0a131),
-         TOBN(0x582c13aa, 0xe5c8646f), TOBN(0xdbaa12e8, 0x20e19980),
-         TOBN(0x8f40f31a, 0xf7abbd94), TOBN(0x1f13f5a8, 0x1dfc7663),
-         TOBN(0x5d81f1ee, 0xaceb4fc0), TOBN(0x36256002, 0x5e6f0f42),
-         TOBN(0x4b67d6d7, 0x751370c8), TOBN(0x2608b698, 0x03e80589),
-         TOBN(0xcfc0d2fc, 0x05268301), TOBN(0xa6943d39, 0x40309212),
-         TOBN(0x192a90c2, 0x1fd0e1c2), TOBN(0xb209f113, 0x37f1dc76),
-         TOBN(0xefcc5e06, 0x97bf1298), TOBN(0xcbdb6730, 0x219d639e),
-         TOBN(0xd009c116, 0xb81e8c6f), TOBN(0xa3ffdde3, 0x1a7ce2e5),
-         TOBN(0xc53fbaaa, 0xa914d3ba), TOBN(0x836d500f, 0x88df85ee),
-         TOBN(0xd98dc71b, 0x66ee0751), TOBN(0x5a3d7005, 0x714516fd),
-         TOBN(0x21d3634d, 0x39eedbba), TOBN(0x35cd2e68, 0x0455a46d),
-         TOBN(0xc8cafe65, 0xf9d7eb0c), TOBN(0xbda3ce9e, 0x00cefb3e),
-         TOBN(0xddc17a60, 0x2c9cf7a4), TOBN(0x01572ee4, 0x7bcb8773),
-         TOBN(0xa92b2b01, 0x8c7548df), TOBN(0x732fd309, 0xa84600e3),
-         TOBN(0xe22109c7, 0x16543a40), TOBN(0x9acafd36, 0xfede3c6c),
-         TOBN(0xfb206852, 0x6824e614), TOBN(0x2a4544a9, 0xda25dca0),
-         TOBN(0x25985262, 0x91d60b06), TOBN(0x281b7be9, 0x28753545),
-         TOBN(0xec667b1a, 0x90f13b27), TOBN(0x33a83aff, 0x940e2eb4),
-         TOBN(0x80009862, 0xd5d721d5), TOBN(0x0c3357a3, 0x5bd3a182),
-         TOBN(0x27f3a83b, 0x7aa2cda4), TOBN(0xb58ae74e, 0xf6f83085),
-         TOBN(0x2a911a81, 0x2e6dad6b), TOBN(0xde286051, 0xf43d6c5b),
-         TOBN(0x4bdccc41, 0xf996c4d8), TOBN(0xe7312ec0, 0x0ae1e24e)},
-        {TOBN(0xf8d112e7, 0x6e6485b3), TOBN(0x4d3e24db, 0x771c52f8),
-         TOBN(0x48e3ee41, 0x684a2f6d), TOBN(0x7161957d, 0x21d95551),
-         TOBN(0x19631283, 0xcdb12a6c), TOBN(0xbf3fa882, 0x2e50e164),
-         TOBN(0xf6254b63, 0x3166cc73), TOBN(0x3aefa7ae, 0xaee8cc38),
-         TOBN(0x79b0fe62, 0x3b36f9fd), TOBN(0x26543b23, 0xfde19fc0),
-         TOBN(0x136e64a0, 0x958482ef), TOBN(0x23f63771, 0x9b095825),
-         TOBN(0x14cfd596, 0xb6a1142e), TOBN(0x5ea6aac6, 0x335aac0b),
-         TOBN(0x86a0e8bd, 0xf3081dd5), TOBN(0x5fb89d79, 0x003dc12a),
-         TOBN(0xf615c33a, 0xf72e34d4), TOBN(0x0bd9ea40, 0x110eec35),
-         TOBN(0x1c12bc5b, 0xc1dea34e), TOBN(0x686584c9, 0x49ae4699),
-         TOBN(0x13ad95d3, 0x8c97b942), TOBN(0x4609561a, 0x4e5c7562),
-         TOBN(0x9e94a4ae, 0xf2737f89), TOBN(0xf57594c6, 0x371c78b6),
-         TOBN(0x0f0165fc, 0xe3779ee3), TOBN(0xe00e7f9d, 0xbd495d9e),
-         TOBN(0x1fa4efa2, 0x20284e7a), TOBN(0x4564bade, 0x47ac6219),
-         TOBN(0x90e6312a, 0xc4708e8e), TOBN(0x4f5725fb, 0xa71e9adf),
-         TOBN(0xe95f55ae, 0x3d684b9f), TOBN(0x47f7ccb1, 0x1e94b415),
-         TOBN(0x7322851b, 0x8d946581), TOBN(0xf0d13133, 0xbdf4a012),
-         TOBN(0xa3510f69, 0x6584dae0), TOBN(0x03a7c171, 0x3c9f6c6d),
-         TOBN(0x5be97f38, 0xe475381a), TOBN(0xca1ba422, 0x85823334),
-         TOBN(0xf83cc5c7, 0x0be17dda), TOBN(0x158b1494, 0x0b918c0f),
-         TOBN(0xda3a77e5, 0x522e6b69), TOBN(0x69c908c3, 0xbbcd6c18),
-         TOBN(0x1f1b9e48, 0xd924fd56), TOBN(0x37c64e36, 0xaa4bb3f7),
-         TOBN(0x5a4fdbdf, 0xee478d7d), TOBN(0xba75c8bc, 0x0193f7a0),
-         TOBN(0x84bc1e84, 0x56cd16df), TOBN(0x1fb08f08, 0x46fad151),
-         TOBN(0x8a7cabf9, 0x842e9f30), TOBN(0xa331d4bf, 0x5eab83af),
-         TOBN(0xd272cfba, 0x017f2a6a), TOBN(0x27560abc, 0x83aba0e3),
-         TOBN(0x94b83387, 0x0e3a6b75), TOBN(0x25c6aea2, 0x6b9f50f5),
-         TOBN(0x803d691d, 0xb5fdf6d0), TOBN(0x03b77509, 0xe6333514),
-         TOBN(0x36178903, 0x61a341c1), TOBN(0x3604dc60, 0x0cfd6142),
-         TOBN(0x022295eb, 0x8533316c), TOBN(0x3dbde4ac, 0x44af2922),
-         TOBN(0x898afc5d, 0x1c7eef69), TOBN(0x58896805, 0xd14f4fa1),
-         TOBN(0x05002160, 0x203c21ca), TOBN(0x6f0d1f30, 0x40ef730b),
-         TOBN(0x8e8c44d4, 0x196224f8), TOBN(0x75a4ab95, 0x374d079d),
-         TOBN(0x79085ecc, 0x7d48f123), TOBN(0x56f04d31, 0x1bf65ad8),
-         TOBN(0xe220bf1c, 0xbda602b2), TOBN(0x73ee1742, 0xf9612c69),
-         TOBN(0x76008fc8, 0x084fd06b), TOBN(0x4000ef9f, 0xf11380d1),
-         TOBN(0x48201b4b, 0x12cfe297), TOBN(0x3eee129c, 0x292f74e5),
-         TOBN(0xe1fe114e, 0xc9e874e8), TOBN(0x899b055c, 0x92c5fc41),
-         TOBN(0x4e477a64, 0x3a39c8cf), TOBN(0x82f09efe, 0x78963cc9),
-         TOBN(0x6fd3fd8f, 0xd333f863), TOBN(0x85132b2a, 0xdc949c63),
-         TOBN(0x7e06a3ab, 0x516eb17b), TOBN(0x73bec06f, 0xd2c7372b),
-         TOBN(0xe4f74f55, 0xba896da6), TOBN(0xbb4afef8, 0x8e9eb40f),
-         TOBN(0x2d75bec8, 0xe61d66b0), TOBN(0x02bda4b4, 0xef29300b),
-         TOBN(0x8bbaa8de, 0x026baa5a), TOBN(0xff54befd, 0xa07f4440),
-         TOBN(0xbd9b8b1d, 0xbe7a2af3), TOBN(0xec51caa9, 0x4fb74a72),
-         TOBN(0xb9937a4b, 0x63879697), TOBN(0x7c9a9d20, 0xec2687d5),
-         TOBN(0x1773e44f, 0x6ef5f014), TOBN(0x8abcf412, 0xe90c6900),
-         TOBN(0x387bd022, 0x8142161e), TOBN(0x50393755, 0xfcb6ff2a),
-         TOBN(0x9813fd56, 0xed6def63), TOBN(0x53cf6482, 0x7d53106c),
-         TOBN(0x991a35bd, 0x431f7ac1), TOBN(0xf1e274dd, 0x63e65faf),
-         TOBN(0xf63ffa3c, 0x44cc7880), TOBN(0x411a426b, 0x7c256981),
-         TOBN(0xb698b9fd, 0x93a420e0), TOBN(0x89fdddc0, 0xae53f8fe),
-         TOBN(0x766e0722, 0x32398baa), TOBN(0x205fee42, 0x5cfca031),
-         TOBN(0xa49f5341, 0x7a029cf2), TOBN(0xa88c68b8, 0x4023890d),
-         TOBN(0xbc275041, 0x7337aaa8), TOBN(0x9ed364ad, 0x0eb384f4),
-         TOBN(0xe0816f85, 0x29aba92f), TOBN(0x2e9e1941, 0x04e38a88),
-         TOBN(0x57eef44a, 0x3dafd2d5), TOBN(0x35d1fae5, 0x97ed98d8),
-         TOBN(0x50628c09, 0x2307f9b1), TOBN(0x09d84aae, 0xd6cba5c6),
-         TOBN(0x67071bc7, 0x88aaa691), TOBN(0x2dea57a9, 0xafe6cb03),
-         TOBN(0xdfe11bb4, 0x3d78ac01), TOBN(0x7286418c, 0x7fd7aa51),
-         TOBN(0xfabf7709, 0x77f7195a), TOBN(0x8ec86167, 0xadeb838f),
-         TOBN(0xea1285a8, 0xbb4f012d), TOBN(0xd6883503, 0x9a3eab3f),
-         TOBN(0xee5d24f8, 0x309004c2), TOBN(0xa96e4b76, 0x13ffe95e),
-         TOBN(0x0cdffe12, 0xbd223ea4), TOBN(0x8f5c2ee5, 0xb6739a53),
-         TOBN(0x5cb4aaa5, 0xdd968198), TOBN(0xfa131c52, 0x72413a6c),
-         TOBN(0x53d46a90, 0x9536d903), TOBN(0xb270f0d3, 0x48606d8e),
-         TOBN(0x518c7564, 0xa053a3bc), TOBN(0x088254b7, 0x1a86caef),
-         TOBN(0xb3ba8cb4, 0x0ab5efd0), TOBN(0x5c59900e, 0x4605945d),
-         TOBN(0xecace1dd, 0xa1887395), TOBN(0x40960f36, 0x932a65de),
-         TOBN(0x9611ff5c, 0x3aa95529), TOBN(0xc58215b0, 0x7c1e5a36),
-         TOBN(0xd48c9b58, 0xf0e1a524), TOBN(0xb406856b, 0xf590dfb8),
-         TOBN(0xc7605e04, 0x9cd95662), TOBN(0x0dd036ee, 0xa33ecf82),
-         TOBN(0xa50171ac, 0xc33156b3), TOBN(0xf09d24ea, 0x4a80172e),
-         TOBN(0x4e1f72c6, 0x76dc8eef), TOBN(0xe60caadc, 0x5e3d44ee),
-         TOBN(0x006ef8a6, 0x979b1d8f), TOBN(0x60908a1c, 0x97788d26),
-         TOBN(0x6e08f95b, 0x266feec0), TOBN(0x618427c2, 0x22e8c94e),
-         TOBN(0x3d613339, 0x59145a65), TOBN(0xcd9bc368, 0xfa406337),
-         TOBN(0x82d11be3, 0x2d8a52a0), TOBN(0xf6877b27, 0x97a1c590),
-         TOBN(0x837a819b, 0xf5cbdb25), TOBN(0x2a4fd1d8, 0xde090249),
-         TOBN(0x622a7de7, 0x74990e5f), TOBN(0x840fa5a0, 0x7945511b),
-         TOBN(0x30b974be, 0x6558842d), TOBN(0x70df8c64, 0x17f3d0a6),
-         TOBN(0x7c803520, 0x7542e46d), TOBN(0x7251fe7f, 0xe4ecc823),
-         TOBN(0xe59134cb, 0x5e9aac9a), TOBN(0x11bb0934, 0xf0045d71),
-         TOBN(0x53e5d9b5, 0xdbcb1d4e), TOBN(0x8d97a905, 0x92defc91),
-         TOBN(0xfe289327, 0x7946d3f9), TOBN(0xe132bd24, 0x07472273),
-         TOBN(0xeeeb510c, 0x1eb6ae86), TOBN(0x777708c5, 0xf0595067),
-         TOBN(0x18e2c8cd, 0x1297029e), TOBN(0x2c61095c, 0xbbf9305e),
-         TOBN(0xe466c258, 0x6b85d6d9), TOBN(0x8ac06c36, 0xda1ea530),
-         TOBN(0xa365dc39, 0xa1304668), TOBN(0xe4a9c885, 0x07f89606),
-         TOBN(0x65a4898f, 0xacc7228d), TOBN(0x3e2347ff, 0x84ca8303),
-         TOBN(0xa5f6fb77, 0xea7d23a3), TOBN(0x2fac257d, 0x672a71cd),
-         TOBN(0x6908bef8, 0x7e6a44d3), TOBN(0x8ff87566, 0x891d3d7a),
-         TOBN(0xe58e90b3, 0x6b0cf82e), TOBN(0x6438d246, 0x2615b5e7),
-         TOBN(0x07b1f8fc, 0x669c145a), TOBN(0xb0d8b2da, 0x36f1e1cb),
-         TOBN(0x54d5dadb, 0xd9184c4d), TOBN(0x3dbb18d5, 0xf93d9976),
-         TOBN(0x0a3e0f56, 0xd1147d47), TOBN(0x2afa8c8d, 0xa0a48609),
-         TOBN(0x275353e8, 0xbc36742c), TOBN(0x898f427e, 0xeea0ed90),
-         TOBN(0x26f4947e, 0x3e477b00), TOBN(0x8ad8848a, 0x308741e3),
-         TOBN(0x6c703c38, 0xd74a2a46), TOBN(0x5e3e05a9, 0x9ba17ba2),
-         TOBN(0xc1fa6f66, 0x4ab9a9e4), TOBN(0x474a2d9a, 0x3841d6ec),
-         TOBN(0x871239ad, 0x653ae326), TOBN(0x14bcf72a, 0xa74cbb43),
-         TOBN(0x8737650e, 0x20d4c083), TOBN(0x3df86536, 0x110ed4af),
-         TOBN(0xd2d86fe7, 0xb53ca555), TOBN(0x688cb00d, 0xabd5d538),
-         TOBN(0xcf81bda3, 0x1ad38468), TOBN(0x7ccfe3cc, 0xf01167b6),
-         TOBN(0xcf4f47e0, 0x6c4c1fe6), TOBN(0x557e1f1a, 0x298bbb79),
-         TOBN(0xf93b974f, 0x30d45a14), TOBN(0x174a1d2d, 0x0baf97c4),
-         TOBN(0x7a003b30, 0xc51fbf53), TOBN(0xd8940991, 0xee68b225),
-         TOBN(0x5b0aa7b7, 0x1c0f4173), TOBN(0x975797c9, 0xa20a7153),
-         TOBN(0x26e08c07, 0xe3533d77), TOBN(0xd7222e6a, 0x2e341c99),
-         TOBN(0x9d60ec3d, 0x8d2dc4ed), TOBN(0xbdfe0d8f, 0x7c476cf8),
-         TOBN(0x1fe59ab6, 0x1d056605), TOBN(0xa9ea9df6, 0x86a8551f),
-         TOBN(0x8489941e, 0x47fb8d8c), TOBN(0xfeb874eb, 0x4a7f1b10),
-         TOBN(0xfe5fea86, 0x7ee0d98f), TOBN(0x201ad34b, 0xdbf61864),
-         TOBN(0x45d8fe47, 0x37c031d4), TOBN(0xd5f49fae, 0x795f0822),
-         TOBN(0xdb0fb291, 0xc7f4a40c), TOBN(0x2e69d9c1, 0x730ddd92),
-         TOBN(0x754e1054, 0x49d76987), TOBN(0x8a24911d, 0x7662db87),
-         TOBN(0x61fc1810, 0x60a71676), TOBN(0xe852d1a8, 0xf66a8ad1),
-         TOBN(0x172bbd65, 0x6417231e), TOBN(0x0d6de7bd, 0x3babb11f),
-         TOBN(0x6fde6f88, 0xc8e347f8), TOBN(0x1c587547, 0x9bd99cc3),
-         TOBN(0x78e54ed0, 0x34076950), TOBN(0x97f0f334, 0x796e83ba),
-         TOBN(0xe4dbe1ce, 0x4924867a), TOBN(0xbd5f51b0, 0x60b84917),
-         TOBN(0x37530040, 0x3cb09a79), TOBN(0xdb3fe0f8, 0xff1743d8),
-         TOBN(0xed7894d8, 0x556fa9db), TOBN(0xfa262169, 0x23412fbf),
-         TOBN(0x563be0db, 0xba7b9291), TOBN(0x6ca8b8c0, 0x0c9fb234),
-         TOBN(0xed406aa9, 0xbd763802), TOBN(0xc21486a0, 0x65303da1),
-         TOBN(0x61ae291e, 0xc7e62ec4), TOBN(0x622a0492, 0xdf99333e),
-         TOBN(0x7fd80c9d, 0xbb7a8ee0), TOBN(0xdc2ed3bc, 0x6c01aedb),
-         TOBN(0x35c35a12, 0x08be74ec), TOBN(0xd540cb1a, 0x469f671f),
-         TOBN(0xd16ced4e, 0xcf84f6c7), TOBN(0x8561fb9c, 0x2d090f43),
-         TOBN(0x7e693d79, 0x6f239db4), TOBN(0xa736f928, 0x77bd0d94),
-         TOBN(0x07b4d929, 0x2c1950ee), TOBN(0xda177543, 0x56dc11b3),
-         TOBN(0xa5dfbbaa, 0x7a6a878e), TOBN(0x1c70cb29, 0x4decb08a),
-         TOBN(0xfba28c8b, 0x6f0f7c50), TOBN(0xa8eba2b8, 0x854dcc6d),
-         TOBN(0x5ff8e89a, 0x36b78642), TOBN(0x070c1c8e, 0xf6873adf),
-         TOBN(0xbbd3c371, 0x6484d2e4), TOBN(0xfb78318f, 0x0d414129),
-         TOBN(0x2621a39c, 0x6ad93b0b), TOBN(0x979d74c2, 0xa9e917f7),
-         TOBN(0xfc195647, 0x61fb0428), TOBN(0x4d78954a, 0xbee624d4),
-         TOBN(0xb94896e0, 0xb8ae86fd), TOBN(0x6667ac0c, 0xc91c8b13),
-         TOBN(0x9f180512, 0x43bcf832), TOBN(0xfbadf8b7, 0xa0010137),
-         TOBN(0xc69b4089, 0xb3ba8aa7), TOBN(0xfac4bacd, 0xe687ce85),
-         TOBN(0x9164088d, 0x977eab40), TOBN(0x51f4c5b6, 0x2760b390),
-         TOBN(0xd238238f, 0x340dd553), TOBN(0x358566c3, 0xdb1d31c9),
-         TOBN(0x3a5ad69e, 0x5068f5ff), TOBN(0xf31435fc, 0xdaff6b06),
-         TOBN(0xae549a5b, 0xd6debff0), TOBN(0x59e5f0b7, 0x75e01331),
-         TOBN(0x5d492fb8, 0x98559acf), TOBN(0x96018c2e, 0x4db79b50),
-         TOBN(0x55f4a48f, 0x609f66aa), TOBN(0x1943b3af, 0x4900a14f),
-         TOBN(0xc22496df, 0x15a40d39), TOBN(0xb2a44684, 0x4c20f7c5),
-         TOBN(0x76a35afa, 0x3b98404c), TOBN(0xbec75725, 0xff5d1b77),
-         TOBN(0xb67aa163, 0xbea06444), TOBN(0x27e95bb2, 0xf724b6f2),
-         TOBN(0x3c20e3e9, 0xd238c8ab), TOBN(0x1213754e, 0xddd6ae17),
-         TOBN(0x8c431020, 0x716e0f74), TOBN(0x6679c82e, 0xffc095c2),
-         TOBN(0x2eb3adf4, 0xd0ac2932), TOBN(0x2cc970d3, 0x01bb7a76),
-         TOBN(0x70c71f2f, 0x740f0e66), TOBN(0x545c616b, 0x2b6b23cc),
-         TOBN(0x4528cfcb, 0xb40a8bd7), TOBN(0xff839633, 0x2ab27722),
-         TOBN(0x049127d9, 0x025ac99a), TOBN(0xd314d4a0, 0x2b63e33b),
-         TOBN(0xc8c310e7, 0x28d84519), TOBN(0x0fcb8983, 0xb3bc84ba),
-         TOBN(0x2cc52261, 0x38634818), TOBN(0x501814f4, 0xb44c2e0b),
-         TOBN(0xf7e181aa, 0x54dfdba3), TOBN(0xcfd58ff0, 0xe759718c),
-         TOBN(0xf90cdb14, 0xd3b507a8), TOBN(0x57bd478e, 0xc50bdad8),
-         TOBN(0x29c197e2, 0x50e5f9aa), TOBN(0x4db6eef8, 0xe40bc855),
-         TOBN(0x2cc8f21a, 0xd1fc0654), TOBN(0xc71cc963, 0x81269d73),
-         TOBN(0xecfbb204, 0x077f49f9), TOBN(0xdde92571, 0xca56b793),
-         TOBN(0x9abed6a3, 0xf97ad8f7), TOBN(0xe6c19d3f, 0x924de3bd),
-         TOBN(0x8dce92f4, 0xa140a800), TOBN(0x85f44d1e, 0x1337af07),
-         TOBN(0x5953c08b, 0x09d64c52), TOBN(0xa1b5e49f, 0xf5df9749),
-         TOBN(0x336a8fb8, 0x52735f7d), TOBN(0xb332b6db, 0x9add676b),
-         TOBN(0x558b88a0, 0xb4511aa4), TOBN(0x09788752, 0xdbd5cc55),
-         TOBN(0x16b43b9c, 0xd8cd52bd), TOBN(0x7f0bc5a0, 0xc2a2696b),
-         TOBN(0x146e12d4, 0xc11f61ef), TOBN(0x9ce10754, 0x3a83e79e),
-         TOBN(0x08ec73d9, 0x6cbfca15), TOBN(0x09ff29ad, 0x5b49653f),
-         TOBN(0xe31b72bd, 0xe7da946e), TOBN(0xebf9eb3b, 0xee80a4f2),
-         TOBN(0xd1aabd08, 0x17598ce4), TOBN(0x18b5fef4, 0x53f37e80),
-         TOBN(0xd5d5cdd3, 0x5958cd79), TOBN(0x3580a1b5, 0x1d373114),
-         TOBN(0xa36e4c91, 0xfa935726), TOBN(0xa38c534d, 0xef20d760),
-         TOBN(0x7088e40a, 0x2ff5845b), TOBN(0xe5bb40bd, 0xbd78177f),
-         TOBN(0x4f06a7a8, 0x857f9920), TOBN(0xe3cc3e50, 0xe968f05d),
-         TOBN(0x1d68b7fe, 0xe5682d26), TOBN(0x5206f76f, 0xaec7f87c),
-         TOBN(0x41110530, 0x041951ab), TOBN(0x58ec52c1, 0xd4b5a71a),
-         TOBN(0xf3488f99, 0x0f75cf9a), TOBN(0xf411951f, 0xba82d0d5),
-         TOBN(0x27ee75be, 0x618895ab), TOBN(0xeae060d4, 0x6d8aab14),
-         TOBN(0x9ae1df73, 0x7fb54dc2), TOBN(0x1f3e391b, 0x25963649),
-         TOBN(0x242ec32a, 0xfe055081), TOBN(0x5bd450ef, 0x8491c9bd),
-         TOBN(0x367efc67, 0x981eb389), TOBN(0xed7e1928, 0x3a0550d5),
-         TOBN(0x362e776b, 0xab3ce75c), TOBN(0xe890e308, 0x1f24c523),
-         TOBN(0xb961b682, 0xfeccef76), TOBN(0x8b8e11f5, 0x8bba6d92),
-         TOBN(0x8f2ccc4c, 0x2b2375c4), TOBN(0x0d7f7a52, 0xe2f86cfa),
-         TOBN(0xfd94d30a, 0x9efe5633), TOBN(0x2d8d246b, 0x5451f934),
-         TOBN(0x2234c6e3, 0x244e6a00), TOBN(0xde2b5b0d, 0xddec8c50),
-         TOBN(0x2ce53c5a, 0xbf776f5b), TOBN(0x6f724071, 0x60357b05),
-         TOBN(0xb2593717, 0x71bf3f7a), TOBN(0x87d2501c, 0x440c4a9f),
-         TOBN(0x440552e1, 0x87b05340), TOBN(0xb7bf7cc8, 0x21624c32),
-         TOBN(0x4155a6ce, 0x22facddb), TOBN(0x5a4228cb, 0x889837ef),
-         TOBN(0xef87d6d6, 0xfd4fd671), TOBN(0xa233687e, 0xc2daa10e),
-         TOBN(0x75622244, 0x03c0eb96), TOBN(0x7632d184, 0x8bf19be6),
-         TOBN(0x05d0f8e9, 0x40735ff4), TOBN(0x3a3e6e13, 0xc00931f1),
-         TOBN(0x31ccde6a, 0xdafe3f18), TOBN(0xf381366a, 0xcfe51207),
-         TOBN(0x24c222a9, 0x60167d92), TOBN(0x62f9d6f8, 0x7529f18c),
-         TOBN(0x412397c0, 0x0353b114), TOBN(0x334d89dc, 0xef808043),
-         TOBN(0xd9ec63ba, 0x2a4383ce), TOBN(0xcec8e937, 0x5cf92ba0),
-         TOBN(0xfb8b4288, 0xc8be74c0), TOBN(0x67d6912f, 0x105d4391),
-         TOBN(0x7b996c46, 0x1b913149), TOBN(0x36aae2ef, 0x3a4e02da),
-         TOBN(0xb68aa003, 0x972de594), TOBN(0x284ec70d, 0x4ec6d545),
-         TOBN(0xf3d2b2d0, 0x61391d54), TOBN(0x69c5d5d6, 0xfe114e92),
-         TOBN(0xbe0f00b5, 0xb4482dff), TOBN(0xe1596fa5, 0xf5bf33c5),
-         TOBN(0x10595b56, 0x96a71cba), TOBN(0x944938b2, 0xfdcadeb7),
-         TOBN(0xa282da4c, 0xfccd8471), TOBN(0x98ec05f3, 0x0d37bfe1),
-         TOBN(0xe171ce1b, 0x0698304a), TOBN(0x2d691444, 0x21bdf79b),
-         TOBN(0xd0cd3b74, 0x1b21dec1), TOBN(0x712ecd8b, 0x16a15f71),
-         TOBN(0x8d4c00a7, 0x00fd56e1), TOBN(0x02ec9692, 0xf9527c18),
-         TOBN(0x21c44937, 0x4a3e42e1), TOBN(0x9176fbab, 0x1392ae0a),
-         TOBN(0x8726f1ba, 0x44b7b618), TOBN(0xb4d7aae9, 0xf1de491c),
-         TOBN(0xf91df7b9, 0x07b582c0), TOBN(0x7e116c30, 0xef60aa3a),
-         TOBN(0x99270f81, 0x466265d7), TOBN(0xb15b6fe2, 0x4df7adf0),
-         TOBN(0xfe33b2d3, 0xf9738f7f), TOBN(0x48553ab9, 0xd6d70f95),
-         TOBN(0x2cc72ac8, 0xc21e94db), TOBN(0x795ac38d, 0xbdc0bbee),
-         TOBN(0x0a1be449, 0x2e40478f), TOBN(0x81bd3394, 0x052bde55),
-         TOBN(0x63c8dbe9, 0x56b3c4f2), TOBN(0x017a99cf, 0x904177cc),
-         TOBN(0x947bbddb, 0x4d010fc1), TOBN(0xacf9b00b, 0xbb2c9b21),
-         TOBN(0x2970bc8d, 0x47173611), TOBN(0x1a4cbe08, 0xac7d756f),
-         TOBN(0x06d9f4aa, 0x67d541a2), TOBN(0xa3e8b689, 0x59c2cf44),
-         TOBN(0xaad066da, 0x4d88f1dd), TOBN(0xc604f165, 0x7ad35dea),
-         TOBN(0x7edc0720, 0x4478ca67), TOBN(0xa10dfae0, 0xba02ce06),
-         TOBN(0xeceb1c76, 0xaf36f4e4), TOBN(0x994b2292, 0xaf3f8f48),
-         TOBN(0xbf9ed77b, 0x77c8a68c), TOBN(0x74f544ea, 0x51744c9d),
-         TOBN(0x82d05bb9, 0x8113a757), TOBN(0x4ef2d2b4, 0x8a9885e4),
-         TOBN(0x1e332be5, 0x1aa7865f), TOBN(0x22b76b18, 0x290d1a52),
-         TOBN(0x308a2310, 0x44351683), TOBN(0x9d861896, 0xa3f22840),
-         TOBN(0x5959ddcd, 0x841ed947), TOBN(0x0def0c94, 0x154b73bf),
-         TOBN(0xf0105417, 0x4c7c15e0), TOBN(0x539bfb02, 0x3a277c32),
-         TOBN(0xe699268e, 0xf9dccf5f), TOBN(0x9f5796a5, 0x0247a3bd),
-         TOBN(0x8b839de8, 0x4f157269), TOBN(0xc825c1e5, 0x7a30196b),
-         TOBN(0x6ef0aabc, 0xdc8a5a91), TOBN(0xf4a8ce6c, 0x498b7fe6),
-         TOBN(0x1cce35a7, 0x70cbac78), TOBN(0x83488e9b, 0xf6b23958),
-         TOBN(0x0341a070, 0xd76cb011), TOBN(0xda6c9d06, 0xae1b2658),
-         TOBN(0xb701fb30, 0xdd648c52), TOBN(0x994ca02c, 0x52fb9fd1),
-         TOBN(0x06933117, 0x6f563086), TOBN(0x3d2b8100, 0x17856bab),
-         TOBN(0xe89f48c8, 0x5963a46e), TOBN(0x658ab875, 0xa99e61c7),
-         TOBN(0x6e296f87, 0x4b8517b4), TOBN(0x36c4fcdc, 0xfc1bc656),
-         TOBN(0xde5227a1, 0xa3906def), TOBN(0x9fe95f57, 0x62418945),
-         TOBN(0x20c91e81, 0xfdd96cde), TOBN(0x5adbe47e, 0xda4480de),
-         TOBN(0xa009370f, 0x396de2b6), TOBN(0x98583d4b, 0xf0ecc7bd),
-         TOBN(0xf44f6b57, 0xe51d0672), TOBN(0x03d6b078, 0x556b1984),
-         TOBN(0x27dbdd93, 0xb0b64912), TOBN(0x9b3a3434, 0x15687b09),
-         TOBN(0x0dba6461, 0x51ec20a9), TOBN(0xec93db7f, 0xff28187c),
-         TOBN(0x00ff8c24, 0x66e48bdd), TOBN(0x2514f2f9, 0x11ccd78e),
-         TOBN(0xeba11f4f, 0xe1250603), TOBN(0x8a22cd41, 0x243fa156),
-         TOBN(0xa4e58df4, 0xb283e4c6), TOBN(0x78c29859, 0x8b39783f),
-         TOBN(0x5235aee2, 0xa5259809), TOBN(0xc16284b5, 0x0e0227dd),
-         TOBN(0xa5f57916, 0x1338830d), TOBN(0x6d4b8a6b, 0xd2123fca),
-         TOBN(0x236ea68a, 0xf9c546f8), TOBN(0xc1d36873, 0xfa608d36),
-         TOBN(0xcd76e495, 0x8d436d13), TOBN(0xd4d9c221, 0x8fb080af),
-         TOBN(0x665c1728, 0xe8ad3fb5), TOBN(0xcf1ebe4d, 0xb3d572e0),
-         TOBN(0xa7a8746a, 0x584c5e20), TOBN(0x267e4ea1, 0xb9dc7035),
-         TOBN(0x593a15cf, 0xb9548c9b), TOBN(0x5e6e2135, 0x4bd012f3),
-         TOBN(0xdf31cc6a, 0x8c8f936e), TOBN(0x8af84d04, 0xb5c241dc),
-         TOBN(0x63990a6f, 0x345efb86), TOBN(0x6fef4e61, 0xb9b962cb)},
-        {TOBN(0xf6368f09, 0x25722608), TOBN(0x131260db, 0x131cf5c6),
-         TOBN(0x40eb353b, 0xfab4f7ac), TOBN(0x85c78880, 0x37eee829),
-         TOBN(0x4c1581ff, 0xc3bdf24e), TOBN(0x5bff75cb, 0xf5c3c5a8),
-         TOBN(0x35e8c83f, 0xa14e6f40), TOBN(0xb81d1c0f, 0x0295e0ca),
-         TOBN(0xfcde7cc8, 0xf43a730f), TOBN(0xe89b6f3c, 0x33ab590e),
-         TOBN(0xc823f529, 0xad03240b), TOBN(0x82b79afe, 0x98bea5db),
-         TOBN(0x568f2856, 0x962fe5de), TOBN(0x0c590adb, 0x60c591f3),
-         TOBN(0x1fc74a14, 0x4a28a858), TOBN(0x3b662498, 0xb3203f4c),
-         TOBN(0x91e3cf0d, 0x6c39765a), TOBN(0xa2db3acd, 0xac3cca0b),
-         TOBN(0x288f2f08, 0xcb953b50), TOBN(0x2414582c, 0xcf43cf1a),
-         TOBN(0x8dec8bbc, 0x60eee9a8), TOBN(0x54c79f02, 0x729aa042),
-         TOBN(0xd81cd5ec, 0x6532f5d5), TOBN(0xa672303a, 0xcf82e15f),
-         TOBN(0x376aafa8, 0x719c0563), TOBN(0xcd8ad2dc, 0xbc5fc79f),
-         TOBN(0x303fdb9f, 0xcb750cd3), TOBN(0x14ff052f, 0x4418b08e),
-         TOBN(0xf75084cf, 0x3e2d6520), TOBN(0x7ebdf0f8, 0x144ed509),
-         TOBN(0xf43bf0f2, 0xd3f25b98), TOBN(0x86ad71cf, 0xa354d837),
-         TOBN(0xb827fe92, 0x26f43572), TOBN(0xdfd3ab5b, 0x5d824758),
-         TOBN(0x315dd23a, 0x539094c1), TOBN(0x85c0e37a, 0x66623d68),
-         TOBN(0x575c7972, 0x7be19ae0), TOBN(0x616a3396, 0xdf0d36b5),
-         TOBN(0xa1ebb3c8, 0x26b1ff7e), TOBN(0x635b9485, 0x140ad453),
-         TOBN(0x92bf3cda, 0xda430c0b), TOBN(0x4702850e, 0x3a96dac6),
-         TOBN(0xc91cf0a5, 0x15ac326a), TOBN(0x95de4f49, 0xab8c25e4),
-         TOBN(0xb01bad09, 0xe265c17c), TOBN(0x24e45464, 0x087b3881),
-         TOBN(0xd43e583c, 0xe1fac5ca), TOBN(0xe17cb318, 0x6ead97a6),
-         TOBN(0x6cc39243, 0x74dcec46), TOBN(0x33cfc02d, 0x54c2b73f),
-         TOBN(0x82917844, 0xf26cd99c), TOBN(0x8819dd95, 0xd1773f89),
-         TOBN(0x09572aa6, 0x0871f427), TOBN(0x8e0cf365, 0xf6f01c34),
-         TOBN(0x7fa52988, 0xbff1f5af), TOBN(0x4eb357ea, 0xe75e8e50),
-         TOBN(0xd9d0c8c4, 0x868af75d), TOBN(0xd7325cff, 0x45c8c7ea),
-         TOBN(0xab471996, 0xcc81ecb0), TOBN(0xff5d55f3, 0x611824ed),
-         TOBN(0xbe314541, 0x1977a0ee), TOBN(0x5085c4c5, 0x722038c6),
-         TOBN(0x2d5335bf, 0xf94bb495), TOBN(0x894ad8a6, 0xc8e2a082),
-         TOBN(0x5c3e2341, 0xada35438), TOBN(0xf4a9fc89, 0x049b8c4e),
-         TOBN(0xbeeb355a, 0x9f17cf34), TOBN(0x3f311e0e, 0x6c91fe10),
-         TOBN(0xc2d20038, 0x92ab9891), TOBN(0x257bdcc1, 0x3e8ce9a9),
-         TOBN(0x1b2d9789, 0x88c53bee), TOBN(0x927ce89a, 0xcdba143a),
-         TOBN(0xb0a32cca, 0x523db280), TOBN(0x5c889f8a, 0x50d43783),
-         TOBN(0x503e04b3, 0x4897d16f), TOBN(0x8cdb6e78, 0x08f5f2e8),
-         TOBN(0x6ab91cf0, 0x179c8e74), TOBN(0xd8874e52, 0x48211d60),
-         TOBN(0xf948d4d5, 0xea851200), TOBN(0x4076d41e, 0xe6f9840a),
-         TOBN(0xc20e263c, 0x47b517ea), TOBN(0x79a448fd, 0x30685e5e),
-         TOBN(0xe55f6f78, 0xf90631a0), TOBN(0x88a790b1, 0xa79e6346),
-         TOBN(0x62160c7d, 0x80969fe8), TOBN(0x54f92fd4, 0x41491bb9),
-         TOBN(0xa6645c23, 0x5c957526), TOBN(0xf44cc5ae, 0xbea3ce7b),
-         TOBN(0xf7628327, 0x8b1e68b7), TOBN(0xc731ad7a, 0x303f29d3),
-         TOBN(0xfe5a9ca9, 0x57d03ecb), TOBN(0x96c0d50c, 0x41bc97a7),
-         TOBN(0xc4669fe7, 0x9b4f7f24), TOBN(0xfdd781d8, 0x3d9967ef),
-         TOBN(0x7892c7c3, 0x5d2c208d), TOBN(0x8bf64f7c, 0xae545cb3),
-         TOBN(0xc01f862c, 0x467be912), TOBN(0xf4c85ee9, 0xc73d30cc),
-         TOBN(0x1fa6f4be, 0x6ab83ec7), TOBN(0xa07a3c1c, 0x4e3e3cf9),
-         TOBN(0x87f8ef45, 0x0c00beb3), TOBN(0x30e2c2b3, 0x000d4c3e),
-         TOBN(0x1aa00b94, 0xfe08bf5b), TOBN(0x32c133aa, 0x9224ef52),
-         TOBN(0x38df16bb, 0x32e5685d), TOBN(0x68a9e069, 0x58e6f544),
-         TOBN(0x495aaff7, 0xcdc5ebc6), TOBN(0xf894a645, 0x378b135f),
-         TOBN(0xf316350a, 0x09e27ecf), TOBN(0xeced201e, 0x58f7179d),
-         TOBN(0x2eec273c, 0xe97861ba), TOBN(0x47ec2cae, 0xd693be2e),
-         TOBN(0xfa4c97c4, 0xf68367ce), TOBN(0xe4f47d0b, 0xbe5a5755),
-         TOBN(0x17de815d, 0xb298a979), TOBN(0xd7eca659, 0xc177dc7d),
-         TOBN(0x20fdbb71, 0x49ded0a3), TOBN(0x4cb2aad4, 0xfb34d3c5),
-         TOBN(0x2cf31d28, 0x60858a33), TOBN(0x3b6873ef, 0xa24aa40f),
-         TOBN(0x540234b2, 0x2c11bb37), TOBN(0x2d0366dd, 0xed4c74a3),
-         TOBN(0xf9a968da, 0xeec5f25d), TOBN(0x36601068, 0x67b63142),
-         TOBN(0x07cd6d2c, 0x68d7b6d4), TOBN(0xa8f74f09, 0x0c842942),
-         TOBN(0xe2751404, 0x7768b1ee), TOBN(0x4b5f7e89, 0xfe62aee4),
-         TOBN(0xc6a77177, 0x89070d26), TOBN(0xa1f28e4e, 0xdd1c8bc7),
-         TOBN(0xea5f4f06, 0x469e1f17), TOBN(0x78fc242a, 0xfbdb78e0),
-         TOBN(0xc9c7c592, 0x8b0588f1), TOBN(0xb6b7a0fd, 0x1535921e),
-         TOBN(0xcc5bdb91, 0xbde5ae35), TOBN(0xb42c485e, 0x12ff1864),
-         TOBN(0xa1113e13, 0xdbab98aa), TOBN(0xde9d469b, 0xa17b1024),
-         TOBN(0x23f48b37, 0xc0462d3a), TOBN(0x3752e537, 0x7c5c078d),
-         TOBN(0xe3a86add, 0x15544eb9), TOBN(0xf013aea7, 0x80fba279),
-         TOBN(0x8b5bb76c, 0xf22001b5), TOBN(0xe617ba14, 0xf02891ab),
-         TOBN(0xd39182a6, 0x936219d3), TOBN(0x5ce1f194, 0xae51cb19),
-         TOBN(0xc78f8598, 0xbf07a74c), TOBN(0x6d7158f2, 0x22cbf1bc),
-         TOBN(0x3b846b21, 0xe300ce18), TOBN(0x35fba630, 0x2d11275d),
-         TOBN(0x5fe25c36, 0xa0239b9b), TOBN(0xd8beb35d, 0xdf05d940),
-         TOBN(0x4db02bb0, 0x1f7e320d), TOBN(0x0641c364, 0x6da320ea),
-         TOBN(0x6d95fa5d, 0x821389a3), TOBN(0x92699748, 0x8fcd8e3d),
-         TOBN(0x316fef17, 0xceb6c143), TOBN(0x67fcb841, 0xd933762b),
-         TOBN(0xbb837e35, 0x118b17f8), TOBN(0x4b92552f, 0x9fd24821),
-         TOBN(0xae6bc70e, 0x46aca793), TOBN(0x1cf0b0e4, 0xe579311b),
-         TOBN(0x8dc631be, 0x5802f716), TOBN(0x099bdc6f, 0xbddbee4d),
-         TOBN(0xcc352bb2, 0x0caf8b05), TOBN(0xf74d505a, 0x72d63df2),
-         TOBN(0xb9876d4b, 0x91c4f408), TOBN(0x1ce18473, 0x9e229b2d),
-         TOBN(0x49507597, 0x83abdb4a), TOBN(0x850fbcb6, 0xdee84b18),
-         TOBN(0x6325236e, 0x609e67dc), TOBN(0x04d831d9, 0x9336c6d8),
-         TOBN(0x8deaae3b, 0xfa12d45d), TOBN(0xe425f8ce, 0x4746e246),
-         TOBN(0x8004c175, 0x24f5f31e), TOBN(0xaca16d8f, 0xad62c3b7),
-         TOBN(0x0dc15a6a, 0x9152f934), TOBN(0xf1235e5d, 0xed0e12c1),
-         TOBN(0xc33c06ec, 0xda477dac), TOBN(0x76be8732, 0xb2ea0006),
-         TOBN(0xcf3f7831, 0x0c0cd313), TOBN(0x3c524553, 0xa614260d),
-         TOBN(0x31a756f8, 0xcab22d15), TOBN(0x03ee10d1, 0x77827a20),
-         TOBN(0xd1e059b2, 0x1994ef20), TOBN(0x2a653b69, 0x638ae318),
-         TOBN(0x70d5eb58, 0x2f699010), TOBN(0x279739f7, 0x09f5f84a),
-         TOBN(0x5da4663c, 0x8b799336), TOBN(0xfdfdf14d, 0x203c37eb),
-         TOBN(0x32d8a9dc, 0xa1dbfb2d), TOBN(0xab40cff0, 0x77d48f9b),
-         TOBN(0xc018b383, 0xd20b42d5), TOBN(0xf9a810ef, 0x9f78845f),
-         TOBN(0x40af3753, 0xbdba9df0), TOBN(0xb90bdcfc, 0x131dfdf9),
-         TOBN(0x18720591, 0xf01ab782), TOBN(0xc823f211, 0x6af12a88),
-         TOBN(0xa51b80f3, 0x0dc14401), TOBN(0xde248f77, 0xfb2dfbe3),
-         TOBN(0xef5a44e5, 0x0cafe751), TOBN(0x73997c9c, 0xd4dcd221),
-         TOBN(0x32fd86d1, 0xde854024), TOBN(0xd5b53adc, 0xa09b84bb),
-         TOBN(0x008d7a11, 0xdcedd8d1), TOBN(0x406bd1c8, 0x74b32c84),
-         TOBN(0x5d4472ff, 0x05dde8b1), TOBN(0x2e25f2cd, 0xfce2b32f),
-         TOBN(0xbec0dd5e, 0x29dfc254), TOBN(0x4455fcf6, 0x2b98b267),
-         TOBN(0x0b4d43a5, 0xc72df2ad), TOBN(0xea70e6be, 0x48a75397),
-         TOBN(0x2aad6169, 0x5820f3bf), TOBN(0xf410d2dd, 0x9e37f68f),
-         TOBN(0x70fb7dba, 0x7be5ac83), TOBN(0x636bb645, 0x36ec3eec),
-         TOBN(0x27104ea3, 0x9754e21c), TOBN(0xbc87a3e6, 0x8d63c373),
-         TOBN(0x483351d7, 0x4109db9a), TOBN(0x0fa724e3, 0x60134da7),
-         TOBN(0x9ff44c29, 0xb0720b16), TOBN(0x2dd0cf13, 0x06aceead),
-         TOBN(0x5942758c, 0xe26929a6), TOBN(0x96c5db92, 0xb766a92b),
-         TOBN(0xcec7d4c0, 0x5f18395e), TOBN(0xd3f22744, 0x1f80d032),
-         TOBN(0x7a68b37a, 0xcb86075b), TOBN(0x074764dd, 0xafef92db),
-         TOBN(0xded1e950, 0x7bc7f389), TOBN(0xc580c850, 0xb9756460),
-         TOBN(0xaeeec2a4, 0x7da48157), TOBN(0x3f0b4e7f, 0x82c587b3),
-         TOBN(0x231c6de8, 0xa9f19c53), TOBN(0x5717bd73, 0x6974e34e),
-         TOBN(0xd9e1d216, 0xf1508fa9), TOBN(0x9f112361, 0xdadaa124),
-         TOBN(0x80145e31, 0x823b7348), TOBN(0x4dd8f0d5, 0xac634069),
-         TOBN(0xe3d82fc7, 0x2297c258), TOBN(0x276fcfee, 0x9cee7431),
-         TOBN(0x8eb61b5e, 0x2bc0aea9), TOBN(0x4f668fd5, 0xde329431),
-         TOBN(0x03a32ab1, 0x38e4b87e), TOBN(0xe1374517, 0x73d0ef0b),
-         TOBN(0x1a46f7e6, 0x853ac983), TOBN(0xc3bdf42e, 0x68e78a57),
-         TOBN(0xacf20785, 0x2ea96dd1), TOBN(0xa10649b9, 0xf1638460),
-         TOBN(0xf2369f0b, 0x879fbbed), TOBN(0x0ff0ae86, 0xda9d1869),
-         TOBN(0x5251d759, 0x56766f45), TOBN(0x4984d8c0, 0x2be8d0fc),
-         TOBN(0x7ecc95a6, 0xd21008f0), TOBN(0x29bd54a0, 0x3a1a1c49),
-         TOBN(0xab9828c5, 0xd26c50f3), TOBN(0x32c0087c, 0x51d0d251),
-         TOBN(0x9bac3ce6, 0x0c1cdb26), TOBN(0xcd94d947, 0x557ca205),
-         TOBN(0x1b1bd598, 0x9db1fdcd), TOBN(0x0eda0108, 0xa3d8b149),
-         TOBN(0x95066610, 0x56152fcc), TOBN(0xc2f037e6, 0xe7192b33),
-         TOBN(0xdeffb41a, 0xc92e05a4), TOBN(0x1105f6c2, 0xc2f6c62e),
-         TOBN(0x68e73500, 0x8733913c), TOBN(0xcce86163, 0x3f3adc40),
-         TOBN(0xf407a942, 0x38a278e9), TOBN(0xd13c1b9d, 0x2ab21292),
-         TOBN(0x93ed7ec7, 0x1c74cf5c), TOBN(0x8887dc48, 0xf1a4c1b4),
-         TOBN(0x3830ff30, 0x4b3a11f1), TOBN(0x358c5a3c, 0x58937cb6),
-         TOBN(0x027dc404, 0x89022829), TOBN(0x40e93977, 0x3b798f79),
-         TOBN(0x90ad3337, 0x38be6ead), TOBN(0x9c23f6bc, 0xf34c0a5d),
-         TOBN(0xd1711a35, 0xfbffd8bb), TOBN(0x60fcfb49, 0x1949d3dd),
-         TOBN(0x09c8ef4b, 0x7825d93a), TOBN(0x24233cff, 0xa0a8c968),
-         TOBN(0x67ade46c, 0xe6d982af), TOBN(0xebb6bf3e, 0xe7544d7c),
-         TOBN(0xd6b9ba76, 0x3d8bd087), TOBN(0x46fe382d, 0x4dc61280),
-         TOBN(0xbd39a7e8, 0xb5bdbd75), TOBN(0xab381331, 0xb8f228fe),
-         TOBN(0x0709a77c, 0xce1c4300), TOBN(0x6a247e56, 0xf337ceac),
-         TOBN(0x8f34f21b, 0x636288be), TOBN(0x9dfdca74, 0xc8a7c305),
-         TOBN(0x6decfd1b, 0xea919e04), TOBN(0xcdf2688d, 0x8e1991f8),
-         TOBN(0xe607df44, 0xd0f8a67e), TOBN(0xd985df4b, 0x0b58d010),
-         TOBN(0x57f834c5, 0x0c24f8f4), TOBN(0xe976ef56, 0xa0bf01ae),
-         TOBN(0x536395ac, 0xa1c32373), TOBN(0x351027aa, 0x734c0a13),
-         TOBN(0xd2f1b5d6, 0x5e6bd5bc), TOBN(0x2b539e24, 0x223debed),
-         TOBN(0xd4994cec, 0x0eaa1d71), TOBN(0x2a83381d, 0x661dcf65),
-         TOBN(0x5f1aed2f, 0x7b54c740), TOBN(0x0bea3fa5, 0xd6dda5ee),
-         TOBN(0x9d4fb684, 0x36cc6134), TOBN(0x8eb9bbf3, 0xc0a443dd),
-         TOBN(0xfc500e2e, 0x383b7d2a), TOBN(0x7aad621c, 0x5b775257),
-         TOBN(0x69284d74, 0x0a8f7cc0), TOBN(0xe820c2ce, 0x07562d65),
-         TOBN(0xbf9531b9, 0x499758ee), TOBN(0x73e95ca5, 0x6ee0cc2d),
-         TOBN(0xf61790ab, 0xfbaf50a5), TOBN(0xdf55e76b, 0x684e0750),
-         TOBN(0xec516da7, 0xf176b005), TOBN(0x575553bb, 0x7a2dddc7),
-         TOBN(0x37c87ca3, 0x553afa73), TOBN(0x315f3ffc, 0x4d55c251),
-         TOBN(0xe846442a, 0xaf3e5d35), TOBN(0x61b91149, 0x6495ff28),
-         TOBN(0x23cc95d3, 0xfa326dc3), TOBN(0x1df4da1f, 0x18fc2cea),
-         TOBN(0x24bf9adc, 0xd0a37d59), TOBN(0xb6710053, 0x320d6e1e),
-         TOBN(0x96f9667e, 0x618344d1), TOBN(0xcc7ce042, 0xa06445af),
-         TOBN(0xa02d8514, 0xd68dbc3a), TOBN(0x4ea109e4, 0x280b5a5b),
-         TOBN(0x5741a7ac, 0xb40961bf), TOBN(0x4ada5937, 0x6aa56bfa),
-         TOBN(0x7feb9145, 0x02b765d1), TOBN(0x561e97be, 0xe6ad1582),
-         TOBN(0xbbc4a5b6, 0xda3982f5), TOBN(0x0c2659ed, 0xb546f468),
-         TOBN(0xb8e7e6aa, 0x59612d20), TOBN(0xd83dfe20, 0xac19e8e0),
-         TOBN(0x8530c45f, 0xb835398c), TOBN(0x6106a8bf, 0xb38a41c2),
-         TOBN(0x21e8f9a6, 0x35f5dcdb), TOBN(0x39707137, 0xcae498ed),
-         TOBN(0x70c23834, 0xd8249f00), TOBN(0x9f14b58f, 0xab2537a0),
-         TOBN(0xd043c365, 0x5f61c0c2), TOBN(0xdc5926d6, 0x09a194a7),
-         TOBN(0xddec0339, 0x8e77738a), TOBN(0xd07a63ef, 0xfba46426),
-         TOBN(0x2e58e79c, 0xee7f6e86), TOBN(0xe59b0459, 0xff32d241),
-         TOBN(0xc5ec84e5, 0x20fa0338), TOBN(0x97939ac8, 0xeaff5ace),
-         TOBN(0x0310a4e3, 0xb4a38313), TOBN(0x9115fba2, 0x8f9d9885),
-         TOBN(0x8dd710c2, 0x5fadf8c3), TOBN(0x66be38a2, 0xce19c0e2),
-         TOBN(0xd42a279c, 0x4cfe5022), TOBN(0x597bb530, 0x0e24e1b8),
-         TOBN(0x3cde86b7, 0xc153ca7f), TOBN(0xa8d30fb3, 0x707d63bd),
-         TOBN(0xac905f92, 0xbd60d21e), TOBN(0x98e7ffb6, 0x7b9a54ab),
-         TOBN(0xd7147df8, 0xe9726a30), TOBN(0xb5e216ff, 0xafce3533),
-         TOBN(0xb550b799, 0x2ff1ec40), TOBN(0x6b613b87, 0xa1e953fd),
-         TOBN(0x87b88dba, 0x792d5610), TOBN(0x2ee1270a, 0xa190fbe1),
-         TOBN(0x02f4e2dc, 0x2ef581da), TOBN(0x016530e4, 0xeff82a95),
-         TOBN(0xcbb93dfd, 0x8fd6ee89), TOBN(0x16d3d986, 0x46848fff),
-         TOBN(0x600eff24, 0x1da47adf), TOBN(0x1b9754a0, 0x0ad47a71),
-         TOBN(0x8f9266df, 0x70c33b98), TOBN(0xaadc87ae, 0xdf34186e),
-         TOBN(0x0d2ce8e1, 0x4ad24132), TOBN(0x8a47cbfc, 0x19946eba),
-         TOBN(0x47feeb66, 0x62b5f3af), TOBN(0xcefab561, 0x0abb3734),
-         TOBN(0x449de60e, 0x19f35cb1), TOBN(0x39f8db14, 0x157f0eb9),
-         TOBN(0xffaecc5b, 0x3c61bfd6), TOBN(0xa5a4d41d, 0x41216703),
-         TOBN(0x7f8fabed, 0x224e1cc2), TOBN(0x0d5a8186, 0x871ad953),
-         TOBN(0xf10774f7, 0xd22da9a9), TOBN(0x45b8a678, 0xcc8a9b0d),
-         TOBN(0xd9c2e722, 0xbdc32cff), TOBN(0xbf71b5f5, 0x337202a5),
-         TOBN(0x95c57f2f, 0x69fc4db9), TOBN(0xb6dad34c, 0x765d01e1),
-         TOBN(0x7e0bd13f, 0xcb904635), TOBN(0x61751253, 0x763a588c),
-         TOBN(0xd85c2997, 0x81af2c2d), TOBN(0xc0f7d9c4, 0x81b9d7da),
-         TOBN(0x838a34ae, 0x08533e8d), TOBN(0x15c4cb08, 0x311d8311),
-         TOBN(0x97f83285, 0x8e121e14), TOBN(0xeea7dc1e, 0x85000a5f),
-         TOBN(0x0c6059b6, 0x5d256274), TOBN(0xec9beace, 0xb95075c0),
-         TOBN(0x173daad7, 0x1df97828), TOBN(0xbf851cb5, 0xa8937877),
-         TOBN(0xb083c594, 0x01646f3c), TOBN(0x3bad30cf, 0x50c6d352),
-         TOBN(0xfeb2b202, 0x496bbcea), TOBN(0x3cf9fd4f, 0x18a1e8ba),
-         TOBN(0xd26de7ff, 0x1c066029), TOBN(0x39c81e9e, 0x4e9ed4f8),
-         TOBN(0xd8be0cb9, 0x7b390d35), TOBN(0x01df2bbd, 0x964aab27),
-         TOBN(0x3e8c1a65, 0xc3ef64f8), TOBN(0x567291d1, 0x716ed1dd),
-         TOBN(0x95499c6c, 0x5f5406d3), TOBN(0x71fdda39, 0x5ba8e23f),
-         TOBN(0xcfeb320e, 0xd5096ece), TOBN(0xbe7ba92b, 0xca66dd16),
-         TOBN(0x4608d36b, 0xc6fb5a7d), TOBN(0xe3eea15a, 0x6d2dd0e0),
-         TOBN(0x75b0a3eb, 0x8f97a36a), TOBN(0xf59814cc, 0x1c83de1e),
-         TOBN(0x56c9c5b0, 0x1c33c23f), TOBN(0xa96c1da4, 0x6faa4136),
-         TOBN(0x46bf2074, 0xde316551), TOBN(0x3b866e7b, 0x1f756c8f),
-         TOBN(0x727727d8, 0x1495ed6b), TOBN(0xb2394243, 0xb682dce7),
-         TOBN(0x8ab8454e, 0x758610f3), TOBN(0xc243ce84, 0x857d72a4),
-         TOBN(0x7b320d71, 0xdbbf370f), TOBN(0xff9afa37, 0x78e0f7ca),
-         TOBN(0x0119d1e0, 0xea7b523f), TOBN(0xb997f8cb, 0x058c7d42),
-         TOBN(0x285bcd2a, 0x37bbb184), TOBN(0x51dcec49, 0xa45d1fa6),
-         TOBN(0x6ade3b64, 0xe29634cb), TOBN(0x080c94a7, 0x26b86ef1),
-         TOBN(0xba583db1, 0x2283fbe3), TOBN(0x902bddc8, 0x5a9315ed),
-         TOBN(0x07c1ccb3, 0x86964bec), TOBN(0x78f4eacf, 0xb6258301),
-         TOBN(0x4bdf3a49, 0x56f90823), TOBN(0xba0f5080, 0x741d777b),
-         TOBN(0x091d71c3, 0xf38bf760), TOBN(0x9633d50f, 0x9b625b02),
-         TOBN(0x03ecb743, 0xb8c9de61), TOBN(0xb4751254, 0x5de74720),
-         TOBN(0x9f9defc9, 0x74ce1cb2), TOBN(0x774a4f6a, 0x00bd32ef),
-         TOBN(0xaca385f7, 0x73848f22), TOBN(0x53dad716, 0xf3f8558e),
-         TOBN(0xab7b34b0, 0x93c471f9), TOBN(0xf530e069, 0x19644bc7),
-         TOBN(0x3d9fb1ff, 0xdd59d31a), TOBN(0x4382e0df, 0x08daa795),
-         TOBN(0x165c6f4b, 0xd5cc88d7), TOBN(0xeaa392d5, 0x4a18c900),
-         TOBN(0x94203c67, 0x648024ee), TOBN(0x188763f2, 0x8c2fabcd),
-         TOBN(0xa80f87ac, 0xbbaec835), TOBN(0x632c96e0, 0xf29d8d54),
-         TOBN(0x29b0a60e, 0x4c00a95e), TOBN(0x2ef17f40, 0xe011e9fa),
-         TOBN(0xf6c0e1d1, 0x15b77223), TOBN(0xaaec2c62, 0x14b04e32),
-         TOBN(0xd35688d8, 0x3d84e58c), TOBN(0x2af5094c, 0x958571db),
-         TOBN(0x4fff7e19, 0x760682a6), TOBN(0x4cb27077, 0xe39a407c),
-         TOBN(0x0f59c547, 0x4ff0e321), TOBN(0x169f34a6, 0x1b34c8ff),
-         TOBN(0x2bff1096, 0x52bc1ba7), TOBN(0xa25423b7, 0x83583544),
-         TOBN(0x5d55d5d5, 0x0ac8b782), TOBN(0xff6622ec, 0x2db3c892),
-         TOBN(0x48fce741, 0x6b8bb642), TOBN(0x31d6998c, 0x69d7e3dc),
-         TOBN(0xdbaf8004, 0xcadcaed0), TOBN(0x801b0142, 0xd81d053c),
-         TOBN(0x94b189fc, 0x59630ec6), TOBN(0x120e9934, 0xaf762c8e),
-         TOBN(0x53a29aa4, 0xfdc6a404), TOBN(0x19d8e01e, 0xa1909948),
-         TOBN(0x3cfcabf1, 0xd7e89681), TOBN(0x3321a50d, 0x4e132d37),
-         TOBN(0xd0496863, 0xe9a86111), TOBN(0x8c0cde61, 0x06a3bc65),
-         TOBN(0xaf866c49, 0xfc9f8eef), TOBN(0x2066350e, 0xff7f5141),
-         TOBN(0x4f8a4689, 0xe56ddfbd), TOBN(0xea1b0c07, 0xfe32983a),
-         TOBN(0x2b317462, 0x873cb8cb), TOBN(0x658deddc, 0x2d93229f),
-         TOBN(0x65efaf4d, 0x0f64ef58), TOBN(0xfe43287d, 0x730cc7a8),
-         TOBN(0xaebc0c72, 0x3d047d70), TOBN(0x92efa539, 0xd92d26c9),
-         TOBN(0x06e78457, 0x94b56526), TOBN(0x415cb80f, 0x0961002d),
-         TOBN(0x89e5c565, 0x76dcb10f), TOBN(0x8bbb6982, 0xff9259fe),
-         TOBN(0x4fe8795b, 0x9abc2668), TOBN(0xb5d4f534, 0x1e678fb1),
-         TOBN(0x6601f3be, 0x7b7da2b9), TOBN(0x98da59e2, 0xa13d6805),
-         TOBN(0x190d8ea6, 0x01799a52), TOBN(0xa20cec41, 0xb86d2952),
-         TOBN(0x3062ffb2, 0x7fff2a7c), TOBN(0x741b32e5, 0x79f19d37),
-         TOBN(0xf80d8181, 0x4eb57d47), TOBN(0x7a2d0ed4, 0x16aef06b),
-         TOBN(0x09735fb0, 0x1cecb588), TOBN(0x1641caaa, 0xc6061f5b)},
-        {TOBN(0x7f99824f, 0x20151427), TOBN(0x206828b6, 0x92430206),
-         TOBN(0xaa9097d7, 0xe1112357), TOBN(0xacf9a2f2, 0x09e414ec),
-         TOBN(0xdbdac9da, 0x27915356), TOBN(0x7e0734b7, 0x001efee3),
-         TOBN(0x54fab5bb, 0xd2b288e2), TOBN(0x4c630fc4, 0xf62dd09c),
-         TOBN(0x8537107a, 0x1ac2703b), TOBN(0xb49258d8, 0x6bc857b5),
-         TOBN(0x57df14de, 0xbcdaccd1), TOBN(0x24ab68d7, 0xc4ae8529),
-         TOBN(0x7ed8b5d4, 0x734e59d0), TOBN(0x5f8740c8, 0xc495cc80),
-         TOBN(0x84aedd5a, 0x291db9b3), TOBN(0x80b360f8, 0x4fb995be),
-         TOBN(0xae915f5d, 0x5fa067d1), TOBN(0x4134b57f, 0x9668960c),
-         TOBN(0xbd3656d6, 0xa48edaac), TOBN(0xdac1e3e4, 0xfc1d7436),
-         TOBN(0x674ff869, 0xd81fbb26), TOBN(0x449ed3ec, 0xb26c33d4),
-         TOBN(0x85138705, 0xd94203e8), TOBN(0xccde538b, 0xbeeb6f4a),
-         TOBN(0x55d5c68d, 0xa61a76fa), TOBN(0x598b441d, 0xca1554dc),
-         TOBN(0xd39923b9, 0x773b279c), TOBN(0x33331d3c, 0x36bf9efc),
-         TOBN(0x2d4c848e, 0x298de399), TOBN(0xcfdb8e77, 0xa1a27f56),
-         TOBN(0x94c855ea, 0x57b8ab70), TOBN(0xdcdb9dae, 0x6f7879ba),
-         TOBN(0x7bdff8c2, 0x019f2a59), TOBN(0xb3ce5bb3, 0xcb4fbc74),
-         TOBN(0xea907f68, 0x8a9173dd), TOBN(0x6cd3d0d3, 0x95a75439),
-         TOBN(0x92ecc4d6, 0xefed021c), TOBN(0x09a9f9b0, 0x6a77339a),
-         TOBN(0x87ca6b15, 0x7188c64a), TOBN(0x10c29968, 0x44899158),
-         TOBN(0x5859a229, 0xed6e82ef), TOBN(0x16f338e3, 0x65ebaf4e),
-         TOBN(0x0cd31387, 0x5ead67ae), TOBN(0x1c73d228, 0x54ef0bb4),
-         TOBN(0x4cb55131, 0x74a5c8c7), TOBN(0x01cd2970, 0x7f69ad6a),
-         TOBN(0xa04d00dd, 0xe966f87e), TOBN(0xd96fe447, 0x0b7b0321),
-         TOBN(0x342ac06e, 0x88fbd381), TOBN(0x02cd4a84, 0x5c35a493),
-         TOBN(0xe8fa89de, 0x54f1bbcd), TOBN(0x341d6367, 0x2575ed4c),
-         TOBN(0xebe357fb, 0xd238202b), TOBN(0x600b4d1a, 0xa984ead9),
-         TOBN(0xc35c9f44, 0x52436ea0), TOBN(0x96fe0a39, 0xa370751b),
-         TOBN(0x4c4f0736, 0x7f636a38), TOBN(0x9f943fb7, 0x0e76d5cb),
-         TOBN(0xb03510ba, 0xa8b68b8b), TOBN(0xc246780a, 0x9ed07a1f),
-         TOBN(0x3c051415, 0x6d549fc2), TOBN(0xc2953f31, 0x607781ca),
-         TOBN(0x955e2c69, 0xd8d95413), TOBN(0xb300fadc, 0x7bd282e3),
-         TOBN(0x81fe7b50, 0x87e9189f), TOBN(0xdb17375c, 0xf42dda27),
-         TOBN(0x22f7d896, 0xcf0a5904), TOBN(0xa0e57c5a, 0xebe348e6),
-         TOBN(0xa61011d3, 0xf40e3c80), TOBN(0xb1189321, 0x8db705c5),
-         TOBN(0x4ed9309e, 0x50fedec3), TOBN(0xdcf14a10, 0x4d6d5c1d),
-         TOBN(0x056c265b, 0x55691342), TOBN(0xe8e08504, 0x91049dc7),
-         TOBN(0x131329f5, 0xc9bae20a), TOBN(0x96c8b3e8, 0xd9dccdb4),
-         TOBN(0x8c5ff838, 0xfb4ee6b4), TOBN(0xfc5a9aeb, 0x41e8ccf0),
-         TOBN(0x7417b764, 0xfae050c6), TOBN(0x0953c3d7, 0x00452080),
-         TOBN(0x21372682, 0x38dfe7e8), TOBN(0xea417e15, 0x2bb79d4b),
-         TOBN(0x59641f1c, 0x76e7cf2d), TOBN(0x271e3059, 0xea0bcfcc),
-         TOBN(0x624c7dfd, 0x7253ecbd), TOBN(0x2f552e25, 0x4fca6186),
-         TOBN(0xcbf84ecd, 0x4d866e9c), TOBN(0x73967709, 0xf68d4610),
-         TOBN(0xa14b1163, 0xc27901b4), TOBN(0xfd9236e0, 0x899b8bf3),
-         TOBN(0x42b091ec, 0xcbc6da0a), TOBN(0xbb1dac6f, 0x5ad1d297),
-         TOBN(0x80e61d53, 0xa91cf76e), TOBN(0x4110a412, 0xd31f1ee7),
-         TOBN(0x2d87c3ba, 0x13efcf77), TOBN(0x1f374bb4, 0xdf450d76),
-         TOBN(0x5e78e2f2, 0x0d188dab), TOBN(0xe3968ed0, 0xf4b885ef),
-         TOBN(0x46c0568e, 0x7314570f), TOBN(0x31616338, 0x01170521),
-         TOBN(0x18e1e7e2, 0x4f0c8afe), TOBN(0x4caa75ff, 0xdeea78da),
-         TOBN(0x82db67f2, 0x7c5d8a51), TOBN(0x36a44d86, 0x6f505370),
-         TOBN(0xd72c5bda, 0x0333974f), TOBN(0x5db516ae, 0x27a70146),
-         TOBN(0x34705281, 0x210ef921), TOBN(0xbff17a8f, 0x0c9c38e5),
-         TOBN(0x78f4814e, 0x12476da1), TOBN(0xc1e16613, 0x33c16980),
-         TOBN(0x9e5b386f, 0x424d4bca), TOBN(0x4c274e87, 0xc85740de),
-         TOBN(0xb6a9b88d, 0x6c2f5226), TOBN(0x14d1b944, 0x550d7ca8),
-         TOBN(0x580c85fc, 0x1fc41709), TOBN(0xc1da368b, 0x54c6d519),
-         TOBN(0x2b0785ce, 0xd5113cf7), TOBN(0x0670f633, 0x5a34708f),
-         TOBN(0x46e23767, 0x15cc3f88), TOBN(0x1b480cfa, 0x50c72c8f),
-         TOBN(0x20288602, 0x4147519a), TOBN(0xd0981eac, 0x26b372f0),
-         TOBN(0xa9d4a7ca, 0xa785ebc8), TOBN(0xd953c50d, 0xdbdf58e9),
-         TOBN(0x9d6361cc, 0xfd590f8f), TOBN(0x72e9626b, 0x44e6c917),
-         TOBN(0x7fd96110, 0x22eb64cf), TOBN(0x863ebb7e, 0x9eb288f3),
-         TOBN(0x6e6ab761, 0x6aca8ee7), TOBN(0x97d10b39, 0xd7b40358),
-         TOBN(0x1687d377, 0x1e5feb0d), TOBN(0xc83e50e4, 0x8265a27a),
-         TOBN(0x8f75a9fe, 0xc954b313), TOBN(0xcc2e8f47, 0x310d1f61),
-         TOBN(0xf5ba81c5, 0x6557d0e0), TOBN(0x25f9680c, 0x3eaf6207),
-         TOBN(0xf95c6609, 0x4354080b), TOBN(0x5225bfa5, 0x7bf2fe1c),
-         TOBN(0xc5c004e2, 0x5c7d98fa), TOBN(0x3561bf1c, 0x019aaf60),
-         TOBN(0x5e6f9f17, 0xba151474), TOBN(0xdec2f934, 0xb04f6eca),
-         TOBN(0x64e368a1, 0x269acb1e), TOBN(0x1332d9e4, 0x0cdda493),
-         TOBN(0x60d6cf69, 0xdf23de05), TOBN(0x66d17da2, 0x009339a0),
-         TOBN(0x9fcac985, 0x0a693923), TOBN(0xbcf057fc, 0xed7c6a6d),
-         TOBN(0xc3c5c8c5, 0xf0b5662c), TOBN(0x25318dd8, 0xdcba4f24),
-         TOBN(0x60e8cb75, 0x082b69ff), TOBN(0x7c23b3ee, 0x1e728c01),
-         TOBN(0x15e10a0a, 0x097e4403), TOBN(0xcb3d0a86, 0x19854665),
-         TOBN(0x88d8e211, 0xd67d4826), TOBN(0xb39af66e, 0x0b9d2839),
-         TOBN(0xa5f94588, 0xbd475ca8), TOBN(0xe06b7966, 0xc077b80b),
-         TOBN(0xfedb1485, 0xda27c26c), TOBN(0xd290d33a, 0xfe0fd5e0),
-         TOBN(0xa40bcc47, 0xf34fb0fa), TOBN(0xb4760cc8, 0x1fb1ab09),
-         TOBN(0x8fca0993, 0xa273bfe3), TOBN(0x13e4fe07, 0xf70b213c),
-         TOBN(0x3bcdb992, 0xfdb05163), TOBN(0x8c484b11, 0x0c2b19b6),
-         TOBN(0x1acb815f, 0xaaf2e3e2), TOBN(0xc6905935, 0xb89ff1b4),
-         TOBN(0xb2ad6f9d, 0x586e74e1), TOBN(0x488883ad, 0x67b80484),
-         TOBN(0x758aa2c7, 0x369c3ddb), TOBN(0x8ab74e69, 0x9f9afd31),
-         TOBN(0x10fc2d28, 0x5e21beb1), TOBN(0x3484518a, 0x318c42f9),
-         TOBN(0x377427dc, 0x53cf40c3), TOBN(0x9de0781a, 0x391bc1d9),
-         TOBN(0x8faee858, 0x693807e1), TOBN(0xa3865327, 0x4e81ccc7),
-         TOBN(0x02c30ff2, 0x6f835b84), TOBN(0xb604437b, 0x0d3d38d4),
-         TOBN(0xb3fc8a98, 0x5ca1823d), TOBN(0xb82f7ec9, 0x03be0324),
-         TOBN(0xee36d761, 0xcf684a33), TOBN(0x5a01df0e, 0x9f29bf7d),
-         TOBN(0x686202f3, 0x1306583d), TOBN(0x05b10da0, 0x437c622e),
-         TOBN(0xbf9aaa0f, 0x076a7bc8), TOBN(0x25e94efb, 0x8f8f4e43),
-         TOBN(0x8a35c9b7, 0xfa3dc26d), TOBN(0xe0e5fb93, 0x96ff03c5),
-         TOBN(0xa77e3843, 0xebc394ce), TOBN(0xcede6595, 0x8361de60),
-         TOBN(0xd27c22f6, 0xa1993545), TOBN(0xab01cc36, 0x24d671ba),
-         TOBN(0x63fa2877, 0xa169c28e), TOBN(0x925ef904, 0x2eb08376),
-         TOBN(0x3b2fa3cf, 0x53aa0b32), TOBN(0xb27beb5b, 0x71c49d7a),
-         TOBN(0xb60e1834, 0xd105e27f), TOBN(0xd6089788, 0x4f68570d),
-         TOBN(0x23094ce0, 0xd6fbc2ac), TOBN(0x738037a1, 0x815ff551),
-         TOBN(0xda73b1bb, 0x6bef119c), TOBN(0xdcf6c430, 0xeef506ba),
-         TOBN(0x00e4fe7b, 0xe3ef104a), TOBN(0xebdd9a2c, 0x0a065628),
-         TOBN(0x853a81c3, 0x8792043e), TOBN(0x22ad6ece, 0xb3b59108),
-         TOBN(0x9fb813c0, 0x39cd297d), TOBN(0x8ec7e16e, 0x05bda5d9),
-         TOBN(0x2834797c, 0x0d104b96), TOBN(0xcc11a2e7, 0x7c511510),
-         TOBN(0x96ca5a53, 0x96ee6380), TOBN(0x054c8655, 0xcea38742),
-         TOBN(0xb5946852, 0xd54dfa7d), TOBN(0x97c422e7, 0x1f4ab207),
-         TOBN(0xbf907509, 0x0c22b540), TOBN(0x2cde42aa, 0xb7c267d4),
-         TOBN(0xba18f9ed, 0x5ab0d693), TOBN(0x3ba62aa6, 0x6e4660d9),
-         TOBN(0xb24bf97b, 0xab9ea96a), TOBN(0x5d039642, 0xe3b60e32),
-         TOBN(0x4e6a4506, 0x7c4d9bd5), TOBN(0x666c5b9e, 0x7ed4a6a4),
-         TOBN(0xfa3fdcd9, 0x8edbd7cc), TOBN(0x4660bb87, 0xc6ccd753),
-         TOBN(0x9ae90820, 0x21e6b64f), TOBN(0x8a56a713, 0xb36bfb3f),
-         TOBN(0xabfce096, 0x5726d47f), TOBN(0x9eed01b2, 0x0b1a9a7f),
-         TOBN(0x30e9cad4, 0x4eb74a37), TOBN(0x7b2524cc, 0x53e9666d),
-         TOBN(0x6a29683b, 0x8f4b002f), TOBN(0xc2200d7a, 0x41f4fc20),
-         TOBN(0xcf3af47a, 0x3a338acc), TOBN(0x6539a4fb, 0xe7128975),
-         TOBN(0xcec31c14, 0xc33c7fcf), TOBN(0x7eb6799b, 0xc7be322b),
-         TOBN(0x119ef4e9, 0x6646f623), TOBN(0x7b7a26a5, 0x54d7299b),
-         TOBN(0xcb37f08d, 0x403f46f2), TOBN(0x94b8fc43, 0x1a0ec0c7),
-         TOBN(0xbb8514e3, 0xc332142f), TOBN(0xf3ed2c33, 0xe80d2a7a),
-         TOBN(0x8d2080af, 0xb639126c), TOBN(0xf7b6be60, 0xe3553ade),
-         TOBN(0x3950aa9f, 0x1c7e2b09), TOBN(0x847ff958, 0x6410f02b),
-         TOBN(0x877b7cf5, 0x678a31b0), TOBN(0xd50301ae, 0x3998b620),
-         TOBN(0x734257c5, 0xc00fb396), TOBN(0xf9fb18a0, 0x04e672a6),
-         TOBN(0xff8bd8eb, 0xe8758851), TOBN(0x1e64e4c6, 0x5d99ba44),
-         TOBN(0x4b8eaedf, 0x7dfd93b7), TOBN(0xba2f2a98, 0x04e76b8c),
-         TOBN(0x7d790cba, 0xe8053433), TOBN(0xc8e725a0, 0x3d2c9585),
-         TOBN(0x58c5c476, 0xcdd8f5ed), TOBN(0xd106b952, 0xefa9fe1d),
-         TOBN(0x3c5c775b, 0x0eff13a9), TOBN(0x242442ba, 0xe057b930),
-         TOBN(0xe9f458d4, 0xc9b70cbd), TOBN(0x69b71448, 0xa3cdb89a),
-         TOBN(0x41ee46f6, 0x0e2ed742), TOBN(0x573f1045, 0x40067493),
-         TOBN(0xb1e154ff, 0x9d54c304), TOBN(0x2ad0436a, 0x8d3a7502),
-         TOBN(0xee4aaa2d, 0x431a8121), TOBN(0xcd38b3ab, 0x886f11ed),
-         TOBN(0x57d49ea6, 0x034a0eb7), TOBN(0xd2b773bd, 0xf7e85e58),
-         TOBN(0x4a559ac4, 0x9b5c1f14), TOBN(0xc444be1a, 0x3e54df2b),
-         TOBN(0x13aad704, 0xeda41891), TOBN(0xcd927bec, 0x5eb5c788),
-         TOBN(0xeb3c8516, 0xe48c8a34), TOBN(0x1b7ac812, 0x4b546669),
-         TOBN(0x1815f896, 0x594df8ec), TOBN(0x87c6a79c, 0x79227865),
-         TOBN(0xae02a2f0, 0x9b56ddbd), TOBN(0x1339b5ac, 0x8a2f1cf3),
-         TOBN(0xf2b569c7, 0x839dff0d), TOBN(0xb0b9e864, 0xfee9a43d),
-         TOBN(0x4ff8ca41, 0x77bb064e), TOBN(0x145a2812, 0xfd249f63),
-         TOBN(0x3ab7beac, 0xf86f689a), TOBN(0x9bafec27, 0x01d35f5e),
-         TOBN(0x28054c65, 0x4265aa91), TOBN(0xa4b18304, 0x035efe42),
-         TOBN(0x6887b0e6, 0x9639dec7), TOBN(0xf4b8f6ad, 0x3d52aea5),
-         TOBN(0xfb9293cc, 0x971a8a13), TOBN(0x3f159e5d, 0x4c934d07),
-         TOBN(0x2c50e9b1, 0x09acbc29), TOBN(0x08eb65e6, 0x7154d129),
-         TOBN(0x4feff589, 0x30b75c3e), TOBN(0x0bb82fe2, 0x94491c93),
-         TOBN(0xd8ac377a, 0x89af62bb), TOBN(0xd7b51490, 0x9685e49f),
-         TOBN(0xabca9a7b, 0x04497f19), TOBN(0x1b35ed0a, 0x1a7ad13f),
-         TOBN(0x6b601e21, 0x3ec86ed6), TOBN(0xda91fcb9, 0xce0c76f1),
-         TOBN(0x9e28507b, 0xd7ab27e1), TOBN(0x7c19a555, 0x63945b7b),
-         TOBN(0x6b43f0a1, 0xaafc9827), TOBN(0x443b4fbd, 0x3aa55b91),
-         TOBN(0x962b2e65, 0x6962c88f), TOBN(0x139da8d4, 0xce0db0ca),
-         TOBN(0xb93f05dd, 0x1b8d6c4f), TOBN(0x779cdff7, 0x180b9824),
-         TOBN(0xbba23fdd, 0xae57c7b7), TOBN(0x345342f2, 0x1b932522),
-         TOBN(0xfd9c80fe, 0x556d4aa3), TOBN(0xa03907ba, 0x6525bb61),
-         TOBN(0x38b010e1, 0xff218933), TOBN(0xc066b654, 0xaa52117b),
-         TOBN(0x8e141920, 0x94f2e6ea), TOBN(0x66a27dca, 0x0d32f2b2),
-         TOBN(0x69c7f993, 0x048b3717), TOBN(0xbf5a989a, 0xb178ae1c),
-         TOBN(0x49fa9058, 0x564f1d6b), TOBN(0x27ec6e15, 0xd31fde4e),
-         TOBN(0x4cce0373, 0x7276e7fc), TOBN(0x64086d79, 0x89d6bf02),
-         TOBN(0x5a72f046, 0x4ccdd979), TOBN(0x909c3566, 0x47775631),
-         TOBN(0x1c07bc6b, 0x75dd7125), TOBN(0xb4c6bc97, 0x87a0428d),
-         TOBN(0x507ece52, 0xfdeb6b9d), TOBN(0xfca56512, 0xb2c95432),
-         TOBN(0x15d97181, 0xd0e8bd06), TOBN(0x384dd317, 0xc6bb46ea),
-         TOBN(0x5441ea20, 0x3952b624), TOBN(0xbcf70dee, 0x4e7dc2fb),
-         TOBN(0x372b016e, 0x6628e8c3), TOBN(0x07a0d667, 0xb60a7522),
-         TOBN(0xcf05751b, 0x0a344ee2), TOBN(0x0ec09a48, 0x118bdeec),
-         TOBN(0x6e4b3d4e, 0xd83dce46), TOBN(0x43a6316d, 0x99d2fc6e),
-         TOBN(0xa99d8989, 0x56cf044c), TOBN(0x7c7f4454, 0xae3e5fb7),
-         TOBN(0xb2e6b121, 0xfbabbe92), TOBN(0x281850fb, 0xe1330076),
-         TOBN(0x093581ec, 0x97890015), TOBN(0x69b1dded, 0x75ff77f5),
-         TOBN(0x7cf0b18f, 0xab105105), TOBN(0x953ced31, 0xa89ccfef),
-         TOBN(0x3151f85f, 0xeb914009), TOBN(0x3c9f1b87, 0x88ed48ad),
-         TOBN(0xc9aba1a1, 0x4a7eadcb), TOBN(0x928e7501, 0x522e71cf),
-         TOBN(0xeaede727, 0x3a2e4f83), TOBN(0x467e10d1, 0x1ce3bbd3),
-         TOBN(0xf3442ac3, 0xb955dcf0), TOBN(0xba96307d, 0xd3d5e527),
-         TOBN(0xf763a10e, 0xfd77f474), TOBN(0x5d744bd0, 0x6a6e1ff0),
-         TOBN(0xd287282a, 0xa777899e), TOBN(0xe20eda8f, 0xd03f3cde),
-         TOBN(0x6a7e75bb, 0x50b07d31), TOBN(0x0b7e2a94, 0x6f379de4),
-         TOBN(0x31cb64ad, 0x19f593cf), TOBN(0x7b1a9e4f, 0x1e76ef1d),
-         TOBN(0xe18c9c9d, 0xb62d609c), TOBN(0x439bad6d, 0xe779a650),
-         TOBN(0x219d9066, 0xe032f144), TOBN(0x1db632b8, 0xe8b2ec6a),
-         TOBN(0xff0d0fd4, 0xfda12f78), TOBN(0x56fb4c2d, 0x2a25d265),
-         TOBN(0x5f4e2ee1, 0x255a03f1), TOBN(0x61cd6af2, 0xe96af176),
-         TOBN(0xe0317ba8, 0xd068bc97), TOBN(0x927d6bab, 0x264b988e),
-         TOBN(0xa18f07e0, 0xe90fb21e), TOBN(0x00fd2b80, 0xbba7fca1),
-         TOBN(0x20387f27, 0x95cd67b5), TOBN(0x5b89a4e7, 0xd39707f7),
-         TOBN(0x8f83ad3f, 0x894407ce), TOBN(0xa0025b94, 0x6c226132),
-         TOBN(0xc79563c7, 0xf906c13b), TOBN(0x5f548f31, 0x4e7bb025),
-         TOBN(0x2b4c6b8f, 0xeac6d113), TOBN(0xa67e3f9c, 0x0e813c76),
-         TOBN(0x3982717c, 0x3fe1f4b9), TOBN(0x58865819, 0x26d8050e),
-         TOBN(0x99f3640c, 0xf7f06f20), TOBN(0xdc610216, 0x2a66ebc2),
-         TOBN(0x52f2c175, 0x767a1e08), TOBN(0x05660e1a, 0x5999871b),
-         TOBN(0x6b0f1762, 0x6d3c4693), TOBN(0xf0e7d627, 0x37ed7bea),
-         TOBN(0xc51758c7, 0xb75b226d), TOBN(0x40a88628, 0x1f91613b),
-         TOBN(0x889dbaa7, 0xbbb38ce0), TOBN(0xe0404b65, 0xbddcad81),
-         TOBN(0xfebccd3a, 0x8bc9671f), TOBN(0xfbf9a357, 0xee1f5375),
-         TOBN(0x5dc169b0, 0x28f33398), TOBN(0xb07ec11d, 0x72e90f65),
-         TOBN(0xae7f3b4a, 0xfaab1eb1), TOBN(0xd970195e, 0x5f17538a),
-         TOBN(0x52b05cbe, 0x0181e640), TOBN(0xf5debd62, 0x2643313d),
-         TOBN(0x76148154, 0x5df31f82), TOBN(0x23e03b33, 0x3a9e13c5),
-         TOBN(0xff758949, 0x4fde0c1f), TOBN(0xbf8a1abe, 0xe5b6ec20),
-         TOBN(0x702278fb, 0x87e1db6c), TOBN(0xc447ad7a, 0x35ed658f),
-         TOBN(0x48d4aa38, 0x03d0ccf2), TOBN(0x80acb338, 0x819a7c03),
-         TOBN(0x9bc7c89e, 0x6e17cecc), TOBN(0x46736b8b, 0x03be1d82),
-         TOBN(0xd65d7b60, 0xc0432f96), TOBN(0xddebe7a3, 0xdeb5442f),
-         TOBN(0x79a25307, 0x7dff69a2), TOBN(0x37a56d94, 0x02cf3122),
-         TOBN(0x8bab8aed, 0xf2350d0a), TOBN(0x13c3f276, 0x037b0d9a),
-         TOBN(0xc664957c, 0x44c65cae), TOBN(0x88b44089, 0xc2e71a88),
-         TOBN(0xdb88e5a3, 0x5cb02664), TOBN(0x5d4c0bf1, 0x8686c72e),
-         TOBN(0xea3d9b62, 0xa682d53e), TOBN(0x9b605ef4, 0x0b2ad431),
-         TOBN(0x71bac202, 0xc69645d0), TOBN(0xa115f03a, 0x6a1b66e7),
-         TOBN(0xfe2c563a, 0x158f4dc4), TOBN(0xf715b3a0, 0x4d12a78c),
-         TOBN(0x8f7f0a48, 0xd413213a), TOBN(0x2035806d, 0xc04becdb),
-         TOBN(0xecd34a99, 0x5d8587f5), TOBN(0x4d8c3079, 0x9f6d3a71),
-         TOBN(0x1b2a2a67, 0x8d95a8f6), TOBN(0xc58c9d7d, 0xf2110d0d),
-         TOBN(0xdeee81d5, 0xcf8fba3f), TOBN(0xa42be3c0, 0x0c7cdf68),
-         TOBN(0x2126f742, 0xd43b5eaa), TOBN(0x054a0766, 0xdfa59b85),
-         TOBN(0x9d0d5e36, 0x126bfd45), TOBN(0xa1f8fbd7, 0x384f8a8f),
-         TOBN(0x317680f5, 0xd563fccc), TOBN(0x48ca5055, 0xf280a928),
-         TOBN(0xe00b81b2, 0x27b578cf), TOBN(0x10aad918, 0x2994a514),
-         TOBN(0xd9e07b62, 0xb7bdc953), TOBN(0x9f0f6ff2, 0x5bc086dd),
-         TOBN(0x09d1ccff, 0x655eee77), TOBN(0x45475f79, 0x5bef7df1),
-         TOBN(0x3faa28fa, 0x86f702cc), TOBN(0x92e60905, 0x0f021f07),
-         TOBN(0xe9e62968, 0x7f8fa8c6), TOBN(0xbd71419a, 0xf036ea2c),
-         TOBN(0x171ee1cc, 0x6028da9a), TOBN(0x5352fe1a, 0xc251f573),
-         TOBN(0xf8ff236e, 0x3fa997f4), TOBN(0xd831b6c9, 0xa5749d5f),
-         TOBN(0x7c872e1d, 0xe350e2c2), TOBN(0xc56240d9, 0x1e0ce403),
-         TOBN(0xf9deb077, 0x6974f5cb), TOBN(0x7d50ba87, 0x961c3728),
-         TOBN(0xd6f89426, 0x5a3a2518), TOBN(0xcf817799, 0xc6303d43),
-         TOBN(0x510a0471, 0x619e5696), TOBN(0xab049ff6, 0x3a5e307b),
-         TOBN(0xe4cdf9b0, 0xfeb13ec7), TOBN(0xd5e97117, 0x9d8ff90c),
-         TOBN(0xf6f64d06, 0x9afa96af), TOBN(0x00d0bf5e, 0x9d2012a2),
-         TOBN(0xe63f301f, 0x358bcdc0), TOBN(0x07689e99, 0x0a9d47f8),
-         TOBN(0x1f689e2f, 0x4f43d43a), TOBN(0x4d542a16, 0x90920904),
-         TOBN(0xaea293d5, 0x9ca0a707), TOBN(0xd061fe45, 0x8ac68065),
-         TOBN(0x1033bf1b, 0x0090008c), TOBN(0x29749558, 0xc08a6db6),
-         TOBN(0x74b5fc59, 0xc1d5d034), TOBN(0xf712e9f6, 0x67e215e0),
-         TOBN(0xfd520cbd, 0x860200e6), TOBN(0x0229acb4, 0x3ea22588),
-         TOBN(0x9cd1e14c, 0xfff0c82e), TOBN(0x87684b62, 0x59c69e73),
-         TOBN(0xda85e61c, 0x96ccb989), TOBN(0x2d5dbb02, 0xa3d06493),
-         TOBN(0xf22ad33a, 0xe86b173c), TOBN(0xe8e41ea5, 0xa79ff0e3),
-         TOBN(0x01d2d725, 0xdd0d0c10), TOBN(0x31f39088, 0x032d28f9),
-         TOBN(0x7b3f71e1, 0x7829839e), TOBN(0x0cf691b4, 0x4502ae58),
-         TOBN(0xef658dbd, 0xbefc6115), TOBN(0xa5cd6ee5, 0xb3ab5314),
-         TOBN(0x206c8d7b, 0x5f1d2347), TOBN(0x794645ba, 0x4cc2253a),
-         TOBN(0xd517d8ff, 0x58389e08), TOBN(0x4fa20dee, 0x9f847288),
-         TOBN(0xeba072d8, 0xd797770a), TOBN(0x7360c91d, 0xbf429e26),
-         TOBN(0x7200a3b3, 0x80af8279), TOBN(0x6a1c9150, 0x82dadce3),
-         TOBN(0x0ee6d3a7, 0xc35d8794), TOBN(0x042e6558, 0x0356bae5),
-         TOBN(0x9f59698d, 0x643322fd), TOBN(0x9379ae15, 0x50a61967),
-         TOBN(0x64b9ae62, 0xfcc9981e), TOBN(0xaed3d631, 0x6d2934c6),
-         TOBN(0x2454b302, 0x5e4e65eb), TOBN(0xab09f647, 0xf9950428)},
-        {TOBN(0xb2083a12, 0x22248acc), TOBN(0x1f6ec0ef, 0x3264e366),
-         TOBN(0x5659b704, 0x5afdee28), TOBN(0x7a823a40, 0xe6430bb5),
-         TOBN(0x24592a04, 0xe1900a79), TOBN(0xcde09d4a, 0xc9ee6576),
-         TOBN(0x52b6463f, 0x4b5ea54a), TOBN(0x1efe9ed3, 0xd3ca65a7),
-         TOBN(0xe27a6dbe, 0x305406dd), TOBN(0x8eb7dc7f, 0xdd5d1957),
-         TOBN(0xf54a6876, 0x387d4d8f), TOBN(0x9c479409, 0xc7762de4),
-         TOBN(0xbe4d5b5d, 0x99b30778), TOBN(0x25380c56, 0x6e793682),
-         TOBN(0x602d37f3, 0xdac740e3), TOBN(0x140deabe, 0x1566e4ae),
-         TOBN(0x4481d067, 0xafd32acf), TOBN(0xd8f0fcca, 0xe1f71ccf),
-         TOBN(0xd208dd0c, 0xb596f2da), TOBN(0xd049d730, 0x9aad93f9),
-         TOBN(0xc79f263d, 0x42ab580e), TOBN(0x09411bb1, 0x23f707b4),
-         TOBN(0x8cfde1ff, 0x835e0eda), TOBN(0x72707490, 0x90f03402),
-         TOBN(0xeaee6126, 0xc49a861e), TOBN(0x024f3b65, 0xe14f0d06),
-         TOBN(0x51a3f1e8, 0xc69bfc17), TOBN(0xc3c3a8e9, 0xa7686381),
-         TOBN(0x3400752c, 0xb103d4c8), TOBN(0x02bc4613, 0x9218b36b),
-         TOBN(0xc67f75eb, 0x7651504a), TOBN(0xd6848b56, 0xd02aebfa),
-         TOBN(0xbd9802e6, 0xc30fa92b), TOBN(0x5a70d96d, 0x9a552784),
-         TOBN(0x9085c4ea, 0x3f83169b), TOBN(0xfa9423bb, 0x06908228),
-         TOBN(0x2ffebe12, 0xfe97a5b9), TOBN(0x85da6049, 0x71b99118),
-         TOBN(0x9cbc2f7f, 0x63178846), TOBN(0xfd96bc70, 0x9153218e),
-         TOBN(0x958381db, 0x1782269b), TOBN(0xae34bf79, 0x2597e550),
-         TOBN(0xbb5c6064, 0x5f385153), TOBN(0x6f0e96af, 0xe3088048),
-         TOBN(0xbf6a0215, 0x77884456), TOBN(0xb3b5688c, 0x69310ea7),
-         TOBN(0x17c94295, 0x04fad2de), TOBN(0xe020f0e5, 0x17896d4d),
-         TOBN(0x730ba0ab, 0x0976505f), TOBN(0x567f6813, 0x095e2ec5),
-         TOBN(0x47062010, 0x6331ab71), TOBN(0x72cfa977, 0x41d22b9f),
-         TOBN(0x33e55ead, 0x8a2373da), TOBN(0xa8d0d5f4, 0x7ba45a68),
-         TOBN(0xba1d8f9c, 0x03029d15), TOBN(0x8f34f1cc, 0xfc55b9f3),
-         TOBN(0xcca4428d, 0xbbe5a1a9), TOBN(0x8187fd5f, 0x3126bd67),
-         TOBN(0x0036973a, 0x48105826), TOBN(0xa39b6663, 0xb8bd61a0),
-         TOBN(0x6d42deef, 0x2d65a808), TOBN(0x4969044f, 0x94636b19),
-         TOBN(0xf611ee47, 0xdd5d564c), TOBN(0x7b2f3a49, 0xd2873077),
-         TOBN(0x94157d45, 0x300eb294), TOBN(0x2b2a656e, 0x169c1494),
-         TOBN(0xc000dd76, 0xd3a47aa9), TOBN(0xa2864e4f, 0xa6243ea4),
-         TOBN(0x82716c47, 0xdb89842e), TOBN(0x12dfd7d7, 0x61479fb7),
-         TOBN(0x3b9a2c56, 0xe0b2f6dc), TOBN(0x46be862a, 0xd7f85d67),
-         TOBN(0x03b0d8dd, 0x0f82b214), TOBN(0x460c34f9, 0xf103cbc6),
-         TOBN(0xf32e5c03, 0x18d79e19), TOBN(0x8b8888ba, 0xa84117f8),
-         TOBN(0x8f3c37dc, 0xc0722677), TOBN(0x10d21be9, 0x1c1c0f27),
-         TOBN(0xd47c8468, 0xe0f7a0c6), TOBN(0x9bf02213, 0xadecc0e0),
-         TOBN(0x0baa7d12, 0x42b48b99), TOBN(0x1bcb665d, 0x48424096),
-         TOBN(0x8b847cd6, 0xebfb5cfb), TOBN(0x87c2ae56, 0x9ad4d10d),
-         TOBN(0xf1cbb122, 0x0de36726), TOBN(0xe7043c68, 0x3fdfbd21),
-         TOBN(0x4bd0826a, 0x4e79d460), TOBN(0x11f5e598, 0x4bd1a2cb),
-         TOBN(0x97554160, 0xb7fe7b6e), TOBN(0x7d16189a, 0x400a3fb2),
-         TOBN(0xd73e9bea, 0xe328ca1e), TOBN(0x0dd04b97, 0xe793d8cc),
-         TOBN(0xa9c83c9b, 0x506db8cc), TOBN(0x5cd47aae, 0xcf38814c),
-         TOBN(0x26fc430d, 0xb64b45e6), TOBN(0x079b5499, 0xd818ea84),
-         TOBN(0xebb01102, 0xc1c24a3b), TOBN(0xca24e568, 0x1c161c1a),
-         TOBN(0x103eea69, 0x36f00a4a), TOBN(0x9ad76ee8, 0x76176c7b),
-         TOBN(0x97451fc2, 0x538e0ff7), TOBN(0x94f89809, 0x6604b3b0),
-         TOBN(0x6311436e, 0x3249cfd7), TOBN(0x27b4a7bd, 0x41224f69),
-         TOBN(0x03b5d21a, 0xe0ac2941), TOBN(0x279b0254, 0xc2d31937),
-         TOBN(0x3307c052, 0xcac992d0), TOBN(0x6aa7cb92, 0xefa8b1f3),
-         TOBN(0x5a182580, 0x0d37c7a5), TOBN(0x13380c37, 0x342d5422),
-         TOBN(0x92ac2d66, 0xd5d2ef92), TOBN(0x035a70c9, 0x030c63c6),
-         TOBN(0xc16025dd, 0x4ce4f152), TOBN(0x1f419a71, 0xf9df7c06),
-         TOBN(0x6d5b2214, 0x91e4bb14), TOBN(0xfc43c6cc, 0x839fb4ce),
-         TOBN(0x49f06591, 0x925d6b2d), TOBN(0x4b37d9d3, 0x62186598),
-         TOBN(0x8c54a971, 0xd01b1629), TOBN(0xe1a9c29f, 0x51d50e05),
-         TOBN(0x5109b785, 0x71ba1861), TOBN(0x48b22d5c, 0xd0c8f93d),
-         TOBN(0xe8fa84a7, 0x8633bb93), TOBN(0x53fba6ba, 0x5aebbd08),
-         TOBN(0x7ff27df3, 0xe5eea7d8), TOBN(0x521c8796, 0x68ca7158),
-         TOBN(0xb9d5133b, 0xce6f1a05), TOBN(0x2d50cd53, 0xfd0ebee4),
-         TOBN(0xc82115d6, 0xc5a3ef16), TOBN(0x993eff9d, 0xba079221),
-         TOBN(0xe4da2c5e, 0x4b5da81c), TOBN(0x9a89dbdb, 0x8033fd85),
-         TOBN(0x60819ebf, 0x2b892891), TOBN(0x53902b21, 0x5d14a4d5),
-         TOBN(0x6ac35051, 0xd7fda421), TOBN(0xcc6ab885, 0x61c83284),
-         TOBN(0x14eba133, 0xf74cff17), TOBN(0x240aaa03, 0xecb813f2),
-         TOBN(0xcfbb6540, 0x6f665bee), TOBN(0x084b1fe4, 0xa425ad73),
-         TOBN(0x009d5d16, 0xd081f6a6), TOBN(0x35304fe8, 0xeef82c90),
-         TOBN(0xf20346d5, 0xaa9eaa22), TOBN(0x0ada9f07, 0xac1c91e3),
-         TOBN(0xa6e21678, 0x968a6144), TOBN(0x54c1f77c, 0x07b31a1e),
-         TOBN(0xd6bb787e, 0x5781fbe1), TOBN(0x61bd2ee0, 0xe31f1c4a),
-         TOBN(0xf25aa1e9, 0x781105fc), TOBN(0x9cf2971f, 0x7b2f8e80),
-         TOBN(0x26d15412, 0xcdff919b), TOBN(0x01db4ebe, 0x34bc896e),
-         TOBN(0x7d9b3e23, 0xb40df1cf), TOBN(0x59337373, 0x94e971b4),
-         TOBN(0xbf57bd14, 0x669cf921), TOBN(0x865daedf, 0x0c1a1064),
-         TOBN(0x3eb70bd3, 0x83279125), TOBN(0xbc3d5b9f, 0x34ecdaab),
-         TOBN(0x91e3ed7e, 0x5f755caf), TOBN(0x49699f54, 0xd41e6f02),
-         TOBN(0x185770e1, 0xd4a7a15b), TOBN(0x08f3587a, 0xeaac87e7),
-         TOBN(0x352018db, 0x473133ea), TOBN(0x674ce719, 0x04fd30fc),
-         TOBN(0x7b8d9835, 0x088b3e0e), TOBN(0x7a0356a9, 0x5d0d47a1),
-         TOBN(0x9d9e7659, 0x6474a3c4), TOBN(0x61ea48a7, 0xff66966c),
-         TOBN(0x30417758, 0x0f3e4834), TOBN(0xfdbb21c2, 0x17a9afcb),
-         TOBN(0x756fa17f, 0x2f9a67b3), TOBN(0x2a6b2421, 0xa245c1a8),
-         TOBN(0x64be2794, 0x4af02291), TOBN(0xade465c6, 0x2a5804fe),
-         TOBN(0x8dffbd39, 0xa6f08fd7), TOBN(0xc4efa84c, 0xaa14403b),
-         TOBN(0xa1b91b2a, 0x442b0f5c), TOBN(0xb748e317, 0xcf997736),
-         TOBN(0x8d1b62bf, 0xcee90e16), TOBN(0x907ae271, 0x0b2078c0),
-         TOBN(0xdf31534b, 0x0c9bcddd), TOBN(0x043fb054, 0x39adce83),
-         TOBN(0x99031043, 0xd826846a), TOBN(0x61a9c0d6, 0xb144f393),
-         TOBN(0xdab48046, 0x47718427), TOBN(0xdf17ff9b, 0x6e830f8b),
-         TOBN(0x408d7ee8, 0xe49a1347), TOBN(0x6ac71e23, 0x91c1d4ae),
-         TOBN(0xc8cbb9fd, 0x1defd73c), TOBN(0x19840657, 0xbbbbfec5),
-         TOBN(0x39db1cb5, 0x9e7ef8ea), TOBN(0x78aa8296, 0x64105f30),
-         TOBN(0xa3d9b7f0, 0xa3738c29), TOBN(0x0a2f235a, 0xbc3250a3),
-         TOBN(0x55e506f6, 0x445e4caf), TOBN(0x0974f73d, 0x33475f7a),
-         TOBN(0xd37dbba3, 0x5ba2f5a8), TOBN(0x542c6e63, 0x6af40066),
-         TOBN(0x26d99b53, 0xc5d73e2c), TOBN(0x06060d7d, 0x6c3ca33e),
-         TOBN(0xcdbef1c2, 0x065fef4a), TOBN(0x77e60f7d, 0xfd5b92e3),
-         TOBN(0xd7c549f0, 0x26708350), TOBN(0x201b3ad0, 0x34f121bf),
-         TOBN(0x5fcac2a1, 0x0334fc14), TOBN(0x8a9a9e09, 0x344552f6),
-         TOBN(0x7dd8a1d3, 0x97653082), TOBN(0x5fc0738f, 0x79d4f289),
-         TOBN(0x787d244d, 0x17d2d8c3), TOBN(0xeffc6345, 0x70830684),
-         TOBN(0x5ddb96dd, 0xe4f73ae5), TOBN(0x8efb14b1, 0x172549a5),
-         TOBN(0x6eb73eee, 0x2245ae7a), TOBN(0xbca4061e, 0xea11f13e),
-         TOBN(0xb577421d, 0x30b01f5d), TOBN(0xaa688b24, 0x782e152c),
-         TOBN(0x67608e71, 0xbd3502ba), TOBN(0x4ef41f24, 0xb4de75a0),
-         TOBN(0xb08dde5e, 0xfd6125e5), TOBN(0xde484825, 0xa409543f),
-         TOBN(0x1f198d98, 0x65cc2295), TOBN(0x428a3771, 0x6e0edfa2),
-         TOBN(0x4f9697a2, 0xadf35fc7), TOBN(0x01a43c79, 0xf7cac3c7),
-         TOBN(0xb05d7059, 0x0fd3659a), TOBN(0x8927f30c, 0xbb7f2d9a),
-         TOBN(0x4023d1ac, 0x8cf984d3), TOBN(0x32125ed3, 0x02897a45),
-         TOBN(0xfb572dad, 0x3d414205), TOBN(0x73000ef2, 0xe3fa82a9),
-         TOBN(0x4c0868e9, 0xf10a5581), TOBN(0x5b61fc67, 0x6b0b3ca5),
-         TOBN(0xc1258d5b, 0x7cae440c), TOBN(0x21c08b41, 0x402b7531),
-         TOBN(0xf61a8955, 0xde932321), TOBN(0x3568faf8, 0x2d1408af),
-         TOBN(0x71b15e99, 0x9ecf965b), TOBN(0xf14ed248, 0xe917276f),
-         TOBN(0xc6f4caa1, 0x820cf9e2), TOBN(0x681b20b2, 0x18d83c7e),
-         TOBN(0x6cde738d, 0xc6c01120), TOBN(0x71db0813, 0xae70e0db),
-         TOBN(0x95fc0644, 0x74afe18c), TOBN(0x34619053, 0x129e2be7),
-         TOBN(0x80615cea, 0xdb2a3b15), TOBN(0x0a49a19e, 0xdb4c7073),
-         TOBN(0x0e1b84c8, 0x8fd2d367), TOBN(0xd74bf462, 0x033fb8aa),
-         TOBN(0x889f6d65, 0x533ef217), TOBN(0x7158c7e4, 0xc3ca2e87),
-         TOBN(0xfb670dfb, 0xdc2b4167), TOBN(0x75910a01, 0x844c257f),
-         TOBN(0xf336bf07, 0xcf88577d), TOBN(0x22245250, 0xe45e2ace),
-         TOBN(0x2ed92e8d, 0x7ca23d85), TOBN(0x29f8be4c, 0x2b812f58),
-         TOBN(0xdd9ebaa7, 0x076fe12b), TOBN(0x3f2400cb, 0xae1537f9),
-         TOBN(0x1aa93528, 0x17bdfb46), TOBN(0xc0f98430, 0x67883b41),
-         TOBN(0x5590ede1, 0x0170911d), TOBN(0x7562f5bb, 0x34d4b17f),
-         TOBN(0xe1fa1df2, 0x1826b8d2), TOBN(0xb40b796a, 0x6bd80d59),
-         TOBN(0xd65bf197, 0x3467ba92), TOBN(0x8c9b46db, 0xf70954b0),
-         TOBN(0x97c8a0f3, 0x0e78f15d), TOBN(0xa8f3a69a, 0x85a4c961),
-         TOBN(0x4242660f, 0x61e4ce9b), TOBN(0xbf06aab3, 0x6ea6790c),
-         TOBN(0xc6706f8e, 0xec986416), TOBN(0x9e56dec1, 0x9a9fc225),
-         TOBN(0x527c46f4, 0x9a9898d9), TOBN(0xd799e77b, 0x5633cdef),
-         TOBN(0x24eacc16, 0x7d9e4297), TOBN(0xabb61cea, 0x6b1cb734),
-         TOBN(0xbee2e8a7, 0xf778443c), TOBN(0x3bb42bf1, 0x29de2fe6),
-         TOBN(0xcbed86a1, 0x3003bb6f), TOBN(0xd3918e6c, 0xd781cdf6),
-         TOBN(0x4bee3271, 0x9a5103f1), TOBN(0x5243efc6, 0xf50eac06),
-         TOBN(0xb8e122cb, 0x6adcc119), TOBN(0x1b7faa84, 0xc0b80a08),
-         TOBN(0x32c3d1bd, 0x6dfcd08c), TOBN(0x129dec4e, 0x0be427de),
-         TOBN(0x98ab679c, 0x1d263c83), TOBN(0xafc83cb7, 0xcef64eff),
-         TOBN(0x85eb6088, 0x2fa6be76), TOBN(0x892585fb, 0x1328cbfe),
-         TOBN(0xc154d3ed, 0xcf618dda), TOBN(0xc44f601b, 0x3abaf26e),
-         TOBN(0x7bf57d0b, 0x2be1fdfd), TOBN(0xa833bd2d, 0x21137fee),
-         TOBN(0x9353af36, 0x2db591a8), TOBN(0xc76f26dc, 0x5562a056),
-         TOBN(0x1d87e47d, 0x3fdf5a51), TOBN(0x7afb5f93, 0x55c9cab0),
-         TOBN(0x91bbf58f, 0x89e0586e), TOBN(0x7c72c018, 0x0d843709),
-         TOBN(0xa9a5aafb, 0x99b5c3dc), TOBN(0xa48a0f1d, 0x3844aeb0),
-         TOBN(0x7178b7dd, 0xb667e482), TOBN(0x453985e9, 0x6e23a59a),
-         TOBN(0x4a54c860, 0x01b25dd8), TOBN(0x0dd37f48, 0xfb897c8a),
-         TOBN(0x5f8aa610, 0x0ea90cd9), TOBN(0xc8892c68, 0x16d5830d),
-         TOBN(0xeb4befc0, 0xef514ca5), TOBN(0x478eb679, 0xe72c9ee6),
-         TOBN(0x9bca20da, 0xdbc40d5f), TOBN(0xf015de21, 0xdde4f64a),
-         TOBN(0xaa6a4de0, 0xeaf4b8a5), TOBN(0x68cfd9ca, 0x4bc60e32),
-         TOBN(0x668a4b01, 0x7fd15e70), TOBN(0xd9f0694a, 0xf27dc09d),
-         TOBN(0xf6c3cad5, 0xba708bcd), TOBN(0x5cd2ba69, 0x5bb95c2a),
-         TOBN(0xaa28c1d3, 0x33c0a58f), TOBN(0x23e274e3, 0xabc77870),
-         TOBN(0x44c3692d, 0xdfd20a4a), TOBN(0x091c5fd3, 0x81a66653),
-         TOBN(0x6c0bb691, 0x09a0757d), TOBN(0x9072e8b9, 0x667343ea),
-         TOBN(0x31d40eb0, 0x80848bec), TOBN(0x95bd480a, 0x79fd36cc),
-         TOBN(0x01a77c61, 0x65ed43f5), TOBN(0xafccd127, 0x2e0d40bf),
-         TOBN(0xeccfc82d, 0x1cc1884b), TOBN(0xc85ac201, 0x5d4753b4),
-         TOBN(0xc7a6caac, 0x658e099f), TOBN(0xcf46369e, 0x04b27390),
-         TOBN(0xe2e7d049, 0x506467ea), TOBN(0x481b63a2, 0x37cdeccc),
-         TOBN(0x4029abd8, 0xed80143a), TOBN(0x28bfe3c7, 0xbcb00b88),
-         TOBN(0x3bec1009, 0x0643d84a), TOBN(0x885f3668, 0xabd11041),
-         TOBN(0xdb02432c, 0xf83a34d6), TOBN(0x32f7b360, 0x719ceebe),
-         TOBN(0xf06c7837, 0xdad1fe7a), TOBN(0x60a157a9, 0x5441a0b0),
-         TOBN(0x704970e9, 0xe2d47550), TOBN(0xcd2bd553, 0x271b9020),
-         TOBN(0xff57f82f, 0x33e24a0b), TOBN(0x9cbee23f, 0xf2565079),
-         TOBN(0x16353427, 0xeb5f5825), TOBN(0x276feec4, 0xe948d662),
-         TOBN(0xd1b62bc6, 0xda10032b), TOBN(0x718351dd, 0xf0e72a53),
-         TOBN(0x93452076, 0x2420e7ba), TOBN(0x96368fff, 0x3a00118d),
-         TOBN(0x00ce2d26, 0x150a49e4), TOBN(0x0c28b636, 0x3f04706b),
-         TOBN(0xbad65a46, 0x58b196d0), TOBN(0x6c8455fc, 0xec9f8b7c),
-         TOBN(0xe90c895f, 0x2d71867e), TOBN(0x5c0be31b, 0xedf9f38c),
-         TOBN(0x2a37a15e, 0xd8f6ec04), TOBN(0x239639e7, 0x8cd85251),
-         TOBN(0xd8975315, 0x9c7c4c6b), TOBN(0x603aa3c0, 0xd7409af7),
-         TOBN(0xb8d53d0c, 0x007132fb), TOBN(0x68d12af7, 0xa6849238),
-         TOBN(0xbe0607e7, 0xbf5d9279), TOBN(0x9aa50055, 0xaada74ce),
-         TOBN(0xe81079cb, 0xba7e8ccb), TOBN(0x610c71d1, 0xa5f4ff5e),
-         TOBN(0x9e2ee1a7, 0x5aa07093), TOBN(0xca84004b, 0xa75da47c),
-         TOBN(0x074d3951, 0x3de75401), TOBN(0xf938f756, 0xbb311592),
-         TOBN(0x96197618, 0x00a43421), TOBN(0x39a25362, 0x07bc78c8),
-         TOBN(0x278f710a, 0x0a171276), TOBN(0xb28446ea, 0x8d1a8f08),
-         TOBN(0x184781bf, 0xe3b6a661), TOBN(0x7751cb1d, 0xe6d279f7),
-         TOBN(0xf8ff95d6, 0xc59eb662), TOBN(0x186d90b7, 0x58d3dea7),
-         TOBN(0x0e4bb6c1, 0xdfb4f754), TOBN(0x5c5cf56b, 0x2b2801dc),
-         TOBN(0xc561e452, 0x1f54564d), TOBN(0xb4fb8c60, 0xf0dd7f13),
-         TOBN(0xf8849630, 0x33ff98c7), TOBN(0x9619fffa, 0xcf17769c),
-         TOBN(0xf8090bf6, 0x1bfdd80a), TOBN(0x14d9a149, 0x422cfe63),
-         TOBN(0xb354c360, 0x6f6df9ea), TOBN(0xdbcf770d, 0x218f17ea),
-         TOBN(0x207db7c8, 0x79eb3480), TOBN(0x213dbda8, 0x559b6a26),
-         TOBN(0xac4c200b, 0x29fc81b3), TOBN(0xebc3e09f, 0x171d87c1),
-         TOBN(0x91799530, 0x1481aa9e), TOBN(0x051b92e1, 0x92e114fa),
-         TOBN(0xdf8f92e9, 0xecb5537f), TOBN(0x44b1b2cc, 0x290c7483),
-         TOBN(0xa711455a, 0x2adeb016), TOBN(0x964b6856, 0x81a10c2c),
-         TOBN(0x4f159d99, 0xcec03623), TOBN(0x05532225, 0xef3271ea),
-         TOBN(0xb231bea3, 0xc5ee4849), TOBN(0x57a54f50, 0x7094f103),
-         TOBN(0x3e2d421d, 0x9598b352), TOBN(0xe865a49c, 0x67412ab4),
-         TOBN(0xd2998a25, 0x1cc3a912), TOBN(0x5d092808, 0x0c74d65d),
-         TOBN(0x73f45908, 0x4088567a), TOBN(0xeb6b280e, 0x1f214a61),
-         TOBN(0x8c9adc34, 0xcaf0c13d), TOBN(0x39d12938, 0xf561fb80),
-         TOBN(0xb2dc3a5e, 0xbc6edfb4), TOBN(0x7485b1b1, 0xfe4d210e),
-         TOBN(0x062e0400, 0xe186ae72), TOBN(0x91e32d5c, 0x6eeb3b88),
-         TOBN(0x6df574d7, 0x4be59224), TOBN(0xebc88ccc, 0x716d55f3),
-         TOBN(0x26c2e6d0, 0xcad6ed33), TOBN(0xc6e21e7d, 0x0d3e8b10),
-         TOBN(0x2cc5840e, 0x5bcc36bb), TOBN(0x9292445e, 0x7da74f69),
-         TOBN(0x8be8d321, 0x4e5193a8), TOBN(0x3ec23629, 0x8df06413),
-         TOBN(0xc7e9ae85, 0xb134defa), TOBN(0x6073b1d0, 0x1bb2d475),
-         TOBN(0xb9ad615e, 0x2863c00d), TOBN(0x9e29493d, 0x525f4ac4),
-         TOBN(0xc32b1dea, 0x4e9acf4f), TOBN(0x3e1f01c8, 0xa50db88d),
-         TOBN(0xb05d70ea, 0x04da916c), TOBN(0x714b0d0a, 0xd865803e),
-         TOBN(0x4bd493fc, 0x9920cb5e), TOBN(0x5b44b1f7, 0x92c7a3ac),
-         TOBN(0xa2a77293, 0xbcec9235), TOBN(0x5ee06e87, 0xcd378553),
-         TOBN(0xceff8173, 0xda621607), TOBN(0x2bb03e4c, 0x99f5d290),
-         TOBN(0x2945106a, 0xa6f734ac), TOBN(0xb5056604, 0xd25c4732),
-         TOBN(0x5945920c, 0xe079afee), TOBN(0x686e17a0, 0x6789831f),
-         TOBN(0x5966bee8, 0xb74a5ae5), TOBN(0x38a673a2, 0x1e258d46),
-         TOBN(0xbd1cc1f2, 0x83141c95), TOBN(0x3b2ecf4f, 0x0e96e486),
-         TOBN(0xcd3aa896, 0x74e5fc78), TOBN(0x415ec10c, 0x2482fa7a),
-         TOBN(0x15234419, 0x80503380), TOBN(0x513d917a, 0xd314b392),
-         TOBN(0xb0b52f4e, 0x63caecae), TOBN(0x07bf22ad, 0x2dc7780b),
-         TOBN(0xe761e8a1, 0xe4306839), TOBN(0x1b3be962, 0x5dd7feaa),
-         TOBN(0x4fe728de, 0x74c778f1), TOBN(0xf1fa0bda, 0x5e0070f6),
-         TOBN(0x85205a31, 0x6ec3f510), TOBN(0x2c7e4a14, 0xd2980475),
-         TOBN(0xde3c19c0, 0x6f30ebfd), TOBN(0xdb1c1f38, 0xd4b7e644),
-         TOBN(0xfe291a75, 0x5dce364a), TOBN(0xb7b22a3c, 0x058f5be3),
-         TOBN(0x2cd2c302, 0x37fea38c), TOBN(0x2930967a, 0x2e17be17),
-         TOBN(0x87f009de, 0x0c061c65), TOBN(0xcb014aac, 0xedc6ed44),
-         TOBN(0x49bd1cb4, 0x3bafb1eb), TOBN(0x81bd8b5c, 0x282d3688),
-         TOBN(0x1cdab87e, 0xf01a17af), TOBN(0x21f37ac4, 0xe710063b),
-         TOBN(0x5a6c5676, 0x42fc8193), TOBN(0xf4753e70, 0x56a6015c),
-         TOBN(0x020f795e, 0xa15b0a44), TOBN(0x8f37c8d7, 0x8958a958),
-         TOBN(0x63b7e89b, 0xa4b675b5), TOBN(0xb4fb0c0c, 0x0fc31aea),
-         TOBN(0xed95e639, 0xa7ff1f2e), TOBN(0x9880f5a3, 0x619614fb),
-         TOBN(0xdeb6ff02, 0x947151ab), TOBN(0x5bc5118c, 0xa868dcdb),
-         TOBN(0xd8da2055, 0x4c20cea5), TOBN(0xcac2776e, 0x14c4d69a),
-         TOBN(0xcccb22c1, 0x622d599b), TOBN(0xa4ddb653, 0x68a9bb50),
-         TOBN(0x2c4ff151, 0x1b4941b4), TOBN(0xe1ff19b4, 0x6efba588),
-         TOBN(0x35034363, 0xc48345e0), TOBN(0x45542e3d, 0x1e29dfc4),
-         TOBN(0xf197cb91, 0x349f7aed), TOBN(0x3b2b5a00, 0x8fca8420),
-         TOBN(0x7c175ee8, 0x23aaf6d8), TOBN(0x54dcf421, 0x35af32b6),
-         TOBN(0x0ba14307, 0x27d6561e), TOBN(0x879d5ee4, 0xd175b1e2),
-         TOBN(0xc7c43673, 0x99807db5), TOBN(0x77a54455, 0x9cd55bcd),
-         TOBN(0xe6c2ff13, 0x0105c072), TOBN(0x18f7a99f, 0x8dda7da4),
-         TOBN(0x4c301820, 0x0e2d35c1), TOBN(0x06a53ca0, 0xd9cc6c82),
-         TOBN(0xaa21cc1e, 0xf1aa1d9e), TOBN(0x32414334, 0x4a75b1e8),
-         TOBN(0x2a6d1328, 0x0ebe9fdc), TOBN(0x16bd173f, 0x98a4755a),
-         TOBN(0xfbb9b245, 0x2133ffd9), TOBN(0x39a8b2f1, 0x830f1a20),
-         TOBN(0x484bc97d, 0xd5a1f52a), TOBN(0xd6aebf56, 0xa40eddf8),
-         TOBN(0x32257acb, 0x76ccdac6), TOBN(0xaf4d36ec, 0x1586ff27),
-         TOBN(0x8eaa8863, 0xf8de7dd1), TOBN(0x0045d5cf, 0x88647c16)},
-        {TOBN(0xa6f3d574, 0xc005979d), TOBN(0xc2072b42, 0x6a40e350),
-         TOBN(0xfca5c156, 0x8de2ecf9), TOBN(0xa8c8bf5b, 0xa515344e),
-         TOBN(0x97aee555, 0x114df14a), TOBN(0xd4374a4d, 0xfdc5ec6b),
-         TOBN(0x754cc28f, 0x2ca85418), TOBN(0x71cb9e27, 0xd3c41f78),
-         TOBN(0x89105079, 0x03605c39), TOBN(0xf0843d9e, 0xa142c96c),
-         TOBN(0xf3744934, 0x16923684), TOBN(0x732caa2f, 0xfa0a2893),
-         TOBN(0xb2e8c270, 0x61160170), TOBN(0xc32788cc, 0x437fbaa3),
-         TOBN(0x39cd818e, 0xa6eda3ac), TOBN(0xe2e94239, 0x9e2b2e07),
-         TOBN(0x6967d39b, 0x0260e52a), TOBN(0xd42585cc, 0x90653325),
-         TOBN(0x0d9bd605, 0x21ca7954), TOBN(0x4fa20877, 0x81ed57b3),
-         TOBN(0x60c1eff8, 0xe34a0bbe), TOBN(0x56b0040c, 0x84f6ef64),
-         TOBN(0x28be2b24, 0xb1af8483), TOBN(0xb2278163, 0xf5531614),
-         TOBN(0x8df27545, 0x5922ac1c), TOBN(0xa7b3ef5c, 0xa52b3f63),
-         TOBN(0x8e77b214, 0x71de57c4), TOBN(0x31682c10, 0x834c008b),
-         TOBN(0xc76824f0, 0x4bd55d31), TOBN(0xb6d1c086, 0x17b61c71),
-         TOBN(0x31db0903, 0xc2a5089d), TOBN(0x9c092172, 0x184e5d3f),
-         TOBN(0xdd7ced5b, 0xc00cc638), TOBN(0x1a2015eb, 0x61278fc2),
-         TOBN(0x2e8e5288, 0x6a37f8d6), TOBN(0xc457786f, 0xe79933ad),
-         TOBN(0xb3fe4cce, 0x2c51211a), TOBN(0xad9b10b2, 0x24c20498),
-         TOBN(0x90d87a4f, 0xd28db5e5), TOBN(0x698cd105, 0x3aca2fc3),
-         TOBN(0x4f112d07, 0xe91b536d), TOBN(0xceb982f2, 0x9eba09d6),
-         TOBN(0x3c157b2c, 0x197c396f), TOBN(0xe23c2d41, 0x7b66eb24),
-         TOBN(0x480c57d9, 0x3f330d37), TOBN(0xb3a4c8a1, 0x79108deb),
-         TOBN(0x702388de, 0xcb199ce5), TOBN(0x0b019211, 0xb944a8d4),
-         TOBN(0x24f2a692, 0x840bb336), TOBN(0x7c353bdc, 0xa669fa7b),
-         TOBN(0xda20d6fc, 0xdec9c300), TOBN(0x625fbe2f, 0xa13a4f17),
-         TOBN(0xa2b1b61a, 0xdbc17328), TOBN(0x008965bf, 0xa9515621),
-         TOBN(0x49690939, 0xc620ff46), TOBN(0x182dd27d, 0x8717e91c),
-         TOBN(0x5ace5035, 0xea6c3997), TOBN(0x54259aaa, 0xc2610bef),
-         TOBN(0xef18bb3f, 0x3c80dd39), TOBN(0x6910b95b, 0x5fc3fa39),
-         TOBN(0xfce2f510, 0x43e09aee), TOBN(0xced56c9f, 0xa7675665),
-         TOBN(0x10e265ac, 0xd872db61), TOBN(0x6982812e, 0xae9fce69),
-         TOBN(0x29be11c6, 0xce800998), TOBN(0x72bb1752, 0xb90360d9),
-         TOBN(0x2c193197, 0x5a4ad590), TOBN(0x2ba2f548, 0x9fc1dbc0),
-         TOBN(0x7fe4eebb, 0xe490ebe0), TOBN(0x12a0a4cd, 0x7fae11c0),
-         TOBN(0x7197cf81, 0xe903ba37), TOBN(0xcf7d4aa8, 0xde1c6dd8),
-         TOBN(0x92af6bf4, 0x3fd5684c), TOBN(0x2b26eecf, 0x80360aa1),
-         TOBN(0xbd960f30, 0x00546a82), TOBN(0x407b3c43, 0xf59ad8fe),
-         TOBN(0x86cae5fe, 0x249c82ba), TOBN(0x9e0faec7, 0x2463744c),
-         TOBN(0x87f551e8, 0x94916272), TOBN(0x033f9344, 0x6ceb0615),
-         TOBN(0x1e5eb0d1, 0x8be82e84), TOBN(0x89967f0e, 0x7a582fef),
-         TOBN(0xbcf687d5, 0xa6e921fa), TOBN(0xdfee4cf3, 0xd37a09ba),
-         TOBN(0x94f06965, 0xb493c465), TOBN(0x638b9a1c, 0x7635c030),
-         TOBN(0x76667864, 0x66f05e9f), TOBN(0xccaf6808, 0xc04da725),
-         TOBN(0xca2eb690, 0x768fccfc), TOBN(0xf402d37d, 0xb835b362),
-         TOBN(0x0efac0d0, 0xe2fdfcce), TOBN(0xefc9cdef, 0xb638d990),
-         TOBN(0x2af12b72, 0xd1669a8b), TOBN(0x33c536bc, 0x5774ccbd),
-         TOBN(0x30b21909, 0xfb34870e), TOBN(0xc38fa2f7, 0x7df25aca),
-         TOBN(0x74c5f02b, 0xbf81f3f5), TOBN(0x0525a5ae, 0xaf7e4581),
-         TOBN(0x88d2aaba, 0x433c54ae), TOBN(0xed9775db, 0x806a56c5),
-         TOBN(0xd320738a, 0xc0edb37d), TOBN(0x25fdb6ee, 0x66cc1f51),
-         TOBN(0xac661d17, 0x10600d76), TOBN(0x931ec1f3, 0xbdd1ed76),
-         TOBN(0x65c11d62, 0x19ee43f1), TOBN(0x5cd57c3e, 0x60829d97),
-         TOBN(0xd26c91a3, 0x984be6e8), TOBN(0xf08d9309, 0x8b0c53bd),
-         TOBN(0x94bc9e5b, 0xc016e4ea), TOBN(0xd3916839, 0x11d43d2b),
-         TOBN(0x886c5ad7, 0x73701155), TOBN(0xe0377626, 0x20b00715),
-         TOBN(0x7f01c9ec, 0xaa80ba59), TOBN(0x3083411a, 0x68538e51),
-         TOBN(0x970370f1, 0xe88128af), TOBN(0x625cc3db, 0x91dec14b),
-         TOBN(0xfef9666c, 0x01ac3107), TOBN(0xb2a8d577, 0xd5057ac3),
-         TOBN(0xb0f26299, 0x92be5df7), TOBN(0xf579c8e5, 0x00353924),
-         TOBN(0xb8fa3d93, 0x1341ed7a), TOBN(0x4223272c, 0xa7b59d49),
-         TOBN(0x3dcb1947, 0x83b8c4a4), TOBN(0x4e413c01, 0xed1302e4),
-         TOBN(0x6d999127, 0xe17e44ce), TOBN(0xee86bf75, 0x33b3adfb),
-         TOBN(0xf6902fe6, 0x25aa96ca), TOBN(0xb73540e4, 0xe5aae47d),
-         TOBN(0x32801d7b, 0x1b4a158c), TOBN(0xe571c99e, 0x27e2a369),
-         TOBN(0x40cb76c0, 0x10d9f197), TOBN(0xc308c289, 0x3167c0ae),
-         TOBN(0xa6ef9dd3, 0xeb7958f2), TOBN(0xa7226dfc, 0x300879b1),
-         TOBN(0x6cd0b362, 0x7edf0636), TOBN(0x4efbce6c, 0x7bc37eed),
-         TOBN(0x75f92a05, 0x8d699021), TOBN(0x586d4c79, 0x772566e3),
-         TOBN(0x378ca5f1, 0x761ad23a), TOBN(0x650d86fc, 0x1465a8ac),
-         TOBN(0x7a4ed457, 0x842ba251), TOBN(0x6b65e3e6, 0x42234933),
-         TOBN(0xaf1543b7, 0x31aad657), TOBN(0xa4cefe98, 0xcbfec369),
-         TOBN(0xb587da90, 0x9f47befb), TOBN(0x6562e9fb, 0x41312d13),
-         TOBN(0xa691ea59, 0xeff1cefe), TOBN(0xcc30477a, 0x05fc4cf6),
-         TOBN(0xa1632461, 0x0b0ffd3d), TOBN(0xa1f16f3b, 0x5b355956),
-         TOBN(0x5b148d53, 0x4224ec24), TOBN(0xdc834e7b, 0xf977012a),
-         TOBN(0x7bfc5e75, 0xb2c69dbc), TOBN(0x3aa77a29, 0x03c3da6c),
-         TOBN(0xde0df03c, 0xca910271), TOBN(0xcbd5ca4a, 0x7806dc55),
-         TOBN(0xe1ca5807, 0x6db476cb), TOBN(0xfde15d62, 0x5f37a31e),
-         TOBN(0xf49af520, 0xf41af416), TOBN(0x96c5c5b1, 0x7d342db5),
-         TOBN(0x155c43b7, 0xeb4ceb9b), TOBN(0x2e993010, 0x4e77371a),
-         TOBN(0x1d2987da, 0x675d43af), TOBN(0xef2bc1c0, 0x8599fd72),
-         TOBN(0x96894b7b, 0x9342f6b2), TOBN(0x201eadf2, 0x7c8e71f0),
-         TOBN(0xf3479d9f, 0x4a1f3efc), TOBN(0xe0f8a742, 0x702a9704),
-         TOBN(0xeafd44b6, 0xb3eba40c), TOBN(0xf9739f29, 0xc1c1e0d0),
-         TOBN(0x0091471a, 0x619d505e), TOBN(0xc15f9c96, 0x9d7c263e),
-         TOBN(0x5be47285, 0x83afbe33), TOBN(0xa3b6d6af, 0x04f1e092),
-         TOBN(0xe76526b9, 0x751a9d11), TOBN(0x2ec5b26d, 0x9a4ae4d2),
-         TOBN(0xeb66f4d9, 0x02f6fb8d), TOBN(0x4063c561, 0x96912164),
-         TOBN(0xeb7050c1, 0x80ef3000), TOBN(0x288d1c33, 0xeaa5b3f0),
-         TOBN(0xe87c68d6, 0x07806fd8), TOBN(0xb2f7f9d5, 0x4bbbf50f),
-         TOBN(0x25972f3a, 0xac8d6627), TOBN(0xf8547774, 0x10e8c13b),
-         TOBN(0xcc50ef6c, 0x872b4a60), TOBN(0xab2a34a4, 0x4613521b),
-         TOBN(0x39c5c190, 0x983e15d1), TOBN(0x61dde5df, 0x59905512),
-         TOBN(0xe417f621, 0x9f2275f3), TOBN(0x0750c8b6, 0x451d894b),
-         TOBN(0x75b04ab9, 0x78b0bdaa), TOBN(0x3bfd9fd4, 0x458589bd),
-         TOBN(0xf1013e30, 0xee9120b6), TOBN(0x2b51af93, 0x23a4743e),
-         TOBN(0xea96ffae, 0x48d14d9e), TOBN(0x71dc0dbe, 0x698a1d32),
-         TOBN(0x914962d2, 0x0180cca4), TOBN(0x1ae60677, 0xc3568963),
-         TOBN(0x8cf227b1, 0x437bc444), TOBN(0xc650c83b, 0xc9962c7a),
-         TOBN(0x23c2c7dd, 0xfe7ccfc4), TOBN(0xf925c89d, 0x1b929d48),
-         TOBN(0x4460f74b, 0x06783c33), TOBN(0xac2c8d49, 0xa590475a),
-         TOBN(0xfb40b407, 0xb807bba0), TOBN(0x9d1e362d, 0x69ff8f3a),
-         TOBN(0xa33e9681, 0xcbef64a4), TOBN(0x67ece5fa, 0x332fb4b2),
-         TOBN(0x6900a99b, 0x739f10e3), TOBN(0xc3341ca9, 0xff525925),
-         TOBN(0xee18a626, 0xa9e2d041), TOBN(0xa5a83685, 0x29580ddd),
-         TOBN(0xf3470c81, 0x9d7de3cd), TOBN(0xedf02586, 0x2062cf9c),
-         TOBN(0xf43522fa, 0xc010edb0), TOBN(0x30314135, 0x13a4b1ae),
-         TOBN(0xc792e02a, 0xdb22b94b), TOBN(0x993d8ae9, 0xa1eaa45b),
-         TOBN(0x8aad6cd3, 0xcd1e1c63), TOBN(0x89529ca7, 0xc5ce688a),
-         TOBN(0x2ccee3aa, 0xe572a253), TOBN(0xe02b6438, 0x02a21efb),
-         TOBN(0xa7091b6e, 0xc9430358), TOBN(0x06d1b1fa, 0x9d7db504),
-         TOBN(0x58846d32, 0xc4744733), TOBN(0x40517c71, 0x379f9e34),
-         TOBN(0x2f65655f, 0x130ef6ca), TOBN(0x526e4488, 0xf1f3503f),
-         TOBN(0x8467bd17, 0x7ee4a976), TOBN(0x1d9dc913, 0x921363d1),
-         TOBN(0xd8d24c33, 0xb069e041), TOBN(0x5eb5da0a, 0x2cdf7f51),
-         TOBN(0x1c0f3cb1, 0x197b994f), TOBN(0x3c95a6c5, 0x2843eae9),
-         TOBN(0x7766ffc9, 0xa6097ea5), TOBN(0x7bea4093, 0xd723b867),
-         TOBN(0xb48e1f73, 0x4db378f9), TOBN(0x70025b00, 0xe37b77ac),
-         TOBN(0x943dc8e7, 0xaf24ad46), TOBN(0xb98a15ac, 0x16d00a85),
-         TOBN(0x3adc38ba, 0x2743b004), TOBN(0xb1c7f4f7, 0x334415ee),
-         TOBN(0xea43df8f, 0x1e62d05a), TOBN(0x32618905, 0x9d76a3b6),
-         TOBN(0x2fbd0bb5, 0xa23a0f46), TOBN(0x5bc971db, 0x6a01918c),
-         TOBN(0x7801d94a, 0xb4743f94), TOBN(0xb94df65e, 0x676ae22b),
-         TOBN(0xaafcbfab, 0xaf95894c), TOBN(0x7b9bdc07, 0x276b2241),
-         TOBN(0xeaf98362, 0x5bdda48b), TOBN(0x5977faf2, 0xa3fcb4df),
-         TOBN(0xbed042ef, 0x052c4b5b), TOBN(0x9fe87f71, 0x067591f0),
-         TOBN(0xc89c73ca, 0x22f24ec7), TOBN(0x7d37fa9e, 0xe64a9f1b),
-         TOBN(0x2710841a, 0x15562627), TOBN(0x2c01a613, 0xc243b034),
-         TOBN(0x1d135c56, 0x2bc68609), TOBN(0xc2ca1715, 0x8b03f1f6),
-         TOBN(0xc9966c2d, 0x3eb81d82), TOBN(0xc02abf4a, 0x8f6df13e),
-         TOBN(0x77b34bd7, 0x8f72b43b), TOBN(0xaff6218f, 0x360c82b0),
-         TOBN(0x0aa5726c, 0x8d55b9d2), TOBN(0xdc0adbe9, 0x99e9bffb),
-         TOBN(0x9097549c, 0xefb9e72a), TOBN(0x16755712, 0x9dfb3111),
-         TOBN(0xdd8bf984, 0xf26847f9), TOBN(0xbcb8e387, 0xdfb30cb7),
-         TOBN(0xc1fd32a7, 0x5171ef9c), TOBN(0x977f3fc7, 0x389b363f),
-         TOBN(0x116eaf2b, 0xf4babda0), TOBN(0xfeab68bd, 0xf7113c8e),
-         TOBN(0xd1e3f064, 0xb7def526), TOBN(0x1ac30885, 0xe0b3fa02),
-         TOBN(0x1c5a6e7b, 0x40142d9d), TOBN(0x839b5603, 0x30921c0b),
-         TOBN(0x48f301fa, 0x36a116a3), TOBN(0x380e1107, 0xcfd9ee6d),
-         TOBN(0x7945ead8, 0x58854be1), TOBN(0x4111c12e, 0xcbd4d49d),
-         TOBN(0xece3b1ec, 0x3a29c2ef), TOBN(0x6356d404, 0x8d3616f5),
-         TOBN(0x9f0d6a8f, 0x594d320e), TOBN(0x0989316d, 0xf651ccd2),
-         TOBN(0x6c32117a, 0x0f8fdde4), TOBN(0x9abe5cc5, 0xa26a9bbc),
-         TOBN(0xcff560fb, 0x9723f671), TOBN(0x21b2a12d, 0x7f3d593c),
-         TOBN(0xe4cb18da, 0x24ba0696), TOBN(0x186e2220, 0xc3543384),
-         TOBN(0x722f64e0, 0x88312c29), TOBN(0x94282a99, 0x17dc7752),
-         TOBN(0x62467bbf, 0x5a85ee89), TOBN(0xf435c650, 0xf10076a0),
-         TOBN(0xc9ff1539, 0x43b3a50b), TOBN(0x7132130c, 0x1a53efbc),
-         TOBN(0x31bfe063, 0xf7b0c5b7), TOBN(0xb0179a7d, 0x4ea994cc),
-         TOBN(0x12d064b3, 0xc85f455b), TOBN(0x47259328, 0x8f6e0062),
-         TOBN(0xf64e590b, 0xb875d6d9), TOBN(0x22dd6225, 0xad92bcc7),
-         TOBN(0xb658038e, 0xb9c3bd6d), TOBN(0x00cdb0d6, 0xfbba27c8),
-         TOBN(0x0c681337, 0x1062c45d), TOBN(0xd8515b8c, 0x2d33407d),
-         TOBN(0xcb8f699e, 0x8cbb5ecf), TOBN(0x8c4347f8, 0xc608d7d8),
-         TOBN(0x2c11850a, 0xbb3e00db), TOBN(0x20a8dafd, 0xecb49d19),
-         TOBN(0xbd781480, 0x45ee2f40), TOBN(0x75e354af, 0x416b60cf),
-         TOBN(0xde0b58a1, 0x8d49a8c4), TOBN(0xe40e94e2, 0xfa359536),
-         TOBN(0xbd4fa59f, 0x62accd76), TOBN(0x05cf466a, 0x8c762837),
-         TOBN(0xb5abda99, 0x448c277b), TOBN(0x5a9e01bf, 0x48b13740),
-         TOBN(0x9d457798, 0x326aad8d), TOBN(0xbdef4954, 0xc396f7e7),
-         TOBN(0x6fb274a2, 0xc253e292), TOBN(0x2800bf0a, 0x1cfe53e7),
-         TOBN(0x22426d31, 0x44438fd4), TOBN(0xef233923, 0x5e259f9a),
-         TOBN(0x4188503c, 0x03f66264), TOBN(0x9e5e7f13, 0x7f9fdfab),
-         TOBN(0x565eb76c, 0x5fcc1aba), TOBN(0xea632548, 0x59b5bff8),
-         TOBN(0x5587c087, 0xaab6d3fa), TOBN(0x92b639ea, 0x6ce39c1b),
-         TOBN(0x0706e782, 0x953b135c), TOBN(0x7308912e, 0x425268ef),
-         TOBN(0x599e92c7, 0x090e7469), TOBN(0x83b90f52, 0x9bc35e75),
-         TOBN(0x4750b3d0, 0x244975b3), TOBN(0xf3a44358, 0x11965d72),
-         TOBN(0x179c6774, 0x9c8dc751), TOBN(0xff18cdfe, 0xd23d9ff0),
-         TOBN(0xc4013833, 0x2028e247), TOBN(0x96e280e2, 0xf3bfbc79),
-         TOBN(0xf60417bd, 0xd0880a84), TOBN(0x263c9f3d, 0x2a568151),
-         TOBN(0x36be15b3, 0x2d2ce811), TOBN(0x846dc0c2, 0xf8291d21),
-         TOBN(0x5cfa0ecb, 0x789fcfdb), TOBN(0x45a0beed, 0xd7535b9a),
-         TOBN(0xec8e9f07, 0x96d69af1), TOBN(0x31a7c5b8, 0x599ab6dc),
-         TOBN(0xd36d45ef, 0xf9e2e09f), TOBN(0x3cf49ef1, 0xdcee954b),
-         TOBN(0x6be34cf3, 0x086cff9b), TOBN(0x88dbd491, 0x39a3360f),
-         TOBN(0x1e96b8cc, 0x0dbfbd1d), TOBN(0xc1e5f7bf, 0xcb7e2552),
-         TOBN(0x0547b214, 0x28819d98), TOBN(0xc770dd9c, 0x7aea9dcb),
-         TOBN(0xaef0d4c7, 0x041d68c8), TOBN(0xcc2b9818, 0x13cb9ba8),
-         TOBN(0x7fc7bc76, 0xfe86c607), TOBN(0x6b7b9337, 0x502a9a95),
-         TOBN(0x1948dc27, 0xd14dab63), TOBN(0x249dd198, 0xdae047be),
-         TOBN(0xe8356584, 0xa981a202), TOBN(0x3531dd18, 0x3a893387),
-         TOBN(0x1be11f90, 0xc85c7209), TOBN(0x93d2fe1e, 0xe2a52b5a),
-         TOBN(0x8225bfe2, 0xec6d6b97), TOBN(0x9cf6d6f4, 0xbd0aa5de),
-         TOBN(0x911459cb, 0x54779f5f), TOBN(0x5649cddb, 0x86aeb1f3),
-         TOBN(0x32133579, 0x3f26ce5a), TOBN(0xc289a102, 0x550f431e),
-         TOBN(0x559dcfda, 0x73b84c6f), TOBN(0x84973819, 0xee3ac4d7),
-         TOBN(0xb51e55e6, 0xf2606a82), TOBN(0xe25f7061, 0x90f2fb57),
-         TOBN(0xacef6c2a, 0xb1a4e37c), TOBN(0x864e359d, 0x5dcf2706),
-         TOBN(0x479e6b18, 0x7ce57316), TOBN(0x2cab2500, 0x3a96b23d),
-         TOBN(0xed489862, 0x8ef16df7), TOBN(0x2056538c, 0xef3758b5),
-         TOBN(0xa7df865e, 0xf15d3101), TOBN(0x80c5533a, 0x61b553d7),
-         TOBN(0x366e1997, 0x4ed14294), TOBN(0x6620741f, 0xb3c0bcd6),
-         TOBN(0x21d1d9c4, 0xedc45418), TOBN(0x005b859e, 0xc1cc4a9d),
-         TOBN(0xdf01f630, 0xa1c462f0), TOBN(0x15d06cf3, 0xf26820c7),
-         TOBN(0x9f7f24ee, 0x3484be47), TOBN(0x2ff33e96, 0x4a0c902f),
-         TOBN(0x00bdf457, 0x5a0bc453), TOBN(0x2378dfaf, 0x1aa238db),
-         TOBN(0x272420ec, 0x856720f2), TOBN(0x2ad9d95b, 0x96797291),
-         TOBN(0xd1242cc6, 0x768a1558), TOBN(0x2e287f8b, 0x5cc86aa8),
-         TOBN(0x796873d0, 0x990cecaa), TOBN(0xade55f81, 0x675d4080),
-         TOBN(0x2645eea3, 0x21f0cd84), TOBN(0x7a1efa0f, 0xb4e17d02),
-         TOBN(0xf6858420, 0x037cc061), TOBN(0x682e05f0, 0xd5d43e12),
-         TOBN(0x59c36994, 0x27218710), TOBN(0x85cbba4d, 0x3f7cd2fc),
-         TOBN(0x726f9729, 0x7a3cd22a), TOBN(0x9f8cd5dc, 0x4a628397),
-         TOBN(0x17b93ab9, 0xc23165ed), TOBN(0xff5f5dbf, 0x122823d4),
-         TOBN(0xc1e4e4b5, 0x654a446d), TOBN(0xd1a9496f, 0x677257ba),
-         TOBN(0x6387ba94, 0xde766a56), TOBN(0x23608bc8, 0x521ec74a),
-         TOBN(0x16a522d7, 0x6688c4d4), TOBN(0x9d6b4282, 0x07373abd),
-         TOBN(0xa62f07ac, 0xb42efaa3), TOBN(0xf73e00f7, 0xe3b90180),
-         TOBN(0x36175fec, 0x49421c3e), TOBN(0xc4e44f9b, 0x3dcf2678),
-         TOBN(0x76df436b, 0x7220f09f), TOBN(0x172755fb, 0x3aa8b6cf),
-         TOBN(0xbab89d57, 0x446139cc), TOBN(0x0a0a6e02, 0x5fe0208f),
-         TOBN(0xcdbb63e2, 0x11e5d399), TOBN(0x33ecaa12, 0xa8977f0b),
-         TOBN(0x59598b21, 0xf7c42664), TOBN(0xb3e91b32, 0xab65d08a),
-         TOBN(0x035822ee, 0xf4502526), TOBN(0x1dcf0176, 0x720a82a9),
-         TOBN(0x50f8598f, 0x3d589e02), TOBN(0xdf0478ff, 0xb1d63d2c),
-         TOBN(0x8b8068bd, 0x1571cd07), TOBN(0x30c3aa4f, 0xd79670cd),
-         TOBN(0x25e8fd4b, 0x941ade7f), TOBN(0x3d1debdc, 0x32790011),
-         TOBN(0x65b6dcbd, 0x3a3f9ff0), TOBN(0x282736a4, 0x793de69c),
-         TOBN(0xef69a0c3, 0xd41d3bd3), TOBN(0xb533b8c9, 0x07a26bde),
-         TOBN(0xe2801d97, 0xdb2edf9f), TOBN(0xdc4a8269, 0xe1877af0),
-         TOBN(0x6c1c5851, 0x3d590dbe), TOBN(0x84632f6b, 0xee4e9357),
-         TOBN(0xd36d36b7, 0x79b33374), TOBN(0xb46833e3, 0x9bbca2e6),
-         TOBN(0x37893913, 0xf7fc0586), TOBN(0x385315f7, 0x66bf4719),
-         TOBN(0x72c56293, 0xb31855dc), TOBN(0xd1416d4e, 0x849061fe),
-         TOBN(0xbeb3ab78, 0x51047213), TOBN(0x447f6e61, 0xf040c996),
-         TOBN(0xd06d310d, 0x638b1d0c), TOBN(0xe28a413f, 0xbad1522e),
-         TOBN(0x685a76cb, 0x82003f86), TOBN(0x610d07f7, 0x0bcdbca3),
-         TOBN(0x6ff66021, 0x9ca4c455), TOBN(0x7df39b87, 0xcea10eec),
-         TOBN(0xb9255f96, 0xe22db218), TOBN(0x8cc6d9eb, 0x08a34c44),
-         TOBN(0xcd4ffb86, 0x859f9276), TOBN(0x8fa15eb2, 0x50d07335),
-         TOBN(0xdf553845, 0xcf2c24b5), TOBN(0x89f66a9f, 0x52f9c3ba),
-         TOBN(0x8f22b5b9, 0xe4a7ceb3), TOBN(0xaffef809, 0x0e134686),
-         TOBN(0x3e53e1c6, 0x8eb8fac2), TOBN(0x93c1e4eb, 0x28aec98e),
-         TOBN(0xb6b91ec5, 0x32a43bcb), TOBN(0x2dbfa947, 0xb2d74a51),
-         TOBN(0xe065d190, 0xca84bad7), TOBN(0xfb13919f, 0xad58e65c),
-         TOBN(0x3c41718b, 0xf1cb6e31), TOBN(0x688969f0, 0x06d05c3f),
-         TOBN(0xd4f94ce7, 0x21264d45), TOBN(0xfdfb65e9, 0x7367532b),
-         TOBN(0x5b1be8b1, 0x0945a39d), TOBN(0x229f789c, 0x2b8baf3b),
-         TOBN(0xd8f41f3e, 0x6f49f15d), TOBN(0x678ce828, 0x907f0792),
-         TOBN(0xc69ace82, 0xfca6e867), TOBN(0x106451ae, 0xd01dcc89),
-         TOBN(0x1bb4f7f0, 0x19fc32d2), TOBN(0x64633dfc, 0xb00c52d2),
-         TOBN(0x8f13549a, 0xad9ea445), TOBN(0x99a3bf50, 0xfb323705),
-         TOBN(0x0c9625a2, 0x534d4dbc), TOBN(0x45b8f1d1, 0xc2a2fea3),
-         TOBN(0x76ec21a1, 0xa530fc1a), TOBN(0x4bac9c2a, 0x9e5bd734),
-         TOBN(0x5996d76a, 0x7b4e3587), TOBN(0x0045cdee, 0x1182d9e3),
-         TOBN(0x1aee24b9, 0x1207f13d), TOBN(0x66452e97, 0x97345a41),
-         TOBN(0x16e5b054, 0x9f950cd0), TOBN(0x9cc72fb1, 0xd7fdd075),
-         TOBN(0x6edd61e7, 0x66249663), TOBN(0xde4caa4d, 0xf043cccb),
-         TOBN(0x11b1f57a, 0x55c7ac17), TOBN(0x779cbd44, 0x1a85e24d),
-         TOBN(0x78030f86, 0xe46081e7), TOBN(0xfd4a6032, 0x8e20f643),
-         TOBN(0xcc7a6488, 0x0a750c0f), TOBN(0x39bacfe3, 0x4e548e83),
-         TOBN(0x3d418c76, 0x0c110f05), TOBN(0x3e4daa4c, 0xb1f11588),
-         TOBN(0x2733e7b5, 0x5ffc69ff), TOBN(0x46f147bc, 0x92053127),
-         TOBN(0x885b2434, 0xd722df94), TOBN(0x6a444f65, 0xe6fc6b7c)},
-        {TOBN(0x7a1a465a, 0xc3f16ea8), TOBN(0x115a461d, 0xb2f1d11c),
-         TOBN(0x4767dd95, 0x6c68a172), TOBN(0x3392f2eb, 0xd13a4698),
-         TOBN(0xc7a99ccd, 0xe526cdc7), TOBN(0x8e537fdc, 0x22292b81),
-         TOBN(0x76d8cf69, 0xa6d39198), TOBN(0xffc5ff43, 0x2446852d),
-         TOBN(0x97b14f7e, 0xa90567e6), TOBN(0x513257b7, 0xb6ae5cb7),
-         TOBN(0x85454a3c, 0x9f10903d), TOBN(0xd8d2c9ad, 0x69bc3724),
-         TOBN(0x38da9324, 0x6b29cb44), TOBN(0xb540a21d, 0x77c8cbac),
-         TOBN(0x9bbfe435, 0x01918e42), TOBN(0xfffa707a, 0x56c3614e),
-         TOBN(0x0ce4e3f1, 0xd4e353b7), TOBN(0x062d8a14, 0xef46b0a0),
-         TOBN(0x6408d5ab, 0x574b73fd), TOBN(0xbc41d1c9, 0xd3273ffd),
-         TOBN(0x3538e1e7, 0x6be77800), TOBN(0x71fe8b37, 0xc5655031),
-         TOBN(0x1cd91621, 0x6b9b331a), TOBN(0xad825d0b, 0xbb388f73),
-         TOBN(0x56c2e05b, 0x1cb76219), TOBN(0x0ec0bf91, 0x71567e7e),
-         TOBN(0xe7076f86, 0x61c4c910), TOBN(0xd67b085b, 0xbabc04d9),
-         TOBN(0x9fb90459, 0x5e93a96a), TOBN(0x7526c1ea, 0xfbdc249a),
-         TOBN(0x0d44d367, 0xecdd0bb7), TOBN(0x95399917, 0x9dc0d695),
-         TOBN(0x61360ee9, 0x9e240d18), TOBN(0x057cdcac, 0xb4b94466),
-         TOBN(0xe7667cd1, 0x2fe5325c), TOBN(0x1fa297b5, 0x21974e3b),
-         TOBN(0xfa4081e7, 0xdb083d76), TOBN(0x31993be6, 0xf206bd15),
-         TOBN(0x8949269b, 0x14c19f8c), TOBN(0x21468d72, 0xa9d92357),
-         TOBN(0x2ccbc583, 0xa4c506ec), TOBN(0x957ed188, 0xd1acfe97),
-         TOBN(0x8baed833, 0x12f1aea2), TOBN(0xef2a6cb4, 0x8325362d),
-         TOBN(0x130dde42, 0x8e195c43), TOBN(0xc842025a, 0x0e6050c6),
-         TOBN(0x2da972a7, 0x08686a5d), TOBN(0xb52999a1, 0xe508b4a8),
-         TOBN(0xd9f090b9, 0x10a5a8bd), TOBN(0xca91d249, 0x096864da),
-         TOBN(0x8e6a93be, 0x3f67dbc1), TOBN(0xacae6fba, 0xf5f4764c),
-         TOBN(0x1563c6e0, 0xd21411a0), TOBN(0x28fa787f, 0xda0a4ad8),
-         TOBN(0xd524491c, 0x908c8030), TOBN(0x1257ba0e, 0x4c795f07),
-         TOBN(0x83f49167, 0xceca9754), TOBN(0x426d2cf6, 0x4b7939a0),
-         TOBN(0x2555e355, 0x723fd0bf), TOBN(0xa96e6d06, 0xc4f144e2),
-         TOBN(0x4768a8dd, 0x87880e61), TOBN(0x15543815, 0xe508e4d5),
-         TOBN(0x09d7e772, 0xb1b65e15), TOBN(0x63439dd6, 0xac302fa0),
-         TOBN(0xb93f802f, 0xc14e35c2), TOBN(0x71735b7c, 0x4341333c),
-         TOBN(0x03a25104, 0x16d4f362), TOBN(0x3f4d069b, 0xbf433c8e),
-         TOBN(0x0d83ae01, 0xf78f5a7c), TOBN(0x50a8ffbe, 0x7c4eed07),
-         TOBN(0xc74f8906, 0x76e10f83), TOBN(0x7d080966, 0x9ddaf8e1),
-         TOBN(0xb11df8e1, 0x698e04cc), TOBN(0x877be203, 0x169005c8),
-         TOBN(0x32749e8c, 0x4f3c6179), TOBN(0x2dbc9d0a, 0x7853fc05),
-         TOBN(0x187d4f93, 0x9454d937), TOBN(0xe682ce9d, 0xb4800e1b),
-         TOBN(0xa9129ad8, 0x165e68e8), TOBN(0x0fe29735, 0xbe7f785b),
-         TOBN(0x5303f40c, 0x5b9e02b7), TOBN(0xa37c9692, 0x35ee04e8),
-         TOBN(0x5f46cc20, 0x34d6632b), TOBN(0x55ef72b2, 0x96ac545b),
-         TOBN(0xabec5c1f, 0x7b91b062), TOBN(0x0a79e1c7, 0xbb33e821),
-         TOBN(0xbb04b428, 0x3a9f4117), TOBN(0x0de1f28f, 0xfd2a475a),
-         TOBN(0x31019ccf, 0x3a4434b4), TOBN(0xa3458111, 0x1a7954dc),
-         TOBN(0xa9dac80d, 0xe34972a7), TOBN(0xb043d054, 0x74f6b8dd),
-         TOBN(0x021c319e, 0x11137b1a), TOBN(0x00a754ce, 0xed5cc03f),
-         TOBN(0x0aa2c794, 0xcbea5ad4), TOBN(0x093e67f4, 0x70c015b6),
-         TOBN(0x72cdfee9, 0xc97e3f6b), TOBN(0xc10bcab4, 0xb6da7461),
-         TOBN(0x3b02d2fc, 0xb59806b9), TOBN(0x85185e89, 0xa1de6f47),
-         TOBN(0x39e6931f, 0x0eb6c4d4), TOBN(0x4d4440bd, 0xd4fa5b04),
-         TOBN(0x5418786e, 0x34be7eb8), TOBN(0x6380e521, 0x9d7259bc),
-         TOBN(0x20ac0351, 0xd598d710), TOBN(0x272c4166, 0xcb3a4da4),
-         TOBN(0xdb82fe1a, 0xca71de1f), TOBN(0x746e79f2, 0xd8f54b0f),
-         TOBN(0x6e7fc736, 0x4b573e9b), TOBN(0x75d03f46, 0xfd4b5040),
-         TOBN(0x5c1cc36d, 0x0b98d87b), TOBN(0x513ba3f1, 0x1f472da1),
-         TOBN(0x79d0af26, 0xabb177dd), TOBN(0xf82ab568, 0x7891d564),
-         TOBN(0x2b6768a9, 0x72232173), TOBN(0xefbb3bb0, 0x8c1f6619),
-         TOBN(0xb29c11db, 0xa6d18358), TOBN(0x519e2797, 0xb0916d3a),
-         TOBN(0xd4dc18f0, 0x9188e290), TOBN(0x648e86e3, 0x98b0ca7f),
-         TOBN(0x859d3145, 0x983c38b5), TOBN(0xb14f176c, 0x637abc8b),
-         TOBN(0x2793fb9d, 0xcaff7be6), TOBN(0xebe5a55f, 0x35a66a5a),
-         TOBN(0x7cec1dcd, 0x9f87dc59), TOBN(0x7c595cd3, 0xfbdbf560),
-         TOBN(0x5b543b22, 0x26eb3257), TOBN(0x69080646, 0xc4c935fd),
-         TOBN(0x7f2e4403, 0x81e9ede3), TOBN(0x243c3894, 0xcaf6df0a),
-         TOBN(0x7c605bb1, 0x1c073b11), TOBN(0xcd06a541, 0xba6a4a62),
-         TOBN(0x29168949, 0x49d4e2e5), TOBN(0x33649d07, 0x4af66880),
-         TOBN(0xbfc0c885, 0xe9a85035), TOBN(0xb4e52113, 0xfc410f4b),
-         TOBN(0xdca3b706, 0x78a6513b), TOBN(0x92ea4a2a, 0x9edb1943),
-         TOBN(0x02642216, 0xdb6e2dd8), TOBN(0x9b45d0b4, 0x9fd57894),
-         TOBN(0x114e70db, 0xc69d11ae), TOBN(0x1477dd19, 0x4c57595f),
-         TOBN(0xbc2208b4, 0xec77c272), TOBN(0x95c5b4d7, 0xdb68f59c),
-         TOBN(0xb8c4fc63, 0x42e532b7), TOBN(0x386ba422, 0x9ae35290),
-         TOBN(0xfb5dda42, 0xd201ecbc), TOBN(0x2353dc8b, 0xa0e38fd6),
-         TOBN(0x9a0b85ea, 0x68f7e978), TOBN(0x96ec5682, 0x2ad6d11f),
-         TOBN(0x5e279d6c, 0xe5f6886d), TOBN(0xd3fe03cd, 0x3cb1914d),
-         TOBN(0xfe541fa4, 0x7ea67c77), TOBN(0x952bd2af, 0xe3ea810c),
-         TOBN(0x791fef56, 0x8d01d374), TOBN(0xa3a1c621, 0x0f11336e),
-         TOBN(0x5ad0d5a9, 0xc7ec6d79), TOBN(0xff7038af, 0x3225c342),
-         TOBN(0x003c6689, 0xbc69601b), TOBN(0x25059bc7, 0x45e8747d),
-         TOBN(0xfa4965b2, 0xf2086fbf), TOBN(0xf6840ea6, 0x86916078),
-         TOBN(0xd7ac7620, 0x70081d6c), TOBN(0xe600da31, 0xb5328645),
-         TOBN(0x01916f63, 0x529b8a80), TOBN(0xe80e4858, 0x2d7d6f3e),
-         TOBN(0x29eb0fe8, 0xd664ca7c), TOBN(0xf017637b, 0xe7b43b0c),
-         TOBN(0x9a75c806, 0x76cb2566), TOBN(0x8f76acb1, 0xb24892d9),
-         TOBN(0x7ae7b9cc, 0x1f08fe45), TOBN(0x19ef7329, 0x6a4907d8),
-         TOBN(0x2db4ab71, 0x5f228bf0), TOBN(0xf3cdea39, 0x817032d7),
-         TOBN(0x0b1f482e, 0xdcabe3c0), TOBN(0x3baf76b4, 0xbb86325c),
-         TOBN(0xd49065e0, 0x10089465), TOBN(0x3bab5d29, 0x8e77c596),
-         TOBN(0x7636c3a6, 0x193dbd95), TOBN(0xdef5d294, 0xb246e499),
-         TOBN(0xb22c58b9, 0x286b2475), TOBN(0xa0b93939, 0xcd80862b),
-         TOBN(0x3002c83a, 0xf0992388), TOBN(0x6de01f9b, 0xeacbe14c),
-         TOBN(0x6aac688e, 0xadd70482), TOBN(0x708de92a, 0x7b4a4e8a),
-         TOBN(0x75b6dd73, 0x758a6eef), TOBN(0xea4bf352, 0x725b3c43),
-         TOBN(0x10041f2c, 0x87912868), TOBN(0xb1b1be95, 0xef09297a),
-         TOBN(0x19ae23c5, 0xa9f3860a), TOBN(0xc4f0f839, 0x515dcf4b),
-         TOBN(0x3c7ecca3, 0x97f6306a), TOBN(0x744c44ae, 0x68a3a4b0),
-         TOBN(0x69cd13a0, 0xb3a1d8a2), TOBN(0x7cad0a1e, 0x5256b578),
-         TOBN(0xea653fcd, 0x33791d9e), TOBN(0x9cc2a05d, 0x74b2e05f),
-         TOBN(0x73b391dc, 0xfd7affa2), TOBN(0xddb7091e, 0xb6b05442),
-         TOBN(0xc71e27bf, 0x8538a5c6), TOBN(0x195c63dd, 0x89abff17),
-         TOBN(0xfd315285, 0x1b71e3da), TOBN(0x9cbdfda7, 0xfa680fa0),
-         TOBN(0x9db876ca, 0x849d7eab), TOBN(0xebe2764b, 0x3c273271),
-         TOBN(0x663357e3, 0xf208dcea), TOBN(0x8c5bd833, 0x565b1b70),
-         TOBN(0xccc3b4f5, 0x9837fc0d), TOBN(0x9b641ba8, 0xa79cf00f),
-         TOBN(0x7428243d, 0xdfdf3990), TOBN(0x83a594c4, 0x020786b1),
-         TOBN(0xb712451a, 0x526c4502), TOBN(0x9d39438e, 0x6adb3f93),
-         TOBN(0xfdb261e3, 0xe9ff0ccd), TOBN(0x80344e3c, 0xe07af4c3),
-         TOBN(0x75900d7c, 0x2fa4f126), TOBN(0x08a3b865, 0x5c99a232),
-         TOBN(0x2478b6bf, 0xdb25e0c3), TOBN(0x482cc2c2, 0x71db2edf),
-         TOBN(0x37df7e64, 0x5f321bb8), TOBN(0x8a93821b, 0x9a8005b4),
-         TOBN(0x3fa2f10c, 0xcc8c1958), TOBN(0x0d332218, 0x2c269d0a),
-         TOBN(0x20ab8119, 0xe246b0e6), TOBN(0xb39781e4, 0xd349fd17),
-         TOBN(0xd293231e, 0xb31aa100), TOBN(0x4b779c97, 0xbb032168),
-         TOBN(0x4b3f19e1, 0xc8470500), TOBN(0x45b7efe9, 0x0c4c869d),
-         TOBN(0xdb84f38a, 0xa1a6bbcc), TOBN(0x3b59cb15, 0xb2fddbc1),
-         TOBN(0xba5514df, 0x3fd165e8), TOBN(0x499fd6a9, 0x061f8811),
-         TOBN(0x72cd1fe0, 0xbfef9f00), TOBN(0x120a4bb9, 0x79ad7e8a),
-         TOBN(0xf2ffd095, 0x5f4a5ac5), TOBN(0xcfd174f1, 0x95a7a2f0),
-         TOBN(0xd42301ba, 0x9d17baf1), TOBN(0xd2fa487a, 0x77f22089),
-         TOBN(0x9cb09efe, 0xb1dc77e1), TOBN(0xe9566939, 0x21c99682),
-         TOBN(0x8c546901, 0x6c6067bb), TOBN(0xfd378574, 0x61c24456),
-         TOBN(0x2b6a6cbe, 0x81796b33), TOBN(0x62d550f6, 0x58e87f8b),
-         TOBN(0x1b763e1c, 0x7f1b01b4), TOBN(0x4b93cfea, 0x1b1b5e12),
-         TOBN(0xb9345238, 0x1d531696), TOBN(0x57201c00, 0x88cdde69),
-         TOBN(0xdde92251, 0x9a86afc7), TOBN(0xe3043895, 0xbd35cea8),
-         TOBN(0x7608c1e1, 0x8555970d), TOBN(0x8267dfa9, 0x2535935e),
-         TOBN(0xd4c60a57, 0x322ea38b), TOBN(0xe0bf7977, 0x804ef8b5),
-         TOBN(0x1a0dab28, 0xc06fece4), TOBN(0xd405991e, 0x94e7b49d),
-         TOBN(0xc542b6d2, 0x706dab28), TOBN(0xcb228da3, 0xa91618fb),
-         TOBN(0x224e4164, 0x107d1cea), TOBN(0xeb9fdab3, 0xd0f5d8f1),
-         TOBN(0xc02ba386, 0x0d6e41cd), TOBN(0x676a72c5, 0x9b1f7146),
-         TOBN(0xffd6dd98, 0x4d6cb00b), TOBN(0xcef9c5ca, 0xde2e8d7c),
-         TOBN(0xa1bbf5d7, 0x641c7936), TOBN(0x1b95b230, 0xee8f772e),
-         TOBN(0xf765a92e, 0xe8ac25b1), TOBN(0xceb04cfc, 0x3a18b7c6),
-         TOBN(0x27944cef, 0x0acc8966), TOBN(0xcbb3c957, 0x434c1004),
-         TOBN(0x9c9971a1, 0xa43ff93c), TOBN(0x5bc2db17, 0xa1e358a9),
-         TOBN(0x45b4862e, 0xa8d9bc82), TOBN(0x70ebfbfb, 0x2201e052),
-         TOBN(0xafdf64c7, 0x92871591), TOBN(0xea5bcae6, 0xb42d0219),
-         TOBN(0xde536c55, 0x2ad8f03c), TOBN(0xcd6c3f4d, 0xa76aa33c),
-         TOBN(0xbeb5f623, 0x0bca6de3), TOBN(0xdd20dd99, 0xb1e706fd),
-         TOBN(0x90b3ff9d, 0xac9059d4), TOBN(0x2d7b2902, 0x7ccccc4e),
-         TOBN(0x8a090a59, 0xce98840f), TOBN(0xa5d947e0, 0x8410680a),
-         TOBN(0x49ae346a, 0x923379a5), TOBN(0x7dbc84f9, 0xb28a3156),
-         TOBN(0xfd40d916, 0x54a1aff2), TOBN(0xabf318ba, 0x3a78fb9b),
-         TOBN(0x50152ed8, 0x3029f95e), TOBN(0x9fc1dd77, 0xc58ad7fa),
-         TOBN(0x5fa57915, 0x13595c17), TOBN(0xb9504668, 0x8f62b3a9),
-         TOBN(0x907b5b24, 0xff3055b0), TOBN(0x2e995e35, 0x9a84f125),
-         TOBN(0x87dacf69, 0x7e9bbcfb), TOBN(0x95d0c1d6, 0xe86d96e3),
-         TOBN(0x65726e3c, 0x2d95a75c), TOBN(0x2c3c9001, 0xacd27f21),
-         TOBN(0x1deab561, 0x6c973f57), TOBN(0x108b7e2c, 0xa5221643),
-         TOBN(0x5fee9859, 0xc4ef79d4), TOBN(0xbd62b88a, 0x40d4b8c6),
-         TOBN(0xb4dd29c4, 0x197c75d6), TOBN(0x266a6df2, 0xb7076feb),
-         TOBN(0x9512d0ea, 0x4bf2df11), TOBN(0x1320c24f, 0x6b0cc9ec),
-         TOBN(0x6bb1e0e1, 0x01a59596), TOBN(0x8317c5bb, 0xeff9aaac),
-         TOBN(0x65bb405e, 0x385aa6c9), TOBN(0x613439c1, 0x8f07988f),
-         TOBN(0xd730049f, 0x16a66e91), TOBN(0xe97f2820, 0xfa1b0e0d),
-         TOBN(0x4131e003, 0x304c28ea), TOBN(0x820ab732, 0x526bac62),
-         TOBN(0xb2ac9ef9, 0x28714423), TOBN(0x54ecfffa, 0xadb10cb2),
-         TOBN(0x8781476e, 0xf886a4cc), TOBN(0x4b2c87b5, 0xdb2f8d49),
-         TOBN(0xe857cd20, 0x0a44295d), TOBN(0x707d7d21, 0x58c6b044),
-         TOBN(0xae8521f9, 0xf596757c), TOBN(0x87448f03, 0x67b2b714),
-         TOBN(0x13a9bc45, 0x5ebcd58d), TOBN(0x79bcced9, 0x9122d3c1),
-         TOBN(0x3c644247, 0x9e076642), TOBN(0x0cf22778, 0x2df4767d),
-         TOBN(0x5e61aee4, 0x71d444b6), TOBN(0x211236bf, 0xc5084a1d),
-         TOBN(0x7e15bc9a, 0x4fd3eaf6), TOBN(0x68df2c34, 0xab622bf5),
-         TOBN(0x9e674f0f, 0x59bf4f36), TOBN(0xf883669b, 0xd7f34d73),
-         TOBN(0xc48ac1b8, 0x31497b1d), TOBN(0x323b925d, 0x5106703b),
-         TOBN(0x22156f42, 0x74082008), TOBN(0xeffc521a, 0xc8482bcb),
-         TOBN(0x5c6831bf, 0x12173479), TOBN(0xcaa2528f, 0xc4739490),
-         TOBN(0x84d2102a, 0x8f1b3c4d), TOBN(0xcf64dfc1, 0x2d9bec0d),
-         TOBN(0x433febad, 0x78a546ef), TOBN(0x1f621ec3, 0x7b73cef1),
-         TOBN(0x6aecd627, 0x37338615), TOBN(0x162082ab, 0x01d8edf6),
-         TOBN(0x833a8119, 0x19e86b66), TOBN(0x6023a251, 0xd299b5db),
-         TOBN(0xf5bb0c3a, 0xbbf04b89), TOBN(0x6735eb69, 0xae749a44),
-         TOBN(0xd0e058c5, 0x4713de3b), TOBN(0xfdf2593e, 0x2c3d4ccd),
-         TOBN(0x1b8f414e, 0xfdd23667), TOBN(0xdd52aaca, 0xfa2015ee),
-         TOBN(0x3e31b517, 0xbd9625ff), TOBN(0x5ec9322d, 0x8db5918c),
-         TOBN(0xbc73ac85, 0xa96f5294), TOBN(0x82aa5bf3, 0x61a0666a),
-         TOBN(0x49755810, 0xbf08ac42), TOBN(0xd21cdfd5, 0x891cedfc),
-         TOBN(0x918cb57b, 0x67f8be10), TOBN(0x365d1a7c, 0x56ffa726),
-         TOBN(0x2435c504, 0x6532de93), TOBN(0xc0fc5e10, 0x2674cd02),
-         TOBN(0x6e51fcf8, 0x9cbbb142), TOBN(0x1d436e5a, 0xafc50692),
-         TOBN(0x766bffff, 0x3fbcae22), TOBN(0x3148c2fd, 0xfd55d3b8),
-         TOBN(0x52c7fdc9, 0x233222fa), TOBN(0x89ff1092, 0xe419fb6b),
-         TOBN(0x3cd6db99, 0x25254977), TOBN(0x2e85a161, 0x1cf12ca7),
-         TOBN(0xadd2547c, 0xdc810bc9), TOBN(0xea3f458f, 0x9d257c22),
-         TOBN(0x642c1fbe, 0x27d6b19b), TOBN(0xed07e6b5, 0x140481a6),
-         TOBN(0x6ada1d42, 0x86d2e0f8), TOBN(0xe5920122, 0x0e8a9fd5),
-         TOBN(0x02c936af, 0x708c1b49), TOBN(0x60f30fee, 0x2b4bfaff),
-         TOBN(0x6637ad06, 0x858e6a61), TOBN(0xce4c7767, 0x3fd374d0),
-         TOBN(0x39d54b2d, 0x7188defb), TOBN(0xa8c9d250, 0xf56a6b66),
-         TOBN(0x58fc0f5e, 0xb24fe1dc), TOBN(0x9eaf9dee, 0x6b73f24c),
-         TOBN(0xa90d588b, 0x33650705), TOBN(0xde5b62c5, 0xaf2ec729),
-         TOBN(0x5c72cfae, 0xd3c2b36e), TOBN(0x868c19d5, 0x034435da),
-         TOBN(0x88605f93, 0xe17ee145), TOBN(0xaa60c4ee, 0x77a5d5b1),
-         TOBN(0xbcf5bfd2, 0x3b60c472), TOBN(0xaf4ef13c, 0xeb1d3049),
-         TOBN(0x373f44fc, 0xe13895c9), TOBN(0xf29b382f, 0x0cbc9822),
-         TOBN(0x1bfcb853, 0x73efaef6), TOBN(0xcf56ac9c, 0xa8c96f40),
-         TOBN(0xd7adf109, 0x7a191e24), TOBN(0x98035f44, 0xbf8a8dc2),
-         TOBN(0xf40a71b9, 0x1e750c84), TOBN(0xc57f7b0c, 0x5dc6c469),
-         TOBN(0x49a0e79c, 0x6fbc19c1), TOBN(0x6b0f5889, 0xa48ebdb8),
-         TOBN(0x5d3fd084, 0xa07c4e9f), TOBN(0xc3830111, 0xab27de14),
-         TOBN(0x0e4929fe, 0x33e08dcc), TOBN(0xf4a5ad24, 0x40bb73a3),
-         TOBN(0xde86c2bf, 0x490f97ca), TOBN(0x288f09c6, 0x67a1ce18),
-         TOBN(0x364bb886, 0x1844478d), TOBN(0x7840fa42, 0xceedb040),
-         TOBN(0x1269fdd2, 0x5a631b37), TOBN(0x94761f1e, 0xa47c8b7d),
-         TOBN(0xfc0c2e17, 0x481c6266), TOBN(0x85e16ea2, 0x3daa5fa7),
-         TOBN(0xccd86033, 0x92491048), TOBN(0x0c2f6963, 0xf4d402d7),
-         TOBN(0x6336f7df, 0xdf6a865c), TOBN(0x0a2a463c, 0xb5c02a87),
-         TOBN(0xb0e29be7, 0xbf2f12ee), TOBN(0xf0a22002, 0x66bad988),
-         TOBN(0x27f87e03, 0x9123c1d7), TOBN(0x21669c55, 0x328a8c98),
-         TOBN(0x186b9803, 0x92f14529), TOBN(0xd3d056cc, 0x63954df3),
-         TOBN(0x2f03fd58, 0x175a46f6), TOBN(0x63e34ebe, 0x11558558),
-         TOBN(0xe13fedee, 0x5b80cfa5), TOBN(0xe872a120, 0xd401dbd1),
-         TOBN(0x52657616, 0xe8a9d667), TOBN(0xbc8da4b6, 0xe08d6693),
-         TOBN(0x370fb9bb, 0x1b703e75), TOBN(0x6773b186, 0xd4338363),
-         TOBN(0x18dad378, 0xecef7bff), TOBN(0xaac787ed, 0x995677da),
-         TOBN(0x4801ea8b, 0x0437164b), TOBN(0xf430ad20, 0x73fe795e),
-         TOBN(0xb164154d, 0x8ee5eb73), TOBN(0x0884ecd8, 0x108f7c0e),
-         TOBN(0x0e6ec096, 0x5f520698), TOBN(0x640631fe, 0x44f7b8d9),
-         TOBN(0x92fd34fc, 0xa35a68b9), TOBN(0x9c5a4b66, 0x4d40cf4e),
-         TOBN(0x949454bf, 0x80b6783d), TOBN(0x80e701fe, 0x3a320a10),
-         TOBN(0x8d1a564a, 0x1a0a39b2), TOBN(0x1436d53d, 0x320587db),
-         TOBN(0xf5096e6d, 0x6556c362), TOBN(0xbc23a3c0, 0xe2455d7e),
-         TOBN(0x3a7aee54, 0x807230f9), TOBN(0x9ba1cfa6, 0x22ae82fd),
-         TOBN(0x833a057a, 0x99c5d706), TOBN(0x8be85f4b, 0x842315c9),
-         TOBN(0xd083179a, 0x66a72f12), TOBN(0x2fc77d5d, 0xcdcc73cd),
-         TOBN(0x22b88a80, 0x5616ee30), TOBN(0xfb09548f, 0xe7ab1083),
-         TOBN(0x8ad6ab0d, 0x511270cd), TOBN(0x61f6c57a, 0x6924d9ab),
-         TOBN(0xa0f7bf72, 0x90aecb08), TOBN(0x849f87c9, 0x0df784a4),
-         TOBN(0x27c79c15, 0xcfaf1d03), TOBN(0xbbf9f675, 0xc463face),
-         TOBN(0x91502c65, 0x765ba543), TOBN(0x18ce3cac, 0x42ea60dd),
-         TOBN(0xe5cee6ac, 0x6e43ecb3), TOBN(0x63e4e910, 0x68f2aeeb),
-         TOBN(0x26234fa3, 0xc85932ee), TOBN(0x96883e8b, 0x4c90c44d),
-         TOBN(0x29b9e738, 0xa18a50f6), TOBN(0xbfc62b2a, 0x3f0420df),
-         TOBN(0xd22a7d90, 0x6d3e1fa9), TOBN(0x17115618, 0xfe05b8a3),
-         TOBN(0x2a0c9926, 0xbb2b9c01), TOBN(0xc739fcc6, 0xe07e76a2),
-         TOBN(0x540e9157, 0x165e439a), TOBN(0x06353a62, 0x6a9063d8),
-         TOBN(0x84d95594, 0x61e927a3), TOBN(0x013b9b26, 0xe2e0be7f),
-         TOBN(0x4feaec3b, 0x973497f1), TOBN(0x15c0f94e, 0x093ebc2d),
-         TOBN(0x6af5f227, 0x33af0583), TOBN(0x0c2af206, 0xc61f3340),
-         TOBN(0xd25dbdf1, 0x4457397c), TOBN(0x2e8ed017, 0xcabcbae0),
-         TOBN(0xe3010938, 0xc2815306), TOBN(0xbaa99337, 0xe8c6cd68),
-         TOBN(0x08513182, 0x3b0ec7de), TOBN(0x1e1b822b, 0x58df05df),
-         TOBN(0x5c14842f, 0xa5c3b683), TOBN(0x98fe977e, 0x3eba34ce),
-         TOBN(0xfd2316c2, 0x0d5e8873), TOBN(0xe48d839a, 0xbd0d427d),
-         TOBN(0x495b2218, 0x623fc961), TOBN(0x24ee56e7, 0xb46fba5e),
-         TOBN(0x9184a55b, 0x91e4de58), TOBN(0xa7488ca5, 0xdfdea288),
-         TOBN(0xa723862e, 0xa8dcc943), TOBN(0x92d762b2, 0x849dc0fc),
-         TOBN(0x3c444a12, 0x091ff4a9), TOBN(0x581113fa, 0x0cada274),
-         TOBN(0xb9de0a45, 0x30d8eae2), TOBN(0x5e0fcd85, 0xdf6b41ea),
-         TOBN(0x6233ea68, 0xc094dbb5), TOBN(0xb77d062e, 0xd968d410),
-         TOBN(0x3e719bbc, 0x58b3002d), TOBN(0x68e7dd3d, 0x3dc49d58),
-         TOBN(0x8d825740, 0x013a5e58), TOBN(0x21311747, 0x3c9e3c1b),
-         TOBN(0x0cb0a2a7, 0x7c99b6ab), TOBN(0x5c48a3b3, 0xc2f888f2)},
-        {TOBN(0xc7913e91, 0x991724f3), TOBN(0x5eda799c, 0x39cbd686),
-         TOBN(0xddb595c7, 0x63d4fc1e), TOBN(0x6b63b80b, 0xac4fed54),
-         TOBN(0x6ea0fc69, 0x7e5fb516), TOBN(0x737708ba, 0xd0f1c964),
-         TOBN(0x9628745f, 0x11a92ca5), TOBN(0x61f37958, 0x9a86967a),
-         TOBN(0x9af39b2c, 0xaa665072), TOBN(0x78322fa4, 0xefd324ef),
-         TOBN(0x3d153394, 0xc327bd31), TOBN(0x81d5f271, 0x3129dab0),
-         TOBN(0xc72e0c42, 0xf48027f5), TOBN(0xaa40cdbc, 0x8536e717),
-         TOBN(0xf45a657a, 0x2d369d0f), TOBN(0xb03bbfc4, 0xea7f74e6),
-         TOBN(0x46a8c418, 0x0d738ded), TOBN(0x6f1a5bb0, 0xe0de5729),
-         TOBN(0xf10230b9, 0x8ba81675), TOBN(0x32c6f30c, 0x112b33d4),
-         TOBN(0x7559129d, 0xd8fffb62), TOBN(0x6a281b47, 0xb459bf05),
-         TOBN(0x77c1bd3a, 0xfa3b6776), TOBN(0x0709b380, 0x7829973a),
-         TOBN(0x8c26b232, 0xa3326505), TOBN(0x38d69272, 0xee1d41bf),
-         TOBN(0x0459453e, 0xffe32afa), TOBN(0xce8143ad, 0x7cb3ea87),
-         TOBN(0x932ec1fa, 0x7e6ab666), TOBN(0x6cd2d230, 0x22286264),
-         TOBN(0x459a46fe, 0x6736f8ed), TOBN(0x50bf0d00, 0x9eca85bb),
-         TOBN(0x0b825852, 0x877a21ec), TOBN(0x300414a7, 0x0f537a94),
-         TOBN(0x3f1cba40, 0x21a9a6a2), TOBN(0x50824eee, 0x76943c00),
-         TOBN(0xa0dbfcec, 0xf83cba5d), TOBN(0xf9538148, 0x93b4f3c0),
-         TOBN(0x61744162, 0x48f24dd7), TOBN(0x5322d64d, 0xe4fb09dd),
-         TOBN(0x57447384, 0x3d9325f3), TOBN(0xa9bef2d0, 0xf371cb84),
-         TOBN(0x77d2188b, 0xa61e36c5), TOBN(0xbbd6a7d7, 0xc602df72),
-         TOBN(0xba3aa902, 0x8f61bc0b), TOBN(0xf49085ed, 0x6ed0b6a1),
-         TOBN(0x8bc625d6, 0xae6e8298), TOBN(0x832b0b1d, 0xa2e9c01d),
-         TOBN(0xa337c447, 0xf1f0ced1), TOBN(0x800cc793, 0x9492dd2b),
-         TOBN(0x4b93151d, 0xbea08efa), TOBN(0x820cf3f8, 0xde0a741e),
-         TOBN(0xff1982dc, 0x1c0f7d13), TOBN(0xef921960, 0x84dde6ca),
-         TOBN(0x1ad7d972, 0x45f96ee3), TOBN(0x319c8dbe, 0x29dea0c7),
-         TOBN(0xd3ea3871, 0x7b82b99b), TOBN(0x75922d4d, 0x470eb624),
-         TOBN(0x8f66ec54, 0x3b95d466), TOBN(0x66e673cc, 0xbee1e346),
-         TOBN(0x6afe67c4, 0xb5f2b89a), TOBN(0x3de9c1e6, 0x290e5cd3),
-         TOBN(0x8c278bb6, 0x310a2ada), TOBN(0x420fa384, 0x0bdb323b),
-         TOBN(0x0ae1d63b, 0x0eb919b0), TOBN(0xd74ee51d, 0xa74b9620),
-         TOBN(0x395458d0, 0xa674290c), TOBN(0x324c930f, 0x4620a510),
-         TOBN(0x2d1f4d19, 0xfbac27d4), TOBN(0x4086e8ca, 0x9bedeeac),
-         TOBN(0x0cdd211b, 0x9b679ab8), TOBN(0x5970167d, 0x7090fec4),
-         TOBN(0x3420f2c9, 0xfaf1fc63), TOBN(0x616d333a, 0x328c8bb4),
-         TOBN(0x7d65364c, 0x57f1fe4a), TOBN(0x9343e877, 0x55e5c73a),
-         TOBN(0x5795176b, 0xe970e78c), TOBN(0xa36ccebf, 0x60533627),
-         TOBN(0xfc7c7380, 0x09cdfc1b), TOBN(0xb39a2afe, 0xb3fec326),
-         TOBN(0xb7ff1ba1, 0x6224408a), TOBN(0xcc856e92, 0x247cfc5e),
-         TOBN(0x01f102e7, 0xc18bc493), TOBN(0x4613ab74, 0x2091c727),
-         TOBN(0xaa25e89c, 0xc420bf2b), TOBN(0x00a53176, 0x90337ec2),
-         TOBN(0xd2be9f43, 0x7d025fc7), TOBN(0x3316fb85, 0x6e6fe3dc),
-         TOBN(0x27520af5, 0x9ac50814), TOBN(0xfdf95e78, 0x9a8e4223),
-         TOBN(0xb7e7df2a, 0x56bec5a0), TOBN(0xf7022f7d, 0xdf159e5d),
-         TOBN(0x93eeeab1, 0xcac1fe8f), TOBN(0x8040188c, 0x37451168),
-         TOBN(0x7ee8aa8a, 0xd967dce6), TOBN(0xfa0e79e7, 0x3abc9299),
-         TOBN(0x67332cfc, 0x2064cfd1), TOBN(0x339c31de, 0xb0651934),
-         TOBN(0x719b28d5, 0x2a3bcbea), TOBN(0xee74c82b, 0x9d6ae5c6),
-         TOBN(0x0927d05e, 0xbaf28ee6), TOBN(0x82cecf2c, 0x9d719028),
-         TOBN(0x0b0d353e, 0xddb30289), TOBN(0xfe4bb977, 0xfddb2e29),
-         TOBN(0xbb5bb990, 0x640bfd9e), TOBN(0xd226e277, 0x82f62108),
-         TOBN(0x4bf00985, 0x02ffdd56), TOBN(0x7756758a, 0x2ca1b1b5),
-         TOBN(0xc32b62a3, 0x5285fe91), TOBN(0xedbc546a, 0x8c9cd140),
-         TOBN(0x1e47a013, 0xaf5cb008), TOBN(0xbca7e720, 0x073ce8f2),
-         TOBN(0xe10b2ab8, 0x17a91cae), TOBN(0xb89aab65, 0x08e27f63),
-         TOBN(0x7b3074a7, 0xdba3ddf9), TOBN(0x1c20ce09, 0x330c2972),
-         TOBN(0x6b9917b4, 0x5fcf7e33), TOBN(0xe6793743, 0x945ceb42),
-         TOBN(0x18fc2215, 0x5c633d19), TOBN(0xad1adb3c, 0xc7485474),
-         TOBN(0x646f9679, 0x6424c49b), TOBN(0xf888dfe8, 0x67c241c9),
-         TOBN(0xe12d4b93, 0x24f68b49), TOBN(0x9a6b62d8, 0xa571df20),
-         TOBN(0x81b4b26d, 0x179483cb), TOBN(0x666f9632, 0x9511fae2),
-         TOBN(0xd281b3e4, 0xd53aa51f), TOBN(0x7f96a765, 0x7f3dbd16),
-         TOBN(0xa7f8b5bf, 0x074a30ce), TOBN(0xd7f52107, 0x005a32e6),
-         TOBN(0x6f9e0907, 0x50237ed4), TOBN(0x2f21da47, 0x8096fa2b),
-         TOBN(0xf3e19cb4, 0xeec863a0), TOBN(0xd18f77fd, 0x9527620a),
-         TOBN(0x9505c81c, 0x407c1cf8), TOBN(0x9998db4e, 0x1b6ec284),
-         TOBN(0x7e3389e5, 0xc247d44d), TOBN(0x12507141, 0x3f4f3d80),
-         TOBN(0xd4ba0110, 0x4a78a6c7), TOBN(0x312874a0, 0x767720be),
-         TOBN(0xded059a6, 0x75944370), TOBN(0xd6123d90, 0x3b2c0bdd),
-         TOBN(0xa56b717b, 0x51c108e3), TOBN(0x9bb7940e, 0x070623e9),
-         TOBN(0x794e2d59, 0x84ac066c), TOBN(0xf5954a92, 0xe68c69a0),
-         TOBN(0x28c52458, 0x4fd99dcc), TOBN(0x60e639fc, 0xb1012517),
-         TOBN(0xc2e60125, 0x7de79248), TOBN(0xe9ef6404, 0xf12fc6d7),
-         TOBN(0x4c4f2808, 0x2a3b5d32), TOBN(0x865ad32e, 0xc768eb8a),
-         TOBN(0xac02331b, 0x13fb70b6), TOBN(0x037b44c1, 0x95599b27),
-         TOBN(0x1a860fc4, 0x60bd082c), TOBN(0xa2e25745, 0xc980cd01),
-         TOBN(0xee3387a8, 0x1da0263e), TOBN(0x931bfb95, 0x2d10f3d6),
-         TOBN(0x5b687270, 0xa1f24a32), TOBN(0xf140e65d, 0xca494b86),
-         TOBN(0x4f4ddf91, 0xb2f1ac7a), TOBN(0xf99eaabb, 0x760fee27),
-         TOBN(0x57f4008a, 0x49c228e5), TOBN(0x090be440, 0x1cf713bb),
-         TOBN(0xac91fbe4, 0x5004f022), TOBN(0xd838c2c2, 0x569e1af6),
-         TOBN(0xd6c7d20b, 0x0f1daaa5), TOBN(0xaa063ac1, 0x1bbb02c0),
-         TOBN(0x0938a422, 0x59558a78), TOBN(0x5343c669, 0x8435da2f),
-         TOBN(0x96f67b18, 0x034410dc), TOBN(0x7cc1e424, 0x84510804),
-         TOBN(0x86a1543f, 0x16dfbb7d), TOBN(0x921fa942, 0x5b5bd592),
-         TOBN(0x9dcccb6e, 0xb33dd03c), TOBN(0x8581ddd9, 0xb843f51e),
-         TOBN(0x54935fcb, 0x81d73c9e), TOBN(0x6d07e979, 0x0a5e97ab),
-         TOBN(0x4dc7b30a, 0xcf3a6bab), TOBN(0x147ab1f3, 0x170bee11),
-         TOBN(0x0aaf8e3d, 0x9fafdee4), TOBN(0xfab3dbcb, 0x538a8b95),
-         TOBN(0x405df4b3, 0x6ef13871), TOBN(0xf1f4e9cb, 0x088d5a49),
-         TOBN(0x9bcd24d3, 0x66b33f1d), TOBN(0x3b97b820, 0x5ce445c0),
-         TOBN(0xe2926549, 0xba93ff61), TOBN(0xd9c341ce, 0x4dafe616),
-         TOBN(0xfb30a76e, 0x16efb6f3), TOBN(0xdf24b8ca, 0x605b953c),
-         TOBN(0x8bd52afe, 0xc2fffb9f), TOBN(0xbbac5ff7, 0xe19d0b96),
-         TOBN(0x43c01b87, 0x459afccd), TOBN(0x6bd45143, 0xb7432652),
-         TOBN(0x84734530, 0x55b5d78e), TOBN(0x81088fdb, 0x1554ba7d),
-         TOBN(0xada0a52c, 0x1e269375), TOBN(0xf9f037c4, 0x2dc5ec10),
-         TOBN(0xc0660607, 0x94bfbc11), TOBN(0xc0a630bb, 0xc9c40d2f),
-         TOBN(0x5efc797e, 0xab64c31e), TOBN(0xffdb1dab, 0x74507144),
-         TOBN(0xf6124287, 0x1ca6790c), TOBN(0xe9609d81, 0xe69bf1bf),
-         TOBN(0xdb898595, 0x00d24fc9), TOBN(0x9c750333, 0xe51fb417),
-         TOBN(0x51830a91, 0xfef7bbde), TOBN(0x0ce67dc8, 0x945f585c),
-         TOBN(0x9a730ed4, 0x4763eb50), TOBN(0x24a0e221, 0xc1ab0d66),
-         TOBN(0x643b6393, 0x648748f3), TOBN(0x1982daa1, 0x6d3c6291),
-         TOBN(0x6f00a9f7, 0x8bbc5549), TOBN(0x7a1783e1, 0x7f36384e),
-         TOBN(0xe8346323, 0xde977f50), TOBN(0x91ab688d, 0xb245502a),
-         TOBN(0x331ab6b5, 0x6d0bdd66), TOBN(0x0a6ef32e, 0x64b71229),
-         TOBN(0x1028150e, 0xfe7c352f), TOBN(0x27e04350, 0xce7b39d3),
-         TOBN(0x2a3c8acd, 0xc1070c82), TOBN(0xfb2034d3, 0x80c9feef),
-         TOBN(0x2d729621, 0x709f3729), TOBN(0x8df290bf, 0x62cb4549),
-         TOBN(0x02f99f33, 0xfc2e4326), TOBN(0x3b30076d, 0x5eddf032),
-         TOBN(0xbb21f8cf, 0x0c652fb5), TOBN(0x314fb49e, 0xed91cf7b),
-         TOBN(0xa013eca5, 0x2f700750), TOBN(0x2b9e3c23, 0x712a4575),
-         TOBN(0xe5355557, 0xaf30fbb0), TOBN(0x1ada3516, 0x7c77e771),
-         TOBN(0x45f6ecb2, 0x7b135670), TOBN(0xe85d19df, 0x7cfc202e),
-         TOBN(0x0f1b50c7, 0x58d1be9f), TOBN(0x5ebf2c0a, 0xead2e344),
-         TOBN(0x1531fe4e, 0xabc199c9), TOBN(0xc7032592, 0x56bab0ae),
-         TOBN(0x16ab2e48, 0x6c1fec54), TOBN(0x0f87fda8, 0x04280188),
-         TOBN(0xdc9f46fc, 0x609e4a74), TOBN(0x2a44a143, 0xba667f91),
-         TOBN(0xbc3d8b95, 0xb4d83436), TOBN(0xa01e4bd0, 0xc7bd2958),
-         TOBN(0x7b182932, 0x73483c90), TOBN(0xa79c6aa1, 0xa7c7b598),
-         TOBN(0xbf3983c6, 0xeaaac07e), TOBN(0x8f18181e, 0x96e0d4e6),
-         TOBN(0x8553d37c, 0x051af62b), TOBN(0xe9a998eb, 0x0bf94496),
-         TOBN(0xe0844f9f, 0xb0d59aa1), TOBN(0x983fd558, 0xe6afb813),
-         TOBN(0x9670c0ca, 0x65d69804), TOBN(0x732b22de, 0x6ea5ff2d),
-         TOBN(0xd7640ba9, 0x5fd8623b), TOBN(0x9f619163, 0xa6351782),
-         TOBN(0x0bfc27ee, 0xacee5043), TOBN(0xae419e73, 0x2eb10f02),
-         TOBN(0x19c028d1, 0x8943fb05), TOBN(0x71f01cf7, 0xff13aa2a),
-         TOBN(0x7790737e, 0x8887a132), TOBN(0x67513309, 0x66318410),
-         TOBN(0x9819e8a3, 0x7ddb795e), TOBN(0xfecb8ef5, 0xdad100b2),
-         TOBN(0x59f74a22, 0x3021926a), TOBN(0xb7c28a49, 0x6f9b4c1c),
-         TOBN(0xed1a733f, 0x912ad0ab), TOBN(0x42a910af, 0x01a5659c),
-         TOBN(0x3842c6e0, 0x7bd68cab), TOBN(0x2b57fa38, 0x76d70ac8),
-         TOBN(0x8a6707a8, 0x3c53aaeb), TOBN(0x62c1c510, 0x65b4db18),
-         TOBN(0x8de2c1fb, 0xb2d09dc7), TOBN(0xc3dfed12, 0x266bd23b),
-         TOBN(0x927d039b, 0xd5b27db6), TOBN(0x2fb2f0f1, 0x103243da),
-         TOBN(0xf855a07b, 0x80be7399), TOBN(0xed9327ce, 0x1f9f27a8),
-         TOBN(0xa0bd99c7, 0x729bdef7), TOBN(0x2b67125e, 0x28250d88),
-         TOBN(0x784b26e8, 0x8670ced7), TOBN(0xe3dfe41f, 0xc31bd3b4),
-         TOBN(0x9e353a06, 0xbcc85cbc), TOBN(0x302e2909, 0x60178a9d),
-         TOBN(0x860abf11, 0xa6eac16e), TOBN(0x76447000, 0xaa2b3aac),
-         TOBN(0x46ff9d19, 0x850afdab), TOBN(0x35bdd6a5, 0xfdb2d4c1),
-         TOBN(0xe82594b0, 0x7e5c9ce9), TOBN(0x0f379e53, 0x20af346e),
-         TOBN(0x608b31e3, 0xbc65ad4a), TOBN(0x710c6b12, 0x267c4826),
-         TOBN(0x51c966f9, 0x71954cf1), TOBN(0xb1cec793, 0x0d0aa215),
-         TOBN(0x1f155989, 0x86bd23a8), TOBN(0xae2ff99c, 0xf9452e86),
-         TOBN(0xd8dd953c, 0x340ceaa2), TOBN(0x26355275, 0x2e2e9333),
-         TOBN(0x15d4e5f9, 0x8586f06d), TOBN(0xd6bf94a8, 0xf7cab546),
-         TOBN(0x33c59a0a, 0xb76a9af0), TOBN(0x52740ab3, 0xba095af7),
-         TOBN(0xc444de8a, 0x24389ca0), TOBN(0xcc6f9863, 0x706da0cb),
-         TOBN(0xb5a741a7, 0x6b2515cf), TOBN(0x71c41601, 0x9585c749),
-         TOBN(0x78350d4f, 0xe683de97), TOBN(0x31d61524, 0x63d0b5f5),
-         TOBN(0x7a0cc5e1, 0xfbce090b), TOBN(0xaac927ed, 0xfbcb2a5b),
-         TOBN(0xe920de49, 0x20d84c35), TOBN(0x8c06a0b6, 0x22b4de26),
-         TOBN(0xd34dd58b, 0xafe7ddf3), TOBN(0x55851fed, 0xc1e6e55b),
-         TOBN(0xd1395616, 0x960696e7), TOBN(0x940304b2, 0x5f22705f),
-         TOBN(0x6f43f861, 0xb0a2a860), TOBN(0xcf121282, 0x0e7cc981),
-         TOBN(0x12186212, 0x0ab64a96), TOBN(0x09215b9a, 0xb789383c),
-         TOBN(0x311eb305, 0x37387c09), TOBN(0xc5832fce, 0xf03ee760),
-         TOBN(0x30358f58, 0x32f7ea19), TOBN(0xe01d3c34, 0x91d53551),
-         TOBN(0x1ca5ee41, 0xda48ea80), TOBN(0x34e71e8e, 0xcf4fa4c1),
-         TOBN(0x312abd25, 0x7af1e1c7), TOBN(0xe3afcdeb, 0x2153f4a5),
-         TOBN(0x9d5c84d7, 0x00235e9a), TOBN(0x0308d3f4, 0x8c4c836f),
-         TOBN(0xc0a66b04, 0x89332de5), TOBN(0x610dd399, 0x89e566ef),
-         TOBN(0xf8eea460, 0xd1ac1635), TOBN(0x84cbb3fb, 0x20a2c0df),
-         TOBN(0x40afb488, 0xe74a48c5), TOBN(0x29738198, 0xd326b150),
-         TOBN(0x2a17747f, 0xa6d74081), TOBN(0x60ea4c05, 0x55a26214),
-         TOBN(0x53514bb4, 0x1f88c5fe), TOBN(0xedd64567, 0x7e83426c),
-         TOBN(0xd5d6cbec, 0x96460b25), TOBN(0xa12fd0ce, 0x68dc115e),
-         TOBN(0xc5bc3ed2, 0x697840ea), TOBN(0x969876a8, 0xa6331e31),
-         TOBN(0x60c36217, 0x472ff580), TOBN(0xf4229705, 0x4ad41393),
-         TOBN(0x4bd99ef0, 0xa03b8b92), TOBN(0x501c7317, 0xc144f4f6),
-         TOBN(0x159009b3, 0x18464945), TOBN(0x6d5e594c, 0x74c5c6be),
-         TOBN(0x2d587011, 0x321a3660), TOBN(0xd1e184b1, 0x3898d022),
-         TOBN(0x5ba04752, 0x4c6a7e04), TOBN(0x47fa1e2b, 0x45550b65),
-         TOBN(0x9419daf0, 0x48c0a9a5), TOBN(0x66362953, 0x7c243236),
-         TOBN(0xcd0744b1, 0x5cb12a88), TOBN(0x561b6f9a, 0x2b646188),
-         TOBN(0x599415a5, 0x66c2c0c0), TOBN(0xbe3f0859, 0x0f83f09a),
-         TOBN(0x9141c5be, 0xb92041b8), TOBN(0x01ae38c7, 0x26477d0d),
-         TOBN(0xca8b71f3, 0xd12c7a94), TOBN(0xfab5b31f, 0x765c70db),
-         TOBN(0x76ae7492, 0x487443e9), TOBN(0x8595a310, 0x990d1349),
-         TOBN(0xf8dbeda8, 0x7d460a37), TOBN(0x7f7ad082, 0x1e45a38f),
-         TOBN(0xed1d4db6, 0x1059705a), TOBN(0xa3dd492a, 0xe6b9c697),
-         TOBN(0x4b92ee3a, 0x6eb38bd5), TOBN(0xbab2609d, 0x67cc0bb7),
-         TOBN(0x7fc4fe89, 0x6e70ee82), TOBN(0xeff2c56e, 0x13e6b7e3),
-         TOBN(0x9b18959e, 0x34d26fca), TOBN(0x2517ab66, 0x889d6b45),
-         TOBN(0xf167b4e0, 0xbdefdd4f), TOBN(0x69958465, 0xf366e401),
-         TOBN(0x5aa368ab, 0xa73bbec0), TOBN(0x12148709, 0x7b240c21),
-         TOBN(0x378c3233, 0x18969006), TOBN(0xcb4d73ce, 0xe1fe53d1),
-         TOBN(0x5f50a80e, 0x130c4361), TOBN(0xd67f5951, 0x7ef5212b),
-         TOBN(0xf145e21e, 0x9e70c72e), TOBN(0xb2e52e29, 0x5566d2fb),
-         TOBN(0x44eaba4a, 0x032397f5), TOBN(0x5e56937b, 0x7e31a7de),
-         TOBN(0x68dcf517, 0x456c61e1), TOBN(0xbc2e954a, 0xa8b0a388),
-         TOBN(0xe3552fa7, 0x60a8b755), TOBN(0x03442dae, 0x73ad0cde),
-         TOBN(0x37ffe747, 0xceb26210), TOBN(0x983545e8, 0x787baef9),
-         TOBN(0x8b8c8535, 0x86a3de31), TOBN(0xc621dbcb, 0xfacd46db),
-         TOBN(0x82e442e9, 0x59266fbb), TOBN(0xa3514c37, 0x339d471c),
-         TOBN(0x3a11b771, 0x62cdad96), TOBN(0xf0cb3b3c, 0xecf9bdf0),
-         TOBN(0x3fcbdbce, 0x478e2135), TOBN(0x7547b5cf, 0xbda35342),
-         TOBN(0xa97e81f1, 0x8a677af6), TOBN(0xc8c2bf83, 0x28817987),
-         TOBN(0xdf07eaaf, 0x45580985), TOBN(0xc68d1f05, 0xc93b45cb),
-         TOBN(0x106aa2fe, 0xc77b4cac), TOBN(0x4c1d8afc, 0x04a7ae86),
-         TOBN(0xdb41c3fd, 0x9eb45ab2), TOBN(0x5b234b5b, 0xd4b22e74),
-         TOBN(0xda253dec, 0xf215958a), TOBN(0x67e0606e, 0xa04edfa0),
-         TOBN(0xabbbf070, 0xef751b11), TOBN(0xf352f175, 0xf6f06dce),
-         TOBN(0xdfc4b6af, 0x6839f6b4), TOBN(0x53ddf9a8, 0x9959848e),
-         TOBN(0xda49c379, 0xc21520b0), TOBN(0x90864ff0, 0xdbd5d1b6),
-         TOBN(0x2f055d23, 0x5f49c7f7), TOBN(0xe51e4e6a, 0xa796b2d8),
-         TOBN(0xc361a67f, 0x5c9dc340), TOBN(0x5ad53c37, 0xbca7c620),
-         TOBN(0xda1d6588, 0x32c756d0), TOBN(0xad60d911, 0x8bb67e13),
-         TOBN(0xd6c47bdf, 0x0eeec8c6), TOBN(0x4a27fec1, 0x078a1821),
-         TOBN(0x081f7415, 0xc3099524), TOBN(0x8effdf0b, 0x82cd8060),
-         TOBN(0xdb70ec1c, 0x65842df8), TOBN(0x8821b358, 0xd319a901),
-         TOBN(0x72ee56ee, 0xde42b529), TOBN(0x5bb39592, 0x236e4286),
-         TOBN(0xd1183316, 0xfd6f7140), TOBN(0xf9fadb5b, 0xbd8e81f7),
-         TOBN(0x701d5e0c, 0x5a02d962), TOBN(0xfdee4dbf, 0x1b601324),
-         TOBN(0xbed17407, 0x35d7620e), TOBN(0x04e3c2c3, 0xf48c0012),
-         TOBN(0x9ee29da7, 0x3455449a), TOBN(0x562cdef4, 0x91a836c4),
-         TOBN(0x8f682a5f, 0x47701097), TOBN(0x617125d8, 0xff88d0c2),
-         TOBN(0x948fda24, 0x57bb86dd), TOBN(0x348abb8f, 0x289f7286),
-         TOBN(0xeb10eab5, 0x99d94bbd), TOBN(0xd51ba28e, 0x4684d160),
-         TOBN(0xabe0e51c, 0x30c8f41a), TOBN(0x66588b45, 0x13254f4a),
-         TOBN(0x147ebf01, 0xfad097a5), TOBN(0x49883ea8, 0x610e815d),
-         TOBN(0xe44d60ba, 0x8a11de56), TOBN(0xa970de6e, 0x827a7a6d),
-         TOBN(0x2be41424, 0x5e17fc19), TOBN(0xd833c657, 0x01214057),
-         TOBN(0x1375813b, 0x363e723f), TOBN(0x6820bb88, 0xe6a52e9b),
-         TOBN(0x7e7f6970, 0xd875d56a), TOBN(0xd6a0a9ac, 0x51fbf6bf),
-         TOBN(0x54ba8790, 0xa3083c12), TOBN(0xebaeb23d, 0x6ae7eb64),
-         TOBN(0xa8685c3a, 0xb99a907a), TOBN(0xf1e74550, 0x026bf40b),
-         TOBN(0x7b73a027, 0xc802cd9e), TOBN(0x9a8a927c, 0x4fef4635),
-         TOBN(0xe1b6f60c, 0x08191224), TOBN(0xc4126ebb, 0xde4ec091),
-         TOBN(0xe1dff4dc, 0x4ae38d84), TOBN(0xde3f57db, 0x4f2ef985),
-         TOBN(0x34964337, 0xd446a1dd), TOBN(0x7bf217a0, 0x859e77f6),
-         TOBN(0x8ff10527, 0x8e1d13f5), TOBN(0xa304ef03, 0x74eeae27),
-         TOBN(0xfc6f5e47, 0xd19dfa5a), TOBN(0xdb007de3, 0x7fad982b),
-         TOBN(0x28205ad1, 0x613715f5), TOBN(0x251e6729, 0x7889529e),
-         TOBN(0x72705184, 0x1ae98e78), TOBN(0xf818537d, 0x271cac32),
-         TOBN(0xc8a15b7e, 0xb7f410f5), TOBN(0xc474356f, 0x81f62393),
-         TOBN(0x92dbdc5a, 0xc242316b), TOBN(0xabe060ac, 0xdbf4aff5),
-         TOBN(0x6e8c38fe, 0x909a8ec6), TOBN(0x43e514e5, 0x6116cb94),
-         TOBN(0x2078fa38, 0x07d784f9), TOBN(0x1161a880, 0xf4b5b357),
-         TOBN(0x5283ce79, 0x13adea3d), TOBN(0x0756c3e6, 0xcc6a910b),
-         TOBN(0x60bcfe01, 0xaaa79697), TOBN(0x04a73b29, 0x56391db1),
-         TOBN(0xdd8dad47, 0x189b45a0), TOBN(0xbfac0dd0, 0x48d5b8d9),
-         TOBN(0x34ab3af5, 0x7d3d2ec2), TOBN(0x6fa2fc2d, 0x207bd3af),
-         TOBN(0x9ff40092, 0x66550ded), TOBN(0x719b3e87, 0x1fd5b913),
-         TOBN(0xa573a496, 0x6d17fbc7), TOBN(0x0cd1a70a, 0x73d2b24e),
-         TOBN(0x34e2c5ca, 0xb2676937), TOBN(0xe7050b06, 0xbf669f21),
-         TOBN(0xfbe948b6, 0x1ede9046), TOBN(0xa0530051, 0x97662659),
-         TOBN(0x58cbd4ed, 0xf10124c5), TOBN(0xde2646e4, 0xdd6c06c8),
-         TOBN(0x332f8108, 0x8cad38c0), TOBN(0x471b7e90, 0x6bd68ae2),
-         TOBN(0x56ac3fb2, 0x0d8e27a3), TOBN(0xb54660db, 0x136b4b0d),
-         TOBN(0x123a1e11, 0xa6fd8de4), TOBN(0x44dbffea, 0xa37799ef),
-         TOBN(0x4540b977, 0xce6ac17c), TOBN(0x495173a8, 0xaf60acef)},
-        {TOBN(0x9ebb284d, 0x391c2a82), TOBN(0xbcdd4863, 0x158308e8),
-         TOBN(0x006f16ec, 0x83f1edca), TOBN(0xa13e2c37, 0x695dc6c8),
-         TOBN(0x2ab756f0, 0x4a057a87), TOBN(0xa8765500, 0xa6b48f98),
-         TOBN(0x4252face, 0x68651c44), TOBN(0xa52b540b, 0xe1765e02),
-         TOBN(0x4f922fc5, 0x16a0d2bb), TOBN(0x0d5cc16c, 0x1a623499),
-         TOBN(0x9241cf3a, 0x57c62c8b), TOBN(0x2f5e6961, 0xfd1b667f),
-         TOBN(0x5c15c70b, 0xf5a01797), TOBN(0x3d20b44d, 0x60956192),
-         TOBN(0x04911b37, 0x071fdb52), TOBN(0xf648f916, 0x8d6f0f7b),
-         TOBN(0x6dc1acaf, 0xe60b7cf7), TOBN(0x25860a50, 0x84a9d869),
-         TOBN(0x56fc6f09, 0xe7ba8ac4), TOBN(0x828c5bd0, 0x6148d29e),
-         TOBN(0xac6b435e, 0xdc55ae5f), TOBN(0xa527f56c, 0xc0117411),
-         TOBN(0x94d5045e, 0xfd24342c), TOBN(0x2c4c0a35, 0x70b67c0d),
-         TOBN(0x027cc8b8, 0xfac61d9a), TOBN(0x7d25e062, 0xe3c6fe8a),
-         TOBN(0xe08805bf, 0xe5bff503), TOBN(0x13271e6c, 0x6ff632f7),
-         TOBN(0x55dca6c0, 0x232f76a5), TOBN(0x8957c32d, 0x701ef426),
-         TOBN(0xee728bcb, 0xa10a5178), TOBN(0x5ea60411, 0xb62c5173),
-         TOBN(0xfc4e964e, 0xd0b8892b), TOBN(0x9ea17683, 0x9301bb74),
-         TOBN(0x6265c5ae, 0xfcc48626), TOBN(0xe60cf82e, 0xbb3e9102),
-         TOBN(0x57adf797, 0xd4df5531), TOBN(0x235b59a1, 0x8deeefe2),
-         TOBN(0x60adcf58, 0x3f306eb1), TOBN(0x105c2753, 0x3d09492d),
-         TOBN(0x4090914b, 0xb5def996), TOBN(0x1cb69c83, 0x233dd1e7),
-         TOBN(0xc1e9c1d3, 0x9b3d5e76), TOBN(0x1f3338ed, 0xfccf6012),
-         TOBN(0xb1e95d0d, 0x2f5378a8), TOBN(0xacf4c2c7, 0x2f00cd21),
-         TOBN(0x6e984240, 0xeb5fe290), TOBN(0xd66c038d, 0x248088ae),
-         TOBN(0x804d264a, 0xf94d70cf), TOBN(0xbdb802ef, 0x7314bf7e),
-         TOBN(0x8fb54de2, 0x4333ed02), TOBN(0x740461e0, 0x285635d9),
-         TOBN(0x4113b2c8, 0x365e9383), TOBN(0xea762c83, 0x3fdef652),
-         TOBN(0x4eec6e2e, 0x47b956c1), TOBN(0xa3d814be, 0x65620fa4),
-         TOBN(0x9ad5462b, 0xb4d8bc50), TOBN(0x181c0b16, 0xa9195770),
-         TOBN(0xebd4fe1c, 0x78412a68), TOBN(0xae0341bc, 0xc0dff48c),
-         TOBN(0xb6bc45cf, 0x7003e866), TOBN(0xf11a6dea, 0x8a24a41b),
-         TOBN(0x5407151a, 0xd04c24c2), TOBN(0x62c9d27d, 0xda5b7b68),
-         TOBN(0x2e964235, 0x88cceff6), TOBN(0x8594c54f, 0x8b07ed69),
-         TOBN(0x1578e73c, 0xc84d0d0d), TOBN(0x7b4e1055, 0xff532868),
-         TOBN(0xa348c0d5, 0xb5ec995a), TOBN(0xbf4b9d55, 0x14289a54),
-         TOBN(0x9ba155a6, 0x58fbd777), TOBN(0x186ed7a8, 0x1a84491d),
-         TOBN(0xd4992b30, 0x614c0900), TOBN(0xda98d121, 0xbd00c24b),
-         TOBN(0x7f534dc8, 0x7ec4bfa1), TOBN(0x4a5ff674, 0x37dc34bc),
-         TOBN(0x68c196b8, 0x1d7ea1d7), TOBN(0x38cf2893, 0x80a6d208),
-         TOBN(0xfd56cd09, 0xe3cbbd6e), TOBN(0xec72e27e, 0x4205a5b6),
-         TOBN(0x15ea68f5, 0xa44f77f7), TOBN(0x7aa5f9fd, 0xb43c52bc),
-         TOBN(0x86ff676f, 0x94f0e609), TOBN(0xa4cde963, 0x2e2d432b),
-         TOBN(0x8cafa0c0, 0xeee470af), TOBN(0x84137d0e, 0x8a3f5ec8),
-         TOBN(0xebb40411, 0xfaa31231), TOBN(0xa239c13f, 0x6f7f7ccf),
-         TOBN(0x32865719, 0xa8afd30b), TOBN(0x86798328, 0x8a826dce),
-         TOBN(0xdf04e891, 0xc4a8fbe0), TOBN(0xbb6b6e1b, 0xebf56ad3),
-         TOBN(0x0a695b11, 0x471f1ff0), TOBN(0xd76c3389, 0xbe15baf0),
-         TOBN(0x018edb95, 0xbe96c43e), TOBN(0xf2beaaf4, 0x90794158),
-         TOBN(0x152db09e, 0xc3076a27), TOBN(0x5e82908e, 0xe416545d),
-         TOBN(0xa2c41272, 0x356d6f2e), TOBN(0xdc9c9642, 0x31fd74e1),
-         TOBN(0x66ceb88d, 0x519bf615), TOBN(0xe29ecd76, 0x05a2274e),
-         TOBN(0x3a0473c4, 0xbf5e2fa0), TOBN(0x6b6eb671, 0x64284e67),
-         TOBN(0xe8b97932, 0xb88756dd), TOBN(0xed4e8652, 0xf17e3e61),
-         TOBN(0xc2dd1499, 0x3ee1c4a4), TOBN(0xc0aaee17, 0x597f8c0e),
-         TOBN(0x15c4edb9, 0x6c168af3), TOBN(0x6563c7bf, 0xb39ae875),
-         TOBN(0xadfadb6f, 0x20adb436), TOBN(0xad55e8c9, 0x9a042ac0),
-         TOBN(0x975a1ed8, 0xb76da1f5), TOBN(0x10dfa466, 0xa58acb94),
-         TOBN(0x8dd7f7e3, 0xac060282), TOBN(0x6813e66a, 0x572a051e),
-         TOBN(0xb4ccae1e, 0x350cb901), TOBN(0xb653d656, 0x50cb7822),
-         TOBN(0x42484710, 0xdfab3b87), TOBN(0xcd7ee537, 0x9b670fd0),
-         TOBN(0x0a50b12e, 0x523b8bf6), TOBN(0x8009eb5b, 0x8f910c1b),
-         TOBN(0xf535af82, 0x4a167588), TOBN(0x0f835f9c, 0xfb2a2abd),
-         TOBN(0xf59b2931, 0x2afceb62), TOBN(0xc797df2a, 0x169d383f),
-         TOBN(0xeb3f5fb0, 0x66ac02b0), TOBN(0x029d4c6f, 0xdaa2d0ca),
-         TOBN(0xd4059bc1, 0xafab4bc5), TOBN(0x833f5c6f, 0x56783247),
-         TOBN(0xb5346630, 0x8d2d3605), TOBN(0x83387891, 0xd34d8433),
-         TOBN(0xd973b30f, 0xadd9419a), TOBN(0xbcca1099, 0xafe3fce8),
-         TOBN(0x08178315, 0x0809aac6), TOBN(0x01b7f21a, 0x540f0f11),
-         TOBN(0x65c29219, 0x909523c8), TOBN(0xa62f648f, 0xa3a1c741),
-         TOBN(0x88598d4f, 0x60c9e55a), TOBN(0xbce9141b, 0x0e4f347a),
-         TOBN(0x9af97d84, 0x35f9b988), TOBN(0x0210da62, 0x320475b6),
-         TOBN(0x3c076e22, 0x9191476c), TOBN(0x7520dbd9, 0x44fc7834),
-         TOBN(0x6a6b2cfe, 0xc1ab1bbd), TOBN(0xef8a65be, 0xdc650938),
-         TOBN(0x72855540, 0x805d7bc4), TOBN(0xda389396, 0xed11fdfd),
-         TOBN(0xa9d5bd36, 0x74660876), TOBN(0x11d67c54, 0xb45dff35),
-         TOBN(0x6af7d148, 0xa4f5da94), TOBN(0xbb8d4c3f, 0xc0bbeb31),
-         TOBN(0x87a7ebd1, 0xe0a1b12a), TOBN(0x1e4ef88d, 0x770ba95f),
-         TOBN(0x8c33345c, 0xdc2ae9cb), TOBN(0xcecf1276, 0x01cc8403),
-         TOBN(0x687c012e, 0x1b39b80f), TOBN(0xfd90d0ad, 0x35c33ba4),
-         TOBN(0xa3ef5a67, 0x5c9661c2), TOBN(0x368fc88e, 0xe017429e),
-         TOBN(0xd30c6761, 0x196a2fa2), TOBN(0x931b9817, 0xbd5b312e),
-         TOBN(0xba01000c, 0x72f54a31), TOBN(0xa203d2c8, 0x66eaa541),
-         TOBN(0xf2abdee0, 0x98939db3), TOBN(0xe37d6c2c, 0x3e606c02),
-         TOBN(0xf2921574, 0x521ff643), TOBN(0x2781b3c4, 0xd7e2fca3),
-         TOBN(0x664300b0, 0x7850ec06), TOBN(0xac5a38b9, 0x7d3a10cf),
-         TOBN(0x9233188d, 0xe34ab39d), TOBN(0xe77057e4, 0x5072cbb9),
-         TOBN(0xbcf0c042, 0xb59e78df), TOBN(0x4cfc91e8, 0x1d97de52),
-         TOBN(0x4661a26c, 0x3ee0ca4a), TOBN(0x5620a4c1, 0xfb8507bc),
-         TOBN(0x4b44d4aa, 0x049f842c), TOBN(0xceabc5d5, 0x1540e82b),
-         TOBN(0x306710fd, 0x15c6f156), TOBN(0xbe5ae52b, 0x63db1d72),
-         TOBN(0x06f1e7e6, 0x334957f1), TOBN(0x57e388f0, 0x31144a70),
-         TOBN(0xfb69bb2f, 0xdf96447b), TOBN(0x0f78ebd3, 0x73e38a12),
-         TOBN(0xb8222605, 0x2b7ce542), TOBN(0xe6d4ce99, 0x7472bde1),
-         TOBN(0x53e16ebe, 0x09d2f4da), TOBN(0x180ff42e, 0x53b92b2e),
-         TOBN(0xc59bcc02, 0x2c34a1c6), TOBN(0x3803d6f9, 0x422c46c2),
-         TOBN(0x18aff74f, 0x5c14a8a2), TOBN(0x55aebf80, 0x10a08b28),
-         TOBN(0x66097d58, 0x7135593f), TOBN(0x32e6eff7, 0x2be570cd),
-         TOBN(0x584e6a10, 0x2a8c860d), TOBN(0xcd185890, 0xa2eb4163),
-         TOBN(0x7ceae99d, 0x6d97e134), TOBN(0xd42c6b70, 0xdd8447ce),
-         TOBN(0x59ddbb4a, 0xb8c50273), TOBN(0x03c612df, 0x3cf34e1e),
-         TOBN(0x84b9ca15, 0x04b6c5a0), TOBN(0x35216f39, 0x18f0e3a3),
-         TOBN(0x3ec2d2bc, 0xbd986c00), TOBN(0x8bf546d9, 0xd19228fe),
-         TOBN(0xd1c655a4, 0x4cd623c3), TOBN(0x366ce718, 0x502b8e5a),
-         TOBN(0x2cfc84b4, 0xeea0bfe7), TOBN(0xe01d5cee, 0xcf443e8e),
-         TOBN(0x8ec045d9, 0x036520f8), TOBN(0xdfb3c3d1, 0x92d40e98),
-         TOBN(0x0bac4cce, 0xcc559a04), TOBN(0x35eccae5, 0x240ea6b1),
-         TOBN(0x180b32db, 0xf8a5a0ac), TOBN(0x547972a5, 0xeb699700),
-         TOBN(0xa3765801, 0xca26bca0), TOBN(0x57e09d0e, 0xa647f25a),
-         TOBN(0xb956970e, 0x2fdd23cc), TOBN(0xb80288bc, 0x5682e971),
-         TOBN(0xe6e6d91e, 0x9ae86ebc), TOBN(0x0564c83f, 0x8c9f1939),
-         TOBN(0x551932a2, 0x39560368), TOBN(0xe893752b, 0x049c28e2),
-         TOBN(0x0b03cee5, 0xa6a158c3), TOBN(0xe12d656b, 0x04964263),
-         TOBN(0x4b47554e, 0x63e3bc1d), TOBN(0xc719b6a2, 0x45044ff7),
-         TOBN(0x4f24d30a, 0xe48daa07), TOBN(0xa3f37556, 0xc8c1edc3),
-         TOBN(0x9a47bf76, 0x0700d360), TOBN(0xbb1a1824, 0x822ae4e2),
-         TOBN(0x22e275a3, 0x89f1fb4c), TOBN(0x72b1aa23, 0x9968c5f5),
-         TOBN(0xa75feaca, 0xbe063f64), TOBN(0x9b392f43, 0xbce47a09),
-         TOBN(0xd4241509, 0x1ad07aca), TOBN(0x4b0c591b, 0x8d26cd0f),
-         TOBN(0x2d42ddfd, 0x92f1169a), TOBN(0x63aeb1ac, 0x4cbf2392),
-         TOBN(0x1de9e877, 0x0691a2af), TOBN(0xebe79af7, 0xd98021da),
-         TOBN(0xcfdf2a4e, 0x40e50acf), TOBN(0xf0a98ad7, 0xaf01d665),
-         TOBN(0xefb640bf, 0x1831be1f), TOBN(0x6fe8bd2f, 0x80e9ada0),
-         TOBN(0x94c103a1, 0x6cafbc91), TOBN(0x170f8759, 0x8308e08c),
-         TOBN(0x5de2d2ab, 0x9780ff4f), TOBN(0x666466bc, 0x45b201f2),
-         TOBN(0x58af2010, 0xf5b343bc), TOBN(0x0f2e400a, 0xf2f142fe),
-         TOBN(0x3483bfde, 0xa85f4bdf), TOBN(0xf0b1d093, 0x03bfeaa9),
-         TOBN(0x2ea01b95, 0xc7081603), TOBN(0xe943e4c9, 0x3dba1097),
-         TOBN(0x47be92ad, 0xb438f3a6), TOBN(0x00bb7742, 0xe5bf6636),
-         TOBN(0x136b7083, 0x824297b4), TOBN(0x9d0e5580, 0x5584455f),
-         TOBN(0xab48cedc, 0xf1c7d69e), TOBN(0x53a9e481, 0x2a256e76),
-         TOBN(0x0402b0e0, 0x65eb2413), TOBN(0xdadbbb84, 0x8fc407a7),
-         TOBN(0xa65cd5a4, 0x8d7f5492), TOBN(0x21d44293, 0x74bae294),
-         TOBN(0x66917ce6, 0x3b5f1cc4), TOBN(0x37ae52ea, 0xce872e62),
-         TOBN(0xbb087b72, 0x2905f244), TOBN(0x12077086, 0x1e6af74f),
-         TOBN(0x4b644e49, 0x1058edea), TOBN(0x827510e3, 0xb638ca1d),
-         TOBN(0x8cf2b704, 0x6038591c), TOBN(0xffc8b47a, 0xfe635063),
-         TOBN(0x3ae220e6, 0x1b4d5e63), TOBN(0xbd864742, 0x9d961b4b),
-         TOBN(0x610c107e, 0x9bd16bed), TOBN(0x4270352a, 0x1127147b),
-         TOBN(0x7d17ffe6, 0x64cfc50e), TOBN(0x50dee01a, 0x1e36cb42),
-         TOBN(0x068a7622, 0x35dc5f9a), TOBN(0x9a08d536, 0xdf53f62c),
-         TOBN(0x4ed71457, 0x6be5f7de), TOBN(0xd93006f8, 0xc2263c9e),
-         TOBN(0xe073694c, 0xcacacb36), TOBN(0x2ff7a5b4, 0x3ae118ab),
-         TOBN(0x3cce53f1, 0xcd871236), TOBN(0xf156a39d, 0xc2aa6d52),
-         TOBN(0x9cc5f271, 0xb198d76d), TOBN(0xbc615b6f, 0x81383d39),
-         TOBN(0xa54538e8, 0xde3eee6b), TOBN(0x58c77538, 0xab910d91),
-         TOBN(0x31e5bdbc, 0x58d278bd), TOBN(0x3cde4adf, 0xb963acae),
-         TOBN(0xb1881fd2, 0x5302169c), TOBN(0x8ca60fa0, 0xa989ed8b),
-         TOBN(0xa1999458, 0xff96a0ee), TOBN(0xc1141f03, 0xac6c283d),
-         TOBN(0x7677408d, 0x6dfafed3), TOBN(0x33a01653, 0x39661588),
-         TOBN(0x3c9c15ec, 0x0b726fa0), TOBN(0x090cfd93, 0x6c9b56da),
-         TOBN(0xe34f4bae, 0xa3c40af5), TOBN(0x3469eadb, 0xd21129f1),
-         TOBN(0xcc51674a, 0x1e207ce8), TOBN(0x1e293b24, 0xc83b1ef9),
-         TOBN(0x17173d13, 0x1e6c0bb4), TOBN(0x19004695, 0x90776d35),
-         TOBN(0xe7980e34, 0x6de6f922), TOBN(0x873554cb, 0xf4dd9a22),
-         TOBN(0x0316c627, 0xcbf18a51), TOBN(0x4d93651b, 0x3032c081),
-         TOBN(0x207f2771, 0x3946834d), TOBN(0x2c08d7b4, 0x30cdbf80),
-         TOBN(0x137a4fb4, 0x86df2a61), TOBN(0xa1ed9c07, 0xecf7b4a2),
-         TOBN(0xb2e460e2, 0x7bd042ff), TOBN(0xb7f5e2fa, 0x5f62f5ec),
-         TOBN(0x7aa6ec6b, 0xcc2423b7), TOBN(0x75ce0a7f, 0xba63eea7),
-         TOBN(0x67a45fb1, 0xf250a6e1), TOBN(0x93bc919c, 0xe53cdc9f),
-         TOBN(0x9271f56f, 0x871942df), TOBN(0x2372ff6f, 0x7859ad66),
-         TOBN(0x5f4c2b96, 0x33cb1a78), TOBN(0xe3e29101, 0x5838aa83),
-         TOBN(0xa7ed1611, 0xe4e8110c), TOBN(0x2a2d70d5, 0x330198ce),
-         TOBN(0xbdf132e8, 0x6720efe0), TOBN(0xe61a8962, 0x66a471bf),
-         TOBN(0x796d3a85, 0x825808bd), TOBN(0x51dc3cb7, 0x3fd6e902),
-         TOBN(0x643c768a, 0x916219d1), TOBN(0x36cd7685, 0xa2ad7d32),
-         TOBN(0xe3db9d05, 0xb22922a4), TOBN(0x6494c87e, 0xdba29660),
-         TOBN(0xf0ac91df, 0xbcd2ebc7), TOBN(0x4deb57a0, 0x45107f8d),
-         TOBN(0x42271f59, 0xc3d12a73), TOBN(0x5f71687c, 0xa5c2c51d),
-         TOBN(0xcb1f50c6, 0x05797bcb), TOBN(0x29ed0ed9, 0xd6d34eb0),
-         TOBN(0xe5fe5b47, 0x4683c2eb), TOBN(0x4956eeb5, 0x97447c46),
-         TOBN(0x5b163a43, 0x71207167), TOBN(0x93fa2fed, 0x0248c5ef),
-         TOBN(0x67930af2, 0x31f63950), TOBN(0xa77797c1, 0x14caa2c9),
-         TOBN(0x526e80ee, 0x27ac7e62), TOBN(0xe1e6e626, 0x58b28aec),
-         TOBN(0x636178b0, 0xb3c9fef0), TOBN(0xaf7752e0, 0x6d5f90be),
-         TOBN(0x94ecaf18, 0xeece51cf), TOBN(0x2864d0ed, 0xca806e1f),
-         TOBN(0x6de2e383, 0x97c69134), TOBN(0x5a42c316, 0xeb291293),
-         TOBN(0xc7779219, 0x6a60bae0), TOBN(0xa24de346, 0x6b7599d1),
-         TOBN(0x49d374aa, 0xb75d4941), TOBN(0x98900586, 0x2d501ff0),
-         TOBN(0x9f16d40e, 0xeb7974cf), TOBN(0x1033860b, 0xcdd8c115),
-         TOBN(0xb6c69ac8, 0x2094cec3), TOBN(0x9976fb88, 0x403b770c),
-         TOBN(0x1dea026c, 0x4859590d), TOBN(0xb6acbb46, 0x8562d1fd),
-         TOBN(0x7cd6c461, 0x44569d85), TOBN(0xc3190a36, 0x97f0891d),
-         TOBN(0xc6f53195, 0x48d5a17d), TOBN(0x7d919966, 0xd749abc8),
-         TOBN(0x65104837, 0xdd1c8a20), TOBN(0x7e5410c8, 0x2f683419),
-         TOBN(0x958c3ca8, 0xbe94022e), TOBN(0x605c3197, 0x6145dac2),
-         TOBN(0x3fc07501, 0x01683d54), TOBN(0x1d7127c5, 0x595b1234),
-         TOBN(0x10b8f87c, 0x9481277f), TOBN(0x677db2a8, 0xe65a1adb),
-         TOBN(0xec2fccaa, 0xddce3345), TOBN(0x2a6811b7, 0x012a4350),
-         TOBN(0x96760ff1, 0xac598bdc), TOBN(0x054d652a, 0xd1bf4128),
-         TOBN(0x0a1151d4, 0x92a21005), TOBN(0xad7f3971, 0x33110fdf),
-         TOBN(0x8c95928c, 0x1960100f), TOBN(0x6c91c825, 0x7bf03362),
-         TOBN(0xc8c8b2a2, 0xce309f06), TOBN(0xfdb27b59, 0xca27204b),
-         TOBN(0xd223eaa5, 0x0848e32e), TOBN(0xb93e4b2e, 0xe7bfaf1e),
-         TOBN(0xc5308ae6, 0x44aa3ded), TOBN(0x317a666a, 0xc015d573),
-         TOBN(0xc888ce23, 0x1a979707), TOBN(0xf141c1e6, 0x0d5c4958),
-         TOBN(0xb53b7de5, 0x61906373), TOBN(0x858dbade, 0xeb999595),
-         TOBN(0x8cbb47b2, 0xa59e5c36), TOBN(0x660318b3, 0xdcf4e842),
-         TOBN(0xbd161ccd, 0x12ba4b7a), TOBN(0xf399daab, 0xf8c8282a),
-         TOBN(0x1587633a, 0xeeb2130d), TOBN(0xa465311a, 0xda38dd7d),
-         TOBN(0x5f75eec8, 0x64d3779b), TOBN(0x3c5d0476, 0xad64c171),
-         TOBN(0x87410371, 0x2a914428), TOBN(0x8096a891, 0x90e2fc29),
-         TOBN(0xd3d2ae9d, 0x23b3ebc2), TOBN(0x90bdd6db, 0xa580cfd6),
-         TOBN(0x52dbb7f3, 0xc5b01f6c), TOBN(0xe68eded4, 0xe102a2dc),
-         TOBN(0x17785b77, 0x99eb6df0), TOBN(0x26c3cc51, 0x7386b779),
-         TOBN(0x345ed988, 0x6417a48e), TOBN(0xe990b4e4, 0x07d6ef31),
-         TOBN(0x0f456b7e, 0x2586abba), TOBN(0x239ca6a5, 0x59c96e9a),
-         TOBN(0xe327459c, 0xe2eb4206), TOBN(0x3a4c3313, 0xa002b90a),
-         TOBN(0x2a114806, 0xf6a3f6fb), TOBN(0xad5cad2f, 0x85c251dd),
-         TOBN(0x92c1f613, 0xf5a784d3), TOBN(0xec7bfacf, 0x349766d5),
-         TOBN(0x04b3cd33, 0x3e23cb3b), TOBN(0x3979fe84, 0xc5a64b2d),
-         TOBN(0x192e2720, 0x7e589106), TOBN(0xa60c43d1, 0xa15b527f),
-         TOBN(0x2dae9082, 0xbe7cf3a6), TOBN(0xcc86ba92, 0xbc967274),
-         TOBN(0xf28a2ce8, 0xaea0a8a9), TOBN(0x404ca6d9, 0x6ee988b3),
-         TOBN(0xfd7e9c5d, 0x005921b8), TOBN(0xf56297f1, 0x44e79bf9),
-         TOBN(0xa163b460, 0x0d75ddc2), TOBN(0x30b23616, 0xa1f2be87),
-         TOBN(0x4b070d21, 0xbfe50e2b), TOBN(0x7ef8cfd0, 0xe1bfede1),
-         TOBN(0xadba0011, 0x2aac4ae0), TOBN(0x2a3e7d01, 0xb9ebd033),
-         TOBN(0x995277ec, 0xe38d9d1c), TOBN(0xb500249e, 0x9c5d2de3),
-         TOBN(0x8912b820, 0xf13ca8c9), TOBN(0xc8798114, 0x877793af),
-         TOBN(0x19e6125d, 0xec3f1dec), TOBN(0x07b1f040, 0x911178da),
-         TOBN(0xd93ededa, 0x904a6738), TOBN(0x55187a5a, 0x0bebedcd),
-         TOBN(0xf7d04722, 0xeb329d41), TOBN(0xf449099e, 0xf170b391),
-         TOBN(0xfd317a69, 0xca99f828), TOBN(0x50c3db2b, 0x34a4976d),
-         TOBN(0xe9ba7784, 0x3757b392), TOBN(0x326caefd, 0xaa3ca05a),
-         TOBN(0x78e5293b, 0xf1e593d4), TOBN(0x7842a937, 0x0d98fd13),
-         TOBN(0xe694bf96, 0x5f96b10d), TOBN(0x373a9df6, 0x06a8cd05),
-         TOBN(0x997d1e51, 0xe8f0c7fc), TOBN(0x1d019790, 0x63fd972e),
-         TOBN(0x0064d858, 0x5499fb32), TOBN(0x7b67bad9, 0x77a8aeb7),
-         TOBN(0x1d3eb977, 0x2d08eec5), TOBN(0x5fc047a6, 0xcbabae1d),
-         TOBN(0x0577d159, 0xe54a64bb), TOBN(0x8862201b, 0xc43497e4),
-         TOBN(0xad6b4e28, 0x2ce0608d), TOBN(0x8b687b7d, 0x0b167aac),
-         TOBN(0x6ed4d367, 0x8b2ecfa9), TOBN(0x24dfe62d, 0xa90c3c38),
-         TOBN(0xa1862e10, 0x3fe5c42b), TOBN(0x1ca73dca, 0xd5732a9f),
-         TOBN(0x35f038b7, 0x76bb87ad), TOBN(0x674976ab, 0xf242b81f),
-         TOBN(0x4f2bde7e, 0xb0fd90cd), TOBN(0x6efc172e, 0xa7fdf092),
-         TOBN(0x3806b69b, 0x92222f1f), TOBN(0x5a2459ca, 0x6cf7ae70),
-         TOBN(0x6789f69c, 0xa85217ee), TOBN(0x5f232b5e, 0xe3dc85ac),
-         TOBN(0x660e3ec5, 0x48e9e516), TOBN(0x124b4e47, 0x3197eb31),
-         TOBN(0x10a0cb13, 0xaafcca23), TOBN(0x7bd63ba4, 0x8213224f),
-         TOBN(0xaffad7cc, 0x290a7f4f), TOBN(0x6b409c9e, 0x0286b461),
-         TOBN(0x58ab809f, 0xffa407af), TOBN(0xc3122eed, 0xc68ac073),
-         TOBN(0x17bf9e50, 0x4ef24d7e), TOBN(0x5d929794, 0x3e2a5811),
-         TOBN(0x519bc867, 0x02902e01), TOBN(0x76bba5da, 0x39c8a851),
-         TOBN(0xe9f9669c, 0xda94951e), TOBN(0x4b6af58d, 0x66b8d418),
-         TOBN(0xfa321074, 0x17d426a4), TOBN(0xc78e66a9, 0x9dde6027),
-         TOBN(0x0516c083, 0x4a53b964), TOBN(0xfc659d38, 0xff602330),
-         TOBN(0x0ab55e5c, 0x58c5c897), TOBN(0x985099b2, 0x838bc5df),
-         TOBN(0x061d9efc, 0xc52fc238), TOBN(0x712b2728, 0x6ac1da3f),
-         TOBN(0xfb658149, 0x9283fe08), TOBN(0x4954ac94, 0xb8aaa2f7),
-         TOBN(0x85c0ada4, 0x7fb2e74f), TOBN(0xee8ba98e, 0xb89926b0),
-         TOBN(0xe4f9d37d, 0x23d1af5b), TOBN(0x14ccdbf9, 0xba9b015e),
-         TOBN(0xb674481b, 0x7bfe7178), TOBN(0x4e1debae, 0x65405868),
-         TOBN(0x061b2821, 0xc48c867d), TOBN(0x69c15b35, 0x513b30ea),
-         TOBN(0x3b4a1666, 0x36871088), TOBN(0xe5e29f5d, 0x1220b1ff),
-         TOBN(0x4b82bb35, 0x233d9f4d), TOBN(0x4e076333, 0x18cdc675)},
-        {TOBN(0x0d53f5c7, 0xa3e6fced), TOBN(0xe8cbbdd5, 0xf45fbdeb),
-         TOBN(0xf85c01df, 0x13339a70), TOBN(0x0ff71880, 0x142ceb81),
-         TOBN(0x4c4e8774, 0xbd70437a), TOBN(0x5fb32891, 0xba0bda6a),
-         TOBN(0x1cdbebd2, 0xf18bd26e), TOBN(0x2f9526f1, 0x03a9d522),
-         TOBN(0x40ce3051, 0x92c4d684), TOBN(0x8b04d725, 0x7612efcd),
-         TOBN(0xb9dcda36, 0x6f9cae20), TOBN(0x0edc4d24, 0xf058856c),
-         TOBN(0x64f2e6bf, 0x85427900), TOBN(0x3de81295, 0xdc09dfea),
-         TOBN(0xd41b4487, 0x379bf26c), TOBN(0x50b62c6d, 0x6df135a9),
-         TOBN(0xd4f8e3b4, 0xc72dfe67), TOBN(0xc416b0f6, 0x90e19fdf),
-         TOBN(0x18b9098d, 0x4c13bd35), TOBN(0xac11118a, 0x15b8cb9e),
-         TOBN(0xf598a318, 0xf0062841), TOBN(0xbfe0602f, 0x89f356f4),
-         TOBN(0x7ae3637e, 0x30177a0c), TOBN(0x34097747, 0x61136537),
-         TOBN(0x0db2fb5e, 0xd005832a), TOBN(0x5f5efd3b, 0x91042e4f),
-         TOBN(0x8c4ffdc6, 0xed70f8ca), TOBN(0xe4645d0b, 0xb52da9cc),
-         TOBN(0x9596f58b, 0xc9001d1f), TOBN(0x52c8f0bc, 0x4e117205),
-         TOBN(0xfd4aa0d2, 0xe398a084), TOBN(0x815bfe3a, 0x104f49de),
-         TOBN(0x97e5443f, 0x23885e5f), TOBN(0xf72f8f99, 0xe8433aab),
-         TOBN(0xbd00b154, 0xe4d4e604), TOBN(0xd0b35e6a, 0xe5e173ff),
-         TOBN(0x57b2a048, 0x9164722d), TOBN(0x3e3c665b, 0x88761ec8),
-         TOBN(0x6bdd1397, 0x3da83832), TOBN(0x3c8b1a1e, 0x73dafe3b),
-         TOBN(0x4497ace6, 0x54317cac), TOBN(0xbe600ab9, 0x521771b3),
-         TOBN(0xb42e409e, 0xb0dfe8b8), TOBN(0x386a67d7, 0x3942310f),
-         TOBN(0x25548d8d, 0x4431cc28), TOBN(0xa7cff142, 0x985dc524),
-         TOBN(0x4d60f5a1, 0x93c4be32), TOBN(0x83ebd5c8, 0xd071c6e1),
-         TOBN(0xba3a80a7, 0xb1fd2b0b), TOBN(0x9b3ad396, 0x5bec33e8),
-         TOBN(0xb3868d61, 0x79743fb3), TOBN(0xcfd169fc, 0xfdb462fa),
-         TOBN(0xd3b499d7, 0x9ce0a6af), TOBN(0x55dc1cf1, 0xe42d3ff8),
-         TOBN(0x04fb9e6c, 0xc6c3e1b2), TOBN(0x47e6961d, 0x6f69a474),
-         TOBN(0x54eb3acc, 0xe548b37b), TOBN(0xb38e7542, 0x84d40549),
-         TOBN(0x8c3daa51, 0x7b341b4f), TOBN(0x2f6928ec, 0x690bf7fa),
-         TOBN(0x0496b323, 0x86ce6c41), TOBN(0x01be1c55, 0x10adadcd),
-         TOBN(0xc04e67e7, 0x4bb5faf9), TOBN(0x3cbaf678, 0xe15c9985),
-         TOBN(0x8cd12145, 0x50ca4247), TOBN(0xba1aa47a, 0xe7dd30aa),
-         TOBN(0x2f81ddf1, 0xe58fee24), TOBN(0x03452936, 0xeec9b0e8),
-         TOBN(0x8bdc3b81, 0x243aea96), TOBN(0x9a2919af, 0x15c3d0e5),
-         TOBN(0x9ea640ec, 0x10948361), TOBN(0x5ac86d5b, 0x6e0bcccf),
-         TOBN(0xf892d918, 0xc36cf440), TOBN(0xaed3e837, 0xc939719c),
-         TOBN(0xb07b08d2, 0xc0218b64), TOBN(0x6f1bcbba, 0xce9790dd),
-         TOBN(0x4a84d6ed, 0x60919b8e), TOBN(0xd8900791, 0x8ac1f9eb),
-         TOBN(0xf84941aa, 0x0dd5daef), TOBN(0xb22fe40a, 0x67fd62c5),
-         TOBN(0x97e15ba2, 0x157f2db3), TOBN(0xbda2fc8f, 0x8e28ca9c),
-         TOBN(0x5d050da4, 0x37b9f454), TOBN(0x3d57eb57, 0x2379d72e),
-         TOBN(0xe9b5eba2, 0xfb5ee997), TOBN(0x01648ca2, 0xe11538ca),
-         TOBN(0x32bb76f6, 0xf6327974), TOBN(0x338f14b8, 0xff3f4bb7),
-         TOBN(0x524d226a, 0xd7ab9a2d), TOBN(0x9c00090d, 0x7dfae958),
-         TOBN(0x0ba5f539, 0x8751d8c2), TOBN(0x8afcbcdd, 0x3ab8262d),
-         TOBN(0x57392729, 0xe99d043b), TOBN(0xef51263b, 0xaebc943a),
-         TOBN(0x9feace93, 0x20862935), TOBN(0x639efc03, 0xb06c817b),
-         TOBN(0x1fe054b3, 0x66b4be7a), TOBN(0x3f25a9de, 0x84a37a1e),
-         TOBN(0xf39ef1ad, 0x78d75cd9), TOBN(0xd7b58f49, 0x5062c1b5),
-         TOBN(0x6f74f9a9, 0xff563436), TOBN(0xf718ff29, 0xe8af51e7),
-         TOBN(0x5234d313, 0x15e97fec), TOBN(0xb6a8e2b1, 0x292f1c0a),
-         TOBN(0xa7f53aa8, 0x327720c1), TOBN(0x956ca322, 0xba092cc8),
-         TOBN(0x8f03d64a, 0x28746c4d), TOBN(0x51fe1782, 0x66d0d392),
-         TOBN(0xd19b34db, 0x3c832c80), TOBN(0x60dccc5c, 0x6da2e3b4),
-         TOBN(0x245dd62e, 0x0a104ccc), TOBN(0xa7ab1de1, 0x620b21fd),
-         TOBN(0xb293ae0b, 0x3893d123), TOBN(0xf7b75783, 0xb15ee71c),
-         TOBN(0x5aa3c614, 0x42a9468b), TOBN(0xd686123c, 0xdb15d744),
-         TOBN(0x8c616891, 0xa7ab4116), TOBN(0x6fcd72c8, 0xa4e6a459),
-         TOBN(0xac219110, 0x77e5fad7), TOBN(0xfb6a20e7, 0x704fa46b),
-         TOBN(0xe839be7d, 0x341d81dc), TOBN(0xcddb6889, 0x32148379),
-         TOBN(0xda6211a1, 0xf7026ead), TOBN(0xf3b2575f, 0xf4d1cc5e),
-         TOBN(0x40cfc8f6, 0xa7a73ae6), TOBN(0x83879a5e, 0x61d5b483),
-         TOBN(0xc5acb1ed, 0x41a50ebc), TOBN(0x59a60cc8, 0x3c07d8fa),
-         TOBN(0x1b73bdce, 0xb1876262), TOBN(0x2b0d79f0, 0x12af4ee9),
-         TOBN(0x8bcf3b0b, 0xd46e1d07), TOBN(0x17d6af9d, 0xe45d152f),
-         TOBN(0x73520461, 0x6d736451), TOBN(0x43cbbd97, 0x56b0bf5a),
-         TOBN(0xb0833a5b, 0xd5999b9d), TOBN(0x702614f0, 0xeb72e398),
-         TOBN(0x0aadf01a, 0x59c3e9f8), TOBN(0x40200e77, 0xce6b3d16),
-         TOBN(0xda22bdd3, 0xdeddafad), TOBN(0x76dedaf4, 0x310d72e1),
-         TOBN(0x49ef807c, 0x4bc2e88f), TOBN(0x6ba81291, 0x146dd5a5),
-         TOBN(0xa1a4077a, 0x7d8d59e9), TOBN(0x87b6a2e7, 0x802db349),
-         TOBN(0xd5679997, 0x1b4e598e), TOBN(0xf499ef1f, 0x06fe4b1d),
-         TOBN(0x3978d3ae, 0xfcb267c5), TOBN(0xb582b557, 0x235786d0),
-         TOBN(0x32b3b2ca, 0x1715cb07), TOBN(0x4c3de6a2, 0x8480241d),
-         TOBN(0x63b5ffed, 0xcb571ecd), TOBN(0xeaf53900, 0xed2fe9a9),
-         TOBN(0xdec98d4a, 0xc3b81990), TOBN(0x1cb83722, 0x9e0cc8fe),
-         TOBN(0xfe0b0491, 0xd2b427b9), TOBN(0x0f2386ac, 0xe983a66c),
-         TOBN(0x930c4d1e, 0xb3291213), TOBN(0xa2f82b2e, 0x59a62ae4),
-         TOBN(0x77233853, 0xf93e89e3), TOBN(0x7f8063ac, 0x11777c7f),
-         TOBN(0xff0eb567, 0x59ad2877), TOBN(0x6f454642, 0x9865c754),
-         TOBN(0xe6fe701a, 0x236e9a84), TOBN(0xc586ef16, 0x06e40fc3),
-         TOBN(0x3f62b6e0, 0x24bafad9), TOBN(0xc8b42bd2, 0x64da906a),
-         TOBN(0xc98e1eb4, 0xda3276a0), TOBN(0x30d0e5fc, 0x06cbf852),
-         TOBN(0x1b6b2ae1, 0xe8b4dfd4), TOBN(0xd754d5c7, 0x8301cbac),
-         TOBN(0x66097629, 0x112a39ac), TOBN(0xf86b5999, 0x93ba4ab9),
-         TOBN(0x26c9dea7, 0x99f9d581), TOBN(0x0473b1a8, 0xc2fafeaa),
-         TOBN(0x1469af55, 0x3b2505a5), TOBN(0x227d16d7, 0xd6a43323),
-         TOBN(0x3316f73c, 0xad3d97f9), TOBN(0x52bf3bb5, 0x1f137455),
-         TOBN(0x953eafeb, 0x09954e7c), TOBN(0xa721dfed, 0xdd732411),
-         TOBN(0xb4929821, 0x141d4579), TOBN(0x3411321c, 0xaa3bd435),
-         TOBN(0xafb355aa, 0x17fa6015), TOBN(0xb4e7ef4a, 0x18e42f0e),
-         TOBN(0x604ac97c, 0x59371000), TOBN(0xe1c48c70, 0x7f759c18),
-         TOBN(0x3f62ecc5, 0xa5db6b65), TOBN(0x0a78b173, 0x38a21495),
-         TOBN(0x6be1819d, 0xbcc8ad94), TOBN(0x70dc04f6, 0xd89c3400),
-         TOBN(0x462557b4, 0xa6b4840a), TOBN(0x544c6ade, 0x60bd21c0),
-         TOBN(0x6a00f24e, 0x907a544b), TOBN(0xa7520dcb, 0x313da210),
-         TOBN(0xfe939b75, 0x11e4994b), TOBN(0x918b6ba6, 0xbc275d70),
-         TOBN(0xd3e5e0fc, 0x644be892), TOBN(0x707a9816, 0xfdaf6c42),
-         TOBN(0x60145567, 0xf15c13fe), TOBN(0x4818ebaa, 0xe130a54a),
-         TOBN(0x28aad3ad, 0x58d2f767), TOBN(0xdc5267fd, 0xd7e7c773),
-         TOBN(0x4919cc88, 0xc3afcc98), TOBN(0xaa2e6ab0, 0x2db8cd4b),
-         TOBN(0xd46fec04, 0xd0c63eaa), TOBN(0xa1cb92c5, 0x19ffa832),
-         TOBN(0x678dd178, 0xe43a631f), TOBN(0xfb5ae1cd, 0x3dc788b3),
-         TOBN(0x68b4fb90, 0x6e77de04), TOBN(0x7992bcf0, 0xf06dbb97),
-         TOBN(0x896e6a13, 0xc417c01d), TOBN(0x8d96332c, 0xb956be01),
-         TOBN(0x902fc93a, 0x413aa2b9), TOBN(0x99a4d915, 0xfc98c8a5),
-         TOBN(0x52c29407, 0x565f1137), TOBN(0x4072690f, 0x21e4f281),
-         TOBN(0x36e607cf, 0x02ff6072), TOBN(0xa47d2ca9, 0x8ad98cdc),
-         TOBN(0xbf471d1e, 0xf5f56609), TOBN(0xbcf86623, 0xf264ada0),
-         TOBN(0xb70c0687, 0xaa9e5cb6), TOBN(0xc98124f2, 0x17401c6c),
-         TOBN(0x8189635f, 0xd4a61435), TOBN(0xd28fb8af, 0xa9d98ea6),
-         TOBN(0xb9a67c2a, 0x40c251f8), TOBN(0x88cd5d87, 0xa2da44be),
-         TOBN(0x437deb96, 0xe09b5423), TOBN(0x150467db, 0x64287dc1),
-         TOBN(0xe161debb, 0xcdabb839), TOBN(0xa79e9742, 0xf1839a3e),
-         TOBN(0xbb8dd3c2, 0x652d202b), TOBN(0x7b3e67f7, 0xe9f97d96),
-         TOBN(0x5aa5d78f, 0xb1cb6ac9), TOBN(0xffa13e8e, 0xca1d0d45),
-         TOBN(0x369295dd, 0x2ba5bf95), TOBN(0xd68bd1f8, 0x39aff05e),
-         TOBN(0xaf0d86f9, 0x26d783f2), TOBN(0x543a59b3, 0xfc3aafc1),
-         TOBN(0x3fcf81d2, 0x7b7da97c), TOBN(0xc990a056, 0xd25dee46),
-         TOBN(0x3e6775b8, 0x519cce2c), TOBN(0xfc9af71f, 0xae13d863),
-         TOBN(0x774a4a6f, 0x47c1605c), TOBN(0x46ba4245, 0x2fd205e8),
-         TOBN(0xa06feea4, 0xd3fd524d), TOBN(0x1e724641, 0x6de1acc2),
-         TOBN(0xf53816f1, 0x334e2b42), TOBN(0x49e5918e, 0x922f0024),
-         TOBN(0x439530b6, 0x65c7322d), TOBN(0xcf12cc01, 0xb3c1b3fb),
-         TOBN(0xc70b0186, 0x0172f685), TOBN(0xb915ee22, 0x1b58391d),
-         TOBN(0x9afdf03b, 0xa317db24), TOBN(0x87dec659, 0x17b8ffc4),
-         TOBN(0x7f46597b, 0xe4d3d050), TOBN(0x80a1c1ed, 0x006500e7),
-         TOBN(0x84902a96, 0x78bf030e), TOBN(0xfb5e9c9a, 0x50560148),
-         TOBN(0x6dae0a92, 0x63362426), TOBN(0xdcaeecf4, 0xa9e30c40),
-         TOBN(0xc0d887bb, 0x518d0c6b), TOBN(0x99181152, 0xcb985b9d),
-         TOBN(0xad186898, 0xef7bc381), TOBN(0x18168ffb, 0x9ee46201),
-         TOBN(0x9a04cdaa, 0x2502753c), TOBN(0xbb279e26, 0x51407c41),
-         TOBN(0xeacb03aa, 0xf23564e5), TOBN(0x18336582, 0x71e61016),
-         TOBN(0x8684b8c4, 0xeb809877), TOBN(0xb336e18d, 0xea0e672e),
-         TOBN(0xefb601f0, 0x34ee5867), TOBN(0x2733edbe, 0x1341cfd1),
-         TOBN(0xb15e809a, 0x26025c3c), TOBN(0xe6e981a6, 0x9350df88),
-         TOBN(0x92376237, 0x8502fd8e), TOBN(0x4791f216, 0x0c12be9b),
-         TOBN(0xb7256789, 0x25f02425), TOBN(0xec863194, 0x7a974443),
-         TOBN(0x7c0ce882, 0xfb41cc52), TOBN(0xc266ff7e, 0xf25c07f2),
-         TOBN(0x3d4da8c3, 0x017025f3), TOBN(0xefcf628c, 0xfb9579b4),
-         TOBN(0x5c4d0016, 0x1f3716ec), TOBN(0x9c27ebc4, 0x6801116e),
-         TOBN(0x5eba0ea1, 0x1da1767e), TOBN(0xfe151452, 0x47004c57),
-         TOBN(0x3ace6df6, 0x8c2373b7), TOBN(0x75c3dffe, 0x5dbc37ac),
-         TOBN(0x3dc32a73, 0xddc925fc), TOBN(0xb679c841, 0x2f65ee0b),
-         TOBN(0x715a3295, 0x451cbfeb), TOBN(0xd9889768, 0xf76e9a29),
-         TOBN(0xec20ce7f, 0xb28ad247), TOBN(0xe99146c4, 0x00894d79),
-         TOBN(0x71457d7c, 0x9f5e3ea7), TOBN(0x097b2662, 0x38030031),
-         TOBN(0xdb7f6ae6, 0xcf9f82a8), TOBN(0x319decb9, 0x438f473a),
-         TOBN(0xa63ab386, 0x283856c3), TOBN(0x13e3172f, 0xb06a361b),
-         TOBN(0x2959f8dc, 0x7d5a006c), TOBN(0x2dbc27c6, 0x75fba752),
-         TOBN(0xc1227ab2, 0x87c22c9e), TOBN(0x06f61f75, 0x71a268b2),
-         TOBN(0x1b6bb971, 0x04779ce2), TOBN(0xaca83812, 0x0aadcb1d),
-         TOBN(0x297ae0bc, 0xaeaab2d5), TOBN(0xa5c14ee7, 0x5bfb9f13),
-         TOBN(0xaa00c583, 0xf17a62c7), TOBN(0x39eb962c, 0x173759f6),
-         TOBN(0x1eeba1d4, 0x86c9a88f), TOBN(0x0ab6c37a, 0xdf016c5e),
-         TOBN(0xa2a147db, 0xa28a0749), TOBN(0x246c20d6, 0xee519165),
-         TOBN(0x5068d1b1, 0xd3810715), TOBN(0xb1e7018c, 0x748160b9),
-         TOBN(0x03f5b1fa, 0xf380ff62), TOBN(0xef7fb1dd, 0xf3cb2c1e),
-         TOBN(0xeab539a8, 0xfc91a7da), TOBN(0x83ddb707, 0xf3f9b561),
-         TOBN(0xc550e211, 0xfe7df7a4), TOBN(0xa7cd07f2, 0x063f6f40),
-         TOBN(0xb0de3635, 0x2976879c), TOBN(0xb5f83f85, 0xe55741da),
-         TOBN(0x4ea9d25e, 0xf3d8ac3d), TOBN(0x6fe2066f, 0x62819f02),
-         TOBN(0x4ab2b9c2, 0xcef4a564), TOBN(0x1e155d96, 0x5ffa2de3),
-         TOBN(0x0eb0a19b, 0xc3a72d00), TOBN(0x4037665b, 0x8513c31b),
-         TOBN(0x2fb2b6bf, 0x04c64637), TOBN(0x45c34d6e, 0x08cdc639),
-         TOBN(0x56f1e10f, 0xf01fd796), TOBN(0x4dfb8101, 0xfe3667b8),
-         TOBN(0xe0eda253, 0x9021d0c0), TOBN(0x7a94e9ff, 0x8a06c6ab),
-         TOBN(0x2d3bb0d9, 0xbb9aa882), TOBN(0xea20e4e5, 0xec05fd10),
-         TOBN(0xed7eeb5f, 0x1a1ca64e), TOBN(0x2fa6b43c, 0xc6327cbd),
-         TOBN(0xb577e3cf, 0x3aa91121), TOBN(0x8c6bd5ea, 0x3a34079b),
-         TOBN(0xd7e5ba39, 0x60e02fc0), TOBN(0xf16dd2c3, 0x90141bf8),
-         TOBN(0xb57276d9, 0x80101b98), TOBN(0x760883fd, 0xb82f0f66),
-         TOBN(0x89d7de75, 0x4bc3eff3), TOBN(0x03b60643, 0x5dc2ab40),
-         TOBN(0xcd6e53df, 0xe05beeac), TOBN(0xf2f1e862, 0xbc3325cd),
-         TOBN(0xdd0f7921, 0x774f03c3), TOBN(0x97ca7221, 0x4552cc1b),
-         TOBN(0x5a0d6afe, 0x1cd19f72), TOBN(0xa20915dc, 0xf183fbeb),
-         TOBN(0x9fda4b40, 0x832c403c), TOBN(0x32738edd, 0xbe425442),
-         TOBN(0x469a1df6, 0xb5eccf1a), TOBN(0x4b5aff42, 0x28bbe1f0),
-         TOBN(0x31359d7f, 0x570dfc93), TOBN(0xa18be235, 0xf0088628),
-         TOBN(0xa5b30fba, 0xb00ed3a9), TOBN(0x34c61374, 0x73cdf8be),
-         TOBN(0x2c5c5f46, 0xabc56797), TOBN(0x5cecf93d, 0xb82a8ae2),
-         TOBN(0x7d3dbe41, 0xa968fbf0), TOBN(0xd23d4583, 0x1a5c7f3d),
-         TOBN(0xf28f69a0, 0xc087a9c7), TOBN(0xc2d75471, 0x474471ca),
-         TOBN(0x36ec9f4a, 0x4eb732ec), TOBN(0x6c943bbd, 0xb1ca6bed),
-         TOBN(0xd64535e1, 0xf2457892), TOBN(0x8b84a8ea, 0xf7e2ac06),
-         TOBN(0xe0936cd3, 0x2499dd5f), TOBN(0x12053d7e, 0x0ed04e57),
-         TOBN(0x4bdd0076, 0xe4305d9d), TOBN(0x34a527b9, 0x1f67f0a2),
-         TOBN(0xe79a4af0, 0x9cec46ea), TOBN(0xb15347a1, 0x658b9bc7),
-         TOBN(0x6bd2796f, 0x35af2f75), TOBN(0xac957990, 0x4051c435),
-         TOBN(0x2669dda3, 0xc33a655d), TOBN(0x5d503c2e, 0x88514aa3),
-         TOBN(0xdfa11337, 0x3753dd41), TOBN(0x3f054673, 0x0b754f78),
-         TOBN(0xbf185677, 0x496125bd), TOBN(0xfb0023c8, 0x3775006c),
-         TOBN(0xfa0f072f, 0x3a037899), TOBN(0x4222b6eb, 0x0e4aea57),
-         TOBN(0x3dde5e76, 0x7866d25a), TOBN(0xb6eb04f8, 0x4837aa6f),
-         TOBN(0x5315591a, 0x2cf1cdb8), TOBN(0x6dfb4f41, 0x2d4e683c),
-         TOBN(0x7e923ea4, 0x48ee1f3a), TOBN(0x9604d9f7, 0x05a2afd5),
-         TOBN(0xbe1d4a33, 0x40ea4948), TOBN(0x5b45f1f4, 0xb44cbd2f),
-         TOBN(0x5faf8376, 0x4acc757e), TOBN(0xa7cf9ab8, 0x63d68ff7),
-         TOBN(0x8ad62f69, 0xdf0e404b), TOBN(0xd65f33c2, 0x12bdafdf),
-         TOBN(0xc365de15, 0xa377b14e), TOBN(0x6bf5463b, 0x8e39f60c),
-         TOBN(0x62030d2d, 0x2ce68148), TOBN(0xd95867ef, 0xe6f843a8),
-         TOBN(0xd39a0244, 0xef5ab017), TOBN(0x0bd2d8c1, 0x4ab55d12),
-         TOBN(0xc9503db3, 0x41639169), TOBN(0x2d4e25b0, 0xf7660c8a),
-         TOBN(0x760cb3b5, 0xe224c5d7), TOBN(0xfa3baf8c, 0x68616919),
-         TOBN(0x9fbca113, 0x8d142552), TOBN(0x1ab18bf1, 0x7669ebf5),
-         TOBN(0x55e6f53e, 0x9bdf25dd), TOBN(0x04cc0bf3, 0xcb6cd154),
-         TOBN(0x595bef49, 0x95e89080), TOBN(0xfe9459a8, 0x104a9ac1),
-         TOBN(0xad2d89ca, 0xcce9bb32), TOBN(0xddea65e1, 0xf7de8285),
-         TOBN(0x62ed8c35, 0xb351bd4b), TOBN(0x4150ff36, 0x0c0e19a7),
-         TOBN(0x86e3c801, 0x345f4e47), TOBN(0x3bf21f71, 0x203a266c),
-         TOBN(0x7ae110d4, 0x855b1f13), TOBN(0x5d6aaf6a, 0x07262517),
-         TOBN(0x1e0f12e1, 0x813d28f1), TOBN(0x6000e11d, 0x7ad7a523),
-         TOBN(0xc7d8deef, 0xc744a17b), TOBN(0x1e990b48, 0x14c05a00),
-         TOBN(0x68fddaee, 0x93e976d5), TOBN(0x696241d1, 0x46610d63),
-         TOBN(0xb204e7c3, 0x893dda88), TOBN(0x8bccfa65, 0x6a3a6946),
-         TOBN(0xb59425b4, 0xc5cd1411), TOBN(0x701b4042, 0xff3658b1),
-         TOBN(0xe3e56bca, 0x4784cf93), TOBN(0x27de5f15, 0x8fe68d60),
-         TOBN(0x4ab9cfce, 0xf8d53f19), TOBN(0xddb10311, 0xa40a730d),
-         TOBN(0x6fa73cd1, 0x4eee0a8a), TOBN(0xfd548748, 0x5249719d),
-         TOBN(0x49d66316, 0xa8123ef0), TOBN(0x73c32db4, 0xe7f95438),
-         TOBN(0x2e2ed209, 0x0d9e7854), TOBN(0xf98a9329, 0x9d9f0507),
-         TOBN(0xc5d33cf6, 0x0c6aa20a), TOBN(0x9a32ba14, 0x75279bb2),
-         TOBN(0x7e3202cb, 0x774a7307), TOBN(0x64ed4bc4, 0xe8c42dbd),
-         TOBN(0xc20f1a06, 0xd4caed0d), TOBN(0xb8021407, 0x171d22b3),
-         TOBN(0xd426ca04, 0xd13268d7), TOBN(0x92377007, 0x25f4d126),
-         TOBN(0x4204cbc3, 0x71f21a85), TOBN(0x18461b7a, 0xf82369ba),
-         TOBN(0xc0c07d31, 0x3fc858f9), TOBN(0x5deb5a50, 0xe2bab569),
-         TOBN(0xd5959d46, 0xd5eea89e), TOBN(0xfdff8424, 0x08437f4b),
-         TOBN(0xf21071e4, 0x3cfe254f), TOBN(0x72417696, 0x95468321),
-         TOBN(0x5d8288b9, 0x102cae3e), TOBN(0x2d143e3d, 0xf1965dff),
-         TOBN(0x00c9a376, 0xa078d847), TOBN(0x6fc0da31, 0x26028731),
-         TOBN(0xa2baeadf, 0xe45083a2), TOBN(0x66bc7218, 0x5e5b4bcd),
-         TOBN(0x2c826442, 0xd04b8e7f), TOBN(0xc19f5451, 0x6c4b586b),
-         TOBN(0x60182c49, 0x5b7eeed5), TOBN(0xd9954ecd, 0x7aa9dfa1),
-         TOBN(0xa403a8ec, 0xc73884ad), TOBN(0x7fb17de2, 0x9bb39041),
-         TOBN(0x694b64c5, 0xabb020e8), TOBN(0x3d18c184, 0x19c4eec7),
-         TOBN(0x9c4673ef, 0x1c4793e5), TOBN(0xc7b8aeb5, 0x056092e6),
-         TOBN(0x3aa1ca43, 0xf0f8c16b), TOBN(0x224ed5ec, 0xd679b2f6),
-         TOBN(0x0d56eeaf, 0x55a205c9), TOBN(0xbfe115ba, 0x4b8e028b),
-         TOBN(0x97e60849, 0x3927f4fe), TOBN(0xf91fbf94, 0x759aa7c5),
-         TOBN(0x985af769, 0x6be90a51), TOBN(0xc1277b78, 0x78ccb823),
-         TOBN(0x395b656e, 0xe7a75952), TOBN(0x00df7de0, 0x928da5f5),
-         TOBN(0x09c23175, 0x4ca4454f), TOBN(0x4ec971f4, 0x7aa2d3c1),
-         TOBN(0x45c3c507, 0xe75d9ccc), TOBN(0x63b7be8a, 0x3dc90306),
-         TOBN(0x37e09c66, 0x5db44bdc), TOBN(0x50d60da1, 0x6841c6a2),
-         TOBN(0x6f9b65ee, 0x08df1b12), TOBN(0x38734879, 0x7ff089df),
-         TOBN(0x9c331a66, 0x3fe8013d), TOBN(0x017f5de9, 0x5f42fcc8),
-         TOBN(0x43077866, 0xe8e57567), TOBN(0xc9f781ce, 0xf9fcdb18),
-         TOBN(0x38131dda, 0x9b12e174), TOBN(0x25d84aa3, 0x8a03752a),
-         TOBN(0x45e09e09, 0x4d0c0ce2), TOBN(0x1564008b, 0x92bebba5),
-         TOBN(0xf7e8ad31, 0xa87284c7), TOBN(0xb7c4b46c, 0x97e7bbaa),
-         TOBN(0x3e22a7b3, 0x97acf4ec), TOBN(0x0426c400, 0x5ea8b640),
-         TOBN(0x5e3295a6, 0x4e969285), TOBN(0x22aabc59, 0xa6a45670),
-         TOBN(0xb929714c, 0x5f5942bc), TOBN(0x9a6168bd, 0xfa3182ed),
-         TOBN(0x2216a665, 0x104152ba), TOBN(0x46908d03, 0xb6926368)},
-        {
-            TOBN(0xa9f5d874, 0x5a1251fb), TOBN(0x967747a8, 0xc72725c7),
-            TOBN(0x195c33e5, 0x31ffe89e), TOBN(0x609d210f, 0xe964935e),
-            TOBN(0xcafd6ca8, 0x2fe12227), TOBN(0xaf9b5b96, 0x0426469d),
-            TOBN(0x2e9ee04c, 0x5693183c), TOBN(0x1084a333, 0xc8146fef),
-            TOBN(0x96649933, 0xaed1d1f7), TOBN(0x566eaff3, 0x50563090),
-            TOBN(0x345057f0, 0xad2e39cf), TOBN(0x148ff65b, 0x1f832124),
-            TOBN(0x042e89d4, 0xcf94cf0d), TOBN(0x319bec84, 0x520c58b3),
-            TOBN(0x2a267626, 0x5361aa0d), TOBN(0xc86fa302, 0x8fbc87ad),
-            TOBN(0xfc83d2ab, 0x5c8b06d5), TOBN(0xb1a785a2, 0xfe4eac46),
-            TOBN(0xb99315bc, 0x846f7779), TOBN(0xcf31d816, 0xef9ea505),
-            TOBN(0x2391fe6a, 0x15d7dc85), TOBN(0x2f132b04, 0xb4016b33),
-            TOBN(0x29547fe3, 0x181cb4c7), TOBN(0xdb66d8a6, 0x650155a1),
-            TOBN(0x6b66d7e1, 0xadc1696f), TOBN(0x98ebe593, 0x0acd72d0),
-            TOBN(0x65f24550, 0xcc1b7435), TOBN(0xce231393, 0xb4b9a5ec),
-            TOBN(0x234a22d4, 0xdb067df9), TOBN(0x98dda095, 0xcaff9b00),
-            TOBN(0x1bbc75a0, 0x6100c9c1), TOBN(0x1560a9c8, 0x939cf695),
-            TOBN(0xcf006d3e, 0x99e0925f), TOBN(0x2dd74a96, 0x6322375a),
-            TOBN(0xc58b446a, 0xb56af5ba), TOBN(0x50292683, 0xe0b9b4f1),
-            TOBN(0xe2c34cb4, 0x1aeaffa3), TOBN(0x8b17203f, 0x9b9587c1),
-            TOBN(0x6d559207, 0xead1350c), TOBN(0x2b66a215, 0xfb7f9604),
-            TOBN(0x0850325e, 0xfe51bf74), TOBN(0x9c4f579e, 0x5e460094),
-            TOBN(0x5c87b92a, 0x76da2f25), TOBN(0x889de4e0, 0x6febef33),
-            TOBN(0x6900ec06, 0x646083ce), TOBN(0xbe2a0335, 0xbfe12773),
-            TOBN(0xadd1da35, 0xc5344110), TOBN(0x757568b7, 0xb802cd20),
-            TOBN(0x75559779, 0x00f7e6c8), TOBN(0x38e8b94f, 0x0facd2f0),
-            TOBN(0xfea1f3af, 0x03fde375), TOBN(0x5e11a1d8, 0x75881dfc),
-            TOBN(0xb3a6b02e, 0xc1e2f2ef), TOBN(0x193d2bbb, 0xc605a6c5),
-            TOBN(0x325ffeee, 0x339a0b2d), TOBN(0x27b6a724, 0x9e0c8846),
-            TOBN(0xe4050f1c, 0xf1c367ca), TOBN(0x9bc85a9b, 0xc90fbc7d),
-            TOBN(0xa373c4a2, 0xe1a11032), TOBN(0xb64232b7, 0xad0393a9),
-            TOBN(0xf5577eb0, 0x167dad29), TOBN(0x1604f301, 0x94b78ab2),
-            TOBN(0x0baa94af, 0xe829348b), TOBN(0x77fbd8dd, 0x41654342),
-            TOBN(0xdab50ea5, 0xb964e39a), TOBN(0xd4c29e3c, 0xd0d3c76e),
-            TOBN(0x80dae67c, 0x56d11964), TOBN(0x7307a8bf, 0xe5ffcc2f),
-            TOBN(0x65bbc1aa, 0x91708c3b), TOBN(0xa151e62c, 0x28bf0eeb),
-            TOBN(0x6cb53381, 0x6fa34db7), TOBN(0x5139e05c, 0xa29403a8),
-            TOBN(0x6ff651b4, 0x94a7cd2e), TOBN(0x5671ffd1, 0x0699336c),
-            TOBN(0x6f5fd2cc, 0x979a896a), TOBN(0x11e893a8, 0xd8148cef),
-            TOBN(0x988906a1, 0x65cf7b10), TOBN(0x81b67178, 0xc50d8485),
-            TOBN(0x7c0deb35, 0x8a35b3de), TOBN(0x423ac855, 0xc1d29799),
-            TOBN(0xaf580d87, 0xdac50b74), TOBN(0x28b2b89f, 0x5869734c),
-            TOBN(0x99a3b936, 0x874e28fb), TOBN(0xbb2c9190, 0x25f3f73a),
-            TOBN(0x199f6918, 0x84a9d5b7), TOBN(0x7ebe2325, 0x7e770374),
-            TOBN(0xf442e107, 0x0738efe2), TOBN(0xcf9f3f56, 0xcf9082d2),
-            TOBN(0x719f69e1, 0x09618708), TOBN(0xcc9e8364, 0xc183f9b1),
-            TOBN(0xec203a95, 0x366a21af), TOBN(0x6aec5d6d, 0x068b141f),
-            TOBN(0xee2df78a, 0x994f04e9), TOBN(0xb39ccae8, 0x271245b0),
-            TOBN(0xb875a4a9, 0x97e43f4f), TOBN(0x507dfe11, 0xdb2cea98),
-            TOBN(0x4fbf81cb, 0x489b03e9), TOBN(0xdb86ec5b, 0x6ec414fa),
-            TOBN(0xfad444f9, 0xf51b3ae5), TOBN(0xca7d33d6, 0x1914e3fe),
-            TOBN(0xa9c32f5c, 0x0ae6c4d0), TOBN(0xa9ca1d1e, 0x73969568),
-            TOBN(0x98043c31, 0x1aa7467e), TOBN(0xe832e75c, 0xe21b5ac6),
-            TOBN(0x314b7aea, 0x5232123d), TOBN(0x08307c8c, 0x65ae86db),
-            TOBN(0x06e7165c, 0xaa4668ed), TOBN(0xb170458b, 0xb4d3ec39),
-            TOBN(0x4d2e3ec6, 0xc19bb986), TOBN(0xc5f34846, 0xae0304ed),
-            TOBN(0x917695a0, 0x6c9f9722), TOBN(0x6c7f7317, 0x4cab1c0a),
-            TOBN(0x6295940e, 0x9d6d2e8b), TOBN(0xd318b8c1, 0x549f7c97),
-            TOBN(0x22453204, 0x97713885), TOBN(0x468d834b, 0xa8a440fe),
-            TOBN(0xd81fe5b2, 0xbfba796e), TOBN(0x152364db, 0x6d71f116),
-            TOBN(0xbb8c7c59, 0xb5b66e53), TOBN(0x0b12c61b, 0x2641a192),
-            TOBN(0x31f14802, 0xfcf0a7fd), TOBN(0x42fd0789, 0x5488b01e),
-            TOBN(0x71d78d6d, 0x9952b498), TOBN(0x8eb572d9, 0x07ac5201),
-            TOBN(0xe0a2a44c, 0x4d194a88), TOBN(0xd2b63fd9, 0xba017e66),
-            TOBN(0x78efc6c8, 0xf888aefc), TOBN(0xb76f6bda, 0x4a881a11),
-            TOBN(0x187f314b, 0xb46c2397), TOBN(0x004cf566, 0x5ded2819),
-            TOBN(0xa9ea5704, 0x38764d34), TOBN(0xbba45217, 0x78084709),
-            TOBN(0x06474571, 0x1171121e), TOBN(0xad7b7eb1, 0xe7c9b671),
-            TOBN(0xdacfbc40, 0x730f7507), TOBN(0x178cd8c6, 0xc7ad7bd1),
-            TOBN(0xbf0be101, 0xb2a67238), TOBN(0x3556d367, 0xaf9c14f2),
-            TOBN(0x104b7831, 0xa5662075), TOBN(0x58ca59bb, 0x79d9e60a),
-            TOBN(0x4bc45392, 0xa569a73b), TOBN(0x517a52e8, 0x5698f6c9),
-            TOBN(0x85643da5, 0xaeadd755), TOBN(0x1aed0cd5, 0x2a581b84),
-            TOBN(0xb9b4ff84, 0x80af1372), TOBN(0x244c3113, 0xf1ba5d1f),
-            TOBN(0x2a5dacbe, 0xf5f98d31), TOBN(0x2c3323e8, 0x4375bc2a),
-            TOBN(0x17a3ab4a, 0x5594b1dd), TOBN(0xa1928bfb, 0xceb4797e),
-            TOBN(0xe83af245, 0xe4886a19), TOBN(0x8979d546, 0x72b5a74a),
-            TOBN(0xa0f726bc, 0x19f9e967), TOBN(0xd9d03152, 0xe8fbbf4e),
-            TOBN(0xcfd6f51d, 0xb7707d40), TOBN(0x633084d9, 0x63f6e6e0),
-            TOBN(0xedcd9cdc, 0x55667eaf), TOBN(0x73b7f92b, 0x2e44d56f),
-            TOBN(0xfb2e39b6, 0x4e962b14), TOBN(0x7d408f6e, 0xf671fcbf),
-            TOBN(0xcc634ddc, 0x164a89bb), TOBN(0x74a42bb2, 0x3ef3bd05),
-            TOBN(0x1280dbb2, 0x428decbb), TOBN(0x6103f6bb, 0x402c8596),
-            TOBN(0xfa2bf581, 0x355a5752), TOBN(0x562f96a8, 0x00946674),
-            TOBN(0x4e4ca16d, 0x6da0223b), TOBN(0xfe47819f, 0x28d3aa25),
-            TOBN(0x9eea3075, 0xf8dfcf8a), TOBN(0xa284f0aa, 0x95669825),
-            TOBN(0xb3fca250, 0x867d3fd8), TOBN(0x20757b5f, 0x269d691e),
-            TOBN(0xf2c24020, 0x93b8a5de), TOBN(0xd3f93359, 0xebc06da6),
-            TOBN(0x1178293e, 0xb2739c33), TOBN(0xd2a3e770, 0xbcd686e5),
-            TOBN(0xa76f49f4, 0xcd941534), TOBN(0x0d37406b, 0xe3c71c0e),
-            TOBN(0x172d9397, 0x3b97f7e3), TOBN(0xec17e239, 0xbd7fd0de),
-            TOBN(0xe3290551, 0x6f496ba2), TOBN(0x6a693172, 0x36ad50e7),
-            TOBN(0xc4e539a2, 0x83e7eff5), TOBN(0x752737e7, 0x18e1b4cf),
-            TOBN(0xa2f7932c, 0x68af43ee), TOBN(0x5502468e, 0x703d00bd),
-            TOBN(0xe5dc978f, 0x2fb061f5), TOBN(0xc9a1904a, 0x28c815ad),
-            TOBN(0xd3af538d, 0x470c56a4), TOBN(0x159abc5f, 0x193d8ced),
-            TOBN(0x2a37245f, 0x20108ef3), TOBN(0xfa17081e, 0x223f7178),
-            TOBN(0x27b0fb2b, 0x10c8c0f5), TOBN(0x2102c3ea, 0x40650547),
-            TOBN(0x594564df, 0x8ac3bfa7), TOBN(0x98102033, 0x509dad96),
-            TOBN(0x6989643f, 0xf1d18a13), TOBN(0x35eebd91, 0xd7fc5af0),
-            TOBN(0x078d096a, 0xfaeaafd8), TOBN(0xb7a89341, 0xdef3de98),
-            TOBN(0x2a206e8d, 0xecf2a73a), TOBN(0x066a6397, 0x8e551994),
-            TOBN(0x3a6a088a, 0xb98d53a2), TOBN(0x0ce7c67c, 0x2d1124aa),
-            TOBN(0x48cec671, 0x759a113c), TOBN(0xe3b373d3, 0x4f6f67fa),
-            TOBN(0x5455d479, 0xfd36727b), TOBN(0xe5a428ee, 0xa13c0d81),
-            TOBN(0xb853dbc8, 0x1c86682b), TOBN(0xb78d2727, 0xb8d02b2a),
-            TOBN(0xaaf69bed, 0x8ebc329a), TOBN(0xdb6b40b3, 0x293b2148),
-            TOBN(0xe42ea77d, 0xb8c4961f), TOBN(0xb1a12f7c, 0x20e5e0ab),
-            TOBN(0xa0ec5274, 0x79e8b05e), TOBN(0x68027391, 0xfab60a80),
-            TOBN(0x6bfeea5f, 0x16b1bd5e), TOBN(0xf957e420, 0x4de30ad3),
-            TOBN(0xcbaf664e, 0x6a353b9e), TOBN(0x5c873312, 0x26d14feb),
-            TOBN(0x4e87f98c, 0xb65f57cb), TOBN(0xdb60a621, 0x5e0cdd41),
-            TOBN(0x67c16865, 0xa6881440), TOBN(0x1093ef1a, 0x46ab52aa),
-            TOBN(0xc095afb5, 0x3f4ece64), TOBN(0x6a6bb02e, 0x7604551a),
-            TOBN(0x55d44b4e, 0x0b26b8cd), TOBN(0xe5f9a999, 0xf971268a),
-            TOBN(0xc08ec425, 0x11a7de84), TOBN(0x83568095, 0xfda469dd),
-            TOBN(0x737bfba1, 0x6c6c90a2), TOBN(0x1cb9c4a0, 0xbe229831),
-            TOBN(0x93bccbba, 0xbb2eec64), TOBN(0xa0c23b64, 0xda03adbe),
-            TOBN(0x5f7aa00a, 0xe0e86ac4), TOBN(0x470b941e, 0xfc1401e6),
-            TOBN(0x5ad8d679, 0x9df43574), TOBN(0x4ccfb8a9, 0x0f65d810),
-            TOBN(0x1bce80e3, 0xaa7fbd81), TOBN(0x273291ad, 0x9508d20a),
-            TOBN(0xf5c4b46b, 0x42a92806), TOBN(0x810684ec, 0xa86ab44a),
-            TOBN(0x4591640b, 0xca0bc9f8), TOBN(0xb5efcdfc, 0x5c4b6054),
-            TOBN(0x16fc8907, 0x6e9edd12), TOBN(0xe29d0b50, 0xd4d792f9),
-            TOBN(0xa45fd01c, 0x9b03116d), TOBN(0x85035235, 0xc81765a4),
-            TOBN(0x1fe2a9b2, 0xb4b4b67c), TOBN(0xc1d10df0, 0xe8020604),
-            TOBN(0x9d64abfc, 0xbc8058d8), TOBN(0x8943b9b2, 0x712a0fbb),
-            TOBN(0x90eed914, 0x3b3def04), TOBN(0x85ab3aa2, 0x4ce775ff),
-            TOBN(0x605fd4ca, 0x7bbc9040), TOBN(0x8b34a564, 0xe2c75dfb),
-            TOBN(0x41ffc94a, 0x10358560), TOBN(0x2d8a5072, 0x9e5c28aa),
-            TOBN(0xe915a0fc, 0x4cc7eb15), TOBN(0xe9efab05, 0x8f6d0f5d),
-            TOBN(0xdbab47a9, 0xd19e9b91), TOBN(0x8cfed745, 0x0276154c),
-            TOBN(0x154357ae, 0x2cfede0d), TOBN(0x520630df, 0x19f5a4ef),
-            TOBN(0x25759f7c, 0xe382360f), TOBN(0xb6db05c9, 0x88bf5857),
-            TOBN(0x2917d61d, 0x6c58d46c), TOBN(0x14f8e491, 0xfd20cb7a),
-            TOBN(0xb68a727a, 0x11c20340), TOBN(0x0386f86f, 0xaf7ccbb6),
-            TOBN(0x5c8bc6cc, 0xfee09a20), TOBN(0x7d76ff4a, 0xbb7eea35),
-            TOBN(0xa7bdebe7, 0xdb15be7a), TOBN(0x67a08054, 0xd89f0302),
-            TOBN(0x56bf0ea9, 0xc1193364), TOBN(0xc8244467, 0x62837ebe),
-            TOBN(0x32bd8e8b, 0x20d841b8), TOBN(0x127a0548, 0xdbb8a54f),
-            TOBN(0x83dd4ca6, 0x63b20236), TOBN(0x87714718, 0x203491fa),
-            TOBN(0x4dabcaaa, 0xaa8a5288), TOBN(0x91cc0c8a, 0xaf23a1c9),
-            TOBN(0x34c72c6a, 0x3f220e0c), TOBN(0xbcc20bdf, 0x1232144a),
-            TOBN(0x6e2f42da, 0xa20ede1b), TOBN(0xc441f00c, 0x74a00515),
-            TOBN(0xbf46a5b6, 0x734b8c4b), TOBN(0x57409503, 0x7b56c9a4),
-            TOBN(0x9f735261, 0xe4585d45), TOBN(0x9231faed, 0x6734e642),
-            TOBN(0x1158a176, 0xbe70ee6c), TOBN(0x35f1068d, 0x7c3501bf),
-            TOBN(0x6beef900, 0xa2d26115), TOBN(0x649406f2, 0xef0afee3),
-            TOBN(0x3f43a60a, 0xbc2420a1), TOBN(0x509002a7, 0xd5aee4ac),
-            TOBN(0xb46836a5, 0x3ff3571b), TOBN(0x24f98b78, 0x837927c1),
-            TOBN(0x6254256a, 0x4533c716), TOBN(0xf27abb0b, 0xd07ee196),
-            TOBN(0xd7cf64fc, 0x5c6d5bfd), TOBN(0x6915c751, 0xf0cd7a77),
-            TOBN(0xd9f59012, 0x8798f534), TOBN(0x772b0da8, 0xf81d8b5f),
-            TOBN(0x1244260c, 0x2e03fa69), TOBN(0x36cf0e3a, 0x3be1a374),
-            TOBN(0x6e7c1633, 0xef06b960), TOBN(0xa71a4c55, 0x671f90f6),
-            TOBN(0x7a941251, 0x33c673db), TOBN(0xc0bea510, 0x73e8c131),
-            TOBN(0x61a8a699, 0xd4f6c734), TOBN(0x25e78c88, 0x341ed001),
-            TOBN(0x5c18acf8, 0x8e2f7d90), TOBN(0xfdbf33d7, 0x77be32cd),
-            TOBN(0x0a085cd7, 0xd2eb5ee9), TOBN(0x2d702cfb, 0xb3201115),
-            TOBN(0xb6e0ebdb, 0x85c88ce8), TOBN(0x23a3ce3c, 0x1e01d617),
-            TOBN(0x3041618e, 0x567333ac), TOBN(0x9dd0fd8f, 0x157edb6b),
-            TOBN(0x27f74702, 0xb57872b8), TOBN(0x2ef26b4f, 0x657d5fe1),
-            TOBN(0x95426f0a, 0x57cf3d40), TOBN(0x847e2ad1, 0x65a6067a),
-            TOBN(0xd474d9a0, 0x09996a74), TOBN(0x16a56acd, 0x2a26115c),
-            TOBN(0x02a615c3, 0xd16f4d43), TOBN(0xcc3fc965, 0xaadb85b7),
-            TOBN(0x386bda73, 0xce07d1b0), TOBN(0xd82910c2, 0x58ad4178),
-            TOBN(0x124f82cf, 0xcd2617f4), TOBN(0xcc2f5e8d, 0xef691770),
-            TOBN(0x82702550, 0xb8c30ccc), TOBN(0x7b856aea, 0x1a8e575a),
-            TOBN(0xbb822fef, 0xb1ab9459), TOBN(0x085928bc, 0xec24e38e),
-            TOBN(0x5d0402ec, 0xba8f4b4d), TOBN(0xc07cd4ba, 0x00b4d58b),
-            TOBN(0x5d8dffd5, 0x29227e7a), TOBN(0x61d44d0c, 0x31bf386f),
-            TOBN(0xe486dc2b, 0x135e6f4d), TOBN(0x680962eb, 0xe79410ef),
-            TOBN(0xa61bd343, 0xf10088b5), TOBN(0x6aa76076, 0xe2e28686),
-            TOBN(0x80463d11, 0x8fb98871), TOBN(0xcb26f5c3, 0xbbc76aff),
-            TOBN(0xd4ab8edd, 0xfbe03614), TOBN(0xc8eb579b, 0xc0cf2dee),
-            TOBN(0xcc004c15, 0xc93bae41), TOBN(0x46fbae5d, 0x3aeca3b2),
-            TOBN(0x671235cf, 0x0f1e9ab1), TOBN(0xadfba934, 0x9ec285c1),
-            TOBN(0x88ded013, 0xf216c980), TOBN(0xc8ac4fb8, 0xf79e0bc1),
-            TOBN(0xa29b89c6, 0xfb97a237), TOBN(0xb697b780, 0x9922d8e7),
-            TOBN(0x3142c639, 0xddb945b5), TOBN(0x447b06c7, 0xe094c3a9),
-            TOBN(0xcdcb3642, 0x72266c90), TOBN(0x633aad08, 0xa9385046),
-            TOBN(0xa36c936b, 0xb57c6477), TOBN(0x871f8b64, 0xe94dbcc6),
-            TOBN(0x28d0fb62, 0xa591a67b), TOBN(0x9d40e081, 0xc1d926f5),
-            TOBN(0x3111eaf6, 0xf2d84b5a), TOBN(0x228993f9, 0xa565b644),
-            TOBN(0x0ccbf592, 0x2c83188b), TOBN(0xf87b30ab, 0x3df3e197),
-            TOBN(0xb8658b31, 0x7642bca8), TOBN(0x1a032d7f, 0x52800f17),
-            TOBN(0x051dcae5, 0x79bf9445), TOBN(0xeba6b8ee, 0x54a2e253),
-            TOBN(0x5c8b9cad, 0xd4485692), TOBN(0x84bda40e, 0x8986e9be),
-            TOBN(0xd16d16a4, 0x2f0db448), TOBN(0x8ec80050, 0xa14d4188),
-            TOBN(0xb2b26107, 0x98fa7aaa), TOBN(0x41209ee4, 0xf073aa4e),
-            TOBN(0xf1570359, 0xf2d6b19b), TOBN(0xcbe6868c, 0xfc577caf),
-            TOBN(0x186c4bdc, 0x32c04dd3), TOBN(0xa6c35fae, 0xcfeee397),
-            TOBN(0xb4a1b312, 0xf086c0cf), TOBN(0xe0a5ccc6, 0xd9461fe2),
-            TOBN(0xc32278aa, 0x1536189f), TOBN(0x1126c55f, 0xba6df571),
-            TOBN(0x0f71a602, 0xb194560e), TOBN(0x8b2d7405, 0x324bd6e1),
-            TOBN(0x8481939e, 0x3738be71), TOBN(0xb5090b1a, 0x1a4d97a9),
-            TOBN(0x116c65a3, 0xf05ba915), TOBN(0x21863ad3, 0xaae448aa),
-            TOBN(0xd24e2679, 0xa7aae5d3), TOBN(0x7076013d, 0x0de5c1c4),
-            TOBN(0x2d50f8ba, 0xbb05b629), TOBN(0x73c1abe2, 0x6e66efbb),
-            TOBN(0xefd4b422, 0xf2488af7), TOBN(0xe4105d02, 0x663ba575),
-            TOBN(0x7eb60a8b, 0x53a69457), TOBN(0x62210008, 0xc945973b),
-            TOBN(0xfb255478, 0x77a50ec6), TOBN(0xbf0392f7, 0x0a37a72c),
-            TOBN(0xa0a7a19c, 0x4be18e7a), TOBN(0x90d8ea16, 0x25b1e0af),
-            TOBN(0x7582a293, 0xef953f57), TOBN(0x90a64d05, 0xbdc5465a),
-            TOBN(0xca79c497, 0xe2510717), TOBN(0x560dbb7c, 0x18cb641f),
-            TOBN(0x1d8e3286, 0x4b66abfb), TOBN(0xd26f52e5, 0x59030900),
-            TOBN(0x1ee3f643, 0x5584941a), TOBN(0x6d3b3730, 0x569f5958),
-            TOBN(0x9ff2a62f, 0x4789dba5), TOBN(0x91fcb815, 0x72b5c9b7),
-            TOBN(0xf446cb7d, 0x6c8f9a0e), TOBN(0x48f625c1, 0x39b7ecb5),
-            TOBN(0xbabae801, 0x1c6219b8), TOBN(0xe7a562d9, 0x28ac2f23),
-            TOBN(0xe1b48732, 0x26e20588), TOBN(0x06ee1cad, 0x775af051),
-            TOBN(0xda29ae43, 0xfaff79f7), TOBN(0xc141a412, 0x652ee9e0),
-            TOBN(0x1e127f6f, 0x195f4bd0), TOBN(0x29c6ab4f, 0x072f34f8),
-            TOBN(0x7b7c1477, 0x30448112), TOBN(0x82b51af1, 0xe4a38656),
-            TOBN(0x2bf2028a, 0x2f315010), TOBN(0xc9a4a01f, 0x6ea88cd4),
-            TOBN(0xf63e95d8, 0x257e5818), TOBN(0xdd8efa10, 0xb4519b16),
-            TOBN(0xed8973e0, 0x0da910bf), TOBN(0xed49d077, 0x5c0fe4a9),
-            TOBN(0xac3aac5e, 0xb7caee1e), TOBN(0x1033898d, 0xa7f4da57),
-            TOBN(0x42145c0e, 0x5c6669b9), TOBN(0x42daa688, 0xc1aa2aa0),
-            TOBN(0x629cc15c, 0x1a1d885a), TOBN(0x25572ec0, 0xf4b76817),
-            TOBN(0x8312e435, 0x9c8f8f28), TOBN(0x8107f8cd, 0x81965490),
-            TOBN(0x516ff3a3, 0x6fa6110c), TOBN(0x74fb1eb1, 0xfb93561f),
-            TOBN(0x6c0c9047, 0x8457522b), TOBN(0xcfd32104, 0x6bb8bdc6),
-            TOBN(0x2d6884a2, 0xcc80ad57), TOBN(0x7c27fc35, 0x86a9b637),
-            TOBN(0x3461baed, 0xadf4e8cd), TOBN(0x1d56251a, 0x617242f0),
-            TOBN(0x0b80d209, 0xc955bef4), TOBN(0xdf02cad2, 0x06adb047),
-            TOBN(0xf0d7cb91, 0x5ec74fee), TOBN(0xd2503375, 0x1111ba44),
-            TOBN(0x9671755e, 0xdf53cb36), TOBN(0x54dcb612, 0x3368551b),
-            TOBN(0x66d69aac, 0xc8a025a4), TOBN(0x6be946c6, 0xe77ef445),
-            TOBN(0x719946d1, 0xa995e094), TOBN(0x65e848f6, 0xe51e04d8),
-            TOBN(0xe62f3300, 0x6a1e3113), TOBN(0x1541c7c1, 0x501de503),
-            TOBN(0x4daac9fa, 0xf4acfade), TOBN(0x0e585897, 0x44cd0b71),
-            TOBN(0x544fd869, 0x0a51cd77), TOBN(0x60fc20ed, 0x0031016d),
-            TOBN(0x58b404ec, 0xa4276867), TOBN(0x46f6c3cc, 0x34f34993),
-            TOBN(0x477ca007, 0xc636e5bd), TOBN(0x8018f5e5, 0x7c458b47),
-            TOBN(0xa1202270, 0xe47b668f), TOBN(0xcef48ccd, 0xee14f203),
-            TOBN(0x23f98bae, 0x62ff9b4d), TOBN(0x55acc035, 0xc589eddd),
-            TOBN(0x3fe712af, 0x64db4444), TOBN(0x19e9d634, 0xbecdd480),
-            TOBN(0xe08bc047, 0xa930978a), TOBN(0x2dbf24ec, 0xa1280733),
-            TOBN(0x3c0ae38c, 0x2cd706b2), TOBN(0x5b012a5b, 0x359017b9),
-            TOBN(0x3943c38c, 0x72e0f5ae), TOBN(0x786167ea, 0x57176fa3),
-            TOBN(0xe5f9897d, 0x594881dc), TOBN(0x6b5efad8, 0xcfb820c1),
-            TOBN(0xb2179093, 0xd55018de), TOBN(0x39ad7d32, 0x0bac56ce),
-            TOBN(0xb55122e0, 0x2cfc0e81), TOBN(0x117c4661, 0xf6d89daa),
-            TOBN(0x362d01e1, 0xcb64fa09), TOBN(0x6a309b4e, 0x3e9c4ddd),
-            TOBN(0xfa979fb7, 0xabea49b1), TOBN(0xb4b1d27d, 0x10e2c6c5),
-            TOBN(0xbd61c2c4, 0x23afde7a), TOBN(0xeb6614f8, 0x9786d358),
-            TOBN(0x4a5d816b, 0x7f6f7459), TOBN(0xe431a44f, 0x09360e7b),
-            TOBN(0x8c27a032, 0xc309914c), TOBN(0xcea5d68a, 0xcaede3d8),
-            TOBN(0x3668f665, 0x3a0a3f95), TOBN(0x89369416, 0x7ceba27b),
-            TOBN(0x89981fad, 0xe4728fe9), TOBN(0x7102c8a0, 0x8a093562),
-            TOBN(0xbb80310e, 0x235d21c8), TOBN(0x505e55d1, 0xbefb7f7b),
-            TOBN(0xa0a90811, 0x12958a67), TOBN(0xd67e106a, 0x4d851fef),
-            TOBN(0xb84011a9, 0x431dd80e), TOBN(0xeb7c7cca, 0x73306cd9),
-            TOBN(0x20fadd29, 0xd1b3b730), TOBN(0x83858b5b, 0xfe37b3d3),
-            TOBN(0xbf4cd193, 0xb6251d5c), TOBN(0x1cca1fd3, 0x1352d952),
-            TOBN(0xc66157a4, 0x90fbc051), TOBN(0x7990a638, 0x89b98636),
-        },
-        {TOBN(0xe5aa692a, 0x87dec0e1), TOBN(0x010ded8d, 0xf7b39d00),
-         TOBN(0x7b1b80c8, 0x54cfa0b5), TOBN(0x66beb876, 0xa0f8ea28),
-         TOBN(0x50d7f531, 0x3476cd0e), TOBN(0xa63d0e65, 0xb08d3949),
-         TOBN(0x1a09eea9, 0x53479fc6), TOBN(0x82ae9891, 0xf499e742),
-         TOBN(0xab58b910, 0x5ca7d866), TOBN(0x582967e2, 0x3adb3b34),
-         TOBN(0x89ae4447, 0xcceac0bc), TOBN(0x919c667c, 0x7bf56af5),
-         TOBN(0x9aec17b1, 0x60f5dcd7), TOBN(0xec697b9f, 0xddcaadbc),
-         TOBN(0x0b98f341, 0x463467f5), TOBN(0xb187f1f7, 0xa967132f),
-         TOBN(0x90fe7a1d, 0x214aeb18), TOBN(0x1506af3c, 0x741432f7),
-         TOBN(0xbb5565f9, 0xe591a0c4), TOBN(0x10d41a77, 0xb44f1bc3),
-         TOBN(0xa09d65e4, 0xa84bde96), TOBN(0x42f060d8, 0xf20a6a1c),
-         TOBN(0x652a3bfd, 0xf27f9ce7), TOBN(0xb6bdb65c, 0x3b3d739f),
-         TOBN(0xeb5ddcb6, 0xec7fae9f), TOBN(0x995f2714, 0xefb66e5a),
-         TOBN(0xdee95d8e, 0x69445d52), TOBN(0x1b6c2d46, 0x09e27620),
-         TOBN(0x32621c31, 0x8129d716), TOBN(0xb03909f1, 0x0958c1aa),
-         TOBN(0x8c468ef9, 0x1af4af63), TOBN(0x162c429f, 0xfba5cdf6),
-         TOBN(0x2f682343, 0x753b9371), TOBN(0x29cab45a, 0x5f1f9cd7),
-         TOBN(0x571623ab, 0xb245db96), TOBN(0xc507db09, 0x3fd79999),
-         TOBN(0x4e2ef652, 0xaf036c32), TOBN(0x86f0cc78, 0x05018e5c),
-         TOBN(0xc10a73d4, 0xab8be350), TOBN(0x6519b397, 0x7e826327),
-         TOBN(0xe8cb5eef, 0x9c053df7), TOBN(0x8de25b37, 0xb300ea6f),
-         TOBN(0xdb03fa92, 0xc849cffb), TOBN(0x242e43a7, 0xe84169bb),
-         TOBN(0xe4fa51f4, 0xdd6f958e), TOBN(0x6925a77f, 0xf4445a8d),
-         TOBN(0xe6e72a50, 0xe90d8949), TOBN(0xc66648e3, 0x2b1f6390),
-         TOBN(0xb2ab1957, 0x173e460c), TOBN(0x1bbbce75, 0x30704590),
-         TOBN(0xc0a90dbd, 0xdb1c7162), TOBN(0x505e399e, 0x15cdd65d),
-         TOBN(0x68434dcb, 0x57797ab7), TOBN(0x60ad35ba, 0x6a2ca8e8),
-         TOBN(0x4bfdb1e0, 0xde3336c1), TOBN(0xbbef99eb, 0xd8b39015),
-         TOBN(0x6c3b96f3, 0x1711ebec), TOBN(0x2da40f1f, 0xce98fdc4),
-         TOBN(0xb99774d3, 0x57b4411f), TOBN(0x87c8bdf4, 0x15b65bb6),
-         TOBN(0xda3a89e3, 0xc2eef12d), TOBN(0xde95bb9b, 0x3c7471f3),
-         TOBN(0x600f225b, 0xd812c594), TOBN(0x54907c5d, 0x2b75a56b),
-         TOBN(0xa93cc5f0, 0x8db60e35), TOBN(0x743e3cd6, 0xfa833319),
-         TOBN(0x7dad5c41, 0xf81683c9), TOBN(0x70c1e7d9, 0x9c34107e),
-         TOBN(0x0edc4a39, 0xa6be0907), TOBN(0x36d47035, 0x86d0b7d3),
-         TOBN(0x8c76da03, 0x272bfa60), TOBN(0x0b4a07ea, 0x0f08a414),
-         TOBN(0x699e4d29, 0x45c1dd53), TOBN(0xcadc5898, 0x231debb5),
-         TOBN(0xdf49fcc7, 0xa77f00e0), TOBN(0x93057bbf, 0xa73e5a0e),
-         TOBN(0x2f8b7ecd, 0x027a4cd1), TOBN(0x114734b3, 0xc614011a),
-         TOBN(0xe7a01db7, 0x67677c68), TOBN(0x89d9be5e, 0x7e273f4f),
-         TOBN(0xd225cb2e, 0x089808ef), TOBN(0xf1f7a27d, 0xd59e4107),
-         TOBN(0x53afc761, 0x8211b9c9), TOBN(0x0361bc67, 0xe6819159),
-         TOBN(0x2a865d0b, 0x7f071426), TOBN(0x6a3c1810, 0xe7072567),
-         TOBN(0x3e3bca1e, 0x0d6bcabd), TOBN(0xa1b02bc1, 0x408591bc),
-         TOBN(0xe0deee59, 0x31fba239), TOBN(0xf47424d3, 0x98bd91d1),
-         TOBN(0x0f8886f4, 0x071a3c1d), TOBN(0x3f7d41e8, 0xa819233b),
-         TOBN(0x708623c2, 0xcf6eb998), TOBN(0x86bb49af, 0x609a287f),
-         TOBN(0x942bb249, 0x63c90762), TOBN(0x0ef6eea5, 0x55a9654b),
-         TOBN(0x5f6d2d72, 0x36f5defe), TOBN(0xfa9922dc, 0x56f99176),
-         TOBN(0x6c8c5ece, 0xf78ce0c7), TOBN(0x7b44589d, 0xbe09b55e),
-         TOBN(0xe11b3bca, 0x9ea83770), TOBN(0xd7fa2c7f, 0x2ab71547),
-         TOBN(0x2a3dd6fa, 0x2a1ddcc0), TOBN(0x09acb430, 0x5a7b7707),
-         TOBN(0x4add4a2e, 0x649d4e57), TOBN(0xcd53a2b0, 0x1917526e),
-         TOBN(0xc5262330, 0x20b44ac4), TOBN(0x4028746a, 0xbaa2c31d),
-         TOBN(0x51318390, 0x64291d4c), TOBN(0xbf48f151, 0xee5ad909),
-         TOBN(0xcce57f59, 0x7b185681), TOBN(0x7c3ac1b0, 0x4854d442),
-         TOBN(0x65587dc3, 0xc093c171), TOBN(0xae7acb24, 0x24f42b65),
-         TOBN(0x5a338adb, 0x955996cb), TOBN(0xc8e65675, 0x6051f91b),
-         TOBN(0x66711fba, 0x28b8d0b1), TOBN(0x15d74137, 0xb6c10a90),
-         TOBN(0x70cdd7eb, 0x3a232a80), TOBN(0xc9e2f07f, 0x6191ed24),
-         TOBN(0xa80d1db6, 0xf79588c0), TOBN(0xfa52fc69, 0xb55768cc),
-         TOBN(0x0b4df1ae, 0x7f54438a), TOBN(0x0cadd1a7, 0xf9b46a4f),
-         TOBN(0xb40ea6b3, 0x1803dd6f), TOBN(0x488e4fa5, 0x55eaae35),
-         TOBN(0x9f047d55, 0x382e4e16), TOBN(0xc9b5b7e0, 0x2f6e0c98),
-         TOBN(0x6b1bd2d3, 0x95762649), TOBN(0xa9604ee7, 0xc7aea3f6),
-         TOBN(0x3646ff27, 0x6dc6f896), TOBN(0x9bf0e7f5, 0x2860bad1),
-         TOBN(0x2d92c821, 0x7cb44b92), TOBN(0xa2f5ce63, 0xaea9c182),
-         TOBN(0xd0a2afb1, 0x9154a5fd), TOBN(0x482e474c, 0x95801da6),
-         TOBN(0xc19972d0, 0xb611c24b), TOBN(0x1d468e65, 0x60a8f351),
-         TOBN(0xeb758069, 0x7bcf6421), TOBN(0xec9dd0ee, 0x88fbc491),
-         TOBN(0x5b59d2bf, 0x956c2e32), TOBN(0x73dc6864, 0xdcddf94e),
-         TOBN(0xfd5e2321, 0xbcee7665), TOBN(0xa7b4f8ef, 0x5e9a06c4),
-         TOBN(0xfba918dd, 0x7280f855), TOBN(0xbbaac260, 0x8baec688),
-         TOBN(0xa3b3f00f, 0x33400f42), TOBN(0x3d2dba29, 0x66f2e6e4),
-         TOBN(0xb6f71a94, 0x98509375), TOBN(0x8f33031f, 0xcea423cc),
-         TOBN(0x009b8dd0, 0x4807e6fb), TOBN(0x5163cfe5, 0x5cdb954c),
-         TOBN(0x03cc8f17, 0xcf41c6e8), TOBN(0xf1f03c2a, 0x037b925c),
-         TOBN(0xc39c19cc, 0x66d2427c), TOBN(0x823d24ba, 0x7b6c18e4),
-         TOBN(0x32ef9013, 0x901f0b4f), TOBN(0x684360f1, 0xf8941c2e),
-         TOBN(0x0ebaff52, 0x2c28092e), TOBN(0x7891e4e3, 0x256c932f),
-         TOBN(0x51264319, 0xac445e3d), TOBN(0x553432e7, 0x8ea74381),
-         TOBN(0xe6eeaa69, 0x67e9c50a), TOBN(0x27ced284, 0x62e628c7),
-         TOBN(0x3f96d375, 0x7a4afa57), TOBN(0xde0a14c3, 0xe484c150),
-         TOBN(0x364a24eb, 0x38bd9923), TOBN(0x1df18da0, 0xe5177422),
-         TOBN(0x174e8f82, 0xd8d38a9b), TOBN(0x2e97c600, 0xe7de1391),
-         TOBN(0xc5709850, 0xa1c175dd), TOBN(0x969041a0, 0x32ae5035),
-         TOBN(0xcbfd533b, 0x76a2086b), TOBN(0xd6bba71b, 0xd7c2e8fe),
-         TOBN(0xb2d58ee6, 0x099dfb67), TOBN(0x3a8b342d, 0x064a85d9),
-         TOBN(0x3bc07649, 0x522f9be3), TOBN(0x690c075b, 0xdf1f49a8),
-         TOBN(0x80e1aee8, 0x3854ec42), TOBN(0x2a7dbf44, 0x17689dc7),
-         TOBN(0xc004fc0e, 0x3faf4078), TOBN(0xb2f02e9e, 0xdf11862c),
-         TOBN(0xf10a5e0f, 0xa0a1b7b3), TOBN(0x30aca623, 0x8936ec80),
-         TOBN(0xf83cbf05, 0x02f40d9a), TOBN(0x4681c468, 0x2c318a4d),
-         TOBN(0x98575618, 0x0e9c2674), TOBN(0xbe79d046, 0x1847092e),
-         TOBN(0xaf1e480a, 0x78bd01e0), TOBN(0x6dd359e4, 0x72a51db9),
-         TOBN(0x62ce3821, 0xe3afbab6), TOBN(0xc5cee5b6, 0x17733199),
-         TOBN(0xe08b30d4, 0x6ffd9fbb), TOBN(0x6e5bc699, 0x36c610b7),
-         TOBN(0xf343cff2, 0x9ce262cf), TOBN(0xca2e4e35, 0x68b914c1),
-         TOBN(0x011d64c0, 0x16de36c5), TOBN(0xe0b10fdd, 0x42e2b829),
-         TOBN(0x78942981, 0x6685aaf8), TOBN(0xe7511708, 0x230ede97),
-         TOBN(0x671ed8fc, 0x3b922bf8), TOBN(0xe4d8c0a0, 0x4c29b133),
-         TOBN(0x87eb1239, 0x3b6e99c4), TOBN(0xaff3974c, 0x8793beba),
-         TOBN(0x03749405, 0x2c18df9b), TOBN(0xc5c3a293, 0x91007139),
-         TOBN(0x6a77234f, 0xe37a0b95), TOBN(0x02c29a21, 0xb661c96b),
-         TOBN(0xc3aaf1d6, 0x141ecf61), TOBN(0x9195509e, 0x3bb22f53),
-         TOBN(0x29597404, 0x22d51357), TOBN(0x1b083822, 0x537bed60),
-         TOBN(0xcd7d6e35, 0xe07289f0), TOBN(0x1f94c48c, 0x6dd86eff),
-         TOBN(0xc8bb1f82, 0xeb0f9cfa), TOBN(0x9ee0b7e6, 0x1b2eb97d),
-         TOBN(0x5a52fe2e, 0x34d74e31), TOBN(0xa352c310, 0x3bf79ab6),
-         TOBN(0x97ff6c5a, 0xabfeeb8f), TOBN(0xbfbe8fef, 0xf5c97305),
-         TOBN(0xd6081ce6, 0xa7904608), TOBN(0x1f812f3a, 0xc4fca249),
-         TOBN(0x9b24bc9a, 0xb9e5e200), TOBN(0x91022c67, 0x38012ee8),
-         TOBN(0xe83d9c5d, 0x30a713a1), TOBN(0x4876e3f0, 0x84ef0f93),
-         TOBN(0xc9777029, 0xc1fbf928), TOBN(0xef7a6bb3, 0xbce7d2a4),
-         TOBN(0xb8067228, 0xdfa2a659), TOBN(0xd5cd3398, 0xd877a48f),
-         TOBN(0xbea4fd8f, 0x025d0f3f), TOBN(0xd67d2e35, 0x2eae7c2b),
-         TOBN(0x184de7d7, 0xcc5f4394), TOBN(0xb5551b5c, 0x4536e142),
-         TOBN(0x2e89b212, 0xd34aa60a), TOBN(0x14a96fea, 0xf50051d5),
-         TOBN(0x4e21ef74, 0x0d12bb0b), TOBN(0xc522f020, 0x60b9677e),
-         TOBN(0x8b12e467, 0x2df7731d), TOBN(0x39f80382, 0x7b326d31),
-         TOBN(0xdfb8630c, 0x39024a94), TOBN(0xaacb96a8, 0x97319452),
-         TOBN(0xd68a3961, 0xeda3867c), TOBN(0x0c58e2b0, 0x77c4ffca),
-         TOBN(0x3d545d63, 0x4da919fa), TOBN(0xef79b69a, 0xf15e2289),
-         TOBN(0x54bc3d3d, 0x808bab10), TOBN(0xc8ab3007, 0x45f82c37),
-         TOBN(0xc12738b6, 0x7c4a658a), TOBN(0xb3c47639, 0x40e72182),
-         TOBN(0x3b77be46, 0x8798e44f), TOBN(0xdc047df2, 0x17a7f85f),
-         TOBN(0x2439d4c5, 0x5e59d92d), TOBN(0xcedca475, 0xe8e64d8d),
-         TOBN(0xa724cd0d, 0x87ca9b16), TOBN(0x35e4fd59, 0xa5540dfe),
-         TOBN(0xf8c1ff18, 0xe4bcf6b1), TOBN(0x856d6285, 0x295018fa),
-         TOBN(0x433f665c, 0x3263c949), TOBN(0xa6a76dd6, 0xa1f21409),
-         TOBN(0x17d32334, 0xcc7b4f79), TOBN(0xa1d03122, 0x06720e4a),
-         TOBN(0xadb6661d, 0x81d9bed5), TOBN(0xf0d6fb02, 0x11db15d1),
-         TOBN(0x7fd11ad5, 0x1fb747d2), TOBN(0xab50f959, 0x3033762b),
-         TOBN(0x2a7e711b, 0xfbefaf5a), TOBN(0xc7393278, 0x3fef2bbf),
-         TOBN(0xe29fa244, 0x0df6f9be), TOBN(0x9092757b, 0x71efd215),
-         TOBN(0xee60e311, 0x4f3d6fd9), TOBN(0x338542d4, 0x0acfb78b),
-         TOBN(0x44a23f08, 0x38961a0f), TOBN(0x1426eade, 0x986987ca),
-         TOBN(0x36e6ee2e, 0x4a863cc6), TOBN(0x48059420, 0x628b8b79),
-         TOBN(0x30303ad8, 0x7396e1de), TOBN(0x5c8bdc48, 0x38c5aad1),
-         TOBN(0x3e40e11f, 0x5c8f5066), TOBN(0xabd6e768, 0x8d246bbd),
-         TOBN(0x68aa40bb, 0x23330a01), TOBN(0xd23f5ee4, 0xc34eafa0),
-         TOBN(0x3bbee315, 0x5de02c21), TOBN(0x18dd4397, 0xd1d8dd06),
-         TOBN(0x3ba1939a, 0x122d7b44), TOBN(0xe6d3b40a, 0xa33870d6),
-         TOBN(0x8e620f70, 0x1c4fe3f8), TOBN(0xf6bba1a5, 0xd3a50cbf),
-         TOBN(0x4a78bde5, 0xcfc0aee0), TOBN(0x847edc46, 0xc08c50bd),
-         TOBN(0xbaa2439c, 0xad63c9b2), TOBN(0xceb4a728, 0x10fc2acb),
-         TOBN(0xa419e40e, 0x26da033d), TOBN(0x6cc3889d, 0x03e02683),
-         TOBN(0x1cd28559, 0xfdccf725), TOBN(0x0fd7e0f1, 0x8d13d208),
-         TOBN(0x01b9733b, 0x1f0df9d4), TOBN(0x8cc2c5f3, 0xa2b5e4f3),
-         TOBN(0x43053bfa, 0x3a304fd4), TOBN(0x8e87665c, 0x0a9f1aa7),
-         TOBN(0x087f29ec, 0xd73dc965), TOBN(0x15ace455, 0x3e9023db),
-         TOBN(0x2370e309, 0x2bce28b4), TOBN(0xf9723442, 0xb6b1e84a),
-         TOBN(0xbeee662e, 0xb72d9f26), TOBN(0xb19396de, 0xf0e47109),
-         TOBN(0x85b1fa73, 0xe13289d0), TOBN(0x436cf77e, 0x54e58e32),
-         TOBN(0x0ec833b3, 0xe990ef77), TOBN(0x7373e3ed, 0x1b11fc25),
-         TOBN(0xbe0eda87, 0x0fc332ce), TOBN(0xced04970, 0x8d7ea856),
-         TOBN(0xf85ff785, 0x7e977ca0), TOBN(0xb66ee8da, 0xdfdd5d2b),
-         TOBN(0xf5e37950, 0x905af461), TOBN(0x587b9090, 0x966d487c),
-         TOBN(0x6a198a1b, 0x32ba0127), TOBN(0xa7720e07, 0x141615ac),
-         TOBN(0xa23f3499, 0x996ef2f2), TOBN(0xef5f64b4, 0x470bcb3d),
-         TOBN(0xa526a962, 0x92b8c559), TOBN(0x0c14aac0, 0x69740a0f),
-         TOBN(0x0d41a9e3, 0xa6bdc0a5), TOBN(0x97d52106, 0x9c48aef4),
-         TOBN(0xcf16bd30, 0x3e7c253b), TOBN(0xcc834b1a, 0x47fdedc1),
-         TOBN(0x7362c6e5, 0x373aab2e), TOBN(0x264ed85e, 0xc5f590ff),
-         TOBN(0x7a46d9c0, 0x66d41870), TOBN(0xa50c20b1, 0x4787ba09),
-         TOBN(0x185e7e51, 0xe3d44635), TOBN(0xb3b3e080, 0x31e2d8dc),
-         TOBN(0xbed1e558, 0xa179e9d9), TOBN(0x2daa3f79, 0x74a76781),
-         TOBN(0x4372baf2, 0x3a40864f), TOBN(0x46900c54, 0x4fe75cb5),
-         TOBN(0xb95f171e, 0xf76765d0), TOBN(0x4ad726d2, 0x95c87502),
-         TOBN(0x2ec769da, 0x4d7c99bd), TOBN(0x5e2ddd19, 0xc36cdfa8),
-         TOBN(0xc22117fc, 0xa93e6dea), TOBN(0xe8a2583b, 0x93771123),
-         TOBN(0xbe2f6089, 0xfa08a3a2), TOBN(0x4809d5ed, 0x8f0e1112),
-         TOBN(0x3b414aa3, 0xda7a095e), TOBN(0x9049acf1, 0x26f5aadd),
-         TOBN(0x78d46a4d, 0x6be8b84a), TOBN(0xd66b1963, 0xb732b9b3),
-         TOBN(0x5c2ac2a0, 0xde6e9555), TOBN(0xcf52d098, 0xb5bd8770),
-         TOBN(0x15a15fa6, 0x0fd28921), TOBN(0x56ccb81e, 0x8b27536d),
-         TOBN(0x0f0d8ab8, 0x9f4ccbb8), TOBN(0xed5f44d2, 0xdb221729),
-         TOBN(0x43141988, 0x00bed10c), TOBN(0xc94348a4, 0x1d735b8b),
-         TOBN(0x79f3e9c4, 0x29ef8479), TOBN(0x4c13a4e3, 0x614c693f),
-         TOBN(0x32c9af56, 0x8e143a14), TOBN(0xbc517799, 0xe29ac5c4),
-         TOBN(0x05e17992, 0x2774856f), TOBN(0x6e52fb05, 0x6c1bf55f),
-         TOBN(0xaeda4225, 0xe4f19e16), TOBN(0x70f4728a, 0xaf5ccb26),
-         TOBN(0x5d2118d1, 0xb2947f22), TOBN(0xc827ea16, 0x281d6fb9),
-         TOBN(0x8412328d, 0x8cf0eabd), TOBN(0x45ee9fb2, 0x03ef9dcf),
-         TOBN(0x8e700421, 0xbb937d63), TOBN(0xdf8ff2d5, 0xcc4b37a6),
-         TOBN(0xa4c0d5b2, 0x5ced7b68), TOBN(0x6537c1ef, 0xc7308f59),
-         TOBN(0x25ce6a26, 0x3b37f8e8), TOBN(0x170e9a9b, 0xdeebc6ce),
-         TOBN(0xdd037952, 0x8728d72c), TOBN(0x445b0e55, 0x850154bc),
-         TOBN(0x4b7d0e06, 0x83a7337b), TOBN(0x1e3416d4, 0xffecf249),
-         TOBN(0x24840eff, 0x66a2b71f), TOBN(0xd0d9a50a, 0xb37cc26d),
-         TOBN(0xe2198150, 0x6fe28ef7), TOBN(0x3cc5ef16, 0x23324c7f),
-         TOBN(0x220f3455, 0x769b5263), TOBN(0xe2ade2f1, 0xa10bf475),
-         TOBN(0x28cd20fa, 0x458d3671), TOBN(0x1549722c, 0x2dc4847b),
-         TOBN(0x6dd01e55, 0x591941e3), TOBN(0x0e6fbcea, 0x27128ccb),
-         TOBN(0xae1a1e6b, 0x3bef0262), TOBN(0xfa8c472c, 0x8f54e103),
-         TOBN(0x7539c0a8, 0x72c052ec), TOBN(0xd7b27369, 0x5a3490e9),
-         TOBN(0x143fe1f1, 0x71684349), TOBN(0x36b4722e, 0x32e19b97),
-         TOBN(0xdc059227, 0x90980aff), TOBN(0x175c9c88, 0x9e13d674),
-         TOBN(0xa7de5b22, 0x6e6bfdb1), TOBN(0x5ea5b7b2, 0xbedb4b46),
-         TOBN(0xd5570191, 0xd34a6e44), TOBN(0xfcf60d2e, 0xa24ff7e6),
-         TOBN(0x614a392d, 0x677819e1), TOBN(0x7be74c7e, 0xaa5a29e8),
-         TOBN(0xab50fece, 0x63c85f3f), TOBN(0xaca2e2a9, 0x46cab337),
-         TOBN(0x7f700388, 0x122a6fe3), TOBN(0xdb69f703, 0x882a04a8),
-         TOBN(0x9a77935d, 0xcf7aed57), TOBN(0xdf16207c, 0x8d91c86f),
-         TOBN(0x2fca49ab, 0x63ed9998), TOBN(0xa3125c44, 0xa77ddf96),
-         TOBN(0x05dd8a86, 0x24344072), TOBN(0xa023dda2, 0xfec3fb56),
-         TOBN(0x421b41fc, 0x0c743032), TOBN(0x4f2120c1, 0x5e438639),
-         TOBN(0xfb7cae51, 0xc83c1b07), TOBN(0xb2370caa, 0xcac2171a),
-         TOBN(0x2eb2d962, 0x6cc820fb), TOBN(0x59feee5c, 0xb85a44bf),
-         TOBN(0x94620fca, 0x5b6598f0), TOBN(0x6b922cae, 0x7e314051),
-         TOBN(0xff8745ad, 0x106bed4e), TOBN(0x546e71f5, 0xdfa1e9ab),
-         TOBN(0x935c1e48, 0x1ec29487), TOBN(0x9509216c, 0x4d936530),
-         TOBN(0xc7ca3067, 0x85c9a2db), TOBN(0xd6ae5152, 0x6be8606f),
-         TOBN(0x09dbcae6, 0xe14c651d), TOBN(0xc9536e23, 0x9bc32f96),
-         TOBN(0xa90535a9, 0x34521b03), TOBN(0xf39c526c, 0x878756ff),
-         TOBN(0x383172ec, 0x8aedf03c), TOBN(0x20a8075e, 0xefe0c034),
-         TOBN(0xf22f9c62, 0x64026422), TOBN(0x8dd10780, 0x24b9d076),
-         TOBN(0x944c742a, 0x3bef2950), TOBN(0x55b9502e, 0x88a2b00b),
-         TOBN(0xa59e14b4, 0x86a09817), TOBN(0xa39dd3ac, 0x47bb4071),
-         TOBN(0x55137f66, 0x3be0592f), TOBN(0x07fcafd4, 0xc9e63f5b),
-         TOBN(0x963652ee, 0x346eb226), TOBN(0x7dfab085, 0xec2facb7),
-         TOBN(0x273bf2b8, 0x691add26), TOBN(0x30d74540, 0xf2b46c44),
-         TOBN(0x05e8e73e, 0xf2c2d065), TOBN(0xff9b8a00, 0xd42eeac9),
-         TOBN(0x2fcbd205, 0x97209d22), TOBN(0xeb740ffa, 0xde14ea2c),
-         TOBN(0xc71ff913, 0xa8aef518), TOBN(0x7bfc74bb, 0xfff4cfa2),
-         TOBN(0x1716680c, 0xb6b36048), TOBN(0x121b2cce, 0x9ef79af1),
-         TOBN(0xbff3c836, 0xa01eb3d3), TOBN(0x50eb1c6a, 0x5f79077b),
-         TOBN(0xa48c32d6, 0xa004bbcf), TOBN(0x47a59316, 0x7d64f61d),
-         TOBN(0x6068147f, 0x93102016), TOBN(0x12c5f654, 0x94d12576),
-         TOBN(0xefb071a7, 0xc9bc6b91), TOBN(0x7c2da0c5, 0x6e23ea95),
-         TOBN(0xf4fd45b6, 0xd4a1dd5d), TOBN(0x3e7ad9b6, 0x9122b13c),
-         TOBN(0x342ca118, 0xe6f57a48), TOBN(0x1c2e94a7, 0x06f8288f),
-         TOBN(0x99e68f07, 0x5a97d231), TOBN(0x7c80de97, 0x4d838758),
-         TOBN(0xbce0f5d0, 0x05872727), TOBN(0xbe5d95c2, 0x19c4d016),
-         TOBN(0x921d5cb1, 0x9c2492ee), TOBN(0x42192dc1, 0x404d6fb3),
-         TOBN(0x4c84dcd1, 0x32f988d3), TOBN(0xde26d61f, 0xa17b8e85),
-         TOBN(0xc466dcb6, 0x137c7408), TOBN(0x9a38d7b6, 0x36a266da),
-         TOBN(0x7ef5cb06, 0x83bebf1b), TOBN(0xe5cdcbbf, 0x0fd014e3),
-         TOBN(0x30aa376d, 0xf65965a0), TOBN(0x60fe88c2, 0xebb3e95e),
-         TOBN(0x33fd0b61, 0x66ee6f20), TOBN(0x8827dcdb, 0x3f41f0a0),
-         TOBN(0xbf8a9d24, 0x0c56c690), TOBN(0x40265dad, 0xddb7641d),
-         TOBN(0x522b05bf, 0x3a6b662b), TOBN(0x466d1dfe, 0xb1478c9b),
-         TOBN(0xaa616962, 0x1484469b), TOBN(0x0db60549, 0x02df8f9f),
-         TOBN(0xc37bca02, 0x3cb8bf51), TOBN(0x5effe346, 0x21371ce8),
-         TOBN(0xe8f65264, 0xff112c32), TOBN(0x8a9c736d, 0x7b971fb2),
-         TOBN(0xa4f19470, 0x7b75080d), TOBN(0xfc3f2c5a, 0x8839c59b),
-         TOBN(0x1d6c777e, 0x5aeb49c2), TOBN(0xf3db034d, 0xda1addfe),
-         TOBN(0xd76fee5a, 0x5535affc), TOBN(0x0853ac70, 0xb92251fd),
-         TOBN(0x37e3d594, 0x8b2a29d5), TOBN(0x28f1f457, 0x4de00ddb),
-         TOBN(0x8083c1b5, 0xf42c328b), TOBN(0xd8ef1d8f, 0xe493c73b),
-         TOBN(0x96fb6260, 0x41dc61bd), TOBN(0xf74e8a9d, 0x27ee2f8a),
-         TOBN(0x7c605a80, 0x2c946a5d), TOBN(0xeed48d65, 0x3839ccfd),
-         TOBN(0x9894344f, 0x3a29467a), TOBN(0xde81e949, 0xc51eba6d),
-         TOBN(0xdaea066b, 0xa5e5c2f2), TOBN(0x3fc8a614, 0x08c8c7b3),
-         TOBN(0x7adff88f, 0x06d0de9f), TOBN(0xbbc11cf5, 0x3b75ce0a),
-         TOBN(0x9fbb7acc, 0xfbbc87d5), TOBN(0xa1458e26, 0x7badfde2)},
-        {
-            TOBN(0x1cb43668, 0xe039c256), TOBN(0x5f26fb8b, 0x7c17fd5d),
-            TOBN(0xeee426af, 0x79aa062b), TOBN(0x072002d0, 0xd78fbf04),
-            TOBN(0x4c9ca237, 0xe84fb7e3), TOBN(0xb401d8a1, 0x0c82133d),
-            TOBN(0xaaa52592, 0x6d7e4181), TOBN(0xe9430833, 0x73dbb152),
-            TOBN(0xf92dda31, 0xbe24319a), TOBN(0x03f7d28b, 0xe095a8e7),
-            TOBN(0xa52fe840, 0x98782185), TOBN(0x276ddafe, 0x29c24dbc),
-            TOBN(0x80cd5496, 0x1d7a64eb), TOBN(0xe4360889, 0x7f1dbe42),
-            TOBN(0x2f81a877, 0x8438d2d5), TOBN(0x7e4d52a8, 0x85169036),
-            TOBN(0x19e3d5b1, 0x1d59715d), TOBN(0xc7eaa762, 0xd788983e),
-            TOBN(0xe5a730b0, 0xabf1f248), TOBN(0xfbab8084, 0xfae3fd83),
-            TOBN(0x65e50d21, 0x53765b2f), TOBN(0xbdd4e083, 0xfa127f3d),
-            TOBN(0x9cf3c074, 0x397b1b10), TOBN(0x59f8090c, 0xb1b59fd3),
-            TOBN(0x7b15fd9d, 0x615faa8f), TOBN(0x8fa1eb40, 0x968554ed),
-            TOBN(0x7bb4447e, 0x7aa44882), TOBN(0x2bb2d0d1, 0x029fff32),
-            TOBN(0x075e2a64, 0x6caa6d2f), TOBN(0x8eb879de, 0x22e7351b),
-            TOBN(0xbcd5624e, 0x9a506c62), TOBN(0x218eaef0, 0xa87e24dc),
-            TOBN(0x37e56847, 0x44ddfa35), TOBN(0x9ccfc5c5, 0xdab3f747),
-            TOBN(0x9ac1df3f, 0x1ee96cf4), TOBN(0x0c0571a1, 0x3b480b8f),
-            TOBN(0x2fbeb3d5, 0x4b3a7b3c), TOBN(0x35c03669, 0x5dcdbb99),
-            TOBN(0x52a0f5dc, 0xb2415b3a), TOBN(0xd57759b4, 0x4413ed9a),
-            TOBN(0x1fe647d8, 0x3d30a2c5), TOBN(0x0857f77e, 0xf78a81dc),
-            TOBN(0x11d5a334, 0x131a4a9b), TOBN(0xc0a94af9, 0x29d393f5),
-            TOBN(0xbc3a5c0b, 0xdaa6ec1a), TOBN(0xba9fe493, 0x88d2d7ed),
-            TOBN(0xbb4335b4, 0xbb614797), TOBN(0x991c4d68, 0x72f83533),
-            TOBN(0x53258c28, 0xd2f01cb3), TOBN(0x93d6eaa3, 0xd75db0b1),
-            TOBN(0x419a2b0d, 0xe87d0db4), TOBN(0xa1e48f03, 0xd8fe8493),
-            TOBN(0xf747faf6, 0xc508b23a), TOBN(0xf137571a, 0x35d53549),
-            TOBN(0x9f5e58e2, 0xfcf9b838), TOBN(0xc7186cee, 0xa7fd3cf5),
-            TOBN(0x77b868ce, 0xe978a1d3), TOBN(0xe3a68b33, 0x7ab92d04),
-            TOBN(0x51029794, 0x87a5b862), TOBN(0x5f0606c3, 0x3a61d41d),
-            TOBN(0x2814be27, 0x6f9326f1), TOBN(0x2f521c14, 0xc6fe3c2e),
-            TOBN(0x17464d7d, 0xacdf7351), TOBN(0x10f5f9d3, 0x777f7e44),
-            TOBN(0xce8e616b, 0x269fb37d), TOBN(0xaaf73804, 0x7de62de5),
-            TOBN(0xaba11175, 0x4fdd4153), TOBN(0x515759ba, 0x3770b49b),
-            TOBN(0x8b09ebf8, 0xaa423a61), TOBN(0x592245a1, 0xcd41fb92),
-            TOBN(0x1cba8ec1, 0x9b4c8936), TOBN(0xa87e91e3, 0xaf36710e),
-            TOBN(0x1fd84ce4, 0x3d34a2e3), TOBN(0xee3759ce, 0xb43b5d61),
-            TOBN(0x895bc78c, 0x619186c7), TOBN(0xf19c3809, 0xcbb9725a),
-            TOBN(0xc0be21aa, 0xde744b1f), TOBN(0xa7d222b0, 0x60f8056b),
-            TOBN(0x74be6157, 0xb23efe11), TOBN(0x6fab2b4f, 0x0cd68253),
-            TOBN(0xad33ea5f, 0x4bf1d725), TOBN(0x9c1d8ee2, 0x4f6c950f),
-            TOBN(0x544ee78a, 0xa377af06), TOBN(0x54f489bb, 0x94a113e1),
-            TOBN(0x8f11d634, 0x992fb7e8), TOBN(0x0169a7aa, 0xa2a44347),
-            TOBN(0x1d49d4af, 0x95020e00), TOBN(0x95945722, 0xe08e120b),
-            TOBN(0xb6e33878, 0xa4d32282), TOBN(0xe36e029d, 0x48020ae7),
-            TOBN(0xe05847fb, 0x37a9b750), TOBN(0xf876812c, 0xb29e3819),
-            TOBN(0x84ad138e, 0xd23a17f0), TOBN(0x6d7b4480, 0xf0b3950e),
-            TOBN(0xdfa8aef4, 0x2fd67ae0), TOBN(0x8d3eea24, 0x52333af6),
-            TOBN(0x0d052075, 0xb15d5acc), TOBN(0xc6d9c79f, 0xbd815bc4),
-            TOBN(0x8dcafd88, 0xdfa36cf2), TOBN(0x908ccbe2, 0x38aa9070),
-            TOBN(0x638722c4, 0xba35afce), TOBN(0x5a3da8b0, 0xfd6abf0b),
-            TOBN(0x2dce252c, 0xc9c335c1), TOBN(0x84e7f0de, 0x65aa799b),
-            TOBN(0x2101a522, 0xb99a72cb), TOBN(0x06de6e67, 0x87618016),
-            TOBN(0x5ff8c7cd, 0xe6f3653e), TOBN(0x0a821ab5, 0xc7a6754a),
-            TOBN(0x7e3fa52b, 0x7cb0b5a2), TOBN(0xa7fb121c, 0xc9048790),
-            TOBN(0x1a725020, 0x06ce053a), TOBN(0xb490a31f, 0x04e929b0),
-            TOBN(0xe17be47d, 0x62dd61ad), TOBN(0x781a961c, 0x6be01371),
-            TOBN(0x1063bfd3, 0xdae3cbba), TOBN(0x35647406, 0x7f73c9ba),
-            TOBN(0xf50e957b, 0x2736a129), TOBN(0xa6313702, 0xed13f256),
-            TOBN(0x9436ee65, 0x3a19fcc5), TOBN(0xcf2bdb29, 0xe7a4c8b6),
-            TOBN(0xb06b1244, 0xc5f95cd8), TOBN(0xda8c8af0, 0xf4ab95f4),
-            TOBN(0x1bae59c2, 0xb9e5836d), TOBN(0x07d51e7e, 0x3acffffc),
-            TOBN(0x01e15e6a, 0xc2ccbcda), TOBN(0x3bc1923f, 0x8528c3e0),
-            TOBN(0x43324577, 0xa49fead4), TOBN(0x61a1b884, 0x2aa7a711),
-            TOBN(0xf9a86e08, 0x700230ef), TOBN(0x0af585a1, 0xbd19adf8),
-            TOBN(0x7645f361, 0xf55ad8f2), TOBN(0x6e676223, 0x46c3614c),
-            TOBN(0x23cb257c, 0x4e774d3f), TOBN(0x82a38513, 0xac102d1b),
-            TOBN(0x9bcddd88, 0x7b126aa5), TOBN(0xe716998b, 0xeefd3ee4),
-            TOBN(0x4239d571, 0xfb167583), TOBN(0xdd011c78, 0xd16c8f8a),
-            TOBN(0x271c2895, 0x69a27519), TOBN(0x9ce0a3b7, 0xd2d64b6a),
-            TOBN(0x8c977289, 0xd5ec6738), TOBN(0xa3b49f9a, 0x8840ef6b),
-            TOBN(0x808c14c9, 0x9a453419), TOBN(0x5c00295b, 0x0cf0a2d5),
-            TOBN(0x524414fb, 0x1d4bcc76), TOBN(0xb07691d2, 0x459a88f1),
-            TOBN(0x77f43263, 0xf70d110f), TOBN(0x64ada5e0, 0xb7abf9f3),
-            TOBN(0xafd0f94e, 0x5b544cf5), TOBN(0xb4a13a15, 0xfd2713fe),
-            TOBN(0xb99b7d6e, 0x250c74f4), TOBN(0x097f2f73, 0x20324e45),
-            TOBN(0x994b37d8, 0xaffa8208), TOBN(0xc3c31b0b, 0xdc29aafc),
-            TOBN(0x3da74651, 0x7a3a607f), TOBN(0xd8e1b8c1, 0xfe6955d6),
-            TOBN(0x716e1815, 0xc8418682), TOBN(0x541d487f, 0x7dc91d97),
-            TOBN(0x48a04669, 0xc6996982), TOBN(0xf39cab15, 0x83a6502e),
-            TOBN(0x025801a0, 0xe68db055), TOBN(0xf3569758, 0xba3338d5),
-            TOBN(0xb0c8c0aa, 0xee2afa84), TOBN(0x4f6985d3, 0xfb6562d1),
-            TOBN(0x351f1f15, 0x132ed17a), TOBN(0x510ed0b4, 0xc04365fe),
-            TOBN(0xa3f98138, 0xe5b1f066), TOBN(0xbc9d95d6, 0x32df03dc),
-            TOBN(0xa83ccf6e, 0x19abd09e), TOBN(0x0b4097c1, 0x4ff17edb),
-            TOBN(0x58a5c478, 0xd64a06ce), TOBN(0x2ddcc3fd, 0x544a58fd),
-            TOBN(0xd449503d, 0x9e8153b8), TOBN(0x3324fd02, 0x7774179b),
-            TOBN(0xaf5d47c8, 0xdbd9120c), TOBN(0xeb860162, 0x34fa94db),
-            TOBN(0x5817bdd1, 0x972f07f4), TOBN(0xe5579e2e, 0xd27bbceb),
-            TOBN(0x86847a1f, 0x5f11e5a6), TOBN(0xb39ed255, 0x7c3cf048),
-            TOBN(0xe1076417, 0xa2f62e55), TOBN(0x6b9ab38f, 0x1bcf82a2),
-            TOBN(0x4bb7c319, 0x7aeb29f9), TOBN(0xf6d17da3, 0x17227a46),
-            TOBN(0xab53ddbd, 0x0f968c00), TOBN(0xa03da7ec, 0x000c880b),
-            TOBN(0x7b239624, 0x6a9ad24d), TOBN(0x612c0401, 0x01ec60d0),
-            TOBN(0x70d10493, 0x109f5df1), TOBN(0xfbda4030, 0x80af7550),
-            TOBN(0x30b93f95, 0xc6b9a9b3), TOBN(0x0c74ec71, 0x007d9418),
-            TOBN(0x94175564, 0x6edb951f), TOBN(0x5f4a9d78, 0x7f22c282),
-            TOBN(0xb7870895, 0xb38d1196), TOBN(0xbc593df3, 0xa228ce7c),
-            TOBN(0xc78c5bd4, 0x6af3641a), TOBN(0x7802200b, 0x3d9b3dcc),
-            TOBN(0x0dc73f32, 0x8be33304), TOBN(0x847ed87d, 0x61ffb79a),
-            TOBN(0xf85c974e, 0x6d671192), TOBN(0x1e14100a, 0xde16f60f),
-            TOBN(0x45cb0d5a, 0x95c38797), TOBN(0x18923bba, 0x9b022da4),
-            TOBN(0xef2be899, 0xbbe7e86e), TOBN(0x4a1510ee, 0x216067bf),
-            TOBN(0xd98c8154, 0x84d5ce3e), TOBN(0x1af777f0, 0xf92a2b90),
-            TOBN(0x9fbcb400, 0x4ef65724), TOBN(0x3e04a4c9, 0x3c0ca6fe),
-            TOBN(0xfb3e2cb5, 0x55002994), TOBN(0x1f3a93c5, 0x5363ecab),
-            TOBN(0x1fe00efe, 0x3923555b), TOBN(0x744bedd9, 0x1e1751ea),
-            TOBN(0x3fb2db59, 0x6ab69357), TOBN(0x8dbd7365, 0xf5e6618b),
-            TOBN(0x99d53099, 0xdf1ea40e), TOBN(0xb3f24a0b, 0x57d61e64),
-            TOBN(0xd088a198, 0x596eb812), TOBN(0x22c8361b, 0x5762940b),
-            TOBN(0x66f01f97, 0xf9c0d95c), TOBN(0x88461172, 0x8e43cdae),
-            TOBN(0x11599a7f, 0xb72b15c3), TOBN(0x135a7536, 0x420d95cc),
-            TOBN(0x2dcdf0f7, 0x5f7ae2f6), TOBN(0x15fc6e1d, 0xd7fa6da2),
-            TOBN(0x81ca829a, 0xd1d441b6), TOBN(0x84c10cf8, 0x04a106b6),
-            TOBN(0xa9b26c95, 0xa73fbbd0), TOBN(0x7f24e0cb, 0x4d8f6ee8),
-            TOBN(0x48b45937, 0x1e25a043), TOBN(0xf8a74fca, 0x036f3dfe),
-            TOBN(0x1ed46585, 0xc9f84296), TOBN(0x7fbaa8fb, 0x3bc278b0),
-            TOBN(0xa8e96cd4, 0x6c4fcbd0), TOBN(0x940a1202, 0x73b60a5f),
-            TOBN(0x34aae120, 0x55a4aec8), TOBN(0x550e9a74, 0xdbd742f0),
-            TOBN(0x794456d7, 0x228c68ab), TOBN(0x492f8868, 0xa4e25ec6),
-            TOBN(0x682915ad, 0xb2d8f398), TOBN(0xf13b51cc, 0x5b84c953),
-            TOBN(0xcda90ab8, 0x5bb917d6), TOBN(0x4b615560, 0x4ea3dee1),
-            TOBN(0x578b4e85, 0x0a52c1c8), TOBN(0xeab1a695, 0x20b75fc4),
-            TOBN(0x60c14f3c, 0xaa0bb3c6), TOBN(0x220f448a, 0xb8216094),
-            TOBN(0x4fe7ee31, 0xb0e63d34), TOBN(0xf4600572, 0xa9e54fab),
-            TOBN(0xc0493334, 0xd5e7b5a4), TOBN(0x8589fb92, 0x06d54831),
-            TOBN(0xaa70f5cc, 0x6583553a), TOBN(0x0879094a, 0xe25649e5),
-            TOBN(0xcc904507, 0x10044652), TOBN(0xebb0696d, 0x02541c4f),
-            TOBN(0x5a171fde, 0xb9718710), TOBN(0x38f1bed8, 0xf374a9f5),
-            TOBN(0xc8c582e1, 0xba39bdc1), TOBN(0xfc457b0a, 0x908cc0ce),
-            TOBN(0x9a187fd4, 0x883841e2), TOBN(0x8ec25b39, 0x38725381),
-            TOBN(0x2553ed05, 0x96f84395), TOBN(0x095c7661, 0x6f6c6897),
-            TOBN(0x917ac85c, 0x4bdc5610), TOBN(0xb2885fe4, 0x179eb301),
-            TOBN(0x5fc65547, 0x8b78bdcc), TOBN(0x4a9fc893, 0xe59e4699),
-            TOBN(0xbb7ff0cd, 0x3ce299af), TOBN(0x195be9b3, 0xadf38b20),
-            TOBN(0x6a929c87, 0xd38ddb8f), TOBN(0x55fcc99c, 0xb21a51b9),
-            TOBN(0x2b695b4c, 0x721a4593), TOBN(0xed1e9a15, 0x768eaac2),
-            TOBN(0xfb63d71c, 0x7489f914), TOBN(0xf98ba31c, 0x78118910),
-            TOBN(0x80291373, 0x9b128eb4), TOBN(0x7801214e, 0xd448af4a),
-            TOBN(0xdbd2e22b, 0x55418dd3), TOBN(0xeffb3c0d, 0xd3998242),
-            TOBN(0xdfa6077c, 0xc7bf3827), TOBN(0xf2165bcb, 0x47f8238f),
-            TOBN(0xfe37cf68, 0x8564d554), TOBN(0xe5f825c4, 0x0a81fb98),
-            TOBN(0x43cc4f67, 0xffed4d6f), TOBN(0xbc609578, 0xb50a34b0),
-            TOBN(0x8aa8fcf9, 0x5041faf1), TOBN(0x5659f053, 0x651773b6),
-            TOBN(0xe87582c3, 0x6044d63b), TOBN(0xa6089409, 0x0cdb0ca0),
-            TOBN(0x8c993e0f, 0xbfb2bcf6), TOBN(0xfc64a719, 0x45985cfc),
-            TOBN(0x15c4da80, 0x83dbedba), TOBN(0x804ae112, 0x2be67df7),
-            TOBN(0xda4c9658, 0xa23defde), TOBN(0x12002ddd, 0x5156e0d3),
-            TOBN(0xe68eae89, 0x5dd21b96), TOBN(0x8b99f28b, 0xcf44624d),
-            TOBN(0x0ae00808, 0x1ec8897a), TOBN(0xdd0a9303, 0x6712f76e),
-            TOBN(0x96237522, 0x4e233de4), TOBN(0x192445b1, 0x2b36a8a5),
-            TOBN(0xabf9ff74, 0x023993d9), TOBN(0x21f37bf4, 0x2aad4a8f),
-            TOBN(0x340a4349, 0xf8bd2bbd), TOBN(0x1d902cd9, 0x4868195d),
-            TOBN(0x3d27bbf1, 0xe5fdb6f1), TOBN(0x7a5ab088, 0x124f9f1c),
-            TOBN(0xc466ab06, 0xf7a09e03), TOBN(0x2f8a1977, 0x31f2c123),
-            TOBN(0xda355dc7, 0x041b6657), TOBN(0xcb840d12, 0x8ece2a7c),
-            TOBN(0xb600ad9f, 0x7db32675), TOBN(0x78fea133, 0x07a06f1b),
-            TOBN(0x5d032269, 0xb31f6094), TOBN(0x07753ef5, 0x83ec37aa),
-            TOBN(0x03485aed, 0x9c0bea78), TOBN(0x41bb3989, 0xbc3f4524),
-            TOBN(0x09403761, 0x697f726d), TOBN(0x6109beb3, 0xdf394820),
-            TOBN(0x804111ea, 0x3b6d1145), TOBN(0xb6271ea9, 0xa8582654),
-            TOBN(0x619615e6, 0x24e66562), TOBN(0xa2554945, 0xd7b6ad9c),
-            TOBN(0xd9c4985e, 0x99bfe35f), TOBN(0x9770ccc0, 0x7b51cdf6),
-            TOBN(0x7c327013, 0x92881832), TOBN(0x8777d45f, 0x286b26d1),
-            TOBN(0x9bbeda22, 0xd847999d), TOBN(0x03aa33b6, 0xc3525d32),
-            TOBN(0x4b7b96d4, 0x28a959a1), TOBN(0xbb3786e5, 0x31e5d234),
-            TOBN(0xaeb5d3ce, 0x6961f247), TOBN(0x20aa85af, 0x02f93d3f),
-            TOBN(0x9cd1ad3d, 0xd7a7ae4f), TOBN(0xbf6688f0, 0x781adaa8),
-            TOBN(0xb1b40e86, 0x7469cead), TOBN(0x1904c524, 0x309fca48),
-            TOBN(0x9b7312af, 0x4b54bbc7), TOBN(0xbe24bf8f, 0x593affa2),
-            TOBN(0xbe5e0790, 0xbd98764b), TOBN(0xa0f45f17, 0xa26e299e),
-            TOBN(0x4af0d2c2, 0x6b8fe4c7), TOBN(0xef170db1, 0x8ae8a3e6),
-            TOBN(0x0e8d61a0, 0x29e0ccc1), TOBN(0xcd53e87e, 0x60ad36ca),
-            TOBN(0x328c6623, 0xc8173822), TOBN(0x7ee1767d, 0xa496be55),
-            TOBN(0x89f13259, 0x648945af), TOBN(0x9e45a5fd, 0x25c8009c),
-            TOBN(0xaf2febd9, 0x1f61ab8c), TOBN(0x43f6bc86, 0x8a275385),
-            TOBN(0x87792348, 0xf2142e79), TOBN(0x17d89259, 0xc6e6238a),
-            TOBN(0x7536d2f6, 0x4a839d9b), TOBN(0x1f428fce, 0x76a1fbdc),
-            TOBN(0x1c109601, 0x0db06dfe), TOBN(0xbfc16bc1, 0x50a3a3cc),
-            TOBN(0xf9cbd9ec, 0x9b30f41b), TOBN(0x5b5da0d6, 0x00138cce),
-            TOBN(0xec1d0a48, 0x56ef96a7), TOBN(0xb47eb848, 0x982bf842),
-            TOBN(0x66deae32, 0xec3f700d), TOBN(0x4e43c42c, 0xaa1181e0),
-            TOBN(0xa1d72a31, 0xd1a4aa2a), TOBN(0x440d4668, 0xc004f3ce),
-            TOBN(0x0d6a2d3b, 0x45fe8a7a), TOBN(0x820e52e2, 0xfb128365),
-            TOBN(0x29ac5fcf, 0x25e51b09), TOBN(0x180cd2bf, 0x2023d159),
-            TOBN(0xa9892171, 0xa1ebf90e), TOBN(0xf97c4c87, 0x7c132181),
-            TOBN(0x9f1dc724, 0xc03dbb7e), TOBN(0xae043765, 0x018cbbe4),
-            TOBN(0xfb0b2a36, 0x0767d153), TOBN(0xa8e2f4d6, 0x249cbaeb),
-            TOBN(0x172a5247, 0xd95ea168), TOBN(0x1758fada, 0x2970764a),
-            TOBN(0xac803a51, 0x1d978169), TOBN(0x299cfe2e, 0xde77e01b),
-            TOBN(0x652a1e17, 0xb0a98927), TOBN(0x2e26e1d1, 0x20014495),
-            TOBN(0x7ae0af9f, 0x7175b56a), TOBN(0xc2e22a80, 0xd64b9f95),
-            TOBN(0x4d0ff9fb, 0xd90a060a), TOBN(0x496a27db, 0xbaf38085),
-            TOBN(0x32305401, 0xda776bcf), TOBN(0xb8cdcef6, 0x725f209e),
-            TOBN(0x61ba0f37, 0x436a0bba), TOBN(0x263fa108, 0x76860049),
-            TOBN(0x92beb98e, 0xda3542cf), TOBN(0xa2d4d14a, 0xd5849538),
-            TOBN(0x989b9d68, 0x12e9a1bc), TOBN(0x61d9075c, 0x5f6e3268),
-            TOBN(0x352c6aa9, 0x99ace638), TOBN(0xde4e4a55, 0x920f43ff),
-            TOBN(0xe5e4144a, 0xd673c017), TOBN(0x667417ae, 0x6f6e05ea),
-            TOBN(0x613416ae, 0xdcd1bd56), TOBN(0x5eb36201, 0x86693711),
-            TOBN(0x2d7bc504, 0x3a1aa914), TOBN(0x175a1299, 0x76dc5975),
-            TOBN(0xe900e0f2, 0x3fc8125c), TOBN(0x569ef68c, 0x11198875),
-            TOBN(0x9012db63, 0x63a113b4), TOBN(0xe3bd3f56, 0x98835766),
-            TOBN(0xa5c94a52, 0x76412dea), TOBN(0xad9e2a09, 0xaa735e5c),
-            TOBN(0x405a984c, 0x508b65e9), TOBN(0xbde4a1d1, 0x6df1a0d1),
-            TOBN(0x1a9433a1, 0xdfba80da), TOBN(0xe9192ff9, 0x9440ad2e),
-            TOBN(0x9f649696, 0x5099fe92), TOBN(0x25ddb65c, 0x0b27a54a),
-            TOBN(0x178279dd, 0xc590da61), TOBN(0x5479a999, 0xfbde681a),
-            TOBN(0xd0e84e05, 0x013fe162), TOBN(0xbe11dc92, 0x632d471b),
-            TOBN(0xdf0b0c45, 0xfc0e089f), TOBN(0x04fb15b0, 0x4c144025),
-            TOBN(0xa61d5fc2, 0x13c99927), TOBN(0xa033e9e0, 0x3de2eb35),
-            TOBN(0xf8185d5c, 0xb8dacbb4), TOBN(0x9a88e265, 0x8644549d),
-            TOBN(0xf717af62, 0x54671ff6), TOBN(0x4bd4241b, 0x5fa58603),
-            TOBN(0x06fba40b, 0xe67773c0), TOBN(0xc1d933d2, 0x6a2847e9),
-            TOBN(0xf4f5acf3, 0x689e2c70), TOBN(0x92aab0e7, 0x46bafd31),
-            TOBN(0x798d76aa, 0x3473f6e5), TOBN(0xcc6641db, 0x93141934),
-            TOBN(0xcae27757, 0xd31e535e), TOBN(0x04cc43b6, 0x87c2ee11),
-            TOBN(0x8d1f9675, 0x2e029ffa), TOBN(0xc2150672, 0xe4cc7a2c),
-            TOBN(0x3b03c1e0, 0x8d68b013), TOBN(0xa9d6816f, 0xedf298f3),
-            TOBN(0x1bfbb529, 0xa2804464), TOBN(0x95a52fae, 0x5db22125),
-            TOBN(0x55b32160, 0x0e1cb64e), TOBN(0x004828f6, 0x7e7fc9fe),
-            TOBN(0x13394b82, 0x1bb0fb93), TOBN(0xb6293a2d, 0x35f1a920),
-            TOBN(0xde35ef21, 0xd145d2d9), TOBN(0xbe6225b3, 0xbb8fa603),
-            TOBN(0x00fc8f6b, 0x32cf252d), TOBN(0xa28e52e6, 0x117cf8c2),
-            TOBN(0x9d1dc89b, 0x4c371e6d), TOBN(0xcebe0675, 0x36ef0f28),
-            TOBN(0x5de05d09, 0xa4292f81), TOBN(0xa8303593, 0x353e3083),
-            TOBN(0xa1715b0a, 0x7e37a9bb), TOBN(0x8c56f61e, 0x2b8faec3),
-            TOBN(0x52507431, 0x33c9b102), TOBN(0x0130cefc, 0xa44431f0),
-            TOBN(0x56039fa0, 0xbd865cfb), TOBN(0x4b03e578, 0xbc5f1dd7),
-            TOBN(0x40edf2e4, 0xbabe7224), TOBN(0xc752496d, 0x3a1988f6),
-            TOBN(0xd1572d3b, 0x564beb6b), TOBN(0x0db1d110, 0x39a1c608),
-            TOBN(0x568d1934, 0x16f60126), TOBN(0x05ae9668, 0xf354af33),
-            TOBN(0x19de6d37, 0xc92544f2), TOBN(0xcc084353, 0xa35837d5),
-            TOBN(0xcbb6869c, 0x1a514ece), TOBN(0xb633e728, 0x2e1d1066),
-            TOBN(0xf15dd69f, 0x936c581c), TOBN(0x96e7b8ce, 0x7439c4f9),
-            TOBN(0x5e676f48, 0x2e448a5b), TOBN(0xb2ca7d5b, 0xfd916bbb),
-            TOBN(0xd55a2541, 0xf5024025), TOBN(0x47bc5769, 0xe4c2d937),
-            TOBN(0x7d31b92a, 0x0362189f), TOBN(0x83f3086e, 0xef7816f9),
-            TOBN(0xf9f46d94, 0xb587579a), TOBN(0xec2d22d8, 0x30e76c5f),
-            TOBN(0x27d57461, 0xb000ffcf), TOBN(0xbb7e65f9, 0x364ffc2c),
-            TOBN(0x7c7c9477, 0x6652a220), TOBN(0x61618f89, 0xd696c981),
-            TOBN(0x5021701d, 0x89effff3), TOBN(0xf2c8ff8e, 0x7c314163),
-            TOBN(0x2da413ad, 0x8efb4d3e), TOBN(0x937b5adf, 0xce176d95),
-            TOBN(0x22867d34, 0x2a67d51c), TOBN(0x262b9b10, 0x18eb3ac9),
-            TOBN(0x4e314fe4, 0xc43ff28b), TOBN(0x76476627, 0x6a664e7a),
-            TOBN(0x3e90e40b, 0xb7a565c2), TOBN(0x8588993a, 0xc1acf831),
-            TOBN(0xd7b501d6, 0x8f938829), TOBN(0x996627ee, 0x3edd7d4c),
-            TOBN(0x37d44a62, 0x90cd34c7), TOBN(0xa8327499, 0xf3833e8d),
-            TOBN(0x2e18917d, 0x4bf50353), TOBN(0x85dd726b, 0x556765fb),
-            TOBN(0x54fe65d6, 0x93d5ab66), TOBN(0x3ddbaced, 0x915c25fe),
-            TOBN(0xa799d9a4, 0x12f22e85), TOBN(0xe2a24867, 0x6d06f6bc),
-            TOBN(0xf4f1ee56, 0x43ca1637), TOBN(0xfda2828b, 0x61ece30a),
-            TOBN(0x758c1a3e, 0xa2dee7a6), TOBN(0xdcde2f3c, 0x734b2284),
-            TOBN(0xaba445d2, 0x4eaba6ad), TOBN(0x35aaf668, 0x76cee0a7),
-            TOBN(0x7e0b04a9, 0xe5aa049a), TOBN(0xe74083ad, 0x91103e84),
-            TOBN(0xbeb183ce, 0x40afecc3), TOBN(0x6b89de9f, 0xea043f7a),
-        },
-        {TOBN(0x0e299d23, 0xfe67ba66), TOBN(0x91450760, 0x93cf2f34),
-         TOBN(0xf45b5ea9, 0x97fcf913), TOBN(0x5be00843, 0x8bd7ddda),
-         TOBN(0x358c3e05, 0xd53ff04d), TOBN(0xbf7ccdc3, 0x5de91ef7),
-         TOBN(0xad684dbf, 0xb69ec1a0), TOBN(0x367e7cf2, 0x801fd997),
-         TOBN(0x0ca1f3b7, 0xb0dc8595), TOBN(0x27de4608, 0x9f1d9f2e),
-         TOBN(0x1af3bf39, 0xbadd82a7), TOBN(0x79356a79, 0x65862448),
-         TOBN(0xc0602345, 0xf5f9a052), TOBN(0x1a8b0f89, 0x139a42f9),
-         TOBN(0xb53eee42, 0x844d40fc), TOBN(0x93b0bfe5, 0x4e5b6368),
-         TOBN(0x5434dd02, 0xc024789c), TOBN(0x90dca9ea, 0x41b57bfc),
-         TOBN(0x8aa898e2, 0x243398df), TOBN(0xf607c834, 0x894a94bb),
-         TOBN(0xbb07be97, 0xc2c99b76), TOBN(0x6576ba67, 0x18c29302),
-         TOBN(0x3d79efcc, 0xe703a88c), TOBN(0xf259ced7, 0xb6a0d106),
-         TOBN(0x0f893a5d, 0xc8de610b), TOBN(0xe8c515fb, 0x67e223ce),
-         TOBN(0x7774bfa6, 0x4ead6dc5), TOBN(0x89d20f95, 0x925c728f),
-         TOBN(0x7a1e0966, 0x098583ce), TOBN(0xa2eedb94, 0x93f2a7d7),
-         TOBN(0x1b282097, 0x4c304d4a), TOBN(0x0842e3da, 0xc077282d),
-         TOBN(0xe4d972a3, 0x3b9e2d7b), TOBN(0x7cc60b27, 0xc48218ff),
-         TOBN(0x8fc70838, 0x84149d91), TOBN(0x5c04346f, 0x2f461ecc),
-         TOBN(0xebe9fdf2, 0x614650a9), TOBN(0x5e35b537, 0xc1f666ac),
-         TOBN(0x645613d1, 0x88babc83), TOBN(0x88cace3a, 0xc5e1c93e),
-         TOBN(0x209ca375, 0x3de92e23), TOBN(0xccb03cc8, 0x5fbbb6e3),
-         TOBN(0xccb90f03, 0xd7b1487e), TOBN(0xfa9c2a38, 0xc710941f),
-         TOBN(0x756c3823, 0x6724ceed), TOBN(0x3a902258, 0x192d0323),
-         TOBN(0xb150e519, 0xea5e038e), TOBN(0xdcba2865, 0xc7427591),
-         TOBN(0xe549237f, 0x78890732), TOBN(0xc443bef9, 0x53fcb4d9),
-         TOBN(0x9884d8a6, 0xeb3480d6), TOBN(0x8a35b6a1, 0x3048b186),
-         TOBN(0xb4e44716, 0x65e9a90a), TOBN(0x45bf380d, 0x653006c0),
-         TOBN(0x8f3f820d, 0x4fe9ae3b), TOBN(0x244a35a0, 0x979a3b71),
-         TOBN(0xa1010e9d, 0x74cd06ff), TOBN(0x9c17c7df, 0xaca3eeac),
-         TOBN(0x74c86cd3, 0x8063aa2b), TOBN(0x8595c4b3, 0x734614ff),
-         TOBN(0xa3de00ca, 0x990f62cc), TOBN(0xd9bed213, 0xca0c3be5),
-         TOBN(0x7886078a, 0xdf8ce9f5), TOBN(0xddb27ce3, 0x5cd44444),
-         TOBN(0xed374a66, 0x58926ddd), TOBN(0x138b2d49, 0x908015b8),
-         TOBN(0x886c6579, 0xde1f7ab8), TOBN(0x888b9aa0, 0xc3020b7a),
-         TOBN(0xd3ec034e, 0x3a96e355), TOBN(0xba65b0b8, 0xf30fbe9a),
-         TOBN(0x064c8e50, 0xff21367a), TOBN(0x1f508ea4, 0x0b04b46e),
-         TOBN(0x98561a49, 0x747c866c), TOBN(0xbbb1e5fe, 0x0518a062),
-         TOBN(0x20ff4e8b, 0xecdc3608), TOBN(0x7f55cded, 0x20184027),
-         TOBN(0x8d73ec95, 0xf38c85f0), TOBN(0x5b589fdf, 0x8bc3b8c3),
-         TOBN(0xbe95dd98, 0x0f12b66f), TOBN(0xf5bd1a09, 0x0e338e01),
-         TOBN(0x65163ae5, 0x5e915918), TOBN(0x6158d6d9, 0x86f8a46b),
-         TOBN(0x8466b538, 0xeeebf99c), TOBN(0xca8761f6, 0xbca477ef),
-         TOBN(0xaf3449c2, 0x9ebbc601), TOBN(0xef3b0f41, 0xe0c3ae2f),
-         TOBN(0xaa6c577d, 0x5de63752), TOBN(0xe9166601, 0x64682a51),
-         TOBN(0x5a3097be, 0xfc15aa1e), TOBN(0x40d12548, 0xb54b0745),
-         TOBN(0x5bad4706, 0x519a5f12), TOBN(0xed03f717, 0xa439dee6),
-         TOBN(0x0794bb6c, 0x4a02c499), TOBN(0xf725083d, 0xcffe71d2),
-         TOBN(0x2cad7519, 0x0f3adcaf), TOBN(0x7f68ea1c, 0x43729310),
-         TOBN(0xe747c8c7, 0xb7ffd977), TOBN(0xec104c35, 0x80761a22),
-         TOBN(0x8395ebaf, 0x5a3ffb83), TOBN(0xfb3261f4, 0xe4b63db7),
-         TOBN(0x53544960, 0xd883e544), TOBN(0x13520d70, 0x8cc2eeb8),
-         TOBN(0x08f6337b, 0xd3d65f99), TOBN(0x83997db2, 0x781cf95b),
-         TOBN(0xce6ff106, 0x0dbd2c01), TOBN(0x4f8eea6b, 0x1f9ce934),
-         TOBN(0x546f7c4b, 0x0e993921), TOBN(0x6236a324, 0x5e753fc7),
-         TOBN(0x65a41f84, 0xa16022e9), TOBN(0x0c18d878, 0x43d1dbb2),
-         TOBN(0x73c55640, 0x2d4cef9c), TOBN(0xa0428108, 0x70444c74),
-         TOBN(0x68e4f15e, 0x9afdfb3c), TOBN(0x49a56143, 0x5bdfb6df),
-         TOBN(0xa9bc1bd4, 0x5f823d97), TOBN(0xbceb5970, 0xea111c2a),
-         TOBN(0x366b455f, 0xb269bbc4), TOBN(0x7cd85e1e, 0xe9bc5d62),
-         TOBN(0xc743c41c, 0x4f18b086), TOBN(0xa4b40990, 0x95294fb9),
-         TOBN(0x9c7c581d, 0x26ee8382), TOBN(0xcf17dcc5, 0x359d638e),
-         TOBN(0xee8273ab, 0xb728ae3d), TOBN(0x1d112926, 0xf821f047),
-         TOBN(0x11498477, 0x50491a74), TOBN(0x687fa761, 0xfde0dfb9),
-         TOBN(0x2c258022, 0x7ea435ab), TOBN(0x6b8bdb94, 0x91ce7e3f),
-         TOBN(0x4c5b5dc9, 0x3bf834aa), TOBN(0x04371819, 0x4f6c7e4b),
-         TOBN(0xc284e00a, 0x3736bcad), TOBN(0x0d881118, 0x21ae8f8d),
-         TOBN(0xf9cf0f82, 0xf48c8e33), TOBN(0xa11fd075, 0xa1bf40db),
-         TOBN(0xdceab0de, 0xdc2733e5), TOBN(0xc560a8b5, 0x8e986bd7),
-         TOBN(0x48dd1fe2, 0x3929d097), TOBN(0x3885b290, 0x92f188f1),
-         TOBN(0x0f2ae613, 0xda6fcdac), TOBN(0x9054303e, 0xb662a46c),
-         TOBN(0xb6871e44, 0x0738042a), TOBN(0x98e6a977, 0xbdaf6449),
-         TOBN(0xd8bc0650, 0xd1c9df1b), TOBN(0xef3d6451, 0x36e098f9),
-         TOBN(0x03fbae82, 0xb6d72d28), TOBN(0x77ca9db1, 0xf5d84080),
-         TOBN(0x8a112cff, 0xa58efc1c), TOBN(0x518d761c, 0xc564cb4a),
-         TOBN(0x69b5740e, 0xf0d1b5ce), TOBN(0x717039cc, 0xe9eb1785),
-         TOBN(0x3fe29f90, 0x22f53382), TOBN(0x8e54ba56, 0x6bc7c95c),
-         TOBN(0x9c806d8a, 0xf7f91d0f), TOBN(0x3b61b0f1, 0xa82a5728),
-         TOBN(0x4640032d, 0x94d76754), TOBN(0x273eb5de, 0x47d834c6),
-         TOBN(0x2988abf7, 0x7b4e4d53), TOBN(0xb7ce66bf, 0xde401777),
-         TOBN(0x9fba6b32, 0x715071b3), TOBN(0x82413c24, 0xad3a1a98),
-         TOBN(0x5b7fc8c4, 0xe0e8ad93), TOBN(0xb5679aee, 0x5fab868d),
-         TOBN(0xb1f9d2fa, 0x2b3946f3), TOBN(0x458897dc, 0x5685b50a),
-         TOBN(0x1e98c930, 0x89d0caf3), TOBN(0x39564c5f, 0x78642e92),
-         TOBN(0x1b77729a, 0x0dbdaf18), TOBN(0xf9170722, 0x579e82e6),
-         TOBN(0x680c0317, 0xe4515fa5), TOBN(0xf85cff84, 0xfb0c790f),
-         TOBN(0xc7a82aab, 0x6d2e0765), TOBN(0x7446bca9, 0x35c82b32),
-         TOBN(0x5de607aa, 0x6d63184f), TOBN(0x7c1a46a8, 0x262803a6),
-         TOBN(0xd218313d, 0xaebe8035), TOBN(0x92113ffd, 0xc73c51f8),
-         TOBN(0x4b38e083, 0x12e7e46c), TOBN(0x69d0a37a, 0x56126bd5),
-         TOBN(0xfb3f324b, 0x73c07e04), TOBN(0xa0c22f67, 0x8fda7267),
-         TOBN(0x8f2c0051, 0x4d2c7d8f), TOBN(0xbc45ced3, 0xcbe2cae5),
-         TOBN(0xe1c6cf07, 0xa8f0f277), TOBN(0xbc392312, 0x1eb99a98),
-         TOBN(0x75537b7e, 0x3cc8ac85), TOBN(0x8d725f57, 0xdd02753b),
-         TOBN(0xfd05ff64, 0xb737df2f), TOBN(0x55fe8712, 0xf6d2531d),
-         TOBN(0x57ce04a9, 0x6ab6b01c), TOBN(0x69a02a89, 0x7cd93724),
-         TOBN(0x4f82ac35, 0xcf86699b), TOBN(0x8242d3ad, 0x9cb4b232),
-         TOBN(0x713d0f65, 0xd62105e5), TOBN(0xbb222bfa, 0x2d29be61),
-         TOBN(0xf2f9a79e, 0x6cfbef09), TOBN(0xfc24d8d3, 0xd5d6782f),
-         TOBN(0x5db77085, 0xd4129967), TOBN(0xdb81c3cc, 0xdc3c2a43),
-         TOBN(0x9d655fc0, 0x05d8d9a3), TOBN(0x3f5d057a, 0x54298026),
-         TOBN(0x1157f56d, 0x88c54694), TOBN(0xb26baba5, 0x9b09573e),
-         TOBN(0x2cab03b0, 0x22adffd1), TOBN(0x60a412c8, 0xdd69f383),
-         TOBN(0xed76e98b, 0x54b25039), TOBN(0xd4ee67d3, 0x687e714d),
-         TOBN(0x87739648, 0x7b00b594), TOBN(0xce419775, 0xc9ef709b),
-         TOBN(0x40f76f85, 0x1c203a40), TOBN(0x30d352d6, 0xeafd8f91),
-         TOBN(0xaf196d3d, 0x95578dd2), TOBN(0xea4bb3d7, 0x77cc3f3d),
-         TOBN(0x42a5bd03, 0xb98e782b), TOBN(0xac958c40, 0x0624920d),
-         TOBN(0xb838134c, 0xfc56fcc8), TOBN(0x86ec4ccf, 0x89572e5e),
-         TOBN(0x69c43526, 0x9be47be0), TOBN(0x323b7dd8, 0xcb28fea1),
-         TOBN(0xfa5538ba, 0x3a6c67e5), TOBN(0xef921d70, 0x1d378e46),
-         TOBN(0xf92961fc, 0x3c4b880e), TOBN(0x3f6f914e, 0x98940a67),
-         TOBN(0xa990eb0a, 0xfef0ff39), TOBN(0xa6c2920f, 0xf0eeff9c),
-         TOBN(0xca804166, 0x51b8d9a3), TOBN(0x42531bc9, 0x0ffb0db1),
-         TOBN(0x72ce4718, 0xaa82e7ce), TOBN(0x6e199913, 0xdf574741),
-         TOBN(0xd5f1b13d, 0xd5d36946), TOBN(0x8255dc65, 0xf68f0194),
-         TOBN(0xdc9df4cd, 0x8710d230), TOBN(0x3453c20f, 0x138c1988),
-         TOBN(0x9af98dc0, 0x89a6ef01), TOBN(0x4dbcc3f0, 0x9857df85),
-         TOBN(0x34805601, 0x5c1ad924), TOBN(0x40448da5, 0xd0493046),
-         TOBN(0xf629926d, 0x4ee343e2), TOBN(0x6343f1bd, 0x90e8a301),
-         TOBN(0xefc93491, 0x40815b3f), TOBN(0xf882a423, 0xde8f66fb),
-         TOBN(0x3a12d5f4, 0xe7db9f57), TOBN(0x7dfba38a, 0x3c384c27),
-         TOBN(0x7a904bfd, 0x6fc660b1), TOBN(0xeb6c5db3, 0x2773b21c),
-         TOBN(0xc350ee66, 0x1cdfe049), TOBN(0x9baac0ce, 0x44540f29),
-         TOBN(0xbc57b6ab, 0xa5ec6aad), TOBN(0x167ce8c3, 0x0a7c1baa),
-         TOBN(0xb23a03a5, 0x53fb2b56), TOBN(0x6ce141e7, 0x4e057f78),
-         TOBN(0x796525c3, 0x89e490d9), TOBN(0x0bc95725, 0xa31a7e75),
-         TOBN(0x1ec56791, 0x1220fd06), TOBN(0x716e3a3c, 0x408b0bd6),
-         TOBN(0x31cd6bf7, 0xe8ebeba9), TOBN(0xa7326ca6, 0xbee6b670),
-         TOBN(0x3d9f851c, 0xcd090c43), TOBN(0x561e8f13, 0xf12c3988),
-         TOBN(0x50490b6a, 0x904b7be4), TOBN(0x61690ce1, 0x0410737b),
-         TOBN(0x299e9a37, 0x0f009052), TOBN(0x258758f0, 0xf026092e),
-         TOBN(0x9fa255f3, 0xfdfcdc0f), TOBN(0xdbc9fb1f, 0xc0e1bcd2),
-         TOBN(0x35f9dd6e, 0x24651840), TOBN(0xdca45a84, 0xa5c59abc),
-         TOBN(0x103d396f, 0xecca4938), TOBN(0x4532da0a, 0xb97b3f29),
-         TOBN(0xc4135ea5, 0x1999a6bf), TOBN(0x3aa9505a, 0x5e6bf2ee),
-         TOBN(0xf77cef06, 0x3f5be093), TOBN(0x97d1a0f8, 0xa943152e),
-         TOBN(0x2cb0ebba, 0x2e1c21dd), TOBN(0xf41b29fc, 0x2c6797c4),
-         TOBN(0xc6e17321, 0xb300101f), TOBN(0x4422b0e9, 0xd0d79a89),
-         TOBN(0x49e4901c, 0x92f1bfc4), TOBN(0x06ab1f8f, 0xe1e10ed9),
-         TOBN(0x84d35577, 0xdb2926b8), TOBN(0xca349d39, 0x356e8ec2),
-         TOBN(0x70b63d32, 0x343bf1a9), TOBN(0x8fd3bd28, 0x37d1a6b1),
-         TOBN(0x0454879c, 0x316865b4), TOBN(0xee959ff6, 0xc458efa2),
-         TOBN(0x0461dcf8, 0x9706dc3f), TOBN(0x737db0e2, 0x164e4b2e),
-         TOBN(0x09262680, 0x2f8843c8), TOBN(0x54498bbc, 0x7745e6f6),
-         TOBN(0x359473fa, 0xa29e24af), TOBN(0xfcc3c454, 0x70aa87a1),
-         TOBN(0xfd2c4bf5, 0x00573ace), TOBN(0xb65b514e, 0x28dd1965),
-         TOBN(0xe46ae7cf, 0x2193e393), TOBN(0x60e9a4e1, 0xf5444d97),
-         TOBN(0xe7594e96, 0x00ff38ed), TOBN(0x43d84d2f, 0x0a0e0f02),
-         TOBN(0x8b6db141, 0xee398a21), TOBN(0xb88a56ae, 0xe3bcc5be),
-         TOBN(0x0a1aa52f, 0x373460ea), TOBN(0x20da1a56, 0x160bb19b),
-         TOBN(0xfb54999d, 0x65bf0384), TOBN(0x71a14d24, 0x5d5a180e),
-         TOBN(0xbc44db7b, 0x21737b04), TOBN(0xd84fcb18, 0x01dd8e92),
-         TOBN(0x80de937b, 0xfa44b479), TOBN(0x53505499, 0x5c98fd4f),
-         TOBN(0x1edb12ab, 0x28f08727), TOBN(0x4c58b582, 0xa5f3ef53),
-         TOBN(0xbfb236d8, 0x8327f246), TOBN(0xc3a3bfaa, 0x4d7df320),
-         TOBN(0xecd96c59, 0xb96024f2), TOBN(0xfc293a53, 0x7f4e0433),
-         TOBN(0x5341352b, 0x5acf6e10), TOBN(0xc50343fd, 0xafe652c3),
-         TOBN(0x4af3792d, 0x18577a7f), TOBN(0xe1a4c617, 0xaf16823d),
-         TOBN(0x9b26d0cd, 0x33425d0a), TOBN(0x306399ed, 0x9b7bc47f),
-         TOBN(0x2a792f33, 0x706bb20b), TOBN(0x31219614, 0x98111055),
-         TOBN(0x864ec064, 0x87f5d28b), TOBN(0x11392d91, 0x962277fd),
-         TOBN(0xb5aa7942, 0xbb6aed5f), TOBN(0x080094dc, 0x47e799d9),
-         TOBN(0x4afa588c, 0x208ba19b), TOBN(0xd3e7570f, 0x8512f284),
-         TOBN(0xcbae64e6, 0x02f5799a), TOBN(0xdeebe7ef, 0x514b9492),
-         TOBN(0x30300f98, 0xe5c298ff), TOBN(0x17f561be, 0x3678361f),
-         TOBN(0xf52ff312, 0x98cb9a16), TOBN(0x6233c3bc, 0x5562d490),
-         TOBN(0x7bfa15a1, 0x92e3a2cb), TOBN(0x961bcfd1, 0xe6365119),
-         TOBN(0x3bdd29bf, 0x2c8c53b1), TOBN(0x739704df, 0x822844ba),
-         TOBN(0x7dacfb58, 0x7e7b754b), TOBN(0x23360791, 0xa806c9b9),
-         TOBN(0xe7eb88c9, 0x23504452), TOBN(0x2983e996, 0x852c1783),
-         TOBN(0xdd4ae529, 0x958d881d), TOBN(0x026bae03, 0x262c7b3c),
-         TOBN(0x3a6f9193, 0x960b52d1), TOBN(0xd0980f90, 0x92696cfb),
-         TOBN(0x4c1f428c, 0xd5f30851), TOBN(0x94dfed27, 0x2a4f6630),
-         TOBN(0x4df53772, 0xfc5d48a4), TOBN(0xdd2d5a2f, 0x933260ce),
-         TOBN(0x574115bd, 0xd44cc7a5), TOBN(0x4ba6b20d, 0xbd12533a),
-         TOBN(0x30e93cb8, 0x243057c9), TOBN(0x794c486a, 0x14de320e),
-         TOBN(0xe925d4ce, 0xf21496e4), TOBN(0xf951d198, 0xec696331),
-         TOBN(0x9810e2de, 0x3e8d812f), TOBN(0xd0a47259, 0x389294ab),
-         TOBN(0x513ba2b5, 0x0e3bab66), TOBN(0x462caff5, 0xabad306f),
-         TOBN(0xe2dc6d59, 0xaf04c49e), TOBN(0x1aeb8750, 0xe0b84b0b),
-         TOBN(0xc034f12f, 0x2f7d0ca2), TOBN(0x6d2e8128, 0xe06acf2f),
-         TOBN(0x801f4f83, 0x21facc2f), TOBN(0xa1170c03, 0xf40ef607),
-         TOBN(0xfe0a1d4f, 0x7805a99c), TOBN(0xbde56a36, 0xcc26aba5),
-         TOBN(0x5b1629d0, 0x35531f40), TOBN(0xac212c2b, 0x9afa6108),
-         TOBN(0x30a06bf3, 0x15697be5), TOBN(0x6f0545dc, 0x2c63c7c1),
-         TOBN(0x5d8cb842, 0x7ccdadaf), TOBN(0xd52e379b, 0xac7015bb),
-         TOBN(0xc4f56147, 0xf462c23e), TOBN(0xd44a4298, 0x46bc24b0),
-         TOBN(0xbc73d23a, 0xe2856d4f), TOBN(0x61cedd8c, 0x0832bcdf),
-         TOBN(0x60953556, 0x99f241d7), TOBN(0xee4adbd7, 0x001a349d),
-         TOBN(0x0b35bf6a, 0xaa89e491), TOBN(0x7f0076f4, 0x136f7546),
-         TOBN(0xd19a18ba, 0x9264da3d), TOBN(0x6eb2d2cd, 0x62a7a28b),
-         TOBN(0xcdba941f, 0x8761c971), TOBN(0x1550518b, 0xa3be4a5d),
-         TOBN(0xd0e8e2f0, 0x57d0b70c), TOBN(0xeea8612e, 0xcd133ba3),
-         TOBN(0x814670f0, 0x44416aec), TOBN(0x424db6c3, 0x30775061),
-         TOBN(0xd96039d1, 0x16213fd1), TOBN(0xc61e7fa5, 0x18a3478f),
-         TOBN(0xa805bdcc, 0xcb0c5021), TOBN(0xbdd6f3a8, 0x0cc616dd),
-         TOBN(0x06009667, 0x5d97f7e2), TOBN(0x31db0fc1, 0xaf0bf4b6),
-         TOBN(0x23680ed4, 0x5491627a), TOBN(0xb99a3c66, 0x7d741fb1),
-         TOBN(0xe9bb5f55, 0x36b1ff92), TOBN(0x29738577, 0x512b388d),
-         TOBN(0xdb8a2ce7, 0x50fcf263), TOBN(0x385346d4, 0x6c4f7b47),
-         TOBN(0xbe86c5ef, 0x31631f9e), TOBN(0xbf91da21, 0x03a57a29),
-         TOBN(0xc3b1f796, 0x7b23f821), TOBN(0x0f7d00d2, 0x770db354),
-         TOBN(0x8ffc6c3b, 0xd8fe79da), TOBN(0xcc5e8c40, 0xd525c996),
-         TOBN(0x4640991d, 0xcfff632a), TOBN(0x64d97e8c, 0x67112528),
-         TOBN(0xc232d973, 0x02f1cd1e), TOBN(0xce87eacb, 0x1dd212a4),
-         TOBN(0x6e4c8c73, 0xe69802f7), TOBN(0x12ef0290, 0x1fffddbd),
-         TOBN(0x941ec74e, 0x1bcea6e2), TOBN(0xd0b54024, 0x3cb92cbb),
-         TOBN(0x809fb9d4, 0x7e8f9d05), TOBN(0x3bf16159, 0xf2992aae),
-         TOBN(0xad40f279, 0xf8a7a838), TOBN(0x11aea631, 0x05615660),
-         TOBN(0xbf52e6f1, 0xa01f6fa1), TOBN(0xef046995, 0x3dc2aec9),
-         TOBN(0x785dbec9, 0xd8080711), TOBN(0xe1aec60a, 0x9fdedf76),
-         TOBN(0xece797b5, 0xfa21c126), TOBN(0xc66e898f, 0x05e52732),
-         TOBN(0x39bb69c4, 0x08811fdb), TOBN(0x8bfe1ef8, 0x2fc7f082),
-         TOBN(0xc8e7a393, 0x174f4138), TOBN(0xfba8ad1d, 0xd58d1f98),
-         TOBN(0xbc21d0ce, 0xbfd2fd5b), TOBN(0x0b839a82, 0x6ee60d61),
-         TOBN(0xaacf7658, 0xafd22253), TOBN(0xb526bed8, 0xaae396b3),
-         TOBN(0xccc1bbc2, 0x38564464), TOBN(0x9e3ff947, 0x8c45bc73),
-         TOBN(0xcde9bca3, 0x58188a78), TOBN(0x138b8ee0, 0xd73bf8f7),
-         TOBN(0x5c7e234c, 0x4123c489), TOBN(0x66e69368, 0xfa643297),
-         TOBN(0x0629eeee, 0x39a15fa3), TOBN(0x95fab881, 0xa9e2a927),
-         TOBN(0xb2497007, 0xeafbb1e1), TOBN(0xd75c9ce6, 0xe75b7a93),
-         TOBN(0x3558352d, 0xefb68d78), TOBN(0xa2f26699, 0x223f6396),
-         TOBN(0xeb911ecf, 0xe469b17a), TOBN(0x62545779, 0xe72d3ec2),
-         TOBN(0x8ea47de7, 0x82cb113f), TOBN(0xebe4b086, 0x4e1fa98d),
-         TOBN(0xec2d5ed7, 0x8cdfedb1), TOBN(0xa535c077, 0xfe211a74),
-         TOBN(0x9678109b, 0x11d244c5), TOBN(0xf17c8bfb, 0xbe299a76),
-         TOBN(0xb651412e, 0xfb11fbc4), TOBN(0xea0b5482, 0x94ab3f65),
-         TOBN(0xd8dffd95, 0x0cf78243), TOBN(0x2e719e57, 0xce0361d4),
-         TOBN(0x9007f085, 0x304ddc5b), TOBN(0x095e8c6d, 0x4daba2ea),
-         TOBN(0x5a33cdb4, 0x3f9d28a9), TOBN(0x85b95cd8, 0xe2283003),
-         TOBN(0xbcd6c819, 0xb9744733), TOBN(0x29c5f538, 0xfc7f5783),
-         TOBN(0x6c49b2fa, 0xd59038e4), TOBN(0x68349cc1, 0x3bbe1018),
-         TOBN(0xcc490c1d, 0x21830ee5), TOBN(0x36f9c4ee, 0xe9bfa297),
-         TOBN(0x58fd7294, 0x48de1a94), TOBN(0xaadb13a8, 0x4e8f2cdc),
-         TOBN(0x515eaaa0, 0x81313dba), TOBN(0xc76bb468, 0xc2152dd8),
-         TOBN(0x357f8d75, 0xa653dbf8), TOBN(0xe4d8c4d1, 0xb14ac143),
-         TOBN(0xbdb8e675, 0xb055cb40), TOBN(0x898f8e7b, 0x977b5167),
-         TOBN(0xecc65651, 0xb82fb863), TOBN(0x56544814, 0x6d88f01f),
-         TOBN(0xb0928e95, 0x263a75a9), TOBN(0xcfb6836f, 0x1a22fcda),
-         TOBN(0x651d14db, 0x3f3bd37c), TOBN(0x1d3837fb, 0xb6ad4664),
-         TOBN(0x7c5fb538, 0xff4f94ab), TOBN(0x7243c712, 0x6d7fb8f2),
-         TOBN(0xef13d60c, 0xa85c5287), TOBN(0x18cfb7c7, 0x4bb8dd1b),
-         TOBN(0x82f9bfe6, 0x72908219), TOBN(0x35c4592b, 0x9d5144ab),
-         TOBN(0x52734f37, 0x9cf4b42f), TOBN(0x6bac55e7, 0x8c60ddc4),
-         TOBN(0xb5cd811e, 0x94dea0f6), TOBN(0x259ecae4, 0xe18cc1a3),
-         TOBN(0x6a0e836e, 0x15e660f8), TOBN(0x6c639ea6, 0x0e02bff2),
-         TOBN(0x8721b8cb, 0x7e1026fd), TOBN(0x9e73b50b, 0x63261942),
-         TOBN(0xb8c70974, 0x77f01da3), TOBN(0x1839e6a6, 0x8268f57f),
-         TOBN(0x571b9415, 0x5150b805), TOBN(0x1892389e, 0xf92c7097),
-         TOBN(0x8d69c18e, 0x4a084b95), TOBN(0x7014c512, 0xbe5b495c),
-         TOBN(0x4780db36, 0x1b07523c), TOBN(0x2f6219ce, 0x2c1c64fa),
-         TOBN(0xc38b81b0, 0x602c105a), TOBN(0xab4f4f20, 0x5dc8e360),
-         TOBN(0x20d3c982, 0xcf7d62d2), TOBN(0x1f36e29d, 0x23ba8150),
-         TOBN(0x48ae0bf0, 0x92763f9e), TOBN(0x7a527e6b, 0x1d3a7007),
-         TOBN(0xb4a89097, 0x581a85e3), TOBN(0x1f1a520f, 0xdc158be5),
-         TOBN(0xf98db37d, 0x167d726e), TOBN(0x8802786e, 0x1113e862)},
-        {TOBN(0xefb2149e, 0x36f09ab0), TOBN(0x03f163ca, 0x4a10bb5b),
-         TOBN(0xd0297045, 0x06e20998), TOBN(0x56f0af00, 0x1b5a3bab),
-         TOBN(0x7af4cfec, 0x70880e0d), TOBN(0x7332a66f, 0xbe3d913f),
-         TOBN(0x32e6c84a, 0x7eceb4bd), TOBN(0xedc4a79a, 0x9c228f55),
-         TOBN(0xc37c7dd0, 0xc55c4496), TOBN(0xa6a96357, 0x25bbabd2),
-         TOBN(0x5b7e63f2, 0xadd7f363), TOBN(0x9dce3782, 0x2e73f1df),
-         TOBN(0xe1e5a16a, 0xb2b91f71), TOBN(0xe4489823, 0x5ba0163c),
-         TOBN(0xf2759c32, 0xf6e515ad), TOBN(0xa5e2f1f8, 0x8615eecf),
-         TOBN(0x74519be7, 0xabded551), TOBN(0x03d358b8, 0xc8b74410),
-         TOBN(0x4d00b10b, 0x0e10d9a9), TOBN(0x6392b0b1, 0x28da52b7),
-         TOBN(0x6744a298, 0x0b75c904), TOBN(0xc305b0ae, 0xa8f7f96c),
-         TOBN(0x042e421d, 0x182cf932), TOBN(0xf6fc5d50, 0x9e4636ca),
-         TOBN(0x795847c9, 0xd64cc78c), TOBN(0x6c50621b, 0x9b6cb27b),
-         TOBN(0x07099bf8, 0xdf8022ab), TOBN(0x48f862eb, 0xc04eda1d),
-         TOBN(0xd12732ed, 0xe1603c16), TOBN(0x19a80e0f, 0x5c9a9450),
-         TOBN(0xe2257f54, 0xb429b4fc), TOBN(0x66d3b2c6, 0x45460515),
-         TOBN(0x6ca4f87e, 0x822e37be), TOBN(0x73f237b4, 0x253bda4e),
-         TOBN(0xf747f3a2, 0x41190aeb), TOBN(0xf06fa36f, 0x804cf284),
-         TOBN(0x0a6bbb6e, 0xfc621c12), TOBN(0x5d624b64, 0x40b80ec6),
-         TOBN(0x4b072425, 0x7ba556f3), TOBN(0x7fa0c354, 0x3e2d20a8),
-         TOBN(0xe921fa31, 0xe3229d41), TOBN(0xa929c652, 0x94531bd4),
-         TOBN(0x84156027, 0xa6d38209), TOBN(0xf3d69f73, 0x6bdb97bd),
-         TOBN(0x8906d19a, 0x16833631), TOBN(0x68a34c2e, 0x03d51be3),
-         TOBN(0xcb59583b, 0x0e511cd8), TOBN(0x99ce6bfd, 0xfdc132a8),
-         TOBN(0x3facdaaa, 0xffcdb463), TOBN(0x658bbc1a, 0x34a38b08),
-         TOBN(0x12a801f8, 0xf1a9078d), TOBN(0x1567bcf9, 0x6ab855de),
-         TOBN(0xe08498e0, 0x3572359b), TOBN(0xcf0353e5, 0x8659e68b),
-         TOBN(0xbb86e9c8, 0x7d23807c), TOBN(0xbc08728d, 0x2198e8a2),
-         TOBN(0x8de2b7bc, 0x453cadd6), TOBN(0x203900a7, 0xbc0bc1f8),
-         TOBN(0xbcd86e47, 0xa6abd3af), TOBN(0x911cac12, 0x8502effb),
-         TOBN(0x2d550242, 0xec965469), TOBN(0x0e9f7692, 0x29e0017e),
-         TOBN(0x633f078f, 0x65979885), TOBN(0xfb87d449, 0x4cf751ef),
-         TOBN(0xe1790e4b, 0xfc25419a), TOBN(0x36467203, 0x4bff3cfd),
-         TOBN(0xc8db6386, 0x25b6e83f), TOBN(0x6cc69f23, 0x6cad6fd2),
-         TOBN(0x0219e45a, 0x6bc68bb9), TOBN(0xe43d79b6, 0x297f7334),
-         TOBN(0x7d445368, 0x465dc97c), TOBN(0x4b9eea32, 0x2a0b949a),
-         TOBN(0x1b96c6ba, 0x6102d021), TOBN(0xeaafac78, 0x2f4461ea),
-         TOBN(0xd4b85c41, 0xc49f19a8), TOBN(0x275c28e4, 0xcf538875),
-         TOBN(0x35451a9d, 0xdd2e54e0), TOBN(0x6991adb5, 0x0605618b),
-         TOBN(0x5b8b4bcd, 0x7b36cd24), TOBN(0x372a4f8c, 0x56f37216),
-         TOBN(0xc890bd73, 0xa6a5da60), TOBN(0x6f083da0, 0xdc4c9ff0),
-         TOBN(0xf4e14d94, 0xf0536e57), TOBN(0xf9ee1eda, 0xaaec8243),
-         TOBN(0x571241ec, 0x8bdcf8e7), TOBN(0xa5db8271, 0x0b041e26),
-         TOBN(0x9a0b9a99, 0xe3fff040), TOBN(0xcaaf21dd, 0x7c271202),
-         TOBN(0xb4e2b2e1, 0x4f0dd2e8), TOBN(0xe77e7c4f, 0x0a377ac7),
-         TOBN(0x69202c3f, 0x0d7a2198), TOBN(0xf759b7ff, 0x28200eb8),
-         TOBN(0xc87526ed, 0xdcfe314e), TOBN(0xeb84c524, 0x53d5cf99),
-         TOBN(0xb1b52ace, 0x515138b6), TOBN(0x5aa7ff8c, 0x23fca3f4),
-         TOBN(0xff0b13c3, 0xb9791a26), TOBN(0x960022da, 0xcdd58b16),
-         TOBN(0xdbd55c92, 0x57aad2de), TOBN(0x3baaaaa3, 0xf30fe619),
-         TOBN(0x9a4b2346, 0x0d881efd), TOBN(0x506416c0, 0x46325e2a),
-         TOBN(0x91381e76, 0x035c18d4), TOBN(0xb3bb68be, 0xf27817b0),
-         TOBN(0x15bfb8bf, 0x5116f937), TOBN(0x7c64a586, 0xc1268943),
-         TOBN(0x71e25cc3, 0x8419a2c8), TOBN(0x9fd6b0c4, 0x8335f463),
-         TOBN(0x4bf0ba3c, 0xe8ee0e0e), TOBN(0x6f6fba60, 0x298c21fa),
-         TOBN(0x57d57b39, 0xae66bee0), TOBN(0x292d5130, 0x22672544),
-         TOBN(0xf451105d, 0xbab093b3), TOBN(0x012f59b9, 0x02839986),
-         TOBN(0x8a915802, 0x3474a89c), TOBN(0x048c919c, 0x2de03e97),
-         TOBN(0xc476a2b5, 0x91071cd5), TOBN(0x791ed89a, 0x034970a5),
-         TOBN(0x89bd9042, 0xe1b7994b), TOBN(0x8eaf5179, 0xa1057ffd),
-         TOBN(0x6066e2a2, 0xd551ee10), TOBN(0x87a8f1d8, 0x727e09a6),
-         TOBN(0x00d08bab, 0x2c01148d), TOBN(0x6da8e4f1, 0x424f33fe),
-         TOBN(0x466d17f0, 0xcf9a4e71), TOBN(0xff502010, 0x3bf5cb19),
-         TOBN(0xdccf97d8, 0xd062ecc0), TOBN(0x80c0d9af, 0x81d80ac4),
-         TOBN(0xe87771d8, 0x033f2876), TOBN(0xb0186ec6, 0x7d5cc3db),
-         TOBN(0x58e8bb80, 0x3bc9bc1d), TOBN(0x4d1395cc, 0x6f6ef60e),
-         TOBN(0xa73c62d6, 0x186244a0), TOBN(0x918e5f23, 0x110a5b53),
-         TOBN(0xed4878ca, 0x741b7eab), TOBN(0x3038d71a, 0xdbe03e51),
-         TOBN(0x840204b7, 0xa93c3246), TOBN(0x21ab6069, 0xa0b9b4cd),
-         TOBN(0xf5fa6e2b, 0xb1d64218), TOBN(0x1de6ad0e, 0xf3d56191),
-         TOBN(0x570aaa88, 0xff1929c7), TOBN(0xc6df4c6b, 0x640e87b5),
-         TOBN(0xde8a74f2, 0xc65f0ccc), TOBN(0x8b972fd5, 0xe6f6cc01),
-         TOBN(0x3fff36b6, 0x0b846531), TOBN(0xba7e45e6, 0x10a5e475),
-         TOBN(0x84a1d10e, 0x4145b6c5), TOBN(0xf1f7f91a, 0x5e046d9d),
-         TOBN(0x0317a692, 0x44de90d7), TOBN(0x951a1d4a, 0xf199c15e),
-         TOBN(0x91f78046, 0xc9d73deb), TOBN(0x74c82828, 0xfab8224f),
-         TOBN(0xaa6778fc, 0xe7560b90), TOBN(0xb4073e61, 0xa7e824ce),
-         TOBN(0xff0d693c, 0xd642eba8), TOBN(0x7ce2e57a, 0x5dccef38),
-         TOBN(0x89c2c789, 0x1df1ad46), TOBN(0x83a06922, 0x098346fd),
-         TOBN(0x2d715d72, 0xda2fc177), TOBN(0x7b6dd71d, 0x85b6cf1d),
-         TOBN(0xc60a6d0a, 0x73fa9cb0), TOBN(0xedd3992e, 0x328bf5a9),
-         TOBN(0xc380ddd0, 0x832c8c82), TOBN(0xd182d410, 0xa2a0bf50),
-         TOBN(0x7d9d7438, 0xd9a528db), TOBN(0xe8b1a0e9, 0xcaf53994),
-         TOBN(0xddd6e5fe, 0x0e19987c), TOBN(0xacb8df03, 0x190b059d),
-         TOBN(0x53703a32, 0x8300129f), TOBN(0x1f637662, 0x68c43bfd),
-         TOBN(0xbcbd1913, 0x00e54051), TOBN(0x812fcc62, 0x7bf5a8c5),
-         TOBN(0x3f969d5f, 0x29fb85da), TOBN(0x72f4e00a, 0x694759e8),
-         TOBN(0x426b6e52, 0x790726b7), TOBN(0x617bbc87, 0x3bdbb209),
-         TOBN(0x511f8bb9, 0x97aee317), TOBN(0x812a4096, 0xe81536a8),
-         TOBN(0x137dfe59, 0x3ac09b9b), TOBN(0x0682238f, 0xba8c9a7a),
-         TOBN(0x7072ead6, 0xaeccb4bd), TOBN(0x6a34e9aa, 0x692ba633),
-         TOBN(0xc82eaec2, 0x6fff9d33), TOBN(0xfb753512, 0x1d4d2b62),
-         TOBN(0x1a0445ff, 0x1d7aadab), TOBN(0x65d38260, 0xd5f6a67c),
-         TOBN(0x6e62fb08, 0x91cfb26f), TOBN(0xef1e0fa5, 0x5c7d91d6),
-         TOBN(0x47e7c7ba, 0x33db72cd), TOBN(0x017cbc09, 0xfa7c74b2),
-         TOBN(0x3c931590, 0xf50a503c), TOBN(0xcac54f60, 0x616baa42),
-         TOBN(0x9b6cd380, 0xb2369f0f), TOBN(0x97d3a70d, 0x23c76151),
-         TOBN(0x5f9dd6fc, 0x9862a9c6), TOBN(0x044c4ab2, 0x12312f51),
-         TOBN(0x035ea0fd, 0x834a2ddc), TOBN(0x49e6b862, 0xcc7b826d),
-         TOBN(0xb03d6883, 0x62fce490), TOBN(0x62f2497a, 0xb37e36e9),
-         TOBN(0x04b005b6, 0xc6458293), TOBN(0x36bb5276, 0xe8d10af7),
-         TOBN(0xacf2dc13, 0x8ee617b8), TOBN(0x470d2d35, 0xb004b3d4),
-         TOBN(0x06790832, 0xfeeb1b77), TOBN(0x2bb75c39, 0x85657f9c),
-         TOBN(0xd70bd4ed, 0xc0f60004), TOBN(0xfe797ecc, 0x219b018b),
-         TOBN(0x9b5bec2a, 0x753aebcc), TOBN(0xdaf9f3dc, 0xc939eca5),
-         TOBN(0xd6bc6833, 0xd095ad09), TOBN(0x98abdd51, 0xdaa4d2fc),
-         TOBN(0xd9840a31, 0x8d168be5), TOBN(0xcf7c10e0, 0x2325a23c),
-         TOBN(0xa5c02aa0, 0x7e6ecfaf), TOBN(0x2462e7e6, 0xb5bfdf18),
-         TOBN(0xab2d8a8b, 0xa0cc3f12), TOBN(0x68dd485d, 0xbc672a29),
-         TOBN(0x72039752, 0x596f2cd3), TOBN(0x5d3eea67, 0xa0cf3d8d),
-         TOBN(0x810a1a81, 0xe6602671), TOBN(0x8f144a40, 0x14026c0c),
-         TOBN(0xbc753a6d, 0x76b50f85), TOBN(0xc4dc21e8, 0x645cd4a4),
-         TOBN(0xc5262dea, 0x521d0378), TOBN(0x802b8e0e, 0x05011c6f),
-         TOBN(0x1ba19cbb, 0x0b4c19ea), TOBN(0x21db64b5, 0xebf0aaec),
-         TOBN(0x1f394ee9, 0x70342f9d), TOBN(0x93a10aee, 0x1bc44a14),
-         TOBN(0xa7eed31b, 0x3efd0baa), TOBN(0x6e7c824e, 0x1d154e65),
-         TOBN(0xee23fa81, 0x9966e7ee), TOBN(0x64ec4aa8, 0x05b7920d),
-         TOBN(0x2d44462d, 0x2d90aad4), TOBN(0xf44dd195, 0xdf277ad5),
-         TOBN(0x8d6471f1, 0xbb46b6a1), TOBN(0x1e65d313, 0xfd885090),
-         TOBN(0x33a800f5, 0x13a977b4), TOBN(0xaca9d721, 0x0797e1ef),
-         TOBN(0x9a5a85a0, 0xfcff6a17), TOBN(0x9970a3f3, 0x1eca7cee),
-         TOBN(0xbb9f0d6b, 0xc9504be3), TOBN(0xe0c504be, 0xadd24ee2),
-         TOBN(0x7e09d956, 0x77fcc2f4), TOBN(0xef1a5227, 0x65bb5fc4),
-         TOBN(0x145d4fb1, 0x8b9286aa), TOBN(0x66fd0c5d, 0x6649028b),
-         TOBN(0x98857ceb, 0x1bf4581c), TOBN(0xe635e186, 0xaca7b166),
-         TOBN(0x278ddd22, 0x659722ac), TOBN(0xa0903c4c, 0x1db68007),
-         TOBN(0x366e4589, 0x48f21402), TOBN(0x31b49c14, 0xb96abda2),
-         TOBN(0x329c4b09, 0xe0403190), TOBN(0x97197ca3, 0xd29f43fe),
-         TOBN(0x8073dd1e, 0x274983d8), TOBN(0xda1a3bde, 0x55717c8f),
-         TOBN(0xfd3d4da2, 0x0361f9d1), TOBN(0x1332d081, 0x4c7de1ce),
-         TOBN(0x9b7ef7a3, 0xaa6d0e10), TOBN(0x17db2e73, 0xf54f1c4a),
-         TOBN(0xaf3dffae, 0x4cd35567), TOBN(0xaaa2f406, 0xe56f4e71),
-         TOBN(0x8966759e, 0x7ace3fc7), TOBN(0x9594eacf, 0x45a8d8c6),
-         TOBN(0x8de3bd8b, 0x91834e0e), TOBN(0xafe4ca53, 0x548c0421),
-         TOBN(0xfdd7e856, 0xe6ee81c6), TOBN(0x8f671beb, 0x6b891a3a),
-         TOBN(0xf7a58f2b, 0xfae63829), TOBN(0x9ab186fb, 0x9c11ac9f),
-         TOBN(0x8d6eb369, 0x10b5be76), TOBN(0x046b7739, 0xfb040bcd),
-         TOBN(0xccb4529f, 0xcb73de88), TOBN(0x1df0fefc, 0xcf26be03),
-         TOBN(0xad7757a6, 0xbcfcd027), TOBN(0xa8786c75, 0xbb3165ca),
-         TOBN(0xe9db1e34, 0x7e99a4d9), TOBN(0x99ee86df, 0xb06c504b),
-         TOBN(0x5b7c2ddd, 0xc15c9f0a), TOBN(0xdf87a734, 0x4295989e),
-         TOBN(0x59ece47c, 0x03d08fda), TOBN(0xb074d3dd, 0xad5fc702),
-         TOBN(0x20407903, 0x51a03776), TOBN(0x2bb1f77b, 0x2a608007),
-         TOBN(0x25c58f4f, 0xe1153185), TOBN(0xe6df62f6, 0x766e6447),
-         TOBN(0xefb3d1be, 0xed51275a), TOBN(0x5de47dc7, 0x2f0f483f),
-         TOBN(0x7932d98e, 0x97c2bedf), TOBN(0xd5c11927, 0x0219f8a1),
-         TOBN(0x9d751200, 0xa73a294e), TOBN(0x5f88434a, 0x9dc20172),
-         TOBN(0xd28d9fd3, 0xa26f506a), TOBN(0xa890cd31, 0x9d1dcd48),
-         TOBN(0x0aebaec1, 0x70f4d3b4), TOBN(0xfd1a1369, 0x0ffc8d00),
-         TOBN(0xb9d9c240, 0x57d57838), TOBN(0x45929d26, 0x68bac361),
-         TOBN(0x5a2cd060, 0x25b15ca6), TOBN(0x4b3c83e1, 0x6e474446),
-         TOBN(0x1aac7578, 0xee1e5134), TOBN(0xa418f5d6, 0xc91e2f41),
-         TOBN(0x6936fc8a, 0x213ed68b), TOBN(0x860ae7ed, 0x510a5224),
-         TOBN(0x63660335, 0xdef09b53), TOBN(0x641b2897, 0xcd79c98d),
-         TOBN(0x29bd38e1, 0x01110f35), TOBN(0x79c26f42, 0x648b1937),
-         TOBN(0x64dae519, 0x9d9164f4), TOBN(0xd85a2310, 0x0265c273),
-         TOBN(0x7173dd5d, 0x4b07e2b1), TOBN(0xd144c4cb, 0x8d9ea221),
-         TOBN(0xe8b04ea4, 0x1105ab14), TOBN(0x92dda542, 0xfe80d8f1),
-         TOBN(0xe9982fa8, 0xcf03dce6), TOBN(0x8b5ea965, 0x1a22cffc),
-         TOBN(0xf7f4ea7f, 0x3fad88c4), TOBN(0x62db773e, 0x6a5ba95c),
-         TOBN(0xd20f02fb, 0x93f24567), TOBN(0xfd46c69a, 0x315257ca),
-         TOBN(0x0ac74cc7, 0x8bcab987), TOBN(0x46f31c01, 0x5ceca2f5),
-         TOBN(0x40aedb59, 0x888b219e), TOBN(0xe50ecc37, 0xe1fccd02),
-         TOBN(0x1bcd9dad, 0x911f816c), TOBN(0x583cc1ec, 0x8db9b00c),
-         TOBN(0xf3cd2e66, 0xa483bf11), TOBN(0xfa08a6f5, 0xb1b2c169),
-         TOBN(0xf375e245, 0x4be9fa28), TOBN(0x99a7ffec, 0x5b6d011f),
-         TOBN(0x6a3ebddb, 0xc4ae62da), TOBN(0x6cea00ae, 0x374aef5d),
-         TOBN(0xab5fb98d, 0x9d4d05bc), TOBN(0x7cba1423, 0xd560f252),
-         TOBN(0x49b2cc21, 0x208490de), TOBN(0x1ca66ec3, 0xbcfb2879),
-         TOBN(0x7f1166b7, 0x1b6fb16f), TOBN(0xfff63e08, 0x65fe5db3),
-         TOBN(0xb8345abe, 0x8b2610be), TOBN(0xb732ed80, 0x39de3df4),
-         TOBN(0x0e24ed50, 0x211c32b4), TOBN(0xd10d8a69, 0x848ff27d),
-         TOBN(0xc1074398, 0xed4de248), TOBN(0xd7cedace, 0x10488927),
-         TOBN(0xa4aa6bf8, 0x85673e13), TOBN(0xb46bae91, 0x6daf30af),
-         TOBN(0x07088472, 0xfcef7ad8), TOBN(0x61151608, 0xd4b35e97),
-         TOBN(0xbcfe8f26, 0xdde29986), TOBN(0xeb84c4c7, 0xd5a34c79),
-         TOBN(0xc1eec55c, 0x164e1214), TOBN(0x891be86d, 0xa147bb03),
-         TOBN(0x9fab4d10, 0x0ba96835), TOBN(0xbf01e9b8, 0xa5c1ae9f),
-         TOBN(0x6b4de139, 0xb186ebc0), TOBN(0xd5c74c26, 0x85b91bca),
-         TOBN(0x5086a99c, 0xc2d93854), TOBN(0xeed62a7b, 0xa7a9dfbc),
-         TOBN(0x8778ed6f, 0x76b7618a), TOBN(0xbff750a5, 0x03b66062),
-         TOBN(0x4cb7be22, 0xb65186db), TOBN(0x369dfbf0, 0xcc3a6d13),
-         TOBN(0xc7dab26c, 0x7191a321), TOBN(0x9edac3f9, 0x40ed718e),
-         TOBN(0xbc142b36, 0xd0cfd183), TOBN(0xc8af82f6, 0x7c991693),
-         TOBN(0xb3d1e4d8, 0x97ce0b2a), TOBN(0xe6d7c87f, 0xc3a55cdf),
-         TOBN(0x35846b95, 0x68b81afe), TOBN(0x018d12af, 0xd3c239d8),
-         TOBN(0x2b2c6208, 0x01206e15), TOBN(0xe0e42453, 0xa3b882c6),
-         TOBN(0x854470a3, 0xa50162d5), TOBN(0x08157478, 0x7017a62a),
-         TOBN(0x18bd3fb4, 0x820357c7), TOBN(0x992039ae, 0x6f1458ad),
-         TOBN(0x9a1df3c5, 0x25b44aa1), TOBN(0x2d780357, 0xed3d5281),
-         TOBN(0x58cf7e4d, 0xc77ad4d4), TOBN(0xd49a7998, 0xf9df4fc4),
-         TOBN(0x4465a8b5, 0x1d71205e), TOBN(0xa0ee0ea6, 0x649254aa),
-         TOBN(0x4b5eeecf, 0xab7bd771), TOBN(0x6c873073, 0x35c262b9),
-         TOBN(0xdc5bd648, 0x3c9d61e7), TOBN(0x233d6d54, 0x321460d2),
-         TOBN(0xd20c5626, 0xfc195bcc), TOBN(0x25445958, 0x04d78b63),
-         TOBN(0xe03fcb3d, 0x17ec8ef3), TOBN(0x54b690d1, 0x46b8f781),
-         TOBN(0x82fa2c8a, 0x21230646), TOBN(0xf51aabb9, 0x084f418c),
-         TOBN(0xff4fbec1, 0x1a30ba43), TOBN(0x6a5acf73, 0x743c9df7),
-         TOBN(0x1da2b357, 0xd635b4d5), TOBN(0xc3de68dd, 0xecd5c1da),
-         TOBN(0xa689080b, 0xd61af0dd), TOBN(0xdea5938a, 0xd665bf99),
-         TOBN(0x0231d71a, 0xfe637294), TOBN(0x01968aa6, 0xa5a81cd8),
-         TOBN(0x11252d50, 0x048e63b5), TOBN(0xc446bc52, 0x6ca007e9),
-         TOBN(0xef8c50a6, 0x96d6134b), TOBN(0x9361fbf5, 0x9e09a05c),
-         TOBN(0xf17f85a6, 0xdca3291a), TOBN(0xb178d548, 0xff251a21),
-         TOBN(0x87f6374b, 0xa4df3915), TOBN(0x566ce1bf, 0x2fd5d608),
-         TOBN(0x425cba4d, 0x7de35102), TOBN(0x6b745f8f, 0x58c5d5e2),
-         TOBN(0x88402af6, 0x63122edf), TOBN(0x3190f9ed, 0x3b989a89),
-         TOBN(0x4ad3d387, 0xebba3156), TOBN(0xef385ad9, 0xc7c469a5),
-         TOBN(0xb08281de, 0x3f642c29), TOBN(0x20be0888, 0x910ffb88),
-         TOBN(0xf353dd4a, 0xd5292546), TOBN(0x3f1627de, 0x8377a262),
-         TOBN(0xa5faa013, 0xeefcd638), TOBN(0x8f3bf626, 0x74cc77c3),
-         TOBN(0x32618f65, 0xa348f55e), TOBN(0x5787c0dc, 0x9fefeb9e),
-         TOBN(0xf1673aa2, 0xd9a23e44), TOBN(0x88dfa993, 0x4e10690d),
-         TOBN(0x1ced1b36, 0x2bf91108), TOBN(0x9193ceca, 0x3af48649),
-         TOBN(0xfb34327d, 0x2d738fc5), TOBN(0x6697b037, 0x975fee6c),
-         TOBN(0x2f485da0, 0xc04079a5), TOBN(0x2cdf5735, 0x2feaa1ac),
-         TOBN(0x76944420, 0xbd55659e), TOBN(0x7973e32b, 0x4376090c),
-         TOBN(0x86bb4fe1, 0x163b591a), TOBN(0x10441aed, 0xc196f0ca),
-         TOBN(0x3b431f4a, 0x045ad915), TOBN(0x6c11b437, 0xa4afacb1),
-         TOBN(0x30b0c7db, 0x71fdbbd8), TOBN(0xb642931f, 0xeda65acd),
-         TOBN(0x4baae6e8, 0x9c92b235), TOBN(0xa73bbd0e, 0x6b3993a1),
-         TOBN(0xd06d60ec, 0x693dd031), TOBN(0x03cab91b, 0x7156881c),
-         TOBN(0xd615862f, 0x1db3574b), TOBN(0x485b0185, 0x64bb061a),
-         TOBN(0x27434988, 0xa0181e06), TOBN(0x2cd61ad4, 0xc1c0c757),
-         TOBN(0x3effed5a, 0x2ff9f403), TOBN(0x8dc98d8b, 0x62239029),
-         TOBN(0x2206021e, 0x1f17b70d), TOBN(0xafbec0ca, 0xbf510015),
-         TOBN(0x9fed7164, 0x80130dfa), TOBN(0x306dc2b5, 0x8a02dcf5),
-         TOBN(0x48f06620, 0xfeb10fc0), TOBN(0x78d1e1d5, 0x5a57cf51),
-         TOBN(0xadef8c5a, 0x192ef710), TOBN(0x88afbd4b, 0x3b7431f9),
-         TOBN(0x7e1f7407, 0x64250c9e), TOBN(0x6e31318d, 0xb58bec07),
-         TOBN(0xfd4fc4b8, 0x24f89b4e), TOBN(0x65a5dd88, 0x48c36a2a),
-         TOBN(0x4f1eccff, 0xf024baa7), TOBN(0x22a21cf2, 0xcba94650),
-         TOBN(0x95d29dee, 0x42a554f7), TOBN(0x828983a5, 0x002ec4ba),
-         TOBN(0x8112a1f7, 0x8badb73d), TOBN(0x79ea8897, 0xa27c1839),
-         TOBN(0x8969a5a7, 0xd065fd83), TOBN(0xf49af791, 0xb262a0bc),
-         TOBN(0xfcdea8b6, 0xaf2b5127), TOBN(0x10e913e1, 0x564c2dbc),
-         TOBN(0x51239d14, 0xbc21ef51), TOBN(0xe51c3ceb, 0x4ce57292),
-         TOBN(0x795ff068, 0x47bbcc3b), TOBN(0x86b46e1e, 0xbd7e11e6),
-         TOBN(0x0ea6ba23, 0x80041ef4), TOBN(0xd72fe505, 0x6262342e),
-         TOBN(0x8abc6dfd, 0x31d294d4), TOBN(0xbbe017a2, 0x1278c2c9),
-         TOBN(0xb1fcfa09, 0xb389328a), TOBN(0x322fbc62, 0xd01771b5),
-         TOBN(0x04c0d063, 0x60b045bf), TOBN(0xdb652edc, 0x10e52d01),
-         TOBN(0x50ef932c, 0x03ec6627), TOBN(0xde1b3b2d, 0xc1ee50e3),
-         TOBN(0x5ab7bdc5, 0xdc37a90d), TOBN(0xfea67213, 0x31e33a96),
-         TOBN(0x6482b5cb, 0x4f2999aa), TOBN(0x38476cc6, 0xb8cbf0dd),
-         TOBN(0x93ebfacb, 0x173405bb), TOBN(0x15cdafe7, 0xe52369ec),
-         TOBN(0xd42d5ba4, 0xd935b7db), TOBN(0x648b6004, 0x1c99a4cd),
-         TOBN(0x785101bd, 0xa3b5545b), TOBN(0x4bf2c38a, 0x9dd67faf),
-         TOBN(0xb1aadc63, 0x4442449c), TOBN(0xe0e9921a, 0x33ad4fb8),
-         TOBN(0x5c552313, 0xaa686d82), TOBN(0xdee635fa, 0x465d866c),
-         TOBN(0xbc3c224a, 0x18ee6e8a), TOBN(0xeed748a6, 0xed42e02f),
-         TOBN(0xe70f930a, 0xd474cd08), TOBN(0x774ea6ec, 0xfff24adf),
-         TOBN(0x03e2de1c, 0xf3480d4a), TOBN(0xf0d8edc7, 0xbc8acf1a),
-         TOBN(0xf23e3303, 0x68295a9c), TOBN(0xfadd5f68, 0xc546a97d),
-         TOBN(0x895597ad, 0x96f8acb1), TOBN(0xbddd49d5, 0x671bdae2),
-         TOBN(0x16fcd528, 0x21dd43f4), TOBN(0xa5a45412, 0x6619141a)},
-        {TOBN(0x8ce9b6bf, 0xc360e25a), TOBN(0xe6425195, 0x075a1a78),
-         TOBN(0x9dc756a8, 0x481732f4), TOBN(0x83c0440f, 0x5432b57a),
-         TOBN(0xc670b3f1, 0xd720281f), TOBN(0x2205910e, 0xd135e051),
-         TOBN(0xded14b0e, 0xdb052be7), TOBN(0x697b3d27, 0xc568ea39),
-         TOBN(0x2e599b9a, 0xfb3ff9ed), TOBN(0x28c2e0ab, 0x17f6515c),
-         TOBN(0x1cbee4fd, 0x474da449), TOBN(0x071279a4, 0x4f364452),
-         TOBN(0x97abff66, 0x01fbe855), TOBN(0x3ee394e8, 0x5fda51c4),
-         TOBN(0x190385f6, 0x67597c0b), TOBN(0x6e9fccc6, 0xa27ee34b),
-         TOBN(0x0b89de93, 0x14092ebb), TOBN(0xf17256bd, 0x428e240c),
-         TOBN(0xcf89a7f3, 0x93d2f064), TOBN(0x4f57841e, 0xe1ed3b14),
-         TOBN(0x4ee14405, 0xe708d855), TOBN(0x856aae72, 0x03f1c3d0),
-         TOBN(0xc8e5424f, 0xbdd7eed5), TOBN(0x3333e4ef, 0x73ab4270),
-         TOBN(0x3bc77ade, 0xdda492f8), TOBN(0xc11a3aea, 0x78297205),
-         TOBN(0x5e89a3e7, 0x34931b4c), TOBN(0x17512e2e, 0x9f5694bb),
-         TOBN(0x5dc349f3, 0x177bf8b6), TOBN(0x232ea4ba, 0x08c7ff3e),
-         TOBN(0x9c4f9d16, 0xf511145d), TOBN(0xccf109a3, 0x33b379c3),
-         TOBN(0xe75e7a88, 0xa1f25897), TOBN(0x7ac6961f, 0xa1b5d4d8),
-         TOBN(0xe3e10773, 0x08f3ed5c), TOBN(0x208a54ec, 0x0a892dfb),
-         TOBN(0xbe826e19, 0x78660710), TOBN(0x0cf70a97, 0x237df2c8),
-         TOBN(0x418a7340, 0xed704da5), TOBN(0xa3eeb9a9, 0x08ca33fd),
-         TOBN(0x49d96233, 0x169bca96), TOBN(0x04d286d4, 0x2da6aafb),
-         TOBN(0xc09606ec, 0xa0c2fa94), TOBN(0x8869d0d5, 0x23ff0fb3),
-         TOBN(0xa99937e5, 0xd0150d65), TOBN(0xa92e2503, 0x240c14c9),
-         TOBN(0x656bf945, 0x108e2d49), TOBN(0x152a733a, 0xa2f59e2b),
-         TOBN(0xb4323d58, 0x8434a920), TOBN(0xc0af8e93, 0x622103c5),
-         TOBN(0x667518ef, 0x938dbf9a), TOBN(0xa1843073, 0x83a9cdf2),
-         TOBN(0x350a94aa, 0x5447ab80), TOBN(0xe5e5a325, 0xc75a3d61),
-         TOBN(0x74ba507f, 0x68411a9e), TOBN(0x10581fc1, 0x594f70c5),
-         TOBN(0x60e28570, 0x80eb24a9), TOBN(0x7bedfb4d, 0x488e0cfd),
-         TOBN(0x721ebbd7, 0xc259cdb8), TOBN(0x0b0da855, 0xbc6390a9),
-         TOBN(0x2b4d04db, 0xde314c70), TOBN(0xcdbf1fbc, 0x6c32e846),
-         TOBN(0x33833eab, 0xb162fc9e), TOBN(0x9939b48b, 0xb0dd3ab7),
-         TOBN(0x5aaa98a7, 0xcb0c9c8c), TOBN(0x75105f30, 0x81c4375c),
-         TOBN(0xceee5057, 0x5ef1c90f), TOBN(0xb31e065f, 0xc23a17bf),
-         TOBN(0x5364d275, 0xd4b6d45a), TOBN(0xd363f3ad, 0x62ec8996),
-         TOBN(0xb5d21239, 0x4391c65b), TOBN(0x84564765, 0xebb41b47),
-         TOBN(0x20d18ecc, 0x37107c78), TOBN(0xacff3b6b, 0x570c2a66),
-         TOBN(0x22f975d9, 0x9bd0d845), TOBN(0xef0a0c46, 0xba178fa0),
-         TOBN(0x1a419651, 0x76b6028e), TOBN(0xc49ec674, 0x248612d4),
-         TOBN(0x5b6ac4f2, 0x7338af55), TOBN(0x06145e62, 0x7bee5a36),
-         TOBN(0x33e95d07, 0xe75746b5), TOBN(0x1c1e1f6d, 0xc40c78be),
-         TOBN(0x967833ef, 0x222ff8e2), TOBN(0x4bedcf6a, 0xb49180ad),
-         TOBN(0x6b37e9c1, 0x3d7a4c8a), TOBN(0x2748887c, 0x6ddfe760),
-         TOBN(0xf7055123, 0xaa3a5bbc), TOBN(0x954ff225, 0x7bbb8e74),
-         TOBN(0xc42b8ab1, 0x97c3dfb9), TOBN(0x55a549b0, 0xcf168154),
-         TOBN(0xad6748e7, 0xc1b50692), TOBN(0x2775780f, 0x6fc5cbcb),
-         TOBN(0x4eab80b8, 0xe1c9d7c8), TOBN(0x8c69dae1, 0x3fdbcd56),
-         TOBN(0x47e6b4fb, 0x9969eace), TOBN(0x002f1085, 0xa705cb5a),
-         TOBN(0x4e23ca44, 0x6d3fea55), TOBN(0xb4ae9c86, 0xf4810568),
-         TOBN(0x47bfb91b, 0x2a62f27d), TOBN(0x60deb4c9, 0xd9bac28c),
-         TOBN(0xa892d894, 0x7de6c34c), TOBN(0x4ee68259, 0x4494587d),
-         TOBN(0x914ee14e, 0x1a3f8a5b), TOBN(0xbb113eaa, 0x28700385),
-         TOBN(0x81ca03b9, 0x2115b4c9), TOBN(0x7c163d38, 0x8908cad1),
-         TOBN(0xc912a118, 0xaa18179a), TOBN(0xe09ed750, 0x886e3081),
-         TOBN(0xa676e3fa, 0x26f516ca), TOBN(0x753cacf7, 0x8e732f91),
-         TOBN(0x51592aea, 0x833da8b4), TOBN(0xc626f42f, 0x4cbea8aa),
-         TOBN(0xef9dc899, 0xa7b56eaf), TOBN(0x00c0e52c, 0x34ef7316),
-         TOBN(0x5b1e4e24, 0xfe818a86), TOBN(0x9d31e20d, 0xc538be47),
-         TOBN(0x22eb932d, 0x3ed68974), TOBN(0xe44bbc08, 0x7c4e87c4),
-         TOBN(0x4121086e, 0x0dde9aef), TOBN(0x8e6b9cff, 0x134f4345),
-         TOBN(0x96892c1f, 0x711b0eb9), TOBN(0xb905f2c8, 0x780ab954),
-         TOBN(0xace26309, 0xa20792db), TOBN(0xec8ac9b3, 0x0684e126),
-         TOBN(0x486ad8b6, 0xb40a2447), TOBN(0x60121fc1, 0x9fe3fb24),
-         TOBN(0x5626fccf, 0x1a8e3b3f), TOBN(0x4e568622, 0x6ad1f394),
-         TOBN(0xda7aae0d, 0x196aa5a1), TOBN(0xe0df8c77, 0x1041b5fb),
-         TOBN(0x451465d9, 0x26b318b7), TOBN(0xc29b6e55, 0x7ab136e9),
-         TOBN(0x2c2ab48b, 0x71148463), TOBN(0xb5738de3, 0x64454a76),
-         TOBN(0x54ccf9a0, 0x5a03abe4), TOBN(0x377c0296, 0x0427d58e),
-         TOBN(0x73f5f0b9, 0x2bb39c1f), TOBN(0x14373f2c, 0xe608d8c5),
-         TOBN(0xdcbfd314, 0x00fbb805), TOBN(0xdf18fb20, 0x83afdcfb),
-         TOBN(0x81a57f42, 0x42b3523f), TOBN(0xe958532d, 0x87f650fb),
-         TOBN(0xaa8dc8b6, 0x8b0a7d7c), TOBN(0x1b75dfb7, 0x150166be),
-         TOBN(0x90e4f7c9, 0x2d7d1413), TOBN(0x67e2d6b5, 0x9834f597),
-         TOBN(0x4fd4f4f9, 0xa808c3e8), TOBN(0xaf8237e0, 0xd5281ec1),
-         TOBN(0x25ab5fdc, 0x84687cee), TOBN(0xc5ded6b1, 0xa5b26c09),
-         TOBN(0x8e4a5aec, 0xc8ea7650), TOBN(0x23b73e5c, 0x14cc417f),
-         TOBN(0x2bfb4318, 0x3037bf52), TOBN(0xb61e6db5, 0x78c725d7),
-         TOBN(0x8efd4060, 0xbbb3e5d7), TOBN(0x2e014701, 0xdbac488e),
-         TOBN(0xac75cf9a, 0x360aa449), TOBN(0xb70cfd05, 0x79634d08),
-         TOBN(0xa591536d, 0xfffb15ef), TOBN(0xb2c37582, 0xd07c106c),
-         TOBN(0xb4293fdc, 0xf50225f9), TOBN(0xc52e175c, 0xb0e12b03),
-         TOBN(0xf649c3ba, 0xd0a8bf64), TOBN(0x745a8fef, 0xeb8ae3c6),
-         TOBN(0x30d7e5a3, 0x58321bc3), TOBN(0xb1732be7, 0x0bc4df48),
-         TOBN(0x1f217993, 0xe9ea5058), TOBN(0xf7a71cde, 0x3e4fd745),
-         TOBN(0x86cc533e, 0x894c5bbb), TOBN(0x6915c7d9, 0x69d83082),
-         TOBN(0xa6aa2d05, 0x5815c244), TOBN(0xaeeee592, 0x49b22ce5),
-         TOBN(0x89e39d13, 0x78135486), TOBN(0x3a275c1f, 0x16b76f2f),
-         TOBN(0xdb6bcc1b, 0xe036e8f5), TOBN(0x4df69b21, 0x5e4709f5),
-         TOBN(0xa188b250, 0x2d0f39aa), TOBN(0x622118bb, 0x15a85947),
-         TOBN(0x2ebf520f, 0xfde0f4fa), TOBN(0xa40e9f29, 0x4860e539),
-         TOBN(0x7b6a51eb, 0x22b57f0f), TOBN(0x849a33b9, 0x7e80644a),
-         TOBN(0x50e5d16f, 0x1cf095fe), TOBN(0xd754b54e, 0xec55f002),
-         TOBN(0x5cfbbb22, 0x236f4a98), TOBN(0x0b0c59e9, 0x066800bb),
-         TOBN(0x4ac69a8f, 0x5a9a7774), TOBN(0x2b33f804, 0xd6bec948),
-         TOBN(0xb3729295, 0x32e6c466), TOBN(0x68956d0f, 0x4e599c73),
-         TOBN(0xa47a249f, 0x155c31cc), TOBN(0x24d80f0d, 0xe1ce284e),
-         TOBN(0xcd821dfb, 0x988baf01), TOBN(0xe6331a7d, 0xdbb16647),
-         TOBN(0x1eb8ad33, 0x094cb960), TOBN(0x593cca38, 0xc91bbca5),
-         TOBN(0x384aac8d, 0x26567456), TOBN(0x40fa0309, 0xc04b6490),
-         TOBN(0x97834cd6, 0xdab6c8f6), TOBN(0x68a7318d, 0x3f91e55f),
-         TOBN(0xa00fd04e, 0xfc4d3157), TOBN(0xb56f8ab2, 0x2bf3bdea),
-         TOBN(0x014f5648, 0x4fa57172), TOBN(0x948c5860, 0x450abdb3),
-         TOBN(0x342b5df0, 0x0ebd4f08), TOBN(0x3e5168cd, 0x0e82938e),
-         TOBN(0x7aedc1ce, 0xb0df5dd0), TOBN(0x6bbbc6d9, 0xe5732516),
-         TOBN(0xc7bfd486, 0x605daaa6), TOBN(0x46fd72b7, 0xbb9a6c9e),
-         TOBN(0xe4847fb1, 0xa124fb89), TOBN(0x75959cbd, 0xa2d8ffbc),
-         TOBN(0x42579f65, 0xc8a588ee), TOBN(0x368c92e6, 0xb80b499d),
-         TOBN(0xea4ef6cd, 0x999a5df1), TOBN(0xaa73bb7f, 0x936fe604),
-         TOBN(0xf347a70d, 0x6457d188), TOBN(0x86eda86b, 0x8b7a388b),
-         TOBN(0xb7cdff06, 0x0ccd6013), TOBN(0xbeb1b6c7, 0xd0053fb2),
-         TOBN(0x0b022387, 0x99240a9f), TOBN(0x1bbb384f, 0x776189b2),
-         TOBN(0x8695e71e, 0x9066193a), TOBN(0x2eb50097, 0x06ffac7e),
-         TOBN(0x0654a9c0, 0x4a7d2caa), TOBN(0x6f3fb3d1, 0xa5aaa290),
-         TOBN(0x835db041, 0xff476e8f), TOBN(0x540b8b0b, 0xc42295e4),
-         TOBN(0xa5c73ac9, 0x05e214f5), TOBN(0x9a74075a, 0x56a0b638),
-         TOBN(0x2e4b1090, 0xce9e680b), TOBN(0x57a5b479, 0x6b8d9afa),
-         TOBN(0x0dca48e7, 0x26bfe65c), TOBN(0x097e391c, 0x7290c307),
-         TOBN(0x683c462e, 0x6669e72e), TOBN(0xf505be1e, 0x062559ac),
-         TOBN(0x5fbe3ea1, 0xe3a3035a), TOBN(0x6431ebf6, 0x9cd50da8),
-         TOBN(0xfd169d5c, 0x1f6407f2), TOBN(0x8d838a95, 0x60fce6b8),
-         TOBN(0x2a2bfa7f, 0x650006f0), TOBN(0xdfd7dad3, 0x50c0fbb2),
-         TOBN(0x92452495, 0xccf9ad96), TOBN(0x183bf494, 0xd95635f9),
-         TOBN(0x02d5df43, 0x4a7bd989), TOBN(0x505385cc, 0xa5431095),
-         TOBN(0xdd98e67d, 0xfd43f53e), TOBN(0xd61e1a6c, 0x500c34a9),
-         TOBN(0x5a4b46c6, 0x4a8a3d62), TOBN(0x8469c4d0, 0x247743d2),
-         TOBN(0x2bb3a13d, 0x88f7e433), TOBN(0x62b23a10, 0x01be5849),
-         TOBN(0xe83596b4, 0xa63d1a4c), TOBN(0x454e7fea, 0x7d183f3e),
-         TOBN(0x643fce61, 0x17afb01c), TOBN(0x4e65e5e6, 0x1c4c3638),
-         TOBN(0x41d85ea1, 0xef74c45b), TOBN(0x2cfbfa66, 0xae328506),
-         TOBN(0x98b078f5, 0x3ada7da9), TOBN(0xd985fe37, 0xec752fbb),
-         TOBN(0xeece68fe, 0x5a0148b4), TOBN(0x6f9a55c7, 0x2d78136d),
-         TOBN(0x232dccc4, 0xd2b729ce), TOBN(0xa27e0dfd, 0x90aafbc4),
-         TOBN(0x96474452, 0x12b4603e), TOBN(0xa876c551, 0x6b706d14),
-         TOBN(0xdf145fcf, 0x69a9d412), TOBN(0xe2ab75b7, 0x2d479c34),
-         TOBN(0x12df9a76, 0x1a23ff97), TOBN(0xc6138992, 0x5d359d10),
-         TOBN(0x6e51c7ae, 0xfa835f22), TOBN(0x69a79cb1, 0xc0fcc4d9),
-         TOBN(0xf57f350d, 0x594cc7e1), TOBN(0x3079ca63, 0x3350ab79),
-         TOBN(0x226fb614, 0x9aff594a), TOBN(0x35afec02, 0x6d59a62b),
-         TOBN(0x9bee46f4, 0x06ed2c6e), TOBN(0x58da1735, 0x7d939a57),
-         TOBN(0x44c50402, 0x8fd1797e), TOBN(0xd8853e7c, 0x5ccea6ca),
-         TOBN(0x4065508d, 0xa35fcd5f), TOBN(0x8965df8c, 0x495ccaeb),
-         TOBN(0x0f2da850, 0x12e1a962), TOBN(0xee471b94, 0xc1cf1cc4),
-         TOBN(0xcef19bc8, 0x0a08fb75), TOBN(0x704958f5, 0x81de3591),
-         TOBN(0x2867f8b2, 0x3aef4f88), TOBN(0x8d749384, 0xea9f9a5f),
-         TOBN(0x1b385537, 0x8c9049f4), TOBN(0x5be948f3, 0x7b92d8b6),
-         TOBN(0xd96f725d, 0xb6e2bd6b), TOBN(0x37a222bc, 0x958c454d),
-         TOBN(0xe7c61abb, 0x8809bf61), TOBN(0x46f07fbc, 0x1346f18d),
-         TOBN(0xfb567a7a, 0xe87c0d1c), TOBN(0x84a461c8, 0x7ef3d07a),
-         TOBN(0x0a5adce6, 0xd9278d98), TOBN(0x24d94813, 0x9dfc73e1),
-         TOBN(0x4f3528b6, 0x054321c3), TOBN(0x2e03fdde, 0x692ea706),
-         TOBN(0x10e60619, 0x47b533c0), TOBN(0x1a8bc73f, 0x2ca3c055),
-         TOBN(0xae58d4b2, 0x1bb62b8f), TOBN(0xb2045a73, 0x584a24e3),
-         TOBN(0x3ab3d5af, 0xbd76e195), TOBN(0x478dd1ad, 0x6938a810),
-         TOBN(0x6ffab393, 0x6ee3d5cb), TOBN(0xdfb693db, 0x22b361e4),
-         TOBN(0xf9694496, 0x51dbf1a7), TOBN(0xcab4b4ef, 0x08a2e762),
-         TOBN(0xe8c92f25, 0xd39bba9a), TOBN(0x850e61bc, 0xf1464d96),
-         TOBN(0xb7e830e3, 0xdc09508b), TOBN(0xfaf6d2cf, 0x74317655),
-         TOBN(0x72606ceb, 0xdf690355), TOBN(0x48bb92b3, 0xd0c3ded6),
-         TOBN(0x65b75484, 0x5c7cf892), TOBN(0xf6cd7ac9, 0xd5d5f01f),
-         TOBN(0xc2c30a59, 0x96401d69), TOBN(0x91268650, 0xed921878),
-         TOBN(0x380bf913, 0xb78c558f), TOBN(0x43c0baeb, 0xc8afdaa9),
-         TOBN(0x377f61d5, 0x54f169d3), TOBN(0xf8da07e3, 0xae5ff20b),
-         TOBN(0xb676c49d, 0xa8a90ea8), TOBN(0x81c1ff2b, 0x83a29b21),
-         TOBN(0x383297ac, 0x2ad8d276), TOBN(0x3001122f, 0xba89f982),
-         TOBN(0xe1d794be, 0x6718e448), TOBN(0x246c1482, 0x7c3e6e13),
-         TOBN(0x56646ef8, 0x5d26b5ef), TOBN(0x80f5091e, 0x88069cdd),
-         TOBN(0xc5992e2f, 0x724bdd38), TOBN(0x02e915b4, 0x8471e8c7),
-         TOBN(0x96ff320a, 0x0d0ff2a9), TOBN(0xbf886487, 0x4384d1a0),
-         TOBN(0xbbe1e6a6, 0xc93f72d6), TOBN(0xd5f75d12, 0xcad800ea),
-         TOBN(0xfa40a09f, 0xe7acf117), TOBN(0x32c8cdd5, 0x7581a355),
-         TOBN(0x74221992, 0x7023c499), TOBN(0xa8afe5d7, 0x38ec3901),
-         TOBN(0x5691afcb, 0xa90e83f0), TOBN(0x41bcaa03, 0x0b8f8eac),
-         TOBN(0xe38b5ff9, 0x8d2668d5), TOBN(0x0715281a, 0x7ad81965),
-         TOBN(0x1bc8fc7c, 0x03c6ce11), TOBN(0xcbbee6e2, 0x8b650436),
-         TOBN(0x06b00fe8, 0x0cdb9808), TOBN(0x17d6e066, 0xfe3ed315),
-         TOBN(0x2e9d38c6, 0x4d0b5018), TOBN(0xab8bfd56, 0x844dcaef),
-         TOBN(0x42894a59, 0x513aed8b), TOBN(0xf77f3b6d, 0x314bd07a),
-         TOBN(0xbbdecb8f, 0x8e42b582), TOBN(0xf10e2fa8, 0xd2390fe6),
-         TOBN(0xefb95022, 0x62a2f201), TOBN(0x4d59ea50, 0x50ee32b0),
-         TOBN(0xd87f7728, 0x6da789a8), TOBN(0xcf98a2cf, 0xf79492c4),
-         TOBN(0xf9577239, 0x720943c2), TOBN(0xba044cf5, 0x3990b9d0),
-         TOBN(0x5aa8e823, 0x95f2884a), TOBN(0x834de6ed, 0x0278a0af),
-         TOBN(0xc8e1ee9a, 0x5f25bd12), TOBN(0x9259ceaa, 0x6f7ab271),
-         TOBN(0x7e6d97a2, 0x77d00b76), TOBN(0x5c0c6eea, 0xa437832a),
-         TOBN(0x5232c20f, 0x5606b81d), TOBN(0xabd7b375, 0x0d991ee5),
-         TOBN(0x4d2bfe35, 0x8632d951), TOBN(0x78f85146, 0x98ed9364),
-         TOBN(0x951873f0, 0xf30c3282), TOBN(0x0da8ac80, 0xa789230b),
-         TOBN(0x3ac7789c, 0x5398967f), TOBN(0xa69b8f7f, 0xbdda0fb5),
-         TOBN(0xe5db7717, 0x6add8545), TOBN(0x1b71cb66, 0x72c49b66),
-         TOBN(0xd8560739, 0x68421d77), TOBN(0x03840fe8, 0x83e3afea),
-         TOBN(0xb391dad5, 0x1ec69977), TOBN(0xae243fb9, 0x307f6726),
-         TOBN(0xc88ac87b, 0xe8ca160c), TOBN(0x5174cced, 0x4ce355f4),
-         TOBN(0x98a35966, 0xe58ba37d), TOBN(0xfdcc8da2, 0x7817335d),
-         TOBN(0x5b752830, 0x83fbc7bf), TOBN(0x68e419d4, 0xd9c96984),
-         TOBN(0x409a39f4, 0x02a40380), TOBN(0x88940faf, 0x1fe977bc),
-         TOBN(0xc640a94b, 0x8f8edea6), TOBN(0x1e22cd17, 0xed11547d),
-         TOBN(0xe28568ce, 0x59ffc3e2), TOBN(0x60aa1b55, 0xc1dee4e7),
-         TOBN(0xc67497c8, 0x837cb363), TOBN(0x06fb438a, 0x105a2bf2),
-         TOBN(0x30357ec4, 0x500d8e20), TOBN(0x1ad9095d, 0x0670db10),
-         TOBN(0x7f589a05, 0xc73b7cfd), TOBN(0xf544607d, 0x880d6d28),
-         TOBN(0x17ba93b1, 0xa20ef103), TOBN(0xad859130, 0x6ba6577b),
-         TOBN(0x65c91cf6, 0x6fa214a0), TOBN(0xd7d49c6c, 0x27990da5),
-         TOBN(0xecd9ec8d, 0x20bb569d), TOBN(0xbd4b2502, 0xeeffbc33),
-         TOBN(0x2056ca5a, 0x6bed0467), TOBN(0x7916a1f7, 0x5b63728c),
-         TOBN(0xd4f9497d, 0x53a4f566), TOBN(0x89734664, 0x97b56810),
-         TOBN(0xf8e1da74, 0x0494a621), TOBN(0x82546a93, 0x8d011c68),
-         TOBN(0x1f3acb19, 0xc61ac162), TOBN(0x52f8fa9c, 0xabad0d3e),
-         TOBN(0x15356523, 0xb4b7ea43), TOBN(0x5a16ad61, 0xae608125),
-         TOBN(0xb0bcb87f, 0x4faed184), TOBN(0x5f236b1d, 0x5029f45f),
-         TOBN(0xd42c7607, 0x0bc6b1fc), TOBN(0xc644324e, 0x68aefce3),
-         TOBN(0x8e191d59, 0x5c5d8446), TOBN(0xc0208077, 0x13ae1979),
-         TOBN(0xadcaee55, 0x3ba59cc7), TOBN(0x20ed6d6b, 0xa2cb81ba),
-         TOBN(0x0952ba19, 0xb6efcffc), TOBN(0x60f12d68, 0x97c0b87c),
-         TOBN(0x4ee2c7c4, 0x9caa30bc), TOBN(0x767238b7, 0x97fbff4e),
-         TOBN(0xebc73921, 0x501b5d92), TOBN(0x3279e3df, 0xc2a37737),
-         TOBN(0x9fc12bc8, 0x6d197543), TOBN(0xfa94dc6f, 0x0a40db4e),
-         TOBN(0x7392b41a, 0x530ccbbd), TOBN(0x87c82146, 0xea823525),
-         TOBN(0xa52f984c, 0x05d98d0c), TOBN(0x2ae57d73, 0x5ef6974c),
-         TOBN(0x9377f7bf, 0x3042a6dd), TOBN(0xb1a007c0, 0x19647a64),
-         TOBN(0xfaa9079a, 0x0cca9767), TOBN(0x3d81a25b, 0xf68f72d5),
-         TOBN(0x752067f8, 0xff81578e), TOBN(0x78622150, 0x9045447d),
-         TOBN(0xc0c22fcf, 0x0505aa6f), TOBN(0x1030f0a6, 0x6bed1c77),
-         TOBN(0x31f29f15, 0x1f0bd739), TOBN(0x2d7989c7, 0xe6debe85),
-         TOBN(0x5c070e72, 0x8e677e98), TOBN(0x0a817bd3, 0x06e81fd5),
-         TOBN(0xc110d830, 0xb0f2ac95), TOBN(0x48d0995a, 0xab20e64e),
-         TOBN(0x0f3e00e1, 0x7729cd9a), TOBN(0x2a570c20, 0xdd556946),
-         TOBN(0x912dbcfd, 0x4e86214d), TOBN(0x2d014ee2, 0xcf615498),
-         TOBN(0x55e2b1e6, 0x3530d76e), TOBN(0xc5135ae4, 0xfd0fd6d1),
-         TOBN(0x0066273a, 0xd4f3049f), TOBN(0xbb8e9893, 0xe7087477),
-         TOBN(0x2dba1ddb, 0x14c6e5fd), TOBN(0xdba37886, 0x51f57e6c),
-         TOBN(0x5aaee0a6, 0x5a72f2cf), TOBN(0x1208bfbf, 0x7bea5642),
-         TOBN(0xf5c6aa3b, 0x67872c37), TOBN(0xd726e083, 0x43f93224),
-         TOBN(0x1854daa5, 0x061f1658), TOBN(0xc0016df1, 0xdf0cd2b3),
-         TOBN(0xc2a3f23e, 0x833d50de), TOBN(0x73b681d2, 0xbbbd3017),
-         TOBN(0x2f046dc4, 0x3ac343c0), TOBN(0x9c847e7d, 0x85716421),
-         TOBN(0xe1e13c91, 0x0917eed4), TOBN(0x3fc9eebd, 0x63a1b9c6),
-         TOBN(0x0f816a72, 0x7fe02299), TOBN(0x6335ccc2, 0x294f3319),
-         TOBN(0x3820179f, 0x4745c5be), TOBN(0xe647b782, 0x922f066e),
-         TOBN(0xc22e49de, 0x02cafb8a), TOBN(0x299bc2ff, 0xfcc2eccc),
-         TOBN(0x9a8feea2, 0x6e0e8282), TOBN(0xa627278b, 0xfe893205),
-         TOBN(0xa7e19733, 0x7933e47b), TOBN(0xf4ff6b13, 0x2e766402),
-         TOBN(0xa4d8be0a, 0x98440d9f), TOBN(0x658f5c2f, 0x38938808),
-         TOBN(0x90b75677, 0xc95b3b3e), TOBN(0xfa044269, 0x3137b6ff),
-         TOBN(0x077b039b, 0x43c47c29), TOBN(0xcca95dd3, 0x8a6445b2),
-         TOBN(0x0b498ba4, 0x2333fc4c), TOBN(0x274f8e68, 0xf736a1b1),
-         TOBN(0x6ca348fd, 0x5f1d4b2e), TOBN(0x24d3be78, 0xa8f10199),
-         TOBN(0x8535f858, 0xca14f530), TOBN(0xa6e7f163, 0x5b982e51),
-         TOBN(0x847c8512, 0x36e1bf62), TOBN(0xf6a7c58e, 0x03448418),
-         TOBN(0x583f3703, 0xf9374ab6), TOBN(0x864f9195, 0x6e564145),
-         TOBN(0x33bc3f48, 0x22526d50), TOBN(0x9f323c80, 0x1262a496),
-         TOBN(0xaa97a7ae, 0x3f046a9a), TOBN(0x70da183e, 0xdf8a039a),
-         TOBN(0x5b68f71c, 0x52aa0ba6), TOBN(0x9be0fe51, 0x21459c2d),
-         TOBN(0xc1e17eb6, 0xcbc613e5), TOBN(0x33131d55, 0x497ea61c),
-         TOBN(0x2f69d39e, 0xaf7eded5), TOBN(0x73c2f434, 0xde6af11b),
-         TOBN(0x4ca52493, 0xa4a375fa), TOBN(0x5f06787c, 0xb833c5c2),
-         TOBN(0x814e091f, 0x3e6e71cf), TOBN(0x76451f57, 0x8b746666)},
-        {
-            TOBN(0x80f9bdef, 0x694db7e0), TOBN(0xedca8787, 0xb9fcddc6),
-            TOBN(0x51981c34, 0x03b8dce1), TOBN(0x4274dcf1, 0x70e10ba1),
-            TOBN(0xf72743b8, 0x6def6d1a), TOBN(0xd25b1670, 0xebdb1866),
-            TOBN(0xc4491e8c, 0x050c6f58), TOBN(0x2be2b2ab, 0x87fbd7f5),
-            TOBN(0x3e0e5c9d, 0xd111f8ec), TOBN(0xbcc33f8d, 0xb7c4e760),
-            TOBN(0x702f9a91, 0xbd392a51), TOBN(0x7da4a795, 0xc132e92d),
-            TOBN(0x1a0b0ae3, 0x0bb1151b), TOBN(0x54febac8, 0x02e32251),
-            TOBN(0xea3a5082, 0x694e9e78), TOBN(0xe58ffec1, 0xe4fe40b8),
-            TOBN(0xf85592fc, 0xd1e0cf9e), TOBN(0xdea75f0d, 0xc0e7b2e8),
-            TOBN(0xc04215cf, 0xc135584e), TOBN(0x174fc727, 0x2f57092a),
-            TOBN(0xe7277877, 0xeb930bea), TOBN(0x504caccb, 0x5eb02a5a),
-            TOBN(0xf9fe08f7, 0xf5241b9b), TOBN(0xe7fb62f4, 0x8d5ca954),
-            TOBN(0xfbb8349d, 0x29c4120b), TOBN(0x9f94391f, 0xc0d0d915),
-            TOBN(0xc4074fa7, 0x5410ba51), TOBN(0xa66adbf6, 0x150a5911),
-            TOBN(0xc164543c, 0x34bfca38), TOBN(0xe0f27560, 0xb9e1ccfc),
-            TOBN(0x99da0f53, 0xe820219c), TOBN(0xe8234498, 0xc6b4997a),
-            TOBN(0xcfb88b76, 0x9d4c5423), TOBN(0x9e56eb10, 0xb0521c49),
-            TOBN(0x418e0b5e, 0xbe8700a1), TOBN(0x00cbaad6, 0xf93cb58a),
-            TOBN(0xe923fbde, 0xd92a5e67), TOBN(0xca4979ac, 0x1f347f11),
-            TOBN(0x89162d85, 0x6bc0585b), TOBN(0xdd6254af, 0xac3c70e3),
-            TOBN(0x7b23c513, 0x516e19e4), TOBN(0x56e2e847, 0xc5c4d593),
-            TOBN(0x9f727d73, 0x5ce71ef6), TOBN(0x5b6304a6, 0xf79a44c5),
-            TOBN(0x6638a736, 0x3ab7e433), TOBN(0x1adea470, 0xfe742f83),
-            TOBN(0xe054b854, 0x5b7fc19f), TOBN(0xf935381a, 0xba1d0698),
-            TOBN(0x546eab2d, 0x799e9a74), TOBN(0x96239e0e, 0xa949f729),
-            TOBN(0xca274c6b, 0x7090055a), TOBN(0x835142c3, 0x9020c9b0),
-            TOBN(0xa405667a, 0xa2e8807f), TOBN(0x29f2c085, 0x1aa3d39e),
-            TOBN(0xcc555d64, 0x42fc72f5), TOBN(0xe856e0e7, 0xfbeacb3c),
-            TOBN(0xb5504f9d, 0x918e4936), TOBN(0x65035ef6, 0xb2513982),
-            TOBN(0x0553a0c2, 0x6f4d9cb9), TOBN(0x6cb10d56, 0xbea85509),
-            TOBN(0x48d957b7, 0xa242da11), TOBN(0x16a4d3dd, 0x672b7268),
-            TOBN(0x3d7e637c, 0x8502a96b), TOBN(0x27c7032b, 0x730d463b),
-            TOBN(0xbdc02b18, 0xe4136a14), TOBN(0xbacf969d, 0x678e32bf),
-            TOBN(0xc98d89a3, 0xdd9c3c03), TOBN(0x7b92420a, 0x23becc4f),
-            TOBN(0xd4b41f78, 0xc64d565c), TOBN(0x9f969d00, 0x10f28295),
-            TOBN(0xec7f7f76, 0xb13d051a), TOBN(0x08945e1e, 0xa92da585),
-            TOBN(0x55366b7d, 0x5846426f), TOBN(0xe7d09e89, 0x247d441d),
-            TOBN(0x510b404d, 0x736fbf48), TOBN(0x7fa003d0, 0xe784bd7d),
-            TOBN(0x25f7614f, 0x17fd9596), TOBN(0x49e0e0a1, 0x35cb98db),
-            TOBN(0x2c65957b, 0x2e83a76a), TOBN(0x5d40da8d, 0xcddbe0f8),
-            TOBN(0xf2b8c405, 0x050bad24), TOBN(0x8918426d, 0xc2aa4823),
-            TOBN(0x2aeab3dd, 0xa38365a7), TOBN(0x72031717, 0x7c91b690),
-            TOBN(0x8b00d699, 0x60a94120), TOBN(0x478a255d, 0xe99eaeec),
-            TOBN(0xbf656a5f, 0x6f60aafd), TOBN(0xdfd7cb75, 0x5dee77b3),
-            TOBN(0x37f68bb4, 0xa595939d), TOBN(0x03556479, 0x28740217),
-            TOBN(0x8e740e7c, 0x84ad7612), TOBN(0xd89bc843, 0x9044695f),
-            TOBN(0xf7f3da5d, 0x85a9184d), TOBN(0x562563bb, 0x9fc0b074),
-            TOBN(0x06d2e6aa, 0xf88a888e), TOBN(0x612d8643, 0x161fbe7c),
-            TOBN(0x465edba7, 0xf64085e7), TOBN(0xb230f304, 0x29aa8511),
-            TOBN(0x53388426, 0xcda2d188), TOBN(0x90885735, 0x4b666649),
-            TOBN(0x6f02ff9a, 0x652f54f6), TOBN(0x65c82294, 0x5fae2bf0),
-            TOBN(0x7816ade0, 0x62f5eee3), TOBN(0xdcdbdf43, 0xfcc56d70),
-            TOBN(0x9fb3bba3, 0x54530bb2), TOBN(0xbde3ef77, 0xcb0869ea),
-            TOBN(0x89bc9046, 0x0b431163), TOBN(0x4d03d7d2, 0xe4819a35),
-            TOBN(0x33ae4f9e, 0x43b6a782), TOBN(0x216db307, 0x9c88a686),
-            TOBN(0x91dd88e0, 0x00ffedd9), TOBN(0xb280da9f, 0x12bd4840),
-            TOBN(0x32a7cb8a, 0x1635e741), TOBN(0xfe14008a, 0x78be02a7),
-            TOBN(0x3fafb334, 0x1b7ae030), TOBN(0x7fd508e7, 0x5add0ce9),
-            TOBN(0x72c83219, 0xd607ad51), TOBN(0x0f229c0a, 0x8d40964a),
-            TOBN(0x1be2c336, 0x1c878da2), TOBN(0xe0c96742, 0xeab2ab86),
-            TOBN(0x458f8691, 0x3e538cd7), TOBN(0xa7001f6c, 0x8e08ad53),
-            TOBN(0x52b8c6e6, 0xbf5d15ff), TOBN(0x548234a4, 0x011215dd),
-            TOBN(0xff5a9d2d, 0x3d5b4045), TOBN(0xb0ffeeb6, 0x4a904190),
-            TOBN(0x55a3aca4, 0x48607f8b), TOBN(0x8cbd665c, 0x30a0672a),
-            TOBN(0x87f834e0, 0x42583068), TOBN(0x02da2aeb, 0xf3f6e683),
-            TOBN(0x6b763e5d, 0x05c12248), TOBN(0x7230378f, 0x65a8aefc),
-            TOBN(0x93bd80b5, 0x71e8e5ca), TOBN(0x53ab041c, 0xb3b62524),
-            TOBN(0x1b860513, 0x6c9c552e), TOBN(0xe84d402c, 0xd5524e66),
-            TOBN(0xa37f3573, 0xf37f5937), TOBN(0xeb0f6c7d, 0xd1e4fca5),
-            TOBN(0x2965a554, 0xac8ab0fc), TOBN(0x17fbf56c, 0x274676ac),
-            TOBN(0x2e2f6bd9, 0xacf7d720), TOBN(0x41fc8f88, 0x10224766),
-            TOBN(0x517a14b3, 0x85d53bef), TOBN(0xdae327a5, 0x7d76a7d1),
-            TOBN(0x6ad0a065, 0xc4818267), TOBN(0x33aa189b, 0x37c1bbc1),
-            TOBN(0x64970b52, 0x27392a92), TOBN(0x21699a1c, 0x2d1535ea),
-            TOBN(0xcd20779c, 0xc2d7a7fd), TOBN(0xe3186059, 0x99c83cf2),
-            TOBN(0x9b69440b, 0x72c0b8c7), TOBN(0xa81497d7, 0x7b9e0e4d),
-            TOBN(0x515d5c89, 0x1f5f82dc), TOBN(0x9a7f67d7, 0x6361079e),
-            TOBN(0xa8da81e3, 0x11a35330), TOBN(0xe44990c4, 0x4b18be1b),
-            TOBN(0xc7d5ed95, 0xaf103e59), TOBN(0xece8aba7, 0x8dac9261),
-            TOBN(0xbe82b099, 0x9394b8d3), TOBN(0x6830f09a, 0x16adfe83),
-            TOBN(0x250a29b4, 0x88172d01), TOBN(0x8b20bd65, 0xcaff9e02),
-            TOBN(0xb8a7661e, 0xe8a6329a), TOBN(0x4520304d, 0xd3fce920),
-            TOBN(0xae45da1f, 0x2b47f7ef), TOBN(0xe07f5288, 0x5bffc540),
-            TOBN(0xf7997009, 0x3464f874), TOBN(0x2244c2cd, 0xa6fa1f38),
-            TOBN(0x43c41ac1, 0x94d7d9b1), TOBN(0x5bafdd82, 0xc82e7f17),
-            TOBN(0xdf0614c1, 0x5fda0fca), TOBN(0x74b043a7, 0xa8ae37ad),
-            TOBN(0x3ba6afa1, 0x9e71734c), TOBN(0x15d5437e, 0x9c450f2e),
-            TOBN(0x4a5883fe, 0x67e242b1), TOBN(0x5143bdc2, 0x2c1953c2),
-            TOBN(0x542b8b53, 0xfc5e8920), TOBN(0x363bf9a8, 0x9a9cee08),
-            TOBN(0x02375f10, 0xc3486e08), TOBN(0x2037543b, 0x8c5e70d2),
-            TOBN(0x7109bccc, 0x625640b4), TOBN(0xcbc1051e, 0x8bc62c3b),
-            TOBN(0xf8455fed, 0x803f26ea), TOBN(0x6badceab, 0xeb372424),
-            TOBN(0xa2a9ce7c, 0x6b53f5f9), TOBN(0x64246595, 0x1b176d99),
-            TOBN(0xb1298d36, 0xb95c081b), TOBN(0x53505bb8, 0x1d9a9ee6),
-            TOBN(0x3f6f9e61, 0xf2ba70b0), TOBN(0xd07e16c9, 0x8afad453),
-            TOBN(0x9f1694bb, 0xe7eb4a6a), TOBN(0xdfebced9, 0x3cb0bc8e),
-            TOBN(0x92d3dcdc, 0x53868c8b), TOBN(0x174311a2, 0x386107a6),
-            TOBN(0x4109e07c, 0x689b4e64), TOBN(0x30e4587f, 0x2df3dcb6),
-            TOBN(0x841aea31, 0x0811b3b2), TOBN(0x6144d41d, 0x0cce43ea),
-            TOBN(0x464c4581, 0x2a9a7803), TOBN(0xd03d371f, 0x3e158930),
-            TOBN(0xc676d7f2, 0xb1f3390b), TOBN(0x9f7a1b8c, 0xa5b61272),
-            TOBN(0x4ebebfc9, 0xc2e127a9), TOBN(0x4602500c, 0x5dd997bf),
-            TOBN(0x7f09771c, 0x4711230f), TOBN(0x058eb37c, 0x020f09c1),
-            TOBN(0xab693d4b, 0xfee5e38b), TOBN(0x9289eb1f, 0x4653cbc0),
-            TOBN(0xbecf46ab, 0xd51b9cf5), TOBN(0xd2aa9c02, 0x9f0121af),
-            TOBN(0x36aaf7d2, 0xe90dc274), TOBN(0x909e4ea0, 0x48b95a3c),
-            TOBN(0xe6b70496, 0x6f32dbdb), TOBN(0x672188a0, 0x8b030b3e),
-            TOBN(0xeeffe5b3, 0xcfb617e2), TOBN(0x87e947de, 0x7c82709e),
-            TOBN(0xa44d2b39, 0x1770f5a7), TOBN(0xe4d4d791, 0x0e44eb82),
-            TOBN(0x42e69d1e, 0x3f69712a), TOBN(0xbf11c4d6, 0xac6a820e),
-            TOBN(0xb5e7f3e5, 0x42c4224c), TOBN(0xd6b4e81c, 0x449d941c),
-            TOBN(0x5d72bd16, 0x5450e878), TOBN(0x6a61e28a, 0xee25ac54),
-            TOBN(0x33272094, 0xe6f1cd95), TOBN(0x7512f30d, 0x0d18673f),
-            TOBN(0x32f7a4ca, 0x5afc1464), TOBN(0x2f095656, 0x6bbb977b),
-            TOBN(0x586f47ca, 0xa8226200), TOBN(0x02c868ad, 0x1ac07369),
-            TOBN(0x4ef2b845, 0xc613acbe), TOBN(0x43d7563e, 0x0386054c),
-            TOBN(0x54da9dc7, 0xab952578), TOBN(0xb5423df2, 0x26e84d0b),
-            TOBN(0xa8b64eeb, 0x9b872042), TOBN(0xac205782, 0x5990f6df),
-            TOBN(0x4ff696eb, 0x21f4c77a), TOBN(0x1a79c3e4, 0xaab273af),
-            TOBN(0x29bc922e, 0x9436b3f1), TOBN(0xff807ef8, 0xd6d9a27a),
-            TOBN(0x82acea3d, 0x778f22a0), TOBN(0xfb10b2e8, 0x5b5e7469),
-            TOBN(0xc0b16980, 0x2818ee7d), TOBN(0x011afff4, 0xc91c1a2f),
-            TOBN(0x95a6d126, 0xad124418), TOBN(0x31c081a5, 0xe72e295f),
-            TOBN(0x36bb283a, 0xf2f4db75), TOBN(0xd115540f, 0x7acef462),
-            TOBN(0xc7f3a8f8, 0x33f6746c), TOBN(0x21e46f65, 0xfea990ca),
-            TOBN(0x915fd5c5, 0xcaddb0a9), TOBN(0xbd41f016, 0x78614555),
-            TOBN(0x346f4434, 0x426ffb58), TOBN(0x80559436, 0x14dbc204),
-            TOBN(0xf3dd20fe, 0x5a969b7f), TOBN(0x9d59e956, 0xe899a39a),
-            TOBN(0xf1b0971c, 0x8ad4cf4b), TOBN(0x03448860, 0x2ffb8fb8),
-            TOBN(0xf071ac3c, 0x65340ba4), TOBN(0x408d0596, 0xb27fd758),
-            TOBN(0xe7c78ea4, 0x98c364b0), TOBN(0xa4aac4a5, 0x051e8ab5),
-            TOBN(0xb9e1d560, 0x485d9002), TOBN(0x9acd518a, 0x88844455),
-            TOBN(0xe4ca688f, 0xd06f56c0), TOBN(0xa48af70d, 0xdf027972),
-            TOBN(0x691f0f04, 0x5e9a609d), TOBN(0xa9dd82cd, 0xee61270e),
-            TOBN(0x8903ca63, 0xa0ef18d3), TOBN(0x9fb7ee35, 0x3d6ca3bd),
-            TOBN(0xa7b4a09c, 0xabf47d03), TOBN(0x4cdada01, 0x1c67de8e),
-            TOBN(0x52003749, 0x9355a244), TOBN(0xe77fd2b6, 0x4f2151a9),
-            TOBN(0x695d6cf6, 0x66b4efcb), TOBN(0xc5a0cacf, 0xda2cfe25),
-            TOBN(0x104efe5c, 0xef811865), TOBN(0xf52813e8, 0x9ea5cc3d),
-            TOBN(0x855683dc, 0x40b58dbc), TOBN(0x0338ecde, 0x175fcb11),
-            TOBN(0xf9a05637, 0x74921592), TOBN(0xb4f1261d, 0xb9bb9d31),
-            TOBN(0x551429b7, 0x4e9c5459), TOBN(0xbe182e6f, 0x6ea71f53),
-            TOBN(0xd3a3b07c, 0xdfc50573), TOBN(0x9ba1afda, 0x62be8d44),
-            TOBN(0x9bcfd2cb, 0x52ab65d3), TOBN(0xdf11d547, 0xa9571802),
-            TOBN(0x099403ee, 0x02a2404a), TOBN(0x497406f4, 0x21088a71),
-            TOBN(0x99479409, 0x5004ae71), TOBN(0xbdb42078, 0xa812c362),
-            TOBN(0x2b72a30f, 0xd8828442), TOBN(0x283add27, 0xfcb5ed1c),
-            TOBN(0xf7c0e200, 0x66a40015), TOBN(0x3e3be641, 0x08b295ef),
-            TOBN(0xac127dc1, 0xe038a675), TOBN(0x729deff3, 0x8c5c6320),
-            TOBN(0xb7df8fd4, 0xa90d2c53), TOBN(0x9b74b0ec, 0x681e7cd3),
-            TOBN(0x5cb5a623, 0xdab407e5), TOBN(0xcdbd3615, 0x76b340c6),
-            TOBN(0xa184415a, 0x7d28392c), TOBN(0xc184c1d8, 0xe96f7830),
-            TOBN(0xc3204f19, 0x81d3a80f), TOBN(0xfde0c841, 0xc8e02432),
-            TOBN(0x78203b3e, 0x8149e0c1), TOBN(0x5904bdbb, 0x08053a73),
-            TOBN(0x30fc1dd1, 0x101b6805), TOBN(0x43c223bc, 0x49aa6d49),
-            TOBN(0x9ed67141, 0x7a174087), TOBN(0x311469a0, 0xd5997008),
-            TOBN(0xb189b684, 0x5e43fc61), TOBN(0xf3282375, 0xe0d3ab57),
-            TOBN(0x4fa34b67, 0xb1181da8), TOBN(0x621ed0b2, 0x99ee52b8),
-            TOBN(0x9b178de1, 0xad990676), TOBN(0xd51de67b, 0x56d54065),
-            TOBN(0x2a2c27c4, 0x7538c201), TOBN(0x33856ec8, 0x38a40f5c),
-            TOBN(0x2522fc15, 0xbe6cdcde), TOBN(0x1e603f33, 0x9f0c6f89),
-            TOBN(0x7994edc3, 0x103e30a6), TOBN(0x033a00db, 0x220c853e),
-            TOBN(0xd3cfa409, 0xf7bb7fd7), TOBN(0x70f8781e, 0x462d18f6),
-            TOBN(0xbbd82980, 0x687fe295), TOBN(0x6eef4c32, 0x595669f3),
-            TOBN(0x86a9303b, 0x2f7e85c3), TOBN(0x5fce4621, 0x71988f9b),
-            TOBN(0x5b935bf6, 0xc138acb5), TOBN(0x30ea7d67, 0x25661212),
-            TOBN(0xef1eb5f4, 0xe51ab9a2), TOBN(0x0587c98a, 0xae067c78),
-            TOBN(0xb3ce1b3c, 0x77ca9ca6), TOBN(0x2a553d4d, 0x54b5f057),
-            TOBN(0xc7898236, 0x4da29ec2), TOBN(0xdbdd5d13, 0xb9c57316),
-            TOBN(0xc57d6e6b, 0x2cd80d47), TOBN(0x80b460cf, 0xfe9e7391),
-            TOBN(0x98648cab, 0xf963c31e), TOBN(0x67f9f633, 0xcc4d32fd),
-            TOBN(0x0af42a9d, 0xfdf7c687), TOBN(0x55f292a3, 0x0b015ea7),
-            TOBN(0x89e468b2, 0xcd21ab3d), TOBN(0xe504f022, 0xc393d392),
-            TOBN(0xab21e1d4, 0xa5013af9), TOBN(0xe3283f78, 0xc2c28acb),
-            TOBN(0xf38b35f6, 0x226bf99f), TOBN(0xe8354274, 0x0e291e69),
-            TOBN(0x61673a15, 0xb20c162d), TOBN(0xc101dc75, 0xb04fbdbe),
-            TOBN(0x8323b4c2, 0x255bd617), TOBN(0x6c969693, 0x6c2a9154),
-            TOBN(0xc6e65860, 0x62679387), TOBN(0x8e01db0c, 0xb8c88e23),
-            TOBN(0x33c42873, 0x893a5559), TOBN(0x7630f04b, 0x47a3e149),
-            TOBN(0xb5d80805, 0xddcf35f8), TOBN(0x582ca080, 0x77dfe732),
-            TOBN(0x2c7156e1, 0x0b1894a0), TOBN(0x92034001, 0xd81c68c0),
-            TOBN(0xed225d00, 0xc8b115b5), TOBN(0x237f9c22, 0x83b907f2),
-            TOBN(0x0ea2f32f, 0x4470e2c0), TOBN(0xb725f7c1, 0x58be4e95),
-            TOBN(0x0f1dcafa, 0xb1ae5463), TOBN(0x59ed5187, 0x1ba2fc04),
-            TOBN(0xf6e0f316, 0xd0115d4d), TOBN(0x5180b12f, 0xd3691599),
-            TOBN(0x157e32c9, 0x527f0a41), TOBN(0x7b0b081d, 0xa8e0ecc0),
-            TOBN(0x6dbaaa8a, 0xbf4f0dd0), TOBN(0x99b289c7, 0x4d252696),
-            TOBN(0x79b7755e, 0xdbf864fe), TOBN(0x6974e2b1, 0x76cad3ab),
-            TOBN(0x35dbbee2, 0x06ddd657), TOBN(0xe7cbdd11, 0x2ff3a96d),
-            TOBN(0x88381968, 0x076be758), TOBN(0x2d737e72, 0x08c91f5d),
-            TOBN(0x5f83ab62, 0x86ec3776), TOBN(0x98aa649d, 0x945fa7a1),
-            TOBN(0xf477ec37, 0x72ef0933), TOBN(0x66f52b1e, 0x098c17b1),
-            TOBN(0x9eec58fb, 0xd803738b), TOBN(0x91aaade7, 0xe4e86aa4),
-            TOBN(0x6b1ae617, 0xa5b51492), TOBN(0x63272121, 0xbbc45974),
-            TOBN(0x7e0e28f0, 0x862c5129), TOBN(0x0a8f79a9, 0x3321a4a0),
-            TOBN(0xe26d1664, 0x5041c88f), TOBN(0x0571b805, 0x53233e3a),
-            TOBN(0xd1b0ccde, 0xc9520711), TOBN(0x55a9e4ed, 0x3c8b84bf),
-            TOBN(0x9426bd39, 0xa1fef314), TOBN(0x4f5f638e, 0x6eb93f2b),
-            TOBN(0xba2a1ed3, 0x2bf9341b), TOBN(0xd63c1321, 0x4d42d5a9),
-            TOBN(0xd2964a89, 0x316dc7c5), TOBN(0xd1759606, 0xca511851),
-            TOBN(0xd8a9201f, 0xf9e6ed35), TOBN(0xb7b5ee45, 0x6736925a),
-            TOBN(0x0a83fbbc, 0x99581af7), TOBN(0x3076bc40, 0x64eeb051),
-            TOBN(0x5511c98c, 0x02dec312), TOBN(0x270de898, 0x238dcb78),
-            TOBN(0x2cf4cf9c, 0x539c08c9), TOBN(0xa70cb65e, 0x38d3b06e),
-            TOBN(0xb12ec10e, 0xcfe57bbd), TOBN(0x82c7b656, 0x35a0c2b5),
-            TOBN(0xddc7d5cd, 0x161c67bd), TOBN(0xe32e8985, 0xae3a32cc),
-            TOBN(0x7aba9444, 0xd11a5529), TOBN(0xe964ed02, 0x2427fa1a),
-            TOBN(0x1528392d, 0x24a1770a), TOBN(0xa152ce2c, 0x12c72fcd),
-            TOBN(0x714553a4, 0x8ec07649), TOBN(0x18b4c290, 0x459dd453),
-            TOBN(0xea32b714, 0x7b64b110), TOBN(0xb871bfa5, 0x2e6f07a2),
-            TOBN(0xb67112e5, 0x9e2e3c9b), TOBN(0xfbf250e5, 0x44aa90f6),
-            TOBN(0xf77aedb8, 0xbd539006), TOBN(0x3b0cdf9a, 0xd172a66f),
-            TOBN(0xedf69fea, 0xf8c51187), TOBN(0x05bb67ec, 0x741e4da7),
-            TOBN(0x47df0f32, 0x08114345), TOBN(0x56facb07, 0xbb9792b1),
-            TOBN(0xf3e007e9, 0x8f6229e4), TOBN(0x62d103f4, 0x526fba0f),
-            TOBN(0x4f33bef7, 0xb0339d79), TOBN(0x9841357b, 0xb59bfec1),
-            TOBN(0xfa8dbb59, 0xc34e6705), TOBN(0xc3c7180b, 0x7fdaa84c),
-            TOBN(0xf95872fc, 0xa4108537), TOBN(0x8750cc3b, 0x932a3e5a),
-            TOBN(0xb61cc69d, 0xb7275d7d), TOBN(0xffa0168b, 0x2e59b2e9),
-            TOBN(0xca032abc, 0x6ecbb493), TOBN(0x1d86dbd3, 0x2c9082d8),
-            TOBN(0xae1e0b67, 0xe28ef5ba), TOBN(0x2c9a4699, 0xcb18e169),
-            TOBN(0x0ecd0e33, 0x1e6bbd20), TOBN(0x571b360e, 0xaf5e81d2),
-            TOBN(0xcd9fea58, 0x101c1d45), TOBN(0x6651788e, 0x18880452),
-            TOBN(0xa9972635, 0x1f8dd446), TOBN(0x44bed022, 0xe37281d0),
-            TOBN(0x094b2b2d, 0x33da525d), TOBN(0xf193678e, 0x13144fd8),
-            TOBN(0xb8ab5ba4, 0xf4c1061d), TOBN(0x4343b5fa, 0xdccbe0f4),
-            TOBN(0xa8702371, 0x63812713), TOBN(0x47bf6d2d, 0xf7611d93),
-            TOBN(0x46729b8c, 0xbd21e1d7), TOBN(0x7484d4e0, 0xd629e77d),
-            TOBN(0x830e6eea, 0x60dbac1f), TOBN(0x23d8c484, 0xda06a2f7),
-            TOBN(0x896714b0, 0x50ca535b), TOBN(0xdc8d3644, 0xebd97a9b),
-            TOBN(0x106ef9fa, 0xb12177b4), TOBN(0xf79bf464, 0x534d5d9c),
-            TOBN(0x2537a349, 0xa6ab360b), TOBN(0xc7c54253, 0xa00c744f),
-            TOBN(0xb3c7a047, 0xe5911a76), TOBN(0x61ffa5c8, 0x647f1ee7),
-            TOBN(0x15aed36f, 0x8f56ab42), TOBN(0x6a0d41b0, 0xa3ff9ac9),
-            TOBN(0x68f469f5, 0xcc30d357), TOBN(0xbe9adf81, 0x6b72be96),
-            TOBN(0x1cd926fe, 0x903ad461), TOBN(0x7e89e38f, 0xcaca441b),
-            TOBN(0xf0f82de5, 0xfacf69d4), TOBN(0x363b7e76, 0x4775344c),
-            TOBN(0x6894f312, 0xb2e36d04), TOBN(0x3c6cb4fe, 0x11d1c9a5),
-            TOBN(0x85d9c339, 0x4008e1f2), TOBN(0x5e9a85ea, 0x249f326c),
-            TOBN(0xdc35c60a, 0x678c5e06), TOBN(0xc08b944f, 0x9f86fba9),
-            TOBN(0xde40c02c, 0x89f71f0f), TOBN(0xad8f3e31, 0xff3da3c0),
-            TOBN(0x3ea5096b, 0x42125ded), TOBN(0x13879cbf, 0xa7379183),
-            TOBN(0x6f4714a5, 0x6b306a0b), TOBN(0x359c2ea6, 0x67646c5e),
-            TOBN(0xfacf8943, 0x07726368), TOBN(0x07a58935, 0x65ff431e),
-            TOBN(0x24d661d1, 0x68754ab0), TOBN(0x801fce1d, 0x6f429a76),
-            TOBN(0xc068a85f, 0xa58ce769), TOBN(0xedc35c54, 0x5d5eca2b),
-            TOBN(0xea31276f, 0xa3f660d1), TOBN(0xa0184ebe, 0xb8fc7167),
-            TOBN(0x0f20f21a, 0x1d8db0ae), TOBN(0xd96d095f, 0x56c35e12),
-            TOBN(0xedf402b5, 0xf8c2a25b), TOBN(0x1bb772b9, 0x059204b6),
-            TOBN(0x50cbeae2, 0x19b4e34c), TOBN(0x93109d80, 0x3fa0845a),
-            TOBN(0x54f7ccf7, 0x8ef59fb5), TOBN(0x3b438fe2, 0x88070963),
-            TOBN(0x9e28c659, 0x31f3ba9b), TOBN(0x9cc31b46, 0xead9da92),
-            TOBN(0x3c2f0ba9, 0xb733aa5f), TOBN(0xdece47cb, 0xf05af235),
-            TOBN(0xf8e3f715, 0xa2ac82a5), TOBN(0xc97ba641, 0x2203f18a),
-            TOBN(0xc3af5504, 0x09c11060), TOBN(0x56ea2c05, 0x46af512d),
-            TOBN(0xfac28daf, 0xf3f28146), TOBN(0x87fab43a, 0x959ef494),
-        },
-        {
-            TOBN(0x09891641, 0xd4c5105f), TOBN(0x1ae80f8e, 0x6d7fbd65),
-            TOBN(0x9d67225f, 0xbee6bdb0), TOBN(0x3b433b59, 0x7fc4d860),
-            TOBN(0x44e66db6, 0x93e85638), TOBN(0xf7b59252, 0xe3e9862f),
-            TOBN(0xdb785157, 0x665c32ec), TOBN(0x702fefd7, 0xae362f50),
-            TOBN(0x3754475d, 0x0fefb0c3), TOBN(0xd48fb56b, 0x46d7c35d),
-            TOBN(0xa070b633, 0x363798a4), TOBN(0xae89f3d2, 0x8fdb98e6),
-            TOBN(0x970b89c8, 0x6363d14c), TOBN(0x89817521, 0x67abd27d),
-            TOBN(0x9bf7d474, 0x44d5a021), TOBN(0xb3083baf, 0xcac72aee),
-            TOBN(0x389741de, 0xbe949a44), TOBN(0x638e9388, 0x546a4fa5),
-            TOBN(0x3fe6419c, 0xa0047bdc), TOBN(0x7047f648, 0xaaea57ca),
-            TOBN(0x54e48a90, 0x41fbab17), TOBN(0xda8e0b28, 0x576bdba2),
-            TOBN(0xe807eebc, 0xc72afddc), TOBN(0x07d3336d, 0xf42577bf),
-            TOBN(0x62a8c244, 0xbfe20925), TOBN(0x91c19ac3, 0x8fdce867),
-            TOBN(0x5a96a5d5, 0xdd387063), TOBN(0x61d587d4, 0x21d324f6),
-            TOBN(0xe87673a2, 0xa37173ea), TOBN(0x23848008, 0x53778b65),
-            TOBN(0x10f8441e, 0x05bab43e), TOBN(0xfa11fe12, 0x4621efbe),
-            TOBN(0x047b772e, 0x81685d7b), TOBN(0x23f27d81, 0xbf34a976),
-            TOBN(0xc27608e2, 0x915f48ef), TOBN(0x3b0b43fa, 0xa521d5c3),
-            TOBN(0x7613fb26, 0x63ca7284), TOBN(0x7f5729b4, 0x1d4db837),
-            TOBN(0x87b14898, 0x583b526b), TOBN(0x00b732a6, 0xbbadd3d1),
-            TOBN(0x8e02f426, 0x2048e396), TOBN(0x436b50b6, 0x383d9de4),
-            TOBN(0xf78d3481, 0x471e85ad), TOBN(0x8b01ea6a, 0xd005c8d6),
-            TOBN(0xd3c7afee, 0x97015c07), TOBN(0x46cdf1a9, 0x4e3ba2ae),
-            TOBN(0x7a42e501, 0x83d3a1d2), TOBN(0xd54b5268, 0xb541dff4),
-            TOBN(0x3f24cf30, 0x4e23e9bc), TOBN(0x4387f816, 0x126e3624),
-            TOBN(0x26a46a03, 0x3b0b6d61), TOBN(0xaf1bc845, 0x8b2d777c),
-            TOBN(0x25c401ba, 0x527de79c), TOBN(0x0e1346d4, 0x4261bbb6),
-            TOBN(0x4b96c44b, 0x287b4bc7), TOBN(0x658493c7, 0x5254562f),
-            TOBN(0x23f949fe, 0xb8a24a20), TOBN(0x17ebfed1, 0xf52ca53f),
-            TOBN(0x9b691bbe, 0xbcfb4853), TOBN(0x5617ff6b, 0x6278a05d),
-            TOBN(0x241b34c5, 0xe3c99ebd), TOBN(0xfc64242e, 0x1784156a),
-            TOBN(0x4206482f, 0x695d67df), TOBN(0xb967ce0e, 0xee27c011),
-            TOBN(0x65db3751, 0x21c80b5d), TOBN(0x2e7a563c, 0xa31ecca0),
-            TOBN(0xe56ffc4e, 0x5238a07e), TOBN(0x3d6c2966, 0x32ced854),
-            TOBN(0xe99d7d1a, 0xaf70b885), TOBN(0xafc3bad9, 0x2d686459),
-            TOBN(0x9c78bf46, 0x0cc8ba5b), TOBN(0x5a439519, 0x18955aa3),
-            TOBN(0xf8b517a8, 0x5fe4e314), TOBN(0xe60234d0, 0xfcb8906f),
-            TOBN(0xffe542ac, 0xf2061b23), TOBN(0x287e191f, 0x6b4cb59c),
-            TOBN(0x21857ddc, 0x09d877d8), TOBN(0x1c23478c, 0x14678941),
-            TOBN(0xbbf0c056, 0xb6e05ea4), TOBN(0x82da4b53, 0xb01594fe),
-            TOBN(0xf7526791, 0xfadb8608), TOBN(0x049e832d, 0x7b74cdf6),
-            TOBN(0xa43581cc, 0xc2b90a34), TOBN(0x73639eb8, 0x9360b10c),
-            TOBN(0x4fba331f, 0xe1e4a71b), TOBN(0x6ffd6b93, 0x8072f919),
-            TOBN(0x6e53271c, 0x65679032), TOBN(0x67206444, 0xf14272ce),
-            TOBN(0xc0f734a3, 0xb2335834), TOBN(0x9526205a, 0x90ef6860),
-            TOBN(0xcb8be717, 0x04e2bb0d), TOBN(0x2418871e, 0x02f383fa),
-            TOBN(0xd7177681, 0x4082c157), TOBN(0xcc914ad0, 0x29c20073),
-            TOBN(0xf186c1eb, 0xe587e728), TOBN(0x6fdb3c22, 0x61bcd5fd),
-            TOBN(0x30d014a6, 0xf2f9f8e9), TOBN(0x963ece23, 0x4fec49d2),
-            TOBN(0x862025c5, 0x9605a8d9), TOBN(0x39874445, 0x19f8929a),
-            TOBN(0x01b6ff65, 0x12bf476a), TOBN(0x598a64d8, 0x09cf7d91),
-            TOBN(0xd7ec7749, 0x93be56ca), TOBN(0x10899785, 0xcbb33615),
-            TOBN(0xb8a092fd, 0x02eee3ad), TOBN(0xa86b3d35, 0x30145270),
-            TOBN(0x323d98c6, 0x8512b675), TOBN(0x4b8bc785, 0x62ebb40f),
-            TOBN(0x7d301f54, 0x413f9cde), TOBN(0xa5e4fb4f, 0x2bab5664),
-            TOBN(0x1d2b252d, 0x1cbfec23), TOBN(0xfcd576bb, 0xe177120d),
-            TOBN(0x04427d3e, 0x83731a34), TOBN(0x2bb9028e, 0xed836e8e),
-            TOBN(0xb36acff8, 0xb612ca7c), TOBN(0xb88fe5ef, 0xd3d9c73a),
-            TOBN(0xbe2a6bc6, 0xedea4eb3), TOBN(0x43b93133, 0x488eec77),
-            TOBN(0xf41ff566, 0xb17106e1), TOBN(0x469e9172, 0x654efa32),
-            TOBN(0xb4480f04, 0x41c23fa3), TOBN(0xb4712eb0, 0xc1989a2e),
-            TOBN(0x3ccbba0f, 0x93a29ca7), TOBN(0x6e205c14, 0xd619428c),
-            TOBN(0x90db7957, 0xb3641686), TOBN(0x0432691d, 0x45ac8b4e),
-            TOBN(0x07a759ac, 0xf64e0350), TOBN(0x0514d89c, 0x9c972517),
-            TOBN(0x1701147f, 0xa8e67fc3), TOBN(0x9e2e0b8b, 0xab2085be),
-            TOBN(0xd5651824, 0xac284e57), TOBN(0x890d4325, 0x74893664),
-            TOBN(0x8a7c5e6e, 0xc55e68a3), TOBN(0xbf12e90b, 0x4339c85a),
-            TOBN(0x31846b85, 0xf922b655), TOBN(0x9a54ce4d, 0x0bf4d700),
-            TOBN(0xd7f4e83a, 0xf1a14295), TOBN(0x916f955c, 0xb285d4f9),
-            TOBN(0xe57bb0e0, 0x99ffdaba), TOBN(0x28a43034, 0xeab0d152),
-            TOBN(0x0a36ffa2, 0xb8a9cef8), TOBN(0x5517407e, 0xb9ec051a),
-            TOBN(0x9c796096, 0xea68e672), TOBN(0x853db5fb, 0xfb3c77fb),
-            TOBN(0x21474ba9, 0xe864a51a), TOBN(0x6c267699, 0x6e8a1b8b),
-            TOBN(0x7c823626, 0x94120a28), TOBN(0xe61e9a48, 0x8383a5db),
-            TOBN(0x7dd75003, 0x9f84216d), TOBN(0xab020d07, 0xad43cd85),
-            TOBN(0x9437ae48, 0xda12c659), TOBN(0x6449c2eb, 0xe65452ad),
-            TOBN(0xcc7c4c1c, 0x2cf9d7c1), TOBN(0x1320886a, 0xee95e5ab),
-            TOBN(0xbb7b9056, 0xbeae170c), TOBN(0xc8a5b250, 0xdbc0d662),
-            TOBN(0x4ed81432, 0xc11d2303), TOBN(0x7da66912, 0x1f03769f),
-            TOBN(0x3ac7a5fd, 0x84539828), TOBN(0x14dada94, 0x3bccdd02),
-            TOBN(0x8b84c321, 0x7ef6b0d1), TOBN(0x52a9477a, 0x7c933f22),
-            TOBN(0x5ef6728a, 0xfd440b82), TOBN(0x5c3bd859, 0x6ce4bd5e),
-            TOBN(0x918b80f5, 0xf22c2d3e), TOBN(0x368d5040, 0xb7bb6cc5),
-            TOBN(0xb66142a1, 0x2695a11c), TOBN(0x60ac583a, 0xeb19ea70),
-            TOBN(0x317cbb98, 0x0eab2437), TOBN(0x8cc08c55, 0x5e2654c8),
-            TOBN(0xfe2d6520, 0xe6d8307f), TOBN(0xe9f147f3, 0x57428993),
-            TOBN(0x5f9c7d14, 0xd2fd6cf1), TOBN(0xa3ecd064, 0x2d4fcbb0),
-            TOBN(0xad83fef0, 0x8e7341f7), TOBN(0x643f23a0, 0x3a63115c),
-            TOBN(0xd38a78ab, 0xe65ab743), TOBN(0xbf7c75b1, 0x35edc89c),
-            TOBN(0x3dd8752e, 0x530df568), TOBN(0xf85c4a76, 0xe308c682),
-            TOBN(0x4c9955b2, 0xe68acf37), TOBN(0xa544df3d, 0xab32af85),
-            TOBN(0x4b8ec3f5, 0xa25cf493), TOBN(0x4d8f2764, 0x1a622feb),
-            TOBN(0x7bb4f7aa, 0xf0dcbc49), TOBN(0x7de551f9, 0x70bbb45b),
-            TOBN(0xcfd0f3e4, 0x9f2ca2e5), TOBN(0xece58709, 0x1f5c76ef),
-            TOBN(0x32920edd, 0x167d79ae), TOBN(0x039df8a2, 0xfa7d7ec1),
-            TOBN(0xf46206c0, 0xbb30af91), TOBN(0x1ff5e2f5, 0x22676b59),
-            TOBN(0x11f4a039, 0x6ea51d66), TOBN(0x506c1445, 0x807d7a26),
-            TOBN(0x60da5705, 0x755a9b24), TOBN(0x8fc8cc32, 0x1f1a319e),
-            TOBN(0x83642d4d, 0x9433d67d), TOBN(0x7fa5cb8f, 0x6a7dd296),
-            TOBN(0x576591db, 0x9b7bde07), TOBN(0x13173d25, 0x419716fb),
-            TOBN(0xea30599d, 0xd5b340ff), TOBN(0xfc6b5297, 0xb0fe76c5),
-            TOBN(0x1c6968c8, 0xab8f5adc), TOBN(0xf723c7f5, 0x901c928d),
-            TOBN(0x4203c321, 0x9773d402), TOBN(0xdf7c6aa3, 0x1b51dd47),
-            TOBN(0x3d49e37a, 0x552be23c), TOBN(0x57febee8, 0x0b5a6e87),
-            TOBN(0xc5ecbee4, 0x7bd8e739), TOBN(0x79d44994, 0xae63bf75),
-            TOBN(0x168bd00f, 0x38fb8923), TOBN(0x75d48ee4, 0xd0533130),
-            TOBN(0x554f77aa, 0xdb5cdf33), TOBN(0x3396e896, 0x3c696769),
-            TOBN(0x2fdddbf2, 0xd3fd674e), TOBN(0xbbb8f6ee, 0x99d0e3e5),
-            TOBN(0x51b90651, 0xcbae2f70), TOBN(0xefc4bc05, 0x93aaa8eb),
-            TOBN(0x8ecd8689, 0xdd1df499), TOBN(0x1aee99a8, 0x22f367a5),
-            TOBN(0x95d485b9, 0xae8274c5), TOBN(0x6c14d445, 0x7d30b39c),
-            TOBN(0xbafea90b, 0xbcc1ef81), TOBN(0x7c5f317a, 0xa459a2ed),
-            TOBN(0x01211075, 0x4ef44227), TOBN(0xa17bed6e, 0xdc20f496),
-            TOBN(0x0cdfe424, 0x819853cd), TOBN(0x13793298, 0xf71e2ce7),
-            TOBN(0x3c1f3078, 0xdbbe307b), TOBN(0x6dd1c20e, 0x76ee9936),
-            TOBN(0x23ee4b57, 0x423caa20), TOBN(0x4ac3793b, 0x8efb840e),
-            TOBN(0x934438eb, 0xed1f8ca0), TOBN(0x3e546658, 0x4ebb25a2),
-            TOBN(0xc415af0e, 0xc069896f), TOBN(0xc13eddb0, 0x9a5aa43d),
-            TOBN(0x7a04204f, 0xd49eb8f6), TOBN(0xd0d5bdfc, 0xd74f1670),
-            TOBN(0x3697e286, 0x56fc0558), TOBN(0x10207371, 0x01cebade),
-            TOBN(0x5f87e690, 0x0647a82b), TOBN(0x908e0ed4, 0x8f40054f),
-            TOBN(0xa9f633d4, 0x79853803), TOBN(0x8ed13c9a, 0x4a28b252),
-            TOBN(0x3e2ef676, 0x1f460f64), TOBN(0x53930b9b, 0x36d06336),
-            TOBN(0x347073ac, 0x8fc4979b), TOBN(0x84380e0e, 0x5ecd5597),
-            TOBN(0xe3b22c6b, 0xc4fe3c39), TOBN(0xba4a8153, 0x6c7bebdf),
-            TOBN(0xf23ab6b7, 0x25693459), TOBN(0x53bc3770, 0x14922b11),
-            TOBN(0x4645c8ab, 0x5afc60db), TOBN(0xaa022355, 0x20b9f2a3),
-            TOBN(0x52a2954c, 0xce0fc507), TOBN(0x8c2731bb, 0x7ce1c2e7),
-            TOBN(0xf39608ab, 0x18a0339d), TOBN(0xac7a658d, 0x3735436c),
-            TOBN(0xb22c2b07, 0xcd992b4f), TOBN(0x4e83daec, 0xf40dcfd4),
-            TOBN(0x8a34c7be, 0x2f39ea3e), TOBN(0xef0c005f, 0xb0a56d2e),
-            TOBN(0x62731f6a, 0x6edd8038), TOBN(0x5721d740, 0x4e3cb075),
-            TOBN(0x1ea41511, 0xfbeeee1b), TOBN(0xd1ef5e73, 0xef1d0c05),
-            TOBN(0x42feefd1, 0x73c07d35), TOBN(0xe530a00a, 0x8a329493),
-            TOBN(0x5d55b7fe, 0xf15ebfb0), TOBN(0x549de03c, 0xd322491a),
-            TOBN(0xf7b5f602, 0x745b3237), TOBN(0x3632a3a2, 0x1ab6e2b6),
-            TOBN(0x0d3bba89, 0x0ef59f78), TOBN(0x0dfc6443, 0xc9e52b9a),
-            TOBN(0x1dc79699, 0x72631447), TOBN(0xef033917, 0xb3be20b1),
-            TOBN(0x0c92735d, 0xb1383948), TOBN(0xc1fc29a2, 0xc0dd7d7d),
-            TOBN(0x6485b697, 0x403ed068), TOBN(0x13bfaab3, 0xaac93bdc),
-            TOBN(0x410dc6a9, 0x0deeaf52), TOBN(0xb003fb02, 0x4c641c15),
-            TOBN(0x1384978c, 0x5bc504c4), TOBN(0x37640487, 0x864a6a77),
-            TOBN(0x05991bc6, 0x222a77da), TOBN(0x62260a57, 0x5e47eb11),
-            TOBN(0xc7af6613, 0xf21b432c), TOBN(0x22f3acc9, 0xab4953e9),
-            TOBN(0x52934922, 0x8e41d155), TOBN(0x4d024568, 0x3ac059ef),
-            TOBN(0xb0201755, 0x4d884411), TOBN(0xce8055cf, 0xa59a178f),
-            TOBN(0xcd77d1af, 0xf6204549), TOBN(0xa0a00a3e, 0xc7066759),
-            TOBN(0x471071ef, 0x0272c229), TOBN(0x009bcf6b, 0xd3c4b6b0),
-            TOBN(0x2a2638a8, 0x22305177), TOBN(0xd51d59df, 0x41645bbf),
-            TOBN(0xa81142fd, 0xc0a7a3c0), TOBN(0xa17eca6d, 0x4c7063ee),
-            TOBN(0x0bb887ed, 0x60d9dcec), TOBN(0xd6d28e51, 0x20ad2455),
-            TOBN(0xebed6308, 0xa67102ba), TOBN(0x042c3114, 0x8bffa408),
-            TOBN(0xfd099ac5, 0x8aa68e30), TOBN(0x7a6a3d7c, 0x1483513e),
-            TOBN(0xffcc6b75, 0xba2d8f0c), TOBN(0x54dacf96, 0x1e78b954),
-            TOBN(0xf645696f, 0xa4a9af89), TOBN(0x3a411940, 0x06ac98ec),
-            TOBN(0x41b8b3f6, 0x22a67a20), TOBN(0x2d0b1e0f, 0x99dec626),
-            TOBN(0x27c89192, 0x40be34e8), TOBN(0xc7162b37, 0x91907f35),
-            TOBN(0x90188ec1, 0xa956702b), TOBN(0xca132f7d, 0xdf93769c),
-            TOBN(0x3ece44f9, 0x0e2025b4), TOBN(0x67aaec69, 0x0c62f14c),
-            TOBN(0xad741418, 0x22e3cc11), TOBN(0xcf9b75c3, 0x7ff9a50e),
-            TOBN(0x02fa2b16, 0x4d348272), TOBN(0xbd99d61a, 0x9959d56d),
-            TOBN(0xbc4f19db, 0x18762916), TOBN(0xcc7cce50, 0x49c1ac80),
-            TOBN(0x4d59ebaa, 0xd846bd83), TOBN(0x8775a9dc, 0xa9202849),
-            TOBN(0x07ec4ae1, 0x6e1f4ca9), TOBN(0x27eb5875, 0xba893f11),
-            TOBN(0x00284d51, 0x662cc565), TOBN(0x82353a6b, 0x0db4138d),
-            TOBN(0xd9c7aaaa, 0xaa32a594), TOBN(0xf5528b5e, 0xa5669c47),
-            TOBN(0xf3220231, 0x2f23c5ff), TOBN(0xe3e8147a, 0x6affa3a1),
-            TOBN(0xfb423d5c, 0x202ddda0), TOBN(0x3d6414ac, 0x6b871bd4),
-            TOBN(0x586f82e1, 0xa51a168a), TOBN(0xb712c671, 0x48ae5448),
-            TOBN(0x9a2e4bd1, 0x76233eb8), TOBN(0x0188223a, 0x78811ca9),
-            TOBN(0x553c5e21, 0xf7c18de1), TOBN(0x7682e451, 0xb27bb286),
-            TOBN(0x3ed036b3, 0x0e51e929), TOBN(0xf487211b, 0xec9cb34f),
-            TOBN(0x0d094277, 0x0c24efc8), TOBN(0x0349fd04, 0xbef737a4),
-            TOBN(0x6d1c9dd2, 0x514cdd28), TOBN(0x29c135ff, 0x30da9521),
-            TOBN(0xea6e4508, 0xf78b0b6f), TOBN(0x176f5dd2, 0x678c143c),
-            TOBN(0x08148418, 0x4be21e65), TOBN(0x27f7525c, 0xe7df38c4),
-            TOBN(0x1fb70e09, 0x748ab1a4), TOBN(0x9cba50a0, 0x5efe4433),
-            TOBN(0x7846c7a6, 0x15f75af2), TOBN(0x2a7c2c57, 0x5ee73ea8),
-            TOBN(0x42e566a4, 0x3f0a449a), TOBN(0x45474c3b, 0xad90fc3d),
-            TOBN(0x7447be3d, 0x8b61d057), TOBN(0x3e9d1cf1, 0x3a4ec092),
-            TOBN(0x1603e453, 0xf380a6e6), TOBN(0x0b86e431, 0x9b1437c2),
-            TOBN(0x7a4173f2, 0xef29610a), TOBN(0x8fa729a7, 0xf03d57f7),
-            TOBN(0x3e186f6e, 0x6c9c217e), TOBN(0xbe1d3079, 0x91919524),
-            TOBN(0x92a62a70, 0x153d4fb1), TOBN(0x32ed3e34, 0xd68c2f71),
-            TOBN(0xd785027f, 0x9eb1a8b7), TOBN(0xbc37eb77, 0xc5b22fe8),
-            TOBN(0x466b34f0, 0xb9d6a191), TOBN(0x008a89af, 0x9a05f816),
-            TOBN(0x19b028fb, 0x7d42c10a), TOBN(0x7fe8c92f, 0x49b3f6b8),
-            TOBN(0x58907cc0, 0xa5a0ade3), TOBN(0xb3154f51, 0x559d1a7c),
-            TOBN(0x5066efb6, 0xd9790ed6), TOBN(0xa77a0cbc, 0xa6aa793b),
-            TOBN(0x1a915f3c, 0x223e042e), TOBN(0x1c5def04, 0x69c5874b),
-            TOBN(0x0e830078, 0x73b6c1da), TOBN(0x55cf85d2, 0xfcd8557a),
-            TOBN(0x0f7c7c76, 0x0460f3b1), TOBN(0x87052acb, 0x46e58063),
-            TOBN(0x09212b80, 0x907eae66), TOBN(0x3cb068e0, 0x4d721c89),
-            TOBN(0xa87941ae, 0xdd45ac1c), TOBN(0xde8d5c0d, 0x0daa0dbb),
-            TOBN(0xda421fdc, 0xe3502e6e), TOBN(0xc8944201, 0x4d89a084),
-            TOBN(0x7307ba5e, 0xf0c24bfb), TOBN(0xda212beb, 0x20bde0ef),
-            TOBN(0xea2da24b, 0xf82ce682), TOBN(0x058d3816, 0x07f71fe4),
-            TOBN(0x35a02462, 0x5ffad8de), TOBN(0xcd7b05dc, 0xaadcefab),
-            TOBN(0xd442f8ed, 0x1d9f54ec), TOBN(0x8be3d618, 0xb2d3b5ca),
-            TOBN(0xe2220ed0, 0xe06b2ce2), TOBN(0x82699a5f, 0x1b0da4c0),
-            TOBN(0x3ff106f5, 0x71c0c3a7), TOBN(0x8f580f5a, 0x0d34180c),
-            TOBN(0x4ebb120e, 0x22d7d375), TOBN(0x5e5782cc, 0xe9513675),
-            TOBN(0x2275580c, 0x99c82a70), TOBN(0xe8359fbf, 0x15ea8c4c),
-            TOBN(0x53b48db8, 0x7b415e70), TOBN(0xaacf2240, 0x100c6014),
-            TOBN(0x9faaccf5, 0xe4652f1d), TOBN(0xbd6fdd2a, 0xd56157b2),
-            TOBN(0xa4f4fb1f, 0x6261ec50), TOBN(0x244e55ad, 0x476bcd52),
-            TOBN(0x881c9305, 0x047d320b), TOBN(0x1ca983d5, 0x6181263f),
-            TOBN(0x354e9a44, 0x278fb8ee), TOBN(0xad2dbc0f, 0x396e4964),
-            TOBN(0x723f3aa2, 0x9268b3de), TOBN(0x0d1ca29a, 0xe6e0609a),
-            TOBN(0x794866aa, 0x6cf44252), TOBN(0x0b59f3e3, 0x01af87ed),
-            TOBN(0xe234e5ff, 0x7f4a6c51), TOBN(0xa8768fd2, 0x61dc2f7e),
-            TOBN(0xdafc7332, 0x0a94d81f), TOBN(0xd7f84282, 0x06938ce1),
-            TOBN(0xae0b3c0e, 0x0546063e), TOBN(0x7fbadcb2, 0x5d61abc6),
-            TOBN(0xd5d7a2c9, 0x369ac400), TOBN(0xa5978d09, 0xae67d10c),
-            TOBN(0x290f211e, 0x4f85eaac), TOBN(0xe61e2ad1, 0xfacac681),
-            TOBN(0xae125225, 0x388384cd), TOBN(0xa7fb68e9, 0xccfde30f),
-            TOBN(0x7a59b936, 0x3daed4c2), TOBN(0x80a9aa40, 0x2606f789),
-            TOBN(0xb40c1ea5, 0xf6a6d90a), TOBN(0x948364d3, 0x514d5885),
-            TOBN(0x062ebc60, 0x70985182), TOBN(0xa6db5b0e, 0x33310895),
-            TOBN(0x64a12175, 0xe329c2f5), TOBN(0xc5f25bd2, 0x90ea237e),
-            TOBN(0x7915c524, 0x2d0a4c23), TOBN(0xeb5d26e4, 0x6bb3cc52),
-            TOBN(0x369a9116, 0xc09e2c92), TOBN(0x0c527f92, 0xcf182cf8),
-            TOBN(0x9e591938, 0x2aede0ac), TOBN(0xb2922208, 0x6cc34939),
-            TOBN(0x3c9d8962, 0x99a34361), TOBN(0x3c81836d, 0xc1905fe6),
-            TOBN(0x4bfeb57f, 0xa001ec5a), TOBN(0xe993f5bb, 0xa0dc5dba),
-            TOBN(0x47884109, 0x724a1380), TOBN(0x8a0369ab, 0x32fe9a04),
-            TOBN(0xea068d60, 0x8c927db8), TOBN(0xbf5f37cf, 0x94655741),
-            TOBN(0x47d402a2, 0x04b6c7ea), TOBN(0x4551c295, 0x6af259cb),
-            TOBN(0x698b71e7, 0xed77ee8b), TOBN(0xbddf7bd0, 0xf309d5c7),
-            TOBN(0x6201c22c, 0x34e780ca), TOBN(0xab04f7d8, 0x4c295ef4),
-            TOBN(0x1c947294, 0x4313a8ce), TOBN(0xe532e4ac, 0x92ca4cfe),
-            TOBN(0x89738f80, 0xd0a7a97a), TOBN(0xec088c88, 0xa580fd5b),
-            TOBN(0x612b1ecc, 0x42ce9e51), TOBN(0x8f9840fd, 0xb25fdd2a),
-            TOBN(0x3cda78c0, 0x01e7f839), TOBN(0x546b3d3a, 0xece05480),
-            TOBN(0x271719a9, 0x80d30916), TOBN(0x45497107, 0x584c20c4),
-            TOBN(0xaf8f9478, 0x5bc78608), TOBN(0x28c7d484, 0x277e2a4c),
-            TOBN(0xfce01767, 0x88a2ffe4), TOBN(0xdc506a35, 0x28e169a5),
-            TOBN(0x0ea10861, 0x7af9c93a), TOBN(0x1ed24361, 0x03fa0e08),
-            TOBN(0x96eaaa92, 0xa3d694e7), TOBN(0xc0f43b4d, 0xef50bc74),
-            TOBN(0xce6aa58c, 0x64114db4), TOBN(0x8218e8ea, 0x7c000fd4),
-            TOBN(0xac815dfb, 0x185f8844), TOBN(0xcd7e90cb, 0x1557abfb),
-            TOBN(0x23d16655, 0xafbfecdf), TOBN(0x80f3271f, 0x085cac4a),
-            TOBN(0x7fc39aa7, 0xd0e62f47), TOBN(0x88d519d1, 0x460a48e5),
-            TOBN(0x59559ac4, 0xd28f101e), TOBN(0x7981d9e9, 0xca9ae816),
-            TOBN(0x5c38652c, 0x9ac38203), TOBN(0x86eaf87f, 0x57657fe5),
-            TOBN(0x568fc472, 0xe21f5416), TOBN(0x2afff39c, 0xe7e597b5),
-            TOBN(0x3adbbb07, 0x256d4eab), TOBN(0x22598692, 0x8285ab89),
-            TOBN(0x35f8112a, 0x041caefe), TOBN(0x95df02e3, 0xa5064c8b),
-            TOBN(0x4d63356e, 0xc7004bf3), TOBN(0x230a08f4, 0xdb83c7de),
-            TOBN(0xca27b270, 0x8709a7b7), TOBN(0x0d1c4cc4, 0xcb9abd2d),
-            TOBN(0x8a0bc66e, 0x7550fee8), TOBN(0x369cd4c7, 0x9cf7247e),
-            TOBN(0x75562e84, 0x92b5b7e7), TOBN(0x8fed0da0, 0x5802af7b),
-            TOBN(0x6a7091c2, 0xe48fb889), TOBN(0x26882c13, 0x7b8a9d06),
-            TOBN(0xa2498663, 0x1b82a0e2), TOBN(0x844ed736, 0x3518152d),
-            TOBN(0x282f476f, 0xd86e27c7), TOBN(0xa04edaca, 0x04afefdc),
-            TOBN(0x8b256ebc, 0x6119e34d), TOBN(0x56a413e9, 0x0787d78b),
-        },
-        {
-            TOBN(0x82ee061d, 0x5a74be50), TOBN(0xe41781c4, 0xdea16ff5),
-            TOBN(0xe0b0c81e, 0x99bfc8a2), TOBN(0x624f4d69, 0x0b547e2d),
-            TOBN(0x3a83545d, 0xbdcc9ae4), TOBN(0x2573dbb6, 0x409b1e8e),
-            TOBN(0x482960c4, 0xa6c93539), TOBN(0xf01059ad, 0x5ae18798),
-            TOBN(0x715c9f97, 0x3112795f), TOBN(0xe8244437, 0x984e6ee1),
-            TOBN(0x55cb4858, 0xecb66bcd), TOBN(0x7c136735, 0xabaffbee),
-            TOBN(0x54661595, 0x5dbec38e), TOBN(0x51c0782c, 0x388ad153),
-            TOBN(0x9ba4c53a, 0xc6e0952f), TOBN(0x27e6782a, 0x1b21dfa8),
-            TOBN(0x682f903d, 0x4ed2dbc2), TOBN(0x0eba59c8, 0x7c3b2d83),
-            TOBN(0x8e9dc84d, 0x9c7e9335), TOBN(0x5f9b21b0, 0x0eb226d7),
-            TOBN(0xe33bd394, 0xaf267bae), TOBN(0xaa86cc25, 0xbe2e15ae),
-            TOBN(0x4f0bf67d, 0x6a8ec500), TOBN(0x5846aa44, 0xf9630658),
-            TOBN(0xfeb09740, 0xe2c2bf15), TOBN(0x627a2205, 0xa9e99704),
-            TOBN(0xec8d73d0, 0xc2fbc565), TOBN(0x223eed8f, 0xc20c8de8),
-            TOBN(0x1ee32583, 0xa8363b49), TOBN(0x1a0b6cb9, 0xc9c2b0a6),
-            TOBN(0x49f7c3d2, 0x90dbc85c), TOBN(0xa8dfbb97, 0x1ef4c1ac),
-            TOBN(0xafb34d4c, 0x65c7c2ab), TOBN(0x1d4610e7, 0xe2c5ea84),
-            TOBN(0x893f6d1b, 0x973c4ab5), TOBN(0xa3cdd7e9, 0x945ba5c4),
-            TOBN(0x60514983, 0x064417ee), TOBN(0x1459b23c, 0xad6bdf2b),
-            TOBN(0x23b2c341, 0x5cf726c3), TOBN(0x3a829635, 0x32d6354a),
-            TOBN(0x294f901f, 0xab192c18), TOBN(0xec5fcbfe, 0x7030164f),
-            TOBN(0xe2e2fcb7, 0xe2246ba6), TOBN(0x1e7c88b3, 0x221a1a0c),
-            TOBN(0x72c7dd93, 0xc92d88c5), TOBN(0x41c2148e, 0x1106fb59),
-            TOBN(0x547dd4f5, 0xa0f60f14), TOBN(0xed9b52b2, 0x63960f31),
-            TOBN(0x6c8349eb, 0xb0a5b358), TOBN(0xb154c5c2, 0x9e7e2ed6),
-            TOBN(0xcad5eccf, 0xeda462db), TOBN(0xf2d6dbe4, 0x2de66b69),
-            TOBN(0x426aedf3, 0x8665e5b2), TOBN(0x488a8513, 0x7b7f5723),
-            TOBN(0x15cc43b3, 0x8bcbb386), TOBN(0x27ad0af3, 0xd791d879),
-            TOBN(0xc16c236e, 0x846e364f), TOBN(0x7f33527c, 0xdea50ca0),
-            TOBN(0xc4810775, 0x0926b86d), TOBN(0x6c2a3609, 0x0598e70c),
-            TOBN(0xa6755e52, 0xf024e924), TOBN(0xe0fa07a4, 0x9db4afca),
-            TOBN(0x15c3ce7d, 0x66831790), TOBN(0x5b4ef350, 0xa6cbb0d6),
-            TOBN(0x2c4aafc4, 0xb6205969), TOBN(0x42563f02, 0xf6c7854f),
-            TOBN(0x016aced5, 0x1d983b48), TOBN(0xfeb356d8, 0x99949755),
-            TOBN(0x8c2a2c81, 0xd1a39bd7), TOBN(0x8f44340f, 0xe6934ae9),
-            TOBN(0x148cf91c, 0x447904da), TOBN(0x7340185f, 0x0f51a926),
-            TOBN(0x2f8f00fb, 0x7409ab46), TOBN(0x057e78e6, 0x80e289b2),
-            TOBN(0x03e5022c, 0xa888e5d1), TOBN(0x3c87111a, 0x9dede4e2),
-            TOBN(0x5b9b0e1c, 0x7809460b), TOBN(0xe751c852, 0x71c9abc7),
-            TOBN(0x8b944e28, 0xc7cc1dc9), TOBN(0x4f201ffa, 0x1d3cfa08),
-            TOBN(0x02fc905c, 0x3e6721ce), TOBN(0xd52d70da, 0xd0b3674c),
-            TOBN(0x5dc2e5ca, 0x18810da4), TOBN(0xa984b273, 0x5c69dd99),
-            TOBN(0x63b92527, 0x84de5ca4), TOBN(0x2f1c9872, 0xc852dec4),
-            TOBN(0x18b03593, 0xc2e3de09), TOBN(0x19d70b01, 0x9813dc2f),
-            TOBN(0x42806b2d, 0xa6dc1d29), TOBN(0xd3030009, 0xf871e144),
-            TOBN(0xa1feb333, 0xaaf49276), TOBN(0xb5583b9e, 0xc70bc04b),
-            TOBN(0x1db0be78, 0x95695f20), TOBN(0xfc841811, 0x89d012b5),
-            TOBN(0x6409f272, 0x05f61643), TOBN(0x40d34174, 0xd5883128),
-            TOBN(0xd79196f5, 0x67419833), TOBN(0x6059e252, 0x863b7b08),
-            TOBN(0x84da1817, 0x1c56700c), TOBN(0x5758ee56, 0xb28d3ec4),
-            TOBN(0x7da2771d, 0x013b0ea6), TOBN(0xfddf524b, 0x54c5e9b9),
-            TOBN(0x7df4faf8, 0x24305d80), TOBN(0x58f5c1bf, 0x3a97763f),
-            TOBN(0xa5af37f1, 0x7c696042), TOBN(0xd4cba22c, 0x4a2538de),
-            TOBN(0x211cb995, 0x9ea42600), TOBN(0xcd105f41, 0x7b069889),
-            TOBN(0xb1e1cf19, 0xddb81e74), TOBN(0x472f2d89, 0x5157b8ca),
-            TOBN(0x086fb008, 0xee9db885), TOBN(0x365cd570, 0x0f26d131),
-            TOBN(0x284b02bb, 0xa2be7053), TOBN(0xdcbbf7c6, 0x7ab9a6d6),
-            TOBN(0x4425559c, 0x20f7a530), TOBN(0x961f2dfa, 0x188767c8),
-            TOBN(0xe2fd9435, 0x70dc80c4), TOBN(0x104d6b63, 0xf0784120),
-            TOBN(0x7f592bc1, 0x53567122), TOBN(0xf6bc1246, 0xf688ad77),
-            TOBN(0x05214c05, 0x0f15dde9), TOBN(0xa47a76a8, 0x0d5f2b82),
-            TOBN(0xbb254d30, 0x62e82b62), TOBN(0x11a05fe0, 0x3ec955ee),
-            TOBN(0x7eaff46e, 0x9d529b36), TOBN(0x55ab1301, 0x8f9e3df6),
-            TOBN(0xc463e371, 0x99317698), TOBN(0xfd251438, 0xccda47ad),
-            TOBN(0xca9c3547, 0x23d695ea), TOBN(0x48ce626e, 0x16e589b5),
-            TOBN(0x6b5b64c7, 0xb187d086), TOBN(0xd02e1794, 0xb2207948),
-            TOBN(0x8b58e98f, 0x7198111d), TOBN(0x90ca6305, 0xdcf9c3cc),
-            TOBN(0x5691fe72, 0xf34089b0), TOBN(0x60941af1, 0xfc7c80ff),
-            TOBN(0xa09bc0a2, 0x22eb51e5), TOBN(0xc0bb7244, 0xaa9cf09a),
-            TOBN(0x36a8077f, 0x80159f06), TOBN(0x8b5c989e, 0xdddc560e),
-            TOBN(0x19d2f316, 0x512e1f43), TOBN(0x02eac554, 0xad08ff62),
-            TOBN(0x012ab84c, 0x07d20b4e), TOBN(0x37d1e115, 0xd6d4e4e1),
-            TOBN(0xb6443e1a, 0xab7b19a8), TOBN(0xf08d067e, 0xdef8cd45),
-            TOBN(0x63adf3e9, 0x685e03da), TOBN(0xcf15a10e, 0x4792b916),
-            TOBN(0xf44bcce5, 0xb738a425), TOBN(0xebe131d5, 0x9636b2fd),
-            TOBN(0x94068841, 0x7850d605), TOBN(0x09684eaa, 0xb40d749d),
-            TOBN(0x8c3c669c, 0x72ba075b), TOBN(0x89f78b55, 0xba469015),
-            TOBN(0x5706aade, 0x3e9f8ba8), TOBN(0x6d8bd565, 0xb32d7ed7),
-            TOBN(0x25f4e63b, 0x805f08d6), TOBN(0x7f48200d, 0xc3bcc1b5),
-            TOBN(0x4e801968, 0xb025d847), TOBN(0x74afac04, 0x87cbe0a8),
-            TOBN(0x43ed2c2b, 0x7e63d690), TOBN(0xefb6bbf0, 0x0223cdb8),
-            TOBN(0x4fec3cae, 0x2884d3fe), TOBN(0x065ecce6, 0xd75e25a4),
-            TOBN(0x6c2294ce, 0x69f79071), TOBN(0x0d9a8e5f, 0x044b8666),
-            TOBN(0x5009f238, 0x17b69d8f), TOBN(0x3c29f8fe, 0xc5dfdaf7),
-            TOBN(0x9067528f, 0xebae68c4), TOBN(0x5b385632, 0x30c5ba21),
-            TOBN(0x540df119, 0x1fdd1aec), TOBN(0xcf37825b, 0xcfba4c78),
-            TOBN(0x77eff980, 0xbeb11454), TOBN(0x40a1a991, 0x60c1b066),
-            TOBN(0xe8018980, 0xf889a1c7), TOBN(0xb9c52ae9, 0x76c24be0),
-            TOBN(0x05fbbcce, 0x45650ef4), TOBN(0xae000f10, 0x8aa29ac7),
-            TOBN(0x884b7172, 0x4f04c470), TOBN(0x7cd4fde2, 0x19bb5c25),
-            TOBN(0x6477b22a, 0xe8840869), TOBN(0xa8868859, 0x5fbd0686),
-            TOBN(0xf23cc02e, 0x1116dfba), TOBN(0x76cd563f, 0xd87d7776),
-            TOBN(0xe2a37598, 0xa9d82abf), TOBN(0x5f188ccb, 0xe6c170f5),
-            TOBN(0x81682200, 0x5066b087), TOBN(0xda22c212, 0xc7155ada),
-            TOBN(0x151e5d3a, 0xfbddb479), TOBN(0x4b606b84, 0x6d715b99),
-            TOBN(0x4a73b54b, 0xf997cb2e), TOBN(0x9a1bfe43, 0x3ecd8b66),
-            TOBN(0x1c312809, 0x2a67d48a), TOBN(0xcd6a671e, 0x031fa9e2),
-            TOBN(0xbec3312a, 0x0e43a34a), TOBN(0x1d935639, 0x55ef47d3),
-            TOBN(0x5ea02489, 0x8fea73ea), TOBN(0x8247b364, 0xa035afb2),
-            TOBN(0xb58300a6, 0x5265b54c), TOBN(0x3286662f, 0x722c7148),
-            TOBN(0xb77fd76b, 0xb4ec4c20), TOBN(0xf0a12fa7, 0x0f3fe3fd),
-            TOBN(0xf845bbf5, 0x41d8c7e8), TOBN(0xe4d969ca, 0x5ec10aa8),
-            TOBN(0x4c0053b7, 0x43e232a3), TOBN(0xdc7a3fac, 0x37f8a45a),
-            TOBN(0x3c4261c5, 0x20d81c8f), TOBN(0xfd4b3453, 0xb00eab00),
-            TOBN(0x76d48f86, 0xd36e3062), TOBN(0x626c5277, 0xa143ff02),
-            TOBN(0x538174de, 0xaf76f42e), TOBN(0x2267aa86, 0x6407ceac),
-            TOBN(0xfad76351, 0x72e572d5), TOBN(0xab861af7, 0xba7330eb),
-            TOBN(0xa0a1c8c7, 0x418d8657), TOBN(0x988821cb, 0x20289a52),
-            TOBN(0x79732522, 0xcccc18ad), TOBN(0xaadf3f8d, 0xf1a6e027),
-            TOBN(0xf7382c93, 0x17c2354d), TOBN(0x5ce1680c, 0xd818b689),
-            TOBN(0x359ebbfc, 0xd9ecbee9), TOBN(0x4330689c, 0x1cae62ac),
-            TOBN(0xb55ce5b4, 0xc51ac38a), TOBN(0x7921dfea, 0xfe238ee8),
-            TOBN(0x3972bef8, 0x271d1ca5), TOBN(0x3e423bc7, 0xe8aabd18),
-            TOBN(0x57b09f3f, 0x44a3e5e3), TOBN(0x5da886ae, 0x7b444d66),
-            TOBN(0x68206634, 0xa9964375), TOBN(0x356a2fa3, 0x699cd0ff),
-            TOBN(0xaf0faa24, 0xdba515e9), TOBN(0x536e1f5c, 0xb321d79a),
-            TOBN(0xd3b9913a, 0x5c04e4ea), TOBN(0xd549dcfe, 0xd6f11513),
-            TOBN(0xee227bf5, 0x79fd1d94), TOBN(0x9f35afee, 0xb43f2c67),
-            TOBN(0xd2638d24, 0xf1314f53), TOBN(0x62baf948, 0xcabcd822),
-            TOBN(0x5542de29, 0x4ef48db0), TOBN(0xb3eb6a04, 0xfc5f6bb2),
-            TOBN(0x23c110ae, 0x1208e16a), TOBN(0x1a4d15b5, 0xf8363e24),
-            TOBN(0x30716844, 0x164be00b), TOBN(0xa8e24824, 0xf6f4690d),
-            TOBN(0x548773a2, 0x90b170cf), TOBN(0xa1bef331, 0x42f191f4),
-            TOBN(0x70f418d0, 0x9247aa97), TOBN(0xea06028e, 0x48be9147),
-            TOBN(0xe13122f3, 0xdbfb894e), TOBN(0xbe9b79f6, 0xce274b18),
-            TOBN(0x85a49de5, 0xca58aadf), TOBN(0x24957758, 0x11487351),
-            TOBN(0x111def61, 0xbb939099), TOBN(0x1d6a974a, 0x26d13694),
-            TOBN(0x4474b4ce, 0xd3fc253b), TOBN(0x3a1485e6, 0x4c5db15e),
-            TOBN(0xe79667b4, 0x147c15b4), TOBN(0xe34f553b, 0x7bc61301),
-            TOBN(0x032b80f8, 0x17094381), TOBN(0x55d8bafd, 0x723eaa21),
-            TOBN(0x5a987995, 0xf1c0e74e), TOBN(0x5a9b292e, 0xebba289c),
-            TOBN(0x413cd4b2, 0xeb4c8251), TOBN(0x98b5d243, 0xd162db0a),
-            TOBN(0xbb47bf66, 0x68342520), TOBN(0x08d68949, 0xbaa862d1),
-            TOBN(0x11f349c7, 0xe906abcd), TOBN(0x454ce985, 0xed7bf00e),
-            TOBN(0xacab5c9e, 0xb55b803b), TOBN(0xb03468ea, 0x31e3c16d),
-            TOBN(0x5c24213d, 0xd273bf12), TOBN(0x211538eb, 0x71587887),
-            TOBN(0x198e4a2f, 0x731dea2d), TOBN(0xd5856cf2, 0x74ed7b2a),
-            TOBN(0x86a632eb, 0x13a664fe), TOBN(0x932cd909, 0xbda41291),
-            TOBN(0x850e95d4, 0xc0c4ddc0), TOBN(0xc0f422f8, 0x347fc2c9),
-            TOBN(0xe68cbec4, 0x86076bcb), TOBN(0xf9e7c0c0, 0xcd6cd286),
-            TOBN(0x65994ddb, 0x0f5f27ca), TOBN(0xe85461fb, 0xa80d59ff),
-            TOBN(0xff05481a, 0x66601023), TOBN(0xc665427a, 0xfc9ebbfb),
-            TOBN(0xb0571a69, 0x7587fd52), TOBN(0x935289f8, 0x8d49efce),
-            TOBN(0x61becc60, 0xea420688), TOBN(0xb22639d9, 0x13a786af),
-            TOBN(0x1a8e6220, 0x361ecf90), TOBN(0x001f23e0, 0x25506463),
-            TOBN(0xe4ae9b5d, 0x0a5c2b79), TOBN(0xebc9cdad, 0xd8149db5),
-            TOBN(0xb33164a1, 0x934aa728), TOBN(0x750eb00e, 0xae9b60f3),
-            TOBN(0x5a91615b, 0x9b9cfbfd), TOBN(0x97015cbf, 0xef45f7f6),
-            TOBN(0xb462c4a5, 0xbf5151df), TOBN(0x21adcc41, 0xb07118f2),
-            TOBN(0xd60c545b, 0x043fa42c), TOBN(0xfc21aa54, 0xe96be1ab),
-            TOBN(0xe84bc32f, 0x4e51ea80), TOBN(0x3dae45f0, 0x259b5d8d),
-            TOBN(0xbb73c7eb, 0xc38f1b5e), TOBN(0xe405a74a, 0xe8ae617d),
-            TOBN(0xbb1ae9c6, 0x9f1c56bd), TOBN(0x8c176b98, 0x49f196a4),
-            TOBN(0xc448f311, 0x6875092b), TOBN(0xb5afe3de, 0x9f976033),
-            TOBN(0xa8dafd49, 0x145813e5), TOBN(0x687fc4d9, 0xe2b34226),
-            TOBN(0xf2dfc92d, 0x4c7ff57f), TOBN(0x004e3fc1, 0x401f1b46),
-            TOBN(0x5afddab6, 0x1430c9ab), TOBN(0x0bdd41d3, 0x2238e997),
-            TOBN(0xf0947430, 0x418042ae), TOBN(0x71f9adda, 0xcdddc4cb),
-            TOBN(0x7090c016, 0xc52dd907), TOBN(0xd9bdf44d, 0x29e2047f),
-            TOBN(0xe6f1fe80, 0x1b1011a6), TOBN(0xb63accbc, 0xd9acdc78),
-            TOBN(0xcfc7e235, 0x1272a95b), TOBN(0x0c667717, 0xa6276ac8),
-            TOBN(0x3c0d3709, 0xe2d7eef7), TOBN(0x5add2b06, 0x9a685b3e),
-            TOBN(0x363ad32d, 0x14ea5d65), TOBN(0xf8e01f06, 0x8d7dd506),
-            TOBN(0xc9ea2213, 0x75b4aac6), TOBN(0xed2a2bf9, 0x0d353466),
-            TOBN(0x439d79b5, 0xe9d3a7c3), TOBN(0x8e0ee5a6, 0x81b7f34b),
-            TOBN(0xcf3dacf5, 0x1dc4ba75), TOBN(0x1d3d1773, 0xeb3310c7),
-            TOBN(0xa8e67112, 0x7747ae83), TOBN(0x31f43160, 0x197d6b40),
-            TOBN(0x0521ccee, 0xcd961400), TOBN(0x67246f11, 0xf6535768),
-            TOBN(0x702fcc5a, 0xef0c3133), TOBN(0x247cc45d, 0x7e16693b),
-            TOBN(0xfd484e49, 0xc729b749), TOBN(0x522cef7d, 0xb218320f),
-            TOBN(0xe56ef405, 0x59ab93b3), TOBN(0x225fba11, 0x9f181071),
-            TOBN(0x33bd6595, 0x15330ed0), TOBN(0xc4be69d5, 0x1ddb32f7),
-            TOBN(0x264c7668, 0x0448087c), TOBN(0xac30903f, 0x71432dae),
-            TOBN(0x3851b266, 0x00f9bf47), TOBN(0x400ed311, 0x6cdd6d03),
-            TOBN(0x045e79fe, 0xf8fd2424), TOBN(0xfdfd974a, 0xfa6da98b),
-            TOBN(0x45c9f641, 0x0c1e673a), TOBN(0x76f2e733, 0x5b2c5168),
-            TOBN(0x1adaebb5, 0x2a601753), TOBN(0xb286514c, 0xc57c2d49),
-            TOBN(0xd8769670, 0x1e0bfd24), TOBN(0x950c547e, 0x04478922),
-            TOBN(0xd1d41969, 0xe5d32bfe), TOBN(0x30bc1472, 0x750d6c3e),
-            TOBN(0x8f3679fe, 0xe0e27f3a), TOBN(0x8f64a7dc, 0xa4a6ee0c),
-            TOBN(0x2fe59937, 0x633dfb1f), TOBN(0xea82c395, 0x977f2547),
-            TOBN(0xcbdfdf1a, 0x661ea646), TOBN(0xc7ccc591, 0xb9085451),
-            TOBN(0x82177962, 0x81761e13), TOBN(0xda57596f, 0x9196885c),
-            TOBN(0xbc17e849, 0x28ffbd70), TOBN(0x1e6e0a41, 0x2671d36f),
-            TOBN(0x61ae872c, 0x4152fcf5), TOBN(0x441c87b0, 0x9e77e754),
-            TOBN(0xd0799dd5, 0xa34dff09), TOBN(0x766b4e44, 0x88a6b171),
-            TOBN(0xdc06a512, 0x11f1c792), TOBN(0xea02ae93, 0x4be35c3e),
-            TOBN(0xe5ca4d6d, 0xe90c469e), TOBN(0x4df4368e, 0x56e4ff5c),
-            TOBN(0x7817acab, 0x4baef62e), TOBN(0x9f5a2202, 0xa85b91e8),
-            TOBN(0x9666ebe6, 0x6ce57610), TOBN(0x32ad31f3, 0xf73bfe03),
-            TOBN(0x628330a4, 0x25bcf4d6), TOBN(0xea950593, 0x515056e6),
-            TOBN(0x59811c89, 0xe1332156), TOBN(0xc89cf1fe, 0x8c11b2d7),
-            TOBN(0x75b63913, 0x04e60cc0), TOBN(0xce811e8d, 0x4625d375),
-            TOBN(0x030e43fc, 0x2d26e562), TOBN(0xfbb30b4b, 0x608d36a0),
-            TOBN(0x634ff82c, 0x48528118), TOBN(0x7c6fe085, 0xcd285911),
-            TOBN(0x7f2830c0, 0x99358f28), TOBN(0x2e60a95e, 0x665e6c09),
-            TOBN(0x08407d3d, 0x9b785dbf), TOBN(0x530889ab, 0xa759bce7),
-            TOBN(0xf228e0e6, 0x52f61239), TOBN(0x2b6d1461, 0x6879be3c),
-            TOBN(0xe6902c04, 0x51a7bbf7), TOBN(0x30ad99f0, 0x76f24a64),
-            TOBN(0x66d9317a, 0x98bc6da0), TOBN(0xf4f877f3, 0xcb596ac0),
-            TOBN(0xb05ff62d, 0x4c44f119), TOBN(0x4555f536, 0xe9b77416),
-            TOBN(0xc7c0d059, 0x8caed63b), TOBN(0x0cd2b7ce, 0xc358b2a9),
-            TOBN(0x3f33287b, 0x46945fa3), TOBN(0xf8785b20, 0xd67c8791),
-            TOBN(0xc54a7a61, 0x9637bd08), TOBN(0x54d4598c, 0x18be79d7),
-            TOBN(0x889e5acb, 0xc46d7ce1), TOBN(0x9a515bb7, 0x8b085877),
-            TOBN(0xfac1a03d, 0x0b7a5050), TOBN(0x7d3e738a, 0xf2926035),
-            TOBN(0x861cc2ce, 0x2a6cb0eb), TOBN(0x6f2e2955, 0x8f7adc79),
-            TOBN(0x61c4d451, 0x33016376), TOBN(0xd9fd2c80, 0x5ad59090),
-            TOBN(0xe5a83738, 0xb2b836a1), TOBN(0x855b41a0, 0x7c0d6622),
-            TOBN(0x186fe317, 0x7cc19af1), TOBN(0x6465c1ff, 0xfdd99acb),
-            TOBN(0x46e5c23f, 0x6974b99e), TOBN(0x75a7cf8b, 0xa2717cbe),
-            TOBN(0x4d2ebc3f, 0x062be658), TOBN(0x094b4447, 0x5f209c98),
-            TOBN(0x4af285ed, 0xb940cb5a), TOBN(0x6706d792, 0x7cc82f10),
-            TOBN(0xc8c8776c, 0x030526fa), TOBN(0xfa8e6f76, 0xa0da9140),
-            TOBN(0x77ea9d34, 0x591ee4f0), TOBN(0x5f46e337, 0x40274166),
-            TOBN(0x1bdf98bb, 0xea671457), TOBN(0xd7c08b46, 0x862a1fe2),
-            TOBN(0x46cc303c, 0x1c08ad63), TOBN(0x99543440, 0x4c845e7b),
-            TOBN(0x1b8fbdb5, 0x48f36bf7), TOBN(0x5b82c392, 0x8c8273a7),
-            TOBN(0x08f712c4, 0x928435d5), TOBN(0x071cf0f1, 0x79330380),
-            TOBN(0xc74c2d24, 0xa8da054a), TOBN(0xcb0e7201, 0x43c46b5c),
-            TOBN(0x0ad7337a, 0xc0b7eff3), TOBN(0x8552225e, 0xc5e48b3c),
-            TOBN(0xe6f78b0c, 0x73f13a5f), TOBN(0x5e70062e, 0x82349cbe),
-            TOBN(0x6b8d5048, 0xe7073969), TOBN(0x392d2a29, 0xc33cb3d2),
-            TOBN(0xee4f727c, 0x4ecaa20f), TOBN(0xa068c99e, 0x2ccde707),
-            TOBN(0xfcd5651f, 0xb87a2913), TOBN(0xea3e3c15, 0x3cc252f0),
-            TOBN(0x777d92df, 0x3b6cd3e4), TOBN(0x7a414143, 0xc5a732e7),
-            TOBN(0xa895951a, 0xa71ff493), TOBN(0xfe980c92, 0xbbd37cf6),
-            TOBN(0x45bd5e64, 0xdecfeeff), TOBN(0x910dc2a9, 0xa44c43e9),
-            TOBN(0xcb403f26, 0xcca9f54d), TOBN(0x928bbdfb, 0x9303f6db),
-            TOBN(0x3c37951e, 0xa9eee67c), TOBN(0x3bd61a52, 0xf79961c3),
-            TOBN(0x09a238e6, 0x395c9a79), TOBN(0x6940ca2d, 0x61eb352d),
-            TOBN(0x7d1e5c5e, 0xc1875631), TOBN(0x1e19742c, 0x1e1b20d1),
-            TOBN(0x4633d908, 0x23fc2e6e), TOBN(0xa76e29a9, 0x08959149),
-            TOBN(0x61069d9c, 0x84ed7da5), TOBN(0x0baa11cf, 0x5dbcad51),
-            TOBN(0xd01eec64, 0x961849da), TOBN(0x93b75f1f, 0xaf3d8c28),
-            TOBN(0x57bc4f9f, 0x1ca2ee44), TOBN(0x5a26322d, 0x00e00558),
-            TOBN(0x1888d658, 0x61a023ef), TOBN(0x1d72aab4, 0xb9e5246e),
-            TOBN(0xa9a26348, 0xe5563ec0), TOBN(0xa0971963, 0xc3439a43),
-            TOBN(0x567dd54b, 0xadb9b5b7), TOBN(0x73fac1a1, 0xc45a524b),
-            TOBN(0x8fe97ef7, 0xfe38e608), TOBN(0x608748d2, 0x3f384f48),
-            TOBN(0xb0571794, 0xc486094f), TOBN(0x869254a3, 0x8bf3a8d6),
-            TOBN(0x148a8dd1, 0x310b0e25), TOBN(0x99ab9f3f, 0x9aa3f7d8),
-            TOBN(0x0927c68a, 0x6706c02e), TOBN(0x22b5e76c, 0x69790e6c),
-            TOBN(0x6c325260, 0x6c71376c), TOBN(0x53a57690, 0x09ef6657),
-            TOBN(0x8d63f852, 0xedffcf3a), TOBN(0xb4d2ed04, 0x3c0a6f55),
-            TOBN(0xdb3aa8de, 0x12519b9e), TOBN(0x5d38e9c4, 0x1e0a569a),
-            TOBN(0x871528bf, 0x303747e2), TOBN(0xa208e77c, 0xf5b5c18d),
-            TOBN(0x9d129c88, 0xca6bf923), TOBN(0xbcbf197f, 0xbf02839f),
-            TOBN(0x9b9bf030, 0x27323194), TOBN(0x3b055a8b, 0x339ca59d),
-            TOBN(0xb46b2312, 0x0f669520), TOBN(0x19789f1f, 0x497e5f24),
-            TOBN(0x9c499468, 0xaaf01801), TOBN(0x72ee1190, 0x8b69d59c),
-            TOBN(0x8bd39595, 0xacf4c079), TOBN(0x3ee11ece, 0x8e0cd048),
-            TOBN(0xebde86ec, 0x1ed66f18), TOBN(0x225d906b, 0xd61fce43),
-            TOBN(0x5cab07d6, 0xe8bed74d), TOBN(0x16e4617f, 0x27855ab7),
-            TOBN(0x6568aadd, 0xb2fbc3dd), TOBN(0xedb5484f, 0x8aeddf5b),
-            TOBN(0x878f20e8, 0x6dcf2fad), TOBN(0x3516497c, 0x615f5699),
-        },
-        {
-            TOBN(0xef0a3fec, 0xfa181e69), TOBN(0x9ea02f81, 0x30d69a98),
-            TOBN(0xb2e9cf8e, 0x66eab95d), TOBN(0x520f2beb, 0x24720021),
-            TOBN(0x621c540a, 0x1df84361), TOBN(0x12037721, 0x71fa6d5d),
-            TOBN(0x6e3c7b51, 0x0ff5f6ff), TOBN(0x817a069b, 0xabb2bef3),
-            TOBN(0x83572fb6, 0xb294cda6), TOBN(0x6ce9bf75, 0xb9039f34),
-            TOBN(0x20e012f0, 0x095cbb21), TOBN(0xa0aecc1b, 0xd063f0da),
-            TOBN(0x57c21c3a, 0xf02909e5), TOBN(0xc7d59ecf, 0x48ce9cdc),
-            TOBN(0x2732b844, 0x8ae336f8), TOBN(0x056e3723, 0x3f4f85f4),
-            TOBN(0x8a10b531, 0x89e800ca), TOBN(0x50fe0c17, 0x145208fd),
-            TOBN(0x9e43c0d3, 0xb714ba37), TOBN(0x427d200e, 0x34189acc),
-            TOBN(0x05dee24f, 0xe616e2c0), TOBN(0x9c25f4c8, 0xee1854c1),
-            TOBN(0x4d3222a5, 0x8f342a73), TOBN(0x0807804f, 0xa027c952),
-            TOBN(0xc222653a, 0x4f0d56f3), TOBN(0x961e4047, 0xca28b805),
-            TOBN(0x2c03f8b0, 0x4a73434b), TOBN(0x4c966787, 0xab712a19),
-            TOBN(0xcc196c42, 0x864fee42), TOBN(0xc1be93da, 0x5b0ece5c),
-            TOBN(0xa87d9f22, 0xc131c159), TOBN(0x2bb6d593, 0xdce45655),
-            TOBN(0x22c49ec9, 0xb809b7ce), TOBN(0x8a41486b, 0xe2c72c2c),
-            TOBN(0x813b9420, 0xfea0bf36), TOBN(0xb3d36ee9, 0xa66dac69),
-            TOBN(0x6fddc08a, 0x328cc987), TOBN(0x0a3bcd2c, 0x3a326461),
-            TOBN(0x7103c49d, 0xd810dbba), TOBN(0xf9d81a28, 0x4b78a4c4),
-            TOBN(0x3de865ad, 0xe4d55941), TOBN(0xdedafa5e, 0x30384087),
-            TOBN(0x6f414abb, 0x4ef18b9b), TOBN(0x9ee9ea42, 0xfaee5268),
-            TOBN(0x260faa16, 0x37a55a4a), TOBN(0xeb19a514, 0x015f93b9),
-            TOBN(0x51d7ebd2, 0x9e9c3598), TOBN(0x523fc56d, 0x1932178e),
-            TOBN(0x501d070c, 0xb98fe684), TOBN(0xd60fbe9a, 0x124a1458),
-            TOBN(0xa45761c8, 0x92bc6b3f), TOBN(0xf5384858, 0xfe6f27cb),
-            TOBN(0x4b0271f7, 0xb59e763b), TOBN(0x3d4606a9, 0x5b5a8e5e),
-            TOBN(0x1eda5d9b, 0x05a48292), TOBN(0xda7731d0, 0xe6fec446),
-            TOBN(0xa3e33693, 0x90d45871), TOBN(0xe9764040, 0x06166d8d),
-            TOBN(0xb5c33682, 0x89a90403), TOBN(0x4bd17983, 0x72f1d637),
-            TOBN(0xa616679e, 0xd5d2c53a), TOBN(0x5ec4bcd8, 0xfdcf3b87),
-            TOBN(0xae6d7613, 0xb66a694e), TOBN(0x7460fc76, 0xe3fc27e5),
-            TOBN(0x70469b82, 0x95caabee), TOBN(0xde024ca5, 0x889501e3),
-            TOBN(0x6bdadc06, 0x076ed265), TOBN(0x0cb1236b, 0x5a0ef8b2),
-            TOBN(0x4065ddbf, 0x0972ebf9), TOBN(0xf1dd3875, 0x22aca432),
-            TOBN(0xa88b97cf, 0x744aff76), TOBN(0xd1359afd, 0xfe8e3d24),
-            TOBN(0x52a3ba2b, 0x91502cf3), TOBN(0x2c3832a8, 0x084db75d),
-            TOBN(0x04a12ddd, 0xde30b1c9), TOBN(0x7802eabc, 0xe31fd60c),
-            TOBN(0x33707327, 0xa37fddab), TOBN(0x65d6f2ab, 0xfaafa973),
-            TOBN(0x3525c5b8, 0x11e6f91a), TOBN(0x76aeb0c9, 0x5f46530b),
-            TOBN(0xe8815ff6, 0x2f93a675), TOBN(0xa6ec9684, 0x05f48679),
-            TOBN(0x6dcbb556, 0x358ae884), TOBN(0x0af61472, 0xe19e3873),
-            TOBN(0x72334372, 0xa5f696be), TOBN(0xc65e57ea, 0x6f22fb70),
-            TOBN(0x268da30c, 0x946cea90), TOBN(0x136a8a87, 0x65681b2a),
-            TOBN(0xad5e81dc, 0x0f9f44d4), TOBN(0xf09a6960, 0x2c46585a),
-            TOBN(0xd1649164, 0xc447d1b1), TOBN(0x3b4b36c8, 0x879dc8b1),
-            TOBN(0x20d4177b, 0x3b6b234c), TOBN(0x096a2505, 0x1730d9d0),
-            TOBN(0x0611b9b8, 0xef80531d), TOBN(0xba904b3b, 0x64bb495d),
-            TOBN(0x1192d9d4, 0x93a3147a), TOBN(0x9f30a5dc, 0x9a565545),
-            TOBN(0x90b1f9cb, 0x6ef07212), TOBN(0x29958546, 0x0d87fc13),
-            TOBN(0xd3323eff, 0xc17db9ba), TOBN(0xcb18548c, 0xcb1644a8),
-            TOBN(0x18a306d4, 0x4f49ffbc), TOBN(0x28d658f1, 0x4c2e8684),
-            TOBN(0x44ba60cd, 0xa99f8c71), TOBN(0x67b7abdb, 0x4bf742ff),
-            TOBN(0x66310f9c, 0x914b3f99), TOBN(0xae430a32, 0xf412c161),
-            TOBN(0x1e6776d3, 0x88ace52f), TOBN(0x4bc0fa24, 0x52d7067d),
-            TOBN(0x03c286aa, 0x8f07cd1b), TOBN(0x4cb8f38c, 0xa985b2c1),
-            TOBN(0x83ccbe80, 0x8c3bff36), TOBN(0x005a0bd2, 0x5263e575),
-            TOBN(0x460d7dda, 0x259bdcd1), TOBN(0x4a1c5642, 0xfa5cab6b),
-            TOBN(0x2b7bdbb9, 0x9fe4fc88), TOBN(0x09418e28, 0xcc97bbb5),
-            TOBN(0xd8274fb4, 0xa12321ae), TOBN(0xb137007d, 0x5c87b64e),
-            TOBN(0x80531fe1, 0xc63c4962), TOBN(0x50541e89, 0x981fdb25),
-            TOBN(0xdc1291a1, 0xfd4c2b6b), TOBN(0xc0693a17, 0xa6df4fca),
-            TOBN(0xb2c4604e, 0x0117f203), TOBN(0x245f1963, 0x0a99b8d0),
-            TOBN(0xaedc20aa, 0xc6212c44), TOBN(0xb1ed4e56, 0x520f52a8),
-            TOBN(0xfe48f575, 0xf8547be3), TOBN(0x0a7033cd, 0xa9e45f98),
-            TOBN(0x4b45d3a9, 0x18c50100), TOBN(0xb2a6cd6a, 0xa61d41da),
-            TOBN(0x60bbb4f5, 0x57933c6b), TOBN(0xa7538ebd, 0x2b0d7ffc),
-            TOBN(0x9ea3ab8d, 0x8cd626b6), TOBN(0x8273a484, 0x3601625a),
-            TOBN(0x88859845, 0x0168e508), TOBN(0x8cbc9bb2, 0x99a94abd),
-            TOBN(0x713ac792, 0xfab0a671), TOBN(0xa3995b19, 0x6c9ebffc),
-            TOBN(0xe711668e, 0x1239e152), TOBN(0x56892558, 0xbbb8dff4),
-            TOBN(0x8bfc7dab, 0xdbf17963), TOBN(0x5b59fe5a, 0xb3de1253),
-            TOBN(0x7e3320eb, 0x34a9f7ae), TOBN(0xe5e8cf72, 0xd751efe4),
-            TOBN(0x7ea003bc, 0xd9be2f37), TOBN(0xc0f551a0, 0xb6c08ef7),
-            TOBN(0x56606268, 0x038f6725), TOBN(0x1dd38e35, 0x6d92d3b6),
-            TOBN(0x07dfce7c, 0xc3cbd686), TOBN(0x4e549e04, 0x651c5da8),
-            TOBN(0x4058f93b, 0x08b19340), TOBN(0xc2fae6f4, 0xcac6d89d),
-            TOBN(0x4bad8a8c, 0x8f159cc7), TOBN(0x0ddba4b3, 0xcb0b601c),
-            TOBN(0xda4fc7b5, 0x1dd95f8c), TOBN(0x1d163cd7, 0xcea5c255),
-            TOBN(0x30707d06, 0x274a8c4c), TOBN(0x79d9e008, 0x2802e9ce),
-            TOBN(0x02a29ebf, 0xe6ddd505), TOBN(0x37064e74, 0xb50bed1a),
-            TOBN(0x3f6bae65, 0xa7327d57), TOBN(0x3846f5f1, 0xf83920bc),
-            TOBN(0x87c37491, 0x60df1b9b), TOBN(0x4cfb2895, 0x2d1da29f),
-            TOBN(0x10a478ca, 0x4ed1743c), TOBN(0x390c6030, 0x3edd47c6),
-            TOBN(0x8f3e5312, 0x8c0a78de), TOBN(0xccd02bda, 0x1e85df70),
-            TOBN(0xd6c75c03, 0xa61b6582), TOBN(0x0762921c, 0xfc0eebd1),
-            TOBN(0xd34d0823, 0xd85010c0), TOBN(0xd73aaacb, 0x0044cf1f),
-            TOBN(0xfb4159bb, 0xa3b5e78a), TOBN(0x2287c7f7, 0xe5826f3f),
-            TOBN(0x4aeaf742, 0x580b1a01), TOBN(0xf080415d, 0x60423b79),
-            TOBN(0xe12622cd, 0xa7dea144), TOBN(0x49ea4996, 0x59d62472),
-            TOBN(0xb42991ef, 0x571f3913), TOBN(0x0610f214, 0xf5b25a8a),
-            TOBN(0x47adc585, 0x30b79e8f), TOBN(0xf90e3df6, 0x07a065a2),
-            TOBN(0x5d0a5deb, 0x43e2e034), TOBN(0x53fb5a34, 0x444024aa),
-            TOBN(0xa8628c68, 0x6b0c9f7f), TOBN(0x9c69c29c, 0xac563656),
-            TOBN(0x5a231feb, 0xbace47b6), TOBN(0xbdce0289, 0x9ea5a2ec),
-            TOBN(0x05da1fac, 0x9463853e), TOBN(0x96812c52, 0x509e78aa),
-            TOBN(0xd3fb5771, 0x57151692), TOBN(0xeb2721f8, 0xd98e1c44),
-            TOBN(0xc0506087, 0x32399be1), TOBN(0xda5a5511, 0xd979d8b8),
-            TOBN(0x737ed55d, 0xc6f56780), TOBN(0xe20d3004, 0x0dc7a7f4),
-            TOBN(0x02ce7301, 0xf5941a03), TOBN(0x91ef5215, 0xed30f83a),
-            TOBN(0x28727fc1, 0x4092d85f), TOBN(0x72d223c6, 0x5c49e41a),
-            TOBN(0xa7cf30a2, 0xba6a4d81), TOBN(0x7c086209, 0xb030d87d),
-            TOBN(0x04844c7d, 0xfc588b09), TOBN(0x728cd499, 0x5874bbb0),
-            TOBN(0xcc1281ee, 0xe84c0495), TOBN(0x0769b5ba, 0xec31958f),
-            TOBN(0x665c228b, 0xf99c2471), TOBN(0xf2d8a11b, 0x191eb110),
-            TOBN(0x4594f494, 0xd36d7024), TOBN(0x482ded8b, 0xcdcb25a1),
-            TOBN(0xc958a9d8, 0xdadd4885), TOBN(0x7004477e, 0xf1d2b547),
-            TOBN(0x0a45f6ef, 0x2a0af550), TOBN(0x4fc739d6, 0x2f8d6351),
-            TOBN(0x75cdaf27, 0x786f08a9), TOBN(0x8700bb26, 0x42c2737f),
-            TOBN(0x855a7141, 0x1c4e2670), TOBN(0x810188c1, 0x15076fef),
-            TOBN(0xc251d0c9, 0xabcd3297), TOBN(0xae4c8967, 0xf48108eb),
-            TOBN(0xbd146de7, 0x18ceed30), TOBN(0xf9d4f07a, 0xc986bced),
-            TOBN(0x5ad98ed5, 0x83fa1e08), TOBN(0x7780d33e, 0xbeabd1fb),
-            TOBN(0xe330513c, 0x903b1196), TOBN(0xba11de9e, 0xa47bc8c4),
-            TOBN(0x684334da, 0x02c2d064), TOBN(0x7ecf360d, 0xa48de23b),
-            TOBN(0x57a1b474, 0x0a9089d8), TOBN(0xf28fa439, 0xff36734c),
-            TOBN(0xf2a482cb, 0xea4570b3), TOBN(0xee65d68b, 0xa5ebcee9),
-            TOBN(0x988d0036, 0xb9694cd5), TOBN(0x53edd0e9, 0x37885d32),
-            TOBN(0xe37e3307, 0xbeb9bc6d), TOBN(0xe9abb907, 0x9f5c6768),
-            TOBN(0x4396ccd5, 0x51f2160f), TOBN(0x2500888c, 0x47336da6),
-            TOBN(0x383f9ed9, 0x926fce43), TOBN(0x809dd1c7, 0x04da2930),
-            TOBN(0x30f6f596, 0x8a4cb227), TOBN(0x0d700c7f, 0x73a56b38),
-            TOBN(0x1825ea33, 0xab64a065), TOBN(0xaab9b735, 0x1338df80),
-            TOBN(0x1516100d, 0x9b63f57f), TOBN(0x2574395a, 0x27a6a634),
-            TOBN(0xb5560fb6, 0x700a1acd), TOBN(0xe823fd73, 0xfd999681),
-            TOBN(0xda915d1f, 0x6cb4e1ba), TOBN(0x0d030118, 0x6ebe00a3),
-            TOBN(0x744fb0c9, 0x89fca8cd), TOBN(0x970d01db, 0xf9da0e0b),
-            TOBN(0x0ad8c564, 0x7931d76f), TOBN(0xb15737bf, 0xf659b96a),
-            TOBN(0xdc9933e8, 0xa8b484e7), TOBN(0xb2fdbdf9, 0x7a26dec7),
-            TOBN(0x2349e9a4, 0x9f1f0136), TOBN(0x7860368e, 0x70fddddb),
-            TOBN(0xd93d2c1c, 0xf9ad3e18), TOBN(0x6d6c5f17, 0x689f4e79),
-            TOBN(0x7a544d91, 0xb24ff1b6), TOBN(0x3e12a5eb, 0xfe16cd8c),
-            TOBN(0x543574e9, 0xa56b872f), TOBN(0xa1ad550c, 0xfcf68ea2),
-            TOBN(0x689e37d2, 0x3f560ef7), TOBN(0x8c54b9ca, 0xc9d47a8b),
-            TOBN(0x46d40a4a, 0x088ac342), TOBN(0xec450c7c, 0x1576c6d0),
-            TOBN(0xb589e31c, 0x1f9689e9), TOBN(0xdacf2602, 0xb8781718),
-            TOBN(0xa89237c6, 0xc8cb6b42), TOBN(0x1326fc93, 0xb96ef381),
-            TOBN(0x55d56c6d, 0xb5f07825), TOBN(0xacba2eea, 0x7449e22d),
-            TOBN(0x74e0887a, 0x633c3000), TOBN(0xcb6cd172, 0xd7cbcf71),
-            TOBN(0x309e81de, 0xc36cf1be), TOBN(0x07a18a6d, 0x60ae399b),
-            TOBN(0xb36c2679, 0x9edce57e), TOBN(0x52b892f4, 0xdf001d41),
-            TOBN(0xd884ae5d, 0x16a1f2c6), TOBN(0x9b329424, 0xefcc370a),
-            TOBN(0x3120daf2, 0xbd2e21df), TOBN(0x55298d2d, 0x02470a99),
-            TOBN(0x0b78af6c, 0xa05db32e), TOBN(0x5c76a331, 0x601f5636),
-            TOBN(0xaae861ff, 0xf8a4f29c), TOBN(0x70dc9240, 0xd68f8d49),
-            TOBN(0x960e649f, 0x81b1321c), TOBN(0x3d2c801b, 0x8792e4ce),
-            TOBN(0xf479f772, 0x42521876), TOBN(0x0bed93bc, 0x416c79b1),
-            TOBN(0xa67fbc05, 0x263e5bc9), TOBN(0x01e8e630, 0x521db049),
-            TOBN(0x76f26738, 0xc6f3431e), TOBN(0xe609cb02, 0xe3267541),
-            TOBN(0xb10cff2d, 0x818c877c), TOBN(0x1f0e75ce, 0x786a13cb),
-            TOBN(0xf4fdca64, 0x1158544d), TOBN(0x5d777e89, 0x6cb71ed0),
-            TOBN(0x3c233737, 0xa9aa4755), TOBN(0x7b453192, 0xe527ab40),
-            TOBN(0xdb59f688, 0x39f05ffe), TOBN(0x8f4f4be0, 0x6d82574e),
-            TOBN(0xcce3450c, 0xee292d1b), TOBN(0xaa448a12, 0x61ccd086),
-            TOBN(0xabce91b3, 0xf7914967), TOBN(0x4537f09b, 0x1908a5ed),
-            TOBN(0xa812421e, 0xf51042e7), TOBN(0xfaf5cebc, 0xec0b3a34),
-            TOBN(0x730ffd87, 0x4ca6b39a), TOBN(0x70fb72ed, 0x02efd342),
-            TOBN(0xeb4735f9, 0xd75c8edb), TOBN(0xc11f2157, 0xc278aa51),
-            TOBN(0xc459f635, 0xbf3bfebf), TOBN(0x3a1ff0b4, 0x6bd9601f),
-            TOBN(0xc9d12823, 0xc420cb73), TOBN(0x3e9af3e2, 0x3c2915a3),
-            TOBN(0xe0c82c72, 0xb41c3440), TOBN(0x175239e5, 0xe3039a5f),
-            TOBN(0xe1084b8a, 0x558795a3), TOBN(0x328d0a1d, 0xd01e5c60),
-            TOBN(0x0a495f2e, 0xd3788a04), TOBN(0x25d8ff16, 0x66c11a9f),
-            TOBN(0xf5155f05, 0x9ed692d6), TOBN(0x954fa107, 0x4f425fe4),
-            TOBN(0xd16aabf2, 0xe98aaa99), TOBN(0x90cd8ba0, 0x96b0f88a),
-            TOBN(0x957f4782, 0xc154026a), TOBN(0x54ee0734, 0x52af56d2),
-            TOBN(0xbcf89e54, 0x45b4147a), TOBN(0x3d102f21, 0x9a52816c),
-            TOBN(0x6808517e, 0x39b62e77), TOBN(0x92e25421, 0x69169ad8),
-            TOBN(0xd721d871, 0xbb608558), TOBN(0x60e4ebae, 0xf6d4ff9b),
-            TOBN(0x0ba10819, 0x41f2763e), TOBN(0xca2e45be, 0x51ee3247),
-            TOBN(0x66d172ec, 0x2bfd7a5f), TOBN(0x528a8f2f, 0x74d0b12d),
-            TOBN(0xe17f1e38, 0xdabe70dc), TOBN(0x1d5d7316, 0x9f93983c),
-            TOBN(0x51b2184a, 0xdf423e31), TOBN(0xcb417291, 0xaedb1a10),
-            TOBN(0x2054ca93, 0x625bcab9), TOBN(0x54396860, 0xa98998f0),
-            TOBN(0x4e53f6c4, 0xa54ae57e), TOBN(0x0ffeb590, 0xee648e9d),
-            TOBN(0xfbbdaadc, 0x6afaf6bc), TOBN(0xf88ae796, 0xaa3bfb8a),
-            TOBN(0x209f1d44, 0xd2359ed9), TOBN(0xac68dd03, 0xf3544ce2),
-            TOBN(0xf378da47, 0xfd51e569), TOBN(0xe1abd860, 0x2cc80097),
-            TOBN(0x23ca18d9, 0x343b6e3a), TOBN(0x480797e8, 0xb40a1bae),
-            TOBN(0xd1f0c717, 0x533f3e67), TOBN(0x44896970, 0x06e6cdfc),
-            TOBN(0x8ca21055, 0x52a82e8d), TOBN(0xb2caf785, 0x78460cdc),
-            TOBN(0x4c1b7b62, 0xe9037178), TOBN(0xefc09d2c, 0xdb514b58),
-            TOBN(0x5f2df9ee, 0x9113be5c), TOBN(0x2fbda78f, 0xb3f9271c),
-            TOBN(0xe09a81af, 0x8f83fc54), TOBN(0x06b13866, 0x8afb5141),
-            TOBN(0x38f6480f, 0x43e3865d), TOBN(0x72dd77a8, 0x1ddf47d9),
-            TOBN(0xf2a8e971, 0x4c205ff7), TOBN(0x46d449d8, 0x9d088ad8),
-            TOBN(0x926619ea, 0x185d706f), TOBN(0xe47e02eb, 0xc7dd7f62),
-            TOBN(0xe7f120a7, 0x8cbc2031), TOBN(0xc18bef00, 0x998d4ac9),
-            TOBN(0x18f37a9c, 0x6bdf22da), TOBN(0xefbc432f, 0x90dc82df),
-            TOBN(0xc52cef8e, 0x5d703651), TOBN(0x82887ba0, 0xd99881a5),
-            TOBN(0x7cec9dda, 0xb920ec1d), TOBN(0xd0d7e8c3, 0xec3e8d3b),
-            TOBN(0x445bc395, 0x4ca88747), TOBN(0xedeaa2e0, 0x9fd53535),
-            TOBN(0x461b1d93, 0x6cc87475), TOBN(0xd92a52e2, 0x6d2383bd),
-            TOBN(0xfabccb59, 0xd7903546), TOBN(0x6111a761, 0x3d14b112),
-            TOBN(0x0ae584fe, 0xb3d5f612), TOBN(0x5ea69b8d, 0x60e828ec),
-            TOBN(0x6c078985, 0x54087030), TOBN(0x649cab04, 0xac4821fe),
-            TOBN(0x25ecedcf, 0x8bdce214), TOBN(0xb5622f72, 0x86af7361),
-            TOBN(0x0e1227aa, 0x7038b9e2), TOBN(0xd0efb273, 0xac20fa77),
-            TOBN(0x817ff88b, 0x79df975b), TOBN(0x856bf286, 0x1999503e),
-            TOBN(0xb4d5351f, 0x5038ec46), TOBN(0x740a52c5, 0xfc42af6e),
-            TOBN(0x2e38bb15, 0x2cbb1a3f), TOBN(0xc3eb99fe, 0x17a83429),
-            TOBN(0xca4fcbf1, 0xdd66bb74), TOBN(0x880784d6, 0xcde5e8fc),
-            TOBN(0xddc84c1c, 0xb4e7a0be), TOBN(0x8780510d, 0xbd15a72f),
-            TOBN(0x44bcf1af, 0x81ec30e1), TOBN(0x141e50a8, 0x0a61073e),
-            TOBN(0x0d955718, 0x47be87ae), TOBN(0x68a61417, 0xf76a4372),
-            TOBN(0xf57e7e87, 0xc607c3d3), TOBN(0x043afaf8, 0x5252f332),
-            TOBN(0xcc14e121, 0x1552a4d2), TOBN(0xb6dee692, 0xbb4d4ab4),
-            TOBN(0xb6ab74c8, 0xa03816a4), TOBN(0x84001ae4, 0x6f394a29),
-            TOBN(0x5bed8344, 0xd795fb45), TOBN(0x57326e7d, 0xb79f55a5),
-            TOBN(0xc9533ce0, 0x4accdffc), TOBN(0x53473caf, 0x3993fa04),
-            TOBN(0x7906eb93, 0xa13df4c8), TOBN(0xa73e51f6, 0x97cbe46f),
-            TOBN(0xd1ab3ae1, 0x0ae4ccf8), TOBN(0x25614508, 0x8a5b3dbc),
-            TOBN(0x61eff962, 0x11a71b27), TOBN(0xdf71412b, 0x6bb7fa39),
-            TOBN(0xb31ba6b8, 0x2bd7f3ef), TOBN(0xb0b9c415, 0x69180d29),
-            TOBN(0xeec14552, 0x014cdde5), TOBN(0x702c624b, 0x227b4bbb),
-            TOBN(0x2b15e8c2, 0xd3e988f3), TOBN(0xee3bcc6d, 0xa4f7fd04),
-            TOBN(0x9d00822a, 0x42ac6c85), TOBN(0x2db0cea6, 0x1df9f2b7),
-            TOBN(0xd7cad2ab, 0x42de1e58), TOBN(0x346ed526, 0x2d6fbb61),
-            TOBN(0xb3962995, 0x1a2faf09), TOBN(0x2fa8a580, 0x7c25612e),
-            TOBN(0x30ae04da, 0x7cf56490), TOBN(0x75662908, 0x0eea3961),
-            TOBN(0x3609f5c5, 0x3d080847), TOBN(0xcb081d39, 0x5241d4f6),
-            TOBN(0xb4fb3810, 0x77961a63), TOBN(0xc20c5984, 0x2abb66fc),
-            TOBN(0x3d40aa7c, 0xf902f245), TOBN(0x9cb12736, 0x4e536b1e),
-            TOBN(0x5eda24da, 0x99b3134f), TOBN(0xafbd9c69, 0x5cd011af),
-            TOBN(0x9a16e30a, 0xc7088c7d), TOBN(0x5ab65710, 0x3207389f),
-            TOBN(0x1b09547f, 0xe7407a53), TOBN(0x2322f9d7, 0x4fdc6eab),
-            TOBN(0xc0f2f22d, 0x7430de4d), TOBN(0x19382696, 0xe68ca9a9),
-            TOBN(0x17f1eff1, 0x918e5868), TOBN(0xe3b5b635, 0x586f4204),
-            TOBN(0x146ef980, 0x3fbc4341), TOBN(0x359f2c80, 0x5b5eed4e),
-            TOBN(0x9f35744e, 0x7482e41d), TOBN(0x9a9ac3ec, 0xf3b224c2),
-            TOBN(0x9161a6fe, 0x91fc50ae), TOBN(0x89ccc66b, 0xc613fa7c),
-            TOBN(0x89268b14, 0xc732f15a), TOBN(0x7cd6f4e2, 0xb467ed03),
-            TOBN(0xfbf79869, 0xce56b40e), TOBN(0xf93e094c, 0xc02dde98),
-            TOBN(0xefe0c3a8, 0xedee2cd7), TOBN(0x90f3ffc0, 0xb268fd42),
-            TOBN(0x81a7fd56, 0x08241aed), TOBN(0x95ab7ad8, 0x00b1afe8),
-            TOBN(0x40127056, 0x3e310d52), TOBN(0xd3ffdeb1, 0x09d9fc43),
-            TOBN(0xc8f85c91, 0xd11a8594), TOBN(0x2e74d258, 0x31cf6db8),
-            TOBN(0x829c7ca3, 0x02b5dfd0), TOBN(0xe389cfbe, 0x69143c86),
-            TOBN(0xd01b6405, 0x941768d8), TOBN(0x45103995, 0x03bf825d),
-            TOBN(0xcc4ee166, 0x56cd17e2), TOBN(0xbea3c283, 0xba037e79),
-            TOBN(0x4e1ac06e, 0xd9a47520), TOBN(0xfbfe18aa, 0xaf852404),
-            TOBN(0x5615f8e2, 0x8087648a), TOBN(0x7301e47e, 0xb9d150d9),
-            TOBN(0x79f9f9dd, 0xb299b977), TOBN(0x76697a7b, 0xa5b78314),
-            TOBN(0x10d67468, 0x7d7c90e7), TOBN(0x7afffe03, 0x937210b5),
-            TOBN(0x5aef3e4b, 0x28c22cee), TOBN(0xefb0ecd8, 0x09fd55ae),
-            TOBN(0x4cea7132, 0x0d2a5d6a), TOBN(0x9cfb5fa1, 0x01db6357),
-            TOBN(0x395e0b57, 0xf36e1ac5), TOBN(0x008fa9ad, 0x36cafb7d),
-            TOBN(0x8f6cdf70, 0x5308c4db), TOBN(0x51527a37, 0x95ed2477),
-            TOBN(0xba0dee30, 0x5bd21311), TOBN(0x6ed41b22, 0x909c90d7),
-            TOBN(0xc5f6b758, 0x7c8696d3), TOBN(0x0db8eaa8, 0x3ce83a80),
-            TOBN(0xd297fe37, 0xb24b4b6f), TOBN(0xfe58afe8, 0x522d1f0d),
-            TOBN(0x97358736, 0x8c98dbd9), TOBN(0x6bc226ca, 0x9454a527),
-            TOBN(0xa12b384e, 0xce53c2d0), TOBN(0x779d897d, 0x5e4606da),
-            TOBN(0xa53e47b0, 0x73ec12b0), TOBN(0x462dbbba, 0x5756f1ad),
-            TOBN(0x69fe09f2, 0xcafe37b6), TOBN(0x273d1ebf, 0xecce2e17),
-            TOBN(0x8ac1d538, 0x3cf607fd), TOBN(0x8035f7ff, 0x12e10c25),
-        },
-        {
-            TOBN(0x854d34c7, 0x7e6c5520), TOBN(0xc27df9ef, 0xdcb9ea58),
-            TOBN(0x405f2369, 0xd686666d), TOBN(0x29d1febf, 0x0417aa85),
-            TOBN(0x9846819e, 0x93470afe), TOBN(0x3e6a9669, 0xe2a27f9e),
-            TOBN(0x24d008a2, 0xe31e6504), TOBN(0xdba7cecf, 0x9cb7680a),
-            TOBN(0xecaff541, 0x338d6e43), TOBN(0x56f7dd73, 0x4541d5cc),
-            TOBN(0xb5d426de, 0x96bc88ca), TOBN(0x48d94f6b, 0x9ed3a2c3),
-            TOBN(0x6354a3bb, 0x2ef8279c), TOBN(0xd575465b, 0x0b1867f2),
-            TOBN(0xef99b0ff, 0x95225151), TOBN(0xf3e19d88, 0xf94500d8),
-            TOBN(0x92a83268, 0xe32dd620), TOBN(0x913ec99f, 0x627849a2),
-            TOBN(0xedd8fdfa, 0x2c378882), TOBN(0xaf96f33e, 0xee6f8cfe),
-            TOBN(0xc06737e5, 0xdc3fa8a5), TOBN(0x236bb531, 0xb0b03a1d),
-            TOBN(0x33e59f29, 0x89f037b0), TOBN(0x13f9b5a7, 0xd9a12a53),
-            TOBN(0x0d0df6ce, 0x51efb310), TOBN(0xcb5b2eb4, 0x958df5be),
-            TOBN(0xd6459e29, 0x36158e59), TOBN(0x82aae2b9, 0x1466e336),
-            TOBN(0xfb658a39, 0x411aa636), TOBN(0x7152ecc5, 0xd4c0a933),
-            TOBN(0xf10c758a, 0x49f026b7), TOBN(0xf4837f97, 0xcb09311f),
-            TOBN(0xddfb02c4, 0xc753c45f), TOBN(0x18ca81b6, 0xf9c840fe),
-            TOBN(0x846fd09a, 0xb0f8a3e6), TOBN(0xb1162add, 0xe7733dbc),
-            TOBN(0x7070ad20, 0x236e3ab6), TOBN(0xf88cdaf5, 0xb2a56326),
-            TOBN(0x05fc8719, 0x997cbc7a), TOBN(0x442cd452, 0x4b665272),
-            TOBN(0x7807f364, 0xb71698f5), TOBN(0x6ba418d2, 0x9f7b605e),
-            TOBN(0xfd20b00f, 0xa03b2cbb), TOBN(0x883eca37, 0xda54386f),
-            TOBN(0xff0be43f, 0xf3437f24), TOBN(0xe910b432, 0xa48bb33c),
-            TOBN(0x4963a128, 0x329df765), TOBN(0xac1dd556, 0xbe2fe6f7),
-            TOBN(0x557610f9, 0x24a0a3fc), TOBN(0x38e17bf4, 0xe881c3f9),
-            TOBN(0x6ba84faf, 0xed0dac99), TOBN(0xd4a222c3, 0x59eeb918),
-            TOBN(0xc79c1dbe, 0x13f542b6), TOBN(0x1fc65e0d, 0xe425d457),
-            TOBN(0xeffb754f, 0x1debb779), TOBN(0x638d8fd0, 0x9e08af60),
-            TOBN(0x994f523a, 0x626332d5), TOBN(0x7bc38833, 0x5561bb44),
-            TOBN(0x005ed4b0, 0x3d845ea2), TOBN(0xd39d3ee1, 0xc2a1f08a),
-            TOBN(0x6561fdd3, 0xe7676b0d), TOBN(0x620e35ff, 0xfb706017),
-            TOBN(0x36ce424f, 0xf264f9a8), TOBN(0xc4c3419f, 0xda2681f7),
-            TOBN(0xfb6afd2f, 0x69beb6e8), TOBN(0x3a50b993, 0x6d700d03),
-            TOBN(0xc840b2ad, 0x0c83a14f), TOBN(0x573207be, 0x54085bef),
-            TOBN(0x5af882e3, 0x09fe7e5b), TOBN(0x957678a4, 0x3b40a7e1),
-            TOBN(0x172d4bdd, 0x543056e2), TOBN(0x9c1b26b4, 0x0df13c0a),
-            TOBN(0x1c30861c, 0xf405ff06), TOBN(0xebac86bd, 0x486e828b),
-            TOBN(0xe791a971, 0x636933fc), TOBN(0x50e7c2be, 0x7aeee947),
-            TOBN(0xc3d4a095, 0xfa90d767), TOBN(0xae60eb7b, 0xe670ab7b),
-            TOBN(0x17633a64, 0x397b056d), TOBN(0x93a21f33, 0x105012aa),
-            TOBN(0x663c370b, 0xabb88643), TOBN(0x91df36d7, 0x22e21599),
-            TOBN(0x183ba835, 0x8b761671), TOBN(0x381eea1d, 0x728f3bf1),
-            TOBN(0xb9b2f1ba, 0x39966e6c), TOBN(0x7c464a28, 0xe7295492),
-            TOBN(0x0fd5f70a, 0x09b26b7f), TOBN(0xa9aba1f9, 0xfbe009df),
-            TOBN(0x857c1f22, 0x369b87ad), TOBN(0x3c00e5d9, 0x32fca556),
-            TOBN(0x1ad74cab, 0x90b06466), TOBN(0xa7112386, 0x550faaf2),
-            TOBN(0x7435e198, 0x6d9bd5f5), TOBN(0x2dcc7e38, 0x59c3463f),
-            TOBN(0xdc7df748, 0xca7bd4b2), TOBN(0x13cd4c08, 0x9dec2f31),
-            TOBN(0x0d3b5df8, 0xe3237710), TOBN(0x0dadb26e, 0xcbd2f7b0),
-            TOBN(0x9f5966ab, 0xe4aa082b), TOBN(0x666ec8de, 0x350e966e),
-            TOBN(0x1bfd1ed5, 0xee524216), TOBN(0xcd93c59b, 0x41dab0b6),
-            TOBN(0x658a8435, 0xd186d6ba), TOBN(0x1b7d34d2, 0x159d1195),
-            TOBN(0x5936e460, 0x22caf46b), TOBN(0x6a45dd8f, 0x9a96fe4f),
-            TOBN(0xf7925434, 0xb98f474e), TOBN(0x41410412, 0x0053ef15),
-            TOBN(0x71cf8d12, 0x41de97bf), TOBN(0xb8547b61, 0xbd80bef4),
-            TOBN(0xb47d3970, 0xc4db0037), TOBN(0xf1bcd328, 0xfef20dff),
-            TOBN(0x31a92e09, 0x10caad67), TOBN(0x1f591960, 0x5531a1e1),
-            TOBN(0x3bb852e0, 0x5f4fc840), TOBN(0x63e297ca, 0x93a72c6c),
-            TOBN(0x3c2b0b2e, 0x49abad67), TOBN(0x6ec405fc, 0xed3db0d9),
-            TOBN(0xdc14a530, 0x7fef1d40), TOBN(0xccd19846, 0x280896fc),
-            TOBN(0x00f83176, 0x9bb81648), TOBN(0xd69eb485, 0x653120d0),
-            TOBN(0xd17d75f4, 0x4ccabc62), TOBN(0x34a07f82, 0xb749fcb1),
-            TOBN(0x2c3af787, 0xbbfb5554), TOBN(0xb06ed4d0, 0x62e283f8),
-            TOBN(0x5722889f, 0xa19213a0), TOBN(0x162b085e, 0xdcf3c7b4),
-            TOBN(0xbcaecb31, 0xe0dd3eca), TOBN(0xc6237fbc, 0xe52f13a5),
-            TOBN(0xcc2b6b03, 0x27bac297), TOBN(0x2ae1cac5, 0xb917f54a),
-            TOBN(0x474807d4, 0x7845ae4f), TOBN(0xfec7dd92, 0xce5972e0),
-            TOBN(0xc3bd2541, 0x1d7915bb), TOBN(0x66f85dc4, 0xd94907ca),
-            TOBN(0xd981b888, 0xbdbcf0ca), TOBN(0xd75f5da6, 0xdf279e9f),
-            TOBN(0x128bbf24, 0x7054e934), TOBN(0x3c6ff6e5, 0x81db134b),
-            TOBN(0x795b7cf4, 0x047d26e4), TOBN(0xf370f7b8, 0x5049ec37),
-            TOBN(0xc6712d4d, 0xced945af), TOBN(0xdf30b5ec, 0x095642bc),
-            TOBN(0x9b034c62, 0x4896246e), TOBN(0x5652c016, 0xee90bbd1),
-            TOBN(0xeb38636f, 0x87fedb73), TOBN(0x5e32f847, 0x0135a613),
-            TOBN(0x0703b312, 0xcf933c83), TOBN(0xd05bb76e, 0x1a7f47e6),
-            TOBN(0x825e4f0c, 0x949c2415), TOBN(0x569e5622, 0x7250d6f8),
-            TOBN(0xbbe9eb3a, 0x6568013e), TOBN(0x8dbd203f, 0x22f243fc),
-            TOBN(0x9dbd7694, 0xb342734a), TOBN(0x8f6d12f8, 0x46afa984),
-            TOBN(0xb98610a2, 0xc9eade29), TOBN(0xbab4f323, 0x47dd0f18),
-            TOBN(0x5779737b, 0x671c0d46), TOBN(0x10b6a7c6, 0xd3e0a42a),
-            TOBN(0xfb19ddf3, 0x3035b41c), TOBN(0xd336343f, 0x99c45895),
-            TOBN(0x61fe4938, 0x54c857e5), TOBN(0xc4d506be, 0xae4e57d5),
-            TOBN(0x3cd8c8cb, 0xbbc33f75), TOBN(0x7281f08a, 0x9262c77d),
-            TOBN(0x083f4ea6, 0xf11a2823), TOBN(0x8895041e, 0x9fba2e33),
-            TOBN(0xfcdfea49, 0x9c438edf), TOBN(0x7678dcc3, 0x91edba44),
-            TOBN(0xf07b3b87, 0xe2ba50f0), TOBN(0xc13888ef, 0x43948c1b),
-            TOBN(0xc2135ad4, 0x1140af42), TOBN(0x8e5104f3, 0x926ed1a7),
-            TOBN(0xf24430cb, 0x88f6695f), TOBN(0x0ce0637b, 0x6d73c120),
-            TOBN(0xb2db01e6, 0xfe631e8f), TOBN(0x1c5563d7, 0xd7bdd24b),
-            TOBN(0x8daea3ba, 0x369ad44f), TOBN(0x000c81b6, 0x8187a9f9),
-            TOBN(0x5f48a951, 0xaae1fd9a), TOBN(0xe35626c7, 0x8d5aed8a),
-            TOBN(0x20952763, 0x0498c622), TOBN(0x76d17634, 0x773aa504),
-            TOBN(0x36d90dda, 0xeb300f7a), TOBN(0x9dcf7dfc, 0xedb5e801),
-            TOBN(0x645cb268, 0x74d5244c), TOBN(0xa127ee79, 0x348e3aa2),
-            TOBN(0x488acc53, 0x575f1dbb), TOBN(0x95037e85, 0x80e6161e),
-            TOBN(0x57e59283, 0x292650d0), TOBN(0xabe67d99, 0x14938216),
-            TOBN(0x3c7f944b, 0x3f8e1065), TOBN(0xed908cb6, 0x330e8924),
-            TOBN(0x08ee8fd5, 0x6f530136), TOBN(0x2227b7d5, 0xd7ffc169),
-            TOBN(0x4f55c893, 0xb5cd6dd5), TOBN(0x82225e11, 0xa62796e8),
-            TOBN(0x5c6cead1, 0xcb18e12c), TOBN(0x4381ae0c, 0x84f5a51a),
-            TOBN(0x345913d3, 0x7fafa4c8), TOBN(0x3d918082, 0x0491aac0),
-            TOBN(0x9347871f, 0x3e69264c), TOBN(0xbea9dd3c, 0xb4f4f0cd),
-            TOBN(0xbda5d067, 0x3eadd3e7), TOBN(0x0033c1b8, 0x0573bcd8),
-            TOBN(0x25589379, 0x5da2486c), TOBN(0xcb89ee5b, 0x86abbee7),
-            TOBN(0x8fe0a8f3, 0x22532e5d), TOBN(0xb6410ff0, 0x727dfc4c),
-            TOBN(0x619b9d58, 0x226726db), TOBN(0x5ec25669, 0x7a2b2dc7),
-            TOBN(0xaf4d2e06, 0x4c3beb01), TOBN(0x852123d0, 0x7acea556),
-            TOBN(0x0e9470fa, 0xf783487a), TOBN(0x75a7ea04, 0x5664b3eb),
-            TOBN(0x4ad78f35, 0x6798e4ba), TOBN(0x9214e6e5, 0xc7d0e091),
-            TOBN(0xc420b488, 0xb1290403), TOBN(0x64049e0a, 0xfc295749),
-            TOBN(0x03ef5af1, 0x3ae9841f), TOBN(0xdbe4ca19, 0xb0b662a6),
-            TOBN(0x46845c5f, 0xfa453458), TOBN(0xf8dabf19, 0x10b66722),
-            TOBN(0xb650f0aa, 0xcce2793b), TOBN(0x71db851e, 0xc5ec47c1),
-            TOBN(0x3eb78f3e, 0x3b234fa9), TOBN(0xb0c60f35, 0xfc0106ce),
-            TOBN(0x05427121, 0x774eadbd), TOBN(0x25367faf, 0xce323863),
-            TOBN(0x7541b5c9, 0xcd086976), TOBN(0x4ff069e2, 0xdc507ad1),
-            TOBN(0x74145256, 0x8776e667), TOBN(0x6e76142c, 0xb23c6bb5),
-            TOBN(0xdbf30712, 0x1b3a8a87), TOBN(0x60e7363e, 0x98450836),
-            TOBN(0x5741450e, 0xb7366d80), TOBN(0xe4ee14ca, 0x4837dbdf),
-            TOBN(0xa765eb9b, 0x69d4316f), TOBN(0x04548dca, 0x8ef43825),
-            TOBN(0x9c9f4e4c, 0x5ae888eb), TOBN(0x733abb51, 0x56e9ac99),
-            TOBN(0xdaad3c20, 0xba6ac029), TOBN(0x9b8dd3d3, 0x2ba3e38e),
-            TOBN(0xa9bb4c92, 0x0bc5d11a), TOBN(0xf20127a7, 0x9c5f88a3),
-            TOBN(0x4f52b06e, 0x161d3cb8), TOBN(0x26c1ff09, 0x6afaf0a6),
-            TOBN(0x32670d2f, 0x7189e71f), TOBN(0xc6438748, 0x5ecf91e7),
-            TOBN(0x15758e57, 0xdb757a21), TOBN(0x427d09f8, 0x290a9ce5),
-            TOBN(0x846a308f, 0x38384a7a), TOBN(0xaac3acb4, 0xb0732b99),
-            TOBN(0x9e941009, 0x17845819), TOBN(0x95cba111, 0xa7ce5e03),
-            TOBN(0x6f3d4f7f, 0xb00009c4), TOBN(0xb8396c27, 0x8ff28b5f),
-            TOBN(0xb1a9ae43, 0x1c97975d), TOBN(0x9d7ba8af, 0xe5d9fed5),
-            TOBN(0x338cf09f, 0x34f485b6), TOBN(0xbc0ddacc, 0x64122516),
-            TOBN(0xa450da12, 0x05d471fe), TOBN(0x4c3a6250, 0x628dd8c9),
-            TOBN(0x69c7d103, 0xd1295837), TOBN(0xa2893e50, 0x3807eb2f),
-            TOBN(0xd6e1e1de, 0xbdb41491), TOBN(0xc630745b, 0x5e138235),
-            TOBN(0xc892109e, 0x48661ae1), TOBN(0x8d17e7eb, 0xea2b2674),
-            TOBN(0x00ec0f87, 0xc328d6b5), TOBN(0x6d858645, 0xf079ff9e),
-            TOBN(0x6cdf243e, 0x19115ead), TOBN(0x1ce1393e, 0x4bac4fcf),
-            TOBN(0x2c960ed0, 0x9c29f25b), TOBN(0x59be4d8e, 0x9d388a05),
-            TOBN(0x0d46e06c, 0xd0def72b), TOBN(0xb923db5d, 0xe0342748),
-            TOBN(0xf7d3aacd, 0x936d4a3d), TOBN(0x558519cc, 0x0b0b099e),
-            TOBN(0x3ea8ebf8, 0x827097ef), TOBN(0x259353db, 0xd054f55d),
-            TOBN(0x84c89abc, 0x6d2ed089), TOBN(0x5c548b69, 0x8e096a7c),
-            TOBN(0xd587f616, 0x994b995d), TOBN(0x4d1531f6, 0xa5845601),
-            TOBN(0x792ab31e, 0x451fd9f0), TOBN(0xc8b57bb2, 0x65adf6ca),
-            TOBN(0x68440fcb, 0x1cd5ad73), TOBN(0xb9c860e6, 0x6144da4f),
-            TOBN(0x2ab286aa, 0x8462beb8), TOBN(0xcc6b8fff, 0xef46797f),
-            TOBN(0xac820da4, 0x20c8a471), TOBN(0x69ae05a1, 0x77ff7faf),
-            TOBN(0xb9163f39, 0xbfb5da77), TOBN(0xbd03e590, 0x2c73ab7a),
-            TOBN(0x7e862b5e, 0xb2940d9e), TOBN(0x3c663d86, 0x4b9af564),
-            TOBN(0xd8309031, 0xbde3033d), TOBN(0x298231b2, 0xd42c5bc6),
-            TOBN(0x42090d2c, 0x552ad093), TOBN(0xa4799d1c, 0xff854695),
-            TOBN(0x0a88b5d6, 0xd31f0d00), TOBN(0xf8b40825, 0xa2f26b46),
-            TOBN(0xec29b1ed, 0xf1bd7218), TOBN(0xd491c53b, 0x4b24c86e),
-            TOBN(0xd2fe588f, 0x3395ea65), TOBN(0x6f3764f7, 0x4456ef15),
-            TOBN(0xdb43116d, 0xcdc34800), TOBN(0xcdbcd456, 0xc1e33955),
-            TOBN(0xefdb5540, 0x74ab286b), TOBN(0x948c7a51, 0xd18c5d7c),
-            TOBN(0xeb81aa37, 0x7378058e), TOBN(0x41c746a1, 0x04411154),
-            TOBN(0xa10c73bc, 0xfb828ac7), TOBN(0x6439be91, 0x9d972b29),
-            TOBN(0x4bf3b4b0, 0x43a2fbad), TOBN(0x39e6dadf, 0x82b5e840),
-            TOBN(0x4f716408, 0x6397bd4c), TOBN(0x0f7de568, 0x7f1eeccb),
-            TOBN(0x5865c5a1, 0xd2ffbfc1), TOBN(0xf74211fa, 0x4ccb6451),
-            TOBN(0x66368a88, 0xc0b32558), TOBN(0x5b539dc2, 0x9ad7812e),
-            TOBN(0x579483d0, 0x2f3af6f6), TOBN(0x52132078, 0x99934ece),
-            TOBN(0x50b9650f, 0xdcc9e983), TOBN(0xca989ec9, 0xaee42b8a),
-            TOBN(0x6a44c829, 0xd6f62f99), TOBN(0x8f06a309, 0x4c2a7c0c),
-            TOBN(0x4ea2b3a0, 0x98a0cb0a), TOBN(0x5c547b70, 0xbeee8364),
-            TOBN(0x461d40e1, 0x682afe11), TOBN(0x9e0fc77a, 0x7b41c0a8),
-            TOBN(0x79e4aefd, 0xe20d5d36), TOBN(0x2916e520, 0x32dd9f63),
-            TOBN(0xf59e52e8, 0x3f883faf), TOBN(0x396f9639, 0x2b868d35),
-            TOBN(0xc902a9df, 0x4ca19881), TOBN(0x0fc96822, 0xdb2401a6),
-            TOBN(0x41237587, 0x66f1c68d), TOBN(0x10fc6de3, 0xfb476c0d),
-            TOBN(0xf8b6b579, 0x841f5d90), TOBN(0x2ba8446c, 0xfa24f44a),
-            TOBN(0xa237b920, 0xef4a9975), TOBN(0x60bb6004, 0x2330435f),
-            TOBN(0xd6f4ab5a, 0xcfb7e7b5), TOBN(0xb2ac5097, 0x83435391),
-            TOBN(0xf036ee2f, 0xb0d1ea67), TOBN(0xae779a6a, 0x74c56230),
-            TOBN(0x59bff8c8, 0xab838ae6), TOBN(0xcd83ca99, 0x9b38e6f0),
-            TOBN(0xbb27bef5, 0xe33deed3), TOBN(0xe6356f6f, 0x001892a8),
-            TOBN(0xbf3be6cc, 0x7adfbd3e), TOBN(0xaecbc81c, 0x33d1ac9d),
-            TOBN(0xe4feb909, 0xe6e861dc), TOBN(0x90a247a4, 0x53f5f801),
-            TOBN(0x01c50acb, 0x27346e57), TOBN(0xce29242e, 0x461acc1b),
-            TOBN(0x04dd214a, 0x2f998a91), TOBN(0x271ee9b1, 0xd4baf27b),
-            TOBN(0x7e3027d1, 0xe8c26722), TOBN(0x21d1645c, 0x1820dce5),
-            TOBN(0x086f242c, 0x7501779c), TOBN(0xf0061407, 0xfa0e8009),
-            TOBN(0xf23ce477, 0x60187129), TOBN(0x05bbdedb, 0x0fde9bd0),
-            TOBN(0x682f4832, 0x25d98473), TOBN(0xf207fe85, 0x5c658427),
-            TOBN(0xb6fdd7ba, 0x4166ffa1), TOBN(0x0c314056, 0x9eed799d),
-            TOBN(0x0db8048f, 0x4107e28f), TOBN(0x74ed3871, 0x41216840),
-            TOBN(0x74489f8f, 0x56a3c06e), TOBN(0x1e1c005b, 0x12777134),
-            TOBN(0xdb332a73, 0xf37ec3c3), TOBN(0xc65259bd, 0xdd59eba0),
-            TOBN(0x2291709c, 0xdb4d3257), TOBN(0x9a793b25, 0xbd389390),
-            TOBN(0xf39fe34b, 0xe43756f0), TOBN(0x2f76bdce, 0x9afb56c9),
-            TOBN(0x9f37867a, 0x61208b27), TOBN(0xea1d4307, 0x089972c3),
-            TOBN(0x8c595330, 0x8bdf623a), TOBN(0x5f5accda, 0x8441fb7d),
-            TOBN(0xfafa9418, 0x32ddfd95), TOBN(0x6ad40c5a, 0x0fde9be7),
-            TOBN(0x43faba89, 0xaeca8709), TOBN(0xc64a7cf1, 0x2c248a9d),
-            TOBN(0x16620252, 0x72637a76), TOBN(0xaee1c791, 0x22b8d1bb),
-            TOBN(0xf0f798fd, 0x21a843b2), TOBN(0x56e4ed4d, 0x8d005cb1),
-            TOBN(0x355f7780, 0x1f0d8abe), TOBN(0x197b04cf, 0x34522326),
-            TOBN(0x41f9b31f, 0xfd42c13f), TOBN(0x5ef7feb2, 0xb40f933d),
-            TOBN(0x27326f42, 0x5d60bad4), TOBN(0x027ecdb2, 0x8c92cf89),
-            TOBN(0x04aae4d1, 0x4e3352fe), TOBN(0x08414d2f, 0x73591b90),
-            TOBN(0x5ed6124e, 0xb7da7d60), TOBN(0xb985b931, 0x4d13d4ec),
-            TOBN(0xa592d3ab, 0x96bf36f9), TOBN(0x012dbed5, 0xbbdf51df),
-            TOBN(0xa57963c0, 0xdf6c177d), TOBN(0x010ec869, 0x87ca29cf),
-            TOBN(0xba1700f6, 0xbf926dff), TOBN(0x7c9fdbd1, 0xf4bf6bc2),
-            TOBN(0xdc18dc8f, 0x64da11f5), TOBN(0xa6074b7a, 0xd938ae75),
-            TOBN(0x14270066, 0xe84f44a4), TOBN(0x99998d38, 0xd27b954e),
-            TOBN(0xc1be8ab2, 0xb4f38e9a), TOBN(0x8bb55bbf, 0x15c01016),
-            TOBN(0xf73472b4, 0x0ea2ab30), TOBN(0xd365a340, 0xf73d68dd),
-            TOBN(0xc01a7168, 0x19c2e1eb), TOBN(0x32f49e37, 0x34061719),
-            TOBN(0xb73c57f1, 0x01d8b4d6), TOBN(0x03c8423c, 0x26b47700),
-            TOBN(0x321d0bc8, 0xa4d8826a), TOBN(0x6004213c, 0x4bc0e638),
-            TOBN(0xf78c64a1, 0xc1c06681), TOBN(0x16e0a16f, 0xef018e50),
-            TOBN(0x31cbdf91, 0xdb42b2b3), TOBN(0xf8f4ffce, 0xe0d36f58),
-            TOBN(0xcdcc71cd, 0x4cc5e3e0), TOBN(0xd55c7cfa, 0xa129e3e0),
-            TOBN(0xccdb6ba0, 0x0fb2cbf1), TOBN(0x6aba0005, 0xc4bce3cb),
-            TOBN(0x501cdb30, 0xd232cfc4), TOBN(0x9ddcf12e, 0xd58a3cef),
-            TOBN(0x02d2cf9c, 0x87e09149), TOBN(0xdc5d7ec7, 0x2c976257),
-            TOBN(0x6447986e, 0x0b50d7dd), TOBN(0x88fdbaf7, 0x807f112a),
-            TOBN(0x58c9822a, 0xb00ae9f6), TOBN(0x6abfb950, 0x6d3d27e0),
-            TOBN(0xd0a74487, 0x8a429f4f), TOBN(0x0649712b, 0xdb516609),
-            TOBN(0xb826ba57, 0xe769b5df), TOBN(0x82335df2, 0x1fc7aaf2),
-            TOBN(0x2389f067, 0x5c93d995), TOBN(0x59ac367a, 0x68677be6),
-            TOBN(0xa77985ff, 0x21d9951b), TOBN(0x038956fb, 0x85011cce),
-            TOBN(0x608e48cb, 0xbb734e37), TOBN(0xc08c0bf2, 0x2be5b26f),
-            TOBN(0x17bbdd3b, 0xf9b1a0d9), TOBN(0xeac7d898, 0x10483319),
-            TOBN(0xc95c4baf, 0xbc1a6dea), TOBN(0xfdd0e2bf, 0x172aafdb),
-            TOBN(0x40373cbc, 0x8235c41a), TOBN(0x14303f21, 0xfb6f41d5),
-            TOBN(0xba063621, 0x0408f237), TOBN(0xcad3b09a, 0xecd2d1ed),
-            TOBN(0x4667855a, 0x52abb6a2), TOBN(0xba9157dc, 0xaa8b417b),
-            TOBN(0xfe7f3507, 0x4f013efb), TOBN(0x1b112c4b, 0xaa38c4a2),
-            TOBN(0xa1406a60, 0x9ba64345), TOBN(0xe53cba33, 0x6993c80b),
-            TOBN(0x45466063, 0xded40d23), TOBN(0x3d5f1f4d, 0x54908e25),
-            TOBN(0x9ebefe62, 0x403c3c31), TOBN(0x274ea0b5, 0x0672a624),
-            TOBN(0xff818d99, 0x451d1b71), TOBN(0x80e82643, 0x8f79cf79),
-            TOBN(0xa165df13, 0x73ce37f5), TOBN(0xa744ef4f, 0xfe3a21fd),
-            TOBN(0x73f1e7f5, 0xcf551396), TOBN(0xc616898e, 0x868c676b),
-            TOBN(0x671c28c7, 0x8c442c36), TOBN(0xcfe5e558, 0x5e0a317d),
-            TOBN(0x1242d818, 0x7051f476), TOBN(0x56fad2a6, 0x14f03442),
-            TOBN(0x262068bc, 0x0a44d0f6), TOBN(0xdfa2cd6e, 0xce6edf4e),
-            TOBN(0x0f43813a, 0xd15d1517), TOBN(0x61214cb2, 0x377d44f5),
-            TOBN(0xd399aa29, 0xc639b35f), TOBN(0x42136d71, 0x54c51c19),
-            TOBN(0x9774711b, 0x08417221), TOBN(0x0a5546b3, 0x52545a57),
-            TOBN(0x80624c41, 0x1150582d), TOBN(0x9ec5c418, 0xfbc555bc),
-            TOBN(0x2c87dcad, 0x771849f1), TOBN(0xb0c932c5, 0x01d7bf6f),
-            TOBN(0x6aa5cd3e, 0x89116eb2), TOBN(0xd378c25a, 0x51ca7bd3),
-            TOBN(0xc612a0da, 0x9e6e3e31), TOBN(0x0417a54d, 0xb68ad5d0),
-            TOBN(0x00451e4a, 0x22c6edb8), TOBN(0x9fbfe019, 0xb42827ce),
-            TOBN(0x2fa92505, 0xba9384a2), TOBN(0x21b8596e, 0x64ad69c1),
-            TOBN(0x8f4fcc49, 0x983b35a6), TOBN(0xde093760, 0x72754672),
-            TOBN(0x2f14ccc8, 0xf7bffe6d), TOBN(0x27566bff, 0x5d94263d),
-            TOBN(0xb5b4e9c6, 0x2df3ec30), TOBN(0x94f1d7d5, 0x3e6ea6ba),
-            TOBN(0x97b7851a, 0xaaca5e9b), TOBN(0x518aa521, 0x56713b97),
-            TOBN(0x3357e8c7, 0x150a61f6), TOBN(0x7842e7e2, 0xec2c2b69),
-            TOBN(0x8dffaf65, 0x6868a548), TOBN(0xd963bd82, 0xe068fc81),
-            TOBN(0x64da5c8b, 0x65917733), TOBN(0x927090ff, 0x7b247328),
-        },
-        {
-            TOBN(0x214bc9a7, 0xd298c241), TOBN(0xe3b697ba, 0x56807cfd),
-            TOBN(0xef1c7802, 0x4564eadb), TOBN(0xdde8cdcf, 0xb48149c5),
-            TOBN(0x946bf0a7, 0x5a4d2604), TOBN(0x27154d7f, 0x6c1538af),
-            TOBN(0x95cc9230, 0xde5b1fcc), TOBN(0xd88519e9, 0x66864f82),
-            TOBN(0xb828dd1a, 0x7cb1282c), TOBN(0xa08d7626, 0xbe46973a),
-            TOBN(0x6baf8d40, 0xe708d6b2), TOBN(0x72571fa1, 0x4daeb3f3),
-            TOBN(0x85b1732f, 0xf22dfd98), TOBN(0x87ab01a7, 0x0087108d),
-            TOBN(0xaaaafea8, 0x5988207a), TOBN(0xccc832f8, 0x69f00755),
-            TOBN(0x964d950e, 0x36ff3bf0), TOBN(0x8ad20f6f, 0xf0b34638),
-            TOBN(0x4d9177b3, 0xb5d7585f), TOBN(0xcf839760, 0xef3f019f),
-            TOBN(0x582fc5b3, 0x8288c545), TOBN(0x2f8e4e9b, 0x13116bd1),
-            TOBN(0xf91e1b2f, 0x332120ef), TOBN(0xcf568724, 0x2a17dd23),
-            TOBN(0x488f1185, 0xca8d9d1a), TOBN(0xadf2c77d, 0xd987ded2),
-            TOBN(0x5f3039f0, 0x60c46124), TOBN(0xe5d70b75, 0x71e095f4),
-            TOBN(0x82d58650, 0x6260e70f), TOBN(0x39d75ea7, 0xf750d105),
-            TOBN(0x8cf3d0b1, 0x75bac364), TOBN(0xf3a7564d, 0x21d01329),
-            TOBN(0x182f04cd, 0x2f52d2a7), TOBN(0x4fde149a, 0xe2df565a),
-            TOBN(0xb80c5eec, 0xa79fb2f7), TOBN(0xab491d7b, 0x22ddc897),
-            TOBN(0x99d76c18, 0xc6312c7f), TOBN(0xca0d5f3d, 0x6aa41a57),
-            TOBN(0x71207325, 0xd15363a0), TOBN(0xe82aa265, 0xbeb252c2),
-            TOBN(0x94ab4700, 0xec3128c2), TOBN(0x6c76d862, 0x8e383f49),
-            TOBN(0xdc36b150, 0xc03024eb), TOBN(0xfb439477, 0x53daac69),
-            TOBN(0xfc68764a, 0x8dc79623), TOBN(0x5b86995d, 0xb440fbb2),
-            TOBN(0xd66879bf, 0xccc5ee0d), TOBN(0x05228942, 0x95aa8bd3),
-            TOBN(0xb51a40a5, 0x1e6a75c1), TOBN(0x24327c76, 0x0ea7d817),
-            TOBN(0x06630182, 0x07774597), TOBN(0xd6fdbec3, 0x97fa7164),
-            TOBN(0x20c99dfb, 0x13c90f48), TOBN(0xd6ac5273, 0x686ef263),
-            TOBN(0xc6a50bdc, 0xfef64eeb), TOBN(0xcd87b281, 0x86fdfc32),
-            TOBN(0xb24aa43e, 0x3fcd3efc), TOBN(0xdd26c034, 0xb8088e9a),
-            TOBN(0xa5ef4dc9, 0xbd3d46ea), TOBN(0xa2f99d58, 0x8a4c6a6f),
-            TOBN(0xddabd355, 0x2f1da46c), TOBN(0x72c3f8ce, 0x1afacdd1),
-            TOBN(0xd90c4eee, 0x92d40578), TOBN(0xd28bb41f, 0xca623b94),
-            TOBN(0x50fc0711, 0x745edc11), TOBN(0x9dd9ad7d, 0x3dc87558),
-            TOBN(0xce6931fb, 0xb49d1e64), TOBN(0x6c77a0a2, 0xc98bd0f9),
-            TOBN(0x62b9a629, 0x6baf7cb1), TOBN(0xcf065f91, 0xccf72d22),
-            TOBN(0x7203cce9, 0x79639071), TOBN(0x09ae4885, 0xf9cb732f),
-            TOBN(0x5e7c3bec, 0xee8314f3), TOBN(0x1c068aed, 0xdbea298f),
-            TOBN(0x08d381f1, 0x7c80acec), TOBN(0x03b56be8, 0xe330495b),
-            TOBN(0xaeffb8f2, 0x9222882d), TOBN(0x95ff38f6, 0xc4af8bf7),
-            TOBN(0x50e32d35, 0x1fc57d8c), TOBN(0x6635be52, 0x17b444f0),
-            TOBN(0x04d15276, 0xa5177900), TOBN(0x4e1dbb47, 0xf6858752),
-            TOBN(0x5b475622, 0xc615796c), TOBN(0xa6fa0387, 0x691867bf),
-            TOBN(0xed7f5d56, 0x2844c6d0), TOBN(0xc633cf9b, 0x03a2477d),
-            TOBN(0xf6be5c40, 0x2d3721d6), TOBN(0xaf312eb7, 0xe9fd68e6),
-            TOBN(0x242792d2, 0xe7417ce1), TOBN(0xff42bc71, 0x970ee7f5),
-            TOBN(0x1ff4dc6d, 0x5c67a41e), TOBN(0x77709b7b, 0x20882a58),
-            TOBN(0x3554731d, 0xbe217f2c), TOBN(0x2af2a8cd, 0x5bb72177),
-            TOBN(0x58eee769, 0x591dd059), TOBN(0xbb2930c9, 0x4bba6477),
-            TOBN(0x863ee047, 0x7d930cfc), TOBN(0x4c262ad1, 0x396fd1f4),
-            TOBN(0xf4765bc8, 0x039af7e1), TOBN(0x2519834b, 0x5ba104f6),
-            TOBN(0x7cd61b4c, 0xd105f961), TOBN(0xa5415da5, 0xd63bca54),
-            TOBN(0x778280a0, 0x88a1f17c), TOBN(0xc4968949, 0x2329512c),
-            TOBN(0x174a9126, 0xcecdaa7a), TOBN(0xfc8c7e0e, 0x0b13247b),
-            TOBN(0x29c110d2, 0x3484c1c4), TOBN(0xf8eb8757, 0x831dfc3b),
-            TOBN(0x022f0212, 0xc0067452), TOBN(0x3f6f69ee, 0x7b9b926c),
-            TOBN(0x09032da0, 0xef42daf4), TOBN(0x79f00ade, 0x83f80de4),
-            TOBN(0x6210db71, 0x81236c97), TOBN(0x74f7685b, 0x3ee0781f),
-            TOBN(0x4df7da7b, 0xa3e41372), TOBN(0x2aae38b1, 0xb1a1553e),
-            TOBN(0x1688e222, 0xf6dd9d1b), TOBN(0x57695448, 0x5b8b6487),
-            TOBN(0x478d2127, 0x4b2edeaa), TOBN(0xb2818fa5, 0x1e85956a),
-            TOBN(0x1e6addda, 0xf176f2c0), TOBN(0x01ca4604, 0xe2572658),
-            TOBN(0x0a404ded, 0x85342ffb), TOBN(0x8cf60f96, 0x441838d6),
-            TOBN(0x9bbc691c, 0xc9071c4a), TOBN(0xfd588744, 0x34442803),
-            TOBN(0x97101c85, 0x809c0d81), TOBN(0xa7fb754c, 0x8c456f7f),
-            TOBN(0xc95f3c5c, 0xd51805e1), TOBN(0xab4ccd39, 0xb299dca8),
-            TOBN(0x3e03d20b, 0x47eaf500), TOBN(0xfa3165c1, 0xd7b80893),
-            TOBN(0x005e8b54, 0xe160e552), TOBN(0xdc4972ba, 0x9019d11f),
-            TOBN(0x21a6972e, 0x0c9a4a7a), TOBN(0xa52c258f, 0x37840fd7),
-            TOBN(0xf8559ff4, 0xc1e99d81), TOBN(0x08e1a7d6, 0xa3c617c0),
-            TOBN(0xb398fd43, 0x248c6ba7), TOBN(0x6ffedd91, 0xd1283794),
-            TOBN(0x8a6a59d2, 0xd629d208), TOBN(0xa9d141d5, 0x3490530e),
-            TOBN(0x42f6fc18, 0x38505989), TOBN(0x09bf250d, 0x479d94ee),
-            TOBN(0x223ad3b1, 0xb3822790), TOBN(0x6c5926c0, 0x93b8971c),
-            TOBN(0x609efc7e, 0x75f7fa62), TOBN(0x45d66a6d, 0x1ec2d989),
-            TOBN(0x4422d663, 0x987d2792), TOBN(0x4a73caad, 0x3eb31d2b),
-            TOBN(0xf06c2ac1, 0xa32cb9e6), TOBN(0xd9445c5f, 0x91aeba84),
-            TOBN(0x6af7a1d5, 0xaf71013f), TOBN(0xe68216e5, 0x0bedc946),
-            TOBN(0xf4cba30b, 0xd27370a0), TOBN(0x7981afbf, 0x870421cc),
-            TOBN(0x02496a67, 0x9449f0e1), TOBN(0x86cfc4be, 0x0a47edae),
-            TOBN(0x3073c936, 0xb1feca22), TOBN(0xf5694612, 0x03f8f8fb),
-            TOBN(0xd063b723, 0x901515ea), TOBN(0x4c6c77a5, 0x749cf038),
-            TOBN(0x6361e360, 0xab9e5059), TOBN(0x596cf171, 0xa76a37c0),
-            TOBN(0x800f53fa, 0x6530ae7a), TOBN(0x0f5e631e, 0x0792a7a6),
-            TOBN(0x5cc29c24, 0xefdb81c9), TOBN(0xa269e868, 0x3f9c40ba),
-            TOBN(0xec14f9e1, 0x2cb7191e), TOBN(0x78ea1bd8, 0xe5b08ea6),
-            TOBN(0x3c65aa9b, 0x46332bb9), TOBN(0x84cc22b3, 0xbf80ce25),
-            TOBN(0x0098e9e9, 0xd49d5bf1), TOBN(0xcd4ec1c6, 0x19087da4),
-            TOBN(0x3c9d07c5, 0xaef6e357), TOBN(0x839a0268, 0x9f8f64b8),
-            TOBN(0xc5e9eb62, 0xc6d8607f), TOBN(0x759689f5, 0x6aa995e4),
-            TOBN(0x70464669, 0xbbb48317), TOBN(0x921474bf, 0xe402417d),
-            TOBN(0xcabe135b, 0x2a354c8c), TOBN(0xd51e52d2, 0x812fa4b5),
-            TOBN(0xec741096, 0x53311fe8), TOBN(0x4f774535, 0xb864514b),
-            TOBN(0xbcadd671, 0x5bde48f8), TOBN(0xc9703873, 0x2189bc7d),
-            TOBN(0x5d45299e, 0xc709ee8a), TOBN(0xd1287ee2, 0x845aaff8),
-            TOBN(0x7d1f8874, 0xdb1dbf1f), TOBN(0xea46588b, 0x990c88d6),
-            TOBN(0x60ba649a, 0x84368313), TOBN(0xd5fdcbce, 0x60d543ae),
-            TOBN(0x90b46d43, 0x810d5ab0), TOBN(0x6739d8f9, 0x04d7e5cc),
-            TOBN(0x021c1a58, 0x0d337c33), TOBN(0x00a61162, 0x68e67c40),
-            TOBN(0x95ef413b, 0x379f0a1f), TOBN(0xfe126605, 0xe9e2ab95),
-            TOBN(0x67578b85, 0x2f5f199c), TOBN(0xf5c00329, 0x2cb84913),
-            TOBN(0xf7956430, 0x37577dd8), TOBN(0x83b82af4, 0x29c5fe88),
-            TOBN(0x9c1bea26, 0xcdbdc132), TOBN(0x589fa086, 0x9c04339e),
-            TOBN(0x033e9538, 0xb13799df), TOBN(0x85fa8b21, 0xd295d034),
-            TOBN(0xdf17f73f, 0xbd9ddcca), TOBN(0xf32bd122, 0xddb66334),
-            TOBN(0x55ef88a7, 0x858b044c), TOBN(0x1f0d69c2, 0x5aa9e397),
-            TOBN(0x55fd9cc3, 0x40d85559), TOBN(0xc774df72, 0x7785ddb2),
-            TOBN(0x5dcce9f6, 0xd3bd2e1c), TOBN(0xeb30da20, 0xa85dfed0),
-            TOBN(0x5ed7f5bb, 0xd3ed09c4), TOBN(0x7d42a35c, 0x82a9c1bd),
-            TOBN(0xcf3de995, 0x9890272d), TOBN(0x75f3432a, 0x3e713a10),
-            TOBN(0x5e13479f, 0xe28227b8), TOBN(0xb8561ea9, 0xfefacdc8),
-            TOBN(0xa6a297a0, 0x8332aafd), TOBN(0x9b0d8bb5, 0x73809b62),
-            TOBN(0xd2fa1cfd, 0x0c63036f), TOBN(0x7a16eb55, 0xbd64bda8),
-            TOBN(0x3f5cf5f6, 0x78e62ddc), TOBN(0x2267c454, 0x07fd752b),
-            TOBN(0x5e361b6b, 0x5e437bbe), TOBN(0x95c59501, 0x8354e075),
-            TOBN(0xec725f85, 0xf2b254d9), TOBN(0x844b617d, 0x2cb52b4e),
-            TOBN(0xed8554f5, 0xcf425fb5), TOBN(0xab67703e, 0x2af9f312),
-            TOBN(0x4cc34ec1, 0x3cf48283), TOBN(0xb09daa25, 0x9c8a705e),
-            TOBN(0xd1e9d0d0, 0x5b7d4f84), TOBN(0x4df6ef64, 0xdb38929d),
-            TOBN(0xe16b0763, 0xaa21ba46), TOBN(0xc6b1d178, 0xa293f8fb),
-            TOBN(0x0ff5b602, 0xd520aabf), TOBN(0x94d671bd, 0xc339397a),
-            TOBN(0x7c7d98cf, 0x4f5792fa), TOBN(0x7c5e0d67, 0x11215261),
-            TOBN(0x9b19a631, 0xa7c5a6d4), TOBN(0xc8511a62, 0x7a45274d),
-            TOBN(0x0c16621c, 0xa5a60d99), TOBN(0xf7fbab88, 0xcf5e48cb),
-            TOBN(0xab1e6ca2, 0xf7ddee08), TOBN(0x83bd08ce, 0xe7867f3c),
-            TOBN(0xf7e48e8a, 0x2ac13e27), TOBN(0x4494f6df, 0x4eb1a9f5),
-            TOBN(0xedbf84eb, 0x981f0a62), TOBN(0x49badc32, 0x536438f0),
-            TOBN(0x50bea541, 0x004f7571), TOBN(0xbac67d10, 0xdf1c94ee),
-            TOBN(0x253d73a1, 0xb727bc31), TOBN(0xb3d01cf2, 0x30686e28),
-            TOBN(0x51b77b1b, 0x55fd0b8b), TOBN(0xa099d183, 0xfeec3173),
-            TOBN(0x202b1fb7, 0x670e72b7), TOBN(0xadc88b33, 0xa8e1635f),
-            TOBN(0x34e8216a, 0xf989d905), TOBN(0xc2e68d20, 0x29b58d01),
-            TOBN(0x11f81c92, 0x6fe55a93), TOBN(0x15f1462a, 0x8f296f40),
-            TOBN(0x1915d375, 0xea3d62f2), TOBN(0xa17765a3, 0x01c8977d),
-            TOBN(0x7559710a, 0xe47b26f6), TOBN(0xe0bd29c8, 0x535077a5),
-            TOBN(0x615f976d, 0x08d84858), TOBN(0x370dfe85, 0x69ced5c1),
-            TOBN(0xbbc7503c, 0xa734fa56), TOBN(0xfbb9f1ec, 0x91ac4574),
-            TOBN(0x95d7ec53, 0x060dd7ef), TOBN(0xeef2dacd, 0x6e657979),
-            TOBN(0x54511af3, 0xe2a08235), TOBN(0x1e324aa4, 0x1f4aea3d),
-            TOBN(0x550e7e71, 0xe6e67671), TOBN(0xbccd5190, 0xbf52faf7),
-            TOBN(0xf880d316, 0x223cc62a), TOBN(0x0d402c7e, 0x2b32eb5d),
-            TOBN(0xa40bc039, 0x306a5a3b), TOBN(0x4e0a41fd, 0x96783a1b),
-            TOBN(0xa1e8d39a, 0x0253cdd4), TOBN(0x6480be26, 0xc7388638),
-            TOBN(0xee365e1d, 0x2285f382), TOBN(0x188d8d8f, 0xec0b5c36),
-            TOBN(0x34ef1a48, 0x1f0f4d82), TOBN(0x1a8f43e1, 0xa487d29a),
-            TOBN(0x8168226d, 0x77aefb3a), TOBN(0xf69a751e, 0x1e72c253),
-            TOBN(0x8e04359a, 0xe9594df1), TOBN(0x475ffd7d, 0xd14c0467),
-            TOBN(0xb5a2c2b1, 0x3844e95c), TOBN(0x85caf647, 0xdd12ef94),
-            TOBN(0x1ecd2a9f, 0xf1063d00), TOBN(0x1dd2e229, 0x23843311),
-            TOBN(0x38f0e09d, 0x73d17244), TOBN(0x3ede7746, 0x8fc653f1),
-            TOBN(0xae4459f5, 0xdc20e21c), TOBN(0x00db2ffa, 0x6a8599ea),
-            TOBN(0x11682c39, 0x30cfd905), TOBN(0x4934d074, 0xa5c112a6),
-            TOBN(0xbdf063c5, 0x568bfe95), TOBN(0x779a440a, 0x016c441a),
-            TOBN(0x0c23f218, 0x97d6fbdc), TOBN(0xd3a5cd87, 0xe0776aac),
-            TOBN(0xcee37f72, 0xd712e8db), TOBN(0xfb28c70d, 0x26f74e8d),
-            TOBN(0xffe0c728, 0xb61301a0), TOBN(0xa6282168, 0xd3724354),
-            TOBN(0x7ff4cb00, 0x768ffedc), TOBN(0xc51b3088, 0x03b02de9),
-            TOBN(0xa5a8147c, 0x3902dda5), TOBN(0x35d2f706, 0xfe6973b4),
-            TOBN(0x5ac2efcf, 0xc257457e), TOBN(0x933f48d4, 0x8700611b),
-            TOBN(0xc365af88, 0x4912beb2), TOBN(0x7f5a4de6, 0x162edf94),
-            TOBN(0xc646ba7c, 0x0c32f34b), TOBN(0x632c6af3, 0xb2091074),
-            TOBN(0x58d4f2e3, 0x753e43a9), TOBN(0x70e1d217, 0x24d4e23f),
-            TOBN(0xb24bf729, 0xafede6a6), TOBN(0x7f4a94d8, 0x710c8b60),
-            TOBN(0xaad90a96, 0x8d4faa6a), TOBN(0xd9ed0b32, 0xb066b690),
-            TOBN(0x52fcd37b, 0x78b6dbfd), TOBN(0x0b64615e, 0x8bd2b431),
-            TOBN(0x228e2048, 0xcfb9fad5), TOBN(0xbeaa386d, 0x240b76bd),
-            TOBN(0x2d6681c8, 0x90dad7bc), TOBN(0x3e553fc3, 0x06d38f5e),
-            TOBN(0xf27cdb9b, 0x9d5f9750), TOBN(0x3e85c52a, 0xd28c5b0e),
-            TOBN(0x190795af, 0x5247c39b), TOBN(0x547831eb, 0xbddd6828),
-            TOBN(0xf327a227, 0x4a82f424), TOBN(0x36919c78, 0x7e47f89d),
-            TOBN(0xe4783919, 0x43c7392c), TOBN(0xf101b9aa, 0x2316fefe),
-            TOBN(0xbcdc9e9c, 0x1c5009d2), TOBN(0xfb55ea13, 0x9cd18345),
-            TOBN(0xf5b5e231, 0xa3ce77c7), TOBN(0xde6b4527, 0xd2f2cb3d),
-            TOBN(0x10f6a333, 0x9bb26f5f), TOBN(0x1e85db8e, 0x044d85b6),
-            TOBN(0xc3697a08, 0x94197e54), TOBN(0x65e18cc0, 0xa7cb4ea8),
-            TOBN(0xa38c4f50, 0xa471fe6e), TOBN(0xf031747a, 0x2f13439c),
-            TOBN(0x53c4a6ba, 0xc007318b), TOBN(0xa8da3ee5, 0x1deccb3d),
-            TOBN(0x0555b31c, 0x558216b1), TOBN(0x90c7810c, 0x2f79e6c2),
-            TOBN(0x9b669f4d, 0xfe8eed3c), TOBN(0x70398ec8, 0xe0fac126),
-            TOBN(0xa96a449e, 0xf701b235), TOBN(0x0ceecdb3, 0xeb94f395),
-            TOBN(0x285fc368, 0xd0cb7431), TOBN(0x0d37bb52, 0x16a18c64),
-            TOBN(0x05110d38, 0xb880d2dd), TOBN(0xa60f177b, 0x65930d57),
-            TOBN(0x7da34a67, 0xf36235f5), TOBN(0x47f5e17c, 0x183816b9),
-            TOBN(0xc7664b57, 0xdb394af4), TOBN(0x39ba215d, 0x7036f789),
-            TOBN(0x46d2ca0e, 0x2f27b472), TOBN(0xc42647ee, 0xf73a84b7),
-            TOBN(0x44bc7545, 0x64488f1d), TOBN(0xaa922708, 0xf4cf85d5),
-            TOBN(0x721a01d5, 0x53e4df63), TOBN(0x649c0c51, 0x5db46ced),
-            TOBN(0x6bf0d64e, 0x3cffcb6c), TOBN(0xe3bf93fe, 0x50f71d96),
-            TOBN(0x75044558, 0xbcc194a0), TOBN(0x16ae3372, 0x6afdc554),
-            TOBN(0xbfc01adf, 0x5ca48f3f), TOBN(0x64352f06, 0xe22a9b84),
-            TOBN(0xcee54da1, 0xc1099e4a), TOBN(0xbbda54e8, 0xfa1b89c0),
-            TOBN(0x166a3df5, 0x6f6e55fb), TOBN(0x1ca44a24, 0x20176f88),
-            TOBN(0x936afd88, 0xdfb7b5ff), TOBN(0xe34c2437, 0x8611d4a0),
-            TOBN(0x7effbb75, 0x86142103), TOBN(0x6704ba1b, 0x1f34fc4d),
-            TOBN(0x7c2a468f, 0x10c1b122), TOBN(0x36b3a610, 0x8c6aace9),
-            TOBN(0xabfcc0a7, 0x75a0d050), TOBN(0x066f9197, 0x3ce33e32),
-            TOBN(0xce905ef4, 0x29fe09be), TOBN(0x89ee25ba, 0xa8376351),
-            TOBN(0x2a3ede22, 0xfd29dc76), TOBN(0x7fd32ed9, 0x36f17260),
-            TOBN(0x0cadcf68, 0x284b4126), TOBN(0x63422f08, 0xa7951fc8),
-            TOBN(0x562b24f4, 0x0807e199), TOBN(0xfe9ce5d1, 0x22ad4490),
-            TOBN(0xc2f51b10, 0x0db2b1b4), TOBN(0xeb3613ff, 0xe4541d0d),
-            TOBN(0xbd2c4a05, 0x2680813b), TOBN(0x527aa55d, 0x561b08d6),
-            TOBN(0xa9f8a40e, 0xa7205558), TOBN(0xe3eea56f, 0x243d0bec),
-            TOBN(0x7b853817, 0xa0ff58b3), TOBN(0xb67d3f65, 0x1a69e627),
-            TOBN(0x0b76bbb9, 0xa869b5d6), TOBN(0xa3afeb82, 0x546723ed),
-            TOBN(0x5f24416d, 0x3e554892), TOBN(0x8413b53d, 0x430e2a45),
-            TOBN(0x99c56aee, 0x9032a2a0), TOBN(0x09432bf6, 0xeec367b1),
-            TOBN(0x552850c6, 0xdaf0ecc1), TOBN(0x49ebce55, 0x5bc92048),
-            TOBN(0xdfb66ba6, 0x54811307), TOBN(0x1b84f797, 0x6f298597),
-            TOBN(0x79590481, 0x8d1d7a0d), TOBN(0xd9fabe03, 0x3a6fa556),
-            TOBN(0xa40f9c59, 0xba9e5d35), TOBN(0xcb1771c1, 0xf6247577),
-            TOBN(0x542a47ca, 0xe9a6312b), TOBN(0xa34b3560, 0x552dd8c5),
-            TOBN(0xfdf94de0, 0x0d794716), TOBN(0xd46124a9, 0x9c623094),
-            TOBN(0x56b7435d, 0x68afe8b4), TOBN(0x27f20540, 0x6c0d8ea1),
-            TOBN(0x12b77e14, 0x73186898), TOBN(0xdbc3dd46, 0x7479490f),
-            TOBN(0x951a9842, 0xc03b0c05), TOBN(0x8b1b3bb3, 0x7921bc96),
-            TOBN(0xa573b346, 0x2b202e0a), TOBN(0x77e4665d, 0x47254d56),
-            TOBN(0x08b70dfc, 0xd23e3984), TOBN(0xab86e8bc, 0xebd14236),
-            TOBN(0xaa3e07f8, 0x57114ba7), TOBN(0x5ac71689, 0xab0ef4f2),
-            TOBN(0x88fca384, 0x0139d9af), TOBN(0x72733f88, 0x76644af0),
-            TOBN(0xf122f72a, 0x65d74f4a), TOBN(0x13931577, 0xa5626c7a),
-            TOBN(0xd5b5d9eb, 0x70f8d5a4), TOBN(0x375adde7, 0xd7bbb228),
-            TOBN(0x31e88b86, 0x0c1c0b32), TOBN(0xd1f568c4, 0x173edbaa),
-            TOBN(0x1592fc83, 0x5459df02), TOBN(0x2beac0fb, 0x0fcd9a7e),
-            TOBN(0xb0a6fdb8, 0x1b473b0a), TOBN(0xe3224c6f, 0x0fe8fc48),
-            TOBN(0x680bd00e, 0xe87edf5b), TOBN(0x30385f02, 0x20e77cf5),
-            TOBN(0xe9ab98c0, 0x4d42d1b2), TOBN(0x72d191d2, 0xd3816d77),
-            TOBN(0x1564daca, 0x0917d9e5), TOBN(0x394eab59, 0x1f8fed7f),
-            TOBN(0xa209aa8d, 0x7fbb3896), TOBN(0x5564f3b9, 0xbe6ac98e),
-            TOBN(0xead21d05, 0xd73654ef), TOBN(0x68d1a9c4, 0x13d78d74),
-            TOBN(0x61e01708, 0x6d4973a0), TOBN(0x83da3500, 0x46e6d32a),
-            TOBN(0x6a3dfca4, 0x68ae0118), TOBN(0xa1b9a4c9, 0xd02da069),
-            TOBN(0x0b2ff9c7, 0xebab8302), TOBN(0x98af07c3, 0x944ba436),
-            TOBN(0x85997326, 0x995f0f9f), TOBN(0x467fade0, 0x71b58bc6),
-            TOBN(0x47e4495a, 0xbd625a2b), TOBN(0xfdd2d01d, 0x33c3b8cd),
-            TOBN(0x2c38ae28, 0xc693f9fa), TOBN(0x48622329, 0x348f7999),
-            TOBN(0x97bf738e, 0x2161f583), TOBN(0x15ee2fa7, 0x565e8cc9),
-            TOBN(0xa1a5c845, 0x5777e189), TOBN(0xcc10bee0, 0x456f2829),
-            TOBN(0x8ad95c56, 0xda762bd5), TOBN(0x152e2214, 0xe9d91da8),
-            TOBN(0x975b0e72, 0x7cb23c74), TOBN(0xfd5d7670, 0xa90c66df),
-            TOBN(0xb5b5b8ad, 0x225ffc53), TOBN(0xab6dff73, 0xfaded2ae),
-            TOBN(0xebd56781, 0x6f4cbe9d), TOBN(0x0ed8b249, 0x6a574bd7),
-            TOBN(0x41c246fe, 0x81a881fa), TOBN(0x91564805, 0xc3db9c70),
-            TOBN(0xd7c12b08, 0x5b862809), TOBN(0x1facd1f1, 0x55858d7b),
-            TOBN(0x7693747c, 0xaf09e92a), TOBN(0x3b69dcba, 0x189a425f),
-            TOBN(0x0be28e9f, 0x967365ef), TOBN(0x57300eb2, 0xe801f5c9),
-            TOBN(0x93b8ac6a, 0xd583352f), TOBN(0xa2cf1f89, 0xcd05b2b7),
-            TOBN(0x7c0c9b74, 0x4dcc40cc), TOBN(0xfee38c45, 0xada523fb),
-            TOBN(0xb49a4dec, 0x1099cc4d), TOBN(0x325c377f, 0x69f069c6),
-            TOBN(0xe12458ce, 0x476cc9ff), TOBN(0x580e0b6c, 0xc6d4cb63),
-            TOBN(0xd561c8b7, 0x9072289b), TOBN(0x0377f264, 0xa619e6da),
-            TOBN(0x26685362, 0x88e591a5), TOBN(0xa453a7bd, 0x7523ca2b),
-            TOBN(0x8a9536d2, 0xc1df4533), TOBN(0xc8e50f2f, 0xbe972f79),
-            TOBN(0xd433e50f, 0x6d3549cf), TOBN(0x6f33696f, 0xfacd665e),
-            TOBN(0x695bfdac, 0xce11fcb4), TOBN(0x810ee252, 0xaf7c9860),
-            TOBN(0x65450fe1, 0x7159bb2c), TOBN(0xf7dfbebe, 0x758b357b),
-            TOBN(0x2b057e74, 0xd69fea72), TOBN(0xd485717a, 0x92731745),
-        },
-        {
-            TOBN(0x896c42e8, 0xee36860c), TOBN(0xdaf04dfd, 0x4113c22d),
-            TOBN(0x1adbb7b7, 0x44104213), TOBN(0xe5fd5fa1, 0x1fd394ea),
-            TOBN(0x68235d94, 0x1a4e0551), TOBN(0x6772cfbe, 0x18d10151),
-            TOBN(0x276071e3, 0x09984523), TOBN(0xe4e879de, 0x5a56ba98),
-            TOBN(0xaaafafb0, 0x285b9491), TOBN(0x01a0be88, 0x1e4c705e),
-            TOBN(0xff1d4f5d, 0x2ad9caab), TOBN(0x6e349a4a, 0xc37a233f),
-            TOBN(0xcf1c1246, 0x4a1c6a16), TOBN(0xd99e6b66, 0x29383260),
-            TOBN(0xea3d4366, 0x5f6d5471), TOBN(0x36974d04, 0xff8cc89b),
-            TOBN(0xc26c49a1, 0xcfe89d80), TOBN(0xb42c026d, 0xda9c8371),
-            TOBN(0xca6c013a, 0xdad066d2), TOBN(0xfb8f7228, 0x56a4f3ee),
-            TOBN(0x08b579ec, 0xd850935b), TOBN(0x34c1a74c, 0xd631e1b3),
-            TOBN(0xcb5fe596, 0xac198534), TOBN(0x39ff21f6, 0xe1f24f25),
-            TOBN(0x27f29e14, 0x8f929057), TOBN(0x7a64ae06, 0xc0c853df),
-            TOBN(0x256cd183, 0x58e9c5ce), TOBN(0x9d9cce82, 0xded092a5),
-            TOBN(0xcc6e5979, 0x6e93b7c7), TOBN(0xe1e47092, 0x31bb9e27),
-            TOBN(0xb70b3083, 0xaa9e29a0), TOBN(0xbf181a75, 0x3785e644),
-            TOBN(0xf53f2c65, 0x8ead09f7), TOBN(0x1335e1d5, 0x9780d14d),
-            TOBN(0x69cc20e0, 0xcd1b66bc), TOBN(0x9b670a37, 0xbbe0bfc8),
-            TOBN(0xce53dc81, 0x28efbeed), TOBN(0x0c74e77c, 0x8326a6e5),
-            TOBN(0x3604e0d2, 0xb88e9a63), TOBN(0xbab38fca, 0x13dc2248),
-            TOBN(0x8ed6e8c8, 0x5c0a3f1e), TOBN(0xbcad2492, 0x7c87c37f),
-            TOBN(0xfdfb62bb, 0x9ee3b78d), TOBN(0xeba8e477, 0xcbceba46),
-            TOBN(0x37d38cb0, 0xeeaede4b), TOBN(0x0bc498e8, 0x7976deb6),
-            TOBN(0xb2944c04, 0x6b6147fb), TOBN(0x8b123f35, 0xf71f9609),
-            TOBN(0xa155dcc7, 0xde79dc24), TOBN(0xf1168a32, 0x558f69cd),
-            TOBN(0xbac21595, 0x0d1850df), TOBN(0x15c8295b, 0xb204c848),
-            TOBN(0xf661aa36, 0x7d8184ff), TOBN(0xc396228e, 0x30447bdb),
-            TOBN(0x11cd5143, 0xbde4a59e), TOBN(0xe3a26e3b, 0x6beab5e6),
-            TOBN(0xd3b3a13f, 0x1402b9d0), TOBN(0x573441c3, 0x2c7bc863),
-            TOBN(0x4b301ec4, 0x578c3e6e), TOBN(0xc26fc9c4, 0x0adaf57e),
-            TOBN(0x96e71bfd, 0x7493cea3), TOBN(0xd05d4b3f, 0x1af81456),
-            TOBN(0xdaca2a8a, 0x6a8c608f), TOBN(0x53ef07f6, 0x0725b276),
-            TOBN(0x07a5fbd2, 0x7824fc56), TOBN(0x34675218, 0x13289077),
-            TOBN(0x5bf69fd5, 0xe0c48349), TOBN(0xa613ddd3, 0xb6aa7875),
-            TOBN(0x7f78c19c, 0x5450d866), TOBN(0x46f4409c, 0x8f84a481),
-            TOBN(0x9f1d1928, 0x90fce239), TOBN(0x016c4168, 0xb2ce44b9),
-            TOBN(0xbae023f0, 0xc7435978), TOBN(0xb152c888, 0x20e30e19),
-            TOBN(0x9c241645, 0xe3fa6faf), TOBN(0x735d95c1, 0x84823e60),
-            TOBN(0x03197573, 0x03955317), TOBN(0x0b4b02a9, 0xf03b4995),
-            TOBN(0x076bf559, 0x70274600), TOBN(0x32c5cc53, 0xaaf57508),
-            TOBN(0xe8af6d1f, 0x60624129), TOBN(0xb7bc5d64, 0x9a5e2b5e),
-            TOBN(0x3814b048, 0x5f082d72), TOBN(0x76f267f2, 0xce19677a),
-            TOBN(0x626c630f, 0xb36eed93), TOBN(0x55230cd7, 0x3bf56803),
-            TOBN(0x78837949, 0xce2736a0), TOBN(0x0d792d60, 0xaa6c55f1),
-            TOBN(0x0318dbfd, 0xd5c7c5d2), TOBN(0xb38f8da7, 0x072b342d),
-            TOBN(0x3569bddc, 0x7b8de38a), TOBN(0xf25b5887, 0xa1c94842),
-            TOBN(0xb2d5b284, 0x2946ad60), TOBN(0x854f29ad, 0xe9d1707e),
-            TOBN(0xaa5159dc, 0x2c6a4509), TOBN(0x899f94c0, 0x57189837),
-            TOBN(0xcf6adc51, 0xf4a55b03), TOBN(0x261762de, 0x35e3b2d5),
-            TOBN(0x4cc43012, 0x04827b51), TOBN(0xcd22a113, 0xc6021442),
-            TOBN(0xce2fd61a, 0x247c9569), TOBN(0x59a50973, 0xd152beca),
-            TOBN(0x6c835a11, 0x63a716d4), TOBN(0xc26455ed, 0x187dedcf),
-            TOBN(0x27f536e0, 0x49ce89e7), TOBN(0x18908539, 0xcc890cb5),
-            TOBN(0x308909ab, 0xd83c2aa1), TOBN(0xecd3142b, 0x1ab73bd3),
-            TOBN(0x6a85bf59, 0xb3f5ab84), TOBN(0x3c320a68, 0xf2bea4c6),
-            TOBN(0xad8dc538, 0x6da4541f), TOBN(0xeaf34eb0, 0xb7c41186),
-            TOBN(0x1c780129, 0x977c97c4), TOBN(0x5ff9beeb, 0xc57eb9fa),
-            TOBN(0xa24d0524, 0xc822c478), TOBN(0xfd8eec2a, 0x461cd415),
-            TOBN(0xfbde194e, 0xf027458c), TOBN(0xb4ff5319, 0x1d1be115),
-            TOBN(0x63f874d9, 0x4866d6f4), TOBN(0x35c75015, 0xb21ad0c9),
-            TOBN(0xa6b5c9d6, 0x46ac49d2), TOBN(0x42c77c0b, 0x83137aa9),
-            TOBN(0x24d000fc, 0x68225a38), TOBN(0x0f63cfc8, 0x2fe1e907),
-            TOBN(0x22d1b01b, 0xc6441f95), TOBN(0x7d38f719, 0xec8e448f),
-            TOBN(0x9b33fa5f, 0x787fb1ba), TOBN(0x94dcfda1, 0x190158df),
-            TOBN(0xc47cb339, 0x5f6d4a09), TOBN(0x6b4f355c, 0xee52b826),
-            TOBN(0x3d100f5d, 0xf51b930a), TOBN(0xf4512fac, 0x9f668f69),
-            TOBN(0x546781d5, 0x206c4c74), TOBN(0xd021d4d4, 0xcb4d2e48),
-            TOBN(0x494a54c2, 0xca085c2d), TOBN(0xf1dbaca4, 0x520850a8),
-            TOBN(0x63c79326, 0x490a1aca), TOBN(0xcb64dd9c, 0x41526b02),
-            TOBN(0xbb772591, 0xa2979258), TOBN(0x3f582970, 0x48d97846),
-            TOBN(0xd66b70d1, 0x7c213ba7), TOBN(0xc28febb5, 0xe8a0ced4),
-            TOBN(0x6b911831, 0xc10338c1), TOBN(0x0d54e389, 0xbf0126f3),
-            TOBN(0x7048d460, 0x4af206ee), TOBN(0x786c88f6, 0x77e97cb9),
-            TOBN(0xd4375ae1, 0xac64802e), TOBN(0x469bcfe1, 0xd53ec11c),
-            TOBN(0xfc9b340d, 0x47062230), TOBN(0xe743bb57, 0xc5b4a3ac),
-            TOBN(0xfe00b4aa, 0x59ef45ac), TOBN(0x29a4ef23, 0x59edf188),
-            TOBN(0x40242efe, 0xb483689b), TOBN(0x2575d3f6, 0x513ac262),
-            TOBN(0xf30037c8, 0x0ca6db72), TOBN(0xc9fcce82, 0x98864be2),
-            TOBN(0x84a112ff, 0x0149362d), TOBN(0x95e57582, 0x1c4ae971),
-            TOBN(0x1fa4b1a8, 0x945cf86c), TOBN(0x4525a734, 0x0b024a2f),
-            TOBN(0xe76c8b62, 0x8f338360), TOBN(0x483ff593, 0x28edf32b),
-            TOBN(0x67e8e90a, 0x298b1aec), TOBN(0x9caab338, 0x736d9a21),
-            TOBN(0x5c09d2fd, 0x66892709), TOBN(0x2496b4dc, 0xb55a1d41),
-            TOBN(0x93f5fb1a, 0xe24a4394), TOBN(0x08c75049, 0x6fa8f6c1),
-            TOBN(0xcaead1c2, 0xc905d85f), TOBN(0xe9d7f790, 0x0733ae57),
-            TOBN(0x24c9a65c, 0xf07cdd94), TOBN(0x7389359c, 0xa4b55931),
-            TOBN(0xf58709b7, 0x367e45f7), TOBN(0x1f203067, 0xcb7e7adc),
-            TOBN(0x82444bff, 0xc7b72818), TOBN(0x07303b35, 0xbaac8033),
-            TOBN(0x1e1ee4e4, 0xd13b7ea1), TOBN(0xe6489b24, 0xe0e74180),
-            TOBN(0xa5f2c610, 0x7e70ef70), TOBN(0xa1655412, 0xbdd10894),
-            TOBN(0x555ebefb, 0x7af4194e), TOBN(0x533c1c3c, 0x8e89bd9c),
-            TOBN(0x735b9b57, 0x89895856), TOBN(0x15fb3cd2, 0x567f5c15),
-            TOBN(0x057fed45, 0x526f09fd), TOBN(0xe8a4f10c, 0x8128240a),
-            TOBN(0x9332efc4, 0xff2bfd8d), TOBN(0x214e77a0, 0xbd35aa31),
-            TOBN(0x32896d73, 0x14faa40e), TOBN(0x767867ec, 0x01e5f186),
-            TOBN(0xc9adf8f1, 0x17a1813e), TOBN(0xcb6cda78, 0x54741795),
-            TOBN(0xb7521b6d, 0x349d51aa), TOBN(0xf56b5a9e, 0xe3c7b8e9),
-            TOBN(0xc6f1e5c9, 0x32a096df), TOBN(0x083667c4, 0xa3635024),
-            TOBN(0x365ea135, 0x18087f2f), TOBN(0xf1b8eaac, 0xd136e45d),
-            TOBN(0xc8a0e484, 0x73aec989), TOBN(0xd75a324b, 0x142c9259),
-            TOBN(0xb7b4d001, 0x01dae185), TOBN(0x45434e0b, 0x9b7a94bc),
-            TOBN(0xf54339af, 0xfbd8cb0b), TOBN(0xdcc4569e, 0xe98ef49e),
-            TOBN(0x7789318a, 0x09a51299), TOBN(0x81b4d206, 0xb2b025d8),
-            TOBN(0xf64aa418, 0xfae85792), TOBN(0x3e50258f, 0xacd7baf7),
-            TOBN(0xdce84cdb, 0x2996864b), TOBN(0xa2e67089, 0x1f485fa4),
-            TOBN(0xb28b2bb6, 0x534c6a5a), TOBN(0x31a7ec6b, 0xc94b9d39),
-            TOBN(0x1d217766, 0xd6bc20da), TOBN(0x4acdb5ec, 0x86761190),
-            TOBN(0x68726328, 0x73701063), TOBN(0x4d24ee7c, 0x2128c29b),
-            TOBN(0xc072ebd3, 0xa19fd868), TOBN(0x612e481c, 0xdb8ddd3b),
-            TOBN(0xb4e1d754, 0x1a64d852), TOBN(0x00ef95ac, 0xc4c6c4ab),
-            TOBN(0x1536d2ed, 0xaa0a6c46), TOBN(0x61294086, 0x43774790),
-            TOBN(0x54af25e8, 0x343fda10), TOBN(0x9ff9d98d, 0xfd25d6f2),
-            TOBN(0x0746af7c, 0x468b8835), TOBN(0x977a31cb, 0x730ecea7),
-            TOBN(0xa5096b80, 0xc2cf4a81), TOBN(0xaa986833, 0x6458c37a),
-            TOBN(0x6af29bf3, 0xa6bd9d34), TOBN(0x6a62fe9b, 0x33c5d854),
-            TOBN(0x50e6c304, 0xb7133b5e), TOBN(0x04b60159, 0x7d6e6848),
-            TOBN(0x4cd296df, 0x5579bea4), TOBN(0x10e35ac8, 0x5ceedaf1),
-            TOBN(0x04c4c5fd, 0xe3bcc5b1), TOBN(0x95f9ee8a, 0x89412cf9),
-            TOBN(0x2c9459ee, 0x82b6eb0f), TOBN(0x2e845765, 0x95c2aadd),
-            TOBN(0x774a84ae, 0xd327fcfe), TOBN(0xd8c93722, 0x0368d476),
-            TOBN(0x0dbd5748, 0xf83e8a3b), TOBN(0xa579aa96, 0x8d2495f3),
-            TOBN(0x535996a0, 0xae496e9b), TOBN(0x07afbfe9, 0xb7f9bcc2),
-            TOBN(0x3ac1dc6d, 0x5b7bd293), TOBN(0x3b592cff, 0x7022323d),
-            TOBN(0xba0deb98, 0x9c0a3e76), TOBN(0x18e78e9f, 0x4b197acb),
-            TOBN(0x211cde10, 0x296c36ef), TOBN(0x7ee89672, 0x82c4da77),
-            TOBN(0xb617d270, 0xa57836da), TOBN(0xf0cd9c31, 0x9cb7560b),
-            TOBN(0x01fdcbf7, 0xe455fe90), TOBN(0x3fb53cbb, 0x7e7334f3),
-            TOBN(0x781e2ea4, 0x4e7de4ec), TOBN(0x8adab3ad, 0x0b384fd0),
-            TOBN(0x129eee2f, 0x53d64829), TOBN(0x7a471e17, 0xa261492b),
-            TOBN(0xe4f9adb9, 0xe4cb4a2c), TOBN(0x3d359f6f, 0x97ba2c2d),
-            TOBN(0x346c6786, 0x0aacd697), TOBN(0x92b444c3, 0x75c2f8a8),
-            TOBN(0xc79fa117, 0xd85df44e), TOBN(0x56782372, 0x398ddf31),
-            TOBN(0x60e690f2, 0xbbbab3b8), TOBN(0x4851f8ae, 0x8b04816b),
-            TOBN(0xc72046ab, 0x9c92e4d2), TOBN(0x518c74a1, 0x7cf3136b),
-            TOBN(0xff4eb50a, 0xf9877d4c), TOBN(0x14578d90, 0xa919cabb),
-            TOBN(0x8218f8c4, 0xac5eb2b6), TOBN(0xa3ccc547, 0x542016e4),
-            TOBN(0x025bf48e, 0x327f8349), TOBN(0xf3e97346, 0xf43cb641),
-            TOBN(0xdc2bafdf, 0x500f1085), TOBN(0x57167876, 0x2f063055),
-            TOBN(0x5bd914b9, 0x411925a6), TOBN(0x7c078d48, 0xa1123de5),
-            TOBN(0xee6bf835, 0x182b165d), TOBN(0xb11b5e5b, 0xba519727),
-            TOBN(0xe33ea76c, 0x1eea7b85), TOBN(0x2352b461, 0x92d4f85e),
-            TOBN(0xf101d334, 0xafe115bb), TOBN(0xfabc1294, 0x889175a3),
-            TOBN(0x7f6bcdc0, 0x5233f925), TOBN(0xe0a802db, 0xe77fec55),
-            TOBN(0xbdb47b75, 0x8069b659), TOBN(0x1c5e12de, 0xf98fbd74),
-            TOBN(0x869c58c6, 0x4b8457ee), TOBN(0xa5360f69, 0x4f7ea9f7),
-            TOBN(0xe576c09f, 0xf460b38f), TOBN(0x6b70d548, 0x22b7fb36),
-            TOBN(0x3fd237f1, 0x3bfae315), TOBN(0x33797852, 0xcbdff369),
-            TOBN(0x97df25f5, 0x25b516f9), TOBN(0x46f388f2, 0xba38ad2d),
-            TOBN(0x656c4658, 0x89d8ddbb), TOBN(0x8830b26e, 0x70f38ee8),
-            TOBN(0x4320fd5c, 0xde1212b0), TOBN(0xc34f30cf, 0xe4a2edb2),
-            TOBN(0xabb131a3, 0x56ab64b8), TOBN(0x7f77f0cc, 0xd99c5d26),
-            TOBN(0x66856a37, 0xbf981d94), TOBN(0x19e76d09, 0x738bd76e),
-            TOBN(0xe76c8ac3, 0x96238f39), TOBN(0xc0a482be, 0xa830b366),
-            TOBN(0xb7b8eaff, 0x0b4eb499), TOBN(0x8ecd83bc, 0x4bfb4865),
-            TOBN(0x971b2cb7, 0xa2f3776f), TOBN(0xb42176a4, 0xf4b88adf),
-            TOBN(0xb9617df5, 0xbe1fa446), TOBN(0x8b32d508, 0xcd031bd2),
-            TOBN(0x1c6bd47d, 0x53b618c0), TOBN(0xc424f46c, 0x6a227923),
-            TOBN(0x7303ffde, 0xdd92d964), TOBN(0xe9712878, 0x71b5abf2),
-            TOBN(0x8f48a632, 0xf815561d), TOBN(0x85f48ff5, 0xd3c055d1),
-            TOBN(0x222a1427, 0x7525684f), TOBN(0xd0d841a0, 0x67360cc3),
-            TOBN(0x4245a926, 0x0b9267c6), TOBN(0xc78913f1, 0xcf07f863),
-            TOBN(0xaa844c8e, 0x4d0d9e24), TOBN(0xa42ad522, 0x3d5f9017),
-            TOBN(0xbd371749, 0xa2c989d5), TOBN(0x928292df, 0xe1f5e78e),
-            TOBN(0x493b383e, 0x0a1ea6da), TOBN(0x5136fd8d, 0x13aee529),
-            TOBN(0x860c44b1, 0xf2c34a99), TOBN(0x3b00aca4, 0xbf5855ac),
-            TOBN(0xabf6aaa0, 0xfaaf37be), TOBN(0x65f43682, 0x2a53ec08),
-            TOBN(0x1d9a5801, 0xa11b12e1), TOBN(0x78a7ab2c, 0xe20ed475),
-            TOBN(0x0de1067e, 0x9a41e0d5), TOBN(0x30473f5f, 0x305023ea),
-            TOBN(0xdd3ae09d, 0x169c7d97), TOBN(0x5cd5baa4, 0xcfaef9cd),
-            TOBN(0x5cd7440b, 0x65a44803), TOBN(0xdc13966a, 0x47f364de),
-            TOBN(0x077b2be8, 0x2b8357c1), TOBN(0x0cb1b4c5, 0xe9d57c2a),
-            TOBN(0x7a4ceb32, 0x05ff363e), TOBN(0xf310fa4d, 0xca35a9ef),
-            TOBN(0xdbb7b352, 0xf97f68c6), TOBN(0x0c773b50, 0x0b02cf58),
-            TOBN(0xea2e4821, 0x3c1f96d9), TOBN(0xffb357b0, 0xeee01815),
-            TOBN(0xb9c924cd, 0xe0f28039), TOBN(0x0b36c95a, 0x46a3fbe4),
-            TOBN(0x1faaaea4, 0x5e46db6c), TOBN(0xcae575c3, 0x1928aaff),
-            TOBN(0x7f671302, 0xa70dab86), TOBN(0xfcbd12a9, 0x71c58cfc),
-            TOBN(0xcbef9acf, 0xbee0cb92), TOBN(0x573da0b9, 0xf8c1b583),
-            TOBN(0x4752fcfe, 0x0d41d550), TOBN(0xe7eec0e3, 0x2155cffe),
-            TOBN(0x0fc39fcb, 0x545ae248), TOBN(0x522cb8d1, 0x8065f44e),
-            TOBN(0x263c962a, 0x70cbb96c), TOBN(0xe034362a, 0xbcd124a9),
-            TOBN(0xf120db28, 0x3c2ae58d), TOBN(0xb9a38d49, 0xfef6d507),
-            TOBN(0xb1fd2a82, 0x1ff140fd), TOBN(0xbd162f30, 0x20aee7e0),
-            TOBN(0x4e17a5d4, 0xcb251949), TOBN(0x2aebcb83, 0x4f7e1c3d),
-            TOBN(0x608eb25f, 0x937b0527), TOBN(0xf42e1e47, 0xeb7d9997),
-            TOBN(0xeba699c4, 0xb8a53a29), TOBN(0x1f921c71, 0xe091b536),
-            TOBN(0xcce29e7b, 0x5b26bbd5), TOBN(0x7a8ef5ed, 0x3b61a680),
-            TOBN(0xe5ef8043, 0xba1f1c7e), TOBN(0x16ea8217, 0x18158dda),
-            TOBN(0x01778a2b, 0x599ff0f9), TOBN(0x68a923d7, 0x8104fc6b),
-            TOBN(0x5bfa44df, 0xda694ff3), TOBN(0x4f7199db, 0xf7667f12),
-            TOBN(0xc06d8ff6, 0xe46f2a79), TOBN(0x08b5dead, 0xe9f8131d),
-            TOBN(0x02519a59, 0xabb4ce7c), TOBN(0xc4f710bc, 0xb42aec3e),
-            TOBN(0x3d77b057, 0x78bde41a), TOBN(0x6474bf80, 0xb4186b5a),
-            TOBN(0x048b3f67, 0x88c65741), TOBN(0xc64519de, 0x03c7c154),
-            TOBN(0xdf073846, 0x0edfcc4f), TOBN(0x319aa737, 0x48f1aa6b),
-            TOBN(0x8b9f8a02, 0xca909f77), TOBN(0x90258139, 0x7580bfef),
-            TOBN(0xd8bfd3ca, 0xc0c22719), TOBN(0xc60209e4, 0xc9ca151e),
-            TOBN(0x7a744ab5, 0xd9a1a69c), TOBN(0x6de5048b, 0x14937f8f),
-            TOBN(0x171938d8, 0xe115ac04), TOBN(0x7df70940, 0x1c6b16d2),
-            TOBN(0xa6aeb663, 0x7f8e94e7), TOBN(0xc130388e, 0x2a2cf094),
-            TOBN(0x1850be84, 0x77f54e6e), TOBN(0x9f258a72, 0x65d60fe5),
-            TOBN(0xff7ff0c0, 0x6c9146d6), TOBN(0x039aaf90, 0xe63a830b),
-            TOBN(0x38f27a73, 0x9460342f), TOBN(0x4703148c, 0x3f795f8a),
-            TOBN(0x1bb5467b, 0x9681a97e), TOBN(0x00931ba5, 0xecaeb594),
-            TOBN(0xcdb6719d, 0x786f337c), TOBN(0xd9c01cd2, 0xe704397d),
-            TOBN(0x0f4a3f20, 0x555c2fef), TOBN(0x00452509, 0x7c0af223),
-            TOBN(0x54a58047, 0x84db8e76), TOBN(0x3bacf1aa, 0x93c8aa06),
-            TOBN(0x11ca957c, 0xf7919422), TOBN(0x50641053, 0x78cdaa40),
-            TOBN(0x7a303874, 0x9f7144ae), TOBN(0x170c963f, 0x43d4acfd),
-            TOBN(0x5e148149, 0x58ddd3ef), TOBN(0xa7bde582, 0x9e72dba8),
-            TOBN(0x0769da8b, 0x6fa68750), TOBN(0xfa64e532, 0x572e0249),
-            TOBN(0xfcaadf9d, 0x2619ad31), TOBN(0x87882daa, 0xa7b349cd),
-            TOBN(0x9f6eb731, 0x6c67a775), TOBN(0xcb10471a, 0xefc5d0b1),
-            TOBN(0xb433750c, 0xe1b806b2), TOBN(0x19c5714d, 0x57b1ae7e),
-            TOBN(0xc0dc8b7b, 0xed03fd3f), TOBN(0xdd03344f, 0x31bc194e),
-            TOBN(0xa66c52a7, 0x8c6320b5), TOBN(0x8bc82ce3, 0xd0b6fd93),
-            TOBN(0xf8e13501, 0xb35f1341), TOBN(0xe53156dd, 0x25a43e42),
-            TOBN(0xd3adf27e, 0x4daeb85c), TOBN(0xb81d8379, 0xbbeddeb5),
-            TOBN(0x1b0b546e, 0x2e435867), TOBN(0x9020eb94, 0xeba5dd60),
-            TOBN(0x37d91161, 0x8210cb9d), TOBN(0x4c596b31, 0x5c91f1cf),
-            TOBN(0xb228a90f, 0x0e0b040d), TOBN(0xbaf02d82, 0x45ff897f),
-            TOBN(0x2aac79e6, 0x00fa6122), TOBN(0x24828817, 0x8e36f557),
-            TOBN(0xb9521d31, 0x113ec356), TOBN(0x9e48861e, 0x15eff1f8),
-            TOBN(0x2aa1d412, 0xe0d41715), TOBN(0x71f86203, 0x53f131b8),
-            TOBN(0xf60da8da, 0x3fd19408), TOBN(0x4aa716dc, 0x278d9d99),
-            TOBN(0x394531f7, 0xa8c51c90), TOBN(0xb560b0e8, 0xf59db51c),
-            TOBN(0xa28fc992, 0xfa34bdad), TOBN(0xf024fa14, 0x9cd4f8bd),
-            TOBN(0x5cf530f7, 0x23a9d0d3), TOBN(0x615ca193, 0xe28c9b56),
-            TOBN(0x6d2a483d, 0x6f73c51e), TOBN(0xa4cb2412, 0xea0dc2dd),
-            TOBN(0x50663c41, 0x1eb917ff), TOBN(0x3d3a74cf, 0xeade299e),
-            TOBN(0x29b3990f, 0x4a7a9202), TOBN(0xa9bccf59, 0xa7b15c3d),
-            TOBN(0x66a3ccdc, 0xa5df9208), TOBN(0x48027c14, 0x43f2f929),
-            TOBN(0xd385377c, 0x40b557f0), TOBN(0xe001c366, 0xcd684660),
-            TOBN(0x1b18ed6b, 0xe2183a27), TOBN(0x879738d8, 0x63210329),
-            TOBN(0xa687c74b, 0xbda94882), TOBN(0xd1bbcc48, 0xa684b299),
-            TOBN(0xaf6f1112, 0x863b3724), TOBN(0x6943d1b4, 0x2c8ce9f8),
-            TOBN(0xe044a3bb, 0x098cafb4), TOBN(0x27ed2310, 0x60d48caf),
-            TOBN(0x542b5675, 0x3a31b84d), TOBN(0xcbf3dd50, 0xfcddbed7),
-            TOBN(0x25031f16, 0x41b1d830), TOBN(0xa7ec851d, 0xcb0c1e27),
-            TOBN(0xac1c8fe0, 0xb5ae75db), TOBN(0xb24c7557, 0x08c52120),
-            TOBN(0x57f811dc, 0x1d4636c3), TOBN(0xf8436526, 0x681a9939),
-            TOBN(0x1f6bc6d9, 0x9c81adb3), TOBN(0x840f8ac3, 0x5b7d80d4),
-            TOBN(0x731a9811, 0xf4387f1a), TOBN(0x7c501cd3, 0xb5156880),
-            TOBN(0xa5ca4a07, 0xdfe68867), TOBN(0xf123d8f0, 0x5fcea120),
-            TOBN(0x1fbb0e71, 0xd607039e), TOBN(0x2b70e215, 0xcd3a4546),
-            TOBN(0x32d2f01d, 0x53324091), TOBN(0xb796ff08, 0x180ab19b),
-            TOBN(0x32d87a86, 0x3c57c4aa), TOBN(0x2aed9caf, 0xb7c49a27),
-            TOBN(0x9fb35eac, 0x31630d98), TOBN(0x338e8cdf, 0x5c3e20a3),
-            TOBN(0x80f16182, 0x66cde8db), TOBN(0x4e159980, 0x2d72fd36),
-            TOBN(0xd7b8f13b, 0x9b6e5072), TOBN(0xf5213907, 0x3b7b5dc1),
-            TOBN(0x4d431f1d, 0x8ce4396e), TOBN(0x37a1a680, 0xa7ed2142),
-            TOBN(0xbf375696, 0xd01aaf6b), TOBN(0xaa1c0c54, 0xe63aab66),
-            TOBN(0x3014368b, 0x4ed80940), TOBN(0x67e6d056, 0x7a6fcedd),
-            TOBN(0x7c208c49, 0xca97579f), TOBN(0xfe3d7a81, 0xa23597f6),
-            TOBN(0x5e203202, 0x7e096ae2), TOBN(0xb1f3e1e7, 0x24b39366),
-            TOBN(0x26da26f3, 0x2fdcdffc), TOBN(0x79422f1d, 0x6097be83),
-        },
-        {
-            TOBN(0x263a2cfb, 0x9db3b381), TOBN(0x9c3a2dee, 0xd4df0a4b),
-            TOBN(0x728d06e9, 0x7d04e61f), TOBN(0x8b1adfbc, 0x42449325),
-            TOBN(0x6ec1d939, 0x7e053a1b), TOBN(0xee2be5c7, 0x66daf707),
-            TOBN(0x80ba1e14, 0x810ac7ab), TOBN(0xdd2ae778, 0xf530f174),
-            TOBN(0x0435d97a, 0x205b9d8b), TOBN(0x6eb8f064, 0x056756d4),
-            TOBN(0xd5e88a8b, 0xb6f8210e), TOBN(0x070ef12d, 0xec9fd9ea),
-            TOBN(0x4d849505, 0x3bcc876a), TOBN(0x12a75338, 0xa7404ce3),
-            TOBN(0xd22b49e1, 0xb8a1db5e), TOBN(0xec1f2051, 0x14bfa5ad),
-            TOBN(0xadbaeb79, 0xb6828f36), TOBN(0x9d7a0258, 0x01bd5b9e),
-            TOBN(0xeda01e0d, 0x1e844b0c), TOBN(0x4b625175, 0x887edfc9),
-            TOBN(0x14109fdd, 0x9669b621), TOBN(0x88a2ca56, 0xf6f87b98),
-            TOBN(0xfe2eb788, 0x170df6bc), TOBN(0x0cea06f4, 0xffa473f9),
-            TOBN(0x43ed81b5, 0xc4e83d33), TOBN(0xd9f35879, 0x5efd488b),
-            TOBN(0x164a620f, 0x9deb4d0f), TOBN(0xc6927bdb, 0xac6a7394),
-            TOBN(0x45c28df7, 0x9f9e0f03), TOBN(0x2868661e, 0xfcd7e1a9),
-            TOBN(0x7cf4e8d0, 0xffa348f1), TOBN(0x6bd4c284, 0x398538e0),
-            TOBN(0x2618a091, 0x289a8619), TOBN(0xef796e60, 0x6671b173),
-            TOBN(0x664e46e5, 0x9090c632), TOBN(0xa38062d4, 0x1e66f8fb),
-            TOBN(0x6c744a20, 0x0573274e), TOBN(0xd07b67e4, 0xa9271394),
-            TOBN(0x391223b2, 0x6bdc0e20), TOBN(0xbe2d93f1, 0xeb0a05a7),
-            TOBN(0xf23e2e53, 0x3f36d141), TOBN(0xe84bb3d4, 0x4dfca442),
-            TOBN(0xb804a48d, 0x6b7c023a), TOBN(0x1e16a8fa, 0x76431c3b),
-            TOBN(0x1b5452ad, 0xddd472e0), TOBN(0x7d405ee7, 0x0d1ee127),
-            TOBN(0x50fc6f1d, 0xffa27599), TOBN(0x351ac53c, 0xbf391b35),
-            TOBN(0x7efa14b8, 0x4444896b), TOBN(0x64974d2f, 0xf94027fb),
-            TOBN(0xefdcd0e8, 0xde84487d), TOBN(0x8c45b260, 0x2b48989b),
-            TOBN(0xa8fcbbc2, 0xd8463487), TOBN(0xd1b2b3f7, 0x3fbc476c),
-            TOBN(0x21d005b7, 0xc8f443c0), TOBN(0x518f2e67, 0x40c0139c),
-            TOBN(0x56036e8c, 0x06d75fc1), TOBN(0x2dcf7bb7, 0x3249a89f),
-            TOBN(0x81dd1d3d, 0xe245e7dd), TOBN(0xf578dc4b, 0xebd6e2a7),
-            TOBN(0x4c028903, 0xdf2ce7a0), TOBN(0xaee36288, 0x9c39afac),
-            TOBN(0xdc847c31, 0x146404ab), TOBN(0x6304c0d8, 0xa4e97818),
-            TOBN(0xae51dca2, 0xa91f6791), TOBN(0x2abe4190, 0x9baa9efc),
-            TOBN(0xd9d2e2f4, 0x559c7ac1), TOBN(0xe82f4b51, 0xfc9f773a),
-            TOBN(0xa7713027, 0x4073e81c), TOBN(0xc0276fac, 0xfbb596fc),
-            TOBN(0x1d819fc9, 0xa684f70c), TOBN(0x29b47fdd, 0xc9f7b1e0),
-            TOBN(0x358de103, 0x459b1940), TOBN(0xec881c59, 0x5b013e93),
-            TOBN(0x51574c93, 0x49532ad3), TOBN(0x2db1d445, 0xb37b46de),
-            TOBN(0xc6445b87, 0xdf239fd8), TOBN(0xc718af75, 0x151d24ee),
-            TOBN(0xaea1c4a4, 0xf43c6259), TOBN(0x40c0e5d7, 0x70be02f7),
-            TOBN(0x6a4590f4, 0x721b33f2), TOBN(0x2124f1fb, 0xfedf04ea),
-            TOBN(0xf8e53cde, 0x9745efe7), TOBN(0xe7e10432, 0x65f046d9),
-            TOBN(0xc3fca28e, 0xe4d0c7e6), TOBN(0x847e339a, 0x87253b1b),
-            TOBN(0x9b595348, 0x3743e643), TOBN(0xcb6a0a0b, 0x4fd12fc5),
-            TOBN(0xfb6836c3, 0x27d02dcc), TOBN(0x5ad00982, 0x7a68bcc2),
-            TOBN(0x1b24b44c, 0x005e912d), TOBN(0xcc83d20f, 0x811fdcfe),
-            TOBN(0x36527ec1, 0x666fba0c), TOBN(0x69948197, 0x14754635),
-            TOBN(0xfcdcb1a8, 0x556da9c2), TOBN(0xa5934267, 0x81a732b2),
-            TOBN(0xec1214ed, 0xa714181d), TOBN(0x609ac13b, 0x6067b341),
-            TOBN(0xff4b4c97, 0xa545df1f), TOBN(0xa1240501, 0x34d2076b),
-            TOBN(0x6efa0c23, 0x1409ca97), TOBN(0x254cc1a8, 0x20638c43),
-            TOBN(0xd4e363af, 0xdcfb46cd), TOBN(0x62c2adc3, 0x03942a27),
-            TOBN(0xc67b9df0, 0x56e46483), TOBN(0xa55abb20, 0x63736356),
-            TOBN(0xab93c098, 0xc551bc52), TOBN(0x382b49f9, 0xb15fe64b),
-            TOBN(0x9ec221ad, 0x4dff8d47), TOBN(0x79caf615, 0x437df4d6),
-            TOBN(0x5f13dc64, 0xbb456509), TOBN(0xe4c589d9, 0x191f0714),
-            TOBN(0x27b6a8ab, 0x3fd40e09), TOBN(0xe455842e, 0x77313ea9),
-            TOBN(0x8b51d1e2, 0x1f55988b), TOBN(0x5716dd73, 0x062bbbfc),
-            TOBN(0x633c11e5, 0x4e8bf3de), TOBN(0x9a0e77b6, 0x1b85be3b),
-            TOBN(0x56510729, 0x0911cca6), TOBN(0x27e76495, 0xefa6590f),
-            TOBN(0xe4ac8b33, 0x070d3aab), TOBN(0x2643672b, 0x9a2cd5e5),
-            TOBN(0x52eff79b, 0x1cfc9173), TOBN(0x665ca49b, 0x90a7c13f),
-            TOBN(0x5a8dda59, 0xb3efb998), TOBN(0x8a5b922d, 0x052f1341),
-            TOBN(0xae9ebbab, 0x3cf9a530), TOBN(0x35986e7b, 0xf56da4d7),
-            TOBN(0x3a636b5c, 0xff3513cc), TOBN(0xbb0cf8ba, 0x3198f7dd),
-            TOBN(0xb8d40522, 0x41f16f86), TOBN(0x760575d8, 0xde13a7bf),
-            TOBN(0x36f74e16, 0x9f7aa181), TOBN(0x163a3ecf, 0xf509ed1c),
-            TOBN(0x6aead61f, 0x3c40a491), TOBN(0x158c95fc, 0xdfe8fcaa),
-            TOBN(0xa3991b6e, 0x13cda46f), TOBN(0x79482415, 0x342faed0),
-            TOBN(0xf3ba5bde, 0x666b5970), TOBN(0x1d52e6bc, 0xb26ab6dd),
-            TOBN(0x768ba1e7, 0x8608dd3d), TOBN(0x4930db2a, 0xea076586),
-            TOBN(0xd9575714, 0xe7dc1afa), TOBN(0x1fc7bf7d, 0xf7c58817),
-            TOBN(0x6b47accd, 0xd9eee96c), TOBN(0x0ca277fb, 0xe58cec37),
-            TOBN(0x113fe413, 0xe702c42a), TOBN(0xdd1764ee, 0xc47cbe51),
-            TOBN(0x041e7cde, 0x7b3ed739), TOBN(0x50cb7459, 0x5ce9e1c0),
-            TOBN(0x35568513, 0x2925b212), TOBN(0x7cff95c4, 0x001b081c),
-            TOBN(0x63ee4cbd, 0x8088b454), TOBN(0xdb7f32f7, 0x9a9e0c8a),
-            TOBN(0xb377d418, 0x6b2447cb), TOBN(0xe3e982aa, 0xd370219b),
-            TOBN(0x06ccc1e4, 0xc2a2a593), TOBN(0x72c36865, 0x0773f24f),
-            TOBN(0xa13b4da7, 0x95859423), TOBN(0x8bbf1d33, 0x75040c8f),
-            TOBN(0x726f0973, 0xda50c991), TOBN(0x48afcd5b, 0x822d6ee2),
-            TOBN(0xe5fc718b, 0x20fd7771), TOBN(0xb9e8e77d, 0xfd0807a1),
-            TOBN(0x7f5e0f44, 0x99a7703d), TOBN(0x6972930e, 0x618e36f3),
-            TOBN(0x2b7c77b8, 0x23807bbe), TOBN(0xe5b82405, 0xcb27ff50),
-            TOBN(0xba8b8be3, 0xbd379062), TOBN(0xd64b7a1d, 0x2dce4a92),
-            TOBN(0x040a73c5, 0xb2952e37), TOBN(0x0a9e252e, 0xd438aeca),
-            TOBN(0xdd43956b, 0xc39d3bcb), TOBN(0x1a31ca00, 0xb32b2d63),
-            TOBN(0xd67133b8, 0x5c417a18), TOBN(0xd08e4790, 0x2ef442c8),
-            TOBN(0x98cb1ae9, 0x255c0980), TOBN(0x4bd86381, 0x2b4a739f),
-            TOBN(0x5a5c31e1, 0x1e4a45a1), TOBN(0x1e5d55fe, 0x9cb0db2f),
-            TOBN(0x74661b06, 0x8ff5cc29), TOBN(0x026b389f, 0x0eb8a4f4),
-            TOBN(0x536b21a4, 0x58848c24), TOBN(0x2e5bf8ec, 0x81dc72b0),
-            TOBN(0x03c187d0, 0xad886aac), TOBN(0x5c16878a, 0xb771b645),
-            TOBN(0xb07dfc6f, 0xc74045ab), TOBN(0x2c6360bf, 0x7800caed),
-            TOBN(0x24295bb5, 0xb9c972a3), TOBN(0xc9e6f88e, 0x7c9a6dba),
-            TOBN(0x90ffbf24, 0x92a79aa6), TOBN(0xde29d50a, 0x41c26ac2),
-            TOBN(0x9f0af483, 0xd309cbe6), TOBN(0x5b020d8a, 0xe0bced4f),
-            TOBN(0x606e986d, 0xb38023e3), TOBN(0xad8f2c9d, 0x1abc6933),
-            TOBN(0x19292e1d, 0xe7400e93), TOBN(0xfe3e18a9, 0x52be5e4d),
-            TOBN(0xe8e9771d, 0x2e0680bf), TOBN(0x8c5bec98, 0xc54db063),
-            TOBN(0x2af9662a, 0x74a55d1f), TOBN(0xe3fbf28f, 0x046f66d8),
-            TOBN(0xa3a72ab4, 0xd4dc4794), TOBN(0x09779f45, 0x5c7c2dd8),
-            TOBN(0xd893bdaf, 0xc3d19d8d), TOBN(0xd5a75094, 0x57d6a6df),
-            TOBN(0x8cf8fef9, 0x952e6255), TOBN(0x3da67cfb, 0xda9a8aff),
-            TOBN(0x4c23f62a, 0x2c160dcd), TOBN(0x34e6c5e3, 0x8f90eaef),
-            TOBN(0x35865519, 0xa9a65d5a), TOBN(0x07c48aae, 0x8fd38a3d),
-            TOBN(0xb7e7aeda, 0x50068527), TOBN(0x2c09ef23, 0x1c90936a),
-            TOBN(0x31ecfeb6, 0xe879324c), TOBN(0xa0871f6b, 0xfb0ec938),
-            TOBN(0xb1f0fb68, 0xd84d835d), TOBN(0xc90caf39, 0x861dc1e6),
-            TOBN(0x12e5b046, 0x7594f8d7), TOBN(0x26897ae2, 0x65012b92),
-            TOBN(0xbcf68a08, 0xa4d6755d), TOBN(0x403ee41c, 0x0991fbda),
-            TOBN(0x733e343e, 0x3bbf17e8), TOBN(0xd2c7980d, 0x679b3d65),
-            TOBN(0x33056232, 0xd2e11305), TOBN(0x966be492, 0xf3c07a6f),
-            TOBN(0x6a8878ff, 0xbb15509d), TOBN(0xff221101, 0x0a9b59a4),
-            TOBN(0x6c9f564a, 0xabe30129), TOBN(0xc6f2c940, 0x336e64cf),
-            TOBN(0x0fe75262, 0x8b0c8022), TOBN(0xbe0267e9, 0x6ae8db87),
-            TOBN(0x22e192f1, 0x93bc042b), TOBN(0xf085b534, 0xb237c458),
-            TOBN(0xa0d192bd, 0x832c4168), TOBN(0x7a76e9e3, 0xbdf6271d),
-            TOBN(0x52a882fa, 0xb88911b5), TOBN(0xc85345e4, 0xb4db0eb5),
-            TOBN(0xa3be02a6, 0x81a7c3ff), TOBN(0x51889c8c, 0xf0ec0469),
-            TOBN(0x9d031369, 0xa5e829e5), TOBN(0xcbb4c6fc, 0x1607aa41),
-            TOBN(0x75ac59a6, 0x241d84c1), TOBN(0xc043f2bf, 0x8829e0ee),
-            TOBN(0x82a38f75, 0x8ea5e185), TOBN(0x8bda40b9, 0xd87cbd9f),
-            TOBN(0x9e65e75e, 0x2d8fc601), TOBN(0x3d515f74, 0xa35690b3),
-            TOBN(0x534acf4f, 0xda79e5ac), TOBN(0x68b83b3a, 0x8630215f),
-            TOBN(0x5c748b2e, 0xd085756e), TOBN(0xb0317258, 0xe5d37cb2),
-            TOBN(0x6735841a, 0xc5ccc2c4), TOBN(0x7d7dc96b, 0x3d9d5069),
-            TOBN(0xa147e410, 0xfd1754bd), TOBN(0x65296e94, 0xd399ddd5),
-            TOBN(0xf6b5b2d0, 0xbc8fa5bc), TOBN(0x8a5ead67, 0x500c277b),
-            TOBN(0x214625e6, 0xdfa08a5d), TOBN(0x51fdfedc, 0x959cf047),
-            TOBN(0x6bc9430b, 0x289fca32), TOBN(0xe36ff0cf, 0x9d9bdc3f),
-            TOBN(0x2fe187cb, 0x58ea0ede), TOBN(0xed66af20, 0x5a900b3f),
-            TOBN(0x00e0968b, 0x5fa9f4d6), TOBN(0x2d4066ce, 0x37a362e7),
-            TOBN(0xa99a9748, 0xbd07e772), TOBN(0x710989c0, 0x06a4f1d0),
-            TOBN(0xd5dedf35, 0xce40cbd8), TOBN(0xab55c5f0, 0x1743293d),
-            TOBN(0x766f1144, 0x8aa24e2c), TOBN(0x94d874f8, 0x605fbcb4),
-            TOBN(0xa365f0e8, 0xa518001b), TOBN(0xee605eb6, 0x9d04ef0f),
-            TOBN(0x5a3915cd, 0xba8d4d25), TOBN(0x44c0e1b8, 0xb5113472),
-            TOBN(0xcbb024e8, 0x8b6740dc), TOBN(0x89087a53, 0xee1d4f0c),
-            TOBN(0xa88fa05c, 0x1fc4e372), TOBN(0x8bf395cb, 0xaf8b3af2),
-            TOBN(0x1e71c9a1, 0xdeb8568b), TOBN(0xa35daea0, 0x80fb3d32),
-            TOBN(0xe8b6f266, 0x2cf8fb81), TOBN(0x6d51afe8, 0x9490696a),
-            TOBN(0x81beac6e, 0x51803a19), TOBN(0xe3d24b7f, 0x86219080),
-            TOBN(0x727cfd9d, 0xdf6f463c), TOBN(0x8c6865ca, 0x72284ee8),
-            TOBN(0x32c88b7d, 0xb743f4ef), TOBN(0x3793909b, 0xe7d11dce),
-            TOBN(0xd398f922, 0x2ff2ebe8), TOBN(0x2c70ca44, 0xe5e49796),
-            TOBN(0xdf4d9929, 0xcb1131b1), TOBN(0x7826f298, 0x25888e79),
-            TOBN(0x4d3a112c, 0xf1d8740a), TOBN(0x00384cb6, 0x270afa8b),
-            TOBN(0xcb64125b, 0x3ab48095), TOBN(0x3451c256, 0x62d05106),
-            TOBN(0xd73d577d, 0xa4955845), TOBN(0x39570c16, 0xbf9f4433),
-            TOBN(0xd7dfaad3, 0xadecf263), TOBN(0xf1c3d8d1, 0xdc76e102),
-            TOBN(0x5e774a58, 0x54c6a836), TOBN(0xdad4b672, 0x3e92d47b),
-            TOBN(0xbe7e990f, 0xf0d796a0), TOBN(0x5fc62478, 0xdf0e8b02),
-            TOBN(0x8aae8bf4, 0x030c00ad), TOBN(0x3d2db93b, 0x9004ba0f),
-            TOBN(0xe48c8a79, 0xd85d5ddc), TOBN(0xe907caa7, 0x6bb07f34),
-            TOBN(0x58db343a, 0xa39eaed5), TOBN(0x0ea6e007, 0xadaf5724),
-            TOBN(0xe00df169, 0xd23233f3), TOBN(0x3e322796, 0x77cb637f),
-            TOBN(0x1f897c0e, 0x1da0cf6c), TOBN(0xa651f5d8, 0x31d6bbdd),
-            TOBN(0xdd61af19, 0x1a230c76), TOBN(0xbd527272, 0xcdaa5e4a),
-            TOBN(0xca753636, 0xd0abcd7e), TOBN(0x78bdd37c, 0x370bd8dc),
-            TOBN(0xc23916c2, 0x17cd93fe), TOBN(0x65b97a4d, 0xdadce6e2),
-            TOBN(0xe04ed4eb, 0x174e42f8), TOBN(0x1491ccaa, 0xbb21480a),
-            TOBN(0x145a8280, 0x23196332), TOBN(0x3c3862d7, 0x587b479a),
-            TOBN(0x9f4a88a3, 0x01dcd0ed), TOBN(0x4da2b7ef, 0x3ea12f1f),
-            TOBN(0xf8e7ae33, 0xb126e48e), TOBN(0x404a0b32, 0xf494e237),
-            TOBN(0x9beac474, 0xc55acadb), TOBN(0x4ee5cf3b, 0xcbec9fd9),
-            TOBN(0x336b33b9, 0x7df3c8c3), TOBN(0xbd905fe3, 0xb76808fd),
-            TOBN(0x8f436981, 0xaa45c16a), TOBN(0x255c5bfa, 0x3dd27b62),
-            TOBN(0x71965cbf, 0xc3dd9b4d), TOBN(0xce23edbf, 0xfc068a87),
-            TOBN(0xb78d4725, 0x745b029b), TOBN(0x74610713, 0xcefdd9bd),
-            TOBN(0x7116f75f, 0x1266bf52), TOBN(0x02046722, 0x18e49bb6),
-            TOBN(0xdf43df9f, 0x3d6f19e3), TOBN(0xef1bc7d0, 0xe685cb2f),
-            TOBN(0xcddb27c1, 0x7078c432), TOBN(0xe1961b9c, 0xb77fedb7),
-            TOBN(0x1edc2f5c, 0xc2290570), TOBN(0x2c3fefca, 0x19cbd886),
-            TOBN(0xcf880a36, 0xc2af389a), TOBN(0x96c610fd, 0xbda71cea),
-            TOBN(0xf03977a9, 0x32aa8463), TOBN(0x8eb7763f, 0x8586d90a),
-            TOBN(0x3f342454, 0x2a296e77), TOBN(0xc8718683, 0x42837a35),
-            TOBN(0x7dc71090, 0x6a09c731), TOBN(0x54778ffb, 0x51b816db),
-            TOBN(0x6b33bfec, 0xaf06defd), TOBN(0xfe3c105f, 0x8592b70b),
-            TOBN(0xf937fda4, 0x61da6114), TOBN(0x3c13e651, 0x4c266ad7),
-            TOBN(0xe363a829, 0x855938e8), TOBN(0x2eeb5d9e, 0x9de54b72),
-            TOBN(0xbeb93b0e, 0x20ccfab9), TOBN(0x3dffbb5f, 0x25e61a25),
-            TOBN(0x7f655e43, 0x1acc093d), TOBN(0x0cb6cc3d, 0x3964ce61),
-            TOBN(0x6ab283a1, 0xe5e9b460), TOBN(0x55d787c5, 0xa1c7e72d),
-            TOBN(0x4d2efd47, 0xdeadbf02), TOBN(0x11e80219, 0xac459068),
-            TOBN(0x810c7626, 0x71f311f0), TOBN(0xfa17ef8d, 0x4ab6ef53),
-            TOBN(0xaf47fd25, 0x93e43bff), TOBN(0x5cb5ff3f, 0x0be40632),
-            TOBN(0x54687106, 0x8ee61da3), TOBN(0x7764196e, 0xb08afd0f),
-            TOBN(0x831ab3ed, 0xf0290a8f), TOBN(0xcae81966, 0xcb47c387),
-            TOBN(0xaad7dece, 0x184efb4f), TOBN(0xdcfc53b3, 0x4749110e),
-            TOBN(0x6698f23c, 0x4cb632f9), TOBN(0xc42a1ad6, 0xb91f8067),
-            TOBN(0xb116a81d, 0x6284180a), TOBN(0xebedf5f8, 0xe901326f),
-            TOBN(0xf2274c9f, 0x97e3e044), TOBN(0x42018520, 0x11d09fc9),
-            TOBN(0x56a65f17, 0xd18e6e23), TOBN(0x2ea61e2a, 0x352b683c),
-            TOBN(0x27d291bc, 0x575eaa94), TOBN(0x9e7bc721, 0xb8ff522d),
-            TOBN(0x5f7268bf, 0xa7f04d6f), TOBN(0x5868c73f, 0xaba41748),
-            TOBN(0x9f85c2db, 0x7be0eead), TOBN(0x511e7842, 0xff719135),
-            TOBN(0x5a06b1e9, 0xc5ea90d7), TOBN(0x0c19e283, 0x26fab631),
-            TOBN(0x8af8f0cf, 0xe9206c55), TOBN(0x89389cb4, 0x3553c06a),
-            TOBN(0x39dbed97, 0xf65f8004), TOBN(0x0621b037, 0xc508991d),
-            TOBN(0x1c52e635, 0x96e78cc4), TOBN(0x5385c8b2, 0x0c06b4a8),
-            TOBN(0xd84ddfdb, 0xb0e87d03), TOBN(0xc49dfb66, 0x934bafad),
-            TOBN(0x7071e170, 0x59f70772), TOBN(0x3a073a84, 0x3a1db56b),
-            TOBN(0x03494903, 0x3b8af190), TOBN(0x7d882de3, 0xd32920f0),
-            TOBN(0x91633f0a, 0xb2cf8940), TOBN(0x72b0b178, 0x6f948f51),
-            TOBN(0x2d28dc30, 0x782653c8), TOBN(0x88829849, 0xdb903a05),
-            TOBN(0xb8095d0c, 0x6a19d2bb), TOBN(0x4b9e7f0c, 0x86f782cb),
-            TOBN(0x7af73988, 0x2d907064), TOBN(0xd12be0fe, 0x8b32643c),
-            TOBN(0x358ed23d, 0x0e165dc3), TOBN(0x3d47ce62, 0x4e2378ce),
-            TOBN(0x7e2bb0b9, 0xfeb8a087), TOBN(0x3246e8ae, 0xe29e10b9),
-            TOBN(0x459f4ec7, 0x03ce2b4d), TOBN(0xe9b4ca1b, 0xbbc077cf),
-            TOBN(0x2613b4f2, 0x0e9940c1), TOBN(0xfc598bb9, 0x047d1eb1),
-            TOBN(0x9744c62b, 0x45036099), TOBN(0xa9dee742, 0x167c65d8),
-            TOBN(0x0c511525, 0xdabe1943), TOBN(0xda110554, 0x93c6c624),
-            TOBN(0xae00a52c, 0x651a3be2), TOBN(0xcda5111d, 0x884449a6),
-            TOBN(0x063c06f4, 0xff33bed1), TOBN(0x73baaf9a, 0x0d3d76b4),
-            TOBN(0x52fb0c9d, 0x7fc63668), TOBN(0x6886c9dd, 0x0c039cde),
-            TOBN(0x602bd599, 0x55b22351), TOBN(0xb00cab02, 0x360c7c13),
-            TOBN(0x8cb616bc, 0x81b69442), TOBN(0x41486700, 0xb55c3cee),
-            TOBN(0x71093281, 0xf49ba278), TOBN(0xad956d9c, 0x64a50710),
-            TOBN(0x9561f28b, 0x638a7e81), TOBN(0x54155cdf, 0x5980ddc3),
-            TOBN(0xb2db4a96, 0xd26f247a), TOBN(0x9d774e4e, 0x4787d100),
-            TOBN(0x1a9e6e2e, 0x078637d2), TOBN(0x1c363e2d, 0x5e0ae06a),
-            TOBN(0x7493483e, 0xe9cfa354), TOBN(0x76843cb3, 0x7f74b98d),
-            TOBN(0xbaca6591, 0xd4b66947), TOBN(0xb452ce98, 0x04460a8c),
-            TOBN(0x6830d246, 0x43768f55), TOBN(0xf4197ed8, 0x7dff12df),
-            TOBN(0x6521b472, 0x400dd0f7), TOBN(0x59f5ca8f, 0x4b1e7093),
-            TOBN(0x6feff11b, 0x080338ae), TOBN(0x0ada31f6, 0xa29ca3c6),
-            TOBN(0x24794eb6, 0x94a2c215), TOBN(0xd83a43ab, 0x05a57ab4),
-            TOBN(0x264a543a, 0x2a6f89fe), TOBN(0x2c2a3868, 0xdd5ec7c2),
-            TOBN(0xd3373940, 0x8439d9b2), TOBN(0x715ea672, 0x0acd1f11),
-            TOBN(0x42c1d235, 0xe7e6cc19), TOBN(0x81ce6e96, 0xb990585c),
-            TOBN(0x04e5dfe0, 0xd809c7bd), TOBN(0xd7b2580c, 0x8f1050ab),
-            TOBN(0x6d91ad78, 0xd8a4176f), TOBN(0x0af556ee, 0x4e2e897c),
-            TOBN(0x162a8b73, 0x921de0ac), TOBN(0x52ac9c22, 0x7ea78400),
-            TOBN(0xee2a4eea, 0xefce2174), TOBN(0xbe61844e, 0x6d637f79),
-            TOBN(0x0491f1bc, 0x789a283b), TOBN(0x72d3ac3d, 0x880836f4),
-            TOBN(0xaa1c5ea3, 0x88e5402d), TOBN(0x1b192421, 0xd5cc473d),
-            TOBN(0x5c0b9998, 0x9dc84cac), TOBN(0xb0a8482d, 0x9c6e75b8),
-            TOBN(0x639961d0, 0x3a191ce2), TOBN(0xda3bc865, 0x6d837930),
-            TOBN(0xca990653, 0x056e6f8f), TOBN(0x84861c41, 0x64d133a7),
-            TOBN(0x8b403276, 0x746abe40), TOBN(0xb7b4d51a, 0xebf8e303),
-            TOBN(0x05b43211, 0x220a255d), TOBN(0xc997152c, 0x02419e6e),
-            TOBN(0x76ff47b6, 0x630c2fea), TOBN(0x50518677, 0x281fdade),
-            TOBN(0x3283b8ba, 0xcf902b0b), TOBN(0x8d4b4eb5, 0x37db303b),
-            TOBN(0xcc89f42d, 0x755011bc), TOBN(0xb43d74bb, 0xdd09d19b),
-            TOBN(0x65746bc9, 0x8adba350), TOBN(0x364eaf8c, 0xb51c1927),
-            TOBN(0x13c76596, 0x10ad72ec), TOBN(0x30045121, 0xf8d40c20),
-            TOBN(0x6d2d99b7, 0xea7b979b), TOBN(0xcd78cd74, 0xe6fb3bcd),
-            TOBN(0x11e45a9e, 0x86cffbfe), TOBN(0x78a61cf4, 0x637024f6),
-            TOBN(0xd06bc872, 0x3d502295), TOBN(0xf1376854, 0x458cb288),
-            TOBN(0xb9db26a1, 0x342f8586), TOBN(0xf33effcf, 0x4beee09e),
-            TOBN(0xd7e0c4cd, 0xb30cfb3a), TOBN(0x6d09b8c1, 0x6c9db4c8),
-            TOBN(0x40ba1a42, 0x07c8d9df), TOBN(0x6fd495f7, 0x1c52c66d),
-            TOBN(0xfb0e169f, 0x275264da), TOBN(0x80c2b746, 0xe57d8362),
-            TOBN(0xedd987f7, 0x49ad7222), TOBN(0xfdc229af, 0x4398ec7b),
-        },
-        {
-            TOBN(0xb0d1ed84, 0x52666a58), TOBN(0x4bcb6e00, 0xe6a9c3c2),
-            TOBN(0x3c57411c, 0x26906408), TOBN(0xcfc20755, 0x13556400),
-            TOBN(0xa08b1c50, 0x5294dba3), TOBN(0xa30ba286, 0x8b7dd31e),
-            TOBN(0xd70ba90e, 0x991eca74), TOBN(0x094e142c, 0xe762c2b9),
-            TOBN(0xb81d783e, 0x979f3925), TOBN(0x1efd130a, 0xaf4c89a7),
-            TOBN(0x525c2144, 0xfd1bf7fa), TOBN(0x4b296904, 0x1b265a9e),
-            TOBN(0xed8e9634, 0xb9db65b6), TOBN(0x35c82e32, 0x03599d8a),
-            TOBN(0xdaa7a54f, 0x403563f3), TOBN(0x9df088ad, 0x022c38ab),
-            TOBN(0xe5cfb066, 0xbb3fd30a), TOBN(0x429169da, 0xeff0354e),
-            TOBN(0x809cf852, 0x3524e36c), TOBN(0x136f4fb3, 0x0155be1d),
-            TOBN(0x4826af01, 0x1fbba712), TOBN(0x6ef0f0b4, 0x506ba1a1),
-            TOBN(0xd9928b31, 0x77aea73e), TOBN(0xe2bf6af2, 0x5eaa244e),
-            TOBN(0x8d084f12, 0x4237b64b), TOBN(0x688ebe99, 0xe3ecfd07),
-            TOBN(0x57b8a70c, 0xf6845dd8), TOBN(0x808fc59c, 0x5da4a325),
-            TOBN(0xa9032b2b, 0xa3585862), TOBN(0xb66825d5, 0xedf29386),
-            TOBN(0xb5a5a8db, 0x431ec29b), TOBN(0xbb143a98, 0x3a1e8dc8),
-            TOBN(0x35ee94ce, 0x12ae381b), TOBN(0x3a7f176c, 0x86ccda90),
-            TOBN(0xc63a657e, 0x4606eaca), TOBN(0x9ae5a380, 0x43cd04df),
-            TOBN(0x9bec8d15, 0xed251b46), TOBN(0x1f5d6d30, 0xcaca5e64),
-            TOBN(0x347b3b35, 0x9ff20f07), TOBN(0x4d65f034, 0xf7e4b286),
-            TOBN(0x9e93ba24, 0xf111661e), TOBN(0xedced484, 0xb105eb04),
-            TOBN(0x96dc9ba1, 0xf424b578), TOBN(0xbf8f66b7, 0xe83e9069),
-            TOBN(0x872d4df4, 0xd7ed8216), TOBN(0xbf07f377, 0x8e2cbecf),
-            TOBN(0x4281d899, 0x98e73754), TOBN(0xfec85fbb, 0x8aab8708),
-            TOBN(0x9a3c0dee, 0xa5ba5b0b), TOBN(0xe6a116ce, 0x42d05299),
-            TOBN(0xae9775fe, 0xe9b02d42), TOBN(0x72b05200, 0xa1545cb6),
-            TOBN(0xbc506f7d, 0x31a3b4ea), TOBN(0xe5893078, 0x8bbd9b32),
-            TOBN(0xc8bc5f37, 0xe4b12a97), TOBN(0x6b000c06, 0x4a73b671),
-            TOBN(0x13b5bf22, 0x765fa7d0), TOBN(0x59805bf0, 0x1d6a5370),
-            TOBN(0x67a5e29d, 0x4280db98), TOBN(0x4f53916f, 0x776b1ce3),
-            TOBN(0x714ff61f, 0x33ddf626), TOBN(0x4206238e, 0xa085d103),
-            TOBN(0x1c50d4b7, 0xe5809ee3), TOBN(0x999f450d, 0x85f8eb1d),
-            TOBN(0x658a6051, 0xe4c79e9b), TOBN(0x1394cb73, 0xc66a9fea),
-            TOBN(0x27f31ed5, 0xc6be7b23), TOBN(0xf4c88f36, 0x5aa6f8fe),
-            TOBN(0x0fb0721f, 0x4aaa499e), TOBN(0x68b3a7d5, 0xe3fb2a6b),
-            TOBN(0xa788097d, 0x3a92851d), TOBN(0x060e7f8a, 0xe96f4913),
-            TOBN(0x82eebe73, 0x1a3a93bc), TOBN(0x42bbf465, 0xa21adc1a),
-            TOBN(0xc10b6fa4, 0xef030efd), TOBN(0x247aa4c7, 0x87b097bb),
-            TOBN(0x8b8dc632, 0xf60c77da), TOBN(0x6ffbc26a, 0xc223523e),
-            TOBN(0xa4f6ff11, 0x344579cf), TOBN(0x5825653c, 0x980250f6),
-            TOBN(0xb2dd097e, 0xbc1aa2b9), TOBN(0x07889393, 0x37a0333a),
-            TOBN(0x1cf55e71, 0x37a0db38), TOBN(0x2648487f, 0x792c1613),
-            TOBN(0xdad01336, 0x3fcef261), TOBN(0x6239c81d, 0x0eabf129),
-            TOBN(0x8ee761de, 0x9d276be2), TOBN(0x406a7a34, 0x1eda6ad3),
-            TOBN(0x4bf367ba, 0x4a493b31), TOBN(0x54f20a52, 0x9bf7f026),
-            TOBN(0xb696e062, 0x9795914b), TOBN(0xcddab96d, 0x8bf236ac),
-            TOBN(0x4ff2c70a, 0xed25ea13), TOBN(0xfa1d09eb, 0x81cbbbe7),
-            TOBN(0x88fc8c87, 0x468544c5), TOBN(0x847a670d, 0x696b3317),
-            TOBN(0xf133421e, 0x64bcb626), TOBN(0xaea638c8, 0x26dee0b5),
-            TOBN(0xd6e7680b, 0xb310346c), TOBN(0xe06f4097, 0xd5d4ced3),
-            TOBN(0x09961452, 0x7512a30b), TOBN(0xf3d867fd, 0xe589a59a),
-            TOBN(0x2e73254f, 0x52d0c180), TOBN(0x9063d8a3, 0x333c74ac),
-            TOBN(0xeda6c595, 0xd314e7bc), TOBN(0x2ee7464b, 0x467899ed),
-            TOBN(0x1cef423c, 0x0a1ed5d3), TOBN(0x217e76ea, 0x69cc7613),
-            TOBN(0x27ccce1f, 0xe7cda917), TOBN(0x12d8016b, 0x8a893f16),
-            TOBN(0xbcd6de84, 0x9fc74f6b), TOBN(0xfa5817e2, 0xf3144e61),
-            TOBN(0x1f354164, 0x0821ee4c), TOBN(0x1583eab4, 0x0bc61992),
-            TOBN(0x7490caf6, 0x1d72879f), TOBN(0x998ad9f3, 0xf76ae7b2),
-            TOBN(0x1e181950, 0xa41157f7), TOBN(0xa9d7e1e6, 0xe8da3a7e),
-            TOBN(0x963784eb, 0x8426b95f), TOBN(0x0ee4ed6e, 0x542e2a10),
-            TOBN(0xb79d4cc5, 0xac751e7b), TOBN(0x93f96472, 0xfd4211bd),
-            TOBN(0x8c72d3d2, 0xc8de4fc6), TOBN(0x7b69cbf5, 0xdf44f064),
-            TOBN(0x3da90ca2, 0xf4bf94e1), TOBN(0x1a5325f8, 0xf12894e2),
-            TOBN(0x0a437f6c, 0x7917d60b), TOBN(0x9be70486, 0x96c9cb5d),
-            TOBN(0xb4d880bf, 0xe1dc5c05), TOBN(0xd738adda, 0xeebeeb57),
-            TOBN(0x6f0119d3, 0xdf0fe6a3), TOBN(0x5c686e55, 0x66eaaf5a),
-            TOBN(0x9cb10b50, 0xdfd0b7ec), TOBN(0xbdd0264b, 0x6a497c21),
-            TOBN(0xfc093514, 0x8c546c96), TOBN(0x58a947fa, 0x79dbf42a),
-            TOBN(0xc0b48d4e, 0x49ccd6d7), TOBN(0xff8fb02c, 0x88bd5580),
-            TOBN(0xc75235e9, 0x07d473b2), TOBN(0x4fab1ac5, 0xa2188af3),
-            TOBN(0x030fa3bc, 0x97576ec0), TOBN(0xe8c946e8, 0x0b7e7d2f),
-            TOBN(0x40a5c9cc, 0x70305600), TOBN(0x6d8260a9, 0xc8b013b4),
-            TOBN(0x0368304f, 0x70bba85c), TOBN(0xad090da1, 0xa4a0d311),
-            TOBN(0x7170e870, 0x2415eec1), TOBN(0xbfba35fe, 0x8461ea47),
-            TOBN(0x6279019a, 0xc1e91938), TOBN(0xa47638f3, 0x1afc415f),
-            TOBN(0x36c65cbb, 0xbcba0e0f), TOBN(0x02160efb, 0x034e2c48),
-            TOBN(0xe6c51073, 0x615cd9e4), TOBN(0x498ec047, 0xf1243c06),
-            TOBN(0x3e5a8809, 0xb17b3d8c), TOBN(0x5cd99e61, 0x0cc565f1),
-            TOBN(0x81e312df, 0x7851dafe), TOBN(0xf156f5ba, 0xa79061e2),
-            TOBN(0x80d62b71, 0x880c590e), TOBN(0xbec9746f, 0x0a39faa1),
-            TOBN(0x1d98a9c1, 0xc8ed1f7a), TOBN(0x09e43bb5, 0xa81d5ff2),
-            TOBN(0xd5f00f68, 0x0da0794a), TOBN(0x412050d9, 0x661aa836),
-            TOBN(0xa89f7c4e, 0x90747e40), TOBN(0x6dc05ebb, 0xb62a3686),
-            TOBN(0xdf4de847, 0x308e3353), TOBN(0x53868fbb, 0x9fb53bb9),
-            TOBN(0x2b09d2c3, 0xcfdcf7dd), TOBN(0x41a9fce3, 0x723fcab4),
-            TOBN(0x73d905f7, 0x07f57ca3), TOBN(0x080f9fb1, 0xac8e1555),
-            TOBN(0x7c088e84, 0x9ba7a531), TOBN(0x07d35586, 0xed9a147f),
-            TOBN(0x602846ab, 0xaf48c336), TOBN(0x7320fd32, 0x0ccf0e79),
-            TOBN(0xaa780798, 0xb18bd1ff), TOBN(0x52c2e300, 0xafdd2905),
-            TOBN(0xf27ea3d6, 0x434267cd), TOBN(0x8b96d16d, 0x15605b5f),
-            TOBN(0x7bb31049, 0x4b45706b), TOBN(0xe7f58b8e, 0x743d25f8),
-            TOBN(0xe9b5e45b, 0x87f30076), TOBN(0xd19448d6, 0x5d053d5a),
-            TOBN(0x1ecc8cb9, 0xd3210a04), TOBN(0x6bc7d463, 0xdafb5269),
-            TOBN(0x3e59b10a, 0x67c3489f), TOBN(0x1769788c, 0x65641e1b),
-            TOBN(0x8a53b82d, 0xbd6cb838), TOBN(0x7066d6e6, 0x236d5f22),
-            TOBN(0x03aa1c61, 0x6908536e), TOBN(0xc971da0d, 0x66ae9809),
-            TOBN(0x01b3a86b, 0xc49a2fac), TOBN(0x3b8420c0, 0x3092e77a),
-            TOBN(0x02057300, 0x7d6fb556), TOBN(0x6941b2a1, 0xbff40a87),
-            TOBN(0x140b6308, 0x0658ff2a), TOBN(0x87804363, 0x3424ab36),
-            TOBN(0x0253bd51, 0x5751e299), TOBN(0xc75bcd76, 0x449c3e3a),
-            TOBN(0x92eb4090, 0x7f8f875d), TOBN(0x9c9d754e, 0x56c26bbf),
-            TOBN(0x158cea61, 0x8110bbe7), TOBN(0x62a6b802, 0x745f91ea),
-            TOBN(0xa79c41aa, 0xc6e7394b), TOBN(0x445b6a83, 0xad57ef10),
-            TOBN(0x0c5277eb, 0x6ea6f40c), TOBN(0x319fe96b, 0x88633365),
-            TOBN(0x0b0fc61f, 0x385f63cb), TOBN(0x41250c84, 0x22bdd127),
-            TOBN(0x67d153f1, 0x09e942c2), TOBN(0x60920d08, 0xc021ad5d),
-            TOBN(0x229f5746, 0x724d81a5), TOBN(0xb7ffb892, 0x5bba3299),
-            TOBN(0x518c51a1, 0xde413032), TOBN(0x2a9bfe77, 0x3c2fd94c),
-            TOBN(0xcbcde239, 0x3191f4fd), TOBN(0x43093e16, 0xd3d6ada1),
-            TOBN(0x184579f3, 0x58769606), TOBN(0x2c94a8b3, 0xd236625c),
-            TOBN(0x6922b9c0, 0x5c437d8e), TOBN(0x3d4ae423, 0xd8d9f3c8),
-            TOBN(0xf72c31c1, 0x2e7090a2), TOBN(0x4ac3f5f3, 0xd76a55bd),
-            TOBN(0x342508fc, 0x6b6af991), TOBN(0x0d527100, 0x1b5cebbd),
-            TOBN(0xb84740d0, 0xdd440dd7), TOBN(0x748ef841, 0x780162fd),
-            TOBN(0xa8dbfe0e, 0xdfc6fafb), TOBN(0xeadfdf05, 0xf7300f27),
-            TOBN(0x7d06555f, 0xfeba4ec9), TOBN(0x12c56f83, 0x9e25fa97),
-            TOBN(0x77f84203, 0xd39b8c34), TOBN(0xed8b1be6, 0x3125eddb),
-            TOBN(0x5bbf2441, 0xf6e39dc5), TOBN(0xb00f6ee6, 0x6a5d678a),
-            TOBN(0xba456ecf, 0x57d0ea99), TOBN(0xdcae0f58, 0x17e06c43),
-            TOBN(0x01643de4, 0x0f5b4baa), TOBN(0x2c324341, 0xd161b9be),
-            TOBN(0x80177f55, 0xe126d468), TOBN(0xed325f1f, 0x76748e09),
-            TOBN(0x6116004a, 0xcfa9bdc2), TOBN(0x2d8607e6, 0x3a9fb468),
-            TOBN(0x0e573e27, 0x6009d660), TOBN(0x3a525d2e, 0x8d10c5a1),
-            TOBN(0xd26cb45c, 0x3b9009a0), TOBN(0xb6b0cdc0, 0xde9d7448),
-            TOBN(0x949c9976, 0xe1337c26), TOBN(0x6faadebd, 0xd73d68e5),
-            TOBN(0x9e158614, 0xf1b768d9), TOBN(0x22dfa557, 0x9cc4f069),
-            TOBN(0xccd6da17, 0xbe93c6d6), TOBN(0x24866c61, 0xa504f5b9),
-            TOBN(0x2121353c, 0x8d694da1), TOBN(0x1c6ca580, 0x0140b8c6),
-            TOBN(0xc245ad8c, 0xe964021e), TOBN(0xb83bffba, 0x032b82b3),
-            TOBN(0xfaa220c6, 0x47ef9898), TOBN(0x7e8d3ac6, 0x982c948a),
-            TOBN(0x1faa2091, 0xbc2d124a), TOBN(0xbd54c3dd, 0x05b15ff4),
-            TOBN(0x386bf3ab, 0xc87c6fb7), TOBN(0xfb2b0563, 0xfdeb6f66),
-            TOBN(0x4e77c557, 0x5b45afb4), TOBN(0xe9ded649, 0xefb8912d),
-            TOBN(0x7ec9bbf5, 0x42f6e557), TOBN(0x2570dfff, 0x62671f00),
-            TOBN(0x2b3bfb78, 0x88e084bd), TOBN(0xa024b238, 0xf37fe5b4),
-            TOBN(0x44e7dc04, 0x95649aee), TOBN(0x498ca255, 0x5e7ec1d8),
-            TOBN(0x3bc766ea, 0xaaa07e86), TOBN(0x0db6facb, 0xf3608586),
-            TOBN(0xbadd2549, 0xbdc259c8), TOBN(0x95af3c6e, 0x041c649f),
-            TOBN(0xb36a928c, 0x02e30afb), TOBN(0x9b5356ad, 0x008a88b8),
-            TOBN(0x4b67a5f1, 0xcf1d9e9d), TOBN(0xc6542e47, 0xa5d8d8ce),
-            TOBN(0x73061fe8, 0x7adfb6cc), TOBN(0xcc826fd3, 0x98678141),
-            TOBN(0x00e758b1, 0x3c80515a), TOBN(0x6afe3247, 0x41485083),
-            TOBN(0x0fcb08b9, 0xb6ae8a75), TOBN(0xb8cf388d, 0x4acf51e1),
-            TOBN(0x344a5560, 0x6961b9d6), TOBN(0x1a6778b8, 0x6a97fd0c),
-            TOBN(0xd840fdc1, 0xecc4c7e3), TOBN(0xde9fe47d, 0x16db68cc),
-            TOBN(0xe95f89de, 0xa3e216aa), TOBN(0x84f1a6a4, 0x9594a8be),
-            TOBN(0x7ddc7d72, 0x5a7b162b), TOBN(0xc5cfda19, 0xadc817a3),
-            TOBN(0x80a5d350, 0x78b58d46), TOBN(0x93365b13, 0x82978f19),
-            TOBN(0x2e44d225, 0x26a1fc90), TOBN(0x0d6d10d2, 0x4d70705d),
-            TOBN(0xd94b6b10, 0xd70c45f4), TOBN(0x0f201022, 0xb216c079),
-            TOBN(0xcec966c5, 0x658fde41), TOBN(0xa8d2bc7d, 0x7e27601d),
-            TOBN(0xbfcce3e1, 0xff230be7), TOBN(0x3394ff6b, 0x0033ffb5),
-            TOBN(0xd890c509, 0x8132c9af), TOBN(0xaac4b0eb, 0x361e7868),
-            TOBN(0x5194ded3, 0xe82d15aa), TOBN(0x4550bd2e, 0x23ae6b7d),
-            TOBN(0x3fda318e, 0xea5399d4), TOBN(0xd989bffa, 0x91638b80),
-            TOBN(0x5ea124d0, 0xa14aa12d), TOBN(0x1fb1b899, 0x3667b944),
-            TOBN(0x95ec7969, 0x44c44d6a), TOBN(0x91df144a, 0x57e86137),
-            TOBN(0x915fd620, 0x73adac44), TOBN(0x8f01732d, 0x59a83801),
-            TOBN(0xec579d25, 0x3aa0a633), TOBN(0x06de5e7c, 0xc9d6d59c),
-            TOBN(0xc132f958, 0xb1ef8010), TOBN(0x29476f96, 0xe65c1a02),
-            TOBN(0x336a77c0, 0xd34c3565), TOBN(0xef1105b2, 0x1b9f1e9e),
-            TOBN(0x63e6d08b, 0xf9e08002), TOBN(0x9aff2f21, 0xc613809e),
-            TOBN(0xb5754f85, 0x3a80e75d), TOBN(0xde71853e, 0x6bbda681),
-            TOBN(0x86f041df, 0x8197fd7a), TOBN(0x8b332e08, 0x127817fa),
-            TOBN(0x05d99be8, 0xb9c20cda), TOBN(0x89f7aad5, 0xd5cd0c98),
-            TOBN(0x7ef936fe, 0x5bb94183), TOBN(0x92ca0753, 0xb05cd7f2),
-            TOBN(0x9d65db11, 0x74a1e035), TOBN(0x02628cc8, 0x13eaea92),
-            TOBN(0xf2d9e242, 0x49e4fbf2), TOBN(0x94fdfd9b, 0xe384f8b7),
-            TOBN(0x65f56054, 0x63428c6b), TOBN(0x2f7205b2, 0x90b409a5),
-            TOBN(0xf778bb78, 0xff45ae11), TOBN(0xa13045be, 0xc5ee53b2),
-            TOBN(0xe00a14ff, 0x03ef77fe), TOBN(0x689cd59f, 0xffef8bef),
-            TOBN(0x3578f0ed, 0x1e9ade22), TOBN(0xe99f3ec0, 0x6268b6a8),
-            TOBN(0xa2057d91, 0xea1b3c3e), TOBN(0x2d1a7053, 0xb8823a4a),
-            TOBN(0xabbb336a, 0x2cca451e), TOBN(0xcd2466e3, 0x2218bb5d),
-            TOBN(0x3ac1f42f, 0xc8cb762d), TOBN(0x7e312aae, 0x7690211f),
-            TOBN(0xebb9bd73, 0x45d07450), TOBN(0x207c4b82, 0x46c2213f),
-            TOBN(0x99d425c1, 0x375913ec), TOBN(0x94e45e96, 0x67908220),
-            TOBN(0xc08f3087, 0xcd67dbf6), TOBN(0xa5670fbe, 0xc0887056),
-            TOBN(0x6717b64a, 0x66f5b8fc), TOBN(0xd5a56aea, 0x786fec28),
-            TOBN(0xa8c3f55f, 0xc0ff4952), TOBN(0xa77fefae, 0x457ac49b),
-            TOBN(0x29882d7c, 0x98379d44), TOBN(0xd000bdfb, 0x509edc8a),
-            TOBN(0xc6f95979, 0xe66fe464), TOBN(0x504a6115, 0xfa61bde0),
-            TOBN(0x56b3b871, 0xeffea31a), TOBN(0x2d3de26d, 0xf0c21a54),
-            TOBN(0x21dbff31, 0x834753bf), TOBN(0xe67ecf49, 0x69269d86),
-            TOBN(0x7a176952, 0x151fe690), TOBN(0x03515804, 0x7f2adb5f),
-            TOBN(0xee794b15, 0xd1b62a8d), TOBN(0xf004ceec, 0xaae454e6),
-            TOBN(0x0897ea7c, 0xf0386fac), TOBN(0x3b62ff12, 0xd1fca751),
-            TOBN(0x154181df, 0x1b7a04ec), TOBN(0x2008e04a, 0xfb5847ec),
-            TOBN(0xd147148e, 0x41dbd772), TOBN(0x2b419f73, 0x22942654),
-            TOBN(0x669f30d3, 0xe9c544f7), TOBN(0x52a2c223, 0xc8540149),
-            TOBN(0x5da9ee14, 0x634dfb02), TOBN(0x5f074ff0, 0xf47869f3),
-            TOBN(0x74ee878d, 0xa3933acc), TOBN(0xe6510651, 0x4fe35ed1),
-            TOBN(0xb3eb9482, 0xf1012e7a), TOBN(0x51013cc0, 0xa8a566ae),
-            TOBN(0xdd5e9243, 0x47c00d3b), TOBN(0x7fde089d, 0x946bb0e5),
-            TOBN(0x030754fe, 0xc731b4b3), TOBN(0x12a136a4, 0x99fda062),
-            TOBN(0x7c1064b8, 0x5a1a35bc), TOBN(0xbf1f5763, 0x446c84ef),
-            TOBN(0xed29a56d, 0xa16d4b34), TOBN(0x7fba9d09, 0xdca21c4f),
-            TOBN(0x66d7ac00, 0x6d8de486), TOBN(0x60061987, 0x73a2a5e1),
-            TOBN(0x8b400f86, 0x9da28ff0), TOBN(0x3133f708, 0x43c4599c),
-            TOBN(0x9911c9b8, 0xee28cb0d), TOBN(0xcd7e2874, 0x8e0af61d),
-            TOBN(0x5a85f0f2, 0x72ed91fc), TOBN(0x85214f31, 0x9cd4a373),
-            TOBN(0x881fe5be, 0x1925253c), TOBN(0xd8dc98e0, 0x91e8bc76),
-            TOBN(0x7120affe, 0x585cc3a2), TOBN(0x724952ed, 0x735bf97a),
-            TOBN(0x5581e7dc, 0x3eb34581), TOBN(0x5cbff4f2, 0xe52ee57d),
-            TOBN(0x8d320a0e, 0x87d8cc7b), TOBN(0x9beaa7f3, 0xf1d280d0),
-            TOBN(0x7a0b9571, 0x9beec704), TOBN(0x9126332e, 0x5b7f0057),
-            TOBN(0x01fbc1b4, 0x8ed3bd6d), TOBN(0x35bb2c12, 0xd945eb24),
-            TOBN(0x6404694e, 0x9a8ae255), TOBN(0xb6092eec, 0x8d6abfb3),
-            TOBN(0x4d76143f, 0xcc058865), TOBN(0x7b0a5af2, 0x6e249922),
-            TOBN(0x8aef9440, 0x6a50d353), TOBN(0xe11e4bcc, 0x64f0e07a),
-            TOBN(0x4472993a, 0xa14a90fa), TOBN(0x7706e20c, 0xba0c51d4),
-            TOBN(0xf403292f, 0x1532672d), TOBN(0x52573bfa, 0x21829382),
-            TOBN(0x6a7bb6a9, 0x3b5bdb83), TOBN(0x08da65c0, 0xa4a72318),
-            TOBN(0xc58d22aa, 0x63eb065f), TOBN(0x1717596c, 0x1b15d685),
-            TOBN(0x112df0d0, 0xb266d88b), TOBN(0xf688ae97, 0x5941945a),
-            TOBN(0x487386e3, 0x7c292cac), TOBN(0x42f3b50d, 0x57d6985c),
-            TOBN(0x6da4f998, 0x6a90fc34), TOBN(0xc8f257d3, 0x65ca8a8d),
-            TOBN(0xc2feabca, 0x6951f762), TOBN(0xe1bc81d0, 0x74c323ac),
-            TOBN(0x1bc68f67, 0x251a2a12), TOBN(0x10d86587, 0xbe8a70dc),
-            TOBN(0xd648af7f, 0xf0f84d2e), TOBN(0xf0aa9ebc, 0x6a43ac92),
-            TOBN(0x69e3be04, 0x27596893), TOBN(0xb6bb02a6, 0x45bf452b),
-            TOBN(0x0875c11a, 0xf4c698c8), TOBN(0x6652b5c7, 0xbece3794),
-            TOBN(0x7b3755fd, 0x4f5c0499), TOBN(0x6ea16558, 0xb5532b38),
-            TOBN(0xd1c69889, 0xa2e96ef7), TOBN(0x9c773c3a, 0x61ed8f48),
-            TOBN(0x2b653a40, 0x9b323abc), TOBN(0xe26605e1, 0xf0e1d791),
-            TOBN(0x45d41064, 0x4a87157a), TOBN(0x8f9a78b7, 0xcbbce616),
-            TOBN(0xcf1e44aa, 0xc407eddd), TOBN(0x81ddd1d8, 0xa35b964f),
-            TOBN(0x473e339e, 0xfd083999), TOBN(0x6c94bdde, 0x8e796802),
-            TOBN(0x5a304ada, 0x8545d185), TOBN(0x82ae44ea, 0x738bb8cb),
-            TOBN(0x628a35e3, 0xdf87e10e), TOBN(0xd3624f3d, 0xa15b9fe3),
-            TOBN(0xcc44209b, 0x14be4254), TOBN(0x7d0efcbc, 0xbdbc2ea5),
-            TOBN(0x1f603362, 0x04c37bbe), TOBN(0x21f363f5, 0x56a5852c),
-            TOBN(0xa1503d1c, 0xa8501550), TOBN(0x2251e0e1, 0xd8ab10bb),
-            TOBN(0xde129c96, 0x6961c51c), TOBN(0x1f7246a4, 0x81910f68),
-            TOBN(0x2eb744ee, 0x5f2591f2), TOBN(0x3c47d33f, 0x5e627157),
-            TOBN(0x4d6d62c9, 0x22f3bd68), TOBN(0x6120a64b, 0xcb8df856),
-            TOBN(0x3a9ac6c0, 0x7b5d07df), TOBN(0xa92b9558, 0x7ef39783),
-            TOBN(0xe128a134, 0xab3a9b4f), TOBN(0x41c18807, 0xb1252f05),
-            TOBN(0xfc7ed089, 0x80ba9b1c), TOBN(0xac8dc6de, 0xc532a9dd),
-            TOBN(0xbf829cef, 0x55246809), TOBN(0x101b784f, 0x5b4ee80f),
-            TOBN(0xc09945bb, 0xb6f11603), TOBN(0x57b09dbe, 0x41d2801e),
-            TOBN(0xfba5202f, 0xa97534a8), TOBN(0x7fd8ae5f, 0xc17b9614),
-            TOBN(0xa50ba666, 0x78308435), TOBN(0x9572f77c, 0xd3868c4d),
-            TOBN(0x0cef7bfd, 0x2dd7aab0), TOBN(0xe7958e08, 0x2c7c79ff),
-            TOBN(0x81262e42, 0x25346689), TOBN(0x716da290, 0xb07c7004),
-            TOBN(0x35f911ea, 0xb7950ee3), TOBN(0x6fd72969, 0x261d21b5),
-            TOBN(0x52389803, 0x08b640d3), TOBN(0x5b0026ee, 0x887f12a1),
-            TOBN(0x20e21660, 0x742e9311), TOBN(0x0ef6d541, 0x5ff77ff7),
-            TOBN(0x969127f0, 0xf9c41135), TOBN(0xf21d60c9, 0x68a64993),
-            TOBN(0x656e5d0c, 0xe541875c), TOBN(0xf1e0f84e, 0xa1d3c233),
-            TOBN(0x9bcca359, 0x06002d60), TOBN(0xbe2da60c, 0x06191552),
-            TOBN(0x5da8bbae, 0x61181ec3), TOBN(0x9f04b823, 0x65806f19),
-            TOBN(0xf1604a7d, 0xd4b79bb8), TOBN(0xaee806fb, 0x52c878c8),
-            TOBN(0x34144f11, 0x8d47b8e8), TOBN(0x72edf52b, 0x949f9054),
-            TOBN(0xebfca84e, 0x2127015a), TOBN(0x9051d0c0, 0x9cb7cef3),
-            TOBN(0x86e8fe58, 0x296deec8), TOBN(0x33b28188, 0x41010d74),
-        },
-        {
-            TOBN(0x01079383, 0x171b445f), TOBN(0x9bcf21e3, 0x8131ad4c),
-            TOBN(0x8cdfe205, 0xc93987e8), TOBN(0xe63f4152, 0xc92e8c8f),
-            TOBN(0x729462a9, 0x30add43d), TOBN(0x62ebb143, 0xc980f05a),
-            TOBN(0x4f3954e5, 0x3b06e968), TOBN(0xfe1d75ad, 0x242cf6b1),
-            TOBN(0x5f95c6c7, 0xaf8685c8), TOBN(0xd4c1c8ce, 0x2f8f01aa),
-            TOBN(0xc44bbe32, 0x2574692a), TOBN(0xb8003478, 0xd4a4a068),
-            TOBN(0x7c8fc6e5, 0x2eca3cdb), TOBN(0xea1db16b, 0xec04d399),
-            TOBN(0xb05bc82e, 0x8f2bc5cf), TOBN(0x763d517f, 0xf44793d2),
-            TOBN(0x4451c1b8, 0x08bd98d0), TOBN(0x644b1cd4, 0x6575f240),
-            TOBN(0x6907eb33, 0x7375d270), TOBN(0x56c8bebd, 0xfa2286bd),
-            TOBN(0xc713d2ac, 0xc4632b46), TOBN(0x17da427a, 0xafd60242),
-            TOBN(0x313065b7, 0xc95c7546), TOBN(0xf8239898, 0xbf17a3de),
-            TOBN(0xf3b7963f, 0x4c830320), TOBN(0x842c7aa0, 0x903203e3),
-            TOBN(0xaf22ca0a, 0xe7327afb), TOBN(0x38e13092, 0x967609b6),
-            TOBN(0x73b8fb62, 0x757558f1), TOBN(0x3cc3e831, 0xf7eca8c1),
-            TOBN(0xe4174474, 0xf6331627), TOBN(0xa77989ca, 0xc3c40234),
-            TOBN(0xe5fd17a1, 0x44a081e0), TOBN(0xd797fb7d, 0xb70e296a),
-            TOBN(0x2b472b30, 0x481f719c), TOBN(0x0e632a98, 0xfe6f8c52),
-            TOBN(0x89ccd116, 0xc5f0c284), TOBN(0xf51088af, 0x2d987c62),
-            TOBN(0x2a2bccda, 0x4c2de6cf), TOBN(0x810f9efe, 0xf679f0f9),
-            TOBN(0xb0f394b9, 0x7ffe4b3e), TOBN(0x0b691d21, 0xe5fa5d21),
-            TOBN(0xb0bd7747, 0x9dfbbc75), TOBN(0xd2830fda, 0xfaf78b00),
-            TOBN(0xf78c249c, 0x52434f57), TOBN(0x4b1f7545, 0x98096dab),
-            TOBN(0x73bf6f94, 0x8ff8c0b3), TOBN(0x34aef03d, 0x454e134c),
-            TOBN(0xf8d151f4, 0xb7ac7ec5), TOBN(0xd6ceb95a, 0xe50da7d5),
-            TOBN(0xa1b492b0, 0xdc3a0eb8), TOBN(0x75157b69, 0xb3dd2863),
-            TOBN(0xe2c4c74e, 0xc5413d62), TOBN(0xbe329ff7, 0xbc5fc4c7),
-            TOBN(0x835a2aea, 0x60fa9dda), TOBN(0xf117f5ad, 0x7445cb87),
-            TOBN(0xae8317f4, 0xb0166f7a), TOBN(0xfbd3e3f7, 0xceec74e6),
-            TOBN(0xfdb516ac, 0xe0874bfd), TOBN(0x3d846019, 0xc681f3a3),
-            TOBN(0x0b12ee5c, 0x7c1620b0), TOBN(0xba68b4dd, 0x2b63c501),
-            TOBN(0xac03cd32, 0x6668c51e), TOBN(0x2a6279f7, 0x4e0bcb5b),
-            TOBN(0x17bd69b0, 0x6ae85c10), TOBN(0x72946979, 0x1dfdd3a6),
-            TOBN(0xd9a03268, 0x2c078bec), TOBN(0x41c6a658, 0xbfd68a52),
-            TOBN(0xcdea1024, 0x0e023900), TOBN(0xbaeec121, 0xb10d144d),
-            TOBN(0x5a600e74, 0x058ab8dc), TOBN(0x1333af21, 0xbb89ccdd),
-            TOBN(0xdf25eae0, 0x3aaba1f1), TOBN(0x2cada16e, 0x3b7144cf),
-            TOBN(0x657ee27d, 0x71ab98bc), TOBN(0x99088b4c, 0x7a6fc96e),
-            TOBN(0x05d5c0a0, 0x3549dbd4), TOBN(0x42cbdf8f, 0xf158c3ac),
-            TOBN(0x3fb6b3b0, 0x87edd685), TOBN(0x22071cf6, 0x86f064d0),
-            TOBN(0xd2d6721f, 0xff2811e5), TOBN(0xdb81b703, 0xfe7fae8c),
-            TOBN(0x3cfb74ef, 0xd3f1f7bb), TOBN(0x0cdbcd76, 0x16cdeb5d),
-            TOBN(0x4f39642a, 0x566a808c), TOBN(0x02b74454, 0x340064d6),
-            TOBN(0xfabbadca, 0x0528fa6f), TOBN(0xe4c3074c, 0xd3fc0bb6),
-            TOBN(0xb32cb8b0, 0xb796d219), TOBN(0xc3e95f4f, 0x34741dd9),
-            TOBN(0x87212125, 0x68edf6f5), TOBN(0x7a03aee4, 0xa2b9cb8e),
-            TOBN(0x0cd3c376, 0xf53a89aa), TOBN(0x0d8af9b1, 0x948a28dc),
-            TOBN(0xcf86a3f4, 0x902ab04f), TOBN(0x8aacb62a, 0x7f42002d),
-            TOBN(0x106985eb, 0xf62ffd52), TOBN(0xe670b54e, 0x5797bf10),
-            TOBN(0x4b405209, 0xc5e30aef), TOBN(0x12c97a20, 0x4365b5e9),
-            TOBN(0x104646ce, 0x1fe32093), TOBN(0x13cb4ff6, 0x3907a8c9),
-            TOBN(0x8b9f30d1, 0xd46e726b), TOBN(0xe1985e21, 0xaba0f499),
-            TOBN(0xc573dea9, 0x10a230cd), TOBN(0x24f46a93, 0xcd30f947),
-            TOBN(0xf2623fcf, 0xabe2010a), TOBN(0x3f278cb2, 0x73f00e4f),
-            TOBN(0xed55c67d, 0x50b920eb), TOBN(0xf1cb9a2d, 0x8e760571),
-            TOBN(0x7c50d109, 0x0895b709), TOBN(0x4207cf07, 0x190d4369),
-            TOBN(0x3b027e81, 0xc4127fe1), TOBN(0xa9f8b9ad, 0x3ae9c566),
-            TOBN(0x5ab10851, 0xacbfbba5), TOBN(0xa747d648, 0x569556f5),
-            TOBN(0xcc172b5c, 0x2ba97bf7), TOBN(0x15e0f77d, 0xbcfa3324),
-            TOBN(0xa345b797, 0x7686279d), TOBN(0x5a723480, 0xe38003d3),
-            TOBN(0xfd8e139f, 0x8f5fcda8), TOBN(0xf3e558c4, 0xbdee5bfd),
-            TOBN(0xd76cbaf4, 0xe33f9f77), TOBN(0x3a4c97a4, 0x71771969),
-            TOBN(0xda27e84b, 0xf6dce6a7), TOBN(0xff373d96, 0x13e6c2d1),
-            TOBN(0xf115193c, 0xd759a6e9), TOBN(0x3f9b7025, 0x63d2262c),
-            TOBN(0xd9764a31, 0x317cd062), TOBN(0x30779d8e, 0x199f8332),
-            TOBN(0xd8074106, 0x16b11b0b), TOBN(0x7917ab9f, 0x78aeaed8),
-            TOBN(0xb67a9cbe, 0x28fb1d8e), TOBN(0x2e313563, 0x136eda33),
-            TOBN(0x010b7069, 0xa371a86c), TOBN(0x44d90fa2, 0x6744e6b7),
-            TOBN(0x68190867, 0xd6b3e243), TOBN(0x9fe6cd9d, 0x59048c48),
-            TOBN(0xb900b028, 0x95731538), TOBN(0xa012062f, 0x32cae04f),
-            TOBN(0x8107c8bc, 0x9399d082), TOBN(0x47e8c54a, 0x41df12e2),
-            TOBN(0x14ba5117, 0xb6ef3f73), TOBN(0x22260bea, 0x81362f0b),
-            TOBN(0x90ea261e, 0x1a18cc20), TOBN(0x2192999f, 0x2321d636),
-            TOBN(0xef64d314, 0xe311b6a0), TOBN(0xd7401e4c, 0x3b54a1f5),
-            TOBN(0x19019983, 0x6fbca2ba), TOBN(0x46ad3293, 0x8fbffc4b),
-            TOBN(0xa142d3f6, 0x3786bf40), TOBN(0xeb5cbc26, 0xb67039fc),
-            TOBN(0x9cb0ae6c, 0x252bd479), TOBN(0x05e0f88a, 0x12b5848f),
-            TOBN(0x78f6d2b2, 0xa5c97663), TOBN(0x6f6e149b, 0xc162225c),
-            TOBN(0xe602235c, 0xde601a89), TOBN(0xd17bbe98, 0xf373be1f),
-            TOBN(0xcaf49a5b, 0xa8471827), TOBN(0x7e1a0a85, 0x18aaa116),
-            TOBN(0x6c833196, 0x270580c3), TOBN(0x1e233839, 0xf1c98a14),
-            TOBN(0x67b2f7b4, 0xae34e0a5), TOBN(0x47ac8745, 0xd8ce7289),
-            TOBN(0x2b74779a, 0x100dd467), TOBN(0x274a4337, 0x4ee50d09),
-            TOBN(0x603dcf13, 0x83608bc9), TOBN(0xcd9da6c3, 0xc89e8388),
-            TOBN(0x2660199f, 0x355116ac), TOBN(0xcc38bb59, 0xb6d18eed),
-            TOBN(0x3075f31f, 0x2f4bc071), TOBN(0x9774457f, 0x265dc57e),
-            TOBN(0x06a6a9c8, 0xc6db88bb), TOBN(0x6429d07f, 0x4ec98e04),
-            TOBN(0x8d05e57b, 0x05ecaa8b), TOBN(0x20f140b1, 0x7872ea7b),
-            TOBN(0xdf8c0f09, 0xca494693), TOBN(0x48d3a020, 0xf252e909),
-            TOBN(0x4c5c29af, 0x57b14b12), TOBN(0x7e6fa37d, 0xbf47ad1c),
-            TOBN(0x66e7b506, 0x49a0c938), TOBN(0xb72c0d48, 0x6be5f41f),
-            TOBN(0x6a6242b8, 0xb2359412), TOBN(0xcd35c774, 0x8e859480),
-            TOBN(0x12536fea, 0x87baa627), TOBN(0x58c1fec1, 0xf72aa680),
-            TOBN(0x6c29b637, 0x601e5dc9), TOBN(0x9e3c3c1c, 0xde9e01b9),
-            TOBN(0xefc8127b, 0x2bcfe0b0), TOBN(0x35107102, 0x2a12f50d),
-            TOBN(0x6ccd6cb1, 0x4879b397), TOBN(0xf792f804, 0xf8a82f21),
-            TOBN(0x509d4804, 0xa9b46402), TOBN(0xedddf85d, 0xc10f0850),
-            TOBN(0x928410dc, 0x4b6208aa), TOBN(0xf6229c46, 0x391012dc),
-            TOBN(0xc5a7c41e, 0x7727b9b6), TOBN(0x289e4e4b, 0xaa444842),
-            TOBN(0x049ba1d9, 0xe9a947ea), TOBN(0x44f9e47f, 0x83c8debc),
-            TOBN(0xfa77a1fe, 0x611f8b8e), TOBN(0xfd2e416a, 0xf518f427),
-            TOBN(0xc5fffa70, 0x114ebac3), TOBN(0xfe57c4e9, 0x5d89697b),
-            TOBN(0xfdd053ac, 0xb1aaf613), TOBN(0x31df210f, 0xea585a45),
-            TOBN(0x318cc10e, 0x24985034), TOBN(0x1a38efd1, 0x5f1d6130),
-            TOBN(0xbf86f237, 0x0b1e9e21), TOBN(0xb258514d, 0x1dbe88aa),
-            TOBN(0x1e38a588, 0x90c1baf9), TOBN(0x2936a01e, 0xbdb9b692),
-            TOBN(0xd576de98, 0x6dd5b20c), TOBN(0xb586bf71, 0x70f98ecf),
-            TOBN(0xcccf0f12, 0xc42d2fd7), TOBN(0x8717e61c, 0xfb35bd7b),
-            TOBN(0x8b1e5722, 0x35e6fc06), TOBN(0x3477728f, 0x0b3e13d5),
-            TOBN(0x150c294d, 0xaa8a7372), TOBN(0xc0291d43, 0x3bfa528a),
-            TOBN(0xc6c8bc67, 0xcec5a196), TOBN(0xdeeb31e4, 0x5c2e8a7c),
-            TOBN(0xba93e244, 0xfb6e1c51), TOBN(0xb9f8b71b, 0x2e28e156),
-            TOBN(0xce65a287, 0x968a2ab9), TOBN(0xe3c5ce69, 0x46bbcb1f),
-            TOBN(0xf8c835b9, 0xe7ae3f30), TOBN(0x16bbee26, 0xff72b82b),
-            TOBN(0x665e2017, 0xfd42cd22), TOBN(0x1e139970, 0xf8b1d2a0),
-            TOBN(0x125cda29, 0x79204932), TOBN(0x7aee94a5, 0x49c3bee5),
-            TOBN(0x68c70160, 0x89821a66), TOBN(0xf7c37678, 0x8f981669),
-            TOBN(0xd90829fc, 0x48cc3645), TOBN(0x346af049, 0xd70addfc),
-            TOBN(0x2057b232, 0x370bf29c), TOBN(0xf90c73ce, 0x42e650ee),
-            TOBN(0xe03386ea, 0xa126ab90), TOBN(0x0e266e7e, 0x975a087b),
-            TOBN(0x80578eb9, 0x0fca65d9), TOBN(0x7e2989ea, 0x16af45b8),
-            TOBN(0x7438212d, 0xcac75a4e), TOBN(0x38c7ca39, 0x4fef36b8),
-            TOBN(0x8650c494, 0xd402676a), TOBN(0x26ab5a66, 0xf72c7c48),
-            TOBN(0x4e6cb426, 0xce3a464e), TOBN(0xf8f99896, 0x2b72f841),
-            TOBN(0x8c318491, 0x1a335cc8), TOBN(0x563459ba, 0x6a5913e4),
-            TOBN(0x1b920d61, 0xc7b32919), TOBN(0x805ab8b6, 0xa02425ad),
-            TOBN(0x2ac512da, 0x8d006086), TOBN(0x6ca4846a, 0xbcf5c0fd),
-            TOBN(0xafea51d8, 0xac2138d7), TOBN(0xcb647545, 0x344cd443),
-            TOBN(0x0429ee8f, 0xbd7d9040), TOBN(0xee66a2de, 0x819b9c96),
-            TOBN(0x54f9ec25, 0xdea7d744), TOBN(0x2ffea642, 0x671721bb),
-            TOBN(0x4f19dbd1, 0x114344ea), TOBN(0x04304536, 0xfd0dbc8b),
-            TOBN(0x014b50aa, 0x29ec7f91), TOBN(0xb5fc22fe, 0xbb06014d),
-            TOBN(0x60d963a9, 0x1ee682e0), TOBN(0xdf48abc0, 0xfe85c727),
-            TOBN(0x0cadba13, 0x2e707c2d), TOBN(0xde608d3a, 0xa645aeff),
-            TOBN(0x05f1c28b, 0xedafd883), TOBN(0x3c362ede, 0xbd94de1f),
-            TOBN(0x8dd0629d, 0x13593e41), TOBN(0x0a5e736f, 0x766d6eaf),
-            TOBN(0xbfa92311, 0xf68cf9d1), TOBN(0xa4f9ef87, 0xc1797556),
-            TOBN(0x10d75a1f, 0x5601c209), TOBN(0x651c374c, 0x09b07361),
-            TOBN(0x49950b58, 0x88b5cead), TOBN(0x0ef00058, 0x6fa9dbaa),
-            TOBN(0xf51ddc26, 0x4e15f33a), TOBN(0x1f8b5ca6, 0x2ef46140),
-            TOBN(0x343ac0a3, 0xee9523f0), TOBN(0xbb75eab2, 0x975ea978),
-            TOBN(0x1bccf332, 0x107387f4), TOBN(0x790f9259, 0x9ab0062e),
-            TOBN(0xf1a363ad, 0x1e4f6a5f), TOBN(0x06e08b84, 0x62519a50),
-            TOBN(0x60915187, 0x7265f1ee), TOBN(0x6a80ca34, 0x93ae985e),
-            TOBN(0x81b29768, 0xaaba4864), TOBN(0xb13cabf2, 0x8d52a7d6),
-            TOBN(0xb5c36348, 0x8ead03f1), TOBN(0xc932ad95, 0x81c7c1c0),
-            TOBN(0x5452708e, 0xcae1e27b), TOBN(0x9dac4269, 0x1b0df648),
-            TOBN(0x233e3f0c, 0xdfcdb8bc), TOBN(0xe6ceccdf, 0xec540174),
-            TOBN(0xbd0d845e, 0x95081181), TOBN(0xcc8a7920, 0x699355d5),
-            TOBN(0x111c0f6d, 0xc3b375a8), TOBN(0xfd95bc6b, 0xfd51e0dc),
-            TOBN(0x4a106a26, 0x6888523a), TOBN(0x4d142bd6, 0xcb01a06d),
-            TOBN(0x79bfd289, 0xadb9b397), TOBN(0x0bdbfb94, 0xe9863914),
-            TOBN(0x29d8a229, 0x1660f6a6), TOBN(0x7f6abcd6, 0x551c042d),
-            TOBN(0x13039deb, 0x0ac3ffe8), TOBN(0xa01be628, 0xec8523fb),
-            TOBN(0x6ea34103, 0x0ca1c328), TOBN(0xc74114bd, 0xb903928e),
-            TOBN(0x8aa4ff4e, 0x9e9144b0), TOBN(0x7064091f, 0x7f9a4b17),
-            TOBN(0xa3f4f521, 0xe447f2c4), TOBN(0x81b8da7a, 0x604291f0),
-            TOBN(0xd680bc46, 0x7d5926de), TOBN(0x84f21fd5, 0x34a1202f),
-            TOBN(0x1d1e3181, 0x4e9df3d8), TOBN(0x1ca4861a, 0x39ab8d34),
-            TOBN(0x809ddeec, 0x5b19aa4a), TOBN(0x59f72f7e, 0x4d329366),
-            TOBN(0xa2f93f41, 0x386d5087), TOBN(0x40bf739c, 0xdd67d64f),
-            TOBN(0xb4494205, 0x66702158), TOBN(0xc33c65be, 0x73b1e178),
-            TOBN(0xcdcd657c, 0x38ca6153), TOBN(0x97f4519a, 0xdc791976),
-            TOBN(0xcc7c7f29, 0xcd6e1f39), TOBN(0x38de9cfb, 0x7e3c3932),
-            TOBN(0xe448eba3, 0x7b793f85), TOBN(0xe9f8dbf9, 0xf067e914),
-            TOBN(0xc0390266, 0xf114ae87), TOBN(0x39ed75a7, 0xcd6a8e2a),
-            TOBN(0xadb14848, 0x7ffba390), TOBN(0x67f8cb8b, 0x6af9bc09),
-            TOBN(0x322c3848, 0x9c7476db), TOBN(0xa320fecf, 0x52a538d6),
-            TOBN(0xe0493002, 0xb2aced2b), TOBN(0xdfba1809, 0x616bd430),
-            TOBN(0x531c4644, 0xc331be70), TOBN(0xbc04d32e, 0x90d2e450),
-            TOBN(0x1805a0d1, 0x0f9f142d), TOBN(0x2c44a0c5, 0x47ee5a23),
-            TOBN(0x31875a43, 0x3989b4e3), TOBN(0x6b1949fd, 0x0c063481),
-            TOBN(0x2dfb9e08, 0xbe0f4492), TOBN(0x3ff0da03, 0xe9d5e517),
-            TOBN(0x03dbe9a1, 0xf79466a8), TOBN(0x0b87bcd0, 0x15ea9932),
-            TOBN(0xeb64fc83, 0xab1f58ab), TOBN(0x6d9598da, 0x817edc8a),
-            TOBN(0x699cff66, 0x1d3b67e5), TOBN(0x645c0f29, 0x92635853),
-            TOBN(0x253cdd82, 0xeabaf21c), TOBN(0x82b9602a, 0x2241659e),
-            TOBN(0x2cae07ec, 0x2d9f7091), TOBN(0xbe4c720c, 0x8b48cd9b),
-            TOBN(0x6ce5bc03, 0x6f08d6c9), TOBN(0x36e8a997, 0xaf10bf40),
-            TOBN(0x83422d21, 0x3e10ff12), TOBN(0x7b26d3eb, 0xbcc12494),
-            TOBN(0xb240d2d0, 0xc9469ad6), TOBN(0xc4a11b4d, 0x30afa05b),
-            TOBN(0x4b604ace, 0xdd6ba286), TOBN(0x18486600, 0x3ee2864c),
-            TOBN(0x5869d6ba, 0x8d9ce5be), TOBN(0x0d8f68c5, 0xff4bfb0d),
-            TOBN(0xb69f210b, 0x5700cf73), TOBN(0x61f6653a, 0x6d37c135),
-            TOBN(0xff3d432b, 0x5aff5a48), TOBN(0x0d81c4b9, 0x72ba3a69),
-            TOBN(0xee879ae9, 0xfa1899ef), TOBN(0xbac7e2a0, 0x2d6acafd),
-            TOBN(0xd6d93f6c, 0x1c664399), TOBN(0x4c288de1, 0x5bcb135d),
-            TOBN(0x83031dab, 0x9dab7cbf), TOBN(0xfe23feb0, 0x3abbf5f0),
-            TOBN(0x9f1b2466, 0xcdedca85), TOBN(0x140bb710, 0x1a09538c),
-            TOBN(0xac8ae851, 0x5e11115d), TOBN(0x0d63ff67, 0x6f03f59e),
-            TOBN(0x755e5551, 0x7d234afb), TOBN(0x61c2db4e, 0x7e208fc1),
-            TOBN(0xaa9859ce, 0xf28a4b5d), TOBN(0xbdd6d4fc, 0x34af030f),
-            TOBN(0xd1c4a26d, 0x3be01cb1), TOBN(0x9ba14ffc, 0x243aa07c),
-            TOBN(0xf95cd3a9, 0xb2503502), TOBN(0xe379bc06, 0x7d2a93ab),
-            TOBN(0x3efc18e9, 0xd4ca8d68), TOBN(0x083558ec, 0x80bb412a),
-            TOBN(0xd903b940, 0x9645a968), TOBN(0xa499f0b6, 0x9ba6054f),
-            TOBN(0x208b573c, 0xb8349abe), TOBN(0x3baab3e5, 0x30b4fc1c),
-            TOBN(0x87e978ba, 0xcb524990), TOBN(0x3524194e, 0xccdf0e80),
-            TOBN(0x62711725, 0x7d4bcc42), TOBN(0xe90a3d9b, 0xb90109ba),
-            TOBN(0x3b1bdd57, 0x1323e1e0), TOBN(0xb78e9bd5, 0x5eae1599),
-            TOBN(0x0794b746, 0x9e03d278), TOBN(0x80178605, 0xd70e6297),
-            TOBN(0x171792f8, 0x99c97855), TOBN(0x11b393ee, 0xf5a86b5c),
-            TOBN(0x48ef6582, 0xd8884f27), TOBN(0xbd44737a, 0xbf19ba5f),
-            TOBN(0x8698de4c, 0xa42062c6), TOBN(0x8975eb80, 0x61ce9c54),
-            TOBN(0xd50e57c7, 0xd7fe71f3), TOBN(0x15342190, 0xbc97ce38),
-            TOBN(0x51bda2de, 0x4df07b63), TOBN(0xba12aeae, 0x200eb87d),
-            TOBN(0xabe135d2, 0xa9b4f8f6), TOBN(0x04619d65, 0xfad6d99c),
-            TOBN(0x4a6683a7, 0x7994937c), TOBN(0x7a778c8b, 0x6f94f09a),
-            TOBN(0x8c508623, 0x20a71b89), TOBN(0x241a2aed, 0x1c229165),
-            TOBN(0x352be595, 0xaaf83a99), TOBN(0x9fbfee7f, 0x1562bac8),
-            TOBN(0xeaf658b9, 0x5c4017e3), TOBN(0x1dc7f9e0, 0x15120b86),
-            TOBN(0xd84f13dd, 0x4c034d6f), TOBN(0x283dd737, 0xeaea3038),
-            TOBN(0x197f2609, 0xcd85d6a2), TOBN(0x6ebbc345, 0xfae60177),
-            TOBN(0xb80f031b, 0x4e12fede), TOBN(0xde55d0c2, 0x07a2186b),
-            TOBN(0x1fb3e37f, 0x24dcdd5a), TOBN(0x8d602da5, 0x7ed191fb),
-            TOBN(0x108fb056, 0x76023e0d), TOBN(0x70178c71, 0x459c20c0),
-            TOBN(0xfad5a386, 0x3fe54cf0), TOBN(0xa4a3ec4f, 0x02bbb475),
-            TOBN(0x1aa5ec20, 0x919d94d7), TOBN(0x5d3b63b5, 0xa81e4ab3),
-            TOBN(0x7fa733d8, 0x5ad3d2af), TOBN(0xfbc586dd, 0xd1ac7a37),
-            TOBN(0x282925de, 0x40779614), TOBN(0xfe0ffffb, 0xe74a242a),
-            TOBN(0x3f39e67f, 0x906151e5), TOBN(0xcea27f5f, 0x55e10649),
-            TOBN(0xdca1d4e1, 0xc17cf7b7), TOBN(0x0c326d12, 0x2fe2362d),
-            TOBN(0x05f7ac33, 0x7dd35df3), TOBN(0x0c3b7639, 0xc396dbdf),
-            TOBN(0x0912f5ac, 0x03b7db1c), TOBN(0x9dea4b70, 0x5c9ed4a9),
-            TOBN(0x475e6e53, 0xaae3f639), TOBN(0xfaba0e7c, 0xfc278bac),
-            TOBN(0x16f9e221, 0x9490375f), TOBN(0xaebf9746, 0xa5a7ed0a),
-            TOBN(0x45f9af3f, 0xf41ad5d6), TOBN(0x03c4623c, 0xb2e99224),
-            TOBN(0x82c5bb5c, 0xb3cf56aa), TOBN(0x64311819, 0x34567ed3),
-            TOBN(0xec57f211, 0x8be489ac), TOBN(0x2821895d, 0xb9a1104b),
-            TOBN(0x610dc875, 0x6064e007), TOBN(0x8e526f3f, 0x5b20d0fe),
-            TOBN(0x6e71ca77, 0x5b645aee), TOBN(0x3d1dcb9f, 0x800e10ff),
-            TOBN(0x36b51162, 0x189cf6de), TOBN(0x2c5a3e30, 0x6bb17353),
-            TOBN(0xc186cd3e, 0x2a6c6fbf), TOBN(0xa74516fa, 0x4bf97906),
-            TOBN(0x5b4b8f4b, 0x279d6901), TOBN(0x0c4e57b4, 0x2b573743),
-            TOBN(0x75fdb229, 0xb6e386b6), TOBN(0xb46793fd, 0x99deac27),
-            TOBN(0xeeec47ea, 0xcf712629), TOBN(0xe965f3c4, 0xcbc3b2dd),
-            TOBN(0x8dd1fb83, 0x425c6559), TOBN(0x7fc00ee6, 0x0af06fda),
-            TOBN(0xe98c9225, 0x33d956df), TOBN(0x0f1ef335, 0x4fbdc8a2),
-            TOBN(0x2abb5145, 0xb79b8ea2), TOBN(0x40fd2945, 0xbdbff288),
-            TOBN(0x6a814ac4, 0xd7185db7), TOBN(0xc4329d6f, 0xc084609a),
-            TOBN(0xc9ba7b52, 0xed1be45d), TOBN(0x891dd20d, 0xe4cd2c74),
-            TOBN(0x5a4d4a7f, 0x824139b1), TOBN(0x66c17716, 0xb873c710),
-            TOBN(0x5e5bc141, 0x2843c4e0), TOBN(0xd5ac4817, 0xb97eb5bf),
-            TOBN(0xc0f8af54, 0x450c95c7), TOBN(0xc91b3fa0, 0x318406c5),
-            TOBN(0x360c340a, 0xab9d97f8), TOBN(0xfb57bd07, 0x90a2d611),
-            TOBN(0x4339ae3c, 0xa6a6f7e5), TOBN(0x9c1fcd2a, 0x2feb8a10),
-            TOBN(0x972bcca9, 0xc7ea7432), TOBN(0x1b0b924c, 0x308076f6),
-            TOBN(0x80b2814a, 0x2a5b4ca5), TOBN(0x2f78f55b, 0x61ef3b29),
-            TOBN(0xf838744a, 0xc18a414f), TOBN(0xc611eaae, 0x903d0a86),
-            TOBN(0x94dabc16, 0x2a453f55), TOBN(0xe6f2e3da, 0x14efb279),
-            TOBN(0x5b7a6017, 0x9320dc3c), TOBN(0x692e382f, 0x8df6b5a4),
-            TOBN(0x3f5e15e0, 0x2d40fa90), TOBN(0xc87883ae, 0x643dd318),
-            TOBN(0x511053e4, 0x53544774), TOBN(0x834d0ecc, 0x3adba2bc),
-            TOBN(0x4215d7f7, 0xbae371f5), TOBN(0xfcfd57bf, 0x6c8663bc),
-            TOBN(0xded2383d, 0xd6901b1d), TOBN(0x3b49fbb4, 0xb5587dc3),
-            TOBN(0xfd44a08d, 0x07625f62), TOBN(0x3ee4d65b, 0x9de9b762),
-        },
-        {
-            TOBN(0x64e5137d, 0x0d63d1fa), TOBN(0x658fc052, 0x02a9d89f),
-            TOBN(0x48894874, 0x50436309), TOBN(0xe9ae30f8, 0xd598da61),
-            TOBN(0x2ed710d1, 0x818baf91), TOBN(0xe27e9e06, 0x8b6a0c20),
-            TOBN(0x1e28dcfb, 0x1c1a6b44), TOBN(0x883acb64, 0xd6ac57dc),
-            TOBN(0x8735728d, 0xc2c6ff70), TOBN(0x79d6122f, 0xc5dc2235),
-            TOBN(0x23f5d003, 0x19e277f9), TOBN(0x7ee84e25, 0xdded8cc7),
-            TOBN(0x91a8afb0, 0x63cd880a), TOBN(0x3f3ea7c6, 0x3574af60),
-            TOBN(0x0cfcdc84, 0x02de7f42), TOBN(0x62d0792f, 0xb31aa152),
-            TOBN(0x8e1b4e43, 0x8a5807ce), TOBN(0xad283893, 0xe4109a7e),
-            TOBN(0xc30cc9cb, 0xafd59dda), TOBN(0xf65f36c6, 0x3d8d8093),
-            TOBN(0xdf31469e, 0xa60d32b2), TOBN(0xee93df4b, 0x3e8191c8),
-            TOBN(0x9c1017c5, 0x355bdeb5), TOBN(0xd2623185, 0x8616aa28),
-            TOBN(0xb02c83f9, 0xdec31a21), TOBN(0x988c8b23, 0x6ad9d573),
-            TOBN(0x53e983ae, 0xa57be365), TOBN(0xe968734d, 0x646f834e),
-            TOBN(0x9137ea8f, 0x5da6309b), TOBN(0x10f3a624, 0xc1f1ce16),
-            TOBN(0x782a9ea2, 0xca440921), TOBN(0xdf94739e, 0x5b46f1b5),
-            TOBN(0x9f9be006, 0xcce85c9b), TOBN(0x360e70d6, 0xa4c7c2d3),
-            TOBN(0x2cd5beea, 0xaefa1e60), TOBN(0x64cf63c0, 0x8c3d2b6d),
-            TOBN(0xfb107fa3, 0xe1cf6f90), TOBN(0xb7e937c6, 0xd5e044e6),
-            TOBN(0x74e8ca78, 0xce34db9f), TOBN(0x4f8b36c1, 0x3e210bd0),
-            TOBN(0x1df165a4, 0x34a35ea8), TOBN(0x3418e0f7, 0x4d4412f6),
-            TOBN(0x5af1f8af, 0x518836c3), TOBN(0x42ceef4d, 0x130e1965),
-            TOBN(0x5560ca0b, 0x543a1957), TOBN(0xc33761e5, 0x886cb123),
-            TOBN(0x66624b1f, 0xfe98ed30), TOBN(0xf772f4bf, 0x1090997d),
-            TOBN(0xf4e540bb, 0x4885d410), TOBN(0x7287f810, 0x9ba5f8d7),
-            TOBN(0x22d0d865, 0xde98dfb1), TOBN(0x49ff51a1, 0xbcfbb8a3),
-            TOBN(0xb6b6fa53, 0x6bc3012e), TOBN(0x3d31fd72, 0x170d541d),
-            TOBN(0x8018724f, 0x4b0f4966), TOBN(0x79e7399f, 0x87dbde07),
-            TOBN(0x56f8410e, 0xf4f8b16a), TOBN(0x97241afe, 0xc47b266a),
-            TOBN(0x0a406b8e, 0x6d9c87c1), TOBN(0x803f3e02, 0xcd42ab1b),
-            TOBN(0x7f0309a8, 0x04dbec69), TOBN(0xa83b85f7, 0x3bbad05f),
-            TOBN(0xc6097273, 0xad8e197f), TOBN(0xc097440e, 0x5067adc1),
-            TOBN(0x730eafb6, 0x3524ff16), TOBN(0xd7f9b51e, 0x823fc6ce),
-            TOBN(0x27bd0d32, 0x443e4ac0), TOBN(0x40c59ad9, 0x4d66f217),
-            TOBN(0x6c33136f, 0x17c387a4), TOBN(0x5043b8d5, 0xeb86804d),
-            TOBN(0x74970312, 0x675a73c9), TOBN(0x838fdb31, 0xf16669b6),
-            TOBN(0xc507b6dd, 0x418e7ddd), TOBN(0x39888d93, 0x472f19d6),
-            TOBN(0x7eae26be, 0x0c27eb4d), TOBN(0x17b53ed3, 0xfbabb884),
-            TOBN(0xfc27021b, 0x2b01ae4f), TOBN(0x88462e87, 0xcf488682),
-            TOBN(0xbee096ec, 0x215e2d87), TOBN(0xeb2fea9a, 0xd242e29b),
-            TOBN(0x5d985b5f, 0xb821fc28), TOBN(0x89d2e197, 0xdc1e2ad2),
-            TOBN(0x55b566b8, 0x9030ba62), TOBN(0xe3fd41b5, 0x4f41b1c6),
-            TOBN(0xb738ac2e, 0xb9a96d61), TOBN(0x7f8567ca, 0x369443f4),
-            TOBN(0x8698622d, 0xf803a440), TOBN(0x2b586236, 0x8fe2f4dc),
-            TOBN(0xbbcc00c7, 0x56b95bce), TOBN(0x5ec03906, 0x616da680),
-            TOBN(0x79162ee6, 0x72214252), TOBN(0x43132b63, 0x86a892d2),
-            TOBN(0x4bdd3ff2, 0x2f3263bf), TOBN(0xd5b3733c, 0x9cd0a142),
-            TOBN(0x592eaa82, 0x44415ccb), TOBN(0x663e8924, 0x8d5474ea),
-            TOBN(0x8058a25e, 0x5236344e), TOBN(0x82e8df9d, 0xbda76ee6),
-            TOBN(0xdcf6efd8, 0x11cc3d22), TOBN(0x00089cda, 0x3b4ab529),
-            TOBN(0x91d3a071, 0xbd38a3db), TOBN(0x4ea97fc0, 0xef72b925),
-            TOBN(0x0c9fc15b, 0xea3edf75), TOBN(0x5a6297cd, 0xa4348ed3),
-            TOBN(0x0d38ab35, 0xce7c42d4), TOBN(0x9fd493ef, 0x82feab10),
-            TOBN(0x46056b6d, 0x82111b45), TOBN(0xda11dae1, 0x73efc5c3),
-            TOBN(0xdc740278, 0x5545a7fb), TOBN(0xbdb2601c, 0x40d507e6),
-            TOBN(0x121dfeeb, 0x7066fa58), TOBN(0x214369a8, 0x39ae8c2a),
-            TOBN(0x195709cb, 0x06e0956c), TOBN(0x4c9d254f, 0x010cd34b),
-            TOBN(0xf51e13f7, 0x0471a532), TOBN(0xe19d6791, 0x1e73054d),
-            TOBN(0xf702a628, 0xdb5c7be3), TOBN(0xc7141218, 0xb24dde05),
-            TOBN(0xdc18233c, 0xf29b2e2e), TOBN(0x3a6bd1e8, 0x85342dba),
-            TOBN(0x3f747fa0, 0xb311898c), TOBN(0xe2a272e4, 0xcd0eac65),
-            TOBN(0x4bba5851, 0xf914d0bc), TOBN(0x7a1a9660, 0xc4a43ee3),
-            TOBN(0xe5a367ce, 0xa1c8cde9), TOBN(0x9d958ba9, 0x7271abe3),
-            TOBN(0xf3ff7eb6, 0x3d1615cd), TOBN(0xa2280dce, 0xf5ae20b0),
-            TOBN(0x56dba5c1, 0xcf640147), TOBN(0xea5a2e3d, 0x5e83d118),
-            TOBN(0x04cd6b6d, 0xda24c511), TOBN(0x1c0f4671, 0xe854d214),
-            TOBN(0x91a6b7a9, 0x69565381), TOBN(0xdc966240, 0xdecf1f5b),
-            TOBN(0x1b22d21c, 0xfcf5d009), TOBN(0x2a05f641, 0x9021dbd5),
-            TOBN(0x8c0ed566, 0xd4312483), TOBN(0x5179a95d, 0x643e216f),
-            TOBN(0xcc185fec, 0x17044493), TOBN(0xb3063339, 0x54991a21),
-            TOBN(0xd801ecdb, 0x0081a726), TOBN(0x0149b0c6, 0x4fa89bbb),
-            TOBN(0xafe9065a, 0x4391b6b9), TOBN(0xedc92786, 0xd633f3a3),
-            TOBN(0xe408c24a, 0xae6a8e13), TOBN(0x85833fde, 0x9f3897ab),
-            TOBN(0x43800e7e, 0xd81a0715), TOBN(0xde08e346, 0xb44ffc5f),
-            TOBN(0x7094184c, 0xcdeff2e0), TOBN(0x49f9387b, 0x165eaed1),
-            TOBN(0x635d6129, 0x777c468a), TOBN(0x8c0dcfd1, 0x538c2dd8),
-            TOBN(0xd6d9d9e3, 0x7a6a308b), TOBN(0x62375830, 0x4c2767d3),
-            TOBN(0x874a8bc6, 0xf38cbeb6), TOBN(0xd94d3f1a, 0xccb6fd9e),
-            TOBN(0x92a9735b, 0xba21f248), TOBN(0x272ad0e5, 0x6cd1efb0),
-            TOBN(0x7437b69c, 0x05b03284), TOBN(0xe7f04702, 0x6948c225),
-            TOBN(0x8a56c04a, 0xcba2ecec), TOBN(0x0c181270, 0xe3a73e41),
-            TOBN(0x6cb34e9d, 0x03e93725), TOBN(0xf77c8713, 0x496521a9),
-            TOBN(0x94569183, 0xfa7f9f90), TOBN(0xf2e7aa4c, 0x8c9707ad),
-            TOBN(0xced2c9ba, 0x26c1c9a3), TOBN(0x9109fe96, 0x40197507),
-            TOBN(0x9ae868a9, 0xe9adfe1c), TOBN(0x3984403d, 0x314e39bb),
-            TOBN(0xb5875720, 0xf2fe378f), TOBN(0x33f901e0, 0xba44a628),
-            TOBN(0xea1125fe, 0x3652438c), TOBN(0xae9ec4e6, 0x9dd1f20b),
-            TOBN(0x1e740d9e, 0xbebf7fbd), TOBN(0x6dbd3ddc, 0x42dbe79c),
-            TOBN(0x62082aec, 0xedd36776), TOBN(0xf612c478, 0xe9859039),
-            TOBN(0xa493b201, 0x032f7065), TOBN(0xebd4d8f2, 0x4ff9b211),
-            TOBN(0x3f23a0aa, 0xaac4cb32), TOBN(0xea3aadb7, 0x15ed4005),
-            TOBN(0xacf17ea4, 0xafa27e63), TOBN(0x56125c1a, 0xc11fd66c),
-            TOBN(0x266344a4, 0x3794f8dc), TOBN(0xdcca923a, 0x483c5c36),
-            TOBN(0x2d6b6bbf, 0x3f9d10a0), TOBN(0xb320c5ca, 0x81d9bdf3),
-            TOBN(0x620e28ff, 0x47b50a95), TOBN(0x933e3b01, 0xcef03371),
-            TOBN(0xf081bf85, 0x99100153), TOBN(0x183be9a0, 0xc3a8c8d6),
-            TOBN(0x4e3ddc5a, 0xd6bbe24d), TOBN(0xc6c74630, 0x53843795),
-            TOBN(0x78193dd7, 0x65ec2d4c), TOBN(0xb8df26cc, 0xcd3c89b2),
-            TOBN(0x98dbe399, 0x5a483f8d), TOBN(0x72d8a957, 0x7dd3313a),
-            TOBN(0x65087294, 0xab0bd375), TOBN(0xfcd89248, 0x7c259d16),
-            TOBN(0x8a9443d7, 0x7613aa81), TOBN(0x80100800, 0x85fe6584),
-            TOBN(0x70fc4dbc, 0x7fb10288), TOBN(0xf58280d3, 0xe86beee8),
-            TOBN(0x14fdd82f, 0x7c978c38), TOBN(0xdf1204c1, 0x0de44d7b),
-            TOBN(0xa08a1c84, 0x4160252f), TOBN(0x591554ca, 0xc17646a5),
-            TOBN(0x214a37d6, 0xa05bd525), TOBN(0x48d5f09b, 0x07957b3c),
-            TOBN(0x0247cdcb, 0xd7109bc9), TOBN(0x40f9e4bb, 0x30599ce7),
-            TOBN(0xc325fa03, 0xf46ad2ec), TOBN(0x00f766cf, 0xc3e3f9ee),
-            TOBN(0xab556668, 0xd43a4577), TOBN(0x68d30a61, 0x3ee03b93),
-            TOBN(0x7ddc81ea, 0x77b46a08), TOBN(0xcf5a6477, 0xc7480699),
-            TOBN(0x43a8cb34, 0x6633f683), TOBN(0x1b867e6b, 0x92363c60),
-            TOBN(0x43921114, 0x1f60558e), TOBN(0xcdbcdd63, 0x2f41450e),
-            TOBN(0x7fc04601, 0xcc630e8b), TOBN(0xea7c66d5, 0x97038b43),
-            TOBN(0x7259b8a5, 0x04e99fd8), TOBN(0x98a8dd12, 0x4785549a),
-            TOBN(0x0e459a7c, 0x840552e1), TOBN(0xcdfcf4d0, 0x4bb0909e),
-            TOBN(0x34a86db2, 0x53758da7), TOBN(0xe643bb83, 0xeac997e1),
-            TOBN(0x96400bd7, 0x530c5b7e), TOBN(0x9f97af87, 0xb41c8b52),
-            TOBN(0x34fc8820, 0xfbeee3f9), TOBN(0x93e53490, 0x49091afd),
-            TOBN(0x764b9be5, 0x9a31f35c), TOBN(0x71f37864, 0x57e3d924),
-            TOBN(0x02fb34e0, 0x943aa75e), TOBN(0xa18c9c58, 0xab8ff6e4),
-            TOBN(0x080f31b1, 0x33cf0d19), TOBN(0x5c9682db, 0x083518a7),
-            TOBN(0x873d4ca6, 0xb709c3de), TOBN(0x64a84262, 0x3575b8f0),
-            TOBN(0x6275da1f, 0x020154bb), TOBN(0x97678caa, 0xd17cf1ab),
-            TOBN(0x8779795f, 0x951a95c3), TOBN(0xdd35b163, 0x50fccc08),
-            TOBN(0x32709627, 0x33d8f031), TOBN(0x3c5ab10a, 0x498dd85c),
-            TOBN(0xb6c185c3, 0x41dca566), TOBN(0x7de7feda, 0xd8622aa3),
-            TOBN(0x99e84d92, 0x901b6dfb), TOBN(0x30a02b0e, 0x7c4ad288),
-            TOBN(0xc7c81daa, 0x2fd3cf36), TOBN(0xd1319547, 0xdf89e59f),
-            TOBN(0xb2be8184, 0xcd496733), TOBN(0xd5f449eb, 0x93d3412b),
-            TOBN(0x7ea41b1b, 0x25fe531d), TOBN(0xf9797432, 0x6a1d5646),
-            TOBN(0x86067f72, 0x2bde501a), TOBN(0xf91481c0, 0x0c85e89c),
-            TOBN(0xca8ee465, 0xf8b05bc6), TOBN(0x1844e1cf, 0x02e83cda),
-            TOBN(0xca82114a, 0xb4dbe33b), TOBN(0x0f9f8769, 0x4eabfde2),
-            TOBN(0x4936b1c0, 0x38b27fe2), TOBN(0x63b6359b, 0xaba402df),
-            TOBN(0x40c0ea2f, 0x656bdbab), TOBN(0x9c992a89, 0x6580c39c),
-            TOBN(0x600e8f15, 0x2a60aed1), TOBN(0xeb089ca4, 0xe0bf49df),
-            TOBN(0x9c233d7d, 0x2d42d99a), TOBN(0x648d3f95, 0x4c6bc2fa),
-            TOBN(0xdcc383a8, 0xe1add3f3), TOBN(0xf42c0c6a, 0x4f64a348),
-            TOBN(0x2abd176f, 0x0030dbdb), TOBN(0x4de501a3, 0x7d6c215e),
-            TOBN(0x4a107c1f, 0x4b9a64bc), TOBN(0xa77f0ad3, 0x2496cd59),
-            TOBN(0xfb78ac62, 0x7688dffb), TOBN(0x7025a2ca, 0x67937d8e),
-            TOBN(0xfde8b2d1, 0xd1a8f4e7), TOBN(0xf5b3da47, 0x7354927c),
-            TOBN(0xe48606a3, 0xd9205735), TOBN(0xac477cc6, 0xe177b917),
-            TOBN(0xfb1f73d2, 0xa883239a), TOBN(0xe12572f6, 0xcc8b8357),
-            TOBN(0x9d355e9c, 0xfb1f4f86), TOBN(0x89b795f8, 0xd9f3ec6e),
-            TOBN(0x27be56f1, 0xb54398dc), TOBN(0x1890efd7, 0x3fedeed5),
-            TOBN(0x62f77f1f, 0x9c6d0140), TOBN(0x7ef0e314, 0x596f0ee4),
-            TOBN(0x50ca6631, 0xcc61dab3), TOBN(0x4a39801d, 0xf4866e4f),
-            TOBN(0x66c8d032, 0xae363b39), TOBN(0x22c591e5, 0x2ead66aa),
-            TOBN(0x954ba308, 0xde02a53e), TOBN(0x2a6c060f, 0xd389f357),
-            TOBN(0xe6cfcde8, 0xfbf40b66), TOBN(0x8e02fc56, 0xc6340ce1),
-            TOBN(0xe4957795, 0x73adb4ba), TOBN(0x7b86122c, 0xa7b03805),
-            TOBN(0x63f83512, 0x0c8e6fa6), TOBN(0x83660ea0, 0x057d7804),
-            TOBN(0xbad79105, 0x21ba473c), TOBN(0xb6c50bee, 0xded5389d),
-            TOBN(0xee2caf4d, 0xaa7c9bc0), TOBN(0xd97b8de4, 0x8c4e98a7),
-            TOBN(0xa9f63e70, 0xab3bbddb), TOBN(0x3898aabf, 0x2597815a),
-            TOBN(0x7659af89, 0xac15b3d9), TOBN(0xedf7725b, 0x703ce784),
-            TOBN(0x25470fab, 0xe085116b), TOBN(0x04a43375, 0x87285310),
-            TOBN(0x4e39187e, 0xe2bfd52f), TOBN(0x36166b44, 0x7d9ebc74),
-            TOBN(0x92ad433c, 0xfd4b322c), TOBN(0x726aa817, 0xba79ab51),
-            TOBN(0xf96eacd8, 0xc1db15eb), TOBN(0xfaf71e91, 0x0476be63),
-            TOBN(0xdd69a640, 0x641fad98), TOBN(0xb7995918, 0x29622559),
-            TOBN(0x03c6daa5, 0xde4199dc), TOBN(0x92cadc97, 0xad545eb4),
-            TOBN(0x1028238b, 0x256534e4), TOBN(0x73e80ce6, 0x8595409a),
-            TOBN(0x690d4c66, 0xd05dc59b), TOBN(0xc95f7b8f, 0x981dee80),
-            TOBN(0xf4337014, 0xd856ac25), TOBN(0x441bd9dd, 0xac524dca),
-            TOBN(0x640b3d85, 0x5f0499f5), TOBN(0x39cf84a9, 0xd5fda182),
-            TOBN(0x04e7b055, 0xb2aa95a0), TOBN(0x29e33f0a, 0x0ddf1860),
-            TOBN(0x082e74b5, 0x423f6b43), TOBN(0x217edeb9, 0x0aaa2b0f),
-            TOBN(0x58b83f35, 0x83cbea55), TOBN(0xc485ee4d, 0xbc185d70),
-            TOBN(0x833ff03b, 0x1e5f6992), TOBN(0xb5b9b9cc, 0xcf0c0dd5),
-            TOBN(0x7caaee8e, 0x4e9e8a50), TOBN(0x462e907b, 0x6269dafd),
-            TOBN(0x6ed5cee9, 0xfbe791c6), TOBN(0x68ca3259, 0xed430790),
-            TOBN(0x2b72bdf2, 0x13b5ba88), TOBN(0x60294c8a, 0x35ef0ac4),
-            TOBN(0x9c3230ed, 0x19b99b08), TOBN(0x560fff17, 0x6c2589aa),
-            TOBN(0x552b8487, 0xd6770374), TOBN(0xa373202d, 0x9a56f685),
-            TOBN(0xd3e7f907, 0x45f175d9), TOBN(0x3c2f315f, 0xd080d810),
-            TOBN(0x1130e9dd, 0x7b9520e8), TOBN(0xc078f9e2, 0x0af037b5),
-            TOBN(0x38cd2ec7, 0x1e9c104c), TOBN(0x0f684368, 0xc472fe92),
-            TOBN(0xd3f1b5ed, 0x6247e7ef), TOBN(0xb32d33a9, 0x396dfe21),
-            TOBN(0x46f59cf4, 0x4a9aa2c2), TOBN(0x69cd5168, 0xff0f7e41),
-            TOBN(0x3f59da0f, 0x4b3234da), TOBN(0xcf0b0235, 0xb4579ebe),
-            TOBN(0x6d1cbb25, 0x6d2476c7), TOBN(0x4f0837e6, 0x9dc30f08),
-            TOBN(0x9a4075bb, 0x906f6e98), TOBN(0x253bb434, 0xc761e7d1),
-            TOBN(0xde2e645f, 0x6e73af10), TOBN(0xb89a4060, 0x0c5f131c),
-            TOBN(0xd12840c5, 0xb8cc037f), TOBN(0x3d093a5b, 0x7405bb47),
-            TOBN(0x6202c253, 0x206348b8), TOBN(0xbf5d57fc, 0xc55a3ca7),
-            TOBN(0x89f6c90c, 0x8c3bef48), TOBN(0x23ac7623, 0x5a0a960a),
-            TOBN(0xdfbd3d6b, 0x552b42ab), TOBN(0x3ef22458, 0x132061f6),
-            TOBN(0xd74e9bda, 0xc97e6516), TOBN(0x88779360, 0xc230f49e),
-            TOBN(0xa6ec1de3, 0x1e74ea49), TOBN(0x581dcee5, 0x3fb645a2),
-            TOBN(0xbaef2391, 0x8f483f14), TOBN(0x6d2dddfc, 0xd137d13b),
-            TOBN(0x54cde50e, 0xd2743a42), TOBN(0x89a34fc5, 0xe4d97e67),
-            TOBN(0x13f1f5b3, 0x12e08ce5), TOBN(0xa80540b8, 0xa7f0b2ca),
-            TOBN(0x854bcf77, 0x01982805), TOBN(0xb8653ffd, 0x233bea04),
-            TOBN(0x8e7b8787, 0x02b0b4c9), TOBN(0x2675261f, 0x9acb170a),
-            TOBN(0x061a9d90, 0x930c14e5), TOBN(0xb59b30e0, 0xdef0abea),
-            TOBN(0x1dc19ea6, 0x0200ec7d), TOBN(0xb6f4a3f9, 0x0bce132b),
-            TOBN(0xb8d5de90, 0xf13e27e0), TOBN(0xbaee5ef0, 0x1fade16f),
-            TOBN(0x6f406aaa, 0xe4c6cf38), TOBN(0xab4cfe06, 0xd1369815),
-            TOBN(0x0dcffe87, 0xefd550c6), TOBN(0x9d4f59c7, 0x75ff7d39),
-            TOBN(0xb02553b1, 0x51deb6ad), TOBN(0x812399a4, 0xb1877749),
-            TOBN(0xce90f71f, 0xca6006e1), TOBN(0xc32363a6, 0xb02b6e77),
-            TOBN(0x02284fbe, 0xdc36c64d), TOBN(0x86c81e31, 0xa7e1ae61),
-            TOBN(0x2576c7e5, 0xb909d94a), TOBN(0x8b6f7d02, 0x818b2bb0),
-            TOBN(0xeca3ed07, 0x56faa38a), TOBN(0xa3790e6c, 0x9305bb54),
-            TOBN(0xd784eeda, 0x7bc73061), TOBN(0xbd56d369, 0x6dd50614),
-            TOBN(0xd6575949, 0x229a8aa9), TOBN(0xdcca8f47, 0x4595ec28),
-            TOBN(0x814305c1, 0x06ab4fe6), TOBN(0xc8c39768, 0x24f43f16),
-            TOBN(0xe2a45f36, 0x523f2b36), TOBN(0x995c6493, 0x920d93bb),
-            TOBN(0xf8afdab7, 0x90f1632b), TOBN(0x79ebbecd, 0x1c295954),
-            TOBN(0xc7bb3ddb, 0x79592f48), TOBN(0x67216a7b, 0x5f88e998),
-            TOBN(0xd91f098b, 0xbc01193e), TOBN(0xf7d928a5, 0xb1db83fc),
-            TOBN(0x55e38417, 0xe991f600), TOBN(0x2a91113e, 0x2981a934),
-            TOBN(0xcbc9d648, 0x06b13bde), TOBN(0xb011b6ac, 0x0755ff44),
-            TOBN(0x6f4cb518, 0x045ec613), TOBN(0x522d2d31, 0xc2f5930a),
-            TOBN(0x5acae1af, 0x382e65de), TOBN(0x57643067, 0x27bc966f),
-            TOBN(0x5e12705d, 0x1c7193f0), TOBN(0xf0f32f47, 0x3be8858e),
-            TOBN(0x785c3d7d, 0x96c6dfc7), TOBN(0xd75b4a20, 0xbf31795d),
-            TOBN(0x91acf17b, 0x342659d4), TOBN(0xe596ea34, 0x44f0378f),
-            TOBN(0x4515708f, 0xce52129d), TOBN(0x17387e1e, 0x79f2f585),
-            TOBN(0x72cfd2e9, 0x49dee168), TOBN(0x1ae05223, 0x3e2af239),
-            TOBN(0x009e75be, 0x1d94066a), TOBN(0x6cca31c7, 0x38abf413),
-            TOBN(0xb50bd61d, 0x9bc49908), TOBN(0x4a9b4a8c, 0xf5e2bc1e),
-            TOBN(0xeb6cc5f7, 0x946f83ac), TOBN(0x27da93fc, 0xebffab28),
-            TOBN(0xea314c96, 0x4821c8c5), TOBN(0x8de49ded, 0xa83c15f4),
-            TOBN(0x7a64cf20, 0x7af33004), TOBN(0x45f1bfeb, 0xc9627e10),
-            TOBN(0x878b0626, 0x54b9df60), TOBN(0x5e4fdc3c, 0xa95c0b33),
-            TOBN(0xe54a37ca, 0xc2035d8e), TOBN(0x9087cda9, 0x80f20b8c),
-            TOBN(0x36f61c23, 0x8319ade4), TOBN(0x766f287a, 0xde8cfdf8),
-            TOBN(0x48821948, 0x346f3705), TOBN(0x49a7b853, 0x16e4f4a2),
-            TOBN(0xb9b3f8a7, 0x5cedadfd), TOBN(0x8f562815, 0x8db2a815),
-            TOBN(0xc0b7d554, 0x01f68f95), TOBN(0x12971e27, 0x688a208e),
-            TOBN(0xc9f8b696, 0xd0ff34fc), TOBN(0x20824de2, 0x1222718c),
-            TOBN(0x7213cf9f, 0x0c95284d), TOBN(0xe2ad741b, 0xdc158240),
-            TOBN(0x0ee3a6df, 0x54043ccf), TOBN(0x16ff479b, 0xd84412b3),
-            TOBN(0xf6c74ee0, 0xdfc98af0), TOBN(0xa78a169f, 0x52fcd2fb),
-            TOBN(0xd8ae8746, 0x99c930e9), TOBN(0x1d33e858, 0x49e117a5),
-            TOBN(0x7581fcb4, 0x6624759f), TOBN(0xde50644f, 0x5bedc01d),
-            TOBN(0xbeec5d00, 0xcaf3155e), TOBN(0x672d66ac, 0xbc73e75f),
-            TOBN(0x86b9d8c6, 0x270b01db), TOBN(0xd249ef83, 0x50f55b79),
-            TOBN(0x6131d6d4, 0x73978fe3), TOBN(0xcc4e4542, 0x754b00a1),
-            TOBN(0x4e05df05, 0x57dfcfe9), TOBN(0x94b29cdd, 0x51ef6bf0),
-            TOBN(0xe4530cff, 0x9bc7edf2), TOBN(0x8ac236fd, 0xd3da65f3),
-            TOBN(0x0faf7d5f, 0xc8eb0b48), TOBN(0x4d2de14c, 0x660eb039),
-            TOBN(0xc006bba7, 0x60430e54), TOBN(0x10a2d0d6, 0xda3289ab),
-            TOBN(0x9c037a5d, 0xd7979c59), TOBN(0x04d1f3d3, 0xa116d944),
-            TOBN(0x9ff22473, 0x8a0983cd), TOBN(0x28e25b38, 0xc883cabb),
-            TOBN(0xe968dba5, 0x47a58995), TOBN(0x2c80b505, 0x774eebdf),
-            TOBN(0xee763b71, 0x4a953beb), TOBN(0x502e223f, 0x1642e7f6),
-            TOBN(0x6fe4b641, 0x61d5e722), TOBN(0x9d37c5b0, 0xdbef5316),
-            TOBN(0x0115ed70, 0xf8330bc7), TOBN(0x139850e6, 0x75a72789),
-            TOBN(0x27d7faec, 0xffceccc2), TOBN(0x3016a860, 0x4fd9f7f6),
-            TOBN(0xc492ec64, 0x4cd8f64c), TOBN(0x58a2d790, 0x279d7b51),
-            TOBN(0x0ced1fc5, 0x1fc75256), TOBN(0x3e658aed, 0x8f433017),
-            TOBN(0x0b61942e, 0x05da59eb), TOBN(0xba3d60a3, 0x0ddc3722),
-            TOBN(0x7c311cd1, 0x742e7f87), TOBN(0x6473ffee, 0xf6b01b6e),
-        },
-        {
-            TOBN(0x8303604f, 0x692ac542), TOBN(0xf079ffe1, 0x227b91d3),
-            TOBN(0x19f63e63, 0x15aaf9bd), TOBN(0xf99ee565, 0xf1f344fb),
-            TOBN(0x8a1d661f, 0xd6219199), TOBN(0x8c883bc6, 0xd48ce41c),
-            TOBN(0x1065118f, 0x3c74d904), TOBN(0x713889ee, 0x0faf8b1b),
-            TOBN(0x972b3f8f, 0x81a1b3be), TOBN(0x4f3ce145, 0xce2764a0),
-            TOBN(0xe2d0f1cc, 0x28c4f5f7), TOBN(0xdeee0c0d, 0xc7f3985b),
-            TOBN(0x7df4adc0, 0xd39e25c3), TOBN(0x40619820, 0xc467a080),
-            TOBN(0x440ebc93, 0x61cf5a58), TOBN(0x527729a6, 0x422ad600),
-            TOBN(0xca6c0937, 0xb1b76ba6), TOBN(0x1a2eab85, 0x4d2026dc),
-            TOBN(0xb1715e15, 0x19d9ae0a), TOBN(0xf1ad9199, 0xbac4a026),
-            TOBN(0x35b3dfb8, 0x07ea7b0e), TOBN(0xedf5496f, 0x3ed9eb89),
-            TOBN(0x8932e5ff, 0x2d6d08ab), TOBN(0xf314874e, 0x25bd2731),
-            TOBN(0xefb26a75, 0x3f73f449), TOBN(0x1d1c94f8, 0x8d44fc79),
-            TOBN(0x49f0fbc5, 0x3bc0dc4d), TOBN(0xb747ea0b, 0x3698a0d0),
-            TOBN(0x5218c3fe, 0x228d291e), TOBN(0x35b804b5, 0x43c129d6),
-            TOBN(0xfac859b8, 0xd1acc516), TOBN(0x6c10697d, 0x95d6e668),
-            TOBN(0xc38e438f, 0x0876fd4e), TOBN(0x45f0c307, 0x83d2f383),
-            TOBN(0x203cc2ec, 0xb10934cb), TOBN(0x6a8f2439, 0x2c9d46ee),
-            TOBN(0xf16b431b, 0x65ccde7b), TOBN(0x41e2cd18, 0x27e76a6f),
-            TOBN(0xb9c8cf8f, 0x4e3484d7), TOBN(0x64426efd, 0x8315244a),
-            TOBN(0x1c0a8e44, 0xfc94dea3), TOBN(0x34c8cdbf, 0xdad6a0b0),
-            TOBN(0x919c3840, 0x04113cef), TOBN(0xfd32fba4, 0x15490ffa),
-            TOBN(0x58d190f6, 0x795dcfb7), TOBN(0xfef01b03, 0x83588baf),
-            TOBN(0x9e6d1d63, 0xca1fc1c0), TOBN(0x53173f96, 0xf0a41ac9),
-            TOBN(0x2b1d402a, 0xba16f73b), TOBN(0x2fb31014, 0x8cf9b9fc),
-            TOBN(0x2d51e60e, 0x446ef7bf), TOBN(0xc731021b, 0xb91e1745),
-            TOBN(0x9d3b4724, 0x4fee99d4), TOBN(0x4bca48b6, 0xfac5c1ea),
-            TOBN(0x70f5f514, 0xbbea9af7), TOBN(0x751f55a5, 0x974c283a),
-            TOBN(0x6e30251a, 0xcb452fdb), TOBN(0x31ee6965, 0x50f30650),
-            TOBN(0xb0b3e508, 0x933548d9), TOBN(0xb8949a4f, 0xf4b0ef5b),
-            TOBN(0x208b8326, 0x3c88f3bd), TOBN(0xab147c30, 0xdb1d9989),
-            TOBN(0xed6515fd, 0x44d4df03), TOBN(0x17a12f75, 0xe72eb0c5),
-            TOBN(0x3b59796d, 0x36cf69db), TOBN(0x1219eee9, 0x56670c18),
-            TOBN(0xfe3341f7, 0x7a070d8e), TOBN(0x9b70130b, 0xa327f90c),
-            TOBN(0x36a32462, 0x0ae18e0e), TOBN(0x2021a623, 0x46c0a638),
-            TOBN(0x251b5817, 0xc62eb0d4), TOBN(0x87bfbcdf, 0x4c762293),
-            TOBN(0xf78ab505, 0xcdd61d64), TOBN(0x8c7a53fc, 0xc8c18857),
-            TOBN(0xa653ce6f, 0x16147515), TOBN(0x9c923aa5, 0xea7d52d5),
-            TOBN(0xc24709cb, 0x5c18871f), TOBN(0x7d53bec8, 0x73b3cc74),
-            TOBN(0x59264aff, 0xfdd1d4c4), TOBN(0x5555917e, 0x240da582),
-            TOBN(0xcae8bbda, 0x548f5a0e), TOBN(0x1910eaba, 0x3bbfbbe1),
-            TOBN(0xae579685, 0x7677afc3), TOBN(0x49ea61f1, 0x73ff0b5c),
-            TOBN(0x78655478, 0x4f7c3922), TOBN(0x95d337cd, 0x20c68eef),
-            TOBN(0x68f1e1e5, 0xdf779ab9), TOBN(0x14b491b0, 0xb5cf69a8),
-            TOBN(0x7a6cbbe0, 0x28e3fe89), TOBN(0xe7e1fee4, 0xc5aac0eb),
-            TOBN(0x7f47eda5, 0x697e5140), TOBN(0x4f450137, 0xb454921f),
-            TOBN(0xdb625f84, 0x95cd8185), TOBN(0x74be0ba1, 0xcdb2e583),
-            TOBN(0xaee4fd7c, 0xdd5e6de4), TOBN(0x4251437d, 0xe8101739),
-            TOBN(0x686d72a0, 0xac620366), TOBN(0x4be3fb9c, 0xb6d59344),
-            TOBN(0x6e8b44e7, 0xa1eb75b9), TOBN(0x84e39da3, 0x91a5c10c),
-            TOBN(0x37cc1490, 0xb38f0409), TOBN(0x02951943, 0x2c2ade82),
-            TOBN(0x9b688783, 0x1190a2d8), TOBN(0x25627d14, 0x231182ba),
-            TOBN(0x6eb550aa, 0x658a6d87), TOBN(0x1405aaa7, 0xcf9c7325),
-            TOBN(0xd147142e, 0x5c8748c9), TOBN(0x7f637e4f, 0x53ede0e0),
-            TOBN(0xf8ca2776, 0x14ffad2c), TOBN(0xe58fb1bd, 0xbafb6791),
-            TOBN(0x17158c23, 0xbf8f93fc), TOBN(0x7f15b373, 0x0a4a4655),
-            TOBN(0x39d4add2, 0xd842ca72), TOBN(0xa71e4391, 0x3ed96305),
-            TOBN(0x5bb09cbe, 0x6700be14), TOBN(0x68d69d54, 0xd8befcf6),
-            TOBN(0xa45f5367, 0x37183bcf), TOBN(0x7152b7bb, 0x3370dff7),
-            TOBN(0xcf887baa, 0xbf12525b), TOBN(0xe7ac7bdd, 0xd6d1e3cd),
-            TOBN(0x25914f78, 0x81fdad90), TOBN(0xcf638f56, 0x0d2cf6ab),
-            TOBN(0xb90bc03f, 0xcc054de5), TOBN(0x932811a7, 0x18b06350),
-            TOBN(0x2f00b330, 0x9bbd11ff), TOBN(0x76108a6f, 0xb4044974),
-            TOBN(0x801bb9e0, 0xa851d266), TOBN(0x0dd099be, 0xbf8990c1),
-            TOBN(0x58c5aaaa, 0xabe32986), TOBN(0x0fe9dd2a, 0x50d59c27),
-            TOBN(0x84951ff4, 0x8d307305), TOBN(0x6c23f829, 0x86529b78),
-            TOBN(0x50bb2218, 0x0b136a79), TOBN(0x7e2174de, 0x77a20996),
-            TOBN(0x6f00a4b9, 0xc0bb4da6), TOBN(0x89a25a17, 0xefdde8da),
-            TOBN(0xf728a27e, 0xc11ee01d), TOBN(0xf900553a, 0xe5f10dfb),
-            TOBN(0x189a83c8, 0x02ec893c), TOBN(0x3ca5bdc1, 0x23f66d77),
-            TOBN(0x98781537, 0x97eada9f), TOBN(0x59c50ab3, 0x10256230),
-            TOBN(0x346042d9, 0x323c69b3), TOBN(0x1b715a6d, 0x2c460449),
-            TOBN(0xa41dd476, 0x6ae06e0b), TOBN(0xcdd7888e, 0x9d42e25f),
-            TOBN(0x0f395f74, 0x56b25a20), TOBN(0xeadfe0ae, 0x8700e27e),
-            TOBN(0xb09d52a9, 0x69950093), TOBN(0x3525d9cb, 0x327f8d40),
-            TOBN(0xb8235a94, 0x67df886a), TOBN(0x77e4b0dd, 0x035faec2),
-            TOBN(0x115eb20a, 0x517d7061), TOBN(0x77fe3433, 0x6c2df683),
-            TOBN(0x6870ddc7, 0xcdc6fc67), TOBN(0xb1610588, 0x0b87de83),
-            TOBN(0x343584ca, 0xd9c4ddbe), TOBN(0xb3164f1c, 0x3d754be2),
-            TOBN(0x0731ed3a, 0xc1e6c894), TOBN(0x26327dec, 0x4f6b904c),
-            TOBN(0x9d49c6de, 0x97b5cd32), TOBN(0x40835dae, 0xb5eceecd),
-            TOBN(0xc66350ed, 0xd9ded7fe), TOBN(0x8aeebb5c, 0x7a678804),
-            TOBN(0x51d42fb7, 0x5b8ee9ec), TOBN(0xd7a17bdd, 0x8e3ca118),
-            TOBN(0x40d7511a, 0x2ef4400e), TOBN(0xc48990ac, 0x875a66f4),
-            TOBN(0x8de07d2a, 0x2199e347), TOBN(0xbee75556, 0x2a39e051),
-            TOBN(0x56918786, 0x916e51dc), TOBN(0xeb191313, 0x4a2d89ec),
-            TOBN(0x6679610d, 0x37d341ed), TOBN(0x434fbb41, 0x56d51c2b),
-            TOBN(0xe54b7ee7, 0xd7492dba), TOBN(0xaa33a79a, 0x59021493),
-            TOBN(0x49fc5054, 0xe4bd6d3d), TOBN(0x09540f04, 0x5ab551d0),
-            TOBN(0x8acc9085, 0x4942d3a6), TOBN(0x231af02f, 0x2d28323b),
-            TOBN(0x93458cac, 0x0992c163), TOBN(0x1fef8e71, 0x888e3bb4),
-            TOBN(0x27578da5, 0xbe8c268c), TOBN(0xcc8be792, 0xe805ec00),
-            TOBN(0x29267bae, 0xc61c3855), TOBN(0xebff429d, 0x58c1fd3b),
-            TOBN(0x22d886c0, 0x8c0b93b8), TOBN(0xca5e00b2, 0x2ddb8953),
-            TOBN(0xcf330117, 0xc3fed8b7), TOBN(0xd49ac6fa, 0x819c01f6),
-            TOBN(0x6ddaa6bd, 0x3c0fbd54), TOBN(0x91743068, 0x8049a2cf),
-            TOBN(0xd67f981e, 0xaff2ef81), TOBN(0xc3654d35, 0x2818ae80),
-            TOBN(0x81d05044, 0x1b2aa892), TOBN(0x2db067bf, 0x3d099328),
-            TOBN(0xe7c79e86, 0x703dcc97), TOBN(0xe66f9b37, 0xe133e215),
-            TOBN(0xcdf119a6, 0xe39a7a5c), TOBN(0x47c60de3, 0x876f1b61),
-            TOBN(0x6e405939, 0xd860f1b2), TOBN(0x3e9a1dbc, 0xf5ed4d4a),
-            TOBN(0x3f23619e, 0xc9b6bcbd), TOBN(0x5ee790cf, 0x734e4497),
-            TOBN(0xf0a834b1, 0x5bdaf9bb), TOBN(0x02cedda7, 0x4ca295f0),
-            TOBN(0x4619aa2b, 0xcb8e378c), TOBN(0xe5613244, 0xcc987ea4),
-            TOBN(0x0bc022cc, 0x76b23a50), TOBN(0x4a2793ad, 0x0a6c21ce),
-            TOBN(0x38328780, 0x89cac3f5), TOBN(0x29176f1b, 0xcba26d56),
-            TOBN(0x06296187, 0x4f6f59eb), TOBN(0x86e9bca9, 0x8bdc658e),
-            TOBN(0x2ca9c4d3, 0x57e30402), TOBN(0x5438b216, 0x516a09bb),
-            TOBN(0x0a6a063c, 0x7672765a), TOBN(0x37a3ce64, 0x0547b9bf),
-            TOBN(0x42c099c8, 0x98b1a633), TOBN(0xb5ab800d, 0x05ee6961),
-            TOBN(0xf1963f59, 0x11a5acd6), TOBN(0xbaee6157, 0x46201063),
-            TOBN(0x36d9a649, 0xa596210a), TOBN(0xaed04363, 0x1ba7138c),
-            TOBN(0xcf817d1c, 0xa4a82b76), TOBN(0x5586960e, 0xf3806be9),
-            TOBN(0x7ab67c89, 0x09dc6bb5), TOBN(0x52ace7a0, 0x114fe7eb),
-            TOBN(0xcd987618, 0xcbbc9b70), TOBN(0x4f06fd5a, 0x604ca5e1),
-            TOBN(0x90af14ca, 0x6dbde133), TOBN(0x1afe4322, 0x948a3264),
-            TOBN(0xa70d2ca6, 0xc44b2c6c), TOBN(0xab726799, 0x0ef87dfe),
-            TOBN(0x310f64dc, 0x2e696377), TOBN(0x49b42e68, 0x4c8126a0),
-            TOBN(0x0ea444c3, 0xcea0b176), TOBN(0x53a8ddf7, 0xcb269182),
-            TOBN(0xf3e674eb, 0xbbba9dcb), TOBN(0x0d2878a8, 0xd8669d33),
-            TOBN(0x04b935d5, 0xd019b6a3), TOBN(0xbb5cf88e, 0x406f1e46),
-            TOBN(0xa1912d16, 0x5b57c111), TOBN(0x9803fc21, 0x19ebfd78),
-            TOBN(0x4f231c9e, 0xc07764a9), TOBN(0xd93286ee, 0xb75bd055),
-            TOBN(0x83a9457d, 0x8ee6c9de), TOBN(0x04695915, 0x6087ec90),
-            TOBN(0x14c6dd8a, 0x58d6cd46), TOBN(0x9cb633b5, 0x8e6634d2),
-            TOBN(0xc1305047, 0xf81bc328), TOBN(0x12ede0e2, 0x26a177e5),
-            TOBN(0x332cca62, 0x065a6f4f), TOBN(0xc3a47ecd, 0x67be487b),
-            TOBN(0x741eb187, 0x0f47ed1c), TOBN(0x99e66e58, 0xe7598b14),
-            TOBN(0x6f0544ca, 0x63d0ff12), TOBN(0xe5efc784, 0xb610a05f),
-            TOBN(0xf72917b1, 0x7cad7b47), TOBN(0x3ff6ea20, 0xf2cac0c0),
-            TOBN(0xcc23791b, 0xf21db8b7), TOBN(0x7dac70b1, 0xd7d93565),
-            TOBN(0x682cda1d, 0x694bdaad), TOBN(0xeb88bb8c, 0x1023516d),
-            TOBN(0xc4c634b4, 0xdfdbeb1b), TOBN(0x22f5ca72, 0xb4ee4dea),
-            TOBN(0x1045a368, 0xe6524821), TOBN(0xed9e8a3f, 0x052b18b2),
-            TOBN(0x9b7f2cb1, 0xb961f49a), TOBN(0x7fee2ec1, 0x7b009670),
-            TOBN(0x350d8754, 0x22507a6d), TOBN(0x561bd711, 0x4db55f1d),
-            TOBN(0x4c189ccc, 0x320bbcaf), TOBN(0x568434cf, 0xdf1de48c),
-            TOBN(0x6af1b00e, 0x0fa8f128), TOBN(0xf0ba9d02, 0x8907583c),
-            TOBN(0x735a4004, 0x32ff9f60), TOBN(0x3dd8e4b6, 0xc25dcf33),
-            TOBN(0xf2230f16, 0x42c74cef), TOBN(0xd8117623, 0x013fa8ad),
-            TOBN(0x36822876, 0xf51fe76e), TOBN(0x8a6811cc, 0x11d62589),
-            TOBN(0xc3fc7e65, 0x46225718), TOBN(0xb7df2c9f, 0xc82fdbcd),
-            TOBN(0x3b1d4e52, 0xdd7b205b), TOBN(0xb6959478, 0x47a2e414),
-            TOBN(0x05e4d793, 0xefa91148), TOBN(0xb47ed446, 0xfd2e9675),
-            TOBN(0x1a7098b9, 0x04c9d9bf), TOBN(0x661e2881, 0x1b793048),
-            TOBN(0xb1a16966, 0xb01ee461), TOBN(0xbc521308, 0x2954746f),
-            TOBN(0xc909a0fc, 0x2477de50), TOBN(0xd80bb41c, 0x7dbd51ef),
-            TOBN(0xa85be7ec, 0x53294905), TOBN(0x6d465b18, 0x83958f97),
-            TOBN(0x16f6f330, 0xfb6840fd), TOBN(0xfaaeb214, 0x3401e6c8),
-            TOBN(0xaf83d30f, 0xccb5b4f8), TOBN(0x22885739, 0x266dec4b),
-            TOBN(0x51b4367c, 0x7bc467df), TOBN(0x926562e3, 0xd842d27a),
-            TOBN(0xdfcb6614, 0x0fea14a6), TOBN(0xeb394dae, 0xf2734cd9),
-            TOBN(0x3eeae5d2, 0x11c0be98), TOBN(0xb1e6ed11, 0x814e8165),
-            TOBN(0x191086bc, 0xe52bce1c), TOBN(0x14b74cc6, 0xa75a04da),
-            TOBN(0x63cf1186, 0x8c060985), TOBN(0x071047de, 0x2dbd7f7c),
-            TOBN(0x4e433b8b, 0xce0942ca), TOBN(0xecbac447, 0xd8fec61d),
-            TOBN(0x8f0ed0e2, 0xebf3232f), TOBN(0xfff80f9e, 0xc52a2edd),
-            TOBN(0xad9ab433, 0x75b55fdb), TOBN(0x73ca7820, 0xe42e0c11),
-            TOBN(0x6dace0a0, 0xe6251b46), TOBN(0x89bc6b5c, 0x4c0d932d),
-            TOBN(0x3438cd77, 0x095da19a), TOBN(0x2f24a939, 0x8d48bdfb),
-            TOBN(0x99b47e46, 0x766561b7), TOBN(0x736600e6, 0x0ed0322a),
-            TOBN(0x06a47cb1, 0x638e1865), TOBN(0x927c1c2d, 0xcb136000),
-            TOBN(0x29542337, 0x0cc5df69), TOBN(0x99b37c02, 0x09d649a9),
-            TOBN(0xc5f0043c, 0x6aefdb27), TOBN(0x6cdd9987, 0x1be95c27),
-            TOBN(0x69850931, 0x390420d2), TOBN(0x299c40ac, 0x0983efa4),
-            TOBN(0x3a05e778, 0xaf39aead), TOBN(0x84274408, 0x43a45193),
-            TOBN(0x6bcd0fb9, 0x91a711a0), TOBN(0x461592c8, 0x9f52ab17),
-            TOBN(0xb49302b4, 0xda3c6ed6), TOBN(0xc51fddc7, 0x330d7067),
-            TOBN(0x94babeb6, 0xda50d531), TOBN(0x521b840d, 0xa6a7b9da),
-            TOBN(0x5305151e, 0x404bdc89), TOBN(0x1bcde201, 0xd0d07449),
-            TOBN(0xf427a78b, 0x3b76a59a), TOBN(0xf84841ce, 0x07791a1b),
-            TOBN(0xebd314be, 0xbf91ed1c), TOBN(0x8e61d34c, 0xbf172943),
-            TOBN(0x1d5dc451, 0x5541b892), TOBN(0xb186ee41, 0xfc9d9e54),
-            TOBN(0x9d9f345e, 0xd5bf610d), TOBN(0x3e7ba65d, 0xf6acca9f),
-            TOBN(0x9dda787a, 0xa8369486), TOBN(0x09f9dab7, 0x8eb5ba53),
-            TOBN(0x5afb2033, 0xd6481bc3), TOBN(0x76f4ce30, 0xafa62104),
-            TOBN(0xa8fa00cf, 0xf4f066b5), TOBN(0x89ab5143, 0x461dafc2),
-            TOBN(0x44339ed7, 0xa3389998), TOBN(0x2ff862f1, 0xbc214903),
-            TOBN(0x2c88f985, 0xb05556e3), TOBN(0xcd96058e, 0x3467081e),
-            TOBN(0x7d6a4176, 0xedc637ea), TOBN(0xe1743d09, 0x36a5acdc),
-            TOBN(0x66fd72e2, 0x7eb37726), TOBN(0xf7fa264e, 0x1481a037),
-            TOBN(0x9fbd3bde, 0x45f4aa79), TOBN(0xed1e0147, 0x767c3e22),
-            TOBN(0x7621f979, 0x82e7abe2), TOBN(0x19eedc72, 0x45f633f8),
-            TOBN(0xe69b155e, 0x6137bf3a), TOBN(0xa0ad13ce, 0x414ee94e),
-            TOBN(0x93e3d524, 0x1c0e651a), TOBN(0xab1a6e2a, 0x02ce227e),
-            TOBN(0xe7af1797, 0x4ab27eca), TOBN(0x245446de, 0xbd444f39),
-            TOBN(0x59e22a21, 0x56c07613), TOBN(0x43deafce, 0xf4275498),
-            TOBN(0x10834ccb, 0x67fd0946), TOBN(0xa75841e5, 0x47406edf),
-            TOBN(0xebd6a677, 0x7b0ac93d), TOBN(0xa6e37b0d, 0x78f5e0d7),
-            TOBN(0x2516c096, 0x76f5492b), TOBN(0x1e4bf888, 0x9ac05f3a),
-            TOBN(0xcdb42ce0, 0x4df0ba2b), TOBN(0x935d5cfd, 0x5062341b),
-            TOBN(0x8a303333, 0x82acac20), TOBN(0x429438c4, 0x5198b00e),
-            TOBN(0x1d083bc9, 0x049d33fa), TOBN(0x58b82dda, 0x946f67ff),
-            TOBN(0xac3e2db8, 0x67a1d6a3), TOBN(0x62e6bead, 0x1798aac8),
-            TOBN(0xfc85980f, 0xde46c58c), TOBN(0xa7f69379, 0x69c8d7be),
-            TOBN(0x23557927, 0x837b35ec), TOBN(0x06a933d8, 0xe0790c0c),
-            TOBN(0x827c0e9b, 0x077ff55d), TOBN(0x53977798, 0xbb26e680),
-            TOBN(0x59530874, 0x1d9cb54f), TOBN(0xcca3f449, 0x4aac53ef),
-            TOBN(0x11dc5c87, 0xa07eda0f), TOBN(0xc138bccf, 0xfd6400c8),
-            TOBN(0x549680d3, 0x13e5da72), TOBN(0xc93eed82, 0x4540617e),
-            TOBN(0xfd3db157, 0x4d0b75c0), TOBN(0x9716eb42, 0x6386075b),
-            TOBN(0x0639605c, 0x817b2c16), TOBN(0x09915109, 0xf1e4f201),
-            TOBN(0x35c9a928, 0x5cca6c3b), TOBN(0xb25f7d1a, 0x3505c900),
-            TOBN(0xeb9f7d20, 0x630480c4), TOBN(0xc3c7b8c6, 0x2a1a501c),
-            TOBN(0x3f99183c, 0x5a1f8e24), TOBN(0xfdb118fa, 0x9dd255f0),
-            TOBN(0xb9b18b90, 0xc27f62a6), TOBN(0xe8f732f7, 0x396ec191),
-            TOBN(0x524a2d91, 0x0be786ab), TOBN(0x5d32adef, 0x0ac5a0f5),
-            TOBN(0x9b53d4d6, 0x9725f694), TOBN(0x032a76c6, 0x0510ba89),
-            TOBN(0x840391a3, 0xebeb1544), TOBN(0x44b7b88c, 0x3ed73ac3),
-            TOBN(0xd24bae7a, 0x256cb8b3), TOBN(0x7ceb151a, 0xe394cb12),
-            TOBN(0xbd6b66d0, 0x5bc1e6a8), TOBN(0xec70cecb, 0x090f07bf),
-            TOBN(0x270644ed, 0x7d937589), TOBN(0xee9e1a3d, 0x5f1dccfe),
-            TOBN(0xb0d40a84, 0x745b98d2), TOBN(0xda429a21, 0x2556ed40),
-            TOBN(0xf676eced, 0x85148cb9), TOBN(0x5a22d40c, 0xded18936),
-            TOBN(0x3bc4b9e5, 0x70e8a4ce), TOBN(0xbfd1445b, 0x9eae0379),
-            TOBN(0xf23f2c0c, 0x1a0bd47e), TOBN(0xa9c0bb31, 0xe1845531),
-            TOBN(0x9ddc4d60, 0x0a4c3f6b), TOBN(0xbdfaad79, 0x2c15ef44),
-            TOBN(0xce55a236, 0x7f484acc), TOBN(0x08653ca7, 0x055b1f15),
-            TOBN(0x2efa8724, 0x538873a3), TOBN(0x09299e5d, 0xace1c7e7),
-            TOBN(0x07afab66, 0xade332ba), TOBN(0x9be1fdf6, 0x92dd71b7),
-            TOBN(0xa49b5d59, 0x5758b11c), TOBN(0x0b852893, 0xc8654f40),
-            TOBN(0xb63ef6f4, 0x52379447), TOBN(0xd4957d29, 0x105e690c),
-            TOBN(0x7d484363, 0x646559b0), TOBN(0xf4a8273c, 0x49788a8e),
-            TOBN(0xee406cb8, 0x34ce54a9), TOBN(0x1e1c260f, 0xf86fda9b),
-            TOBN(0xe150e228, 0xcf6a4a81), TOBN(0x1fa3b6a3, 0x1b488772),
-            TOBN(0x1e6ff110, 0xc5a9c15b), TOBN(0xc6133b91, 0x8ad6aa47),
-            TOBN(0x8ac5d55c, 0x9dffa978), TOBN(0xba1d1c1d, 0x5f3965f2),
-            TOBN(0xf969f4e0, 0x7732b52f), TOBN(0xfceecdb5, 0xa5172a07),
-            TOBN(0xb0120a5f, 0x10f2b8f5), TOBN(0xc83a6cdf, 0x5c4c2f63),
-            TOBN(0x4d47a491, 0xf8f9c213), TOBN(0xd9e1cce5, 0xd3f1bbd5),
-            TOBN(0x0d91bc7c, 0xaba7e372), TOBN(0xfcdc74c8, 0xdfd1a2db),
-            TOBN(0x05efa800, 0x374618e5), TOBN(0x11216969, 0x15a7925e),
-            TOBN(0xd4c89823, 0xf6021c5d), TOBN(0x880d5e84, 0xeff14423),
-            TOBN(0x6523bc5a, 0x6dcd1396), TOBN(0xd1acfdfc, 0x113c978b),
-            TOBN(0xb0c164e8, 0xbbb66840), TOBN(0xf7f4301e, 0x72b58459),
-            TOBN(0xc29ad4a6, 0xa638e8ec), TOBN(0xf5ab8961, 0x46b78699),
-            TOBN(0x9dbd7974, 0x0e954750), TOBN(0x0121de88, 0x64f9d2c6),
-            TOBN(0x2e597b42, 0xd985232e), TOBN(0x55b6c3c5, 0x53451777),
-            TOBN(0xbb53e547, 0x519cb9fb), TOBN(0xf134019f, 0x8428600d),
-            TOBN(0x5a473176, 0xe081791a), TOBN(0x2f3e2263, 0x35fb0c08),
-            TOBN(0xb28c3017, 0x73d273b0), TOBN(0xccd21076, 0x7721ef9a),
-            TOBN(0x054cc292, 0xb650dc39), TOBN(0x662246de, 0x6188045e),
-            TOBN(0x904b52fa, 0x6b83c0d1), TOBN(0xa72df267, 0x97e9cd46),
-            TOBN(0x886b43cd, 0x899725e4), TOBN(0x2b651688, 0xd849ff22),
-            TOBN(0x60479b79, 0x02f34533), TOBN(0x5e354c14, 0x0c77c148),
-            TOBN(0xb4bb7581, 0xa8537c78), TOBN(0x188043d7, 0xefe1495f),
-            TOBN(0x9ba12f42, 0x8c1d5026), TOBN(0x2e0c8a26, 0x93d4aaab),
-            TOBN(0xbdba7b8b, 0xaa57c450), TOBN(0x140c9ad6, 0x9bbdafef),
-            TOBN(0x2067aa42, 0x25ac0f18), TOBN(0xf7b1295b, 0x04d1fbf3),
-            TOBN(0x14829111, 0xa4b04824), TOBN(0x2ce3f192, 0x33bd5e91),
-            TOBN(0x9c7a1d55, 0x8f2e1b72), TOBN(0xfe932286, 0x302aa243),
-            TOBN(0x497ca7b4, 0xd4be9554), TOBN(0xb8e821b8, 0xe0547a6e),
-            TOBN(0xfb2838be, 0x67e573e0), TOBN(0x05891db9, 0x4084c44b),
-            TOBN(0x91311373, 0x96c1c2c5), TOBN(0x6aebfa3f, 0xd958444b),
-            TOBN(0xac9cdce9, 0xe56e55c1), TOBN(0x7148ced3, 0x2caa46d0),
-            TOBN(0x2e10c7ef, 0xb61fe8eb), TOBN(0x9fd835da, 0xff97cf4d),
-        },
-        {
-            TOBN(0xa36da109, 0x081e9387), TOBN(0xfb9780d7, 0x8c935828),
-            TOBN(0xd5940332, 0xe540b015), TOBN(0xc9d7b51b, 0xe0f466fa),
-            TOBN(0xfaadcd41, 0xd6d9f671), TOBN(0xba6c1e28, 0xb1a2ac17),
-            TOBN(0x066a7833, 0xed201e5f), TOBN(0x19d99719, 0xf90f462b),
-            TOBN(0xf431f462, 0x060b5f61), TOBN(0xa56f46b4, 0x7bd057c2),
-            TOBN(0x348dca6c, 0x47e1bf65), TOBN(0x9a38783e, 0x41bcf1ff),
-            TOBN(0x7a5d33a9, 0xda710718), TOBN(0x5a779987, 0x2e0aeaf6),
-            TOBN(0xca87314d, 0x2d29d187), TOBN(0xfa0edc3e, 0xc687d733),
-            TOBN(0x9df33621, 0x6a31e09b), TOBN(0xde89e44d, 0xc1350e35),
-            TOBN(0x29214871, 0x4ca0cf52), TOBN(0xdf379672, 0x0b88a538),
-            TOBN(0xc92a510a, 0x2591d61b), TOBN(0x79aa87d7, 0x585b447b),
-            TOBN(0xf67db604, 0xe5287f77), TOBN(0x1697c8bf, 0x5efe7a80),
-            TOBN(0x1c894849, 0xcb198ac7), TOBN(0xa884a93d, 0x0f264665),
-            TOBN(0x2da964ef, 0x9b200678), TOBN(0x3c351b87, 0x009834e6),
-            TOBN(0xafb2ef9f, 0xe2c4b44b), TOBN(0x580f6c47, 0x3326790c),
-            TOBN(0xb8480521, 0x0b02264a), TOBN(0x8ba6f9e2, 0x42a194e2),
-            TOBN(0xfc87975f, 0x8fb54738), TOBN(0x35160788, 0x27c3ead3),
-            TOBN(0x834116d2, 0xb74a085a), TOBN(0x53c99a73, 0xa62fe996),
-            TOBN(0x87585be0, 0x5b81c51b), TOBN(0x925bafa8, 0xbe0852b7),
-            TOBN(0x76a4fafd, 0xa84d19a7), TOBN(0x39a45982, 0x585206d4),
-            TOBN(0x499b6ab6, 0x5eb03c0e), TOBN(0xf19b7954, 0x72bc3fde),
-            TOBN(0xa86b5b9c, 0x6e3a80d2), TOBN(0xe4377508, 0x6d42819f),
-            TOBN(0xc1663650, 0xbb3ee8a3), TOBN(0x75eb14fc, 0xb132075f),
-            TOBN(0xa8ccc906, 0x7ad834f6), TOBN(0xea6a2474, 0xe6e92ffd),
-            TOBN(0x9d72fd95, 0x0f8d6758), TOBN(0xcb84e101, 0x408c07dd),
-            TOBN(0xb9114bfd, 0xa5e23221), TOBN(0x358b5fe2, 0xe94e742c),
-            TOBN(0x1c0577ec, 0x95f40e75), TOBN(0xf0155451, 0x3d73f3d6),
-            TOBN(0x9d55cd67, 0xbd1b9b66), TOBN(0x63e86e78, 0xaf8d63c7),
-            TOBN(0x39d934ab, 0xd3c095f1), TOBN(0x04b261be, 0xe4b76d71),
-            TOBN(0x1d2e6970, 0xe73e6984), TOBN(0x879fb23b, 0x5e5fcb11),
-            TOBN(0x11506c72, 0xdfd75490), TOBN(0x3a97d085, 0x61bcf1c1),
-            TOBN(0x43201d82, 0xbf5e7007), TOBN(0x7f0ac52f, 0x798232a7),
-            TOBN(0x2715cbc4, 0x6eb564d4), TOBN(0x8d6c752c, 0x9e570e29),
-            TOBN(0xf80247c8, 0x9ef5fd5d), TOBN(0xc3c66b46, 0xd53eb514),
-            TOBN(0x9666b401, 0x0f87de56), TOBN(0xce62c06f, 0xc6c603b5),
-            TOBN(0xae7b4c60, 0x7e4fc942), TOBN(0x38ac0b77, 0x663a9c19),
-            TOBN(0xcb4d20ee, 0x4b049136), TOBN(0x8b63bf12, 0x356a4613),
-            TOBN(0x1221aef6, 0x70e08128), TOBN(0xe62d8c51, 0x4acb6b16),
-            TOBN(0x71f64a67, 0x379e7896), TOBN(0xb25237a2, 0xcafd7fa5),
-            TOBN(0xf077bd98, 0x3841ba6a), TOBN(0xc4ac0244, 0x3cd16e7e),
-            TOBN(0x548ba869, 0x21fea4ca), TOBN(0xd36d0817, 0xf3dfdac1),
-            TOBN(0x09d8d71f, 0xf4685faf), TOBN(0x8eff66be, 0xc52c459a),
-            TOBN(0x182faee7, 0x0b57235e), TOBN(0xee3c39b1, 0x0106712b),
-            TOBN(0x5107331f, 0xc0fcdcb0), TOBN(0x669fb9dc, 0xa51054ba),
-            TOBN(0xb25101fb, 0x319d7682), TOBN(0xb0293129, 0x0a982fee),
-            TOBN(0x51c1c9b9, 0x0261b344), TOBN(0x0e008c5b, 0xbfd371fa),
-            TOBN(0xd866dd1c, 0x0278ca33), TOBN(0x666f76a6, 0xe5aa53b1),
-            TOBN(0xe5cfb779, 0x6013a2cf), TOBN(0x1d3a1aad, 0xa3521836),
-            TOBN(0xcedd2531, 0x73faa485), TOBN(0xc8ee6c4f, 0xc0a76878),
-            TOBN(0xddbccfc9, 0x2a11667d), TOBN(0x1a418ea9, 0x1c2f695a),
-            TOBN(0xdb11bd92, 0x51f73971), TOBN(0x3e4b3c82, 0xda2ed89f),
-            TOBN(0x9a44f3f4, 0xe73e0319), TOBN(0xd1e3de0f, 0x303431af),
-            TOBN(0x3c5604ff, 0x50f75f9c), TOBN(0x1d8eddf3, 0x7e752b22),
-            TOBN(0x0ef074dd, 0x3c9a1118), TOBN(0xd0ffc172, 0xccb86d7b),
-            TOBN(0xabd1ece3, 0x037d90f2), TOBN(0xe3f307d6, 0x6055856c),
-            TOBN(0x422f9328, 0x7e4c6daf), TOBN(0x902aac66, 0x334879a0),
-            TOBN(0xb6a1e7bf, 0x94cdfade), TOBN(0x6c97e1ed, 0x7fc6d634),
-            TOBN(0x662ad24d, 0xa2fb63f8), TOBN(0xf81be1b9, 0xa5928405),
-            TOBN(0x86d765e4, 0xd14b4206), TOBN(0xbecc2e0e, 0x8fa0db65),
-            TOBN(0xa28838e0, 0xb17fc76c), TOBN(0xe49a602a, 0xe37cf24e),
-            TOBN(0x76b4131a, 0x567193ec), TOBN(0xaf3c305a, 0xe5f6e70b),
-            TOBN(0x9587bd39, 0x031eebdd), TOBN(0x5709def8, 0x71bbe831),
-            TOBN(0x57059983, 0x0eb2b669), TOBN(0x4d80ce1b, 0x875b7029),
-            TOBN(0x838a7da8, 0x0364ac16), TOBN(0x2f431d23, 0xbe1c83ab),
-            TOBN(0xe56812a6, 0xf9294dd3), TOBN(0xb448d01f, 0x9b4b0d77),
-            TOBN(0xf3ae6061, 0x04e8305c), TOBN(0x2bead645, 0x94d8c63e),
-            TOBN(0x0a85434d, 0x84fd8b07), TOBN(0x537b983f, 0xf7a9dee5),
-            TOBN(0xedcc5f18, 0xef55bd85), TOBN(0x2041af62, 0x21c6cf8b),
-            TOBN(0x8e52874c, 0xb940c71e), TOBN(0x211935a9, 0xdb5f4b3a),
-            TOBN(0x94350492, 0x301b1dc3), TOBN(0x33d2646d, 0x29958620),
-            TOBN(0x16b0d64b, 0xef911404), TOBN(0x9d1f25ea, 0x9a3c5ef4),
-            TOBN(0x20f200eb, 0x4a352c78), TOBN(0x43929f2c, 0x4bd0b428),
-            TOBN(0xa5656667, 0xc7196e29), TOBN(0x7992c2f0, 0x9391be48),
-            TOBN(0xaaa97cbd, 0x9ee0cd6e), TOBN(0x51b0310c, 0x3dc8c9bf),
-            TOBN(0x237f8acf, 0xdd9f22cb), TOBN(0xbb1d81a1, 0xb585d584),
-            TOBN(0x8d5d85f5, 0x8c416388), TOBN(0x0d6e5a5a, 0x42fe474f),
-            TOBN(0xe7812766, 0x38235d4e), TOBN(0x1c62bd67, 0x496e3298),
-            TOBN(0x8378660c, 0x3f175bc8), TOBN(0x4d04e189, 0x17afdd4d),
-            TOBN(0x32a81601, 0x85a8068c), TOBN(0xdb58e4e1, 0x92b29a85),
-            TOBN(0xe8a65b86, 0xc70d8a3b), TOBN(0x5f0e6f4e, 0x98a0403b),
-            TOBN(0x08129684, 0x69ed2370), TOBN(0x34dc30bd, 0x0871ee26),
-            TOBN(0x3a5ce948, 0x7c9c5b05), TOBN(0x7d487b80, 0x43a90c87),
-            TOBN(0x4089ba37, 0xdd0e7179), TOBN(0x45f80191, 0xb4041811),
-            TOBN(0x1c3e1058, 0x98747ba5), TOBN(0x98c4e13a, 0x6e1ae592),
-            TOBN(0xd44636e6, 0xe82c9f9e), TOBN(0x711db87c, 0xc33a1043),
-            TOBN(0x6f431263, 0xaa8aec05), TOBN(0x43ff120d, 0x2744a4aa),
-            TOBN(0xd3bd892f, 0xae77779b), TOBN(0xf0fe0cc9, 0x8cdc9f82),
-            TOBN(0xca5f7fe6, 0xf1c5b1bc), TOBN(0xcc63a682, 0x44929a72),
-            TOBN(0xc7eaba0c, 0x09dbe19a), TOBN(0x2f3585ad, 0x6b5c73c2),
-            TOBN(0x8ab8924b, 0x0ae50c30), TOBN(0x17fcd27a, 0x638b30ba),
-            TOBN(0xaf414d34, 0x10b3d5a5), TOBN(0x09c107d2, 0x2a9accf1),
-            TOBN(0x15dac49f, 0x946a6242), TOBN(0xaec3df2a, 0xd707d642),
-            TOBN(0x2c2492b7, 0x3f894ae0), TOBN(0xf59df3e5, 0xb75f18ce),
-            TOBN(0x7cb740d2, 0x8f53cad0), TOBN(0x3eb585fb, 0xc4f01294),
-            TOBN(0x17da0c86, 0x32c7f717), TOBN(0xeb8c795b, 0xaf943f4c),
-            TOBN(0x4ee23fb5, 0xf67c51d2), TOBN(0xef187575, 0x68889949),
-            TOBN(0xa6b4bdb2, 0x0389168b), TOBN(0xc4ecd258, 0xea577d03),
-            TOBN(0x3a63782b, 0x55743082), TOBN(0x6f678f4c, 0xc72f08cd),
-            TOBN(0x553511cf, 0x65e58dd8), TOBN(0xd53b4e3e, 0xd402c0cd),
-            TOBN(0x37de3e29, 0xa037c14c), TOBN(0x86b6c516, 0xc05712aa),
-            TOBN(0x2834da3e, 0xb38dff6f), TOBN(0xbe012c52, 0xea636be8),
-            TOBN(0x292d238c, 0x61dd37f8), TOBN(0x0e54523f, 0x8f8142db),
-            TOBN(0xe31eb436, 0x036a05d8), TOBN(0x83e3cdff, 0x1e93c0ff),
-            TOBN(0x3fd2fe0f, 0x50821ddf), TOBN(0xc8e19b0d, 0xff9eb33b),
-            TOBN(0xc8cc943f, 0xb569a5fe), TOBN(0xad0090d4, 0xd4342d75),
-            TOBN(0x82090b4b, 0xcaeca000), TOBN(0xca39687f, 0x1bd410eb),
-            TOBN(0xe7bb0df7, 0x65959d77), TOBN(0x39d78218, 0x9c964999),
-            TOBN(0xd87f62e8, 0xb2415451), TOBN(0xe5efb774, 0xbed76108),
-            TOBN(0x3ea011a4, 0xe822f0d0), TOBN(0xbc647ad1, 0x5a8704f8),
-            TOBN(0xbb315b35, 0x50c6820f), TOBN(0x863dec3d, 0xb7e76bec),
-            TOBN(0x01ff5d3a, 0xf017bfc7), TOBN(0x20054439, 0x976b8229),
-            TOBN(0x067fca37, 0x0bbd0d3b), TOBN(0xf63dde64, 0x7f5e3d0f),
-            TOBN(0x22dbefb3, 0x2a4c94e9), TOBN(0xafbff0fe, 0x96f8278a),
-            TOBN(0x80aea0b1, 0x3503793d), TOBN(0xb2238029, 0x5f06cd29),
-            TOBN(0x65703e57, 0x8ec3feca), TOBN(0x06c38314, 0x393e7053),
-            TOBN(0xa0b751eb, 0x7c6734c4), TOBN(0xd2e8a435, 0xc59f0f1e),
-            TOBN(0x147d9052, 0x5e9ca895), TOBN(0x2f4dd31e, 0x972072df),
-            TOBN(0xa16fda8e, 0xe6c6755c), TOBN(0xc66826ff, 0xcf196558),
-            TOBN(0x1f1a76a3, 0x0cf43895), TOBN(0xa9d604e0, 0x83c3097b),
-            TOBN(0xe1908309, 0x66390e0e), TOBN(0xa50bf753, 0xb3c85eff),
-            TOBN(0x0696bdde, 0xf6a70251), TOBN(0x548b801b, 0x3c6ab16a),
-            TOBN(0x37fcf704, 0xa4d08762), TOBN(0x090b3def, 0xdff76c4e),
-            TOBN(0x87e8cb89, 0x69cb9158), TOBN(0x44a90744, 0x995ece43),
-            TOBN(0xf85395f4, 0x0ad9fbf5), TOBN(0x49b0f6c5, 0x4fb0c82d),
-            TOBN(0x75d9bc15, 0xadf7cccf), TOBN(0x81a3e5d6, 0xdfa1e1b0),
-            TOBN(0x8c39e444, 0x249bc17e), TOBN(0xf37dccb2, 0x8ea7fd43),
-            TOBN(0xda654873, 0x907fba12), TOBN(0x35daa6da, 0x4a372904),
-            TOBN(0x0564cfc6, 0x6283a6c5), TOBN(0xd09fa4f6, 0x4a9395bf),
-            TOBN(0x688e9ec9, 0xaeb19a36), TOBN(0xd913f1ce, 0xc7bfbfb4),
-            TOBN(0x797b9a3c, 0x61c2faa6), TOBN(0x2f979bec, 0x6a0a9c12),
-            TOBN(0xb5969d0f, 0x359679ec), TOBN(0xebcf523d, 0x079b0460),
-            TOBN(0xfd6b0008, 0x10fab870), TOBN(0x3f2edcda, 0x9373a39c),
-            TOBN(0x0d64f9a7, 0x6f568431), TOBN(0xf848c27c, 0x02f8898c),
-            TOBN(0xf418ade1, 0x260b5bd5), TOBN(0xc1f3e323, 0x6973dee8),
-            TOBN(0x46e9319c, 0x26c185dd), TOBN(0x6d85b7d8, 0x546f0ac4),
-            TOBN(0x427965f2, 0x247f9d57), TOBN(0xb519b636, 0xb0035f48),
-            TOBN(0x6b6163a9, 0xab87d59c), TOBN(0xff9f58c3, 0x39caaa11),
-            TOBN(0x4ac39cde, 0x3177387b), TOBN(0x5f6557c2, 0x873e77f9),
-            TOBN(0x67504006, 0x36a83041), TOBN(0x9b1c96ca, 0x75ef196c),
-            TOBN(0xf34283de, 0xb08c7940), TOBN(0x7ea09644, 0x1128c316),
-            TOBN(0xb510b3b5, 0x6aa39dff), TOBN(0x59b43da2, 0x9f8e4d8c),
-            TOBN(0xa8ce31fd, 0x9e4c4b9f), TOBN(0x0e20be26, 0xc1303c01),
-            TOBN(0x18187182, 0xe8ee47c9), TOBN(0xd9687cdb, 0x7db98101),
-            TOBN(0x7a520e4d, 0xa1e14ff6), TOBN(0x429808ba, 0x8836d572),
-            TOBN(0xa37ca60d, 0x4944b663), TOBN(0xf901f7a9, 0xa3f91ae5),
-            TOBN(0xe4e3e76e, 0x9e36e3b1), TOBN(0x9aa219cf, 0x29d93250),
-            TOBN(0x347fe275, 0x056a2512), TOBN(0xa4d643d9, 0xde65d95c),
-            TOBN(0x9669d396, 0x699fc3ed), TOBN(0xb598dee2, 0xcf8c6bbe),
-            TOBN(0x682ac1e5, 0xdda9e5c6), TOBN(0x4e0d3c72, 0xcaa9fc95),
-            TOBN(0x17faaade, 0x772bea44), TOBN(0x5ef8428c, 0xab0009c8),
-            TOBN(0xcc4ce47a, 0x460ff016), TOBN(0xda6d12bf, 0x725281cb),
-            TOBN(0x44c67848, 0x0223aad2), TOBN(0x6e342afa, 0x36256e28),
-            TOBN(0x1400bb0b, 0x93a37c04), TOBN(0x62b1bc9b, 0xdd10bd96),
-            TOBN(0x7251adeb, 0x0dac46b7), TOBN(0x7d33b92e, 0x7be4ef51),
-            TOBN(0x28b2a94b, 0xe61fa29a), TOBN(0x4b2be13f, 0x06422233),
-            TOBN(0x36d6d062, 0x330d8d37), TOBN(0x5ef80e1e, 0xb28ca005),
-            TOBN(0x174d4699, 0x6d16768e), TOBN(0x9fc4ff6a, 0x628bf217),
-            TOBN(0x77705a94, 0x154e490d), TOBN(0x9d96dd28, 0x8d2d997a),
-            TOBN(0x77e2d9d8, 0xce5d72c4), TOBN(0x9d06c5a4, 0xc11c714f),
-            TOBN(0x02aa5136, 0x79e4a03e), TOBN(0x1386b3c2, 0x030ff28b),
-            TOBN(0xfe82e8a6, 0xfb283f61), TOBN(0x7df203e5, 0xf3abc3fb),
-            TOBN(0xeec7c351, 0x3a4d3622), TOBN(0xf7d17dbf, 0xdf762761),
-            TOBN(0xc3956e44, 0x522055f0), TOBN(0xde3012db, 0x8fa748db),
-            TOBN(0xca9fcb63, 0xbf1dcc14), TOBN(0xa56d9dcf, 0xbe4e2f3a),
-            TOBN(0xb86186b6, 0x8bcec9c2), TOBN(0x7cf24df9, 0x680b9f06),
-            TOBN(0xc46b45ea, 0xc0d29281), TOBN(0xfff42bc5, 0x07b10e12),
-            TOBN(0x12263c40, 0x4d289427), TOBN(0x3d5f1899, 0xb4848ec4),
-            TOBN(0x11f97010, 0xd040800c), TOBN(0xb4c5f529, 0x300feb20),
-            TOBN(0xcc543f8f, 0xde94fdcb), TOBN(0xe96af739, 0xc7c2f05e),
-            TOBN(0xaa5e0036, 0x882692e1), TOBN(0x09c75b68, 0x950d4ae9),
-            TOBN(0x62f63df2, 0xb5932a7a), TOBN(0x2658252e, 0xde0979ad),
-            TOBN(0x2a19343f, 0xb5e69631), TOBN(0x718c7501, 0x525b666b),
-            TOBN(0x26a42d69, 0xea40dc3a), TOBN(0xdc84ad22, 0xaecc018f),
-            TOBN(0x25c36c7b, 0x3270f04a), TOBN(0x46ba6d47, 0x50fa72ed),
-            TOBN(0x6c37d1c5, 0x93e58a8e), TOBN(0xa2394731, 0x120c088c),
-            TOBN(0xc3be4263, 0xcb6e86da), TOBN(0x2c417d36, 0x7126d038),
-            TOBN(0x5b70f9c5, 0x8b6f8efa), TOBN(0x671a2faa, 0x37718536),
-            TOBN(0xd3ced3c6, 0xb539c92b), TOBN(0xe56f1bd9, 0xa31203c2),
-            TOBN(0x8b096ec4, 0x9ff3c8eb), TOBN(0x2deae432, 0x43491cea),
-            TOBN(0x2465c6eb, 0x17943794), TOBN(0x5d267e66, 0x20586843),
-            TOBN(0x9d3d116d, 0xb07159d0), TOBN(0xae07a67f, 0xc1896210),
-            TOBN(0x8fc84d87, 0xbb961579), TOBN(0x30009e49, 0x1c1f8dd6),
-            TOBN(0x8a8caf22, 0xe3132819), TOBN(0xcffa197c, 0xf23ab4ff),
-            TOBN(0x58103a44, 0x205dd687), TOBN(0x57b796c3, 0x0ded67a2),
-            TOBN(0x0b9c3a6c, 0xa1779ad7), TOBN(0xa33cfe2e, 0x357c09c5),
-            TOBN(0x2ea29315, 0x3db4a57e), TOBN(0x91959695, 0x8ebeb52e),
-            TOBN(0x118db9a6, 0xe546c879), TOBN(0x8e996df4, 0x6295c8d6),
-            TOBN(0xdd990484, 0x55ec806b), TOBN(0x24f291ca, 0x165c1035),
-            TOBN(0xcca523bb, 0x440e2229), TOBN(0x324673a2, 0x73ef4d04),
-            TOBN(0xaf3adf34, 0x3e11ec39), TOBN(0x6136d7f1, 0xdc5968d3),
-            TOBN(0x7a7b2899, 0xb053a927), TOBN(0x3eaa2661, 0xae067ecd),
-            TOBN(0x8549b9c8, 0x02779cd9), TOBN(0x061d7940, 0xc53385ea),
-            TOBN(0x3e0ba883, 0xf06d18bd), TOBN(0x4ba6de53, 0xb2700843),
-            TOBN(0xb966b668, 0x591a9e4d), TOBN(0x93f67567, 0x7f4fa0ed),
-            TOBN(0x5a02711b, 0x4347237b), TOBN(0xbc041e2f, 0xe794608e),
-            TOBN(0x55af10f5, 0x70f73d8c), TOBN(0xd2d4d4f7, 0xbb7564f7),
-            TOBN(0xd7d27a89, 0xb3e93ce7), TOBN(0xf7b5a875, 0x5d3a2c1b),
-            TOBN(0xb29e68a0, 0x255b218a), TOBN(0xb533837e, 0x8af76754),
-            TOBN(0xd1b05a73, 0x579fab2e), TOBN(0xb41055a1, 0xecd74385),
-            TOBN(0xb2369274, 0x445e9115), TOBN(0x2972a7c4, 0xf520274e),
-            TOBN(0x6c08334e, 0xf678e68a), TOBN(0x4e4160f0, 0x99b057ed),
-            TOBN(0x3cfe11b8, 0x52ccb69a), TOBN(0x2fd1823a, 0x21c8f772),
-            TOBN(0xdf7f072f, 0x3298f055), TOBN(0x8c0566f9, 0xfec74a6e),
-            TOBN(0xe549e019, 0x5bb4d041), TOBN(0x7c3930ba, 0x9208d850),
-            TOBN(0xe07141fc, 0xaaa2902b), TOBN(0x539ad799, 0xe4f69ad3),
-            TOBN(0xa6453f94, 0x813f9ffd), TOBN(0xc58d3c48, 0x375bc2f7),
-            TOBN(0xb3326fad, 0x5dc64e96), TOBN(0x3aafcaa9, 0xb240e354),
-            TOBN(0x1d1b0903, 0xaca1e7a9), TOBN(0x4ceb9767, 0x1211b8a0),
-            TOBN(0xeca83e49, 0xe32a858e), TOBN(0x4c32892e, 0xae907bad),
-            TOBN(0xd5b42ab6, 0x2eb9b494), TOBN(0x7fde3ee2, 0x1eabae1b),
-            TOBN(0x13b5ab09, 0xcaf54957), TOBN(0xbfb028be, 0xe5f5d5d5),
-            TOBN(0x928a0650, 0x2003e2c0), TOBN(0x90793aac, 0x67476843),
-            TOBN(0x5e942e79, 0xc81710a0), TOBN(0x557e4a36, 0x27ccadd4),
-            TOBN(0x72a2bc56, 0x4bcf6d0c), TOBN(0x09ee5f43, 0x26d7b80c),
-            TOBN(0x6b70dbe9, 0xd4292f19), TOBN(0x56f74c26, 0x63f16b18),
-            TOBN(0xc23db0f7, 0x35fbb42a), TOBN(0xb606bdf6, 0x6ae10040),
-            TOBN(0x1eb15d4d, 0x044573ac), TOBN(0x7dc3cf86, 0x556b0ba4),
-            TOBN(0x97af9a33, 0xc60df6f7), TOBN(0x0b1ef85c, 0xa716ce8c),
-            TOBN(0x2922f884, 0xc96958be), TOBN(0x7c32fa94, 0x35690963),
-            TOBN(0x2d7f667c, 0xeaa00061), TOBN(0xeaaf7c17, 0x3547365c),
-            TOBN(0x1eb4de46, 0x87032d58), TOBN(0xc54f3d83, 0x5e2c79e0),
-            TOBN(0x07818df4, 0x5d04ef23), TOBN(0x55faa9c8, 0x673d41b4),
-            TOBN(0xced64f6f, 0x89b95355), TOBN(0x4860d2ea, 0xb7415c84),
-            TOBN(0x5fdb9bd2, 0x050ebad3), TOBN(0xdb53e0cc, 0x6685a5bf),
-            TOBN(0xb830c031, 0x9feb6593), TOBN(0xdd87f310, 0x6accff17),
-            TOBN(0x2303ebab, 0x9f555c10), TOBN(0x94603695, 0x287e7065),
-            TOBN(0xf88311c3, 0x2e83358c), TOBN(0x508dd9b4, 0xeefb0178),
-            TOBN(0x7ca23706, 0x2dba8652), TOBN(0x62aac5a3, 0x0047abe5),
-            TOBN(0x9a61d2a0, 0x8b1ea7b3), TOBN(0xd495ab63, 0xae8b1485),
-            TOBN(0x38740f84, 0x87052f99), TOBN(0x178ebe5b, 0xb2974eea),
-            TOBN(0x030bbcca, 0x5b36d17f), TOBN(0xb5e4cce3, 0xaaf86eea),
-            TOBN(0xb51a0220, 0x68f8e9e0), TOBN(0xa4348796, 0x09eb3e75),
-            TOBN(0xbe592309, 0xeef1a752), TOBN(0x5d7162d7, 0x6f2aa1ed),
-            TOBN(0xaebfb5ed, 0x0f007dd2), TOBN(0x255e14b2, 0xc89edd22),
-            TOBN(0xba85e072, 0x0303b697), TOBN(0xc5d17e25, 0xf05720ff),
-            TOBN(0x02b58d6e, 0x5128ebb6), TOBN(0x2c80242d, 0xd754e113),
-            TOBN(0x919fca5f, 0xabfae1ca), TOBN(0x937afaac, 0x1a21459b),
-            TOBN(0x9e0ca91c, 0x1f66a4d2), TOBN(0x194cc7f3, 0x23ec1331),
-            TOBN(0xad25143a, 0x8aa11690), TOBN(0xbe40ad8d, 0x09b59e08),
-            TOBN(0x37d60d9b, 0xe750860a), TOBN(0x6c53b008, 0xc6bf434c),
-            TOBN(0xb572415d, 0x1356eb80), TOBN(0xb8bf9da3, 0x9578ded8),
-            TOBN(0x22658e36, 0x5e8fb38b), TOBN(0x9b70ce22, 0x5af8cb22),
-            TOBN(0x7c00018a, 0x829a8180), TOBN(0x84329f93, 0xb81ed295),
-            TOBN(0x7c343ea2, 0x5f3cea83), TOBN(0x38f8655f, 0x67586536),
-            TOBN(0xa661a0d0, 0x1d3ec517), TOBN(0x98744652, 0x512321ae),
-            TOBN(0x084ca591, 0xeca92598), TOBN(0xa9bb9dc9, 0x1dcb3feb),
-            TOBN(0x14c54355, 0x78b4c240), TOBN(0x5ed62a3b, 0x610cafdc),
-            TOBN(0x07512f37, 0x1b38846b), TOBN(0x571bb70a, 0xb0e38161),
-            TOBN(0xb556b95b, 0x2da705d2), TOBN(0x3ef8ada6, 0xb1a08f98),
-            TOBN(0x85302ca7, 0xddecfbe5), TOBN(0x0e530573, 0x943105cd),
-            TOBN(0x60554d55, 0x21a9255d), TOBN(0x63a32fa1, 0xf2f3802a),
-            TOBN(0x35c8c5b0, 0xcd477875), TOBN(0x97f458ea, 0x6ad42da1),
-            TOBN(0x832d7080, 0xeb6b242d), TOBN(0xd30bd023, 0x3b71e246),
-            TOBN(0x7027991b, 0xbe31139d), TOBN(0x68797e91, 0x462e4e53),
-            TOBN(0x423fe20a, 0x6b4e185a), TOBN(0x82f2c67e, 0x42d9b707),
-            TOBN(0x25c81768, 0x4cf7811b), TOBN(0xbd53005e, 0x045bb95d),
-        },
-        {
-            TOBN(0xe5f649be, 0x9d8e68fd), TOBN(0xdb0f0533, 0x1b044320),
-            TOBN(0xf6fde9b3, 0xe0c33398), TOBN(0x92f4209b, 0x66c8cfae),
-            TOBN(0xe9d1afcc, 0x1a739d4b), TOBN(0x09aea75f, 0xa28ab8de),
-            TOBN(0x14375fb5, 0xeac6f1d0), TOBN(0x6420b560, 0x708f7aa5),
-            TOBN(0x9eae499c, 0x6254dc41), TOBN(0x7e293924, 0x7a837e7e),
-            TOBN(0x74aec08c, 0x090524a7), TOBN(0xf82b9219, 0x8d6f55f2),
-            TOBN(0x493c962e, 0x1402cec5), TOBN(0x9f17ca17, 0xfa2f30e7),
-            TOBN(0xbcd783e8, 0xe9b879cb), TOBN(0xea3d8c14, 0x5a6f145f),
-            TOBN(0xdede15e7, 0x5e0dee6e), TOBN(0x74f24872, 0xdc628aa2),
-            TOBN(0xd3e9c4fe, 0x7861bb93), TOBN(0x56d4822a, 0x6187b2e0),
-            TOBN(0xb66417cf, 0xc59826f9), TOBN(0xca260969, 0x2408169e),
-            TOBN(0xedf69d06, 0xc79ef885), TOBN(0x00031f8a, 0xdc7d138f),
-            TOBN(0x103c46e6, 0x0ebcf726), TOBN(0x4482b831, 0x6231470e),
-            TOBN(0x6f6dfaca, 0x487c2109), TOBN(0x2e0ace97, 0x62e666ef),
-            TOBN(0x3246a9d3, 0x1f8d1f42), TOBN(0x1b1e83f1, 0x574944d2),
-            TOBN(0x13dfa63a, 0xa57f334b), TOBN(0x0cf8daed, 0x9f025d81),
-            TOBN(0x30d78ea8, 0x00ee11c1), TOBN(0xeb053cd4, 0xb5e3dd75),
-            TOBN(0x9b65b13e, 0xd58c43c5), TOBN(0xc3ad49bd, 0xbd151663),
-            TOBN(0x99fd8e41, 0xb6427990), TOBN(0x12cf15bd, 0x707eae1e),
-            TOBN(0x29ad4f1b, 0x1aabb71e), TOBN(0x5143e74d, 0x07545d0e),
-            TOBN(0x30266336, 0xc88bdee1), TOBN(0x25f29306, 0x5876767c),
-            TOBN(0x9c078571, 0xc6731996), TOBN(0xc88690b2, 0xed552951),
-            TOBN(0x274f2c2d, 0x852705b4), TOBN(0xb0bf8d44, 0x4e09552d),
-            TOBN(0x7628beeb, 0x986575d1), TOBN(0x407be238, 0x7f864651),
-            TOBN(0x0e5e3049, 0xa639fc6b), TOBN(0xe75c35d9, 0x86003625),
-            TOBN(0x0cf35bd8, 0x5dcc1646), TOBN(0x8bcaced2, 0x6c26273a),
-            TOBN(0xe22ecf1d, 0xb5536742), TOBN(0x013dd897, 0x1a9e068b),
-            TOBN(0x17f411cb, 0x8a7909c5), TOBN(0x5757ac98, 0x861dd506),
-            TOBN(0x85de1f0d, 0x1e935abb), TOBN(0xdefd10b4, 0x154de37a),
-            TOBN(0xb8d9e392, 0x369cebb5), TOBN(0x54d5ef9b, 0x761324be),
-            TOBN(0x4d6341ba, 0x74f17e26), TOBN(0xc0a0e3c8, 0x78c1dde4),
-            TOBN(0xa6d77581, 0x87d918fd), TOBN(0x66876015, 0x02ca3a13),
-            TOBN(0xc7313e9c, 0xf36658f0), TOBN(0xc433ef1c, 0x71f8057e),
-            TOBN(0x85326246, 0x1b6a835a), TOBN(0xc8f05398, 0x7c86394c),
-            TOBN(0xff398cdf, 0xe983c4a1), TOBN(0xbf5e8162, 0x03b7b931),
-            TOBN(0x93193c46, 0xb7b9045b), TOBN(0x1e4ebf5d, 0xa4a6e46b),
-            TOBN(0xf9942a60, 0x43a24fe7), TOBN(0x29c1191e, 0xffb3492b),
-            TOBN(0x9f662449, 0x902fde05), TOBN(0xc792a7ac, 0x6713c32d),
-            TOBN(0x2fd88ad8, 0xb737982c), TOBN(0x7e3a0319, 0xa21e60e3),
-            TOBN(0x09b0de44, 0x7383591a), TOBN(0x6df141ee, 0x8310a456),
-            TOBN(0xaec1a039, 0xe6d6f471), TOBN(0x14b2ba0f, 0x1198d12e),
-            TOBN(0xebc1a160, 0x3aeee5ac), TOBN(0x401f4836, 0xe0b964ce),
-            TOBN(0x2ee43796, 0x4fd03f66), TOBN(0x3fdb4e49, 0xdd8f3f12),
-            TOBN(0x6ef267f6, 0x29380f18), TOBN(0x3e8e9670, 0x8da64d16),
-            TOBN(0xbc19180c, 0x207674f1), TOBN(0x112e09a7, 0x33ae8fdb),
-            TOBN(0x99667554, 0x6aaeb71e), TOBN(0x79432af1, 0xe101b1c7),
-            TOBN(0xd5eb558f, 0xde2ddec6), TOBN(0x81392d1f, 0x5357753f),
-            TOBN(0xa7a76b97, 0x3ae1158a), TOBN(0x416fbbff, 0x4a899991),
-            TOBN(0x9e65fdfd, 0x0d4a9dcf), TOBN(0x7bc29e48, 0x944ddf12),
-            TOBN(0xbc1a92d9, 0x3c856866), TOBN(0x273c6905, 0x6e98dfe2),
-            TOBN(0x69fce418, 0xcdfaa6b8), TOBN(0x606bd823, 0x5061c69f),
-            TOBN(0x42d495a0, 0x6af75e27), TOBN(0x8ed3d505, 0x6d873a1f),
-            TOBN(0xaf552841, 0x6ab25b6a), TOBN(0xc6c0ffc7, 0x2b1a4523),
-            TOBN(0xab18827b, 0x21c99e03), TOBN(0x060e8648, 0x9034691b),
-            TOBN(0x5207f90f, 0x93c7f398), TOBN(0x9f4a96cb, 0x82f8d10b),
-            TOBN(0xdd71cd79, 0x3ad0f9e3), TOBN(0x84f435d2, 0xfc3a54f5),
-            TOBN(0x4b03c55b, 0x8e33787f), TOBN(0xef42f975, 0xa6384673),
-            TOBN(0xff7304f7, 0x5051b9f0), TOBN(0x18aca1dc, 0x741c87c2),
-            TOBN(0x56f120a7, 0x2d4bfe80), TOBN(0xfd823b3d, 0x053e732c),
-            TOBN(0x11bccfe4, 0x7537ca16), TOBN(0xdf6c9c74, 0x1b5a996b),
-            TOBN(0xee7332c7, 0x904fc3fa), TOBN(0x14a23f45, 0xc7e3636a),
-            TOBN(0xc38659c3, 0xf091d9aa), TOBN(0x4a995e5d, 0xb12d8540),
-            TOBN(0x20a53bec, 0xf3a5598a), TOBN(0x56534b17, 0xb1eaa995),
-            TOBN(0x9ed3dca4, 0xbf04e03c), TOBN(0x716c563a, 0xd8d56268),
-            TOBN(0x27ba77a4, 0x1d6178e7), TOBN(0xe4c80c40, 0x68a1ff8e),
-            TOBN(0x75011099, 0x0a13f63d), TOBN(0x7bf33521, 0xa61d46f3),
-            TOBN(0x0aff218e, 0x10b365bb), TOBN(0x81021804, 0x0fd7ea75),
-            TOBN(0x05a3fd8a, 0xa4b3a925), TOBN(0xb829e75f, 0x9b3db4e6),
-            TOBN(0x6bdc75a5, 0x4d53e5fb), TOBN(0x04a5dc02, 0xd52717e3),
-            TOBN(0x86af502f, 0xe9a42ec2), TOBN(0x8867e8fb, 0x2630e382),
-            TOBN(0xbf845c6e, 0xbec9889b), TOBN(0x54f491f2, 0xcb47c98d),
-            TOBN(0xa3091fba, 0x790c2a12), TOBN(0xd7f6fd78, 0xc20f708b),
-            TOBN(0xa569ac30, 0xacde5e17), TOBN(0xd0f996d0, 0x6852b4d7),
-            TOBN(0xe51d4bb5, 0x4609ae54), TOBN(0x3fa37d17, 0x0daed061),
-            TOBN(0x62a88684, 0x34b8fb41), TOBN(0x99a2acbd, 0x9efb64f1),
-            TOBN(0xb75c1a5e, 0x6448e1f2), TOBN(0xfa99951a, 0x42b5a069),
-            TOBN(0x6d956e89, 0x2f3b26e7), TOBN(0xf4709860, 0xda875247),
-            TOBN(0x3ad15179, 0x2482dda3), TOBN(0xd64110e3, 0x017d82f0),
-            TOBN(0x14928d2c, 0xfad414e4), TOBN(0x2b155f58, 0x2ed02b24),
-            TOBN(0x481a141b, 0xcb821bf1), TOBN(0x12e3c770, 0x4f81f5da),
-            TOBN(0xe49c5de5, 0x9fff8381), TOBN(0x11053232, 0x5bbec894),
-            TOBN(0xa0d051cc, 0x454d88c4), TOBN(0x4f6db89c, 0x1f8e531b),
-            TOBN(0x34fe3fd6, 0xca563a44), TOBN(0x7f5c2215, 0x58da8ab9),
-            TOBN(0x8445016d, 0x9474f0a1), TOBN(0x17d34d61, 0xcb7d8a0a),
-            TOBN(0x8e9d3910, 0x1c474019), TOBN(0xcaff2629, 0xd52ceefb),
-            TOBN(0xf9cf3e32, 0xc1622c2b), TOBN(0xd4b95e3c, 0xe9071a05),
-            TOBN(0xfbbca61f, 0x1594438c), TOBN(0x1eb6e6a6, 0x04aadedf),
-            TOBN(0x853027f4, 0x68e14940), TOBN(0x221d322a, 0xdfabda9c),
-            TOBN(0xed8ea9f6, 0xb7cb179a), TOBN(0xdc7b764d, 0xb7934dcc),
-            TOBN(0xfcb13940, 0x5e09180d), TOBN(0x6629a6bf, 0xb47dc2dd),
-            TOBN(0xbfc55e4e, 0x9f5a915e), TOBN(0xb1db9d37, 0x6204441e),
-            TOBN(0xf82d68cf, 0x930c5f53), TOBN(0x17d3a142, 0xcbb605b1),
-            TOBN(0xdd5944ea, 0x308780f2), TOBN(0xdc8de761, 0x3845f5e4),
-            TOBN(0x6beaba7d, 0x7624d7a3), TOBN(0x1e709afd, 0x304df11e),
-            TOBN(0x95364376, 0x02170456), TOBN(0xbf204b3a, 0xc8f94b64),
-            TOBN(0x4e53af7c, 0x5680ca68), TOBN(0x0526074a, 0xe0c67574),
-            TOBN(0x95d8cef8, 0xecd92af6), TOBN(0xe6b9fa7a, 0x6cd1745a),
-            TOBN(0x3d546d3d, 0xa325c3e4), TOBN(0x1f57691d, 0x9ae93aae),
-            TOBN(0xe891f3fe, 0x9d2e1a33), TOBN(0xd430093f, 0xac063d35),
-            TOBN(0xeda59b12, 0x5513a327), TOBN(0xdc2134f3, 0x5536f18f),
-            TOBN(0xaa51fe2c, 0x5c210286), TOBN(0x3f68aaee, 0x1cab658c),
-            TOBN(0x5a23a00b, 0xf9357292), TOBN(0x9a626f39, 0x7efdabed),
-            TOBN(0xfe2b3bf3, 0x199d78e3), TOBN(0xb7a2af77, 0x71bbc345),
-            TOBN(0x3d19827a, 0x1e59802c), TOBN(0x823bbc15, 0xb487a51c),
-            TOBN(0x856139f2, 0x99d0a422), TOBN(0x9ac3df65, 0xf456c6fb),
-            TOBN(0xaddf65c6, 0x701f8bd6), TOBN(0x149f321e, 0x3758df87),
-            TOBN(0xb1ecf714, 0x721b7eba), TOBN(0xe17df098, 0x31a3312a),
-            TOBN(0xdb2fd6ec, 0xd5c4d581), TOBN(0xfd02996f, 0x8fcea1b3),
-            TOBN(0xe29fa63e, 0x7882f14f), TOBN(0xc9f6dc35, 0x07c6cadc),
-            TOBN(0x46f22d6f, 0xb882bed0), TOBN(0x1a45755b, 0xd118e52c),
-            TOBN(0x9f2c7c27, 0x7c4608cf), TOBN(0x7ccbdf32, 0x568012c2),
-            TOBN(0xfcb0aedd, 0x61729b0e), TOBN(0x7ca2ca9e, 0xf7d75dbf),
-            TOBN(0xf58fecb1, 0x6f640f62), TOBN(0xe274b92b, 0x39f51946),
-            TOBN(0x7f4dfc04, 0x6288af44), TOBN(0x0a91f32a, 0xeac329e5),
-            TOBN(0x43ad274b, 0xd6aaba31), TOBN(0x719a1640, 0x0f6884f9),
-            TOBN(0x685d29f6, 0xdaf91e20), TOBN(0x5ec1cc33, 0x27e49d52),
-            TOBN(0x38f4de96, 0x3b54a059), TOBN(0x0e0015e5, 0xefbcfdb3),
-            TOBN(0x177d23d9, 0x4dbb8da6), TOBN(0x98724aa2, 0x97a617ad),
-            TOBN(0x30f0885b, 0xfdb6558e), TOBN(0xf9f7a28a, 0xc7899a96),
-            TOBN(0xd2ae8ac8, 0x872dc112), TOBN(0xfa0642ca, 0x73c3c459),
-            TOBN(0x15296981, 0xe7dfc8d6), TOBN(0x67cd4450, 0x1fb5b94a),
-            TOBN(0x0ec71cf1, 0x0eddfd37), TOBN(0xc7e5eeb3, 0x9a8eddc7),
-            TOBN(0x02ac8e3d, 0x81d95028), TOBN(0x0088f172, 0x70b0e35d),
-            TOBN(0xec041fab, 0xe1881fe3), TOBN(0x62cf71b8, 0xd99e7faa),
-            TOBN(0x5043dea7, 0xe0f222c2), TOBN(0x309d42ac, 0x72e65142),
-            TOBN(0x94fe9ddd, 0x9216cd30), TOBN(0xd6539c7d, 0x0f87feec),
-            TOBN(0x03c5a57c, 0x432ac7d7), TOBN(0x72692cf0, 0x327fda10),
-            TOBN(0xec28c85f, 0x280698de), TOBN(0x2331fb46, 0x7ec283b1),
-            TOBN(0xd34bfa32, 0x2867e633), TOBN(0x78709a82, 0x0a9cc815),
-            TOBN(0xb7fe6964, 0x875e2fa5), TOBN(0x25cc064f, 0x9e98bfb5),
-            TOBN(0x9eb0151c, 0x493a65c5), TOBN(0x5fb5d941, 0x53182464),
-            TOBN(0x69e6f130, 0xf04618e2), TOBN(0xa8ecec22, 0xf89c8ab6),
-            TOBN(0xcd6ac88b, 0xb96209bd), TOBN(0x65fa8cdb, 0xb3e1c9e0),
-            TOBN(0xa47d22f5, 0x4a8d8eac), TOBN(0x83895cdf, 0x8d33f963),
-            TOBN(0xa8adca59, 0xb56cd3d1), TOBN(0x10c8350b, 0xdaf38232),
-            TOBN(0x2b161fb3, 0xa5080a9f), TOBN(0xbe7f5c64, 0x3af65b3a),
-            TOBN(0x2c754039, 0x97403a11), TOBN(0x94626cf7, 0x121b96af),
-            TOBN(0x431de7c4, 0x6a983ec2), TOBN(0x3780dd3a, 0x52cc3df7),
-            TOBN(0xe28a0e46, 0x2baf8e3b), TOBN(0xabe68aad, 0x51d299ae),
-            TOBN(0x603eb8f9, 0x647a2408), TOBN(0x14c61ed6, 0x5c750981),
-            TOBN(0x88b34414, 0xc53352e7), TOBN(0x5a34889c, 0x1337d46e),
-            TOBN(0x612c1560, 0xf95f2bc8), TOBN(0x8a3f8441, 0xd4807a3a),
-            TOBN(0x680d9e97, 0x5224da68), TOBN(0x60cd6e88, 0xc3eb00e9),
-            TOBN(0x3875a98e, 0x9a6bc375), TOBN(0xdc80f924, 0x4fd554c2),
-            TOBN(0x6c4b3415, 0x6ac77407), TOBN(0xa1e5ea8f, 0x25420681),
-            TOBN(0x541bfa14, 0x4607a458), TOBN(0x5dbc7e7a, 0x96d7fbf9),
-            TOBN(0x646a851b, 0x31590a47), TOBN(0x039e85ba, 0x15ee6df8),
-            TOBN(0xd19fa231, 0xd7b43fc0), TOBN(0x84bc8be8, 0x299a0e04),
-            TOBN(0x2b9d2936, 0xf20df03a), TOBN(0x24054382, 0x8608d472),
-            TOBN(0x76b6ba04, 0x9149202a), TOBN(0xb21c3831, 0x3670e7b7),
-            TOBN(0xddd93059, 0xd6fdee10), TOBN(0x9da47ad3, 0x78488e71),
-            TOBN(0x99cc1dfd, 0xa0fcfb25), TOBN(0x42abde10, 0x64696954),
-            TOBN(0x14cc15fc, 0x17eab9fe), TOBN(0xd6e863e4, 0xd3e70972),
-            TOBN(0x29a7765c, 0x6432112c), TOBN(0x88660001, 0x5b0774d8),
-            TOBN(0x3729175a, 0x2c088eae), TOBN(0x13afbcae, 0x8230b8d4),
-            TOBN(0x44768151, 0x915f4379), TOBN(0xf086431a, 0xd8d22812),
-            TOBN(0x37461955, 0xc298b974), TOBN(0x905fb5f0, 0xf8711e04),
-            TOBN(0x787abf3a, 0xfe969d18), TOBN(0x392167c2, 0x6f6a494e),
-            TOBN(0xfc7a0d2d, 0x28c511da), TOBN(0xf127c7dc, 0xb66a262d),
-            TOBN(0xf9c4bb95, 0xfd63fdf0), TOBN(0x90016589, 0x3913ef46),
-            TOBN(0x74d2a73c, 0x11aa600d), TOBN(0x2f5379bd, 0x9fb5ab52),
-            TOBN(0xe49e53a4, 0x7fb70068), TOBN(0x68dd39e5, 0x404aa9a7),
-            TOBN(0xb9b0cf57, 0x2ecaa9c3), TOBN(0xba0e103b, 0xe824826b),
-            TOBN(0x60c2198b, 0x4631a3c4), TOBN(0xc5ff84ab, 0xfa8966a2),
-            TOBN(0x2d6ebe22, 0xac95aff8), TOBN(0x1c9bb6db, 0xb5a46d09),
-            TOBN(0x419062da, 0x53ee4f8d), TOBN(0x7b9042d0, 0xbb97efef),
-            TOBN(0x0f87f080, 0x830cf6bd), TOBN(0x4861d19a, 0x6ec8a6c6),
-            TOBN(0xd3a0daa1, 0x202f01aa), TOBN(0xb0111674, 0xf25afbd5),
-            TOBN(0x6d00d6cf, 0x1afb20d9), TOBN(0x13695000, 0x40671bc5),
-            TOBN(0x913ab0dc, 0x2485ea9b), TOBN(0x1f2bed06, 0x9eef61ac),
-            TOBN(0x850c8217, 0x6d799e20), TOBN(0x93415f37, 0x3271c2de),
-            TOBN(0x5afb06e9, 0x6c4f5910), TOBN(0x688a52df, 0xc4e9e421),
-            TOBN(0x30495ba3, 0xe2a9a6db), TOBN(0x4601303d, 0x58f9268b),
-            TOBN(0xbe3b0dad, 0x7eb0f04f), TOBN(0x4ea47250, 0x4456936d),
-            TOBN(0x8caf8798, 0xd33fd3e7), TOBN(0x1ccd8a89, 0xeb433708),
-            TOBN(0x9effe3e8, 0x87fd50ad), TOBN(0xbe240a56, 0x6b29c4df),
-            TOBN(0xec4ffd98, 0xca0e7ebd), TOBN(0xf586783a, 0xe748616e),
-            TOBN(0xa5b00d8f, 0xc77baa99), TOBN(0x0acada29, 0xb4f34c9c),
-            TOBN(0x36dad67d, 0x0fe723ac), TOBN(0x1d8e53a5, 0x39c36c1e),
-            TOBN(0xe4dd342d, 0x1f4bea41), TOBN(0x64fd5e35, 0xebc9e4e0),
-            TOBN(0x96f01f90, 0x57908805), TOBN(0xb5b9ea3d, 0x5ed480dd),
-            TOBN(0x366c5dc2, 0x3efd2dd0), TOBN(0xed2fe305, 0x6e9dfa27),
-            TOBN(0x4575e892, 0x6e9197e2), TOBN(0x11719c09, 0xab502a5d),
-            TOBN(0x264c7bec, 0xe81f213f), TOBN(0x741b9241, 0x55f5c457),
-            TOBN(0x78ac7b68, 0x49a5f4f4), TOBN(0xf91d70a2, 0x9fc45b7d),
-            TOBN(0x39b05544, 0xb0f5f355), TOBN(0x11f06bce, 0xeef930d9),
-            TOBN(0xdb84d25d, 0x038d05e1), TOBN(0x04838ee5, 0xbacc1d51),
-            TOBN(0x9da3ce86, 0x9e8ee00b), TOBN(0xc3412057, 0xc36eda1f),
-            TOBN(0xae80b913, 0x64d9c2f4), TOBN(0x7468bac3, 0xa010a8ff),
-            TOBN(0xdfd20037, 0x37359d41), TOBN(0x1a0f5ab8, 0x15efeacc),
-            TOBN(0x7c25ad2f, 0x659d0ce0), TOBN(0x4011bcbb, 0x6785cff1),
-            TOBN(0x128b9912, 0x7e2192c7), TOBN(0xa549d8e1, 0x13ccb0e8),
-            TOBN(0x805588d8, 0xc85438b1), TOBN(0x5680332d, 0xbc25cb27),
-            TOBN(0xdcd1bc96, 0x1a4bfdf4), TOBN(0x779ff428, 0x706f6566),
-            TOBN(0x8bbee998, 0xf059987a), TOBN(0xf6ce8cf2, 0xcc686de7),
-            TOBN(0xf8ad3c4a, 0x953cfdb2), TOBN(0xd1d426d9, 0x2205da36),
-            TOBN(0xb3c0f13f, 0xc781a241), TOBN(0x3e89360e, 0xd75362a8),
-            TOBN(0xccd05863, 0xc8a91184), TOBN(0x9bd0c9b7, 0xefa8a7f4),
-            TOBN(0x97ee4d53, 0x8a912a4b), TOBN(0xde5e15f8, 0xbcf518fd),
-            TOBN(0x6a055bf8, 0xc467e1e0), TOBN(0x10be4b4b, 0x1587e256),
-            TOBN(0xd90c14f2, 0x668621c9), TOBN(0xd5518f51, 0xab9c92c1),
-            TOBN(0x8e6a0100, 0xd6d47b3c), TOBN(0xcbe980dd, 0x66716175),
-            TOBN(0x500d3f10, 0xddd83683), TOBN(0x3b6cb35d, 0x99cac73c),
-            TOBN(0x53730c8b, 0x6083d550), TOBN(0xcf159767, 0xdf0a1987),
-            TOBN(0x84bfcf53, 0x43ad73b3), TOBN(0x1b528c20, 0x4f035a94),
-            TOBN(0x4294edf7, 0x33eeac69), TOBN(0xb6283e83, 0x817f3240),
-            TOBN(0xc3fdc959, 0x0a5f25b1), TOBN(0xefaf8aa5, 0x5844ee22),
-            TOBN(0xde269ba5, 0xdbdde4de), TOBN(0xe3347160, 0xc56133bf),
-            TOBN(0xc1184219, 0x8d9ea9f8), TOBN(0x090de5db, 0xf3fc1ab5),
-            TOBN(0x404c37b1, 0x0bf22cda), TOBN(0x7de20ec8, 0xf5618894),
-            TOBN(0x754c588e, 0xecdaecab), TOBN(0x6ca4b0ed, 0x88342743),
-            TOBN(0x76f08bdd, 0xf4a938ec), TOBN(0xd182de89, 0x91493ccb),
-            TOBN(0xd652c53e, 0xc8a4186a), TOBN(0xb3e878db, 0x946d8e33),
-            TOBN(0x088453c0, 0x5f37663c), TOBN(0x5cd9daaa, 0xb407748b),
-            TOBN(0xa1f5197f, 0x586d5e72), TOBN(0x47500be8, 0xc443ca59),
-            TOBN(0x78ef35b2, 0xe2652424), TOBN(0x09c5d26f, 0x6dd7767d),
-            TOBN(0x7175a79a, 0xa74d3f7b), TOBN(0x0428fd8d, 0xcf5ea459),
-            TOBN(0x511cb97c, 0xa5d1746d), TOBN(0x36363939, 0xe71d1278),
-            TOBN(0xcf2df955, 0x10350bf4), TOBN(0xb3817439, 0x60aae782),
-            TOBN(0xa748c0e4, 0x3e688809), TOBN(0x98021fbf, 0xd7a5a006),
-            TOBN(0x9076a70c, 0x0e367a98), TOBN(0xbea1bc15, 0x0f62b7c2),
-            TOBN(0x2645a68c, 0x30fe0343), TOBN(0xacaffa78, 0x699dc14f),
-            TOBN(0xf4469964, 0x457bf9c4), TOBN(0x0db6407b, 0x0d2ead83),
-            TOBN(0x68d56cad, 0xb2c6f3eb), TOBN(0x3b512e73, 0xf376356c),
-            TOBN(0xe43b0e1f, 0xfce10408), TOBN(0x89ddc003, 0x5a5e257d),
-            TOBN(0xb0ae0d12, 0x0362e5b3), TOBN(0x07f983c7, 0xb0519161),
-            TOBN(0xc2e94d15, 0x5d5231e7), TOBN(0xcff22aed, 0x0b4f9513),
-            TOBN(0xb02588dd, 0x6ad0b0b5), TOBN(0xb967d1ac, 0x11d0dcd5),
-            TOBN(0x8dac6bc6, 0xcf777b6c), TOBN(0x0062bdbd, 0x4c6d1959),
-            TOBN(0x53da71b5, 0x0ef5cc85), TOBN(0x07012c7d, 0x4006f14f),
-            TOBN(0x4617f962, 0xac47800d), TOBN(0x53365f2b, 0xc102ed75),
-            TOBN(0xb422efcb, 0x4ab8c9d3), TOBN(0x195cb26b, 0x34af31c9),
-            TOBN(0x3a926e29, 0x05f2c4ce), TOBN(0xbd2bdecb, 0x9856966c),
-            TOBN(0x5d16ab3a, 0x85527015), TOBN(0x9f81609e, 0x4486c231),
-            TOBN(0xd8b96b2c, 0xda350002), TOBN(0xbd054690, 0xfa1b7d36),
-            TOBN(0xdc90ebf5, 0xe71d79bc), TOBN(0xf241b6f9, 0x08964e4e),
-            TOBN(0x7c838643, 0x2fe3cd4c), TOBN(0xe0f33acb, 0xb4bc633c),
-            TOBN(0xb4a9ecec, 0x3d139f1f), TOBN(0x05ce69cd, 0xdc4a1f49),
-            TOBN(0xa19d1b16, 0xf5f98aaf), TOBN(0x45bb71d6, 0x6f23e0ef),
-            TOBN(0x33789fcd, 0x46cdfdd3), TOBN(0x9b8e2978, 0xcee040ca),
-            TOBN(0x9c69b246, 0xae0a6828), TOBN(0xba533d24, 0x7078d5aa),
-            TOBN(0x7a2e42c0, 0x7bb4fbdb), TOBN(0xcfb4879a, 0x7035385c),
-            TOBN(0x8c3dd30b, 0x3281705b), TOBN(0x7e361c6c, 0x404fe081),
-            TOBN(0x7b21649c, 0x3f604edf), TOBN(0x5dbf6a3f, 0xe52ffe47),
-            TOBN(0xc41b7c23, 0x4b54d9bf), TOBN(0x1374e681, 0x3511c3d9),
-            TOBN(0x1863bf16, 0xc1b2b758), TOBN(0x90e78507, 0x1e9e6a96),
-            TOBN(0xab4bf98d, 0x5d86f174), TOBN(0xd74e0bd3, 0x85e96fe4),
-            TOBN(0x8afde39f, 0xcac5d344), TOBN(0x90946dbc, 0xbd91b847),
-            TOBN(0xf5b42358, 0xfe1a838c), TOBN(0x05aae6c5, 0x620ac9d8),
-            TOBN(0x8e193bd8, 0xa1ce5a0b), TOBN(0x8f710571, 0x4dabfd72),
-            TOBN(0x8d8fdd48, 0x182caaac), TOBN(0x8c4aeefa, 0x040745cf),
-            TOBN(0x73c6c30a, 0xf3b93e6d), TOBN(0x991241f3, 0x16f42011),
-            TOBN(0xa0158eea, 0xe457a477), TOBN(0xd19857db, 0xee6ddc05),
-            TOBN(0xb3265224, 0x18c41671), TOBN(0x3ffdfc7e, 0x3c2c0d58),
-            TOBN(0x3a3a5254, 0x26ee7cda), TOBN(0x341b0869, 0xdf02c3a8),
-            TOBN(0xa023bf42, 0x723bbfc8), TOBN(0x3d15002a, 0x14452691),
-        },
-        {
-            TOBN(0x5ef7324c, 0x85edfa30), TOBN(0x25976554, 0x87d4f3da),
-            TOBN(0x352f5bc0, 0xdcb50c86), TOBN(0x8f6927b0, 0x4832a96c),
-            TOBN(0xd08ee1ba, 0x55f2f94c), TOBN(0x6a996f99, 0x344b45fa),
-            TOBN(0xe133cb8d, 0xa8aa455d), TOBN(0x5d0721ec, 0x758dc1f7),
-            TOBN(0x6ba7a920, 0x79e5fb67), TOBN(0xe1331feb, 0x70aa725e),
-            TOBN(0x5080ccf5, 0x7df5d837), TOBN(0xe4cae01d, 0x7ff72e21),
-            TOBN(0xd9243ee6, 0x0412a77d), TOBN(0x06ff7cac, 0xdf449025),
-            TOBN(0xbe75f7cd, 0x23ef5a31), TOBN(0xbc957822, 0x0ddef7a8),
-            TOBN(0x8cf7230c, 0xb0ce1c55), TOBN(0x5b534d05, 0x0bbfb607),
-            TOBN(0xee1ef113, 0x0e16363b), TOBN(0x27e0aa7a, 0xb4999e82),
-            TOBN(0xce1dac2d, 0x79362c41), TOBN(0x67920c90, 0x91bb6cb0),
-            TOBN(0x1e648d63, 0x2223df24), TOBN(0x0f7d9eef, 0xe32e8f28),
-            TOBN(0x6943f39a, 0xfa833834), TOBN(0x22951722, 0xa6328562),
-            TOBN(0x81d63dd5, 0x4170fc10), TOBN(0x9f5fa58f, 0xaecc2e6d),
-            TOBN(0xb66c8725, 0xe77d9a3b), TOBN(0x11235cea, 0x6384ebe0),
-            TOBN(0x06a8c118, 0x5845e24a), TOBN(0x0137b286, 0xebd093b1),
-            TOBN(0xc589e1ce, 0x44ace150), TOBN(0xe0f8d3d9, 0x4381e97c),
-            TOBN(0x59e99b11, 0x62c5a4b8), TOBN(0x90d262f7, 0xfd0ec9f9),
-            TOBN(0xfbc854c9, 0x283e13c9), TOBN(0x2d04fde7, 0xaedc7085),
-            TOBN(0x057d7765, 0x47dcbecb), TOBN(0x8dbdf591, 0x9a76fa5f),
-            TOBN(0xd0150695, 0x0de1e578), TOBN(0x2e1463e7, 0xe9f72bc6),
-            TOBN(0xffa68441, 0x1b39eca5), TOBN(0x673c8530, 0x7c037f2f),
-            TOBN(0xd0d6a600, 0x747f91da), TOBN(0xb08d43e1, 0xc9cb78e9),
-            TOBN(0x0fc0c644, 0x27b5cef5), TOBN(0x5c1d160a, 0xa60a2fd6),
-            TOBN(0xf98cae53, 0x28c8e13b), TOBN(0x375f10c4, 0xb2eddcd1),
-            TOBN(0xd4eb8b7f, 0x5cce06ad), TOBN(0xb4669f45, 0x80a2e1ef),
-            TOBN(0xd593f9d0, 0x5bbd8699), TOBN(0x5528a4c9, 0xe7976d13),
-            TOBN(0x3923e095, 0x1c7e28d3), TOBN(0xb9293790, 0x3f6bb577),
-            TOBN(0xdb567d6a, 0xc42bd6d2), TOBN(0x6df86468, 0xbb1f96ae),
-            TOBN(0x0efe5b1a, 0x4843b28e), TOBN(0x961bbb05, 0x6379b240),
-            TOBN(0xb6caf5f0, 0x70a6a26b), TOBN(0x70686c0d, 0x328e6e39),
-            TOBN(0x80da06cf, 0x895fc8d3), TOBN(0x804d8810, 0xb363fdc9),
-            TOBN(0xbe22877b, 0x207f1670), TOBN(0x9b0dd188, 0x4e615291),
-            TOBN(0x625ae8dc, 0x97a3c2bf), TOBN(0x08584ef7, 0x439b86e8),
-            TOBN(0xde7190a5, 0xdcd898ff), TOBN(0x26286c40, 0x2058ee3d),
-            TOBN(0x3db0b217, 0x5f87b1c1), TOBN(0xcc334771, 0x102a6db5),
-            TOBN(0xd99de954, 0x2f770fb1), TOBN(0x97c1c620, 0x4cd7535e),
-            TOBN(0xd3b6c448, 0x3f09cefc), TOBN(0xd725af15, 0x5a63b4f8),
-            TOBN(0x0c95d24f, 0xc01e20ec), TOBN(0xdfd37494, 0x9ae7121f),
-            TOBN(0x7d6ddb72, 0xec77b7ec), TOBN(0xfe079d3b, 0x0353a4ae),
-            TOBN(0x3066e70a, 0x2e6ac8d2), TOBN(0x9c6b5a43, 0x106e5c05),
-            TOBN(0x52d3c6f5, 0xede59b8c), TOBN(0x30d6a5c3, 0xfccec9ae),
-            TOBN(0xedec7c22, 0x4fc0a9ef), TOBN(0x190ff083, 0x95c16ced),
-            TOBN(0xbe12ec8f, 0x94de0fde), TOBN(0x0d131ab8, 0x852d3433),
-            TOBN(0x42ace07e, 0x85701291), TOBN(0x94793ed9, 0x194061a8),
-            TOBN(0x30e83ed6, 0xd7f4a485), TOBN(0x9eec7269, 0xf9eeff4d),
-            TOBN(0x90acba59, 0x0c9d8005), TOBN(0x5feca458, 0x1e79b9d1),
-            TOBN(0x8fbe5427, 0x1d506a1e), TOBN(0xa32b2c8e, 0x2439cfa7),
-            TOBN(0x1671c173, 0x73dd0b4e), TOBN(0x37a28214, 0x44a054c6),
-            TOBN(0x81760a1b, 0x4e8b53f1), TOBN(0xa6c04224, 0xf9f93b9e),
-            TOBN(0x18784b34, 0xcf671e3c), TOBN(0x81bbecd2, 0xcda9b994),
-            TOBN(0x38831979, 0xb2ab3848), TOBN(0xef54feb7, 0xf2e03c2d),
-            TOBN(0xcf197ca7, 0xfb8088fa), TOBN(0x01427247, 0x4ddc96c5),
-            TOBN(0xa2d2550a, 0x30777176), TOBN(0x53469898, 0x4d0cf71d),
-            TOBN(0x6ce937b8, 0x3a2aaac6), TOBN(0xe9f91dc3, 0x5af38d9b),
-            TOBN(0x2598ad83, 0xc8bf2899), TOBN(0x8e706ac9, 0xb5536c16),
-            TOBN(0x40dc7495, 0xf688dc98), TOBN(0x26490cd7, 0x124c4afc),
-            TOBN(0xe651ec84, 0x1f18775c), TOBN(0x393ea6c3, 0xb4fdaf4a),
-            TOBN(0x1e1f3343, 0x7f338e0d), TOBN(0x39fb832b, 0x6053e7b5),
-            TOBN(0x46e702da, 0x619e14d5), TOBN(0x859cacd1, 0xcdeef6e0),
-            TOBN(0x63b99ce7, 0x4462007d), TOBN(0xb8ab48a5, 0x4cb5f5b7),
-            TOBN(0x9ec673d2, 0xf55edde7), TOBN(0xd1567f74, 0x8cfaefda),
-            TOBN(0x46381b6b, 0x0887bcec), TOBN(0x694497ce, 0xe178f3c2),
-            TOBN(0x5e6525e3, 0x1e6266cb), TOBN(0x5931de26, 0x697d6413),
-            TOBN(0x87f8df7c, 0x0e58d493), TOBN(0xb1ae5ed0, 0x58b73f12),
-            TOBN(0xc368f784, 0xdea0c34d), TOBN(0x9bd0a120, 0x859a91a0),
-            TOBN(0xb00d88b7, 0xcc863c68), TOBN(0x3a1cc11e, 0x3d1f4d65),
-            TOBN(0xea38e0e7, 0x0aa85593), TOBN(0x37f13e98, 0x7dc4aee8),
-            TOBN(0x10d38667, 0xbc947bad), TOBN(0x738e07ce, 0x2a36ee2e),
-            TOBN(0xc93470cd, 0xc577fcac), TOBN(0xdee1b616, 0x2782470d),
-            TOBN(0x36a25e67, 0x2e793d12), TOBN(0xd6aa6cae, 0xe0f186da),
-            TOBN(0x474d0fd9, 0x80e07af7), TOBN(0xf7cdc47d, 0xba8a5cd4),
-            TOBN(0x28af6d9d, 0xab15247f), TOBN(0x7c789c10, 0x493a537f),
-            TOBN(0x7ac9b110, 0x23a334e7), TOBN(0x0236ac09, 0x12c9c277),
-            TOBN(0xa7e5bd25, 0x1d7a5144), TOBN(0x098b9c2a, 0xf13ec4ec),
-            TOBN(0x3639daca, 0xd3f0abca), TOBN(0x642da81a, 0xa23960f9),
-            TOBN(0x7d2e5c05, 0x4f7269b1), TOBN(0xfcf30777, 0xe287c385),
-            TOBN(0x10edc84f, 0xf2a46f21), TOBN(0x35441757, 0x4f43fa36),
-            TOBN(0xf1327899, 0xfd703431), TOBN(0xa438d7a6, 0x16dd587a),
-            TOBN(0x65c34c57, 0xe9c8352d), TOBN(0xa728edab, 0x5cc5a24e),
-            TOBN(0xaed78abc, 0x42531689), TOBN(0x0a51a0e8, 0x010963ef),
-            TOBN(0x5776fa0a, 0xd717d9b3), TOBN(0xf356c239, 0x7dd3428b),
-            TOBN(0x29903fff, 0x8d3a3dac), TOBN(0x409597fa, 0x3d94491f),
-            TOBN(0x4cd7a5ff, 0xbf4a56a4), TOBN(0xe5096474, 0x8adab462),
-            TOBN(0xa97b5126, 0x5c3427b0), TOBN(0x6401405c, 0xd282c9bd),
-            TOBN(0x3629f8d7, 0x222c5c45), TOBN(0xb1c02c16, 0xe8d50aed),
-            TOBN(0xbea2ed75, 0xd9635bc9), TOBN(0x226790c7, 0x6e24552f),
-            TOBN(0x3c33f2a3, 0x65f1d066), TOBN(0x2a43463e, 0x6dfccc2e),
-            TOBN(0x8cc3453a, 0xdb483761), TOBN(0xe7cc6085, 0x65d5672b),
-            TOBN(0x277ed6cb, 0xde3efc87), TOBN(0x19f2f368, 0x69234eaf),
-            TOBN(0x9aaf4317, 0x5c0b800b), TOBN(0x1f1e7c89, 0x8b6da6e2),
-            TOBN(0x6cfb4715, 0xb94ec75e), TOBN(0xd590dd5f, 0x453118c2),
-            TOBN(0x14e49da1, 0x1f17a34c), TOBN(0x5420ab39, 0x235a1456),
-            TOBN(0xb7637241, 0x2f50363b), TOBN(0x7b15d623, 0xc3fabb6e),
-            TOBN(0xa0ef40b1, 0xe274e49c), TOBN(0x5cf50744, 0x96b1860a),
-            TOBN(0xd6583fbf, 0x66afe5a4), TOBN(0x44240510, 0xf47e3e9a),
-            TOBN(0x99254343, 0x11b2d595), TOBN(0xf1367499, 0xeec8df57),
-            TOBN(0x3cb12c61, 0x3e73dd05), TOBN(0xd248c033, 0x7dac102a),
-            TOBN(0xcf154f13, 0xa77739f5), TOBN(0xbf4288cb, 0x23d2af42),
-            TOBN(0xaa64c9b6, 0x32e4a1cf), TOBN(0xee8c07a8, 0xc8a208f3),
-            TOBN(0xe10d4999, 0x6fe8393f), TOBN(0x0f809a3f, 0xe91f3a32),
-            TOBN(0x61096d1c, 0x802f63c8), TOBN(0x289e1462, 0x57750d3d),
-            TOBN(0xed06167e, 0x9889feea), TOBN(0xd5c9c0e2, 0xe0993909),
-            TOBN(0x46fca0d8, 0x56508ac6), TOBN(0x91826047, 0x4f1b8e83),
-            TOBN(0x4f2c877a, 0x9a4a2751), TOBN(0x71bd0072, 0xcae6fead),
-            TOBN(0x38df8dcc, 0x06aa1941), TOBN(0x5a074b4c, 0x63beeaa8),
-            TOBN(0xd6d65934, 0xc1cec8ed), TOBN(0xa6ecb49e, 0xaabc03bd),
-            TOBN(0xaade91c2, 0xde8a8415), TOBN(0xcfb0efdf, 0x691136e0),
-            TOBN(0x11af45ee, 0x23ab3495), TOBN(0xa132df88, 0x0b77463d),
-            TOBN(0x8923c15c, 0x815d06f4), TOBN(0xc3ceb3f5, 0x0d61a436),
-            TOBN(0xaf52291d, 0xe88fb1da), TOBN(0xea057974, 0x1da12179),
-            TOBN(0xb0d7218c, 0xd2fef720), TOBN(0x6c0899c9, 0x8e1d8845),
-            TOBN(0x98157504, 0x752ddad7), TOBN(0xd60bd74f, 0xa1a68a97),
-            TOBN(0x7047a3a9, 0xf658fb99), TOBN(0x1f5d86d6, 0x5f8511e4),
-            TOBN(0xb8a4bc42, 0x4b5a6d88), TOBN(0x69eb2c33, 0x1abefa7d),
-            TOBN(0x95bf39e8, 0x13c9c510), TOBN(0xf571960a, 0xd48aab43),
-            TOBN(0x7e8cfbcf, 0x704e23c6), TOBN(0xc71b7d22, 0x28aaa65b),
-            TOBN(0xa041b2bd, 0x245e3c83), TOBN(0x69b98834, 0xd21854ff),
-            TOBN(0x89d227a3, 0x963bfeec), TOBN(0x99947aaa, 0xde7da7cb),
-            TOBN(0x1d9ee9db, 0xee68a9b1), TOBN(0x0a08f003, 0x698ec368),
-            TOBN(0xe9ea4094, 0x78ef2487), TOBN(0xc8d2d415, 0x02cfec26),
-            TOBN(0xc52f9a6e, 0xb7dcf328), TOBN(0x0ed489e3, 0x85b6a937),
-            TOBN(0x9b94986b, 0xbef3366e), TOBN(0x0de59c70, 0xedddddb8),
-            TOBN(0xffdb748c, 0xeadddbe2), TOBN(0x9b9784bb, 0x8266ea40),
-            TOBN(0x142b5502, 0x1a93507a), TOBN(0xb4cd1187, 0x8d3c06cf),
-            TOBN(0xdf70e76a, 0x91ec3f40), TOBN(0x484e81ad, 0x4e7553c2),
-            TOBN(0x830f87b5, 0x272e9d6e), TOBN(0xea1c93e5, 0xc6ff514a),
-            TOBN(0x67cc2adc, 0xc4192a8e), TOBN(0xc77e27e2, 0x42f4535a),
-            TOBN(0x9cdbab36, 0xd2b713c5), TOBN(0x86274ea0, 0xcf7b0cd3),
-            TOBN(0x784680f3, 0x09af826b), TOBN(0xbfcc837a, 0x0c72dea3),
-            TOBN(0xa8bdfe9d, 0xd6529b73), TOBN(0x708aa228, 0x63a88002),
-            TOBN(0x6c7a9a54, 0xc91d45b9), TOBN(0xdf1a38bb, 0xfd004f56),
-            TOBN(0x2e8c9a26, 0xb8bad853), TOBN(0x2d52cea3, 0x3723eae7),
-            TOBN(0x054d6d81, 0x56ca2830), TOBN(0xa3317d14, 0x9a8dc411),
-            TOBN(0xa08662fe, 0xfd4ddeda), TOBN(0xed2a153a, 0xb55d792b),
-            TOBN(0x7035c16a, 0xbfc6e944), TOBN(0xb6bc5834, 0x00171cf3),
-            TOBN(0xe27152b3, 0x83d102b6), TOBN(0xfe695a47, 0x0646b848),
-            TOBN(0xa5bb09d8, 0x916e6d37), TOBN(0xb4269d64, 0x0d17015e),
-            TOBN(0x8d8156a1, 0x0a1d2285), TOBN(0xfeef6c51, 0x46d26d72),
-            TOBN(0x9dac57c8, 0x4c5434a7), TOBN(0x0282e5be, 0x59d39e31),
-            TOBN(0xedfff181, 0x721c486d), TOBN(0x301baf10, 0xbc58824e),
-            TOBN(0x8136a6aa, 0x00570031), TOBN(0x55aaf78c, 0x1cddde68),
-            TOBN(0x26829371, 0x59c63952), TOBN(0x3a3bd274, 0x8bc25baf),
-            TOBN(0xecdf8657, 0xb7e52dc3), TOBN(0x2dd8c087, 0xfd78e6c8),
-            TOBN(0x20553274, 0xf5531461), TOBN(0x8b4a1281, 0x5d95499b),
-            TOBN(0xe2c8763a, 0x1a80f9d2), TOBN(0xd1dbe32b, 0x4ddec758),
-            TOBN(0xaf12210d, 0x30c34169), TOBN(0xba74a953, 0x78baa533),
-            TOBN(0x3d133c6e, 0xa438f254), TOBN(0xa431531a, 0x201bef5b),
-            TOBN(0x15295e22, 0xf669d7ec), TOBN(0xca374f64, 0x357fb515),
-            TOBN(0x8a8406ff, 0xeaa3fdb3), TOBN(0x106ae448, 0xdf3f2da8),
-            TOBN(0x8f9b0a90, 0x33c8e9a1), TOBN(0x234645e2, 0x71ad5885),
-            TOBN(0x3d083224, 0x1c0aed14), TOBN(0xf10a7d3e, 0x7a942d46),
-            TOBN(0x7c11deee, 0x40d5c9be), TOBN(0xb2bae7ff, 0xba84ed98),
-            TOBN(0x93e97139, 0xaad58ddd), TOBN(0x3d872796, 0x3f6d1fa3),
-            TOBN(0x483aca81, 0x8569ff13), TOBN(0x8b89a5fb, 0x9a600f72),
-            TOBN(0x4cbc27c3, 0xc06f2b86), TOBN(0x22130713, 0x63ad9c0b),
-            TOBN(0xb5358b1e, 0x48ac2840), TOBN(0x18311294, 0xecba9477),
-            TOBN(0xda58f990, 0xa6946b43), TOBN(0x3098baf9, 0x9ab41819),
-            TOBN(0x66c4c158, 0x4198da52), TOBN(0xab4fc17c, 0x146bfd1b),
-            TOBN(0x2f0a4c3c, 0xbf36a908), TOBN(0x2ae9e34b, 0x58cf7838),
-            TOBN(0xf411529e, 0x3fa11b1f), TOBN(0x21e43677, 0x974af2b4),
-            TOBN(0x7c20958e, 0xc230793b), TOBN(0x710ea885, 0x16e840f3),
-            TOBN(0xfc0b21fc, 0xc5dc67cf), TOBN(0x08d51647, 0x88405718),
-            TOBN(0xd955c21f, 0xcfe49eb7), TOBN(0x9722a5d5, 0x56dd4a1f),
-            TOBN(0xc9ef50e2, 0xc861baa5), TOBN(0xc0c21a5d, 0x9505ac3e),
-            TOBN(0xaf6b9a33, 0x8b7c063f), TOBN(0xc6370339, 0x2f4779c1),
-            TOBN(0x22df99c7, 0x638167c3), TOBN(0xfe6ffe76, 0x795db30c),
-            TOBN(0x2b822d33, 0xa4854989), TOBN(0xfef031dd, 0x30563aa5),
-            TOBN(0x16b09f82, 0xd57c667f), TOBN(0xc70312ce, 0xcc0b76f1),
-            TOBN(0xbf04a9e6, 0xc9118aec), TOBN(0x82fcb419, 0x3409d133),
-            TOBN(0x1a8ab385, 0xab45d44d), TOBN(0xfba07222, 0x617b83a3),
-            TOBN(0xb05f50dd, 0x58e81b52), TOBN(0x1d8db553, 0x21ce5aff),
-            TOBN(0x3097b8d4, 0xe344a873), TOBN(0x7d8d116d, 0xfe36d53e),
-            TOBN(0x6db22f58, 0x7875e750), TOBN(0x2dc5e373, 0x43e144ea),
-            TOBN(0xc05f32e6, 0xe799eb95), TOBN(0xe9e5f4df, 0x6899e6ec),
-            TOBN(0xbdc3bd68, 0x1fab23d5), TOBN(0xb72b8ab7, 0x73af60e6),
-            TOBN(0x8db27ae0, 0x2cecc84a), TOBN(0x600016d8, 0x7bdb871c),
-            TOBN(0x42a44b13, 0xd7c46f58), TOBN(0xb8919727, 0xc3a77d39),
-            TOBN(0xcfc6bbbd, 0xdafd6088), TOBN(0x1a740146, 0x6bd20d39),
-            TOBN(0x8c747abd, 0x98c41072), TOBN(0x4c91e765, 0xbdf68ea1),
-            TOBN(0x7c95e5ca, 0x08819a78), TOBN(0xcf48b729, 0xc9587921),
-            TOBN(0x091c7c5f, 0xdebbcc7d), TOBN(0x6f287404, 0xf0e05149),
-            TOBN(0xf83b5ac2, 0x26cd44ec), TOBN(0x88ae32a6, 0xcfea250e),
-            TOBN(0x6ac5047a, 0x1d06ebc5), TOBN(0xc7e550b4, 0xd434f781),
-            TOBN(0x61ab1cf2, 0x5c727bd2), TOBN(0x2e4badb1, 0x1cf915b0),
-            TOBN(0x1b4dadec, 0xf69d3920), TOBN(0xe61b1ca6, 0xf14c1dfe),
-            TOBN(0x90b479cc, 0xbd6bd51f), TOBN(0x8024e401, 0x8045ec30),
-            TOBN(0xcab29ca3, 0x25ef0e62), TOBN(0x4f2e9416, 0x49e4ebc0),
-            TOBN(0x45eb40ec, 0x0ccced58), TOBN(0x25cd4b9c, 0x0da44f98),
-            TOBN(0x43e06458, 0x871812c6), TOBN(0x99f80d55, 0x16cef651),
-            TOBN(0x571340c9, 0xce6dc153), TOBN(0x138d5117, 0xd8665521),
-            TOBN(0xacdb45bc, 0x4e07014d), TOBN(0x2f34bb38, 0x84b60b91),
-            TOBN(0xf44a4fd2, 0x2ae8921e), TOBN(0xb039288e, 0x892ba1e2),
-            TOBN(0x9da50174, 0xb1c180b2), TOBN(0x6b70ab66, 0x1693dc87),
-            TOBN(0x7e9babc9, 0xe7057481), TOBN(0x4581ddef, 0x9c80dc41),
-            TOBN(0x0c890da9, 0x51294682), TOBN(0x0b5629d3, 0x3f4736e5),
-            TOBN(0x2340c79e, 0xb06f5b41), TOBN(0xa42e84ce, 0x4e243469),
-            TOBN(0xf9a20135, 0x045a71a9), TOBN(0xefbfb415, 0xd27b6fb6),
-            TOBN(0x25ebea23, 0x9d33cd6f), TOBN(0x9caedb88, 0xaa6c0af8),
-            TOBN(0x53dc7e9a, 0xd9ce6f96), TOBN(0x3897f9fd, 0x51e0b15a),
-            TOBN(0xf51cb1f8, 0x8e5d788e), TOBN(0x1aec7ba8, 0xe1d490ee),
-            TOBN(0x265991e0, 0xcc58cb3c), TOBN(0x9f306e8c, 0x9fc3ad31),
-            TOBN(0x5fed006e, 0x5040a0ac), TOBN(0xca9d5043, 0xfb476f2e),
-            TOBN(0xa19c06e8, 0xbeea7a23), TOBN(0xd2865801, 0x0edabb63),
-            TOBN(0xdb92293f, 0x6967469a), TOBN(0x2894d839, 0x8d8a8ed8),
-            TOBN(0x87c9e406, 0xbbc77122), TOBN(0x8671c6f1, 0x2ea3a26a),
-            TOBN(0xe42df8d6, 0xd7de9853), TOBN(0x2e3ce346, 0xb1f2bcc7),
-            TOBN(0xda601dfc, 0x899d50cf), TOBN(0xbfc913de, 0xfb1b598f),
-            TOBN(0x81c4909f, 0xe61f7908), TOBN(0x192e304f, 0x9bbc7b29),
-            TOBN(0xc3ed8738, 0xc104b338), TOBN(0xedbe9e47, 0x783f5d61),
-            TOBN(0x0c06e9be, 0x2db30660), TOBN(0xda3e613f, 0xc0eb7d8e),
-            TOBN(0xd8fa3e97, 0x322e096e), TOBN(0xfebd91e8, 0xd336e247),
-            TOBN(0x8f13ccc4, 0xdf655a49), TOBN(0xa9e00dfc, 0x5eb20210),
-            TOBN(0x84631d0f, 0xc656b6ea), TOBN(0x93a058cd, 0xd8c0d947),
-            TOBN(0x6846904a, 0x67bd3448), TOBN(0x4a3d4e1a, 0xf394fd5c),
-            TOBN(0xc102c1a5, 0xdb225f52), TOBN(0xe3455bba, 0xfc4f5e9a),
-            TOBN(0x6b36985b, 0x4b9ad1ce), TOBN(0xa9818536, 0x5bb7f793),
-            TOBN(0x6c25e1d0, 0x48b1a416), TOBN(0x1381dd53, 0x3c81bee7),
-            TOBN(0xd2a30d61, 0x7a4a7620), TOBN(0xc8412926, 0x39b8944c),
-            TOBN(0x3c1c6fbe, 0x7a97c33a), TOBN(0x941e541d, 0x938664e7),
-            TOBN(0x417499e8, 0x4a34f239), TOBN(0x15fdb83c, 0xb90402d5),
-            TOBN(0xb75f46bf, 0x433aa832), TOBN(0xb61e15af, 0x63215db1),
-            TOBN(0xaabe59d4, 0xa127f89a), TOBN(0x5d541e0c, 0x07e816da),
-            TOBN(0xaaba0659, 0xa618b692), TOBN(0x55327733, 0x17266026),
-            TOBN(0xaf53a0fc, 0x95f57552), TOBN(0x32947650, 0x6cacb0c9),
-            TOBN(0x253ff58d, 0xc821be01), TOBN(0xb0309531, 0xa06f1146),
-            TOBN(0x59bbbdf5, 0x05c2e54d), TOBN(0x158f27ad, 0x26e8dd22),
-            TOBN(0xcc5b7ffb, 0x397e1e53), TOBN(0xae03f65b, 0x7fc1e50d),
-            TOBN(0xa9784ebd, 0x9c95f0f9), TOBN(0x5ed9deb2, 0x24640771),
-            TOBN(0x31244af7, 0x035561c4), TOBN(0x87332f3a, 0x7ee857de),
-            TOBN(0x09e16e9e, 0x2b9e0d88), TOBN(0x52d910f4, 0x56a06049),
-            TOBN(0x507ed477, 0xa9592f48), TOBN(0x85cb917b, 0x2365d678),
-            TOBN(0xf8511c93, 0x4c8998d1), TOBN(0x2186a3f1, 0x730ea58f),
-            TOBN(0x50189626, 0xb2029db0), TOBN(0x9137a6d9, 0x02ceb75a),
-            TOBN(0x2fe17f37, 0x748bc82c), TOBN(0x87c2e931, 0x80469f8c),
-            TOBN(0x850f71cd, 0xbf891aa2), TOBN(0x0ca1b89b, 0x75ec3d8d),
-            TOBN(0x516c43aa, 0x5e1cd3cd), TOBN(0x89397808, 0x9a887c28),
-            TOBN(0x0059c699, 0xddea1f9f), TOBN(0x7737d6fa, 0x8e6868f7),
-            TOBN(0x6d93746a, 0x60f1524b), TOBN(0x36985e55, 0xba052aa7),
-            TOBN(0x41b1d322, 0xed923ea5), TOBN(0x3429759f, 0x25852a11),
-            TOBN(0xbeca6ec3, 0x092e9f41), TOBN(0x3a238c66, 0x62256bbd),
-            TOBN(0xd82958ea, 0x70ad487d), TOBN(0x4ac8aaf9, 0x65610d93),
-            TOBN(0x3fa101b1, 0x5e4ccab0), TOBN(0x9bf430f2, 0x9de14bfb),
-            TOBN(0xa10f5cc6, 0x6531899d), TOBN(0x590005fb, 0xea8ce17d),
-            TOBN(0xc437912f, 0x24544cb6), TOBN(0x9987b71a, 0xd79ac2e3),
-            TOBN(0x13e3d9dd, 0xc058a212), TOBN(0x00075aac, 0xd2de9606),
-            TOBN(0x80ab508b, 0x6cac8369), TOBN(0x87842be7, 0xf54f6c89),
-            TOBN(0xa7ad663d, 0x6bc532a4), TOBN(0x67813de7, 0x78a91bc8),
-            TOBN(0x5dcb61ce, 0xc3427239), TOBN(0x5f3c7cf0, 0xc56934d9),
-            TOBN(0xc079e0fb, 0xe3191591), TOBN(0xe40896bd, 0xb01aada7),
-            TOBN(0x8d466791, 0x0492d25f), TOBN(0x8aeb30c9, 0xe7408276),
-            TOBN(0xe9437495, 0x9287aacc), TOBN(0x23d4708d, 0x79fe03d4),
-            TOBN(0x8cda9cf2, 0xd0c05199), TOBN(0x502fbc22, 0xfae78454),
-            TOBN(0xc0bda9df, 0xf572a182), TOBN(0x5f9b71b8, 0x6158b372),
-            TOBN(0xe0f33a59, 0x2b82dd07), TOBN(0x76302735, 0x9523032e),
-            TOBN(0x7fe1a721, 0xc4505a32), TOBN(0x7b6e3e82, 0xf796409f),
-        },
-        {
-            TOBN(0xe3417bc0, 0x35d0b34a), TOBN(0x440b386b, 0x8327c0a7),
-            TOBN(0x8fb7262d, 0xac0362d1), TOBN(0x2c41114c, 0xe0cdf943),
-            TOBN(0x2ba5cef1, 0xad95a0b1), TOBN(0xc09b37a8, 0x67d54362),
-            TOBN(0x26d6cdd2, 0x01e486c9), TOBN(0x20477abf, 0x42ff9297),
-            TOBN(0xa004dcb3, 0x292a9287), TOBN(0xddc15cf6, 0x77b092c7),
-            TOBN(0x083a8464, 0x806c0605), TOBN(0x4a68df70, 0x3db997b0),
-            TOBN(0x9c134e45, 0x05bf7dd0), TOBN(0xa4e63d39, 0x8ccf7f8c),
-            TOBN(0xa6e6517f, 0x41b5f8af), TOBN(0xaa8b9342, 0xad7bc1cc),
-            TOBN(0x126f35b5, 0x1e706ad9), TOBN(0xb99cebb4, 0xc3a9ebdf),
-            TOBN(0xa75389af, 0xbf608d90), TOBN(0x76113c4f, 0xc6c89858),
-            TOBN(0x80de8eb0, 0x97e2b5aa), TOBN(0x7e1022cc, 0x63b91304),
-            TOBN(0x3bdab605, 0x6ccc066c), TOBN(0x33cbb144, 0xb2edf900),
-            TOBN(0xc4176471, 0x7af715d2), TOBN(0xe2f7f594, 0xd0134a96),
-            TOBN(0x2c1873ef, 0xa41ec956), TOBN(0xe4e7b4f6, 0x77821304),
-            TOBN(0xe5c8ff97, 0x88d5374a), TOBN(0x2b915e63, 0x80823d5b),
-            TOBN(0xea6bc755, 0xb2ee8fe2), TOBN(0x6657624c, 0xe7112651),
-            TOBN(0x157af101, 0xdace5aca), TOBN(0xc4fdbcf2, 0x11a6a267),
-            TOBN(0xdaddf340, 0xc49c8609), TOBN(0x97e49f52, 0xe9604a65),
-            TOBN(0x9be8e790, 0x937e2ad5), TOBN(0x846e2508, 0x326e17f1),
-            TOBN(0x3f38007a, 0x0bbbc0dc), TOBN(0xcf03603f, 0xb11e16d6),
-            TOBN(0xd6f800e0, 0x7442f1d5), TOBN(0x475607d1, 0x66e0e3ab),
-            TOBN(0x82807f16, 0xb7c64047), TOBN(0x8858e1e3, 0xa749883d),
-            TOBN(0x5859120b, 0x8231ee10), TOBN(0x1b80e7eb, 0x638a1ece),
-            TOBN(0xcb72525a, 0xc6aa73a4), TOBN(0xa7cdea3d, 0x844423ac),
-            TOBN(0x5ed0c007, 0xf8ae7c38), TOBN(0x6db07a5c, 0x3d740192),
-            TOBN(0xbe5e9c2a, 0x5fe36db3), TOBN(0xd5b9d57a, 0x76e95046),
-            TOBN(0x54ac32e7, 0x8eba20f2), TOBN(0xef11ca8f, 0x71b9a352),
-            TOBN(0x305e373e, 0xff98a658), TOBN(0xffe5a100, 0x823eb667),
-            TOBN(0x57477b11, 0xe51732d2), TOBN(0xdfd6eb28, 0x2538fc0e),
-            TOBN(0x5c43b0cc, 0x3b39eec5), TOBN(0x6af12778, 0xcb36cc57),
-            TOBN(0x70b0852d, 0x06c425ae), TOBN(0x6df92f8c, 0x5c221b9b),
-            TOBN(0x6c8d4f9e, 0xce826d9c), TOBN(0xf59aba7b, 0xb49359c3),
-            TOBN(0x5c8ed8d5, 0xda64309d), TOBN(0x61a6de56, 0x91b30704),
-            TOBN(0xd6b52f6a, 0x2f9b5808), TOBN(0x0eee4194, 0x98c958a7),
-            TOBN(0xcddd9aab, 0x771e4caa), TOBN(0x83965dfd, 0x78bc21be),
-            TOBN(0x02affce3, 0xb3b504f5), TOBN(0x30847a21, 0x561c8291),
-            TOBN(0xd2eb2cf1, 0x52bfda05), TOBN(0xe0e4c4e9, 0x6197b98c),
-            TOBN(0x1d35076c, 0xf8a1726f), TOBN(0x6c06085b, 0x2db11e3d),
-            TOBN(0x15c0c4d7, 0x4463ba14), TOBN(0x9d292f83, 0x0030238c),
-            TOBN(0x1311ee8b, 0x3727536d), TOBN(0xfeea86ef, 0xbeaedc1e),
-            TOBN(0xb9d18cd3, 0x66131e2e), TOBN(0xf31d974f, 0x80fe2682),
-            TOBN(0xb6e49e0f, 0xe4160289), TOBN(0x7c48ec0b, 0x08e92799),
-            TOBN(0x818111d8, 0xd1989aa7), TOBN(0xb34fa0aa, 0xebf926f9),
-            TOBN(0xdb5fe2f5, 0xa245474a), TOBN(0xf80a6ebb, 0x3c7ca756),
-            TOBN(0xa7f96054, 0xafa05dd8), TOBN(0x26dfcf21, 0xfcaf119e),
-            TOBN(0xe20ef2e3, 0x0564bb59), TOBN(0xef4dca50, 0x61cb02b8),
-            TOBN(0xcda7838a, 0x65d30672), TOBN(0x8b08d534, 0xfd657e86),
-            TOBN(0x4c5b4395, 0x46d595c8), TOBN(0x39b58725, 0x425cb836),
-            TOBN(0x8ea61059, 0x3de9abe3), TOBN(0x40434881, 0x9cdc03be),
-            TOBN(0x9b261245, 0xcfedce8c), TOBN(0x78c318b4, 0xcf5234a1),
-            TOBN(0x510bcf16, 0xfde24c99), TOBN(0x2a77cb75, 0xa2c2ff5d),
-            TOBN(0x9c895c2b, 0x27960fb4), TOBN(0xd30ce975, 0xb0eda42b),
-            TOBN(0xfda85393, 0x1a62cc26), TOBN(0x23c69b96, 0x50c0e052),
-            TOBN(0xa227df15, 0xbfc633f3), TOBN(0x2ac78848, 0x1bae7d48),
-            TOBN(0x487878f9, 0x187d073d), TOBN(0x6c2be919, 0x967f807d),
-            TOBN(0x765861d8, 0x336e6d8f), TOBN(0x88b8974c, 0xce528a43),
-            TOBN(0x09521177, 0xff57d051), TOBN(0x2ff38037, 0xfb6a1961),
-            TOBN(0xfc0aba74, 0xa3d76ad4), TOBN(0x7c764803, 0x25a7ec17),
-            TOBN(0x7532d75f, 0x48879bc8), TOBN(0xea7eacc0, 0x58ce6bc1),
-            TOBN(0xc82176b4, 0x8e896c16), TOBN(0x9a30e0b2, 0x2c750fed),
-            TOBN(0xc37e2c2e, 0x421d3aa4), TOBN(0xf926407c, 0xe84fa840),
-            TOBN(0x18abc03d, 0x1454e41c), TOBN(0x26605ecd, 0x3f7af644),
-            TOBN(0x242341a6, 0xd6a5eabf), TOBN(0x1edb84f4, 0x216b668e),
-            TOBN(0xd836edb8, 0x04010102), TOBN(0x5b337ce7, 0x945e1d8c),
-            TOBN(0xd2075c77, 0xc055dc14), TOBN(0x2a0ffa25, 0x81d89cdf),
-            TOBN(0x8ce815ea, 0x6ffdcbaf), TOBN(0xa3428878, 0xfb648867),
-            TOBN(0x277699cf, 0x884655fb), TOBN(0xfa5b5bd6, 0x364d3e41),
-            TOBN(0x01f680c6, 0x441e1cb7), TOBN(0x3fd61e66, 0xb70a7d67),
-            TOBN(0x666ba2dc, 0xcc78cf66), TOBN(0xb3018174, 0x6fdbff77),
-            TOBN(0x8d4dd0db, 0x168d4668), TOBN(0x259455d0, 0x1dab3a2a),
-            TOBN(0xf58564c5, 0xcde3acec), TOBN(0x77141925, 0x13adb276),
-            TOBN(0x527d725d, 0x8a303f65), TOBN(0x55deb6c9, 0xe6f38f7b),
-            TOBN(0xfd5bb657, 0xb1fa70fb), TOBN(0xfa07f50f, 0xd8073a00),
-            TOBN(0xf72e3aa7, 0xbca02500), TOBN(0xf68f895d, 0x9975740d),
-            TOBN(0x30112060, 0x5cae2a6a), TOBN(0x01bd7218, 0x02874842),
-            TOBN(0x3d423891, 0x7ce47bd3), TOBN(0xa66663c1, 0x789544f6),
-            TOBN(0x864d05d7, 0x3272d838), TOBN(0xe22924f9, 0xfa6295c5),
-            TOBN(0x8189593f, 0x6c2fda32), TOBN(0x330d7189, 0xb184b544),
-            TOBN(0x79efa62c, 0xbde1f714), TOBN(0x35771c94, 0xe5cb1a63),
-            TOBN(0x2f4826b8, 0x641c8332), TOBN(0x00a894fb, 0xc8cee854),
-            TOBN(0xb4b9a39b, 0x36194d40), TOBN(0xe857a7c5, 0x77612601),
-            TOBN(0xf4209dd2, 0x4ecf2f58), TOBN(0x82b9e66d, 0x5a033487),
-            TOBN(0xc1e36934, 0xe4e8b9dd), TOBN(0xd2372c9d, 0xa42377d7),
-            TOBN(0x51dc94c7, 0x0e3ae43b), TOBN(0x4c57761e, 0x04474f6f),
-            TOBN(0xdcdacd0a, 0x1058a318), TOBN(0x369cf3f5, 0x78053a9a),
-            TOBN(0xc6c3de50, 0x31c68de2), TOBN(0x4653a576, 0x3c4b6d9f),
-            TOBN(0x1688dd5a, 0xaa4e5c97), TOBN(0x5be80aa1, 0xb7ab3c74),
-            TOBN(0x70cefe7c, 0xbc65c283), TOBN(0x57f95f13, 0x06867091),
-            TOBN(0xa39114e2, 0x4415503b), TOBN(0xc08ff7c6, 0x4cbb17e9),
-            TOBN(0x1eff674d, 0xd7dec966), TOBN(0x6d4690af, 0x53376f63),
-            TOBN(0xff6fe32e, 0xea74237b), TOBN(0xc436d17e, 0xcd57508e),
-            TOBN(0x15aa28e1, 0xedcc40fe), TOBN(0x0d769c04, 0x581bbb44),
-            TOBN(0xc240b6de, 0x34eaacda), TOBN(0xd9e116e8, 0x2ba0f1de),
-            TOBN(0xcbe45ec7, 0x79438e55), TOBN(0x91787c9d, 0x96f752d7),
-            TOBN(0x897f532b, 0xf129ac2f), TOBN(0xd307b7c8, 0x5a36e22c),
-            TOBN(0x91940675, 0x749fb8f3), TOBN(0xd14f95d0, 0x157fdb28),
-            TOBN(0xfe51d029, 0x6ae55043), TOBN(0x8931e98f, 0x44a87de1),
-            TOBN(0xe57f1cc6, 0x09e4fee2), TOBN(0x0d063b67, 0x4e072d92),
-            TOBN(0x70a998b9, 0xed0e4316), TOBN(0xe74a736b, 0x306aca46),
-            TOBN(0xecf0fbf2, 0x4fda97c7), TOBN(0xa40f65cb, 0x3e178d93),
-            TOBN(0x16253604, 0x16df4285), TOBN(0xb0c9babb, 0xd0c56ae2),
-            TOBN(0x73032b19, 0xcfc5cfc3), TOBN(0xe497e5c3, 0x09752056),
-            TOBN(0x12096bb4, 0x164bda96), TOBN(0x1ee42419, 0xa0b74da1),
-            TOBN(0x8fc36243, 0x403826ba), TOBN(0x0c8f0069, 0xdc09e660),
-            TOBN(0x8667e981, 0xc27253c9), TOBN(0x05a6aefb, 0x92b36a45),
-            TOBN(0xa62c4b36, 0x9cb7bb46), TOBN(0x8394f375, 0x11f7027b),
-            TOBN(0x747bc79c, 0x5f109d0f), TOBN(0xcad88a76, 0x5b8cc60a),
-            TOBN(0x80c5a66b, 0x58f09e68), TOBN(0xe753d451, 0xf6127eac),
-            TOBN(0xc44b74a1, 0x5b0ec6f5), TOBN(0x47989fe4, 0x5289b2b8),
-            TOBN(0x745f8484, 0x58d6fc73), TOBN(0xec362a6f, 0xf61c70ab),
-            TOBN(0x070c98a7, 0xb3a8ad41), TOBN(0x73a20fc0, 0x7b63db51),
-            TOBN(0xed2c2173, 0xf44c35f4), TOBN(0x8a56149d, 0x9acc9dca),
-            TOBN(0x98f17881, 0x9ac6e0f4), TOBN(0x360fdeaf, 0xa413b5ed),
-            TOBN(0x0625b8f4, 0xa300b0fd), TOBN(0xf1f4d76a, 0x5b3222d3),
-            TOBN(0x9d6f5109, 0x587f76b8), TOBN(0x8b4ee08d, 0x2317fdb5),
-            TOBN(0x88089bb7, 0x8c68b095), TOBN(0x95570e9a, 0x5808d9b9),
-            TOBN(0xa395c36f, 0x35d33ae7), TOBN(0x200ea123, 0x50bb5a94),
-            TOBN(0x20c789bd, 0x0bafe84b), TOBN(0x243ef52d, 0x0919276a),
-            TOBN(0x3934c577, 0xe23ae233), TOBN(0xb93807af, 0xa460d1ec),
-            TOBN(0xb72a53b1, 0xf8fa76a4), TOBN(0xd8914cb0, 0xc3ca4491),
-            TOBN(0x2e128494, 0x3fb42622), TOBN(0x3b2700ac, 0x500907d5),
-            TOBN(0xf370fb09, 0x1a95ec63), TOBN(0xf8f30be2, 0x31b6dfbd),
-            TOBN(0xf2b2f8d2, 0x69e55f15), TOBN(0x1fead851, 0xcc1323e9),
-            TOBN(0xfa366010, 0xd9e5eef6), TOBN(0x64d487b0, 0xe316107e),
-            TOBN(0x4c076b86, 0xd23ddc82), TOBN(0x03fd344c, 0x7e0143f0),
-            TOBN(0xa95362ff, 0x317af2c5), TOBN(0x0add3db7, 0xe18b7a4f),
-            TOBN(0x9c673e3f, 0x8260e01b), TOBN(0xfbeb49e5, 0x54a1cc91),
-            TOBN(0x91351bf2, 0x92f2e433), TOBN(0xc755e7ec, 0x851141eb),
-            TOBN(0xc9a95139, 0x29607745), TOBN(0x0ca07420, 0xa26f2b28),
-            TOBN(0xcb2790e7, 0x4bc6f9dd), TOBN(0x345bbb58, 0xadcaffc0),
-            TOBN(0xc65ea38c, 0xbe0f27a2), TOBN(0x67c24d7c, 0x641fcb56),
-            TOBN(0x2c25f0a7, 0xa9e2c757), TOBN(0x93f5cdb0, 0x16f16c49),
-            TOBN(0x2ca5a9d7, 0xc5ee30a1), TOBN(0xd1593635, 0xb909b729),
-            TOBN(0x804ce9f3, 0xdadeff48), TOBN(0xec464751, 0xb07c30c3),
-            TOBN(0x89d65ff3, 0x9e49af6a), TOBN(0xf2d6238a, 0x6f3d01bc),
-            TOBN(0x1095561e, 0x0bced843), TOBN(0x51789e12, 0xc8a13fd8),
-            TOBN(0xd633f929, 0x763231df), TOBN(0x46df9f7d, 0xe7cbddef),
-            TOBN(0x01c889c0, 0xcb265da8), TOBN(0xfce1ad10, 0xaf4336d2),
-            TOBN(0x8d110df6, 0xfc6a0a7e), TOBN(0xdd431b98, 0x6da425dc),
-            TOBN(0xcdc4aeab, 0x1834aabe), TOBN(0x84deb124, 0x8439b7fc),
-            TOBN(0x8796f169, 0x3c2a5998), TOBN(0x9b9247b4, 0x7947190d),
-            TOBN(0x55b9d9a5, 0x11597014), TOBN(0x7e9dd70d, 0x7b1566ee),
-            TOBN(0x94ad78f7, 0xcbcd5e64), TOBN(0x0359ac17, 0x9bd4c032),
-            TOBN(0x3b11baaf, 0x7cc222ae), TOBN(0xa6a6e284, 0xba78e812),
-            TOBN(0x8392053f, 0x24cea1a0), TOBN(0xc97bce4a, 0x33621491),
-            TOBN(0x7eb1db34, 0x35399ee9), TOBN(0x473f78ef, 0xece81ad1),
-            TOBN(0x41d72fe0, 0xf63d3d0d), TOBN(0xe620b880, 0xafab62fc),
-            TOBN(0x92096bc9, 0x93158383), TOBN(0x41a21357, 0x8f896f6c),
-            TOBN(0x1b5ee2fa, 0xc7dcfcab), TOBN(0x650acfde, 0x9546e007),
-            TOBN(0xc081b749, 0xb1b02e07), TOBN(0xda9e41a0, 0xf9eca03d),
-            TOBN(0x013ba727, 0x175a54ab), TOBN(0xca0cd190, 0xea5d8d10),
-            TOBN(0x85ea52c0, 0x95fd96a9), TOBN(0x2c591b9f, 0xbc5c3940),
-            TOBN(0x6fb4d4e4, 0x2bad4d5f), TOBN(0xfa4c3590, 0xfef0059b),
-            TOBN(0x6a10218a, 0xf5122294), TOBN(0x9a78a81a, 0xa85751d1),
-            TOBN(0x04f20579, 0xa98e84e7), TOBN(0xfe1242c0, 0x4997e5b5),
-            TOBN(0xe77a273b, 0xca21e1e4), TOBN(0xfcc8b1ef, 0x9411939d),
-            TOBN(0xe20ea302, 0x92d0487a), TOBN(0x1442dbec, 0x294b91fe),
-            TOBN(0x1f7a4afe, 0xbb6b0e8f), TOBN(0x1700ef74, 0x6889c318),
-            TOBN(0xf5bbffc3, 0x70f1fc62), TOBN(0x3b31d4b6, 0x69c79cca),
-            TOBN(0xe8bc2aab, 0xa7f6340d), TOBN(0xb0b08ab4, 0xa725e10a),
-            TOBN(0x44f05701, 0xae340050), TOBN(0xba4b3016, 0x1cf0c569),
-            TOBN(0x5aa29f83, 0xfbe19a51), TOBN(0x1b9ed428, 0xb71d752e),
-            TOBN(0x1666e54e, 0xeb4819f5), TOBN(0x616cdfed, 0x9e18b75b),
-            TOBN(0x112ed5be, 0x3ee27b0b), TOBN(0xfbf28319, 0x44c7de4d),
-            TOBN(0xd685ec85, 0xe0e60d84), TOBN(0x68037e30, 0x1db7ee78),
-            TOBN(0x5b65bdcd, 0x003c4d6e), TOBN(0x33e7363a, 0x93e29a6a),
-            TOBN(0x995b3a61, 0x08d0756c), TOBN(0xd727f85c, 0x2faf134b),
-            TOBN(0xfac6edf7, 0x1d337823), TOBN(0x99b9aa50, 0x0439b8b4),
-            TOBN(0x722eb104, 0xe2b4e075), TOBN(0x49987295, 0x437c4926),
-            TOBN(0xb1e4c0e4, 0x46a9b82d), TOBN(0xd0cb3197, 0x57a006f5),
-            TOBN(0xf3de0f7d, 0xd7808c56), TOBN(0xb5c54d8f, 0x51f89772),
-            TOBN(0x500a114a, 0xadbd31aa), TOBN(0x9afaaaa6, 0x295f6cab),
-            TOBN(0x94705e21, 0x04cf667a), TOBN(0xfc2a811b, 0x9d3935d7),
-            TOBN(0x560b0280, 0x6d09267c), TOBN(0xf19ed119, 0xf780e53b),
-            TOBN(0xf0227c09, 0x067b6269), TOBN(0x967b8533, 0x5caef599),
-            TOBN(0x155b9243, 0x68efeebc), TOBN(0xcd6d34f5, 0xc497bae6),
-            TOBN(0x1dd8d5d3, 0x6cceb370), TOBN(0x2aeac579, 0xa78d7bf9),
-            TOBN(0x5d65017d, 0x70b67a62), TOBN(0x70c8e44f, 0x17c53f67),
-            TOBN(0xd1fc0950, 0x86a34d09), TOBN(0xe0fca256, 0xe7134907),
-            TOBN(0xe24fa29c, 0x80fdd315), TOBN(0x2c4acd03, 0xd87499ad),
-            TOBN(0xbaaf7517, 0x3b5a9ba6), TOBN(0xb9cbe1f6, 0x12e51a51),
-            TOBN(0xd88edae3, 0x5e154897), TOBN(0xe4309c3c, 0x77b66ca0),
-            TOBN(0xf5555805, 0xf67f3746), TOBN(0x85fc37ba, 0xa36401ff),
-            TOBN(0xdf86e2ca, 0xd9499a53), TOBN(0x6270b2a3, 0xecbc955b),
-            TOBN(0xafae64f5, 0x974ad33b), TOBN(0x04d85977, 0xfe7b2df1),
-            TOBN(0x2a3db3ff, 0x4ab03f73), TOBN(0x0b87878a, 0x8702740a),
-            TOBN(0x6d263f01, 0x5a061732), TOBN(0xc25430ce, 0xa32a1901),
-            TOBN(0xf7ebab3d, 0xdb155018), TOBN(0x3a86f693, 0x63a9b78e),
-            TOBN(0x349ae368, 0xda9f3804), TOBN(0x470f07fe, 0xa164349c),
-            TOBN(0xd52f4cc9, 0x8562baa5), TOBN(0xc74a9e86, 0x2b290df3),
-            TOBN(0xd3a1aa35, 0x43471a24), TOBN(0x239446be, 0xb8194511),
-            TOBN(0xbec2dd00, 0x81dcd44d), TOBN(0xca3d7f0f, 0xc42ac82d),
-            TOBN(0x1f3db085, 0xfdaf4520), TOBN(0xbb6d3e80, 0x4549daf2),
-            TOBN(0xf5969d8a, 0x19ad5c42), TOBN(0x7052b13d, 0xdbfd1511),
-            TOBN(0x11890d1b, 0x682b9060), TOBN(0xa71d3883, 0xac34452c),
-            TOBN(0xa438055b, 0x783805b4), TOBN(0x43241277, 0x4725b23e),
-            TOBN(0xf20cf96e, 0x4901bbed), TOBN(0x6419c710, 0xf432a2bb),
-            TOBN(0x57a0fbb9, 0xdfa9cd7d), TOBN(0x589111e4, 0x00daa249),
-            TOBN(0x19809a33, 0x7b60554e), TOBN(0xea5f8887, 0xede283a4),
-            TOBN(0x2d713802, 0x503bfd35), TOBN(0x151bb0af, 0x585d2a53),
-            TOBN(0x40b08f74, 0x43b30ca8), TOBN(0xe10b5bba, 0xd9934583),
-            TOBN(0xe8a546d6, 0xb51110ad), TOBN(0x1dd50e66, 0x28e0b6c5),
-            TOBN(0x292e9d54, 0xcff2b821), TOBN(0x3882555d, 0x47281760),
-            TOBN(0x134838f8, 0x3724d6e3), TOBN(0xf2c679e0, 0x22ddcda1),
-            TOBN(0x40ee8815, 0x6d2a5768), TOBN(0x7f227bd2, 0x1c1e7e2d),
-            TOBN(0x487ba134, 0xd04ff443), TOBN(0x76e2ff3d, 0xc614e54b),
-            TOBN(0x36b88d6f, 0xa3177ec7), TOBN(0xbf731d51, 0x2328fff5),
-            TOBN(0x758caea2, 0x49ba158e), TOBN(0x5ab8ff4c, 0x02938188),
-            TOBN(0x33e16056, 0x35edc56d), TOBN(0x5a69d349, 0x7e940d79),
-            TOBN(0x6c4fd001, 0x03866dcb), TOBN(0x20a38f57, 0x4893cdef),
-            TOBN(0xfbf3e790, 0xfac3a15b), TOBN(0x6ed7ea2e, 0x7a4f8e6b),
-            TOBN(0xa663eb4f, 0xbc3aca86), TOBN(0x22061ea5, 0x080d53f7),
-            TOBN(0x2480dfe6, 0xf546783f), TOBN(0xd38bc6da, 0x5a0a641e),
-            TOBN(0xfb093cd1, 0x2ede8965), TOBN(0x89654db4, 0xacb455cf),
-            TOBN(0x413cbf9a, 0x26e1adee), TOBN(0x291f3764, 0x373294d4),
-            TOBN(0x00797257, 0x648083fe), TOBN(0x25f504d3, 0x208cc341),
-            TOBN(0x635a8e5e, 0xc3a0ee43), TOBN(0x70aaebca, 0x679898ff),
-            TOBN(0x9ee9f547, 0x5dc63d56), TOBN(0xce987966, 0xffb34d00),
-            TOBN(0xf9f86b19, 0x5e26310a), TOBN(0x9e435484, 0x382a8ca8),
-            TOBN(0x253bcb81, 0xc2352fe4), TOBN(0xa4eac8b0, 0x4474b571),
-            TOBN(0xc1b97512, 0xc1ad8cf8), TOBN(0x193b4e9e, 0x99e0b697),
-            TOBN(0x939d2716, 0x01e85df0), TOBN(0x4fb265b3, 0xcd44eafd),
-            TOBN(0x321e7dcd, 0xe51e1ae2), TOBN(0x8e3a8ca6, 0xe3d8b096),
-            TOBN(0x8de46cb0, 0x52604998), TOBN(0x91099ad8, 0x39072aa7),
-            TOBN(0x2617f91c, 0x93aa96b8), TOBN(0x0fc8716b, 0x7fca2e13),
-            TOBN(0xa7106f5e, 0x95328723), TOBN(0xd1c9c40b, 0x262e6522),
-            TOBN(0xb9bafe86, 0x42b7c094), TOBN(0x1873439d, 0x1543c021),
-            TOBN(0xe1baa5de, 0x5cbefd5d), TOBN(0xa363fc5e, 0x521e8aff),
-            TOBN(0xefe6320d, 0xf862eaac), TOBN(0x14419c63, 0x22c647dc),
-            TOBN(0x0e06707c, 0x4e46d428), TOBN(0xcb6c834f, 0x4a178f8f),
-            TOBN(0x0f993a45, 0xd30f917c), TOBN(0xd4c4b049, 0x9879afee),
-            TOBN(0xb6142a1e, 0x70500063), TOBN(0x7c9b41c3, 0xa5d9d605),
-            TOBN(0xbc00fc2f, 0x2f8ba2c7), TOBN(0x0966eb2f, 0x7c67aa28),
-            TOBN(0x13f7b516, 0x5a786972), TOBN(0x3bfb7557, 0x8a2fbba0),
-            TOBN(0x131c4f23, 0x5a2b9620), TOBN(0xbff3ed27, 0x6faf46be),
-            TOBN(0x9b4473d1, 0x7e172323), TOBN(0x421e8878, 0x339f6246),
-            TOBN(0x0fa8587a, 0x25a41632), TOBN(0xc0814124, 0xa35b6c93),
-            TOBN(0x2b18a9f5, 0x59ebb8db), TOBN(0x264e3357, 0x76edb29c),
-            TOBN(0xaf245ccd, 0xc87c51e2), TOBN(0x16b3015b, 0x501e6214),
-            TOBN(0xbb31c560, 0x0a3882ce), TOBN(0x6961bb94, 0xfec11e04),
-            TOBN(0x3b825b8d, 0xeff7a3a0), TOBN(0xbec33738, 0xb1df7326),
-            TOBN(0x68ad747c, 0x99604a1f), TOBN(0xd154c934, 0x9a3bd499),
-            TOBN(0xac33506f, 0x1cc7a906), TOBN(0x73bb5392, 0x6c560e8f),
-            TOBN(0x6428fcbe, 0x263e3944), TOBN(0xc11828d5, 0x1c387434),
-            TOBN(0x3cd04be1, 0x3e4b12ff), TOBN(0xc3aad9f9, 0x2d88667c),
-            TOBN(0xc52ddcf8, 0x248120cf), TOBN(0x985a892e, 0x2a389532),
-            TOBN(0xfbb4b21b, 0x3bb85fa0), TOBN(0xf95375e0, 0x8dfc6269),
-            TOBN(0xfb4fb06c, 0x7ee2acea), TOBN(0x6785426e, 0x309c4d1f),
-            TOBN(0x659b17c8, 0xd8ceb147), TOBN(0x9b649eee, 0xb70a5554),
-            TOBN(0x6b7fa0b5, 0xac6bc634), TOBN(0xd99fe2c7, 0x1d6e732f),
-            TOBN(0x30e6e762, 0x8d3abba2), TOBN(0x18fee6e7, 0xa797b799),
-            TOBN(0x5c9d360d, 0xc696464d), TOBN(0xe3baeb48, 0x27bfde12),
-            TOBN(0x2bf5db47, 0xf23206d5), TOBN(0x2f6d3420, 0x1d260152),
-            TOBN(0x17b87653, 0x3f8ff89a), TOBN(0x5157c30c, 0x378fa458),
-            TOBN(0x7517c5c5, 0x2d4fb936), TOBN(0xef22f7ac, 0xe6518cdc),
-            TOBN(0xdeb483e6, 0xbf847a64), TOBN(0xf5084558, 0x92e0fa89),
-        },
-        {
-            TOBN(0xab9659d8, 0xdf7304d4), TOBN(0xb71bcf1b, 0xff210e8e),
-            TOBN(0xa9a2438b, 0xd73fbd60), TOBN(0x4595cd1f, 0x5d11b4de),
-            TOBN(0x9c0d329a, 0x4835859d), TOBN(0x4a0f0d2d, 0x7dbb6e56),
-            TOBN(0xc6038e5e, 0xdf928a4e), TOBN(0xc9429621, 0x8f5ad154),
-            TOBN(0x91213462, 0xf23f2d92), TOBN(0x6cab71bd, 0x60b94078),
-            TOBN(0x6bdd0a63, 0x176cde20), TOBN(0x54c9b20c, 0xee4d54bc),
-            TOBN(0x3cd2d8aa, 0x9f2ac02f), TOBN(0x03f8e617, 0x206eedb0),
-            TOBN(0xc7f68e16, 0x93086434), TOBN(0x831469c5, 0x92dd3db9),
-            TOBN(0x8521df24, 0x8f981354), TOBN(0x587e23ec, 0x3588a259),
-            TOBN(0xcbedf281, 0xd7a0992c), TOBN(0x06930a55, 0x38961407),
-            TOBN(0x09320deb, 0xbe5bbe21), TOBN(0xa7ffa5b5, 0x2491817f),
-            TOBN(0xe6c8b4d9, 0x09065160), TOBN(0xac4f3992, 0xfff6d2a9),
-            TOBN(0x7aa7a158, 0x3ae9c1bd), TOBN(0xe0af6d98, 0xe37ce240),
-            TOBN(0xe54342d9, 0x28ab38b4), TOBN(0xe8b75007, 0x0a1c98ca),
-            TOBN(0xefce86af, 0xe02358f2), TOBN(0x31b8b856, 0xea921228),
-            TOBN(0x052a1912, 0x0a1c67fc), TOBN(0xb4069ea4, 0xe3aead59),
-            TOBN(0x3232d6e2, 0x7fa03cb3), TOBN(0xdb938e5b, 0x0fdd7d88),
-            TOBN(0x04c1d2cd, 0x2ccbfc5d), TOBN(0xd2f45c12, 0xaf3a580f),
-            TOBN(0x592620b5, 0x7883e614), TOBN(0x5fd27e68, 0xbe7c5f26),
-            TOBN(0x139e45a9, 0x1567e1e3), TOBN(0x2cc71d2d, 0x44d8aaaf),
-            TOBN(0x4a9090cd, 0xe36d0757), TOBN(0xf722d7b1, 0xd9a29382),
-            TOBN(0xfb7fb04c, 0x04b48ddf), TOBN(0x628ad2a7, 0xebe16f43),
-            TOBN(0xcd3fbfb5, 0x20226040), TOBN(0x6c34ecb1, 0x5104b6c4),
-            TOBN(0x30c0754e, 0xc903c188), TOBN(0xec336b08, 0x2d23cab0),
-            TOBN(0x473d62a2, 0x1e206ee5), TOBN(0xf1e27480, 0x8c49a633),
-            TOBN(0x87ab956c, 0xe9f6b2c3), TOBN(0x61830b48, 0x62b606ea),
-            TOBN(0x67cd6846, 0xe78e815f), TOBN(0xfe40139f, 0x4c02082a),
-            TOBN(0x52bbbfcb, 0x952ec365), TOBN(0x74c11642, 0x6b9836ab),
-            TOBN(0x9f51439e, 0x558df019), TOBN(0x230da4ba, 0xac712b27),
-            TOBN(0x518919e3, 0x55185a24), TOBN(0x4dcefcdd, 0x84b78f50),
-            TOBN(0xa7d90fb2, 0xa47d4c5a), TOBN(0x55ac9abf, 0xb30e009e),
-            TOBN(0xfd2fc359, 0x74eed273), TOBN(0xb72d824c, 0xdbea8faf),
-            TOBN(0xce721a74, 0x4513e2ca), TOBN(0x0b418612, 0x38240b2c),
-            TOBN(0x05199968, 0xd5baa450), TOBN(0xeb1757ed, 0x2b0e8c25),
-            TOBN(0x6ebc3e28, 0x3dfac6d5), TOBN(0xb2431e2e, 0x48a237f5),
-            TOBN(0x2acb5e23, 0x52f61499), TOBN(0x5558a2a7, 0xe06c936b),
-            TOBN(0xd213f923, 0xcbb13d1b), TOBN(0x98799f42, 0x5bfb9bfe),
-            TOBN(0x1ae8ddc9, 0x701144a9), TOBN(0x0b8b3bb6, 0x4c5595ee),
-            TOBN(0x0ea9ef2e, 0x3ecebb21), TOBN(0x17cb6c4b, 0x3671f9a7),
-            TOBN(0x47ef464f, 0x726f1d1f), TOBN(0x171b9484, 0x6943a276),
-            TOBN(0x51a4ae2d, 0x7ef0329c), TOBN(0x08509222, 0x91c4402a),
-            TOBN(0x64a61d35, 0xafd45bbc), TOBN(0x38f096fe, 0x3035a851),
-            TOBN(0xc7468b74, 0xa1dec027), TOBN(0xe8cf10e7, 0x4fc7dcba),
-            TOBN(0xea35ff40, 0xf4a06353), TOBN(0x0b4c0dfa, 0x8b77dd66),
-            TOBN(0x779b8552, 0xde7e5c19), TOBN(0xfab28609, 0xc1c0256c),
-            TOBN(0x64f58eee, 0xabd4743d), TOBN(0x4e8ef838, 0x7b6cc93b),
-            TOBN(0xee650d26, 0x4cb1bf3d), TOBN(0x4c1f9d09, 0x73dedf61),
-            TOBN(0xaef7c9d7, 0xbfb70ced), TOBN(0x1ec0507e, 0x1641de1e),
-            TOBN(0xcd7e5cc7, 0xcde45079), TOBN(0xde173c9a, 0x516ac9e4),
-            TOBN(0x517a8494, 0xc170315c), TOBN(0x438fd905, 0x91d8e8fb),
-            TOBN(0x5145c506, 0xc7d9630b), TOBN(0x6457a87b, 0xf47d4d75),
-            TOBN(0xd31646bf, 0x0d9a80e8), TOBN(0x453add2b, 0xcef3aabe),
-            TOBN(0xc9941109, 0xa607419d), TOBN(0xfaa71e62, 0xbb6bca80),
-            TOBN(0x34158c13, 0x07c431f3), TOBN(0x594abebc, 0x992bc47a),
-            TOBN(0x6dfea691, 0xeb78399f), TOBN(0x48aafb35, 0x3f42cba4),
-            TOBN(0xedcd65af, 0x077c04f0), TOBN(0x1a29a366, 0xe884491a),
-            TOBN(0x023a40e5, 0x1c21f2bf), TOBN(0xf99a513c, 0xa5057aee),
-            TOBN(0xa3fe7e25, 0xbcab072e), TOBN(0x8568d2e1, 0x40e32bcf),
-            TOBN(0x904594eb, 0xd3f69d9f), TOBN(0x181a9733, 0x07affab1),
-            TOBN(0xe4d68d76, 0xb6e330f4), TOBN(0x87a6dafb, 0xc75a7fc1),
-            TOBN(0x549db2b5, 0xef7d9289), TOBN(0x2480d4a8, 0x197f015a),
-            TOBN(0x61d5590b, 0xc40493b6), TOBN(0x3a55b52e, 0x6f780331),
-            TOBN(0x40eb8115, 0x309eadb0), TOBN(0xdea7de5a, 0x92e5c625),
-            TOBN(0x64d631f0, 0xcc6a3d5a), TOBN(0x9d5e9d7c, 0x93e8dd61),
-            TOBN(0xf297bef5, 0x206d3ffc), TOBN(0x23d5e033, 0x7d808bd4),
-            TOBN(0x4a4f6912, 0xd24cf5ba), TOBN(0xe4d8163b, 0x09cdaa8a),
-            TOBN(0x0e0de9ef, 0xd3082e8e), TOBN(0x4fe1246c, 0x0192f360),
-            TOBN(0x1f900150, 0x4b8eee0a), TOBN(0x5219da81, 0xf1da391b),
-            TOBN(0x7bf6a5c1, 0xf7ea25aa), TOBN(0xd165e6bf, 0xfbb07d5f),
-            TOBN(0xe3539361, 0x89e78671), TOBN(0xa3fcac89, 0x2bac4219),
-            TOBN(0xdfab6fd4, 0xf0baa8ab), TOBN(0x5a4adac1, 0xe2c1c2e5),
-            TOBN(0x6cd75e31, 0x40d85849), TOBN(0xce263fea, 0x19b39181),
-            TOBN(0xcb6803d3, 0x07032c72), TOBN(0x7f40d5ce, 0x790968c8),
-            TOBN(0xa6de86bd, 0xdce978f0), TOBN(0x25547c4f, 0x368f751c),
-            TOBN(0xb1e685fd, 0x65fb2a9e), TOBN(0xce69336f, 0x1eb9179c),
-            TOBN(0xb15d1c27, 0x12504442), TOBN(0xb7df465c, 0xb911a06b),
-            TOBN(0xb8d804a3, 0x315980cd), TOBN(0x693bc492, 0xfa3bebf7),
-            TOBN(0x3578aeee, 0x2253c504), TOBN(0x158de498, 0xcd2474a2),
-            TOBN(0x1331f5c7, 0xcfda8368), TOBN(0xd2d7bbb3, 0x78d7177e),
-            TOBN(0xdf61133a, 0xf3c1e46e), TOBN(0x5836ce7d, 0xd30e7be8),
-            TOBN(0x83084f19, 0x94f834cb), TOBN(0xd35653d4, 0x429ed782),
-            TOBN(0xa542f16f, 0x59e58243), TOBN(0xc2b52f65, 0x0470a22d),
-            TOBN(0xe3b6221b, 0x18f23d96), TOBN(0xcb05abac, 0x3f5252b4),
-            TOBN(0xca00938b, 0x87d61402), TOBN(0x2f186cdd, 0x411933e4),
-            TOBN(0xe042ece5, 0x9a29a5c5), TOBN(0xb19b3c07, 0x3b6c8402),
-            TOBN(0xc97667c7, 0x19d92684), TOBN(0xb5624622, 0xebc66372),
-            TOBN(0x0cb96e65, 0x3c04fa02), TOBN(0x83a7176c, 0x8eaa39aa),
-            TOBN(0x2033561d, 0xeaa1633f), TOBN(0x45a9d086, 0x4533df73),
-            TOBN(0xe0542c1d, 0x3dc090bc), TOBN(0x82c996ef, 0xaa59c167),
-            TOBN(0xe3f735e8, 0x0ee7fc4d), TOBN(0x7b179393, 0x7c35db79),
-            TOBN(0xb6419e25, 0xf8c5dbfd), TOBN(0x4d9d7a1e, 0x1f327b04),
-            TOBN(0x979f6f9b, 0x298dfca8), TOBN(0xc7c5dff1, 0x8de9366a),
-            TOBN(0x1b7a588d, 0x04c82bdd), TOBN(0x68005534, 0xf8319dfd),
-            TOBN(0xde8a55b5, 0xd8eb9580), TOBN(0x5ea886da, 0x8d5bca81),
-            TOBN(0xe8530a01, 0x252a0b4d), TOBN(0x1bffb4fe, 0x35eaa0a1),
-            TOBN(0x2ad828b1, 0xd8e99563), TOBN(0x7de96ef5, 0x95f9cd87),
-            TOBN(0x4abb2d0c, 0xd77d970c), TOBN(0x03cfb933, 0xd33ef9cb),
-            TOBN(0xb0547c01, 0x8b211fe9), TOBN(0x2fe64809, 0xa56ed1c6),
-            TOBN(0xcb7d5624, 0xc2ac98cc), TOBN(0x2a1372c0, 0x1a393e33),
-            TOBN(0xc8d1ec1c, 0x29660521), TOBN(0xf3d31b04, 0xb37ac3e9),
-            TOBN(0xa29ae9df, 0x5ece6e7c), TOBN(0x0603ac8f, 0x0facfb55),
-            TOBN(0xcfe85b7a, 0xdda233a5), TOBN(0xe618919f, 0xbd75f0b8),
-            TOBN(0xf555a3d2, 0x99bf1603), TOBN(0x1f43afc9, 0xf184255a),
-            TOBN(0xdcdaf341, 0x319a3e02), TOBN(0xd3b117ef, 0x03903a39),
-            TOBN(0xe095da13, 0x65d1d131), TOBN(0x86f16367, 0xc37ad03e),
-            TOBN(0x5f37389e, 0x462cd8dd), TOBN(0xc103fa04, 0xd67a60e6),
-            TOBN(0x57c34344, 0xf4b478f0), TOBN(0xce91edd8, 0xe117c98d),
-            TOBN(0x001777b0, 0x231fc12e), TOBN(0x11ae47f2, 0xb207bccb),
-            TOBN(0xd983cf8d, 0x20f8a242), TOBN(0x7aff5b1d, 0xf22e1ad8),
-            TOBN(0x68fd11d0, 0x7fc4feb3), TOBN(0x5d53ae90, 0xb0f1c3e1),
-            TOBN(0x50fb7905, 0xec041803), TOBN(0x85e3c977, 0x14404888),
-            TOBN(0x0e67faed, 0xac628d8f), TOBN(0x2e865150, 0x6668532c),
-            TOBN(0x15acaaa4, 0x6a67a6b0), TOBN(0xf4cdee25, 0xb25cec41),
-            TOBN(0x49ee565a, 0xe4c6701e), TOBN(0x2a04ca66, 0xfc7d63d8),
-            TOBN(0xeb105018, 0xef0543fb), TOBN(0xf709a4f5, 0xd1b0d81d),
-            TOBN(0x5b906ee6, 0x2915d333), TOBN(0xf4a87412, 0x96f1f0ab),
-            TOBN(0xb6b82fa7, 0x4d82f4c2), TOBN(0x90725a60, 0x6804efb3),
-            TOBN(0xbc82ec46, 0xadc3425e), TOBN(0xb7b80581, 0x2787843e),
-            TOBN(0xdf46d91c, 0xdd1fc74c), TOBN(0xdc1c62cb, 0xe783a6c4),
-            TOBN(0x59d1b9f3, 0x1a04cbba), TOBN(0xd87f6f72, 0x95e40764),
-            TOBN(0x02b4cfc1, 0x317f4a76), TOBN(0x8d2703eb, 0x91036bce),
-            TOBN(0x98206cc6, 0xa5e72a56), TOBN(0x57be9ed1, 0xcf53fb0f),
-            TOBN(0x09374571, 0xef0b17ac), TOBN(0x74b2655e, 0xd9181b38),
-            TOBN(0xc8f80ea8, 0x89935d0e), TOBN(0xc0d9e942, 0x91529936),
-            TOBN(0x19686041, 0x1e84e0e5), TOBN(0xa5db84d3, 0xaea34c93),
-            TOBN(0xf9d5bb19, 0x7073a732), TOBN(0xb8d2fe56, 0x6bcfd7c0),
-            TOBN(0x45775f36, 0xf3eb82fa), TOBN(0x8cb20ccc, 0xfdff8b58),
-            TOBN(0x1659b65f, 0x8374c110), TOBN(0xb8b4a422, 0x330c789a),
-            TOBN(0x75e3c3ea, 0x6fe8208b), TOBN(0xbd74b9e4, 0x286e78fe),
-            TOBN(0x0be2e81b, 0xd7d93a1a), TOBN(0x7ed06e27, 0xdd0a5aae),
-            TOBN(0x721f5a58, 0x6be8b800), TOBN(0x428299d1, 0xd846db28),
-            TOBN(0x95cb8e6b, 0x5be88ed3), TOBN(0xc3186b23, 0x1c034e11),
-            TOBN(0xa6312c9e, 0x8977d99b), TOBN(0xbe944331, 0x83f531e7),
-            TOBN(0x8232c0c2, 0x18d3b1d4), TOBN(0x617aae8b, 0xe1247b73),
-            TOBN(0x40153fc4, 0x282aec3b), TOBN(0xc6063d2f, 0xf7b8f823),
-            TOBN(0x68f10e58, 0x3304f94c), TOBN(0x31efae74, 0xee676346),
-            TOBN(0xbadb6c6d, 0x40a9b97c), TOBN(0x14702c63, 0x4f666256),
-            TOBN(0xdeb954f1, 0x5184b2e3), TOBN(0x5184a526, 0x94b6ca40),
-            TOBN(0xfff05337, 0x003c32ea), TOBN(0x5aa374dd, 0x205974c7),
-            TOBN(0x9a763854, 0x4b0dd71a), TOBN(0x459cd27f, 0xdeb947ec),
-            TOBN(0xa6e28161, 0x459c2b92), TOBN(0x2f020fa8, 0x75ee8ef5),
-            TOBN(0xb132ec2d, 0x30b06310), TOBN(0xc3e15899, 0xbc6a4530),
-            TOBN(0xdc5f53fe, 0xaa3f451a), TOBN(0x3a3c7f23, 0xc2d9acac),
-            TOBN(0x2ec2f892, 0x6b27e58b), TOBN(0x68466ee7, 0xd742799f),
-            TOBN(0x98324dd4, 0x1fa26613), TOBN(0xa2dc6dab, 0xbdc29d63),
-            TOBN(0xf9675faa, 0xd712d657), TOBN(0x813994be, 0x21fd8d15),
-            TOBN(0x5ccbb722, 0xfd4f7553), TOBN(0x5135ff8b, 0xf3a36b20),
-            TOBN(0x44be28af, 0x69559df5), TOBN(0x40b65bed, 0x9d41bf30),
-            TOBN(0xd98bf2a4, 0x3734e520), TOBN(0x5e3abbe3, 0x209bdcba),
-            TOBN(0x77c76553, 0xbc945b35), TOBN(0x5331c093, 0xc6ef14aa),
-            TOBN(0x518ffe29, 0x76b60c80), TOBN(0x2285593b, 0x7ace16f8),
-            TOBN(0xab1f64cc, 0xbe2b9784), TOBN(0xe8f2c0d9, 0xab2421b6),
-            TOBN(0x617d7174, 0xc1df065c), TOBN(0xafeeb5ab, 0x5f6578fa),
-            TOBN(0x16ff1329, 0x263b54a8), TOBN(0x45c55808, 0xc990dce3),
-            TOBN(0x42eab6c0, 0xecc8c177), TOBN(0x799ea9b5, 0x5982ecaa),
-            TOBN(0xf65da244, 0xb607ef8e), TOBN(0x8ab226ce, 0x32a3fc2c),
-            TOBN(0x745741e5, 0x7ea973dc), TOBN(0x5c00ca70, 0x20888f2e),
-            TOBN(0x7cdce3cf, 0x45fd9cf1), TOBN(0x8a741ef1, 0x5507f872),
-            TOBN(0x47c51c2f, 0x196b4cec), TOBN(0x70d08e43, 0xc97ea618),
-            TOBN(0x930da15c, 0x15b18a2b), TOBN(0x33b6c678, 0x2f610514),
-            TOBN(0xc662e4f8, 0x07ac9794), TOBN(0x1eccf050, 0xba06cb79),
-            TOBN(0x1ff08623, 0xe7d954e5), TOBN(0x6ef2c5fb, 0x24cf71c3),
-            TOBN(0xb2c063d2, 0x67978453), TOBN(0xa0cf3796, 0x1d654af8),
-            TOBN(0x7cb242ea, 0x7ebdaa37), TOBN(0x206e0b10, 0xb86747e0),
-            TOBN(0x481dae5f, 0xd5ecfefc), TOBN(0x07084fd8, 0xc2bff8fc),
-            TOBN(0x8040a01a, 0xea324596), TOBN(0x4c646980, 0xd4de4036),
-            TOBN(0x9eb8ab4e, 0xd65abfc3), TOBN(0xe01cb91f, 0x13541ec7),
-            TOBN(0x8f029adb, 0xfd695012), TOBN(0x9ae28483, 0x3c7569ec),
-            TOBN(0xa5614c9e, 0xa66d80a1), TOBN(0x680a3e44, 0x75f5f911),
-            TOBN(0x0c07b14d, 0xceba4fc1), TOBN(0x891c285b, 0xa13071c1),
-            TOBN(0xcac67ceb, 0x799ece3c), TOBN(0x29b910a9, 0x41e07e27),
-            TOBN(0x66bdb409, 0xf2e43123), TOBN(0x06f8b137, 0x7ac9ecbe),
-            TOBN(0x5981fafd, 0x38547090), TOBN(0x19ab8b9f, 0x85e3415d),
-            TOBN(0xfc28c194, 0xc7e31b27), TOBN(0x843be0aa, 0x6fbcbb42),
-            TOBN(0xf3b1ed43, 0xa6db836c), TOBN(0x2a1330e4, 0x01a45c05),
-            TOBN(0x4f19f3c5, 0x95c1a377), TOBN(0xa85f39d0, 0x44b5ee33),
-            TOBN(0x3da18e6d, 0x4ae52834), TOBN(0x5a403b39, 0x7423dcb0),
-            TOBN(0xbb555e0a, 0xf2374aef), TOBN(0x2ad599c4, 0x1e8ca111),
-            TOBN(0x1b3a2fb9, 0x014b3bf8), TOBN(0x73092684, 0xf66d5007),
-            TOBN(0x079f1426, 0xc4340102), TOBN(0x1827cf81, 0x8fddf4de),
-            TOBN(0xc83605f6, 0xf10ff927), TOBN(0xd3871451, 0x23739fc6),
-            TOBN(0x6d163450, 0xcac1c2cc), TOBN(0x6b521296, 0xa2ec1ac5),
-            TOBN(0x0606c4f9, 0x6e3cb4a5), TOBN(0xe47d3f41, 0x778abff7),
-            TOBN(0x425a8d5e, 0xbe8e3a45), TOBN(0x53ea9e97, 0xa6102160),
-            TOBN(0x477a106e, 0x39cbb688), TOBN(0x532401d2, 0xf3386d32),
-            TOBN(0x8e564f64, 0xb1b9b421), TOBN(0xca9b8388, 0x81dad33f),
-            TOBN(0xb1422b4e, 0x2093913e), TOBN(0x533d2f92, 0x69bc8112),
-            TOBN(0x3fa017be, 0xebe7b2c7), TOBN(0xb2767c4a, 0xcaf197c6),
-            TOBN(0xc925ff87, 0xaedbae9f), TOBN(0x7daf0eb9, 0x36880a54),
-            TOBN(0x9284ddf5, 0x9c4d0e71), TOBN(0x1581cf93, 0x316f8cf5),
-            TOBN(0x3eeca887, 0x3ac1f452), TOBN(0xb417fce9, 0xfb6aeffe),
-            TOBN(0xa5918046, 0xeefb8dc3), TOBN(0x73d318ac, 0x02209400),
-            TOBN(0xe800400f, 0x728693e5), TOBN(0xe87d814b, 0x339927ed),
-            TOBN(0x93e94d3b, 0x57ea9910), TOBN(0xff8a35b6, 0x2245fb69),
-            TOBN(0x043853d7, 0x7f200d34), TOBN(0x470f1e68, 0x0f653ce1),
-            TOBN(0x81ac05bd, 0x59a06379), TOBN(0xa14052c2, 0x03930c29),
-            TOBN(0x6b72fab5, 0x26bc2797), TOBN(0x13670d16, 0x99f16771),
-            TOBN(0x00170052, 0x1e3e48d1), TOBN(0x978fe401, 0xb7adf678),
-            TOBN(0x55ecfb92, 0xd41c5dd4), TOBN(0x5ff8e247, 0xc7b27da5),
-            TOBN(0xe7518272, 0x013fb606), TOBN(0x5768d7e5, 0x2f547a3c),
-            TOBN(0xbb24eaa3, 0x60017a5f), TOBN(0x6b18e6e4, 0x9c64ce9b),
-            TOBN(0xc225c655, 0x103dde07), TOBN(0xfc3672ae, 0x7592f7ea),
-            TOBN(0x9606ad77, 0xd06283a1), TOBN(0x542fc650, 0xe4d59d99),
-            TOBN(0xabb57c49, 0x2a40e7c2), TOBN(0xac948f13, 0xa8db9f55),
-            TOBN(0x6d4c9682, 0xb04465c3), TOBN(0xe3d062fa, 0x6468bd15),
-            TOBN(0xa51729ac, 0x5f318d7e), TOBN(0x1fc87df6, 0x9eb6fc95),
-            TOBN(0x63d146a8, 0x0591f652), TOBN(0xa861b8f7, 0x589621aa),
-            TOBN(0x59f5f15a, 0xce31348c), TOBN(0x8f663391, 0x440da6da),
-            TOBN(0xcfa778ac, 0xb591ffa3), TOBN(0x027ca9c5, 0x4cdfebce),
-            TOBN(0xbe8e05a5, 0x444ea6b3), TOBN(0x8aab4e69, 0xa78d8254),
-            TOBN(0x2437f04f, 0xb474d6b8), TOBN(0x6597ffd4, 0x045b3855),
-            TOBN(0xbb0aea4e, 0xca47ecaa), TOBN(0x568aae83, 0x85c7ebfc),
-            TOBN(0x0e966e64, 0xc73b2383), TOBN(0x49eb3447, 0xd17d8762),
-            TOBN(0xde107821, 0x8da05dab), TOBN(0x443d8baa, 0x016b7236),
-            TOBN(0x163b63a5, 0xea7610d6), TOBN(0xe47e4185, 0xce1ca979),
-            TOBN(0xae648b65, 0x80baa132), TOBN(0xebf53de2, 0x0e0d5b64),
-            TOBN(0x8d3bfcb4, 0xd3c8c1ca), TOBN(0x0d914ef3, 0x5d04b309),
-            TOBN(0x55ef6415, 0x3de7d395), TOBN(0xbde1666f, 0x26b850e8),
-            TOBN(0xdbe1ca6e, 0xd449ab19), TOBN(0x8902b322, 0xe89a2672),
-            TOBN(0xb1674b7e, 0xdacb7a53), TOBN(0x8e9faf6e, 0xf52523ff),
-            TOBN(0x6ba535da, 0x9a85788b), TOBN(0xd21f03ae, 0xbd0626d4),
-            TOBN(0x099f8c47, 0xe873dc64), TOBN(0xcda8564d, 0x018ec97e),
-            TOBN(0x3e8d7a5c, 0xde92c68c), TOBN(0x78e035a1, 0x73323cc4),
-            TOBN(0x3ef26275, 0xf880ff7c), TOBN(0xa4ee3dff, 0x273eedaa),
-            TOBN(0x58823507, 0xaf4e18f8), TOBN(0x967ec9b5, 0x0672f328),
-            TOBN(0x9ded19d9, 0x559d3186), TOBN(0x5e2ab3de, 0x6cdce39c),
-            TOBN(0xabad6e4d, 0x11c226df), TOBN(0xf9783f43, 0x87723014),
-            TOBN(0x9a49a0cf, 0x1a885719), TOBN(0xfc0c1a5a, 0x90da9dbf),
-            TOBN(0x8bbaec49, 0x571d92ac), TOBN(0x569e85fe, 0x4692517f),
-            TOBN(0x8333b014, 0xa14ea4af), TOBN(0x32f2a62f, 0x12e5c5ad),
-            TOBN(0x98c2ce3a, 0x06d89b85), TOBN(0xb90741aa, 0x2ff77a08),
-            TOBN(0x2530defc, 0x01f795a2), TOBN(0xd6e5ba0b, 0x84b3c199),
-            TOBN(0x7d8e8451, 0x12e4c936), TOBN(0xae419f7d, 0xbd0be17b),
-            TOBN(0xa583fc8c, 0x22262bc9), TOBN(0x6b842ac7, 0x91bfe2bd),
-            TOBN(0x33cef4e9, 0x440d6827), TOBN(0x5f69f4de, 0xef81fb14),
-            TOBN(0xf16cf6f6, 0x234fbb92), TOBN(0x76ae3fc3, 0xd9e7e158),
-            TOBN(0x4e89f6c2, 0xe9740b33), TOBN(0x677bc85d, 0x4962d6a1),
-            TOBN(0x6c6d8a7f, 0x68d10d15), TOBN(0x5f9a7224, 0x0257b1cd),
-            TOBN(0x7096b916, 0x4ad85961), TOBN(0x5f8c47f7, 0xe657ab4a),
-            TOBN(0xde57d7d0, 0xf7461d7e), TOBN(0x7eb6094d, 0x80ce5ee2),
-            TOBN(0x0b1e1dfd, 0x34190547), TOBN(0x8a394f43, 0xf05dd150),
-            TOBN(0x0a9eb24d, 0x97df44e6), TOBN(0x78ca06bf, 0x87675719),
-            TOBN(0x6f0b3462, 0x6ffeec22), TOBN(0x9d91bcea, 0x36cdd8fb),
-            TOBN(0xac83363c, 0xa105be47), TOBN(0x81ba76c1, 0x069710e3),
-            TOBN(0x3d1b24cb, 0x28c682c6), TOBN(0x27f25228, 0x8612575b),
-            TOBN(0xb587c779, 0xe8e66e98), TOBN(0x7b0c03e9, 0x405eb1fe),
-            TOBN(0xfdf0d030, 0x15b548e7), TOBN(0xa8be76e0, 0x38b36af7),
-            TOBN(0x4cdab04a, 0x4f310c40), TOBN(0x6287223e, 0xf47ecaec),
-            TOBN(0x678e6055, 0x8b399320), TOBN(0x61fe3fa6, 0xc01e4646),
-            TOBN(0xc482866b, 0x03261a5e), TOBN(0xdfcf45b8, 0x5c2f244a),
-            TOBN(0x8fab9a51, 0x2f684b43), TOBN(0xf796c654, 0xc7220a66),
-            TOBN(0x1d90707e, 0xf5afa58f), TOBN(0x2c421d97, 0x4fdbe0de),
-            TOBN(0xc4f4cda3, 0xaf2ebc2f), TOBN(0xa0af843d, 0xcb4efe24),
-            TOBN(0x53b857c1, 0x9ccd10b1), TOBN(0xddc9d1eb, 0x914d3e04),
-            TOBN(0x7bdec8bb, 0x62771deb), TOBN(0x829277aa, 0x91c5aa81),
-            TOBN(0x7af18dd6, 0x832391ae), TOBN(0x1740f316, 0xc71a84ca),
-        },
-        {
-            TOBN(0x8928e99a, 0xeeaf8c49), TOBN(0xee7aa73d, 0x6e24d728),
-            TOBN(0x4c5007c2, 0xe72b156c), TOBN(0x5fcf57c5, 0xed408a1d),
-            TOBN(0x9f719e39, 0xb6057604), TOBN(0x7d343c01, 0xc2868bbf),
-            TOBN(0x2cca254b, 0x7e103e2d), TOBN(0xe6eb38a9, 0xf131bea2),
-            TOBN(0xb33e624f, 0x8be762b4), TOBN(0x2a9ee4d1, 0x058e3413),
-            TOBN(0x968e6369, 0x67d805fa), TOBN(0x9848949b, 0x7db8bfd7),
-            TOBN(0x5308d7e5, 0xd23a8417), TOBN(0x892f3b1d, 0xf3e29da5),
-            TOBN(0xc95c139e, 0x3dee471f), TOBN(0x8631594d, 0xd757e089),
-            TOBN(0xe0c82a3c, 0xde918dcc), TOBN(0x2e7b5994, 0x26fdcf4b),
-            TOBN(0x82c50249, 0x32cb1b2d), TOBN(0xea613a9d, 0x7657ae07),
-            TOBN(0xc2eb5f6c, 0xf1fdc9f7), TOBN(0xb6eae8b8, 0x879fe682),
-            TOBN(0x253dfee0, 0x591cbc7f), TOBN(0x000da713, 0x3e1290e6),
-            TOBN(0x1083e2ea, 0x1f095615), TOBN(0x0a28ad77, 0x14e68c33),
-            TOBN(0x6bfc0252, 0x3d8818be), TOBN(0xb585113a, 0xf35850cd),
-            TOBN(0x7d935f0b, 0x30df8aa1), TOBN(0xaddda07c, 0x4ab7e3ac),
-            TOBN(0x92c34299, 0x552f00cb), TOBN(0xc33ed1de, 0x2909df6c),
-            TOBN(0x22c2195d, 0x80e87766), TOBN(0x9e99e6d8, 0x9ddf4ac0),
-            TOBN(0x09642e4e, 0x65e74934), TOBN(0x2610ffa2, 0xff1ff241),
-            TOBN(0x4d1d47d4, 0x751c8159), TOBN(0x697b4985, 0xaf3a9363),
-            TOBN(0x0318ca46, 0x87477c33), TOBN(0xa90cb565, 0x9441eff3),
-            TOBN(0x58bb3848, 0x36f024cb), TOBN(0x85be1f77, 0x36016168),
-            TOBN(0x6c59587c, 0xdc7e07f1), TOBN(0x191be071, 0xaf1d8f02),
-            TOBN(0xbf169fa5, 0xcca5e55c), TOBN(0x3864ba3c, 0xf7d04eac),
-            TOBN(0x915e367f, 0x8d7d05db), TOBN(0xb48a876d, 0xa6549e5d),
-            TOBN(0xef89c656, 0x580e40a2), TOBN(0xf194ed8c, 0x728068bc),
-            TOBN(0x74528045, 0xa47990c9), TOBN(0xf53fc7d7, 0x5e1a4649),
-            TOBN(0xbec5ae9b, 0x78593e7d), TOBN(0x2cac4ee3, 0x41db65d7),
-            TOBN(0xa8c1eb24, 0x04a3d39b), TOBN(0x53b7d634, 0x03f8f3ef),
-            TOBN(0x2dc40d48, 0x3e07113c), TOBN(0x6e4a5d39, 0x7d8b63ae),
-            TOBN(0x5582a94b, 0x79684c2b), TOBN(0x932b33d4, 0x622da26c),
-            TOBN(0xf534f651, 0x0dbbf08d), TOBN(0x211d07c9, 0x64c23a52),
-            TOBN(0x0eeece0f, 0xee5bdc9b), TOBN(0xdf178168, 0xf7015558),
-            TOBN(0xd4294635, 0x0a712229), TOBN(0x93cbe448, 0x09273f8c),
-            TOBN(0x00b095ef, 0x8f13bc83), TOBN(0xbb741972, 0x8798978c),
-            TOBN(0x9d7309a2, 0x56dbe6e7), TOBN(0xe578ec56, 0x5a5d39ec),
-            TOBN(0x3961151b, 0x851f9a31), TOBN(0x2da7715d, 0xe5709eb4),
-            TOBN(0x867f3017, 0x53dfabf0), TOBN(0x728d2078, 0xb8e39259),
-            TOBN(0x5c75a0cd, 0x815d9958), TOBN(0xf84867a6, 0x16603be1),
-            TOBN(0xc865b13d, 0x70e35b1c), TOBN(0x02414468, 0x19b03e2c),
-            TOBN(0xe46041da, 0xac1f3121), TOBN(0x7c9017ad, 0x6f028a7c),
-            TOBN(0xabc96de9, 0x0a482873), TOBN(0x4265d6b1, 0xb77e54d4),
-            TOBN(0x68c38e79, 0xa57d88e7), TOBN(0xd461d766, 0x9ce82de3),
-            TOBN(0x817a9ec5, 0x64a7e489), TOBN(0xcc5675cd, 0xa0def5f2),
-            TOBN(0x9a00e785, 0x985d494e), TOBN(0xc626833f, 0x1b03514a),
-            TOBN(0xabe7905a, 0x83cdd60e), TOBN(0x50602fb5, 0xa1170184),
-            TOBN(0x689886cd, 0xb023642a), TOBN(0xd568d090, 0xa6e1fb00),
-            TOBN(0x5b1922c7, 0x0259217f), TOBN(0x93831cd9, 0xc43141e4),
-            TOBN(0xdfca3587, 0x0c95f86e), TOBN(0xdec2057a, 0x568ae828),
-            TOBN(0xc44ea599, 0xf98a759a), TOBN(0x55a0a7a2, 0xf7c23c1d),
-            TOBN(0xd5ffb6e6, 0x94c4f687), TOBN(0x3563cce2, 0x12848478),
-            TOBN(0x812b3517, 0xe7b1fbe1), TOBN(0x8a7dc979, 0x4f7338e0),
-            TOBN(0x211ecee9, 0x52d048db), TOBN(0x2eea4056, 0xc86ea3b8),
-            TOBN(0xd8cb68a7, 0xba772b34), TOBN(0xe16ed341, 0x5f4e2541),
-            TOBN(0x9b32f6a6, 0x0fec14db), TOBN(0xeee376f7, 0x391698be),
-            TOBN(0xe9a7aa17, 0x83674c02), TOBN(0x65832f97, 0x5843022a),
-            TOBN(0x29f3a8da, 0x5ba4990f), TOBN(0x79a59c3a, 0xfb8e3216),
-            TOBN(0x9cdc4d2e, 0xbd19bb16), TOBN(0xc6c7cfd0, 0xb3262d86),
-            TOBN(0xd4ce14d0, 0x969c0b47), TOBN(0x1fa352b7, 0x13e56128),
-            TOBN(0x383d55b8, 0x973db6d3), TOBN(0x71836850, 0xe8e5b7bf),
-            TOBN(0xc7714596, 0xe6bb571f), TOBN(0x259df31f, 0x2d5b2dd2),
-            TOBN(0x568f8925, 0x913cc16d), TOBN(0x18bc5b6d, 0xe1a26f5a),
-            TOBN(0xdfa413be, 0xf5f499ae), TOBN(0xf8835dec, 0xc3f0ae84),
-            TOBN(0xb6e60bd8, 0x65a40ab0), TOBN(0x65596439, 0x194b377e),
-            TOBN(0xbcd85625, 0x92084a69), TOBN(0x5ce433b9, 0x4f23ede0),
-            TOBN(0xe8e8f04f, 0x6ad65143), TOBN(0x11511827, 0xd6e14af6),
-            TOBN(0x3d390a10, 0x8295c0c7), TOBN(0x71e29ee4, 0x621eba16),
-            TOBN(0xa588fc09, 0x63717b46), TOBN(0x02be02fe, 0xe06ad4a2),
-            TOBN(0x931558c6, 0x04c22b22), TOBN(0xbb4d4bd6, 0x12f3c849),
-            TOBN(0x54a4f496, 0x20efd662), TOBN(0x92ba6d20, 0xc5952d14),
-            TOBN(0x2db8ea1e, 0xcc9784c2), TOBN(0x81cc10ca, 0x4b353644),
-            TOBN(0x40b570ad, 0x4b4d7f6c), TOBN(0x5c9f1d96, 0x84a1dcd2),
-            TOBN(0x01379f81, 0x3147e797), TOBN(0xe5c6097b, 0x2bd499f5),
-            TOBN(0x40dcafa6, 0x328e5e20), TOBN(0xf7b5244a, 0x54815550),
-            TOBN(0xb9a4f118, 0x47bfc978), TOBN(0x0ea0e79f, 0xd25825b1),
-            TOBN(0xa50f96eb, 0x646c7ecf), TOBN(0xeb811493, 0x446dea9d),
-            TOBN(0x2af04677, 0xdfabcf69), TOBN(0xbe3a068f, 0xc713f6e8),
-            TOBN(0x860d523d, 0x42e06189), TOBN(0xbf077941, 0x4e3aff13),
-            TOBN(0x0b616dca, 0xc1b20650), TOBN(0xe66dd6d1, 0x2131300d),
-            TOBN(0xd4a0fd67, 0xff99abde), TOBN(0xc9903550, 0xc7aac50d),
-            TOBN(0x022ecf8b, 0x7c46b2d7), TOBN(0x3333b1e8, 0x3abf92af),
-            TOBN(0x11cc113c, 0x6c491c14), TOBN(0x05976688, 0x80dd3f88),
-            TOBN(0xf5b4d9e7, 0x29d932ed), TOBN(0xe982aad8, 0xa2c38b6d),
-            TOBN(0x6f925347, 0x8be0dcf0), TOBN(0x700080ae, 0x65ca53f2),
-            TOBN(0xd8131156, 0x443ca77f), TOBN(0xe92d6942, 0xec51f984),
-            TOBN(0xd2a08af8, 0x85dfe9ae), TOBN(0xd825d9a5, 0x4d2a86ca),
-            TOBN(0x2c53988d, 0x39dff020), TOBN(0xf38b135a, 0x430cdc40),
-            TOBN(0x0c918ae0, 0x62a7150b), TOBN(0xf31fd8de, 0x0c340e9b),
-            TOBN(0xafa0e7ae, 0x4dbbf02e), TOBN(0x5847fb2a, 0x5eba6239),
-            TOBN(0x6b1647dc, 0xdccbac8b), TOBN(0xb642aa78, 0x06f485c8),
-            TOBN(0x873f3765, 0x7038ecdf), TOBN(0x2ce5e865, 0xfa49d3fe),
-            TOBN(0xea223788, 0xc98c4400), TOBN(0x8104a8cd, 0xf1fa5279),
-            TOBN(0xbcf7cc7a, 0x06becfd7), TOBN(0x49424316, 0xc8f974ae),
-            TOBN(0xc0da65e7, 0x84d6365d), TOBN(0xbcb7443f, 0x8f759fb8),
-            TOBN(0x35c712b1, 0x7ae81930), TOBN(0x80428dff, 0x4c6e08ab),
-            TOBN(0xf19dafef, 0xa4faf843), TOBN(0xced8538d, 0xffa9855f),
-            TOBN(0x20ac409c, 0xbe3ac7ce), TOBN(0x358c1fb6, 0x882da71e),
-            TOBN(0xafa9c0e5, 0xfd349961), TOBN(0x2b2cfa51, 0x8421c2fc),
-            TOBN(0x2a80db17, 0xf3a28d38), TOBN(0xa8aba539, 0x5d138e7e),
-            TOBN(0x52012d1d, 0x6e96eb8d), TOBN(0x65d8dea0, 0xcbaf9622),
-            TOBN(0x57735447, 0xb264f56c), TOBN(0xbeebef3f, 0x1b6c8da2),
-            TOBN(0xfc346d98, 0xce785254), TOBN(0xd50e8d72, 0xbb64a161),
-            TOBN(0xc03567c7, 0x49794add), TOBN(0x15a76065, 0x752c7ef6),
-            TOBN(0x59f3a222, 0x961f23d6), TOBN(0x378e4438, 0x73ecc0b0),
-            TOBN(0xc74be434, 0x5a82fde4), TOBN(0xae509af2, 0xd8b9cf34),
-            TOBN(0x4a61ee46, 0x577f44a1), TOBN(0xe09b748c, 0xb611deeb),
-            TOBN(0xc0481b2c, 0xf5f7b884), TOBN(0x35626678, 0x61acfa6b),
-            TOBN(0x37f4c518, 0xbf8d21e6), TOBN(0x22d96531, 0xb205a76d),
-            TOBN(0x37fb85e1, 0x954073c0), TOBN(0xbceafe4f, 0x65b3a567),
-            TOBN(0xefecdef7, 0xbe42a582), TOBN(0xd3fc6080, 0x65046be6),
-            TOBN(0xc9af13c8, 0x09e8dba9), TOBN(0x1e6c9847, 0x641491ff),
-            TOBN(0x3b574925, 0xd30c31f7), TOBN(0xb7eb72ba, 0xac2a2122),
-            TOBN(0x776a0dac, 0xef0859e7), TOBN(0x06fec314, 0x21900942),
-            TOBN(0x2464bc10, 0xf8c22049), TOBN(0x9bfbcce7, 0x875ebf69),
-            TOBN(0xd7a88e2a, 0x4336326b), TOBN(0xda05261c, 0x5bc2acfa),
-            TOBN(0xc29f5bdc, 0xeba7efc8), TOBN(0x471237ca, 0x25dbbf2e),
-            TOBN(0xa72773f2, 0x2975f127), TOBN(0xdc744e8e, 0x04d0b326),
-            TOBN(0x38a7ed16, 0xa56edb73), TOBN(0x64357e37, 0x2c007e70),
-            TOBN(0xa167d15b, 0x5080b400), TOBN(0x07b41164, 0x23de4be1),
-            TOBN(0xb2d91e32, 0x74c89883), TOBN(0x3c162821, 0x2882e7ed),
-            TOBN(0xad6b36ba, 0x7503e482), TOBN(0x48434e8e, 0x0ea34331),
-            TOBN(0x79f4f24f, 0x2c7ae0b9), TOBN(0xc46fbf81, 0x1939b44a),
-            TOBN(0x76fefae8, 0x56595eb1), TOBN(0x417b66ab, 0xcd5f29c7),
-            TOBN(0x5f2332b2, 0xc5ceec20), TOBN(0xd69661ff, 0xe1a1cae2),
-            TOBN(0x5ede7e52, 0x9b0286e6), TOBN(0x9d062529, 0xe276b993),
-            TOBN(0x324794b0, 0x7e50122b), TOBN(0xdd744f8b, 0x4af07ca5),
-            TOBN(0x30a12f08, 0xd63fc97b), TOBN(0x39650f1a, 0x76626d9d),
-            TOBN(0x101b47f7, 0x1fa38477), TOBN(0x3d815f19, 0xd4dc124f),
-            TOBN(0x1569ae95, 0xb26eb58a), TOBN(0xc3cde188, 0x95fb1887),
-            TOBN(0x54e9f37b, 0xf9539a48), TOBN(0xb0100e06, 0x7408c1a5),
-            TOBN(0x821d9811, 0xea580cbb), TOBN(0x8af52d35, 0x86e50c56),
-            TOBN(0xdfbd9d47, 0xdbbf698b), TOBN(0x2961a1ea, 0x03dc1c73),
-            TOBN(0x203d38f8, 0xe76a5df8), TOBN(0x08a53a68, 0x6def707a),
-            TOBN(0x26eefb48, 0x1bee45d4), TOBN(0xb3cee346, 0x3c688036),
-            TOBN(0x463c5315, 0xc42f2469), TOBN(0x19d84d2e, 0x81378162),
-            TOBN(0x22d7c3c5, 0x1c4d349f), TOBN(0x65965844, 0x163d59c5),
-            TOBN(0xcf198c56, 0xb8abceae), TOBN(0x6fb1fb1b, 0x628559d5),
-            TOBN(0x8bbffd06, 0x07bf8fe3), TOBN(0x46259c58, 0x3467734b),
-            TOBN(0xd8953cea, 0x35f7f0d3), TOBN(0x1f0bece2, 0xd65b0ff1),
-            TOBN(0xf7d5b4b3, 0xf3c72914), TOBN(0x29e8ea95, 0x3cb53389),
-            TOBN(0x4a365626, 0x836b6d46), TOBN(0xe849f910, 0xea174fde),
-            TOBN(0x7ec62fbb, 0xf4737f21), TOBN(0xd8dba5ab, 0x6209f5ac),
-            TOBN(0x24b5d7a9, 0xa5f9adbe), TOBN(0x707d28f7, 0xa61dc768),
-            TOBN(0x7711460b, 0xcaa999ea), TOBN(0xba7b174d, 0x1c92e4cc),
-            TOBN(0x3c4bab66, 0x18d4bf2d), TOBN(0xb8f0c980, 0xeb8bd279),
-            TOBN(0x024bea9a, 0x324b4737), TOBN(0xfba9e423, 0x32a83bca),
-            TOBN(0x6e635643, 0xa232dced), TOBN(0x99619367, 0x2571c8ba),
-            TOBN(0xe8c9f357, 0x54b7032b), TOBN(0xf936b3ba, 0x2442d54a),
-            TOBN(0x2263f0f0, 0x8290c65a), TOBN(0x48989780, 0xee2c7fdb),
-            TOBN(0xadc5d55a, 0x13d4f95e), TOBN(0x737cff85, 0xad9b8500),
-            TOBN(0x271c557b, 0x8a73f43d), TOBN(0xbed617a4, 0xe18bc476),
-            TOBN(0x66245401, 0x7dfd8ab2), TOBN(0xae7b89ae, 0x3a2870aa),
-            TOBN(0x1b555f53, 0x23a7e545), TOBN(0x6791e247, 0xbe057e4c),
-            TOBN(0x860136ad, 0x324fa34d), TOBN(0xea111447, 0x4cbeae28),
-            TOBN(0x023a4270, 0xbedd3299), TOBN(0x3d5c3a7f, 0xc1c35c34),
-            TOBN(0xb0f6db67, 0x8d0412d2), TOBN(0xd92625e2, 0xfcdc6b9a),
-            TOBN(0x92ae5ccc, 0x4e28a982), TOBN(0xea251c36, 0x47a3ce7e),
-            TOBN(0x9d658932, 0x790691bf), TOBN(0xed610589, 0x06b736ae),
-            TOBN(0x712c2f04, 0xc0d63b6e), TOBN(0x5cf06fd5, 0xc63d488f),
-            TOBN(0x97363fac, 0xd9588e41), TOBN(0x1f9bf762, 0x2b93257e),
-            TOBN(0xa9d1ffc4, 0x667acace), TOBN(0x1cf4a1aa, 0x0a061ecf),
-            TOBN(0x40e48a49, 0xdc1818d0), TOBN(0x0643ff39, 0xa3621ab0),
-            TOBN(0x5768640c, 0xe39ef639), TOBN(0x1fc099ea, 0x04d86854),
-            TOBN(0x9130b9c3, 0xeccd28fd), TOBN(0xd743cbd2, 0x7eec54ab),
-            TOBN(0x052b146f, 0xe5b475b6), TOBN(0x058d9a82, 0x900a7d1f),
-            TOBN(0x65e02292, 0x91262b72), TOBN(0x96f924f9, 0xbb0edf03),
-            TOBN(0x5cfa59c8, 0xfe206842), TOBN(0xf6037004, 0x5eafa720),
-            TOBN(0x5f30699e, 0x18d7dd96), TOBN(0x381e8782, 0xcbab2495),
-            TOBN(0x91669b46, 0xdd8be949), TOBN(0xb40606f5, 0x26aae8ef),
-            TOBN(0x2812b839, 0xfc6751a4), TOBN(0x16196214, 0xfba800ef),
-            TOBN(0x4398d5ca, 0x4c1a2875), TOBN(0x720c00ee, 0x653d8349),
-            TOBN(0xc2699eb0, 0xd820007c), TOBN(0x880ee660, 0xa39b5825),
-            TOBN(0x70694694, 0x471f6984), TOBN(0xf7d16ea8, 0xe3dda99a),
-            TOBN(0x28d675b2, 0xc0519a23), TOBN(0x9ebf94fe, 0x4f6952e3),
-            TOBN(0xf28bb767, 0xa2294a8a), TOBN(0x85512b4d, 0xfe0af3f5),
-            TOBN(0x18958ba8, 0x99b16a0d), TOBN(0x95c2430c, 0xba7548a7),
-            TOBN(0xb30d1b10, 0xa16be615), TOBN(0xe3ebbb97, 0x85bfb74c),
-            TOBN(0xa3273cfe, 0x18549fdb), TOBN(0xf6e200bf, 0x4fcdb792),
-            TOBN(0x54a76e18, 0x83aba56c), TOBN(0x73ec66f6, 0x89ef6aa2),
-            TOBN(0x8d17add7, 0xd1b9a305), TOBN(0xa959c5b9, 0xb7ae1b9d),
-            TOBN(0x88643522, 0x6bcc094a), TOBN(0xcc5616c4, 0xd7d429b9),
-            TOBN(0xa6dada01, 0xe6a33f7c), TOBN(0xc6217a07, 0x9d4e70ad),
-            TOBN(0xd619a818, 0x09c15b7c), TOBN(0xea06b329, 0x0e80c854),
-            TOBN(0x174811ce, 0xa5f5e7b9), TOBN(0x66dfc310, 0x787c65f4),
-            TOBN(0x4ea7bd69, 0x3316ab54), TOBN(0xc12c4acb, 0x1dcc0f70),
-            TOBN(0xe4308d1a, 0x1e407dd9), TOBN(0xe8a3587c, 0x91afa997),
-            TOBN(0xea296c12, 0xab77b7a5), TOBN(0xb5ad49e4, 0x673c0d52),
-            TOBN(0x40f9b2b2, 0x7006085a), TOBN(0xa88ff340, 0x87bf6ec2),
-            TOBN(0x978603b1, 0x4e3066a6), TOBN(0xb3f99fc2, 0xb5e486e2),
-            TOBN(0x07b53f5e, 0xb2e63645), TOBN(0xbe57e547, 0x84c84232),
-            TOBN(0xd779c216, 0x7214d5cf), TOBN(0x617969cd, 0x029a3aca),
-            TOBN(0xd17668cd, 0x8a7017a0), TOBN(0x77b4d19a, 0xbe9b7ee8),
-            TOBN(0x58fd0e93, 0x9c161776), TOBN(0xa8c4f4ef, 0xd5968a72),
-            TOBN(0x296071cc, 0x67b3de77), TOBN(0xae3c0b8e, 0x634f7905),
-            TOBN(0x67e440c2, 0x8a7100c9), TOBN(0xbb8c3c1b, 0xeb4b9b42),
-            TOBN(0x6d71e8ea, 0xc51b3583), TOBN(0x7591f5af, 0x9525e642),
-            TOBN(0xf73a2f7b, 0x13f509f3), TOBN(0x618487aa, 0x5619ac9b),
-            TOBN(0x3a72e5f7, 0x9d61718a), TOBN(0x00413bcc, 0x7592d28c),
-            TOBN(0x7d9b11d3, 0x963c35cf), TOBN(0x77623bcf, 0xb90a46ed),
-            TOBN(0xdeef273b, 0xdcdd2a50), TOBN(0x4a741f9b, 0x0601846e),
-            TOBN(0x33b89e51, 0x0ec6e929), TOBN(0xcb02319f, 0x8b7f22cd),
-            TOBN(0xbbe1500d, 0x084bae24), TOBN(0x2f0ae8d7, 0x343d2693),
-            TOBN(0xacffb5f2, 0x7cdef811), TOBN(0xaa0c030a, 0x263fb94f),
-            TOBN(0x6eef0d61, 0xa0f442de), TOBN(0xf92e1817, 0x27b139d3),
-            TOBN(0x1ae6deb7, 0x0ad8bc28), TOBN(0xa89e38dc, 0xc0514130),
-            TOBN(0x81eeb865, 0xd2fdca23), TOBN(0x5a15ee08, 0xcc8ef895),
-            TOBN(0x768fa10a, 0x01905614), TOBN(0xeff5b8ef, 0x880ee19b),
-            TOBN(0xf0c0cabb, 0xcb1c8a0e), TOBN(0x2e1ee9cd, 0xb8c838f9),
-            TOBN(0x0587d8b8, 0x8a4a14c0), TOBN(0xf6f27896, 0x2ff698e5),
-            TOBN(0xed38ef1c, 0x89ee6256), TOBN(0xf44ee1fe, 0x6b353b45),
-            TOBN(0x9115c0c7, 0x70e903b3), TOBN(0xc78ec0a1, 0x818f31df),
-            TOBN(0x6c003324, 0xb7dccbc6), TOBN(0xd96dd1f3, 0x163bbc25),
-            TOBN(0x33aa82dd, 0x5cedd805), TOBN(0x123aae4f, 0x7f7eb2f1),
-            TOBN(0x1723fcf5, 0xa26262cd), TOBN(0x1f7f4d5d, 0x0060ebd5),
-            TOBN(0xf19c5c01, 0xb2eaa3af), TOBN(0x2ccb9b14, 0x9790accf),
-            TOBN(0x1f9c1cad, 0x52324aa6), TOBN(0x63200526, 0x7247df54),
-            TOBN(0x5732fe42, 0xbac96f82), TOBN(0x52fe771f, 0x01a1c384),
-            TOBN(0x546ca13d, 0xb1001684), TOBN(0xb56b4eee, 0xa1709f75),
-            TOBN(0x266545a9, 0xd5db8672), TOBN(0xed971c90, 0x1e8f3cfb),
-            TOBN(0x4e7d8691, 0xe3a07b29), TOBN(0x7570d9ec, 0xe4b696b9),
-            TOBN(0xdc5fa067, 0x7bc7e9ae), TOBN(0x68b44caf, 0xc82c4844),
-            TOBN(0x519d34b3, 0xbf44da80), TOBN(0x283834f9, 0x5ab32e66),
-            TOBN(0x6e608797, 0x6278a000), TOBN(0x1e62960e, 0x627312f6),
-            TOBN(0x9b87b27b, 0xe6901c55), TOBN(0x80e78538, 0x24fdbc1f),
-            TOBN(0xbbbc0951, 0x2facc27d), TOBN(0x06394239, 0xac143b5a),
-            TOBN(0x35bb4a40, 0x376c1944), TOBN(0x7cb62694, 0x63da1511),
-            TOBN(0xafd29161, 0xb7148a3b), TOBN(0xa6f9d9ed, 0x4e2ea2ee),
-            TOBN(0x15dc2ca2, 0x880dd212), TOBN(0x903c3813, 0xa61139a9),
-            TOBN(0x2aa7b46d, 0x6c0f8785), TOBN(0x36ce2871, 0x901c60ff),
-            TOBN(0xc683b028, 0xe10d9c12), TOBN(0x7573baa2, 0x032f33d3),
-            TOBN(0x87a9b1f6, 0x67a31b58), TOBN(0xfd3ed11a, 0xf4ffae12),
-            TOBN(0x83dcaa9a, 0x0cb2748e), TOBN(0x8239f018, 0x5d6fdf16),
-            TOBN(0xba67b49c, 0x72753941), TOBN(0x2beec455, 0xc321cb36),
-            TOBN(0x88015606, 0x3f8b84ce), TOBN(0x76417083, 0x8d38c86f),
-            TOBN(0x054f1ca7, 0x598953dd), TOBN(0xc939e110, 0x4e8e7429),
-            TOBN(0x9b1ac2b3, 0x5a914f2f), TOBN(0x39e35ed3, 0xe74b8f9c),
-            TOBN(0xd0debdb2, 0x781b2fb0), TOBN(0x1585638f, 0x2d997ba2),
-            TOBN(0x9c4b646e, 0x9e2fce99), TOBN(0x68a21081, 0x1e80857f),
-            TOBN(0x06d54e44, 0x3643b52a), TOBN(0xde8d6d63, 0x0d8eb843),
-            TOBN(0x70321563, 0x42146a0a), TOBN(0x8ba826f2, 0x5eaa3622),
-            TOBN(0x227a58bd, 0x86138787), TOBN(0x43b6c03c, 0x10281d37),
-            TOBN(0x6326afbb, 0xb54dde39), TOBN(0x744e5e8a, 0xdb6f2d5f),
-            TOBN(0x48b2a99a, 0xcff158e1), TOBN(0xa93c8fa0, 0xef87918f),
-            TOBN(0x2182f956, 0xde058c5c), TOBN(0x216235d2, 0x936f9e7a),
-            TOBN(0xace0c0db, 0xd2e31e67), TOBN(0xc96449bf, 0xf23ac3e7),
-            TOBN(0x7e9a2874, 0x170693bd), TOBN(0xa28e14fd, 0xa45e6335),
-            TOBN(0x5757f6b3, 0x56427344), TOBN(0x822e4556, 0xacf8edf9),
-            TOBN(0x2b7a6ee2, 0xe6a285cd), TOBN(0x5866f211, 0xa9df3af0),
-            TOBN(0x40dde2dd, 0xf845b844), TOBN(0x986c3726, 0x110e5e49),
-            TOBN(0x73680c2a, 0xf7172277), TOBN(0x57b94f0f, 0x0cccb244),
-            TOBN(0xbdff7267, 0x2d438ca7), TOBN(0xbad1ce11, 0xcf4663fd),
-            TOBN(0x9813ed9d, 0xd8f71cae), TOBN(0xf43272a6, 0x961fdaa6),
-            TOBN(0xbeff0119, 0xbd6d1637), TOBN(0xfebc4f91, 0x30361978),
-            TOBN(0x02b37a95, 0x2f41deff), TOBN(0x0e44a59a, 0xe63b89b7),
-            TOBN(0x673257dc, 0x143ff951), TOBN(0x19c02205, 0xd752baf4),
-            TOBN(0x46c23069, 0xc4b7d692), TOBN(0x2e6392c3, 0xfd1502ac),
-            TOBN(0x6057b1a2, 0x1b220846), TOBN(0xe51ff946, 0x0c1b5b63),
-        },
-        {
-            TOBN(0x6e85cb51, 0x566c5c43), TOBN(0xcff9c919, 0x3597f046),
-            TOBN(0x9354e90c, 0x4994d94a), TOBN(0xe0a39332, 0x2147927d),
-            TOBN(0x8427fac1, 0x0dc1eb2b), TOBN(0x88cfd8c2, 0x2ff319fa),
-            TOBN(0xe2d4e684, 0x01965274), TOBN(0xfa2e067d, 0x67aaa746),
-            TOBN(0xb6d92a7f, 0x3e5f9f11), TOBN(0x9afe153a, 0xd6cb3b8e),
-            TOBN(0x4d1a6dd7, 0xddf800bd), TOBN(0xf6c13cc0, 0xcaf17e19),
-            TOBN(0x15f6c58e, 0x325fc3ee), TOBN(0x71095400, 0xa31dc3b2),
-            TOBN(0x168e7c07, 0xafa3d3e7), TOBN(0x3f8417a1, 0x94c7ae2d),
-            TOBN(0xec234772, 0x813b230d), TOBN(0x634d0f5f, 0x17344427),
-            TOBN(0x11548ab1, 0xd77fc56a), TOBN(0x7fab1750, 0xce06af77),
-            TOBN(0xb62c10a7, 0x4f7c4f83), TOBN(0xa7d2edc4, 0x220a67d9),
-            TOBN(0x1c404170, 0x921209a0), TOBN(0x0b9815a0, 0xface59f0),
-            TOBN(0x2842589b, 0x319540c3), TOBN(0x18490f59, 0xa283d6f8),
-            TOBN(0xa2731f84, 0xdaae9fcb), TOBN(0x3db6d960, 0xc3683ba0),
-            TOBN(0xc85c63bb, 0x14611069), TOBN(0xb19436af, 0x0788bf05),
-            TOBN(0x905459df, 0x347460d2), TOBN(0x73f6e094, 0xe11a7db1),
-            TOBN(0xdc7f938e, 0xb6357f37), TOBN(0xc5d00f79, 0x2bd8aa62),
-            TOBN(0xc878dcb9, 0x2ca979fc), TOBN(0x37e83ed9, 0xeb023a99),
-            TOBN(0x6b23e273, 0x1560bf3d), TOBN(0x1086e459, 0x1d0fae61),
-            TOBN(0x78248316, 0x9a9414bd), TOBN(0x1b956bc0, 0xf0ea9ea1),
-            TOBN(0x7b85bb91, 0xc31b9c38), TOBN(0x0c5aa90b, 0x48ef57b5),
-            TOBN(0xdedeb169, 0xaf3bab6f), TOBN(0xe610ad73, 0x2d373685),
-            TOBN(0xf13870df, 0x02ba8e15), TOBN(0x0337edb6, 0x8ca7f771),
-            TOBN(0xe4acf747, 0xb62c036c), TOBN(0xd921d576, 0xb6b94e81),
-            TOBN(0xdbc86439, 0x2c422f7a), TOBN(0xfb635362, 0xed348898),
-            TOBN(0x83084668, 0xc45bfcd1), TOBN(0xc357c9e3, 0x2b315e11),
-            TOBN(0xb173b540, 0x5b2e5b8c), TOBN(0x7e946931, 0xe102b9a4),
-            TOBN(0x17c890eb, 0x7b0fb199), TOBN(0xec225a83, 0xd61b662b),
-            TOBN(0xf306a3c8, 0xee3c76cb), TOBN(0x3cf11623, 0xd32a1f6e),
-            TOBN(0xe6d5ab64, 0x6863e956), TOBN(0x3b8a4cbe, 0x5c005c26),
-            TOBN(0xdcd529a5, 0x9ce6bb27), TOBN(0xc4afaa52, 0x04d4b16f),
-            TOBN(0xb0624a26, 0x7923798d), TOBN(0x85e56df6, 0x6b307fab),
-            TOBN(0x0281893c, 0x2bf29698), TOBN(0x91fc19a4, 0xd7ce7603),
-            TOBN(0x75a5dca3, 0xad9a558f), TOBN(0x40ceb3fa, 0x4d50bf77),
-            TOBN(0x1baf6060, 0xbc9ba369), TOBN(0x927e1037, 0x597888c2),
-            TOBN(0xd936bf19, 0x86a34c07), TOBN(0xd4cf10c1, 0xc34ae980),
-            TOBN(0x3a3e5334, 0x859dd614), TOBN(0x9c475b5b, 0x18d0c8ee),
-            TOBN(0x63080d1f, 0x07cd51d5), TOBN(0xc9c0d0a6, 0xb88b4326),
-            TOBN(0x1ac98691, 0xc234296f), TOBN(0x2a0a83a4, 0x94887fb6),
-            TOBN(0x56511427, 0x0cea9cf2), TOBN(0x5230a6e8, 0xa24802f5),
-            TOBN(0xf7a2bf0f, 0x72e3d5c1), TOBN(0x37717446, 0x4f21439e),
-            TOBN(0xfedcbf25, 0x9ce30334), TOBN(0xe0030a78, 0x7ce202f9),
-            TOBN(0x6f2d9ebf, 0x1202e9ca), TOBN(0xe79dde6c, 0x75e6e591),
-            TOBN(0xf52072af, 0xf1dac4f8), TOBN(0x6c8d087e, 0xbb9b404d),
-            TOBN(0xad0fc73d, 0xbce913af), TOBN(0x909e587b, 0x458a07cb),
-            TOBN(0x1300da84, 0xd4f00c8a), TOBN(0x425cd048, 0xb54466ac),
-            TOBN(0xb59cb9be, 0x90e9d8bf), TOBN(0x991616db, 0x3e431b0e),
-            TOBN(0xd3aa117a, 0x531aecff), TOBN(0x91af92d3, 0x59f4dc3b),
-            TOBN(0x9b1ec292, 0xe93fda29), TOBN(0x76bb6c17, 0xe97d91bc),
-            TOBN(0x7509d95f, 0xaface1e6), TOBN(0x3653fe47, 0xbe855ae3),
-            TOBN(0x73180b28, 0x0f680e75), TOBN(0x75eefd1b, 0xeeb6c26c),
-            TOBN(0xa4cdf29f, 0xb66d4236), TOBN(0x2d70a997, 0x6b5821d8),
-            TOBN(0x7a3ee207, 0x20445c36), TOBN(0x71d1ac82, 0x59877174),
-            TOBN(0x0fc539f7, 0x949f73e9), TOBN(0xd05cf3d7, 0x982e3081),
-            TOBN(0x8758e20b, 0x7b1c7129), TOBN(0xffadcc20, 0x569e61f2),
-            TOBN(0xb05d3a2f, 0x59544c2d), TOBN(0xbe16f5c1, 0x9fff5e53),
-            TOBN(0x73cf65b8, 0xaad58135), TOBN(0x622c2119, 0x037aa5be),
-            TOBN(0x79373b3f, 0x646fd6a0), TOBN(0x0e029db5, 0x0d3978cf),
-            TOBN(0x8bdfc437, 0x94fba037), TOBN(0xaefbd687, 0x620797a6),
-            TOBN(0x3fa5382b, 0xbd30d38e), TOBN(0x7627cfbf, 0x585d7464),
-            TOBN(0xb2330fef, 0x4e4ca463), TOBN(0xbcef7287, 0x3566cc63),
-            TOBN(0xd161d2ca, 0xcf780900), TOBN(0x135dc539, 0x5b54827d),
-            TOBN(0x638f052e, 0x27bf1bc6), TOBN(0x10a224f0, 0x07dfa06c),
-            TOBN(0xe973586d, 0x6d3321da), TOBN(0x8b0c5738, 0x26152c8f),
-            TOBN(0x07ef4f2a, 0x34606074), TOBN(0x80fe7fe8, 0xa0f7047a),
-            TOBN(0x3d1a8152, 0xe1a0e306), TOBN(0x32cf43d8, 0x88da5222),
-            TOBN(0xbf89a95f, 0x5f02ffe6), TOBN(0x3d9eb9a4, 0x806ad3ea),
-            TOBN(0x012c17bb, 0x79c8e55e), TOBN(0xfdcd1a74, 0x99c81dac),
-            TOBN(0x7043178b, 0xb9556098), TOBN(0x4090a1df, 0x801c3886),
-            TOBN(0x759800ff, 0x9b67b912), TOBN(0x3e5c0304, 0x232620c8),
-            TOBN(0x4b9d3c4b, 0x70dceeca), TOBN(0xbb2d3c15, 0x181f648e),
-            TOBN(0xf981d837, 0x6e33345c), TOBN(0xb626289b, 0x0cf2297a),
-            TOBN(0x766ac659, 0x8baebdcf), TOBN(0x1a28ae09, 0x75df01e5),
-            TOBN(0xb71283da, 0x375876d8), TOBN(0x4865a96d, 0x607b9800),
-            TOBN(0x25dd1bcd, 0x237936b2), TOBN(0x332f4f4b, 0x60417494),
-            TOBN(0xd0923d68, 0x370a2147), TOBN(0x497f5dfb, 0xdc842203),
-            TOBN(0x9dc74cbd, 0x32be5e0f), TOBN(0x7475bcb7, 0x17a01375),
-            TOBN(0x438477c9, 0x50d872b1), TOBN(0xcec67879, 0xffe1d63d),
-            TOBN(0x9b006014, 0xd8578c70), TOBN(0xc9ad99a8, 0x78bb6b8b),
-            TOBN(0x6799008e, 0x11fb3806), TOBN(0xcfe81435, 0xcd44cab3),
-            TOBN(0xa2ee1582, 0x2f4fb344), TOBN(0xb8823450, 0x483fa6eb),
-            TOBN(0x622d323d, 0x652c7749), TOBN(0xd8474a98, 0xbeb0a15b),
-            TOBN(0xe43c154d, 0x5d1c00d0), TOBN(0x7fd581d9, 0x0e3e7aac),
-            TOBN(0x2b44c619, 0x2525ddf8), TOBN(0x67a033eb, 0xb8ae9739),
-            TOBN(0x113ffec1, 0x9ef2d2e4), TOBN(0x1bf6767e, 0xd5a0ea7f),
-            TOBN(0x57fff75e, 0x03714c0a), TOBN(0xa23c422e, 0x0a23e9ee),
-            TOBN(0xdd5f6b2d, 0x540f83af), TOBN(0xc2c2c27e, 0x55ea46a7),
-            TOBN(0xeb6b4246, 0x672a1208), TOBN(0xd13599f7, 0xae634f7a),
-            TOBN(0xcf914b5c, 0xd7b32c6e), TOBN(0x61a5a640, 0xeaf61814),
-            TOBN(0x8dc3df8b, 0x208a1bbb), TOBN(0xef627fd6, 0xb6d79aa5),
-            TOBN(0x44232ffc, 0xc4c86bc8), TOBN(0xe6f9231b, 0x061539fe),
-            TOBN(0x1d04f25a, 0x958b9533), TOBN(0x180cf934, 0x49e8c885),
-            TOBN(0x89689595, 0x9884aaf7), TOBN(0xb1959be3, 0x07b348a6),
-            TOBN(0x96250e57, 0x3c147c87), TOBN(0xae0efb3a, 0xdd0c61f8),
-            TOBN(0xed00745e, 0xca8c325e), TOBN(0x3c911696, 0xecff3f70),
-            TOBN(0x73acbc65, 0x319ad41d), TOBN(0x7b01a020, 0xf0b1c7ef),
-            TOBN(0xea32b293, 0x63a1483f), TOBN(0x89eabe71, 0x7a248f96),
-            TOBN(0x9c6231d3, 0x343157e5), TOBN(0x93a375e5, 0xdf3c546d),
-            TOBN(0xe76e9343, 0x6a2afe69), TOBN(0xc4f89100, 0xe166c88e),
-            TOBN(0x248efd0d, 0x4f872093), TOBN(0xae0eb3ea, 0x8fe0ea61),
-            TOBN(0xaf89790d, 0x9d79046e), TOBN(0x4d650f2d, 0x6cee0976),
-            TOBN(0xa3935d9a, 0x43071eca), TOBN(0x66fcd2c9, 0x283b0bfe),
-            TOBN(0x0e665eb5, 0x696605f1), TOBN(0xe77e5d07, 0xa54cd38d),
-            TOBN(0x90ee050a, 0x43d950cf), TOBN(0x86ddebda, 0xd32e69b5),
-            TOBN(0x6ad94a3d, 0xfddf7415), TOBN(0xf7fa1309, 0x3f6e8d5a),
-            TOBN(0xc4831d1d, 0xe9957f75), TOBN(0x7de28501, 0xd5817447),
-            TOBN(0x6f1d7078, 0x9e2aeb6b), TOBN(0xba2b9ff4, 0xf67a53c2),
-            TOBN(0x36963767, 0xdf9defc3), TOBN(0x479deed3, 0x0d38022c),
-            TOBN(0xd2edb89b, 0x3a8631e8), TOBN(0x8de855de, 0x7a213746),
-            TOBN(0xb2056cb7, 0xb00c5f11), TOBN(0xdeaefbd0, 0x2c9b85e4),
-            TOBN(0x03f39a8d, 0xd150892d), TOBN(0x37b84686, 0x218b7985),
-            TOBN(0x36296dd8, 0xb7375f1a), TOBN(0x472cd4b1, 0xb78e898e),
-            TOBN(0x15dff651, 0xe9f05de9), TOBN(0xd4045069, 0x2ce98ba9),
-            TOBN(0x8466a7ae, 0x9b38024c), TOBN(0xb910e700, 0xe5a6b5ef),
-            TOBN(0xae1c56ea, 0xb3aa8f0d), TOBN(0xbab2a507, 0x7eee74a6),
-            TOBN(0x0dca11e2, 0x4b4c4620), TOBN(0xfd896e2e, 0x4c47d1f4),
-            TOBN(0xeb45ae53, 0x308fbd93), TOBN(0x46cd5a2e, 0x02c36fda),
-            TOBN(0x6a3d4e90, 0xbaa48385), TOBN(0xdd55e62e, 0x9dbe9960),
-            TOBN(0xa1406aa0, 0x2a81ede7), TOBN(0x6860dd14, 0xf9274ea7),
-            TOBN(0xcfdcb0c2, 0x80414f86), TOBN(0xff410b10, 0x22f94327),
-            TOBN(0x5a33cc38, 0x49ad467b), TOBN(0xefb48b6c, 0x0a7335f1),
-            TOBN(0x14fb54a4, 0xb153a360), TOBN(0x604aa9d2, 0xb52469cc),
-            TOBN(0x5e9dc486, 0x754e48e9), TOBN(0x693cb455, 0x37471e8e),
-            TOBN(0xfb2fd7cd, 0x8d3b37b6), TOBN(0x63345e16, 0xcf09ff07),
-            TOBN(0x9910ba6b, 0x23a5d896), TOBN(0x1fe19e35, 0x7fe4364e),
-            TOBN(0x6e1da8c3, 0x9a33c677), TOBN(0x15b4488b, 0x29fd9fd0),
-            TOBN(0x1f439254, 0x1a1f22bf), TOBN(0x920a8a70, 0xab8163e8),
-            TOBN(0x3fd1b249, 0x07e5658e), TOBN(0xf2c4f79c, 0xb6ec839b),
-            TOBN(0x1abbc3d0, 0x4aa38d1b), TOBN(0x3b0db35c, 0xb5d9510e),
-            TOBN(0x1754ac78, 0x3e60dec0), TOBN(0x53272fd7, 0xea099b33),
-            TOBN(0x5fb0494f, 0x07a8e107), TOBN(0x4a89e137, 0x6a8191fa),
-            TOBN(0xa113b7f6, 0x3c4ad544), TOBN(0x88a2e909, 0x6cb9897b),
-            TOBN(0x17d55de3, 0xb44a3f84), TOBN(0xacb2f344, 0x17c6c690),
-            TOBN(0x32088168, 0x10232390), TOBN(0xf2e8a61f, 0x6c733bf7),
-            TOBN(0xa774aab6, 0x9c2d7652), TOBN(0xfb5307e3, 0xed95c5bc),
-            TOBN(0xa05c73c2, 0x4981f110), TOBN(0x1baae31c, 0xa39458c9),
-            TOBN(0x1def185b, 0xcbea62e7), TOBN(0xe8ac9eae, 0xeaf63059),
-            TOBN(0x098a8cfd, 0x9921851c), TOBN(0xd959c3f1, 0x3abe2f5b),
-            TOBN(0xa4f19525, 0x20e40ae5), TOBN(0x320789e3, 0x07a24aa1),
-            TOBN(0x259e6927, 0x7392b2bc), TOBN(0x58f6c667, 0x1918668b),
-            TOBN(0xce1db2bb, 0xc55d2d8b), TOBN(0x41d58bb7, 0xf4f6ca56),
-            TOBN(0x7650b680, 0x8f877614), TOBN(0x905e16ba, 0xf4c349ed),
-            TOBN(0xed415140, 0xf661acac), TOBN(0x3b8784f0, 0xcb2270af),
-            TOBN(0x3bc280ac, 0x8a402cba), TOBN(0xd53f7146, 0x0937921a),
-            TOBN(0xc03c8ee5, 0xe5681e83), TOBN(0x62126105, 0xf6ac9e4a),
-            TOBN(0x9503a53f, 0x936b1a38), TOBN(0x3d45e2d4, 0x782fecbd),
-            TOBN(0x69a5c439, 0x76e8ae98), TOBN(0xb53b2eeb, 0xbfb4b00e),
-            TOBN(0xf1674712, 0x72386c89), TOBN(0x30ca34a2, 0x4268bce4),
-            TOBN(0x7f1ed86c, 0x78341730), TOBN(0x8ef5beb8, 0xb525e248),
-            TOBN(0xbbc489fd, 0xb74fbf38), TOBN(0x38a92a0e, 0x91a0b382),
-            TOBN(0x7a77ba3f, 0x22433ccf), TOBN(0xde8362d6, 0xa29f05a9),
-            TOBN(0x7f6a30ea, 0x61189afc), TOBN(0x693b5505, 0x59ef114f),
-            TOBN(0x50266bc0, 0xcd1797a1), TOBN(0xea17b47e, 0xf4b7af2d),
-            TOBN(0xd6c4025c, 0x3df9483e), TOBN(0x8cbb9d9f, 0xa37b18c9),
-            TOBN(0x91cbfd9c, 0x4d8424cf), TOBN(0xdb7048f1, 0xab1c3506),
-            TOBN(0x9eaf641f, 0x028206a3), TOBN(0xf986f3f9, 0x25bdf6ce),
-            TOBN(0x262143b5, 0x224c08dc), TOBN(0x2bbb09b4, 0x81b50c91),
-            TOBN(0xc16ed709, 0xaca8c84f), TOBN(0xa6210d9d, 0xb2850ca8),
-            TOBN(0x6d8df67a, 0x09cb54d6), TOBN(0x91eef6e0, 0x500919a4),
-            TOBN(0x90f61381, 0x0f132857), TOBN(0x9acede47, 0xf8d5028b),
-            TOBN(0x844d1b71, 0x90b771c3), TOBN(0x563b71e4, 0xba6426be),
-            TOBN(0x2efa2e83, 0xbdb802ff), TOBN(0x3410cbab, 0xab5b4a41),
-            TOBN(0x555b2d26, 0x30da84dd), TOBN(0xd0711ae9, 0xee1cc29a),
-            TOBN(0xcf3e8c60, 0x2f547792), TOBN(0x03d7d5de, 0xdc678b35),
-            TOBN(0x071a2fa8, 0xced806b8), TOBN(0x222e6134, 0x697f1478),
-            TOBN(0xdc16fd5d, 0xabfcdbbf), TOBN(0x44912ebf, 0x121b53b8),
-            TOBN(0xac943674, 0x2496c27c), TOBN(0x8ea3176c, 0x1ffc26b0),
-            TOBN(0xb6e224ac, 0x13debf2c), TOBN(0x524cc235, 0xf372a832),
-            TOBN(0xd706e1d8, 0x9f6f1b18), TOBN(0x2552f005, 0x44cce35b),
-            TOBN(0x8c8326c2, 0xa88e31fc), TOBN(0xb5468b2c, 0xf9552047),
-            TOBN(0xce683e88, 0x3ff90f2b), TOBN(0x77947bdf, 0x2f0a5423),
-            TOBN(0xd0a1b28b, 0xed56e328), TOBN(0xaee35253, 0xc20134ac),
-            TOBN(0x7e98367d, 0x3567962f), TOBN(0x379ed61f, 0x8188bffb),
-            TOBN(0x73bba348, 0xfaf130a1), TOBN(0x6c1f75e1, 0x904ed734),
-            TOBN(0x18956642, 0x3b4a79fc), TOBN(0xf20bc83d, 0x54ef4493),
-            TOBN(0x836d425d, 0x9111eca1), TOBN(0xe5b5c318, 0x009a8dcf),
-            TOBN(0x3360b25d, 0x13221bc5), TOBN(0x707baad2, 0x6b3eeaf7),
-            TOBN(0xd7279ed8, 0x743a95a1), TOBN(0x7450a875, 0x969e809f),
-            TOBN(0x32b6bd53, 0xe5d0338f), TOBN(0x1e77f7af, 0x2b883bbc),
-            TOBN(0x90da12cc, 0x1063ecd0), TOBN(0xe2697b58, 0xc315be47),
-            TOBN(0x2771a5bd, 0xda85d534), TOBN(0x53e78c1f, 0xff980eea),
-            TOBN(0xadf1cf84, 0x900385e7), TOBN(0x7d3b14f6, 0xc9387b62),
-            TOBN(0x170e74b0, 0xcb8f2bd2), TOBN(0x2d50b486, 0x827fa993),
-            TOBN(0xcdbe8c9a, 0xf6f32bab), TOBN(0x55e906b0, 0xc3b93ab8),
-            TOBN(0x747f22fc, 0x8fe280d1), TOBN(0xcd8e0de5, 0xb2e114ab),
-            TOBN(0x5ab7dbeb, 0xe10b68b0), TOBN(0x9dc63a9c, 0xa480d4b2),
-            TOBN(0x78d4bc3b, 0x4be1495f), TOBN(0x25eb3db8, 0x9359122d),
-            TOBN(0x3f8ac05b, 0x0809cbdc), TOBN(0xbf4187bb, 0xd37c702f),
-            TOBN(0x84cea069, 0x1416a6a5), TOBN(0x8f860c79, 0x43ef881c),
-            TOBN(0x41311f8a, 0x38038a5d), TOBN(0xe78c2ec0, 0xfc612067),
-            TOBN(0x494d2e81, 0x5ad73581), TOBN(0xb4cc9e00, 0x59604097),
-            TOBN(0xff558aec, 0xf3612cba), TOBN(0x35beef7a, 0x9e36c39e),
-            TOBN(0x1845c7cf, 0xdbcf41b9), TOBN(0x5703662a, 0xaea997c0),
-            TOBN(0x8b925afe, 0xe402f6d8), TOBN(0xd0a1b1ae, 0x4dd72162),
-            TOBN(0x9f47b375, 0x03c41c4b), TOBN(0xa023829b, 0x0391d042),
-            TOBN(0x5f5045c3, 0x503b8b0a), TOBN(0x123c2688, 0x98c010e5),
-            TOBN(0x324ec0cc, 0x36ba06ee), TOBN(0xface3115, 0x3dd2cc0c),
-            TOBN(0xb364f3be, 0xf333e91f), TOBN(0xef8aff73, 0x28e832b0),
-            TOBN(0x1e9bad04, 0x2d05841b), TOBN(0x42f0e3df, 0x356a21e2),
-            TOBN(0xa3270bcb, 0x4add627e), TOBN(0xb09a8158, 0xd322e711),
-            TOBN(0x86e326a1, 0x0fee104a), TOBN(0xad7788f8, 0x3703f65d),
-            TOBN(0x7e765430, 0x47bc4833), TOBN(0x6cee582b, 0x2b9b893a),
-            TOBN(0x9cd2a167, 0xe8f55a7b), TOBN(0xefbee3c6, 0xd9e4190d),
-            TOBN(0x33ee7185, 0xd40c2e9d), TOBN(0x844cc9c5, 0xa380b548),
-            TOBN(0x323f8ecd, 0x66926e04), TOBN(0x0001e38f, 0x8110c1ba),
-            TOBN(0x8dbcac12, 0xfc6a7f07), TOBN(0xd65e1d58, 0x0cec0827),
-            TOBN(0xd2cd4141, 0xbe76ca2d), TOBN(0x7895cf5c, 0xe892f33a),
-            TOBN(0x956d230d, 0x367139d2), TOBN(0xa91abd3e, 0xd012c4c1),
-            TOBN(0x34fa4883, 0x87eb36bf), TOBN(0xc5f07102, 0x914b8fb4),
-            TOBN(0x90f0e579, 0xadb9c95f), TOBN(0xfe6ea8cb, 0x28888195),
-            TOBN(0x7b9b5065, 0xedfa9284), TOBN(0x6c510bd2, 0x2b8c8d65),
-            TOBN(0xd7b8ebef, 0xcbe8aafd), TOBN(0xedb3af98, 0x96b1da07),
-            TOBN(0x28ff779d, 0x6295d426), TOBN(0x0c4f6ac7, 0x3fa3ad7b),
-            TOBN(0xec44d054, 0x8b8e2604), TOBN(0x9b32a66d, 0x8b0050e1),
-            TOBN(0x1f943366, 0xf0476ce2), TOBN(0x7554d953, 0xa602c7b4),
-            TOBN(0xbe35aca6, 0x524f2809), TOBN(0xb6881229, 0xfd4edbea),
-            TOBN(0xe8cd0c8f, 0x508efb63), TOBN(0x9eb5b5c8, 0x6abcefc7),
-            TOBN(0xf5621f5f, 0xb441ab4f), TOBN(0x79e6c046, 0xb76a2b22),
-            TOBN(0x74a4792c, 0xe37a1f69), TOBN(0xcbd252cb, 0x03542b60),
-            TOBN(0x785f65d5, 0xb3c20bd3), TOBN(0x8dea6143, 0x4fabc60c),
-            TOBN(0x45e21446, 0xde673629), TOBN(0x57f7aa1e, 0x703c2d21),
-            TOBN(0xa0e99b7f, 0x98c868c7), TOBN(0x4e42f66d, 0x8b641676),
-            TOBN(0x602884dc, 0x91077896), TOBN(0xa0d690cf, 0xc2c9885b),
-            TOBN(0xfeb4da33, 0x3b9a5187), TOBN(0x5f789598, 0x153c87ee),
-            TOBN(0x2192dd47, 0x52b16dba), TOBN(0xdeefc0e6, 0x3524c1b1),
-            TOBN(0x465ea76e, 0xe4383693), TOBN(0x79401711, 0x361b8d98),
-            TOBN(0xa5f9ace9, 0xf21a15cb), TOBN(0x73d26163, 0xefee9aeb),
-            TOBN(0xcca844b3, 0xe677016c), TOBN(0x6c122b07, 0x57eaee06),
-            TOBN(0xb782dce7, 0x15f09690), TOBN(0x508b9b12, 0x2dfc0fc9),
-            TOBN(0x9015ab4b, 0x65d89fc6), TOBN(0x5e79dab7, 0xd6d5bb0f),
-            TOBN(0x64f021f0, 0x6c775aa2), TOBN(0xdf09d8cc, 0x37c7eca1),
-            TOBN(0x9a761367, 0xef2fa506), TOBN(0xed4ca476, 0x5b81eec6),
-            TOBN(0x262ede36, 0x10bbb8b5), TOBN(0x0737ce83, 0x0641ada3),
-            TOBN(0x4c94288a, 0xe9831ccc), TOBN(0x487fc1ce, 0x8065e635),
-            TOBN(0xb13d7ab3, 0xb8bb3659), TOBN(0xdea5df3e, 0x855e4120),
-            TOBN(0xb9a18573, 0x85eb0244), TOBN(0x1a1b8ea3, 0xa7cfe0a3),
-            TOBN(0x3b837119, 0x67b0867c), TOBN(0x8d5e0d08, 0x9d364520),
-            TOBN(0x52dccc1e, 0xd930f0e3), TOBN(0xefbbcec7, 0xbf20bbaf),
-            TOBN(0x99cffcab, 0x0263ad10), TOBN(0xd8199e6d, 0xfcd18f8a),
-            TOBN(0x64e2773f, 0xe9f10617), TOBN(0x0079e8e1, 0x08704848),
-            TOBN(0x1169989f, 0x8a342283), TOBN(0x8097799c, 0xa83012e6),
-            TOBN(0xece966cb, 0x8a6a9001), TOBN(0x93b3afef, 0x072ac7fc),
-            TOBN(0xe6893a2a, 0x2db3d5ba), TOBN(0x263dc462, 0x89bf4fdc),
-            TOBN(0x8852dfc9, 0xe0396673), TOBN(0x7ac70895, 0x3af362b6),
-            TOBN(0xbb9cce4d, 0x5c2f342b), TOBN(0xbf80907a, 0xb52d7aae),
-            TOBN(0x97f3d3cd, 0x2161bcd0), TOBN(0xb25b0834, 0x0962744d),
-            TOBN(0xc5b18ea5, 0x6c3a1dda), TOBN(0xfe4ec7eb, 0x06c92317),
-            TOBN(0xb787b890, 0xad1c4afe), TOBN(0xdccd9a92, 0x0ede801a),
-            TOBN(0x9ac6ddda, 0xdb58da1f), TOBN(0x22bbc12f, 0xb8cae6ee),
-            TOBN(0xc6f8bced, 0x815c4a43), TOBN(0x8105a92c, 0xf96480c7),
-            TOBN(0x0dc3dbf3, 0x7a859d51), TOBN(0xe3ec7ce6, 0x3041196b),
-            TOBN(0xd9f64b25, 0x0d1067c9), TOBN(0xf2321321, 0x3d1f8dd8),
-            TOBN(0x8b5c619c, 0x76497ee8), TOBN(0x5d2b0ac6, 0xc717370e),
-            TOBN(0x98204cb6, 0x4fcf68e1), TOBN(0x0bdec211, 0x62bc6792),
-            TOBN(0x6973ccef, 0xa63b1011), TOBN(0xf9e3fa97, 0xe0de1ac5),
-            TOBN(0x5efb693e, 0x3d0e0c8b), TOBN(0x037248e9, 0xd2d4fcb4),
-        },
-        {TOBN(0x80802dc9, 0x1ec34f9e), TOBN(0xd8772d35, 0x33810603),
-         TOBN(0x3f06d66c, 0x530cb4f3), TOBN(0x7be5ed0d, 0xc475c129),
-         TOBN(0xcb9e3c19, 0x31e82b10), TOBN(0xc63d2857, 0xc9ff6b4c),
-         TOBN(0xb92118c6, 0x92a1b45e), TOBN(0x0aec4414, 0x7285bbca),
-         TOBN(0xfc189ae7, 0x1e29a3ef), TOBN(0xcbe906f0, 0x4c93302e),
-         TOBN(0xd0107914, 0xceaae10e), TOBN(0xb7a23f34, 0xb68e19f8),
-         TOBN(0xe9d875c2, 0xefd2119d), TOBN(0x03198c6e, 0xfcadc9c8),
-         TOBN(0x65591bf6, 0x4da17113), TOBN(0x3cf0bbf8, 0x3d443038),
-         TOBN(0xae485bb7, 0x2b724759), TOBN(0x945353e1, 0xb2d4c63a),
-         TOBN(0x82159d07, 0xde7d6f2c), TOBN(0x389caef3, 0x4ec5b109),
-         TOBN(0x4a8ebb53, 0xdb65ef14), TOBN(0x2dc2cb7e, 0xdd99de43),
-         TOBN(0x816fa3ed, 0x83f2405f), TOBN(0x73429bb9, 0xc14208a3),
-         TOBN(0xb618d590, 0xb01e6e27), TOBN(0x047e2ccd, 0xe180b2dc),
-         TOBN(0xd1b299b5, 0x04aea4a9), TOBN(0x412c9e1e, 0x9fa403a4),
-         TOBN(0x88d28a36, 0x79407552), TOBN(0x49c50136, 0xf332b8e3),
-         TOBN(0x3a1b6fcc, 0xe668de19), TOBN(0x178851bc, 0x75122b97),
-         TOBN(0xb1e13752, 0xfb85fa4c), TOBN(0xd61257ce, 0x383c8ce9),
-         TOBN(0xd43da670, 0xd2f74dae), TOBN(0xa35aa23f, 0xbf846bbb),
-         TOBN(0x5e74235d, 0x4421fc83), TOBN(0xf6df8ee0, 0xc363473b),
-         TOBN(0x34d7f52a, 0x3c4aa158), TOBN(0x50d05aab, 0x9bc6d22e),
-         TOBN(0x8c56e735, 0xa64785f4), TOBN(0xbc56637b, 0x5f29cd07),
-         TOBN(0x53b2bb80, 0x3ee35067), TOBN(0x50235a0f, 0xdc919270),
-         TOBN(0x191ab6d8, 0xf2c4aa65), TOBN(0xc3475831, 0x8396023b),
-         TOBN(0x80400ba5, 0xf0f805ba), TOBN(0x8881065b, 0x5ec0f80f),
-         TOBN(0xc370e522, 0xcc1b5e83), TOBN(0xde2d4ad1, 0x860b8bfb),
-         TOBN(0xad364df0, 0x67b256df), TOBN(0x8f12502e, 0xe0138997),
-         TOBN(0x503fa0dc, 0x7783920a), TOBN(0xe80014ad, 0xc0bc866a),
-         TOBN(0x3f89b744, 0xd3064ba6), TOBN(0x03511dcd, 0xcba5dba5),
-         TOBN(0x197dd46d, 0x95a7b1a2), TOBN(0x9c4e7ad6, 0x3c6341fb),
-         TOBN(0x426eca29, 0x484c2ece), TOBN(0x9211e489, 0xde7f4f8a),
-         TOBN(0x14997f6e, 0xc78ef1f4), TOBN(0x2b2c0910, 0x06574586),
-         TOBN(0x17286a6e, 0x1c3eede8), TOBN(0x25f92e47, 0x0f60e018),
-         TOBN(0x805c5646, 0x31890a36), TOBN(0x703ef600, 0x57feea5b),
-         TOBN(0x389f747c, 0xaf3c3030), TOBN(0xe0e5daeb, 0x54dd3739),
-         TOBN(0xfe24a4c3, 0xc9c9f155), TOBN(0x7e4bf176, 0xb5393962),
-         TOBN(0x37183de2, 0xaf20bf29), TOBN(0x4a1bd7b5, 0xf95a8c3b),
-         TOBN(0xa83b9699, 0x46191d3d), TOBN(0x281fc8dd, 0x7b87f257),
-         TOBN(0xb18e2c13, 0x54107588), TOBN(0x6372def7, 0x9b2bafe8),
-         TOBN(0xdaf4bb48, 0x0d8972ca), TOBN(0x3f2dd4b7, 0x56167a3f),
-         TOBN(0x1eace32d, 0x84310cf4), TOBN(0xe3bcefaf, 0xe42700aa),
-         TOBN(0x5fe5691e, 0xd785e73d), TOBN(0xa5db5ab6, 0x2ea60467),
-         TOBN(0x02e23d41, 0xdfc6514a), TOBN(0x35e8048e, 0xe03c3665),
-         TOBN(0x3f8b118f, 0x1adaa0f8), TOBN(0x28ec3b45, 0x84ce1a5a),
-         TOBN(0xe8cacc6e, 0x2c6646b8), TOBN(0x1343d185, 0xdbd0e40f),
-         TOBN(0xe5d7f844, 0xcaaa358c), TOBN(0x1a1db7e4, 0x9924182a),
-         TOBN(0xd64cd42d, 0x9c875d9a), TOBN(0xb37b515f, 0x042eeec8),
-         TOBN(0x4d4dd409, 0x7b165fbe), TOBN(0xfc322ed9, 0xe206eff3),
-         TOBN(0x7dee4102, 0x59b7e17e), TOBN(0x55a481c0, 0x8236ca00),
-         TOBN(0x8c885312, 0xc23fc975), TOBN(0x15715806, 0x05d6297b),
-         TOBN(0xa078868e, 0xf78edd39), TOBN(0x956b31e0, 0x03c45e52),
-         TOBN(0x470275d5, 0xff7b33a6), TOBN(0xc8d5dc3a, 0x0c7e673f),
-         TOBN(0x419227b4, 0x7e2f2598), TOBN(0x8b37b634, 0x4c14a975),
-         TOBN(0xd0667ed6, 0x8b11888c), TOBN(0x5e0e8c3e, 0x803e25dc),
-         TOBN(0x34e5d0dc, 0xb987a24a), TOBN(0x9f40ac3b, 0xae920323),
-         TOBN(0x5463de95, 0x34e0f63a), TOBN(0xa128bf92, 0x6b6328f9),
-         TOBN(0x491ccd7c, 0xda64f1b7), TOBN(0x7ef1ec27, 0xc47bde35),
-         TOBN(0xa857240f, 0xa36a2737), TOBN(0x35dc1366, 0x63621bc1),
-         TOBN(0x7a3a6453, 0xd4fb6897), TOBN(0x80f1a439, 0xc929319d),
-         TOBN(0xfc18274b, 0xf8cb0ba0), TOBN(0xb0b53766, 0x8078c5eb),
-         TOBN(0xfb0d4924, 0x1e01d0ef), TOBN(0x50d7c67d, 0x372ab09c),
-         TOBN(0xb4e370af, 0x3aeac968), TOBN(0xe4f7fee9, 0xc4b63266),
-         TOBN(0xb4acd4c2, 0xe3ac5664), TOBN(0xf8910bd2, 0xceb38cbf),
-         TOBN(0x1c3ae50c, 0xc9c0726e), TOBN(0x15309569, 0xd97b40bf),
-         TOBN(0x70884b7f, 0xfd5a5a1b), TOBN(0x3890896a, 0xef8314cd),
-         TOBN(0x58e1515c, 0xa5618c93), TOBN(0xe665432b, 0x77d942d1),
-         TOBN(0xb32181bf, 0xb6f767a8), TOBN(0x753794e8, 0x3a604110),
-         TOBN(0x09afeb7c, 0xe8c0dbcc), TOBN(0x31e02613, 0x598673a3),
-         TOBN(0x5d98e557, 0x7d46db00), TOBN(0xfc21fb8c, 0x9d985b28),
-         TOBN(0xc9040116, 0xb0843e0b), TOBN(0x53b1b3a8, 0x69b04531),
-         TOBN(0xdd1649f0, 0x85d7d830), TOBN(0xbb3bcc87, 0xcb7427e8),
-         TOBN(0x77261100, 0xc93dce83), TOBN(0x7e79da61, 0xa1922a2a),
-         TOBN(0x587a2b02, 0xf3149ce8), TOBN(0x147e1384, 0xde92ec83),
-         TOBN(0x484c83d3, 0xaf077f30), TOBN(0xea78f844, 0x0658b53a),
-         TOBN(0x912076c2, 0x027aec53), TOBN(0xf34714e3, 0x93c8177d),
-         TOBN(0x37ef5d15, 0xc2376c84), TOBN(0x8315b659, 0x3d1aa783),
-         TOBN(0x3a75c484, 0xef852a90), TOBN(0x0ba0c58a, 0x16086bd4),
-         TOBN(0x29688d7a, 0x529a6d48), TOBN(0x9c7f250d, 0xc2f19203),
-         TOBN(0x123042fb, 0x682e2df9), TOBN(0x2b7587e7, 0xad8121bc),
-         TOBN(0x30fc0233, 0xe0182a65), TOBN(0xb82ecf87, 0xe3e1128a),
-         TOBN(0x71682861, 0x93fb098f), TOBN(0x043e21ae, 0x85e9e6a7),
-         TOBN(0xab5b49d6, 0x66c834ea), TOBN(0x3be43e18, 0x47414287),
-         TOBN(0xf40fb859, 0x219a2a47), TOBN(0x0e6559e9, 0xcc58df3c),
-         TOBN(0xfe1dfe8e, 0x0c6615b4), TOBN(0x14abc8fd, 0x56459d70),
-         TOBN(0x7be0fa8e, 0x05de0386), TOBN(0x8e63ef68, 0xe9035c7c),
-         TOBN(0x116401b4, 0x53b31e91), TOBN(0x0cba7ad4, 0x4436b4d8),
-         TOBN(0x9151f9a0, 0x107afd66), TOBN(0xafaca8d0, 0x1f0ee4c4),
-         TOBN(0x75fe5c1d, 0x9ee9761c), TOBN(0x3497a16b, 0xf0c0588f),
-         TOBN(0x3ee2bebd, 0x0304804c), TOBN(0xa8fb9a60, 0xc2c990b9),
-         TOBN(0xd14d32fe, 0x39251114), TOBN(0x36bf25bc, 0xcac73366),
-         TOBN(0xc9562c66, 0xdba7495c), TOBN(0x324d301b, 0x46ad348b),
-         TOBN(0x9f46620c, 0xd670407e), TOBN(0x0ea8d4f1, 0xe3733a01),
-         TOBN(0xd396d532, 0xb0c324e0), TOBN(0x5b211a0e, 0x03c317cd),
-         TOBN(0x090d7d20, 0x5ffe7b37), TOBN(0x3b7f3efb, 0x1747d2da),
-         TOBN(0xa2cb525f, 0xb54fc519), TOBN(0x6e220932, 0xf66a971e),
-         TOBN(0xddc160df, 0xb486d440), TOBN(0x7fcfec46, 0x3fe13465),
-         TOBN(0x83da7e4e, 0x76e4c151), TOBN(0xd6fa48a1, 0xd8d302b5),
-         TOBN(0xc6304f26, 0x5872cd88), TOBN(0x806c1d3c, 0x278b90a1),
-         TOBN(0x3553e725, 0xcaf0bc1c), TOBN(0xff59e603, 0xbb9d8d5c),
-         TOBN(0xa4550f32, 0x7a0b85dd), TOBN(0xdec5720a, 0x93ecc217),
-         TOBN(0x0b88b741, 0x69d62213), TOBN(0x7212f245, 0x5b365955),
-         TOBN(0x20764111, 0xb5cae787), TOBN(0x13cb7f58, 0x1dfd3124),
-         TOBN(0x2dca77da, 0x1175aefb), TOBN(0xeb75466b, 0xffaae775),
-         TOBN(0x74d76f3b, 0xdb6cff32), TOBN(0x7440f37a, 0x61fcda9a),
-         TOBN(0x1bb3ac92, 0xb525028b), TOBN(0x20fbf8f7, 0xa1975f29),
-         TOBN(0x982692e1, 0xdf83097f), TOBN(0x28738f6c, 0x554b0800),
-         TOBN(0xdc703717, 0xa2ce2f2f), TOBN(0x7913b93c, 0x40814194),
-         TOBN(0x04924593, 0x1fe89636), TOBN(0x7b98443f, 0xf78834a6),
-         TOBN(0x11c6ab01, 0x5114a5a1), TOBN(0x60deb383, 0xffba5f4c),
-         TOBN(0x4caa54c6, 0x01a982e6), TOBN(0x1dd35e11, 0x3491cd26),
-         TOBN(0x973c315f, 0x7cbd6b05), TOBN(0xcab00775, 0x52494724),
-         TOBN(0x04659b1f, 0x6565e15a), TOBN(0xbf30f529, 0x8c8fb026),
-         TOBN(0xfc21641b, 0xa8a0de37), TOBN(0xe9c7a366, 0xfa5e5114),
-         TOBN(0xdb849ca5, 0x52f03ad8), TOBN(0xc7e8dbe9, 0x024e35c0),
-         TOBN(0xa1a2bbac, 0xcfc3c789), TOBN(0xbf733e7d, 0x9c26f262),
-         TOBN(0x882ffbf5, 0xb8444823), TOBN(0xb7224e88, 0x6bf8483b),
-         TOBN(0x53023b8b, 0x65bef640), TOBN(0xaabfec91, 0xd4d5f8cd),
-         TOBN(0xa40e1510, 0x079ea1bd), TOBN(0x1ad9addc, 0xd05d5d26),
-         TOBN(0xdb3f2eab, 0x13e68d4f), TOBN(0x1cff1ae2, 0x640f803f),
-         TOBN(0xe0e7b749, 0xd4cee117), TOBN(0x8e9f275b, 0x4036d909),
-         TOBN(0xce34e31d, 0x8f4d4c38), TOBN(0x22b37f69, 0xd75130fc),
-         TOBN(0x83e0f1fd, 0xb4014604), TOBN(0xa8ce9919, 0x89415078),
-         TOBN(0x82375b75, 0x41792efe), TOBN(0x4f59bf5c, 0x97d4515b),
-         TOBN(0xac4f324f, 0x923a277d), TOBN(0xd9bc9b7d, 0x650f3406),
-         TOBN(0xc6fa87d1, 0x8a39bc51), TOBN(0x82588530, 0x5ccc108f),
-         TOBN(0x5ced3c9f, 0x82e4c634), TOBN(0x8efb8314, 0x3a4464f8),
-         TOBN(0xe706381b, 0x7a1dca25), TOBN(0x6cd15a3c, 0x5a2a412b),
-         TOBN(0x9347a8fd, 0xbfcd8fb5), TOBN(0x31db2eef, 0x6e54cd22),
-         TOBN(0xc4aeb11e, 0xf8d8932f), TOBN(0x11e7c1ed, 0x344411af),
-         TOBN(0x2653050c, 0xdc9a151e), TOBN(0x9edbfc08, 0x3bb0a859),
-         TOBN(0x926c81c7, 0xfd5691e7), TOBN(0x9c1b2342, 0x6f39019a),
-         TOBN(0x64a81c8b, 0x7f8474b9), TOBN(0x90657c07, 0x01761819),
-         TOBN(0x390b3331, 0x55e0375a), TOBN(0xc676c626, 0xb6ebc47d),
-         TOBN(0x51623247, 0xb7d6dee8), TOBN(0x0948d927, 0x79659313),
-         TOBN(0x99700161, 0xe9ab35ed), TOBN(0x06cc32b4, 0x8ddde408),
-         TOBN(0x6f2fd664, 0x061ef338), TOBN(0x1606fa02, 0xc202e9ed),
-         TOBN(0x55388bc1, 0x929ba99b), TOBN(0xc4428c5e, 0x1e81df69),
-         TOBN(0xce2028ae, 0xf91b0b2a), TOBN(0xce870a23, 0xf03dfd3f),
-         TOBN(0x66ec2c87, 0x0affe8ed), TOBN(0xb205fb46, 0x284d0c00),
-         TOBN(0xbf5dffe7, 0x44cefa48), TOBN(0xb6fc37a8, 0xa19876d7),
-         TOBN(0xbecfa84c, 0x08b72863), TOBN(0xd7205ff5, 0x2576374f),
-         TOBN(0x80330d32, 0x8887de41), TOBN(0x5de0df0c, 0x869ea534),
-         TOBN(0x13f42753, 0x3c56ea17), TOBN(0xeb1f6069, 0x452b1a78),
-         TOBN(0x50474396, 0xe30ea15c), TOBN(0x575816a1, 0xc1494125),
-         TOBN(0xbe1ce55b, 0xfe6bb38f), TOBN(0xb901a948, 0x96ae30f7),
-         TOBN(0xe5af0f08, 0xd8fc3548), TOBN(0x5010b5d0, 0xd73bfd08),
-         TOBN(0x993d2880, 0x53fe655a), TOBN(0x99f2630b, 0x1c1309fd),
-         TOBN(0xd8677baf, 0xb4e3b76f), TOBN(0x14e51ddc, 0xb840784b),
-         TOBN(0x326c750c, 0xbf0092ce), TOBN(0xc83d306b, 0xf528320f),
-         TOBN(0xc4456715, 0x77d4715c), TOBN(0xd30019f9, 0x6b703235),
-         TOBN(0x207ccb2e, 0xd669e986), TOBN(0x57c824af, 0xf6dbfc28),
-         TOBN(0xf0eb532f, 0xd8f92a23), TOBN(0x4a557fd4, 0x9bb98fd2),
-         TOBN(0xa57acea7, 0xc1e6199a), TOBN(0x0c663820, 0x8b94b1ed),
-         TOBN(0x9b42be8f, 0xf83a9266), TOBN(0xc7741c97, 0x0101bd45),
-         TOBN(0x95770c11, 0x07bd9ceb), TOBN(0x1f50250a, 0x8b2e0744),
-         TOBN(0xf762eec8, 0x1477b654), TOBN(0xc65b900e, 0x15efe59a),
-         TOBN(0x88c96148, 0x9546a897), TOBN(0x7e8025b3, 0xc30b4d7c),
-         TOBN(0xae4065ef, 0x12045cf9), TOBN(0x6fcb2caf, 0x9ccce8bd),
-         TOBN(0x1fa0ba4e, 0xf2cf6525), TOBN(0xf683125d, 0xcb72c312),
-         TOBN(0xa01da4ea, 0xe312410e), TOBN(0x67e28677, 0x6cd8e830),
-         TOBN(0xabd95752, 0x98fb3f07), TOBN(0x05f11e11, 0xeef649a5),
-         TOBN(0xba47faef, 0x9d3472c2), TOBN(0x3adff697, 0xc77d1345),
-         TOBN(0x4761fa04, 0xdd15afee), TOBN(0x64f1f61a, 0xb9e69462),
-         TOBN(0xfa691fab, 0x9bfb9093), TOBN(0x3df8ae8f, 0xa1133dfe),
-         TOBN(0xcd5f8967, 0x58cc710d), TOBN(0xfbb88d50, 0x16c7fe79),
-         TOBN(0x8e011b4c, 0xe88c50d1), TOBN(0x7532e807, 0xa8771c4f),
-         TOBN(0x64c78a48, 0xe2278ee4), TOBN(0x0b283e83, 0x3845072a),
-         TOBN(0x98a6f291, 0x49e69274), TOBN(0xb96e9668, 0x1868b21c),
-         TOBN(0x38f0adc2, 0xb1a8908e), TOBN(0x90afcff7, 0x1feb829d),
-         TOBN(0x9915a383, 0x210b0856), TOBN(0xa5a80602, 0xdef04889),
-         TOBN(0x800e9af9, 0x7c64d509), TOBN(0x81382d0b, 0xb8996f6f),
-         TOBN(0x490eba53, 0x81927e27), TOBN(0x46c63b32, 0x4af50182),
-         TOBN(0x784c5fd9, 0xd3ad62ce), TOBN(0xe4fa1870, 0xf8ae8736),
-         TOBN(0x4ec9d0bc, 0xd7466b25), TOBN(0x84ddbe1a, 0xdb235c65),
-         TOBN(0x5e2645ee, 0x163c1688), TOBN(0x570bd00e, 0x00eba747),
-         TOBN(0xfa51b629, 0x128bfa0f), TOBN(0x92fce1bd, 0x6c1d3b68),
-         TOBN(0x3e7361dc, 0xb66778b1), TOBN(0x9c7d249d, 0x5561d2bb),
-         TOBN(0xa40b28bf, 0x0bbc6229), TOBN(0x1c83c05e, 0xdfd91497),
-         TOBN(0x5f9f5154, 0xf083df05), TOBN(0xbac38b3c, 0xeee66c9d),
-         TOBN(0xf71db7e3, 0xec0dfcfd), TOBN(0xf2ecda8e, 0x8b0a8416),
-         TOBN(0x52fddd86, 0x7812aa66), TOBN(0x2896ef10, 0x4e6f4272),
-         TOBN(0xff27186a, 0x0fe9a745), TOBN(0x08249fcd, 0x49ca70db),
-         TOBN(0x7425a2e6, 0x441cac49), TOBN(0xf4a0885a, 0xece5ff57),
-         TOBN(0x6e2cb731, 0x7d7ead58), TOBN(0xf96cf7d6, 0x1898d104),
-         TOBN(0xafe67c9d, 0x4f2c9a89), TOBN(0x89895a50, 0x1c7bf5bc),
-         TOBN(0xdc7cb8e5, 0x573cecfa), TOBN(0x66497eae, 0xd15f03e6),
-         TOBN(0x6bc0de69, 0x3f084420), TOBN(0x323b9b36, 0xacd532b0),
-         TOBN(0xcfed390a, 0x0115a3c1), TOBN(0x9414c40b, 0x2d65ca0e),
-         TOBN(0x641406bd, 0x2f530c78), TOBN(0x29369a44, 0x833438f2),
-         TOBN(0x996884f5, 0x903fa271), TOBN(0xe6da0fd2, 0xb9da921e),
-         TOBN(0xa6f2f269, 0x5db01e54), TOBN(0x1ee3e9bd, 0x6876214e),
-         TOBN(0xa26e181c, 0xe27a9497), TOBN(0x36d254e4, 0x8e215e04),
-         TOBN(0x42f32a6c, 0x252cabca), TOBN(0x99481487, 0x80b57614),
-         TOBN(0x4c4dfe69, 0x40d9cae1), TOBN(0x05869580, 0x11a10f09),
-         TOBN(0xca287b57, 0x3491b64b), TOBN(0x77862d5d, 0x3fd4a53b),
-         TOBN(0xbf94856e, 0x50349126), TOBN(0x2be30bd1, 0x71c5268f),
-         TOBN(0x10393f19, 0xcbb650a6), TOBN(0x639531fe, 0x778cf9fd),
-         TOBN(0x02556a11, 0xb2935359), TOBN(0xda38aa96, 0xaf8c126e),
-         TOBN(0x47dbe6c2, 0x0960167f), TOBN(0x37bbabb6, 0x501901cd),
-         TOBN(0xb6e979e0, 0x2c947778), TOBN(0xd69a5175, 0x7a1a1dc6),
-         TOBN(0xc3ed5095, 0x9d9faf0c), TOBN(0x4dd9c096, 0x1d5fa5f0),
-         TOBN(0xa0c4304d, 0x64f16ea8), TOBN(0x8b1cac16, 0x7e718623),
-         TOBN(0x0b576546, 0x7c67f03e), TOBN(0x559cf5ad, 0xcbd88c01),
-         TOBN(0x074877bb, 0x0e2af19a), TOBN(0x1f717ec1, 0xa1228c92),
-         TOBN(0x70bcb800, 0x326e8920), TOBN(0xec6e2c5c, 0x4f312804),
-         TOBN(0x426aea7d, 0x3fca4752), TOBN(0xf12c0949, 0x2211f62a),
-         TOBN(0x24beecd8, 0x7be7b6b5), TOBN(0xb77eaf4c, 0x36d7a27d),
-         TOBN(0x154c2781, 0xfda78fd3), TOBN(0x848a83b0, 0x264eeabe),
-         TOBN(0x81287ef0, 0x4ffe2bc4), TOBN(0x7b6d88c6, 0xb6b6fc2a),
-         TOBN(0x805fb947, 0xce417d99), TOBN(0x4b93dcc3, 0x8b916cc4),
-         TOBN(0x72e65bb3, 0x21273323), TOBN(0xbcc1badd, 0x6ea9886e),
-         TOBN(0x0e223011, 0x4bc5ee85), TOBN(0xa561be74, 0xc18ee1e4),
-         TOBN(0x762fd2d4, 0xa6bcf1f1), TOBN(0x50e6a5a4, 0x95231489),
-         TOBN(0xca96001f, 0xa00b500b), TOBN(0x5c098cfc, 0x5d7dcdf5),
-         TOBN(0xa64e2d2e, 0x8c446a85), TOBN(0xbae9bcf1, 0x971f3c62),
-         TOBN(0x4ec22683, 0x8435a2c5), TOBN(0x8ceaed6c, 0x4bad4643),
-         TOBN(0xe9f8fb47, 0xccccf4e3), TOBN(0xbd4f3fa4, 0x1ce3b21e),
-         TOBN(0xd79fb110, 0xa3db3292), TOBN(0xe28a37da, 0xb536c66a),
-         TOBN(0x279ce87b, 0x8e49e6a9), TOBN(0x70ccfe8d, 0xfdcec8e3),
-         TOBN(0x2193e4e0, 0x3ba464b2), TOBN(0x0f39d60e, 0xaca9a398),
-         TOBN(0x7d7932af, 0xf82c12ab), TOBN(0xd8ff50ed, 0x91e7e0f7),
-         TOBN(0xea961058, 0xfa28a7e0), TOBN(0xc726cf25, 0x0bf5ec74),
-         TOBN(0xe74d55c8, 0xdb229666), TOBN(0x0bd9abbf, 0xa57f5799),
-         TOBN(0x7479ef07, 0x4dfc47b3), TOBN(0xd9c65fc3, 0x0c52f91d),
-         TOBN(0x8e0283fe, 0x36a8bde2), TOBN(0xa32a8b5e, 0x7d4b7280),
-         TOBN(0x6a677c61, 0x12e83233), TOBN(0x0fbb3512, 0xdcc9bf28),
-         TOBN(0x562e8ea5, 0x0d780f61), TOBN(0x0db8b22b, 0x1dc4e89c),
-         TOBN(0x0a6fd1fb, 0x89be0144), TOBN(0x8c77d246, 0xca57113b),
-         TOBN(0x4639075d, 0xff09c91c), TOBN(0x5b47b17f, 0x5060824c),
-         TOBN(0x58aea2b0, 0x16287b52), TOBN(0xa1343520, 0xd0cd8eb0),
-         TOBN(0x6148b4d0, 0xc5d58573), TOBN(0xdd2b6170, 0x291c68ae),
-         TOBN(0xa61b3929, 0x1da3b3b7), TOBN(0x5f946d79, 0x08c4ac10),
-         TOBN(0x4105d4a5, 0x7217d583), TOBN(0x5061da3d, 0x25e6de5e),
-         TOBN(0x3113940d, 0xec1b4991), TOBN(0xf12195e1, 0x36f485ae),
-         TOBN(0xa7507fb2, 0x731a2ee0), TOBN(0x95057a8e, 0x6e9e196e),
-         TOBN(0xa3c2c911, 0x2e130136), TOBN(0x97dfbb36, 0x33c60d15),
-         TOBN(0xcaf3c581, 0xb300ee2b), TOBN(0x77f25d90, 0xf4bac8b8),
-         TOBN(0xdb1c4f98, 0x6d840cd6), TOBN(0x471d62c0, 0xe634288c),
-         TOBN(0x8ec2f85e, 0xcec8a161), TOBN(0x41f37cbc, 0xfa6f4ae2),
-         TOBN(0x6793a20f, 0x4b709985), TOBN(0x7a7bd33b, 0xefa8985b),
-         TOBN(0x2c6a3fbd, 0x938e6446), TOBN(0x19042619, 0x2a8d47c1),
-         TOBN(0x16848667, 0xcc36975f), TOBN(0x02acf168, 0x9d5f1dfb),
-         TOBN(0x62d41ad4, 0x613baa94), TOBN(0xb56fbb92, 0x9f684670),
-         TOBN(0xce610d0d, 0xe9e40569), TOBN(0x7b99c65f, 0x35489fef),
-         TOBN(0x0c88ad1b, 0x3df18b97), TOBN(0x81b7d9be, 0x5d0e9edb),
-         TOBN(0xd85218c0, 0xc716cc0a), TOBN(0xf4b5ff90, 0x85691c49),
-         TOBN(0xa4fd666b, 0xce356ac6), TOBN(0x17c72895, 0x4b327a7a),
-         TOBN(0xf93d5085, 0xda6be7de), TOBN(0xff71530e, 0x3301d34e),
-         TOBN(0x4cd96442, 0xd8f448e8), TOBN(0x9283d331, 0x2ed18ffa),
-         TOBN(0x4d33dd99, 0x2a849870), TOBN(0xa716964b, 0x41576335),
-         TOBN(0xff5e3a9b, 0x179be0e5), TOBN(0x5b9d6b1b, 0x83b13632),
-         TOBN(0x3b8bd7d4, 0xa52f313b), TOBN(0xc9dd95a0, 0x637a4660),
-         TOBN(0x30035962, 0x0b3e218f), TOBN(0xce1481a3, 0xc7b28a3c),
-         TOBN(0xab41b43a, 0x43228d83), TOBN(0x24ae1c30, 0x4ad63f99),
-         TOBN(0x8e525f1a, 0x46a51229), TOBN(0x14af860f, 0xcd26d2b4),
-         TOBN(0xd6baef61, 0x3f714aa1), TOBN(0xf51865ad, 0xeb78795e),
-         TOBN(0xd3e21fce, 0xe6a9d694), TOBN(0x82ceb1dd, 0x8a37b527)}
-};
-
-__END_HIDDEN_DECLS