ETH Price: $2,519.23 (+3.44%)

Token

MalwareChain DAO (MDAO)
 

Overview

Max Total Supply

4,056,521.940169317126498015 MDAO

Holders

32 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Governance (DAO) token for the MalwareChain distributed antivirus project. Required for voting, rewarding masternodes and maintaining trading liquidity.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MiningPool

Compiler Version
v0.7.1+commit.f4a555be

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-10-28
*/

pragma solidity 0.7.1;

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

    function burn(uint256 value) external returns (bool);

    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function token0() external view returns (address);
    function token1() external view returns (address);
}

contract PoolRewardToken {
    mapping (address => uint256) public _balanceOf;

    string public constant name = "MalwareChain DAO";
    string public constant symbol = "MDAO";
    uint8 public constant decimals = 18;
    uint256 public totalSupply = 0;
    mapping(address => mapping(address => uint256)) private _allowances;

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

    function balanceOf(address account) public view returns (uint256 value) {
        return _balanceOf[account];
    }

    function transfer(address to, uint256 value) public returns (bool success) {
        require(_balanceOf[msg.sender] >= value);

        _balanceOf[msg.sender] -= value;  // deduct from sender's balance
        _balanceOf[to] += value;          // add to recipient's balance
        emit Transfer(msg.sender, to, value);
        return true;
    }

    function transferMultiple(address[] memory to, uint256 value) public returns (bool success) {
        require(_balanceOf[msg.sender] >= value);

        _balanceOf[msg.sender] -= value;
        value /= to.length;
        for (uint256 i = 0; i < to.length; i++) {
            _balanceOf[to[i]] += value;
            emit Transfer(msg.sender, to[i], value);
        }
        return true;
    }

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

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

    function transferFrom(address from, address to, uint256 value) public returns (bool success) {
        require(value <= _balanceOf[from]);
        require(value <= _allowances[from][msg.sender]);

        _balanceOf[from] -= value;
        _balanceOf[to] += value;
        _allowances[from][msg.sender] -= value;
        emit Transfer(from, to, value);
        return true;
    }

    function mint(address to, uint256 value) internal {
        totalSupply += value;
        _balanceOf[to] += value;
        emit Transfer(address(0), to, value);
    }

    function burn(uint256 value) public returns (bool success) {
        require(value <= _balanceOf[msg.sender]);
        totalSupply -= value;
        _balanceOf[msg.sender] -= value;
        return true;
    }
}

abstract contract Ownable {
    address public owner_;

    constructor() {
        owner_ = msg.sender;
    }

    modifier onlyOwner() {
        if (msg.sender == owner_)
            _;
    }

    function transferOwnership(address newOwner) onlyOwner public {
        if (newOwner != address(0)) owner_ = newOwner;
    }
}

