ETH Price: $2,443.01 (+1.24%)

Token

TangleV3 (TNGLv3)
 

Overview

Max Total Supply

1,000,000,000 TNGLv3

Holders

124

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
11,393,236.448230659 TNGLv3

Value
$0.00
0x40de378824cb099691e8463edd58538e8f3b6849
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

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 Etherscan.io on 2021-08-31
*/

// 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, "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 Security Audit

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"}]

60806040526006805460ff191690556001600c553480156200002057600080fd5b506040805180820190915260088082526754616e676c65563360c01b60209092019182526200005291600291620007c0565b5060408051808201909152600680825265544e474c763360d01b60209092019182526200008291600391620007c0565b506000805460ff19166009908117909155620000a090600a620008c6565b620000b090633b9aca0062000994565b6001819055620000c8906001600160801b0362000a0d565b620000db906001600160801b03620009b6565b6009819055600154620000ee9162000866565b600a5560095433600081815260046020908152604082209390935560068054610100600160a81b0319166101008402179055600780546001600160a01b0319169092179091556001600b55633b9aca00600d819055600e819055620493e07f8fa6efc3be94b5b348b21fea823fe8d100408cee9b7f90524494500445d8ff6c8190557f4155c2f711f2cdd34f8262ab8fb9b7020a700fe7b6948222152f7670d1fdf34d8190557f0b9d2c0c271bb30544eb78c59bdaebdae2728e5f65814c07768a0abe90ed192355601090925264012a05f2007fe9d0669b9da863441f6bb27634f5f3174e814c6c2560049a32059809eaee4d305564174876e8007f1a30bfa582bf4431ebf1419d9ec10e3201700dc6bb1a0194584cd35c1484dd738190557fdc169e41e788c2fe3313c51eaa1b48f5d86a6d136e81bd2a906baac5c59233448390557fb36425e8ae0ba8b162ebeabfcbf4b7c211432fbb587906897091c7803a88a9968190556402540be4007fc4948c58cb70c2f6727c5d44652ab0a7a0e96bb8b5e89d080c0b18a1d5bde5808190557f9c1458720648b68658c4fda1ef4df9f72d519cef68ca26b12803782225d5538982905563ee6b28007f5d03aa96fedd319a8101b172ccefcf83f39b30cee82c9f9082d4c595765335138190557f586f007034e8e9bcd3b89e8902b16e5d7d194554f140e1ecb1f0c0b2102e41938390557fc9e3c3a5f5cd888feca1877d2948b91cea3038493722bd5454554ac8e76d5a578190557f545e0132de382ab7c7d867dc9a56bb8c08e0d67d68d1e84947ddf699a77840188390557ebfafef13c92f0cdaf9f6e53d1d49c974210b8a63f5d02e62d77c74716b766b8590557f800f7f18b09f86f3188974192b3e1b7bc90730f50fcf8e966ed7f700689bd0128390557f0f2857b1640854bb125b88aef1d58671c1c0ed2fded0874ec2b05fa16cb6e7bd8590557f82848356feecdea6e6838c71f89cddb30db479903b1e1deaaaa48b927ed161078390557f89fa770d45800d2ca38ef3f00701906b2ff5bdfa05a9df7176135fc6d46dcf638590557fdfab78438e1179b29f047a447dce1145d9cd547652fe9ee8c7ac7009d38c8a418390557f0b39bf4d4ce42b42ae9b7579639739ffea42d3215bd34919e664bd7bc067d7d68290557ff52135d48262d1ca8d6cf8f0acc48ad011063de9c621b0937465bb74244c65878390557fe6ca7fef31fd19be7e1c0d8efb3dfc681860a3370d4c202edc27f6e435c4eddf8190557f1db604e8544aa474f01f7b89a172d096a4228221443808cbc7e7c9bde7f229a88390557f47f61a9f7f3c094fb78d4f9644a1260e897a3f093755679df92db72edbe26f608190557f5010d5dfc8e8e35c1cc97e4a453857a58fc392858ae8c66f01098a7fd0640d5e8390557f22b98b3f8d2c3ed575490f710f2f88081db99dc5b95084120a6d713ee4b7efb88590557f61285ce1ea4c436521841931936754810ec591fde162c2db38ddca76772143098390557f56c45abe21a60c7112ad193abb7f7e08af0bab4fb4abe32f215ff95d845ba02f8590557fce1d9237ed41a6c71a464e6cfbb07ac4f7984bcdc1cbcee6ba769a78dd8769f38390557f9f4abbc5cbc1cdf3b60a7d25bcd70027a6f7c125ba6efa8c95f2a60bbd58c5ff8590557f830424d92ff1d6446d99c621e5f29157500dccb4fc3bfc150c9793e34b9408788390557fdb5ab68df9f30dc96872a978ac46a3451e2ef7077569c3222b82278733416a78919091557ff67967c56b646594b5327f520bffcf2cc5dae9ff4b25aff9c3bbe46fe41f43288290557f451193462fa200bb38bb14c0ab4e49fb5b7745100ee5d80c735f972a3ae8b29b8190557fcebfc60bc335d77c02eaff19abfeef452d767d98684732760a386f0fd24178748290557f16577f6458597ca78f4c4a18a1acdfd5b38385003d9eb8d03cb7b798df970f71557f31f1cab5d9dce9f5ff87fb940acc88d1dc09b0b83a99d30437e1efb12f0d14968190557fb18a8033745574a3555ad96f6e22f4c46e9b59ccf502d8747ee90ff61b4d45e48390557f81e09a907c8fba7772be63edd4770164e8b59213b5a69a010b1643bbc56ac8ac8190557fc13c2ee30fab4becbf0584141fffed05cdcf22f188949522c9dc1388c416df418390557fb5c907b41905eb8e025355433ad658254b61a8518499baa81a5750935241037a8190557f184cbd1bb8f684c8e0683ccc2b6f05b5d2d9b3c1bd2a2ef3b96babee4ecbe2658390557f6b3b358d6cb7387c3fd07ecfb1966ee8e75a06a3282b87927a92c5c3226975fc8190557f7a1842c76c0a906192470bd5593790d06c94cf463647e40e7ceec9ee9ecf085e9290925561025990527fc90deb313bf2e73a3403dd5c186c352d51e22f8fb5845d81ae33571a242dc3b15562000a50565b828054620007ce90620009d0565b90600052602060002090601f016020900481019282620007f257600085556200083d565b82601f106200080d57805160ff19168380011785556200083d565b828001600101855582156200083d579182015b828111156200083d57825182559160200191906001019062000820565b506200084b9291506200084f565b5090565b5b808211156200084b576000815560010162000850565b60008262000878576200087862000a3a565b500490565b600181815b80851115620008be578160001904821115620008a257620008a262000a24565b80851615620008b057918102915b93841c939080029062000882565b509250929050565b6000620008d760ff841683620008de565b9392505050565b600082620008ef575060016200098e565b81620008fe575060006200098e565b8160018114620009175760028114620009225762000942565b60019150506200098e565b60ff84111562000936576200093662000a24565b50506001821b6200098e565b5060208310610133831016604e8410600b841016171562000967575081810a6200098e565b6200097383836200087d565b80600019048211156200098a576200098a62000a24565b0290505b92915050565b6000816000190483118215151615620009b157620009b162000a24565b500290565b600082821015620009cb57620009cb62000a24565b500390565b600181811c90821680620009e557607f821691505b6020821081141562000a0757634e487b7160e01b600052602260045260246000fd5b50919050565b60008262000a1f5762000a1f62000a3a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b6136608062000a606000396000f3fe608060405234801561001057600080fd5b50600436106103575760003560e01c806370a08231116101c8578063b316706c11610104578063dd62ed3e116100a2578063e7877c361161007c578063e7877c3614610817578063f6b5fc2e14610842578063fd9ff94c1461086d578063fddacd7b146108a057600080fd5b8063dd62ed3e146107b1578063e1199817146107f7578063e653723d1461080457600080fd5b8063c55897bf116100de578063c55897bf14610753578063c561905014610766578063ca6be7f11461078b578063d6ef7af01461079e57600080fd5b8063b316706c14610724578063b5a2ac3b1461072d578063c4e4abc11461074057600080fd5b8063a1ff4f9111610171578063a694fc3a1161014b578063a694fc3a146106d8578063a6f9dae1146106eb578063a9059cbb146106fe578063b2c5541f1461071157600080fd5b8063a1ff4f9114610687578063a457c2d7146106b2578063a5d72fa7146106c557600080fd5b80638ebfe95c116101a25780638ebfe95c1461066357806395d89b41146106765780639ecba7ea1461067e57600080fd5b806370a08231146106105780637bd4e08f146106235780638da5cb5b1461064357600080fd5b80632def6620116102975780633ec4c96811610240578063577e59ea1161021a578063577e59ea146105cb5780635b7c132d146105d45780636cfdc929146105e75780636eee7549146105f057600080fd5b80633ec4c9681461056b5780633ee708aa1461058b5780634bc95007146105ab57600080fd5b8063338b41a211610271578063338b41a21461052557806335b9950f14610545578063395093511461055857600080fd5b80632def6620146104b9578063313ce567146104c15780633221c93f146104e057600080fd5b80631936f4b91161030457806322d5ba98116102de57806322d5ba981461045057806323b872dd14610473578063251ad9a2146104865780632c8aaf6c1461049957600080fd5b80631936f4b9146103fc5780631ae3d5ff1461042757806320bc17b91461044757600080fd5b80630cdd53f6116103355780630cdd53f6146103b25780630d1aba1f146103c557806318160ddd146103f357600080fd5b806306fdde031461035c578063095ea7b31461037a57806309f1c80a1461039d575b600080fd5b6103646108a9565b60405161037191906133c7565b60405180910390f35b61038d610388366004613256565b610937565b6040519015158152602001610371565b6103b06103ab36600461338c565b6109b1565b005b6103b06103c03660046133a5565b6109c5565b6103e56103d336600461338c565b60156020526000908152604090205481565b604051908152602001610371565b6103e560015481565b6103e561040a366004613256565b601960209081526000928352604080842090915290825290205481565b6103e561043536600461338c565b60106020526000908152604090205481565b6103e5600a5481565b61038d61045e3660046131cc565b60186020526000908152604090205460ff1681565b61038d61048136600461321a565b610a4c565b6103b061049436600461338c565b611050565b6103e56104a736600461338c565b60146020526000908152604090205481565b6103b06110db565b6000546104ce9060ff1681565b60405160ff9091168152602001610371565b6008546105009073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610371565b6103e561053336600461338c565b600f6020526000908152604090205481565b6103b061055336600461338c565b6112ca565b61038d610566366004613256565b611350565b6103e561057936600461338c565b60126020526000908152604090205481565b6103e561059936600461338c565b60176020526000908152604090205481565b6103e56105b936600461338c565b60116020526000908152604090205481565b6103e5600e5481565b6103b06105e23660046131cc565b6113f0565b6103e560095481565b6103e56105fe36600461338c565b60136020526000908152604090205481565b6103e561061e3660046131cc565b611506565b6103e561063136600461338c565b60166020526000908152604090205481565b6007546105009073ffffffffffffffffffffffffffffffffffffffff1681565b6103b061067136600461336a565b61153a565b6103646115ec565b6103e5600d5481565b6103e5610695366004613256565b601a60209081526000928352604080842090915290825290205481565b61038d6106c0366004613256565b6115f9565b6103b06106d336600461338c565b611635565b6103b06106e636600461338c565b6116bb565b6103b06106f93660046131cc565b611944565b61038d61070c366004613256565b611a0c565b6103e561071f366004613256565b611ed7565b6103e5600c5481565b6103e561073b36600461338c565b61210c565b6103b061074e3660046133a5565b6121c0565b6103b06107613660046131cc565b612252565b60065461050090610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103b0610799366004613280565b61228c565b6103b06107ac366004613256565b612636565b6103e56107bf3660046131e7565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b60065461038d9060ff1681565b6103b06108123660046133a5565b612ab5565b6103e5610825366004613256565b601b60209081526000928352604080842090915290825290205481565b6103e5610850366004613256565b601c60209081526000928352604080842090915290825290205481565b61088061087b3660046131cc565b612b48565b604080519485526020850193909352918301526060820152608001610371565b6103e5600b5481565b600280546108b690613516565b80601f01602080910402602001604051908101604052809291908181526020018280546108e290613516565b801561092f5780601f106109045761010080835404028352916020019161092f565b820191906000526020600020905b81548152906001019060200180831161091257829003601f168201915b505050505081565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061099f9086815260200190565b60405180910390a35060015b92915050565b6109b96110db565b6109c2816116bb565b50565b6000600a54826109d5919061348d565b336000908152600460205260408120805492935083929091906109f99084906134ca565b90915550503060009081526004602052604081208054839290610a1d90849061343a565b9091555050600083815260116020526040902054610a47908490610a4290849061343a565b612bb3565b505050565b600a5473ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120549091610a8091613452565b821115610a8c57600080fd5b610a968483612c17565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320338452909152902054909250610ad59083906134ca565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320338452909152812091909155600a54610b16908461348d565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040812080549293508392909190610b509084906134ca565b909155505060075473ffffffffffffffffffffffffffffffffffffffff86811691161480610b80575060065460ff165b15610c325773ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054839290610bba90849061343a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610c2091815260200190565b60405180910390a36001915050611049565b610c3d81600a612cd2565b610c4790826134ca565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604081208054909190610c7c90849061343a565b90915550610c8d9050816028612cd2565b610c9882601e612cd2565b610ca3836014612cd2565b610cad919061343a565b610cb7919061343a565b3060009081526004602052604081208054909190610cd690849061343a565b90915550610ce7905081603c612cd2565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604081208054909190610d2390849061343a565b90915550600090505b6003811015610d8357610d7181610d5884610d4883600a61348d565b610d5390601461343a565b612cd2565b600084815260116020526040902054610a42919061343a565b80610d7b81613564565b915050610d2c565b50610d97610d92826032612cd2565b612d31565b60075473ffffffffffffffffffffffffffffffffffffffff868116911614801590610de2575060065473ffffffffffffffffffffffffffffffffffffffff8681166101009092041614155b8015610e09575060075473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015610e35575060065473ffffffffffffffffffffffffffffffffffffffff8581166101009092041614155b15610e9b5760085473ffffffffffffffffffffffffffffffffffffffff868116911614801590610e80575060085473ffffffffffffffffffffffffffffffffffffffff858116911614155b15610e9057610e90858585612e1b565b610e9b858585612eb6565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610ef586600a612cd2565b610eff90876134ca565b60405190815260200160405180910390a33073ffffffffffffffffffffffffffffffffffffffff86167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610f54866028612cd2565b610f5f87601e612cd2565b610f6a886014612cd2565b610f74919061343a565b610f7e919061343a565b60405190815260200160405180910390a360065473ffffffffffffffffffffffffffffffffffffffff61010090910481169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610fde86603c612cd2565b60405190815260200160405180910390a38473ffffffffffffffffffffffffffffffffffffffff167ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a7611032856032612cd2565b60405190815260200160405180910390a260019150505b9392505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146110d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600b55565b336000908152601c602090815260408083206002845290915290205461115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6e6f2063757272656e74207374616b696e6720706f736974696f6e000000000060448201526064016110cd565b6111676002612f1b565b6000611174336002611ed7565b11156111af57600a54611188336002611ed7565b611192919061348d565b336000908152601b60209081526040808320600284529091529020555b600854336000818152601c6020908152604080832060028452909152908190205490517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb90604401600060405180830381600087803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b5050336000908152601c6020908152604080832060028452825282205460149091527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a805491945092506112a79084906134ca565b9091555050336000908152601c6020908152604080832060028452909152812055565b60075473ffffffffffffffffffffffffffffffffffffffff16331461134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600e55565b33600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461138c90839061343a565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161099f565b60075473ffffffffffffffffffffffffffffffffffffffff163314611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905560005b60038110156115025760085473ffffffffffffffffffffffffffffffffffffffff166000908152601c60209081526040808320848452909152812055806114fa81613564565b9150506114b4565b5050565b600a5473ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205490916109ab91613452565b60075473ffffffffffffffffffffffffffffffffffffffff1633146115bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600380546108b690613516565b33600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461138c9083906134ca565b60075473ffffffffffffffffffffffffffffffffffffffff1633146116b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600d55565b336000908152601c60209081526040808320600284529091529020541561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7374616b696e6720706f736974696f6e20616c7265616479206578697374730060448201526064016110cd565b6008546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd90606401600060405180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b50506002600052505060126020527f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b25461182c5760026000526012602052427f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b2555b6118366002612f1b565b6000611843336002611ed7565b111561187e57600a54611857336002611ed7565b611861919061348d565b336000908152601b60209081526040808320600284529091529020555b7fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead54336000818152601960209081526040808320600280855290835281842095909555600c54848452601a8352818420868552835281842055928252601c815282822093825292909252812080548392906118fa90849061343a565b90915550506002600090815260146020527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a805483929061193c90849061343a565b909155505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146119c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600a54336000908152600460205260408120549091611a2a91613452565b821115611a3657600080fd5b611a403383612c17565b91506000600a5483611a52919061348d565b33600090815260046020526040812080549293508392909190611a769084906134ca565b909155505060075473ffffffffffffffffffffffffffffffffffffffff16331480611aa3575060065460ff165b15611b395773ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054839290611add90849061343a565b909155505060405183815273ffffffffffffffffffffffffffffffffffffffff85169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360019150506109ab565b611b4481600a612cd2565b611b4e90826134ca565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604081208054909190611b8390849061343a565b90915550611b949050816028612cd2565b611b9f82601e612cd2565b611baa836014612cd2565b611bb4919061343a565b611bbe919061343a565b3060009081526004602052604081208054909190611bdd90849061343a565b90915550611bee905081603c612cd2565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604081208054909190611c2a90849061343a565b90915550600090505b6003811015611c6157611c4f81610d5884610d4883600a61348d565b80611c5981613564565b915050611c33565b50611c70610d92826032612cd2565b60075473ffffffffffffffffffffffffffffffffffffffff163314801590611cb55750600654610100900473ffffffffffffffffffffffffffffffffffffffff163314155b8015611cdc575060075473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015611d08575060065473ffffffffffffffffffffffffffffffffffffffff8581166101009092041614155b15611d6b5760085473ffffffffffffffffffffffffffffffffffffffff163314801590611d50575060085473ffffffffffffffffffffffffffffffffffffffff858116911614155b15611d6057611d60338585612e1b565b611d6b338585612eb6565b73ffffffffffffffffffffffffffffffffffffffff8416337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611daf86600a612cd2565b611db990876134ca565b60405190815260200160405180910390a330337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611df8866028612cd2565b611e0387601e612cd2565b611e0e886014612cd2565b611e18919061343a565b611e22919061343a565b60405190815260200160405180910390a3600654610100900473ffffffffffffffffffffffffffffffffffffffff16337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611e7e86603c612cd2565b60405190815260200160405180910390a3337ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a7611ebc856032612cd2565b60405190815260200160405180910390a25060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a60209081526040808320848452909152812054611f14575060006109ab565b600c546000838152600f602090815260408083205460149092529091205415801590611f565750611f448461210c565b60008581526015602052604090205414155b1561200b57600084815260156020526040812054611f738661210c565b611f7d91906134ca565b90505b600081118015611fb65750600085815260146020526040902054633b9aca0090611faa858461348d565b611fb49190613452565b105b15611fda57611fc660028461348d565b9250611fd360028361348d565b9150611f80565b600085815260146020526040902054611ff3848361348d565b611ffd9190613452565b612007908361343a565b9150505b73ffffffffffffffffffffffffffffffffffffffff85166000818152601a60209081526040808320888452825280832054938352601982528083208884529091528120549091849161205e90839061348d565b6120689190613452565b61207290846134ca565b73ffffffffffffffffffffffffffffffffffffffff88166000908152601c602090815260408083208a84529091529020546120ad919061348d565b6120b79190613452565b73ffffffffffffffffffffffffffffffffffffffff87166000908152601b602090815260408083208984529091529020546120f2919061343a565b9050600a54816121029190613452565b9695505050505050565b60008181526012602052604081205461212757506000919050565b6000828152601760209081526040808320546013835281842054601290935292205461215390426134ca565b61215d919061343a565b61216791906134ca565b6000838152601360209081526040808320546016835281842054601190935292205461219391906134ca565b61219d919061348d565b6121a79190613452565b6000838152601160205260409020546109ab91906134ca565b60075473ffffffffffffffffffffffffffffffffffffffff163314612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600090815260136020526040902055565b60005b600381101561150257600061226a8383611ed7565b111561227a5761227a8282612636565b8061228481613564565b915050612255565b805160005b825181101561247f57601860008483815181106122b0576122b06135cc565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff16156122fb57816122f3816134e1565b92505061246d565b600a54600d5461230b919061348d565b60046000858481518110612321576123216135cc565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612372919061343a565b92505081905550600160186000858481518110612391576123916135cc565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106123fc576123fc6135cc565b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d5460405161246491815260200190565b60405180910390a35b8061247781613564565b915050612291565b5080600a54600d54612491919061348d565b61249b919061348d565b33600090815260046020526040812080549091906124ba9084906134ca565b9091555050600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35461251d5760016000526012602052427f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a3555b6125276001612f1b565b6000612534336001611ed7565b111561256f57600a54612548336001611ed7565b612552919061348d565b336000908152601b60209081526040808320600184529091529020555b7f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f54336000818152601960209081526040808320600180855290835281842095909555600c54848452601a8352818420868552835281842055928252601c815282822093825292909252812080548392906125eb90849061343a565b90915550506001600090815260146020527fb6c61a840592cc84133e4b25bd509abf4659307c57b160799b38490a5aa48f2c805483929061262d90849061343a565b90915550505050565b61263f81612f1b565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a60209081526040808320848452909152902054612678575050565b600c5473ffffffffffffffffffffffffffffffffffffffff83166000818152601a6020908152604080832086845282528083205493835260198252808320868452909152812054909291906126ce90839061348d565b6126d89190613452565b6000848152600f60205260409020546126f191906134ca565b73ffffffffffffffffffffffffffffffffffffffff85166000908152601c6020908152604080832087845290915290205461272c919061348d565b6127369190613452565b73ffffffffffffffffffffffffffffffffffffffff84166000908152601b60209081526040808320868452909152902054612771919061343a565b73ffffffffffffffffffffffffffffffffffffffff84166000818152601b602090815260408083208784528252808320839055600f82528083205484845260198352818420888552835281842055600c54938352601a82528083208784529091528120919091559091506127e683600261343a565b6127f190600a61348d565b905061280282610d5383600161343a565b61280c90836134ca565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600460205260408120805490919061284190849061343a565b90915550612856905082610d5383600561343a565b600654610100900473ffffffffffffffffffffffffffffffffffffffff166000908152600460205260408120805490919061289290849061343a565b909155506128a7905082610d5383600361343a565b6128b683610d5384600261343a565b6128c090846134ca565b6128ca91906134ca565b30600090815260046020526040812080549091906128e99084906134ca565b90915550600090505b60028110156129675761295561290982600261348d565b851415612917576001612922565b61292282600261348d565b61293c858461293287600261343a565b610d53919061343a565b600087815260116020526040902054610a42919061343a565b8061295f81613564565b9150506128f2565b5061297a610d9283610d5384600461343a565b600a5473ffffffffffffffffffffffffffffffffffffffff85169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129c886610d5387600161343a565b6129d290876134ca565b6129dc9190613452565b60405190815260200160405180910390a3600654600a5461010090910473ffffffffffffffffffffffffffffffffffffffff169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a4386610d5387600561343a565b612a4d9190613452565b60405190815260200160405180910390a3600a5430907ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a790612a9485610d5386600461343a565b612a9e9190613452565b60405190815260200160405180910390a250505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314612b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b60009182526010602052604090912055565b600080600080612b59856000611ed7565b612b64866001611ed7565b612b6f876002611ed7565b612b7a886002611ed7565b612b85896001611ed7565b612b908a6000611ed7565b612b9a919061343a565b612ba4919061343a565b93509350935093509193509193565b60008281526012602052604090205415612c0557612bd08261210c565b600083815260166020908152604080832093909355601290522054612bf590426134ca565b6000838152601760205260409020555b60009182526011602052604090912055565b600b54600a5473ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120549092918491612c529190613452565b612c5c91906134ca565b108015612c84575060085473ffffffffffffffffffffffffffffffffffffffff848116911614155b15612ccc57600b54600a5473ffffffffffffffffffffffffffffffffffffffff8516600090815260046020526040902054612cbf9190613452565b612cc991906134ca565b91505b50919050565b6000601081612ce284600a61348d565b612ced90600161343a565b8152602001908152602001600020546010600084600a612d0d919061348d565b81526020019081526020016000205484612d27919061348d565b6110499190613452565b60085473ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040812054600a54600154612d69919061348d565b612d7391906134ca565b90506000612d8183836134ca565b90508181600a54612d92919061348d565b612d9c9190613452565b600a81905560011115612daf576001600a555b60085473ffffffffffffffffffffffffffffffffffffffff166000908152600460205260409020548290612de490839061348d565b612dee9190613452565b60085473ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040902055505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526018602052604090205460ff16158015612e535750600d548110155b15610a4757612e6383600161307f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260186020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050565b600e548110610a475760085473ffffffffffffffffffffffffffffffffffffffff84811691161415612eed57612eed82600061307f565b60085473ffffffffffffffffffffffffffffffffffffffff83811691161415610a4757610a4783600061307f565b60008181526014602052604090205415801590612f4e5750612f3c8161210c565b60008281526015602052604090205414155b156109c257600081815260156020526040812054612f6b8361210c565b612f7591906134ca565b90505b600081118015612fb25750600082815260146020526040902054600c54633b9aca009190612fa6908461348d565b612fb09190613452565b105b15613019576002600c6000828254612fca919061348d565b90915550600090505b6003811015613013576000818152600f60205260408120805460029290612ffb90849061348d565b9091555081905061300b81613564565b915050612fd3565b50612f78565b600082815260146020526040902054600c54613035908361348d565b61303f9190613452565b6000838152600f60205260408120805490919061305d90849061343a565b9091555061306c90508261210c565b6000838152601560205260409020555050565b6000818152601260205260409020546130a45760008181526012602052604090204290555b6130ad81612f1b565b60006130b98383611ed7565b111561310857600a546130cc8383611ed7565b6130d6919061348d565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601b602090815260408083208584529091529020555b6000818152600f602090815260408083205473ffffffffffffffffffffffffffffffffffffffff861680855260198452828520868652845282852091909155600c54818552601a84528285208686528452828520558352601c8252808320848452909152812080546001929061317f90849061343a565b9091555050600081815260146020526040812080546001929061262d90849061343a565b803573ffffffffffffffffffffffffffffffffffffffff811681146131c757600080fd5b919050565b6000602082840312156131de57600080fd5b611049826131a3565b600080604083850312156131fa57600080fd5b613203836131a3565b9150613211602084016131a3565b90509250929050565b60008060006060848603121561322f57600080fd5b613238846131a3565b9250613246602085016131a3565b9150604084013590509250925092565b6000806040838503121561326957600080fd5b613272836131a3565b946020939093013593505050565b6000602080838503121561329357600080fd5b823567ffffffffffffffff808211156132ab57600080fd5b818501915085601f8301126132bf57600080fd5b8135818111156132d1576132d16135fb565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715613314576133146135fb565b604052828152858101935084860182860187018a101561333357600080fd5b600095505b8386101561335d57613349816131a3565b855260019590950194938601938601613338565b5098975050505050505050565b60006020828403121561337c57600080fd5b8135801515811461104957600080fd5b60006020828403121561339e57600080fd5b5035919050565b600080604083850312156133b857600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156133f4578581018301518582016040015282016133d8565b81811115613406576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000821982111561344d5761344d61359d565b500190565b600082613488577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134c5576134c561359d565b500290565b6000828210156134dc576134dc61359d565b500390565b6000816134f0576134f061359d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c9082168061352a57607f821691505b60208210811415612ccc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135965761359661359d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212200d0cbf830798016c036ee1f45ca233ccefc97da50eeaefcdc6b76cf6ef064fd064736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103575760003560e01c806370a08231116101c8578063b316706c11610104578063dd62ed3e116100a2578063e7877c361161007c578063e7877c3614610817578063f6b5fc2e14610842578063fd9ff94c1461086d578063fddacd7b146108a057600080fd5b8063dd62ed3e146107b1578063e1199817146107f7578063e653723d1461080457600080fd5b8063c55897bf116100de578063c55897bf14610753578063c561905014610766578063ca6be7f11461078b578063d6ef7af01461079e57600080fd5b8063b316706c14610724578063b5a2ac3b1461072d578063c4e4abc11461074057600080fd5b8063a1ff4f9111610171578063a694fc3a1161014b578063a694fc3a146106d8578063a6f9dae1146106eb578063a9059cbb146106fe578063b2c5541f1461071157600080fd5b8063a1ff4f9114610687578063a457c2d7146106b2578063a5d72fa7146106c557600080fd5b80638ebfe95c116101a25780638ebfe95c1461066357806395d89b41146106765780639ecba7ea1461067e57600080fd5b806370a08231146106105780637bd4e08f146106235780638da5cb5b1461064357600080fd5b80632def6620116102975780633ec4c96811610240578063577e59ea1161021a578063577e59ea146105cb5780635b7c132d146105d45780636cfdc929146105e75780636eee7549146105f057600080fd5b80633ec4c9681461056b5780633ee708aa1461058b5780634bc95007146105ab57600080fd5b8063338b41a211610271578063338b41a21461052557806335b9950f14610545578063395093511461055857600080fd5b80632def6620146104b9578063313ce567146104c15780633221c93f146104e057600080fd5b80631936f4b91161030457806322d5ba98116102de57806322d5ba981461045057806323b872dd14610473578063251ad9a2146104865780632c8aaf6c1461049957600080fd5b80631936f4b9146103fc5780631ae3d5ff1461042757806320bc17b91461044757600080fd5b80630cdd53f6116103355780630cdd53f6146103b25780630d1aba1f146103c557806318160ddd146103f357600080fd5b806306fdde031461035c578063095ea7b31461037a57806309f1c80a1461039d575b600080fd5b6103646108a9565b60405161037191906133c7565b60405180910390f35b61038d610388366004613256565b610937565b6040519015158152602001610371565b6103b06103ab36600461338c565b6109b1565b005b6103b06103c03660046133a5565b6109c5565b6103e56103d336600461338c565b60156020526000908152604090205481565b604051908152602001610371565b6103e560015481565b6103e561040a366004613256565b601960209081526000928352604080842090915290825290205481565b6103e561043536600461338c565b60106020526000908152604090205481565b6103e5600a5481565b61038d61045e3660046131cc565b60186020526000908152604090205460ff1681565b61038d61048136600461321a565b610a4c565b6103b061049436600461338c565b611050565b6103e56104a736600461338c565b60146020526000908152604090205481565b6103b06110db565b6000546104ce9060ff1681565b60405160ff9091168152602001610371565b6008546105009073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610371565b6103e561053336600461338c565b600f6020526000908152604090205481565b6103b061055336600461338c565b6112ca565b61038d610566366004613256565b611350565b6103e561057936600461338c565b60126020526000908152604090205481565b6103e561059936600461338c565b60176020526000908152604090205481565b6103e56105b936600461338c565b60116020526000908152604090205481565b6103e5600e5481565b6103b06105e23660046131cc565b6113f0565b6103e560095481565b6103e56105fe36600461338c565b60136020526000908152604090205481565b6103e561061e3660046131cc565b611506565b6103e561063136600461338c565b60166020526000908152604090205481565b6007546105009073ffffffffffffffffffffffffffffffffffffffff1681565b6103b061067136600461336a565b61153a565b6103646115ec565b6103e5600d5481565b6103e5610695366004613256565b601a60209081526000928352604080842090915290825290205481565b61038d6106c0366004613256565b6115f9565b6103b06106d336600461338c565b611635565b6103b06106e636600461338c565b6116bb565b6103b06106f93660046131cc565b611944565b61038d61070c366004613256565b611a0c565b6103e561071f366004613256565b611ed7565b6103e5600c5481565b6103e561073b36600461338c565b61210c565b6103b061074e3660046133a5565b6121c0565b6103b06107613660046131cc565b612252565b60065461050090610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6103b0610799366004613280565b61228c565b6103b06107ac366004613256565b612636565b6103e56107bf3660046131e7565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260056020908152604080832093909416825291909152205490565b60065461038d9060ff1681565b6103b06108123660046133a5565b612ab5565b6103e5610825366004613256565b601b60209081526000928352604080842090915290825290205481565b6103e5610850366004613256565b601c60209081526000928352604080842090915290825290205481565b61088061087b3660046131cc565b612b48565b604080519485526020850193909352918301526060820152608001610371565b6103e5600b5481565b600280546108b690613516565b80601f01602080910402602001604051908101604052809291908181526020018280546108e290613516565b801561092f5780601f106109045761010080835404028352916020019161092f565b820191906000526020600020905b81548152906001019060200180831161091257829003601f168201915b505050505081565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061099f9086815260200190565b60405180910390a35060015b92915050565b6109b96110db565b6109c2816116bb565b50565b6000600a54826109d5919061348d565b336000908152600460205260408120805492935083929091906109f99084906134ca565b90915550503060009081526004602052604081208054839290610a1d90849061343a565b9091555050600083815260116020526040902054610a47908490610a4290849061343a565b612bb3565b505050565b600a5473ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120549091610a8091613452565b821115610a8c57600080fd5b610a968483612c17565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320338452909152902054909250610ad59083906134ca565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600560209081526040808320338452909152812091909155600a54610b16908461348d565b73ffffffffffffffffffffffffffffffffffffffff8616600090815260046020526040812080549293508392909190610b509084906134ca565b909155505060075473ffffffffffffffffffffffffffffffffffffffff86811691161480610b80575060065460ff165b15610c325773ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054839290610bba90849061343a565b925050819055508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051610c2091815260200190565b60405180910390a36001915050611049565b610c3d81600a612cd2565b610c4790826134ca565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604081208054909190610c7c90849061343a565b90915550610c8d9050816028612cd2565b610c9882601e612cd2565b610ca3836014612cd2565b610cad919061343a565b610cb7919061343a565b3060009081526004602052604081208054909190610cd690849061343a565b90915550610ce7905081603c612cd2565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604081208054909190610d2390849061343a565b90915550600090505b6003811015610d8357610d7181610d5884610d4883600a61348d565b610d5390601461343a565b612cd2565b600084815260116020526040902054610a42919061343a565b80610d7b81613564565b915050610d2c565b50610d97610d92826032612cd2565b612d31565b60075473ffffffffffffffffffffffffffffffffffffffff868116911614801590610de2575060065473ffffffffffffffffffffffffffffffffffffffff8681166101009092041614155b8015610e09575060075473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015610e35575060065473ffffffffffffffffffffffffffffffffffffffff8581166101009092041614155b15610e9b5760085473ffffffffffffffffffffffffffffffffffffffff868116911614801590610e80575060085473ffffffffffffffffffffffffffffffffffffffff858116911614155b15610e9057610e90858585612e1b565b610e9b858585612eb6565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610ef586600a612cd2565b610eff90876134ca565b60405190815260200160405180910390a33073ffffffffffffffffffffffffffffffffffffffff86167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610f54866028612cd2565b610f5f87601e612cd2565b610f6a886014612cd2565b610f74919061343a565b610f7e919061343a565b60405190815260200160405180910390a360065473ffffffffffffffffffffffffffffffffffffffff61010090910481169086167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef610fde86603c612cd2565b60405190815260200160405180910390a38473ffffffffffffffffffffffffffffffffffffffff167ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a7611032856032612cd2565b60405190815260200160405180910390a260019150505b9392505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146110d6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064015b60405180910390fd5b600b55565b336000908152601c602090815260408083206002845290915290205461115d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f6e6f2063757272656e74207374616b696e6720706f736974696f6e000000000060448201526064016110cd565b6111676002612f1b565b6000611174336002611ed7565b11156111af57600a54611188336002611ed7565b611192919061348d565b336000908152601b60209081526040808320600284529091529020555b600854336000818152601c6020908152604080832060028452909152908190205490517fa9059cbb0000000000000000000000000000000000000000000000000000000081526004810192909252602482015273ffffffffffffffffffffffffffffffffffffffff9091169063a9059cbb90604401600060405180830381600087803b15801561123e57600080fd5b505af1158015611252573d6000803e3d6000fd5b5050336000908152601c6020908152604080832060028452825282205460149091527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a805491945092506112a79084906134ca565b9091555050336000908152601c6020908152604080832060028452909152812055565b60075473ffffffffffffffffffffffffffffffffffffffff16331461134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600e55565b33600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461138c90839061343a565b33600081815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8916808552908352928190208590555193845290927f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161099f565b60075473ffffffffffffffffffffffffffffffffffffffff163314611471576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600880547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff831617905560005b60038110156115025760085473ffffffffffffffffffffffffffffffffffffffff166000908152601c60209081526040808320848452909152812055806114fa81613564565b9150506114b4565b5050565b600a5473ffffffffffffffffffffffffffffffffffffffff821660009081526004602052604081205490916109ab91613452565b60075473ffffffffffffffffffffffffffffffffffffffff1633146115bb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600680547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b600380546108b690613516565b33600090815260056020908152604080832073ffffffffffffffffffffffffffffffffffffffff8616845290915281205461138c9083906134ca565b60075473ffffffffffffffffffffffffffffffffffffffff1633146116b6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600d55565b336000908152601c60209081526040808320600284529091529020541561173e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f7374616b696e6720706f736974696f6e20616c7265616479206578697374730060448201526064016110cd565b6008546040517f23b872dd0000000000000000000000000000000000000000000000000000000081523360048201523060248201526044810183905273ffffffffffffffffffffffffffffffffffffffff909116906323b872dd90606401600060405180830381600087803b1580156117b657600080fd5b505af11580156117ca573d6000803e3d6000fd5b50506002600052505060126020527f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b25461182c5760026000526012602052427f8e1fee8c88a9e04123b21e90cae2727a7715bf522a1e46eb5934ccd05203a6b2555b6118366002612f1b565b6000611843336002611ed7565b111561187e57600a54611857336002611ed7565b611861919061348d565b336000908152601b60209081526040808320600284529091529020555b7fa74ba3945261e09fde15ba3db55005b205e61eeb4ad811ac0faa2b315bffeead54336000818152601960209081526040808320600280855290835281842095909555600c54848452601a8352818420868552835281842055928252601c815282822093825292909252812080548392906118fa90849061343a565b90915550506002600090815260146020527fa1930aa930426c54c34daad2b9ada7c5d0ef0c96078a3c5bb79f6fa6602c4a7a805483929061193c90849061343a565b909155505050565b60075473ffffffffffffffffffffffffffffffffffffffff1633146119c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600780547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b600a54336000908152600460205260408120549091611a2a91613452565b821115611a3657600080fd5b611a403383612c17565b91506000600a5483611a52919061348d565b33600090815260046020526040812080549293508392909190611a769084906134ca565b909155505060075473ffffffffffffffffffffffffffffffffffffffff16331480611aa3575060065460ff165b15611b395773ffffffffffffffffffffffffffffffffffffffff841660009081526004602052604081208054839290611add90849061343a565b909155505060405183815273ffffffffffffffffffffffffffffffffffffffff85169033907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a360019150506109ab565b611b4481600a612cd2565b611b4e90826134ca565b73ffffffffffffffffffffffffffffffffffffffff851660009081526004602052604081208054909190611b8390849061343a565b90915550611b949050816028612cd2565b611b9f82601e612cd2565b611baa836014612cd2565b611bb4919061343a565b611bbe919061343a565b3060009081526004602052604081208054909190611bdd90849061343a565b90915550611bee905081603c612cd2565b600654610100900473ffffffffffffffffffffffffffffffffffffffff1660009081526004602052604081208054909190611c2a90849061343a565b90915550600090505b6003811015611c6157611c4f81610d5884610d4883600a61348d565b80611c5981613564565b915050611c33565b50611c70610d92826032612cd2565b60075473ffffffffffffffffffffffffffffffffffffffff163314801590611cb55750600654610100900473ffffffffffffffffffffffffffffffffffffffff163314155b8015611cdc575060075473ffffffffffffffffffffffffffffffffffffffff858116911614155b8015611d08575060065473ffffffffffffffffffffffffffffffffffffffff8581166101009092041614155b15611d6b5760085473ffffffffffffffffffffffffffffffffffffffff163314801590611d50575060085473ffffffffffffffffffffffffffffffffffffffff858116911614155b15611d6057611d60338585612e1b565b611d6b338585612eb6565b73ffffffffffffffffffffffffffffffffffffffff8416337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611daf86600a612cd2565b611db990876134ca565b60405190815260200160405180910390a330337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611df8866028612cd2565b611e0387601e612cd2565b611e0e886014612cd2565b611e18919061343a565b611e22919061343a565b60405190815260200160405180910390a3600654610100900473ffffffffffffffffffffffffffffffffffffffff16337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef611e7e86603c612cd2565b60405190815260200160405180910390a3337ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a7611ebc856032612cd2565b60405190815260200160405180910390a25060019392505050565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a60209081526040808320848452909152812054611f14575060006109ab565b600c546000838152600f602090815260408083205460149092529091205415801590611f565750611f448461210c565b60008581526015602052604090205414155b1561200b57600084815260156020526040812054611f738661210c565b611f7d91906134ca565b90505b600081118015611fb65750600085815260146020526040902054633b9aca0090611faa858461348d565b611fb49190613452565b105b15611fda57611fc660028461348d565b9250611fd360028361348d565b9150611f80565b600085815260146020526040902054611ff3848361348d565b611ffd9190613452565b612007908361343a565b9150505b73ffffffffffffffffffffffffffffffffffffffff85166000818152601a60209081526040808320888452825280832054938352601982528083208884529091528120549091849161205e90839061348d565b6120689190613452565b61207290846134ca565b73ffffffffffffffffffffffffffffffffffffffff88166000908152601c602090815260408083208a84529091529020546120ad919061348d565b6120b79190613452565b73ffffffffffffffffffffffffffffffffffffffff87166000908152601b602090815260408083208984529091529020546120f2919061343a565b9050600a54816121029190613452565b9695505050505050565b60008181526012602052604081205461212757506000919050565b6000828152601760209081526040808320546013835281842054601290935292205461215390426134ca565b61215d919061343a565b61216791906134ca565b6000838152601360209081526040808320546016835281842054601190935292205461219391906134ca565b61219d919061348d565b6121a79190613452565b6000838152601160205260409020546109ab91906134ca565b60075473ffffffffffffffffffffffffffffffffffffffff163314612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b600090815260136020526040902055565b60005b600381101561150257600061226a8383611ed7565b111561227a5761227a8282612636565b8061228481613564565b915050612255565b805160005b825181101561247f57601860008483815181106122b0576122b06135cc565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff16156122fb57816122f3816134e1565b92505061246d565b600a54600d5461230b919061348d565b60046000858481518110612321576123216135cc565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612372919061343a565b92505081905550600160186000858481518110612391576123916135cc565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508281815181106123fc576123fc6135cc565b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600d5460405161246491815260200190565b60405180910390a35b8061247781613564565b915050612291565b5080600a54600d54612491919061348d565b61249b919061348d565b33600090815260046020526040812080549091906124ba9084906134ca565b9091555050600160005260126020527f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a35461251d5760016000526012602052427f71a67924699a20698523213e55fe499d539379d7769cd5567e2c45d583f815a3555b6125276001612f1b565b6000612534336001611ed7565b111561256f57600a54612548336001611ed7565b612552919061348d565b336000908152601b60209081526040808320600184529091529020555b7f169f97de0d9a84d840042b17d3c6b9638b3d6fd9024c9eb0c7a306a17b49f88f54336000818152601960209081526040808320600180855290835281842095909555600c54848452601a8352818420868552835281842055928252601c815282822093825292909252812080548392906125eb90849061343a565b90915550506001600090815260146020527fb6c61a840592cc84133e4b25bd509abf4659307c57b160799b38490a5aa48f2c805483929061262d90849061343a565b90915550505050565b61263f81612f1b565b73ffffffffffffffffffffffffffffffffffffffff82166000908152601a60209081526040808320848452909152902054612678575050565b600c5473ffffffffffffffffffffffffffffffffffffffff83166000818152601a6020908152604080832086845282528083205493835260198252808320868452909152812054909291906126ce90839061348d565b6126d89190613452565b6000848152600f60205260409020546126f191906134ca565b73ffffffffffffffffffffffffffffffffffffffff85166000908152601c6020908152604080832087845290915290205461272c919061348d565b6127369190613452565b73ffffffffffffffffffffffffffffffffffffffff84166000908152601b60209081526040808320868452909152902054612771919061343a565b73ffffffffffffffffffffffffffffffffffffffff84166000818152601b602090815260408083208784528252808320839055600f82528083205484845260198352818420888552835281842055600c54938352601a82528083208784529091528120919091559091506127e683600261343a565b6127f190600a61348d565b905061280282610d5383600161343a565b61280c90836134ca565b73ffffffffffffffffffffffffffffffffffffffff85166000908152600460205260408120805490919061284190849061343a565b90915550612856905082610d5383600561343a565b600654610100900473ffffffffffffffffffffffffffffffffffffffff166000908152600460205260408120805490919061289290849061343a565b909155506128a7905082610d5383600361343a565b6128b683610d5384600261343a565b6128c090846134ca565b6128ca91906134ca565b30600090815260046020526040812080549091906128e99084906134ca565b90915550600090505b60028110156129675761295561290982600261348d565b851415612917576001612922565b61292282600261348d565b61293c858461293287600261343a565b610d53919061343a565b600087815260116020526040902054610a42919061343a565b8061295f81613564565b9150506128f2565b5061297a610d9283610d5384600461343a565b600a5473ffffffffffffffffffffffffffffffffffffffff85169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129c886610d5387600161343a565b6129d290876134ca565b6129dc9190613452565b60405190815260200160405180910390a3600654600a5461010090910473ffffffffffffffffffffffffffffffffffffffff169030907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612a4386610d5387600561343a565b612a4d9190613452565b60405190815260200160405180910390a3600a5430907ffb1cca2745e309250590c0f70d53bdbce480caeb94e9f16af0bf5b20ae9e16a790612a9485610d5386600461343a565b612a9e9190613452565b60405190815260200160405180910390a250505050565b60075473ffffffffffffffffffffffffffffffffffffffff163314612b36576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600960248201527f6e6f74206f776e6572000000000000000000000000000000000000000000000060448201526064016110cd565b60009182526010602052604090912055565b600080600080612b59856000611ed7565b612b64866001611ed7565b612b6f876002611ed7565b612b7a886002611ed7565b612b85896001611ed7565b612b908a6000611ed7565b612b9a919061343a565b612ba4919061343a565b93509350935093509193509193565b60008281526012602052604090205415612c0557612bd08261210c565b600083815260166020908152604080832093909355601290522054612bf590426134ca565b6000838152601760205260409020555b60009182526011602052604090912055565b600b54600a5473ffffffffffffffffffffffffffffffffffffffff84166000908152600460205260408120549092918491612c529190613452565b612c5c91906134ca565b108015612c84575060085473ffffffffffffffffffffffffffffffffffffffff848116911614155b15612ccc57600b54600a5473ffffffffffffffffffffffffffffffffffffffff8516600090815260046020526040902054612cbf9190613452565b612cc991906134ca565b91505b50919050565b6000601081612ce284600a61348d565b612ced90600161343a565b8152602001908152602001600020546010600084600a612d0d919061348d565b81526020019081526020016000205484612d27919061348d565b6110499190613452565b60085473ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040812054600a54600154612d69919061348d565b612d7391906134ca565b90506000612d8183836134ca565b90508181600a54612d92919061348d565b612d9c9190613452565b600a81905560011115612daf576001600a555b60085473ffffffffffffffffffffffffffffffffffffffff166000908152600460205260409020548290612de490839061348d565b612dee9190613452565b60085473ffffffffffffffffffffffffffffffffffffffff16600090815260046020526040902055505050565b73ffffffffffffffffffffffffffffffffffffffff821660009081526018602052604090205460ff16158015612e535750600d548110155b15610a4757612e6383600161307f565b73ffffffffffffffffffffffffffffffffffffffff8216600090815260186020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055505050565b600e548110610a475760085473ffffffffffffffffffffffffffffffffffffffff84811691161415612eed57612eed82600061307f565b60085473ffffffffffffffffffffffffffffffffffffffff83811691161415610a4757610a4783600061307f565b60008181526014602052604090205415801590612f4e5750612f3c8161210c565b60008281526015602052604090205414155b156109c257600081815260156020526040812054612f6b8361210c565b612f7591906134ca565b90505b600081118015612fb25750600082815260146020526040902054600c54633b9aca009190612fa6908461348d565b612fb09190613452565b105b15613019576002600c6000828254612fca919061348d565b90915550600090505b6003811015613013576000818152600f60205260408120805460029290612ffb90849061348d565b9091555081905061300b81613564565b915050612fd3565b50612f78565b600082815260146020526040902054600c54613035908361348d565b61303f9190613452565b6000838152600f60205260408120805490919061305d90849061343a565b9091555061306c90508261210c565b6000838152601560205260409020555050565b6000818152601260205260409020546130a45760008181526012602052604090204290555b6130ad81612f1b565b60006130b98383611ed7565b111561310857600a546130cc8383611ed7565b6130d6919061348d565b73ffffffffffffffffffffffffffffffffffffffff83166000908152601b602090815260408083208584529091529020555b6000818152600f602090815260408083205473ffffffffffffffffffffffffffffffffffffffff861680855260198452828520868652845282852091909155600c54818552601a84528285208686528452828520558352601c8252808320848452909152812080546001929061317f90849061343a565b9091555050600081815260146020526040812080546001929061262d90849061343a565b803573ffffffffffffffffffffffffffffffffffffffff811681146131c757600080fd5b919050565b6000602082840312156131de57600080fd5b611049826131a3565b600080604083850312156131fa57600080fd5b613203836131a3565b9150613211602084016131a3565b90509250929050565b60008060006060848603121561322f57600080fd5b613238846131a3565b9250613246602085016131a3565b9150604084013590509250925092565b6000806040838503121561326957600080fd5b613272836131a3565b946020939093013593505050565b6000602080838503121561329357600080fd5b823567ffffffffffffffff808211156132ab57600080fd5b818501915085601f8301126132bf57600080fd5b8135818111156132d1576132d16135fb565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108582111715613314576133146135fb565b604052828152858101935084860182860187018a101561333357600080fd5b600095505b8386101561335d57613349816131a3565b855260019590950194938601938601613338565b5098975050505050505050565b60006020828403121561337c57600080fd5b8135801515811461104957600080fd5b60006020828403121561339e57600080fd5b5035919050565b600080604083850312156133b857600080fd5b50508035926020909101359150565b600060208083528351808285015260005b818110156133f4578581018301518582016040015282016133d8565b81811115613406576000604083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016929092016040019392505050565b6000821982111561344d5761344d61359d565b500190565b600082613488577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b6000817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156134c5576134c561359d565b500290565b6000828210156134dc576134dc61359d565b500390565b6000816134f0576134f061359d565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600181811c9082168061352a57607f821691505b60208210811415612ccc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156135965761359661359d565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fdfea26469706673582212200d0cbf830798016c036ee1f45ca233ccefc97da50eeaefcdc6b76cf6ef064fd064736f6c63430008070033

