Feature Tip: Add private address tag to any address under My Name Tag !
Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 462 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Claim | 22627233 | 4 days ago | IN | 0 ETH | 0.00014869 | ||||
Claim | 22614872 | 6 days ago | IN | 0 ETH | 0.00009521 | ||||
Claim | 22611588 | 6 days ago | IN | 0 ETH | 0.0002017 | ||||
Claim | 22610264 | 6 days ago | IN | 0 ETH | 0.00015135 | ||||
Claim | 22601707 | 8 days ago | IN | 0 ETH | 0.0001223 | ||||
Claim | 22574404 | 11 days ago | IN | 0 ETH | 0.00134316 | ||||
Claim | 22570522 | 12 days ago | IN | 0 ETH | 0.00010385 | ||||
Claim | 22569520 | 12 days ago | IN | 0 ETH | 0.00015294 | ||||
Claim | 22568218 | 12 days ago | IN | 0 ETH | 0.00037427 | ||||
Claim | 22564448 | 13 days ago | IN | 0 ETH | 0.00008438 | ||||
Claim | 22560421 | 13 days ago | IN | 0 ETH | 0.00017303 | ||||
Claim | 22559332 | 14 days ago | IN | 0 ETH | 0.00007878 | ||||
Claim | 22559264 | 14 days ago | IN | 0 ETH | 0.00007974 | ||||
Claim | 22558647 | 14 days ago | IN | 0 ETH | 0.00008685 | ||||
Claim | 22554632 | 14 days ago | IN | 0 ETH | 0.00010453 | ||||
Claim | 22551181 | 15 days ago | IN | 0 ETH | 0.00010271 | ||||
Claim | 22550674 | 15 days ago | IN | 0 ETH | 0.00003494 | ||||
Claim | 22550673 | 15 days ago | IN | 0 ETH | 0.00010667 | ||||
Claim | 22550067 | 15 days ago | IN | 0 ETH | 0.00008772 | ||||
Claim | 22549365 | 15 days ago | IN | 0 ETH | 0.00011128 | ||||
Claim | 22549202 | 15 days ago | IN | 0 ETH | 0.0002705 | ||||
Claim | 22548558 | 15 days ago | IN | 0 ETH | 0.00012701 | ||||
Claim | 22545165 | 16 days ago | IN | 0 ETH | 0.00034523 | ||||
Claim | 22544206 | 16 days ago | IN | 0 ETH | 0.00018459 | ||||
Claim | 22544174 | 16 days ago | IN | 0 ETH | 0.00012178 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ClaimToken
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2025-02-26 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts (last updated v4.9.4) (utils/Context.sol) pragma solidity ^0.8.0; /** * @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/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @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. * * By default, the owner account will be the one that deploys the contract. 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; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @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 { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @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 { require(newOwner != address(0), "Ownable: new owner is the zero address"); _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 v4.9.0) (access/Ownable2Step.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. 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(); require(pendingOwner() == sender, "Ownable2Step: caller is not the new owner"); _transferOwnership(sender); } } // File: @openzeppelin/contracts/utils/math/Math.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/math/Math.sol) pragma solidity ^0.8.0; /** * @dev Standard math utilities missing in the Solidity language. */ library Math { enum Rounding { Down, // Toward negative infinity Up, // Toward infinity Zero // Toward zero } /** * @dev Returns the largest of two numbers. */ function max(uint256 a, uint256 b) internal pure returns (uint256) { return a > b ? a : b; } /** * @dev Returns the smallest of two numbers. */ function min(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } /** * @dev Returns the average of two numbers. The result is rounded towards * zero. */ function average(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b) / 2 can overflow. return (a & b) + (a ^ b) / 2; } /** * @dev Returns the ceiling of the division of two numbers. * * This differs from standard division with `/` in that it rounds up instead * of rounding down. */ function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) { // (a + b - 1) / b can overflow on addition, so we distribute. return a == 0 ? 0 : (a - 1) / b + 1; } /** * @notice Calculates floor(x * y / denominator) with full precision. Throws if result overflows a uint256 or denominator == 0 * @dev Original credit to Remco Bloemen under MIT license (https://xn--2-umb.com/21/muldiv) * with further edits by Uniswap Labs also under MIT license. */ function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) { unchecked { // 512-bit multiply [prod1 prod0] = x * y. Compute the product mod 2^256 and mod 2^256 - 1, then use // use the Chinese Remainder Theorem to reconstruct the 512 bit result. The result is stored in two 256 // variables such that product = prod1 * 2^256 + prod0. uint256 prod0; // Least significant 256 bits of the product uint256 prod1; // Most significant 256 bits of the product assembly { let mm := mulmod(x, y, not(0)) prod0 := mul(x, y) prod1 := sub(sub(mm, prod0), lt(mm, prod0)) } // Handle non-overflow cases, 256 by 256 division. if (prod1 == 0) { // Solidity will revert if denominator == 0, unlike the div opcode on its own. // The surrounding unchecked block does not change this fact. // See https://docs.soliditylang.org/en/latest/control-structures.html#checked-or-unchecked-arithmetic. return prod0 / denominator; } // Make sure the result is less than 2^256. Also prevents denominator == 0. require(denominator > prod1, "Math: mulDiv overflow"); /////////////////////////////////////////////// // 512 by 256 division. /////////////////////////////////////////////// // Make division exact by subtracting the remainder from [prod1 prod0]. uint256 remainder; assembly { // Compute remainder using mulmod. remainder := mulmod(x, y, denominator) // Subtract 256 bit number from 512 bit number. prod1 := sub(prod1, gt(remainder, prod0)) prod0 := sub(prod0, remainder) } // Factor powers of two out of denominator and compute largest power of two divisor of denominator. Always >= 1. // See https://cs.stackexchange.com/q/138556/92363. // Does not overflow because the denominator cannot be zero at this stage in the function. uint256 twos = denominator & (~denominator + 1); assembly { // Divide denominator by twos. denominator := div(denominator, twos) // Divide [prod1 prod0] by twos. prod0 := div(prod0, twos) // Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one. twos := add(div(sub(0, twos), twos), 1) } // Shift in bits from prod1 into prod0. prod0 |= prod1 * twos; // Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such // that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for // four bits. That is, denominator * inv = 1 mod 2^4. uint256 inverse = (3 * denominator) ^ 2; // Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also works // in modular arithmetic, doubling the correct bits in each step. inverse *= 2 - denominator * inverse; // inverse mod 2^8 inverse *= 2 - denominator * inverse; // inverse mod 2^16 inverse *= 2 - denominator * inverse; // inverse mod 2^32 inverse *= 2 - denominator * inverse; // inverse mod 2^64 inverse *= 2 - denominator * inverse; // inverse mod 2^128 inverse *= 2 - denominator * inverse; // inverse mod 2^256 // Because the division is now exact we can divide by multiplying with the modular inverse of denominator. // This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is // less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1 // is no longer required. result = prod0 * inverse; return result; } } /** * @notice Calculates x * y / denominator with full precision, following the selected rounding direction. */ function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) { uint256 result = mulDiv(x, y, denominator); if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) { result += 1; } return result; } /** * @dev Returns the square root of a number. If the number is not a perfect square, the value is rounded down. * * Inspired by Henry S. Warren, Jr.'s "Hacker's Delight" (Chapter 11). */ function sqrt(uint256 a) internal pure returns (uint256) { if (a == 0) { return 0; } // For our first guess, we get the biggest power of 2 which is smaller than the square root of the target. // // We know that the "msb" (most significant bit) of our target number `a` is a power of 2 such that we have // `msb(a) <= a < 2*msb(a)`. This value can be written `msb(a)=2**k` with `k=log2(a)`. // // This can be rewritten `2**log2(a) <= a < 2**(log2(a) + 1)` // → `sqrt(2**k) <= sqrt(a) < sqrt(2**(k+1))` // → `2**(k/2) <= sqrt(a) < 2**((k+1)/2) <= 2**(k/2 + 1)` // // Consequently, `2**(log2(a) / 2)` is a good first approximation of `sqrt(a)` with at least 1 correct bit. uint256 result = 1 << (log2(a) >> 1); // At this point `result` is an estimation with one bit of precision. We know the true value is a uint128, // since it is the square root of a uint256. Newton's method converges quadratically (precision doubles at // every iteration). We thus need at most 7 iteration to turn our partial result with one bit of precision // into the expected uint128 result. unchecked { result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; result = (result + a / result) >> 1; return min(result, a / result); } } /** * @notice Calculates sqrt(a), following the selected rounding direction. */ function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = sqrt(a); return result + (rounding == Rounding.Up && result * result < a ? 1 : 0); } } /** * @dev Return the log in base 2, rounded down, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 128; } if (value >> 64 > 0) { value >>= 64; result += 64; } if (value >> 32 > 0) { value >>= 32; result += 32; } if (value >> 16 > 0) { value >>= 16; result += 16; } if (value >> 8 > 0) { value >>= 8; result += 8; } if (value >> 4 > 0) { value >>= 4; result += 4; } if (value >> 2 > 0) { value >>= 2; result += 2; } if (value >> 1 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 2, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log2(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log2(value); return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0); } } /** * @dev Return the log in base 10, rounded down, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >= 10 ** 64) { value /= 10 ** 64; result += 64; } if (value >= 10 ** 32) { value /= 10 ** 32; result += 32; } if (value >= 10 ** 16) { value /= 10 ** 16; result += 16; } if (value >= 10 ** 8) { value /= 10 ** 8; result += 8; } if (value >= 10 ** 4) { value /= 10 ** 4; result += 4; } if (value >= 10 ** 2) { value /= 10 ** 2; result += 2; } if (value >= 10 ** 1) { result += 1; } } return result; } /** * @dev Return the log in base 10, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log10(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log10(value); return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0); } } /** * @dev Return the log in base 256, rounded down, of a positive value. * Returns 0 if given 0. * * Adding one to the result gives the number of pairs of hex symbols needed to represent `value` as a hex string. */ function log256(uint256 value) internal pure returns (uint256) { uint256 result = 0; unchecked { if (value >> 128 > 0) { value >>= 128; result += 16; } if (value >> 64 > 0) { value >>= 64; result += 8; } if (value >> 32 > 0) { value >>= 32; result += 4; } if (value >> 16 > 0) { value >>= 16; result += 2; } if (value >> 8 > 0) { result += 1; } } return result; } /** * @dev Return the log in base 256, following the selected rounding direction, of a positive value. * Returns 0 if given 0. */ function log256(uint256 value, Rounding rounding) internal pure returns (uint256) { unchecked { uint256 result = log256(value); return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0); } } } // File: @openzeppelin/contracts/utils/math/SignedMath.sol // OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SignedMath.sol) pragma solidity ^0.8.0; /** * @dev Standard signed math utilities missing in the Solidity language. */ library SignedMath { /** * @dev Returns the largest of two signed numbers. */ function max(int256 a, int256 b) internal pure returns (int256) { return a > b ? a : b; } /** * @dev Returns the smallest of two signed numbers. */ function min(int256 a, int256 b) internal pure returns (int256) { return a < b ? a : b; } /** * @dev Returns the average of two signed numbers without overflow. * The result is rounded towards zero. */ function average(int256 a, int256 b) internal pure returns (int256) { // Formula from the book "Hacker's Delight" int256 x = (a & b) + ((a ^ b) >> 1); return x + (int256(uint256(x) >> 255) & (a ^ b)); } /** * @dev Returns the absolute unsigned value of a signed value. */ function abs(int256 n) internal pure returns (uint256) { unchecked { // must be unchecked in order to support `n = type(int256).min` return uint256(n >= 0 ? n : -n); } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { unchecked { uint256 length = Math.log10(value) + 1; string memory buffer = new string(length); uint256 ptr; /// @solidity memory-safe-assembly assembly { ptr := add(buffer, add(32, length)) } while (true) { ptr--; /// @solidity memory-safe-assembly assembly { mstore8(ptr, byte(mod(value, 10), _SYMBOLS)) } value /= 10; if (value == 0) break; } return buffer; } } /** * @dev Converts a `int256` to its ASCII `string` decimal representation. */ function toString(int256 value) internal pure returns (string memory) { return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value)))); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { unchecked { return toHexString(value, Math.log256(value) + 1); } } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } /** * @dev Returns true if the two strings are equal. */ function equal(string memory a, string memory b) internal pure returns (bool) { return keccak256(bytes(a)) == keccak256(bytes(b)); } } // File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol // OpenZeppelin Contracts (last updated v4.9.0) (utils/cryptography/ECDSA.sol) pragma solidity ^0.8.0; /** * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations. * * These functions can be used to verify that a message was signed by the holder * of the private keys of a given address. */ library ECDSA { enum RecoverError { NoError, InvalidSignature, InvalidSignatureLength, InvalidSignatureS, InvalidSignatureV // Deprecated in v4.8 } function _throwError(RecoverError error) private pure { if (error == RecoverError.NoError) { return; // no error: do nothing } else if (error == RecoverError.InvalidSignature) { revert("ECDSA: invalid signature"); } else if (error == RecoverError.InvalidSignatureLength) { revert("ECDSA: invalid signature length"); } else if (error == RecoverError.InvalidSignatureS) { revert("ECDSA: invalid signature 's' value"); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature` or error string. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. * * Documentation for signature generation: * - with https://web3js.readthedocs.io/en/v1.3.4/web3-eth-accounts.html#sign[Web3.js] * - with https://docs.ethers.io/v5/api/signer/#Signer-signMessage[ethers] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) { if (signature.length == 65) { bytes32 r; bytes32 s; uint8 v; // ecrecover takes the signature parameters, and the only way to get them // currently is to use assembly. /// @solidity memory-safe-assembly assembly { r := mload(add(signature, 0x20)) s := mload(add(signature, 0x40)) v := byte(0, mload(add(signature, 0x60))) } return tryRecover(hash, v, r, s); } else { return (address(0), RecoverError.InvalidSignatureLength); } } /** * @dev Returns the address that signed a hashed message (`hash`) with * `signature`. This address can then be used for verification purposes. * * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures: * this function rejects them by requiring the `s` value to be in the lower * half order, and the `v` value to be either 27 or 28. * * IMPORTANT: `hash` _must_ be the result of a hash operation for the * verification to be secure: it is possible to craft signatures that * recover to arbitrary addresses for non-hashed data. A safe way to ensure * this is by receiving a hash of the original message (which may otherwise * be too long), and then calling {toEthSignedMessageHash} on it. */ function recover(bytes32 hash, bytes memory signature) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, signature); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `r` and `vs` short-signature fields separately. * * See https://eips.ethereum.org/EIPS/eip-2098[EIP-2098 short signatures] * * _Available since v4.3._ */ function tryRecover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address, RecoverError) { bytes32 s = vs & bytes32(0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff); uint8 v = uint8((uint256(vs) >> 255) + 27); return tryRecover(hash, v, r, s); } /** * @dev Overload of {ECDSA-recover} that receives the `r and `vs` short-signature fields separately. * * _Available since v4.2._ */ function recover(bytes32 hash, bytes32 r, bytes32 vs) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, r, vs); _throwError(error); return recovered; } /** * @dev Overload of {ECDSA-tryRecover} that receives the `v`, * `r` and `s` signature fields separately. * * _Available since v4.3._ */ function tryRecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address, RecoverError) { // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines // the valid range for s in (301): 0 < s < secp256k1n ÷ 2 + 1, and for v in (302): v ∈ {27, 28}. Most // signatures from current libraries generate a unique signature with an s-value in the lower half order. // // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept // these malleable signatures as well. if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) { return (address(0), RecoverError.InvalidSignatureS); } // If the signature is valid (and not malleable), return the signer address address signer = ecrecover(hash, v, r, s); if (signer == address(0)) { return (address(0), RecoverError.InvalidSignature); } return (signer, RecoverError.NoError); } /** * @dev Overload of {ECDSA-recover} that receives the `v`, * `r` and `s` signature fields separately. */ function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) { (address recovered, RecoverError error) = tryRecover(hash, v, r, s); _throwError(error); return recovered; } /** * @dev Returns an Ethereum Signed Message, created from a `hash`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32 message) { // 32 is the length in bytes of hash, // enforced by the type signature above /// @solidity memory-safe-assembly assembly { mstore(0x00, "\x19Ethereum Signed Message:\n32") mstore(0x1c, hash) message := keccak256(0x00, 0x3c) } } /** * @dev Returns an Ethereum Signed Message, created from `s`. This * produces hash corresponding to the one signed with the * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`] * JSON-RPC method as part of EIP-191. * * See {recover}. */ function toEthSignedMessageHash(bytes memory s) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n", Strings.toString(s.length), s)); } /** * @dev Returns an Ethereum Signed Typed Data, created from a * `domainSeparator` and a `structHash`. This produces hash corresponding * to the one signed with the * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`] * JSON-RPC method as part of EIP-712. * * See {recover}. */ function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32 data) { /// @solidity memory-safe-assembly assembly { let ptr := mload(0x40) mstore(ptr, "\x19\x01") mstore(add(ptr, 0x02), domainSeparator) mstore(add(ptr, 0x22), structHash) data := keccak256(ptr, 0x42) } } /** * @dev Returns an Ethereum Signed Data with intended validator, created from a * `validator` and `data` according to the version 0 of EIP-191. * * See {recover}. */ function toDataWithIntendedValidatorHash(address validator, bytes memory data) internal pure returns (bytes32) { return keccak256(abi.encodePacked("\x19\x00", validator, data)); } } // File: solmate/src/tokens/ERC20.sol pragma solidity >=0.8.0; /// @notice Modern and gas efficient ERC20 + EIP-2612 implementation. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/tokens/ERC20.sol) /// @author Modified from Uniswap (https://github.com/Uniswap/uniswap-v2-core/blob/master/contracts/UniswapV2ERC20.sol) /// @dev Do not manually set balances without updating totalSupply, as the sum of all user balances must not exceed it. abstract contract ERC20 { /*////////////////////////////////////////////////////////////// EVENTS //////////////////////////////////////////////////////////////*/ event Transfer(address indexed from, address indexed to, uint256 amount); event Approval(address indexed owner, address indexed spender, uint256 amount); /*////////////////////////////////////////////////////////////// METADATA STORAGE //////////////////////////////////////////////////////////////*/ string public name; string public symbol; uint8 public immutable decimals; /*////////////////////////////////////////////////////////////// ERC20 STORAGE //////////////////////////////////////////////////////////////*/ uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; /*////////////////////////////////////////////////////////////// EIP-2612 STORAGE //////////////////////////////////////////////////////////////*/ uint256 internal immutable INITIAL_CHAIN_ID; bytes32 internal immutable INITIAL_DOMAIN_SEPARATOR; mapping(address => uint256) public nonces; /*////////////////////////////////////////////////////////////// CONSTRUCTOR //////////////////////////////////////////////////////////////*/ constructor( string memory _name, string memory _symbol, uint8 _decimals ) { name = _name; symbol = _symbol; decimals = _decimals; INITIAL_CHAIN_ID = block.chainid; INITIAL_DOMAIN_SEPARATOR = computeDomainSeparator(); } /*////////////////////////////////////////////////////////////// ERC20 LOGIC //////////////////////////////////////////////////////////////*/ function approve(address spender, uint256 amount) public virtual returns (bool) { allowance[msg.sender][spender] = amount; emit Approval(msg.sender, spender, amount); return true; } function transfer(address to, uint256 amount) public virtual returns (bool) { balanceOf[msg.sender] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(msg.sender, to, amount); return true; } function transferFrom( address from, address to, uint256 amount ) public virtual returns (bool) { uint256 allowed = allowance[from][msg.sender]; // Saves gas for limited approvals. if (allowed != type(uint256).max) allowance[from][msg.sender] = allowed - amount; balanceOf[from] -= amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(from, to, amount); return true; } /*////////////////////////////////////////////////////////////// EIP-2612 LOGIC //////////////////////////////////////////////////////////////*/ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) public virtual { require(deadline >= block.timestamp, "PERMIT_DEADLINE_EXPIRED"); // Unchecked because the only math done is incrementing // the owner's nonce which cannot realistically overflow. unchecked { address recoveredAddress = ecrecover( keccak256( abi.encodePacked( "\x19\x01", DOMAIN_SEPARATOR(), keccak256( abi.encode( keccak256( "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)" ), owner, spender, value, nonces[owner]++, deadline ) ) ) ), v, r, s ); require(recoveredAddress != address(0) && recoveredAddress == owner, "INVALID_SIGNER"); allowance[recoveredAddress][spender] = value; } emit Approval(owner, spender, value); } function DOMAIN_SEPARATOR() public view virtual returns (bytes32) { return block.chainid == INITIAL_CHAIN_ID ? INITIAL_DOMAIN_SEPARATOR : computeDomainSeparator(); } function computeDomainSeparator() internal view virtual returns (bytes32) { return keccak256( abi.encode( keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), keccak256(bytes(name)), keccak256("1"), block.chainid, address(this) ) ); } /*////////////////////////////////////////////////////////////// INTERNAL MINT/BURN LOGIC //////////////////////////////////////////////////////////////*/ function _mint(address to, uint256 amount) internal virtual { totalSupply += amount; // Cannot overflow because the sum of all user // balances can't exceed the max uint256 value. unchecked { balanceOf[to] += amount; } emit Transfer(address(0), to, amount); } function _burn(address from, uint256 amount) internal virtual { balanceOf[from] -= amount; // Cannot underflow because a user's balance // will never be larger than the total supply. unchecked { totalSupply -= amount; } emit Transfer(from, address(0), amount); } } // File: solmate/src/utils/SafeTransferLib.sol pragma solidity >=0.8.0; /// @notice Safe ETH and ERC20 transfer library that gracefully handles missing return values. /// @author Solmate (https://github.com/transmissions11/solmate/blob/main/src/utils/SafeTransferLib.sol) /// @dev Use with caution! Some functions in this library knowingly create dirty bits at the destination of the free memory pointer. library SafeTransferLib { /*////////////////////////////////////////////////////////////// ETH OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferETH(address to, uint256 amount) internal { bool success; /// @solidity memory-safe-assembly assembly { // Transfer the ETH and store if it succeeded or not. success := call(gas(), to, amount, 0, 0, 0, 0) } require(success, "ETH_TRANSFER_FAILED"); } /*////////////////////////////////////////////////////////////// ERC20 OPERATIONS //////////////////////////////////////////////////////////////*/ function safeTransferFrom( ERC20 token, address from, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x23b872dd00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(from, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "from" argument. mstore(add(freeMemoryPointer, 36), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 68), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. // We use 100 because the length of our calldata totals up like so: 4 + 32 * 3. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. success := call(gas(), token, 0, freeMemoryPointer, 100, 0, 32) // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data and token has code. if and(iszero(and(eq(mload(0), 1), gt(returndatasize(), 31))), success) { success := iszero(or(iszero(extcodesize(token)), returndatasize())) } } require(success, "TRANSFER_FROM_FAILED"); } function safeTransfer( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0xa9059cbb00000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. success := call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data and token has code. if and(iszero(and(eq(mload(0), 1), gt(returndatasize(), 31))), success) { success := iszero(or(iszero(extcodesize(token)), returndatasize())) } } require(success, "TRANSFER_FAILED"); } function safeApprove( ERC20 token, address to, uint256 amount ) internal { bool success; /// @solidity memory-safe-assembly assembly { // Get a pointer to some free memory. let freeMemoryPointer := mload(0x40) // Write the abi-encoded calldata into memory, beginning with the function selector. mstore(freeMemoryPointer, 0x095ea7b300000000000000000000000000000000000000000000000000000000) mstore(add(freeMemoryPointer, 4), and(to, 0xffffffffffffffffffffffffffffffffffffffff)) // Append and mask the "to" argument. mstore(add(freeMemoryPointer, 36), amount) // Append the "amount" argument. Masking not required as it's a full 32 byte type. // We use 68 because the length of our calldata totals up like so: 4 + 32 * 2. // We use 0 and 32 to copy up to 32 bytes of return data into the scratch space. success := call(gas(), token, 0, freeMemoryPointer, 68, 0, 32) // Set success to whether the call reverted, if not we check it either // returned exactly 1 (can't just be non-zero data), or had no return data and token has code. if and(iszero(and(eq(mload(0), 1), gt(returndatasize(), 31))), success) { success := iszero(or(iszero(extcodesize(token)), returndatasize())) } } require(success, "APPROVE_FAILED"); } } // File: contracts/OIK_claim.sol pragma solidity 0.8.19; /** * @title ClaimToken * @dev Space Nation claim tokens * @author @SpaceNation * @notice Space Nation claim tokens */ contract ClaimToken is Ownable2Step { using ECDSA for bytes32; address public token; uint64 public thresholds; uint8 public decimals; uint8 public signumber; bool private checkthresholds; mapping(address => uint64) public nonces; mapping(address => bool) private signers; mapping(bytes => bool) private usedsignatures; mapping(address => bool) public isBlackListed; event Claim( address token, address sender, uint64 nonce, uint64 amount, bytes sig ); event Transfer(address token, address[] player, uint64[] amount); error InvalidSignature(); error InvalidArray(); error DuplicatedSig(); error InvalidAmount(); constructor( address[] memory _signers, address _token, uint64 _thresholds, uint8 _decimals, uint8 _signumber ) { require(_token != address(0)); require(_decimals < 19); require(_thresholds != 0); require(_signumber > 1); address signer; uint256 len = _signers.length; unchecked { for (uint256 i = 0; i < len; ++i) { signer = _signers[i]; require(signer != address(0)); signers[signer] = true; } } token = _token; thresholds = _thresholds; decimals = _decimals; signumber = _signumber; } /** * @notice Only the contract owner can airdrop tokens * @param wallet. The token wallet address. * @param players. Array of airdrop addresses. * @param amounts. Array of airdrop amounts corresponding to each address. */ function transfer( address wallet, address[] calldata players, uint64[] calldata amounts ) external onlyOwner { uint256 len = players.length; if (amounts.length != len) { revert InvalidArray(); } uint64 amount; address player; unchecked { for (uint256 i = 0; i < len; ++i) { amount = amounts[i]; player = players[i]; _transfer(wallet, player, amount); } } emit Transfer(token, players, amounts); } /** * @notice Users claim tokens through a valid signature. * @param wallet. The token wallet address. * @param amount. Amount of tokens claimed by the user. * @param sig. Signature generated off-chain based on the user's claim information. */ function claim( address wallet, uint64 amount, bytes memory sig ) external { if (checkthresholds && amount > thresholds) { revert InvalidAmount(); } address sender = _msgSender(); assertValidCosign(sender, wallet, amount, sig); uint64 nonce = nonces[sender]; ++nonces[sender]; _transfer(wallet, sender, amount); emit Claim(token, sender, nonce, amount, sig); } /** * @notice Users claim tokens through some signatures. * @param wallet. The token wallet addresses. * @param amount. Amount of tokens claimed by the user. * @param sigs. Signatures generated off-chain based on the user's claim information. */ function bigClaim( address wallet, uint64 amount, bytes[] calldata sigs ) external { if (signumber != sigs.length) { revert InvalidArray(); } if (amount < thresholds) { revert InvalidAmount(); } address sender = _msgSender(); bytes memory sig; bytes memory siglog; uint64 nonce = nonces[sender]; unchecked { for (uint256 i = 0; i < signumber; ++i) { sig = sigs[i]; siglog = bytes.concat(siglog, sig); assertValidCosign(sender, wallet, amount, sig); } } ++nonces[sender]; _transfer(wallet, sender, amount); emit Claim(token, sender, nonce, amount, siglog); } function _transfer( address from, address to, uint64 amount ) private { SafeTransferLib.safeTransferFrom( ERC20(token), from, to, amount * 10**decimals ); } function _chainID() private view returns (uint64) { uint64 chainID; assembly { chainID := chainid() } return chainID; } function assertValidCosign( address sender, address wallet, uint64 amount, bytes memory sig ) private { require(!isBlackListed[sender]); if (usedsignatures[sig]) { revert DuplicatedSig(); } bytes32 hash = keccak256( abi.encodePacked( amount, nonces[sender], _chainID(), token, sender, wallet, address(this) ) ); matchSigner(hash, sig); usedsignatures[sig] = true; } function matchSigner(bytes32 hash, bytes memory signature) private view { address _signer = hash.toEthSignedMessageHash().recover(signature); if (!signers[_signer]) { revert InvalidSignature(); } } /** * @notice Only the contract owner address can configure the token address and decimals. * @param _token. Token address. * @param _decimals. Token decimals. */ function setToken(address _token, uint8 _decimals) external onlyOwner { require(_token != address(0)); require(_decimals < 19); token = _token; decimals = _decimals; } /** * @notice Only the contract owner can add addresses to the blacklist. * @param _evilUsers. Token address. */ function addBlackList(address[] calldata _evilUsers) external onlyOwner { uint256 len = _evilUsers.length; address evilUser; unchecked { for (uint256 i = 0; i < len; ++i) { evilUser = _evilUsers[i]; isBlackListed[evilUser] = true; } } } /** * @notice Only the contract owner can remove addresses from the blacklist. * @param _clearedUsers. Token address. */ function removeBlackList(address[] calldata _clearedUsers) external onlyOwner { uint256 len = _clearedUsers.length; address clearUser; unchecked { for (uint256 i = 0; i < len; ++i) { clearUser = _clearedUsers[i]; isBlackListed[clearUser] = false; } } } /** * @notice Only the contract owner can invalidate specific signatures. * @param signatures. Signatures. */ function invalidateUnusedSignature(bytes[] calldata signatures) external onlyOwner { uint256 len = signatures.length; bytes memory evilSignature; unchecked { for (uint256 i = 0; i < len; ++i) { evilSignature = signatures[i]; usedsignatures[evilSignature] = true; } } } /** * @notice Only the contract owner can increment a batch of users' nonce values to invalidate old signatures. * @param addrs. Player's addresses. */ function invalidateUnusedNonce(address[] calldata addrs) external onlyOwner { uint256 len = addrs.length; address addr; unchecked { for (uint256 i = 0; i < len; ++i) { addr = addrs[i]; ++nonces[addr]; } } } /** * @notice Sets signatures number. */ function setSigNumber(uint8 _signumber) external onlyOwner { require(_signumber > 1); signumber = _signumber; } /** * @notice Sets threshold. */ function setThresholds(uint64 _thresholds) external onlyOwner { require(_thresholds != 0); thresholds = _thresholds; } /** * @notice Sets threshold switch. */ function setThresholds(bool flag) external onlyOwner { checkthresholds = flag; } /** * @notice Sets signer. */ function setSigner(address _signer, bool flag) external onlyOwner { signers[_signer] = flag; } /** * @notice Refund of tokens mistakenly transferred. */ function withdrawsToken(address to) external onlyOwner { uint256 balance = ERC20(token).balanceOf(address(this)); SafeTransferLib.safeTransfer(ERC20(token), to, balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"_signers","type":"address[]"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint64","name":"_thresholds","type":"uint64"},{"internalType":"uint8","name":"_decimals","type":"uint8"},{"internalType":"uint8","name":"_signumber","type":"uint8"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"DuplicatedSig","type":"error"},{"inputs":[],"name":"InvalidAmount","type":"error"},{"inputs":[],"name":"InvalidArray","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint64","name":"nonce","type":"uint64"},{"indexed":false,"internalType":"uint64","name":"amount","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"sig","type":"bytes"}],"name":"Claim","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":"token","type":"address"},{"indexed":false,"internalType":"address[]","name":"player","type":"address[]"},{"indexed":false,"internalType":"uint64[]","name":"amount","type":"uint64[]"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"acceptOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_evilUsers","type":"address[]"}],"name":"addBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes[]","name":"sigs","type":"bytes[]"}],"name":"bigClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint64","name":"amount","type":"uint64"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"invalidateUnusedNonce","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes[]","name":"signatures","type":"bytes[]"}],"name":"invalidateUnusedSignature","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_clearedUsers","type":"address[]"}],"name":"removeBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_signumber","type":"uint8"}],"name":"setSigNumber","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_signer","type":"address"},{"internalType":"bool","name":"flag","type":"bool"}],"name":"setSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"flag","type":"bool"}],"name":"setThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint64","name":"_thresholds","type":"uint64"}],"name":"setThresholds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint8","name":"_decimals","type":"uint8"}],"name":"setToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"signumber","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"thresholds","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"address[]","name":"players","type":"address[]"},{"internalType":"uint64[]","name":"amounts","type":"uint64[]"}],"name":"transfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawsToken","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200341a3803806200341a8339818101604052810190620000379190620005c0565b620000576200004b6200024a60201b60201c565b6200025260201b60201c565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036200009157600080fd5b60138260ff1610620000a257600080fd5b60008367ffffffffffffffff1603620000ba57600080fd5b60018160ff1611620000cb57600080fd5b6000808651905060005b818110156200019c57878181518110620000f457620000f362000667565b5b60200260200101519250600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200013857600080fd5b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050620000d5565b5085600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084600260146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836002601c6101000a81548160ff021916908360ff160217905550826002601d6101000a81548160ff021916908360ff1602179055505050505050505062000696565b600033905090565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905562000288816200028b60201b60201c565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003b38262000368565b810181811067ffffffffffffffff82111715620003d557620003d462000379565b5b80604052505050565b6000620003ea6200034f565b9050620003f88282620003a8565b919050565b600067ffffffffffffffff8211156200041b576200041a62000379565b5b602082029050602081019050919050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200045e8262000431565b9050919050565b620004708162000451565b81146200047c57600080fd5b50565b600081519050620004908162000465565b92915050565b6000620004ad620004a784620003fd565b620003de565b90508083825260208201905060208402830185811115620004d357620004d26200042c565b5b835b81811015620005005780620004eb88826200047f565b845260208401935050602081019050620004d5565b5050509392505050565b600082601f83011262000522576200052162000363565b5b81516200053484826020860162000496565b91505092915050565b600067ffffffffffffffff82169050919050565b6200055c816200053d565b81146200056857600080fd5b50565b6000815190506200057c8162000551565b92915050565b600060ff82169050919050565b6200059a8162000582565b8114620005a657600080fd5b50565b600081519050620005ba816200058f565b92915050565b600080600080600060a08688031215620005df57620005de62000359565b5b600086015167ffffffffffffffff8111156200060057620005ff6200035e565b5b6200060e888289016200050a565b955050602062000621888289016200047f565b945050604062000634888289016200056b565b93505060606200064788828901620005a9565b92505060806200065a88828901620005a9565b9150509295509295909350565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b612d7480620006a66000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80639bf41135116100c3578063d8f5bbae1161007c578063d8f5bbae1461034d578063e30c397814610369578063e47d606014610387578063e7415c76146103b7578063f2fde38b146103d3578063fc0c546a146103ef57610158565b80639bf41135146102a35780639c8a8da8146102bf578063c4767b95146102db578063c97371cf146102f7578063cda43b3a14610313578063d338faf31461033157610158565b806379ba50971161011557806379ba5097146101f55780637c505532146101ff5780637ecebe001461021d5780638da5cb5b1461024d5780639739d6521461026b578063988cd1391461028757610158565b806327cf716d1461015d578063313ce5671461017957806331cb610514610197578063715018a6146101b35780637456ef7a146101bd57806379b49c67146101d9575b600080fd5b61017760048036038101906101729190611b09565b61040d565b005b610181610443565b60405161018e9190611b45565b60405180910390f35b6101b160048036038101906101ac9190611bf6565b610456565b005b6101bb6104b9565b005b6101d760048036038101906101d29190611cdb565b6104cd565b005b6101f360048036038101906101ee9190611e90565b6107a4565b005b6101fd610988565b005b610207610a15565b6040516102149190611b45565b60405180910390f35b61023760048036038101906102329190611eff565b610a28565b6040516102449190611f3b565b60405180910390f35b610255610a4f565b6040516102629190611f65565b60405180910390f35b61028560048036038101906102809190611f80565b610a78565b005b6102a1600480360381019061029c9190611fad565b610a9d565b005b6102bd60048036038101906102b89190612030565b610ae8565b005b6102d960048036038101906102d491906120d3565b610b9c565b005b6102f560048036038101906102f09190612168565b610ccc565b005b610311600480360381019061030c9190612030565b610d7d565b005b61031b610e58565b6040516103289190611f3b565b60405180910390f35b61034b60048036038101906103469190612030565b610e72565b005b61036760048036038101906103629190611eff565b610f26565b005b610371610fff565b60405161037e9190611f65565b60405180910390f35b6103a1600480360381019061039c9190611eff565b611029565b6040516103ae91906121b7565b60405180910390f35b6103d160048036038101906103cc91906121d2565b611049565b005b6103ed60048036038101906103e89190611eff565b611119565b005b6103f76111c6565b6040516104049190611f65565b60405180910390f35b6104156111ec565b60018160ff161161042557600080fd5b806002601d6101000a81548160ff021916908360ff16021790555050565b6002601c9054906101000a900460ff1681565b61045e6111ec565b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6104c16111ec565b6104cb600061126a565b565b818190506002601d9054906101000a900460ff1660ff161461051b576040517f1ec5aa5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260149054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16101561057f576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061058961129b565b90506060806000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060005b6002601d9054906101000a900460ff1660ff168110156106a8578686828181106106165761061561221f565b5b9050602002810190610628919061225d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505093508284604051602001610680929190612331565b604051602081830303815290604052925061069d858a8a876112a3565b8060010190506105e9565b50600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900467ffffffffffffffff1661070890612384565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550610739888589611458565b7f2f903e8a97bcbce0bc241b7da33692f56224915bec428d32019a8dceb04bd86b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685838a866040516107929594939291906123fe565b60405180910390a15050505050505050565b6002601e9054906101000a900460ff1680156107e95750600260149054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff16115b15610820576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061082a61129b565b9050610838818585856112a3565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff169050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900467ffffffffffffffff166108ef90612384565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550610920858386611458565b7f2f903e8a97bcbce0bc241b7da33692f56224915bec428d32019a8dceb04bd86b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838387876040516109799594939291906123fe565b60405180910390a15050505050565b600061099261129b565b90508073ffffffffffffffffffffffffffffffffffffffff166109b3610fff565b73ffffffffffffffffffffffffffffffffffffffff1614610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a00906124db565b60405180910390fd5b610a128161126a565b50565b6002601d9054906101000a900460ff1681565b60036020528060005260406000206000915054906101000a900467ffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a806111ec565b806002601e6101000a81548160ff02191690831515021790555050565b610aa56111ec565b60008167ffffffffffffffff1603610abc57600080fd5b80600260146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b610af06111ec565b6000828290509050600080600090505b82811015610b9557848482818110610b1b57610b1a61221f565b5b9050602002016020810190610b309190611eff565b91506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050610b00565b5050505050565b610ba46111ec565b6000848490509050808383905014610be8576040517f1ec5aa5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060005b83811015610c6057858582818110610c0957610c0861221f565b5b9050602002016020810190610c1e9190611fad565b9250878782818110610c3357610c3261221f565b5b9050602002016020810190610c489190611eff565b9150610c55898385611458565b806001019050610bee565b507f5ead503ea7c90f1c2721d86fb215c83d227c6181f40f670ee0ff861c91b2379d600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688888888604051610cba959493929190612681565b60405180910390a15050505050505050565b610cd46111ec565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d0d57600080fd5b60138160ff1610610d1d57600080fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002601c6101000a81548160ff021916908360ff1602179055505050565b610d856111ec565b6000828290509050600080600090505b82811015610e5157848482818110610db057610daf61221f565b5b9050602002016020810190610dc59190611eff565b9150600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900467ffffffffffffffff1660010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550806001019050610d95565b5050505050565b600260149054906101000a900467ffffffffffffffff1681565b610e7a6111ec565b6000828290509050600080600090505b82811015610f1f57848482818110610ea557610ea461221f565b5b9050602002016020810190610eba9190611eff565b91506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050610e8a565b5050505050565b610f2e6111ec565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f8b9190611f65565b602060405180830381865afa158015610fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcc9190612700565b9050610ffb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683836114bb565b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60066020528060005260406000206000915054906101000a900460ff1681565b6110516111ec565b6000828290509050606060005b82811015611112578484828181106110795761107861221f565b5b905060200281019061108b919061225d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050915060016005836040516110e2919061272d565b908152602001604051809103902060006101000a81548160ff02191690831515021790555080600101905061105e565b5050505050565b6111216111ec565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16611181610a4f565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111f461129b565b73ffffffffffffffffffffffffffffffffffffffff16611212610a4f565b73ffffffffffffffffffffffffffffffffffffffff1614611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90612790565b60405180910390fd5b565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561129881611576565b50565b600033905090565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112fa57600080fd5b60058160405161130a919061272d565b908152602001604051809103902060009054906101000a900460ff161561135d576040517f6036f7f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff166113bc61163a565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888306040516020016113f8979695949392919061282e565b60405160208183030381529060405280519060200120905061141a8183611647565b600160058360405161142c919061272d565b908152602001604051809103902060006101000a81548160ff0219169083151502179055505050505050565b6114b6600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846002601c9054906101000a900460ff16600a61149c91906129e2565b8567ffffffffffffffff166114b19190612a2d565b6116ee565b505050565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152826024820152602060006044836000895af1915081601f3d116001600051141615161561152f573d853b15171591505b5080611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790612abb565b60405180910390fd5b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000804690508091505090565b600061166482611656856117c6565b6117fc90919063ffffffff16565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116e9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60006040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff841660248201528260448201526020600060648360008a5af1915081601f3d116001600051141615161561177e573d863b15171591505b50806117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690612b27565b60405180910390fd5b5050505050565b60007f19457468657265756d205369676e6564204d6573736167653a0a33320000000060005281601c52603c6000209050919050565b600080600061180b8585611823565b9150915061181881611874565b819250505092915050565b60008060418351036118645760008060006020860151925060408601519150606086015160001a9050611858878285856119da565b9450945050505061186d565b60006002915091505b9250929050565b6000600481111561188857611887612b47565b5b81600481111561189b5761189a612b47565b5b03156119d757600160048111156118b5576118b4612b47565b5b8160048111156118c8576118c7612b47565b5b03611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90612bc2565b60405180910390fd5b6002600481111561191c5761191b612b47565b5b81600481111561192f5761192e612b47565b5b0361196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690612c2e565b60405180910390fd5b6003600481111561198357611982612b47565b5b81600481111561199657611995612b47565b5b036119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90612cc0565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611a15576000600391509150611ab3565b600060018787878760405160008152602001604052604051611a3a9493929190612cf9565b6020604051602081039080840390855afa158015611a5c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611aaa57600060019250925050611ab3565b80600092509250505b94509492505050565b6000604051905090565b600080fd5b600080fd5b600060ff82169050919050565b611ae681611ad0565b8114611af157600080fd5b50565b600081359050611b0381611add565b92915050565b600060208284031215611b1f57611b1e611ac6565b5b6000611b2d84828501611af4565b91505092915050565b611b3f81611ad0565b82525050565b6000602082019050611b5a6000830184611b36565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b8b82611b60565b9050919050565b611b9b81611b80565b8114611ba657600080fd5b50565b600081359050611bb881611b92565b92915050565b60008115159050919050565b611bd381611bbe565b8114611bde57600080fd5b50565b600081359050611bf081611bca565b92915050565b60008060408385031215611c0d57611c0c611ac6565b5b6000611c1b85828601611ba9565b9250506020611c2c85828601611be1565b9150509250929050565b600067ffffffffffffffff82169050919050565b611c5381611c36565b8114611c5e57600080fd5b50565b600081359050611c7081611c4a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c9b57611c9a611c76565b5b8235905067ffffffffffffffff811115611cb857611cb7611c7b565b5b602083019150836020820283011115611cd457611cd3611c80565b5b9250929050565b60008060008060608587031215611cf557611cf4611ac6565b5b6000611d0387828801611ba9565b9450506020611d1487828801611c61565b935050604085013567ffffffffffffffff811115611d3557611d34611acb565b5b611d4187828801611c85565b925092505092959194509250565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611d9d82611d54565b810181811067ffffffffffffffff82111715611dbc57611dbb611d65565b5b80604052505050565b6000611dcf611abc565b9050611ddb8282611d94565b919050565b600067ffffffffffffffff821115611dfb57611dfa611d65565b5b611e0482611d54565b9050602081019050919050565b82818337600083830152505050565b6000611e33611e2e84611de0565b611dc5565b905082815260208101848484011115611e4f57611e4e611d4f565b5b611e5a848285611e11565b509392505050565b600082601f830112611e7757611e76611c76565b5b8135611e87848260208601611e20565b91505092915050565b600080600060608486031215611ea957611ea8611ac6565b5b6000611eb786828701611ba9565b9350506020611ec886828701611c61565b925050604084013567ffffffffffffffff811115611ee957611ee8611acb565b5b611ef586828701611e62565b9150509250925092565b600060208284031215611f1557611f14611ac6565b5b6000611f2384828501611ba9565b91505092915050565b611f3581611c36565b82525050565b6000602082019050611f506000830184611f2c565b92915050565b611f5f81611b80565b82525050565b6000602082019050611f7a6000830184611f56565b92915050565b600060208284031215611f9657611f95611ac6565b5b6000611fa484828501611be1565b91505092915050565b600060208284031215611fc357611fc2611ac6565b5b6000611fd184828501611c61565b91505092915050565b60008083601f840112611ff057611fef611c76565b5b8235905067ffffffffffffffff81111561200d5761200c611c7b565b5b60208301915083602082028301111561202957612028611c80565b5b9250929050565b6000806020838503121561204757612046611ac6565b5b600083013567ffffffffffffffff81111561206557612064611acb565b5b61207185828601611fda565b92509250509250929050565b60008083601f84011261209357612092611c76565b5b8235905067ffffffffffffffff8111156120b0576120af611c7b565b5b6020830191508360208202830111156120cc576120cb611c80565b5b9250929050565b6000806000806000606086880312156120ef576120ee611ac6565b5b60006120fd88828901611ba9565b955050602086013567ffffffffffffffff81111561211e5761211d611acb565b5b61212a88828901611fda565b9450945050604086013567ffffffffffffffff81111561214d5761214c611acb565b5b6121598882890161207d565b92509250509295509295909350565b6000806040838503121561217f5761217e611ac6565b5b600061218d85828601611ba9565b925050602061219e85828601611af4565b9150509250929050565b6121b181611bbe565b82525050565b60006020820190506121cc60008301846121a8565b92915050565b600080602083850312156121e9576121e8611ac6565b5b600083013567ffffffffffffffff81111561220757612206611acb565b5b61221385828601611c85565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261227a5761227961224e565b5b80840192508235915067ffffffffffffffff82111561229c5761229b612253565b5b6020830192506001820236038313156122b8576122b7612258565b5b509250929050565b600081519050919050565b600081905092915050565b60005b838110156122f45780820151818401526020810190506122d9565b60008484015250505050565b600061230b826122c0565b61231581856122cb565b93506123258185602086016122d6565b80840191505092915050565b600061233d8285612300565b91506123498284612300565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061238f82611c36565b915067ffffffffffffffff82036123a9576123a8612355565b5b600182019050919050565b600082825260208201905092915050565b60006123d0826122c0565b6123da81856123b4565b93506123ea8185602086016122d6565b6123f381611d54565b840191505092915050565b600060a0820190506124136000830188611f56565b6124206020830187611f56565b61242d6040830186611f2c565b61243a6060830185611f2c565b818103608083015261244c81846123c5565b90509695505050505050565b600082825260208201905092915050565b7f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060008201527f6e6577206f776e65720000000000000000000000000000000000000000000000602082015250565b60006124c5602983612458565b91506124d082612469565b604082019050919050565b600060208201905081810360008301526124f4816124b8565b9050919050565b600082825260208201905092915050565b6000819050919050565b61251f81611b80565b82525050565b60006125318383612516565b60208301905092915050565b600061254c6020840184611ba9565b905092915050565b6000602082019050919050565b600061256d83856124fb565b93506125788261250c565b8060005b858110156125b15761258e828461253d565b6125988882612525565b97506125a383612554565b92505060018101905061257c565b5085925050509392505050565b600082825260208201905092915050565b6000819050919050565b6125e281611c36565b82525050565b60006125f483836125d9565b60208301905092915050565b600061260f6020840184611c61565b905092915050565b6000602082019050919050565b600061263083856125be565b935061263b826125cf565b8060005b85811015612674576126518284612600565b61265b88826125e8565b975061266683612617565b92505060018101905061263f565b5085925050509392505050565b60006060820190506126966000830188611f56565b81810360208301526126a9818688612561565b905081810360408301526126be818486612624565b90509695505050505050565b6000819050919050565b6126dd816126ca565b81146126e857600080fd5b50565b6000815190506126fa816126d4565b92915050565b60006020828403121561271657612715611ac6565b5b6000612724848285016126eb565b91505092915050565b60006127398284612300565b915081905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061277a602083612458565b915061278582612744565b602082019050919050565b600060208201905081810360008301526127a98161276d565b9050919050565b60008160c01b9050919050565b60006127c8826127b0565b9050919050565b6127e06127db82611c36565b6127bd565b82525050565b60008160601b9050919050565b60006127fe826127e6565b9050919050565b6000612810826127f3565b9050919050565b61282861282382611b80565b612805565b82525050565b600061283a828a6127cf565b60088201915061284a82896127cf565b60088201915061285a82886127cf565b60088201915061286a8287612817565b60148201915061287a8286612817565b60148201915061288a8285612817565b60148201915061289a8284612817565b60148201915081905098975050505050505050565b60008160011c9050919050565b6000808291508390505b6001851115612906578086048111156128e2576128e1612355565b5b60018516156128f15780820291505b80810290506128ff856128af565b94506128c6565b94509492505050565b60008261291f57600190506129db565b8161292d57600090506129db565b8160018114612943576002811461294d5761297c565b60019150506129db565b60ff84111561295f5761295e612355565b5b8360020a91508482111561297657612975612355565b5b506129db565b5060208310610133831016604e8410600b84101617156129b15782820a9050838111156129ac576129ab612355565b5b6129db565b6129be84848460016128bc565b925090508184048111156129d5576129d4612355565b5b81810290505b9392505050565b60006129ed826126ca565b91506129f883611ad0565b9250612a257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461290f565b905092915050565b6000612a38826126ca565b9150612a43836126ca565b9250828202612a51816126ca565b91508282048414831517612a6857612a67612355565b5b5092915050565b7f5452414e534645525f4641494c45440000000000000000000000000000000000600082015250565b6000612aa5600f83612458565b9150612ab082612a6f565b602082019050919050565b60006020820190508181036000830152612ad481612a98565b9050919050565b7f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000600082015250565b6000612b11601483612458565b9150612b1c82612adb565b602082019050919050565b60006020820190508181036000830152612b4081612b04565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612bac601883612458565b9150612bb782612b76565b602082019050919050565b60006020820190508181036000830152612bdb81612b9f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612c18601f83612458565b9150612c2382612be2565b602082019050919050565b60006020820190508181036000830152612c4781612c0b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612caa602283612458565b9150612cb582612c4e565b604082019050919050565b60006020820190508181036000830152612cd981612c9d565b9050919050565b6000819050919050565b612cf381612ce0565b82525050565b6000608082019050612d0e6000830187612cea565b612d1b6020830186611b36565b612d286040830185612cea565b612d356060830184612cea565b9594505050505056fea26469706673582212201b4f9c2a7ecf3c1bae4d8506fcb228bf10089d94a3d1e40f975bdcc8428477f464736f6c6343000813003300000000000000000000000000000000000000000000000000000000000000a00000000000000000000000006e7f11641c1ec71591828e531334192d622703f7000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000003843508e380277cf14f26dfd54ccca2c21db0f0a
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101585760003560e01c80639bf41135116100c3578063d8f5bbae1161007c578063d8f5bbae1461034d578063e30c397814610369578063e47d606014610387578063e7415c76146103b7578063f2fde38b146103d3578063fc0c546a146103ef57610158565b80639bf41135146102a35780639c8a8da8146102bf578063c4767b95146102db578063c97371cf146102f7578063cda43b3a14610313578063d338faf31461033157610158565b806379ba50971161011557806379ba5097146101f55780637c505532146101ff5780637ecebe001461021d5780638da5cb5b1461024d5780639739d6521461026b578063988cd1391461028757610158565b806327cf716d1461015d578063313ce5671461017957806331cb610514610197578063715018a6146101b35780637456ef7a146101bd57806379b49c67146101d9575b600080fd5b61017760048036038101906101729190611b09565b61040d565b005b610181610443565b60405161018e9190611b45565b60405180910390f35b6101b160048036038101906101ac9190611bf6565b610456565b005b6101bb6104b9565b005b6101d760048036038101906101d29190611cdb565b6104cd565b005b6101f360048036038101906101ee9190611e90565b6107a4565b005b6101fd610988565b005b610207610a15565b6040516102149190611b45565b60405180910390f35b61023760048036038101906102329190611eff565b610a28565b6040516102449190611f3b565b60405180910390f35b610255610a4f565b6040516102629190611f65565b60405180910390f35b61028560048036038101906102809190611f80565b610a78565b005b6102a1600480360381019061029c9190611fad565b610a9d565b005b6102bd60048036038101906102b89190612030565b610ae8565b005b6102d960048036038101906102d491906120d3565b610b9c565b005b6102f560048036038101906102f09190612168565b610ccc565b005b610311600480360381019061030c9190612030565b610d7d565b005b61031b610e58565b6040516103289190611f3b565b60405180910390f35b61034b60048036038101906103469190612030565b610e72565b005b61036760048036038101906103629190611eff565b610f26565b005b610371610fff565b60405161037e9190611f65565b60405180910390f35b6103a1600480360381019061039c9190611eff565b611029565b6040516103ae91906121b7565b60405180910390f35b6103d160048036038101906103cc91906121d2565b611049565b005b6103ed60048036038101906103e89190611eff565b611119565b005b6103f76111c6565b6040516104049190611f65565b60405180910390f35b6104156111ec565b60018160ff161161042557600080fd5b806002601d6101000a81548160ff021916908360ff16021790555050565b6002601c9054906101000a900460ff1681565b61045e6111ec565b80600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6104c16111ec565b6104cb600061126a565b565b818190506002601d9054906101000a900460ff1660ff161461051b576040517f1ec5aa5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260149054906101000a900467ffffffffffffffff1667ffffffffffffffff168367ffffffffffffffff16101561057f576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061058961129b565b90506060806000600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff16905060005b6002601d9054906101000a900460ff1660ff168110156106a8578686828181106106165761061561221f565b5b9050602002810190610628919061225d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505093508284604051602001610680929190612331565b604051602081830303815290604052925061069d858a8a876112a3565b8060010190506105e9565b50600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900467ffffffffffffffff1661070890612384565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550610739888589611458565b7f2f903e8a97bcbce0bc241b7da33692f56224915bec428d32019a8dceb04bd86b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1685838a866040516107929594939291906123fe565b60405180910390a15050505050505050565b6002601e9054906101000a900460ff1680156107e95750600260149054906101000a900467ffffffffffffffff1667ffffffffffffffff168267ffffffffffffffff16115b15610820576040517f2c5211c600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061082a61129b565b9050610838818585856112a3565b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff169050600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900467ffffffffffffffff166108ef90612384565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550610920858386611458565b7f2f903e8a97bcbce0bc241b7da33692f56224915bec428d32019a8dceb04bd86b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16838387876040516109799594939291906123fe565b60405180910390a15050505050565b600061099261129b565b90508073ffffffffffffffffffffffffffffffffffffffff166109b3610fff565b73ffffffffffffffffffffffffffffffffffffffff1614610a09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a00906124db565b60405180910390fd5b610a128161126a565b50565b6002601d9054906101000a900460ff1681565b60036020528060005260406000206000915054906101000a900467ffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610a806111ec565b806002601e6101000a81548160ff02191690831515021790555050565b610aa56111ec565b60008167ffffffffffffffff1603610abc57600080fd5b80600260146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b610af06111ec565b6000828290509050600080600090505b82811015610b9557848482818110610b1b57610b1a61221f565b5b9050602002016020810190610b309190611eff565b91506000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050610b00565b5050505050565b610ba46111ec565b6000848490509050808383905014610be8576040517f1ec5aa5100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060005b83811015610c6057858582818110610c0957610c0861221f565b5b9050602002016020810190610c1e9190611fad565b9250878782818110610c3357610c3261221f565b5b9050602002016020810190610c489190611eff565b9150610c55898385611458565b806001019050610bee565b507f5ead503ea7c90f1c2721d86fb215c83d227c6181f40f670ee0ff861c91b2379d600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1688888888604051610cba959493929190612681565b60405180910390a15050505050505050565b610cd46111ec565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d0d57600080fd5b60138160ff1610610d1d57600080fd5b81600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550806002601c6101000a81548160ff021916908360ff1602179055505050565b610d856111ec565b6000828290509050600080600090505b82811015610e5157848482818110610db057610daf61221f565b5b9050602002016020810190610dc59190611eff565b9150600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081819054906101000a900467ffffffffffffffff1660010191906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550806001019050610d95565b5050505050565b600260149054906101000a900467ffffffffffffffff1681565b610e7a6111ec565b6000828290509050600080600090505b82811015610f1f57848482818110610ea557610ea461221f565b5b9050602002016020810190610eba9190611eff565b91506001600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806001019050610e8a565b5050505050565b610f2e6111ec565b6000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f8b9190611f65565b602060405180830381865afa158015610fa8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fcc9190612700565b9050610ffb600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683836114bb565b5050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60066020528060005260406000206000915054906101000a900460ff1681565b6110516111ec565b6000828290509050606060005b82811015611112578484828181106110795761107861221f565b5b905060200281019061108b919061225d565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050915060016005836040516110e2919061272d565b908152602001604051809103902060006101000a81548160ff02191690831515021790555080600101905061105e565b5050505050565b6111216111ec565b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16611181610a4f565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111f461129b565b73ffffffffffffffffffffffffffffffffffffffff16611212610a4f565b73ffffffffffffffffffffffffffffffffffffffff1614611268576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161125f90612790565b60405180910390fd5b565b600160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561129881611576565b50565b600033905090565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156112fa57600080fd5b60058160405161130a919061272d565b908152602001604051809103902060009054906101000a900460ff161561135d576040517f6036f7f200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900467ffffffffffffffff166113bc61163a565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168888306040516020016113f8979695949392919061282e565b60405160208183030381529060405280519060200120905061141a8183611647565b600160058360405161142c919061272d565b908152602001604051809103902060006101000a81548160ff0219169083151502179055505050505050565b6114b6600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684846002601c9054906101000a900460ff16600a61149c91906129e2565b8567ffffffffffffffff166114b19190612a2d565b6116ee565b505050565b60006040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152826024820152602060006044836000895af1915081601f3d116001600051141615161561152f573d853b15171591505b5080611570576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156790612abb565b60405180910390fd5b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000804690508091505090565b600061166482611656856117c6565b6117fc90919063ffffffff16565b9050600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166116e9576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b60006040517f23b872dd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015273ffffffffffffffffffffffffffffffffffffffff841660248201528260448201526020600060648360008a5af1915081601f3d116001600051141615161561177e573d863b15171591505b50806117bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b690612b27565b60405180910390fd5b5050505050565b60007f19457468657265756d205369676e6564204d6573736167653a0a33320000000060005281601c52603c6000209050919050565b600080600061180b8585611823565b9150915061181881611874565b819250505092915050565b60008060418351036118645760008060006020860151925060408601519150606086015160001a9050611858878285856119da565b9450945050505061186d565b60006002915091505b9250929050565b6000600481111561188857611887612b47565b5b81600481111561189b5761189a612b47565b5b03156119d757600160048111156118b5576118b4612b47565b5b8160048111156118c8576118c7612b47565b5b03611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff90612bc2565b60405180910390fd5b6002600481111561191c5761191b612b47565b5b81600481111561192f5761192e612b47565b5b0361196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690612c2e565b60405180910390fd5b6003600481111561198357611982612b47565b5b81600481111561199657611995612b47565b5b036119d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cd90612cc0565b60405180910390fd5b5b50565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115611a15576000600391509150611ab3565b600060018787878760405160008152602001604052604051611a3a9493929190612cf9565b6020604051602081039080840390855afa158015611a5c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611aaa57600060019250925050611ab3565b80600092509250505b94509492505050565b6000604051905090565b600080fd5b600080fd5b600060ff82169050919050565b611ae681611ad0565b8114611af157600080fd5b50565b600081359050611b0381611add565b92915050565b600060208284031215611b1f57611b1e611ac6565b5b6000611b2d84828501611af4565b91505092915050565b611b3f81611ad0565b82525050565b6000602082019050611b5a6000830184611b36565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611b8b82611b60565b9050919050565b611b9b81611b80565b8114611ba657600080fd5b50565b600081359050611bb881611b92565b92915050565b60008115159050919050565b611bd381611bbe565b8114611bde57600080fd5b50565b600081359050611bf081611bca565b92915050565b60008060408385031215611c0d57611c0c611ac6565b5b6000611c1b85828601611ba9565b9250506020611c2c85828601611be1565b9150509250929050565b600067ffffffffffffffff82169050919050565b611c5381611c36565b8114611c5e57600080fd5b50565b600081359050611c7081611c4a565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112611c9b57611c9a611c76565b5b8235905067ffffffffffffffff811115611cb857611cb7611c7b565b5b602083019150836020820283011115611cd457611cd3611c80565b5b9250929050565b60008060008060608587031215611cf557611cf4611ac6565b5b6000611d0387828801611ba9565b9450506020611d1487828801611c61565b935050604085013567ffffffffffffffff811115611d3557611d34611acb565b5b611d4187828801611c85565b925092505092959194509250565b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b611d9d82611d54565b810181811067ffffffffffffffff82111715611dbc57611dbb611d65565b5b80604052505050565b6000611dcf611abc565b9050611ddb8282611d94565b919050565b600067ffffffffffffffff821115611dfb57611dfa611d65565b5b611e0482611d54565b9050602081019050919050565b82818337600083830152505050565b6000611e33611e2e84611de0565b611dc5565b905082815260208101848484011115611e4f57611e4e611d4f565b5b611e5a848285611e11565b509392505050565b600082601f830112611e7757611e76611c76565b5b8135611e87848260208601611e20565b91505092915050565b600080600060608486031215611ea957611ea8611ac6565b5b6000611eb786828701611ba9565b9350506020611ec886828701611c61565b925050604084013567ffffffffffffffff811115611ee957611ee8611acb565b5b611ef586828701611e62565b9150509250925092565b600060208284031215611f1557611f14611ac6565b5b6000611f2384828501611ba9565b91505092915050565b611f3581611c36565b82525050565b6000602082019050611f506000830184611f2c565b92915050565b611f5f81611b80565b82525050565b6000602082019050611f7a6000830184611f56565b92915050565b600060208284031215611f9657611f95611ac6565b5b6000611fa484828501611be1565b91505092915050565b600060208284031215611fc357611fc2611ac6565b5b6000611fd184828501611c61565b91505092915050565b60008083601f840112611ff057611fef611c76565b5b8235905067ffffffffffffffff81111561200d5761200c611c7b565b5b60208301915083602082028301111561202957612028611c80565b5b9250929050565b6000806020838503121561204757612046611ac6565b5b600083013567ffffffffffffffff81111561206557612064611acb565b5b61207185828601611fda565b92509250509250929050565b60008083601f84011261209357612092611c76565b5b8235905067ffffffffffffffff8111156120b0576120af611c7b565b5b6020830191508360208202830111156120cc576120cb611c80565b5b9250929050565b6000806000806000606086880312156120ef576120ee611ac6565b5b60006120fd88828901611ba9565b955050602086013567ffffffffffffffff81111561211e5761211d611acb565b5b61212a88828901611fda565b9450945050604086013567ffffffffffffffff81111561214d5761214c611acb565b5b6121598882890161207d565b92509250509295509295909350565b6000806040838503121561217f5761217e611ac6565b5b600061218d85828601611ba9565b925050602061219e85828601611af4565b9150509250929050565b6121b181611bbe565b82525050565b60006020820190506121cc60008301846121a8565b92915050565b600080602083850312156121e9576121e8611ac6565b5b600083013567ffffffffffffffff81111561220757612206611acb565b5b61221385828601611c85565b92509250509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b600080fd5b600080fd5b6000808335600160200384360303811261227a5761227961224e565b5b80840192508235915067ffffffffffffffff82111561229c5761229b612253565b5b6020830192506001820236038313156122b8576122b7612258565b5b509250929050565b600081519050919050565b600081905092915050565b60005b838110156122f45780820151818401526020810190506122d9565b60008484015250505050565b600061230b826122c0565b61231581856122cb565b93506123258185602086016122d6565b80840191505092915050565b600061233d8285612300565b91506123498284612300565b91508190509392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061238f82611c36565b915067ffffffffffffffff82036123a9576123a8612355565b5b600182019050919050565b600082825260208201905092915050565b60006123d0826122c0565b6123da81856123b4565b93506123ea8185602086016122d6565b6123f381611d54565b840191505092915050565b600060a0820190506124136000830188611f56565b6124206020830187611f56565b61242d6040830186611f2c565b61243a6060830185611f2c565b818103608083015261244c81846123c5565b90509695505050505050565b600082825260208201905092915050565b7f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060008201527f6e6577206f776e65720000000000000000000000000000000000000000000000602082015250565b60006124c5602983612458565b91506124d082612469565b604082019050919050565b600060208201905081810360008301526124f4816124b8565b9050919050565b600082825260208201905092915050565b6000819050919050565b61251f81611b80565b82525050565b60006125318383612516565b60208301905092915050565b600061254c6020840184611ba9565b905092915050565b6000602082019050919050565b600061256d83856124fb565b93506125788261250c565b8060005b858110156125b15761258e828461253d565b6125988882612525565b97506125a383612554565b92505060018101905061257c565b5085925050509392505050565b600082825260208201905092915050565b6000819050919050565b6125e281611c36565b82525050565b60006125f483836125d9565b60208301905092915050565b600061260f6020840184611c61565b905092915050565b6000602082019050919050565b600061263083856125be565b935061263b826125cf565b8060005b85811015612674576126518284612600565b61265b88826125e8565b975061266683612617565b92505060018101905061263f565b5085925050509392505050565b60006060820190506126966000830188611f56565b81810360208301526126a9818688612561565b905081810360408301526126be818486612624565b90509695505050505050565b6000819050919050565b6126dd816126ca565b81146126e857600080fd5b50565b6000815190506126fa816126d4565b92915050565b60006020828403121561271657612715611ac6565b5b6000612724848285016126eb565b91505092915050565b60006127398284612300565b915081905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061277a602083612458565b915061278582612744565b602082019050919050565b600060208201905081810360008301526127a98161276d565b9050919050565b60008160c01b9050919050565b60006127c8826127b0565b9050919050565b6127e06127db82611c36565b6127bd565b82525050565b60008160601b9050919050565b60006127fe826127e6565b9050919050565b6000612810826127f3565b9050919050565b61282861282382611b80565b612805565b82525050565b600061283a828a6127cf565b60088201915061284a82896127cf565b60088201915061285a82886127cf565b60088201915061286a8287612817565b60148201915061287a8286612817565b60148201915061288a8285612817565b60148201915061289a8284612817565b60148201915081905098975050505050505050565b60008160011c9050919050565b6000808291508390505b6001851115612906578086048111156128e2576128e1612355565b5b60018516156128f15780820291505b80810290506128ff856128af565b94506128c6565b94509492505050565b60008261291f57600190506129db565b8161292d57600090506129db565b8160018114612943576002811461294d5761297c565b60019150506129db565b60ff84111561295f5761295e612355565b5b8360020a91508482111561297657612975612355565b5b506129db565b5060208310610133831016604e8410600b84101617156129b15782820a9050838111156129ac576129ab612355565b5b6129db565b6129be84848460016128bc565b925090508184048111156129d5576129d4612355565b5b81810290505b9392505050565b60006129ed826126ca565b91506129f883611ad0565b9250612a257fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461290f565b905092915050565b6000612a38826126ca565b9150612a43836126ca565b9250828202612a51816126ca565b91508282048414831517612a6857612a67612355565b5b5092915050565b7f5452414e534645525f4641494c45440000000000000000000000000000000000600082015250565b6000612aa5600f83612458565b9150612ab082612a6f565b602082019050919050565b60006020820190508181036000830152612ad481612a98565b9050919050565b7f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000600082015250565b6000612b11601483612458565b9150612b1c82612adb565b602082019050919050565b60006020820190508181036000830152612b4081612b04565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000612bac601883612458565b9150612bb782612b76565b602082019050919050565b60006020820190508181036000830152612bdb81612b9f565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000612c18601f83612458565b9150612c2382612be2565b602082019050919050565b60006020820190508181036000830152612c4781612c0b565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000612caa602283612458565b9150612cb582612c4e565b604082019050919050565b60006020820190508181036000830152612cd981612c9d565b9050919050565b6000819050919050565b612cf381612ce0565b82525050565b6000608082019050612d0e6000830187612cea565b612d1b6020830186611b36565b612d286040830185612cea565b612d356060830184612cea565b9594505050505056fea26469706673582212201b4f9c2a7ecf3c1bae4d8506fcb228bf10089d94a3d1e40f975bdcc8428477f464736f6c63430008130033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000000a00000000000000000000000006e7f11641c1ec71591828e531334192d622703f7000000000000000000000000000000000000000000000000000000003b9aca00000000000000000000000000000000000000000000000000000000000000000e000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000003843508e380277cf14f26dfd54ccca2c21db0f0a
-----Decoded View---------------
Arg [0] : _signers (address[]): 0x3843508e380277cF14F26DfD54CcCA2c21DB0F0A
Arg [1] : _token (address): 0x6E7F11641c1EC71591828E531334192d622703F7
Arg [2] : _thresholds (uint64): 1000000000
Arg [3] : _decimals (uint8): 14
Arg [4] : _signumber (uint8): 2
-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [1] : 0000000000000000000000006e7f11641c1ec71591828e531334192d622703f7
Arg [2] : 000000000000000000000000000000000000000000000000000000003b9aca00
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000e
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000001
Arg [6] : 0000000000000000000000003843508e380277cf14f26dfd54ccca2c21db0f0a
Deployed Bytecode Sourcemap
45481:9021:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53566:134;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45614:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54113:108;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2891:103;;;:::i;:::-;;48889:816;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48116:484;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5497:216;;;:::i;:::-;;45642:22;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45708:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2250:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53964:94;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53758:141;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52096:370;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47231:598;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51251:208;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53176:324;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45583:24;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51604:339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54304:195;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4585:101;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45854:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52607:386;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4885:181;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45556:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53566:134;2136:13;:11;:13::i;:::-;53657:1:::1;53644:10;:14;;;53636:23;;;::::0;::::1;;53682:10;53670:9;;:22;;;;;;;;;;;;;;;;;;53566:134:::0;:::o;45614:21::-;;;;;;;;;;;;;:::o;54113:108::-;2136:13;:11;:13::i;:::-;54209:4:::1;54190:7;:16;54198:7;54190:16;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;54113:108:::0;;:::o;2891:103::-;2136:13;:11;:13::i;:::-;2956:30:::1;2983:1;2956:18;:30::i;:::-;2891:103::o:0;48889:816::-;49032:4;;:11;;49019:9;;;;;;;;;;;:24;;;49015:78;;49067:14;;;;;;;;;;;;;;49015:78;49116:10;;;;;;;;;;;49107:19;;:6;:19;;;49103:74;;;49150:15;;;;;;;;;;;;;;49103:74;49187:14;49204:12;:10;:12::i;:::-;49187:29;;49227:16;49254:19;49284:12;49299:6;:14;49306:6;49299:14;;;;;;;;;;;;;;;;;;;;;;;;;49284:29;;49354:9;49349:206;49373:9;;;;;;;;;;;49369:13;;:1;:13;49349:206;;;49414:4;;49419:1;49414:7;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;49408:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49462:6;49470:3;49449:25;;;;;;;;;:::i;:::-;;;;;;;;;;;;;49440:34;;49493:46;49511:6;49519;49527;49535:3;49493:17;:46::i;:::-;49384:3;;;;;49349:206;;;;49580:6;:14;49587:6;49580:14;;;;;;;;;;;;;;;;49578:16;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;49605:33;49615:6;49623;49631;49605:9;:33::i;:::-;49654:43;49660:5;;;;;;;;;;;49667:6;49675:5;49682:6;49690;49654:43;;;;;;;;;;:::i;:::-;;;;;;;;49004:701;;;;48889:816;;;;:::o;48116:484::-;48238:15;;;;;;;;;;;:38;;;;;48266:10;;;;;;;;;;;48257:19;;:6;:19;;;48238:38;48234:93;;;48300:15;;;;;;;;;;;;;;48234:93;48337:14;48354:12;:10;:12::i;:::-;48337:29;;48377:46;48395:6;48403;48411;48419:3;48377:17;:46::i;:::-;48436:12;48451:6;:14;48458:6;48451:14;;;;;;;;;;;;;;;;;;;;;;;;;48436:29;;48478:6;:14;48485:6;48478:14;;;;;;;;;;;;;;;;48476:16;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;48503:33;48513:6;48521;48529;48503:9;:33::i;:::-;48552:40;48558:5;;;;;;;;;;;48565:6;48573:5;48580:6;48588:3;48552:40;;;;;;;;;;:::i;:::-;;;;;;;;48223:377;;48116:484;;;:::o;5497:216::-;5550:14;5567:12;:10;:12::i;:::-;5550:29;;5616:6;5598:24;;:14;:12;:14::i;:::-;:24;;;5590:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;5679:26;5698:6;5679:18;:26::i;:::-;5539:174;5497:216::o;45642:22::-;;;;;;;;;;;;;:::o;45708:40::-;;;;;;;;;;;;;;;;;;;;;;:::o;2250:87::-;2296:7;2323:6;;;;;;;;;;;2316:13;;2250:87;:::o;53964:94::-;2136:13;:11;:13::i;:::-;54046:4:::1;54028:15;;:22;;;;;;;;;;;;;;;;;;53964:94:::0;:::o;53758:141::-;2136:13;:11;:13::i;:::-;53854:1:::1;53839:11;:16;;::::0;53831:25:::1;;;::::0;::::1;;53880:11;53867:10;;:24;;;;;;;;;;;;;;;;;;53758:141:::0;:::o;52096:370::-;2136:13;:11;:13::i;:::-;52200:11:::1;52214:13;;:20;;52200:34;;52245:17;52305:9:::0;52317:1:::1;52305:13;;52300:148;52324:3;52320:1;:7;52300:148;;;52365:13;;52379:1;52365:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;52353:28;;52427:5;52400:13;:24;52414:9;52400:24;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;52329:3;;;;;52300:148;;;;52189:277;;52096:370:::0;;:::o;47231:598::-;2136:13;:11;:13::i;:::-;47384:11:::1;47398:7;;:14;;47384:28;;47445:3;47427:7;;:14;;:21;47423:75;;47472:14;;;;;;;;;;;;;;47423:75;47508:13;47532:14:::0;47587:9:::1;47582:180;47606:3;47602:1;:7;47582:180;;;47644:7;;47652:1;47644:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47635:19;;47682:7;;47690:1;47682:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;47673:19;;47713:33;47723:6;47731;47739;47713:9;:33::i;:::-;47611:3;;;;;47582:180;;;;47788:33;47797:5;;;;;;;;;;;47804:7;;47813;;47788:33;;;;;;;;;;:::i;:::-;;;;;;;;47373:456;;;47231:598:::0;;;;;:::o;51251:208::-;2136:13;:11;:13::i;:::-;51358:1:::1;51340:20;;:6;:20;;::::0;51332:29:::1;;;::::0;::::1;;51392:2;51380:9;:14;;;51372:23;;;::::0;::::1;;51414:6;51406:5;;:14;;;;;;;;;;;;;;;;;;51442:9;51431:8;;:20;;;;;;;;;;;;;;;;;;51251:208:::0;;:::o;53176:324::-;2136:13;:11;:13::i;:::-;53278:11:::1;53292:5;;:12;;53278:26;;53315:12;53370:9:::0;53382:1:::1;53370:13;;53365:117;53389:3;53385:1;:7;53365:117;;;53425:5;;53431:1;53425:8;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;53418:15;;53454:6;:12;53461:4;53454:12;;;;;;;;;;;;;;;;53452:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53394:3;;;;;53365:117;;;;53267:233;;53176:324:::0;;:::o;45583:24::-;;;;;;;;;;;;;:::o;51604:339::-;2136:13;:11;:13::i;:::-;51687:11:::1;51701:10;;:17;;51687:31;;51729:16;51788:9:::0;51800:1:::1;51788:13;;51783:142;51807:3;51803:1;:7;51783:142;;;51847:10;;51858:1;51847:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;51836:24;;51905:4;51879:13;:23;51893:8;51879:23;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;51812:3;;;;;51783:142;;;;51676:267;;51604:339:::0;;:::o;54304:195::-;2136:13;:11;:13::i;:::-;54370:15:::1;54394:5;;;;;;;;;;;54388:22;;;54419:4;54388:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;54370:55;;54436;54471:5;;;;;;;;;;;54479:2;54483:7;54436:28;:55::i;:::-;54359:140;54304:195:::0;:::o;4585:101::-;4638:7;4665:13;;;;;;;;;;;4658:20;;4585:101;:::o;45854:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;52607:386::-;2136:13;:11;:13::i;:::-;52716:11:::1;52730:10;;:17;;52716:31;;52758:26;52827:9;52822:153;52846:3;52842:1;:7;52822:153;;;52891:10;;52902:1;52891:13;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;52875:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52955:4;52923:14;52938:13;52923:29;;;;;;:::i;:::-;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;52851:3;;;;;52822:153;;;;52705:288;;52607:386:::0;;:::o;4885:181::-;2136:13;:11;:13::i;:::-;4991:8:::1;4975:13;;:24;;;;;;;;;;;;;;;;;;5049:8;5015:43;;5040:7;:5;:7::i;:::-;5015:43;;;;;;;;;;;;4885:181:::0;:::o;45556:20::-;;;;;;;;;;;;;:::o;2415:132::-;2490:12;:10;:12::i;:::-;2479:23;;:7;:5;:7::i;:::-;:23;;;2471:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2415:132::o;5256:156::-;5346:13;;5339:20;;;;;;;;;;;5370:34;5395:8;5370:24;:34::i;:::-;5256:156;:::o;694:98::-;747:7;774:10;767:17;;694:98;:::o;50165:634::-;50328:13;:21;50342:6;50328:21;;;;;;;;;;;;;;;;;;;;;;;;;50327:22;50319:31;;;;;;50365:14;50380:3;50365:19;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;50361:74;;;50408:15;;;;;;;;;;;;;;50361:74;50445:12;50519:6;50544;:14;50551:6;50544:14;;;;;;;;;;;;;;;;;;;;;;;;;50577:10;:8;:10::i;:::-;50606:5;;;;;;;;;;;50630:6;50655;50688:4;50484:224;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50460:259;;;;;;50445:274;;50730:22;50742:4;50748:3;50730:11;:22::i;:::-;50787:4;50765:14;50780:3;50765:19;;;;;;:::i;:::-;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;50308:491;50165:634;;;;:::o;49713:263::-;49826:142;49879:5;;;;;;;;;;;49900:4;49919:2;49949:8;;;;;;;;;;;49945:2;:12;;;;:::i;:::-;49936:6;:21;;;;;;:::i;:::-;49826:32;:142::i;:::-;49713:263;;;:::o;42279:1493::-;42396:12;42571:4;42565:11;42716:66;42697:17;42690:93;42839:42;42835:2;42831:51;42827:1;42808:17;42804:25;42797:86;42970:6;42965:2;42946:17;42942:26;42935:42;43321:2;43318:1;43314:2;43295:17;43292:1;43285:5;43278;43273:51;43262:62;;43595:7;43588:2;43570:16;43567:24;43563:1;43559;43553:8;43550:15;43546:46;43539:54;43535:68;43532:174;;;43672:16;43663:5;43651:18;43644:26;43641:48;43634:56;43623:67;;43532:174;42474:1243;43737:7;43729:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;42385:1387;42279:1493;;;:::o;3510:191::-;3584:16;3603:6;;;;;;;;;;;3584:25;;3629:8;3620:6;;:17;;;;;;;;;;;;;;;;;;3684:8;3653:40;;3674:8;3653:40;;;;;;;;;;;;3573:128;3510:191;:::o;49984:173::-;50026:6;50045:14;50105:9;50094:20;;50142:7;50135:14;;;49984:173;:::o;50807:242::-;50890:15;50908:48;50946:9;50908:29;:4;:27;:29::i;:::-;:37;;:48;;;;:::i;:::-;50890:66;;50972:7;:16;50980:7;50972:16;;;;;;;;;;;;;;;;;;;;;;;;;50967:75;;51012:18;;;;;;;;;;;;;;50967:75;50879:170;50807:242;;:::o;40601:1670::-;40745:12;40920:4;40914:11;41065:66;41046:17;41039:93;41190:42;41184:4;41180:53;41176:1;41157:17;41153:25;41146:88;41331:42;41327:2;41323:51;41318:2;41299:17;41295:26;41288:87;41462:6;41457:2;41438:17;41434:26;41427:42;41815:2;41812:1;41807:3;41788:17;41785:1;41778:5;41771;41766:52;41755:63;;42089:7;42082:2;42064:16;42061:24;42057:1;42053;42047:8;42044:15;42040:46;42033:54;42029:68;42026:174;;;42166:16;42157:5;42145:18;42138:26;42135:48;42128:56;42117:67;;42026:174;40823:1388;42231:7;42223:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;40734:1537;40601:1670;;;;:::o;30334:405::-;30403:15;30608:34;30602:4;30595:48;30670:4;30664;30657:18;30716:4;30710;30700:21;30689:32;;30334:405;;;:::o;26798:231::-;26876:7;26897:17;26916:18;26938:27;26949:4;26955:9;26938:10;:27::i;:::-;26896:69;;;;26976:18;26988:5;26976:11;:18::i;:::-;27012:9;27005:16;;;;26798:231;;;;:::o;25249:747::-;25330:7;25339:12;25388:2;25368:9;:16;:22;25364:625;;25407:9;25431;25455:7;25712:4;25701:9;25697:20;25691:27;25686:32;;25762:4;25751:9;25747:20;25741:27;25736:32;;25820:4;25809:9;25805:20;25799:27;25796:1;25791:36;25786:41;;25863:25;25874:4;25880:1;25883;25886;25863:10;:25::i;:::-;25856:32;;;;;;;;;25364:625;25937:1;25941:35;25921:56;;;;25249:747;;;;;;:::o;23642:521::-;23720:20;23711:29;;;;;;;;:::i;:::-;;:5;:29;;;;;;;;:::i;:::-;;;23707:449;23757:7;23707:449;23818:29;23809:38;;;;;;;;:::i;:::-;;:5;:38;;;;;;;;:::i;:::-;;;23805:351;;23864:34;;;;;;;;;;:::i;:::-;;;;;;;;23805:351;23929:35;23920:44;;;;;;;;:::i;:::-;;:5;:44;;;;;;;;:::i;:::-;;;23916:240;;23981:41;;;;;;;;;;:::i;:::-;;;;;;;;23916:240;24053:30;24044:39;;;;;;;;:::i;:::-;;:5;:39;;;;;;;;:::i;:::-;;;24040:116;;24100:44;;;;;;;;;;:::i;:::-;;;;;;;;24040:116;23642:521;;:::o;28182:1477::-;28270:7;28279:12;29204:66;29199:1;29191:10;;:79;29187:163;;;29303:1;29307:30;29287:51;;;;;;29187:163;29447:14;29464:24;29474:4;29480:1;29483;29486;29464:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29447:41;;29521:1;29503:20;;:6;:20;;;29499:103;;29556:1;29560:29;29540:50;;;;;;;29499:103;29622:6;29630:20;29614:37;;;;;28182:1477;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:86;369:7;409:4;402:5;398:16;387:27;;334:86;;;:::o;426:118::-;497:22;513:5;497:22;:::i;:::-;490:5;487:33;477:61;;534:1;531;524:12;477:61;426:118;:::o;550:135::-;594:5;632:6;619:20;610:29;;648:31;673:5;648:31;:::i;:::-;550:135;;;;:::o;691:325::-;748:6;797:2;785:9;776:7;772:23;768:32;765:119;;;803:79;;:::i;:::-;765:119;923:1;948:51;991:7;982:6;971:9;967:22;948:51;:::i;:::-;938:61;;894:115;691:325;;;;:::o;1022:112::-;1105:22;1121:5;1105:22;:::i;:::-;1100:3;1093:35;1022:112;;:::o;1140:214::-;1229:4;1267:2;1256:9;1252:18;1244:26;;1280:67;1344:1;1333:9;1329:17;1320:6;1280:67;:::i;:::-;1140:214;;;;:::o;1360:126::-;1397:7;1437:42;1430:5;1426:54;1415:65;;1360:126;;;:::o;1492:96::-;1529:7;1558:24;1576:5;1558:24;:::i;:::-;1547:35;;1492:96;;;:::o;1594:122::-;1667:24;1685:5;1667:24;:::i;:::-;1660:5;1657:35;1647:63;;1706:1;1703;1696:12;1647:63;1594:122;:::o;1722:139::-;1768:5;1806:6;1793:20;1784:29;;1822:33;1849:5;1822:33;:::i;:::-;1722:139;;;;:::o;1867:90::-;1901:7;1944:5;1937:13;1930:21;1919:32;;1867:90;;;:::o;1963:116::-;2033:21;2048:5;2033:21;:::i;:::-;2026:5;2023:32;2013:60;;2069:1;2066;2059:12;2013:60;1963:116;:::o;2085:133::-;2128:5;2166:6;2153:20;2144:29;;2182:30;2206:5;2182:30;:::i;:::-;2085:133;;;;:::o;2224:468::-;2289:6;2297;2346:2;2334:9;2325:7;2321:23;2317:32;2314:119;;;2352:79;;:::i;:::-;2314:119;2472:1;2497:53;2542:7;2533:6;2522:9;2518:22;2497:53;:::i;:::-;2487:63;;2443:117;2599:2;2625:50;2667:7;2658:6;2647:9;2643:22;2625:50;:::i;:::-;2615:60;;2570:115;2224:468;;;;;:::o;2698:101::-;2734:7;2774:18;2767:5;2763:30;2752:41;;2698:101;;;:::o;2805:120::-;2877:23;2894:5;2877:23;:::i;:::-;2870:5;2867:34;2857:62;;2915:1;2912;2905:12;2857:62;2805:120;:::o;2931:137::-;2976:5;3014:6;3001:20;2992:29;;3030:32;3056:5;3030:32;:::i;:::-;2931:137;;;;:::o;3074:117::-;3183:1;3180;3173:12;3197:117;3306:1;3303;3296:12;3320:117;3429:1;3426;3419:12;3458:579;3542:8;3552:6;3602:3;3595:4;3587:6;3583:17;3579:27;3569:122;;3610:79;;:::i;:::-;3569:122;3723:6;3710:20;3700:30;;3753:18;3745:6;3742:30;3739:117;;;3775:79;;:::i;:::-;3739:117;3889:4;3881:6;3877:17;3865:29;;3943:3;3935:4;3927:6;3923:17;3913:8;3909:32;3906:41;3903:128;;;3950:79;;:::i;:::-;3903:128;3458:579;;;;;:::o;4043:869::-;4157:6;4165;4173;4181;4230:2;4218:9;4209:7;4205:23;4201:32;4198:119;;;4236:79;;:::i;:::-;4198:119;4356:1;4381:53;4426:7;4417:6;4406:9;4402:22;4381:53;:::i;:::-;4371:63;;4327:117;4483:2;4509:52;4553:7;4544:6;4533:9;4529:22;4509:52;:::i;:::-;4499:62;;4454:117;4638:2;4627:9;4623:18;4610:32;4669:18;4661:6;4658:30;4655:117;;;4691:79;;:::i;:::-;4655:117;4804:91;4887:7;4878:6;4867:9;4863:22;4804:91;:::i;:::-;4786:109;;;;4581:324;4043:869;;;;;;;:::o;4918:117::-;5027:1;5024;5017:12;5041:102;5082:6;5133:2;5129:7;5124:2;5117:5;5113:14;5109:28;5099:38;;5041:102;;;:::o;5149:180::-;5197:77;5194:1;5187:88;5294:4;5291:1;5284:15;5318:4;5315:1;5308:15;5335:281;5418:27;5440:4;5418:27;:::i;:::-;5410:6;5406:40;5548:6;5536:10;5533:22;5512:18;5500:10;5497:34;5494:62;5491:88;;;5559:18;;:::i;:::-;5491:88;5599:10;5595:2;5588:22;5378:238;5335:281;;:::o;5622:129::-;5656:6;5683:20;;:::i;:::-;5673:30;;5712:33;5740:4;5732:6;5712:33;:::i;:::-;5622:129;;;:::o;5757:307::-;5818:4;5908:18;5900:6;5897:30;5894:56;;;5930:18;;:::i;:::-;5894:56;5968:29;5990:6;5968:29;:::i;:::-;5960:37;;6052:4;6046;6042:15;6034:23;;5757:307;;;:::o;6070:146::-;6167:6;6162:3;6157;6144:30;6208:1;6199:6;6194:3;6190:16;6183:27;6070:146;;;:::o;6222:423::-;6299:5;6324:65;6340:48;6381:6;6340:48;:::i;:::-;6324:65;:::i;:::-;6315:74;;6412:6;6405:5;6398:21;6450:4;6443:5;6439:16;6488:3;6479:6;6474:3;6470:16;6467:25;6464:112;;;6495:79;;:::i;:::-;6464:112;6585:54;6632:6;6627:3;6622;6585:54;:::i;:::-;6305:340;6222:423;;;;;:::o;6664:338::-;6719:5;6768:3;6761:4;6753:6;6749:17;6745:27;6735:122;;6776:79;;:::i;:::-;6735:122;6893:6;6880:20;6918:78;6992:3;6984:6;6977:4;6969:6;6965:17;6918:78;:::i;:::-;6909:87;;6725:277;6664:338;;;;:::o;7008:795::-;7093:6;7101;7109;7158:2;7146:9;7137:7;7133:23;7129:32;7126:119;;;7164:79;;:::i;:::-;7126:119;7284:1;7309:53;7354:7;7345:6;7334:9;7330:22;7309:53;:::i;:::-;7299:63;;7255:117;7411:2;7437:52;7481:7;7472:6;7461:9;7457:22;7437:52;:::i;:::-;7427:62;;7382:117;7566:2;7555:9;7551:18;7538:32;7597:18;7589:6;7586:30;7583:117;;;7619:79;;:::i;:::-;7583:117;7724:62;7778:7;7769:6;7758:9;7754:22;7724:62;:::i;:::-;7714:72;;7509:287;7008:795;;;;;:::o;7809:329::-;7868:6;7917:2;7905:9;7896:7;7892:23;7888:32;7885:119;;;7923:79;;:::i;:::-;7885:119;8043:1;8068:53;8113:7;8104:6;8093:9;8089:22;8068:53;:::i;:::-;8058:63;;8014:117;7809:329;;;;:::o;8144:115::-;8229:23;8246:5;8229:23;:::i;:::-;8224:3;8217:36;8144:115;;:::o;8265:218::-;8356:4;8394:2;8383:9;8379:18;8371:26;;8407:69;8473:1;8462:9;8458:17;8449:6;8407:69;:::i;:::-;8265:218;;;;:::o;8489:118::-;8576:24;8594:5;8576:24;:::i;:::-;8571:3;8564:37;8489:118;;:::o;8613:222::-;8706:4;8744:2;8733:9;8729:18;8721:26;;8757:71;8825:1;8814:9;8810:17;8801:6;8757:71;:::i;:::-;8613:222;;;;:::o;8841:323::-;8897:6;8946:2;8934:9;8925:7;8921:23;8917:32;8914:119;;;8952:79;;:::i;:::-;8914:119;9072:1;9097:50;9139:7;9130:6;9119:9;9115:22;9097:50;:::i;:::-;9087:60;;9043:114;8841:323;;;;:::o;9170:327::-;9228:6;9277:2;9265:9;9256:7;9252:23;9248:32;9245:119;;;9283:79;;:::i;:::-;9245:119;9403:1;9428:52;9472:7;9463:6;9452:9;9448:22;9428:52;:::i;:::-;9418:62;;9374:116;9170:327;;;;:::o;9520:568::-;9593:8;9603:6;9653:3;9646:4;9638:6;9634:17;9630:27;9620:122;;9661:79;;:::i;:::-;9620:122;9774:6;9761:20;9751:30;;9804:18;9796:6;9793:30;9790:117;;;9826:79;;:::i;:::-;9790:117;9940:4;9932:6;9928:17;9916:29;;9994:3;9986:4;9978:6;9974:17;9964:8;9960:32;9957:41;9954:128;;;10001:79;;:::i;:::-;9954:128;9520:568;;;;;:::o;10094:559::-;10180:6;10188;10237:2;10225:9;10216:7;10212:23;10208:32;10205:119;;;10243:79;;:::i;:::-;10205:119;10391:1;10380:9;10376:17;10363:31;10421:18;10413:6;10410:30;10407:117;;;10443:79;;:::i;:::-;10407:117;10556:80;10628:7;10619:6;10608:9;10604:22;10556:80;:::i;:::-;10538:98;;;;10334:312;10094:559;;;;;:::o;10675:567::-;10747:8;10757:6;10807:3;10800:4;10792:6;10788:17;10784:27;10774:122;;10815:79;;:::i;:::-;10774:122;10928:6;10915:20;10905:30;;10958:18;10950:6;10947:30;10944:117;;;10980:79;;:::i;:::-;10944:117;11094:4;11086:6;11082:17;11070:29;;11148:3;11140:4;11132:6;11128:17;11118:8;11114:32;11111:41;11108:128;;;11155:79;;:::i;:::-;11108:128;10675:567;;;;;:::o;11248:1077::-;11378:6;11386;11394;11402;11410;11459:2;11447:9;11438:7;11434:23;11430:32;11427:119;;;11465:79;;:::i;:::-;11427:119;11585:1;11610:53;11655:7;11646:6;11635:9;11631:22;11610:53;:::i;:::-;11600:63;;11556:117;11740:2;11729:9;11725:18;11712:32;11771:18;11763:6;11760:30;11757:117;;;11793:79;;:::i;:::-;11757:117;11906:80;11978:7;11969:6;11958:9;11954:22;11906:80;:::i;:::-;11888:98;;;;11683:313;12063:2;12052:9;12048:18;12035:32;12094:18;12086:6;12083:30;12080:117;;;12116:79;;:::i;:::-;12080:117;12229:79;12300:7;12291:6;12280:9;12276:22;12229:79;:::i;:::-;12211:97;;;;12006:312;11248:1077;;;;;;;;:::o;12331:470::-;12397:6;12405;12454:2;12442:9;12433:7;12429:23;12425:32;12422:119;;;12460:79;;:::i;:::-;12422:119;12580:1;12605:53;12650:7;12641:6;12630:9;12626:22;12605:53;:::i;:::-;12595:63;;12551:117;12707:2;12733:51;12776:7;12767:6;12756:9;12752:22;12733:51;:::i;:::-;12723:61;;12678:116;12331:470;;;;;:::o;12807:109::-;12888:21;12903:5;12888:21;:::i;:::-;12883:3;12876:34;12807:109;;:::o;12922:210::-;13009:4;13047:2;13036:9;13032:18;13024:26;;13060:65;13122:1;13111:9;13107:17;13098:6;13060:65;:::i;:::-;12922:210;;;;:::o;13138:581::-;13235:6;13243;13292:2;13280:9;13271:7;13267:23;13263:32;13260:119;;;13298:79;;:::i;:::-;13260:119;13446:1;13435:9;13431:17;13418:31;13476:18;13468:6;13465:30;13462:117;;;13498:79;;:::i;:::-;13462:117;13611:91;13694:7;13685:6;13674:9;13670:22;13611:91;:::i;:::-;13593:109;;;;13389:323;13138:581;;;;;:::o;13725:180::-;13773:77;13770:1;13763:88;13870:4;13867:1;13860:15;13894:4;13891:1;13884:15;13911:117;14020:1;14017;14010:12;14034:117;14143:1;14140;14133:12;14157:117;14266:1;14263;14256:12;14280:724;14357:4;14363:6;14419:11;14406:25;14519:1;14513:4;14509:12;14498:8;14482:14;14478:29;14474:48;14454:18;14450:73;14440:168;;14527:79;;:::i;:::-;14440:168;14639:18;14629:8;14625:33;14617:41;;14691:4;14678:18;14668:28;;14719:18;14711:6;14708:30;14705:117;;;14741:79;;:::i;:::-;14705:117;14849:2;14843:4;14839:13;14831:21;;14906:4;14898:6;14894:17;14878:14;14874:38;14868:4;14864:49;14861:136;;;14916:79;;:::i;:::-;14861:136;14370:634;14280:724;;;;;:::o;15010:98::-;15061:6;15095:5;15089:12;15079:22;;15010:98;;;:::o;15114:147::-;15215:11;15252:3;15237:18;;15114:147;;;;:::o;15267:246::-;15348:1;15358:113;15372:6;15369:1;15366:13;15358:113;;;15457:1;15452:3;15448:11;15442:18;15438:1;15433:3;15429:11;15422:39;15394:2;15391:1;15387:10;15382:15;;15358:113;;;15505:1;15496:6;15491:3;15487:16;15480:27;15329:184;15267:246;;;:::o;15519:386::-;15623:3;15651:38;15683:5;15651:38;:::i;:::-;15705:88;15786:6;15781:3;15705:88;:::i;:::-;15698:95;;15802:65;15860:6;15855:3;15848:4;15841:5;15837:16;15802:65;:::i;:::-;15892:6;15887:3;15883:16;15876:23;;15627:278;15519:386;;;;:::o;15911:427::-;16087:3;16109:93;16198:3;16189:6;16109:93;:::i;:::-;16102:100;;16219:93;16308:3;16299:6;16219:93;:::i;:::-;16212:100;;16329:3;16322:10;;15911:427;;;;;:::o;16344:180::-;16392:77;16389:1;16382:88;16489:4;16486:1;16479:15;16513:4;16510:1;16503:15;16530:183;16568:3;16591:23;16608:5;16591:23;:::i;:::-;16582:32;;16636:18;16629:5;16626:29;16623:55;;16658:18;;:::i;:::-;16623:55;16705:1;16698:5;16694:13;16687:20;;16530:183;;;:::o;16719:168::-;16802:11;16836:6;16831:3;16824:19;16876:4;16871:3;16867:14;16852:29;;16719:168;;;;:::o;16893:373::-;16979:3;17007:38;17039:5;17007:38;:::i;:::-;17061:70;17124:6;17119:3;17061:70;:::i;:::-;17054:77;;17140:65;17198:6;17193:3;17186:4;17179:5;17175:16;17140:65;:::i;:::-;17230:29;17252:6;17230:29;:::i;:::-;17225:3;17221:39;17214:46;;16983:283;16893:373;;;;:::o;17272:743::-;17491:4;17529:3;17518:9;17514:19;17506:27;;17543:71;17611:1;17600:9;17596:17;17587:6;17543:71;:::i;:::-;17624:72;17692:2;17681:9;17677:18;17668:6;17624:72;:::i;:::-;17706:70;17772:2;17761:9;17757:18;17748:6;17706:70;:::i;:::-;17786;17852:2;17841:9;17837:18;17828:6;17786:70;:::i;:::-;17904:9;17898:4;17894:20;17888:3;17877:9;17873:19;17866:49;17932:76;18003:4;17994:6;17932:76;:::i;:::-;17924:84;;17272:743;;;;;;;;:::o;18021:169::-;18105:11;18139:6;18134:3;18127:19;18179:4;18174:3;18170:14;18155:29;;18021:169;;;;:::o;18196:228::-;18336:34;18332:1;18324:6;18320:14;18313:58;18405:11;18400:2;18392:6;18388:15;18381:36;18196:228;:::o;18430:366::-;18572:3;18593:67;18657:2;18652:3;18593:67;:::i;:::-;18586:74;;18669:93;18758:3;18669:93;:::i;:::-;18787:2;18782:3;18778:12;18771:19;;18430:366;;;:::o;18802:419::-;18968:4;19006:2;18995:9;18991:18;18983:26;;19055:9;19049:4;19045:20;19041:1;19030:9;19026:17;19019:47;19083:131;19209:4;19083:131;:::i;:::-;19075:139;;18802:419;;;:::o;19227:184::-;19326:11;19360:6;19355:3;19348:19;19400:4;19395:3;19391:14;19376:29;;19227:184;;;;:::o;19417:102::-;19486:4;19509:3;19501:11;;19417:102;;;:::o;19525:108::-;19602:24;19620:5;19602:24;:::i;:::-;19597:3;19590:37;19525:108;;:::o;19639:179::-;19708:10;19729:46;19771:3;19763:6;19729:46;:::i;:::-;19807:4;19802:3;19798:14;19784:28;;19639:179;;;;:::o;19824:122::-;19876:5;19901:39;19936:2;19931:3;19927:12;19922:3;19901:39;:::i;:::-;19892:48;;19824:122;;;;:::o;19952:115::-;20024:4;20056;20051:3;20047:14;20039:22;;19952:115;;;:::o;20103:699::-;20232:3;20255:86;20334:6;20329:3;20255:86;:::i;:::-;20248:93;;20365:58;20417:5;20365:58;:::i;:::-;20446:7;20477:1;20462:315;20487:6;20484:1;20481:13;20462:315;;;20557:42;20592:6;20583:7;20557:42;:::i;:::-;20619:63;20678:3;20663:13;20619:63;:::i;:::-;20612:70;;20705:62;20760:6;20705:62;:::i;:::-;20695:72;;20522:255;20509:1;20506;20502:9;20497:14;;20462:315;;;20466:14;20793:3;20786:10;;20237:565;;20103:699;;;;;:::o;20808:183::-;20906:11;20940:6;20935:3;20928:19;20980:4;20975:3;20971:14;20956:29;;20808:183;;;;:::o;20997:101::-;21065:4;21088:3;21080:11;;20997:101;;;:::o;21104:105::-;21179:23;21196:5;21179:23;:::i;:::-;21174:3;21167:36;21104:105;;:::o;21215:175::-;21282:10;21303:44;21343:3;21335:6;21303:44;:::i;:::-;21379:4;21374:3;21370:14;21356:28;;21215:175;;;;:::o;21396:120::-;21447:5;21472:38;21506:2;21501:3;21497:12;21492:3;21472:38;:::i;:::-;21463:47;;21396:120;;;;:::o;21522:114::-;21593:4;21625;21620:3;21616:14;21608:22;;21522:114;;;:::o;21670:691::-;21797:3;21820:85;21898:6;21893:3;21820:85;:::i;:::-;21813:92;;21929:57;21980:5;21929:57;:::i;:::-;22009:7;22040:1;22025:311;22050:6;22047:1;22044:13;22025:311;;;22120:41;22154:6;22145:7;22120:41;:::i;:::-;22181:61;22238:3;22223:13;22181:61;:::i;:::-;22174:68;;22265:61;22319:6;22265:61;:::i;:::-;22255:71;;22085:251;22072:1;22069;22065:9;22060:14;;22025:311;;;22029:14;22352:3;22345:10;;21802:559;;21670:691;;;;;:::o;22367:780::-;22634:4;22672:2;22661:9;22657:18;22649:26;;22685:71;22753:1;22742:9;22738:17;22729:6;22685:71;:::i;:::-;22803:9;22797:4;22793:20;22788:2;22777:9;22773:18;22766:48;22831:118;22944:4;22935:6;22927;22831:118;:::i;:::-;22823:126;;22996:9;22990:4;22986:20;22981:2;22970:9;22966:18;22959:48;23024:116;23135:4;23126:6;23118;23024:116;:::i;:::-;23016:124;;22367:780;;;;;;;;:::o;23153:77::-;23190:7;23219:5;23208:16;;23153:77;;;:::o;23236:122::-;23309:24;23327:5;23309:24;:::i;:::-;23302:5;23299:35;23289:63;;23348:1;23345;23338:12;23289:63;23236:122;:::o;23364:143::-;23421:5;23452:6;23446:13;23437:22;;23468:33;23495:5;23468:33;:::i;:::-;23364:143;;;;:::o;23513:351::-;23583:6;23632:2;23620:9;23611:7;23607:23;23603:32;23600:119;;;23638:79;;:::i;:::-;23600:119;23758:1;23783:64;23839:7;23830:6;23819:9;23815:22;23783:64;:::i;:::-;23773:74;;23729:128;23513:351;;;;:::o;23870:271::-;24000:3;24022:93;24111:3;24102:6;24022:93;:::i;:::-;24015:100;;24132:3;24125:10;;23870:271;;;;:::o;24147:182::-;24287:34;24283:1;24275:6;24271:14;24264:58;24147:182;:::o;24335:366::-;24477:3;24498:67;24562:2;24557:3;24498:67;:::i;:::-;24491:74;;24574:93;24663:3;24574:93;:::i;:::-;24692:2;24687:3;24683:12;24676:19;;24335:366;;;:::o;24707:419::-;24873:4;24911:2;24900:9;24896:18;24888:26;;24960:9;24954:4;24950:20;24946:1;24935:9;24931:17;24924:47;24988:131;25114:4;24988:131;:::i;:::-;24980:139;;24707:419;;;:::o;25132:96::-;25166:8;25215:5;25210:3;25206:15;25185:36;;25132:96;;;:::o;25234:94::-;25272:7;25301:21;25316:5;25301:21;:::i;:::-;25290:32;;25234:94;;;:::o;25334:153::-;25437:43;25456:23;25473:5;25456:23;:::i;:::-;25437:43;:::i;:::-;25432:3;25425:56;25334:153;;:::o;25493:94::-;25526:8;25574:5;25570:2;25566:14;25545:35;;25493:94;;;:::o;25593:::-;25632:7;25661:20;25675:5;25661:20;:::i;:::-;25650:31;;25593:94;;;:::o;25693:100::-;25732:7;25761:26;25781:5;25761:26;:::i;:::-;25750:37;;25693:100;;;:::o;25799:157::-;25904:45;25924:24;25942:5;25924:24;:::i;:::-;25904:45;:::i;:::-;25899:3;25892:58;25799:157;;:::o;25962:1087::-;26236:3;26251:73;26320:3;26311:6;26251:73;:::i;:::-;26349:1;26344:3;26340:11;26333:18;;26361:73;26430:3;26421:6;26361:73;:::i;:::-;26459:1;26454:3;26450:11;26443:18;;26471:73;26540:3;26531:6;26471:73;:::i;:::-;26569:1;26564:3;26560:11;26553:18;;26581:75;26652:3;26643:6;26581:75;:::i;:::-;26681:2;26676:3;26672:12;26665:19;;26694:75;26765:3;26756:6;26694:75;:::i;:::-;26794:2;26789:3;26785:12;26778:19;;26807:75;26878:3;26869:6;26807:75;:::i;:::-;26907:2;26902:3;26898:12;26891:19;;26920:75;26991:3;26982:6;26920:75;:::i;:::-;27020:2;27015:3;27011:12;27004:19;;27040:3;27033:10;;25962:1087;;;;;;;;;;:::o;27055:102::-;27097:8;27144:5;27141:1;27137:13;27116:34;;27055:102;;;:::o;27163:848::-;27224:5;27231:4;27255:6;27246:15;;27279:5;27270:14;;27293:712;27314:1;27304:8;27301:15;27293:712;;;27409:4;27404:3;27400:14;27394:4;27391:24;27388:50;;;27418:18;;:::i;:::-;27388:50;27468:1;27458:8;27454:16;27451:451;;;27883:4;27876:5;27872:16;27863:25;;27451:451;27933:4;27927;27923:15;27915:23;;27963:32;27986:8;27963:32;:::i;:::-;27951:44;;27293:712;;;27163:848;;;;;;;:::o;28017:1073::-;28071:5;28262:8;28252:40;;28283:1;28274:10;;28285:5;;28252:40;28311:4;28301:36;;28328:1;28319:10;;28330:5;;28301:36;28397:4;28445:1;28440:27;;;;28481:1;28476:191;;;;28390:277;;28440:27;28458:1;28449:10;;28460:5;;;28476:191;28521:3;28511:8;28508:17;28505:43;;;28528:18;;:::i;:::-;28505:43;28577:8;28574:1;28570:16;28561:25;;28612:3;28605:5;28602:14;28599:40;;;28619:18;;:::i;:::-;28599:40;28652:5;;;28390:277;;28776:2;28766:8;28763:16;28757:3;28751:4;28748:13;28744:36;28726:2;28716:8;28713:16;28708:2;28702:4;28699:12;28695:35;28679:111;28676:246;;;28832:8;28826:4;28822:19;28813:28;;28867:3;28860:5;28857:14;28854:40;;;28874:18;;:::i;:::-;28854:40;28907:5;;28676:246;28947:42;28985:3;28975:8;28969:4;28966:1;28947:42;:::i;:::-;28932:57;;;;29021:4;29016:3;29012:14;29005:5;29002:25;28999:51;;;29030:18;;:::i;:::-;28999:51;29079:4;29072:5;29068:16;29059:25;;28017:1073;;;;;;:::o;29096:281::-;29154:5;29178:23;29196:4;29178:23;:::i;:::-;29170:31;;29222:25;29238:8;29222:25;:::i;:::-;29210:37;;29266:104;29303:66;29293:8;29287:4;29266:104;:::i;:::-;29257:113;;29096:281;;;;:::o;29383:410::-;29423:7;29446:20;29464:1;29446:20;:::i;:::-;29441:25;;29480:20;29498:1;29480:20;:::i;:::-;29475:25;;29535:1;29532;29528:9;29557:30;29575:11;29557:30;:::i;:::-;29546:41;;29736:1;29727:7;29723:15;29720:1;29717:22;29697:1;29690:9;29670:83;29647:139;;29766:18;;:::i;:::-;29647:139;29431:362;29383:410;;;;:::o;29799:165::-;29939:17;29935:1;29927:6;29923:14;29916:41;29799:165;:::o;29970:366::-;30112:3;30133:67;30197:2;30192:3;30133:67;:::i;:::-;30126:74;;30209:93;30298:3;30209:93;:::i;:::-;30327:2;30322:3;30318:12;30311:19;;29970:366;;;:::o;30342:419::-;30508:4;30546:2;30535:9;30531:18;30523:26;;30595:9;30589:4;30585:20;30581:1;30570:9;30566:17;30559:47;30623:131;30749:4;30623:131;:::i;:::-;30615:139;;30342:419;;;:::o;30767:170::-;30907:22;30903:1;30895:6;30891:14;30884:46;30767:170;:::o;30943:366::-;31085:3;31106:67;31170:2;31165:3;31106:67;:::i;:::-;31099:74;;31182:93;31271:3;31182:93;:::i;:::-;31300:2;31295:3;31291:12;31284:19;;30943:366;;;:::o;31315:419::-;31481:4;31519:2;31508:9;31504:18;31496:26;;31568:9;31562:4;31558:20;31554:1;31543:9;31539:17;31532:47;31596:131;31722:4;31596:131;:::i;:::-;31588:139;;31315:419;;;:::o;31740:180::-;31788:77;31785:1;31778:88;31885:4;31882:1;31875:15;31909:4;31906:1;31899:15;31926:174;32066:26;32062:1;32054:6;32050:14;32043:50;31926:174;:::o;32106:366::-;32248:3;32269:67;32333:2;32328:3;32269:67;:::i;:::-;32262:74;;32345:93;32434:3;32345:93;:::i;:::-;32463:2;32458:3;32454:12;32447:19;;32106:366;;;:::o;32478:419::-;32644:4;32682:2;32671:9;32667:18;32659:26;;32731:9;32725:4;32721:20;32717:1;32706:9;32702:17;32695:47;32759:131;32885:4;32759:131;:::i;:::-;32751:139;;32478:419;;;:::o;32903:181::-;33043:33;33039:1;33031:6;33027:14;33020:57;32903:181;:::o;33090:366::-;33232:3;33253:67;33317:2;33312:3;33253:67;:::i;:::-;33246:74;;33329:93;33418:3;33329:93;:::i;:::-;33447:2;33442:3;33438:12;33431:19;;33090:366;;;:::o;33462:419::-;33628:4;33666:2;33655:9;33651:18;33643:26;;33715:9;33709:4;33705:20;33701:1;33690:9;33686:17;33679:47;33743:131;33869:4;33743:131;:::i;:::-;33735:139;;33462:419;;;:::o;33887:221::-;34027:34;34023:1;34015:6;34011:14;34004:58;34096:4;34091:2;34083:6;34079:15;34072:29;33887:221;:::o;34114:366::-;34256:3;34277:67;34341:2;34336:3;34277:67;:::i;:::-;34270:74;;34353:93;34442:3;34353:93;:::i;:::-;34471:2;34466:3;34462:12;34455:19;;34114:366;;;:::o;34486:419::-;34652:4;34690:2;34679:9;34675:18;34667:26;;34739:9;34733:4;34729:20;34725:1;34714:9;34710:17;34703:47;34767:131;34893:4;34767:131;:::i;:::-;34759:139;;34486:419;;;:::o;34911:77::-;34948:7;34977:5;34966:16;;34911:77;;;:::o;34994:118::-;35081:24;35099:5;35081:24;:::i;:::-;35076:3;35069:37;34994:118;;:::o;35118:545::-;35291:4;35329:3;35318:9;35314:19;35306:27;;35343:71;35411:1;35400:9;35396:17;35387:6;35343:71;:::i;:::-;35424:68;35488:2;35477:9;35473:18;35464:6;35424:68;:::i;:::-;35502:72;35570:2;35559:9;35555:18;35546:6;35502:72;:::i;:::-;35584;35652:2;35641:9;35637:18;35628:6;35584:72;:::i;:::-;35118:545;;;;;;;:::o
Swarm Source
ipfs://1b4f9c2a7ecf3c1bae4d8506fcb228bf10089d94a3d1e40f975bdcc8428477f4
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.