ETH Price: $3,414.77 (+2.98%)

Contract

0x4ACd3411930A299D32768b48B2E67F51da66D4B5
 

Overview

ETH Balance

0.060450617733787759 ETH

Eth Value

$206.42 (@ $3,414.77/ETH)

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Leave Land186661622023-11-27 23:10:23392 days ago1701126623IN
0x4ACd3411...1da66D4B5
0 ETH0.0069785635.15083888
Take Gold186661382023-11-27 23:05:35392 days ago1701126335IN
0x4ACd3411...1da66D4B5
0 ETH0.0102607932.43914411
Take Gold186634122023-11-27 13:55:47392 days ago1701093347IN
0x4ACd3411...1da66D4B5
0 ETH0.0140814644.51805245
Take Gold186416652023-11-24 12:48:11395 days ago1700830091IN
0x4ACd3411...1da66D4B5
0 ETH0.0098094429.92426615
Leave Land186306502023-11-22 23:46:59397 days ago1700696819IN
0x4ACd3411...1da66D4B5
0 ETH0.0089746334.56913367
Leave Land186306452023-11-22 23:45:59397 days ago1700696759IN
0x4ACd3411...1da66D4B5
0 ETH0.0082165131.86808239
Leave Land186072822023-11-19 17:15:47400 days ago1700414147IN
0x4ACd3411...1da66D4B5
0 ETH0.0054479921.16556373
Leave Land186035952023-11-19 4:52:35401 days ago1700369555IN
0x4ACd3411...1da66D4B5
0 ETH0.0036209518.23862874
Take Gold186035932023-11-19 4:52:11401 days ago1700369531IN
0x4ACd3411...1da66D4B5
0 ETH0.0061229319.18760595
Go To Land186009082023-11-18 19:50:23401 days ago1700337023IN
0x4ACd3411...1da66D4B5
0 ETH0.0035161620.7243005
Take Gold186008912023-11-18 19:46:59401 days ago1700336819IN
0x4ACd3411...1da66D4B5
0 ETH0.0077401822.44123325
Go To Land185956632023-11-18 2:07:59402 days ago1700273279IN
0x4ACd3411...1da66D4B5
0 ETH0.0103753333.32455459
Leave Land185956592023-11-18 2:07:11402 days ago1700273231IN
0x4ACd3411...1da66D4B5
0 ETH0.0068201734.42757225
Take Gold185956552023-11-18 2:06:23402 days ago1700273183IN
0x4ACd3411...1da66D4B5
0 ETH0.011392536.06605651
Take Gold185944242023-11-17 21:57:47402 days ago1700258267IN
0x4ACd3411...1da66D4B5
0 ETH0.0095489929.96431212
Leave Land185928002023-11-17 16:30:59402 days ago1700238659IN
0x4ACd3411...1da66D4B5
0 ETH0.0116053244.52815621
Take Gold185918172023-11-17 13:12:59402 days ago1700226779IN
0x4ACd3411...1da66D4B5
0 ETH0.0094638134.94376246
Renounce Ownersh...185917782023-11-17 13:04:59402 days ago1700226299IN
0x4ACd3411...1da66D4B5
0 ETH0.0008554938.1748602
Leave Land185917282023-11-17 12:54:23402 days ago1700225663IN
0x4ACd3411...1da66D4B5
0 ETH0.0051085125.75936375
Take Gold185917242023-11-17 12:53:35402 days ago1700225615IN
0x4ACd3411...1da66D4B5
0 ETH0.0079287324.8632382
Leave Land185916762023-11-17 12:43:59402 days ago1700225039IN
0x4ACd3411...1da66D4B5
0 ETH0.0052718826.28948708
Leave Land185915452023-11-17 12:17:35402 days ago1700223455IN
0x4ACd3411...1da66D4B5
0 ETH0.0055386127.95838576
Take Gold185915292023-11-17 12:14:23402 days ago1700223263IN
0x4ACd3411...1da66D4B5
0 ETH0.0079422627.60461119
Take Gold185915262023-11-17 12:13:47402 days ago1700223227IN
0x4ACd3411...1da66D4B5
0 ETH0.0086571827.40664989
Leave Land185906552023-11-17 9:18:23402 days ago1700212703IN
0x4ACd3411...1da66D4B5
0 ETH0.006355624.16588336
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
186661382023-11-27 23:05:35392 days ago1701126335
0x4ACd3411...1da66D4B5
0.0108636 ETH
186634122023-11-27 13:55:47392 days ago1701093347
0x4ACd3411...1da66D4B5
0.01514481 ETH
186416652023-11-24 12:48:11395 days ago1700830091
0x4ACd3411...1da66D4B5
0.0211132 ETH
186035932023-11-19 4:52:11401 days ago1700369531
0x4ACd3411...1da66D4B5
0.05456576 ETH
186008912023-11-18 19:46:59401 days ago1700336819
0x4ACd3411...1da66D4B5
0.10557382 ETH
185956552023-11-18 2:06:23402 days ago1700273183
0x4ACd3411...1da66D4B5
0.01983152 ETH
185944242023-11-17 21:57:47402 days ago1700258267
0x4ACd3411...1da66D4B5
0.05101664 ETH
185918172023-11-17 13:12:59402 days ago1700226779
0x4ACd3411...1da66D4B5
0.01855514 ETH
185917852023-11-17 13:06:23402 days ago1700226383
0x4ACd3411...1da66D4B5
0.00579873 ETH
185917852023-11-17 13:06:23402 days ago1700226383
0x4ACd3411...1da66D4B5
0.01414325 ETH
185917242023-11-17 12:53:35402 days ago1700225615
0x4ACd3411...1da66D4B5
0.0608015 ETH
185917192023-11-17 12:52:35402 days ago1700225555
0x4ACd3411...1da66D4B5
0.00449945 ETH
185917192023-11-17 12:52:35402 days ago1700225555
0x4ACd3411...1da66D4B5
0.01097428 ETH
185915802023-11-17 12:24:47402 days ago1700223887
0x4ACd3411...1da66D4B5
0.00165818 ETH
185915802023-11-17 12:24:47402 days ago1700223887
0x4ACd3411...1da66D4B5
0.00404435 ETH
185915502023-11-17 12:18:35402 days ago1700223515
0x4ACd3411...1da66D4B5
0.00103975 ETH
185915502023-11-17 12:18:35402 days ago1700223515
0x4ACd3411...1da66D4B5
0.00253599 ETH
185915292023-11-17 12:14:23402 days ago1700223263
0x4ACd3411...1da66D4B5
0.13124046 ETH
185915262023-11-17 12:13:47402 days ago1700223227
0x4ACd3411...1da66D4B5
0.01639574 ETH
185915052023-11-17 12:09:35402 days ago1700222975
0x4ACd3411...1da66D4B5
0.01381101 ETH
185915052023-11-17 12:09:35402 days ago1700222975
0x4ACd3411...1da66D4B5
0.0336854 ETH
185912912023-11-17 11:26:35402 days ago1700220395
0x4ACd3411...1da66D4B5
0.00643481 ETH
185912912023-11-17 11:26:35402 days ago1700220395
0x4ACd3411...1da66D4B5
0.01569466 ETH
185912462023-11-17 11:17:35402 days ago1700219855
0x4ACd3411...1da66D4B5
0.00355483 ETH
185912462023-11-17 11:17:35402 days ago1700219855
0x4ACd3411...1da66D4B5
0.00867032 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Sunra

Compiler Version
v0.8.23+commit.f704f362

Optimization Enabled:
Yes with 200 runs

Other Settings:
paris EvmVersion
File 1 of 6 : Sunra.sol
pragma solidity ^0.8.23;

import "./ISunra.sol";
import "./Land.sol";
import "./AccLandData.sol";
import "./LandPrediction.sol";
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

contract Ownable {
    address public owner;

    event OwnershipRenounced();

    constructor() {
        owner = msg.sender;
    }

    modifier onlyOwner() {
        require(owner == msg.sender, "not the owner");
        _;
    }

    function renounceOwnership() external onlyOwner {
        owner = address(0);
        emit OwnershipRenounced();
    }

    function transferOwnership(address newOwner) external onlyOwner {
        require(owner != address(0));
        owner = newOwner;
    }
}

contract EthReceivable {
    string constant ERR_SEND_ETHER_FEE = "#1"; // sent fee error: master ether is not sent

    address public immutable master; // eth master
    uint256 _ethMasterFeePercent = 41; // master fee percent

    constructor(address master_) {
        master = master_;
    }

    receive() external payable {
        uint256 masterFee = (msg.value * _ethMasterFeePercent) / 100;
        (bool sentFee, ) = payable(master).call{value: masterFee}("");
        require(sentFee, ERR_SEND_ETHER_FEE);
    }

    function ethMasterFeePercent() external view returns (uint256) {
        return _ethMasterFeePercent;
    }

    function _changeEthMasterFeePercent(uint256 percent) internal {
        require(percent <= 51);
        _ethMasterFeePercent = percent;
    }
}

contract Initializeable {
    string constant ERR_ALREADY_LAUNCHED = "#2"; // already initializeed
    bool public isInitialized;

    function _initialize() internal {
        require(!isInitialized, ERR_ALREADY_LAUNCHED); // already initializeed
        isInitialized = true;
    }
}

contract HasRandom {
    uint256 internal _nonce = 1;

    function _rand() internal virtual returns (uint256) {
        //return _nonce++ * block.timestamp * block.number;
        return _nonce++ * block.number;
    }

    function _rand(uint256 min, uint256 max) internal returns (uint256) {
        return min + (_rand() % (max - min + 1));
    }
}

