github.com/consensys/gnark-crypto@v0.14.0/ecc/bw6-756/fp/element_exp.go (about)

     1  // Copyright 2020 ConsenSys Software Inc.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  // Code generated by consensys/gnark-crypto DO NOT EDIT
    16  
    17  package fp
    18  
    19  // expBySqrtExp is equivalent to z.Exp(x, 1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f0d0)
    20  //
    21  // uses github.com/mmcloughlin/addchain v0.4.0 to generate a shorter addition chain
    22  func (z *Element) expBySqrtExp(x Element) *Element {
    23  	// addition chain:
    24  	//
    25  	//	_10      = 2*1
    26  	//	_11      = 1 + _10
    27  	//	_100     = 1 + _11
    28  	//	_101     = 1 + _100
    29  	//	_1001    = _100 + _101
    30  	//	_1011    = _10 + _1001
    31  	//	_1101    = _10 + _1011
    32  	//	_1111    = _10 + _1101
    33  	//	_10001   = _10 + _1111
    34  	//	_10101   = _100 + _10001
    35  	//	_10111   = _10 + _10101
    36  	//	_11001   = _10 + _10111
    37  	//	_11011   = _10 + _11001
    38  	//	_11101   = _10 + _11011
    39  	//	_11111   = _10 + _11101
    40  	//	_100001  = _10 + _11111
    41  	//	_100011  = _10 + _100001
    42  	//	_100101  = _10 + _100011
    43  	//	_100111  = _10 + _100101
    44  	//	_101001  = _10 + _100111
    45  	//	_101011  = _10 + _101001
    46  	//	_101101  = _10 + _101011
    47  	//	_101111  = _10 + _101101
    48  	//	_110001  = _10 + _101111
    49  	//	_110011  = _10 + _110001
    50  	//	_110101  = _10 + _110011
    51  	//	_110111  = _10 + _110101
    52  	//	_111001  = _10 + _110111
    53  	//	_111011  = _10 + _111001
    54  	//	_111101  = _10 + _111011
    55  	//	_111111  = _10 + _111101
    56  	//	_1111010 = _111011 + _111111
    57  	//	i52      = ((_1111010 << 4 + _11011) << 7 + _101011) << 7
    58  	//	i67      = ((_110111 + i52) << 7 + _110101) << 5 + _10111
    59  	//	i87      = ((i67 << 7 + _111001) << 5 + _10001) << 6
    60  	//	i101     = ((_10111 + i87) << 8 + _10101) << 3 + _11
    61  	//	i128     = ((i101 << 9 + _1001) << 8 + _111111) << 8
    62  	//	i145     = ((_1111 + i128) << 9 + _110101) << 5 + _1101
    63  	//	i167     = ((i145 << 9 + _110011) << 6 + _110101) << 5
    64  	//	i187     = ((_11001 + i167) << 8 + _101111) << 9 + _110011
    65  	//	i205     = ((i187 << 7 + _100101) << 6 + _111101) << 3
    66  	//	i223     = ((_11 + i205) << 8 + _1011) << 7 + _11101
    67  	//	i244     = ((i223 << 9 + _100111) << 6 + _111011) << 4
    68  	//	i262     = ((_1111 + i244) << 8 + _100011) << 7 + _10001
    69  	//	i285     = ((i262 << 7 + _101) << 8 + _10101) << 6
    70  	//	i299     = ((_10001 + i285) << 7 + _110001) << 4 + _1101
    71  	//	i325     = ((i299 << 7 + _11011) << 8 + _110011) << 9
    72  	//	i341     = ((_110101 + i325) << 7 + _111001) << 6 + _110011
    73  	//	i366     = ((i341 << 6 + _110001) << 9 + _10101) << 8
    74  	//	i383     = ((_100011 + i366) << 6 + _11011) << 8 + _111101
    75  	//	i401     = ((i383 << 3 + _11) << 10 + _1011) << 3
    76  	//	i422     = ((1 + i401) << 12 + _100101) << 6 + _110101
    77  	//	i448     = ((i422 << 12 + _100111) << 6 + _110101) << 6
    78  	//	i467     = ((_10101 + i448) << 11 + _101001) << 5 + _11111
    79  	//	i490     = ((i467 << 5 + _1011) << 9 + _111001) << 7
    80  	//	i508     = ((_110011 + i490) << 4 + _1101) << 11 + _110111
    81  	//	i535     = ((i508 << 7 + _11001) << 9 + _110111) << 9
    82  	//	i550     = ((_101001 + i535) << 6 + _1011) << 6 + _1101
    83  	//	i572     = ((i550 << 9 + _101011) << 5 + _11011) << 6
    84  	//	i590     = ((_11011 + i572) << 6 + _11001) << 9 + _110101
    85  	//	i616     = ((i590 << 7 + _10101) << 6 + _11) << 11
    86  	//	i630     = ((_10101 + i616) << 4 + _101) << 7 + _1111
    87  	//	i653     = ((i630 << 10 + _100101) << 6 + _100011) << 5
    88  	//	i670     = ((_1111 + i653) << 7 + _11111) << 7 + _111101
    89  	//	i688     = ((i670 << 3 + _101) << 10 + _101101) << 3
    90  	//	i708     = ((_101 + i688) << 10 + _101111) << 7 + _100001
    91  	//	i731     = ((i708 << 3 + _101) << 10 + _101001) << 8
    92  	//	i751     = ((_100111 + i731) << 3 + _11) << 14 + _110011
    93  	//	i768     = ((i751 << 6 + _110001) << 5 + _11111) << 4
    94  	//	i781     = 2*((_11 + i768) << 9 + _111111) + 1
    95  	//	return     (i781 << 8 + _1101) << 4
    96  	//
    97  	// Operations: 667 squares 127 multiplies
    98  
    99  	// Allocate Temporaries.
   100  	var (
   101  		t0  = new(Element)
   102  		t1  = new(Element)
   103  		t2  = new(Element)
   104  		t3  = new(Element)
   105  		t4  = new(Element)
   106  		t5  = new(Element)
   107  		t6  = new(Element)
   108  		t7  = new(Element)
   109  		t8  = new(Element)
   110  		t9  = new(Element)
   111  		t10 = new(Element)
   112  		t11 = new(Element)
   113  		t12 = new(Element)
   114  		t13 = new(Element)
   115  		t14 = new(Element)
   116  		t15 = new(Element)
   117  		t16 = new(Element)
   118  		t17 = new(Element)
   119  		t18 = new(Element)
   120  		t19 = new(Element)
   121  		t20 = new(Element)
   122  		t21 = new(Element)
   123  		t22 = new(Element)
   124  		t23 = new(Element)
   125  		t24 = new(Element)
   126  		t25 = new(Element)
   127  		t26 = new(Element)
   128  		t27 = new(Element)
   129  		t28 = new(Element)
   130  	)
   131  
   132  	// var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28 Element
   133  	// Step 1: t0 = x^0x2
   134  	t0.Square(&x)
   135  
   136  	// Step 2: t1 = x^0x3
   137  	t1.Mul(&x, t0)
   138  
   139  	// Step 3: t2 = x^0x4
   140  	t2.Mul(&x, t1)
   141  
   142  	// Step 4: t7 = x^0x5
   143  	t7.Mul(&x, t2)
   144  
   145  	// Step 5: t26 = x^0x9
   146  	t26.Mul(t2, t7)
   147  
   148  	// Step 6: t20 = x^0xb
   149  	t20.Mul(t0, t26)
   150  
   151  	// Step 7: z = x^0xd
   152  	z.Mul(t0, t20)
   153  
   154  	// Step 8: t12 = x^0xf
   155  	t12.Mul(t0, z)
   156  
   157  	// Step 9: t23 = x^0x11
   158  	t23.Mul(t0, t12)
   159  
   160  	// Step 10: t15 = x^0x15
   161  	t15.Mul(t2, t23)
   162  
   163  	// Step 11: t27 = x^0x17
   164  	t27.Mul(t0, t15)
   165  
   166  	// Step 12: t17 = x^0x19
   167  	t17.Mul(t0, t27)
   168  
   169  	// Step 13: t18 = x^0x1b
   170  	t18.Mul(t0, t17)
   171  
   172  	// Step 14: t25 = x^0x1d
   173  	t25.Mul(t0, t18)
   174  
   175  	// Step 15: t2 = x^0x1f
   176  	t2.Mul(t0, t25)
   177  
   178  	// Step 16: t8 = x^0x21
   179  	t8.Mul(t0, t2)
   180  
   181  	// Step 17: t13 = x^0x23
   182  	t13.Mul(t0, t8)
   183  
   184  	// Step 18: t14 = x^0x25
   185  	t14.Mul(t0, t13)
   186  
   187  	// Step 19: t5 = x^0x27
   188  	t5.Mul(t0, t14)
   189  
   190  	// Step 20: t6 = x^0x29
   191  	t6.Mul(t0, t5)
   192  
   193  	// Step 21: t19 = x^0x2b
   194  	t19.Mul(t0, t6)
   195  
   196  	// Step 22: t10 = x^0x2d
   197  	t10.Mul(t0, t19)
   198  
   199  	// Step 23: t9 = x^0x2f
   200  	t9.Mul(t0, t10)
   201  
   202  	// Step 24: t3 = x^0x31
   203  	t3.Mul(t0, t9)
   204  
   205  	// Step 25: t4 = x^0x33
   206  	t4.Mul(t0, t3)
   207  
   208  	// Step 26: t16 = x^0x35
   209  	t16.Mul(t0, t4)
   210  
   211  	// Step 27: t21 = x^0x37
   212  	t21.Mul(t0, t16)
   213  
   214  	// Step 28: t22 = x^0x39
   215  	t22.Mul(t0, t21)
   216  
   217  	// Step 29: t24 = x^0x3b
   218  	t24.Mul(t0, t22)
   219  
   220  	// Step 30: t11 = x^0x3d
   221  	t11.Mul(t0, t24)
   222  
   223  	// Step 31: t0 = x^0x3f
   224  	t0.Mul(t0, t11)
   225  
   226  	// Step 32: t28 = x^0x7a
   227  	t28.Mul(t24, t0)
   228  
   229  	// Step 36: t28 = x^0x7a0
   230  	for s := 0; s < 4; s++ {
   231  		t28.Square(t28)
   232  	}
   233  
   234  	// Step 37: t28 = x^0x7bb
   235  	t28.Mul(t18, t28)
   236  
   237  	// Step 44: t28 = x^0x3dd80
   238  	for s := 0; s < 7; s++ {
   239  		t28.Square(t28)
   240  	}
   241  
   242  	// Step 45: t28 = x^0x3ddab
   243  	t28.Mul(t19, t28)
   244  
   245  	// Step 52: t28 = x^0x1eed580
   246  	for s := 0; s < 7; s++ {
   247  		t28.Square(t28)
   248  	}
   249  
   250  	// Step 53: t28 = x^0x1eed5b7
   251  	t28.Mul(t21, t28)
   252  
   253  	// Step 60: t28 = x^0xf76adb80
   254  	for s := 0; s < 7; s++ {
   255  		t28.Square(t28)
   256  	}
   257  
   258  	// Step 61: t28 = x^0xf76adbb5
   259  	t28.Mul(t16, t28)
   260  
   261  	// Step 66: t28 = x^0x1eed5b76a0
   262  	for s := 0; s < 5; s++ {
   263  		t28.Square(t28)
   264  	}
   265  
   266  	// Step 67: t28 = x^0x1eed5b76b7
   267  	t28.Mul(t27, t28)
   268  
   269  	// Step 74: t28 = x^0xf76adbb5b80
   270  	for s := 0; s < 7; s++ {
   271  		t28.Square(t28)
   272  	}
   273  
   274  	// Step 75: t28 = x^0xf76adbb5bb9
   275  	t28.Mul(t22, t28)
   276  
   277  	// Step 80: t28 = x^0x1eed5b76b7720
   278  	for s := 0; s < 5; s++ {
   279  		t28.Square(t28)
   280  	}
   281  
   282  	// Step 81: t28 = x^0x1eed5b76b7731
   283  	t28.Mul(t23, t28)
   284  
   285  	// Step 87: t28 = x^0x7bb56ddaddcc40
   286  	for s := 0; s < 6; s++ {
   287  		t28.Square(t28)
   288  	}
   289  
   290  	// Step 88: t27 = x^0x7bb56ddaddcc57
   291  	t27.Mul(t27, t28)
   292  
   293  	// Step 96: t27 = x^0x7bb56ddaddcc5700
   294  	for s := 0; s < 8; s++ {
   295  		t27.Square(t27)
   296  	}
   297  
   298  	// Step 97: t27 = x^0x7bb56ddaddcc5715
   299  	t27.Mul(t15, t27)
   300  
   301  	// Step 100: t27 = x^0x3ddab6ed6ee62b8a8
   302  	for s := 0; s < 3; s++ {
   303  		t27.Square(t27)
   304  	}
   305  
   306  	// Step 101: t27 = x^0x3ddab6ed6ee62b8ab
   307  	t27.Mul(t1, t27)
   308  
   309  	// Step 110: t27 = x^0x7bb56ddaddcc5715600
   310  	for s := 0; s < 9; s++ {
   311  		t27.Square(t27)
   312  	}
   313  
   314  	// Step 111: t26 = x^0x7bb56ddaddcc5715609
   315  	t26.Mul(t26, t27)
   316  
   317  	// Step 119: t26 = x^0x7bb56ddaddcc571560900
   318  	for s := 0; s < 8; s++ {
   319  		t26.Square(t26)
   320  	}
   321  
   322  	// Step 120: t26 = x^0x7bb56ddaddcc57156093f
   323  	t26.Mul(t0, t26)
   324  
   325  	// Step 128: t26 = x^0x7bb56ddaddcc57156093f00
   326  	for s := 0; s < 8; s++ {
   327  		t26.Square(t26)
   328  	}
   329  
   330  	// Step 129: t26 = x^0x7bb56ddaddcc57156093f0f
   331  	t26.Mul(t12, t26)
   332  
   333  	// Step 138: t26 = x^0xf76adbb5bb98ae2ac127e1e00
   334  	for s := 0; s < 9; s++ {
   335  		t26.Square(t26)
   336  	}
   337  
   338  	// Step 139: t26 = x^0xf76adbb5bb98ae2ac127e1e35
   339  	t26.Mul(t16, t26)
   340  
   341  	// Step 144: t26 = x^0x1eed5b76b77315c55824fc3c6a0
   342  	for s := 0; s < 5; s++ {
   343  		t26.Square(t26)
   344  	}
   345  
   346  	// Step 145: t26 = x^0x1eed5b76b77315c55824fc3c6ad
   347  	t26.Mul(z, t26)
   348  
   349  	// Step 154: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a00
   350  	for s := 0; s < 9; s++ {
   351  		t26.Square(t26)
   352  	}
   353  
   354  	// Step 155: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33
   355  	t26.Mul(t4, t26)
   356  
   357  	// Step 161: t26 = x^0xf76adbb5bb98ae2ac127e1e3568cc0
   358  	for s := 0; s < 6; s++ {
   359  		t26.Square(t26)
   360  	}
   361  
   362  	// Step 162: t26 = x^0xf76adbb5bb98ae2ac127e1e3568cf5
   363  	t26.Mul(t16, t26)
   364  
   365  	// Step 167: t26 = x^0x1eed5b76b77315c55824fc3c6ad19ea0
   366  	for s := 0; s < 5; s++ {
   367  		t26.Square(t26)
   368  	}
   369  
   370  	// Step 168: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb9
   371  	t26.Mul(t17, t26)
   372  
   373  	// Step 176: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb900
   374  	for s := 0; s < 8; s++ {
   375  		t26.Square(t26)
   376  	}
   377  
   378  	// Step 177: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f
   379  	t26.Mul(t9, t26)
   380  
   381  	// Step 186: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e00
   382  	for s := 0; s < 9; s++ {
   383  		t26.Square(t26)
   384  	}
   385  
   386  	// Step 187: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e33
   387  	t26.Mul(t4, t26)
   388  
   389  	// Step 194: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f1980
   390  	for s := 0; s < 7; s++ {
   391  		t26.Square(t26)
   392  	}
   393  
   394  	// Step 195: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5
   395  	t26.Mul(t14, t26)
   396  
   397  	// Step 201: t26 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc66940
   398  	for s := 0; s < 6; s++ {
   399  		t26.Square(t26)
   400  	}
   401  
   402  	// Step 202: t26 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d
   403  	t26.Mul(t11, t26)
   404  
   405  	// Step 205: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334be8
   406  	for s := 0; s < 3; s++ {
   407  		t26.Square(t26)
   408  	}
   409  
   410  	// Step 206: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb
   411  	t26.Mul(t1, t26)
   412  
   413  	// Step 214: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb00
   414  	for s := 0; s < 8; s++ {
   415  		t26.Square(t26)
   416  	}
   417  
   418  	// Step 215: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b
   419  	t26.Mul(t20, t26)
   420  
   421  	// Step 222: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f58580
   422  	for s := 0; s < 7; s++ {
   423  		t26.Square(t26)
   424  	}
   425  
   426  	// Step 223: t25 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d
   427  	t25.Mul(t25, t26)
   428  
   429  	// Step 232: t25 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a00
   430  	for s := 0; s < 9; s++ {
   431  		t25.Square(t25)
   432  	}
   433  
   434  	// Step 233: t25 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27
   435  	t25.Mul(t5, t25)
   436  
   437  	// Step 239: t25 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89c0
   438  	for s := 0; s < 6; s++ {
   439  		t25.Square(t25)
   440  	}
   441  
   442  	// Step 240: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fb
   443  	t24.Mul(t24, t25)
   444  
   445  	// Step 244: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fb0
   446  	for s := 0; s < 4; s++ {
   447  		t24.Square(t24)
   448  	}
   449  
   450  	// Step 245: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf
   451  	t24.Mul(t12, t24)
   452  
   453  	// Step 253: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf00
   454  	for s := 0; s < 8; s++ {
   455  		t24.Square(t24)
   456  	}
   457  
   458  	// Step 254: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23
   459  	t24.Mul(t13, t24)
   460  
   461  	// Step 261: t24 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf9180
   462  	for s := 0; s < 7; s++ {
   463  		t24.Square(t24)
   464  	}
   465  
   466  	// Step 262: t24 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf9191
   467  	t24.Mul(t23, t24)
   468  
   469  	// Step 269: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c880
   470  	for s := 0; s < 7; s++ {
   471  		t24.Square(t24)
   472  	}
   473  
   474  	// Step 270: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c885
   475  	t24.Mul(t7, t24)
   476  
   477  	// Step 278: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88500
   478  	for s := 0; s < 8; s++ {
   479  		t24.Square(t24)
   480  	}
   481  
   482  	// Step 279: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515
   483  	t24.Mul(t15, t24)
   484  
   485  	// Step 285: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf232214540
   486  	for s := 0; s < 6; s++ {
   487  		t24.Square(t24)
   488  	}
   489  
   490  	// Step 286: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf232214551
   491  	t23.Mul(t23, t24)
   492  
   493  	// Step 293: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a880
   494  	for s := 0; s < 7; s++ {
   495  		t23.Square(t23)
   496  	}
   497  
   498  	// Step 294: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1
   499  	t23.Mul(t3, t23)
   500  
   501  	// Step 298: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b10
   502  	for s := 0; s < 4; s++ {
   503  		t23.Square(t23)
   504  	}
   505  
   506  	// Step 299: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d
   507  	t23.Mul(z, t23)
   508  
   509  	// Step 306: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e80
   510  	for s := 0; s < 7; s++ {
   511  		t23.Square(t23)
   512  	}
   513  
   514  	// Step 307: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b
   515  	t23.Mul(t18, t23)
   516  
   517  	// Step 315: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b00
   518  	for s := 0; s < 8; s++ {
   519  		t23.Square(t23)
   520  	}
   521  
   522  	// Step 316: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b33
   523  	t23.Mul(t4, t23)
   524  
   525  	// Step 325: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366600
   526  	for s := 0; s < 9; s++ {
   527  		t23.Square(t23)
   528  	}
   529  
   530  	// Step 326: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635
   531  	t23.Mul(t16, t23)
   532  
   533  	// Step 333: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331a80
   534  	for s := 0; s < 7; s++ {
   535  		t23.Square(t23)
   536  	}
   537  
   538  	// Step 334: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9
   539  	t23.Mul(t22, t23)
   540  
   541  	// Step 340: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae40
   542  	for s := 0; s < 6; s++ {
   543  		t23.Square(t23)
   544  	}
   545  
   546  	// Step 341: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73
   547  	t23.Mul(t4, t23)
   548  
   549  	// Step 347: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cc0
   550  	for s := 0; s < 6; s++ {
   551  		t23.Square(t23)
   552  	}
   553  
   554  	// Step 348: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf1
   555  	t23.Mul(t3, t23)
   556  
   557  	// Step 357: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e200
   558  	for s := 0; s < 9; s++ {
   559  		t23.Square(t23)
   560  	}
   561  
   562  	// Step 358: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215
   563  	t23.Mul(t15, t23)
   564  
   565  	// Step 366: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e21500
   566  	for s := 0; s < 8; s++ {
   567  		t23.Square(t23)
   568  	}
   569  
   570  	// Step 367: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e21523
   571  	t23.Mul(t13, t23)
   572  
   573  	// Step 373: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548c0
   574  	for s := 0; s < 6; s++ {
   575  		t23.Square(t23)
   576  	}
   577  
   578  	// Step 374: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db
   579  	t23.Mul(t18, t23)
   580  
   581  	// Step 382: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db00
   582  	for s := 0; s < 8; s++ {
   583  		t23.Square(t23)
   584  	}
   585  
   586  	// Step 383: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d
   587  	t23.Mul(t11, t23)
   588  
   589  	// Step 386: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9e8
   590  	for s := 0; s < 3; s++ {
   591  		t23.Square(t23)
   592  	}
   593  
   594  	// Step 387: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb
   595  	t23.Mul(t1, t23)
   596  
   597  	// Step 397: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac00
   598  	for s := 0; s < 10; s++ {
   599  		t23.Square(t23)
   600  	}
   601  
   602  	// Step 398: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b
   603  	t23.Mul(t20, t23)
   604  
   605  	// Step 401: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6058
   606  	for s := 0; s < 3; s++ {
   607  		t23.Square(t23)
   608  	}
   609  
   610  	// Step 402: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059
   611  	t23.Mul(&x, t23)
   612  
   613  	// Step 414: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059000
   614  	for s := 0; s < 12; s++ {
   615  		t23.Square(t23)
   616  	}
   617  
   618  	// Step 415: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025
   619  	t23.Mul(t14, t23)
   620  
   621  	// Step 421: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640940
   622  	for s := 0; s < 6; s++ {
   623  		t23.Square(t23)
   624  	}
   625  
   626  	// Step 422: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975
   627  	t23.Mul(t16, t23)
   628  
   629  	// Step 434: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975000
   630  	for s := 0; s < 12; s++ {
   631  		t23.Square(t23)
   632  	}
   633  
   634  	// Step 435: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027
   635  	t23.Mul(t5, t23)
   636  
   637  	// Step 441: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409c0
   638  	for s := 0; s < 6; s++ {
   639  		t23.Square(t23)
   640  	}
   641  
   642  	// Step 442: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f5
   643  	t23.Mul(t16, t23)
   644  
   645  	// Step 448: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d40
   646  	for s := 0; s < 6; s++ {
   647  		t23.Square(t23)
   648  	}
   649  
   650  	// Step 449: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55
   651  	t23.Mul(t15, t23)
   652  
   653  	// Step 460: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa800
   654  	for s := 0; s < 11; s++ {
   655  		t23.Square(t23)
   656  	}
   657  
   658  	// Step 461: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829
   659  	t23.Mul(t6, t23)
   660  
   661  	// Step 466: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d550520
   662  	for s := 0; s < 5; s++ {
   663  		t23.Square(t23)
   664  	}
   665  
   666  	// Step 467: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f
   667  	t23.Mul(t2, t23)
   668  
   669  	// Step 472: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7e0
   670  	for s := 0; s < 5; s++ {
   671  		t23.Square(t23)
   672  	}
   673  
   674  	// Step 473: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb
   675  	t23.Mul(t20, t23)
   676  
   677  	// Step 482: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd600
   678  	for s := 0; s < 9; s++ {
   679  		t23.Square(t23)
   680  	}
   681  
   682  	// Step 483: t22 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd639
   683  	t22.Mul(t22, t23)
   684  
   685  	// Step 490: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1c80
   686  	for s := 0; s < 7; s++ {
   687  		t22.Square(t22)
   688  	}
   689  
   690  	// Step 491: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3
   691  	t22.Mul(t4, t22)
   692  
   693  	// Step 495: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb30
   694  	for s := 0; s < 4; s++ {
   695  		t22.Square(t22)
   696  	}
   697  
   698  	// Step 496: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d
   699  	t22.Mul(z, t22)
   700  
   701  	// Step 507: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e800
   702  	for s := 0; s < 11; s++ {
   703  		t22.Square(t22)
   704  	}
   705  
   706  	// Step 508: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e837
   707  	t22.Mul(t21, t22)
   708  
   709  	// Step 515: t22 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b80
   710  	for s := 0; s < 7; s++ {
   711  		t22.Square(t22)
   712  	}
   713  
   714  	// Step 516: t22 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b99
   715  	t22.Mul(t17, t22)
   716  
   717  	// Step 525: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373200
   718  	for s := 0; s < 9; s++ {
   719  		t22.Square(t22)
   720  	}
   721  
   722  	// Step 526: t21 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237
   723  	t21.Mul(t21, t22)
   724  
   725  	// Step 535: t21 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e00
   726  	for s := 0; s < 9; s++ {
   727  		t21.Square(t21)
   728  	}
   729  
   730  	// Step 536: t21 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e29
   731  	t21.Mul(t6, t21)
   732  
   733  	// Step 542: t21 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a40
   734  	for s := 0; s < 6; s++ {
   735  		t21.Square(t21)
   736  	}
   737  
   738  	// Step 543: t20 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b
   739  	t20.Mul(t20, t21)
   740  
   741  	// Step 549: t20 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292c0
   742  	for s := 0; s < 6; s++ {
   743  		t20.Square(t20)
   744  	}
   745  
   746  	// Step 550: t20 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd
   747  	t20.Mul(z, t20)
   748  
   749  	// Step 559: t20 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a00
   750  	for s := 0; s < 9; s++ {
   751  		t20.Square(t20)
   752  	}
   753  
   754  	// Step 560: t19 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2b
   755  	t19.Mul(t19, t20)
   756  
   757  	// Step 565: t19 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b34560
   758  	for s := 0; s < 5; s++ {
   759  		t19.Square(t19)
   760  	}
   761  
   762  	// Step 566: t19 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b
   763  	t19.Mul(t18, t19)
   764  
   765  	// Step 572: t19 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15ec0
   766  	for s := 0; s < 6; s++ {
   767  		t19.Square(t19)
   768  	}
   769  
   770  	// Step 573: t18 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb
   771  	t18.Mul(t18, t19)
   772  
   773  	// Step 579: t18 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6c0
   774  	for s := 0; s < 6; s++ {
   775  		t18.Square(t18)
   776  	}
   777  
   778  	// Step 580: t17 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d9
   779  	t17.Mul(t17, t18)
   780  
   781  	// Step 589: t17 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db200
   782  	for s := 0; s < 9; s++ {
   783  		t17.Square(t17)
   784  	}
   785  
   786  	// Step 590: t16 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db235
   787  	t16.Mul(t16, t17)
   788  
   789  	// Step 597: t16 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a80
   790  	for s := 0; s < 7; s++ {
   791  		t16.Square(t16)
   792  	}
   793  
   794  	// Step 598: t16 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a95
   795  	t16.Mul(t15, t16)
   796  
   797  	// Step 604: t16 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a540
   798  	for s := 0; s < 6; s++ {
   799  		t16.Square(t16)
   800  	}
   801  
   802  	// Step 605: t16 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a543
   803  	t16.Mul(t1, t16)
   804  
   805  	// Step 616: t16 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a1800
   806  	for s := 0; s < 11; s++ {
   807  		t16.Square(t16)
   808  	}
   809  
   810  	// Step 617: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a1815
   811  	t15.Mul(t15, t16)
   812  
   813  	// Step 621: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a18150
   814  	for s := 0; s < 4; s++ {
   815  		t15.Square(t15)
   816  	}
   817  
   818  	// Step 622: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a18155
   819  	t15.Mul(t7, t15)
   820  
   821  	// Step 629: t15 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa80
   822  	for s := 0; s < 7; s++ {
   823  		t15.Square(t15)
   824  	}
   825  
   826  	// Step 630: t15 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f
   827  	t15.Mul(t12, t15)
   828  
   829  	// Step 640: t15 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c00
   830  	for s := 0; s < 10; s++ {
   831  		t15.Square(t15)
   832  	}
   833  
   834  	// Step 641: t14 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c25
   835  	t14.Mul(t14, t15)
   836  
   837  	// Step 647: t14 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0940
   838  	for s := 0; s < 6; s++ {
   839  		t14.Square(t14)
   840  	}
   841  
   842  	// Step 648: t13 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0963
   843  	t13.Mul(t13, t14)
   844  
   845  	// Step 653: t13 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c60
   846  	for s := 0; s < 5; s++ {
   847  		t13.Square(t13)
   848  	}
   849  
   850  	// Step 654: t12 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f
   851  	t12.Mul(t12, t13)
   852  
   853  	// Step 661: t12 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0963780
   854  	for s := 0; s < 7; s++ {
   855  		t12.Square(t12)
   856  	}
   857  
   858  	// Step 662: t12 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f
   859  	t12.Mul(t2, t12)
   860  
   861  	// Step 669: t12 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcf80
   862  	for s := 0; s < 7; s++ {
   863  		t12.Square(t12)
   864  	}
   865  
   866  	// Step 670: t11 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbd
   867  	t11.Mul(t11, t12)
   868  
   869  	// Step 673: t11 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7de8
   870  	for s := 0; s < 3; s++ {
   871  		t11.Square(t11)
   872  	}
   873  
   874  	// Step 674: t11 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded
   875  	t11.Mul(t7, t11)
   876  
   877  	// Step 684: t11 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b400
   878  	for s := 0; s < 10; s++ {
   879  		t11.Square(t11)
   880  	}
   881  
   882  	// Step 685: t10 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42d
   883  	t10.Mul(t10, t11)
   884  
   885  	// Step 688: t10 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda168
   886  	for s := 0; s < 3; s++ {
   887  		t10.Square(t10)
   888  	}
   889  
   890  	// Step 689: t10 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d
   891  	t10.Mul(t7, t10)
   892  
   893  	// Step 699: t10 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b400
   894  	for s := 0; s < 10; s++ {
   895  		t10.Square(t10)
   896  	}
   897  
   898  	// Step 700: t9 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f
   899  	t9.Mul(t9, t10)
   900  
   901  	// Step 707: t9 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da1780
   902  	for s := 0; s < 7; s++ {
   903  		t9.Square(t9)
   904  	}
   905  
   906  	// Step 708: t8 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1
   907  	t8.Mul(t8, t9)
   908  
   909  	// Step 711: t8 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd08
   910  	for s := 0; s < 3; s++ {
   911  		t8.Square(t8)
   912  	}
   913  
   914  	// Step 712: t7 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d
   915  	t7.Mul(t7, t8)
   916  
   917  	// Step 722: t7 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43400
   918  	for s := 0; s < 10; s++ {
   919  		t7.Square(t7)
   920  	}
   921  
   922  	// Step 723: t6 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429
   923  	t6.Mul(t6, t7)
   924  
   925  	// Step 731: t6 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f4342900
   926  	for s := 0; s < 8; s++ {
   927  		t6.Square(t6)
   928  	}
   929  
   930  	// Step 732: t5 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f4342927
   931  	t5.Mul(t5, t6)
   932  
   933  	// Step 735: t5 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a14938
   934  	for s := 0; s < 3; s++ {
   935  		t5.Square(t5)
   936  	}
   937  
   938  	// Step 736: t5 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b
   939  	t5.Mul(t1, t5)
   940  
   941  	// Step 750: t5 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec000
   942  	for s := 0; s < 14; s++ {
   943  		t5.Square(t5)
   944  	}
   945  
   946  	// Step 751: t4 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033
   947  	t4.Mul(t4, t5)
   948  
   949  	// Step 757: t4 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cc0
   950  	for s := 0; s < 6; s++ {
   951  		t4.Square(t4)
   952  	}
   953  
   954  	// Step 758: t3 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cf1
   955  	t3.Mul(t3, t4)
   956  
   957  	// Step 763: t3 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e20
   958  	for s := 0; s < 5; s++ {
   959  		t3.Square(t3)
   960  	}
   961  
   962  	// Step 764: t2 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f
   963  	t2.Mul(t2, t3)
   964  
   965  	// Step 768: t2 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f0
   966  	for s := 0; s < 4; s++ {
   967  		t2.Square(t2)
   968  	}
   969  
   970  	// Step 769: t1 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f3
   971  	t1.Mul(t1, t2)
   972  
   973  	// Step 778: t1 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033c7e600
   974  	for s := 0; s < 9; s++ {
   975  		t1.Square(t1)
   976  	}
   977  
   978  	// Step 779: t0 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033c7e63f
   979  	t0.Mul(t0, t1)
   980  
   981  	// Step 780: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7e
   982  	t0.Square(t0)
   983  
   984  	// Step 781: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f
   985  	t0.Mul(&x, t0)
   986  
   987  	// Step 789: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f00
   988  	for s := 0; s < 8; s++ {
   989  		t0.Square(t0)
   990  	}
   991  
   992  	// Step 790: z = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f0d
   993  	z.Mul(z, t0)
   994  
   995  	// Step 794: z = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f0d0
   996  	for s := 0; s < 4; s++ {
   997  		z.Square(z)
   998  	}
   999  
  1000  	return z
  1001  }
  1002  
  1003  // expByLegendreExp is equivalent to z.Exp(x, 7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f31fc34200000000000000000000)
  1004  //
  1005  // uses github.com/mmcloughlin/addchain v0.4.0 to generate a shorter addition chain
  1006  func (z *Element) expByLegendreExp(x Element) *Element {
  1007  	// addition chain:
  1008  	//
  1009  	//	_10      = 2*1
  1010  	//	_11      = 1 + _10
  1011  	//	_100     = 1 + _11
  1012  	//	_101     = 1 + _100
  1013  	//	_1001    = _100 + _101
  1014  	//	_1011    = _10 + _1001
  1015  	//	_1101    = _10 + _1011
  1016  	//	_1111    = _10 + _1101
  1017  	//	_10001   = _10 + _1111
  1018  	//	_10101   = _100 + _10001
  1019  	//	_10111   = _10 + _10101
  1020  	//	_11001   = _10 + _10111
  1021  	//	_11011   = _10 + _11001
  1022  	//	_11101   = _10 + _11011
  1023  	//	_11111   = _10 + _11101
  1024  	//	_100001  = _10 + _11111
  1025  	//	_100011  = _10 + _100001
  1026  	//	_100101  = _10 + _100011
  1027  	//	_100111  = _10 + _100101
  1028  	//	_101001  = _10 + _100111
  1029  	//	_101011  = _10 + _101001
  1030  	//	_101101  = _10 + _101011
  1031  	//	_101111  = _10 + _101101
  1032  	//	_110001  = _10 + _101111
  1033  	//	_110011  = _10 + _110001
  1034  	//	_110101  = _10 + _110011
  1035  	//	_110111  = _10 + _110101
  1036  	//	_111001  = _10 + _110111
  1037  	//	_111011  = _10 + _111001
  1038  	//	_111101  = _10 + _111011
  1039  	//	_111111  = _10 + _111101
  1040  	//	_1111010 = _111011 + _111111
  1041  	//	i52      = ((_1111010 << 4 + _11011) << 7 + _101011) << 7
  1042  	//	i67      = ((_110111 + i52) << 7 + _110101) << 5 + _10111
  1043  	//	i87      = ((i67 << 7 + _111001) << 5 + _10001) << 6
  1044  	//	i101     = ((_10111 + i87) << 8 + _10101) << 3 + _11
  1045  	//	i128     = ((i101 << 9 + _1001) << 8 + _111111) << 8
  1046  	//	i145     = ((_1111 + i128) << 9 + _110101) << 5 + _1101
  1047  	//	i167     = ((i145 << 9 + _110011) << 6 + _110101) << 5
  1048  	//	i187     = ((_11001 + i167) << 8 + _101111) << 9 + _110011
  1049  	//	i205     = ((i187 << 7 + _100101) << 6 + _111101) << 3
  1050  	//	i223     = ((_11 + i205) << 8 + _1011) << 7 + _11101
  1051  	//	i244     = ((i223 << 9 + _100111) << 6 + _111011) << 4
  1052  	//	i262     = ((_1111 + i244) << 8 + _100011) << 7 + _10001
  1053  	//	i285     = ((i262 << 7 + _101) << 8 + _10101) << 6
  1054  	//	i299     = ((_10001 + i285) << 7 + _110001) << 4 + _1101
  1055  	//	i325     = ((i299 << 7 + _11011) << 8 + _110011) << 9
  1056  	//	i341     = ((_110101 + i325) << 7 + _111001) << 6 + _110011
  1057  	//	i366     = ((i341 << 6 + _110001) << 9 + _10101) << 8
  1058  	//	i383     = ((_100011 + i366) << 6 + _11011) << 8 + _111101
  1059  	//	i401     = ((i383 << 3 + _11) << 10 + _1011) << 3
  1060  	//	i422     = ((1 + i401) << 12 + _100101) << 6 + _110101
  1061  	//	i448     = ((i422 << 12 + _100111) << 6 + _110101) << 6
  1062  	//	i467     = ((_10101 + i448) << 11 + _101001) << 5 + _11111
  1063  	//	i490     = ((i467 << 5 + _1011) << 9 + _111001) << 7
  1064  	//	i508     = ((_110011 + i490) << 4 + _1101) << 11 + _110111
  1065  	//	i535     = ((i508 << 7 + _11001) << 9 + _110111) << 9
  1066  	//	i550     = ((_101001 + i535) << 6 + _1011) << 6 + _1101
  1067  	//	i572     = ((i550 << 9 + _101011) << 5 + _11011) << 6
  1068  	//	i590     = ((_11011 + i572) << 6 + _11001) << 9 + _110101
  1069  	//	i616     = ((i590 << 7 + _10101) << 6 + _11) << 11
  1070  	//	i630     = ((_10101 + i616) << 4 + _101) << 7 + _1111
  1071  	//	i653     = ((i630 << 10 + _100101) << 6 + _100011) << 5
  1072  	//	i670     = ((_1111 + i653) << 7 + _11111) << 7 + _111101
  1073  	//	i688     = ((i670 << 3 + _101) << 10 + _101101) << 3
  1074  	//	i708     = ((_101 + i688) << 10 + _101111) << 7 + _100001
  1075  	//	i731     = ((i708 << 3 + _101) << 10 + _101001) << 8
  1076  	//	i751     = ((_100111 + i731) << 3 + _11) << 14 + _110011
  1077  	//	i768     = ((i751 << 6 + _110001) << 5 + _11111) << 4
  1078  	//	i781     = 2*((_11 + i768) << 9 + _111111) + 1
  1079  	//	return     ((i781 << 8 + _1101) << 5 + 1) << 81
  1080  	//
  1081  	// Operations: 749 squares 128 multiplies
  1082  
  1083  	// Allocate Temporaries.
  1084  	var (
  1085  		t0  = new(Element)
  1086  		t1  = new(Element)
  1087  		t2  = new(Element)
  1088  		t3  = new(Element)
  1089  		t4  = new(Element)
  1090  		t5  = new(Element)
  1091  		t6  = new(Element)
  1092  		t7  = new(Element)
  1093  		t8  = new(Element)
  1094  		t9  = new(Element)
  1095  		t10 = new(Element)
  1096  		t11 = new(Element)
  1097  		t12 = new(Element)
  1098  		t13 = new(Element)
  1099  		t14 = new(Element)
  1100  		t15 = new(Element)
  1101  		t16 = new(Element)
  1102  		t17 = new(Element)
  1103  		t18 = new(Element)
  1104  		t19 = new(Element)
  1105  		t20 = new(Element)
  1106  		t21 = new(Element)
  1107  		t22 = new(Element)
  1108  		t23 = new(Element)
  1109  		t24 = new(Element)
  1110  		t25 = new(Element)
  1111  		t26 = new(Element)
  1112  		t27 = new(Element)
  1113  		t28 = new(Element)
  1114  	)
  1115  
  1116  	// var t0,t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17,t18,t19,t20,t21,t22,t23,t24,t25,t26,t27,t28 Element
  1117  	// Step 1: t0 = x^0x2
  1118  	t0.Square(&x)
  1119  
  1120  	// Step 2: t1 = x^0x3
  1121  	t1.Mul(&x, t0)
  1122  
  1123  	// Step 3: t2 = x^0x4
  1124  	t2.Mul(&x, t1)
  1125  
  1126  	// Step 4: t7 = x^0x5
  1127  	t7.Mul(&x, t2)
  1128  
  1129  	// Step 5: t26 = x^0x9
  1130  	t26.Mul(t2, t7)
  1131  
  1132  	// Step 6: t20 = x^0xb
  1133  	t20.Mul(t0, t26)
  1134  
  1135  	// Step 7: z = x^0xd
  1136  	z.Mul(t0, t20)
  1137  
  1138  	// Step 8: t12 = x^0xf
  1139  	t12.Mul(t0, z)
  1140  
  1141  	// Step 9: t23 = x^0x11
  1142  	t23.Mul(t0, t12)
  1143  
  1144  	// Step 10: t15 = x^0x15
  1145  	t15.Mul(t2, t23)
  1146  
  1147  	// Step 11: t27 = x^0x17
  1148  	t27.Mul(t0, t15)
  1149  
  1150  	// Step 12: t17 = x^0x19
  1151  	t17.Mul(t0, t27)
  1152  
  1153  	// Step 13: t18 = x^0x1b
  1154  	t18.Mul(t0, t17)
  1155  
  1156  	// Step 14: t25 = x^0x1d
  1157  	t25.Mul(t0, t18)
  1158  
  1159  	// Step 15: t2 = x^0x1f
  1160  	t2.Mul(t0, t25)
  1161  
  1162  	// Step 16: t8 = x^0x21
  1163  	t8.Mul(t0, t2)
  1164  
  1165  	// Step 17: t13 = x^0x23
  1166  	t13.Mul(t0, t8)
  1167  
  1168  	// Step 18: t14 = x^0x25
  1169  	t14.Mul(t0, t13)
  1170  
  1171  	// Step 19: t5 = x^0x27
  1172  	t5.Mul(t0, t14)
  1173  
  1174  	// Step 20: t6 = x^0x29
  1175  	t6.Mul(t0, t5)
  1176  
  1177  	// Step 21: t19 = x^0x2b
  1178  	t19.Mul(t0, t6)
  1179  
  1180  	// Step 22: t10 = x^0x2d
  1181  	t10.Mul(t0, t19)
  1182  
  1183  	// Step 23: t9 = x^0x2f
  1184  	t9.Mul(t0, t10)
  1185  
  1186  	// Step 24: t3 = x^0x31
  1187  	t3.Mul(t0, t9)
  1188  
  1189  	// Step 25: t4 = x^0x33
  1190  	t4.Mul(t0, t3)
  1191  
  1192  	// Step 26: t16 = x^0x35
  1193  	t16.Mul(t0, t4)
  1194  
  1195  	// Step 27: t21 = x^0x37
  1196  	t21.Mul(t0, t16)
  1197  
  1198  	// Step 28: t22 = x^0x39
  1199  	t22.Mul(t0, t21)
  1200  
  1201  	// Step 29: t24 = x^0x3b
  1202  	t24.Mul(t0, t22)
  1203  
  1204  	// Step 30: t11 = x^0x3d
  1205  	t11.Mul(t0, t24)
  1206  
  1207  	// Step 31: t0 = x^0x3f
  1208  	t0.Mul(t0, t11)
  1209  
  1210  	// Step 32: t28 = x^0x7a
  1211  	t28.Mul(t24, t0)
  1212  
  1213  	// Step 36: t28 = x^0x7a0
  1214  	for s := 0; s < 4; s++ {
  1215  		t28.Square(t28)
  1216  	}
  1217  
  1218  	// Step 37: t28 = x^0x7bb
  1219  	t28.Mul(t18, t28)
  1220  
  1221  	// Step 44: t28 = x^0x3dd80
  1222  	for s := 0; s < 7; s++ {
  1223  		t28.Square(t28)
  1224  	}
  1225  
  1226  	// Step 45: t28 = x^0x3ddab
  1227  	t28.Mul(t19, t28)
  1228  
  1229  	// Step 52: t28 = x^0x1eed580
  1230  	for s := 0; s < 7; s++ {
  1231  		t28.Square(t28)
  1232  	}
  1233  
  1234  	// Step 53: t28 = x^0x1eed5b7
  1235  	t28.Mul(t21, t28)
  1236  
  1237  	// Step 60: t28 = x^0xf76adb80
  1238  	for s := 0; s < 7; s++ {
  1239  		t28.Square(t28)
  1240  	}
  1241  
  1242  	// Step 61: t28 = x^0xf76adbb5
  1243  	t28.Mul(t16, t28)
  1244  
  1245  	// Step 66: t28 = x^0x1eed5b76a0
  1246  	for s := 0; s < 5; s++ {
  1247  		t28.Square(t28)
  1248  	}
  1249  
  1250  	// Step 67: t28 = x^0x1eed5b76b7
  1251  	t28.Mul(t27, t28)
  1252  
  1253  	// Step 74: t28 = x^0xf76adbb5b80
  1254  	for s := 0; s < 7; s++ {
  1255  		t28.Square(t28)
  1256  	}
  1257  
  1258  	// Step 75: t28 = x^0xf76adbb5bb9
  1259  	t28.Mul(t22, t28)
  1260  
  1261  	// Step 80: t28 = x^0x1eed5b76b7720
  1262  	for s := 0; s < 5; s++ {
  1263  		t28.Square(t28)
  1264  	}
  1265  
  1266  	// Step 81: t28 = x^0x1eed5b76b7731
  1267  	t28.Mul(t23, t28)
  1268  
  1269  	// Step 87: t28 = x^0x7bb56ddaddcc40
  1270  	for s := 0; s < 6; s++ {
  1271  		t28.Square(t28)
  1272  	}
  1273  
  1274  	// Step 88: t27 = x^0x7bb56ddaddcc57
  1275  	t27.Mul(t27, t28)
  1276  
  1277  	// Step 96: t27 = x^0x7bb56ddaddcc5700
  1278  	for s := 0; s < 8; s++ {
  1279  		t27.Square(t27)
  1280  	}
  1281  
  1282  	// Step 97: t27 = x^0x7bb56ddaddcc5715
  1283  	t27.Mul(t15, t27)
  1284  
  1285  	// Step 100: t27 = x^0x3ddab6ed6ee62b8a8
  1286  	for s := 0; s < 3; s++ {
  1287  		t27.Square(t27)
  1288  	}
  1289  
  1290  	// Step 101: t27 = x^0x3ddab6ed6ee62b8ab
  1291  	t27.Mul(t1, t27)
  1292  
  1293  	// Step 110: t27 = x^0x7bb56ddaddcc5715600
  1294  	for s := 0; s < 9; s++ {
  1295  		t27.Square(t27)
  1296  	}
  1297  
  1298  	// Step 111: t26 = x^0x7bb56ddaddcc5715609
  1299  	t26.Mul(t26, t27)
  1300  
  1301  	// Step 119: t26 = x^0x7bb56ddaddcc571560900
  1302  	for s := 0; s < 8; s++ {
  1303  		t26.Square(t26)
  1304  	}
  1305  
  1306  	// Step 120: t26 = x^0x7bb56ddaddcc57156093f
  1307  	t26.Mul(t0, t26)
  1308  
  1309  	// Step 128: t26 = x^0x7bb56ddaddcc57156093f00
  1310  	for s := 0; s < 8; s++ {
  1311  		t26.Square(t26)
  1312  	}
  1313  
  1314  	// Step 129: t26 = x^0x7bb56ddaddcc57156093f0f
  1315  	t26.Mul(t12, t26)
  1316  
  1317  	// Step 138: t26 = x^0xf76adbb5bb98ae2ac127e1e00
  1318  	for s := 0; s < 9; s++ {
  1319  		t26.Square(t26)
  1320  	}
  1321  
  1322  	// Step 139: t26 = x^0xf76adbb5bb98ae2ac127e1e35
  1323  	t26.Mul(t16, t26)
  1324  
  1325  	// Step 144: t26 = x^0x1eed5b76b77315c55824fc3c6a0
  1326  	for s := 0; s < 5; s++ {
  1327  		t26.Square(t26)
  1328  	}
  1329  
  1330  	// Step 145: t26 = x^0x1eed5b76b77315c55824fc3c6ad
  1331  	t26.Mul(z, t26)
  1332  
  1333  	// Step 154: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a00
  1334  	for s := 0; s < 9; s++ {
  1335  		t26.Square(t26)
  1336  	}
  1337  
  1338  	// Step 155: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33
  1339  	t26.Mul(t4, t26)
  1340  
  1341  	// Step 161: t26 = x^0xf76adbb5bb98ae2ac127e1e3568cc0
  1342  	for s := 0; s < 6; s++ {
  1343  		t26.Square(t26)
  1344  	}
  1345  
  1346  	// Step 162: t26 = x^0xf76adbb5bb98ae2ac127e1e3568cf5
  1347  	t26.Mul(t16, t26)
  1348  
  1349  	// Step 167: t26 = x^0x1eed5b76b77315c55824fc3c6ad19ea0
  1350  	for s := 0; s < 5; s++ {
  1351  		t26.Square(t26)
  1352  	}
  1353  
  1354  	// Step 168: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb9
  1355  	t26.Mul(t17, t26)
  1356  
  1357  	// Step 176: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb900
  1358  	for s := 0; s < 8; s++ {
  1359  		t26.Square(t26)
  1360  	}
  1361  
  1362  	// Step 177: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f
  1363  	t26.Mul(t9, t26)
  1364  
  1365  	// Step 186: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e00
  1366  	for s := 0; s < 9; s++ {
  1367  		t26.Square(t26)
  1368  	}
  1369  
  1370  	// Step 187: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e33
  1371  	t26.Mul(t4, t26)
  1372  
  1373  	// Step 194: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f1980
  1374  	for s := 0; s < 7; s++ {
  1375  		t26.Square(t26)
  1376  	}
  1377  
  1378  	// Step 195: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5
  1379  	t26.Mul(t14, t26)
  1380  
  1381  	// Step 201: t26 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc66940
  1382  	for s := 0; s < 6; s++ {
  1383  		t26.Square(t26)
  1384  	}
  1385  
  1386  	// Step 202: t26 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d
  1387  	t26.Mul(t11, t26)
  1388  
  1389  	// Step 205: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334be8
  1390  	for s := 0; s < 3; s++ {
  1391  		t26.Square(t26)
  1392  	}
  1393  
  1394  	// Step 206: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb
  1395  	t26.Mul(t1, t26)
  1396  
  1397  	// Step 214: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb00
  1398  	for s := 0; s < 8; s++ {
  1399  		t26.Square(t26)
  1400  	}
  1401  
  1402  	// Step 215: t26 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b
  1403  	t26.Mul(t20, t26)
  1404  
  1405  	// Step 222: t26 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f58580
  1406  	for s := 0; s < 7; s++ {
  1407  		t26.Square(t26)
  1408  	}
  1409  
  1410  	// Step 223: t25 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d
  1411  	t25.Mul(t25, t26)
  1412  
  1413  	// Step 232: t25 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a00
  1414  	for s := 0; s < 9; s++ {
  1415  		t25.Square(t25)
  1416  	}
  1417  
  1418  	// Step 233: t25 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27
  1419  	t25.Mul(t5, t25)
  1420  
  1421  	// Step 239: t25 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89c0
  1422  	for s := 0; s < 6; s++ {
  1423  		t25.Square(t25)
  1424  	}
  1425  
  1426  	// Step 240: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fb
  1427  	t24.Mul(t24, t25)
  1428  
  1429  	// Step 244: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fb0
  1430  	for s := 0; s < 4; s++ {
  1431  		t24.Square(t24)
  1432  	}
  1433  
  1434  	// Step 245: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf
  1435  	t24.Mul(t12, t24)
  1436  
  1437  	// Step 253: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf00
  1438  	for s := 0; s < 8; s++ {
  1439  		t24.Square(t24)
  1440  	}
  1441  
  1442  	// Step 254: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23
  1443  	t24.Mul(t13, t24)
  1444  
  1445  	// Step 261: t24 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf9180
  1446  	for s := 0; s < 7; s++ {
  1447  		t24.Square(t24)
  1448  	}
  1449  
  1450  	// Step 262: t24 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf9191
  1451  	t24.Mul(t23, t24)
  1452  
  1453  	// Step 269: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c880
  1454  	for s := 0; s < 7; s++ {
  1455  		t24.Square(t24)
  1456  	}
  1457  
  1458  	// Step 270: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c885
  1459  	t24.Mul(t7, t24)
  1460  
  1461  	// Step 278: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88500
  1462  	for s := 0; s < 8; s++ {
  1463  		t24.Square(t24)
  1464  	}
  1465  
  1466  	// Step 279: t24 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515
  1467  	t24.Mul(t15, t24)
  1468  
  1469  	// Step 285: t24 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf232214540
  1470  	for s := 0; s < 6; s++ {
  1471  		t24.Square(t24)
  1472  	}
  1473  
  1474  	// Step 286: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf232214551
  1475  	t23.Mul(t23, t24)
  1476  
  1477  	// Step 293: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a880
  1478  	for s := 0; s < 7; s++ {
  1479  		t23.Square(t23)
  1480  	}
  1481  
  1482  	// Step 294: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1
  1483  	t23.Mul(t3, t23)
  1484  
  1485  	// Step 298: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b10
  1486  	for s := 0; s < 4; s++ {
  1487  		t23.Square(t23)
  1488  	}
  1489  
  1490  	// Step 299: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d
  1491  	t23.Mul(z, t23)
  1492  
  1493  	// Step 306: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e80
  1494  	for s := 0; s < 7; s++ {
  1495  		t23.Square(t23)
  1496  	}
  1497  
  1498  	// Step 307: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b
  1499  	t23.Mul(t18, t23)
  1500  
  1501  	// Step 315: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b00
  1502  	for s := 0; s < 8; s++ {
  1503  		t23.Square(t23)
  1504  	}
  1505  
  1506  	// Step 316: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b33
  1507  	t23.Mul(t4, t23)
  1508  
  1509  	// Step 325: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366600
  1510  	for s := 0; s < 9; s++ {
  1511  		t23.Square(t23)
  1512  	}
  1513  
  1514  	// Step 326: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635
  1515  	t23.Mul(t16, t23)
  1516  
  1517  	// Step 333: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331a80
  1518  	for s := 0; s < 7; s++ {
  1519  		t23.Square(t23)
  1520  	}
  1521  
  1522  	// Step 334: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9
  1523  	t23.Mul(t22, t23)
  1524  
  1525  	// Step 340: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae40
  1526  	for s := 0; s < 6; s++ {
  1527  		t23.Square(t23)
  1528  	}
  1529  
  1530  	// Step 341: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73
  1531  	t23.Mul(t4, t23)
  1532  
  1533  	// Step 347: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cc0
  1534  	for s := 0; s < 6; s++ {
  1535  		t23.Square(t23)
  1536  	}
  1537  
  1538  	// Step 348: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf1
  1539  	t23.Mul(t3, t23)
  1540  
  1541  	// Step 357: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e200
  1542  	for s := 0; s < 9; s++ {
  1543  		t23.Square(t23)
  1544  	}
  1545  
  1546  	// Step 358: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215
  1547  	t23.Mul(t15, t23)
  1548  
  1549  	// Step 366: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e21500
  1550  	for s := 0; s < 8; s++ {
  1551  		t23.Square(t23)
  1552  	}
  1553  
  1554  	// Step 367: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e21523
  1555  	t23.Mul(t13, t23)
  1556  
  1557  	// Step 373: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548c0
  1558  	for s := 0; s < 6; s++ {
  1559  		t23.Square(t23)
  1560  	}
  1561  
  1562  	// Step 374: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db
  1563  	t23.Mul(t18, t23)
  1564  
  1565  	// Step 382: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db00
  1566  	for s := 0; s < 8; s++ {
  1567  		t23.Square(t23)
  1568  	}
  1569  
  1570  	// Step 383: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d
  1571  	t23.Mul(t11, t23)
  1572  
  1573  	// Step 386: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9e8
  1574  	for s := 0; s < 3; s++ {
  1575  		t23.Square(t23)
  1576  	}
  1577  
  1578  	// Step 387: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb
  1579  	t23.Mul(t1, t23)
  1580  
  1581  	// Step 397: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac00
  1582  	for s := 0; s < 10; s++ {
  1583  		t23.Square(t23)
  1584  	}
  1585  
  1586  	// Step 398: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b
  1587  	t23.Mul(t20, t23)
  1588  
  1589  	// Step 401: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6058
  1590  	for s := 0; s < 3; s++ {
  1591  		t23.Square(t23)
  1592  	}
  1593  
  1594  	// Step 402: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059
  1595  	t23.Mul(&x, t23)
  1596  
  1597  	// Step 414: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059000
  1598  	for s := 0; s < 12; s++ {
  1599  		t23.Square(t23)
  1600  	}
  1601  
  1602  	// Step 415: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025
  1603  	t23.Mul(t14, t23)
  1604  
  1605  	// Step 421: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640940
  1606  	for s := 0; s < 6; s++ {
  1607  		t23.Square(t23)
  1608  	}
  1609  
  1610  	// Step 422: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975
  1611  	t23.Mul(t16, t23)
  1612  
  1613  	// Step 434: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975000
  1614  	for s := 0; s < 12; s++ {
  1615  		t23.Square(t23)
  1616  	}
  1617  
  1618  	// Step 435: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027
  1619  	t23.Mul(t5, t23)
  1620  
  1621  	// Step 441: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409c0
  1622  	for s := 0; s < 6; s++ {
  1623  		t23.Square(t23)
  1624  	}
  1625  
  1626  	// Step 442: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f5
  1627  	t23.Mul(t16, t23)
  1628  
  1629  	// Step 448: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d40
  1630  	for s := 0; s < 6; s++ {
  1631  		t23.Square(t23)
  1632  	}
  1633  
  1634  	// Step 449: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55
  1635  	t23.Mul(t15, t23)
  1636  
  1637  	// Step 460: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa800
  1638  	for s := 0; s < 11; s++ {
  1639  		t23.Square(t23)
  1640  	}
  1641  
  1642  	// Step 461: t23 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829
  1643  	t23.Mul(t6, t23)
  1644  
  1645  	// Step 466: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d550520
  1646  	for s := 0; s < 5; s++ {
  1647  		t23.Square(t23)
  1648  	}
  1649  
  1650  	// Step 467: t23 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f
  1651  	t23.Mul(t2, t23)
  1652  
  1653  	// Step 472: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7e0
  1654  	for s := 0; s < 5; s++ {
  1655  		t23.Square(t23)
  1656  	}
  1657  
  1658  	// Step 473: t23 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb
  1659  	t23.Mul(t20, t23)
  1660  
  1661  	// Step 482: t23 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd600
  1662  	for s := 0; s < 9; s++ {
  1663  		t23.Square(t23)
  1664  	}
  1665  
  1666  	// Step 483: t22 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd639
  1667  	t22.Mul(t22, t23)
  1668  
  1669  	// Step 490: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1c80
  1670  	for s := 0; s < 7; s++ {
  1671  		t22.Square(t22)
  1672  	}
  1673  
  1674  	// Step 491: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3
  1675  	t22.Mul(t4, t22)
  1676  
  1677  	// Step 495: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb30
  1678  	for s := 0; s < 4; s++ {
  1679  		t22.Square(t22)
  1680  	}
  1681  
  1682  	// Step 496: t22 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d
  1683  	t22.Mul(z, t22)
  1684  
  1685  	// Step 507: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e800
  1686  	for s := 0; s < 11; s++ {
  1687  		t22.Square(t22)
  1688  	}
  1689  
  1690  	// Step 508: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e837
  1691  	t22.Mul(t21, t22)
  1692  
  1693  	// Step 515: t22 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b80
  1694  	for s := 0; s < 7; s++ {
  1695  		t22.Square(t22)
  1696  	}
  1697  
  1698  	// Step 516: t22 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b99
  1699  	t22.Mul(t17, t22)
  1700  
  1701  	// Step 525: t22 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373200
  1702  	for s := 0; s < 9; s++ {
  1703  		t22.Square(t22)
  1704  	}
  1705  
  1706  	// Step 526: t21 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237
  1707  	t21.Mul(t21, t22)
  1708  
  1709  	// Step 535: t21 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e00
  1710  	for s := 0; s < 9; s++ {
  1711  		t21.Square(t21)
  1712  	}
  1713  
  1714  	// Step 536: t21 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e29
  1715  	t21.Mul(t6, t21)
  1716  
  1717  	// Step 542: t21 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a40
  1718  	for s := 0; s < 6; s++ {
  1719  		t21.Square(t21)
  1720  	}
  1721  
  1722  	// Step 543: t20 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b
  1723  	t20.Mul(t20, t21)
  1724  
  1725  	// Step 549: t20 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292c0
  1726  	for s := 0; s < 6; s++ {
  1727  		t20.Square(t20)
  1728  	}
  1729  
  1730  	// Step 550: t20 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd
  1731  	t20.Mul(z, t20)
  1732  
  1733  	// Step 559: t20 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a00
  1734  	for s := 0; s < 9; s++ {
  1735  		t20.Square(t20)
  1736  	}
  1737  
  1738  	// Step 560: t19 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2b
  1739  	t19.Mul(t19, t20)
  1740  
  1741  	// Step 565: t19 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b34560
  1742  	for s := 0; s < 5; s++ {
  1743  		t19.Square(t19)
  1744  	}
  1745  
  1746  	// Step 566: t19 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b
  1747  	t19.Mul(t18, t19)
  1748  
  1749  	// Step 572: t19 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15ec0
  1750  	for s := 0; s < 6; s++ {
  1751  		t19.Square(t19)
  1752  	}
  1753  
  1754  	// Step 573: t18 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb
  1755  	t18.Mul(t18, t19)
  1756  
  1757  	// Step 579: t18 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6c0
  1758  	for s := 0; s < 6; s++ {
  1759  		t18.Square(t18)
  1760  	}
  1761  
  1762  	// Step 580: t17 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d9
  1763  	t17.Mul(t17, t18)
  1764  
  1765  	// Step 589: t17 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db200
  1766  	for s := 0; s < 9; s++ {
  1767  		t17.Square(t17)
  1768  	}
  1769  
  1770  	// Step 590: t16 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db235
  1771  	t16.Mul(t16, t17)
  1772  
  1773  	// Step 597: t16 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a80
  1774  	for s := 0; s < 7; s++ {
  1775  		t16.Square(t16)
  1776  	}
  1777  
  1778  	// Step 598: t16 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a95
  1779  	t16.Mul(t15, t16)
  1780  
  1781  	// Step 604: t16 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a540
  1782  	for s := 0; s < 6; s++ {
  1783  		t16.Square(t16)
  1784  	}
  1785  
  1786  	// Step 605: t16 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a543
  1787  	t16.Mul(t1, t16)
  1788  
  1789  	// Step 616: t16 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a1800
  1790  	for s := 0; s < 11; s++ {
  1791  		t16.Square(t16)
  1792  	}
  1793  
  1794  	// Step 617: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a1815
  1795  	t15.Mul(t15, t16)
  1796  
  1797  	// Step 621: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a18150
  1798  	for s := 0; s < 4; s++ {
  1799  		t15.Square(t15)
  1800  	}
  1801  
  1802  	// Step 622: t15 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a18155
  1803  	t15.Mul(t7, t15)
  1804  
  1805  	// Step 629: t15 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa80
  1806  	for s := 0; s < 7; s++ {
  1807  		t15.Square(t15)
  1808  	}
  1809  
  1810  	// Step 630: t15 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f
  1811  	t15.Mul(t12, t15)
  1812  
  1813  	// Step 640: t15 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c00
  1814  	for s := 0; s < 10; s++ {
  1815  		t15.Square(t15)
  1816  	}
  1817  
  1818  	// Step 641: t14 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c25
  1819  	t14.Mul(t14, t15)
  1820  
  1821  	// Step 647: t14 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0940
  1822  	for s := 0; s < 6; s++ {
  1823  		t14.Square(t14)
  1824  	}
  1825  
  1826  	// Step 648: t13 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0963
  1827  	t13.Mul(t13, t14)
  1828  
  1829  	// Step 653: t13 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c60
  1830  	for s := 0; s < 5; s++ {
  1831  		t13.Square(t13)
  1832  	}
  1833  
  1834  	// Step 654: t12 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f
  1835  	t12.Mul(t12, t13)
  1836  
  1837  	// Step 661: t12 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f0963780
  1838  	for s := 0; s < 7; s++ {
  1839  		t12.Square(t12)
  1840  	}
  1841  
  1842  	// Step 662: t12 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f
  1843  	t12.Mul(t2, t12)
  1844  
  1845  	// Step 669: t12 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcf80
  1846  	for s := 0; s < 7; s++ {
  1847  		t12.Square(t12)
  1848  	}
  1849  
  1850  	// Step 670: t11 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbd
  1851  	t11.Mul(t11, t12)
  1852  
  1853  	// Step 673: t11 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7de8
  1854  	for s := 0; s < 3; s++ {
  1855  		t11.Square(t11)
  1856  	}
  1857  
  1858  	// Step 674: t11 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded
  1859  	t11.Mul(t7, t11)
  1860  
  1861  	// Step 684: t11 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b400
  1862  	for s := 0; s < 10; s++ {
  1863  		t11.Square(t11)
  1864  	}
  1865  
  1866  	// Step 685: t10 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42d
  1867  	t10.Mul(t10, t11)
  1868  
  1869  	// Step 688: t10 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda168
  1870  	for s := 0; s < 3; s++ {
  1871  		t10.Square(t10)
  1872  	}
  1873  
  1874  	// Step 689: t10 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d
  1875  	t10.Mul(t7, t10)
  1876  
  1877  	// Step 699: t10 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b400
  1878  	for s := 0; s < 10; s++ {
  1879  		t10.Square(t10)
  1880  	}
  1881  
  1882  	// Step 700: t9 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f
  1883  	t9.Mul(t9, t10)
  1884  
  1885  	// Step 707: t9 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da1780
  1886  	for s := 0; s < 7; s++ {
  1887  		t9.Square(t9)
  1888  	}
  1889  
  1890  	// Step 708: t8 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1
  1891  	t8.Mul(t8, t9)
  1892  
  1893  	// Step 711: t8 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd08
  1894  	for s := 0; s < 3; s++ {
  1895  		t8.Square(t8)
  1896  	}
  1897  
  1898  	// Step 712: t7 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d
  1899  	t7.Mul(t7, t8)
  1900  
  1901  	// Step 722: t7 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43400
  1902  	for s := 0; s < 10; s++ {
  1903  		t7.Square(t7)
  1904  	}
  1905  
  1906  	// Step 723: t6 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429
  1907  	t6.Mul(t6, t7)
  1908  
  1909  	// Step 731: t6 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f4342900
  1910  	for s := 0; s < 8; s++ {
  1911  		t6.Square(t6)
  1912  	}
  1913  
  1914  	// Step 732: t5 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f4342927
  1915  	t5.Mul(t5, t6)
  1916  
  1917  	// Step 735: t5 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a14938
  1918  	for s := 0; s < 3; s++ {
  1919  		t5.Square(t5)
  1920  	}
  1921  
  1922  	// Step 736: t5 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b
  1923  	t5.Mul(t1, t5)
  1924  
  1925  	// Step 750: t5 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec000
  1926  	for s := 0; s < 14; s++ {
  1927  		t5.Square(t5)
  1928  	}
  1929  
  1930  	// Step 751: t4 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033
  1931  	t4.Mul(t4, t5)
  1932  
  1933  	// Step 757: t4 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cc0
  1934  	for s := 0; s < 6; s++ {
  1935  		t4.Square(t4)
  1936  	}
  1937  
  1938  	// Step 758: t3 = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cf1
  1939  	t3.Mul(t3, t4)
  1940  
  1941  	// Step 763: t3 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e20
  1942  	for s := 0; s < 5; s++ {
  1943  		t3.Square(t3)
  1944  	}
  1945  
  1946  	// Step 764: t2 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f
  1947  	t2.Mul(t2, t3)
  1948  
  1949  	// Step 768: t2 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f0
  1950  	for s := 0; s < 4; s++ {
  1951  		t2.Square(t2)
  1952  	}
  1953  
  1954  	// Step 769: t1 = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f3
  1955  	t1.Mul(t1, t2)
  1956  
  1957  	// Step 778: t1 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033c7e600
  1958  	for s := 0; s < 9; s++ {
  1959  		t1.Square(t1)
  1960  	}
  1961  
  1962  	// Step 779: t0 = x^0xf76adbb5bb98ae2ac127e1e3568cf5c978cd2fac2ce89fbf23221455163a6ccc6ae73c42a46d9eb02c812ea04faaa0a7eb1cb3d06e646e292cd15edb646a54302aa3c258de7ded0b685e868524ec033c7e63f
  1963  	t0.Mul(t0, t1)
  1964  
  1965  	// Step 780: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7e
  1966  	t0.Square(t0)
  1967  
  1968  	// Step 781: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f
  1969  	t0.Mul(&x, t0)
  1970  
  1971  	// Step 789: t0 = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f00
  1972  	for s := 0; s < 8; s++ {
  1973  		t0.Square(t0)
  1974  	}
  1975  
  1976  	// Step 790: z = x^0x1eed5b76b77315c55824fc3c6ad19eb92f19a5f5859d13f7e464428aa2c74d998d5ce788548db3d6059025d409f55414fd63967a0dcc8dc5259a2bdb6c8d4a860554784b1bcfbda16d0bd0d0a49d80678fcc7f0d
  1977  	z.Mul(z, t0)
  1978  
  1979  	// Step 795: z = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cf1f98fe1a0
  1980  	for s := 0; s < 5; s++ {
  1981  		z.Square(z)
  1982  	}
  1983  
  1984  	// Step 796: z = x^0x3ddab6ed6ee62b8ab049f878d5a33d725e334beb0b3a27efc8c88515458e9b331ab9cf10a91b67ac0b204ba813eaa829fac72cf41b991b8a4b3457b6d91a950c0aa8f096379f7b42da17a1a1493b00cf1f98fe1a1
  1985  	z.Mul(&x, z)
  1986  
  1987  	// Step 877: z = x^0x7bb56ddaddcc57156093f0f1ab467ae4bc6697d616744fdf91910a2a8b1d366635739e215236cf581640975027d55053f58e59e8373237149668af6db2352a181551e12c6f3ef685b42f43429276019e3f31fc34200000000000000000000
  1988  	for s := 0; s < 81; s++ {
  1989  		z.Square(z)
  1990  	}
  1991  
  1992  	return z
  1993  }