ETH Price: $3,489.50 (-1.46%)

Contract

0x8c9faFfaCb7d161c078d4491d05D77BF18E0C076
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Unstake164208942023-01-16 17:38:111029 days ago1673890691IN
0x8c9faFfa...F18E0C076
0 ETH0.0032815923
Unstake164180072023-01-16 7:58:351030 days ago1673855915IN
0x8c9faFfa...F18E0C076
0 ETH0.0021611615.14715192
Unstake164179782023-01-16 7:52:471030 days ago1673855567IN
0x8c9faFfa...F18E0C076
0 ETH0.0023550416.50599589
Unstake164110082023-01-15 8:27:351031 days ago1673771255IN
0x8c9faFfa...F18E0C076
0 ETH0.0021511815.122899
Unstake164109992023-01-15 8:25:471031 days ago1673771147IN
0x8c9faFfa...F18E0C076
0 ETH0.0025142214.55302083
Unstake164109342023-01-15 8:12:351031 days ago1673770355IN
0x8c9faFfa...F18E0C076
0 ETH0.0021064713.29317156
Unstake164097942023-01-15 4:22:351031 days ago1673756555IN
0x8c9faFfa...F18E0C076
0 ETH0.0024855417.42064682
Unstake164022892023-01-14 3:15:231032 days ago1673666123IN
0x8c9faFfa...F18E0C076
0 ETH0.0040828428.61576523
Unstake163968212023-01-13 8:56:471033 days ago1673600207IN
0x8c9faFfa...F18E0C076
0 ETH0.0022572415.82053875
Unstake163640682023-01-08 19:10:111037 days ago1673205011IN
0x8c9faFfa...F18E0C076
0 ETH0.0032061922.53964891
Unstake163526732023-01-07 4:59:111039 days ago1673067551IN
0x8c9faFfa...F18E0C076
0 ETH0.0003491614.75057217
Unstake163525372023-01-07 4:31:471039 days ago1673065907IN
0x8c9faFfa...F18E0C076
0 ETH0.0017792612.47048451
Unstake163515262023-01-07 1:08:471039 days ago1673053727IN
0x8c9faFfa...F18E0C076
0 ETH0.0022005715.42340093
Unstake162949852022-12-30 3:45:471047 days ago1672371947IN
0x8c9faFfa...F18E0C076
0 ETH0.0004092617.11631532
Unstake162949772022-12-30 3:44:111047 days ago1672371851IN
0x8c9faFfa...F18E0C076
0 ETH0.0003520114.72209108
Remove Tokens162791122022-12-27 22:37:111049 days ago1672180631IN
0x8c9faFfa...F18E0C076
0 ETH0.0016565718.59921611
Unstake161648672022-12-11 23:51:591065 days ago1670802719IN
0x8c9faFfa...F18E0C076
0 ETH0.0023305914.62591564
Unstake161561672022-12-10 18:42:471066 days ago1670697767IN
0x8c9faFfa...F18E0C076
0 ETH0.0022051115.45521587
Unstake161561512022-12-10 18:39:351066 days ago1670697575IN
0x8c9faFfa...F18E0C076
0 ETH0.0026572416.63084012
Unstake161561362022-12-10 18:36:231066 days ago1670697383IN
0x8c9faFfa...F18E0C076
0 ETH0.0023082714.44673844
Unstake161561212022-12-10 18:33:231066 days ago1670697203IN
0x8c9faFfa...F18E0C076
0 ETH0.0026211416.4048943
Unstake161560862022-12-10 18:26:231066 days ago1670696783IN
0x8c9faFfa...F18E0C076
0 ETH0.0024658815.4331866
Unstake161560712022-12-10 18:23:231066 days ago1670696603IN
0x8c9faFfa...F18E0C076
0 ETH0.0026497316.58385505
Unstake161560542022-12-10 18:19:471066 days ago1670696387IN
0x8c9faFfa...F18E0C076
0 ETH0.0021716415.22060965
Unstake161560032022-12-10 18:09:351066 days ago1670695775IN
0x8c9faFfa...F18E0C076
0 ETH0.0025381115.88524866
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SwingStaking

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2022-10-18
*/

//SPDX-License-Identifier: UNLICENSED

pragma solidity 0.8.7;

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address who) external view returns (uint256);
    function allowance(address _owner, address spender) external view returns (uint256);
    function transfer(address to, uint256 value) external returns (bool);
    function approve(address spender, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 value) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}

interface IERC721 {
    event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId);
    event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId);
    event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved);

    function balanceOf(address _owner) external view returns (uint256);
    function ownerOf(uint256 _tokenId) external view returns (address);
    function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes memory data) external payable;
    function safeTransferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function transferFrom(address _from, address _to, uint256 _tokenId) external payable;
    function approve(address _approved, uint256 _tokenId) external payable;
    function setApprovalForAll(address _operator, bool _approved) external;
    function getApproved(uint256 _tokenId) external view returns (address);
    function isApprovedForAll(address _owner, address _operator) external view returns (bool);
}

interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

interface ERC721TokenReceiver {
    function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes memory _data) external returns(bytes4);
}