contract Sunra is ISunra, Ownable, EthReceivable, Initializeable, HasRandom {
    string constant ERR_NOT_CORRECT = "#3"; // not correct
    string constant ERR_NOT_LAUNCHED = "#4"; // not initializeed
    string constant ERR_WORLD_NOT_EXISTS = "#5"; // land is not exists
    string constant ERR_SLOT_NOT_FOUND = "#6"; // slot for land is not found
    string constant ERR_CAN_NOT_COLLECT_REWARDS = "#7"; // can not take rewards yet
    string constant ERR_NO_WORLD_WITH_ID = "#8"; // has no land with certain id
    string constant ERR_ETHER_NOT_SEND = "#9"; // sent fee error: ether is not sent
    string constant ERR_INCORRECT_WORLD_NUMBER = "#10"; // incorrect land number
    using LandPrediction for Land;

    IERC20 _token;
    IERC20 _token2;
    uint256 public landslCreatedTotal; // total created lands count

    uint8 constant _initializeLandsCount = 2;
    uint8 public constant maxLandsCount = 4; // maximum lands count
    uint256 public constant newLandTimeMin = 1 minutes;
    uint256 public constant newLandTimeMax = 1 hours;

    uint256 public landPeriodWaitSecondsMin = 61 seconds; // land period wait time season min
    uint256 public landPeriodWaitSecondsMax = 36001 seconds; // land period wait time season max
    uint256 public landRewardPercentMin = 51; // 100%=1000
    uint256 public landRewardPercentMax = 501; // 100%=1000
    uint256 public landEraseTimeMin = 61 seconds;
    uint256 public landEraseTimeMax = 601 seconds;
    uint256 public landEraseStartChance = 31; // noe of this is initializes erase on take
    uint256 public landTakeGoldSecondsMin = 61 seconds; // land take time season min
    uint256 public landTakeGoldSecondsMax = 3601 seconds; // land take time season max

    Land[maxLandsCount] _lands; // accounts land data
    mapping(address => AccLandData[maxLandsCount]) accs;
    address _deployer;
    uint256 _newLandTime;

    constructor(address master_) EthReceivable(master_) {
        _deployer = msg.sender;
    }

    function initialize() external onlyOwner {
        _initialize();
        for (uint8 i = 1; i <= _initializeLandsCount; ++i) _createLand(i);
    }

    function token1() external view returns (IERC20) {
        return _token;
    }

    function token2() external view returns (IERC20) {
        return _token2;
    }

    function changeEthMasterFeePercent(uint256 percent) external onlyOwner {
        _changeEthMasterFeePercent(percent);
    }

    function changePeriodWaitSeconds(
        uint256 landPeriodWaitSecondsMin_,
        uint256 landPeriodWaitSecondsMax_
    ) external onlyOwner {
        require(
            landPeriodWaitSecondsMin_ > 0 &&
                landPeriodWaitSecondsMin_ <= landPeriodWaitSecondsMax_,
            ERR_NOT_CORRECT
        );
        landPeriodWaitSecondsMin = landPeriodWaitSecondsMin_;
        landPeriodWaitSecondsMax = landPeriodWaitSecondsMax_;
    }

    function changeTakeGoldSeconds(
        uint256 landTakeGoldSecondsMin_,
        uint256 landTakeGoldSecondsMax_
    ) external onlyOwner {
        require(
            landTakeGoldSecondsMin_ > 0 &&
                landTakeGoldSecondsMin_ <= landTakeGoldSecondsMax_,
            ERR_NOT_CORRECT
        );
        landTakeGoldSecondsMin = landTakeGoldSecondsMin_;
        landTakeGoldSecondsMax = landTakeGoldSecondsMax_;
    }

    function changePrizePercent(uint256 min, uint256 max) external onlyOwner {
        require(min <= max, ERR_NOT_CORRECT);
        require(max <= 1000, ERR_NOT_CORRECT);
        landRewardPercentMin = min;
        landRewardPercentMax = max;
    }

    function changeLandEraseStartChance(uint256 chance) external onlyOwner {
        require(chance > 1);
        landEraseStartChance = chance;
    }

    function changeErc20(address token_, address token2_) external {
        require(msg.sender == _deployer);
        delete _deployer;
        _token = IERC20(token_);
        _token2 = IERC20(token2_);
    }

    function goToLand(uint256 landId, uint256 tokensCount) external {
        // limitations
        require(isInitialized, ERR_NOT_LAUNCHED);
        // get land
        (Land storage land, uint8 number) = _getLandByIdInternal(landId);
        require(land.isExists(), ERR_WORLD_NOT_EXISTS);
        // refresh land
        //_refreshBeforeUseLand(land, number);
        _eraseLand(land, number);
        _refreshLand(land, number);
        require(land.isExists(), ERR_WORLD_NOT_EXISTS);

        // thansfer stak tokens
        uint256 lastTokens = _token.balanceOf(address(this));
        _token.transferFrom(msg.sender, address(this), tokensCount);
        uint256 staked = _token.balanceOf(address(this)) - lastTokens;

        // write data
        AccLandData storage acc = accs[msg.sender][number - 1];
        if (acc.landId != land.id) ++land.accountsCount;
        acc.landId = land.id;
        acc.takePeriod = land.periodNumber();
        acc.tokenStaked += staked;
        land.tokenStaked += staked;
    }

    function leaveLand(uint256 landId) external {
        (Land storage land, uint8 number) = _getLandByIdInternal(landId);
        _refreshBeforeUseLand(land, number);
        AccLandData storage acc = accs[msg.sender][number - 1];
        require(acc.landId > 0, ERR_SLOT_NOT_FOUND);
        //if (_canTakeRewards(acc, land))
        //    _takeGold(msg.sender, acc, land);
        _token.transfer(msg.sender, acc.tokenStaked);
        --land.accountsCount;
        land.tokenStaked -= acc.tokenStaked;
        delete accs[msg.sender][number - 1];
    }

    function _refreshBeforeUseLand(Land storage land, uint8 number) private {
        require(land.isExists(), ERR_WORLD_NOT_EXISTS);
        _refreshLandsErases();
        _refreshLand(land, number);
        _createNewLands();
        require(land.isExists(), ERR_WORLD_NOT_EXISTS);
    }

    function getAccSlots(
        address addr
    ) external view returns (AccLandData[] memory) {
        AccLandData[] memory res = new AccLandData[](maxLandsCount);
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            AccLandData storage data = accs[addr][i];
            Land memory land = _lands[i];
            if (!land.isExists()) continue;
            res[i] = data;
        }

        return res;
    }

    function getAccSlotForLand(
        address acc,
        uint256 landId
    ) public view returns (AccLandData memory) {
        return _getAccSlotForLand(acc, landId);
    }

    function _getAccSlotForLand(
        address acc,
        uint256 landId
    ) private view returns (AccLandData storage) {
        require(landId > 0, ERR_WORLD_NOT_EXISTS);
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            AccLandData storage data = accs[acc][i];
            if (data.landId == landId) {
                require(isLandExists(data.landId), ERR_SLOT_NOT_FOUND);
                return data;
            }
        }

        revert(ERR_SLOT_NOT_FOUND);
    }

    function _trySetEraseTime(Land storage land) private {
        if (!land.isExists() || land.eraseTime != 0) return;
        if (_rand(1, landEraseStartChance) % landEraseStartChance != 1) return;

        land.changeEraseSeconds(_rand(landEraseTimeMin, landEraseTimeMax));
    }

    function isLandTakeSeason(uint8 landNumber) public view returns (bool) {
        return _isLandTakeSeason(_getLandByNumber(landNumber));
    }

    function _isLandTakeSeason(Land memory land) private view returns (bool) {
        return land.id > 0 && land.isTakeTime();
    }

    /*function takeGoldAllLands() external {
        uint8 takeCount;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            AccLandData storage data = accs[msg.sender][i];
            Land storage land = _lands[i];
            if (!land.isExists()) continue;
            _refreshLand(land, i + 1);
            if (!_canTakeRewards(data, land)) continue;
            _takeGold(msg.sender, data, land);
            ++takeCount;
        }
        _createNewLands();
        require(takeCount > 0, ERR_CAN_NOT_COLLECT_REWARDS);
    }*/

    function takeGold(uint256 landId) external {
        (Land storage land, uint8 number) = _getLandByIdInternal(landId);
        _refreshBeforeUseLand(land, number);
        AccLandData storage data = accs[msg.sender][number - 1];
        require(_canTakeRewards(data, land), ERR_CAN_NOT_COLLECT_REWARDS);
        _takeGold(msg.sender, data, land);
    }

    function _canTakeRewards(
        AccLandData memory acc,
        Land memory land
    ) private view returns (bool) {
        return
            land.isExists() &&
            land.isTakeTime() &&
            acc.takePeriod + 1 < land.periodNumber();
    }

    function _takeGold(
        address addr,
        AccLandData storage acc,
        Land storage land
    )
        private
        returns (
            uint256 ethRewarded,
            uint256 tokenRewarded,
            uint256 token2Rewarded
        )
    {
        _tryNextTakePeriodSnapshot(land);

        ethRewarded = land.ethRewardPeriod(acc.tokenStaked);
        tokenRewarded = land.tokenRewardPeriod(acc.tokenStaked);
        token2Rewarded = land.token2RewardPeriod(acc.tokenStaked);

        acc.takePeriod = land.periodNumber() - 1;

        if (ethRewarded > 0) {
            (bool sentFee, ) = payable(addr).call{value: ethRewarded}("");
            require(sentFee, ERR_ETHER_NOT_SEND);
            land.eth -= ethRewarded;
        }
        if (tokenRewarded > 0) {
            _token.transfer(addr, tokenRewarded);
            land.token1 -= tokenRewarded;
        }
        if (token2Rewarded > 0) {
            _token2.transfer(addr, token2Rewarded);
            land.token2 -= token2Rewarded;
        }

        _trySetEraseTime(land);
    }

    function _tryNextTakePeriodSnapshot(Land storage land) private {
        if (
            !land.isExists() || land.eraseTime != 0 || !land.isTakePeriodDirty()
        ) return;
        _addRewardsToLand(land);
        land.tokenStakedSnapshot = land.tokenStaked;
        land.takePeriodSnapshot = land.periodNumber();
        land.ethSnapshot = land.eth;
        land.tokenSnapshot = land.token1;
        land.token2Snapshot = land.token2;
    }

    function getRewardForTokens(
        uint256 landId,
        uint256 tokensCount
    ) external view returns (uint256 eth, uint256 token1, uint256 token2) {
        (Land storage land, ) = _getLandByIdInternal(landId);
        eth = land.ethRewardForTokens(tokensCount);
        token1 = land.tokenRewardForTokens(tokensCount);
        token2 = land.token2RewardForTokens(tokensCount);
    }

    function getRewardForAccount(
        uint256 landId,
        address account
    ) external view returns (uint256 eth, uint256 token1, uint256 token2) {
        (Land storage land, uint8 number) = _getLandByIdInternal(landId);
        AccLandData memory acc = accs[account][number - 1];
        if (acc.takePeriod == land.periodNumber()) {
            return (0, 0, 0);
        }
        eth = land.ethRewardPeriod(acc.tokenStaked);
        token1 = land.tokenRewardPeriod(acc.tokenStaked);
        token2 = land.token2RewardPeriod(acc.tokenStaked);
    }

    function _getLandNumber(
        AccLandData memory acc
    ) private view returns (uint8) {
        if (acc.landId == 0) return 0;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            if (_lands[i].id == acc.landId) return i + 1;
        }
        return 0;
    }

    function getLandByNumber(uint8 number) external view returns (Land memory) {
        return _getLandByNumber(number);
    }

    function _getLandByNumber(
        uint8 number
    ) private view returns (Land storage) {
        require(
            number >= 1 && number <= maxLandsCount,
            ERR_INCORRECT_WORLD_NUMBER
        );
        return _lands[number - 1];
    }

    function getLandNumberById(uint256 id) public view returns (uint8) {
        if (id == 0) return 0;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            if (_lands[i].id == id) return i + 1;
        }
        return 0;
    }

    function isLandExists(uint256 id) public view returns (bool) {
        return _getLandById(id).isExists();
    }

    function getLandById(uint256 id) external view returns (Land memory) {
        return _getLandById(id);
    }

    function _getLandByIdInternal(
        uint256 id
    ) private view returns (Land storage land, uint8 number) {
        number = getLandNumberById(id);
        require(number > 0, ERR_NO_WORLD_WITH_ID);
        land = _lands[number - 1];
    }

    function _getLandById(
        uint256 id
    ) internal view returns (Land storage land) {
        (land, ) = _getLandByIdInternal(id);
    }

    function getLandTakePeriod(uint256 landId) external view returns (uint256) {
        return _getLandById(landId).periodNumber();
    }

    function tokenStacked() public view returns (uint256) {
        uint256 res;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            if (!_lands[i].isExists()) continue;
            res += _lands[i].tokenStaked;
        }
        return res;
    }

    function token2Total() public view returns (uint256) {
        return _token2.balanceOf(address(this));
    }

    function ethOnLands() public view returns (uint256) {
        uint256 res;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            res += _lands[i].ethOnLand();
        }
        return res;
    }

    function tokenOnLands() public view returns (uint256) {
        uint256 res;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            res += _lands[i].tokenOnPeriod();
        }
        return res;
    }

    function tokenOnLandsRewardWithStacks() public view returns (uint256) {
        uint256 res;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            res += _lands[i].token1 + _lands[i].tokenStaked;
        }
        return res;
    }

    function token2OnLands() public view returns (uint256) {
        uint256 res;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            res += _lands[i].token2OnLand();
        }
        return res;
    }

    function accountsOnLands() public view returns (uint256) {
        uint256 res;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            res += _lands[i].accountsCount;
        }
        return res;
    }

    function landsCount() public view returns (uint8) {
        uint8 res;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            if (_lands[i].id > 0) ++res;
        }
        return res;
    }

    function _getEmptyLandNumber() internal view returns (uint8) {
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            if (_lands[i].id == 0) return i + 1;
        }
        return 0;
    }

    function ethRewardsCount() public view returns (uint256) {
        return address(this).balance - ethOnLands();
    }

    function tokenRewardsCount() public view returns (uint256) {
        return _token.balanceOf(address(this)) - tokenOnLandsRewardWithStacks();
    }

    function token2RewardsCount() public view returns (uint256) {
        return token2Total() - token2OnLands();
    }

    function _generateLandEth() private returns (uint256) {
        return
            (ethRewardsCount() *
                _rand(landRewardPercentMin, landRewardPercentMax)) / 1000;
    }

    function _generateLandToken1() private returns (uint256) {
        return
            (tokenRewardsCount() *
                _rand(landRewardPercentMin, landRewardPercentMax)) / 1000;
    }

    function _generateLandToken2() private returns (uint256) {
        return
            (token2RewardsCount() *
                _rand(landRewardPercentMin, landRewardPercentMax)) / 1000;
    }

    function _addRewardsToLand(Land storage land) private {
        land.eth += _generateLandEth();
        land.token1 += _generateLandToken1();
        land.token2 += _generateLandToken2();
    }

    function getLands() external view returns (LandData[maxLandsCount] memory) {
        LandData[maxLandsCount] memory res;
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            if (!_lands[i].isExists()) continue;
            res[i] = _lands[i].getData(i + 1);
        }
        return res;
    }

    function getLandData(
        uint256 landId
    ) external view returns (LandData memory) {
        (Land storage land, uint8 number) = _getLandByIdInternal(landId);
        return land.getData(number);
    }

    function _createLand(uint8 number) private {
        Land storage land = _getLandByNumber(number);
        land.id = ++landslCreatedTotal;
        uint256 periodTake = _rand(
            landTakeGoldSecondsMin,
            landTakeGoldSecondsMax
        );
        uint256 periodWait = _rand(
            landPeriodWaitSecondsMin,
            landPeriodWaitSecondsMax
        );
        land.periodSeconds = periodTake + periodWait;
        land.takeGoldSeconds = periodTake;
        land.creationTime = block.timestamp;
        _addRewardsToLand(land);
        _newLandTime = block.timestamp + _rand(newLandTimeMin, newLandTimeMax);
    }

    function _isNeedEraseLand(Land memory land) private view returns (bool) {
        return land.id > 0 && !land.isExists();
    }

    function refreshLand(uint8 number) external {
        _refreshLand(_getLandByNumber(number), number);
        _createNewLands();
    }

    function _refreshLand(Land storage land, uint8 number) private {
        if (_eraseLand(land, number)) return;
        _tryNextTakePeriodSnapshot(land);
    }

    function _eraseLand(
        Land storage land,
        uint8 number
    ) private returns (bool) {
        require(
            number >= 1 && number <= maxLandsCount,
            ERR_INCORRECT_WORLD_NUMBER
        );
        if (!_isNeedEraseLand(land)) return false;
        uint256 tokenToBurn = land.token1 + land.tokenStaked;
        if (tokenToBurn > 0) _token.transfer(address(0), tokenToBurn);
        delete _lands[number - 1];
        return true;
    }

    function refreshLands() external {
        _refreshLandsErases();
        _refreshLandsTakePeriods();
        _createNewLands();
    }

    function createNewLands() external {
        _createNewLands();
    }

    function _createNewLands() private {
        if (!isInitialized) return;
        // time limit
        if (block.timestamp < _newLandTime) return;
        // getting new land number
        uint8 newLandNumber = _getEmptyLandNumber();
        if (newLandNumber == 0) return;
        // creating the new land
        _createLand(newLandNumber);
    }

    function _refreshLandsTakePeriods() private {
        for (uint8 i = 0; i < maxLandsCount; ++i) {
            _tryNextTakePeriodSnapshot(_lands[i]);
        }
    }

    function _refreshLandsErases() private {
        for (uint8 i = 1; i <= maxLandsCount; ++i) {
            _eraseLand(_lands[i - 1], i);
        }
    }
}

