ETH Price: $3,830.55 (+5.35%)

Contract

0xA3Ee876D22229FcE9a25b3653Fb990d13fD391f7
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw160058662022-11-19 18:31:23753 days ago1668882683IN
0xA3Ee876D...13fD391f7
0 ETH0.0016319811.58425311
Stake158121772022-10-23 17:03:23780 days ago1666544603IN
0xA3Ee876D...13fD391f7
0.06336205 ETH0.0106854515.29682135
Withdraw158120802022-10-23 16:43:59780 days ago1666543439IN
0xA3Ee876D...13fD391f7
0 ETH0.0026096618.52401722
Stake156196842022-09-26 19:40:11807 days ago1664221211IN
0xA3Ee876D...13fD391f7
0.05068964 ETH0.0091079213.03849654
Withdraw138048542021-12-14 18:17:011093 days ago1639505821IN
0xA3Ee876D...13fD391f7
0 ETH0.0113573280.61701799
Stake134422522021-10-18 14:09:141150 days ago1634566154IN
0xA3Ee876D...13fD391f7
0.89421122 ETH0.0456795565.39168667
Withdraw133254992021-09-30 6:29:221168 days ago1632983362IN
0xA3Ee876D...13fD391f7
0 ETH0.0091227664.75556439
Stake130681762021-08-21 10:50:581208 days ago1629543058IN
0xA3Ee876D...13fD391f7
0.22986315 ETH0.0130770618.72054445
Withdraw130679402021-08-21 9:58:471208 days ago1629539927IN
0xA3Ee876D...13fD391f7
0 ETH0.0033010923.43199709
Withdraw129720042021-08-06 14:42:031223 days ago1628260923IN
0xA3Ee876D...13fD391f7
0 ETH0.0048463238.1
Withdraw129719922021-08-06 14:40:031223 days ago1628260803IN
0xA3Ee876D...13fD391f7
0 ETH0.0069782436.83229435
Stake128436292021-07-17 10:07:101243 days ago1626516430IN
0xA3Ee876D...13fD391f7
0.19894422 ETH0.0124552217.6
Withdraw128435832021-07-17 9:56:041243 days ago1626515764IN
0xA3Ee876D...13fD391f7
0 ETH0.001894616
Stake127488022021-07-02 14:42:291258 days ago1625236949IN
0xA3Ee876D...13fD391f7
0.01566761 ETH0.0169835224
Stake127486232021-07-02 14:06:281258 days ago1625234788IN
0xA3Ee876D...13fD391f7
0.07739656 ETH0.0178909126
Withdraw127312912021-06-29 21:18:571261 days ago1625001537IN
0xA3Ee876D...13fD391f7
0 ETH0.0024572721
Stake126221502021-06-12 21:44:301278 days ago1623534270IN
0xA3Ee876D...13fD391f7
0.12183421 ETH0.0070312410
Stake125334132021-05-30 3:50:431291 days ago1622346643IN
0xA3Ee876D...13fD391f7
0.19462974 ETH0.0130627118.7
Withdraw123765862021-05-05 21:08:001316 days ago1620248880IN
0xA3Ee876D...13fD391f7
0 ETH0.00556570
Withdraw123765842021-05-05 21:07:001316 days ago1620248820IN
0xA3Ee876D...13fD391f7
0 ETH0.0088874170
Stake123033262021-04-24 13:57:431327 days ago1619272663IN
0xA3Ee876D...13fD391f7
0.38735223 ETH0.0358992952
Stake121806592021-04-05 16:14:441346 days ago1617639284IN
0xA3Ee876D...13fD391f7
2.0654774 ETH0.1592287241
Stake121772982021-04-05 3:39:471346 days ago1617593987IN
0xA3Ee876D...13fD391f7
1.0327387 ETH0.0645554498
Withdraw121729932021-04-04 12:06:461347 days ago1617538006IN
0xA3Ee876D...13fD391f7
0 ETH0.0107291790
Withdraw120897122021-03-22 16:27:301360 days ago1616430450IN
0xA3Ee876D...13fD391f7
0 ETH0.017385190
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
158121772022-10-23 17:03:23780 days ago1666544603
0xA3Ee876D...13fD391f7
0.06336205 ETH
156196842022-09-26 19:40:11807 days ago1664221211
0xA3Ee876D...13fD391f7
0.05068964 ETH
134422522021-10-18 14:09:141150 days ago1634566154
0xA3Ee876D...13fD391f7
0.89421122 ETH
130681762021-08-21 10:50:581208 days ago1629543058
0xA3Ee876D...13fD391f7
0.22986315 ETH
128436292021-07-17 10:07:101243 days ago1626516430
0xA3Ee876D...13fD391f7
0.19894422 ETH
127488022021-07-02 14:42:291258 days ago1625236949
0xA3Ee876D...13fD391f7
0.01566761 ETH
127486232021-07-02 14:06:281258 days ago1625234788
0xA3Ee876D...13fD391f7
0.07739656 ETH
126221502021-06-12 21:44:301278 days ago1623534270
0xA3Ee876D...13fD391f7
0.12183421 ETH
125334132021-05-30 3:50:431291 days ago1622346643
0xA3Ee876D...13fD391f7
0.19462974 ETH
123033262021-04-24 13:57:431327 days ago1619272663
0xA3Ee876D...13fD391f7
0.38735223 ETH
121806592021-04-05 16:14:441346 days ago1617639284
0xA3Ee876D...13fD391f7
2.0654774 ETH
121772982021-04-05 3:39:471346 days ago1617593987
0xA3Ee876D...13fD391f7
1.0327387 ETH
119584072021-03-02 10:56:031380 days ago1614682563
0xA3Ee876D...13fD391f7
0.24942702 ETH
119411132021-02-27 19:07:101383 days ago1614452830
0xA3Ee876D...13fD391f7
1.04556648 ETH
119104932021-02-23 2:03:551387 days ago1614045835
0xA3Ee876D...13fD391f7
0.3880439 ETH
119097522021-02-22 23:10:181387 days ago1614035418
0xA3Ee876D...13fD391f7
3.11536709 ETH
118896552021-02-19 20:57:511391 days ago1613768271
0xA3Ee876D...13fD391f7
0.2740691 ETH
118581742021-02-15 0:51:451395 days ago1613350305
0xA3Ee876D...13fD391f7
0.95927484 ETH
118568522021-02-14 19:59:181396 days ago1613332758
0xA3Ee876D...13fD391f7
0.57801032 ETH
113997442020-12-06 14:32:531466 days ago1607265173
0xA3Ee876D...13fD391f7
1.23870439 ETH
113997372020-12-06 14:31:031466 days ago1607265063
0xA3Ee876D...13fD391f7
1.23870439 ETH
112769082020-11-17 17:51:291485 days ago1605635489
0xA3Ee876D...13fD391f7
0.66762239 ETH
112178722020-11-08 16:38:011494 days ago1604853481
0xA3Ee876D...13fD391f7
2.44590357 ETH
112053782020-11-06 18:18:581496 days ago1604686738
0xA3Ee876D...13fD391f7
1.13931609 ETH
111463932020-10-28 16:59:371505 days ago1603904377
0xA3Ee876D...13fD391f7
3.35012638 ETH
View All Internal Transactions
Loading...
Loading

Similar Match Source Code
This contract matches the deployed Bytecode of the Source Code for Contract 0xB68FB8B4...85800aC56
The constructor portion of the code might be different and could alter the actual behaviour of the contract

Contract Name:
DFOStake

Compiler Version
v0.7.1+commit.f4a555be

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-09-12
*/

pragma solidity ^0.7.1;

