ETH Price: $3,956.56 (+1.54%)

Contract

0x520eB2aFC4DDDA9A3e42E077E62bD4D0A813F2e3
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake207545762024-09-15 7:39:2391 days ago1726385963IN
0x520eB2aF...0A813F2e3
0 ETH0.000196611.3622277
Unstake202116492024-07-01 12:24:35167 days ago1719836675IN
0x520eB2aF...0A813F2e3
0 ETH0.000660595.19194811
Unstake193659652024-03-05 2:25:23286 days ago1709605523IN
0x520eB2aF...0A813F2e3
0 ETH0.0103553281.38801076
Claim193659572024-03-05 2:23:47286 days ago1709605427IN
0x520eB2aF...0A813F2e3
0 ETH0.0099157680.50796199
Unstake189312022024-01-04 3:10:47347 days ago1704337847IN
0x520eB2aF...0A813F2e3
0 ETH0.0021947317.24961189
Claim189312002024-01-04 3:10:23347 days ago1704337823IN
0x520eB2aF...0A813F2e3
0 ETH0.0021951517.82286006
Unstake180986822023-09-09 11:57:59463 days ago1694260679IN
0x520eB2aF...0A813F2e3
0 ETH0.0013032910.24332864
Claim180986712023-09-09 11:55:47463 days ago1694260547IN
0x520eB2aF...0A813F2e3
0 ETH0.001185939.62885202
Unstake179580172023-08-20 19:23:11483 days ago1692559391IN
0x520eB2aF...0A813F2e3
0 ETH0.002691321.49022152
Unstake178791842023-08-09 18:39:11494 days ago1691606351IN
0x520eB2aF...0A813F2e3
0 ETH0.003253125.56785703
Claim175306182023-06-21 21:08:59543 days ago1687381739IN
0x520eB2aF...0A813F2e3
0 ETH0.0032291326.21793854
Unstake173327472023-05-25 0:57:47571 days ago1684976267IN
0x520eB2aF...0A813F2e3
0 ETH0.0035307227.7498246
Claim173327352023-05-25 0:55:23571 days ago1684976123IN
0x520eB2aF...0A813F2e3
0 ETH0.0032546426.4250834
Unstake172861142023-05-18 11:24:23577 days ago1684409063IN
0x520eB2aF...0A813F2e3
0 ETH0.0046235836.33925765
Claim172861082023-05-18 11:23:11577 days ago1684408991IN
0x520eB2aF...0A813F2e3
0 ETH0.0052700337.57198005
Unstake172564712023-05-14 6:53:11581 days ago1684047191IN
0x520eB2aF...0A813F2e3
0 ETH0.0051618740.56990327
Claim172564682023-05-14 6:52:35581 days ago1684047155IN
0x520eB2aF...0A813F2e3
0 ETH0.0044970437.11507387
Stake171668722023-05-01 15:29:35594 days ago1682954975IN
0x520eB2aF...0A813F2e3
0 ETH0.0125648289.16727693
Claim171491312023-04-29 3:38:11597 days ago1682739491IN
0x520eB2aF...0A813F2e3
0 ETH0.004258334.57395005
Unstake171265182023-04-25 23:23:47600 days ago1682465027IN
0x520eB2aF...0A813F2e3
0 ETH0.0044456135.49844105
Stake170506962023-04-15 6:38:11610 days ago1681540691IN
0x520eB2aF...0A813F2e3
0 ETH0.0034777423.30819157
Claim170506882023-04-15 6:36:35610 days ago1681540595IN
0x520eB2aF...0A813F2e3
0 ETH0.0027885723.01469003
Unstake169380042023-03-30 5:32:23626 days ago1680154343IN
0x520eB2aF...0A813F2e3
0 ETH0.0033616826.42127264
Claim169380012023-03-30 5:31:47626 days ago1680154307IN
0x520eB2aF...0A813F2e3
0 ETH0.0033717627.37599549
Stake168946712023-03-24 3:25:11633 days ago1679628311IN
0x520eB2aF...0A813F2e3
0 ETH0.0018283313.84102603
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PyroStakeUpgrader

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 500 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-12-21
*/

// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0 <0.9.0;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {

    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

contract PyroStakingV2 is Auth {

    struct StakeState {
		uint256 stakedAmount;
		uint256 rewardDebt;
        uint256 aprIndex;
		uint32 lastChangeTime;
		uint32 lockEndTime;
	}

	address public stakingToken;
    uint256 public stakedTokens;
    uint16 public constant denominator = 10000;
    uint16 public depositFee;
    uint16 public earlyWithdrawFee;
    uint32 public withdrawLockPeriod;
    bool public available;
    mapping (uint256 => uint16) internal _aprValues;
    uint256 internal activeAPRIndex;
    uint256 internal lastAPRupdate;
	mapping (address => StakeState) internal stakerDetails;

    event TokenStaked(address indexed user, uint256 amount);
	event TokenUnstaked(address indexed user, uint256 amount, uint256 yield);
	event RewardClaimed(address indexed user, uint256 outAmount);
	event StakingConfigured(uint16 newAPR, uint16 newDepositFee, uint32 newLockPeriod, uint16 newWithdrawFee, bool available);
	event StakingTokenUpdate(address indexed oldToken, address indexed newToken);

    error LockedStake(uint32 unlockTime);
    error NoStakesRequired();
    error DepositFeeTooHigh(uint16 attemptedFee, uint16 maxFee);
    error InvalidWithdrawFee(uint16 attemptedFee, uint16 maxFee);
    error LockTooLong(uint32 attemptedLock, uint32 maxLock);
    error InvalidAPR(uint16 attempted, uint16 min, uint16 max);
    error ZeroStake();
    error StakingUnavailable();
    error NoAvailableYield();
    error StakingActive();
    error NoRewardTokens(uint256 needed, uint256 owned);
    error InvalidWithdraw();
    error GuaranteeTooShort();

    modifier noStakes {
        if (stakedTokens > 0) {
            revert NoStakesRequired();
        }
		_;
	}

	modifier validDepositFee(uint16 fee) {
        uint16 max = denominator / 2;
        if (fee > max) {
            revert DepositFeeTooHigh(fee, max);
        }
		_;
	}

    modifier validWithdrawFee(uint16 fee) {
        if (fee > denominator) {
            revert InvalidWithdrawFee(fee, denominator);
        }
		_;
	}

	modifier validLockPeriod(uint32 time) {
        if (time > 365 days) {
            revert LockTooLong(time, 365 days);
        }
		_;
	}

    modifier validAPR(uint16 proposedAPR) {
        uint16 max = type(uint16).max;
        if (proposedAPR == 0) {
            revert InvalidAPR(0, 1, max);
        }
        if (proposedAPR > max) {
            revert InvalidAPR(proposedAPR, 1, max);
        }
        _;
    }

	constructor(address tokenToStake) Auth(msg.sender) {
		stakingToken = tokenToStake;
		_setStakingConfig(4000, 670, 30 days, 5000, true);
	}

	function setStakingConfiguration(
		uint16 newAPR, uint16 newDepositFee, uint32 newLockPeriod,
        uint16 newWithdrawFee, bool active
	)
		external authorized validAPR(newAPR) validDepositFee(newDepositFee)
        validWithdrawFee(newWithdrawFee) validLockPeriod(newLockPeriod)
	{
		_setStakingConfig(newAPR, newDepositFee, newLockPeriod, newWithdrawFee, active);
	}

	function _setStakingConfig(
		uint16 newAPR, uint16 newDepositFee, uint32 newLockPeriod,
        uint16 newWithdrawFee, bool newAvailability
	) internal {
		_updateAPR(newAPR);
		depositFee = newDepositFee;
		withdrawLockPeriod = newLockPeriod;
        earlyWithdrawFee = newWithdrawFee;
		available = newAvailability;

		emit StakingConfigured(newAPR, newDepositFee, newLockPeriod, newWithdrawFee, newAvailability);
	}

	function setAPR(uint16 newAPR) external authorized validAPR(newAPR) {
		_updateAPR(newAPR);
		emit StakingConfigured(newAPR, depositFee, withdrawLockPeriod, earlyWithdrawFee, available);
	}

    function _updateAPR(uint16 newAPR) internal {
        ++activeAPRIndex;
        _aprValues[activeAPRIndex] = newAPR;
        lastAPRupdate = block.timestamp;
    }

	function setDepositFee(uint16 fee) external authorized validDepositFee(fee) {
		depositFee = fee;
        emit StakingConfigured(getCurrentAPR(), fee, withdrawLockPeriod, earlyWithdrawFee, available);
	}

	function setEarlyWithdrawFee(uint16 fee) external authorized validWithdrawFee(fee) {
		earlyWithdrawFee = fee;
        emit StakingConfigured(getCurrentAPR(), depositFee, withdrawLockPeriod, fee, available);
	}

	function setPoolAvailable(bool active) external authorized {
		available = active;
		emit StakingConfigured(getCurrentAPR(), depositFee, withdrawLockPeriod, earlyWithdrawFee, active);
	}

	function setEarlyWithdrawLock(uint32 time) external authorized validLockPeriod(time) {
		withdrawLockPeriod = time;
		emit StakingConfigured(getCurrentAPR(), depositFee, time, earlyWithdrawFee, available);
	}

    function updateStakingToken(address newToken) external authorized noStakes {
		emit StakingTokenUpdate(stakingToken, newToken);
        stakingToken = newToken;
    }

	function pendingReward(address account) public view virtual returns (uint256) {
		StakeState storage user = stakerDetails[account];
        return _pendingReward(user);
	}

    function _pendingReward(StakeState storage user) internal view returns (uint256) {
        // Last change time of 0 means there's never been a stake to begin with.
		if (user.lastChangeTime == 0) {
			return 0;
		}

		// Elapsed time since last stake update.
		if (block.timestamp <= user.lastChangeTime) {
			return 0;
		}

        // Check whether APR has changed since stake was done.
        // Take this into consideration while securing past APR.
        uint256 accrued;
        uint256 deltaTime;

        if (user.aprIndex != activeAPRIndex) {
            if (user.lastChangeTime >= lastAPRupdate) {
                deltaTime = block.timestamp - user.lastChangeTime;
                accrued = yieldFromElapsedTime(user.stakedAmount, deltaTime, _aprValues[activeAPRIndex]);
            } else {
                uint256 recentDelta = block.timestamp - lastAPRupdate;
                deltaTime = lastAPRupdate - user.lastChangeTime;
                accrued = yieldFromElapsedTime(user.stakedAmount, recentDelta, _aprValues[activeAPRIndex]);
                accrued += yieldFromElapsedTime(user.stakedAmount, deltaTime, _aprValues[user.aprIndex]);
            }
        } else {
            deltaTime = block.timestamp - user.lastChangeTime;
            accrued = yieldFromElapsedTime(user.stakedAmount, deltaTime, _aprValues[user.aprIndex]);
        }

        // Accrued is what currently is pending, reward debt is stored unclaimed yield value from a update.
		return accrued + user.rewardDebt;
    }

	function yieldFromElapsedTime(uint256 amount, uint256 deltaTime, uint16 appliedAPR) public pure returns (uint256) {
		// No elapsed time, no amount, 0% APR obviously means 0 tokens yielded.
		if (amount == 0 || deltaTime == 0 || appliedAPR == 0) {
			return 0;
		}

		// Calculate the owed reward by seconds elapsed derived from the total reward.
		uint256 annuality = annualYield(amount, appliedAPR);
		if (annuality == 0) {
			return 0;
		}

		return (deltaTime * annuality) / 365 days;
	}

	function annualYield(uint256 amount, uint16 appliedAPR) public pure returns (uint256) {
		if (amount == 0 || appliedAPR == 0) {
			return 0;
		}

		return amount * appliedAPR / denominator;
	}

	function stake(uint256 amount) external {
        _stake(msg.sender, amount);
	}

    function _stake(address staker, uint256 amount) internal {
        if (amount == 0) {
            revert ZeroStake();
        }
        if (!available) {
            revert StakingUnavailable();
        }

		StakeState storage user = stakerDetails[staker];
		// Calc unclaimed reward on stake update and set reward timer to now.
        // This allows to increase the stake without needing a claim.
		if (user.lastChangeTime != 0 && user.stakedAmount > 0) {
			user.rewardDebt = _pendingReward(user);
		}
        uint256 stakeAmount = amount;
        // Is deposit fee appliable?
        if (depositFee > 0) {
            uint256 dFee = depositFeeFromAmount(amount);
            unchecked {
                stakeAmount -= dFee;
            }
        }
        unchecked {
		    user.stakedAmount += stakeAmount;
        }

        // First index is 1 and in case of re-stake pending yield has been stored already.
        if (user.aprIndex != activeAPRIndex) {
            user.aprIndex = activeAPRIndex;
        }

        // For a first stake we get the lock period from current configuration.
		uint32 rnow = uint32(block.timestamp);
		user.lastChangeTime = rnow;
        if (user.lockEndTime == 0) {
            user.lockEndTime = rnow + withdrawLockPeriod;
        }

        // Keeping track of overall staked tokens.
        unchecked {
            stakedTokens += stakeAmount;
        }

        // Transfer tokens from staker to the contract.
        IERC20(stakingToken).transferFrom(staker, address(this), amount);

		emit TokenStaked(staker, stakeAmount);
    }

	function depositFeeFromAmount(uint256 amount) public view returns (uint256) {
		if (depositFee == 0) {
			return 0;
		}
		return amount * depositFee / denominator;
	}

	function unstake() public virtual {
		_unstake(msg.sender, false);
	}

    function emergencyUnstake() external {
        _unstake(msg.sender, true);
    }

    function unstakeFor(address staker) external authorized {
        _unstake(staker, false);
    }

    function emergencyUnstakeFor(address staker) external authorized {
        _unstake(staker, true);
    }

	function _unstake(address staker, bool forfeit) internal {
		StakeState storage user = stakerDetails[staker];
		uint256 userStakedTokens = user.stakedAmount;
        if (userStakedTokens == 0) {
            revert ZeroStake();
        }
        uint256 yield;
        uint256 unstakeAmount = userStakedTokens;
        bool isEarlyWithdraw = earlyWithdrawFee > 0 && block.timestamp < user.lockEndTime;

		// Update user staking status.
		// When unstaking is done, claim is automatically done.
        if (forfeit) {
            user.lastChangeTime = uint32(block.timestamp);
            user.rewardDebt = 0;
        } else {
            yield = _claim(user);
        }
		user.stakedAmount = 0;

        // Early withdraw fee.
        if (isEarlyWithdraw) {
            // If withdraw fee is set at 100%, it means the stake is fully locked.
            if (earlyWithdrawFee == denominator) {
                revert LockedStake(user.lockEndTime);
            }
            uint256 fee = userStakedTokens * earlyWithdrawFee / denominator;
            unchecked {
                unstakeAmount -= fee;
            }
        }
        user.lockEndTime = 0;

        // Return token to staker and update staking values.
		IERC20(stakingToken).transfer(staker, unstakeAmount + yield);
        unchecked {
		    stakedTokens -= userStakedTokens;
        }

		emit TokenUnstaked(staker, unstakeAmount, yield);
	}

	function claim() external {
        _claim(msg.sender);
	}

    function claimFor(address staker) external {
         _claim(staker);
    }

    function _claim(address staker) internal {
        StakeState storage user = stakerDetails[staker];
		uint256 outAmount = _claim(user);
        if (outAmount == 0) {
            revert NoAvailableYield();
        }
        if (user.aprIndex != activeAPRIndex) {
            user.aprIndex = activeAPRIndex;
        }
        IERC20(stakingToken).transfer(staker, outAmount);
        emit RewardClaimed(staker, outAmount);
	}

    /**
     * @dev Returns amount to be sent to user after calculating and updating yield.
     */
	function _claim(StakeState storage user) internal returns (uint256) {
		uint256 outAmount = _pendingReward(user);
		if (outAmount > 0) {
			// To protect user funds, reward tokens must not come from their staked tokens.
            // Claim transactions will all fail.
            // Non emergency unstake transactions as well, so it's up to the user to decide either:
            // Wait for availability of reward tokens.
            // Recover stake and forfeit any yield.
			uint256 availableReward = availableRewardTokens();
            if (availableReward < outAmount) {
                revert NoRewardTokens(outAmount, availableReward);
            }
			user.rewardDebt = 0;
			user.lastChangeTime = uint32(block.timestamp);
		}

        return outAmount;
	}

	function canWithdrawTokensNoFee(address user) external view returns (bool) {
		if (stakerDetails[user].lastChangeTime == 0) {
			return false;
		}

		return block.timestamp > stakerDetails[user].lockEndTime;
	}

	function rescueToken(address t) external authorized {
        if (t == stakingToken) {
            revert InvalidWithdraw();
        }
        IERC20 rescuee = IERC20(t);
		uint256 balance = rescuee.balanceOf(address(this));
		rescuee.transfer(msg.sender, balance);
	}

    function rescuePrizeTokens() external authorized {
        uint256 prize = availableRewardTokens();
        if (prize > 0) {
            IERC20(stakingToken).transfer(msg.sender, prize);
        }
	}

	function _getStake(address staker) internal view returns (StakeState memory) {
		return stakerDetails[staker];
	}

	function getOwnPendingReward() external view virtual returns (uint256) {
        StakeState storage user = stakerDetails[msg.sender];
		return _pendingReward(user);
	}

    function getCurrentAPR() public view returns (uint16) {
        return _aprValues[activeAPRIndex];
    }

    function availableRewardTokens() public view virtual returns (uint256) {
        uint256 balance = IERC20(stakingToken).balanceOf(address(this));
        if (stakedTokens >= balance) {
            return 0;
        }
        return balance - stakedTokens;
    }

    function getLastAPRUpdate() external view returns (uint256) {
        return lastAPRupdate;
    }

    function countAPRUpdates() external view returns (uint256) {
        if (activeAPRIndex == 0) {
            return 0;
        }
        return activeAPRIndex - 1;
    }

    function _totalStakedTokens() internal view returns (uint256) {
        return stakedTokens;
    }
}