contract MiningPool is PoolRewardToken, Ownable {
    uint8 public constant BLOCK_STEP = 10;
    uint256 public constant BLOCK_FEE_PERCENT = 100000;

    struct Investor {
        uint256 depositMALW;
        uint256 depositLPETH;
        uint256 depositLPUSDT;
        uint256 lastZeroPtr;
        bool initialized;
    }

    struct BlockInfo {
        uint256 totalDepositsMALW;
        uint256 totalDepositsLPETH;
        uint256 totalDepositsLPUSDT;
        uint256 lpETHPrice;
        uint256 lpUSDTPrice;
        uint256 blockLength;
        uint256 blockReward;
        uint256 lpPart;
    }

    uint256 public BLOCK_REWARD = 10**18 * 400;
    uint256 public LP_PART = 10**4 * 80;
    uint256 public deployBlock;
    uint256 public lastRecordedBlock;
    uint256 public totalDepositsMALW;
    uint256 public totalDepositsLPETH;
    uint256 public totalDepositsLPUSDT;
    BlockInfo[1000000] public history;
    uint256 public arrayPointer;
    mapping (address => Investor) public investors;
    bool public miningFinished = false;
    uint256 public masternodeRewardsBalance;
    uint256 public feesBalance;
    mapping (uint256 => uint256) public masternodeRewardsClaimedNonces;

    IERC20 public _tokenMALW;
    IERC20 public _tokenLPETH;
    IERC20 public _tokenLPUSDT;

    event Deposit(address indexed investor, uint256 valueMALW, uint256 valueLPETH, uint256 valueLPUSDT);
    event Harvest(address indexed investor, uint256 value);
    event Withdraw(address indexed investor, uint256 valueMALW, uint256 valueLPETH, uint256 valueLPUSDT);
    event MasternodeReward(address indexed owner, uint256 value, uint256 nonce);
    event FeesSpent(address indexed to, uint256 value);
    event RewardChanged(uint256 newValue);
    event LPPartChanged(uint256 newValue);

    constructor() {
        deployBlock = block.number;
        emit RewardChanged(BLOCK_REWARD);
    }

    function setMALWToken(address token) public {
        require(address(_tokenMALW) == address(0), "Address was already set");
        _tokenMALW = IERC20(token);
    }

    function setLPETHToken(address token) public {
        require(address(_tokenLPETH) == address(0), "Address was already set");
        _tokenLPETH = IERC20(token);
    }

    function setLPUSDTToken(address token) public {
        require(address(_tokenLPUSDT) == address(0), "Address was already set");
        _tokenLPUSDT = IERC20(token);
    }

    function setBlockReward(uint256 value) public onlyOwner {
        recordHistory();
        BLOCK_REWARD = value;
        emit RewardChanged(value);
    }

    function setLPPart(uint256 value) public onlyOwner {  // 1% = 10000
        require(value < 90 * 10**4, "Maximum value is 900000 (90%)");
        recordHistory();
        LP_PART = value;
        emit LPPartChanged(value);
    }

    function currentBlock() public view returns (uint256) {
        return (block.number - deployBlock) / BLOCK_STEP;
    }

    function recordHistoryNeeded() public view returns (bool) {
        return !miningFinished && lastRecordedBlock < currentBlock();
    }

    function getBlockTotalDepositsMALW(uint256 blk) public view returns (uint256) {
        if (blk >= arrayPointer)
            return totalDepositsMALW;
        return history[blk].totalDepositsMALW;
    }

    function getBlockTotalDepositsLPETH(uint256 blk) public view returns (uint256) {
        if (blk >= arrayPointer)
            return totalDepositsLPETH;
        return history[blk].totalDepositsLPETH;
    }

    function getBlockTotalDepositsLPUSDT(uint256 blk) public view returns (uint256) {
        if (blk >= arrayPointer)
            return totalDepositsLPUSDT;
        return history[blk].totalDepositsLPUSDT;
    }

    function getBlockLPETHPrice(uint256 blk) public view returns (uint256) {
        if (blk >= arrayPointer)
            return getCurrentLPETHPrice();
        return history[blk].lpETHPrice;
    }

    function getBlockLPUSDTPrice(uint256 blk) public view returns (uint256) {
        if (blk >= arrayPointer)
            return getCurrentLPUSDTPrice();
        return history[blk].lpUSDTPrice;
    }

    function getCurrentLPETHPrice() public view returns (uint256) {
        if (address(_tokenLPETH) == address(0))
            return 0;
        return _tokenLPETH.totalSupply() > 0 ? getReserve(_tokenLPETH) / _tokenLPETH.totalSupply() : 0;  // both MALWDAO and UNI-V2 have 18 decimals
    }

    function getCurrentLPUSDTPrice() public view returns (uint256) {
        if (address(_tokenLPUSDT) == address(0))
            return 0;
        return _tokenLPUSDT.totalSupply() > 0 ? getReserve(_tokenLPUSDT) / _tokenLPUSDT.totalSupply() : 0;  // both MALWDAO and UNI-V2 have 18 decimals
    }

    function getRewardDistribution(uint256 blk) public view returns (uint256 malw, uint256 lp) {
        if (blk > 787500) {  // 157500000 MALWDAO limit
            return (0, 0);
        }
        lp = (getBlockTotalDepositsLPETH(blk) + getBlockTotalDepositsLPUSDT(blk)) <= 0 ? 0 : getLPPart(blk);
        malw = getBlockTotalDepositsMALW(blk) <= 0 ? 0 : 1000000 - lp - BLOCK_FEE_PERCENT;
    }

    function recordHistory() public returns (bool) {
        if (recordHistoryNeeded()) {
            _recordHistory();
            return true;
        }
        return false;
    }

    function _recordHistory() internal {
        // miningFinished check is in recordHistoryNeeded();

        uint256 currentBlk = currentBlock();

        if (currentBlk > 787500) {
            currentBlk = 787500;
            miningFinished = true;
        }

        uint256 lpETHPrice = getCurrentLPETHPrice();
        uint256 lpUSDTPrice = getCurrentLPUSDTPrice();

        history[arrayPointer].totalDepositsMALW = totalDepositsMALW;
        history[arrayPointer].totalDepositsLPETH = totalDepositsLPETH;
        history[arrayPointer].totalDepositsLPUSDT = totalDepositsLPUSDT;
        history[arrayPointer].lpETHPrice = lpETHPrice;
        history[arrayPointer].lpUSDTPrice = lpUSDTPrice;
        history[arrayPointer].blockLength = currentBlk - lastRecordedBlock;
        history[arrayPointer].blockReward = BLOCK_REWARD;
        history[arrayPointer].lpPart = LP_PART;

        masternodeRewardsBalance += BLOCK_REWARD / 20 * (currentBlk - lastRecordedBlock);  // 5%
        feesBalance += BLOCK_REWARD / 20 * (currentBlk - lastRecordedBlock);  // 5%

        arrayPointer++;
        lastRecordedBlock = currentBlk;
    }

    function getReserve(IERC20 token) internal view returns (uint256) {
        (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast) = token.getReserves();
        return token.token0() == address(this) ? uint256(reserve0) : uint256(reserve1);
    }

    function getBlockLength(uint256 blk) internal view returns (uint256) {
        if (blk >= arrayPointer) {
            return currentBlock() - lastRecordedBlock;
        }
        return history[blk].blockLength;
    }

    function getBlockReward(uint256 blk) internal view returns (uint256) {
        if (blk >= arrayPointer) {
            return BLOCK_REWARD;
        }
        return history[blk].blockReward;
    }

    function getLPPart(uint256 blk) internal view returns (uint256) {
        if (blk >= arrayPointer) {
            return LP_PART;
        }
        return history[blk].lpPart;
    }

    function getRewardSum(address sender) public view returns (uint256) {
        if (!investors[sender].initialized || !canHarvest(sender))
            return 0;

        uint256 reward = 0;

        for (uint256 i = investors[sender].lastZeroPtr; i <= arrayPointer; i++) {
            (uint256 malwPercent, uint256 lpPercent) = getRewardDistribution(i);
            uint256 lpETHPrice = getBlockLPETHPrice(i);
            uint256 lpUSDTPrice = getBlockLPUSDTPrice(i);
            uint256 totalNormalizedLP = lpETHPrice * getBlockTotalDepositsLPETH(i) + lpUSDTPrice * getBlockTotalDepositsLPUSDT(i);
            uint256 userNormalizedLP = lpETHPrice * investors[sender].depositLPETH + lpUSDTPrice * investors[sender].depositLPUSDT;

            if (investors[sender].depositMALW > 0)
                reward += getBlockReward(i) * getBlockLength(i) * investors[sender].depositMALW / getBlockTotalDepositsMALW(i) * malwPercent / 1000000;
            if (userNormalizedLP > 0)
                reward += getBlockReward(i) * getBlockLength(i) * userNormalizedLP / totalNormalizedLP * lpPercent / 1000000;
        }

        return reward;
    }

    function deposit(uint256 valueMALW, uint256 valueLPETH, uint256 valueLPUSDT) public {
        require(valueMALW + valueLPETH + valueLPUSDT > 0 &&
                valueMALW >= 0 &&
                valueLPETH >= 0 &&
                valueLPUSDT >= 0, "Invalid arguments");

        if (canHarvest(msg.sender))
            harvestReward();  // history is recorded while harvesting
        else
            recordHistory();

        if (valueMALW > 0) {
            require(_tokenMALW.allowance(msg.sender, address(this)) >= valueMALW, "Insufficient MALW allowance");
            investors[msg.sender].depositMALW += valueMALW;
            totalDepositsMALW += valueMALW;
            _tokenMALW.transferFrom(msg.sender, address(this), valueMALW);
        }

        if (valueLPETH > 0) {
            require(_tokenLPETH.allowance(msg.sender, address(this)) >= valueLPETH, "Insufficient LPETH allowance");
            investors[msg.sender].depositLPETH += valueLPETH;
            totalDepositsLPETH += valueLPETH;
            _tokenLPETH.transferFrom(msg.sender, address(this), valueLPETH);
        }

        if (valueLPUSDT > 0) {
            require(_tokenLPUSDT.allowance(msg.sender, address(this)) >= valueLPUSDT, "Insufficient LPUSDT allowance");
            investors[msg.sender].depositLPUSDT += valueLPUSDT;
            totalDepositsLPUSDT += valueLPUSDT;
            _tokenLPUSDT.transferFrom(msg.sender, address(this), valueLPUSDT);
        }

        investors[msg.sender].initialized = true;
        investors[msg.sender].lastZeroPtr = arrayPointer;
        emit Deposit(msg.sender, valueMALW, valueLPETH, valueLPUSDT);
    }

    function canHarvest(address sender) public view returns (bool) {
        return investors[sender].depositMALW + investors[sender].depositLPETH + investors[sender].depositLPUSDT > 0;
    }

    function harvestReward() public returns (uint256) {
        require(canHarvest(msg.sender));

        recordHistory();

        uint256 reward = getRewardSum(msg.sender);
        if (reward > 0)
            mint(msg.sender, reward);
        investors[msg.sender].lastZeroPtr = arrayPointer;
        emit Harvest(msg.sender, reward);

        return reward;
    }

    function harvestRewardAndWithdraw() public returns (uint256, uint256, uint256, uint256) {
        uint256 reward = harvestReward();
        uint256 depositMALW = investors[msg.sender].depositMALW;
        uint256 depositLPETH = investors[msg.sender].depositLPETH;
        uint256 depositLPUSDT = investors[msg.sender].depositLPUSDT;

        if (depositMALW > 0) {
            totalDepositsMALW -= depositMALW;
            investors[msg.sender].depositMALW = 0;
            _tokenMALW.transfer(msg.sender, depositMALW);
        }

        if (depositLPETH > 0) {
            totalDepositsLPETH -= depositLPETH;
            investors[msg.sender].depositLPETH = 0;
            _tokenLPETH.transfer(msg.sender, depositLPETH);
        }

        if (depositLPUSDT > 0) {
            totalDepositsLPUSDT -= depositLPUSDT;
            investors[msg.sender].depositLPUSDT = 0;
            _tokenLPUSDT.transfer(msg.sender, depositLPUSDT);
        }

        emit Withdraw(msg.sender, depositMALW, depositLPETH, depositLPUSDT);

        return (reward, depositMALW, depositLPETH, depositLPUSDT);
    }

    function splitSignature(bytes memory sig) internal pure returns (uint8, bytes32, bytes32) {
        require(sig.length == 65);

        bytes32 r;
        bytes32 s;
        uint8 v;

        assembly {
            // first 32 bytes, after the length prefix
            r := mload(add(sig, 32))
            // second 32 bytes
            s := mload(add(sig, 64))
            // final byte (first byte of the next 32 bytes)
            v := byte(0, mload(add(sig, 96)))
        }

        return (v, r, s);
    }

    function recoverSigner(bytes32 message, bytes memory sig) internal pure returns (address) {
        uint8 v;
        bytes32 r;
        bytes32 s;

        (v, r, s) = splitSignature(sig);

        return ecrecover(message, v, r, s);
    }

    function prefixed(bytes32 hash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    function claimMasternodeReward(uint256 amount, uint256 nonce, bytes memory sig) public {
        require(masternodeRewardsClaimedNonces[nonce] == 0, "This signature is already used");

        recordHistory();

        require(amount <= masternodeRewardsBalance, "Insufficient reward funds");

        bytes32 message = prefixed(keccak256(abi.encodePacked(msg.sender, amount, nonce, address(this))));
        require(recoverSigner(message, sig) == owner_);

        masternodeRewardsClaimedNonces[nonce] = amount;
        _balanceOf[msg.sender] += amount;
        masternodeRewardsBalance -= amount;
        emit MasternodeReward(msg.sender, amount, nonce);
    }

    function sendFeeFunds(address to, uint256 amount) public onlyOwner {
        require(feesBalance >= amount, "Insufficient funds");

        _balanceOf[to] += amount;
        feesBalance -= amount;
        emit FeesSpent(to, amount);
    }
}

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":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"valueMALW","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueLPETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueLPUSDT","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"FeesSpent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Harvest","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"LPPartChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"nonce","type":"uint256"}],"name":"MasternodeReward","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"RewardChanged","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":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"investor","type":"address"},{"indexed":false,"internalType":"uint256","name":"valueMALW","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueLPETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"valueLPUSDT","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"BLOCK_FEE_PERCENT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_REWARD","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"BLOCK_STEP","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LP_PART","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenLPETH","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenLPUSDT","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tokenMALW","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"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":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"arrayPointer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"canHarvest","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"claimMasternodeReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deployBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"valueMALW","type":"uint256"},{"internalType":"uint256","name":"valueLPETH","type":"uint256"},{"internalType":"uint256","name":"valueLPUSDT","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blk","type":"uint256"}],"name":"getBlockLPETHPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blk","type":"uint256"}],"name":"getBlockLPUSDTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blk","type":"uint256"}],"name":"getBlockTotalDepositsLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blk","type":"uint256"}],"name":"getBlockTotalDepositsLPUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blk","type":"uint256"}],"name":"getBlockTotalDepositsMALW","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLPETHPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentLPUSDTPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blk","type":"uint256"}],"name":"getRewardDistribution","outputs":[{"internalType":"uint256","name":"malw","type":"uint256"},{"internalType":"uint256","name":"lp","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"getRewardSum","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"harvestReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"harvestRewardAndWithdraw","outputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"history","outputs":[{"internalType":"uint256","name":"totalDepositsMALW","type":"uint256"},{"internalType":"uint256","name":"totalDepositsLPETH","type":"uint256"},{"internalType":"uint256","name":"totalDepositsLPUSDT","type":"uint256"},{"internalType":"uint256","name":"lpETHPrice","type":"uint256"},{"internalType":"uint256","name":"lpUSDTPrice","type":"uint256"},{"internalType":"uint256","name":"blockLength","type":"uint256"},{"internalType":"uint256","name":"blockReward","type":"uint256"},{"internalType":"uint256","name":"lpPart","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"investors","outputs":[{"internalType":"uint256","name":"depositMALW","type":"uint256"},{"internalType":"uint256","name":"depositLPETH","type":"uint256"},{"internalType":"uint256","name":"depositLPUSDT","type":"uint256"},{"internalType":"uint256","name":"lastZeroPtr","type":"uint256"},{"internalType":"bool","name":"initialized","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastRecordedBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"masternodeRewardsBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"masternodeRewardsClaimedNonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"miningFinished","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"recordHistory","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"recordHistoryNeeded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"sendFeeFunds","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setBlockReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setLPETHToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setLPPart","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setLPUSDTToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"}],"name":"setMALWToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDepositsLPETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDepositsLPUSDT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDepositsMALW","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":"success","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":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferMultiple","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260006001556815af1d78b58c400000600455620c35006005556000627a120d60006101000a81548160ff02191690831515021790555034801561004657600080fd5b5033600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550436006819055507fba54ce5940e90276397dfc944292ed6a6a43aa64f9deb96d5f471bef49b78e146004546040518082815260200191505060405180910390a1614540806100d76000396000f3fe608060405234801561001057600080fd5b50600436106103765760003560e01c80637f05b9ef116101d3578063bb3f730511610104578063e12ed13c116100a2578063f1294b321161007c578063f1294b32146110bb578063f18294d4146110ef578063f2fde38b14611133578063fb70261a1461117757610376565b8063e12ed13c14611027578063e766307914611045578063ea712d871461107957610376565b8063d9b195d9116100de578063d9b195d914610f1b578063da443c1814610f73578063dbde69cd14610f91578063dd62ed3e14610faf57610376565b8063bb3f730514610e2c578063cca3e83214610e7a578063d22da17d14610ed257610376565b80639b211f5011610171578063a7a38f0b1161014b578063a7a38f0b14610cf5578063a9059cbb14610d68578063aae88b8b14610dcc578063ae29be1314610dea57610376565b80639b211f5014610c77578063a3ec191a14610c95578063a70949f814610cb357610376565b806386e59eed116101ad57806386e59eed14610b405780638d76a80e14610b6e57806395235ced14610bb257806395d89b4114610bf457610376565b80637f05b9ef14610ac05780637fe2200314610ade5780638135fafb14610afc57610376565b80633f7ef211116102ad578063668126971161024b57806370a082311161022557806370a08231146109f857806373a64bc214610a505780637518c96514610a8457806379635d0514610aa257610376565b806366812697146109465780636710e8e3146109645780636f7bc9be1461098257610376565b806349dc2b831161028757806349dc2b83146108b55780635347215a146108d557806356810d5b146109085780635a34928e1461092857610376565b80633f7ef21114610765578063416f50901461083d57806342966c681461087157610376565b806310177a671161031a5780631a18e707116102f45780631a18e7071461067457806323b872dd146106a2578063313ce567146107265780633b6f6d851461074757610376565b806310177a67146105665780631584eec61461058757806318160ddd1461065657610376565b80630644f448116103565780630644f4481461041d57806306fdde031461045f57806308bbe7c0146104e2578063095ea7b31461050257610376565b806230429a1461037b578062aeef8a146103995780630204e6a5146103db575b600080fd5b6103836111d1565b6040518082815260200191505060405180910390f35b6103d9600480360360608110156103af57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506111d8565b005b610407600480360360208110156103f157600080fd5b8101908080359060200190929190505050611bc8565b6040518082815260200191505060405180910390f35b6104496004803603602081101561043357600080fd5b8101908080359060200190929190505050611c03565b6040518082815260200191505060405180910390f35b610467611c39565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104a757808201518184015260208101905061048c565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104ea611c72565b60405180821515815260200191505060405180910390f35b61054e6004803603604081101561051857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ca0565b60405180821515815260200191505060405180910390f35b61056e611d92565b604051808260ff16815260200191505060405180910390f35b6106546004803603606081101561059d57600080fd5b810190808035906020019092919080359060200190929190803590602001906401000000008111156105ce57600080fd5b8201836020820111156105e057600080fd5b8035906020019184600183028401116401000000008311171561060257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d97565b005b61065e612059565b6040518082815260200191505060405180910390f35b6106a06004803603602081101561068a57600080fd5b810190808035906020019092919050505061205f565b005b61070e600480360360608110156106b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612100565b60405180821515815260200191505060405180910390f35b61072e612368565b604051808260ff16815260200191505060405180910390f35b61074f61236d565b6040518082815260200191505060405180910390f35b6108256004803603604081101561077b57600080fd5b810190808035906020019064010000000081111561079857600080fd5b8201836020820111156107aa57600080fd5b803590602001918460208302840111640100000000831117156107cc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612373565b60405180821515815260200191505060405180910390f35b610845612514565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61089d6004803603602081101561088757600080fd5b810190808035906020019092919050505061253c565b60405180821515815260200191505060405180910390f35b6108bd6125ee565b60405180821515815260200191505060405180910390f35b6108dd612603565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b610910612b03565b60405180821515815260200191505060405180910390f35b610930612b2b565b6040518082815260200191505060405180910390f35b61094e612c0b565b6040518082815260200191505060405180910390f35b61096c612c11565b6040518082815260200191505060405180910390f35b6109c46004803603602081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e08565b6040518086815260200185815260200184815260200183815260200182151581526020019550505050505060405180910390f35b610a3a60048036036020811015610a0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e4d565b6040518082815260200191505060405180910390f35b610a58612e95565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a8c612ebd565b6040518082815260200191505060405180910390f35b610aaa612ec5565b6040518082815260200191505060405180910390f35b610ac8612ecb565b6040518082815260200191505060405180910390f35b610ae6612ed1565b6040518082815260200191505060405180910390f35b610b3e60048036036020811015610b1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130c8565b005b610b6c60048036036020811015610b5657600080fd5b81019080803590602001909291905050506131d4565b005b610bb060048036036020811015610b8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132ed565b005b610bde60048036036020811015610bc857600080fd5b81019080803590602001909291905050506133f9565b6040518082815260200191505060405180910390f35b610bfc61342f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c3c578082015181840152602081019050610c21565b50505050905090810190601f168015610c695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c7f613468565b6040518082815260200191505060405180910390f35b610c9d613470565b6040518082815260200191505060405180910390f35b610cdf60048036036020811015610cc957600080fd5b8101908080359060200190929190505050613476565b6040518082815260200191505060405180910390f35b610d2160048036036020811015610d0b57600080fd5b81019080803590602001909291905050506134b1565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b610db460048036036040811015610d7e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506134fe565b60405180821515815260200191505060405180910390f35b610dd4613652565b6040518082815260200191505060405180910390f35b610e1660048036036020811015610e0057600080fd5b8101908080359060200190929190505050613658565b6040518082815260200191505060405180910390f35b610e7860048036036040811015610e4257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613672565b005b610ebc60048036036020811015610e9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137f3565b6040518082815260200191505060405180910390f35b610efe60048036036020811015610ee857600080fd5b810190808035906020019092919050505061380b565b604051808381526020018281526020019250505060405180910390f35b610f5d60048036036020811015610f3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061387f565b6040518082815260200191505060405180910390f35b610f7b613b43565b6040518082815260200191505060405180910390f35b610f99613b4b565b6040518082815260200191505060405180910390f35b61101160048036036040811015610fc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b51565b6040518082815260200191505060405180910390f35b61102f613bd8565b6040518082815260200191505060405180910390f35b61104d613bf1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110a56004803603602081101561108f57600080fd5b8101908080359060200190929190505050613c17565b6040518082815260200191505060405180910390f35b6110c3613c4d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111316004803603602081101561110557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c75565b005b6111756004803603602081101561114957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d81565b005b6111b96004803603602081101561118d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e51565b60405180821515815260200191505060405180910390f35b620186a081565b600081838501011180156111ed575060008310155b80156111fa575060008210155b8015611207575060008110155b611279576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c696420617267756d656e747300000000000000000000000000000081525060200191505060405180910390fd5b61128233613e51565b156112955761128f612b2b565b5061129f565b61129d612b03565b505b60008311156115535782627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561135257600080fd5b505afa158015611366573d6000803e3d6000fd5b505050506040513d602081101561137c57600080fd5b81019080805190602001909291905050501015611401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e74204d414c5720616c6c6f77616e6365000000000081525060200191505060405180910390fd5b82627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254019250508190555082600860008282540192505081905550627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561151657600080fd5b505af115801561152a573d6000803e3d6000fd5b505050506040513d602081101561154057600080fd5b8101908080519060200190929190505050505b60008211156118075781627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561160657600080fd5b505afa15801561161a573d6000803e3d6000fd5b505050506040513d602081101561163057600080fd5b810190808051906020019092919050505010156116b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e74204c5045544820616c6c6f77616e63650000000081525060200191505060405180910390fd5b81627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254019250508190555081600960008282540192505081905550627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117ca57600080fd5b505af11580156117de573d6000803e3d6000fd5b505050506040513d60208110156117f457600080fd5b8101908080519060200190929190505050505b6000811115611abb5780627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156118ba57600080fd5b505afa1580156118ce573d6000803e3d6000fd5b505050506040513d60208110156118e457600080fd5b81019080805190602001909291905050501015611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e73756666696369656e74204c505553445420616c6c6f77616e636500000081525060200191505060405180910390fd5b80627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000828254019250508190555080600a60008282540192505081905550627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a7e57600080fd5b505af1158015611a92573d6000803e3d6000fd5b505050506040513d6020811015611aa857600080fd5b8101908080519060200190929190505050505b6001627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548160ff021916908315150217905550627a120b54627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055503373ffffffffffffffffffffffffffffffffffffffff167f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e84848460405180848152602001838152602001828152602001935050505060405180910390a2505050565b6000627a120b548210611be457611bdd612ed1565b9050611bfe565b600b82620f42408110611bf357fe5b600802016003015490505b919050565b6000627a120b548210611c1a57600a549050611c34565b600b82620f42408110611c2957fe5b600802016002015490505b919050565b6040518060400160405280601081526020017f4d616c77617265436861696e2044414f0000000000000000000000000000000081525081565b6000627a120d60009054906101000a900460ff16158015611c9b5750611c96613bd8565b600754105b905090565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600a81565b6000627a121060008481526020019081526020016000205414611e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54686973207369676e617475726520697320616c72656164792075736564000081525060200191505060405180910390fd5b611e2a612b03565b50627a120e54831115611ea5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496e73756666696369656e74207265776172642066756e64730000000000000081525060200191505060405180910390fd5b6000611f2033858530604051602001808573ffffffffffffffffffffffffffffffffffffffff1660601b81526014018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140194505050505060405160208183030381529060405280519060200120613f2d565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f658284613f85565b73ffffffffffffffffffffffffffffffffffffffff1614611f8557600080fd5b83627a1210600085815260200190815260200160002081905550836000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555083627a120e600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe082cd059180903e8528fd62073850c1db9f82aae4156971bccae2ac416819c08585604051808381526020018281526020019250505060405180910390a250505050565b60015481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156120fd576120bd612b03565b50806004819055507fba54ce5940e90276397dfc944292ed6a6a43aa64f9deb96d5f471bef49b78e14816040518082815260200191505060405180910390a15b50565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561214d57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156121d657600080fd5b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b60085481565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156123c057600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508251828161241657fe5b04915060005b8351811015612509578260008086848151811061243557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555083818151811061249057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3808060010191505061241c565b506001905092915050565b627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561258957600080fd5b81600160008282540392505081905550816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555060019050919050565b627a120d60009054906101000a900460ff1681565b6000806000806000612613612b2b565b90506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050600083111561282557826008600082825403925050819055506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156127e857600080fd5b505af11580156127fc573d6000803e3d6000fd5b505050506040513d602081101561281257600080fd5b8101908080519060200190929190505050505b600082111561295a57816009600082825403925050819055506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561291d57600080fd5b505af1158015612931573d6000803e3d6000fd5b505050506040513d602081101561294757600080fd5b8101908080519060200190929190505050505b6000811115612a8f5780600a600082825403925050819055506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a5257600080fd5b505af1158015612a66573d6000803e3d6000fd5b505050506040513d6020811015612a7c57600080fd5b8101908080519060200190929190505050505b3373ffffffffffffffffffffffffffffffffffffffff167f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca9484848460405180848152602001838152602001828152602001935050505060405180910390a28383838397509750975097505050505090919293565b6000612b0d611c72565b15612b2357612b1a61400f565b60019050612b28565b600090505b90565b6000612b3633613e51565b612b3f57600080fd5b612b47612b03565b506000612b533361387f565b90506000811115612b6957612b6833826141d0565b5b627a120b54627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055503373ffffffffffffffffffffffffffffffffffffffff167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba826040518082815260200191505060405180910390a28091505090565b60075481565b60008073ffffffffffffffffffffffffffffffffffffffff16627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c745760009050612e05565b6000627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ce057600080fd5b505afa158015612cf4573d6000803e3d6000fd5b505050506040513d6020811015612d0a57600080fd5b810190808051906020019092919050505011612d27576000612e02565b627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9157600080fd5b505afa158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b8101908080519060200190929190505050612df9627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614296565b81612e0057fe5b045b90505b90565b627a120c6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900460ff16905085565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b627a120f5481565b60095481565b60045481565b60008073ffffffffffffffffffffffffffffffffffffffff16627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f3457600090506130c5565b6000627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612fa057600080fd5b505afa158015612fb4573d6000803e3d6000fd5b505050506040513d6020811015612fca57600080fd5b810190808051906020019092919050505011612fe75760006130c2565b627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561305157600080fd5b505afa158015613065573d6000803e3d6000fd5b505050506040513d602081101561307b57600080fd5b81019080805190602001909291905050506130b9627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614296565b816130c057fe5b045b90505b90565b600073ffffffffffffffffffffffffffffffffffffffff16627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461318e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f416464726573732077617320616c72656164792073657400000000000000000081525060200191505060405180910390fd5b80627a121260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132ea57620dbba081106132a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6178696d756d2076616c75652069732039303030303020283930252900000081525060200191505060405180910390fd5b6132aa612b03565b50806005819055507f42579f92a70f87aba8f5078eb967835b2ec9b3a08f2cfd5f318edbab1f783305816040518082815260200191505060405180910390a15b50565b600073ffffffffffffffffffffffffffffffffffffffff16627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f416464726573732077617320616c72656164792073657400000000000000000081525060200191505060405180910390fd5b80627a121360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000627a120b54821061341057600854905061342a565b600b82620f4240811061341f57fe5b600802016000015490505b919050565b6040518060400160405280600481526020017f4d44414f0000000000000000000000000000000000000000000000000000000081525081565b627a120b5481565b60065481565b6000627a120b5482106134925761348b612c11565b90506134ac565b600b82620f424081106134a157fe5b600802016004015490505b919050565b600b81620f424081106134c057fe5b600802016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561354b57600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600a5481565b627a12106020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156137ef5780627a120f541015613742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e73756666696369656e742066756e6473000000000000000000000000000081525060200191505060405180910390fd5b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555080627a120f600082825403925050819055508173ffffffffffffffffffffffffffffffffffffffff167f6ef4e6bd03d65516ad953afe2be611d12740f8cf60a3e0d280315ea8fc810494826040518082815260200191505060405180910390a25b5050565b60006020528060005260406000206000915090505481565b600080620c042c831115613825576000809150915061387a565b600061383084611c03565b61383985613c17565b01111561384e576138498361441c565b613851565b60005b9050600061385e846133f9565b111561387457620186a081620f42400303613877565b60005b91505b915091565b6000627a120c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff1615806138e557506138e382613e51565b155b156138f35760009050613b3e565b600080627a120c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490505b627a120b548111613b38576000806139558361380b565b91509150600061396484611bc8565b9050600061397185613476565b9050600061397e86611c03565b820261398987613c17565b84020190506000627a120c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201548302627a120c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015485020190506000627a120c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115613aeb57620f424086613a7c896133f9565b627a120c60008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613aca8b614452565b613ad38c614491565b020281613adc57fe5b040281613ae557fe5b04880197505b6000811115613b2557620f4240858383613b048b614452565b613b0d8c614491565b020281613b1657fe5b040281613b1f57fe5b04880197505b505050505050808060010191505061393e565b50809150505b919050565b627a120e5481565b60055481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a60ff16600654430381613beb57fe5b04905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000627a120b548210613c2e576009549050613c48565b600b82620f42408110613c3d57fe5b600802016001015490505b919050565b627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff16627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613d3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f416464726573732077617320616c72656164792073657400000000000000000081525060200191505060405180910390fd5b80627a121160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613e4e57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613e4d5780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b600080627a120c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154627a120c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154627a120c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540101119050919050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600080600080613f94856144c7565b80935081945082955050505060018684848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ffa573d6000803e3d6000fd5b50505060206040510351935050505092915050565b6000614019613bd8565b9050620c042c81111561404a57620c042c90506001627a120d60006101000a81548160ff0219169083151502179055505b6000614054612ed1565b90506000614060612c11565b9050600854600b627a120b54620f4240811061407857fe5b6008020160000181905550600954600b627a120b54620f4240811061409957fe5b6008020160010181905550600a54600b627a120b54620f424081106140ba57fe5b600802016002018190555081600b627a120b54620f424081106140d957fe5b600802016003018190555080600b627a120b54620f424081106140f857fe5b60080201600401819055506007548303600b627a120b54620f4240811061411b57fe5b6008020160050181905550600454600b627a120b54620f4240811061413c57fe5b6008020160060181905550600554600b627a120b54620f4240811061415d57fe5b6008020160070181905550600754830360146004548161417957fe5b0402627a120e60008282540192505081905550600754830360146004548161419d57fe5b0402627a120f60008282540192505081905550627a120b6000815480929190600101919050555082600781905550505050565b80600160008282540192505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142e257600080fd5b505afa1580156142f6573d6000803e3d6000fd5b505050506040513d606081101561430c57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050509250925092503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561439457600080fd5b505afa1580156143a8573d6000803e3d6000fd5b505050506040513d60208110156143be57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461440057816dffffffffffffffffffffffffffff16614412565b826dffffffffffffffffffffffffffff165b9350505050919050565b6000627a120b54821061443357600554905061444d565b600b82620f4240811061444257fe5b600802016007015490505b919050565b6000627a120b5482106144725760075461446a613bd8565b03905061448c565b600b82620f4240811061448157fe5b600802016005015490505b919050565b6000627a120b5482106144a85760045490506144c2565b600b82620f424081106144b757fe5b600802016006015490505b919050565b600080600060418451146144da57600080fd5b60008060006020870151925060408701519150606087015160001a9050808383955095509550505050919390925056fea2646970667358221220283f373135a86e7f3536383df06a142e62a710435ddc6c9aec8bb88f0e48d70064736f6c63430007010033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106103765760003560e01c80637f05b9ef116101d3578063bb3f730511610104578063e12ed13c116100a2578063f1294b321161007c578063f1294b32146110bb578063f18294d4146110ef578063f2fde38b14611133578063fb70261a1461117757610376565b8063e12ed13c14611027578063e766307914611045578063ea712d871461107957610376565b8063d9b195d9116100de578063d9b195d914610f1b578063da443c1814610f73578063dbde69cd14610f91578063dd62ed3e14610faf57610376565b8063bb3f730514610e2c578063cca3e83214610e7a578063d22da17d14610ed257610376565b80639b211f5011610171578063a7a38f0b1161014b578063a7a38f0b14610cf5578063a9059cbb14610d68578063aae88b8b14610dcc578063ae29be1314610dea57610376565b80639b211f5014610c77578063a3ec191a14610c95578063a70949f814610cb357610376565b806386e59eed116101ad57806386e59eed14610b405780638d76a80e14610b6e57806395235ced14610bb257806395d89b4114610bf457610376565b80637f05b9ef14610ac05780637fe2200314610ade5780638135fafb14610afc57610376565b80633f7ef211116102ad578063668126971161024b57806370a082311161022557806370a08231146109f857806373a64bc214610a505780637518c96514610a8457806379635d0514610aa257610376565b806366812697146109465780636710e8e3146109645780636f7bc9be1461098257610376565b806349dc2b831161028757806349dc2b83146108b55780635347215a146108d557806356810d5b146109085780635a34928e1461092857610376565b80633f7ef21114610765578063416f50901461083d57806342966c681461087157610376565b806310177a671161031a5780631a18e707116102f45780631a18e7071461067457806323b872dd146106a2578063313ce567146107265780633b6f6d851461074757610376565b806310177a67146105665780631584eec61461058757806318160ddd1461065657610376565b80630644f448116103565780630644f4481461041d57806306fdde031461045f57806308bbe7c0146104e2578063095ea7b31461050257610376565b806230429a1461037b578062aeef8a146103995780630204e6a5146103db575b600080fd5b6103836111d1565b6040518082815260200191505060405180910390f35b6103d9600480360360608110156103af57600080fd5b810190808035906020019092919080359060200190929190803590602001909291905050506111d8565b005b610407600480360360208110156103f157600080fd5b8101908080359060200190929190505050611bc8565b6040518082815260200191505060405180910390f35b6104496004803603602081101561043357600080fd5b8101908080359060200190929190505050611c03565b6040518082815260200191505060405180910390f35b610467611c39565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156104a757808201518184015260208101905061048c565b50505050905090810190601f1680156104d45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6104ea611c72565b60405180821515815260200191505060405180910390f35b61054e6004803603604081101561051857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611ca0565b60405180821515815260200191505060405180910390f35b61056e611d92565b604051808260ff16815260200191505060405180910390f35b6106546004803603606081101561059d57600080fd5b810190808035906020019092919080359060200190929190803590602001906401000000008111156105ce57600080fd5b8201836020820111156105e057600080fd5b8035906020019184600183028401116401000000008311171561060257600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050509192919290505050611d97565b005b61065e612059565b6040518082815260200191505060405180910390f35b6106a06004803603602081101561068a57600080fd5b810190808035906020019092919050505061205f565b005b61070e600480360360608110156106b857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612100565b60405180821515815260200191505060405180910390f35b61072e612368565b604051808260ff16815260200191505060405180910390f35b61074f61236d565b6040518082815260200191505060405180910390f35b6108256004803603604081101561077b57600080fd5b810190808035906020019064010000000081111561079857600080fd5b8201836020820111156107aa57600080fd5b803590602001918460208302840111640100000000831117156107cc57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050919291929080359060200190929190505050612373565b60405180821515815260200191505060405180910390f35b610845612514565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61089d6004803603602081101561088757600080fd5b810190808035906020019092919050505061253c565b60405180821515815260200191505060405180910390f35b6108bd6125ee565b60405180821515815260200191505060405180910390f35b6108dd612603565b6040518085815260200184815260200183815260200182815260200194505050505060405180910390f35b610910612b03565b60405180821515815260200191505060405180910390f35b610930612b2b565b6040518082815260200191505060405180910390f35b61094e612c0b565b6040518082815260200191505060405180910390f35b61096c612c11565b6040518082815260200191505060405180910390f35b6109c46004803603602081101561099857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e08565b6040518086815260200185815260200184815260200183815260200182151581526020019550505050505060405180910390f35b610a3a60048036036020811015610a0e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612e4d565b6040518082815260200191505060405180910390f35b610a58612e95565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610a8c612ebd565b6040518082815260200191505060405180910390f35b610aaa612ec5565b6040518082815260200191505060405180910390f35b610ac8612ecb565b6040518082815260200191505060405180910390f35b610ae6612ed1565b6040518082815260200191505060405180910390f35b610b3e60048036036020811015610b1257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130c8565b005b610b6c60048036036020811015610b5657600080fd5b81019080803590602001909291905050506131d4565b005b610bb060048036036020811015610b8457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506132ed565b005b610bde60048036036020811015610bc857600080fd5b81019080803590602001909291905050506133f9565b6040518082815260200191505060405180910390f35b610bfc61342f565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610c3c578082015181840152602081019050610c21565b50505050905090810190601f168015610c695780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610c7f613468565b6040518082815260200191505060405180910390f35b610c9d613470565b6040518082815260200191505060405180910390f35b610cdf60048036036020811015610cc957600080fd5b8101908080359060200190929190505050613476565b6040518082815260200191505060405180910390f35b610d2160048036036020811015610d0b57600080fd5b81019080803590602001909291905050506134b1565b604051808981526020018881526020018781526020018681526020018581526020018481526020018381526020018281526020019850505050505050505060405180910390f35b610db460048036036040811015610d7e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506134fe565b60405180821515815260200191505060405180910390f35b610dd4613652565b6040518082815260200191505060405180910390f35b610e1660048036036020811015610e0057600080fd5b8101908080359060200190929190505050613658565b6040518082815260200191505060405180910390f35b610e7860048036036040811015610e4257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050613672565b005b610ebc60048036036020811015610e9057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506137f3565b6040518082815260200191505060405180910390f35b610efe60048036036020811015610ee857600080fd5b810190808035906020019092919050505061380b565b604051808381526020018281526020019250505060405180910390f35b610f5d60048036036020811015610f3157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061387f565b6040518082815260200191505060405180910390f35b610f7b613b43565b6040518082815260200191505060405180910390f35b610f99613b4b565b6040518082815260200191505060405180910390f35b61101160048036036040811015610fc557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613b51565b6040518082815260200191505060405180910390f35b61102f613bd8565b6040518082815260200191505060405180910390f35b61104d613bf1565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6110a56004803603602081101561108f57600080fd5b8101908080359060200190929190505050613c17565b6040518082815260200191505060405180910390f35b6110c3613c4d565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6111316004803603602081101561110557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613c75565b005b6111756004803603602081101561114957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613d81565b005b6111b96004803603602081101561118d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613e51565b60405180821515815260200191505060405180910390f35b620186a081565b600081838501011180156111ed575060008310155b80156111fa575060008210155b8015611207575060008110155b611279576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f496e76616c696420617267756d656e747300000000000000000000000000000081525060200191505060405180910390fd5b61128233613e51565b156112955761128f612b2b565b5061129f565b61129d612b03565b505b60008311156115535782627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561135257600080fd5b505afa158015611366573d6000803e3d6000fd5b505050506040513d602081101561137c57600080fd5b81019080805190602001909291905050501015611401576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f496e73756666696369656e74204d414c5720616c6c6f77616e6365000000000081525060200191505060405180910390fd5b82627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000016000828254019250508190555082600860008282540192505081905550627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330866040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b15801561151657600080fd5b505af115801561152a573d6000803e3d6000fd5b505050506040513d602081101561154057600080fd5b8101908080519060200190929190505050505b60008211156118075781627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b15801561160657600080fd5b505afa15801561161a573d6000803e3d6000fd5b505050506040513d602081101561163057600080fd5b810190808051906020019092919050505010156116b5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f496e73756666696369656e74204c5045544820616c6c6f77616e63650000000081525060200191505060405180910390fd5b81627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000828254019250508190555081600960008282540192505081905550627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330856040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b1580156117ca57600080fd5b505af11580156117de573d6000803e3d6000fd5b505050506040513d60208110156117f457600080fd5b8101908080519060200190929190505050505b6000811115611abb5780627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e33306040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156118ba57600080fd5b505afa1580156118ce573d6000803e3d6000fd5b505050506040513d60208110156118e457600080fd5b81019080805190602001909291905050501015611969576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f496e73756666696369656e74204c505553445420616c6c6f77616e636500000081525060200191505060405180910390fd5b80627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206002016000828254019250508190555080600a60008282540192505081905550627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b8152600401808473ffffffffffffffffffffffffffffffffffffffff1681526020018373ffffffffffffffffffffffffffffffffffffffff1681526020018281526020019350505050602060405180830381600087803b158015611a7e57600080fd5b505af1158015611a92573d6000803e3d6000fd5b505050506040513d6020811015611aa857600080fd5b8101908080519060200190929190505050505b6001627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160006101000a81548160ff021916908315150217905550627a120b54627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055503373ffffffffffffffffffffffffffffffffffffffff167f36af321ec8d3c75236829c5317affd40ddb308863a1236d2d277a4025cccee1e84848460405180848152602001838152602001828152602001935050505060405180910390a2505050565b6000627a120b548210611be457611bdd612ed1565b9050611bfe565b600b82620f42408110611bf357fe5b600802016003015490505b919050565b6000627a120b548210611c1a57600a549050611c34565b600b82620f42408110611c2957fe5b600802016002015490505b919050565b6040518060400160405280601081526020017f4d616c77617265436861696e2044414f0000000000000000000000000000000081525081565b6000627a120d60009054906101000a900460ff16158015611c9b5750611c96613bd8565b600754105b905090565b600081600260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040518082815260200191505060405180910390a36001905092915050565b600a81565b6000627a121060008481526020019081526020016000205414611e22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601e8152602001807f54686973207369676e617475726520697320616c72656164792075736564000081525060200191505060405180910390fd5b611e2a612b03565b50627a120e54831115611ea5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260198152602001807f496e73756666696369656e74207265776172642066756e64730000000000000081525060200191505060405180910390fd5b6000611f2033858530604051602001808573ffffffffffffffffffffffffffffffffffffffff1660601b81526014018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1660601b815260140194505050505060405160208183030381529060405280519060200120613f2d565b9050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611f658284613f85565b73ffffffffffffffffffffffffffffffffffffffff1614611f8557600080fd5b83627a1210600085815260200190815260200160002081905550836000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555083627a120e600082825403925050819055503373ffffffffffffffffffffffffffffffffffffffff167fe082cd059180903e8528fd62073850c1db9f82aae4156971bccae2ac416819c08585604051808381526020018281526020019250505060405180910390a250505050565b60015481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156120fd576120bd612b03565b50806004819055507fba54ce5940e90276397dfc944292ed6a6a43aa64f9deb96d5f471bef49b78e14816040518082815260200191505060405180910390a15b50565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561214d57600080fd5b600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548211156121d657600080fd5b816000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555081600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a3600190509392505050565b601281565b60085481565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410156123c057600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055508251828161241657fe5b04915060005b8351811015612509578260008086848151811061243557fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555083818151811061249057fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3808060010191505061241c565b506001905092915050565b627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205482111561258957600080fd5b81600160008282540392505081905550816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254039250508190555060019050919050565b627a120d60009054906101000a900460ff1681565b6000806000806000612613612b2b565b90506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015490506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201549050600083111561282557826008600082825403925050819055506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000181905550627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156127e857600080fd5b505af11580156127fc573d6000803e3d6000fd5b505050506040513d602081101561281257600080fd5b8101908080519060200190929190505050505b600082111561295a57816009600082825403925050819055506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33846040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561291d57600080fd5b505af1158015612931573d6000803e3d6000fd5b505050506040513d602081101561294757600080fd5b8101908080519060200190929190505050505b6000811115612a8f5780600a600082825403925050819055506000627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612a5257600080fd5b505af1158015612a66573d6000803e3d6000fd5b505050506040513d6020811015612a7c57600080fd5b8101908080519060200190929190505050505b3373ffffffffffffffffffffffffffffffffffffffff167f02f25270a4d87bea75db541cdfe559334a275b4a233520ed6c0a2429667cca9484848460405180848152602001838152602001828152602001935050505060405180910390a28383838397509750975097505050505090919293565b6000612b0d611c72565b15612b2357612b1a61400f565b60019050612b28565b600090505b90565b6000612b3633613e51565b612b3f57600080fd5b612b47612b03565b506000612b533361387f565b90506000811115612b6957612b6833826141d0565b5b627a120b54627a120c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600301819055503373ffffffffffffffffffffffffffffffffffffffff167fc9695243a805adb74c91f28311176c65b417e842d5699893cef56d18bfa48cba826040518082815260200191505060405180910390a28091505090565b60075481565b60008073ffffffffffffffffffffffffffffffffffffffff16627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612c745760009050612e05565b6000627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612ce057600080fd5b505afa158015612cf4573d6000803e3d6000fd5b505050506040513d6020811015612d0a57600080fd5b810190808051906020019092919050505011612d27576000612e02565b627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9157600080fd5b505afa158015612da5573d6000803e3d6000fd5b505050506040513d6020811015612dbb57600080fd5b8101908080519060200190929190505050612df9627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614296565b81612e0057fe5b045b90505b90565b627a120c6020528060005260406000206000915090508060000154908060010154908060020154908060030154908060040160009054906101000a900460ff16905085565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b627a120f5481565b60095481565b60045481565b60008073ffffffffffffffffffffffffffffffffffffffff16627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415612f3457600090506130c5565b6000627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015612fa057600080fd5b505afa158015612fb4573d6000803e3d6000fd5b505050506040513d6020811015612fca57600080fd5b810190808051906020019092919050505011612fe75760006130c2565b627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561305157600080fd5b505afa158015613065573d6000803e3d6000fd5b505050506040513d602081101561307b57600080fd5b81019080805190602001909291905050506130b9627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16614296565b816130c057fe5b045b90505b90565b600073ffffffffffffffffffffffffffffffffffffffff16627a121260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461318e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f416464726573732077617320616c72656164792073657400000000000000000081525060200191505060405180910390fd5b80627a121260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156132ea57620dbba081106132a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601d8152602001807f4d6178696d756d2076616c75652069732039303030303020283930252900000081525060200191505060405180910390fd5b6132aa612b03565b50806005819055507f42579f92a70f87aba8f5078eb967835b2ec9b3a08f2cfd5f318edbab1f783305816040518082815260200191505060405180910390a15b50565b600073ffffffffffffffffffffffffffffffffffffffff16627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146133b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f416464726573732077617320616c72656164792073657400000000000000000081525060200191505060405180910390fd5b80627a121360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000627a120b54821061341057600854905061342a565b600b82620f4240811061341f57fe5b600802016000015490505b919050565b6040518060400160405280600481526020017f4d44414f0000000000000000000000000000000000000000000000000000000081525081565b627a120b5481565b60065481565b6000627a120b5482106134925761348b612c11565b90506134ac565b600b82620f424081106134a157fe5b600802016004015490505b919050565b600b81620f424081106134c057fe5b600802016000915090508060000154908060010154908060020154908060030154908060040154908060050154908060060154908060070154905088565b6000816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054101561354b57600080fd5b816000803373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540392505081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040518082815260200191505060405180910390a36001905092915050565b600a5481565b627a12106020528060005260406000206000915090505481565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614156137ef5780627a120f541015613742576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f496e73756666696369656e742066756e6473000000000000000000000000000081525060200191505060405180910390fd5b806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555080627a120f600082825403925050819055508173ffffffffffffffffffffffffffffffffffffffff167f6ef4e6bd03d65516ad953afe2be611d12740f8cf60a3e0d280315ea8fc810494826040518082815260200191505060405180910390a25b5050565b60006020528060005260406000206000915090505481565b600080620c042c831115613825576000809150915061387a565b600061383084611c03565b61383985613c17565b01111561384e576138498361441c565b613851565b60005b9050600061385e846133f9565b111561387457620186a081620f42400303613877565b60005b91505b915091565b6000627a120c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060040160009054906101000a900460ff1615806138e557506138e382613e51565b155b156138f35760009050613b3e565b600080627a120c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206003015490505b627a120b548111613b38576000806139558361380b565b91509150600061396484611bc8565b9050600061397185613476565b9050600061397e86611c03565b820261398987613c17565b84020190506000627a120c60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201548302627a120c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015485020190506000627a120c60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115613aeb57620f424086613a7c896133f9565b627a120c60008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154613aca8b614452565b613ad38c614491565b020281613adc57fe5b040281613ae557fe5b04880197505b6000811115613b2557620f4240858383613b048b614452565b613b0d8c614491565b020281613b1657fe5b040281613b1f57fe5b04880197505b505050505050808060010191505061393e565b50809150505b919050565b627a120e5481565b60055481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000600a60ff16600654430381613beb57fe5b04905090565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000627a120b548210613c2e576009549050613c48565b600b82620f42408110613c3d57fe5b600802016001015490505b919050565b627a121360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff16627a121160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614613d3b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260178152602001807f416464726573732077617320616c72656164792073657400000000000000000081525060200191505060405180910390fd5b80627a121160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415613e4e57600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614613e4d5780600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505b5b50565b600080627a120c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154627a120c60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154627a120c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540101119050919050565b60008160405160200180807f19457468657265756d205369676e6564204d6573736167653a0a333200000000815250601c01828152602001915050604051602081830303815290604052805190602001209050919050565b600080600080613f94856144c7565b80935081945082955050505060018684848460405160008152602001604052604051808581526020018460ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa158015613ffa573d6000803e3d6000fd5b50505060206040510351935050505092915050565b6000614019613bd8565b9050620c042c81111561404a57620c042c90506001627a120d60006101000a81548160ff0219169083151502179055505b6000614054612ed1565b90506000614060612c11565b9050600854600b627a120b54620f4240811061407857fe5b6008020160000181905550600954600b627a120b54620f4240811061409957fe5b6008020160010181905550600a54600b627a120b54620f424081106140ba57fe5b600802016002018190555081600b627a120b54620f424081106140d957fe5b600802016003018190555080600b627a120b54620f424081106140f857fe5b60080201600401819055506007548303600b627a120b54620f4240811061411b57fe5b6008020160050181905550600454600b627a120b54620f4240811061413c57fe5b6008020160060181905550600554600b627a120b54620f4240811061415d57fe5b6008020160070181905550600754830360146004548161417957fe5b0402627a120e60008282540192505081905550600754830360146004548161419d57fe5b0402627a120f60008282540192505081905550627a120b6000815480929190600101919050555082600781905550505050565b80600160008282540192505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156142e257600080fd5b505afa1580156142f6573d6000803e3d6000fd5b505050506040513d606081101561430c57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050509250925092503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561439457600080fd5b505afa1580156143a8573d6000803e3d6000fd5b505050506040513d60208110156143be57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff161461440057816dffffffffffffffffffffffffffff16614412565b826dffffffffffffffffffffffffffff165b9350505050919050565b6000627a120b54821061443357600554905061444d565b600b82620f4240811061444257fe5b600802016007015490505b919050565b6000627a120b5482106144725760075461446a613bd8565b03905061448c565b600b82620f4240811061448157fe5b600802016005015490505b919050565b6000627a120b5482106144a85760045490506144c2565b600b82620f424081106144b757fe5b600802016006015490505b919050565b600080600060418451146144da57600080fd5b60008060006020870151925060408701519150606087015160001a9050808383955095509550505050919390925056fea2646970667358221220283f373135a86e7f3536383df06a142e62a710435ddc6c9aec8bb88f0e48d70064736f6c63430007010033

Deployed Bytecode Sourcemap

3654:13932:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3753:50;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12313:1668;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7472:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7251:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;838:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6673:137;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;2296:212;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3709:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;16654:677;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;980:30;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6138:157;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2516:388;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;938:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4445:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1743:403;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4887:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3090:213;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4692:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14568:1120;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8897:184;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;14186:374;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4406:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8187:297;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4639:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1257:117;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4918:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4779:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4484:33;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4282:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7887:292;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5775:172;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6303:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5955:175;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6818:207;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;893:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4605:27;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4373:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7678:201;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4565:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1382:353;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;4524:34;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4812:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17339:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;783:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8492:397;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;11149:1156;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4733:39;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4331:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2154:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6544:121;;;:::i;:::-;;;;;;;;;;;;;;;;;;;3343:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;7033:210;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4950:26;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;5598:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3521:126;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13989:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;3753:50;3797:6;3753:50;:::o;12313:1668::-;12455:1;12441:11;12428:10;12416:9;:22;:36;:40;:75;;;;;12490:1;12477:9;:14;;12416:75;:111;;;;;12526:1;12512:10;:15;;12416:111;:148;;;;;12563:1;12548:11;:16;;12416:148;12408:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12603:22;12614:10;12603;:22::i;:::-;12599:141;;;12640:15;:13;:15::i;:::-;;12599:141;;;12725:15;:13;:15::i;:::-;;12599:141;12769:1;12757:9;:13;12753:328;;;12846:9;12795:10;;;;;;;;;;;:20;;;12816:10;12836:4;12795:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:60;;12787:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12939:9;12902;:21;12912:10;12902:21;;;;;;;;;;;;;;;:33;;;:46;;;;;;;;;;;12984:9;12963:17;;:30;;;;;;;;;;;13008:10;;;;;;;;;;;:23;;;13032:10;13052:4;13059:9;13008:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12753:328;13110:1;13097:10;:14;13093:338;;;13188:10;13136:11;;;;;;;;;;;:21;;;13158:10;13178:4;13136:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:62;;13128:103;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13284:10;13246:9;:21;13256:10;13246:21;;;;;;;;;;;;;;;:34;;;:48;;;;;;;;;;;13331:10;13309:18;;:32;;;;;;;;;;;13356:11;;;;;;;;;;;:24;;;13381:10;13401:4;13408:10;13356:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13093:338;13461:1;13447:11;:15;13443:348;;;13540:11;13487:12;;;;;;;;;;;:22;;;13510:10;13530:4;13487:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:64;;13479:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13639:11;13600:9;:21;13610:10;13600:21;;;;;;;;;;;;;;;:35;;;:50;;;;;;;;;;;13688:11;13665:19;;:34;;;;;;;;;;;13714:12;;;;;;;;;;;:25;;;13740:10;13760:4;13767:11;13714:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13443:348;13839:4;13803:9;:21;13813:10;13803:21;;;;;;;;;;;;;;;:33;;;:40;;;;;;;;;;;;;;;;;;13890:12;;13854:9;:21;13864:10;13854:21;;;;;;;;;;;;;;;:33;;:48;;;;13926:10;13918:55;;;13938:9;13949:10;13961:11;13918:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12313:1668;;;:::o;7472:198::-;7534:7;7565:12;;7558:3;:19;7554:67;;7599:22;:20;:22::i;:::-;7592:29;;;;7554:67;7639:7;7647:3;7639:12;;;;;;;;;;:23;;;7632:30;;7472:198;;;;:::o;7251:213::-;7322:7;7353:12;;7346:3;:19;7342:64;;7387:19;;7380:26;;;;7342:64;7424:7;7432:3;7424:12;;;;;;;;;;:32;;;7417:39;;7251:213;;;;:::o;838:48::-;;;;;;;;;;;;;;;;;;;:::o;6673:137::-;6725:4;6750:14;;;;;;;;;;;6749:15;:53;;;;;6788:14;:12;:14::i;:::-;6768:17;;:34;6749:53;6742:60;;6673:137;:::o;2296:212::-;2361:12;2421:5;2386:11;:23;2398:10;2386:23;;;;;;;;;;;;;;;:32;2410:7;2386:32;;;;;;;;;;;;;;;:40;;;;2463:7;2442:36;;2451:10;2442:36;;;2472:5;2442:36;;;;;;;;;;;;;;;;;;2496:4;2489:11;;2296:212;;;;:::o;3709:37::-;3744:2;3709:37;:::o;16654:677::-;16801:1;16760:30;:37;16791:5;16760:37;;;;;;;;;;;;:42;16752:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16850:15;:13;:15::i;:::-;;16896:24;;16886:6;:34;;16878:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16963:15;16981:79;17017:10;17029:6;17037:5;17052:4;17000:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16990:69;;;;;;16981:8;:79::i;:::-;16963:97;;17110:6;;;;;;;;;;;17079:37;;:27;17093:7;17102:3;17079:13;:27::i;:::-;:37;;;17071:46;;;;;;17170:6;17130:30;:37;17161:5;17130:37;;;;;;;;;;;:46;;;;17213:6;17187:10;:22;17198:10;17187:22;;;;;;;;;;;;;;;;:32;;;;;;;;;;;17258:6;17230:24;;:34;;;;;;;;;;;17297:10;17280:43;;;17309:6;17317:5;17280:43;;;;;;;;;;;;;;;;;;;;;;;;16654:677;;;;:::o;980:30::-;;;;:::o;6138:157::-;3483:6;;;;;;;;;;;3469:20;;:10;:20;;;3465:40;;;6205:15:::1;:13;:15::i;:::-;;6246:5;6231:12;:20;;;;6267;6281:5;6267:20;;;;;;;;;;;;;;;;;;3465:40:::0;6138:157;:::o;2516:388::-;2595:12;2637:10;:16;2648:4;2637:16;;;;;;;;;;;;;;;;2628:5;:25;;2620:34;;;;;;2682:11;:17;2694:4;2682:17;;;;;;;;;;;;;;;:29;2700:10;2682:29;;;;;;;;;;;;;;;;2673:5;:38;;2665:47;;;;;;2745:5;2725:10;:16;2736:4;2725:16;;;;;;;;;;;;;;;;:25;;;;;;;;;;;2779:5;2761:10;:14;2772:2;2761:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;2828:5;2795:11;:17;2807:4;2795:17;;;;;;;;;;;;;;;:29;2813:10;2795:29;;;;;;;;;;;;;;;;:38;;;;;;;;;;;2864:2;2849:25;;2858:4;2849:25;;;2868:5;2849:25;;;;;;;;;;;;;;;;;;2892:4;2885:11;;2516:388;;;;;:::o;938:35::-;971:2;938:35;:::o;4445:32::-;;;;:::o;1743:403::-;1821:12;1880:5;1854:10;:22;1865:10;1854:22;;;;;;;;;;;;;;;;:31;;1846:40;;;;;;1925:5;1899:10;:22;1910:10;1899:22;;;;;;;;;;;;;;;;:31;;;;;;;;;;;1950:2;:9;1941:18;;;;;;;;;1975:9;1970:147;1994:2;:9;1990:1;:13;1970:147;;;2046:5;2025:10;:17;2036:2;2039:1;2036:5;;;;;;;;;;;;;;2025:17;;;;;;;;;;;;;;;;:26;;;;;;;;;;;2092:2;2095:1;2092:5;;;;;;;;;;;;;;2071:34;;2080:10;2071:34;;;2099:5;2071:34;;;;;;;;;;;;;;;;;;2005:3;;;;;;;1970:147;;;;2134:4;2127:11;;1743:403;;;;:::o;4887:24::-;;;;;;;;;;;;;:::o;3090:213::-;3135:12;3177:10;:22;3188:10;3177:22;;;;;;;;;;;;;;;;3168:5;:31;;3160:40;;;;;;3226:5;3211:11;;:20;;;;;;;;;;;3268:5;3242:10;:22;3253:10;3242:22;;;;;;;;;;;;;;;;:31;;;;;;;;;;;3291:4;3284:11;;3090:213;;;:::o;4692:34::-;;;;;;;;;;;;;:::o;14568:1120::-;14620:7;14629;14638;14647;14667:14;14684:15;:13;:15::i;:::-;14667:32;;14710:19;14732:9;:21;14742:10;14732:21;;;;;;;;;;;;;;;:33;;;14710:55;;14776:20;14799:9;:21;14809:10;14799:21;;;;;;;;;;;;;;;:34;;;14776:57;;14844:21;14868:9;:21;14878:10;14868:21;;;;;;;;;;;;;;;:35;;;14844:59;;14934:1;14920:11;:15;14916:191;;;14973:11;14952:17;;:32;;;;;;;;;;;15035:1;14999:9;:21;15009:10;14999:21;;;;;;;;;;;;;;;:33;;:37;;;;15051:10;;;;;;;;;;;:19;;;15071:10;15083:11;15051:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14916:191;15138:1;15123:12;:16;15119:197;;;15178:12;15156:18;;:34;;;;;;;;;;;15242:1;15205:9;:21;15215:10;15205:21;;;;;;;;;;;;;;;:34;;:38;;;;15258:11;;;;;;;;;;;:20;;;15279:10;15291:12;15258:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15119:197;15348:1;15332:13;:17;15328:203;;;15389:13;15366:19;;:36;;;;;;;;;;;15455:1;15417:9;:21;15427:10;15417:21;;;;;;;;;;;;;;;:35;;:39;;;;15471:12;;;;;;;;;;;:21;;;15493:10;15505:13;15471:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15328:203;15557:10;15548:62;;;15569:11;15582:12;15596:13;15548:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15631:6;15639:11;15652:12;15666:13;15623:57;;;;;;;;;;;;14568:1120;;;;:::o;8897:184::-;8938:4;8959:21;:19;:21::i;:::-;8955:96;;;8997:16;:14;:16::i;:::-;9035:4;9028:11;;;;8955:96;9068:5;9061:12;;8897:184;;:::o;14186:374::-;14227:7;14255:22;14266:10;14255;:22::i;:::-;14247:31;;;;;;14291:15;:13;:15::i;:::-;;14319:14;14336:24;14349:10;14336:12;:24::i;:::-;14319:41;;14384:1;14375:6;:10;14371:53;;;14400:24;14405:10;14417:6;14400:4;:24::i;:::-;14371:53;14471:12;;14435:9;:21;14445:10;14435:21;;;;;;;;;;;;;;;:33;;:48;;;;14507:10;14499:27;;;14519:6;14499:27;;;;;;;;;;;;;;;;;;14546:6;14539:13;;;14186:374;:::o;4406:32::-;;;;:::o;8187:297::-;8241:7;8298:1;8265:35;;8273:12;;;;;;;;;;;8265:35;;;8261:62;;;8322:1;8315:8;;;;8261:62;8370:1;8341:12;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:30;:90;;8430:1;8341:90;;;8401:12;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8374:24;8385:12;;;;;;;;;;;8374:10;:24::i;:::-;:53;;;;;;8341:90;8334:97;;8187:297;;:::o;4639:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1257:117::-;1314:13;1347:10;:19;1358:7;1347:19;;;;;;;;;;;;;;;;1340:26;;1257:117;;;:::o;4918:25::-;;;;;;;;;;;;;:::o;4779:26::-;;;;:::o;4484:33::-;;;;:::o;4282:42::-;;;;:::o;7887:292::-;7940:7;7996:1;7964:34;;7972:11;;;;;;;;;;;7964:34;;;7960:61;;;8020:1;8013:8;;;;7960:61;8067:1;8039:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:29;:87;;8125:1;8039:87;;;8097:11;;;;;;;;;;;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8071:23;8082:11;;;;;;;;;;;8071:10;:23::i;:::-;:51;;;;;;8039:87;8032:94;;7887:292;;:::o;5775:172::-;5871:1;5839:34;;5847:11;;;;;;;;;;;5839:34;;;5831:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5933:5;5912:11;;:27;;;;;;;;;;;;;;;;;;5775:172;:::o;6303:233::-;3483:6;;;;;;;;;;;3469:20;;:10;:20;;;3465:40;;;6396:10:::1;6388:5;:18;6380:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;6451:15;:13;:15::i;:::-;;6487:5;6477:7;:15;;;;6508:20;6522:5;6508:20;;;;;;;;;;;;;;;;;;3465:40:::0;6303:233;:::o;5955:175::-;6053:1;6020:35;;6028:12;;;;;;;;;;;6020:35;;;6012:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6116:5;6094:12;;:28;;;;;;;;;;;;;;;;;;5955:175;:::o;6818:207::-;6887:7;6918:12;;6911:3;:19;6907:62;;6952:17;;6945:24;;;;6907:62;6987:7;6995:3;6987:12;;;;;;;;;;:30;;;6980:37;;6818:207;;;;:::o;893:38::-;;;;;;;;;;;;;;;;;;;:::o;4605:27::-;;;;:::o;4373:26::-;;;;:::o;7678:201::-;7741:7;7772:12;;7765:3;:19;7761:68;;7806:23;:21;:23::i;:::-;7799:30;;;;7761:68;7847:7;7855:3;7847:12;;;;;;;;;;:24;;;7840:31;;7678:201;;;;:::o;4565:33::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1382:353::-;1443:12;1502:5;1476:10;:22;1487:10;1476:22;;;;;;;;;;;;;;;;:31;;1468:40;;;;;;1547:5;1521:10;:22;1532:10;1521:22;;;;;;;;;;;;;;;;:31;;;;;;;;;;;1614:5;1596:10;:14;1607:2;1596:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;1695:2;1674:31;;1683:10;1674:31;;;1699:5;1674:31;;;;;;;;;;;;;;;;;;1723:4;1716:11;;1382:353;;;;:::o;4524:34::-;;;;:::o;4812:66::-;;;;;;;;;;;;;;;;;:::o;17339:244::-;3483:6;;;;;;;;;;;3469:20;;:10;:20;;;3465:40;;;17440:6:::1;17425:11;;:21;;17417:52;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;17500:6;17482:10;:14:::0;17493:2:::1;17482:14;;;;;;;;;;;;;;;;:24;;;;;;;;;;;17532:6;17517:11;;:21;;;;;;;;;;;17564:2;17554:21;;;17568:6;17554:21;;;;;;;;;;;;;;;;;;3465:40:::0;17339:244;;:::o;783:46::-;;;;;;;;;;;;;;;;;:::o;8492:397::-;8557:12;8571:10;8604:6;8598:3;:12;8594:86;;;8663:1;8666;8655:13;;;;;;8594:86;8767:1;8730:32;8758:3;8730:27;:32::i;:::-;8696:31;8723:3;8696:26;:31::i;:::-;:66;8695:73;;:94;;8775:14;8785:3;8775:9;:14::i;:::-;8695:94;;;8771:1;8695:94;8690:99;;8841:1;8807:30;8833:3;8807:25;:30::i;:::-;:35;;:74;;3797:6;8859:2;8849:7;:12;:32;8807:74;;;8845:1;8807:74;8800:81;;8492:397;;;;:::o;11149:1156::-;11208:7;11233:9;:17;11243:6;11233:17;;;;;;;;;;;;;;;:29;;;;;;;;;;;;11232:30;:53;;;;11267:18;11278:6;11267:10;:18::i;:::-;11266:19;11232:53;11228:80;;;11307:1;11300:8;;;;11228:80;11321:14;11357:9;11369;:17;11379:6;11369:17;;;;;;;;;;;;;;;:29;;;11357:41;;11352:920;11405:12;;11400:1;:17;11352:920;;11440:19;11461:17;11482:24;11504:1;11482:21;:24::i;:::-;11439:67;;;;11521:18;11542:21;11561:1;11542:18;:21::i;:::-;11521:42;;11578:19;11600:22;11620:1;11600:19;:22::i;:::-;11578:44;;11637:25;11724:30;11752:1;11724:27;:30::i;:::-;11710:11;:44;11678:29;11705:1;11678:26;:29::i;:::-;11665:10;:42;:89;11637:117;;11769:24;11856:9;:17;11866:6;11856:17;;;;;;;;;;;;;;;:31;;;11842:11;:45;11809:9;:17;11819:6;11809:17;;;;;;;;;;;;;;;:30;;;11796:10;:43;:91;11769:118;;11940:1;11908:9;:17;11918:6;11908:17;;;;;;;;;;;;;;;:29;;;:33;11904:190;;;12087:7;12073:11;12042:28;12068:1;12042:25;:28::i;:::-;12010:9;:17;12020:6;12010:17;;;;;;;;;;;;;;;:29;;;11990:17;12005:1;11990:14;:17::i;:::-;11970;11985:1;11970:14;:17::i;:::-;:37;:69;:100;;;;;;:114;:124;;;;;;11960:134;;;;11904:190;12132:1;12113:16;:20;12109:151;;;12253:7;12241:9;12221:17;12202:16;12182:17;12197:1;12182:14;:17::i;:::-;12162;12177:1;12162:14;:17::i;:::-;:37;:56;:76;;;;;;:88;:98;;;;;;12152:108;;;;12109:151;11352:920;;;;;;11419:3;;;;;;;11352:920;;;;12291:6;12284:13;;;11149:1156;;;;:::o;4733:39::-;;;;:::o;4331:35::-;;;;:::o;2154:134::-;2226:7;2253:11;:18;2265:5;2253:18;;;;;;;;;;;;;;;:27;2272:7;2253:27;;;;;;;;;;;;;;;;2246:34;;2154:134;;;;:::o;6544:121::-;6589:7;3744:2;6616:41;;6632:11;;6617:12;:26;6616:41;;;;;;6609:48;;6544:121;:::o;3343:21::-;;;;;;;;;;;;;:::o;7033:210::-;7103:7;7134:12;;7127:3;:19;7123:63;;7168:18;;7161:25;;;;7123:63;7204:7;7212:3;7204:12;;;;;;;;;;:31;;;7197:38;;7033:210;;;;:::o;4950:26::-;;;;;;;;;;;;;:::o;5598:169::-;5692:1;5661:33;;5669:10;;;;;;;;;;;5661:33;;;5653:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5753:5;5733:10;;:26;;;;;;;;;;;;;;;;;;5598:169;:::o;3521:126::-;3483:6;;;;;;;;;;;3469:20;;:10;:20;;;3465:40;;;3618:1:::1;3598:22;;:8;:22;;;3594:45;;3631:8;3622:6;;:17;;;;;;;;;;;;;;;;;;3594:45;3465:40:::0;3521:126;:::o;13989:189::-;14046:4;14169:1;14135:9;:17;14145:6;14135:17;;;;;;;;;;;;;;;:31;;;14102:9;:17;14112:6;14102:17;;;;;;;;;;;;;;;:30;;;14070:9;:17;14080:6;14070:17;;;;;;;;;;;;;;;:29;;;:62;:96;:100;14063:107;;13989:189;;;:::o;16487:159::-;16542:7;16632:4;16579:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16569:69;;;;;;16562:76;;16487:159;;;:::o;16232:247::-;16313:7;16333;16351:9;16371;16405:19;16420:3;16405:14;:19::i;:::-;16393:31;;;;;;;;;;;;16444:27;16454:7;16463:1;16466;16469;16444:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16437:34;;;;;16232:247;;;;:::o;9089:1154::-;9199:18;9220:14;:12;:14::i;:::-;9199:35;;9264:6;9251:10;:19;9247:107;;;9300:6;9287:19;;9338:4;9321:14;;:21;;;;;;;;;;;;;;;;;;9247:107;9366:18;9387:22;:20;:22::i;:::-;9366:43;;9420:19;9442:23;:21;:23::i;:::-;9420:45;;9520:17;;9478:7;9486:12;;9478:21;;;;;;;;;;:39;;:59;;;;9591:18;;9548:7;9556:12;;9548:21;;;;;;;;;;:40;;:61;;;;9664:19;;9620:7;9628:12;;9620:21;;;;;;;;;;:41;;:63;;;;9729:10;9694:7;9702:12;;9694:21;;;;;;;;;;:32;;:45;;;;9786:11;9750:7;9758:12;;9750:21;;;;;;;;;;:33;;:47;;;;9857:17;;9844:10;:30;9808:7;9816:12;;9808:21;;;;;;;;;;:33;;:66;;;;9921:12;;9885:7;9893:12;;9885:21;;;;;;;;;;:33;;:48;;;;9975:7;;9944;9952:12;;9944:21;;;;;;;;;;:28;;:38;;;;10057:17;;10044:10;:30;10038:2;10023:12;;:17;;;;;;:52;9995:24;;:80;;;;;;;;;;;10142:17;;10129:10;:30;10123:2;10108:12;;:17;;;;;;:52;10093:11;;:67;;;;;;;;;;;10180:12;;:14;;;;;;;;;;;;;10225:10;10205:17;:30;;;;9089:1154;;;:::o;2912:170::-;2988:5;2973:11;;:20;;;;;;;;;;;3022:5;3004:10;:14;3015:2;3004:14;;;;;;;;;;;;;;;;:23;;;;;;;;;;;3064:2;3043:31;;3060:1;3043:31;;;3068:5;3043:31;;;;;;;;;;;;;;;;;;2912:170;;:::o;10251:259::-;10308:7;10329:16;10347;10365:25;10394:5;:17;;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10328:85;;;;;;10457:4;10431:31;;:5;:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:31;;;:71;;10493:8;10485:17;;10431:71;;;10473:8;10465:17;;10431:71;10424:78;;;;;10251:259;;;:::o;10956:185::-;11011:7;11042:12;;11035:3;:19;11031:66;;11078:7;;11071:14;;;;11031:66;11114:7;11122:3;11114:12;;;;;;;;;;:19;;;11107:26;;10956:185;;;;:::o;10518:222::-;10578:7;10609:12;;10602:3;:19;10598:93;;10662:17;;10645:14;:12;:14::i;:::-;:34;10638:41;;;;10598:93;10708:7;10716:3;10708:12;;;;;;;;;;:24;;;10701:31;;10518:222;;;;:::o;10748:200::-;10808:7;10839:12;;10832:3;:19;10828:71;;10875:12;;10868:19;;;;10828:71;10916:7;10924:3;10916:12;;;;;;;;;;:24;;;10909:31;;10748:200;;;;:::o;15696:528::-;15761:5;15768:7;15777;15819:2;15805:3;:10;:16;15797:25;;;;;;15835:9;15855;15875:7;15995:2;15990:3;15986:12;15980:19;15975:24;;16065:2;16060:3;16056:12;16050:19;16045:24;;16172:2;16167:3;16163:12;16157:19;16154:1;16149:28;16144:33;;16208:1;16211;16214;16200:16;;;;;;;;;15696:528;;;;;:::o

Swarm Source

ipfs://283f373135a86e7f3536383df06a142e62a710435ddc6c9aec8bb88f0e48d700
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.