Bitcoin Forum
May 26, 2024, 02:53:01 AM *
News: Latest Bitcoin Core release: 27.0 [Torrent]
 
  Home Help Search Login Register More  
  Show Posts
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 ... 96 »
401  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: June 03, 2020, 07:59:40 AM
With a simple python script I can get 2^12 keys/s, but it is not tailored for the public keys with private keys so short (under 128 bit) it could reach at least 2^13 keys/s with keys so short.
What part of code needs tweaked to work with smaller priv keys?


Here there is the explanation on how it works my script:
https://bitcointalk.org/index.php?topic=5202064.msg54213558#msg54213558

Basically you have to split the private key as a sum of precomputed private keys.

In these sentences:
Quote
I use 64 groups of 15 points = 960 precomputed points
...
I split a 256 bit key in 64 pieces of 4 bit and I compute 63 additions.


you can half the groups (32 pieces of 4 bit instead of 64 for a total of 480 precomputed points) and the additions needed (31 instead of 63) if you use 128bit-private keys.

You can have a estimation too on how long it takes to perform k*G against P+Q,  about 31 times (or 63 times) more than a simple addition P+Q (that we use in the kangaroo algorithm).

I refer only to the cpu speed, because on gpus things are different, we can't exploit a fast access on a huge memory for the precomputed points.
402  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: June 03, 2020, 07:25:20 AM
You would need to check that the DP is actually valid though. That involves performing the entire walk. If you did this for every DP you would be re-doing the entire computation.

As far as I understand it is important that the DP is from a real kangaroo walk.

The difference:
As soon as a kangaroo hits a point (a point that is not qualified to be a DP by bitmask) that has been visited by a kangaroo of the other type, their walks are synchronized and the next DP they find will definately result in a collision and PK is found.
This is not the case with randomly selected points in the range that fullfill the DP bitmask criteria.

It is possible that there will be a collision with these kind of "not real walk" points though.

I agree with you, but I remember you that a proof of work is always a probabilistic task, we cannot redo the entire work to be sure that the entire work is correct.

My proposal:

let's say DP=25, we perform a check on 2 levels, a result and a process check:

level 1) result check

we check that each DP fulfils:
                   - has at least 25 zeros bits
                   - its private key is correct and lies in the correct interval

level 2) process check, proof that the points were generated with a correct path

- we check that there are at least 1/2000 of the points with x-coordinate with at least 25 + 10 zeros
- we redo only the complete path of each kangaroo that ends with a DP with at least 35 zeros

The second check is a valid proof of work, because to generate (in the correct way, with the correct jumps) a single DP with 35 zeros you need to generate correctly on average 2^10 = 1024 kangaroos with a end point with 25 zeroes, you can't fake it.

Obviously you can choose to modify + 10 zeros in +12 or +8, as you prefer.
In this way you need to redo only a small fraction on the entire work, but it is a very significative fraction, not a simple random sample.

There are no shortcuts to generate this correct fraction (DP = 35) of the entire work without doing the entire work, but the checker needs only to do a check on the fraction.
403  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: June 02, 2020, 09:54:05 PM
I am working on pool to solve keys together.
-----
So far, the biggest problem is the verification of DP. The CPU is not able to check every DP, it simply does not have enough resources for this.
As an option, in order to prevent forged DPs, HelpServer can check a few percent of the sent.
And send to the ban if the client sends the wrong points.
Maybe someone knows how to easily and effectively check points, because multiplying the distance by G is a resource-intensive process.

Are you sure?

key #110 was solved with 2^30.55 DP in 2 days

A normal cpu can compute consecutive keys very fast, my cpu computes almost 30 Mkeys/s, let's say 2^24 keys/s; it would take less than 2 minutes to check 2^30 points

computing random points is slower, but even if it takes x100, we are talking about 3 hours for the entire hash table.

With a simple python script I can get 2^12 keys/s, but it is not tailored for the public keys with private keys so short (under 128 bit) it could reach at least 2^13 keys/s with keys so short.

If you need it I can put together a C program, I think at least 100k key/s are possible, then 2^30 points in less than 3 hours; what speed do you think you need? How much DPs you want to check per hour?
404  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: June 02, 2020, 06:25:13 PM
So the reason why the GPUs find solution faster, is by the sheer number of Kangaroos they bring to the hunt? Example, I can find solution 50 times faster with GPU versus CPU, but GPU has more than 50 times the amount of Kangaroos. Something like that?

Exactly.

For example look at the number of the kangaroos and at the speed for my cpu:

.\Kangaroo -t 4 .\in.txt
Start:49DCCFD96DC5DF56487436F5A1B18C4F5D34F65DDB48CB5E0000000000000000
Stop :49DCCFD96DC5DF56487436F5A1B18C4F5D34F65DDB48CB5EFFFFFFFFFFFFFFFF
Keys :2
Number of CPU thread: 4
Range width: 2^64
Number of random walk: 2^12.00 (Max DP=18)
DP size: 18 [0xFFFFC00000000000]
SolveKeyCPU Thread 0: 1024 kangaroos
SolveKeyCPU Thread 2: 1024 kangaroos
SolveKeyCPU Thread 1: 1024 kangaroos
SolveKeyCPU Thread 3: 1024 kangaroos

[17.67 MKey/s][GPU 0.00 MKey/s][Count 2^26.19][Dead 0][06s][1.1MB]


and for my gpu:

.\Kangaroo -gpu -t 4 .\in.txt
Start:49DCCFD96DC5DF56487436F5A1B18C4F5D34F65DDB48CB5E0000000000000000
Stop :49DCCFD96DC5DF56487436F5A1B18C4F5D34F65DDB48CB5EFFFFFFFFFFFFFFFF
Keys :2
Number of CPU thread: 4
Range width: 2^64
Number of random walk: 2^19.01 (Max DP=10)
DP size: 10 [0xFFC0000000000000]
SolveKeyCPU Thread 1: 1024 kangaroos
SolveKeyCPU Thread 3: 1024 kangaroos
SolveKeyCPU Thread 2: 1024 kangaroos
SolveKeyCPU Thread 0: 1024 kangaroos
GPU: GPU #0 Quadro M2200 (8x128 cores) Grid(16x256) (57.0 MB used)
SolveKeyGPU Thread GPU#0: creating kangaroos...
SolveKeyGPU Thread GPU#0: 2^19.00 kangaroos in 3848.2ms
[68.93 MKey/s]
[GPU 37.47 MKey/s][Count 2^29.12][Dead 0][14s][48.3MB]

CPU:  1024 kangaroos times 4, speed: 17.67 MKey/s
GPU: 2^19 kangaroos, speed: 69 MKey/s

kangaroo speed on cpu: 17.67 MKey/s / 4096 =  4314 key/s
kangaroo speed on gpu: 68.93 MKey/s / 2^19 = 131 key/s

In my case each kangaroo on cpu moves 33 faster than a kangaroo on the gpu.

But my cpu has 4096=2^12 kangaroos against 2^19 kangaroos on the gpu (128 less)
405  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: June 02, 2020, 05:34:37 PM
Zielar solved #110 by merging 2 files of 2^29.55 DP each = 2^30.55 => DP25 => total of 2^(30.55 + 25) operations = ~2^(109/2+1) , a little bit after the average.

Ok, then:

total steps:  2^55.55 = 1.035 * 2*sqrt(N)  (3,5% after the average)

hash table: 2^55.55 / 2^25 = 2^30.55

how many kangaroos were used in parallel?

I suppose about 2^30, probably more; that means that each computing unit has generated only 1 DP on average?
406  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: June 02, 2020, 05:17:25 PM
Someone can confirm these numbers? I'm curious:


In the Zielar's case, from what I understood, there were about 2^33 kangaroos in parallel and DP = 22, N = 2^109 then:

total steps:  2*sqrt(2^109) = 2^55.5

hash table: 2^55.5 / 2^22 = 2^33.5

number of steps generated by each computing unit in parallel: 2^55.5 / 2^33 = 2^22.5, then each computing unit has generated on average 1,4 kangaroo (1,4 walk from the start to the end point, DP) before to get a collision

How many steps to retrieve #110?
407  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: June 02, 2020, 04:47:01 PM
DP count is most important. You are running at DP 25, so it will take 2^57 (whatever expected group ops is for 115) - 2^25 (your DP setting) so roughly you want your DP count up to 2^32 to be getting close to solving.

I have files for DP 30.  So I need to get close to 2^27 to be getting close to solving. 2^57(expected ops) - 2^30(my DP setting) = 2^27 DP count .

To be precise, 2^57(expected ops) / 2^30(my DP setting) = 2^(57-30) = 2^27 DP count .

There are 3 phases in this algorithm:

phase 1)

to generate a collision, you need to form on average N couples of points (T, W) to get 1 couple with the same point, a collision (exploiting the birthday paradox)

that because in a space of N points there are N possible couples with the same point among N^2 possible couples, then the chance to get a collision each time you generate a couple (T, W) is N/N^2 = 1/N ,  thefor you need N tries to get a collision.

To form N couple, you need 2 lists of sqrt(N) points each (because sqrt(N) * sqrt(N) = N)

This is the heaviest part of the algorithm, 2*sqrt(N) steps; thefor the idea is to parallelize this task, and at this stage parallelization is ok, especially for the gpus.  


phase 2)

you cannot compare each couple of points you generate, because there are N possible combinations before to get a collision, too much;  

the idea is to choose each jump in such a way that the next point depends only by the current point, this trick makes an occasional collision between 2 kangaroos permanent and we don't need to check every point against all the others to know if a collision has happened.

To 'fix' a delay between the moment of the collision (after about 2*sqrt(N) steps) and the moment of the detection of the collision we store the distinguished points. On average a 30 bit distinguished point is met each 2^30 steps. Only then we can know if that kangaroo has collide with another one.

These phase is strange: if you are using a cpu, a delay of 2^30 steps is nothing, a single core of a cpu can perform 2^30 steps in a few minutes.

But for the slow gpu is not the same, like BitCrack noted:

That 2^27 figure assumes the average walk length is 2^30. The GPU works by doing many slow walks in parallel e.g. 60 million walks that do 20 iterations per second. At that rate, it will take 2^30 / 20 seconds = 1.7 years before any of the walks are 2^30. Your DP count is going to be a few powers of 2 higher than 27.

On the other hand, the choice of the distinguished points is not only about a delay, it is about the storage too, because we can't store 2*sqrt(N) points (if we could, we would use the BSGS algorithm, that is faster and that finds the key surely).


With a high DP value we realize a low frequent sampling, then we have few samples to store in the hash table, but we waste a lot of time with the gpu (overhead).

With a lower DP value we realize a high frequent sampling, but we have to deal with the limit of our RAM.

You can see at the DP value at this way too: how much you need to reduce the points (among the 2*sqrt(N) points generated) to put in the hash table ?

DP = 2^30 means you choose to reduce by a factor of 2^30 the storage of the 2^57 points needed the get a collision (2^57 / 2^30 = 2^27 DP in the hash table). But in this way you delay by 2^30 steps the detection of the collision (and you increase by a factor of 2^30  the waste of the computation power, 2^30 steps * number of kangaroos in parallel, all these steps are useless because they are realized after the collision has already happened)

In the Zielar's case, from what I understood, there were about 2^33 kangaroos in parallel and DP = 22, N = 2^109 then:

total steps:  2*sqrt(2^109) = 2^55.5

hash table: 2^55.5 / 2^22 = 2^33.5

number of steps generated by each computing unit in parallel: 2^55.5 / 2^33 = 2^22.5, then each computing unit has generated on average 1,4 kangaroo (1,4 walk from start to the end point, DP)  


phase 3)

When we know which wild kangaroo collides, if we don't know the distance covered by that kangaroo we only need to redo the steps of that kangaroo until the DP, and with a cpu this work can be rapidily finished.
408  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: June 02, 2020, 08:38:09 AM
Can you explain yourself better? What is 'Ygrid' ?

Ygrid is the second coordinate of the GPU thread array.
It affects performance. This is very useful for linear algebra because you can use thread coordinates to make fast matrix calculus.
In our case, this is just used to tune performance.

Thanks.