interface IPyroStaking {
    struct PoolConfiguration {
        uint256 poolStakedTokens;
        uint16 apr;
        uint16 depositFee;
        uint16 earlyWithdrawFee;
        uint32 withdrawLockPeriod;
        bool available;
        bool burnDeposit;
    }
    struct StakeState {
        uint256 stakedAmount;
        uint256 rewardDebt; 
        uint32 lastChangeTime;
        uint32 lockEndTime;
    }
    function pendingReward(address account) external view returns (uint256);
    function forceClaimUnstake(address staker) external;
    function canWithdrawTokensNoFee(address user) external view returns (bool);
    function viewStake(address staker) external view returns (IPyroStaking.StakeState memory);
    function viewPoolDetails() external view returns (PoolConfiguration memory);
    function totalStakedTokens() external view returns (uint256);
}

struct CombinedStakeState {
    uint256 stakedAmount;
    uint256 rewardDebt;
    uint256 oldStaked;
    uint256 oldRewardDebt;
    uint256 newStaked;
    uint256 newRewardDebt;
    uint256 aprIndex;
    uint32 lastChangeTime;
    uint32 lockEndTime;
    uint32 oldLastChangeTime;
    uint32 oldLockEndTime;
}

/**
 * @dev Combines two staking strategies.
 */
contract PyroStakeUpgrader is PyroStakingV2 {

    address public previousStaking;
    bool internal _checkPrevious = true;

    constructor(address prevStaking, address token) PyroStakingV2(token) {
        previousStaking = prevStaking;
        stakingToken = token;
    }

    function pendingReward(address account) public view override returns (uint256) {
        uint256 previousPending;
        if (_checkPrevious && previousStaking != address(0)) {
            previousPending = IPyroStaking(previousStaking).pendingReward(account);
        }
        uint256 currPending = super.pendingReward(account);
        return previousPending + currPending;
    }

    function unstake() public override {
        if (_checkPrevious && previousStaking != address(0)) {
            try IPyroStaking(previousStaking).forceClaimUnstake(msg.sender) {} catch {}
        }
        super.unstake();
    }

    function unstakeV1Only() external {
        IPyroStaking(previousStaking).forceClaimUnstake(msg.sender);
    }

    function availableRewardTokens() public view override returns (uint256) {
        uint256 oldAvailable;
        if (_checkPrevious && previousStaking != address(0)) {
            uint256 oldBalance = IERC20(stakingToken).balanceOf(previousStaking);
            uint256 stakedOld = IPyroStaking(previousStaking).totalStakedTokens();
            if (oldBalance > stakedOld) {
                oldAvailable = oldBalance - stakedOld;
            }
        }
        uint256 v2Available = super.availableRewardTokens();

        return oldAvailable + v2Available;
    }

    function getStake(address staker) public view returns (CombinedStakeState memory) {
        CombinedStakeState memory comStake;
 
        PyroStakingV2.StakeState memory newStake = super._getStake(staker);
        comStake.stakedAmount = newStake.stakedAmount;
        comStake.newStaked = newStake.stakedAmount;
        comStake.rewardDebt = newStake.rewardDebt;
        comStake.newRewardDebt = newStake.rewardDebt;
        comStake.aprIndex = newStake.aprIndex;
        comStake.lastChangeTime = newStake.lastChangeTime;
        comStake.lockEndTime = newStake.lockEndTime;

        if (_checkPrevious && previousStaking != address(0)) {
            try IPyroStaking(previousStaking).viewStake(staker) returns (IPyroStaking.StakeState memory oldStake) {
                comStake.oldStaked = oldStake.stakedAmount;
                comStake.oldRewardDebt = oldStake.rewardDebt;
                comStake.stakedAmount += oldStake.stakedAmount;
                comStake.rewardDebt += oldStake.rewardDebt;
                comStake.oldLastChangeTime = oldStake.lastChangeTime;
                comStake.oldLockEndTime = oldStake.lockEndTime;
            } catch {}
        }

        return comStake;
    }

    function getOwnStake() external view returns (CombinedStakeState memory) {
        return getStake(msg.sender);
    }

	function getOwnPendingReward() external view override returns (uint256) {
        return pendingReward(msg.sender);
    }

    function totalStakedTokens() external view returns (uint256) {
        uint256 stakedOld;
        if (_checkPrevious && previousStaking != address(0)) {
            stakedOld = IPyroStaking(previousStaking).totalStakedTokens();
        }
        uint256 stakeV2 = super._totalStakedTokens();

        return stakedOld + stakeV2;
    }

    function setCheckV1(bool doCheck) external authorized {
        _checkPrevious = doCheck;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"prevStaking","type":"address"},{"internalType":"address","name":"token","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint16","name":"attemptedFee","type":"uint16"},{"internalType":"uint16","name":"maxFee","type":"uint16"}],"name":"DepositFeeTooHigh","type":"error"},{"inputs":[],"name":"GuaranteeTooShort","type":"error"},{"inputs":[{"internalType":"uint16","name":"attempted","type":"uint16"},{"internalType":"uint16","name":"min","type":"uint16"},{"internalType":"uint16","name":"max","type":"uint16"}],"name":"InvalidAPR","type":"error"},{"inputs":[],"name":"InvalidWithdraw","type":"error"},{"inputs":[{"internalType":"uint16","name":"attemptedFee","type":"uint16"},{"internalType":"uint16","name":"maxFee","type":"uint16"}],"name":"InvalidWithdrawFee","type":"error"},{"inputs":[{"internalType":"uint32","name":"attemptedLock","type":"uint32"},{"internalType":"uint32","name":"maxLock","type":"uint32"}],"name":"LockTooLong","type":"error"},{"inputs":[{"internalType":"uint32","name":"unlockTime","type":"uint32"}],"name":"LockedStake","type":"error"},{"inputs":[],"name":"NoAvailableYield","type":"error"},{"inputs":[{"internalType":"uint256","name":"needed","type":"uint256"},{"internalType":"uint256","name":"owned","type":"uint256"}],"name":"NoRewardTokens","type":"error"},{"inputs":[],"name":"NoStakesRequired","type":"error"},{"inputs":[],"name":"StakingActive","type":"error"},{"inputs":[],"name":"StakingUnavailable","type":"error"},{"inputs":[],"name":"ZeroStake","type":"error"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"outAmount","type":"uint256"}],"name":"RewardClaimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"newAPR","type":"uint16"},{"indexed":false,"internalType":"uint16","name":"newDepositFee","type":"uint16"},{"indexed":false,"internalType":"uint32","name":"newLockPeriod","type":"uint32"},{"indexed":false,"internalType":"uint16","name":"newWithdrawFee","type":"uint16"},{"indexed":false,"internalType":"bool","name":"available","type":"bool"}],"name":"StakingConfigured","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldToken","type":"address"},{"indexed":true,"internalType":"address","name":"newToken","type":"address"}],"name":"StakingTokenUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TokenStaked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"yield","type":"uint256"}],"name":"TokenUnstaked","type":"event"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint16","name":"appliedAPR","type":"uint16"}],"name":"annualYield","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"available","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"availableRewardTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"user","type":"address"}],"name":"canWithdrawTokensNoFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"claimFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"countAPRUpdates","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"denominator","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"depositFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"depositFeeFromAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"earlyWithdrawFee","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"emergencyUnstakeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCurrentAPR","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLastAPRUpdate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnPendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnStake","outputs":[{"components":[{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"oldStaked","type":"uint256"},{"internalType":"uint256","name":"oldRewardDebt","type":"uint256"},{"internalType":"uint256","name":"newStaked","type":"uint256"},{"internalType":"uint256","name":"newRewardDebt","type":"uint256"},{"internalType":"uint256","name":"aprIndex","type":"uint256"},{"internalType":"uint32","name":"lastChangeTime","type":"uint32"},{"internalType":"uint32","name":"lockEndTime","type":"uint32"},{"internalType":"uint32","name":"oldLastChangeTime","type":"uint32"},{"internalType":"uint32","name":"oldLockEndTime","type":"uint32"}],"internalType":"struct CombinedStakeState","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"getStake","outputs":[{"components":[{"internalType":"uint256","name":"stakedAmount","type":"uint256"},{"internalType":"uint256","name":"rewardDebt","type":"uint256"},{"internalType":"uint256","name":"oldStaked","type":"uint256"},{"internalType":"uint256","name":"oldRewardDebt","type":"uint256"},{"internalType":"uint256","name":"newStaked","type":"uint256"},{"internalType":"uint256","name":"newRewardDebt","type":"uint256"},{"internalType":"uint256","name":"aprIndex","type":"uint256"},{"internalType":"uint32","name":"lastChangeTime","type":"uint32"},{"internalType":"uint32","name":"lockEndTime","type":"uint32"},{"internalType":"uint32","name":"oldLastChangeTime","type":"uint32"},{"internalType":"uint32","name":"oldLockEndTime","type":"uint32"}],"internalType":"struct CombinedStakeState","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"pendingReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"previousStaking","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rescuePrizeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"t","type":"address"}],"name":"rescueToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newAPR","type":"uint16"}],"name":"setAPR","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"doCheck","type":"bool"}],"name":"setCheckV1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setDepositFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"fee","type":"uint16"}],"name":"setEarlyWithdrawFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"time","type":"uint32"}],"name":"setEarlyWithdrawLock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"active","type":"bool"}],"name":"setPoolAvailable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"newAPR","type":"uint16"},{"internalType":"uint16","name":"newDepositFee","type":"uint16"},{"internalType":"uint32","name":"newLockPeriod","type":"uint32"},{"internalType":"uint16","name":"newWithdrawFee","type":"uint16"},{"internalType":"bool","name":"active","type":"bool"}],"name":"setStakingConfiguration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"stakingToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStakedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"adr","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"unstakeFor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstakeV1Only","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"updateStakingToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawLockPeriod","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deltaTime","type":"uint256"},{"internalType":"uint16","name":"appliedAPR","type":"uint16"}],"name":"yieldFromElapsedTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"}]

