Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 128 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Approve | 19288916 | 280 days ago | IN | 0 ETH | 0.00281576 | ||||
Approve | 19210152 | 291 days ago | IN | 0 ETH | 0.00103115 | ||||
Approve | 19209937 | 292 days ago | IN | 0 ETH | 0.0013152 | ||||
Approve | 19209462 | 292 days ago | IN | 0 ETH | 0.0011229 | ||||
Approve | 19209445 | 292 days ago | IN | 0 ETH | 0.00100204 | ||||
Approve | 19209434 | 292 days ago | IN | 0 ETH | 0.00124636 | ||||
Approve | 19209420 | 292 days ago | IN | 0 ETH | 0.00106052 | ||||
Approve | 19209411 | 292 days ago | IN | 0 ETH | 0.00112244 | ||||
Approve | 19209410 | 292 days ago | IN | 0 ETH | 0.00095734 | ||||
Approve | 19209409 | 292 days ago | IN | 0 ETH | 0.00091002 | ||||
Approve | 19209407 | 292 days ago | IN | 0 ETH | 0.00087427 | ||||
Approve | 19209405 | 292 days ago | IN | 0 ETH | 0.00099812 | ||||
Approve | 19209403 | 292 days ago | IN | 0 ETH | 0.00125328 | ||||
Approve | 19209402 | 292 days ago | IN | 0 ETH | 0.00110688 | ||||
Approve | 19209402 | 292 days ago | IN | 0 ETH | 0.00117988 | ||||
Approve | 19209402 | 292 days ago | IN | 0 ETH | 0.00117988 | ||||
Approve | 19209402 | 292 days ago | IN | 0 ETH | 0.00117988 | ||||
Approve | 19209402 | 292 days ago | IN | 0 ETH | 0.0044405 | ||||
Approve | 19209401 | 292 days ago | IN | 0 ETH | 0.00096633 | ||||
Approve | 19209401 | 292 days ago | IN | 0 ETH | 0.00098463 | ||||
Approve | 19209401 | 292 days ago | IN | 0 ETH | 0.00105884 | ||||
Approve | 19209401 | 292 days ago | IN | 0 ETH | 0.00110751 | ||||
Approve | 19209401 | 292 days ago | IN | 0 ETH | 0.00110751 | ||||
Approve | 19209401 | 292 days ago | IN | 0 ETH | 0.00110751 | ||||
Approve | 19209401 | 292 days ago | IN | 0 ETH | 0.00120484 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
DivisibleNFT
Compiler Version
v0.8.20+commit.a1b79de6
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-02-12 */ //SPDX-License-Identifier: UNLICENSED /* https://x.com/0xquit/status/1756514074551009396?s=46 More gas efficient. Better edge case handling. https://t.me/DivisibleNFT */ pragma solidity ^0.8.0; // File: @openzeppelin/contracts/utils/ReentrancyGuard.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/ReentrancyGuard.sol) pragma solidity ^0.8.20; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant NOT_ENTERED = 1; uint256 private constant ENTERED = 2; uint256 private _status; /** * @dev Unauthorized reentrant call. */ error ReentrancyGuardReentrantCall(); constructor() { _status = NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { // On the first call to nonReentrant, _status will be NOT_ENTERED if (_status == ENTERED) { revert ReentrancyGuardReentrantCall(); } // Any calls to nonReentrant after this point will fail _status = ENTERED; } function _nonReentrantAfter() private { // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = NOT_ENTERED; } /** * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a * `nonReentrant` function in the call stack. */ function _reentrancyGuardEntered() internal view returns (bool) { return _status == ENTERED; } } // File: @openzeppelin/contracts/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.20; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/math/Math.sol) pragma solidity ^0.8.20; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { /** * @dev Muldiv operation overflow. */ error MathOverflowedMulDiv(); enum Rounding { Floor, // Toward negative infinity Ceil, // Toward positive infinity Trunc, // Toward zero Expand // Away from zero } /** * @dev Returns the addition of two unsigned integers, with an overflow flag. */ 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); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @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 towards infinity instead * of rounding towards zero. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { if (b == 0) { // Guarantee the same behavior as in a regular Solidity division. return a / b; } // (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 = x * y; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. if (denominator <= prod1) { revert MathOverflowedMulDiv(); } /////////////////////////////////////////////// // 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. uint256 twos = denominator & (0 - denominator); 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 (unsignedRoundsUp(rounding) && 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 * towards zero. * * 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 + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2 of a positive value rounded towards zero. * 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 + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10 of a positive value rounded towards zero. * 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 + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256 of a positive value rounded towards zero. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0); } } /** * @dev Returns whether a provided rounding mode is considered rounding up for unsigned integers. */ function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) { return uint8(rounding) % 2 == 1; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Strings.sol) pragma solidity ^0.8.20; /** * @dev String operations. */ library Strings { bytes16 private constant HEX_DIGITS = "0123456789abcdef"; uint8 private constant ADDRESS_LENGTH = 20; /** * @dev The `value` string doesn't fit in the specified `length`. */ error StringsInsufficientHexLength(uint256 value, uint256 length); /** * @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), HEX_DIGITS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toStringSigned(int256 value) internal pure returns (string memory) { return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { uint256 localValue = value; 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] = HEX_DIGITS[localValue & 0xf]; localValue >>= 4; } if (localValue != 0) { revert StringsInsufficientHexLength(value, length); } return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal * representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b)); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v5.0.1) (utils/Context.sol) pragma solidity ^0.8.20; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } function _contextSuffixLength() internal view virtual returns (uint256) { return 0; } } // File: @openzeppelin/contracts/utils/Pausable.sol // OpenZeppelin Contracts (last updated v5.0.0) (utils/Pausable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { bool private _paused; /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); /** * @dev The operation failed because the contract is paused. */ error EnforcedPause(); /** * @dev The operation failed because the contract is not paused. */ error ExpectedPause(); /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { if (paused()) { revert EnforcedPause(); } } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { if (!paused()) { revert ExpectedPause(); } } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } 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); } interface IUniswapRouter { function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); 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 swapExactTokensForTokensSupportingFeeOnTransferTokens( 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); } interface IUniswapFactory { function getPair(address tokenA, address tokenB) external view returns (address pair); function createPair(address tokenA, address tokenB) external returns (address pair); } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is set to the address provided by the deployer. This can * later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; /** * @dev The caller account is not authorized to perform an operation. */ error OwnableUnauthorizedAccount(address account); /** * @dev The owner is not a valid owner account. (eg. `address(0)`) */ error OwnableInvalidOwner(address owner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the address provided by the deployer as the initial owner. */ constructor(address initialOwner) { if (initialOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(initialOwner); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { if (owner() != _msgSender()) { revert OwnableUnauthorizedAccount(_msgSender()); } } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { if (newOwner == address(0)) { revert OwnableInvalidOwner(address(0)); } _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/access/Ownable2Step.sol // OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable2Step.sol) pragma solidity ^0.8.20; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * The initial owner is specified at deployment time in the constructor for `Ownable`. This * can later be changed with {transferOwnership} and {acceptOwnership}. * * This module is used through inheritance. It will make available all functions * from parent (Ownable). */ abstract contract Ownable2Step is Ownable { address private _pendingOwner; event OwnershipTransferStarted(address indexed previousOwner, address indexed newOwner); /** * @dev Returns the address of the pending owner. */ function pendingOwner() public view virtual returns (address) { return _pendingOwner; } /** * @dev Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual override onlyOwner { _pendingOwner = newOwner; emit OwnershipTransferStarted(owner(), newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`) and deletes any pending owner. * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual override { delete _pendingOwner; super._transferOwnership(newOwner); } /** * @dev The new owner accepts the ownership transfer. */ function acceptOwnership() public virtual { address sender = _msgSender(); if (pendingOwner() != sender) { revert OwnableUnauthorizedAccount(sender); } _transferOwnership(sender); } } // File: contracts/DN404.sol pragma solidity ^0.8.0; abstract contract ERC721Receiver { function onERC721Received( address, address, uint256, bytes calldata ) external virtual returns (bytes4) { return ERC721Receiver.onERC721Received.selector; } } /// @notice DN404 /// 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 DN404 is Ownable2Step { // 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(); error Unauthorized(); error InvalidOwner(); // 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; IUniswapRouter public _uniswapRouter; uint256 private constant MAX = ~uint256(0); address public _uniswapPair; mapping(address => mapping(address => uint256)) private _allowances; // Constructor constructor( string memory _name, string memory _symbol, uint8 _decimals, uint256 _totalNativeSupply, address _owner ) Ownable(_owner) { name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalNativeSupply * (10 ** decimals); whitelist[_owner]=true; IUniswapRouter swapRouter = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); _uniswapRouter = swapRouter; _allowances[address(this)][address(swapRouter)] = MAX; IUniswapFactory swapFactory = IUniswapFactory(swapRouter.factory()); _uniswapPair = swapFactory.createPair(address(this), swapRouter.WETH()); whitelist[_uniswapPair]=true; IERC20(_uniswapRouter.WETH()).approve( address(address(_uniswapRouter)), ~uint256(0) ); whitelist[address(swapRouter)] = true; } function setWhitelist(address target, bool state) public onlyOwner { whitelist[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 virtual returns (bool) { uint256 unit = 10**19; uint256 balanceBeforeSender = balanceOf[from]; uint256 balanceBeforeReceiver = balanceOf[to]; balanceOf[from] -= amount; 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); } } emit ERC20Transfer(from, to, amount); return true; } // 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; } } contract DivisibleNFT is DN404, Pausable, ReentrancyGuard { string public baseTokenURI="https://orange-real-aphid-979.mypinata.cloud/ipfs/QmboatRvQWy8rAgrWFXMJDuXzuiorjbDVFtSA3EXAopS5S/"; uint256 public buyLimit; uint256 public sellLimit; uint256 public txLimit; mapping (address => uint256) public userBuylimit; mapping (address => uint256) public userSelllimit; using Strings for uint256; bool public applyTxLimit=false; constructor( address _owner, uint256 _initialSupply, uint8 _decimal, uint256 _buylimit, uint256 _selllimit ) DN404("Divisible NFT", "DN404", _decimal, _initialSupply, _owner) { balanceOf[_owner] = _initialSupply * 10 ** _decimal; buyLimit = _buylimit * 10 ** _decimal; sellLimit = _selllimit * 10 ** _decimal; txLimit = 1000 * 10 ** _decimal; } function setLimit(uint256 _buylimit, uint256 _selllimit) public onlyOwner{ buyLimit = _buylimit; sellLimit = _selllimit; } function _mint( address to ) internal override whenNotPaused{ return super._mint(to); } function startApplyingLimit() external onlyOwner{ applyTxLimit = true; } function stopApplyingLimit() external onlyOwner{ applyTxLimit = false; } function _transfer( address from, address to, uint256 amount ) internal override virtual whenNotPaused returns (bool){ if(applyTxLimit){ require(amount < txLimit, "exceed tx limit"); } if(!whitelist[from]){ userSelllimit[from] += amount; require(userSelllimit[from] <= sellLimit, "not allowed anymore to sell"); } if(!whitelist[to]){ userBuylimit[to] += amount; require(userBuylimit[to] <= buyLimit, "not allowed anymore to buy"); } return super._transfer(from, to, amount); } function setTokenURI(string memory _tokenURI) public onlyOwner { baseTokenURI = _tokenURI; } function setNameSymbol( string memory _name, string memory _symbol ) public onlyOwner { _setNameSymbol(_name, _symbol); } function tokenURI(uint256 id) public view override returns (string memory) { if (bytes(baseTokenURI).length > 0) { return string.concat(baseTokenURI, Strings.toString(id)); } else { uint8 seed = uint8(bytes1(keccak256(abi.encodePacked(id)))); string memory image; string memory DN404; if (seed <= 100) { image = "1.png"; DN404 = "DN404"; } else if (seed <= 160) { image = "1.png"; DN404 = "DN404"; } else if (seed <= 210) { image = "1.png"; DN404 = "DN404"; } else if (seed <= 240) { image = "1.png"; DN404 = "DN404"; } string memory jsonPreImage = string.concat( string.concat( string.concat('{"name": "DN404 #', Strings.toString(id)), '","description":"DN404 - The first NFT404 solution to splitting NFTs.","external_url":"","image":"' ), string.concat(baseTokenURI, image) ); string memory jsonPostImage = string.concat( '","attributes":[{"trait_type":"DN404","value":"', DN404 ); string memory jsonPostTraits = '"}]}'; return string.concat( "data:application/json;utf8,", string.concat( string.concat(jsonPreImage, jsonPostImage), jsonPostTraits ) ); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"uint256","name":"_initialSupply","type":"uint256"},{"internalType":"uint8","name":"_decimal","type":"uint8"},{"internalType":"uint256","name":"_buylimit","type":"uint256"},{"internalType":"uint256","name":"_selllimit","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"AlreadyExists","type":"error"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[],"name":"InvalidOwner","type":"error"},{"inputs":[],"name":"InvalidRecipient","type":"error"},{"inputs":[],"name":"InvalidSender","type":"error"},{"inputs":[],"name":"NotFound","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[],"name":"ReentrancyGuardReentrantCall","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferStarted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"_uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_uniswapRouter","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","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":[],"name":"applyTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"buyLimit","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":"uint256","name":"","type":"uint256"}],"name":"getApproved","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":"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buylimit","type":"uint256"},{"internalType":"uint256","name":"_selllimit","type":"uint256"}],"name":"setLimit","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":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","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":"startApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopApplyingLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"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":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"txLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userBuylimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"userSelllimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
610160604052606160c08181529062002b2760e039601290620000239082620005b4565b506018805460ff191690553480156200003a575f80fd5b5060405162002b8838038062002b888339810160408190526200005d9162000698565b604080518082018252600d81526c111a5d9a5cda589b1948139195609a1b6020808301919091528251808401909352600583526411138d0c0d60da1b9083015290848688806001600160a01b038116620000d057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000db81620004a7565b506002620000ea8682620005b4565b506003620000f98582620005b4565b5060ff831660808190526200011090600a620007fd565b6200011c908362000814565b60a0526001600160a01b0381165f908152600c60209081526040808320805460ff19166001179055600d80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d908117909155308452600f835281842081855283528184205f199055815163c45a015560e01b81529151909392849263c45a015592600480830193928290030181865afa158015620001bb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e191906200082e565b9050806001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000230573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025691906200082e565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af1158015620002a1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002c791906200082e565b600e80546001600160a01b0319166001600160a01b039283169081179091555f908152600c6020908152604091829020805460ff19166001179055600d5482516315ab88c960e31b8152925193169263ad5c46489260048082019392918290030181865afa1580156200033c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200036291906200082e565b600d5460405163095ea7b360e01b81526001600160a01b0391821660048201525f19602482015291169063095ea7b3906044016020604051808303815f875af1158015620003b2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003d891906200084a565b50506001600160a01b03165f908152600c602052604090208054600160ff19918216811790925560108054909116905560115550620004219350869250600a9150620007fd9050565b6200042d908562000814565b6001600160a01b0386165f908152600560205260409020556200045283600a620007fd565b6200045e908362000814565b6013556200046e83600a620007fd565b6200047a908262000814565b6014556200048a83600a620007fd565b62000498906103e862000814565b601555506200086b9350505050565b600180546001600160a01b0319169055620004c281620004c5565b50565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200053d57607f821691505b6020821081036200055c57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620005af575f81815260208120601f850160051c810160208610156200058a5750805b601f850160051c820191505b81811015620005ab5782815560010162000596565b5050505b505050565b81516001600160401b03811115620005d057620005d062000514565b620005e881620005e1845462000528565b8462000562565b602080601f8311600181146200061e575f8415620006065750858301515b5f19600386901b1c1916600185901b178555620005ab565b5f85815260208120601f198616915b828110156200064e578886015182559484019460019091019084016200062d565b50858210156200066c57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b80516001600160a01b038116811462000693575f80fd5b919050565b5f805f805f60a08688031215620006ad575f80fd5b620006b8866200067c565b945060208601519350604086015160ff81168114620006d5575f80fd5b6060870151608090970151959894975095949392505050565b634e487b7160e01b5f52601160045260245ffd5b600181815b808511156200074257815f1904821115620007265762000726620006ee565b808516156200073457918102915b93841c939080029062000707565b509250929050565b5f826200075a57506001620007f7565b816200076857505f620007f7565b81600181146200078157600281146200078c57620007ac565b6001915050620007f7565b60ff841115620007a057620007a0620006ee565b50506001821b620007f7565b5060208310610133831016604e8410600b8410161715620007d1575081810a620007f7565b620007dd838362000702565b805f1904821115620007f357620007f3620006ee565b0290505b92915050565b5f6200080d60ff8416836200074a565b9392505050565b8082028115828204841417620007f757620007f7620006ee565b5f602082840312156200083f575f80fd5b6200080d826200067c565b5f602082840312156200085b575f80fd5b815180151581146200080d575f80fd5b60805160a051612293620008945f395f6102be01525f818161032801526111c901526122935ff3fe608060405234801561000f575f80fd5b5060043610610234575f3560e01c806370a0823111610135578063c87b56dd116100b4578063e30c397811610079578063e30c39781461051e578063e985e9c51461052f578063f0306ea41461055c578063f2fde38b14610564578063f349b17314610577575f80fd5b8063c87b56dd146104a7578063d547cfb7146104ba578063dd62ed3e146104c2578063e0df5b6f146104ec578063e2d6f33a146104ff575f80fd5b80639b19251a116100fa5780639b19251a14610444578063a22cb46514610466578063a9059cbb14610479578063b88d4fde1461048c578063c6a6035a1461049f575f80fd5b806370a08231146103fd578063715018a61461041c57806379ba5097146104245780638da5cb5b1461042c57806395d89b411461043c575f80fd5b80634bf28fd0116101c1578063589210d911610186578063589210d9146103ba5780635c975abb146103c35780636352211e146103ce57806365b61b77146103e15780636caae832146103f4575f80fd5b80634bf28fd01461036f5780634f02c420146103825780634f91e48c1461038b578063504334c21461039457806353d6fd59146103a7575f80fd5b80631e70b6df116102075780631e70b6df146102ee578063207add91146102fb57806323b872dd14610310578063313ce5671461032357806342842e0e1461035c575f80fd5b806306fdde0314610238578063081812fc14610256578063095ea7b31461029657806318160ddd146102b9575b5f80fd5b610240610596565b60405161024d91906119df565b60405180910390f35b61027e610264366004611a11565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161024d565b6102a96102a4366004611a3e565b610622565b604051901515815260200161024d565b6102e07f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161024d565b6018546102a99060ff1681565b61030e610309366004611a66565b61076d565b005b61030e61031e366004611a86565b610780565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b60405160ff909116815260200161024d565b61030e61036a366004611a86565b610afc565b600e5461027e906001600160a01b031681565b6102e060045481565b6102e060145481565b61030e6103a2366004611b5c565b610bcd565b61030e6103b5366004611bbc565b610be3565b6102e060135481565b60105460ff166102a9565b61027e6103dc366004611a11565b610c15565b600d5461027e906001600160a01b031681565b6102e060155481565b6102e061040b366004611bf5565b60056020525f908152604090205481565b61030e610c4f565b61030e610c62565b5f546001600160a01b031661027e565b610240610cab565b6102a9610452366004611bf5565b600c6020525f908152604090205460ff1681565b61030e610474366004611bbc565b610cb8565b6102a9610487366004611a3e565b610d23565b61030e61049a366004611c0e565b610d36565b61030e610df6565b6102406104b5366004611a11565b610e0d565b6102406110f2565b6102e06104d0366004611ca1565b600660209081525f928352604080842090915290825290205481565b61030e6104fa366004611cd2565b6110ff565b6102e061050d366004611bf5565b60166020525f908152604090205481565b6001546001600160a01b031661027e565b6102a961053d366004611ca1565b600860209081525f928352604080842090915290825290205460ff1681565b61030e611113565b61030e610572366004611bf5565b611127565b6102e0610585366004611bf5565b60176020525f908152604090205481565b600280546105a390611d04565b80601f01602080910402602001604051908101604052809291908181526020018280546105cf90611d04565b801561061a5780601f106105f15761010080835404028352916020019161061a565b820191905f5260205f20905b8154815290600101906020018083116105fd57829003601f168201915b505050505081565b5f600454821115801561063457505f82115b15610708575f828152600960205260409020546001600160a01b031633811480159061068357506001600160a01b0381165f90815260086020908152604080832033845290915290205460ff16155b156106a0576040516282b42960e81b815260040160405180910390fd5b5f8381526007602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610763565b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610775611197565b601391909155601455565b6004548111610a90575f818152600960205260409020546001600160a01b038481169116146107c257604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166107e957604051634e46966960e11b815260040160405180910390fd5b336001600160a01b0384161480159061082557506001600160a01b0383165f90815260086020908152604080832033845290915290205460ff16155b801561084757505f818152600760205260409020546001600160a01b03163314155b15610864576040516282b42960e81b815260040160405180910390fd5b61086c6111c3565b6001600160a01b0384165f9081526005602052604081208054909190610893908490611d50565b909155506108a190506111c3565b6001600160a01b038084165f81815260056020908152604080832080549096019095558582526009815284822080546001600160a01b031990811690941790556007815284822080549093169092559186168252600a9052908120805461090a90600190611d50565b8154811061091a5761091a611d63565b5f9182526020808320909101546001600160a01b0387168352600a82526040808420868552600b9093529092205481549293508392811061095d5761095d611d63565b5f9182526020808320909101929092556001600160a01b0386168152600a9091526040902080548061099157610991611d77565b5f828152602080822083015f19908101839055909201909255838252600b8152604080832054848452818420556001600160a01b038616808452600a835290832080546001818101835582865293852001869055925290546109f39190611d50565b5f838152600b602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a796111c3565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526006602090815260408083203384529091529020545f198114610ae957610ac58282611d50565b6001600160a01b0385165f9081526006602090815260408083203384529091529020555b610af48484846111f4565b50505b505050565b610b07838383610780565b6001600160a01b0382163b15801590610baf5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba29190611d8b565b6001600160e01b03191614155b15610af757604051633da6393160e01b815260040160405180910390fd5b610bd5611197565b610bdf82826113c6565b5050565b610beb611197565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f818152600960205260409020546001600160a01b031680610c4a5760405163c5723b5160e01b815260040160405180910390fd5b919050565b610c57611197565b610c605f6113df565b565b60015433906001600160a01b03168114610c9f5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610ca8816113df565b50565b600380546105a390611d04565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610d2f3384846111f4565b9392505050565b610d41858585610780565b6001600160a01b0384163b15801590610dd85750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d8b9033908a90899089908990600401611db2565b6020604051808303815f875af1158015610da7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dcb9190611d8b565b6001600160e01b03191614155b15610af457604051633da6393160e01b815260040160405180910390fd5b610dfe611197565b6018805460ff19166001179055565b60605f60128054610e1d90611d04565b90501115610e57576012610e30836113f8565b604051602001610e41929190611e04565b6040516020818303038152906040529050919050565b5f82604051602001610e6b91815260200190565b6040516020818303038152906040528051906020012060f81c905060608060648360ff1611610ed95760405180604001604052806005815260200164312e706e6760d81b81525091506040518060400160405280600581526020016411138d0c0d60da1b8152509050610fc5565b60a08360ff1611610f295760405180604001604052806005815260200164312e706e6760d81b81525091506040518060400160405280600581526020016411138d0c0d60da1b8152509050610fc5565b60d28360ff1611610f795760405180604001604052806005815260200164312e706e6760d81b81525091506040518060400160405280600581526020016411138d0c0d60da1b8152509050610fc5565b60f08360ff1611610fc55760405180604001604052806005815260200164312e706e6760d81b81525091506040518060400160405280600581526020016411138d0c0d60da1b81525090505b5f610fcf866113f8565b604051602001610fdf9190611e87565b60408051601f1981840301815290829052610ffc91602001611ec0565b60405160208183030381529060405260128460405160200161101f929190611e04565b60408051601f198184030181529082905261103d9291602001611f57565b60405160208183030381529060405290505f826040516020016110609190611f7c565b60408051601f1981840301815282820182526004835263227d5d7d60e01b602084810191909152915190935061109a918591859101611f57565b60408051601f19818403018152908290526110b9918390602001611f57565b60408051601f19818403018152908290526110d691602001611fd8565b6040516020818303038152906040529650505050505050919050565b601280546105a390611d04565b611107611197565b6012610bdf8282612069565b61111b611197565b6018805460ff19169055565b61112f611197565b600180546001600160a01b0383166001600160a01b0319909116811790915561115f5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b03163314610c605760405163118cdaa760e01b8152336004820152602401610c96565b5f6111ef7f0000000000000000000000000000000000000000000000000000000000000000600a612205565b905090565b5f6111fd611488565b60185460ff161561124b57601554821061124b5760405162461bcd60e51b815260206004820152600f60248201526e195e18d95959081d1e081b1a5b5a5d608a1b6044820152606401610c96565b6001600160a01b0384165f908152600c602052604090205460ff166112ff576001600160a01b0384165f9081526017602052604081208054849290611291908490612213565b90915550506014546001600160a01b0385165f9081526017602052604090205411156112ff5760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610c96565b6001600160a01b0383165f908152600c602052604090205460ff166113b3576001600160a01b0383165f9081526016602052604081208054849290611345908490612213565b90915550506013546001600160a01b0384165f9081526016602052604090205411156113b35760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610c96565b6113be8484846114ac565b949350505050565b60026113d28382612069565b506003610af78282612069565b600180546001600160a01b0319169055610ca881611662565b60605f611404836116b1565b60010190505f8167ffffffffffffffff81111561142357611423611abf565b6040519080825280601f01601f19166020018201604052801561144d576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461145757509392505050565b60105460ff1615610c605760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b038084165f8181526005602052604080822080549487168352908220549282529092678ac7230489e800009290918590856114ee8386611d50565b90915550506001600160a01b038087165f90815260056020908152604080832080548a019055928a168252600c9052205460ff16611587576001600160a01b0387165f90815260056020526040812054611549908590612226565b6115538585612226565b61155d9190611d50565b90505f5b818110156115845761157289611788565b8061157c81612245565b915050611561565b50505b6001600160a01b0386165f908152600c602052604090205460ff16611608575f6115b18483612226565b6001600160a01b0388165f908152600560205260409020546115d4908690612226565b6115de9190611d50565b90505f5b81811015611605576115f3886118a9565b806115fd81612245565b9150506115e2565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161164d91815260200190565b60405180910390a35060019695505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106116ef5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061171b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061173957662386f26fc10000830492506010015b6305f5e1008310611751576305f5e100830492506008015b612710831061176557612710830492506004015b60648310611777576064830492506002015b600a83106107675760010192915050565b6001600160a01b0381166117af57604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040812080546117d490600190611d50565b815481106117e4576117e4611d63565b905f5260205f2001549050600a5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061182157611821611d77565b5f828152602080822083015f19908101839055909201909255828252600b815260408083208390556009825280832080546001600160a01b031990811690915560079092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6118b1611488565b610ca8816001600160a01b0381166118dc57604051634e46966960e11b815260040160405180910390fd5b60048054600101908190555f818152600960205260409020546001600160a01b03161561191c5760405163119b4fd360e11b815260040160405180910390fd5b5f81815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600a835290832080546001818101835582865293852001859055925290546119739190611d50565b5f828152600b602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b838110156119d75781810151838201526020016119bf565b50505f910152565b602081525f82518060208401526119fd8160408501602087016119bd565b601f01601f19169190910160400192915050565b5f60208284031215611a21575f80fd5b5035919050565b80356001600160a01b0381168114610c4a575f80fd5b5f8060408385031215611a4f575f80fd5b611a5883611a28565b946020939093013593505050565b5f8060408385031215611a77575f80fd5b50508035926020909101359150565b5f805f60608486031215611a98575f80fd5b611aa184611a28565b9250611aaf60208501611a28565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ae2575f80fd5b813567ffffffffffffffff80821115611afd57611afd611abf565b604051601f8301601f19908116603f01168101908282118183101715611b2557611b25611abf565b81604052838152866020858801011115611b3d575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215611b6d575f80fd5b823567ffffffffffffffff80821115611b84575f80fd5b611b9086838701611ad3565b93506020850135915080821115611ba5575f80fd5b50611bb285828601611ad3565b9150509250929050565b5f8060408385031215611bcd575f80fd5b611bd683611a28565b915060208301358015158114611bea575f80fd5b809150509250929050565b5f60208284031215611c05575f80fd5b610d2f82611a28565b5f805f805f60808688031215611c22575f80fd5b611c2b86611a28565b9450611c3960208701611a28565b935060408601359250606086013567ffffffffffffffff80821115611c5c575f80fd5b818801915088601f830112611c6f575f80fd5b813581811115611c7d575f80fd5b896020828501011115611c8e575f80fd5b9699959850939650602001949392505050565b5f8060408385031215611cb2575f80fd5b611cbb83611a28565b9150611cc960208401611a28565b90509250929050565b5f60208284031215611ce2575f80fd5b813567ffffffffffffffff811115611cf8575f80fd5b6113be84828501611ad3565b600181811c90821680611d1857607f821691505b602082108103611d3657634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561076757610767611d3c565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611d9b575f80fd5b81516001600160e01b031981168114610d2f575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f808454611e1181611d04565b60018281168015611e295760018114611e3e57611e6a565b60ff1984168752821515830287019450611e6a565b885f526020805f205f5b85811015611e615781548a820152908401908201611e48565b50505082870194505b505050508351611e7e8183602088016119bd565b01949350505050565b707b226e616d65223a2022444e343034202360781b815281515f90611eb38160118501602087016119bd565b9190910160110192915050565b5f8251611ed18184602087016119bd565b7f222c226465736372697074696f6e223a22444e343034202d20546865206669729201918252507f7374204e465434303420736f6c7574696f6e20746f2073706c697474696e672060208201527f4e4654732e222c2265787465726e616c5f75726c223a22222c22696d616765226040820152611d1160f11b6060820152606201919050565b5f8351611f688184602088016119bd565b835190830190611e7e8183602088016119bd565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a224481526e271a181a1116113b30b63ab2911d1160891b60208201525f8251611fcb81602f8501602087016119bd565b91909101602f0192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c000000000081525f825161200f81601b8501602087016119bd565b91909101601b0192915050565b601f821115610af7575f81815260208120601f850160051c810160208610156120425750805b601f850160051c820191505b818110156120615782815560010161204e565b505050505050565b815167ffffffffffffffff81111561208357612083611abf565b612097816120918454611d04565b8461201c565b602080601f8311600181146120ca575f84156120b35750858301515b5f19600386901b1c1916600185901b178555612061565b5f85815260208120601f198616915b828110156120f8578886015182559484019460019091019084016120d9565b508582101561211557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b8085111561215f57815f190482111561214557612145611d3c565b8085161561215257918102915b93841c939080029061212a565b509250929050565b5f8261217557506001610767565b8161218157505f610767565b816001811461219757600281146121a1576121bd565b6001915050610767565b60ff8411156121b2576121b2611d3c565b50506001821b610767565b5060208310610133831016604e8410600b84101617156121e0575081810a610767565b6121ea8383612125565b805f19048211156121fd576121fd611d3c565b029392505050565b5f610d2f60ff841683612167565b8082018082111561076757610767611d3c565b5f8261224057634e487b7160e01b5f52601260045260245ffd5b500490565b5f6001820161225657612256611d3c565b506001019056fea26469706673582212208800cec55ad5c6d3e154b69f4361f030900541a8da122bffa1e45fc0b1bf75e664736f6c6343000814003368747470733a2f2f6f72616e67652d7265616c2d61706869642d3937392e6d7970696e6174612e636c6f75642f697066732f516d626f6174527651577938724167725746584d4a4475587a75696f726a62445646745341334558416f705335532f000000000000000000000000120f18fcb3c0788fecf7b28f325aa9d990b9a35400000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e8
Deployed Bytecode
0x608060405234801561000f575f80fd5b5060043610610234575f3560e01c806370a0823111610135578063c87b56dd116100b4578063e30c397811610079578063e30c39781461051e578063e985e9c51461052f578063f0306ea41461055c578063f2fde38b14610564578063f349b17314610577575f80fd5b8063c87b56dd146104a7578063d547cfb7146104ba578063dd62ed3e146104c2578063e0df5b6f146104ec578063e2d6f33a146104ff575f80fd5b80639b19251a116100fa5780639b19251a14610444578063a22cb46514610466578063a9059cbb14610479578063b88d4fde1461048c578063c6a6035a1461049f575f80fd5b806370a08231146103fd578063715018a61461041c57806379ba5097146104245780638da5cb5b1461042c57806395d89b411461043c575f80fd5b80634bf28fd0116101c1578063589210d911610186578063589210d9146103ba5780635c975abb146103c35780636352211e146103ce57806365b61b77146103e15780636caae832146103f4575f80fd5b80634bf28fd01461036f5780634f02c420146103825780634f91e48c1461038b578063504334c21461039457806353d6fd59146103a7575f80fd5b80631e70b6df116102075780631e70b6df146102ee578063207add91146102fb57806323b872dd14610310578063313ce5671461032357806342842e0e1461035c575f80fd5b806306fdde0314610238578063081812fc14610256578063095ea7b31461029657806318160ddd146102b9575b5f80fd5b610240610596565b60405161024d91906119df565b60405180910390f35b61027e610264366004611a11565b60076020525f90815260409020546001600160a01b031681565b6040516001600160a01b03909116815260200161024d565b6102a96102a4366004611a3e565b610622565b604051901515815260200161024d565b6102e07f00000000000000000000000000000000000000000000003635c9adc5dea0000081565b60405190815260200161024d565b6018546102a99060ff1681565b61030e610309366004611a66565b61076d565b005b61030e61031e366004611a86565b610780565b61034a7f000000000000000000000000000000000000000000000000000000000000001281565b60405160ff909116815260200161024d565b61030e61036a366004611a86565b610afc565b600e5461027e906001600160a01b031681565b6102e060045481565b6102e060145481565b61030e6103a2366004611b5c565b610bcd565b61030e6103b5366004611bbc565b610be3565b6102e060135481565b60105460ff166102a9565b61027e6103dc366004611a11565b610c15565b600d5461027e906001600160a01b031681565b6102e060155481565b6102e061040b366004611bf5565b60056020525f908152604090205481565b61030e610c4f565b61030e610c62565b5f546001600160a01b031661027e565b610240610cab565b6102a9610452366004611bf5565b600c6020525f908152604090205460ff1681565b61030e610474366004611bbc565b610cb8565b6102a9610487366004611a3e565b610d23565b61030e61049a366004611c0e565b610d36565b61030e610df6565b6102406104b5366004611a11565b610e0d565b6102406110f2565b6102e06104d0366004611ca1565b600660209081525f928352604080842090915290825290205481565b61030e6104fa366004611cd2565b6110ff565b6102e061050d366004611bf5565b60166020525f908152604090205481565b6001546001600160a01b031661027e565b6102a961053d366004611ca1565b600860209081525f928352604080842090915290825290205460ff1681565b61030e611113565b61030e610572366004611bf5565b611127565b6102e0610585366004611bf5565b60176020525f908152604090205481565b600280546105a390611d04565b80601f01602080910402602001604051908101604052809291908181526020018280546105cf90611d04565b801561061a5780601f106105f15761010080835404028352916020019161061a565b820191905f5260205f20905b8154815290600101906020018083116105fd57829003601f168201915b505050505081565b5f600454821115801561063457505f82115b15610708575f828152600960205260409020546001600160a01b031633811480159061068357506001600160a01b0381165f90815260086020908152604080832033845290915290205460ff16155b156106a0576040516282b42960e81b815260040160405180910390fd5b5f8381526007602090815260409182902080546001600160a01b0319166001600160a01b038881169182179092559251868152908416917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a350610763565b335f8181526006602090815260408083206001600160a01b03881680855290835292819020869055518581529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b5060015b92915050565b610775611197565b601391909155601455565b6004548111610a90575f818152600960205260409020546001600160a01b038481169116146107c257604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0382166107e957604051634e46966960e11b815260040160405180910390fd5b336001600160a01b0384161480159061082557506001600160a01b0383165f90815260086020908152604080832033845290915290205460ff16155b801561084757505f818152600760205260409020546001600160a01b03163314155b15610864576040516282b42960e81b815260040160405180910390fd5b61086c6111c3565b6001600160a01b0384165f9081526005602052604081208054909190610893908490611d50565b909155506108a190506111c3565b6001600160a01b038084165f81815260056020908152604080832080549096019095558582526009815284822080546001600160a01b031990811690941790556007815284822080549093169092559186168252600a9052908120805461090a90600190611d50565b8154811061091a5761091a611d63565b5f9182526020808320909101546001600160a01b0387168352600a82526040808420868552600b9093529092205481549293508392811061095d5761095d611d63565b5f9182526020808320909101929092556001600160a01b0386168152600a9091526040902080548061099157610991611d77565b5f828152602080822083015f19908101839055909201909255838252600b8152604080832054848452818420556001600160a01b038616808452600a835290832080546001818101835582865293852001869055925290546109f39190611d50565b5f838152600b602052604080822092909255905183916001600160a01b0380871692908816917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4826001600160a01b0316846001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e031487610a796111c3565b60405190815260200160405180910390a350505050565b6001600160a01b0383165f9081526006602090815260408083203384529091529020545f198114610ae957610ac58282611d50565b6001600160a01b0385165f9081526006602090815260408083203384529091529020555b610af48484846111f4565b50505b505050565b610b07838383610780565b6001600160a01b0382163b15801590610baf5750604051630a85bd0160e11b8082523360048301526001600160a01b03858116602484015260448301849052608060648401525f608484015290919084169063150b7a029060a4016020604051808303815f875af1158015610b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ba29190611d8b565b6001600160e01b03191614155b15610af757604051633da6393160e01b815260040160405180910390fd5b610bd5611197565b610bdf82826113c6565b5050565b610beb611197565b6001600160a01b03919091165f908152600c60205260409020805460ff1916911515919091179055565b5f818152600960205260409020546001600160a01b031680610c4a5760405163c5723b5160e01b815260040160405180910390fd5b919050565b610c57611197565b610c605f6113df565b565b60015433906001600160a01b03168114610c9f5760405163118cdaa760e01b81526001600160a01b03821660048201526024015b60405180910390fd5b610ca8816113df565b50565b600380546105a390611d04565b335f8181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b5f610d2f3384846111f4565b9392505050565b610d41858585610780565b6001600160a01b0384163b15801590610dd85750604051630a85bd0160e11b808252906001600160a01b0386169063150b7a0290610d8b9033908a90899089908990600401611db2565b6020604051808303815f875af1158015610da7573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dcb9190611d8b565b6001600160e01b03191614155b15610af457604051633da6393160e01b815260040160405180910390fd5b610dfe611197565b6018805460ff19166001179055565b60605f60128054610e1d90611d04565b90501115610e57576012610e30836113f8565b604051602001610e41929190611e04565b6040516020818303038152906040529050919050565b5f82604051602001610e6b91815260200190565b6040516020818303038152906040528051906020012060f81c905060608060648360ff1611610ed95760405180604001604052806005815260200164312e706e6760d81b81525091506040518060400160405280600581526020016411138d0c0d60da1b8152509050610fc5565b60a08360ff1611610f295760405180604001604052806005815260200164312e706e6760d81b81525091506040518060400160405280600581526020016411138d0c0d60da1b8152509050610fc5565b60d28360ff1611610f795760405180604001604052806005815260200164312e706e6760d81b81525091506040518060400160405280600581526020016411138d0c0d60da1b8152509050610fc5565b60f08360ff1611610fc55760405180604001604052806005815260200164312e706e6760d81b81525091506040518060400160405280600581526020016411138d0c0d60da1b81525090505b5f610fcf866113f8565b604051602001610fdf9190611e87565b60408051601f1981840301815290829052610ffc91602001611ec0565b60405160208183030381529060405260128460405160200161101f929190611e04565b60408051601f198184030181529082905261103d9291602001611f57565b60405160208183030381529060405290505f826040516020016110609190611f7c565b60408051601f1981840301815282820182526004835263227d5d7d60e01b602084810191909152915190935061109a918591859101611f57565b60408051601f19818403018152908290526110b9918390602001611f57565b60408051601f19818403018152908290526110d691602001611fd8565b6040516020818303038152906040529650505050505050919050565b601280546105a390611d04565b611107611197565b6012610bdf8282612069565b61111b611197565b6018805460ff19169055565b61112f611197565b600180546001600160a01b0383166001600160a01b0319909116811790915561115f5f546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f546001600160a01b03163314610c605760405163118cdaa760e01b8152336004820152602401610c96565b5f6111ef7f0000000000000000000000000000000000000000000000000000000000000012600a612205565b905090565b5f6111fd611488565b60185460ff161561124b57601554821061124b5760405162461bcd60e51b815260206004820152600f60248201526e195e18d95959081d1e081b1a5b5a5d608a1b6044820152606401610c96565b6001600160a01b0384165f908152600c602052604090205460ff166112ff576001600160a01b0384165f9081526017602052604081208054849290611291908490612213565b90915550506014546001600160a01b0385165f9081526017602052604090205411156112ff5760405162461bcd60e51b815260206004820152601b60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f2073656c6c00000000006044820152606401610c96565b6001600160a01b0383165f908152600c602052604090205460ff166113b3576001600160a01b0383165f9081526016602052604081208054849290611345908490612213565b90915550506013546001600160a01b0384165f9081526016602052604090205411156113b35760405162461bcd60e51b815260206004820152601a60248201527f6e6f7420616c6c6f77656420616e796d6f726520746f206275790000000000006044820152606401610c96565b6113be8484846114ac565b949350505050565b60026113d28382612069565b506003610af78282612069565b600180546001600160a01b0319169055610ca881611662565b60605f611404836116b1565b60010190505f8167ffffffffffffffff81111561142357611423611abf565b6040519080825280601f01601f19166020018201604052801561144d576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461145757509392505050565b60105460ff1615610c605760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b038084165f8181526005602052604080822080549487168352908220549282529092678ac7230489e800009290918590856114ee8386611d50565b90915550506001600160a01b038087165f90815260056020908152604080832080548a019055928a168252600c9052205460ff16611587576001600160a01b0387165f90815260056020526040812054611549908590612226565b6115538585612226565b61155d9190611d50565b90505f5b818110156115845761157289611788565b8061157c81612245565b915050611561565b50505b6001600160a01b0386165f908152600c602052604090205460ff16611608575f6115b18483612226565b6001600160a01b0388165f908152600560205260409020546115d4908690612226565b6115de9190611d50565b90505f5b81811015611605576115f3886118a9565b806115fd81612245565b9150506115e2565b50505b856001600160a01b0316876001600160a01b03167fe59fdd36d0d223c0c7d996db7ad796880f45e1936cb0bb7ac102e7082e0314878760405161164d91815260200190565b60405180910390a35060019695505050505050565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106116ef5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef8100000000831061171b576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc10000831061173957662386f26fc10000830492506010015b6305f5e1008310611751576305f5e100830492506008015b612710831061176557612710830492506004015b60648310611777576064830492506002015b600a83106107675760010192915050565b6001600160a01b0381166117af57604051636edaef2f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152600a6020526040812080546117d490600190611d50565b815481106117e4576117e4611d63565b905f5260205f2001549050600a5f836001600160a01b03166001600160a01b031681526020019081526020015f2080548061182157611821611d77565b5f828152602080822083015f19908101839055909201909255828252600b815260408083208390556009825280832080546001600160a01b031990811690915560079092528083208054909216909155518291906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b6118b1611488565b610ca8816001600160a01b0381166118dc57604051634e46966960e11b815260040160405180910390fd5b60048054600101908190555f818152600960205260409020546001600160a01b03161561191c5760405163119b4fd360e11b815260040160405180910390fd5b5f81815260096020908152604080832080546001600160a01b0319166001600160a01b038716908117909155808452600a835290832080546001818101835582865293852001859055925290546119739190611d50565b5f828152600b602052604080822092909255905182916001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b5f5b838110156119d75781810151838201526020016119bf565b50505f910152565b602081525f82518060208401526119fd8160408501602087016119bd565b601f01601f19169190910160400192915050565b5f60208284031215611a21575f80fd5b5035919050565b80356001600160a01b0381168114610c4a575f80fd5b5f8060408385031215611a4f575f80fd5b611a5883611a28565b946020939093013593505050565b5f8060408385031215611a77575f80fd5b50508035926020909101359150565b5f805f60608486031215611a98575f80fd5b611aa184611a28565b9250611aaf60208501611a28565b9150604084013590509250925092565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ae2575f80fd5b813567ffffffffffffffff80821115611afd57611afd611abf565b604051601f8301601f19908116603f01168101908282118183101715611b2557611b25611abf565b81604052838152866020858801011115611b3d575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f8060408385031215611b6d575f80fd5b823567ffffffffffffffff80821115611b84575f80fd5b611b9086838701611ad3565b93506020850135915080821115611ba5575f80fd5b50611bb285828601611ad3565b9150509250929050565b5f8060408385031215611bcd575f80fd5b611bd683611a28565b915060208301358015158114611bea575f80fd5b809150509250929050565b5f60208284031215611c05575f80fd5b610d2f82611a28565b5f805f805f60808688031215611c22575f80fd5b611c2b86611a28565b9450611c3960208701611a28565b935060408601359250606086013567ffffffffffffffff80821115611c5c575f80fd5b818801915088601f830112611c6f575f80fd5b813581811115611c7d575f80fd5b896020828501011115611c8e575f80fd5b9699959850939650602001949392505050565b5f8060408385031215611cb2575f80fd5b611cbb83611a28565b9150611cc960208401611a28565b90509250929050565b5f60208284031215611ce2575f80fd5b813567ffffffffffffffff811115611cf8575f80fd5b6113be84828501611ad3565b600181811c90821680611d1857607f821691505b602082108103611d3657634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561076757610767611d3c565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52603160045260245ffd5b5f60208284031215611d9b575f80fd5b81516001600160e01b031981168114610d2f575f80fd5b6001600160a01b038681168252851660208201526040810184905260806060820181905281018290525f828460a08401375f60a0848401015260a0601f19601f85011683010190509695505050505050565b5f808454611e1181611d04565b60018281168015611e295760018114611e3e57611e6a565b60ff1984168752821515830287019450611e6a565b885f526020805f205f5b85811015611e615781548a820152908401908201611e48565b50505082870194505b505050508351611e7e8183602088016119bd565b01949350505050565b707b226e616d65223a2022444e343034202360781b815281515f90611eb38160118501602087016119bd565b9190910160110192915050565b5f8251611ed18184602087016119bd565b7f222c226465736372697074696f6e223a22444e343034202d20546865206669729201918252507f7374204e465434303420736f6c7574696f6e20746f2073706c697474696e672060208201527f4e4654732e222c2265787465726e616c5f75726c223a22222c22696d616765226040820152611d1160f11b6060820152606201919050565b5f8351611f688184602088016119bd565b835190830190611e7e8183602088016119bd565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a224481526e271a181a1116113b30b63ab2911d1160891b60208201525f8251611fcb81602f8501602087016119bd565b91909101602f0192915050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b757466382c000000000081525f825161200f81601b8501602087016119bd565b91909101601b0192915050565b601f821115610af7575f81815260208120601f850160051c810160208610156120425750805b601f850160051c820191505b818110156120615782815560010161204e565b505050505050565b815167ffffffffffffffff81111561208357612083611abf565b612097816120918454611d04565b8461201c565b602080601f8311600181146120ca575f84156120b35750858301515b5f19600386901b1c1916600185901b178555612061565b5f85815260208120601f198616915b828110156120f8578886015182559484019460019091019084016120d9565b508582101561211557878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b600181815b8085111561215f57815f190482111561214557612145611d3c565b8085161561215257918102915b93841c939080029061212a565b509250929050565b5f8261217557506001610767565b8161218157505f610767565b816001811461219757600281146121a1576121bd565b6001915050610767565b60ff8411156121b2576121b2611d3c565b50506001821b610767565b5060208310610133831016604e8410600b84101617156121e0575081810a610767565b6121ea8383612125565b805f19048211156121fd576121fd611d3c565b029392505050565b5f610d2f60ff841683612167565b8082018082111561076757610767611d3c565b5f8261224057634e487b7160e01b5f52601260045260245ffd5b500490565b5f6001820161225657612256611d3c565b506001019056fea26469706673582212208800cec55ad5c6d3e154b69f4361f030900541a8da122bffa1e45fc0b1bf75e664736f6c63430008140033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000120f18fcb3c0788fEcf7B28F325aa9d990B9A35400000000000000000000000000000000000000000000000000000000000003e8000000000000000000000000000000000000000000000000000000000000001200000000000000000000000000000000000000000000000000000000000003e800000000000000000000000000000000000000000000000000000000000003e8
-----Decoded View---------------
Arg [0] : _owner (address): 0x120f18fcb3c0788fEcf7B28F325aa9d990B9A354
Arg [1] : _initialSupply (uint256): 1000
Arg [2] : _decimal (uint8): 18
Arg [3] : _buylimit (uint256): 1000
Arg [4] : _selllimit (uint256): 1000
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000120f18fcb3c0788fEcf7B28F325aa9d990B9A354
Arg [1] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000012
Arg [3] : 00000000000000000000000000000000000000000000000000000000000003e8
Arg [4] : 00000000000000000000000000000000000000000000000000000000000003e8
Deployed Bytecode Sourcemap
46344:4014:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36777:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37488:46;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;37488:46:0;;;;;;-1:-1:-1;;;;;1019:32:1;;;1001:51;;989:2;974:18;37488:46:0;855:203:1;40010:642:0;;;;;;:::i;:::-;;:::i;:::-;;;1665:14:1;;1658:22;1640:41;;1628:2;1613:18;40010:642:0;1500:187:1;37013:36:0;;;;;;;;1838:25:1;;;1826:2;1811:18;37013:36:0;1692:177:1;46775:30:0;;;;;;;;;47257:145;;;;;;:::i;:::-;;:::i;:::-;;41059:1716;;;;;;:::i;:::-;;:::i;36913:31::-;;;;;;;;2632:4:1;2620:17;;;2602:36;;2590:2;2575:18;36913:31:0;2460:184:1;43071:405:0;;;;;;:::i;:::-;;:::i;38241:27::-;;;;;-1:-1:-1;;;;;38241:27:0;;;37148:21;;;;;;46572:24;;;;;;48484:158;;;;;;:::i;:::-;;:::i;39339:111::-;;;;;;:::i;:::-;;:::i;46542:23::-;;;;;;26514:86;26585:7;;;;26514:86;;39522:193;;;;;;:::i;:::-;;:::i;38149:36::-;;;;;-1:-1:-1;;;;;38149:36:0;;;46603:22;;;;;;37254:44;;;;;;:::i;:::-;;;;;;;;;;;;;;31935:103;;;:::i;34572:235::-;;;:::i;31260:87::-;31306:7;31333:6;-1:-1:-1;;;;;31333:6:0;31260:87;;36831:20;;;:::i;38099:41::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;40703:207;;;;;;:::i;:::-;;:::i;42834:160::-;;;;;;:::i;:::-;;:::i;43571:437::-;;;;;;:::i;:::-;;:::i;47533:86::-;;;:::i;48652:1703::-;;;;;;:::i;:::-;;:::i;46409:126::-;;;:::i;37368:64::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;48370:106;;;;;;:::i;:::-;;:::i;46632:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;33660:101;33740:13;;-1:-1:-1;;;;;33740:13:0;33660:101;;37599:68;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;47627:86;;;:::i;33960:181::-;;;;;;:::i;:::-;;:::i;46687:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;36777:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;40010:642::-;40113:4;40148:6;;40134:10;:20;;:38;;;;;40171:1;40158:10;:14;40134:38;40130:491;;;40189:13;40205:20;;;:8;:20;;;;;;-1:-1:-1;;;;;40205:20:0;40246:10;:19;;;;;:59;;-1:-1:-1;;;;;;40270:23:0;;;;;;:16;:23;;;;;;;;40294:10;40270:35;;;;;;;;;;40269:36;40246:59;40242:121;;;40333:14;;-1:-1:-1;;;40333:14:0;;;;;;;;;;;40242:121;40379:23;;;;:11;:23;;;;;;;;;:33;;-1:-1:-1;;;;;;40379:33:0;-1:-1:-1;;;;;40379:33:0;;;;;;;;;40434:36;;1838:25:1;;;40434:36:0;;;;;;1811:18:1;40434:36:0;;;;;;;40174:308;40130:491;;;40513:10;40503:21;;;;:9;:21;;;;;;;;-1:-1:-1;;;;;40503:30:0;;;;;;;;;;;;:43;;;40568:41;1838:25:1;;;40503:30:0;;40513:10;40568:41;;1811:18:1;40568:41:0;;;;;;;40130:491;-1:-1:-1;40640:4:0;40010:642;;;;;:::o;47257:145::-;31146:13;:11;:13::i;:::-;47341:8:::1;:20:::0;;;;47372:9:::1;:22:::0;47257:145::o;41059:1716::-;41205:6;;41191:10;:20;41187:1581;;41240:20;;;;:8;:20;;;;;;-1:-1:-1;;;;;41232:28:0;;;41240:20;;41232:28;41228:91;;41288:15;;-1:-1:-1;;;41288:15:0;;;;;;;;;;;41228:91;-1:-1:-1;;;;;41339:16:0;;41335:82;;41383:18;;-1:-1:-1;;;41383:18:0;;;;;;;;;;;41335:82;41455:10;-1:-1:-1;;;;;41455:18:0;;;;;;:74;;-1:-1:-1;;;;;;41495:22:0;;;;;;:16;:22;;;;;;;;41518:10;41495:34;;;;;;;;;;41494:35;41455:74;:132;;;;-1:-1:-1;41564:23:0;;;;:11;:23;;;;;;-1:-1:-1;;;;;41564:23:0;41550:10;:37;;41455:132;41433:226;;;41629:14;;-1:-1:-1;;;41629:14:0;;;;;;;;;;;41433:226;41694:10;:8;:10::i;:::-;-1:-1:-1;;;;;41675:15:0;;;;;;:9;:15;;;;;:29;;:15;;;:29;;;;;:::i;:::-;;;;-1:-1:-1;41767:10:0;;-1:-1:-1;41767:8:0;:10::i;:::-;-1:-1:-1;;;;;41750:13:0;;;;;;;:9;:13;;;;;;;;:27;;;;;;;;41809:20;;;:8;:20;;;;;:25;;-1:-1:-1;;;;;;41809:25:0;;;;;;;;41856:11;:23;;;;;41849:30;;;;;;;;41957:12;;;;;:6;:12;;;;;41970:19;;:23;;-1:-1:-1;;41970:23:0;:::i;:::-;41957:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;42009:12:0;;;;:6;:12;;;;;;42022:23;;;:11;:23;;;;;;;42009:37;;41957;;-1:-1:-1;41957:37:0;;42009;;;;;;:::i;:::-;;;;;;;;;;;;:49;;;;-1:-1:-1;;;;;42093:12:0;;;;:6;:12;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;42093:18:0;;;;;;;;;;;;42197:23;;;:11;:23;;;;;;;42172:22;;;;;;:48;-1:-1:-1;;;;;42274:10:0;;;;;:6;:10;;;;;:27;;42093:18;42274:27;;;;;;;;;;;;;;;42384:10;;:17;;:21;;42093:18;42384:21;:::i;:::-;42358:23;;;;:11;:23;;;;;;:47;;;;42427:30;;42370:10;;-1:-1:-1;;;;;42427:30:0;;;;;;;;;;;42497:2;-1:-1:-1;;;;;42477:35:0;42491:4;-1:-1:-1;;;;;42477:35:0;;42501:10;:8;:10::i;:::-;42477:35;;1838:25:1;;;1826:2;1811:18;42477:35:0;;;;;;;41213:1311;41059:1716;;;:::o;41187:1581::-;-1:-1:-1;;;;;42563:15:0;;42545;42563;;;:9;:15;;;;;;;;42579:10;42563:27;;;;;;;;-1:-1:-1;;42611:28:0;;42607:101;;42688:20;42698:10;42688:7;:20;:::i;:::-;-1:-1:-1;;;;;42658:15:0;;;;;;:9;:15;;;;;;;;42674:10;42658:27;;;;;;;:50;42607:101;42725:31;42735:4;42741:2;42745:10;42725:9;:31::i;:::-;;42530:238;41187:1581;41059:1716;;;:::o;43071:405::-;43195:26;43208:4;43214:2;43218;43195:12;:26::i;:::-;-1:-1:-1;;;;;43252:14:0;;;:19;;;;:154;;-1:-1:-1;43288:61:0;;-1:-1:-1;;;43288:61:0;;;43324:10;43288:61;;;7451:34:1;-1:-1:-1;;;;;7521:15:1;;;7501:18;;;7494:43;7553:18;;;7546:34;;;7616:3;7596:18;;;7589:31;-1:-1:-1;7636:19:1;;;7629:30;43366:40:0;;43288:35;;;;43366:40;;7676:19:1;;43288:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;43288:118:0;;;43252:154;43234:235;;;43440:17;;-1:-1:-1;;;43440:17:0;;;;;;;;;;;48484:158;31146:13;:11;:13::i;:::-;48604:30:::1;48619:5;48626:7;48604:14;:30::i;:::-;48484:158:::0;;:::o;39339:111::-;31146:13;:11;:13::i;:::-;-1:-1:-1;;;;;39417:17:0;;;::::1;;::::0;;;:9:::1;:17;::::0;;;;:25;;-1:-1:-1;;39417:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39339:111::o;39522:193::-;39580:13;39614:12;;;:8;:12;;;;;;-1:-1:-1;;;;;39614:12:0;;39639:69;;39686:10;;-1:-1:-1;;;39686:10:0;;;;;;;;;;;39639:69;39522:193;;;:::o;31935:103::-;31146:13;:11;:13::i;:::-;32000:30:::1;32027:1;32000:18;:30::i;:::-;31935:103::o:0;34572:235::-;33740:13;;24373:10;;-1:-1:-1;;;;;33740:13:0;34669:24;;34665:98;;34717:34;;-1:-1:-1;;;34717:34:0;;-1:-1:-1;;;;;1019:32:1;;34717:34:0;;;1001:51:1;974:18;;34717:34:0;;;;;;;;34665:98;34773:26;34792:6;34773:18;:26::i;:::-;34614:193;34572:235::o;36831:20::-;;;;;;;:::i;40703:207::-;40806:10;40789:28;;;;:16;:28;;;;;;;;-1:-1:-1;;;;;40789:38:0;;;;;;;;;;;;:49;;-1:-1:-1;;40789:49:0;;;;;;;;;;40856:46;;1640:41:1;;;40789:38:0;;40806:10;40856:46;;1613:18:1;40856:46:0;;;;;;;40703:207;;:::o;42834:160::-;42929:4;42953:33;42963:10;42975:2;42979:6;42953:9;:33::i;:::-;42946:40;42834:160;-1:-1:-1;;;42834:160:0:o;43571:437::-;43725:26;43738:4;43744:2;43748;43725:12;:26::i;:::-;-1:-1:-1;;;;;43782:14:0;;;:19;;;;:156;;-1:-1:-1;43818:63:0;;-1:-1:-1;;;43818:63:0;;;43898:40;-1:-1:-1;;;;;43818:35:0;;;43898:40;;43818:63;;43854:10;;43866:4;;43872:2;;43876:4;;;;43818:63;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;43818:120:0;;;43782:156;43764:237;;;43972:17;;-1:-1:-1;;;43972:17:0;;;;;;;;;;;47533:86;31146:13;:11;:13::i;:::-;47592:12:::1;:19:::0;;-1:-1:-1;;47592:19:0::1;47607:4;47592:19;::::0;;47533:86::o;48652:1703::-;48712:13;48771:1;48748:12;48742:26;;;;;:::i;:::-;;;:30;48738:1610;;;48810:12;48824:20;48841:2;48824:16;:20::i;:::-;48796:49;;;;;;;;;:::i;:::-;;;;;;;;;;;;;48789:56;;48652:1703;;;:::o;48738:1610::-;48878:10;48931:2;48914:20;;;;;;9948:19:1;;9992:2;9983:12;;9819:182;48914:20:0;;;;;;;;;;;;;48904:31;;;;;;48891:46;;48878:59;;48952:19;48987;49035:3;49027:4;:11;;;49023:422;;49059:15;;;;;;;;;;;;;-1:-1:-1;;;49059:15:0;;;;;49093;;;;;;;;;;;;;-1:-1:-1;;;49093:15:0;;;;;49023:422;;;49142:3;49134:4;:11;;;49130:315;;49166:15;;;;;;;;;;;;;-1:-1:-1;;;49166:15:0;;;;;49200;;;;;;;;;;;;;-1:-1:-1;;;49200:15:0;;;;;49130:315;;;49249:3;49241:4;:11;;;49237:208;;49273:15;;;;;;;;;;;;;-1:-1:-1;;;49273:15:0;;;;;49307;;;;;;;;;;;;;-1:-1:-1;;;49307:15:0;;;;;49237:208;;;49356:3;49348:4;:11;;;49344:101;;49380:15;;;;;;;;;;;;;-1:-1:-1;;;49380:15:0;;;;;49414;;;;;;;;;;;;;-1:-1:-1;;;49414:15:0;;;;;49344:101;49462:26;49594:20;49611:2;49594:16;:20::i;:::-;49559:56;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49559:56:0;;;;;;;;;;49523:234;;49559:56;49523:234;;:::i;:::-;;;;;;;;;;;;;49790:12;49804:5;49776:34;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49776:34:0;;;;;;;;;;49491:334;;;49776:34;49491:334;;:::i;:::-;;;;;;;;;;;;;49462:363;;49840:27;49970:5;49870:120;;;;;;;;:::i;:::-;;;;-1:-1:-1;;49870:120:0;;;;;;50005:37;;;;;;;;-1:-1:-1;;;49870:120:0;50005:37;;;;;;;50211:42;;49870:120;;-1:-1:-1;50211:42:0;;50225:12;;49870:120;;50211:42;;:::i;:::-;;;;-1:-1:-1;;50211:42:0;;;;;;;;;;50171:146;;50280:14;;50211:42;50171:146;;:::i;:::-;;;;-1:-1:-1;;50171:146:0;;;;;;;;;;50083:253;;50171:146;50083:253;;:::i;:::-;;;;;;;;;;;;;50059:277;;;;;;;;48652:1703;;;:::o;46409:126::-;;;;;;;:::i;48370:106::-;31146:13;:11;:13::i;:::-;48444:12:::1;:24;48459:9:::0;48444:12;:24:::1;:::i;47627:86::-:0;31146:13;:11;:13::i;:::-;47685:12:::1;:20:::0;;-1:-1:-1;;47685:20:0::1;::::0;;47627:86::o;33960:181::-;31146:13;:11;:13::i;:::-;34050::::1;:24:::0;;-1:-1:-1;;;;;34050:24:0;::::1;-1:-1:-1::0;;;;;;34050:24:0;;::::1;::::0;::::1;::::0;;;34115:7:::1;31306::::0;31333:6;-1:-1:-1;;;;;31333:6:0;;31260:87;34115:7:::1;-1:-1:-1::0;;;;;34090:43:0::1;;;;;;;;;;;33960:181:::0;:::o;31425:166::-;31306:7;31333:6;-1:-1:-1;;;;;31333:6:0;24373:10;31485:23;31481:103;;31532:40;;-1:-1:-1;;;31532:40:0;;24373:10;31532:40;;;1001:51:1;974:18;;31532:40:0;855:203:1;45212:92:0;45255:7;45282:14;45288:8;45282:2;:14;:::i;:::-;45275:21;;45212:92;:::o;47721:641::-;47865:4;26119:19;:17;:19::i;:::-;47884:12:::1;::::0;::::1;;47881:87;;;47929:7;;47920:6;:16;47912:44;;;::::0;-1:-1:-1;;;47912:44:0;;16403:2:1;47912:44:0::1;::::0;::::1;16385:21:1::0;16442:2;16422:18;;;16415:30;-1:-1:-1;;;16461:18:1;;;16454:45;16516:18;;47912:44:0::1;16201:339:1::0;47912:44:0::1;-1:-1:-1::0;;;;;47982:15:0;::::1;;::::0;;;:9:::1;:15;::::0;;;;;::::1;;47978:163;;-1:-1:-1::0;;;;;48013:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;:29;;48036:6;;48013:19;:29:::1;::::0;48036:6;;48013:29:::1;:::i;:::-;::::0;;;-1:-1:-1;;48088:9:0::1;::::0;-1:-1:-1;;;;;48065:19:0;::::1;;::::0;;;:13:::1;:19;::::0;;;;;:32:::1;;48057:72;;;::::0;-1:-1:-1;;;48057:72:0;;16877:2:1;48057:72:0::1;::::0;::::1;16859:21:1::0;16916:2;16896:18;;;16889:30;16955:29;16935:18;;;16928:57;17002:18;;48057:72:0::1;16675:351:1::0;48057:72:0::1;-1:-1:-1::0;;;;;48155:13:0;::::1;;::::0;;;:9:::1;:13;::::0;;;;;::::1;;48151:153;;-1:-1:-1::0;;;;;48184:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;:26;;48204:6;;48184:16;:26:::1;::::0;48204:6;;48184:26:::1;:::i;:::-;::::0;;;-1:-1:-1;;48253:8:0::1;::::0;-1:-1:-1;;;;;48233:16:0;::::1;;::::0;;;:12:::1;:16;::::0;;;;;:28:::1;;48225:67;;;::::0;-1:-1:-1;;;48225:67:0;;17233:2:1;48225:67:0::1;::::0;::::1;17215:21:1::0;17272:2;17252:18;;;17245:30;17311:28;17291:18;;;17284:56;17357:18;;48225:67:0::1;17031:350:1::0;48225:67:0::1;48321:33;48337:4;48343:2;48347:6;48321:15;:33::i;:::-;48314:40:::0;47721:641;-1:-1:-1;;;;47721:641:0:o;46175:160::-;46288:4;:12;46295:5;46288:4;:12;:::i;:::-;-1:-1:-1;46311:6:0;:16;46320:7;46311:6;:16;:::i;34331:156::-;34421:13;34414:20;;-1:-1:-1;;;;;;34414:20:0;;;34445:34;34470:8;34445:24;:34::i;21063:718::-;21119:13;21170:14;21187:17;21198:5;21187:10;:17::i;:::-;21207:1;21187:21;21170:38;;21223:20;21257:6;21246:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21246:18:0;-1:-1:-1;21223:41:0;-1:-1:-1;21388:28:0;;;21404:2;21388:28;21445:290;-1:-1:-1;;21477:5:0;-1:-1:-1;;;21614:2:0;21603:14;;21598:32;21477:5;21585:46;21677:2;21668:11;;;-1:-1:-1;21698:21:0;21445:290;21698:21;-1:-1:-1;21756:6:0;21063:718;-1:-1:-1;;;21063:718:0:o;26673:132::-;26585:7;;;;26735:63;;;26771:15;;-1:-1:-1;;;26771:15:0;;;;;;;;;;;44076:1097;-1:-1:-1;;;;;44276:15:0;;;44197:4;44276:15;;;:9;:15;;;;;;;;44334:13;;;;;;;;;44360:15;;;44197:4;;44229:6;;44276:15;;44379:6;;44197:4;44360:25;44379:6;44276:15;44360:25;:::i;:::-;;;;-1:-1:-1;;;;;;;44423:13:0;;;;;;;:9;:13;;;;;;;;:23;;;;;;44531:15;;;;;:9;:15;;;;;;44526:251;;-1:-1:-1;;;;;44637:15:0;;44563:22;44637:15;;;:9;:15;;;;;;:22;;44655:4;;44637:22;:::i;:::-;44589:26;44611:4;44589:19;:26;:::i;:::-;44588:72;;;;:::i;:::-;44563:97;;44680:9;44675:91;44699:14;44695:1;:18;44675:91;;;44739:11;44745:4;44739:5;:11::i;:::-;44715:3;;;;:::i;:::-;;;;44675:91;;;;44548:229;44526:251;-1:-1:-1;;;;;44853:13:0;;;;;;:9;:13;;;;;;;;44848:247;;44883:22;44951:28;44975:4;44951:21;:28;:::i;:::-;-1:-1:-1;;;;;44909:13:0;;;;;;:9;:13;;;;;;:20;;44925:4;;44909:20;:::i;:::-;44908:72;;;;:::i;:::-;44883:97;;45000:9;44995:89;45019:14;45015:1;:18;44995:89;;;45059:9;45065:2;45059:5;:9::i;:::-;45035:3;;;;:::i;:::-;;;;44995:89;;;;44868:227;44848:247;45132:2;-1:-1:-1;;;;;45112:31:0;45126:4;-1:-1:-1;;;;;45112:31:0;;45136:6;45112:31;;;;1838:25:1;;1826:2;1811:18;;1692:177;45112:31:0;;;;;;;;-1:-1:-1;45161:4:0;;44076:1097;-1:-1:-1;;;;;;44076:1097:0:o;32573:191::-;32647:16;32666:6;;-1:-1:-1;;;;;32683:17:0;;;-1:-1:-1;;;;;;32683:17:0;;;;;;32716:40;;32666:6;;;;;;;32716:40;;32647:16;32716:40;32636:128;32573:191;:::o;17467:948::-;17520:7;;-1:-1:-1;;;17598:17:0;;17594:106;;-1:-1:-1;;;17636:17:0;;;-1:-1:-1;17682:2:0;17672:12;17594:106;17727:8;17718:5;:17;17714:106;;17765:8;17756:17;;;-1:-1:-1;17802:2:0;17792:12;17714:106;17847:8;17838:5;:17;17834:106;;17885:8;17876:17;;;-1:-1:-1;17922:2:0;17912:12;17834:106;17967:7;17958:5;:16;17954:103;;18004:7;17995:16;;;-1:-1:-1;18040:1:0;18030:11;17954:103;18084:7;18075:5;:16;18071:103;;18121:7;18112:16;;;-1:-1:-1;18157:1:0;18147:11;18071:103;18201:7;18192:5;:16;18188:103;;18238:7;18229:16;;;-1:-1:-1;18274:1:0;18264:11;18188:103;18318:7;18309:5;:16;18305:68;;18356:1;18346:11;18401:6;17467:948;-1:-1:-1;;17467:948:0:o;45794:373::-;-1:-1:-1;;;;;45855:18:0;;45851:73;;45897:15;;-1:-1:-1;;;45897:15:0;;;;;;;;;;;45851:73;-1:-1:-1;;;;;45949:12:0;;45936:10;45949:12;;;:6;:12;;;;;45962:19;;:23;;45984:1;;45962:23;:::i;:::-;45949:37;;;;;;;;:::i;:::-;;;;;;;;;45936:50;;45997:6;:12;46004:4;-1:-1:-1;;;;;45997:12:0;-1:-1:-1;;;;;45997:12:0;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;45997:18:0;;;;;;;;;;;;46033:15;;;:11;:15;;;;;;46026:22;;;46066:8;:12;;;;;46059:19;;-1:-1:-1;;;;;;46059:19:0;;;;;;46096:11;:15;;;;;;46089:22;;;;;;;;46129:30;46045:2;;45997:18;-1:-1:-1;;;;;46129:30:0;;;;;45997:18;;46129:30;45840:327;45794:373;:::o;47410:115::-;26119:19;:17;:19::i;:::-;47502:15:::1;47514:2;-1:-1:-1::0;;;;;45371:16:0;;45367:74;;45411:18;;-1:-1:-1;;;45411:18:0;;;;;;;;;;;45367:74;45478:6;:8;;;;;;;;:6;45546:12;;;:8;:12;;;;;;-1:-1:-1;;;;;45546:12:0;:26;45542:81;;45596:15;;-1:-1:-1;;;45596:15:0;;;;;;;;;;;45542:81;45635:12;;;;:8;:12;;;;;;;;:17;;-1:-1:-1;;;;;;45635:17:0;-1:-1:-1;;;;;45635:17:0;;;;;;;;45663:10;;;:6;:10;;;;;:19;;-1:-1:-1;45663:19:0;;;;;;;;;;;;;;;45711:10;;:17;;:21;;-1:-1:-1;45711:21:0;:::i;:::-;45693:15;;;;:11;:15;;;;;;:39;;;;45750:28;;45705:2;;-1:-1:-1;;;;;45750:28:0;;;;;45693:15;;45750:28;45356:430;45312:474;:::o;14:250:1:-;99:1;109:113;123:6;120:1;117:13;109:113;;;199:11;;;193:18;180:11;;;173:39;145:2;138:10;109:113;;;-1:-1:-1;;256:1:1;238:16;;231:27;14:250::o;269:396::-;418:2;407:9;400:21;381:4;450:6;444:13;493:6;488:2;477:9;473:18;466:34;509:79;581:6;576:2;565:9;561:18;556:2;548:6;544:15;509:79;:::i;:::-;649:2;628:15;-1:-1:-1;;624:29:1;609:45;;;;656:2;605:54;;269:396;-1:-1:-1;;269:396:1:o;670:180::-;729:6;782:2;770:9;761:7;757:23;753:32;750:52;;;798:1;795;788:12;750:52;-1:-1:-1;821:23:1;;670:180;-1:-1:-1;670:180:1:o;1063:173::-;1131:20;;-1:-1:-1;;;;;1180:31:1;;1170:42;;1160:70;;1226:1;1223;1216:12;1241:254;1309:6;1317;1370:2;1358:9;1349:7;1345:23;1341:32;1338:52;;;1386:1;1383;1376:12;1338:52;1409:29;1428:9;1409:29;:::i;:::-;1399:39;1485:2;1470:18;;;;1457:32;;-1:-1:-1;;;1241:254:1:o;1874:248::-;1942:6;1950;2003:2;1991:9;1982:7;1978:23;1974:32;1971:52;;;2019:1;2016;2009:12;1971:52;-1:-1:-1;;2042:23:1;;;2112:2;2097:18;;;2084:32;;-1:-1:-1;1874:248:1:o;2127:328::-;2204:6;2212;2220;2273:2;2261:9;2252:7;2248:23;2244:32;2241:52;;;2289:1;2286;2279:12;2241:52;2312:29;2331:9;2312:29;:::i;:::-;2302:39;;2360:38;2394:2;2383:9;2379:18;2360:38;:::i;:::-;2350:48;;2445:2;2434:9;2430:18;2417:32;2407:42;;2127:328;;;;;:::o;2649:127::-;2710:10;2705:3;2701:20;2698:1;2691:31;2741:4;2738:1;2731:15;2765:4;2762:1;2755:15;2781:719;2824:5;2877:3;2870:4;2862:6;2858:17;2854:27;2844:55;;2895:1;2892;2885:12;2844:55;2931:6;2918:20;2957:18;2994:2;2990;2987:10;2984:36;;;3000:18;;:::i;:::-;3075:2;3069:9;3043:2;3129:13;;-1:-1:-1;;3125:22:1;;;3149:2;3121:31;3117:40;3105:53;;;3173:18;;;3193:22;;;3170:46;3167:72;;;3219:18;;:::i;:::-;3259:10;3255:2;3248:22;3294:2;3286:6;3279:18;3340:3;3333:4;3328:2;3320:6;3316:15;3312:26;3309:35;3306:55;;;3357:1;3354;3347:12;3306:55;3421:2;3414:4;3406:6;3402:17;3395:4;3387:6;3383:17;3370:54;3468:1;3461:4;3456:2;3448:6;3444:15;3440:26;3433:37;3488:6;3479:15;;;;;;2781:719;;;;:::o;3505:543::-;3593:6;3601;3654:2;3642:9;3633:7;3629:23;3625:32;3622:52;;;3670:1;3667;3660:12;3622:52;3710:9;3697:23;3739:18;3780:2;3772:6;3769:14;3766:34;;;3796:1;3793;3786:12;3766:34;3819:50;3861:7;3852:6;3841:9;3837:22;3819:50;:::i;:::-;3809:60;;3922:2;3911:9;3907:18;3894:32;3878:48;;3951:2;3941:8;3938:16;3935:36;;;3967:1;3964;3957:12;3935:36;;3990:52;4034:7;4023:8;4012:9;4008:24;3990:52;:::i;:::-;3980:62;;;3505:543;;;;;:::o;4053:347::-;4118:6;4126;4179:2;4167:9;4158:7;4154:23;4150:32;4147:52;;;4195:1;4192;4185:12;4147:52;4218:29;4237:9;4218:29;:::i;:::-;4208:39;;4297:2;4286:9;4282:18;4269:32;4344:5;4337:13;4330:21;4323:5;4320:32;4310:60;;4366:1;4363;4356:12;4310:60;4389:5;4379:15;;;4053:347;;;;;:::o;4636:186::-;4695:6;4748:2;4736:9;4727:7;4723:23;4719:32;4716:52;;;4764:1;4761;4754:12;4716:52;4787:29;4806:9;4787:29;:::i;4827:808::-;4924:6;4932;4940;4948;4956;5009:3;4997:9;4988:7;4984:23;4980:33;4977:53;;;5026:1;5023;5016:12;4977:53;5049:29;5068:9;5049:29;:::i;:::-;5039:39;;5097:38;5131:2;5120:9;5116:18;5097:38;:::i;:::-;5087:48;;5182:2;5171:9;5167:18;5154:32;5144:42;;5237:2;5226:9;5222:18;5209:32;5260:18;5301:2;5293:6;5290:14;5287:34;;;5317:1;5314;5307:12;5287:34;5355:6;5344:9;5340:22;5330:32;;5400:7;5393:4;5389:2;5385:13;5381:27;5371:55;;5422:1;5419;5412:12;5371:55;5462:2;5449:16;5488:2;5480:6;5477:14;5474:34;;;5504:1;5501;5494:12;5474:34;5549:7;5544:2;5535:6;5531:2;5527:15;5523:24;5520:37;5517:57;;;5570:1;5567;5560:12;5517:57;4827:808;;;;-1:-1:-1;4827:808:1;;-1:-1:-1;5601:2:1;5593:11;;5623:6;4827:808;-1:-1:-1;;;4827:808:1:o;5640:260::-;5708:6;5716;5769:2;5757:9;5748:7;5744:23;5740:32;5737:52;;;5785:1;5782;5775:12;5737:52;5808:29;5827:9;5808:29;:::i;:::-;5798:39;;5856:38;5890:2;5879:9;5875:18;5856:38;:::i;:::-;5846:48;;5640:260;;;;;:::o;5905:322::-;5974:6;6027:2;6015:9;6006:7;6002:23;5998:32;5995:52;;;6043:1;6040;6033:12;5995:52;6083:9;6070:23;6116:18;6108:6;6105:30;6102:50;;;6148:1;6145;6138:12;6102:50;6171;6213:7;6204:6;6193:9;6189:22;6171:50;:::i;6232:380::-;6311:1;6307:12;;;;6354;;;6375:61;;6429:4;6421:6;6417:17;6407:27;;6375:61;6482:2;6474:6;6471:14;6451:18;6448:38;6445:161;;6528:10;6523:3;6519:20;6516:1;6509:31;6563:4;6560:1;6553:15;6591:4;6588:1;6581:15;6445:161;;6232:380;;;:::o;6617:127::-;6678:10;6673:3;6669:20;6666:1;6659:31;6709:4;6706:1;6699:15;6733:4;6730:1;6723:15;6749:128;6816:9;;;6837:11;;;6834:37;;;6851:18;;:::i;6882:127::-;6943:10;6938:3;6934:20;6931:1;6924:31;6974:4;6971:1;6964:15;6998:4;6995:1;6988:15;7014:127;7075:10;7070:3;7066:20;7063:1;7056:31;7106:4;7103:1;7096:15;7130:4;7127:1;7120:15;7706:290;7775:6;7828:2;7816:9;7807:7;7803:23;7799:32;7796:52;;;7844:1;7841;7834:12;7796:52;7870:16;;-1:-1:-1;;;;;;7915:32:1;;7905:43;;7895:71;;7962:1;7959;7952:12;8001:662;-1:-1:-1;;;;;8280:15:1;;;8262:34;;8332:15;;8327:2;8312:18;;8305:43;8379:2;8364:18;;8357:34;;;8427:3;8422:2;8407:18;;8400:31;;;8447:19;;8440:35;;;8205:4;8468:6;8518;8242:3;8497:19;;8484:49;8583:1;8577:3;8568:6;8557:9;8553:22;8549:32;8542:43;8653:3;8646:2;8642:7;8637:2;8629:6;8625:15;8621:29;8610:9;8606:45;8602:55;8594:63;;8001:662;;;;;;;;:::o;8794:1020::-;8970:3;8999:1;9032:6;9026:13;9062:36;9088:9;9062:36;:::i;:::-;9117:1;9134:18;;;9161:133;;;;9308:1;9303:356;;;;9127:532;;9161:133;-1:-1:-1;;9194:24:1;;9182:37;;9267:14;;9260:22;9248:35;;9239:45;;;-1:-1:-1;9161:133:1;;9303:356;9334:6;9331:1;9324:17;9364:4;9409:2;9406:1;9396:16;9434:1;9448:165;9462:6;9459:1;9456:13;9448:165;;;9540:14;;9527:11;;;9520:35;9583:16;;;;9477:10;;9448:165;;;9452:3;;;9642:6;9637:3;9633:16;9626:23;;9127:532;;;;;9690:6;9684:13;9706:68;9765:8;9760:3;9753:4;9745:6;9741:17;9706:68;:::i;:::-;9790:18;;8794:1020;-1:-1:-1;;;;8794:1020:1:o;10006:466::-;-1:-1:-1;;;10246:59:1;;10328:13;;10228:3;;10350:75;10328:13;10413:2;10404:12;;10397:4;10385:17;;10350:75;:::i;:::-;10445:16;;;;10463:2;10441:25;;10006:466;-1:-1:-1;;10006:466:1:o;10477:731::-;10709:3;10747:6;10741:13;10763:66;10822:6;10817:3;10810:4;10802:6;10798:17;10763:66;:::i;:::-;10890;10851:16;;10876:81;;;-1:-1:-1;10991:34:1;10984:4;10973:16;;10966:60;11058:66;11053:2;11042:14;;11035:90;-1:-1:-1;;;11152:2:1;11141:14;;11134:38;11199:2;11188:14;;10477:731;-1:-1:-1;10477:731:1:o;11213:496::-;11392:3;11430:6;11424:13;11446:66;11505:6;11500:3;11493:4;11485:6;11481:17;11446:66;:::i;:::-;11575:13;;11534:16;;;;11597:70;11575:13;11534:16;11644:4;11632:17;;11597:70;:::i;11714:567::-;11976:66;11971:3;11964:79;12082:32;12077:3;12073:42;12068:2;12063:3;12059:12;12052:64;11946:3;12145:6;12139:13;12161:73;12227:6;12222:2;12217:3;12213:12;12208:2;12200:6;12196:15;12161:73;:::i;:::-;12254:16;;;;12272:2;12250:25;;11714:567;-1:-1:-1;;11714:567:1:o;12286:449::-;12538:29;12533:3;12526:42;12508:3;12597:6;12591:13;12613:75;12681:6;12676:2;12671:3;12667:12;12660:4;12652:6;12648:17;12613:75;:::i;:::-;12708:16;;;;12726:2;12704:25;;12286:449;-1:-1:-1;;12286:449:1:o;12740:545::-;12842:2;12837:3;12834:11;12831:448;;;12878:1;12903:5;12899:2;12892:17;12948:4;12944:2;12934:19;13018:2;13006:10;13002:19;12999:1;12995:27;12989:4;12985:38;13054:4;13042:10;13039:20;13036:47;;;-1:-1:-1;13077:4:1;13036:47;13132:2;13127:3;13123:12;13120:1;13116:20;13110:4;13106:31;13096:41;;13187:82;13205:2;13198:5;13195:13;13187:82;;;13250:17;;;13231:1;13220:13;13187:82;;;13191:3;;;12740:545;;;:::o;13461:1352::-;13587:3;13581:10;13614:18;13606:6;13603:30;13600:56;;;13636:18;;:::i;:::-;13665:97;13755:6;13715:38;13747:4;13741:11;13715:38;:::i;:::-;13709:4;13665:97;:::i;:::-;13817:4;;13881:2;13870:14;;13898:1;13893:663;;;;14600:1;14617:6;14614:89;;;-1:-1:-1;14669:19:1;;;14663:26;14614:89;-1:-1:-1;;13418:1:1;13414:11;;;13410:24;13406:29;13396:40;13442:1;13438:11;;;13393:57;14716:81;;13863:944;;13893:663;8741:1;8734:14;;;8778:4;8765:18;;-1:-1:-1;;13929:20:1;;;14047:236;14061:7;14058:1;14055:14;14047:236;;;14150:19;;;14144:26;14129:42;;14242:27;;;;14210:1;14198:14;;;;14077:19;;14047:236;;;14051:3;14311:6;14302:7;14299:19;14296:201;;;14372:19;;;14366:26;-1:-1:-1;;14455:1:1;14451:14;;;14467:3;14447:24;14443:37;14439:42;14424:58;14409:74;;14296:201;-1:-1:-1;;;;;14543:1:1;14527:14;;;14523:22;14510:36;;-1:-1:-1;13461:1352:1:o;14818:422::-;14907:1;14950:5;14907:1;14964:270;14985:7;14975:8;14972:21;14964:270;;;15044:4;15040:1;15036:6;15032:17;15026:4;15023:27;15020:53;;;15053:18;;:::i;:::-;15103:7;15093:8;15089:22;15086:55;;;15123:16;;;;15086:55;15202:22;;;;15162:15;;;;14964:270;;;14968:3;14818:422;;;;;:::o;15245:806::-;15294:5;15324:8;15314:80;;-1:-1:-1;15365:1:1;15379:5;;15314:80;15413:4;15403:76;;-1:-1:-1;15450:1:1;15464:5;;15403:76;15495:4;15513:1;15508:59;;;;15581:1;15576:130;;;;15488:218;;15508:59;15538:1;15529:10;;15552:5;;;15576:130;15613:3;15603:8;15600:17;15597:43;;;15620:18;;:::i;:::-;-1:-1:-1;;15676:1:1;15662:16;;15691:5;;15488:218;;15790:2;15780:8;15777:16;15771:3;15765:4;15762:13;15758:36;15752:2;15742:8;15739:16;15734:2;15728:4;15725:12;15721:35;15718:77;15715:159;;;-1:-1:-1;15827:19:1;;;15859:5;;15715:159;15906:34;15931:8;15925:4;15906:34;:::i;:::-;15976:6;15972:1;15968:6;15964:19;15955:7;15952:32;15949:58;;;15987:18;;:::i;:::-;16025:20;;15245:806;-1:-1:-1;;;15245:806:1:o;16056:140::-;16114:5;16143:47;16184:4;16174:8;16170:19;16164:4;16143:47;:::i;16545:125::-;16610:9;;;16631:10;;;16628:36;;;16644:18;;:::i;17518:217::-;17558:1;17584;17574:132;;17628:10;17623:3;17619:20;17616:1;17609:31;17663:4;17660:1;17653:15;17691:4;17688:1;17681:15;17574:132;-1:-1:-1;17720:9:1;;17518:217::o;17740:135::-;17779:3;17800:17;;;17797:43;;17820:18;;:::i;:::-;-1:-1:-1;17867:1:1;17856:13;;17740:135::o
Swarm Source
ipfs://8800cec55ad5c6d3e154b69f4361f030900541a8da122bffa1e45fc0b1bf75e6
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 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.