Contract 0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd 3

 

Contract Overview

Balance:
0 ETH

ETH Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8bfbf57eb9dd970af6b1c37349732270df5b5e5ff738d53e684ef656af9fc23bApprove30091072021-11-13 6:20:0474 days 11 hrs ago0x05fec6890b63a1bb9e9e96cdd1afeffb394c04c4 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.001303880972 ETH
0x61bfa81ca982d3429d187e550d95e499522e33fa0051fbd0ef017790e9dfc03eChange Owner30091002021-11-13 6:18:2774 days 11 hrs ago0x9de2b19deadbeefb821d00c39289919dd5313566 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000983987052 ETH
0x053fe692a3c058dd998e2b1a3327cdf15cf71671035778de1925574d55224843Withdraw Rewards30090982021-11-13 6:18:2774 days 11 hrs ago0x9de2b19deadbeefb821d00c39289919dd5313566 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.001025950412 ETH
0x3916344a1885c0e568a0ecc265f20cb78694d8347f931ac00bbdff7507a71151Change Tax Detai...30090922021-11-13 6:18:2774 days 11 hrs ago0x9de2b19deadbeefb821d00c39289919dd5313566 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000969552226 ETH
0xc1853950e52cfa24c8567f77a028c24414fbc58a051359b9d06906653b4f6702Change Tax Detai...30090882021-11-13 6:18:2774 days 11 hrs ago0x9de2b19deadbeefb821d00c39289919dd5313566 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000967596071 ETH
0xb68cd8751c67a0e6c7dbc0956edea89fcba8106324bbcfcd4facd74ec6946b85Transfer30090702021-11-13 6:16:0874 days 11 hrs ago0x05fec6890b63a1bb9e9e96cdd1afeffb394c04c4 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.001026680767 ETH
0x9767aed545c43f0f61d4399b427dcdc9e5fcc29c6c2d592a7313b66bcf8e6589Change Tax Detai...30090622021-11-13 6:15:0074 days 11 hrs ago0x9de2b19deadbeefb821d00c39289919dd5313566 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.001000994493 ETH
0x0e648b39b21dafa22b5b2e6e6a8f527faac189547136875a6161843286d41721Change Tax Detai...30090502021-11-13 6:14:0474 days 11 hrs ago0x9de2b19deadbeefb821d00c39289919dd5313566 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.00096956931 ETH
0x6f572e91c8a6ba3ba1ccb2e52b63f34ed6c8de2a823fb841ff3b2e51cabc86e7Change Tax Detai...30090472021-11-13 6:14:0474 days 11 hrs ago0x9de2b19deadbeefb821d00c39289919dd5313566 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000969552226 ETH
0xdecb29414e043b44cf0777f897b98d0a0557ae0596d19586d17c0a9a91d0227aChange Owner30035932021-11-12 21:42:2674 days 19 hrs ago0xe1a811bdfb656dc47a7262dbde31071d9a916b1a IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.001000817742 ETH
0xf5f1a07f83100c501cc9ef210fb5986bc77d4919c587d45fa85289ece6cd0a70Withdraw All Rew...19527342021-10-05 20:50:02112 days 20 hrs ago0x2af61988333b4d565cfe50e196f7c08ea89da1c1 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000675696687 ETH
0xa569487fb2e5a9d725cdd4de6eb47c4f214a54af81bdfbd56fe4c3a7c14efa4bUnstake18830982021-10-03 13:55:32115 days 3 hrs ago0x39d5a7795d19ab357c7471af657d4ef5fbbd5a02 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000646617154 ETH
0x9f938bf1f756da60ffe9905c2911d801f6837a7f4314e9e81128845b7928c472Withdraw All Rew...18772402021-10-03 9:52:36115 days 7 hrs ago0x422242f492ac5332db9bc34ec89e623d0b5be1b1 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000455229832 ETH
0xe090e52b355b06c1e86948a6d91a4e4974d54af219c3d2f24bda52a10264022fUnstake18769682021-10-03 9:41:03115 days 7 hrs ago0x3f049e5850229d18f01460dfda38c3ea6422b5a4 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000678552697 ETH
0xd826c27df351eff4d5852153f10ca6db60c1fff42eaeb19d2b1a4e890d98b45dWithdraw All Rew...18769482021-10-03 9:39:39115 days 7 hrs ago0x3f049e5850229d18f01460dfda38c3ea6422b5a4 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000477003548 ETH
0x0bfb307257000ff5bc6272076b1ed826e2b64f3e3fb2347823b1996604c951e3Unstake18752562021-10-03 8:33:20115 days 9 hrs ago0xe3b5d677199000d6f2d71bf9dd78a2c86029fca5 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000563358529 ETH
0xbedd563367da08ed931ebd58e3cc31f2ca4e8b95c41c6f481dad0e27ea08db58Approve18752462021-10-03 8:31:57115 days 9 hrs ago0x64dfe709d7778db4e61a2e9f111ea4f18f2774fd IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000623223931 ETH
0xcced85b036f1c0dee7d436f06204b9d86f117d01d077c35d9782baa820bb13feApprove18750632021-10-03 8:22:46115 days 9 hrs ago0x64dfe709d7778db4e61a2e9f111ea4f18f2774fd IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000600600301 ETH
0xe8407d2b312a2af91a2b6e6ed40c0b11b395f4fab9a679d8df8d4d39d715ed5bTransfer18745732021-10-03 8:00:06115 days 9 hrs ago0xe1a811bdfb656dc47a7262dbde31071d9a916b1a IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000601998376 ETH
0x67da8613da0b95bfaa5b0048505dfa766e0415eed8b6117fa54a636e329b66caUpdate Position18682272021-10-03 1:39:19115 days 15 hrs ago0x188a22819f630ee4b4de070821090978b4d13cf3 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000630944855 ETH
0xdb895b4895d52069f77b59263c1dfea9e7785a9ad77bc52365424f62a785bf11Update Position18682242021-10-03 1:38:33115 days 15 hrs ago0x188a22819f630ee4b4de070821090978b4d13cf3 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000631921862 ETH
0x0934a45ee654e380f824af87e1652851fe65154e75addb4c2f82c7614d86ac1aUpdate Position18682062021-10-03 1:36:16115 days 16 hrs ago0x188a22819f630ee4b4de070821090978b4d13cf3 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000631921862 ETH
0x6b0e69c8c3ae86c5649be3860d2572ee20df31ad5115583adcee10d8e1b71165Withdraw All Rew...18643032021-10-02 21:23:36115 days 20 hrs ago0xab44ae2ba15a0004d0308b04dd04797176372366 IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.00049230544 ETH
0x86f7abd8b0ddca6962fe22f39e8bd59100d403047d3fb1784dc951d083cca16eUnstake18631022021-10-02 20:01:30115 days 21 hrs ago0xe3269991257b2da048a0458161b1be0ea28d351c IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000710143835 ETH
0x77ef6b17aafb7e5a15a436448eda61fb1f832c89f680001aa0111ff760190d1dWithdraw All Rew...18630582021-10-02 19:59:28115 days 21 hrs ago0xe3269991257b2da048a0458161b1be0ea28d351c IN  0x69f012e4dd7c2dd75cd02ccb239e42642647e0cd0 ETH0.000484013406 ETH
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
TangleV3

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 99999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at arbiscan.io on 2021-09-15
*/

// SPDX-License-Identifier: 0BSD

pragma solidity ^0.8.7;

interface ERC20 {
    function transfer(address to, uint tokens) external;
    function transferFrom(address from, address to, uint tokens) external;
}

