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#msg54213558Basically you have to split the private key as a sum of precomputed private keys. In these sentences: 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.
|
|
|
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.
|
|
|
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?
|
|
|
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/skangaroo speed on gpu: 68.93 MKey/s / 2^19 = 131 key/sIn 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)
|
|
|
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?
|
|
|
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?
|
|
|
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.
|
|
|
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.
|
|
|
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_Algorithmif (r,s) is a correct signature, (r, N-s) is also a valid signatureBUT 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-signaturesLow 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.mdAllowing 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_Algorithm1) 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_AlgorithmNote1) 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 Nx1 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.
|
|
|
30 days.. 30 pages.. want news? doubling Ygrid gives +25% speed
Can you explain yourself better? What is 'Ygrid' ?
|
|
|
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.
|
|
|
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 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
|
|
|
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/sparsehashMaybe with a Bloom filter you can save more space ...
|
|
|
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.pdfChoosing 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.pdfIf 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.
|
|
|
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.
|
|
|
part 3 of private_to_address.py: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])
|
|
|
part 2 of private_to_address.py: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,
|
|
|
|