contract SwingStaking is ERC721TokenReceiver {

    enum StakeType {
        SIMPLE1, SIMPLE2, STAKE2MINT
    }

    struct StakeSettings {
        StakeInfo info;
        Stake[] stakings;
    }

    struct StakeInfo {
        StakeType stakeType;
        bool enabled;
        uint256 timeBetweenRewards;
        uint256 rewardPercentage;
        uint256 minimumStakeTime;
        uint256 minimumDeposit;
        uint256 earlyWithdrawalPenalty;
    }

    struct Stake
    {
        address holder;
        StakeType stakeType;
        uint256 tokenAmount;
        uint256 stakeTime;
        uint256 lastClaimTime;
        uint256 unstakeTime;
    }

    struct StakedTokenInfo
    {
        StakeType stakeType;
        uint256 tokenAmount;
        uint256 stakeTime;
        uint256 owed;
        uint256 lastClaimed;
        uint256 timeUntilNextReward;
        bool hasPenalty;
    }

    struct Map 
    {
        StakeType stakeType;
        uint256 index;
    }

    address public owner;
    uint256 public totalStaked;

    uint256 private accuracy = 9;
    uint256 private nonce;
    mapping (address => Map[]) private ownerStakings;
    mapping (StakeType => StakeSettings) private stakes;
    uint256[] private nftTokenIds;
    
    IERC20 private _token;
    IERC721 private _nftReward;

    modifier onlyOwner() {
        require(msg.sender == owner, "can only be called by the contract owner");
        _;
    }

    modifier whenEnabled(StakeType t) {
        require(stakes[t].info.enabled || msg.sender == owner, "staking not enabled");
        _;
    }

    constructor() {
        owner = msg.sender;

        if (block.chainid == 1) {
            _token = IERC20(0xBeC5938FD565CbEc72107eE39CdE1bc78049537d);
            _nftReward = IERC721(0x67536f6E4412663E2D3Ee7Ffc7b9F79440F8e42A);
        } else if (block.chainid == 3 || block.chainid == 4  || block.chainid == 97 || block.chainid == 5) {
            _token = IERC20(0x2891372D5c2727aC939BF111C45333735d537f09);
            _nftReward = IERC721(0xb48408795A879d7e64A356bB71a2a22adE7a75eF);
        } else {
            revert("Unknown Chain ID");
        }

        stakes[StakeType.SIMPLE1].info.enabled = true;
        stakes[StakeType.SIMPLE1].info.timeBetweenRewards = 24 hours;
        stakes[StakeType.SIMPLE1].info.rewardPercentage = (12 * 10 ** accuracy) / uint256(365);
        stakes[StakeType.SIMPLE1].info.minimumStakeTime = 30 days;
        stakes[StakeType.SIMPLE1].info.minimumDeposit = 0;
        stakes[StakeType.SIMPLE1].info.earlyWithdrawalPenalty = 25;

        stakes[StakeType.SIMPLE2].info.enabled = true;
        stakes[StakeType.SIMPLE2].info.timeBetweenRewards = 24 hours;
        stakes[StakeType.SIMPLE2].info.rewardPercentage = (14 * 10 ** accuracy) / uint256(365);
        stakes[StakeType.SIMPLE2].info.minimumStakeTime = 90 days;
        stakes[StakeType.SIMPLE2].info.minimumDeposit = 0;
        stakes[StakeType.SIMPLE2].info.earlyWithdrawalPenalty = 25;

        stakes[StakeType.STAKE2MINT].info.enabled = true;
        stakes[StakeType.STAKE2MINT].info.timeBetweenRewards = 24 hours;
        stakes[StakeType.STAKE2MINT].info.rewardPercentage = (18 * 10 ** accuracy) / uint256(365);
        stakes[StakeType.STAKE2MINT].info.minimumStakeTime = 180 days;
        stakes[StakeType.STAKE2MINT].info.minimumDeposit = 2_000_000 * 10 ** 18;
        stakes[StakeType.STAKE2MINT].info.earlyWithdrawalPenalty = 25;
    }

    function info() external view returns (
        StakedTokenInfo[] memory stakedTokens,
        address tokenAddress,
        uint256 tokenBalance,
        uint256 tokenApproved,
        uint256 amountStaked,
        StakeInfo memory simple1,
        StakeInfo memory simple2,
        StakeInfo memory stake2mint
    ) {
        uint256 numStaked = ownerStakings[msg.sender].length;
        stakedTokens = new StakedTokenInfo[](numStaked);
        for (uint256 i = 0; i < numStaked; i ++) {

            Map storage m = ownerStakings[msg.sender][i];
            Stake storage s = stakes[m.stakeType].stakings[m.index];

            (uint256 owed,) = rewardsOwed(m.stakeType, s);
            stakedTokens[i] = StakedTokenInfo(
                m.stakeType,
                s.tokenAmount,
                s.stakeTime,
                owed,
                s.lastClaimTime,
                timeUntilReward(m.stakeType, s),
                hasPenalty(s)
             );
        }

        amountStaked = totalStaked;
        tokenAddress = address(_token);
        tokenBalance = _token.balanceOf(msg.sender);
        tokenApproved = _token.allowance(msg.sender, address(this));

        simple1 = stakes[StakeType.SIMPLE1].info;
        simple2 = stakes[StakeType.SIMPLE2].info;
        stake2mint = stakes[StakeType.STAKE2MINT].info;
    }

    function stake(StakeType stakeType, uint256 tokenAmount) external whenEnabled(stakeType) {
        require(tokenAmount >= stakes[stakeType].info.minimumDeposit, "Does not meet minimum requirement");
        require(_token.allowance(msg.sender, address(this)) >= tokenAmount, "Not enough approved");
        _token.transferFrom(msg.sender, address(this), tokenAmount);
        Stake memory s = Stake(msg.sender, stakeType, tokenAmount, block.timestamp, block.timestamp, 0);
        ownerStakings[msg.sender].push(Map(stakeType, stakes[stakeType].stakings.length));
        stakes[stakeType].stakings.push(s);
        totalStaked += tokenAmount;
    }

    function unstake(uint256 ownerIndex) external {

        Map storage m = ownerStakings[msg.sender][ownerIndex];
        Stake storage s = stakes[m.stakeType].stakings[m.index];

        require(s.unstakeTime == 0, "This NFT has already been unstaked");
        require(s.holder == msg.sender || msg.sender == owner, "You do not own this token");

        if (stakes[m.stakeType].info.enabled) {
            if (hasPenalty(stakes[m.stakeType].stakings[m.index])) {  
                (uint256 owed, uint256 time) = rewardsOwed(m.stakeType, stakes[m.stakeType].stakings[m.index]);

                uint256 penalty = (owed * stakes[m.stakeType].info.earlyWithdrawalPenalty) / 100;
                owed = owed - penalty;

                if (owed > 0) {
                    _token.transfer(s.holder, owed);
                    stakes[m.stakeType].stakings[m.index].lastClaimTime = stakes[m.stakeType].stakings[m.index].lastClaimTime + time;
                }
            } else  {
                if (m.stakeType == StakeType.STAKE2MINT && nftTokenIds.length > 0) {
                    uint256 roll = requestRandomWords() % nftTokenIds.length;
                    _nftReward.safeTransferFrom(address(this), s.holder, nftTokenIds[roll]);
                    if (nftTokenIds.length > 1) {
                        nftTokenIds[roll] = nftTokenIds[nftTokenIds.length-1];
                    }
                    nftTokenIds.pop();
                }

                (uint256 owed, uint256 time) = rewardsOwed(m.stakeType, stakes[m.stakeType].stakings[m.index]);
                if (owed > 0) {
                    stakes[m.stakeType].stakings[m.index].lastClaimTime = stakes[m.stakeType].stakings[m.index].lastClaimTime + time;
                    _token.transfer(s.holder, owed);
                }
            }
        }

        _token.transfer(s.holder, s.tokenAmount);
        s.unstakeTime = block.timestamp;
        removeOwnerStaking(s.holder, ownerIndex);
        totalStaked -= s.tokenAmount;
    }
 

    // Admin Methods

    function removeEth() external onlyOwner {
        uint256 balance = address(this).balance;
        payable(owner).transfer(balance);
    }
    
    function removeTokens(address token) external onlyOwner {
        uint256 balance = IERC20(token).balanceOf(address(this));

        if (token == address(_token)) {
            balance = balance - totalStaked;
        }

        IERC20(token).transfer(owner, balance);
    }

    function removeNft(address nftContract, uint256 tokenId) external onlyOwner {
        require (nftContract != address(_nftReward), "You cannot remove the reward nfts");
        _nftReward.safeTransferFrom(address(this), owner, tokenId);
    }

    function forceUnstake(address who) external onlyOwner {
        for (uint256 i = 0; i < ownerStakings[who].length; i++) {
            Map storage m = ownerStakings[who][i];
            Stake storage s = stakes[m.stakeType].stakings[m.index];
            _token.transfer(s.holder, s.tokenAmount);
            totalStaked -= s.tokenAmount;
            s.unstakeTime = block.timestamp;
        }
        delete ownerStakings[who];
    }

    function setOwner(address who) external onlyOwner {
        require(who != address(0), "cannot be zero address");
        owner = who;
    }

    function setEnabled(StakeType stakeType, bool on) external onlyOwner {
        stakes[stakeType].info.enabled = on;
    }

    function setStakeParameters(StakeType stakeType, uint256 _timeBetweenRewards, uint256 _rewardPercentage, uint256 _minimumStakeTime, uint256 _minimumDeposit, uint256 _earlyWithdrawalPenalty) external onlyOwner {
        stakes[stakeType].info.timeBetweenRewards = _timeBetweenRewards;
        stakes[stakeType].info.rewardPercentage = _rewardPercentage;
        stakes[stakeType].info.minimumStakeTime = _minimumStakeTime;
        stakes[stakeType].info.minimumDeposit = _minimumDeposit;
        stakes[stakeType].info.earlyWithdrawalPenalty = _earlyWithdrawalPenalty;
    }

    function setNewRewardNft(address nftContract) external onlyOwner {
        _nftReward = IERC721(nftContract);
        delete nftTokenIds;
    }

    function addNftReward(uint256[] memory tokenIds) external onlyOwner {
        for (uint256 i = 0; i < tokenIds.length; i++) {
            _nftReward.safeTransferFrom(msg.sender, address(this), tokenIds[i]);
            nftTokenIds.push(tokenIds[i]);
        }
    }


    // Private Methods

    function removeOwnerStaking(address holder, uint256 index) private {
        if (ownerStakings[holder].length > 1) {
            ownerStakings[holder][index] = ownerStakings[holder][ownerStakings[holder].length-1];
        }
        ownerStakings[holder].pop();
    }

    function timeUntilReward(StakeType t, Stake storage stakedToken) private view returns (uint256) {

        if (block.timestamp - stakedToken.stakeTime < stakes[t].info.minimumStakeTime) {
            return stakes[t].info.minimumStakeTime - (block.timestamp - stakedToken.stakeTime);
        }

        uint256 lastClaimTime = stakedToken.stakeTime;
        if (stakedToken.lastClaimTime > lastClaimTime) {
            lastClaimTime = stakedToken.lastClaimTime;
        }

        if (block.timestamp - lastClaimTime >= stakes[t].info.timeBetweenRewards) {
            return stakes[t].info.timeBetweenRewards - ((block.timestamp - lastClaimTime) % stakes[t].info.timeBetweenRewards);
        }

        return stakes[t].info.timeBetweenRewards - (block.timestamp - lastClaimTime);
    }

    function rewardsOwed(StakeType t, Stake storage stakedToken) private view returns (uint256, uint256) {

        uint256 lastClaimTime = stakedToken.stakeTime;
        if (stakedToken.lastClaimTime > lastClaimTime) {
            lastClaimTime = stakedToken.lastClaimTime;
        }

        if (block.timestamp - lastClaimTime >= stakes[t].info.timeBetweenRewards) {
            uint256 multiplesOwed = (block.timestamp - lastClaimTime) / stakes[t].info.timeBetweenRewards;
            return (
                (stakedToken.tokenAmount * multiplesOwed * stakes[t].info.rewardPercentage) / (100 * 10 ** accuracy),
                multiplesOwed * stakes[t].info.timeBetweenRewards
            );
        }
        
        return (0, 0);
    }

    function hasPenalty(Stake storage stakedToken) private view returns (bool) {
        return block.timestamp < stakedToken.stakeTime + stakes[stakedToken.stakeType].info.minimumStakeTime;
    }

    function requestRandomWords() private returns (uint256) {
        nonce += 1;
        return uint(keccak256(abi.encodePacked(nonce, msg.sender, blockhash(block.number - 1))));
    }

    function onERC721Received(address, address, uint256, bytes memory) public pure override returns(bytes4) {
        return bytes4(keccak256("onERC721Received(address,address,uint256,bytes)"));
    }

}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"addNftReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"forceUnstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"info","outputs":[{"components":[{"internalType":"enum SwingStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"uint256","name":"stakeTime","type":"uint256"},{"internalType":"uint256","name":"owed","type":"uint256"},{"internalType":"uint256","name":"lastClaimed","type":"uint256"},{"internalType":"uint256","name":"timeUntilNextReward","type":"uint256"},{"internalType":"bool","name":"hasPenalty","type":"bool"}],"internalType":"struct SwingStaking.StakedTokenInfo[]","name":"stakedTokens","type":"tuple[]"},{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenBalance","type":"uint256"},{"internalType":"uint256","name":"tokenApproved","type":"uint256"},{"internalType":"uint256","name":"amountStaked","type":"uint256"},{"components":[{"internalType":"enum SwingStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"timeBetweenRewards","type":"uint256"},{"internalType":"uint256","name":"rewardPercentage","type":"uint256"},{"internalType":"uint256","name":"minimumStakeTime","type":"uint256"},{"internalType":"uint256","name":"minimumDeposit","type":"uint256"},{"internalType":"uint256","name":"earlyWithdrawalPenalty","type":"uint256"}],"internalType":"struct SwingStaking.StakeInfo","name":"simple1","type":"tuple"},{"components":[{"internalType":"enum SwingStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"timeBetweenRewards","type":"uint256"},{"internalType":"uint256","name":"rewardPercentage","type":"uint256"},{"internalType":"uint256","name":"minimumStakeTime","type":"uint256"},{"internalType":"uint256","name":"minimumDeposit","type":"uint256"},{"internalType":"uint256","name":"earlyWithdrawalPenalty","type":"uint256"}],"internalType":"struct SwingStaking.StakeInfo","name":"simple2","type":"tuple"},{"components":[{"internalType":"enum SwingStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint256","name":"timeBetweenRewards","type":"uint256"},{"internalType":"uint256","name":"rewardPercentage","type":"uint256"},{"internalType":"uint256","name":"minimumStakeTime","type":"uint256"},{"internalType":"uint256","name":"minimumDeposit","type":"uint256"},{"internalType":"uint256","name":"earlyWithdrawalPenalty","type":"uint256"}],"internalType":"struct SwingStaking.StakeInfo","name":"stake2mint","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"onERC721Received","outputs":[{"internalType":"bytes4","name":"","type":"bytes4"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftContract","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"removeNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"removeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SwingStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"bool","name":"on","type":"bool"}],"name":"setEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"nftContract","type":"address"}],"name":"setNewRewardNft","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"setOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SwingStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"uint256","name":"_timeBetweenRewards","type":"uint256"},{"internalType":"uint256","name":"_rewardPercentage","type":"uint256"},{"internalType":"uint256","name":"_minimumStakeTime","type":"uint256"},{"internalType":"uint256","name":"_minimumDeposit","type":"uint256"},{"internalType":"uint256","name":"_earlyWithdrawalPenalty","type":"uint256"}],"name":"setStakeParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum SwingStaking.StakeType","name":"stakeType","type":"uint8"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"ownerIndex","type":"uint256"}],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260096002553480156200001657600080fd5b50600080546001600160a01b0319163317905546600114156200008157600780546001600160a01b031990811673bec5938fd565cbec72107ee39cde1bc78049537d17909155600880549091167367536f6e4412663e2d3ee7ffc7b9f79440f8e42a1790556200013c565b4660031480620000915750466004145b806200009d5750466061145b80620000a95750466005145b15620000fd57600780546001600160a01b0319908116732891372d5c2727ac939bf111c45333735d537f09179091556008805490911673b48408795a879d7e64a356bb71a2a22ade7a75ef1790556200013c565b60405162461bcd60e51b815260206004820152601060248201526f155b9adb9bdddb8810da185a5b88125160821b604482015260640160405180910390fd5b6000805260056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc805461ff001916610100179055620151807f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bd5560025461016d90620001ad90600a62000514565b620001ba90600c620005df565b620001c69190620004a8565b60056020527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746be5562278d007f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bf5560007f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746c081905560197f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746c155600190527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017b805461ff001916610100179055620151807f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017c5560025461016d90620002c990600a62000514565b620002d690600e620005df565b620002e29190620004a8565b60056020527f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017d556276a7007f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017e5560007f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd81017f81905560197f1471eb6eb2c5e789fc3de43f8ce62938c7d1836ec861730447e2ada8fd810180556002908190527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733a805461ff001916610100179055620151807f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733b555461016d90620003e590600a62000514565b620003f2906012620005df565b620003fe9190620004a8565b600260005260056020527f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733c5562ed4e007f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733d556a01a784379d99db420000007f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733e5560197f89832631fb3c3307a103ba2c84ab569c64d6182a18893dcd163f0f1c2090733f5562000617565b600082620004c657634e487b7160e01b600052601260045260246000fd5b500490565b600181815b808511156200050c578160001904821115620004f057620004f062000601565b80851615620004fe57918102915b93841c9390800290620004d0565b509250929050565b600062000522838362000529565b9392505050565b6000826200053a57506001620005d9565b816200054957506000620005d9565b81600181146200056257600281146200056d576200058d565b6001915050620005d9565b60ff84111562000581576200058162000601565b50506001821b620005d9565b5060208310610133831016604e8410600b8410161715620005b2575081810a620005d9565b620005be8383620004cb565b8060001904821115620005d557620005d562000601565b0290505b92915050565b6000816000190483118215151615620005fc57620005fc62000601565b500290565b634e487b7160e01b600052601160045260246000fd5b6129f480620006276000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80634f5dd39e11610097578063dd752e5511610066578063dd752e5514610229578063ef0727631461023c578063fc50baf51461024f578063fc82a5ce1461026257600080fd5b80634f5dd39e146101c1578063549d6699146101d4578063817b1cd2146101e75780638da5cb5b146101fe57600080fd5b80632e17de78116100d35780632e17de781461016c578063370158ea1461017f5780633a1397b61461019b57806344f26d89146101ae57600080fd5b806313af4035146100fa578063150b7a021461010f5780631f4a6d3214610164575b600080fd5b61010d610108366004612319565b610275565b005b61014661011d36600461233b565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b61010d610319565b61010d61017a36600461258c565b610382565b610187610b95565b60405161015b989796959493929190612651565b61010d6101a9366004612319565b61109e565b61010d6101bc366004612319565b6110f2565b61010d6101cf366004612425565b6112c5565b61010d6101e23660046124ef565b6113c5565b6101f060015481565b60405190815260200161015b565b600054610211906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b61010d610237366004612526565b611441565b61010d61024a366004612542565b6118c2565b61010d61025d366004612319565b611a30565b61010d6102703660046123fb565b611b88565b6000546001600160a01b031633146102a85760405162461bcd60e51b815260040161029f90612737565b60405180910390fd5b6001600160a01b0381166102f75760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b604482015260640161029f565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103435760405162461bcd60e51b815260040161029f90612737565b6000805460405147926001600160a01b039092169183156108fc02918491818181858888f1935050505015801561037e573d6000803e3d6000fd5b5050565b3360009081526004602052604081208054839081106103a3576103a3612984565b6000918252602082206002918202018054909350600591839160ff16908111156103cf576103cf612958565b60028111156103e0576103e0612958565b815260200190815260200160002060060182600101548154811061040657610406612984565b9060005260206000209060050201905080600401546000146104755760405162461bcd60e51b815260206004820152602260248201527f54686973204e46542068617320616c7265616479206265656e20756e7374616b604482015261195960f21b606482015260840161029f565b80546001600160a01b031633148061049757506000546001600160a01b031633145b6104e35760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e00000000000000604482015260640161029f565b815460059060009060ff1660028111156104ff576104ff612958565b600281111561051057610510612958565b8152602081019190915260400160002054610100900460ff1615610acc5781546105989060059060009060ff16600281111561054e5761054e612958565b600281111561055f5761055f612958565b815260200190815260200160002060060183600101548154811061058557610585612984565b9060005260206000209060050201611c89565b156107e7578154600090819061060a9060ff166005838260028111156105c0576105c0612958565b60028111156105d1576105d1612958565b81526020019081526020016000206006018660010154815481106105f7576105f7612984565b9060005260206000209060050201611ceb565b85549193509150600090606490600590839060ff16600281111561063057610630612958565b600281111561064157610641612958565b815260208101919091526040016000206005015461065f90856128c7565b61066991906127c8565b905061067581846128e6565b925082156107df57600754845460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810186905291169063a9059cbb90604401602060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070491906124d2565b508454829060059060009060ff16600281111561072357610723612958565b600281111561073457610734612958565b815260200190815260200160002060060186600101548154811061075a5761075a612984565b90600052602060002090600502016003015461077691906127b0565b855460059060009060ff16600281111561079257610792612958565b60028111156107a3576107a3612958565b81526020019081526020016000206006018660010154815481106107c9576107c9612984565b9060005260206000209060050201600301819055505b505050610acc565b6002825460ff1660028111156107ff576107ff612958565b14801561080d575060065415155b1561093a57600654600090610820611e81565b61082a9190612918565b6008548354600680549394506001600160a01b03928316936342842e0e9330931691908690811061085d5761085d612984565b90600052602060002001546040518463ffffffff1660e01b81526004016108869392919061262d565b600060405180830381600087803b1580156108a057600080fd5b505af11580156108b4573d6000803e3d6000fd5b505050506001600680549050111561091157600680546108d6906001906128e6565b815481106108e6576108e6612984565b90600052602060002001546006828154811061090457610904612984565b6000918252602090912001555b60068054806109225761092261296e565b60019003818190600052602060002001600090559055505b8154600090819061095d9060ff166005838260028111156105c0576105c0612958565b90925090508115610ac9578354819060059060009060ff16600281111561098657610986612958565b600281111561099757610997612958565b81526020019081526020016000206006018560010154815481106109bd576109bd612984565b9060005260206000209060050201600301546109d991906127b0565b845460059060009060ff1660028111156109f5576109f5612958565b6002811115610a0657610a06612958565b8152602001908152602001600020600601856001015481548110610a2c57610a2c612984565b6000918252602090912060059091020160030155600754835460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb90604401602060405180830381600087803b158015610a8f57600080fd5b505af1158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac791906124d2565b505b50505b6007548154600183015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b158015610b2157600080fd5b505af1158015610b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5991906124d2565b504260048201558054610b75906001600160a01b031684611efe565b806001015460016000828254610b8b91906128e6565b9091555050505050565b6060600080600080610ba5612236565b610bad612236565b610bb5612236565b336000908152600460205260409020548067ffffffffffffffff811115610bde57610bde61299a565b604051908082528060200260200182016040528015610c5257816020015b610c3f6040805160e08101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b815260200190600190039081610bfc5790505b50985060005b81811015610dae57336000908152600460205260408120805483908110610c8157610c81612984565b6000918252602082206002918202018054909350600591839160ff1690811115610cad57610cad612958565b6002811115610cbe57610cbe612958565b8152602001908152602001600020600601826001015481548110610ce457610ce4612984565b60009182526020822084546005909202019250610d049060ff1683611ceb565b506040805160e08101909152845491925090819060ff166002811115610d2c57610d2c612958565b815260018401546020820152600284015460408201526060810183905260038401546080820152845460a090910190610d689060ff168561202f565b8152602001610d7684611c89565b15158152508d8581518110610d8d57610d8d612984565b60200260200101819052505050508080610da6906128fd565b915050610c58565b506001546007546040516370a0823160e01b81523360048201526001600160a01b03909116995090955088906370a082319060240160206040518083038186803b158015610dfb57600080fd5b505afa158015610e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3391906125a5565b600754604051636eb1769f60e11b81523360048201523060248201529198506001600160a01b03169063dd62ed3e9060440160206040518083038186803b158015610e7d57600080fd5b505afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb591906125a5565b6000805260056020526040805160e081019091527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc80549298509091829060ff166002811115610f0757610f07612958565b6002811115610f1857610f18612958565b81528154610100900460ff161515602082015260018083015460408301526002830154606083015260038301546080830152600483015460a083015260059283015460c09092019190915291955090600090815260208101919091526040908101600020815160e081019092528054829060ff166002811115610f9d57610f9d612958565b6002811115610fae57610fae612958565b81528154610100900460ff161515602082015260018201546040820152600280830154606083015260038301546080830152600483015460a083015260059283015460c09092019190915291945090600090815260208101919091526040908101600020815160e081019092528054829060ff16600281111561103357611033612958565b600281111561104457611044612958565b81528154610100900460ff1615156020820152600182015460408201526002820154606082015260038201546080820152600482015460a082015260059091015460c0909101529899979896979596949593949293915050565b6000546001600160a01b031633146110c85760405162461bcd60e51b815260040161029f90612737565b600880546001600160a01b0319166001600160a01b0383161790556110ef60066000612276565b50565b6000546001600160a01b0316331461111c5760405162461bcd60e51b815260040161029f90612737565b60005b6001600160a01b0382166000908152600460205260409020548110156112a3576001600160a01b038216600090815260046020526040812080548390811061116957611169612984565b6000918252602082206002918202018054909350600591839160ff169081111561119557611195612958565b60028111156111a6576111a6612958565b81526020019081526020016000206006018260010154815481106111cc576111cc612984565b600091825260209091206007546005909202018054600182015460405163a9059cbb60e01b81526001600160a01b03928316600482015260248101919091529193509091169063a9059cbb90604401602060405180830381600087803b15801561123557600080fd5b505af1158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d91906124d2565b5080600101546001600082825461128491906128e6565b909155505042600490910155508061129b816128fd565b91505061111f565b506001600160a01b03811660009081526004602052604081206110ef91612294565b6000546001600160a01b031633146112ef5760405162461bcd60e51b815260040161029f90612737565b60005b815181101561037e5760085482516001600160a01b03909116906342842e0e903390309086908690811061132857611328612984565b60200260200101516040518463ffffffff1660e01b815260040161134e9392919061262d565b600060405180830381600087803b15801561136857600080fd5b505af115801561137c573d6000803e3d6000fd5b50505050600682828151811061139457611394612984565b60209081029190910181015182546001810184556000938452919092200155806113bd816128fd565b9150506112f2565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260040161029f90612737565b806005600084600281111561140657611406612958565b600281111561141757611417612958565b8152602081019190915260400160002080549115156101000261ff00199092169190911790555050565b816005600082600281111561145857611458612958565b600281111561146957611469612958565b8152602081019190915260400160002054610100900460ff168061149757506000546001600160a01b031633145b6114d95760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b604482015260640161029f565b600560008460028111156114ef576114ef612958565b600281111561150057611500612958565b81526020019081526020016000206000016004015482101561156e5760405162461bcd60e51b815260206004820152602160248201527f446f6573206e6f74206d656574206d696e696d756d20726571756972656d656e6044820152601d60fa1b606482015260840161029f565b600754604051636eb1769f60e11b815233600482015230602482015283916001600160a01b03169063dd62ed3e9060440160206040518083038186803b1580156115b757600080fd5b505afa1580156115cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ef91906125a5565b10156116335760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da08185c1c1c9bdd9959606a1b604482015260640161029f565b6007546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906116679033903090879060040161262d565b602060405180830381600087803b15801561168157600080fd5b505af1158015611695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b991906124d2565b5060006040518060c00160405280336001600160a01b031681526020018560028111156116e8576116e8612958565b81526020018481526020014281526020014281526020016000815250905060046000336001600160a01b03166001600160a01b03168152602001908152602001600020604051806040016040528086600281111561174857611748612958565b81526020016005600088600281111561176357611763612958565b600281111561177457611774612958565b81526020808201929092526040016000908120600601549092528354600181810186559483529120825160029283029091018054939490939192849260ff1916919084908111156117c7576117c7612958565b0217905550602082015181600101555050600560008560028111156117ee576117ee612958565b60028111156117ff576117ff612958565b81526020808201929092526040016000908120600601805460018101825590825290829020835160059092020180546001600160a01b039092166001600160a01b03198316811782559284015184939192909183916001600160a81b03191617600160a01b83600281111561187657611876612958565b021790555060408201518160010155606082015181600201556080820151816003015560a08201518160040155505082600160008282546118b791906127b0565b909155505050505050565b6000546001600160a01b031633146118ec5760405162461bcd60e51b815260040161029f90612737565b846005600088600281111561190357611903612958565b600281111561191457611914612958565b815260200190815260200160002060000160010181905550836005600088600281111561194357611943612958565b600281111561195457611954612958565b815260200190815260200160002060000160020181905550826005600088600281111561198357611983612958565b600281111561199457611994612958565b81526020019081526020016000206000016003018190555081600560008860028111156119c3576119c3612958565b60028111156119d4576119d4612958565b8152602001908152602001600020600001600401819055508060056000886002811115611a0357611a03612958565b6002811115611a1457611a14612958565b8152602081019190915260400160002060050155505050505050565b6000546001600160a01b03163314611a5a5760405162461bcd60e51b815260040161029f90612737565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015611a9c57600080fd5b505afa158015611ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad491906125a5565b6007549091506001600160a01b0383811691161415611afd57600154611afa90826128e6565b90505b60005460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b158015611b4b57600080fd5b505af1158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8391906124d2565b505050565b6000546001600160a01b03163314611bb25760405162461bcd60e51b815260040161029f90612737565b6008546001600160a01b0383811691161415611c1a5760405162461bcd60e51b815260206004820152602160248201527f596f752063616e6e6f742072656d6f76652074686520726577617264206e66746044820152607360f81b606482015260840161029f565b600854600054604051632142170760e11b81526001600160a01b03928316926342842e0e92611c5392309290911690869060040161262d565b600060405180830381600087803b158015611c6d57600080fd5b505af1158015611c81573d6000803e3d6000fd5b505050505050565b80546000906005908290600160a01b900460ff166002811115611cae57611cae612958565b6002811115611cbf57611cbf612958565b8152602001908152602001600020600001600301548260020154611ce391906127b0565b421092915050565b6000806000836002015490508084600301541115611d0a575060038301545b60056000866002811115611d2057611d20612958565b6002811115611d3157611d31612958565b8152602081019190915260400160002060010154611d4f82426128e6565b10611e7157600060056000876002811115611d6c57611d6c612958565b6002811115611d7d57611d7d612958565b8152602081019190915260400160002060010154611d9b83426128e6565b611da591906127c8565b9050600254600a611db6919061281f565b611dc19060646128c7565b60056000886002811115611dd757611dd7612958565b6002811115611de857611de8612958565b815260200190815260200160002060000160020154828760010154611e0d91906128c7565b611e1791906128c7565b611e2191906127c8565b60056000886002811115611e3757611e37612958565b6002811115611e4857611e48612958565b8152602081019190915260400160002060010154611e6690836128c7565b935093505050611e7a565b60008092509250505b9250929050565b6000600160036000828254611e9691906127b0565b909155505060035433611eaa6001436128e6565b40604051602001611ee09392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012060001c905090565b6001600160a01b03821660009081526004602052604090205460011015611fe1576001600160a01b03821660009081526004602052604090208054611f45906001906128e6565b81548110611f5557611f55612984565b906000526020600020906002020160046000846001600160a01b03166001600160a01b031681526020019081526020016000208281548110611f9957611f99612984565b60009182526020909120825460029283029091018054909260ff90921691839160ff1916906001908490811115611fd257611fd2612958565b02179055506001918201549101555b6001600160a01b03821660009081526004602052604090208054806120085761200861296e565b600082815260208120600260001990930192830201805460ff191681556001015590555050565b60006005600084600281111561204757612047612958565b600281111561205857612058612958565b8152602081019190915260400160002060030154600283015461207b90426128e6565b10156120dd57600282015461209090426128e6565b600560008560028111156120a6576120a6612958565b60028111156120b7576120b7612958565b8152602001908152602001600020600001600301546120d691906128e6565b9050612230565b600282015460038301548110156120f5575060038201545b6005600085600281111561210b5761210b612958565b600281111561211c5761211c612958565b815260208101919091526040016000206001015461213a82426128e6565b106121dc576005600085600281111561215557612155612958565b600281111561216657612166612958565b815260208101919091526040016000206001015461218482426128e6565b61218e9190612918565b600560008660028111156121a4576121a4612958565b60028111156121b5576121b5612958565b8152602001908152602001600020600001600101546121d491906128e6565b915050612230565b6121e681426128e6565b600560008660028111156121fc576121fc612958565b600281111561220d5761220d612958565b81526020019081526020016000206000016001015461222c91906128e6565b9150505b92915050565b6040805160e08101909152806000815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255906000526020600020908101906110ef91906122b5565b50805460008255600202906000526020600020908101906110ef91906122ce565b5b808211156122ca57600081556001016122b6565b5090565b5b808211156122ca57805460ff19168155600060018201556002016122cf565b80356001600160a01b038116811461230557600080fd5b919050565b80356003811061230557600080fd5b60006020828403121561232b57600080fd5b612334826122ee565b9392505050565b6000806000806080858703121561235157600080fd5b61235a856122ee565b935060206123698187016122ee565b935060408601359250606086013567ffffffffffffffff8082111561238d57600080fd5b818801915088601f8301126123a157600080fd5b8135818111156123b3576123b361299a565b6123c5601f8201601f1916850161277f565b915080825289848285010111156123db57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561240e57600080fd5b612417836122ee565b946020939093013593505050565b6000602080838503121561243857600080fd5b823567ffffffffffffffff8082111561245057600080fd5b818501915085601f83011261246457600080fd5b8135818111156124765761247661299a565b8060051b915061248784830161277f565b8181528481019084860184860187018a10156124a257600080fd5b600095505b838610156124c55780358352600195909501949186019186016124a7565b5098975050505050505050565b6000602082840312156124e457600080fd5b8151612334816129b0565b6000806040838503121561250257600080fd5b61250b8361230a565b9150602083013561251b816129b0565b809150509250929050565b6000806040838503121561253957600080fd5b6124178361230a565b60008060008060008060c0878903121561255b57600080fd5b6125648761230a565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b60006020828403121561259e57600080fd5b5035919050565b6000602082840312156125b757600080fd5b5051919050565b600381106125dc57634e487b7160e01b600052602160045260246000fd5b9052565b6125eb8282516125be565b60208101511515602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c08301525050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6103408082528951908201819052600090610360830190602090818d01845b828110156126d35781516126858682516125be565b808501518686015260408082015190870152606080820151908701526080808201519087015260a0808201519087015260c09081015115159086015260e09094019390830190600101612670565b5050508192506126ed8185018c6001600160a01b03169052565b505087604083015286606083015285608083015261270e60a08301866125e0565b61271c6101808301856125e0565b61272a6102608301846125e0565b9998505050505050505050565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156127a8576127a861299a565b604052919050565b600082198211156127c3576127c361292c565b500190565b6000826127d7576127d7612942565b500490565b600181815b808511156128175781600019048211156127fd576127fd61292c565b8085161561280a57918102915b93841c93908002906127e1565b509250929050565b6000612334838360008261283557506001612230565b8161284257506000612230565b816001811461285857600281146128625761287e565b6001915050612230565b60ff8411156128735761287361292c565b50506001821b612230565b5060208310610133831016604e8410600b84101617156128a1575081810a612230565b6128ab83836127dc565b80600019048211156128bf576128bf61292c565b029392505050565b60008160001904831182151516156128e1576128e161292c565b500290565b6000828210156128f8576128f861292c565b500390565b60006000198214156129115761291161292c565b5060010190565b60008261292757612927612942565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146110ef57600080fdfea2646970667358221220610529a5f3f2c390cefe0ade28a6957e277a2e02edaae2a72cf896fe66e9772964736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80634f5dd39e11610097578063dd752e5511610066578063dd752e5514610229578063ef0727631461023c578063fc50baf51461024f578063fc82a5ce1461026257600080fd5b80634f5dd39e146101c1578063549d6699146101d4578063817b1cd2146101e75780638da5cb5b146101fe57600080fd5b80632e17de78116100d35780632e17de781461016c578063370158ea1461017f5780633a1397b61461019b57806344f26d89146101ae57600080fd5b806313af4035146100fa578063150b7a021461010f5780631f4a6d3214610164575b600080fd5b61010d610108366004612319565b610275565b005b61014661011d36600461233b565b7f150b7a023d4804d13e8c85fb27262cb750cf6ba9f9dd3bb30d90f482ceeb4b1f949350505050565b6040516001600160e01b031990911681526020015b60405180910390f35b61010d610319565b61010d61017a36600461258c565b610382565b610187610b95565b60405161015b989796959493929190612651565b61010d6101a9366004612319565b61109e565b61010d6101bc366004612319565b6110f2565b61010d6101cf366004612425565b6112c5565b61010d6101e23660046124ef565b6113c5565b6101f060015481565b60405190815260200161015b565b600054610211906001600160a01b031681565b6040516001600160a01b03909116815260200161015b565b61010d610237366004612526565b611441565b61010d61024a366004612542565b6118c2565b61010d61025d366004612319565b611a30565b61010d6102703660046123fb565b611b88565b6000546001600160a01b031633146102a85760405162461bcd60e51b815260040161029f90612737565b60405180910390fd5b6001600160a01b0381166102f75760405162461bcd60e51b815260206004820152601660248201527563616e6e6f74206265207a65726f206164647265737360501b604482015260640161029f565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146103435760405162461bcd60e51b815260040161029f90612737565b6000805460405147926001600160a01b039092169183156108fc02918491818181858888f1935050505015801561037e573d6000803e3d6000fd5b5050565b3360009081526004602052604081208054839081106103a3576103a3612984565b6000918252602082206002918202018054909350600591839160ff16908111156103cf576103cf612958565b60028111156103e0576103e0612958565b815260200190815260200160002060060182600101548154811061040657610406612984565b9060005260206000209060050201905080600401546000146104755760405162461bcd60e51b815260206004820152602260248201527f54686973204e46542068617320616c7265616479206265656e20756e7374616b604482015261195960f21b606482015260840161029f565b80546001600160a01b031633148061049757506000546001600160a01b031633145b6104e35760405162461bcd60e51b815260206004820152601960248201527f596f7520646f206e6f74206f776e207468697320746f6b656e00000000000000604482015260640161029f565b815460059060009060ff1660028111156104ff576104ff612958565b600281111561051057610510612958565b8152602081019190915260400160002054610100900460ff1615610acc5781546105989060059060009060ff16600281111561054e5761054e612958565b600281111561055f5761055f612958565b815260200190815260200160002060060183600101548154811061058557610585612984565b9060005260206000209060050201611c89565b156107e7578154600090819061060a9060ff166005838260028111156105c0576105c0612958565b60028111156105d1576105d1612958565b81526020019081526020016000206006018660010154815481106105f7576105f7612984565b9060005260206000209060050201611ceb565b85549193509150600090606490600590839060ff16600281111561063057610630612958565b600281111561064157610641612958565b815260208101919091526040016000206005015461065f90856128c7565b61066991906127c8565b905061067581846128e6565b925082156107df57600754845460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810186905291169063a9059cbb90604401602060405180830381600087803b1580156106cc57600080fd5b505af11580156106e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070491906124d2565b508454829060059060009060ff16600281111561072357610723612958565b600281111561073457610734612958565b815260200190815260200160002060060186600101548154811061075a5761075a612984565b90600052602060002090600502016003015461077691906127b0565b855460059060009060ff16600281111561079257610792612958565b60028111156107a3576107a3612958565b81526020019081526020016000206006018660010154815481106107c9576107c9612984565b9060005260206000209060050201600301819055505b505050610acc565b6002825460ff1660028111156107ff576107ff612958565b14801561080d575060065415155b1561093a57600654600090610820611e81565b61082a9190612918565b6008548354600680549394506001600160a01b03928316936342842e0e9330931691908690811061085d5761085d612984565b90600052602060002001546040518463ffffffff1660e01b81526004016108869392919061262d565b600060405180830381600087803b1580156108a057600080fd5b505af11580156108b4573d6000803e3d6000fd5b505050506001600680549050111561091157600680546108d6906001906128e6565b815481106108e6576108e6612984565b90600052602060002001546006828154811061090457610904612984565b6000918252602090912001555b60068054806109225761092261296e565b60019003818190600052602060002001600090559055505b8154600090819061095d9060ff166005838260028111156105c0576105c0612958565b90925090508115610ac9578354819060059060009060ff16600281111561098657610986612958565b600281111561099757610997612958565b81526020019081526020016000206006018560010154815481106109bd576109bd612984565b9060005260206000209060050201600301546109d991906127b0565b845460059060009060ff1660028111156109f5576109f5612958565b6002811115610a0657610a06612958565b8152602001908152602001600020600601856001015481548110610a2c57610a2c612984565b6000918252602090912060059091020160030155600754835460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291169063a9059cbb90604401602060405180830381600087803b158015610a8f57600080fd5b505af1158015610aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac791906124d2565b505b50505b6007548154600183015460405163a9059cbb60e01b81526001600160a01b039283166004820152602481019190915291169063a9059cbb90604401602060405180830381600087803b158015610b2157600080fd5b505af1158015610b35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b5991906124d2565b504260048201558054610b75906001600160a01b031684611efe565b806001015460016000828254610b8b91906128e6565b9091555050505050565b6060600080600080610ba5612236565b610bad612236565b610bb5612236565b336000908152600460205260409020548067ffffffffffffffff811115610bde57610bde61299a565b604051908082528060200260200182016040528015610c5257816020015b610c3f6040805160e08101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000151581525090565b815260200190600190039081610bfc5790505b50985060005b81811015610dae57336000908152600460205260408120805483908110610c8157610c81612984565b6000918252602082206002918202018054909350600591839160ff1690811115610cad57610cad612958565b6002811115610cbe57610cbe612958565b8152602001908152602001600020600601826001015481548110610ce457610ce4612984565b60009182526020822084546005909202019250610d049060ff1683611ceb565b506040805160e08101909152845491925090819060ff166002811115610d2c57610d2c612958565b815260018401546020820152600284015460408201526060810183905260038401546080820152845460a090910190610d689060ff168561202f565b8152602001610d7684611c89565b15158152508d8581518110610d8d57610d8d612984565b60200260200101819052505050508080610da6906128fd565b915050610c58565b506001546007546040516370a0823160e01b81523360048201526001600160a01b03909116995090955088906370a082319060240160206040518083038186803b158015610dfb57600080fd5b505afa158015610e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e3391906125a5565b600754604051636eb1769f60e11b81523360048201523060248201529198506001600160a01b03169063dd62ed3e9060440160206040518083038186803b158015610e7d57600080fd5b505afa158015610e91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb591906125a5565b6000805260056020526040805160e081019091527f05b8ccbb9d4d8fb16ea74ce3c29a41f1b461fbdaff4714a0d9a8eb05499746bc80549298509091829060ff166002811115610f0757610f07612958565b6002811115610f1857610f18612958565b81528154610100900460ff161515602082015260018083015460408301526002830154606083015260038301546080830152600483015460a083015260059283015460c09092019190915291955090600090815260208101919091526040908101600020815160e081019092528054829060ff166002811115610f9d57610f9d612958565b6002811115610fae57610fae612958565b81528154610100900460ff161515602082015260018201546040820152600280830154606083015260038301546080830152600483015460a083015260059283015460c09092019190915291945090600090815260208101919091526040908101600020815160e081019092528054829060ff16600281111561103357611033612958565b600281111561104457611044612958565b81528154610100900460ff1615156020820152600182015460408201526002820154606082015260038201546080820152600482015460a082015260059091015460c0909101529899979896979596949593949293915050565b6000546001600160a01b031633146110c85760405162461bcd60e51b815260040161029f90612737565b600880546001600160a01b0319166001600160a01b0383161790556110ef60066000612276565b50565b6000546001600160a01b0316331461111c5760405162461bcd60e51b815260040161029f90612737565b60005b6001600160a01b0382166000908152600460205260409020548110156112a3576001600160a01b038216600090815260046020526040812080548390811061116957611169612984565b6000918252602082206002918202018054909350600591839160ff169081111561119557611195612958565b60028111156111a6576111a6612958565b81526020019081526020016000206006018260010154815481106111cc576111cc612984565b600091825260209091206007546005909202018054600182015460405163a9059cbb60e01b81526001600160a01b03928316600482015260248101919091529193509091169063a9059cbb90604401602060405180830381600087803b15801561123557600080fd5b505af1158015611249573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126d91906124d2565b5080600101546001600082825461128491906128e6565b909155505042600490910155508061129b816128fd565b91505061111f565b506001600160a01b03811660009081526004602052604081206110ef91612294565b6000546001600160a01b031633146112ef5760405162461bcd60e51b815260040161029f90612737565b60005b815181101561037e5760085482516001600160a01b03909116906342842e0e903390309086908690811061132857611328612984565b60200260200101516040518463ffffffff1660e01b815260040161134e9392919061262d565b600060405180830381600087803b15801561136857600080fd5b505af115801561137c573d6000803e3d6000fd5b50505050600682828151811061139457611394612984565b60209081029190910181015182546001810184556000938452919092200155806113bd816128fd565b9150506112f2565b6000546001600160a01b031633146113ef5760405162461bcd60e51b815260040161029f90612737565b806005600084600281111561140657611406612958565b600281111561141757611417612958565b8152602081019190915260400160002080549115156101000261ff00199092169190911790555050565b816005600082600281111561145857611458612958565b600281111561146957611469612958565b8152602081019190915260400160002054610100900460ff168061149757506000546001600160a01b031633145b6114d95760405162461bcd60e51b81526020600482015260136024820152721cdd185ada5b99c81b9bdd08195b98589b1959606a1b604482015260640161029f565b600560008460028111156114ef576114ef612958565b600281111561150057611500612958565b81526020019081526020016000206000016004015482101561156e5760405162461bcd60e51b815260206004820152602160248201527f446f6573206e6f74206d656574206d696e696d756d20726571756972656d656e6044820152601d60fa1b606482015260840161029f565b600754604051636eb1769f60e11b815233600482015230602482015283916001600160a01b03169063dd62ed3e9060440160206040518083038186803b1580156115b757600080fd5b505afa1580156115cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115ef91906125a5565b10156116335760405162461bcd60e51b8152602060048201526013602482015272139bdd08195b9bdd59da08185c1c1c9bdd9959606a1b604482015260640161029f565b6007546040516323b872dd60e01b81526001600160a01b03909116906323b872dd906116679033903090879060040161262d565b602060405180830381600087803b15801561168157600080fd5b505af1158015611695573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b991906124d2565b5060006040518060c00160405280336001600160a01b031681526020018560028111156116e8576116e8612958565b81526020018481526020014281526020014281526020016000815250905060046000336001600160a01b03166001600160a01b03168152602001908152602001600020604051806040016040528086600281111561174857611748612958565b81526020016005600088600281111561176357611763612958565b600281111561177457611774612958565b81526020808201929092526040016000908120600601549092528354600181810186559483529120825160029283029091018054939490939192849260ff1916919084908111156117c7576117c7612958565b0217905550602082015181600101555050600560008560028111156117ee576117ee612958565b60028111156117ff576117ff612958565b81526020808201929092526040016000908120600601805460018101825590825290829020835160059092020180546001600160a01b039092166001600160a01b03198316811782559284015184939192909183916001600160a81b03191617600160a01b83600281111561187657611876612958565b021790555060408201518160010155606082015181600201556080820151816003015560a08201518160040155505082600160008282546118b791906127b0565b909155505050505050565b6000546001600160a01b031633146118ec5760405162461bcd60e51b815260040161029f90612737565b846005600088600281111561190357611903612958565b600281111561191457611914612958565b815260200190815260200160002060000160010181905550836005600088600281111561194357611943612958565b600281111561195457611954612958565b815260200190815260200160002060000160020181905550826005600088600281111561198357611983612958565b600281111561199457611994612958565b81526020019081526020016000206000016003018190555081600560008860028111156119c3576119c3612958565b60028111156119d4576119d4612958565b8152602001908152602001600020600001600401819055508060056000886002811115611a0357611a03612958565b6002811115611a1457611a14612958565b8152602081019190915260400160002060050155505050505050565b6000546001600160a01b03163314611a5a5760405162461bcd60e51b815260040161029f90612737565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a082319060240160206040518083038186803b158015611a9c57600080fd5b505afa158015611ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad491906125a5565b6007549091506001600160a01b0383811691161415611afd57600154611afa90826128e6565b90505b60005460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529083169063a9059cbb90604401602060405180830381600087803b158015611b4b57600080fd5b505af1158015611b5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b8391906124d2565b505050565b6000546001600160a01b03163314611bb25760405162461bcd60e51b815260040161029f90612737565b6008546001600160a01b0383811691161415611c1a5760405162461bcd60e51b815260206004820152602160248201527f596f752063616e6e6f742072656d6f76652074686520726577617264206e66746044820152607360f81b606482015260840161029f565b600854600054604051632142170760e11b81526001600160a01b03928316926342842e0e92611c5392309290911690869060040161262d565b600060405180830381600087803b158015611c6d57600080fd5b505af1158015611c81573d6000803e3d6000fd5b505050505050565b80546000906005908290600160a01b900460ff166002811115611cae57611cae612958565b6002811115611cbf57611cbf612958565b8152602001908152602001600020600001600301548260020154611ce391906127b0565b421092915050565b6000806000836002015490508084600301541115611d0a575060038301545b60056000866002811115611d2057611d20612958565b6002811115611d3157611d31612958565b8152602081019190915260400160002060010154611d4f82426128e6565b10611e7157600060056000876002811115611d6c57611d6c612958565b6002811115611d7d57611d7d612958565b8152602081019190915260400160002060010154611d9b83426128e6565b611da591906127c8565b9050600254600a611db6919061281f565b611dc19060646128c7565b60056000886002811115611dd757611dd7612958565b6002811115611de857611de8612958565b815260200190815260200160002060000160020154828760010154611e0d91906128c7565b611e1791906128c7565b611e2191906127c8565b60056000886002811115611e3757611e37612958565b6002811115611e4857611e48612958565b8152602081019190915260400160002060010154611e6690836128c7565b935093505050611e7a565b60008092509250505b9250929050565b6000600160036000828254611e9691906127b0565b909155505060035433611eaa6001436128e6565b40604051602001611ee09392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b6040516020818303038152906040528051906020012060001c905090565b6001600160a01b03821660009081526004602052604090205460011015611fe1576001600160a01b03821660009081526004602052604090208054611f45906001906128e6565b81548110611f5557611f55612984565b906000526020600020906002020160046000846001600160a01b03166001600160a01b031681526020019081526020016000208281548110611f9957611f99612984565b60009182526020909120825460029283029091018054909260ff90921691839160ff1916906001908490811115611fd257611fd2612958565b02179055506001918201549101555b6001600160a01b03821660009081526004602052604090208054806120085761200861296e565b600082815260208120600260001990930192830201805460ff191681556001015590555050565b60006005600084600281111561204757612047612958565b600281111561205857612058612958565b8152602081019190915260400160002060030154600283015461207b90426128e6565b10156120dd57600282015461209090426128e6565b600560008560028111156120a6576120a6612958565b60028111156120b7576120b7612958565b8152602001908152602001600020600001600301546120d691906128e6565b9050612230565b600282015460038301548110156120f5575060038201545b6005600085600281111561210b5761210b612958565b600281111561211c5761211c612958565b815260208101919091526040016000206001015461213a82426128e6565b106121dc576005600085600281111561215557612155612958565b600281111561216657612166612958565b815260208101919091526040016000206001015461218482426128e6565b61218e9190612918565b600560008660028111156121a4576121a4612958565b60028111156121b5576121b5612958565b8152602001908152602001600020600001600101546121d491906128e6565b915050612230565b6121e681426128e6565b600560008660028111156121fc576121fc612958565b600281111561220d5761220d612958565b81526020019081526020016000206000016001015461222c91906128e6565b9150505b92915050565b6040805160e08101909152806000815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081525090565b50805460008255906000526020600020908101906110ef91906122b5565b50805460008255600202906000526020600020908101906110ef91906122ce565b5b808211156122ca57600081556001016122b6565b5090565b5b808211156122ca57805460ff19168155600060018201556002016122cf565b80356001600160a01b038116811461230557600080fd5b919050565b80356003811061230557600080fd5b60006020828403121561232b57600080fd5b612334826122ee565b9392505050565b6000806000806080858703121561235157600080fd5b61235a856122ee565b935060206123698187016122ee565b935060408601359250606086013567ffffffffffffffff8082111561238d57600080fd5b818801915088601f8301126123a157600080fd5b8135818111156123b3576123b361299a565b6123c5601f8201601f1916850161277f565b915080825289848285010111156123db57600080fd5b808484018584013760008482840101525080935050505092959194509250565b6000806040838503121561240e57600080fd5b612417836122ee565b946020939093013593505050565b6000602080838503121561243857600080fd5b823567ffffffffffffffff8082111561245057600080fd5b818501915085601f83011261246457600080fd5b8135818111156124765761247661299a565b8060051b915061248784830161277f565b8181528481019084860184860187018a10156124a257600080fd5b600095505b838610156124c55780358352600195909501949186019186016124a7565b5098975050505050505050565b6000602082840312156124e457600080fd5b8151612334816129b0565b6000806040838503121561250257600080fd5b61250b8361230a565b9150602083013561251b816129b0565b809150509250929050565b6000806040838503121561253957600080fd5b6124178361230a565b60008060008060008060c0878903121561255b57600080fd5b6125648761230a565b9860208801359850604088013597606081013597506080810135965060a00135945092505050565b60006020828403121561259e57600080fd5b5035919050565b6000602082840312156125b757600080fd5b5051919050565b600381106125dc57634e487b7160e01b600052602160045260246000fd5b9052565b6125eb8282516125be565b60208101511515602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c08301525050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6103408082528951908201819052600090610360830190602090818d01845b828110156126d35781516126858682516125be565b808501518686015260408082015190870152606080820151908701526080808201519087015260a0808201519087015260c09081015115159086015260e09094019390830190600101612670565b5050508192506126ed8185018c6001600160a01b03169052565b505087604083015286606083015285608083015261270e60a08301866125e0565b61271c6101808301856125e0565b61272a6102608301846125e0565b9998505050505050505050565b60208082526028908201527f63616e206f6e6c792062652063616c6c65642062792074686520636f6e74726160408201526731ba1037bbb732b960c11b606082015260800190565b604051601f8201601f1916810167ffffffffffffffff811182821017156127a8576127a861299a565b604052919050565b600082198211156127c3576127c361292c565b500190565b6000826127d7576127d7612942565b500490565b600181815b808511156128175781600019048211156127fd576127fd61292c565b8085161561280a57918102915b93841c93908002906127e1565b509250929050565b6000612334838360008261283557506001612230565b8161284257506000612230565b816001811461285857600281146128625761287e565b6001915050612230565b60ff8411156128735761287361292c565b50506001821b612230565b5060208310610133831016604e8410600b84101617156128a1575081810a612230565b6128ab83836127dc565b80600019048211156128bf576128bf61292c565b029392505050565b60008160001904831182151516156128e1576128e161292c565b500290565b6000828210156128f8576128f861292c565b500390565b60006000198214156129115761291161292c565b5060010190565b60008261292757612927612942565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146110ef57600080fdfea2646970667358221220610529a5f3f2c390cefe0ade28a6957e277a2e02edaae2a72cf896fe66e9772964736f6c63430008070033

