false
true
0

Contract Address Details

0x3d64a54d3B4cE39225B4182e30f8a48dD72DE2Ce

Token
Test53 (T53)
Creator
0xe5b848–58b136 at 0x64c6ae–3cb7ba
Balance
0 PLS ( )
Tokens
Fetching tokens...
Transactions
0 Transactions
Transfers
0 Transfers
Gas Used
Fetching gas used...
Last Balance Update
26553003
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
T53




Optimization enabled
false
Compiler version
v0.8.19+commit.7dd6d404




EVM Version
default




Verified at
2023-10-17T19:31:59.241775Z

Contract source code

// SPDX-License-Identifier: MIT


pragma solidity 0.8.19;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

/**
 * BEP20 standard interface.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function getOwner() external view returns (address);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

abstract contract Auth {
    address internal owner;
    mapping (address => bool) internal authorizations;

    constructor(address _owner) {
        owner = _owner;
        authorizations[_owner] = true;
    }

    modifier onlyOwner() {
        require(isOwner(msg.sender), "!OWNER"); _;
    }

    modifier authorized() {
        require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
    }

    function authorize(address adr) public onlyOwner {
        authorizations[adr] = true;
    }

    function unauthorize(address adr) public onlyOwner {
        authorizations[adr] = false;
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    function isAuthorized(address adr) public view returns (bool) {
        return authorizations[adr];
    }

    function transferOwnership(address payable adr) public onlyOwner {
        owner = adr;
        authorizations[adr] = true;
        emit OwnershipTransferred(adr);
    }

    event OwnershipTransferred(address owner);
}

interface IDEXFactory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IDEXRouter {
    function factory() external pure returns (address);
    function WPLS() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IDividendDistributor {
    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
    function setShare(address shareholder, uint256 amount) external;
    function deposit() external payable;
    function process(uint256 gas) external;
}

contract DividendDistributor is IDividendDistributor {
    using SafeMath for uint256;

    address _token;

    struct Share {
        uint256 amount;
        uint256 totalExcluded;
        uint256 totalRealised;
    }

    IERC20 RWRD = RWRD;
    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    IDEXRouter router;

    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;

    mapping (address => Share) public shares;

    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 public dividendsPerShare;
    uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
 
    uint256 public minPeriod = 1 * 60;

    // minDistribution is the minimum amount that can be distributed in a single transaction.
    uint256 public minDistribution = 1 * (10 ** 5);

    uint256 currentIndex;

    bool initialized;
    modifier initialization() {
        require(!initialized);
        _;
        initialized = true;
    }

    modifier onlyToken() {
        require(msg.sender == _token); _;
    }

    constructor (address _router) {
        router = _router != address(0)
            ? IDEXRouter(_router)
            : IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        _token = msg.sender;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
    }

    function setShare(address shareholder, uint256 amount) external override onlyToken {
        if(shares[shareholder].amount > 0){
            distributeDividend(shareholder);
        }

        if(amount > 0 && shares[shareholder].amount == 0){
            addShareholder(shareholder);
        }else if(amount == 0 && shares[shareholder].amount > 0){
            removeShareholder(shareholder);
        }

        totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
        shares[shareholder].amount = amount;
        shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
    }

    function deposit() external payable override onlyToken {
        uint256 balanceBefore = RWRD.balanceOf(address(this));

        address[] memory path = new address[](2);
        path[0] = WPLS;
        path[1] = address(RWRD);

        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: msg.value}(
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amount = RWRD.balanceOf(address(this)).sub(balanceBefore);

        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) external override onlyToken {
        uint256 shareholderCount = shareholders.length;

        if(shareholderCount == 0) { return; }

        uint256 gasUsed = 0;
        uint256 gasLeft = gasleft();

        uint256 iterations = 0;

        while(gasUsed < gas && iterations < shareholderCount) {
            if(currentIndex >= shareholderCount){
                currentIndex = 0;
            }

            if(shouldDistribute(shareholders[currentIndex])){
                distributeDividend(shareholders[currentIndex]);
            }

            gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
            gasLeft = gasleft();
            currentIndex++;
            iterations++;
        }
    }
   
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }

        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            RWRD.transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
        }
    }
   
    function claimDividend() external {
        distributeDividend(msg.sender);
    }

    function getUnpaidEarnings(address shareholder) public view returns (uint256) {
        if(shares[shareholder].amount == 0){ return 0; }

        uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
        uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;

        if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }

        return shareholderTotalDividends.sub(shareholderTotalExcluded);
    }

    function getCumulativeDividends(uint256 share) internal view returns (uint256) {
        return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
    }

    function addShareholder(address shareholder) internal {
        shareholderIndexes[shareholder] = shareholders.length;
        shareholders.push(shareholder);
    }

    function removeShareholder(address shareholder) internal {
        shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
        shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
        shareholders.pop();
    }

}

contract T53 is IERC20, Auth {
    using SafeMath for uint256;

    address WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
    address DEAD = 0x000000000000000000000000000000000000dEaD;
    address ZERO = 0x0000000000000000000000000000000000000000;

    string constant _name = "Test53";
    string constant _symbol = "T53";
    uint8 constant _decimals = 9;

    uint256 _totalSupply = 200000000000 * 10**_decimals;

    uint256 public _maxTxAmount = _totalSupply;

    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) _allowances;

    mapping (address => bool) isFeeExempt;
    mapping (address => bool) isTxLimitExempt;
    mapping (address => bool) isTimelockExempt;
    mapping (address => bool) isDividendExempt;
    mapping (address => bool) isRWRDaddress;

    uint256 public liquidityFee    = 0; 
    uint256 public burnFee         = 0; 
    uint256 public reflectionFee   = 8000; 
    uint256 public totalFee        = burnFee + liquidityFee + reflectionFee;
    uint256 public feeDenominator  = 100000; // Using larger denominator for lower fees

    address public autoLiquidityReceiver;

    address public RWRDaddress;

    uint256 targetLiquidity = 20;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    IDEXRouter public router2;
    address public pair2;

    DividendDistributor public distributor;
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = 112471 * 10**_decimals; // 112471

    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }



function setRWRDaddress(address RWRDaddressNew) external authorized() {
    require(RWRDaddressNew != address(0), "Invalid address");
    RWRDaddress = RWRDaddressNew;
}

    constructor() Auth(msg.sender)  {
        router = IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        //pair = IDEXFactory(router.factory()).createPair(WPLS, address(this));
        _allowances[address(this)][address(router)] = type(uint256).max;

        router2 = IDEXRouter(0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02);
        //pair2 = IDEXFactory(router2.factory()).createPair(WPLS, address(this));
        _allowances[address(this)][address(router2)] = type(uint256).max;

        distributor = new DividendDistributor(address(router));

        isFeeExempt[msg.sender] = true;
        isTxLimitExempt[msg.sender] = true;

        isTimelockExempt[msg.sender] = true;
        isTimelockExempt[DEAD] = true;
        isTimelockExempt[address(this)] = true;

        isDividendExempt[pair] = true;
        isDividendExempt[address(this)] = true;
        isDividendExempt[DEAD] = true;

        RWRDaddress = msg.sender;
        RWRDaddress = address(this);


        autoLiquidityReceiver = msg.sender;

        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }

    receive() external payable { }

    function totalSupply() external view override returns (uint256) { return _totalSupply; }
    function decimals() external pure override returns (uint8) { return _decimals; }
    function symbol() external pure override returns (string memory) { return _symbol; }
    function name() external pure override returns (string memory) { return _name; }
    function getOwner() external view override returns (address) { return owner; }
    function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
    function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }

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

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if(_allowances[sender][msg.sender] != type(uint256).max){
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
        }

        return _transferFrom(sender, recipient, amount);
    }

    function setMaxTxPercent_base1000(uint256 maxTXPercentage_base1000) external onlyOwner() {
        _maxTxAmount = (_totalSupply * maxTXPercentage_base1000 ) / 1000;
    }

    function setTxLimit(uint256 amount) external authorized {
        _maxTxAmount = amount;
    }


    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        if(inSwap){ return _basicTransfer(sender, recipient, amount); }
       
        // Checks max transaction limit
        checkTxLimit(sender, amount);
        uint256 amountReceived;
        address routerAddress = address(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
        address routerAddress2 = address(0x98bf93ebf5c380C0e6Ae8e192A7e2AE08edAcc02);
        if(sender == pair || recipient == pair || sender == address(router) || recipient == address(router) || 
        recipient == routerAddress || sender == routerAddress ||
         recipient == routerAddress2 || sender == routerAddress2 || sender == address(router2) || recipient == address(router2) || 
         sender == pair2 || recipient == pair2 ){
                if(shouldSwapBack()){ swapBack(); }
               
                //Exchange tokens
           
                _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

                amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount;
                _balances[recipient] = _balances[recipient].add(amountReceived);
        }else{
               
                //Exchange tokens
           
                _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

                amountReceived = amount;
                _balances[recipient] = _balances[recipient].add(amountReceived);
       
        }
       

        // Dividend tracker
        if(!isDividendExempt[sender]) {
            try distributor.setShare(sender, _balances[sender]) {} catch {}
        }

        if(!isDividendExempt[recipient]) {
            try distributor.setShare(recipient, _balances[recipient]) {} catch {} 
        }

        try distributor.process(distributorGas) {} catch {}

        emit Transfer(sender, recipient, amountReceived);
        return true;
    }
   
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
        return true;
    }

    function checkTxLimit(address sender, uint256 amount) internal view {
        require(amount <= _maxTxAmount || isTxLimitExempt[sender], "TX Limit Exceeded");
    }

    function shouldTakeFee(address sender) internal view returns (bool) {
        return !isFeeExempt[sender];
    }

    function takeFee(address sender, uint256 amount) internal returns (uint256) {
       
        uint256 feeAmount = amount.mul(totalFee.sub(burnFee)).div(feeDenominator);
        uint256 burnAmount = amount.mul(burnFee).div(feeDenominator);

        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        _balances[DEAD] = _balances[DEAD].add(burnAmount);
        emit Transfer(sender, address(this), feeAmount);
        emit Transfer(sender, DEAD, burnAmount);

        return amount.sub(feeAmount.add(burnAmount));
    }

    function shouldSwapBack() internal view returns (bool) {
        return msg.sender != pair
        && !inSwap
        && swapEnabled
        && _balances[address(this)] >= swapThreshold;
    }

    function swapBack() internal swapping {
        uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
        uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
        uint256 amountToSwap = swapThreshold.sub(amountToLiquify);

        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WPLS;

        uint256 balanceBefore = address(this).balance;

        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 amountPLS = address(this).balance.sub(balanceBefore);

        uint256 totalPLSFee = totalFee.sub(dynamicLiquidityFee.div(2));
       
        uint256 amountPLSLiquidity = amountPLS.mul(dynamicLiquidityFee).div(totalPLSFee).div(2);
        uint256 amountPLSReflection = amountPLS.mul(reflectionFee).div(totalPLSFee);

        try distributor.deposit{value: amountPLSReflection}() {} catch {}

        if(amountToLiquify > 0){
            router.addLiquidityETH{value: amountPLSLiquidity}(
                address(this),
                amountToLiquify,
                0,
                0,
                autoLiquidityReceiver,
                block.timestamp
            );
            emit AutoLiquify(amountPLSLiquidity, amountToLiquify);
        }
    }

    function setIsDividendExempt(address holder, bool exempt) external authorized {
        require(holder != address(this) && holder != pair);
        isDividendExempt[holder] = exempt;
        if(exempt){
            distributor.setShare(holder, 0);
        }else{
            distributor.setShare(holder, _balances[holder]);
        }
    }

    function setIsFeeExempt(address holder, bool exempt) external authorized {
        isFeeExempt[holder] = exempt;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external authorized {
        isTxLimitExempt[holder] = exempt;
    }

    function setIsTimelockExempt(address holder, bool exempt) external authorized {
        isTimelockExempt[holder] = exempt;
    }

    function setFees(uint256 _liquidityFee, uint256 _reflectionFee, uint256 _burnFee, uint256 _feeDenominator) external authorized {
        liquidityFee = _liquidityFee;
        reflectionFee = _reflectionFee;
        burnFee = _burnFee;
        feeDenominator = _feeDenominator;
   
        totalFee = _liquidityFee.add(_reflectionFee).add(_burnFee);

        uint256 maxTotalFee = _feeDenominator * 5 / 100;

        require(totalFee <= maxTotalFee, "Total fees are too high!");
    }

    function setFeeReceivers(address _autoLiquidityReceiver) external authorized {
        autoLiquidityReceiver = _autoLiquidityReceiver;
    }
   
    function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
        swapEnabled = _enabled;
        swapThreshold = _amount;
    }

    function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
        targetLiquidity = _target;
        targetLiquidityDenominator = _denominator;
    }

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
        distributor.setDistributionCriteria(_minPeriod, _minDistribution);
    }

    function setDistributorSettings(uint256 gas) external authorized {
        require(gas < 750000);
        distributorGas = gas;
    }
   
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
    }

    function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
        return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
    }

    function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
        return getLiquidityBacking(accuracy) > target;
    }
         
event AutoLiquify(uint256 amountPLS, uint256 amountBOG);

}
        

Contract ABI

[{"type":"constructor","stateMutability":"nonpayable","inputs":[]},{"type":"event","name":"Approval","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":true},{"type":"address","name":"spender","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"AutoLiquify","inputs":[{"type":"uint256","name":"amountPLS","internalType":"uint256","indexed":false},{"type":"uint256","name":"amountBOG","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"type":"address","name":"owner","internalType":"address","indexed":false}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"type":"address","name":"from","internalType":"address","indexed":true},{"type":"address","name":"to","internalType":"address","indexed":true},{"type":"uint256","name":"value","internalType":"uint256","indexed":false}],"anonymous":false},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"RWRDaddress","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"_maxTxAmount","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"allowance","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approve","inputs":[{"type":"address","name":"spender","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"approveMax","inputs":[{"type":"address","name":"spender","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"authorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"autoLiquidityReceiver","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"balanceOf","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"burnFee","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"uint8","name":"","internalType":"uint8"}],"name":"decimals","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract DividendDistributor"}],"name":"distributor","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"feeDenominator","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getCirculatingSupply","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"getLiquidityBacking","inputs":[{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"getOwner","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isAuthorized","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOverLiquified","inputs":[{"type":"uint256","name":"target","internalType":"uint256"},{"type":"uint256","name":"accuracy","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"isOwner","inputs":[{"type":"address","name":"account","internalType":"address"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"liquidityFee","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"name","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"address"}],"name":"pair2","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"reflectionFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"address","name":"","internalType":"contract IDEXRouter"}],"name":"router2","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributionCriteria","inputs":[{"type":"uint256","name":"_minPeriod","internalType":"uint256"},{"type":"uint256","name":"_minDistribution","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setDistributorSettings","inputs":[{"type":"uint256","name":"gas","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFeeReceivers","inputs":[{"type":"address","name":"_autoLiquidityReceiver","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setFees","inputs":[{"type":"uint256","name":"_liquidityFee","internalType":"uint256"},{"type":"uint256","name":"_reflectionFee","internalType":"uint256"},{"type":"uint256","name":"_burnFee","internalType":"uint256"},{"type":"uint256","name":"_feeDenominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsDividendExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsFeeExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTimelockExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setIsTxLimitExempt","inputs":[{"type":"address","name":"holder","internalType":"address"},{"type":"bool","name":"exempt","internalType":"bool"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setMaxTxPercent_base1000","inputs":[{"type":"uint256","name":"maxTXPercentage_base1000","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setRWRDaddress","inputs":[{"type":"address","name":"RWRDaddressNew","internalType":"address"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setSwapBackSettings","inputs":[{"type":"bool","name":"_enabled","internalType":"bool"},{"type":"uint256","name":"_amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTargetLiquidity","inputs":[{"type":"uint256","name":"_target","internalType":"uint256"},{"type":"uint256","name":"_denominator","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"setTxLimit","inputs":[{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"view","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"swapEnabled","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"swapThreshold","inputs":[]},{"type":"function","stateMutability":"pure","outputs":[{"type":"string","name":"","internalType":"string"}],"name":"symbol","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalFee","inputs":[]},{"type":"function","stateMutability":"view","outputs":[{"type":"uint256","name":"","internalType":"uint256"}],"name":"totalSupply","inputs":[]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transfer","inputs":[{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[{"type":"bool","name":"","internalType":"bool"}],"name":"transferFrom","inputs":[{"type":"address","name":"sender","internalType":"address"},{"type":"address","name":"recipient","internalType":"address"},{"type":"uint256","name":"amount","internalType":"uint256"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"transferOwnership","inputs":[{"type":"address","name":"adr","internalType":"address payable"}]},{"type":"function","stateMutability":"nonpayable","outputs":[],"name":"unauthorize","inputs":[{"type":"address","name":"adr","internalType":"address"}]},{"type":"receive","stateMutability":"payable"}]
              

Contract Creation Code

Verify & Publish
0x608060405273a1077a294dde1b09bb078844df40758a5d0f9a27600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506009600a620000ee919062000b4c565b642e90edd00062000100919062000b9d565b6005556005546006556000600e556000600f55611f40601055601054600e54600f546200012e919062000be8565b6200013a919062000be8565b601155620186a0601255601460155560646016556207a120601c556001601d60006101000a81548160ff0219169083151502179055506009600a62000180919062000b4c565b6201b75762000190919062000b9d565b601e55348015620001a057600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505073165c3410fc91ef562c50559f7d2289febed552d9601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200049b90620009a4565b620004a7919062000c68565b604051809103906000f080158015620004c4573d6000803e3d6000fd5b50601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555033601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555030601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600554600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60055460405162000996919062000c96565b60405180910390a362000cb3565b611fec80620050b583390190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000a405780860481111562000a185762000a17620009b2565b5b600185161562000a285780820291505b808102905062000a3885620009e1565b9450620009f8565b94509492505050565b60008262000a5b576001905062000b2e565b8162000a6b576000905062000b2e565b816001811462000a84576002811462000a8f5762000ac5565b600191505062000b2e565b60ff84111562000aa45762000aa3620009b2565b5b8360020a91508482111562000abe5762000abd620009b2565b5b5062000b2e565b5060208310610133831016604e8410600b841016171562000aff5782820a90508381111562000af95762000af8620009b2565b5b62000b2e565b62000b0e8484846001620009ee565b9250905081840481111562000b285762000b27620009b2565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000b598262000b35565b915062000b668362000b3f565b925062000b957fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000a49565b905092915050565b600062000baa8262000b35565b915062000bb78362000b35565b925082820262000bc78162000b35565b9150828204841483151762000be15762000be0620009b2565b5b5092915050565b600062000bf58262000b35565b915062000c028362000b35565b925082820190508082111562000c1d5762000c1c620009b2565b5b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c508262000c23565b9050919050565b62000c628162000c43565b82525050565b600060208201905062000c7f600083018462000c57565b92915050565b62000c908162000b35565b82525050565b600060208201905062000cad600083018462000c85565b92915050565b6143f28062000cc36000396000f3fe60806040526004361061028c5760003560e01c806383ad79941161015a578063d51ed1c8116100c1578063f2fde38b1161007a578063f2fde38b14610a03578063f708a64f14610a2c578063f84ba65d14610a55578063f887ea4014610a7e578063fce589d814610aa9578063fe9fbb8014610ad457610293565b8063d51ed1c8146108e3578063dd62ed3e14610920578063df20fd491461095d578063e01bb68814610986578063e5f1ea9a146109af578063f0b37c04146109da57610293565b8063a8aa1b3111610113578063a8aa1b31146107d3578063a9059cbb146107fe578063b6a5d7de1461083b578063bd9ab53714610864578063bfe109281461088d578063ca33e64c146108b857610293565b806383ad7994146106d5578063893d20e81461070057806392321e041461072b57806395d89b411461075457806398118cb41461077f5780639d1944f5146107aa57610293565b80632f54bf6e116101fe5780636ddd1713116101b75780636ddd1713146105c35780636fcba377146105ee57806370a0823114610617578063762816d614610654578063763014c71461067f5780637d1db4a5146106aa57610293565b80632f54bf6e146104a3578063313ce567146104e057806350db71fb1461050b578063571ac8b0146105345780635c85974f14610571578063658d4b7f1461059a57610293565b806318160ddd1161025057806318160ddd146103935780631df4ccfc146103be578063201e7991146103e957806323b872dd146104125780632b112e491461044f5780632d48e8961461047a57610293565b80630445b6671461029857806306fdde03146102c3578063095ea7b3146102ee5780631161ae391461032b578063180b0d7e1461036857610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b11565b6040516102ba91906136a4565b60405180910390f35b3480156102cf57600080fd5b506102d8610b17565b6040516102e5919061374f565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190613800565b610b54565b604051610322919061385b565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190613876565b610c46565b60405161035f919061385b565b60405180910390f35b34801561037457600080fd5b5061037d610c5b565b60405161038a91906136a4565b60405180910390f35b34801561039f57600080fd5b506103a8610c61565b6040516103b591906136a4565b60405180910390f35b3480156103ca57600080fd5b506103d3610c6b565b6040516103e091906136a4565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613876565b610c71565b005b34801561041e57600080fd5b50610439600480360381019061043491906138b6565b610ccb565b604051610446919061385b565b60405180910390f35b34801561045b57600080fd5b50610464610ecb565b60405161047191906136a4565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613876565b610f4d565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613909565b611028565b6040516104d7919061385b565b60405180910390f35b3480156104ec57600080fd5b506104f5611081565b6040516105029190613952565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190613999565b61108a565b005b34801561054057600080fd5b5061055b60048036038101906105569190613909565b61112d565b604051610568919061385b565b60405180910390f35b34801561057d57600080fd5b50610598600480360381019061059391906139d9565b611160565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613999565b6111b2565b005b3480156105cf57600080fd5b506105d8611255565b6040516105e5919061385b565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613a06565b611268565b005b34801561062357600080fd5b5061063e60048036038101906106399190613909565b611360565b60405161064b91906136a4565b60405180910390f35b34801561066057600080fd5b506106696113a9565b6040516106769190613acc565b60405180910390f35b34801561068b57600080fd5b506106946113cf565b6040516106a19190613af6565b60405180910390f35b3480156106b657600080fd5b506106bf6113f5565b6040516106cc91906136a4565b60405180910390f35b3480156106e157600080fd5b506106ea6113fb565b6040516106f791906136a4565b60405180910390f35b34801561070c57600080fd5b50610715611401565b6040516107229190613af6565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190613909565b61142a565b005b34801561076057600080fd5b50610769611525565b604051610776919061374f565b60405180910390f35b34801561078b57600080fd5b50610794611562565b6040516107a191906136a4565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc91906139d9565b611568565b005b3480156107df57600080fd5b506107e86115c9565b6040516107f59190613af6565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613800565b6115ef565b604051610832919061385b565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190613909565b611604565b005b34801561087057600080fd5b5061088b600480360381019061088691906139d9565b6116a6565b005b34801561089957600080fd5b506108a2611712565b6040516108af9190613b32565b60405180910390f35b3480156108c457600080fd5b506108cd611738565b6040516108da9190613af6565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906139d9565b61175e565b60405161091791906136a4565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613b4d565b6117d0565b60405161095491906136a4565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f9190613b8d565b611857565b005b34801561099257600080fd5b506109ad60048036038101906109a89190613909565b6118c4565b005b3480156109bb57600080fd5b506109c4611950565b6040516109d19190613af6565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190613909565b611976565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613c0b565b611a19565b005b348015610a3857600080fd5b50610a536004803603810190610a4e9190613999565b611b32565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613999565b611dd2565b005b348015610a8a57600080fd5b50610a93611e75565b604051610aa09190613acc565b60405180910390f35b348015610ab557600080fd5b50610abe611e9b565b604051610acb91906136a4565b60405180910390f35b348015610ae057600080fd5b50610afb6004803603810190610af69190613909565b611ea1565b604051610b08919061385b565b60405180910390f35b601e5481565b60606040518060400160405280600681526020017f5465737435330000000000000000000000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c3491906136a4565b60405180910390a36001905092915050565b600082610c528361175e565b11905092915050565b60125481565b6000600554905090565b60115481565b610c7a33611ea1565b610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb090613c84565b60405180910390fd5b81601581905550806016819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610eb757610e36826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610ec2848484611f5b565b90509392505050565b6000610f48610efb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611360565b610f3a610f29600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611360565b60055461298990919063ffffffff16565b61298990919063ffffffff16565b905090565b610f5633611ea1565b610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90613c84565b60405180910390fd5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610ff2929190613ca4565b600060405180830381600087803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61109333611ea1565b6110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990613c84565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611159827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b54565b9050919050565b61116933611ea1565b6111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90613c84565b60405180910390fd5b8060068190555050565b6111bb33611ea1565b6111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613c84565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900460ff1681565b61127133611ea1565b6112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613c84565b60405180910390fd5b83600e819055508260108190555081600f81905550806012819055506112f1826112e385876129d390919063ffffffff16565b6129d390919063ffffffff16565b601181905550600060646005836113089190613cfc565b6113129190613d6d565b9050806011541115611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613dea565b60405180910390fd5b5050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61143333611ea1565b611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146990613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613e56565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600381526020017f5435330000000000000000000000000000000000000000000000000000000000815250905090565b600e5481565b61157133611ea1565b6115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790613c84565b60405180910390fd5b620b71b081106115bf57600080fd5b80601c8190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115fc338484611f5b565b905092915050565b61160d33611028565b61164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390613ec2565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116af33611028565b6116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613ec2565b60405180910390fd5b6103e8816005546116ff9190613cfc565b6117099190613d6d565b60068190555050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117c961176b610ecb565b6117bb6117ac600261179e601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611360565b612a3190919063ffffffff16565b85612a3190919063ffffffff16565b612aab90919063ffffffff16565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61186033611ea1565b61189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189690613c84565b60405180910390fd5b81601d60006101000a81548160ff02191690831515021790555080601e819055505050565b6118cd33611ea1565b61190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613c84565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61197f33611028565b6119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590613ec2565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a2233611028565b611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890613ec2565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611b279190613f03565b60405180910390a150565b611b3b33611ea1565b611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613c84565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611c045750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611c0d57600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611cff57601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611cc8929190613f59565b600060405180830381600087803b158015611ce257600080fd5b505af1158015611cf6573d6000803e3d6000fd5b50505050611dce565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611d9b929190613f82565b600060405180830381600087803b158015611db557600080fd5b505af1158015611dc9573d6000803e3d6000fd5b505050505b5050565b611ddb33611ea1565b611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190613c84565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000838311158290611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36919061374f565b60405180910390fd5b5060008385611f4e9190613fab565b9050809150509392505050565b6000601f60009054906101000a900460ff1615611f8457611f7d848484612af5565b9050612982565b611f8e8483612cc8565b60008073165c3410fc91ef562c50559f7d2289febed552d9905060007398bf93ebf5c380c0e6ae8e192a7e2ae08edacc029050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061206a5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806120c25750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061211a5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061215057508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061218657508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121bc57508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806121f257508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061224a5750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806122a25750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806122fa5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806123525750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b156124f35761235f612d65565b1561236d5761236c612e3c565b5b6123f6856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612442876132d9565b61244c5784612457565b6124568786613330565b5b92506124ab83600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612658565b61257c856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084925061261483600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661277257601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612745929190613f82565b600060405180830381600087803b15801561275f57600080fd5b505af1925050508015612770575060015b505b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661288c57601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161285f929190613f82565b600060405180830381600087803b15801561287957600080fd5b505af192505050801561288a575060015b505b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601c546040518263ffffffff1660e01b81526004016128e991906136a4565b600060405180830381600087803b15801561290357600080fd5b505af1925050508015612914575060015b508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161297291906136a4565b60405180910390a3600193505050505b9392505050565b60006129cb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef7565b905092915050565b60008082846129e29190613fdf565b905083811015612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e9061405f565b60405180910390fd5b8091505092915050565b6000808303612a435760009050612aa5565b60008284612a519190613cfc565b9050828482612a609190613d6d565b14612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a97906140f1565b60405180910390fd5b809150505b92915050565b6000612aed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613628565b905092915050565b6000612b80826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c1582600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cb591906136a4565b60405180910390a3600190509392505050565b60065481111580612d225750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d589061415d565b60405180910390fd5b5050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612dd25750601f60009054906101000a900460ff16155b8015612dea5750601d60009054906101000a900460ff165b8015612e375750601e54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601f60006101000a81548160ff0219169083151502179055506000612e67601554601654610c46565b612e7357600e54612e76565b60005b90506000612eb66002612ea8601154612e9a86601e54612a3190919063ffffffff16565b612aab90919063ffffffff16565b612aab90919063ffffffff16565b90506000612ecf82601e5461298990919063ffffffff16565b90506000600267ffffffffffffffff811115612eee57612eed61417d565b5b604051908082528060200260200182016040528015612f1c5781602001602082028036833780820191505090505b5090503081600081518110612f3457612f336141ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612fa557612fa46141ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613048959493929190614299565b600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b50505050600061308f824761298990919063ffffffff16565b905060006130bb6130aa600289612aab90919063ffffffff16565b60115461298990919063ffffffff16565b905060006130f760026130e9846130db8c88612a3190919063ffffffff16565b612aab90919063ffffffff16565b612aab90919063ffffffff16565b905060006131228361311460105487612a3190919063ffffffff16565b612aab90919063ffffffff16565b9050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561318e57600080fd5b505af1935050505080156131a0575060015b5060008811156132b357601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613233969594939291906142f3565b60606040518083038185885af1158015613251573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132769190614369565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450682896040516132aa929190613ca4565b60405180910390a15b5050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080613370601254613362613353600f5460115461298990919063ffffffff16565b86612a3190919063ffffffff16565b612aab90919063ffffffff16565b9050600061339d60125461338f600f5487612a3190919063ffffffff16565b612aab90919063ffffffff16565b90506133f182600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134a88160076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b60076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161356a91906136a4565b60405180910390a3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135f191906136a4565b60405180910390a361361e61360f82846129d390919063ffffffff16565b8561298990919063ffffffff16565b9250505092915050565b6000808311829061366f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613666919061374f565b60405180910390fd5b506000838561367e9190613d6d565b9050809150509392505050565b6000819050919050565b61369e8161368b565b82525050565b60006020820190506136b96000830184613695565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136f95780820151818401526020810190506136de565b60008484015250505050565b6000601f19601f8301169050919050565b6000613721826136bf565b61372b81856136ca565b935061373b8185602086016136db565b61374481613705565b840191505092915050565b600060208201905081810360008301526137698184613716565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137a182613776565b9050919050565b6137b181613796565b81146137bc57600080fd5b50565b6000813590506137ce816137a8565b92915050565b6137dd8161368b565b81146137e857600080fd5b50565b6000813590506137fa816137d4565b92915050565b6000806040838503121561381757613816613771565b5b6000613825858286016137bf565b9250506020613836858286016137eb565b9150509250929050565b60008115159050919050565b61385581613840565b82525050565b6000602082019050613870600083018461384c565b92915050565b6000806040838503121561388d5761388c613771565b5b600061389b858286016137eb565b92505060206138ac858286016137eb565b9150509250929050565b6000806000606084860312156138cf576138ce613771565b5b60006138dd868287016137bf565b93505060206138ee868287016137bf565b92505060406138ff868287016137eb565b9150509250925092565b60006020828403121561391f5761391e613771565b5b600061392d848285016137bf565b91505092915050565b600060ff82169050919050565b61394c81613936565b82525050565b60006020820190506139676000830184613943565b92915050565b61397681613840565b811461398157600080fd5b50565b6000813590506139938161396d565b92915050565b600080604083850312156139b0576139af613771565b5b60006139be858286016137bf565b92505060206139cf85828601613984565b9150509250929050565b6000602082840312156139ef576139ee613771565b5b60006139fd848285016137eb565b91505092915050565b60008060008060808587031215613a2057613a1f613771565b5b6000613a2e878288016137eb565b9450506020613a3f878288016137eb565b9350506040613a50878288016137eb565b9250506060613a61878288016137eb565b91505092959194509250565b6000819050919050565b6000613a92613a8d613a8884613776565b613a6d565b613776565b9050919050565b6000613aa482613a77565b9050919050565b6000613ab682613a99565b9050919050565b613ac681613aab565b82525050565b6000602082019050613ae16000830184613abd565b92915050565b613af081613796565b82525050565b6000602082019050613b0b6000830184613ae7565b92915050565b6000613b1c82613a99565b9050919050565b613b2c81613b11565b82525050565b6000602082019050613b476000830184613b23565b92915050565b60008060408385031215613b6457613b63613771565b5b6000613b72858286016137bf565b9250506020613b83858286016137bf565b9150509250929050565b60008060408385031215613ba457613ba3613771565b5b6000613bb285828601613984565b9250506020613bc3858286016137eb565b9150509250929050565b6000613bd882613776565b9050919050565b613be881613bcd565b8114613bf357600080fd5b50565b600081359050613c0581613bdf565b92915050565b600060208284031215613c2157613c20613771565b5b6000613c2f84828501613bf6565b91505092915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613c6e600b836136ca565b9150613c7982613c38565b602082019050919050565b60006020820190508181036000830152613c9d81613c61565b9050919050565b6000604082019050613cb96000830185613695565b613cc66020830184613695565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d078261368b565b9150613d128361368b565b9250828202613d208161368b565b91508282048414831517613d3757613d36613ccd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d788261368b565b9150613d838361368b565b925082613d9357613d92613d3e565b5b828204905092915050565b7f546f74616c20666565732061726520746f6f2068696768210000000000000000600082015250565b6000613dd46018836136ca565b9150613ddf82613d9e565b602082019050919050565b60006020820190508181036000830152613e0381613dc7565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000613e40600f836136ca565b9150613e4b82613e0a565b602082019050919050565b60006020820190508181036000830152613e6f81613e33565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613eac6006836136ca565b9150613eb782613e76565b602082019050919050565b60006020820190508181036000830152613edb81613e9f565b9050919050565b6000613eed82613a99565b9050919050565b613efd81613ee2565b82525050565b6000602082019050613f186000830184613ef4565b92915050565b6000819050919050565b6000613f43613f3e613f3984613f1e565b613a6d565b61368b565b9050919050565b613f5381613f28565b82525050565b6000604082019050613f6e6000830185613ae7565b613f7b6020830184613f4a565b9392505050565b6000604082019050613f976000830185613ae7565b613fa46020830184613695565b9392505050565b6000613fb68261368b565b9150613fc18361368b565b9250828203905081811115613fd957613fd8613ccd565b5b92915050565b6000613fea8261368b565b9150613ff58361368b565b925082820190508082111561400d5761400c613ccd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614049601b836136ca565b915061405482614013565b602082019050919050565b600060208201905081810360008301526140788161403c565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006140db6021836136ca565b91506140e68261407f565b604082019050919050565b6000602082019050818103600083015261410a816140ce565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006141476011836136ca565b915061415282614111565b602082019050919050565b600060208201905081810360008301526141768161413a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61421081613796565b82525050565b60006142228383614207565b60208301905092915050565b6000602082019050919050565b6000614246826141db565b61425081856141e6565b935061425b836141f7565b8060005b8381101561428c5781516142738882614216565b975061427e8361422e565b92505060018101905061425f565b5085935050505092915050565b600060a0820190506142ae6000830188613695565b6142bb6020830187613f4a565b81810360408301526142cd818661423b565b90506142dc6060830185613ae7565b6142e96080830184613695565b9695505050505050565b600060c0820190506143086000830189613ae7565b6143156020830188613695565b6143226040830187613f4a565b61432f6060830186613f4a565b61433c6080830185613ae7565b61434960a0830184613695565b979650505050505050565b600081519050614363816137d4565b92915050565b60008060006060848603121561438257614381613771565b5b600061439086828701614354565b93505060206143a186828701614354565b92505060406143b286828701614354565b915050925092509256fea264697066735822122041674106e14a0e8059e9335f9c8725a26b3423aca0c0ae6da167760051b21c8964736f6c634300081300336080604052600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a1077a294dde1b09bb078844df40758a5d0f9a27600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55603c600d55620186a0600e55348015620000e857600080fd5b5060405162001fec38038062001fec83398181016040528101906200010e919062000251565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200015e5773165c3410fc91ef562c50559f7d2289febed552d962000160565b805b600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505062000283565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200021982620001ec565b9050919050565b6200022b816200020c565b81146200023757600080fd5b50565b6000815190506200024b8162000220565b92915050565b6000602082840312156200026a5762000269620001e7565b5b60006200027a848285016200023a565b91505092915050565b611d5980620002936000396000f3fe6080604052600436106100dd5760003560e01c8063ce7c2ac21161007f578063efca2eed11610059578063efca2eed14610291578063f0fc6bca146102bc578063ffb2c479146102d3578063ffd49c84146102fc576100dd565b8063ce7c2ac21461021d578063d0e30db01461025c578063e2d2e21914610266576100dd565b80632d48e896116100bb5780632d48e896146101735780633a98ef391461019c5780634fab0ae8146101c7578063997664d7146101f2576100dd565b806311ce023d146100e257806314b6ca961461010d57806328fd319814610136575b600080fd5b3480156100ee57600080fd5b506100f7610327565b6040516101049190611561565b60405180910390f35b34801561011957600080fd5b50610134600480360381019061012f919061160b565b61032d565b005b34801561014257600080fd5b5061015d6004803603810190610158919061164b565b6105ec565b60405161016a9190611561565b60405180910390f35b34801561017f57600080fd5b5061019a60048036038101906101959190611678565b610705565b005b3480156101a857600080fd5b506101b161076f565b6040516101be9190611561565b60405180910390f35b3480156101d357600080fd5b506101dc610775565b6040516101e99190611561565b60405180910390f35b3480156101fe57600080fd5b5061020761077b565b6040516102149190611561565b60405180910390f35b34801561022957600080fd5b50610244600480360381019061023f919061164b565b610781565b604051610253939291906116b8565b60405180910390f35b6102646107ab565b005b34801561027257600080fd5b5061027b610b7d565b6040516102889190611561565b60405180910390f35b34801561029d57600080fd5b506102a6610b83565b6040516102b39190611561565b60405180910390f35b3480156102c857600080fd5b506102d1610b89565b005b3480156102df57600080fd5b506102fa60048036038101906102f591906116ef565b610b94565b005b34801561030857600080fd5b50610311610d27565b60405161031e9190611561565b60405180910390f35b600c5481565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461038557600080fd5b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015411156103da576103d982610d2d565b5b60008111801561042c57506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b1561043f5761043a82610fc0565b6104a1565b60008114801561049157506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b156104a05761049f8261106f565b5b5b61050a816104fc600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015460085461127690919063ffffffff16565b6112c090919063ffffffff16565b60088190555080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001819055506105a2600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154036106405760009050610700565b600061068d600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b90506000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001015490508082116106e857600092505050610700565b6106fb818361127690919063ffffffff16565b925050505b919050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461075d57600080fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60095481565b60076020528060005260406000206000915090508060000154908060010154908060020154905083565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461080357600080fd5b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610860919061172b565b602060405180830381865afa15801561087d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a1919061175b565b90506000600267ffffffffffffffff8111156108c0576108bf611788565b5b6040519080825280602002602001820160405280156108ee5781602001602082028036833780820191505090505b509050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600081518110610928576109276117b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610999576109986117b7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de953460008430426040518663ffffffff1660e01b8152600401610a3694939291906118e9565b6000604051808303818588803b158015610a4f57600080fd5b505af1158015610a63573d6000803e3d6000fd5b50505050506000610b1883600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ac9919061172b565b602060405180830381865afa158015610ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b0a919061175b565b61127690919063ffffffff16565b9050610b2f816009546112c090919063ffffffff16565b600981905550610b72610b61600854610b5384600c5461135090919063ffffffff16565b6113ca90919063ffffffff16565b600b546112c090919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b9233610d2d565b565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bec57600080fd5b6000600480549050905060008103610c045750610d24565b6000805a905060005b8483108015610c1b57508381105b15610d1f5783600f5410610c32576000600f819055505b610c7b6004600f5481548110610c4b57610c4a6117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611414565b15610cca57610cc96004600f5481548110610c9957610c986117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d2d565b5b610cef610ce05a8461127690919063ffffffff16565b846112c090919063ffffffff16565b92505a9150600f6000815480929190610d0790611964565b91905055508080610d1790611964565b915050610c0d565b505050505b50565b600d5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315610fbd576000610d83826105ec565b90506000811115610fbb57610da381600a546112c090919063ffffffff16565b600a81905550600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610e069291906119ac565b6020604051808303816000875af1158015610e25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e499190611a0d565b5042600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550610ee381600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600201546112c090919063ffffffff16565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550610f74600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015461131e565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600480549050600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506004819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506110839190611a3a565b81548110611094576110936117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166004600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110611112576111116117b7565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205460056000600460016004805490506111b29190611a3a565b815481106111c3576111c26117b7565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600480548061123e5761123d611a6e565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60006112b883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611481565b905092915050565b60008082846112cf9190611a9d565b905083811015611314576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130b90611b2e565b60405180910390fd5b8091505092915050565b6000611349600c5461133b600b548561135090919063ffffffff16565b6113ca90919063ffffffff16565b9050919050565b600080830361136257600090506113c4565b600082846113709190611b4e565b905082848261137f9190611bbf565b146113bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b690611c62565b60405180910390fd5b809150505b92915050565b600061140c83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506114e5565b905092915050565b600042600d54600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114649190611a9d565b10801561147a5750600e54611478836105ec565b115b9050919050565b60008383111582906114c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c09190611d01565b60405180910390fd5b50600083856114d89190611a3a565b9050809150509392505050565b6000808311829061152c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115239190611d01565b60405180910390fd5b506000838561153b9190611bbf565b9050809150509392505050565b6000819050919050565b61155b81611548565b82525050565b60006020820190506115766000830184611552565b92915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006115ac82611581565b9050919050565b6115bc816115a1565b81146115c757600080fd5b50565b6000813590506115d9816115b3565b92915050565b6115e881611548565b81146115f357600080fd5b50565b600081359050611605816115df565b92915050565b600080604083850312156116225761162161157c565b5b6000611630858286016115ca565b9250506020611641858286016115f6565b9150509250929050565b6000602082840312156116615761166061157c565b5b600061166f848285016115ca565b91505092915050565b6000806040838503121561168f5761168e61157c565b5b600061169d858286016115f6565b92505060206116ae858286016115f6565b9150509250929050565b60006060820190506116cd6000830186611552565b6116da6020830185611552565b6116e76040830184611552565b949350505050565b6000602082840312156117055761170461157c565b5b6000611713848285016115f6565b91505092915050565b611725816115a1565b82525050565b6000602082019050611740600083018461171c565b92915050565b600081519050611755816115df565b92915050565b6000602082840312156117715761177061157c565b5b600061177f84828501611746565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b6000819050919050565b600061181561181061180b846117e6565b6117f0565b611548565b9050919050565b611825816117fa565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b611860816115a1565b82525050565b60006118728383611857565b60208301905092915050565b6000602082019050919050565b60006118968261182b565b6118a08185611836565b93506118ab83611847565b8060005b838110156118dc5781516118c38882611866565b97506118ce8361187e565b9250506001810190506118af565b5085935050505092915050565b60006080820190506118fe600083018761181c565b8181036020830152611910818661188b565b905061191f604083018561171c565b61192c6060830184611552565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061196f82611548565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036119a1576119a0611935565b5b600182019050919050565b60006040820190506119c1600083018561171c565b6119ce6020830184611552565b9392505050565b60008115159050919050565b6119ea816119d5565b81146119f557600080fd5b50565b600081519050611a07816119e1565b92915050565b600060208284031215611a2357611a2261157c565b5b6000611a31848285016119f8565b91505092915050565b6000611a4582611548565b9150611a5083611548565b9250828203905081811115611a6857611a67611935565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6000611aa882611548565b9150611ab383611548565b9250828201905080821115611acb57611aca611935565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000611b18601b83611ad1565b9150611b2382611ae2565b602082019050919050565b60006020820190508181036000830152611b4781611b0b565b9050919050565b6000611b5982611548565b9150611b6483611548565b9250828202611b7281611548565b91508282048414831517611b8957611b88611935565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000611bca82611548565b9150611bd583611548565b925082611be557611be4611b90565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000611c4c602183611ad1565b9150611c5782611bf0565b604082019050919050565b60006020820190508181036000830152611c7b81611c3f565b9050919050565b600081519050919050565b60005b83811015611cab578082015181840152602081019050611c90565b60008484015250505050565b6000601f19601f8301169050919050565b6000611cd382611c82565b611cdd8185611ad1565b9350611ced818560208601611c8d565b611cf681611cb7565b840191505092915050565b60006020820190508181036000830152611d1b8184611cc8565b90509291505056fea264697066735822122023d2d8aaabb66b0ea267359d1254ab62c38f6d5e91a6a5f69e2d7b617d60d82d64736f6c63430008130033

Deployed ByteCode

0x60806040526004361061028c5760003560e01c806383ad79941161015a578063d51ed1c8116100c1578063f2fde38b1161007a578063f2fde38b14610a03578063f708a64f14610a2c578063f84ba65d14610a55578063f887ea4014610a7e578063fce589d814610aa9578063fe9fbb8014610ad457610293565b8063d51ed1c8146108e3578063dd62ed3e14610920578063df20fd491461095d578063e01bb68814610986578063e5f1ea9a146109af578063f0b37c04146109da57610293565b8063a8aa1b3111610113578063a8aa1b31146107d3578063a9059cbb146107fe578063b6a5d7de1461083b578063bd9ab53714610864578063bfe109281461088d578063ca33e64c146108b857610293565b806383ad7994146106d5578063893d20e81461070057806392321e041461072b57806395d89b411461075457806398118cb41461077f5780639d1944f5146107aa57610293565b80632f54bf6e116101fe5780636ddd1713116101b75780636ddd1713146105c35780636fcba377146105ee57806370a0823114610617578063762816d614610654578063763014c71461067f5780637d1db4a5146106aa57610293565b80632f54bf6e146104a3578063313ce567146104e057806350db71fb1461050b578063571ac8b0146105345780635c85974f14610571578063658d4b7f1461059a57610293565b806318160ddd1161025057806318160ddd146103935780631df4ccfc146103be578063201e7991146103e957806323b872dd146104125780632b112e491461044f5780632d48e8961461047a57610293565b80630445b6671461029857806306fdde03146102c3578063095ea7b3146102ee5780631161ae391461032b578063180b0d7e1461036857610293565b3661029357005b600080fd5b3480156102a457600080fd5b506102ad610b11565b6040516102ba91906136a4565b60405180910390f35b3480156102cf57600080fd5b506102d8610b17565b6040516102e5919061374f565b60405180910390f35b3480156102fa57600080fd5b5061031560048036038101906103109190613800565b610b54565b604051610322919061385b565b60405180910390f35b34801561033757600080fd5b50610352600480360381019061034d9190613876565b610c46565b60405161035f919061385b565b60405180910390f35b34801561037457600080fd5b5061037d610c5b565b60405161038a91906136a4565b60405180910390f35b34801561039f57600080fd5b506103a8610c61565b6040516103b591906136a4565b60405180910390f35b3480156103ca57600080fd5b506103d3610c6b565b6040516103e091906136a4565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190613876565b610c71565b005b34801561041e57600080fd5b50610439600480360381019061043491906138b6565b610ccb565b604051610446919061385b565b60405180910390f35b34801561045b57600080fd5b50610464610ecb565b60405161047191906136a4565b60405180910390f35b34801561048657600080fd5b506104a1600480360381019061049c9190613876565b610f4d565b005b3480156104af57600080fd5b506104ca60048036038101906104c59190613909565b611028565b6040516104d7919061385b565b60405180910390f35b3480156104ec57600080fd5b506104f5611081565b6040516105029190613952565b60405180910390f35b34801561051757600080fd5b50610532600480360381019061052d9190613999565b61108a565b005b34801561054057600080fd5b5061055b60048036038101906105569190613909565b61112d565b604051610568919061385b565b60405180910390f35b34801561057d57600080fd5b50610598600480360381019061059391906139d9565b611160565b005b3480156105a657600080fd5b506105c160048036038101906105bc9190613999565b6111b2565b005b3480156105cf57600080fd5b506105d8611255565b6040516105e5919061385b565b60405180910390f35b3480156105fa57600080fd5b5061061560048036038101906106109190613a06565b611268565b005b34801561062357600080fd5b5061063e60048036038101906106399190613909565b611360565b60405161064b91906136a4565b60405180910390f35b34801561066057600080fd5b506106696113a9565b6040516106769190613acc565b60405180910390f35b34801561068b57600080fd5b506106946113cf565b6040516106a19190613af6565b60405180910390f35b3480156106b657600080fd5b506106bf6113f5565b6040516106cc91906136a4565b60405180910390f35b3480156106e157600080fd5b506106ea6113fb565b6040516106f791906136a4565b60405180910390f35b34801561070c57600080fd5b50610715611401565b6040516107229190613af6565b60405180910390f35b34801561073757600080fd5b50610752600480360381019061074d9190613909565b61142a565b005b34801561076057600080fd5b50610769611525565b604051610776919061374f565b60405180910390f35b34801561078b57600080fd5b50610794611562565b6040516107a191906136a4565b60405180910390f35b3480156107b657600080fd5b506107d160048036038101906107cc91906139d9565b611568565b005b3480156107df57600080fd5b506107e86115c9565b6040516107f59190613af6565b60405180910390f35b34801561080a57600080fd5b5061082560048036038101906108209190613800565b6115ef565b604051610832919061385b565b60405180910390f35b34801561084757600080fd5b50610862600480360381019061085d9190613909565b611604565b005b34801561087057600080fd5b5061088b600480360381019061088691906139d9565b6116a6565b005b34801561089957600080fd5b506108a2611712565b6040516108af9190613b32565b60405180910390f35b3480156108c457600080fd5b506108cd611738565b6040516108da9190613af6565b60405180910390f35b3480156108ef57600080fd5b5061090a600480360381019061090591906139d9565b61175e565b60405161091791906136a4565b60405180910390f35b34801561092c57600080fd5b5061094760048036038101906109429190613b4d565b6117d0565b60405161095491906136a4565b60405180910390f35b34801561096957600080fd5b50610984600480360381019061097f9190613b8d565b611857565b005b34801561099257600080fd5b506109ad60048036038101906109a89190613909565b6118c4565b005b3480156109bb57600080fd5b506109c4611950565b6040516109d19190613af6565b60405180910390f35b3480156109e657600080fd5b50610a0160048036038101906109fc9190613909565b611976565b005b348015610a0f57600080fd5b50610a2a6004803603810190610a259190613c0b565b611a19565b005b348015610a3857600080fd5b50610a536004803603810190610a4e9190613999565b611b32565b005b348015610a6157600080fd5b50610a7c6004803603810190610a779190613999565b611dd2565b005b348015610a8a57600080fd5b50610a93611e75565b604051610aa09190613acc565b60405180910390f35b348015610ab557600080fd5b50610abe611e9b565b604051610acb91906136a4565b60405180910390f35b348015610ae057600080fd5b50610afb6004803603810190610af69190613909565b611ea1565b604051610b08919061385b565b60405180910390f35b601e5481565b60606040518060400160405280600681526020017f5465737435330000000000000000000000000000000000000000000000000000815250905090565b600081600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610c3491906136a4565b60405180910390a36001905092915050565b600082610c528361175e565b11905092915050565b60125481565b6000600554905090565b60115481565b610c7a33611ea1565b610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb090613c84565b60405180910390fd5b81601581905550806016819055505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414610eb757610e36826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b610ec2848484611f5b565b90509392505050565b6000610f48610efb600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611360565b610f3a610f29600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611360565b60055461298990919063ffffffff16565b61298990919063ffffffff16565b905090565b610f5633611ea1565b610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90613c84565b60405180910390fd5b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89683836040518363ffffffff1660e01b8152600401610ff2929190613ca4565b600060405180830381600087803b15801561100c57600080fd5b505af1158015611020573d6000803e3d6000fd5b505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b61109333611ea1565b6110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990613c84565b60405180910390fd5b80600b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611159827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b54565b9050919050565b61116933611ea1565b6111a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119f90613c84565b60405180910390fd5b8060068190555050565b6111bb33611ea1565b6111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190613c84565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60009054906101000a900460ff1681565b61127133611ea1565b6112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a790613c84565b60405180910390fd5b83600e819055508260108190555081600f81905550806012819055506112f1826112e385876129d390919063ffffffff16565b6129d390919063ffffffff16565b601181905550600060646005836113089190613cfc565b6113129190613d6d565b9050806011541115611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090613dea565b60405180910390fd5b5050505050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60065481565b60105481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61143333611ea1565b611472576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146990613c84565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036114e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d890613e56565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60606040518060400160405280600381526020017f5435330000000000000000000000000000000000000000000000000000000000815250905090565b600e5481565b61157133611ea1565b6115b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a790613c84565b60405180910390fd5b620b71b081106115bf57600080fd5b80601c8190555050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006115fc338484611f5b565b905092915050565b61160d33611028565b61164c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164390613ec2565b60405180910390fd5b60018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6116af33611028565b6116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613ec2565b60405180910390fd5b6103e8816005546116ff9190613cfc565b6117099190613d6d565b60068190555050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006117c961176b610ecb565b6117bb6117ac600261179e601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611360565b612a3190919063ffffffff16565b85612a3190919063ffffffff16565b612aab90919063ffffffff16565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61186033611ea1565b61189f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189690613c84565b60405180910390fd5b81601d60006101000a81548160ff02191690831515021790555080601e819055505050565b6118cd33611ea1565b61190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613c84565b60405180910390fd5b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61197f33611028565b6119be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b590613ec2565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611a2233611028565b611a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5890613ec2565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060018060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc68616381604051611b279190613f03565b60405180910390a150565b611b3b33611ea1565b611b7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7190613c84565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611c045750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611c0d57600080fd5b80600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015611cff57601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca968360006040518363ffffffff1660e01b8152600401611cc8929190613f59565b600060405180830381600087803b158015611ce257600080fd5b505af1158015611cf6573d6000803e3d6000fd5b50505050611dce565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9683600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401611d9b929190613f82565b600060405180830381600087803b158015611db557600080fd5b505af1158015611dc9573d6000803e3d6000fd5b505050505b5050565b611ddb33611ea1565b611e1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1190613c84565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000838311158290611f3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f36919061374f565b60405180910390fd5b5060008385611f4e9190613fab565b9050809150509392505050565b6000601f60009054906101000a900460ff1615611f8457611f7d848484612af5565b9050612982565b611f8e8483612cc8565b60008073165c3410fc91ef562c50559f7d2289febed552d9905060007398bf93ebf5c380c0e6ae8e192a7e2ae08edacc029050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148061206a5750601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806120c25750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061211a5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061215057508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061218657508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121bc57508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806121f257508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061224a5750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806122a25750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806122fa5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806123525750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b156124f35761235f612d65565b1561236d5761236c612e3c565b5b6123f6856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612442876132d9565b61244c5784612457565b6124568786613330565b5b92506124ab83600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612658565b61257c856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555084925061261483600760008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661277257601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b8152600401612745929190613f82565b600060405180830381600087803b15801561275f57600080fd5b505af1925050508015612770575060015b505b600c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661288c57601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9687600760008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546040518363ffffffff1660e01b815260040161285f929190613f82565b600060405180830381600087803b15801561287957600080fd5b505af192505050801561288a575060015b505b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c479601c546040518263ffffffff1660e01b81526004016128e991906136a4565b600060405180830381600087803b15801561290357600080fd5b505af1925050508015612914575060015b508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161297291906136a4565b60405180910390a3600193505050505b9392505050565b60006129cb83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611ef7565b905092915050565b60008082846129e29190613fdf565b905083811015612a27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1e9061405f565b60405180910390fd5b8091505092915050565b6000808303612a435760009050612aa5565b60008284612a519190613cfc565b9050828482612a609190613d6d565b14612aa0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a97906140f1565b60405180910390fd5b809150505b92915050565b6000612aed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613628565b905092915050565b6000612b80826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611ef79092919063ffffffff16565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c1582600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cb591906136a4565b60405180910390a3600190509392505050565b60065481111580612d225750600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d589061415d565b60405180910390fd5b5050565b6000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612dd25750601f60009054906101000a900460ff16155b8015612dea5750601d60009054906101000a900460ff165b8015612e375750601e54600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410155b905090565b6001601f60006101000a81548160ff0219169083151502179055506000612e67601554601654610c46565b612e7357600e54612e76565b60005b90506000612eb66002612ea8601154612e9a86601e54612a3190919063ffffffff16565b612aab90919063ffffffff16565b612aab90919063ffffffff16565b90506000612ecf82601e5461298990919063ffffffff16565b90506000600267ffffffffffffffff811115612eee57612eed61417d565b5b604051908082528060200260200182016040528015612f1c5781602001602082028036833780820191505090505b5090503081600081518110612f3457612f336141ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612fa557612fa46141ac565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000479050601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478460008530426040518663ffffffff1660e01b8152600401613048959493929190614299565b600060405180830381600087803b15801561306257600080fd5b505af1158015613076573d6000803e3d6000fd5b50505050600061308f824761298990919063ffffffff16565b905060006130bb6130aa600289612aab90919063ffffffff16565b60115461298990919063ffffffff16565b905060006130f760026130e9846130db8c88612a3190919063ffffffff16565b612aab90919063ffffffff16565b612aab90919063ffffffff16565b905060006131228361311460105487612a3190919063ffffffff16565b612aab90919063ffffffff16565b9050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561318e57600080fd5b505af1935050505080156131a0575060015b5060008811156132b357601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b600080601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613233969594939291906142f3565b60606040518083038185885af1158015613251573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906132769190614369565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450682896040516132aa929190613ca4565b60405180910390a15b5050505050505050506000601f60006101000a81548160ff021916908315150217905550565b6000600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16159050919050565b600080613370601254613362613353600f5460115461298990919063ffffffff16565b86612a3190919063ffffffff16565b612aab90919063ffffffff16565b9050600061339d60125461338f600f5487612a3190919063ffffffff16565b612aab90919063ffffffff16565b90506133f182600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506134a88160076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129d390919063ffffffff16565b60076000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161356a91906136a4565b60405180910390a3600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135f191906136a4565b60405180910390a361361e61360f82846129d390919063ffffffff16565b8561298990919063ffffffff16565b9250505092915050565b6000808311829061366f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613666919061374f565b60405180910390fd5b506000838561367e9190613d6d565b9050809150509392505050565b6000819050919050565b61369e8161368b565b82525050565b60006020820190506136b96000830184613695565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156136f95780820151818401526020810190506136de565b60008484015250505050565b6000601f19601f8301169050919050565b6000613721826136bf565b61372b81856136ca565b935061373b8185602086016136db565b61374481613705565b840191505092915050565b600060208201905081810360008301526137698184613716565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006137a182613776565b9050919050565b6137b181613796565b81146137bc57600080fd5b50565b6000813590506137ce816137a8565b92915050565b6137dd8161368b565b81146137e857600080fd5b50565b6000813590506137fa816137d4565b92915050565b6000806040838503121561381757613816613771565b5b6000613825858286016137bf565b9250506020613836858286016137eb565b9150509250929050565b60008115159050919050565b61385581613840565b82525050565b6000602082019050613870600083018461384c565b92915050565b6000806040838503121561388d5761388c613771565b5b600061389b858286016137eb565b92505060206138ac858286016137eb565b9150509250929050565b6000806000606084860312156138cf576138ce613771565b5b60006138dd868287016137bf565b93505060206138ee868287016137bf565b92505060406138ff868287016137eb565b9150509250925092565b60006020828403121561391f5761391e613771565b5b600061392d848285016137bf565b91505092915050565b600060ff82169050919050565b61394c81613936565b82525050565b60006020820190506139676000830184613943565b92915050565b61397681613840565b811461398157600080fd5b50565b6000813590506139938161396d565b92915050565b600080604083850312156139b0576139af613771565b5b60006139be858286016137bf565b92505060206139cf85828601613984565b9150509250929050565b6000602082840312156139ef576139ee613771565b5b60006139fd848285016137eb565b91505092915050565b60008060008060808587031215613a2057613a1f613771565b5b6000613a2e878288016137eb565b9450506020613a3f878288016137eb565b9350506040613a50878288016137eb565b9250506060613a61878288016137eb565b91505092959194509250565b6000819050919050565b6000613a92613a8d613a8884613776565b613a6d565b613776565b9050919050565b6000613aa482613a77565b9050919050565b6000613ab682613a99565b9050919050565b613ac681613aab565b82525050565b6000602082019050613ae16000830184613abd565b92915050565b613af081613796565b82525050565b6000602082019050613b0b6000830184613ae7565b92915050565b6000613b1c82613a99565b9050919050565b613b2c81613b11565b82525050565b6000602082019050613b476000830184613b23565b92915050565b60008060408385031215613b6457613b63613771565b5b6000613b72858286016137bf565b9250506020613b83858286016137bf565b9150509250929050565b60008060408385031215613ba457613ba3613771565b5b6000613bb285828601613984565b9250506020613bc3858286016137eb565b9150509250929050565b6000613bd882613776565b9050919050565b613be881613bcd565b8114613bf357600080fd5b50565b600081359050613c0581613bdf565b92915050565b600060208284031215613c2157613c20613771565b5b6000613c2f84828501613bf6565b91505092915050565b7f21415554484f52495a4544000000000000000000000000000000000000000000600082015250565b6000613c6e600b836136ca565b9150613c7982613c38565b602082019050919050565b60006020820190508181036000830152613c9d81613c61565b9050919050565b6000604082019050613cb96000830185613695565b613cc66020830184613695565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613d078261368b565b9150613d128361368b565b9250828202613d208161368b565b91508282048414831517613d3757613d36613ccd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d788261368b565b9150613d838361368b565b925082613d9357613d92613d3e565b5b828204905092915050565b7f546f74616c20666565732061726520746f6f2068696768210000000000000000600082015250565b6000613dd46018836136ca565b9150613ddf82613d9e565b602082019050919050565b60006020820190508181036000830152613e0381613dc7565b9050919050565b7f496e76616c696420616464726573730000000000000000000000000000000000600082015250565b6000613e40600f836136ca565b9150613e4b82613e0a565b602082019050919050565b60006020820190508181036000830152613e6f81613e33565b9050919050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000613eac6006836136ca565b9150613eb782613e76565b602082019050919050565b60006020820190508181036000830152613edb81613e9f565b9050919050565b6000613eed82613a99565b9050919050565b613efd81613ee2565b82525050565b6000602082019050613f186000830184613ef4565b92915050565b6000819050919050565b6000613f43613f3e613f3984613f1e565b613a6d565b61368b565b9050919050565b613f5381613f28565b82525050565b6000604082019050613f6e6000830185613ae7565b613f7b6020830184613f4a565b9392505050565b6000604082019050613f976000830185613ae7565b613fa46020830184613695565b9392505050565b6000613fb68261368b565b9150613fc18361368b565b9250828203905081811115613fd957613fd8613ccd565b5b92915050565b6000613fea8261368b565b9150613ff58361368b565b925082820190508082111561400d5761400c613ccd565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614049601b836136ca565b915061405482614013565b602082019050919050565b600060208201905081810360008301526140788161403c565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006140db6021836136ca565b91506140e68261407f565b604082019050919050565b6000602082019050818103600083015261410a816140ce565b9050919050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006141476011836136ca565b915061415282614111565b602082019050919050565b600060208201905081810360008301526141768161413a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61421081613796565b82525050565b60006142228383614207565b60208301905092915050565b6000602082019050919050565b6000614246826141db565b61425081856141e6565b935061425b836141f7565b8060005b8381101561428c5781516142738882614216565b975061427e8361422e565b92505060018101905061425f565b5085935050505092915050565b600060a0820190506142ae6000830188613695565b6142bb6020830187613f4a565b81810360408301526142cd818661423b565b90506142dc6060830185613ae7565b6142e96080830184613695565b9695505050505050565b600060c0820190506143086000830189613ae7565b6143156020830188613695565b6143226040830187613f4a565b61432f6060830186613f4a565b61433c6080830185613ae7565b61434960a0830184613695565b979650505050505050565b600081519050614363816137d4565b92915050565b60008060006060848603121561438257614381613771565b5b600061439086828701614354565b93505060206143a186828701614354565b92505060406143b286828701614354565b915050925092509256fea264697066735822122041674106e14a0e8059e9335f9c8725a26b3423aca0c0ae6da167760051b21c8964736f6c63430008130033