Feature Tip: Add private address tag to any address under My Name Tag !
Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 411 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 20355454 | 4 days ago | IN | 0 ETH | 0.00018755 | ||||
Transfer | 20355411 | 4 days ago | IN | 0 ETH | 0.00023833 | ||||
Approve | 20355378 | 4 days ago | IN | 0 ETH | 0.00017472 | ||||
Transfer | 20355326 | 4 days ago | IN | 0 ETH | 0.00038262 | ||||
Transfer | 20293927 | 13 days ago | IN | 0 ETH | 0.00024088 | ||||
Approve | 20250886 | 19 days ago | IN | 0 ETH | 0.00006726 | ||||
Approve | 20250872 | 19 days ago | IN | 0 ETH | 0.00007775 | ||||
Transfer | 20250863 | 19 days ago | IN | 0 ETH | 0.00019912 | ||||
Transfer | 20246284 | 20 days ago | IN | 0 ETH | 0.00027208 | ||||
Transfer | 20246273 | 20 days ago | IN | 0 ETH | 0.00044957 | ||||
Transfer | 20246262 | 20 days ago | IN | 0 ETH | 0.00033787 | ||||
Transfer | 20246252 | 20 days ago | IN | 0 ETH | 0.00034467 | ||||
Transfer | 20246229 | 20 days ago | IN | 0 ETH | 0.00033216 | ||||
Transfer | 20246218 | 20 days ago | IN | 0 ETH | 0.00015061 | ||||
Transfer | 20246207 | 20 days ago | IN | 0 ETH | 0.00012457 | ||||
Transfer | 20246188 | 20 days ago | IN | 0 ETH | 0.00048181 | ||||
Transfer | 20246145 | 20 days ago | IN | 0 ETH | 0.00012508 | ||||
Transfer | 20246139 | 20 days ago | IN | 0 ETH | 0.00012282 | ||||
Transfer | 20245967 | 20 days ago | IN | 0 ETH | 0.00035863 | ||||
Transfer | 20245914 | 20 days ago | IN | 0 ETH | 0.00019429 | ||||
Transfer | 20245907 | 20 days ago | IN | 0 ETH | 0.00016966 | ||||
Transfer | 20245881 | 20 days ago | IN | 0 ETH | 0.00018466 | ||||
Transfer | 20245872 | 20 days ago | IN | 0 ETH | 0.0001612 | ||||
Transfer | 20245862 | 20 days ago | IN | 0 ETH | 0.00012947 | ||||
Transfer | 20245853 | 20 days ago | IN | 0 ETH | 0.00013103 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
A404Token
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-05-27 */ //SPDX-License-Identifier: UNLICENSED 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) { return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1); /////////////////////////////////////////////// // 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 10, 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 * 8) < value ? 1 : 0); } } } // OpenZeppelin Contracts (last updated v4.8.0) (utils/Strings.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 `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); } } interface ISwapRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); } interface ISwapFactory { function createPair(address tokenA, address tokenB) external returns (address pair); function feeTo() external view returns (address); } interface ISwapPair { function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function totalSupply() external view returns (uint); function kLast() external view returns (uint); function sync() external; } library PancakeLibrary { // returns sorted token addresses, used to handle return values from pairs sorted in this order function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) { require(tokenA != tokenB, 'PancakeLibrary: IDENTICAL_ADDRESSES'); (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA); require(token0 != address(0), 'PancakeLibrary: ZERO_ADDRESS'); } // calculates the CREATE2 address for a pair without making any external calls function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) { (address token0, address token1) = sortTokens(tokenA, tokenB); pair = address(uint160(uint(keccak256(abi.encodePacked( hex'ff', factory, keccak256(abi.encodePacked(token0, token1)), hex'00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5' // init code hash ))))); } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } abstract contract Ownable { event OwnershipTransferred(address indexed user, address indexed newOwner); error Unauthorized(); error InvalidOwner(); address public owner; modifier onlyOwner() virtual { if (msg.sender != owner) revert Unauthorized(); _; } constructor(address _owner) { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(address(0), _owner); } function transferOwnership(address _owner) public virtual onlyOwner { if (_owner == address(0)) revert InvalidOwner(); owner = _owner; emit OwnershipTransferred(msg.sender, _owner); } function revokeOwnership() public virtual onlyOwner { owner = address(0); emit OwnershipTransferred(msg.sender, address(0)); } } abstract contract ERC721Receiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721Receiver.onERC721Received.selector; } } /// @notice ERC404 /// A gas-efficient, mixed ERC20 / ERC721 implementation /// with native liquidity and fractionalization. /// /// This is an experimental standard designed to integrate /// with pre-existing ERC20 / ERC721 support as smoothly as /// possible. /// /// @dev In order to support full functionality of ERC20 and ERC721 /// supply assumptions are made that slightly constraint usage. /// Ensure decimals are sufficiently large (standard 18 recommended) /// as ids are effectively encoded in the lowest range of amounts. /// /// NFTs are spent on ERC20 functions in a FILO queue, this is by /// design. /// abstract contract ERC404 is Ownable { using SafeMath for uint256; // Events event ERC20Transfer( address indexed from, address indexed to, uint256 amount ); event Approval( address indexed owner, address indexed spender, uint256 amount ); event Transfer( address indexed from, address indexed to, uint256 indexed id ); event ERC721Approval( address indexed owner, address indexed spender, uint256 indexed id ); event ApprovalForAll( address indexed owner, address indexed operator, bool approved ); // Errors error NotFound(); error AlreadyExists(); error InvalidRecipient(); error InvalidSender(); error UnsafeRecipient(); // Metadata /// @dev Token name string public name; /// @dev Token symbol string public symbol; /// @dev Decimals for fractional representation uint8 public immutable decimals; /// @dev Total supply in fractionalized representation uint256 public immutable totalSupply; /// @dev Current mint counter, monotonically increasing to ensure accurate ownership uint256 public minted; // Mappings /// @dev Balance of user in fractional representation mapping(address => uint256) public balanceOf; /// @dev Allowance of user in fractional representation mapping(address => mapping(address => uint256)) public allowance; /// @dev Approval in native representaion mapping(uint256 => address) public getApproved; /// @dev Approval for all in native representation mapping(address => mapping(address => bool)) public isApprovedForAll; /// @dev Owner of id in native representation mapping(uint256 => address) internal _ownerOf; /// @dev Array of owned ids in native representation mapping(address => uint256[]) internal _owned; /// @dev Tracks indices for the _owned mapping mapping(uint256 => uint256) internal _ownedIndex; /// @dev Addresses whitelisted from minting / burning for gas savings (pairs, routers, etc) mapping(address => bool) public whitelist; address uAddr; ISwapRouter public immutable swapRouter; address public immutable _mainPair; mapping (address => bool) public _feeWhiteList; uint256 public tax1 = 15; // fund uint256 public tax2 = 10; // lp uint256 public tax3 = 15; // hashrate uint256 public tax4 = 10; // pos address public tax1Wallet = 0x58CA63f8fdfB1Ae56Dd38fC8ae4503302771e76E; // fund address public tax3Wallet = 0x61E36Ddc60c6f00861AAa5E222440d39bDA4F1cE; // hashrate address public tax4Wallet = 0xD5aD5C5761c44d75105Dd8a2021979554Ef77Da6; // pos uint256 public totalToHashrate; uint256 public totalToPos; address public _lastMaybeAddLPAddress; uint256 public holderRewardLPCondition; //per send amount uint256 public currentLPIndex; uint256 public progressLPRewardBlock; uint256 public progressLPBlockDebt = 1; bool public openTrade = false; // Constructor constructor( string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalNativeSupply, address _owner, address RouterAddress, address UAddress ) Ownable(msg.sender) { name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalNativeSupply * (10 ** decimals); swapRouter = ISwapRouter(RouterAddress); uAddr = UAddress; _mainPair = ISwapFactory(swapRouter.factory()).createPair(address(this), uAddr); _feeWhiteList[_owner] = true; _feeWhiteList[address(0)] = true; _feeWhiteList[address(this)] = true; _feeWhiteList[address(0x000000000000000000000000000000000000dEaD)] = true; _feeWhiteList[tax1Wallet] = true; _feeWhiteList[tax3Wallet] = true; _feeWhiteList[tax4Wallet] = true; whitelist[address(_mainPair)] = true; whitelist[address(this)] = true; whitelist[address(0)] = true; whitelist[tax1Wallet] = true; whitelist[tax3Wallet] = true; whitelist[tax4Wallet] = true; holderRewardLPCondition = 0.1 ether; } function setOpenTrade(bool flag) public onlyOwner { openTrade = flag; } function setWallets(address _tax1Wallet,address _tax3Wallet,address _tax4Wallet) public onlyOwner { tax1Wallet = _tax1Wallet; tax3Wallet = _tax3Wallet; tax4Wallet = _tax4Wallet; whitelist[tax1Wallet] = true; whitelist[tax3Wallet] = true; whitelist[tax4Wallet] = true; _feeWhiteList[tax1Wallet] = true; _feeWhiteList[tax3Wallet] = true; _feeWhiteList[tax4Wallet] = true; } function setTax(uint256 _tax1,uint256 _tax2,uint256 _tax3,uint256 _tax4) public onlyOwner { tax1 = _tax1; tax2 = _tax2; tax3 = _tax3; tax4 = _tax4; } /// @notice Initialization function to set pairs / etc /// saving gas by avoiding mint / burn on unnecessary targets function setWhitelist(address target, bool state) public onlyOwner { whitelist[target] = state; } function setFeeWhitelist(address target, bool state) public onlyOwner { _feeWhiteList[target] = state; } function setWhite(address target, bool state) public onlyOwner{ whitelist[target] = state; _feeWhiteList[target] = state; } /// @notice Function to find owner of a given native token function ownerOf(uint256 id) public view virtual returns (address owner) { owner = _ownerOf[id]; if (owner == address(0)) { revert NotFound(); } } /// @notice tokenURI must be implemented by child contract function tokenURI(uint256 id) public view virtual returns (string memory); /// @notice Function for token approvals /// @dev This function assumes id / native if amount less than or equal to current max id function approve( address spender, uint256 amountOrId ) public virtual returns (bool) { if (amountOrId <= minted && amountOrId > 0) { address owner = _ownerOf[amountOrId]; if (msg.sender != owner && !isApprovedForAll[owner][msg.sender]) { revert Unauthorized(); } getApproved[amountOrId] = spender; emit Approval(owner, spender, amountOrId); } else { allowance[msg.sender][spender] = amountOrId; emit Approval(msg.sender, spender, amountOrId); } return true; } /// @notice Function native approvals function setApprovalForAll(address operator, bool approved) public virtual { isApprovedForAll[msg.sender][operator] = approved; emit ApprovalForAll(msg.sender, operator, approved); } /// @notice Function for mixed transfers /// @dev This function assumes id / native if amount less than or equal to current max id function transferFrom( address from, address to, uint256 amountOrId ) public virtual { if (amountOrId <= minted) { if (from != _ownerOf[amountOrId]) { revert InvalidSender(); } if (to == address(0)) { revert InvalidRecipient(); } if ( msg.sender != from && !isApprovedForAll[from][msg.sender] && msg.sender != getApproved[amountOrId] ) { revert Unauthorized(); } balanceOf[from] -= _getUnit(); unchecked { balanceOf[to] += _getUnit(); } _ownerOf[amountOrId] = to; delete getApproved[amountOrId]; // update _owned for sender uint256 updatedId = _owned[from][_owned[from].length - 1]; _owned[from][_ownedIndex[amountOrId]] = updatedId; // pop _owned[from].pop(); // update index for the moved id _ownedIndex[updatedId] = _ownedIndex[amountOrId]; // push token to to owned _owned[to].push(amountOrId); // update index for to owned _ownedIndex[amountOrId] = _owned[to].length - 1; emit Transfer(from, to, amountOrId); emit ERC20Transfer(from, to, _getUnit()); } else { uint256 allowed = allowance[from][msg.sender]; if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amountOrId; _transfer(from, to, amountOrId); } } /// @notice Function for fractional transfers function transfer( address to, uint256 amount ) public virtual returns (bool) { return _transfer(msg.sender, to, amount); } /// @notice Function for native transfers with contract support function safeTransferFrom( address from, address to, uint256 id ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, "") != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Function for native transfers with contract support and callback data function safeTransferFrom( address from, address to, uint256 id, bytes calldata data ) public virtual { transferFrom(from, to, id); if ( to.code.length != 0 && ERC721Receiver(to).onERC721Received(msg.sender, from, id, data) != ERC721Receiver.onERC721Received.selector ) { revert UnsafeRecipient(); } } /// @notice Internal function for fractional transfers function _transfer( address from, address to, uint256 amount ) internal returns (bool) { address lastMaybeAddLPAddress = _lastMaybeAddLPAddress; if (address(0) != lastMaybeAddLPAddress) { _lastMaybeAddLPAddress = address(0); if (IERC20(_mainPair).balanceOf(lastMaybeAddLPAddress) > 0) { addHolder(lastMaybeAddLPAddress); } } uint256 unit = _getUnit(); uint256 balanceBeforeSender = balanceOf[from]; uint256 balanceBeforeReceiver = balanceOf[to]; balanceOf[from] -= amount; if (!_feeWhiteList[from] && !_feeWhiteList[to]) { if (from == address(_mainPair) || to == address(_mainPair)) { require(openTrade,"NA"); if (to == address(_mainPair)){ // sell _lastMaybeAddLPAddress = from; } uint256 tax1Fee = amount.mul(tax1).div(1000); balanceOf[tax1Wallet] += tax1Fee; emit ERC20Transfer(from, tax1Wallet, tax1Fee); uint256 tax2Fee = amount.mul(tax2).div(1000); balanceOf[address(this)] += tax2Fee; emit ERC20Transfer(from, address(this), tax2Fee); uint256 tax3Fee = amount.mul(tax3).div(1000); balanceOf[tax3Wallet] += tax3Fee; totalToHashrate += tax3Fee; emit ERC20Transfer(from, tax3Wallet, tax3Fee); uint256 tax4Fee = amount.mul(tax4).div(1000); balanceOf[tax4Wallet] += tax4Fee; totalToPos += tax4Fee; emit ERC20Transfer(from, tax4Wallet, tax4Fee); amount = amount - tax1Fee - tax2Fee - tax3Fee - tax4Fee; } } unchecked { balanceOf[to] += amount; } // Skip burn for certain addresses to save gas if (!whitelist[from]) { uint256 tokens_to_burn = (balanceBeforeSender / unit) - (balanceOf[from] / unit); for (uint256 i = 0; i < tokens_to_burn; i++) { _burn(from); } } // Skip minting for certain addresses to save gas if (!whitelist[to]) { uint256 tokens_to_mint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit); for (uint256 i = 0; i < tokens_to_mint; i++) { _mint(to); } } if (from != address(_mainPair)) { processLPReward(_rewardGas); } emit ERC20Transfer(from, to, amount); return true; } function sendToAndMint(address to,uint256 value,uint256 unit) private { uint256 balanceBeforeReceiver = balanceOf[to]; balanceOf[to] += value; uint256 tokens_to_mint = (balanceOf[to] / unit) - (balanceBeforeReceiver / unit); for (uint256 i = 0; i < tokens_to_mint; i++) { _mint(to); } } // Internal utility logic function _getUnit() internal view returns (uint256) { return 10 ** decimals; } function _mint(address to) internal virtual { if (to == address(0)) { revert InvalidRecipient(); } unchecked { minted++; } uint256 id = minted; if (_ownerOf[id] != address(0)) { revert AlreadyExists(); } _ownerOf[id] = to; _owned[to].push(id); _ownedIndex[id] = _owned[to].length - 1; emit Transfer(address(0), to, id); } function _burn(address from) internal virtual { if (from == address(0)) { revert InvalidSender(); } uint256 id = _owned[from][_owned[from].length - 1]; _owned[from].pop(); delete _ownedIndex[id]; delete _ownerOf[id]; delete getApproved[id]; emit Transfer(from, address(0), id); } function _setNameSymbol( string memory _name, string memory _symbol ) internal { name = _name; symbol = _symbol; } function processLPReward(uint256 gas) private { if (gas == 0) { return; } uint256 unit = _getUnit(); if (progressLPRewardBlock + progressLPBlockDebt > block.number) { return; } uint256 rewardCondition = holderRewardLPCondition; if (balanceOf[address(this)] < rewardCondition) { return; } IERC20 Lp = IERC20(_mainPair); uint LpTotal = Lp.totalSupply(); if (LpTotal == 0) { return; } address shareHolder; uint256 lpBalance; uint256 amount; uint256 shareholderCount = holders.length; uint256 gasUsed = 0; uint256 iterations = 0; uint256 gasLeft = gasleft(); uint256 holdCondition = holderCondition; while (gasUsed < gas && iterations < shareholderCount) { if (currentLPIndex >= shareholderCount) { currentLPIndex = 0; } shareHolder = holders[currentLPIndex]; if (!excludeHolder[shareHolder]) { lpBalance = Lp.balanceOf(shareHolder); if (lpBalance >= holdCondition) { amount = rewardCondition * lpBalance / LpTotal; if (amount > 0) { balanceOf[address(this)] -= amount; sendToAndMint(shareHolder, amount, unit); emit ERC20Transfer(address(this), shareHolder, amount); } } } gasUsed = gasUsed + (gasLeft - gasleft()); gasLeft = gasleft(); currentLPIndex++; iterations++; } progressLPRewardBlock = block.number; } function setLPRewardCondition(uint256 amount) external onlyOwner { holderRewardLPCondition = amount; } function setLPBlockDebt(uint256 debt) external onlyOwner { progressLPBlockDebt = debt; } address[] public holders; mapping(address => uint256) public holderIndex; mapping(address => bool) public excludeHolder; function getHolderLength() public view returns (uint256){ return holders.length; } function superAddHolder(address adr) public onlyOwner { addHolder(adr); } function addHolder(address adr) private { if (0 == holderIndex[adr]) { if (0 == holders.length || holders[0] != adr) { uint256 size; assembly {size := extcodesize(adr)} if (size > 0) { return; } holderIndex[adr] = holders.length; holders.push(adr); } } } uint256 public holderCondition = 1000000; uint256 public _rewardGas = 500000; function setRewardGas(uint256 rewardGas) external onlyOwner { require(rewardGas <= 2000000, "200w"); _rewardGas = rewardGas; } function setHolderCondition(uint256 amount) external onlyOwner { holderCondition = amount; } function setExcludeHolder(address addr, bool enable) external onlyOwner { excludeHolder[addr] = enable; } } interface IERC20 { function decimals() external view returns (uint8); function symbol() external view returns (string memory); function name() external view returns (string memory); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract A404Token is ERC404 { string public baseTokenURI = "https://nftstorage.link/ipfs/bafybeicrgdn7ugwgb5jonwgxiftbgbqmzhpzionvc4nszmyitbahjomssu/"; string public suffix = ".json"; constructor( address _owner ) ERC404( "Latte", "Latte", 18, 10400, _owner, 0xEfF92A263d31888d860bD50809A8D171709b7b1c, 0xdAC17F958D2ee523a2206206994597C13D831ec7 ) { balanceOf[_owner] = 10400 * 10 ** 18; whitelist[_owner] = true; } function setTokenURI(string memory _tokenURI,string memory _suffix) public onlyOwner { baseTokenURI = _tokenURI; suffix = _suffix; } function setNameSymbol( string memory _name, string memory _symbol ) public onlyOwner { _setNameSymbol(_name, _symbol); } function tokenURI(uint256 id) public view override returns (string memory) { uint256 seed = uint256(bytes32(keccak256(abi.encodePacked(id)))); uint256 left = seed%10400; uint16[10] memory list = [2,6,18,268,316,480,502,2440,4558,1810]; uint256 total; uint8 needIndex; for (uint8 i; i<list.length; i++) { if (left<list[i]+total) { needIndex = i; break; } total += list[i]; } uint16[10] memory list2 = [4,40,140,240,640,1040,1440,1840,2340,2540]; uint256 curVal = list2[needIndex]; uint256 idIndex; if (needIndex == 0) { idIndex = left%curVal + 1; }else{ uint256 lastVal = list2[needIndex - 1]; idIndex = lastVal + left%(curVal-lastVal) + 1; } return string.concat(baseTokenURI, Strings.toString(idIndex),suffix); } function govWithdrawAll(address addr,uint256 tokenAmount,address to) public onlyOwner { IERC20(addr).transfer(to,tokenAmount); } function claimBalance(address to, uint256 amount) external onlyOwner { (bool success,) = to.call{value : amount}(new bytes(0)); require(success, 'ETF'); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[],"name":"Unauthorized","type":"error"},{"inputs":[],"name":"UnsafeRecipient","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ERC20Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"ERC721Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeWhiteList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_lastMaybeAddLPAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mainPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"claimBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentLPIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludeHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getHolderLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"govWithdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"holderCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"holderIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"holderRewardLPCondition","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"owner","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressLPBlockDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"progressLPRewardBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"revokeOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"bool","name":"enable","type":"bool"}],"name":"setExcludeHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setFeeWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setHolderCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"debt","type":"uint256"}],"name":"setLPBlockDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setLPRewardCondition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"}],"name":"setNameSymbol","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setOpenTrade","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rewardGas","type":"uint256"}],"name":"setRewardGas","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tax1","type":"uint256"},{"internalType":"uint256","name":"_tax2","type":"uint256"},{"internalType":"uint256","name":"_tax3","type":"uint256"},{"internalType":"uint256","name":"_tax4","type":"uint256"}],"name":"setTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_tokenURI","type":"string"},{"internalType":"string","name":"_suffix","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tax1Wallet","type":"address"},{"internalType":"address","name":"_tax3Wallet","type":"address"},{"internalType":"address","name":"_tax4Wallet","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhite","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"suffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"superAddHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapRouter","outputs":[{"internalType":"contract ISwapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax1","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax1Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax2","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax3","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax3Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax4","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tax4Wallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalToHashrate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalToPos","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amountOrId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
600f600e819055600a808255601091909155601155601280546001600160a01b03199081167358ca63f8fdfb1ae56dd38fc8ae4503302771e76e179091556013805482167361e36ddc60c6f00861aaa5e222440d39bda4f1ce1790556014805490911673d5ad5c5761c44d75105dd8a2021979554ef77da61790556001601b55601c805460ff19169055620f42406020556207a120602155610180604052605961010081815290620039a261012039602290620000bd90826200055a565b50604080518082019091526005815264173539b7b760d91b6020820152602390620000e990826200055a565b50348015620000f757600080fd5b50604051620039fb380380620039fb8339810160408190526200011a9162000626565b6040805180820182526005808252644c6174746560d81b60208084018290528451808601909552918452908301529060126128a08473eff92a263d31888d860bd50809a8d171709b7b1c73dac17f958d2ee523a2206206994597c13d831ec7338062000199576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b03831690811782556040519091907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001620001f088826200055a565b506002620001ff87826200055a565b5060ff851660808190526200021690600a6200076d565b6200022290856200077e565b60a0526001600160a01b0382811660c0819052600c80546001600160a01b031916928416929092179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000289573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002af919062000626565b600c546040516364e329cb60e11b81523060048201526001600160a01b03918216602482015291169063c9c65396906044016020604051808303816000875af115801562000301573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000327919062000626565b6001600160a01b0390811660e08190529381166000908152600d602090815260408083208054600160ff1991821681179092557f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee80548216831790553080865283862080548316841790557fdc7fafdc41998a74ecacb8f8bd877011aba1f1d03a3a0d37a2e7879a393b1d6a80548316841790556012805488168752848720805484168517905560138054891688528588208054851686179055601480548a16895286892080548616871790559b8852600b808852868920805486168717905592885285882080548516861790557fdf7de25b7f1fd6d0b5205f0e18f1f35bd7b8d84cce336588d184533ce43a6f768054851686179055905488168752848720805484168517905554871686528386208054831684179055985486168552828520805482168317905567016345785d8a00006018559c909416835260048252808320690233c8fe42703e80000090559590529390932080549098169092179096555062000798945050505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620004e057607f821691505b6020821081036200050157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200055557600081815260208120601f850160051c81016020861015620005305750805b601f850160051c820191505b8181101562000551578281556001016200053c565b5050505b505050565b81516001600160401b03811115620005765762000576620004b5565b6200058e81620005878454620004cb565b8462000507565b602080601f831160018114620005c65760008415620005ad5750858301515b600019600386901b1c1916600185901b17855562000551565b600085815260208120601f198616915b82811015620005f757888601518255948401946001909101908401620005d6565b5085821015620006165787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200063957600080fd5b81516001600160a01b03811681146200065157600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620006af57816000190482111562000693576200069362000658565b80851615620006a157918102915b93841c939080029062000673565b509250929050565b600082620006c85750600162000767565b81620006d75750600062000767565b8160018114620006f05760028114620006fb576200071b565b600191505062000767565b60ff8411156200070f576200070f62000658565b50506001821b62000767565b5060208310610133831016604e8410600b841016171562000740575081810a62000767565b6200074c83836200066e565b806000190482111562000763576200076362000658565b0290505b92915050565b60006200065160ff841683620006b7565b808202811582820484141762000767576200076762000658565b60805160a05160c05160e05161319f62000803600039600081816105a301528181611aa701528181611bb701528181611bf201528181611c640152818161203f01526124e601526000610795015260006104aa0152600081816105450152611a35015261319f6000f3fe608060405234801561001057600080fd5b50600436106103c45760003560e01c806380384d4d116101ff578063b88d4fde1161011a578063e84fb12d116100ad578063f3b6966b1161007c578063f3b6966b146108b0578063f53dabb6146108c3578063f7073c3a146108d6578063fb201b1d146108de57600080fd5b8063e84fb12d14610846578063e985e9c51461084f578063e9bbb0401461087d578063f2fde38b1461089d57600080fd5b8063ca027776116100e9578063ca027776146107dd578063d48ede9914610800578063d547cfb714610813578063dd62ed3e1461081b57600080fd5b8063b88d4fde1461077d578063c31c9c0714610790578063c46eee1e146107b7578063c87b56dd146107ca57600080fd5b80639757678611610192578063a5d4310e11610161578063a5d4310e14610745578063a9059cbb1461074e578063aa8b38d914610761578063b88a6eed1461077457600080fd5b806397576786146106e95780639b19251a146106fc578063a22cb4651461071f578063a56e813d1461073257600080fd5b8063917ceeb5116101ce578063917ceeb5146106b2578063922a403d146106c557806393fd8046146106ce57806395d89b41146106e157600080fd5b806380384d4d1461067a5780638b699a151461068d5780638c0199e3146106965780638da5cb5b1461069f57600080fd5b8063313ce567116102ef5780634f02c4201161028257806361b746f21161025157806361b746f21461062b5780636352211e1461063457806370a082311461064757806375cb1bd11461066757600080fd5b80634f02c420146105f45780634f21869c146105fd578063504334c21461060557806353d6fd591461061857600080fd5b80634188bf5a116102be5780634188bf5a1461059e57806342842e0e146105c557806347240874146105d85780634870ae2d146105eb57600080fd5b8063313ce5671461054057806332b00d5a146105795780633b78b7d2146105825780633fe9f9f71461059557600080fd5b806318160ddd1161036757806328ea15391161033657806328ea1539146105095780632a11ced0146105125780632b968958146105255780632ecf32bc1461052d57600080fd5b806318160ddd146104a55780631f425017146104da57806320c09a49146104e357806323b872dd146104f657600080fd5b806306fdde03116103a357806306fdde0314610429578063081812fc1461043e578063095ea7b31461047f57806310b567ad1461049257600080fd5b8062dbe870146103c957806301986fad146103de57806305833c2b14610416575b600080fd5b6103dc6103d73660046128ab565b6108eb565b005b6104016103ec3660046128db565b600d6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103dc610424366004612904565b61091a565b61043161096f565b60405161040d919061295f565b61046761044c3660046128ab565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161040d565b61040161048d366004612992565b6109fd565b601354610467906001600160a01b031681565b6104cc7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161040d565b6104cc60165481565b6103dc6104f13660046129bc565b610b4e565b6103dc6105043660046129ee565b610b8c565b6104cc600f5481565b6104676105203660046128ab565b610f03565b6103dc610f2d565b6103dc61053b366004612a2a565b610f93565b6105677f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161040d565b6104cc60105481565b6103dc6105903660046128db565b610fd0565b6104cc60205481565b6104677f000000000000000000000000000000000000000000000000000000000000000081565b6103dc6105d33660046129ee565b611006565b6103dc6105e6366004612904565b6110db565b6104cc601b5481565b6104cc60035481565b601d546104cc565b6103dc610613366004612aea565b611143565b6103dc610626366004612904565b61117b565b6104cc60195481565b6104676106423660046128ab565b6111d0565b6104cc6106553660046128db565b60046020526000908152604090205481565b6103dc610675366004612b4e565b61120b565b601454610467906001600160a01b031681565b6104cc601a5481565b6104cc60185481565b600054610467906001600160a01b031681565b6103dc6106c03660046128ab565b6112f4565b6104cc60115481565b6103dc6106dc366004612b91565b611368565b61043161140b565b6103dc6106f7366004612904565b611418565b61040161070a3660046128db565b600b6020526000908152604090205460ff1681565b6103dc61072d366004612904565b61146d565b601754610467906001600160a01b031681565b6104cc600e5481565b61040161075c366004612992565b6114d9565b6103dc61076f366004612992565b6114ed565b6104cc60155481565b6103dc61078b366004612bc4565b6115ba565b6104677f000000000000000000000000000000000000000000000000000000000000000081565b6103dc6107c53660046128ab565b61167d565b6104316107d83660046128ab565b6116ac565b6104016107eb3660046128db565b601f6020526000908152604090205460ff1681565b6103dc61080e366004612aea565b611906565b610431611949565b6104cc610829366004612c5f565b600560209081526000928352604080842090915290825290205481565b6104cc60215481565b61040161085d366004612c5f565b600760209081526000928352604080842090915290825290205460ff1681565b6104cc61088b3660046128db565b601e6020526000908152604090205481565b6103dc6108ab3660046128db565b611956565b601254610467906001600160a01b031681565b6103dc6108d13660046128ab565b6119f2565b610431611a21565b601c546104019060ff1681565b6000546001600160a01b03163314610915576040516282b42960e81b815260040160405180910390fd5b601b55565b6000546001600160a01b03163314610944576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001805461097c90612c92565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890612c92565b80156109f55780601f106109ca576101008083540402835291602001916109f5565b820191906000526020600020905b8154815290600101906020018083116109d857829003601f168201915b505050505081565b60006003548211158015610a115750600082115b15610ae8576000828152600860205260409020546001600160a01b0316338114801590610a6257506001600160a01b038116600090815260076020908152604080832033845290915290205460ff16155b15610a7f576040516282b42960e81b815260040160405180910390fd5b60008381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610b44565b3360008181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6000546001600160a01b03163314610b78576040516282b42960e81b815260040160405180910390fd5b600e93909355600f91909155601055601155565b6003548111610e94576000818152600860205260409020546001600160a01b03848116911614610bcf57604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038216610bf657604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610c3357506001600160a01b038316600090815260076020908152604080832033845290915290205460ff16155b8015610c5657506000818152600660205260409020546001600160a01b03163314155b15610c73576040516282b42960e81b815260040160405180910390fd5b610c7b611a2e565b6001600160a01b03841660009081526004602052604081208054909190610ca3908490612ce2565b90915550610cb19050611a2e565b6001600160a01b03808416600081815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610d1b90600190612ce2565b81548110610d2b57610d2b612cf5565b60009182526020808320909101546001600160a01b0387168352600982526040808420868552600a90935290922054815492935083928110610d6f57610d6f612cf5565b60009182526020808320909101929092556001600160a01b0386168152600990915260409020805480610da457610da4612d0b565b600082815260208082208301600019908101839055909201909255838252600a8152604080832054848452818420556001600160a01b038616808452600983529083208054600181810183558286529385200186905592529054610e089190612ce2565b6000838152600a602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b031660008051602061314a833981519152610e7d611a2e565b60405190815260200160405180910390a350505050565b6001600160a01b03831660009081526005602090815260408083203384529091529020546000198114610ef057610ecb8282612ce2565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610efb848484611a60565b50505b505050565b601d8181548110610f1357600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610f57576040516282b42960e81b815260040160405180910390fd5b600080546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b6000546001600160a01b03163314610fbd576040516282b42960e81b815260040160405180910390fd5b601c805460ff1916911515919091179055565b6000546001600160a01b03163314610ffa576040516282b42960e81b815260040160405180910390fd5b611003816120ca565b50565b611011838383610b8c565b6001600160a01b0382163b158015906110bd5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af115801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b09190612d21565b6001600160e01b03191614155b15610efe57604051633da6393160e01b815260040160405180910390fd5b6000546001600160a01b03163314611105576040516282b42960e81b815260040160405180910390fd5b6001600160a01b039091166000908152600b60209081526040808320805494151560ff199586168117909155600d9092529091208054909216179055565b6000546001600160a01b0316331461116d576040516282b42960e81b815260040160405180910390fd5b611177828261219a565b5050565b6000546001600160a01b031633146111a5576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000818152600860205260409020546001600160a01b0316806112065760405163c5723b5160e01b815260040160405180910390fd5b919050565b6000546001600160a01b03163314611235576040516282b42960e81b815260040160405180910390fd5b601280546001600160a01b03199081166001600160a01b039586169081178355601380548316958716959095178555601480549092169386169390931781556000928352600b60209081526040808520805460ff19908116600190811790925587548916875282872080548216831790558454891687528287208054821683179055945488168652600d909252808520805485168317905594548616845284842080548416821790559054909416825291902080549091169091179055565b6000546001600160a01b0316331461131e576040516282b42960e81b815260040160405180910390fd5b621e84808111156113635760405162461bcd60e51b815260040161135a906020808252600490820152633230307760e01b604082015260600190565b60405180910390fd5b602155565b6000546001600160a01b03163314611392576040516282b42960e81b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af11580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612d4b565b50505050565b6002805461097c90612c92565b6000546001600160a01b03163314611442576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60006114e6338484611a60565b9392505050565b6000546001600160a01b03163314611517576040516282b42960e81b815260040160405180910390fd5b604080516000808252602082019092526001600160a01b0384169083906040516115419190612d68565b60006040518083038185875af1925050503d806000811461157e576040519150601f19603f3d011682016040523d82523d6000602084013e611583565b606091505b5050905080610efe5760405162461bcd60e51b815260206004820152600360248201526222aa2360e91b604482015260640161135a565b6115c5858585610b8c565b6001600160a01b0384163b1580159061165f5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061160f9033908a90899089908990600401612d84565b6020604051808303816000875af115801561162e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116529190612d21565b6001600160e01b03191614155b15610efb57604051633da6393160e01b815260040160405180910390fd5b6000546001600160a01b031633146116a7576040516282b42960e81b815260040160405180910390fd5b602055565b60606000826040516020016116c391815260200190565b60408051601f198184030181529190528051602090910120905060006116eb6128a083612dee565b6040805161014081018252600281526006602082015260129181019190915261010c606082015261013c60808201526101e060a08201526101f660c082015261098860e08201526111ce610100820152610712610120820152909150600080805b600a8160ff1610156117cc5782848260ff16600a811061176e5761176e612cf5565b602002015161ffff166117819190612e02565b851015611790578091506117cc565b838160ff16600a81106117a5576117a5612cf5565b60200201516117b89061ffff1684612e02565b9250806117c481612e15565b91505061174c565b5060408051610140810182526004815260286020820152608c9181019190915260f06060820152610280608082015261041060a08201526105a060c082015261073060e08201526109246101008201526109ec61012082015260008160ff8416600a811061183c5761183c612cf5565b602002015161ffff16905060008360ff166000036118705761185e8288612dee565b611869906001612e02565b90506118c9565b60008361187e600187612e34565b60ff16600a811061189157611891612cf5565b602002015161ffff1690506118a68184612ce2565b6118b09089612dee565b6118ba9082612e02565b6118c5906001612e02565b9150505b60226118d4826121b3565b60236040516020016118e893929190612ec0565b60405160208183030381529060405298505050505050505050919050565b6000546001600160a01b03163314611930576040516282b42960e81b815260040160405180910390fd5b602261193c8382612f39565b506023610efe8282612f39565b6022805461097c90612c92565b6000546001600160a01b03163314611980576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381166119a7576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611a1c576040516282b42960e81b815260040160405180910390fd5b601855565b6023805461097c90612c92565b6000611a5b7f0000000000000000000000000000000000000000000000000000000000000000600a6130dd565b905090565b6017546000906001600160a01b03168015611b2357601780546001600160a01b03191690556040516370a0823160e01b81526001600160a01b0382811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1491906130ec565b1115611b2357611b23816120ca565b6000611b2d611a2e565b6001600160a01b038088166000818152600460205260408082208054948b1683529082205492825293945091929091879190611b698386612ce2565b90915550506001600160a01b0388166000908152600d602052604090205460ff16158015611bb057506001600160a01b0387166000908152600d602052604090205460ff16155b15611f21577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b03161480611c2657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b0316145b15611f2157601c5460ff16611c625760405162461bcd60e51b81526020600482015260026024820152614e4160f01b604482015260640161135a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316876001600160a01b031603611cb757601780546001600160a01b0319166001600160a01b038a161790555b6000611cda6103e8611cd4600e548a61224690919063ffffffff16565b90612252565b6012546001600160a01b0316600090815260046020526040812080549293508392909190611d09908490612e02565b90915550506012546040518281526001600160a01b03918216918b169060008051602061314a8339815191529060200160405180910390a36000611d5e6103e8611cd4600f548b61224690919063ffffffff16565b30600090815260046020526040812080549293508392909190611d82908490612e02565b909155505060405181815230906001600160a01b038c169060008051602061314a8339815191529060200160405180910390a36000611dd26103e8611cd46010548c61224690919063ffffffff16565b6013546001600160a01b0316600090815260046020526040812080549293508392909190611e01908490612e02565b925050819055508060156000828254611e1a9190612e02565b90915550506013546040518281526001600160a01b03918216918d169060008051602061314a8339815191529060200160405180910390a36000611e6f6103e8611cd46011548d61224690919063ffffffff16565b6014546001600160a01b0316600090815260046020526040812080549293508392909190611e9e908490612e02565b925050819055508060166000828254611eb79190612e02565b90915550506014546040518281526001600160a01b03918216918e169060008051602061314a8339815191529060200160405180910390a3808284611efc878e612ce2565b611f069190612ce2565b611f109190612ce2565b611f1a9190612ce2565b9950505050505b6001600160a01b03808816600090815260046020908152604080832080548b019055928b168252600b9052205460ff16611fb8576001600160a01b038816600090815260046020526040812054611f79908590613105565b611f838585613105565b611f8d9190612ce2565b905060005b81811015611fb557611fa38a61225e565b80611fad81613119565b915050611f92565b50505b6001600160a01b0387166000908152600b602052604090205460ff1661203d576000611fe48483613105565b6001600160a01b038916600090815260046020526040902054612008908690613105565b6120129190612ce2565b905060005b8181101561203a5761202889612386565b8061203281613119565b915050612017565b50505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b03161461208157612081602154612491565b866001600160a01b0316886001600160a01b031660008051602061314a833981519152886040516120b491815260200190565b60405180910390a3506001979650505050505050565b6001600160a01b0381166000908152601e6020526040812054900361100357601d5415806121295750806001600160a01b0316601d60008154811061211157612111612cf5565b6000918252602090912001546001600160a01b031614155b1561100357803b801561213a575050565b50601d80546001600160a01b0383166000818152601e60205260408120839055600183018455929092527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b031916909117905550565b60016121a68382612f39565b506002610efe8282612f39565b606060006121c08361273b565b600101905060008167ffffffffffffffff8111156121e0576121e0612a47565b6040519080825280601f01601f19166020018201604052801561220a576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461221457509392505050565b60006114e68284613132565b60006114e68284613105565b6001600160a01b03811661228557604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038116600090815260096020526040812080546122ab90600190612ce2565b815481106122bb576122bb612cf5565b9060005260206000200154905060096000836001600160a01b03166001600160a01b031681526020019081526020016000208054806122fc576122fc612d0b565b600082815260208082208301600019908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0381166123ad57604051634e46966960e11b815260040160405180910390fd5b60038054600101908190556000818152600860205260409020546001600160a01b0316156123ee5760405163119b4fd360e11b815260040160405180910390fd5b600081815260086020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526009835290832080546001818101835582865293852001859055925290546124469190612ce2565b6000828152600a602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8060000361249c5750565b60006124a6611a2e565b905043601b54601a546124b99190612e02565b11156124c3575050565b601854306000908152600460205260409020548111156124e257505050565b60007f000000000000000000000000000000000000000000000000000000000000000090506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256b91906130ec565b90508060000361257c575050505050565b601d54600090819081908180805a6020549091505b8c8410801561259f57508483105b156127285784601954106125b35760006019555b601d601954815481106125c8576125c8612cf5565b60009182526020808320909101546001600160a01b0316808352601f90915260409091205490985060ff166126e6576040516370a0823160e01b81526001600160a01b0389811660048301528b16906370a0823190602401602060405180830381865afa15801561263d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266191906130ec565b96508087106126e65788612675888d613132565b61267f9190613105565b955085156126e65730600090815260046020526040812080548892906126a6908490612ce2565b909155506126b7905088878e612813565b6040518681526001600160a01b03891690309060008051602061314a8339815191529060200160405180910390a35b5a6126f19083612ce2565b6126fb9085612e02565b93505a60198054919350600061271083613119565b9190505550828061272090613119565b935050612591565b505043601a555050505050505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061277a5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106127a6576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106127c457662386f26fc10000830492506010015b6305f5e10083106127dc576305f5e100830492506008015b61271083106127f057612710830492506004015b60648310612802576064830492506002015b600a8310610b485760010192915050565b6001600160a01b038316600090815260046020526040812080549184919061283b8385612e02565b909155506000905061284d8383613105565b6001600160a01b038616600090815260046020526040902054612871908590613105565b61287b9190612ce2565b905060005b818110156128a35761289186612386565b8061289b81613119565b915050612880565b505050505050565b6000602082840312156128bd57600080fd5b5035919050565b80356001600160a01b038116811461120657600080fd5b6000602082840312156128ed57600080fd5b6114e6826128c4565b801515811461100357600080fd5b6000806040838503121561291757600080fd5b612920836128c4565b91506020830135612930816128f6565b809150509250929050565b60005b8381101561295657818101518382015260200161293e565b50506000910152565b602081526000825180602084015261297e81604085016020870161293b565b601f01601f19169190910160400192915050565b600080604083850312156129a557600080fd5b6129ae836128c4565b946020939093013593505050565b600080600080608085870312156129d257600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612a0357600080fd5b612a0c846128c4565b9250612a1a602085016128c4565b9150604084013590509250925092565b600060208284031215612a3c57600080fd5b81356114e6816128f6565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612a6e57600080fd5b813567ffffffffffffffff80821115612a8957612a89612a47565b604051601f8301601f19908116603f01168101908282118183101715612ab157612ab1612a47565b81604052838152866020858801011115612aca57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612afd57600080fd5b823567ffffffffffffffff80821115612b1557600080fd5b612b2186838701612a5d565b93506020850135915080821115612b3757600080fd5b50612b4485828601612a5d565b9150509250929050565b600080600060608486031215612b6357600080fd5b612b6c846128c4565b9250612b7a602085016128c4565b9150612b88604085016128c4565b90509250925092565b600080600060608486031215612ba657600080fd5b612baf846128c4565b925060208401359150612b88604085016128c4565b600080600080600060808688031215612bdc57600080fd5b612be5866128c4565b9450612bf3602087016128c4565b935060408601359250606086013567ffffffffffffffff80821115612c1757600080fd5b818801915088601f830112612c2b57600080fd5b813581811115612c3a57600080fd5b896020828501011115612c4c57600080fd5b9699959850939650602001949392505050565b60008060408385031215612c7257600080fd5b612c7b836128c4565b9150612c89602084016128c4565b90509250929050565b600181811c90821680612ca657607f821691505b602082108103612cc657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b4857610b48612ccc565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060208284031215612d3357600080fd5b81516001600160e01b0319811681146114e657600080fd5b600060208284031215612d5d57600080fd5b81516114e6816128f6565b60008251612d7a81846020870161293b565b9190910192915050565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b634e487b7160e01b600052601260045260246000fd5b600082612dfd57612dfd612dd8565b500690565b80820180821115610b4857610b48612ccc565b600060ff821660ff8103612e2b57612e2b612ccc565b60010192915050565b60ff8281168282160390811115610b4857610b48612ccc565b60008154612e5a81612c92565b60018281168015612e725760018114612e8757612eb6565b60ff1984168752821515830287019450612eb6565b8560005260208060002060005b85811015612ead5781548a820152908401908201612e94565b50505082870194505b5050505092915050565b6000612ecc8286612e4d565b8451612edc81836020890161293b565b612ee881830186612e4d565b979650505050505050565b601f821115610efe57600081815260208120601f850160051c81016020861015612f1a5750805b601f850160051c820191505b818110156128a357828155600101612f26565b815167ffffffffffffffff811115612f5357612f53612a47565b612f6781612f618454612c92565b84612ef3565b602080601f831160018114612f9c5760008415612f845750858301515b600019600386901b1c1916600185901b1785556128a3565b600085815260208120601f198616915b82811015612fcb57888601518255948401946001909101908401612fac565b5085821015612fe95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b8085111561303457816000190482111561301a5761301a612ccc565b8085161561302757918102915b93841c9390800290612ffe565b509250929050565b60008261304b57506001610b48565b8161305857506000610b48565b816001811461306e576002811461307857613094565b6001915050610b48565b60ff84111561308957613089612ccc565b50506001821b610b48565b5060208310610133831016604e8410600b84101617156130b7575081810a610b48565b6130c18383612ff9565b80600019048211156130d5576130d5612ccc565b029392505050565b60006114e660ff84168361303c565b6000602082840312156130fe57600080fd5b5051919050565b60008261311457613114612dd8565b500490565b60006001820161312b5761312b612ccc565b5060010190565b8082028115828204841417610b4857610b48612ccc56fee59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487a2646970667358221220b5223b5bfd7cdcddffc0efb38396555bb0c2dc0c829e224e47a9434ef44f67b264736f6c6343000813003368747470733a2f2f6e667473746f726167652e6c696e6b2f697066732f62616679626569637267646e377567776762356a6f6e776778696674626762716d7a68707a696f6e7663346e737a6d7969746261686a6f6d7373752f00000000000000000000000088d1f2b069cce56b3ba6e9f577396aafbc019606
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106103c45760003560e01c806380384d4d116101ff578063b88d4fde1161011a578063e84fb12d116100ad578063f3b6966b1161007c578063f3b6966b146108b0578063f53dabb6146108c3578063f7073c3a146108d6578063fb201b1d146108de57600080fd5b8063e84fb12d14610846578063e985e9c51461084f578063e9bbb0401461087d578063f2fde38b1461089d57600080fd5b8063ca027776116100e9578063ca027776146107dd578063d48ede9914610800578063d547cfb714610813578063dd62ed3e1461081b57600080fd5b8063b88d4fde1461077d578063c31c9c0714610790578063c46eee1e146107b7578063c87b56dd146107ca57600080fd5b80639757678611610192578063a5d4310e11610161578063a5d4310e14610745578063a9059cbb1461074e578063aa8b38d914610761578063b88a6eed1461077457600080fd5b806397576786146106e95780639b19251a146106fc578063a22cb4651461071f578063a56e813d1461073257600080fd5b8063917ceeb5116101ce578063917ceeb5146106b2578063922a403d146106c557806393fd8046146106ce57806395d89b41146106e157600080fd5b806380384d4d1461067a5780638b699a151461068d5780638c0199e3146106965780638da5cb5b1461069f57600080fd5b8063313ce567116102ef5780634f02c4201161028257806361b746f21161025157806361b746f21461062b5780636352211e1461063457806370a082311461064757806375cb1bd11461066757600080fd5b80634f02c420146105f45780634f21869c146105fd578063504334c21461060557806353d6fd591461061857600080fd5b80634188bf5a116102be5780634188bf5a1461059e57806342842e0e146105c557806347240874146105d85780634870ae2d146105eb57600080fd5b8063313ce5671461054057806332b00d5a146105795780633b78b7d2146105825780633fe9f9f71461059557600080fd5b806318160ddd1161036757806328ea15391161033657806328ea1539146105095780632a11ced0146105125780632b968958146105255780632ecf32bc1461052d57600080fd5b806318160ddd146104a55780631f425017146104da57806320c09a49146104e357806323b872dd146104f657600080fd5b806306fdde03116103a357806306fdde0314610429578063081812fc1461043e578063095ea7b31461047f57806310b567ad1461049257600080fd5b8062dbe870146103c957806301986fad146103de57806305833c2b14610416575b600080fd5b6103dc6103d73660046128ab565b6108eb565b005b6104016103ec3660046128db565b600d6020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b6103dc610424366004612904565b61091a565b61043161096f565b60405161040d919061295f565b61046761044c3660046128ab565b6006602052600090815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161040d565b61040161048d366004612992565b6109fd565b601354610467906001600160a01b031681565b6104cc7f000000000000000000000000000000000000000000000233c8fe42703e80000081565b60405190815260200161040d565b6104cc60165481565b6103dc6104f13660046129bc565b610b4e565b6103dc6105043660046129ee565b610b8c565b6104cc600f5481565b6104676105203660046128ab565b610f03565b6103dc610f2d565b6103dc61053b366004612a2a565b610f93565b6105677f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff909116815260200161040d565b6104cc60105481565b6103dc6105903660046128db565b610fd0565b6104cc60205481565b6104677f000000000000000000000000cfdce362ef3e8cce952a74cb31b1e039fcfacfaf81565b6103dc6105d33660046129ee565b611006565b6103dc6105e6366004612904565b6110db565b6104cc601b5481565b6104cc60035481565b601d546104cc565b6103dc610613366004612aea565b611143565b6103dc610626366004612904565b61117b565b6104cc60195481565b6104676106423660046128ab565b6111d0565b6104cc6106553660046128db565b60046020526000908152604090205481565b6103dc610675366004612b4e565b61120b565b601454610467906001600160a01b031681565b6104cc601a5481565b6104cc60185481565b600054610467906001600160a01b031681565b6103dc6106c03660046128ab565b6112f4565b6104cc60115481565b6103dc6106dc366004612b91565b611368565b61043161140b565b6103dc6106f7366004612904565b611418565b61040161070a3660046128db565b600b6020526000908152604090205460ff1681565b6103dc61072d366004612904565b61146d565b601754610467906001600160a01b031681565b6104cc600e5481565b61040161075c366004612992565b6114d9565b6103dc61076f366004612992565b6114ed565b6104cc60155481565b6103dc61078b366004612bc4565b6115ba565b6104677f000000000000000000000000eff92a263d31888d860bd50809a8d171709b7b1c81565b6103dc6107c53660046128ab565b61167d565b6104316107d83660046128ab565b6116ac565b6104016107eb3660046128db565b601f6020526000908152604090205460ff1681565b6103dc61080e366004612aea565b611906565b610431611949565b6104cc610829366004612c5f565b600560209081526000928352604080842090915290825290205481565b6104cc60215481565b61040161085d366004612c5f565b600760209081526000928352604080842090915290825290205460ff1681565b6104cc61088b3660046128db565b601e6020526000908152604090205481565b6103dc6108ab3660046128db565b611956565b601254610467906001600160a01b031681565b6103dc6108d13660046128ab565b6119f2565b610431611a21565b601c546104019060ff1681565b6000546001600160a01b03163314610915576040516282b42960e81b815260040160405180910390fd5b601b55565b6000546001600160a01b03163314610944576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152601f60205260409020805460ff1916911515919091179055565b6001805461097c90612c92565b80601f01602080910402602001604051908101604052809291908181526020018280546109a890612c92565b80156109f55780601f106109ca576101008083540402835291602001916109f5565b820191906000526020600020905b8154815290600101906020018083116109d857829003601f168201915b505050505081565b60006003548211158015610a115750600082115b15610ae8576000828152600860205260409020546001600160a01b0316338114801590610a6257506001600160a01b038116600090815260076020908152604080832033845290915290205460ff16155b15610a7f576040516282b42960e81b815260040160405180910390fd5b60008381526006602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610b44565b3360008181526005602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b6000546001600160a01b03163314610b78576040516282b42960e81b815260040160405180910390fd5b600e93909355600f91909155601055601155565b6003548111610e94576000818152600860205260409020546001600160a01b03848116911614610bcf57604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038216610bf657604051634e46966960e11b815260040160405180910390fd5b336001600160a01b03841614801590610c3357506001600160a01b038316600090815260076020908152604080832033845290915290205460ff16155b8015610c5657506000818152600660205260409020546001600160a01b03163314155b15610c73576040516282b42960e81b815260040160405180910390fd5b610c7b611a2e565b6001600160a01b03841660009081526004602052604081208054909190610ca3908490612ce2565b90915550610cb19050611a2e565b6001600160a01b03808416600081815260046020908152604080832080549096019095558582526008815284822080546001600160a01b031990811690941790556006815284822080549093169092559186168252600990529081208054610d1b90600190612ce2565b81548110610d2b57610d2b612cf5565b60009182526020808320909101546001600160a01b0387168352600982526040808420868552600a90935290922054815492935083928110610d6f57610d6f612cf5565b60009182526020808320909101929092556001600160a01b0386168152600990915260409020805480610da457610da4612d0b565b600082815260208082208301600019908101839055909201909255838252600a8152604080832054848452818420556001600160a01b038616808452600983529083208054600181810183558286529385200186905592529054610e089190612ce2565b6000838152600a602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b031660008051602061314a833981519152610e7d611a2e565b60405190815260200160405180910390a350505050565b6001600160a01b03831660009081526005602090815260408083203384529091529020546000198114610ef057610ecb8282612ce2565b6001600160a01b03851660009081526005602090815260408083203384529091529020555b610efb848484611a60565b50505b505050565b601d8181548110610f1357600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610f57576040516282b42960e81b815260040160405180910390fd5b600080546001600160a01b031916815560405133907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3565b6000546001600160a01b03163314610fbd576040516282b42960e81b815260040160405180910390fd5b601c805460ff1916911515919091179055565b6000546001600160a01b03163314610ffa576040516282b42960e81b815260040160405180910390fd5b611003816120ca565b50565b611011838383610b8c565b6001600160a01b0382163b158015906110bd5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401526000608484015290919084169063150b7a029060a4016020604051808303816000875af115801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b09190612d21565b6001600160e01b03191614155b15610efe57604051633da6393160e01b815260040160405180910390fd5b6000546001600160a01b03163314611105576040516282b42960e81b815260040160405180910390fd5b6001600160a01b039091166000908152600b60209081526040808320805494151560ff199586168117909155600d9092529091208054909216179055565b6000546001600160a01b0316331461116d576040516282b42960e81b815260040160405180910390fd5b611177828261219a565b5050565b6000546001600160a01b031633146111a5576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600b60205260409020805460ff1916911515919091179055565b6000818152600860205260409020546001600160a01b0316806112065760405163c5723b5160e01b815260040160405180910390fd5b919050565b6000546001600160a01b03163314611235576040516282b42960e81b815260040160405180910390fd5b601280546001600160a01b03199081166001600160a01b039586169081178355601380548316958716959095178555601480549092169386169390931781556000928352600b60209081526040808520805460ff19908116600190811790925587548916875282872080548216831790558454891687528287208054821683179055945488168652600d909252808520805485168317905594548616845284842080548416821790559054909416825291902080549091169091179055565b6000546001600160a01b0316331461131e576040516282b42960e81b815260040160405180910390fd5b621e84808111156113635760405162461bcd60e51b815260040161135a906020808252600490820152633230307760e01b604082015260600190565b60405180910390fd5b602155565b6000546001600160a01b03163314611392576040516282b42960e81b815260040160405180910390fd5b60405163a9059cbb60e01b81526001600160a01b0382811660048301526024820184905284169063a9059cbb906044016020604051808303816000875af11580156113e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114059190612d4b565b50505050565b6002805461097c90612c92565b6000546001600160a01b03163314611442576040516282b42960e81b815260040160405180910390fd5b6001600160a01b03919091166000908152600d60205260409020805460ff1916911515919091179055565b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b60006114e6338484611a60565b9392505050565b6000546001600160a01b03163314611517576040516282b42960e81b815260040160405180910390fd5b604080516000808252602082019092526001600160a01b0384169083906040516115419190612d68565b60006040518083038185875af1925050503d806000811461157e576040519150601f19603f3d011682016040523d82523d6000602084013e611583565b606091505b5050905080610efe5760405162461bcd60e51b815260206004820152600360248201526222aa2360e91b604482015260640161135a565b6115c5858585610b8c565b6001600160a01b0384163b1580159061165f5750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a029061160f9033908a90899089908990600401612d84565b6020604051808303816000875af115801561162e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116529190612d21565b6001600160e01b03191614155b15610efb57604051633da6393160e01b815260040160405180910390fd5b6000546001600160a01b031633146116a7576040516282b42960e81b815260040160405180910390fd5b602055565b60606000826040516020016116c391815260200190565b60408051601f198184030181529190528051602090910120905060006116eb6128a083612dee565b6040805161014081018252600281526006602082015260129181019190915261010c606082015261013c60808201526101e060a08201526101f660c082015261098860e08201526111ce610100820152610712610120820152909150600080805b600a8160ff1610156117cc5782848260ff16600a811061176e5761176e612cf5565b602002015161ffff166117819190612e02565b851015611790578091506117cc565b838160ff16600a81106117a5576117a5612cf5565b60200201516117b89061ffff1684612e02565b9250806117c481612e15565b91505061174c565b5060408051610140810182526004815260286020820152608c9181019190915260f06060820152610280608082015261041060a08201526105a060c082015261073060e08201526109246101008201526109ec61012082015260008160ff8416600a811061183c5761183c612cf5565b602002015161ffff16905060008360ff166000036118705761185e8288612dee565b611869906001612e02565b90506118c9565b60008361187e600187612e34565b60ff16600a811061189157611891612cf5565b602002015161ffff1690506118a68184612ce2565b6118b09089612dee565b6118ba9082612e02565b6118c5906001612e02565b9150505b60226118d4826121b3565b60236040516020016118e893929190612ec0565b60405160208183030381529060405298505050505050505050919050565b6000546001600160a01b03163314611930576040516282b42960e81b815260040160405180910390fd5b602261193c8382612f39565b506023610efe8282612f39565b6022805461097c90612c92565b6000546001600160a01b03163314611980576040516282b42960e81b815260040160405180910390fd5b6001600160a01b0381166119a7576040516349e27cff60e01b815260040160405180910390fd5b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a350565b6000546001600160a01b03163314611a1c576040516282b42960e81b815260040160405180910390fd5b601855565b6023805461097c90612c92565b6000611a5b7f0000000000000000000000000000000000000000000000000000000000000012600a6130dd565b905090565b6017546000906001600160a01b03168015611b2357601780546001600160a01b03191690556040516370a0823160e01b81526001600160a01b0382811660048301526000917f000000000000000000000000cfdce362ef3e8cce952a74cb31b1e039fcfacfaf909116906370a0823190602401602060405180830381865afa158015611af0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1491906130ec565b1115611b2357611b23816120ca565b6000611b2d611a2e565b6001600160a01b038088166000818152600460205260408082208054948b1683529082205492825293945091929091879190611b698386612ce2565b90915550506001600160a01b0388166000908152600d602052604090205460ff16158015611bb057506001600160a01b0387166000908152600d602052604090205460ff16155b15611f21577f000000000000000000000000cfdce362ef3e8cce952a74cb31b1e039fcfacfaf6001600160a01b0316886001600160a01b03161480611c2657507f000000000000000000000000cfdce362ef3e8cce952a74cb31b1e039fcfacfaf6001600160a01b0316876001600160a01b0316145b15611f2157601c5460ff16611c625760405162461bcd60e51b81526020600482015260026024820152614e4160f01b604482015260640161135a565b7f000000000000000000000000cfdce362ef3e8cce952a74cb31b1e039fcfacfaf6001600160a01b0316876001600160a01b031603611cb757601780546001600160a01b0319166001600160a01b038a161790555b6000611cda6103e8611cd4600e548a61224690919063ffffffff16565b90612252565b6012546001600160a01b0316600090815260046020526040812080549293508392909190611d09908490612e02565b90915550506012546040518281526001600160a01b03918216918b169060008051602061314a8339815191529060200160405180910390a36000611d5e6103e8611cd4600f548b61224690919063ffffffff16565b30600090815260046020526040812080549293508392909190611d82908490612e02565b909155505060405181815230906001600160a01b038c169060008051602061314a8339815191529060200160405180910390a36000611dd26103e8611cd46010548c61224690919063ffffffff16565b6013546001600160a01b0316600090815260046020526040812080549293508392909190611e01908490612e02565b925050819055508060156000828254611e1a9190612e02565b90915550506013546040518281526001600160a01b03918216918d169060008051602061314a8339815191529060200160405180910390a36000611e6f6103e8611cd46011548d61224690919063ffffffff16565b6014546001600160a01b0316600090815260046020526040812080549293508392909190611e9e908490612e02565b925050819055508060166000828254611eb79190612e02565b90915550506014546040518281526001600160a01b03918216918e169060008051602061314a8339815191529060200160405180910390a3808284611efc878e612ce2565b611f069190612ce2565b611f109190612ce2565b611f1a9190612ce2565b9950505050505b6001600160a01b03808816600090815260046020908152604080832080548b019055928b168252600b9052205460ff16611fb8576001600160a01b038816600090815260046020526040812054611f79908590613105565b611f838585613105565b611f8d9190612ce2565b905060005b81811015611fb557611fa38a61225e565b80611fad81613119565b915050611f92565b50505b6001600160a01b0387166000908152600b602052604090205460ff1661203d576000611fe48483613105565b6001600160a01b038916600090815260046020526040902054612008908690613105565b6120129190612ce2565b905060005b8181101561203a5761202889612386565b8061203281613119565b915050612017565b50505b7f000000000000000000000000cfdce362ef3e8cce952a74cb31b1e039fcfacfaf6001600160a01b0316886001600160a01b03161461208157612081602154612491565b866001600160a01b0316886001600160a01b031660008051602061314a833981519152886040516120b491815260200190565b60405180910390a3506001979650505050505050565b6001600160a01b0381166000908152601e6020526040812054900361100357601d5415806121295750806001600160a01b0316601d60008154811061211157612111612cf5565b6000918252602090912001546001600160a01b031614155b1561100357803b801561213a575050565b50601d80546001600160a01b0383166000818152601e60205260408120839055600183018455929092527f6d4407e7be21f808e6509aa9fa9143369579dd7d760fe20a2c09680fc146134f0180546001600160a01b031916909117905550565b60016121a68382612f39565b506002610efe8282612f39565b606060006121c08361273b565b600101905060008167ffffffffffffffff8111156121e0576121e0612a47565b6040519080825280601f01601f19166020018201604052801561220a576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461221457509392505050565b60006114e68284613132565b60006114e68284613105565b6001600160a01b03811661228557604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b038116600090815260096020526040812080546122ab90600190612ce2565b815481106122bb576122bb612cf5565b9060005260206000200154905060096000836001600160a01b03166001600160a01b031681526020019081526020016000208054806122fc576122fc612d0b565b600082815260208082208301600019908101839055909201909255828252600a815260408083208390556008825280832080546001600160a01b031990811690915560069092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6001600160a01b0381166123ad57604051634e46966960e11b815260040160405180910390fd5b60038054600101908190556000818152600860205260409020546001600160a01b0316156123ee5760405163119b4fd360e11b815260040160405180910390fd5b600081815260086020908152604080832080546001600160a01b0319166001600160a01b0387169081179091558084526009835290832080546001818101835582865293852001859055925290546124469190612ce2565b6000828152600a602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8060000361249c5750565b60006124a6611a2e565b905043601b54601a546124b99190612e02565b11156124c3575050565b601854306000908152600460205260409020548111156124e257505050565b60007f000000000000000000000000cfdce362ef3e8cce952a74cb31b1e039fcfacfaf90506000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256b91906130ec565b90508060000361257c575050505050565b601d54600090819081908180805a6020549091505b8c8410801561259f57508483105b156127285784601954106125b35760006019555b601d601954815481106125c8576125c8612cf5565b60009182526020808320909101546001600160a01b0316808352601f90915260409091205490985060ff166126e6576040516370a0823160e01b81526001600160a01b0389811660048301528b16906370a0823190602401602060405180830381865afa15801561263d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061266191906130ec565b96508087106126e65788612675888d613132565b61267f9190613105565b955085156126e65730600090815260046020526040812080548892906126a6908490612ce2565b909155506126b7905088878e612813565b6040518681526001600160a01b03891690309060008051602061314a8339815191529060200160405180910390a35b5a6126f19083612ce2565b6126fb9085612e02565b93505a60198054919350600061271083613119565b9190505550828061272090613119565b935050612591565b505043601a555050505050505050505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061277a5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef810000000083106127a6576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106127c457662386f26fc10000830492506010015b6305f5e10083106127dc576305f5e100830492506008015b61271083106127f057612710830492506004015b60648310612802576064830492506002015b600a8310610b485760010192915050565b6001600160a01b038316600090815260046020526040812080549184919061283b8385612e02565b909155506000905061284d8383613105565b6001600160a01b038616600090815260046020526040902054612871908590613105565b61287b9190612ce2565b905060005b818110156128a35761289186612386565b8061289b81613119565b915050612880565b505050505050565b6000602082840312156128bd57600080fd5b5035919050565b80356001600160a01b038116811461120657600080fd5b6000602082840312156128ed57600080fd5b6114e6826128c4565b801515811461100357600080fd5b6000806040838503121561291757600080fd5b612920836128c4565b91506020830135612930816128f6565b809150509250929050565b60005b8381101561295657818101518382015260200161293e565b50506000910152565b602081526000825180602084015261297e81604085016020870161293b565b601f01601f19169190910160400192915050565b600080604083850312156129a557600080fd5b6129ae836128c4565b946020939093013593505050565b600080600080608085870312156129d257600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215612a0357600080fd5b612a0c846128c4565b9250612a1a602085016128c4565b9150604084013590509250925092565b600060208284031215612a3c57600080fd5b81356114e6816128f6565b634e487b7160e01b600052604160045260246000fd5b600082601f830112612a6e57600080fd5b813567ffffffffffffffff80821115612a8957612a89612a47565b604051601f8301601f19908116603f01168101908282118183101715612ab157612ab1612a47565b81604052838152866020858801011115612aca57600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215612afd57600080fd5b823567ffffffffffffffff80821115612b1557600080fd5b612b2186838701612a5d565b93506020850135915080821115612b3757600080fd5b50612b4485828601612a5d565b9150509250929050565b600080600060608486031215612b6357600080fd5b612b6c846128c4565b9250612b7a602085016128c4565b9150612b88604085016128c4565b90509250925092565b600080600060608486031215612ba657600080fd5b612baf846128c4565b925060208401359150612b88604085016128c4565b600080600080600060808688031215612bdc57600080fd5b612be5866128c4565b9450612bf3602087016128c4565b935060408601359250606086013567ffffffffffffffff80821115612c1757600080fd5b818801915088601f830112612c2b57600080fd5b813581811115612c3a57600080fd5b896020828501011115612c4c57600080fd5b9699959850939650602001949392505050565b60008060408385031215612c7257600080fd5b612c7b836128c4565b9150612c89602084016128c4565b90509250929050565b600181811c90821680612ca657607f821691505b602082108103612cc657634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610b4857610b48612ccc565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b600060208284031215612d3357600080fd5b81516001600160e01b0319811681146114e657600080fd5b600060208284031215612d5d57600080fd5b81516114e6816128f6565b60008251612d7a81846020870161293b565b9190910192915050565b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290526000828460a0840137600060a0848401015260a0601f19601f85011683010190509695505050505050565b634e487b7160e01b600052601260045260246000fd5b600082612dfd57612dfd612dd8565b500690565b80820180821115610b4857610b48612ccc565b600060ff821660ff8103612e2b57612e2b612ccc565b60010192915050565b60ff8281168282160390811115610b4857610b48612ccc565b60008154612e5a81612c92565b60018281168015612e725760018114612e8757612eb6565b60ff1984168752821515830287019450612eb6565b8560005260208060002060005b85811015612ead5781548a820152908401908201612e94565b50505082870194505b5050505092915050565b6000612ecc8286612e4d565b8451612edc81836020890161293b565b612ee881830186612e4d565b979650505050505050565b601f821115610efe57600081815260208120601f850160051c81016020861015612f1a5750805b601f850160051c820191505b818110156128a357828155600101612f26565b815167ffffffffffffffff811115612f5357612f53612a47565b612f6781612f618454612c92565b84612ef3565b602080601f831160018114612f9c5760008415612f845750858301515b600019600386901b1c1916600185901b1785556128a3565b600085815260208120601f198616915b82811015612fcb57888601518255948401946001909101908401612fac565b5085821015612fe95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b8085111561303457816000190482111561301a5761301a612ccc565b8085161561302757918102915b93841c9390800290612ffe565b509250929050565b60008261304b57506001610b48565b8161305857506000610b48565b816001811461306e576002811461307857613094565b6001915050610b48565b60ff84111561308957613089612ccc565b50506001821b610b48565b5060208310610133831016604e8410600b84101617156130b7575081810a610b48565b6130c18383612ff9565b80600019048211156130d5576130d5612ccc565b029392505050565b60006114e660ff84168361303c565b6000602082840312156130fe57600080fd5b5051919050565b60008261311457613114612dd8565b500490565b60006001820161312b5761312b612ccc565b5060010190565b8082028115828204841417610b4857610b48612ccc56fee59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487a2646970667358221220b5223b5bfd7cdcddffc0efb38396555bb0c2dc0c829e224e47a9434ef44f67b264736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000088d1f2b069cce56b3ba6e9f577396aafbc019606
-----Decoded View---------------
Arg [0] : _owner (address): 0x88d1f2b069ccE56B3Ba6e9f577396aAfbC019606
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000088d1f2b069cce56b3ba6e9f577396aafbc019606
Deployed Bytecode Sourcemap
40831:2242:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38582:102;;;;;;:::i;:::-;;:::i;:::-;;24391:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;733:14:1;;726:22;708:41;;696:2;681:18;24391:46:0;;;;;;;;39824:119;;;;;;:::i;:::-;;:::i;22910:18::-;;;:::i;:::-;;;;;;;:::i;23621:46::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;23621:46:0;;;;;;-1:-1:-1;;;;;2023:32:1;;;2005:51;;1993:2;1978:18;23621:46:0;1859:203:1;28305:642:0;;;;;;:::i;:::-;;:::i;24692:70::-;;;;;-1:-1:-1;;;;;24692:70:0;;;23146:36;;;;;;;;2472:25:1;;;2460:2;2445:18;23146:36:0;2326:177:1;24904:25:0;;;;;;27019:192;;;;;;:::i;:::-;;:::i;29354:1716::-;;;;;;:::i;:::-;;:::i;24485:24::-;;;;;;38692;;;;;;:::i;:::-;;:::i;20868:151::-;;;:::i;26441:85::-;;;;;;:::i;:::-;;:::i;23046:31::-;;;;;;;;3649:4:1;3637:17;;;3619:36;;3607:2;3592:18;23046:31:0;3477:184:1;24524:24:0;;;;;;38934:87;;;;;;:::i;:::-;;:::i;39463:40::-;;;;;;24350:34;;;;;31366:405;;;;;;:::i;:::-;;:::i;27599:146::-;;;;;;:::i;:::-;;:::i;25124:38::-;;;;;;23281:21;;;;;;38830:96;38904:7;:14;38830:96;;41558:158;;;;;;:::i;:::-;;:::i;27354:111::-;;;;;;:::i;:::-;;:::i;25045:29::-;;;;;;27817:193;;;;;;:::i;:::-;;:::i;23387:44::-;;;;;;:::i;:::-;;;;;;;;;;;;;;26534:477;;;;;;:::i;:::-;;:::i;24781:70::-;;;;;-1:-1:-1;;;;;24781:70:0;;;25081:36;;;;;;24982:38;;;;;;20309:20;;;;;-1:-1:-1;;;;;20309:20:0;;;39553:149;;;;;;:::i;:::-;;:::i;24567:24::-;;;;;;42736:147;;;;;;:::i;:::-;;:::i;22964:20::-;;;:::i;27473:118::-;;;;;;:::i;:::-;;:::i;24232:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28998:207;;;;;;:::i;:::-;;:::i;24938:37::-;;;;;-1:-1:-1;;;;;24938:37:0;;;24446:24;;;;;;31129:160;;;;;;:::i;:::-;;:::i;42891:177::-;;;;;;:::i;:::-;;:::i;24867:30::-;;;;;;31866:437;;;;;;:::i;:::-;;:::i;24304:39::-;;;;;39710:106;;;;;;:::i;:::-;;:::i;41727:1001::-;;;;;;:::i;:::-;;:::i;38776:45::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;41395:155;;;;;;:::i;:::-;;:::i;40867:120::-;;;:::i;23501:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;39510:34;;;;;;23732:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;38723:46;;;;;;:::i;:::-;;;;;;;;;;;;;;20641:219;;;;;;:::i;:::-;;:::i;24607:70::-;;;;;-1:-1:-1;;;;;24607:70:0;;;38458:116;;;;;;:::i;:::-;;:::i;40994:30::-;;;:::i;25171:29::-;;;;;;;;;38582:102;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;38650:19:::1;:26:::0;38582:102::o;39824:119::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;-1:-1:-1;;;;;39907:19:0;;;::::1;;::::0;;;:13:::1;:19;::::0;;;;:28;;-1:-1:-1;;39907:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39824:119::o;22910:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28305:642::-;28408:4;28443:6;;28429:10;:20;;:38;;;;;28466:1;28453:10;:14;28429:38;28425:491;;;28484:13;28500:20;;;:8;:20;;;;;;-1:-1:-1;;;;;28500:20:0;28541:10;:19;;;;;:59;;-1:-1:-1;;;;;;28565:23:0;;;;;;:16;:23;;;;;;;;28589:10;28565:35;;;;;;;;;;28564:36;28541:59;28537:121;;;28628:14;;-1:-1:-1;;;28628:14:0;;;;;;;;;;;28537:121;28674:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;28674:33:0;-1:-1:-1;;;;;28674:33:0;;;;;;;;;28729:36;;2472:25:1;;;28729:36:0;;;;;;2445:18:1;28729:36:0;;;;;;;28469:308;28425:491;;;28808:10;28798:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;28798:30:0;;;;;;;;;;;;:43;;;28863:41;2472:25:1;;;28798:30:0;;28808:10;28863:41;;2445:18:1;28863:41:0;;;;;;;28425:491;-1:-1:-1;28935:4:0;28305:642;;;;;:::o;27019:192::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;27120:4:::1;:12:::0;;;;27143:4:::1;:12:::0;;;;27168:4:::1;:12:::0;27191:4:::1;:12:::0;27019:192::o;29354:1716::-;29500:6;;29486:10;:20;29482:1581;;29535:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;29527:28:0;;;29535:20;;29527:28;29523:91;;29583:15;;-1:-1:-1;;;29583:15:0;;;;;;;;;;;29523:91;-1:-1:-1;;;;;29634:16:0;;29630:82;;29678:18;;-1:-1:-1;;;29678:18:0;;;;;;;;;;;29630:82;29750:10;-1:-1:-1;;;;;29750:18:0;;;;;;:74;;-1:-1:-1;;;;;;29790:22:0;;;;;;:16;:22;;;;;;;;29813:10;29790:34;;;;;;;;;;29789:35;29750:74;:132;;;;-1:-1:-1;29859:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;29859:23:0;29845:10;:37;;29750:132;29728:226;;;29924:14;;-1:-1:-1;;;29924:14:0;;;;;;;;;;;29728:226;29989:10;:8;:10::i;:::-;-1:-1:-1;;;;;29970:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;30062:10:0;;-1:-1:-1;30062:8:0;:10::i;:::-;-1:-1:-1;;;;;30045:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;30104:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;30104:25:0;;;;;;;;30151:11;:23;;;;;30144:30;;;;;;;;30252:12;;;;;:6;:12;;;;;30265:19;;:23;;-1:-1:-1;;30265:23:0;:::i;:::-;30252:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;30304:12:0;;;;:6;:12;;;;;;30317:23;;;:11;:23;;;;;;;30304:37;;30252;;-1:-1:-1;30252:37:0;;30304;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;30388:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;30388:18:0;;;;;;;;;;;;30492:23;;;:11;:23;;;;;;;30467:22;;;;;;:48;-1:-1:-1;;;;;30569:10:0;;;;;:6;:10;;;;;:27;;30388:18;30569:27;;;;;;;;;;;;;;;30679:10;;:17;;:21;;30388:18;30679:21;:::i;:::-;30653:23;;;;:11;:23;;;;;;:47;;;;30722:30;;30665:10;;-1:-1:-1;;;;;30722:30:0;;;;;;;;;;;30792:2;-1:-1:-1;;;;;30772:35:0;30786:4;-1:-1:-1;;;;;30772:35:0;-1:-1:-1;;;;;;;;;;;30796:10:0;:8;:10::i;:::-;30772:35;;2472:25:1;;;2460:2;2445:18;30772:35:0;;;;;;;29508:1311;29354:1716;;;:::o;29482:1581::-;-1:-1:-1;;;;;30858:15:0;;30840;30858;;;:9;:15;;;;;;;;30874:10;30858:27;;;;;;;;-1:-1:-1;;30906:28:0;;30902:101;;30983:20;30993:10;30983:7;:20;:::i;:::-;-1:-1:-1;;;;;30953:15:0;;;;;;:9;:15;;;;;;;;30969:10;30953:27;;;;;;;:50;30902:101;31020:31;31030:4;31036:2;31040:10;31020:9;:31::i;:::-;;30825:238;29482:1581;29354:1716;;;:::o;38692:24::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;38692:24:0;;-1:-1:-1;38692:24:0;:::o;20868:151::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;20947:1:::1;20931:18:::0;;-1:-1:-1;;;;;;20931:18:0::1;::::0;;20967:44:::1;::::0;20988:10:::1;::::0;20967:44:::1;::::0;20947:1;;20967:44:::1;20868:151::o:0;26441:85::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;26502:9:::1;:16:::0;;-1:-1:-1;;26502:16:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26441:85::o;38934:87::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;38999:14:::1;39009:3;38999:9;:14::i;:::-;38934:87:::0;:::o;31366:405::-;31490:26;31503:4;31509:2;31513;31490:12;:26::i;:::-;-1:-1:-1;;;;;31547:14:0;;;:19;;;;:154;;-1:-1:-1;31583:61:0;;-1:-1:-1;;;31583:61:0;;;31619:10;31583:61;;;8267:34:1;-1:-1:-1;;;;;8337:15:1;;;8317:18;;;8310:43;8369:18;;;8362:34;;;8432:3;8412:18;;;8405:31;-1:-1:-1;8452:19:1;;;8445:30;31661:40:0;;31583:35;;;;31661:40;;8492:19:1;;31583:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;31583:118:0;;;31547:154;31529:235;;;31735:17;;-1:-1:-1;;;31735:17:0;;;;;;;;;;;27599:146;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;-1:-1:-1;;;;;27672:17:0;;::::1;;::::0;;;:9:::1;:17;::::0;;;;;;;:25;;;::::1;;-1:-1:-1::0;;27672:25:0;;::::1;::::0;::::1;::::0;;;27708:13:::1;:21:::0;;;;;;:29;;;;::::1;;::::0;;27599:146::o;41558:158::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;41678:30:::1;41693:5;41700:7;41678:14;:30::i;:::-;41558:158:::0;;:::o;27354:111::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;-1:-1:-1;;;;;27432:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;27432:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27354:111::o;27817:193::-;27875:13;27909:12;;;:8;:12;;;;;;-1:-1:-1;;;;;27909:12:0;;27934:69;;27981:10;;-1:-1:-1;;;27981:10:0;;;;;;;;;;;27934:69;27817:193;;;:::o;26534:477::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;26643:10:::1;:24:::0;;-1:-1:-1;;;;;;26643:24:0;;::::1;-1:-1:-1::0;;;;;26643:24:0;;::::1;::::0;;::::1;::::0;;26678:10:::1;:24:::0;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;26713:10:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;26758:21:0;;;:9:::1;:21;::::0;;;;;;;:28;;-1:-1:-1;;26758:28:0;;::::1;-1:-1:-1::0;26758:28:0;;::::1;::::0;;;26807:10;;;::::1;26797:21:::0;;;;;:28;;;::::1;::::0;::::1;::::0;;26846:10;;;::::1;26836:21:::0;;;;;:28;;;::::1;::::0;::::1;::::0;;26899:10;;;::::1;26885:25:::0;;:13:::1;:25:::0;;;;;;:32;;;::::1;::::0;::::1;::::0;;26942:10;;;::::1;26928:25:::0;;;;;:32;;;::::1;::::0;::::1;::::0;;26985:10;;;;::::1;26971:25:::0;;;;;:32;;;;::::1;::::0;;::::1;::::0;;26534:477::o;39553:149::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;39645:7:::1;39632:9;:20;;39624:37;;;;-1:-1:-1::0;;;39624:37:0::1;;;;;;9019:2:1::0;9001:21;;;9058:1;9038:18;;;9031:29;-1:-1:-1;;;9091:2:1;9076:18;;9069:34;9135:2;9120:18;;8817:327;39624:37:0::1;;;;;;;;;39672:10;:22:::0;39553:149::o;42736:147::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;42838:37:::1;::::0;-1:-1:-1;;;42838:37:0;;-1:-1:-1;;;;;9341:32:1;;;42838:37:0::1;::::0;::::1;9323:51:1::0;9390:18;;;9383:34;;;42838:21:0;::::1;::::0;::::1;::::0;9296:18:1;;42838:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42736:147:::0;;;:::o;22964:20::-;;;;;;;:::i;27473:118::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;-1:-1:-1;;;;;27554:21:0;;;::::1;;::::0;;;:13:::1;:21;::::0;;;;:29;;-1:-1:-1;;27554:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;27473:118::o;28998:207::-;29101:10;29084:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;29084:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;29084:49:0;;;;;;;;;;29151:46;;708:41:1;;;29084:38:0;;29101:10;29151:46;;681:18:1;29151:46:0;;;;;;;28998:207;;:::o;31129:160::-;31224:4;31248:33;31258:10;31270:2;31274:6;31248:9;:33::i;:::-;31241:40;31129:160;-1:-1:-1;;;31129:160:0:o;42891:177::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;43013:12:::1;::::0;;42972::::1;43013::::0;;;::::1;::::0;::::1;::::0;;;-1:-1:-1;;;;;42989:7:0;::::1;::::0;43005:6;;42989:37:::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42971:55;;;43045:7;43037:23;;;::::0;-1:-1:-1;;;43037:23:0;;10172:2:1;43037:23:0::1;::::0;::::1;10154:21:1::0;10211:1;10191:18;;;10184:29;-1:-1:-1;;;10229:18:1;;;10222:33;10272:18;;43037:23:0::1;9970:326:1::0;31866:437:0;32020:26;32033:4;32039:2;32043;32020:12;:26::i;:::-;-1:-1:-1;;;;;32077:14:0;;;:19;;;;:156;;-1:-1:-1;32113:63:0;;-1:-1:-1;;;32113:63:0;;;32193:40;-1:-1:-1;;;;;32113:35:0;;;32193:40;;32113:63;;32149:10;;32161:4;;32167:2;;32171:4;;;;32113:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;32113:120:0;;;32077:156;32059:237;;;32267:17;;-1:-1:-1;;;32267:17:0;;;;;;;;;;;39710:106;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;39784:15:::1;:24:::0;39710:106::o;41727:1001::-;41787:13;41820:12;41878:2;41861:20;;;;;;11097:19:1;;11141:2;11132:12;;10968:182;41861:20:0;;;;-1:-1:-1;;41861:20:0;;;;;;;;;41851:31;;41861:20;41851:31;;;;;-1:-1:-1;41835:49:0;41910:10;41915:5;41851:31;41910:10;:::i;:::-;41933:64;;;;;;;;41959:1;41933:64;;41961:1;41933:64;;;;41963:2;41933:64;;;;;;;41966:3;41933:64;;;;41970:3;41933:64;;;;41974:3;41933:64;;;;41978:3;41933:64;;;;41982:4;41933:64;;;;41987:4;41933:64;;;;41992:4;41933:64;;;;41895:25;;-1:-1:-1;41933:22:0;;;42058:197;42074:11;42072:1;:13;;;42058:197;;;42134:5;42126:4;42131:1;42126:7;;;;;;;;;:::i;:::-;;;;;:13;;;;;;:::i;:::-;42121:4;:18;42117:96;;;42172:1;42160:13;;42192:5;;42117:96;42236:4;42241:1;42236:7;;;;;;;;;:::i;:::-;;;;;42227:16;;;;;;:::i;:::-;;-1:-1:-1;42087:3:0;;;;:::i;:::-;;;;42058:197;;;-1:-1:-1;42267:69:0;;;;;;;;42294:1;42267:69;;42296:2;42267:69;;;;42299:3;42267:69;;;;;;;42303:3;42267:69;;;;42307:3;42267:69;;;;42311:4;42267:69;;;;42316:4;42267:69;;;;42321:4;42267:69;;;;42326:4;42267:69;;;;42331:4;42267:69;;;;:23;:69;42364:16;;;;;;;;;;:::i;:::-;;;;;42347:33;;;;42391:15;42421:9;:14;;42434:1;42421:14;42417:201;;42462:11;42467:6;42462:4;:11;:::i;:::-;:15;;42476:1;42462:15;:::i;:::-;42452:25;;42417:201;;;42508:15;42526:5;42532:13;42544:1;42532:9;:13;:::i;:::-;42526:20;;;;;;;;;:::i;:::-;;;;;42508:38;;;-1:-1:-1;42587:14:0;42508:38;42587:6;:14;:::i;:::-;42581:21;;:4;:21;:::i;:::-;42571:31;;:7;:31;:::i;:::-;:35;;42605:1;42571:35;:::i;:::-;42561:45;;42493:125;42417:201;42663:12;42677:25;42694:7;42677:16;:25::i;:::-;42703:6;42649:61;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;42641:69;;;;;;;;;;41727:1001;;;:::o;41395:155::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;41491:12:::1;:24;41506:9:::0;41491:12;:24:::1;:::i;:::-;-1:-1:-1::0;41526:6:0::1;:16;41535:7:::0;41526:6;:16:::1;:::i;40867:120::-:0;;;;;;;:::i;20641:219::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;-1:-1:-1;;;;;20724:20:0;::::1;20720:47;;20753:14;;-1:-1:-1::0;;;20753:14:0::1;;;;;;;;;;;20720:47;20780:5;:14:::0;;-1:-1:-1;;;;;;20780:14:0::1;-1:-1:-1::0;;;;;20780:14:0;::::1;::::0;;::::1;::::0;;20812:40:::1;::::0;20780:14;;20833:10:::1;::::0;20812:40:::1;::::0;20780:5;20812:40:::1;20641:219:::0;:::o;38458:116::-;20396:5;;-1:-1:-1;;;;;20396:5:0;20382:10;:19;20378:46;;20410:14;;-1:-1:-1;;;20410:14:0;;;;;;;;;;;20378:46;38534:23:::1;:32:::0;38458:116::o;40994:30::-;;;;;;;:::i;35511:92::-;35554:7;35581:14;35587:8;35581:2;:14;:::i;:::-;35574:21;;35511:92;:::o;32371:2730::-;32535:22;;32484:4;;-1:-1:-1;;;;;32535:22:0;32572:35;;32568:244;;32624:22;:35;;-1:-1:-1;;;;;;32624:35:0;;;32678:50;;-1:-1:-1;;;32678:50:0;;-1:-1:-1;;;;;2023:32:1;;;32678:50:0;;;2005:51:1;-1:-1:-1;;32685:9:0;32678:27;;;;;;1978:18:1;;32678:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:54;32674:127;;;32753:32;32763:21;32753:9;:32::i;:::-;32824:12;32839:10;:8;:10::i;:::-;-1:-1:-1;;;;;32890:15:0;;;32860:27;32890:15;;;:9;:15;;;;;;;;32948:13;;;;;;;;;32974:15;;;32824:25;;-1:-1:-1;32890:15:0;;32948:13;;32993:6;;32890:15;32974:25;32993:6;32890:15;32974:25;:::i;:::-;;;;-1:-1:-1;;;;;;;33017:19:0;;;;;;:13;:19;;;;;;;;33016:20;:42;;;;-1:-1:-1;;;;;;33041:17:0;;;;;;:13;:17;;;;;;;;33040:18;33016:42;33012:1205;;;33095:9;-1:-1:-1;;;;;33079:26:0;:4;-1:-1:-1;;;;;33079:26:0;;:54;;;;33123:9;-1:-1:-1;;;;;33109:24:0;:2;-1:-1:-1;;;;;33109:24:0;;33079:54;33075:1131;;;33162:9;;;;33154:23;;;;-1:-1:-1;;;33154:23:0;;17049:2:1;33154:23:0;;;17031:21:1;17088:1;17068:18;;;17061:29;-1:-1:-1;;;17106:18:1;;;17099:32;17148:18;;33154:23:0;16847:325:1;33154:23:0;33214:9;-1:-1:-1;;;;;33200:24:0;:2;-1:-1:-1;;;;;33200:24:0;;33196:109;;33256:22;:29;;-1:-1:-1;;;;;;33256:29:0;-1:-1:-1;;;;;33256:29:0;;;;;33196:109;33323:15;33341:26;33362:4;33341:16;33352:4;;33341:6;:10;;:16;;;;:::i;:::-;:20;;:26::i;:::-;33396:10;;-1:-1:-1;;;;;33396:10:0;33386:21;;;;:9;:21;;;;;:32;;33323:44;;-1:-1:-1;33323:44:0;;33386:21;;;:32;;33323:44;;33386:32;:::i;:::-;;;;-1:-1:-1;;33462:10:0;;33442:40;;2472:25:1;;;-1:-1:-1;;;;;33462:10:0;;;;33442:40;;;-1:-1:-1;;;;;;;;;;;33442:40:0;2460:2:1;2445:18;33442:40:0;;;;;;;33503:15;33521:26;33542:4;33521:16;33532:4;;33521:6;:10;;:16;;;;:::i;:26::-;33584:4;33566:24;;;;:9;:24;;;;;:35;;33503:44;;-1:-1:-1;33503:44:0;;33566:24;;;:35;;33503:44;;33566:35;:::i;:::-;;;;-1:-1:-1;;33625:43:0;;2472:25:1;;;33653:4:0;;-1:-1:-1;;;;;33625:43:0;;;-1:-1:-1;;;;;;;;;;;33625:43:0;2460:2:1;2445:18;33625:43:0;;;;;;;33689:15;33707:26;33728:4;33707:16;33718:4;;33707:6;:10;;:16;;;;:::i;:26::-;33762:10;;-1:-1:-1;;;;;33762:10:0;33752:21;;;;:9;:21;;;;;:32;;33689:44;;-1:-1:-1;33689:44:0;;33752:21;;;:32;;33689:44;;33752:32;:::i;:::-;;;;;;;;33822:7;33803:15;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;33873:10:0;;33853:40;;2472:25:1;;;-1:-1:-1;;;;;33873:10:0;;;;33853:40;;;-1:-1:-1;;;;;;;;;;;33853:40:0;2460:2:1;2445:18;33853:40:0;;;;;;;33914:15;33932:26;33953:4;33932:16;33943:4;;33932:6;:10;;:16;;;;:::i;:26::-;33987:10;;-1:-1:-1;;;;;33987:10:0;33977:21;;;;:9;:21;;;;;:32;;33914:44;;-1:-1:-1;33914:44:0;;33977:21;;;:32;;33914:44;;33977:32;:::i;:::-;;;;;;;;34042:7;34028:10;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;34093:10:0;;34073:40;;2472:25:1;;;-1:-1:-1;;;;;34093:10:0;;;;34073:40;;;-1:-1:-1;;;;;;;;;;;34073:40:0;2460:2:1;2445:18;34073:40:0;;;;;;;34183:7;34173;34163;34143:17;34153:7;34143:6;:17;:::i;:::-;:27;;;;:::i;:::-;:37;;;;:::i;:::-;:47;;;;:::i;:::-;34134:56;;33135:1071;;;;33075:1131;-1:-1:-1;;;;;34256:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;34364:15;;;;;:9;:15;;;;;;34359:251;;-1:-1:-1;;;;;34470:15:0;;34396:22;34470:15;;;:9;:15;;;;;;:22;;34488:4;;34470:22;:::i;:::-;34422:26;34444:4;34422:19;:26;:::i;:::-;34421:72;;;;:::i;:::-;34396:97;;34513:9;34508:91;34532:14;34528:1;:18;34508:91;;;34572:11;34578:4;34572:5;:11::i;:::-;34548:3;;;;:::i;:::-;;;;34508:91;;;;34381:229;34359:251;-1:-1:-1;;;;;34686:13:0;;;;;;:9;:13;;;;;;;;34681:244;;34716:22;34780:28;34804:4;34780:21;:28;:::i;:::-;-1:-1:-1;;;;;34742:13:0;;;;;;:9;:13;;;;;;:20;;34758:4;;34742:20;:::i;:::-;34741:68;;;;:::i;:::-;34716:93;;34829:9;34824:89;34848:14;34844:1;:18;34824:89;;;34888:9;34894:2;34888:5;:9::i;:::-;34864:3;;;;:::i;:::-;;;;34824:89;;;;34701:224;34681:244;34957:9;-1:-1:-1;;;;;34941:26:0;:4;-1:-1:-1;;;;;34941:26:0;;34937:86;;34984:27;35000:10;;34984:15;:27::i;:::-;35060:2;-1:-1:-1;;;;;35040:31:0;35054:4;-1:-1:-1;;;;;35040:31:0;-1:-1:-1;;;;;;;;;;;35064:6:0;35040:31;;;;2472:25:1;;2460:2;2445:18;;2326:177;35040:31:0;;;;;;;;-1:-1:-1;35089:4:0;;32371:2730;-1:-1:-1;;;;;;;32371:2730:0:o;39029:426::-;-1:-1:-1;;;;;39089:16:0;;;;;;:11;:16;;;;;;39084:21;;39080:368;;39131:7;:14;39126:19;;:40;;;39163:3;-1:-1:-1;;;;;39149:17:0;:7;39157:1;39149:10;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;39149:10:0;:17;;39126:40;39122:315;;;39236:16;;39275:8;;39271:63;;39308:7;39029:426;:::o;39271:63::-;-1:-1:-1;39371:7:0;:14;;-1:-1:-1;;;;;39352:16:0;;;;;;:11;:16;;;;;:33;;;39404:17;;;;;;;;;;;;;-1:-1:-1;;;;;;39404:17:0;;;;;;39029:426;:::o;36474:160::-;36587:4;:12;36594:5;36587:4;:12;:::i;:::-;-1:-1:-1;36610:6:0;:16;36619:7;36610:6;:16;:::i;13136:716::-;13192:13;13243:14;13260:17;13271:5;13260:10;:17::i;:::-;13280:1;13260:21;13243:38;;13296:20;13330:6;13319:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13319:18:0;-1:-1:-1;13296:41:0;-1:-1:-1;13461:28:0;;;13477:2;13461:28;13518:288;-1:-1:-1;;13550:5:0;-1:-1:-1;;;13687:2:0;13676:14;;13671:30;13550:5;13658:44;13748:2;13739:11;;;-1:-1:-1;13769:21:0;13518:288;13769:21;-1:-1:-1;13827:6:0;13136:716;-1:-1:-1;;;13136:716:0:o;19076:98::-;19134:7;19161:5;19165:1;19161;:5;:::i;19182:98::-;19240:7;19267:5;19271:1;19267;:5;:::i;36093:373::-;-1:-1:-1;;;;;36154:18:0;;36150:73;;36196:15;;-1:-1:-1;;;36196:15:0;;;;;;;;;;;36150:73;-1:-1:-1;;;;;36248:12:0;;36235:10;36248:12;;;:6;:12;;;;;36261:19;;:23;;36283:1;;36261:23;:::i;:::-;36248:37;;;;;;;;:::i;:::-;;;;;;;;;36235:50;;36296:6;:12;36303:4;-1:-1:-1;;;;;36296:12:0;-1:-1:-1;;;;;36296:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;36296:18:0;;;;;;;;;;;;36332:15;;;:11;:15;;;;;;36325:22;;;36365:8;:12;;;;;36358:19;;-1:-1:-1;;;;;;36358:19:0;;;;;;36395:11;:15;;;;;;36388:22;;;;;;;;36428:30;36344:2;;36296:18;-1:-1:-1;;;;;36428:30:0;;;;;36296:18;;36428:30;36139:327;36093:373;:::o;35611:474::-;-1:-1:-1;;;;;35670:16:0;;35666:74;;35710:18;;-1:-1:-1;;;35710:18:0;;;;;;;;;;;35666:74;35777:6;:8;;;;;;;;:6;35845:12;;;:8;:12;;;;;;-1:-1:-1;;;;;35845:12:0;:26;35841:81;;35895:15;;-1:-1:-1;;;35895:15:0;;;;;;;;;;;35841:81;35934:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;35934:17:0;-1:-1:-1;;;;;35934:17:0;;;;;;;;35962:10;;;:6;:10;;;;;:19;;-1:-1:-1;35962:19:0;;;;;;;;;;;;;;;36010:10;;:17;;:21;;-1:-1:-1;36010:21:0;:::i;:::-;35992:15;;;;:11;:15;;;;;;:39;;;;36049:28;;36004:2;;-1:-1:-1;;;;;36049:28:0;;;;;35992:15;;36049:28;35655:430;35611:474;:::o;36644:1806::-;36705:3;36712:1;36705:8;36701:47;;36644:1806;:::o;36701:47::-;36758:12;36773:10;:8;:10::i;:::-;36758:25;;36844:12;36822:19;;36798:21;;:43;;;;:::i;:::-;:58;36794:97;;;36873:7;36644:1806;:::o;36794:97::-;36929:23;;36985:4;36903:23;36967:24;;;:9;:24;;;;;;:42;-1:-1:-1;36963:81:0;;;37026:7;;36644:1806;:::o;36963:81::-;37054:9;37073;37054:29;;37094:12;37109:2;-1:-1:-1;;;;;37109:14:0;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37094:31;;37140:7;37151:1;37140:12;37136:51;;37169:7;;;;36644:1806;:::o;37136:51::-;37311:7;:14;37199:19;;;;;;;;;37419:9;37463:15;;37401:27;;-1:-1:-1;37491:905:0;37508:3;37498:7;:13;:46;;;;;37528:16;37515:10;:29;37498:46;37491:905;;;37583:16;37565:14;;:34;37561:93;;37637:1;37620:14;:18;37561:93;37682:7;37690:14;;37682:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;37682:23:0;37725:26;;;:13;:26;;;;;;;;37682:23;;-1:-1:-1;37725:26:0;;37720:515;;37784:25;;-1:-1:-1;;;37784:25:0;;-1:-1:-1;;;;;2023:32:1;;;37784:25:0;;;2005:51:1;37784:12:0;;;;;1978:18:1;;37784:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37772:37;;37845:13;37832:9;:26;37828:392;;37922:7;37892:27;37910:9;37892:15;:27;:::i;:::-;:37;;;;:::i;:::-;37883:46;-1:-1:-1;37956:10:0;;37952:249;;38013:4;37995:24;;;;:9;:24;;;;;:34;;38023:6;;37995:24;:34;;38023:6;;37995:34;:::i;:::-;;;;-1:-1:-1;38056:40:0;;-1:-1:-1;38070:11:0;38083:6;38091:4;38056:13;:40::i;:::-;38128:49;;2472:25:1;;;-1:-1:-1;;;;;38128:49:0;;;38150:4;;-1:-1:-1;;;;;;;;;;;38128:49:0;2460:2:1;2445:18;38128:49:0;;;;;;;37952:249;38282:9;38272:19;;:7;:19;:::i;:::-;38261:31;;:7;:31;:::i;:::-;38251:41;;38317:9;38341:14;:16;;38307:19;;-1:-1:-1;38341:14:0;:16;;;:::i;:::-;;;;;;38372:12;;;;;:::i;:::-;;;;37491:905;;;-1:-1:-1;;38430:12:0;38406:21;:36;-1:-1:-1;;;;;;;;;;;36644:1806:0:o;10079:922::-;10132:7;;-1:-1:-1;;;10210:15:0;;10206:102;;-1:-1:-1;;;10246:15:0;;;-1:-1:-1;10290:2:0;10280:12;10206:102;10335:6;10326:5;:15;10322:102;;10371:6;10362:15;;;-1:-1:-1;10406:2:0;10396:12;10322:102;10451:6;10442:5;:15;10438:102;;10487:6;10478:15;;;-1:-1:-1;10522:2:0;10512:12;10438:102;10567:5;10558;:14;10554:99;;10602:5;10593:14;;;-1:-1:-1;10636:1:0;10626:11;10554:99;10680:5;10671;:14;10667:99;;10715:5;10706:14;;;-1:-1:-1;10749:1:0;10739:11;10667:99;10793:5;10784;:14;10780:99;;10828:5;10819:14;;;-1:-1:-1;10862:1:0;10852:11;10780:99;10906:5;10897;:14;10893:66;;10942:1;10932:11;10987:6;10079:922;-1:-1:-1;;10079:922:0:o;35109:363::-;-1:-1:-1;;;;;35222:13:0;;35190:29;35222:13;;;:9;:13;;;;;;;;35263:5;;35222:13;35246:22;35263:5;35222:13;35246:22;:::i;:::-;;;;-1:-1:-1;35279:22:0;;-1:-1:-1;35343:28:0;35367:4;35343:21;:28;:::i;:::-;-1:-1:-1;;;;;35305:13:0;;;;;;:9;:13;;;;;;:20;;35321:4;;35305:20;:::i;:::-;35304:68;;;;:::i;:::-;35279:93;;35388:9;35383:81;35407:14;35403:1;:18;35383:81;;;35443:9;35449:2;35443:5;:9::i;:::-;35423:3;;;;:::i;:::-;;;;35383:81;;;;35179:293;;35109:363;;;:::o;14:180:1:-;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:173::-;267:20;;-1:-1:-1;;;;;316:31:1;;306:42;;296:70;;362:1;359;352:12;377:186;436:6;489:2;477:9;468:7;464:23;460:32;457:52;;;505:1;502;495:12;457:52;528:29;547:9;528:29;:::i;760:118::-;846:5;839:13;832:21;825:5;822:32;812:60;;868:1;865;858:12;883:315;948:6;956;1009:2;997:9;988:7;984:23;980:32;977:52;;;1025:1;1022;1015:12;977:52;1048:29;1067:9;1048:29;:::i;:::-;1038:39;;1127:2;1116:9;1112:18;1099:32;1140:28;1162:5;1140:28;:::i;:::-;1187:5;1177:15;;;883:315;;;;;:::o;1203:250::-;1288:1;1298:113;1312:6;1309:1;1306:13;1298:113;;;1388:11;;;1382:18;1369:11;;;1362:39;1334:2;1327:10;1298:113;;;-1:-1:-1;;1445:1:1;1427:16;;1420:27;1203:250::o;1458:396::-;1607:2;1596:9;1589:21;1570:4;1639:6;1633:13;1682:6;1677:2;1666:9;1662:18;1655:34;1698:79;1770:6;1765:2;1754:9;1750:18;1745:2;1737:6;1733:15;1698:79;:::i;:::-;1838:2;1817:15;-1:-1:-1;;1813:29:1;1798:45;;;;1845:2;1794:54;;1458:396;-1:-1:-1;;1458:396:1:o;2067:254::-;2135:6;2143;2196:2;2184:9;2175:7;2171:23;2167:32;2164:52;;;2212:1;2209;2202:12;2164:52;2235:29;2254:9;2235:29;:::i;:::-;2225:39;2311:2;2296:18;;;;2283:32;;-1:-1:-1;;;2067:254:1:o;2508:385::-;2594:6;2602;2610;2618;2671:3;2659:9;2650:7;2646:23;2642:33;2639:53;;;2688:1;2685;2678:12;2639:53;-1:-1:-1;;2711:23:1;;;2781:2;2766:18;;2753:32;;-1:-1:-1;2832:2:1;2817:18;;2804:32;;2883:2;2868:18;2855:32;;-1:-1:-1;2508:385:1;-1:-1:-1;2508:385:1:o;2898:328::-;2975:6;2983;2991;3044:2;3032:9;3023:7;3019:23;3015:32;3012:52;;;3060:1;3057;3050:12;3012:52;3083:29;3102:9;3083:29;:::i;:::-;3073:39;;3131:38;3165:2;3154:9;3150:18;3131:38;:::i;:::-;3121:48;;3216:2;3205:9;3201:18;3188:32;3178:42;;2898:328;;;;;:::o;3231:241::-;3287:6;3340:2;3328:9;3319:7;3315:23;3311:32;3308:52;;;3356:1;3353;3346:12;3308:52;3395:9;3382:23;3414:28;3436:5;3414:28;:::i;3666:127::-;3727:10;3722:3;3718:20;3715:1;3708:31;3758:4;3755:1;3748:15;3782:4;3779:1;3772:15;3798:719;3841:5;3894:3;3887:4;3879:6;3875:17;3871:27;3861:55;;3912:1;3909;3902:12;3861:55;3948:6;3935:20;3974:18;4011:2;4007;4004:10;4001:36;;;4017:18;;:::i;:::-;4092:2;4086:9;4060:2;4146:13;;-1:-1:-1;;4142:22:1;;;4166:2;4138:31;4134:40;4122:53;;;4190:18;;;4210:22;;;4187:46;4184:72;;;4236:18;;:::i;:::-;4276:10;4272:2;4265:22;4311:2;4303:6;4296:18;4357:3;4350:4;4345:2;4337:6;4333:15;4329:26;4326:35;4323:55;;;4374:1;4371;4364:12;4323:55;4438:2;4431:4;4423:6;4419:17;4412:4;4404:6;4400:17;4387:54;4485:1;4478:4;4473:2;4465:6;4461:15;4457:26;4450:37;4505:6;4496:15;;;;;;3798:719;;;;:::o;4522:543::-;4610:6;4618;4671:2;4659:9;4650:7;4646:23;4642:32;4639:52;;;4687:1;4684;4677:12;4639:52;4727:9;4714:23;4756:18;4797:2;4789:6;4786:14;4783:34;;;4813:1;4810;4803:12;4783:34;4836:50;4878:7;4869:6;4858:9;4854:22;4836:50;:::i;:::-;4826:60;;4939:2;4928:9;4924:18;4911:32;4895:48;;4968:2;4958:8;4955:16;4952:36;;;4984:1;4981;4974:12;4952:36;;5007:52;5051:7;5040:8;5029:9;5025:24;5007:52;:::i;:::-;4997:62;;;4522:543;;;;;:::o;5070:334::-;5147:6;5155;5163;5216:2;5204:9;5195:7;5191:23;5187:32;5184:52;;;5232:1;5229;5222:12;5184:52;5255:29;5274:9;5255:29;:::i;:::-;5245:39;;5303:38;5337:2;5326:9;5322:18;5303:38;:::i;:::-;5293:48;;5360:38;5394:2;5383:9;5379:18;5360:38;:::i;:::-;5350:48;;5070:334;;;;;:::o;5409:328::-;5486:6;5494;5502;5555:2;5543:9;5534:7;5530:23;5526:32;5523:52;;;5571:1;5568;5561:12;5523:52;5594:29;5613:9;5594:29;:::i;:::-;5584:39;;5670:2;5659:9;5655:18;5642:32;5632:42;;5693:38;5727:2;5716:9;5712:18;5693:38;:::i;5742:808::-;5839:6;5847;5855;5863;5871;5924:3;5912:9;5903:7;5899:23;5895:33;5892:53;;;5941:1;5938;5931:12;5892:53;5964:29;5983:9;5964:29;:::i;:::-;5954:39;;6012:38;6046:2;6035:9;6031:18;6012:38;:::i;:::-;6002:48;;6097:2;6086:9;6082:18;6069:32;6059:42;;6152:2;6141:9;6137:18;6124:32;6175:18;6216:2;6208:6;6205:14;6202:34;;;6232:1;6229;6222:12;6202:34;6270:6;6259:9;6255:22;6245:32;;6315:7;6308:4;6304:2;6300:13;6296:27;6286:55;;6337:1;6334;6327:12;6286:55;6377:2;6364:16;6403:2;6395:6;6392:14;6389:34;;;6419:1;6416;6409:12;6389:34;6464:7;6459:2;6450:6;6446:2;6442:15;6438:24;6435:37;6432:57;;;6485:1;6482;6475:12;6432:57;5742:808;;;;-1:-1:-1;5742:808:1;;-1:-1:-1;6516:2:1;6508:11;;6538:6;5742:808;-1:-1:-1;;;5742:808:1:o;6783:260::-;6851:6;6859;6912:2;6900:9;6891:7;6887:23;6883:32;6880:52;;;6928:1;6925;6918:12;6880:52;6951:29;6970:9;6951:29;:::i;:::-;6941:39;;6999:38;7033:2;7022:9;7018:18;6999:38;:::i;:::-;6989:48;;6783:260;;;;;:::o;7048:380::-;7127:1;7123:12;;;;7170;;;7191:61;;7245:4;7237:6;7233:17;7223:27;;7191:61;7298:2;7290:6;7287:14;7267:18;7264:38;7261:161;;7344:10;7339:3;7335:20;7332:1;7325:31;7379:4;7376:1;7369:15;7407:4;7404:1;7397:15;7261:161;;7048:380;;;:::o;7433:127::-;7494:10;7489:3;7485:20;7482:1;7475:31;7525:4;7522:1;7515:15;7549:4;7546:1;7539:15;7565:128;7632:9;;;7653:11;;;7650:37;;;7667:18;;:::i;7698:127::-;7759:10;7754:3;7750:20;7747:1;7740:31;7790:4;7787:1;7780:15;7814:4;7811:1;7804:15;7830:127;7891:10;7886:3;7882:20;7879:1;7872:31;7922:4;7919:1;7912:15;7946:4;7943:1;7936:15;8522:290;8591:6;8644:2;8632:9;8623:7;8619:23;8615:32;8612:52;;;8660:1;8657;8650:12;8612:52;8686:16;;-1:-1:-1;;;;;;8731:32:1;;8721:43;;8711:71;;8778:1;8775;8768:12;9428:245;9495:6;9548:2;9536:9;9527:7;9523:23;9519:32;9516:52;;;9564:1;9561;9554:12;9516:52;9596:9;9590:16;9615:28;9637:5;9615:28;:::i;9678:287::-;9807:3;9845:6;9839:13;9861:66;9920:6;9915:3;9908:4;9900:6;9896:17;9861:66;:::i;:::-;9943:16;;;;;9678:287;-1:-1:-1;;9678:287:1:o;10301:662::-;-1:-1:-1;;;;;10580:15:1;;;10562:34;;10632:15;;10627:2;10612:18;;10605:43;10679:2;10664:18;;10657:34;;;10727:3;10722:2;10707:18;;10700:31;;;10747:19;;10740:35;;;10505:4;10768:6;10818;10542:3;10797:19;;10784:49;10883:1;10877:3;10868:6;10857:9;10853:22;10849:32;10842:43;10953:3;10946:2;10942:7;10937:2;10929:6;10925:15;10921:29;10910:9;10906:45;10902:55;10894:63;;10301:662;;;;;;;;:::o;11155:127::-;11216:10;11211:3;11207:20;11204:1;11197:31;11247:4;11244:1;11237:15;11271:4;11268:1;11261:15;11287:112;11319:1;11345;11335:35;;11350:18;;:::i;:::-;-1:-1:-1;11384:9:1;;11287:112::o;11404:125::-;11469:9;;;11490:10;;;11487:36;;;11503:18;;:::i;11534:175::-;11571:3;11615:4;11608:5;11604:16;11644:4;11635:7;11632:17;11629:43;;11652:18;;:::i;:::-;11701:1;11688:15;;11534:175;-1:-1:-1;;11534:175:1:o;11714:151::-;11804:4;11797:12;;;11783;;;11779:31;;11822:14;;11819:40;;;11839:18;;:::i;11996:722::-;12046:3;12087:5;12081:12;12116:36;12142:9;12116:36;:::i;:::-;12171:1;12188:18;;;12215:133;;;;12362:1;12357:355;;;;12181:531;;12215:133;-1:-1:-1;;12248:24:1;;12236:37;;12321:14;;12314:22;12302:35;;12293:45;;;-1:-1:-1;12215:133:1;;12357:355;12388:5;12385:1;12378:16;12417:4;12462:2;12459:1;12449:16;12487:1;12501:165;12515:6;12512:1;12509:13;12501:165;;;12593:14;;12580:11;;;12573:35;12636:16;;;;12530:10;;12501:165;;;12505:3;;;12695:6;12690:3;12686:16;12679:23;;12181:531;;;;;11996:722;;;;:::o;12723:469::-;12944:3;12972:38;13006:3;12998:6;12972:38;:::i;:::-;13039:6;13033:13;13055:65;13113:6;13109:2;13102:4;13094:6;13090:17;13055:65;:::i;:::-;13136:50;13178:6;13174:2;13170:15;13162:6;13136:50;:::i;:::-;13129:57;12723:469;-1:-1:-1;;;;;;;12723:469:1:o;13197:545::-;13299:2;13294:3;13291:11;13288:448;;;13335:1;13360:5;13356:2;13349:17;13405:4;13401:2;13391:19;13475:2;13463:10;13459:19;13456:1;13452:27;13446:4;13442:38;13511:4;13499:10;13496:20;13493:47;;;-1:-1:-1;13534:4:1;13493:47;13589:2;13584:3;13580:12;13577:1;13573:20;13567:4;13563:31;13553:41;;13644:82;13662:2;13655:5;13652:13;13644:82;;;13707:17;;;13688:1;13677:13;13644:82;;13918:1352;14044:3;14038:10;14071:18;14063:6;14060:30;14057:56;;;14093:18;;:::i;:::-;14122:97;14212:6;14172:38;14204:4;14198:11;14172:38;:::i;:::-;14166:4;14122:97;:::i;:::-;14274:4;;14338:2;14327:14;;14355:1;14350:663;;;;15057:1;15074:6;15071:89;;;-1:-1:-1;15126:19:1;;;15120:26;15071:89;-1:-1:-1;;13875:1:1;13871:11;;;13867:24;13863:29;13853:40;13899:1;13895:11;;;13850:57;15173:81;;14320:944;;14350:663;11943:1;11936:14;;;11980:4;11967:18;;-1:-1:-1;;14386:20:1;;;14504:236;14518:7;14515:1;14512:14;14504:236;;;14607:19;;;14601:26;14586:42;;14699:27;;;;14667:1;14655:14;;;;14534:19;;14504:236;;;14508:3;14768:6;14759:7;14756:19;14753:201;;;14829:19;;;14823:26;-1:-1:-1;;14912:1:1;14908:14;;;14924:3;14904:24;14900:37;14896:42;14881:58;14866:74;;14753:201;-1:-1:-1;;;;;15000:1:1;14984:14;;;14980:22;14967:36;;-1:-1:-1;13918:1352:1:o;15275:422::-;15364:1;15407:5;15364:1;15421:270;15442:7;15432:8;15429:21;15421:270;;;15501:4;15497:1;15493:6;15489:17;15483:4;15480:27;15477:53;;;15510:18;;:::i;:::-;15560:7;15550:8;15546:22;15543:55;;;15580:16;;;;15543:55;15659:22;;;;15619:15;;;;15421:270;;;15425:3;15275:422;;;;;:::o;15702:806::-;15751:5;15781:8;15771:80;;-1:-1:-1;15822:1:1;15836:5;;15771:80;15870:4;15860:76;;-1:-1:-1;15907:1:1;15921:5;;15860:76;15952:4;15970:1;15965:59;;;;16038:1;16033:130;;;;15945:218;;15965:59;15995:1;15986:10;;16009:5;;;16033:130;16070:3;16060:8;16057:17;16054:43;;;16077:18;;:::i;:::-;-1:-1:-1;;16133:1:1;16119:16;;16148:5;;15945:218;;16247:2;16237:8;16234:16;16228:3;16222:4;16219:13;16215:36;16209:2;16199:8;16196:16;16191:2;16185:4;16182:12;16178:35;16175:77;16172:159;;;-1:-1:-1;16284:19:1;;;16316:5;;16172:159;16363:34;16388:8;16382:4;16363:34;:::i;:::-;16433:6;16429:1;16425:6;16421:19;16412:7;16409:32;16406:58;;;16444:18;;:::i;:::-;16482:20;;15702:806;-1:-1:-1;;;15702:806:1:o;16513:140::-;16571:5;16600:47;16641:4;16631:8;16627:19;16621:4;16600:47;:::i;16658:184::-;16728:6;16781:2;16769:9;16760:7;16756:23;16752:32;16749:52;;;16797:1;16794;16787:12;16749:52;-1:-1:-1;16820:16:1;;16658:184;-1:-1:-1;16658:184:1:o;17177:120::-;17217:1;17243;17233:35;;17248:18;;:::i;:::-;-1:-1:-1;17282:9:1;;17177:120::o;17302:135::-;17341:3;17362:17;;;17359:43;;17382:18;;:::i;:::-;-1:-1:-1;17429:1:1;17418:13;;17302:135::o;17442:168::-;17515:9;;;17546;;17563:15;;;17557:22;;17543:37;17533:71;;17584:18;;:::i
Swarm Source
ipfs://b5223b5bfd7cdcddffc0efb38396555bb0c2dc0c829e224e47a9434ef44f67b2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 26 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.