ETH Price: $3,103.30 (+0.65%)
Gas: 6 Gwei

Contract

0x87858B848C4b64BDA3D694A554c5188f4c3E20E0
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Release194333102024-03-14 12:40:47117 days ago1710420047IN
0x87858B84...f4c3E20E0
0 ETH0.0037224947.58948401
Release189755562024-01-10 9:08:47182 days ago1704877727IN
0x87858B84...f4c3E20E0
0 ETH0.0019748325.24686896
Release189288872024-01-03 19:24:11188 days ago1704309851IN
0x87858B84...f4c3E20E0
0 ETH0.0026111833.38219084
Release187410012023-12-08 10:39:47215 days ago1702031987IN
0x87858B84...f4c3E20E0
0 ETH0.0026859734.33826918
Release186782542023-11-29 15:47:11223 days ago1701272831IN
0x87858B84...f4c3E20E0
0 ETH0.003766848.15590518
Release186782102023-11-29 15:38:23223 days ago1701272303IN
0x87858B84...f4c3E20E0
0 ETH0.0041696753.30637816
Release186151472023-11-20 19:41:35232 days ago1700509295IN
0x87858B84...f4c3E20E0
0 ETH0.0019993332.71111483
Release184317902023-10-26 3:43:59258 days ago1698291839IN
0x87858B84...f4c3E20E0
0 ETH0.0061761478.95767717
Release184317852023-10-26 3:42:59258 days ago1698291779IN
0x87858B84...f4c3E20E0
0 ETH0.0064292582.1934063
Release183710362023-10-17 15:38:11266 days ago1697557091IN
0x87858B84...f4c3E20E0
0 ETH0.000988712.63985838
Release183710002023-10-17 15:30:59266 days ago1697556659IN
0x87858B84...f4c3E20E0
0 ETH0.0011852715.15286224
Release183621452023-10-16 9:49:23268 days ago1697449763IN
0x87858B84...f4c3E20E0
0 ETH0.000219296.84108315
Release183621072023-10-16 9:41:35268 days ago1697449295IN
0x87858B84...f4c3E20E0
0 ETH0.000289878.41713069
Release183620942023-10-16 9:38:59268 days ago1697449139IN
0x87858B84...f4c3E20E0
0 ETH0.000303868.82314197
Release183614712023-10-16 7:33:35268 days ago1697441615IN
0x87858B84...f4c3E20E0
0 ETH0.000453585.79880089
Release183199502023-10-10 12:07:23273 days ago1696939643IN
0x87858B84...f4c3E20E0
0 ETH0.000422596.91405093
Release183194152023-10-10 10:19:35274 days ago1696933175IN
0x87858B84...f4c3E20E0
0 ETH0.00044895.73898547
Release183182102023-10-10 6:17:35274 days ago1696918655IN
0x87858B84...f4c3E20E0
0 ETH0.000296674.85385252
Release183004752023-10-07 18:43:23276 days ago1696704203IN
0x87858B84...f4c3E20E0
0 ETH0.000455375.82163158
Release183004722023-10-07 18:42:47276 days ago1696704167IN
0x87858B84...f4c3E20E0
0 ETH0.000394755.04664579
Release183004682023-10-07 18:41:59276 days ago1696704119IN
0x87858B84...f4c3E20E0
0 ETH0.000426555.45323888
Release183004632023-10-07 18:40:59276 days ago1696704059IN
0x87858B84...f4c3E20E0
0 ETH0.00041185.26458538
Release182689962023-10-03 9:03:59281 days ago1696323839IN
0x87858B84...f4c3E20E0
0 ETH0.000439377.18857743
Release182214692023-09-26 17:34:47287 days ago1695749687IN
0x87858B84...f4c3E20E0
0 ETH0.0018918724.18630412
Release182135802023-09-25 15:05:47288 days ago1695654347IN
0x87858B84...f4c3E20E0
0 ETH0.0020308533.22672737
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
VestingAirdrop

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 800 runs

Other Settings:
default evmVersion, BSL 1.1 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-17
*/

// SPDX-License-Identifier: BUSL-1.1
// File: lib/ipor-protocol-commons/src/errors/IporErrors.sol


pragma solidity 0.8.17;

