false
true
0

Contract Address Details

0x67e3fec6F92e1bCD82E1CD96835220FF9121595E

Token
STRONG HANDED FRENS AND MATH (FRENS)
Creator
0xe5bdf5–9c8356 at 0x3cbc3d–f55453
Balance
303,401,336.232083381893595377 PLS ( )
Tokens
Fetching tokens...
Transactions
1,730 Transactions
Transfers
0 Transfers
Gas Used
0
Last Balance Update
25887448
Warning! Contract bytecode has been changed and doesn't match the verified one. Therefore, interaction with this smart contract may be risky.
Contract name:
Contracto




Optimization enabled
false
Compiler version
v0.8.22+commit.4fc1097e




EVM Version
default




Verified at
2024-07-10T18:07:33.519115Z

Contract source code

// SPDX-License-Identifier: MIT

pragma solidity 0.8.22;


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;
    }
}


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 public 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, address _rwdToken) {
    router = _router != address(0)
        ? IDEXRouter(_router)
        : IDEXRouter(0x165C3410fC91EF562C50559f7d2289fEbed552d9);
    _token = msg.sender;
    RWRD = IERC20(_rwdToken); // Set the RWRD token address
}


    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 Contracto is IERC20, Auth {
    using SafeMath for uint256;

    address[6] public RWRDAddresses = [
    0xCc78A0acDF847A2C1714D2A925bB4477df5d48a6,
    0x0b1307dc5D90a0B60Be18D2634843343eBc098AF,
    0x0EB4EE7d5Ff28cbF68565A174f7E5e186c36B4b3,
    0xd6c31bA0754C4383A41c0e9DF042C62b5e918f6d,
    0x463413c579D29c26D59a65312657DFCe30D545A1,
    0x4243568Fa2bbad327ee36e06c16824cAd8B37819
];

DividendDistributor[] public distributors;

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

    string constant _name = "STRONG HANDED FRENS AND MATH";
    string constant _symbol = "FRENS";
    uint8 constant _decimals = 18;

    uint256 _totalSupply = 6 * (10**_decimals);
    uint256 public _maxTxAmount = 100000000000000000;

    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;

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

    address public autoLiquidityReceiver;

    uint256 targetLiquidity = 23;
    uint256 targetLiquidityDenominator = 100;

    IDEXRouter public router;
    address public pair;

    IDEXRouter public router2;
    address public pair2;

    
    uint256 distributorGas = 500000;

    bool public swapEnabled = true;
    uint256 public swapThreshold = 100000000000000;
    bool inSwap;
    modifier swapping() { inSwap = true; _; inSwap = false; }

    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;

        // Create instances of DividendDistributor for each RWRD address
        for (uint8 i = 0; i < RWRDAddresses.length; i++) {
            DividendDistributor distributor = new DividendDistributor(address(router), RWRDAddresses[i]);
            distributors.push(distributor);
        }

        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;

        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]) {
    for (uint256 i = 0; i < distributors.length; i++) {
        try distributors[i].setShare(sender, _balances[sender]) {} catch {}
    }
}

if (!isDividendExempt[recipient]) {
    for (uint256 i = 0; i < distributors.length; i++) {
        try distributors[i].setShare(recipient, _balances[recipient]) {} catch {}
    }
}