About using an experience of previous work.
----
So as you can see an experience didn`t help to solve next pazzle faster.
Most likely because the range is increased by 32 times in the next puzzle, and all DPs are concentrated at the very beginning of the range. Perhaps experience can help in solving the next range, but not after 5 bits.

And here is result of 3 test randomly generated keys in range 64bit and with experience from the puzzle 79:
...
In all three cases, experience helped me find the key faster.

The result is that experience helps you find the key in the current range or in the previous one, but it is absolutely useless to search in the following range that is multiple large to the current one.

In other words, in order to solve the puzzle faster you need to move from end to beginning .. first 125, then 120, then 115 and then 110))

There is a way to reuse the same DP's set in a different range.

If you have DPs in range [1,...,2^109] and you need DPs in [1,...,2^114], it is enough to

transform [1, ..., 2^114] into [1/32, 2*1/32, 3*1/32, ....,  2^114 *1 / 32 = 2^109] (a 'contraction')

where 1/32 means 32^-1 mod N. There are always 2^114 elements,  and the public key P becomes P'= 1/32 * P and lies in the same interval.

You can see [1/32, 2*1/32, 3*1/32, ....,  2^114 *1 / 32 = 2^109] as the set of the private keys respect of G,
or the same points set can be represented as [1,...,2^114]', the set of the private keys respect of G' = 1/32 * G

In this way the DPs are spread uniformly in the interval [1, ..., 2^114]'. The private key of each DP respect of G' is the previous private key * 32.

You have to modify the jumps too, instead of +r*G you have to perform +r*G', where G' = (1/32) * G.

Then you will find the private key k' of P' respect of G', that is the same private key k of P respect of G.

Basically so far we have used only the 'translation' of the interval, but we can use a 'expansion/contraction' too.
409  Bitcoin / Development & Technical Discussion / Re: How does "recid" variable work in libspec256k1 library? on: June 01, 2020, 03:13:29 PM
2. Higher "sign-s" is not allowed for Etherium.
  (I don't understant about it.
   Maybe, the "third party signing function" doesn't avoid overflowed Rx, so it generates the "sign-s" values corresponding to recid = 2 or 3?)

For how it works the ECDSA, https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm

if (r,s) is a correct signature, (r, N-s) is also a valid signature

BUT this fact has created issues (transaction malleability) therefor, from Bitcoin Core 0.11, only the lower value of s is allowed:

https://github.com/bitcoin/bips/blob/master/bip-0062.mediawiki#low-s-values-in-signatures

Quote
Low S values in signatures

The value S in signatures must be between 0x1 and 0x7FFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF 5D576E73 57A4501D DFE92F46 681B20A0 (inclusive). If S is too high, simply replace it by S' = 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 - S.

Signatures produced by the OpenSSL library are not guaranteed to be consistent with this constraint. Version 0.9.3 of the reference client provides an example for detection and correction.

The constraints on the value R are unchanged w.r.t. ECDSA, and values can be between 0x1 and 0xFFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364140 (inclusive).

For what concerns Ethereum, the same choice was made:

https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md

Quote
Allowing transactions with any s value with 0 < s < secp256k1n, as is currently the case, opens a transaction malleability concern, as one can take any transaction, flip the s value from s to secp256k1n - s, flip the v value (27 -> 28, 28 -> 27), and the resulting signature would still be valid. This is not a serious security flaw, especially since Ethereum uses addresses and not transaction hashes as the input to an ether value transfer or other transaction, but it nevertheless creates a UI inconvenience as an attacker can cause the transaction that gets confirmed in a block to have a different hash from the transaction that any user sends, interfering with user interfaces that use transaction hashes as tracking IDs. Preventing high s values removes this problem.

The issue is the same for Bitcoin and Ethereum, the solution is the same.

Strictly speaking, if sign-s is "higher than the group order divided by 2" (quoted from the commnet in libsecp256k1, secp256k1_scalar_is_high function), the Block Chain will sent an error message back.

So I added range check for sign-s with secp256k1_scalar_is_high function, and if it is "higher", signing process will be retried until the "sign-s" will become "not higher".

It works and the Brock Chain no longer returns errors.

It is enough this check:

if (s > N/2) then s = N - s

you don't need to retry from the start the entire process.


result of various trials, I could get the correct "recid" from "sign r", "sign s" and  "original public key", in the following process,

Step 1. Make sign data by an ECDSA signing function.
  (It is not included in libsecp256k1. A third party provided one, so it is not arranged for Bit Coin and it doesn't output "recid".)
Step 2. Recover public-key from "sign r", "sign s" and "recid = 0" with secp256k1_ecdsa_recover function.
Step 3. Compare the recovered public-key with original public-key.
Step 4. If they are matched, recid = 0. If not matched, recid = 1.
  (According to some articles for Ethereum, I assumed recid is 0 or 1.)

...

In any case, apparently I found that it is possible to identify the "recid" from "sign-r", "sign-s" and "original public key".

The recid value serves to speedup the verification, usually you generate it when you create the signature but you want to derive the recid from (r, s) instead.
For the notation --> https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm

1) compute (u1 x G + u2 x Qa) = (x'_1, y'_1)            
2) if x'_1 = r  the recid value is 0 or 1 for sure
   a) if y'_1 is even, then recid = 0
   b) if y'_1 is odd, then recid = 1
3) if x'_1 = r+N the recid value is 2 or 3 for sure
   a) if y'_1 is even, then recid = 2
   b) if y'_1 is odd, then recid = 3
4) if x'_1 != r and x'_1 != r+N, then the signature is not verified

I still don't understand

If you want  more details, I'll use the notation  https://en.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm

Note1)

choose random (or pseudorandom) k in [1,N-1] and compute k*G = (x1, y1)
then you get the first part of the signature r = x1 mod N

x1 is a number that lies in field Fp, x1 is less than p = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F = about  2^256 - 2^32

while r is less than N = FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141 = about 2^256 - 2^128

note that N < P;  

if  N < x1 < P,  then r = x1 mod N -->  0 < r < 2^128 - 2^32

for example (x1 = N + 5)

N < N + 5 < P   --->     0 < 5 < 2^128 - 2^32

but the number x1 = 5 too has the same value mod N:

0  < 5  <  N , then x1 mod N  =  5, in this case x1 mod N = x1 = r


To sum up: the same value of 'r' could refer to 2 different points (x1, y1):

(r, y1) and (r+N, y1)  if   0 < r <2^128 - 2^32 (very rare case)

instead if r > 2^128 - 2^32  --> r+N > p there is only 1 possibility for (x1,y1):

(r, y1)


Moreover there are other 2 possibilities: for each x1, there are 2 points with the same x-coordinate and opposite y-values: y1 an n-y1 (for the symmetry).

When you derive the second part of the signature, s, you get 2 opposite values for (x1, y1) and (x1, N-y1):

s = k^-1 (z + rd) mod N

because s depends on k (and k*G = (x1, y1))

For the BIP 62 you have to choose the low value of s in Bitcoin, therefor s is determined by its value, not by your initial choice of k. You may have (x1, y1) or (x1, N-y1).


Note2)

when you perform the signature verification algorithm, starting from r, s^-1, Qa and the hash of the message (the transaction) you have to get the original x1 again:

u1 x G + u2 x Qa = (x'_1, y'_1)

you should get again the point (x1, y1), but there are actually 4 possibilities:

1) x'_1 = r  (0 < x1 < N, r = x1) and y is even             --> recid 0   --> verified
2) x'_1 = r  (0 < x1 < N, r = x1) and y is odd               --> recid 1   --> verified
3) x'_1 > r  (N < x1 < P,  r = x1 - N) and y is even       -->  recid 2  --> verified
4) x'_1 > r  (N < x1 < P,  r = x1 - N) and y is odd        -->  recid 3   --> verified

since you don't want to store the y1 value you got from k*G (the signature contains only r, almost always r = x-coordinate of k*G, and s), you want to know if the original y1 is even or odd  and if the original x1 is greater or less than N.
410  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 31, 2020, 10:51:55 AM
30 days.. 30 pages.. want news? doubling Ygrid gives +25% speed

Can you explain yourself better? What is 'Ygrid' ?
411  Bitcoin / Bitcoin Discussion / Re: Bitcoin puzzle transaction ~32 BTC prize to who solves it on: May 31, 2020, 07:41:34 AM
I wonder which was the private key  Wink

hex: 00000000000000000000000000000000000035c0d7234df7deb0f20cf7062444

https://github.com/JeanLucPons/Kangaroo/blob/master/DOC/keys110.jpg
412  Bitcoin / Development & Technical Discussion / Re: BitCrack - A tool for brute-forcing private keys on: May 30, 2020, 08:27:48 PM
#110 solved!!!

https://www.blockchain.com/btc/address/12JzYkkN76xkwvcPT6AWKZtGX6w2LAgsJg

https://bitcointalk.org/index.php?topic=5244940.msg54531616#msg54531616
413  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 30, 2020, 08:09:56 PM
#110 solved!!!

https://www.blockchain.com/btc/address/12JzYkkN76xkwvcPT6AWKZtGX6w2LAgsJg
414  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 30, 2020, 06:52:30 PM
Any body know if it is possible to know point is positive or negative? Or it is imposssible to know?

Only after solving the DL for that point, otherwise it would be trivial to solve the DLP on that curve. In a way, there are no negative or positive points because of the modular group.

Agree that it will be trivial task to solve key, but not agree that  there are no negative or positive points.

There are no negative or positive points, because -1 = n-1 mod n,  -1 'looks' negative and n-1 'looks' positive, but the point is the same.

It is not correct to think at this group like a line, it is more correct to think at it like a circle (that means 'modular' and 'cyclic group'). There are not concepts like "come before" or "follow", it doesn't make any sense say that a point P "comes before" Q , then there are no negative (before zero) or positive (after zero) points.
415  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 30, 2020, 05:12:19 PM

If you know how to add - it is enough to perform the subtraction:
M = P - Q = P + (-Q) - here M point is P point minus Q point, which is the same as P point plus (-Q) point. So you make the addition of points P and (-Q).

If Q point has coordinates (Qx, Qy), so (-Q) point will have coordinates (Qx, modulo - Qy)

Now you can easily can make a subtraction:
M = P - Q = (Px, Py) - (Qx, Qy) = (Px, Py) + (Qx, modulo - Qy)


Perhaps there is an implementation in C++ or Python code?

python
Code:
p=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F #field
n=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 #curve


def inv(a,p):
u, v = a%p, p
x1, x2 = 1, 0
while u != 1 :
q = v//u
r = v-q*u
x = x2-q*x1
v = u
u = r
x2 = x1
x1 = x
return x1%p



def add(ax, ay, bx, by): #A + B -> C


bxax_inv = inv(bx-ax, p)           #1/(x2-x1)
m = ( (by-ay) * bxax_inv ) % p     #m = (y2-y1)/(x2-x1)

 
cx = (m*m  - ax - bx) % p
cy = (m * (ax - cx) - ay) % p


return cx, cy



def sub(ax, ay, bx, by,): #A - B -> C

        bxax_inv = inv(bx-ax, p)       #1/(x2-x1)
m = ((p-by-ay) * bxax_inv) % p  #m = (-y2-y1)/(x2-x1)
 
cx = (m*m  - ax - bx) % p
cy = (m * (ax - cx) - ay) % p

return cx, cy
416  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 30, 2020, 04:32:05 PM
How did you manage to get it down to 16 bytes per point?
@BitCrack

I am storing only 8bytes of the x-coordinate and lookup information (8bytes with HT overhead included) on how to retrieve the rest of the information in the event of a collision. This is accomplish by using a custom version of Google’s Sparse_Hash_Set in a distributed setup. The cost is network bandwidth but all clients are on a 1 GigE network.

 https://github.com/sparsehash/sparsehash


Maybe with a Bloom filter you can save more space ...
417  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 30, 2020, 04:02:58 PM
The goal is ~512GiB worth of precomputed points (@ 16bytes/point).

I remember that the DPs are not equally useful:

https://eprint.iacr.org/2012/458.pdf
Quote
Choosing the most useful distinguished points.
Instead of randomly generating T distinguished points, we propose generating more distinguished points,
say 2T or 10T or 1000T, and then keeping the T most useful distinguished points.
(This presumably means storing 2T or 10T or 1000T points during the precomputation, but we follow standard practice in distinguishing between the space consumed during the precomputation and the space required for the output of the precomputation. As an illustrative example in support of this practice, consider the precomputed rainbow tables distributed by the A5/1 Cracking Project [26]; the cost of local RAM used temporarily by those computations is much less important than the network cost of distributing these tables to users and the long-term cost of storing these tables.)
The natural definition of “most useful” is “having the largest number of ancestors”. By definition the ancestors of a distinguished point are the group elements that walk to this point; the chance of a uniform random group element walking to this point is exactly the number of ancestors divided by 'L'.
Unfortunately, without taking the time to survey all 'L' group elements, one does not know the number of ancestors of a distinguished point. Fortunately, one has a statistical estimate of this number: a distinguished point found by many walks is very likely to be more useful than a distinguished point found
by fewer walks. This estimate is unreliable for a distinguished point found by very few walks, especially for distinguished points found by just one walk; we thus propose using the walk length as a secondary estimate.

I remember this post too:

For the range [a,b] if we have pre-calculated (b-a)^(1/3) distinguished points, we would need only (b-a)^(1/3) group operations in order to find the collision. But precomputation requires (b-a)^(2/3) group operations (performed once as a preliminary stage).

EDIT:
source (see 2nd paragraph on page 6): https://eprint.iacr.org/2014/565.pdf


If we split 2^110 in 2^20 ranges each of length 2^90, for each range it would take only 2^30 steps to retrieve (on average) the key.  In theory 2^20 * 2^30 = 2^50 steps would be enough.

Even if we look in different ranges, we can share the same 2^30 DP points. Each interval can be shifted in the range [0, 2^90] together with the public key P.

It becomes very important to generate this 2^30 DP points (but it requires 2^60 steps).

If we split 2^110 in 2^29 ranges each of length 2^81, for each range it would take only 2^27 steps to retrieve (on average) the key.  In theory 2^29 * 2^27 = 2^56 steps would be enough.

And we would need to generate first 2^27 DP points (it requires 2^54 steps).




About using an experience of previous work.
---
The result is that experience helps you find the key in the current range or in the previous one, but it is absolutely useless to search in the following range that is multiple large to the current one.[/b]
In other words, in order to solve the puzzle faster you need to move from end to beginning .. first 125, then 120, then 115 and then 110))


There is a small exception:

if you have found DPs in the interval [0, 2^109], then you have found actually DPs in the interval [-2^109, 2^109], therefor you have already the DPs for a double range.
418  Bitcoin / Development & Technical Discussion / Re: Pollard's kangaroo ECDLP solver on: May 29, 2020, 11:41:46 AM
Question from newbie, please redirect me if it was already explained:
let's say I have public key (uncompressed, 04....). Is there a way to find the expected start/stop range?

No.
419  Bitcoin / Development & Technical Discussion / Re: VanitySearch (Yet another address prefix finder) on: May 28, 2020, 05:46:37 PM
part 3 of private_to_address.py:

Code:
0x3d14fe97601dca70806f978138db59f6ac071f85e234a7f2baf2b364595a3558, 0x16c6bdd6e84681ef8f29a931dbf56e1482e0a2e147c1d727c6adb3ac6443df4c, 
0x470a872d1756368680453c6a77494cb782e0354e4c77cd510fc702414ea4178, 0x899a7a9c1109acd676145e9fd39c0cb19b568706984daea079449f1b8098bd6,
0xdd6fa540e82e65251cc1ac4d2c9248652528d81c7e3f7570ede9f5ad82b1fc24, 0x67e62b7eb1d3186fe366f1ebf1657e77ec10de6bed7322304a431c460e9b74ca,
0x42dc50ffcba4d624a21a278f5404eacdca1c3969006611ead74de6d963369217, 0xa5ba9a1f66385b1d7ed78f5f160ba853a7a139eca8e01e841c3097e23e2dbc57,
0x13fa2da82de55d780f869499aa3d1e80108547b7fdadf02881ea91593dd08e02, 0x136338b04555da72313356206bb432c7e644afbb19a42b97da5541dc3cb03410,
0x9582b79c4b0aef757d1f82bb9cca75dd5dcbb7a7d8ae7b0423f1ace91646a9e9, 0x22067d800ed426eed4ec6aceeaf8e6a401cbb5c5f13b82ffbc4d7493aa56a698,
0xd06c4851d3c70a443f7c10b672c68282879b56dd3b7d69a6ac233ab9944ee41a, 0x5815fd4c0584d0adbbb0acd4f4f630919b7b84346162ee252f1f84e98b295e6f,
0x85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751, 0x1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962,
0x6b790f4b19a4c4f4f607a6cfcd11df0468b482e009711ff756356d141d5fcade, 0xd03a981b2ff9eb3ef296661f9cae09cba83fa5b47be26b0ab6fff86fc338d3ff,
0x384dab4ac11422c3be7c2d26d15d9ae79340e535478a066ab9955061ecde4cf3, 0xd6e3c5bcd1b9ca43bfb4ed6da2b4c6f01f430a339751ba73b7c796b2252d0566,
0x41149b2c2d7ebed3c162c367acc4f8fe3d2479de85978be0bb0ccdabe3a3e0cb, 0xc90d5b92db7c30542b415c9b9902cf28b3ec7805ef490f2470e92e98339033a8,
0x14f0ec0eb7d415aa41b1610b4e82ed4840355f5c380ecb8b98af3e921e5238c2, 0xab12d53dd4835d80921fc73e3842747fd25c00d80304939d6e86a34792f07922,
0x8a31870949bfe15c8198c1efcbc441a0e192160402521e1f8a4366a08a972627, 0x64bb7c8768f7a64d09577ed28587baa41744365ac3efcbcce7b47b5646bb8af9,
0xeb42f3bb782c287ec41c34678a5a0ddadd1302a756f98e188f6352efd543e94d, 0x234a6d074f25d92dc9a0dd572fcdfb774cd8468de60d6d4240559de445924d89,
0xd1fad4fa4e7c849dfaec3dfe2872a7ba664a9b8205c29cebf8dddd28e3f3d3fc, 0x8fe19714a348fdfe5473f70e858b7818bad37131eff37326ed22343c50f3704d,
0x1cf138ca516820d9a9eec02f6e06a920459bacde8c6673270324e5b57e19aaed, 0xd6ffdaf3171c63865f4372a66b6dde17479eef8fefc77ffbc136ea5d692f400e,
0x5cbeaabfe2b74127f266838c1dad312bca7c9438c7ead6537473ba2e0ba68dd, 0x13ca23b6fa90156eae9386665506efa07f3d96705de533b594229f327dd03959,
0xb58686be5f40d412c875a096849990d937a6637b4a78fac55f6c0e9fb6a8aa39, 0x5632d54324c78c2c149478d454c0a91dabbdaf98e6db347b8fc7935d2b493c1f,
0xebfc69ab340557412dd30976e1f8b751801da99f8effdf279a544c67ca3a1550, 0xe2ffe8cdb99cb540a3df199db7f4fd077983c818e68c0b1951f42bf641362f6e,
0x5fc19db06b8bcc2b67b5bc4fe7f3a802572831ba5a1c77c2ee91ebe3b03b4cc5, 0xec8e84c0ec98c7c66ee2138f9a3a5ef49276f503cc087ec4a3b39fb865b57c28,
0x6ce5c350ce93a8661050b65337aac980e66aa5616d4418e948bbf38e5e8d319f, 0x950d0026e2503c85bed3e3e8cbbe23f12da8f2e00ec5378308ac6bd795cf513f,
0xb88fb70d42ede289deba8a40fd3eea1be10b7fdf4d388948bb4b857d4cb38cb5, 0xd6c736ad46ea32806034bb994b35a8e24d4f3e1227af8c7197bfa7565965f3d7,
0xff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e, 0x493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907,
0x2982dbbc5f366c9f78e29ebbecb1bb223deb5c4ee638b4583bd3a9af3149f8ef, 0xa61b5be9af66220ab9fa5339c7b5bc9d095db99412e3ed8456e726b016c7a248,
0xc745fdf2775f230888b7ff25e02c94b066ce0eefac8feb9fc59054fe79d681f9, 0x590222f2f6b9e5e78a71394c70e818678cdbd335c67d45c7603173437bbb1247,
0x1a28e5042af0c0f6b436eb590497db5860011f4580e1765885289f612380441b, 0x55779a7996c59dab7c78329a8976f0ed04b3e75b46ee67aeb05f606a8452af25,
0xabb279f3a975050b27a59e5eb672e7f2b34478e820cac4815e04ceed35cd0ea3, 0x5dee103bbf17970d9fb4be0c03078ed47c9769059e02f3b6470931337c307bce,
0xfd73c052b194c6c6dd46aca9d640981aec79600917a565ebe77fd534649a2115, 0x620768c1c8178844020abab026f7d6d904f601562e9d421f049cab7ba6ba6cda,
0x3f81150b59fc682827faeaa74267ed11ea9fa1a963e7382c5c2e2f3f1bc9ee3e, 0x19c88a68fdbfa82d4671beb3c47956627623b2dcfcda81603ceadb0c599aae06,
0xc8b83e9535f30601d250cc0bd3f20142edd5eb7985d83242eef0e39621e30a7, 0xdcc7077065fdac7b850e3f17efdc854aacad237b987134dbebf7beb9ff688de,
0x5cf8132dd0082de69594ba33aa56c7ec15eceecf08bb358b6171befaf8e4a007, 0xb45aee5c0d61fa0df4ad4158848c3df6c8946f96c79c7fe8ce63f0909068b883,
0xb3fa054583510d6b9122671104bac7f4ba4ae5fbbaad72303003efcc4c3c18e1, 0xa85c24759340f56b7ba18298064fe6fdaa55a499f10ce542cb11fbee12aa2b4f,
0xb6d5fe4d0d4ba494653e33973c404ed21bc36f933bcfffb10956fe7b26c2d4a7, 0x47f373a13abbd6c14dfcf9209dfffd8e745b7e4e6f5e3cc8118dce7e3ae86371,
0x5a4d46dd65951a676e8165fe126c5d5dee0cb7841228ee11fdb86c351b816b2f, 0x77c92396ca0e60ab0283e27f8f3dfcd6b50e6cc5fb3eccebaf97aeb873e86c60,
0x61c8bbc066cf588706bb1b150029b022ea8fbc8ff1dc76dc50933622fc66dd33, 0x93599e239e54f70344669994b985d3fb6a5106eac2820c8ca3bba9f3b6f10bfa,
0x4fd699b12c720ccd7b977e5bdc62267118ac3028bd635b26fce648cf335cacbb, 0xc6c90ef3f511a0aed9479dbfcdb61e2caa998eb2e8223e6133b2efa88e1ad839,
0x94e32ba57426785187c9f5373ec3bdf1876336c17286c8fa9805b7ccdd6b2ff8, 0xd1b448b43da04e192f1e488662d9e8cb33af042526bfe13add485552ce1af3e,
0x827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241, 0xc60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec,
0xb77f12a7dce56b973e2d7c8d576e6b3660470a9218b87461ef6e44b70cb1815d, 0x4b6f85b14f86acc43f0cefb373cc2e654c42f0f91a44816d6ba3d2bc8e57dbc5,
0x857e31f6308c2fbc0d1a06bd320819f3aa7da6bb7041388634485cb3bb80fa7, 0xf64393423ae0172092d7cc9d1dcb7147172e37043cd7016abd98211f09366b2d,
0x48973b943018bf1247b308b2cb79f956d858d8df4977c5970fe5dad2c45565ec, 0x761f75684f3cdc1b6437bb3a01445af1511b3596580477b83b879075faed07e9,
0x28aaccea56bd60043545c655764a672e9cbb8b78e753d496f5d02c3a09c70e63, 0x2b69322ef81a0e1567a89667c768ebb7f5fc59ce444da1e8b9f03882f057da4e,
0xea1266167f2b818481a69b87056523973416611d0389378833a00abe7b6d6cd3, 0x21a4e2e5078ee3fdaace112bf1145e25b1c9752debbe1a88aae62925f4f450be,
0xa2f3b625a055a66145ddb2c9bceb8a4f92d8f69ce7060aac601dc52f73e674b5, 0x620ea159614c68ae80044a90f32a7c4b9222fa317c33fa53b0938c8e0e937941,
0xe931258e8eb5559c6d6972728a704c170b775a265b4527d4a4d4d742bbfd71fa, 0xfb1e33364c3fdee0e85eb4169c954b40b3946ce1bb5e35f33d9bd0d3174d3307,
0x3c4f83c9eaae59231d98b5c6a3f515f5a002efdb8ecfd386c7601631d91eb056, 0x94479007514a8b6a33ad6573c3b278801982b54481cf6b877425893da05cecab,
0xedf384387f7f42449c365f8de891817b00359b87a712df9de643d8cb548fadf1, 0x72d3b5b0a1898500ded80235120aa6b70f4e8813dea37d2879c436cf6c415fb6,
0xaff8e1288a9967d4e29c1e03e8103baadc38b4a409b993a719061fdbbd86dfa9, 0x8d8b4bb321377c3fd3d3ebaa1fcf53f4f9116da94419f9c707103c36c1d12681,
0xcf36adfdfb25442ca6c12c1e782b4b635f4efd281a275ec977123d425cff55c5, 0xd16a12166ae0768649c2f58b3bd9f207a7547ec25c0d2706aca2788521a0228e,
0xd3fb784528dc00b3e8458262aecee579e40f7ca5a09d338e28f2736b989ba9c1, 0xf894d434efa6b4e7ca7ca05758b70fe6341cedd5c011ade0061b88dfeb51b267,
0x31c80ca26c63dfaee2df82e7c6a5ca26e045d8650ce4adb4fe8540cbc181f79b, 0x92b59ec1202926df3094e4d368f30d91622ff9eaf51125f1f0b9e526d5225400,
0x4ec9300e0ac9aa88ff47298839187d7f6391027c53598d999da96c1d0f2bb909, 0x782ba106be1b04dc5c80dc45184c49bad52e16820dac3827b88a383fa4cf4071,
0xeaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3, 0xbe3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d,
0x3adb9db3beb997eec2623ea5002279ea9e337b5c705f3db453dbc1cc1fc9b0a8, 0x374e2d6daee74e713c774de07c095ff6aad9c8f9870266cc61ae7975f05bbdda,
0x4b72a5e9042f4abff48731c3b85047e229aab71cc52a6a98f583fd3a3f2e070d, 0x599e1d4e1d6ae1cf60277bb36d0f3c10b0b465ddd2948c3de44ba82ee96dd780,
0x129e53ac428e9cbb7e10955e56c5fc69fefdff56963e7caf054e9e0c90ae86f9, 0x415ecb958aee9a29b2da2115b712183fb2a232fd16b3e01b822efdcd1e89c85d,
0xa9fc93fc6539c8e285a6bfbeb5e1fd613ef54996585125a1e9ce7fd84a02591c, 0x9c2ce739dc5387173e84c17a1a9165e5ca888c415fcf7253790addef69bec2dc,
0xaa7121d4e3fb5b786ab499694aaf054327f9ca04e4609113428700a0f85912ec, 0xc690f077dad09509c505266b96a2edebfee134a8ce056cbdb114cb264ae35978,
0xc940017c1a6f9f0a6a7d7ac1209b027709a28bae13cbbc2e11006e0e2d968b59, 0x39d922500c9b862013b8a1bfa5b5742ce2842cb64390c9c8fefd76408de572fb,
0x60144494c8f694485b85ecb6aee10956c756267d12894711922243d5e855b8da, 0x8bb5d669f681e6469e8be1fd9132e65b543955c27e3f2a4bad500590f34e4bbd,
0x1f84bb9d7eed0024ec6793a5f70bf8e0310388d073ee5de6a2873335726b3332, 0xee726d072bca9ecc2547c27f75b9edf0c2bcce2d436dc3a2554428a314e8d52e,
0x3df2d057c8bb9f028f68e0213eda1776c2f22e3e241ecceb9dd95979b1972bcb, 0xdc7eb1c640c86eead6e6b23b046a684b1b91449680194771b2822cd3d65d09df,
0xf13e0890945fcd06ca8157b3991e9c77248446811ac27995cdaa54acdefa98e, 0xadd521f1764e7c5035e3f8b0a7b362db287e705e16ceaccdc08a7769be286767,
0x4b9915533720f934ba48070d37bd79d9775e2680b17714ce1b806a24ffd292dc, 0xe327754961103a226dfc0a74b5f01f57938323c45b376afd433a5ffe57095ca6,
0xdde191a551ddec7db3728a1d2d5826d3e9b38c63c1888e2fa5e1c03be9f59b6b, 0x5b2bfb78028275cbe0a757d61c52e14e8b5738bbe7154fecf6ad962926cb1410,
0x83c403979eb95e937ea4825fff359c5c181c9401bf81184feeed1b3423b43eeb, 0x29575ff2437cee3d0bfc1e46d00d61b295b6bfcab553fb40aff34086d484fb51,
0x5fab012eed836f7a5a16d7bf97b41682a86f57356be46871b68c55fdc9c6b699, 0x2d9bfa70a3c3d144e9ebb41130d62f7b90ab117fea883519b1732152c1c6c3aa,
0xe4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f, 0x4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414,
0xfd6451fb84cfb18d3ef0acf856c4ef4d0553c562f7ae4d2a303f2ea33e8f62bb, 0xe745ceb2b1871578b6fe7a5c1bc344ccfa2ab492d200e83fd0ad9086132c0911,
0x3e419634e156a3a24949bc8e8d396faf09430123677b392b5c8410af3bea0c68, 0x123c59d924b21f7f373cbfe370693062fa11946303cda1abcbb6ff71a45edb6,
0x1eee207cb24086bc716e81a06f9edbbb0042e2d5dcf3c7a1fa1d1fb9d5fe696b, 0x652cbd19aef6269cd2b196d12461c95f7a02062e0afd694ebb45670e7429337b,
0x8d9438f5455d7508eed4a3e62f7f0b576eb7b64c351c9897af75d23c939824d7, 0x3261e0734fee6c2a2ca60bd31ab6ef6f8fb9e2b8326b063d8a004f489366489f,
0xf13a99e58dc72fcb0c62a492d2850704621ddf48f1f433e69a9814c417d4b84a, 0x33c2c8cd0f0be995aa6b91cd1e3fe06eb6e37d4710f2d96285990fc553fd1c81,
0xb72524c558ee54420d4a912a2fe545439360c2fb7428e6208e48071a98d713de, 0x4c51b39a8a283e451042d182e9d694150482d26fe44a5fcb76ffe5259b8350e9,
0xcc0ea33ea8a9eb14d465ab2c346e2111e1c0fc017c57257908d40f19ef94c0d5, 0xf9907a3b711c8a2fb23dd203b5fbe663f6074f266113f543deabe597af452fe6,
0x3de45f5a216d12519adc76e38121149e3049f35bf37210402cc6c293fe3b2cb4, 0xba2a8598405eaddc50e08aa4a97c9106823e28e65a87044cf61e33ac307eb02f,
0x9e4ac64d9ca58a0446ca18bfc1700f2c16937ef9c82e8b559ccbd7512a0c0222, 0xcea45d1d9fe4e74d3080e8df63b300d01c62030f3dab904e16cf7673a4fdc9bb,
0x8511f1c68959be87c1e3fce3748906ae9b67ca86a09005b17234766f6ce4e5bf, 0xecdff5cf91bcd4874c1ddf7ec6aa00232da87889bc5365262fc92944c1789c08,
0x678ac7c0799b56cb46b8cddad61202fc4003e0966be61fa05f0c3b144e735a1e, 0x8514e33d9a5285b7a70ff3d57105e8e597fffb33d371457a363a5f712f7c055,
0x8c5a052e81cf60222cfa1c72ee14ab5957d242818abc14dc31b5668a3d3258ab, 0x6811db4bb443bda1079a80c7904c08c246dae8f9c0d944ade57e0853022d0f8f,
0x64ba9514d8680f6cdd66895d9c5ad45f00006e2933506f8ed7be9770822aa9b8, 0x81273f22a6431bdbb7e07728c19be49e5fef1b6f68307b35e93d1fb9b6163565,
0xcef7f816debd3560bdc63cec556bf137f5cf1d8f1e0c0d84158c2a0abf91bcee, 0x67e74c83637487012463b339c01d245fa63e4b02a172f6ac6bb4da9f81966b33,
0x1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19, 0xaeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd,
0x5be7ea3519f04bc6cbeeaa0344fc90bb8e8462f6ebd890560dae805d414ff9e4, 0x32f32ec3f638e605477f890f655ab7fe0e99c6302119a3094030b07847e0bdbb,
0xa6dc880a55d1f2e83bcfddab67106531c4ff0b508c0452b94b17cbbc52fea1f9, 0x7ef1a8547dc367c3038683a116acbc50057b89db7e68f7e63b1c14e47bc345e9,
0x58f099116eae4e650813fc8698df7f5cd50028649f853991e3fb545f4ddb7bb8, 0x7e07002aaffe111a0d62ff7614638066507ee4062d174302bdec73582e5b2d6e,
0xfe6ba93fea4245992bdc229c78a481ba8c6c4ce874865637c8d40c3f06d6c9b3, 0x7ee918d740539872b6bb41b345413b56d980f1bf05c2e9b00c2c788fa948bdfb,
0x2320b5caf7b59b7ce542842802f74c34134bfc495b9e2b108b613e771c7985c4, 0xc79f943dc88be94318c721b81f9bca93d96f10211cd9eb8d4ff4f1df4c2c6d44,
0x15d5e2f146fc98bfb020c8c2dc08ded1b964806e442c4b64422f10730cf95151, 0xa5b72e31915fd4ec7f90e109789023f9bb204fb97dd8c0f9482a07cc2ff8ecf2,
0xb0f9e4b9b29790b633bcc04fd860cb0f823d8d1a4cc1a1c1413c1606cc9a8e2c, 0x49e82bf1843ade6d41cbb0b906fde3f03350cc02c171cee76c2066c4df3d0db4,
0x84c0e8725688447ad8c7e00927ae29be3814b25241ef65643d7810b9296a5658, 0x26598380c16022c4a087e3190653725ed3a61a981f4f1fd22d96729bd81b80d1,
0x56db6280670a91ec8fad04ce213d59f494b357cf1c9a124c5aa02f29d9d6fad4, 0xda0d3b94db57272450f591016d6830c7f5b8b2a1a31e5cc867a9c0fd359e0836,
0xfed6b1c71a93731d565264e7a2c077c27443419142fe1575375bb5c894dc6a0f, 0x8de2abe6b0ffff0a8479181ae4d3ae231374d5930a3fc409ccb8d72d976fc7e0,
0x125e7ec83933df56bfbcf97e4254a89edab662f5d798346d79fe0b0bca3a809c, 0xe0d3f6ede254cb38887747caf5721a371e4e3b2ef07fca3dda8c900a949e70d9,
0x2a6a4dd992d3cbc70fcef8604023b9d82f1c8e9339720d86db3885f118e29355, 0x8677dfba7c4a7e0c760fdc81e268f90dfe905a3a64c4c76c0053e00fb5cc2872,
0xa1acb3f1185d20e1bf33ce97ddaf3d8f196e235eafcb9bb47f529511e7681028, 0x55a883a61abbb29b6a047588288f0c5a66eecb271fa0d7881f1a463e14a11c9d,
0xe42d93026c927546d9764ec235fae735c1add2b9349d78eb1f9fa88fe148dabf, 0x6413862c6e2d84b0d8b38cebfdf385303272757019e77eb9d772c756811e1361,
0x146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be, 0xb318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0,
0x574ef0ce8a597e24e5670b5c0bcd14cfeefc983c7ecb261911b2365579de5cac, 0x9b99930281f19c73bd6ada0569b78451a260a7bef10008cae59aea6c75a4805,
0xfc696c040660935ff42c899820a142a13d79bbd54ae867299d93873827315443, 0xe0ce27ebf83b5892bbf0e1cdd69677b5487ff486109bd1b17490d60b57d28960,
0xd3d97e799d8bf9f85d909397b98c835d10a770c1aeff8645808c2d74260966d3, 0x8ddbb46376bac95e6aaa89275d403ad3b5e48711be8dc4eebddeb850833c2e52,
0x974af221ff4ff2ad1ae56a3562beb0928fa3dd79c62e6a79d1bb2f5c16fdb4eb, 0x5552387d535003ca64d1e43d02c090ed111c572a3bffc2348409c3dfa9f6f484,
0xa0e8865700ef4338cdf587ed3bf200e54185c8aaed888b607f3615fd7c6b5b56, 0xf5ba46839fa9ad50b99a6b89b853dead526b871d70858a51a16bde513a1d7518,
0x5baab59b49de398b09121b3a669270c5e8284bc36658c81373904adb5d5aeee3, 0x8a577f617c0f7e856e5a008661ffdaf7215ddc9dabd31eed82d29afb70f69717,
0xb1aa653288b318987b974e782cbbee0ab2be78cf8f494c120040fb93968c6d4b, 0x7ed6071c60810d712684aa8e2d63a83b100a1d909d623cc383d9e62ae891ac51,
0xfb685fa7eb49c43d01032fcebf910a0ee59025feac837d15851b1e44f5726890, 0xd750df22c98e5e2e869ca16d9864ba094fa6cb12e90e79b2606ea8f3b835783a,
0x25116c4108c7105f358ab0b8392a597f24fdffee356cfe6ab7eedaec62c6e5bb, 0x60d86913e77177e01eb7406dc815dd8f77c508df51cc272d4dc4732a0f7e1321,
0x5de58ff659e2995a0ab27b91c287f71d78b4d5f4e83df62f5464bf13a8bca48a, 0x685a3b3d80359b55309a623c252d3c843fe5bd9c4e0f8aa958794e80d2fd41cd,
0xaf8848372961ebb2611d8100f9639e2a3cc8b99dea5715541d765df750cedd26, 0xdc57fbf97b167030d28cbb88ebed2f9654549e4867aa41708b6e7ad3b0e43f7f,
0x6f1825cdead618bfaf1b7fda3b4fc1c85ab4d016731b182ebde38344e5ef63b6, 0xff097e7dd591911b98f4204d783334553c895a64027f945412c846cf45c655f3,
0x5210d6605b8880365b256e3ea081add0b5a275ecf6ae4bdc39f9e5b1faa50e2d, 0x35f6674a5decd30139c13c0e7ff6588b5a273dcdc642686eb029a8935afda8ee,
0xc5ecb895f762a376b587115f5e76c76583203b019978f9727b5047edf4a63f3b, 0x22252518197881f374ea4058ff9233ec8beb65ee5e30bee5b53f374685005024,
0xfa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9, 0x6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811,
0x63964eee619074e0780140fe02e90836e72328d2448386d459c5be23187f5048, 0x3b6cfb3a6b89cf41a39ff9b1c34bfbc93d580b934dde6c84383a284d89309df8,
0xf7502e3c4379e31bcda329f93a1ca2b6a9c60a4015cacb2971ee0e3391da5e12, 0x3c57f5edd67cfafd59970945c3d672047b86d32ef725cebc7a4b9c5e8385f4eb,
0x5a3ce25b4d15b7e22d1469ddf0fc9f75afd7f12ad3cbda31f814ba1ebadb2a65, 0x8b34125b92e05f63873a6dbfbf3f99af3ee28bc3d825fe8ed8b170cf1d327f1d,
0x12fe78f983ae5862a3a4f6624e3455b3f4ca5c4b94e57c9f2074933110b7d105, 0x2062f1a338d6bcf7786b5aa199a7cb771dece265d6ee90b8458ac6fb9f794a60,
0xd42011d6010613880fec6b7f3f332b2024ab318f2a9ba7ed237312073e32478e, 0xbae5d4e9a37d4e0c1b2d5f5f44bf847b6fb24b2f35508cc31ce05681d04e88d4,
0x76aac31347df473d58c4bb1028084b1a480e6c50aa572daff621d8339e0c5d05, 0xef5576ef0d5c70efabef32c83202625f4b1225cf015e6ee3556619b751ece63e,
0x5ce605af98f93eda6910be34f0de41ff85dbcb6e69a8fa0016a733754a9f44d0, 0x4cddcf9bec226bfe7ba56bd031c76c58ab3cb1bfa32eccc6c0d05f3489d30105,
0xa663fe5bbe5c5ccc87e60c3145e88104c6b55c349c9a1aec9e26f485fc53c086, 0xb541997f6b211fbf5d1b102c89823dc3991ecca573994fc0e69c5032a5016201,
0xe0346d21121ff741fe4eaa23938a4347a71df4429e55359eaa20d691c9f40840, 0x3ee683713c998956d756d4a97ee7ba2a269cd39a6ebd33edc39a1aaff3d7ce72,
0xde95527a0206cd825b7ca1027ae2bdf3d8326689434f9c6e9ad801ed4b758574, 0x4cd3e056ac93d14e4e21dc847f169ed7bae6a105155a2deb4b7df1fcfb67232a,
0x1ae1ad36f64e99edf7b5beb6cb8761af044b110021ea003556a7237ba16ddcd3, 0x7016054987a0922059c74f775210448959616addfcbb613c7cc4619d2e7eb2b7,
0x8da6bce066d32addbfedccbe44785aea894c4a2b89634668d779b8abfd85474f, 0x13fc6c6af31ed4ff84fddf5d071dfff10b1cc59305dbdd7a5fdf9c7d3d7b4ef7,
0x1138ad12333790f920e979f6a64712742a9bb56702356e3c80ffff890a9de533, 0xb35525b758751d9486f0dc3e9f95a7dff679bd0b454a40006a8b7094fd332573,
0x7329acc7cfb3ba39b1bd6649e33c93beebfa26a6458eafd06b5d42567dd042ea, 0x9272493541b76f1489284e794fab68ee184897731dfab4f0ada8cfec2f5c94a1,
0xda1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2, 0x8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1,
0x9c7be00b4ef4c444df85d5f61dc1283a23605483e1f8e934b3c210d22cd3c369, 0x9220c0de74b20d2052a26d455ce401483e31153a16769cbd29ee3feba2329515,
0xe3e90da46303dd0419e96646991b1723b83ec0c4479d36f615d87732fa95a8db, 0xfbe53bc0056c178bb00faa90c702e76afbb1ef97cc984d3d1016cf7f1b0d1cf9,
0xfcd83f42825263bb55664b238ccc49174dd06a70541178e76bcd92d7bb8c9e3, 0x6c0bc1cfeac5fbced1d8232de5fdb683adbeaecdf1627bf4e86d55fbdf4aa9ad,
0x9f4ffec732e3d775a8b650dfd5c0c01c782a4e979593154017aafd64112ee214, 0x639ce2e1318e2f2e60e96682fd75c69d9719b6930bc880283ef442225085f37a,
0x14295a2937f1a9412ee14cce33a05fb2748992a2cf598d41f4fc3dcb541d0ce6, 0xfea75363df1150711b031c44844083b1310895601b5d241a52a81a8ad738bb86,
0x431f622d41134ac1b171a0a41f440b2c4b1253e1b3c14e3ef8b681451f61a0a5, 0xa298327fe7aa438f6d6de6519723aa7241baaa043556577246b7b7fe78cef899,
0x7175407f1b58f010d4cda4c62511e59db7edcf28f5476d995cf39944b26b64f1, 0x43b4554344e3d550f36d3401134cc86eb01fe8b774471d2a426e7efab24234d5,
0x993dbaddece78fb86cb62ef39f8a12ac0e6e0e47731328e7cac267d567748503, 0xa521a9ee8569eeeb785f784787a1f51a17f87bf69b8adaa49ba736137eb0cee2,
0xc20e86b84e51772ba8289212418cfac3aca86a23cefe2f4e464dba997421e21, 0xf561e9bf76d0adac1a1237a11e19a5b786ee76f65bd09349dfc83d64a1aa6a45,
0x75f17aba06ad5ea5a339431cb90962c0e10bd11f26474d478dea2275a6d23d80, 0xa07a62fe15639a80c7fc7d0bf19b6292372ffbedbb4ea590986a85b0280dd57e,
0x354cc84bd972e0ae0e97e32cbd26d410ee8b89fd48ce60c4c718cf9c4b344f7f, 0x9c04bf29291c6b5d6750b493f9ba88558e36c6018602e0ec7e4b11aea5db82d6,
0x6678555e11d9f4a0a6e95f485cb87b7a8db9c0040327d684ae2b9b6d61ad3413, 0x510dda3de278f646925266d927cbdf9ea6ce2d153adc6660124810207ebca672,
0xacef1418da0f942840486c0f262213a9c4af2554d6c08a447487b5f83502b4b1, 0xc4d3559fd7e87a4de04017b53d8971cd2a3f6290adf1878c6f81fa7966e85bfc,
0xebdc4a362cda7748adac82bd819636889224df5bffe101eaac00af5b06cc8563, 0x659a3144e856d35f9b1ee35e6cdd4f07bec4079249204f9249b17bcea394ccfa,
0xa8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13, 0x7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c,
0xcac6f2e7e27faecbcb876f805ea66e63efbe9eaa753d67c1c15eb9ea7f7653a1, 0xf7d416e5e2aa6f194cdb65d9a42a345081e83ae5688103a068c10ad0fec5e556,
0xae2207c5cdade26327f37f0b1ee40e50ba288f8de67e829e22a199b0ba3979b5, 0xea91fe510c079f71ad4c924523ad7060fca87b7d37d4f88968f3cd668450fa6f,
0xe6dfde46ee37d206efbc5932e58e43254ab767294238cb11cc9f4ab08624003d, 0x8727b3b7be9139498f2f48f7b88f92203b1ce5ea527fd7dd7548650e2216b93b,
0xcb8ded0cad72ace59cec541006585461e0be0c4fea2164fae41019100efca824, 0x33a5008f740d88c85b316c487a2ccbc496ad1fdfc7931742f140bd058f227361,
0x49dbe4f7b2792b64bc9eca37e8d64c460a00e49ca3221cef559e11e1ece4dd6a, 0xb8b57298470481c72c5fe33db692255a1c38552fca05bb69b13b72a42a9e3eae,
0xb0c53b298af1836708e94900d7e76ed6b04e085221e4aaee9411b4da3bcbd327, 0xee2a97401fbd7ea1638f6a601b66b2afd82a220c74636a0f1616bc4a2d7be436,
0x3c4e089cd9a6823d66a40cfc7ac96082e250e3149cf211d3b0e1103548dce109, 0x43fbbe669fe191b480757bca15764d379579e142d97fe697e2bf65923a19aeea,
0x6f6ba73f329db920d4d8862ece77f526c806405ff7679ef7de6efb6397b836a1, 0xdc778a17ff5fc18e3db0b8a405bee9c0d8990c5288e1ff934dbdf2fb06832b84,
0xf8cc1dada779674e534277d340b3ea8a563ed7ca920bd2f668056b7f825d5241, 0x13de4e4410b170feb33e892fa5166f0452c2d76c61eb0bd4960af038f070e10a,
0x7d471a7dc7422af4bbcff467e102436031088032d70612d42aee34209eb39ede, 0x4a7b19f3a6856507b82231effc86fa7795cf7d1c22a8fd0c9bcd94abf6607e,
0x80c34fdd0289be33737dcfb33d7dfe3596565feb1e1606d54fe8b5bdf4e5f03a, 0x247e0856a78c1ecd55edb57007dc9a03d30b2aef1f3245cb117f4546fe3ca504,
0xf0025163f9b73fac7070fcc31982f0967fcd7567cdae5c5aa56d49e2565eb1c1, 0x54ea9e8883d20df4c66b4a5da26afed8576ff5cd6cd11e57da7d7046dde2ae0,
0x6ced1ae897a9df3d4afe802214dbc7bcb383e4ed9e4c4deca610a061ca14f422, 0x25888aeb1b0f8e7abb495a728be6b9b88ca102c879a9c932ae73da43d84fc091,
0xac12140001ed23aa0f704e950f47715e0e36fe03ecae4bf84cf35093dac32c64, 0xce8ebccbac338baf1870b695730499a3ed5a5d3a5a53f0898812adbadeb1a867,
0x174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c, 0xccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73,
0x20e6e2e796946bb630c7071ef1b92ea3d53d280e0e4501115f5da36f840dd273, 0xd3ad7afe4f1559e44a0ba1ad97874655811ec9793da8693cc07cfd15bb46b593,
0x5e5a094ae446526e40caa5d458436a5db775b77d67d506bfe948073d754b8367, 0xae8af8c9a4795e05c2c901f1572a4b7a796aa9ef3de5ffa445329a9d91ce85ca,
0x8e0ca824d7a351dba80280a07e71db7035ae68136cc24ca3e7b54f301a077674, 0x4ec560759192d41dc569d24da62cf57cff60419d2f910290b84cbec12b7ed98,
0xd4e0adb9702e859deccb83310cb82de6a52f189d1f8fcaf198579397b10d9d, 0x87b801981837640947d2f846432287f70b5898c978e2d923e82100487140dced,
0x2ed76c1152ac36007aa17c85a5f902f17c845a05a4e0aaa07b05e8360cbcad59, 0x639f4d4043b85f222cda6eaec81767ed5f72c60130a7f94114ac7a89c4ea66fe,
0x366521368ef74c0f6f7a19aeec4a667632e2045b1a270bb20811a609c9caee8, 0x1f18c32b2a93ded99949fc681ba6944501cba9893295ba7f0a9ec6a3b772b711,
0xf7bb50da51c982d1c5fa63553e3d66c1afdb5821a321b4afe96afc5ea8192441, 0x93cc3be30334a526311bc63bdde6485db1cfdc1fbbc4c74bbc640ea1d45165ae,
0xe5891056fdb8f1faa0676c453f6c6eade37de08e601c06353ff97519446c85c, 0xe39a485f11fa7bda0ec7418baf481898f490234e80cddadd5f6c77e72148972e,
0xa34667155b6ea5982d3945fb743a1510c671b96fa3494a57e0349010055ae087, 0x21ca5fa5e56bc5bd8defe9a1aa2a3051c53eab6f2394f0bccb3f366322887627,
0xa740126d26f1463f2b6cf5faa0077771931739a40681362aff18adf3c22e1259, 0x5a9ffbaf194f1ff1b05f174a67c7ee517865e753b1d6dad5f771724334a5f43,
0x5fb1df0e7d45a4f541910f577d417f7091adf4c799e817ea830f4571e4b84b48, 0x2152fbbcbc3c4d49fbcf4646fe6d25820629c390873f21ad77edea6a37be8eb8,
0x87e4b8216d9474e4a65405765d82d177d7ce7ee70ba087bfd88a17a3cb08f1fe, 0xf74e3ac0766348cecd7d7f8ea2f8c2cc6e2f23dbd6786d9d75f74ac9aed5e2ec,
0x95bbd97478e1b8a41622e4608aa82fe9e77d43e7492a0d211146d987f9b8f255, 0xbed43ad129e3c77fdef2c208f0f2d0d8f2ba72aefc777fc1010e3fe828361439,
0x35ea1b463fea79a5a92c22c0c1254a44105ea7bf07c0e74b9a8700e6a1c4d15c, 0xad2191651b9ed2cd7888fa5fd74d3b185d633aa03065095edc939baf7f3fe1ea,
0x959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba, 0x2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd,
0xcbee1405ff0da7deafe32ca7dd73d95ed702226b391747c707275a940bc8f53b, 0xf6211f4f4e75f902b51f3e689b8294cf0d9ff4f68126f7282922e6b278c87f45,
0xae97675ceb72f7e788f690dfbcccf149f309ccb6ddf72aea09c5dd90fd69985, 0x91219973f6e48d14e9b8dfee051a54c5d0b99d417aee1aff89c8eb411409a003,
0xadd5bad28faaf5acdd580bfa0ba252e03de3beaefbd71b9cf377c88b14b311dd, 0xe9c43cf4da3dc3a5974e434f8359814f52d4e1e7669b9b8902f982f349d6c38d,
0x2b15862a5ac1612ec9b65f1778025d1fb723c4c1fe3cc29a9dc193dfd9262b90, 0x2eb0053daa0a33faa7a30d52da8749066f534970f99489a4991996e6483d7557,
0x209d6bcd766163b5248d4468c66d170714ff12c6c41261974e75ae796078afb0, 0x1a2f13429e7b3280a0965baba9898a5b01edb79339f4e3e385d1b775a740b310,
0x6af9eaed1a96ee677ee95c1616e4769af2d2c89491040ee593f9714ca8e7be40, 0xb3812a11690066496709ea428347dc8145e3f666a0f59569fa416e026e387e1c,
0x53f2432ba81717143fa9df3dff41ced24a29b314bc5a8c96f5f6400a0d7c0979, 0xbd52effbc1f079b7ccd4e3e0911b07de4bd5a4f5c9e8b845f9f7e90c537b36a2,
0x596668ee0444144eeb3aab424cb8d6f940794f8bc5bd4155d26b6fa0f482801e, 0x949aa0a85bbaef5f1ec8f9608771304e8db6c1cb63d3535ad477148f04870c37,
0xa762e69e047f9a6f61d50f83867e0fdb65bf6f8bfb130c4fef4040a588977063, 0x6b98dd57cbed115781a1732d93372a89958b48a396dfce62a06369f8294f6ef1,
0xbe84d1881b5050762fdf4d17ab570b5b4acab8e9058028c3e4c9b2e7c32c19fd, 0xeff960cb32dc50944d1e65f4830839947955a7f55e50dc3767694a5372f1281f,
0x726298eb9c6e3181810307f601d7c578f6b015ef29ea5bf8ebcb0298df55a9bf, 0x38d48801a9de9bfda9835a2ef3d099e0be797bcbc00673b4e116f8b0bc3accae,
0x9867a0314c0d7ee541f57274caf2bc88cbeab540132fa167bd1b75fd56c69482, 0xd02e615a3b10834f9c792d55b1ba99639e6245cf515628a916f061146f792cd7,
0xb934130f1339e48a693af7555946de47a4c90e8c3efabd859957f2d841a7e7d2, 0x95233f6b9b2d0576aa0929a5fbf78d1fffd381dbe70dcc41a4a991a898653d39,
0xa866f24540d8815a5927f2ea0099d6abdf1d92fecd01fc2978a239d91d557aa1, 0xb58739f6a8022b44d793d8fa5db0e13961eb69c67c611a4b7981bbb4c1430634,
0xd2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151, 0xe82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405,
0xbaf183a76100525e23bc7202033725f922b9cd6b36c413497c6c4bacca72da5f, 0xdeac9fbe9ccb4d335688bd58dd69b1d18e2336c5ca739361377ce628a8f2a0cf,
0x41081105221ffb73befe170f31bf245f5c2abef5f18bf1f17859f635ee4b3ba0, 0xdc37f36976ff5668f2ca65ae1d6b84981336498565a06455486961dc17525595,
0xf7aef8a7e38440238f9332906e48f6fd5adbd02d56b76a5ffa5aca58c56c3943, 0x4e3b0b44d5ffda797c442bbdc3ab3fcfeec30184a8dcd003431f627facf442f1,
0x63a2a210a16cc0c8c8cf22990531d65edbdf22833b8a02184629c9b893d98ded, 0x882b42e2e7fec76fd065033254ed94461fabf6a009c7873a519197d4e0d1cfc2,
0x1cd276d793a2bdff8e2c708627320f124513068bf5da5df02089e66a000e5485, 0x6615bdd18b2eaf738d4b34d4552e977f99d0e270b209a4ecca5cf051885fbd7f,
0xc15815d449d67ca3df12e2e5d57bef080ff7371901e8d7eea861a50b8045445, 0x2f30d60a3ae94115d0a93c3b6663cd28ba3054e43658cea3214f87d54054a206,
0xdfb547cb10019036c5a2e29f0dddbb1f7af2fa25a3c7a78c1fac945711924459, 0x9accd2a9ba0f47088b8389ce9dc864cc22af0930e5c031dcfa205e0dcc65fd9e,
0xc757eb6b89ae8a9c0d57ba8f4828ef7f882fcade1e9619701e91239cc3857faf, 0xf03a59cfcd23ff36257369f208bec61b627d310d101894c101d9db0ca0584ca4,
0x712022f7ccc4db2495dbc8064a115e2577c2771a47171bac9a8bb3518ef8b517, 0xbd578338de4de928ae7101f9b0947541a3603edf3bd79d7748b7df28249da1ac,
0xfa8063aeadafa0d0f815d409919c02a244faf77e2d8858d10e4d184f5459225d, 0xba71f9057c0c069160de220824c425c0a2b6c36d007c59c3a2b7e3b7ece1507,
0x2ceed8ed2c82072e9e5a925f74450f8084b0f39351e015e33c753d59a90bc03e, 0xa4276b80e9b9de3ecd850eb7afc7daeb4a1df9cf20d53cd01cb72b8b7ab82adc,
0x658ca3c59d0257a89e2f69cf862ee0a5aaba9fd4909e61a79679fe9416f0d044, 0xae5cc1377aea25460f165d62713bd37655a16763c418ce89add1f32ef7cb872d,
0x379c749a4539e8ecdd1136e7c4ebbc827bdcddfe7dd10c9a50cd4e3142aa2494, 0xa25463848bf9c0313c9c0ef1d6783f111364f6a7b7e856435befa9e8cec86c63,
0x31c94b4aaf91f2bace4c19835d3f305c676af16056561417ab5ac9573696756d, 0xf80f884b556e83a9bf4b8b59aaf4160683aedfcae6ad1070abc45e8dde08ae78,
0x64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073, 0xd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589,
0xb866d6b142df940f2cf28b54c92f0c1294e0b6a22a91f2ef44bcd88c4384480d, 0x1914b0b3426aeb7089a278d7ea9ad7ac24e522804b1d86d60e659b470c4cafa8,
0xbc477bd55a4203f836a213cfc592a17ac34604c07c004859adf714720e103dd6, 0xe31e1e2429a8dd526cbac552c6dea6395d293572c63b44ac639082d8d6f7c343,
0xec2bb89085de819ec4d9d1646102ba87e2d52ae4ed4fe455d229cda81db20d6c, 0xccecc17661e013a1332f66f0650940c633a2364be87efa98a0e99c4d629cf4a0,
0x589db4fe5a6bb8380303b423267bf8e80ac5af1404e634907d0dc3b0d44eab31, 0x6255445c108aa2a4f607062024bd90f31f610e552148f8db941aebe751361f6a,
0xb1d25d51b4558f5fd0ccb8683af9a9cf62a169c691627fa592d80b1836695f94, 0x706dda72030e90b1f7bea0ac19aba81760f6f18dab863edca5b7eb9a5ee32736,
0x1339b337d16e2fa2ea8a1860ad6edb7c42831c1c560336c67bf961729a0c2c41, 0x9f9b296362c7ae5ba7a3240fd113a3406b1227f87de923a4185f054ba9f1bc2b,
0x71c4a7e389e296ced39d75ef5e545905e50050640f50becf38a60ecb23b09d0f, 0x1313fadb737af3ba0af3e0a292f810aa786f2b084a62ffc7637b1f01720ddb62,
0x7ff3bba11363cf17cc50329b5001b568a8ddfec832c0cdec3704b1f858fc47af, 0x1f6ba7ae8018a629a0bc891b7473446b17a53b1ad18bac297f86164cf9ba43a7,
0xfc395dc4a5114dc8bcb0f7f003a4d3e938a87a3d78d33864d1dc4cba9e41e20e, 0x3866e09108d07d094ceb81a98bddb6d60221475a685e4e2b77ad8cc2e7cf42ee,
0x8ec670463ceb60bb6141e9395fec7f6100b4293b23d42a990184d60095213775, 0x8f58a66fa0da5be306e643415cedee0e71da98a0bccf51e90e010f3e7841ffff,
0x850f8cc53502ba26a8d1582765b3fdd0b7c30d8e760425e349971018b6f83231, 0xbc4a9dbe02a79053d0bf7086b82cc7890a85bfa17722d77f4a031a9d5f2e8373,
0x83de61b441e701bb89dbac3fed95d495ae6aa72fe2b95c2e3cb3ff8d3452abbb, 0x32f0e334a34c609fa6bfb6af8c4e1563d79c5f36bbce42918a05176b054eb66e,
0x53fe8af98f9419fb1445bb6a94750d4646be9f37b715576388b11064df2e6ffa, 0x9328817e7b5154621640cf6c4464de5c5fb5f8e603bd70c22a1eb37264e92eb5,
0x3d7663898f50c1db1a8bb5c00f7cd86833ae25b292a17b15e9688c26f59276f1, 0xd37669737a187ddb60976e34dad8333ef321982019b1978601e4a65b859cbcb3,
0x8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458, 0x38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e,
0x9629a450bd383a8b9fd43c6cd1d492bf392ed605299561dde54433526ce9f114, 0xbf439b280c5fb6d7576befd220cef64db925593e5c56af8dca3972c4a24aa391,
0x3beaed1e0f518c5f0894e6b05fe00bc811dc13db08d0646b160a0fa4152da17d, 0xc3b0d7f55aff7acdfef4a8bebe80e1b554cde77b8dfec416ce704985ecc768d2,
0xb73b1c47ef1e4688eb1730da7cc893df1477d747e187e18383d38d9626ca6cc3, 0x584315cb294922a90a57d64bbcc805097322a25209757f5afac35d76a54fdba3,
0x6e73dba0cbdc9d618752dfc039275997e74e3221420311b7234fa17dba4edcc5, 0xee0ac1fc49eecc48bea4550888828693278a77da700679037b31f7cdd59da0e4,
0x131641d11d602b14722615253dbcf027a92429a2f7e39a75c1b9ad04d063e1be, 0x4c3bda61796039f06a42e30fcdbd2bebbd0faec0f9745b77fdd1ff3e21fec890,
0x7706dd8937e5b5927627d97eaa47c3100490f5fa329abb31409c4c424a80b979, 0x8a02a9827d5bb7147778dd7991ea9c7117fa0a34fd7efe3214cf48104126cfde,
0xedfe16b2db40180311f9892007a2fef7d05b2a3bb676899f9c6e2192d38f93e0, 0xee6902f1fca5db3694d74faa4b05d0d25b3d5100c46e227e3d01793de29405ad,
0x16d422c5929bc0f80d2f3c7a41f9e06aa45bac29413ef127dcdb9c4b726fe285, 0xdf888fa51e22641a8ab7e69a63531b1e93f0c1137364d4233e0ffe6c155b441,
0x972cb363f9f30c334927129b35f2e5c6b8b5f624c4c247f15d3132b869e306a5, 0xae634704e2df92aa5f9e77fe5bc65079b85702edccad4f35d061fd40b6e86295,
0x1fcc0e47eec76d63aa5a344750f56a9c4e24079f9a60e3aeae310bcabacfa513, 0x165dc1a041e35478b48e38754339f9b44bededd16498391875075ba4107afc9c,
0xab86c2ad2acfac530fef75adb02ba374ab66930b85e9c78dd12a03527c46e079, 0x1209c286019f29abcf5c46d4d73200c9ce7728e84850d7c0ec428bc17636ffe1,
0xc12b9073ad6cb8a17306430435caa386a50a6089b26b771721a2707cfedc69b2, 0x3173c43fe534cdf1d9772dc89f894976b8ee1dbe3d27b2a0032ae9b020dd41dd,
0xc6701c110c2da3b01ba1bd2179a116687ae684eb76472760d3ec7bce9e341142, 0x2a020eb38d6cdd9952f869bbde19f5a15d07fcba5bc9be578924c6159e0f4dad,
0xd059bf85dc327a8fa3f3e931312ca73e8a14886f8b107197ab6f585df961fe4d, 0x45107a60c08b525e3fe0765dc84955b4fd388ba1f4dab64cb9935b066ae823c2,
0x13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b, 0x69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27,
0xeb3cf8f532245362ec05c88c85fe12d19182be7dceabe577c75849c6065084ae, 0xc833c78222d9d70043fe63dcefdca4a1f52b45c5e7dbd2a66f67c1fff96b9480,
0xdde9d514dd9ee6962c6ed6b2bf05b5cfddea171b94fc9aebf216b2098eca5f51, 0xb84e69133ce28111d891f34b0a7f8f0950feebe8de89571f9ad69a73d0c638f7,
0xbdf1a67d092d99974f7a60f2184519b2a576fcf984a201d9f8e5bcbcc2e9a5d0, 0x4095902bab65a1aaa80be54a86bf7baaa6280b61e5626461cdb4f7018562ff7b,
0xfd1a6210236993736e9f406eb1204b179aed513e20ad46ec2f906b05999c88e4, 0x1ac97b54b9c8c20bfb13c06954977782dc6b71d495cc00f299c8c916595bc8df,
0xd538cb1dbb0f4c8d5c454f68a28da59a345758924a4d6f01ccc6a55a09b0cca, 0xc8196bac7a3ec110cb0a8d5c40eed7cf8534cd99d89134c9731b147e0c929e05,
0x4ee48531d8c296b9f13ffce4f2c86dc7cf2da5738d892d68bd515b5b5f8018ce, 0xb68f9ed4810bf8b5fc7b4408d0c7c5e671074971b4e806013c35a61b1e48381f,
0x68856a6eddc4ec29cd5be267b64483b48c3b4196477da62abde5fc173b27e771, 0x77a33df14f79a1fb13b6fd49c19f7b4a331d22f293b0733a6118d62a07bbdab6,
0xfd76cc9c34c400dbff5e314c55b8c070cba05795094392f702852e91f1473678, 0xf2046543787143dae0fee0a73d032cd660628eee1401c8437e164eea8d144f4f,
0x4cd5d8cfb9e9c7b880e44d99bf1aded2e8b9c60fed7b8366b5f00532cee66b24, 0x576eae82deb94b559fe4e8c39cd6d103ca61e45e12d2faed221efdbaf40932fd,
0x85a2aba33123b40219e6ce8274b4ea212c691e44f197546edf00b7148d7a2193, 0x9c129857eb2b0516d82c6082d1cc029fe1c6dadf9c3b12427f0c83d4b0cdcf3a,
0xc352d50f8828f7b25ac6047270ea2107d3a0f2568536c4d56ae303ceedd7e577, 0xbe772838ba76b9b96abd53145bce79fb00a8abb2b61217063ca4ff88f8d9b570,
0xd25ddbfc73cffe74440b6d6c5783650f35ae8dd019e03b0535b0305b377568b0, 0x7a3aff7593f848938beaef74cde7d92b832273881e3c3f0060a13926df39929c,
0x6914e86b0a43a9fe086de71ab635e9ea85051f56ff5fe71a33563e81e712536, 0x2b7e792852d9bd0527d8aceae5ac28c0896c226b0af7a9da2a247713801128f1,
0x4581353143e94a7255f07e9a97aac805641ab5f7fa0ffa3855fe5118a71d7c13, 0x9f5858ec14979ad8b57f50f177dd69c97020065542bd96b99638bc553aff63cf,
0xbc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366, 0xd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1,
0xda433d5e11ceccc0abc5c7626ce7bab42e89b221f785c409282de545f3fceb19, 0xe498dbd321a810301debbdc4af95e5218e77fc2d9227b277684e7120a6f5cc64,
0x39d7349d9331b378d3c725dbab0015347295f18eda146a66b06a2e32f712be3c, 0x8f929b4f56ef3bf7fb127554c66812e8ef5ef7a5eca41644cc3019f41c6ff65c,
0x31e8e1ee9e8c7ec1c1c116981c16efdbcc4838a72207e0654de275c5acf692a, 0xad7e7f5b465b353dd9d0970290d6743b70649827c5bf73b09cc2a84eb16f667a,
0xf0cba617f7dc1dd09e51cd6c2995af26c699723994f82e035aae4fbcdf77f22b, 0x1a25ab4313f9df989ef326c36516d04004f18c7e90a095661fc8e2c75909a03c,
0xb4319cc90f3e0d3b313626ae5385796bc49b300c88ba4553dec0aa4a77829372, 0x4707d4499a6f502bffb7afe09c21c5a2707b1215ca3e11bb7729ccc00add5427,
0x381d7ab9db2154d321d170e8d87268ed8d6bfe235bd1f47658acdcd4c6509c12, 0xa47aab5b7fda3da9eb5d24573a6581e7205828586ce6eaf754642a8e2eb46102,
0xa9878607a88d61155d3e00d862657f73e9c9bf363fc7a91592bbd7ff81f488b6, 0xd181a1abd58895d61c063e7c82157c2239d0f01964ad5c6d495a7bbb031dab1d,
0xa703f05467ab87e64793b73e694c8a53f69956a5a063bce48db3b4d6384fe955, 0xd500f935a2b047adc0ea792d6b19199b539e1629c597277fa26b2efbd61344bd,
0x331924c750b3417e48e279ff6ed7f3dcba2e121e9f69f8fbe64093b6c38a8cc6, 0xca8f79411b33f0182ba5b601be2ffb317fb99e9ace9e9b54c4e8e0fb46587810,
0x73c6b3c5aad550d746c6ad0d7053a03f1b7e4563a2f3211d3499656c06eace58, 0x3a2fb4a4733a4f741ba90991366d91c6aa6a878dbbb8d2917170a9172af8654e,
0xcdcb12d7119d337a9ecc32447fd43761d6fa5689dcd83c3df4bf1126cdcbcb9e, 0xe699e2e17bb9f11fbfefbea096de9949a199af24358df340a08a585ac961cfd1,
0xc627f3e7506d47fda1d00d3a1c0eddb8de71b3a9b95aaf2054b388bf00181d5e,
0xd78f9dd71e442a63b2d6960138a1f7d68ef6b00549cbe2c3927900a6369f886d,
0xc6ed5e6328ec31b13704110842d4ac23fbb883bb349d88db1d747cf7325fe9cc, 0xde47405b49d7f8302932ee125c7f7b2a844f972b60f22cf10c0bce1c4a8fd94b,
0xbb88fabe0edfd233fa25f40a6f06de53a047958f28a4847f34e28d9fb7828b16, 0xb73676b304f5e8dd345dc59601159163ec4a8174e3a1e969c51473a20aea5df7,
0x8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa, 0x40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482,
0xab1ac1872a38a2f196bed5a6047f0da2c8130fe8de49fc4d5dfb201f7611d8e2, 0x13f4a37a324d17a1e9aa5f39db6a42b6f7ef93d33e1e545f01a581f3c429d15b,
0x9729247032c0dfcf45b4841fcd72f6e9a2422631fc3466cf863e87154754dd40, 0x91d1a244265fea1dcd15c75dcbd4df3690dae85255acaf49384b492f2aa36143,
0x2564fe9b5beef82d3703a607253f31ef8ea1b365772df434226aee642651b3fa, 0x8ad9f7a60678389095fa14ae1203925f14f37dab6b79816edb82e6a301e5122d,
0x89637f97580a796e050791ad5a2f27af1803645d95df021a3c2d82eb8c2ca7ff, 0x2d1fe1248c888424d57b9cf154357489f87bc6a38e42eab7bed415e170493e68,
0x71efa4e26a4179e112860b88fc98658a4bdbc59c7ab6d4f8057c35330c7a89ee, 0x145fa81f8bb624ae9efb2c32b17294a22aaafab88e5e9a0b4f489329c1366a2e,
0x308138e71be25e092fdc9da03d5357421bc7280356a1381a6186d63a0ca8dd7f, 0x28d1e2d28828fc925e39ec45d1408e18c8165646434ad915e415f2478a92c7f2,
0xff3d6136ffac5b0cbfc6c5c0c30dc01a7ea3d56c20bd3103b178e3d3ae180068, 0x133239be84e4000e40d0372cdd96adc1547676f24001f5e670a6bb6e188c6077,
0x575fc4e82a6deb65d1e5750c85b6862f6ec009281992e206c0dcc568866a3fb1, 0x6f6edb9042a6fca2d671dbc2978e87daed33b573c6a3af2f09b8e90a902655ad,
0x3fa915480bab8ad2531e342ba43555e7df45e17583998ad4954e7fdcbd21250a, 0xbf9b66905499b030cf5bdf9603bb127c2e45e55a032b5fb791c86c02faa76731,
0xa5ec9036b64eab7a227f26f81eea2a8fda253bbbce20102921b6a8a4790117df, 0xb79dc6625ec140400c597983ad1fa0f71c8461f05614a363d8128133f86462fe,
0x52045bcc58e07124a375ea004b3508ac80e625da2106c74f5cb023498de0545f, 0x1b3f31fcebe3123ad430ed9c20ce312b793b9d0f2a8fdaf236ea34c0506c3d91,
0xa153dfe913310b0949de7976146349b95a398cb0de1047290b0f975c172ad712, 0xfd94d8413fb05b2fc48318d5f1f1b89abd053f285af0b329c8a5f6538d48fdd2,
0x58b5436ebe472fdb80162c8d237603635de47b95e5e5b38a89f13d0c3220479f, 0x85d7b6b055cd672c4e2913a252f6de8396af27c4829bb34144a7375e567db17a,
0x9a541ac6af794615935c34d088edc824c4433a83bdb5a781030c370111cf5b3a, 0xb66148c1cb106ab7cafe1af3688f475f5548fee2521ea52d63f5575f36a44ae4,
0x8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0, 0x620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945,
0xc25f637176220cd9f3a66df315559d8263cf2a23a4ab5ab9a293131da190b632, 0x53154fede94d2873989049903809d7980a9f04ff9e027a1d6eebf3d6fc9590cf,
0x383b24fbea14253ac37b0d421263b716a34192516ea0837021a40b5966a06f5e, 0x54cf706ac4edba2044cf566d54ea5a19e8f6ae74bb8c2b04089f4786d3c6e772,
0x2a9e8dfe3cce6bab3e82d82a5688544c0c7b55dc31978b4de2ccb3b7d466d561, 0x1dfeda5c16e651fbac7b5ad608b96cf5e01eaec17a02182f96ccf5252e76373,
0xe68432d03e02ed6d789e59c6b60d790c2b0d1ce336838195c7975c1d4638a136, 0xca5be41398e35a6624d2a7303a01e6472e09e3ebdb357336aafd18108c6c2584,
0x95e62d4292e46218bd49e4c992ff998068114a105c1dc6c02139b408dbcf2dce, 0x6b68184296c2875183a26e2b428d52e5e7b30603704d20e62bddfdf58c86594,
0x395dd559e2fe5c2a0eefbdece7306e7fb472985f391bd6807ce87c4416e8c10c, 0xfd62dcd4b4592ac5d0413e87affa4e274c909c04dc66922cbc3d6d9305fe638e,
0xb23790a42be63e1b251ad6c94fdef07271ec0aada31db6c3e8bd32043f8be384, 0xfc6b694919d55edbe8d50f88aa81f94517f004f4149ecb58d10a473deb19880e,
0x7a514adc35525dcb9f6eed5beee264800858fc7506f93c8f51664db20d6c14ef, 0x56edd1fed152e4d8e897f0b94c8f5c3729beaef72aa6e24f7ad3e1870b3fbd13,
0xb2113bcb7b4aefed1ee215aa8ae6818127ed7091c8d59c2dff9f053d097ec94b, 0x93be9e7399e8ee73105a0b53454cb4eb0943220b2357d0fdbd5fbffc687831ad,
0x1ee1fd584325d90d8ea8ef3bf4908f235a991077544021524a9463d04f6d65eb, 0xbb692891bdd6c73c1cfab9fc4f42fcfaca32f4e9863582b11e036b925d22941c,
0x71e935c8e1f54f25a6424274ab07e7891873c3b1a27a6c40b805264597a6257f, 0x78d93e59f47c22513ded86ba47ae2a52ef2523540cf70f7a5b217461d1b1e582,
0x15515634d38faaa8bc058fd0d883357d617e8b6c8dca20191f1950ef0e36cb44, 0xab4fffc755575215e370e3f0b463205da8c37175f020c1e5329af4651f495a68,
0xabc451ca4ee795cac52f8be79ee2c46139e015762bb13bacbf08472479ca950e, 0xae2718befe820a59db1dfb80c2c9145652684000cea553ec07ce7d8c9a9490d2,
0x3bc6bc6446bf520136358eb0958dc4aa9e733164dd2d62e151f946107427bacc, 0x8e305cc07176c305cdb62ee226d6c02bd71b75a5228beb4714c33fd5ead6fda6]

#64 pieces of 15 (2^4 - 1)= 960 * 2 coord = 1920 coordinate


p=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F #caratteristica del campo
#n=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 #ordine della curva
#Gx = 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
#Gy = 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

'''
#vedi http://www.springer.com/?SGWID=4-102-45-110359-0 pag.40 algoritmo 2.20
def inv(a,p):
u, v = a%p, p
x1, x2 = 1, 0
while u != 1 :
#q = v//u
#r = v-q*u
q, r = divmod(v,u)
x = x2-q*x1
v = u
u = r
x2 = x1
x1 = x
return x1%p
'''

inv = invert  # k -> k^-1 (gmpy2 function)
fmod = f_mod

def add(ax, ay, bx, by): #A + B -> C


if(ax == 0):
return bx, by
if(bx == 0):
return ax, ay
#if(ax == bx):
# print(ax, ay, bx, by)
bxax_inv = inv(bx-ax, p)           #1/(x2-x1)
#m = ( (by-ay) * bxax_inv ) % p     #m = (y2-y1)/(x2-x1)
m = fmod((by-ay) * bxax_inv, p)
 

cx = (m*m  - ax - bx) % p
cy = (m * (ax - cx) - ay) % p
#cx = (f_mul(m,m) - ax - bx) % p
#cy = (f_mul(m,(ax - cx)) - ay) % p

return cx, cy
#return  (m*m  - ax - bx) % p, (m * (ax - cx) - ay) % p


def add1(ax, ay, bx, by, inverse): #A + B -> C

if(ax == 0):
return bx, by
if(bx == 0):
return ax, ay
#if(ax == bx):
# print(ax, ay, bx, by)
#m = fmod((by-ay) * inverse, p)
m = ((by-ay) * inverse) % p
 
cx = (m*m  - ax - bx) % p
cy = (m * (ax - cx) - ay) % p

return cx, cy

def mul2G(d):
#seq = [0 for i in range(0, 64)]  #decomposition of the private key in 64 groups of number between 1 and 15
s0 = [[0, 0, 0, 0] for i in range(0, 32)]
#s0 =  [[0,0,0,0]]*32 #(x0,y0,x1,y1) * 32, start with 32 couples of points, 64 points
#s0 =  [0,0]*64 #(x0,y0) * 64

for i in range(0,32):

j=i<<1

seq = d%16
 
if(seq != 0): #if d%16 == 0 then we have to skip the addition involving this term

k=(seq<<1)+30*j-1
s0[i][0] = G[k-1]  #last: 30*31*2 + 30 - 1 = 1889
s0[i][1] = G[k]
else:
s0[i][0] = 0
s0[i][1] = 0

d = d>>4


j=j+1
seq = d%16
 
if(seq != 0): #if d%16 == 0 then we have to skip the addition involving this term

k=(seq<<1)+30*j-1
s0[i][2] = G[k-1] #last: 30*(31*2+1) + 30 - 1 = 1919
s0[i][3] = G[k]
else:
s0[i][2] = 0
s0[i][3] = 0
d = d>>4


#print(s0)
#first round, from 64 to 32
s1 = [[0, 0, 0, 0] for i in range(0, 16)]
#s1 = [[0,0,0,0]]*16 #from 64 to 32, 32 additions, first round
b1 = [1 for i in range(0, 64)]
if(s0[0][2] != s0[0][0]):
b1[1] = (s0[0][2]-s0[0][0]) % p
for i in range(2,63,2):
j=i>>1
a=s0[j][0]
b=s0[j][2]
if(b != a):
b1[i] = (b-a) % p
else:
b1[i] = 1
b1[i+1] = (b1[i-1]*b1[i]) % p
invb = inv(b1[63], p)                                #62 diff  63 prod  
b1[62]  = (invb * b1[62]) % p                        #62 -> inv part
b1[63]  = (invb * b1[61]) % p #inv                   #63 -> inv di 62   (64 inv tot)
for i in range(60,1,-2):
b1[i] = (b1[i+2]*b1[i]) % p                  #60 -> inv_part * diff -> inv_part
b1[i+1] = (b1[i+2]*b1[i-1]) % p              #61 -> inv_part * prodpar > inv di 60
b1[1] = b1[2]

for i in range(0,16):
j=i*2
jj=j+1
j2=j*2
s1[i][0], s1[i][1] = add1(s0[j][0],  s0[j][1],  s0[j][2],  s0[j][3], b1[j2+1])
s1[i][2], s1[i][3] = add1(s0[jj][0], s0[jj][1], s0[jj][2], s0[jj][3],b1[j2+3])
#s1 = list(map(add,s0))
#print (s1)


#second round, from 32 to 16
s2 = [[0, 0, 0, 0] for i in range(0, 8)]
#s2 = [[0,0,0,0]]*8 #16 additions, second round
b2 = [1 for i in range(0, 32)]
if(s1[0][2] != s1[0][0]):
b2[1] = (s1[0][2]-s1[0][0]) % p
for i in range(3,32,2):
j=(i-1)>>1
a=s1[j][0]
b=s1[j][2]
if(b != a):
b2[i-1] = (b-a) % p
else:
b2[i-1] = 1
b2[i] = (b2[i-2]*b2[i-1]) % p
invb = inv(b2[31], p)                                #62 diff  63 prod  
b2[30]  = (invb * b2[30]) % p                        #62 -> inv part
b2[31]  = (invb * b2[29]) % p #inv                   #63 -> inv di 62   (64 inv tot)
for i in range(28,1,-2):
b2[i] = (b2[i+2]*b2[i]) % p                  #60 -> inv_part * diff -> inv_part
b2[i+1] = (b2[i+2]*b2[i-1]) % p              #61 -> inv_part * prodpar > inv di 60
b2[1] = b2[2]
for i in range(0,8):
j=i*2
jj=j+1
j2=j*2
s2[i][0], s2[i][1] = add1(s1[j][0], s1[j][1]  , s1[j][2] , s1[j][3],  b2[j2+1])
s2[i][2], s2[i][3] = add1(s1[jj][0], s1[jj][1], s1[jj][2], s1[jj][3], b2[j2+3])
#s2 = list(map(add,s1))
#print (s2)

#third round, from 16 to 8
s3 = [[0, 0, 0, 0] for i in range(0, 4)]
#s3 = [[0,0,0,0]]*4 #8 additions, third round
b3 = [1 for i in range(0, 16)]
if(s2[0][2] != s2[0][0]):
b3[1] = (s2[0][2]-s2[0][0]) % p
for i in range(3,16,2):
j=(i-1)>>1
a=s2[j][0]
b=s2[j][2]
if(b != a):
b3[i-1] = (b-a) % p
else:
b3[i-1] = 1
b3[i] = (b3[i-2]*b3[i-1]) % p
invb = inv(b3[15], p)                                #62 diff  63 prod  
b3[14]  = (invb * b3[14]) % p                        #62 -> inv part
b3[15]  = (invb * b3[13]) % p #inv                   #63 -> inv di 62   (64 inv tot)
for i in range(12,1,-2):
b3[i] = (b3[i+2]*b3[i]) % p                  #60 -> inv_part * diff -> inv_part
b3[i+1] = (b3[i+2]*b3[i-1]) % p              #61 -> inv_part * prodpar > inv di 60
b3[1] = b3[2]
for i in range(0,4):
j=i*2
jj=j+1
j2=j*2
s3[i][0], s3[i][1] = add1(s2[j][0]  , s2[j][1]  , s2[j][2]  , s2[j][3],b3[j2+1])
s3[i][2], s3[i][3] = add1(s2[jj][0], s2[jj][1], s2[jj][2], s2[jj][3], b3[j2+3])
#s3 = list(map(add,s2))
#print (s3)

#quarter, from 8 to 4
s4 = [[0, 0, 0, 0] for i in range(0, 2)]
#s4 = [[0,0,0,0]]*2 #4 additions, quarter
b4 = [1 for i in range(0, 8)]
if(s3[0][2] != s3[0][0]):
b4[1] = (s3[0][2]-s3[0][0]) % p
for i in range(3,8,2):
j=(i-1)>>1
a=s3[j][0]
b=s3[j][2]
if(b != a):
b4[i-1] = (b-a) % p
else:
b4[i-1] = 1
b4[i] = (b4[i-2]*b4[i-1]) % p
invb = inv(b4[7], p)                                #62 diff  63 prod  
b4[6]  = (invb * b4[6]) % p                         #62 -> inv part
b4[7]  = (invb * b4[5]) % p #inv                    #63 -> inv di 62   (64 inv tot)
for i in range(4,1,-2):
b4[i] = (b4[i+2]*b4[i]) % p                  #60 -> inv_part * diff -> inv_part
b4[i+1] = (b4[i+2]*b4[i-1]) % p              #61 -> inv_part * prodpar > inv di 60
b4[1] = b4[2]
for i in range(0,2):
j=i*2
jj=j+1
j2=j*2
s4[i][0], s4[i][1] = add1(s3[j][0] , s3[j][1],  s3[j][2],  s3[j][3], b4[j2+1])
s4[i][2], s4[i][3] = add1(s3[jj][0], s3[jj][1], s3[jj][2], s3[jj][3],b4[j2+3])
#s4 = list(map(add,s3))
#print (s4)

#semifinal, from 4 to 2
s5 = [0,0,0,0] #2 additions, semifinal
b5 = (s4[0][2] - s4[0][0]) % p
b6 = (s4[1][2] - s4[1][0]) % p
if (b5*b6 != 0):
invb = inv(b5*b6,p)
s5[0], s5[1] = add1(s4[0][0], s4[0][1], s4[0][2], s4[0][3], (b6*invb) % p)
s5[2], s5[3] = add1(s4[1][0], s4[1][1], s4[1][2], s4[1][3], (b5*invb) % p)
#s5 = list(map(add,s4))

#final, from 2 to 1
res = add(s5[0],s5[1],s5[2],s5[3])
return res
#return add(s5)

# 58 character alphabet used
__b58chars = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
__b58base = len(__b58chars)

def b58encode(v): #encode v, which is a string of bytes, to base58.    
long_value = 0

if bytes == str:  # python2
for (i, c) in enumerate(v[::-1]):
long_value += ord(c) << (8*i) # 2x speedup vs. exponentiation
else: # python3
for (i, c) in enumerate(v[::-1]):
long_value += ord(chr(c)) << (8*i) # 2x speedup vs. exponentiation

result = ''
#long_value = v
while long_value >= __b58base:
     div, mod = divmod(long_value, __b58base)
     result = __b58chars[mod] + result
     long_value = div
result = __b58chars[long_value] + result
#return result

 # Bitcoin does a little leading-zero-compression:
 # leading 0-bytes in the input become leading-1s
nPad = 0
if bytes == str:  # python2
for c in v:
if c == '\0': nPad += 1
else: break

else:  # python3
for c in v:
if chr(c) == '\0': nPad += 1
else: break

return (__b58chars[0]*nPad) + result

def b58decode(v, length):
    """ decode v into a string of len bytes."""
    print(type(v))
    long_value = 0
    for (i, c) in enumerate(v[::-1]):
        long_value += __b58chars.find(c) * (__b58base**i)

    div, mod = divmod(long_value, 256)
    result = struct.pack("B", mod)   #converte numero intero tra 0 e 255 in 1 byte https://docs.python.org/2/library/struct.html
    long_value = div

    while long_value >= 256:
         div, mod = divmod(long_value, 256)
         result = struct.pack("B", mod) + result   #stringa di byte
         long_value = div
    result = struct.pack("B", long_value) + result
 
    nPad = 0
    for c in v:
         if c == __b58chars[0]: nPad += 1
         else: break
 
    result = struct.pack("B", 0)*nPad + result

    
    if length is not None and len(result) != length:
        return None
    print(type(result))  
    return result
    
def priv_to_addr(d):
Px, Py = mul2G(d)  # P = d*G

#if (compressed == 1):
if (Py % 2) == 0:
P_string  = '02' + hex(Px)[2:].rstrip('L').rjust(64,'0')         #formato compresso - caso y pari
else:
P_string  = '03' + hex(Px)[2:].rstrip('L').rjust(64,'0')        #formato compresso - caso y pari
#else: #uncompressed
# P_string = '04' + hex(Px)[2:].rstrip('L').rjust(64,'0') + hex(Py)[2:].rstrip('L').rjust(64,'0')


h = sha256(a2b_hex(P_string))                    #sha256

h1 = hashlib.new('ripemd160')            #ripmed160
h1.update(h.digest())

a = b'\x00' + h1.digest()  #aggiunge byte 00 all'inizio

h2 = sha256(sha256(a).digest()).digest()  #doppio sha256 per controllo

addr = a + h2[:4]                
#print (addr)
address = b58encode(addr)  #ultimo passaggio: codifica in base 58
#print (address)
return address


f2=[]
for x in f1:
f2.append(int(x,16))

addr = list(map(priv_to_addr,f2))

for i in range(0, len(f1)):
print (f1[i][0:-1])
print (addr[i])
420  Bitcoin / Development & Technical Discussion / Re: VanitySearch (Yet another address prefix finder) on: May 28, 2020, 05:46:13 PM
part 2 of private_to_address.py:

Code:
0x6d1c50a51553c7cce0e22a9ac6a976ca13153a8a8f96d2f2170f1b6bc5dd3aee, 0xafff148e06abdfdc977272002287d474851e310aa8ed53adfee354e4fdf597f7, 
0x3e10c5ae9ac968ee1f46bbed4139062026f2835f98ccfcd07622eb049b720b26, 0xc735c6cffe4288915a8665b287215e28e2ff79a4dbe09e43346e98c7add92db5,
0x5e5f1d618b97f9f3f311a6d8a8a6418f659d3122f5a1afdc678ca9b7e4a6d0bb, 0xd7b1502b06a7e6f7358f6bcd04e721da72555f2e506f653a168384791033eaf9,
0x73f87bae9734854a8ab684d0580ea8a03c4529b6c22d0299e0083a7d65543cb4, 0x37c66cf03a87f86feebfbfc11a1402899d5c42f5357f2d7a3d2dd872c4856cdd,
0xf8138a6b3c16427fffd3cb9ace01a1495af68e31bec39bd2dda9b5e44f005e3f, 0xca758f3befb4ebd9f9d015e57aa5cb51f4ec41bd554be21342d7e0202f357eb7,
0x76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39, 0xc90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01,
0x708a530e9e52c73bee87c9d88161c810005d57622c29ae691cf999a83a1187a5, 0x9b884811e1f9a897fa9656dcbb6d38283ecda73c6d353e8a58a4f19b473db9c0,
0xd08e57ad859da9be25ff7263aa9b4ff64ebf20ce506919442f05091cc078ee8d, 0x852e97984ab488d72d6172ee757e6df4123ef7cf9422ed9de997f4dc2da63e86,
0x19cf034fc48b3be219bd648395e462cf9f374b6d86b2b59e2e1b16c6cde4f5be, 0x28e32b06a15ab466c3b4be68ab181947ef91d1c93f0f1c0c0a91532b6f321af2,
0x7da6c085e4d44d275f58be80ecd31d080cae3acf1e48254815914670429129ec, 0xf498146bb9f41857511d0207491627bf0448c08654ca586aeb50aee2acd9ff0e,
0x5335cea5e99eeb23765b3444d9bc7be601da67d691bcc42fd43ae5430e9c22bc, 0x3bf8d020769c5224a067f080f0ceb86ac8c30c236ca1f19b3c2c2672cbdacb60,
0x90d090cff5c1be6e21be9001be69d94fb2f7f394231aaee94f83d49551654f22, 0xcd569a1d2bacf61a953f021e06bf70336dd635653da3f8740f5de057601a43e1,
0xaf6c44a078cb5f0d7c719c2f8397f576ee93bd034bea2219e3abc209d17cf3e8, 0x784096fe85d4b30af9e73153cb246dfec362aea7ca0d435b8add0601751baea,
0xda4798587cf1d1ecc7322c310821292ed9d6e06d068819d71b6ef651c76b19fa, 0xebb1d7789bccaf01d17369077e16569ea67bd13e9553fc206aa26eeb326f5af7,
0xaa21c60d6f7d62539d42bafe95c58f3033c0396cfa0ceef96d2f91edd6569044, 0xb2ae6886fc4e6aea6d1d26add41adf4eee5abac113928334c1924c41c2f37766,
0xe3e47504a8ddee6ad817aaf582e9897cf0c087af39d8631ecd92fb65b9135dbd, 0x930a5bf809cbc6c40b98c81952b83ffea5a202ff5ec95da96906af3e4748045d,
0x5716dc355df202a2c3b4031cf14a2858a5cabd91e9d3c2be5bc1e6214ff4de54, 0x985f6c400a5b83f391eaa661a99324c5ebf3feccd047e417d3ea4fd550100fa5,
0x7e8c656fe870a9b0a4745338f80bdb4aff67ffe6e8ce4075cbf0b9e5cdee455f, 0xbdddc632ca30740f2a3f760f4803a53b4aa2d16746f46627173de998171b9cba,
0x30651cb592d282b5348f1925be3f04dda5033bc39e2fc7b1e61500d9769b57c, 0x25208833bb7ac098ac4e2423e85682c3192a4d18739f78057ff3a505f33236e3,
0x3df841f891a95eb15beb035ab3e3c7260a335925893447a437796b9b6698b59e, 0xb38fe6df98b090c1da02bae8f11cf3867bfc867b214949f8bcf8e6796b92baf5,
0xc738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891, 0x893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3,
0x5578845ecd7c037435b32a6992e7aa94647197ea49b8c9e4ddaab0784662ab1b, 0xe61d07978b6de2c3cea6d0a51d2a4053f653a7746a5d64de316d18f3056f3511,
0xb8c46127823f614610a240a35720df7aca4c9be408d60e2f34baaf338761d58d, 0x8f9ed96c5170e37d14a458f697f3c5053f7504785e107c5b638ea0ba9d1051a4,
0x47f3383888a364cc4abfa3bc1d0ceccd22f12354fce3996094f869b8948b6c29, 0x48ca9a8d0f032937190e48675b416c7118bb499588f994a81edee1120e537ef9,
0x8d56e9f710271f7a350c993fe9a3671f3f47db9f0134adc2db0b304050b0040, 0xa12185aebd0a9aa21ffd150a8d79b285f6d7c4720e1782beb58e267a5b3fd0a1,
0x6b00403318818d2b7c78125d8e480a2ecaeebf4a41fff36da14dea1a1166ff40, 0x41cd1b3ae8aafac9968943a0590bf2f0076883f6e7f3ede9eb74130e9d71b847,
0xdc13f232d42fce6341e20f977be65a37889a1c5ed30b6270f56563df13573b7f, 0xc909ba80429e340c3c7410da84a90a767045547017404b1c42acd2284c1f2ba6,
0xc0c01f34ae41b8cfe466b4c9c6a5d5f614f570d6fcbef768a81a6c8f05ff4adb, 0xb84f5bee4357f5c7c937a0b4075b8cecdbc43d170d15b85fc4eff73ac351065,
0x25c02de601df7f073af19565db2119a8226c21ea70ef2d14b02f590b87ae9ceb, 0x8a9fead2c812383c0c884e0dcfad11d537c641df0a65872647090d134bc6e275,
0x3a932fbc468ecbdb3d229ea400b63b93a2f32b1a022bdd6e365019d7932c1a1c, 0xad3d80540f3457a801c9547d4dc81d0ac0417e15749a28b684aa92697d343540,
0xfedd9d1b2cf8e49ce8ab9f4ca7ae3e58aece82c0295949fe1f8098f6ec5a3c34, 0xa52e24c31853b8e0b0be85312c8f4b00adaeb54699bf829762b54bf4e13d7714,
0xc3337343451cb83ca3521e9276b346b946bd033e9824fcbb0452106b80d6bf1f, 0x2eefe9391b812cda13dff31af72c315598ba36420e266162f95e58423cb01f48,
0x3e0e3286bc6ea48c2dee2d7f5e8488b373021b91a11360769b4e54d1aab6a396, 0xca448172fa3b37964f31fe1deb453fc66ab01041f3468f6a2eb31e48d980e27e,
0x5a62873d3ea83e253c3c7cd537ed6d17d7ca75dbee54677e27bf4c48daf027e9, 0xf6d94479a5bf6afda76409cfeec57a43988af4309ca675fb3199d905844c68b4,
0x344ab93080c32d284982e0200982b9af5645d8f76fecf570aaf35862341023ec, 0x6e1c2b042b24462a73f8f2d1ea514c5ffc4e976afc3995d704f898291e1eeb87,
0xd895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b, 0xfebfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f,
0xfd136eef8971044e8a3a43622003a26703ecaf7a0ec40c3fba5b594b77078424, 0x218da834f3c652cc67a1d191b5c5efa57cf2b1f78a2adfa8cd61eeefc671ddf1,
0x6d8c782f716df12672d362da5060b41603428be4aba0970480ba87ff6127b756, 0x99aedf0896fdb9111459a82d36d34daf4e3aa6da2d7cdcca6551f74abf172571,
0xd99e8e9dd9638d140e9cca5367519f861b7003a0d43f024a5f1d84ec8db1cb3c, 0x36dc19ad1cc0a3a7a945bb321bceba6e6286fef8ffc8765cd88a29e36b8637a7,
0xebcabedd95bf7aca8d059aef1b4097f8f1f85dcba58823524dee1a73758cf17a, 0x47d3ce0f8f22b9cb02c00a1b67c32e6b10fad212d0ace95c446cdc5f5caa0ccd,
0x56c9da9467cacd5b48cc1f2b4aae67140df701ca8ecee258e4c4b2c551a3c43c, 0x38d46acb42c79ec2f33c7964ddcb685241d40ff932edcaa1824d8b7d20d7c9ed,
0xe8df4d2e4bd4ce2445331a369e17fc281185621a017c8afbbceee515ac855c5b, 0x6c57fd70c47f9b264444db4f59ef32c59663b55f1e1e4d7d59d5e72c2e465650,
0x3fdf1619a198317a1bd8a54e5b09191d203351e0440e636fd46f68d3c385172, 0x408d02c06e5c12c3fe470c7d3c8573755b9b929e90e7232b79ac67f0fccb9794,
0x4068d3d718eca832912486023a981662fe32efef0f0e6150d08f5bda52e7e454, 0x8cd853b7254a47aab9ec14597d9d38d1988d21ed13c37332779acde5d8ef191e,
0x33eac9bba2c355ce56e101f9afa0b7a0cd4780c2511691eb400c1ff535d8247e, 0x35973173e4e17c41d4461f2afd15ef2d84f8cf37b7ea407f37216ab0af3da9bf,
0x12550ecdb1d825e0b55bf32e60ca027ea475a2877ba933de0857adf846c5d939, 0x7b8f8334f872d7a75448e43c17724a72838b741fecd8d43192a74fc559e757c9,
0xb71e546d922dc9029d32c2b3c01f8750335a5211ee094c87b9e249d02df771c8, 0xe7ccefa8cec9f90078912a4ccce288f426bd522b55bba2862453a26f93f48c51,
0x944d671ac3b585d4c69bb7b53afad08f85093c5434f3742138d0aac656c8a56f, 0xa71065977b501fff4c143936133ac61967d4c174dd06517eb9f4dc65da7be289,
0xfacf5d96ba1526b8612239666d87a19e850fea94baa7fea268f73092d3194444, 0x7ceb907bb8ad44f6935b7756392ddac6be72b245b947d00b552bf48844bad676,
0x86a54e91cd099a0cfe6b03655ad3c305fd69e56dc812900baeeb8a18ae08f15a, 0xcfee614837a784603a72a8d06d75686777129d125b35254d3524d1e7c1388308,
0xb8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03, 0x2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7,
0x6d36d105ed8cc5ce53f2cb698ab620f9469a3e5cb25bf6e6d413f414c5af726a, 0xe4ba5c34e377669e72d8c66c95c50029dcc59936b4108a35c570491a13f9fc7d,
0x69068ff0982d10be54c761f14d152c05abe7b10385af1c5ea19849dc6e1346b, 0xb863e3e090bfde26da85db2bd086442aa4f6893994c6026e7bb58a54d7226c13,
0x3ab6bde10cd3ac0cd06883fa66f0b0e3eb1309c0534b812286e2a30ca540db99, 0xbaca62079be871d7fc3117a96a13e99c38d137b0e369c043e6873fe31bda78a3,
0x898c3493cb2597615286dc5cb1e86ce1068cbd14348cff1a30e691fcdca1f6a1, 0x75f75986ab56a5549d84542452ac6e93b2a7cf979f2bd79ca4adc20f164f647c,
0x63c462435ef974b393b05b37d1c89d70b0d8958ebd541d7584e2bbc7235c795, 0xe27f9bb913038404431f660d931c85b69e4acbacfa49a9bd3f32dc095b110258,
0xb213e2fed2918bf01a5299d7022a274e5e56c8b917a04328aa69e03c3d1e3998, 0x229f8ec20f2d3c12c3d61ebf83a43bc3d534165bebded175ec2cbdc6325fb81e,
0x796634e3f1ad56f0fdba069d9d07bce2ba2fd4f373ddd3ba7777bf279f1048da, 0x4d8ee2b6cfb20b8956de74735a7927f2532576d8cfd74862e8f9be24a106cf01,
0x4b3b3ad816c7f93e5d1d0ba691606e060e83e3e70ddf350700be1feca25be234, 0x5eec023b85dabc9c7875e96dfd8cc04c41e7fd92cf211b84063b7e03920e8362,
0xc299c6b06e6c78ae852bd55cdea35f99d264cb5ae836b77dab209ac9c05201e1, 0x5aa739923611805b38884f24fd774cd7bd74dcf583ac2ae9add3313a50f51ba3,
0x9f7b88b6ddb04f96020251b0278965be2976b0f0e2c76707b96634a7e289f55e, 0x32f9f784c70410f7be3146b4298fc71fc0e536e0eb10a2b1b3cd3b65fe1e4bde,
0xd031ae98fb356071598ab6c18a70635c1acab879033d564cfd37a7f16c1cbaab, 0x415196b4e954584e8e6e4c06adcb4dcf6dfb4a4fdbd65fdc4c39047f85116b26,
0xd58a43e9cb7448e3e76ccadfd3fb73a4c493f509e56878e516549c8c1dfe1d2b, 0xfc17866ba05883cf10a729132828276b54d9ba215cbd6fbffcf2795b8cd50922,
0x16e85ad86a95356439b979577bedd0e96e2eed7276ba269a626fbd58447996c0, 0x7408b0aeb424493efb217e5ce00ed55a21b642ad9c569d544888bc64b8151d48,
0x21d2713971118310cd6d969c3c27ea4eed4406aa99ce805e124151be249c795e, 0x94c5f9b4b075acea17735b85522bb4c3d671944a4adfb761b0012ec399208ece,
0xe80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d, 0xeed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78,
0x440ca1f08ea41265981ac4ed1efe7a37122dcc3877d2f9162db0e78b0f83cd58, 0xa6c8b0d2cd5ee122af8954dc9d4e2f02a21e4d4269c0a260b07bc069b88a3f4b,
0x5d2ec6dbc4a1052608afef69633ce3b106d5b94740e350192c0359ecd7592d55, 0xa92cdf89c6e45eb58f710fa268cd6950e2a7bcdad115174266e5d0eaf5183a7,
0xf694cbaf2b966c1cc5f7f829d3a907819bc70ebcc1b229d9e81bda2712998b10, 0x40a63eba61bef03d633c5ffacc46d82aeb6c64c3183c2a47f6788b1700f05e51,
0xac371dc3b11bf742fe2cae34215f404d7361f1e159880a51991f4b49fe8f9f5c, 0xc51616c18709a477ff2101e73254e73522953458ee751e1d17a83ff3325a503c,
0x62782899ceb96cc8e5dd3c25223cae4fd964c6ed570d9027a744b8f8e55bf84c, 0xd670aca40911a28901c54972297267839a020de7ddd176ed6f51cfab5f15fa2a,
0x8942003a14f1840c9348c0bd0222a17a40893bc452af385df4a1c8d519e33446, 0xa9fd039595a5077a4d8b2d6d0efde4e06bfd773679e74f9840d38a00e6387689,
0x8b6e862a3556684850b6d4f439a2595047abf695c08b6414f95a13358dd553fd, 0xea5e08910ed11cb40d10bc2df4eb9fa124ac3c5a183383d0d803dad33e9be5ed,
0x2770266b30a342a8a2cda44ff5505c9899eb419c013bd6d03d728c95b913cb26, 0xf649bc5e79b0db1a5552d24d07f2b324e940c91bcc815bebbfe71733f348a7a2,
0xd3adf06e24844c0932d9e10056aaecf628d49f4df64464ce23f4244acf0c58bd, 0x57e99db4fc2a6077bdfb2febcff638baaee3869fa4b98c9ce52e4ab937c89387,
0x75e4d0d383cbed2178e5e6e01cf8ba9097bfdc455686cd1af0aaa021595e8247, 0x1fce42a175410990741f970ec7b726d47ddab5b6ea9ad893ca23fd9d59982d22,
0x2f189e88f19a3d85b411f78cea33fedd69006521f98a529a399471d0f39715c2, 0xc91a39f8f3c5d7cfdf708475ed10f9f7eb3333e2c36854f066a635844171dfea,
0x3ed1b6383361bbf03f020d605984da849cbbbc1c68f4abf47479f44da6333323, 0xd84f2da48b5b4ee75d97c989688f929ea9b728a10b78f7294b13fc48b5d61ba3,
0xd2cdc8bb0a1b6bb777e46b40888a6f7e77ee68944d90e39887562edcfa3eb3fc, 0xc5538af9e5c561046dde95362cf926eec1f217b9310b492744287db3ded37564,
0x70fdd2f06a758181b846fd772348dd4368a3702e50dd00baf25057d4b33980bf, 0x5edfcac0d0d58696957a410d11ee596b0a10358385d74a5612eea8cea0b75785,
0xa301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070, 0x7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1,
0x27e1e59cff79f049f3e8d2419e0bff74b43965004c34b5d811420316f24ba5ae, 0x310b26a6c804e209ee1b5e3cfc79df05df48a1a69afa63f784a5bfee883a45b3,
0x6e8313a30815eb11156b133082200a4d83596a67ad72856267012700138011fc, 0xc147818bdc24f204c1a12db201dac30426af915ae9c51f9a6acb69fa3f15ab7d,
0xc712e7a5f6864aee16588ec3892d7e4f5a39adde84fbfb4f9969175c9caed7ae, 0x49644107516363b365ed4b82311dd9e5380d8e544b0ce63784d148aa46156294,
0xf952a9099784851f2bd1e038a4d9e1b43d36ec5b44916f7f53a749b8d00e6ba7, 0xd8a93a5b08abcebf861376a2e27fa0f65557167b4c62a2b98dbaeee50175e4c1,
0xa5ac7d1d04cda30c83a053aad09876cdbeb32b53d38b2021f9549f5c595b6f7e, 0xdf0b8a0ab540f55b36cc3c9247d9ee1b99e39160f5818a4848dbb7308ab19c84,
0x94016d5e31d3fee7504031a19d9e893a8f2e3943aefb1f62690065a283aa0e93, 0x675032ee5c454d9640355d354eee6fd7f484373baa57b07a38eed26887addac2,
0xbfc0504a4b3235d065c0d426b8675fcb2c85d6f58275d791b43e1fe44a6db03, 0x1955467a6c34f3453fb8ec7f94a6c99237427197345d4f0558ac8d1a464b8542,
0xef22d174d59fb2891bb978846a9f09c2023568a20262bb32b0f4862e0266b17b, 0xbc5784c97ab24c7568f9ccc3ae34a1073ee7276f71c341b732a6e04379dac83e,
0x9885f5fbe1948d0f55788a38df2057ee72ed5c812f5b845657f2c542eb4318b5, 0x135fd6f69ef198f996d2c467768ceb8e7c82aded676904af2fe542541599175c,
0xb5f7efce4ceb892d39cacc780b2df927f28dcbbce2ecd9ae2313015a92d382a0, 0x6843545b51c3f2353c0957c6e0cbddd371fb096d29acf8c5ba2f0abba5b4b532,
0x3360f05465c04635ad815b8d68ce767d25365e58abb5b33b93a4ae4ce81c1bc, 0x7e48b5f90c5750014ff69c4251306753231728eb5c81150176dd2896566cbedd,
0x1cddc3d2b2e71076408754d8fbd4624389ed4208668cc5c47e692464412cffa5, 0x1e476a0cb2f1f8a63fdb126bf942b08ac41c98426b36b528ade6d89cd521954e,
0x875346a56a385116334fbe1bc8bae4296255223f8273ce11509f734048993f7, 0x64e6ca8a2ef8b0310e994e6e75fa287c9f4d4f1b126018e601c2c8172b9dcc2,
0x2accb359f25ce939f21f8b8b948835b0cc0819c5217a8e2ad35fe43934a9f22f, 0xd518a4e9588ad2e519213a37edf0edf1154bd7bec5ba550b7b75dcb3b75c4927,
0x90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4, 0xe507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150,
0x7e2cd40ef8c94077f44b1d1548425e3d7e125be646707bad2818b0eda7dc0151, 0x905b75082adcfab382a61a8b321ef95d889bee40aeee082c9a3bc53920721ec7,
0x186e497334e4231ba1986bca426b6c76f13c4311bcf638166275db33b0b7b678, 0xc0d460e49807bd84aa7fc825c0b7e67e11077225449535dca7a076f2f8d91fc1,
0xa146f52195bedace21c975bbd1ef52a79c636bf9db853cf90e103ae41345e597, 0xa5a99b0ab053feb09ae95dd2dbb31b40ea67a5b221f094b07675676af45a770a,
0x61c8d834f6dbf62e7e06b34c3b72412984971f2ef5a55d0cf06e5cbb3421fb8, 0x6dfc6ad99003b4b7ba9392590e05eb5c8067134b3a6fcdd2995ef6684e3ccd80,
0xfd9941cee1c26864248f7035352787d1aba9e93ef5edd333d08c89b84bb9dc8f, 0x7a41ec75bd40e6f46de97e05788859e67872b2fdeefe938d743eae53e59780d5,
0xf6a6b63a208ee513b7363240733a68ad889f37a6ab27fb487124be18af6b35a4, 0x3df7c8a8002d138b1cad3704f560186f19d5756e75ee1862caeb6fec81f422a6,
0xd24c75a1cf1993b9bcfbf9dab25a8114dbde421efeccc4e20cbb53fc4ce45444, 0x58fe1d2de84dc1d1cfcb7d1810e5a78abf7593f499f1e524cb93246987dd4a57,
0x87a2fc28c286c376220d1b0f150778ff7fa8a43c1560d018b96823e8a6954c11, 0x33ad518b45aaecef97b1948da0d27532cc48933f2a78124b756e332e272a8b45,
0xa8b08b864946ac6da101eb85ee7bdf5524282ca1a9956e4aeeb1afe987a43ddc, 0x7f00fe8bc8a36a01f31591ffdf0e8edca325b4452b1076c387001c82dfa2a6b8,
0xe1472e046e7881a684556efcbc384cfe3c0b341dd2e53c0dae47472ae2706ab6, 0x82cd92aa47c58fc683f691978c8621f8aa589d55453cd27536e86a169d58de05,
0xc5f0954fb1b8a63e6e74781a2e3132fb2dcdb2807e71f1f8e3e9432c3b963645, 0xd552d31021b0b6fb18a3cb440260d7e6a330502b0047be4edbf8874f008be2dd,
0x1caf92c804f8aef5de8b4d601e48b9ebc42368750fa15021ebfae54207a84fb6, 0xbc24b85ac976e53a481a64f8ff101622ec1cc1696a2ce67616b1819027149109,
0xdf3acf55bc6d97ce34ebeb4634fe10100ed3d6d6383c11a753a93123e9c8381f, 0x6b3dd8ca51907a75a6099c1dedacd1ebb101957e67e389e61affd6962347de3a,
0x705bfd69af09650d2589efe9b3d78397107e16a260ded52db768cfe14a955911, 0xe14aa4130b73f990a7e63d81f54051fa297f3b522a42e72d8bb7c693ffd200e4,
0x8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da, 0x662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82,
0x4d49aefd784e8158fcafebe77fd9af59d89858ade7627eaee6847df84cf27076, 0xcd32fc59a10dd135e723f210359ca6f06e0f2d1a7df4d8466b90b66203aa781e,
0x38381dbe2e509f228ba93363f2451f08fd845cb351d954be18e2b8edd23809fa, 0xe4a32d0a0fb917dcb09405a5520eb1cc3681fccb32d8f24dbd707518331fed52,
0x7564539e85d56f8537d6619e1f5c5aa78d2a3de0889d1d4ee8dbcb5729b62026, 0xc1d685413749b3c65231df524a722925684aacd954b79f334172c8fadace0cf3,
0x49262724e4372ae6f6921b82aa4699a1f186aea5401226303ea4264897c2a310, 0x1337e773bca7abf95a2cfa569714303b6d163612a75ff8ce0c41b6815e27ded0,
0x6a664a356aa5705e6808a6ed7c44aa2ba5a362919f5d0b81f8166c1903663da4, 0x449a125954fde98b29f86ec196bf0cd5089916127e6c04c9c28313fb33fc22c4,
0xe306568c1a240c90d5e253b3e477e2f84dcc1a56ff06db8d1384b079cebd2d31, 0xeac6fe378934260888f2b107f7d0db6ffbc8042be373826692b408392546e44,
0x210a917ad9df27796746ff301ad9ccc878f61a5f1ff4082b5364dacd57b4a278, 0x670e1b5450b5e57b7a39be81f8d6737d3789e61aaff20bfc7f2713fd0c7b2231,
0x3b9e100e2428cefc271b0e7623fbd63374ebf8d9aab41dd9c530c39e363136b0, 0xfafb98152d16bb71df1533eb8f475b26a2ae28a33ad31f81953ec16f6cdbbc8a,
0x7aeaca93c06c554177e9a1946db38156c1e802685281c85dea98eb53dd90124e, 0xdfb29b190c1390f04facaff046c1d95159bc1bf9b90a904b3f50781022021e31,
0xbb0aad49712ac9a92b76ca80f5dedef717ca07688107beee9608f0472f485d3f, 0xea699c53c58354798ecd201f7297da34895a5afa31670bffe79392503ca2f975,
0x5568dac679f74a32ebb5fad219547ad166f440abc1c017b470f702d505ed815e, 0x7a85f8742788ba64580d6fe01d073f2beb05f7eee2582151d9bbf64c00602df0,
0x79090ac8e4eefcc0d4e8eb197afe0113e1e58b4db01123de4aeed33a36718dc9, 0xeaab722b91905b8f13d816cbcd9aaa56dd36afb70ba9008b963322b11cfae7c5,
0x601e9e884807943cbc9bae600c7436c32c9be7402ee29932abec1bdc2e44a0c8, 0x5a7a22aa6fdc8ecc714b8cfa9ffabbb1424e0c5a6b46e65954793412ba00e557,
0xe77c81ade9f97b551c03dbbce549ba668dd71de7cd775ad2a269694c7f60c7d1, 0x3acf1478eef81321c5fc3b323ea81543631470f71c2986d34ec581f282d72449,
0xe4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11, 0x1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc,
0x4b30cbb7686773e01ec64110abdb362f88531a825ba172953bfee2233bcdaf2f, 0x74c6350265bb629b6f9e2c5777c3c4a91fdf3c81e434857568033d463d26b5b7,
0x900c3241bee44fe90832f51feb470deca2f56e03212a99465399f04e6bf05bd6, 0x6c31f9e8e8b1f0f5f95c7204570b2439d69853583c4efb15de52ad3bf00d358b,
0xcbb434aa7ae1700dcd15b20b17464817ec11715050e0fa192ffe9c29a673059f, 0x4a1a200ab4dabd17562d492338b5dfad41d45e4f0ad5f845b7da9642227c070c,
0x5a8d0362ab0590aad628cc3403c233cd82e0deef7b1385257a7c28cc9f105c50, 0xc059eab113d4e536936a6b724143ff74a605f68a66d013c35c9b201838a4cde9,
0x29dfe4805cd534b91a6289eaedf7edc6f158eba3f00d0dd5be6fb2f7a72e294d, 0xbf66d826d00672e19b434e7588a05e4dd1f1961c3929ee6944137260ec469b52,
0xd93f4d031232f60a48ef3a5776cba4e83772f8a59292292c647e18b9b2d64feb, 0x7925555d45cb2733a237311c54dc8c4d93e0430beec90da37b0fbd5934698359,
0xf478056d9c102c1cd06d7b1e7557244c6d9cdac5874610e94d4786e106de12c0, 0x7f09e610f33e3946e68095e01068694c26c17ef609ab92d769a76ce6ca5361fe,
0x2f0769c6e36f28441b14e2bc662ac65b7e7062916057a016722204cd439fbc84, 0xb434f3724d73bdddfa5df007990e2149cca79b6a4c4dd5d73fb902de1c201bec,
0x1ddcfa48d561bbfbd71a1e26d9a6dd6187c84c452c59c5d8928b2fd2d026dea2, 0xc6fa401fa9923a7d41fea34d6402c020666fd68c51c0673406f4873d183de522,
0xfe7e6780559e03099586895a15416e3991188318927f19c4d537eacc86a758ea, 0x38aa6967a281dcb988c08e169849251f3b801707443120d1e4f22d95db7ab649,
0x355b3226f5dd236d3e1410c009e372a150d44fd345b599953c7f0046c33773f7, 0x8eca480704703ad49f10eeddd21fcb81e25df78cce251090053c3ff1887c182,
0x91baf5ca75383127d6df6f9150c3af851018044f70651afade7156268cfffefa, 0x4e5cf119347bcebe5d969f127dd3d92f4bef310e6fd303dc7d36f34df7f6faf,
0x92b1e0f17f260bae5619f43cb2f866b75291de5e4aeaa5d1dd3df40690785491, 0x81ec44028d8d9e63e167c1d1034e5ad03985fb77e2288d7b9c98d36058be555b,
0x44584121cb3f78a7cb2c5373e0f5ddd782575fb3285edaf32fc0917e8d33c546, 0x308d9377f3f8753a77225eae391ada20852f0a3cfb2ca73660a6d187000b4fd4,
0x8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e, 0xefa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b,
0x24cfc0176da2b46fa8bb5bf9636be1effd7e297f29122fb3e84c9ab0c18ada5f, 0xebff8fbb079c61a69868714d5deda927ed959ca1a4f814f268fa6139978a586b,
0x36362aa7e907ddf874d07a084c2a8d2050a680e6ee54c9eac3f95603ebfd913d, 0x48f278676cb8afd53416244370da2a82d830bb10d6b2faafc44f9aeac52e243d,
0x4a7d58d4b9bc82ea2ded72a1292ec616ddd67fc7f057edf103189594679da2, 0xb98ac5b76702cb75e6b1d8147ec71b3b71c3b494963fa28a4877f484779ffe26,
0x4487976df32a1e02f295ad962dd9200dfcb1e3bab7bc6c967cababf9ad132896, 0x27bd5860d115afe1efc9a90774561a3306b40d5a6276aa7a48c01b12af685248,
0x8f3ccf31f8b74b9b624a5d1b7cb1096e202fe5e7233777aa859864d3775732c0, 0x67f1cd3e2d39e53189ef46d997ce53d8a90e687754858825e73bde5e65b9415b,
0x4a4d3ac28bcb83788b6a9caa833503247400f82ba06273e6e08156f6bfa2670c, 0x70abb91c01845a4f17e7711ddef02b9d4930594cbf29beed808b9ffdd6c1764d,
0xee7d69c4cbd001c7fc76c5e2c066ce4996f8808a1e07b2a9ccf34eadc87c4b65, 0xecc8626ec1a413821a192abf030f2ee2c33e8999bae942e523e8f44ed136a95a,
0x5f7b2d190ae91802c3ae6fd89ff8fe18903108c639345c530d96afe24cb24aa7, 0x7703600c4fdf2b330a3f80a3ce67c47ce8deb7093c81d0c6d7807434a693d7d,
0x50d775b5f72d186b266a14e5254cb5aa49fd863381c36b09842632d7ff004130, 0x3401ee3b0f4ea557c51724346010063f2975d945eef6a4c3456b8c64df6e406d,
0x51397451339d90d02aec24e6d94886d87bc464a15fe4090a4191bc5f2f7fb8bd, 0xfcd7143e47643bf34b88fefdae815c47fafc32d3e3f98d5a8094ac2d83908c0f,
0x87991026f1b2119621ea3469b169b0ebc4feb28b45095da7f2a1f83934889f3f, 0xddeab94ca5a91d962132f2cb717f279de932f61bf286037b49e2df9bc3bb792b,
0xcf8316d62bfbdfb8aa429112bf014887eac864d36bbbf3ede2b74915ee36ca73, 0x9feb58deb5d9d73e384450890dcca681c961598d88d710f5b4921942ec25534,
0x6e2114ed297ba44fc3926603bc03a87caf3e9f2c8bd84e64afcd9846bd9c8f0a, 0x5591a0cc26f06e27da6d50f80c5d91d090bec75d0f9595ebd79148dd16a2c9b,
0x8610de9a4c4bb49de539d28668cfa6165a2efbc75f3476613c8937d6b752f97d, 0xd31997a02b630bbc937cd99b2533f99e57ab4d9f545543e08057dcd41f1b1af2,
0xe7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41, 0x2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51,
0xf5cafaba036bf8d00d38bfb6772089f5203c35e4d6e32fa9d97e5b917b4ae861, 0x19e83b8a022a6d817bff9904640839159b3b2a9c552f05f3cc9c239c0d82239c,
0xcc3427e7d9b59150fc7b6edb91ecbfc1d9bbbc5b4730714a70f9fd2bfaee42db, 0xea249841a521c6a1885e3fd3fb21520010e5cbad8e72422dc6229c0115d87bdb,
0xe9389024ceb63f1f12df5156d7e805428f9e509c494c982084fd4cd7bd2a9651, 0x8648688723726595f9287abaf671aaf18d7110cec6770bfefefde2b75e786824,
0x948f05bacd98445dec83c585fbcb5cf4b1d75c158e9c410eff4366c67ed4a086, 0x864ca89ffb5a2a3382f450a6601139411c2328a71c3fa2d1a2a1800f9e2bca4b,
0x56bb148f0198197e20177708335efccaff5f01600ae80030cb0a71652e96e4f1, 0xa09584a561300a33beb03ed8be30ea9f7313d1d2004af0eb5889f019eeb0582e,
0x2584196292919ac90656fc45451d6d43ae19f4d28ea64c15c0cbea6cb7542c21, 0xfcb35b1f1cdb244801e5daa4cc7513d5f3e3a186e4c2ad7b3bebe319672bfabf,
0x264559d87829256bed116900d82d0c379f0e4d1253c68e6fcf2d41ae7cddab8b, 0x79e5bd1926d3512cef7bc637034072d77a8631af39caf1e6c9f64b45001de473,
0x7e12cdc41373c52522a9754cc1e8421f6489f0de9aeed7ca43c461f40c1ecbf8, 0x71284f88888dc837143f94dabe4d1259c969f61d8fe1d9f59d45b8cdb0bed615,
0xb6a0c8fd373b52bb6ea351579c26e1c59a954fa17393b04ae2da28fb898a26c1, 0x5ef193bfda0374949a901e3febda7facfc94a5e858ab5a06f5550eda8a78217c,
0x4b8ec2ff2a3742a6772b91ca7a05a6cf1cfeec478e667ff417e6651c14557d86, 0xfde6c3ff04c157ab14a4072de527ac5f28d5f2ef0fc3f692bdd9b191b5167eb9,
0xb398e8153d670bbbbd3d489e1fd8a0a6b6b25fd720c036d8a4c57f5981f23d1f, 0x69f59c22572df47f07f7feb2fb00ba52ea791d8ad26156cd1583ebff832ff3fc,
0xfcd5c10733963a42532436dc697ac07e5f8a6d5e9265691d52b82d3b4780763c, 0x18ddabe2e5522c463b720db35f72e38cb119b22e716463a4b54e742038e851cb,
0x634a0dc1bb425dffa6cd0b2054631a7348b84809824f28ad2b1c47a633e9fc8d, 0xd75be21fe75a4b6cafe05a657de4a9cf519ad5a18ed5c6169587f30b273f87b6,
0x900f2cee5843cbe52238a5daf8266e53f68e48f402272e66bce3be305d8ef686, 0x732ac155ec60425ad61c551b1349d110596cdff43c9156d5073a4967e121a8cf,
0xb6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef, 0x67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45,
0xe5d8e8f0d9823c88e4d36f7301f41593b6890576be79c211253ef375033eb51f, 0x4dc1e9b7861e3e04abb16a57d8feeef0e509dc46d9f0f54979d5bd965a62a2d9,
0x1f90ea773ac3a6e2dde60d30296681673d12ba6bf2448a8b439cf279319888e9, 0x89be367c15daa10e958153d271eb96a8213751fee59522e656fdfc97ef113b79,
0xa9ca27f77dbc8c3dc56b0f7321bae0ddab66be4fa8a3011737a676480f155e64, 0xf4bb335678fb14d4d197d2246c02d004875d41821bcaf0ae1f3f333c561b3297,
0x13a4e54dedffe0ad6e702bad334b52bade03447991e6f2c6085efb6f3562222c, 0xc9d67d4e5816e813b2cac2f81d609a52d4f9c577adc904c08cb1668ca8200145,
0xd02e1b3cd6c105c7ee74654816cee74ef7793d9b1198875393eab3ddc1bf6c42, 0x9a0b74f3ca8e225812732270d0d24526bca5879b931b6aac1336328f87bc54cc,
0x61991ebf233caadd1d407c05d8455dbd12ed3a63fac92525437e4dc0f43b46bb, 0x1c5e308f3fde492952f387166fbadf11ca8729ca52ecd8ef48f5901cc20a848,
0x68fb71800686d7f25eba105611cfe7591f478e847f51cee06d4bc629d6ee247c, 0xcd12d23462dd963673735427501b0c079a8d580b04c73c9dae1f822d1a01865d,
0xea27aea4b787d38749039cdb0d1626118b9a944f45727d8f7e5be3ddd21add3b, 0xc70ff1e6e42a17de5723ceb2325c2f6278b212d68e4e1be71b5e291db68ce7dd,
0x7137f7b23df260eb987550ab193451161b2b52c2231425df9345abdbe2da1f54, 0x5fe78ad804358074e5cdacb17f2600a7ebf081d546cfdbb84af8d436cdc3edbc,
0x594651356b7ffd54ba9010f8b6e2b6da9b4ce9741c4c226e6e8af8bb611ff757, 0x3611360ce5df2750042038d015c406f9961bbc7b7fbffe3b28a66eca894d031a,
0x8456a852bca1757fea17398139d143483de76414c8f38f1ca1ef47f18f6c15c2, 0xe1b9da46d4842cdefd349ec371079e7f4cc90f09856fb671ff1efc328b174134,
0x16b26e3915f73290e843af7970091ec0ccc53f2470e7ebc0676258a3636160b5, 0x60f565a6302ef8bb6364352463654d4e1363aac70ba3ef814625fbf58a1dc0e,
0x4f15157c98351ce65c02eccf2cfaae4dd36aeea2b0d2e5183d61de938e1b793e, 0xc094e366079db939fc9da9db9cd4a0cec0daff4b354a47aab4fcc1fdc3ba9889,
0x24b5295c4559f931bea143c842cea85c91ed749f647791f3964d28937b32db8, 0x609fef8f5bff309c7b6e2821cc5e5be862ab6811205b81a959454faaaa64f760,
0xd68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8, 0xdb8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120,
0xf16a409c677a40be402f8efb3752373caced053c6f702b828bda222ca412b6fd, 0x2a41311714532799d7a6a75a74e30e4e16540659249ebca4268dae77eca052da,
0x7815f78f22bd728c4c40b83da61f16f44f4efe34cab7e28235b42aa18ca1c4f9, 0xc1c601e8cd39af6a7dd93cf31458c35d5cb42de61577d1e19ab1ea36b778bc15,
0x4154b506ab766f42fbe37f699976f84db89f4f2f6bed98325c1a0b6e326dd4e4, 0x23ad075043c5988894c6e44d61025ff6414ea9d9d1e22dd46c859295075ded1c,
0xc39273cda0ec40176e377c64016a6c6d512df681ef8f4d8e6d26e1c3ee8c8530, 0x8c41be4257433c8e9d01d39441c3199850edfcbda2eed715c4030f0f798446c7,
0x1a46b7e9fe99a4ea492fbc903281b9246831fe599360af53bde4ce8b43ed5996, 0x683ce81ea3f1dc570e3ee084a063ebf5508794a9ef52745c2ee4ed11e8c85cae,
0xda317447f58411b027522431c1d03b25166c6e58c0dbf6a531f240bb237a26c1, 0x753b97b87f5d8c69d2384167c259d8b7d36836c5d7a81525f51836ececf74d6f,
0xb73c652769cc95c1080a8d4d0b5956ea93e86e49fc727ddf4c51a7a63f7f0246, 0x9a67db107174ca9d4b535893c5b6c1ea1a0d72e4c6e554e5597e5164ea2a407b,
0x6a4be6cb02af0e6c1064ac508bff231a239392da66f55603d2b628a93739dc49, 0xf15d8faa2a8907597dc166e360fa8058ab7e2b4cb14a4a4d3e6a2b9df2edd5cf,
0x3659ba7060d8200c9512facb5c7301114cdc2b9baa5bde148ad9bf9dd8f8fb8c, 0x4ee7a9e806e01a17139725f8ec74987f1e142ed4e44bb13575e46b8c7cc8a3d1,
0x1f7c69f13ae7f1344e982603ec98a3c8bc90f8640a86f6798be8a0c46987fac, 0x9d4ecc3f36fda22de5b1036e329ab6f9cb7f5de219f6bc263f91e73819174c68,
0x7733f67fd31772c20d111f5657fdd2b88aa1eec6c0f36aa1f4d359cee2e607b, 0xfd9fe8fbac178285eae63a8c5bb156f489e3bde05be017d26a2f311dcc614763,
0x557e9401761fd381cb7062edd8fa2bcb9c65fb0e203196261d33a1bd76daba4d, 0x7a7e8f3a601fa7e046d35cfa15ccbc86c5e9b8f5fa43590a51374a1bb7a52316,
0xe3e4750a00310c4838920654b6afa03279589d5274e481396e22d9cd3c05fbdd, 0xfa79701abad259005235049961a1204b46587bfc5cfaffbcba2231d1535b883,
0x3adada82199885a93b29d40ea7b101419cc7a32c669636b8038f52ff29f5341a, 0xbfea1e228999369f552e35bf36ab1017e9d6d2e5b45e8fbcb51580936586c6cc,
0x324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d, 0x648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84,
0x32c9331ea26f490228d32681880d7203f72b3e4a8de0db1fa8f38381b2919749, 0xd7cd272b34209cb5695a2f02b6f3dbb8268a4abdae39ab09631e97b0f290b5e3,
0x20840bd5996772ad5b8f60b931df7c49163f74fb9da56ccef5c917582fd53ed3, 0xf2993497cec18243487bd476a6bafac25487c47394e7089987143fe51a7a7132,
0xeb292f3b3b9837854a02f6a70fec6b1c69c161b6e1846b8e1e1c22527b9795e4, 0x8c43c25a96eebe801696634af145835b57131d7509111c6f5b7e9d2fae53a0fe,
0xe6b6bff60eb339bbbd13d029e588ebfd1ab5d88a5c0a121edbd2cbb588a35b35, 0x1a5ff2bd3300d2f3266f43e3835961ddfe3b6c9d3be999c7c57293db9c1007bd,
0x25aac6bd9a6b2640ed2374cb31ff8f63ce566f50fa1fc6ccc48b8e292032f9a2, 0xf5a6c63ba644546c16f32f54f4f190f6559883bbc419f3d9e76230a12b51d4f0,
0xe05317745be499b288b0b8086e0ce3bb47a8a836d850e2090d4ef8d2c0360dd3, 0xdc1c3b71a5d92f39cd809582b5b6a01461b987de98103dc2b2aecd913c24f87b,
0xa65a3a01df3b5ef2e620d4310049fbe14d71457f19d1ed35aea39d5789303fdd, 0x798ea0940cff5c6fb8f43d8d90ed2c7686861d024faed3cadad44a8d02e68703,
0xa8153b3a77886c59e018e5d2a83a5e57fadcb3c92ea678797c146662d098dfea, 0x2a47396461d060fc53d8db9c57853e03b1b5e0f742daf4158a49a9df6e6d892f,
0x6281bb15d9d567c29a27887ff6e9d528c0aef4e6e14e4a9861630d52d24c9489, 0x2fd3c5a0908da865922738f456e9bbf545fd964dd321b3ad9187f26b9df42bc6,
0x4f05c3b30fecaddadeb4695c638eda3b2a0d62da1b16bb020a7e77a48bcecfa5, 0x53a499ea603d426fadd63236159534b9447ee431f01b48cd2ecd024a95d37b53,
0xf82fefbc9f06c6bfb12f11b6c601c8d5df9535f081cf1ec590131cba94445a7a, 0x94bb37bdc6fb6b675503942c1940b4a4b51c83b64640d1e5963ace18642a7a98,
0xd9309ab99f67a91be26405e1aa3b980ed0298635522abcce461e7659084b96aa, 0x6ef99b2a9b4ec557d7e10f066274cb5fd3b6c9fbafcfe978f26c4f37c2b28a86,
0xa285abaa97834203c830f3d322ef502e2637b84d1d56ea66f6fdd42b16b7d2d5, 0xe56e9692cd1b7ac692b952dfe10b2e2ad8657321b6b753e9c405d52f9001f99c,
0x7d587ca138562d35ba9c3446deaa3411d65b6ffde7c4a6facf7b8d059f8fcf0e, 0xa7295c0388304c612723400b6cfd6ad0c463900ad323780a501c1a09d8bc9459,
0x4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96, 0x35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d,
0xed32cad8d2cc998cd25317d4e4b87088e9de4554e57a8d70c0c6b0fc1da49e04, 0x129fef5f1d030204a541ca375859d20b52da9facb49fab7db63120d17c1db9e0,
0xa549a32db27e2caf20e0bd1c09e3b64b21f9bbd6989ba27ef4f225da5def001d, 0x799b7a7906d966cbdf4cc30ed8a59456eb141e2a62c9705add5db1a7f0624783,
0xe821ab724d6360f18049e4111c70366e28c36dcb63c34016cb7418d4e883f855, 0xadefcbf863f53ce367d0d4115416cf598b3b19c614ec23efed4e0c6a59852ddf,
0x7e798f30da07ecd123f08bd983532e6ec954defb3c09ec5a05aef1e5c52ed4cb, 0xd23dccc4a24dac83041a9549def2f057b173571bff9f37a12571660794bb9462,
0xb526ab87f2868002cf4e83f46b5a274f4d8c18948c504731a24778ac4206e37a, 0x641f35d778100d8ed5caaced60a6f18d28ce539b00fa392abf3678fff0c5ccab,
0x224fa20031514783ad5b9e96ba8c81088463f12863dac067fdf3a0fbd3630834, 0xbbe54e32bb3eda5c3c4b70fa391d09f53d62924ec0a50f75cd3c4737c47a2272,
0x3f0d8994e51ad212f455452fbc9693a72f14a547af3806e9fbff59eeb441742e, 0xfbd76c23f28c3dc445e5cb0e847a6e0b1e205e2c3ad13d958c65363bcfecadbe,
0xc2d4a0cc600a39e4129a25cce4228ef2bbbb5e45ac2cf57bb67649d1583c19d7, 0x65ada0f9c0806294d4183b5f7f41260d26804a8317345c9772f28b82c507928d,
0x1693799abb39d3be05072ce10e9484541cc9b100fc9e27bba04541e55d848116, 0xc49c433b9cb2d8c54e6af60f16c60deec03193e5c4d992e483df66c2027198b3,
0x2ec22a7ec305f3190e5585e2744ddc2113cf3ce13af4233084c80ad4bc940c9a, 0x8b1da468de3379684c2e24f5029c7feb12405183d9a35bdacd194fd9851e7a4d,
0x341b538f72aa6a6f2f95f8ecafbd1e9129fc791b1f88ba7d7e93831eb9d9123f, 0x5858124719c1c59eba6f2f041124d9ac72dee6a7052a26ed19ea0aaf18bb9a40,
0xafc669738f9a8cecab1af6525084b8f33e36eb38a08d3133aa70ee5fdd683eeb, 0x2c21976dd22752bc359c7fca239c16570bab5525eddfdc91e29cab30cd4509,
0x4f0eab3ec68eb8de3284afc3a76996706d4ebbdf0f5a7b7fa7d07b1cc7aad77f, 0xb28ea27176ebb7575a08de3062ac2f28adaa078d025ac92ce6c3f11dcce6eea8,
0xd2557b5a9f343309121bc8cf370b282e10e978b5653c5139ea201f87b76f4293, 0xa787b34355e427f012682f06eb4ad21fe34b6838de405a5f1db187a25282740a,
0x9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd, 0xddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d,
0x2e3c05326255d80f0a42fc69d5c92aa40cd326a53e8535f0435efb7b694a09ec, 0x1ff891656c6fb5bddae240b82fc1abe048a53c707b66512534868188c7327e,
0xc114239229bdccb740bbb83fbe53b8d6a7ede4ca39dd538417b98d538fb64db3, 0x1237f6dc5b486fc2a5cecde4fe978bd1a87580904d4567d1e230ce9ffc0259be,
0xe8e2a24ccfa41587ae15fb7e3e24dda433710316a1908934205f19a2ab9c7ce6, 0x46c983ce0c6f5d1b4caf2b2b3bee20596e09e603b5c27a73b2c01eb68836267c,
0x6c5b4bf831a77224082d9c2c192634713a52218c554559ea1eded83403081e46, 0xcb0513714926d42fb2347863ce2be47841d0cf826ac22a62ed1f9cb80bfbcd70,
0xf8058324c6b9c2e7e62147e9a41ad78d60e3ecf417524c0580832addf11349e2, 0x95c60e5a0a8856cdcde81aa60ea11223509498b5626de88d5fac469e5b2025fc,
0xe1e9a856670cade4b5670665cab10a450c30c7d59911c124dcae5aec464dcd4b, 0x562b0a954455c531b7ac43599b2577927f44d19aaca16b292d0b625ebb041f2c,
0xa7549aac5d8573c2b2f0a38b170032a212acaf92383d5b5f5b0d39668ac7b3c2, 0xbd17d1b90d1c2415335a1d70c1947d2b5d6b5115537116dffa0c91719287eaef,
0x51b21a57ad11b099778a74e42edc14208fd9cdd902a64b7d005876fe2badd73c, 0x793010001fd3e5d54a07f01d2c1cfa6c20130f28c734ba6f7d4ae1eb36d8d1,
0xca07cbfbb24ad1a5edd9a12a8ac541576f3f2ba14b878d82ab7dc996bd7e2c95,
0xaedc311032df0edf4a8a2267bc1066c93ac306f33b7e0cbf05e99bac8d50dfa2,
0x9701f3a63b1cb79861ab6296f3f39d61e58873e608cc66ce6d75d0b73b09f34b, 0x3dd44bbb8caf0ed15d7031b5315683377104bc397fdcc794acdc850cc0df5793,
0x2e6db0c9e4817e292fb072b0537a341adce4887d8898392317371d11ae548418, 0x74eb6a411d776fbfa213148978a911644b8e1d73e1c3f5f1e69792c010a2b918,
0xa036b41d2c9e66cc445592e040d63c575270f71e8727783015ce6223bf1e2f46, 0xc3bf91a003e96b3d7df1f6aa479eb08d0680e282cff0b1f4f731e2695effb349,
0xb09dcc04d9c30c352bd638800a766da1f6314287dc201bbf0960551603db2a09, 0x8a7f306481cf240df708d1635aead00e6a951bd4c16ad4e7aed7db3a80b1a093,
0x6a85fadbaa4e8c506f4a611534004652654b58ba0e0ea21dbcd8b9038c4cea08, 0xb64604bae4659d531933c148fe6230b4271a4b43d721b6a19dece59862f4f3,
0x6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5, 0x9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8,
0x6773fd677c52e0640394110a46dc85df7c133f8dd4a28e661899ca5d82fd545c, 0x444eb6d8cd97652f0f0f25c9dd2b246bead780f5a1c6cf98e8c7f034947eb1ae,
0x71eba8fcd6e002603dd11b5fdfc766c5ff6b668a17afdc980d4da162971c032b, 0xd2ff12624b61d39def660516f54cbb7f71931ad1774b4755e7ab5a8e1668359f,
0xe0f86d94d17ce565237c79aace0c87c20374e43810468050373c616b0b86f021, 0xc571c73730abcf47a91e832f1c89a2c9a80bcc0115fc45b3b6b79ccb5bf325a,
0x855ec305b3249d232ca17442baaa9dd0507868f469070574d06e47452a03a61c, 0xdd85d2ec5f01c17f543cbff9b42fb4ed332f74ea17e44965dfc6eaac65dfc07,
0x417fe249d3c3ae287943ebc18c4671ff63efba0bef786cd66df0d9f73aaa138b, 0x23589d7bcd23e38c20a5d29f0fa9e57c19dafdec05566afd1c91b334a1ae869,
0x3ce4486abab3fbf1f150d29a3095bfa20618cca4746a0678b00c0a481f32d706, 0xe775408daae3785288efd046b1094906edd15643cd61e89f40b73637fc7fd9e4,
0x42ca15ab9f245041ce991e193d696f4f4c277df908cad6038ad0772c02da6e03, 0x68d2ef26c81c57c9647ce4d1fcb800eed66e85a68106bea7836889fa8c347793,
0x11ccc5143f4e37faf02e03218f8844eb4a2a33fd9729be686db40cbb791cd3fb, 0x4aa56b2a902b11deb528e244938cc239fa0b1efd2cdd3472a93716ba55160d86,
0x5889573f16d0f7e557275dbbed94871cb15205998b156808108baf0429583a3e, 0x1afa2862c55856fe044f5df8a9a6b4e496fe294cd4cc69cf8f1598cb7e5b124f,
0x250bb17e5149c6f43b97774f82382ddbd41138b98054fac387b9119618f7552, 0x731930fc9bbe8082342d7df75fe9d817da006f3c333d6f1e3f0849623510b14d,
0x2219f160163876443ddbc29bda2112c8b4a77de7321611d97e158b410307e636, 0x4a984ac5cb6a2f61b806d4f1b8230bd6dd7230d3f73af55e07a1b2d71f15109,
0x1a749c88b3467fd3ab4a39ce0a022fbfd94642bbdcb5f47505d13e939f725d12, 0x7e91d19573ec0e2cf458be75c2af3d8f607208698990daa70136514d23ac56e4,
0xa77aa907c92f2674a167f8a6e350782456044660ecde394f5d22d670b6c704c0, 0xb8881ae5bf35cfe4f21e188e5c2bd5a94c921fc474159462af8bc7047edfea48,
0xc750685be0f8218c109d156a5dfb7b328b0a5c42766ec97fd61048e529fae458, 0xead795f8cf921e05fb52f414c672c7b40a5dca50335951a2b01684195757b598,
0xa576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266, 0x40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8,
0x9e5dcc62ef3b5a3b546520867be71bae6f3ba063c9acfb8dcec5725bda704896, 0x6fedd12ddb925f3ea5fd3a2154c7612279605d186030f51248f2769dca82c835,
0x328336dcb74f53e80bfc187705edd0ec24e745bc3d593d6b68aeb58cd9ed6c1, 0x71a8983812fd9f28c46d5943a20d7c8c265bf4df25cb494adec6ebe6f8fafeee,
0xa7de08375b8745adf8d6e9f976f03b20e33625a05cef5833953ed58744bf7ea0, 0xa63d96b057ada5e52104a0b334888e9a645a47c0febc5aa2e04c05539bbcabaa,
0xce4f4eae8b911c54dc63926d70fe1531e38a1037013bceb2919a9a8d3235983a, 0xf3c9f973c390fbbb3eade0249e707543526c65228ebf740aecfd6b190d3cdecf,
0x690cdae3983918b9dbdea2a74631bc1e98c4996efdcdd9f86b75648a66da57e4, 0x840adc79677b79a47a9fd91bf595894df863d8fbce95a3d42b6195b4933f33bb,
0x4dbebfa54b98622278e28fb36df8bcbddb5ff9cf786e4c89a6daab6655b0e6c9, 0x10fee7b03c913aedf45a626e6e2229f3589311b2bc504efae94a78555eb2cc25,
0xc266658e689080c9c13c35ac01cff4cbe68065fde949e4a3a9f8fa104ad916fb, 0xe7e8593854e7daab0f798170b24627ab6b8fecdfeb61138856aef52ba0887814,
0xa42a240bfef45c218b2e118fca1ca12069c8e47f03433f0164e01a11a5857295, 0x3aa0b3f261005d4567a6b22b24dda4c427a1c22cd151939556b377feca7eb9c1,
0xa4b53cc8bf53cd14daded382e8ccc3df150b96879bb9fd1e269bcfd6005c5b40, 0xceef08ce83005b804495ca003dfda587199cca9bf75259e3d1f5ed16d1c61bfd,
0x34e12b2f96fb22267a7f1f86c0c499c1550ae00f6ae468032220ff556fcdc098, 0xa64ac2ddd7b5d322d974cbc8417972db04df5130f19883f664cb1ade6a7474e2,
0xcff62751fb1647b48ae117dd1fd67e833ad09a92c0da35085f9898aa5cfb8036, 0xcdf4ed26bd542d1ac5fe34b5886143c678a589d8f6032825843f3b5a24f59de0,
0x10f4d240d9bb91f29be31a218f4d65683b7e72f4169fb7611cd6eb5e8f173b92, 0x850e2d95091753ad211b25a5a33908ba90bb769d1486adb7c902006d633146c2,
0xdea1fc018a78f3b84317f893623573e3869dff2567749de1ee6660edd04393d7, 0x4f6549cc942e5c50d3bf134ff6d66e03af6def9a2b79ccbdbf97d4ef95710ccd,
0xe846e80b69b677e749f19b976d40cc866a11deb16cacc5caee6fd1d9a8d84958, 0xa29cb8fc894c7e2541dbd9104798b76fad51a33671e0c1a640c4647b7882cf9f,
0x7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71, 0x34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac,
0xe7b9796b5ca006d1632f482d7f0fe3932cf16a5ae104eea7a7ea1c251073e879, 0x12b8988c19169e2fdf42102a737cc1ca9cb5bf25eda98af338e71089baa89d98,
0x3018045d98173fc8d01839022fccacdc18a9f95d761eb2702f7c6eae3319c869, 0xac5fc5782503b7b6f86624320d622e3bca2a84ca4a3d9a7bfc0c76c9d2b856f0,
0x71bf01850876203c2c915a24be09a7365423daaf2aee919865d722bf2628f0f, 0x527aa15d504dcf4ae33600bc1c084ce2098f9c6a231c80bbb57c5cbd45a1c334,
0x322881b61ee57ef343ab67db9a63c885f5830b60712add1b4c66986fa5ed29b5, 0x1677028417a0344eb110b19df41531e1ca83aeab94ee7604ef4f126e7cd15ad2,
0xa0b2b4fed0ddd238812806c0fccdfa97fb3b42a748721ae6477dc9b18953133, 0xcda1182cfb5abf2f03c1c6ca86458c8d6fa384e8b0ed4ba94bc24a3734af0fc9,
0x3f38473ac0fb1b9ffb43dd9b2df3dbcca163011aa6e9c8e63bfa840786c96100, 0x70c69c55f5d403952534c4462f079ce566571c7c0b75f1bcf1e2ac1bf2624707,
0x218343acb9be56833a32e594c03c39e5b1911c8501213786f6376dfa39620e1, 0xbea81d48970a50beaf3f24fd602fbfc0443299a42f43c9ec5e0199f6506998b5,
0x288113c5fd27a76dcb43c0e09785df2f10ddfe126dcaace0234c6ec6fd22d2ac, 0xa1a7eb0158fbc5c8f20777260c976137ddc3d44a1548c8fd081eb55f8f42a268,
0xa2bf9afee6eec1820ef5866ab4bdfe2e9d045323343aa4228c1a13aefee515dd, 0x5a11bc71c55cab7b3a0a5e2abc05ea2800f2e3aa9a8e98745c3a96b006c30212,
0xf963a200c8463a2a553f4d95d7119fe5d17248e3964d2900d4ba80dd245f8ea8, 0x9c8594268c7f83c0a3b722301ff427208bb8f2359d8b60824bc55fb059bc99eb,
0x6f86518d07c3997c3a83945743a9b892d51dcab3f816611e7eaf0ec0df0a2a53, 0xd50af616fd4582f29b776ea95a709968bf54f772eaa05f351139a574733bfeb2,
0xa5d9224cff70d9a7f98d8b2a590e097e40726072f26963ad9e1a88312606a315, 0x87328b003b20da5b343306abd7980de9ed4d0d347d11a7c9d35613359e3b68d1,
0x3bc24bc9cbc58de346644de90b17ffa739a0f7d883eb9f52af19eaf4d8d52891, 0xf08e30a48a783d8a7febed840bfb48f44da845280a4872d1386d1e284d05b79c,
0xf1fe982e1b73c3604eb4e41d00e5e6a496411a830ccc4d469cdb7b5406231493, 0x2e2019eaed9a4ddc216d3c205f7d99d3f173fb346e5ff0d0196a99a6758848c1,
0x928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac, 0xc25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f,
0x4f89bdee3771d350dad163b04cb18ad67ce5e9c55b58f0e7231047a60f59dd9e, 0xca7952d5227a1f695c4baf4c043bb2471e4882506638df5c1016ae320156b049,
0x3e03b81fc0e1e5a8053df0dfb230b6aebe4115b3953d2b41811128757874b839, 0xd13ae163dff07f42c44f660757198f667de5c5f0fdab5b8da0c1ce567c0594ba,
0xcb9e8304cae3c5a80c396baca2c3c4c994b668f079a245bf529c314cfff01197, 0x62c7d2801eb80e6a127258cdff08891741b2d18c015e0a24c334e0763b989c1d,
0xe662c0b7a2f4492cd62fa283aa2922c5f151bd1345b3023f3a3f78e68357a513, 0xab0b193ce612452305dae208a121a419d8035cd625538d89192a201ca017d07e,
0xc2c58a54280df6394778ffe0a22c234b5e83a8c188ea59459bae90d3b9a7d197, 0x72ea3288366e0927573041ab62ed39a60a47ec4545ad82484e41ccbf89eeb5e9,
0x40bf80b1c94cf6cb843862c7cbe3587dc29feca6079c14b04995f7efdf37d242, 0xb579dd35d856aaf04f53fe9b1b26fe1274321eba42bd35583d1d8279a6405088,
0xe2f349b0f89c69bd3c8cf2a410730dc58e0beed47048c58c15f9ffc2508d2cc2, 0x1feb2f280f82723781860aec760215ba42344be8e09cbdb37e347bd8e0d4c04f, 
Pages: « 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [21] 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 ... 96 »
Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!