contract TangleV3 {

    uint8 public decimals;
    uint public totalSupply;
    string public name;
    string public symbol;
    mapping (address => uint256) private balances;
    mapping (address => mapping (address => uint)) private allowed;

    bool public disableGame = false;
    address public gamemaster;
    address public owner;
    address public liquidityAddress;
    uint public totalPieces;
    uint public piecesPerUnit;
    uint public minHoldAmount;
    uint public workaroundConstant = 1;
    uint public distributionRewardThreshold;
    uint public marketMakingRewardThreshold;
    mapping(uint => uint) public S;
    mapping(uint => uint) public tax;
    mapping(uint => uint) public rewardMax;
    mapping(uint => uint) public startTime;
    mapping(uint => uint) public rewardConst;
    mapping(uint => uint) public totalRewardableEvents;
    mapping(uint => uint) public lastRewardDistribution;
    mapping(uint => uint) public rewardsLastRewardChange;
    mapping(uint => uint) public timeFromInitToLastRewardChange;
    mapping(address => bool) public hasReceivedPieces;
    mapping(address => mapping(uint => uint)) public Si;
    mapping(address => mapping(uint => uint)) public WCi;
    mapping(address => mapping(uint => uint)) public storedRewards;
    mapping(address => mapping(uint => uint)) public rewardableEvents;

    constructor() {
        name = "TangleV3";
        symbol = "TNGLv3";
        decimals = 9;
        totalSupply = 1e9 * 1*10**(decimals);
        totalPieces = type(uint128).max - (type(uint128).max % totalSupply);
        piecesPerUnit = totalPieces / totalSupply;
        balances[msg.sender] = totalPieces;
        gamemaster = msg.sender;
        owner = msg.sender;
        minHoldAmount = 1;
        distributionRewardThreshold = 1e9;
        marketMakingRewardThreshold = 1e9;

        // INITIAL REWARDCONST MAP {
            rewardConst[0] = 300000; // Market Maker
            rewardConst[1] = 300000; // Distributor
            rewardConst[2] = 300000; // Staker
        // }

        // INITIAL TAX MAP {
            tax[100] =  5e9;  // Transfer Multiplier
            tax[101] =  1e11; // Transfer Divisor
            tax[200] =  1e9;  // Market Maker Transfer Multiplier
            tax[201] =  1e11; // Market Maker Transfer Divisor
            tax[210] = 10e9;  // Market Maker Withdraw Multiplier
            tax[211] =  1e11; // Market Maker Withdraw Divisor
            tax[220] =  4e9;  // Market Maker To Distributor Multiplier
            tax[221] =  1e11; // Market Maker To Distributor Divisor
            tax[230] =  4e9;  // Market Maker To Staker Multiplier
            tax[231] =  1e11; // Market Maker To Staker Divisor
            tax[240] =  1e9;  // Market Maker To Reflect Multiplier
            tax[241] =  1e11; // Market Maker To Reflect Divisor
            tax[250] =  1e9;  // Market Maker To Gamemaster Multiplier
            tax[251] =  1e11; // Market Maker To Gamemaster Divisor
            tax[300] =  1e9;  // Distributor Transfer Multiplier
            tax[301] =  1e11; // Distributor Transfer Divisor
            tax[310] = 10e9;  // Distributor Withdraw Multiplier
            tax[311] =  1e11; // Distributor Withdraw Divisor
            tax[320] =  4e9;  // Distributor To Market Maker Multiplier
            tax[321] =  1e11; // Distributor To Market Maker Divisor
            tax[330] =  4e9;  // Distributor To Staker Multiplier
            tax[331] =  1e11; // Distributor To Staker Divisor
            tax[340] =  1e9;  // Distributor To Reflect Multiplier
            tax[341] =  1e11; // Distributor To Reflect Divisor
            tax[350] =  1e9;  // Distributor To Gamemaster Multiplier
            tax[351] =  1e11; // Distributor To Gamemaster Divisor
            tax[400] =  1e9;  // Staker Transfer Multiplier
            tax[401] =  1e11; // Staker Transfer Divisor
            tax[410] = 10e9;  // Staker Withdraw Multiplier
            tax[411] =  1e11; // Staker Withdraw Divisor
            tax[420] =  4e9;  // Staker To Market Maker Multiplier
            tax[421] =  1e11; // Staker To Market Maker Divisor
            tax[430] =  4e9;  // Staker To Distributor Multiplier
            tax[431] =  1e11; // Staker To Distributor Divisor
            tax[440] =  1e9;  // Staker To Reflect Multiplier
            tax[441] =  1e11; // Staker To Reflect Divisor
            tax[450] =  1e9;  // Staker To Gamemaster Multiplier
            tax[451] =  1e11; // Staker To Gamemaster Divisor
            tax[500] =  1e9;  // Reflect Transfer Multiplier
            tax[501] =  1e11; // Reflect Transfer Divisor
            tax[600] =  1e9;  // Gamemaster Transfer Multiplier
            tax[601] =  1e11; // Gamemaster Transfer Divisor
        // }

    }

    function balanceOf(address _owner) public view returns (uint256) {
        return balances[_owner] / piecesPerUnit;
    }

    function allowance(address _owner, address spender) public view returns (uint256) {
        return allowed[_owner][spender];
    }

    function approve(address spender, uint256 value) public returns (bool) {
        allowed[msg.sender][spender] = value;
        emit Approval(msg.sender, spender, value);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        allowed[msg.sender][spender] = allowed[msg.sender][spender] + addedValue;
        emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        allowed[msg.sender][spender] = allowed[msg.sender][spender] - subtractedValue;
        emit Approval(msg.sender, spender, allowed[msg.sender][spender]);
        return true;
    }

    function transfer(address to, uint256 value) public returns (bool) {
        if (value > balances[msg.sender] / piecesPerUnit) revert();
        value = enforceMinHold(msg.sender, value);
        uint pieceValue = value * piecesPerUnit;
        balances[msg.sender] -= pieceValue;
        if (msg.sender == owner || disableGame) {
            balances[to] += pieceValue;
            emit Transfer(msg.sender, to, value);
            return true;
        }
        balances[to] += pieceValue - taxify(pieceValue, 10);
        balances[address(this)] += taxify(pieceValue, 20) + taxify(pieceValue, 30) + taxify(pieceValue, 40);
        balances[gamemaster] += taxify(pieceValue, 60);
        for (uint i = 0; i < 3; i++) { changeRewardMax(i, rewardMax[i] + taxify(pieceValue, 20 + i * 10)); }
        reflect(taxify(pieceValue, 50));
        if (msg.sender != owner && msg.sender != gamemaster && to != owner && to != gamemaster) {
            if (msg.sender != liquidityAddress && to != liquidityAddress) distributorCheck(msg.sender, to, value);
            marketMakerCheck(msg.sender, to, value);
        }
        emit Transfer(msg.sender, to, value - taxify(value, 10));
        emit Transfer(msg.sender, address(this), taxify(value, 20) + taxify(value, 30) + taxify(value, 40));
        emit Transfer(msg.sender, gamemaster, taxify(value, 60));
        emit ReflectEvent(msg.sender, taxify(value, 50));
        return true;
    }

    function transferFrom(address from, address to, uint256 value) public returns (bool) {
        if (value > balances[from] / piecesPerUnit) revert();
        value = enforceMinHold(from, value);
        allowed[from][msg.sender] = allowed[from][msg.sender] - value;
        uint pieceValue = value * piecesPerUnit;
        balances[from] -= pieceValue;
        if (from == owner || disableGame) {
            balances[to] += pieceValue;
            emit Transfer(from, to, value);
            return true;
        }
        balances[to] += pieceValue - taxify(pieceValue, 10);
        balances[address(this)] += taxify(pieceValue, 20) + taxify(pieceValue, 30) + taxify(pieceValue, 40);
        balances[gamemaster] += taxify(pieceValue, 60);
        for (uint i = 0; i < 3; i++) { changeRewardMax(i, rewardMax[i] + taxify(pieceValue, 20 + i * 10)); }
        reflect(taxify(pieceValue, 50));
        if (from != owner && from != gamemaster && to != owner && to != gamemaster) {
            if (from != liquidityAddress && to != liquidityAddress) distributorCheck(from, to, value);
            marketMakerCheck(from, to, value);
        }
        emit Transfer(from, to, value - taxify(value, 10));
        emit Transfer(from, address(this), taxify(value, 20) + taxify(value, 30) + taxify(value, 40));
        emit Transfer(from, gamemaster, taxify(value, 60));
        emit ReflectEvent(from, taxify(value, 50));
        return true;
    }

    function cropDust(address[] memory addresses) public {
        uint viableAddresses = addresses.length;
        for (uint i = 0; i < addresses.length; i++) {
            if (hasReceivedPieces[addresses[i]]) {
                viableAddresses--;
                continue;
            }
            balances[addresses[i]] += distributionRewardThreshold * piecesPerUnit;
            hasReceivedPieces[addresses[i]] = true;
            emit Transfer(msg.sender, addresses[i], distributionRewardThreshold);
        }
        balances[msg.sender] -= distributionRewardThreshold * piecesPerUnit * viableAddresses;
        if (startTime[1] == 0) startTime[1] = block.timestamp;
        distribute(1);
        if (getAvailableRewards(msg.sender, 1) > 0) storedRewards[msg.sender][1] = getAvailableRewards(msg.sender, 1) * piecesPerUnit;
        Si[msg.sender][1] = S[1];
        WCi[msg.sender][1] = workaroundConstant;
        rewardableEvents[msg.sender][1] += viableAddresses;
        totalRewardableEvents[1] += viableAddresses;
    }

    function enforceMinHold(address sender, uint value) internal view returns (uint) {
        if (balances[sender] / piecesPerUnit - value < minHoldAmount && sender != liquidityAddress)
            value = balances[sender] / piecesPerUnit - minHoldAmount;
        return value;
    }

    function taxify(uint value, uint id) internal view returns (uint) {
        return value * tax[id * 10] / tax[id * 10 + 1];
    }

    function changeRewardMax(uint id, uint newRewardMax) internal {
        if (startTime[id] > 0) {
            rewardsLastRewardChange[id] = rewardTheoretical(id);
            timeFromInitToLastRewardChange[id] = block.timestamp - startTime[id];
        }
        rewardMax[id] = newRewardMax;
    }

    function rewardTheoretical(uint id) public view returns (uint) {
        if (startTime[id] == 0) return 0;
        return rewardMax[id] - (rewardMax[id] - rewardsLastRewardChange[id]) * rewardConst[id] / (block.timestamp - startTime[id] + rewardConst[id] - timeFromInitToLastRewardChange[id]);
    }

    function reflect(uint reflectAmount) internal {
        uint FTPXA = totalSupply * piecesPerUnit - balances[liquidityAddress];
        uint FFTPXARA = FTPXA - reflectAmount;
        piecesPerUnit = piecesPerUnit * FFTPXARA / FTPXA;
        if (piecesPerUnit < 1)
            piecesPerUnit = 1;
        balances[liquidityAddress] = balances[liquidityAddress] * FFTPXARA / FTPXA;
    }

    function distributorCheck(address sender, address receiver, uint value) internal {
        if (hasReceivedPieces[receiver] == false && value >= distributionRewardThreshold) {
            addRewardableEvents(sender, 1);
            hasReceivedPieces[receiver] = true;
        }
    }

    function marketMakerCheck(address sender, address receiver, uint value) internal {
        if (value >= marketMakingRewardThreshold) {
            if (sender == liquidityAddress) addRewardableEvents(receiver, 0);
            if (receiver == liquidityAddress) addRewardableEvents(sender, 0);
        }
    }

    function addRewardableEvents(address recipient, uint id)  internal {
        if (startTime[id] == 0) startTime[id] = block.timestamp;
        distribute(id);
        if (getAvailableRewards(recipient, id) > 0) storedRewards[recipient][id] = getAvailableRewards(recipient, id) * piecesPerUnit;
        Si[recipient][id] = S[id];
        WCi[recipient][id] = workaroundConstant;
        rewardableEvents[recipient][id] += 1;
        totalRewardableEvents[id] += 1;
    }

    function distribute(uint id) internal {
        if (totalRewardableEvents[id] != 0 && lastRewardDistribution[id] != rewardTheoretical(id)) {
            uint addedReward = rewardTheoretical(id) - lastRewardDistribution[id];
            while (addedReward > 0 && addedReward * workaroundConstant / totalRewardableEvents[id] < 1e9) {
                workaroundConstant *= 2;
                for (uint i; i < 3; i++) S[i] *= 2;
            }
            S[id] += addedReward * workaroundConstant / totalRewardableEvents[id];
            lastRewardDistribution[id] = rewardTheoretical(id);
        }
    }

    function getAvailableRewards(address _address, uint id) public view returns (uint) {
        if (WCi[_address][id] == 0) return 0;
        uint _workaroundConstant = workaroundConstant;
        uint _S = S[id];
        if (totalRewardableEvents[id] != 0 && lastRewardDistribution[id] != rewardTheoretical(id)) {
            uint addedReward = rewardTheoretical(id) - lastRewardDistribution[id];
            while (addedReward > 0 && addedReward * _workaroundConstant / totalRewardableEvents[id] < 1e9) {
                _workaroundConstant *= 2;
                _S *= 2;
            }
            _S += addedReward * _workaroundConstant / totalRewardableEvents[id];
        }
        uint availableRewards = storedRewards[_address][id] + rewardableEvents[_address][id] * (_S - Si[_address][id] * _workaroundConstant / WCi[_address][id]) / _workaroundConstant;
        return availableRewards / piecesPerUnit;
    }

    function getAllAvailableRewards(address _address) public view returns(uint, uint, uint, uint) {
        return (getAvailableRewards(_address, 0), getAvailableRewards(_address, 1), getAvailableRewards(_address, 2), getAvailableRewards(_address, 0) + getAvailableRewards(_address, 1) + getAvailableRewards(_address, 2));
    }

    function withdrawRewards(address _address, uint id) public {
        distribute(id);
        if (WCi[_address][id] == 0) return;
        uint availableRewards = storedRewards[_address][id] + rewardableEvents[_address][id] * (S[id] - Si[_address][id] * workaroundConstant / WCi[_address][id]) / workaroundConstant;
        storedRewards[_address][id] = 0;
        Si[_address][id] = S[id];
        WCi[_address][id] = workaroundConstant;
        uint id2 = (id + 2) * 10;
        balances[_address] += availableRewards - taxify(availableRewards, id2 + 1);
        balances[gamemaster] += taxify(availableRewards, id2 + 5);
        balances[address(this)] -= availableRewards - taxify(availableRewards, id2 + 2) - taxify(availableRewards, id2 + 3);
        for (uint i = 0; i < 2; i++) { changeRewardMax(id != i * 2 ? i * 2 : 1, rewardMax[id] + taxify(availableRewards, id2 + 2 + i)); }
        reflect(taxify(availableRewards, id2 + 4));
        emit Transfer(address(this), _address, (availableRewards - taxify(availableRewards, id2 + 1)) / piecesPerUnit);
        emit Transfer(address(this), gamemaster, taxify(availableRewards, id2 + 5) / piecesPerUnit);
        emit ReflectEvent(address(this), taxify(availableRewards, id2 + 4) / piecesPerUnit);
    }

    function withdrawAllRewards(address _address) public {
        for (uint i = 0; i < 3; i++) { if (getAvailableRewards(_address, i) > 0) withdrawRewards(_address, i); }
    }

    function stake(uint amount) public {
        require(rewardableEvents[msg.sender][2] == 0 && amount > 0, "staking position already exists");
        ERC20(liquidityAddress).transferFrom(msg.sender, address(this), amount);
        if (startTime[2] == 0) startTime[2] = block.timestamp;
        distribute(2);
        if (getAvailableRewards(msg.sender, 2) > 0) storedRewards[msg.sender][2] = getAvailableRewards(msg.sender, 2) * piecesPerUnit;
        Si[msg.sender][2] = S[2];
        WCi[msg.sender][2] = workaroundConstant;
        rewardableEvents[msg.sender][2] += amount;
        totalRewardableEvents[2] += amount;
    }

    function unstake() public {
        require(rewardableEvents[msg.sender][2] > 0, "no current staking position");
        distribute(2);
        if (getAvailableRewards(msg.sender, 2) > 0) storedRewards[msg.sender][2] = getAvailableRewards(msg.sender, 2) * piecesPerUnit;
        ERC20(liquidityAddress).transfer(msg.sender, rewardableEvents[msg.sender][2]);
        totalRewardableEvents[2] -= rewardableEvents[msg.sender][2];
        rewardableEvents[msg.sender][2] = 0;
    }

    function updatePosition(uint amount) public {
        unstake();
        stake(amount);
    }

    function changeTaxDetail(uint id, uint value) public {
        require(msg.sender == owner, "not owner");
        tax[id] = value;
    }

    function changeRewardConstant(uint newRewardConstant, uint id) public {
        require(msg.sender == owner, "not owner");
        rewardConst[id] = newRewardConstant;
    }

    function changeLiquidityAddress(address newLiquidityAddress) public {
        require(msg.sender == owner, "not owner");
        liquidityAddress = newLiquidityAddress;
        for (uint i = 0; i < 3; i++) { rewardableEvents[liquidityAddress][i] = 0; }
    }

    function changeOwner(address newOwner) public {
        require(msg.sender == owner, "not owner");
        owner = newOwner;
    }

    function donate(uint id, uint value) public {
        uint pieceValue = value * piecesPerUnit;
        balances[msg.sender] -= pieceValue;
        balances[address(this)] += pieceValue;
        changeRewardMax(id, rewardMax[id] + pieceValue);
    }

    function changeDisableGame(bool newDisableGame) public {
        require(msg.sender == owner, "not owner");
        disableGame = newDisableGame;
    }

    function changeDistributionRewardThreshold(uint newDistributionRewardThreshold) public {
        require(msg.sender == owner, "not owner");
        distributionRewardThreshold = newDistributionRewardThreshold;
    }

    function changeMarketMakingRewardThreshold(uint newMarketMakingRewardThreshold) public {
        require(msg.sender == owner, "not owner");
        marketMakingRewardThreshold = newMarketMakingRewardThreshold;
    }

    function changeMinHoldAmount(uint newMinHoldAmount) public {
        require(msg.sender == owner, "not owner");
        minHoldAmount = newMinHoldAmount;
    }

    event Transfer(address indexed from, address indexed to, uint tokens);
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event ReflectEvent(address indexed from, uint tokens);

}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"ReflectEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokens","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"S","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"Si","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"WCi","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"newDisableGame","type":"bool"}],"name":"changeDisableGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newDistributionRewardThreshold","type":"uint256"}],"name":"changeDistributionRewardThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newLiquidityAddress","type":"address"}],"name":"changeLiquidityAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMarketMakingRewardThreshold","type":"uint256"}],"name":"changeMarketMakingRewardThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMinHoldAmount","type":"uint256"}],"name":"changeMinHoldAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newRewardConstant","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"changeRewardConstant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"changeTaxDetail","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"cropDust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableGame","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"distributionRewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"donate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gamemaster","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getAllAvailableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"getAvailableRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"hasReceivedPieces","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"lastRewardDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketMakingRewardThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minHoldAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"piecesPerUnit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardConst","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"rewardTheoretical","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardableEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardsLastRewardChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"stake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"startTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"storedRewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"timeFromInitToLastRewardChange","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalPieces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"totalRewardableEvents","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unstake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updatePosition","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"withdrawAllRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"withdrawRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"workaroundConstant","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