Deployed Bytecode Sourcemap

221:19059: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;17170:96:0;;;;;;:::i;:::-;;:::i;:::-;;18016: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;18891:162::-;;;;;;:::i;:::-;;:::i;1056:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;16678: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;:::-;;;;;;;;;;;;;;18665:218;;;;;;:::i;:::-;;:::i;5583:274::-;;;;;;:::i;:::-;;:::i;964:38::-;;;;;;:::i;:::-;;;;;;;;;;;;;;1230:59;;;;;;:::i;:::-;;;;;;;;;;;;;;919:38;;;;;;:::i;:::-;;;;;;;;;;;;;;797:39;;;;;;17605:262;;;;;;:::i;:::-;;:::i;616:23::-;;;;;;1009:40;;;;;;:::i;:::-;;;;;;;;;;;;;;5104:123;;;;;;:::i;:::-;;:::i;1171:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;551:20;;;;;;;;;18277:154;;;;;;:::i;:::-;;:::i;331:20::-;;;:::i;751:39::-;;;;;;1410:52;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5865:284;;;;;;:::i;:::-;;:::i;18439:218::-;;;;;;:::i;:::-;;:::i;16048:622::-;;;;;;:::i;:::-;;:::i;17875:133::-;;;;;;:::i;:::-;;:::i;6157:1457::-;;;;;;:::i;:::-;;:::i;13315:928::-;;;;;;:::i;:::-;;:::i;710:34::-;;;;;;10890:302;;;;;;:::i;:::-;;:::i;17421: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;;;;;;;;;17274: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;17170:96::-;17225:9;:7;:9::i;:::-;17245:13;17251:6;17245:5;:13::i;:::-;17170:96;:::o;18016:253::-;18071:15;18097:13;;18089:5;:21;;;;:::i;:::-;18130:10;18121:20;;;;:8;:20;;;;;:34;;18071:39;;-1:-1:-1;18071:39:0;;18121:20;;;:34;;18071:39;;18121:34;:::i;:::-;;;;-1:-1:-1;;18183:4:0;18166:23;;;;:8;:23;;;;;:37;;18193:10;;18166:23;:37;;18193:10;;18166:37;:::i;:::-;;;;-1:-1:-1;;18234:13:0;;;;:9;:13;;;;;;18214:47;;18230:2;;18234:26;;18250:10;;18234:26;:::i;:::-;18214:15;:47::i;:::-;18060:209;18016: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;18891:162::-;18983:5;;;;18969:10;:19;18961:41;;;;;;;5882:2:1;18961:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18961:41:0;;;;;;;;;19013:13;:32;18891:162::o;16678:484::-;16740:10;16757:1;16723:28;;;:16;:28;;;;;;;;16752:1;16723:31;;;;;;;;16715:75;;;;;;;5166:2:1;16715:75:0;;;5148:21:1;5205:2;5185:18;;;5178:30;5244:29;5224:18;;;5217:57;5291:18;;16715:75:0;4964:351:1;16715:75:0;16801:13;16812:1;16801:10;:13::i;:::-;16866:1;16829:34;16849:10;16861:1;16829:19;:34::i;:::-;:38;16825:125;;;16937:13;;16900:34;16920:10;16932:1;16900:19;:34::i;:::-;:50;;;;:::i;:::-;16883:10;16869:25;;;;:13;:25;;;;;;;;16895:1;16869:28;;;;;;;:81;16825:125;16967:16;;16994:10;16967:16;17006:28;;;:16;:28;;;;;;;;17035:1;17006:31;;;;;;;;;;16961:77;;;;;;;;3983:74:1;;;;4073:18;;;4066:34;16967:16:0;;;;;16961:32;;3956:18:1;;16961:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17094:10:0;17077:28;;;;:16;:28;;;;;;;;17106:1;17077:31;;;;;;;17049:21;:24;;;;:59;;17077:31;;-1:-1:-1;17049:24:0;-1:-1:-1;17049:59:0;;17077:31;;17049:59;:::i;:::-;;;;-1:-1:-1;;17136:10:0;17153:1;17119:28;;;:16;:28;;;;;;;;17148:1;17119:31;;;;;;;:35;16678:484::o;18665:218::-;18785:5;;;;18771:10;:19;18763:41;;;;;;;5882:2:1;18763:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18763:41:0;5680:332:1;18763:41:0;18815:27;:60;18665: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;17605:262:0;17706:5;;;;17692:10;:19;17684:41;;;;;;;5882:2:1;17684:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17684:41:0;5680:332:1;17684:41:0;17736:16;:38;;;;;;;;;;-1:-1:-1;17785:75:0;17806:1;17802;:5;17785:75;;;17833:16;;;;17856:1;17816:34;;;:16;:34;;;;;;;;:37;;;;;;;;:41;17851:1;17809:3;17851:1;17809:3;:::i;:::-;;;;17785:75;;;;17605:262;:::o;5104:123::-;5206:13;;5187:16;;;5160:7;5187:16;;;:8;:16;;;;;;5160:7;;5187:32;;;:::i;18277:154::-;18365:5;;;;18351:10;:19;18343:41;;;;;;;5882:2:1;18343:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18343:41:0;5680:332:1;18343:41:0;18395:11;:28;;;;;;;;;;;;;18277:154::o;331:20::-;;;;;;;:::i;5865:284::-;6006:10;5950:4;5998:19;;;:7;:19;;;;;;;;;:28;;;;;;;;;;:46;;6029:15;;5998:46;:::i;18439:218::-;18559:5;;;;18545:10;:19;18537:41;;;;;;;5882:2:1;18537:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;18537:41:0;5680:332:1;18537:41:0;18589:27;:60;18439:218::o;16048:622::-;16119:10;16102:28;;;;:16;:28;;;;;;;;16131:1;16102:31;;;;;;;;:36;16094:80;;;;;;;5522:2:1;16094:80:0;;;5504:21:1;5561:2;5541:18;;;5534:30;5600:33;5580:18;;;5573:61;5651:18;;16094:80:0;5320:355:1;16094:80:0;16191:16;;16185:71;;;;;16222:10;16185:71;;;3669:34:1;16242:4:0;3719:18:1;;;3712:43;3771:18;;;3764:34;;;16191:16:0;;;;;16185:36;;3581:18:1;;16185:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16281:1:0;16271:12;;-1:-1:-1;;16271:9:0;:12;;;;16267:53;;16300:1;16290:12;;:9;:12;;16305:15;16290:12;:30;16267:53;16331:13;16342:1;16331:10;:13::i;:::-;16396:1;16359:34;16379:10;16391:1;16359:19;:34::i;:::-;:38;16355:125;;;16467:13;;16430:34;16450:10;16462:1;16430:19;:34::i;:::-;:50;;;;:::i;:::-;16413:10;16399:25;;;;:13;:25;;;;;;;;16425:1;16399:28;;;;;;;:81;16355:125;16511:4;;16494:10;16511:4;16491:14;;;:2;16511:4;16491:14;;;16511:4;16491:14;;;16513:1;16491:17;;;;;;;;;:24;;;;16547:18;;16526:15;;;:3;:15;;;;;:18;;;;;;;;:39;16576:28;;;:16;:28;;;;;:31;;;;;;;;;:41;;16611:6;;16511:4;16576:41;;16611:6;;16576:41;:::i;:::-;;;;-1:-1:-1;;16650:1:0;16628:24;;;;:21;:24;;;:34;;16656:6;;16628:24;:34;;16656:6;;16628:34;:::i;:::-;;;;-1:-1:-1;;;16048:622:0:o;17875:133::-;17954:5;;;;17940:10;:19;17932:41;;;;;;;5882:2:1;17932:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17932:41:0;5680:332:1;17932:41:0;17984:5;:16;;;;;;;;;;;;;;;17875: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;17421:176::-;17524:5;;;;17510:10;:19;17502:41;;;;;;;5882:2:1;17502:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17502:41:0;5680:332:1;17502:41:0;17554:15;;;;:11;:15;;;;;:35;17421: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;17274:139::-;17360:5;;;;17346:10;:19;17338:41;;;;;;;5882:2:1;17338:41:0;;;5864:21:1;5921:1;5901:18;;;5894:29;5959:11;5939:18;;;5932:39;5988:18;;17338:41:0;5680:332:1;17338:41:0;17390:7;;;;:3;:7;;;;;;:15;17274: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://0d0cbf830798016c036ee1f45ca233ccefc97da50eeaefcdc6b76cf6ef064fd0
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.