ETH Price: $2,380.10 (+1.17%)

Contract

0xf05c78A63e6CC1F6AdF338dea16B8778e3D5Ef8a
 

Overview

ETH Balance

0.29792959394307745 ETH

Eth Value

$709.10 (@ $2,380.10/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Un Stake196206292024-04-09 21:01:23177 days ago1712696483IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0022737921.3347723
Claim Staking Re...196206262024-04-09 21:00:47177 days ago1712696447IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0025156622.66506075
Claim Staking Re...193965012024-03-09 8:59:11209 days ago1709974751IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0034648445.11926776
Claim Staking Re...193901742024-03-08 11:32:59209 days ago1709897579IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0128669351.82305066
Claim Staking Re...193872322024-03-08 1:40:47210 days ago1709862047IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0054460549.06661473
Claim Staking Re...193835342024-03-07 13:16:35210 days ago1709817395IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.004833962.94727321
Claim Staking Re...193834872024-03-07 13:07:11210 days ago1709816831IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0049998765.10843455
Claim Staking Re...193834492024-03-07 12:59:23210 days ago1709816363IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0037308848.58365457
Claim Staking Re...193833342024-03-07 12:36:23210 days ago1709814983IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0024252944.61129359
Claim Staking Re...193833302024-03-07 12:35:35210 days ago1709814935IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0035224545.86951849
Claim Staking Re...193830332024-03-07 11:35:35210 days ago1709811335IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0068315753.3329408
Claim Staking Re...193826872024-03-07 10:26:11210 days ago1709807171IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0054067648.71268696
Claim Staking Re...193679012024-03-05 8:54:47213 days ago1709628887IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0050955266.35398628
Claim Staking Re...193678652024-03-05 8:47:35213 days ago1709628455IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0050652965.96032638
Claim Staking Re...193678542024-03-05 8:45:23213 days ago1709628323IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0049055163.87965801
Claim Staking Re...193678452024-03-05 8:43:35213 days ago1709628215IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0072207465.05583188
Claim Staking Re...193602402024-03-04 7:15:23214 days ago1709536523IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0039985652.06937847
Claim Staking Re...193419352024-03-01 17:51:59216 days ago1709315519IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0065388558.91236373
Claim Staking Re...193417982024-03-01 17:24:35216 days ago1709313875IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0095007265.361776
Pause193417092024-03-01 17:06:47216 days ago1709312807IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0020482973.8602238
Transfer193416642024-03-01 16:57:35216 days ago1709312255IN
0xf05c78A6...8e3D5Ef8a
0.81679601 ETH0.00523675138.62282423
Claim Staking Re...193407392024-03-01 13:51:59216 days ago1709301119IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0066531759.94231171
Un Stake192884062024-02-23 6:08:35224 days ago1708668515IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0088470829.21218367
Claim Staking Re...192140902024-02-12 19:40:47234 days ago1707766847IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0050298445.31680379
Stake192030242024-02-11 6:23:47236 days ago1707632627IN
0xf05c78A6...8e3D5Ef8a
0 ETH0.0088401923.03116943
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
196206262024-04-09 21:00:47177 days ago1712696447
0xf05c78A6...8e3D5Ef8a
0.01104367 ETH
193965012024-03-09 8:59:11209 days ago1709974751
0xf05c78A6...8e3D5Ef8a
0.07251187 ETH
193901742024-03-08 11:32:59209 days ago1709897579
0xf05c78A6...8e3D5Ef8a
0.04925189 ETH
193872322024-03-08 1:40:47210 days ago1709862047
0xf05c78A6...8e3D5Ef8a
0.05359883 ETH
193835342024-03-07 13:16:35210 days ago1709817395
0xf05c78A6...8e3D5Ef8a
0.07610774 ETH
193834872024-03-07 13:07:11210 days ago1709816831
0xf05c78A6...8e3D5Ef8a
0.09810755 ETH
193834492024-03-07 12:59:23210 days ago1709816363
0xf05c78A6...8e3D5Ef8a
0.0853144 ETH
193833302024-03-07 12:35:35210 days ago1709814935
0xf05c78A6...8e3D5Ef8a
0.09386639 ETH
193830332024-03-07 11:35:35210 days ago1709811335
0xf05c78A6...8e3D5Ef8a
0.04915556 ETH
193826872024-03-07 10:26:11210 days ago1709807171
0xf05c78A6...8e3D5Ef8a
0.05225385 ETH
193679012024-03-05 8:54:47213 days ago1709628887
0xf05c78A6...8e3D5Ef8a
0.05586057 ETH
193678652024-03-05 8:47:35213 days ago1709628455
0xf05c78A6...8e3D5Ef8a
0.08778156 ETH
193678542024-03-05 8:45:23213 days ago1709628323
0xf05c78A6...8e3D5Ef8a
0.05813422 ETH
193678452024-03-05 8:43:35213 days ago1709628215
0xf05c78A6...8e3D5Ef8a
0.08192589 ETH
193602402024-03-04 7:15:23214 days ago1709536523
0xf05c78A6...8e3D5Ef8a
0.05821457 ETH
193419352024-03-01 17:51:59216 days ago1709315519
0xf05c78A6...8e3D5Ef8a
0.10188252 ETH
193417982024-03-01 17:24:35216 days ago1709313875
0xf05c78A6...8e3D5Ef8a
0.05169478 ETH
193407392024-03-01 13:51:59216 days ago1709301119
0xf05c78A6...8e3D5Ef8a
0.14008436 ETH
192884062024-02-23 6:08:35224 days ago1708668515
0xf05c78A6...8e3D5Ef8a
0.03481137 ETH
192140902024-02-12 19:40:47234 days ago1707766847
0xf05c78A6...8e3D5Ef8a
0.11062269 ETH
191422962024-02-02 17:47:47244 days ago1706896067
0xf05c78A6...8e3D5Ef8a
0.08633327 ETH
191417172024-02-02 15:51:35244 days ago1706889095
0xf05c78A6...8e3D5Ef8a
0.01685029 ETH
191412142024-02-02 14:10:23244 days ago1706883023
0xf05c78A6...8e3D5Ef8a
0.00474919 ETH
191406482024-02-02 12:15:47244 days ago1706876147
0xf05c78A6...8e3D5Ef8a
0.00713466 ETH
191138612024-01-29 18:06:11248 days ago1706551571
0xf05c78A6...8e3D5Ef8a
0.10854256 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DesmeStaking

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-29
*/

// 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/utils/Pausable.sol

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

pragma solidity ^0.8.20;

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

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

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

    /**
     * @dev The operation failed because the contract is paused.
     */
    error EnforcedPause();

    /**
     * @dev The operation failed because the contract is not paused.
     */
    error ExpectedPause();

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

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

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

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

    /**
     * @dev Throws if the contract is paused.
     */
    function _requireNotPaused() internal view virtual {
        if (paused()) {
            revert EnforcedPause();
        }
    }

    /**
     * @dev Throws if the contract is not paused.
     */
    function _requirePaused() internal view virtual {
        if (!paused()) {
            revert ExpectedPause();
        }
    }

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

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

// File: @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/token/ERC20/IERC20.sol

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

pragma solidity ^0.8.20;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );

    /**
     * @dev Returns the value of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the value of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves a `value` amount of tokens from the caller's account to `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, uint256 value) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    /**
     * @dev Sets a `value` amount of tokens as the allowance of `spender` over the
     * caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 value) external returns (bool);

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);
}

//SPDX-License-Identifier: MIT

interface IERC20EXT {
    function decimals() external view returns (uint8);
}

struct StructAccount {
    address selfAddress;
    uint256 totalValueStaked;
    uint256 stakingRewardsClaimed;
    uint256 pendingStakingRewards;
    uint256[] stakingIds;
}

struct StructStaking {
    bool isActive;
    address owner;
    uint256 stakingId;
    uint256 valueStaked;
    uint256 startTime;
    uint256 stakingRewardClaimed;
    uint256 initialRewards;
    uint256 calStartTime;
}

contract DesmeStaking is Ownable, Pausable {
    address[] private _users;
    uint256 private _totalStakingRewardsDistributed;

    uint256 private _stakingsCount;

    uint256 private _calStakingReward;
    uint256 private _valueStaked;

    uint256 private _lastTimeRewardDistributed;
    uint256 private _carryForwardBalance;

    address private _tokenAddress;

    bool private _noReentrancy;

    mapping(address => StructAccount) private _mappingAccounts;
    mapping(uint256 => StructStaking) private _mappingStakings;

    event SelfAddressUpdated(address newAddress);

    event Stake(uint256 value, uint256 stakingId);
    event UnStake(uint256 value);

    event ClaimedStakingReward(uint256 value);
    event DistributeStakingReward(uint256 value);
    event ClaimCarryForwardBalance(address receiver, uint256 value);

    event ContractPaused(bool isPaused);

    modifier noReentrancy() {
        require(!_noReentrancy, "Reentrancy attack.");
        _noReentrancy = true;
        _;
        _noReentrancy = false;
    }

    receive() external payable {
        distributeStakingRewards();
    }

    constructor(address initialOwner) Ownable(initialOwner) {
        uint256 currentTime = block.timestamp;
        _lastTimeRewardDistributed = currentTime;
    }

    function _updateUserAddress(
        StructAccount storage _userAccount,
        address _userAddress
    ) private {
        _userAccount.selfAddress = _userAddress;
        emit SelfAddressUpdated(_userAddress);
    }

    function _updateCalStakingReward(
        StructStaking storage stakingAccount,
        uint256 _value
    ) private {
        if (_calStakingReward > 0) {
            uint256 stakingReward = (_calStakingReward * _value) / _valueStaked;

            stakingAccount.initialRewards += stakingReward;
            _calStakingReward += stakingReward;
        }
    }

    function _stake(address _userAddress, uint256 _value) private {
        require(
            _userAddress != address(0),
            "_stake(): AddressZero cannot stake."
        );
        require(_value > 0, "_stake(): Value should be greater than zero.");

        StructAccount storage userAccount = _mappingAccounts[_userAddress];
        uint256 currentStakingId = _stakingsCount;

        if (userAccount.selfAddress == address(0)) {
            _updateUserAddress(userAccount, _userAddress);
            _users.push(_userAddress);
        }

        userAccount.stakingIds.push(currentStakingId);
        userAccount.totalValueStaked += _value;

        StructStaking storage stakingAccount = _mappingStakings[
            currentStakingId
        ];

        stakingAccount.isActive = true;
        stakingAccount.owner = _userAddress;
        stakingAccount.stakingId = currentStakingId;
        stakingAccount.valueStaked = _value;
        stakingAccount.startTime = block.timestamp;
        stakingAccount.calStartTime = _lastTimeRewardDistributed;

        _updateCalStakingReward(stakingAccount, _value);

        _valueStaked += _value;
        _stakingsCount++;

        emit Stake(_value, currentStakingId);
    }

    function stake(address _userAddress, uint256 _valueInWei)
        external
        whenNotPaused
    {
        bool sent = IERC20(_tokenAddress).transferFrom(
            msg.sender,
            address(this),
            _toTokens(_tokenAddress, _valueInWei)
        );

        require(sent, "unStake(): Tokens not transfered");

        _stake(_userAddress, _valueInWei);
    }

    function _getStakingRewardsById(StructStaking memory stakingAccount)
        private
        view
        returns (
            uint256 userStakingReward,
            uint256 rewardClaimable,
            uint256 carryForwardBalance
        )
    {
        if (
            _calStakingReward > 0 &&
            stakingAccount.isActive &&
            stakingAccount.calStartTime < _lastTimeRewardDistributed
        ) {
            userStakingReward =
                ((_calStakingReward * stakingAccount.valueStaked) /
                    _valueStaked) -
                (stakingAccount.stakingRewardClaimed +
                    stakingAccount.initialRewards);

            if (userStakingReward > 0) {
                carryForwardBalance = ((userStakingReward *
                    (stakingAccount.startTime - stakingAccount.calStartTime)) /
                    (_lastTimeRewardDistributed - stakingAccount.calStartTime));

                rewardClaimable = userStakingReward - carryForwardBalance;
            }
        }
    }

    function getStakingRewardsById(uint256 _stakingId)
        external
        view
        returns (
            uint256 userStakingReward,
            uint256 rewardClaimable,
            uint256 carryForwardBalance
        )
    {
        return _getStakingRewardsById(_mappingStakings[_stakingId]);
    }

    function _getUserAllStakingRewards(StructAccount memory userAccount)
        private
        view
        returns (
            uint256 userTotalStakingReward,
            uint256 totalRewardClaimable,
            uint256 totalCarryForwardBalance
        )
    {
        uint256[] memory userStakingIds = userAccount.stakingIds;

        for (uint256 i; i < userStakingIds.length; ++i) {
            StructStaking memory stakingAccount = _mappingStakings[
                userStakingIds[i]
            ];

            if (stakingAccount.isActive) {
                (
                    uint256 userStakingReward,
                    uint256 rewardClaimable,
                    uint256 carryForwardBalance
                ) = _getStakingRewardsById(stakingAccount);

                userTotalStakingReward += userStakingReward;
                totalRewardClaimable += rewardClaimable;
                totalCarryForwardBalance += carryForwardBalance;
            }
        }
    }

    function getUserStakingRewards(address _userAddress)
        external
        view
        returns (
            uint256 userTotalStakingReward,
            uint256 rewardClaimable,
            uint256 carryForwardBalance
        )
    {
        StructAccount memory userAccount = _mappingAccounts[_userAddress];

        return _getUserAllStakingRewards(userAccount);
    }

    function _claimUserStakingReward(address _userAddress)
        private
        returns (uint256 totalRewardClaimable, uint256 totalCarryForwardBalance)
    {
        StructAccount storage userAccount = _mappingAccounts[_userAddress];
        require(
            userAccount.stakingIds.length > 0,
            "_claimStakingReward(): You have no stakings"
        );

        for (uint256 i; i < userAccount.stakingIds.length; ++i) {
            StructStaking storage stakingAccount = _mappingStakings[
                userAccount.stakingIds[i]
            ];

            require(
                stakingAccount.owner == _userAddress,
                "You are not the owner of this staking."
            );

            if (stakingAccount.isActive) {
                (
                    ,
                    uint256 rewardClaimable,
                    uint256 carryForwardBalance
                ) = _getStakingRewardsById(stakingAccount);

                if (rewardClaimable > 0) {
                    stakingAccount.stakingRewardClaimed += rewardClaimable;
                    totalRewardClaimable += rewardClaimable;
                }

                if (carryForwardBalance > 0) {
                    stakingAccount.initialRewards += carryForwardBalance;
                    totalCarryForwardBalance += carryForwardBalance;
                }
            }
        }

        if (totalRewardClaimable > 0) {
            userAccount.stakingRewardsClaimed += totalRewardClaimable;
            _carryForwardBalance += totalCarryForwardBalance;

            emit ClaimedStakingReward(totalRewardClaimable);
        }
    }

    function claimStakingReward(address _userAddress) external noReentrancy {
        (uint256 rewardClaimable, ) = _claimUserStakingReward(_userAddress);

        require(
            rewardClaimable > 0,
            "_claimUserStakingReward(): No rewards to claim."
        );

        uint256 ethBalanceThis = address(this).balance;

        require(
            ethBalanceThis >= rewardClaimable,
            "claimStakingReward(): Contract has less balance to pay."
        );

        (bool status, ) = payable(_userAddress).call{value: rewardClaimable}(
            ""
        );
        require(status, "claimStakingReward(): Reward ETH Not transfered.");
    }

    function _unStake(address _userAddress)
        private
        returns (uint256 tokenUnStaked, uint256 stakingRewardClaimed)
    {
        StructAccount storage userAccount = _mappingAccounts[_userAddress];

        require(
            userAccount.stakingIds.length > 0,
            "_claimStakingReward(): You have no stakings"
        );

        (uint256 rewardClaimable, ) = _claimUserStakingReward(_userAddress);

        if (rewardClaimable > 0) {
            stakingRewardClaimed += rewardClaimable;
        }

        userAccount.totalValueStaked = 0;
        uint256 calRewards;

        for (uint256 i; i < userAccount.stakingIds.length; ++i) {
            StructStaking storage stakingAccount = _mappingStakings[
                userAccount.stakingIds[i]
            ];

            require(
                stakingAccount.owner == _userAddress,
                "You are not the owner of this staking."
            );

            if (stakingAccount.isActive) {
                stakingAccount.isActive = false;
                tokenUnStaked += stakingAccount.valueStaked;
                calRewards += stakingAccount.stakingRewardClaimed;
                calRewards += stakingAccount.initialRewards;
            }
        }

        require(tokenUnStaked > 0, "_unstake(): No value to unStake.");

        _calStakingReward -= calRewards;

        _valueStaked -= tokenUnStaked;
        emit UnStake(tokenUnStaked);
    }

    function unStake() external {
        address msgSender = msg.sender;
        (uint256 tokenUnStaked, uint256 stakingRewardClaimed) = _unStake(
            msgSender
        );

        if (tokenUnStaked > 0) {
            bool sent = IERC20(_tokenAddress).transfer(
                msgSender,
                _toTokens(_tokenAddress, tokenUnStaked)
            );

            require(sent, "unStake(): Tokens not transfered");
        }

        if (stakingRewardClaimed > 0) {
            (bool status, ) = payable(msgSender).call{
                value: stakingRewardClaimed
            }("");
            require(status, "unstake(): Reward not transfered.");
        }
    }

    function distributeStakingRewards() public payable {
        uint256 msgValue = msg.value;

        require(
            msgValue > 0,
            "distributeStakingRewards(): Reward must be greater than zero."
        );

        if (_carryForwardBalance > 0) {
            msgValue += _carryForwardBalance;
            delete _carryForwardBalance;
        }

        _calStakingReward += msgValue;
        _lastTimeRewardDistributed = block.timestamp;
        _totalStakingRewardsDistributed += msgValue;

        emit DistributeStakingReward(msgValue);
    }

    function getUsersParticipatedList()
        external
        view
        returns (address[] memory)
    {
        return _users;
    }

    function getUserShare(address _userAddress)
        external
        view
        returns (uint256 userShare)
    {
        StructAccount memory userAccount = _mappingAccounts[_userAddress];

        userShare =
            (userAccount.totalValueStaked * 100 * 1 ether) /
            _valueStaked;
    }

    function getContractDefault() external view returns (address tokenAddress) {
        tokenAddress = _tokenAddress;
    }

    function setTokenAddress(address tokenAddress_) external onlyOwner {
        _tokenAddress = tokenAddress_;
    }

    function getContractAnalytics()
        external
        view
        returns (
            uint256 usersCount,
            uint256 stakingsCount,
            uint256 totalStakingRewardsDistributed,
            uint256 calStakingReward,
            uint256 valueStaked,
            uint256 lastTimeRewardDistributed,
            uint256 carryForwardBalance
        )
    {
        usersCount = _users.length;
        stakingsCount = _stakingsCount;
        totalStakingRewardsDistributed = _totalStakingRewardsDistributed;
        calStakingReward = _calStakingReward;
        valueStaked = _valueStaked;
        lastTimeRewardDistributed = _lastTimeRewardDistributed;
        carryForwardBalance = _carryForwardBalance;
    }

    function getUserAccount(address _userAddress)
        external
        view
        returns (StructAccount memory)
    {
        return _mappingAccounts[_userAddress];
    }

    function getStakingById(uint256 _stakingId)
        external
        view
        returns (StructStaking memory)
    {
        return _mappingStakings[_stakingId];
    }

    function _toTokens(address tokenAddress_, uint256 _valueInWei)
        private
        view
        returns (uint256 valueInTokens)
    {
        valueInTokens =
            (_valueInWei * 10**IERC20EXT(tokenAddress_).decimals()) /
            1 ether;
    }

    function _toWei(address _tokenAddress_, uint256 _valueInTokens)
        private
        view
        returns (uint256 valueInWei)
    {
        valueInWei =
            (_valueInTokens * 1 ether) /
            10**IERC20EXT(_tokenAddress_).decimals();
    }

    function claimCarryForwardBalance(address _userAddress) external onlyOwner {
        uint256 carryForwardBalance = _carryForwardBalance;
        require(
            carryForwardBalance > 0,
            "claimCarryForwardBalance(): Balance must be above zero."
        );

        (bool sent, ) = payable(_userAddress).call{value: carryForwardBalance}(
            ""
        );
        require(sent, "claimCarryForwardBalance(): ETH Not transfered.");
        delete _carryForwardBalance;

        emit ClaimCarryForwardBalance(_userAddress, carryForwardBalance);
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"initialOwner","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"EnforcedPause","type":"error"},{"inputs":[],"name":"ExpectedPause","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"OwnableInvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"OwnableUnauthorizedAccount","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ClaimCarryForwardBalance","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"ClaimedStakingReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"isPaused","type":"bool"}],"name":"ContractPaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"DistributeStakingReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"newAddress","type":"address"}],"name":"SelfAddressUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"stakingId","type":"uint256"}],"name":"Stake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"UnStake","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"claimCarryForwardBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"claimStakingReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"distributeStakingRewards","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"getContractAnalytics","outputs":[{"internalType":"uint256","name":"usersCount","type":"uint256"},{"internalType":"uint256","name":"stakingsCount","type":"uint256"},{"internalType":"uint256","name":"totalStakingRewardsDistributed","type":"uint256"},{"internalType":"uint256","name":"calStakingReward","type":"uint256"},{"internalType":"uint256","name":"valueStaked","type":"uint256"},{"internalType":"uint256","name":"lastTimeRewardDistributed","type":"uint256"},{"internalType":"uint256","name":"carryForwardBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getContractDefault","outputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"getStakingById","outputs":[{"components":[{"internalType":"bool","name":"isActive","type":"bool"},{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"stakingId","type":"uint256"},{"internalType":"uint256","name":"valueStaked","type":"uint256"},{"internalType":"uint256","name":"startTime","type":"uint256"},{"internalType":"uint256","name":"stakingRewardClaimed","type":"uint256"},{"internalType":"uint256","name":"initialRewards","type":"uint256"},{"internalType":"uint256","name":"calStartTime","type":"uint256"}],"internalType":"struct StructStaking","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_stakingId","type":"uint256"}],"name":"getStakingRewardsById","outputs":[{"internalType":"uint256","name":"userStakingReward","type":"uint256"},{"internalType":"uint256","name":"rewardClaimable","type":"uint256"},{"internalType":"uint256","name":"carryForwardBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getUserAccount","outputs":[{"components":[{"internalType":"address","name":"selfAddress","type":"address"},{"internalType":"uint256","name":"totalValueStaked","type":"uint256"},{"internalType":"uint256","name":"stakingRewardsClaimed","type":"uint256"},{"internalType":"uint256","name":"pendingStakingRewards","type":"uint256"},{"internalType":"uint256[]","name":"stakingIds","type":"uint256[]"}],"internalType":"struct StructAccount","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getUserShare","outputs":[{"internalType":"uint256","name":"userShare","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"}],"name":"getUserStakingRewards","outputs":[{"internalType":"uint256","name":"userTotalStakingReward","type":"uint256"},{"internalType":"uint256","name":"rewardClaimable","type":"uint256"},{"internalType":"uint256","name":"carryForwardBalance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUsersParticipatedList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress_","type":"address"}],"name":"setTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_userAddress","type":"address"},{"internalType":"uint256","name":"_valueInWei","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unStake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405234801562000010575f80fd5b5060405162001fa938038062001fa98339810160408190526200003391620000d4565b806001600160a01b0381166200006257604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200006d8162000085565b50505f805460ff60a01b191690554260065562000103565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215620000e5575f80fd5b81516001600160a01b0381168114620000fc575f80fd5b9392505050565b611e9880620001115f395ff3fe60806040526004361061011e575f3560e01c806383b41e661161009d578063adc9772e11610062578063adc9772e14610397578063bbbaee4c146103b6578063f2fde38b146103e3578063f4da319914610402578063fb47e01614610421575f80fd5b806383b41e661461026a5780638456cb59146102c05780638da5cb5b146102d45780639e5d9cd2146102f0578063a0e3f8f214610311575f80fd5b806340cba8a0116100e357806340cba8a0146101dc57806350aee08d146101fb5780635c975abb1461021a578063715018a61461024257806373cf575a14610256575f80fd5b80630adc0c2c1461013157806323ca0eb01461017057806326a4e8d214610178578063309a8f8d146101975780633f4ba83a146101c8575f80fd5b3661012d5761012b61044d565b005b5f80fd5b34801561013c575f80fd5b5061015061014b366004611ac3565b61054b565b604080519384526020840192909252908201526060015b60405180910390f35b61012b61044d565b348015610183575f80fd5b5061012b610192366004611af5565b6105d8565b3480156101a2575f80fd5b506008546001600160a01b03165b6040516001600160a01b039091168152602001610167565b3480156101d3575f80fd5b5061012b610602565b3480156101e7575f80fd5b5061012b6101f6366004611af5565b610614565b348015610206575f80fd5b5061012b610215366004611af5565b610794565b348015610225575f80fd5b505f54600160a01b900460ff166040519015158152602001610167565b34801561024d575f80fd5b5061012b6109ac565b348015610261575f80fd5b5061012b6109bd565b348015610275575f80fd5b50600154600354600254600454600554600654600754604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610167565b3480156102cb575f80fd5b5061012b610b65565b3480156102df575f80fd5b505f546001600160a01b03166101b0565b3480156102fb575f80fd5b50610304610b75565b6040516101679190611b0e565b34801561031c575f80fd5b5061033061032b366004611ac3565b610bd5565b60405161016791908151151581526020808301516001600160a01b03169082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e091820151918101919091526101000190565b3480156103a2575f80fd5b5061012b6103b1366004611b5a565b610c99565b3480156103c1575f80fd5b506103d56103d0366004611af5565b610d8e565b604051908152602001610167565b3480156103ee575f80fd5b5061012b6103fd366004611af5565b610e69565b34801561040d575f80fd5b5061015061041c366004611af5565b610ea6565b34801561042c575f80fd5b5061044061043b366004611af5565b610f63565b6040516101679190611b82565b34806104c65760405162461bcd60e51b815260206004820152603d60248201527f646973747269627574655374616b696e675265776172647328293a205265776160448201527f7264206d7573742062652067726561746572207468616e207a65726f2e00000060648201526084015b60405180910390fd5b600754156104e2576007546104db9082611c16565b5f60075590505b8060045f8282546104f39190611c16565b909155505042600655600280548291905f90610510908490611c16565b90915550506040518181527fcb85a20151ba0100ff8fdc798814296495ac8af2552b7fb99ce1da63e5d94be89060200160405180910390a150565b5f818152600a6020908152604080832081516101008082018452825460ff811615158352046001600160a01b0316938101939093526001810154918301919091526002810154606083015260038101546080830152600481015460a0830152600581015460c08301526006015460e0820152819081906105ca9061103d565b9250925092505b9193909250565b6105e06110f9565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61060a6110f9565b610612611125565b565b61061c6110f9565b600754806106925760405162461bcd60e51b815260206004820152603760248201527f636c61696d4361727279466f727761726442616c616e636528293a2042616c6160448201527f6e6365206d7573742062652061626f7665207a65726f2e00000000000000000060648201526084016104bd565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146106db576040519150601f19603f3d011682016040523d82523d5f602084013e6106e0565b606091505b50509050806107495760405162461bcd60e51b815260206004820152602f60248201527f636c61696d4361727279466f727761726442616c616e636528293a204554482060448201526e2737ba103a3930b739b332b932b21760891b60648201526084016104bd565b5f600755604080516001600160a01b0385168152602081018490527f7f2ae5ea0eceace153024cb17f16195815248fdcf2bac0507608a46c90da53d7910160405180910390a1505050565b600854600160a01b900460ff16156107e35760405162461bcd60e51b81526020600482015260126024820152712932b2b73a3930b731bc9030ba3a30b1b59760711b60448201526064016104bd565b6008805460ff60a01b1916600160a01b1790555f61080082611179565b5090505f811161086a5760405162461bcd60e51b815260206004820152602f60248201527f5f636c61696d557365725374616b696e6752657761726428293a204e6f20726560448201526e3bb0b93239903a379031b630b4b69760891b60648201526084016104bd565b47818110156108e15760405162461bcd60e51b815260206004820152603760248201527f636c61696d5374616b696e6752657761726428293a20436f6e7472616374206860448201527f6173206c6573732062616c616e636520746f207061792e00000000000000000060648201526084016104bd565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461092a576040519150601f19603f3d011682016040523d82523d5f602084013e61092f565b606091505b50509050806109995760405162461bcd60e51b815260206004820152603060248201527f636c61696d5374616b696e6752657761726428293a205265776172642045544860448201526f102737ba103a3930b739b332b932b21760811b60648201526084016104bd565b50506008805460ff60a01b191690555050565b6109b46110f9565b6106125f61138f565b335f806109c9836113de565b90925090508115610aaf576008545f906001600160a01b031663a9059cbb856109f283876115d1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610a3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5e9190611c2f565b905080610aad5760405162461bcd60e51b815260206004820181905260248201527f756e5374616b6528293a20546f6b656e73206e6f74207472616e73666572656460448201526064016104bd565b505b8015610b60575f836001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610afe576040519150601f19603f3d011682016040523d82523d5f602084013e610b03565b606091505b5050905080610b5e5760405162461bcd60e51b815260206004820152602160248201527f756e7374616b6528293a20526577617264206e6f74207472616e7366657265646044820152601760f91b60648201526084016104bd565b505b505050565b610b6d6110f9565b610612611650565b60606001805480602002602001604051908101604052809291908181526020018280548015610bcb57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610bad575b5050505050905090565b610c206040518061010001604052805f151581526020015f6001600160a01b031681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b505f908152600a602090815260409182902082516101008082018552825460ff811615158352046001600160a01b0316928101929092526001810154928201929092526002820154606082015260038201546080820152600482015460a0820152600582015460c082015260069091015460e082015290565b610ca1611692565b6008545f906001600160a01b03166323b872dd3330610cc084876115d1565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015610d11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d359190611c2f565b905080610d845760405162461bcd60e51b815260206004820181905260248201527f756e5374616b6528293a20546f6b656e73206e6f74207472616e73666572656460448201526064016104bd565b610b6083836116bc565b6001600160a01b038082165f908152600960209081526040808320815160a08101835281549095168552600181015485840152600281015485830152600381015460608601526004810180548351818602810186019094528084529495869590949293608086019390929190830182828015610e2757602002820191905f5260205f20905b815481526020019060010190808311610e13575b505050505081525050905060055481602001516064610e469190611c4e565b610e5890670de0b6b3a7640000611c4e565b610e629190611c65565b9392505050565b610e716110f9565b6001600160a01b038116610e9a57604051631e4fbdf760e01b81525f60048201526024016104bd565b610ea38161138f565b50565b6001600160a01b038082165f908152600960209081526040808320815160a081018352815490951685526001810154858401526002810154858301526003810154606086015260048101805483518186028101860190945280845294958695869586959294936080860193929091830182828015610f4157602002820191905f5260205f20905b815481526020019060010190808311610f2d575b5050505050815250509050610f55816118ec565b935093509350509193909250565b610f9a6040518060a001604052805f6001600160a01b031681526020015f81526020015f81526020015f8152602001606081525090565b6001600160a01b038083165f90815260096020908152604091829020825160a08101845281549094168452600181015484830152600281015484840152600381015460608501526004810180548451818502810185019095528085529193608086019390929083018282801561102d57602002820191905f5260205f20905b815481526020019060010190808311611019575b5050505050815250509050919050565b5f805f8060045411801561104f575083515b801561106057506006548460e00151105b156105d1578360c001518460a001516110799190611c16565b600554856060015160045461108e9190611c4e565b6110989190611c65565b6110a29190611c84565b925082156105d1578360e001516006546110bc9190611c84565b8460e0015185608001516110d09190611c84565b6110da9085611c4e565b6110e49190611c65565b90506110f08184611c84565b91509193909250565b5f546001600160a01b031633146106125760405163118cdaa760e01b81523360048201526024016104bd565b61112d6119ec565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f90815260096020526040812060048101548291906111b45760405162461bcd60e51b81526004016104bd90611c97565b5f5b600482015481101561131e575f600a5f8460040184815481106111db576111db611ce2565b905f5260205f20015481526020019081526020015f209050856001600160a01b0316815f0160019054906101000a90046001600160a01b03166001600160a01b03161461123a5760405162461bcd60e51b81526004016104bd90611cf6565b805460ff161561131557604080516101008082018352835460ff811615158352046001600160a01b031660208201526001830154918101919091526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201525f9081906112b49061103d565b90935091505081156112e65781836004015f8282546112d39190611c16565b909155506112e390508288611c16565b96505b80156113125780836005015f8282546112ff9190611c16565b9091555061130f90508187611c16565b95505b50505b506001016111b6565b5082156113895782816002015f8282546113389190611c16565b925050819055508160075f8282546113509190611c16565b90915550506040518381527fa8c6b8e354c4fcddb94967f79e85ec5a2b27add43447bd915f479e684e8a20499060200160405180910390a15b50915091565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381165f90815260096020526040812060048101548291906114195760405162461bcd60e51b81526004016104bd90611c97565b5f61142385611179565b5090508015611439576114368184611c16565b92505b5f60018301819055805b6004840154811015611518575f600a5f86600401848154811061146857611468611ce2565b905f5260205f20015481526020019081526020015f209050876001600160a01b0316815f0160019054906101000a90046001600160a01b03166001600160a01b0316146114c75760405162461bcd60e51b81526004016104bd90611cf6565b805460ff161561150f57805460ff1916815560028101546114e89088611c16565b96508060040154836114fa9190611c16565b925080600501548361150c9190611c16565b92505b50600101611443565b505f85116115685760405162461bcd60e51b815260206004820181905260248201527f5f756e7374616b6528293a204e6f2076616c756520746f20756e5374616b652e60448201526064016104bd565b8060045f8282546115799190611c84565b925050819055508460055f8282546115919190611c84565b90915550506040518581527f603af6cb36e852311201ebb828cda2d49c5dc06d9d14a04ecd5e4211308625aa9060200160405180910390a1505050915091565b5f670de0b6b3a7640000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163b9190611d3c565b61164690600a611e3c565b610e589084611c4e565b611658611692565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861115c3390565b5f54600160a01b900460ff16156106125760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03821661171e5760405162461bcd60e51b815260206004820152602360248201527f5f7374616b6528293a20416464726573735a65726f2063616e6e6f742073746160448201526235b29760e91b60648201526084016104bd565b5f81116117825760405162461bcd60e51b815260206004820152602c60248201527f5f7374616b6528293a2056616c75652073686f756c642062652067726561746560448201526b39103a3430b7103d32b9379760a11b60648201526084016104bd565b6001600160a01b038083165f908152600960205260409020600354815491929091166117fc576117b28285611a15565b6001805480820182555f919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0386161790555b600482018054600181810183555f9283526020832090910183905583018054859290611829908490611c16565b90915550505f818152600a60205260409020805460016001600160a81b03199091166101006001600160a01b03881602178117825581018290556002810184905542600382015560068054908201556118828185611a67565b8360055f8282546118939190611c16565b909155505060038054905f6118a783611e4a565b909155505060408051858152602081018490527fc9ec05ea5037818736839e1365dc3d9a74a735c447af0697da66633b7a9d0fab910160405180910390a15050505050565b5f805f80846080015190505f5b81518110156119e3575f600a5f84848151811061191857611918611ce2565b60209081029190910181015182528181019290925260409081015f2081516101008082018452825460ff811615801584529190046001600160a01b0316948201949094526001820154928101929092526002810154606083015260038101546080830152600481015460a0830152600581015460c08301526006015460e082015291506119da575f805f6119ab8461103d565b919450925090506119bc838a611c16565b98506119c88289611c16565b97506119d48188611c16565b96505050505b506001016118f9565b50509193909250565b5f54600160a01b900460ff1661061257604051638dfc202b60e01b815260040160405180910390fd5b81546001600160a01b0319166001600160a01b03821690811783556040519081527f3b819cfb39116b78a5d1267e92ab85058e96d63a7882322d296ab4135720b79a9060200160405180910390a15050565b60045415611abf575f60055482600454611a819190611c4e565b611a8b9190611c65565b905080836005015f828254611aa09190611c16565b925050819055508060045f828254611ab89190611c16565b9091555050505b5050565b5f60208284031215611ad3575f80fd5b5035919050565b80356001600160a01b0381168114611af0575f80fd5b919050565b5f60208284031215611b05575f80fd5b610e6282611ada565b602080825282518282018190525f9190848201906040850190845b81811015611b4e5783516001600160a01b031683529284019291840191600101611b29565b50909695505050505050565b5f8060408385031215611b6b575f80fd5b611b7483611ada565b946020939093013593505050565b5f602080835260c0830160018060a01b03855116828501528185015160408501526040850151606085015260608501516080850152608085015160a08086015281815180845260e08701915084830193505f92505b80831015611bf75783518252928401926001929092019190840190611bd7565b509695505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611c2957611c29611c02565b92915050565b5f60208284031215611c3f575f80fd5b81518015158114610e62575f80fd5b8082028115828204841417611c2957611c29611c02565b5f82611c7f57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115611c2957611c29611c02565b6020808252602b908201527f5f636c61696d5374616b696e6752657761726428293a20596f7520686176652060408201526a6e6f207374616b696e677360a81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b60208082526026908201527f596f7520617265206e6f7420746865206f776e6572206f66207468697320737460408201526530b5b4b7339760d11b606082015260800190565b5f60208284031215611d4c575f80fd5b815160ff81168114610e62575f80fd5b600181815b80851115611d9657815f1904821115611d7c57611d7c611c02565b80851615611d8957918102915b93841c9390800290611d61565b509250929050565b5f82611dac57506001611c29565b81611db857505f611c29565b8160018114611dce5760028114611dd857611df4565b6001915050611c29565b60ff841115611de957611de9611c02565b50506001821b611c29565b5060208310610133831016604e8410600b8410161715611e17575081810a611c29565b611e218383611d5c565b805f1904821115611e3457611e34611c02565b029392505050565b5f610e6260ff841683611d9e565b5f60018201611e5b57611e5b611c02565b506001019056fea2646970667358221220e3bec5f03fefca44bfdb76ac2a4a33beee0dff169fb2bb5d3b55a1d3ce3826d364736f6c634300081700330000000000000000000000001d468e2cf436a0de2720da257b9a8b704d8b7314

Deployed Bytecode

0x60806040526004361061011e575f3560e01c806383b41e661161009d578063adc9772e11610062578063adc9772e14610397578063bbbaee4c146103b6578063f2fde38b146103e3578063f4da319914610402578063fb47e01614610421575f80fd5b806383b41e661461026a5780638456cb59146102c05780638da5cb5b146102d45780639e5d9cd2146102f0578063a0e3f8f214610311575f80fd5b806340cba8a0116100e357806340cba8a0146101dc57806350aee08d146101fb5780635c975abb1461021a578063715018a61461024257806373cf575a14610256575f80fd5b80630adc0c2c1461013157806323ca0eb01461017057806326a4e8d214610178578063309a8f8d146101975780633f4ba83a146101c8575f80fd5b3661012d5761012b61044d565b005b5f80fd5b34801561013c575f80fd5b5061015061014b366004611ac3565b61054b565b604080519384526020840192909252908201526060015b60405180910390f35b61012b61044d565b348015610183575f80fd5b5061012b610192366004611af5565b6105d8565b3480156101a2575f80fd5b506008546001600160a01b03165b6040516001600160a01b039091168152602001610167565b3480156101d3575f80fd5b5061012b610602565b3480156101e7575f80fd5b5061012b6101f6366004611af5565b610614565b348015610206575f80fd5b5061012b610215366004611af5565b610794565b348015610225575f80fd5b505f54600160a01b900460ff166040519015158152602001610167565b34801561024d575f80fd5b5061012b6109ac565b348015610261575f80fd5b5061012b6109bd565b348015610275575f80fd5b50600154600354600254600454600554600654600754604080519788526020880196909652948601939093526060850191909152608084015260a083015260c082015260e001610167565b3480156102cb575f80fd5b5061012b610b65565b3480156102df575f80fd5b505f546001600160a01b03166101b0565b3480156102fb575f80fd5b50610304610b75565b6040516101679190611b0e565b34801561031c575f80fd5b5061033061032b366004611ac3565b610bd5565b60405161016791908151151581526020808301516001600160a01b03169082015260408083015190820152606080830151908201526080808301519082015260a0808301519082015260c0808301519082015260e091820151918101919091526101000190565b3480156103a2575f80fd5b5061012b6103b1366004611b5a565b610c99565b3480156103c1575f80fd5b506103d56103d0366004611af5565b610d8e565b604051908152602001610167565b3480156103ee575f80fd5b5061012b6103fd366004611af5565b610e69565b34801561040d575f80fd5b5061015061041c366004611af5565b610ea6565b34801561042c575f80fd5b5061044061043b366004611af5565b610f63565b6040516101679190611b82565b34806104c65760405162461bcd60e51b815260206004820152603d60248201527f646973747269627574655374616b696e675265776172647328293a205265776160448201527f7264206d7573742062652067726561746572207468616e207a65726f2e00000060648201526084015b60405180910390fd5b600754156104e2576007546104db9082611c16565b5f60075590505b8060045f8282546104f39190611c16565b909155505042600655600280548291905f90610510908490611c16565b90915550506040518181527fcb85a20151ba0100ff8fdc798814296495ac8af2552b7fb99ce1da63e5d94be89060200160405180910390a150565b5f818152600a6020908152604080832081516101008082018452825460ff811615158352046001600160a01b0316938101939093526001810154918301919091526002810154606083015260038101546080830152600481015460a0830152600581015460c08301526006015460e0820152819081906105ca9061103d565b9250925092505b9193909250565b6105e06110f9565b600880546001600160a01b0319166001600160a01b0392909216919091179055565b61060a6110f9565b610612611125565b565b61061c6110f9565b600754806106925760405162461bcd60e51b815260206004820152603760248201527f636c61696d4361727279466f727761726442616c616e636528293a2042616c6160448201527f6e6365206d7573742062652061626f7665207a65726f2e00000000000000000060648201526084016104bd565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146106db576040519150601f19603f3d011682016040523d82523d5f602084013e6106e0565b606091505b50509050806107495760405162461bcd60e51b815260206004820152602f60248201527f636c61696d4361727279466f727761726442616c616e636528293a204554482060448201526e2737ba103a3930b739b332b932b21760891b60648201526084016104bd565b5f600755604080516001600160a01b0385168152602081018490527f7f2ae5ea0eceace153024cb17f16195815248fdcf2bac0507608a46c90da53d7910160405180910390a1505050565b600854600160a01b900460ff16156107e35760405162461bcd60e51b81526020600482015260126024820152712932b2b73a3930b731bc9030ba3a30b1b59760711b60448201526064016104bd565b6008805460ff60a01b1916600160a01b1790555f61080082611179565b5090505f811161086a5760405162461bcd60e51b815260206004820152602f60248201527f5f636c61696d557365725374616b696e6752657761726428293a204e6f20726560448201526e3bb0b93239903a379031b630b4b69760891b60648201526084016104bd565b47818110156108e15760405162461bcd60e51b815260206004820152603760248201527f636c61696d5374616b696e6752657761726428293a20436f6e7472616374206860448201527f6173206c6573732062616c616e636520746f207061792e00000000000000000060648201526084016104bd565b5f836001600160a01b0316836040515f6040518083038185875af1925050503d805f811461092a576040519150601f19603f3d011682016040523d82523d5f602084013e61092f565b606091505b50509050806109995760405162461bcd60e51b815260206004820152603060248201527f636c61696d5374616b696e6752657761726428293a205265776172642045544860448201526f102737ba103a3930b739b332b932b21760811b60648201526084016104bd565b50506008805460ff60a01b191690555050565b6109b46110f9565b6106125f61138f565b335f806109c9836113de565b90925090508115610aaf576008545f906001600160a01b031663a9059cbb856109f283876115d1565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015610a3a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a5e9190611c2f565b905080610aad5760405162461bcd60e51b815260206004820181905260248201527f756e5374616b6528293a20546f6b656e73206e6f74207472616e73666572656460448201526064016104bd565b505b8015610b60575f836001600160a01b0316826040515f6040518083038185875af1925050503d805f8114610afe576040519150601f19603f3d011682016040523d82523d5f602084013e610b03565b606091505b5050905080610b5e5760405162461bcd60e51b815260206004820152602160248201527f756e7374616b6528293a20526577617264206e6f74207472616e7366657265646044820152601760f91b60648201526084016104bd565b505b505050565b610b6d6110f9565b610612611650565b60606001805480602002602001604051908101604052809291908181526020018280548015610bcb57602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610bad575b5050505050905090565b610c206040518061010001604052805f151581526020015f6001600160a01b031681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b505f908152600a602090815260409182902082516101008082018552825460ff811615158352046001600160a01b0316928101929092526001810154928201929092526002820154606082015260038201546080820152600482015460a0820152600582015460c082015260069091015460e082015290565b610ca1611692565b6008545f906001600160a01b03166323b872dd3330610cc084876115d1565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015610d11573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d359190611c2f565b905080610d845760405162461bcd60e51b815260206004820181905260248201527f756e5374616b6528293a20546f6b656e73206e6f74207472616e73666572656460448201526064016104bd565b610b6083836116bc565b6001600160a01b038082165f908152600960209081526040808320815160a08101835281549095168552600181015485840152600281015485830152600381015460608601526004810180548351818602810186019094528084529495869590949293608086019390929190830182828015610e2757602002820191905f5260205f20905b815481526020019060010190808311610e13575b505050505081525050905060055481602001516064610e469190611c4e565b610e5890670de0b6b3a7640000611c4e565b610e629190611c65565b9392505050565b610e716110f9565b6001600160a01b038116610e9a57604051631e4fbdf760e01b81525f60048201526024016104bd565b610ea38161138f565b50565b6001600160a01b038082165f908152600960209081526040808320815160a081018352815490951685526001810154858401526002810154858301526003810154606086015260048101805483518186028101860190945280845294958695869586959294936080860193929091830182828015610f4157602002820191905f5260205f20905b815481526020019060010190808311610f2d575b5050505050815250509050610f55816118ec565b935093509350509193909250565b610f9a6040518060a001604052805f6001600160a01b031681526020015f81526020015f81526020015f8152602001606081525090565b6001600160a01b038083165f90815260096020908152604091829020825160a08101845281549094168452600181015484830152600281015484840152600381015460608501526004810180548451818502810185019095528085529193608086019390929083018282801561102d57602002820191905f5260205f20905b815481526020019060010190808311611019575b5050505050815250509050919050565b5f805f8060045411801561104f575083515b801561106057506006548460e00151105b156105d1578360c001518460a001516110799190611c16565b600554856060015160045461108e9190611c4e565b6110989190611c65565b6110a29190611c84565b925082156105d1578360e001516006546110bc9190611c84565b8460e0015185608001516110d09190611c84565b6110da9085611c4e565b6110e49190611c65565b90506110f08184611c84565b91509193909250565b5f546001600160a01b031633146106125760405163118cdaa760e01b81523360048201526024016104bd565b61112d6119ec565b5f805460ff60a01b191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b6040516001600160a01b03909116815260200160405180910390a1565b6001600160a01b0381165f90815260096020526040812060048101548291906111b45760405162461bcd60e51b81526004016104bd90611c97565b5f5b600482015481101561131e575f600a5f8460040184815481106111db576111db611ce2565b905f5260205f20015481526020019081526020015f209050856001600160a01b0316815f0160019054906101000a90046001600160a01b03166001600160a01b03161461123a5760405162461bcd60e51b81526004016104bd90611cf6565b805460ff161561131557604080516101008082018352835460ff811615158352046001600160a01b031660208201526001830154918101919091526002820154606082015260038201546080820152600482015460a0820152600582015460c0820152600682015460e08201525f9081906112b49061103d565b90935091505081156112e65781836004015f8282546112d39190611c16565b909155506112e390508288611c16565b96505b80156113125780836005015f8282546112ff9190611c16565b9091555061130f90508187611c16565b95505b50505b506001016111b6565b5082156113895782816002015f8282546113389190611c16565b925050819055508160075f8282546113509190611c16565b90915550506040518381527fa8c6b8e354c4fcddb94967f79e85ec5a2b27add43447bd915f479e684e8a20499060200160405180910390a15b50915091565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b0381165f90815260096020526040812060048101548291906114195760405162461bcd60e51b81526004016104bd90611c97565b5f61142385611179565b5090508015611439576114368184611c16565b92505b5f60018301819055805b6004840154811015611518575f600a5f86600401848154811061146857611468611ce2565b905f5260205f20015481526020019081526020015f209050876001600160a01b0316815f0160019054906101000a90046001600160a01b03166001600160a01b0316146114c75760405162461bcd60e51b81526004016104bd90611cf6565b805460ff161561150f57805460ff1916815560028101546114e89088611c16565b96508060040154836114fa9190611c16565b925080600501548361150c9190611c16565b92505b50600101611443565b505f85116115685760405162461bcd60e51b815260206004820181905260248201527f5f756e7374616b6528293a204e6f2076616c756520746f20756e5374616b652e60448201526064016104bd565b8060045f8282546115799190611c84565b925050819055508460055f8282546115919190611c84565b90915550506040518581527f603af6cb36e852311201ebb828cda2d49c5dc06d9d14a04ecd5e4211308625aa9060200160405180910390a1505050915091565b5f670de0b6b3a7640000836001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611617573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061163b9190611d3c565b61164690600a611e3c565b610e589084611c4e565b611658611692565b5f805460ff60a01b1916600160a01b1790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861115c3390565b5f54600160a01b900460ff16156106125760405163d93c066560e01b815260040160405180910390fd5b6001600160a01b03821661171e5760405162461bcd60e51b815260206004820152602360248201527f5f7374616b6528293a20416464726573735a65726f2063616e6e6f742073746160448201526235b29760e91b60648201526084016104bd565b5f81116117825760405162461bcd60e51b815260206004820152602c60248201527f5f7374616b6528293a2056616c75652073686f756c642062652067726561746560448201526b39103a3430b7103d32b9379760a11b60648201526084016104bd565b6001600160a01b038083165f908152600960205260409020600354815491929091166117fc576117b28285611a15565b6001805480820182555f919091527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b0319166001600160a01b0386161790555b600482018054600181810183555f9283526020832090910183905583018054859290611829908490611c16565b90915550505f818152600a60205260409020805460016001600160a81b03199091166101006001600160a01b03881602178117825581018290556002810184905542600382015560068054908201556118828185611a67565b8360055f8282546118939190611c16565b909155505060038054905f6118a783611e4a565b909155505060408051858152602081018490527fc9ec05ea5037818736839e1365dc3d9a74a735c447af0697da66633b7a9d0fab910160405180910390a15050505050565b5f805f80846080015190505f5b81518110156119e3575f600a5f84848151811061191857611918611ce2565b60209081029190910181015182528181019290925260409081015f2081516101008082018452825460ff811615801584529190046001600160a01b0316948201949094526001820154928101929092526002810154606083015260038101546080830152600481015460a0830152600581015460c08301526006015460e082015291506119da575f805f6119ab8461103d565b919450925090506119bc838a611c16565b98506119c88289611c16565b97506119d48188611c16565b96505050505b506001016118f9565b50509193909250565b5f54600160a01b900460ff1661061257604051638dfc202b60e01b815260040160405180910390fd5b81546001600160a01b0319166001600160a01b03821690811783556040519081527f3b819cfb39116b78a5d1267e92ab85058e96d63a7882322d296ab4135720b79a9060200160405180910390a15050565b60045415611abf575f60055482600454611a819190611c4e565b611a8b9190611c65565b905080836005015f828254611aa09190611c16565b925050819055508060045f828254611ab89190611c16565b9091555050505b5050565b5f60208284031215611ad3575f80fd5b5035919050565b80356001600160a01b0381168114611af0575f80fd5b919050565b5f60208284031215611b05575f80fd5b610e6282611ada565b602080825282518282018190525f9190848201906040850190845b81811015611b4e5783516001600160a01b031683529284019291840191600101611b29565b50909695505050505050565b5f8060408385031215611b6b575f80fd5b611b7483611ada565b946020939093013593505050565b5f602080835260c0830160018060a01b03855116828501528185015160408501526040850151606085015260608501516080850152608085015160a08086015281815180845260e08701915084830193505f92505b80831015611bf75783518252928401926001929092019190840190611bd7565b509695505050505050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115611c2957611c29611c02565b92915050565b5f60208284031215611c3f575f80fd5b81518015158114610e62575f80fd5b8082028115828204841417611c2957611c29611c02565b5f82611c7f57634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115611c2957611c29611c02565b6020808252602b908201527f5f636c61696d5374616b696e6752657761726428293a20596f7520686176652060408201526a6e6f207374616b696e677360a81b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b60208082526026908201527f596f7520617265206e6f7420746865206f776e6572206f66207468697320737460408201526530b5b4b7339760d11b606082015260800190565b5f60208284031215611d4c575f80fd5b815160ff81168114610e62575f80fd5b600181815b80851115611d9657815f1904821115611d7c57611d7c611c02565b80851615611d8957918102915b93841c9390800290611d61565b509250929050565b5f82611dac57506001611c29565b81611db857505f611c29565b8160018114611dce5760028114611dd857611df4565b6001915050611c29565b60ff841115611de957611de9611c02565b50506001821b611c29565b5060208310610133831016604e8410600b8410161715611e17575081810a611c29565b611e218383611d5c565b805f1904821115611e3457611e34611c02565b029392505050565b5f610e6260ff841683611d9e565b5f60018201611e5b57611e5b611c02565b506001019056fea2646970667358221220e3bec5f03fefca44bfdb76ac2a4a33beee0dff169fb2bb5d3b55a1d3ce3826d364736f6c63430008170033

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

0000000000000000000000001d468e2cf436a0de2720da257b9a8b704d8b7314

-----Decoded View---------------
Arg [0] : initialOwner (address): 0x1D468E2cF436a0de2720DA257B9A8b704D8B7314

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000001d468e2cf436a0de2720da257b9a8b704d8b7314


Deployed Bytecode Sourcemap

10551:14693:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11669:26;:24;:26::i;:::-;10551:14693;;;;;15233:315;;;;;;;;;;-1:-1:-1;15233:315:0;;;;;:::i;:::-;;:::i;:::-;;;;401:25:1;;;457:2;442:18;;435:34;;;;485:18;;;478:34;389:2;374:18;15233:315:0;;;;;;;;21533:579;;;:::i;22721:115::-;;;;;;;;;;-1:-1:-1;22721:115:0;;;;;:::i;:::-;;:::i;22591:122::-;;;;;;;;;;-1:-1:-1;22692:13:0;;-1:-1:-1;;;;;22692:13:0;22591:122;;;-1:-1:-1;;;;;1056:32:1;;;1038:51;;1026:2;1011:18;22591:122:0;892:203:1;25176:65:0;;;;;;;;;;;;;:::i;24515:584::-;;;;;;;;;;-1:-1:-1;24515:584:0;;;;;:::i;:::-;;:::i;18647:684::-;;;;;;;;;;-1:-1:-1;18647:684:0;;;;;:::i;:::-;;:::i;2803:86::-;;;;;;;;;;-1:-1:-1;2850:4:0;2874:7;-1:-1:-1;;;2874:7:0;;;;2803:86;;1265:14:1;;1258:22;1240:41;;1228:2;1213:18;2803:86:0;1100:187:1;6197:103:0;;;;;;;;;;;;;:::i;20825:700::-;;;;;;;;;;;;;:::i;22844:746::-;;;;;;;;;;-1:-1:-1;23251:6:0;:13;23291:14;;23349:31;;23410:17;;23452:12;;23503:26;;23562:20;;22844:746;;;1607:25:1;;;1663:2;1648:18;;1641:34;;;;1691:18;;;1684:34;;;;1749:2;1734:18;;1727:34;;;;1792:3;1777:19;;1770:35;1836:3;1821:19;;1814:35;1880:3;1865:19;;1858:35;1594:3;1579:19;22844:746:0;1292:607:1;25107:61:0;;;;;;;;;;;;;:::i;5522:87::-;;;;;;;;;;-1:-1:-1;5568:7:0;5595:6;-1:-1:-1;;;;;5595:6:0;5522:87;;22120:141;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23785:175::-;;;;;;;;;;-1:-1:-1;23785:175:0;;;;;:::i;:::-;;:::i;:::-;;;;;;2806:13:1;;2799:21;2792:29;2774:48;;2882:4;2870:17;;;2864:24;-1:-1:-1;;;;;2860:50:1;2838:20;;;2831:80;2967:4;2955:17;;;2949:24;2927:20;;;2920:54;3030:4;3018:17;;;3012:24;2990:20;;;2983:54;3093:4;3081:17;;;3075:24;3053:20;;;3046:54;2898:3;3144:17;;;3138:24;3116:20;;;3109:54;3219:4;3207:17;;;3201:24;3179:20;;;3172:54;3282:4;3270:17;;;3264:24;3242:20;;;3235:54;;;;2761:3;2746:19;;2567:728;13767:393:0;;;;;;;;;;-1:-1:-1;13767:393:0;;;;;:::i;:::-;;:::i;22269:314::-;;;;;;;;;;-1:-1:-1;22269:314:0;;;;;:::i;:::-;;:::i;:::-;;;3705:25:1;;;3693:2;3678:18;22269:314:0;3559:177:1;6455:220:0;;;;;;;;;;-1:-1:-1;6455:220:0;;;;;:::i;:::-;;:::i;16572:386::-;;;;;;;;;;-1:-1:-1;16572:386:0;;;;;:::i;:::-;;:::i;23598:179::-;;;;;;;;;;-1:-1:-1;23598:179:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21533:579::-;21614:9;21658:12;21636:123;;;;-1:-1:-1;;;21636:123:0;;4953:2:1;21636:123:0;;;4935:21:1;4992:2;4972:18;;;4965:30;5031:34;5011:18;;;5004:62;5102:31;5082:18;;;5075:59;5151:19;;21636:123:0;;;;;;;;;21776:20;;:24;21772:131;;21829:20;;21817:32;;;;:::i;:::-;21864:27;21871:20;21864:27;21817:32;-1:-1:-1;21772:131:0;21936:8;21915:17;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;21984:15:0;21955:26;:44;22010:31;:43;;22045:8;;22010:31;;;:43;;22045:8;;22010:43;:::i;:::-;;;;-1:-1:-1;;22071:33:0;;3705:25:1;;;22071:33:0;;3693:2:1;3678:18;22071:33:0;;;;;;;21584:528;21533:579::o;15233:315::-;15348:25;15511:28;;;:16;:28;;;;;;;;15488:52;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15488:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15348:25;;;;15488:52;;:22;:52::i;:::-;15481:59;;;;;;15233:315;;;;;;:::o;22721:115::-;5408:13;:11;:13::i;:::-;22799::::1;:29:::0;;-1:-1:-1;;;;;;22799:29:0::1;-1:-1:-1::0;;;;;22799:29:0;;;::::1;::::0;;;::::1;::::0;;22721:115::o;25176:65::-;5408:13;:11;:13::i;:::-;25223:10:::1;:8;:10::i;:::-;25176:65::o:0;24515:584::-;5408:13;:11;:13::i;:::-;24631:20:::1;::::0;24684:23;24662:128:::1;;;::::0;-1:-1:-1;;;24662:128:0;;5645:2:1;24662:128:0::1;::::0;::::1;5627:21:1::0;5684:2;5664:18;;;5657:30;5723:34;5703:18;;;5696:62;5794:25;5774:18;;;5767:53;5837:19;;24662:128:0::1;5443:419:1::0;24662:128:0::1;24804:9;24827:12;-1:-1:-1::0;;;;;24819:26:0::1;24853:19;24819:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24803:98;;;24920:4;24912:64;;;::::0;-1:-1:-1;;;24912:64:0;;6279:2:1;24912:64:0::1;::::0;::::1;6261:21:1::0;6318:2;6298:18;;;6291:30;6357:34;6337:18;;;6330:62;-1:-1:-1;;;6408:18:1;;;6401:45;6463:19;;24912:64:0::1;6077:411:1::0;24912:64:0::1;24987:27;24994:20;24987:27:::0;25032:59:::1;::::0;;-1:-1:-1;;;;;6685:32:1;;6667:51;;6749:2;6734:18;;6727:34;;;25032:59:0::1;::::0;6640:18:1;25032:59:0::1;;;;;;;24590:509;;24515:584:::0;:::o;18647:684::-;11504:13;;-1:-1:-1;;;11504:13:0;;;;11503:14;11495:45;;;;-1:-1:-1;;;11495:45:0;;6974:2:1;11495:45:0;;;6956:21:1;7013:2;6993:18;;;6986:30;-1:-1:-1;;;7032:18:1;;;7025:48;7090:18;;11495:45:0;6772:342:1;11495:45:0;11551:13;:20;;-1:-1:-1;;;;11551:20:0;-1:-1:-1;;;11551:20:0;;;;18760:37:::1;18784:12:::0;18760:23:::1;:37::i;:::-;18730:67;;;18850:1;18832:15;:19;18810:116;;;::::0;-1:-1:-1;;;18810:116:0;;7321:2:1;18810:116:0::1;::::0;::::1;7303:21:1::0;7360:2;7340:18;;;7333:30;7399:34;7379:18;;;7372:62;-1:-1:-1;;;7450:18:1;;;7443:45;7505:19;;18810:116:0::1;7119:411:1::0;18810:116:0::1;18964:21;19020:33:::0;;::::1;;18998:138;;;::::0;-1:-1:-1;;;18998:138:0;;7737:2:1;18998:138:0::1;::::0;::::1;7719:21:1::0;7776:2;7756:18;;;7749:30;7815:34;7795:18;;;7788:62;7886:25;7866:18;;;7859:53;7929:19;;18998:138:0::1;7535:419:1::0;18998:138:0::1;19150:11;19175:12;-1:-1:-1::0;;;;;19167:26:0::1;19201:15;19167:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19149:96;;;19264:6;19256:67;;;::::0;-1:-1:-1;;;19256:67:0;;8161:2:1;19256:67:0::1;::::0;::::1;8143:21:1::0;8200:2;8180:18;;;8173:30;8239:34;8219:18;;;8212:62;-1:-1:-1;;;8290:18:1;;;8283:46;8346:19;;19256:67:0::1;7959:412:1::0;19256:67:0::1;-1:-1:-1::0;;11594:13:0;:21;;-1:-1:-1;;;;11594:21:0;;;-1:-1:-1;;18647:684:0:o;6197:103::-;5408:13;:11;:13::i;:::-;6262:30:::1;6289:1;6262:18;:30::i;20825:700::-:0;20884:10;20864:17;;20961:43;20884:10;20961:8;:43::i;:::-;20905:99;;-1:-1:-1;20905:99:0;-1:-1:-1;21021:17:0;;21017:259;;21074:13;;21055:9;;-1:-1:-1;;;;;21074:13:0;21067:30;21116:9;21144:39;21074:13;21169;21144:9;:39::i;:::-;21067:131;;-1:-1:-1;;;;;;21067:131:0;;;;;;;-1:-1:-1;;;;;6685:32:1;;;21067:131:0;;;6667:51:1;6734:18;;;6727:34;6640:18;;21067:131:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21055:143;;21223:4;21215:49;;;;-1:-1:-1;;;21215:49:0;;8860:2:1;21215:49:0;;;8842:21:1;;;8879:18;;;8872:30;8938:34;8918:18;;;8911:62;8990:18;;21215:49:0;8658:356:1;21215:49:0;21040:236;21017:259;21292:24;;21288:230;;21334:11;21359:9;-1:-1:-1;;;;;21351:23:0;21400:20;21351:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21333:106;;;21462:6;21454:52;;;;-1:-1:-1;;;21454:52:0;;9221:2:1;21454:52:0;;;9203:21:1;9260:2;9240:18;;;9233:30;9299:34;9279:18;;;9272:62;-1:-1:-1;;;9350:18:1;;;9343:31;9391:19;;21454:52:0;9019:397:1;21454:52:0;21318:200;21288:230;20853:672;;;20825:700::o;25107:61::-;5408:13;:11;:13::i;:::-;25152:8:::1;:6;:8::i;22120:141::-:0;22206:16;22247:6;22240:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22240:13:0;;;;;;;;;;;;;;;;;;;;;;;22120:141;:::o;23785:175::-;23879:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23879:20:0;-1:-1:-1;23924:28:0;;;;:16;:28;;;;;;;;;23917:35;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23917:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23785:175::o;13767:393::-;2408:19;:17;:19::i;:::-;13901:13:::1;::::0;13882:9:::1;::::0;-1:-1:-1;;;;;13901:13:0::1;13894:34;13943:10;13976:4;13996:37;13901:13:::0;14021:11;13996:9:::1;:37::i;:::-;13894:150;::::0;-1:-1:-1;;;;;;13894:150:0::1;::::0;;;;;;-1:-1:-1;;;;;9679:15:1;;;13894:150:0::1;::::0;::::1;9661:34:1::0;9731:15;;;;9711:18;;;9704:43;9763:18;;;9756:34;9596:18;;13894:150:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13882:162;;14065:4;14057:49;;;::::0;-1:-1:-1;;;14057:49:0;;8860:2:1;14057:49:0::1;::::0;::::1;8842:21:1::0;;;8879:18;;;8872:30;8938:34;8918:18;;;8911:62;8990:18;;14057:49:0::1;8658:356:1::0;14057:49:0::1;14119:33;14126:12;14140:11;14119:6;:33::i;22269:314::-:0;-1:-1:-1;;;;;22433:30:0;;;22363:17;22433:30;;;:16;:30;;;;;;;;22398:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22363:17;;;;22398:65;;22433:30;;22398:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22563:12;;22502:11;:28;;;22533:3;22502:34;;;;:::i;:::-;:44;;22539:7;22502:44;:::i;:::-;22501:74;;;;:::i;:::-;22476:99;22269:314;-1:-1:-1;;;22269:314:0:o;6455:220::-;5408:13;:11;:13::i;:::-;-1:-1:-1;;;;;6540:22:0;::::1;6536:93;;6586:31;::::0;-1:-1:-1;;;6586:31:0;;6614:1:::1;6586:31;::::0;::::1;1038:51:1::0;1011:18;;6586:31:0::1;892:203:1::0;6536:93:0::1;6639:28;6658:8;6639:18;:28::i;:::-;6455:220:::0;:::o;16572:386::-;-1:-1:-1;;;;;16862:30:0;;;16689;16862;;;:16;:30;;;;;;;;16827:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16689:30;;;;;;;;16827:65;;16862:30;16827:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16912:38;16938:11;16912:25;:38::i;:::-;16905:45;;;;;;;16572:386;;;;;:::o;23598:179::-;23694:20;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23694:20:0;-1:-1:-1;;;;;23739:30:0;;;;;;;:16;:30;;;;;;;;;23732:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23739:30;;23732:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23598:179;;;:::o;14168:1057::-;14300:25;14340:23;14378:27;14471:1;14451:17;;:21;:61;;;;-1:-1:-1;14489:23:0;;14451:61;:134;;;;;14559:26;;14529:14;:27;;;:56;14451:134;14433:785;;;14815:14;:29;;;14756:14;:35;;;:88;;;;:::i;:::-;14722:12;;14671:14;:26;;;14651:17;;:46;;;;:::i;:::-;14650:84;;;;:::i;:::-;14649:196;;;;:::i;:::-;14612:233;-1:-1:-1;14866:21:0;;14862:345;;15084:14;:27;;;15055:26;;:56;;;;:::i;:::-;15001:14;:27;;;14974:14;:24;;;:54;;;;:::i;:::-;14932:97;;:17;:97;:::i;:::-;14931:181;;;;:::i;:::-;14908:205;-1:-1:-1;15152:39:0;14908:205;15152:17;:39;:::i;:::-;15134:57;;14168:1057;;;;;:::o;5687:166::-;5568:7;5595:6;-1:-1:-1;;;;;5595:6:0;773:10;5747:23;5743:103;;5794:40;;-1:-1:-1;;;5794:40:0;;773:10;5794:40;;;1038:51:1;1011:18;;5794:40:0;892:203:1;3704:120:0;2667:16;:14;:16::i;:::-;3773:5:::1;3763:15:::0;;-1:-1:-1;;;;3763:15:0::1;::::0;;3794:22:::1;773:10:::0;3803:12:::1;3794:22;::::0;-1:-1:-1;;;;;1056:32:1;;;1038:51;;1026:2;1011:18;3794:22:0::1;;;;;;;3704:120::o:0;16966:1673::-;-1:-1:-1;;;;;17172:30:0;;17056:28;17172:30;;;:16;:30;;;;;17235:22;;;:29;17056:28;;17172:30;17213:126;;;;-1:-1:-1;;;17213:126:0;;;;;;;:::i;:::-;17357:9;17352:1027;17372:22;;;:29;17368:33;;17352:1027;;;17423:36;17462:16;:75;17497:11;:22;;17520:1;17497:25;;;;;;;;:::i;:::-;;;;;;;;;17462:75;;;;;;;;;;;17423:114;;17604:12;-1:-1:-1;;;;;17580:36:0;:14;:20;;;;;;;;;;-1:-1:-1;;;;;17580:20:0;-1:-1:-1;;;;;17580:36:0;;17554:136;;;;-1:-1:-1;;;17554:136:0;;;;;;;:::i;:::-;17711:23;;;;17707:661;;;17896:38;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17896:38:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;17896:38:0;;:22;:38::i;:::-;17755:179;;-1:-1:-1;17755:179:0;-1:-1:-1;;17959:19:0;;17955:184;;18042:15;18003:14;:35;;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;18080:39:0;;-1:-1:-1;18104:15:0;18080:39;;:::i;:::-;;;17955:184;18163:23;;18159:194;;18244:19;18211:14;:29;;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;18286:47:0;;-1:-1:-1;18314:19:0;18286:47;;:::i;:::-;;;18159:194;17736:632;;17707:661;-1:-1:-1;17403:3:0;;17352:1027;;;-1:-1:-1;18395:24:0;;18391:241;;18473:20;18436:11;:33;;;:57;;;;;;;:::i;:::-;;;;;;;;18532:24;18508:20;;:48;;;;;;;:::i;:::-;;;;-1:-1:-1;;18578:42:0;;3705:25:1;;;18578:42:0;;3693:2:1;3678:18;18578:42:0;;;;;;;18391:241;17125:1514;16966:1673;;;:::o;6835:191::-;6909:16;6928:6;;-1:-1:-1;;;;;6945:17:0;;;-1:-1:-1;;;;;;6945:17:0;;;;;;6978:40;;6928:6;;;;;;;6978:40;;6909:16;6978:40;6898:128;6835:191;:::o;19339:1478::-;-1:-1:-1;;;;;19519:30:0;;19414:21;19519:30;;;:16;:30;;;;;19584:22;;;:29;19414:21;;19519:30;19562:126;;;;-1:-1:-1;;;19562:126:0;;;;;;;:::i;:::-;19702:23;19731:37;19755:12;19731:23;:37::i;:::-;-1:-1:-1;19701:67:0;-1:-1:-1;19785:19:0;;19781:91;;19821:39;19845:15;19821:39;;:::i;:::-;;;19781:91;19915:1;19884:28;;;:32;;;19915:1;19958:653;19978:22;;;:29;19974:33;;19958:653;;;20029:36;20068:16;:75;20103:11;:22;;20126:1;20103:25;;;;;;;;:::i;:::-;;;;;;;;;20068:75;;;;;;;;;;;20029:114;;20210:12;-1:-1:-1;;;;;20186:36:0;:14;:20;;;;;;;;;;-1:-1:-1;;;;;20186:20:0;-1:-1:-1;;;;;20186:36:0;;20160:136;;;;-1:-1:-1;;;20160:136:0;;;;;;;:::i;:::-;20317:23;;;;20313:287;;;20361:31;;-1:-1:-1;;20361:31:0;;;20428:26;;;;20411:43;;;;:::i;:::-;;;20487:14;:35;;;20473:49;;;;;:::i;:::-;;;20555:14;:29;;;20541:43;;;;;:::i;:::-;;;20313:287;-1:-1:-1;20009:3:0;;19958:653;;;;20647:1;20631:13;:17;20623:62;;;;-1:-1:-1;;;20623:62:0;;11482:2:1;20623:62:0;;;11464:21:1;;;11501:18;;;11494:30;11560:34;11540:18;;;11533:62;11612:18;;20623:62:0;11280:356:1;20623:62:0;20719:10;20698:17;;:31;;;;;;;:::i;:::-;;;;;;;;20758:13;20742:12;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;20787:22:0;;3705:25:1;;;20787:22:0;;3693:2:1;3678:18;20787:22:0;;;;;;;19472:1345;;;19339:1478;;;:::o;23968:266::-;24080:21;24219:7;24177:13;-1:-1:-1;;;;;24167:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24163:39;;:2;:39;:::i;:::-;24149:53;;:11;:53;:::i;3445:118::-;2408:19;:17;:19::i;:::-;3505:7:::1;:14:::0;;-1:-1:-1;;;;3505:14:0::1;-1:-1:-1::0;;;3505:14:0::1;::::0;;3535:20:::1;3542:12;773:10:::0;;693:98;2962:132;2850:4;2874:7;-1:-1:-1;;;2874:7:0;;;;3024:63;;;3060:15;;-1:-1:-1;;;3060:15:0;;;;;;;;;;;12494:1265;-1:-1:-1;;;;;12589:26:0;;12567:111;;;;-1:-1:-1;;;12567:111:0;;13498:2:1;12567:111:0;;;13480:21:1;13537:2;13517:18;;;13510:30;13576:34;13556:18;;;13549:62;-1:-1:-1;;;13627:18:1;;;13620:33;13670:19;;12567:111:0;13296:399:1;12567:111:0;12706:1;12697:6;:10;12689:67;;;;-1:-1:-1;;;12689:67:0;;13902:2:1;12689:67:0;;;13884:21:1;13941:2;13921:18;;;13914:30;13980:34;13960:18;;;13953:62;-1:-1:-1;;;14031:18:1;;;14024:42;14083:19;;12689:67:0;13700:408:1;12689:67:0;-1:-1:-1;;;;;12805:30:0;;;12769:33;12805:30;;;:16;:30;;;;;12873:14;;12904:23;;12805:30;;12873:14;;12904:23;12900:155;;12958:45;12977:11;12990:12;12958:18;:45::i;:::-;13018:6;:25;;;;;;;-1:-1:-1;13018:25:0;;;;;;;;-1:-1:-1;;;;;;13018:25:0;-1:-1:-1;;;;;13018:25:0;;;;;12900:155;13067:22;;;:45;;;;;;;;-1:-1:-1;13067:45:0;;;;;;;;;;;;13123:28;;:38;;13155:6;;-1:-1:-1;13123:38:0;;13155:6;;13123:38;:::i;:::-;;;;-1:-1:-1;;13174:36:0;13213:58;;;:16;:58;;;;;13284:30;;13310:4;-1:-1:-1;;;;;;13325:35:0;;;13284:30;-1:-1:-1;;;;;13325:35:0;;;;;;;;13371:24;;:43;;;13425:26;;;:35;;;13498:15;13471:24;;;:42;13554:26;;;13524:27;;;:56;13593:47;13213:58;13425:35;13593:23;:47::i;:::-;13669:6;13653:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;13686:14:0;:16;;;:14;:16;;;:::i;:::-;;;;-1:-1:-1;;13720:31:0;;;14427:25:1;;;14483:2;14468:18;;14461:34;;;13720:31:0;;14400:18:1;13720:31:0;;;;;;;12556:1203;;;12494:1265;;:::o;15556:1008::-;15688:30;15733:28;15776:32;15836:31;15870:11;:22;;;15836:56;;15910:9;15905:652;15925:14;:21;15921:1;:25;15905:652;;;15968:35;16006:16;:67;16041:14;16056:1;16041:17;;;;;;;;:::i;:::-;;;;;;;;;;;;16006:67;;;;;;;;;;;;;-1:-1:-1;16006:67:0;15968:105;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15968:105:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16090:456:0;;16161:25;16209:23;16255:27;16304:38;16327:14;16304:22;:38::i;:::-;16138:204;;-1:-1:-1;16138:204:0;-1:-1:-1;16138:204:0;-1:-1:-1;16363:43:0;16138:204;16363:43;;:::i;:::-;;-1:-1:-1;16425:39:0;16449:15;16425:39;;:::i;:::-;;-1:-1:-1;16483:47:0;16511:19;16483:47;;:::i;:::-;;;16119:427;;;16090:456;-1:-1:-1;15948:3:0;;15905:652;;;;15825:739;15556:1008;;;;;:::o;3171:130::-;2850:4;2874:7;-1:-1:-1;;;2874:7:0;;;;3230:64;;3267:15;;-1:-1:-1;;;3267:15:0;;;;;;;;;;;11882:225;12012:39;;-1:-1:-1;;;;;;12012:39:0;-1:-1:-1;;;;;12012:39:0;;;;;;;12067:32;;1038:51:1;;;12067:32:0;;1026:2:1;1011:18;12067:32:0;;;;;;;11882:225;;:::o;12115:371::-;12250:17;;:21;12246:233;;12288:21;12343:12;;12333:6;12313:17;;:26;;;;:::i;:::-;12312:43;;;;:::i;:::-;12288:67;;12405:13;12372:14;:29;;;:46;;;;;;;:::i;:::-;;;;;;;;12454:13;12433:17;;:34;;;;;;;:::i;:::-;;;;-1:-1:-1;;;12246:233:0;12115:371;;:::o;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;523:173::-;591:20;;-1:-1:-1;;;;;640:31:1;;630:42;;620:70;;686:1;683;676:12;620:70;523:173;;;:::o;701:186::-;760:6;813:2;801:9;792:7;788:23;784:32;781:52;;;829:1;826;819:12;781:52;852:29;871:9;852:29;:::i;1904:658::-;2075:2;2127:21;;;2197:13;;2100:18;;;2219:22;;;2046:4;;2075:2;2298:15;;;;2272:2;2257:18;;;2046:4;2341:195;2355:6;2352:1;2349:13;2341:195;;;2420:13;;-1:-1:-1;;;;;2416:39:1;2404:52;;2511:15;;;;2476:12;;;;2452:1;2370:9;2341:195;;;-1:-1:-1;2553:3:1;;1904:658;-1:-1:-1;;;;;;1904:658:1:o;3300:254::-;3368:6;3376;3429:2;3417:9;3408:7;3404:23;3400:32;3397:52;;;3445:1;3442;3435:12;3397:52;3468:29;3487:9;3468:29;:::i;:::-;3458:39;3544:2;3529:18;;;;3516:32;;-1:-1:-1;;;3300:254:1:o;3741:1005::-;3893:4;3922:2;3951;3940:9;3933:21;3992:3;3981:9;3977:19;4068:1;4064;4059:3;4055:11;4051:19;4042:6;4036:13;4032:39;4027:2;4016:9;4012:18;4005:67;4126:2;4118:6;4114:15;4108:22;4103:2;4092:9;4088:18;4081:50;4185:2;4177:6;4173:15;4167:22;4162:2;4151:9;4147:18;4140:50;4245:2;4237:6;4233:15;4227:22;4221:3;4210:9;4206:19;4199:51;4297:3;4289:6;4285:16;4279:23;4340:4;4333;4322:9;4318:20;4311:34;4365:6;4400:12;4394:19;4437:6;4429;4422:22;4475:3;4464:9;4460:19;4453:26;;4520:2;4506:12;4502:21;4488:35;;4541:1;4532:10;;4551:169;4565:6;4562:1;4559:13;4551:169;;;4626:13;;4614:26;;4695:15;;;;4587:1;4580:9;;;;;4660:12;;;;4551:169;;;-1:-1:-1;4737:3:1;3741:1005;-1:-1:-1;;;;;;3741:1005:1:o;5181:127::-;5242:10;5237:3;5233:20;5230:1;5223:31;5273:4;5270:1;5263:15;5297:4;5294:1;5287:15;5313:125;5378:9;;;5399:10;;;5396:36;;;5412:18;;:::i;:::-;5313:125;;;;:::o;8376:277::-;8443:6;8496:2;8484:9;8475:7;8471:23;8467:32;8464:52;;;8512:1;8509;8502:12;8464:52;8544:9;8538:16;8597:5;8590:13;8583:21;8576:5;8573:32;8563:60;;8619:1;8616;8609:12;9801:168;9874:9;;;9905;;9922:15;;;9916:22;;9902:37;9892:71;;9943:18;;:::i;9974:217::-;10014:1;10040;10030:132;;10084:10;10079:3;10075:20;10072:1;10065:31;10119:4;10116:1;10109:15;10147:4;10144:1;10137:15;10030:132;-1:-1:-1;10176:9:1;;9974:217::o;10196:128::-;10263:9;;;10284:11;;;10281:37;;;10298:18;;:::i;10329:407::-;10531:2;10513:21;;;10570:2;10550:18;;;10543:30;10609:34;10604:2;10589:18;;10582:62;-1:-1:-1;;;10675:2:1;10660:18;;10653:41;10726:3;10711:19;;10329:407::o;10741:127::-;10802:10;10797:3;10793:20;10790:1;10783:31;10833:4;10830:1;10823:15;10857:4;10854:1;10847:15;10873:402;11075:2;11057:21;;;11114:2;11094:18;;;11087:30;11153:34;11148:2;11133:18;;11126:62;-1:-1:-1;;;11219:2:1;11204:18;;11197:36;11265:3;11250:19;;10873:402::o;11641:273::-;11709:6;11762:2;11750:9;11741:7;11737:23;11733:32;11730:52;;;11778:1;11775;11768:12;11730:52;11810:9;11804:16;11860:4;11853:5;11849:16;11842:5;11839:27;11829:55;;11880:1;11877;11870:12;11919:416;12008:1;12045:5;12008:1;12059:270;12080:7;12070:8;12067:21;12059:270;;;12139:4;12135:1;12131:6;12127:17;12121:4;12118:27;12115:53;;;12148:18;;:::i;:::-;12198:7;12188:8;12184:22;12181:55;;;12218:16;;;;12181:55;12297:22;;;;12257:15;;;;12059:270;;;12063:3;11919:416;;;;;:::o;12340:806::-;12389:5;12419:8;12409:80;;-1:-1:-1;12460:1:1;12474:5;;12409:80;12508:4;12498:76;;-1:-1:-1;12545:1:1;12559:5;;12498:76;12590:4;12608:1;12603:59;;;;12676:1;12671:130;;;;12583:218;;12603:59;12633:1;12624:10;;12647:5;;;12671:130;12708:3;12698:8;12695:17;12692:43;;;12715:18;;:::i;:::-;-1:-1:-1;;12771:1:1;12757:16;;12786:5;;12583:218;;12885:2;12875:8;12872:16;12866:3;12860:4;12857:13;12853:36;12847:2;12837:8;12834:16;12829:2;12823:4;12820:12;12816:35;12813:77;12810:159;;;-1:-1:-1;12922:19:1;;;12954:5;;12810:159;13001:34;13026:8;13020:4;13001:34;:::i;:::-;13071:6;13067:1;13063:6;13059:19;13050:7;13047:32;13044:58;;;13082:18;;:::i;:::-;13120:20;;12340:806;-1:-1:-1;;;12340:806:1:o;13151:140::-;13209:5;13238:47;13279:4;13269:8;13265:19;13259:4;13238:47;:::i;14113:135::-;14152:3;14173:17;;;14170:43;;14193:18;;:::i;:::-;-1:-1:-1;14240:1:1;14229:13;;14113:135::o

Swarm Source

ipfs://e3bec5f03fefca44bfdb76ac2a4a33beee0dff169fb2bb5d3b55a1d3ce3826d3

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  ]
[ 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.