60806040526006805460ff191690556001600c553480156200002057600080fd5b506040805180820190915260088082526754616e676c65563360c01b60209092019182526200005291600291620007c0565b5060408051808201909152600680825265544e474c763360d01b60209092019182526200008291600391620007c0565b506000805460ff19166009908117909155620000a090600a620008c6565b620000b090633b9aca0062000994565b6001819055620000c8906001600160801b0362000a0d565b620000db906001600160801b03620009b6565b6009819055600154620000ee9162000866565b600a5560095433600081815260046020908152604082209390935560068054610100600160a81b0319166101008402179055600780546001600160a01b0319169092179091556001600b55633b9aca00600d819055600e819055620493e07f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c8190557f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d8190557f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed192355601090925264012a05f2007fe9d0669b9da863441f6bb27634f5f3174e814c6c2560049a32059809eaee4d305564174876e8007f1a30bfa582bf4431ebf1419d9ec10e3201700dc6bb1a0194584cd35c1484dd738190557fdc169e41e788c2fe3313c51eaa1b48f5d86a6d136e81bd2a906baac5c59233448390557fb36425e8ae0ba8b162ebeabfcbf4b7c211432fbb587906897091c7803a88a9968190556402540be4007fc4948c58cb70c2f6727c5d44652ab0a7a0e96bb8b5e89d080c0b18a1d5bde5808190557f9c1458720648b68658c4fda1ef4df9f72d519cef68ca26b12803782225d5538982905563ee6b28007f5d03aa96fedd319a8101b172ccefcf83f39b30cee82c9f9082d4c595765335138190557f586f007034e8e9bcd3b89e8902b16e5d7d194554f140e1ecb1f0c0b2102e41938390557fc9e3c3a5f5cd888feca1877d2948b91cea3038493722bd5454554ac8e76d5a578190557f545e0132de382ab7c7d867dc9a56bb8c08e0d67d68d1e84947ddf699a77840188390557ebfafef13c92f0cdaf9f6e53d1d49c974210b8a63f5d02e62d77c74716b766b8590557f800f7f18b09f86f3188974192b3e1b7bc90730f50fcf8e966ed7f700689bd0128390557f0f2857b1640854bb125b88aef1d58671c1c0ed2fded0874ec2b05fa16cb6e7bd8590557f82848356feecdea6e6838c71f89cddb30db479903b1e1deaaaa48b927ed161078390557f89fa770d45800d2ca38ef3f00701906b2ff5bdfa05a9df7176135fc6d46dcf638590557fdfab78438e1179b29f047a447dce1145d9cd547652fe9ee8c7ac7009d38c8a418390557f0b39bf4d4ce42b42ae9b7579639739ffea42d3215bd34919e664bd7bc067d7d68290557ff52135d48262d1ca8d6cf8f0acc48ad011063de9c621b0937465bb74244c65878390557fe6ca7fef31fd19be7e1c0d8efb3dfc681860a3370d4c202edc27f6e435c4eddf8190557f1db604e8544aa474f01f7b89a172d096a4228221443808cbc7e7c9bde7f229a88390557f47f61a9f7f3c094fb78d4f9644a1260e897a3f093755679df92db72edbe26f608190557f5010d5dfc8e8e35c1cc97e4a453857a58fc392858ae8c66f01098a7fd0640d5e8390557f22b98b3f8d2c3ed575490f710f2f88081db99dc5b95084120a6d713ee4b7efb88590557f61285ce1ea4c436521841931936754810ec591fde162c2db38ddca76772143098390557f56c45abe21a60c7112ad193abb7f7e08af0bab4fb4abe32f215ff95d845ba02f8590557fce1d9237ed41a6c71a464e6cfbb07ac4f7984bcdc1cbcee6ba769a78dd8769f38390557f9f4abbc5cbc1cdf3b60a7d25bcd70027a6f7c125ba6efa8c95f2a60bbd58c5ff8590557f830424d92ff1d6446d99c621e5f29157500dccb4fc3bfc150c9793e34b9408788390557fdb5ab68df9f30dc96872a978ac46a3451e2ef7077569c3222b82278733416a78919091557ff67967c56b646594b5327f520bffcf2cc5dae9ff4b25aff9c3bbe46fe41f43288290557f451193462fa200bb38bb14c0ab4e49fb5b7745100ee5d80c735f972a3ae8b29b8190557fcebfc60bc335d77c02eaff19abfeef452d767d98684732760a386f0fd24178748290557f16577f6458597ca78f4c4a18a1acdfd5b38385003d9eb8d03cb7b798df970f71557f31f1cab5d9dce9f5ff87fb940acc88d1dc09b0b83a99d30437e1efb12f0d14968190557fb18a8033745574a3555ad96f6e22f4c46e9b59ccf502d8747ee90ff61b4d45e48390557f81e09a907c8fba7772be63edd4770164e8b59213b5a69a010b1643bbc56ac8ac8190557fc13c2ee30fab4becbf0584141fffed05cdcf22f188949522c9dc1388c416df418390557fb5c907b41905eb8e025355433ad658254b61a8518499baa81a5750935241037a8190557f184cbd1bb8f684c8e0683ccc2b6f05b5d2d9b3c1bd2a2ef3b96babee4ecbe2658390557f6b3b358d6cb7387c3fd07ecfb1966ee8e75a06a3282b87927a92c5c3226975fc8190557f7a1842c76c0a906192470bd5593790d06c94cf463647e40e7ceec9ee9ecf085e9290925561025990527fc90deb313bf2e73a3403dd5c186c352d51e22f8fb5845d81ae33571a242dc3b15562000a50565b828054620007ce90620009d0565b90600052602060002090601f016020900481019282620007f257600085556200083d565b82601f106200080d57805160ff19168380011785556200083d565b828001600101855582156200083d579182015b828111156200083d57825182559160200191906001019062000820565b506200084b9291506200084f565b5090565b5b808211156200084b576000815560010162000850565b60008262000878576200087862000a3a565b500490565b600181815b80851115620008be578160001904821115620008a257620008a262000a24565b80851615620008b057918102915b93841c939080029062000882565b509250929050565b6000620008d760ff841683620008de565b9392505050565b600082620008ef575060016200098e565b81620008fe575060006200098e565b8160018114620009175760028114620009225762000942565b60019150506200098e565b60ff84111562000936576200093662000a24565b50506001821b6200098e565b5060208310610133831016604e8410600b841016171562000967575081810a6200098e565b6200097383836200087d565b80600019048211156200098a576200098a62000a24565b0290505b92915050565b6000816000190483118215151615620009b157620009b162000a24565b500290565b600082821015620009cb57620009cb62000a24565b500390565b600181811c90821680620009e557607f821691505b6020821081141562000a0757634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a1f5762000a1f62000a3a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b61366c8062000a606000396000f3fe608060405234801561001057600080fd5b50600436106103575760003560e01c806370a08231116101c8578063b316706c11610104578063dd62ed3e116100a2578063e7877c361161007c578063e7877c3614610817578063f6b5fc2e14610842578063fd9ff94c1461086d578063fddacd7b146108a057600080fd5b8063dd62ed3e146107b1578063e1199817146107f7578063e653723d1461080457600080fd5b8063c55897bf116100de578063c55897bf14610753578063c561905014610766578063ca6be7f11461078b578063d6ef7af01461079e57600080fd5b8063b316706c14610724578063b5a2ac3b1461072d578063c4e4abc11461074057600080fd5b8063a1ff4f9111610171578063a694fc3a1161014b578063a694fc3a146106d8578063a6f9dae1146106eb578063a9059cbb146106fe578063b2c5541f1461071157600080fd5b8063a1ff4f9114610687578063a457c2d7146106b2578063a5d72fa7146106c557600080fd5b80638ebfe95c116101a25780638ebfe95c1461066357806395d89b41146106765780639ecba7ea1461067e57600080fd5b806370a08231146106105780637bd4e08f146106235780638da5cb5b1461064357600080fd5b80632def6620116102975780633ec4c96811610240578063577e59ea1161021a578063577e59ea146105cb5780635b7c132d146105d45780636cfdc929146105e75780636eee7549146105f057600080fd5b80633ec4c9681461056b5780633ee708aa1461058b5780634bc95007146105ab57600080fd5b8063338b41a211610271578063338b41a21461052557806335b9950f14610545578063395093511461055857600080fd5b80632def6620146104b9578063313ce567146104c15780633221c93f146104e057600080fd5b80631936f4b91161030457806322d5ba98116102de57806322d5ba981461045057806323b872dd14610473578063251ad9a2146104865780632c8aaf6c1461049957600080fd5b80631936f4b9146103fc5780631ae3d5ff1461042757806320bc17b91461044757600080fd5b80630cdd53f6116103355780630cdd53f6146103b25780630d1aba1f146103c557806318160ddd146103f357600080fd5b806306fdde031461035c578063095ea7b31461037a57806309f1c80a1461039d575b600080fd5b6103646108a9565b60405161037191906133d3565b60405180910390f35b61038d610388366004613262565b610937565b6040519015158152602001610371565b6103b06103ab366004613398565b6109b1565b005b6103b06103c03660046133b1565b6109c5565b6103e56103d3366004613398565b60156020526000908152604090205481565b604051908152602001610371565b6103e560015481565b6103e561040a366004613262565b601960209081526000928352604080842090915290825290205481565b6103e5610435366004613398565b60106020526000908152604090205481565b6103e5600a5481565b61038d61045e3660046131d8565b60186020526000908152604090205460ff1681565b61038d610481366004613226565b610a4c565b6103b0610494366004613398565b611050565b6103e56104a7366004613398565b60146020526000908152604090205481565b6103b06110db565b6000546104ce9060ff1681565b60405160ff9091168152602001610371565b6008546105009073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610371565b6103e5610533366004613398565b600f6020526000908152604090205481565b6103b0610553366004613398565b6112ca565b61038d610566366004613262565b611350565b6103e5610579366004613398565b60126020526000908152604090205481565b6103e5610599366004613398565b60176020526000908152604090205481565b6103e56105b9366004613398565b60116020526000908152604090205481565b6103e5600e5481565b6103b06105e23660046131d8565b6113f0565b6103e560095481565b6103e56105fe366004613398565b60136020526000908152604090205481565b6103e561061e3660046131d8565b611506565b6103e5610631366004613398565b60166020526000908152604090205481565b6007546105009073ffffffffffffffffffffffffffffffffffffffff1681565b6103b0610671366004613376565b61153a565b6103646115ec565b6103e5600d5481565b6103e5610695366004613262565b601a60209081526000928352604080842090915290825290205481565b61038d6106c0366004613262565b6115f9565b6103b06106d3366004613398565b611635565b6103b06106e6366004613398565b6116bb565b6103b06106f93660046131d8565b611950565b61038d61070c366004613262565b611a18565b6103e561071f366004613262565b611ee3565b6103e5600c5481565b6103e561073b366004613398565b612118565b6103b061074e3660046133b1565b6121cc565b6103b06107613660046131d8565b61225e565b60065461050090610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103b061079936600461328c565b612298565b6103b06107ac366004613262565b612642565b6103e56107bf3660046131f3565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b60065461038d9060ff1681565b6103b06108123660046133b1565b612ac1565b6103e5610825366004613262565b601b60209081526000928352604080842090915290825290205481565b6103e5610850366004613262565b601c60209081526000928352604080842090915290825290205481565b61088061087b3660046131d8565b612b54565b604080519485526020850193909352918301526060820152608001610371565b6103e5600b5481565b600280546108b690613522565b80601f01602080910402602001604051908101604052809291908181526020018280546108e290613522565b801561092f5780601f106109045761010080835404028352916020019161092f565b820191906000526020600020905b81548152906001019060200180831161091257829003601f168201915b505050505081565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061099f9086815260200190565b60405180910390a35060015b92915050565b6109b96110db565b6109c2816116bb565b50565b6000600a54826109d59190613499565b336000908152600460205260408120805492935083929091906109f99084906134d6565b90915550503060009081526004602052604081208054839290610a1d908490613446565b9091555050600083815260116020526040902054610a47908490610a42908490613446565b612bbf565b505050565b600a5473ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120549091610a809161345e565b821115610a8c57600080fd5b610a968483612c23565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320338452909152902054909250610ad59083906134d6565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320338452909152812091909155600a54610b169084613499565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040812080549293508392909190610b509084906134d6565b909155505060075473ffffffffffffffffffffffffffffffffffffffff86811691161480610b80575060065460ff165b15610c325773ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054839290610bba908490613446565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610c2091815260200190565b60405180910390a36001915050611049565b610c3d81600a612cde565b610c4790826134d6565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604081208054909190610c7c908490613446565b90915550610c8d9050816028612cde565b610c9882601e612cde565b610ca3836014612cde565b610cad9190613446565b610cb79190613446565b3060009081526004602052604081208054909190610cd6908490613446565b90915550610ce7905081603c612cde565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604081208054909190610d23908490613446565b90915550600090505b6003811015610d8357610d7181610d5884610d4883600a613499565b610d53906014613446565b612cde565b600084815260116020526040902054610a429190613446565b80610d7b81613570565b915050610d2c565b50610d97610d92826032612cde565b612d3d565b60075473ffffffffffffffffffffffffffffffffffffffff868116911614801590610de2575060065473ffffffffffffffffffffffffffffffffffffffff8681166101009092041614155b8015610e09575060075473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015610e35575060065473ffffffffffffffffffffffffffffffffffffffff8581166101009092041614155b15610e9b5760085473ffffffffffffffffffffffffffffffffffffffff868116911614801590610e80575060085473ffffffffffffffffffffffffffffffffffffffff858116911614155b15610e9057610e90858585612e27565b610e9b858585612ec2565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610ef586600a612cde565b610eff90876134d6565b60405190815260200160405180910390a33073ffffffffffffffffffffffffffffffffffffffff86167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610f54866028612cde565b610f5f87601e612cde565b610f6a886014612cde565b610f749190613446565b610f7e9190613446565b60405190815260200160405180910390a360065473ffffffffffffffffffffffffffffffffffffffff61010090910481169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610fde86603c612cde565b60405190815260200160405180910390a38473ffffffffffffffffffffffffffffffffffffffff167ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a7611032856032612cde565b60405190815260200160405180910390a260019150505b9392505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146110d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600b55565b336000908152601c602090815260408083206002845290915290205461115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6e6f2063757272656e74207374616b696e6720706f736974696f6e000000000060448201526064016110cd565b6111676002612f27565b6000611174336002611ee3565b11156111af57600a54611188336002611ee3565b6111929190613499565b336000908152601b60209081526040808320600284529091529020555b600854336000818152601c6020908152604080832060028452909152908190205490517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb90604401600060405180830381600087803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b5050336000908152601c6020908152604080832060028452825282205460149091527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a805491945092506112a79084906134d6565b9091555050336000908152601c6020908152604080832060028452909152812055565b60075473ffffffffffffffffffffffffffffffffffffffff16331461134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600e55565b33600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461138c908390613446565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161099f565b60075473ffffffffffffffffffffffffffffffffffffffff163314611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905560005b60038110156115025760085473ffffffffffffffffffffffffffffffffffffffff166000908152601c60209081526040808320848452909152812055806114fa81613570565b9150506114b4565b5050565b600a5473ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205490916109ab9161345e565b60075473ffffffffffffffffffffffffffffffffffffffff1633146115bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600380546108b690613522565b33600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461138c9083906134d6565b60075473ffffffffffffffffffffffffffffffffffffffff1633146116b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600d55565b336000908152601c60209081526040808320600284529091529020541580156116e45750600081115b61174a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7374616b696e6720706f736974696f6e20616c7265616479206578697374730060448201526064016110cd565b6008546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd90606401600060405180830381600087803b1580156117c257600080fd5b505af11580156117d6573d6000803e3d6000fd5b50506002600052505060126020527f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b2546118385760026000526012602052427f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b2555b6118426002612f27565b600061184f336002611ee3565b111561188a57600a54611863336002611ee3565b61186d9190613499565b336000908152601b60209081526040808320600284529091529020555b7fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead54336000818152601960209081526040808320600280855290835281842095909555600c54848452601a8352818420868552835281842055928252601c81528282209382529290925281208054839290611906908490613446565b90915550506002600090815260146020527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a8054839290611948908490613446565b909155505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146119d1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600a54336000908152600460205260408120549091611a369161345e565b821115611a4257600080fd5b611a4c3383612c23565b91506000600a5483611a5e9190613499565b33600090815260046020526040812080549293508392909190611a829084906134d6565b909155505060075473ffffffffffffffffffffffffffffffffffffffff16331480611aaf575060065460ff165b15611b455773ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054839290611ae9908490613446565b909155505060405183815273ffffffffffffffffffffffffffffffffffffffff85169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360019150506109ab565b611b5081600a612cde565b611b5a90826134d6565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604081208054909190611b8f908490613446565b90915550611ba09050816028612cde565b611bab82601e612cde565b611bb6836014612cde565b611bc09190613446565b611bca9190613446565b3060009081526004602052604081208054909190611be9908490613446565b90915550611bfa905081603c612cde565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604081208054909190611c36908490613446565b90915550600090505b6003811015611c6d57611c5b81610d5884610d4883600a613499565b80611c6581613570565b915050611c3f565b50611c7c610d92826032612cde565b60075473ffffffffffffffffffffffffffffffffffffffff163314801590611cc15750600654610100900473ffffffffffffffffffffffffffffffffffffffff163314155b8015611ce8575060075473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015611d14575060065473ffffffffffffffffffffffffffffffffffffffff8581166101009092041614155b15611d775760085473ffffffffffffffffffffffffffffffffffffffff163314801590611d5c575060085473ffffffffffffffffffffffffffffffffffffffff858116911614155b15611d6c57611d6c338585612e27565b611d77338585612ec2565b73ffffffffffffffffffffffffffffffffffffffff8416337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611dbb86600a612cde565b611dc590876134d6565b60405190815260200160405180910390a330337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611e04866028612cde565b611e0f87601e612cde565b611e1a886014612cde565b611e249190613446565b611e2e9190613446565b60405190815260200160405180910390a3600654610100900473ffffffffffffffffffffffffffffffffffffffff16337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611e8a86603c612cde565b60405190815260200160405180910390a3337ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a7611ec8856032612cde565b60405190815260200160405180910390a25060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a60209081526040808320848452909152812054611f20575060006109ab565b600c546000838152600f602090815260408083205460149092529091205415801590611f625750611f5084612118565b60008581526015602052604090205414155b1561201757600084815260156020526040812054611f7f86612118565b611f8991906134d6565b90505b600081118015611fc25750600085815260146020526040902054633b9aca0090611fb68584613499565b611fc0919061345e565b105b15611fe657611fd2600284613499565b9250611fdf600283613499565b9150611f8c565b600085815260146020526040902054611fff8483613499565b612009919061345e565b6120139083613446565b9150505b73ffffffffffffffffffffffffffffffffffffffff85166000818152601a60209081526040808320888452825280832054938352601982528083208884529091528120549091849161206a908390613499565b612074919061345e565b61207e90846134d6565b73ffffffffffffffffffffffffffffffffffffffff88166000908152601c602090815260408083208a84529091529020546120b99190613499565b6120c3919061345e565b73ffffffffffffffffffffffffffffffffffffffff87166000908152601b602090815260408083208984529091529020546120fe9190613446565b9050600a548161210e919061345e565b9695505050505050565b60008181526012602052604081205461213357506000919050565b6000828152601760209081526040808320546013835281842054601290935292205461215f90426134d6565b6121699190613446565b61217391906134d6565b6000838152601360209081526040808320546016835281842054601190935292205461219f91906134d6565b6121a99190613499565b6121b3919061345e565b6000838152601160205260409020546109ab91906134d6565b60075473ffffffffffffffffffffffffffffffffffffffff16331461224d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600090815260136020526040902055565b60005b60038110156115025760006122768383611ee3565b1115612286576122868282612642565b8061229081613570565b915050612261565b805160005b825181101561248b57601860008483815181106122bc576122bc6135d8565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff161561230757816122ff816134ed565b925050612479565b600a54600d546123179190613499565b6004600085848151811061232d5761232d6135d8565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461237e9190613446565b9250508190555060016018600085848151811061239d5761239d6135d8565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550828181518110612408576124086135d8565b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d5460405161247091815260200190565b60405180910390a35b8061248381613570565b91505061229d565b5080600a54600d5461249d9190613499565b6124a79190613499565b33600090815260046020526040812080549091906124c69084906134d6565b9091555050600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a3546125295760016000526012602052427f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a3555b6125336001612f27565b6000612540336001611ee3565b111561257b57600a54612554336001611ee3565b61255e9190613499565b336000908152601b60209081526040808320600184529091529020555b7f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f54336000818152601960209081526040808320600180855290835281842095909555600c54848452601a8352818420868552835281842055928252601c815282822093825292909252812080548392906125f7908490613446565b90915550506001600090815260146020527fb6c61a840592cc84133e4b25bd509abf4659307c57b160799b38490a5aa48f2c8054839290612639908490613446565b90915550505050565b61264b81612f27565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a60209081526040808320848452909152902054612684575050565b600c5473ffffffffffffffffffffffffffffffffffffffff83166000818152601a6020908152604080832086845282528083205493835260198252808320868452909152812054909291906126da908390613499565b6126e4919061345e565b6000848152600f60205260409020546126fd91906134d6565b73ffffffffffffffffffffffffffffffffffffffff85166000908152601c602090815260408083208784529091529020546127389190613499565b612742919061345e565b73ffffffffffffffffffffffffffffffffffffffff84166000908152601b6020908152604080832086845290915290205461277d9190613446565b73ffffffffffffffffffffffffffffffffffffffff84166000818152601b602090815260408083208784528252808320839055600f82528083205484845260198352818420888552835281842055600c54938352601a82528083208784529091528120919091559091506127f2836002613446565b6127fd90600a613499565b905061280e82610d53836001613446565b61281890836134d6565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600460205260408120805490919061284d908490613446565b90915550612862905082610d53836005613446565b600654610100900473ffffffffffffffffffffffffffffffffffffffff166000908152600460205260408120805490919061289e908490613446565b909155506128b3905082610d53836003613446565b6128c283610d53846002613446565b6128cc90846134d6565b6128d691906134d6565b30600090815260046020526040812080549091906128f59084906134d6565b90915550600090505b600281101561297357612961612915826002613499565b85141561292357600161292e565b61292e826002613499565b612948858461293e876002613446565b610d539190613446565b600087815260116020526040902054610a429190613446565b8061296b81613570565b9150506128fe565b50612986610d9283610d53846004613446565b600a5473ffffffffffffffffffffffffffffffffffffffff85169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129d486610d53876001613446565b6129de90876134d6565b6129e8919061345e565b60405190815260200160405180910390a3600654600a5461010090910473ffffffffffffffffffffffffffffffffffffffff169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a4f86610d53876005613446565b612a59919061345e565b60405190815260200160405180910390a3600a5430907ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a790612aa085610d53866004613446565b612aaa919061345e565b60405190815260200160405180910390a250505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314612b42576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b60009182526010602052604090912055565b600080600080612b65856000611ee3565b612b70866001611ee3565b612b7b876002611ee3565b612b86886002611ee3565b612b91896001611ee3565b612b9c8a6000611ee3565b612ba69190613446565b612bb09190613446565b93509350935093509193509193565b60008281526012602052604090205415612c1157612bdc82612118565b600083815260166020908152604080832093909355601290522054612c0190426134d6565b6000838152601760205260409020555b60009182526011602052604090912055565b600b54600a5473ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120549092918491612c5e919061345e565b612c6891906134d6565b108015612c90575060085473ffffffffffffffffffffffffffffffffffffffff848116911614155b15612cd857600b54600a5473ffffffffffffffffffffffffffffffffffffffff8516600090815260046020526040902054612ccb919061345e565b612cd591906134d6565b91505b50919050565b6000601081612cee84600a613499565b612cf9906001613446565b8152602001908152602001600020546010600084600a612d199190613499565b81526020019081526020016000205484612d339190613499565b611049919061345e565b60085473ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040812054600a54600154612d759190613499565b612d7f91906134d6565b90506000612d8d83836134d6565b90508181600a54612d9e9190613499565b612da8919061345e565b600a81905560011115612dbb576001600a555b60085473ffffffffffffffffffffffffffffffffffffffff166000908152600460205260409020548290612df0908390613499565b612dfa919061345e565b60085473ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040902055505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526018602052604090205460ff16158015612e5f5750600d548110155b15610a4757612e6f83600161308b565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260186020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050565b600e548110610a475760085473ffffffffffffffffffffffffffffffffffffffff84811691161415612ef957612ef982600061308b565b60085473ffffffffffffffffffffffffffffffffffffffff83811691161415610a4757610a4783600061308b565b60008181526014602052604090205415801590612f5a5750612f4881612118565b60008281526015602052604090205414155b156109c257600081815260156020526040812054612f7783612118565b612f8191906134d6565b90505b600081118015612fbe5750600082815260146020526040902054600c54633b9aca009190612fb29084613499565b612fbc919061345e565b105b15613025576002600c6000828254612fd69190613499565b90915550600090505b600381101561301f576000818152600f60205260408120805460029290613007908490613499565b9091555081905061301781613570565b915050612fdf565b50612f84565b600082815260146020526040902054600c546130419083613499565b61304b919061345e565b6000838152600f602052604081208054909190613069908490613446565b90915550613078905082612118565b6000838152601560205260409020555050565b6000818152601260205260409020546130b05760008181526012602052604090204290555b6130b981612f27565b60006130c58383611ee3565b111561311457600a546130d88383611ee3565b6130e29190613499565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601b602090815260408083208584529091529020555b6000818152600f602090815260408083205473ffffffffffffffffffffffffffffffffffffffff861680855260198452828520868652845282852091909155600c54818552601a84528285208686528452828520558352601c8252808320848452909152812080546001929061318b908490613446565b90915550506000818152601460205260408120805460019290612639908490613446565b803573ffffffffffffffffffffffffffffffffffffffff811681146131d357600080fd5b919050565b6000602082840312156131ea57600080fd5b611049826131af565b6000806040838503121561320657600080fd5b61320f836131af565b915061321d602084016131af565b90509250929050565b60008060006060848603121561323b57600080fd5b613244846131af565b9250613252602085016131af565b9150604084013590509250925092565b6000806040838503121561327557600080fd5b61327e836131af565b946020939093013593505050565b6000602080838503121561329f57600080fd5b823567ffffffffffffffff808211156132b757600080fd5b818501915085601f8301126132cb57600080fd5b8135818111156132dd576132dd613607565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f8301168101818110858211171561332057613320613607565b604052828152858101935084860182860187018a101561333f57600080fd5b600095505b8386101561336957613355816131af565b855260019590950194938601938601613344565b5098975050505050505050565b60006020828403121561338857600080fd5b8135801515811461104957600080fd5b6000602082840312156133aa57600080fd5b5035919050565b600080604083850312156133c457600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015613400578581018301518582016040015282016133e4565b81811115613412576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b60008219821115613459576134596135a9565b500190565b600082613494577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134d1576134d16135a9565b500290565b6000828210156134e8576134e86135a9565b500390565b6000816134fc576134fc6135a9565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c9082168061353657607f821691505b60208210811415612cd8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135a2576135a26135a9565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212207672193bd3f36af3d68138026eff08f60b4e0f74da12503b5140c553ec0366c064736f6c63430008070033