library IporErrors {
    // 000-199 - general codes

    /// @notice General problem, address is wrong
    string public constant WRONG_ADDRESS = "IPOR_000";

    /// @notice General problem. Wrong decimals
    string public constant WRONG_DECIMALS = "IPOR_001";

    string public constant ADDRESSES_MISMATCH = "IPOR_002";

    //@notice Trader doesnt have enought tokens to execute transaction
    string public constant ASSET_BALANCE_TOO_LOW = "IPOR_003";

    string public constant VALUE_NOT_GREATER_THAN_ZERO = "IPOR_004";

    string public constant INPUT_ARRAYS_LENGTH_MISMATCH = "IPOR_005";

    //@notice Amount is too low to transfer
    string public constant NOT_ENOUGH_AMOUNT_TO_TRANSFER = "IPOR_006";

    //@notice msg.sender is not an appointed owner, so cannot confirm his appointment to be an owner of a specific smart contract
    string public constant SENDER_NOT_APPOINTED_OWNER = "IPOR_007";

    //only milton can have access to function
    string public constant CALLER_NOT_MILTON = "IPOR_008";

    string public constant CHUNK_SIZE_EQUAL_ZERO = "IPOR_009";

    string public constant CHUNK_SIZE_TOO_BIG = "IPOR_010";
}

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.8.0) (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() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

// 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: lib/ipor-protocol-commons/src/security/IporOwnable.sol


pragma solidity 0.8.17;



abstract contract IporOwnable is Ownable {
    address private _appointedOwner;

    event AppointedToTransferOwnership(address indexed appointedOwner);

    modifier onlyAppointedOwner() {
        require(
            _appointedOwner == _msgSender(),
            IporErrors.SENDER_NOT_APPOINTED_OWNER
        );
        _;
    }

    function transferOwnership(address appointedOwner)
        public
        override
        onlyOwner
    {
        require(appointedOwner != address(0), IporErrors.WRONG_ADDRESS);
        _appointedOwner = appointedOwner;
        emit AppointedToTransferOwnership(appointedOwner);
    }

    function confirmTransferOwnership() external onlyAppointedOwner {
        _appointedOwner = address(0);
        _transferOwnership(_msgSender());
    }

    function renounceOwnership() public virtual override onlyOwner {
        _transferOwnership(address(0));
        _appointedOwner = address(0);
    }
}

// File: @openzeppelin/contracts/security/Pausable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which allows children to implement an emergency stop
 * mechanism that can be triggered by an authorized account.
 *
 * This module is used through inheritance. It will make available the
 * modifiers `whenNotPaused` and `whenPaused`, which can be applied to
 * the functions of your contract. Note that they will not be pausable by
 * simply including this module, only once the modifiers are put in place.
 */
abstract contract Pausable is Context {
    /**
     * @dev Emitted when the pause is triggered by `account`.
     */
    event Paused(address account);

    /**
     * @dev Emitted when the pause is lifted by `account`.
     */
    event Unpaused(address account);

    bool private _paused;

    /**
     * @dev Initializes the contract in unpaused state.
     */
    constructor() {
        _paused = false;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is not paused.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    modifier whenNotPaused() {
        _requireNotPaused();
        _;
    }

    /**
     * @dev Modifier to make a function callable only when the contract is paused.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    modifier whenPaused() {
        _requirePaused();
        _;
    }

    /**
     * @dev Returns true if the contract is paused, and false otherwise.
     */
    function paused() public view virtual returns (bool) {
        return _paused;
    }

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        require(!paused(), "Pausable: paused");
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        require(paused(), "Pausable: not paused");
    }

    /**
     * @dev Triggers stopped state.
     *
     * Requirements:
     *
     * - The contract must not be paused.
     */
    function _pause() internal virtual whenNotPaused {
        _paused = true;
        emit Paused(_msgSender());
    }

    /**
     * @dev Returns to normal state.
     *
     * Requirements:
     *
     * - The contract must be paused.
     */
    function _unpause() internal virtual whenPaused {
        _paused = false;
        emit Unpaused(_msgSender());
    }
}

// File: src/airdrop/AirdropTypes.sol


pragma solidity 0.8.17;

library AirdropTypes {
    struct State {
        uint128 initialValue;
        uint128 released;
    }
}

// File: lib/ipor-protocol-commons/src/errors/IporAirdropErrors.sol


pragma solidity 0.8.17;

library IporAirdropErrors {
    // 000-199 - general codes

    /// @notice General problem, address is wrong
    string public constant WRONG_ADDRESS = "IPOR_750";
    //@notice msg.sender is not an appointed owner, so cannot confirm his appointment to be an owner of a specific smart contract
    string public constant SENDER_NOT_APPOINTED_OWNER = "IPOR_751";

    string public constant INPUT_ARRAYS_LENGTH_MISMATCH = "IPOR_752";

    string public constant NO_AIRDROPS = "IPOR_753";

    string public constant NO_STAKEHOLDERS = "IPOR_754";

    string public constant ALREADY_RELEASED = "IPOR_755";

    string public constant AIRDROP_ALREADY_EXISTS = "IPOR_756";

    string public constant AMOUNT_HIGHER_THAN_INITIAL_VALUE = "IPOR_757";

    string public constant VESTING_DURATION_SHOULD_BE_HIGHER_THAN_ZERO =
        "IPOR_758";

    string
        public constant VESTING_START_TIME_SHOULD_BE_HIGHER_THAN_BLOCK_TIMESTAMP =
        "IPOR_759";

    /// @notice General problem, contract is wrong
    string public constant WRONG_CONTRACT_ID = "IPOR_760";

    string public constant ONLY_CONFIRMED_TERMS_OF_USE = "IPOR_761";
}

// 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: src/interface/IIporToken.sol


pragma solidity 0.8.17;


/// @title Interface of iporToken
interface IIporToken is IERC20 {
    function getContractId() external pure returns (bytes32);
}

// File: @openzeppelin/contracts/utils/math/SafeCast.sol


// OpenZeppelin Contracts (last updated v4.8.0) (utils/math/SafeCast.sol)
// This file was procedurally generated from scripts/generate/templates/SafeCast.js.

pragma solidity ^0.8.0;

/**
 * @dev Wrappers over Solidity's uintXX/intXX casting operators with added overflow
 * checks.
 *
 * Downcasting from uint256/int256 in Solidity does not revert on overflow. This can
 * easily result in undesired exploitation or bugs, since developers usually
 * assume that overflows raise errors. `SafeCast` restores this intuition by
 * reverting the transaction when such an operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 *
 * Can be combined with {SafeMath} and {SignedSafeMath} to extend it to smaller types, by performing
 * all math on `uint256` and `int256` and then downcasting.
 */
library SafeCast {
    /**
     * @dev Returns the downcasted uint248 from uint256, reverting on
     * overflow (when the input is greater than largest uint248).
     *
     * Counterpart to Solidity's `uint248` operator.
     *
     * Requirements:
     *
     * - input must fit into 248 bits
     *
     * _Available since v4.7._
     */
    function toUint248(uint256 value) internal pure returns (uint248) {
        require(value <= type(uint248).max, "SafeCast: value doesn't fit in 248 bits");
        return uint248(value);
    }

    /**
     * @dev Returns the downcasted uint240 from uint256, reverting on
     * overflow (when the input is greater than largest uint240).
     *
     * Counterpart to Solidity's `uint240` operator.
     *
     * Requirements:
     *
     * - input must fit into 240 bits
     *
     * _Available since v4.7._
     */
    function toUint240(uint256 value) internal pure returns (uint240) {
        require(value <= type(uint240).max, "SafeCast: value doesn't fit in 240 bits");
        return uint240(value);
    }

    /**
     * @dev Returns the downcasted uint232 from uint256, reverting on
     * overflow (when the input is greater than largest uint232).
     *
     * Counterpart to Solidity's `uint232` operator.
     *
     * Requirements:
     *
     * - input must fit into 232 bits
     *
     * _Available since v4.7._
     */
    function toUint232(uint256 value) internal pure returns (uint232) {
        require(value <= type(uint232).max, "SafeCast: value doesn't fit in 232 bits");
        return uint232(value);
    }

    /**
     * @dev Returns the downcasted uint224 from uint256, reverting on
     * overflow (when the input is greater than largest uint224).
     *
     * Counterpart to Solidity's `uint224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     *
     * _Available since v4.2._
     */
    function toUint224(uint256 value) internal pure returns (uint224) {
        require(value <= type(uint224).max, "SafeCast: value doesn't fit in 224 bits");
        return uint224(value);
    }

    /**
     * @dev Returns the downcasted uint216 from uint256, reverting on
     * overflow (when the input is greater than largest uint216).
     *
     * Counterpart to Solidity's `uint216` operator.
     *
     * Requirements:
     *
     * - input must fit into 216 bits
     *
     * _Available since v4.7._
     */
    function toUint216(uint256 value) internal pure returns (uint216) {
        require(value <= type(uint216).max, "SafeCast: value doesn't fit in 216 bits");
        return uint216(value);
    }

    /**
     * @dev Returns the downcasted uint208 from uint256, reverting on
     * overflow (when the input is greater than largest uint208).
     *
     * Counterpart to Solidity's `uint208` operator.
     *
     * Requirements:
     *
     * - input must fit into 208 bits
     *
     * _Available since v4.7._
     */
    function toUint208(uint256 value) internal pure returns (uint208) {
        require(value <= type(uint208).max, "SafeCast: value doesn't fit in 208 bits");
        return uint208(value);
    }

    /**
     * @dev Returns the downcasted uint200 from uint256, reverting on
     * overflow (when the input is greater than largest uint200).
     *
     * Counterpart to Solidity's `uint200` operator.
     *
     * Requirements:
     *
     * - input must fit into 200 bits
     *
     * _Available since v4.7._
     */
    function toUint200(uint256 value) internal pure returns (uint200) {
        require(value <= type(uint200).max, "SafeCast: value doesn't fit in 200 bits");
        return uint200(value);
    }

    /**
     * @dev Returns the downcasted uint192 from uint256, reverting on
     * overflow (when the input is greater than largest uint192).
     *
     * Counterpart to Solidity's `uint192` operator.
     *
     * Requirements:
     *
     * - input must fit into 192 bits
     *
     * _Available since v4.7._
     */
    function toUint192(uint256 value) internal pure returns (uint192) {
        require(value <= type(uint192).max, "SafeCast: value doesn't fit in 192 bits");
        return uint192(value);
    }

    /**
     * @dev Returns the downcasted uint184 from uint256, reverting on
     * overflow (when the input is greater than largest uint184).
     *
     * Counterpart to Solidity's `uint184` operator.
     *
     * Requirements:
     *
     * - input must fit into 184 bits
     *
     * _Available since v4.7._
     */
    function toUint184(uint256 value) internal pure returns (uint184) {
        require(value <= type(uint184).max, "SafeCast: value doesn't fit in 184 bits");
        return uint184(value);
    }

    /**
     * @dev Returns the downcasted uint176 from uint256, reverting on
     * overflow (when the input is greater than largest uint176).
     *
     * Counterpart to Solidity's `uint176` operator.
     *
     * Requirements:
     *
     * - input must fit into 176 bits
     *
     * _Available since v4.7._
     */
    function toUint176(uint256 value) internal pure returns (uint176) {
        require(value <= type(uint176).max, "SafeCast: value doesn't fit in 176 bits");
        return uint176(value);
    }

    /**
     * @dev Returns the downcasted uint168 from uint256, reverting on
     * overflow (when the input is greater than largest uint168).
     *
     * Counterpart to Solidity's `uint168` operator.
     *
     * Requirements:
     *
     * - input must fit into 168 bits
     *
     * _Available since v4.7._
     */
    function toUint168(uint256 value) internal pure returns (uint168) {
        require(value <= type(uint168).max, "SafeCast: value doesn't fit in 168 bits");
        return uint168(value);
    }

    /**
     * @dev Returns the downcasted uint160 from uint256, reverting on
     * overflow (when the input is greater than largest uint160).
     *
     * Counterpart to Solidity's `uint160` operator.
     *
     * Requirements:
     *
     * - input must fit into 160 bits
     *
     * _Available since v4.7._
     */
    function toUint160(uint256 value) internal pure returns (uint160) {
        require(value <= type(uint160).max, "SafeCast: value doesn't fit in 160 bits");
        return uint160(value);
    }

    /**
     * @dev Returns the downcasted uint152 from uint256, reverting on
     * overflow (when the input is greater than largest uint152).
     *
     * Counterpart to Solidity's `uint152` operator.
     *
     * Requirements:
     *
     * - input must fit into 152 bits
     *
     * _Available since v4.7._
     */
    function toUint152(uint256 value) internal pure returns (uint152) {
        require(value <= type(uint152).max, "SafeCast: value doesn't fit in 152 bits");
        return uint152(value);
    }

    /**
     * @dev Returns the downcasted uint144 from uint256, reverting on
     * overflow (when the input is greater than largest uint144).
     *
     * Counterpart to Solidity's `uint144` operator.
     *
     * Requirements:
     *
     * - input must fit into 144 bits
     *
     * _Available since v4.7._
     */
    function toUint144(uint256 value) internal pure returns (uint144) {
        require(value <= type(uint144).max, "SafeCast: value doesn't fit in 144 bits");
        return uint144(value);
    }

    /**
     * @dev Returns the downcasted uint136 from uint256, reverting on
     * overflow (when the input is greater than largest uint136).
     *
     * Counterpart to Solidity's `uint136` operator.
     *
     * Requirements:
     *
     * - input must fit into 136 bits
     *
     * _Available since v4.7._
     */
    function toUint136(uint256 value) internal pure returns (uint136) {
        require(value <= type(uint136).max, "SafeCast: value doesn't fit in 136 bits");
        return uint136(value);
    }

    /**
     * @dev Returns the downcasted uint128 from uint256, reverting on
     * overflow (when the input is greater than largest uint128).
     *
     * Counterpart to Solidity's `uint128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v2.5._
     */
    function toUint128(uint256 value) internal pure returns (uint128) {
        require(value <= type(uint128).max, "SafeCast: value doesn't fit in 128 bits");
        return uint128(value);
    }

    /**
     * @dev Returns the downcasted uint120 from uint256, reverting on
     * overflow (when the input is greater than largest uint120).
     *
     * Counterpart to Solidity's `uint120` operator.
     *
     * Requirements:
     *
     * - input must fit into 120 bits
     *
     * _Available since v4.7._
     */
    function toUint120(uint256 value) internal pure returns (uint120) {
        require(value <= type(uint120).max, "SafeCast: value doesn't fit in 120 bits");
        return uint120(value);
    }

    /**
     * @dev Returns the downcasted uint112 from uint256, reverting on
     * overflow (when the input is greater than largest uint112).
     *
     * Counterpart to Solidity's `uint112` operator.
     *
     * Requirements:
     *
     * - input must fit into 112 bits
     *
     * _Available since v4.7._
     */
    function toUint112(uint256 value) internal pure returns (uint112) {
        require(value <= type(uint112).max, "SafeCast: value doesn't fit in 112 bits");
        return uint112(value);
    }

    /**
     * @dev Returns the downcasted uint104 from uint256, reverting on
     * overflow (when the input is greater than largest uint104).
     *
     * Counterpart to Solidity's `uint104` operator.
     *
     * Requirements:
     *
     * - input must fit into 104 bits
     *
     * _Available since v4.7._
     */
    function toUint104(uint256 value) internal pure returns (uint104) {
        require(value <= type(uint104).max, "SafeCast: value doesn't fit in 104 bits");
        return uint104(value);
    }

    /**
     * @dev Returns the downcasted uint96 from uint256, reverting on
     * overflow (when the input is greater than largest uint96).
     *
     * Counterpart to Solidity's `uint96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     *
     * _Available since v4.2._
     */
    function toUint96(uint256 value) internal pure returns (uint96) {
        require(value <= type(uint96).max, "SafeCast: value doesn't fit in 96 bits");
        return uint96(value);
    }

    /**
     * @dev Returns the downcasted uint88 from uint256, reverting on
     * overflow (when the input is greater than largest uint88).
     *
     * Counterpart to Solidity's `uint88` operator.
     *
     * Requirements:
     *
     * - input must fit into 88 bits
     *
     * _Available since v4.7._
     */
    function toUint88(uint256 value) internal pure returns (uint88) {
        require(value <= type(uint88).max, "SafeCast: value doesn't fit in 88 bits");
        return uint88(value);
    }

    /**
     * @dev Returns the downcasted uint80 from uint256, reverting on
     * overflow (when the input is greater than largest uint80).
     *
     * Counterpart to Solidity's `uint80` operator.
     *
     * Requirements:
     *
     * - input must fit into 80 bits
     *
     * _Available since v4.7._
     */
    function toUint80(uint256 value) internal pure returns (uint80) {
        require(value <= type(uint80).max, "SafeCast: value doesn't fit in 80 bits");
        return uint80(value);
    }

    /**
     * @dev Returns the downcasted uint72 from uint256, reverting on
     * overflow (when the input is greater than largest uint72).
     *
     * Counterpart to Solidity's `uint72` operator.
     *
     * Requirements:
     *
     * - input must fit into 72 bits
     *
     * _Available since v4.7._
     */
    function toUint72(uint256 value) internal pure returns (uint72) {
        require(value <= type(uint72).max, "SafeCast: value doesn't fit in 72 bits");
        return uint72(value);
    }

    /**
     * @dev Returns the downcasted uint64 from uint256, reverting on
     * overflow (when the input is greater than largest uint64).
     *
     * Counterpart to Solidity's `uint64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v2.5._
     */
    function toUint64(uint256 value) internal pure returns (uint64) {
        require(value <= type(uint64).max, "SafeCast: value doesn't fit in 64 bits");
        return uint64(value);
    }

    /**
     * @dev Returns the downcasted uint56 from uint256, reverting on
     * overflow (when the input is greater than largest uint56).
     *
     * Counterpart to Solidity's `uint56` operator.
     *
     * Requirements:
     *
     * - input must fit into 56 bits
     *
     * _Available since v4.7._
     */
    function toUint56(uint256 value) internal pure returns (uint56) {
        require(value <= type(uint56).max, "SafeCast: value doesn't fit in 56 bits");
        return uint56(value);
    }

    /**
     * @dev Returns the downcasted uint48 from uint256, reverting on
     * overflow (when the input is greater than largest uint48).
     *
     * Counterpart to Solidity's `uint48` operator.
     *
     * Requirements:
     *
     * - input must fit into 48 bits
     *
     * _Available since v4.7._
     */
    function toUint48(uint256 value) internal pure returns (uint48) {
        require(value <= type(uint48).max, "SafeCast: value doesn't fit in 48 bits");
        return uint48(value);
    }

    /**
     * @dev Returns the downcasted uint40 from uint256, reverting on
     * overflow (when the input is greater than largest uint40).
     *
     * Counterpart to Solidity's `uint40` operator.
     *
     * Requirements:
     *
     * - input must fit into 40 bits
     *
     * _Available since v4.7._
     */
    function toUint40(uint256 value) internal pure returns (uint40) {
        require(value <= type(uint40).max, "SafeCast: value doesn't fit in 40 bits");
        return uint40(value);
    }

    /**
     * @dev Returns the downcasted uint32 from uint256, reverting on
     * overflow (when the input is greater than largest uint32).
     *
     * Counterpart to Solidity's `uint32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v2.5._
     */
    function toUint32(uint256 value) internal pure returns (uint32) {
        require(value <= type(uint32).max, "SafeCast: value doesn't fit in 32 bits");
        return uint32(value);
    }

    /**
     * @dev Returns the downcasted uint24 from uint256, reverting on
     * overflow (when the input is greater than largest uint24).
     *
     * Counterpart to Solidity's `uint24` operator.
     *
     * Requirements:
     *
     * - input must fit into 24 bits
     *
     * _Available since v4.7._
     */
    function toUint24(uint256 value) internal pure returns (uint24) {
        require(value <= type(uint24).max, "SafeCast: value doesn't fit in 24 bits");
        return uint24(value);
    }

    /**
     * @dev Returns the downcasted uint16 from uint256, reverting on
     * overflow (when the input is greater than largest uint16).
     *
     * Counterpart to Solidity's `uint16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v2.5._
     */
    function toUint16(uint256 value) internal pure returns (uint16) {
        require(value <= type(uint16).max, "SafeCast: value doesn't fit in 16 bits");
        return uint16(value);
    }

    /**
     * @dev Returns the downcasted uint8 from uint256, reverting on
     * overflow (when the input is greater than largest uint8).
     *
     * Counterpart to Solidity's `uint8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits
     *
     * _Available since v2.5._
     */
    function toUint8(uint256 value) internal pure returns (uint8) {
        require(value <= type(uint8).max, "SafeCast: value doesn't fit in 8 bits");
        return uint8(value);
    }

    /**
     * @dev Converts a signed int256 into an unsigned uint256.
     *
     * Requirements:
     *
     * - input must be greater than or equal to 0.
     *
     * _Available since v3.0._
     */
    function toUint256(int256 value) internal pure returns (uint256) {
        require(value >= 0, "SafeCast: value must be positive");
        return uint256(value);
    }

    /**
     * @dev Returns the downcasted int248 from int256, reverting on
     * overflow (when the input is less than smallest int248 or
     * greater than largest int248).
     *
     * Counterpart to Solidity's `int248` operator.
     *
     * Requirements:
     *
     * - input must fit into 248 bits
     *
     * _Available since v4.7._
     */
    function toInt248(int256 value) internal pure returns (int248 downcasted) {
        downcasted = int248(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 248 bits");
    }

    /**
     * @dev Returns the downcasted int240 from int256, reverting on
     * overflow (when the input is less than smallest int240 or
     * greater than largest int240).
     *
     * Counterpart to Solidity's `int240` operator.
     *
     * Requirements:
     *
     * - input must fit into 240 bits
     *
     * _Available since v4.7._
     */
    function toInt240(int256 value) internal pure returns (int240 downcasted) {
        downcasted = int240(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 240 bits");
    }

    /**
     * @dev Returns the downcasted int232 from int256, reverting on
     * overflow (when the input is less than smallest int232 or
     * greater than largest int232).
     *
     * Counterpart to Solidity's `int232` operator.
     *
     * Requirements:
     *
     * - input must fit into 232 bits
     *
     * _Available since v4.7._
     */
    function toInt232(int256 value) internal pure returns (int232 downcasted) {
        downcasted = int232(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 232 bits");
    }

    /**
     * @dev Returns the downcasted int224 from int256, reverting on
     * overflow (when the input is less than smallest int224 or
     * greater than largest int224).
     *
     * Counterpart to Solidity's `int224` operator.
     *
     * Requirements:
     *
     * - input must fit into 224 bits
     *
     * _Available since v4.7._
     */
    function toInt224(int256 value) internal pure returns (int224 downcasted) {
        downcasted = int224(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 224 bits");
    }

    /**
     * @dev Returns the downcasted int216 from int256, reverting on
     * overflow (when the input is less than smallest int216 or
     * greater than largest int216).
     *
     * Counterpart to Solidity's `int216` operator.
     *
     * Requirements:
     *
     * - input must fit into 216 bits
     *
     * _Available since v4.7._
     */
    function toInt216(int256 value) internal pure returns (int216 downcasted) {
        downcasted = int216(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 216 bits");
    }

    /**
     * @dev Returns the downcasted int208 from int256, reverting on
     * overflow (when the input is less than smallest int208 or
     * greater than largest int208).
     *
     * Counterpart to Solidity's `int208` operator.
     *
     * Requirements:
     *
     * - input must fit into 208 bits
     *
     * _Available since v4.7._
     */
    function toInt208(int256 value) internal pure returns (int208 downcasted) {
        downcasted = int208(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 208 bits");
    }

    /**
     * @dev Returns the downcasted int200 from int256, reverting on
     * overflow (when the input is less than smallest int200 or
     * greater than largest int200).
     *
     * Counterpart to Solidity's `int200` operator.
     *
     * Requirements:
     *
     * - input must fit into 200 bits
     *
     * _Available since v4.7._
     */
    function toInt200(int256 value) internal pure returns (int200 downcasted) {
        downcasted = int200(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 200 bits");
    }

    /**
     * @dev Returns the downcasted int192 from int256, reverting on
     * overflow (when the input is less than smallest int192 or
     * greater than largest int192).
     *
     * Counterpart to Solidity's `int192` operator.
     *
     * Requirements:
     *
     * - input must fit into 192 bits
     *
     * _Available since v4.7._
     */
    function toInt192(int256 value) internal pure returns (int192 downcasted) {
        downcasted = int192(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 192 bits");
    }

    /**
     * @dev Returns the downcasted int184 from int256, reverting on
     * overflow (when the input is less than smallest int184 or
     * greater than largest int184).
     *
     * Counterpart to Solidity's `int184` operator.
     *
     * Requirements:
     *
     * - input must fit into 184 bits
     *
     * _Available since v4.7._
     */
    function toInt184(int256 value) internal pure returns (int184 downcasted) {
        downcasted = int184(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 184 bits");
    }

    /**
     * @dev Returns the downcasted int176 from int256, reverting on
     * overflow (when the input is less than smallest int176 or
     * greater than largest int176).
     *
     * Counterpart to Solidity's `int176` operator.
     *
     * Requirements:
     *
     * - input must fit into 176 bits
     *
     * _Available since v4.7._
     */
    function toInt176(int256 value) internal pure returns (int176 downcasted) {
        downcasted = int176(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 176 bits");
    }

    /**
     * @dev Returns the downcasted int168 from int256, reverting on
     * overflow (when the input is less than smallest int168 or
     * greater than largest int168).
     *
     * Counterpart to Solidity's `int168` operator.
     *
     * Requirements:
     *
     * - input must fit into 168 bits
     *
     * _Available since v4.7._
     */
    function toInt168(int256 value) internal pure returns (int168 downcasted) {
        downcasted = int168(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 168 bits");
    }

    /**
     * @dev Returns the downcasted int160 from int256, reverting on
     * overflow (when the input is less than smallest int160 or
     * greater than largest int160).
     *
     * Counterpart to Solidity's `int160` operator.
     *
     * Requirements:
     *
     * - input must fit into 160 bits
     *
     * _Available since v4.7._
     */
    function toInt160(int256 value) internal pure returns (int160 downcasted) {
        downcasted = int160(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 160 bits");
    }

    /**
     * @dev Returns the downcasted int152 from int256, reverting on
     * overflow (when the input is less than smallest int152 or
     * greater than largest int152).
     *
     * Counterpart to Solidity's `int152` operator.
     *
     * Requirements:
     *
     * - input must fit into 152 bits
     *
     * _Available since v4.7._
     */
    function toInt152(int256 value) internal pure returns (int152 downcasted) {
        downcasted = int152(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 152 bits");
    }

    /**
     * @dev Returns the downcasted int144 from int256, reverting on
     * overflow (when the input is less than smallest int144 or
     * greater than largest int144).
     *
     * Counterpart to Solidity's `int144` operator.
     *
     * Requirements:
     *
     * - input must fit into 144 bits
     *
     * _Available since v4.7._
     */
    function toInt144(int256 value) internal pure returns (int144 downcasted) {
        downcasted = int144(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 144 bits");
    }

    /**
     * @dev Returns the downcasted int136 from int256, reverting on
     * overflow (when the input is less than smallest int136 or
     * greater than largest int136).
     *
     * Counterpart to Solidity's `int136` operator.
     *
     * Requirements:
     *
     * - input must fit into 136 bits
     *
     * _Available since v4.7._
     */
    function toInt136(int256 value) internal pure returns (int136 downcasted) {
        downcasted = int136(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 136 bits");
    }

    /**
     * @dev Returns the downcasted int128 from int256, reverting on
     * overflow (when the input is less than smallest int128 or
     * greater than largest int128).
     *
     * Counterpart to Solidity's `int128` operator.
     *
     * Requirements:
     *
     * - input must fit into 128 bits
     *
     * _Available since v3.1._
     */
    function toInt128(int256 value) internal pure returns (int128 downcasted) {
        downcasted = int128(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 128 bits");
    }

    /**
     * @dev Returns the downcasted int120 from int256, reverting on
     * overflow (when the input is less than smallest int120 or
     * greater than largest int120).
     *
     * Counterpart to Solidity's `int120` operator.
     *
     * Requirements:
     *
     * - input must fit into 120 bits
     *
     * _Available since v4.7._
     */
    function toInt120(int256 value) internal pure returns (int120 downcasted) {
        downcasted = int120(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 120 bits");
    }

    /**
     * @dev Returns the downcasted int112 from int256, reverting on
     * overflow (when the input is less than smallest int112 or
     * greater than largest int112).
     *
     * Counterpart to Solidity's `int112` operator.
     *
     * Requirements:
     *
     * - input must fit into 112 bits
     *
     * _Available since v4.7._
     */
    function toInt112(int256 value) internal pure returns (int112 downcasted) {
        downcasted = int112(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 112 bits");
    }

    /**
     * @dev Returns the downcasted int104 from int256, reverting on
     * overflow (when the input is less than smallest int104 or
     * greater than largest int104).
     *
     * Counterpart to Solidity's `int104` operator.
     *
     * Requirements:
     *
     * - input must fit into 104 bits
     *
     * _Available since v4.7._
     */
    function toInt104(int256 value) internal pure returns (int104 downcasted) {
        downcasted = int104(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 104 bits");
    }

    /**
     * @dev Returns the downcasted int96 from int256, reverting on
     * overflow (when the input is less than smallest int96 or
     * greater than largest int96).
     *
     * Counterpart to Solidity's `int96` operator.
     *
     * Requirements:
     *
     * - input must fit into 96 bits
     *
     * _Available since v4.7._
     */
    function toInt96(int256 value) internal pure returns (int96 downcasted) {
        downcasted = int96(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 96 bits");
    }

    /**
     * @dev Returns the downcasted int88 from int256, reverting on
     * overflow (when the input is less than smallest int88 or
     * greater than largest int88).
     *
     * Counterpart to Solidity's `int88` operator.
     *
     * Requirements:
     *
     * - input must fit into 88 bits
     *
     * _Available since v4.7._
     */
    function toInt88(int256 value) internal pure returns (int88 downcasted) {
        downcasted = int88(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 88 bits");
    }

    /**
     * @dev Returns the downcasted int80 from int256, reverting on
     * overflow (when the input is less than smallest int80 or
     * greater than largest int80).
     *
     * Counterpart to Solidity's `int80` operator.
     *
     * Requirements:
     *
     * - input must fit into 80 bits
     *
     * _Available since v4.7._
     */
    function toInt80(int256 value) internal pure returns (int80 downcasted) {
        downcasted = int80(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 80 bits");
    }

    /**
     * @dev Returns the downcasted int72 from int256, reverting on
     * overflow (when the input is less than smallest int72 or
     * greater than largest int72).
     *
     * Counterpart to Solidity's `int72` operator.
     *
     * Requirements:
     *
     * - input must fit into 72 bits
     *
     * _Available since v4.7._
     */
    function toInt72(int256 value) internal pure returns (int72 downcasted) {
        downcasted = int72(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 72 bits");
    }

    /**
     * @dev Returns the downcasted int64 from int256, reverting on
     * overflow (when the input is less than smallest int64 or
     * greater than largest int64).
     *
     * Counterpart to Solidity's `int64` operator.
     *
     * Requirements:
     *
     * - input must fit into 64 bits
     *
     * _Available since v3.1._
     */
    function toInt64(int256 value) internal pure returns (int64 downcasted) {
        downcasted = int64(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 64 bits");
    }

    /**
     * @dev Returns the downcasted int56 from int256, reverting on
     * overflow (when the input is less than smallest int56 or
     * greater than largest int56).
     *
     * Counterpart to Solidity's `int56` operator.
     *
     * Requirements:
     *
     * - input must fit into 56 bits
     *
     * _Available since v4.7._
     */
    function toInt56(int256 value) internal pure returns (int56 downcasted) {
        downcasted = int56(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 56 bits");
    }

    /**
     * @dev Returns the downcasted int48 from int256, reverting on
     * overflow (when the input is less than smallest int48 or
     * greater than largest int48).
     *
     * Counterpart to Solidity's `int48` operator.
     *
     * Requirements:
     *
     * - input must fit into 48 bits
     *
     * _Available since v4.7._
     */
    function toInt48(int256 value) internal pure returns (int48 downcasted) {
        downcasted = int48(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 48 bits");
    }

    /**
     * @dev Returns the downcasted int40 from int256, reverting on
     * overflow (when the input is less than smallest int40 or
     * greater than largest int40).
     *
     * Counterpart to Solidity's `int40` operator.
     *
     * Requirements:
     *
     * - input must fit into 40 bits
     *
     * _Available since v4.7._
     */
    function toInt40(int256 value) internal pure returns (int40 downcasted) {
        downcasted = int40(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 40 bits");
    }

    /**
     * @dev Returns the downcasted int32 from int256, reverting on
     * overflow (when the input is less than smallest int32 or
     * greater than largest int32).
     *
     * Counterpart to Solidity's `int32` operator.
     *
     * Requirements:
     *
     * - input must fit into 32 bits
     *
     * _Available since v3.1._
     */
    function toInt32(int256 value) internal pure returns (int32 downcasted) {
        downcasted = int32(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 32 bits");
    }

    /**
     * @dev Returns the downcasted int24 from int256, reverting on
     * overflow (when the input is less than smallest int24 or
     * greater than largest int24).
     *
     * Counterpart to Solidity's `int24` operator.
     *
     * Requirements:
     *
     * - input must fit into 24 bits
     *
     * _Available since v4.7._
     */
    function toInt24(int256 value) internal pure returns (int24 downcasted) {
        downcasted = int24(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 24 bits");
    }

    /**
     * @dev Returns the downcasted int16 from int256, reverting on
     * overflow (when the input is less than smallest int16 or
     * greater than largest int16).
     *
     * Counterpart to Solidity's `int16` operator.
     *
     * Requirements:
     *
     * - input must fit into 16 bits
     *
     * _Available since v3.1._
     */
    function toInt16(int256 value) internal pure returns (int16 downcasted) {
        downcasted = int16(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 16 bits");
    }

    /**
     * @dev Returns the downcasted int8 from int256, reverting on
     * overflow (when the input is less than smallest int8 or
     * greater than largest int8).
     *
     * Counterpart to Solidity's `int8` operator.
     *
     * Requirements:
     *
     * - input must fit into 8 bits
     *
     * _Available since v3.1._
     */
    function toInt8(int256 value) internal pure returns (int8 downcasted) {
        downcasted = int8(value);
        require(downcasted == value, "SafeCast: value doesn't fit in 8 bits");
    }

    /**
     * @dev Converts an unsigned uint256 into a signed int256.
     *
     * Requirements:
     *
     * - input must be less than or equal to maxInt256.
     *
     * _Available since v3.0._
     */
    function toInt256(uint256 value) internal pure returns (int256) {
        // Note: Unsafe cast below is okay because `type(int256).max` is guaranteed to be positive
        require(value <= uint256(type(int256).max), "SafeCast: value doesn't fit in an int256");
        return int256(value);
    }
}

// File: src/airdrop/AirdropBase.sol


pragma solidity 0.8.17;










abstract contract AirdropBase is Context, Pausable, ReentrancyGuard, IporOwnable {
    using SafeCast for uint256;

    bytes32 internal constant _IPOR_TOKEN_ID =
        0xdba05ed67d0251facfcab8345f27ccd3e72b5a1da8cebfabbcccf4316e6d053c;

    event StakeholderAdded(address indexed account, uint256 amount);
    event TokenReleased(address indexed to, uint256 amount);
    event ConfirmedTermsOfUse(address indexed account, string declaration);

    address internal immutable _dao;
    address internal immutable _iporToken;
    mapping(address => AirdropTypes.State) internal _states;
    uint128 internal _totalReleased;
    uint128 internal _totalStakeholders;

    modifier onlyConfirmedTermsOfUse(string memory declaration) {
        require(
            keccak256(abi.encodePacked(declaration)) ==
                keccak256(
                    abi.encodePacked(
                        "I confirm that I am in compliance with the Terms of Use located at https://www.ipor.io/terms-of-use."
                    )
                ),
            IporAirdropErrors.ONLY_CONFIRMED_TERMS_OF_USE
        );
        _;
    }

    constructor(
        address dao,
        address iporToken,
        address[] memory stakeholders,
        uint256[] memory amounts
    ) {
        require(dao != address(0), IporAirdropErrors.WRONG_ADDRESS);
        require(iporToken != address(0), IporAirdropErrors.WRONG_ADDRESS);
        require(
            IIporToken(iporToken).getContractId() == _IPOR_TOKEN_ID,
            IporAirdropErrors.WRONG_CONTRACT_ID
        );
        uint256 stakeholdersLength = stakeholders.length;
        require(
            stakeholdersLength == amounts.length,
            IporAirdropErrors.INPUT_ARRAYS_LENGTH_MISMATCH
        );
        require(stakeholdersLength > 0, IporAirdropErrors.NO_STAKEHOLDERS);

        uint256 amount;
        address account;

        for (uint256 i; i < stakeholdersLength; ++i) {
            amount = amounts[i];
            account = stakeholders[i];
            require(account != address(0), IporAirdropErrors.WRONG_ADDRESS);
            require(amount > 0, IporAirdropErrors.NO_AIRDROPS);
            // TODO: check that account is not already a stakeholder
            _states[account] = AirdropTypes.State(amount.toUint128(), 0);
            emit StakeholderAdded(account, amount);
        }
        _totalStakeholders += stakeholdersLength.toUint128();

        _dao = dao;
        _iporToken = iporToken;
        _pause();
    }

    function getState(address account)
        external
        view
        returns (uint256 initialValue, uint256 released)
    {
        AirdropTypes.State memory state = _states[account];
        initialValue = state.initialValue;
        released = state.released;
    }

    function getTotalReleased() external view returns (uint256) {
        return _totalReleased;
    }

    function getTotalStakeholders() external view returns (uint256) {
        return _totalStakeholders;
    }

    function addStakeholders(address[] calldata stakeholders, uint256[] calldata amounts)
        external
        onlyOwner
    {
        uint256 stakeholdersLength = stakeholders.length;
        require(
            stakeholdersLength == amounts.length,
            IporAirdropErrors.INPUT_ARRAYS_LENGTH_MISMATCH
        );
        require(stakeholdersLength > 0, IporAirdropErrors.NO_STAKEHOLDERS);
        for (uint256 i; i < stakeholdersLength; ++i) {
            _addStakeholder(stakeholders[i], amounts[i]);
        }
        _totalStakeholders += stakeholdersLength.toUint128();
    }

    function pause() external onlyOwner {
        _pause();
    }

    function unpause() external onlyOwner {
        _unpause();
    }

    function withdrawAllToDao() external onlyOwner {
        IERC20(_iporToken).transfer(_dao, IERC20(_iporToken).balanceOf(address(this)));
    }

    function _addStakeholder(address account, uint256 amount) private {
        require(account != address(0), IporAirdropErrors.WRONG_ADDRESS);
        require(amount > 0, IporAirdropErrors.NO_AIRDROPS);
        require(_states[account].initialValue == 0, IporAirdropErrors.AIRDROP_ALREADY_EXISTS);

        _states[account] = AirdropTypes.State(amount.toUint128(), 0);
        emit StakeholderAdded(account, amount);
    }
}

// File: src/airdrop/VestingAirdrop.sol


pragma solidity 0.8.17;






contract VestingAirdrop is AirdropBase {
    using SafeCast for uint256;

    uint64 private immutable _start;
    uint64 private immutable _duration;

    /**
     * @dev Set the beneficiaries, start timestamp and vesting duration of the vesting wallet.
     */
    constructor(
        address dao,
        address iporToken,
        uint64 startTimestamp,
        uint64 durationSeconds,
        address[] memory stakeholders,
        uint256[] memory amounts
    ) AirdropBase(dao, iporToken, stakeholders, amounts) {
        require(
            startTimestamp > block.timestamp,
            IporAirdropErrors.VESTING_START_TIME_SHOULD_BE_HIGHER_THAN_BLOCK_TIMESTAMP
        );
        require(durationSeconds > 0, IporAirdropErrors.VESTING_DURATION_SHOULD_BE_HIGHER_THAN_ZERO);
        _start = startTimestamp;
        _duration = durationSeconds;
    }

    function getStart() external view virtual returns (uint256) {
        return _start;
    }

    function getDuration() external view virtual returns (uint256) {
        return _duration;
    }

    function getVestedAmount(address account, uint64 timestamp)
        external
        view
        virtual
        returns (uint256)
    {
        return _calculateVestingAmount(_states[account].initialValue, timestamp);
    }

    function releasable(address account) public view virtual returns (uint256) {
        return _releasable(_states[account]);
    }

    function release(string calldata declaration)
        external
        whenNotPaused
        nonReentrant
        onlyConfirmedTermsOfUse(declaration)
    {
        address msgSender = _msgSender();

        AirdropTypes.State memory state = _states[msgSender];

        require(state.initialValue > 0, IporAirdropErrors.NO_AIRDROPS);
        require(state.initialValue - state.released > 0, IporAirdropErrors.ALREADY_RELEASED);

        uint256 amount = _releasable(state);

        require(
            state.initialValue >= state.released + amount,
            IporAirdropErrors.AMOUNT_HIGHER_THAN_INITIAL_VALUE
        );

        state.released += amount.toUint128();

        _states[msgSender] = state;

        _totalReleased += amount.toUint128();

        IERC20(_iporToken).transfer(msgSender, amount);

        emit ConfirmedTermsOfUse(msgSender, declaration);
        emit TokenReleased(msgSender, amount);
    }

    function _releasable(AirdropTypes.State memory state) internal view returns (uint256) {
        return
            _calculateVestingAmount(state.initialValue, uint64(block.timestamp)) - state.released;
    }

    function _calculateVestingAmount(uint256 initialValue, uint64 timestamp)
        internal
        view
        virtual
        returns (uint256)
    {
        if (timestamp < _start) {
            return 0;
        }

        if (timestamp > _start + _duration) {
            return initialValue;
        }

        return (initialValue * (timestamp - _start)) / _duration;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dao","type":"address"},{"internalType":"address","name":"iporToken","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"uint64","name":"durationSeconds","type":"uint64"},{"internalType":"address[]","name":"stakeholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"appointedOwner","type":"address"}],"name":"AppointedToTransferOwnership","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"string","name":"declaration","type":"string"}],"name":"ConfirmedTermsOfUse","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"StakeholderAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address[]","name":"stakeholders","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"addStakeholders","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"confirmTransferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStart","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getState","outputs":[{"internalType":"uint256","name":"initialValue","type":"uint256"},{"internalType":"uint256","name":"released","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalStakeholders","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint64","name":"timestamp","type":"uint64"}],"name":"getVestedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"releasable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"declaration","type":"string"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"appointedOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawAllToDao","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101006040523480156200001257600080fd5b5060405162001fc138038062001fc1833981016040819052620000359162000799565b6000805460ff19169055600180558585838362000052336200051a565b604080518082019091526008815267049504f525f3735360c41b60208201526001600160a01b038516620000a45760405162461bcd60e51b81526004016200009b9190620008b3565b60405180910390fd5b50604080518082019091526008815267049504f525f3735360c41b60208201526001600160a01b038416620000ee5760405162461bcd60e51b81526004016200009b9190620008b3565b507fdba05ed67d0251facfcab8345f27ccd3e72b5a1da8cebfabbcccf4316e6d053c60001b836001600160a01b0316634788cabf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000152573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000178919062000903565b1460405180604001604052806008815260200167049504f525f3736360c41b81525090620001bb5760405162461bcd60e51b81526004016200009b9190620008b3565b508151815160408051808201909152600881526724a827a92f9b9a9960c11b6020820152908214620002025760405162461bcd60e51b81526004016200009b9190620008b3565b50604080518082019091526008815267125413d497cdcd4d60c21b602082015281620002435760405162461bcd60e51b81526004016200009b9190620008b3565b5060008060005b83811015620003e2578481815181106200026857620002686200091d565b602002602001015192508581815181106200028757620002876200091d565b6020026020010151915060006001600160a01b0316826001600160a01b0316141560405180604001604052806008815260200167049504f525f3735360c41b81525090620002ea5760405162461bcd60e51b81526004016200009b9190620008b3565b5060408051808201909152600881526749504f525f37353360c01b6020820152836200032b5760405162461bcd60e51b81526004016200009b9190620008b3565b5060405180604001604052806200034d856200056c60201b62000c241760201c565b6001600160801b039081168252600060209283018190526001600160a01b03861680825260048452604091829020855195909401518316600160801b02949092169390931790915590517f120bfdd311a35c23d43060f2ed5044e464ade4940f2f49f164ab6e0b32eb833690620003c79086815260200190565b60405180910390a2620003da8162000949565b90506200024a565b50620003f9836200056c60201b62000c241760201c565b600580546010906200041d908490600160801b90046001600160801b031662000965565b82546001600160801b039182166101009390930a9283029190920219909116179055506001600160a01b03808816608052861660a0526200045d620005db565b5050505050505042846001600160401b0316116040518060400160405280600881526020016749504f525f37353960c01b81525090620004b25760405162461bcd60e51b81526004016200009b9190620008b3565b50604080518082019091526008815267092a09ea4be6e6a760c31b60208201526001600160401b038416620004fc5760405162461bcd60e51b81526004016200009b9190620008b3565b5050506001600160401b0391821660c0521660e052506200098f9050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160801b03821115620005d75760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016200009b565b5090565b620005e562000638565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200061b3390565b6040516001600160a01b03909116815260200160405180910390a1565b60005460ff1615620006805760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016200009b565b565b80516001600160a01b03811681146200069a57600080fd5b919050565b80516001600160401b03811681146200069a57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620006f857620006f8620006b7565b604052919050565b60006001600160401b038211156200071c576200071c620006b7565b5060051b60200190565b600082601f8301126200073857600080fd5b81516020620007516200074b8362000700565b620006cd565b82815260059290921b840181019181810190868411156200077157600080fd5b8286015b848110156200078e578051835291830191830162000775565b509695505050505050565b60008060008060008060c08789031215620007b357600080fd5b620007be8762000682565b95506020620007cf81890162000682565b9550620007df604089016200069f565b9450620007ef606089016200069f565b60808901519094506001600160401b03808211156200080d57600080fd5b818a0191508a601f8301126200082257600080fd5b8151620008336200074b8262000700565b81815260059190911b8301840190848101908d8311156200085357600080fd5b938501935b828510156200087c576200086c8562000682565b8252938501939085019062000858565b60a08d015190975094505050808311156200089657600080fd5b5050620008a689828a0162000726565b9150509295509295509295565b600060208083528351808285015260005b81811015620008e257858101830151858201604001528201620008c4565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156200091657600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200095e576200095e62000933565b5060010190565b6001600160801b0381811683821601908082111562000988576200098862000933565b5092915050565b60805160a05160c05160e0516115ce620009f36000396000818161024e01528181610f4a0152610fbc01526000818161027e01528181610f0301528181610f6b0152610fe10152600081816102f70152610b1f0152600061032801526115ce6000f3fe608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b2578063ad2e8c9b11610081578063cc29516a11610066578063cc29516a146102ac578063f2fde38b146102b4578063f34e3723146102c757600080fd5b8063ad2e8c9b1461024c578063c5292c671461027c57600080fd5b8063715018a61461020e5780638456cb59146102165780638da5cb5b1461021e578063a3f8eace1461023957600080fd5b80634b14c0ef116100ee5780634b14c0ef146101b25780635c975abb146101cd57806365ba262c146101e35780636fc43663146101f657600080fd5b806314ab2612146101205780631bab58f51461012a5780633f4ba83a14610197578063463aa96b1461019f575b600080fd5b6101286102da565b005b61017d6101383660046111fe565b6001600160a01b03166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b909204169290910182905291565b604080519283526020830191909152015b60405180910390f35b61012861041e565b6101286101ad366004611265565b610430565b6005546001600160801b03165b60405190815260200161018e565b60005460ff16604051901515815260200161018e565b6101bf6101f13660046112d1565b6105a5565b600554600160801b90046001600160801b03166101bf565b6101286105da565b6101286105fe565b6002546040516001600160a01b03909116815260200161018e565b6101bf6102473660046111fe565b61060e565b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166101bf565b7f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff166101bf565b610128610658565b6101286102c23660046111fe565b6106d2565b6101286102d5366004611315565b610780565b6102e2610ca7565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb907f00000000000000000000000000000000000000000000000000000000000000009083906370a0823190602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611387565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156103f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041b91906113a0565b50565b610426610ca7565b61042e610d01565b565b610438610ca7565b60408051808201909152600881527f49504f525f373532000000000000000000000000000000000000000000000000602082015283908282146104975760405162461bcd60e51b815260040161048e91906113ed565b60405180910390fd5b5060408051808201909152600881527f49504f525f3735340000000000000000000000000000000000000000000000006020820152816104ea5760405162461bcd60e51b815260040161048e91906113ed565b5060005b8181101561054e5761053e86868381811061050b5761050b611420565b905060200201602081019061052091906111fe565b85858481811061053257610532611420565b90506020020135610d53565b6105478161144c565b90506104ee565b5061055881610c24565b6005805460109061057a908490600160801b90046001600160801b0316611465565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505050505050565b6001600160a01b0382166000908152600460205260408120546105d1906001600160801b031683610eff565b90505b92915050565b6105e2610ca7565b6105ec6000611024565b600380546001600160a01b0319169055565b610606610ca7565b61042e611076565b6001600160a01b03811660009081526004602090815260408083208151808301909252546001600160801b038082168352600160801b90910416918101919091526105d4906110b3565b60035460408051808201909152600881527f49504f525f3030370000000000000000000000000000000000000000000000006020820152906001600160a01b031633146106b85760405162461bcd60e51b815260040161048e91906113ed565b50600380546001600160a01b031916905561042e33611024565b6106da610ca7565b60408051808201909152600881527f49504f525f30303000000000000000000000000000000000000000000000000060208201526001600160a01b0382166107355760405162461bcd60e51b815260040161048e91906113ed565b50600380546001600160a01b0319166001600160a01b0383169081179091556040517f3ec7bb1d452f3c36260fa8ef678a597fd97574d8ec42f6dc98ffce3dbc91228f90600090a250565b6107886110e4565b610790611137565b81818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604051610853925060200190507f4920636f6e6669726d2074686174204920616d20696e20636f6d706c69616e6381527f65207769746820746865205465726d73206f6620557365206c6f63617465642060208201527f61742068747470733a2f2f7777772e69706f722e696f2f7465726d732d6f662d6040820152633ab9b29760e11b606082015260640190565b604051602081830303815290604052805190602001208160405160200161087a919061148c565b60405160208183030381529060405280519060200120146040518060400160405280600881526020017f49504f525f373631000000000000000000000000000000000000000000000000815250906108e55760405162461bcd60e51b815260040161048e91906113ed565b50336000818152600460209081526040918290208251808401845290546001600160801b03808216808452600160801b90920416828401528351808501909452600884526749504f525f37353360c01b92840192909252919061095b5760405162461bcd60e51b815260040161048e91906113ed565b506020810151815160009161096f916114a8565b6001600160801b0316116040518060400160405280600881526020017f49504f525f373535000000000000000000000000000000000000000000000000815250906109cd5760405162461bcd60e51b815260040161048e91906113ed565b5060006109d9826110b3565b90508082602001516001600160801b03166109f491906114c8565b82600001516001600160801b031610156040518060400160405280600881526020017f49504f525f37353700000000000000000000000000000000000000000000000081525090610a585760405162461bcd60e51b815260040161048e91906113ed565b50610a6281610c24565b82602001818151610a739190611465565b6001600160801b039081169091526001600160a01b03851660009081526004602090815260409091208551918601518316600160801b029190921617905550610abb81610c24565b60058054600090610ad69084906001600160801b0316611465565b82546001600160801b039182166101009390930a92830291909202199091161790555060405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c91906113a0565b50826001600160a01b03167f3d7a24afc0f9ae513f3360e372be67fc79beb218c832b099fe454067a96f32498787604051610bc89291906114db565b60405180910390a2826001600160a01b03167f9cf9e3ab58b33f06d81842ea0ad850b6640c6430d6396973312e1715792e7a9182604051610c0b91815260200190565b60405180910390a250505050610c2060018055565b5050565b60006001600160801b03821115610ca35760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161048e565b5090565b6002546001600160a01b0316331461042e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048e565b610d09611190565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60408051808201909152600881527f49504f525f37353000000000000000000000000000000000000000000000000060208201526001600160a01b038316610dae5760405162461bcd60e51b815260040161048e91906113ed565b5060408051808201909152600881526749504f525f37353360c01b602082015281610dec5760405162461bcd60e51b815260040161048e91906113ed565b506001600160a01b038216600090815260046020908152604091829020548251808401909352600883527f49504f525f373536000000000000000000000000000000000000000000000000918301919091526001600160801b031615610e655760405162461bcd60e51b815260040161048e91906113ed565b506040518060400160405280610e7a83610c24565b6001600160801b039081168252600060209283018190526001600160a01b03861680825260048452604091829020855195909401518316600160801b02949092169390931790915590517f120bfdd311a35c23d43060f2ed5044e464ade4940f2f49f164ab6e0b32eb833690610ef39084815260200190565b60405180910390a25050565b60007f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff168267ffffffffffffffff161015610f45575060006105d4565b610f8f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061150a565b67ffffffffffffffff168267ffffffffffffffff161115610fb15750816105d4565b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166110067f00000000000000000000000000000000000000000000000000000000000000008461152b565b61101a9067ffffffffffffffff168561154c565b6105d19190611563565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61107e6110e4565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d363390565b600081602001516001600160801b03166110da83600001516001600160801b031642610eff565b6105d49190611585565b60005460ff161561042e5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161048e565b6002600154036111895760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161048e565b6002600155565b60005460ff1661042e5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161048e565b80356001600160a01b03811681146111f957600080fd5b919050565b60006020828403121561121057600080fd5b6105d1826111e2565b60008083601f84011261122b57600080fd5b50813567ffffffffffffffff81111561124357600080fd5b6020830191508360208260051b850101111561125e57600080fd5b9250929050565b6000806000806040858703121561127b57600080fd5b843567ffffffffffffffff8082111561129357600080fd5b61129f88838901611219565b909650945060208701359150808211156112b857600080fd5b506112c587828801611219565b95989497509550505050565b600080604083850312156112e457600080fd5b6112ed836111e2565b9150602083013567ffffffffffffffff8116811461130a57600080fd5b809150509250929050565b6000806020838503121561132857600080fd5b823567ffffffffffffffff8082111561134057600080fd5b818501915085601f83011261135457600080fd5b81358181111561136357600080fd5b86602082850101111561137557600080fd5b60209290920196919550909350505050565b60006020828403121561139957600080fd5b5051919050565b6000602082840312156113b257600080fd5b815180151581146113c257600080fd5b9392505050565b60005b838110156113e45781810151838201526020016113cc565b50506000910152565b602081526000825180602084015261140c8160408501602087016113c9565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161145e5761145e611436565b5060010190565b6001600160801b0381811683821601908082111561148557611485611436565b5092915050565b6000825161149e8184602087016113c9565b9190910192915050565b6001600160801b0382811682821603908082111561148557611485611436565b808201808211156105d4576105d4611436565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b67ffffffffffffffff81811683821601908082111561148557611485611436565b67ffffffffffffffff82811682821603908082111561148557611485611436565b80820281158282048414176105d4576105d4611436565b60008261158057634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156105d4576105d461143656fea264697066735822122027b833793944cb0505ecd4ea059d89ae9578f1dada66f2fad788d8f5333028ac64736f6c63430008110033000000000000000000000000b7be82790d40258fd028beef2f2007dc044f34590000000000000000000000001e4746dc744503b53b4a082cb3607b169a2890900000000000000000000000000000000000000000000000000000000063c7df400000000000000000000000000000000000000000000000000000000000f099c000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000d600000000000000000000000000000000000000000000000000000000000000064000000000000000000000000df644ac5d9480ae0ec0b2b6b07141fcc7174a07600000000000000000000000001ec4a63e8bd579e1a2cea4763cf3a5da5e48e8b00000000000000000000000005a84dac7d722e3313b5c94e2681baac3427ba76000000000000000000000000074a8adeb96ef74ae82a6377c8085106f014989c0000000000000000000000000766569cbc0ed6291551589f66e0d0b2da3881de00000000000000000000000007d7d3badcb55dcb5f5d4c77b0513b9ec73507f8000000000000000000000000097e3725a78fe52a803da00e827bb60a9950948300000000000000000000000009e8516aeaccb2e79fb954144404eef908d72b240000000000000000000000000c8ee7dbf8cb1d980c107d3df6357deac7dbe9ef0000000000000000000000000c988abc38a818bbb2fb9f8f9b547748cf5d42b50000000000000000000000000da2b44edd7ba460cfce12f99f351cac8f2160960000000000000000000000000fd6f65d35cf13ae51795036d0ae9af42f3cbcb400000000000000000000000011d67fa925877813b744abc0917900c2b1d6eb810000000000000000000000001398206b0d65048edd2864496655255f5de9e4e000000000000000000000000013bf4152e8b499b15f272fd61eb4dabe88072d9f0000000000000000000000001846507590b77f961f9133eefd6bffd9bccaa2d1000000000000000000000000193f0ee42a199a0cecd479a9f09ba293eb1ca35700000000000000000000000019ee073e863c6a6f6da9326044067507ea76a6930000000000000000000000001e6bd36167620641cc88c846b815ada76f754e5b0000000000000000000000001f427a6fcdb95a7393c58552093e10a932890fa80000000000000000000000001fc550e98ad3021e32c47a84019f77a0792c60b700000000000000000000000020c9bd4cff005082867e5928926200c872cd8b3d000000000000000000000000219723d005e383032ea9ae43e4a72bdead0fa38b000000000000000000000000229ca6e76661463b920d9a24db8237110df78ef700000000000000000000000024621aa4dde07f04c57146d83468969010b7489e0000000000000000000000002477296e9bb326506039c01ad22475133d93265900000000000000000000000025beda673690ecd0a8a64d35ab228fc2e1c0048a00000000000000000000000026fdc242eccc144971e558ff458a4ec21b75d4e800000000000000000000000027b19813451bcae3031cabd40b7587b26eaa7d8a0000000000000000000000002a3381b6909512ff4a028b6ca747e4592f8384d50000000000000000000000002b47c57a4c9fc1649b43500f4c0cda6cf29be2780000000000000000000000002b6c7e127a5f799587b0f9b4393d62b26cf85c950000000000000000000000002b92d12d8cc0b9af862451393925092c6c21a6110000000000000000000000002ec1d7a211245d31aaad13ffc11a06e2b21d56e30000000000000000000000003140f301fa35d667de5775fa1b00ad0a4dc7eb5c00000000000000000000000032d4135f53a85250d58b97bc5c1d2c29161a3ff700000000000000000000000033fe24d01539c99c50ecbabec91e05b0f802c0b900000000000000000000000035642de97d6376dd55240ffd35fafd2619515e5400000000000000000000000035d448178c938ee1a2dd0c3c9da3185d433e79aa000000000000000000000000380568bcadb2ebdd84b9d0f4e6702ee760ce6944000000000000000000000000388411e858cb11414b7eeccf26c8c6a2c23ec52f0000000000000000000000003b3abbf96e7d4c738994607822d786c791f022ee0000000000000000000000003b91caba057858ba138dc2e00cda9f3603d77a440000000000000000000000003e2178cf851a0e5cbf84c0ff53f820ad7ead703b0000000000000000000000003f2c67f587bf7a42f6cb2dcde5d24d5506756748000000000000000000000000425774e62423b870a22477b391c7a00bfc83bdd700000000000000000000000042e8f94fba0f2b63449c3042c6dc6511f694446a000000000000000000000000442b263a0aab7c90a822a99e49d27cc8d2af20ed000000000000000000000000466e956ca9987b0b119330df65bf6ec4c3876e4f0000000000000000000000004bfac3a78ef7308861e6d91da922e9d162e88b7f0000000000000000000000004c1270592cc6a34f8371100cb3cf55961b7bd7fa0000000000000000000000004c36e31a6006edcc58fd92fe3cb35683f78401a40000000000000000000000004d58d36e46cf9af14e416061fe5d0074780b40990000000000000000000000004e47e39033a19f306598167499dc070b6039aaa10000000000000000000000005053a1354cb45eebdd2d8342ceee71d41efa75ca0000000000000000000000005498ff04a598f05b1ee3483b506d1191c7718bfd0000000000000000000000005648af1b3c089e4226e71ecc060df2c4cb4118dc00000000000000000000000057d621d02992672b80154243d54353b66e4483ae0000000000000000000000005878fc144c6f77d7cd4744b12bccd7f4f500af180000000000000000000000005a93fdde08b8e6197bb7b9e8eabcfceb526079320000000000000000000000005ced142150f7d0ee71c2300b34d51e5dc9f8c4560000000000000000000000005d4ce7a8e2483e35b2d8009def56bbe8a4352bb80000000000000000000000005ef3e3395f838bc5736efbce77884bd06035313b0000000000000000000000005ff2692b3f0803e6985d1ed1a2366f0bc28121e7000000000000000000000000606315589e4d36b5743673c6e40eb1ced571128c0000000000000000000000006169741408049837837a2c59ce22e01e5136c5570000000000000000000000006453a5733c4f03a5d290082a0d0aed5e876404c000000000000000000000000064b71f8546c4fcf06fc13294ded73dcaea3fc241000000000000000000000000664d448a984dae1e829bf71e837facd7b657ee1000000000000000000000000066666666c510be02a4d15aa75d5a236068b2a1fa0000000000000000000000006767ad8d45dd579b272f5a4a4d046909eb9211140000000000000000000000006919c4b67e9656c784b46f7b941cf639a66ccd660000000000000000000000006b5e7ec2c4440331a1458edb021d6944fdae530a0000000000000000000000006cd68e8f04490cd1a5a21cc97cc8bc15b47dc9eb0000000000000000000000006d661b5003f90d787561fe0c6a119e3510c5113f0000000000000000000000006d84264a7bd2cffa4a117ba2350403b3a98669490000000000000000000000006f76d8a2aef804ebdd1e7768185f18025f354ee90000000000000000000000007029bfa9a85ebf4653945be520dc3b7f1181f4af000000000000000000000000706d961ab69d54a0fcbaa13e77842279a57241390000000000000000000000007224bb066aaf4ae984e85f9ee959e075b822d4a200000000000000000000000074b7e6d4336df8038a44393cac5b7ac53fd75c7a0000000000000000000000007560cbe62147199a7948bcb79770de071b5725bc000000000000000000000000767a60f295aedd958932088f9cd6a4951d8739b600000000000000000000000076a9081947b50c4cd770169f755385287edbd2df0000000000000000000000007706dd0517df06612050a93ce3681d05011dca80000000000000000000000000771f1324cefbe2ef765e42a188c0bffe62d2c2c000000000000000000000000078bc83b1255d96b190848b3a8146491cd7e631340000000000000000000000007a205a4a5f1cc04cfa751b030322804a0eb42d330000000000000000000000007a62d6cf2517af31032a947ffdd8a385b45c80ce0000000000000000000000007a6cbd7a4562021fbdc0ac328c6c572fd703087a0000000000000000000000007ab066bcd945264e1b1c8d451cb3517c973e676c0000000000000000000000007aef2d7671efb00a7196eb4bbd8ee7a2ba0e5de20000000000000000000000007c3740171c672df753a935305a5be703388766630000000000000000000000007d9ae789d649b7cf5748c8b9eb96d9a2068b87eb0000000000000000000000007eb4d1f3b748890d7dfcd8eae09b087454fedce90000000000000000000000007ede3c6fe8e68e420c23ada6eb9ce9fe99f742410000000000000000000000007f2c610ea7287b2d302b949f0d21d3b927e75d160000000000000000000000007f7bac92aa3e28351f9e89535ca334e8a44542d0000000000000000000000000808253c190aca3c2c24f1025d76709f462e3027600000000000000000000000080fb1715bc81926babc68842c6df472cddc9b664000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000010f0cf064dd59200000000000000000000000000000000000000000000000000004e369a49d3ca788a000000000000000000000000000000000000000000000000337cb0c4809b83400000000000000000000000000000000000000000000000005ce07d674f58b87800000000000000000000000000000000000000000000000019ed6dbf415a6c5000000000000000000000000000000000000000000000000032181542ecb1f3440000000000000000000000000000000000000000000000001bc7691ad2794e4a0000000000000000000000000000000000000000000000001a26e497a3c93b40000000000000000000000000000000000000000000000005813b7c3faec20408000000000000000000000000000000000000000000000012aec379fac4eb2ea00000000000000000000000000000000000000000000000030c22fe8958b7e9d8000000000000000000000000000000000000000000000036ced485fce80510a0000000000000000000000000000000000000000000000000eae64158a8909304000000000000000000000000000000000000000000000016fb601bf471a4ee78000000000000000000000000000000000000000000000000510a683cd1a3fd820000000000000000000000000000000000000000000000003099cabaafb9f9c000000000000000000000000000000000000000000000000a87c06c6c9dc04608000000000000000000000000000000000000000000000000202935aa9e9e817200000000000000000000000000000000000000000000000043a9c9735350a08c0000000000000000000000000000000000000000000000030c7a14d9b8cdb3bc00000000000000000000000000000000000000000000000095f2cb78e56fc4640000000000000000000000000000000000000000000000006c3e5a01c0a84c800000000000000000000000000000000000000000000000001d32845c5f052bb80000000000000000000000000000000000000000000000096c969437ddc7c8f00000000000000000000000000000000000000000000000006346cd2bdd6942c400000000000000000000000000000000000000000000001dbf9a4e395f9ab330000000000000000000000000000000000000000000000001b33c7b97a5d88480000000000000000000000000000000000000000000000000c69b2daffd7d3150000000000000000000000000000000000000000000000002909f98fccb45cc500000000000000000000000000000000000000000000000005db0eadb41725d88000000000000000000000000000000000000000000000002d9dc965eacc424bc000000000000000000000000000000000000000000000008337bc76e7892f4180000000000000000000000000000000000000000000000005ae12051375ce90c000000000000000000000000000000000000000000000001473a21a038ea0d400000000000000000000000000000000000000000000000002fcc5abbfb55cbf8000000000000000000000000000000000000000000000006d7d6b4811b6e0fb800000000000000000000000000000000000000000000001115f39b785581bc2000000000000000000000000000000000000000000000000021a8b8a6b6c4c8a60000000000000000000000000000000000000000000000041c81e2144f33b3b8000000000000000000000000000000000000000000000000d8a16556f7440df800000000000000000000000000000000000000000000002cf0af9ce3a388c7a00000000000000000000000000000000000000000000000001b362e2166fc2ed200000000000000000000000000000000000000000000000041ffe3f2f321c3000000000000000000000000000000000000000000000000002fa0818d483b6c8600000000000000000000000000000000000000000000000db1d8e4fd586091e00000000000000000000000000000000000000000000000005429476f43569c180000000000000000000000000000000000000000000000061c3a5233641de340000000000000000000000000000000000000000000000002d1f29b2276c59838000000000000000000000000000000000000000000000000863251b3128e4bec000000000000000000000000000000000000000000000026f4acfeaf51664780000000000000000000000000000000000000000000000000e2a011ad686b8fb4000000000000000000000000000000000000000000000000376d204fbebfe4100000000000000000000000000000000000000000000000009ad1354c761bcfb00000000000000000000000000000000000000000000000107d015ce4d364059800000000000000000000000000000000000000000000000030cad4cfa84484f800000000000000000000000000000000000000000000000a907b299713d1ed3800000000000000000000000000000000000000000000001a10cd0654038d87e0000000000000000000000000000000000000000000000003390d38f7f04bfc98000000000000000000000000000000000000000000000003d8ae6ad2fd643f280000000000000000000000000000000000000000000000034aa83719948cf28c00000000000000000000000000000000000000000000000199d41f578c71b3a40000000000000000000000000000000000000000000000016338034a5d9b21880000000000000000000000000000000000000000000000012db7f13e3783a7000000000000000000000000000000000000000000000000032486c304be394c0000000000000000000000000000000000000000000000000026ee7c772e272a0e0000000000000000000000000000000000000000000000008a4c338475f3032800000000000000000000000000000000000000000000000023a1c17b28925df40000000000000000000000000000000000000000000000005370eecf421bc2ee000000000000000000000000000000000000000000000000165721ff45a8f25e000000000000000000000000000000000000000000000000236af0698ef738ea0000000000000000000000000000000000000000000000129958290a7f8e25b80000000000000000000000000000000000000000000000003f3fdd121b97c5b4000000000000000000000000000000000000000000000000950e6704312222e400000000000000000000000000000000000000000000000058ed24694ec0ad60000000000000000000000000000000000000000000000006dbdc186c0b600a100000000000000000000000000000000000000000000000030e960577683bf0100000000000000000000000000000000000000000000000125ce0fa7d6ce64f180000000000000000000000000000000000000000000000004635fd46c440f630000000000000000000000000000000000000000000000000421b7b13dbc8480400000000000000000000000000000000000000000000000020d3bdc1fc65437800000000000000000000000000000000000000000000000086ecab714a57251c00000000000000000000000000000000000000000000000020e67c0332030670000000000000000000000000000000000000000000000000fb0715b6f308dec40000000000000000000000000000000000000000000000003b93228d1dbd067800000000000000000000000000000000000000000000000016357744a4538da0000000000000000000000000000000000000000000000000313db4a42532eeb0000000000000000000000000000000000000000000000000aa925f99b5f50a7800000000000000000000000000000000000000000000000016cb1a7f80736936000000000000000000000000000000000000000000000006381cb9cf6b601400000000000000000000000000000000000000000000000002a1dad8511d4f8448000000000000000000000000000000000000000000000001bd83188592935ab800000000000000000000000000000000000000000000000bb9d607cbe17346000000000000000000000000000000000000000000000000030d98280cd086961c0000000000000000000000000000000000000000000000002a8bdc06aa2ae2aa0000000000000000000000000000000000000000000000005d06e1480b9789dc0000000000000000000000000000000000000000000000001b34777dd627940600000000000000000000000000000000000000000000000674ef79a6813d91e8000000000000000000000000000000000000000000000000456cd2befb81427000000000000000000000000000000000000000000000001a2f1094d740f30b780000000000000000000000000000000000000000000000002941799f86bb8dfc0

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061011b5760003560e01c8063715018a6116100b2578063ad2e8c9b11610081578063cc29516a11610066578063cc29516a146102ac578063f2fde38b146102b4578063f34e3723146102c757600080fd5b8063ad2e8c9b1461024c578063c5292c671461027c57600080fd5b8063715018a61461020e5780638456cb59146102165780638da5cb5b1461021e578063a3f8eace1461023957600080fd5b80634b14c0ef116100ee5780634b14c0ef146101b25780635c975abb146101cd57806365ba262c146101e35780636fc43663146101f657600080fd5b806314ab2612146101205780631bab58f51461012a5780633f4ba83a14610197578063463aa96b1461019f575b600080fd5b6101286102da565b005b61017d6101383660046111fe565b6001600160a01b03166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b909204169290910182905291565b604080519283526020830191909152015b60405180910390f35b61012861041e565b6101286101ad366004611265565b610430565b6005546001600160801b03165b60405190815260200161018e565b60005460ff16604051901515815260200161018e565b6101bf6101f13660046112d1565b6105a5565b600554600160801b90046001600160801b03166101bf565b6101286105da565b6101286105fe565b6002546040516001600160a01b03909116815260200161018e565b6101bf6102473660046111fe565b61060e565b7f0000000000000000000000000000000000000000000000000000000000f099c067ffffffffffffffff166101bf565b7f0000000000000000000000000000000000000000000000000000000063c7df4067ffffffffffffffff166101bf565b610128610658565b6101286102c23660046111fe565b6106d2565b6101286102d5366004611315565b610780565b6102e2610ca7565b6040516370a0823160e01b81523060048201527f0000000000000000000000001e4746dc744503b53b4a082cb3607b169a2890906001600160a01b03169063a9059cbb907f000000000000000000000000b7be82790d40258fd028beef2f2007dc044f34599083906370a0823190602401602060405180830381865afa158015610370573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103949190611387565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af11580156103f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061041b91906113a0565b50565b610426610ca7565b61042e610d01565b565b610438610ca7565b60408051808201909152600881527f49504f525f373532000000000000000000000000000000000000000000000000602082015283908282146104975760405162461bcd60e51b815260040161048e91906113ed565b60405180910390fd5b5060408051808201909152600881527f49504f525f3735340000000000000000000000000000000000000000000000006020820152816104ea5760405162461bcd60e51b815260040161048e91906113ed565b5060005b8181101561054e5761053e86868381811061050b5761050b611420565b905060200201602081019061052091906111fe565b85858481811061053257610532611420565b90506020020135610d53565b6105478161144c565b90506104ee565b5061055881610c24565b6005805460109061057a908490600160801b90046001600160801b0316611465565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505050505050565b6001600160a01b0382166000908152600460205260408120546105d1906001600160801b031683610eff565b90505b92915050565b6105e2610ca7565b6105ec6000611024565b600380546001600160a01b0319169055565b610606610ca7565b61042e611076565b6001600160a01b03811660009081526004602090815260408083208151808301909252546001600160801b038082168352600160801b90910416918101919091526105d4906110b3565b60035460408051808201909152600881527f49504f525f3030370000000000000000000000000000000000000000000000006020820152906001600160a01b031633146106b85760405162461bcd60e51b815260040161048e91906113ed565b50600380546001600160a01b031916905561042e33611024565b6106da610ca7565b60408051808201909152600881527f49504f525f30303000000000000000000000000000000000000000000000000060208201526001600160a01b0382166107355760405162461bcd60e51b815260040161048e91906113ed565b50600380546001600160a01b0319166001600160a01b0383169081179091556040517f3ec7bb1d452f3c36260fa8ef678a597fd97574d8ec42f6dc98ffce3dbc91228f90600090a250565b6107886110e4565b610790611137565b81818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604051610853925060200190507f4920636f6e6669726d2074686174204920616d20696e20636f6d706c69616e6381527f65207769746820746865205465726d73206f6620557365206c6f63617465642060208201527f61742068747470733a2f2f7777772e69706f722e696f2f7465726d732d6f662d6040820152633ab9b29760e11b606082015260640190565b604051602081830303815290604052805190602001208160405160200161087a919061148c565b60405160208183030381529060405280519060200120146040518060400160405280600881526020017f49504f525f373631000000000000000000000000000000000000000000000000815250906108e55760405162461bcd60e51b815260040161048e91906113ed565b50336000818152600460209081526040918290208251808401845290546001600160801b03808216808452600160801b90920416828401528351808501909452600884526749504f525f37353360c01b92840192909252919061095b5760405162461bcd60e51b815260040161048e91906113ed565b506020810151815160009161096f916114a8565b6001600160801b0316116040518060400160405280600881526020017f49504f525f373535000000000000000000000000000000000000000000000000815250906109cd5760405162461bcd60e51b815260040161048e91906113ed565b5060006109d9826110b3565b90508082602001516001600160801b03166109f491906114c8565b82600001516001600160801b031610156040518060400160405280600881526020017f49504f525f37353700000000000000000000000000000000000000000000000081525090610a585760405162461bcd60e51b815260040161048e91906113ed565b50610a6281610c24565b82602001818151610a739190611465565b6001600160801b039081169091526001600160a01b03851660009081526004602090815260409091208551918601518316600160801b029190921617905550610abb81610c24565b60058054600090610ad69084906001600160801b0316611465565b82546001600160801b039182166101009390930a92830291909202199091161790555060405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390527f0000000000000000000000001e4746dc744503b53b4a082cb3607b169a289090169063a9059cbb906044016020604051808303816000875af1158015610b68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8c91906113a0565b50826001600160a01b03167f3d7a24afc0f9ae513f3360e372be67fc79beb218c832b099fe454067a96f32498787604051610bc89291906114db565b60405180910390a2826001600160a01b03167f9cf9e3ab58b33f06d81842ea0ad850b6640c6430d6396973312e1715792e7a9182604051610c0b91815260200190565b60405180910390a250505050610c2060018055565b5050565b60006001600160801b03821115610ca35760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f3238206269747300000000000000000000000000000000000000000000000000606482015260840161048e565b5090565b6002546001600160a01b0316331461042e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161048e565b610d09611190565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60408051808201909152600881527f49504f525f37353000000000000000000000000000000000000000000000000060208201526001600160a01b038316610dae5760405162461bcd60e51b815260040161048e91906113ed565b5060408051808201909152600881526749504f525f37353360c01b602082015281610dec5760405162461bcd60e51b815260040161048e91906113ed565b506001600160a01b038216600090815260046020908152604091829020548251808401909352600883527f49504f525f373536000000000000000000000000000000000000000000000000918301919091526001600160801b031615610e655760405162461bcd60e51b815260040161048e91906113ed565b506040518060400160405280610e7a83610c24565b6001600160801b039081168252600060209283018190526001600160a01b03861680825260048452604091829020855195909401518316600160801b02949092169390931790915590517f120bfdd311a35c23d43060f2ed5044e464ade4940f2f49f164ab6e0b32eb833690610ef39084815260200190565b60405180910390a25050565b60007f0000000000000000000000000000000000000000000000000000000063c7df4067ffffffffffffffff168267ffffffffffffffff161015610f45575060006105d4565b610f8f7f0000000000000000000000000000000000000000000000000000000000f099c07f0000000000000000000000000000000000000000000000000000000063c7df4061150a565b67ffffffffffffffff168267ffffffffffffffff161115610fb15750816105d4565b67ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000f099c0166110067f0000000000000000000000000000000000000000000000000000000063c7df408461152b565b61101a9067ffffffffffffffff168561154c565b6105d19190611563565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61107e6110e4565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610d363390565b600081602001516001600160801b03166110da83600001516001600160801b031642610eff565b6105d49190611585565b60005460ff161561042e5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a2070617573656400000000000000000000000000000000604482015260640161048e565b6002600154036111895760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161048e565b6002600155565b60005460ff1661042e5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f7420706175736564000000000000000000000000604482015260640161048e565b80356001600160a01b03811681146111f957600080fd5b919050565b60006020828403121561121057600080fd5b6105d1826111e2565b60008083601f84011261122b57600080fd5b50813567ffffffffffffffff81111561124357600080fd5b6020830191508360208260051b850101111561125e57600080fd5b9250929050565b6000806000806040858703121561127b57600080fd5b843567ffffffffffffffff8082111561129357600080fd5b61129f88838901611219565b909650945060208701359150808211156112b857600080fd5b506112c587828801611219565b95989497509550505050565b600080604083850312156112e457600080fd5b6112ed836111e2565b9150602083013567ffffffffffffffff8116811461130a57600080fd5b809150509250929050565b6000806020838503121561132857600080fd5b823567ffffffffffffffff8082111561134057600080fd5b818501915085601f83011261135457600080fd5b81358181111561136357600080fd5b86602082850101111561137557600080fd5b60209290920196919550909350505050565b60006020828403121561139957600080fd5b5051919050565b6000602082840312156113b257600080fd5b815180151581146113c257600080fd5b9392505050565b60005b838110156113e45781810151838201526020016113cc565b50506000910152565b602081526000825180602084015261140c8160408501602087016113c9565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006001820161145e5761145e611436565b5060010190565b6001600160801b0381811683821601908082111561148557611485611436565b5092915050565b6000825161149e8184602087016113c9565b9190910192915050565b6001600160801b0382811682821603908082111561148557611485611436565b808201808211156105d4576105d4611436565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b67ffffffffffffffff81811683821601908082111561148557611485611436565b67ffffffffffffffff82811682821603908082111561148557611485611436565b80820281158282048414176105d4576105d4611436565b60008261158057634e487b7160e01b600052601260045260246000fd5b500490565b818103818111156105d4576105d461143656fea264697066735822122027b833793944cb0505ecd4ea059d89ae9578f1dada66f2fad788d8f5333028ac64736f6c63430008110033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000b7be82790d40258fd028beef2f2007dc044f34590000000000000000000000001e4746dc744503b53b4a082cb3607b169a2890900000000000000000000000000000000000000000000000000000000063c7df400000000000000000000000000000000000000000000000000000000000f099c000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000d600000000000000000000000000000000000000000000000000000000000000064000000000000000000000000df644ac5d9480ae0ec0b2b6b07141fcc7174a07600000000000000000000000001ec4a63e8bd579e1a2cea4763cf3a5da5e48e8b00000000000000000000000005a84dac7d722e3313b5c94e2681baac3427ba76000000000000000000000000074a8adeb96ef74ae82a6377c8085106f014989c0000000000000000000000000766569cbc0ed6291551589f66e0d0b2da3881de00000000000000000000000007d7d3badcb55dcb5f5d4c77b0513b9ec73507f8000000000000000000000000097e3725a78fe52a803da00e827bb60a9950948300000000000000000000000009e8516aeaccb2e79fb954144404eef908d72b240000000000000000000000000c8ee7dbf8cb1d980c107d3df6357deac7dbe9ef0000000000000000000000000c988abc38a818bbb2fb9f8f9b547748cf5d42b50000000000000000000000000da2b44edd7ba460cfce12f99f351cac8f2160960000000000000000000000000fd6f65d35cf13ae51795036d0ae9af42f3cbcb400000000000000000000000011d67fa925877813b744abc0917900c2b1d6eb810000000000000000000000001398206b0d65048edd2864496655255f5de9e4e000000000000000000000000013bf4152e8b499b15f272fd61eb4dabe88072d9f0000000000000000000000001846507590b77f961f9133eefd6bffd9bccaa2d1000000000000000000000000193f0ee42a199a0cecd479a9f09ba293eb1ca35700000000000000000000000019ee073e863c6a6f6da9326044067507ea76a6930000000000000000000000001e6bd36167620641cc88c846b815ada76f754e5b0000000000000000000000001f427a6fcdb95a7393c58552093e10a932890fa80000000000000000000000001fc550e98ad3021e32c47a84019f77a0792c60b700000000000000000000000020c9bd4cff005082867e5928926200c872cd8b3d000000000000000000000000219723d005e383032ea9ae43e4a72bdead0fa38b000000000000000000000000229ca6e76661463b920d9a24db8237110df78ef700000000000000000000000024621aa4dde07f04c57146d83468969010b7489e0000000000000000000000002477296e9bb326506039c01ad22475133d93265900000000000000000000000025beda673690ecd0a8a64d35ab228fc2e1c0048a00000000000000000000000026fdc242eccc144971e558ff458a4ec21b75d4e800000000000000000000000027b19813451bcae3031cabd40b7587b26eaa7d8a0000000000000000000000002a3381b6909512ff4a028b6ca747e4592f8384d50000000000000000000000002b47c57a4c9fc1649b43500f4c0cda6cf29be2780000000000000000000000002b6c7e127a5f799587b0f9b4393d62b26cf85c950000000000000000000000002b92d12d8cc0b9af862451393925092c6c21a6110000000000000000000000002ec1d7a211245d31aaad13ffc11a06e2b21d56e30000000000000000000000003140f301fa35d667de5775fa1b00ad0a4dc7eb5c00000000000000000000000032d4135f53a85250d58b97bc5c1d2c29161a3ff700000000000000000000000033fe24d01539c99c50ecbabec91e05b0f802c0b900000000000000000000000035642de97d6376dd55240ffd35fafd2619515e5400000000000000000000000035d448178c938ee1a2dd0c3c9da3185d433e79aa000000000000000000000000380568bcadb2ebdd84b9d0f4e6702ee760ce6944000000000000000000000000388411e858cb11414b7eeccf26c8c6a2c23ec52f0000000000000000000000003b3abbf96e7d4c738994607822d786c791f022ee0000000000000000000000003b91caba057858ba138dc2e00cda9f3603d77a440000000000000000000000003e2178cf851a0e5cbf84c0ff53f820ad7ead703b0000000000000000000000003f2c67f587bf7a42f6cb2dcde5d24d5506756748000000000000000000000000425774e62423b870a22477b391c7a00bfc83bdd700000000000000000000000042e8f94fba0f2b63449c3042c6dc6511f694446a000000000000000000000000442b263a0aab7c90a822a99e49d27cc8d2af20ed000000000000000000000000466e956ca9987b0b119330df65bf6ec4c3876e4f0000000000000000000000004bfac3a78ef7308861e6d91da922e9d162e88b7f0000000000000000000000004c1270592cc6a34f8371100cb3cf55961b7bd7fa0000000000000000000000004c36e31a6006edcc58fd92fe3cb35683f78401a40000000000000000000000004d58d36e46cf9af14e416061fe5d0074780b40990000000000000000000000004e47e39033a19f306598167499dc070b6039aaa10000000000000000000000005053a1354cb45eebdd2d8342ceee71d41efa75ca0000000000000000000000005498ff04a598f05b1ee3483b506d1191c7718bfd0000000000000000000000005648af1b3c089e4226e71ecc060df2c4cb4118dc00000000000000000000000057d621d02992672b80154243d54353b66e4483ae0000000000000000000000005878fc144c6f77d7cd4744b12bccd7f4f500af180000000000000000000000005a93fdde08b8e6197bb7b9e8eabcfceb526079320000000000000000000000005ced142150f7d0ee71c2300b34d51e5dc9f8c4560000000000000000000000005d4ce7a8e2483e35b2d8009def56bbe8a4352bb80000000000000000000000005ef3e3395f838bc5736efbce77884bd06035313b0000000000000000000000005ff2692b3f0803e6985d1ed1a2366f0bc28121e7000000000000000000000000606315589e4d36b5743673c6e40eb1ced571128c0000000000000000000000006169741408049837837a2c59ce22e01e5136c5570000000000000000000000006453a5733c4f03a5d290082a0d0aed5e876404c000000000000000000000000064b71f8546c4fcf06fc13294ded73dcaea3fc241000000000000000000000000664d448a984dae1e829bf71e837facd7b657ee1000000000000000000000000066666666c510be02a4d15aa75d5a236068b2a1fa0000000000000000000000006767ad8d45dd579b272f5a4a4d046909eb9211140000000000000000000000006919c4b67e9656c784b46f7b941cf639a66ccd660000000000000000000000006b5e7ec2c4440331a1458edb021d6944fdae530a0000000000000000000000006cd68e8f04490cd1a5a21cc97cc8bc15b47dc9eb0000000000000000000000006d661b5003f90d787561fe0c6a119e3510c5113f0000000000000000000000006d84264a7bd2cffa4a117ba2350403b3a98669490000000000000000000000006f76d8a2aef804ebdd1e7768185f18025f354ee90000000000000000000000007029bfa9a85ebf4653945be520dc3b7f1181f4af000000000000000000000000706d961ab69d54a0fcbaa13e77842279a57241390000000000000000000000007224bb066aaf4ae984e85f9ee959e075b822d4a200000000000000000000000074b7e6d4336df8038a44393cac5b7ac53fd75c7a0000000000000000000000007560cbe62147199a7948bcb79770de071b5725bc000000000000000000000000767a60f295aedd958932088f9cd6a4951d8739b600000000000000000000000076a9081947b50c4cd770169f755385287edbd2df0000000000000000000000007706dd0517df06612050a93ce3681d05011dca80000000000000000000000000771f1324cefbe2ef765e42a188c0bffe62d2c2c000000000000000000000000078bc83b1255d96b190848b3a8146491cd7e631340000000000000000000000007a205a4a5f1cc04cfa751b030322804a0eb42d330000000000000000000000007a62d6cf2517af31032a947ffdd8a385b45c80ce0000000000000000000000007a6cbd7a4562021fbdc0ac328c6c572fd703087a0000000000000000000000007ab066bcd945264e1b1c8d451cb3517c973e676c0000000000000000000000007aef2d7671efb00a7196eb4bbd8ee7a2ba0e5de20000000000000000000000007c3740171c672df753a935305a5be703388766630000000000000000000000007d9ae789d649b7cf5748c8b9eb96d9a2068b87eb0000000000000000000000007eb4d1f3b748890d7dfcd8eae09b087454fedce90000000000000000000000007ede3c6fe8e68e420c23ada6eb9ce9fe99f742410000000000000000000000007f2c610ea7287b2d302b949f0d21d3b927e75d160000000000000000000000007f7bac92aa3e28351f9e89535ca334e8a44542d0000000000000000000000000808253c190aca3c2c24f1025d76709f462e3027600000000000000000000000080fb1715bc81926babc68842c6df472cddc9b664000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000010f0cf064dd59200000000000000000000000000000000000000000000000000004e369a49d3ca788a000000000000000000000000000000000000000000000000337cb0c4809b83400000000000000000000000000000000000000000000000005ce07d674f58b87800000000000000000000000000000000000000000000000019ed6dbf415a6c5000000000000000000000000000000000000000000000000032181542ecb1f3440000000000000000000000000000000000000000000000001bc7691ad2794e4a0000000000000000000000000000000000000000000000001a26e497a3c93b40000000000000000000000000000000000000000000000005813b7c3faec20408000000000000000000000000000000000000000000000012aec379fac4eb2ea00000000000000000000000000000000000000000000000030c22fe8958b7e9d8000000000000000000000000000000000000000000000036ced485fce80510a0000000000000000000000000000000000000000000000000eae64158a8909304000000000000000000000000000000000000000000000016fb601bf471a4ee78000000000000000000000000000000000000000000000000510a683cd1a3fd820000000000000000000000000000000000000000000000003099cabaafb9f9c000000000000000000000000000000000000000000000000a87c06c6c9dc04608000000000000000000000000000000000000000000000000202935aa9e9e817200000000000000000000000000000000000000000000000043a9c9735350a08c0000000000000000000000000000000000000000000000030c7a14d9b8cdb3bc00000000000000000000000000000000000000000000000095f2cb78e56fc4640000000000000000000000000000000000000000000000006c3e5a01c0a84c800000000000000000000000000000000000000000000000001d32845c5f052bb80000000000000000000000000000000000000000000000096c969437ddc7c8f00000000000000000000000000000000000000000000000006346cd2bdd6942c400000000000000000000000000000000000000000000001dbf9a4e395f9ab330000000000000000000000000000000000000000000000001b33c7b97a5d88480000000000000000000000000000000000000000000000000c69b2daffd7d3150000000000000000000000000000000000000000000000002909f98fccb45cc500000000000000000000000000000000000000000000000005db0eadb41725d88000000000000000000000000000000000000000000000002d9dc965eacc424bc000000000000000000000000000000000000000000000008337bc76e7892f4180000000000000000000000000000000000000000000000005ae12051375ce90c000000000000000000000000000000000000000000000001473a21a038ea0d400000000000000000000000000000000000000000000000002fcc5abbfb55cbf8000000000000000000000000000000000000000000000006d7d6b4811b6e0fb800000000000000000000000000000000000000000000001115f39b785581bc2000000000000000000000000000000000000000000000000021a8b8a6b6c4c8a60000000000000000000000000000000000000000000000041c81e2144f33b3b8000000000000000000000000000000000000000000000000d8a16556f7440df800000000000000000000000000000000000000000000002cf0af9ce3a388c7a00000000000000000000000000000000000000000000000001b362e2166fc2ed200000000000000000000000000000000000000000000000041ffe3f2f321c3000000000000000000000000000000000000000000000000002fa0818d483b6c8600000000000000000000000000000000000000000000000db1d8e4fd586091e00000000000000000000000000000000000000000000000005429476f43569c180000000000000000000000000000000000000000000000061c3a5233641de340000000000000000000000000000000000000000000000002d1f29b2276c59838000000000000000000000000000000000000000000000000863251b3128e4bec000000000000000000000000000000000000000000000026f4acfeaf51664780000000000000000000000000000000000000000000000000e2a011ad686b8fb4000000000000000000000000000000000000000000000000376d204fbebfe4100000000000000000000000000000000000000000000000009ad1354c761bcfb00000000000000000000000000000000000000000000000107d015ce4d364059800000000000000000000000000000000000000000000000030cad4cfa84484f800000000000000000000000000000000000000000000000a907b299713d1ed3800000000000000000000000000000000000000000000001a10cd0654038d87e0000000000000000000000000000000000000000000000003390d38f7f04bfc98000000000000000000000000000000000000000000000003d8ae6ad2fd643f280000000000000000000000000000000000000000000000034aa83719948cf28c00000000000000000000000000000000000000000000000199d41f578c71b3a40000000000000000000000000000000000000000000000016338034a5d9b21880000000000000000000000000000000000000000000000012db7f13e3783a7000000000000000000000000000000000000000000000000032486c304be394c0000000000000000000000000000000000000000000000000026ee7c772e272a0e0000000000000000000000000000000000000000000000008a4c338475f3032800000000000000000000000000000000000000000000000023a1c17b28925df40000000000000000000000000000000000000000000000005370eecf421bc2ee000000000000000000000000000000000000000000000000165721ff45a8f25e000000000000000000000000000000000000000000000000236af0698ef738ea0000000000000000000000000000000000000000000000129958290a7f8e25b80000000000000000000000000000000000000000000000003f3fdd121b97c5b4000000000000000000000000000000000000000000000000950e6704312222e400000000000000000000000000000000000000000000000058ed24694ec0ad60000000000000000000000000000000000000000000000006dbdc186c0b600a100000000000000000000000000000000000000000000000030e960577683bf0100000000000000000000000000000000000000000000000125ce0fa7d6ce64f180000000000000000000000000000000000000000000000004635fd46c440f630000000000000000000000000000000000000000000000000421b7b13dbc8480400000000000000000000000000000000000000000000000020d3bdc1fc65437800000000000000000000000000000000000000000000000086ecab714a57251c00000000000000000000000000000000000000000000000020e67c0332030670000000000000000000000000000000000000000000000000fb0715b6f308dec40000000000000000000000000000000000000000000000003b93228d1dbd067800000000000000000000000000000000000000000000000016357744a4538da0000000000000000000000000000000000000000000000000313db4a42532eeb0000000000000000000000000000000000000000000000000aa925f99b5f50a7800000000000000000000000000000000000000000000000016cb1a7f80736936000000000000000000000000000000000000000000000006381cb9cf6b601400000000000000000000000000000000000000000000000002a1dad8511d4f8448000000000000000000000000000000000000000000000001bd83188592935ab800000000000000000000000000000000000000000000000bb9d607cbe17346000000000000000000000000000000000000000000000000030d98280cd086961c0000000000000000000000000000000000000000000000002a8bdc06aa2ae2aa0000000000000000000000000000000000000000000000005d06e1480b9789dc0000000000000000000000000000000000000000000000001b34777dd627940600000000000000000000000000000000000000000000000674ef79a6813d91e8000000000000000000000000000000000000000000000000456cd2befb81427000000000000000000000000000000000000000000000001a2f1094d740f30b780000000000000000000000000000000000000000000000002941799f86bb8dfc0

-----Decoded View---------------
Arg [0] : dao (address): 0xB7bE82790d40258Fd028BEeF2f2007DC044F3459
Arg [1] : iporToken (address): 0x1e4746dC744503b53b4A082cB3607B169a289090
Arg [2] : startTimestamp (uint64): 1674043200
Arg [3] : durationSeconds (uint64): 15768000
Arg [4] : stakeholders (address[]): 0xDF644Ac5D9480AE0ec0b2b6B07141FCC7174a076,0x01EC4a63E8Bd579e1A2CEa4763Cf3a5da5e48e8b,0x05A84DAC7d722E3313b5C94E2681BAac3427ba76,0x074A8adEb96ef74AE82A6377C8085106F014989C,0x0766569CBC0Ed6291551589F66e0d0b2DA3881De,0x07D7d3badcb55DCb5f5D4c77b0513B9Ec73507f8,0x097e3725a78Fe52a803Da00e827bB60a99509483,0x09e8516AEAcCb2E79FB954144404eEF908D72b24,0x0c8eE7DbF8cB1d980c107d3Df6357dEaC7dBe9EF,0x0c988abc38A818bBB2Fb9F8F9B547748Cf5D42B5,0x0da2b44eDD7bA460CfCe12F99F351CAc8f216096,0x0fD6f65D35cf13Ae51795036d0aE9AF42f3cBCB4,0x11d67Fa925877813B744aBC0917900c2b1D6Eb81,0x1398206B0d65048edd2864496655255f5DE9e4e0,0x13Bf4152e8B499b15F272fd61Eb4dAbe88072d9f,0x1846507590b77f961F9133Eefd6BfFD9BcCaA2d1,0x193F0Ee42a199A0CECD479a9F09BA293eB1CA357,0x19eE073E863c6a6F6da9326044067507eA76A693,0x1E6bd36167620641cc88C846B815adA76F754e5b,0x1F427A6FCdb95A7393C58552093e10A932890FA8,0x1Fc550e98aD3021e32C47A84019F77a0792c60B7,0x20C9bd4cfF005082867e5928926200c872CD8b3D,0x219723D005E383032ea9Ae43e4A72BdeAd0FA38b,0x229cA6e76661463B920d9a24DB8237110df78ef7,0x24621aA4DDE07F04C57146D83468969010b7489E,0x2477296e9bB326506039c01ad22475133d932659,0x25bEda673690ecd0A8A64d35Ab228fC2E1C0048A,0x26FDc242eCCc144971e558FF458a4ec21B75D4E8,0x27B19813451BcAe3031CaBd40B7587B26eAa7D8a,0x2A3381B6909512Ff4A028b6CA747E4592F8384d5,0x2b47C57A4c9Fc1649B43500f4c0cDa6cF29be278,0x2B6C7e127a5f799587B0F9B4393D62B26Cf85c95,0x2B92d12D8cC0b9AF862451393925092c6c21A611,0x2EC1d7A211245d31aaAD13ffC11a06e2B21d56e3,0x3140f301FA35d667de5775fA1B00aD0a4Dc7EB5C,0x32D4135F53a85250d58b97BC5c1D2C29161A3fF7,0x33FE24D01539C99c50ecbABec91e05B0F802C0B9,0x35642DE97d6376DD55240Ffd35FAfD2619515e54,0x35d448178c938ee1a2DD0C3C9DA3185d433E79AA,0x380568bcadb2ebDd84B9D0F4E6702ee760Ce6944,0x388411E858cB11414B7eECcF26c8C6A2C23Ec52F,0x3B3abBF96e7d4C738994607822D786c791F022ee,0x3b91Caba057858bA138dC2e00CDa9f3603D77a44,0x3e2178CF851A0e5cbF84c0ff53f820ad7EAD703b,0x3f2c67F587Bf7a42f6cb2dcde5D24D5506756748,0x425774E62423b870a22477b391c7A00Bfc83bdD7,0x42e8F94FBA0F2B63449C3042C6DC6511f694446A,0x442B263a0aAB7c90A822A99E49d27Cc8D2Af20eD,0x466E956cA9987b0b119330DF65bF6Ec4c3876E4F,0x4Bfac3a78eF7308861e6d91DA922e9D162e88b7f,0x4c1270592Cc6A34F8371100Cb3CF55961B7Bd7Fa,0x4C36E31A6006EDCc58FD92fe3cb35683f78401A4,0x4D58D36e46Cf9AF14e416061Fe5D0074780b4099,0x4e47e39033a19F306598167499dc070B6039AAa1,0x5053a1354cB45eebdd2d8342cEeE71d41efA75CA,0x5498ff04A598F05B1eE3483B506d1191C7718bfd,0x5648aF1b3c089e4226e71ecc060dF2c4cB4118DC,0x57d621D02992672B80154243d54353B66E4483aE,0x5878fC144c6F77D7Cd4744b12BCCD7F4F500Af18,0x5A93fDdE08b8E6197Bb7B9E8EABcfcEb52607932,0x5ced142150F7d0ee71C2300b34D51e5Dc9f8C456,0x5D4CE7A8e2483E35B2d8009DEf56bbe8A4352BB8,0x5Ef3e3395F838bc5736EfbCe77884bd06035313B,0x5fF2692b3f0803E6985D1ed1A2366f0Bc28121E7,0x606315589e4d36B5743673C6E40Eb1CEd571128C,0x6169741408049837837A2c59CE22E01e5136c557,0x6453a5733c4f03a5D290082A0D0aed5E876404c0,0x64B71F8546c4fcf06fC13294deD73DCAea3fc241,0x664D448A984DAe1e829BF71e837faCd7b657EE10,0x66666666C510be02a4d15AA75D5A236068B2A1FA,0x6767AD8d45DD579b272F5a4A4d046909EB921114,0x6919c4B67E9656c784b46f7B941cF639a66CCd66,0x6b5E7ec2C4440331A1458EdB021d6944FdAE530a,0x6Cd68E8f04490Cd1A5A21cc97CC8BC15b47Dc9eb,0x6D661b5003F90D787561fe0c6a119E3510c5113f,0x6d84264A7bD2Cffa4A117BA2350403b3A9866949,0x6F76d8a2Aef804ebdd1E7768185F18025f354Ee9,0x7029bfa9A85Ebf4653945Be520dC3b7F1181F4aF,0x706D961Ab69d54a0FCbaa13E77842279A5724139,0x7224bb066aaf4ae984e85f9ee959E075b822d4A2,0x74b7E6d4336df8038A44393CAc5B7aC53fd75C7A,0x7560CBE62147199a7948bcB79770dE071B5725bc,0x767A60F295AEDd958932088F9Cd6a4951D8739b6,0x76A9081947B50C4cd770169f755385287EDBD2df,0x7706Dd0517dF06612050a93ce3681d05011DCA80,0x771f1324CEFbe2EF765E42A188c0BffE62d2c2C0,0x78bC83b1255d96b190848B3A8146491cd7E63134,0x7A205a4a5f1cc04Cfa751B030322804A0EB42d33,0x7A62D6cF2517aF31032a947FFDD8A385B45C80Ce,0x7a6CbD7A4562021FBdc0aC328c6C572Fd703087a,0x7ab066BCD945264e1B1C8d451CB3517c973e676c,0x7aEF2D7671EFb00A7196eb4BBd8eE7a2ba0e5de2,0x7C3740171c672df753a935305A5BE70338876663,0x7d9Ae789d649b7cf5748c8b9EB96d9a2068B87Eb,0x7eb4D1f3B748890D7DFCd8EAe09b087454FEDcE9,0x7EdE3C6FE8e68E420C23adA6eB9cE9FE99F74241,0x7F2c610eA7287B2D302B949F0d21D3b927e75D16,0x7F7bAc92AA3e28351F9E89535CA334e8A44542d0,0x808253C190AcA3c2C24f1025D76709F462e30276,0x80FB1715bC81926babc68842c6Df472Cddc9b664
Arg [5] : amounts (uint256[]): 5000000000000000000000,90173786009236900000,59360552817027200000,107079790863022000000,29892321418100000000,57754535656329000000,32026945972971300000,30151117344643200000,1624734298176370000000,5514150982844520000000,899436373834310000000,16176445829895400000000,270820609576953000000,6783070048953390000000,93433511636220500000,56032849414691200000,3107990053464050000000,37079079842891700000,78010393100183800000,899828579553335000000,172878754817937000000,124796329091616000000,33662232131223600000,2781524816538460000000,114458090342505000000,8780192188056940000000,501793244741664000000,228977319596724000000,757035270746996000000,108018465101522000000,841473214110327000000,2420539689360470000000,104776813861867000000,377267132337360000000,55107641255258800000,2019732500352510000000,5042822849413320000000,38806262808151100000,1213458364428030000000,249757907322126000000,13263999878956200000000,31372886540208500000,76092325826035200000,54910165757736700000,4041966679594680000000,97031310662844400000,1803431888074320000000,832349005088542000000,154718098871523000000,11497712343538400000000,261281146965189000000,63902143542756000000,178492101671820000000,4866487808751030000000,56253703159399600000,3118054422872670000000,7693215627987000000000,951219790296438000000,1135260266139130000000,971517480944459000000,472500209879265000000,409539393601490000000,347857775610816000000,927555802856192000000,44885063507450700000,159446347511546000000,41080735956539400000,96201089223589900000,25756684353237100000,40833863600313700000,5489456322201470000000,72921670684229000000,171850166864433000000,102525086072472000000,2024368462140260000000,902260252713188000000,5419744284634390000000,80947651788844000000,76216581697541800000,37847085922567600000,155557347178447000000,37931497712367200000,289415204861801000000,68685005748782000000,25605062068776000000,56771051176472800000,196655863149358000000,26278969984398300000,1835580404931840000000,776901762805506000000,513640472492734000000,3460881342801280000000,901116946809359000000,49052574280617700000,107252684718975000000,31365169922568700000,1905704826018090000000,80041680060911200000,7728107521409390000000,47564655281735000000

-----Encoded View---------------
208 Constructor Arguments found :
Arg [0] : 000000000000000000000000b7be82790d40258fd028beef2f2007dc044f3459
Arg [1] : 0000000000000000000000001e4746dc744503b53b4a082cb3607b169a289090
Arg [2] : 0000000000000000000000000000000000000000000000000000000063c7df40
Arg [3] : 0000000000000000000000000000000000000000000000000000000000f099c0
Arg [4] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000d60
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [7] : 000000000000000000000000df644ac5d9480ae0ec0b2b6b07141fcc7174a076
Arg [8] : 00000000000000000000000001ec4a63e8bd579e1a2cea4763cf3a5da5e48e8b
Arg [9] : 00000000000000000000000005a84dac7d722e3313b5c94e2681baac3427ba76
Arg [10] : 000000000000000000000000074a8adeb96ef74ae82a6377c8085106f014989c
Arg [11] : 0000000000000000000000000766569cbc0ed6291551589f66e0d0b2da3881de
Arg [12] : 00000000000000000000000007d7d3badcb55dcb5f5d4c77b0513b9ec73507f8
Arg [13] : 000000000000000000000000097e3725a78fe52a803da00e827bb60a99509483
Arg [14] : 00000000000000000000000009e8516aeaccb2e79fb954144404eef908d72b24
Arg [15] : 0000000000000000000000000c8ee7dbf8cb1d980c107d3df6357deac7dbe9ef
Arg [16] : 0000000000000000000000000c988abc38a818bbb2fb9f8f9b547748cf5d42b5
Arg [17] : 0000000000000000000000000da2b44edd7ba460cfce12f99f351cac8f216096
Arg [18] : 0000000000000000000000000fd6f65d35cf13ae51795036d0ae9af42f3cbcb4
Arg [19] : 00000000000000000000000011d67fa925877813b744abc0917900c2b1d6eb81
Arg [20] : 0000000000000000000000001398206b0d65048edd2864496655255f5de9e4e0
Arg [21] : 00000000000000000000000013bf4152e8b499b15f272fd61eb4dabe88072d9f
Arg [22] : 0000000000000000000000001846507590b77f961f9133eefd6bffd9bccaa2d1
Arg [23] : 000000000000000000000000193f0ee42a199a0cecd479a9f09ba293eb1ca357
Arg [24] : 00000000000000000000000019ee073e863c6a6f6da9326044067507ea76a693
Arg [25] : 0000000000000000000000001e6bd36167620641cc88c846b815ada76f754e5b
Arg [26] : 0000000000000000000000001f427a6fcdb95a7393c58552093e10a932890fa8
Arg [27] : 0000000000000000000000001fc550e98ad3021e32c47a84019f77a0792c60b7
Arg [28] : 00000000000000000000000020c9bd4cff005082867e5928926200c872cd8b3d
Arg [29] : 000000000000000000000000219723d005e383032ea9ae43e4a72bdead0fa38b
Arg [30] : 000000000000000000000000229ca6e76661463b920d9a24db8237110df78ef7
Arg [31] : 00000000000000000000000024621aa4dde07f04c57146d83468969010b7489e
Arg [32] : 0000000000000000000000002477296e9bb326506039c01ad22475133d932659
Arg [33] : 00000000000000000000000025beda673690ecd0a8a64d35ab228fc2e1c0048a
Arg [34] : 00000000000000000000000026fdc242eccc144971e558ff458a4ec21b75d4e8
Arg [35] : 00000000000000000000000027b19813451bcae3031cabd40b7587b26eaa7d8a
Arg [36] : 0000000000000000000000002a3381b6909512ff4a028b6ca747e4592f8384d5
Arg [37] : 0000000000000000000000002b47c57a4c9fc1649b43500f4c0cda6cf29be278
Arg [38] : 0000000000000000000000002b6c7e127a5f799587b0f9b4393d62b26cf85c95
Arg [39] : 0000000000000000000000002b92d12d8cc0b9af862451393925092c6c21a611
Arg [40] : 0000000000000000000000002ec1d7a211245d31aaad13ffc11a06e2b21d56e3
Arg [41] : 0000000000000000000000003140f301fa35d667de5775fa1b00ad0a4dc7eb5c
Arg [42] : 00000000000000000000000032d4135f53a85250d58b97bc5c1d2c29161a3ff7
Arg [43] : 00000000000000000000000033fe24d01539c99c50ecbabec91e05b0f802c0b9
Arg [44] : 00000000000000000000000035642de97d6376dd55240ffd35fafd2619515e54
Arg [45] : 00000000000000000000000035d448178c938ee1a2dd0c3c9da3185d433e79aa
Arg [46] : 000000000000000000000000380568bcadb2ebdd84b9d0f4e6702ee760ce6944
Arg [47] : 000000000000000000000000388411e858cb11414b7eeccf26c8c6a2c23ec52f
Arg [48] : 0000000000000000000000003b3abbf96e7d4c738994607822d786c791f022ee
Arg [49] : 0000000000000000000000003b91caba057858ba138dc2e00cda9f3603d77a44
Arg [50] : 0000000000000000000000003e2178cf851a0e5cbf84c0ff53f820ad7ead703b
Arg [51] : 0000000000000000000000003f2c67f587bf7a42f6cb2dcde5d24d5506756748
Arg [52] : 000000000000000000000000425774e62423b870a22477b391c7a00bfc83bdd7
Arg [53] : 00000000000000000000000042e8f94fba0f2b63449c3042c6dc6511f694446a
Arg [54] : 000000000000000000000000442b263a0aab7c90a822a99e49d27cc8d2af20ed
Arg [55] : 000000000000000000000000466e956ca9987b0b119330df65bf6ec4c3876e4f
Arg [56] : 0000000000000000000000004bfac3a78ef7308861e6d91da922e9d162e88b7f
Arg [57] : 0000000000000000000000004c1270592cc6a34f8371100cb3cf55961b7bd7fa
Arg [58] : 0000000000000000000000004c36e31a6006edcc58fd92fe3cb35683f78401a4
Arg [59] : 0000000000000000000000004d58d36e46cf9af14e416061fe5d0074780b4099
Arg [60] : 0000000000000000000000004e47e39033a19f306598167499dc070b6039aaa1
Arg [61] : 0000000000000000000000005053a1354cb45eebdd2d8342ceee71d41efa75ca
Arg [62] : 0000000000000000000000005498ff04a598f05b1ee3483b506d1191c7718bfd
Arg [63] : 0000000000000000000000005648af1b3c089e4226e71ecc060df2c4cb4118dc
Arg [64] : 00000000000000000000000057d621d02992672b80154243d54353b66e4483ae
Arg [65] : 0000000000000000000000005878fc144c6f77d7cd4744b12bccd7f4f500af18
Arg [66] : 0000000000000000000000005a93fdde08b8e6197bb7b9e8eabcfceb52607932
Arg [67] : 0000000000000000000000005ced142150f7d0ee71c2300b34d51e5dc9f8c456
Arg [68] : 0000000000000000000000005d4ce7a8e2483e35b2d8009def56bbe8a4352bb8
Arg [69] : 0000000000000000000000005ef3e3395f838bc5736efbce77884bd06035313b
Arg [70] : 0000000000000000000000005ff2692b3f0803e6985d1ed1a2366f0bc28121e7
Arg [71] : 000000000000000000000000606315589e4d36b5743673c6e40eb1ced571128c
Arg [72] : 0000000000000000000000006169741408049837837a2c59ce22e01e5136c557
Arg [73] : 0000000000000000000000006453a5733c4f03a5d290082a0d0aed5e876404c0
Arg [74] : 00000000000000000000000064b71f8546c4fcf06fc13294ded73dcaea3fc241
Arg [75] : 000000000000000000000000664d448a984dae1e829bf71e837facd7b657ee10
Arg [76] : 00000000000000000000000066666666c510be02a4d15aa75d5a236068b2a1fa
Arg [77] : 0000000000000000000000006767ad8d45dd579b272f5a4a4d046909eb921114
Arg [78] : 0000000000000000000000006919c4b67e9656c784b46f7b941cf639a66ccd66
Arg [79] : 0000000000000000000000006b5e7ec2c4440331a1458edb021d6944fdae530a
Arg [80] : 0000000000000000000000006cd68e8f04490cd1a5a21cc97cc8bc15b47dc9eb
Arg [81] : 0000000000000000000000006d661b5003f90d787561fe0c6a119e3510c5113f
Arg [82] : 0000000000000000000000006d84264a7bd2cffa4a117ba2350403b3a9866949
Arg [83] : 0000000000000000000000006f76d8a2aef804ebdd1e7768185f18025f354ee9
Arg [84] : 0000000000000000000000007029bfa9a85ebf4653945be520dc3b7f1181f4af
Arg [85] : 000000000000000000000000706d961ab69d54a0fcbaa13e77842279a5724139
Arg [86] : 0000000000000000000000007224bb066aaf4ae984e85f9ee959e075b822d4a2
Arg [87] : 00000000000000000000000074b7e6d4336df8038a44393cac5b7ac53fd75c7a
Arg [88] : 0000000000000000000000007560cbe62147199a7948bcb79770de071b5725bc
Arg [89] : 000000000000000000000000767a60f295aedd958932088f9cd6a4951d8739b6
Arg [90] : 00000000000000000000000076a9081947b50c4cd770169f755385287edbd2df
Arg [91] : 0000000000000000000000007706dd0517df06612050a93ce3681d05011dca80
Arg [92] : 000000000000000000000000771f1324cefbe2ef765e42a188c0bffe62d2c2c0
Arg [93] : 00000000000000000000000078bc83b1255d96b190848b3a8146491cd7e63134
Arg [94] : 0000000000000000000000007a205a4a5f1cc04cfa751b030322804a0eb42d33
Arg [95] : 0000000000000000000000007a62d6cf2517af31032a947ffdd8a385b45c80ce
Arg [96] : 0000000000000000000000007a6cbd7a4562021fbdc0ac328c6c572fd703087a
Arg [97] : 0000000000000000000000007ab066bcd945264e1b1c8d451cb3517c973e676c
Arg [98] : 0000000000000000000000007aef2d7671efb00a7196eb4bbd8ee7a2ba0e5de2
Arg [99] : 0000000000000000000000007c3740171c672df753a935305a5be70338876663
Arg [100] : 0000000000000000000000007d9ae789d649b7cf5748c8b9eb96d9a2068b87eb
Arg [101] : 0000000000000000000000007eb4d1f3b748890d7dfcd8eae09b087454fedce9
Arg [102] : 0000000000000000000000007ede3c6fe8e68e420c23ada6eb9ce9fe99f74241
Arg [103] : 0000000000000000000000007f2c610ea7287b2d302b949f0d21d3b927e75d16
Arg [104] : 0000000000000000000000007f7bac92aa3e28351f9e89535ca334e8a44542d0
Arg [105] : 000000000000000000000000808253c190aca3c2c24f1025d76709f462e30276
Arg [106] : 00000000000000000000000080fb1715bc81926babc68842c6df472cddc9b664
Arg [107] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [108] : 00000000000000000000000000000000000000000000010f0cf064dd59200000
Arg [109] : 000000000000000000000000000000000000000000000004e369a49d3ca788a0
Arg [110] : 00000000000000000000000000000000000000000000000337cb0c4809b83400
Arg [111] : 000000000000000000000000000000000000000000000005ce07d674f58b8780
Arg [112] : 0000000000000000000000000000000000000000000000019ed6dbf415a6c500
Arg [113] : 0000000000000000000000000000000000000000000000032181542ecb1f3440
Arg [114] : 000000000000000000000000000000000000000000000001bc7691ad2794e4a0
Arg [115] : 000000000000000000000000000000000000000000000001a26e497a3c93b400
Arg [116] : 00000000000000000000000000000000000000000000005813b7c3faec204080
Arg [117] : 00000000000000000000000000000000000000000000012aec379fac4eb2ea00
Arg [118] : 000000000000000000000000000000000000000000000030c22fe8958b7e9d80
Arg [119] : 00000000000000000000000000000000000000000000036ced485fce80510a00
Arg [120] : 00000000000000000000000000000000000000000000000eae64158a89093040
Arg [121] : 00000000000000000000000000000000000000000000016fb601bf471a4ee780
Arg [122] : 00000000000000000000000000000000000000000000000510a683cd1a3fd820
Arg [123] : 000000000000000000000000000000000000000000000003099cabaafb9f9c00
Arg [124] : 0000000000000000000000000000000000000000000000a87c06c6c9dc046080
Arg [125] : 00000000000000000000000000000000000000000000000202935aa9e9e81720
Arg [126] : 0000000000000000000000000000000000000000000000043a9c9735350a08c0
Arg [127] : 000000000000000000000000000000000000000000000030c7a14d9b8cdb3bc0
Arg [128] : 0000000000000000000000000000000000000000000000095f2cb78e56fc4640
Arg [129] : 000000000000000000000000000000000000000000000006c3e5a01c0a84c800
Arg [130] : 000000000000000000000000000000000000000000000001d32845c5f052bb80
Arg [131] : 000000000000000000000000000000000000000000000096c969437ddc7c8f00
Arg [132] : 000000000000000000000000000000000000000000000006346cd2bdd6942c40
Arg [133] : 0000000000000000000000000000000000000000000001dbf9a4e395f9ab3300
Arg [134] : 00000000000000000000000000000000000000000000001b33c7b97a5d884800
Arg [135] : 00000000000000000000000000000000000000000000000c69b2daffd7d31500
Arg [136] : 00000000000000000000000000000000000000000000002909f98fccb45cc500
Arg [137] : 000000000000000000000000000000000000000000000005db0eadb41725d880
Arg [138] : 00000000000000000000000000000000000000000000002d9dc965eacc424bc0
Arg [139] : 00000000000000000000000000000000000000000000008337bc76e7892f4180
Arg [140] : 000000000000000000000000000000000000000000000005ae12051375ce90c0
Arg [141] : 00000000000000000000000000000000000000000000001473a21a038ea0d400
Arg [142] : 000000000000000000000000000000000000000000000002fcc5abbfb55cbf80
Arg [143] : 00000000000000000000000000000000000000000000006d7d6b4811b6e0fb80
Arg [144] : 0000000000000000000000000000000000000000000001115f39b785581bc200
Arg [145] : 0000000000000000000000000000000000000000000000021a8b8a6b6c4c8a60
Arg [146] : 000000000000000000000000000000000000000000000041c81e2144f33b3b80
Arg [147] : 00000000000000000000000000000000000000000000000d8a16556f7440df80
Arg [148] : 0000000000000000000000000000000000000000000002cf0af9ce3a388c7a00
Arg [149] : 000000000000000000000000000000000000000000000001b362e2166fc2ed20
Arg [150] : 0000000000000000000000000000000000000000000000041ffe3f2f321c3000
Arg [151] : 000000000000000000000000000000000000000000000002fa0818d483b6c860
Arg [152] : 0000000000000000000000000000000000000000000000db1d8e4fd586091e00
Arg [153] : 000000000000000000000000000000000000000000000005429476f43569c180
Arg [154] : 000000000000000000000000000000000000000000000061c3a5233641de3400
Arg [155] : 00000000000000000000000000000000000000000000002d1f29b2276c598380
Arg [156] : 00000000000000000000000000000000000000000000000863251b3128e4bec0
Arg [157] : 00000000000000000000000000000000000000000000026f4acfeaf516647800
Arg [158] : 00000000000000000000000000000000000000000000000e2a011ad686b8fb40
Arg [159] : 00000000000000000000000000000000000000000000000376d204fbebfe4100
Arg [160] : 000000000000000000000000000000000000000000000009ad1354c761bcfb00
Arg [161] : 000000000000000000000000000000000000000000000107d015ce4d36405980
Arg [162] : 0000000000000000000000000000000000000000000000030cad4cfa84484f80
Arg [163] : 0000000000000000000000000000000000000000000000a907b299713d1ed380
Arg [164] : 0000000000000000000000000000000000000000000001a10cd0654038d87e00
Arg [165] : 00000000000000000000000000000000000000000000003390d38f7f04bfc980
Arg [166] : 00000000000000000000000000000000000000000000003d8ae6ad2fd643f280
Arg [167] : 000000000000000000000000000000000000000000000034aa83719948cf28c0
Arg [168] : 0000000000000000000000000000000000000000000000199d41f578c71b3a40
Arg [169] : 000000000000000000000000000000000000000000000016338034a5d9b21880
Arg [170] : 000000000000000000000000000000000000000000000012db7f13e3783a7000
Arg [171] : 000000000000000000000000000000000000000000000032486c304be394c000
Arg [172] : 0000000000000000000000000000000000000000000000026ee7c772e272a0e0
Arg [173] : 000000000000000000000000000000000000000000000008a4c338475f303280
Arg [174] : 0000000000000000000000000000000000000000000000023a1c17b28925df40
Arg [175] : 000000000000000000000000000000000000000000000005370eecf421bc2ee0
Arg [176] : 00000000000000000000000000000000000000000000000165721ff45a8f25e0
Arg [177] : 00000000000000000000000000000000000000000000000236af0698ef738ea0
Arg [178] : 000000000000000000000000000000000000000000000129958290a7f8e25b80
Arg [179] : 000000000000000000000000000000000000000000000003f3fdd121b97c5b40
Arg [180] : 00000000000000000000000000000000000000000000000950e6704312222e40
Arg [181] : 0000000000000000000000000000000000000000000000058ed24694ec0ad600
Arg [182] : 00000000000000000000000000000000000000000000006dbdc186c0b600a100
Arg [183] : 000000000000000000000000000000000000000000000030e960577683bf0100
Arg [184] : 000000000000000000000000000000000000000000000125ce0fa7d6ce64f180
Arg [185] : 000000000000000000000000000000000000000000000004635fd46c440f6300
Arg [186] : 00000000000000000000000000000000000000000000000421b7b13dbc848040
Arg [187] : 0000000000000000000000000000000000000000000000020d3bdc1fc6543780
Arg [188] : 0000000000000000000000000000000000000000000000086ecab714a57251c0
Arg [189] : 0000000000000000000000000000000000000000000000020e67c03320306700
Arg [190] : 00000000000000000000000000000000000000000000000fb0715b6f308dec40
Arg [191] : 000000000000000000000000000000000000000000000003b93228d1dbd06780
Arg [192] : 0000000000000000000000000000000000000000000000016357744a4538da00
Arg [193] : 00000000000000000000000000000000000000000000000313db4a42532eeb00
Arg [194] : 00000000000000000000000000000000000000000000000aa925f99b5f50a780
Arg [195] : 0000000000000000000000000000000000000000000000016cb1a7f807369360
Arg [196] : 00000000000000000000000000000000000000000000006381cb9cf6b6014000
Arg [197] : 00000000000000000000000000000000000000000000002a1dad8511d4f84480
Arg [198] : 00000000000000000000000000000000000000000000001bd83188592935ab80
Arg [199] : 0000000000000000000000000000000000000000000000bb9d607cbe17346000
Arg [200] : 000000000000000000000000000000000000000000000030d98280cd086961c0
Arg [201] : 000000000000000000000000000000000000000000000002a8bdc06aa2ae2aa0
Arg [202] : 000000000000000000000000000000000000000000000005d06e1480b9789dc0
Arg [203] : 000000000000000000000000000000000000000000000001b34777dd62794060
Arg [204] : 0000000000000000000000000000000000000000000000674ef79a6813d91e80
Arg [205] : 00000000000000000000000000000000000000000000000456cd2befb8142700
Arg [206] : 0000000000000000000000000000000000000000000001a2f1094d740f30b780
Arg [207] : 000000000000000000000000000000000000000000000002941799f86bb8dfc0


Deployed Bytecode Sourcemap

56955:3053:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56287:144;;;:::i;:::-;;55020:279;;;;;;:::i;:::-;-1:-1:-1;;;;;55195:16:0;55105:20;55195:16;;;:7;:16;;;;;;;;;55161:50;;;;;;;;;-1:-1:-1;;;;;55161:50:0;;;;;;-1:-1:-1;;;55161:50:0;;;;;;;;;;;;55020:279;;;;;580:25:1;;;636:2;621:18;;614:34;;;;553:18;55020:279:0;;;;;;;;56212:67;;;:::i;55531:602::-;;;;;;:::i;:::-;;:::i;55307:100::-;55385:14;;-1:-1:-1;;;;;55385:14:0;55307:100;;;1955:25:1;;;1943:2;1928:18;55307:100:0;1809:177:1;10594:86:0;10641:4;10665:7;;;10594:86;;2156:14:1;;2149:22;2131:41;;2119:2;2104:18;10594:86:0;1991:187:1;58052:232:0;;;;;;:::i;:::-;;:::i;55415:108::-;55497:18;;-1:-1:-1;;;55497:18:0;;-1:-1:-1;;;;;55497:18:0;55415:108;;8763:151;;;:::i;56141:63::-;;;:::i;6386:87::-;6459:6;;6386:87;;-1:-1:-1;;;;;6459:6:0;;;2692:74:1;;2680:2;2665:18;6386:87:0;2546:226:1;58292:130:0;;;;;;:::i;:::-;;:::i;57946:98::-;58027:9;58020:16;;57946:98;;57846:92;57924:6;57917:13;;57846:92;;8601:154;;;:::i;8299:294::-;;;;;;:::i;:::-;;:::i;58430:955::-;;;;;;:::i;:::-;;:::i;56287:144::-;6272:13;:11;:13::i;:::-;56379:43:::1;::::0;-1:-1:-1;;;56379:43:0;;56416:4:::1;56379:43;::::0;::::1;2692:74:1::0;56352:10:0::1;-1:-1:-1::0;;;;;56345:27:0::1;::::0;::::1;::::0;56373:4:::1;::::0;56345:27;;56379:28:::1;::::0;2665:18:1;;56379:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56345:78;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;3755:55:1;;;56345:78:0::1;::::0;::::1;3737:74:1::0;3827:18;;;3820:34;3710:18;;56345:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;56287:144::o:0;56212:67::-;6272:13;:11;:13::i;:::-;56261:10:::1;:8;:10::i;:::-;56212:67::o:0;55531:602::-;6272:13;:11;:13::i;:::-;55802:46:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;55699:12;;55751:36;;::::1;55729:130;;;;-1:-1:-1::0;;;55729:130:0::1;;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;55902:33:0::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;55878:22;55870:66:::1;;;;-1:-1:-1::0;;;55870:66:0::1;;;;;;;;:::i;:::-;;55952:9;55947:116;55967:18;55963:1;:22;55947:116;;;56007:44;56023:12;;56036:1;56023:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;56040:7;;56048:1;56040:10;;;;;;;:::i;:::-;;;;;;;56007:15;:44::i;:::-;55987:3;::::0;::::1;:::i;:::-;;;55947:116;;;;56095:30;:18;:28;:30::i;:::-;56073:18;:52:::0;;:18:::1;::::0;:52:::1;::::0;;;-1:-1:-1;;;56073:52:0;::::1;-1:-1:-1::0;;;;;56073:52:0::1;;:::i;:::-;;;;;;;;-1:-1:-1::0;;;;;56073:52:0::1;;;;;-1:-1:-1::0;;;;;56073:52:0::1;;;;;;55659:474;55531:602:::0;;;;:::o;58052:232::-;-1:-1:-1;;;;;58235:16:0;;58179:7;58235:16;;;:7;:16;;;;;:29;58211:65;;-1:-1:-1;;;;;58235:29:0;58266:9;58211:23;:65::i;:::-;58204:72;;58052:232;;;;;:::o;8763:151::-;6272:13;:11;:13::i;:::-;8837:30:::1;8864:1;8837:18;:30::i;:::-;8878:15;:28:::0;;-1:-1:-1;;;;;;8878:28:0::1;::::0;;8763:151::o;56141:63::-;6272:13;:11;:13::i;:::-;56188:8:::1;:6;:8::i;58292:130::-:0;-1:-1:-1;;;;;58397:16:0;;58358:7;58397:16;;;:7;:16;;;;;;;;58385:29;;;;;;;;;-1:-1:-1;;;;;58385:29:0;;;;;-1:-1:-1;;;58385:29:0;;;;;;;;;;;;;:11;:29::i;8601:154::-;8177:15;;8223:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8177:15:0;5017:10;8177:31;8155:116;;;;-1:-1:-1;;;8155:116:0;;;;;;;;:::i;:::-;-1:-1:-1;8676:15:0::1;:28:::0;;-1:-1:-1;;;;;;8676:28:0::1;::::0;;8715:32:::1;5017:10:::0;8715:18:::1;:32::i;8299:294::-:0;6272:13;:11;:13::i;:::-;8457:24:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;;;;8427:28:0;::::1;8419:63;;;;-1:-1:-1::0;;;8419:63:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;8493:15:0::1;:32:::0;;-1:-1:-1;;;;;;8493:32:0::1;-1:-1:-1::0;;;;;8493:32:0;::::1;::::0;;::::1;::::0;;;8541:44:::1;::::0;::::1;::::0;-1:-1:-1;;8541:44:0::1;8299:294:::0;:::o;58430:955::-;10199:19;:17;:19::i;:::-;3657:21:::1;:19;:21::i;:::-;58572:11:::2;;53141:464;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;;53327:168:0::2;::::0;::::2;::::0;-1:-1:-1;53327:168:0::2;;::::0;-1:-1:-1;5623:34:1;5611:47;;5688:34;5683:2;5674:12;;5667:56;5753:34;5748:2;5739:12;;5732:56;-1:-1:-1;;;5813:2:1;5804:12;;5797:28;5850:3;5841:13;;5409:451;53327:168:0::2;;;;;;;;;;;;;53295:219;;;;;;53261:11;53244:29;;;;;;;;:::i;:::-;;;;;;;;;;;;;53234:40;;;;;;:280;53529:45;;;;;;;;;;;;;;;;::::0;53212:373:::2;;;;;-1:-1:-1::0;;;53212:373:0::2;;;;;;;;:::i;:::-;-1:-1:-1::0;5017:10:0;58601:17:::3;58680:18:::0;;;:7:::3;:18;::::0;;;;;;;;58646:52;;;;::::3;::::0;;;;-1:-1:-1;;;;;58646:52:0;;::::3;::::0;;;-1:-1:-1;;;58646:52:0;;::::3;;::::0;;::::3;::::0;58743:29;;;;::::3;::::0;;;::::3;::::0;;-1:-1:-1;;;58743:29:0;;::::3;::::0;;;;58646:52;58743:29;58711:62:::3;;;;-1:-1:-1::0;;;58711:62:0::3;;;;;;;;:::i;:::-;-1:-1:-1::0;58813:14:0::3;::::0;::::3;::::0;58792:18;;58830:1:::3;::::0;58792:35:::3;::::0;::::3;:::i;:::-;-1:-1:-1::0;;;;;58792:39:0::3;;58833:34;;;;;;;;;;;;;;;;::::0;58784:84:::3;;;;;-1:-1:-1::0;;;58784:84:0::3;;;;;;;;:::i;:::-;;58881:14;58898:18;58910:5;58898:11;:18::i;:::-;58881:35;;58990:6;58973:5;:14;;;-1:-1:-1::0;;;;;58973:23:0::3;;;;;:::i;:::-;58951:5;:18;;;-1:-1:-1::0;;;;;58951:45:0::3;;;59011:50;;;;;;;;;;;;;;;;::::0;58929:143:::3;;;;;-1:-1:-1::0;;;58929:143:0::3;;;;;;;;:::i;:::-;;59103:18;:6;:16;:18::i;:::-;59085:5;:14;;:36;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;59085:36:0;;::::3;::::0;;;-1:-1:-1;;;;;59134:18:0;::::3;;::::0;;;:7:::3;:18;::::0;;;;;;;:26;;;;::::3;::::0;;::::3;-1:-1:-1::0;;;59134:26:0::3;::::0;;;::::3;;::::0;;-1:-1:-1;59191:18:0::3;:6:::0;:16:::3;:18::i;:::-;59173:14;:36:::0;;:14:::3;::::0;:36:::3;::::0;;;-1:-1:-1;;;;;59173:36:0::3;;:::i;:::-;::::0;;-1:-1:-1;;;;;59173:36:0;;::::3;;::::0;;;::::3;::::0;;::::3;::::0;;;::::3;;::::0;;::::3;;::::0;;-1:-1:-1;59222:46:0::3;::::0;-1:-1:-1;;;59222:46:0;;-1:-1:-1;;;;;3755:55:1;;;59222:46:0::3;::::0;::::3;3737:74:1::0;3827:18;;;3820:34;;;59229:10:0::3;59222:27;::::0;::::3;::::0;3710:18:1;;59222:46:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;59306:9;-1:-1:-1::0;;;;;59286:43:0::3;;59317:11;;59286:43;;;;;;;:::i;:::-;;;;;;;;59359:9;-1:-1:-1::0;;;;;59345:32:0::3;;59370:6;59345:32;;;;1955:25:1::0;;1943:2;1928:18;;1809:177;59345:32:0::3;;;;;;;;58590:795;;;3689:1:::2;3701:20:::1;3095:1:::0;4221:22;;4038:213;3701:20:::1;58430:955:::0;;:::o;25525:195::-;25582:7;-1:-1:-1;;;;;25610:26:0;;;25602:78;;;;-1:-1:-1;;;25602:78:0;;7091:2:1;25602:78:0;;;7073:21:1;7130:2;7110:18;;;7103:30;7169:34;7149:18;;;7142:62;7240:9;7220:18;;;7213:37;7267:19;;25602:78:0;6889:403:1;25602:78:0;-1:-1:-1;25706:5:0;25525:195::o;6551:132::-;6459:6;;-1:-1:-1;;;;;6459:6:0;5017:10;6615:23;6607:68;;;;-1:-1:-1;;;6607:68:0;;7499:2:1;6607:68:0;;;7481:21:1;;;7518:18;;;7511:30;7577:34;7557:18;;;7550:62;7629:18;;6607:68:0;7297:356:1;11449:120:0;10458:16;:14;:16::i;:::-;11518:5:::1;11508:15:::0;;-1:-1:-1;;11508:15:0::1;::::0;;11539:22:::1;5017:10:::0;11548:12:::1;11539:22;::::0;-1:-1:-1;;;;;2710:55:1;;;2692:74;;2680:2;2665:18;11539:22:0::1;;;;;;;11449:120::o:0;56439:427::-;56547:31;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56524:21:0;;56516:63;;;;-1:-1:-1;;;56516:63:0;;;;;;;;:::i;:::-;-1:-1:-1;56610:29:0;;;;;;;;;;;;-1:-1:-1;;;56610:29:0;;;;56598:10;56590:50;;;;-1:-1:-1;;;56590:50:0;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;56659:16:0;;;;;;:7;:16;;;;;;;;;:29;56695:40;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;56659:29:0;:34;56651:85;;;;-1:-1:-1;;;56651:85:0;;;;;;;;:::i;:::-;;56768:41;;;;;;;;56787:18;:6;:16;:18::i;:::-;-1:-1:-1;;;;;56768:41:0;;;;;56807:1;56768:41;;;;;;;-1:-1:-1;;;;;56749:16:0;;;;;:7;:16;;;;;;;:60;;;;;;;;;-1:-1:-1;;;56749:60:0;;;;;;;;;;;;56825:33;;;;;;56851:6;1955:25:1;;1943:2;1928:18;;1809:177;56825:33:0;;;;;;;;56439:427;;:::o;59611:394::-;59751:7;59792:6;59780:18;;:9;:18;;;59776:59;;;-1:-1:-1;59822:1:0;59815:8;;59776:59;59863:18;59872:9;59863:6;:18;:::i;:::-;59851:30;;:9;:30;;;59847:82;;;-1:-1:-1;59905:12:0;59898:19;;59847:82;59948:49;59988:9;59948:49;59965:18;59977:6;59965:9;:18;:::i;:::-;59949:35;;;;:12;:35;:::i;:::-;59948:49;;;;:::i;7653:191::-;7746:6;;;-1:-1:-1;;;;;7763:17:0;;;-1:-1:-1;;;;;;7763:17:0;;;;;;;7796:40;;7746:6;;;7763:17;7746:6;;7796:40;;7727:16;;7796:40;7716:128;7653:191;:::o;11190:118::-;10199:19;:17;:19::i;:::-;11250:7:::1;:14:::0;;-1:-1:-1;;11250:14:0::1;11260:4;11250:14;::::0;;11280:20:::1;11287:12;5017:10:::0;;4937:98;59393:210;59470:7;59581:5;:14;;;-1:-1:-1;;;;;59510:85:0;:68;59534:5;:18;;;-1:-1:-1;;;;;59510:68:0;59561:15;59510:23;:68::i;:::-;:85;;;;:::i;10753:108::-;10641:4;10665:7;;;10823:9;10815:38;;;;-1:-1:-1;;;10815:38:0;;8761:2:1;10815:38:0;;;8743:21:1;8800:2;8780:18;;;8773:30;8839:18;8819;;;8812:46;8875:18;;10815:38:0;8559:340:1;3737:293:0;3139:1;3871:7;;:19;3863:63;;;;-1:-1:-1;;;3863:63:0;;9106:2:1;3863:63:0;;;9088:21:1;9145:2;9125:18;;;9118:30;9184:33;9164:18;;;9157:61;9235:18;;3863:63:0;8904:355:1;3863:63:0;3139:1;4004:7;:18;3737:293::o;10938:108::-;10641:4;10665:7;;;10997:41;;;;-1:-1:-1;;;10997:41:0;;9466:2:1;10997:41:0;;;9448:21:1;9505:2;9485:18;;;9478:30;9544:22;9524:18;;;9517:50;9584:18;;10997:41:0;9264:344:1;14:196;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;659:367::-;722:8;732:6;786:3;779:4;771:6;767:17;763:27;753:55;;804:1;801;794:12;753:55;-1:-1:-1;827:20:1;;870:18;859:30;;856:50;;;902:1;899;892:12;856:50;939:4;931:6;927:17;915:29;;999:3;992:4;982:6;979:1;975:14;967:6;963:27;959:38;956:47;953:67;;;1016:1;1013;1006:12;953:67;659:367;;;;;:::o;1031:773::-;1153:6;1161;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1286:9;1273:23;1315:18;1356:2;1348:6;1345:14;1342:34;;;1372:1;1369;1362:12;1342:34;1411:70;1473:7;1464:6;1453:9;1449:22;1411:70;:::i;:::-;1500:8;;-1:-1:-1;1385:96:1;-1:-1:-1;1588:2:1;1573:18;;1560:32;;-1:-1:-1;1604:16:1;;;1601:36;;;1633:1;1630;1623:12;1601:36;;1672:72;1736:7;1725:8;1714:9;1710:24;1672:72;:::i;:::-;1031:773;;;;-1:-1:-1;1763:8:1;-1:-1:-1;;;;1031:773:1:o;2183:358::-;2250:6;2258;2311:2;2299:9;2290:7;2286:23;2282:32;2279:52;;;2327:1;2324;2317:12;2279:52;2350:29;2369:9;2350:29;:::i;:::-;2340:39;;2429:2;2418:9;2414:18;2401:32;2473:18;2466:5;2462:30;2455:5;2452:41;2442:69;;2507:1;2504;2497:12;2442:69;2530:5;2520:15;;;2183:358;;;;;:::o;2777:592::-;2848:6;2856;2909:2;2897:9;2888:7;2884:23;2880:32;2877:52;;;2925:1;2922;2915:12;2877:52;2965:9;2952:23;2994:18;3035:2;3027:6;3024:14;3021:34;;;3051:1;3048;3041:12;3021:34;3089:6;3078:9;3074:22;3064:32;;3134:7;3127:4;3123:2;3119:13;3115:27;3105:55;;3156:1;3153;3146:12;3105:55;3196:2;3183:16;3222:2;3214:6;3211:14;3208:34;;;3238:1;3235;3228:12;3208:34;3283:7;3278:2;3269:6;3265:2;3261:15;3257:24;3254:37;3251:57;;;3304:1;3301;3294:12;3251:57;3335:2;3327:11;;;;;3357:6;;-1:-1:-1;2777:592:1;;-1:-1:-1;;;;2777:592:1:o;3374:184::-;3444:6;3497:2;3485:9;3476:7;3472:23;3468:32;3465:52;;;3513:1;3510;3503:12;3465:52;-1:-1:-1;3536:16:1;;3374:184;-1:-1:-1;3374:184:1:o;3865:277::-;3932:6;3985:2;3973:9;3964:7;3960:23;3956:32;3953:52;;;4001:1;3998;3991:12;3953:52;4033:9;4027:16;4086:5;4079:13;4072:21;4065:5;4062:32;4052:60;;4108:1;4105;4098:12;4052:60;4131:5;3865:277;-1:-1:-1;;;3865:277:1:o;4147:250::-;4232:1;4242:113;4256:6;4253:1;4250:13;4242:113;;;4332:11;;;4326:18;4313:11;;;4306:39;4278:2;4271:10;4242:113;;;-1:-1:-1;;4389:1:1;4371:16;;4364:27;4147:250::o;4402:396::-;4551:2;4540:9;4533:21;4514:4;4583:6;4577:13;4626:6;4621:2;4610:9;4606:18;4599:34;4642:79;4714:6;4709:2;4698:9;4694:18;4689:2;4681:6;4677:15;4642:79;:::i;:::-;4782:2;4761:15;-1:-1:-1;;4757:29:1;4742:45;;;;4789:2;4738:54;;4402:396;-1:-1:-1;;4402:396:1:o;4803:127::-;4864:10;4859:3;4855:20;4852:1;4845:31;4895:4;4892:1;4885:15;4919:4;4916:1;4909:15;4935:127;4996:10;4991:3;4987:20;4984:1;4977:31;5027:4;5024:1;5017:15;5051:4;5048:1;5041:15;5067:135;5106:3;5127:17;;;5124:43;;5147:18;;:::i;:::-;-1:-1:-1;5194:1:1;5183:13;;5067:135::o;5207:197::-;-1:-1:-1;;;;;5329:10:1;;;5341;;;5325:27;;5364:11;;;5361:37;;;5378:18;;:::i;:::-;5361:37;5207:197;;;;:::o;5865:289::-;5996:3;6034:6;6028:13;6050:66;6109:6;6104:3;6097:4;6089:6;6085:17;6050:66;:::i;:::-;6132:16;;;;;5865:289;-1:-1:-1;;5865:289:1:o;6159:200::-;-1:-1:-1;;;;;6295:10:1;;;6283;;;6279:27;;6318:12;;;6315:38;;;6333:18;;:::i;6364:125::-;6429:9;;;6450:10;;;6447:36;;;6463:18;;:::i;6494:390::-;6653:2;6642:9;6635:21;6692:6;6687:2;6676:9;6672:18;6665:34;6749:6;6741;6736:2;6725:9;6721:18;6708:48;6805:1;6776:22;;;6800:2;6772:31;;;6765:42;;;;6868:2;6847:15;;;-1:-1:-1;;6843:29:1;6828:45;6824:54;;6494:390;-1:-1:-1;6494:390:1:o;7658:180::-;7725:18;7763:10;;;7775;;;7759:27;;7798:11;;;7795:37;;;7812:18;;:::i;7843:183::-;7911:18;7962:10;;;7950;;;7946:27;;7985:12;;;7982:38;;;8000:18;;:::i;8031:168::-;8104:9;;;8135;;8152:15;;;8146:22;;8132:37;8122:71;;8173:18;;:::i;8204:217::-;8244:1;8270;8260:132;;8314:10;8309:3;8305:20;8302:1;8295:31;8349:4;8346:1;8339:15;8377:4;8374:1;8367:15;8260:132;-1:-1:-1;8406:9:1;;8204:217::o;8426:128::-;8493:9;;;8514:11;;;8511:37;;;8528:18;;:::i

Swarm Source

ipfs://27b833793944cb0505ecd4ea059d89ae9578f1dada66f2fad788d8f5333028ac

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.