for (uint256 i = 0; i < distributors.length; i++) {
    try distributors[i].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) {
    // Determine if sender is selling (not buying)
    bool isSell = sender != address(this);

    // Only apply fee multiplier if it's a sell transaction
    if (isSell) {
        // Apply a multiplier for sells to double the fee
        uint256 feeMultiplier = 2;

        // Calculate the fee amounts with the multiplier
        uint256 feeAmount = amount.mul(totalFee.sub(burnFee)).mul(feeMultiplier).div(feeDenominator);
        uint256 burnAmount = amount.mul(burnFee).mul(feeMultiplier).div(feeDenominator);

        // Transfer fees to contract and burn address
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        _balances[DEAD] = _balances[DEAD].add(burnAmount);

        // Emit transfer events for fee deductions
        emit Transfer(sender, address(this), feeAmount);
        emit Transfer(sender, DEAD, burnAmount);

        // Return the amount after deducting fees
        return amount.sub(feeAmount.add(burnAmount));
    } else {
        // No fee multiplier for buys or other transactions
        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);

    

     for (uint256 i = 0; i < distributors.length; i++) {
            uint256 distributorShare = amountPLSReflection / distributors.length;
            try distributors[i].deposit{value: distributorShare}() {} 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);
    
    for (uint256 i = 0; i < distributors.length; i++) {
        isDividendExempt[holder] = exempt;
        if (exempt) {
            distributors[i].setShare(holder, 0);
        } else {
            distributors[i].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 * 30 / 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 {
    for (uint256 i = 0; i < distributors.length; i++) {
        distributors[i].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":"RWRDAddresses","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"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":"distributors","inputs":[{"type":"uint256","name":"","internalType":"uint256"}]},{"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":"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
0x60806040526040518060c0016040528073cc78a0acdf847a2c1714d2a925bb4477df5d48a673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001730b1307dc5d90a0b60be18d2634843343ebc098af73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001730eb4ee7d5ff28cbf68565a174f7e5e186c36b4b373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173d6c31ba0754c4383a41c0e9df042c62b5e918f6d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200173463413c579d29c26d59a65312657dfce30d545a173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001734243568fa2bbad327ee36e06c16824cad8b3781973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152506002906006620001c392919062000dfa565b5073a1077a294dde1b09bb078844df40758a5d0f9a2760095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505f600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a620002aa919062001038565b6006620002b8919062001088565b600c5567016345785d8a0000600d5561022b60145561022b6015556122b8601655601654601454601554620002ee9190620010d2565b620002fa9190620010d2565b601755620186a06018556017601a556064601b556207a120602055600160215f6101000a81548160ff021916908315150217905550655af3107a400060225534801562000345575f80fd5b5033805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505073165c3410fc91ef562c50559f7d2289febed552d9601c5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200049a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620004c0919062001171565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200051d929190620011b2565b6020604051808303815f875af11580156200053a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000560919062001171565b601d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055507398bf93ebf5c380c0e6ae8e192a7e2ae08edacc02601e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200071c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000742919062001171565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200079f929190620011b2565b6020604051808303815f875af1158015620007bc573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620007e2919062001171565b601f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f5b60068160ff161015620009fb575f601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660028360ff16600681106200092b576200092a620011dd565b5b015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200095a9062000e7b565b62000967929190620011b2565b604051809103905ff08015801562000981573d5f803e3d5ffd5b509050600881908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550508080620009f2906200120a565b915050620008e1565b50600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160115f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160125f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160135f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503360195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600c54600e5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c5460405162000dec919062001248565b60405180910390a362001263565b826006810192821562000e68579160200282015b8281111562000e67578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019062000e0e565b5b50905062000e77919062000e89565b5090565b611fb2806200584983390190565b5b8082111562000ea2575f815f90555060010162000e8a565b5090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000f305780860481111562000f085762000f0762000ea6565b5b600185161562000f185780820291505b808102905062000f288562000ed3565b945062000ee8565b94509492505050565b5f8262000f4a57600190506200101c565b8162000f59575f90506200101c565b816001811462000f72576002811462000f7d5762000fb3565b60019150506200101c565b60ff84111562000f925762000f9162000ea6565b5b8360020a91508482111562000fac5762000fab62000ea6565b5b506200101c565b5060208310610133831016604e8410600b841016171562000fed5782820a90508381111562000fe75762000fe662000ea6565b5b6200101c565b62000ffc848484600162000edf565b9250905081840481111562001016576200101562000ea6565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f620010448262001023565b915062001051836200102c565b9250620010807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f39565b905092915050565b5f620010948262001023565b9150620010a18362001023565b9250828202620010b18162001023565b91508282048414831517620010cb57620010ca62000ea6565b5b5092915050565b5f620010de8262001023565b9150620010eb8362001023565b925082820190508082111562001106576200110562000ea6565b5b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6200113b8262001110565b9050919050565b6200114d816200112f565b811462001158575f80fd5b50565b5f815190506200116b8162001142565b92915050565b5f602082840312156200118957620011886200110c565b5b5f62001198848285016200115b565b91505092915050565b620011ac816200112f565b82525050565b5f604082019050620011c75f830185620011a1565b620011d66020830184620011a1565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f62001216826200102c565b915060ff82036200122c576200122b62000ea6565b5b600182019050919050565b620012428162001023565b82525050565b5f6020820190506200125d5f83018462001237565b92915050565b6145d880620012715f395ff3fe608060405260043610610280575f3560e01c80637d1db4a51161014e578063d51ed1c8116100c0578063f2fde38b11610079578063f2fde38b146109c9578063f708a64f146109f1578063f84ba65d14610a19578063f887ea4014610a41578063fce589d814610a6b578063fe9fbb8014610a9557610287565b8063d51ed1c81461089d578063dd62ed3e146108d9578063df20fd4914610915578063e01bb6881461093d578063e46e55b514610965578063f0b37c04146109a157610287565b80639d1944f5116101125780639d1944f514610795578063a8aa1b31146107bd578063a9059cbb146107e7578063b6a5d7de14610823578063bd9ab5371461084b578063ca33e64c1461087357610287565b80637d1db4a5146106c357806383ad7994146106ed578063893d20e81461071757806395d89b411461074157806398118cb41461076b57610287565b80632f54bf6e116101f2578063658d4b7f116101ab578063658d4b7f146105b95780636ddd1713146105e15780636fcba3771461060b57806370a0823114610633578063762816d61461066f578063763014c71461069957610287565b80632f54bf6e1461048b578063313ce567146104c757806350b492ba146104f157806350db71fb1461052d578063571ac8b0146105555780635c85974f1461059157610287565b806318160ddd1161024457806318160ddd146103815780631df4ccfc146103ab578063201e7991146103d557806323b872dd146103fd5780632b112e49146104395780632d48e8961461046357610287565b80630445b6671461028b57806306fdde03146102b5578063095ea7b3146102df5780631161ae391461031b578063180b0d7e1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610ad1565b6040516102ac9190613971565b60405180910390f35b3480156102c0575f80fd5b506102c9610ad7565b6040516102d69190613a14565b60405180910390f35b3480156102ea575f80fd5b5061030560048036038101906103009190613abc565b610b14565b6040516103129190613b14565b60405180910390f35b348015610326575f80fd5b50610341600480360381019061033c9190613b2d565b610c01565b60405161034e9190613b14565b60405180910390f35b348015610362575f80fd5b5061036b610c15565b6040516103789190613971565b60405180910390f35b34801561038c575f80fd5b50610395610c1b565b6040516103a29190613971565b60405180910390f35b3480156103b6575f80fd5b506103bf610c24565b6040516103cc9190613971565b60405180910390f35b3480156103e0575f80fd5b506103fb60048036038101906103f69190613b2d565b610c2a565b005b348015610408575f80fd5b50610423600480360381019061041e9190613b6b565b610c84565b6040516104309190613b14565b60405180910390f35b348015610444575f80fd5b5061044d610e77565b60405161045a9190613971565b60405180910390f35b34801561046e575f80fd5b5061048960048036038101906104849190613b2d565b610ef6565b005b348015610496575f80fd5b506104b160048036038101906104ac9190613bbb565b611002565b6040516104be9190613b14565b60405180910390f35b3480156104d2575f80fd5b506104db611059565b6040516104e89190613c01565b60405180910390f35b3480156104fc575f80fd5b5061051760048036038101906105129190613c1a565b611061565b6040516105249190613ca0565b60405180910390f35b348015610538575f80fd5b50610553600480360381019061054e9190613ce3565b61109c565b005b348015610560575f80fd5b5061057b60048036038101906105769190613bbb565b61113c565b6040516105889190613b14565b60405180910390f35b34801561059c575f80fd5b506105b760048036038101906105b29190613c1a565b61116e565b005b3480156105c4575f80fd5b506105df60048036038101906105da9190613ce3565b6111c0565b005b3480156105ec575f80fd5b506105f5611260565b6040516106029190613b14565b60405180910390f35b348015610616575f80fd5b50610631600480360381019061062c9190613d21565b611272565b005b34801561063e575f80fd5b5061065960048036038101906106549190613bbb565b611369565b6040516106669190613971565b60405180910390f35b34801561067a575f80fd5b506106836113af565b6040516106909190613da5565b60405180910390f35b3480156106a4575f80fd5b506106ad6113d4565b6040516106ba9190613dcd565b60405180910390f35b3480156106ce575f80fd5b506106d76113f9565b6040516106e49190613971565b60405180910390f35b3480156106f8575f80fd5b506107016113ff565b60405161070e9190613971565b60405180910390f35b348015610722575f80fd5b5061072b611405565b6040516107389190613dcd565b60405180910390f35b34801561074c575f80fd5b5061075561142c565b6040516107629190613a14565b60405180910390f35b348015610776575f80fd5b5061077f611469565b60405161078c9190613971565b60405180910390f35b3480156107a0575f80fd5b506107bb60048036038101906107b69190613c1a565b61146f565b005b3480156107c8575f80fd5b506107d16114cf565b6040516107de9190613dcd565b60405180910390f35b3480156107f2575f80fd5b5061080d60048036038101906108089190613abc565b6114f4565b60405161081a9190613b14565b60405180910390f35b34801561082e575f80fd5b5061084960048036038101906108449190613bbb565b611508565b005b348015610856575f80fd5b50610871600480360381019061086c9190613c1a565b6115a7565b005b34801561087e575f80fd5b50610887611613565b6040516108949190613dcd565b60405180910390f35b3480156108a8575f80fd5b506108c360048036038101906108be9190613c1a565b611638565b6040516108d09190613971565b60405180910390f35b3480156108e4575f80fd5b506108ff60048036038101906108fa9190613de6565b6116a8565b60405161090c9190613971565b60405180910390f35b348015610920575f80fd5b5061093b60048036038101906109369190613e24565b61172a565b005b348015610948575f80fd5b50610963600480360381019061095e9190613bbb565b611796565b005b348015610970575f80fd5b5061098b60048036038101906109869190613c1a565b611821565b6040516109989190613dcd565b60405180910390f35b3480156109ac575f80fd5b506109c760048036038101906109c29190613bbb565b611855565b005b3480156109d4575f80fd5b506109ef60048036038101906109ea9190613e9d565b6118f4565b005b3480156109fc575f80fd5b50610a176004803603810190610a129190613ce3565b611a09565b005b348015610a24575f80fd5b50610a3f6004803603810190610a3a9190613ce3565b611ce6565b005b348015610a4c575f80fd5b50610a55611d86565b604051610a629190613da5565b60405180910390f35b348015610a76575f80fd5b50610a7f611dab565b604051610a8c9190613971565b60405180910390f35b348015610aa0575f80fd5b50610abb6004803603810190610ab69190613bbb565b611db1565b604051610ac89190613b14565b60405180910390f35b60225481565b60606040518060400160405280601c81526020017f5354524f4e472048414e444544204652454e5320414e44204d41544800000000815250905090565b5f81600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bef9190613971565b60405180910390a36001905092915050565b5f82610c0c83611638565b11905092915050565b60185481565b5f600c54905090565b60175481565b610c3333611db1565b610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990613f12565b60405180910390fd5b81601a8190555080601b819055505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610e6357610de6826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e039092919063ffffffff16565b600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610e6e848484611e65565b90509392505050565b5f610ef1610ea5600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611369565b610ee3610ed2600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611369565b600c5461290690919063ffffffff16565b61290690919063ffffffff16565b905090565b610eff33611db1565b610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590613f12565b60405180910390fd5b5f5b600880549050811015610ffd5760088181548110610f6157610f60613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89684846040518363ffffffff1660e01b8152600401610fc3929190613f5d565b5f604051808303815f87803b158015610fda575f80fd5b505af1158015610fec573d5f803e3d5ffd5b505050508080600101915050610f40565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f6012905090565b60088181548110611070575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110a533611db1565b6110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613f12565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f611167827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b14565b9050919050565b61117733611db1565b6111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90613f12565b60405180910390fd5b80600d8190555050565b6111c933611db1565b611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613f12565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60215f9054906101000a900460ff1681565b61127b33611db1565b6112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190613f12565b60405180910390fd5b836014819055508260168190555081601581905550806018819055506112fb826112ed858761294f90919063ffffffff16565b61294f90919063ffffffff16565b6017819055505f6064601e836113119190613fb1565b61131b919061401f565b9050806017541115611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614099565b60405180910390fd5b5050505050565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60165481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f4652454e53000000000000000000000000000000000000000000000000000000815250905090565b60145481565b61147833611db1565b6114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90613f12565b60405180910390fd5b620b71b081106114c5575f80fd5b8060208190555050565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611500338484611e65565b905092915050565b61151133611002565b611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790614101565b60405180910390fd5b6001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6115b033611002565b6115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614101565b60405180910390fd5b6103e881600c546116009190613fb1565b61160a919061401f565b600d8190555050565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6116a1611644610e77565b6116936116846002611676601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611369565b6129ac90919063ffffffff16565b856129ac90919063ffffffff16565b612a2390919063ffffffff16565b9050919050565b5f600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61173333611db1565b611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613f12565b60405180910390fd5b8160215f6101000a81548160ff021916908315150217905550806022819055505050565b61179f33611db1565b6117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590613f12565b60405180910390fd5b8060195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60028160068110611830575f80fd5b015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61185e33611002565b61189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490614101565b60405180910390fd5b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6118fd33611002565b61193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390614101565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516119fe919061413f565b60405180910390a150565b611a1233611db1565b611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890613f12565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611ada5750601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611ae2575f80fd5b5f5b600880549050811015611ce1578160135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508115611bf35760088181548110611b5f57611b5e613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96845f6040518363ffffffff1660e01b8152600401611bc1929190614191565b5f604051808303815f87803b158015611bd8575f80fd5b505af1158015611bea573d5f803e3d5ffd5b50505050611cd4565b60088181548110611c0757611c06613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9684600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611ca69291906141b8565b5f604051808303815f87803b158015611cbd575f80fd5b505af1158015611ccf573d5f803e3d5ffd5b505050505b8080600101915050611ae4565b505050565b611cef33611db1565b611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613f12565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f838311158290611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e419190613a14565b60405180910390fd5b505f8385611e5891906141df565b9050809150509392505050565b5f60235f9054906101000a900460ff1615611e8c57611e85848484612a6c565b90506128ff565b611e968483612c36565b5f8073165c3410fc91ef562c50559f7d2289febed552d990505f7398bf93ebf5c380c0e6ae8e192a7e2ae08edacc029050601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611f6e5750601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611fc55750601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061201c5750601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061205257508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061208857508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806120be57508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806120f457508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061214b5750601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121a25750601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806121f95750601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806122505750601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b156123e95761225d612cd0565b1561226b5761226a612da1565b5b6122f2856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e039092919063ffffffff16565b600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061233c8761326b565b6123465784612351565b61235087866132be565b5b92506123a383600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612546565b612470856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e039092919063ffffffff16565b600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555084925061250483600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661268e575f5b60088054905081101561268c57600881815481106125b7576125b6613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9689600e5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b81526004016126569291906141b8565b5f604051808303815f87803b15801561266d575f80fd5b505af192505050801561267e575060015b508080600101915050612596565b505b60135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166127d6575f5b6008805490508110156127d457600881815481106126ff576126fe613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600e5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b815260040161279e9291906141b8565b5f604051808303815f87803b1580156127b5575f80fd5b505af19250505080156127c6575060015b5080806001019150506126de565b505b5f5b60088054905081101561289157600881815481106127f9576127f8613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796020546040518263ffffffff1660e01b815260040161285b9190613971565b5f604051808303815f87803b158015612872575f80fd5b505af1925050508015612883575060015b5080806001019150506127d8565b508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516128ef9190613971565b60405180910390a3600193505050505b9392505050565b5f61294783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e03565b905092915050565b5f80828461295d9190614212565b9050838110156129a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129999061428f565b60405180910390fd5b8091505092915050565b5f8083036129bc575f9050612a1d565b5f82846129c99190613fb1565b90508284826129d8919061401f565b14612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f9061431d565b60405180910390fd5b809150505b92915050565b5f612a6483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138f8565b905092915050565b5f612af4826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e039092919063ffffffff16565b600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612b8582600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c239190613971565b60405180910390a3600190509392505050565b600d5481111580612c8d575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614385565b60405180910390fd5b5050565b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612d3a575060235f9054906101000a900460ff16155b8015612d51575060215f9054906101000a900460ff165b8015612d9c5750602254600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b600160235f6101000a81548160ff0219169083151502179055505f612dca601a54601b54610c01565b612dd657601454612dd8565b5f5b90505f612e176002612e09601754612dfb866022546129ac90919063ffffffff16565b612a2390919063ffffffff16565b612a2390919063ffffffff16565b90505f612e2f8260225461290690919063ffffffff16565b90505f600267ffffffffffffffff811115612e4d57612e4c6143a3565b5b604051908082528060200260200182016040528015612e7b5781602001602082028036833780820191505090505b50905030815f81518110612e9257612e91613f30565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612f0257612f01613f30565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f479050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b8152600401612fa2959493929190614487565b5f604051808303815f87803b158015612fb9575f80fd5b505af1158015612fcb573d5f803e3d5ffd5b505050505f612fe3824761290690919063ffffffff16565b90505f61300e612ffd600289612a2390919063ffffffff16565b60175461290690919063ffffffff16565b90505f613049600261303b8461302d8c886129ac90919063ffffffff16565b612a2390919063ffffffff16565b612a2390919063ffffffff16565b90505f61307383613065601654876129ac90919063ffffffff16565b612a2390919063ffffffff16565b90505f5b60088054905081101561313a575f60088054905083613096919061401f565b9050600882815481106130ac576130ab613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015613119575f80fd5b505af19350505050801561312b575060015b50508080600101915050613077565b505f88111561324757601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b5f8060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016131c9969594939291906144df565b60606040518083038185885af11580156131e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061320a9190614552565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506828960405161323e929190613f5d565b60405180910390a15b5050505050505050505f60235f6101000a81548160ff021916908315150217905550565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16159050919050565b5f803073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614159050801561360c575f600290505f61334d60185461333f8461333161332260155460175461290690919063ffffffff16565b8a6129ac90919063ffffffff16565b6129ac90919063ffffffff16565b612a2390919063ffffffff16565b90505f61338b60185461337d8561336f6015548b6129ac90919063ffffffff16565b6129ac90919063ffffffff16565b612a2390919063ffffffff16565b90506133dd82600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061348f81600e5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161354e9190613971565b60405180910390a3600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135d49190613971565b60405180910390a36136016135f2828461294f90919063ffffffff16565b8761290690919063ffffffff16565b9450505050506138f2565b5f61364a60185461363c61362d60155460175461290690919063ffffffff16565b876129ac90919063ffffffff16565b612a2390919063ffffffff16565b90505f613676601854613668601554886129ac90919063ffffffff16565b612a2390919063ffffffff16565b90506136c882600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061377a81600e5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138399190613971565b60405180910390a3600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138bf9190613971565b60405180910390a36138ec6138dd828461294f90919063ffffffff16565b8661290690919063ffffffff16565b93505050505b92915050565b5f808311829061393e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139359190613a14565b60405180910390fd5b505f838561394c919061401f565b9050809150509392505050565b5f819050919050565b61396b81613959565b82525050565b5f6020820190506139845f830184613962565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139c15780820151818401526020810190506139a6565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6139e68261398a565b6139f08185613994565b9350613a008185602086016139a4565b613a09816139cc565b840191505092915050565b5f6020820190508181035f830152613a2c81846139dc565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a6182613a38565b9050919050565b613a7181613a57565b8114613a7b575f80fd5b50565b5f81359050613a8c81613a68565b92915050565b613a9b81613959565b8114613aa5575f80fd5b50565b5f81359050613ab681613a92565b92915050565b5f8060408385031215613ad257613ad1613a34565b5b5f613adf85828601613a7e565b9250506020613af085828601613aa8565b9150509250929050565b5f8115159050919050565b613b0e81613afa565b82525050565b5f602082019050613b275f830184613b05565b92915050565b5f8060408385031215613b4357613b42613a34565b5b5f613b5085828601613aa8565b9250506020613b6185828601613aa8565b9150509250929050565b5f805f60608486031215613b8257613b81613a34565b5b5f613b8f86828701613a7e565b9350506020613ba086828701613a7e565b9250506040613bb186828701613aa8565b9150509250925092565b5f60208284031215613bd057613bcf613a34565b5b5f613bdd84828501613a7e565b91505092915050565b5f60ff82169050919050565b613bfb81613be6565b82525050565b5f602082019050613c145f830184613bf2565b92915050565b5f60208284031215613c2f57613c2e613a34565b5b5f613c3c84828501613aa8565b91505092915050565b5f819050919050565b5f613c68613c63613c5e84613a38565b613c45565b613a38565b9050919050565b5f613c7982613c4e565b9050919050565b5f613c8a82613c6f565b9050919050565b613c9a81613c80565b82525050565b5f602082019050613cb35f830184613c91565b92915050565b613cc281613afa565b8114613ccc575f80fd5b50565b5f81359050613cdd81613cb9565b92915050565b5f8060408385031215613cf957613cf8613a34565b5b5f613d0685828601613a7e565b9250506020613d1785828601613ccf565b9150509250929050565b5f805f8060808587031215613d3957613d38613a34565b5b5f613d4687828801613aa8565b9450506020613d5787828801613aa8565b9350506040613d6887828801613aa8565b9250506060613d7987828801613aa8565b91505092959194509250565b5f613d8f82613c6f565b9050919050565b613d9f81613d85565b82525050565b5f602082019050613db85f830184613d96565b92915050565b613dc781613a57565b82525050565b5f602082019050613de05f830184613dbe565b92915050565b5f8060408385031215613dfc57613dfb613a34565b5b5f613e0985828601613a7e565b9250506020613e1a85828601613a7e565b9150509250929050565b5f8060408385031215613e3a57613e39613a34565b5b5f613e4785828601613ccf565b9250506020613e5885828601613aa8565b9150509250929050565b5f613e6c82613a38565b9050919050565b613e7c81613e62565b8114613e86575f80fd5b50565b5f81359050613e9781613e73565b92915050565b5f60208284031215613eb257613eb1613a34565b5b5f613ebf84828501613e89565b91505092915050565b7f21415554484f52495a45440000000000000000000000000000000000000000005f82015250565b5f613efc600b83613994565b9150613f0782613ec8565b602082019050919050565b5f6020820190508181035f830152613f2981613ef0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050613f705f830185613962565b613f7d6020830184613962565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613fbb82613959565b9150613fc683613959565b9250828202613fd481613959565b91508282048414831517613feb57613fea613f84565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61402982613959565b915061403483613959565b92508261404457614043613ff2565b5b828204905092915050565b7f546f74616c20666565732061726520746f6f20686967682100000000000000005f82015250565b5f614083601883613994565b915061408e8261404f565b602082019050919050565b5f6020820190508181035f8301526140b081614077565b9050919050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f6140eb600683613994565b91506140f6826140b7565b602082019050919050565b5f6020820190508181035f830152614118816140df565b9050919050565b5f61412982613c6f565b9050919050565b6141398161411f565b82525050565b5f6020820190506141525f830184614130565b92915050565b5f819050919050565b5f61417b61417661417184614158565b613c45565b613959565b9050919050565b61418b81614161565b82525050565b5f6040820190506141a45f830185613dbe565b6141b16020830184614182565b9392505050565b5f6040820190506141cb5f830185613dbe565b6141d86020830184613962565b9392505050565b5f6141e982613959565b91506141f483613959565b925082820390508181111561420c5761420b613f84565b5b92915050565b5f61421c82613959565b915061422783613959565b925082820190508082111561423f5761423e613f84565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614279601b83613994565b915061428482614245565b602082019050919050565b5f6020820190508181035f8301526142a68161426d565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614307602183613994565b9150614312826142ad565b604082019050919050565b5f6020820190508181035f830152614334816142fb565b9050919050565b7f5458204c696d69742045786365656465640000000000000000000000000000005f82015250565b5f61436f601183613994565b915061437a8261433b565b602082019050919050565b5f6020820190508181035f83015261439c81614363565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61440281613a57565b82525050565b5f61441383836143f9565b60208301905092915050565b5f602082019050919050565b5f614435826143d0565b61443f81856143da565b935061444a836143ea565b805f5b8381101561447a5781516144618882614408565b975061446c8361441f565b92505060018101905061444d565b5085935050505092915050565b5f60a08201905061449a5f830188613962565b6144a76020830187614182565b81810360408301526144b9818661442b565b90506144c86060830185613dbe565b6144d56080830184613962565b9695505050505050565b5f60c0820190506144f25f830189613dbe565b6144ff6020830188613962565b61450c6040830187614182565b6145196060830186614182565b6145266080830185613dbe565b61453360a0830184613962565b979650505050505050565b5f8151905061454c81613a92565b92915050565b5f805f6060848603121561456957614568613a34565b5b5f6145768682870161453e565b93505060206145878682870161453e565b92505060406145988682870161453e565b915050925092509256fea26469706673582212204ca097a14d4e0ddabe7a5211b9fc61bfbfff4b1d4242d8100646c9daf0c06e4864736f6c63430008160033608060405273a1077a294dde1b09bb078844df40758a5d0f9a2760025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000600c55603c600d55620186a0600e5534801562000083575f80fd5b5060405162001fb238038062001fb28339818101604052810190620000a9919062000225565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620000f85773165c3410fc91ef562c50559f7d2289febed552d9620000fa565b815b60035f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200026a565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620001ef82620001c4565b9050919050565b6200020181620001e3565b81146200020c575f80fd5b50565b5f815190506200021f81620001f6565b92915050565b5f80604083850312156200023e576200023d620001c0565b5b5f6200024d858286016200020f565b925050602062000260858286016200020f565b9150509250929050565b611d3a80620002785f395ff3fe6080604052600436106100e7575f3560e01c8063997664d711610089578063efca2eed11610058578063efca2eed146102bb578063f0fc6bca146102e5578063ffb2c479146102fb578063ffd49c8414610323576100e7565b8063997664d71461021f578063ce7c2ac214610249578063d0e30db014610287578063e2d2e21914610291576100e7565b80632d48e896116100c55780632d48e896146101795780633a98ef39146101a15780634fab0ae8146101cb57806395cfbd79146101f5576100e7565b806311ce023d146100eb57806314b6ca961461011557806328fd31981461013d575b5f80fd5b3480156100f6575f80fd5b506100ff61034d565b60405161010c9190611521565b60405180910390f35b348015610120575f80fd5b5061013b600480360381019061013691906115c2565b610353565b005b348015610148575f80fd5b50610163600480360381019061015e9190611600565b6105f7565b6040516101709190611521565b60405180910390f35b348015610184575f80fd5b5061019f600480360381019061019a919061162b565b610703565b005b3480156101ac575f80fd5b506101b561076b565b6040516101c29190611521565b60405180910390f35b3480156101d6575f80fd5b506101df610771565b6040516101ec9190611521565b60405180910390f35b348015610200575f80fd5b50610209610777565b60405161021691906116c4565b60405180910390f35b34801561022a575f80fd5b5061023361079c565b6040516102409190611521565b60405180910390f35b348015610254575f80fd5b5061026f600480360381019061026a9190611600565b6107a2565b60405161027e939291906116dd565b60405180910390f35b61028f6107c8565b005b34801561029c575f80fd5b506102a5610b86565b6040516102b29190611521565b60405180910390f35b3480156102c6575f80fd5b506102cf610b8c565b6040516102dc9190611521565b60405180910390f35b3480156102f0575f80fd5b506102f9610b92565b005b348015610306575f80fd5b50610321600480360381019061031c9190611712565b610b9d565b005b34801561032e575f80fd5b50610337610d22565b6040516103449190611521565b60405180910390f35b600c5481565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146103a9575f80fd5b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015411156103fa576103f982610d28565b5b5f8111801561044757505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154145b1561045a5761045582610fa6565b6104b7565b5f811480156104a757505f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b156104b6576104b582611050565b5b5b61051d8161050f60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015460085461124590919063ffffffff16565b61128e90919063ffffffff16565b6008819055508060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01819055506105af60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546112eb565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505050565b5f8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015403610646575f90506106fe565b5f61068f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546112eb565b90505f60075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206001015490508082116106e6575f925050506106fe565b6106f9818361124590919063ffffffff16565b925050505b919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610759575f80fd5b81600d8190555080600e819055505050565b60085481565b600e5481565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6007602052805f5260405f205f91509050805f0154908060010154908060020154905083565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461081e575f80fd5b5f60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610879919061174c565b602060405180830381865afa158015610894573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108b89190611779565b90505f600267ffffffffffffffff8111156108d6576108d56117a4565b5b6040519080825280602002602001820160405280156109045781602001602082028036833780820191505090505b50905060025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16815f8151811061093c5761093b6117d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106109ac576109ab6117d1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060035f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95345f8430426040518663ffffffff1660e01b8152600401610a4794939291906118ee565b5f604051808303818588803b158015610a5e575f80fd5b505af1158015610a70573d5f803e3d5ffd5b50505050505f610b218360015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610ad4919061174c565b602060405180830381865afa158015610aef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b139190611779565b61124590919063ffffffff16565b9050610b388160095461128e90919063ffffffff16565b600981905550610b7b610b6a600854610b5c84600c5461131c90919063ffffffff16565b61139390919063ffffffff16565b600b5461128e90919063ffffffff16565b600b81905550505050565b600b5481565b600a5481565b610b9b33610d28565b565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610bf3575f80fd5b5f60048054905090505f8103610c095750610d1f565b5f805a90505f5b8483108015610c1e57508381105b15610d1a5783600f5410610c34575f600f819055505b610c7a6004600f5481548110610c4d57610c4c6117d1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166113dc565b15610cc657610cc56004600f5481548110610c9857610c976117d1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610d28565b5b610ceb610cdc5a8461124590919063ffffffff16565b8461128e90919063ffffffff16565b92505a9150600f5f815480929190610d0290611965565b91905055508080610d1290611965565b915050610c10565b505050505b50565b600d5481565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540315610fa3575f610d79826105f7565b90505f811115610fa157610d9881600a5461128e90919063ffffffff16565b600a8190555060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401610dfa9291906119ac565b6020604051808303815f875af1158015610e16573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e3a9190611a08565b504260065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550610ed08160075f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015461128e90919063ffffffff16565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020181905550610f5c60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01546112eb565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505b505b50565b60048054905060055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550600481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600460016004805490506110649190611a33565b81548110611075576110746117d1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600460055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054815481106110ee576110ed6117d1565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060055f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460055f600460016004805490506111889190611a33565b81548110611199576111986117d1565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555060048054806112105761120f611a66565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b5f61128683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611446565b905092915050565b5f80828461129c9190611a93565b9050838110156112e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d890611b20565b60405180910390fd5b8091505092915050565b5f611315600c54611307600b548561131c90919063ffffffff16565b61139390919063ffffffff16565b9050919050565b5f80830361132c575f905061138d565b5f82846113399190611b3e565b90508284826113489190611bac565b14611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f90611c4c565b60405180910390fd5b809150505b92915050565b5f6113d483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506114a8565b905092915050565b5f42600d5460065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546114299190611a93565b10801561143f5750600e5461143d836105f7565b115b9050919050565b5f83831115829061148d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114849190611ce4565b60405180910390fd5b505f838561149b9190611a33565b9050809150509392505050565b5f80831182906114ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e59190611ce4565b60405180910390fd5b505f83856114fc9190611bac565b9050809150509392505050565b5f819050919050565b61151b81611509565b82525050565b5f6020820190506115345f830184611512565b92915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6115678261153e565b9050919050565b6115778161155d565b8114611581575f80fd5b50565b5f813590506115928161156e565b92915050565b6115a181611509565b81146115ab575f80fd5b50565b5f813590506115bc81611598565b92915050565b5f80604083850312156115d8576115d761153a565b5b5f6115e585828601611584565b92505060206115f6858286016115ae565b9150509250929050565b5f602082840312156116155761161461153a565b5b5f61162284828501611584565b91505092915050565b5f80604083850312156116415761164061153a565b5b5f61164e858286016115ae565b925050602061165f858286016115ae565b9150509250929050565b5f819050919050565b5f61168c6116876116828461153e565b611669565b61153e565b9050919050565b5f61169d82611672565b9050919050565b5f6116ae82611693565b9050919050565b6116be816116a4565b82525050565b5f6020820190506116d75f8301846116b5565b92915050565b5f6060820190506116f05f830186611512565b6116fd6020830185611512565b61170a6040830184611512565b949350505050565b5f602082840312156117275761172661153a565b5b5f611734848285016115ae565b91505092915050565b6117468161155d565b82525050565b5f60208201905061175f5f83018461173d565b92915050565b5f8151905061177381611598565b92915050565b5f6020828403121561178e5761178d61153a565b5b5f61179b84828501611765565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f61182161181c611817846117fe565b611669565b611509565b9050919050565b61183181611807565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6118698161155d565b82525050565b5f61187a8383611860565b60208301905092915050565b5f602082019050919050565b5f61189c82611837565b6118a68185611841565b93506118b183611851565b805f5b838110156118e15781516118c8888261186f565b97506118d383611886565b9250506001810190506118b4565b5085935050505092915050565b5f6080820190506119015f830187611828565b81810360208301526119138186611892565b9050611922604083018561173d565b61192f6060830184611512565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61196f82611509565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036119a1576119a0611938565b5b600182019050919050565b5f6040820190506119bf5f83018561173d565b6119cc6020830184611512565b9392505050565b5f8115159050919050565b6119e7816119d3565b81146119f1575f80fd5b50565b5f81519050611a02816119de565b92915050565b5f60208284031215611a1d57611a1c61153a565b5b5f611a2a848285016119f4565b91505092915050565b5f611a3d82611509565b9150611a4883611509565b9250828203905081811115611a6057611a5f611938565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f611a9d82611509565b9150611aa883611509565b9250828201905080821115611ac057611abf611938565b5b92915050565b5f82825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f611b0a601b83611ac6565b9150611b1582611ad6565b602082019050919050565b5f6020820190508181035f830152611b3781611afe565b9050919050565b5f611b4882611509565b9150611b5383611509565b9250828202611b6181611509565b91508282048414831517611b7857611b77611938565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611bb682611509565b9150611bc183611509565b925082611bd157611bd0611b7f565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f611c36602183611ac6565b9150611c4182611bdc565b604082019050919050565b5f6020820190508181035f830152611c6381611c2a565b9050919050565b5f81519050919050565b5f5b83811015611c91578082015181840152602081019050611c76565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611cb682611c6a565b611cc08185611ac6565b9350611cd0818560208601611c74565b611cd981611c9c565b840191505092915050565b5f6020820190508181035f830152611cfc8184611cac565b90509291505056fea2646970667358221220ec16425c9838e655e9f95ddb5dde291b51816ea9b49167b918da616d56d967bd64736f6c63430008160033

Deployed ByteCode

0x608060405260043610610280575f3560e01c80637d1db4a51161014e578063d51ed1c8116100c0578063f2fde38b11610079578063f2fde38b146109c9578063f708a64f146109f1578063f84ba65d14610a19578063f887ea4014610a41578063fce589d814610a6b578063fe9fbb8014610a9557610287565b8063d51ed1c81461089d578063dd62ed3e146108d9578063df20fd4914610915578063e01bb6881461093d578063e46e55b514610965578063f0b37c04146109a157610287565b80639d1944f5116101125780639d1944f514610795578063a8aa1b31146107bd578063a9059cbb146107e7578063b6a5d7de14610823578063bd9ab5371461084b578063ca33e64c1461087357610287565b80637d1db4a5146106c357806383ad7994146106ed578063893d20e81461071757806395d89b411461074157806398118cb41461076b57610287565b80632f54bf6e116101f2578063658d4b7f116101ab578063658d4b7f146105b95780636ddd1713146105e15780636fcba3771461060b57806370a0823114610633578063762816d61461066f578063763014c71461069957610287565b80632f54bf6e1461048b578063313ce567146104c757806350b492ba146104f157806350db71fb1461052d578063571ac8b0146105555780635c85974f1461059157610287565b806318160ddd1161024457806318160ddd146103815780631df4ccfc146103ab578063201e7991146103d557806323b872dd146103fd5780632b112e49146104395780632d48e8961461046357610287565b80630445b6671461028b57806306fdde03146102b5578063095ea7b3146102df5780631161ae391461031b578063180b0d7e1461035757610287565b3661028757005b5f80fd5b348015610296575f80fd5b5061029f610ad1565b6040516102ac9190613971565b60405180910390f35b3480156102c0575f80fd5b506102c9610ad7565b6040516102d69190613a14565b60405180910390f35b3480156102ea575f80fd5b5061030560048036038101906103009190613abc565b610b14565b6040516103129190613b14565b60405180910390f35b348015610326575f80fd5b50610341600480360381019061033c9190613b2d565b610c01565b60405161034e9190613b14565b60405180910390f35b348015610362575f80fd5b5061036b610c15565b6040516103789190613971565b60405180910390f35b34801561038c575f80fd5b50610395610c1b565b6040516103a29190613971565b60405180910390f35b3480156103b6575f80fd5b506103bf610c24565b6040516103cc9190613971565b60405180910390f35b3480156103e0575f80fd5b506103fb60048036038101906103f69190613b2d565b610c2a565b005b348015610408575f80fd5b50610423600480360381019061041e9190613b6b565b610c84565b6040516104309190613b14565b60405180910390f35b348015610444575f80fd5b5061044d610e77565b60405161045a9190613971565b60405180910390f35b34801561046e575f80fd5b5061048960048036038101906104849190613b2d565b610ef6565b005b348015610496575f80fd5b506104b160048036038101906104ac9190613bbb565b611002565b6040516104be9190613b14565b60405180910390f35b3480156104d2575f80fd5b506104db611059565b6040516104e89190613c01565b60405180910390f35b3480156104fc575f80fd5b5061051760048036038101906105129190613c1a565b611061565b6040516105249190613ca0565b60405180910390f35b348015610538575f80fd5b50610553600480360381019061054e9190613ce3565b61109c565b005b348015610560575f80fd5b5061057b60048036038101906105769190613bbb565b61113c565b6040516105889190613b14565b60405180910390f35b34801561059c575f80fd5b506105b760048036038101906105b29190613c1a565b61116e565b005b3480156105c4575f80fd5b506105df60048036038101906105da9190613ce3565b6111c0565b005b3480156105ec575f80fd5b506105f5611260565b6040516106029190613b14565b60405180910390f35b348015610616575f80fd5b50610631600480360381019061062c9190613d21565b611272565b005b34801561063e575f80fd5b5061065960048036038101906106549190613bbb565b611369565b6040516106669190613971565b60405180910390f35b34801561067a575f80fd5b506106836113af565b6040516106909190613da5565b60405180910390f35b3480156106a4575f80fd5b506106ad6113d4565b6040516106ba9190613dcd565b60405180910390f35b3480156106ce575f80fd5b506106d76113f9565b6040516106e49190613971565b60405180910390f35b3480156106f8575f80fd5b506107016113ff565b60405161070e9190613971565b60405180910390f35b348015610722575f80fd5b5061072b611405565b6040516107389190613dcd565b60405180910390f35b34801561074c575f80fd5b5061075561142c565b6040516107629190613a14565b60405180910390f35b348015610776575f80fd5b5061077f611469565b60405161078c9190613971565b60405180910390f35b3480156107a0575f80fd5b506107bb60048036038101906107b69190613c1a565b61146f565b005b3480156107c8575f80fd5b506107d16114cf565b6040516107de9190613dcd565b60405180910390f35b3480156107f2575f80fd5b5061080d60048036038101906108089190613abc565b6114f4565b60405161081a9190613b14565b60405180910390f35b34801561082e575f80fd5b5061084960048036038101906108449190613bbb565b611508565b005b348015610856575f80fd5b50610871600480360381019061086c9190613c1a565b6115a7565b005b34801561087e575f80fd5b50610887611613565b6040516108949190613dcd565b60405180910390f35b3480156108a8575f80fd5b506108c360048036038101906108be9190613c1a565b611638565b6040516108d09190613971565b60405180910390f35b3480156108e4575f80fd5b506108ff60048036038101906108fa9190613de6565b6116a8565b60405161090c9190613971565b60405180910390f35b348015610920575f80fd5b5061093b60048036038101906109369190613e24565b61172a565b005b348015610948575f80fd5b50610963600480360381019061095e9190613bbb565b611796565b005b348015610970575f80fd5b5061098b60048036038101906109869190613c1a565b611821565b6040516109989190613dcd565b60405180910390f35b3480156109ac575f80fd5b506109c760048036038101906109c29190613bbb565b611855565b005b3480156109d4575f80fd5b506109ef60048036038101906109ea9190613e9d565b6118f4565b005b3480156109fc575f80fd5b50610a176004803603810190610a129190613ce3565b611a09565b005b348015610a24575f80fd5b50610a3f6004803603810190610a3a9190613ce3565b611ce6565b005b348015610a4c575f80fd5b50610a55611d86565b604051610a629190613da5565b60405180910390f35b348015610a76575f80fd5b50610a7f611dab565b604051610a8c9190613971565b60405180910390f35b348015610aa0575f80fd5b50610abb6004803603810190610ab69190613bbb565b611db1565b604051610ac89190613b14565b60405180910390f35b60225481565b60606040518060400160405280601c81526020017f5354524f4e472048414e444544204652454e5320414e44204d41544800000000815250905090565b5f81600f5f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610bef9190613971565b60405180910390a36001905092915050565b5f82610c0c83611638565b11905092915050565b60185481565b5f600c54905090565b60175481565b610c3333611db1565b610c72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6990613f12565b60405180910390fd5b81601a8190555080601b819055505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205414610e6357610de6826040518060400160405280601681526020017f496e73756666696369656e7420416c6c6f77616e636500000000000000000000815250600f5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e039092919063ffffffff16565b600f5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b610e6e848484611e65565b90509392505050565b5f610ef1610ea5600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611369565b610ee3610ed2600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611369565b600c5461290690919063ffffffff16565b61290690919063ffffffff16565b905090565b610eff33611db1565b610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590613f12565b60405180910390fd5b5f5b600880549050811015610ffd5760088181548110610f6157610f60613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632d48e89684846040518363ffffffff1660e01b8152600401610fc3929190613f5d565b5f604051808303815f87803b158015610fda575f80fd5b505af1158015610fec573d5f803e3d5ffd5b505050508080600101915050610f40565b505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f6012905090565b60088181548110611070575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110a533611db1565b6110e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110db90613f12565b60405180910390fd5b8060125f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f611167827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610b14565b9050919050565b61117733611db1565b6111b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ad90613f12565b60405180910390fd5b80600d8190555050565b6111c933611db1565b611208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ff90613f12565b60405180910390fd5b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60215f9054906101000a900460ff1681565b61127b33611db1565b6112ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b190613f12565b60405180910390fd5b836014819055508260168190555081601581905550806018819055506112fb826112ed858761294f90919063ffffffff16565b61294f90919063ffffffff16565b6017819055505f6064601e836113119190613fb1565b61131b919061401f565b9050806017541115611362576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135990614099565b60405180910390fd5b5050505050565b5f600e5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b60165481565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600581526020017f4652454e53000000000000000000000000000000000000000000000000000000815250905090565b60145481565b61147833611db1565b6114b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ae90613f12565b60405180910390fd5b620b71b081106114c5575f80fd5b8060208190555050565b601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f611500338484611e65565b905092915050565b61151133611002565b611550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154790614101565b60405180910390fd5b6001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6115b033611002565b6115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e690614101565b60405180910390fd5b6103e881600c546116009190613fb1565b61160a919061401f565b600d8190555050565b60195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6116a1611644610e77565b6116936116846002611676601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611369565b6129ac90919063ffffffff16565b856129ac90919063ffffffff16565b612a2390919063ffffffff16565b9050919050565b5f600f5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61173333611db1565b611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613f12565b60405180910390fd5b8160215f6101000a81548160ff021916908315150217905550806022819055505050565b61179f33611db1565b6117de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d590613f12565b60405180910390fd5b8060195f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60028160068110611830575f80fd5b015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61185e33611002565b61189d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189490614101565b60405180910390fd5b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b6118fd33611002565b61193c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193390614101565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516119fe919061413f565b60405180910390a150565b611a1233611db1565b611a51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4890613f12565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015611ada5750601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611ae2575f80fd5b5f5b600880549050811015611ce1578160135f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508115611bf35760088181548110611b5f57611b5e613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca96845f6040518363ffffffff1660e01b8152600401611bc1929190614191565b5f604051808303815f87803b158015611bd8575f80fd5b505af1158015611bea573d5f803e3d5ffd5b50505050611cd4565b60088181548110611c0757611c06613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9684600e5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b8152600401611ca69291906141b8565b5f604051808303815f87803b158015611cbd575f80fd5b505af1158015611ccf573d5f803e3d5ffd5b505050505b8080600101915050611ae4565b505050565b611cef33611db1565b611d2e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2590613f12565b60405180910390fd5b8060115f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b5f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f838311158290611e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e419190613a14565b60405180910390fd5b505f8385611e5891906141df565b9050809150509392505050565b5f60235f9054906101000a900460ff1615611e8c57611e85848484612a6c565b90506128ff565b611e968483612c36565b5f8073165c3410fc91ef562c50559f7d2289febed552d990505f7398bf93ebf5c380c0e6ae8e192a7e2ae08edacc029050601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480611f6e5750601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b80611fc55750601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061201c5750601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061205257508173ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b8061208857508173ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806120be57508073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806120f457508073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b8061214b5750601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806121a25750601e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b806121f95750601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b806122505750601f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff16145b156123e95761225d612cd0565b1561226b5761226a612da1565b5b6122f2856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e039092919063ffffffff16565b600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061233c8761326b565b6123465784612351565b61235087866132be565b5b92506123a383600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612546565b612470856040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e039092919063ffffffff16565b600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555084925061250483600e5f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b60135f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661268e575f5b60088054905081101561268c57600881815481106125b7576125b6613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9689600e5f8c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b81526004016126569291906141b8565b5f604051808303815f87803b15801561266d575f80fd5b505af192505050801561267e575060015b508080600101915050612596565b505b60135f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166127d6575f5b6008805490508110156127d457600881815481106126ff576126fe613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166314b6ca9688600e5f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546040518363ffffffff1660e01b815260040161279e9291906141b8565b5f604051808303815f87803b1580156127b5575f80fd5b505af19250505080156127c6575060015b5080806001019150506126de565b505b5f5b60088054905081101561289157600881815481106127f9576127f8613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ffb2c4796020546040518263ffffffff1660e01b815260040161285b9190613971565b5f604051808303815f87803b158015612872575f80fd5b505af1925050508015612883575060015b5080806001019150506127d8565b508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516128ef9190613971565b60405180910390a3600193505050505b9392505050565b5f61294783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e03565b905092915050565b5f80828461295d9190614212565b9050838110156129a2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129999061428f565b60405180910390fd5b8091505092915050565b5f8083036129bc575f9050612a1d565b5f82846129c99190613fb1565b90508284826129d8919061401f565b14612a18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0f9061431d565b60405180910390fd5b809150505b92915050565b5f612a6483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506138f8565b905092915050565b5f612af4826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600e5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611e039092919063ffffffff16565b600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550612b8582600e5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612c239190613971565b60405180910390a3600190509392505050565b600d5481111580612c8d575060115f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cc390614385565b60405180910390fd5b5050565b5f601d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015612d3a575060235f9054906101000a900460ff16155b8015612d51575060215f9054906101000a900460ff165b8015612d9c5750602254600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410155b905090565b600160235f6101000a81548160ff0219169083151502179055505f612dca601a54601b54610c01565b612dd657601454612dd8565b5f5b90505f612e176002612e09601754612dfb866022546129ac90919063ffffffff16565b612a2390919063ffffffff16565b612a2390919063ffffffff16565b90505f612e2f8260225461290690919063ffffffff16565b90505f600267ffffffffffffffff811115612e4d57612e4c6143a3565b5b604051908082528060200260200182016040528015612e7b5781602001602082028036833780820191505090505b50905030815f81518110612e9257612e91613f30565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110612f0257612f01613f30565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250505f479050601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8530426040518663ffffffff1660e01b8152600401612fa2959493929190614487565b5f604051808303815f87803b158015612fb9575f80fd5b505af1158015612fcb573d5f803e3d5ffd5b505050505f612fe3824761290690919063ffffffff16565b90505f61300e612ffd600289612a2390919063ffffffff16565b60175461290690919063ffffffff16565b90505f613049600261303b8461302d8c886129ac90919063ffffffff16565b612a2390919063ffffffff16565b612a2390919063ffffffff16565b90505f61307383613065601654876129ac90919063ffffffff16565b612a2390919063ffffffff16565b90505f5b60088054905081101561313a575f60088054905083613096919061401f565b9050600882815481106130ac576130ab613f30565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004015f604051808303818588803b158015613119575f80fd5b505af19350505050801561312b575060015b50508080600101915050613077565b505f88111561324757601c5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71983308b5f8060195f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016131c9969594939291906144df565b60606040518083038185885af11580156131e5573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061320a9190614552565b5050507f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b4506828960405161323e929190613f5d565b60405180910390a15b5050505050505050505f60235f6101000a81548160ff021916908315150217905550565b5f60105f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16159050919050565b5f803073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614159050801561360c575f600290505f61334d60185461333f8461333161332260155460175461290690919063ffffffff16565b8a6129ac90919063ffffffff16565b6129ac90919063ffffffff16565b612a2390919063ffffffff16565b90505f61338b60185461337d8561336f6015548b6129ac90919063ffffffff16565b6129ac90919063ffffffff16565b612a2390919063ffffffff16565b90506133dd82600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061348f81600e5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161354e9190613971565b60405180910390a3600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516135d49190613971565b60405180910390a36136016135f2828461294f90919063ffffffff16565b8761290690919063ffffffff16565b9450505050506138f2565b5f61364a60185461363c61362d60155460175461290690919063ffffffff16565b876129ac90919063ffffffff16565b612a2390919063ffffffff16565b90505f613676601854613668601554886129ac90919063ffffffff16565b612a2390919063ffffffff16565b90506136c882600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061377a81600e5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461294f90919063ffffffff16565b600e5f600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138399190613971565b60405180910390a3600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516138bf9190613971565b60405180910390a36138ec6138dd828461294f90919063ffffffff16565b8661290690919063ffffffff16565b93505050505b92915050565b5f808311829061393e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139359190613a14565b60405180910390fd5b505f838561394c919061401f565b9050809150509392505050565b5f819050919050565b61396b81613959565b82525050565b5f6020820190506139845f830184613962565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156139c15780820151818401526020810190506139a6565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6139e68261398a565b6139f08185613994565b9350613a008185602086016139a4565b613a09816139cc565b840191505092915050565b5f6020820190508181035f830152613a2c81846139dc565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613a6182613a38565b9050919050565b613a7181613a57565b8114613a7b575f80fd5b50565b5f81359050613a8c81613a68565b92915050565b613a9b81613959565b8114613aa5575f80fd5b50565b5f81359050613ab681613a92565b92915050565b5f8060408385031215613ad257613ad1613a34565b5b5f613adf85828601613a7e565b9250506020613af085828601613aa8565b9150509250929050565b5f8115159050919050565b613b0e81613afa565b82525050565b5f602082019050613b275f830184613b05565b92915050565b5f8060408385031215613b4357613b42613a34565b5b5f613b5085828601613aa8565b9250506020613b6185828601613aa8565b9150509250929050565b5f805f60608486031215613b8257613b81613a34565b5b5f613b8f86828701613a7e565b9350506020613ba086828701613a7e565b9250506040613bb186828701613aa8565b9150509250925092565b5f60208284031215613bd057613bcf613a34565b5b5f613bdd84828501613a7e565b91505092915050565b5f60ff82169050919050565b613bfb81613be6565b82525050565b5f602082019050613c145f830184613bf2565b92915050565b5f60208284031215613c2f57613c2e613a34565b5b5f613c3c84828501613aa8565b91505092915050565b5f819050919050565b5f613c68613c63613c5e84613a38565b613c45565b613a38565b9050919050565b5f613c7982613c4e565b9050919050565b5f613c8a82613c6f565b9050919050565b613c9a81613c80565b82525050565b5f602082019050613cb35f830184613c91565b92915050565b613cc281613afa565b8114613ccc575f80fd5b50565b5f81359050613cdd81613cb9565b92915050565b5f8060408385031215613cf957613cf8613a34565b5b5f613d0685828601613a7e565b9250506020613d1785828601613ccf565b9150509250929050565b5f805f8060808587031215613d3957613d38613a34565b5b5f613d4687828801613aa8565b9450506020613d5787828801613aa8565b9350506040613d6887828801613aa8565b9250506060613d7987828801613aa8565b91505092959194509250565b5f613d8f82613c6f565b9050919050565b613d9f81613d85565b82525050565b5f602082019050613db85f830184613d96565b92915050565b613dc781613a57565b82525050565b5f602082019050613de05f830184613dbe565b92915050565b5f8060408385031215613dfc57613dfb613a34565b5b5f613e0985828601613a7e565b9250506020613e1a85828601613a7e565b9150509250929050565b5f8060408385031215613e3a57613e39613a34565b5b5f613e4785828601613ccf565b9250506020613e5885828601613aa8565b9150509250929050565b5f613e6c82613a38565b9050919050565b613e7c81613e62565b8114613e86575f80fd5b50565b5f81359050613e9781613e73565b92915050565b5f60208284031215613eb257613eb1613a34565b5b5f613ebf84828501613e89565b91505092915050565b7f21415554484f52495a45440000000000000000000000000000000000000000005f82015250565b5f613efc600b83613994565b9150613f0782613ec8565b602082019050919050565b5f6020820190508181035f830152613f2981613ef0565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f604082019050613f705f830185613962565b613f7d6020830184613962565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613fbb82613959565b9150613fc683613959565b9250828202613fd481613959565b91508282048414831517613feb57613fea613f84565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61402982613959565b915061403483613959565b92508261404457614043613ff2565b5b828204905092915050565b7f546f74616c20666565732061726520746f6f20686967682100000000000000005f82015250565b5f614083601883613994565b915061408e8261404f565b602082019050919050565b5f6020820190508181035f8301526140b081614077565b9050919050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f6140eb600683613994565b91506140f6826140b7565b602082019050919050565b5f6020820190508181035f830152614118816140df565b9050919050565b5f61412982613c6f565b9050919050565b6141398161411f565b82525050565b5f6020820190506141525f830184614130565b92915050565b5f819050919050565b5f61417b61417661417184614158565b613c45565b613959565b9050919050565b61418b81614161565b82525050565b5f6040820190506141a45f830185613dbe565b6141b16020830184614182565b9392505050565b5f6040820190506141cb5f830185613dbe565b6141d86020830184613962565b9392505050565b5f6141e982613959565b91506141f483613959565b925082820390508181111561420c5761420b613f84565b5b92915050565b5f61421c82613959565b915061422783613959565b925082820190508082111561423f5761423e613f84565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f614279601b83613994565b915061428482614245565b602082019050919050565b5f6020820190508181035f8301526142a68161426d565b9050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f614307602183613994565b9150614312826142ad565b604082019050919050565b5f6020820190508181035f830152614334816142fb565b9050919050565b7f5458204c696d69742045786365656465640000000000000000000000000000005f82015250565b5f61436f601183613994565b915061437a8261433b565b602082019050919050565b5f6020820190508181035f83015261439c81614363565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61440281613a57565b82525050565b5f61441383836143f9565b60208301905092915050565b5f602082019050919050565b5f614435826143d0565b61443f81856143da565b935061444a836143ea565b805f5b8381101561447a5781516144618882614408565b975061446c8361441f565b92505060018101905061444d565b5085935050505092915050565b5f60a08201905061449a5f830188613962565b6144a76020830187614182565b81810360408301526144b9818661442b565b90506144c86060830185613dbe565b6144d56080830184613962565b9695505050505050565b5f60c0820190506144f25f830189613dbe565b6144ff6020830188613962565b61450c6040830187614182565b6145196060830186614182565b6145266080830185613dbe565b61453360a0830184613962565b979650505050505050565b5f8151905061454c81613a92565b92915050565b5f805f6060848603121561456957614568613a34565b5b5f6145768682870161453e565b93505060206145878682870161453e565b92505060406145988682870161453e565b915050925092509256fea26469706673582212204ca097a14d4e0ddabe7a5211b9fc61bfbfff4b1d4242d8100646c9daf0c06e4864736f6c63430008160033