File 2 of 6 : IERC20.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

File 3 of 6 : AccLandData.sol
pragma solidity ^0.8.23;

struct AccLandData {
    uint256 landId; // id of the land or 0
    uint256 tokenStaked; // count of staked tokens of account
    uint256 takePeriod; // last used take period
}

File 4 of 6 : ISunra.sol
pragma solidity ^0.8.23;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";

interface ISunra {
    function token1() external view returns (IERC20);

    function token2() external view returns (IERC20);

    function createNewLands() external;
}

File 5 of 6 : Land.sol
pragma solidity ^0.8.23;

struct Land {
    // constant for land
    uint256 id; // id of land or 0 if it not exists
    uint256 creationTime; // when was created
    uint256 periodSeconds; // period time season
    uint256 takeGoldSeconds; // time seconds to extract gold on new take period
    // erase
    uint256 eraseTime; // time when will be eraseed or 0
    // total savings
    uint256 eth; // eth to take
    uint256 token1; // token1 to take
    uint256 token2; // token2 to take
    // accounts data
    uint256 accountsCount; // accounts count on land
    uint256 tokenStaked; // total staked tokens
    // snapshot
    uint256 takePeriodSnapshot; // number of snapshot period to take
    uint256 tokenStakedSnapshot; // tokens staked for takes on take period
    uint256 ethSnapshot;
    uint256 tokenSnapshot;
    uint256 token2Snapshot;
}

File 6 of 6 : LandPrediction.sol
pragma solidity ^0.8.23;

import "./Land.sol";

struct Period {
    uint256 number; // period number
    uint256 eth; // ether on period for rewards
    uint256 token; // token on period (not includes stakes) for rewards
    uint256 token2; // token2 on period for rewards
    uint256 tokenStaked; // token stacks sum on period
    bool isTakeTime; // is now take time or not
    bool isDirty; // is period dirty
    uint256 time; // time since the beginning of the period
    uint256 remainingTime; // remaining time until next period
    uint256 endTime; // when period expires
}

struct LandData {
    Land land; // land data
    Period period; // land period data
    uint8 number; // land number
    bool isExists; // is land exists
}

library LandPrediction {
    // time from period start
    function periodTime(Land memory land) internal view returns (uint256) {
        return (block.timestamp - land.creationTime) % land.periodSeconds;
    }

    function nextPeriodRemainingTime(
        Land memory land
    ) internal view returns (uint256) {
        return land.periodSeconds - periodTime(land);
    }

    function nextPeriodTime(
        Land memory land
    ) internal view returns (uint256) {
        return block.timestamp + nextPeriodRemainingTime(land);
    }

    function periodNumber(
        Land memory land
    ) internal view returns (uint256) {
        return (block.timestamp - land.creationTime) / land.periodSeconds;
    }

    function isTakePeriodDirty(
        Land memory land
    ) internal view returns (bool) {
        return land.takePeriodSnapshot != periodNumber(land);
    }

    function isTakeTime(Land memory land) internal view returns (bool) {
        return periodTime(land) < land.takeGoldSeconds;
    }

    function ethOnLand(Land memory land) internal view returns (uint256) {
        if (!isExists(land)) return 0;
        return land.eth;
    }

    function token2OnLand(
        Land memory land
    ) internal view returns (uint256) {
        if (!isExists(land)) return 0;
        return land.token2;
    }

    function ethOnPeriod(Land memory land) internal view returns (uint256) {
        if (!isExists(land)) return 0;
        if (isTakePeriodDirty(land)) return land.eth;
        else return land.ethSnapshot;
    }

    function tokenOnPeriod(
        Land memory land
    ) internal view returns (uint256) {
        if (!isExists(land)) return 0;
        if (isTakePeriodDirty(land)) return land.token1;
        else return land.tokenSnapshot;
    }

    function token2OnPeriod(
        Land memory land
    ) internal view returns (uint256) {
        if (!isExists(land)) return 0;
        if (isTakePeriodDirty(land)) return land.token2;
        else return land.token2Snapshot;
    }

    function tokenStakedOnPeriod(
        Land memory land
    ) internal view returns (uint256) {
        if (isTakePeriodDirty(land)) return land.tokenStaked;
        else return land.tokenStakedSnapshot;
    }

    function ethRewardForTokens(
        Land memory land,
        uint256 tokenstaked
    ) internal view returns (uint256) {
        if (tokenstaked == 0 || !isExists(land)) return 0;
        if (land.tokenStaked == 0) return land.eth;
        return (land.eth * tokenstaked) / land.tokenStaked;
    }

    function tokenRewardForTokens(
        Land memory land,
        uint256 tokenstaked
    ) internal view returns (uint256) {
        if (tokenstaked == 0 || !isExists(land)) return 0;
        if (land.tokenStaked == 0) return land.token1;
        return (land.token1 * tokenstaked) / land.tokenStaked;
    }

    function token2RewardForTokens(
        Land memory land,
        uint256 tokenstaked
    ) internal view returns (uint256) {
        if (tokenstaked == 0 || !isExists(land)) return 0;
        if (land.tokenStaked == 0) return land.token2;
        return (land.token2 * tokenstaked) / land.tokenStaked;
    }

    function ethRewardPeriod(
        Land memory land,
        uint256 tokenstaked
    ) internal view returns (uint256) {
        if (tokenstaked == 0 || !isExists(land)) return 0;
        uint256 stacke = tokenStakedOnPeriod(land);
        if (stacke == 0) return ethOnPeriod(land);
        return (ethOnPeriod(land) * tokenstaked) / stacke;
    }

    function tokenRewardPeriod(
        Land memory land,
        uint256 tokenstaked
    ) internal view returns (uint256) {
        if (tokenstaked == 0 || !isExists(land)) return 0;
        uint256 stacke = tokenStakedOnPeriod(land);
        if (stacke == 0) return tokenOnPeriod(land);
        return (tokenOnPeriod(land) * tokenstaked) / stacke;
    }

    function token2RewardPeriod(
        Land memory land,
        uint256 tokenstaked
    ) internal view returns (uint256) {
        if (tokenstaked == 0 || !isExists(land)) return 0;
        uint256 stacke = tokenStakedOnPeriod(land);
        if (stacke == 0) return token2OnPeriod(land);
        return (token2OnPeriod(land) * tokenstaked) / stacke;
    }

    function isExists(Land memory land) internal view returns (bool) {
        return
            land.id > 0 &&
            (land.eraseTime == 0 || (block.timestamp < land.eraseTime));
    }

    function getData(
        Land memory land,
        uint8 number
    ) internal view returns (LandData memory) {
        return
            LandData(
                land,
                Period(
                    periodNumber(land),
                    ethOnPeriod(land),
                    tokenOnPeriod(land),
                    token2OnPeriod(land),
                    tokenStakedOnPeriod(land),
                    isTakeTime(land),
                    isTakePeriodDirty(land),
                    periodTime(land),
                    nextPeriodRemainingTime(land),
                    nextPeriodTime(land)
                ),
                number,
                isExists(land)
            );
    }

    function changeEraseSeconds(Land storage land, uint256 timer) internal {
        land.eraseTime = block.timestamp + timer;
    }
}