contract DFOStake {

    address private constant UNISWAP_V2_FACTORY = 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f;

    address private constant UNISWAP_V2_ROUTER = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    address private WETH_ADDRESS = IUniswapV2Router(UNISWAP_V2_ROUTER).WETH();

    address[] private TOKENS;

    mapping(uint256 => uint256) private _totalPoolAmount;

    uint256[] private TIME_WINDOWS;

    uint256[] private REWARD_MULTIPLIERS;

    uint256[] private REWARD_DIVIDERS;

    uint256[] private REWARD_SPLIT_TRANCHES;

    address private _doubleProxy;

    struct StakeInfo {
        address sender;
        uint256 poolPosition;
        uint256 firstAmount;
        uint256 secondAmount;
        uint256 poolAmount;
        uint256 reward;
        uint256 endBlock;
        uint256[] partialRewardBlockTimes;
        uint256 splittedReward;
    }

    uint256 private _startBlock;

    mapping(uint256 => mapping(uint256 => StakeInfo)) private _stakeInfo;
    mapping(uint256 => uint256) private _stakeInfoLength;

    event Staked(address indexed sender, uint256 indexed tier, uint256 indexed poolPosition, uint256 firstAmount, uint256 secondAmount, uint256 poolAmount, uint256 reward, uint256 endBlock, uint256[] partialRewardBlockTimes, uint256 splittedReward);
    event Withdrawn(address sender, address indexed receiver, uint256 indexed tier, uint256 indexed poolPosition, uint256 firstAmount, uint256 secondAmount, uint256 poolAmount, uint256 reward);
    event PartialWithdrawn(address sender, address indexed receiver, uint256 indexed tier, uint256 reward);

    constructor(uint256 startBlock, address doubleProxy, address[] memory tokens, uint256[] memory timeWindows, uint256[] memory rewardMultipliers, uint256[] memory rewardDividers, uint256[] memory rewardSplitTranches) public {

        _startBlock = startBlock;

        _doubleProxy = doubleProxy;

        for(uint256 i = 0; i < tokens.length; i++) {
            TOKENS.push(tokens[i]);
        }

        assert(timeWindows.length == rewardMultipliers.length && rewardMultipliers.length == rewardDividers.length && rewardDividers.length == rewardSplitTranches.length);
        for(uint256 i = 0; i < timeWindows.length; i++) {
            TIME_WINDOWS.push(timeWindows[i]);
        }

        for(uint256 i = 0; i < rewardMultipliers.length; i++) {
            REWARD_MULTIPLIERS.push(rewardMultipliers[i]);
        }

        for(uint256 i = 0; i < rewardDividers.length; i++) {
            REWARD_DIVIDERS.push(rewardDividers[i]);
        }

        for(uint256 i = 0; i < rewardSplitTranches.length; i++) {
            REWARD_SPLIT_TRANCHES.push(rewardSplitTranches[i]);
        }
    }

    function doubleProxy() public view returns(address) {
        return _doubleProxy;
    }

    function tokens() public view returns(address[] memory) {
        return TOKENS;
    }

    function tierData() public view returns(uint256[] memory, uint256[] memory, uint256[] memory, uint256[] memory) {
        return (TIME_WINDOWS, REWARD_MULTIPLIERS, REWARD_DIVIDERS, REWARD_SPLIT_TRANCHES);
    }

    function startBlock() public view returns(uint256) {
        return _startBlock;
    }

    function totalPoolAmount(uint256 poolPosition) public view returns(uint256) {
        return _totalPoolAmount[poolPosition];
    }

    function setDoubleProxy(address newDoubleProxy) public {
        require(IMVDFunctionalitiesManager(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getMVDFunctionalitiesManagerAddress()).isAuthorizedFunctionality(msg.sender), "Unauthorized Action!");
        _doubleProxy = newDoubleProxy;
    }

    function emergencyFlush() public {
        IMVDProxy proxy = IMVDProxy(IDoubleProxy(_doubleProxy).proxy());
        require(IMVDFunctionalitiesManager(proxy.getMVDFunctionalitiesManagerAddress()).isAuthorizedFunctionality(msg.sender), "Unauthorized Action!");
        address walletAddress = proxy.getMVDWalletAddress();
        address tokenAddress = proxy.getToken();
        IERC20 token = IERC20(tokenAddress);
        uint256 balanceOf = token.balanceOf(address(this));
        if(balanceOf > 0) {
            token.transfer(walletAddress, balanceOf);
        }
        balanceOf = 0;
        for(uint256 i = 0; i < TOKENS.length; i++) {
            token = IERC20(IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(tokenAddress, TOKENS[i]));
            balanceOf = token.balanceOf(address(this));
            if(balanceOf > 0) {
                token.transfer(walletAddress, balanceOf);
                _totalPoolAmount[i] = 0;
            }
            balanceOf = 0;
        }
    }

    function stake(uint256 tier, uint256 poolPosition, uint256 originalFirstAmount, uint256 firstAmountMin, uint256 value, uint256 secondAmountMin) public payable {
        require(block.number >= _startBlock, "Staking is still not available");
        require(poolPosition < TOKENS.length, "Unknown Pool");
        require(tier < TIME_WINDOWS.length, "Unknown tier");

        require(originalFirstAmount > 0, "First amount must be greater than 0");

        uint256 originalSecondAmount = TOKENS[poolPosition] == WETH_ADDRESS ? msg.value : value;
        require(originalSecondAmount > 0, "Second amount must be greater than 0");

        IMVDProxy proxy = IMVDProxy(IDoubleProxy(_doubleProxy).proxy());
        address tokenAddress = proxy.getToken();

        _transferTokensAndCheckAllowance(tokenAddress, originalFirstAmount);
        _transferTokensAndCheckAllowance(TOKENS[poolPosition], originalSecondAmount);

        address secondToken = TOKENS[poolPosition];

        (uint256 firstAmount, uint256 secondAmount, uint256 poolAmount) = _createPoolToken(originalFirstAmount, firstAmountMin, originalSecondAmount, secondAmountMin, tokenAddress, secondToken);

        _totalPoolAmount[poolPosition] += poolAmount;

        (uint256 minCap,, uint256 remainingToStake) = getStakingInfo(tier);
        require(firstAmount >= minCap, "Amount to stake is less than the current min cap");
        require(firstAmount <= remainingToStake, "Amount to stake must be less than the current remaining one");

        calculateRewardAndAddStakingPosition(tier, poolPosition, firstAmount, secondAmount, poolAmount, proxy);
    }

    function getStakingInfo(uint256 tier) public view returns(uint256 minCap, uint256 hardCap, uint256 remainingToStake) {
        (minCap, hardCap) = getStakingCap(tier);
        remainingToStake = hardCap;
        uint256 length = _stakeInfoLength[tier];
        for(uint256 i = 0; i < length; i++) {
            if(_stakeInfo[tier][i].endBlock > block.number) {
                remainingToStake -= _stakeInfo[tier][i].firstAmount;
            }
        }
    }

    function getStakingCap(uint256 tier) public view returns(uint256, uint256) {
        IStateHolder stateHolder = IStateHolder(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getStateHolderAddress());
        string memory tierString = _toString(tier);
        string memory addressString = _toLowerCase(_toString(address(this)));
        return (
            stateHolder.getUint256(string(abi.encodePacked("staking.", addressString, ".tiers[", tierString, "].minCap"))),
            stateHolder.getUint256(string(abi.encodePacked("staking.", addressString, ".tiers[", tierString, "].hardCap")))
        );
    }

    function _transferTokensAndCheckAllowance(address tokenAddress, uint256 value) private {
        if(tokenAddress == WETH_ADDRESS) {
            return;
        }
        IERC20 token = IERC20(tokenAddress);
        token.transferFrom(msg.sender, address(this), value);
        if(token.allowance(address(this), UNISWAP_V2_ROUTER) <= value) {
            token.approve(UNISWAP_V2_ROUTER, 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff);
        }
    }

    function _createPoolToken(uint256 originalFirstAmount, uint256 firstAmountMin, uint256 originalSecondAmount, uint256 secondAmountMin, address firstToken, address secondToken) private returns(uint256 firstAmount, uint256 secondAmount, uint256 poolAmount) {
        if(secondToken == WETH_ADDRESS) {
            (firstAmount, secondAmount, poolAmount) = IUniswapV2Router(UNISWAP_V2_ROUTER).addLiquidityETH{value: originalSecondAmount}(
                firstToken,
                originalFirstAmount,
                firstAmountMin,
                secondAmountMin,
                address(this),
                block.timestamp + 1000
            );
        } else {
            (firstAmount, secondAmount, poolAmount) = IUniswapV2Router(UNISWAP_V2_ROUTER).addLiquidity(
                firstToken,
                secondToken,
                originalFirstAmount,
                originalSecondAmount,
                firstAmountMin,
                secondAmountMin,
                address(this),
                block.timestamp + 1000
            );
        }
        if(firstAmount < originalFirstAmount) {
            IERC20(firstToken).transfer(msg.sender, originalFirstAmount - firstAmount);
        }
        if(secondAmount < originalSecondAmount) {
            if(secondToken == WETH_ADDRESS) {
                payable(msg.sender).transfer(originalSecondAmount - secondAmount);
            } else {
                IERC20(secondToken).transfer(msg.sender, originalSecondAmount - secondAmount);
            }
        }
    }

    function calculateRewardAndAddStakingPosition(uint256 tier, uint256 poolPosition, uint256 firstAmount, uint256 secondAmount, uint256 poolAmount, IMVDProxy proxy) private {
        uint256 partialRewardSingleBlockTime = TIME_WINDOWS[tier] / REWARD_SPLIT_TRANCHES[tier];
        uint256[] memory partialRewardBlockTimes = new uint256[](REWARD_SPLIT_TRANCHES[tier]);
        if(partialRewardBlockTimes.length > 0) {
            partialRewardBlockTimes[0] = block.number + partialRewardSingleBlockTime;
            for(uint256 i = 1; i < partialRewardBlockTimes.length; i++) {
                partialRewardBlockTimes[i] = partialRewardBlockTimes[i - 1] + partialRewardSingleBlockTime;
            }
        }
        uint256 reward = firstAmount * REWARD_MULTIPLIERS[tier] / REWARD_DIVIDERS[tier];
        StakeInfo memory stakeInfo = StakeInfo(msg.sender, poolPosition, firstAmount, secondAmount, poolAmount, reward, block.number + TIME_WINDOWS[tier], partialRewardBlockTimes, reward / REWARD_SPLIT_TRANCHES[tier]);
        _add(tier, stakeInfo);
        proxy.submit("stakingTransfer", abi.encode(address(0), 0, reward, address(this)));
        emit Staked(msg.sender, tier, poolPosition, firstAmount, secondAmount, poolAmount, reward, stakeInfo.endBlock, partialRewardBlockTimes, stakeInfo.splittedReward);
    }

    function _add(uint256 tier, StakeInfo memory element) private returns(uint256, uint256) {
        _stakeInfo[tier][_stakeInfoLength[tier]] = element;
        _stakeInfoLength[tier] = _stakeInfoLength[tier] + 1;
        return (element.reward, element.endBlock);
    }

    function _remove(uint256 tier, uint256 i) private {
        if(_stakeInfoLength[tier] <= i) {
            return;
        }
        _stakeInfoLength[tier] = _stakeInfoLength[tier] - 1;
        if(_stakeInfoLength[tier] > i) {
            _stakeInfo[tier][i] = _stakeInfo[tier][_stakeInfoLength[tier]];
        }
        delete _stakeInfo[tier][_stakeInfoLength[tier]];
    }

    function length(uint256 tier) public view returns(uint256) {
        return _stakeInfoLength[tier];
    }

    function stakeInfo(uint256 tier, uint256 position) public view returns(
        address,
        uint256,
        uint256,
        uint256,
        uint256,
        uint256,
        uint256,
        uint256[] memory,
        uint256
    ) {
        StakeInfo memory tierStakeInfo = _stakeInfo[tier][position];
        return(
            tierStakeInfo.sender,
            tierStakeInfo.poolPosition,
            tierStakeInfo.firstAmount,
            tierStakeInfo.secondAmount,
            tierStakeInfo.poolAmount,
            tierStakeInfo.reward,
            tierStakeInfo.endBlock,
            tierStakeInfo.partialRewardBlockTimes,
            tierStakeInfo.splittedReward
        );
    }

    function partialReward(uint256 tier, uint256 position) public {
        StakeInfo memory tierStakeInfo = _stakeInfo[tier][position];
        if(block.number >= tierStakeInfo.endBlock) {
            return withdraw(tier, position);
        }
        require(tierStakeInfo.reward > 0, "No more reward for this staking position");
        uint256 reward = 0;
        for(uint256 i = 0; i < tierStakeInfo.partialRewardBlockTimes.length; i++) {
            if(tierStakeInfo.partialRewardBlockTimes[i] > 0 && block.number >= tierStakeInfo.partialRewardBlockTimes[i]) {
                reward += tierStakeInfo.splittedReward;
                tierStakeInfo.partialRewardBlockTimes[i] = 0;
            }
        }
        reward = reward > tierStakeInfo.reward ? tierStakeInfo.reward : reward;
        require(reward > 0, "No reward to redeem");
        IERC20 token = IERC20(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getToken());
        token.transfer(tierStakeInfo.sender, reward);
        tierStakeInfo.reward = tierStakeInfo.reward - reward;
        _stakeInfo[tier][position] = tierStakeInfo;
        emit PartialWithdrawn(msg.sender, tierStakeInfo.sender, tier, reward);
    }

    function withdraw(uint256 tier, uint256 position) public {
        StakeInfo memory tierStakeInfo = _stakeInfo[tier][position];
        require(block.number >= tierStakeInfo.endBlock, "Cannot actually withdraw this position");
        IERC20 token = IERC20(IMVDProxy(IDoubleProxy(_doubleProxy).proxy()).getToken());
        if(tierStakeInfo.reward > 0) {
            token.transfer(tierStakeInfo.sender, tierStakeInfo.reward);
        }
        token = IERC20(IUniswapV2Factory(UNISWAP_V2_FACTORY).getPair(address(token), TOKENS[tierStakeInfo.poolPosition]));
        token.transfer(tierStakeInfo.sender, tierStakeInfo.poolAmount);
        _totalPoolAmount[tierStakeInfo.poolPosition] = _totalPoolAmount[tierStakeInfo.poolPosition] - tierStakeInfo.poolAmount;
        emit Withdrawn(msg.sender, tierStakeInfo.sender, tier, tierStakeInfo.poolPosition, tierStakeInfo.firstAmount, tierStakeInfo.secondAmount, tierStakeInfo.poolAmount, tierStakeInfo.reward);
        _remove(tier, position);
    }

    function _toString(uint _i) private pure returns(string memory) {
        if (_i == 0) {
            return "0";
        }
        uint j = _i;
        uint len;
        while (j != 0) {
            len++;
            j /= 10;
        }
        bytes memory bstr = new bytes(len);
        uint k = len - 1;
        while (_i != 0) {
            bstr[k--] = byte(uint8(48 + _i % 10));
            _i /= 10;
        }
        return string(bstr);
    }

    function _toString(address _addr) private pure returns(string memory) {
        bytes32 value = bytes32(uint256(_addr));
        bytes memory alphabet = "0123456789abcdef";

        bytes memory str = new bytes(42);
        str[0] = '0';
        str[1] = 'x';
        for (uint i = 0; i < 20; i++) {
            str[2+i*2] = alphabet[uint(uint8(value[i + 12] >> 4))];
            str[3+i*2] = alphabet[uint(uint8(value[i + 12] & 0x0f))];
        }
        return string(str);
    }

    function _toLowerCase(string memory str) private pure returns(string memory) {
        bytes memory bStr = bytes(str);
        for (uint i = 0; i < bStr.length; i++) {
            bStr[i] = bStr[i] >= 0x41 && bStr[i] <= 0x5A ? bytes1(uint8(bStr[i]) + 0x20) : bStr[i];
        }
        return string(bStr);
    }
}