60806040526009805460ff60a01b1916600160a01b1790553480156200002457600080fd5b5060405162002a7338038062002a738339810160408190526200004791620001ff565b60008054336001600160a01b0319918216811783558252600160208190526040909220805460ff191683179055600280549091166001600160a01b0384161790558190620000a690610fa09061029e9062278d009061138890620000d9565b50600980546001600160a01b039384166001600160a01b031991821617909155600280549290931691161790556200025f565b620000e485620001a2565b6004805461ffff86811667ffffffff0000ffff19909216821764010000000063ffffffff88169081029190911768ff00000000ffff000019166201000087841690810260ff60401b191691909117680100000000000000008715159081029190911790955560408051938b168452602084019490945292820152606081019190915260808101919091527f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c09060a00160405180910390a15050505050565b600660008154620001b39062000237565b909155506006546000908152600560205260409020805461ffff191661ffff9290921691909117905542600755565b80516001600160a01b0381168114620001fa57600080fd5b919050565b600080604083850312156200021357600080fd5b6200021e83620001e2565b91506200022e60208401620001e2565b90509250929050565b6000600182016200025857634e487b7160e01b600052601160045260246000fd5b5060010190565b612804806200026f6000396000f3fe608060405234801561001057600080fd5b50600436106102b45760003560e01c806383ad068c11610171578063c66f38fe116100d3578063f0b37c0411610097578063f9ca633a11610071578063f9ca633a146105d4578063fb7ba582146105dc578063fe9fbb80146105e457600080fd5b8063f0b37c041461059b578063f2fde38b146105ae578063f40f0f52146105c157600080fd5b8063c66f38fe14610551578063cb62900914610559578063ddeae03314610562578063df1d17ab14610575578063f09849851461058857600080fd5b8063a80a788211610135578063b6a5d7de1161010f578063b6a5d7de14610523578063b8d4d63b14610536578063bbb5d9731461053e57600080fd5b8063a80a7882146104e9578063a9bf1917146104fd578063ad4bed701461051057600080fd5b806383ad068c1461049f57806392b30b95146104b257806396ce0795146104c55780639f94e272146104ce578063a694fc3a146104d657600080fd5b80634460d3cf1161021a5780635fda307a116101de57806372f702f3116101b857806372f702f3146104645780637589cf2f146104775780637a7664601461047f57600080fd5b80635fda307a1461043057806367a52793146104435780636d3a4ac81461045157600080fd5b80634460d3cf146103ce578063489450f9146103e157806348a0d754146103e95780634c24777e146103fd5780634e71d92d1461042857600080fd5b80632cbb26191161027c578063302207cf11610256578063302207cf146103a057806330432e46146103b35780633ae73259146103c657600080fd5b80632cbb2619146103535780632def6620146103665780632f54bf6e1461036e57600080fd5b806307168489146102b95780630fe21264146102d45780631b26df23146102e957806321ae05c8146102fc5780632628490f14610326575b600080fd5b6102c1610610565b6040519081526020015b60405180910390f35b6102e76102e236600461241e565b610620565b005b6102c16102f7366004612439565b610767565b60065460009081526005602052604090205461ffff165b60405161ffff90911681526020016102cb565b60045461033e90640100000000900463ffffffff1681565b60405163ffffffff90911681526020016102cb565b6102e761036136600461247a565b6107a9565b6102e7610804565b61039061037c36600461247a565b6000546001600160a01b0391821691161490565b60405190151581526020016102cb565b6102c16103ae366004612497565b61088e565b6102e76103c13660046124da565b6108f9565b6102c1610964565b6102e76103dc36600461247a565b610a29565b6007546102c1565b60045461039090600160401b900460ff1681565b600954610410906001600160a01b031681565b6040516001600160a01b0390911681526020016102cb565b6102e7610b8c565b61039061043e36600461247a565b610b95565b6004546103139061ffff1681565b6102e761045f36600461241e565b610bf4565b600254610410906001600160a01b031681565b6102e7610d39565b61049261048d36600461247a565b610d44565b6040516102cb91906124f7565b6102e76104ad36600461247a565b610ea5565b6102e76104c036600461241e565b610f7c565b61031361271081565b6102c16110ab565b6102e76104e436600461258e565b6111ec565b6004546103139062010000900461ffff1681565b6102e761050b3660046124da565b6111f6565b6102e761051e3660046125b9565b6112e9565b6102e761053136600461247a565b611418565b6102c1611482565b6102e761054c36600461247a565b6114a3565b6102e76114fb565b6102c160035481565b6102e761057036600461247a565b611554565b6102e76105833660046125d6565b61155d565b6102c161059636600461258e565b6116fa565b6102e76105a936600461247a565b611731565b6102e76105bc36600461247a565b611795565b6102c16105cf36600461247a565b61184b565b6102e7611908565b6104926119e0565b6103906105f236600461247a565b6001600160a01b031660009081526001602052604090205460ff1690565b600061061b3361184b565b905090565b3360009081526001602052604090205460ff166106725760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064015b60405180910390fd5b806000610682600261271061266d565b90508061ffff168261ffff1611156106bb5760405163113e738160e11b815261ffff808416600483015282166024820152604401610669565b6004805461ffff851661ffff199091161790557f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c061070b60065460009081526005602052604090205461ffff1690565b6004546040805161ffff93841681528388166020820152640100000000830463ffffffff16918101919091526201000082049092166060830152600160401b900460ff161515608082015260a0015b60405180910390a1505050565b6000821580610778575061ffff8216155b15610785575060006107a3565b61271061079661ffff84168561268e565b6107a091906126a5565b90505b92915050565b3360009081526001602052604090205460ff166107f65760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b6108018160006119f1565b50565b600954600160a01b900460ff16801561082757506009546001600160a01b031615155b15610884576009546040516343ec644160e11b81523360048201526001600160a01b03909116906387d8c88290602401600060405180830381600087803b15801561087157600080fd5b505af1925050508015610882575060015b505b61088c611c21565b565b600083158061089b575082155b806108a8575061ffff8216155b156108b5575060006108f2565b60006108c18584610767565b9050806000036108d55760009150506108f2565b6301e133806108e4828661268e565b6108ee91906126a5565b9150505b9392505050565b3360009081526001602052604090205460ff166109465760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b60098054911515600160a01b0260ff60a01b19909216919091179055565b6009546000908190600160a01b900460ff16801561098c57506009546001600160a01b031615155b15610a0b57600960009054906101000a90046001600160a01b03166001600160a01b0316633ae732596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0891906126b9565b90505b6000610a1660035490565b9050610a2281836126d2565b9250505090565b3360009081526001602052604090205460ff16610a765760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b6002546001600160a01b0390811690821603610aa5576040516335411d8b60e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1291906126b9565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8691906126e5565b50505050565b61088c33611c2c565b6001600160a01b03811660009081526008602052604081206003015463ffffffff168103610bc557506000919050565b506001600160a01b0316600090815260086020526040902060030154640100000000900463ffffffff16421190565b3360009081526001602052604090205460ff16610c415760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b8061ffff808216600003610c7c5760405163b81ebab960e01b8152600060048201526001602482015261ffff82166044820152606401610669565b8061ffff168261ffff161115610cba5760405163b81ebab960e01b815261ffff80841660048301526001602483015282166044820152606401610669565b610cc383611d47565b6004546040805161ffff80871682528084166020830152640100000000840463ffffffff16928201929092526201000083049091166060820152600160401b90910460ff16151560808201527f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c09060a00161075a565b61088c3360016119f1565b610d4c612395565b610d54612395565b6000610d5f84611d85565b80518352805160808085019190915260208083018051918601919091525160a0850152604082015160c0850152606082015163ffffffff90811660e08601529082015116610100840152600954909150600160a01b900460ff168015610dcf57506009546001600160a01b031615155b15610e9e5760095460405163a0ac265560e01b81526001600160a01b0386811660048301529091169063a0ac265590602401608060405180830381865afa925050508015610e3a575060408051601f3d908101601f19168201909252610e3791810190612702565b60015b15610e9e578051604084015260208101516060840152805183518490610e619083906126d2565b9052506020808201519084018051610e7a9083906126d2565b905250604081015163ffffffff908116610120850152606090910151166101408301525b5092915050565b3360009081526001602052604090205460ff16610ef25760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b60035415610f1357604051630d26615360e41b815260040160405180910390fd5b6002546040516001600160a01b038084169216907fe9009ef01442bf4abfee682ac3f0470c1bde8d70770cdd78c69d7fa67996b45e90600090a36002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360009081526001602052604090205460ff16610fc95760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b8061271061ffff82161115610fff57604051630c1e501760e41b815261ffff821660048201526127106024820152604401610669565b6004805461ffff8416620100000263ffff0000199091161790557f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c061105660065460009081526005602052604090205461ffff1690565b6004546040805161ffff93841681528383166020820152640100000000830463ffffffff16918101919091529185166060830152600160401b900460ff161515608082015260a0015b60405180910390a15050565b6009546000908190600160a01b900460ff1680156110d357506009546001600160a01b031615155b156111e2576002546009546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d91906126b9565b90506000600960009054906101000a90046001600160a01b03166001600160a01b0316633ae732596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c891906126b9565b9050808211156111df576111dc8183612785565b92505b50505b6000610a16611e28565b6108013382611ebf565b3360009081526001602052604090205460ff166112435760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b6004805468ff00000000000000001916600160401b831515021790556006546000908152600560205260409020547f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c09061ffff166004546040805161ffff93841681528383166020820152640100000000830463ffffffff1691810191909152620100009091049091166060820152821515608082015260a0015b60405180910390a150565b3360009081526001602052604090205460ff166113365760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b806301e133808163ffffffff16111561137457604051632b44144b60e11b815263ffffffff821660048201526301e133806024820152604401610669565b6004805467ffffffff00000000191664010000000063ffffffff8516021790556006546000908152600560205260409020547f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c09061ffff166004546040805161ffff9384168152838316602082015263ffffffff8716918101919091526201000082049092166060830152600160401b900460ff161515608082015260a00161109f565b6000546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610669565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b60006006546000036114945750600090565b600160065461061b9190612785565b3360009081526001602052604090205460ff166114f05760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b6108018160016119f1565b6009546040516343ec644160e11b81523360048201526001600160a01b03909116906387d8c88290602401600060405180830381600087803b15801561154057600080fd5b505af1158015610b86573d6000803e3d6000fd5b61080181611c2c565b3360009081526001602052604090205460ff166115aa5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b8461ffff8082166000036115e55760405163b81ebab960e01b8152600060048201526001602482015261ffff82166044820152606401610669565b8061ffff168261ffff1611156116235760405163b81ebab960e01b815261ffff80841660048301526001602483015282166044820152606401610669565b856000611633600261271061266d565b90508061ffff168261ffff16111561166c5760405163113e738160e11b815261ffff808416600483015282166024820152604401610669565b8561271061ffff821611156116a257604051630c1e501760e41b815261ffff821660048201526127106024820152604401610669565b876301e133808163ffffffff1611156116e057604051632b44144b60e11b815263ffffffff821660048201526301e133806024820152604401610669565b6116ed8b8b8b8b8b6120c7565b5050505050505050505050565b60045460009061ffff16810361171257506000919050565b600454612710906117279061ffff168461268e565b6107a391906126a5565b6000546001600160a01b031633146117745760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610669565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146117d85760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610669565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616391016112de565b6009546000908190600160a01b900460ff16801561187357506009546001600160a01b031615155b156118e957600954604051637a0787a960e11b81526001600160a01b0385811660048301529091169063f40f0f5290602401602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e691906126b9565b90505b60006118f48461218e565b905061190081836126d2565b949350505050565b3360009081526001602052604090205460ff166119555760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b600061195f6110ab565b905080156108015760025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156119b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119dc91906126e5565b5050565b6119e8612395565b61061b33610d44565b6001600160a01b038216600090815260086020526040812080549091819003611a2d5760405163150a67e960e01b815260040160405180910390fd5b6004546000908290829062010000900461ffff1615801590611a6057506003850154640100000000900463ffffffff1642105b90508515611a8b5760038501805463ffffffff19164263ffffffff1617905560006001860155611a97565b611a94856121af565b92505b600085558015611b145760045461270f196201000090910461ffff1601611ae657600385015460405163bb80e83960e01b815264010000000090910463ffffffff166004820152602401610669565b60045460009061271090611b049062010000900461ffff168761268e565b611b0e91906126a5565b90920391505b60038501805467ffffffff00000000191690556002546001600160a01b031663a9059cbb88611b4386866126d2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bca91906126e5565b5060038054859003905560408051838152602081018590526001600160a01b038916917f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf910160405180910390a250505050505050565b61088c3360006119f1565b6001600160a01b038116600090815260086020526040812090611c4e826121af565b905080600003611c715760405163fa92394f60e01b815260040160405180910390fd5b600654826002015414611c875760065460028301555b60025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015611cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfe91906126e5565b50826001600160a01b03167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724182604051611d3a91815260200190565b60405180910390a2505050565b600660008154611d5690612798565b909155506006546000908152600560205260409020805461ffff191661ffff9290921691909117905542600755565b611dc36040518060a00160405280600081526020016000815260200160008152602001600063ffffffff168152602001600063ffffffff1681525090565b506001600160a01b0316600090815260086020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000090910416608082015290565b6002546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9991906126b9565b90508060035410611eac57600091505090565b600354611eb99082612785565b91505090565b80600003611ee05760405163150a67e960e01b815260040160405180910390fd5b600454600160401b900460ff16611f0a5760405163ac9108a560e01b815260040160405180910390fd5b6001600160a01b0382166000908152600860205260409020600381015463ffffffff1615801590611f3b5750805415155b15611f4f57611f498161221f565b60018201555b600454829061ffff1615611f6e576000611f68846116fa565b90910390505b815481018255600654600283015414611f8a5760065460028301555b60038201805463ffffffff19164263ffffffff818116929092179283905591640100000000900416600003611ff757600454611fd490640100000000900463ffffffff16826127b1565b8360030160046101000a81548163ffffffff021916908363ffffffff1602179055505b60038054830190556002546040516323b872dd60e01b81526001600160a01b03878116600483015230602483015260448201879052909116906323b872dd906064016020604051808303816000875af1158015612058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207c91906126e5565b50846001600160a01b03167f1fdab8a8457aaf782e4b6217d6ffa6f5006eda7e50922dd092b2e1524275d774836040516120b891815260200190565b60405180910390a25050505050565b6120d085611d47565b6004805461ffff86811667ffffffff0000ffff19909216821764010000000063ffffffff88169081029190911768ff00000000ffff000019166201000087841690810268ff0000000000000000191691909117600160401b8715159081029190911790955560408051938b168452602084019490945292820152606081019190915260808101919091527f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c09060a00160405180910390a15050505050565b6001600160a01b03811660009081526008602052604081206108f28161221f565b6000806121bb8361221f565b905080156107a35760006121cd6110ab565b9050818110156121fa57604051634cbad4bb60e11b81526004810183905260248101829052604401610669565b506000600184015560038301805463ffffffff19164263ffffffff1617905592915050565b600381015460009063ffffffff16810361223b57506000919050565b600382015463ffffffff16421161225457506000919050565b60008060065484600201541461234657600754600385015463ffffffff16106122b957600384015461228c9063ffffffff1642612785565b84546006546000908152600560205260409020549192506122b291839061ffff1661088e565b9150612386565b6000600754426122c99190612785565b60038601546007549192506122e69163ffffffff90911690612785565b855460065460009081526005602052604090205491935061230c91839061ffff1661088e565b8554600287015460009081526005602052604090205491945061233491849061ffff1661088e565b61233e90846126d2565b925050612386565b600384015461235b9063ffffffff1642612785565b8454600286015460009081526005602052604090205491925061238391839061ffff1661088e565b91505b600184015461190090836126d2565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff1681525090565b803561ffff8116811461241957600080fd5b919050565b60006020828403121561243057600080fd5b6107a082612407565b6000806040838503121561244c57600080fd5b8235915061245c60208401612407565b90509250929050565b6001600160a01b038116811461080157600080fd5b60006020828403121561248c57600080fd5b81356108f281612465565b6000806000606084860312156124ac57600080fd5b83359250602084013591506124c360408501612407565b90509250925092565b801515811461080157600080fd5b6000602082840312156124ec57600080fd5b81356108f2816124cc565b600061016082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015161255760e084018263ffffffff169052565b506101008381015163ffffffff90811691840191909152610120808501518216908401526101409384015116929091019190915290565b6000602082840312156125a057600080fd5b5035919050565b63ffffffff8116811461080157600080fd5b6000602082840312156125cb57600080fd5b81356108f2816125a7565b600080600080600060a086880312156125ee57600080fd5b6125f786612407565b945061260560208701612407565b93506040860135612615816125a7565b925061262360608701612407565b91506080860135612633816124cc565b809150509295509295909350565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff8084168061268257612682612641565b92169190910492915050565b80820281158282048414176107a3576107a3612657565b6000826126b4576126b4612641565b500490565b6000602082840312156126cb57600080fd5b5051919050565b808201808211156107a3576107a3612657565b6000602082840312156126f757600080fd5b81516108f2816124cc565b60006080828403121561271457600080fd5b6040516080810181811067ffffffffffffffff8211171561274557634e487b7160e01b600052604160045260246000fd5b806040525082518152602083015160208201526040830151612766816125a7565b60408201526060830151612779816125a7565b60608201529392505050565b818103818111156107a3576107a3612657565b6000600182016127aa576127aa612657565b5060010190565b63ffffffff818116838216019080821115610e9e57610e9e61265756fea2646970667358221220474b41417d129f87e7aea94aee5f5555f018e2b8dffc34333ca7aa72e3ab143c64736f6c6343000811003300000000000000000000000034aee49b506e43fdd4bea24f65e4e05ef5a07a0c0000000000000000000000001e2d230c7a7f4c679fb1378f1f51dedeae85cd72

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102b45760003560e01c806383ad068c11610171578063c66f38fe116100d3578063f0b37c0411610097578063f9ca633a11610071578063f9ca633a146105d4578063fb7ba582146105dc578063fe9fbb80146105e457600080fd5b8063f0b37c041461059b578063f2fde38b146105ae578063f40f0f52146105c157600080fd5b8063c66f38fe14610551578063cb62900914610559578063ddeae03314610562578063df1d17ab14610575578063f09849851461058857600080fd5b8063a80a788211610135578063b6a5d7de1161010f578063b6a5d7de14610523578063b8d4d63b14610536578063bbb5d9731461053e57600080fd5b8063a80a7882146104e9578063a9bf1917146104fd578063ad4bed701461051057600080fd5b806383ad068c1461049f57806392b30b95146104b257806396ce0795146104c55780639f94e272146104ce578063a694fc3a146104d657600080fd5b80634460d3cf1161021a5780635fda307a116101de57806372f702f3116101b857806372f702f3146104645780637589cf2f146104775780637a7664601461047f57600080fd5b80635fda307a1461043057806367a52793146104435780636d3a4ac81461045157600080fd5b80634460d3cf146103ce578063489450f9146103e157806348a0d754146103e95780634c24777e146103fd5780634e71d92d1461042857600080fd5b80632cbb26191161027c578063302207cf11610256578063302207cf146103a057806330432e46146103b35780633ae73259146103c657600080fd5b80632cbb2619146103535780632def6620146103665780632f54bf6e1461036e57600080fd5b806307168489146102b95780630fe21264146102d45780631b26df23146102e957806321ae05c8146102fc5780632628490f14610326575b600080fd5b6102c1610610565b6040519081526020015b60405180910390f35b6102e76102e236600461241e565b610620565b005b6102c16102f7366004612439565b610767565b60065460009081526005602052604090205461ffff165b60405161ffff90911681526020016102cb565b60045461033e90640100000000900463ffffffff1681565b60405163ffffffff90911681526020016102cb565b6102e761036136600461247a565b6107a9565b6102e7610804565b61039061037c36600461247a565b6000546001600160a01b0391821691161490565b60405190151581526020016102cb565b6102c16103ae366004612497565b61088e565b6102e76103c13660046124da565b6108f9565b6102c1610964565b6102e76103dc36600461247a565b610a29565b6007546102c1565b60045461039090600160401b900460ff1681565b600954610410906001600160a01b031681565b6040516001600160a01b0390911681526020016102cb565b6102e7610b8c565b61039061043e36600461247a565b610b95565b6004546103139061ffff1681565b6102e761045f36600461241e565b610bf4565b600254610410906001600160a01b031681565b6102e7610d39565b61049261048d36600461247a565b610d44565b6040516102cb91906124f7565b6102e76104ad36600461247a565b610ea5565b6102e76104c036600461241e565b610f7c565b61031361271081565b6102c16110ab565b6102e76104e436600461258e565b6111ec565b6004546103139062010000900461ffff1681565b6102e761050b3660046124da565b6111f6565b6102e761051e3660046125b9565b6112e9565b6102e761053136600461247a565b611418565b6102c1611482565b6102e761054c36600461247a565b6114a3565b6102e76114fb565b6102c160035481565b6102e761057036600461247a565b611554565b6102e76105833660046125d6565b61155d565b6102c161059636600461258e565b6116fa565b6102e76105a936600461247a565b611731565b6102e76105bc36600461247a565b611795565b6102c16105cf36600461247a565b61184b565b6102e7611908565b6104926119e0565b6103906105f236600461247a565b6001600160a01b031660009081526001602052604090205460ff1690565b600061061b3361184b565b905090565b3360009081526001602052604090205460ff166106725760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b60448201526064015b60405180910390fd5b806000610682600261271061266d565b90508061ffff168261ffff1611156106bb5760405163113e738160e11b815261ffff808416600483015282166024820152604401610669565b6004805461ffff851661ffff199091161790557f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c061070b60065460009081526005602052604090205461ffff1690565b6004546040805161ffff93841681528388166020820152640100000000830463ffffffff16918101919091526201000082049092166060830152600160401b900460ff161515608082015260a0015b60405180910390a1505050565b6000821580610778575061ffff8216155b15610785575060006107a3565b61271061079661ffff84168561268e565b6107a091906126a5565b90505b92915050565b3360009081526001602052604090205460ff166107f65760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b6108018160006119f1565b50565b600954600160a01b900460ff16801561082757506009546001600160a01b031615155b15610884576009546040516343ec644160e11b81523360048201526001600160a01b03909116906387d8c88290602401600060405180830381600087803b15801561087157600080fd5b505af1925050508015610882575060015b505b61088c611c21565b565b600083158061089b575082155b806108a8575061ffff8216155b156108b5575060006108f2565b60006108c18584610767565b9050806000036108d55760009150506108f2565b6301e133806108e4828661268e565b6108ee91906126a5565b9150505b9392505050565b3360009081526001602052604090205460ff166109465760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b60098054911515600160a01b0260ff60a01b19909216919091179055565b6009546000908190600160a01b900460ff16801561098c57506009546001600160a01b031615155b15610a0b57600960009054906101000a90046001600160a01b03166001600160a01b0316633ae732596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0891906126b9565b90505b6000610a1660035490565b9050610a2281836126d2565b9250505090565b3360009081526001602052604090205460ff16610a765760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b6002546001600160a01b0390811690821603610aa5576040516335411d8b60e01b815260040160405180910390fd5b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610aee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1291906126b9565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af1158015610b62573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b8691906126e5565b50505050565b61088c33611c2c565b6001600160a01b03811660009081526008602052604081206003015463ffffffff168103610bc557506000919050565b506001600160a01b0316600090815260086020526040902060030154640100000000900463ffffffff16421190565b3360009081526001602052604090205460ff16610c415760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b8061ffff808216600003610c7c5760405163b81ebab960e01b8152600060048201526001602482015261ffff82166044820152606401610669565b8061ffff168261ffff161115610cba5760405163b81ebab960e01b815261ffff80841660048301526001602483015282166044820152606401610669565b610cc383611d47565b6004546040805161ffff80871682528084166020830152640100000000840463ffffffff16928201929092526201000083049091166060820152600160401b90910460ff16151560808201527f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c09060a00161075a565b61088c3360016119f1565b610d4c612395565b610d54612395565b6000610d5f84611d85565b80518352805160808085019190915260208083018051918601919091525160a0850152604082015160c0850152606082015163ffffffff90811660e08601529082015116610100840152600954909150600160a01b900460ff168015610dcf57506009546001600160a01b031615155b15610e9e5760095460405163a0ac265560e01b81526001600160a01b0386811660048301529091169063a0ac265590602401608060405180830381865afa925050508015610e3a575060408051601f3d908101601f19168201909252610e3791810190612702565b60015b15610e9e578051604084015260208101516060840152805183518490610e619083906126d2565b9052506020808201519084018051610e7a9083906126d2565b905250604081015163ffffffff908116610120850152606090910151166101408301525b5092915050565b3360009081526001602052604090205460ff16610ef25760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b60035415610f1357604051630d26615360e41b815260040160405180910390fd5b6002546040516001600160a01b038084169216907fe9009ef01442bf4abfee682ac3f0470c1bde8d70770cdd78c69d7fa67996b45e90600090a36002805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b3360009081526001602052604090205460ff16610fc95760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b8061271061ffff82161115610fff57604051630c1e501760e41b815261ffff821660048201526127106024820152604401610669565b6004805461ffff8416620100000263ffff0000199091161790557f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c061105660065460009081526005602052604090205461ffff1690565b6004546040805161ffff93841681528383166020820152640100000000830463ffffffff16918101919091529185166060830152600160401b900460ff161515608082015260a0015b60405180910390a15050565b6009546000908190600160a01b900460ff1680156110d357506009546001600160a01b031615155b156111e2576002546009546040516370a0823160e01b81526001600160a01b03918216600482015260009291909116906370a0823190602401602060405180830381865afa158015611129573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114d91906126b9565b90506000600960009054906101000a90046001600160a01b03166001600160a01b0316633ae732596040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c891906126b9565b9050808211156111df576111dc8183612785565b92505b50505b6000610a16611e28565b6108013382611ebf565b3360009081526001602052604090205460ff166112435760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b6004805468ff00000000000000001916600160401b831515021790556006546000908152600560205260409020547f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c09061ffff166004546040805161ffff93841681528383166020820152640100000000830463ffffffff1691810191909152620100009091049091166060820152821515608082015260a0015b60405180910390a150565b3360009081526001602052604090205460ff166113365760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b806301e133808163ffffffff16111561137457604051632b44144b60e11b815263ffffffff821660048201526301e133806024820152604401610669565b6004805467ffffffff00000000191664010000000063ffffffff8516021790556006546000908152600560205260409020547f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c09061ffff166004546040805161ffff9384168152838316602082015263ffffffff8716918101919091526201000082049092166060830152600160401b900460ff161515608082015260a00161109f565b6000546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610669565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b60006006546000036114945750600090565b600160065461061b9190612785565b3360009081526001602052604090205460ff166114f05760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b6108018160016119f1565b6009546040516343ec644160e11b81523360048201526001600160a01b03909116906387d8c88290602401600060405180830381600087803b15801561154057600080fd5b505af1158015610b86573d6000803e3d6000fd5b61080181611c2c565b3360009081526001602052604090205460ff166115aa5760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b8461ffff8082166000036115e55760405163b81ebab960e01b8152600060048201526001602482015261ffff82166044820152606401610669565b8061ffff168261ffff1611156116235760405163b81ebab960e01b815261ffff80841660048301526001602483015282166044820152606401610669565b856000611633600261271061266d565b90508061ffff168261ffff16111561166c5760405163113e738160e11b815261ffff808416600483015282166024820152604401610669565b8561271061ffff821611156116a257604051630c1e501760e41b815261ffff821660048201526127106024820152604401610669565b876301e133808163ffffffff1611156116e057604051632b44144b60e11b815263ffffffff821660048201526301e133806024820152604401610669565b6116ed8b8b8b8b8b6120c7565b5050505050505050505050565b60045460009061ffff16810361171257506000919050565b600454612710906117279061ffff168461268e565b6107a391906126a5565b6000546001600160a01b031633146117745760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610669565b6001600160a01b03166000908152600160205260409020805460ff19169055565b6000546001600160a01b031633146117d85760405162461bcd60e51b815260206004820152600660248201526510a7aba722a960d11b6044820152606401610669565b6000805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616391016112de565b6009546000908190600160a01b900460ff16801561187357506009546001600160a01b031615155b156118e957600954604051637a0787a960e11b81526001600160a01b0385811660048301529091169063f40f0f5290602401602060405180830381865afa1580156118c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118e691906126b9565b90505b60006118f48461218e565b905061190081836126d2565b949350505050565b3360009081526001602052604090205460ff166119555760405162461bcd60e51b815260206004820152600b60248201526a085055551213d49256915160aa1b6044820152606401610669565b600061195f6110ab565b905080156108015760025460405163a9059cbb60e01b8152336004820152602481018390526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156119b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119dc91906126e5565b5050565b6119e8612395565b61061b33610d44565b6001600160a01b038216600090815260086020526040812080549091819003611a2d5760405163150a67e960e01b815260040160405180910390fd5b6004546000908290829062010000900461ffff1615801590611a6057506003850154640100000000900463ffffffff1642105b90508515611a8b5760038501805463ffffffff19164263ffffffff1617905560006001860155611a97565b611a94856121af565b92505b600085558015611b145760045461270f196201000090910461ffff1601611ae657600385015460405163bb80e83960e01b815264010000000090910463ffffffff166004820152602401610669565b60045460009061271090611b049062010000900461ffff168761268e565b611b0e91906126a5565b90920391505b60038501805467ffffffff00000000191690556002546001600160a01b031663a9059cbb88611b4386866126d2565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303816000875af1158015611ba6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bca91906126e5565b5060038054859003905560408051838152602081018590526001600160a01b038916917f563fc70fca9d440d883299c76a721644d5aca7c45df98aeb5292c4cb823579bf910160405180910390a250505050505050565b61088c3360006119f1565b6001600160a01b038116600090815260086020526040812090611c4e826121af565b905080600003611c715760405163fa92394f60e01b815260040160405180910390fd5b600654826002015414611c875760065460028301555b60025460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015611cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cfe91906126e5565b50826001600160a01b03167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724182604051611d3a91815260200190565b60405180910390a2505050565b600660008154611d5690612798565b909155506006546000908152600560205260409020805461ffff191661ffff9290921691909117905542600755565b611dc36040518060a00160405280600081526020016000815260200160008152602001600063ffffffff168152602001600063ffffffff1681525090565b506001600160a01b0316600090815260086020908152604091829020825160a0810184528154815260018201549281019290925260028101549282019290925260039091015463ffffffff808216606084015264010000000090910416608082015290565b6002546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611e75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e9991906126b9565b90508060035410611eac57600091505090565b600354611eb99082612785565b91505090565b80600003611ee05760405163150a67e960e01b815260040160405180910390fd5b600454600160401b900460ff16611f0a5760405163ac9108a560e01b815260040160405180910390fd5b6001600160a01b0382166000908152600860205260409020600381015463ffffffff1615801590611f3b5750805415155b15611f4f57611f498161221f565b60018201555b600454829061ffff1615611f6e576000611f68846116fa565b90910390505b815481018255600654600283015414611f8a5760065460028301555b60038201805463ffffffff19164263ffffffff818116929092179283905591640100000000900416600003611ff757600454611fd490640100000000900463ffffffff16826127b1565b8360030160046101000a81548163ffffffff021916908363ffffffff1602179055505b60038054830190556002546040516323b872dd60e01b81526001600160a01b03878116600483015230602483015260448201879052909116906323b872dd906064016020604051808303816000875af1158015612058573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061207c91906126e5565b50846001600160a01b03167f1fdab8a8457aaf782e4b6217d6ffa6f5006eda7e50922dd092b2e1524275d774836040516120b891815260200190565b60405180910390a25050505050565b6120d085611d47565b6004805461ffff86811667ffffffff0000ffff19909216821764010000000063ffffffff88169081029190911768ff00000000ffff000019166201000087841690810268ff0000000000000000191691909117600160401b8715159081029190911790955560408051938b168452602084019490945292820152606081019190915260808101919091527f1c2c1dbad894bdeb579ce75c5d3f6f81ea37eb4a82ce5f5e4b4822944ea788c09060a00160405180910390a15050505050565b6001600160a01b03811660009081526008602052604081206108f28161221f565b6000806121bb8361221f565b905080156107a35760006121cd6110ab565b9050818110156121fa57604051634cbad4bb60e11b81526004810183905260248101829052604401610669565b506000600184015560038301805463ffffffff19164263ffffffff1617905592915050565b600381015460009063ffffffff16810361223b57506000919050565b600382015463ffffffff16421161225457506000919050565b60008060065484600201541461234657600754600385015463ffffffff16106122b957600384015461228c9063ffffffff1642612785565b84546006546000908152600560205260409020549192506122b291839061ffff1661088e565b9150612386565b6000600754426122c99190612785565b60038601546007549192506122e69163ffffffff90911690612785565b855460065460009081526005602052604090205491935061230c91839061ffff1661088e565b8554600287015460009081526005602052604090205491945061233491849061ffff1661088e565b61233e90846126d2565b925050612386565b600384015461235b9063ffffffff1642612785565b8454600286015460009081526005602052604090205491925061238391839061ffff1661088e565b91505b600184015461190090836126d2565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff168152602001600063ffffffff1681525090565b803561ffff8116811461241957600080fd5b919050565b60006020828403121561243057600080fd5b6107a082612407565b6000806040838503121561244c57600080fd5b8235915061245c60208401612407565b90509250929050565b6001600160a01b038116811461080157600080fd5b60006020828403121561248c57600080fd5b81356108f281612465565b6000806000606084860312156124ac57600080fd5b83359250602084013591506124c360408501612407565b90509250925092565b801515811461080157600080fd5b6000602082840312156124ec57600080fd5b81356108f2816124cc565b600061016082019050825182526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c083015160c083015260e083015161255760e084018263ffffffff169052565b506101008381015163ffffffff90811691840191909152610120808501518216908401526101409384015116929091019190915290565b6000602082840312156125a057600080fd5b5035919050565b63ffffffff8116811461080157600080fd5b6000602082840312156125cb57600080fd5b81356108f2816125a7565b600080600080600060a086880312156125ee57600080fd5b6125f786612407565b945061260560208701612407565b93506040860135612615816125a7565b925061262360608701612407565b91506080860135612633816124cc565b809150509295509295909350565b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff8084168061268257612682612641565b92169190910492915050565b80820281158282048414176107a3576107a3612657565b6000826126b4576126b4612641565b500490565b6000602082840312156126cb57600080fd5b5051919050565b808201808211156107a3576107a3612657565b6000602082840312156126f757600080fd5b81516108f2816124cc565b60006080828403121561271457600080fd5b6040516080810181811067ffffffffffffffff8211171561274557634e487b7160e01b600052604160045260246000fd5b806040525082518152602083015160208201526040830151612766816125a7565b60408201526060830151612779816125a7565b60608201529392505050565b818103818111156107a3576107a3612657565b6000600182016127aa576127aa612657565b5060010190565b63ffffffff818116838216019080821115610e9e57610e9e61265756fea2646970667358221220474b41417d129f87e7aea94aee5f5555f018e2b8dffc34333ca7aa72e3ab143c64736f6c63430008110033

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

