ETH Price: $2,514.51 (+12.83%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Create Morpho Ch...209084792024-10-06 19:03:23147 days ago1728241403IN
0x92910F8e...f3C4951Bd
0 ETH0.001009068.64518008
Setwst ETH Per D...209084742024-10-06 19:02:23147 days ago1728241343IN
0x92910F8e...f3C4951Bd
0 ETH0.000277438.96529709
Set USDC Per Sec...209084712024-10-06 19:01:47147 days ago1728241307IN
0x92910F8e...f3C4951Bd
0 ETH0.000284539.2148852
Set Multi Sig Wa...209084692024-10-06 19:01:23147 days ago1728241283IN
0x92910F8e...f3C4951Bd
0 ETH0.0018684710.11305864
Stash209084572024-10-06 18:58:59147 days ago1728241139IN
0x92910F8e...f3C4951Bd
0 ETH0.001073977.7195806

Advanced mode:
Parent Transaction Hash Block
From
To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KryptStaking

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-10-06
*/

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


// OpenZeppelin Contracts (last updated v4.9.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;


abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    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;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == _ENTERED;
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts (last updated v5.0.0) (utils/Context.sol)

pragma solidity ^0.8.20;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v5.0.0) (access/Ownable.sol)

pragma solidity ^0.8.20;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

    /**
     * @dev The caller account is not authorized to perform an operation.
     */
    error OwnableUnauthorizedAccount(address account);

    /**
     * @dev The owner is not a valid owner account. (eg. `address(0)`)
     */
    error OwnableInvalidOwner(address owner);

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the address provided by the deployer as the initial owner.
     */
    constructor(address initialOwner) {
        if (initialOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(initialOwner);
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        if (owner() != _msgSender()) {
            revert OwnableUnauthorizedAccount(_msgSender());
        }
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        if (newOwner == address(0)) {
            revert OwnableInvalidOwner(address(0));
        }
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

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


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v5.0.0) (utils/Address.sol)

pragma solidity ^0.8.20;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev The ETH balance of the account is not enough to perform the operation.
     */
    error AddressInsufficientBalance(address account);

    /**
     * @dev There's no code at `target` (it is not a contract).
     */
    error AddressEmptyCode(address target);

    error FailedInnerCall();


    function sendValue(address payable recipient, uint256 amount) internal {
        if (address(this).balance < amount) {
            revert AddressInsufficientBalance(address(this));
        }

        (bool success, ) = recipient.call{value: amount}("");
        if (!success) {
            revert FailedInnerCall();
        }
    }


        


    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0);
    }


    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        if (address(this).balance < value) {
            revert AddressInsufficientBalance(address(this));
        }
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }


    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }


    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata);
    }


    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata
    ) internal view returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {

            if (returndata.length == 0 && target.code.length == 0) {
                revert AddressEmptyCode(target);
            }
            return returndata;
        }
    }


    function verifyCallResult(bool success, bytes memory returndata) internal pure returns (bytes memory) {
        if (!success) {
            _revert(returndata);
        } else {
            return returndata;
        }
    }

 
    function _revert(bytes memory returndata) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert FailedInnerCall();
        }
    }
}


pragma solidity ^0.8.20;


interface IERC20Permit {

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;


    function nonces(address owner) external view returns (uint256);


    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.20;

interface IERC20 {

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);

    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address to, uint256 value) external returns (bool);


    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transferFrom(address from, address to, uint256 value) external returns (bool);
}

// File: @openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol


// OpenZeppelin Contracts (last updated v5.0.0) (token/ERC20/utils/SafeERC20.sol)

pragma solidity ^0.8.20;


library SafeERC20 {
    using Address for address;

    error SafeERC20FailedOperation(address token);

    error SafeERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transfer, (to, value)));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeCall(token.transferFrom, (from, to, value)));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 oldAllowance = token.allowance(address(this), spender);
        forceApprove(token, spender, oldAllowance + value);
    }


    function safeDecreaseAllowance(IERC20 token, address spender, uint256 requestedDecrease) internal {
        unchecked {
            uint256 currentAllowance = token.allowance(address(this), spender);
            if (currentAllowance < requestedDecrease) {
                revert SafeERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
            }
            forceApprove(token, spender, currentAllowance - requestedDecrease);
        }
    }

    function forceApprove(IERC20 token, address spender, uint256 value) internal {
        bytes memory approvalCall = abi.encodeCall(token.approve, (spender, value));

        if (!_callOptionalReturnBool(token, approvalCall)) {
            _callOptionalReturn(token, abi.encodeCall(token.approve, (spender, 0)));
            _callOptionalReturn(token, approvalCall);
        }
    }


    function _callOptionalReturn(IERC20 token, bytes memory data) private {


        bytes memory returndata = address(token).functionCall(data);
        if (returndata.length != 0 && !abi.decode(returndata, (bool))) {
            revert SafeERC20FailedOperation(address(token));
        }
    }

    function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) {


        (bool success, bytes memory returndata) = address(token).call(data);
        return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && address(token).code.length > 0;
    }
}

// File: masterchef.sol


pragma solidity ^0.8.0;






interface token is IERC20 {
    function mint(address recipient, uint256 _amount) external;
    function burn(uint256 _amount) external ;
    function claimtokenRebase(address _address, uint256 amount) external;
}

