ETH Price: $3,485.32 (-0.16%)

Contract

0x9A94e4D777f81de7e390D5f93b40269cDF7c4539
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Release183699632023-10-17 12:01:59435 days ago1697544119IN
0x9A94e4D7...cDF7c4539
0 ETH0.000608347.87780753
Release178861982023-08-10 18:12:47503 days ago1691691167IN
0x9A94e4D7...cDF7c4539
0 ETH0.0027876536.09874568
Release178176662023-08-01 4:08:23512 days ago1690862903IN
0x9A94e4D7...cDF7c4539
0 ETH0.0009523215.83958248
Release177278012023-07-19 14:23:35525 days ago1689776615IN
0x9A94e4D7...cDF7c4539
0 ETH0.0025852843
Release174834332023-06-15 6:12:35559 days ago1686809555IN
0x9A94e4D7...cDF7c4539
0 ETH0.0013766517.82701225
Release170660632023-04-17 10:59:59618 days ago1681729199IN
0x9A94e4D7...cDF7c4539
0 ETH0.0021061327.27338664
Release170652172023-04-17 8:06:59618 days ago1681718819IN
0x9A94e4D7...cDF7c4539
0 ETH0.002024426.2150058
Release168765842023-03-21 14:24:11645 days ago1679408651IN
0x9A94e4D7...cDF7c4539
0 ETH0.0026773534.67047485
Release168233752023-03-14 2:59:23652 days ago1678762763IN
0x9A94e4D7...cDF7c4539
0 ETH0.0015372419.90655862
Release167406412023-03-02 11:39:47664 days ago1677757187IN
0x9A94e4D7...cDF7c4539
0 ETH0.0013205317.10032251
Release167400012023-03-02 9:30:11664 days ago1677749411IN
0x9A94e4D7...cDF7c4539
0 ETH0.0016825321.78803742
Release166453492023-02-17 2:04:23677 days ago1676599463IN
0x9A94e4D7...cDF7c4539
0 ETH0.0019684125.4900177
Release166260352023-02-14 9:16:35680 days ago1676366195IN
0x9A94e4D7...cDF7c4539
0 ETH0.0036382247.1132743
Release165992792023-02-10 15:33:23684 days ago1676043203IN
0x9A94e4D7...cDF7c4539
0 ETH0.0025707633.29019094
Release165919222023-02-09 14:54:35685 days ago1675954475IN
0x9A94e4D7...cDF7c4539
0 ETH0.00308839.98809402
Release165843812023-02-08 13:33:11686 days ago1675863191IN
0x9A94e4D7...cDF7c4539
0 ETH0.0025324832.79440309
Release165826932023-02-08 7:52:47686 days ago1675842767IN
0x9A94e4D7...cDF7c4539
0 ETH0.0018780224.31954199
Release165791392023-02-07 19:58:47687 days ago1675799927IN
0x9A94e4D7...cDF7c4539
0 ETH0.0032616942.23736418
Release165724422023-02-06 21:30:11688 days ago1675719011IN
0x9A94e4D7...cDF7c4539
0 ETH0.0027001134.96519191
Release165709012023-02-06 16:20:23688 days ago1675700423IN
0x9A94e4D7...cDF7c4539
0 ETH0.0027747635.93178668
Release165678592023-02-06 6:08:59688 days ago1675663739IN
0x9A94e4D7...cDF7c4539
0 ETH0.0011815115.3
Release165652582023-02-05 21:26:11689 days ago1675632371IN
0x9A94e4D7...cDF7c4539
0 ETH0.0020815526.95515852
Release165651782023-02-05 21:09:59689 days ago1675631399IN
0x9A94e4D7...cDF7c4539
0 ETH0.0019047224.66520902
Release165596632023-02-05 2:41:47689 days ago1675564907IN
0x9A94e4D7...cDF7c4539
0 ETH0.0013710117.75397592
Release165561012023-02-04 14:46:23690 days ago1675521983IN
0x9A94e4D7...cDF7c4539
0 ETH0.0018350223.76273239
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
183699632023-10-17 12:01:59435 days ago1697544119
0x9A94e4D7...cDF7c4539
0 ETH
178861982023-08-10 18:12:47503 days ago1691691167
0x9A94e4D7...cDF7c4539
0 ETH
178176662023-08-01 4:08:23512 days ago1690862903
0x9A94e4D7...cDF7c4539
0 ETH
177278012023-07-19 14:23:35525 days ago1689776615
0x9A94e4D7...cDF7c4539
0 ETH
174834332023-06-15 6:12:35559 days ago1686809555
0x9A94e4D7...cDF7c4539
0 ETH
170660632023-04-17 10:59:59618 days ago1681729199
0x9A94e4D7...cDF7c4539
0 ETH
170652172023-04-17 8:06:59618 days ago1681718819
0x9A94e4D7...cDF7c4539
0 ETH
168765842023-03-21 14:24:11645 days ago1679408651
0x9A94e4D7...cDF7c4539
0 ETH
168233752023-03-14 2:59:23652 days ago1678762763
0x9A94e4D7...cDF7c4539
0 ETH
167406412023-03-02 11:39:47664 days ago1677757187
0x9A94e4D7...cDF7c4539
0 ETH
167400012023-03-02 9:30:11664 days ago1677749411
0x9A94e4D7...cDF7c4539
0 ETH
166453492023-02-17 2:04:23677 days ago1676599463
0x9A94e4D7...cDF7c4539
0 ETH
166260352023-02-14 9:16:35680 days ago1676366195
0x9A94e4D7...cDF7c4539
0 ETH
165992792023-02-10 15:33:23684 days ago1676043203
0x9A94e4D7...cDF7c4539
0 ETH
165919222023-02-09 14:54:35685 days ago1675954475
0x9A94e4D7...cDF7c4539
0 ETH
165843812023-02-08 13:33:11686 days ago1675863191
0x9A94e4D7...cDF7c4539
0 ETH
165826932023-02-08 7:52:47686 days ago1675842767
0x9A94e4D7...cDF7c4539
0 ETH
165791392023-02-07 19:58:47687 days ago1675799927
0x9A94e4D7...cDF7c4539
0 ETH
165724422023-02-06 21:30:11688 days ago1675719011
0x9A94e4D7...cDF7c4539
0 ETH
165709012023-02-06 16:20:23688 days ago1675700423
0x9A94e4D7...cDF7c4539
0 ETH
165678592023-02-06 6:08:59688 days ago1675663739
0x9A94e4D7...cDF7c4539
0 ETH
165652582023-02-05 21:26:11689 days ago1675632371
0x9A94e4D7...cDF7c4539
0 ETH
165651782023-02-05 21:09:59689 days ago1675631399
0x9A94e4D7...cDF7c4539
0 ETH
165596632023-02-05 2:41:47689 days ago1675564907
0x9A94e4D7...cDF7c4539
0 ETH
165561012023-02-04 14:46:23690 days ago1675521983
0x9A94e4D7...cDF7c4539
0 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
FixedAirdrop

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: src/airdrop/AirdropTypes.sol


pragma solidity 0.8.17;

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

// 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: 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/FixedAirdrop.sol


pragma solidity 0.8.17;