00000000000000000000000034aee49b506e43fdd4bea24f65e4e05ef5a07a0c0000000000000000000000001e2d230c7a7f4c679fb1378f1f51dedeae85cd72

-----Decoded View---------------
Arg [0] : prevStaking (address): 0x34aeE49b506E43FDD4bEa24f65e4E05EF5a07a0c
Arg [1] : token (address): 0x1e2D230C7A7F4C679Fb1378F1f51dEDeAe85Cd72

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000034aee49b506e43fdd4bea24f65e4e05ef5a07a0c
Arg [1] : 0000000000000000000000001e2d230c7a7f4c679fb1378f1f51dedeae85cd72


Deployed Bytecode Sourcemap

17381:3569:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20369:123;;;:::i;:::-;;;160:25:1;;;148:2;133:18;20369:123:0;;;;;;;;5654:206;;;;;;:::i;:::-;;:::i;:::-;;8907:198;;;;;;:::i;:::-;;:::i;15328:106::-;15411:14;;15374:6;15400:26;;;:10;:26;;;;;;;;15328:106;;;980:6:1;968:19;;;950:38;;938:2;923:18;15328:106:0;806:188:1;2186:32:0;;;;;;;;;;;;;;;1272:10:1;1260:23;;;1242:42;;1230:2;1215:18;2186:32:0;1098:192:1;11170:98:0;;;;;;:::i;:::-;;:::i;18068:233::-;;;:::i;1353:103::-;;;;;;:::i;:::-;1408:4;1443:5;-1:-1:-1;;;;;1432:16:0;;;1443:5;;1432:16;;1353:103;;;;1871:14:1;;1864:22;1846:41;;1834:2;1819:18;1353:103:0;1706:187:1;8398:504:0;;;;;;:::i;:::-;;:::i;20850:97::-;;;;;;:::i;:::-;;:::i;20500:342::-;;;:::i;14538:275::-;;;;;;:::i;:::-;;:::i;15717:99::-;15795:13;;15717:99;;2225:21;;;;;-1:-1:-1;;;2225:21:0;;;;;;17434:30;;;;;-1:-1:-1;;;;;17434:30:0;;;;;;-1:-1:-1;;;;;2756:55:1;;;2738:74;;2726:2;2711:18;17434:30:0;2592:226:1;12835:60:0;;;:::i;14317:216::-;;;;;;:::i;:::-;;:::i;2118:24::-;;;;;;;;;5282:192;;;;;;:::i;:::-;;:::i;2001:27::-;;;;;-1:-1:-1;;;;;2001:27:0;;;11080:82;;;:::i;19012:1225::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6496:169::-;;;;;;:::i;:::-;;:::i;5865:213::-;;;;;;:::i;:::-;;:::i;2069:42::-;;2106:5;2069:42;;18429:575;;;:::i;9110:82::-;;;;;;:::i;:::-;;:::i;2149:30::-;;;;;;;;;;;;6083:189;;;;;;:::i;:::-;;:::i;6277:211::-;;;;;;:::i;:::-;;:::i;1146:94::-;;;;;;:::i;:::-;;:::i;15824:173::-;;;:::i;11276:106::-;;;;;;:::i;:::-;;:::i;18309:112::-;;;:::i;2035:27::-;;;;;;12903:77;;;;;;:::i;:::-;;:::i;4463:379::-;;;;;;:::i;:::-;;:::i;10825:171::-;;;;;;:::i;:::-;;:::i;1248:97::-;;;;;;:::i;:::-;;:::i;1579:173::-;;;;;;:::i;:::-;;:::i;17671:389::-;;;;;;:::i;:::-;;:::i;14821:204::-;;;:::i;20245:119::-;;;:::i;1464:107::-;;;;;;:::i;:::-;-1:-1:-1;;;;;1544:19:0;1520:4;1544:19;;;:14;:19;;;;;;;;;1464:107;20369:123;20432:7;20459:25;20473:10;20459:13;:25::i;:::-;20452:32;;20369:123;:::o;5654:206::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;;;;;;;;;5725:3;3589:10:::1;3602:15;3616:1;2106:5;3602:15;:::i;:::-;3589:28;;3638:3;3632:9;;:3;:9;;;3628:76;;;3665:27;::::0;-1:-1:-1;;;3665:27:0;;6398:6:1;6431:15;;;3665:27:0::1;::::0;::::1;6413:34:1::0;6483:15;;6463:18;;;6456:43;6361:18;;3665:27:0::1;6218:287:1::0;3628:76:0::1;5735:10:::2;:16:::0;;::::2;::::0;::::2;-1:-1:-1::0;;5735:16:0;;::::2;;::::0;;5767:88:::2;5785:15;15411:14:::0;;15374:6;15400:26;;;:10;:26;;;;;;;;;15328:106;5785:15:::2;5807:18;::::0;5767:88:::2;::::0;;5827:16:::2;6798:15:1::0;;;6780:34;;6850:15;;;6845:2;6830:18;;6823:43;5807:18:0;;::::2;;;6882::1::0;;;6875:51;;;;5827:16:0;;::::2;::::0;;::::2;6957:2:1::0;6942:18;;6935:43;-1:-1:-1;;;5845:9:0;::::2;;;7022:14:1::0;7015:22;7009:3;6994:19;;6987:51;6742:3;6727:19;5767:88:0::2;;;;;;;;3578:136:::1;1129:1;5654:206:::0;:::o;8907:198::-;8984:7;9002:11;;;:30;;-1:-1:-1;9017:15:0;;;;9002:30;8998:56;;;-1:-1:-1;9047:1:0;9040:8;;8998:56;2106:5;9067:19;:33;:19;;:6;:19;:::i;:::-;:33;;;;:::i;:::-;9060:40;;8907:198;;;;;:::o;11170:98::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;11237:23:::1;11246:6;11254:5;11237:8;:23::i;:::-;11170:98:::0;:::o;18068:233::-;18118:14;;-1:-1:-1;;;18118:14:0;;;;:47;;;;-1:-1:-1;18136:15:0;;-1:-1:-1;;;;;18136:15:0;:29;;18118:47;18114:154;;;18199:15;;18186:59;;-1:-1:-1;;;18186:59:0;;18234:10;18186:59;;;2738:74:1;-1:-1:-1;;;;;18199:15:0;;;;18186:47;;2711:18:1;;18186:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18182:75;;18278:15;:13;:15::i;:::-;18068:233::o;8398:504::-;8503:7;8596:11;;;:29;;-1:-1:-1;8611:14:0;;8596:29;:48;;;-1:-1:-1;8629:15:0;;;;8596:48;8592:74;;;-1:-1:-1;8659:1:0;8652:8;;8592:74;8754:17;8774:31;8786:6;8794:10;8774:11;:31::i;:::-;8754:51;;8814:9;8827:1;8814:14;8810:40;;8843:1;8836:8;;;;;8810:40;8889:8;8864:21;8876:9;8864;:21;:::i;:::-;8863:34;;;;:::i;:::-;8856:41;;;8398:504;;;;;;:::o;20850:97::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;20915:14:::1;:24:::0;;;::::1;;-1:-1:-1::0;;;20915:24:0::1;-1:-1:-1::0;;;;20915:24:0;;::::1;::::0;;;::::1;::::0;;20850:97::o;20500:342::-;20604:14;;20552:7;;;;-1:-1:-1;;;20604:14:0;;;;:47;;;;-1:-1:-1;20622:15:0;;-1:-1:-1;;;;;20622:15:0;:29;;20604:47;20600:141;;;20693:15;;;;;;;;;-1:-1:-1;;;;;20693:15:0;-1:-1:-1;;;;;20680:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20668:61;;20600:141;20751:15;20769:26;16085:12;;;16005:100;20769:26;20751:44;-1:-1:-1;20815:19:0;20751:44;20815:9;:19;:::i;:::-;20808:26;;;;20500:342;:::o;14538:275::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;14610:12:::1;::::0;-1:-1:-1;;;;;14610:12:0;;::::1;14605:17:::0;;::::1;::::0;14601:74:::1;;14646:17;;-1:-1:-1::0;;;14646:17:0::1;;;;;;;;;;;14601:74;14734:32;::::0;-1:-1:-1;;;14734:32:0;;14760:4:::1;14734:32;::::0;::::1;2738:74:1::0;14709:1:0;;14685:14:::1;::::0;-1:-1:-1;;;;;14734:17:0;::::1;::::0;::::1;::::0;2711:18:1;;14734:32:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14771:37;::::0;-1:-1:-1;;;14771:37:0;;14788:10:::1;14771:37;::::0;::::1;7840:74:1::0;7930:18;;;7923:34;;;14716:50:0;;-1:-1:-1;;;;;;14771:16:0;::::1;::::0;::::1;::::0;7813:18:1;;14771:37:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14590:223;;14538:275:::0;:::o;12835:60::-;12872:18;12879:10;12872:6;:18::i;14317:216::-;-1:-1:-1;;;;;14401:19:0;;14386:4;14401:19;;;:13;:19;;;;;:34;;;;;:39;;14397:69;;-1:-1:-1;14455:5:0;;14317:216;-1:-1:-1;14317:216:0:o;14397:69::-;-1:-1:-1;;;;;;14497:19:0;;;;;:13;:19;;;;;:31;;;;;;;;14479:15;:49;;14317:216::o;5282:192::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;5342:6;4090:16:::1;4121::::0;;::::1;4077:10;4121:16:::0;4117:77:::1;;4161:21;::::0;-1:-1:-1;;;4161:21:0;;4172:1:::1;4161:21;::::0;::::1;8457:34:1::0;4175:1:0::1;8507:18:1::0;;;8500:43;8442:6;8579:15;;8559:18;;;8552:43;8405:18;;4161:21:0::1;8218:383:1::0;4117:77:0::1;4222:3;4208:17;;:11;:17;;;4204:88;;;4249:31;::::0;-1:-1:-1;;;4249:31:0;;8442:6:1;8475:15;;;4249:31:0::1;::::0;::::1;8457:34:1::0;4273:1:0::1;8507:18:1::0;;;8500:43;8579:15;;8559:18;;;8552:43;8405:18;;4249:31:0::1;8218:383:1::0;4204:88:0::1;5355:18:::2;5366:6;5355:10;:18::i;:::-;5409:10;::::0;5383:86:::2;::::0;;5409:10:::2;6798:15:1::0;;;6780:34;;5409:10:0;;::::2;6845:2:1::0;6830:18;;6823:43;5421:18:0;;::::2;;;6882::1::0;;;6875:51;;;;5441:16:0;;::::2;::::0;;::::2;6957:2:1::0;6942:18;;6935:43;-1:-1:-1;;;5459:9:0;;::::2;;;7022:14:1::0;7015:22;7009:3;6994:19;;6987:51;5383:86:0::2;::::0;6742:3:1;6727:19;5383:86:0::2;6510:534:1::0;11080:82:0;11128:26;11137:10;11149:4;11128:8;:26::i;19012:1225::-;19067:25;;:::i;:::-;19105:34;;:::i;:::-;19153:40;19196:23;19212:6;19196:15;:23::i;:::-;19254:21;;19230:45;;19307:21;;19286:18;;;;:42;;;;19361:19;;;;;;19339;;;:41;;;;19416:19;19391:22;;;:44;19466:17;;;;19446;;;:37;-1:-1:-1;19520:23:0;;;19494:49;;;;:23;;;:49;19577:20;;;;19554:43;:20;;;:43;19614:14;;19254:21;;-1:-1:-1;;;;19614:14:0;;;;:47;;;;-1:-1:-1;19632:15:0;;-1:-1:-1;;;;;19632:15:0;:29;;19614:47;19610:592;;;19695:15;;19682:47;;-1:-1:-1;;;19682:47:0;;-1:-1:-1;;;;;2756:55:1;;;19682:47:0;;;2738:74:1;19695:15:0;;;;19682:39;;2711:18:1;;19682:47:0;;;;;;;;;;;;;;;;;;-1:-1:-1;19682:47:0;;;;;;;;-1:-1:-1;;19682:47:0;;;;;;;;;;;;:::i;:::-;;;19678:513;;;19820:21;;19799:18;;;:42;19885:19;;;;19860:22;;;:44;19948:21;;19923:46;;19799:8;;19923:46;;19948:21;;19923:46;:::i;:::-;;;-1:-1:-1;20011:19:0;;;;;19988;;;:42;;;;20011:19;;19988:42;:::i;:::-;;;-1:-1:-1;20078:23:0;;;;20049:52;;;;:26;;;:52;20146:20;;;;;20120:46;:23;;;:46;19678:513;-1:-1:-1;20221:8:0;19012:1225;-1:-1:-1;;19012:1225:0:o;6496:169::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;3456:12:::1;::::0;:16;3452:74:::1;;3496:18;;-1:-1:-1::0;;;3496:18:0::1;;;;;;;;;;;3452:74;6600:12:::2;::::0;6581:42:::2;::::0;-1:-1:-1;;;;;6581:42:0;;::::2;::::0;6600:12:::2;::::0;6581:42:::2;::::0;6600:12:::2;::::0;6581:42:::2;6634:12;:23:::0;;-1:-1:-1;;6634:23:0::2;-1:-1:-1::0;;;;;6634:23:0;;;::::2;::::0;;;::::2;::::0;;6496:169::o;5865:213::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;5943:3;2106:5:::1;3775:17;::::0;::::1;;3771:93;;;3816:36;::::0;-1:-1:-1;;;3816:36:0;;6398:6:1;6431:15;;3816:36:0::1;::::0;::::1;6413:34:1::0;2106:5:0::1;6463:18:1::0;;;6456:43;6361:18;;3816:36:0::1;6218:287:1::0;3771:93:0::1;5953:16:::2;:22:::0;;::::2;::::0;::::2;::::0;::::2;-1:-1:-1::0;;5953:22:0;;::::2;;::::0;;5991:82:::2;6009:15;15411:14:::0;;15374:6;15400:26;;;:10;:26;;;;;;;;;15328:106;6009:15:::2;6026:10;::::0;5991:82:::2;::::0;;6026:10:::2;6798:15:1::0;;;6780:34;;6026:10:0;;::::2;6845:2:1::0;6830:18;;6823:43;6038:18:0;;::::2;;;6882::1::0;;;6875:51;;;;6962:15;;;6957:2;6942:18;;6935:43;-1:-1:-1;;;6063:9:0;::::2;;;7022:14:1::0;7015:22;7009:3;6994:19;;6987:51;6742:3;6727:19;5991:82:0::2;;;;;;;;1129:1:::1;5865:213:::0;:::o;18429:575::-;18547:14;;18492:7;;;;-1:-1:-1;;;18547:14:0;;;;:47;;;;-1:-1:-1;18565:15:0;;-1:-1:-1;;;;;18565:15:0;:29;;18547:47;18543:346;;;18639:12;;18663:15;;18632:47;;-1:-1:-1;;;18632:47:0;;-1:-1:-1;;;;;18663:15:0;;;18632:47;;;2738:74:1;18611:18:0;;18639:12;;;;;18632:30;;2711:18:1;;18632:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18611:68;;18694:17;18727:15;;;;;;;;;-1:-1:-1;;;;;18727:15:0;-1:-1:-1;;;;;18714:47:0;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18694:69;;18795:9;18782:10;:22;18778:100;;;18840:22;18853:9;18840:10;:22;:::i;:::-;18825:37;;18778:100;18596:293;;18543:346;18899:19;18921:29;:27;:29::i;9110:82::-;9161:26;9168:10;9180:6;9161;:26::i;6083:189::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;6147:9:::1;:18:::0;;-1:-1:-1;;6147:18:0::1;-1:-1:-1::0;;;6147:18:0;::::1;;;;::::0;;15411:14;;-1:-1:-1;15400:26:0;;;:10;:26;;;;;;6175:92:::1;::::0;15400:26;;6210:10:::1;::::0;6175:92:::1;::::0;;6210:10:::1;6798:15:1::0;;;6780:34;;6210:10:0;;::::1;6845:2:1::0;6830:18;;6823:43;6222:18:0;;::::1;;;6882::1::0;;;6875:51;;;;6242:16:0;;;::::1;::::0;;::::1;6957:2:1::0;6942:18;;6935:43;7022:14;;7015:22;7009:3;6994:19;;6987:51;6742:3;6727:19;6175:92:0::1;;;;;;;;6083:189:::0;:::o;6277:211::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;6356:4:::1;3939:8;3932:4;:15;;;3928:82;;;3971:27;::::0;-1:-1:-1;;;3971:27:0;;10178:10:1;10215:15;;3971:27:0::1;::::0;::::1;10197:34:1::0;3989:8:0::1;10247:18:1::0;;;10240:43;10141:18;;3971:27:0::1;9982:307:1::0;3928:82:0::1;6367:18:::2;:25:::0;;-1:-1:-1;;6367:25:0::2;::::0;::::2;::::0;::::2;;;::::0;;15411:14;;-1:-1:-1;15400:26:0;;;:10;:26;;;;;;6402:81:::2;::::0;15400:26;;6437:10:::2;::::0;6402:81:::2;::::0;;6437:10:::2;6798:15:1::0;;;6780:34;;6437:10:0;;::::2;6845:2:1::0;6830:18;;6823:43;6914:10;6902:23;;6882:18;;;6875:51;;;;6455:16:0;;::::2;::::0;;::::2;6957:2:1::0;6942:18;;6935:43;-1:-1:-1;;;6473:9:0;::::2;;;7022:14:1::0;7015:22;7009:3;6994:19;;6987:51;6742:3;6727:19;6402:81:0::2;6510:534:1::0;1146:94:0;1408:4;1443:5;-1:-1:-1;;;;;1443:5:0;1005:10;1432:16;989:38;;;;-1:-1:-1;;;989:38:0;;10496:2:1;989:38:0;;;10478:21:1;10535:1;10515:18;;;10508:29;-1:-1:-1;;;10553:18:1;;;10546:36;10599:18;;989:38:0;10294:329:1;989:38:0;-1:-1:-1;;;;;1206:19:0::1;;::::0;;;1228:4:::1;1206:19;::::0;;;;;;;:26;;-1:-1:-1;;1206:26:0::1;::::0;;::::1;::::0;;1146:94::o;15824:173::-;15874:7;15898:14;;15916:1;15898:19;15894:60;;-1:-1:-1;15941:1:0;;15824:173::o;15894:60::-;15988:1;15971:14;;:18;;;;:::i;11276:106::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;11352:22:::1;11361:6;11369:4;11352:8;:22::i;18309:112::-:0;18367:15;;18354:59;;-1:-1:-1;;;18354:59:0;;18402:10;18354:59;;;2738:74:1;-1:-1:-1;;;;;18367:15:0;;;;18354:47;;2711:18:1;;18354:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12903:77;12958:14;12965:6;12958;:14::i;4463:379::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;4639:6;4090:16:::1;4121::::0;;::::1;4077:10;4121:16:::0;4117:77:::1;;4161:21;::::0;-1:-1:-1;;;4161:21:0;;4172:1:::1;4161:21;::::0;::::1;8457:34:1::0;4175:1:0::1;8507:18:1::0;;;8500:43;8442:6;8579:15;;8559:18;;;8552:43;8405:18;;4161:21:0::1;8218:383:1::0;4117:77:0::1;4222:3;4208:17;;:11;:17;;;4204:88;;;4249:31;::::0;-1:-1:-1;;;4249:31:0;;8442:6:1;8475:15;;;4249:31:0::1;::::0;::::1;8457:34:1::0;4273:1:0::1;8507:18:1::0;;;8500:43;8579:15;;8559:18;;;8552:43;8405:18;;4249:31:0::1;8218:383:1::0;4204:88:0::1;4663:13:::0;3589:10:::2;3602:15;3616:1;2106:5;3602:15;:::i;:::-;3589:28;;3638:3;3632:9;;:3;:9;;;3628:76;;;3665:27;::::0;-1:-1:-1;;;3665:27:0;;6398:6:1;6431:15;;;3665:27:0::2;::::0;::::2;6413:34:1::0;6483:15;;6463:18;;;6456:43;6361:18;;3665:27:0::2;6218:287:1::0;3628:76:0::2;4704:14:::0;2106:5:::3;3775:17;::::0;::::3;;3771:93;;;3816:36;::::0;-1:-1:-1;;;3816:36:0;;6398:6:1;6431:15;;3816:36:0::3;::::0;::::3;6413:34:1::0;2106:5:0::3;6463:18:1::0;;;6456:43;6361:18;;3816:36:0::3;6218:287:1::0;3771:93:0::3;4736:13:::4;3939:8;3932:4;:15;;;3928:82;;;3971:27;::::0;-1:-1:-1;;;3971:27:0;;10178:10:1;10215:15;;3971:27:0::4;::::0;::::4;10197:34:1::0;3989:8:0::4;10247:18:1::0;;;10240:43;10141:18;;3971:27:0::4;9982:307:1::0;3928:82:0::4;4758:79:::5;4776:6;4784:13;4799;4814:14;4830:6;4758:17;:79::i;:::-;3868:1:::4;3708::::3;3578:136:::2;4302:1;4066:245:::1;1129:1;4463:379:::0;;;;;:::o;10825:171::-;10910:10;;10892:7;;10910:10;;:15;;10906:41;;-1:-1:-1;10940:1:0;;10825:171;-1:-1:-1;10825:171:0:o;10906:41::-;10967:10;;2106:5;;10958:19;;:33;10967:10;10958:6;:19;:::i;:::-;:33;;;;:::i;1248:97::-;1408:4;1443:5;-1:-1:-1;;;;;1443:5:0;1005:10;1432:16;989:38;;;;-1:-1:-1;;;989:38:0;;10496:2:1;989:38:0;;;10478:21:1;10535:1;10515:18;;;10508:29;-1:-1:-1;;;10553:18:1;;;10546:36;10599:18;;989:38:0;10294:329:1;989:38:0;-1:-1:-1;;;;;1310:19:0::1;1332:5;1310:19:::0;;;:14:::1;:19;::::0;;;;:27;;-1:-1:-1;;1310:27:0::1;::::0;;1248:97::o;1579:173::-;1408:4;1443:5;-1:-1:-1;;;;;1443:5:0;1005:10;1432:16;989:38;;;;-1:-1:-1;;;989:38:0;;10496:2:1;989:38:0;;;10478:21:1;10535:1;10515:18;;;10508:29;-1:-1:-1;;;10553:18:1;;;10546:36;10599:18;;989:38:0;10294:329:1;989:38:0;1655:5:::1;:11:::0;;-1:-1:-1;;1655:11:0::1;-1:-1:-1::0;;;;;1655:11:0;::::1;::::0;;::::1;::::0;;1677:19;;;-1:-1:-1;1677:19:0::1;::::0;;;;;;;;:26;;-1:-1:-1;;1677:26:0::1;::::0;;::::1;::::0;;;1719:25;;2738:74:1;;;1719:25:0::1;::::0;2711:18:1;1719:25:0::1;2592:226:1::0;17671:389:0;17799:14;;17741:7;;;;-1:-1:-1;;;17799:14:0;;;;:47;;;;-1:-1:-1;17817:15:0;;-1:-1:-1;;;;;17817:15:0;:29;;17799:47;17795:150;;;17894:15;;17881:52;;-1:-1:-1;;;17881:52:0;;-1:-1:-1;;;;;2756:55:1;;;17881:52:0;;;2738:74:1;17894:15:0;;;;17881:43;;2711:18:1;;17881:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17863:70;;17795:150;17955:19;17977:28;17997:7;17977:19;:28::i;:::-;17955:50;-1:-1:-1;18023:29:0;17955:50;18023:15;:29;:::i;:::-;18016:36;17671:389;-1:-1:-1;;;;17671:389:0:o;14821:204::-;1100:10;1520:4;1544:19;;;:14;:19;;;;;;;;1079:48;;;;-1:-1:-1;;;1079:48:0;;5624:2:1;1079:48:0;;;5606:21:1;5663:2;5643:18;;;5636:30;-1:-1:-1;;;5682:18:1;;;5675:41;5733:18;;1079:48:0;5422:335:1;1079:48:0;14881:13:::1;14897:23;:21;:23::i;:::-;14881:39:::0;-1:-1:-1;14935:9:0;;14931:90:::1;;14968:12;::::0;14961:48:::1;::::0;-1:-1:-1;;;14961:48:0;;14991:10:::1;14961:48;::::0;::::1;7840:74:1::0;7930:18;;;7923:34;;;-1:-1:-1;;;;;14968:12:0;;::::1;::::0;14961:29:::1;::::0;7813:18:1;;14961:48:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14870:155;14821:204::o:0;20245:119::-;20291:25;;:::i;:::-;20336:20;20345:10;20336:8;:20::i;11387:1443::-;-1:-1:-1;;;;;11475:21:0;;11449:23;11475:21;;;:13;:21;;;;;11528:17;;11475:21;;11560;;;11556:72;;11605:11;;-1:-1:-1;;;11605:11:0;;;;;;;;;;;11556:72;11736:16;;11638:13;;11686:16;;11638:13;;11736:16;;;;;:20;;;;:58;;-1:-1:-1;11778:16:0;;;;;;;;;11760:15;:34;11736:58;11713:81;;11904:7;11900:172;;;11928:19;;;:45;;-1:-1:-1;;11928:45:0;11957:15;11928:45;;;;;-1:-1:-1;;11988:15:0;;:19;11900:172;;;12048:12;12055:4;12048:6;:12::i;:::-;12040:20;;11900:172;12096:1;12076:21;;12142:396;;;;12266:16;;-1:-1:-1;;12266:16:0;;;;:31;:16;:31;12262:108;;12337:16;;;;12325:29;;-1:-1:-1;;;12325:29:0;;12337:16;;;;;;;12325:29;;1242:42:1;1215:18;;12325:29:0;1098:192:1;12262:108:0;12417:16;;12384:11;;2106:5;;12398:35;;12417:16;;;12398:49;12417:16;12398;:35;:::i;:::-;:49;;;;:::i;:::-;12491:20;;;;-1:-1:-1;12142:396:0;12548:16;;;:20;;-1:-1:-1;;12548:20:0;;;12644:12;;-1:-1:-1;;;;;12644:12:0;12637:29;12667:6;12675:21;12691:5;12675:13;:21;:::i;:::-;12637:60;;;;;;;;;;-1:-1:-1;;;;;7858:55:1;;;12637:60:0;;;7840:74:1;7930:18;;;7923:34;7813:18;;12637:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12727:12:0;:32;;;;;;;12782:43;;;11041:25:1;;;11097:2;11082:18;;11075:34;;;-1:-1:-1;;;;;12782:43:0;;;;;11014:18:1;12782:43:0;;;;;;;11444:1386;;;;;11387:1443;;:::o;11001:71::-;11040:27;11049:10;11061:5;11040:8;:27::i;12988:434::-;-1:-1:-1;;;;;13066:21:0;;13040:23;13066:21;;;:13;:21;;;;;;13112:12;13066:21;13112:6;:12::i;:::-;13092:32;;13139:9;13152:1;13139:14;13135:72;;13177:18;;-1:-1:-1;;;13177:18:0;;;;;;;;;;;13135:72;13238:14;;13221:4;:13;;;:31;13217:94;;13285:14;;13269:13;;;:30;13217:94;13328:12;;13321:48;;-1:-1:-1;;;13321:48:0;;-1:-1:-1;;;;;7858:55:1;;;13321:48:0;;;7840:74:1;7930:18;;;7923:34;;;13328:12:0;;;;13321:29;;7813:18:1;;13321:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13399:6;-1:-1:-1;;;;;13385:32:0;;13407:9;13385:32;;;;160:25:1;;148:2;133:18;;14:177;13385:32:0;;;;;;;;13029:393;;12988:434;:::o;5482:167::-;5539:14;;5537:16;;;;;:::i;:::-;;;;-1:-1:-1;5575:14:0;;5564:26;;;;:10;:26;;;;;:35;;-1:-1:-1;;5564:35:0;;;;;;;;;;;;5626:15;5610:13;:31;5482:167::o;15030:115::-;15088:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15088:17:0;-1:-1:-1;;;;;;15119:21:0;;;;;:13;:21;;;;;;;;;15112:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15030:115::o;15442:267::-;15549:12;;15542:45;;-1:-1:-1;;;15542:45:0;;15581:4;15542:45;;;2738:74:1;15504:7:0;;;;-1:-1:-1;;;;;15549:12:0;;;;15542:30;;2711:18:1;;15542:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15524:63;;15618:7;15602:12;;:23;15598:64;;15649:1;15642:8;;;15442:267;:::o;15598:64::-;15689:12;;15679:22;;:7;:22;:::i;:::-;15672:29;;;15442:267;:::o;9200:1620::-;9272:6;9282:1;9272:11;9268:62;;9307:11;;-1:-1:-1;;;9307:11:0;;;;;;;;;;;9268:62;9345:9;;-1:-1:-1;;;9345:9:0;;;;9340:70;;9378:20;;-1:-1:-1;;;9378:20:0;;;;;;;;;;;9340:70;-1:-1:-1;;;;;9442:21:0;;9416:23;9442:21;;;:13;:21;;;;;9616:19;;;;;;:24;;;;:49;;-1:-1:-1;9644:17:0;;:21;;9616:49;9612:105;;;9691:20;9706:4;9691:14;:20::i;:::-;9673:15;;;:38;9612:105;9808:10;;9749:6;;9808:10;;:14;9804:168;;9839:12;9854:28;9875:6;9854:20;:28::i;:::-;9926:19;;;;-1:-1:-1;9804:168:0;10001:32;;;;;;10170:14;;10153:13;;;;:31;10149:94;;10217:14;;10201:13;;;:30;10149:94;10372:19;;;:26;;-1:-1:-1;;10372:26:0;10351:15;10372:26;;;;;;;;;;;;10351:15;10413:16;;;;-1:-1:-1;10413:21:0;10409:98;;10477:18;;10470:25;;10477:18;;;;;10470:4;:25;:::i;:::-;10451:4;:16;;;:44;;;;;;;;;;;;;;;;;;10409:98;10596:12;:27;;;;;;10711:12;;10704:64;;-1:-1:-1;;;10704:64:0;;-1:-1:-1;;;;;11718:15:1;;;10704:64:0;;;11700:34:1;10754:4:0;11750:18:1;;;11743:43;11802:18;;;11795:34;;;10711:12:0;;;;10704:33;;11612:18:1;;10704:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10792:6;-1:-1:-1;;;;;10780:32:0;;10800:11;10780:32;;;;160:25:1;;148:2;133:18;;14:177;10780:32:0;;;;;;;;9257:1563;;;9200:1620;;:::o;4847:430::-;5008:18;5019:6;5008:10;:18::i;:::-;5031:10;:26;;;;;;-1:-1:-1;;5062:34:0;;;;;;;;;;;;;;;;-1:-1:-1;;5145:27:0;5107:33;;;;;;;-1:-1:-1;;5145:27:0;;;;;-1:-1:-1;;;5145:27:0;;;;;;;;;;;;;5184:88;;;6798:15:1;;;6780:34;;6845:2;6830:18;;6823:43;;;;6882:18;;;6875:51;6957:2;6942:18;;6935:43;;;;7009:3;6994:19;;6987:51;;;;5184:88:0;;6742:3:1;6727:19;5184:88:0;;;;;;;4847:430;;;;;:::o;6670:174::-;-1:-1:-1;;;;;6779:22:0;;6739:7;6779:22;;;:13;:22;;;;;6819:20;6779:22;6819:14;:20::i;13530:782::-;13589:7;13603:17;13623:20;13638:4;13623:14;:20::i;:::-;13603:40;-1:-1:-1;13652:13:0;;13648:631;;14017:23;14043;:21;:23::i;:::-;14017:49;;14103:9;14085:15;:27;14081:117;;;14140:42;;-1:-1:-1;;;14140:42:0;;;;;11041:25:1;;;11082:18;;;11075:34;;;11014:18;;14140:42:0;10867:248:1;14081:117:0;-1:-1:-1;14221:1:0;14203:15;;;:19;14228;;;:45;;-1:-1:-1;;14228:45:0;14257:15;14228:45;;;;;14298:9;13530:782;-1:-1:-1;;13530:782:0:o;6852:1541::-;7024:19;;;;6924:7;;7024:19;;:24;;7020:50;;-1:-1:-1;7063:1:0;;6852:1541;-1:-1:-1;6852:1541:0:o;7020:50::-;7143:19;;;;;;7124:15;:38;7120:64;;-1:-1:-1;7177:1:0;;6852:1541;-1:-1:-1;6852:1541:0:o;7120:64::-;7326:15;7352:17;7403:14;;7386:4;:13;;;:31;7382:856;;7461:13;;7438:19;;;;;;:36;7434:609;;7525:19;;;;7507:37;;7525:19;;7507:15;:37;:::i;:::-;7594:17;;7635:14;;7594:17;7624:26;;;:10;:26;;;;;;7495:49;;-1:-1:-1;7573:78:0;;7495:49;;7624:26;;7573:20;:78::i;:::-;7563:88;;7382:856;;7434:609;7692:19;7732:13;;7714:15;:31;;;;:::i;:::-;7792:19;;;;7776:13;;7692:53;;-1:-1:-1;7776:35:0;;7792:19;;;;;7776:35;:::i;:::-;7861:17;;7904:14;;7861:17;7893:26;;;:10;:26;;;;;;7764:47;;-1:-1:-1;7840:80:0;;7880:11;;7893:26;;7840:20;:80::i;:::-;7971:17;;8012:13;;;;7971:17;8001:25;;;:10;:25;;;;;;7830:90;;-1:-1:-1;7950:77:0;;7990:9;;8001:25;;7950:20;:77::i;:::-;7939:88;;;;:::i;:::-;;;7673:370;7382:856;;;8105:19;;;;8087:37;;8105:19;;8087:15;:37;:::i;:::-;8170:17;;8211:13;;;;8170:17;8200:25;;;:10;:25;;;;;;8075:49;;-1:-1:-1;8149:77:0;;8075:49;;8200:25;;8149:20;:77::i;:::-;8139:87;;7382:856;8370:15;;;;8360:25;;:7;:25;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;196:159:1:-;263:20;;323:6;312:18;;302:29;;292:57;;345:1;342;335:12;292:57;196:159;;;:::o;360:184::-;418:6;471:2;459:9;450:7;446:23;442:32;439:52;;;487:1;484;477:12;439:52;510:28;528:9;510:28;:::i;549:252::-;616:6;624;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;729:9;716:23;706:33;;758:37;791:2;780:9;776:18;758:37;:::i;:::-;748:47;;549:252;;;;;:::o;1295:154::-;-1:-1:-1;;;;;1374:5:1;1370:54;1363:5;1360:65;1350:93;;1439:1;1436;1429:12;1454:247;1513:6;1566:2;1554:9;1545:7;1541:23;1537:32;1534:52;;;1582:1;1579;1572:12;1534:52;1621:9;1608:23;1640:31;1665:5;1640:31;:::i;1898:320::-;1974:6;1982;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2095:9;2082:23;2072:33;;2152:2;2141:9;2137:18;2124:32;2114:42;;2175:37;2208:2;2197:9;2193:18;2175:37;:::i;:::-;2165:47;;1898:320;;;;;:::o;2223:118::-;2309:5;2302:13;2295:21;2288:5;2285:32;2275:60;;2331:1;2328;2321:12;2346:241;2402:6;2455:2;2443:9;2434:7;2430:23;2426:32;2423:52;;;2471:1;2468;2461:12;2423:52;2510:9;2497:23;2529:28;2551:5;2529:28;:::i;2823:1170::-;2987:4;3029:3;3018:9;3014:19;3006:27;;3066:6;3060:13;3049:9;3042:32;3130:4;3122:6;3118:17;3112:24;3105:4;3094:9;3090:20;3083:54;3193:4;3185:6;3181:17;3175:24;3168:4;3157:9;3153:20;3146:54;3256:4;3248:6;3244:17;3238:24;3231:4;3220:9;3216:20;3209:54;3319:4;3311:6;3307:17;3301:24;3294:4;3283:9;3279:20;3272:54;3382:4;3374:6;3370:17;3364:24;3357:4;3346:9;3342:20;3335:54;3445:4;3437:6;3433:17;3427:24;3420:4;3409:9;3405:20;3398:54;3499:4;3491:6;3487:17;3481:24;3514:53;3561:4;3550:9;3546:20;3532:12;1075:10;1064:22;1052:35;;999:94;3514:53;-1:-1:-1;3586:6:1;3629:15;;;3623:22;1075:10;1064:22;;;3688:18;;;1052:35;;;;3726:6;3769:15;;;3763:22;1064;;3828:18;;;1052:35;3866:6;3909:15;;;3903:22;1064;3968:18;;;;1052:35;;;;2823:1170;:::o;3998:180::-;4057:6;4110:2;4098:9;4089:7;4085:23;4081:32;4078:52;;;4126:1;4123;4116:12;4078:52;-1:-1:-1;4149:23:1;;3998:180;-1:-1:-1;3998:180:1:o;4183:121::-;4268:10;4261:5;4257:22;4250:5;4247:33;4237:61;;4294:1;4291;4284:12;4309:245;4367:6;4420:2;4408:9;4399:7;4395:23;4391:32;4388:52;;;4436:1;4433;4426:12;4388:52;4475:9;4462:23;4494:30;4518:5;4494:30;:::i;4559:598::-;4647:6;4655;4663;4671;4679;4732:3;4720:9;4711:7;4707:23;4703:33;4700:53;;;4749:1;4746;4739:12;4700:53;4772:28;4790:9;4772:28;:::i;:::-;4762:38;;4819:37;4852:2;4841:9;4837:18;4819:37;:::i;:::-;4809:47;;4906:2;4895:9;4891:18;4878:32;4919:30;4943:5;4919:30;:::i;:::-;4968:5;-1:-1:-1;4992:37:1;5025:2;5010:18;;4992:37;:::i;:::-;4982:47;;5081:3;5070:9;5066:19;5053:33;5095:30;5117:7;5095:30;:::i;:::-;5144:7;5134:17;;;4559:598;;;;;;;;:::o;5762:127::-;5823:10;5818:3;5814:20;5811:1;5804:31;5854:4;5851:1;5844:15;5878:4;5875:1;5868:15;5894:127;5955:10;5950:3;5946:20;5943:1;5936:31;5986:4;5983:1;5976:15;6010:4;6007:1;6000:15;6026:187;6065:1;6091:6;6124:2;6121:1;6117:10;6146:3;6136:37;;6153:18;;:::i;:::-;6191:10;;6187:20;;;;;6026:187;-1:-1:-1;;6026:187:1:o;7049:168::-;7122:9;;;7153;;7170:15;;;7164:22;;7150:37;7140:71;;7191:18;;:::i;7222:120::-;7262:1;7288;7278:35;;7293:18;;:::i;:::-;-1:-1:-1;7327:9:1;;7222:120::o;7347:184::-;7417:6;7470:2;7458:9;7449:7;7445:23;7441:32;7438:52;;;7486:1;7483;7476:12;7438:52;-1:-1:-1;7509:16:1;;7347:184;-1:-1:-1;7347:184:1:o;7536:125::-;7601:9;;;7622:10;;;7619:36;;;7635:18;;:::i;7968:245::-;8035:6;8088:2;8076:9;8067:7;8063:23;8059:32;8056:52;;;8104:1;8101;8094:12;8056:52;8136:9;8130:16;8155:28;8177:5;8155:28;:::i;8985:859::-;9083:6;9136:3;9124:9;9115:7;9111:23;9107:33;9104:53;;;9153:1;9150;9143:12;9104:53;9186:2;9180:9;9228:3;9220:6;9216:16;9298:6;9286:10;9283:22;9262:18;9250:10;9247:34;9244:62;9241:185;;;9348:10;9343:3;9339:20;9336:1;9329:31;9383:4;9380:1;9373:15;9411:4;9408:1;9401:15;9241:185;9446:10;9442:2;9435:22;;9487:9;9481:16;9473:6;9466:32;9552:2;9541:9;9537:18;9531:25;9526:2;9518:6;9514:15;9507:50;9600:2;9589:9;9585:18;9579:25;9613:30;9637:5;9613:30;:::i;:::-;9671:2;9659:15;;9652:30;9727:2;9712:18;;9706:25;9740:32;9706:25;9740:32;:::i;:::-;9800:2;9788:15;;9781:32;9792:6;8985:859;-1:-1:-1;;;8985:859:1:o;9849:128::-;9916:9;;;9937:11;;;9934:37;;;9951:18;;:::i;11120:135::-;11159:3;11180:17;;;11177:43;;11200:18;;:::i;:::-;-1:-1:-1;11247:1:1;11236:13;;11120:135::o;11260:172::-;11327:10;11357;;;11369;;;11353:27;;11392:11;;;11389:37;;;11406:18;;:::i

Swarm Source

ipfs://474b41417d129f87e7aea94aee5f5555f018e2b8dffc34333ca7aa72e3ab143c

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.