Overview
POL Balance
POL Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set LUT3_4 | 26852590 | 1106 days ago | IN | 0 POL | 0.07128428 | ||||
Set LUT3_3 | 26852586 | 1106 days ago | IN | 0 POL | 0.08884345 | ||||
Set LUT3_2 | 26852582 | 1106 days ago | IN | 0 POL | 0.08884472 | ||||
Set LUT3_1 | 26852577 | 1106 days ago | IN | 0 POL | 0.09762293 | ||||
Set LUT2 | 26852573 | 1106 days ago | IN | 0 POL | 0.08884345 | ||||
Set LUT1 | 26852568 | 1106 days ago | IN | 0 POL | 0.08872994 |
Loading...
Loading
Contract Name:
DeciMath
Compiler Version
v0.5.16+commit.9c3226ce
Optimization Enabled:
Yes with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.5.16; contract DeciMath { // Abbreviation: DP stands for 'Decimal Places' uint constant TEN38 = 10**38; uint constant TEN30 = 10**30; uint constant TEN20 = 10**20; uint constant TEN19 = 10**19; uint constant TEN18 = 10**18; uint constant TEN17 = 10**17; uint constant TEN12 = 10**12; uint constant TEN11 = 10**11; uint constant TEN10 = 10**10; uint constant TEN9 = 10**9; uint constant TEN8 = 10**8; uint constant TEN7 = 10**7; // ln(2) - used in ln(x). 30 DP. uint constant LN2 = 693147180559945309417232121458; // 1 / ln(2) - used in exp(x). 30 DP. uint constant ONE_OVER_LN2 = 1442695040888963407359924681002; /***** LOOKUP TABLES *****/ // Lookup table arrays (LUTs) for log_2(x) uint[100] public table_log_2; uint[100] public table2_log_2; // Lookup table for pow2(). Table contains 39 arrays, each array contains 10 uint slots. uint[10][39] public table_pow2; // LUT flags bool LUT1_isSet = false; bool LUT2_isSet = false; bool LUT3_1_isSet = false; bool LUT3_2_isSet = false; bool LUT3_3_isSet = false; bool LUT3_4_isSet = false; /****** BASIC MATH OPERATORS ******/ // Integer math operators. Identical to Zeppelin's SafeMath function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "uint overflow from multiplication"); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, "division by zero"); uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, "uint underflow from subtraction"); uint256 c = a - b; return c; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "uint overflow from multiplication"); return c; } // Basic decimal math operators. Inputs and outputs are uint representations of fixed-point decimals. // 18 Decimal places function decMul18(uint x, uint y) public pure returns (uint decProd) { uint prod_xy = mul(x, y); decProd = add(prod_xy, TEN18 / 2) / TEN18; } function decDiv18(uint x, uint y) public pure returns (uint decQuotient) { uint prod_xTEN18 = mul(x, TEN18); decQuotient = add(prod_xTEN18, y / 2) / y; } // 30 Decimal places function decMul30(uint x, uint y) public pure returns (uint decProd) { uint prod_xy = mul(x, y); decProd = add(prod_xy, TEN30 / 2) / TEN30; } // 38 Decimal places function decMul38(uint x, uint y) public pure returns (uint decProd) { uint prod_xy = mul(x, y); decProd = add(prod_xy, TEN38 / 2) / TEN38; } /****** HELPER FUNCTIONS ******/ function convert38To18DP(uint x) public pure returns (uint y) { uint digit = (x % TEN20) / TEN19; // grab 20th digit from-right return chopAndRound(x, digit, 20); } function convert38To30DP(uint x) public pure returns (uint y) { uint digit = (x % TEN8) / TEN7; // grab 8th digit from-right return chopAndRound(x, digit, 8); } function convert30To20DP(uint x) public pure returns (uint y) { uint digit = (x % TEN10) / TEN9; // grab 10th digit from-right return chopAndRound(x, digit, 10); } function convert30To18DP(uint x) public pure returns (uint y) { uint digit = (x % TEN12) / TEN11; // grab 12th digit from-right return chopAndRound(x, digit, 12); } // Chop the last digits, and round the resulting number function chopAndRound( uint num, uint digit, uint positionOfChop ) public pure returns (uint chopped) { if (digit < 5) { chopped = div(num, 10**positionOfChop); // round down } else if (digit >= 5) { chopped = div(num, 10**positionOfChop) + 1; // round up } return chopped; } // return the floor of a fixed-point 20DP number function floor(uint x) public pure returns (uint num) { num = x - (x % TEN20); return num; } function countDigits(uint num) public view returns (uint) { uint digits = 0; while (num != 0) { num /= 10; // When num < 10, yields 0 due to EVM floor division digits++; } return digits; } /****** MATH FUNCTIONS ******/ // b^x for integer exponent. Use highly performant 'exponentiation-by-squaring' algorithm. O(log(n)) operations. // b^x - integer base, integer exponent function powBySquare(uint x, uint n) public pure returns (uint) { if (n == 0) return 1; uint y = 1; while (n > 1) if (n % 2 == 0) { x = mul(x, x); n = n / 2; } else if (n % 2 != 0) { y = mul(x, y); x = mul(x, x); n = (n - 1) / 2; } return mul(x, y); } // b^x - fixed-point 18 DP base, integer exponent function powBySquare18(uint base, uint n) public pure returns (uint) { if (n == 0) return TEN18; uint y = TEN18; while (n > 1) { if (n % 2 == 0) { base = decMul18(base, base); n = n / 2; } else if (n % 2 != 0) { y = decMul18(base, y); base = decMul18(base, base); n = (n - 1) / 2; } } return decMul18(base, y); } // b^x - fixed-point 38 DP base, integer exponent n function powBySquare38(uint base, uint n) public pure returns (uint) { if (n == 0) return TEN38; uint y = TEN38; while (n > 1) { if (n % 2 == 0) { base = decMul38(base, base); n = n / 2; } else if (n % 2 != 0) { y = decMul38(base, y); base = decMul38(base, base); n = (n - 1) / 2; } } return decMul38(base, y); } /* exp(x) function. Input 18 DP, output 18 DP. Uses identities: A) e^x = 2^(x / ln(2)) and B) 2^y = (2^r) * 2^(y - r); where r = floor(y) - 1, and (y - r) is in range [1,2[ */ function exp(uint x) public view returns (uint num) { uint intExponent; // 20 DP uint decExponent; // 20 DP uint coefficient; // 38 DP x = mul(x, TEN12); // make x 30DP x = decMul30(ONE_OVER_LN2, x); x = convert30To20DP(x); // if x < 1, do: (2^-1) * 2^(1 + x) if (x < TEN20 && x >= 0) { decExponent = add(TEN20, x); coefficient = TEN38 / 2; num = decMul38(coefficient, pow2(decExponent)); } // Use identity B) else { intExponent = floor(x) - TEN20; decExponent = x - intExponent; // decimal exponent in range [1,2[ coefficient = powBySquare(2, div(intExponent, TEN20)); num = mul(coefficient, pow2(decExponent)); // use normal mul to avoid overflow, as coeff. is an int } return convert38To18DP(num); } // Base-2 logarithm function, for x in range [1,2[. For use in ln(x). Input 18 DP, output 30 DP. function log_2(uint x, uint accuracy) public view _onlyLUT1andLUT2AreSet returns (uint) { require(x >= TEN18 && x < 2 * TEN18, "input x must be within range [1,2["); uint prod = mul(x, TEN20); // make x 38 DP uint newProd = TEN38; uint output = 0; for (uint i = 1; i <= accuracy; i++) { newProd = decMul38(table_log_2[i], prod); if (newProd >= TEN38) { prod = newProd; output += table2_log_2[i]; } } return convert38To30DP(output); } // pow2(x) function, for use in exp(x). Uses 2D-array LUT. Valid for x in range [1,2[. Input 20DP, output 38DP function pow2(uint x) public view _onlyLUT3isSet returns (uint) { require(x >= TEN20 && x < 2 * TEN20, "input x must be within range [1,2["); uint x_38dp = x * TEN18; uint prod = 2 * TEN38; uint fractPart = x_38dp % TEN38; uint digitsLength = countDigits(fractPart); // loop backwards through mantissa digits - multiply each by the Lookup-table value for (uint i = 0; i < digitsLength; i++) { uint digit = (fractPart % (10**(i + 1))) / (10**i); // grab the i'th digit from right if (digit == 0) continue; // Save gas - skip the step if digit = 0 and there would be no resultant change to prod // computer i'th term, and new product uint term = table_pow2[37 - i][digit]; prod = decMul38(prod, term); } return prod; } /* Natural log function ln(x). Input 18 DP, output 18 DP. Uses identities: A) ln(x) = log_2(x) * ln(2) and B) log_2(x) = log_2(2^q * y) y in range [1,2[ = q + log_2(y) The algorithm finds q and y by repeated division by powers-of-two. */ function ln(uint x, uint accuracy) public view returns (uint) { require(x >= TEN18, "input must be >= 1"); uint count = 0; // track uint TWO = mul(TEN18, 2); /* Calculate q. Use branches to divide by powers-of-two, until output is in range [1,2[. Branch approach is more performant than simple successive division by 2. As max input of ln(x) is ~= 2^132, starting division at 2^30 yields sufficiently few operations for large x. */ while (x >= 2 * TEN18) { if (x >= 1073741824 * TEN18) { // start at 2^30 x = decDiv18(x, 1073741824 * TEN18); count += 30; } else if (x >= 1048576 * TEN18) { x = decDiv18(x, 1048576 * TEN18); count += 20; } else if (x >= 32768 * TEN18) { x = decDiv18(x, 32768 * TEN18); count += 15; } else if (x >= 1024 * TEN18) { x = decDiv18(x, 1024 * TEN18); count += 10; } else if (x >= 512 * TEN18) { x = decDiv18(x, 512 * TEN18); count += 9; } else if (x >= 256 * TEN18) { x = decDiv18(x, 256 * TEN18); count += 8; } else if (x >= 128 * TEN18) { x = decDiv18(x, 128 * TEN18); count += 7; } else if (x >= 64 * TEN18) { x = decDiv18(x, 64 * TEN18); count += 6; } else if (x >= 32 * TEN18) { x = decDiv18(x, 32 * TEN18); count += 5; } else if (x >= 16 * TEN18) { x = decDiv18(x, 16 * TEN18); count += 4; } else if (x >= 8 * TEN18) { x = decDiv18(x, 8 * TEN18); count += 3; } else if (x >= 4 * TEN18) { x = decDiv18(x, 4 * TEN18); count += 2; } else if (x >= 2 * TEN18) { x = decDiv18(x, 2 * TEN18); count += 1; } } uint q = count * TEN30; uint output = decMul30(LN2, add(q, log_2(x, accuracy))); return convert30To18DP(output); } /* pow(b, x) function for 18 DP base and exponent. Output 18 DP. Uses identity: b^x = exp (x * ln(b)). For b < 1, rewrite b^x as: b^x = exp( x * (-ln(1/b)) ) = 1/exp(x * ln(1/b)). Thus, we avoid passing argument y < 1 to ln(y), and z < 0 to exp(z). */ function pow(uint base, uint x) public view returns (uint power) { if (base >= TEN18) { return exp(decMul18(x, ln(base, 70))); } if (base < TEN18) { uint exponent = decMul18(x, ln(decDiv18(TEN18, base), 70)); return decDiv18(TEN18, exp(exponent)); } } // Taylor series implementation of exp(x) - lower accuracy and higher gas cost than exp(x). 18 DP input and output. function exp_taylor(uint x) public pure returns (uint) { uint tolerance = 1; uint term = TEN18; uint sum = TEN18; uint i = 0; while (term > tolerance) { i += TEN18; term = decDiv18(decMul18(term, x), i); sum += term; } return sum; } /* Lookup Tables (LUTs). 38 DP fixed-point numbers. */ // LUT1 for log_2(x). The i'th term is 1/(2^(1/2^i)) function setLUT1() public { table_log_2[0] = 0; table_log_2[1] = 70710678118654752440084436210484903928; table_log_2[2] = 84089641525371454303112547623321489504; table_log_2[3] = 91700404320467123174354159479414442804; table_log_2[4] = 95760328069857364693630563514791544393; table_log_2[5] = 97857206208770013450916112581343574560; table_log_2[6] = 98922801319397548412912495906558366777; table_log_2[7] = 99459942348363317565247768622216631446; table_log_2[8] = 99729605608547012625765991384792260112; table_log_2[9] = 99864711289097017358812131808592040806; table_log_2[10] = 99932332750265075236028365984373804116; table_log_2[11] = 99966160649624368394219686876281565561; table_log_2[12] = 99983078893192906311748078019767389868; table_log_2[13] = 99991539088661349753372497156418872723; table_log_2[14] = 99995769454843113254396753730099797524; table_log_2[15] = 99997884705049192982650067113039327478; table_log_2[16] = 99998942346931446424221059225315431670; table_log_2[17] = 99999471172067428300770241277030532519; table_log_2[18] = 99999735585684139498225234636504270993; table_log_2[19] = 99999867792754675970531776759801063698; table_log_2[20] = 99999933896355489526178052900624509795; table_log_2[21] = 99999966948172282646511738368820575117; table_log_2[22] = 99999983474084775793885880947314828005; table_log_2[23] = 99999991737042046514572235133214264694; table_log_2[24] = 99999995868520937911689915196095249000; table_log_2[25] = 99999997934260447619445466250978583193; table_log_2[26] = 99999998967130218475622805194415901619; table_log_2[27] = 99999999483565107904286413727651274869; table_log_2[28] = 99999999741782553618761958785587923503; table_log_2[29] = 99999999870891276726035667265628464908; table_log_2[30] = 99999999935445638342181505587572099682; table_log_2[31] = 99999999967722819165881670780794171827; table_log_2[32] = 99999999983861409581638564886938948308; table_log_2[33] = 99999999991930704790493714817578668739; table_log_2[34] = 99999999995965352395165465502313349139; table_log_2[35] = 99999999997982676197562384774537267778; table_log_2[36] = 99999999998991338098776105393113730880; table_log_2[37] = 99999999999495669049386780948018133274; table_log_2[38] = 99999999999747834524693072536874382794; table_log_2[39] = 99999999999873917262346456784153520336; table_log_2[40] = 99999999999936958631173208521005842390; table_log_2[41] = 99999999999968479315586599292735191749; table_log_2[42] = 99999999999984239657793298404425663513; table_log_2[43] = 99999999999992119828896648891727348666; table_log_2[44] = 99999999999996059914448324368242303560; table_log_2[45] = 99999999999998029957224162164715809087; table_log_2[46] = 99999999999999014978612081077506568870; table_log_2[47] = 99999999999999507489306040537540450517; table_log_2[48] = 99999999999999753744653020268467016779; table_log_2[49] = 99999999999999876872326510134157706270; table_log_2[50] = 99999999999999938436163255067059902605; table_log_2[51] = 99999999999999969218081627533525213670; table_log_2[52] = 99999999999999984609040813766761422427; table_log_2[53] = 99999999999999992304520406883380415111; table_log_2[54] = 99999999999999996152260203441690133530; table_log_2[55] = 99999999999999998076130101720845048259; table_log_2[56] = 99999999999999999038065050860422519503; table_log_2[57] = 99999999999999999519032525430211258595; table_log_2[58] = 99999999999999999759516262715105629008; table_log_2[59] = 99999999999999999879758131357552814432; table_log_2[60] = 99999999999999999939879065678776407198; table_log_2[61] = 99999999999999999969939532839388203594; table_log_2[62] = 99999999999999999984969766419694101796; table_log_2[63] = 99999999999999999992484883209847050898; table_log_2[64] = 99999999999999999996242441604923525449; table_log_2[65] = 99999999999999999998121220802461762724; table_log_2[66] = 99999999999999999999060610401230881362; table_log_2[67] = 99999999999999999999530305200615440681; table_log_2[68] = 99999999999999999999765152600307720341; table_log_2[69] = 99999999999999999999882576300153860170; table_log_2[70] = 99999999999999999999941288150076930085; table_log_2[71] = 99999999999999999999970644075038465043; table_log_2[72] = 99999999999999999999985322037519232521; table_log_2[73] = 99999999999999999999992661018759616261; table_log_2[74] = 99999999999999999999996330509379808130; table_log_2[75] = 99999999999999999999998165254689904065; table_log_2[76] = 99999999999999999999999082627344952033; table_log_2[77] = 99999999999999999999999541313672476016; table_log_2[78] = 99999999999999999999999770656836238008; table_log_2[79] = 99999999999999999999999885328418119004; table_log_2[80] = 99999999999999999999999942664209059502; table_log_2[81] = 99999999999999999999999971332104529751; table_log_2[82] = 99999999999999999999999985666052264876; table_log_2[83] = 99999999999999999999999992833026132438; table_log_2[84] = 99999999999999999999999996416513066219; table_log_2[85] = 99999999999999999999999998208256533109; table_log_2[86] = 99999999999999999999999999104128266555; table_log_2[87] = 99999999999999999999999999552064133277; table_log_2[88] = 99999999999999999999999999776032066639; table_log_2[89] = 99999999999999999999999999888016033319; table_log_2[90] = 99999999999999999999999999944008016660; table_log_2[91] = 99999999999999999999999999972004008330; table_log_2[92] = 99999999999999999999999999986002004165; table_log_2[93] = 99999999999999999999999999993001002082; table_log_2[94] = 99999999999999999999999999996500501041; table_log_2[95] = 99999999999999999999999999998250250521; table_log_2[96] = 99999999999999999999999999999125125260; table_log_2[97] = 99999999999999999999999999999562562630; table_log_2[98] = 99999999999999999999999999999781281315; table_log_2[99] = 99999999999999999999999999999890640658; LUT1_isSet = true; } // LUT2 for log_2(x). The i'th term is 1/(2^i) function setLUT2() public { table2_log_2[0] = 200000000000000000000000000000000000000; table2_log_2[1] = 50000000000000000000000000000000000000; table2_log_2[2] = 25000000000000000000000000000000000000; table2_log_2[3] = 12500000000000000000000000000000000000; table2_log_2[4] = 6250000000000000000000000000000000000; table2_log_2[5] = 3125000000000000000000000000000000000; table2_log_2[6] = 1562500000000000000000000000000000000; table2_log_2[7] = 781250000000000000000000000000000000; table2_log_2[8] = 390625000000000000000000000000000000; table2_log_2[9] = 195312500000000000000000000000000000; table2_log_2[10] = 97656250000000000000000000000000000; table2_log_2[11] = 48828125000000000000000000000000000; table2_log_2[12] = 24414062500000000000000000000000000; table2_log_2[13] = 12207031250000000000000000000000000; table2_log_2[14] = 6103515625000000000000000000000000; table2_log_2[15] = 3051757812500000000000000000000000; table2_log_2[16] = 1525878906250000000000000000000000; table2_log_2[17] = 762939453125000000000000000000000; table2_log_2[18] = 381469726562500000000000000000000; table2_log_2[19] = 190734863281250000000000000000000; table2_log_2[20] = 95367431640625000000000000000000; table2_log_2[21] = 47683715820312500000000000000000; table2_log_2[22] = 23841857910156250000000000000000; table2_log_2[23] = 11920928955078125000000000000000; table2_log_2[24] = 5960464477539062500000000000000; table2_log_2[25] = 2980232238769531250000000000000; table2_log_2[26] = 1490116119384765625000000000000; table2_log_2[27] = 745058059692382812500000000000; table2_log_2[28] = 372529029846191406250000000000; table2_log_2[29] = 186264514923095703125000000000; table2_log_2[30] = 93132257461547851562500000000; table2_log_2[31] = 46566128730773925781250000000; table2_log_2[32] = 23283064365386962890625000000; table2_log_2[33] = 11641532182693481445312500000; table2_log_2[34] = 5820766091346740722656250000; table2_log_2[35] = 2910383045673370361328125000; table2_log_2[36] = 1455191522836685180664062500; table2_log_2[37] = 727595761418342590332031250; table2_log_2[38] = 363797880709171295166015625; table2_log_2[39] = 181898940354585647583007812; table2_log_2[40] = 90949470177292823791503906; table2_log_2[41] = 45474735088646411895751953; table2_log_2[42] = 22737367544323205947875976; table2_log_2[43] = 11368683772161602973937988; table2_log_2[44] = 5684341886080801486968994; table2_log_2[45] = 2842170943040400743484497; table2_log_2[46] = 1421085471520200371742248; table2_log_2[47] = 710542735760100185871124; table2_log_2[48] = 355271367880050092935562; table2_log_2[49] = 177635683940025046467781; table2_log_2[50] = 88817841970012523233890; table2_log_2[51] = 44408920985006261616945; table2_log_2[52] = 22204460492503130808472; table2_log_2[53] = 11102230246251565404236; table2_log_2[54] = 5551115123125782702118; table2_log_2[55] = 2775557561562891351059; table2_log_2[56] = 1387778780781445675529; table2_log_2[57] = 693889390390722837764; table2_log_2[58] = 346944695195361418882; table2_log_2[59] = 173472347597680709441; table2_log_2[60] = 86736173798840354720; table2_log_2[61] = 43368086899420177360; table2_log_2[62] = 21684043449710088680; table2_log_2[63] = 10842021724855044340; table2_log_2[64] = 5421010862427522170; table2_log_2[65] = 2710505431213761085; table2_log_2[66] = 1355252715606880542; table2_log_2[67] = 677626357803440271; table2_log_2[68] = 338813178901720135; table2_log_2[69] = 169406589450860067; table2_log_2[70] = 84703294725430033; table2_log_2[71] = 42351647362715016; table2_log_2[72] = 21175823681357508; table2_log_2[73] = 10587911840678754; table2_log_2[74] = 5293955920339377; table2_log_2[75] = 2646977960169688; table2_log_2[76] = 1323488980084844; table2_log_2[77] = 661744490042422; table2_log_2[78] = 330872245021211; table2_log_2[79] = 165436122510605; table2_log_2[80] = 82718061255302; table2_log_2[81] = 41359030627651; table2_log_2[82] = 20679515313825; table2_log_2[83] = 10339757656912; table2_log_2[84] = 5169878828456; table2_log_2[85] = 2584939414228; table2_log_2[86] = 1292469707114; table2_log_2[87] = 646234853557; table2_log_2[88] = 323117426778; table2_log_2[89] = 161558713389; table2_log_2[90] = 80779356694; table2_log_2[91] = 40389678347; table2_log_2[92] = 20194839173; table2_log_2[93] = 10097419586; table2_log_2[94] = 5048709793; table2_log_2[95] = 2524354896; table2_log_2[96] = 1262177448; table2_log_2[97] = 631088724; table2_log_2[98] = 315544362; table2_log_2[99] = 157772181; LUT2_isSet = true; } /* LUT for pow2() function. Table contains 39 arrays, each array contains 10 uint slots. table_pow2[i][d] = (2^(1 / 10^(i + 1))) ** d. d ranges from 0 to 9. LUT-setting is split into four separate setter functions to keep gas costs under block limit. */ function setLUT3_1() public { table_pow2[0][0] = 100000000000000000000000000000000000000; table_pow2[0][1] = 107177346253629316421300632502334202291; table_pow2[0][2] = 114869835499703500679862694677792758944; table_pow2[0][3] = 123114441334491628449939306916774310988; table_pow2[0][4] = 131950791077289425937400197122964013303; table_pow2[0][5] = 141421356237309504880168872420969807857; table_pow2[0][6] = 151571656651039808234725980130644523868; table_pow2[0][7] = 162450479271247104521941876555056330257; table_pow2[0][8] = 174110112659224827827254003495949219796; table_pow2[0][9] = 186606598307361483196268653229988433405; table_pow2[1][0] = 100000000000000000000000000000000000000; table_pow2[1][1] = 100695555005671880883269821411323978545; table_pow2[1][2] = 101395947979002913869016599962823042584; table_pow2[1][3] = 102101212570719324976409517478306437354; table_pow2[1][4] = 102811382665606650934634495879263497655; table_pow2[1][5] = 103526492384137750434778819421124619773; table_pow2[1][6] = 104246576084112139095471141872690784007; table_pow2[1][7] = 104971668362306726904934732174028851665; table_pow2[1][8] = 105701804056138037449949421408611430989; table_pow2[1][9] = 106437018245335988793865835140404338206; table_pow2[2][0] = 100000000000000000000000000000000000000; table_pow2[2][1] = 100069338746258063253756863930385919571; table_pow2[2][2] = 100138725571133452908322477441877746756; table_pow2[2][3] = 100208160507963279436035132489114568295; table_pow2[2][4] = 100277643590107768843673305907248072983; table_pow2[2][5] = 100347174850950278700477431086959080340; table_pow2[2][6] = 100416754323897314177285298995922943429; table_pow2[2][7] = 100486382042378544096788794597976421668; table_pow2[2][8] = 100556058039846816994919680064517944020; table_pow2[2][9] = 100625782349778177193372141519657470417; table_pow2[3][0] = 100000000000000000000000000000000000000; table_pow2[3][1] = 100006931712037656919243991260264256542; table_pow2[3][2] = 100013863904561631568466376833067115945; table_pow2[3][3] = 100020796577605229875592540103010552992; table_pow2[3][4] = 100027729731201760077218879711834041246; table_pow2[3][5] = 100034663365384532718772839985089028270; table_pow2[3][6] = 100041597480186860654672952451661760537; table_pow2[3][7] = 100048532075642059048488888456913382370; table_pow2[3][8] = 100055467151783445373101522870206286485; table_pow2[3][9] = 100062402708644339410863008887585747065; table_pow2[4][0] = 100000000000000000000000000000000000000; table_pow2[4][1] = 100000693149582830565320908980056168150; table_pow2[4][2] = 100001386303970224572423685307245831542; table_pow2[4][3] = 100002079463162215324119782522433627138; table_pow2[4][4] = 100002772627158836123451492465145260129; table_pow2[4][5] = 100003465795960120273691946873622208121; table_pow2[4][6] = 100004158969566101078345118984887516084; table_pow2[4][7] = 100004852147976811841145825134822682163; table_pow2[4][8] = 100005545331192285866059726358255634403; table_pow2[4][9] = 100006238519212556457283329989059798485; table_pow2[5][0] = 100000000000000000000000000000000000000; table_pow2[5][1] = 100000069314742078650777263622740703038; table_pow2[5][2] = 100000138629532202636248826052225815048; table_pow2[5][3] = 100000207944370371989717187112633071811; table_pow2[5][4] = 100000277259256586744484869711682067979; table_pow2[5][5] = 100000346574190846933854419840650257373; table_pow2[5][6] = 100000415889173152591128406574388953292; table_pow2[5][7] = 100000485204203503749609422071339328833; table_pow2[5][8] = 100000554519281900442600081573548417222; table_pow2[5][9] = 100000623834408342703403023406685112154; table_pow2[6][0] = 100000000000000000000000000000000000000; table_pow2[6][1] = 100000006931472045825965603683996211583; table_pow2[6][2] = 100000013862944572104978428035962521332; table_pow2[6][3] = 100000020794417578837071775524560348874; table_pow2[6][4] = 100000027725891066022278948620759465140; table_pow2[6][5] = 100000034657365033660633249797837992529; table_pow2[6][6] = 100000041588839481752167981531382405066; table_pow2[6][7] = 100000048520314410296916446299287528561; table_pow2[6][8] = 100000055451789819294911946581756540768; table_pow2[6][9] = 100000062383265708746187784861300971552; table_pow2[7][0] = 100000000000000000000000000000000000000; table_pow2[7][1] = 100000000693147182962210384558650120894; table_pow2[7][2] = 100000001386294370728950941601779822006; table_pow2[7][3] = 100000002079441563300221704431854648481; table_pow2[7][4] = 100000002772588760676022706351340376300; table_pow2[7][5] = 100000003465735962856353980662703012279; table_pow2[7][6] = 100000004158883169841215560668408794069; table_pow2[7][7] = 100000004852030381630607479670924190156; table_pow2[7][8] = 100000005545177598224529770972715899860; table_pow2[7][9] = 100000006238324819622982467876250853339; table_pow2[8][0] = 100000000000000000000000000000000000000; table_pow2[8][1] = 100000000069314718080017181643183694247; table_pow2[8][2] = 100000000138629436208079664711489996172; table_pow2[8][3] = 100000000207944154384187449238221371011; table_pow2[8][4] = 100000000277258872608340535256680284018; table_pow2[8][5] = 100000000346573590880538922800169200474; table_pow2[8][6] = 100000000415888309200782611901990585682; table_pow2[8][7] = 100000000485203027569071602595446904968; table_pow2[8][8] = 100000000554517745985405894913840623680; table_pow2[8][9] = 100000000623832464449785488890474207190; table_pow2[9][0] = 100000000000000000000000000000000000000; table_pow2[9][1] = 100000000006931471805839679601136972338; table_pow2[9][2] = 100000000013862943612159812216225448565; table_pow2[9][3] = 100000000020794415418960397845298731148; table_pow2[9][4] = 100000000027725887226241436488390122551; table_pow2[9][5] = 100000000034657359034002928145532925240; table_pow2[9][6] = 100000000041588830842244872816760441679; table_pow2[9][7] = 100000000048520302650967270502105974334; table_pow2[9][8] = 100000000055451774460170121201602825670; table_pow2[9][9] = 100000000062383246269853424915284298153; table_pow2[10][0] = 100000000000000000000000000000000000000; table_pow2[10][1] = 100000000000693147180562347574486828679; table_pow2[10][2] = 100000000001386294361129499679112872675; table_pow2[10][3] = 100000000002079441541701456313878165290; table_pow2[10][4] = 100000000002772588722278217478782739826; table_pow2[10][5] = 100000000003465735902859783173826629587; table_pow2[10][6] = 100000000004158883083446153399009867874; table_pow2[10][7] = 100000000004852030264037328154332487990; table_pow2[10][8] = 100000000005545177444633307439794523238; table_pow2[10][9] = 100000000006238324625234091255396006920; LUT3_1_isSet = true; } function setLUT3_2() public { table_pow2[11][0] = 100000000000000000000000000000000000000; table_pow2[11][1] = 100000000000069314718056018553592419128; table_pow2[11][2] = 100000000000138629436112085152486230109; table_pow2[11][3] = 100000000000207944154168199796681432977; table_pow2[11][4] = 100000000000277258872224362486178027765; table_pow2[11][5] = 100000000000346573590280573220976014506; table_pow2[11][6] = 100000000000415888308336832001075393234; table_pow2[11][7] = 100000000000485203026393138826476163982; table_pow2[11][8] = 100000000000554517744449493697178326784; table_pow2[11][9] = 100000000000623832462505896613181881671; table_pow2[12][0] = 100000000000000000000000000000000000000; table_pow2[12][1] = 100000000000006931471805599693320679280; table_pow2[12][2] = 100000000000013862943611199867094372479; table_pow2[12][3] = 100000000000020794415416800521321079596; table_pow2[12][4] = 100000000000027725887222401656000800631; table_pow2[12][5] = 100000000000034657359028003271133535584; table_pow2[12][6] = 100000000000041588830833605366719284456; table_pow2[12][7] = 100000000000048520302639207942758047246; table_pow2[12][8] = 100000000000055451774444810999249823955; table_pow2[12][9] = 100000000000062383246250414536194614582; table_pow2[13][0] = 100000000000000000000000000000000000000; table_pow2[13][1] = 100000000000000693147180559947711682302; table_pow2[13][2] = 100000000000001386294361119900227894743; table_pow2[13][3] = 100000000000002079441541679857548637323; table_pow2[13][4] = 100000000000002772588722239819673910042; table_pow2[13][5] = 100000000000003465735902799786603712900; table_pow2[13][6] = 100000000000004158883083359758338045898; table_pow2[13][7] = 100000000000004852030263919734876909035; table_pow2[13][8] = 100000000000005545177444479716220302311; table_pow2[13][9] = 100000000000006238324625039702368225726; table_pow2[14][0] = 100000000000000000000000000000000000000; table_pow2[14][1] = 100000000000000069314718055994554964374; table_pow2[14][2] = 100000000000000138629436111989157974049; table_pow2[14][3] = 100000000000000207944154167983809029026; table_pow2[14][4] = 100000000000000277258872223978508129304; table_pow2[14][5] = 100000000000000346573590279973255274883; table_pow2[14][6] = 100000000000000415888308335968050465764; table_pow2[14][7] = 100000000000000485203026391962893701947; table_pow2[14][8] = 100000000000000554517744447957784983430; table_pow2[14][9] = 100000000000000623832462503952724310215; table_pow2[15][0] = 100000000000000000000000000000000000000; table_pow2[15][1] = 100000000000000006931471805599453334399; table_pow2[15][2] = 100000000000000013862943611198907149251; table_pow2[15][3] = 100000000000000020794415416798361444556; table_pow2[15][4] = 100000000000000027725887222397816220313; table_pow2[15][5] = 100000000000000034657359027997271476524; table_pow2[15][6] = 100000000000000041588830833596727213188; table_pow2[15][7] = 100000000000000048520302639196183430305; table_pow2[15][8] = 100000000000000055451774444795640127875; table_pow2[15][9] = 100000000000000062383246250395097305898; table_pow2[16][0] = 100000000000000000000000000000000000000; table_pow2[16][1] = 100000000000000000693147180559945311819; table_pow2[16][2] = 100000000000000001386294361119890628444; table_pow2[16][3] = 100000000000000002079441541679835949872; table_pow2[16][4] = 100000000000000002772588722239781276105; table_pow2[16][5] = 100000000000000003465735902799726607143; table_pow2[16][6] = 100000000000000004158883083359671942985; table_pow2[16][7] = 100000000000000004852030263919617283632; table_pow2[16][8] = 100000000000000005545177444479562629083; table_pow2[16][9] = 100000000000000006238324625039507979339; table_pow2[17][0] = 100000000000000000000000000000000000000; table_pow2[17][1] = 100000000000000000069314718055994530966; table_pow2[17][2] = 100000000000000000138629436111989061980; table_pow2[17][3] = 100000000000000000207944154167983593041; table_pow2[17][4] = 100000000000000000277258872223978124151; table_pow2[17][5] = 100000000000000000346573590279972655309; table_pow2[17][6] = 100000000000000000415888308335967186515; table_pow2[17][7] = 100000000000000000485203026391961717769; table_pow2[17][8] = 100000000000000000554517744447956249071; table_pow2[17][9] = 100000000000000000623832462503950780421; table_pow2[18][0] = 100000000000000000000000000000000000000; table_pow2[18][1] = 100000000000000000006931471805599453094; table_pow2[18][2] = 100000000000000000013862943611198906189; table_pow2[18][3] = 100000000000000000020794415416798359285; table_pow2[18][4] = 100000000000000000027725887222397812381; table_pow2[18][5] = 100000000000000000034657359027997265477; table_pow2[18][6] = 100000000000000000041588830833596718574; table_pow2[18][7] = 100000000000000000048520302639196171671; table_pow2[18][8] = 100000000000000000055451774444795624769; table_pow2[18][9] = 100000000000000000062383246250395077867; table_pow2[19][0] = 100000000000000000000000000000000000000; table_pow2[19][1] = 100000000000000000000693147180559945309; table_pow2[19][2] = 100000000000000000001386294361119890619; table_pow2[19][3] = 100000000000000000002079441541679835928; table_pow2[19][4] = 100000000000000000002772588722239781238; table_pow2[19][5] = 100000000000000000003465735902799726547; table_pow2[19][6] = 100000000000000000004158883083359671857; table_pow2[19][7] = 100000000000000000004852030263919617166; table_pow2[19][8] = 100000000000000000005545177444479562475; table_pow2[19][9] = 100000000000000000006238324625039507785; table_pow2[20][0] = 100000000000000000000000000000000000000; table_pow2[20][1] = 100000000000000000000069314718055994531; table_pow2[20][2] = 100000000000000000000138629436111989062; table_pow2[20][3] = 100000000000000000000207944154167983593; table_pow2[20][4] = 100000000000000000000277258872223978124; table_pow2[20][5] = 100000000000000000000346573590279972655; table_pow2[20][6] = 100000000000000000000415888308335967186; table_pow2[20][7] = 100000000000000000000485203026391961717; table_pow2[20][8] = 100000000000000000000554517744447956248; table_pow2[20][9] = 100000000000000000000623832462503950778; LUT3_2_isSet = true; } function setLUT3_3() public { table_pow2[21][0] = 100000000000000000000000000000000000000; table_pow2[21][1] = 100000000000000000000006931471805599453; table_pow2[21][2] = 100000000000000000000013862943611198906; table_pow2[21][3] = 100000000000000000000020794415416798359; table_pow2[21][4] = 100000000000000000000027725887222397812; table_pow2[21][5] = 100000000000000000000034657359027997265; table_pow2[21][6] = 100000000000000000000041588830833596719; table_pow2[21][7] = 100000000000000000000048520302639196172; table_pow2[21][8] = 100000000000000000000055451774444795625; table_pow2[21][9] = 100000000000000000000062383246250395078; table_pow2[22][0] = 100000000000000000000000000000000000000; table_pow2[22][1] = 100000000000000000000000693147180559945; table_pow2[22][2] = 100000000000000000000001386294361119891; table_pow2[22][3] = 100000000000000000000002079441541679836; table_pow2[22][4] = 100000000000000000000002772588722239781; table_pow2[22][5] = 100000000000000000000003465735902799727; table_pow2[22][6] = 100000000000000000000004158883083359672; table_pow2[22][7] = 100000000000000000000004852030263919617; table_pow2[22][8] = 100000000000000000000005545177444479562; table_pow2[22][9] = 100000000000000000000006238324625039508; table_pow2[23][0] = 100000000000000000000000000000000000000; table_pow2[23][1] = 100000000000000000000000069314718055995; table_pow2[23][2] = 100000000000000000000000138629436111989; table_pow2[23][3] = 100000000000000000000000207944154167984; table_pow2[23][4] = 100000000000000000000000277258872223978; table_pow2[23][5] = 100000000000000000000000346573590279973; table_pow2[23][6] = 100000000000000000000000415888308335967; table_pow2[23][7] = 100000000000000000000000485203026391962; table_pow2[23][8] = 100000000000000000000000554517744447956; table_pow2[23][9] = 100000000000000000000000623832462503951; table_pow2[24][0] = 100000000000000000000000000000000000000; table_pow2[24][1] = 100000000000000000000000006931471805599; table_pow2[24][2] = 100000000000000000000000013862943611199; table_pow2[24][3] = 100000000000000000000000020794415416798; table_pow2[24][4] = 100000000000000000000000027725887222398; table_pow2[24][5] = 100000000000000000000000034657359027997; table_pow2[24][6] = 100000000000000000000000041588830833597; table_pow2[24][7] = 100000000000000000000000048520302639196; table_pow2[24][8] = 100000000000000000000000055451774444796; table_pow2[24][9] = 100000000000000000000000062383246250395; table_pow2[25][0] = 100000000000000000000000000000000000000; table_pow2[25][1] = 100000000000000000000000000693147180560; table_pow2[25][2] = 100000000000000000000000001386294361120; table_pow2[25][3] = 100000000000000000000000002079441541680; table_pow2[25][4] = 100000000000000000000000002772588722240; table_pow2[25][5] = 100000000000000000000000003465735902800; table_pow2[25][6] = 100000000000000000000000004158883083360; table_pow2[25][7] = 100000000000000000000000004852030263920; table_pow2[25][8] = 100000000000000000000000005545177444480; table_pow2[25][9] = 100000000000000000000000006238324625040; table_pow2[26][0] = 100000000000000000000000000000000000000; table_pow2[26][1] = 100000000000000000000000000069314718056; table_pow2[26][2] = 100000000000000000000000000138629436112; table_pow2[26][3] = 100000000000000000000000000207944154168; table_pow2[26][4] = 100000000000000000000000000277258872224; table_pow2[26][5] = 100000000000000000000000000346573590280; table_pow2[26][6] = 100000000000000000000000000415888308336; table_pow2[26][7] = 100000000000000000000000000485203026392; table_pow2[26][8] = 100000000000000000000000000554517744448; table_pow2[26][9] = 100000000000000000000000000623832462504; table_pow2[27][0] = 100000000000000000000000000000000000000; table_pow2[27][1] = 100000000000000000000000000006931471806; table_pow2[27][2] = 100000000000000000000000000013862943611; table_pow2[27][3] = 100000000000000000000000000020794415417; table_pow2[27][4] = 100000000000000000000000000027725887222; table_pow2[27][5] = 100000000000000000000000000034657359028; table_pow2[27][6] = 100000000000000000000000000041588830834; table_pow2[27][7] = 100000000000000000000000000048520302639; table_pow2[27][8] = 100000000000000000000000000055451774445; table_pow2[27][9] = 100000000000000000000000000062383246250; table_pow2[28][0] = 100000000000000000000000000000000000000; table_pow2[28][1] = 100000000000000000000000000000693147181; table_pow2[28][2] = 100000000000000000000000000001386294361; table_pow2[28][3] = 100000000000000000000000000002079441542; table_pow2[28][4] = 100000000000000000000000000002772588722; table_pow2[28][5] = 100000000000000000000000000003465735903; table_pow2[28][6] = 100000000000000000000000000004158883083; table_pow2[28][7] = 100000000000000000000000000004852030264; table_pow2[28][8] = 100000000000000000000000000005545177444; table_pow2[28][9] = 100000000000000000000000000006238324625; table_pow2[29][0] = 100000000000000000000000000000000000000; table_pow2[29][1] = 100000000000000000000000000000069314718; table_pow2[29][2] = 100000000000000000000000000000138629436; table_pow2[29][3] = 100000000000000000000000000000207944154; table_pow2[29][4] = 100000000000000000000000000000277258872; table_pow2[29][5] = 100000000000000000000000000000346573590; table_pow2[29][6] = 100000000000000000000000000000415888308; table_pow2[29][7] = 100000000000000000000000000000485203026; table_pow2[29][8] = 100000000000000000000000000000554517744; table_pow2[29][9] = 100000000000000000000000000000623832463; table_pow2[30][0] = 100000000000000000000000000000000000000; table_pow2[30][1] = 100000000000000000000000000000006931472; table_pow2[30][2] = 100000000000000000000000000000013862944; table_pow2[30][3] = 100000000000000000000000000000020794415; table_pow2[30][4] = 100000000000000000000000000000027725887; table_pow2[30][5] = 100000000000000000000000000000034657359; table_pow2[30][6] = 100000000000000000000000000000041588831; table_pow2[30][7] = 100000000000000000000000000000048520303; table_pow2[30][8] = 100000000000000000000000000000055451774; table_pow2[30][9] = 100000000000000000000000000000062383246; LUT3_3_isSet = true; } function setLUT3_4() public { table_pow2[31][0] = 100000000000000000000000000000000000000; table_pow2[31][1] = 100000000000000000000000000000000693147; table_pow2[31][2] = 100000000000000000000000000000001386294; table_pow2[31][3] = 100000000000000000000000000000002079442; table_pow2[31][4] = 100000000000000000000000000000002772589; table_pow2[31][5] = 100000000000000000000000000000003465736; table_pow2[31][6] = 100000000000000000000000000000004158883; table_pow2[31][7] = 100000000000000000000000000000004852030; table_pow2[31][8] = 100000000000000000000000000000005545177; table_pow2[31][9] = 100000000000000000000000000000006238325; table_pow2[32][0] = 100000000000000000000000000000000000000; table_pow2[32][1] = 100000000000000000000000000000000069315; table_pow2[32][2] = 100000000000000000000000000000000138629; table_pow2[32][3] = 100000000000000000000000000000000207944; table_pow2[32][4] = 100000000000000000000000000000000277259; table_pow2[32][5] = 100000000000000000000000000000000346574; table_pow2[32][6] = 100000000000000000000000000000000415888; table_pow2[32][7] = 100000000000000000000000000000000485203; table_pow2[32][8] = 100000000000000000000000000000000554518; table_pow2[32][9] = 100000000000000000000000000000000623832; table_pow2[33][0] = 100000000000000000000000000000000000000; table_pow2[33][1] = 100000000000000000000000000000000006931; table_pow2[33][2] = 100000000000000000000000000000000013863; table_pow2[33][3] = 100000000000000000000000000000000020794; table_pow2[33][4] = 100000000000000000000000000000000027726; table_pow2[33][5] = 100000000000000000000000000000000034657; table_pow2[33][6] = 100000000000000000000000000000000041589; table_pow2[33][7] = 100000000000000000000000000000000048520; table_pow2[33][8] = 100000000000000000000000000000000055452; table_pow2[33][9] = 100000000000000000000000000000000062383; table_pow2[34][0] = 100000000000000000000000000000000000000; table_pow2[34][1] = 100000000000000000000000000000000000693; table_pow2[34][2] = 100000000000000000000000000000000001386; table_pow2[34][3] = 100000000000000000000000000000000002079; table_pow2[34][4] = 100000000000000000000000000000000002773; table_pow2[34][5] = 100000000000000000000000000000000003466; table_pow2[34][6] = 100000000000000000000000000000000004159; table_pow2[34][7] = 100000000000000000000000000000000004852; table_pow2[34][8] = 100000000000000000000000000000000005545; table_pow2[34][9] = 100000000000000000000000000000000006238; table_pow2[35][0] = 100000000000000000000000000000000000000; table_pow2[35][1] = 100000000000000000000000000000000000069; table_pow2[35][2] = 100000000000000000000000000000000000139; table_pow2[35][3] = 100000000000000000000000000000000000208; table_pow2[35][4] = 100000000000000000000000000000000000277; table_pow2[35][5] = 100000000000000000000000000000000000347; table_pow2[35][6] = 100000000000000000000000000000000000416; table_pow2[35][7] = 100000000000000000000000000000000000485; table_pow2[35][8] = 100000000000000000000000000000000000555; table_pow2[35][9] = 100000000000000000000000000000000000624; table_pow2[36][0] = 100000000000000000000000000000000000000; table_pow2[36][1] = 100000000000000000000000000000000000007; table_pow2[36][2] = 100000000000000000000000000000000000014; table_pow2[36][3] = 100000000000000000000000000000000000021; table_pow2[36][4] = 100000000000000000000000000000000000028; table_pow2[36][5] = 100000000000000000000000000000000000035; table_pow2[36][6] = 100000000000000000000000000000000000042; table_pow2[36][7] = 100000000000000000000000000000000000049; table_pow2[36][8] = 100000000000000000000000000000000000055; table_pow2[36][9] = 100000000000000000000000000000000000062; table_pow2[37][0] = 100000000000000000000000000000000000000; table_pow2[37][1] = 100000000000000000000000000000000000001; table_pow2[37][2] = 100000000000000000000000000000000000001; table_pow2[37][3] = 100000000000000000000000000000000000002; table_pow2[37][4] = 100000000000000000000000000000000000003; table_pow2[37][5] = 100000000000000000000000000000000000003; table_pow2[37][6] = 100000000000000000000000000000000000004; table_pow2[37][7] = 100000000000000000000000000000000000005; table_pow2[37][8] = 100000000000000000000000000000000000006; table_pow2[37][9] = 100000000000000000000000000000000000006; table_pow2[38][0] = 100000000000000000000000000000000000000; table_pow2[38][1] = 100000000000000000000000000000000000000; table_pow2[38][2] = 100000000000000000000000000000000000000; table_pow2[38][3] = 100000000000000000000000000000000000000; table_pow2[38][4] = 100000000000000000000000000000000000000; table_pow2[38][5] = 100000000000000000000000000000000000000; table_pow2[38][6] = 100000000000000000000000000000000000000; table_pow2[38][7] = 100000000000000000000000000000000000000; table_pow2[38][8] = 100000000000000000000000000000000000001; table_pow2[38][9] = 100000000000000000000000000000000000001; LUT3_4_isSet = true; } /***** MODIFIERS *****/ modifier _onlyLUT1andLUT2AreSet() { require(LUT1_isSet == true && LUT2_isSet == true, "Lookup tables 1 & 2 must first be set"); _; } modifier _onlyLUT3isSet() { require( LUT3_1_isSet == true && LUT3_2_isSet == true && LUT3_3_isSet == true && LUT3_4_isSet == true, "Lookup table 3 must first be set" ); _; } }
{ "optimizer": { "enabled": true, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"constant":true,"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"digit","type":"uint256"},{"internalType":"uint256","name":"positionOfChop","type":"uint256"}],"name":"chopAndRound","outputs":[{"internalType":"uint256","name":"chopped","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"convert30To18DP","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"convert30To20DP","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"convert38To18DP","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"convert38To30DP","outputs":[{"internalType":"uint256","name":"y","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"name":"countDigits","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"decDiv18","outputs":[{"internalType":"uint256","name":"decQuotient","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"decMul18","outputs":[{"internalType":"uint256","name":"decProd","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"decMul30","outputs":[{"internalType":"uint256","name":"decProd","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"y","type":"uint256"}],"name":"decMul38","outputs":[{"internalType":"uint256","name":"decProd","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"exp","outputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"exp_taylor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"floor","outputs":[{"internalType":"uint256","name":"num","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"ln","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"log_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint256","name":"x","type":"uint256"}],"name":"pow","outputs":[{"internalType":"uint256","name":"power","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"pow2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"x","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"powBySquare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"powBySquare18","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"base","type":"uint256"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"powBySquare38","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":false,"inputs":[],"name":"setLUT1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT3_1","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT3_2","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT3_3","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"setLUT3_4","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"table2_log_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"table_log_2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"table_pow2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405261024e805465ffffffffffff1916905534801561002057600080fd5b50613ce9806100306000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c806364ce07d811610104578063b2f21109116100a2578063e5ac571711610071578063e5ac5717146104ab578063e92fab3b146104b3578063f7523c52146104d6578063fed6bde0146104f9576101cf565b8063b2f2110914610425578063b581fbe314610448578063d3f87aae14610465578063dc1a1e091461048e576101cf565b80638e962c70116100de5780638e962c70146103c05780639636c762146103dd578063a2693515146103fa578063a463a0871461041d576101cf565b806364ce07d81461036357806378b09c47146103865780638d5dab35146103a3576101cf565b8063422b0d8d11610171578063504f5e561161014b578063504f5e56146102e357806358be7a8914610300578063595a8d07146103235780636172f46714610340576101cf565b8063422b0d8d14610280578063442b7ffb146102a357806344f7787f146102c0576101cf565b806326a4c99f116101ad57806326a4c99f1461022a5780632e4c697f14610232578063344d00951461025557806334eceac01461025d576101cf565b80631ea97975146101d457806322aa59fc14610203578063244334261461020d575b600080fd5b6101f1600480360360208110156101ea57600080fd5b5035610501565b60408051918252519081900360200190f35b61020b61054a565b005b6101f16004803603602081101561022357600080fd5b5035610d95565b61020b610dc0565b6101f16004803603604081101561024857600080fd5b508035906020013561134f565b61020b6113db565b6101f16004803603604081101561027357600080fd5b5080359060200135611b9f565b6101f16004803603604081101561029657600080fd5b5080359060200135611c22565b6101f1600480360360208110156102b957600080fd5b5035611c97565b6101f1600480360360408110156102d657600080fd5b5080359060200135611e65565b6101f1600480360360208110156102f957600080fd5b50356121a5565b6101f16004803603604081101561031657600080fd5b50803590602001356121b6565b6101f16004803603602081101561033957600080fd5b50356121f1565b6101f16004803603604081101561035657600080fd5b5080359060200135612205565b6101f16004803603604081101561037957600080fd5b5080359060200135612230565b6101f16004803603602081101561039c57600080fd5b5035612254565b6101f1600480360360208110156103b957600080fd5b503561226e565b6101f1600480360360208110156103d657600080fd5b503561228a565b6101f1600480360360208110156103f357600080fd5b50356122a7565b6101f16004803603604081101561041057600080fd5b50803590602001356122bf565b61020b612350565b6101f16004803603604081101561043b57600080fd5b50803590602001356128e6565b6101f16004803603602081101561045e57600080fd5b503561290b565b6101f16004803603606081101561047b57600080fd5b5080359060208101359060400135612a03565b6101f1600480360360208110156104a457600080fd5b5035612a42565b61020b612a4f565b6101f1600480360360408110156104c957600080fd5b5080359060200135613221565b6101f1600480360360408110156104ec57600080fd5b5080359060200135613375565b61020b613399565b60006001670de0b6b3a764000080835b8383111561054157670de0b6b3a7640000016105366105308488613375565b82612230565b925090820190610511565b50949350505050565b6b012ced32a16a1b11e826288960261b60c88190556f50a19b26283d0b34e82c419e778521b360c9556f566b2026a35e43fb189e7d9afd311ca060ca556f5c9efa9a30c4933df96ffc0f774a744c60cb556f6344cc47e6d8d888a38d43e4480b40f760cc556f6a64c33195499e0731ba5be94803fff160cd556f7207a3a4586c4cc4064088ea4276fb5c60ce556f7a36d3021aa31ad13619f68058eab61160cf556f82fc635149ae40556949b9c77aaeb7d460d0556f8c631fa0f9b00c8830bcc92f66a8cdfd60d15560d28190556f4bc1422ac6aec230a72fd844c9aea33160d3556f4c482634ef728f0d43fd3e29706e261860d4556f4ccffa6f902e802e1ef5c9a8be84d8ea60d5556f4d58c08658883da39409ffd3360b2db760d6556f4de27a27f1b16b3aea7b151d4596edfd60d7556f4e6d290603b3af2ce3f021430787e70760d8556f4ef8ced53ac6275dc7b0d659adfe49d160d9556f4f856d4d4cac5dfa583fd57df7f3724d60da556f50130628fe1ece5b09368f0bf71dde1e60db5560dc8190556f4b48a7525f322bd41641432d1b296e5360dd556f4b56045b3a41b4a74901ff728163244460de556f4b6363c3576d2eaf8e9404badf6fc66760df556f4b70c58b227f889075c56e7d93fd891760e0556f4b7e29b30756d33a10e6f73c041cb39460e1556f4b8b903b71e4454e7183b4c100273dc560e2556f4b98f924ce2c3e87be6fbfff18a1b52460e3556f4ba6646f88464b1ee4492e06d6e1b2d460e4556f4bb3d21c0c5d2732e086c46abe5f89d160e55560e68190556f4b3ca26adc181e23c3f7c5dad355d41e60e7556f4b3df8336e326f421d274ed62dafe5a960e8556f4b3f4e0210f144a30d966466400a0ca060e9556f4b40a3d6c4702b91b501c642957c6b9e60ea556f4b41f9b188cab1d65c9dd779526b20ae60eb556f4b434f925e1c65b6794f335934ff081960ec556f4b44a5794480d5f4ade34c7284bc6be260ed556f4b45fb663c1391d0cd4915af1f0d4a9560ee556f4b47515944f02907dcc9b581ce95b07960ef5560f08190556f4b3b6ed5219f48be09db701ae9ef16d660f1556f4b3b9101f83e0ae41c67ff10bc60a57660f2556f4b3bb32ede6311f99a899a44d8e4e40260f3556f4b3bd55bd40e650be0ce2710494ba86160f4556f4b3bf788d9400b284ef7a6764a559e7960f5556f4b3c19b5edf80b5c47fc3698d70ebbb460f6556f4b3c3be312366cb53206142d34d1ee3360f7556f4b3c5e1045fb364076739bf07ff607e360f8556f4b3c803d89466f0b81d74c1c3923e5d560f95560fa8190556f4b3b50133a89943d50fdc16ee0f2f73e60fb556f4b3b537e1ab421ff687c5c6e8878520860fc556f4b3b56e8fb066dc21e3032644f2f78c360fd556f4b3b5a53db807787404397741c07de0b60fe556f4b3b5dbebc223f509ce0f4c0653523dd60ff556f4b3b61299cebc5200232c86a312340cc610100556f4b3b64947ddd08f73e63a591176aa541610101556f4b3b67ff5ef60ad81f9e345341c460c6610102556f4b3b6b6a4036cac4740d31cd6cfe475a610103556101048190556f4b3b4cffd7520f6c63dac18be5cb197f610105556f4b3b4d57541dc01c279c42b2eff446f4610106556f4b3b4daed0e9d6895544f6205530a6ca610107556f4b3b4e064db652b3ed4b2c3fd5cbfcb4610108556f4b3b4e5dca83349bf025357dbba8b251610109556f4b3b4eb547507c415e496246da3fd7ca61010a556f4b3b4f0cc41e29a4382e03088ea1247161010b556f4b3b4f6440ec3cc47e496830bf72f76061010c556f4b3b4fbbbdbab5a23111e22ddcf2582061010d5561010e8190556f4b3b4cb11a34adcb07707cfefb195abe61010f556f4b3b4cb9d9e298207996e81ff5da2db6610110556f4b3b4cc29990837a5ffd81ecc5e37ca1610111556f4b3b4ccb593e6fd8baa468af40d9d0ec610112556f4b3b4cd418ec5d3b898bbab13c6539b7610113556f4b3b4cdcd89a4ba2ccb3963c8e314bd5610114556f4b3b4ce598483b0e841c199b0bed21cc610115556f4b3b4cee57f62b7eafc563168b4b5bd4610116556f4b3b4cf717a41cf34faf90f8e2021fdb610117556101188190556f4b3b4ca93a7e8ef66a7f91d9c09f21a7610119556f4b3b4caa1a7659756638348adc3ec58c61011a556f4b3b4caafa6e23f6fcb40a5b13da368361011b556f4b3b4cabda65ee7b2df31352286cbf7261011c556f4b3b4cacba5db901f9f54f77daf1ab5a61011d556f4b3b4cad9a55838b60babed3ec64455261011e556f4b3b4cae7a4d4e176243616e1dbfd88861011f556f4b3b4caf5a4518a5fe8f374e2fffb040610120556f4b3b4cb03a3ce337359e407be41f17d6610121556101228190556f4b3b4ca870ec58b98ed4c5fde7bd3232610123556f4b3b4ca88751ecf91aca53344b52c275610124556f4b3b4ca89db78138ad6ac9e32cbcd88c610125556f4b3b4ca8b41d157846b62a0a8df79c37610126556f4b3b4ca8ca82a9b7e6ac73aa70ff3538610127556f4b3b4ca8e0e83df78d4da6c2d7cfcb4f610128556f4b3b4ca8f74dd2373a99c353c465863e610129556f4b3b4ca90db36676ee90c95d38bc8dc661012a556f4b3b4ca92418fab6a932b8df36d109a961012b5561012c556f4b3b4ca85cc42019fcf7fc9916c7068761012d556f4b3b4ca85f017bb9f076e8a405d0c2e361012e556f4b3b4ca8613ed759e406e660cd1db72a61012f556f4b3b4ca8637c32f9d7a7f5cf6cae6572610130556f4b3b4ca865b98e99cb5a16efe4834fd3610131556f4b3b4ca867f6ea39bf1d49c2349cf862610132556f4b3b4ca86a3445d9b2f18e465cfbe136610133556f4b3b4ca86c71a179a6d6e47c5da08c66610134556f4b3b4ca86eaefd199acd4c64368b7c086101355561024e805462ff0000191662010000179055565b6000678ac7230489e8000068056bc75e2d63100000830604610db983826014612a03565b9392505050565b6b012ced32a16a1b11e826288960261b6101fe8190556f4b3b4ca85a86c47a098a2240000a939b6101ff556f4b3b4ca85a86c47a098a224000152736610200556f4b3b4ca85a86c47a098a2240001fbad2610201556f4b3b4ca85a86c47a098a2240002a4e6d610202556f4b3b4ca85a86c47a098a22400034e208610203556f4b3b4ca85a86c47a098a2240003f75a3610204556f4b3b4ca85a86c47a098a2240004a093e610205556f4b3b4ca85a86c47a098a224000549cd9610206556f4b3b4ca85a86c47a098a2240005f3075610207556102088190556f4b3b4ca85a86c47a098a224000010ec3610209556f4b3b4ca85a86c47a098a224000021d8561020a556f4b3b4ca85a86c47a098a224000032c4861020b556f4b3b4ca85a86c47a098a224000043b0b61020c556f4b3b4ca85a86c47a098a2240000549ce61020d556f4b3b4ca85a86c47a098a22400006589061020e556f4b3b4ca85a86c47a098a22400007675361020f556f4b3b4ca85a86c47a098a224000087616610210556f4b3b4ca85a86c47a098a2240000984d8610211556102128190556f4b3b4ca85a86c47a098a224000001b13610213556f4b3b4ca85a86c47a098a224000003627610214556f4b3b4ca85a86c47a098a22400000513a610215556f4b3b4ca85a86c47a098a224000006c4e610216556f4b3b4ca85a86c47a098a224000008761610217556f4b3b4ca85a86c47a098a22400000a275610218556f4b3b4ca85a86c47a098a22400000bd88610219556f4b3b4ca85a86c47a098a22400000d89c61021a556f4b3b4ca85a86c47a098a22400000f3af61021b5561021c8190556f4b3b4ca85a86c47a098a2240000002b561021d556f4b3b4ca85a86c47a098a22400000056a61021e556f4b3b4ca85a86c47a098a22400000081f61021f556f4b3b4ca85a86c47a098a224000000ad5610220556f4b3b4ca85a86c47a098a224000000d8a610221556f4b3b4ca85a86c47a098a22400000103f610222556f4b3b4ca85a86c47a098a2240000012f4610223556f4b3b4ca85a86c47a098a2240000015a9610224556f4b3b4ca85a86c47a098a22400000185e610225556102268190556f4b3b4ca85a86c47a098a224000000045610227556f4b3b4ca85a86c47a098a22400000008b610228556f4b3b4ca85a86c47a098a2240000000d0610229556f4b3b4ca85a86c47a098a22400000011561022a556f4b3b4ca85a86c47a098a22400000015b61022b556f4b3b4ca85a86c47a098a2240000001a061022c556f4b3b4ca85a86c47a098a2240000001e561022d556f4b3b4ca85a86c47a098a22400000022b61022e556f4b3b4ca85a86c47a098a22400000027061022f556102308190556f4b3b4ca85a86c47a098a224000000007610231556f4b3b4ca85a86c47a098a22400000000e610232556f4b3b4ca85a86c47a098a224000000015610233556f4b3b4ca85a86c47a098a22400000001c610234556f4b3b4ca85a86c47a098a224000000023610235556f4b3b4ca85a86c47a098a22400000002a610236556f4b3b4ca85a86c47a098a224000000031610237556f4b3b4ca85a86c47a098a224000000037610238556f4b3b4ca85a86c47a098a22400000003e6102395561023a8190556f4b3b4ca85a86c47a098a22400000000161023b81905561023c8190556f4b3b4ca85a86c47a098a22400000000261023d556f4b3b4ca85a86c47a098a22400000000361023e81905561023f556f4b3b4ca85a86c47a098a224000000004610240556f4b3b4ca85a86c47a098a224000000005610241556f4b3b4ca85a86c47a098a2240000000066102428190556102435561024482905561024582905561024682905561024782905561024882905561024982905561024a82905561024b9190915561024c81905561024d5561024e805465ff0000000000191665010000000000179055565b6000670de0b6b3a764000083106113835761137c61137783611372866046611e65565b613375565b61290b565b90506113d5565b670de0b6b3a76400008310156113d55760006113b5836113726113ae670de0b6b3a764000088612230565b6046611e65565b90506113d1670de0b6b3a76400006113cc8361290b565b612230565b9150505b92915050565b6b012ced32a16a1b11e826288960261b61019a8190556f4b3b4ca85a86c47a09a2c2630abe4edd61019b556f4b3b4ca85a86c47a09bb6286157c9dba61019c556f4b3b4ca85a86c47a09d402a9203aec9761019d556f4b3b4ca85a86c47a09eca2cc2af93b7461019e556f4b3b4ca85a86c47a0a0542ef35b78a5161019f556f4b3b4ca85a86c47a0a1de3124075d92f6101a0556f4b3b4ca85a86c47a0a3683354b34280c6101a1556f4b3b4ca85a86c47a0a4f235855f276e96101a2556f4b3b4ca85a86c47a0a67c37b60b0c5c66101a3556101a48190556f4b3b4ca85a86c47a098c98a9e7796e496101a5556f4b3b4ca85a86c47a098f0f13cef2dc936101a6556f4b3b4ca85a86c47a0991857db66c4adc6101a7556f4b3b4ca85a86c47a0993fbe79de5b9256101a8556f4b3b4ca85a86c47a09967251855f276f6101a9556f4b3b4ca85a86c47a0998e8bb6cd895b86101aa556f4b3b4ca85a86c47a099b5f25545204016101ab556f4b3b4ca85a86c47a099dd58f3bcb724a6101ac556f4b3b4ca85a86c47a09a04bf92344e0946101ad556101ae8190556f4b3b4ca85a86c47a098a614a9725be3b6101af556f4b3b4ca85a86c47a098aa0552e4b7c756101b0556f4b3b4ca85a86c47a098adf5fc5713ab06101b1556f4b3b4ca85a86c47a098b1e6a5c96f8ea6101b2556f4b3b4ca85a86c47a098b5d74f3bcb7256101b3556f4b3b4ca85a86c47a098b9c7f8ae2755f6101b4556f4b3b4ca85a86c47a098bdb8a2208339a6101b5556f4b3b4ca85a86c47a098c1a94b92df1d46101b6556f4b3b4ca85a86c47a098c599f5053b00f6101b7556101b88190556f4b3b4ca85a86c47a098a288ddbea2c9f6101b9556f4b3b4ca85a86c47a098a2edbb7d4593f6101ba556f4b3b4ca85a86c47a098a352993be85de6101bb556f4b3b4ca85a86c47a098a3b776fa8b27e6101bc556f4b3b4ca85a86c47a098a41c54b92df1d6101bd556f4b3b4ca85a86c47a098a4813277d0bbd6101be556f4b3b4ca85a86c47a098a4e610367385c6101bf556f4b3b4ca85a86c47a098a54aedf5164fc6101c0556f4b3b4ca85a86c47a098a5afcbb3b919b6101c1556101c28190556f4b3b4ca85a86c47a098a22e162ca9e106101c3556f4b3b4ca85a86c47a098a2382c5953c206101c4556f4b3b4ca85a86c47a098a2424285fda306101c5556f4b3b4ca85a86c47a098a24c58b2a78406101c6556f4b3b4ca85a86c47a098a2566edf516506101c7556f4b3b4ca85a86c47a098a260850bfb4606101c8556f4b3b4ca85a86c47a098a26a9b38a52706101c9556f4b3b4ca85a86c47a098a274b1654f0806101ca556f4b3b4ca85a86c47a098a27ec791f8e906101cb556101cc8190556f4b3b4ca85a86c47a098a2250237aa9686101cd556f4b3b4ca85a86c47a098a226046f552d06101ce556f4b3b4ca85a86c47a098a22706a6ffc386101cf556f4b3b4ca85a86c47a098a22808deaa5a06101d0556f4b3b4ca85a86c47a098a2290b1654f086101d1556f4b3b4ca85a86c47a098a22a0d4dff8706101d2556f4b3b4ca85a86c47a098a22b0f85aa1d86101d3556f4b3b4ca85a86c47a098a22c11bd54b406101d4556f4b3b4ca85a86c47a098a22d13f4ff4a86101d5556101d68190556f4b3b4ca85a86c47a098a22419d25ddbe6101d7556f4b3b4ca85a86c47a098a22433a4bbb7b6101d8556f4b3b4ca85a86c47a098a2244d77199396101d9556f4b3b4ca85a86c47a098a2246749776f66101da556f4b3b4ca85a86c47a098a224811bd54b46101db556f4b3b4ca85a86c47a098a2249aee332726101dc556f4b3b4ca85a86c47a098a224b4c09102f6101dd556f4b3b4ca85a86c47a098a224ce92eeded6101de556f4b3b4ca85a86c47a098a224e8654cbaa6101df556101e08190556f4b3b4ca85a86c47a098a22402950962d6101e1556f4b3b4ca85a86c47a098a224052a12c596101e2556f4b3b4ca85a86c47a098a22407bf1c2866101e3556f4b3b4ca85a86c47a098a2240a54258b26101e4556f4b3b4ca85a86c47a098a2240ce92eedf6101e5556f4b3b4ca85a86c47a098a2240f7e3850b6101e6556f4b3b4ca85a86c47a098a224121341b386101e7556f4b3b4ca85a86c47a098a22414a84b1646101e8556f4b3b4ca85a86c47a098a224173d547916101e9556101ea8190556f4b3b4ca85a86c47a098a22400421a89e6101eb556f4b3b4ca85a86c47a098a22400843513c6101ec556f4b3b4ca85a86c47a098a22400c64f9da6101ed556f4b3b4ca85a86c47a098a22401086a2786101ee556f4b3b4ca85a86c47a098a224014a84b166101ef556f4b3b4ca85a86c47a098a224018c9f3b46101f0556f4b3b4ca85a86c47a098a22401ceb9c526101f1556f4b3b4ca85a86c47a098a2240210d44f06101f2556f4b3b4ca85a86c47a098a2240252eed8f6101f3556101f4556f4b3b4ca85a86c47a098a22400069c4106101f5556f4b3b4ca85a86c47a098a224000d388206101f6556f4b3b4ca85a86c47a098a2240013d4c2f6101f7556f4b3b4ca85a86c47a098a224001a7103f6101f8556f4b3b4ca85a86c47a098a22400210d44f6101f9556f4b3b4ca85a86c47a098a2240027a985f6101fa556f4b3b4ca85a86c47a098a224002e45c6f6101fb556f4b3b4ca85a86c47a098a2240034e207e6101fc556f4b3b4ca85a86c47a098a224003b7e48e6101fd5561024e805464ff000000001916640100000000179055565b600081611bb55750670de0b6b3a76400006113d5565b670de0b6b3a76400005b6001831115611c185760028306611be757611bda8485613375565b9350600283049250611c13565b6002830615611c1357611bfa8482613375565b9050611c068485613375565b9350600260001984010492505b611bbf565b6113d18482613375565b600081611c31575060016113d5565b60015b6001831115611c8d5760028306611c5c57611c4f8485613b5b565b9350600283049250611c88565b6002830615611c8857611c6f8482613b5b565b9050611c7b8485613b5b565b9350600260001984010492505b611c34565b6113d18482613b5b565b61024e5460009062010000900460ff1615156001148015611cc7575061024e546301000000900460ff1615156001145b8015611ce3575061024e54640100000000900460ff1615156001145b8015611d00575061024e5465010000000000900460ff1615156001145b611d51576040805162461bcd60e51b815260206004820181905260248201527f4c6f6f6b7570207461626c652033206d75737420666972737420626520736574604482015290519081900360640190fd5b68056bc75e2d631000008210158015611d725750680ad78ebc5ac620000082105b611dad5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c726022913960400191505060405180910390fd5b670de0b6b3a764000082026f96769950b50d88f413144480000000006b012ced32a16a1b11e826288960261b82066000611de6826122a7565b905060005b81811015611e5a57600081600a0a82600101600a0a8581611e0857fe5b0681611e1057fe5b04905080611e1e5750611e52565b600060c88360250360278110611e3057fe5b600a020182600a8110611e3f57fe5b01549050611e4d8682612205565b955050505b600101611deb565b509195945050505050565b6000670de0b6b3a7640000831015611eb9576040805162461bcd60e51b8152602060048201526012602482015271696e707574206d757374206265203e3d203160701b604482015290519081900360640190fd5b600080611ecf670de0b6b3a76400006002613b5b565b90505b671bc16d674ec800008510612154576b03782dace9d90000000000008510611f1757611f0a856b03782dace9d9000000000000612230565b9450601e8201915061214f565b69de0b6b3a7640000000008510611f4957611f3c8569de0b6b3a764000000000612230565b945060148201915061214f565b6906f05b59d3b2000000008510611f7b57611f6e856906f05b59d3b200000000612230565b9450600f8201915061214f565b683782dace9d900000008510611fab57611f9e85683782dace9d90000000612230565b9450600a8201915061214f565b681bc16d674ec80000008510611fdb57611fce85681bc16d674ec8000000612230565b945060098201915061214f565b680de0b6b3a764000000851061200b57611ffe85680de0b6b3a764000000612230565b945060088201915061214f565b6806f05b59d3b2000000851061203b5761202e856806f05b59d3b2000000612230565b945060078201915061214f565b6803782dace9d9000000851061206b5761205e856803782dace9d9000000612230565b945060068201915061214f565b6801bc16d674ec800000851061209b5761208e856801bc16d674ec800000612230565b945060058201915061214f565b67de0b6b3a7640000085106120c9576120bc8567de0b6b3a76400000612230565b945060048201915061214f565b676f05b59d3b20000085106120f7576120ea85676f05b59d3b200000612230565b945060038201915061214f565b673782dace9d90000085106121255761211885673782dace9d900000612230565b945060028201915061214f565b671bc16d674ec80000851061214f5761214685671bc16d674ec80000612230565b94506001820191505b611ed2565b6c0c9f2c9cd04674edea400000008202600061218f6c08bfade8cec3c65ca697cfbe7261218a846121858b8b613221565b613bb4565b6121b6565b905061219a8161228a565b979650505050505050565b68056bc75e2d631000008106900390565b6000806121c38484613b5b565b90506c0c9f2c9cd04674edea400000006121e1826002835b04613bb4565b816121e857fe5b04949350505050565b606481606481106121fe57fe5b0154905081565b6000806122128484613b5b565b90506b012ced32a16a1b11e826288960261b6121e1826002836121db565b60008061224584670de0b6b3a7640000613b5b565b9050826121e1826002836121db565b6000629896806305f5e100830604610db983826008612a03565b6000633b9aca006402540be400830604610db98382600a612a03565b600064174876e80064e8d4a51000830604610db98382600c612a03565b6000805b82156113d557600a830492506001016122ab565b6000816122dc57506b012ced32a16a1b11e826288960261b6113d5565b6b012ced32a16a1b11e826288960261b5b60018311156123465760028306612315576123088485612205565b9350600283049250612341565b6002830615612341576123288482612205565b90506123348485612205565b9350600260001984010492505b6122ed565b6113d18482612205565b6f96769950b50d88f413144480000000006064556f259da6542d43623d04c51120000000006065556f12ced32a16a1b11e82628890000000006066556f096769950b50d88f41314448000000006067556f04b3b4ca85a86c47a098a224000000006068556f0259da6542d43623d04c5112000000006069556f012ced32a16a1b11e826288900000000606a556e96769950b50d88f413144480000000606b556e4b3b4ca85a86c47a098a2240000000606c556e259da6542d43623d04c51120000000606d556e12ced32a16a1b11e82628890000000606e556e096769950b50d88f41314448000000606f556e04b3b4ca85a86c47a098a2240000006070556e0259da6542d43623d04c51120000006071556e012ced32a16a1b11e82628890000006072556d96769950b50d88f41314448000006073556d4b3b4ca85a86c47a098a224000006074556d259da6542d43623d04c5112000006075556d12ced32a16a1b11e8262889000006076556d096769950b50d88f4131444800006077556d04b3b4ca85a86c47a098a22400006078556d0259da6542d43623d04c511200006079556d012ced32a16a1b11e82628890000607a556c96769950b50d88f41314448000607b556c4b3b4ca85a86c47a098a224000607c556c259da6542d43623d04c5112000607d556c12ced32a16a1b11e8262889000607e556c096769950b50d88f4131444800607f556c04b3b4ca85a86c47a098a224006080556c0259da6542d43623d04c5112006081556c012ced32a16a1b11e8262889006082556b96769950b50d88f4131444806083556b4b3b4ca85a86c47a098a22406084556b259da6542d43623d04c511206085556b12ced32a16a1b11e826288906086556b096769950b50d88f413144486087556b04b3b4ca85a86c47a098a2246088556b0259da6542d43623d04c51126089556b012ced32a16a1b11e8262889608a556a96769950b50d88f4131444608b556a4b3b4ca85a86c47a098a22608c556a259da6542d43623d04c511608d556a12ced32a16a1b11e826288608e556a096769950b50d88f413144608f556a04b3b4ca85a86c47a098a26090556a0259da6542d43623d04c516091556a012ced32a16a1b11e826286092556996769950b50d88f41314609355694b3b4ca85a86c47a098a60945569259da6542d43623d04c56095556912ced32a16a1b11e826260965569096769950b50d88f41316097556904b3b4ca85a86c47a098609855690259da6542d43623d04c60995569012ced32a16a1b11e826609a556896769950b50d88f413609b55684b3b4ca85a86c47a09609c5568259da6542d43623d04609d556812ced32a16a1b11e82609e5568096769950b50d88f41609f556804b3b4ca85a86c47a060a055680259da6542d43623d060a15568012ced32a16a1b11e860a2556796769950b50d88f460a355674b3b4ca85a86c47a60a45567259da6542d43623d60a5556712ced32a16a1b11e60a65567096769950b50d88f60a7556704b3b4ca85a86c4760a855670259da6542d4362360a95567012ced32a16a1b1160aa556696769950b50d8860ab55664b3b4ca85a86c460ac5566259da6542d436260ad556612ced32a16a1b160ae5566096769950b50d860af556604b3b4ca85a86c60b055660259da6542d43660b15566012ced32a16a1b60b2556596769950b50d60b355654b3b4ca85a8660b45565259da6542d4360b5556512ced32a16a160b65565096769950b5060b7556504b3b4ca85a860b855650259da6542d460b95565012ced32a16a60ba556496769950b560bb55644b3b4ca85a60bc5564259da6542d60bd556412ced32a1660be5564096769950b60bf556404b3b4ca8560c055640259da654260c15564012ced32a160c255639676995060c355634b3b4ca860c45563259da65460c5556312ced32a60c655630967699560c75561024e805461ff001916610100179055565b60c882602781106128f357fe5b600a020181600a811061290257fe5b01549150829050565b6000806000806129208564e8d4a51000613b5b565b94506129396c1235995e1e4b3c4c2e092eb92a866121b6565b94506129448561226e565b945068056bc75e2d631000008510801561295c575060015b156129a25761297468056bc75e2d6310000086613bb4565b91506f259da6542d43623d04c5112000000000905061299b8161299684611c97565b612205565b93506129f1565b68056bc75e2d631000006129b5866121a5565b03925082850391506129da60026129d58568056bc75e2d63100000613bf8565b611c22565b90506129ee816129e984611c97565b613b5b565b93505b6129fa84610d95565b95945050505050565b60006005831015612a2257612a1b8483600a0a613bf8565b9050610db9565b60058310610db957612a378483600a0a613bf8565b600101949350505050565b600081606481106121fe57fe5b600080556f35326198caa4cf0398dd2df4a401fff860019081556f3f43136bbc1145a3d84ccd8fde8050606002556f44fcdaff61cc4ceae78af7acfc2dcb346003556f480ac4b15dff81588c37988631acc6496004556f499e9cc45b22529d4b6abaa6c727fa206005556f4a6bd6a98878b7e749bca36139d8d4396006556f4ad349c2776ffca447fac2991089d4966007556f4b07392f52b5c840e2f500a685315e106008556f4b213e68c12287618b384447416493666009556f4b2e4467966940f3e15f711b485e0c54600a556f4b34c83fb45aa7f02968d3f10c7bf179600b556f4b380a61f5a1002253dd42289d3f4eac600c556f4b39ab80a386e7ea4aa8befbc274a593600d556f4b3a7c135de075ee193ece3e8ec0de14600e556f4b3ae45d93e9a0ecb716a961237770f6600f556f4b3b1882e525a71aafc82b1e629fd4f66010556f4b3b32959b519153545560036c6f85a76011556f4b3b3f9ef9cb0196d145667cf95b88916012556f4b3b4623a9e098ae32898d76368829126013556f4b3b496602219bfcc6e3c6e7270bab636014556f4b3b4b072e4fab95795f9efc3a14fb8d6015556f4b3b4bd7c46a16de429d50fdc920a2e56016556f4b3b4c400f782561c5f99e6e8cc40d766017556f4b3b4c7434ff62db4faed2a218e2ba686018556f4b3b4c8e47c30f26069626269d2ce2996019556f4b3b4c9b5124e8aede8e5d050e398bb3601a556f4b3b4ca1d5d5d64c29abc79382732075601b556f4b3b4ca5182e4d510702d61d917cca2f601c556f4b3b4ca6b95a88e103a07462aefce70c601d556f4b3b4ca789f0a6ac656bc95b2f53ca62601e556f4b3b4ca7f23bb592ef30954fa967f1b3601f556f4b3b4ca826613d066a4ac3a84c9c92d46020556f4b3b4ca8407400c03565ccec42b792c36021556f4b3b4ca84d7d629d1e56ce14284400136022556f4b3b4ca85402138b93a82dc995d5ca426023556f4b3b4ca857446c02ce87156cab570f406024556f4b3b4ca858e5983e6c0417304dc6791a6025556f4b3b4ca859b62e5c3ac5fb8ea4e9f5ca6026556f4b3b4ca85a1e796b2227c69cf1f6a8d06027556f4b3b4ca85a529ef295d8e25be0dbbfd66028556f4b3b4ca85a6cb1b64fb17dc94a65fac56029556f4b3b4ca85a79bb182c9dcee37bb10419602a556f4b3b4ca85a803fc91b13f849737803ba602b556f4b3b4ca85a838221924f0d32a723e248602c556f4b3b4ca85a85234dcdec97b4ceebe93f602d556f4b3b4ca85a85f3e3ebbb5cf9464c72a6602e556f4b3b4ca85a865c2efaa2bf9c5adbd8d5602f556f4b3b4ca85a869054821670ee1b5b544b6030556f4b3b4ca85a86aa6745d049970929041e6031556f4b3b4ca85a86b770a7ad35eb8373588d6032556f4b3b4ca85a86bdf5589bac15c17161e66033556f4b3b4ca85a86c137b112e72ae0a69e5b6034556f4b3b4ca85a86c2d8dd4e84b5704eca876035556f4b3b4ca85a86c3a9736c537ab826441a6036556f4b3b4ca85a86c411be7b3add5c12d9c36037556f4b3b4ca85a86c445e402ae8eae095acf6038556f4b3b4ca85a86c45ff6c668675704a8e36039556f4b3b4ca85a86c46d00284553ab825350603a556f4b3b4ca85a86c47384d933c9d5c12960603b556f4b3b4ca85a86c476c731ab04eae0949e603c556f4b3b4ca85a86c478685de6a275704a4a603d556f4b3b4ca85a86c47938f404713ab82524603e556f4b3b4ca85a86c479a13f13589d5c1292603f556f4b3b4ca85a86c479d5649acc4eae09496040556f4b3b4ca85a86c479ef775e86275704a46041556f4b3b4ca85a86c479fc80c06313ab82526042556f4b3b4ca85a86c47a0305715189d5c1296043556f4b3b4ca85a86c47a0647c9c8c4eae0956044556f4b3b4ca85a86c47a07e8f6046275704a6045556f4b3b4ca85a86c47a08b98c22313ab8256046556f4b3b4ca85a86c47a0921d731189d5c136047556f4b3b4ca85a86c47a0955fcb88c4eae096048556f4b3b4ca85a86c47a09700f7c462757056049556f4b3b4ca85a86c47a097d18de2313ab82604a556f4b3b4ca85a86c47a09839d8f1189d5c1604b556f4b3b4ca85a86c47a0986dfe788c4eae1604c556f4b3b4ca85a86c47a09888113c4627570604d556f4b3b4ca85a86c47a098951a9e2313ab8604e556f4b3b4ca85a86c47a0989b9f4f1189d5c604f556f4b3b4ca85a86c47a0989ee1a788c4eae6050556f4b3b4ca85a86c47a098a082d3c4627576051556f4b3b4ca85a86c47a098a15369e2313ac6052556f4b3b4ca85a86c47a098a1bbb4f1189d66053556f4b3b4ca85a86c47a098a1efda788c4eb6054556f4b3b4ca85a86c47a098a209ed3c462756055556f4b3b4ca85a86c47a098a216f69e2313b6056556f4b3b4ca85a86c47a098a21d7b4f1189d6057556f4b3b4ca85a86c47a098a220bda788c4f6058556f4b3b4ca85a86c47a098a2225ed3c46276059556f4b3b4ca85a86c47a098a2232f69e2314605a556f4b3b4ca85a86c47a098a22397b4f118a605b556f4b3b4ca85a86c47a098a223cbda788c5605c556f4b3b4ca85a86c47a098a223e5ed3c462605d556f4b3b4ca85a86c47a098a223f2f69e231605e556f4b3b4ca85a86c47a098a223f97b4f119605f556f4b3b4ca85a86c47a098a223fcbda788c6060556f4b3b4ca85a86c47a098a223fe5ed3c466061556f4b3b4ca85a86c47a098a223ff2f69e236062556f4b3b4ca85a86c47a098a223ff97b4f1260635561024e805460ff19169091179055565b61024e5460009060ff161515600114801561324a575061024e5460ff6101009091041615156001145b6132855760405162461bcd60e51b8152600401808060200182810382526025815260200180613c4d6025913960400191505060405180910390fd5b670de0b6b3a764000083101580156132a45750671bc16d674ec8000083105b6132df5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c726022913960400191505060405180910390fd5b60006132f48468056bc75e2d63100000613b5b565b90506b012ced32a16a1b11e826288960261b600060015b8581116133615761332a6000826064811061332257fe5b015485612205565b92506b012ced32a16a1b11e826288960261b8310613359578293506064816064811061335257fe5b0154820191505b60010161330b565b5061336b81612254565b9695505050505050565b6000806133828484613b5b565b9050670de0b6b3a76400006121e1826002836121db565b6b012ced32a16a1b11e826288960261b6101368190556f4b3b4ca85ac01a706eadf372d36d1338610137556f4b3b4ca85af97066d3d1f05811f9885d610138556f4b3b4ca85b32c65d38f618efbba55f91610139556f4b3b4ca85b6c1c539e1a6d39d07098f561013a556f4b3b4ca85ba5724a033eed36505b34aa61013b556f4b3b4ca85bdec840686398e53b6532d261013c556f4b3b4ca85c181e36cd887046918e938e61013d556f4b3b4ca85c51742d32ad735a52d7570061013e556f4b3b4ca85c8aca2397d2a2207f3f7d4761013f556101408190556f4b3b4ca85a8c8045e0741b9a7e66ef70610141556f4b3b4ca85a923c11b75e1564da09107f610142556f4b3b4ca85a97f7dd8e480f9f12e6632c610143556f4b3b4ca85a9db3a965320a4928fee777610144556f4b3b4ca85aa36f753c1c05631c529d60610145556f4b3b4ca85aa92b41130600ecece184e8610146556f4b3b4ca85aaee70ce9effce69aab9e0e610147556f4b3b4ca85ab4a2d8c0d9f95025b0e8d3610148556f4b3b4ca85aba5ea497c3f6298df165366101495561014a8190556f4b3b4ca85a8757419f07ee5d9d9096fe61014b556f4b3b4ca85a87ea093485ba7c59807dd761014c556f4b3b4ca85a887cd0ca03869c33cfb48b61014d556f4b3b4ca85a890f985f8152bd2c7e3b1a61014e556f4b3b4ca85a89a25ff4ff1edf438c118461014f556f4b3b4ca85a8a35278a7ceb0278f937ca610150556f4b3b4ca85a8ac7ef1ffab726ccc5adeb610151556f4b3b4ca85a8b5ab6b578834c3ef173e7610152556f4b3b4ca85a8bed7e4af64f72cf7c89be610153556101548190556f4b3b4ca85a86d327987d1d0fb611d996610155556f4b3b4ca85a86e1d5277017df6f00d021610156556f4b3b4ca85a86f082b66312af2acce3a2610157556f4b3b4ca85a86ff3045560d7ee9761418610158556f4b3b4ca85a870dddd449084eaafc6183610159556f4b3b4ca85a871c8b633c031e6f5fcbe461015a556f4b3b4ca85a872b38f22efdee36a0533b61015b556f4b3b4ca85a8739e68121f8be00bdf78661015c556f4b3b4ca85a8748941014f38dcdb8b8c761015d5561015e8190556f4b3b4ca85a86c5f1cb08d4ee5ee0cb7f61015f556f4b3b4ca85a86c7698c87879cbdc8ebc3610160556f4b3b4ca85a86c8e14e063a4b1cb860cc610161556f4b3b4ca85a86ca590f84ecf97baf2a99610162556f4b3b4ca85a86cbd0d1039fa7daad492c610163556f4b3b4ca85a86cd489282525639b2bc84610164556f4b3b4ca85a86cec05401050498bf84a1610165556f4b3b4ca85a86d038157fb7b2f7d3a183610166556f4b3b4ca85a86d1afd6fe6a6156ef132a610167556101688190556f4b3b4ca85a86c49f9ce39a84a316264b610169556f4b3b4ca85a86c4c5303d12c9462c5f5c61016a556f4b3b4ca85a86c4eac3968b0de942ab3061016b556f4b3b4ca85a86c51056f003528c5909c961016c556f4b3b4ca85a86c535ea497b972f6f7b2761016d556f4b3b4ca85a86c55b7da2f3dbd285ff4961016e556f4b3b4ca85a86c58110fc6c20759c963061016f556f4b3b4ca85a86c5a6a455e46518b33fdb610170556f4b3b4ca85a86c5cc37af5ca9bbc9fc4b610171556101728190556f4b3b4ca85a86c47dcb797b13a9e89c96610173556f4b3b4ca85a86c4818d68d3e753d1395c610174556f4b3b4ca85a86c4854f582cbafdb9d651610175556f4b3b4ca85a86c4891147858ea7a27377610176556f4b3b4ca85a86c48cd336de62518b10cd610177556f4b3b4ca85a86c49095263735fb73ae53610178556f4b3b4ca85a86c49457159009a55c4c09610179556f4b3b4ca85a86c4981904e8dd4f44e9ef61017a556f4b3b4ca85a86c49bdaf441b0f92d880561017b5561017c8190556f4b3b4ca85a86c47a69bbab21f7640fa661017d556f4b3b4ca85a86c47ac9ed3403eec81f4d61017e556f4b3b4ca85a86c47b2a1ebce5e62c2ef561017f556f4b3b4ca85a86c47b8a5045c7dd903e9d610180556f4b3b4ca85a86c47bea81cea9d4f44e45610181556f4b3b4ca85a86c47c4ab3578bcc585dee610182556f4b3b4ca85a86c47caae4e06dc3bc6d97610183556f4b3b4ca85a86c47d0b16694fbb207d41610184556f4b3b4ca85a86c47d6b47f231b2848ceb610185556101868190556f4b3b4ca85a86c47a1328aff03256ce5d610187556f4b3b4ca85a86c47a1cc73da064ad9cbb610188556f4b3b4ca85a86c47a2665cb5097046b18610189556f4b3b4ca85a86c47a30045900c95b397661018a556f4b3b4ca85a86c47a39a2e6b0fbb207d361018b556f4b3b4ca85a86c47a434174612e08d63161018c556f4b3b4ca85a86c47a4ce00211605fa48e61018d556f4b3b4ca85a86c47a567e8fc192b672eb61018e556f4b3b4ca85a86c47a601d1d71c50d414961018f55610190556f4b3b4ca85a86c47a0a80639e6b6f14a3610191556f4b3b4ca85a86c47a0b76a4fcd6de2946610192556f4b3b4ca85a86c47a0c6ce65b424d3de9610193556f4b3b4ca85a86c47a0d6327b9adbc528c610194556f4b3b4ca85a86c47a0e596918192b672f610195556f4b3b4ca85a86c47a0f4faa76849a7bd2610196556f4b3b4ca85a86c47a1045ebd4f0099075610197556f4b3b4ca85a86c47a113c2d335b78a518610198556f4b3b4ca85a86c47a12326e91c6e7b9ba6101995561024e805463ff00000019166301000000179055565b600082613b6a575060006113d5565b82820282848281613b7757fe5b0414610db95760405162461bcd60e51b8152600401808060200182810382526021815260200180613c946021913960400191505060405180910390fd5b600082820183811015610db95760405162461bcd60e51b8152600401808060200182810382526021815260200180613c946021913960400191505060405180910390fd5b6000808211613c41576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b60008284816121e857fefe4c6f6f6b7570207461626c6573203120262032206d75737420666972737420626520736574696e7075742078206d7573742062652077697468696e2072616e6765205b312c325b75696e74206f766572666c6f772066726f6d206d756c7469706c69636174696f6ea265627a7a7231582017a051d09a0940c56fc2604ed1ba47a74e59b940900fcb8951b76649db1e2ad364736f6c63430005100032
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c806364ce07d811610104578063b2f21109116100a2578063e5ac571711610071578063e5ac5717146104ab578063e92fab3b146104b3578063f7523c52146104d6578063fed6bde0146104f9576101cf565b8063b2f2110914610425578063b581fbe314610448578063d3f87aae14610465578063dc1a1e091461048e576101cf565b80638e962c70116100de5780638e962c70146103c05780639636c762146103dd578063a2693515146103fa578063a463a0871461041d576101cf565b806364ce07d81461036357806378b09c47146103865780638d5dab35146103a3576101cf565b8063422b0d8d11610171578063504f5e561161014b578063504f5e56146102e357806358be7a8914610300578063595a8d07146103235780636172f46714610340576101cf565b8063422b0d8d14610280578063442b7ffb146102a357806344f7787f146102c0576101cf565b806326a4c99f116101ad57806326a4c99f1461022a5780632e4c697f14610232578063344d00951461025557806334eceac01461025d576101cf565b80631ea97975146101d457806322aa59fc14610203578063244334261461020d575b600080fd5b6101f1600480360360208110156101ea57600080fd5b5035610501565b60408051918252519081900360200190f35b61020b61054a565b005b6101f16004803603602081101561022357600080fd5b5035610d95565b61020b610dc0565b6101f16004803603604081101561024857600080fd5b508035906020013561134f565b61020b6113db565b6101f16004803603604081101561027357600080fd5b5080359060200135611b9f565b6101f16004803603604081101561029657600080fd5b5080359060200135611c22565b6101f1600480360360208110156102b957600080fd5b5035611c97565b6101f1600480360360408110156102d657600080fd5b5080359060200135611e65565b6101f1600480360360208110156102f957600080fd5b50356121a5565b6101f16004803603604081101561031657600080fd5b50803590602001356121b6565b6101f16004803603602081101561033957600080fd5b50356121f1565b6101f16004803603604081101561035657600080fd5b5080359060200135612205565b6101f16004803603604081101561037957600080fd5b5080359060200135612230565b6101f16004803603602081101561039c57600080fd5b5035612254565b6101f1600480360360208110156103b957600080fd5b503561226e565b6101f1600480360360208110156103d657600080fd5b503561228a565b6101f1600480360360208110156103f357600080fd5b50356122a7565b6101f16004803603604081101561041057600080fd5b50803590602001356122bf565b61020b612350565b6101f16004803603604081101561043b57600080fd5b50803590602001356128e6565b6101f16004803603602081101561045e57600080fd5b503561290b565b6101f16004803603606081101561047b57600080fd5b5080359060208101359060400135612a03565b6101f1600480360360208110156104a457600080fd5b5035612a42565b61020b612a4f565b6101f1600480360360408110156104c957600080fd5b5080359060200135613221565b6101f1600480360360408110156104ec57600080fd5b5080359060200135613375565b61020b613399565b60006001670de0b6b3a764000080835b8383111561054157670de0b6b3a7640000016105366105308488613375565b82612230565b925090820190610511565b50949350505050565b6b012ced32a16a1b11e826288960261b60c88190556f50a19b26283d0b34e82c419e778521b360c9556f566b2026a35e43fb189e7d9afd311ca060ca556f5c9efa9a30c4933df96ffc0f774a744c60cb556f6344cc47e6d8d888a38d43e4480b40f760cc556f6a64c33195499e0731ba5be94803fff160cd556f7207a3a4586c4cc4064088ea4276fb5c60ce556f7a36d3021aa31ad13619f68058eab61160cf556f82fc635149ae40556949b9c77aaeb7d460d0556f8c631fa0f9b00c8830bcc92f66a8cdfd60d15560d28190556f4bc1422ac6aec230a72fd844c9aea33160d3556f4c482634ef728f0d43fd3e29706e261860d4556f4ccffa6f902e802e1ef5c9a8be84d8ea60d5556f4d58c08658883da39409ffd3360b2db760d6556f4de27a27f1b16b3aea7b151d4596edfd60d7556f4e6d290603b3af2ce3f021430787e70760d8556f4ef8ced53ac6275dc7b0d659adfe49d160d9556f4f856d4d4cac5dfa583fd57df7f3724d60da556f50130628fe1ece5b09368f0bf71dde1e60db5560dc8190556f4b48a7525f322bd41641432d1b296e5360dd556f4b56045b3a41b4a74901ff728163244460de556f4b6363c3576d2eaf8e9404badf6fc66760df556f4b70c58b227f889075c56e7d93fd891760e0556f4b7e29b30756d33a10e6f73c041cb39460e1556f4b8b903b71e4454e7183b4c100273dc560e2556f4b98f924ce2c3e87be6fbfff18a1b52460e3556f4ba6646f88464b1ee4492e06d6e1b2d460e4556f4bb3d21c0c5d2732e086c46abe5f89d160e55560e68190556f4b3ca26adc181e23c3f7c5dad355d41e60e7556f4b3df8336e326f421d274ed62dafe5a960e8556f4b3f4e0210f144a30d966466400a0ca060e9556f4b40a3d6c4702b91b501c642957c6b9e60ea556f4b41f9b188cab1d65c9dd779526b20ae60eb556f4b434f925e1c65b6794f335934ff081960ec556f4b44a5794480d5f4ade34c7284bc6be260ed556f4b45fb663c1391d0cd4915af1f0d4a9560ee556f4b47515944f02907dcc9b581ce95b07960ef5560f08190556f4b3b6ed5219f48be09db701ae9ef16d660f1556f4b3b9101f83e0ae41c67ff10bc60a57660f2556f4b3bb32ede6311f99a899a44d8e4e40260f3556f4b3bd55bd40e650be0ce2710494ba86160f4556f4b3bf788d9400b284ef7a6764a559e7960f5556f4b3c19b5edf80b5c47fc3698d70ebbb460f6556f4b3c3be312366cb53206142d34d1ee3360f7556f4b3c5e1045fb364076739bf07ff607e360f8556f4b3c803d89466f0b81d74c1c3923e5d560f95560fa8190556f4b3b50133a89943d50fdc16ee0f2f73e60fb556f4b3b537e1ab421ff687c5c6e8878520860fc556f4b3b56e8fb066dc21e3032644f2f78c360fd556f4b3b5a53db807787404397741c07de0b60fe556f4b3b5dbebc223f509ce0f4c0653523dd60ff556f4b3b61299cebc5200232c86a312340cc610100556f4b3b64947ddd08f73e63a591176aa541610101556f4b3b67ff5ef60ad81f9e345341c460c6610102556f4b3b6b6a4036cac4740d31cd6cfe475a610103556101048190556f4b3b4cffd7520f6c63dac18be5cb197f610105556f4b3b4d57541dc01c279c42b2eff446f4610106556f4b3b4daed0e9d6895544f6205530a6ca610107556f4b3b4e064db652b3ed4b2c3fd5cbfcb4610108556f4b3b4e5dca83349bf025357dbba8b251610109556f4b3b4eb547507c415e496246da3fd7ca61010a556f4b3b4f0cc41e29a4382e03088ea1247161010b556f4b3b4f6440ec3cc47e496830bf72f76061010c556f4b3b4fbbbdbab5a23111e22ddcf2582061010d5561010e8190556f4b3b4cb11a34adcb07707cfefb195abe61010f556f4b3b4cb9d9e298207996e81ff5da2db6610110556f4b3b4cc29990837a5ffd81ecc5e37ca1610111556f4b3b4ccb593e6fd8baa468af40d9d0ec610112556f4b3b4cd418ec5d3b898bbab13c6539b7610113556f4b3b4cdcd89a4ba2ccb3963c8e314bd5610114556f4b3b4ce598483b0e841c199b0bed21cc610115556f4b3b4cee57f62b7eafc563168b4b5bd4610116556f4b3b4cf717a41cf34faf90f8e2021fdb610117556101188190556f4b3b4ca93a7e8ef66a7f91d9c09f21a7610119556f4b3b4caa1a7659756638348adc3ec58c61011a556f4b3b4caafa6e23f6fcb40a5b13da368361011b556f4b3b4cabda65ee7b2df31352286cbf7261011c556f4b3b4cacba5db901f9f54f77daf1ab5a61011d556f4b3b4cad9a55838b60babed3ec64455261011e556f4b3b4cae7a4d4e176243616e1dbfd88861011f556f4b3b4caf5a4518a5fe8f374e2fffb040610120556f4b3b4cb03a3ce337359e407be41f17d6610121556101228190556f4b3b4ca870ec58b98ed4c5fde7bd3232610123556f4b3b4ca88751ecf91aca53344b52c275610124556f4b3b4ca89db78138ad6ac9e32cbcd88c610125556f4b3b4ca8b41d157846b62a0a8df79c37610126556f4b3b4ca8ca82a9b7e6ac73aa70ff3538610127556f4b3b4ca8e0e83df78d4da6c2d7cfcb4f610128556f4b3b4ca8f74dd2373a99c353c465863e610129556f4b3b4ca90db36676ee90c95d38bc8dc661012a556f4b3b4ca92418fab6a932b8df36d109a961012b5561012c556f4b3b4ca85cc42019fcf7fc9916c7068761012d556f4b3b4ca85f017bb9f076e8a405d0c2e361012e556f4b3b4ca8613ed759e406e660cd1db72a61012f556f4b3b4ca8637c32f9d7a7f5cf6cae6572610130556f4b3b4ca865b98e99cb5a16efe4834fd3610131556f4b3b4ca867f6ea39bf1d49c2349cf862610132556f4b3b4ca86a3445d9b2f18e465cfbe136610133556f4b3b4ca86c71a179a6d6e47c5da08c66610134556f4b3b4ca86eaefd199acd4c64368b7c086101355561024e805462ff0000191662010000179055565b6000678ac7230489e8000068056bc75e2d63100000830604610db983826014612a03565b9392505050565b6b012ced32a16a1b11e826288960261b6101fe8190556f4b3b4ca85a86c47a098a2240000a939b6101ff556f4b3b4ca85a86c47a098a224000152736610200556f4b3b4ca85a86c47a098a2240001fbad2610201556f4b3b4ca85a86c47a098a2240002a4e6d610202556f4b3b4ca85a86c47a098a22400034e208610203556f4b3b4ca85a86c47a098a2240003f75a3610204556f4b3b4ca85a86c47a098a2240004a093e610205556f4b3b4ca85a86c47a098a224000549cd9610206556f4b3b4ca85a86c47a098a2240005f3075610207556102088190556f4b3b4ca85a86c47a098a224000010ec3610209556f4b3b4ca85a86c47a098a224000021d8561020a556f4b3b4ca85a86c47a098a224000032c4861020b556f4b3b4ca85a86c47a098a224000043b0b61020c556f4b3b4ca85a86c47a098a2240000549ce61020d556f4b3b4ca85a86c47a098a22400006589061020e556f4b3b4ca85a86c47a098a22400007675361020f556f4b3b4ca85a86c47a098a224000087616610210556f4b3b4ca85a86c47a098a2240000984d8610211556102128190556f4b3b4ca85a86c47a098a224000001b13610213556f4b3b4ca85a86c47a098a224000003627610214556f4b3b4ca85a86c47a098a22400000513a610215556f4b3b4ca85a86c47a098a224000006c4e610216556f4b3b4ca85a86c47a098a224000008761610217556f4b3b4ca85a86c47a098a22400000a275610218556f4b3b4ca85a86c47a098a22400000bd88610219556f4b3b4ca85a86c47a098a22400000d89c61021a556f4b3b4ca85a86c47a098a22400000f3af61021b5561021c8190556f4b3b4ca85a86c47a098a2240000002b561021d556f4b3b4ca85a86c47a098a22400000056a61021e556f4b3b4ca85a86c47a098a22400000081f61021f556f4b3b4ca85a86c47a098a224000000ad5610220556f4b3b4ca85a86c47a098a224000000d8a610221556f4b3b4ca85a86c47a098a22400000103f610222556f4b3b4ca85a86c47a098a2240000012f4610223556f4b3b4ca85a86c47a098a2240000015a9610224556f4b3b4ca85a86c47a098a22400000185e610225556102268190556f4b3b4ca85a86c47a098a224000000045610227556f4b3b4ca85a86c47a098a22400000008b610228556f4b3b4ca85a86c47a098a2240000000d0610229556f4b3b4ca85a86c47a098a22400000011561022a556f4b3b4ca85a86c47a098a22400000015b61022b556f4b3b4ca85a86c47a098a2240000001a061022c556f4b3b4ca85a86c47a098a2240000001e561022d556f4b3b4ca85a86c47a098a22400000022b61022e556f4b3b4ca85a86c47a098a22400000027061022f556102308190556f4b3b4ca85a86c47a098a224000000007610231556f4b3b4ca85a86c47a098a22400000000e610232556f4b3b4ca85a86c47a098a224000000015610233556f4b3b4ca85a86c47a098a22400000001c610234556f4b3b4ca85a86c47a098a224000000023610235556f4b3b4ca85a86c47a098a22400000002a610236556f4b3b4ca85a86c47a098a224000000031610237556f4b3b4ca85a86c47a098a224000000037610238556f4b3b4ca85a86c47a098a22400000003e6102395561023a8190556f4b3b4ca85a86c47a098a22400000000161023b81905561023c8190556f4b3b4ca85a86c47a098a22400000000261023d556f4b3b4ca85a86c47a098a22400000000361023e81905561023f556f4b3b4ca85a86c47a098a224000000004610240556f4b3b4ca85a86c47a098a224000000005610241556f4b3b4ca85a86c47a098a2240000000066102428190556102435561024482905561024582905561024682905561024782905561024882905561024982905561024a82905561024b9190915561024c81905561024d5561024e805465ff0000000000191665010000000000179055565b6000670de0b6b3a764000083106113835761137c61137783611372866046611e65565b613375565b61290b565b90506113d5565b670de0b6b3a76400008310156113d55760006113b5836113726113ae670de0b6b3a764000088612230565b6046611e65565b90506113d1670de0b6b3a76400006113cc8361290b565b612230565b9150505b92915050565b6b012ced32a16a1b11e826288960261b61019a8190556f4b3b4ca85a86c47a09a2c2630abe4edd61019b556f4b3b4ca85a86c47a09bb6286157c9dba61019c556f4b3b4ca85a86c47a09d402a9203aec9761019d556f4b3b4ca85a86c47a09eca2cc2af93b7461019e556f4b3b4ca85a86c47a0a0542ef35b78a5161019f556f4b3b4ca85a86c47a0a1de3124075d92f6101a0556f4b3b4ca85a86c47a0a3683354b34280c6101a1556f4b3b4ca85a86c47a0a4f235855f276e96101a2556f4b3b4ca85a86c47a0a67c37b60b0c5c66101a3556101a48190556f4b3b4ca85a86c47a098c98a9e7796e496101a5556f4b3b4ca85a86c47a098f0f13cef2dc936101a6556f4b3b4ca85a86c47a0991857db66c4adc6101a7556f4b3b4ca85a86c47a0993fbe79de5b9256101a8556f4b3b4ca85a86c47a09967251855f276f6101a9556f4b3b4ca85a86c47a0998e8bb6cd895b86101aa556f4b3b4ca85a86c47a099b5f25545204016101ab556f4b3b4ca85a86c47a099dd58f3bcb724a6101ac556f4b3b4ca85a86c47a09a04bf92344e0946101ad556101ae8190556f4b3b4ca85a86c47a098a614a9725be3b6101af556f4b3b4ca85a86c47a098aa0552e4b7c756101b0556f4b3b4ca85a86c47a098adf5fc5713ab06101b1556f4b3b4ca85a86c47a098b1e6a5c96f8ea6101b2556f4b3b4ca85a86c47a098b5d74f3bcb7256101b3556f4b3b4ca85a86c47a098b9c7f8ae2755f6101b4556f4b3b4ca85a86c47a098bdb8a2208339a6101b5556f4b3b4ca85a86c47a098c1a94b92df1d46101b6556f4b3b4ca85a86c47a098c599f5053b00f6101b7556101b88190556f4b3b4ca85a86c47a098a288ddbea2c9f6101b9556f4b3b4ca85a86c47a098a2edbb7d4593f6101ba556f4b3b4ca85a86c47a098a352993be85de6101bb556f4b3b4ca85a86c47a098a3b776fa8b27e6101bc556f4b3b4ca85a86c47a098a41c54b92df1d6101bd556f4b3b4ca85a86c47a098a4813277d0bbd6101be556f4b3b4ca85a86c47a098a4e610367385c6101bf556f4b3b4ca85a86c47a098a54aedf5164fc6101c0556f4b3b4ca85a86c47a098a5afcbb3b919b6101c1556101c28190556f4b3b4ca85a86c47a098a22e162ca9e106101c3556f4b3b4ca85a86c47a098a2382c5953c206101c4556f4b3b4ca85a86c47a098a2424285fda306101c5556f4b3b4ca85a86c47a098a24c58b2a78406101c6556f4b3b4ca85a86c47a098a2566edf516506101c7556f4b3b4ca85a86c47a098a260850bfb4606101c8556f4b3b4ca85a86c47a098a26a9b38a52706101c9556f4b3b4ca85a86c47a098a274b1654f0806101ca556f4b3b4ca85a86c47a098a27ec791f8e906101cb556101cc8190556f4b3b4ca85a86c47a098a2250237aa9686101cd556f4b3b4ca85a86c47a098a226046f552d06101ce556f4b3b4ca85a86c47a098a22706a6ffc386101cf556f4b3b4ca85a86c47a098a22808deaa5a06101d0556f4b3b4ca85a86c47a098a2290b1654f086101d1556f4b3b4ca85a86c47a098a22a0d4dff8706101d2556f4b3b4ca85a86c47a098a22b0f85aa1d86101d3556f4b3b4ca85a86c47a098a22c11bd54b406101d4556f4b3b4ca85a86c47a098a22d13f4ff4a86101d5556101d68190556f4b3b4ca85a86c47a098a22419d25ddbe6101d7556f4b3b4ca85a86c47a098a22433a4bbb7b6101d8556f4b3b4ca85a86c47a098a2244d77199396101d9556f4b3b4ca85a86c47a098a2246749776f66101da556f4b3b4ca85a86c47a098a224811bd54b46101db556f4b3b4ca85a86c47a098a2249aee332726101dc556f4b3b4ca85a86c47a098a224b4c09102f6101dd556f4b3b4ca85a86c47a098a224ce92eeded6101de556f4b3b4ca85a86c47a098a224e8654cbaa6101df556101e08190556f4b3b4ca85a86c47a098a22402950962d6101e1556f4b3b4ca85a86c47a098a224052a12c596101e2556f4b3b4ca85a86c47a098a22407bf1c2866101e3556f4b3b4ca85a86c47a098a2240a54258b26101e4556f4b3b4ca85a86c47a098a2240ce92eedf6101e5556f4b3b4ca85a86c47a098a2240f7e3850b6101e6556f4b3b4ca85a86c47a098a224121341b386101e7556f4b3b4ca85a86c47a098a22414a84b1646101e8556f4b3b4ca85a86c47a098a224173d547916101e9556101ea8190556f4b3b4ca85a86c47a098a22400421a89e6101eb556f4b3b4ca85a86c47a098a22400843513c6101ec556f4b3b4ca85a86c47a098a22400c64f9da6101ed556f4b3b4ca85a86c47a098a22401086a2786101ee556f4b3b4ca85a86c47a098a224014a84b166101ef556f4b3b4ca85a86c47a098a224018c9f3b46101f0556f4b3b4ca85a86c47a098a22401ceb9c526101f1556f4b3b4ca85a86c47a098a2240210d44f06101f2556f4b3b4ca85a86c47a098a2240252eed8f6101f3556101f4556f4b3b4ca85a86c47a098a22400069c4106101f5556f4b3b4ca85a86c47a098a224000d388206101f6556f4b3b4ca85a86c47a098a2240013d4c2f6101f7556f4b3b4ca85a86c47a098a224001a7103f6101f8556f4b3b4ca85a86c47a098a22400210d44f6101f9556f4b3b4ca85a86c47a098a2240027a985f6101fa556f4b3b4ca85a86c47a098a224002e45c6f6101fb556f4b3b4ca85a86c47a098a2240034e207e6101fc556f4b3b4ca85a86c47a098a224003b7e48e6101fd5561024e805464ff000000001916640100000000179055565b600081611bb55750670de0b6b3a76400006113d5565b670de0b6b3a76400005b6001831115611c185760028306611be757611bda8485613375565b9350600283049250611c13565b6002830615611c1357611bfa8482613375565b9050611c068485613375565b9350600260001984010492505b611bbf565b6113d18482613375565b600081611c31575060016113d5565b60015b6001831115611c8d5760028306611c5c57611c4f8485613b5b565b9350600283049250611c88565b6002830615611c8857611c6f8482613b5b565b9050611c7b8485613b5b565b9350600260001984010492505b611c34565b6113d18482613b5b565b61024e5460009062010000900460ff1615156001148015611cc7575061024e546301000000900460ff1615156001145b8015611ce3575061024e54640100000000900460ff1615156001145b8015611d00575061024e5465010000000000900460ff1615156001145b611d51576040805162461bcd60e51b815260206004820181905260248201527f4c6f6f6b7570207461626c652033206d75737420666972737420626520736574604482015290519081900360640190fd5b68056bc75e2d631000008210158015611d725750680ad78ebc5ac620000082105b611dad5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c726022913960400191505060405180910390fd5b670de0b6b3a764000082026f96769950b50d88f413144480000000006b012ced32a16a1b11e826288960261b82066000611de6826122a7565b905060005b81811015611e5a57600081600a0a82600101600a0a8581611e0857fe5b0681611e1057fe5b04905080611e1e5750611e52565b600060c88360250360278110611e3057fe5b600a020182600a8110611e3f57fe5b01549050611e4d8682612205565b955050505b600101611deb565b509195945050505050565b6000670de0b6b3a7640000831015611eb9576040805162461bcd60e51b8152602060048201526012602482015271696e707574206d757374206265203e3d203160701b604482015290519081900360640190fd5b600080611ecf670de0b6b3a76400006002613b5b565b90505b671bc16d674ec800008510612154576b03782dace9d90000000000008510611f1757611f0a856b03782dace9d9000000000000612230565b9450601e8201915061214f565b69de0b6b3a7640000000008510611f4957611f3c8569de0b6b3a764000000000612230565b945060148201915061214f565b6906f05b59d3b2000000008510611f7b57611f6e856906f05b59d3b200000000612230565b9450600f8201915061214f565b683782dace9d900000008510611fab57611f9e85683782dace9d90000000612230565b9450600a8201915061214f565b681bc16d674ec80000008510611fdb57611fce85681bc16d674ec8000000612230565b945060098201915061214f565b680de0b6b3a764000000851061200b57611ffe85680de0b6b3a764000000612230565b945060088201915061214f565b6806f05b59d3b2000000851061203b5761202e856806f05b59d3b2000000612230565b945060078201915061214f565b6803782dace9d9000000851061206b5761205e856803782dace9d9000000612230565b945060068201915061214f565b6801bc16d674ec800000851061209b5761208e856801bc16d674ec800000612230565b945060058201915061214f565b67de0b6b3a7640000085106120c9576120bc8567de0b6b3a76400000612230565b945060048201915061214f565b676f05b59d3b20000085106120f7576120ea85676f05b59d3b200000612230565b945060038201915061214f565b673782dace9d90000085106121255761211885673782dace9d900000612230565b945060028201915061214f565b671bc16d674ec80000851061214f5761214685671bc16d674ec80000612230565b94506001820191505b611ed2565b6c0c9f2c9cd04674edea400000008202600061218f6c08bfade8cec3c65ca697cfbe7261218a846121858b8b613221565b613bb4565b6121b6565b905061219a8161228a565b979650505050505050565b68056bc75e2d631000008106900390565b6000806121c38484613b5b565b90506c0c9f2c9cd04674edea400000006121e1826002835b04613bb4565b816121e857fe5b04949350505050565b606481606481106121fe57fe5b0154905081565b6000806122128484613b5b565b90506b012ced32a16a1b11e826288960261b6121e1826002836121db565b60008061224584670de0b6b3a7640000613b5b565b9050826121e1826002836121db565b6000629896806305f5e100830604610db983826008612a03565b6000633b9aca006402540be400830604610db98382600a612a03565b600064174876e80064e8d4a51000830604610db98382600c612a03565b6000805b82156113d557600a830492506001016122ab565b6000816122dc57506b012ced32a16a1b11e826288960261b6113d5565b6b012ced32a16a1b11e826288960261b5b60018311156123465760028306612315576123088485612205565b9350600283049250612341565b6002830615612341576123288482612205565b90506123348485612205565b9350600260001984010492505b6122ed565b6113d18482612205565b6f96769950b50d88f413144480000000006064556f259da6542d43623d04c51120000000006065556f12ced32a16a1b11e82628890000000006066556f096769950b50d88f41314448000000006067556f04b3b4ca85a86c47a098a224000000006068556f0259da6542d43623d04c5112000000006069556f012ced32a16a1b11e826288900000000606a556e96769950b50d88f413144480000000606b556e4b3b4ca85a86c47a098a2240000000606c556e259da6542d43623d04c51120000000606d556e12ced32a16a1b11e82628890000000606e556e096769950b50d88f41314448000000606f556e04b3b4ca85a86c47a098a2240000006070556e0259da6542d43623d04c51120000006071556e012ced32a16a1b11e82628890000006072556d96769950b50d88f41314448000006073556d4b3b4ca85a86c47a098a224000006074556d259da6542d43623d04c5112000006075556d12ced32a16a1b11e8262889000006076556d096769950b50d88f4131444800006077556d04b3b4ca85a86c47a098a22400006078556d0259da6542d43623d04c511200006079556d012ced32a16a1b11e82628890000607a556c96769950b50d88f41314448000607b556c4b3b4ca85a86c47a098a224000607c556c259da6542d43623d04c5112000607d556c12ced32a16a1b11e8262889000607e556c096769950b50d88f4131444800607f556c04b3b4ca85a86c47a098a224006080556c0259da6542d43623d04c5112006081556c012ced32a16a1b11e8262889006082556b96769950b50d88f4131444806083556b4b3b4ca85a86c47a098a22406084556b259da6542d43623d04c511206085556b12ced32a16a1b11e826288906086556b096769950b50d88f413144486087556b04b3b4ca85a86c47a098a2246088556b0259da6542d43623d04c51126089556b012ced32a16a1b11e8262889608a556a96769950b50d88f4131444608b556a4b3b4ca85a86c47a098a22608c556a259da6542d43623d04c511608d556a12ced32a16a1b11e826288608e556a096769950b50d88f413144608f556a04b3b4ca85a86c47a098a26090556a0259da6542d43623d04c516091556a012ced32a16a1b11e826286092556996769950b50d88f41314609355694b3b4ca85a86c47a098a60945569259da6542d43623d04c56095556912ced32a16a1b11e826260965569096769950b50d88f41316097556904b3b4ca85a86c47a098609855690259da6542d43623d04c60995569012ced32a16a1b11e826609a556896769950b50d88f413609b55684b3b4ca85a86c47a09609c5568259da6542d43623d04609d556812ced32a16a1b11e82609e5568096769950b50d88f41609f556804b3b4ca85a86c47a060a055680259da6542d43623d060a15568012ced32a16a1b11e860a2556796769950b50d88f460a355674b3b4ca85a86c47a60a45567259da6542d43623d60a5556712ced32a16a1b11e60a65567096769950b50d88f60a7556704b3b4ca85a86c4760a855670259da6542d4362360a95567012ced32a16a1b1160aa556696769950b50d8860ab55664b3b4ca85a86c460ac5566259da6542d436260ad556612ced32a16a1b160ae5566096769950b50d860af556604b3b4ca85a86c60b055660259da6542d43660b15566012ced32a16a1b60b2556596769950b50d60b355654b3b4ca85a8660b45565259da6542d4360b5556512ced32a16a160b65565096769950b5060b7556504b3b4ca85a860b855650259da6542d460b95565012ced32a16a60ba556496769950b560bb55644b3b4ca85a60bc5564259da6542d60bd556412ced32a1660be5564096769950b60bf556404b3b4ca8560c055640259da654260c15564012ced32a160c255639676995060c355634b3b4ca860c45563259da65460c5556312ced32a60c655630967699560c75561024e805461ff001916610100179055565b60c882602781106128f357fe5b600a020181600a811061290257fe5b01549150829050565b6000806000806129208564e8d4a51000613b5b565b94506129396c1235995e1e4b3c4c2e092eb92a866121b6565b94506129448561226e565b945068056bc75e2d631000008510801561295c575060015b156129a25761297468056bc75e2d6310000086613bb4565b91506f259da6542d43623d04c5112000000000905061299b8161299684611c97565b612205565b93506129f1565b68056bc75e2d631000006129b5866121a5565b03925082850391506129da60026129d58568056bc75e2d63100000613bf8565b611c22565b90506129ee816129e984611c97565b613b5b565b93505b6129fa84610d95565b95945050505050565b60006005831015612a2257612a1b8483600a0a613bf8565b9050610db9565b60058310610db957612a378483600a0a613bf8565b600101949350505050565b600081606481106121fe57fe5b600080556f35326198caa4cf0398dd2df4a401fff860019081556f3f43136bbc1145a3d84ccd8fde8050606002556f44fcdaff61cc4ceae78af7acfc2dcb346003556f480ac4b15dff81588c37988631acc6496004556f499e9cc45b22529d4b6abaa6c727fa206005556f4a6bd6a98878b7e749bca36139d8d4396006556f4ad349c2776ffca447fac2991089d4966007556f4b07392f52b5c840e2f500a685315e106008556f4b213e68c12287618b384447416493666009556f4b2e4467966940f3e15f711b485e0c54600a556f4b34c83fb45aa7f02968d3f10c7bf179600b556f4b380a61f5a1002253dd42289d3f4eac600c556f4b39ab80a386e7ea4aa8befbc274a593600d556f4b3a7c135de075ee193ece3e8ec0de14600e556f4b3ae45d93e9a0ecb716a961237770f6600f556f4b3b1882e525a71aafc82b1e629fd4f66010556f4b3b32959b519153545560036c6f85a76011556f4b3b3f9ef9cb0196d145667cf95b88916012556f4b3b4623a9e098ae32898d76368829126013556f4b3b496602219bfcc6e3c6e7270bab636014556f4b3b4b072e4fab95795f9efc3a14fb8d6015556f4b3b4bd7c46a16de429d50fdc920a2e56016556f4b3b4c400f782561c5f99e6e8cc40d766017556f4b3b4c7434ff62db4faed2a218e2ba686018556f4b3b4c8e47c30f26069626269d2ce2996019556f4b3b4c9b5124e8aede8e5d050e398bb3601a556f4b3b4ca1d5d5d64c29abc79382732075601b556f4b3b4ca5182e4d510702d61d917cca2f601c556f4b3b4ca6b95a88e103a07462aefce70c601d556f4b3b4ca789f0a6ac656bc95b2f53ca62601e556f4b3b4ca7f23bb592ef30954fa967f1b3601f556f4b3b4ca826613d066a4ac3a84c9c92d46020556f4b3b4ca8407400c03565ccec42b792c36021556f4b3b4ca84d7d629d1e56ce14284400136022556f4b3b4ca85402138b93a82dc995d5ca426023556f4b3b4ca857446c02ce87156cab570f406024556f4b3b4ca858e5983e6c0417304dc6791a6025556f4b3b4ca859b62e5c3ac5fb8ea4e9f5ca6026556f4b3b4ca85a1e796b2227c69cf1f6a8d06027556f4b3b4ca85a529ef295d8e25be0dbbfd66028556f4b3b4ca85a6cb1b64fb17dc94a65fac56029556f4b3b4ca85a79bb182c9dcee37bb10419602a556f4b3b4ca85a803fc91b13f849737803ba602b556f4b3b4ca85a838221924f0d32a723e248602c556f4b3b4ca85a85234dcdec97b4ceebe93f602d556f4b3b4ca85a85f3e3ebbb5cf9464c72a6602e556f4b3b4ca85a865c2efaa2bf9c5adbd8d5602f556f4b3b4ca85a869054821670ee1b5b544b6030556f4b3b4ca85a86aa6745d049970929041e6031556f4b3b4ca85a86b770a7ad35eb8373588d6032556f4b3b4ca85a86bdf5589bac15c17161e66033556f4b3b4ca85a86c137b112e72ae0a69e5b6034556f4b3b4ca85a86c2d8dd4e84b5704eca876035556f4b3b4ca85a86c3a9736c537ab826441a6036556f4b3b4ca85a86c411be7b3add5c12d9c36037556f4b3b4ca85a86c445e402ae8eae095acf6038556f4b3b4ca85a86c45ff6c668675704a8e36039556f4b3b4ca85a86c46d00284553ab825350603a556f4b3b4ca85a86c47384d933c9d5c12960603b556f4b3b4ca85a86c476c731ab04eae0949e603c556f4b3b4ca85a86c478685de6a275704a4a603d556f4b3b4ca85a86c47938f404713ab82524603e556f4b3b4ca85a86c479a13f13589d5c1292603f556f4b3b4ca85a86c479d5649acc4eae09496040556f4b3b4ca85a86c479ef775e86275704a46041556f4b3b4ca85a86c479fc80c06313ab82526042556f4b3b4ca85a86c47a0305715189d5c1296043556f4b3b4ca85a86c47a0647c9c8c4eae0956044556f4b3b4ca85a86c47a07e8f6046275704a6045556f4b3b4ca85a86c47a08b98c22313ab8256046556f4b3b4ca85a86c47a0921d731189d5c136047556f4b3b4ca85a86c47a0955fcb88c4eae096048556f4b3b4ca85a86c47a09700f7c462757056049556f4b3b4ca85a86c47a097d18de2313ab82604a556f4b3b4ca85a86c47a09839d8f1189d5c1604b556f4b3b4ca85a86c47a0986dfe788c4eae1604c556f4b3b4ca85a86c47a09888113c4627570604d556f4b3b4ca85a86c47a098951a9e2313ab8604e556f4b3b4ca85a86c47a0989b9f4f1189d5c604f556f4b3b4ca85a86c47a0989ee1a788c4eae6050556f4b3b4ca85a86c47a098a082d3c4627576051556f4b3b4ca85a86c47a098a15369e2313ac6052556f4b3b4ca85a86c47a098a1bbb4f1189d66053556f4b3b4ca85a86c47a098a1efda788c4eb6054556f4b3b4ca85a86c47a098a209ed3c462756055556f4b3b4ca85a86c47a098a216f69e2313b6056556f4b3b4ca85a86c47a098a21d7b4f1189d6057556f4b3b4ca85a86c47a098a220bda788c4f6058556f4b3b4ca85a86c47a098a2225ed3c46276059556f4b3b4ca85a86c47a098a2232f69e2314605a556f4b3b4ca85a86c47a098a22397b4f118a605b556f4b3b4ca85a86c47a098a223cbda788c5605c556f4b3b4ca85a86c47a098a223e5ed3c462605d556f4b3b4ca85a86c47a098a223f2f69e231605e556f4b3b4ca85a86c47a098a223f97b4f119605f556f4b3b4ca85a86c47a098a223fcbda788c6060556f4b3b4ca85a86c47a098a223fe5ed3c466061556f4b3b4ca85a86c47a098a223ff2f69e236062556f4b3b4ca85a86c47a098a223ff97b4f1260635561024e805460ff19169091179055565b61024e5460009060ff161515600114801561324a575061024e5460ff6101009091041615156001145b6132855760405162461bcd60e51b8152600401808060200182810382526025815260200180613c4d6025913960400191505060405180910390fd5b670de0b6b3a764000083101580156132a45750671bc16d674ec8000083105b6132df5760405162461bcd60e51b8152600401808060200182810382526022815260200180613c726022913960400191505060405180910390fd5b60006132f48468056bc75e2d63100000613b5b565b90506b012ced32a16a1b11e826288960261b600060015b8581116133615761332a6000826064811061332257fe5b015485612205565b92506b012ced32a16a1b11e826288960261b8310613359578293506064816064811061335257fe5b0154820191505b60010161330b565b5061336b81612254565b9695505050505050565b6000806133828484613b5b565b9050670de0b6b3a76400006121e1826002836121db565b6b012ced32a16a1b11e826288960261b6101368190556f4b3b4ca85ac01a706eadf372d36d1338610137556f4b3b4ca85af97066d3d1f05811f9885d610138556f4b3b4ca85b32c65d38f618efbba55f91610139556f4b3b4ca85b6c1c539e1a6d39d07098f561013a556f4b3b4ca85ba5724a033eed36505b34aa61013b556f4b3b4ca85bdec840686398e53b6532d261013c556f4b3b4ca85c181e36cd887046918e938e61013d556f4b3b4ca85c51742d32ad735a52d7570061013e556f4b3b4ca85c8aca2397d2a2207f3f7d4761013f556101408190556f4b3b4ca85a8c8045e0741b9a7e66ef70610141556f4b3b4ca85a923c11b75e1564da09107f610142556f4b3b4ca85a97f7dd8e480f9f12e6632c610143556f4b3b4ca85a9db3a965320a4928fee777610144556f4b3b4ca85aa36f753c1c05631c529d60610145556f4b3b4ca85aa92b41130600ecece184e8610146556f4b3b4ca85aaee70ce9effce69aab9e0e610147556f4b3b4ca85ab4a2d8c0d9f95025b0e8d3610148556f4b3b4ca85aba5ea497c3f6298df165366101495561014a8190556f4b3b4ca85a8757419f07ee5d9d9096fe61014b556f4b3b4ca85a87ea093485ba7c59807dd761014c556f4b3b4ca85a887cd0ca03869c33cfb48b61014d556f4b3b4ca85a890f985f8152bd2c7e3b1a61014e556f4b3b4ca85a89a25ff4ff1edf438c118461014f556f4b3b4ca85a8a35278a7ceb0278f937ca610150556f4b3b4ca85a8ac7ef1ffab726ccc5adeb610151556f4b3b4ca85a8b5ab6b578834c3ef173e7610152556f4b3b4ca85a8bed7e4af64f72cf7c89be610153556101548190556f4b3b4ca85a86d327987d1d0fb611d996610155556f4b3b4ca85a86e1d5277017df6f00d021610156556f4b3b4ca85a86f082b66312af2acce3a2610157556f4b3b4ca85a86ff3045560d7ee9761418610158556f4b3b4ca85a870dddd449084eaafc6183610159556f4b3b4ca85a871c8b633c031e6f5fcbe461015a556f4b3b4ca85a872b38f22efdee36a0533b61015b556f4b3b4ca85a8739e68121f8be00bdf78661015c556f4b3b4ca85a8748941014f38dcdb8b8c761015d5561015e8190556f4b3b4ca85a86c5f1cb08d4ee5ee0cb7f61015f556f4b3b4ca85a86c7698c87879cbdc8ebc3610160556f4b3b4ca85a86c8e14e063a4b1cb860cc610161556f4b3b4ca85a86ca590f84ecf97baf2a99610162556f4b3b4ca85a86cbd0d1039fa7daad492c610163556f4b3b4ca85a86cd489282525639b2bc84610164556f4b3b4ca85a86cec05401050498bf84a1610165556f4b3b4ca85a86d038157fb7b2f7d3a183610166556f4b3b4ca85a86d1afd6fe6a6156ef132a610167556101688190556f4b3b4ca85a86c49f9ce39a84a316264b610169556f4b3b4ca85a86c4c5303d12c9462c5f5c61016a556f4b3b4ca85a86c4eac3968b0de942ab3061016b556f4b3b4ca85a86c51056f003528c5909c961016c556f4b3b4ca85a86c535ea497b972f6f7b2761016d556f4b3b4ca85a86c55b7da2f3dbd285ff4961016e556f4b3b4ca85a86c58110fc6c20759c963061016f556f4b3b4ca85a86c5a6a455e46518b33fdb610170556f4b3b4ca85a86c5cc37af5ca9bbc9fc4b610171556101728190556f4b3b4ca85a86c47dcb797b13a9e89c96610173556f4b3b4ca85a86c4818d68d3e753d1395c610174556f4b3b4ca85a86c4854f582cbafdb9d651610175556f4b3b4ca85a86c4891147858ea7a27377610176556f4b3b4ca85a86c48cd336de62518b10cd610177556f4b3b4ca85a86c49095263735fb73ae53610178556f4b3b4ca85a86c49457159009a55c4c09610179556f4b3b4ca85a86c4981904e8dd4f44e9ef61017a556f4b3b4ca85a86c49bdaf441b0f92d880561017b5561017c8190556f4b3b4ca85a86c47a69bbab21f7640fa661017d556f4b3b4ca85a86c47ac9ed3403eec81f4d61017e556f4b3b4ca85a86c47b2a1ebce5e62c2ef561017f556f4b3b4ca85a86c47b8a5045c7dd903e9d610180556f4b3b4ca85a86c47bea81cea9d4f44e45610181556f4b3b4ca85a86c47c4ab3578bcc585dee610182556f4b3b4ca85a86c47caae4e06dc3bc6d97610183556f4b3b4ca85a86c47d0b16694fbb207d41610184556f4b3b4ca85a86c47d6b47f231b2848ceb610185556101868190556f4b3b4ca85a86c47a1328aff03256ce5d610187556f4b3b4ca85a86c47a1cc73da064ad9cbb610188556f4b3b4ca85a86c47a2665cb5097046b18610189556f4b3b4ca85a86c47a30045900c95b397661018a556f4b3b4ca85a86c47a39a2e6b0fbb207d361018b556f4b3b4ca85a86c47a434174612e08d63161018c556f4b3b4ca85a86c47a4ce00211605fa48e61018d556f4b3b4ca85a86c47a567e8fc192b672eb61018e556f4b3b4ca85a86c47a601d1d71c50d414961018f55610190556f4b3b4ca85a86c47a0a80639e6b6f14a3610191556f4b3b4ca85a86c47a0b76a4fcd6de2946610192556f4b3b4ca85a86c47a0c6ce65b424d3de9610193556f4b3b4ca85a86c47a0d6327b9adbc528c610194556f4b3b4ca85a86c47a0e596918192b672f610195556f4b3b4ca85a86c47a0f4faa76849a7bd2610196556f4b3b4ca85a86c47a1045ebd4f0099075610197556f4b3b4ca85a86c47a113c2d335b78a518610198556f4b3b4ca85a86c47a12326e91c6e7b9ba6101995561024e805463ff00000019166301000000179055565b600082613b6a575060006113d5565b82820282848281613b7757fe5b0414610db95760405162461bcd60e51b8152600401808060200182810382526021815260200180613c946021913960400191505060405180910390fd5b600082820183811015610db95760405162461bcd60e51b8152600401808060200182810382526021815260200180613c946021913960400191505060405180910390fd5b6000808211613c41576040805162461bcd60e51b815260206004820152601060248201526f6469766973696f6e206279207a65726f60801b604482015290519081900360640190fd5b60008284816121e857fefe4c6f6f6b7570207461626c6573203120262032206d75737420666972737420626520736574696e7075742078206d7573742062652077697468696e2072616e6765205b312c325b75696e74206f766572666c6f772066726f6d206d756c7469706c69636174696f6ea265627a7a7231582017a051d09a0940c56fc2604ed1ba47a74e59b940900fcb8951b76649db1e2ad364736f6c63430005100032
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.