Settings
{
  "optimizer": {
    "enabled": true,
    "runs": 200
  },
  "evmVersion": "paris",
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "devdoc",
        "userdoc",
        "metadata",
        "abi"
      ]
    }
  },
  "libraries": {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"master_","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[],"name":"OwnershipRenounced","type":"event"},{"inputs":[],"name":"accountsOnLands","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token_","type":"address"},{"internalType":"address","name":"token2_","type":"address"}],"name":"changeErc20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"changeEthMasterFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"chance","type":"uint256"}],"name":"changeLandEraseStartChance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"landPeriodWaitSecondsMin_","type":"uint256"},{"internalType":"uint256","name":"landPeriodWaitSecondsMax_","type":"uint256"}],"name":"changePeriodWaitSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"min","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"name":"changePrizePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"landTakeGoldSecondsMin_","type":"uint256"},{"internalType":"uint256","name":"landTakeGoldSecondsMax_","type":"uint256"}],"name":"changeTakeGoldSeconds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"createNewLands","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"ethMasterFeePercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethOnLands","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ethRewardsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"acc","type":"address"},{"internalType":"uint256","name":"landId","type":"uint256"}],"name":"getAccSlotForLand","outputs":[{"components":[{"internalType":"uint256","name":"landId","type":"uint256"},{"internalType":"uint256","name":"tokenStaked","type":"uint256"},{"internalType":"uint256","name":"takePeriod","type":"uint256"}],"internalType":"struct AccLandData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"getAccSlots","outputs":[{"components":[{"internalType":"uint256","name":"landId","type":"uint256"},{"internalType":"uint256","name":"tokenStaked","type":"uint256"},{"internalType":"uint256","name":"takePeriod","type":"uint256"}],"internalType":"struct AccLandData[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getLandById","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"creationTime","type":"uint256"},{"internalType":"uint256","name":"periodSeconds","type":"uint256"},{"internalType":"uint256","name":"takeGoldSeconds","type":"uint256"},{"internalType":"uint256","name":"eraseTime","type":"uint256"},{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"token1","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"},{"internalType":"uint256","name":"accountsCount","type":"uint256"},{"internalType":"uint256","name":"tokenStaked","type":"uint256"},{"internalType":"uint256","name":"takePeriodSnapshot","type":"uint256"},{"internalType":"uint256","name":"tokenStakedSnapshot","type":"uint256"},{"internalType":"uint256","name":"ethSnapshot","type":"uint256"},{"internalType":"uint256","name":"tokenSnapshot","type":"uint256"},{"internalType":"uint256","name":"token2Snapshot","type":"uint256"}],"internalType":"struct Land","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"number","type":"uint8"}],"name":"getLandByNumber","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"creationTime","type":"uint256"},{"internalType":"uint256","name":"periodSeconds","type":"uint256"},{"internalType":"uint256","name":"takeGoldSeconds","type":"uint256"},{"internalType":"uint256","name":"eraseTime","type":"uint256"},{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"token1","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"},{"internalType":"uint256","name":"accountsCount","type":"uint256"},{"internalType":"uint256","name":"tokenStaked","type":"uint256"},{"internalType":"uint256","name":"takePeriodSnapshot","type":"uint256"},{"internalType":"uint256","name":"tokenStakedSnapshot","type":"uint256"},{"internalType":"uint256","name":"ethSnapshot","type":"uint256"},{"internalType":"uint256","name":"tokenSnapshot","type":"uint256"},{"internalType":"uint256","name":"token2Snapshot","type":"uint256"}],"internalType":"struct Land","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"landId","type":"uint256"}],"name":"getLandData","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"creationTime","type":"uint256"},{"internalType":"uint256","name":"periodSeconds","type":"uint256"},{"internalType":"uint256","name":"takeGoldSeconds","type":"uint256"},{"internalType":"uint256","name":"eraseTime","type":"uint256"},{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"token1","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"},{"internalType":"uint256","name":"accountsCount","type":"uint256"},{"internalType":"uint256","name":"tokenStaked","type":"uint256"},{"internalType":"uint256","name":"takePeriodSnapshot","type":"uint256"},{"internalType":"uint256","name":"tokenStakedSnapshot","type":"uint256"},{"internalType":"uint256","name":"ethSnapshot","type":"uint256"},{"internalType":"uint256","name":"tokenSnapshot","type":"uint256"},{"internalType":"uint256","name":"token2Snapshot","type":"uint256"}],"internalType":"struct Land","name":"land","type":"tuple"},{"components":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"},{"internalType":"uint256","name":"tokenStaked","type":"uint256"},{"internalType":"bool","name":"isTakeTime","type":"bool"},{"internalType":"bool","name":"isDirty","type":"bool"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"remainingTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"internalType":"struct Period","name":"period","type":"tuple"},{"internalType":"uint8","name":"number","type":"uint8"},{"internalType":"bool","name":"isExists","type":"bool"}],"internalType":"struct LandData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getLandNumberById","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"landId","type":"uint256"}],"name":"getLandTakePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLands","outputs":[{"components":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"creationTime","type":"uint256"},{"internalType":"uint256","name":"periodSeconds","type":"uint256"},{"internalType":"uint256","name":"takeGoldSeconds","type":"uint256"},{"internalType":"uint256","name":"eraseTime","type":"uint256"},{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"token1","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"},{"internalType":"uint256","name":"accountsCount","type":"uint256"},{"internalType":"uint256","name":"tokenStaked","type":"uint256"},{"internalType":"uint256","name":"takePeriodSnapshot","type":"uint256"},{"internalType":"uint256","name":"tokenStakedSnapshot","type":"uint256"},{"internalType":"uint256","name":"ethSnapshot","type":"uint256"},{"internalType":"uint256","name":"tokenSnapshot","type":"uint256"},{"internalType":"uint256","name":"token2Snapshot","type":"uint256"}],"internalType":"struct Land","name":"land","type":"tuple"},{"components":[{"internalType":"uint256","name":"number","type":"uint256"},{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"token","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"},{"internalType":"uint256","name":"tokenStaked","type":"uint256"},{"internalType":"bool","name":"isTakeTime","type":"bool"},{"internalType":"bool","name":"isDirty","type":"bool"},{"internalType":"uint256","name":"time","type":"uint256"},{"internalType":"uint256","name":"remainingTime","type":"uint256"},{"internalType":"uint256","name":"endTime","type":"uint256"}],"internalType":"struct Period","name":"period","type":"tuple"},{"internalType":"uint8","name":"number","type":"uint8"},{"internalType":"bool","name":"isExists","type":"bool"}],"internalType":"struct LandData[4]","name":"","type":"tuple[4]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"landId","type":"uint256"},{"internalType":"address","name":"account","type":"address"}],"name":"getRewardForAccount","outputs":[{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"token1","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"landId","type":"uint256"},{"internalType":"uint256","name":"tokensCount","type":"uint256"}],"name":"getRewardForTokens","outputs":[{"internalType":"uint256","name":"eth","type":"uint256"},{"internalType":"uint256","name":"token1","type":"uint256"},{"internalType":"uint256","name":"token2","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"landId","type":"uint256"},{"internalType":"uint256","name":"tokensCount","type":"uint256"}],"name":"goToLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isInitialized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"isLandExists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"landNumber","type":"uint8"}],"name":"isLandTakeSeason","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landEraseStartChance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landEraseTimeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landEraseTimeMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landPeriodWaitSecondsMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landPeriodWaitSecondsMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landRewardPercentMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landRewardPercentMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landTakeGoldSecondsMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landTakeGoldSecondsMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landsCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"landslCreatedTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"landId","type":"uint256"}],"name":"leaveLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"master","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLandsCount","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newLandTimeMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"newLandTimeMin","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"number","type":"uint8"}],"name":"refreshLand","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"refreshLands","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"landId","type":"uint256"}],"name":"takeGold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token2","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token2OnLands","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token2RewardsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token2Total","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOnLands","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenOnLandsRewardWithStacks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenRewardsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenStacked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a060405260296001556001600355603d600755618ca160085560336009556101f5600a55603d600b55610259600c55601f600d55603d600e55610e11600f553480156200004c57600080fd5b50604051620047cc380380620047cc8339810160408190526200006f91620000a4565b600080546001600160a01b0319908116339081179092556001600160a01b03909216608052604d8054909216179055620000d6565b600060208284031215620000b757600080fd5b81516001600160a01b0381168114620000cf57600080fd5b9392505050565b6080516146d3620000f9600039600081816103a001526109ea01526146d36000f3fe6080604052600436106103795760003560e01c80639b773945116101d1578063dbea023811610102578063f094a45e116100a0578063f5dabbef1161006f578063f5dabbef14610a82578063fa71fbef14610a97578063fc54d97b14610ab7578063fe108c2514610acc57600080fd5b8063f094a45e14610a0c578063f13da00514610a2c578063f29b004c14610a4c578063f2fde38b14610a6257600080fd5b8063e4066536116100dc578063e406653614610983578063e5e75dcb146109a3578063e8701c33146109b8578063ee97f7f3146109d857600080fd5b8063dbea023814610943578063e3a6bcd514610959578063e3d258a51461096e57600080fd5b8063ba1c7b2e1161016f578063d0d7bef411610149578063d0d7bef4146108d0578063d21220a7146108f0578063d6156ca91461090e578063d9ced0da1461092357600080fd5b8063ba1c7b2e14610890578063c20741b6146108a6578063cfbc2fb2146108bb57600080fd5b8063a71dbec2116101ab578063a71dbec21461080d578063ab9e611f1461082d578063b451b0e11461085a578063b846199a1461087a57600080fd5b80639b773945146107ab5780639ddf9351146107cb578063a24a29d7146107f857600080fd5b80634966abb6116102ab57806368a2bffe11610249578063715018a611610223578063715018a614610734578063727c04c8146107495780638129fc1c146107765780638da5cb5b1461078b57600080fd5b806368a2bffe146106d25780636d36ec48146106f25780636fe0c9061461071257600080fd5b80635cbcc0e8116102855780635cbcc0e81461067c5780636669fdfa1461069257806366b2cac0146106a757806367056586146106bd57600080fd5b80634966abb61461063c5780634b02a6de1461065157806358b92a081461066657600080fd5b80632b97a8e51161031857806332845545116102f257806332845545146105a457806334c985da146105df578063392e53cd1461060c57806345b7f4061461062657600080fd5b80632b97a8e51461054f5780632d21c3fb146105645780632d84da7e1461058457600080fd5b80631c9afd0f116103545780631c9afd0f146104ca5780631d92620a146104f157806324194ef51461050757806325be124e1461051d57600080fd5b80623623e21461045c5780630d3823f2146104855780631328c519146104b557600080fd5b3661045757600060646001543461039091906141ae565b61039a91906141db565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168260405160006040518083038185875af1925050503d8060008114610409576040519150601f19603f3d011682016040523d82523d6000602084013e61040e565b606091505b505090508060405180604001604052806002815260200161233160f01b815250906104555760405162461bcd60e51b815260040161044c91906141ef565b60405180910390fd5b005b600080fd5b34801561046857600080fd5b50610472600a5481565b6040519081526020015b60405180910390f35b34801561049157600080fd5b506104a56104a036600461423e565b610aec565b604051901515815260200161047c565b3480156104c157600080fd5b50610455610baa565b3480156104d657600080fd5b506104df610bc4565b60405160ff909116815260200161047c565b3480156104fd57600080fd5b50610472600f5481565b34801561051357600080fd5b5061047260095481565b34801561052957600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161047c565b34801561055b57600080fd5b50610472603c81565b34801561057057600080fd5b5061045561057f366004614257565b610c13565b34801561059057600080fd5b5061045561059f36600461423e565b610c30565b3480156105b057600080fd5b506105c46105bf366004614291565b610da0565b6040805193845260208401929092529082015260600161047c565b3480156105eb57600080fd5b506105ff6105fa3660046142bd565b61110f565b60405161047c91906142e7565b34801561061857600080fd5b506002546104a59060ff1681565b34801561063257600080fd5b5061047260075481565b34801561064857600080fd5b50610472611166565b34801561065d57600080fd5b50610472611250565b34801561067257600080fd5b50610472600c5481565b34801561068857600080fd5b50610472600e5481565b34801561069e57600080fd5b506104df600481565b3480156106b357600080fd5b5061047260085481565b3480156106c957600080fd5b50610455610bba565b3480156106de57600080fd5b506104556106ed366004614308565b6112bc565b3480156106fe57600080fd5b5061047261070d36600461423e565b6117ac565b34801561071e57600080fd5b50610727611864565b60405161047c9190614467565b34801561074057600080fd5b50610455611a47565b34801561075557600080fd5b5061076961076436600461423e565b611aaa565b60405161047c91906144a5565b34801561078257600080fd5b50610455611b66565b34801561079757600080fd5b50600054610537906001600160a01b031681565b3480156107b757600080fd5b506104556107c63660046144b4565b611bbf565b3480156107d757600080fd5b506107eb6107e63660046144de565b611c0d565b60405161047c91906144f9565b34801561080457600080fd5b50610472611dcf565b34801561081957600080fd5b506104df61082836600461423e565b611e55565b34801561083957600080fd5b5061084d61084836600461423e565b611eba565b60405161047c919061455b565b34801561086657600080fd5b50610455610875366004614308565b611f89565b34801561088657600080fd5b50610472600b5481565b34801561089c57600080fd5b50610472610e1081565b3480156108b257600080fd5b50610472612036565b3480156108c757600080fd5b5061047261204a565b3480156108dc57600080fd5b506104556108eb36600461423e565b612134565b3480156108fc57600080fd5b506004546001600160a01b0316610537565b34801561091a57600080fd5b50600154610472565b34801561092f57600080fd5b5061045561093e366004614308565b612167565b34801561094f57600080fd5b5061047260065481565b34801561096557600080fd5b506104726121e6565b34801561097a57600080fd5b506104726121f4565b34801561098f57600080fd5b5061045561099e36600461423e565b612261565b3480156109af57600080fd5b506104726123e2565b3480156109c457600080fd5b506107696109d3366004614257565b6124cc565b3480156109e457600080fd5b506105377f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1857600080fd5b50610455610a27366004614308565b6124dd565b348015610a3857600080fd5b506105c4610a47366004614308565b61255c565b348015610a5857600080fd5b50610472600d5481565b348015610a6e57600080fd5b50610455610a7d3660046144de565b612789565b348015610a8e57600080fd5b506104726127ea565b348015610aa357600080fd5b506104a5610ab2366004614257565b61284e565b348015610ac357600080fd5b50610472612906565b348015610ad857600080fd5b50610455610ae736600461423e565b61294b565b6000610ba4610afa83612987565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e909101546101c0820152612992565b92915050565b610bb26129b6565b610bba612a02565b610bc2612a3b565b565b60008060005b600460ff82161015610c0d57600060108260ff1660048110610bee57610bee61456a565b600f0201541115610c0557610c0282614580565b91505b600101610bca565b50919050565b610c25610c1f82612a76565b82612af5565b610c2d612a3b565b50565b600080610c3c83612b15565b91509150610c4a8282612b8f565b336000908152604c60205260408120610c6460018461459f565b60ff1660048110610c7757610c7761456a565b600302019050610d5281604051806060016040529081600082015481526020016001820154815260200160028201548152505084604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050612d7b565b60405180604001604052806002815260200161233760f01b81525090610d8b5760405162461bcd60e51b815260040161044c91906141ef565b50610d97338285612dbe565b50505050505050565b6000806000806000610db187612b15565b6001600160a01b0388166000908152604c6020526040812092945090925090610ddb60018461459f565b60ff1660048110610dee57610dee61456a565b6003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509050610ec883604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050613294565b816040015103610ee5576000806000955095509550505050611108565b602080820151604080516101e081018252865481526001870154938101939093526002860154908301526003850154606083015260048501546080830152600585015460a0830152600685015460c0830152600785015460e083015260088501546101008301526009850154610120830152600a850154610140830152600b850154610160830152600c850154610180830152600d8501546101a0830152600e8501546101c0830152610f9891906132b5565b602080830151604080516101e081018252875481526001880154938101939093526002870154908301526003860154606083015260048601546080830152600586015460a0830152600686015460c0830152600786015460e083015260088601546101008301526009860154610120830152600a860154610140830152600b860154610160830152600c860154610180830152600d8601546101a0830152600e8601546101c083015291975061104d9161331c565b602080830151604080516101e081018252875481526001880154938101939093526002870154908301526003860154606083015260048601546080830152600586015460a0830152600686015460c0830152600786015460e083015260088601546101008301526009860154610120830152600a860154610140830152600b860154610160830152600c860154610180830152600d8601546101a0830152600e8601546101c083015291965061110291613367565b93505050505b9250925092565b61113360405180606001604052806000815260200160008152602001600081525090565b61113d83836133b2565b604080516060810182528254815260018301546020820152600290920154908201529392505050565b60008060005b600460ff82161015610c0d5761123c60108260ff16600481106111915761119161456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250506134c5565b61124690836145b8565b915060010161116c565b60008060005b600460ff82161015610c0d5760108160ff16600481106112785761127861456a565b600f02016009015460108260ff16600481106112965761129661456a565b600f0201600601546112a891906145b8565b6112b290836145b8565b9150600101611256565b60028054604080518082019091529182526108cd60f21b602083015260ff166112f85760405162461bcd60e51b815260040161044c91906141ef565b5060008061130584612b15565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c082015291935091506113b790612992565b60405180604001604052806002815260200161233560f01b815250906113f05760405162461bcd60e51b815260040161044c91906141ef565b506113fb82826134e4565b506114068282612af5565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c08201526114b390612992565b60405180604001604052806002815260200161233560f01b815250906114ec5760405162461bcd60e51b815260040161044c91906141ef565b50600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561153b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155f91906145cb565b600480546040516323b872dd60e01b81523392810192909252306024830152604482018790529192506001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e091906145e4565b50600480546040516370a0823160e01b8152309281019290925260009183916001600160a01b0316906370a0823190602401602060405180830381865afa15801561162f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165391906145cb565b61165d9190614606565b336000908152604c602052604081209192509061167b60018661459f565b60ff166004811061168e5761168e61456a565b60030201905084600001548160000154146116b95784600801600081546116b490614619565b909155505b8454808255604080516101e081018252918252600187015460208301526002870154908201526003860154606082015260048601546080820152600586015460a0820152600686015460c0820152600786015460e082015260088601546101008201526009860154610120820152600a860154610140820152600b860154610160820152600c860154610180820152600d8601546101a0820152600e8601546101c082015261176790613294565b81600201819055508181600101600082825461178391906145b8565b925050819055508185600901600082825461179e91906145b8565b909155505050505050505050565b6000610ba46117ba83612987565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e909101546101c0820152613294565b61186c61406f565b61187461406f565b60005b600460ff82161015610c0d5761194760108260ff166004811061189c5761189c61456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050612992565b15611a3f57611a2461195a826001614632565b60108360ff16600481106119705761197061456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152505061373390919063ffffffff16565b828260ff1660048110611a3957611a3961456a565b60200201525b600101611877565b6000546001600160a01b03163314611a715760405162461bcd60e51b815260040161044c9061464b565b600080546001600160a01b03191681556040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce9190a1565b611ab261409c565b611abb82612987565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e909101546101c082015292915050565b6000546001600160a01b03163314611b905760405162461bcd60e51b815260040161044c9061464b565b611b98613807565b60015b600260ff821611610c2d57611baf81613854565b611bb881614580565b9050611b9b565b604d546001600160a01b03163314611bd657600080fd5b604d80546001600160a01b0319908116909155600480546001600160a01b0394851690831617905560058054929093169116179055565b60408051600480825260a0820190925260609160009190816020015b611c4d60405180606001604052806000815260200160008152602001600081525090565b815260200190600190039081611c2957905050905060005b600460ff82161015611dc8576001600160a01b0384166000908152604c6020526040812060ff831660048110611c9d57611c9d61456a565b600302019050600060108360ff1660048110611cbb57611cbb61456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250509050611d6c81612992565b611d77575050611dc0565b6040805160608101825283548152600184015460208201526002840154918101919091528451859060ff8616908110611db257611db261456a565b602002602001018190525050505b600101611c65565b5092915050565b6000611dd9611250565b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4691906145cb565b611e509190614606565b905090565b600081600003611e6757506000919050565b60005b600460ff82161015611eb1578260108260ff1660048110611e8d57611e8d61456a565b600f02015403611ea957611ea2816001614632565b9392505050565b600101611e6a565b50600092915050565b611ec2614112565b600080611ece84612b15565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c08201529193509150611f819082613733565b949350505050565b6000546001600160a01b03163314611fb35760405162461bcd60e51b815260040161044c9061464b565b604080518082019091526002815261233360f01b602082015281831115611fed5760405162461bcd60e51b815260040161044c91906141ef565b50604080518082019091526002815261233360f01b60208201526103e882111561202a5760405162461bcd60e51b815260040161044c91906141ef565b50600991909155600a55565b6000612040611166565b611e509047614606565b60008060005b600460ff82161015610c0d5761212060108260ff16600481106120755761207561456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250506138e2565b61212a90836145b8565b9150600101612050565b6000546001600160a01b0316331461215e5760405162461bcd60e51b815260040161044c9061464b565b610c2d8161391d565b6000546001600160a01b031633146121915760405162461bcd60e51b815260040161044c9061464b565b6000821180156121a15750808211155b60405180604001604052806002815260200161233360f01b815250906121da5760405162461bcd60e51b815260040161044c91906141ef565b50600791909155600855565b60006121f06123e2565b611e465b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561223d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5091906145cb565b60008061226d83612b15565b9150915061227b8282612b8f565b336000908152604c6020526040812061229560018461459f565b60ff16600481106122a8576122a861456a565b600302018054604080518082019091526002815261119b60f11b60208201529192506122e75760405162461bcd60e51b815260040161044c91906141ef565b5060048054600183015460405163a9059cbb60e01b8152339381019390935260248301526001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561233d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236191906145e4565b50826008016000815461237390614672565b909155506001810154600984018054600090612390908490614606565b9091555050336000908152604c602052604090206123af60018461459f565b60ff16600481106123c2576123c261456a565b600060039190910291909101818155600181018290556002015550505050565b60008060005b600460ff82161015610c0d576124b860108260ff166004811061240d5761240d61456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050613930565b6124c290836145b8565b91506001016123e8565b6124d461409c565b611abb82612a76565b6000546001600160a01b031633146125075760405162461bcd60e51b815260040161044c9061464b565b6000821180156125175750808211155b60405180604001604052806002815260200161233360f01b815250906125505760405162461bcd60e51b815260040161044c91906141ef565b50600e91909155600f55565b60008060008061256b86612b15565b50604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e8201546101c082015290915061261d908661394f565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c08201529094506126ce90866139a9565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c082015290935061277f90866139f9565b9150509250925092565b6000546001600160a01b031633146127b35760405162461bcd60e51b815260040161044c9061464b565b6000546001600160a01b03166127c857600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008060005b600460ff82161015610c0d5761281560108260ff166004811061189c5761189c61456a565b156128465760108160ff16600481106128305761283061456a565b600f0201600901548261284391906145b8565b91505b6001016127f0565b6000610ba461285c83612a76565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e909101546101c0820152613a49565b60008060005b600460ff82161015610c0d5760108160ff166004811061292e5761292e61456a565b600f0201600801548261294191906145b8565b915060010161290c565b6000546001600160a01b031633146129755760405162461bcd60e51b815260040161044c9061464b565b6001811161298257600080fd5b600d55565b6000611dc882612b15565b805160009015801590610ba4575060808201511580610ba457505060800151421090565b60015b600460ff821611610c2d576129f160106129d460018461459f565b60ff16600481106129e7576129e761456a565b600f0201826134e4565b506129fb81614580565b90506129b9565b60005b600460ff82161015610c2d57612a3360108260ff1660048110612a2a57612a2a61456a565b600f0201613a60565b600101612a05565b60025460ff16612a4757565b604e54421015612a5357565b6000612a5d613cbc565b90508060ff16600003612a6d5750565b610c2d81613854565b600060018260ff1610158015612a905750600460ff831611155b6040518060400160405280600381526020016202331360ec1b81525090612aca5760405162461bcd60e51b815260040161044c91906141ef565b506010612ad860018461459f565b60ff1660048110612aeb57612aeb61456a565b600f020192915050565b612aff82826134e4565b15612b08575050565b612b1182613a60565b5050565b600080612b2183611e55565b905060008160ff161160405180604001604052806002815260200161046760f31b81525090612b635760405162461bcd60e51b815260040161044c91906141ef565b506010612b7160018361459f565b60ff1660048110612b8457612b8461456a565b600f02019150915091565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c0820152612c3c90612992565b60405180604001604052806002815260200161233560f01b81525090612c755760405162461bcd60e51b815260040161044c91906141ef565b50612c7e6129b6565b612c888282612af5565b612c90612a3b565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c0820152612d3d90612992565b60405180604001604052806002815260200161233560f01b81525090612d765760405162461bcd60e51b815260040161044c91906141ef565b505050565b6000612d8682612992565b8015612d965750612d9682613d0f565b8015611ea25750612da682613294565b6040840151612db69060016145b8565b109392505050565b6000806000612dcc84613a60565b600180860154604080516101e081018252875481529287015460208401526002870154908301526003860154606083015260048601546080830152600586015460a0830152600686015460c0830152600786015460e083015260088601546101008301526009860154610120830152600a860154610140830152600b860154610160830152600c860154610180830152600d8601546101a0830152600e8601546101c0830152612e7c91906132b5565b600180870154604080516101e081018252885481529288015460208401526002880154908301526003870154606083015260048701546080830152600587015460a0830152600687015460c0830152600787015460e083015260088701546101008301526009870154610120830152600a870154610140830152600b870154610160830152600c870154610180830152600d8701546101a0830152600e8701546101c0830152919450612f2e9161331c565b600180870154604080516101e081018252885481529288015460208401526002880154908301526003870154606083015260048701546080830152600587015460a0830152600687015460c0830152600787015460e083015260088701546101008301526009870154610120830152600a870154610140830152600b870154610160830152600c870154610180830152600d8701546101a0830152600e8701546101c0830152919350612fe091613367565b9050600161308f85604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050613294565b6130999190614606565b60028601558215613150576000866001600160a01b03168460405160006040518083038185875af1925050503d80600081146130f1576040519150601f19603f3d011682016040523d82523d6000602084013e6130f6565b606091505b505090508060405180604001604052806002815260200161233960f01b815250906131345760405162461bcd60e51b815260040161044c91906141ef565b50838560050160008282546131499190614606565b9091555050505b81156131ea576004805460405163a9059cbb60e01b81526001600160a01b03898116938201939093526024810185905291169063a9059cbb906044016020604051808303816000875af11580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cf91906145e4565b50818460060160008282546131e49190614606565b90915550505b80156132825760055460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015613243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326791906145e4565b508084600701600082825461327c9190614606565b90915550505b61328b84613d26565b93509350939050565b600081604001518260200151426132ab9190614606565b610ba491906141db565b60008115806132ca57506132c883612992565b155b156132d757506000610ba4565b60006132e284613e24565b9050806000036132fd576132f584613e46565b915050610ba4565b808361330886613e46565b61331291906141ae565b611f8191906141db565b6000811580613331575061332f83612992565b155b1561333e57506000610ba4565b600061334984613e24565b90508060000361335c576132f5846138e2565b8083613308866138e2565b600081158061337c575061337a83612992565b155b1561338957506000610ba4565b600061339484613e24565b9050806000036133a7576132f584613e7c565b808361330886613e7c565b600080821160405180604001604052806002815260200161233560f01b815250906133f05760405162461bcd60e51b815260040161044c91906141ef565b5060005b600460ff82161015613494576001600160a01b0384166000908152604c6020526040812060ff83166004811061342c5761342c61456a565b6003020190508381600001540361348b57805461344890610aec565b60405180604001604052806002815260200161119b60f11b815250906134815760405162461bcd60e51b815260040161044c91906141ef565b509150610ba49050565b506001016133f4565b506040805180820182526002815261119b60f11b6020820152905162461bcd60e51b815261044c91906004016141ef565b60006134d082612992565b6134dc57506000919050565b5060a0015190565b600060018260ff16101580156134fe5750600460ff831611155b6040518060400160405280600381526020016202331360ec1b815250906135385760405162461bcd60e51b815260040161044c91906141ef565b50604080516101e08101825284548152600185015460208201526002850154918101919091526003840154606082015260048401546080820152600584015460a0820152600684015460c0820152600784015460e082015260088401546101008201526009840154610120820152600a840154610140820152600b840154610160820152600c840154610180820152600d8401546101a0820152600e8401546101c08201526135e690613eb2565b6135f257506000610ba4565b60008360090154846006015461360891906145b8565b90508015613689576004805460405163a9059cbb60e01b8152600092810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613663573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368791906145e4565b505b601061369660018561459f565b60ff16600481106136a9576136a961456a565b600f0201600080820160009055600182016000905560028201600090556003820160009055600482016000905560058201600090556006820160009055600782016000905560088201600090556009820160009055600a820160009055600b820160009055600c820160009055600d820160009055600e8201600090555050600191505092915050565b61373b614112565b604051806080016040528084815260200160405180610140016040528061376187613294565b815260200161376f87613e46565b815260200161377d876138e2565b815260200161378b87613e7c565b815260200161379987613e24565b81526020016137a787613d0f565b151581526020016137b787613ed0565b151581526020016137c787613eea565b81526020016137d587613f0b565b81526020016137e387613f25565b9052815260ff841660208201526040016137fc85612992565b151590529392505050565b600280546040805180820190915291825261119960f11b602083015260ff16156138445760405162461bcd60e51b815260040161044c91906141ef565b506002805460ff19166001179055565b600061385f82612a76565b905060066000815461387090614619565b91829055508155600e54600f5460009161388991613f3a565b9050600061389b600754600854613f3a565b90506138a781836145b8565b6002840155600383018290554260018401556138c283613f6d565b6138cf603c610e10613f3a565b6138d990426145b8565b604e5550505050565b60006138ed82612992565b6138f957506000919050565b61390282613ed0565b1561390f575060c0015190565b506101a0015190565b919050565b603381111561392b57600080fd5b600155565b600061393b82612992565b61394757506000919050565b5060e0015190565b6000811580613964575061396283612992565b155b1561397157506000610ba4565b826101200151600003613989575060a0820151610ba4565b826101200151828460a0015161399f91906141ae565b611ea291906141db565b60008115806139be57506139bc83612992565b155b156139cb57506000610ba4565b8261012001516000036139e3575060c0820151610ba4565b826101200151828460c0015161399f91906141ae565b6000811580613a0e5750613a0c83612992565b155b15613a1b57506000610ba4565b826101200151600003613a33575060e0820151610ba4565b826101200151828460e0015161399f91906141ae565b805160009015801590610ba45750610ba482613d0f565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e8201546101c0820152613b0d90612992565b1580613b1c5750600481015415155b80613bd15750604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e8201546101c0820152613bcf90613ed0565b155b15613bd95750565b613be281613f6d565b6009810154600b8201819055604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526101208101829052600a830154610140820152610160810191909152600c820154610180820152600d8201546101a0820152600e8201546101c0820152613c9690613294565b600a8201556005810154600c8201556006810154600d8201556007810154600e90910155565b6000805b600460ff82161015613d075760108160ff1660048110613ce257613ce261456a565b600f020154600003613cff57613cf9816001614632565b91505090565b600101613cc0565b506000905090565b60008160600151613d1f83613eea565b1092915050565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e8201546101c0820152613dd390612992565b1580613de25750600481015415155b15613dea5750565b600d54613df8600182613f3a565b613e029190614689565b600114613e0c5750565b610c2d613e1d600b54600c54613f3a565b8290613fd2565b6000613e2f82613ed0565b15613e3d5750610120015190565b50610160015190565b6000613e5182612992565b613e5d57506000919050565b613e6682613ed0565b15613e73575060a0015190565b50610180015190565b6000613e8782612992565b613e9357506000919050565b613e9c82613ed0565b15613ea9575060e0015190565b506101c0015190565b805160009015801590610ba45750613ec982612992565b1592915050565b6000613edb82613294565b82610140015114159050919050565b60008160400151826020015142613f019190614606565b610ba49190614689565b6000613f1682613eea565b8260400151610ba49190614606565b6000613f3082613f0b565b610ba490426145b8565b6000613f468383614606565b613f519060016145b8565b613f59613fe8565b613f639190614689565b611ea290846145b8565b613f7561400a565b816005016000828254613f8891906145b8565b90915550613f969050614039565b816006016000828254613fa991906145b8565b90915550613fb79050614054565b816007016000828254613fca91906145b8565b909155505050565b613fdc81426145b8565b82600401819055505050565b6003805460009143919083613ffc83614619565b91905055611e5091906141ae565b60006103e861401d600954600a54613f3a565b614025612036565b61402f91906141ae565b611e5091906141db565b60006103e861404c600954600a54613f3a565b614025611dcf565b60006103e8614067600954600a54613f3a565b6140256121e6565b60405180608001604052806004905b614086614112565b81526020019060019003908161407e5790505090565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528061412561409c565b815260200161418460405180610140016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581526020016000815260200160008152602001600081525090565b815260006020820181905260409091015290565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ba457610ba4614198565b634e487b7160e01b600052601260045260246000fd5b6000826141ea576141ea6141c5565b500490565b60006020808352835180602085015260005b8181101561421d57858101830151858201604001528201614201565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561425057600080fd5b5035919050565b60006020828403121561426957600080fd5b813560ff81168114611ea257600080fd5b80356001600160a01b038116811461391857600080fd5b600080604083850312156142a457600080fd5b823591506142b46020840161427a565b90509250929050565b600080604083850312156142d057600080fd5b6142d98361427a565b946020939093013593505050565b81518152602080830151908201526040808301519082015260608101610ba4565b6000806040838503121561431b57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c090810151910152565b6143cd82825161432a565b602081015180516101e0840152602081015161020084015260408101516102208401526060810151610240840152608081015161026084015260a081015161441a61028085018215159052565b5060c081015115156102a084015260e08101516102c08401526101008101516102e08401526101200151610300830152604081015160ff1661032083015260600151151561034090910152565b610d808101818360005b600481101561449c576144858383516143c2565b610360929092019160209190910190600101614471565b50505092915050565b6101e08101610ba4828461432a565b600080604083850312156144c757600080fd5b6144d08361427a565b91506142b46020840161427a565b6000602082840312156144f057600080fd5b611ea28261427a565b6020808252825182820181905260009190848201906040850190845b8181101561454f5761453c8385518051825260208082015190830152604090810151910152565b9284019260609290920191600101614515565b50909695505050505050565b6103608101610ba482846143c2565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361459657614596614198565b60010192915050565b60ff8281168282160390811115610ba457610ba4614198565b80820180821115610ba457610ba4614198565b6000602082840312156145dd57600080fd5b5051919050565b6000602082840312156145f657600080fd5b81518015158114611ea257600080fd5b81810381811115610ba457610ba4614198565b60006001820161462b5761462b614198565b5060010190565b60ff8181168382160190811115610ba457610ba4614198565b6020808252600d908201526c3737ba103a34329037bbb732b960991b604082015260600190565b60008161468157614681614198565b506000190190565b600082614698576146986141c5565b50069056fea2646970667358221220a2d1618d217be7f908dd9c1c54ceb8b879050d28f6b5ed26c057f92fdb70f33564736f6c6343000817003300000000000000000000000056098bac3e8de316bcf1241143316f8b846c79cb

