Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 6 from a total of 6 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Exchange Lrd | 19021410 | 315 days ago | IN | 0 ETH | 0.00780865 | ||||
Exchange Lrd | 19020846 | 315 days ago | IN | 0 ETH | 0.00947885 | ||||
Exchange Lrd | 19020815 | 315 days ago | IN | 0 ETH | 0.01054051 | ||||
Exchange Lrd | 19020341 | 315 days ago | IN | 0 ETH | 0.01308138 | ||||
Transfer Ownersh... | 18999220 | 318 days ago | IN | 0 ETH | 0.00072041 | ||||
0x60806040 | 18999156 | 318 days ago | IN | 0 ETH | 0.05491918 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
LRDClaim
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2024-01-13 */ // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.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 anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing 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/utils/math/SafeMath.sol // OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the subtraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol // OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/draft-IERC20Permit.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612]. * * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't * need to send a transaction, and thus is not required to hold Ether at all. */ interface IERC20Permit { /** * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens, * given ``owner``'s signed approval. * * IMPORTANT: The same issues {IERC20-approve} has related to transaction * ordering also apply here. * * Emits an {Approval} event. * * Requirements: * * - `spender` cannot be the zero address. * - `deadline` must be a timestamp in the future. * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` * over the EIP712-formatted function arguments. * - the signature must use ``owner``'s current nonce (see {nonces}). * * For more information on the signature format, see the * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP * section]. */ function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; /** * @dev Returns the current nonce for `owner`. This value must be * included whenever a signature is generated for {permit}. * * Every successful call to {permit} increases ``owner``'s nonce by one. This * prevents a signature from being used multiple times. */ function nonces(address owner) external view returns (uint256); /** * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}. */ // solhint-disable-next-line func-name-mixedcase function DOMAIN_SEPARATOR() external view returns (bytes32); } // File: @openzeppelin/contracts/token/ERC20/IERC20.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `to`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address to, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `from` to `to` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 amount ) external returns (bool); } // File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC20/utils/SafeERC20.sol) pragma solidity ^0.8.0; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure (when the token * contract returns false). Tokens that return no value (and instead revert or * throw on failure) are also supported, non-reverting calls are assumed to be * successful. * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { using Address for address; function safeTransfer( IERC20 token, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom( IERC20 token, address from, address to, uint256 value ) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } /** * @dev Deprecated. This function has issues similar to the ones found in * {IERC20-approve}, and its usage is discouraged. * * Whenever possible, use {safeIncreaseAllowance} and * {safeDecreaseAllowance} instead. */ function safeApprove( IERC20 token, address spender, uint256 value ) internal { // safeApprove should only be called when setting an initial allowance, // or when resetting it to zero. To increase and decrease it, use // 'safeIncreaseAllowance' and 'safeDecreaseAllowance' require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance( IERC20 token, address spender, uint256 value ) internal { uint256 newAllowance = token.allowance(address(this), spender) + value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } function safeDecreaseAllowance( IERC20 token, address spender, uint256 value ) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); uint256 newAllowance = oldAllowance - value; _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance)); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } /** * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement * on the return value: the return value is optional (but if data is returned, it must not be false). * @param token The token targeted by the call. * @param data The call data (encoded using abi.encode or one of its variants). */ function _callOptionalReturn(IERC20 token, bytes memory data) private { // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that // the target address contains contract code and also asserts for success in the low-level call. bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); if (returndata.length > 0) { // Return data is optional require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } } } // File: contracts/LRD/LRDClaim.sol pragma solidity 0.8.9; contract LRDClaim is Ownable, ReentrancyGuard { using SafeMath for uint256; using SafeERC20 for IERC20; struct VerifierParams { address verifier; //verifier address bool statu; //verification state. when true, it can be exchanged for lord coins uint256 cdTime; //CD time uint256 maxWithdrawNum; //the maximum number of conversions in the CD time uint256 totalWithdrawAmount; //maximum total exchange amount } struct VerifierDatas { uint256 upDateTime; //the last withdraw time allowed uint256 withdrawAmount; //this verifier addresses the total amount of withdraw uint256 withdrawNum; //CD time, the number of withdraw } struct CDParams { uint256 cdTime; //CD time uint256 maxCdWithdrawAmount; //the maximum amount of conversions in the CD time uint256 maxTotalWithdrawAmount; //maximum total exchange amount } struct PlayerDatas { uint256 upDateTime; //the last withdraw time uint256 cdWithdrawAmount; //this wallet allows the total amount of money to be withdrawn at CD time uint256 totalWithdrawAmount; //the total amount allowed to withdraw from this wallet } address public lrd; uint256 private verifierKey; address public bank; //transfer token mapping(address => uint256) public nonce; mapping(uint256 => VerifierParams) public verifierParams; mapping(address => VerifierDatas) public verifierData; mapping(address => PlayerDatas) public player; CDParams public cDParams; event ChangeVerifier(uint256 verifierKey, address indexed verifier, uint256 cdTime, uint256 maxWithdrawNum, uint256 totalWithdrawAmount,uint256 indexed time); event AddVerifier(uint256 verifierKey, address indexed verifier, uint256 cdTime, uint256 maxWithdrawNum, uint256 totalWithdrawAmount,uint256 indexed time); event ChangeBank(address indexed bank, uint256 indexed time); event ExchangeLrd(address indexed owner, uint256 indexed amount, uint256 time); event ChangeCDParams(uint256 indexed CDTime, uint256 indexed MaxCdWithdrawAmount, uint256 indexed MaxTotalWithdrawAmount, uint256 time); constructor(address _verifier, address _token, address _bank) { require(_verifier != address(0), "Lrd: Address error"); require(_token != address(0), "Lrd: Address error"); require(_bank != address(0), "Lrd: Address error"); verifierKey++; VerifierParams storage params = verifierParams[verifierKey]; params.verifier = _verifier; params.statu = true; params.cdTime = 3600 * 24; params.totalWithdrawAmount = 1000000 * 10 ** 18; params.maxWithdrawNum = 1000000; cDParams.cdTime = 3600 * 24; cDParams.maxCdWithdrawAmount = 3000 * 10 ** 18; cDParams.maxTotalWithdrawAmount = 50000 * 10 ** 18; bank = _bank; lrd = _token; } // Can be exchanged for LRD function exchangeLrd(uint256 _verifierKey, uint256 _amount, uint8 _v, bytes32 _r, bytes32 _s) external nonReentrant { require(_amount > 0, "Lrd: Amount to exchange should be greater than 0"); VerifierParams storage params = verifierParams[_verifierKey]; require(params.statu, "Lrd: This verifier address is not available"); require(checkVerifierCDTime(_verifierKey, _amount), "Lrd: The amount or number of withdrawals is max"); require(checkPlayerCanExchange(_amount), "Lrd: The maximum quantity has been exchange"); { bytes memory prefix = "\x19Ethereum Signed Message:\n32"; bytes32 message = keccak256(abi.encodePacked(_verifierKey, _amount, msg.sender, address(this), block.chainid, nonce[msg.sender])); bytes32 hash = keccak256(abi.encodePacked(prefix, message)); address recover = ecrecover(hash, _v, _r, _s); require(recover == params.verifier, "Lrd: Verification failed about exchangeLrd"); } IERC20 _token = IERC20(lrd); require(_token.balanceOf(bank) >= _amount, "Lrd: There is not enough balance to export"); _token.safeTransferFrom(bank, msg.sender, _amount); VerifierDatas storage data = verifierData[params.verifier]; data.withdrawAmount += _amount; data.withdrawNum ++; nonce[msg.sender]++; PlayerDatas storage playerData = player[msg.sender]; if(block.timestamp - playerData.upDateTime > cDParams.cdTime) { playerData.upDateTime = block.timestamp; playerData.cdWithdrawAmount = _amount; } else { playerData.cdWithdrawAmount += _amount; } playerData.totalWithdrawAmount += _amount; emit ExchangeLrd(msg.sender, _amount, block.timestamp); } function checkVerifierCDTime(uint256 _verifierKey, uint256 _amount) private returns(bool) { VerifierParams storage params = verifierParams[_verifierKey]; VerifierDatas storage data = verifierData[params.verifier]; if((data.withdrawAmount + _amount) > params.totalWithdrawAmount) { return false; } //After CD time, data reset if((block.timestamp - data.upDateTime) >= params.cdTime) { data.upDateTime = block.timestamp; data.withdrawNum = 0; return true; } if(data.withdrawNum < params.maxWithdrawNum) { return true; } return false; } // Check if players can exchange LRD function checkPlayerCanExchange(uint256 _amount) private view returns(bool){ PlayerDatas storage playerData = player[msg.sender]; if(playerData.totalWithdrawAmount + _amount > cDParams.maxTotalWithdrawAmount || _amount > cDParams.maxCdWithdrawAmount) { return false; } if(block.timestamp - playerData.upDateTime < cDParams.cdTime) { return(playerData.cdWithdrawAmount + _amount <= cDParams.maxCdWithdrawAmount); } return true; } function changeVerifier(uint256 _verifierKey, address _verifier, bool _statu, uint256 _cdTime, uint256 _maxWithdrawNum, uint256 _totalWithdrawAmount) external onlyOwner { require(_verifier != address(0), "Lrd: Address error"); require(_totalWithdrawAmount > 0, "Lrd: Amount to import should be greater than 0"); VerifierParams storage params = verifierParams[_verifierKey]; require(params.verifier != address(0), "Lrd: This verifier key does not exist"); params.verifier = _verifier; params.statu = _statu; params.cdTime = _cdTime; params.maxWithdrawNum = _maxWithdrawNum; params.totalWithdrawAmount = _totalWithdrawAmount; emit ChangeVerifier(_verifierKey, _verifier, _cdTime, _maxWithdrawNum, _totalWithdrawAmount, block.timestamp); } function changeCDParams (uint256 _cdTime, uint256 _maxCdWithdrawAmount, uint256 _maxTotalWithdrawAmount) external onlyOwner { require(_cdTime > 0 , "Lrd: CD time should be greater than 0"); require(_maxCdWithdrawAmount > 0 , "Lrd: CD time, withdraw amount must be greater than 0"); require(_maxTotalWithdrawAmount > 0, "Lrd: Amount to withdraw should be greater than 0"); cDParams.cdTime = _cdTime; cDParams.maxCdWithdrawAmount = _maxCdWithdrawAmount; cDParams.maxTotalWithdrawAmount = _maxTotalWithdrawAmount; emit ChangeCDParams(_cdTime, _maxCdWithdrawAmount, _maxTotalWithdrawAmount, block.timestamp); } // Add a wallet with a verified signature function addVerifier(address _verifier, uint256 _cdTime, uint256 _maxWithdrawNum, uint256 _totalWithdrawAmount) external onlyOwner { require(_verifier != address(0), "Lrd: Address error"); require(_totalWithdrawAmount > 0, "Lrd: Amount to import should be greater than 0"); verifierKey++; VerifierParams storage params = verifierParams[verifierKey]; params.verifier = _verifier; params.statu = true; params.cdTime = _cdTime; params.totalWithdrawAmount = _totalWithdrawAmount; params.maxWithdrawNum = _maxWithdrawNum; emit AddVerifier(verifierKey, _verifier, _cdTime, _maxWithdrawNum, _totalWithdrawAmount, block.timestamp); } // Change the bank wallet that issues LRD function changeBank(address _bank) external onlyOwner { require(_bank != address(0), "Lrd: Address error"); bank = _bank; emit ChangeBank(_bank, block.timestamp); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_verifier","type":"address"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_bank","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"verifierKey","type":"uint256"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"internalType":"uint256","name":"cdTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWithdrawNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalWithdrawAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"AddVerifier","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"bank","type":"address"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ChangeBank","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"CDTime","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"MaxCdWithdrawAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"MaxTotalWithdrawAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ChangeCDParams","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"verifierKey","type":"uint256"},{"indexed":true,"internalType":"address","name":"verifier","type":"address"},{"indexed":false,"internalType":"uint256","name":"cdTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"maxWithdrawNum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalWithdrawAmount","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ChangeVerifier","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"time","type":"uint256"}],"name":"ExchangeLrd","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"},{"inputs":[{"internalType":"address","name":"_verifier","type":"address"},{"internalType":"uint256","name":"_cdTime","type":"uint256"},{"internalType":"uint256","name":"_maxWithdrawNum","type":"uint256"},{"internalType":"uint256","name":"_totalWithdrawAmount","type":"uint256"}],"name":"addVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bank","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cDParams","outputs":[{"internalType":"uint256","name":"cdTime","type":"uint256"},{"internalType":"uint256","name":"maxCdWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"maxTotalWithdrawAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_bank","type":"address"}],"name":"changeBank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cdTime","type":"uint256"},{"internalType":"uint256","name":"_maxCdWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"_maxTotalWithdrawAmount","type":"uint256"}],"name":"changeCDParams","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_verifierKey","type":"uint256"},{"internalType":"address","name":"_verifier","type":"address"},{"internalType":"bool","name":"_statu","type":"bool"},{"internalType":"uint256","name":"_cdTime","type":"uint256"},{"internalType":"uint256","name":"_maxWithdrawNum","type":"uint256"},{"internalType":"uint256","name":"_totalWithdrawAmount","type":"uint256"}],"name":"changeVerifier","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_verifierKey","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint8","name":"_v","type":"uint8"},{"internalType":"bytes32","name":"_r","type":"bytes32"},{"internalType":"bytes32","name":"_s","type":"bytes32"}],"name":"exchangeLrd","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"lrd","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonce","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"player","outputs":[{"internalType":"uint256","name":"upDateTime","type":"uint256"},{"internalType":"uint256","name":"cdWithdrawAmount","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawAmount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"verifierData","outputs":[{"internalType":"uint256","name":"upDateTime","type":"uint256"},{"internalType":"uint256","name":"withdrawAmount","type":"uint256"},{"internalType":"uint256","name":"withdrawNum","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"verifierParams","outputs":[{"internalType":"address","name":"verifier","type":"address"},{"internalType":"bool","name":"statu","type":"bool"},{"internalType":"uint256","name":"cdTime","type":"uint256"},{"internalType":"uint256","name":"maxWithdrawNum","type":"uint256"},{"internalType":"uint256","name":"totalWithdrawAmount","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b50604051620030843803806200308483398181016040528101906200003791906200046b565b620000576200004b6200033560201b60201c565b6200033d60201b60201c565b60018081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620000d1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000c89062000528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000144576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200013b9062000528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620001b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001ae9062000528565b60405180910390fd5b60036000815480929190620001cc9062000583565b919050555060006006600060035481526020019081526020016000209050838160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018160000160146101000a81548160ff02191690831515021790555062015180816001018190555069d3c21bcecceda10000008160030181905550620f424081600201819055506201518060096000018190555068a2a15d09519be00000600960010181905550690a968163f0a57b40000060096002018190555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050620005d1565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004338262000406565b9050919050565b620004458162000426565b81146200045157600080fd5b50565b60008151905062000465816200043a565b92915050565b60008060006060848603121562000487576200048662000401565b5b6000620004978682870162000454565b9350506020620004aa8682870162000454565b9250506040620004bd8682870162000454565b9150509250925092565b600082825260208201905092915050565b7f4c72643a2041646472657373206572726f720000000000000000000000000000600082015250565b600062000510601283620004c7565b91506200051d82620004d8565b602082019050919050565b60006020820190508181036000830152620005438162000501565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000819050919050565b6000620005908262000579565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620005c657620005c56200054a565b5b600182019050919050565b612aa380620005e16000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c8063715018a611610097578063c71ff31911610066578063c71ff31914610268578063d67634eb14610284578063e85a2aa4146102a0578063f2fde38b146102d2576100f5565b8063715018a61461020457806376cdb03b1461020e5780638da5cb5b1461022c578063ab3635161461024a576100f5565b80634a4b4488116100d35780634a4b4488146101665780634c54e1b5146101865780635f2cda2b146101b857806370ae92d2146101d4576100f5565b806317fd4ef3146100fa578063361d004f1461011657806338589dee14610132575b600080fd5b610114600480360381019061010f9190611813565b6102ee565b005b610130600480360381019061012b91906118c4565b61041c565b005b61014c600480360381019061014791906118f1565b61051c565b60405161015d959493929190611957565b60405180910390f35b61016e61057f565b60405161017d939291906119aa565b60405180910390f35b6101a0600480360381019061019b91906118c4565b610597565b6040516101af939291906119aa565b60405180910390f35b6101d260048036038101906101cd9190611a0d565b6105c1565b005b6101ee60048036038101906101e991906118c4565b6107ff565b6040516101fb9190611a9a565b60405180910390f35b61020c610817565b005b61021661082b565b6040516102239190611ab5565b60405180910390f35b610234610851565b6040516102419190611ab5565b60405180910390f35b61025261087a565b60405161025f9190611ab5565b60405180910390f35b610282600480360381019061027d9190611ad0565b6108a0565b005b61029e60048036038101906102999190611ba6565b610a65565b005b6102ba60048036038101906102b591906118c4565b611115565b6040516102c9939291906119aa565b60405180910390f35b6102ec60048036038101906102e791906118c4565b61113f565b005b6102f66111c3565b60008311610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090611ca4565b60405180910390fd5b6000821161037c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037390611d36565b60405180910390fd5b600081116103bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b690611dc8565b60405180910390fd5b8260096000018190555081600960010181905550806009600201819055508082847fc8c32405eb6d570c83c5ff1f8cf5e7ae5b70caa0b4a9fafd55737654d532fd664260405161040f9190611a9a565b60405180910390a4505050565b6104246111c3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048b90611e34565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428173ffffffffffffffffffffffffffffffffffffffff167f66c2278011b77b64ac12f822b7b04bb8c4cc99ad3d972e7052a43cce555c2af460405160405180910390a350565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16908060010154908060020154908060030154905085565b60098060000154908060010154908060020154905083565b60086020528060005260406000206000915090508060000154908060010154908060020154905083565b6105c96111c3565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063090611e34565b60405180910390fd5b6000811161067c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067390611ec6565b60405180910390fd5b6000600660008881526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071e90611f58565b60405180910390fd5b858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160000160146101000a81548160ff021916908315150217905550838160010181905550828160020181905550818160030181905550428673ffffffffffffffffffffffffffffffffffffffff167fbc84d1c55b2f4e22cbc0729e1e29937362c3ba0bb153efb34af2ef607b1be0ed898787876040516107ee9493929190611f78565b60405180910390a350505050505050565b60056020528060005260406000206000915090505481565b61081f6111c3565b6108296000611241565b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108a86111c3565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90611e34565b60405180910390fd5b6000811161095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290611ec6565b60405180910390fd5b6003600081548092919061096e90611fec565b919050555060006006600060035481526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018160000160146101000a81548160ff021916908315150217905550838160010181905550818160030181905550828160020181905550428573ffffffffffffffffffffffffffffffffffffffff167f94efae8753e7105bb1765539180cb4592fd532c66285faf54bb724cbc26184c3600354878787604051610a569493929190611f78565b60405180910390a35050505050565b60026001541415610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612081565b60405180910390fd5b600260018190555060008411610af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed90612113565b60405180910390fd5b60006006600087815260200190815260200160002090508060000160149054906101000a900460ff16610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b55906121a5565b60405180910390fd5b610b688686611305565b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90612237565b60405180910390fd5b610bb08561140a565b610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be6906122c9565b60405180910390fd5b60006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008787333046600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051602001610c8596959493929190612352565b60405160208183030381529060405280519060200120905060008282604051602001610cb292919061245d565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051610cef94939291906124a3565b6020604051602081039080840390855afa158015610d11573d6000803e3d6000fd5b5050506020604051035190508460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da69061255a565b60405180910390fd5b505050506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050858173ffffffffffffffffffffffffffffffffffffffff166370a08231600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610e369190611ab5565b60206040518083038186803b158015610e4e57600080fd5b505afa158015610e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e86919061258f565b1015610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe9061262e565b60405180910390fd5b610f16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633888473ffffffffffffffffffffffffffffffffffffffff166114ca909392919063ffffffff16565b6000600760008460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905086816001016000828254610f91919061264e565b92505081905550806002016000815480929190610fad90611fec565b9190505550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061100290611fec565b91905055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060096000015481600001544261106091906126a4565b111561107d57428160000181905550878160010181905550611099565b87816001016000828254611091919061264e565b925050819055505b878160020160008282546110ad919061264e565b92505081905550873373ffffffffffffffffffffffffffffffffffffffff167fc41b7d2d2721fe019135edb372786223dc56b3c4c24c7c2769105ce76948a478426040516110fb9190611a9a565b60405180910390a350505050600180819055505050505050565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b6111476111c3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae9061274a565b60405180910390fd5b6111c081611241565b50565b6111cb611553565b73ffffffffffffffffffffffffffffffffffffffff166111e9610851565b73ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611236906127b6565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806006600085815260200190815260200160002090506000600760008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160030154848260010154611399919061264e565b11156113aa57600092505050611404565b81600101548160000154426113bf91906126a4565b106113e25742816000018190555060008160020181905550600192505050611404565b8160020154816002015410156113fd57600192505050611404565b6000925050505b92915050565b600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600960020154838260020154611464919061264e565b1180611474575060096001015483115b156114835760009150506114c5565b60096000015481600001544261149991906126a4565b10156114bf576009600101548382600101546114b5919061264e565b11159150506114c5565b60019150505b919050565b61154d846323b872dd60e01b8585856040516024016114eb939291906127d6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061155b565b50505050565b600033905090565b60006115bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116229092919063ffffffff16565b905060008151111561161d57808060200190518101906115dd9190612822565b61161c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611613906128c1565b60405180910390fd5b5b505050565b6060611631848460008561163a565b90509392505050565b60608247101561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690612953565b60405180910390fd5b6116888561174e565b6116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906129bf565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116f091906129df565b60006040518083038185875af1925050503d806000811461172d576040519150601f19603f3d011682016040523d82523d6000602084013e611732565b606091505b5091509150611742828286611771565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315611781578290506117d1565b6000835111156117945782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c89190612a4b565b60405180910390fd5b9392505050565b600080fd5b6000819050919050565b6117f0816117dd565b81146117fb57600080fd5b50565b60008135905061180d816117e7565b92915050565b60008060006060848603121561182c5761182b6117d8565b5b600061183a868287016117fe565b935050602061184b868287016117fe565b925050604061185c868287016117fe565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061189182611866565b9050919050565b6118a181611886565b81146118ac57600080fd5b50565b6000813590506118be81611898565b92915050565b6000602082840312156118da576118d96117d8565b5b60006118e8848285016118af565b91505092915050565b600060208284031215611907576119066117d8565b5b6000611915848285016117fe565b91505092915050565b61192781611886565b82525050565b60008115159050919050565b6119428161192d565b82525050565b611951816117dd565b82525050565b600060a08201905061196c600083018861191e565b6119796020830187611939565b6119866040830186611948565b6119936060830185611948565b6119a06080830184611948565b9695505050505050565b60006060820190506119bf6000830186611948565b6119cc6020830185611948565b6119d96040830184611948565b949350505050565b6119ea8161192d565b81146119f557600080fd5b50565b600081359050611a07816119e1565b92915050565b60008060008060008060c08789031215611a2a57611a296117d8565b5b6000611a3889828a016117fe565b9650506020611a4989828a016118af565b9550506040611a5a89828a016119f8565b9450506060611a6b89828a016117fe565b9350506080611a7c89828a016117fe565b92505060a0611a8d89828a016117fe565b9150509295509295509295565b6000602082019050611aaf6000830184611948565b92915050565b6000602082019050611aca600083018461191e565b92915050565b60008060008060808587031215611aea57611ae96117d8565b5b6000611af8878288016118af565b9450506020611b09878288016117fe565b9350506040611b1a878288016117fe565b9250506060611b2b878288016117fe565b91505092959194509250565b600060ff82169050919050565b611b4d81611b37565b8114611b5857600080fd5b50565b600081359050611b6a81611b44565b92915050565b6000819050919050565b611b8381611b70565b8114611b8e57600080fd5b50565b600081359050611ba081611b7a565b92915050565b600080600080600060a08688031215611bc257611bc16117d8565b5b6000611bd0888289016117fe565b9550506020611be1888289016117fe565b9450506040611bf288828901611b5b565b9350506060611c0388828901611b91565b9250506080611c1488828901611b91565b9150509295509295909350565b600082825260208201905092915050565b7f4c72643a2043442074696d652073686f756c642062652067726561746572207460008201527f68616e2030000000000000000000000000000000000000000000000000000000602082015250565b6000611c8e602583611c21565b9150611c9982611c32565b604082019050919050565b60006020820190508181036000830152611cbd81611c81565b9050919050565b7f4c72643a2043442074696d652c20776974686472617720616d6f756e74206d7560008201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b6000611d20603483611c21565b9150611d2b82611cc4565b604082019050919050565b60006020820190508181036000830152611d4f81611d13565b9050919050565b7f4c72643a20416d6f756e7420746f2077697468647261772073686f756c64206260008201527f652067726561746572207468616e203000000000000000000000000000000000602082015250565b6000611db2603083611c21565b9150611dbd82611d56565b604082019050919050565b60006020820190508181036000830152611de181611da5565b9050919050565b7f4c72643a2041646472657373206572726f720000000000000000000000000000600082015250565b6000611e1e601283611c21565b9150611e2982611de8565b602082019050919050565b60006020820190508181036000830152611e4d81611e11565b9050919050565b7f4c72643a20416d6f756e7420746f20696d706f72742073686f756c642062652060008201527f67726561746572207468616e2030000000000000000000000000000000000000602082015250565b6000611eb0602e83611c21565b9150611ebb82611e54565b604082019050919050565b60006020820190508181036000830152611edf81611ea3565b9050919050565b7f4c72643a2054686973207665726966696572206b657920646f6573206e6f742060008201527f6578697374000000000000000000000000000000000000000000000000000000602082015250565b6000611f42602583611c21565b9150611f4d82611ee6565b604082019050919050565b60006020820190508181036000830152611f7181611f35565b9050919050565b6000608082019050611f8d6000830187611948565b611f9a6020830186611948565b611fa76040830185611948565b611fb46060830184611948565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ff7826117dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561202a57612029611fbd565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061206b601f83611c21565b915061207682612035565b602082019050919050565b6000602082019050818103600083015261209a8161205e565b9050919050565b7f4c72643a20416d6f756e7420746f2065786368616e67652073686f756c64206260008201527f652067726561746572207468616e203000000000000000000000000000000000602082015250565b60006120fd603083611c21565b9150612108826120a1565b604082019050919050565b6000602082019050818103600083015261212c816120f0565b9050919050565b7f4c72643a20546869732076657269666965722061646472657373206973206e6f60008201527f7420617661696c61626c65000000000000000000000000000000000000000000602082015250565b600061218f602b83611c21565b915061219a82612133565b604082019050919050565b600060208201905081810360008301526121be81612182565b9050919050565b7f4c72643a2054686520616d6f756e74206f72206e756d626572206f662077697460008201527f6864726177616c73206973206d61780000000000000000000000000000000000602082015250565b6000612221602f83611c21565b915061222c826121c5565b604082019050919050565b6000602082019050818103600083015261225081612214565b9050919050565b7f4c72643a20546865206d6178696d756d207175616e746974792068617320626560008201527f656e2065786368616e6765000000000000000000000000000000000000000000602082015250565b60006122b3602b83611c21565b91506122be82612257565b604082019050919050565b600060208201905081810360008301526122e2816122a6565b9050919050565b6000819050919050565b6123046122ff826117dd565b6122e9565b82525050565b60008160601b9050919050565b60006123228261230a565b9050919050565b600061233482612317565b9050919050565b61234c61234782611886565b612329565b82525050565b600061235e82896122f3565b60208201915061236e82886122f3565b60208201915061237e828761233b565b60148201915061238e828661233b565b60148201915061239e82856122f3565b6020820191506123ae82846122f3565b602082019150819050979650505050505050565b600081519050919050565b600081905092915050565b60005b838110156123f65780820151818401526020810190506123db565b83811115612405576000848401525b50505050565b6000612416826123c2565b61242081856123cd565b93506124308185602086016123d8565b80840191505092915050565b6000819050919050565b61245761245282611b70565b61243c565b82525050565b6000612469828561240b565b91506124758284612446565b6020820191508190509392505050565b61248e81611b70565b82525050565b61249d81611b37565b82525050565b60006080820190506124b86000830187612485565b6124c56020830186612494565b6124d26040830185612485565b6124df6060830184612485565b95945050505050565b7f4c72643a20566572696669636174696f6e206661696c65642061626f7574206560008201527f786368616e67654c726400000000000000000000000000000000000000000000602082015250565b6000612544602a83611c21565b915061254f826124e8565b604082019050919050565b6000602082019050818103600083015261257381612537565b9050919050565b600081519050612589816117e7565b92915050565b6000602082840312156125a5576125a46117d8565b5b60006125b38482850161257a565b91505092915050565b7f4c72643a205468657265206973206e6f7420656e6f7567682062616c616e636560008201527f20746f206578706f727400000000000000000000000000000000000000000000602082015250565b6000612618602a83611c21565b9150612623826125bc565b604082019050919050565b600060208201905081810360008301526126478161260b565b9050919050565b6000612659826117dd565b9150612664836117dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561269957612698611fbd565b5b828201905092915050565b60006126af826117dd565b91506126ba836117dd565b9250828210156126cd576126cc611fbd565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612734602683611c21565b915061273f826126d8565b604082019050919050565b6000602082019050818103600083015261276381612727565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127a0602083611c21565b91506127ab8261276a565b602082019050919050565b600060208201905081810360008301526127cf81612793565b9050919050565b60006060820190506127eb600083018661191e565b6127f8602083018561191e565b6128056040830184611948565b949350505050565b60008151905061281c816119e1565b92915050565b600060208284031215612838576128376117d8565b5b60006128468482850161280d565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006128ab602a83611c21565b91506128b68261284f565b604082019050919050565b600060208201905081810360008301526128da8161289e565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061293d602683611c21565b9150612948826128e1565b604082019050919050565b6000602082019050818103600083015261296c81612930565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006129a9601d83611c21565b91506129b482612973565b602082019050919050565b600060208201905081810360008301526129d88161299c565b9050919050565b60006129eb828461240b565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b6000612a1d826129f6565b612a278185611c21565b9350612a378185602086016123d8565b612a4081612a01565b840191505092915050565b60006020820190508181036000830152612a658184612a12565b90509291505056fea26469706673582212207b17af8172c269f38570bd8f2fbf2bb35fdd6909b57385b77c5967bb119a89c264736f6c6343000809003300000000000000000000000068d239c712b88a862168c561ee144a870f72135d000000000000000000000000a83e93de372654fb9278bd018a0ac2b4e69f157f000000000000000000000000486cc3d84a2da9747ee2914666c3981927b963c6
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106100f55760003560e01c8063715018a611610097578063c71ff31911610066578063c71ff31914610268578063d67634eb14610284578063e85a2aa4146102a0578063f2fde38b146102d2576100f5565b8063715018a61461020457806376cdb03b1461020e5780638da5cb5b1461022c578063ab3635161461024a576100f5565b80634a4b4488116100d35780634a4b4488146101665780634c54e1b5146101865780635f2cda2b146101b857806370ae92d2146101d4576100f5565b806317fd4ef3146100fa578063361d004f1461011657806338589dee14610132575b600080fd5b610114600480360381019061010f9190611813565b6102ee565b005b610130600480360381019061012b91906118c4565b61041c565b005b61014c600480360381019061014791906118f1565b61051c565b60405161015d959493929190611957565b60405180910390f35b61016e61057f565b60405161017d939291906119aa565b60405180910390f35b6101a0600480360381019061019b91906118c4565b610597565b6040516101af939291906119aa565b60405180910390f35b6101d260048036038101906101cd9190611a0d565b6105c1565b005b6101ee60048036038101906101e991906118c4565b6107ff565b6040516101fb9190611a9a565b60405180910390f35b61020c610817565b005b61021661082b565b6040516102239190611ab5565b60405180910390f35b610234610851565b6040516102419190611ab5565b60405180910390f35b61025261087a565b60405161025f9190611ab5565b60405180910390f35b610282600480360381019061027d9190611ad0565b6108a0565b005b61029e60048036038101906102999190611ba6565b610a65565b005b6102ba60048036038101906102b591906118c4565b611115565b6040516102c9939291906119aa565b60405180910390f35b6102ec60048036038101906102e791906118c4565b61113f565b005b6102f66111c3565b60008311610339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033090611ca4565b60405180910390fd5b6000821161037c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161037390611d36565b60405180910390fd5b600081116103bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b690611dc8565b60405180910390fd5b8260096000018190555081600960010181905550806009600201819055508082847fc8c32405eb6d570c83c5ff1f8cf5e7ae5b70caa0b4a9fafd55737654d532fd664260405161040f9190611a9a565b60405180910390a4505050565b6104246111c3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610494576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048b90611e34565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428173ffffffffffffffffffffffffffffffffffffffff167f66c2278011b77b64ac12f822b7b04bb8c4cc99ad3d972e7052a43cce555c2af460405160405180910390a350565b60066020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060000160149054906101000a900460ff16908060010154908060020154908060030154905085565b60098060000154908060010154908060020154905083565b60086020528060005260406000206000915090508060000154908060010154908060020154905083565b6105c96111c3565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610639576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161063090611e34565b60405180910390fd5b6000811161067c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067390611ec6565b60405180910390fd5b6000600660008881526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610727576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071e90611f58565b60405180910390fd5b858160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550848160000160146101000a81548160ff021916908315150217905550838160010181905550828160020181905550818160030181905550428673ffffffffffffffffffffffffffffffffffffffff167fbc84d1c55b2f4e22cbc0729e1e29937362c3ba0bb153efb34af2ef607b1be0ed898787876040516107ee9493929190611f78565b60405180910390a350505050505050565b60056020528060005260406000206000915090505481565b61081f6111c3565b6108296000611241565b565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108a86111c3565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090f90611e34565b60405180910390fd5b6000811161095b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095290611ec6565b60405180910390fd5b6003600081548092919061096e90611fec565b919050555060006006600060035481526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018160000160146101000a81548160ff021916908315150217905550838160010181905550818160030181905550828160020181905550428573ffffffffffffffffffffffffffffffffffffffff167f94efae8753e7105bb1765539180cb4592fd532c66285faf54bb724cbc26184c3600354878787604051610a569493929190611f78565b60405180910390a35050505050565b60026001541415610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612081565b60405180910390fd5b600260018190555060008411610af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aed90612113565b60405180910390fd5b60006006600087815260200190815260200160002090508060000160149054906101000a900460ff16610b5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b55906121a5565b60405180910390fd5b610b688686611305565b610ba7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9e90612237565b60405180910390fd5b610bb08561140a565b610bef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be6906122c9565b60405180910390fd5b60006040518060400160405280601c81526020017f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250905060008787333046600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054604051602001610c8596959493929190612352565b60405160208183030381529060405280519060200120905060008282604051602001610cb292919061245d565b604051602081830303815290604052805190602001209050600060018289898960405160008152602001604052604051610cef94939291906124a3565b6020604051602081039080840390855afa158015610d11573d6000803e3d6000fd5b5050506020604051035190508460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610daf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da69061255a565b60405180910390fd5b505050506000600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050858173ffffffffffffffffffffffffffffffffffffffff166370a08231600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401610e369190611ab5565b60206040518083038186803b158015610e4e57600080fd5b505afa158015610e62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e86919061258f565b1015610ec7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebe9061262e565b60405180910390fd5b610f16600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1633888473ffffffffffffffffffffffffffffffffffffffff166114ca909392919063ffffffff16565b6000600760008460000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905086816001016000828254610f91919061264e565b92505081905550806002016000815480929190610fad90611fec565b9190505550600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081548092919061100290611fec565b91905055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060096000015481600001544261106091906126a4565b111561107d57428160000181905550878160010181905550611099565b87816001016000828254611091919061264e565b925050819055505b878160020160008282546110ad919061264e565b92505081905550873373ffffffffffffffffffffffffffffffffffffffff167fc41b7d2d2721fe019135edb372786223dc56b3c4c24c7c2769105ce76948a478426040516110fb9190611a9a565b60405180910390a350505050600180819055505050505050565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b6111476111c3565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ae9061274a565b60405180910390fd5b6111c081611241565b50565b6111cb611553565b73ffffffffffffffffffffffffffffffffffffffff166111e9610851565b73ffffffffffffffffffffffffffffffffffffffff161461123f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611236906127b6565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000806006600085815260200190815260200160002090506000600760008360000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090508160030154848260010154611399919061264e565b11156113aa57600092505050611404565b81600101548160000154426113bf91906126a4565b106113e25742816000018190555060008160020181905550600192505050611404565b8160020154816002015410156113fd57600192505050611404565b6000925050505b92915050565b600080600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600960020154838260020154611464919061264e565b1180611474575060096001015483115b156114835760009150506114c5565b60096000015481600001544261149991906126a4565b10156114bf576009600101548382600101546114b5919061264e565b11159150506114c5565b60019150505b919050565b61154d846323b872dd60e01b8585856040516024016114eb939291906127d6565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061155b565b50505050565b600033905090565b60006115bd826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166116229092919063ffffffff16565b905060008151111561161d57808060200190518101906115dd9190612822565b61161c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611613906128c1565b60405180910390fd5b5b505050565b6060611631848460008561163a565b90509392505050565b60608247101561167f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167690612953565b60405180910390fd5b6116888561174e565b6116c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116be906129bf565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516116f091906129df565b60006040518083038185875af1925050503d806000811461172d576040519150601f19603f3d011682016040523d82523d6000602084013e611732565b606091505b5091509150611742828286611771565b92505050949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60608315611781578290506117d1565b6000835111156117945782518084602001fd5b816040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c89190612a4b565b60405180910390fd5b9392505050565b600080fd5b6000819050919050565b6117f0816117dd565b81146117fb57600080fd5b50565b60008135905061180d816117e7565b92915050565b60008060006060848603121561182c5761182b6117d8565b5b600061183a868287016117fe565b935050602061184b868287016117fe565b925050604061185c868287016117fe565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061189182611866565b9050919050565b6118a181611886565b81146118ac57600080fd5b50565b6000813590506118be81611898565b92915050565b6000602082840312156118da576118d96117d8565b5b60006118e8848285016118af565b91505092915050565b600060208284031215611907576119066117d8565b5b6000611915848285016117fe565b91505092915050565b61192781611886565b82525050565b60008115159050919050565b6119428161192d565b82525050565b611951816117dd565b82525050565b600060a08201905061196c600083018861191e565b6119796020830187611939565b6119866040830186611948565b6119936060830185611948565b6119a06080830184611948565b9695505050505050565b60006060820190506119bf6000830186611948565b6119cc6020830185611948565b6119d96040830184611948565b949350505050565b6119ea8161192d565b81146119f557600080fd5b50565b600081359050611a07816119e1565b92915050565b60008060008060008060c08789031215611a2a57611a296117d8565b5b6000611a3889828a016117fe565b9650506020611a4989828a016118af565b9550506040611a5a89828a016119f8565b9450506060611a6b89828a016117fe565b9350506080611a7c89828a016117fe565b92505060a0611a8d89828a016117fe565b9150509295509295509295565b6000602082019050611aaf6000830184611948565b92915050565b6000602082019050611aca600083018461191e565b92915050565b60008060008060808587031215611aea57611ae96117d8565b5b6000611af8878288016118af565b9450506020611b09878288016117fe565b9350506040611b1a878288016117fe565b9250506060611b2b878288016117fe565b91505092959194509250565b600060ff82169050919050565b611b4d81611b37565b8114611b5857600080fd5b50565b600081359050611b6a81611b44565b92915050565b6000819050919050565b611b8381611b70565b8114611b8e57600080fd5b50565b600081359050611ba081611b7a565b92915050565b600080600080600060a08688031215611bc257611bc16117d8565b5b6000611bd0888289016117fe565b9550506020611be1888289016117fe565b9450506040611bf288828901611b5b565b9350506060611c0388828901611b91565b9250506080611c1488828901611b91565b9150509295509295909350565b600082825260208201905092915050565b7f4c72643a2043442074696d652073686f756c642062652067726561746572207460008201527f68616e2030000000000000000000000000000000000000000000000000000000602082015250565b6000611c8e602583611c21565b9150611c9982611c32565b604082019050919050565b60006020820190508181036000830152611cbd81611c81565b9050919050565b7f4c72643a2043442074696d652c20776974686472617720616d6f756e74206d7560008201527f73742062652067726561746572207468616e2030000000000000000000000000602082015250565b6000611d20603483611c21565b9150611d2b82611cc4565b604082019050919050565b60006020820190508181036000830152611d4f81611d13565b9050919050565b7f4c72643a20416d6f756e7420746f2077697468647261772073686f756c64206260008201527f652067726561746572207468616e203000000000000000000000000000000000602082015250565b6000611db2603083611c21565b9150611dbd82611d56565b604082019050919050565b60006020820190508181036000830152611de181611da5565b9050919050565b7f4c72643a2041646472657373206572726f720000000000000000000000000000600082015250565b6000611e1e601283611c21565b9150611e2982611de8565b602082019050919050565b60006020820190508181036000830152611e4d81611e11565b9050919050565b7f4c72643a20416d6f756e7420746f20696d706f72742073686f756c642062652060008201527f67726561746572207468616e2030000000000000000000000000000000000000602082015250565b6000611eb0602e83611c21565b9150611ebb82611e54565b604082019050919050565b60006020820190508181036000830152611edf81611ea3565b9050919050565b7f4c72643a2054686973207665726966696572206b657920646f6573206e6f742060008201527f6578697374000000000000000000000000000000000000000000000000000000602082015250565b6000611f42602583611c21565b9150611f4d82611ee6565b604082019050919050565b60006020820190508181036000830152611f7181611f35565b9050919050565b6000608082019050611f8d6000830187611948565b611f9a6020830186611948565b611fa76040830185611948565b611fb46060830184611948565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611ff7826117dd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561202a57612029611fbd565b5b600182019050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061206b601f83611c21565b915061207682612035565b602082019050919050565b6000602082019050818103600083015261209a8161205e565b9050919050565b7f4c72643a20416d6f756e7420746f2065786368616e67652073686f756c64206260008201527f652067726561746572207468616e203000000000000000000000000000000000602082015250565b60006120fd603083611c21565b9150612108826120a1565b604082019050919050565b6000602082019050818103600083015261212c816120f0565b9050919050565b7f4c72643a20546869732076657269666965722061646472657373206973206e6f60008201527f7420617661696c61626c65000000000000000000000000000000000000000000602082015250565b600061218f602b83611c21565b915061219a82612133565b604082019050919050565b600060208201905081810360008301526121be81612182565b9050919050565b7f4c72643a2054686520616d6f756e74206f72206e756d626572206f662077697460008201527f6864726177616c73206973206d61780000000000000000000000000000000000602082015250565b6000612221602f83611c21565b915061222c826121c5565b604082019050919050565b6000602082019050818103600083015261225081612214565b9050919050565b7f4c72643a20546865206d6178696d756d207175616e746974792068617320626560008201527f656e2065786368616e6765000000000000000000000000000000000000000000602082015250565b60006122b3602b83611c21565b91506122be82612257565b604082019050919050565b600060208201905081810360008301526122e2816122a6565b9050919050565b6000819050919050565b6123046122ff826117dd565b6122e9565b82525050565b60008160601b9050919050565b60006123228261230a565b9050919050565b600061233482612317565b9050919050565b61234c61234782611886565b612329565b82525050565b600061235e82896122f3565b60208201915061236e82886122f3565b60208201915061237e828761233b565b60148201915061238e828661233b565b60148201915061239e82856122f3565b6020820191506123ae82846122f3565b602082019150819050979650505050505050565b600081519050919050565b600081905092915050565b60005b838110156123f65780820151818401526020810190506123db565b83811115612405576000848401525b50505050565b6000612416826123c2565b61242081856123cd565b93506124308185602086016123d8565b80840191505092915050565b6000819050919050565b61245761245282611b70565b61243c565b82525050565b6000612469828561240b565b91506124758284612446565b6020820191508190509392505050565b61248e81611b70565b82525050565b61249d81611b37565b82525050565b60006080820190506124b86000830187612485565b6124c56020830186612494565b6124d26040830185612485565b6124df6060830184612485565b95945050505050565b7f4c72643a20566572696669636174696f6e206661696c65642061626f7574206560008201527f786368616e67654c726400000000000000000000000000000000000000000000602082015250565b6000612544602a83611c21565b915061254f826124e8565b604082019050919050565b6000602082019050818103600083015261257381612537565b9050919050565b600081519050612589816117e7565b92915050565b6000602082840312156125a5576125a46117d8565b5b60006125b38482850161257a565b91505092915050565b7f4c72643a205468657265206973206e6f7420656e6f7567682062616c616e636560008201527f20746f206578706f727400000000000000000000000000000000000000000000602082015250565b6000612618602a83611c21565b9150612623826125bc565b604082019050919050565b600060208201905081810360008301526126478161260b565b9050919050565b6000612659826117dd565b9150612664836117dd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561269957612698611fbd565b5b828201905092915050565b60006126af826117dd565b91506126ba836117dd565b9250828210156126cd576126cc611fbd565b5b828203905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612734602683611c21565b915061273f826126d8565b604082019050919050565b6000602082019050818103600083015261276381612727565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127a0602083611c21565b91506127ab8261276a565b602082019050919050565b600060208201905081810360008301526127cf81612793565b9050919050565b60006060820190506127eb600083018661191e565b6127f8602083018561191e565b6128056040830184611948565b949350505050565b60008151905061281c816119e1565b92915050565b600060208284031215612838576128376117d8565b5b60006128468482850161280d565b91505092915050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006128ab602a83611c21565b91506128b68261284f565b604082019050919050565b600060208201905081810360008301526128da8161289e565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b600061293d602683611c21565b9150612948826128e1565b604082019050919050565b6000602082019050818103600083015261296c81612930565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b60006129a9601d83611c21565b91506129b482612973565b602082019050919050565b600060208201905081810360008301526129d88161299c565b9050919050565b60006129eb828461240b565b915081905092915050565b600081519050919050565b6000601f19601f8301169050919050565b6000612a1d826129f6565b612a278185611c21565b9350612a378185602086016123d8565b612a4081612a01565b840191505092915050565b60006020820190508181036000830152612a658184612a12565b90509291505056fea26469706673582212207b17af8172c269f38570bd8f2fbf2bb35fdd6909b57385b77c5967bb119a89c264736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000068d239c712b88a862168c561ee144a870f72135d000000000000000000000000a83e93de372654fb9278bd018a0ac2b4e69f157f000000000000000000000000486cc3d84a2da9747ee2914666c3981927b963c6
-----Decoded View---------------
Arg [0] : _verifier (address): 0x68d239C712B88a862168c561Ee144A870f72135d
Arg [1] : _token (address): 0xa83E93dE372654Fb9278Bd018A0Ac2B4E69f157f
Arg [2] : _bank (address): 0x486cC3D84a2dA9747Ee2914666c3981927B963C6
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000068d239c712b88a862168c561ee144a870f72135d
Arg [1] : 000000000000000000000000a83e93de372654fb9278bd018a0ac2b4e69f157f
Arg [2] : 000000000000000000000000486cc3d84a2da9747ee2914666c3981927b963c6
Deployed Bytecode Sourcemap
31771:9050:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39097:679;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40618:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33307:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;33484:24;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;33430:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38248:837;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33260:40;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5535:103;;;:::i;:::-;;33212:19;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4887:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33151:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39835:728;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35021:1920;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33370:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;5793:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39097:679;4773:13;:11;:13::i;:::-;39250:1:::1;39240:7;:11;39232:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39336:1;39313:20;:24;39305:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;39440:1;39414:23;:27;39406:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;39526:7;39508:8;:15;;:25;;;;39575:20;39544:8;:28;;:51;;;;39640:23;39606:8;:31;;:57;;;;39727:23;39705:20;39696:7;39681:87;39752:15;39681:87;;;;;;:::i;:::-;;;;;;;;39097:679:::0;;;:::o;40618:200::-;4773:13;:11;:13::i;:::-;40708:1:::1;40691:19;;:5;:19;;;;40683:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;40753:5;40746:4;;:12;;;;;;;;;;;;;;;;;;40794:15;40787:5;40776:34;;;;;;;;;;;;40618:200:::0;:::o;33307:56::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;33484:24::-;;;;;;;;;;;;;;;;;;;:::o;33430:45::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38248:837::-;4773:13;:11;:13::i;:::-;38457:1:::1;38436:23;;:9;:23;;;;38428:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38524:1;38501:20;:24;38493:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;38588:29;38620:14;:28;38635:12;38620:28;;;;;;;;;;;38588:60;;38694:1;38667:29;;:6;:15;;;;;;;;;;;;:29;;;;38659:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;38769:9;38751:6;:15;;;:27;;;;;;;;;;;;;;;;;;38805:6;38790;:12;;;:21;;;;;;;;;;;;;;;;;;38838:7;38822:6;:13;;:23;;;;38880:15;38856:6;:21;;:39;;;;38935:20;38906:6;:26;;:49;;;;39061:15;39002:9;38973:104;;;38988:12;39013:7;39022:15;39039:20;38973:104;;;;;;;;;:::i;:::-;;;;;;;;38417:668;38248:837:::0;;;;;;:::o;33260:40::-;;;;;;;;;;;;;;;;;:::o;5535:103::-;4773:13;:11;:13::i;:::-;5600:30:::1;5627:1;5600:18;:30::i;:::-;5535:103::o:0;33212:19::-;;;;;;;;;;;;;:::o;4887:87::-;4933:7;4960:6;;;;;;;;;;;4953:13;;4887:87;:::o;33151:18::-;;;;;;;;;;;;;:::o;39835:728::-;4773:13;:11;:13::i;:::-;40006:1:::1;39985:23;;:9;:23;;;;39977:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;40073:1;40050:20;:24;40042:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;40139:11;;:13;;;;;;;;;:::i;:::-;;;;;;40163:29;40195:14;:27;40210:11;;40195:27;;;;;;;;;;;40163:59;;40253:9;40235:6;:15;;;:27;;;;;;;;;;;;;;;;;;40289:4;40274:6;:12;;;:19;;;;;;;;;;;;;;;;;;40320:7;40304:6;:13;;:23;;;;40367:20;40338:6;:26;;:49;;;;40422:15;40398:6;:21;;:39;;;;40539:15;40480:9;40455:100;;;40467:11;;40491:7;40500:15;40517:20;40455:100;;;;;;;;;:::i;:::-;;;;;;;;39966:597;39835:728:::0;;;;:::o;35021:1920::-;1812:1;2410:7;;:19;;2402:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1812:1;2543:7;:18;;;;35166:1:::1;35156:7;:11;35148:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35242:29;35274:14;:28;35289:12;35274:28;;;;;;;;;;;35242:60;;35321:6;:12;;;;;;;;;;;;35313:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35400:42;35420:12;35434:7;35400:19;:42::i;:::-;35392:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35513:31;35536:7;35513:22;:31::i;:::-;35505:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35621:19;:60;;;;;;;;;;;;;;;;::::0;::::1;;35696:15;35749:12;35763:7;35772:10;35792:4;35799:13;35814:5;:17;35820:10;35814:17;;;;;;;;;;;;;;;;35732:100;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35722:111;;;;;;35696:137;;35848:12;35901:6;35909:7;35884:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35874:44;;;;;;35848:70;;35933:15;35959:27;35969:4;35975:2;35979;35983;35959:27;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;35933:53;;36022:6;:15;;;;;;;;;;;;36011:26;;:7;:26;;;36003:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;35606:490;;;;36110:13;36133:3;;;;;;;;;;;36110:27;;36182:7;36156:6;:16;;;36173:4;;;;;;;;;;;36156:22;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;36148:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;36247:50;36271:4;;;;;;;;;;;36277:10;36289:7;36247:6;:23;;;;:50;;;;;;:::i;:::-;36310:26;36339:12;:29;36352:6;:15;;;;;;;;;;;;36339:29;;;;;;;;;;;;;;;36310:58;;36404:7;36381:4;:19;;;:30;;;;;;;:::i;:::-;;;;;;;;36422:4;:16;;;:19;;;;;;;;;:::i;:::-;;;;;;36452:5;:17;36458:10;36452:17;;;;;;;;;;;;;;;;:19;;;;;;;;;:::i;:::-;;;;;;36492:30;36525:6;:18;36532:10;36525:18;;;;;;;;;;;;;;;36492:51;;36601:8;:15;;;36577:10;:21;;;36559:15;:39;;;;:::i;:::-;:57;36556:257;;;36663:15;36633:10;:21;;:45;;;;36723:7;36693:10;:27;;:37;;;;36556:257;;;36794:7;36763:10;:27;;;:38;;;;;;;:::i;:::-;;;;;;;;36556:257;36859:7;36825:10;:30;;;:41;;;;;;;:::i;:::-;;;;;;;;36908:7;36896:10;36884:49;;;36917:15;36884:49;;;;;;:::i;:::-;;;;;;;;35137:1804;;;;1768:1:::0;2722:7;:22;;;;35021:1920;;;;;:::o;33370:53::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5793:201::-;4773:13;:11;:13::i;:::-;5902:1:::1;5882:22;;:8;:22;;;;5874:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5958:28;5977:8;5958:18;:28::i;:::-;5793:201:::0;:::o;5052:132::-;5127:12;:10;:12::i;:::-;5116:23;;:7;:5;:7::i;:::-;:23;;;5108:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5052:132::o;6154:191::-;6228:16;6247:6;;;;;;;;;;;6228:25;;6273:8;6264:6;;:17;;;;;;;;;;;;;;;;;;6328:8;6297:40;;6318:8;6297:40;;;;;;;;;;;;6217:128;6154:191;:::o;36949:710::-;37033:4;37050:29;37082:14;:28;37097:12;37082:28;;;;;;;;;;;37050:60;;37121:26;37150:12;:29;37163:6;:15;;;;;;;;;;;;37150:29;;;;;;;;;;;;;;;37121:58;;37229:6;:26;;;37218:7;37196:4;:19;;;:29;;;;:::i;:::-;37195:60;37192:104;;;37279:5;37272:12;;;;;;37192:104;37387:6;:13;;;37367:4;:15;;;37349;:33;;;;:::i;:::-;37348:52;37345:179;;37436:15;37417:4;:15;;:34;;;;37485:1;37466:4;:16;;:20;;;;37508:4;37501:11;;;;;;37345:179;37566:6;:21;;;37547:4;:16;;;:40;37544:83;;;37611:4;37604:11;;;;;;37544:83;37646:5;37639:12;;;;36949:710;;;;;:::o;37709:527::-;37779:4;37795:30;37828:6;:18;37835:10;37828:18;;;;;;;;;;;;;;;37795:51;;37913:8;:31;;;37903:7;37870:10;:30;;;:40;;;;:::i;:::-;:74;:116;;;;37958:8;:28;;;37948:7;:38;37870:116;37867:160;;;38010:5;38003:12;;;;;37867:160;38084:8;:15;;;38060:10;:21;;;38042:15;:39;;;;:::i;:::-;:57;38039:166;;;38164:8;:28;;;38153:7;38123:10;:27;;;:37;;;;:::i;:::-;:69;;38116:77;;;;;38039:166;38224:4;38217:11;;;37709:527;;;;:::o;28123:248::-;28267:96;28287:5;28317:27;;;28346:4;28352:2;28356:5;28294:68;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28267:19;:96::i;:::-;28123:248;;;;:::o;3438:98::-;3491:7;3518:10;3511:17;;3438:98;:::o;30971:716::-;31395:23;31421:69;31449:4;31421:69;;;;;;;;;;;;;;;;;31429:5;31421:27;;;;:69;;;;;:::i;:::-;31395:95;;31525:1;31505:10;:17;:21;31501:179;;;31602:10;31591:30;;;;;;;;;;;;:::i;:::-;31583:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31501:179;31041:646;30971:716;;:::o;17371:229::-;17508:12;17540:52;17562:6;17570:4;17576:1;17579:12;17540:21;:52::i;:::-;17533:59;;17371:229;;;;;:::o;18491:510::-;18661:12;18719:5;18694:21;:30;;18686:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;18786:18;18797:6;18786:10;:18::i;:::-;18778:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;18852:12;18866:23;18893:6;:11;;18912:5;18919:4;18893:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18851:73;;;;18942:51;18959:7;18968:10;18980:12;18942:16;:51::i;:::-;18935:58;;;;18491:510;;;;;;:::o;14626:326::-;14686:4;14943:1;14921:7;:19;;;:23;14914:30;;14626:326;;;:::o;21177:762::-;21327:12;21356:7;21352:580;;;21387:10;21380:17;;;;21352:580;21521:1;21501:10;:17;:21;21497:424;;;21749:10;21743:17;21810:15;21797:10;21793:2;21789:19;21782:44;21497:424;21892:12;21885:20;;;;;;;;;;;:::i;:::-;;;;;;;;21177:762;;;;;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:619::-;767:6;775;783;832:2;820:9;811:7;807:23;803:32;800:119;;;838:79;;:::i;:::-;800:119;958:1;983:53;1028:7;1019:6;1008:9;1004:22;983:53;:::i;:::-;973:63;;929:117;1085:2;1111:53;1156:7;1147:6;1136:9;1132:22;1111:53;:::i;:::-;1101:63;;1056:118;1213:2;1239:53;1284:7;1275:6;1264:9;1260:22;1239:53;:::i;:::-;1229:63;;1184:118;690:619;;;;;:::o;1315:126::-;1352:7;1392:42;1385:5;1381:54;1370:65;;1315:126;;;:::o;1447:96::-;1484:7;1513:24;1531:5;1513:24;:::i;:::-;1502:35;;1447:96;;;:::o;1549:122::-;1622:24;1640:5;1622:24;:::i;:::-;1615:5;1612:35;1602:63;;1661:1;1658;1651:12;1602:63;1549:122;:::o;1677:139::-;1723:5;1761:6;1748:20;1739:29;;1777:33;1804:5;1777:33;:::i;:::-;1677:139;;;;:::o;1822:329::-;1881:6;1930:2;1918:9;1909:7;1905:23;1901:32;1898:119;;;1936:79;;:::i;:::-;1898:119;2056:1;2081:53;2126:7;2117:6;2106:9;2102:22;2081:53;:::i;:::-;2071:63;;2027:117;1822:329;;;;:::o;2157:::-;2216:6;2265:2;2253:9;2244:7;2240:23;2236:32;2233:119;;;2271:79;;:::i;:::-;2233:119;2391:1;2416:53;2461:7;2452:6;2441:9;2437:22;2416:53;:::i;:::-;2406:63;;2362:117;2157:329;;;;:::o;2492:118::-;2579:24;2597:5;2579:24;:::i;:::-;2574:3;2567:37;2492:118;;:::o;2616:90::-;2650:7;2693:5;2686:13;2679:21;2668:32;;2616:90;;;:::o;2712:109::-;2793:21;2808:5;2793:21;:::i;:::-;2788:3;2781:34;2712:109;;:::o;2827:118::-;2914:24;2932:5;2914:24;:::i;:::-;2909:3;2902:37;2827:118;;:::o;2951:652::-;3150:4;3188:3;3177:9;3173:19;3165:27;;3202:71;3270:1;3259:9;3255:17;3246:6;3202:71;:::i;:::-;3283:66;3345:2;3334:9;3330:18;3321:6;3283:66;:::i;:::-;3359:72;3427:2;3416:9;3412:18;3403:6;3359:72;:::i;:::-;3441;3509:2;3498:9;3494:18;3485:6;3441:72;:::i;:::-;3523:73;3591:3;3580:9;3576:19;3567:6;3523:73;:::i;:::-;2951:652;;;;;;;;:::o;3609:442::-;3758:4;3796:2;3785:9;3781:18;3773:26;;3809:71;3877:1;3866:9;3862:17;3853:6;3809:71;:::i;:::-;3890:72;3958:2;3947:9;3943:18;3934:6;3890:72;:::i;:::-;3972;4040:2;4029:9;4025:18;4016:6;3972:72;:::i;:::-;3609:442;;;;;;:::o;4057:116::-;4127:21;4142:5;4127:21;:::i;:::-;4120:5;4117:32;4107:60;;4163:1;4160;4153:12;4107:60;4057:116;:::o;4179:133::-;4222:5;4260:6;4247:20;4238:29;;4276:30;4300:5;4276:30;:::i;:::-;4179:133;;;;:::o;4318:1051::-;4419:6;4427;4435;4443;4451;4459;4508:3;4496:9;4487:7;4483:23;4479:33;4476:120;;;4515:79;;:::i;:::-;4476:120;4635:1;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4606:117;4762:2;4788:53;4833:7;4824:6;4813:9;4809:22;4788:53;:::i;:::-;4778:63;;4733:118;4890:2;4916:50;4958:7;4949:6;4938:9;4934:22;4916:50;:::i;:::-;4906:60;;4861:115;5015:2;5041:53;5086:7;5077:6;5066:9;5062:22;5041:53;:::i;:::-;5031:63;;4986:118;5143:3;5170:53;5215:7;5206:6;5195:9;5191:22;5170:53;:::i;:::-;5160:63;;5114:119;5272:3;5299:53;5344:7;5335:6;5324:9;5320:22;5299:53;:::i;:::-;5289:63;;5243:119;4318:1051;;;;;;;;:::o;5375:222::-;5468:4;5506:2;5495:9;5491:18;5483:26;;5519:71;5587:1;5576:9;5572:17;5563:6;5519:71;:::i;:::-;5375:222;;;;:::o;5603:::-;5696:4;5734:2;5723:9;5719:18;5711:26;;5747:71;5815:1;5804:9;5800:17;5791:6;5747:71;:::i;:::-;5603:222;;;;:::o;5831:765::-;5917:6;5925;5933;5941;5990:3;5978:9;5969:7;5965:23;5961:33;5958:120;;;5997:79;;:::i;:::-;5958:120;6117:1;6142:53;6187:7;6178:6;6167:9;6163:22;6142:53;:::i;:::-;6132:63;;6088:117;6244:2;6270:53;6315:7;6306:6;6295:9;6291:22;6270:53;:::i;:::-;6260:63;;6215:118;6372:2;6398:53;6443:7;6434:6;6423:9;6419:22;6398:53;:::i;:::-;6388:63;;6343:118;6500:2;6526:53;6571:7;6562:6;6551:9;6547:22;6526:53;:::i;:::-;6516:63;;6471:118;5831:765;;;;;;;:::o;6602:86::-;6637:7;6677:4;6670:5;6666:16;6655:27;;6602:86;;;:::o;6694:118::-;6765:22;6781:5;6765:22;:::i;:::-;6758:5;6755:33;6745:61;;6802:1;6799;6792:12;6745:61;6694:118;:::o;6818:135::-;6862:5;6900:6;6887:20;6878:29;;6916:31;6941:5;6916:31;:::i;:::-;6818:135;;;;:::o;6959:77::-;6996:7;7025:5;7014:16;;6959:77;;;:::o;7042:122::-;7115:24;7133:5;7115:24;:::i;:::-;7108:5;7105:35;7095:63;;7154:1;7151;7144:12;7095:63;7042:122;:::o;7170:139::-;7216:5;7254:6;7241:20;7232:29;;7270:33;7297:5;7270:33;:::i;:::-;7170:139;;;;:::o;7315:907::-;7408:6;7416;7424;7432;7440;7489:3;7477:9;7468:7;7464:23;7460:33;7457:120;;;7496:79;;:::i;:::-;7457:120;7616:1;7641:53;7686:7;7677:6;7666:9;7662:22;7641:53;:::i;:::-;7631:63;;7587:117;7743:2;7769:53;7814:7;7805:6;7794:9;7790:22;7769:53;:::i;:::-;7759:63;;7714:118;7871:2;7897:51;7940:7;7931:6;7920:9;7916:22;7897:51;:::i;:::-;7887:61;;7842:116;7997:2;8023:53;8068:7;8059:6;8048:9;8044:22;8023:53;:::i;:::-;8013:63;;7968:118;8125:3;8152:53;8197:7;8188:6;8177:9;8173:22;8152:53;:::i;:::-;8142:63;;8096:119;7315:907;;;;;;;;:::o;8228:169::-;8312:11;8346:6;8341:3;8334:19;8386:4;8381:3;8377:14;8362:29;;8228:169;;;;:::o;8403:224::-;8543:34;8539:1;8531:6;8527:14;8520:58;8612:7;8607:2;8599:6;8595:15;8588:32;8403:224;:::o;8633:366::-;8775:3;8796:67;8860:2;8855:3;8796:67;:::i;:::-;8789:74;;8872:93;8961:3;8872:93;:::i;:::-;8990:2;8985:3;8981:12;8974:19;;8633:366;;;:::o;9005:419::-;9171:4;9209:2;9198:9;9194:18;9186:26;;9258:9;9252:4;9248:20;9244:1;9233:9;9229:17;9222:47;9286:131;9412:4;9286:131;:::i;:::-;9278:139;;9005:419;;;:::o;9430:239::-;9570:34;9566:1;9558:6;9554:14;9547:58;9639:22;9634:2;9626:6;9622:15;9615:47;9430:239;:::o;9675:366::-;9817:3;9838:67;9902:2;9897:3;9838:67;:::i;:::-;9831:74;;9914:93;10003:3;9914:93;:::i;:::-;10032:2;10027:3;10023:12;10016:19;;9675:366;;;:::o;10047:419::-;10213:4;10251:2;10240:9;10236:18;10228:26;;10300:9;10294:4;10290:20;10286:1;10275:9;10271:17;10264:47;10328:131;10454:4;10328:131;:::i;:::-;10320:139;;10047:419;;;:::o;10472:235::-;10612:34;10608:1;10600:6;10596:14;10589:58;10681:18;10676:2;10668:6;10664:15;10657:43;10472:235;:::o;10713:366::-;10855:3;10876:67;10940:2;10935:3;10876:67;:::i;:::-;10869:74;;10952:93;11041:3;10952:93;:::i;:::-;11070:2;11065:3;11061:12;11054:19;;10713:366;;;:::o;11085:419::-;11251:4;11289:2;11278:9;11274:18;11266:26;;11338:9;11332:4;11328:20;11324:1;11313:9;11309:17;11302:47;11366:131;11492:4;11366:131;:::i;:::-;11358:139;;11085:419;;;:::o;11510:168::-;11650:20;11646:1;11638:6;11634:14;11627:44;11510:168;:::o;11684:366::-;11826:3;11847:67;11911:2;11906:3;11847:67;:::i;:::-;11840:74;;11923:93;12012:3;11923:93;:::i;:::-;12041:2;12036:3;12032:12;12025:19;;11684:366;;;:::o;12056:419::-;12222:4;12260:2;12249:9;12245:18;12237:26;;12309:9;12303:4;12299:20;12295:1;12284:9;12280:17;12273:47;12337:131;12463:4;12337:131;:::i;:::-;12329:139;;12056:419;;;:::o;12481:233::-;12621:34;12617:1;12609:6;12605:14;12598:58;12690:16;12685:2;12677:6;12673:15;12666:41;12481:233;:::o;12720:366::-;12862:3;12883:67;12947:2;12942:3;12883:67;:::i;:::-;12876:74;;12959:93;13048:3;12959:93;:::i;:::-;13077:2;13072:3;13068:12;13061:19;;12720:366;;;:::o;13092:419::-;13258:4;13296:2;13285:9;13281:18;13273:26;;13345:9;13339:4;13335:20;13331:1;13320:9;13316:17;13309:47;13373:131;13499:4;13373:131;:::i;:::-;13365:139;;13092:419;;;:::o;13517:224::-;13657:34;13653:1;13645:6;13641:14;13634:58;13726:7;13721:2;13713:6;13709:15;13702:32;13517:224;:::o;13747:366::-;13889:3;13910:67;13974:2;13969:3;13910:67;:::i;:::-;13903:74;;13986:93;14075:3;13986:93;:::i;:::-;14104:2;14099:3;14095:12;14088:19;;13747:366;;;:::o;14119:419::-;14285:4;14323:2;14312:9;14308:18;14300:26;;14372:9;14366:4;14362:20;14358:1;14347:9;14343:17;14336:47;14400:131;14526:4;14400:131;:::i;:::-;14392:139;;14119:419;;;:::o;14544:553::-;14721:4;14759:3;14748:9;14744:19;14736:27;;14773:71;14841:1;14830:9;14826:17;14817:6;14773:71;:::i;:::-;14854:72;14922:2;14911:9;14907:18;14898:6;14854:72;:::i;:::-;14936;15004:2;14993:9;14989:18;14980:6;14936:72;:::i;:::-;15018;15086:2;15075:9;15071:18;15062:6;15018:72;:::i;:::-;14544:553;;;;;;;:::o;15103:180::-;15151:77;15148:1;15141:88;15248:4;15245:1;15238:15;15272:4;15269:1;15262:15;15289:233;15328:3;15351:24;15369:5;15351:24;:::i;:::-;15342:33;;15397:66;15390:5;15387:77;15384:103;;;15467:18;;:::i;:::-;15384:103;15514:1;15507:5;15503:13;15496:20;;15289:233;;;:::o;15528:181::-;15668:33;15664:1;15656:6;15652:14;15645:57;15528:181;:::o;15715:366::-;15857:3;15878:67;15942:2;15937:3;15878:67;:::i;:::-;15871:74;;15954:93;16043:3;15954:93;:::i;:::-;16072:2;16067:3;16063:12;16056:19;;15715:366;;;:::o;16087:419::-;16253:4;16291:2;16280:9;16276:18;16268:26;;16340:9;16334:4;16330:20;16326:1;16315:9;16311:17;16304:47;16368:131;16494:4;16368:131;:::i;:::-;16360:139;;16087:419;;;:::o;16512:235::-;16652:34;16648:1;16640:6;16636:14;16629:58;16721:18;16716:2;16708:6;16704:15;16697:43;16512:235;:::o;16753:366::-;16895:3;16916:67;16980:2;16975:3;16916:67;:::i;:::-;16909:74;;16992:93;17081:3;16992:93;:::i;:::-;17110:2;17105:3;17101:12;17094:19;;16753:366;;;:::o;17125:419::-;17291:4;17329:2;17318:9;17314:18;17306:26;;17378:9;17372:4;17368:20;17364:1;17353:9;17349:17;17342:47;17406:131;17532:4;17406:131;:::i;:::-;17398:139;;17125:419;;;:::o;17550:230::-;17690:34;17686:1;17678:6;17674:14;17667:58;17759:13;17754:2;17746:6;17742:15;17735:38;17550:230;:::o;17786:366::-;17928:3;17949:67;18013:2;18008:3;17949:67;:::i;:::-;17942:74;;18025:93;18114:3;18025:93;:::i;:::-;18143:2;18138:3;18134:12;18127:19;;17786:366;;;:::o;18158:419::-;18324:4;18362:2;18351:9;18347:18;18339:26;;18411:9;18405:4;18401:20;18397:1;18386:9;18382:17;18375:47;18439:131;18565:4;18439:131;:::i;:::-;18431:139;;18158:419;;;:::o;18583:234::-;18723:34;18719:1;18711:6;18707:14;18700:58;18792:17;18787:2;18779:6;18775:15;18768:42;18583:234;:::o;18823:366::-;18965:3;18986:67;19050:2;19045:3;18986:67;:::i;:::-;18979:74;;19062:93;19151:3;19062:93;:::i;:::-;19180:2;19175:3;19171:12;19164:19;;18823:366;;;:::o;19195:419::-;19361:4;19399:2;19388:9;19384:18;19376:26;;19448:9;19442:4;19438:20;19434:1;19423:9;19419:17;19412:47;19476:131;19602:4;19476:131;:::i;:::-;19468:139;;19195:419;;;:::o;19620:230::-;19760:34;19756:1;19748:6;19744:14;19737:58;19829:13;19824:2;19816:6;19812:15;19805:38;19620:230;:::o;19856:366::-;19998:3;20019:67;20083:2;20078:3;20019:67;:::i;:::-;20012:74;;20095:93;20184:3;20095:93;:::i;:::-;20213:2;20208:3;20204:12;20197:19;;19856:366;;;:::o;20228:419::-;20394:4;20432:2;20421:9;20417:18;20409:26;;20481:9;20475:4;20471:20;20467:1;20456:9;20452:17;20445:47;20509:131;20635:4;20509:131;:::i;:::-;20501:139;;20228:419;;;:::o;20653:79::-;20692:7;20721:5;20710:16;;20653:79;;;:::o;20738:157::-;20843:45;20863:24;20881:5;20863:24;:::i;:::-;20843:45;:::i;:::-;20838:3;20831:58;20738:157;;:::o;20901:94::-;20934:8;20982:5;20978:2;20974:14;20953:35;;20901:94;;;:::o;21001:::-;21040:7;21069:20;21083:5;21069:20;:::i;:::-;21058:31;;21001:94;;;:::o;21101:100::-;21140:7;21169:26;21189:5;21169:26;:::i;:::-;21158:37;;21101:100;;;:::o;21207:157::-;21312:45;21332:24;21350:5;21332:24;:::i;:::-;21312:45;:::i;:::-;21307:3;21300:58;21207:157;;:::o;21370:961::-;21622:3;21637:75;21708:3;21699:6;21637:75;:::i;:::-;21737:2;21732:3;21728:12;21721:19;;21750:75;21821:3;21812:6;21750:75;:::i;:::-;21850:2;21845:3;21841:12;21834:19;;21863:75;21934:3;21925:6;21863:75;:::i;:::-;21963:2;21958:3;21954:12;21947:19;;21976:75;22047:3;22038:6;21976:75;:::i;:::-;22076:2;22071:3;22067:12;22060:19;;22089:75;22160:3;22151:6;22089:75;:::i;:::-;22189:2;22184:3;22180:12;22173:19;;22202:75;22273:3;22264:6;22202:75;:::i;:::-;22302:2;22297:3;22293:12;22286:19;;22322:3;22315:10;;21370:961;;;;;;;;;:::o;22337:98::-;22388:6;22422:5;22416:12;22406:22;;22337:98;;;:::o;22441:147::-;22542:11;22579:3;22564:18;;22441:147;;;;:::o;22594:307::-;22662:1;22672:113;22686:6;22683:1;22680:13;22672:113;;;22771:1;22766:3;22762:11;22756:18;22752:1;22747:3;22743:11;22736:39;22708:2;22705:1;22701:10;22696:15;;22672:113;;;22803:6;22800:1;22797:13;22794:101;;;22883:1;22874:6;22869:3;22865:16;22858:27;22794:101;22643:258;22594:307;;;:::o;22907:373::-;23011:3;23039:38;23071:5;23039:38;:::i;:::-;23093:88;23174:6;23169:3;23093:88;:::i;:::-;23086:95;;23190:52;23235:6;23230:3;23223:4;23216:5;23212:16;23190:52;:::i;:::-;23267:6;23262:3;23258:16;23251:23;;23015:265;22907:373;;;;:::o;23286:79::-;23325:7;23354:5;23343:16;;23286:79;;;:::o;23371:157::-;23476:45;23496:24;23514:5;23496:24;:::i;:::-;23476:45;:::i;:::-;23471:3;23464:58;23371:157;;:::o;23534:412::-;23692:3;23714:93;23803:3;23794:6;23714:93;:::i;:::-;23707:100;;23817:75;23888:3;23879:6;23817:75;:::i;:::-;23917:2;23912:3;23908:12;23901:19;;23937:3;23930:10;;23534:412;;;;;:::o;23952:118::-;24039:24;24057:5;24039:24;:::i;:::-;24034:3;24027:37;23952:118;;:::o;24076:112::-;24159:22;24175:5;24159:22;:::i;:::-;24154:3;24147:35;24076:112;;:::o;24194:545::-;24367:4;24405:3;24394:9;24390:19;24382:27;;24419:71;24487:1;24476:9;24472:17;24463:6;24419:71;:::i;:::-;24500:68;24564:2;24553:9;24549:18;24540:6;24500:68;:::i;:::-;24578:72;24646:2;24635:9;24631:18;24622:6;24578:72;:::i;:::-;24660;24728:2;24717:9;24713:18;24704:6;24660:72;:::i;:::-;24194:545;;;;;;;:::o;24745:229::-;24885:34;24881:1;24873:6;24869:14;24862:58;24954:12;24949:2;24941:6;24937:15;24930:37;24745:229;:::o;24980:366::-;25122:3;25143:67;25207:2;25202:3;25143:67;:::i;:::-;25136:74;;25219:93;25308:3;25219:93;:::i;:::-;25337:2;25332:3;25328:12;25321:19;;24980:366;;;:::o;25352:419::-;25518:4;25556:2;25545:9;25541:18;25533:26;;25605:9;25599:4;25595:20;25591:1;25580:9;25576:17;25569:47;25633:131;25759:4;25633:131;:::i;:::-;25625:139;;25352:419;;;:::o;25777:143::-;25834:5;25865:6;25859:13;25850:22;;25881:33;25908:5;25881:33;:::i;:::-;25777:143;;;;:::o;25926:351::-;25996:6;26045:2;26033:9;26024:7;26020:23;26016:32;26013:119;;;26051:79;;:::i;:::-;26013:119;26171:1;26196:64;26252:7;26243:6;26232:9;26228:22;26196:64;:::i;:::-;26186:74;;26142:128;25926:351;;;;:::o;26283:229::-;26423:34;26419:1;26411:6;26407:14;26400:58;26492:12;26487:2;26479:6;26475:15;26468:37;26283:229;:::o;26518:366::-;26660:3;26681:67;26745:2;26740:3;26681:67;:::i;:::-;26674:74;;26757:93;26846:3;26757:93;:::i;:::-;26875:2;26870:3;26866:12;26859:19;;26518:366;;;:::o;26890:419::-;27056:4;27094:2;27083:9;27079:18;27071:26;;27143:9;27137:4;27133:20;27129:1;27118:9;27114:17;27107:47;27171:131;27297:4;27171:131;:::i;:::-;27163:139;;26890:419;;;:::o;27315:305::-;27355:3;27374:20;27392:1;27374:20;:::i;:::-;27369:25;;27408:20;27426:1;27408:20;:::i;:::-;27403:25;;27562:1;27494:66;27490:74;27487:1;27484:81;27481:107;;;27568:18;;:::i;:::-;27481:107;27612:1;27609;27605:9;27598:16;;27315:305;;;;:::o;27626:191::-;27666:4;27686:20;27704:1;27686:20;:::i;:::-;27681:25;;27720:20;27738:1;27720:20;:::i;:::-;27715:25;;27759:1;27756;27753:8;27750:34;;;27764:18;;:::i;:::-;27750:34;27809:1;27806;27802:9;27794:17;;27626:191;;;;:::o;27823:225::-;27963:34;27959:1;27951:6;27947:14;27940:58;28032:8;28027:2;28019:6;28015:15;28008:33;27823:225;:::o;28054:366::-;28196:3;28217:67;28281:2;28276:3;28217:67;:::i;:::-;28210:74;;28293:93;28382:3;28293:93;:::i;:::-;28411:2;28406:3;28402:12;28395:19;;28054:366;;;:::o;28426:419::-;28592:4;28630:2;28619:9;28615:18;28607:26;;28679:9;28673:4;28669:20;28665:1;28654:9;28650:17;28643:47;28707:131;28833:4;28707:131;:::i;:::-;28699:139;;28426:419;;;:::o;28851:182::-;28991:34;28987:1;28979:6;28975:14;28968:58;28851:182;:::o;29039:366::-;29181:3;29202:67;29266:2;29261:3;29202:67;:::i;:::-;29195:74;;29278:93;29367:3;29278:93;:::i;:::-;29396:2;29391:3;29387:12;29380:19;;29039:366;;;:::o;29411:419::-;29577:4;29615:2;29604:9;29600:18;29592:26;;29664:9;29658:4;29654:20;29650:1;29639:9;29635:17;29628:47;29692:131;29818:4;29692:131;:::i;:::-;29684:139;;29411:419;;;:::o;29836:442::-;29985:4;30023:2;30012:9;30008:18;30000:26;;30036:71;30104:1;30093:9;30089:17;30080:6;30036:71;:::i;:::-;30117:72;30185:2;30174:9;30170:18;30161:6;30117:72;:::i;:::-;30199;30267:2;30256:9;30252:18;30243:6;30199:72;:::i;:::-;29836:442;;;;;;:::o;30284:137::-;30338:5;30369:6;30363:13;30354:22;;30385:30;30409:5;30385:30;:::i;:::-;30284:137;;;;:::o;30427:345::-;30494:6;30543:2;30531:9;30522:7;30518:23;30514:32;30511:119;;;30549:79;;:::i;:::-;30511:119;30669:1;30694:61;30747:7;30738:6;30727:9;30723:22;30694:61;:::i;:::-;30684:71;;30640:125;30427:345;;;;:::o;30778:229::-;30918:34;30914:1;30906:6;30902:14;30895:58;30987:12;30982:2;30974:6;30970:15;30963:37;30778:229;:::o;31013:366::-;31155:3;31176:67;31240:2;31235:3;31176:67;:::i;:::-;31169:74;;31252:93;31341:3;31252:93;:::i;:::-;31370:2;31365:3;31361:12;31354:19;;31013:366;;;:::o;31385:419::-;31551:4;31589:2;31578:9;31574:18;31566:26;;31638:9;31632:4;31628:20;31624:1;31613:9;31609:17;31602:47;31666:131;31792:4;31666:131;:::i;:::-;31658:139;;31385:419;;;:::o;31810:225::-;31950:34;31946:1;31938:6;31934:14;31927:58;32019:8;32014:2;32006:6;32002:15;31995:33;31810:225;:::o;32041:366::-;32183:3;32204:67;32268:2;32263:3;32204:67;:::i;:::-;32197:74;;32280:93;32369:3;32280:93;:::i;:::-;32398:2;32393:3;32389:12;32382:19;;32041:366;;;:::o;32413:419::-;32579:4;32617:2;32606:9;32602:18;32594:26;;32666:9;32660:4;32656:20;32652:1;32641:9;32637:17;32630:47;32694:131;32820:4;32694:131;:::i;:::-;32686:139;;32413:419;;;:::o;32838:179::-;32978:31;32974:1;32966:6;32962:14;32955:55;32838:179;:::o;33023:366::-;33165:3;33186:67;33250:2;33245:3;33186:67;:::i;:::-;33179:74;;33262:93;33351:3;33262:93;:::i;:::-;33380:2;33375:3;33371:12;33364:19;;33023:366;;;:::o;33395:419::-;33561:4;33599:2;33588:9;33584:18;33576:26;;33648:9;33642:4;33638:20;33634:1;33623:9;33619:17;33612:47;33676:131;33802:4;33676:131;:::i;:::-;33668:139;;33395:419;;;:::o;33820:271::-;33950:3;33972:93;34061:3;34052:6;33972:93;:::i;:::-;33965:100;;34082:3;34075:10;;33820:271;;;;:::o;34097:99::-;34149:6;34183:5;34177:12;34167:22;;34097:99;;;:::o;34202:102::-;34243:6;34294:2;34290:7;34285:2;34278:5;34274:14;34270:28;34260:38;;34202:102;;;:::o;34310:364::-;34398:3;34426:39;34459:5;34426:39;:::i;:::-;34481:71;34545:6;34540:3;34481:71;:::i;:::-;34474:78;;34561:52;34606:6;34601:3;34594:4;34587:5;34583:16;34561:52;:::i;:::-;34638:29;34660:6;34638:29;:::i;:::-;34633:3;34629:39;34622:46;;34402:272;34310:364;;;;:::o;34680:313::-;34793:4;34831:2;34820:9;34816:18;34808:26;;34880:9;34874:4;34870:20;34866:1;34855:9;34851:17;34844:47;34908:78;34981:4;34972:6;34908:78;:::i;:::-;34900:86;;34680:313;;;;:::o
Swarm Source
ipfs://7b17af8172c269f38570bd8f2fbf2bb35fdd6909b57385b77c5967bb119a89c2
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.