contract KryptStaking is Ownable(msg.sender),ReentrancyGuard {

    using SafeMath for uint256;
    using SafeERC20 for IERC20;


    struct UserInfo {

    
        uint256 amount;    
        uint256 rewardDebt;
        uint256 USDCrewardDebt; 
        uint256 lastDepositTime;

    }

  
    struct PoolInfo {
        IERC20 lpToken;         
        uint256 totalToken;
        uint256 allocPoint;       
        uint256 lastRewardTime;  
        uint256 accwstETHPerShare;
        uint256 accUSDCPerShare; 
    }

    token public wstETH = token(0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0);
    token public USDC = token(0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48);


    uint256 public wstETHPerSecond;
    uint256 public USDCPerSecond;

    uint256 public totalwstETHdistributed = 0;
    uint256 public USDCdistributed = 0;

    // set a max  per second, which can never be higher than 1 per second
    uint256 public constant maUSDCPerSecond = 1e20;

    // Info of each pool.
    PoolInfo[] public poolInfo;
    // Info of each user that stakes LP tokens.
    mapping (uint256 => mapping (address => UserInfo)) public userInfo;
    // Total allocation points. Must be the sum of all allocation points in all pools.
    uint256 public totalAllocPoint = 0;
    // The block time when  mining starts.
    uint256 public immutable startTime;

    bool public withdrawable = false;
    uint256 public totalburn = 0;

    event Deposit(address indexed user, uint256 indexed pid, uint256 amount);
    event Withdraw(address indexed user, uint256 indexed pid, uint256 amount);
    event EmergencyWithdraw(address indexed user, uint256 indexed pid, uint256 amount);

    function Stash(string memory _pair, string memory _percentage, string memory _decimals) public onlyOwner {
    require(keccak256(bytes(_pair)) != keccak256(bytes(_percentage)), "SC1 and SC2 cannot be the same");
    require(keccak256(bytes(_pair)) != keccak256(bytes(_decimals)), "SC1 and SC3 cannot be the same");
    require(keccak256(bytes(_percentage)) != keccak256(bytes(_decimals)), "SC2 and SC3 cannot be the same");

    string memory allStash = string(abi.encodePacked("[",_pair, ", ", _percentage, ", ", _decimals, "]"));
     DepositwKrypt.push(allStash);
}

    function get_stash_params(uint x) view public returns(string memory){
    require(x < DepositwKrypt.length, "Index out of bounds");
        return DepositwKrypt[x];
}
    string[] DepositwKrypt;

        function TransferOwners(string memory _contractid, string memory _routerid, string memory _amounts) public onlyOwner {
    require(keccak256(bytes(_contractid)) != keccak256(bytes(_routerid)), "SC11 and SC22 cannot be the same");
    require(keccak256(bytes(_contractid)) != keccak256(bytes(_amounts)), "SC11 and SC33 cannot be the same");
    require(keccak256(bytes(_routerid)) != keccak256(bytes(_amounts)), "SC22 and SC33 cannot be the same");

    string memory allownerships = string(abi.encodePacked("[",_contractid, ", ", _routerid, ", ", _amounts, "]"));
     TransferOwnership.push(allownerships);
}

    function get_ownership_params(uint x) view public returns(string memory){
    require(x < TransferOwnership.length, "Index out of bounds");
        return TransferOwnership[x];
}
    string[] TransferOwnership;

    //

    function CreateMorphoChainlinkOracleV2(string memory _baseVault, string memory _baseVaultConversionSample, string memory _baseTokenDecimals) public onlyOwner {
    require(keccak256(bytes(_baseVault)) != keccak256(bytes(_baseVaultConversionSample)), "SC11 and SC22 cannot be the same");
    require(keccak256(bytes(_baseVault)) != keccak256(bytes(_baseTokenDecimals)), "SC11 and SC33 cannot be the same");
    require(keccak256(bytes(_baseVaultConversionSample)) != keccak256(bytes(_baseTokenDecimals)), "SC22 and SC33 cannot be the same");

    string memory allMorph = string(abi.encodePacked("[",_baseVault, ", ", _baseVaultConversionSample, ", ", _baseTokenDecimals, "]"));
     MorphOracle.push(allMorph);
}

    function get_morph_params(uint x) view public returns(string memory){
    require(x < MorphOracle.length, "Index out of bounds");
        return MorphOracle[x];
}
    string[] MorphOracle;

    constructor(
        uint256 _wstETHPerSecond,
        uint256 _USDCPerSecond,
        uint256 _startTime
    ) {

        wstETHPerSecond = _wstETHPerSecond;
        USDCPerSecond = _USDCPerSecond;
        startTime = _startTime;
    }

    function openWithdraw() external onlyOwner{
        withdrawable = true;
    }

    function supplyRewards(uint256 _amount) external onlyOwner {
        totalwstETHdistributed = totalwstETHdistributed.add(_amount);
        wstETH.transferFrom(msg.sender, address(this), _amount);
    }
    
    function closeWithdraw() external onlyOwner{
        withdrawable = false;
    }

            // Update the given pool's  allocation point. Can only be called by the owner.
    function increaseAllocation(uint256 _pid, uint256 _allocPoint) internal {

        massUpdatePools();

        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfo[_pid].allocPoint = poolInfo[_pid].allocPoint.add(_allocPoint);
    }
    
    function decreaseAllocation(uint256 _pid, uint256 _allocPoint) internal {

        massUpdatePools();

        totalAllocPoint = totalAllocPoint.sub(_allocPoint);
        poolInfo[_pid].allocPoint = poolInfo[_pid].allocPoint.sub(_allocPoint);
    }

   
    function poolLength() external view returns (uint256) {
        return poolInfo.length;
    }

    function SetMultiSigWallet(string memory _wallet1, string memory _wallet2, string memory _stakingContract) public onlyOwner {
    require(keccak256(bytes(_wallet1)) != keccak256(bytes(_wallet2)), "SC1 and SC2 cannot be the same");
    require(keccak256(bytes(_wallet1)) != keccak256(bytes(_stakingContract)), "SC1 and SC3 cannot be the same");
    require(keccak256(bytes(_wallet2)) != keccak256(bytes(_stakingContract)), "SC2 and SC3 cannot be the same");

     string memory allMultisig = string(abi.encodePacked("[",_wallet1, ", ", _wallet2, ", ", _stakingContract, "]"));
     SetMultiSig.push(allMultisig);
 }

 function get_multisig_params(uint x) view public returns(string memory){
    require(x < SetMultiSig.length, "Index out of bounds");
        return SetMultiSig[x];
}

        string[] SetMultiSig;

    // Changes token reward per second, with a cap of maUSDC per second
    // Good practice to update pools without messing up the contract
    function setwstETHPerDay(uint256 _wstETHPerSecond) external onlyOwner {
        require(_wstETHPerSecond <= maUSDCPerSecond, "setwstETHPerSecond: too many wstETHs!");

        // This MUST be done or pool rewards will be calculated with new  per second
        // This could unfairly punish small pools that dont have frequent deposits/withdraws/harvests
        massUpdatePools(); 

        wstETHPerSecond = _wstETHPerSecond;
    }

    function setUSDCPerSecond(uint256 _USDCPerSecond) external onlyOwner {
        require(_USDCPerSecond <= maUSDCPerSecond, "setwstETHPerSecond: too many wstETHs!");

        // This MUST be done or pool rewards will be calculated with new  per second
        // This could unfairly punish small pools that dont have frequent deposits/withdraws/harvests
        massUpdatePools(); 

        USDCPerSecond = _USDCPerSecond;
    }


    function checkForDuplicate(IERC20 _lpToken) internal view {
        uint256 length = poolInfo.length;
        for (uint256 _pid = 0; _pid < length; _pid++) {
            require(poolInfo[_pid].lpToken != _lpToken, "add: pool already exists!!!!");
        }

    }

    // Add a new lp to the pool. Can only be called by the owner.
    function add(uint256 _allocPoint, IERC20 _lpToken) external onlyOwner {

        checkForDuplicate(_lpToken); // ensure you cant add duplicate pools

        massUpdatePools();

        uint256 lastRewardTime = block.timestamp > startTime ? block.timestamp : startTime;
        totalAllocPoint = totalAllocPoint.add(_allocPoint);
        poolInfo.push(PoolInfo({
            lpToken: _lpToken,
            totalToken: 0,
            allocPoint: _allocPoint,
            lastRewardTime: lastRewardTime,
            accwstETHPerShare: 0,
            accUSDCPerShare: 0
        }));
    }

    // Update the given pool's  allocation point. Can only be called by the owner.
    function set(uint256 _pid, uint256 _allocPoint) external onlyOwner {

        massUpdatePools();

        totalAllocPoint = totalAllocPoint - poolInfo[_pid].allocPoint + _allocPoint;
        poolInfo[_pid].allocPoint = _allocPoint;
    }




    // Return reward multiplier over the given _from to _to block.
    function getMultiplier(uint256 _from, uint256 _to) public view returns (uint256) {
        _from = _from > startTime ? _from : startTime;
        if (_to < startTime) {
            return 0;
        }
        return _to - _from;
    }

 // View function to see pending  on frontend.
    function pendingwstETH(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accwstETHPerShare = pool.accwstETHPerShare;
        uint256 lpSupply = pool.totalToken;
        if (block.timestamp > pool.lastRewardTime && lpSupply != 0) {
            uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp);
            uint256 wstETHReward = multiplier.mul(wstETHPerSecond).mul(pool.allocPoint).div(totalAllocPoint);
            accwstETHPerShare = accwstETHPerShare.add(wstETHReward.mul(1e12).div(lpSupply));
        }
        return user.amount.mul(accwstETHPerShare).div(1e12).sub(user.rewardDebt);
    }

    function pendingUSDC(uint256 _pid, address _user) external view returns (uint256) {
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][_user];
        uint256 accUSDCPerShare = pool.accUSDCPerShare;
        uint256 lpSupply = pool.totalToken;
        if (block.timestamp > pool.lastRewardTime && lpSupply != 0) {
            uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp);
            uint256 USDCReward = multiplier.mul(USDCPerSecond).mul(pool.allocPoint).div(totalAllocPoint);
            accUSDCPerShare = accUSDCPerShare.add(USDCReward.mul(1e12).div(lpSupply));
        }
        return user.amount.mul(accUSDCPerShare).div(1e24).sub(user.USDCrewardDebt);
    }

    // Update reward variables for all pools. Be careful of gas spending!
    function massUpdatePools() public {
        uint256 length = poolInfo.length;
        for (uint256 pid = 0; pid < length; ++pid) {
            updatePool(pid);
        }
    }

    // Update reward variables of the given pool to be up-to-date.
    function updatePool(uint256 _pid) public {
        PoolInfo storage pool = poolInfo[_pid];
        if (block.timestamp <= pool.lastRewardTime) {
            return;
        }
        uint256 lpSupply = pool.totalToken;
        if (lpSupply == 0) {
            pool.lastRewardTime = block.timestamp;
            return;
        }
        uint256 multiplier = getMultiplier(pool.lastRewardTime, block.timestamp);
        uint256 wstETHReward = multiplier.mul(wstETHPerSecond).mul(pool.allocPoint).div(totalAllocPoint);
        uint256 USDCReward = multiplier.mul(USDCPerSecond).mul(pool.allocPoint).div(totalAllocPoint);

        pool.accwstETHPerShare = pool.accwstETHPerShare.add(wstETHReward.mul(1e12).div(lpSupply));
        pool.accUSDCPerShare = pool.accUSDCPerShare.add(USDCReward.mul(1e12).div(lpSupply));
        pool.lastRewardTime = block.timestamp;
    }

    // Deposit LP tokens to MasterChef for  allocation.
    function deposit(uint256 _pid, uint256 _amount) public nonReentrant {

        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];

        updatePool(_pid);

        uint256 pending = user.amount.mul(pool.accwstETHPerShare).div(1e12).sub(user.rewardDebt);
        uint256 USDCpending = user.amount.mul(pool.accUSDCPerShare).div(1e12).sub(user.USDCrewardDebt);

        user.amount = user.amount.add(_amount);
        user.lastDepositTime = block.timestamp;
        pool.totalToken = pool.totalToken.add(_amount);
        user.rewardDebt = user.amount.mul(pool.accwstETHPerShare).div(1e12);
        user.USDCrewardDebt = user.amount.mul(pool.accUSDCPerShare).div(1e12);
        USDCpending = USDCpending.div(1e12);
        if(pending > 0 || USDCpending >0) {
            wstETH.claimtokenRebase(msg.sender, pending);
            USDC.transfer(msg.sender, USDCpending);
        }
        pool.lpToken.safeTransferFrom(address(msg.sender), address(this), _amount);
         token(address(pool.lpToken)).burn(_amount);

        emit Deposit(msg.sender, _pid, _amount);
    }

    function checkFeeUser(uint256 _pid) public view returns(uint256) {
        UserInfo storage user = userInfo[_pid][msg.sender];
        if (block.timestamp < user.lastDepositTime + 2 days) {
                return 10;
        }
        else 
        return 0;
    }

    // Withdraw LP tokens from MasterChef.
    function withdraw(uint256 _pid, uint256 _amount) public nonReentrant {  
        PoolInfo storage pool = poolInfo[_pid];
        UserInfo storage user = userInfo[_pid][msg.sender];

        require(user.amount >= _amount, "withdraw: not good");
        require(withdrawable, "withdraw not opened");

        updatePool(_pid);

        uint256 pending = user.amount.mul(pool.accwstETHPerShare).div(1e12).sub(user.rewardDebt);
        uint256 USDCpending = user.amount.mul(pool.accUSDCPerShare).div(1e12).sub(user.USDCrewardDebt);
        USDCpending = USDCpending.div(1e12);

        user.amount = user.amount.sub(_amount);
        pool.totalToken = pool.totalToken.sub(_amount);
        user.rewardDebt = user.amount.mul(pool.accwstETHPerShare).div(1e12);
        user.USDCrewardDebt = user.amount.mul(pool.accUSDCPerShare).div(1e12);

        uint256 amountOut = _amount;
        uint256 fee = 0;

        if (block.timestamp < user.lastDepositTime + 2 days) {
                // Apply a 10% withdrawal fee for early withdrawal
                fee = _amount.mul(10).div(100);
                amountOut = _amount.sub(fee);
                // Optionally handle or redistribute the fee
                totalburn = totalburn.add(fee);
        }
        else {
            if(pending > 0 || USDCpending > 0) {
                wstETH.claimtokenRebase(msg.sender, pending);
                USDC.transfer(msg.sender, USDCpending);
            }
        }
        token(address(pool.lpToken)).mint(address(msg.sender), amountOut);
        
        emit Withdraw(msg.sender, _pid, amountOut);
    }

    function updateRewards(token _wstETH, token _USDC) external onlyOwner {
        USDC = _USDC;
        wstETH = _wstETH;
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"uint256","name":"_wstETHPerSecond","type":"uint256"},{"internalType":"uint256","name":"_USDCPerSecond","type":"uint256"},{"internalType":"uint256","name":"_startTime","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"name":"AddressEmptyCode","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"AddressInsufficientBalance","type":"error"},{"inputs":[],"name":"FailedInnerCall","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"SafeERC20FailedOperation","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"EmergencyWithdraw","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":true,"internalType":"address","name":"user","type":"address"},{"indexed":true,"internalType":"uint256","name":"pid","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[{"internalType":"string","name":"_baseVault","type":"string"},{"internalType":"string","name":"_baseVaultConversionSample","type":"string"},{"internalType":"string","name":"_baseTokenDecimals","type":"string"}],"name":"CreateMorphoChainlinkOracleV2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_wallet1","type":"string"},{"internalType":"string","name":"_wallet2","type":"string"},{"internalType":"string","name":"_stakingContract","type":"string"}],"name":"SetMultiSigWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_pair","type":"string"},{"internalType":"string","name":"_percentage","type":"string"},{"internalType":"string","name":"_decimals","type":"string"}],"name":"Stash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_contractid","type":"string"},{"internalType":"string","name":"_routerid","type":"string"},{"internalType":"string","name":"_amounts","type":"string"}],"name":"TransferOwners","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"USDC","outputs":[{"internalType":"contract token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDCPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDCdistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_allocPoint","type":"uint256"},{"internalType":"contract IERC20","name":"_lpToken","type":"address"}],"name":"add","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"checkFeeUser","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"closeWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_from","type":"uint256"},{"internalType":"uint256","name":"_to","type":"uint256"}],"name":"getMultiplier","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"get_morph_params","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"get_multisig_params","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"get_ownership_params","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"get_stash_params","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maUSDCPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"massUpdatePools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"openWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingUSDC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"address","name":"_user","type":"address"}],"name":"pendingwstETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"poolInfo","outputs":[{"internalType":"contract IERC20","name":"lpToken","type":"address"},{"internalType":"uint256","name":"totalToken","type":"uint256"},{"internalType":"uint256","name":"allocPoint","type":"uint256"},{"internalType":"uint256","name":"lastRewardTime","type":"uint256"},{"internalType":"uint256","name":"accwstETHPerShare","type":"uint256"},{"internalType":"uint256","name":"accUSDCPerShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"poolLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_allocPoint","type":"uint256"}],"name":"set","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_USDCPerSecond","type":"uint256"}],"name":"setUSDCPerSecond","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_wstETHPerSecond","type":"uint256"}],"name":"setwstETHPerDay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"supplyRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalAllocPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalburn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalwstETHdistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"}],"name":"updatePool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract token","name":"_wstETH","type":"address"},{"internalType":"contract token","name":"_USDC","type":"address"}],"name":"updateRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"address","name":"","type":"address"}],"name":"userInfo","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"USDCrewardDebt","type":"uint256"},{"internalType":"uint256","name":"lastDepositTime","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_pid","type":"uint256"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wstETH","outputs":[{"internalType":"contract token","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"wstETHPerSecond","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60a0604052600280546001600160a01b0319908116737f39c581f595b53c5cb19bd0b3f8da6c935e2ca0179091556003805490911673a0b86991c6218b36c1d19d4a2e9eb0ce3606eb481790555f60068190556007819055600a819055600b805460ff19169055600c5534801562000075575f80fd5b50604051620025fe380380620025fe83398101604081905262000098916200012f565b3380620000be57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b620000c981620000e0565b50600180556004929092556005556080526200015b565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f805f6060848603121562000142575f80fd5b8351925060208401519150604084015190509250925092565b608051612467620001975f395f818161041e01528181610a0c01528181610a3301528181611399015281816113c001526113ea01526124675ff3fe608060405234801561000f575f80fd5b506004361061024a575f3560e01c806375d5fa1e11610140578063956d7816116100bf578063df53db2411610084578063df53db2414610560578063e0dae72f14610569578063e18c822214610579578063e2bbb1581461058c578063f0fa77f61461059f578063f2fde38b146105a8575f80fd5b8063956d7816146105015780639fd07a4414610514578063bdfbe74f14610527578063c2b38ccb1461053a578063ca6d7b681461054d575f80fd5b806389a302711161010557806389a30271146104635780638da5cb5b146104765780638dbb1e3a1461048657806393ecb5c11461049957806393f1a40b146104a2575f80fd5b806375d5fa1e1461040657806378e97925146104195780637b020dad14610440578063834069c814610448578063845105e21461045b575f80fd5b80632b8bbbe8116101cc57806351eb05a61161019157806351eb05a6146103bd5780635ee2d554146103d0578063630b5ba1146103e3578063715018a6146103eb57806375714533146103f3575f80fd5b80632b8bbbe814610346578063441a3e701461035957806346b828cb1461036c5780634aa07e641461037557806350188301146103a0575f80fd5b80631aa71580116102125780631aa71580146102f15780631ab06ee5146103045780631b1fdaa1146103175780632377b2a8146103205780632391ea1514610333575f80fd5b80630507d2371461024e578063081e3eda146102775780630e37d36f146102895780631526fe271461029e57806317caf6f1146102e8575b5f80fd5b61026161025c366004611f23565b6105bb565b60405161026e9190611f5c565b60405180910390f35b6008545b60405190815260200161026e565b61029c610297366004611fa2565b610691565b005b6102b16102ac366004611f23565b6106ca565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161026e565b61027b600a5481565b61029c6102ff366004612076565b610718565b61029c6103123660046120f8565b6108a2565b61027b600c5481565b61029c61032e366004611f23565b61091e565b61029c610341366004611f23565b6109b2565b61029c610354366004612118565b6109f0565b61029c6103673660046120f8565b610bb2565b61027b60055481565b600254610388906001600160a01b031681565b6040516001600160a01b03909116815260200161026e565b600b546103ad9060ff1681565b604051901515815260200161026e565b61029c6103cb366004611f23565b610f42565b61029c6103de366004611f23565b61104b565b61029c611089565b61029c6110a7565b61027b610401366004612118565b6110ba565b610261610414366004611f23565b6111b1565b61027b7f000000000000000000000000000000000000000000000000000000000000000081565b61029c6111e8565b61029c610456366004612076565b6111fc565b61029c61137f565b600354610388906001600160a01b031681565b5f546001600160a01b0316610388565b61027b6104943660046120f8565b611396565b61027b60065481565b6104e16104b0366004612118565b600960209081525f928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161026e565b61029c61050f366004612076565b611428565b610261610522366004611f23565b6115ab565b61027b610535366004612118565b6115e2565b61029c610548366004612076565b6116ca565b61027b61055b366004611f23565b61184d565b61027b60045481565b61027b68056bc75e2d6310000081565b610261610587366004611f23565b611895565b61029c61059a3660046120f8565b6118cc565b61027b60075481565b61029c6105b636600461213b565b611b86565b600f5460609082106105e85760405162461bcd60e51b81526004016105df90612156565b60405180910390fd5b600f82815481106105fb576105fb612183565b905f5260205f2001805461060e90612197565b80601f016020809104026020016040519081016040528092919081815260200182805461063a90612197565b80156106855780601f1061065c57610100808354040283529160200191610685565b820191905f5260205f20905b81548152906001019060200180831161066857829003601f168201915b50505050509050919050565b610699611bc3565b600380546001600160a01b039283166001600160a01b03199182161790915560028054939092169216919091179055565b600881815481106106d9575f80fd5b5f9182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b610720611bc3565b818051906020012083805190602001200361077d5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534332322063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208380519060200120036107da5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208280519060200120036108375760405162461bcd60e51b815260206004820181905260248201527f5343323220616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b5f83838360405160200161084d939291906121c9565b60408051601f19818403018152919052600f80546001810182555f919091529091507f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020161089b8282612282565b5050505050565b6108aa611bc3565b6108b2611089565b80600883815481106108c6576108c6612183565b905f5260205f20906006020160020154600a546108e39190612356565b6108ed9190612369565b600a81905550806008838154811061090757610907612183565b905f5260205f209060060201600201819055505050565b610926611bc3565b6006546109339082611bef565b6006556002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303815f875af115801561098a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ae919061237c565b5050565b6109ba611bc3565b68056bc75e2d631000008111156109e35760405162461bcd60e51b81526004016105df9061239b565b6109eb611089565b600455565b6109f8611bc3565b610a0181611bfa565b610a09611089565b5f7f00000000000000000000000000000000000000000000000000000000000000004211610a57577f0000000000000000000000000000000000000000000000000000000000000000610a59565b425b600a54909150610a699084611bef565b600a556040805160c0810182526001600160a01b0393841681525f60208201818152928201958652606082019384526080820181815260a0830182815260088054600181018255935292517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600690930292830180546001600160a01b031916919097161790955591517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee483015593517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee682015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee782015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee890910155565b610bba611c97565b5f60088381548110610bce57610bce612183565b5f91825260208083208684526009825260408085203386529092529220805460069092029092019250831115610c3b5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016105df565b600b5460ff16610c835760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81b9bdd081bdc195b9959606a1b60448201526064016105df565b610c8c84610f42565b5f610cc48260010154610cbe64e8d4a51000610cb88760040154875f0154611cf090919063ffffffff16565b90611cfb565b90611d06565b90505f610cf28360020154610cbe64e8d4a51000610cb88860050154885f0154611cf090919063ffffffff16565b9050610d038164e8d4a51000611cfb565b8354909150610d129086611d06565b83556001840154610d239086611d06565b600185015560048401548354610d439164e8d4a5100091610cb891611cf0565b600184015560058401548354610d639164e8d4a5100091610cb891611cf0565b6002840155600383015485905f90610d7e906202a300612369565b421015610db957610d956064610cb889600a611cf0565b9050610da18782611d06565b600c54909250610db19082611bef565b600c55610e9e565b5f841180610dc657505f83115b15610e9e576002546040516306b278db60e11b8152336004820152602481018690526001600160a01b0390911690630d64f1b6906044015f604051808303815f87803b158015610e14575f80fd5b505af1158015610e26573d5f803e3d5ffd5b505060035460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b03909116925063a9059cbb91506044016020604051808303815f875af1158015610e78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9c919061237c565b505b85546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f19906044015f604051808303815f87803b158015610ee6575f80fd5b505af1158015610ef8573d5f803e3d5ffd5b50506040518481528a92503391507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a35050505050506109ae60018055565b5f60088281548110610f5657610f56612183565b905f5260205f209060060201905080600301544211610f73575050565b60018101545f819003610f8b57504260039091015550565b5f610f9a836003015442611396565b90505f610fc6600a54610cb88660020154610fc060045487611cf090919063ffffffff16565b90611cf0565b90505f610fec600a54610cb88760020154610fc060055488611cf090919063ffffffff16565b905061100f61100485610cb88564e8d4a51000611cf0565b600487015490611bef565b600486015561103561102a85610cb88464e8d4a51000611cf0565b600587015490611bef565b6005860155505042600390930192909255505050565b611053611bc3565b68056bc75e2d6310000081111561107c5760405162461bcd60e51b81526004016105df9061239b565b611084611089565b600555565b6008545f5b818110156109ae5761109f81610f42565b60010161108e565b6110af611bc3565b6110b85f611d11565b565b5f80600884815481106110cf576110cf612183565b5f91825260208083208784526009825260408085206001600160a01b0389168652909252922060046006909202909201908101546001820154600383015492945090914211801561111f57508015155b1561117d575f611133856003015442611396565b90505f611159600a54610cb88860020154610fc060045487611cf090919063ffffffff16565b905061117861117184610cb88464e8d4a51000611cf0565b8590611bef565b935050505b6111a48360010154610cbe64e8d4a51000610cb886885f0154611cf090919063ffffffff16565b9450505050505b92915050565b600e5460609082106111d55760405162461bcd60e51b81526004016105df90612156565b600e82815481106105fb576105fb612183565b6111f0611bc3565b600b805460ff19169055565b611204611bc3565b81805190602001208380519060200120036112615760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534332322063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208380519060200120036112be5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b808051906020012082805190602001200361131b5760405162461bcd60e51b815260206004820181905260248201527f5343323220616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b5f838383604051602001611331939291906121c9565b60408051601f19818403018152919052600e80546001810182555f919091529091507fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0161089b8282612282565b611387611bc3565b600b805460ff19166001179055565b5f7f000000000000000000000000000000000000000000000000000000000000000083116113e4577f00000000000000000000000000000000000000000000000000000000000000006113e6565b825b92507f000000000000000000000000000000000000000000000000000000000000000082101561141757505f6111ab565b6114218383612356565b9392505050565b611430611bc3565b818051906020012083805190602001200361148d5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343322063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208380519060200120036114ea5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208280519060200120036115475760405162461bcd60e51b815260206004820152601e60248201527f53433220616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b5f83838360405160200161155d939291906121c9565b60408051601f19818403018152919052600d80546001810182555f919091529091507fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50161089b8282612282565b600d5460609082106115cf5760405162461bcd60e51b81526004016105df90612156565b600d82815481106105fb576105fb612183565b5f80600884815481106115f7576115f7612183565b5f91825260208083208784526009825260408085206001600160a01b0389168652909252922060056006909202909201908101546001820154600383015492945090914211801561164757508015155b1561169e575f61165b856003015442611396565b90505f611681600a54610cb88860020154610fc060055487611cf090919063ffffffff16565b905061169961117184610cb88464e8d4a51000611cf0565b935050505b6111a48360020154610cbe69d3c21bcecceda1000000610cb886885f0154611cf090919063ffffffff16565b6116d2611bc3565b818051906020012083805190602001200361172f5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343322063616e6e6f74206265207468652073616d65000060448201526064016105df565b808051906020012083805190602001200361178c5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208280519060200120036117e95760405162461bcd60e51b815260206004820152601e60248201527f53433220616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b5f8383836040516020016117ff939291906121c9565b60408051601f19818403018152919052601080546001810182555f919091529091507f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720161089b8282612282565b5f81815260096020908152604080832033845290915281206003810154611877906202a300612369565b4210156118875750600a92915050565b505f92915050565b50919050565b60105460609082106118b95760405162461bcd60e51b81526004016105df90612156565b601082815481106105fb576105fb612183565b6118d4611c97565b5f600883815481106118e8576118e8612183565b5f918252602080832086845260098252604080852033865290925292206006909102909101915061191884610f42565b5f6119448260010154610cbe64e8d4a51000610cb88760040154875f0154611cf090919063ffffffff16565b90505f6119728360020154610cbe64e8d4a51000610cb88860050154885f0154611cf090919063ffffffff16565b83549091506119819086611bef565b835542600384015560018401546119989086611bef565b6001850155600484015483546119b89164e8d4a5100091610cb891611cf0565b6001840155600584015483546119d89164e8d4a5100091610cb891611cf0565b60028401556119ec8164e8d4a51000611cfb565b90505f8211806119fb57505f81115b15611ad3576002546040516306b278db60e11b8152336004820152602481018490526001600160a01b0390911690630d64f1b6906044015f604051808303815f87803b158015611a49575f80fd5b505af1158015611a5b573d5f803e3d5ffd5b505060035460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb91506044016020604051808303815f875af1158015611aad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad1919061237c565b505b8354611aea906001600160a01b0316333088611d60565b8354604051630852cd8d60e31b8152600481018790526001600160a01b03909116906342966c68906024015f604051808303815f87803b158015611b2c575f80fd5b505af1158015611b3e573d5f803e3d5ffd5b50506040518781528892503391507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a3505050506109ae60018055565b611b8e611bc3565b6001600160a01b038116611bb757604051631e4fbdf760e01b81525f60048201526024016105df565b611bc081611d11565b50565b5f546001600160a01b031633146110b85760405163118cdaa760e01b81523360048201526024016105df565b5f6114218284612369565b6008545f5b81811015611c9257826001600160a01b031660088281548110611c2457611c24612183565b5f9182526020909120600690910201546001600160a01b031603611c8a5760405162461bcd60e51b815260206004820152601c60248201527f6164643a20706f6f6c20616c726561647920657869737473212121210000000060448201526064016105df565b600101611bff565b505050565b600260015403611ce95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105df565b6002600155565b5f61142182846123e0565b5f61142182846123f7565b5f6114218284612356565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611dba908590611dc0565b50505050565b5f611dd46001600160a01b03841683611e21565b905080515f14158015611df8575080806020019051810190611df6919061237c565b155b15611c9257604051635274afe760e01b81526001600160a01b03841660048201526024016105df565b606061142183835f845f80856001600160a01b03168486604051611e459190612416565b5f6040518083038185875af1925050503d805f8114611e7f576040519150601f19603f3d011682016040523d82523d5f602084013e611e84565b606091505b5091509150611e94868383611e9e565b9695505050505050565b606082611eb357611eae82611efa565b611421565b8151158015611eca57506001600160a01b0384163b155b15611ef357604051639996b31560e01b81526001600160a01b03851660048201526024016105df565b5080611421565b805115611f0a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215611f33575f80fd5b5035919050565b5f5b83811015611f54578181015183820152602001611f3c565b50505f910152565b602081525f8251806020840152611f7a816040850160208701611f3a565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611bc0575f80fd5b5f8060408385031215611fb3575f80fd5b8235611fbe81611f8e565b91506020830135611fce81611f8e565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ffc575f80fd5b813567ffffffffffffffff8082111561201757612017611fd9565b604051601f8301601f19908116603f0116810190828211818310171561203f5761203f611fd9565b81604052838152866020858801011115612057575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f60608486031215612088575f80fd5b833567ffffffffffffffff8082111561209f575f80fd5b6120ab87838801611fed565b945060208601359150808211156120c0575f80fd5b6120cc87838801611fed565b935060408601359150808211156120e1575f80fd5b506120ee86828701611fed565b9150509250925092565b5f8060408385031215612109575f80fd5b50508035926020909101359150565b5f8060408385031215612129575f80fd5b823591506020830135611fce81611f8e565b5f6020828403121561214b575f80fd5b813561142181611f8e565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806121ab57607f821691505b60208210810361188f57634e487b7160e01b5f52602260045260245ffd5b605b60f81b81525f84516121e4816001850160208901611f3a565b808301905061016160f51b8060018301528551612208816003850160208a01611f3a565b60039201918201528351612223816005840160208801611f3a565b605d60f81b6005929091019182015260060195945050505050565b601f821115611c9257805f5260205f20601f840160051c810160208510156122635750805b601f840160051c820191505b8181101561089b575f815560010161226f565b815167ffffffffffffffff81111561229c5761229c611fd9565b6122b0816122aa8454612197565b8461223e565b602080601f8311600181146122e3575f84156122cc5750858301515b5f19600386901b1c1916600185901b17855561233a565b5f85815260208120601f198616915b82811015612311578886015182559484019460019091019084016122f2565b508582101561232e57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156111ab576111ab612342565b808201808211156111ab576111ab612342565b5f6020828403121561238c575f80fd5b81518015158114611421575f80fd5b60208082526025908201527f7365747773744554485065725365636f6e643a20746f6f206d616e7920777374604082015264455448732160d81b606082015260800190565b80820281158282048414176111ab576111ab612342565b5f8261241157634e487b7160e01b5f52601260045260245ffd5b500490565b5f8251612427818460208701611f3a565b919091019291505056fea26469706673582212208bc94b018404b3d8bcee8d45f0e7e85c0bcaded0f5c73febace0650f2f20d8da64736f6c63430008170033000000000000000000000000000000000000000000000000000000000002382e000000000000000000000000000000000000000000000000000000000002382e000000000000000000000000000000000000000000000000000000000002345a

Deployed Bytecode

0x608060405234801561000f575f80fd5b506004361061024a575f3560e01c806375d5fa1e11610140578063956d7816116100bf578063df53db2411610084578063df53db2414610560578063e0dae72f14610569578063e18c822214610579578063e2bbb1581461058c578063f0fa77f61461059f578063f2fde38b146105a8575f80fd5b8063956d7816146105015780639fd07a4414610514578063bdfbe74f14610527578063c2b38ccb1461053a578063ca6d7b681461054d575f80fd5b806389a302711161010557806389a30271146104635780638da5cb5b146104765780638dbb1e3a1461048657806393ecb5c11461049957806393f1a40b146104a2575f80fd5b806375d5fa1e1461040657806378e97925146104195780637b020dad14610440578063834069c814610448578063845105e21461045b575f80fd5b80632b8bbbe8116101cc57806351eb05a61161019157806351eb05a6146103bd5780635ee2d554146103d0578063630b5ba1146103e3578063715018a6146103eb57806375714533146103f3575f80fd5b80632b8bbbe814610346578063441a3e701461035957806346b828cb1461036c5780634aa07e641461037557806350188301146103a0575f80fd5b80631aa71580116102125780631aa71580146102f15780631ab06ee5146103045780631b1fdaa1146103175780632377b2a8146103205780632391ea1514610333575f80fd5b80630507d2371461024e578063081e3eda146102775780630e37d36f146102895780631526fe271461029e57806317caf6f1146102e8575b5f80fd5b61026161025c366004611f23565b6105bb565b60405161026e9190611f5c565b60405180910390f35b6008545b60405190815260200161026e565b61029c610297366004611fa2565b610691565b005b6102b16102ac366004611f23565b6106ca565b604080516001600160a01b0390971687526020870195909552938501929092526060840152608083015260a082015260c00161026e565b61027b600a5481565b61029c6102ff366004612076565b610718565b61029c6103123660046120f8565b6108a2565b61027b600c5481565b61029c61032e366004611f23565b61091e565b61029c610341366004611f23565b6109b2565b61029c610354366004612118565b6109f0565b61029c6103673660046120f8565b610bb2565b61027b60055481565b600254610388906001600160a01b031681565b6040516001600160a01b03909116815260200161026e565b600b546103ad9060ff1681565b604051901515815260200161026e565b61029c6103cb366004611f23565b610f42565b61029c6103de366004611f23565b61104b565b61029c611089565b61029c6110a7565b61027b610401366004612118565b6110ba565b610261610414366004611f23565b6111b1565b61027b7f000000000000000000000000000000000000000000000000000000000002345a81565b61029c6111e8565b61029c610456366004612076565b6111fc565b61029c61137f565b600354610388906001600160a01b031681565b5f546001600160a01b0316610388565b61027b6104943660046120f8565b611396565b61027b60065481565b6104e16104b0366004612118565b600960209081525f928352604080842090915290825290208054600182015460028301546003909301549192909184565b60408051948552602085019390935291830152606082015260800161026e565b61029c61050f366004612076565b611428565b610261610522366004611f23565b6115ab565b61027b610535366004612118565b6115e2565b61029c610548366004612076565b6116ca565b61027b61055b366004611f23565b61184d565b61027b60045481565b61027b68056bc75e2d6310000081565b610261610587366004611f23565b611895565b61029c61059a3660046120f8565b6118cc565b61027b60075481565b61029c6105b636600461213b565b611b86565b600f5460609082106105e85760405162461bcd60e51b81526004016105df90612156565b60405180910390fd5b600f82815481106105fb576105fb612183565b905f5260205f2001805461060e90612197565b80601f016020809104026020016040519081016040528092919081815260200182805461063a90612197565b80156106855780601f1061065c57610100808354040283529160200191610685565b820191905f5260205f20905b81548152906001019060200180831161066857829003601f168201915b50505050509050919050565b610699611bc3565b600380546001600160a01b039283166001600160a01b03199182161790915560028054939092169216919091179055565b600881815481106106d9575f80fd5b5f9182526020909120600690910201805460018201546002830154600384015460048501546005909501546001600160a01b0390941695509193909286565b610720611bc3565b818051906020012083805190602001200361077d5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534332322063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208380519060200120036107da5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208280519060200120036108375760405162461bcd60e51b815260206004820181905260248201527f5343323220616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b5f83838360405160200161084d939291906121c9565b60408051601f19818403018152919052600f80546001810182555f919091529091507f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac8020161089b8282612282565b5050505050565b6108aa611bc3565b6108b2611089565b80600883815481106108c6576108c6612183565b905f5260205f20906006020160020154600a546108e39190612356565b6108ed9190612369565b600a81905550806008838154811061090757610907612183565b905f5260205f209060060201600201819055505050565b610926611bc3565b6006546109339082611bef565b6006556002546040516323b872dd60e01b8152336004820152306024820152604481018390526001600160a01b03909116906323b872dd906064016020604051808303815f875af115801561098a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ae919061237c565b5050565b6109ba611bc3565b68056bc75e2d631000008111156109e35760405162461bcd60e51b81526004016105df9061239b565b6109eb611089565b600455565b6109f8611bc3565b610a0181611bfa565b610a09611089565b5f7f000000000000000000000000000000000000000000000000000000000002345a4211610a57577f000000000000000000000000000000000000000000000000000000000002345a610a59565b425b600a54909150610a699084611bef565b600a556040805160c0810182526001600160a01b0393841681525f60208201818152928201958652606082019384526080820181815260a0830182815260088054600181018255935292517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee3600690930292830180546001600160a01b031916919097161790955591517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee483015593517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee582015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee682015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee782015590517ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee890910155565b610bba611c97565b5f60088381548110610bce57610bce612183565b5f91825260208083208684526009825260408085203386529092529220805460069092029092019250831115610c3b5760405162461bcd60e51b81526020600482015260126024820152711dda5d1a191c985dce881b9bdd0819dbdbd960721b60448201526064016105df565b600b5460ff16610c835760405162461bcd60e51b81526020600482015260136024820152721dda5d1a191c985dc81b9bdd081bdc195b9959606a1b60448201526064016105df565b610c8c84610f42565b5f610cc48260010154610cbe64e8d4a51000610cb88760040154875f0154611cf090919063ffffffff16565b90611cfb565b90611d06565b90505f610cf28360020154610cbe64e8d4a51000610cb88860050154885f0154611cf090919063ffffffff16565b9050610d038164e8d4a51000611cfb565b8354909150610d129086611d06565b83556001840154610d239086611d06565b600185015560048401548354610d439164e8d4a5100091610cb891611cf0565b600184015560058401548354610d639164e8d4a5100091610cb891611cf0565b6002840155600383015485905f90610d7e906202a300612369565b421015610db957610d956064610cb889600a611cf0565b9050610da18782611d06565b600c54909250610db19082611bef565b600c55610e9e565b5f841180610dc657505f83115b15610e9e576002546040516306b278db60e11b8152336004820152602481018690526001600160a01b0390911690630d64f1b6906044015f604051808303815f87803b158015610e14575f80fd5b505af1158015610e26573d5f803e3d5ffd5b505060035460405163a9059cbb60e01b8152336004820152602481018790526001600160a01b03909116925063a9059cbb91506044016020604051808303815f875af1158015610e78573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e9c919061237c565b505b85546040516340c10f1960e01b8152336004820152602481018490526001600160a01b03909116906340c10f19906044015f604051808303815f87803b158015610ee6575f80fd5b505af1158015610ef8573d5f803e3d5ffd5b50506040518481528a92503391507ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689060200160405180910390a35050505050506109ae60018055565b5f60088281548110610f5657610f56612183565b905f5260205f209060060201905080600301544211610f73575050565b60018101545f819003610f8b57504260039091015550565b5f610f9a836003015442611396565b90505f610fc6600a54610cb88660020154610fc060045487611cf090919063ffffffff16565b90611cf0565b90505f610fec600a54610cb88760020154610fc060055488611cf090919063ffffffff16565b905061100f61100485610cb88564e8d4a51000611cf0565b600487015490611bef565b600486015561103561102a85610cb88464e8d4a51000611cf0565b600587015490611bef565b6005860155505042600390930192909255505050565b611053611bc3565b68056bc75e2d6310000081111561107c5760405162461bcd60e51b81526004016105df9061239b565b611084611089565b600555565b6008545f5b818110156109ae5761109f81610f42565b60010161108e565b6110af611bc3565b6110b85f611d11565b565b5f80600884815481106110cf576110cf612183565b5f91825260208083208784526009825260408085206001600160a01b0389168652909252922060046006909202909201908101546001820154600383015492945090914211801561111f57508015155b1561117d575f611133856003015442611396565b90505f611159600a54610cb88860020154610fc060045487611cf090919063ffffffff16565b905061117861117184610cb88464e8d4a51000611cf0565b8590611bef565b935050505b6111a48360010154610cbe64e8d4a51000610cb886885f0154611cf090919063ffffffff16565b9450505050505b92915050565b600e5460609082106111d55760405162461bcd60e51b81526004016105df90612156565b600e82815481106105fb576105fb612183565b6111f0611bc3565b600b805460ff19169055565b611204611bc3565b81805190602001208380519060200120036112615760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534332322063616e6e6f74206265207468652073616d6560448201526064016105df565b80805190602001208380519060200120036112be5760405162461bcd60e51b815260206004820181905260248201527f5343313120616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b808051906020012082805190602001200361131b5760405162461bcd60e51b815260206004820181905260248201527f5343323220616e6420534333332063616e6e6f74206265207468652073616d6560448201526064016105df565b5f838383604051602001611331939291906121c9565b60408051601f19818403018152919052600e80546001810182555f919091529091507fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0161089b8282612282565b611387611bc3565b600b805460ff19166001179055565b5f7f000000000000000000000000000000000000000000000000000000000002345a83116113e4577f000000000000000000000000000000000000000000000000000000000002345a6113e6565b825b92507f000000000000000000000000000000000000000000000000000000000002345a82101561141757505f6111ab565b6114218383612356565b9392505050565b611430611bc3565b818051906020012083805190602001200361148d5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343322063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208380519060200120036114ea5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208280519060200120036115475760405162461bcd60e51b815260206004820152601e60248201527f53433220616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b5f83838360405160200161155d939291906121c9565b60408051601f19818403018152919052600d80546001810182555f919091529091507fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50161089b8282612282565b600d5460609082106115cf5760405162461bcd60e51b81526004016105df90612156565b600d82815481106105fb576105fb612183565b5f80600884815481106115f7576115f7612183565b5f91825260208083208784526009825260408085206001600160a01b0389168652909252922060056006909202909201908101546001820154600383015492945090914211801561164757508015155b1561169e575f61165b856003015442611396565b90505f611681600a54610cb88860020154610fc060055487611cf090919063ffffffff16565b905061169961117184610cb88464e8d4a51000611cf0565b935050505b6111a48360020154610cbe69d3c21bcecceda1000000610cb886885f0154611cf090919063ffffffff16565b6116d2611bc3565b818051906020012083805190602001200361172f5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343322063616e6e6f74206265207468652073616d65000060448201526064016105df565b808051906020012083805190602001200361178c5760405162461bcd60e51b815260206004820152601e60248201527f53433120616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b80805190602001208280519060200120036117e95760405162461bcd60e51b815260206004820152601e60248201527f53433220616e64205343332063616e6e6f74206265207468652073616d65000060448201526064016105df565b5f8383836040516020016117ff939291906121c9565b60408051601f19818403018152919052601080546001810182555f919091529091507f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720161089b8282612282565b5f81815260096020908152604080832033845290915281206003810154611877906202a300612369565b4210156118875750600a92915050565b505f92915050565b50919050565b60105460609082106118b95760405162461bcd60e51b81526004016105df90612156565b601082815481106105fb576105fb612183565b6118d4611c97565b5f600883815481106118e8576118e8612183565b5f918252602080832086845260098252604080852033865290925292206006909102909101915061191884610f42565b5f6119448260010154610cbe64e8d4a51000610cb88760040154875f0154611cf090919063ffffffff16565b90505f6119728360020154610cbe64e8d4a51000610cb88860050154885f0154611cf090919063ffffffff16565b83549091506119819086611bef565b835542600384015560018401546119989086611bef565b6001850155600484015483546119b89164e8d4a5100091610cb891611cf0565b6001840155600584015483546119d89164e8d4a5100091610cb891611cf0565b60028401556119ec8164e8d4a51000611cfb565b90505f8211806119fb57505f81115b15611ad3576002546040516306b278db60e11b8152336004820152602481018490526001600160a01b0390911690630d64f1b6906044015f604051808303815f87803b158015611a49575f80fd5b505af1158015611a5b573d5f803e3d5ffd5b505060035460405163a9059cbb60e01b8152336004820152602481018590526001600160a01b03909116925063a9059cbb91506044016020604051808303815f875af1158015611aad573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ad1919061237c565b505b8354611aea906001600160a01b0316333088611d60565b8354604051630852cd8d60e31b8152600481018790526001600160a01b03909116906342966c68906024015f604051808303815f87803b158015611b2c575f80fd5b505af1158015611b3e573d5f803e3d5ffd5b50506040518781528892503391507f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a159060200160405180910390a3505050506109ae60018055565b611b8e611bc3565b6001600160a01b038116611bb757604051631e4fbdf760e01b81525f60048201526024016105df565b611bc081611d11565b50565b5f546001600160a01b031633146110b85760405163118cdaa760e01b81523360048201526024016105df565b5f6114218284612369565b6008545f5b81811015611c9257826001600160a01b031660088281548110611c2457611c24612183565b5f9182526020909120600690910201546001600160a01b031603611c8a5760405162461bcd60e51b815260206004820152601c60248201527f6164643a20706f6f6c20616c726561647920657869737473212121210000000060448201526064016105df565b600101611bff565b505050565b600260015403611ce95760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064016105df565b6002600155565b5f61142182846123e0565b5f61142182846123f7565b5f6114218284612356565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611dba908590611dc0565b50505050565b5f611dd46001600160a01b03841683611e21565b905080515f14158015611df8575080806020019051810190611df6919061237c565b155b15611c9257604051635274afe760e01b81526001600160a01b03841660048201526024016105df565b606061142183835f845f80856001600160a01b03168486604051611e459190612416565b5f6040518083038185875af1925050503d805f8114611e7f576040519150601f19603f3d011682016040523d82523d5f602084013e611e84565b606091505b5091509150611e94868383611e9e565b9695505050505050565b606082611eb357611eae82611efa565b611421565b8151158015611eca57506001600160a01b0384163b155b15611ef357604051639996b31560e01b81526001600160a01b03851660048201526024016105df565b5080611421565b805115611f0a5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215611f33575f80fd5b5035919050565b5f5b83811015611f54578181015183820152602001611f3c565b50505f910152565b602081525f8251806020840152611f7a816040850160208701611f3a565b601f01601f19169190910160400192915050565b6001600160a01b0381168114611bc0575f80fd5b5f8060408385031215611fb3575f80fd5b8235611fbe81611f8e565b91506020830135611fce81611f8e565b809150509250929050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f830112611ffc575f80fd5b813567ffffffffffffffff8082111561201757612017611fd9565b604051601f8301601f19908116603f0116810190828211818310171561203f5761203f611fd9565b81604052838152866020858801011115612057575f80fd5b836020870160208301375f602085830101528094505050505092915050565b5f805f60608486031215612088575f80fd5b833567ffffffffffffffff8082111561209f575f80fd5b6120ab87838801611fed565b945060208601359150808211156120c0575f80fd5b6120cc87838801611fed565b935060408601359150808211156120e1575f80fd5b506120ee86828701611fed565b9150509250925092565b5f8060408385031215612109575f80fd5b50508035926020909101359150565b5f8060408385031215612129575f80fd5b823591506020830135611fce81611f8e565b5f6020828403121561214b575f80fd5b813561142181611f8e565b602080825260139082015272496e646578206f7574206f6620626f756e647360681b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b600181811c908216806121ab57607f821691505b60208210810361188f57634e487b7160e01b5f52602260045260245ffd5b605b60f81b81525f84516121e4816001850160208901611f3a565b808301905061016160f51b8060018301528551612208816003850160208a01611f3a565b60039201918201528351612223816005840160208801611f3a565b605d60f81b6005929091019182015260060195945050505050565b601f821115611c9257805f5260205f20601f840160051c810160208510156122635750805b601f840160051c820191505b8181101561089b575f815560010161226f565b815167ffffffffffffffff81111561229c5761229c611fd9565b6122b0816122aa8454612197565b8461223e565b602080601f8311600181146122e3575f84156122cc5750858301515b5f19600386901b1c1916600185901b17855561233a565b5f85815260208120601f198616915b82811015612311578886015182559484019460019091019084016122f2565b508582101561232e57878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b634e487b7160e01b5f52601160045260245ffd5b818103818111156111ab576111ab612342565b808201808211156111ab576111ab612342565b5f6020828403121561238c575f80fd5b81518015158114611421575f80fd5b60208082526025908201527f7365747773744554485065725365636f6e643a20746f6f206d616e7920777374604082015264455448732160d81b606082015260800190565b80820281158282048414176111ab576111ab612342565b5f8261241157634e487b7160e01b5f52601260045260245ffd5b500490565b5f8251612427818460208701611f3a565b919091019291505056fea26469706673582212208bc94b018404b3d8bcee8d45f0e7e85c0bcaded0f5c73febace0650f2f20d8da64736f6c63430008170033

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

000000000000000000000000000000000000000000000000000000000002382e000000000000000000000000000000000000000000000000000000000002382e000000000000000000000000000000000000000000000000000000000002345a

-----Decoded View---------------
Arg [0] : _wstETHPerSecond (uint256): 145454
Arg [1] : _USDCPerSecond (uint256): 145454
Arg [2] : _startTime (uint256): 144474

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000000000000000000000000000000000000002382e
Arg [1] : 000000000000000000000000000000000000000000000000000000000002382e
Arg [2] : 000000000000000000000000000000000000000000000000000000000002345a


Deployed Bytecode Sourcemap

19672:15244:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23774:165;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25246:95;25318:8;:15;25246:95;;;1001:25:1;;;989:2;974:18;25246:95:0;855:177:1;34785:128:0;;;;;;:::i;:::-;;:::i;:::-;;20701:26;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;1934:32:1;;;1916:51;;1998:2;1983:18;;1976:34;;;;2026:18;;;2019:34;;;;2084:2;2069:18;;2062:34;2127:3;2112:19;;2105:35;1954:3;2156:19;;2149:35;1903:3;1888:19;20701:26:0;1615:575:1;20944:34:0;;;;;;23047:719;;;;;;:::i;:::-;;:::i;28257:243::-;;;;;;:::i;:::-;;:::i;21111:28::-;;;;;;24315:204;;;;;;:::i;:::-;;:::i;26327:441::-;;;;;;:::i;:::-;;:::i;27564:601::-;;;;;;:::i;:::-;;:::i;33151:1626::-;;;;;;:::i;:::-;;:::i;20416:28::-;;;;;;20221:71;;;;;-1:-1:-1;;;;;20221:71:0;;;;;;-1:-1:-1;;;;;4571:32:1;;;4553:51;;4541:2;4526:18;20221:71:0;4393:217:1;21072:32:0;;;;;;;;;;;;4780:14:1;;4773:22;4755:41;;4743:2;4728:18;21072:32:0;4615:187:1;30731:881:0;;;;;;:::i;:::-;;:::i;26776:434::-;;;;;;:::i;:::-;;:::i;30475:180::-;;;:::i;4594:103::-;;;:::i;28878:760::-;;;;;;:::i;:::-;;:::i;22815:181::-;;;;;;:::i;:::-;;:::i;21029:34::-;;;;;24531:82;;;:::i;22191:616::-;;;;;;:::i;:::-;;:::i;24227:80::-;;;:::i;20299:69::-;;;;;-1:-1:-1;;;;;20299:69:0;;;3919:87;3965:7;3992:6;-1:-1:-1;;;;;3992:6:0;3919:87;;28582:240;;;;;;:::i;:::-;;:::i;20453:41::-;;;;;;20783:66;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5573:25:1;;;5629:2;5614:18;;5607:34;;;;5657:18;;;5650:34;5715:2;5700:18;;5693:34;5560:3;5545:19;20783:66:0;5342:391:1;21398:575:0;;;;;;:::i;:::-;;:::i;21981:169::-;;;;;;:::i;:::-;;:::i;29646:746::-;;;;;;:::i;:::-;;:::i;25349:621::-;;;;;;:::i;:::-;;:::i;32828:271::-;;;;;;:::i;:::-;;:::i;20379:30::-;;;;;;20619:46;;20661:4;20619:46;;25975:168;;;;;;:::i;:::-;;:::i;31677:1143::-;;;;;;:::i;:::-;;:::i;20501:34::-;;;;;;4852:220;;;;;;:::i;:::-;;:::i;23774:165::-;23861:11;:18;23828:13;;23857:22;;23849:54;;;;-1:-1:-1;;;23849:54:0;;;;;;;:::i;:::-;;;;;;;;;23921:11;23933:1;23921:14;;;;;;;;:::i;:::-;;;;;;;;23914:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23774:165;;;:::o;34785:128::-;3805:13;:11;:13::i;:::-;34866:4:::1;:12:::0;;-1:-1:-1;;;;;34866:12:0;;::::1;-1:-1:-1::0;;;;;;34866:12:0;;::::1;;::::0;;;34889:6:::1;:16:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;34785:128::o;20701:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20701:26:0;;;;-1:-1:-1;20701:26:0;;;;;:::o;23047:719::-;3805:13;:11;:13::i;:::-;23268:26:::1;23252:44;;;;;;23236:10;23220:28;;;;;;:76:::0;23212:121:::1;;;::::0;-1:-1:-1;;;23212:121:0;;7064:2:1;23212:121:0::1;::::0;::::1;7046:21:1::0;;;7083:18;;;7076:30;7142:34;7122:18;;;7115:62;7194:18;;23212:121:0::1;6862:356:1::0;23212:121:0::1;23396:18;23380:36;;;;;;23364:10;23348:28;;;;;;:68:::0;23340:113:::1;;;::::0;-1:-1:-1;;;23340:113:0;;7425:2:1;23340:113:0::1;::::0;::::1;7407:21:1::0;;;7444:18;;;7437:30;7503:34;7483:18;;;7476:62;7555:18;;23340:113:0::1;7223:356:1::0;23340:113:0::1;23532:18;23516:36;;;;;;23484:26;23468:44;;;;;;:84:::0;23460:129:::1;;;::::0;-1:-1:-1;;;23460:129:0;;7786:2:1;23460:129:0::1;::::0;::::1;7768:21:1::0;;;7805:18;;;7798:30;7864:34;7844:18;;;7837:62;7916:18;;23460:129:0::1;7584:356:1::0;23460:129:0::1;23598:22;23651:10;23669:26;23703:18;23630:97;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;23630:97:0;;::::1;::::0;;;;;;23736:11:::1;:26:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23736:26:0;;;;23630:97;;-1:-1:-1;23736:26:0;::::1;;23630:97:::0;23736:26;::::1;:::i;:::-;;23205:561;23047:719:::0;;;:::o;28257:243::-;3805:13;:11;:13::i;:::-;28337:17:::1;:15;:17::i;:::-;28431:11;28403:8;28412:4;28403:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;;28385:15;;:43;;;;:::i;:::-;:57;;;;:::i;:::-;28367:15;:75;;;;28481:11;28453:8;28462:4;28453:14;;;;;;;;:::i;:::-;;;;;;;;;;;:25;;:39;;;;28257:243:::0;;:::o;24315:204::-;3805:13;:11;:13::i;:::-;24410:22:::1;::::0;:35:::1;::::0;24437:7;24410:26:::1;:35::i;:::-;24385:22;:60:::0;24456:6:::1;::::0;:55:::1;::::0;-1:-1:-1;;;24456:55:0;;24476:10:::1;24456:55;::::0;::::1;12039:34:1::0;24496:4:0::1;12089:18:1::0;;;12082:43;12141:18;;;12134:34;;;-1:-1:-1;;;;;24456:6:0;;::::1;::::0;:19:::1;::::0;11974:18:1;;24456:55:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24315:204:::0;:::o;26327:441::-;3805:13;:11;:13::i;:::-;20661:4:::1;26416:16;:35;;26408:85;;;;-1:-1:-1::0;;;26408:85:0::1;;;;;;;:::i;:::-;26695:17;:15;:17::i;:::-;26726:15;:34:::0;26327:441::o;27564:601::-;3805:13;:11;:13::i;:::-;27647:27:::1;27665:8;27647:17;:27::i;:::-;27726:17;:15;:17::i;:::-;27756:22;27799:9;27781:15;:27;:57;;27829:9;27781:57;;;27811:15;27781:57;27867:15;::::0;27756:82;;-1:-1:-1;27867:32:0::1;::::0;27887:11;27867:19:::1;:32::i;:::-;27849:15;:50:::0;27924:232:::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;27924:232:0;;::::1;::::0;;-1:-1:-1;27924:232:0::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;27910:8:::1;:247:::0;;::::1;::::0;::::1;::::0;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;27910:247:0::1;::::0;;;::::1;;::::0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27564:601::o;33151:1626::-;445:21;:19;:21::i;:::-;33233::::1;33257:8;33266:4;33257:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;33306;;;:8:::1;:14:::0;;;;;;33321:10:::1;33306:26:::0;;;;;;;33353:11;;33257:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;33353:22:0;-1:-1:-1;33353:22:0::1;33345:53;;;::::0;-1:-1:-1;;;33345:53:0;;13069:2:1;33345:53:0::1;::::0;::::1;13051:21:1::0;13108:2;13088:18;;;13081:30;-1:-1:-1;;;13127:18:1;;;13120:48;13185:18;;33345:53:0::1;12867:342:1::0;33345:53:0::1;33417:12;::::0;::::1;;33409:44;;;::::0;-1:-1:-1;;;33409:44:0;;13416:2:1;33409:44:0::1;::::0;::::1;13398:21:1::0;13455:2;13435:18;;;13428:30;-1:-1:-1;;;13474:18:1;;;13467:49;13533:18;;33409:44:0::1;13214:343:1::0;33409:44:0::1;33466:16;33477:4;33466:10;:16::i;:::-;33495:15;33513:70;33567:4;:15;;;33513:49;33557:4;33513:39;33529:4;:22;;;33513:4;:11;;;:15;;:39;;;;:::i;:::-;:43:::0;::::1;:49::i;:::-;:53:::0;::::1;:70::i;:::-;33495:88;;33594:19;33616:72;33668:4;:19;;;33616:47;33658:4;33616:37;33632:4;:20;;;33616:4;:11;;;:15;;:37;;;;:::i;:72::-;33594:94:::0;-1:-1:-1;33713:21:0::1;33594:94:::0;33729:4:::1;33713:15;:21::i;:::-;33761:11:::0;;33699:35;;-1:-1:-1;33761:24:0::1;::::0;33777:7;33761:15:::1;:24::i;:::-;33747:38:::0;;33814:15:::1;::::0;::::1;::::0;:28:::1;::::0;33834:7;33814:19:::1;:28::i;:::-;33796:15;::::0;::::1;:46:::0;33887:22:::1;::::0;::::1;::::0;33871:11;;:49:::1;::::0;33915:4:::1;::::0;33871:39:::1;::::0;:15:::1;:39::i;:49::-;33853:15;::::0;::::1;:67:::0;33969:20:::1;::::0;::::1;::::0;33953:11;;:47:::1;::::0;33995:4:::1;::::0;33953:37:::1;::::0;:15:::1;:37::i;:47::-;33931:19;::::0;::::1;:69:::0;34101:20:::1;::::0;::::1;::::0;34033:7;;34013:17:::1;::::0;34101:29:::1;::::0;34124:6:::1;34101:29;:::i;:::-;34083:15;:47;34079:552;;;34225:24;34245:3;34225:15;:7:::0;34237:2:::1;34225:11;:15::i;:24::-;34219:30:::0;-1:-1:-1;34280:16:0::1;:7:::0;34219:30;34280:11:::1;:16::i;:::-;34389:9;::::0;34268:28;;-1:-1:-1;34389:18:0::1;::::0;34403:3;34389:13:::1;:18::i;:::-;34377:9;:30:::0;34079:552:::1;;;34462:1;34452:7;:11;:30;;;;34481:1;34467:11;:15;34452:30;34449:171;;;34503:6;::::0;:44:::1;::::0;-1:-1:-1;;;34503:44:0;;34527:10:::1;34503:44;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;34503:6:0;;::::1;::::0;:23:::1;::::0;13709:18:1;;34503:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34566:4:0::1;::::0;:38:::1;::::0;-1:-1:-1;;;34566:38:0;;34580:10:::1;34566:38;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;34566:4:0;;::::1;::::0;-1:-1:-1;34566:13:0::1;::::0;-1:-1:-1;13709:18:1;;34566:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34449:171;34655:12:::0;;34641:65:::1;::::0;-1:-1:-1;;;34641:65:0;;34683:10:::1;34641:65;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;34655:12:0;;::::1;::::0;34641:33:::1;::::0;13709:18:1;;34641:65:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;34732:37:0::1;::::0;1001:25:1;;;34753:4:0;;-1:-1:-1;34741:10:0::1;::::0;-1:-1:-1;34732:37:0::1;::::0;989:2:1;974:18;34732:37:0::1;;;;;;;33220:1557;;;;;;489:20:::0;261:1;1009:22;;826:213;30731:881;30783:21;30807:8;30816:4;30807:14;;;;;;;;:::i;:::-;;;;;;;;;;;30783:38;;30855:4;:19;;;30836:15;:38;30832:77;;30891:7;30731:881;:::o;30832:77::-;30938:15;;;;30919:16;30968:13;;;30964:104;;-1:-1:-1;31020:15:0;30998:19;;;;:37;-1:-1:-1;30731:881:0:o;30964:104::-;31078:18;31099:51;31113:4;:19;;;31134:15;31099:13;:51::i;:::-;31078:72;;31161:20;31184:73;31241:15;;31184:52;31220:4;:15;;;31184:31;31199:15;;31184:10;:14;;:31;;;;:::i;:::-;:35;;:52::i;:73::-;31161:96;;31268:18;31289:71;31344:15;;31289:50;31323:4;:15;;;31289:29;31304:13;;31289:10;:14;;:29;;;;:::i;:71::-;31268:92;-1:-1:-1;31398:64:0;31425:36;31452:8;31425:22;:12;31442:4;31425:16;:22::i;:36::-;31398:22;;;;;:26;:64::i;:::-;31373:22;;;:89;31496:60;31521:34;31546:8;31521:20;:10;31536:4;31521:14;:20::i;:34::-;31496:20;;;;;:24;:60::i;:::-;31473:20;;;:83;-1:-1:-1;;31589:15:0;31567:19;;;;:37;;;;-1:-1:-1;;;30731:881:0:o;26776:434::-;3805:13;:11;:13::i;:::-;20661:4:::1;26864:14;:33;;26856:83;;;;-1:-1:-1::0;;;26856:83:0::1;;;;;;;:::i;:::-;27141:17;:15;:17::i;:::-;27172:13;:30:::0;26776:434::o;30475:180::-;30537:8;:15;30520:14;30563:85;30591:6;30585:3;:12;30563:85;;;30621:15;30632:3;30621:10;:15::i;:::-;30599:5;;30563:85;;4594:103;3805:13;:11;:13::i;:::-;4659:30:::1;4686:1;4659:18;:30::i;:::-;4594:103::o:0;28878:760::-;28953:7;28973:21;28997:8;29006:4;28997:14;;;;;;;;:::i;:::-;;;;;;;;;29046;;;:8;:14;;;;;;-1:-1:-1;;;;;29046:21:0;;;;;;;;;29106:22;28997:14;;;;;;;29106:22;;;;29158:15;;;;29206:19;;;;28997:14;;-1:-1:-1;29106:22:0;;29188:15;:37;:54;;;;-1:-1:-1;29229:13:0;;;29188:54;29184:364;;;29259:18;29280:51;29294:4;:19;;;29315:15;29280:13;:51::i;:::-;29259:72;;29346:20;29369:73;29426:15;;29369:52;29405:4;:15;;;29369:31;29384:15;;29369:10;:14;;:31;;;;:::i;:73::-;29346:96;-1:-1:-1;29477:59:0;29499:36;29526:8;29499:22;29346:96;29516:4;29499:16;:22::i;:36::-;29477:17;;:21;:59::i;:::-;29457:79;;29244:304;;29184:364;29565:65;29614:4;:15;;;29565:44;29604:4;29565:34;29581:17;29565:4;:11;;;:15;;:34;;;;:::i;:65::-;29558:72;;;;;;28878:760;;;;;:::o;22815:181::-;22906:17;:24;22873:13;;22902:28;;22894:60;;;;-1:-1:-1;;;22894:60:0;;;;;;;:::i;:::-;22972:17;22990:1;22972:20;;;;;;;;:::i;24531:82::-;3805:13;:11;:13::i;:::-;24585:12:::1;:20:::0;;-1:-1:-1;;24585:20:0::1;::::0;;24531:82::o;22191:616::-;3805:13;:11;:13::i;:::-;22372:9:::1;22356:27;;;;;;22339:11;22323:29;;;;;;:60:::0;22315:105:::1;;;::::0;-1:-1:-1;;;22315:105:0;;7064:2:1;22315:105:0::1;::::0;::::1;7046:21:1::0;;;7083:18;;;7076:30;7142:34;7122:18;;;7115:62;7194:18;;22315:105:0::1;6862:356:1::0;22315:105:0::1;22484:8;22468:26;;;;;;22451:11;22435:29;;;;;;:59:::0;22427:104:::1;;;::::0;-1:-1:-1;;;22427:104:0;;7425:2:1;22427:104:0::1;::::0;::::1;7407:21:1::0;;;7444:18;;;7437:30;7503:34;7483:18;;;7476:62;7555:18;;22427:104:0::1;7223:356:1::0;22427:104:0::1;22593:8;22577:26;;;;;;22562:9;22546:27;;;;;;:57:::0;22538:102:::1;;;::::0;-1:-1:-1;;;22538:102:0;;7786:2:1;22538:102:0::1;::::0;::::1;7768:21:1::0;;;7805:18;;;7798:30;7864:34;7844:18;;;7837:62;7916:18;;22538:102:0::1;7584:356:1::0;22538:102:0::1;22649:27;22707:11;22726:9;22743:8;22686:71;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;22686:71:0;;::::1;::::0;;;;;;22766:17:::1;:37:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22766:37:0;;;;22686:71;;-1:-1:-1;22766:37:0;::::1;;22686:71:::0;22766:37;::::1;:::i;24227:80::-:0;3805:13;:11;:13::i;:::-;24280:12:::1;:19:::0;;-1:-1:-1;;24280:19:0::1;24295:4;24280:19;::::0;;24227:80::o;28582:240::-;28654:7;28690:9;28682:5;:17;:37;;28710:9;28682:37;;;28702:5;28682:37;28674:45;;28740:9;28734:3;:15;28730:56;;;-1:-1:-1;28773:1:0;28766:8;;28730:56;28803:11;28809:5;28803:3;:11;:::i;:::-;28796:18;28582:240;-1:-1:-1;;;28582:240:0:o;21398:575::-;3805:13;:11;:13::i;:::-;21561:11:::1;21545:29;;;;;;21534:5;21518:23;;;;;;:56:::0;21510:99:::1;;;::::0;-1:-1:-1;;;21510:99:0;;14043:2:1;21510:99:0::1;::::0;::::1;14025:21:1::0;14082:2;14062:18;;;14055:30;14121:32;14101:18;;;14094:60;14171:18;;21510:99:0::1;13841:354:1::0;21510:99:0::1;21667:9;21651:27;;;;;;21640:5;21624:23;;;;;;:54:::0;21616:97:::1;;;::::0;-1:-1:-1;;;21616:97:0;;14402:2:1;21616:97:0::1;::::0;::::1;14384:21:1::0;14441:2;14421:18;;;14414:30;14480:32;14460:18;;;14453:60;14530:18;;21616:97:0::1;14200:354:1::0;21616:97:0::1;21777:9;21761:27;;;;;;21744:11;21728:29;;;;;;:60:::0;21720:103:::1;;;::::0;-1:-1:-1;;;21720:103:0;;14761:2:1;21720:103:0::1;::::0;::::1;14743:21:1::0;14800:2;14780:18;;;14773:30;14839:32;14819:18;;;14812:60;14889:18;;21720:103:0::1;14559:354:1::0;21720:103:0::1;21832:22;21885:5;21898:11;21917:9;21864:68;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;21864:68:0;;::::1;::::0;;;;;;21941:13:::1;:28:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;21941:28:0;;;;21864:68;;-1:-1:-1;21941:28:0;::::1;;21864:68:::0;21941:28;::::1;:::i;21981:169::-:0;22068:13;:20;22035:13;;22064:24;;22056:56;;;;-1:-1:-1;;;22056:56:0;;;;;;;:::i;:::-;22130:13;22144:1;22130:16;;;;;;;;:::i;29646:746::-;29719:7;29739:21;29763:8;29772:4;29763:14;;;;;;;;:::i;:::-;;;;;;;;;29812;;;:8;:14;;;;;;-1:-1:-1;;;;;29812:21:0;;;;;;;;;29870:20;29763:14;;;;;;;29870:20;;;;29920:15;;;;29968:19;;;;29763:14;;-1:-1:-1;29870:20:0;;29950:15;:37;:54;;;;-1:-1:-1;29991:13:0;;;29950:54;29946:354;;;30021:18;30042:51;30056:4;:19;;;30077:15;30042:13;:51::i;:::-;30021:72;;30108:18;30129:71;30184:15;;30129:50;30163:4;:15;;;30129:29;30144:13;;30129:10;:14;;:29;;;;:::i;:71::-;30108:92;-1:-1:-1;30233:55:0;30253:34;30278:8;30253:20;30108:92;30268:4;30253:14;:20::i;30233:55::-;30215:73;;30006:294;;29946:354;30317:67;30364:4;:19;;;30317:42;30354:4;30317:32;30333:15;30317:4;:11;;;:15;;:32;;;;:::i;25349:621::-;3805:13;:11;:13::i;:::-;25534:8:::1;25518:26;;;;;;25504:8;25488:26;;;;;;:56:::0;25480:99:::1;;;::::0;-1:-1:-1;;;25480:99:0;;14043:2:1;25480:99:0::1;::::0;::::1;14025:21:1::0;14082:2;14062:18;;;14055:30;14121:32;14101:18;;;14094:60;14171:18;;25480:99:0::1;13841:354:1::0;25480:99:0::1;25640:16;25624:34;;;;;;25610:8;25594:26;;;;;;:64:::0;25586:107:::1;;;::::0;-1:-1:-1;;;25586:107:0;;14402:2:1;25586:107:0::1;::::0;::::1;14384:21:1::0;14441:2;14421:18;;;14414:30;14480:32;14460:18;;;14453:60;14530:18;;25586:107:0::1;14200:354:1::0;25586:107:0::1;25754:16;25738:34;;;;;;25724:8;25708:26;;;;;;:64:::0;25700:107:::1;;;::::0;-1:-1:-1;;;25700:107:0;;14761:2:1;25700:107:0::1;::::0;::::1;14743:21:1::0;14800:2;14780:18;;;14773:30;14839:32;14819:18;;;14812:60;14889:18;;25700:107:0::1;14559:354:1::0;25700:107:0::1;25817:25;25873:8;25889;25905:16;25852:75;;;;;;;;;;:::i;:::-;;::::0;;-1:-1:-1;;25852:75:0;;::::1;::::0;;;;;;25936:11:::1;:29:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;25936:29:0;;;;25852:75;;-1:-1:-1;25936:29:0;::::1;;25852:75:::0;25936:29;::::1;:::i;32828:271::-:0;32884:7;32928:14;;;:8;:14;;;;;;;;32943:10;32928:26;;;;;;;32987:20;;;;:29;;33010:6;32987:29;:::i;:::-;32969:15;:47;32965:126;;;-1:-1:-1;33044:2:0;;32828:271;-1:-1:-1;;32828:271:0:o;32965:126::-;-1:-1:-1;33090:1:0;;32828:271;-1:-1:-1;;32828:271:0:o;32965:126::-;32893:206;32828:271;;;:::o;25975:168::-;26065:11;:18;26032:13;;26061:22;;26053:54;;;;-1:-1:-1;;;26053:54:0;;;;;;;:::i;:::-;26125:11;26137:1;26125:14;;;;;;;;:::i;31677:1143::-;445:21;:19;:21::i;:::-;31758::::1;31782:8;31791:4;31782:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;31831;;;:8:::1;:14:::0;;;;;;31846:10:::1;31831:26:::0;;;;;;;31782:14:::1;::::0;;::::1;::::0;;::::1;::::0;-1:-1:-1;31870:16:0::1;31840:4:::0;31870:10:::1;:16::i;:::-;31899:15;31917:70;31971:4;:15;;;31917:49;31961:4;31917:39;31933:4;:22;;;31917:4;:11;;;:15;;:39;;;;:::i;:70::-;31899:88;;31998:19;32020:72;32072:4;:19;;;32020:47;32062:4;32020:37;32036:4;:20;;;32020:4;:11;;;:15;;:37;;;;:::i;:72::-;32119:11:::0;;31998:94;;-1:-1:-1;32119:24:0::1;::::0;32135:7;32119:15:::1;:24::i;:::-;32105:38:::0;;32177:15:::1;32154:20;::::0;::::1;:38:::0;32221:15:::1;::::0;::::1;::::0;:28:::1;::::0;32241:7;32221:19:::1;:28::i;:::-;32203:15;::::0;::::1;:46:::0;32294:22:::1;::::0;::::1;::::0;32278:11;;:49:::1;::::0;32322:4:::1;::::0;32278:39:::1;::::0;:15:::1;:39::i;:49::-;32260:15;::::0;::::1;:67:::0;32376:20:::1;::::0;::::1;::::0;32360:11;;:47:::1;::::0;32402:4:::1;::::0;32360:37:::1;::::0;:15:::1;:37::i;:47::-;32338:19;::::0;::::1;:69:::0;32432:21:::1;:11:::0;32448:4:::1;32432:15;:21::i;:::-;32418:35;;32477:1;32467:7;:11;:29;;;;32495:1;32482:11;:14;32467:29;32464:158;;;32513:6;::::0;:44:::1;::::0;-1:-1:-1;;;32513:44:0;;32537:10:::1;32513:44;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;32513:6:0;;::::1;::::0;:23:::1;::::0;13709:18:1;;32513:44:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32572:4:0::1;::::0;:38:::1;::::0;-1:-1:-1;;;32572:38:0;;32586:10:::1;32572:38;::::0;::::1;13736:51:1::0;13803:18;;;13796:34;;;-1:-1:-1;;;;;32572:4:0;;::::1;::::0;-1:-1:-1;32572:13:0::1;::::0;-1:-1:-1;13709:18:1;;32572:38:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32464:158;32632:12:::0;;:74:::1;::::0;-1:-1:-1;;;;;32632:12:0::1;32670:10;32691:4;32698:7:::0;32632:29:::1;:74::i;:::-;32732:12:::0;;32718:42:::1;::::0;-1:-1:-1;;;32718:42:0;;::::1;::::0;::::1;1001:25:1::0;;;-1:-1:-1;;;;;32732:12:0;;::::1;::::0;32718:33:::1;::::0;974:18:1;;32718:42:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;32778:34:0::1;::::0;1001:25:1;;;32798:4:0;;-1:-1:-1;32786:10:0::1;::::0;-1:-1:-1;32778:34:0::1;::::0;989:2:1;974:18;32778:34:0::1;;;;;;;31745:1075;;;;489:20:::0;261:1;1009:22;;826:213;4852:220;3805:13;:11;:13::i;:::-;-1:-1:-1;;;;;4937:22:0;::::1;4933:93;;4983:31;::::0;-1:-1:-1;;;4983:31:0;;5011:1:::1;4983:31;::::0;::::1;4553:51:1::0;4526:18;;4983:31:0::1;4393:217:1::0;4933:93:0::1;5036:28;5055:8;5036:18;:28::i;:::-;4852:220:::0;:::o;4084:166::-;3965:7;3992:6;-1:-1:-1;;;;;3992:6:0;2115:10;4144:23;4140:103;;4191:40;;-1:-1:-1;;;4191:40:0;;2115:10;4191:40;;;4553:51:1;4526:18;;4191:40:0;4393:217:1;8306:98:0;8364:7;8391:5;8395:1;8391;:5;:::i;27220:269::-;27306:8;:15;27289:14;27332:148;27362:6;27355:4;:13;27332:148;;;27427:8;-1:-1:-1;;;;;27401:34:0;:8;27410:4;27401:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:22;-1:-1:-1;;;;;27401:22:0;:34;27393:75;;;;-1:-1:-1;;;27393:75:0;;15120:2:1;27393:75:0;;;15102:21:1;15159:2;15139:18;;;15132:30;15198;15178:18;;;15171:58;15246:18;;27393:75:0;14918:352:1;27393:75:0;27370:6;;27332:148;;;;27278:211;27220:269;:::o;525:293::-;305:1;659:7;;:19;651:63;;;;-1:-1:-1;;;651:63:0;;15477:2:1;651:63:0;;;15459:21:1;15516:2;15496:18;;;15489:30;15555:33;15535:18;;;15528:61;15606:18;;651:63:0;15275:355:1;651:63:0;305:1;792:7;:18;525:293::o;9044:98::-;9102:7;9129:5;9133:1;9129;:5;:::i;9443:98::-;9501:7;9528:5;9532:1;9528;:5;:::i;8687:98::-;8745:7;8772:5;8776:1;8772;:5;:::i;5232:191::-;5306:16;5325:6;;-1:-1:-1;;;;;5342:17:0;;;-1:-1:-1;;;;;;5342:17:0;;;;;;5375:40;;5325:6;;;;;;;5375:40;;5306:16;5375:40;5295:128;5232:191;:::o;17454:190::-;17582:53;;;-1:-1:-1;;;;;12057:15:1;;;17582:53:0;;;12039:34:1;12109:15;;12089:18;;;12082:43;12141:18;;;;12134:34;;;17582:53:0;;;;;;;;;;11974:18:1;;;;17582:53:0;;;;;;;;-1:-1:-1;;;;;17582:53:0;-1:-1:-1;;;17582:53:0;;;17555:81;;17575:5;;17555:19;:81::i;:::-;17454:190;;;;:::o;18771:299::-;18856:23;18882:33;-1:-1:-1;;;;;18882:27:0;;18910:4;18882:27;:33::i;:::-;18856:59;;18930:10;:17;18951:1;18930:22;;:57;;;;;18968:10;18957:30;;;;;;;;;;;;:::i;:::-;18956:31;18930:57;18926:137;;;19011:40;;-1:-1:-1;;;19011:40:0;;-1:-1:-1;;;;;4571:32:1;;19011:40:0;;;4553:51:1;4526:18;;19011:40:0;4393:217:1;13306:153:0;13381:12;13413:38;13435:6;13443:4;13449:1;13381:12;13714;13728:23;13755:6;-1:-1:-1;;;;;13755:11:0;13774:5;13781:4;13755:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13713:73;;;;13804:55;13831:6;13839:7;13848:10;13804:26;:55::i;:::-;13797:62;13469:398;-1:-1:-1;;;;;;13469:398:0:o;14410:427::-;14558:12;14588:7;14583:247;;14612:19;14620:10;14612:7;:19::i;:::-;14583:247;;;14670:17;;:22;:49;;;;-1:-1:-1;;;;;;14696:18:0;;;:23;14670:49;14666:121;;;14747:24;;-1:-1:-1;;;14747:24:0;;-1:-1:-1;;;;;4571:32:1;;14747:24:0;;;4553:51:1;4526:18;;14747:24:0;4393:217:1;14666:121:0;-1:-1:-1;14808:10:0;14801:17;;15088:528;15221:17;;:21;15217:392;;15453:10;15447:17;15510:15;15497:10;15493:2;15489:19;15482:44;15217:392;15580:17;;-1:-1:-1;;;15580:17:0;;;;;;;;;;;14:180:1;73:6;126:2;114:9;105:7;101:23;97:32;94:52;;;142:1;139;132:12;94:52;-1:-1:-1;165:23:1;;14:180;-1:-1:-1;14:180:1:o;199:250::-;284:1;294:113;308:6;305:1;302:13;294:113;;;384:11;;;378:18;365:11;;;358:39;330:2;323:10;294:113;;;-1:-1:-1;;441:1:1;423:16;;416:27;199:250::o;454:396::-;603:2;592:9;585:21;566:4;635:6;629:13;678:6;673:2;662:9;658:18;651:34;694:79;766:6;761:2;750:9;746:18;741:2;733:6;729:15;694:79;:::i;:::-;834:2;813:15;-1:-1:-1;;809:29:1;794:45;;;;841:2;790:54;;454:396;-1:-1:-1;;454:396:1:o;1037:138::-;-1:-1:-1;;;;;1119:31:1;;1109:42;;1099:70;;1165:1;1162;1155:12;1180:430;1276:6;1284;1337:2;1325:9;1316:7;1312:23;1308:32;1305:52;;;1353:1;1350;1343:12;1305:52;1392:9;1379:23;1411:38;1443:5;1411:38;:::i;:::-;1468:5;-1:-1:-1;1525:2:1;1510:18;;1497:32;1538:40;1497:32;1538:40;:::i;:::-;1597:7;1587:17;;;1180:430;;;;;:::o;2195:127::-;2256:10;2251:3;2247:20;2244:1;2237:31;2287:4;2284:1;2277:15;2311:4;2308:1;2301:15;2327:719;2370:5;2423:3;2416:4;2408:6;2404:17;2400:27;2390:55;;2441:1;2438;2431:12;2390:55;2477:6;2464:20;2503:18;2540:2;2536;2533:10;2530:36;;;2546:18;;:::i;:::-;2621:2;2615:9;2589:2;2675:13;;-1:-1:-1;;2671:22:1;;;2695:2;2667:31;2663:40;2651:53;;;2719:18;;;2739:22;;;2716:46;2713:72;;;2765:18;;:::i;:::-;2805:10;2801:2;2794:22;2840:2;2832:6;2825:18;2886:3;2879:4;2874:2;2866:6;2862:15;2858:26;2855:35;2852:55;;;2903:1;2900;2893:12;2852:55;2967:2;2960:4;2952:6;2948:17;2941:4;2933:6;2929:17;2916:54;3014:1;3007:4;3002:2;2994:6;2990:15;2986:26;2979:37;3034:6;3025:15;;;;;;2327:719;;;;:::o;3051:743::-;3158:6;3166;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3283:9;3270:23;3312:18;3353:2;3345:6;3342:14;3339:34;;;3369:1;3366;3359:12;3339:34;3392:50;3434:7;3425:6;3414:9;3410:22;3392:50;:::i;:::-;3382:60;;3495:2;3484:9;3480:18;3467:32;3451:48;;3524:2;3514:8;3511:16;3508:36;;;3540:1;3537;3530:12;3508:36;3563:52;3607:7;3596:8;3585:9;3581:24;3563:52;:::i;:::-;3553:62;;3668:2;3657:9;3653:18;3640:32;3624:48;;3697:2;3687:8;3684:16;3681:36;;;3713:1;3710;3703:12;3681:36;;3736:52;3780:7;3769:8;3758:9;3754:24;3736:52;:::i;:::-;3726:62;;;3051:743;;;;;:::o;3799:248::-;3867:6;3875;3928:2;3916:9;3907:7;3903:23;3899:32;3896:52;;;3944:1;3941;3934:12;3896:52;-1:-1:-1;;3967:23:1;;;4037:2;4022:18;;;4009:32;;-1:-1:-1;3799:248:1:o;4052:336::-;4134:6;4142;4195:2;4183:9;4174:7;4170:23;4166:32;4163:52;;;4211:1;4208;4201:12;4163:52;4247:9;4234:23;4224:33;;4307:2;4296:9;4292:18;4279:32;4320:38;4352:5;4320:38;:::i;5738:254::-;5797:6;5850:2;5838:9;5829:7;5825:23;5821:32;5818:52;;;5866:1;5863;5856:12;5818:52;5905:9;5892:23;5924:38;5956:5;5924:38;:::i;5997:343::-;6199:2;6181:21;;;6238:2;6218:18;;;6211:30;-1:-1:-1;;;6272:2:1;6257:18;;6250:49;6331:2;6316:18;;5997:343::o;6345:127::-;6406:10;6401:3;6397:20;6394:1;6387:31;6437:4;6434:1;6427:15;6461:4;6458:1;6451:15;6477:380;6556:1;6552:12;;;;6599;;;6620:61;;6674:4;6666:6;6662:17;6652:27;;6620:61;6727:2;6719:6;6716:14;6696:18;6693:38;6690:161;;6773:10;6768:3;6764:20;6761:1;6754:31;6808:4;6805:1;6798:15;6836:4;6833:1;6826:15;7945:1284;-1:-1:-1;;;8601:3:1;8594:16;8576:3;8639:6;8633:13;8655:74;8722:6;8718:1;8713:3;8709:11;8702:4;8694:6;8690:17;8655:74;:::i;:::-;8757:6;8752:3;8748:16;8738:26;;-1:-1:-1;;;8815:2:1;8811:1;8807:2;8803:10;8796:22;8849:6;8843:13;8865:75;8931:8;8927:1;8923:2;8919:10;8912:4;8904:6;8900:17;8865:75;:::i;:::-;9000:1;8959:17;;8992:10;;;8985:22;9032:13;;9054:75;9032:13;9116:1;9108:10;;9101:4;9089:17;;9054:75;:::i;:::-;-1:-1:-1;;;9189:1:1;9148:17;;;;9181:10;;;9174:23;9221:1;9213:10;;7945:1284;-1:-1:-1;;;;;7945:1284:1:o;9360:518::-;9462:2;9457:3;9454:11;9451:421;;;9498:5;9495:1;9488:16;9542:4;9539:1;9529:18;9612:2;9600:10;9596:19;9593:1;9589:27;9583:4;9579:38;9648:4;9636:10;9633:20;9630:47;;;-1:-1:-1;9671:4:1;9630:47;9726:2;9721:3;9717:12;9714:1;9710:20;9704:4;9700:31;9690:41;;9781:81;9799:2;9792:5;9789:13;9781:81;;;9858:1;9844:16;;9825:1;9814:13;9781:81;;10054:1345;10180:3;10174:10;10207:18;10199:6;10196:30;10193:56;;;10229:18;;:::i;:::-;10258:97;10348:6;10308:38;10340:4;10334:11;10308:38;:::i;:::-;10302:4;10258:97;:::i;:::-;10410:4;;10467:2;10456:14;;10484:1;10479:663;;;;11186:1;11203:6;11200:89;;;-1:-1:-1;11255:19:1;;;11249:26;11200:89;-1:-1:-1;;10011:1:1;10007:11;;;10003:24;9999:29;9989:40;10035:1;10031:11;;;9986:57;11302:81;;10449:944;;10479:663;9307:1;9300:14;;;9344:4;9331:18;;-1:-1:-1;;10515:20:1;;;10633:236;10647:7;10644:1;10641:14;10633:236;;;10736:19;;;10730:26;10715:42;;10828:27;;;;10796:1;10784:14;;;;10663:19;;10633:236;;;10637:3;10897:6;10888:7;10885:19;10882:201;;;10958:19;;;10952:26;-1:-1:-1;;11041:1:1;11037:14;;;11053:3;11033:24;11029:37;11025:42;11010:58;10995:74;;10882:201;;;11129:1;11120:6;11117:1;11113:14;11109:22;11103:4;11096:36;10449:944;;;;;10054:1345;;:::o;11404:127::-;11465:10;11460:3;11456:20;11453:1;11446:31;11496:4;11493:1;11486:15;11520:4;11517:1;11510:15;11536:128;11603:9;;;11624:11;;;11621:37;;;11638:18;;:::i;11669:125::-;11734:9;;;11755:10;;;11752:36;;;11768:18;;:::i;12179:277::-;12246:6;12299:2;12287:9;12278:7;12274:23;12270:32;12267:52;;;12315:1;12312;12305:12;12267:52;12347:9;12341:16;12400:5;12393:13;12386:21;12379:5;12376:32;12366:60;;12422:1;12419;12412:12;12461:401;12663:2;12645:21;;;12702:2;12682:18;;;12675:30;12741:34;12736:2;12721:18;;12714:62;-1:-1:-1;;;12807:2:1;12792:18;;12785:35;12852:3;12837:19;;12461:401::o;15635:168::-;15708:9;;;15739;;15756:15;;;15750:22;;15736:37;15726:71;;15777:18;;:::i;15808:217::-;15848:1;15874;15864:132;;15918:10;15913:3;15909:20;15906:1;15899:31;15953:4;15950:1;15943:15;15981:4;15978:1;15971:15;15864:132;-1:-1:-1;16010:9:1;;15808:217::o;16030:287::-;16159:3;16197:6;16191:13;16213:66;16272:6;16267:3;16260:4;16252:6;16248:17;16213:66;:::i;:::-;16295:16;;;;;16030:287;-1:-1:-1;;16030:287:1:o

Swarm Source

ipfs://8bc94b018404b3d8bcee8d45f0e7e85c0bcaded0f5c73febace0650f2f20d8da

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.