interface IMVDProxy {
    function getToken() external view returns(address);
    function getStateHolderAddress() external view returns(address);
    function getMVDWalletAddress() external view returns(address);
    function getMVDFunctionalitiesManagerAddress() external view returns(address);
    function submit(string calldata codeName, bytes calldata data) external payable returns(bytes memory returnData);
}

interface IStateHolder {
    function setUint256(string calldata name, uint256 value) external returns(uint256);
    function getUint256(string calldata name) external view returns(uint256);
    function getBool(string calldata varName) external view returns (bool);
    function clear(string calldata varName) external returns(string memory oldDataType, bytes memory oldVal);
}

interface IMVDFunctionalitiesManager {
    function isAuthorizedFunctionality(address functionality) external view returns(bool);
}

interface IERC20 {
    function balanceOf(address account) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}

interface IUniswapV2Router {
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Factory {
    function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IDoubleProxy {
    function proxy() external view returns(address);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"uint256","name":"startBlock","type":"uint256"},{"internalType":"address","name":"doubleProxy","type":"address"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"uint256[]","name":"timeWindows","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardMultipliers","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardDividers","type":"uint256[]"},{"internalType":"uint256[]","name":"rewardSplitTranches","type":"uint256[]"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"PartialWithdrawn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolPosition","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"firstAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"endBlock","type":"uint256"},{"indexed":false,"internalType":"uint256[]","name":"partialRewardBlockTimes","type":"uint256[]"},{"indexed":false,"internalType":"uint256","name":"splittedReward","type":"uint256"}],"name":"Staked","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"address","name":"receiver","type":"address"},{"indexed":true,"internalType":"uint256","name":"tier","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"poolPosition","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"firstAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"secondAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"poolAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"doubleProxy","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"emergencyFlush","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getStakingCap","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"getStakingInfo","outputs":[{"internalType":"uint256","name":"minCap","type":"uint256"},{"internalType":"uint256","name":"hardCap","type":"uint256"},{"internalType":"uint256","name":"remainingToStake","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"}],"name":"length","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"name":"partialReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newDoubleProxy","type":"address"}],"name":"setDoubleProxy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"poolPosition","type":"uint256"},{"internalType":"uint256","name":"originalFirstAmount","type":"uint256"},{"internalType":"uint256","name":"firstAmountMin","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"secondAmountMin","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"name":"stakeInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tierData","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokens","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"poolPosition","type":"uint256"}],"name":"totalPoolAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tier","type":"uint256"},{"internalType":"uint256","name":"position","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

Deployed Bytecode

0x6080604052600436106100dd5760003560e01c8063a06dd6dc1161007f578063dd58d9d511610059578063dd58d9d51461046a578063e9c4aa6a146104ad578063f39d3c49146104f5578063fdd5660514610525576100dd565b8063a06dd6dc146103f8578063aa8b99d21461040d578063cbd99d0314610437576100dd565b80634eb9b592116100bb5780634eb9b59214610165578063590c2a8b146101965780635de3326c1461025b5780639d63848a14610393576100dd565b8063167e4781146100e2578063441a3e701461011e57806348cd4cb114610150575b600080fd5b3480156100ee57600080fd5b5061010c6004803603602081101561010557600080fd5b5035610560565b60408051918252519081900360200190f35b34801561012a57600080fd5b5061014e6004803603604081101561014157600080fd5b5080359060200135610575565b005b34801561015c57600080fd5b5061010c6109f1565b34801561017157600080fd5b5061017a6109f7565b604080516001600160a01b039092168252519081900360200190f35b3480156101a257600080fd5b506101c6600480360360408110156101b957600080fd5b5080359060200135610a06565b604051808a6001600160a01b0316815260200189815260200188815260200187815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b8381101561023f578181015183820152602001610227565b505050509050019a505050505050505050505060405180910390f35b34801561026757600080fd5b50610270610b39565b6040518080602001806020018060200180602001858103855289818151815260200191508051906020019060200280838360005b838110156102bc5781810151838201526020016102a4565b50505050905001858103845288818151815260200191508051906020019060200280838360005b838110156102fb5781810151838201526020016102e3565b50505050905001858103835287818151815260200191508051906020019060200280838360005b8381101561033a578181015183820152602001610322565b50505050905001858103825286818151815260200191508051906020019060200280838360005b83811015610379578181015183820152602001610361565b505050509050019850505050505050505060405180910390f35b34801561039f57600080fd5b506103a8610c9d565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103e45781810151838201526020016103cc565b505050509050019250505060405180910390f35b34801561040457600080fd5b5061014e610cff565b34801561041957600080fd5b5061010c6004803603602081101561043057600080fd5b5035611263565b34801561044357600080fd5b5061014e6004803603602081101561045a57600080fd5b50356001600160a01b0316611275565b34801561047657600080fd5b506104946004803603602081101561048d57600080fd5b503561143b565b6040805192835260208301919091528051918290030190f35b3480156104b957600080fd5b506104d7600480360360208110156104d057600080fd5b50356118d5565b60408051938452602084019290925282820152519081900360600190f35b34801561050157600080fd5b5061014e6004803603604081101561051857600080fd5b508035906020013561195b565b61014e600480360360c081101561053b57600080fd5b5080359060208101359060408101359060608101359060808101359060a00135611dcb565b6000818152600260205260409020545b919050565b61057d613022565b600083815260096020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e0860193929083018282801561063657602002820191906000526020600020905b815481526020019060010190808311610622575b5050505050815260200160088201548152505090508060c0015143101561068e5760405162461bcd60e51b815260040180806020018281038252602681526020018061319c6026913960400191505060405180910390fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b1580156106d357600080fd5b505afa1580156106e7573d6000803e3d6000fd5b505050506040513d60208110156106fd57600080fd5b5051604080516321df0da760e01b815290516001600160a01b03909216916321df0da791600480820192602092909190829003018186803b15801561074157600080fd5b505afa158015610755573d6000803e3d6000fd5b505050506040513d602081101561076b57600080fd5b505160a08301519091501561080657806001600160a01b031663a9059cbb83600001518460a001516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156107d957600080fd5b505af11580156107ed573d6000803e3d6000fd5b505050506040513d602081101561080357600080fd5b50505b735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6001600160a01b031663e6a4390582600185602001518154811061083b57fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b15801561089157600080fd5b505afa1580156108a5573d6000803e3d6000fd5b505050506040513d60208110156108bb57600080fd5b5051825160808401516040805163a9059cbb60e01b81526001600160a01b0393841660048201526024810192909252519293509083169163a9059cbb916044808201926020929091908290030181600087803b15801561091a57600080fd5b505af115801561092e573d6000803e3d6000fd5b505050506040513d602081101561094457600080fd5b50506080808301805160208581018051600090815260028352604080822054835183529181902094909103909355518651838801516060808a0151965160a0808c01518851338152978801949094528688019890985290850152958301959095529151919388936001600160a01b03909116927fec4d7fc8319e44dfa849ab87f565622b9cf848ce9959568c3066615ce9e2ef149281900390910190a46109eb8484612183565b50505050565b60085490565b6007546001600160a01b031690565b600080600080600080600060606000610a1d613022565b60008c81526009602090815260408083208e845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e08601939290830182828015610ad657602002820191906000526020600020905b815481526020019060010190808311610ac2575b505050505081526020016008820154815250509050806000015181602001518260400151836060015184608001518560a001518660c001518760e00151886101000151995099509950995099509950995099509950509295985092959850929598565b606080606080600360046005600683805480602002602001604051908101604052809291908181526020018280548015610b9257602002820191906000526020600020905b815481526020019060010190808311610b7e575b5050505050935082805480602002602001604051908101604052809291908181526020018280548015610be457602002820191906000526020600020905b815481526020019060010190808311610bd0575b5050505050925081805480602002602001604051908101604052809291908181526020018280548015610c3657602002820191906000526020600020905b815481526020019060010190808311610c22575b5050505050915080805480602002602001604051908101604052809291908181526020018280548015610c8857602002820191906000526020600020905b815481526020019060010190808311610c74575b50505050509050935093509350935090919293565b60606001805480602002602001604051908101604052809291908181526020018280548015610cf557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610cd7575b5050505050905090565b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015610d4457600080fd5b505afa158015610d58573d6000803e3d6000fd5b505050506040513d6020811015610d6e57600080fd5b505160408051633380ac3560e11b815290519192506001600160a01b03831691636701586a91600480820192602092909190829003018186803b158015610db457600080fd5b505afa158015610dc8573d6000803e3d6000fd5b505050506040513d6020811015610dde57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d6020811015610e5257600080fd5b5051610e9c576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b6000816001600160a01b03166331c6903d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ed757600080fd5b505afa158015610eeb573d6000803e3d6000fd5b505050506040513d6020811015610f0157600080fd5b5051604080516321df0da760e01b815290519192506000916001600160a01b038516916321df0da7916004808301926020929190829003018186803b158015610f4957600080fd5b505afa158015610f5d573d6000803e3d6000fd5b505050506040513d6020811015610f7357600080fd5b5051604080516370a0823160e01b8152306004820152905191925082916000916001600160a01b038416916370a0823191602480820192602092909190829003018186803b158015610fc457600080fd5b505afa158015610fd8573d6000803e3d6000fd5b505050506040513d6020811015610fee57600080fd5b50519050801561107c57816001600160a01b031663a9059cbb85836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561104f57600080fd5b505af1158015611063573d6000803e3d6000fd5b505050506040513d602081101561107957600080fd5b50505b506000805b60015481101561125b57735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f6001600160a01b031663e6a4390585600184815481106110bc57fe5b60009182526020918290200154604080516001600160e01b031960e087901b1681526001600160a01b03948516600482015293909116602484015251604480840193829003018186803b15801561111257600080fd5b505afa158015611126573d6000803e3d6000fd5b505050506040513d602081101561113c57600080fd5b5051604080516370a0823160e01b815230600482015290519194506001600160a01b038516916370a0823191602480820192602092909190829003018186803b15801561118857600080fd5b505afa15801561119c573d6000803e3d6000fd5b505050506040513d60208110156111b257600080fd5b50519150811561124f57826001600160a01b031663a9059cbb86846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561121357600080fd5b505af1158015611227573d6000803e3d6000fd5b505050506040513d602081101561123d57600080fd5b50506000818152600260205260408120555b60009150600101611081565b505050505050565b6000908152600a602052604090205490565b600760009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b1580156112c357600080fd5b505afa1580156112d7573d6000803e3d6000fd5b505050506040513d60208110156112ed57600080fd5b505160408051633380ac3560e11b815290516001600160a01b0390921691636701586a91600480820192602092909190829003018186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b5051604080516318c8e99960e11b815233600482015290516001600160a01b0390921691633191d33291602480820192602092909190829003018186803b1580156113a557600080fd5b505afa1580156113b9573d6000803e3d6000fd5b505050506040513d60208110156113cf57600080fd5b5051611419576040805162461bcd60e51b8152602060048201526014602482015273556e617574686f72697a656420416374696f6e2160601b604482015290519081900360640190fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000600760009054906101000a90046001600160a01b03166001600160a01b031663ec5568896040518163ffffffff1660e01b815260040160206040518083038186803b15801561148e57600080fd5b505afa1580156114a2573d6000803e3d6000fd5b505050506040513d60208110156114b857600080fd5b50516040805163ba83c16f60e01b815290516001600160a01b039092169163ba83c16f91600480820192602092909190829003018186803b1580156114fc57600080fd5b505afa158015611510573d6000803e3d6000fd5b505050506040513d602081101561152657600080fd5b505190506060611535856122cd565b9050606061154a611545306123a5565b612518565b9050826001600160a01b0316630bb687e3828460405160200180806739ba30b5b4b7339760c11b81525060080183805190602001908083835b602083106115a25780518252601f199092019160209182019101611583565b51815160209384036101000a6000190180199092169116179052662e74696572735b60c81b919093019081528451600790910192850191508083835b602083106115fd5780518252601f1990920191602091820191016115de565b6001836020036101000a038019825116818451168082178552505050505050905001806705d2e6d696e4361760c41b815250600801925050506040516020818303038152906040526040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611691578181015183820152602001611679565b50505050905090810190601f1680156116be5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b1580156116db57600080fd5b505afa1580156116ef573d6000803e3d6000fd5b505050506040513d602081101561170557600080fd5b50516040516739ba30b5b4b7339760c11b602082810191825284516001600160a01b03881693630bb687e39387938993919260280191908501908083835b602083106117625780518252601f199092019160209182019101611743565b51815160209384036101000a6000190180199092169116179052662e74696572735b60c81b919093019081528451600790910192850191508083835b602083106117bd5780518252601f19909201916020918201910161179e565b6001836020036101000a038019825116818451168082178552505050505050905001806805d2e686172644361760bc1b815250600901925050506040516020818303038152906040526040518263ffffffff1660e01b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561185257818101518382015260200161183a565b50505050905090810190601f16801561187f5780820380516001836020036101000a031916815260200191505b509250505060206040518083038186803b15801561189c57600080fd5b505afa1580156118b0573d6000803e3d6000fd5b505050506040513d60208110156118c657600080fd5b50519095509350505050915091565b60008060006118e38461143b565b6000868152600a60205260408120549295509093508392505b8181101561195257600086815260096020908152604080832084845290915290206006015443101561194a576000868152600960209081526040808320848452909152902060020154909203915b6001016118fc565b50509193909250565b611963613022565b600083815260096020908152604080832085845282529182902082516101208101845281546001600160a01b031681526001820154818401526002820154818501526003820154606082015260048201546080820152600582015460a0820152600682015460c08201526007820180548551818602810186019096528086529194929360e08601939290830182828015611a1c57602002820191906000526020600020905b815481526020019060010190808311611a08575b5050505050815260200160088201548152505090508060c001514310611a4c57611a468383610575565b50611dc7565b60008160a0015111611a8f5760405162461bcd60e51b81526004018080602001828103825260288152602001806131746028913960400191505060405180910390fd5b6000805b8260e0015151811015611b145760008360e001518281518110611ab257fe5b6020026020010151118015611ade57508260e001518181518110611ad257fe5b60200260200101514310155b15611b0c578261010001518201915060008360e001518281518110611aff57fe5b6020026020010181815250505b600101611a93565b508160a001518111611b265780611b2c565b8160a001515b905060008111611b79576040805162461bcd60e51b81526020600482015260136024820152724e6f2072657761726420746f2072656465656d60681b604482015290519081900360640190fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015611bbe57600080fd5b505afa158015611bd2573d6000803e3d6000fd5b505050506040513d6020811015611be857600080fd5b5051604080516321df0da760e01b815290516001600160a01b03909216916321df0da791600480820192602092909190829003018186803b158015611c2c57600080fd5b505afa158015611c40573d6000803e3d6000fd5b505050506040513d6020811015611c5657600080fd5b505183516040805163a9059cbb60e01b81526001600160a01b0392831660048201526024810186905290519293509083169163a9059cbb916044808201926020929091908290030181600087803b158015611cb057600080fd5b505af1158015611cc4573d6000803e3d6000fd5b505050506040513d6020811015611cda57600080fd5b505060a08301805183900381526000868152600960209081526040808320888452825291829020865181546001600160a01b0319166001600160a01b0390911617815581870151600182015591860151600283015560608601516003830155608086015160048301559151600582015560c0850151600682015560e085015180518693611d6e926007850192910190613077565b50610100919091015160089091015582516040805133815260208101859052815188936001600160a01b0316927f5777300364834e2d145b85cee28a0d45c4be04f1c7c24116ec72a6b5c839631b928290030190a35050505b5050565b600854431015611e22576040805162461bcd60e51b815260206004820152601e60248201527f5374616b696e67206973207374696c6c206e6f7420617661696c61626c650000604482015290519081900360640190fd5b6001548510611e67576040805162461bcd60e51b815260206004820152600c60248201526b155b9adb9bdddb88141bdbdb60a21b604482015290519081900360640190fd5b6003548610611eac576040805162461bcd60e51b815260206004820152600c60248201526b2ab735b737bbb7103a34b2b960a11b604482015290519081900360640190fd5b60008411611eeb5760405162461bcd60e51b81526004018080602001828103825260238152602001806131c26023913960400191505060405180910390fd5b60008054600180546001600160a01b039092169188908110611f0957fe5b6000918252602090912001546001600160a01b031614611f295782611f2b565b345b905060008111611f6c5760405162461bcd60e51b81526004018080602001828103825260248152602001806132156024913960400191505060405180910390fd5b6007546040805163ec55688960e01b815290516000926001600160a01b03169163ec556889916004808301926020929190829003018186803b158015611fb157600080fd5b505afa158015611fc5573d6000803e3d6000fd5b505050506040513d6020811015611fdb57600080fd5b5051604080516321df0da760e01b815290519192506000916001600160a01b038416916321df0da7916004808301926020929190829003018186803b15801561202357600080fd5b505afa158015612037573d6000803e3d6000fd5b505050506040513d602081101561204d57600080fd5b5051905061205b81886125ea565b6120866001898154811061206b57fe5b6000918252602090912001546001600160a01b0316846125ea565b60006001898154811061209557fe5b60009182526020822001546001600160a01b0316915080806120bb8b8b898b89896127b3565b60008f81526002602052604081208054830190559295509093509150806120e18f6118d5565b9250509150818510156121255760405162461bcd60e51b81526004018080602001828103825260308152602001806131e56030913960400191505060405180910390fd5b808511156121645760405162461bcd60e51b815260040180806020018281038252603b815260200180613139603b913960400191505060405180910390fd5b6121728f8f8787878d612ac8565b505050505050505050505050505050565b6000828152600a6020526040902054811061219d57611dc7565b6000828152600a6020526040902080546000190190819055811015612259576000828152600960209081526040808320600a83528184205484529091528082208383529120815481546001600160a01b0319166001600160a01b039091161781556001808301549082015560028083015490820155600380830154908201556004808301549082015560058083015490820155600680830154908201556007808301805461224e92840191906130c2565b506008918201549101555b6000828152600960209081526040808320600a8352818420548452909152812080546001600160a01b0319168155600181018290556002810182905560038101829055600481018290556005810182905560068101829055906122bf6007830182613102565b600882016000905550505050565b6060816122f257506040805180820190915260018152600360fc1b6020820152610570565b8160005b811561230a57600101600a820491506122f6565b60608167ffffffffffffffff8111801561232357600080fd5b506040519080825280601f01601f19166020018201604052801561234e576020820181803683370190505b50905060001982015b851561239c57600a860660300160f81b8282806001900393508151811061237a57fe5b60200101906001600160f81b031916908160001a905350600a86049550612357565b50949350505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b03851692918491602082018180368337019050509050600360fc1b8160008151811061240957fe5b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061243257fe5b60200101906001600160f81b031916908160001a90535060005b601481101561239c578260048583600c016020811061246757fe5b1a60f81b6001600160f81b031916901c60f81c60ff168151811061248757fe5b602001015160f81c60f81b8282600202600201815181106124a457fe5b60200101906001600160f81b031916908160001a905350828482600c01602081106124cb57fe5b825191901a600f169081106124dc57fe5b602001015160f81c60f81b8282600202600301815181106124f957fe5b60200101906001600160f81b031916908160001a90535060010161244c565b60608160005b81518110156125e357604160f81b82828151811061253857fe5b01602001516001600160f81b031916108015906125735750605a60f81b82828151811061256157fe5b01602001516001600160f81b03191611155b6125975781818151811061258357fe5b01602001516001600160f81b0319166125b8565b8181815181106125a357fe5b602001015160f81c60f81b60f81c60200160f81b5b8282815181106125c457fe5b60200101906001600160f81b031916908160001a90535060010161251e565b5092915050565b6000546001600160a01b038381169116141561260557611dc7565b604080516323b872dd60e01b815233600482015230602482015260448101839052905183916001600160a01b038316916323b872dd916064808201926020929091908290030181600087803b15801561265d57600080fd5b505af1158015612671573d6000803e3d6000fd5b505050506040513d602081101561268757600080fd5b505060408051636eb1769f60e11b8152306004820152737a250d5630b4cf539739df2c5dacb4c659f2488d6024820152905183916001600160a01b0384169163dd62ed3e91604480820192602092909190829003018186803b1580156126ec57600080fd5b505afa158015612700573d6000803e3d6000fd5b505050506040513d602081101561271657600080fd5b5051116127ae576040805163095ea7b360e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d6004820152600019602482015290516001600160a01b0383169163095ea7b39160448083019260209291908290030181600087803b15801561278157600080fd5b505af1158015612795573d6000803e3d6000fd5b505050506040513d60208110156127ab57600080fd5b50505b505050565b60008054819081906001600160a01b0385811691161415612897576040805163f305d71960e01b81526001600160a01b0387166004820152602481018b9052604481018a9052606481018890523060848201526103e8420160a48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163f305d719918a9160c48082019260609290919082900301818588803b15801561285157600080fd5b505af1158015612865573d6000803e3d6000fd5b50505050506040513d606081101561287c57600080fd5b50805160208201516040909201519094509092509050612968565b6040805162e8e33760e81b81526001600160a01b03878116600483015286166024820152604481018b905260648101899052608481018a905260a481018890523060c48201526103e8420160e48201529051737a250d5630b4cf539739df2c5dacb4c659f2488d9163e8e33700916101048083019260609291908290030181600087803b15801561292757600080fd5b505af115801561293b573d6000803e3d6000fd5b505050506040513d606081101561295157600080fd5b508051602082015160409092015190945090925090505b888310156129ed576040805163a9059cbb60e01b8152336004820152848b03602482015290516001600160a01b0387169163a9059cbb9160448083019260209291908290030181600087803b1580156129c057600080fd5b505af11580156129d4573d6000803e3d6000fd5b505050506040513d60208110156129ea57600080fd5b50505b86821015612abc576000546001600160a01b0385811691161415612a3f57604051339083890380156108fc02916000818181858888f19350505050158015612a39573d6000803e3d6000fd5b50612abc565b6040805163a9059cbb60e01b8152336004820152838903602482015290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b158015612a8f57600080fd5b505af1158015612aa3573d6000803e3d6000fd5b505050506040513d6020811015612ab957600080fd5b50505b96509650969350505050565b600060068781548110612ad757fe5b906000526020600020015460038881548110612aef57fe5b906000526020600020015481612b0157fe5b049050606060068881548110612b1357fe5b906000526020600020015467ffffffffffffffff81118015612b3457600080fd5b50604051908082528060200260200182016040528015612b5e578160200160208202803683370190505b50805190915015612bca5781430181600081518110612b7957fe5b602090810291909101015260015b8151811015612bc85782826001830381518110612ba057fe5b602002602001015101828281518110612bb557fe5b6020908102919091010152600101612b87565b505b600060058981548110612bd957fe5b906000526020600020015460048a81548110612bf157fe5b9060005260206000200154880281612c0557fe5b049050612c10613022565b604051806101200160405280336001600160a01b031681526020018a815260200189815260200188815260200187815260200183815260200160038c81548110612c5657fe5b90600052602060002001544301815260200184815260200160068c81548110612c7b57fe5b90600052602060002001548481612c8e57fe5b0490529050612c9d8a82612f57565b50506040805160006020808301829052828401829052606083018690523060808085019190915284518085038201815260a08501808752639e813f1f60e01b905260a48501958652600f60e48601526e39ba30b5b4b733aa3930b739b332b960891b61010486015260c48501918252805161012486015280516001600160a01b038c1696639e813f1f96929590948594936101440192908701918190849084905b83811015612d56578181015183820152602001612d3e565b50505050905090810190601f168015612d835780820380516001836020036101000a031916815260200191505b509350505050600060405180830381600087803b158015612da357600080fd5b505af1158015612db7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526020811015612de057600080fd5b8101908080516040519392919084640100000000821115612e0057600080fd5b908301906020820185811115612e1557600080fd5b8251640100000000811182820188101715612e2f57600080fd5b82525081516020918201929091019080838360005b83811015612e5c578181015183820152602001612e44565b50505050905090810190601f168015612e895780820380516001836020036101000a031916815260200191505b5060405250505050888a336001600160a01b03167f904bffde498b5f8b9c482208599445964bca8e5fe0837abba34df545d09aed428b8b8b888860c001518b8a61010001516040518088815260200187815260200186815260200185815260200184815260200180602001838152602001828103825284818151815260200191508051906020019060200280838360005b83811015612f32578181015183820152602001612f1a565b505050509050019850505050505050505060405180910390a450505050505050505050565b6000828152600960209081526040808320600a83528184205484528252808320845181546001600160a01b0319166001600160a01b03909116178155848301516001820155908401516002820155606084015160038201556080840151600482015560a0840151600582015560c0840151600682015560e084015180518493869392612fec9260078501929190910190613077565b50610100919091015160089091015550506000918252600a60205260409091208054600101905560a081015160c0909101519091565b60405180610120016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160608152602001600081525090565b8280548282559060005260206000209081019282156130b2579160200282015b828111156130b2578251825591602001919060010190613097565b506130be929150613123565b5090565b8280548282559060005260206000209081019282156130b25760005260206000209182015b828111156130b25782548255916001019190600101906130e7565b50805460008255906000526020600020908101906131209190613123565b50565b5b808211156130be576000815560010161312456fe416d6f756e7420746f207374616b65206d757374206265206c657373207468616e207468652063757272656e742072656d61696e696e67206f6e654e6f206d6f72652072657761726420666f722074686973207374616b696e6720706f736974696f6e43616e6e6f742061637475616c6c79207769746864726177207468697320706f736974696f6e466972737420616d6f756e74206d7573742062652067726561746572207468616e2030416d6f756e7420746f207374616b65206973206c657373207468616e207468652063757272656e74206d696e206361705365636f6e6420616d6f756e74206d7573742062652067726561746572207468616e2030a264697066735822122005cb8c16848065602012eb1d67f99bf9b88dff18e2ae0a0a8c951f15ca520ef064736f6c63430007010033

Deployed Bytecode Sourcemap

27:15909:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3304:132;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3304:132:0;;:::i;:::-;;;;;;;;;;;;;;;;13626:1005;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13626:1005:0;;;;;;;:::i;:::-;;3208:88;;;;;;;;;;;;;:::i;2794:90::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2794:90:0;;;;;;;;;;;;;;11694:718;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11694:718:0;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;11694:718:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2988:212;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2892:88;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3748:1006;;;;;;;;;;;;;:::i;11579:107::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11579:107:0;;:::i;3444:296::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3444:296:0;-1:-1:-1;;;;;3444:296:0;;:::i;6892:616::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6892:616:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6416:468;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6416:468:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;12420:1198;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12420:1198:0;;;;;;;:::i;4762:1646::-;;;;;;;;;;;;;;;;-1:-1:-1;4762:1646:0;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;3304:132::-;3371:7;3398:30;;;:16;:30;;;;;;3304:132;;;;:::o;13626:1005::-;13694:30;;:::i;:::-;13727:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;13694:59;;;;;;;;;-1:-1:-1;;;;;13694:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13727:26;;13694:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13788:13;:22;;;13772:12;:38;;13764:89;;;;-1:-1:-1;;;13764:89:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13909:12;;13896:34;;;-1:-1:-1;;;13896:34:0;;;;13864:12;;-1:-1:-1;;;;;13909:12:0;;13896:32;;:34;;;;;;;;;;;;;;13909:12;13896:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13896:34:0;13886:56;;;-1:-1:-1;;;13886:56:0;;;;-1:-1:-1;;;;;13886:54:0;;;;;;:56;;;;;13896:34;;13886:56;;;;;;;;:54;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13886:56:0;13957:20;;;;13886:56;;-1:-1:-1;13957:24:0;13954:114;;13998:5;-1:-1:-1;;;;;13998:14:0;;14013:13;:20;;;14035:13;:20;;;13998:58;;;;;;;;;;;;;-1:-1:-1;;;;;13998:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13954:114:0;100:42;-1:-1:-1;;;;;14093:45:0;;14147:5;14155:6;14162:13;:26;;;14155:34;;;;;;;;;;;;;;;;;;;14093:97;;;-1:-1:-1;;;;;;14093:97:0;;;;;;;-1:-1:-1;;;;;14093:97:0;;;;;;;14155:34;;;;14093:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14093:97:0;14217:20;;14239:24;;;;14202:62;;;-1:-1:-1;;;14202:62:0;;-1:-1:-1;;;;;14202:62:0;;;;;;;;;;;;;;;14093:97;;-1:-1:-1;14202:14:0;;;;;;:62;;;;;14093:97;;14202:62;;;;;;;;14217:20;14202:14;:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14369:24:0;;;;;;14202:62;14339:26;;;;;14322:44;;;;:16;:44;;;;;;;14292:26;;14275:44;;;;;;14322:71;;;;14275:118;;;14459:26;14431:20;;14487:25;;;;14514:26;;;;;14542:24;;14568:20;;;;;14409:180;;14419:10;14409:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14459:26;;14453:4;;-1:-1:-1;;;;;14409:180:0;;;;;;;;;;;;;;14600:23;14608:4;14614:8;14600:7;:23::i;:::-;13626:1005;;;;:::o;3208:88::-;3277:11;;3208:88;:::o;2794:90::-;2864:12;;-1:-1:-1;;;;;2864:12:0;2794:90;:::o;11694:718::-;11775:7;11793;11811;11829;11847;11865;11883;11901:16;11928:7;11954:30;;:::i;:::-;11987:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;11954:59;;;;;;;;;-1:-1:-1;;;;;11954:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11987:26;;11954:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12045:13;:20;;;12080:13;:26;;;12121:13;:25;;;12161:13;:26;;;12202:13;:24;;;12241:13;:20;;;12276:13;:22;;;12313:13;:37;;;12365:13;:28;;;12024:380;;;;;;;;;;;;;;;;;;;11694:718;;;;;;;;;;;:::o;2988:212::-;3028:16;3046;3064;3082;3119:12;3133:18;3153:15;3170:21;3111:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2988:212;;;;:::o;2892:88::-;2930:16;2966:6;2959:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2959:13:0;;;;;;;;;;;;;;;;;;;;;;;2892:88;:::o;3748:1006::-;3833:12;;3820:34;;;-1:-1:-1;;;3820:34:0;;;;3792:15;;-1:-1:-1;;;;;3833:12:0;;3820:32;;:34;;;;;;;;;;;;;;3833:12;3820:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3820:34:0;3901:43;;;-1:-1:-1;;;3901:43:0;;;;3820:34;;-1:-1:-1;;;;;;3901:41:0;;;;;:43;;;;;3820:34;;3901:43;;;;;;;;:41;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3901:43:0;3874:109;;;-1:-1:-1;;;3874:109:0;;3972:10;3874:109;;;;;;-1:-1:-1;;;;;3874:97:0;;;;;;:109;;;;;3901:43;;3874:109;;;;;;;;:97;:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3874:109:0;3866:142;;;;;-1:-1:-1;;;3866:142:0;;;;;;;;;;;;-1:-1:-1;;;3866:142:0;;;;;;;;;;;;;;;4019:21;4043:5;-1:-1:-1;;;;;4043:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4043:27:0;4104:16;;;-1:-1:-1;;;4104:16:0;;;;4043:27;;-1:-1:-1;4081:20:0;;-1:-1:-1;;;;;4104:14:0;;;;;:16;;;;;4043:27;;4104:16;;;;;;;:14;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4104:16:0;4197:30;;;-1:-1:-1;;;4197:30:0;;4221:4;4197:30;;;;;;4104:16;;-1:-1:-1;4104:16:0;;4131:12;;-1:-1:-1;;;;;4197:15:0;;;;;:30;;;;;4104:16;;4197:30;;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4197:30:0;;-1:-1:-1;4241:13:0;;4238:85;;4271:5;-1:-1:-1;;;;;4271:14:0;;4286:13;4301:9;4271:40;;;;;;;;;;;;;-1:-1:-1;;;;;4271:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4238:85:0;-1:-1:-1;4345:1:0;;4357:390;4380:6;:13;4376:17;;4357:390;;;100:42;-1:-1:-1;;;;;4430:45:0;;4476:12;4490:6;4497:1;4490:9;;;;;;;;;;;;;;;;;;;4430:70;;;-1:-1:-1;;;;;;4430:70:0;;;;;;;-1:-1:-1;;;;;4430:70:0;;;;;;;4490:9;;;;4430:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4430:70:0;4528:30;;;-1:-1:-1;;;4528:30:0;;4552:4;4528:30;;;;;;4430:70;;-1:-1:-1;;;;;;4528:15:0;;;;;:30;;;;;4430:70;;4528:30;;;;;;;;:15;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4528:30:0;;-1:-1:-1;4576:13:0;;4573:135;;4610:5;-1:-1:-1;;;;;4610:14:0;;4625:13;4640:9;4610:40;;;;;;;;;;;;;-1:-1:-1;;;;;4610:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4691:1:0;4669:19;;;:16;4610:40;4669:19;;;;:23;4573:135;4734:1;;-1:-1:-1;4395:3:0;;4357:390;;;;3748:1006;;;;;:::o;11579:107::-;11629:7;11656:22;;;:16;:22;;;;;;;11579:107::o;3444:296::-;3568:12;;;;;;;;;-1:-1:-1;;;;;3568:12:0;-1:-1:-1;;;;;3555:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3555:34:0;3545:83;;;-1:-1:-1;;;3545:83:0;;;;-1:-1:-1;;;;;3545:81:0;;;;;;:83;;;;;3555:34;;3545:83;;;;;;;;:81;:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3545:83:0;3518:149;;;-1:-1:-1;;;3518:149:0;;3656:10;3518:149;;;;;;-1:-1:-1;;;;;3518:137:0;;;;;;:149;;;;;3545:83;;3518:149;;;;;;;;:137;:149;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3518:149:0;3510:182;;;;;-1:-1:-1;;;3510:182:0;;;;;;;;;;;;-1:-1:-1;;;3510:182:0;;;;;;;;;;;;;;;3703:12;:29;;-1:-1:-1;;;;;;3703:29:0;-1:-1:-1;;;;;3703:29:0;;;;;;;;;;3444:296::o;6892:616::-;6949:7;6958;6978:24;7041:12;;;;;;;;;-1:-1:-1;;;;;7041:12:0;-1:-1:-1;;;;;7028:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7028:34:0;7018:69;;;-1:-1:-1;;;7018:69:0;;;;-1:-1:-1;;;;;7018:67:0;;;;;;:69;;;;;7028:34;;7018:69;;;;;;;;:67;:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7018:69:0;;-1:-1:-1;7099:24:0;7126:15;7136:4;7126:9;:15::i;:::-;7099:42;;7152:27;7182:38;7195:24;7213:4;7195:9;:24::i;:::-;7182:12;:38::i;:::-;7152:68;;7253:11;-1:-1:-1;;;;;7253:22:0;;7312:13;7338:10;7283:78;;;;;;-1:-1:-1;;;7283:78:0;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7283:78:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7283:78:0;;;;;;;;;;;-1:-1:-1;;;7283:78:0;;;;;;;;;;;;;;;;;-1:-1:-1;7283:78:0;;;;;;;;;;;;;-1:-1:-1;;7283:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7283:78:0;;;;;;;;;;;;;;;;;;;;;7253:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7253:110:0;7408:79;;-1:-1:-1;;;7253:110:0;7408:79;;;;;;;;-1:-1:-1;;;;;7378:22:0;;;;;7437:13;;7463:10;;7408:79;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7408:79:0;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7408:79:0;;;;;;;;;;;-1:-1:-1;;;7408:79:0;;;;;;;;;;;;;;;;;-1:-1:-1;7408:79:0;;;;;;;;;;;;;-1:-1:-1;;7408:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;7408:79:0;;;;;;;;;;;;;;;;;;;;;7378:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7378:111:0;7231:269;;-1:-1:-1;7378:111:0;-1:-1:-1;;;;6892:616:0;;;:::o;6416:468::-;6474:14;6490:15;6507:24;6564:19;6578:4;6564:13;:19::i;:::-;6631:14;6648:22;;;:16;:22;;;;;;6544:39;;-1:-1:-1;6544:39:0;;-1:-1:-1;6544:39:0;;-1:-1:-1;6681:196:0;6704:6;6700:1;:10;6681:196;;;6735:16;;;;:10;:16;;;;;;;;:19;;;;;;;;:28;;;6766:12;-1:-1:-1;6732:134:0;;;6819:16;;;;:10;:16;;;;;;;;:19;;;;;;;;:31;;;6799:51;;;;6732:134;6712:3;;6681:196;;;;6416:468;;;;;;:::o;12420:1198::-;12493:30;;:::i;:::-;12526:16;;;;:10;:16;;;;;;;;:26;;;;;;;;;12493:59;;;;;;;;;-1:-1:-1;;;;;12493:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12526:26;;12493:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12582:13;:22;;;12566:12;:38;12563:101;;12628:24;12637:4;12643:8;12628;:24::i;:::-;12621:31;;;12563:101;12705:1;12682:13;:20;;;:24;12674:77;;;;-1:-1:-1;;;12674:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12762:14;12795:9;12791:345;12814:13;:37;;;:44;12810:1;:48;12791:345;;;12926:1;12883:13;:37;;;12921:1;12883:40;;;;;;;;;;;;;;:44;:104;;;;;12947:13;:37;;;12985:1;12947:40;;;;;;;;;;;;;;12931:12;:56;;12883:104;12880:245;;;13018:13;:28;;;13008:38;;;;13108:1;13065:13;:37;;;13103:1;13065:40;;;;;;;;;;;;;:44;;;;;12880:245;12860:3;;12791:345;;;;13164:13;:20;;;13155:6;:29;:61;;13210:6;13155:61;;;13187:13;:20;;;13155:61;13146:70;;13244:1;13235:6;:10;13227:42;;;;;-1:-1:-1;;;13227:42:0;;;;;;;;;;;;-1:-1:-1;;;13227:42:0;;;;;;;;;;;;;;;13325:12;;13312:34;;;-1:-1:-1;;;13312:34:0;;;;13280:12;;-1:-1:-1;;;;;13325:12:0;;13312:32;;:34;;;;;;;;;;;;;;13325:12;13312:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13312:34:0;13302:56;;;-1:-1:-1;;;13302:56:0;;;;-1:-1:-1;;;;;13302:54:0;;;;;;:56;;;;;13312:34;;13302:56;;;;;;;;:54;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13302:56:0;13385:20;;13370:44;;;-1:-1:-1;;;13370:44:0;;-1:-1:-1;;;;;13370:44:0;;;;;;;;;;;;;;;13302:56;;-1:-1:-1;13370:14:0;;;;;;:44;;;;;13302:56;;13370:44;;;;;;;;13385:20;13370:14;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13448:20:0;;;;;:29;;;13425:52;;-1:-1:-1;13488:16:0;;;:10;13370:44;13488:16;;;;;;;:26;;;;;;;;;:42;;;;-1:-1:-1;;;;;;13488:42:0;-1:-1:-1;;;;;13488:42:0;;;;;;;;;;-1:-1:-1;13488:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13448:20;;13488:42;;;;;;;;;;:::i;:::-;-1:-1:-1;13488:42:0;;;;;;;;;;;13575:20;;13546:64;;;13563:10;13546:64;;;;;;;;;;13597:4;;-1:-1:-1;;;;;13546:64:0;;;;;;;;;;12420:1198;;;;;;:::o;4762:1646::-;4956:11;;4940:12;:27;;4932:70;;;;;-1:-1:-1;;;4932:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5036:6;:13;5021:28;;5013:53;;;;;-1:-1:-1;;;5013:53:0;;;;;;;;;;;;-1:-1:-1;;;5013:53:0;;;;;;;;;;;;;;;5092:12;:19;5085:26;;5077:51;;;;;-1:-1:-1;;;5077:51:0;;;;;;;;;;;;-1:-1:-1;;;5077:51:0;;;;;;;;;;;;;;;5171:1;5149:19;:23;5141:71;;;;-1:-1:-1;;;5141:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5225:28;5280:12;;;5256:20;;-1:-1:-1;;;;;5280:12:0;;;;5263;;5256:20;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5256:20:0;:36;:56;;5307:5;5256:56;;;5295:9;5256:56;5225:87;;5354:1;5331:20;:24;5323:73;;;;-1:-1:-1;;;5323:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5450:12;;5437:34;;;-1:-1:-1;;;5437:34:0;;;;5409:15;;-1:-1:-1;;;;;5450:12:0;;5437:32;;:34;;;;;;;;;;;;;;5450:12;5437:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5437:34:0;5506:16;;;-1:-1:-1;;;5506:16:0;;;;5437:34;;-1:-1:-1;5483:20:0;;-1:-1:-1;;;;;5506:14:0;;;;;:16;;;;;5437:34;;5506:16;;;;;;;:14;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5506:16:0;;-1:-1:-1;5535:67:0;5506:16;5582:19;5535:32;:67::i;:::-;5613:76;5646:6;5653:12;5646:20;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5646:20:0;5668;5613:32;:76::i;:::-;5702:19;5724:6;5731:12;5724:20;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5724:20:0;;-1:-1:-1;5724:20:0;;5823:119;5840:19;5861:14;5877:20;5899:15;5916:12;5724:20;5823:16;:119::i;:::-;5955:30;;;;:16;:30;;;;;:44;;;;;;5757:185;;-1:-1:-1;5757:185:0;;-1:-1:-1;5757:185:0;-1:-1:-1;5955:30:0;6058:20;6073:4;6058:14;:20::i;:::-;6012:66;;;;;6112:6;6097:11;:21;;6089:82;;;;-1:-1:-1;;;6089:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6205:16;6190:11;:31;;6182:103;;;;-1:-1:-1;;;6182:103:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6298:102;6335:4;6341:12;6355:11;6368:12;6382:10;6394:5;6298:36;:102::i;:::-;4762:1646;;;;;;;;;;;;;;;:::o;11188:383::-;11252:22;;;;:16;:22;;;;;;:27;-1:-1:-1;11249:65:0;;11296:7;;11249:65;11349:22;;;;:16;:22;;;;;;;-1:-1:-1;;11349:26:0;11324:51;;;;11389:26;-1:-1:-1;11386:120:0;;;11454:16;;;;:10;:16;;;;;;;;11471;:22;;;;;;11454:40;;;;;;;;11432:19;;;;;:62;;;;-1:-1:-1;;;;;;11432:62:0;-1:-1:-1;;;;;11432:62:0;;;;;;-1:-1:-1;11432:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;11432:62:0;;;;;;;;11386:120;11523:16;;;;:10;:16;;;;;;;;11540;:22;;;;;;11523:40;;;;;;;11516:47;;-1:-1:-1;;;;;;11516:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11523:40;11516:47;;;;11523:16;11516:47;:::i;:::-;;;;;;;;;11188:383;;:::o;14639:467::-;14688:13;14718:7;14714:50;;-1:-1:-1;14742:10:0;;;;;;;;;;;;-1:-1:-1;;;14742:10:0;;;;;;14714:50;14783:2;14774:6;14815:69;14822:6;;14815:69;;14845:5;;14870:2;14865:7;;;;14815:69;;;14894:17;14924:3;14914:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14914:14:0;-1:-1:-1;14894:34:0;-1:-1:-1;;;14948:7:0;;14966:103;14973:7;;14966:103;;15030:2;15025;:7;15020:2;:12;15009:25;;14997:4;15002:3;;;;;;;14997:9;;;;;;;;;;;:37;-1:-1:-1;;;;;14997:37:0;;;;;;;;-1:-1:-1;15055:2:0;15049:8;;;;14966:103;;;-1:-1:-1;15093:4:0;14639:467;-1:-1:-1;;;;14639:467:0:o;15114:493::-;15245:42;;;;;;;;;;;-1:-1:-1;;;15245:42:0;;;;15319:13;;15329:2;15319:13;;;15169;15319;;;;;;-1:-1:-1;;;;;15219:14:0;;;15245:42;15169:13;;15319;;;;;;;;;;-1:-1:-1;15319:13:0;15300:32;;-1:-1:-1;;;15343:3:0;15347:1;15343:6;;;;;;;;;;;:12;-1:-1:-1;;;;;15343:12:0;;;;;;;;;-1:-1:-1;;;15366:3:0;15370:1;15366:6;;;;;;;;;;;:12;-1:-1:-1;;;;;15366:12:0;;;;;;;;;15394:6;15389:182;15410:2;15406:1;:6;15389:182;;;15447:8;15484:1;15467:5;15473:1;15477:2;15473:6;15467:13;;;;;;;;;;-1:-1:-1;;;;;15467:18:0;;;;15461:25;;15456:31;;15447:41;;;;;;;;;;;;;;;;15434:3;15440:1;15442;15440:3;15438:1;:5;15434:10;;;;;;;;;;;:54;-1:-1:-1;;;;;15434:54:0;;;;;;;;;15516:8;15536:5;15542:1;15546:2;15542:6;15536:13;;;;;;;15516:43;;15536:13;;;15552:4;15530:27;;15516:43;;;;;;;;;;;;;;15503:3;15509:1;15511;15509:3;15507:1;:5;15503:10;;;;;;;;;;;:56;-1:-1:-1;;;;;15503:56:0;;;;;;;;-1:-1:-1;15414:3:0;;15389:182;;15615:318;15677:13;15729:3;15749:6;15744:152;15765:4;:11;15761:1;:15;15744:152;;;15819:4;15808:15;;:4;15813:1;15808:7;;;;;;;;;;;;-1:-1:-1;;;;;;15808:7:0;:15;;;;:34;;;15838:4;15827:15;;:4;15832:1;15827:7;;;;;;;;;;;;-1:-1:-1;;;;;;15827:7:0;:15;;15808:34;:76;;15877:4;15882:1;15877:7;;;;;;;;;;;;-1:-1:-1;;;;;;15877:7:0;15808:76;;;15858:4;15863:1;15858:7;;;;;;;;;;;;;;;;15852:14;;15869:4;15852:21;15845:29;;15808:76;15798:4;15803:1;15798:7;;;;;;;;;;;:86;-1:-1:-1;;;;;15798:86:0;;;;;;;;-1:-1:-1;15778:3:0;;15744:152;;;-1:-1:-1;15920:4:0;15615:318;-1:-1:-1;;15615:318:0:o;7516:480::-;7633:12;;-1:-1:-1;;;;;7617:28:0;;;7633:12;;7617:28;7614:66;;;7662:7;;7614:66;7736:52;;;-1:-1:-1;;;7736:52:0;;7755:10;7736:52;;;;7775:4;7736:52;;;;;;;;;;;;7712:12;;-1:-1:-1;;;;;7736:18:0;;;;;:52;;;;;;;;;;;;;;;7690:12;7736:18;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7802:49:0;;;-1:-1:-1;;;7802:49:0;;7826:4;7802:49;;;;196:42;7802:49;;;;;;7855:5;;-1:-1:-1;;;;;7802:15:0;;;;;:49;;;;;7736:52;;7802:49;;;;;;;;:15;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7802:49:0;:58;7799:190;;7877:100;;;-1:-1:-1;;;7877:100:0;;196:42;7877:100;;;;-1:-1:-1;;7877:100:0;;;;;;-1:-1:-1;;;;;7877:13:0;;;;;:100;;;;;;;;;;;;;;-1:-1:-1;7877:13:0;:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7799:190:0;7516:480;;;:::o;8004:1564::-;8195:19;8287:12;;8195:19;;;;-1:-1:-1;;;;;8272:27:0;;;8287:12;;8272:27;8269:817;;;8358:302;;;-1:-1:-1;;;8358:302:0;;-1:-1:-1;;;;;8358:302:0;;;;;;;;;;;;;;;;;;;;;;;;8599:4;8358:302;;;;8641:4;8623:15;:22;8358:302;;;;;;196:42;;8358:51;;8417:20;;8358:302;;;;;;;;;;;;;;;8417:20;196:42;8358:302;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8358:302:0;;;;;;;;;;;;;-1:-1:-1;8358:302:0;;-1:-1:-1;8358:302:0;-1:-1:-1;8269:817:0;;;8735:339;;;-1:-1:-1;;;8735:339:0;;-1:-1:-1;;;;;8735:339:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9013:4;8735:339;;;;9055:4;9037:15;:22;8735:339;;;;;;196:42;;8735:48;;:339;;;;;;;;;;;;;;-1:-1:-1;196:42:0;8735:339;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8735:339:0;;;;;;;;;;;;;-1:-1:-1;8735:339:0;;-1:-1:-1;8735:339:0;-1:-1:-1;8269:817:0;9113:19;9099:11;:33;9096:139;;;9149:74;;;-1:-1:-1;;;9149:74:0;;9177:10;9149:74;;;;9189:33;;;9149:74;;;;;;-1:-1:-1;;;;;9149:27:0;;;;;:74;;;;;;;;;;;;;;-1:-1:-1;9149:27:0;:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9096:139:0;9263:20;9248:12;:35;9245:316;;;9318:12;;-1:-1:-1;;;;;9303:27:0;;;9318:12;;9303:27;9300:250;;;9351:65;;9359:10;;9380:35;;;9351:65;;;;;;;;;9380:35;9359:10;9351:65;;;;;;;;;;;;;;;;;;;;;9300:250;;;9457:77;;;-1:-1:-1;;;9457:77:0;;9486:10;9457:77;;;;9498:35;;;9457:77;;;;;;-1:-1:-1;;;;;9457:28:0;;;;;:77;;;;;;;;;;;;;;-1:-1:-1;9457:28:0;:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9300:250:0;8004:1564;;;;;;;;;;:::o;9576:1325::-;9757:36;9817:21;9839:4;9817:27;;;;;;;;;;;;;;;;9796:12;9809:4;9796:18;;;;;;;;;;;;;;;;:48;;;;;;9757:87;;9855:40;9912:21;9934:4;9912:27;;;;;;;;;;;;;;;;9898:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9898:42:0;-1:-1:-1;9954:30:0;;9855:85;;-1:-1:-1;9954:34:0;9951:337;;10049:28;10034:12;:43;10005:23;10029:1;10005:26;;;;;;;;;;;;;;;;;:72;10108:1;10092:185;10115:23;:30;10111:1;:34;10092:185;;;10233:28;10200:23;10228:1;10224;:5;10200:30;;;;;;;;;;;;;;:61;10171:23;10195:1;10171:26;;;;;;;;;;;;;;;;;:90;10147:3;;10092:185;;;;9951:337;10298:14;10356:15;10372:4;10356:21;;;;;;;;;;;;;;;;10329:18;10348:4;10329:24;;;;;;;;;;;;;;;;10315:11;:38;:62;;;;;;10298:79;;10388:26;;:::i;:::-;10417:180;;;;;;;;10427:10;-1:-1:-1;;;;;10417:180:0;;;;;10439:12;10417:180;;;;10453:11;10417:180;;;;10466:12;10417:180;;;;10480:10;10417:180;;;;10492:6;10417:180;;;;10515:12;10528:4;10515:18;;;;;;;;;;;;;;;;10500:12;:33;10417:180;;;;10535:23;10417:180;;;;10569:21;10591:4;10569:27;;;;;;;;;;;;;;;;10560:6;:36;;;;;;10417:180;;10388:209;-1:-1:-1;10608:21:0;10613:4;10388:209;10608:4;:21::i;:::-;-1:-1:-1;;10672:48:0;;;10691:1;10672:48;;;;;;;;;;;;;;;;;;;10714:4;10672:48;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10640:81:0;;;;;;;;;;;;;-1:-1:-1;;;10640:81:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10640:12:0;;;;;10672:48;;10640:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10640:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10640:81:0;;;;;;;;;;-1:-1:-1;10640:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10762:12;10756:4;10744:10;-1:-1:-1;;;;;10737:156:0;;10776:11;10789:12;10803:10;10815:6;10823:9;:18;;;10843:23;10868:9;:24;;;10737:156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9576:1325;;;;;;;;;;:::o;10909:271::-;10979:7;11008:16;;;:10;:16;;;;;;;;11025;:22;;;;;;11008:40;;;;;;;:50;;;;-1:-1:-1;;;;;;11008:50:0;-1:-1:-1;;;;;11008:50:0;;;;;;;;;;-1:-1:-1;11008:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10979:7;;11008:50;;:40;:50;;;;;;;;;;;;:::i;:::-;-1:-1:-1;11008:50:0;;;;;;;;;;;-1:-1:-1;;11094:22:0;;;;:16;:22;;;;;;;;11119:1;11094:26;11069:51;;11139:14;;;;11155:16;;;;;11139:14;;10909:271::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://05cb8c16848065602012eb1d67f99bf9b88dff18e2ae0a0a8c951f15ca520ef0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.