Deployed Bytecode

0x6080604052600436106103795760003560e01c80639b773945116101d1578063dbea023811610102578063f094a45e116100a0578063f5dabbef1161006f578063f5dabbef14610a82578063fa71fbef14610a97578063fc54d97b14610ab7578063fe108c2514610acc57600080fd5b8063f094a45e14610a0c578063f13da00514610a2c578063f29b004c14610a4c578063f2fde38b14610a6257600080fd5b8063e4066536116100dc578063e406653614610983578063e5e75dcb146109a3578063e8701c33146109b8578063ee97f7f3146109d857600080fd5b8063dbea023814610943578063e3a6bcd514610959578063e3d258a51461096e57600080fd5b8063ba1c7b2e1161016f578063d0d7bef411610149578063d0d7bef4146108d0578063d21220a7146108f0578063d6156ca91461090e578063d9ced0da1461092357600080fd5b8063ba1c7b2e14610890578063c20741b6146108a6578063cfbc2fb2146108bb57600080fd5b8063a71dbec2116101ab578063a71dbec21461080d578063ab9e611f1461082d578063b451b0e11461085a578063b846199a1461087a57600080fd5b80639b773945146107ab5780639ddf9351146107cb578063a24a29d7146107f857600080fd5b80634966abb6116102ab57806368a2bffe11610249578063715018a611610223578063715018a614610734578063727c04c8146107495780638129fc1c146107765780638da5cb5b1461078b57600080fd5b806368a2bffe146106d25780636d36ec48146106f25780636fe0c9061461071257600080fd5b80635cbcc0e8116102855780635cbcc0e81461067c5780636669fdfa1461069257806366b2cac0146106a757806367056586146106bd57600080fd5b80634966abb61461063c5780634b02a6de1461065157806358b92a081461066657600080fd5b80632b97a8e51161031857806332845545116102f257806332845545146105a457806334c985da146105df578063392e53cd1461060c57806345b7f4061461062657600080fd5b80632b97a8e51461054f5780632d21c3fb146105645780632d84da7e1461058457600080fd5b80631c9afd0f116103545780631c9afd0f146104ca5780631d92620a146104f157806324194ef51461050757806325be124e1461051d57600080fd5b80623623e21461045c5780630d3823f2146104855780631328c519146104b557600080fd5b3661045757600060646001543461039091906141ae565b61039a91906141db565b905060007f00000000000000000000000056098bac3e8de316bcf1241143316f8b846c79cb6001600160a01b03168260405160006040518083038185875af1925050503d8060008114610409576040519150601f19603f3d011682016040523d82523d6000602084013e61040e565b606091505b505090508060405180604001604052806002815260200161233160f01b815250906104555760405162461bcd60e51b815260040161044c91906141ef565b60405180910390fd5b005b600080fd5b34801561046857600080fd5b50610472600a5481565b6040519081526020015b60405180910390f35b34801561049157600080fd5b506104a56104a036600461423e565b610aec565b604051901515815260200161047c565b3480156104c157600080fd5b50610455610baa565b3480156104d657600080fd5b506104df610bc4565b60405160ff909116815260200161047c565b3480156104fd57600080fd5b50610472600f5481565b34801561051357600080fd5b5061047260095481565b34801561052957600080fd5b506005546001600160a01b03165b6040516001600160a01b03909116815260200161047c565b34801561055b57600080fd5b50610472603c81565b34801561057057600080fd5b5061045561057f366004614257565b610c13565b34801561059057600080fd5b5061045561059f36600461423e565b610c30565b3480156105b057600080fd5b506105c46105bf366004614291565b610da0565b6040805193845260208401929092529082015260600161047c565b3480156105eb57600080fd5b506105ff6105fa3660046142bd565b61110f565b60405161047c91906142e7565b34801561061857600080fd5b506002546104a59060ff1681565b34801561063257600080fd5b5061047260075481565b34801561064857600080fd5b50610472611166565b34801561065d57600080fd5b50610472611250565b34801561067257600080fd5b50610472600c5481565b34801561068857600080fd5b50610472600e5481565b34801561069e57600080fd5b506104df600481565b3480156106b357600080fd5b5061047260085481565b3480156106c957600080fd5b50610455610bba565b3480156106de57600080fd5b506104556106ed366004614308565b6112bc565b3480156106fe57600080fd5b5061047261070d36600461423e565b6117ac565b34801561071e57600080fd5b50610727611864565b60405161047c9190614467565b34801561074057600080fd5b50610455611a47565b34801561075557600080fd5b5061076961076436600461423e565b611aaa565b60405161047c91906144a5565b34801561078257600080fd5b50610455611b66565b34801561079757600080fd5b50600054610537906001600160a01b031681565b3480156107b757600080fd5b506104556107c63660046144b4565b611bbf565b3480156107d757600080fd5b506107eb6107e63660046144de565b611c0d565b60405161047c91906144f9565b34801561080457600080fd5b50610472611dcf565b34801561081957600080fd5b506104df61082836600461423e565b611e55565b34801561083957600080fd5b5061084d61084836600461423e565b611eba565b60405161047c919061455b565b34801561086657600080fd5b50610455610875366004614308565b611f89565b34801561088657600080fd5b50610472600b5481565b34801561089c57600080fd5b50610472610e1081565b3480156108b257600080fd5b50610472612036565b3480156108c757600080fd5b5061047261204a565b3480156108dc57600080fd5b506104556108eb36600461423e565b612134565b3480156108fc57600080fd5b506004546001600160a01b0316610537565b34801561091a57600080fd5b50600154610472565b34801561092f57600080fd5b5061045561093e366004614308565b612167565b34801561094f57600080fd5b5061047260065481565b34801561096557600080fd5b506104726121e6565b34801561097a57600080fd5b506104726121f4565b34801561098f57600080fd5b5061045561099e36600461423e565b612261565b3480156109af57600080fd5b506104726123e2565b3480156109c457600080fd5b506107696109d3366004614257565b6124cc565b3480156109e457600080fd5b506105377f00000000000000000000000056098bac3e8de316bcf1241143316f8b846c79cb81565b348015610a1857600080fd5b50610455610a27366004614308565b6124dd565b348015610a3857600080fd5b506105c4610a47366004614308565b61255c565b348015610a5857600080fd5b50610472600d5481565b348015610a6e57600080fd5b50610455610a7d3660046144de565b612789565b348015610a8e57600080fd5b506104726127ea565b348015610aa357600080fd5b506104a5610ab2366004614257565b61284e565b348015610ac357600080fd5b50610472612906565b348015610ad857600080fd5b50610455610ae736600461423e565b61294b565b6000610ba4610afa83612987565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e909101546101c0820152612992565b92915050565b610bb26129b6565b610bba612a02565b610bc2612a3b565b565b60008060005b600460ff82161015610c0d57600060108260ff1660048110610bee57610bee61456a565b600f0201541115610c0557610c0282614580565b91505b600101610bca565b50919050565b610c25610c1f82612a76565b82612af5565b610c2d612a3b565b50565b600080610c3c83612b15565b91509150610c4a8282612b8f565b336000908152604c60205260408120610c6460018461459f565b60ff1660048110610c7757610c7761456a565b600302019050610d5281604051806060016040529081600082015481526020016001820154815260200160028201548152505084604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050612d7b565b60405180604001604052806002815260200161233760f01b81525090610d8b5760405162461bcd60e51b815260040161044c91906141ef565b50610d97338285612dbe565b50505050505050565b6000806000806000610db187612b15565b6001600160a01b0388166000908152604c6020526040812092945090925090610ddb60018461459f565b60ff1660048110610dee57610dee61456a565b6003020160405180606001604052908160008201548152602001600182015481526020016002820154815250509050610ec883604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050613294565b816040015103610ee5576000806000955095509550505050611108565b602080820151604080516101e081018252865481526001870154938101939093526002860154908301526003850154606083015260048501546080830152600585015460a0830152600685015460c0830152600785015460e083015260088501546101008301526009850154610120830152600a850154610140830152600b850154610160830152600c850154610180830152600d8501546101a0830152600e8501546101c0830152610f9891906132b5565b602080830151604080516101e081018252875481526001880154938101939093526002870154908301526003860154606083015260048601546080830152600586015460a0830152600686015460c0830152600786015460e083015260088601546101008301526009860154610120830152600a860154610140830152600b860154610160830152600c860154610180830152600d8601546101a0830152600e8601546101c083015291975061104d9161331c565b602080830151604080516101e081018252875481526001880154938101939093526002870154908301526003860154606083015260048601546080830152600586015460a0830152600686015460c0830152600786015460e083015260088601546101008301526009860154610120830152600a860154610140830152600b860154610160830152600c860154610180830152600d8601546101a0830152600e8601546101c083015291965061110291613367565b93505050505b9250925092565b61113360405180606001604052806000815260200160008152602001600081525090565b61113d83836133b2565b604080516060810182528254815260018301546020820152600290920154908201529392505050565b60008060005b600460ff82161015610c0d5761123c60108260ff16600481106111915761119161456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250506134c5565b61124690836145b8565b915060010161116c565b60008060005b600460ff82161015610c0d5760108160ff16600481106112785761127861456a565b600f02016009015460108260ff16600481106112965761129661456a565b600f0201600601546112a891906145b8565b6112b290836145b8565b9150600101611256565b60028054604080518082019091529182526108cd60f21b602083015260ff166112f85760405162461bcd60e51b815260040161044c91906141ef565b5060008061130584612b15565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c082015291935091506113b790612992565b60405180604001604052806002815260200161233560f01b815250906113f05760405162461bcd60e51b815260040161044c91906141ef565b506113fb82826134e4565b506114068282612af5565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c08201526114b390612992565b60405180604001604052806002815260200161233560f01b815250906114ec5760405162461bcd60e51b815260040161044c91906141ef565b50600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa15801561153b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155f91906145cb565b600480546040516323b872dd60e01b81523392810192909252306024830152604482018790529192506001600160a01b03909116906323b872dd906064016020604051808303816000875af11580156115bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e091906145e4565b50600480546040516370a0823160e01b8152309281019290925260009183916001600160a01b0316906370a0823190602401602060405180830381865afa15801561162f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165391906145cb565b61165d9190614606565b336000908152604c602052604081209192509061167b60018661459f565b60ff166004811061168e5761168e61456a565b60030201905084600001548160000154146116b95784600801600081546116b490614619565b909155505b8454808255604080516101e081018252918252600187015460208301526002870154908201526003860154606082015260048601546080820152600586015460a0820152600686015460c0820152600786015460e082015260088601546101008201526009860154610120820152600a860154610140820152600b860154610160820152600c860154610180820152600d8601546101a0820152600e8601546101c082015261176790613294565b81600201819055508181600101600082825461178391906145b8565b925050819055508185600901600082825461179e91906145b8565b909155505050505050505050565b6000610ba46117ba83612987565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e909101546101c0820152613294565b61186c61406f565b61187461406f565b60005b600460ff82161015610c0d5761194760108260ff166004811061189c5761189c61456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050612992565b15611a3f57611a2461195a826001614632565b60108360ff16600481106119705761197061456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e8201548152505061373390919063ffffffff16565b828260ff1660048110611a3957611a3961456a565b60200201525b600101611877565b6000546001600160a01b03163314611a715760405162461bcd60e51b815260040161044c9061464b565b600080546001600160a01b03191681556040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce9190a1565b611ab261409c565b611abb82612987565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e909101546101c082015292915050565b6000546001600160a01b03163314611b905760405162461bcd60e51b815260040161044c9061464b565b611b98613807565b60015b600260ff821611610c2d57611baf81613854565b611bb881614580565b9050611b9b565b604d546001600160a01b03163314611bd657600080fd5b604d80546001600160a01b0319908116909155600480546001600160a01b0394851690831617905560058054929093169116179055565b60408051600480825260a0820190925260609160009190816020015b611c4d60405180606001604052806000815260200160008152602001600081525090565b815260200190600190039081611c2957905050905060005b600460ff82161015611dc8576001600160a01b0384166000908152604c6020526040812060ff831660048110611c9d57611c9d61456a565b600302019050600060108360ff1660048110611cbb57611cbb61456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250509050611d6c81612992565b611d77575050611dc0565b6040805160608101825283548152600184015460208201526002840154918101919091528451859060ff8616908110611db257611db261456a565b602002602001018190525050505b600101611c65565b5092915050565b6000611dd9611250565b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015611e22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4691906145cb565b611e509190614606565b905090565b600081600003611e6757506000919050565b60005b600460ff82161015611eb1578260108260ff1660048110611e8d57611e8d61456a565b600f02015403611ea957611ea2816001614632565b9392505050565b600101611e6a565b50600092915050565b611ec2614112565b600080611ece84612b15565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c08201529193509150611f819082613733565b949350505050565b6000546001600160a01b03163314611fb35760405162461bcd60e51b815260040161044c9061464b565b604080518082019091526002815261233360f01b602082015281831115611fed5760405162461bcd60e51b815260040161044c91906141ef565b50604080518082019091526002815261233360f01b60208201526103e882111561202a5760405162461bcd60e51b815260040161044c91906141ef565b50600991909155600a55565b6000612040611166565b611e509047614606565b60008060005b600460ff82161015610c0d5761212060108260ff16600481106120755761207561456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e820154815250506138e2565b61212a90836145b8565b9150600101612050565b6000546001600160a01b0316331461215e5760405162461bcd60e51b815260040161044c9061464b565b610c2d8161391d565b6000546001600160a01b031633146121915760405162461bcd60e51b815260040161044c9061464b565b6000821180156121a15750808211155b60405180604001604052806002815260200161233360f01b815250906121da5760405162461bcd60e51b815260040161044c91906141ef565b50600791909155600855565b60006121f06123e2565b611e465b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561223d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5091906145cb565b60008061226d83612b15565b9150915061227b8282612b8f565b336000908152604c6020526040812061229560018461459f565b60ff16600481106122a8576122a861456a565b600302018054604080518082019091526002815261119b60f11b60208201529192506122e75760405162461bcd60e51b815260040161044c91906141ef565b5060048054600183015460405163a9059cbb60e01b8152339381019390935260248301526001600160a01b03169063a9059cbb906044016020604051808303816000875af115801561233d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236191906145e4565b50826008016000815461237390614672565b909155506001810154600984018054600090612390908490614606565b9091555050336000908152604c602052604090206123af60018461459f565b60ff16600481106123c2576123c261456a565b600060039190910291909101818155600181018290556002015550505050565b60008060005b600460ff82161015610c0d576124b860108260ff166004811061240d5761240d61456a565b600f0201604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050613930565b6124c290836145b8565b91506001016123e8565b6124d461409c565b611abb82612a76565b6000546001600160a01b031633146125075760405162461bcd60e51b815260040161044c9061464b565b6000821180156125175750808211155b60405180604001604052806002815260200161233360f01b815250906125505760405162461bcd60e51b815260040161044c91906141ef565b50600e91909155600f55565b60008060008061256b86612b15565b50604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e8201546101c082015290915061261d908661394f565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c08201529094506126ce90866139a9565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c082015290935061277f90866139f9565b9150509250925092565b6000546001600160a01b031633146127b35760405162461bcd60e51b815260040161044c9061464b565b6000546001600160a01b03166127c857600080fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b60008060005b600460ff82161015610c0d5761281560108260ff166004811061189c5761189c61456a565b156128465760108160ff16600481106128305761283061456a565b600f0201600901548261284391906145b8565b91505b6001016127f0565b6000610ba461285c83612a76565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e909101546101c0820152613a49565b60008060005b600460ff82161015610c0d5760108160ff166004811061292e5761292e61456a565b600f0201600801548261294191906145b8565b915060010161290c565b6000546001600160a01b031633146129755760405162461bcd60e51b815260040161044c9061464b565b6001811161298257600080fd5b600d55565b6000611dc882612b15565b805160009015801590610ba4575060808201511580610ba457505060800151421090565b60015b600460ff821611610c2d576129f160106129d460018461459f565b60ff16600481106129e7576129e761456a565b600f0201826134e4565b506129fb81614580565b90506129b9565b60005b600460ff82161015610c2d57612a3360108260ff1660048110612a2a57612a2a61456a565b600f0201613a60565b600101612a05565b60025460ff16612a4757565b604e54421015612a5357565b6000612a5d613cbc565b90508060ff16600003612a6d5750565b610c2d81613854565b600060018260ff1610158015612a905750600460ff831611155b6040518060400160405280600381526020016202331360ec1b81525090612aca5760405162461bcd60e51b815260040161044c91906141ef565b506010612ad860018461459f565b60ff1660048110612aeb57612aeb61456a565b600f020192915050565b612aff82826134e4565b15612b08575050565b612b1182613a60565b5050565b600080612b2183611e55565b905060008160ff161160405180604001604052806002815260200161046760f31b81525090612b635760405162461bcd60e51b815260040161044c91906141ef565b506010612b7160018361459f565b60ff1660048110612b8457612b8461456a565b600f02019150915091565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c0820152612c3c90612992565b60405180604001604052806002815260200161233560f01b81525090612c755760405162461bcd60e51b815260040161044c91906141ef565b50612c7e6129b6565b612c888282612af5565b612c90612a3b565b604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526009830154610120820152600a830154610140820152600b830154610160820152600c830154610180820152600d8301546101a0820152600e8301546101c0820152612d3d90612992565b60405180604001604052806002815260200161233560f01b81525090612d765760405162461bcd60e51b815260040161044c91906141ef565b505050565b6000612d8682612992565b8015612d965750612d9682613d0f565b8015611ea25750612da682613294565b6040840151612db69060016145b8565b109392505050565b6000806000612dcc84613a60565b600180860154604080516101e081018252875481529287015460208401526002870154908301526003860154606083015260048601546080830152600586015460a0830152600686015460c0830152600786015460e083015260088601546101008301526009860154610120830152600a860154610140830152600b860154610160830152600c860154610180830152600d8601546101a0830152600e8601546101c0830152612e7c91906132b5565b600180870154604080516101e081018252885481529288015460208401526002880154908301526003870154606083015260048701546080830152600587015460a0830152600687015460c0830152600787015460e083015260088701546101008301526009870154610120830152600a870154610140830152600b870154610160830152600c870154610180830152600d8701546101a0830152600e8701546101c0830152919450612f2e9161331c565b600180870154604080516101e081018252885481529288015460208401526002880154908301526003870154606083015260048701546080830152600587015460a0830152600687015460c0830152600787015460e083015260088701546101008301526009870154610120830152600a870154610140830152600b870154610160830152600c870154610180830152600d8701546101a0830152600e8701546101c0830152919350612fe091613367565b9050600161308f85604051806101e001604052908160008201548152602001600182015481526020016002820154815260200160038201548152602001600482015481526020016005820154815260200160068201548152602001600782015481526020016008820154815260200160098201548152602001600a8201548152602001600b8201548152602001600c8201548152602001600d8201548152602001600e82015481525050613294565b6130999190614606565b60028601558215613150576000866001600160a01b03168460405160006040518083038185875af1925050503d80600081146130f1576040519150601f19603f3d011682016040523d82523d6000602084013e6130f6565b606091505b505090508060405180604001604052806002815260200161233960f01b815250906131345760405162461bcd60e51b815260040161044c91906141ef565b50838560050160008282546131499190614606565b9091555050505b81156131ea576004805460405163a9059cbb60e01b81526001600160a01b03898116938201939093526024810185905291169063a9059cbb906044016020604051808303816000875af11580156131ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131cf91906145e4565b50818460060160008282546131e49190614606565b90915550505b80156132825760055460405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015613243573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061326791906145e4565b508084600701600082825461327c9190614606565b90915550505b61328b84613d26565b93509350939050565b600081604001518260200151426132ab9190614606565b610ba491906141db565b60008115806132ca57506132c883612992565b155b156132d757506000610ba4565b60006132e284613e24565b9050806000036132fd576132f584613e46565b915050610ba4565b808361330886613e46565b61331291906141ae565b611f8191906141db565b6000811580613331575061332f83612992565b155b1561333e57506000610ba4565b600061334984613e24565b90508060000361335c576132f5846138e2565b8083613308866138e2565b600081158061337c575061337a83612992565b155b1561338957506000610ba4565b600061339484613e24565b9050806000036133a7576132f584613e7c565b808361330886613e7c565b600080821160405180604001604052806002815260200161233560f01b815250906133f05760405162461bcd60e51b815260040161044c91906141ef565b5060005b600460ff82161015613494576001600160a01b0384166000908152604c6020526040812060ff83166004811061342c5761342c61456a565b6003020190508381600001540361348b57805461344890610aec565b60405180604001604052806002815260200161119b60f11b815250906134815760405162461bcd60e51b815260040161044c91906141ef565b509150610ba49050565b506001016133f4565b506040805180820182526002815261119b60f11b6020820152905162461bcd60e51b815261044c91906004016141ef565b60006134d082612992565b6134dc57506000919050565b5060a0015190565b600060018260ff16101580156134fe5750600460ff831611155b6040518060400160405280600381526020016202331360ec1b815250906135385760405162461bcd60e51b815260040161044c91906141ef565b50604080516101e08101825284548152600185015460208201526002850154918101919091526003840154606082015260048401546080820152600584015460a0820152600684015460c0820152600784015460e082015260088401546101008201526009840154610120820152600a840154610140820152600b840154610160820152600c840154610180820152600d8401546101a0820152600e8401546101c08201526135e690613eb2565b6135f257506000610ba4565b60008360090154846006015461360891906145b8565b90508015613689576004805460405163a9059cbb60e01b8152600092810192909252602482018390526001600160a01b03169063a9059cbb906044016020604051808303816000875af1158015613663573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061368791906145e4565b505b601061369660018561459f565b60ff16600481106136a9576136a961456a565b600f0201600080820160009055600182016000905560028201600090556003820160009055600482016000905560058201600090556006820160009055600782016000905560088201600090556009820160009055600a820160009055600b820160009055600c820160009055600d820160009055600e8201600090555050600191505092915050565b61373b614112565b604051806080016040528084815260200160405180610140016040528061376187613294565b815260200161376f87613e46565b815260200161377d876138e2565b815260200161378b87613e7c565b815260200161379987613e24565b81526020016137a787613d0f565b151581526020016137b787613ed0565b151581526020016137c787613eea565b81526020016137d587613f0b565b81526020016137e387613f25565b9052815260ff841660208201526040016137fc85612992565b151590529392505050565b600280546040805180820190915291825261119960f11b602083015260ff16156138445760405162461bcd60e51b815260040161044c91906141ef565b506002805460ff19166001179055565b600061385f82612a76565b905060066000815461387090614619565b91829055508155600e54600f5460009161388991613f3a565b9050600061389b600754600854613f3a565b90506138a781836145b8565b6002840155600383018290554260018401556138c283613f6d565b6138cf603c610e10613f3a565b6138d990426145b8565b604e5550505050565b60006138ed82612992565b6138f957506000919050565b61390282613ed0565b1561390f575060c0015190565b506101a0015190565b919050565b603381111561392b57600080fd5b600155565b600061393b82612992565b61394757506000919050565b5060e0015190565b6000811580613964575061396283612992565b155b1561397157506000610ba4565b826101200151600003613989575060a0820151610ba4565b826101200151828460a0015161399f91906141ae565b611ea291906141db565b60008115806139be57506139bc83612992565b155b156139cb57506000610ba4565b8261012001516000036139e3575060c0820151610ba4565b826101200151828460c0015161399f91906141ae565b6000811580613a0e5750613a0c83612992565b155b15613a1b57506000610ba4565b826101200151600003613a33575060e0820151610ba4565b826101200151828460e0015161399f91906141ae565b805160009015801590610ba45750610ba482613d0f565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e8201546101c0820152613b0d90612992565b1580613b1c5750600481015415155b80613bd15750604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e8201546101c0820152613bcf90613ed0565b155b15613bd95750565b613be281613f6d565b6009810154600b8201819055604080516101e08101825283548152600184015460208201526002840154918101919091526003830154606082015260048301546080820152600583015460a0820152600683015460c0820152600783015460e082015260088301546101008201526101208101829052600a830154610140820152610160810191909152600c820154610180820152600d8201546101a0820152600e8201546101c0820152613c9690613294565b600a8201556005810154600c8201556006810154600d8201556007810154600e90910155565b6000805b600460ff82161015613d075760108160ff1660048110613ce257613ce261456a565b600f020154600003613cff57613cf9816001614632565b91505090565b600101613cc0565b506000905090565b60008160600151613d1f83613eea565b1092915050565b604080516101e08101825282548152600183015460208201526002830154918101919091526003820154606082015260048201546080820152600582015460a0820152600682015460c0820152600782015460e082015260088201546101008201526009820154610120820152600a820154610140820152600b820154610160820152600c820154610180820152600d8201546101a0820152600e8201546101c0820152613dd390612992565b1580613de25750600481015415155b15613dea5750565b600d54613df8600182613f3a565b613e029190614689565b600114613e0c5750565b610c2d613e1d600b54600c54613f3a565b8290613fd2565b6000613e2f82613ed0565b15613e3d5750610120015190565b50610160015190565b6000613e5182612992565b613e5d57506000919050565b613e6682613ed0565b15613e73575060a0015190565b50610180015190565b6000613e8782612992565b613e9357506000919050565b613e9c82613ed0565b15613ea9575060e0015190565b506101c0015190565b805160009015801590610ba45750613ec982612992565b1592915050565b6000613edb82613294565b82610140015114159050919050565b60008160400151826020015142613f019190614606565b610ba49190614689565b6000613f1682613eea565b8260400151610ba49190614606565b6000613f3082613f0b565b610ba490426145b8565b6000613f468383614606565b613f519060016145b8565b613f59613fe8565b613f639190614689565b611ea290846145b8565b613f7561400a565b816005016000828254613f8891906145b8565b90915550613f969050614039565b816006016000828254613fa991906145b8565b90915550613fb79050614054565b816007016000828254613fca91906145b8565b909155505050565b613fdc81426145b8565b82600401819055505050565b6003805460009143919083613ffc83614619565b91905055611e5091906141ae565b60006103e861401d600954600a54613f3a565b614025612036565b61402f91906141ae565b611e5091906141db565b60006103e861404c600954600a54613f3a565b614025611dcf565b60006103e8614067600954600a54613f3a565b6140256121e6565b60405180608001604052806004905b614086614112565b81526020019060019003908161407e5790505090565b604051806101e001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604051806080016040528061412561409c565b815260200161418460405180610140016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581526020016000815260200160008152602001600081525090565b815260006020820181905260409091015290565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417610ba457610ba4614198565b634e487b7160e01b600052601260045260246000fd5b6000826141ea576141ea6141c5565b500490565b60006020808352835180602085015260005b8181101561421d57858101830151858201604001528201614201565b506000604082860101526040601f19601f8301168501019250505092915050565b60006020828403121561425057600080fd5b5035919050565b60006020828403121561426957600080fd5b813560ff81168114611ea257600080fd5b80356001600160a01b038116811461391857600080fd5b600080604083850312156142a457600080fd5b823591506142b46020840161427a565b90509250929050565b600080604083850312156142d057600080fd5b6142d98361427a565b946020939093013593505050565b81518152602080830151908201526040808301519082015260608101610ba4565b6000806040838503121561431b57600080fd5b50508035926020909101359150565b805182526020808201519083015260408082015190830152606080820151908301526080808201519083015260a0808201519083015260c0808201519083015260e08082015190830152610100808201519083015261012080820151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c090810151910152565b6143cd82825161432a565b602081015180516101e0840152602081015161020084015260408101516102208401526060810151610240840152608081015161026084015260a081015161441a61028085018215159052565b5060c081015115156102a084015260e08101516102c08401526101008101516102e08401526101200151610300830152604081015160ff1661032083015260600151151561034090910152565b610d808101818360005b600481101561449c576144858383516143c2565b610360929092019160209190910190600101614471565b50505092915050565b6101e08101610ba4828461432a565b600080604083850312156144c757600080fd5b6144d08361427a565b91506142b46020840161427a565b6000602082840312156144f057600080fd5b611ea28261427a565b6020808252825182820181905260009190848201906040850190845b8181101561454f5761453c8385518051825260208082015190830152604090810151910152565b9284019260609290920191600101614515565b50909695505050505050565b6103608101610ba482846143c2565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361459657614596614198565b60010192915050565b60ff8281168282160390811115610ba457610ba4614198565b80820180821115610ba457610ba4614198565b6000602082840312156145dd57600080fd5b5051919050565b6000602082840312156145f657600080fd5b81518015158114611ea257600080fd5b81810381811115610ba457610ba4614198565b60006001820161462b5761462b614198565b5060010190565b60ff8181168382160190811115610ba457610ba4614198565b6020808252600d908201526c3737ba103a34329037bbb732b960991b604082015260600190565b60008161468157614681614198565b506000190190565b600082614698576146986141c5565b50069056fea2646970667358221220a2d1618d217be7f908dd9c1c54ceb8b879050d28f6b5ed26c057f92fdb70f33564736f6c63430008170033

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

00000000000000000000000056098bac3e8de316bcf1241143316f8b846c79cb

-----Decoded View---------------
Arg [0] : master_ (address): 0x56098bAc3e8DE316bcf1241143316F8b846c79Cb

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000056098bac3e8de316bcf1241143316f8b846c79cb


Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

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

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