Deployed Bytecode Sourcemap

2442:12585:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11246:143;;;;;;:::i;:::-;;:::i;:::-;;14824:198;;;;;;:::i;:::-;14953:60;14824:198;;;;;;;;;;-1:-1:-1;;;;;;9050:33:1;;;9032:52;;9020:2;9005:18;14824:198:0;;;;;;;;10100:141;;;:::i;8025:2040::-;;;;;;:::i;:::-;;:::i;5980:1372::-;;;:::i;:::-;;;;;;;;;;;;;;:::i;12115:146::-;;;;;;:::i;:::-;;:::i;10796:442::-;;;;;;:::i;:::-;;:::i;12269:270::-;;;;;;:::i;:::-;;:::i;11397:123::-;;;;;;:::i;:::-;;:::i;3493:26::-;;;;;;;;;12258:25:1;;;12246:2;12231:18;3493:26:0;12112:177:1;3466:20:0;;;;;-1:-1:-1;;;;;3466:20:0;;;;;;-1:-1:-1;;;;;5890:32:1;;;5872:51;;5860:2;5845:18;3466:20:0;5726:203:1;7360:657:0;;;;;;:::i;:::-;;:::i;11528:579::-;;;;;;:::i;:::-;;:::i;10253:282::-;;;;;;:::i;:::-;;:::i;10543:245::-;;;;;;:::i;:::-;;:::i;11246:143::-;3863:5;;-1:-1:-1;;;;;3863:5:0;3849:10;:19;3841:72;;;;-1:-1:-1;;;3841:72:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;11315:17:0;::::1;11307:52;;;::::0;-1:-1:-1;;;11307:52:0;;11963:2:1;11307:52:0::1;::::0;::::1;11945:21:1::0;12002:2;11982:18;;;11975:30;-1:-1:-1;;;12021:18:1;;;12014:52;12083:18;;11307:52:0::1;11761:346:1::0;11307:52:0::1;11370:5;:11:::0;;-1:-1:-1;;;;;;11370:11:0::1;-1:-1:-1::0;;;;;11370:11:0;;;::::1;::::0;;;::::1;::::0;;11246:143::o;10100:141::-;3863:5;;-1:-1:-1;;;;;3863:5:0;3849:10;:19;3841:72;;;;-1:-1:-1;;;3841:72:0;;;;;;;:::i;:::-;10151:15:::1;10209:5:::0;;10201:32:::1;::::0;10169:21:::1;::::0;-1:-1:-1;;;;;10209:5:0;;::::1;::::0;10201:32;::::1;;;::::0;10169:21;;10201:32;10151:15;10201:32;10169:21;10209:5;10201:32;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;10140:101;10100:141::o:0;8025:2040::-;8114:10;8084:13;8100:25;;;:13;:25;;;;;:37;;8126:10;;8100:37;;;;;;:::i;:::-;;;;;;;;;;;;;8173:11;;8100:37;;-1:-1:-1;8166:6:0;;8100:37;;8173:11;;;8166:19;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;8195:1;:7;;;8166:37;;;;;;;;:::i;:::-;;;;;;;;;;;8148:55;;8224:1;:13;;;8241:1;8224:18;8216:65;;;;-1:-1:-1;;;8216:65:0;;11560:2:1;8216:65:0;;;11542:21:1;11599:2;11579:18;;;11572:30;11638:34;11618:18;;;11611:62;-1:-1:-1;;;11689:18:1;;;11682:32;11731:19;;8216:65:0;11358:398:1;8216:65:0;8300:8;;-1:-1:-1;;;;;8300:8:0;8312:10;8300:22;;:45;;-1:-1:-1;8340:5:0;;-1:-1:-1;;;;;8340:5:0;8326:10;:19;8300:45;8292:83;;;;-1:-1:-1;;;8292:83:0;;9297:2:1;8292:83:0;;;9279:21:1;9336:2;9316:18;;;9309:30;9375:27;9355:18;;;9348:55;9420:18;;8292:83:0;9095:349:1;8292:83:0;8399:11;;8392:6;;:19;;8399:11;;8392:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;8392:19:0;:32;;;;;;8388:1485;;;8463:11;;8445:49;;8456:6;;:19;;8463:11;;8456:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;8485:1;:7;;;8456:37;;;;;;;;:::i;:::-;;;;;;;;;;;8445:10;:49::i;:::-;8441:1421;;;8560:11;;8518:12;;;;8548:63;;8560:11;;8573:6;8518:12;8560:11;8573:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;8602:1;:7;;;8573:37;;;;;;;;:::i;:::-;;;;;;;;;;;8548:11;:63::i;:::-;8665:11;;8517:94;;-1:-1:-1;8517:94:0;-1:-1:-1;8632:15:0;;8709:3;;8658:6;;8632:15;;8665:11;;8658:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;8658:19:0;:47;;;8651:54;;:4;:54;:::i;:::-;8650:62;;;;:::i;:::-;8632:80;-1:-1:-1;8738:14:0;8632:80;8738:4;:14;:::i;:::-;8731:21;-1:-1:-1;8777:8:0;;8773:223;;8810:6;;8826:8;;8810:31;;-1:-1:-1;;;8810:31:0;;-1:-1:-1;;;;;8826:8:0;;;8810:31;;;6797:51:1;6864:18;;;6857:34;;;8810:6:0;;;:15;;6770:18:1;;8810:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;8925:11:0;;8972:4;;8918:6;;:19;;8925:11;;8918:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;8947:1;:7;;;8918:37;;;;;;;;:::i;:::-;;;;;;;;;;;:51;;;:58;;;;:::i;:::-;8871:11;;8864:6;;:19;;8871:11;;8864:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;8893:1;:7;;;8864:37;;;;;;;;:::i;:::-;;;;;;;;;;;:51;;:112;;;;8773:223;8496:515;;;8441:1421;;;9056:20;9041:11;;;;:35;;;;;;;;:::i;:::-;;:61;;;;-1:-1:-1;9080:11:0;:18;:22;;9041:61;9037:454;;;9165:11;:18;9127:12;;9142:20;:18;:20::i;:::-;:41;;;;:::i;:::-;9206:10;;9249:8;;9259:11;:17;;9127:56;;-1:-1:-1;;;;;;9206:10:0;;;;:27;;9242:4;;9249:8;;9259:11;9127:56;;9259:17;;;;;;:::i;:::-;;;;;;;;;9206:71;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9325:1;9304:11;:18;;;;:22;9300:132;;;9375:11;9387:18;;:20;;9406:1;;9387:20;:::i;:::-;9375:33;;;;;;;;:::i;:::-;;;;;;;;;9355:11;9367:4;9355:17;;;;;;;;:::i;:::-;;;;;;;;;;:53;9300:132;9454:11;:17;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;9104:387;9037:454;9554:11;;9512:12;;;;9542:63;;9554:11;;9567:6;9512:12;9554:11;9567:19;;;;;;;;:::i;9542:63::-;9511:94;;-1:-1:-1;9511:94:0;-1:-1:-1;9628:8:0;;9624:223;;9722:11;;9769:4;;9715:6;;:19;;9722:11;;9715:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;9744:1;:7;;;9715:37;;;;;;;;:::i;:::-;;;;;;;;;;;:51;;;:58;;;;:::i;:::-;9668:11;;9661:6;;:19;;9668:11;;9661:19;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;9690:1;:7;;;9661:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;:51;;:112;9796:6;;9812:8;;9796:31;;-1:-1:-1;;;9796:31:0;;-1:-1:-1;;;;;9812:8:0;;;9796:31;;;6797:51:1;6864:18;;;6857:34;;;9796:6:0;;;:15;;6770:18:1;;9796:31:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9624:223;9018:844;;8441:1421;9885:6;;9901:8;;9885:6;9911:13;;;9885:40;;-1:-1:-1;;;9885:40:0;;-1:-1:-1;;;;;9901:8:0;;;9885:40;;;6797:51:1;6864:18;;;6857:34;;;;9885:6:0;;;:15;;6770:18:1;;9885:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;9952:15:0;9936:13;;;:31;9997:8;;9978:40;;-1:-1:-1;;;;;9997:8:0;10007:10;9978:18;:40::i;:::-;10044:1;:13;;;10029:11;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;8025:2040:0:o;5980:1372::-;6029:37;6077:20;6108;6139:21;6171:20;6202:24;;:::i;:::-;6237;;:::i;:::-;6272:27;;:::i;:::-;6352:10;6318:17;6338:25;;;:13;:25;;;;;:32;;6396;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6396:32:0;;;;;;;;;;;;;;;;;6381:47;;6444:9;6439:541;6463:9;6459:1;:13;6439:541;;;6527:10;6497:13;6513:25;;;:13;:25;;;;;:28;;6539:1;;6513:28;;;;;;:::i;:::-;;;;;;;;;;;;;6581:11;;6513:28;;-1:-1:-1;6574:6:0;;6513:28;;6581:11;;;6574:19;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;6603:1;:7;;;6574:37;;;;;;;;:::i;:::-;;;;;;;;6658:11;;6574:37;;;;;;-1:-1:-1;6646:27:0;;6658:11;;6574:37;6646:11;:27::i;:::-;-1:-1:-1;6706:262:0;;;;;;;;;6740:11;;6628:45;;-1:-1:-1;6706:262:0;;;6740:11;;6706:262;;;;;;;;:::i;:::-;;;6770:13;;;;6706:262;;;;6802:11;;;;6706:262;;;;;;;;;;6855:15;;;;6706:262;;;;6905:11;;6706:262;;;;;6889:31;;6905:11;;6770:1;6889:15;:31::i;:::-;6706:262;;;;6939:13;6950:1;6939:10;:13::i;:::-;6706:262;;;;;6688:12;6701:1;6688:15;;;;;;;;:::i;:::-;;;;;;:280;;;;6480:500;;;6474:4;;;;;:::i;:::-;;;;6439:541;;;-1:-1:-1;7007:11:0;;7052:6;;7085:28;;-1:-1:-1;;;7085:28:0;;7102:10;7085:28;;;5872:51:1;-1:-1:-1;;;;;7052:6:0;;;;-1:-1:-1;7007:11:0;;-1:-1:-1;7052:6:0;;7085:16;;5845:18:1;;7085:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7140:6;;:43;;-1:-1:-1;;;7140:43:0;;7157:10;7140:43;;;6146:34:1;7177:4:0;6196:18:1;;;6189:43;7070::0;;-1:-1:-1;;;;;;7140:6:0;;:16;;6081:18:1;;7140:43:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7206:25;;;:6;:25;;;7196:40;;;;;;;;7206:25;7196:40;;7124:59;;-1:-1:-1;7196:40:0;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7196:40:0;-1:-1:-1;;7257:25:0;;;;;;;;;;;;;-1:-1:-1;7257:25:0;7247:40;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7247:40:0;-1:-1:-1;;7311:28:0;;;;;;;;;;;;;-1:-1:-1;7311:28:0;7298:46;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5980:1372;;;;;;;;;;;;;;;-1:-1:-1;;5980:1372:0:o;12115:146::-;3863:5;;-1:-1:-1;;;;;3863:5:0;3849:10;:19;3841:72;;;;-1:-1:-1;;;3841:72:0;;;;;;;:::i;:::-;12191:10:::1;:33:::0;;-1:-1:-1;;;;;;12191:33:0::1;-1:-1:-1::0;;;;;12191:33:0;::::1;;::::0;;12235:18:::1;12242:11;-1:-1:-1::0;12235:18:0::1;:::i;:::-;12115:146:::0;:::o;10796:442::-;3863:5;;-1:-1:-1;;;;;3863:5:0;3849:10;:19;3841:72;;;;-1:-1:-1;;;3841:72:0;;;;;;;:::i;:::-;10866:9:::1;10861:334;-1:-1:-1::0;;;;;10885:18:0;::::1;;::::0;;;:13:::1;:18;::::0;;;;:25;10881:29;::::1;10861:334;;;-1:-1:-1::0;;;;;10948:18:0;::::1;10932:13;10948:18:::0;;;:13:::1;:18;::::0;;;;:21;;10967:1;;10948:21;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;::::1;::::0;;::::1;;11009:11:::0;;10948:21;;-1:-1:-1;11002:6:0::1;::::0;10948:21;;11009:11:::1;;::::0;11002:19;::::1;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;11031:1;:7;;;11002:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;11054:6:::1;::::0;11002:37:::1;::::0;;::::1;;11070:8:::0;;11054:6;11080:13;::::1;::::0;11054:40:::1;::::0;-1:-1:-1;;;11054:40:0;;-1:-1:-1;;;;;11070:8:0;;::::1;11054:40;::::0;::::1;6797:51:1::0;6864:18;;;6857:34;;;;11002:37:0;;-1:-1:-1;11054:6:0;;::::1;::::0;:15:::1;::::0;6770:18:1;;11054:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11124:1;:13;;;11109:11;;:28;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;11168:15:0::1;11152:13;::::0;;::::1;:31:::0;-1:-1:-1;10912:3:0;::::1;::::0;::::1;:::i;:::-;;;;10861:334;;;-1:-1:-1::0;;;;;;11212:18:0;::::1;;::::0;;;:13:::1;:18;::::0;;;;11205:25:::1;::::0;::::1;:::i;12269:270::-:0;3863:5;;-1:-1:-1;;;;;3863:5:0;3849:10;:19;3841:72;;;;-1:-1:-1;;;3841:72:0;;;;;;;:::i;:::-;12353:9:::1;12348:184;12372:8;:15;12368:1;:19;12348:184;;;12409:10;::::0;12464:11;;-1:-1:-1;;;;;12409:10:0;;::::1;::::0;:27:::1;::::0;12437:10:::1;::::0;12457:4:::1;::::0;12464:8;;12473:1;;12464:11;::::1;;;;;:::i;:::-;;;;;;;12409:67;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12491:11;12508:8;12517:1;12508:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;12491:29;;::::1;::::0;::::1;::::0;;-1:-1:-1;12491:29:0;;;;;;;::::1;::::0;12389:3;::::1;::::0;::::1;:::i;:::-;;;;12348:184;;11397:123:::0;3863:5;;-1:-1:-1;;;;;3863:5:0;3849:10;:19;3841:72;;;;-1:-1:-1;;;3841:72:0;;;;;;;:::i;:::-;11510:2:::1;11477:6;:17;11484:9;11477:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;11477:17:0;:35;;;::::1;;;;-1:-1:-1::0;;11477:35:0;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;11397:123:0:o;7360:657::-;7438:9;3994:6;:9;4001:1;3994:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;3994:9:0;:22;;;;;;;:45;;-1:-1:-1;4034:5:0;;-1:-1:-1;;;;;4034:5:0;4020:10;:19;3994:45;3986:77;;;;-1:-1:-1;;;3986:77:0;;9999:2:1;3986:77:0;;;9981:21:1;10038:2;10018:18;;;10011:30;-1:-1:-1;;;10057:18:1;;;10050:49;10116:18;;3986:77:0;9797:343:1;3986:77:0;7483:6:::1;:17;7490:9;7483:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;:37;;;7468:11;:52;;7460:98;;;::::0;-1:-1:-1;;;7460:98:0;;10347:2:1;7460:98:0::1;::::0;::::1;10329:21:1::0;10386:2;10366:18;;;10359:30;10425:34;10405:18;;;10398:62;-1:-1:-1;;;10476:18:1;;;10469:31;10517:19;;7460:98:0::1;10145:397:1::0;7460:98:0::1;7577:6;::::0;:43:::1;::::0;-1:-1:-1;;;7577:43:0;;7594:10:::1;7577:43;::::0;::::1;6146:34:1::0;7614:4:0::1;6196:18:1::0;;;6189:43;7624:11:0;;-1:-1:-1;;;;;7577:6:0::1;::::0;:16:::1;::::0;6081:18:1;;7577:43:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:58;;7569:90;;;::::0;-1:-1:-1;;;7569:90:0;;9651:2:1;7569:90:0::1;::::0;::::1;9633:21:1::0;9690:2;9670:18;;;9663:30;-1:-1:-1;;;9709:18:1;;;9702:49;9768:18;;7569:90:0::1;9449:343:1::0;7569:90:0::1;7670:6;::::0;:59:::1;::::0;-1:-1:-1;;;7670:59:0;;-1:-1:-1;;;;;7670:6:0;;::::1;::::0;:19:::1;::::0;:59:::1;::::0;7690:10:::1;::::0;7710:4:::1;::::0;7717:11;;7670:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7740:14;7757:78;;;;;;;;7763:10;-1:-1:-1::0;;;;;7757:78:0::1;;;;;7775:9;7757:78;;;;;;;;:::i;:::-;;;;;7786:11;7757:78;;;;7799:15;7757:78;;;;7816:15;7757:78;;;;7833:1;7757:78;;::::0;7740:95:::1;;7846:13;:25;7860:10;-1:-1:-1::0;;;;;7846:25:0::1;-1:-1:-1::0;;;;;7846:25:0::1;;;;;;;;;;;;7877:49;;;;;;;;7881:9;7877:49;;;;;;;;:::i;:::-;;;;;7892:6;:17;7899:9;7892:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;7892:17:0;;;:26:::1;;:33:::0;7877:49;;;7846:81;;::::1;::::0;;::::1;::::0;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;;;-1:-1:-1;;7846:81:0::1;::::0;;;;;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7938:6;:17;7945:9;7938:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;;::::1;::::0;;;;;;-1:-1:-1;7938:17:0;;;:26:::1;;:34:::0;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;7938:34:0;;::::1;-1:-1:-1::0;;;;;;7938:34:0;::::1;::::0;::::1;::::0;;;;::::1;::::0;7970:1;;7938:34;;;;;;-1:-1:-1;;;;;;7938:34:0;;-1:-1:-1;;;7938:34:0;::::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7998:11;7983;;:26;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;;;;7360:657:0:o;11528:579::-;3863:5;;-1:-1:-1;;;;;3863:5:0;3849:10;:19;3841:72;;;;-1:-1:-1;;;3841:72:0;;;;;;;:::i;:::-;11792:19:::1;11748:6;:17;11755:9;11748:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;:41;;:63;;;;11864:17;11822:6;:17;11829:9;11822:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;:39;;:59;;;;11934:17;11892:6;:17;11899:9;11892:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;:39;;:59;;;;12002:15;11962:6;:17;11969:9;11962:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:22;;:37;;:55;;;;12076:23;12028:6;:17;12035:9;12028:17;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12028:17:0;:45:::1;;:71:::0;-1:-1:-1;;;;;;11528:579:0:o;10253:282::-;3863:5;;-1:-1:-1;;;;;3863:5:0;3849:10;:19;3841:72;;;;-1:-1:-1;;;3841:72:0;;;;;;;:::i;:::-;10338:38:::1;::::0;-1:-1:-1;;;10338:38:0;;10370:4:::1;10338:38;::::0;::::1;5872:51:1::0;10320:15:0::1;::::0;-1:-1:-1;;;;;10338:23:0;::::1;::::0;::::1;::::0;5845:18:1;;10338:38:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10410:6;::::0;10320:56;;-1:-1:-1;;;;;;10393:24:0;;::::1;10410:6:::0;::::1;10393:24;10389:88;;;10454:11;::::0;10444:21:::1;::::0;:7;:21:::1;:::i;:::-;10434:31;;10389:88;10512:5;::::0;10489:38:::1;::::0;-1:-1:-1;;;10489:38:0;;-1:-1:-1;;;;;10512:5:0;;::::1;10489:38;::::0;::::1;6797:51:1::0;6864:18;;;6857:34;;;10489:22:0;;::::1;::::0;::::1;::::0;6770:18:1;;10489:38:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;10309:226;10253:282:::0;:::o;10543:245::-;3863:5;;-1:-1:-1;;;;;3863:5:0;3849:10;:19;3841:72;;;;-1:-1:-1;;;3841:72:0;;;;;;;:::i;:::-;10662:10:::1;::::0;-1:-1:-1;;;;;10639:34:0;;::::1;10662:10:::0;::::1;10639:34;;10630:81;;;::::0;-1:-1:-1;;;10630:81:0;;10749:2:1;10630:81:0::1;::::0;::::1;10731:21:1::0;10788:2;10768:18;;;10761:30;10827:34;10807:18;;;10800:62;-1:-1:-1;;;10878:18:1;;;10871:31;10919:19;;10630:81:0::1;10547:397:1::0;10630:81:0::1;10722:10;::::0;::::1;10765:5:::0;10722:58:::1;::::0;-1:-1:-1;;;10722:58:0;;-1:-1:-1;;;;;10722:10:0;;::::1;::::0;:27:::1;::::0;:58:::1;::::0;10758:4:::1;::::0;10765:5;;::::1;::::0;10772:7;;10722:58:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;10543:245:::0;;:::o;14430:194::-;14572:21;;14499:4;;14565:6;;14499:4;;-1:-1:-1;;;14572:21:0;;;;14565:29;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:34;;:51;;;14541:11;:21;;;:75;;;;:::i;:::-;14523:15;:93;;14430:194;-1:-1:-1;;14430:194:0:o;13666:756::-;13749:7;13758;13780:21;13804:11;:21;;;13780:45;;13868:13;13840:11;:25;;;:41;13836:115;;;-1:-1:-1;13914:25:0;;;;13836:115;14002:6;:9;14009:1;14002:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;14002:9:0;:33;;;13967:31;13985:13;13967:15;:31;:::i;:::-;:68;13963:418;;14052:21;14112:6;:9;14119:1;14112:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;14112:9:0;:33;;;14077:31;14095:13;14077:15;:31;:::i;:::-;14076:69;;;;:::i;:::-;14052:93;;14277:8;;14271:2;:14;;;;:::i;:::-;14265:20;;:3;:20;:::i;:::-;14229:6;:9;14236:1;14229:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:14;;:31;;;14213:13;14187:11;:23;;;:39;;;;:::i;:::-;:73;;;;:::i;:::-;14186:100;;;;:::i;:::-;14321:6;:9;14328:1;14321:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;14321:9:0;:33;;;14305:49;;:13;:49;:::i;:::-;14160:209;;;;;;;;13963:418;14409:1;14412;14401:13;;;;;13666:756;;;;;;:::o;14632:184::-;14679:7;14708:1;14699:5;;:10;;;;;;;:::i;:::-;;;;-1:-1:-1;;14759:5:0;;14766:10;14788:16;14803:1;14788:12;:16;:::i;:::-;14778:27;14742:64;;;;;;;;;5547:19:1;;;5604:2;5600:15;;;;-1:-1:-1;;5596:53:1;5591:2;5582:12;;5575:75;5675:2;5666:12;;5659:28;5712:2;5703:12;;5362:359;14742:64:0;;;;;;;;;;;;;14732:75;;;;;;14727:81;;14720:88;;14632:184;:::o;12575:272::-;-1:-1:-1;;;;;12657:21:0;;;;;;:13;:21;;;;;:28;12688:1;-1:-1:-1;12653:149:0;;;-1:-1:-1;;;;;12737:21:0;;;;;;:13;:21;;;;;12759:28;;:30;;12788:1;;12759:30;:::i;:::-;12737:53;;;;;;;;:::i;:::-;;;;;;;;;;;12706:13;:21;12720:6;-1:-1:-1;;;;;12706:21:0;-1:-1:-1;;;;;12706:21:0;;;;;;;;;;;;12728:5;12706:28;;;;;;;;:::i;:::-;;;;;;;;;:84;;:28;;;;;;;:84;;:28;;:84;;;;;:28;;-1:-1:-1;;12706:84:0;;;;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;12706:84:0;;;;;;;;12653:149;-1:-1:-1;;;;;12812:21:0;;;;;;:13;:21;;;;;:27;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;12812:27:0;;;;;;;;;-1:-1:-1;;12812:27:0;;;;;;;;-1:-1:-1;;12575:272:0:o;12855:803::-;12942:7;13010:6;:9;13017:1;13010:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;13010:9:0;:31;;;12986:21;;;;12968:39;;:15;:39;:::i;:::-;:73;12964:188;;;13118:21;;;;13100:39;;:15;:39;:::i;:::-;13065:6;:9;13072:1;13065:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:14;;:31;;;:75;;;;:::i;:::-;13058:82;;;;12964:188;13188:21;;;;13224:25;;;;:41;-1:-1:-1;13220:115:0;;;-1:-1:-1;13298:25:0;;;;13220:115;13386:6;:9;13393:1;13386:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;13386:9:0;:33;;;13351:31;13369:13;13351:15;:31;:::i;:::-;:68;13347:215;;13516:6;:9;13523:1;13516:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;13516:9:0;:33;;;13481:31;13499:13;13481:15;:31;:::i;:::-;13480:69;;;;:::i;:::-;13443:6;:9;13450:1;13443:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:14;;:33;;;:107;;;;:::i;:::-;13436:114;;;;;13347:215;13618:31;13636:13;13618:15;:31;:::i;:::-;13581:6;:9;13588:1;13581:9;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;;;;:14;;:33;;;:69;;;;:::i;:::-;13574:76;;;12855:803;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;14:173:1;82:20;;-1:-1:-1;;;;;131:31:1;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:150::-;267:20;;316:1;306:12;;296:40;;332:1;329;322:12;347:186;406:6;459:2;447:9;438:7;434:23;430:32;427:52;;;475:1;472;465:12;427:52;498:29;517:9;498:29;:::i;:::-;488:39;347:186;-1:-1:-1;;;347:186:1:o;538:980::-;633:6;641;649;657;710:3;698:9;689:7;685:23;681:33;678:53;;;727:1;724;717:12;678:53;750:29;769:9;750:29;:::i;:::-;740:39;;798:2;819:38;853:2;842:9;838:18;819:38;:::i;:::-;809:48;;904:2;893:9;889:18;876:32;866:42;;959:2;948:9;944:18;931:32;982:18;1023:2;1015:6;1012:14;1009:34;;;1039:1;1036;1029:12;1009:34;1077:6;1066:9;1062:22;1052:32;;1122:7;1115:4;1111:2;1107:13;1103:27;1093:55;;1144:1;1141;1134:12;1093:55;1180:2;1167:16;1202:2;1198;1195:10;1192:36;;;1208:18;;:::i;:::-;1250:53;1293:2;1274:13;;-1:-1:-1;;1270:27:1;1266:36;;1250:53;:::i;:::-;1237:66;;1326:2;1319:5;1312:17;1366:7;1361:2;1356;1352;1348:11;1344:20;1341:33;1338:53;;;1387:1;1384;1377:12;1338:53;1442:2;1437;1433;1429:11;1424:2;1417:5;1413:14;1400:45;1486:1;1481:2;1476;1469:5;1465:14;1461:23;1454:34;;1507:5;1497:15;;;;;538:980;;;;;;;:::o;1523:254::-;1591:6;1599;1652:2;1640:9;1631:7;1627:23;1623:32;1620:52;;;1668:1;1665;1658:12;1620:52;1691:29;1710:9;1691:29;:::i;:::-;1681:39;1767:2;1752:18;;;;1739:32;;-1:-1:-1;;;1523:254:1:o;1782:957::-;1866:6;1897:2;1940;1928:9;1919:7;1915:23;1911:32;1908:52;;;1956:1;1953;1946:12;1908:52;1996:9;1983:23;2025:18;2066:2;2058:6;2055:14;2052:34;;;2082:1;2079;2072:12;2052:34;2120:6;2109:9;2105:22;2095:32;;2165:7;2158:4;2154:2;2150:13;2146:27;2136:55;;2187:1;2184;2177:12;2136:55;2223:2;2210:16;2245:2;2241;2238:10;2235:36;;;2251:18;;:::i;:::-;2297:2;2294:1;2290:10;2280:20;;2320:28;2344:2;2340;2336:11;2320:28;:::i;:::-;2382:15;;;2413:12;;;;2445:11;;;2475;;;2471:20;;2468:33;-1:-1:-1;2465:53:1;;;2514:1;2511;2504:12;2465:53;2536:1;2527:10;;2546:163;2560:2;2557:1;2554:9;2546:163;;;2617:17;;2605:30;;2578:1;2571:9;;;;;2655:12;;;;2687;;2546:163;;;-1:-1:-1;2728:5:1;1782:957;-1:-1:-1;;;;;;;;1782:957:1:o;2744:245::-;2811:6;2864:2;2852:9;2843:7;2839:23;2835:32;2832:52;;;2880:1;2877;2870:12;2832:52;2912:9;2906:16;2931:28;2953:5;2931:28;:::i;2994:335::-;3072:6;3080;3133:2;3121:9;3112:7;3108:23;3104:32;3101:52;;;3149:1;3146;3139:12;3101:52;3172:36;3198:9;3172:36;:::i;:::-;3162:46;;3258:2;3247:9;3243:18;3230:32;3271:28;3293:5;3271:28;:::i;:::-;3318:5;3308:15;;;2994:335;;;;;:::o;3334:274::-;3415:6;3423;3476:2;3464:9;3455:7;3451:23;3447:32;3444:52;;;3492:1;3489;3482:12;3444:52;3515:36;3541:9;3515:36;:::i;3613:549::-;3730:6;3738;3746;3754;3762;3770;3823:3;3811:9;3802:7;3798:23;3794:33;3791:53;;;3840:1;3837;3830:12;3791:53;3863:36;3889:9;3863:36;:::i;:::-;3853:46;3946:2;3931:18;;3918:32;;-1:-1:-1;3997:2:1;3982:18;;3969:32;;4048:2;4033:18;;4020:32;;-1:-1:-1;4099:3:1;4084:19;;4071:33;;-1:-1:-1;4151:3:1;4136:19;4123:33;;-1:-1:-1;3613:549:1;-1:-1:-1;;;3613:549:1:o;4167:180::-;4226:6;4279:2;4267:9;4258:7;4254:23;4250:32;4247:52;;;4295:1;4292;4285:12;4247:52;-1:-1:-1;4318:23:1;;4167:180;-1:-1:-1;4167:180:1:o;4352:184::-;4422:6;4475:2;4463:9;4454:7;4450:23;4446:32;4443:52;;;4491:1;4488;4481:12;4443:52;-1:-1:-1;4514:16:1;;4352:184;-1:-1:-1;4352:184:1:o;4650:237::-;4731:1;4724:5;4721:12;4711:143;;4776:10;4771:3;4767:20;4764:1;4757:31;4811:4;4808:1;4801:15;4839:4;4836:1;4829:15;4711:143;4863:18;;4650:237::o;4892:465::-;4955:44;4995:3;4987:5;4981:12;4955:44;:::i;:::-;5062:4;5055:5;5051:16;5045:23;5038:31;5031:39;5024:4;5019:3;5015:14;5008:63;5120:4;5113:5;5109:16;5103:23;5096:4;5091:3;5087:14;5080:47;5176:4;5169:5;5165:16;5159:23;5152:4;5147:3;5143:14;5136:47;5232:4;5225:5;5221:16;5215:23;5208:4;5203:3;5199:14;5192:47;5288:4;5281:5;5277:16;5271:23;5264:4;5259:3;5255:14;5248:47;5344:4;5337:5;5333:16;5327:23;5320:4;5315:3;5311:14;5304:47;;;4892:465::o;6243:375::-;-1:-1:-1;;;;;6501:15:1;;;6483:34;;6553:15;;;;6548:2;6533:18;;6526:43;6600:2;6585:18;;6578:34;;;;6433:2;6418:18;;6243:375::o;6902:1981::-;7489:3;7542:21;;;7612:13;;7515:18;;;7634:22;;;7460:4;;7687:3;7672:19;;;7710:4;;7737:15;;;7460:4;7780:691;7794:6;7791:1;7788:13;7780:691;;;7859:6;7853:13;7879:41;7916:3;7911:2;7905:9;7879:41;:::i;:::-;7960:11;;;7954:18;7940:12;;;7933:40;7996:4;8040:11;;;8034:18;8020:12;;;8013:40;8076:4;8120:11;;;8114:18;8100:12;;;8093:40;8156:4;8200:11;;;8194:18;8180:12;;;8173:40;8236:4;8280:11;;;8274:18;8260:12;;;8253:40;8316:4;8374:11;;;8368:18;8361:26;8354:34;8340:12;;;8333:56;8418:4;8409:14;;;;8446:15;;;;7816:1;7809:9;7780:691;;;7784:3;;;8488;8480:11;;8500:46;8542:2;8531:9;8527:18;8519:6;-1:-1:-1;;;;;4607:31:1;4595:44;;4541:104;8500:46;;;8584:6;8577:4;8566:9;8562:20;8555:36;8629:6;8622:4;8611:9;8607:20;8600:36;8674:6;8667:4;8656:9;8652:20;8645:36;8690:57;8741:4;8730:9;8726:20;8718:6;8690:57;:::i;:::-;8756:56;8807:3;8796:9;8792:19;8784:6;8756:56;:::i;:::-;8821;8872:3;8861:9;8857:19;8849:6;8821:56;:::i;:::-;6902:1981;;;;;;;;;;;:::o;10949:404::-;11151:2;11133:21;;;11190:2;11170:18;;;11163:30;11229:34;11224:2;11209:18;;11202:62;-1:-1:-1;;;11295:2:1;11280:18;;11273:38;11343:3;11328:19;;10949:404::o;12294:275::-;12365:2;12359:9;12430:2;12411:13;;-1:-1:-1;;12407:27:1;12395:40;;12465:18;12450:34;;12486:22;;;12447:62;12444:88;;;12512:18;;:::i;:::-;12548:2;12541:22;12294:275;;-1:-1:-1;12294:275:1:o;12574:128::-;12614:3;12645:1;12641:6;12638:1;12635:13;12632:39;;;12651:18;;:::i;:::-;-1:-1:-1;12687:9:1;;12574:128::o;12707:120::-;12747:1;12773;12763:35;;12778:18;;:::i;:::-;-1:-1:-1;12812:9:1;;12707:120::o;12832:422::-;12921:1;12964:5;12921:1;12978:270;12999:7;12989:8;12986:21;12978:270;;;13058:4;13054:1;13050:6;13046:17;13040:4;13037:27;13034:53;;;13067:18;;:::i;:::-;13117:7;13107:8;13103:22;13100:55;;;13137:16;;;;13100:55;13216:22;;;;13176:15;;;;12978:270;;;12982:3;12832:422;;;;;:::o;13259:131::-;13319:5;13348:36;13375:8;13369:4;13444:5;13474:8;13464:80;;-1:-1:-1;13515:1:1;13529:5;;13464:80;13563:4;13553:76;;-1:-1:-1;13600:1:1;13614:5;;13553:76;13645:4;13663:1;13658:59;;;;13731:1;13726:130;;;;13638:218;;13658:59;13688:1;13679:10;;13702:5;;;13726:130;13763:3;13753:8;13750:17;13747:43;;;13770:18;;:::i;:::-;-1:-1:-1;;13826:1:1;13812:16;;13841:5;;13638:218;;13940:2;13930:8;13927:16;13921:3;13915:4;13912:13;13908:36;13902:2;13892:8;13889:16;13884:2;13878:4;13875:12;13871:35;13868:77;13865:159;;;-1:-1:-1;13977:19:1;;;14009:5;;13865:159;14056:34;14081:8;14075:4;14056:34;:::i;:::-;14126:6;14122:1;14118:6;14114:19;14105:7;14102:32;14099:58;;;14137:18;;:::i;:::-;14175:20;;13395:806;-1:-1:-1;;;13395:806:1:o;14206:168::-;14246:7;14312:1;14308;14304:6;14300:14;14297:1;14294:21;14289:1;14282:9;14275:17;14271:45;14268:71;;;14319:18;;:::i;:::-;-1:-1:-1;14359:9:1;;14206:168::o;14379:125::-;14419:4;14447:1;14444;14441:8;14438:34;;;14452:18;;:::i;:::-;-1:-1:-1;14489:9:1;;14379:125::o;14509:135::-;14548:3;-1:-1:-1;;14569:17:1;;14566:43;;;14589:18;;:::i;:::-;-1:-1:-1;14636:1:1;14625:13;;14509:135::o;14649:112::-;14681:1;14707;14697:35;;14712:18;;:::i;:::-;-1:-1:-1;14746:9:1;;14649:112::o;14766:127::-;14827:10;14822:3;14818:20;14815:1;14808:31;14858:4;14855:1;14848:15;14882:4;14879:1;14872:15;14898:127;14959:10;14954:3;14950:20;14947:1;14940:31;14990:4;14987:1;14980:15;15014:4;15011:1;15004:15;15030:127;15091:10;15086:3;15082:20;15079:1;15072:31;15122:4;15119:1;15112:15;15146:4;15143:1;15136:15;15162:127;15223:10;15218:3;15214:20;15211:1;15204:31;15254:4;15251:1;15244:15;15278:4;15275:1;15268:15;15294:127;15355:10;15350:3;15346:20;15343:1;15336:31;15386:4;15383:1;15376:15;15410:4;15407:1;15400:15;15426:127;15487:10;15482:3;15478:20;15475:1;15468:31;15518:4;15515:1;15508:15;15542:4;15539:1;15532:15;15558:118;15644:5;15637:13;15630:21;15623:5;15620:32;15610:60;;15666:1;15663;15656:12

Swarm Source

ipfs://610529a5f3f2c390cefe0ade28a6957e277a2e02edaae2a72cf896fe66e97729

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
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.