Overview
S Balance
0 S
S Value
$0.00More Info
Private Name Tags
ContractCreator
Loading...
Loading
Contract Name:
GetPoolsPriceData
Compiler Version
v0.8.19+commit.7dd6d404
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import {Strings} from "@openzeppelin/contracts/utils/Strings.sol"; interface PoolV2{ function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast); } interface PoolV2Balancerfi{ function getPriceData(address pool) external view returns (uint48 swapFee, address[] memory tokens, uint112[] memory balances); } interface PoolV2Beets{ function getPriceData(address pool) external view returns (uint48 swapFee, address[] memory tokens, uint112[] memory balances); } interface PoolV3Uniswap{ function fee() external view returns (uint24); function slot0() external view returns ( uint160 sqrtPriceX96, int24 tick, uint16 observationIndex, uint16 observationCardinality, uint16 observationCardinalityNext, uint8 feeProtocol, bool unlocked ); } interface PoolV3Quickswap{ function globalState() external view returns ( uint160 price, int24 tick, uint16 fee, uint16 timepointIndex, uint8 communityFeeToken0, uint8 communityFeeToken1, bool unlocked ); } interface PoolV3Swapx{ function globalState() external view returns ( uint160 price, int24 tick, uint16 lastFee, uint8 pluginConfig, uint16 communityFee, bool unlocked ); } contract GetPoolsPriceData{ function addressToString(address _address) internal pure returns (string memory) { bytes32 value = bytes32(uint256(uint160(_address))); // Convert address to bytes32 bytes memory bytesString = new bytes(32); for (uint256 j = 0; j < 32; j++) { bytesString[j] = value[j]; } return string(bytesString); } function equalStrings(string memory string1, string memory string2) internal pure returns (bool) { return keccak256(abi.encodePacked(string1)) == keccak256(abi.encodePacked(string2)); } function getPoolsPriceData(address[] memory pools, uint[] memory poolsVersion, string[] memory poolsDEX) external view returns (uint112[] memory amounts0, uint112[] memory amounts1, uint160[] memory sqrtPrices, uint48[] memory fees){ uint sizePools = pools.length; uint sizePoolsVersion = poolsVersion.length; uint sizePoolsDEX = poolsDEX.length; //check the sizes if(sizePools != sizePoolsVersion || sizePoolsVersion != sizePoolsDEX){ revert( string.concat("Different array sizes for inputs (", Strings.toString(sizePools), ", ", Strings.toString(sizePoolsVersion), ", ", Strings.toString(sizePoolsDEX), ")") ); } //initialize return arrays amounts0 = new uint112[](sizePools); amounts1 = new uint112[](sizePools); sqrtPrices = new uint160[](sizePools); fees = new uint48[](sizePools); for(uint i = 0; i < sizePools; i++){ //init amounts0[i] = 0; amounts1[i] = 0; sqrtPrices[i] = 0; fees[i] = 0; //prepare given data address poolAddress = pools[i]; uint poolVersion = poolsVersion[i]; string memory poolDEX = poolsDEX[i]; //get data if(poolVersion == 2){ if(equalStrings(poolDEX, "Balancerfi2")){ PoolV2Balancerfi poolSC = PoolV2Balancerfi(0x1Fc3a9D7FfEfc3B808f04e6db3c86E6612B7848A); (uint48 swapFee, , uint112[] memory balances) = poolSC.getPriceData(poolAddress); fees[i] = swapFee; amounts0[i] = balances[0]; amounts1[i] = balances[1]; }else if(equalStrings(poolDEX, "Beets2")){ PoolV2Beets poolSC = PoolV2Beets(0xb6a3F882Ed0f43b520E53Dc9421fce19E43d0e79); (uint48 swapFee, , uint112[] memory balances) = poolSC.getPriceData(poolAddress); fees[i] = swapFee; amounts0[i] = balances[0]; amounts1[i] = balances[1]; }else{ PoolV2 poolSC = PoolV2(poolAddress); (amounts0[i], amounts1[i], ) = poolSC.getReserves(); } }else if(poolVersion == 3){ if(equalStrings(poolDEX, "US")){ //uniswap PoolV3Uniswap poolSC = PoolV3Uniswap(poolAddress); (sqrtPrices[i], , , , , , ) = poolSC.slot0(); fees[i] = poolSC.fee(); }else if(equalStrings(poolDEX, "QS")){ //quickswap PoolV3Quickswap poolSC = PoolV3Quickswap(poolAddress); (sqrtPrices[i], , fees[i], , , , ) = poolSC.globalState(); }else if(equalStrings(poolDEX, "SWAPX")){ PoolV3Swapx poolSC = PoolV3Swapx(poolAddress); (sqrtPrices[i], , fees[i], , , ) = poolSC.globalState(); }else{ revert( string.concat("Unknown DEX for: ", addressToString(poolAddress), " - ", Strings.toString(poolVersion), " - ", poolDEX) ); } }else{ revert( string.concat("Unknown Version for: ", addressToString(poolAddress), " - ", Strings.toString(poolVersion), " - ", poolDEX) ); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.0; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol) pragma solidity ^0.8.0; import "./math/Math.sol"; import "./math/SignedMath.sol"; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address[]","name":"pools","type":"address[]"},{"internalType":"uint256[]","name":"poolsVersion","type":"uint256[]"},{"internalType":"string[]","name":"poolsDEX","type":"string[]"}],"name":"getPoolsPriceData","outputs":[{"internalType":"uint112[]","name":"amounts0","type":"uint112[]"},{"internalType":"uint112[]","name":"amounts1","type":"uint112[]"},{"internalType":"uint160[]","name":"sqrtPrices","type":"uint160[]"},{"internalType":"uint48[]","name":"fees","type":"uint48[]"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405234801561001057600080fd5b506123a4806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063cfa08f4a14610030575b600080fd5b61004a6004803603810190610045919061158e565b610063565b60405161005a949392919061189b565b60405180910390f35b606080606080600087519050600087519050600087519050818314158061008a5750808214155b156101075761009883610dc5565b6100a183610dc5565b6100aa83610dc5565b6040516020016100bc93929190611a2b565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100fe9190611ade565b60405180910390fd5b8267ffffffffffffffff8111156101215761012061115e565b5b60405190808252806020026020018201604052801561014f5781602001602082028036833780820191505090505b5096508267ffffffffffffffff81111561016c5761016b61115e565b5b60405190808252806020026020018201604052801561019a5781602001602082028036833780820191505090505b5095508267ffffffffffffffff8111156101b7576101b661115e565b5b6040519080825280602002602001820160405280156101e55781602001602082028036833780820191505090505b5094508267ffffffffffffffff8111156102025761020161115e565b5b6040519080825280602002602001820160405280156102305781602001602082028036833780820191505090505b50935060005b83811015610db857600088828151811061025357610252611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff1681525050600087828151811061029657610295611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff168152505060008682815181106102d9576102d8611b00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600085828151811061032857610327611b00565b5b602002602001019065ffffffffffff16908165ffffffffffff168152505060008b828151811061035b5761035a611b00565b5b6020026020010151905060008b838151811061037a57610379611b00565b5b6020026020010151905060008b848151811061039957610398611b00565b5b6020026020010151905060028203610856576103ea816040518060400160405280600b81526020017f42616c616e636572666932000000000000000000000000000000000000000000815250610e93565b15610583576000731fc3a9d7ffefc3b808f04e6db3c86e6612b7848a90506000808273ffffffffffffffffffffffffffffffffffffffff166372279ba1876040518263ffffffff1660e01b81526004016104449190611b3e565b600060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061048a9190611d20565b9250509150818b88815181106104a3576104a2611b00565b5b602002602001019065ffffffffffff16908165ffffffffffff1681525050806000815181106104d5576104d4611b00565b5b60200260200101518e88815181106104f0576104ef611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff16815250508060018151811061053257610531611b00565b5b60200260200101518d888151811061054d5761054c611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff1681525050505050610851565b6105c2816040518060400160405280600681526020017f4265657473320000000000000000000000000000000000000000000000000000815250610e93565b1561075b57600073b6a3f882ed0f43b520e53dc9421fce19e43d0e7990506000808273ffffffffffffffffffffffffffffffffffffffff166372279ba1876040518263ffffffff1660e01b815260040161061c9190611b3e565b600060405180830381865afa158015610639573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906106629190611d20565b9250509150818b888151811061067b5761067a611b00565b5b602002602001019065ffffffffffff16908165ffffffffffff1681525050806000815181106106ad576106ac611b00565b5b60200260200101518e88815181106106c8576106c7611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff16815250508060018151811061070a57610709611b00565b5b60200260200101518d888151811061072557610724611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff1681525050505050610850565b60008390508073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190611de7565b508d87815181106107e3576107e2611b00565b5b602002602001018d88815181106107fd576107fc611b00565b5b60200260200101826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815250826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152505050505b5b610da2565b60038203610d315761089d816040518060400160405280600281526020017f5553000000000000000000000000000000000000000000000000000000000000815250610e93565b15610a215760008390508073ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109169190611f4a565b9091929394509091929350909192509091509050508a868151811061093e5761093d611b00565b5b602002602001018173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e59190612027565b62ffffff168986815181106109fd576109fc611b00565b5b602002602001019065ffffffffffff16908165ffffffffffff168152505050610d2c565b610a60816040518060400160405280600281526020017f5153000000000000000000000000000000000000000000000000000000000000815250610e93565b15610b705760008390508073ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160e060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad99190612054565b9091929394508461ffff169450909192509091509050508b8781518110610b0357610b02611b00565b5b602002602001018b8881518110610b1d57610b1c611b00565b5b602002602001018265ffffffffffff1665ffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505050610d2b565b610baf816040518060400160405280600581526020017f5357415058000000000000000000000000000000000000000000000000000000815250610e93565b15610cba5760008390508073ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015610c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2891906120f6565b90919293508361ffff1693509091509050508b8781518110610c4d57610c4c611b00565b5b602002602001018b8881518110610c6757610c66611b00565b5b602002602001018265ffffffffffff1665ffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505050610d2a565b610cc383610eec565b610ccc83610dc5565b82604051602001610cdf939291906121cf565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d219190611ade565b60405180910390fd5b5b5b610da1565b610d3a83610eec565b610d4383610dc5565b82604051602001610d5693929190612253565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d989190611ade565b60405180910390fd5b5b5050508080610db0906122e0565b915050610236565b5050505093509350935093565b606060006001610dd484610fe1565b01905060008167ffffffffffffffff811115610df357610df261115e565b5b6040519080825280601f01601f191660200182016040528015610e255781602001600182028036833780820191505090505b509050600082602001820190505b600115610e88578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610e7c57610e7b612328565b5b04945060008503610e33575b819350505050919050565b600081604051602001610ea69190612357565b6040516020818303038152906040528051906020012083604051602001610ecd9190612357565b6040516020818303038152906040528051906020012014905092915050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b90506000602067ffffffffffffffff811115610f2957610f2861115e565b5b6040519080825280601f01601f191660200182016040528015610f5b5781602001600182028036833780820191505090505b50905060005b6020811015610fd657828160208110610f7d57610f7c611b00565b5b1a60f81b828281518110610f9457610f93611b00565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610fce906122e0565b915050610f61565b508092505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061103f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161103557611034612328565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061107c576d04ee2d6d415b85acef8100000000838161107257611071612328565b5b0492506020810190505b662386f26fc1000083106110ab57662386f26fc1000083816110a1576110a0612328565b5b0492506010810190505b6305f5e10083106110d4576305f5e10083816110ca576110c9612328565b5b0492506008810190505b61271083106110f95761271083816110ef576110ee612328565b5b0492506004810190505b6064831061111c576064838161111257611111612328565b5b0492506002810190505b600a831061112b576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6111968261114d565b810181811067ffffffffffffffff821117156111b5576111b461115e565b5b80604052505050565b60006111c8611134565b90506111d4828261118d565b919050565b600067ffffffffffffffff8211156111f4576111f361115e565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112358261120a565b9050919050565b6112458161122a565b811461125057600080fd5b50565b6000813590506112628161123c565b92915050565b600061127b611276846111d9565b6111be565b9050808382526020820190506020840283018581111561129e5761129d611205565b5b835b818110156112c757806112b38882611253565b8452602084019350506020810190506112a0565b5050509392505050565b600082601f8301126112e6576112e5611148565b5b81356112f6848260208601611268565b91505092915050565b600067ffffffffffffffff82111561131a5761131961115e565b5b602082029050602081019050919050565b6000819050919050565b61133e8161132b565b811461134957600080fd5b50565b60008135905061135b81611335565b92915050565b600061137461136f846112ff565b6111be565b9050808382526020820190506020840283018581111561139757611396611205565b5b835b818110156113c057806113ac888261134c565b845260208401935050602081019050611399565b5050509392505050565b600082601f8301126113df576113de611148565b5b81356113ef848260208601611361565b91505092915050565b600067ffffffffffffffff8211156114135761141261115e565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff8211156114445761144361115e565b5b61144d8261114d565b9050602081019050919050565b82818337600083830152505050565b600061147c61147784611429565b6111be565b90508281526020810184848401111561149857611497611424565b5b6114a384828561145a565b509392505050565b600082601f8301126114c0576114bf611148565b5b81356114d0848260208601611469565b91505092915050565b60006114ec6114e7846113f8565b6111be565b9050808382526020820190506020840283018581111561150f5761150e611205565b5b835b8181101561155657803567ffffffffffffffff81111561153457611533611148565b5b80860161154189826114ab565b85526020850194505050602081019050611511565b5050509392505050565b600082601f83011261157557611574611148565b5b81356115858482602086016114d9565b91505092915050565b6000806000606084860312156115a7576115a661113e565b5b600084013567ffffffffffffffff8111156115c5576115c4611143565b5b6115d1868287016112d1565b935050602084013567ffffffffffffffff8111156115f2576115f1611143565b5b6115fe868287016113ca565b925050604084013567ffffffffffffffff81111561161f5761161e611143565b5b61162b86828701611560565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61168481611661565b82525050565b6000611696838361167b565b60208301905092915050565b6000602082019050919050565b60006116ba82611635565b6116c48185611640565b93506116cf83611651565b8060005b838110156117005781516116e7888261168a565b97506116f2836116a2565b9250506001810190506116d3565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6117428161120a565b82525050565b60006117548383611739565b60208301905092915050565b6000602082019050919050565b60006117788261170d565b6117828185611718565b935061178d83611729565b8060005b838110156117be5781516117a58882611748565b97506117b083611760565b925050600181019050611791565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600065ffffffffffff82169050919050565b611812816117f7565b82525050565b60006118248383611809565b60208301905092915050565b6000602082019050919050565b6000611848826117cb565b61185281856117d6565b935061185d836117e7565b8060005b8381101561188e5781516118758882611818565b975061188083611830565b925050600181019050611861565b5085935050505092915050565b600060808201905081810360008301526118b581876116af565b905081810360208301526118c981866116af565b905081810360408301526118dd818561176d565b905081810360608301526118f1818461183d565b905095945050505050565b600081905092915050565b7f446966666572656e742061727261792073697a657320666f7220696e7075747360008201527f2028000000000000000000000000000000000000000000000000000000000000602082015250565b60006119636022836118fc565b915061196e82611907565b602282019050919050565b600081519050919050565b60005b838110156119a2578082015181840152602081019050611987565b60008484015250505050565b60006119b982611979565b6119c381856118fc565b93506119d3818560208601611984565b80840191505092915050565b7f2c20000000000000000000000000000000000000000000000000000000000000815250565b7f2900000000000000000000000000000000000000000000000000000000000000815250565b6000611a3682611956565b9150611a4282866119ae565b9150611a4d826119df565b600282019150611a5d82856119ae565b9150611a68826119df565b600282019150611a7882846119ae565b9150611a8382611a05565b600182019150819050949350505050565b600082825260208201905092915050565b6000611ab082611979565b611aba8185611a94565b9350611aca818560208601611984565b611ad38161114d565b840191505092915050565b60006020820190508181036000830152611af88184611aa5565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b611b388161122a565b82525050565b6000602082019050611b536000830184611b2f565b92915050565b611b62816117f7565b8114611b6d57600080fd5b50565b600081519050611b7f81611b59565b92915050565b600081519050611b948161123c565b92915050565b6000611bad611ba8846111d9565b6111be565b90508083825260208201905060208402830185811115611bd057611bcf611205565b5b835b81811015611bf95780611be58882611b85565b845260208401935050602081019050611bd2565b5050509392505050565b600082601f830112611c1857611c17611148565b5b8151611c28848260208601611b9a565b91505092915050565b600067ffffffffffffffff821115611c4c57611c4b61115e565b5b602082029050602081019050919050565b611c6681611661565b8114611c7157600080fd5b50565b600081519050611c8381611c5d565b92915050565b6000611c9c611c9784611c31565b6111be565b90508083825260208201905060208402830185811115611cbf57611cbe611205565b5b835b81811015611ce85780611cd48882611c74565b845260208401935050602081019050611cc1565b5050509392505050565b600082601f830112611d0757611d06611148565b5b8151611d17848260208601611c89565b91505092915050565b600080600060608486031215611d3957611d3861113e565b5b6000611d4786828701611b70565b935050602084015167ffffffffffffffff811115611d6857611d67611143565b5b611d7486828701611c03565b925050604084015167ffffffffffffffff811115611d9557611d94611143565b5b611da186828701611cf2565b9150509250925092565b600063ffffffff82169050919050565b611dc481611dab565b8114611dcf57600080fd5b50565b600081519050611de181611dbb565b92915050565b600080600060608486031215611e0057611dff61113e565b5b6000611e0e86828701611c74565b9350506020611e1f86828701611c74565b9250506040611e3086828701611dd2565b9150509250925092565b611e438161120a565b8114611e4e57600080fd5b50565b600081519050611e6081611e3a565b92915050565b60008160020b9050919050565b611e7c81611e66565b8114611e8757600080fd5b50565b600081519050611e9981611e73565b92915050565b600061ffff82169050919050565b611eb681611e9f565b8114611ec157600080fd5b50565b600081519050611ed381611ead565b92915050565b600060ff82169050919050565b611eef81611ed9565b8114611efa57600080fd5b50565b600081519050611f0c81611ee6565b92915050565b60008115159050919050565b611f2781611f12565b8114611f3257600080fd5b50565b600081519050611f4481611f1e565b92915050565b600080600080600080600060e0888a031215611f6957611f6861113e565b5b6000611f778a828b01611e51565b9750506020611f888a828b01611e8a565b9650506040611f998a828b01611ec4565b9550506060611faa8a828b01611ec4565b9450506080611fbb8a828b01611ec4565b93505060a0611fcc8a828b01611efd565b92505060c0611fdd8a828b01611f35565b91505092959891949750929550565b600062ffffff82169050919050565b61200481611fec565b811461200f57600080fd5b50565b60008151905061202181611ffb565b92915050565b60006020828403121561203d5761203c61113e565b5b600061204b84828501612012565b91505092915050565b600080600080600080600060e0888a0312156120735761207261113e565b5b60006120818a828b01611e51565b97505060206120928a828b01611e8a565b96505060406120a38a828b01611ec4565b95505060606120b48a828b01611ec4565b94505060806120c58a828b01611efd565b93505060a06120d68a828b01611efd565b92505060c06120e78a828b01611f35565b91505092959891949750929550565b60008060008060008060c087890312156121135761211261113e565b5b600061212189828a01611e51565b965050602061213289828a01611e8a565b955050604061214389828a01611ec4565b945050606061215489828a01611efd565b935050608061216589828a01611ec4565b92505060a061217689828a01611f35565b9150509295509295509295565b7f556e6b6e6f776e2044455820666f723a20000000000000000000000000000000815250565b7f202d200000000000000000000000000000000000000000000000000000000000815250565b60006121da82612183565b6011820191506121ea82866119ae565b91506121f5826121a9565b60038201915061220582856119ae565b9150612210826121a9565b60038201915061222082846119ae565b9150819050949350505050565b7f556e6b6e6f776e2056657273696f6e20666f723a200000000000000000000000815250565b600061225e8261222d565b60158201915061226e82866119ae565b9150612279826121a9565b60038201915061228982856119ae565b9150612294826121a9565b6003820191506122a482846119ae565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122eb8261132b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361231d5761231c6122b1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061236382846119ae565b91508190509291505056fea2646970667358221220520e679c2cd368c9a8f3ec8538fc78c8d85b5c03b279fb0969ff4e5fc5a4a24164736f6c63430008130033
Deployed Bytecode
0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063cfa08f4a14610030575b600080fd5b61004a6004803603810190610045919061158e565b610063565b60405161005a949392919061189b565b60405180910390f35b606080606080600087519050600087519050600087519050818314158061008a5750808214155b156101075761009883610dc5565b6100a183610dc5565b6100aa83610dc5565b6040516020016100bc93929190611a2b565b6040516020818303038152906040526040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100fe9190611ade565b60405180910390fd5b8267ffffffffffffffff8111156101215761012061115e565b5b60405190808252806020026020018201604052801561014f5781602001602082028036833780820191505090505b5096508267ffffffffffffffff81111561016c5761016b61115e565b5b60405190808252806020026020018201604052801561019a5781602001602082028036833780820191505090505b5095508267ffffffffffffffff8111156101b7576101b661115e565b5b6040519080825280602002602001820160405280156101e55781602001602082028036833780820191505090505b5094508267ffffffffffffffff8111156102025761020161115e565b5b6040519080825280602002602001820160405280156102305781602001602082028036833780820191505090505b50935060005b83811015610db857600088828151811061025357610252611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff1681525050600087828151811061029657610295611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff168152505060008682815181106102d9576102d8611b00565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600085828151811061032857610327611b00565b5b602002602001019065ffffffffffff16908165ffffffffffff168152505060008b828151811061035b5761035a611b00565b5b6020026020010151905060008b838151811061037a57610379611b00565b5b6020026020010151905060008b848151811061039957610398611b00565b5b6020026020010151905060028203610856576103ea816040518060400160405280600b81526020017f42616c616e636572666932000000000000000000000000000000000000000000815250610e93565b15610583576000731fc3a9d7ffefc3b808f04e6db3c86e6612b7848a90506000808273ffffffffffffffffffffffffffffffffffffffff166372279ba1876040518263ffffffff1660e01b81526004016104449190611b3e565b600060405180830381865afa158015610461573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061048a9190611d20565b9250509150818b88815181106104a3576104a2611b00565b5b602002602001019065ffffffffffff16908165ffffffffffff1681525050806000815181106104d5576104d4611b00565b5b60200260200101518e88815181106104f0576104ef611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff16815250508060018151811061053257610531611b00565b5b60200260200101518d888151811061054d5761054c611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff1681525050505050610851565b6105c2816040518060400160405280600681526020017f4265657473320000000000000000000000000000000000000000000000000000815250610e93565b1561075b57600073b6a3f882ed0f43b520e53dc9421fce19e43d0e7990506000808273ffffffffffffffffffffffffffffffffffffffff166372279ba1876040518263ffffffff1660e01b815260040161061c9190611b3e565b600060405180830381865afa158015610639573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906106629190611d20565b9250509150818b888151811061067b5761067a611b00565b5b602002602001019065ffffffffffff16908165ffffffffffff1681525050806000815181106106ad576106ac611b00565b5b60200260200101518e88815181106106c8576106c7611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff16815250508060018151811061070a57610709611b00565b5b60200260200101518d888151811061072557610724611b00565b5b60200260200101906dffffffffffffffffffffffffffff1690816dffffffffffffffffffffffffffff1681525050505050610850565b60008390508073ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190611de7565b508d87815181106107e3576107e2611b00565b5b602002602001018d88815181106107fd576107fc611b00565b5b60200260200101826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16815250826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152505050505b5b610da2565b60038203610d315761089d816040518060400160405280600281526020017f5553000000000000000000000000000000000000000000000000000000000000815250610e93565b15610a215760008390508073ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e060405180830381865afa1580156108f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109169190611f4a565b9091929394509091929350909192509091509050508a868151811061093e5761093d611b00565b5b602002602001018173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e59190612027565b62ffffff168986815181106109fd576109fc611b00565b5b602002602001019065ffffffffffff16908165ffffffffffff168152505050610d2c565b610a60816040518060400160405280600281526020017f5153000000000000000000000000000000000000000000000000000000000000815250610e93565b15610b705760008390508073ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160e060405180830381865afa158015610ab5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad99190612054565b9091929394508461ffff169450909192509091509050508b8781518110610b0357610b02611b00565b5b602002602001018b8881518110610b1d57610b1c611b00565b5b602002602001018265ffffffffffff1665ffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505050610d2b565b610baf816040518060400160405280600581526020017f5357415058000000000000000000000000000000000000000000000000000000815250610e93565b15610cba5760008390508073ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160c060405180830381865afa158015610c04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2891906120f6565b90919293508361ffff1693509091509050508b8781518110610c4d57610c4c611b00565b5b602002602001018b8881518110610c6757610c66611b00565b5b602002602001018265ffffffffffff1665ffffffffffff168152508273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250505050610d2a565b610cc383610eec565b610ccc83610dc5565b82604051602001610cdf939291906121cf565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d219190611ade565b60405180910390fd5b5b5b610da1565b610d3a83610eec565b610d4383610dc5565b82604051602001610d5693929190612253565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d989190611ade565b60405180910390fd5b5b5050508080610db0906122e0565b915050610236565b5050505093509350935093565b606060006001610dd484610fe1565b01905060008167ffffffffffffffff811115610df357610df261115e565b5b6040519080825280601f01601f191660200182016040528015610e255781602001600182028036833780820191505090505b509050600082602001820190505b600115610e88578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a8581610e7c57610e7b612328565b5b04945060008503610e33575b819350505050919050565b600081604051602001610ea69190612357565b6040516020818303038152906040528051906020012083604051602001610ecd9190612357565b6040516020818303038152906040528051906020012014905092915050565b606060008273ffffffffffffffffffffffffffffffffffffffff1660001b90506000602067ffffffffffffffff811115610f2957610f2861115e565b5b6040519080825280601f01601f191660200182016040528015610f5b5781602001600182028036833780820191505090505b50905060005b6020811015610fd657828160208110610f7d57610f7c611b00565b5b1a60f81b828281518110610f9457610f93611b00565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080610fce906122e0565b915050610f61565b508092505050919050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000831061103f577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000838161103557611034612328565b5b0492506040810190505b6d04ee2d6d415b85acef8100000000831061107c576d04ee2d6d415b85acef8100000000838161107257611071612328565b5b0492506020810190505b662386f26fc1000083106110ab57662386f26fc1000083816110a1576110a0612328565b5b0492506010810190505b6305f5e10083106110d4576305f5e10083816110ca576110c9612328565b5b0492506008810190505b61271083106110f95761271083816110ef576110ee612328565b5b0492506004810190505b6064831061111c576064838161111257611111612328565b5b0492506002810190505b600a831061112b576001810190505b80915050919050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6111968261114d565b810181811067ffffffffffffffff821117156111b5576111b461115e565b5b80604052505050565b60006111c8611134565b90506111d4828261118d565b919050565b600067ffffffffffffffff8211156111f4576111f361115e565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006112358261120a565b9050919050565b6112458161122a565b811461125057600080fd5b50565b6000813590506112628161123c565b92915050565b600061127b611276846111d9565b6111be565b9050808382526020820190506020840283018581111561129e5761129d611205565b5b835b818110156112c757806112b38882611253565b8452602084019350506020810190506112a0565b5050509392505050565b600082601f8301126112e6576112e5611148565b5b81356112f6848260208601611268565b91505092915050565b600067ffffffffffffffff82111561131a5761131961115e565b5b602082029050602081019050919050565b6000819050919050565b61133e8161132b565b811461134957600080fd5b50565b60008135905061135b81611335565b92915050565b600061137461136f846112ff565b6111be565b9050808382526020820190506020840283018581111561139757611396611205565b5b835b818110156113c057806113ac888261134c565b845260208401935050602081019050611399565b5050509392505050565b600082601f8301126113df576113de611148565b5b81356113ef848260208601611361565b91505092915050565b600067ffffffffffffffff8211156114135761141261115e565b5b602082029050602081019050919050565b600080fd5b600067ffffffffffffffff8211156114445761144361115e565b5b61144d8261114d565b9050602081019050919050565b82818337600083830152505050565b600061147c61147784611429565b6111be565b90508281526020810184848401111561149857611497611424565b5b6114a384828561145a565b509392505050565b600082601f8301126114c0576114bf611148565b5b81356114d0848260208601611469565b91505092915050565b60006114ec6114e7846113f8565b6111be565b9050808382526020820190506020840283018581111561150f5761150e611205565b5b835b8181101561155657803567ffffffffffffffff81111561153457611533611148565b5b80860161154189826114ab565b85526020850194505050602081019050611511565b5050509392505050565b600082601f83011261157557611574611148565b5b81356115858482602086016114d9565b91505092915050565b6000806000606084860312156115a7576115a661113e565b5b600084013567ffffffffffffffff8111156115c5576115c4611143565b5b6115d1868287016112d1565b935050602084013567ffffffffffffffff8111156115f2576115f1611143565b5b6115fe868287016113ca565b925050604084013567ffffffffffffffff81111561161f5761161e611143565b5b61162b86828701611560565b9150509250925092565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61168481611661565b82525050565b6000611696838361167b565b60208301905092915050565b6000602082019050919050565b60006116ba82611635565b6116c48185611640565b93506116cf83611651565b8060005b838110156117005781516116e7888261168a565b97506116f2836116a2565b9250506001810190506116d3565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6117428161120a565b82525050565b60006117548383611739565b60208301905092915050565b6000602082019050919050565b60006117788261170d565b6117828185611718565b935061178d83611729565b8060005b838110156117be5781516117a58882611748565b97506117b083611760565b925050600181019050611791565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600065ffffffffffff82169050919050565b611812816117f7565b82525050565b60006118248383611809565b60208301905092915050565b6000602082019050919050565b6000611848826117cb565b61185281856117d6565b935061185d836117e7565b8060005b8381101561188e5781516118758882611818565b975061188083611830565b925050600181019050611861565b5085935050505092915050565b600060808201905081810360008301526118b581876116af565b905081810360208301526118c981866116af565b905081810360408301526118dd818561176d565b905081810360608301526118f1818461183d565b905095945050505050565b600081905092915050565b7f446966666572656e742061727261792073697a657320666f7220696e7075747360008201527f2028000000000000000000000000000000000000000000000000000000000000602082015250565b60006119636022836118fc565b915061196e82611907565b602282019050919050565b600081519050919050565b60005b838110156119a2578082015181840152602081019050611987565b60008484015250505050565b60006119b982611979565b6119c381856118fc565b93506119d3818560208601611984565b80840191505092915050565b7f2c20000000000000000000000000000000000000000000000000000000000000815250565b7f2900000000000000000000000000000000000000000000000000000000000000815250565b6000611a3682611956565b9150611a4282866119ae565b9150611a4d826119df565b600282019150611a5d82856119ae565b9150611a68826119df565b600282019150611a7882846119ae565b9150611a8382611a05565b600182019150819050949350505050565b600082825260208201905092915050565b6000611ab082611979565b611aba8185611a94565b9350611aca818560208601611984565b611ad38161114d565b840191505092915050565b60006020820190508181036000830152611af88184611aa5565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b611b388161122a565b82525050565b6000602082019050611b536000830184611b2f565b92915050565b611b62816117f7565b8114611b6d57600080fd5b50565b600081519050611b7f81611b59565b92915050565b600081519050611b948161123c565b92915050565b6000611bad611ba8846111d9565b6111be565b90508083825260208201905060208402830185811115611bd057611bcf611205565b5b835b81811015611bf95780611be58882611b85565b845260208401935050602081019050611bd2565b5050509392505050565b600082601f830112611c1857611c17611148565b5b8151611c28848260208601611b9a565b91505092915050565b600067ffffffffffffffff821115611c4c57611c4b61115e565b5b602082029050602081019050919050565b611c6681611661565b8114611c7157600080fd5b50565b600081519050611c8381611c5d565b92915050565b6000611c9c611c9784611c31565b6111be565b90508083825260208201905060208402830185811115611cbf57611cbe611205565b5b835b81811015611ce85780611cd48882611c74565b845260208401935050602081019050611cc1565b5050509392505050565b600082601f830112611d0757611d06611148565b5b8151611d17848260208601611c89565b91505092915050565b600080600060608486031215611d3957611d3861113e565b5b6000611d4786828701611b70565b935050602084015167ffffffffffffffff811115611d6857611d67611143565b5b611d7486828701611c03565b925050604084015167ffffffffffffffff811115611d9557611d94611143565b5b611da186828701611cf2565b9150509250925092565b600063ffffffff82169050919050565b611dc481611dab565b8114611dcf57600080fd5b50565b600081519050611de181611dbb565b92915050565b600080600060608486031215611e0057611dff61113e565b5b6000611e0e86828701611c74565b9350506020611e1f86828701611c74565b9250506040611e3086828701611dd2565b9150509250925092565b611e438161120a565b8114611e4e57600080fd5b50565b600081519050611e6081611e3a565b92915050565b60008160020b9050919050565b611e7c81611e66565b8114611e8757600080fd5b50565b600081519050611e9981611e73565b92915050565b600061ffff82169050919050565b611eb681611e9f565b8114611ec157600080fd5b50565b600081519050611ed381611ead565b92915050565b600060ff82169050919050565b611eef81611ed9565b8114611efa57600080fd5b50565b600081519050611f0c81611ee6565b92915050565b60008115159050919050565b611f2781611f12565b8114611f3257600080fd5b50565b600081519050611f4481611f1e565b92915050565b600080600080600080600060e0888a031215611f6957611f6861113e565b5b6000611f778a828b01611e51565b9750506020611f888a828b01611e8a565b9650506040611f998a828b01611ec4565b9550506060611faa8a828b01611ec4565b9450506080611fbb8a828b01611ec4565b93505060a0611fcc8a828b01611efd565b92505060c0611fdd8a828b01611f35565b91505092959891949750929550565b600062ffffff82169050919050565b61200481611fec565b811461200f57600080fd5b50565b60008151905061202181611ffb565b92915050565b60006020828403121561203d5761203c61113e565b5b600061204b84828501612012565b91505092915050565b600080600080600080600060e0888a0312156120735761207261113e565b5b60006120818a828b01611e51565b97505060206120928a828b01611e8a565b96505060406120a38a828b01611ec4565b95505060606120b48a828b01611ec4565b94505060806120c58a828b01611efd565b93505060a06120d68a828b01611efd565b92505060c06120e78a828b01611f35565b91505092959891949750929550565b60008060008060008060c087890312156121135761211261113e565b5b600061212189828a01611e51565b965050602061213289828a01611e8a565b955050604061214389828a01611ec4565b945050606061215489828a01611efd565b935050608061216589828a01611ec4565b92505060a061217689828a01611f35565b9150509295509295509295565b7f556e6b6e6f776e2044455820666f723a20000000000000000000000000000000815250565b7f202d200000000000000000000000000000000000000000000000000000000000815250565b60006121da82612183565b6011820191506121ea82866119ae565b91506121f5826121a9565b60038201915061220582856119ae565b9150612210826121a9565b60038201915061222082846119ae565b9150819050949350505050565b7f556e6b6e6f776e2056657273696f6e20666f723a200000000000000000000000815250565b600061225e8261222d565b60158201915061226e82866119ae565b9150612279826121a9565b60038201915061228982856119ae565b9150612294826121a9565b6003820191506122a482846119ae565b9150819050949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122eb8261132b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361231d5761231c6122b1565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061236382846119ae565b91508190509291505056fea2646970667358221220520e679c2cd368c9a8f3ec8538fc78c8d85b5c03b279fb0969ff4e5fc5a4a24164736f6c63430008130033
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.