contract FixedAirdrop is AirdropBase {
    using SafeCast for uint256;

    constructor(
        address dao,
        address iporToken,
        address[] memory stakeholders,
        uint256[] memory amounts
    ) AirdropBase(dao, iporToken, stakeholders, amounts) {}

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

        AirdropTypes.State memory state = _states[account];

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

        state.released = state.initialValue;
        _states[account] = state;

        _totalReleased += state.initialValue;

		IERC20(_iporToken).transfer(account, state.initialValue);

        emit ConfirmedTermsOfUse(account, declaration);
        emit TokenReleased(account, state.initialValue);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"dao","type":"address"},{"internalType":"address","name":"iporToken","type":"address"},{"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":[{"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":[],"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":"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"}]

60c06040523480156200001157600080fd5b5060405162001a3e38038062001a3e8339810160408190526200003491620006d4565b6000805460ff19169055600180558383838362000051336200046d565b604080518082019091526008815267049504f525f3735360c41b60208201526001600160a01b038516620000a35760405162461bcd60e51b81526004016200009a9190620007ca565b60405180910390fd5b50604080518082019091526008815267049504f525f3735360c41b60208201526001600160a01b038416620000ed5760405162461bcd60e51b81526004016200009a9190620007ca565b507fdba05ed67d0251facfcab8345f27ccd3e72b5a1da8cebfabbcccf4316e6d053c60001b836001600160a01b0316634788cabf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017791906200081a565b1460405180604001604052806008815260200167049504f525f3736360c41b81525090620001ba5760405162461bcd60e51b81526004016200009a9190620007ca565b508151815160408051808201909152600881526724a827a92f9b9a9960c11b6020820152908214620002015760405162461bcd60e51b81526004016200009a9190620007ca565b50604080518082019091526008815267125413d497cdcd4d60c21b602082015281620002425760405162461bcd60e51b81526004016200009a9190620007ca565b5060008060005b83811015620003e15784818151811062000267576200026762000834565b6020026020010151925085818151811062000286576200028662000834565b6020026020010151915060006001600160a01b0316826001600160a01b0316141560405180604001604052806008815260200167049504f525f3735360c41b81525090620002e95760405162461bcd60e51b81526004016200009a9190620007ca565b5060408051808201909152600881526749504f525f37353360c01b6020820152836200032a5760405162461bcd60e51b81526004016200009a9190620007ca565b5060405180604001604052806200034c85620004bf60201b62000a2a1760201c565b6001600160801b039081168252600060209283018190526001600160a01b03861680825260048452604091829020855195909401518316600160801b02949092169390931790915590517f120bfdd311a35c23d43060f2ed5044e464ade4940f2f49f164ab6e0b32eb833690620003c69086815260200190565b60405180910390a2620003d98162000860565b905062000249565b50620003f883620004bf60201b62000a2a1760201c565b600580546010906200041c908490600160801b90046001600160801b03166200087c565b82546001600160801b039182166101009390930a9283029190920219909116179055506001600160a01b03808816608052861660a0526200045c6200052e565b5050505050505050505050620008a6565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006001600160801b038211156200052a5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b60648201526084016200009a565b5090565b620005386200058b565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586200056e3390565b6040516001600160a01b03909116815260200160405180910390a1565b60005460ff1615620005d35760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b60448201526064016200009a565b565b80516001600160a01b0381168114620005ed57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620006335762000633620005f2565b604052919050565b60006001600160401b03821115620006575762000657620005f2565b5060051b60200190565b600082601f8301126200067357600080fd5b815160206200068c62000686836200063b565b62000608565b82815260059290921b84018101918181019086841115620006ac57600080fd5b8286015b84811015620006c95780518352918301918301620006b0565b509695505050505050565b60008060008060808587031215620006eb57600080fd5b620006f685620005d5565b9350602062000707818701620005d5565b60408701519094506001600160401b03808211156200072557600080fd5b818801915088601f8301126200073a57600080fd5b81516200074b62000686826200063b565b81815260059190911b8301840190848101908b8311156200076b57600080fd5b938501935b8285101562000794576200078485620005d5565b8252938501939085019062000770565b60608b01519097509450505080831115620007ae57600080fd5b5050620007be8782880162000661565b91505092959194509250565b600060208083528351808285015260005b81811015620007f957858101830151858201604001528201620007db565b506000604082860101526040601f19601f8301168501019250505092915050565b6000602082840312156200082d57600080fd5b5051919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016200087557620008756200084a565b5060010190565b6001600160801b038181168382160190808211156200089f576200089f6200084a565b5092915050565b60805160a05161116b620008d360003960008181610235015261091e01526000610266015261116b6000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636fc436631161008c5780638da5cb5b116100665780638da5cb5b146101cf578063cc29516a146101ea578063f2fde38b146101f2578063f34e37231461020557600080fd5b80636fc43663146101a7578063715018a6146101bf5780638456cb59146101c757600080fd5b8063463aa96b116100bd578063463aa96b146101635780634b14c0ef146101765780635c975abb1461019157600080fd5b806314ab2612146100e45780631bab58f5146100ee5780633f4ba83a1461015b575b600080fd5b6100ec610218565b005b6101416100fc366004610e92565b6001600160a01b03166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b909204169290910182905291565b604080519283526020830191909152015b60405180910390f35b6100ec61035c565b6100ec610171366004610f0e565b61036e565b6005546001600160801b03165b604051908152602001610152565b60005460ff166040519015158152602001610152565b600554600160801b90046001600160801b0316610183565b6100ec6104e3565b6100ec610507565b6002546040516001600160a01b039091168152602001610152565b6100ec610517565b6100ec610200366004610e92565b610591565b6100ec610213366004610f7a565b61063f565b610220610aad565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb907f00000000000000000000000000000000000000000000000000000000000000009083906370a0823190602401602060405180830381865afa1580156102ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d29190610fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103599190611005565b50565b610364610aad565b61036c610b07565b565b610376610aad565b60408051808201909152600881527f49504f525f373532000000000000000000000000000000000000000000000000602082015283908282146103d55760405162461bcd60e51b81526004016103cc919061104b565b60405180910390fd5b5060408051808201909152600881527f49504f525f3735340000000000000000000000000000000000000000000000006020820152816104285760405162461bcd60e51b81526004016103cc919061104b565b5060005b8181101561048c5761047c8686838181106104495761044961107e565b905060200201602081019061045e9190610e92565b8585848181106104705761047061107e565b90506020020135610b59565b610485816110aa565b905061042c565b5061049681610a2a565b600580546010906104b8908490600160801b90046001600160801b03166110c3565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505050505050565b6104eb610aad565b6104f56000610d05565b600380546001600160a01b0319169055565b61050f610aad565b61036c610d57565b60035460408051808201909152600881527f49504f525f3030370000000000000000000000000000000000000000000000006020820152906001600160a01b031633146105775760405162461bcd60e51b81526004016103cc919061104b565b50600380546001600160a01b031916905561036c33610d05565b610599610aad565b60408051808201909152600881527f49504f525f30303000000000000000000000000000000000000000000000000060208201526001600160a01b0382166105f45760405162461bcd60e51b81526004016103cc919061104b565b50600380546001600160a01b0319166001600160a01b0383169081179091556040517f3ec7bb1d452f3c36260fa8ef678a597fd97574d8ec42f6dc98ffce3dbc91228f90600090a250565b610647610d94565b61064f610de7565b81818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604051610712925060200190507f4920636f6e6669726d2074686174204920616d20696e20636f6d706c69616e6381527f65207769746820746865205465726d73206f6620557365206c6f63617465642060208201527f61742068747470733a2f2f7777772e69706f722e696f2f7465726d732d6f662d6040820152633ab9b29760e11b606082015260640190565b604051602081830303815290604052805190602001208160405160200161073991906110ea565b60405160208183030381529060405280519060200120146040518060400160405280600881526020017f49504f525f373631000000000000000000000000000000000000000000000000815250906107a45760405162461bcd60e51b81526004016103cc919061104b565b50336000818152600460209081526040918290208251808401845290546001600160801b03808216808452600160801b90920416828401528351808501909452600884526749504f525f37353360c01b92840192909252919061081a5760405162461bcd60e51b81526004016103cc919061104b565b5080602001516001600160801b03166000146040518060400160405280600881526020017f49504f525f373535000000000000000000000000000000000000000000000000815250906108805760405162461bcd60e51b81526004016103cc919061104b565b5080516001600160801b0390811660208084019182526001600160a01b0385166000908152600490915260408120845192518416600160801b0283851617905560058054929390926108d4918591166110c3565b82546101009290920a6001600160801b03818102199093169183160217909155825160405163a9059cbb60e01b81526001600160a01b0386811660048301529190921660248301527f000000000000000000000000000000000000000000000000000000000000000016915063a9059cbb906044016020604051808303816000875af1158015610968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098c9190611005565b50816001600160a01b03167f3d7a24afc0f9ae513f3360e372be67fc79beb218c832b099fe454067a96f324986866040516109c8929190611106565b60405180910390a280516040516001600160801b0390911681526001600160a01b038316907f9cf9e3ab58b33f06d81842ea0ad850b6640c6430d6396973312e1715792e7a919060200160405180910390a2505050610a2660018055565b5050565b60006001600160801b03821115610aa95760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084016103cc565b5090565b6002546001600160a01b0316331461036c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cc565b610b0f610e40565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60408051808201909152600881527f49504f525f37353000000000000000000000000000000000000000000000000060208201526001600160a01b038316610bb45760405162461bcd60e51b81526004016103cc919061104b565b5060408051808201909152600881526749504f525f37353360c01b602082015281610bf25760405162461bcd60e51b81526004016103cc919061104b565b506001600160a01b038216600090815260046020908152604091829020548251808401909352600883527f49504f525f373536000000000000000000000000000000000000000000000000918301919091526001600160801b031615610c6b5760405162461bcd60e51b81526004016103cc919061104b565b506040518060400160405280610c8083610a2a565b6001600160801b039081168252600060209283018190526001600160a01b03861680825260048452604091829020855195909401518316600160801b02949092169390931790915590517f120bfdd311a35c23d43060f2ed5044e464ade4940f2f49f164ab6e0b32eb833690610cf99084815260200190565b60405180910390a25050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d5f610d94565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b3c3390565b60005460ff161561036c5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016103cc565b600260015403610e395760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103cc565b6002600155565b60005460ff1661036c5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016103cc565b600060208284031215610ea457600080fd5b81356001600160a01b0381168114610ebb57600080fd5b9392505050565b60008083601f840112610ed457600080fd5b50813567ffffffffffffffff811115610eec57600080fd5b6020830191508360208260051b8501011115610f0757600080fd5b9250929050565b60008060008060408587031215610f2457600080fd5b843567ffffffffffffffff80821115610f3c57600080fd5b610f4888838901610ec2565b90965094506020870135915080821115610f6157600080fd5b50610f6e87828801610ec2565b95989497509550505050565b60008060208385031215610f8d57600080fd5b823567ffffffffffffffff80821115610fa557600080fd5b818501915085601f830112610fb957600080fd5b813581811115610fc857600080fd5b866020828501011115610fda57600080fd5b60209290920196919550909350505050565b600060208284031215610ffe57600080fd5b5051919050565b60006020828403121561101757600080fd5b81518015158114610ebb57600080fd5b60005b8381101561104257818101518382015260200161102a565b50506000910152565b602081526000825180602084015261106a816040850160208701611027565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110bc576110bc611094565b5060010190565b6001600160801b038181168382160190808211156110e3576110e3611094565b5092915050565b600082516110fc818460208701611027565b9190910192915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea264697066735822122055617eebdc560f31082875d77c9fb04ac0eeb547a1d95028aff4ecc99359da0a64736f6c63430008110033000000000000000000000000b7be82790d40258fd028beef2f2007dc044f34590000000000000000000000001e4746dc744503b53b4a082cb3607b169a28909000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d20000000000000000000000000000000000000000000000000000000000000006400000000000000000000000001ec4a63e8bd579e1a2cea4763cf3a5da5e48e8b00000000000000000000000003a673e4a53120a0f6f57e49b202f3855391713600000000000000000000000004a1ca17409d9c5557b89cc3aa6c76083955e7ae00000000000000000000000005a84dac7d722e3313b5c94e2681baac3427ba76000000000000000000000000070330e027a3e4327ba69f0c8a1885df4b5458370000000000000000000000000737b406d0d652b49eeffaf025db10099a01c00d000000000000000000000000074a8adeb96ef74ae82a6377c8085106f014989c0000000000000000000000000766569cbc0ed6291551589f66e0d0b2da3881de00000000000000000000000007d7d3badcb55dcb5f5d4c77b0513b9ec73507f8000000000000000000000000097e3725a78fe52a803da00e827bb60a9950948300000000000000000000000009e8516aeaccb2e79fb954144404eef908d72b240000000000000000000000000c8ee7dbf8cb1d980c107d3df6357deac7dbe9ef0000000000000000000000000c988abc38a818bbb2fb9f8f9b547748cf5d42b50000000000000000000000000da2b44edd7ba460cfce12f99f351cac8f2160960000000000000000000000000fd6f65d35cf13ae51795036d0ae9af42f3cbcb400000000000000000000000010b9f7a1435f2486324dcf6a930cfc64332a43bc000000000000000000000000116fca4069ccd39ce814ba6c05ee4a6529c0185700000000000000000000000011d67fa925877813b744abc0917900c2b1d6eb810000000000000000000000001260121fee8f2395b2d0642f66cb088935e79ad6000000000000000000000000135749a097d9d8c1fbad6ddeacaac757f0a7633a0000000000000000000000001398206b0d65048edd2864496655255f5de9e4e000000000000000000000000013bf4152e8b499b15f272fd61eb4dabe88072d9f0000000000000000000000001574a47822dc67d7ffd5e9de7b9fa85dbe98ac5f00000000000000000000000016a8348df50a76d43d00571e6ce50049ea2008f000000000000000000000000016c2312b7168f0e268751a4d5d73953176d877680000000000000000000000001846507590b77f961f9133eefd6bffd9bccaa2d1000000000000000000000000193f0ee42a199a0cecd479a9f09ba293eb1ca35700000000000000000000000019e1a6651e8080c51f397315f15a96457063d64b00000000000000000000000019ee073e863c6a6f6da9326044067507ea76a6930000000000000000000000001b52aac4f1e864018badd2cf58e181757f3b1efb0000000000000000000000001e6bd36167620641cc88c846b815ada76f754e5b0000000000000000000000001ee708a208cedacafd2c8ee9bb4dc0a662a98d910000000000000000000000001f427a6fcdb95a7393c58552093e10a932890fa80000000000000000000000001fc550e98ad3021e32c47a84019f77a0792c60b700000000000000000000000020c9bd4cff005082867e5928926200c872cd8b3d000000000000000000000000219723d005e383032ea9ae43e4a72bdead0fa38b0000000000000000000000002218fc2411dc8a588724c89b1f413750bbbf08aa000000000000000000000000229ca6e76661463b920d9a24db8237110df78ef700000000000000000000000024621aa4dde07f04c57146d83468969010b7489e0000000000000000000000002477296e9bb326506039c01ad22475133d93265900000000000000000000000025beda673690ecd0a8a64d35ab228fc2e1c0048a00000000000000000000000026e34bb0e82fe8d88f04ae77fee256f27549782300000000000000000000000026fdc242eccc144971e558ff458a4ec21b75d4e800000000000000000000000027b19813451bcae3031cabd40b7587b26eaa7d8a0000000000000000000000002a3381b6909512ff4a028b6ca747e4592f8384d50000000000000000000000002a59229fcb4c91fed9315d3864c86b29ffe6a4f00000000000000000000000002b47c57a4c9fc1649b43500f4c0cda6cf29be2780000000000000000000000002b6c7e127a5f799587b0f9b4393d62b26cf85c950000000000000000000000002b92d12d8cc0b9af862451393925092c6c21a6110000000000000000000000002e9487b6b1e059640d7e219f6df4a3300f9c18950000000000000000000000002ec1d7a211245d31aaad13ffc11a06e2b21d56e30000000000000000000000003140f301fa35d667de5775fa1b00ad0a4dc7eb5c00000000000000000000000032420d4529c1f1726957770b5e7e06fe0bf59b2e00000000000000000000000032d4135f53a85250d58b97bc5c1d2c29161a3ff700000000000000000000000033fe24d01539c99c50ecbabec91e05b0f802c0b900000000000000000000000034b1a03882de980380a597d9fda7b2c24164267b00000000000000000000000035642de97d6376dd55240ffd35fafd2619515e5400000000000000000000000035d448178c938ee1a2dd0c3c9da3185d433e79aa000000000000000000000000380568bcadb2ebdd84b9d0f4e6702ee760ce69440000000000000000000000003858f2718eceaaff646b8f971be38d3e201ef1d6000000000000000000000000388411e858cb11414b7eeccf26c8c6a2c23ec52f000000000000000000000000395fbf8d53d44fb9e61684a72757ab5cfc8d83d700000000000000000000000039e99d18634e63df7867287e3059f39b6c6f428d0000000000000000000000003a10728b046357eec8b491a28ad017a7e03d6c030000000000000000000000003abd7263af164401abeee5894858dfdb803c47100000000000000000000000003b3abbf96e7d4c738994607822d786c791f022ee0000000000000000000000003b54daaa6c2470f2788cc69102ebc065ef056a940000000000000000000000003b91caba057858ba138dc2e00cda9f3603d77a440000000000000000000000003dd54285c649135127404e30a335c6667cd5709b0000000000000000000000003e2178cf851a0e5cbf84c0ff53f820ad7ead703b0000000000000000000000003f2c67f587bf7a42f6cb2dcde5d24d55067567480000000000000000000000003f56e53b068ed94c3f1d4803ff1262154d4351730000000000000000000000003f9392f4d18f92306a3955f0e4e4705cfaa97b82000000000000000000000000407628fc57d46e3f5a941cccff273cd583ee0c3f000000000000000000000000425774e62423b870a22477b391c7a00bfc83bdd700000000000000000000000042e8f94fba0f2b63449c3042c6dc6511f694446a000000000000000000000000442b263a0aab7c90a822a99e49d27cc8d2af20ed00000000000000000000000044775476a3c87740f9ff7d013b601e8f3857a726000000000000000000000000466e956ca9987b0b119330df65bf6ec4c3876e4f0000000000000000000000004bfac3a78ef7308861e6d91da922e9d162e88b7f0000000000000000000000004c1270592cc6a34f8371100cb3cf55961b7bd7fa0000000000000000000000004c36e31a6006edcc58fd92fe3cb35683f78401a40000000000000000000000004d58d36e46cf9af14e416061fe5d0074780b40990000000000000000000000004de47144fcc39c72abe1a4eb40ca2a955f8c3a550000000000000000000000004e47e39033a19f306598167499dc070b6039aaa10000000000000000000000005053a1354cb45eebdd2d8342ceee71d41efa75ca000000000000000000000000511432a0ca35ea7a3874290872333b8b719280fc000000000000000000000000523e34d215485740a7bc604c7dc117eeca71a5c80000000000000000000000005498ff04a598f05b1ee3483b506d1191c7718bfd00000000000000000000000055d554bfde1e61c72fa3c9059cdf3f739d92679a0000000000000000000000005648af1b3c089e4226e71ecc060df2c4cb4118dc000000000000000000000000579bd1582e0a4800df4ac5f5796261ad3597a1fc00000000000000000000000057d621d02992672b80154243d54353b66e4483ae00000000000000000000000058449fbc50e9219cdde892ed48c8b0cdde03b4670000000000000000000000005878fc144c6f77d7cd4744b12bccd7f4f500af1800000000000000000000000059f2e6b43d2beedbd1c38859c8940c80539b1a610000000000000000000000005a93fdde08b8e6197bb7b9e8eabcfceb526079320000000000000000000000005c4d73cf4f9793ff23e2ec2528f307b8f901fcfa0000000000000000000000005ced142150f7d0ee71c2300b34d51e5dc9f8c4560000000000000000000000005d4ce7a8e2483e35b2d8009def56bbe8a4352bb800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000018650127cc3dc800000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000018650127cc3dc8000000000000000000000000000000000000000000000000000d02ab486cedc00000000000000000000000000000000000000000000000000018650127cc3dc800000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000018650127cc3dc800000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000492f037764b95800000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000003dccad9805695000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000492f037764b958000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100df5760003560e01c80636fc436631161008c5780638da5cb5b116100665780638da5cb5b146101cf578063cc29516a146101ea578063f2fde38b146101f2578063f34e37231461020557600080fd5b80636fc43663146101a7578063715018a6146101bf5780638456cb59146101c757600080fd5b8063463aa96b116100bd578063463aa96b146101635780634b14c0ef146101765780635c975abb1461019157600080fd5b806314ab2612146100e45780631bab58f5146100ee5780633f4ba83a1461015b575b600080fd5b6100ec610218565b005b6101416100fc366004610e92565b6001600160a01b03166000908152600460209081526040918290208251808401909352546001600160801b03808216808552600160801b909204169290910182905291565b604080519283526020830191909152015b60405180910390f35b6100ec61035c565b6100ec610171366004610f0e565b61036e565b6005546001600160801b03165b604051908152602001610152565b60005460ff166040519015158152602001610152565b600554600160801b90046001600160801b0316610183565b6100ec6104e3565b6100ec610507565b6002546040516001600160a01b039091168152602001610152565b6100ec610517565b6100ec610200366004610e92565b610591565b6100ec610213366004610f7a565b61063f565b610220610aad565b6040516370a0823160e01b81523060048201527f0000000000000000000000001e4746dc744503b53b4a082cb3607b169a2890906001600160a01b03169063a9059cbb907f000000000000000000000000b7be82790d40258fd028beef2f2007dc044f34599083906370a0823190602401602060405180830381865afa1580156102ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102d29190610fec565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015610335573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103599190611005565b50565b610364610aad565b61036c610b07565b565b610376610aad565b60408051808201909152600881527f49504f525f373532000000000000000000000000000000000000000000000000602082015283908282146103d55760405162461bcd60e51b81526004016103cc919061104b565b60405180910390fd5b5060408051808201909152600881527f49504f525f3735340000000000000000000000000000000000000000000000006020820152816104285760405162461bcd60e51b81526004016103cc919061104b565b5060005b8181101561048c5761047c8686838181106104495761044961107e565b905060200201602081019061045e9190610e92565b8585848181106104705761047061107e565b90506020020135610b59565b610485816110aa565b905061042c565b5061049681610a2a565b600580546010906104b8908490600160801b90046001600160801b03166110c3565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505050505050565b6104eb610aad565b6104f56000610d05565b600380546001600160a01b0319169055565b61050f610aad565b61036c610d57565b60035460408051808201909152600881527f49504f525f3030370000000000000000000000000000000000000000000000006020820152906001600160a01b031633146105775760405162461bcd60e51b81526004016103cc919061104b565b50600380546001600160a01b031916905561036c33610d05565b610599610aad565b60408051808201909152600881527f49504f525f30303000000000000000000000000000000000000000000000000060208201526001600160a01b0382166105f45760405162461bcd60e51b81526004016103cc919061104b565b50600380546001600160a01b0319166001600160a01b0383169081179091556040517f3ec7bb1d452f3c36260fa8ef678a597fd97574d8ec42f6dc98ffce3dbc91228f90600090a250565b610647610d94565b61064f610de7565b81818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604051610712925060200190507f4920636f6e6669726d2074686174204920616d20696e20636f6d706c69616e6381527f65207769746820746865205465726d73206f6620557365206c6f63617465642060208201527f61742068747470733a2f2f7777772e69706f722e696f2f7465726d732d6f662d6040820152633ab9b29760e11b606082015260640190565b604051602081830303815290604052805190602001208160405160200161073991906110ea565b60405160208183030381529060405280519060200120146040518060400160405280600881526020017f49504f525f373631000000000000000000000000000000000000000000000000815250906107a45760405162461bcd60e51b81526004016103cc919061104b565b50336000818152600460209081526040918290208251808401845290546001600160801b03808216808452600160801b90920416828401528351808501909452600884526749504f525f37353360c01b92840192909252919061081a5760405162461bcd60e51b81526004016103cc919061104b565b5080602001516001600160801b03166000146040518060400160405280600881526020017f49504f525f373535000000000000000000000000000000000000000000000000815250906108805760405162461bcd60e51b81526004016103cc919061104b565b5080516001600160801b0390811660208084019182526001600160a01b0385166000908152600490915260408120845192518416600160801b0283851617905560058054929390926108d4918591166110c3565b82546101009290920a6001600160801b03818102199093169183160217909155825160405163a9059cbb60e01b81526001600160a01b0386811660048301529190921660248301527f0000000000000000000000001e4746dc744503b53b4a082cb3607b169a28909016915063a9059cbb906044016020604051808303816000875af1158015610968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061098c9190611005565b50816001600160a01b03167f3d7a24afc0f9ae513f3360e372be67fc79beb218c832b099fe454067a96f324986866040516109c8929190611106565b60405180910390a280516040516001600160801b0390911681526001600160a01b038316907f9cf9e3ab58b33f06d81842ea0ad850b6640c6430d6396973312e1715792e7a919060200160405180910390a2505050610a2660018055565b5050565b60006001600160801b03821115610aa95760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f323820626974730000000000000000000000000000000000000000000000000060648201526084016103cc565b5090565b6002546001600160a01b0316331461036c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103cc565b610b0f610e40565b6000805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b60408051808201909152600881527f49504f525f37353000000000000000000000000000000000000000000000000060208201526001600160a01b038316610bb45760405162461bcd60e51b81526004016103cc919061104b565b5060408051808201909152600881526749504f525f37353360c01b602082015281610bf25760405162461bcd60e51b81526004016103cc919061104b565b506001600160a01b038216600090815260046020908152604091829020548251808401909352600883527f49504f525f373536000000000000000000000000000000000000000000000000918301919091526001600160801b031615610c6b5760405162461bcd60e51b81526004016103cc919061104b565b506040518060400160405280610c8083610a2a565b6001600160801b039081168252600060209283018190526001600160a01b03861680825260048452604091829020855195909401518316600160801b02949092169390931790915590517f120bfdd311a35c23d43060f2ed5044e464ade4940f2f49f164ab6e0b32eb833690610cf99084815260200190565b60405180910390a25050565b600280546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b610d5f610d94565b6000805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258610b3c3390565b60005460ff161561036c5760405162461bcd60e51b815260206004820152601060248201527f5061757361626c653a207061757365640000000000000000000000000000000060448201526064016103cc565b600260015403610e395760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016103cc565b6002600155565b60005460ff1661036c5760405162461bcd60e51b815260206004820152601460248201527f5061757361626c653a206e6f742070617573656400000000000000000000000060448201526064016103cc565b600060208284031215610ea457600080fd5b81356001600160a01b0381168114610ebb57600080fd5b9392505050565b60008083601f840112610ed457600080fd5b50813567ffffffffffffffff811115610eec57600080fd5b6020830191508360208260051b8501011115610f0757600080fd5b9250929050565b60008060008060408587031215610f2457600080fd5b843567ffffffffffffffff80821115610f3c57600080fd5b610f4888838901610ec2565b90965094506020870135915080821115610f6157600080fd5b50610f6e87828801610ec2565b95989497509550505050565b60008060208385031215610f8d57600080fd5b823567ffffffffffffffff80821115610fa557600080fd5b818501915085601f830112610fb957600080fd5b813581811115610fc857600080fd5b866020828501011115610fda57600080fd5b60209290920196919550909350505050565b600060208284031215610ffe57600080fd5b5051919050565b60006020828403121561101757600080fd5b81518015158114610ebb57600080fd5b60005b8381101561104257818101518382015260200161102a565b50506000910152565b602081526000825180602084015261106a816040850160208701611027565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016110bc576110bc611094565b5060010190565b6001600160801b038181168382160190808211156110e3576110e3611094565b5092915050565b600082516110fc818460208701611027565b9190910192915050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f1916010191905056fea264697066735822122055617eebdc560f31082875d77c9fb04ac0eeb547a1d95028aff4ecc99359da0a64736f6c63430008110033

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

000000000000000000000000b7be82790d40258fd028beef2f2007dc044f34590000000000000000000000001e4746dc744503b53b4a082cb3607b169a28909000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000d20000000000000000000000000000000000000000000000000000000000000006400000000000000000000000001ec4a63e8bd579e1a2cea4763cf3a5da5e48e8b00000000000000000000000003a673e4a53120a0f6f57e49b202f3855391713600000000000000000000000004a1ca17409d9c5557b89cc3aa6c76083955e7ae00000000000000000000000005a84dac7d722e3313b5c94e2681baac3427ba76000000000000000000000000070330e027a3e4327ba69f0c8a1885df4b5458370000000000000000000000000737b406d0d652b49eeffaf025db10099a01c00d000000000000000000000000074a8adeb96ef74ae82a6377c8085106f014989c0000000000000000000000000766569cbc0ed6291551589f66e0d0b2da3881de00000000000000000000000007d7d3badcb55dcb5f5d4c77b0513b9ec73507f8000000000000000000000000097e3725a78fe52a803da00e827bb60a9950948300000000000000000000000009e8516aeaccb2e79fb954144404eef908d72b240000000000000000000000000c8ee7dbf8cb1d980c107d3df6357deac7dbe9ef0000000000000000000000000c988abc38a818bbb2fb9f8f9b547748cf5d42b50000000000000000000000000da2b44edd7ba460cfce12f99f351cac8f2160960000000000000000000000000fd6f65d35cf13ae51795036d0ae9af42f3cbcb400000000000000000000000010b9f7a1435f2486324dcf6a930cfc64332a43bc000000000000000000000000116fca4069ccd39ce814ba6c05ee4a6529c0185700000000000000000000000011d67fa925877813b744abc0917900c2b1d6eb810000000000000000000000001260121fee8f2395b2d0642f66cb088935e79ad6000000000000000000000000135749a097d9d8c1fbad6ddeacaac757f0a7633a0000000000000000000000001398206b0d65048edd2864496655255f5de9e4e000000000000000000000000013bf4152e8b499b15f272fd61eb4dabe88072d9f0000000000000000000000001574a47822dc67d7ffd5e9de7b9fa85dbe98ac5f00000000000000000000000016a8348df50a76d43d00571e6ce50049ea2008f000000000000000000000000016c2312b7168f0e268751a4d5d73953176d877680000000000000000000000001846507590b77f961f9133eefd6bffd9bccaa2d1000000000000000000000000193f0ee42a199a0cecd479a9f09ba293eb1ca35700000000000000000000000019e1a6651e8080c51f397315f15a96457063d64b00000000000000000000000019ee073e863c6a6f6da9326044067507ea76a6930000000000000000000000001b52aac4f1e864018badd2cf58e181757f3b1efb0000000000000000000000001e6bd36167620641cc88c846b815ada76f754e5b0000000000000000000000001ee708a208cedacafd2c8ee9bb4dc0a662a98d910000000000000000000000001f427a6fcdb95a7393c58552093e10a932890fa80000000000000000000000001fc550e98ad3021e32c47a84019f77a0792c60b700000000000000000000000020c9bd4cff005082867e5928926200c872cd8b3d000000000000000000000000219723d005e383032ea9ae43e4a72bdead0fa38b0000000000000000000000002218fc2411dc8a588724c89b1f413750bbbf08aa000000000000000000000000229ca6e76661463b920d9a24db8237110df78ef700000000000000000000000024621aa4dde07f04c57146d83468969010b7489e0000000000000000000000002477296e9bb326506039c01ad22475133d93265900000000000000000000000025beda673690ecd0a8a64d35ab228fc2e1c0048a00000000000000000000000026e34bb0e82fe8d88f04ae77fee256f27549782300000000000000000000000026fdc242eccc144971e558ff458a4ec21b75d4e800000000000000000000000027b19813451bcae3031cabd40b7587b26eaa7d8a0000000000000000000000002a3381b6909512ff4a028b6ca747e4592f8384d50000000000000000000000002a59229fcb4c91fed9315d3864c86b29ffe6a4f00000000000000000000000002b47c57a4c9fc1649b43500f4c0cda6cf29be2780000000000000000000000002b6c7e127a5f799587b0f9b4393d62b26cf85c950000000000000000000000002b92d12d8cc0b9af862451393925092c6c21a6110000000000000000000000002e9487b6b1e059640d7e219f6df4a3300f9c18950000000000000000000000002ec1d7a211245d31aaad13ffc11a06e2b21d56e30000000000000000000000003140f301fa35d667de5775fa1b00ad0a4dc7eb5c00000000000000000000000032420d4529c1f1726957770b5e7e06fe0bf59b2e00000000000000000000000032d4135f53a85250d58b97bc5c1d2c29161a3ff700000000000000000000000033fe24d01539c99c50ecbabec91e05b0f802c0b900000000000000000000000034b1a03882de980380a597d9fda7b2c24164267b00000000000000000000000035642de97d6376dd55240ffd35fafd2619515e5400000000000000000000000035d448178c938ee1a2dd0c3c9da3185d433e79aa000000000000000000000000380568bcadb2ebdd84b9d0f4e6702ee760ce69440000000000000000000000003858f2718eceaaff646b8f971be38d3e201ef1d6000000000000000000000000388411e858cb11414b7eeccf26c8c6a2c23ec52f000000000000000000000000395fbf8d53d44fb9e61684a72757ab5cfc8d83d700000000000000000000000039e99d18634e63df7867287e3059f39b6c6f428d0000000000000000000000003a10728b046357eec8b491a28ad017a7e03d6c030000000000000000000000003abd7263af164401abeee5894858dfdb803c47100000000000000000000000003b3abbf96e7d4c738994607822d786c791f022ee0000000000000000000000003b54daaa6c2470f2788cc69102ebc065ef056a940000000000000000000000003b91caba057858ba138dc2e00cda9f3603d77a440000000000000000000000003dd54285c649135127404e30a335c6667cd5709b0000000000000000000000003e2178cf851a0e5cbf84c0ff53f820ad7ead703b0000000000000000000000003f2c67f587bf7a42f6cb2dcde5d24d55067567480000000000000000000000003f56e53b068ed94c3f1d4803ff1262154d4351730000000000000000000000003f9392f4d18f92306a3955f0e4e4705cfaa97b82000000000000000000000000407628fc57d46e3f5a941cccff273cd583ee0c3f000000000000000000000000425774e62423b870a22477b391c7a00bfc83bdd700000000000000000000000042e8f94fba0f2b63449c3042c6dc6511f694446a000000000000000000000000442b263a0aab7c90a822a99e49d27cc8d2af20ed00000000000000000000000044775476a3c87740f9ff7d013b601e8f3857a726000000000000000000000000466e956ca9987b0b119330df65bf6ec4c3876e4f0000000000000000000000004bfac3a78ef7308861e6d91da922e9d162e88b7f0000000000000000000000004c1270592cc6a34f8371100cb3cf55961b7bd7fa0000000000000000000000004c36e31a6006edcc58fd92fe3cb35683f78401a40000000000000000000000004d58d36e46cf9af14e416061fe5d0074780b40990000000000000000000000004de47144fcc39c72abe1a4eb40ca2a955f8c3a550000000000000000000000004e47e39033a19f306598167499dc070b6039aaa10000000000000000000000005053a1354cb45eebdd2d8342ceee71d41efa75ca000000000000000000000000511432a0ca35ea7a3874290872333b8b719280fc000000000000000000000000523e34d215485740a7bc604c7dc117eeca71a5c80000000000000000000000005498ff04a598f05b1ee3483b506d1191c7718bfd00000000000000000000000055d554bfde1e61c72fa3c9059cdf3f739d92679a0000000000000000000000005648af1b3c089e4226e71ecc060df2c4cb4118dc000000000000000000000000579bd1582e0a4800df4ac5f5796261ad3597a1fc00000000000000000000000057d621d02992672b80154243d54353b66e4483ae00000000000000000000000058449fbc50e9219cdde892ed48c8b0cdde03b4670000000000000000000000005878fc144c6f77d7cd4744b12bccd7f4f500af1800000000000000000000000059f2e6b43d2beedbd1c38859c8940c80539b1a610000000000000000000000005a93fdde08b8e6197bb7b9e8eabcfceb526079320000000000000000000000005c4d73cf4f9793ff23e2ec2528f307b8f901fcfa0000000000000000000000005ced142150f7d0ee71c2300b34d51e5dc9f8c4560000000000000000000000005d4ce7a8e2483e35b2d8009def56bbe8a4352bb800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000018650127cc3dc800000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000018650127cc3dc8000000000000000000000000000000000000000000000000000d02ab486cedc00000000000000000000000000000000000000000000000000018650127cc3dc800000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000000000000000000000000000000000000000000000000018650127cc3dc800000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000492f037764b95800000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000003dccad9805695000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000492f037764b958000000000000000000000000000000000000000000000000000d02ab486cedc0000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d6310000000000000000000000000000000000000000000000000000d02ab486cedc000000000000000000000000000000000000000000000000000056bc75e2d631000000000000000000000000000000000000000000000000000056bc75e2d63100000

-----Decoded View---------------
Arg [0] : dao (address): 0xB7bE82790d40258Fd028BEeF2f2007DC044F3459
Arg [1] : iporToken (address): 0x1e4746dC744503b53b4A082cB3607B169a289090
Arg [2] : stakeholders (address[]): 0x01EC4a63E8Bd579e1A2CEa4763Cf3a5da5e48e8b,0x03A673e4a53120a0f6f57E49B202f38553917136,0x04A1Ca17409D9c5557B89CC3Aa6C76083955E7Ae,0x05A84DAC7d722E3313b5C94E2681BAac3427ba76,0x070330e027a3e4327bA69f0c8A1885df4B545837,0x0737b406D0D652b49eEFfaF025db10099a01C00D,0x074A8adEb96ef74AE82A6377C8085106F014989C,0x0766569CBC0Ed6291551589F66e0d0b2DA3881De,0x07D7d3badcb55DCb5f5D4c77b0513B9Ec73507f8,0x097e3725a78Fe52a803Da00e827bB60a99509483,0x09e8516AEAcCb2E79FB954144404eEF908D72b24,0x0c8eE7DbF8cB1d980c107d3Df6357dEaC7dBe9EF,0x0c988abc38A818bBB2Fb9F8F9B547748Cf5D42B5,0x0da2b44eDD7bA460CfCe12F99F351CAc8f216096,0x0fD6f65D35cf13Ae51795036d0aE9AF42f3cBCB4,0x10b9f7a1435F2486324DCf6a930cfC64332a43bc,0x116FCA4069cCD39CE814bA6C05eE4a6529C01857,0x11d67Fa925877813B744aBC0917900c2b1D6Eb81,0x1260121fee8F2395B2d0642F66cB088935e79AD6,0x135749A097d9D8C1fBad6DDeaCAAC757f0A7633A,0x1398206B0d65048edd2864496655255f5DE9e4e0,0x13Bf4152e8B499b15F272fd61Eb4dAbe88072d9f,0x1574A47822DC67D7ffD5e9DE7b9fa85dbE98ac5f,0x16a8348DF50a76D43D00571E6cE50049ea2008f0,0x16c2312b7168F0E268751A4d5D73953176D87768,0x1846507590b77f961F9133Eefd6BfFD9BcCaA2d1,0x193F0Ee42a199A0CECD479a9F09BA293eB1CA357,0x19E1A6651e8080c51F397315f15a96457063d64b,0x19eE073E863c6a6F6da9326044067507eA76A693,0x1B52AAC4f1e864018bAdd2cF58e181757F3B1EfB,0x1E6bd36167620641cc88C846B815adA76F754e5b,0x1eE708A208CEdaCafD2c8eE9Bb4Dc0A662a98d91,0x1F427A6FCdb95A7393C58552093e10A932890FA8,0x1Fc550e98aD3021e32C47A84019F77a0792c60B7,0x20C9bd4cfF005082867e5928926200c872CD8b3D,0x219723D005E383032ea9Ae43e4A72BdeAd0FA38b,0x2218Fc2411dC8A588724C89b1F413750bbbf08aA,0x229cA6e76661463B920d9a24DB8237110df78ef7,0x24621aA4DDE07F04C57146D83468969010b7489E,0x2477296e9bB326506039c01ad22475133d932659,0x25bEda673690ecd0A8A64d35Ab228fC2E1C0048A,0x26e34Bb0E82FE8d88F04AE77fee256F275497823,0x26FDc242eCCc144971e558FF458a4ec21B75D4E8,0x27B19813451BcAe3031CaBd40B7587B26eAa7D8a,0x2A3381B6909512Ff4A028b6CA747E4592F8384d5,0x2a59229FCb4C91fEd9315D3864c86b29FFe6a4F0,0x2b47C57A4c9Fc1649B43500f4c0cDa6cF29be278,0x2B6C7e127a5f799587B0F9B4393D62B26Cf85c95,0x2B92d12D8cC0b9AF862451393925092c6c21A611,0x2E9487B6b1E059640D7E219F6dF4A3300f9C1895,0x2EC1d7A211245d31aaAD13ffC11a06e2B21d56e3,0x3140f301FA35d667de5775fA1B00aD0a4Dc7EB5C,0x32420d4529C1f1726957770B5e7E06fe0Bf59b2E,0x32D4135F53a85250d58b97BC5c1D2C29161A3fF7,0x33FE24D01539C99c50ecbABec91e05B0F802C0B9,0x34B1A03882De980380a597d9Fda7B2c24164267B,0x35642DE97d6376DD55240Ffd35FAfD2619515e54,0x35d448178c938ee1a2DD0C3C9DA3185d433E79AA,0x380568bcadb2ebDd84B9D0F4E6702ee760Ce6944,0x3858f2718EceaAff646b8f971Be38D3E201Ef1D6,0x388411E858cB11414B7eECcF26c8C6A2C23Ec52F,0x395fBf8d53D44FB9e61684a72757Ab5cFc8d83D7,0x39e99d18634E63Df7867287E3059F39b6C6f428d,0x3a10728B046357eeC8b491a28ad017A7E03D6C03,0x3Abd7263af164401abEee5894858dFdb803c4710,0x3B3abBF96e7d4C738994607822D786c791F022ee,0x3b54DaAA6C2470F2788Cc69102ebC065ef056a94,0x3b91Caba057858bA138dC2e00CDa9f3603D77a44,0x3dd54285c649135127404E30a335c6667cD5709b,0x3e2178CF851A0e5cbF84c0ff53f820ad7EAD703b,0x3f2c67F587Bf7a42f6cb2dcde5D24D5506756748,0x3F56E53b068Ed94C3f1d4803fF1262154D435173,0x3f9392f4D18f92306A3955f0E4E4705CFAa97B82,0x407628fc57d46E3f5a941CCCff273CD583EE0c3F,0x425774E62423b870a22477b391c7A00Bfc83bdD7,0x42e8F94FBA0F2B63449C3042C6DC6511f694446A,0x442B263a0aAB7c90A822A99E49d27Cc8D2Af20eD,0x44775476a3c87740F9FF7d013B601e8f3857A726,0x466E956cA9987b0b119330DF65bF6Ec4c3876E4F,0x4Bfac3a78eF7308861e6d91DA922e9D162e88b7f,0x4c1270592Cc6A34F8371100Cb3CF55961B7Bd7Fa,0x4C36E31A6006EDCc58FD92fe3cb35683f78401A4,0x4D58D36e46Cf9AF14e416061Fe5D0074780b4099,0x4De47144fCC39C72aBE1a4EB40cA2A955F8C3a55,0x4e47e39033a19F306598167499dc070B6039AAa1,0x5053a1354cB45eebdd2d8342cEeE71d41efA75CA,0x511432a0Ca35EA7a3874290872333b8b719280FC,0x523E34d215485740a7BC604C7DC117EecA71A5C8,0x5498ff04A598F05B1eE3483B506d1191C7718bfd,0x55D554BfdE1E61c72fa3C9059cDf3f739d92679a,0x5648aF1b3c089e4226e71ecc060dF2c4cB4118DC,0x579bD1582E0A4800Df4AC5F5796261Ad3597a1FC,0x57d621D02992672B80154243d54353B66E4483aE,0x58449FBC50E9219cDDe892ed48c8b0CddE03B467,0x5878fC144c6F77D7Cd4744b12BCCD7F4F500Af18,0x59F2e6b43d2beedbD1C38859C8940c80539b1A61,0x5A93fDdE08b8E6197Bb7B9E8EABcfcEb52607932,0x5c4D73Cf4F9793Ff23e2Ec2528f307B8f901fCfA,0x5ced142150F7d0ee71C2300b34D51e5Dc9f8C456,0x5D4CE7A8e2483E35B2d8009DEf56bbe8A4352BB8
Arg [3] : amounts (uint256[]): 100000000000000000000,240000000000000000000,100000000000000000000,240000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,450000000000000000000,100000000000000000000,450000000000000000000,240000000000000000000,450000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,450000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,1350000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,1140000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,240000000000000000000,240000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,1350000000000000000000,240000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,100000000000000000000,240000000000000000000,100000000000000000000,100000000000000000000

-----Encoded View---------------
206 Constructor Arguments found :
Arg [0] : 000000000000000000000000b7be82790d40258fd028beef2f2007dc044f3459
Arg [1] : 0000000000000000000000001e4746dc744503b53b4a082cb3607b169a289090
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000d20
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [5] : 00000000000000000000000001ec4a63e8bd579e1a2cea4763cf3a5da5e48e8b
Arg [6] : 00000000000000000000000003a673e4a53120a0f6f57e49b202f38553917136
Arg [7] : 00000000000000000000000004a1ca17409d9c5557b89cc3aa6c76083955e7ae
Arg [8] : 00000000000000000000000005a84dac7d722e3313b5c94e2681baac3427ba76
Arg [9] : 000000000000000000000000070330e027a3e4327ba69f0c8a1885df4b545837
Arg [10] : 0000000000000000000000000737b406d0d652b49eeffaf025db10099a01c00d
Arg [11] : 000000000000000000000000074a8adeb96ef74ae82a6377c8085106f014989c
Arg [12] : 0000000000000000000000000766569cbc0ed6291551589f66e0d0b2da3881de
Arg [13] : 00000000000000000000000007d7d3badcb55dcb5f5d4c77b0513b9ec73507f8
Arg [14] : 000000000000000000000000097e3725a78fe52a803da00e827bb60a99509483
Arg [15] : 00000000000000000000000009e8516aeaccb2e79fb954144404eef908d72b24
Arg [16] : 0000000000000000000000000c8ee7dbf8cb1d980c107d3df6357deac7dbe9ef
Arg [17] : 0000000000000000000000000c988abc38a818bbb2fb9f8f9b547748cf5d42b5
Arg [18] : 0000000000000000000000000da2b44edd7ba460cfce12f99f351cac8f216096
Arg [19] : 0000000000000000000000000fd6f65d35cf13ae51795036d0ae9af42f3cbcb4
Arg [20] : 00000000000000000000000010b9f7a1435f2486324dcf6a930cfc64332a43bc
Arg [21] : 000000000000000000000000116fca4069ccd39ce814ba6c05ee4a6529c01857
Arg [22] : 00000000000000000000000011d67fa925877813b744abc0917900c2b1d6eb81
Arg [23] : 0000000000000000000000001260121fee8f2395b2d0642f66cb088935e79ad6
Arg [24] : 000000000000000000000000135749a097d9d8c1fbad6ddeacaac757f0a7633a
Arg [25] : 0000000000000000000000001398206b0d65048edd2864496655255f5de9e4e0
Arg [26] : 00000000000000000000000013bf4152e8b499b15f272fd61eb4dabe88072d9f
Arg [27] : 0000000000000000000000001574a47822dc67d7ffd5e9de7b9fa85dbe98ac5f
Arg [28] : 00000000000000000000000016a8348df50a76d43d00571e6ce50049ea2008f0
Arg [29] : 00000000000000000000000016c2312b7168f0e268751a4d5d73953176d87768
Arg [30] : 0000000000000000000000001846507590b77f961f9133eefd6bffd9bccaa2d1
Arg [31] : 000000000000000000000000193f0ee42a199a0cecd479a9f09ba293eb1ca357
Arg [32] : 00000000000000000000000019e1a6651e8080c51f397315f15a96457063d64b
Arg [33] : 00000000000000000000000019ee073e863c6a6f6da9326044067507ea76a693
Arg [34] : 0000000000000000000000001b52aac4f1e864018badd2cf58e181757f3b1efb
Arg [35] : 0000000000000000000000001e6bd36167620641cc88c846b815ada76f754e5b
Arg [36] : 0000000000000000000000001ee708a208cedacafd2c8ee9bb4dc0a662a98d91
Arg [37] : 0000000000000000000000001f427a6fcdb95a7393c58552093e10a932890fa8
Arg [38] : 0000000000000000000000001fc550e98ad3021e32c47a84019f77a0792c60b7
Arg [39] : 00000000000000000000000020c9bd4cff005082867e5928926200c872cd8b3d
Arg [40] : 000000000000000000000000219723d005e383032ea9ae43e4a72bdead0fa38b
Arg [41] : 0000000000000000000000002218fc2411dc8a588724c89b1f413750bbbf08aa
Arg [42] : 000000000000000000000000229ca6e76661463b920d9a24db8237110df78ef7
Arg [43] : 00000000000000000000000024621aa4dde07f04c57146d83468969010b7489e
Arg [44] : 0000000000000000000000002477296e9bb326506039c01ad22475133d932659
Arg [45] : 00000000000000000000000025beda673690ecd0a8a64d35ab228fc2e1c0048a
Arg [46] : 00000000000000000000000026e34bb0e82fe8d88f04ae77fee256f275497823
Arg [47] : 00000000000000000000000026fdc242eccc144971e558ff458a4ec21b75d4e8
Arg [48] : 00000000000000000000000027b19813451bcae3031cabd40b7587b26eaa7d8a
Arg [49] : 0000000000000000000000002a3381b6909512ff4a028b6ca747e4592f8384d5
Arg [50] : 0000000000000000000000002a59229fcb4c91fed9315d3864c86b29ffe6a4f0
Arg [51] : 0000000000000000000000002b47c57a4c9fc1649b43500f4c0cda6cf29be278
Arg [52] : 0000000000000000000000002b6c7e127a5f799587b0f9b4393d62b26cf85c95
Arg [53] : 0000000000000000000000002b92d12d8cc0b9af862451393925092c6c21a611
Arg [54] : 0000000000000000000000002e9487b6b1e059640d7e219f6df4a3300f9c1895
Arg [55] : 0000000000000000000000002ec1d7a211245d31aaad13ffc11a06e2b21d56e3
Arg [56] : 0000000000000000000000003140f301fa35d667de5775fa1b00ad0a4dc7eb5c
Arg [57] : 00000000000000000000000032420d4529c1f1726957770b5e7e06fe0bf59b2e
Arg [58] : 00000000000000000000000032d4135f53a85250d58b97bc5c1d2c29161a3ff7
Arg [59] : 00000000000000000000000033fe24d01539c99c50ecbabec91e05b0f802c0b9
Arg [60] : 00000000000000000000000034b1a03882de980380a597d9fda7b2c24164267b
Arg [61] : 00000000000000000000000035642de97d6376dd55240ffd35fafd2619515e54
Arg [62] : 00000000000000000000000035d448178c938ee1a2dd0c3c9da3185d433e79aa
Arg [63] : 000000000000000000000000380568bcadb2ebdd84b9d0f4e6702ee760ce6944
Arg [64] : 0000000000000000000000003858f2718eceaaff646b8f971be38d3e201ef1d6
Arg [65] : 000000000000000000000000388411e858cb11414b7eeccf26c8c6a2c23ec52f
Arg [66] : 000000000000000000000000395fbf8d53d44fb9e61684a72757ab5cfc8d83d7
Arg [67] : 00000000000000000000000039e99d18634e63df7867287e3059f39b6c6f428d
Arg [68] : 0000000000000000000000003a10728b046357eec8b491a28ad017a7e03d6c03
Arg [69] : 0000000000000000000000003abd7263af164401abeee5894858dfdb803c4710
Arg [70] : 0000000000000000000000003b3abbf96e7d4c738994607822d786c791f022ee
Arg [71] : 0000000000000000000000003b54daaa6c2470f2788cc69102ebc065ef056a94
Arg [72] : 0000000000000000000000003b91caba057858ba138dc2e00cda9f3603d77a44
Arg [73] : 0000000000000000000000003dd54285c649135127404e30a335c6667cd5709b
Arg [74] : 0000000000000000000000003e2178cf851a0e5cbf84c0ff53f820ad7ead703b
Arg [75] : 0000000000000000000000003f2c67f587bf7a42f6cb2dcde5d24d5506756748
Arg [76] : 0000000000000000000000003f56e53b068ed94c3f1d4803ff1262154d435173
Arg [77] : 0000000000000000000000003f9392f4d18f92306a3955f0e4e4705cfaa97b82
Arg [78] : 000000000000000000000000407628fc57d46e3f5a941cccff273cd583ee0c3f
Arg [79] : 000000000000000000000000425774e62423b870a22477b391c7a00bfc83bdd7
Arg [80] : 00000000000000000000000042e8f94fba0f2b63449c3042c6dc6511f694446a
Arg [81] : 000000000000000000000000442b263a0aab7c90a822a99e49d27cc8d2af20ed
Arg [82] : 00000000000000000000000044775476a3c87740f9ff7d013b601e8f3857a726
Arg [83] : 000000000000000000000000466e956ca9987b0b119330df65bf6ec4c3876e4f
Arg [84] : 0000000000000000000000004bfac3a78ef7308861e6d91da922e9d162e88b7f
Arg [85] : 0000000000000000000000004c1270592cc6a34f8371100cb3cf55961b7bd7fa
Arg [86] : 0000000000000000000000004c36e31a6006edcc58fd92fe3cb35683f78401a4
Arg [87] : 0000000000000000000000004d58d36e46cf9af14e416061fe5d0074780b4099
Arg [88] : 0000000000000000000000004de47144fcc39c72abe1a4eb40ca2a955f8c3a55
Arg [89] : 0000000000000000000000004e47e39033a19f306598167499dc070b6039aaa1
Arg [90] : 0000000000000000000000005053a1354cb45eebdd2d8342ceee71d41efa75ca
Arg [91] : 000000000000000000000000511432a0ca35ea7a3874290872333b8b719280fc
Arg [92] : 000000000000000000000000523e34d215485740a7bc604c7dc117eeca71a5c8
Arg [93] : 0000000000000000000000005498ff04a598f05b1ee3483b506d1191c7718bfd
Arg [94] : 00000000000000000000000055d554bfde1e61c72fa3c9059cdf3f739d92679a
Arg [95] : 0000000000000000000000005648af1b3c089e4226e71ecc060df2c4cb4118dc
Arg [96] : 000000000000000000000000579bd1582e0a4800df4ac5f5796261ad3597a1fc
Arg [97] : 00000000000000000000000057d621d02992672b80154243d54353b66e4483ae
Arg [98] : 00000000000000000000000058449fbc50e9219cdde892ed48c8b0cdde03b467
Arg [99] : 0000000000000000000000005878fc144c6f77d7cd4744b12bccd7f4f500af18
Arg [100] : 00000000000000000000000059f2e6b43d2beedbd1c38859c8940c80539b1a61
Arg [101] : 0000000000000000000000005a93fdde08b8e6197bb7b9e8eabcfceb52607932
Arg [102] : 0000000000000000000000005c4d73cf4f9793ff23e2ec2528f307b8f901fcfa
Arg [103] : 0000000000000000000000005ced142150f7d0ee71c2300b34d51e5dc9f8c456
Arg [104] : 0000000000000000000000005d4ce7a8e2483e35b2d8009def56bbe8a4352bb8
Arg [105] : 0000000000000000000000000000000000000000000000000000000000000064
Arg [106] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [107] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [108] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [109] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [110] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [111] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [112] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [113] : 000000000000000000000000000000000000000000000018650127cc3dc80000
Arg [114] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [115] : 000000000000000000000000000000000000000000000018650127cc3dc80000
Arg [116] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [117] : 000000000000000000000000000000000000000000000018650127cc3dc80000
Arg [118] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [119] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [120] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [121] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [122] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [123] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [124] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [125] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [126] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [127] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [128] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [129] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [130] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [131] : 000000000000000000000000000000000000000000000018650127cc3dc80000
Arg [132] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [133] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [134] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [135] : 0000000000000000000000000000000000000000000000492f037764b9580000
Arg [136] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [137] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [138] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [139] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [140] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [141] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [142] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [143] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [144] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [145] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [146] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [147] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [148] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [149] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [150] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [151] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [152] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [153] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [154] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [155] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [156] : 00000000000000000000000000000000000000000000003dccad980569500000
Arg [157] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [158] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [159] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [160] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [161] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [162] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [163] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [164] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [165] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [166] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [167] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [168] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [169] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [170] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [171] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [172] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [173] : 0000000000000000000000000000000000000000000000492f037764b9580000
Arg [174] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [175] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [176] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [177] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [178] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [179] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [180] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [181] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [182] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [183] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [184] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [185] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [186] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [187] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [188] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [189] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [190] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [191] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [192] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [193] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [194] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [195] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [196] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [197] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [198] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [199] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [200] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [201] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [202] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [203] : 00000000000000000000000000000000000000000000000d02ab486cedc00000
Arg [204] : 0000000000000000000000000000000000000000000000056bc75e2d63100000
Arg [205] : 0000000000000000000000000000000000000000000000056bc75e2d63100000


Deployed Bytecode Sourcemap

56953:1021: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;;;;;502:25:1;;;558:2;543:18;;536:34;;;;475:18;55020:279:0;;;;;;;;56212:67;;;:::i;55531:602::-;;;;;;:::i;:::-;;:::i;55307:100::-;55385:14;;-1:-1:-1;;;;;55385:14:0;55307:100;;;1877:25:1;;;1865:2;1850:18;55307:100:0;1731:177:1;10778:86:0;10825:4;10849:7;;;10778:86;;2078:14:1;;2071:22;2053:41;;2041:2;2026:18;10778:86:0;1913:187:1;55415:108:0;55497:18;;-1:-1:-1;;;55497:18:0;;-1:-1:-1;;;;;55497:18:0;55415:108;;8947:151;;;:::i;56141:63::-;;;:::i;6570:87::-;6643:6;;6570:87;;-1:-1:-1;;;;;6643:6:0;;;2251:74:1;;2239:2;2224:18;6570:87:0;2105:226:1;8785:154:0;;;:::i;8483:294::-;;;;;;:::i;:::-;;:::i;57237:734::-;;;;;;:::i;:::-;;:::i;56287:144::-;6456:13;:11;:13::i;:::-;56379:43:::1;::::0;-1:-1:-1;;;56379:43:0;;56416:4:::1;56379:43;::::0;::::1;2251: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;2224:18:1;;56379:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56345:78;::::0;;::::1;::::0;;;;;;-1:-1:-1;;;;;3314:55:1;;;56345:78:0::1;::::0;::::1;3296:74:1::0;3386:18;;;3379:34;3269:18;;56345:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;56287:144::o:0;56212:67::-;6456:13;:11;:13::i;:::-;56261:10:::1;:8;:10::i;:::-;56212:67::o:0;55531:602::-;6456: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;8947:151::-;6456:13;:11;:13::i;:::-;9021:30:::1;9048:1;9021:18;:30::i;:::-;9062:15;:28:::0;;-1:-1:-1;;;;;;9062:28:0::1;::::0;;8947:151::o;56141:63::-;6456:13;:11;:13::i;:::-;56188:8:::1;:6;:8::i;8785:154::-:0;8361:15;;8407:37;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8361:15:0;5201:10;8361:31;8339:116;;;;-1:-1:-1;;;8339:116:0;;;;;;;;:::i;:::-;-1:-1:-1;8860:15:0::1;:28:::0;;-1:-1:-1;;;;;;8860:28:0::1;::::0;;8899:32:::1;5201:10:::0;8899:18:::1;:32::i;8483:294::-:0;6456:13;:11;:13::i;:::-;8641:24:::1;::::0;;;;::::1;::::0;;;::::1;::::0;;::::1;;::::0;::::1;::::0;-1:-1:-1;;;;;8611:28:0;::::1;8603:63;;;;-1:-1:-1::0;;;8603:63:0::1;;;;;;;;:::i;:::-;-1:-1:-1::0;8677:15:0::1;:32:::0;;-1:-1:-1;;;;;;8677:32:0::1;-1:-1:-1::0;;;;;8677:32:0;::::1;::::0;;::::1;::::0;;;8725:44:::1;::::0;::::1;::::0;-1:-1:-1;;8725:44:0::1;8483:294:::0;:::o;57237:734::-;10383:19;:17;:19::i;:::-;3841:21:::1;:19;:21::i;:::-;57379: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;5182:34:1;5170:47;;5247:34;5242:2;5233:12;;5226:56;5312:34;5307:2;5298:12;;5291:56;-1:-1:-1;;;5372:2:1;5363:12;;5356:28;5409:3;5400:13;;4968: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;5201:10:0;57408:15:::3;57485:16:::0;;;:7:::3;:16;::::0;;;;;;;;57451:50;;;;::::3;::::0;;;;-1:-1:-1;;;;;57451:50:0;;::::3;::::0;;;-1:-1:-1;;;57451:50:0;;::::3;;::::0;;::::3;::::0;57546:29;;;;::::3;::::0;;;::::3;::::0;;-1:-1:-1;;;57546:29:0;;::::3;::::0;;;;57451:50;57546:29;57514:62:::3;;;;-1:-1:-1::0;;;57514:62:0::3;;;;;;;;:::i;:::-;;57595:5;:14;;;-1:-1:-1::0;;;;;57595:19:0::3;57613:1;57595:19;57616:34;;;;;;;;;;;;;;;;::::0;57587:64:::3;;;;;-1:-1:-1::0;;;57587:64:0::3;;;;;;;;:::i;:::-;-1:-1:-1::0;57681:18:0;;-1:-1:-1;;;;;57664:35:0;;::::3;:14;::::0;;::::3;:35:::0;;;-1:-1:-1;;;;;57710:16:0;::::3;57681:18;57710:16:::0;;;:7:::3;:16:::0;;;;;;:24;;;;;::::3;-1:-1:-1::0;;;57710:24:0::3;::::0;;::::3;;::::0;;57747:14:::3;:36:::0;;57710:24;;57747:14;;:36:::3;::::0;57710:24;;57747:36:::3;;:::i;:::-;::::0;;::::3;::::0;;;::::3;-1:-1:-1::0;;;;;57747:36:0;;::::3;;::::0;;::::3;::::0;;::::3;;;::::0;;;57827:18;;57790:56:::3;::::0;-1:-1:-1;;;57790:56:0;;-1:-1:-1;;;;;5910:55:1;;;57790:56:0::3;::::0;::::3;5892:74:1::0;6002:47;;;;5982:18;;;5975:75;57797:10:0::3;57790:27;::::0;-1:-1:-1;57790:27:0::3;::::0;5865:18:1;;57790:56:0::3;;;;;;;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;57884:7;-1:-1:-1::0;;;;;57864:41:0::3;;57893:11;;57864:41;;;;;;;:::i;:::-;;;;;;;;57944:18:::0;;57921:42:::3;::::0;-1:-1:-1;;;;;6620:47:1;;;6602:66;;-1:-1:-1;;;;;57921:42:0;::::3;::::0;::::3;::::0;6590:2:1;6575:18;57921:42:0::3;;;;;;;57397:574;;3873:1:::2;3885:20:::1;3279:1:::0;4405:22;;4222:213;3885:20:::1;57237:734:::0;;:::o;25525:195::-;25582:7;-1:-1:-1;;;;;25610:26:0;;;25602:78;;;;-1:-1:-1;;;25602:78:0;;6881:2:1;25602:78:0;;;6863:21:1;6920:2;6900:18;;;6893:30;6959:34;6939:18;;;6932:62;7030:9;7010:18;;;7003:37;7057:19;;25602:78:0;6679:403:1;25602:78:0;-1:-1:-1;25706:5:0;25525:195::o;6735:132::-;6643:6;;-1:-1:-1;;;;;6643:6:0;5201:10;6799:23;6791:68;;;;-1:-1:-1;;;6791:68:0;;7289:2:1;6791:68:0;;;7271:21:1;;;7308:18;;;7301:30;7367:34;7347:18;;;7340:62;7419:18;;6791:68:0;7087:356:1;11633:120:0;10642:16;:14;:16::i;:::-;11702:5:::1;11692:15:::0;;-1:-1:-1;;11692:15:0::1;::::0;;11723:22:::1;5201:10:::0;11732:12:::1;11723:22;::::0;-1:-1:-1;;;;;2269:55:1;;;2251:74;;2239:2;2224:18;11723:22:0::1;;;;;;;11633: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;1877:25:1;;1865:2;1850:18;;1731:177;56825:33:0;;;;;;;;56439:427;;:::o;7837:191::-;7930:6;;;-1:-1:-1;;;;;7947:17:0;;;-1:-1:-1;;;;;;7947:17:0;;;;;;;7980:40;;7930:6;;;7947:17;7930:6;;7980:40;;7911:16;;7980:40;7900:128;7837:191;:::o;11374:118::-;10383:19;:17;:19::i;:::-;11434:7:::1;:14:::0;;-1:-1:-1;;11434:14:0::1;11444:4;11434:14;::::0;;11464:20:::1;11471:12;5201:10:::0;;5121:98;10937:108;10825:4;10849:7;;;11007:9;10999:38;;;;-1:-1:-1;;;10999:38:0;;7650:2:1;10999:38:0;;;7632:21:1;7689:2;7669:18;;;7662:30;7728:18;7708;;;7701:46;7764:18;;10999:38:0;7448:340:1;3921:293:0;3323:1;4055:7;;:19;4047:63;;;;-1:-1:-1;;;4047:63:0;;7995:2:1;4047:63:0;;;7977:21:1;8034:2;8014:18;;;8007:30;8073:33;8053:18;;;8046:61;8124:18;;4047:63:0;7793:355:1;4047:63:0;3323:1;4188:7;:18;3921:293::o;11122:108::-;10825:4;10849:7;;;11181:41;;;;-1:-1:-1;;;11181:41:0;;8355:2:1;11181:41:0;;;8337:21:1;8394:2;8374:18;;;8367:30;8433:22;8413:18;;;8406:50;8473:18;;11181:41:0;8153:344:1;14:309;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;181:9;168:23;-1:-1:-1;;;;;224:5:1;220:54;213:5;210:65;200:93;;289:1;286;279:12;200:93;312:5;14:309;-1:-1:-1;;;14:309:1:o;581:367::-;644:8;654:6;708:3;701:4;693:6;689:17;685:27;675:55;;726:1;723;716:12;675:55;-1:-1:-1;749:20:1;;792:18;781:30;;778:50;;;824:1;821;814:12;778:50;861:4;853:6;849:17;837:29;;921:3;914:4;904:6;901:1;897:14;889:6;885:27;881:38;878:47;875:67;;;938:1;935;928:12;875:67;581:367;;;;;:::o;953:773::-;1075:6;1083;1091;1099;1152:2;1140:9;1131:7;1127:23;1123:32;1120:52;;;1168:1;1165;1158:12;1120:52;1208:9;1195:23;1237:18;1278:2;1270:6;1267:14;1264:34;;;1294:1;1291;1284:12;1264:34;1333:70;1395:7;1386:6;1375:9;1371:22;1333:70;:::i;:::-;1422:8;;-1:-1:-1;1307:96:1;-1:-1:-1;1510:2:1;1495:18;;1482:32;;-1:-1:-1;1526:16:1;;;1523:36;;;1555:1;1552;1545:12;1523:36;;1594:72;1658:7;1647:8;1636:9;1632:24;1594:72;:::i;:::-;953:773;;;;-1:-1:-1;1685:8:1;-1:-1:-1;;;;953:773:1:o;2336:592::-;2407:6;2415;2468:2;2456:9;2447:7;2443:23;2439:32;2436:52;;;2484:1;2481;2474:12;2436:52;2524:9;2511:23;2553:18;2594:2;2586:6;2583:14;2580:34;;;2610:1;2607;2600:12;2580:34;2648:6;2637:9;2633:22;2623:32;;2693:7;2686:4;2682:2;2678:13;2674:27;2664:55;;2715:1;2712;2705:12;2664:55;2755:2;2742:16;2781:2;2773:6;2770:14;2767:34;;;2797:1;2794;2787:12;2767:34;2842:7;2837:2;2828:6;2824:2;2820:15;2816:24;2813:37;2810:57;;;2863:1;2860;2853:12;2810:57;2894:2;2886:11;;;;;2916:6;;-1:-1:-1;2336:592:1;;-1:-1:-1;;;;2336:592:1:o;2933:184::-;3003:6;3056:2;3044:9;3035:7;3031:23;3027:32;3024:52;;;3072:1;3069;3062:12;3024:52;-1:-1:-1;3095:16:1;;2933:184;-1:-1:-1;2933:184:1:o;3424:277::-;3491:6;3544:2;3532:9;3523:7;3519:23;3515:32;3512:52;;;3560:1;3557;3550:12;3512:52;3592:9;3586:16;3645:5;3638:13;3631:21;3624:5;3621:32;3611:60;;3667:1;3664;3657:12;3706:250;3791:1;3801:113;3815:6;3812:1;3809:13;3801:113;;;3891:11;;;3885:18;3872:11;;;3865:39;3837:2;3830:10;3801:113;;;-1:-1:-1;;3948:1:1;3930:16;;3923:27;3706:250::o;3961:396::-;4110:2;4099:9;4092:21;4073:4;4142:6;4136:13;4185:6;4180:2;4169:9;4165:18;4158:34;4201:79;4273:6;4268:2;4257:9;4253:18;4248:2;4240:6;4236:15;4201:79;:::i;:::-;4341:2;4320:15;-1:-1:-1;;4316:29:1;4301:45;;;;4348:2;4297:54;;3961:396;-1:-1:-1;;3961:396:1:o;4362:127::-;4423:10;4418:3;4414:20;4411:1;4404:31;4454:4;4451:1;4444:15;4478:4;4475:1;4468:15;4494:127;4555:10;4550:3;4546:20;4543:1;4536:31;4586:4;4583:1;4576:15;4610:4;4607:1;4600:15;4626:135;4665:3;4686:17;;;4683:43;;4706:18;;:::i;:::-;-1:-1:-1;4753:1:1;4742:13;;4626:135::o;4766:197::-;-1:-1:-1;;;;;4888:10:1;;;4900;;;4884:27;;4923:11;;;4920:37;;;4937:18;;:::i;:::-;4920:37;4766:197;;;;:::o;5424:289::-;5555:3;5593:6;5587:13;5609:66;5668:6;5663:3;5656:4;5648:6;5644:17;5609:66;:::i;:::-;5691:16;;;;;5424:289;-1:-1:-1;;5424:289:1:o;6061:390::-;6220:2;6209:9;6202:21;6259:6;6254:2;6243:9;6239:18;6232:34;6316:6;6308;6303:2;6292:9;6288:18;6275:48;6372:1;6343:22;;;6367:2;6339:31;;;6332:42;;;;6435:2;6414:15;;;-1:-1:-1;;6410:29:1;6395:45;6391:54;;6061:390;-1:-1:-1;6061:390:1:o

Swarm Source

ipfs://55617eebdc560f31082875d77c9fb04ac0eeb547a1d95028aff4ecc99359da0a

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.