Deployed ByteCode Sourcemap

221:19073:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;306:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5375:200;;;;;;:::i;:::-;;:::i;:::-;;;4276:14:1;;4269:22;4251:41;;4239:2;4224:18;5375:200:0;4111:187:1;17184:96:0;;;;;;:::i;:::-;;:::i;:::-;;18030:253;;;;;;:::i;:::-;;:::i;1113:51::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6163:25:1;;;6151:2;6136:18;1113:51:0;6017:177:1;276:23:0;;;;;;1352:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;880:32;;;;;;:::i;:::-;;;;;;;;;;;;;;646:25;;;;;;1296:49;;;;;;:::i;:::-;;;;;;;;;;;;;;;;7622:1463;;;;;;:::i;:::-;;:::i;18905:162::-;;;;;;:::i;:::-;;:::i;1056:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16692:484;;;:::i;248:21::-;;;;;;;;;;;;6767:4:1;6755:17;;;6737:36;;6725:2;6710:18;248:21:0;6595:184:1;578:31:0;;;;;;;;;;;;3351:42:1;3339:55;;;3321:74;;3309:2;3294:18;578:31:0;3175:226:1;843:30:0;;;;;;:::i;:::-;;;;;;;;;;;;;;18679:218;;;;;;:::i;:::-;;:::i;5583:274::-;;;;;;:::i;:::-;;:::i;964:38::-;;;;;;:::i;:::-;;;;;;;;;;;;;;1230:59;;;;;;:::i;:::-;;;;;;;;;;;;;;919:38;;;;;;:::i;:::-;;;;;;;;;;;;;;797:39;;;;;;17619:262;;;;;;:::i;:::-;;:::i;616:23::-;;;;;;1009:40;;;;;;:::i;:::-;;;;;;;;;;;;;;5104:123;;;;;;:::i;:::-;;:::i;1171:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;551:20;;;;;;;;;18291:154;;;;;;:::i;:::-;;:::i;331:20::-;;;:::i;751:39::-;;;;;;1410:52;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5865:284;;;;;;:::i;:::-;;:::i;18453:218::-;;;;;;:::i;:::-;;:::i;16048:636::-;;;;;;:::i;:::-;;:::i;17889:133::-;;;;;;:::i;:::-;;:::i;6157:1457::-;;;;;;:::i;:::-;;:::i;13315:928::-;;;;;;:::i;:::-;;:::i;710:34::-;;;;;;10890:302;;;;;;:::i;:::-;;:::i;17435:176::-;;;;;;:::i;:::-;;:::i;15865:175::-;;;;;;:::i;:::-;;:::i;519:25::-;;;;;;;;;;;;9093:1047;;;;;;:::i;:::-;;:::i;14585:1272::-;;;;;;:::i;:::-;;:::i;5235:132::-;;;;;;:::i;:::-;5335:15;;;;5308:7;5335:15;;;:7;:15;;;;;;;;:24;;;;;;;;;;;;;5235:132;481:31;;;;;;;;;17288:139;;;;;;:::i;:::-;;:::i;1469:62::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1538:65;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;14251:326;;;;;;:::i;:::-;;:::i;:::-;;;;6430:25:1;;;6486:2;6471:18;;6464:34;;;;6514:18;;;6507:34;6572:2;6557:18;;6550:34;6417:3;6402:19;14251:326:0;6199:391:1;678:25:0;;;;;;306:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;5375:200::-;5465:10;5440:4;5457:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:36;;;5509;5440:4;;5457:28;;5509:36;;;;5488:5;6163:25:1;;6151:2;6136:18;;6017:177;5509:36:0;;;;;;;;-1:-1:-1;5563:4:0;5375:200;;;;;:::o;17184:96::-;17239:9;:7;:9::i;:::-;17259:13;17265:6;17259:5;:13::i;:::-;17184:96;:::o;18030:253::-;18085:15;18111:13;;18103:5;:21;;;;:::i;:::-;18144:10;18135:20;;;;:8;:20;;;;;:34;;18085:39;;-1:-1:-1;18085:39:0;;18135:20;;;:34;;18085:39;;18135:34;:::i;:::-;;;;-1:-1:-1;;18197:4:0;18180:23;;;;:8;:23;;;;;:37;;18207:10;;18180:23;:37;;18207:10;;18180:37;:::i;:::-;;;;-1:-1:-1;;18248:13:0;;;;:9;:13;;;;;;18228:47;;18244:2;;18248:26;;18264:10;;18248:26;:::i;:::-;18228:15;:47::i;:::-;18074:209;18030:253;;:::o;7622:1463::-;7747:13;;7730:14;;;7701:4;7730:14;;;:8;:14;;;;;;7701:4;;7730:30;;;:::i;:::-;7722:5;:38;7718:52;;;7762:8;;;7718:52;7789:27;7804:4;7810:5;7789:14;:27::i;:::-;7855:13;;;;;;;:7;:13;;;;;;;;7869:10;7855:25;;;;;;;;7781:35;;-1:-1:-1;7855:33:0;;7781:35;;7855:33;:::i;:::-;7827:13;;;;;;;:7;:13;;;;;;;;7841:10;7827:25;;;;;;;:61;;;;7925:13;;7917:21;;:5;:21;:::i;:::-;7949:14;;;;;;;:8;:14;;;;;:28;;7899:39;;-1:-1:-1;7899:39:0;;7949:14;;;:28;;7899:39;;7949:28;:::i;:::-;;;;-1:-1:-1;;8000:5:0;;;7992:13;;;8000:5;;7992:13;;:28;;-1:-1:-1;8009:11:0;;;;7992:28;7988:158;;;8037:12;;;;;;;:8;:12;;;;;:26;;8053:10;;8037:12;:26;;8053:10;;8037:26;:::i;:::-;;;;;;;;8098:2;8083:25;;8092:4;8083:25;;;8102:5;8083:25;;;;6163::1;;6151:2;6136:18;;6017:177;8083:25:0;;;;;;;;8130:4;8123:11;;;;;7988:158;8185:22;8192:10;8204:2;8185:6;:22::i;:::-;8172:35;;:10;:35;:::i;:::-;8156:12;;;;;;;:8;:12;;;;;:51;;:12;;;:51;;;;;:::i;:::-;;;;-1:-1:-1;8295:22:0;;-1:-1:-1;8302:10:0;8314:2;8295:6;:22::i;:::-;8270;8277:10;8289:2;8270:6;:22::i;:::-;8245;8252:10;8264:2;8245:6;:22::i;:::-;:47;;;;:::i;:::-;:72;;;;:::i;:::-;8235:4;8218:23;;;;:8;:23;;;;;:99;;:23;;;:99;;;;;:::i;:::-;;;;-1:-1:-1;8352:22:0;;-1:-1:-1;8359:10:0;8371:2;8352:6;:22::i;:::-;8337:10;;;;;;;8328:20;;;;:8;:20;;;;;:46;;:20;;;:46;;;;;:::i;:::-;;;;-1:-1:-1;8390:6:0;;-1:-1:-1;8385:100:0;8406:1;8402;:5;8385:100;;;8416:66;8432:1;8450:31;8457:10;8474:6;8432:1;8478:2;8474:6;:::i;:::-;8469:11;;:2;:11;:::i;:::-;8450:6;:31::i;:::-;8435:12;;;;:9;:12;;;;;;:46;;;;:::i;8416:66::-;8409:3;;;;:::i;:::-;;;;8385:100;;;;8495:31;8503:22;8510:10;8522:2;8503:6;:22::i;:::-;8495:7;:31::i;:::-;8549:5;;;8541:13;;;8549:5;;8541:13;;;;:35;;-1:-1:-1;8566:10:0;;;8558:18;;;8566:10;;;;;8558:18;;8541:35;:50;;;;-1:-1:-1;8586:5:0;;;8580:11;;;8586:5;;8580:11;;8541:50;:70;;;;-1:-1:-1;8601:10:0;;;8595:16;;;8601:10;;;;;8595:16;;8541:70;8537:240;;;8640:16;;;8632:24;;;8640:16;;8632:24;;;;:50;;-1:-1:-1;8666:16:0;;;8660:22;;;8666:16;;8660:22;;8632:50;8628:89;;;8684:33;8701:4;8707:2;8711:5;8684:16;:33::i;:::-;8732;8749:4;8755:2;8759:5;8732:16;:33::i;:::-;8807:2;8792:45;;8801:4;8792:45;;;8819:17;8826:5;8833:2;8819:6;:17::i;:::-;8811:25;;:5;:25;:::i;:::-;8792:45;;6163:25:1;;;6151:2;6136:18;8792:45:0;;;;;;;8876:4;8853:88;;;;8923:17;8930:5;8937:2;8923:6;:17::i;:::-;8903;8910:5;8917:2;8903:6;:17::i;:::-;8883;8890:5;8897:2;8883:6;:17::i;:::-;:37;;;;:::i;:::-;:57;;;;:::i;:::-;8853:88;;6163:25:1;;;6151:2;6136:18;8853:88:0;;;;;;;8972:10;;;;;;;;;;8957:45;;;8984:17;8991:5;8998:2;8984:6;:17::i;:::-;8957:45;;6163:25:1;;;6151:2;6136:18;8957:45:0;;;;;;;9031:4;9018:37;;;9037:17;9044:5;9051:2;9037:6;:17::i;:::-;9018:37;;6163:25:1;;;6151:2;6136:18;9018:37:0;;;;;;;9073:4;9066:11;;;7622:1463;;;;;;:::o;18905:162::-;18997:5;;;;18983:10;:19;18975:41;;;;;;;5882:2:1;18975:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18975:41:0;;;;;;;;;19027:13;:32;18905:162::o;16692:484::-;16754:10;16771:1;16737:28;;;:16;:28;;;;;;;;16766:1;16737:31;;;;;;;;16729:75;;;;;;;5166:2:1;16729:75:0;;;5148:21:1;5205:2;5185:18;;;5178:30;5244:29;5224:18;;;5217:57;5291:18;;16729:75:0;4964:351:1;16729:75:0;16815:13;16826:1;16815:10;:13::i;:::-;16880:1;16843:34;16863:10;16875:1;16843:19;:34::i;:::-;:38;16839:125;;;16951:13;;16914:34;16934:10;16946:1;16914:19;:34::i;:::-;:50;;;;:::i;:::-;16897:10;16883:25;;;;:13;:25;;;;;;;;16909:1;16883:28;;;;;;;:81;16839:125;16981:16;;17008:10;16981:16;17020:28;;;:16;:28;;;;;;;;17049:1;17020:31;;;;;;;;;;16975:77;;;;;;;;3983:74:1;;;;4073:18;;;4066:34;16981:16:0;;;;;16975:32;;3956:18:1;;16975:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17108:10:0;17091:28;;;;:16;:28;;;;;;;;17120:1;17091:31;;;;;;;17063:21;:24;;;;:59;;17091:31;;-1:-1:-1;17063:24:0;-1:-1:-1;17063:59:0;;17091:31;;17063:59;:::i;:::-;;;;-1:-1:-1;;17150:10:0;17167:1;17133:28;;;:16;:28;;;;;;;;17162:1;17133:31;;;;;;;:35;16692:484::o;18679:218::-;18799:5;;;;18785:10;:19;18777:41;;;;;;;5882:2:1;18777:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18777:41:0;5680:332:1;18777:41:0;18829:27;:60;18679:218::o;5583:274::-;5719:10;5663:4;5711:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:41;;5742:10;;5711:41;:::i;:::-;5688:10;5680:19;;;;:7;:19;;;;;;;;;:28;;;;;;;;;;;;:72;;;5768:59;6163:25:1;;;5680:28:0;;5768:59;;6136:18:1;5768:59:0;6017:177:1;17619:262:0;17720:5;;;;17706:10;:19;17698:41;;;;;;;5882:2:1;17698:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17698:41:0;5680:332:1;17698:41:0;17750:16;:38;;;;;;;;;;-1:-1:-1;17799:75:0;17820:1;17816;:5;17799:75;;;17847:16;;;;17870:1;17830:34;;;:16;:34;;;;;;;;:37;;;;;;;;:41;17865:1;17823:3;17865:1;17823:3;:::i;:::-;;;;17799:75;;;;17619:262;:::o;5104:123::-;5206:13;;5187:16;;;5160:7;5187:16;;;:8;:16;;;;;;5160:7;;5187:32;;;:::i;18291:154::-;18379:5;;;;18365:10;:19;18357:41;;;;;;;5882:2:1;18357:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18357:41:0;5680:332:1;18357:41:0;18409:11;:28;;;;;;;;;;;;;18291:154::o;331:20::-;;;;;;;:::i;5865:284::-;6006:10;5950:4;5998:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:46;;6029:15;;5998:46;:::i;18453:218::-;18573:5;;;;18559:10;:19;18551:41;;;;;;;5882:2:1;18551:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18551:41:0;5680:332:1;18551:41:0;18603:27;:60;18453:218::o;16048:636::-;16119:10;16102:28;;;;:16;:28;;;;;;;;16131:1;16102:31;;;;;;;;:36;:50;;;;;16151:1;16142:6;:10;16102:50;16094:94;;;;;;;5522:2:1;16094:94:0;;;5504:21:1;5561:2;5541:18;;;5534:30;5600:33;5580:18;;;5573:61;5651:18;;16094:94:0;5320:355:1;16094:94:0;16205:16;;16199:71;;;;;16236:10;16199:71;;;3669:34:1;16256:4:0;3719:18:1;;;3712:43;3771:18;;;3764:34;;;16205:16:0;;;;;16199:36;;3581:18:1;;16199:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16295:1:0;16285:12;;-1:-1:-1;;16285:9:0;:12;;;;16281:53;;16314:1;16304:12;;:9;:12;;16319:15;16304:12;:30;16281:53;16345:13;16356:1;16345:10;:13::i;:::-;16410:1;16373:34;16393:10;16405:1;16373:19;:34::i;:::-;:38;16369:125;;;16481:13;;16444:34;16464:10;16476:1;16444:19;:34::i;:::-;:50;;;;:::i;:::-;16427:10;16413:25;;;;:13;:25;;;;;;;;16439:1;16413:28;;;;;;;:81;16369:125;16525:4;;16508:10;16525:4;16505:14;;;:2;16525:4;16505:14;;;16525:4;16505:14;;;16527:1;16505:17;;;;;;;;;:24;;;;16561:18;;16540:15;;;:3;:15;;;;;:18;;;;;;;;:39;16590:28;;;:16;:28;;;;;:31;;;;;;;;;:41;;16625:6;;16525:4;16590:41;;16625:6;;16590:41;:::i;:::-;;;;-1:-1:-1;;16664:1:0;16642:24;;;;:21;:24;;;:34;;16670:6;;16642:24;:34;;16670:6;;16642:34;:::i;:::-;;;;-1:-1:-1;;;16048:636:0:o;17889:133::-;17968:5;;;;17954:10;:19;17946:41;;;;;;;5882:2:1;17946:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17946:41:0;5680:332:1;17946:41:0;17998:5;:16;;;;;;;;;;;;;;;17889:133::o;6157:1457::-;6270:13;;6256:10;6218:4;6247:20;;;:8;:20;;;;;;6218:4;;6247:36;;;:::i;:::-;6239:5;:44;6235:58;;;6285:8;;;6235:58;6312:33;6327:10;6339:5;6312:14;:33::i;:::-;6304:41;;6356:15;6382:13;;6374:5;:21;;;;:::i;:::-;6415:10;6406:20;;;;:8;:20;;;;;:34;;6356:39;;-1:-1:-1;6356:39:0;;6406:20;;;:34;;6356:39;;6406:34;:::i;:::-;;;;-1:-1:-1;;6469:5:0;;;;6455:10;:19;;:34;;-1:-1:-1;6478:11:0;;;;6455:34;6451:170;;;6506:12;;;;;;;:8;:12;;;;;:26;;6522:10;;6506:12;:26;;6522:10;;6506:26;:::i;:::-;;;;-1:-1:-1;;6552:31:0;;6163:25:1;;;6552:31:0;;;;6561:10;;6552:31;;6151:2:1;6136:18;6552:31:0;;;;;;;6605:4;6598:11;;;;;6451:170;6660:22;6667:10;6679:2;6660:6;:22::i;:::-;6647:35;;:10;:35;:::i;:::-;6631:12;;;;;;;:8;:12;;;;;:51;;:12;;;:51;;;;;:::i;:::-;;;;-1:-1:-1;6770:22:0;;-1:-1:-1;6777:10:0;6789:2;6770:6;:22::i;:::-;6745;6752:10;6764:2;6745:6;:22::i;:::-;6720;6727:10;6739:2;6720:6;:22::i;:::-;:47;;;;:::i;:::-;:72;;;;:::i;:::-;6710:4;6693:23;;;;:8;:23;;;;;:99;;:23;;;:99;;;;;:::i;:::-;;;;-1:-1:-1;6827:22:0;;-1:-1:-1;6834:10:0;6846:2;6827:6;:22::i;:::-;6812:10;;;;;;;6803:20;;;;:8;:20;;;;;:46;;:20;;;:46;;;;;:::i;:::-;;;;-1:-1:-1;6865:6:0;;-1:-1:-1;6860:100:0;6881:1;6877;:5;6860:100;;;6891:66;6907:1;6925:31;6932:10;6949:6;6907:1;6953:2;6949:6;:::i;6891:66::-;6884:3;;;;:::i;:::-;;;;6860:100;;;;6970:31;6978:22;6985:10;6997:2;6978:6;:22::i;6970:31::-;7030:5;;;;7016:10;:19;;;;:47;;-1:-1:-1;7053:10:0;;;;;;;7039;:24;;7016:47;:62;;;;-1:-1:-1;7073:5:0;;;7067:11;;;7073:5;;7067:11;;7016:62;:82;;;;-1:-1:-1;7088:10:0;;;7082:16;;;7088:10;;;;;7082:16;;7016:82;7012:270;;;7133:16;;;;7119:10;:30;;;;:56;;-1:-1:-1;7159:16:0;;;7153:22;;;7159:16;;7153:22;;7119:56;7115:101;;;7177:39;7194:10;7206:2;7210:5;7177:16;:39::i;:::-;7231;7248:10;7260:2;7264:5;7231:16;:39::i;:::-;7297:51;;;7306:10;7297:51;7330:17;7337:5;7344:2;7330:6;:17::i;:::-;7322:25;;:5;:25;:::i;:::-;7297:51;;6163:25:1;;;6151:2;6136:18;7297:51:0;;;;;;;7393:4;7373:10;7364:94;7440:17;7447:5;7454:2;7440:6;:17::i;:::-;7420;7427:5;7434:2;7420:6;:17::i;:::-;7400;7407:5;7414:2;7400:6;:17::i;:::-;:37;;;;:::i;:::-;:57;;;;:::i;:::-;7364:94;;6163:25:1;;;6151:2;6136:18;7364:94:0;;;;;;;7495:10;;;;;;;7483;7474:51;7507:17;7514:5;7521:2;7507:6;:17::i;:::-;7474:51;;6163:25:1;;;6151:2;6136:18;7474:51:0;;;;;;;7554:10;7541:43;7566:17;7573:5;7580:2;7566:6;:17::i;:::-;7541:43;;6163:25:1;;;6151:2;6136:18;7541:43:0;;;;;;;-1:-1:-1;7602:4:0;;6157:1457;-1:-1:-1;;;6157:1457:0:o;13315:928::-;13413:13;;;13392:4;13413:13;;;:3;:13;;;;;;;;:17;;;;;;;;;13409:36;;-1:-1:-1;13444:1:0;13437:8;;13409:36;13483:18;;13456:24;13522:5;;;:1;:5;;;;;;;;;13542:21;:25;;;;;;;:30;;;;:85;;;13606:21;13624:2;13606:17;:21::i;:::-;13576:26;;;;:22;:26;;;;;;:51;;13542:85;13538:463;;;13644:16;13687:26;;;:22;:26;;;;;;13663:21;13710:2;13663:17;:21::i;:::-;:50;;;;:::i;:::-;13644:69;;13728:180;13749:1;13735:11;:15;:86;;;;-1:-1:-1;13790:25:0;;;;:21;:25;;;;;;13818:3;;13754:33;13768:19;13754:11;:33;:::i;:::-;:61;;;;:::i;:::-;:67;13735:86;13728:180;;;13842:24;13865:1;13842:24;;:::i;:::-;;-1:-1:-1;13885:7:0;13891:1;13885:7;;:::i;:::-;;;13728:180;;;13964:25;;;;:21;:25;;;;;;13928:33;13942:19;13928:11;:33;:::i;:::-;:61;;;;:::i;:::-;13922:67;;;;:::i;:::-;;;13629:372;13538:463;14145:13;;;14011:21;14145:13;;;:3;:13;;;;;;;;:17;;;;;;;;;14104:12;;;:2;:12;;;;;:16;;;;;;;;;14011:21;;14166:19;;14104:38;;14166:19;;14104:38;:::i;:::-;:58;;;;:::i;:::-;14099:63;;:2;:63;:::i;:::-;14065:26;;;;;;;:16;:26;;;;;;;;:30;;;;;;;;;:98;;;;:::i;:::-;:120;;;;:::i;:::-;14035:23;;;;;;;:13;:23;;;;;;;;:27;;;;;;;;;:150;;;;:::i;:::-;14011:174;;14222:13;;14203:16;:32;;;;:::i;:::-;14196:39;13315:928;-1:-1:-1;;;;;;13315:928:0:o;10890:302::-;10947:4;10968:13;;;:9;:13;;;;;;10964:32;;-1:-1:-1;10995:1:0;;10890:302;-1:-1:-1;10890:302:0:o;10964:32::-;11149:34;;;;:30;:34;;;;;;;;;11131:11;:15;;;;;;11115:9;:13;;;;;;11097:31;;:15;:31;:::i;:::-;:49;;;;:::i;:::-;:86;;;;:::i;:::-;11078:15;;;;:11;:15;;;;;;;;;11047:23;:27;;;;;;11031:9;:13;;;;;;:43;;11047:27;11031:43;:::i;:::-;11030:63;;;;:::i;:::-;:154;;;;:::i;:::-;11014:13;;;;:9;:13;;;;;;:170;;;;:::i;17435:176::-;17538:5;;;;17524:10;:19;17516:41;;;;;;;5882:2:1;17516:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17516:41:0;5680:332:1;17516:41:0;17568:15;;;;:11;:15;;;;;:35;17435:176::o;15865:175::-;15934:6;15929:104;15950:1;15946;:5;15929:104;;;15999:1;15964:32;15984:8;15994:1;15964:19;:32::i;:::-;:36;15960:70;;;16002:28;16018:8;16028:1;16002:15;:28::i;:::-;15953:3;;;;:::i;:::-;;;;15929:104;;9093:1047;9180:16;;9157:20;9207:406;9228:9;:16;9224:1;:20;9207:406;;;9270:17;:31;9288:9;9298:1;9288:12;;;;;;;;:::i;:::-;;;;;;;;;;;;9270:31;;;;;;;;;;;;-1:-1:-1;9270:31:0;;;;9266:116;;;9322:17;;;;:::i;:::-;;;;9358:8;;9266:116;9452:13;;9422:27;;:43;;;;:::i;:::-;9396:8;:22;9405:9;9415:1;9405:12;;;;;;;;:::i;:::-;;;;;;;9396:22;;;;;;;;;;;;;;;;:69;;;;;;;:::i;:::-;;;;;;;;9514:4;9480:17;:31;9498:9;9508:1;9498:12;;;;;;;;:::i;:::-;;;;;;;9480:31;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;9559:9;9569:1;9559:12;;;;;;;;:::i;:::-;;;;;;;9538:63;;9547:10;9538:63;;;9573:27;;9538:63;;;;6163:25:1;;6151:2;6136:18;;6017:177;9538:63:0;;;;;;;;9207:406;9246:3;;;;:::i;:::-;;;;9207:406;;;;9693:15;9677:13;;9647:27;;:43;;;;:::i;:::-;:61;;;;:::i;:::-;9632:10;9623:20;;;;:8;:20;;;;;:85;;:20;;;:85;;;;;:::i;:::-;;;;-1:-1:-1;;9733:1:0;9723:12;;:9;:12;;;;9719:53;;9752:1;9742:12;;:9;:12;;9757:15;9742:12;:30;9719:53;9783:13;9794:1;9783:10;:13::i;:::-;9848:1;9811:34;9831:10;9843:1;9811:19;:34::i;:::-;:38;9807:125;;;9919:13;;9882:34;9902:10;9914:1;9882:19;:34::i;:::-;:50;;;;:::i;:::-;9865:10;9851:25;;;;:13;:25;;;;;;;;9877:1;9851:28;;;;;;;:81;9807:125;9963:4;;9946:10;9963:4;9943:14;;;:2;9963:4;9943:14;;;9963:4;9943:14;;;9965:1;9943:17;;;;;;;;;:24;;;;9999:18;;9978:15;;;:3;:15;;;;;:18;;;;;;;;:39;10028:28;;;:16;:28;;;;;:31;;;;;;;;;:50;;10063:15;;9963:4;10028:50;;10063:15;;10028:50;:::i;:::-;;;;-1:-1:-1;;10111:1:0;10089:24;;;;:21;:24;;;:43;;10117:15;;10089:24;:43;;10117:15;;10089:43;:::i;:::-;;;;-1:-1:-1;;;;9093:1047:0:o;14585:1272::-;14655:14;14666:2;14655:10;:14::i;:::-;14684:13;;;;;;;:3;:13;;;;;;;;:17;;;;;;;;;14680:35;;14585:1272;;:::o;14680:35::-;14882:18;;14861:13;;;14725:21;14861:13;;;:3;:13;;;;;;;;:17;;;;;;;;;14821:12;;;:2;:12;;;;;:16;;;;;;;;;14725:21;;14882:18;14861:17;14821:37;;14882:18;;14821:37;:::i;:::-;:57;;;;:::i;:::-;14813:5;;;;:1;:5;;;;;;:65;;;;:::i;:::-;14779:26;;;;;;;:16;:26;;;;;;;;:30;;;;;;;;;:100;;;;:::i;:::-;:121;;;;:::i;:::-;14749:23;;;;;;;:13;:23;;;;;;;;:27;;;;;;;;;:151;;;;:::i;:::-;14911:23;;;14941:1;14911:23;;;:13;:23;;;;;;;;:27;;;;;;;;:31;;;14972:1;:5;;;;;;14953:12;;;:2;:12;;;;;:16;;;;;;;;:24;15008:18;;14988:13;;;:3;:13;;;;;:17;;;;;;;;:38;;;;14725:175;;-1:-1:-1;15049:6:0;14935:2;15054:1;15049:6;:::i;:::-;15048:13;;15059:2;15048:13;:::i;:::-;15037:24;-1:-1:-1;15113:33:0;15120:16;15138:7;15037:24;15144:1;15138:7;:::i;15113:33::-;15094:52;;:16;:52;:::i;:::-;15072:18;;;;;;;:8;:18;;;;;:74;;:18;;;:74;;;;;:::i;:::-;;;;-1:-1:-1;15181:33:0;;-1:-1:-1;15188:16:0;15206:7;:3;15212:1;15206:7;:::i;15181:33::-;15166:10;;;;;;;15157:20;;;;:8;:20;;;;;:57;;:20;;;:57;;;;;:::i;:::-;;;;-1:-1:-1;15307:33:0;;-1:-1:-1;15314:16:0;15332:7;:3;15338:1;15332:7;:::i;15307:33::-;15271;15278:16;15296:7;:3;15302:1;15296:7;:::i;15271:33::-;15252:52;;:16;:52;:::i;:::-;:88;;;;:::i;:::-;15242:4;15225:23;;;;:8;:23;;;;;:115;;:23;;;:115;;;;;:::i;:::-;;;;-1:-1:-1;15356:6:0;;-1:-1:-1;15351:129:0;15372:1;15368;:5;15351:129;;;15382:95;15404:5;:1;15408;15404:5;:::i;:::-;15398:2;:11;;:23;;15420:1;15398:23;;;15412:5;:1;15416;15412:5;:::i;:::-;15439:37;15446:16;15474:1;15464:7;:3;15470:1;15464:7;:::i;:::-;:11;;;;:::i;15439:37::-;15423:13;;;;:9;:13;;;;;;:53;;;;:::i;15382:95::-;15375:3;;;;:::i;:::-;;;;15351:129;;;-1:-1:-1;15490:42:0;15498:33;15505:16;15523:7;:3;15529:1;15523:7;:::i;15490:42::-;15639:13;;15548:105;;;;15565:4;;15548:105;;15602:33;15609:16;15627:7;:3;15633:1;15627:7;:::i;15602:33::-;15583:52;;:16;:52;:::i;:::-;15582:70;;;;:::i;:::-;15548:105;;6163:25:1;;;6151:2;6136:18;15548:105:0;;;;;;;15693:10;;15741:13;;15693:10;;;;;;;15686:4;;15669:86;;15705:33;15712:16;15730:7;:3;15736:1;15730:7;:::i;15705:33::-;:49;;;;:::i;:::-;15669:86;;6163:25:1;;;6151:2;6136:18;15669:86:0;;;;;;;15835:13;;15792:4;;15771:78;;15799:33;15806:16;15824:7;:3;15830:1;15824:7;:::i;15799:33::-;:49;;;;:::i;:::-;15771:78;;6163:25:1;;;6151:2;6136:18;15771:78:0;;;;;;;14644:1213;;14585:1272;;:::o;17288:139::-;17374:5;;;;17360:10;:19;17352:41;;;;;;;5882:2:1;17352:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17352:41:0;5680:332:1;17352:41:0;17404:7;;;;:3;:7;;;;;;:15;17288:139::o;14251:326::-;14321:4;14327;14333;14339;14364:32;14384:8;14394:1;14364:19;:32::i;:::-;14398;14418:8;14428:1;14398:19;:32::i;:::-;14432;14452:8;14462:1;14432:19;:32::i;:::-;14536;14556:8;14566:1;14536:19;:32::i;:::-;14501;14521:8;14531:1;14501:19;:32::i;:::-;14466;14486:8;14496:1;14466:19;:32::i;:::-;:67;;;;:::i;:::-;:102;;;;:::i;:::-;14356:213;;;;;;;;14251:326;;;;;:::o;10579:303::-;10672:1;10656:13;;;:9;:13;;;;;;:17;10652:184;;10720:21;10738:2;10720:17;:21::i;:::-;10690:27;;;;:23;:27;;;;;;;;:51;;;;10811:9;:13;;;;10793:31;;:15;:31;:::i;:::-;10756:34;;;;:30;:34;;;;;:68;10652:184;10846:13;;;;:9;:13;;;;;;:28;10579:303::o;10148:284::-;10287:13;;10263;;10244:16;;;10223:4;10244:16;;;:8;:16;;;;;;10223:4;;10287:13;10279:5;;10244:32;;10263:13;10244:32;:::i;:::-;:40;;;;:::i;:::-;:56;:86;;;;-1:-1:-1;10314:16:0;;;10304:26;;;10314:16;;10304:26;;10244:86;10240:161;;;10388:13;;10372;;10353:16;;;;;;;:8;:16;;;;;;:32;;10372:13;10353:32;:::i;:::-;:48;;;;:::i;:::-;10345:56;;10240:161;-1:-1:-1;10419:5:0;10148:284;-1:-1:-1;10148:284:0:o;10440:131::-;10500:4;10547:3;10500:4;10551:7;:2;10556;10551:7;:::i;:::-;:11;;10561:1;10551:11;:::i;:::-;10547:16;;;;;;;;;;;;10532:3;:12;10536:2;10541;10536:7;;;;:::i;:::-;10532:12;;;;;;;;;;;;10524:5;:20;;;;:::i;:::-;:39;;;;:::i;11200:390::-;11309:16;;;;11257:10;11300:26;;;:8;:26;;;;;;11284:13;;11309:16;11270:11;:27;;11284:13;11270:27;:::i;:::-;:56;;;;:::i;:::-;11257:69;-1:-1:-1;11337:13:0;11353:21;11361:13;11257:69;11353:21;:::i;:::-;11337:37;;11428:5;11417:8;11401:13;;:24;;;;:::i;:::-;:32;;;;:::i;:::-;11385:13;:48;;;11464:1;-1:-1:-1;11444:53:0;;;11496:1;11480:13;:17;11444:53;11546:16;;;;11537:26;;;;:8;:26;;;;;;11577:5;;11537:37;;11566:8;;11537:37;:::i;:::-;:45;;;;:::i;:::-;11517:16;;;;11508:26;;;;:8;:26;;;;;:74;-1:-1:-1;;;11200:390:0:o;11598:287::-;11694:27;;;;;;;:17;:27;;;;;;;;:36;;;:76;;;11743:27;;11734:5;:36;;11694:76;11690:188;;;11787:30;11807:6;11815:1;11787:19;:30::i;:::-;11832:27;;;;;;;:17;:27;;;;;:34;;;;11862:4;11832:34;;;11598:287;;;:::o;11893:311::-;11998:27;;11989:5;:36;11985:212;;12056:16;;;12046:26;;;12056:16;;12046:26;12042:64;;;12074:32;12094:8;12104:1;12074:19;:32::i;:::-;12137:16;;;12125:28;;;12137:16;;12125:28;12121:64;;;12155:30;12175:6;12183:1;12155:19;:30::i;12696:611::-;12749:25;;;;:21;:25;;;;;;:30;;;;:85;;;12813:21;12831:2;12813:17;:21::i;:::-;12783:26;;;;:22;:26;;;;;;:51;;12749:85;12745:555;;;12851:16;12894:26;;;:22;:26;;;;;;12870:21;12917:2;12870:17;:21::i;:::-;:50;;;;:::i;:::-;12851:69;;12935:205;12956:1;12942:11;:15;:85;;;;-1:-1:-1;12996:25:0;;;;:21;:25;;;;;;12975:18;;13024:3;;12996:25;12961:32;;:11;:32;:::i;:::-;:60;;;;:::i;:::-;:66;12942:85;12935:205;;;13070:1;13048:18;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;13095:6:0;;-1:-1:-1;13090:34:0;13107:1;13103;:5;13090:34;;;13115:4;;;;:1;:4;;;;;:9;;13123:1;;13115:4;:9;;13123:1;;13115:9;:::i;:::-;;;;-1:-1:-1;13110:3:0;;-1:-1:-1;13110:3:0;;;:::i;:::-;;;;13090:34;;;;12935:205;;;13198:25;;;;:21;:25;;;;;;13177:18;;13163:32;;:11;:32;:::i;:::-;:60;;;;:::i;:::-;13154:5;;;;:1;:5;;;;;:69;;:5;;;:69;;;;;:::i;:::-;;;;-1:-1:-1;13267:21:0;;-1:-1:-1;13285:2:0;13267:17;:21::i;:::-;13238:26;;;;:22;:26;;;;;:50;-1:-1:-1;12696:611:0;:::o;12212:476::-;12294:13;;;;:9;:13;;;;;;12290:55;;12314:13;;;;:9;:13;;;;;12330:15;12314:31;;12290:55;12356:14;12367:2;12356:10;:14::i;:::-;12422:1;12385:34;12405:9;12416:2;12385:19;:34::i;:::-;:38;12381:125;;;12493:13;;12456:34;12476:9;12487:2;12456:19;:34::i;:::-;:50;;;;:::i;:::-;12425:24;;;;;;;:13;:24;;;;;;;;:28;;;;;;;;:81;12381:125;12537:5;;;;:1;:5;;;;;;;;;12517:13;;;;;;:2;:13;;;;;:17;;;;;;;;:25;;;;12574:18;;12553:14;;;:3;:14;;;;;:18;;;;;;;;:39;12603:27;;:16;:27;;;;;:31;;;;;;;;:36;;12638:1;;12537:5;12603:36;;12638:1;;12603:36;:::i;:::-;;;;-1:-1:-1;;12650:25:0;;;;:21;:25;;;;;:30;;12679:1;;12650:25;:30;;12679:1;;12650:30;:::i;14:196:1:-;82:20;;142:42;131:54;;121:65;;111:93;;200:1;197;190:12;111:93;14:196;;;:::o;215:186::-;274:6;327:2;315:9;306:7;302:23;298:32;295:52;;;343:1;340;333:12;295:52;366:29;385:9;366:29;:::i;406:260::-;474:6;482;535:2;523:9;514:7;510:23;506:32;503:52;;;551:1;548;541:12;503:52;574:29;593:9;574:29;:::i;:::-;564:39;;622:38;656:2;645:9;641:18;622:38;:::i;:::-;612:48;;406:260;;;;;:::o;671:328::-;748:6;756;764;817:2;805:9;796:7;792:23;788:32;785:52;;;833:1;830;823:12;785:52;856:29;875:9;856:29;:::i;:::-;846:39;;904:38;938:2;927:9;923:18;904:38;:::i;:::-;894:48;;989:2;978:9;974:18;961:32;951:42;;671:328;;;;;:::o;1004:254::-;1072:6;1080;1133:2;1121:9;1112:7;1108:23;1104:32;1101:52;;;1149:1;1146;1139:12;1101:52;1172:29;1191:9;1172:29;:::i;:::-;1162:39;1248:2;1233:18;;;;1220:32;;-1:-1:-1;;;1004:254:1:o;1263:1191::-;1347:6;1378:2;1421;1409:9;1400:7;1396:23;1392:32;1389:52;;;1437:1;1434;1427:12;1389:52;1477:9;1464:23;1506:18;1547:2;1539:6;1536:14;1533:34;;;1563:1;1560;1553:12;1533:34;1601:6;1590:9;1586:22;1576:32;;1646:7;1639:4;1635:2;1631:13;1627:27;1617:55;;1668:1;1665;1658:12;1617:55;1704:2;1691:16;1726:2;1722;1719:10;1716:36;;;1732:18;;:::i;:::-;1778:2;1775:1;1771:10;1810:2;1804:9;1869:66;1864:2;1860;1856:11;1852:84;1844:6;1840:97;1987:6;1975:10;1972:22;1967:2;1955:10;1952:18;1949:46;1946:72;;;1998:18;;:::i;:::-;2034:2;2027:22;2084:18;;;2118:15;;;;-1:-1:-1;2153:11:1;;;2183;;;2179:20;;2176:33;-1:-1:-1;2173:53:1;;;2222:1;2219;2212:12;2173:53;2244:1;2235:10;;2254:169;2268:2;2265:1;2262:9;2254:169;;;2325:23;2344:3;2325:23;:::i;:::-;2313:36;;2286:1;2279:9;;;;;2369:12;;;;2401;;2254:169;;;-1:-1:-1;2442:6:1;1263:1191;-1:-1:-1;;;;;;;;1263:1191:1:o;2459:273::-;2515:6;2568:2;2556:9;2547:7;2543:23;2539:32;2536:52;;;2584:1;2581;2574:12;2536:52;2623:9;2610:23;2676:5;2669:13;2662:21;2655:5;2652:32;2642:60;;2698:1;2695;2688:12;2737:180;2796:6;2849:2;2837:9;2828:7;2824:23;2820:32;2817:52;;;2865:1;2862;2855:12;2817:52;-1:-1:-1;2888:23:1;;2737:180;-1:-1:-1;2737:180:1:o;2922:248::-;2990:6;2998;3051:2;3039:9;3030:7;3026:23;3022:32;3019:52;;;3067:1;3064;3057:12;3019:52;-1:-1:-1;;3090:23:1;;;3160:2;3145:18;;;3132:32;;-1:-1:-1;2922:248:1:o;4303:656::-;4415:4;4444:2;4473;4462:9;4455:21;4505:6;4499:13;4548:6;4543:2;4532:9;4528:18;4521:34;4573:1;4583:140;4597:6;4594:1;4591:13;4583:140;;;4692:14;;;4688:23;;4682:30;4658:17;;;4677:2;4654:26;4647:66;4612:10;;4583:140;;;4741:6;4738:1;4735:13;4732:91;;;4811:1;4806:2;4797:6;4786:9;4782:22;4778:31;4771:42;4732:91;-1:-1:-1;4875:2:1;4863:15;4880:66;4859:88;4844:104;;;;4950:2;4840:113;;4303:656;-1:-1:-1;;;4303:656:1:o;6784:128::-;6824:3;6855:1;6851:6;6848:1;6845:13;6842:39;;;6861:18;;:::i;:::-;-1:-1:-1;6897:9:1;;6784:128::o;6917:274::-;6957:1;6983;6973:189;;7018:77;7015:1;7008:88;7119:4;7116:1;7109:15;7147:4;7144:1;7137:15;6973:189;-1:-1:-1;7176:9:1;;6917:274::o;7196:228::-;7236:7;7362:1;7294:66;7290:74;7287:1;7284:81;7279:1;7272:9;7265:17;7261:105;7258:131;;;7369:18;;:::i;:::-;-1:-1:-1;7409:9:1;;7196:228::o;7429:125::-;7469:4;7497:1;7494;7491:8;7488:34;;;7502:18;;:::i;:::-;-1:-1:-1;7539:9:1;;7429:125::o;7559:196::-;7598:3;7626:5;7616:39;;7635:18;;:::i;:::-;-1:-1:-1;7682:66:1;7671:78;;7559:196::o;7760:437::-;7839:1;7835:12;;;;7882;;;7903:61;;7957:4;7949:6;7945:17;7935:27;;7903:61;8010:2;8002:6;7999:14;7979:18;7976:38;7973:218;;;8047:77;8044:1;8037:88;8148:4;8145:1;8138:15;8176:4;8173:1;8166:15;8202:195;8241:3;8272:66;8265:5;8262:77;8259:103;;;8342:18;;:::i;:::-;-1:-1:-1;8389:1:1;8378:13;;8202:195::o;8402:184::-;8454:77;8451:1;8444:88;8551:4;8548:1;8541:15;8575:4;8572:1;8565:15;8591:184;8643:77;8640:1;8633:88;8740:4;8737:1;8730:15;8764:4;8761:1;8754:15;8780:184;8832:77;8829:1;8822:88;8929:4;8926:1;8919:15;8953:4;8950:1;8943:15

Swarm Source

ipfs://7672193bd3f36af3d68138026eff08f60b4e0f74da12503b5140c553ec0366c0
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.