ETH Price: $2,621.59 (+7.45%)
 
Transaction Hash
Method
Block
From
To
Approve208848362024-10-03 11:57:2333 days ago1727956643IN
0x313BfD22...198390007
0 ETH0.000150185.58210074
_claim Dividend208235942024-09-24 22:58:2342 days ago1727218703IN
0x313BfD22...198390007
0 ETH0.0003578615.22976265
_claim Dividend208235602024-09-24 22:51:3542 days ago1727218295IN
0x313BfD22...198390007
0 ETH0.0003889616.55300325
_claim Dividend207826192024-09-19 5:42:2348 days ago1726724543IN
0x313BfD22...198390007
0 ETH0.000226069.62077196
Transfer207687432024-09-17 7:09:2350 days ago1726556963IN
0x313BfD22...198390007
0 ETH0.000366172.84168951
Transfer207687382024-09-17 7:08:2350 days ago1726556903IN
0x313BfD22...198390007
0 ETH0.000573032.79443643
Rescue ERC20207633592024-09-16 13:04:4750 days ago1726491887IN
0x313BfD22...198390007
0 ETH0.000530426.08438775
Approve207302712024-09-11 22:11:4755 days ago1726092707IN
0x313BfD22...198390007
0 ETH0.000159853.41449319
Approve207029552024-09-08 2:38:1159 days ago1725763091IN
0x313BfD22...198390007
0 ETH0.000038781.4414059
_claim Dividend206068282024-08-25 16:34:3572 days ago1724603675IN
0x313BfD22...198390007
0 ETH0.000113141.14624723
_claim Dividend206067912024-08-25 16:26:5972 days ago1724603219IN
0x313BfD22...198390007
0 ETH0.000098170.99462635
Approve206036922024-08-25 6:02:4773 days ago1724565767IN
0x313BfD22...198390007
0 ETH0.000027591.02564714
_claim Dividend205965312024-08-24 6:00:2374 days ago1724479223IN
0x313BfD22...198390007
0 ETH0.000096330.97592239
_claim Dividend205957802024-08-24 3:28:5974 days ago1724470139IN
0x313BfD22...198390007
0 ETH0.000088040.89195331
_claim Dividend205933192024-08-23 19:14:2374 days ago1724440463IN
0x313BfD22...198390007
0 ETH0.000690984.60624997
Approve205932422024-08-23 18:58:3574 days ago1724439515IN
0x313BfD22...198390007
0 ETH0.000152533.23742226
Approve205930332024-08-23 18:16:4774 days ago1724437007IN
0x313BfD22...198390007
0 ETH0.000327986.96112309
Approve205929012024-08-23 17:49:5974 days ago1724435399IN
0x313BfD22...198390007
0 ETH0.000361387.66217386
Approve205928992024-08-23 17:49:3574 days ago1724435375IN
0x313BfD22...198390007
0 ETH0.000151313.21140741
Approve205928772024-08-23 17:45:1174 days ago1724435111IN
0x313BfD22...198390007
0 ETH0.000321766.82201683
Approve205928752024-08-23 17:44:4774 days ago1724435087IN
0x313BfD22...198390007
0 ETH0.00012952.7486889
Approve205928732024-08-23 17:44:2374 days ago1724435063IN
0x313BfD22...198390007
0 ETH0.000321866.82432029
Approve205928712024-08-23 17:43:5974 days ago1724435039IN
0x313BfD22...198390007
0 ETH0.000226614.80347814
Approve205928712024-08-23 17:43:5974 days ago1724435039IN
0x313BfD22...198390007
0 ETH0.000226614.80347814
Approve205928692024-08-23 17:43:3574 days ago1724435015IN
0x313BfD22...198390007
0 ETH0.000315566.68893957
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
207377552024-09-12 23:17:2354 days ago1726183043
0x313BfD22...198390007
0.00077231 ETH
207377552024-09-12 23:17:2354 days ago1726183043
0x313BfD22...198390007
0.00230772 ETH
207377552024-09-12 23:17:2354 days ago1726183043
0x313BfD22...198390007
0.00308004 ETH
205930352024-08-23 18:17:1174 days ago1724437031
0x313BfD22...198390007
0.00121732 ETH
205930352024-08-23 18:17:1174 days ago1724437031
0x313BfD22...198390007
0.00363741 ETH
205930352024-08-23 18:17:1174 days ago1724437031
0x313BfD22...198390007
0.00485473 ETH
205929512024-08-23 17:59:5974 days ago1724435999
0x313BfD22...198390007
0.00240494 ETH
205929512024-08-23 17:59:5974 days ago1724435999
0x313BfD22...198390007
0.00718608 ETH
205929512024-08-23 17:59:5974 days ago1724435999
0x313BfD22...198390007
0.00959102 ETH
205928962024-08-23 17:48:5974 days ago1724435339
0x313BfD22...198390007
0.00452757 ETH
205928962024-08-23 17:48:5974 days ago1724435339
0x313BfD22...198390007
0.01352861 ETH
205928962024-08-23 17:48:5974 days ago1724435339
0x313BfD22...198390007
0.01805619 ETH
205928842024-08-23 17:46:3574 days ago1724435195
0x313BfD22...198390007
0.00545582 ETH
205928842024-08-23 17:46:3574 days ago1724435195
0x313BfD22...198390007
0.01630227 ETH
205928842024-08-23 17:46:3574 days ago1724435195
0x313BfD22...198390007
0.0217581 ETH
205928632024-08-23 17:42:2374 days ago1724434943
0x313BfD22...198390007
0.00392949 ETH
205928632024-08-23 17:42:2374 days ago1724434943
0x313BfD22...198390007
0.01174151 ETH
205928632024-08-23 17:42:2374 days ago1724434943
0x313BfD22...198390007
0.01567101 ETH
205624872024-08-19 11:50:3578 days ago1724068235
0x313BfD22...198390007
0.00175334 ETH
205624872024-08-19 11:50:3578 days ago1724068235
0x313BfD22...198390007
0.00523907 ETH
205624872024-08-19 11:50:3578 days ago1724068235
0x313BfD22...198390007
0.00699241 ETH
205565252024-08-18 15:51:2379 days ago1723996283
0x313BfD22...198390007
0.00359057 ETH
205565252024-08-18 15:51:2379 days ago1723996283
0x313BfD22...198390007
0.0107288 ETH
205565252024-08-18 15:51:2379 days ago1723996283
0x313BfD22...198390007
0.01431938 ETH
205543782024-08-18 8:40:3580 days ago1723970435
0x313BfD22...198390007
0.00387257 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
NeiroDeniro

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-08-17
*/

/**
https://t.me/NeiroDinero

https://x.com/NeiroDinero

https://NeiroDinero.com

Neiro Deniro ($NERO) (Deniro = Money in Spanish)

As $NEIRO establishes itself as the heir apparent to $PEPE, we are excited to introduce a token that not only DYNAMICALLY responds to buys but also increases in value!

We believe that NEIRO rewards have the potential to increase tenfold from their current market cap. That means your $100 in rewards could soon become $1,000!

Enjoy the ride as your $NERO earns you NEIRO, and watch your portfolio soar!

As always, this is for entertainment purposes only. Let’s have a party!

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.26;


library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {return a + b;}
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {return a - b;}
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {return a * b;}
    function div(uint256 a, uint256 b) internal pure returns (uint256) {return a / b;}
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {return a % b;}
    
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {uint256 c = a + b; if(c < a) return(false, 0); return(true, c);}}

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b > a) return(false, 0); return(true, a - b);}}

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if (a == 0) return(true, 0); uint256 c = a * b;
        if(c / a != b) return(false, 0); return(true, c);}}

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a / b);}}

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {if(b == 0) return(false, 0); return(true, a % b);}}

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b <= a, errorMessage); return a - b;}}

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a / b;}}

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked{require(b > 0, errorMessage); return a % b;}}}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function circulatingSupply() 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 Ownable {
    address internal owner;
    constructor(address _owner) {owner = _owner;}
    modifier onlyOwner() {require(isOwner(msg.sender), "!OWNER"); _;}
    function isOwner(address account) public view returns (bool) {return account == owner;}
    function transferOwnership(address payable adr) public onlyOwner {owner = adr; emit OwnershipTransferred(adr);}
    event OwnershipTransferred(address owner);
}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);

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

contract NeiroDeniro is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'Neiro Dinero';
    string private constant _symbol = 'NERO';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 private _maxTxAmount = ( _totalSupply * 150 ) / 10000;
    uint256 private _maxSellAmount = ( _totalSupply * 150 ) / 10000;
    uint256 private _maxWalletToken = ( _totalSupply * 300 ) / 10000;
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) public isFeeExempt;
    mapping (address => bool) public isDividendExempt;
    mapping (address => bool) private isBot;
    IRouter router;
    address public pair;
    bool private tradingAllowed = false;
    uint256 private liquidityFee = 0;
    uint256 private marketingFee = 0;
    uint256 private rewardsFee = 750;
    uint256 private developmentFee = 250;
    uint256 private burnFee = 0;
    uint256 private totalFee = 1200;
    uint256 private sellFee = 2400;
    uint256 private transferFee = 2400;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping; 
    uint256 private swapThreshold = ( _totalSupply * 345 ) / 100000;
    uint256 private _minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    address public reward = 0x812Ba41e071C7b7fA4EBcFB62dF5F45f6fA853Ee;
    uint256 public totalShares;
    uint256 public totalDividends;
    uint256 public totalDistributed;
    uint256 internal dividendsPerShare;
    uint256 internal dividendsPerShareAccuracyFactor = 10 ** 36;
    address[] shareholders;
    mapping (address => uint256) shareholderIndexes;
    mapping (address => uint256) shareholderClaims;
    struct Share {uint256 amount; uint256 totalExcluded; uint256 totalRealised; }
    mapping (address => Share) public shares;
    uint256 internal currentIndex;
    uint256 public minPeriod = 720 minutes;
    uint256 public minDistribution = 1 * (8 ** 9);
    uint256 public distributorGas = 0;
    function _claimDividend() external {distributeDividend(msg.sender);}

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant development_receiver = 0x0539a06EDbe9fDb89c1107C7A7d513679e2a2170; 
    address internal constant marketing_receiver = 0x8D749f30194fF087AE898CEafec78601f7344730;
    address internal constant liquidity_receiver = 0x8D749f30194fF087AE898CEafec78601f7344730;

    constructor() Ownable(msg.sender) {
        IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(address(this), _router.WETH());
        router = _router;
        pair = _pair;
        isFeeExempt[address(this)] = true;
        isFeeExempt[liquidity_receiver] = true;
        isFeeExempt[marketing_receiver] = true;
        isFeeExempt[msg.sender] = true;
        isDividendExempt[address(pair)] = true;
        isDividendExempt[address(msg.sender)] = true;        
        isDividendExempt[address(this)] = true;
        isDividendExempt[address(DEAD)] = true;
        isDividendExempt[address(0)] = true;
        _balances[msg.sender] = _totalSupply;
        emit Transfer(address(0), msg.sender, _totalSupply);
    }




    receive() external payable {}
    function name() public pure returns (string memory) {return _name;}
    function symbol() public pure returns (string memory) {return _symbol;}
    function decimals() public pure returns (uint8) {return _decimals;}
    function getOwner() external view override returns (address) { return owner; }
    function totalSupply() public view override returns (uint256) {return _totalSupply;}
    function balanceOf(address account) public view override returns (uint256) {return _balances[account];}
    function transfer(address recipient, uint256 amount) public override returns (bool) {_transfer(msg.sender, recipient, amount);return true;}
    function allowance(address owner, address spender) public view override returns (uint256) {return _allowances[owner][spender];}
    function isCont(address addr) internal view returns (bool) {uint size; assembly { size := extcodesize(addr) } return size > 0; }
    function setisExempt(address _address, bool _enabled) external onlyOwner {isFeeExempt[_address] = _enabled;}
    function approve(address spender, uint256 amount) public override returns (bool) {_approve(msg.sender, spender, amount);return true;}
    function circulatingSupply() public view override returns (uint256) {return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(address(0)));}

    function startTrading() external onlyOwner {
        require(!tradingAllowed,"trading is already open");
        tradingAllowed = true;
    }

    function preTxCheck(address sender, address recipient, uint256 amount) internal view {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > uint256(0), "Transfer amount must be greater than zero");
        require(amount <= balanceOf(sender),"You are trying to transfer more than your balance");
    }

    function _transfer(address sender, address recipient, uint256 amount) private {
        preTxCheck(sender, recipient, amount);
        checkTradingAllowed(sender, recipient);
        checkMaxWallet(sender, recipient, amount); 
        swapbackCounters(sender, recipient);
        checkTxLimit(sender, recipient, amount); 
        swapBack(sender, recipient, amount);
        _balances[sender] = _balances[sender].sub(amount);
        uint256 amountReceived = shouldTakeFee(sender, recipient) ? takeFee(sender, recipient, amount) : amount;
        _balances[recipient] = _balances[recipient].add(amountReceived);
        emit Transfer(sender, recipient, amountReceived);
        if(!isDividendExempt[sender]){setShare(sender, balanceOf(sender));}
        if(!isDividendExempt[recipient]){setShare(recipient, balanceOf(recipient));}
        if(shares[recipient].amount > 0){distributeDividend(recipient);}
        process(distributorGas);
    }

    function setStructure(uint256 _liquidity, uint256 _marketing, uint256 _burn, uint256 _rewards, uint256 _development, uint256 _total, uint256 _sell, uint256 _trans) external onlyOwner {
        liquidityFee = _liquidity;
        marketingFee = _marketing;
        burnFee = _burn;
        rewardsFee = _rewards;
        developmentFee = _development;
        totalFee = _total;
        sellFee = _sell;
        transferFee = _trans;
        require(totalFee <= denominator.div(10) && sellFee <= denominator.div(10) && transferFee <= denominator.div(10), "totalFee and sellFee cannot be more than 10%");
    }

    function setisBot(address _address, bool _enabled) external onlyOwner {
        require(_address != address(pair) && _address != address(router) && _address != address(this), "Ineligible Address");
        isBot[_address] = _enabled;
    }

    function setParameters(uint256 _buy, uint256 _trans, uint256 _wallet) external onlyOwner {
        uint256 newTx = (totalSupply() * _buy) / 10000;
        uint256 newTransfer = (totalSupply() * _trans) / 10000;
        uint256 newWallet = (totalSupply() * _wallet) / 10000;
        _maxTxAmount = newTx;
        _maxSellAmount = newTransfer;
        _maxWalletToken = newWallet;
        uint256 limit = totalSupply().mul(5).div(1000);
        require(newTx >= limit && newTransfer >= limit && newWallet >= limit, "Max TXs and Max Wallet cannot be less than .5%");
    }

    function checkTradingAllowed(address sender, address recipient) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient]){require(tradingAllowed, "tradingAllowed");}
    }
    
    function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
        if(!isFeeExempt[sender] && !isFeeExempt[recipient] && recipient != address(pair) && recipient != address(DEAD)){
            require((_balances[recipient].add(amount)) <= _maxWalletToken, "Exceeds maximum wallet amount.");}
    }

    function swapbackCounters(address sender, address recipient) internal {
        if(recipient == pair && !isFeeExempt[sender]){swapTimes += uint256(1);}
    }

    function checkTxLimit(address sender, address recipient, uint256 amount) internal view {
        if(sender != pair){require(amount <= _maxSellAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");}
        require(amount <= _maxTxAmount || isFeeExempt[sender] || isFeeExempt[recipient], "TX Limit Exceeded");
    }

    function swapAndLiquify(uint256 tokens) private lockTheSwap {
        uint256 _denominator = (liquidityFee.add(1).add(marketingFee).add(developmentFee).add(rewardsFee)).mul(2);
        uint256 tokensToAddLiquidityWith = tokens.mul(liquidityFee).div(_denominator);
        uint256 toSwap = tokens.sub(tokensToAddLiquidityWith);
        uint256 initialBalance = address(this).balance;
        swapTokensForETH(toSwap);
        uint256 deltaBalance = address(this).balance.sub(initialBalance);
        uint256 unitBalance= deltaBalance.div(_denominator.sub(liquidityFee));
        uint256 ETHToAddLiquidityWith = unitBalance.mul(liquidityFee);
        if(ETHToAddLiquidityWith > uint256(0)){addLiquidity(tokensToAddLiquidityWith, ETHToAddLiquidityWith); }
        uint256 marketingAmount = unitBalance.mul(2).mul(marketingFee);
        if(marketingAmount > 0){payable(marketing_receiver).transfer(marketingAmount);}
        uint256 rewardsAmount = unitBalance.mul(2).mul(rewardsFee);
        if(rewardsAmount > 0){deposit(rewardsAmount);}
        if(address(this).balance > uint256(0)){payable(development_receiver).transfer(address(this).balance);}
    }

    function addLiquidity(uint256 tokenAmount, uint256 ETHAmount) private {
        _approve(address(this), address(router), tokenAmount);
        router.addLiquidityETH{value: ETHAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            liquidity_receiver,
            block.timestamp);
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();
        _approve(address(this), address(router), tokenAmount);
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp);
    }

    function shouldSwapBack(address sender, address recipient, uint256 amount) internal view returns (bool) {
        bool aboveMin = amount >= _minTokenAmount;
        bool aboveThreshold = balanceOf(address(this)) >= swapThreshold;
        return !swapping && swapEnabled && tradingAllowed && aboveMin && !isFeeExempt[sender] && recipient == pair && swapTimes >= uint256(2) && aboveThreshold;
    }

    function swapBack(address sender, address recipient, uint256 amount) internal {
        if(shouldSwapBack(sender, recipient, amount)){swapAndLiquify(swapThreshold); swapTimes = uint256(0);}
    }

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

    function getTotalFee(address sender, address recipient) internal view returns (uint256) {
        if(isBot[sender] || isBot[recipient]){return denominator.sub(uint256(100));}
        if(recipient == pair){return sellFee;}
        if(sender == pair){return totalFee;}
        return transferFee;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        if(getTotalFee(sender, recipient) > 0){
        uint256 feeAmount = amount.div(denominator).mul(getTotalFee(sender, recipient));
        _balances[address(this)] = _balances[address(this)].add(feeAmount);
        emit Transfer(sender, address(this), feeAmount);
        if(burnFee > uint256(0)){_transfer(address(this), address(DEAD), amount.div(denominator).mul(burnFee));}
        return amount.sub(feeAmount);} return amount;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function setisDividendExempt(address holder, bool exempt) external onlyOwner {
        isDividendExempt[holder] = exempt;
        if(exempt){setShare(holder, 0);}
        else{setShare(holder, balanceOf(holder)); }
    }

    function setShare(address shareholder, uint256 amount) internal {
        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(uint256 amountETH) internal {
        uint256 balanceBefore = IERC20(reward).balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = router.WETH();
        path[1] = address(reward);
        router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amountETH}(
            0,
            path,
            address(this),
            block.timestamp);
        uint256 amount = IERC20(reward).balanceOf(address(this)).sub(balanceBefore);
        totalDividends = totalDividends.add(amount);
        dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
    }

    function process(uint256 gas) internal {
        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 rescueERC20(address _address, uint256 _amount) external onlyOwner {
        IERC20(_address).transfer(msg.sender, _amount);
    }
    
    function shouldDistribute(address shareholder) internal view returns (bool) {
        return shareholderClaims[shareholder] + minPeriod < block.timestamp
                && getUnpaidEarnings(shareholder) > minDistribution;
    }

    function totalRewardsDistributed(address _wallet) external view returns (uint256) {
        address shareholder = _wallet;
        return uint256(shares[shareholder].totalRealised);
    }

    function distributeDividend(address shareholder) internal {
        if(shares[shareholder].amount == 0){ return; }
        uint256 amount = getUnpaidEarnings(shareholder);
        if(amount > 0){
            totalDistributed = totalDistributed.add(amount);
            IERC20(reward).transfer(shareholder, amount);
            shareholderClaims[shareholder] = block.timestamp;
            shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
            shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);}
    }

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

    function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution, uint256 _distributorGas) external onlyOwner {
        minPeriod = _minPeriod;
        minDistribution = _minDistribution;
        distributorGas = _distributorGas;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"circulatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributorGas","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDividendExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDistribution","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minPeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reward","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"},{"internalType":"uint256","name":"_distributorGas","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"},{"internalType":"uint256","name":"_wallet","type":"uint256"}],"name":"setParameters","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_burn","type":"uint256"},{"internalType":"uint256","name":"_rewards","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"_total","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"},{"internalType":"uint256","name":"_trans","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setisDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setisExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"totalExcluded","type":"uint256"},{"internalType":"uint256","name":"totalRealised","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_wallet","type":"address"}],"name":"totalRewardsDistributed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"adr","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526009600a6100129190610945565b633b9aca00610021919061098f565b6001556127106096600154610036919061098f565b61004091906109fd565b6002556127106096600154610055919061098f565b61005f91906109fd565b60035561271061012c600154610075919061098f565b61007f91906109fd565b6004555f600b60146101000a81548160ff0219169083151502179055505f600c555f600d556102ee600e5560fa600f555f6010556104b0601155610960601255610960601355612710601455600160155f6101000a81548160ff021916908315150217905550620186a06101596001546100f9919061098f565b61010391906109fd565b601855620186a0600a600154610119919061098f565b61012391906109fd565b60195573812ba41e071c7b7fa4ebcfb62df5f45f6fa853ee601a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000601f5561a8c060255563080000006026555f6027553480156101aa575f80fd5b5033805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561024e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102729190610a8b565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102fb9190610a8b565b6040518363ffffffff1660e01b8152600401610318929190610ac5565b6020604051808303815f875af1158015610334573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103589190610a8b565b905081600a5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f738d749f30194ff087ae898ceafec78601f734473073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f738d749f30194ff087ae898ceafec78601f734473073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160085f8073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555060015460055f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6001546040516107c59190610afb565b60405180910390a35050610b14565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111561085657808604811115610832576108316107d4565b5b60018516156108415780820291505b808102905061084f85610801565b9450610816565b94509492505050565b5f8261086e5760019050610929565b8161087b575f9050610929565b8160018114610891576002811461089b576108ca565b6001915050610929565b60ff8411156108ad576108ac6107d4565b5b8360020a9150848211156108c4576108c36107d4565b5b50610929565b5060208310610133831016604e8410600b84101617156108ff5782820a9050838111156108fa576108f96107d4565b5b610929565b61090c848484600161080d565b92509050818404811115610923576109226107d4565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f61094f82610930565b915061095a83610939565b92506109877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461085f565b905092915050565b5f61099982610930565b91506109a483610930565b92508282026109b281610930565b915082820484148315176109c9576109c86107d4565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f610a0782610930565b9150610a1283610930565b925082610a2257610a216109d0565b5b828204905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f610a5a82610a31565b9050919050565b610a6a81610a50565b8114610a74575f80fd5b50565b5f81519050610a8581610a61565b92915050565b5f60208284031215610aa057610a9f610a2d565b5b5f610aad84828501610a77565b91505092915050565b610abf81610a50565b82525050565b5f604082019050610ad85f830185610ab6565b610ae56020830184610ab6565b9392505050565b610af581610930565b82525050565b5f602082019050610b0e5f830184610aec565b92915050565b614bb580610b215f395ff3fe608060405260043610610207575f3560e01c806370a0823111610117578063c942435d1161009f578063e2d6f94c1161006e578063e2d6f94c14610794578063ef43b02b146107bc578063efca2eed146107e4578063f2fde38b1461080e578063ffd49c84146108365761020e565b8063c942435d146106c8578063ca89b899146106de578063ce7c2ac21461071a578063dd62ed3e146107585761020e565b80639358928b116100e65780639358928b146105e457806395d89b411461060e578063997664d714610638578063a8aa1b3114610662578063a9059cbb1461068c5761020e565b806370a082311461052e578063893d20e81461056a5780638c41180e146105945780638cd4426d146105bc5761020e565b80632f54bf6e1161019a5780633f4218e0116101695780633f4218e01461043a5780634355855a1461047657806348ff2b8b146104b25780634fab0ae8146104da57806360e71962146105045761020e565b80632f54bf6e14610382578063313ce567146103be57806334c5d2ce146103e85780633a98ef39146104105761020e565b8063228cb733116101d6578063228cb733146102ca57806323b872dd146102f457806328fd319814610330578063293230b81461036c5761020e565b806306fdde0314610212578063095ea7b31461023c5780630ca61cb11461027857806318160ddd146102a05761020e565b3661020e57005b5f80fd5b34801561021d575f80fd5b50610226610860565b6040516102339190613a7c565b60405180910390f35b348015610247575f80fd5b50610262600480360381019061025d9190613b2d565b61089d565b60405161026f9190613b85565b60405180910390f35b348015610283575f80fd5b5061029e60048036038101906102999190613b9e565b6108b3565b005b3480156102ab575f80fd5b506102b4610915565b6040516102c19190613bfd565b60405180910390f35b3480156102d5575f80fd5b506102de61091e565b6040516102eb9190613c25565b60405180910390f35b3480156102ff575f80fd5b5061031a60048036038101906103159190613c3e565b610943565b6040516103279190613b85565b60405180910390f35b34801561033b575f80fd5b5061035660048036038101906103519190613c8e565b610a09565b6040516103639190613bfd565b60405180910390f35b348015610377575f80fd5b50610380610b15565b005b34801561038d575f80fd5b506103a860048036038101906103a39190613c8e565b610bca565b6040516103b59190613b85565b60405180910390f35b3480156103c9575f80fd5b506103d2610c21565b6040516103df9190613cd4565b60405180910390f35b3480156103f3575f80fd5b5061040e60048036038101906104099190613b9e565b610c29565b005b34801561041b575f80fd5b50610424610d85565b6040516104319190613bfd565b60405180910390f35b348015610445575f80fd5b50610460600480360381019061045b9190613c8e565b610d8b565b60405161046d9190613b85565b60405180910390f35b348015610481575f80fd5b5061049c60048036038101906104979190613c8e565b610da8565b6040516104a99190613b85565b60405180910390f35b3480156104bd575f80fd5b506104d860048036038101906104d39190613d17565b610dc5565b005b3480156104e5575f80fd5b506104ee610e65565b6040516104fb9190613bfd565b60405180910390f35b34801561050f575f80fd5b50610518610e6b565b6040516105259190613bfd565b60405180910390f35b348015610539575f80fd5b50610554600480360381019061054f9190613c8e565b610e71565b6040516105619190613bfd565b60405180910390f35b348015610575575f80fd5b5061057e610eb7565b60405161058b9190613c25565b60405180910390f35b34801561059f575f80fd5b506105ba60048036038101906105b59190613d17565b610ede565b005b3480156105c7575f80fd5b506105e260048036038101906105dd9190613b2d565b61109f565b005b3480156105ef575f80fd5b506105f8611167565b6040516106059190613bfd565b60405180910390f35b348015610619575f80fd5b506106226111a6565b60405161062f9190613a7c565b60405180910390f35b348015610643575f80fd5b5061064c6111e3565b6040516106599190613bfd565b60405180910390f35b34801561066d575f80fd5b506106766111e9565b6040516106839190613c25565b60405180910390f35b348015610697575f80fd5b506106b260048036038101906106ad9190613b2d565b61120e565b6040516106bf9190613b85565b60405180910390f35b3480156106d3575f80fd5b506106dc611224565b005b3480156106e9575f80fd5b5061070460048036038101906106ff9190613c8e565b61122f565b6040516107119190613bfd565b60405180910390f35b348015610725575f80fd5b50610740600480360381019061073b9190613c8e565b61127d565b60405161074f93929190613d55565b60405180910390f35b348015610763575f80fd5b5061077e60048036038101906107799190613d8a565b6112a3565b60405161078b9190613bfd565b60405180910390f35b34801561079f575f80fd5b506107ba60048036038101906107b59190613dc8565b611325565b005b3480156107c7575f80fd5b506107e260048036038101906107dd9190613d17565b61144f565b005b3480156107ef575f80fd5b506107f8611517565b6040516108059190613bfd565b60405180910390f35b348015610819575f80fd5b50610834600480360381019061082f9190613eb4565b61151d565b005b348015610841575f80fd5b5061084a6115de565b6040516108579190613bfd565b60405180910390f35b60606040518060400160405280600c81526020017f4e6569726f2044696e65726f0000000000000000000000000000000000000000815250905090565b5f6108a93384846115e4565b6001905092915050565b6108bc33610bca565b6108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f290613f29565b60405180910390fd5b826025819055508160268190555080602781905550505050565b5f600154905090565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61094f8484846117a7565b6109fe84336109f985604051806060016040528060288152602001614b586028913960065f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ab59092919063ffffffff16565b6115e4565b600190509392505050565b5f8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015403610a58575f9050610b10565b5f610aa160235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611b09565b90505f60235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101549050808211610af8575f92505050610b10565b610b0b8183611b3a90919063ffffffff16565b925050505b919050565b610b1e33610bca565b610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490613f29565b60405180910390fd5b600b60149054906101000a900460ff1615610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490613f91565b60405180910390fd5b6001600b60146101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f6009905090565b610c3233610bca565b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890613f29565b60405180910390fd5b5f61271084610c7e610915565b610c889190613fdc565b610c92919061404a565b90505f61271084610ca1610915565b610cab9190613fdc565b610cb5919061404a565b90505f61271084610cc4610915565b610cce9190613fdc565b610cd8919061404a565b90508260028190555081600381905550806004819055505f610d1f6103e8610d116005610d03610915565b611b4f90919063ffffffff16565b611b6490919063ffffffff16565b9050808410158015610d315750808310155b8015610d3d5750808210155b610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d73906140ea565b60405180910390fd5b50505050505050565b601b5481565b6007602052805f5260405f205f915054906101000a900460ff1681565b6008602052805f5260405f205f915054906101000a900460ff1681565b610dce33610bca565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490613f29565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60265481565b60275481565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ee733610bca565b610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d90613f29565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610fd05750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561100857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90614152565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6110a833610bca565b6110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90613f29565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611122929190614170565b6020604051808303815f875af115801561113e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116291906141ab565b505050565b5f6111a16111745f610e71565b61119361118261dead610e71565b600154611b3a90919063ffffffff16565b611b3a90919063ffffffff16565b905090565b60606040518060400160405280600481526020017f4e45524f00000000000000000000000000000000000000000000000000000000815250905090565b601c5481565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61121a3384846117a7565b6001905092915050565b61122d33611b79565b565b5f8082905060235f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020154915050919050565b6023602052805f5260405f205f91509050805f0154908060010154908060020154905083565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61132e33610bca565b61136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490613f29565b60405180910390fd5b87600c8190555086600d819055508560108190555084600e8190555083600f819055508260118190555081601281905550806013819055506113bb600a601454611b6490919063ffffffff16565b601154111580156113e357506113dd600a601454611b6490919063ffffffff16565b60125411155b80156114065750611400600a601454611b6490919063ffffffff16565b60135411155b611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614246565b60405180910390fd5b5050505050505050565b61145833610bca565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613f29565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015611500576114fb825f611df7565b611513565b6115128261150d84610e71565b611df7565b5b5050565b601d5481565b61152633610bca565b611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c90613f29565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516115d391906142bf565b60405180910390a150565b60255481565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164990614348565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906143d6565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161179a9190613bfd565b60405180910390a3505050565b6117b2838383611ff4565b6117bc8383612162565b6117c7838383612259565b6117d18383612429565b6117dc8383836124ef565b6117e7838383612717565b6118378160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b3a90919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f611883848461273f565b61188d5781611899565b6118988484846127e6565b5b90506118eb8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298790919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119899190613bfd565b60405180910390a360085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166119f2576119f1846119ec86610e71565b611df7565b5b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611a5357611a5283611a4d85610e71565b611df7565b5b5f60235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01541115611aa457611aa383611b79565b5b611aaf60275461299c565b50505050565b5f838311158290611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af39190613a7c565b60405180910390fd5b5082840390509392505050565b5f611b33601f54611b25601e5485611b4f90919063ffffffff16565b611b6490919063ffffffff16565b9050919050565b5f8183611b4791906143f4565b905092915050565b5f8183611b5c9190613fdc565b905092915050565b5f8183611b71919061404a565b905092915050565b5f60235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540315611df4575f611bca82610a09565b90505f811115611df257611be981601d5461298790919063ffffffff16565b601d81905550601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c4b929190614170565b6020604051808303815f875af1158015611c67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c8b91906141ab565b504260225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611d218160235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015461298790919063ffffffff16565b60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020181905550611dad60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611b09565b60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505b505b50565b5f81118015611e4457505f60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154145b15611e5757611e5282612acb565b611eb4565b5f81148015611ea457505f60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b15611eb357611eb282612b75565b5b5b611f1a81611f0c60235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154601b54611b3a90919063ffffffff16565b61298790919063ffffffff16565b601b819055508060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0181905550611fac60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611b09565b60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205990614497565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790614525565b60405180910390fd5b5f8111612112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612109906145b3565b60405180910390fd5b61211b83610e71565b81111561215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614641565b60405180910390fd5b505050565b60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612200575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561225557600b60149054906101000a900460ff16612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906146a9565b60405180910390fd5b5b5050565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156122f7575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123505750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612424576004546123e28260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298790919063ffffffff16565b1115612423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241a90614711565b60405180910390fd5b5b505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156124cc575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124eb57600160165f8282546124e3919061472f565b925050819055505b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461262b576003548111158061259a575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806125eb575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61262a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612621906147ac565b60405180910390fd5b5b60025481111580612682575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806126d3575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612709906147ac565b60405180910390fd5b505050565b612722838383612d6a565b1561273a57612732601854612e9b565b5f6016819055505b505050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156127de575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905092915050565b5f806127f28585613124565b111561297c575f6128296128068686613124565b61281b60145486611b6490919063ffffffff16565b611b4f90919063ffffffff16565b905061287b8160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298790919063ffffffff16565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129199190613bfd565b60405180910390a35f6010541115612961576129603061dead61295b60105461294d60145489611b6490919063ffffffff16565b611b4f90919063ffffffff16565b6117a7565b5b6129748184611b3a90919063ffffffff16565b915050612980565b8190505b9392505050565b5f8183612994919061472f565b905092915050565b5f60208054905090505f81036129b25750612ac8565b5f805a90505f5b84831080156129c757508381105b15612ac35783602454106129dd575f6024819055505b612a236020602454815481106129f6576129f56147ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166132aa565b15612a6f57612a6e602060245481548110612a4157612a406147ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b79565b5b612a94612a855a84611b3a90919063ffffffff16565b8461298790919063ffffffff16565b92505a915060245f815480929190612aab906147f7565b91905055508080612abb906147f7565b9150506129b9565b505050505b50565b60208054905060215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550602081908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60206001602080549050612b8991906143f4565b81548110612b9a57612b996147ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481548110612c1357612c126147ca565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060215f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460215f60206001602080549050612cad91906143f4565b81548110612cbe57612cbd6147ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506020805480612d3557612d3461483e565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b5f8060195483101590505f601854612d8130610e71565b1015905060175f9054906101000a900460ff16158015612dac575060155f9054906101000a900460ff165b8015612dc45750600b60149054906101000a900460ff165b8015612dcd5750815b8015612e20575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e785750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612e875750600260165410155b8015612e905750805b925050509392505050565b600160175f6101000a81548160ff0219169083151502179055505f612f1b6002612f0d600e54612eff600f54612ef1600d54612ee36001600c5461298790919063ffffffff16565b61298790919063ffffffff16565b61298790919063ffffffff16565b61298790919063ffffffff16565b611b4f90919063ffffffff16565b90505f612f4582612f37600c5486611b4f90919063ffffffff16565b611b6490919063ffffffff16565b90505f612f5b8285611b3a90919063ffffffff16565b90505f479050612f6a82613314565b5f612f7e8247611b3a90919063ffffffff16565b90505f612fa8612f99600c5488611b3a90919063ffffffff16565b83611b6490919063ffffffff16565b90505f612fc0600c5483611b4f90919063ffffffff16565b90505f811115612fd557612fd4868261354a565b5b5f612ffe600d54612ff0600286611b4f90919063ffffffff16565b611b4f90919063ffffffff16565b90505f81111561306157738d749f30194ff087ae898ceafec78601f734473073ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561305f573d5f803e3d5ffd5b505b5f61308a600e5461307c600287611b4f90919063ffffffff16565b611b4f90919063ffffffff16565b90505f81111561309e5761309d81613637565b5b5f4711156130ff57730539a06edbe9fdb89c1107c7a7d513679e2a217073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156130fd573d5f803e3d5ffd5b505b5050505050505050505f60175f6101000a81548160ff02191690831515021790555050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806131c0575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156131e2576131db6064601454611b3a90919063ffffffff16565b90506132a4565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132405760125490506132a4565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361329e5760115490506132a4565b60135490505b92915050565b5f4260255460225f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132f7919061472f565b10801561330d575060265461330b83610a09565b115b9050919050565b5f600267ffffffffffffffff8111156133305761332f61486b565b5b60405190808252806020026020018201604052801561335e5781602001602082028036833780820191505090505b50905030815f81518110613375576133746147ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061343d91906148ac565b81600181518110613451576134506147ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134b730600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846115e4565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135199594939291906149c7565b5f604051808303815f87803b158015613530575f80fd5b505af1158015613542573d5f803e3d5ffd5b505050505050565b61357630600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846115e4565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80738d749f30194ff087ae898ceafec78601f7344730426040518863ffffffff1660e01b81526004016135ef96959493929190614a1f565b60606040518083038185885af115801561360b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136309190614a92565b5050505050565b5f601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016136929190613c25565b602060405180830381865afa1580156136ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136d19190614ae2565b90505f600267ffffffffffffffff8111156136ef576136ee61486b565b5b60405190808252806020026020018201604052801561371d5781602001602082028036833780820191505090505b509050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561378a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ae91906148ac565b815f815181106137c1576137c06147ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613831576138306147ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95845f8430426040518663ffffffff1660e01b81526004016138cc9493929190614b0d565b5f604051808303818588803b1580156138e3575f80fd5b505af11580156138f5573d5f803e3d5ffd5b50505050505f6139a683601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016139599190613c25565b602060405180830381865afa158015613974573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139989190614ae2565b611b3a90919063ffffffff16565b90506139bd81601c5461298790919063ffffffff16565b601c81905550613a006139ef601b546139e184601f54611b4f90919063ffffffff16565b611b6490919063ffffffff16565b601e5461298790919063ffffffff16565b601e8190555050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613a4e82613a0c565b613a588185613a16565b9350613a68818560208601613a26565b613a7181613a34565b840191505092915050565b5f6020820190508181035f830152613a948184613a44565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ac982613aa0565b9050919050565b613ad981613abf565b8114613ae3575f80fd5b50565b5f81359050613af481613ad0565b92915050565b5f819050919050565b613b0c81613afa565b8114613b16575f80fd5b50565b5f81359050613b2781613b03565b92915050565b5f8060408385031215613b4357613b42613a9c565b5b5f613b5085828601613ae6565b9250506020613b6185828601613b19565b9150509250929050565b5f8115159050919050565b613b7f81613b6b565b82525050565b5f602082019050613b985f830184613b76565b92915050565b5f805f60608486031215613bb557613bb4613a9c565b5b5f613bc286828701613b19565b9350506020613bd386828701613b19565b9250506040613be486828701613b19565b9150509250925092565b613bf781613afa565b82525050565b5f602082019050613c105f830184613bee565b92915050565b613c1f81613abf565b82525050565b5f602082019050613c385f830184613c16565b92915050565b5f805f60608486031215613c5557613c54613a9c565b5b5f613c6286828701613ae6565b9350506020613c7386828701613ae6565b9250506040613c8486828701613b19565b9150509250925092565b5f60208284031215613ca357613ca2613a9c565b5b5f613cb084828501613ae6565b91505092915050565b5f60ff82169050919050565b613cce81613cb9565b82525050565b5f602082019050613ce75f830184613cc5565b92915050565b613cf681613b6b565b8114613d00575f80fd5b50565b5f81359050613d1181613ced565b92915050565b5f8060408385031215613d2d57613d2c613a9c565b5b5f613d3a85828601613ae6565b9250506020613d4b85828601613d03565b9150509250929050565b5f606082019050613d685f830186613bee565b613d756020830185613bee565b613d826040830184613bee565b949350505050565b5f8060408385031215613da057613d9f613a9c565b5b5f613dad85828601613ae6565b9250506020613dbe85828601613ae6565b9150509250929050565b5f805f805f805f80610100898b031215613de557613de4613a9c565b5b5f613df28b828c01613b19565b9850506020613e038b828c01613b19565b9750506040613e148b828c01613b19565b9650506060613e258b828c01613b19565b9550506080613e368b828c01613b19565b94505060a0613e478b828c01613b19565b93505060c0613e588b828c01613b19565b92505060e0613e698b828c01613b19565b9150509295985092959890939650565b5f613e8382613aa0565b9050919050565b613e9381613e79565b8114613e9d575f80fd5b50565b5f81359050613eae81613e8a565b92915050565b5f60208284031215613ec957613ec8613a9c565b5b5f613ed684828501613ea0565b91505092915050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f613f13600683613a16565b9150613f1e82613edf565b602082019050919050565b5f6020820190508181035f830152613f4081613f07565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613f7b601783613a16565b9150613f8682613f47565b602082019050919050565b5f6020820190508181035f830152613fa881613f6f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613fe682613afa565b9150613ff183613afa565b9250828202613fff81613afa565b9150828204841483151761401657614015613faf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61405482613afa565b915061405f83613afa565b92508261406f5761406e61401d565b5b828204905092915050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f742062655f8201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b5f6140d4602e83613a16565b91506140df8261407a565b604082019050919050565b5f6020820190508181035f830152614101816140c8565b9050919050565b7f496e656c696769626c65204164647265737300000000000000000000000000005f82015250565b5f61413c601283613a16565b915061414782614108565b602082019050919050565b5f6020820190508181035f83015261416981614130565b9050919050565b5f6040820190506141835f830185613c16565b6141906020830184613bee565b9392505050565b5f815190506141a581613ced565b92915050565b5f602082840312156141c0576141bf613a9c565b5b5f6141cd84828501614197565b91505092915050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d5f8201527f6f7265207468616e203130250000000000000000000000000000000000000000602082015250565b5f614230602c83613a16565b915061423b826141d6565b604082019050919050565b5f6020820190508181035f83015261425d81614224565b9050919050565b5f819050919050565b5f61428761428261427d84613aa0565b614264565b613aa0565b9050919050565b5f6142988261426d565b9050919050565b5f6142a98261428e565b9050919050565b6142b98161429f565b82525050565b5f6020820190506142d25f8301846142b0565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614332602483613a16565b915061433d826142d8565b604082019050919050565b5f6020820190508181035f83015261435f81614326565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143c0602283613a16565b91506143cb82614366565b604082019050919050565b5f6020820190508181035f8301526143ed816143b4565b9050919050565b5f6143fe82613afa565b915061440983613afa565b925082820390508181111561442157614420613faf565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614481602583613a16565b915061448c82614427565b604082019050919050565b5f6020820190508181035f8301526144ae81614475565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61450f602383613a16565b915061451a826144b5565b604082019050919050565b5f6020820190508181035f83015261453c81614503565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f61459d602983613a16565b91506145a882614543565b604082019050919050565b5f6020820190508181035f8301526145ca81614591565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f7265205f8201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b5f61462b603183613a16565b9150614636826145d1565b604082019050919050565b5f6020820190508181035f8301526146588161461f565b9050919050565b7f74726164696e67416c6c6f7765640000000000000000000000000000000000005f82015250565b5f614693600e83613a16565b915061469e8261465f565b602082019050919050565b5f6020820190508181035f8301526146c081614687565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00005f82015250565b5f6146fb601e83613a16565b9150614706826146c7565b602082019050919050565b5f6020820190508181035f830152614728816146ef565b9050919050565b5f61473982613afa565b915061474483613afa565b925082820190508082111561475c5761475b613faf565b5b92915050565b7f5458204c696d69742045786365656465640000000000000000000000000000005f82015250565b5f614796601183613a16565b91506147a182614762565b602082019050919050565b5f6020820190508181035f8301526147c38161478a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61480182613afa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361483357614832613faf565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506148a681613ad0565b92915050565b5f602082840312156148c1576148c0613a9c565b5b5f6148ce84828501614898565b91505092915050565b5f819050919050565b5f6148fa6148f56148f0846148d7565b614264565b613afa565b9050919050565b61490a816148e0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61494281613abf565b82525050565b5f6149538383614939565b60208301905092915050565b5f602082019050919050565b5f61497582614910565b61497f818561491a565b935061498a8361492a565b805f5b838110156149ba5781516149a18882614948565b97506149ac8361495f565b92505060018101905061498d565b5085935050505092915050565b5f60a0820190506149da5f830188613bee565b6149e76020830187614901565b81810360408301526149f9818661496b565b9050614a086060830185613c16565b614a156080830184613bee565b9695505050505050565b5f60c082019050614a325f830189613c16565b614a3f6020830188613bee565b614a4c6040830187614901565b614a596060830186614901565b614a666080830185613c16565b614a7360a0830184613bee565b979650505050505050565b5f81519050614a8c81613b03565b92915050565b5f805f60608486031215614aa957614aa8613a9c565b5b5f614ab686828701614a7e565b9350506020614ac786828701614a7e565b9250506040614ad886828701614a7e565b9150509250925092565b5f60208284031215614af757614af6613a9c565b5b5f614b0484828501614a7e565b91505092915050565b5f608082019050614b205f830187614901565b8181036020830152614b32818661496b565b9050614b416040830185613c16565b614b4e6060830184613bee565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212200ff6146ba66067762291944bb23bb012d51ec90d9b1da900578b7a3e30bd742764736f6c634300081a0033

Deployed Bytecode

0x608060405260043610610207575f3560e01c806370a0823111610117578063c942435d1161009f578063e2d6f94c1161006e578063e2d6f94c14610794578063ef43b02b146107bc578063efca2eed146107e4578063f2fde38b1461080e578063ffd49c84146108365761020e565b8063c942435d146106c8578063ca89b899146106de578063ce7c2ac21461071a578063dd62ed3e146107585761020e565b80639358928b116100e65780639358928b146105e457806395d89b411461060e578063997664d714610638578063a8aa1b3114610662578063a9059cbb1461068c5761020e565b806370a082311461052e578063893d20e81461056a5780638c41180e146105945780638cd4426d146105bc5761020e565b80632f54bf6e1161019a5780633f4218e0116101695780633f4218e01461043a5780634355855a1461047657806348ff2b8b146104b25780634fab0ae8146104da57806360e71962146105045761020e565b80632f54bf6e14610382578063313ce567146103be57806334c5d2ce146103e85780633a98ef39146104105761020e565b8063228cb733116101d6578063228cb733146102ca57806323b872dd146102f457806328fd319814610330578063293230b81461036c5761020e565b806306fdde0314610212578063095ea7b31461023c5780630ca61cb11461027857806318160ddd146102a05761020e565b3661020e57005b5f80fd5b34801561021d575f80fd5b50610226610860565b6040516102339190613a7c565b60405180910390f35b348015610247575f80fd5b50610262600480360381019061025d9190613b2d565b61089d565b60405161026f9190613b85565b60405180910390f35b348015610283575f80fd5b5061029e60048036038101906102999190613b9e565b6108b3565b005b3480156102ab575f80fd5b506102b4610915565b6040516102c19190613bfd565b60405180910390f35b3480156102d5575f80fd5b506102de61091e565b6040516102eb9190613c25565b60405180910390f35b3480156102ff575f80fd5b5061031a60048036038101906103159190613c3e565b610943565b6040516103279190613b85565b60405180910390f35b34801561033b575f80fd5b5061035660048036038101906103519190613c8e565b610a09565b6040516103639190613bfd565b60405180910390f35b348015610377575f80fd5b50610380610b15565b005b34801561038d575f80fd5b506103a860048036038101906103a39190613c8e565b610bca565b6040516103b59190613b85565b60405180910390f35b3480156103c9575f80fd5b506103d2610c21565b6040516103df9190613cd4565b60405180910390f35b3480156103f3575f80fd5b5061040e60048036038101906104099190613b9e565b610c29565b005b34801561041b575f80fd5b50610424610d85565b6040516104319190613bfd565b60405180910390f35b348015610445575f80fd5b50610460600480360381019061045b9190613c8e565b610d8b565b60405161046d9190613b85565b60405180910390f35b348015610481575f80fd5b5061049c60048036038101906104979190613c8e565b610da8565b6040516104a99190613b85565b60405180910390f35b3480156104bd575f80fd5b506104d860048036038101906104d39190613d17565b610dc5565b005b3480156104e5575f80fd5b506104ee610e65565b6040516104fb9190613bfd565b60405180910390f35b34801561050f575f80fd5b50610518610e6b565b6040516105259190613bfd565b60405180910390f35b348015610539575f80fd5b50610554600480360381019061054f9190613c8e565b610e71565b6040516105619190613bfd565b60405180910390f35b348015610575575f80fd5b5061057e610eb7565b60405161058b9190613c25565b60405180910390f35b34801561059f575f80fd5b506105ba60048036038101906105b59190613d17565b610ede565b005b3480156105c7575f80fd5b506105e260048036038101906105dd9190613b2d565b61109f565b005b3480156105ef575f80fd5b506105f8611167565b6040516106059190613bfd565b60405180910390f35b348015610619575f80fd5b506106226111a6565b60405161062f9190613a7c565b60405180910390f35b348015610643575f80fd5b5061064c6111e3565b6040516106599190613bfd565b60405180910390f35b34801561066d575f80fd5b506106766111e9565b6040516106839190613c25565b60405180910390f35b348015610697575f80fd5b506106b260048036038101906106ad9190613b2d565b61120e565b6040516106bf9190613b85565b60405180910390f35b3480156106d3575f80fd5b506106dc611224565b005b3480156106e9575f80fd5b5061070460048036038101906106ff9190613c8e565b61122f565b6040516107119190613bfd565b60405180910390f35b348015610725575f80fd5b50610740600480360381019061073b9190613c8e565b61127d565b60405161074f93929190613d55565b60405180910390f35b348015610763575f80fd5b5061077e60048036038101906107799190613d8a565b6112a3565b60405161078b9190613bfd565b60405180910390f35b34801561079f575f80fd5b506107ba60048036038101906107b59190613dc8565b611325565b005b3480156107c7575f80fd5b506107e260048036038101906107dd9190613d17565b61144f565b005b3480156107ef575f80fd5b506107f8611517565b6040516108059190613bfd565b60405180910390f35b348015610819575f80fd5b50610834600480360381019061082f9190613eb4565b61151d565b005b348015610841575f80fd5b5061084a6115de565b6040516108579190613bfd565b60405180910390f35b60606040518060400160405280600c81526020017f4e6569726f2044696e65726f0000000000000000000000000000000000000000815250905090565b5f6108a93384846115e4565b6001905092915050565b6108bc33610bca565b6108fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f290613f29565b60405180910390fd5b826025819055508160268190555080602781905550505050565b5f600154905090565b601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61094f8484846117a7565b6109fe84336109f985604051806060016040528060288152602001614b586028913960065f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611ab59092919063ffffffff16565b6115e4565b600190509392505050565b5f8060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f015403610a58575f9050610b10565b5f610aa160235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611b09565b90505f60235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101549050808211610af8575f92505050610b10565b610b0b8183611b3a90919063ffffffff16565b925050505b919050565b610b1e33610bca565b610b5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5490613f29565b60405180910390fd5b600b60149054906101000a900460ff1615610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490613f91565b60405180910390fd5b6001600b60146101000a81548160ff021916908315150217905550565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b5f6009905090565b610c3233610bca565b610c71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6890613f29565b60405180910390fd5b5f61271084610c7e610915565b610c889190613fdc565b610c92919061404a565b90505f61271084610ca1610915565b610cab9190613fdc565b610cb5919061404a565b90505f61271084610cc4610915565b610cce9190613fdc565b610cd8919061404a565b90508260028190555081600381905550806004819055505f610d1f6103e8610d116005610d03610915565b611b4f90919063ffffffff16565b611b6490919063ffffffff16565b9050808410158015610d315750808310155b8015610d3d5750808210155b610d7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d73906140ea565b60405180910390fd5b50505050505050565b601b5481565b6007602052805f5260405f205f915054906101000a900460ff1681565b6008602052805f5260405f205f915054906101000a900460ff1681565b610dce33610bca565b610e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0490613f29565b60405180910390fd5b8060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60265481565b60275481565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ee733610bca565b610f26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1d90613f29565b60405180910390fd5b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610fd05750600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561100857503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611047576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103e90614152565b60405180910390fd5b8060095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6110a833610bca565b6110e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110de90613f29565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611122929190614170565b6020604051808303815f875af115801561113e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116291906141ab565b505050565b5f6111a16111745f610e71565b61119361118261dead610e71565b600154611b3a90919063ffffffff16565b611b3a90919063ffffffff16565b905090565b60606040518060400160405280600481526020017f4e45524f00000000000000000000000000000000000000000000000000000000815250905090565b601c5481565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61121a3384846117a7565b6001905092915050565b61122d33611b79565b565b5f8082905060235f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020154915050919050565b6023602052805f5260405f205f91509050805f0154908060010154908060020154905083565b5f60065f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61132e33610bca565b61136d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136490613f29565b60405180910390fd5b87600c8190555086600d819055508560108190555084600e8190555083600f819055508260118190555081601281905550806013819055506113bb600a601454611b6490919063ffffffff16565b601154111580156113e357506113dd600a601454611b6490919063ffffffff16565b60125411155b80156114065750611400600a601454611b6490919063ffffffff16565b60135411155b611445576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143c90614246565b60405180910390fd5b5050505050505050565b61145833610bca565b611497576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148e90613f29565b60405180910390fd5b8060085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015611500576114fb825f611df7565b611513565b6115128261150d84610e71565b611df7565b5b5050565b601d5481565b61152633610bca565b611565576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155c90613f29565b60405180910390fd5b805f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516115d391906142bf565b60405180910390a150565b60255481565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164990614348565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b7906143d6565b60405180910390fd5b8060065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161179a9190613bfd565b60405180910390a3505050565b6117b2838383611ff4565b6117bc8383612162565b6117c7838383612259565b6117d18383612429565b6117dc8383836124ef565b6117e7838383612717565b6118378160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611b3a90919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505f611883848461273f565b61188d5781611899565b6118988484846127e6565b5b90506118eb8160055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298790919063ffffffff16565b60055f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119899190613bfd565b60405180910390a360085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166119f2576119f1846119ec86610e71565b611df7565b5b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611a5357611a5283611a4d85610e71565b611df7565b5b5f60235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01541115611aa457611aa383611b79565b5b611aaf60275461299c565b50505050565b5f838311158290611afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af39190613a7c565b60405180910390fd5b5082840390509392505050565b5f611b33601f54611b25601e5485611b4f90919063ffffffff16565b611b6490919063ffffffff16565b9050919050565b5f8183611b4791906143f4565b905092915050565b5f8183611b5c9190613fdc565b905092915050565b5f8183611b71919061404a565b905092915050565b5f60235f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f01540315611df4575f611bca82610a09565b90505f811115611df257611be981601d5461298790919063ffffffff16565b601d81905550601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c4b929190614170565b6020604051808303815f875af1158015611c67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c8b91906141ab565b504260225f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611d218160235f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f206002015461298790919063ffffffff16565b60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2060020181905550611dad60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611b09565b60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505b505b50565b5f81118015611e4457505f60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154145b15611e5757611e5282612acb565b611eb4565b5f81148015611ea457505f60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154115b15611eb357611eb282612b75565b5b5b611f1a81611f0c60235f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154601b54611b3a90919063ffffffff16565b61298790919063ffffffff16565b601b819055508060235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0181905550611fac60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f0154611b09565b60235f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20600101819055505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612062576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205990614497565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c790614525565b60405180910390fd5b5f8111612112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612109906145b3565b60405180910390fd5b61211b83610e71565b81111561215d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215490614641565b60405180910390fd5b505050565b60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612200575060075f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561225557600b60149054906101000a900460ff16612254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224b906146a9565b60405180910390fd5b5b5050565b60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156122f7575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156123505750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238a575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612424576004546123e28260055f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298790919063ffffffff16565b1115612423576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241a90614711565b60405180910390fd5b5b505050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156124cc575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156124eb57600160165f8282546124e3919061472f565b925050819055505b5050565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461262b576003548111158061259a575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806125eb575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b61262a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612621906147ac565b60405180910390fd5b5b60025481111580612682575060075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b806126d3575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612712576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612709906147ac565b60405180910390fd5b505050565b612722838383612d6a565b1561273a57612732601854612e9b565b5f6016819055505b505050565b5f60075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156127de575060075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b905092915050565b5f806127f28585613124565b111561297c575f6128296128068686613124565b61281b60145486611b6490919063ffffffff16565b611b4f90919063ffffffff16565b905061287b8160055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461298790919063ffffffff16565b60055f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129199190613bfd565b60405180910390a35f6010541115612961576129603061dead61295b60105461294d60145489611b6490919063ffffffff16565b611b4f90919063ffffffff16565b6117a7565b5b6129748184611b3a90919063ffffffff16565b915050612980565b8190505b9392505050565b5f8183612994919061472f565b905092915050565b5f60208054905090505f81036129b25750612ac8565b5f805a90505f5b84831080156129c757508381105b15612ac35783602454106129dd575f6024819055505b612a236020602454815481106129f6576129f56147ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166132aa565b15612a6f57612a6e602060245481548110612a4157612a406147ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611b79565b5b612a94612a855a84611b3a90919063ffffffff16565b8461298790919063ffffffff16565b92505a915060245f815480929190612aab906147f7565b91905055508080612abb906147f7565b9150506129b9565b505050505b50565b60208054905060215f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550602081908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60206001602080549050612b8991906143f4565b81548110612b9a57612b996147ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602060215f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205481548110612c1357612c126147ca565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060215f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205460215f60206001602080549050612cad91906143f4565b81548110612cbe57612cbd6147ca565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506020805480612d3557612d3461483e565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b5f8060195483101590505f601854612d8130610e71565b1015905060175f9054906101000a900460ff16158015612dac575060155f9054906101000a900460ff165b8015612dc45750600b60149054906101000a900460ff165b8015612dcd5750815b8015612e20575060075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612e785750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612e875750600260165410155b8015612e905750805b925050509392505050565b600160175f6101000a81548160ff0219169083151502179055505f612f1b6002612f0d600e54612eff600f54612ef1600d54612ee36001600c5461298790919063ffffffff16565b61298790919063ffffffff16565b61298790919063ffffffff16565b61298790919063ffffffff16565b611b4f90919063ffffffff16565b90505f612f4582612f37600c5486611b4f90919063ffffffff16565b611b6490919063ffffffff16565b90505f612f5b8285611b3a90919063ffffffff16565b90505f479050612f6a82613314565b5f612f7e8247611b3a90919063ffffffff16565b90505f612fa8612f99600c5488611b3a90919063ffffffff16565b83611b6490919063ffffffff16565b90505f612fc0600c5483611b4f90919063ffffffff16565b90505f811115612fd557612fd4868261354a565b5b5f612ffe600d54612ff0600286611b4f90919063ffffffff16565b611b4f90919063ffffffff16565b90505f81111561306157738d749f30194ff087ae898ceafec78601f734473073ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f1935050505015801561305f573d5f803e3d5ffd5b505b5f61308a600e5461307c600287611b4f90919063ffffffff16565b611b4f90919063ffffffff16565b90505f81111561309e5761309d81613637565b5b5f4711156130ff57730539a06edbe9fdb89c1107c7a7d513679e2a217073ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f193505050501580156130fd573d5f803e3d5ffd5b505b5050505050505050505f60175f6101000a81548160ff02191690831515021790555050565b5f60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806131c0575060095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156131e2576131db6064601454611b3a90919063ffffffff16565b90506132a4565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132405760125490506132a4565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361329e5760115490506132a4565b60135490505b92915050565b5f4260255460225f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546132f7919061472f565b10801561330d575060265461330b83610a09565b115b9050919050565b5f600267ffffffffffffffff8111156133305761332f61486b565b5b60405190808252806020026020018201604052801561335e5781602001602082028036833780820191505090505b50905030815f81518110613375576133746147ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613419573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061343d91906148ac565b81600181518110613451576134506147ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506134b730600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846115e4565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016135199594939291906149c7565b5f604051808303815f87803b158015613530575f80fd5b505af1158015613542573d5f803e3d5ffd5b505050505050565b61357630600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846115e4565b600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80738d749f30194ff087ae898ceafec78601f7344730426040518863ffffffff1660e01b81526004016135ef96959493929190614a1f565b60606040518083038185885af115801561360b573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906136309190614a92565b5050505050565b5f601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016136929190613c25565b602060405180830381865afa1580156136ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136d19190614ae2565b90505f600267ffffffffffffffff8111156136ef576136ee61486b565b5b60405190808252806020026020018201604052801561371d5781602001602082028036833780820191505090505b509050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561378a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137ae91906148ac565b815f815181106137c1576137c06147ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110613831576138306147ca565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de95845f8430426040518663ffffffff1660e01b81526004016138cc9493929190614b0d565b5f604051808303818588803b1580156138e3575f80fd5b505af11580156138f5573d5f803e3d5ffd5b50505050505f6139a683601a5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016139599190613c25565b602060405180830381865afa158015613974573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139989190614ae2565b611b3a90919063ffffffff16565b90506139bd81601c5461298790919063ffffffff16565b601c81905550613a006139ef601b546139e184601f54611b4f90919063ffffffff16565b611b6490919063ffffffff16565b601e5461298790919063ffffffff16565b601e8190555050505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f613a4e82613a0c565b613a588185613a16565b9350613a68818560208601613a26565b613a7181613a34565b840191505092915050565b5f6020820190508181035f830152613a948184613a44565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613ac982613aa0565b9050919050565b613ad981613abf565b8114613ae3575f80fd5b50565b5f81359050613af481613ad0565b92915050565b5f819050919050565b613b0c81613afa565b8114613b16575f80fd5b50565b5f81359050613b2781613b03565b92915050565b5f8060408385031215613b4357613b42613a9c565b5b5f613b5085828601613ae6565b9250506020613b6185828601613b19565b9150509250929050565b5f8115159050919050565b613b7f81613b6b565b82525050565b5f602082019050613b985f830184613b76565b92915050565b5f805f60608486031215613bb557613bb4613a9c565b5b5f613bc286828701613b19565b9350506020613bd386828701613b19565b9250506040613be486828701613b19565b9150509250925092565b613bf781613afa565b82525050565b5f602082019050613c105f830184613bee565b92915050565b613c1f81613abf565b82525050565b5f602082019050613c385f830184613c16565b92915050565b5f805f60608486031215613c5557613c54613a9c565b5b5f613c6286828701613ae6565b9350506020613c7386828701613ae6565b9250506040613c8486828701613b19565b9150509250925092565b5f60208284031215613ca357613ca2613a9c565b5b5f613cb084828501613ae6565b91505092915050565b5f60ff82169050919050565b613cce81613cb9565b82525050565b5f602082019050613ce75f830184613cc5565b92915050565b613cf681613b6b565b8114613d00575f80fd5b50565b5f81359050613d1181613ced565b92915050565b5f8060408385031215613d2d57613d2c613a9c565b5b5f613d3a85828601613ae6565b9250506020613d4b85828601613d03565b9150509250929050565b5f606082019050613d685f830186613bee565b613d756020830185613bee565b613d826040830184613bee565b949350505050565b5f8060408385031215613da057613d9f613a9c565b5b5f613dad85828601613ae6565b9250506020613dbe85828601613ae6565b9150509250929050565b5f805f805f805f80610100898b031215613de557613de4613a9c565b5b5f613df28b828c01613b19565b9850506020613e038b828c01613b19565b9750506040613e148b828c01613b19565b9650506060613e258b828c01613b19565b9550506080613e368b828c01613b19565b94505060a0613e478b828c01613b19565b93505060c0613e588b828c01613b19565b92505060e0613e698b828c01613b19565b9150509295985092959890939650565b5f613e8382613aa0565b9050919050565b613e9381613e79565b8114613e9d575f80fd5b50565b5f81359050613eae81613e8a565b92915050565b5f60208284031215613ec957613ec8613a9c565b5b5f613ed684828501613ea0565b91505092915050565b7f214f574e455200000000000000000000000000000000000000000000000000005f82015250565b5f613f13600683613a16565b9150613f1e82613edf565b602082019050919050565b5f6020820190508181035f830152613f4081613f07565b9050919050565b7f74726164696e6720697320616c7265616479206f70656e0000000000000000005f82015250565b5f613f7b601783613a16565b9150613f8682613f47565b602082019050919050565b5f6020820190508181035f830152613fa881613f6f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f613fe682613afa565b9150613ff183613afa565b9250828202613fff81613afa565b9150828204841483151761401657614015613faf565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61405482613afa565b915061405f83613afa565b92508261406f5761406e61401d565b5b828204905092915050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f742062655f8201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b5f6140d4602e83613a16565b91506140df8261407a565b604082019050919050565b5f6020820190508181035f830152614101816140c8565b9050919050565b7f496e656c696769626c65204164647265737300000000000000000000000000005f82015250565b5f61413c601283613a16565b915061414782614108565b602082019050919050565b5f6020820190508181035f83015261416981614130565b9050919050565b5f6040820190506141835f830185613c16565b6141906020830184613bee565b9392505050565b5f815190506141a581613ced565b92915050565b5f602082840312156141c0576141bf613a9c565b5b5f6141cd84828501614197565b91505092915050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d5f8201527f6f7265207468616e203130250000000000000000000000000000000000000000602082015250565b5f614230602c83613a16565b915061423b826141d6565b604082019050919050565b5f6020820190508181035f83015261425d81614224565b9050919050565b5f819050919050565b5f61428761428261427d84613aa0565b614264565b613aa0565b9050919050565b5f6142988261426d565b9050919050565b5f6142a98261428e565b9050919050565b6142b98161429f565b82525050565b5f6020820190506142d25f8301846142b0565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614332602483613a16565b915061433d826142d8565b604082019050919050565b5f6020820190508181035f83015261435f81614326565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6143c0602283613a16565b91506143cb82614366565b604082019050919050565b5f6020820190508181035f8301526143ed816143b4565b9050919050565b5f6143fe82613afa565b915061440983613afa565b925082820390508181111561442157614420613faf565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614481602583613a16565b915061448c82614427565b604082019050919050565b5f6020820190508181035f8301526144ae81614475565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61450f602383613a16565b915061451a826144b5565b604082019050919050565b5f6020820190508181035f83015261453c81614503565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f61459d602983613a16565b91506145a882614543565b604082019050919050565b5f6020820190508181035f8301526145ca81614591565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f7265205f8201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b5f61462b603183613a16565b9150614636826145d1565b604082019050919050565b5f6020820190508181035f8301526146588161461f565b9050919050565b7f74726164696e67416c6c6f7765640000000000000000000000000000000000005f82015250565b5f614693600e83613a16565b915061469e8261465f565b602082019050919050565b5f6020820190508181035f8301526146c081614687565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e00005f82015250565b5f6146fb601e83613a16565b9150614706826146c7565b602082019050919050565b5f6020820190508181035f830152614728816146ef565b9050919050565b5f61473982613afa565b915061474483613afa565b925082820190508082111561475c5761475b613faf565b5b92915050565b7f5458204c696d69742045786365656465640000000000000000000000000000005f82015250565b5f614796601183613a16565b91506147a182614762565b602082019050919050565b5f6020820190508181035f8301526147c38161478a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61480182613afa565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361483357614832613faf565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f815190506148a681613ad0565b92915050565b5f602082840312156148c1576148c0613a9c565b5b5f6148ce84828501614898565b91505092915050565b5f819050919050565b5f6148fa6148f56148f0846148d7565b614264565b613afa565b9050919050565b61490a816148e0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61494281613abf565b82525050565b5f6149538383614939565b60208301905092915050565b5f602082019050919050565b5f61497582614910565b61497f818561491a565b935061498a8361492a565b805f5b838110156149ba5781516149a18882614948565b97506149ac8361495f565b92505060018101905061498d565b5085935050505092915050565b5f60a0820190506149da5f830188613bee565b6149e76020830187614901565b81810360408301526149f9818661496b565b9050614a086060830185613c16565b614a156080830184613bee565b9695505050505050565b5f60c082019050614a325f830189613c16565b614a3f6020830188613bee565b614a4c6040830187614901565b614a596060830186614901565b614a666080830185613c16565b614a7360a0830184613bee565b979650505050505050565b5f81519050614a8c81613b03565b92915050565b5f805f60608486031215614aa957614aa8613a9c565b5b5f614ab686828701614a7e565b9350506020614ac786828701614a7e565b9250506040614ad886828701614a7e565b9150509250925092565b5f60208284031215614af757614af6613a9c565b5b5f614b0484828501614a7e565b91505092915050565b5f608082019050614b205f830187614901565b8181036020830152614b32818661496b565b9050614b416040830185613c16565b614b4e6060830184613bee565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212200ff6146ba66067762291944bb23bb012d51ec90d9b1da900578b7a3e30bd742764736f6c634300081a0033

Deployed Bytecode Sourcemap

5313:17904:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8876:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9908:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22962:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9183:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6834:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17892:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21832:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10193:144;;;;;;;;;;;;;:::i;:::-;;3693:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9026:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12632:578;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6907:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5934:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5985:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9794:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7468:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7520:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9273:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9099:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12382:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20648:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10047:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8949:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6940:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6108:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9382:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7560:68;;;;;;;;;;;;;:::i;:::-;;21039:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7340:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;9527:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11757:617;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18552:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6976:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3786:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7423:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8876:67;8913:13;8936:5;;;;;;;;;;;;;;;;;8929:12;;8876:67;:::o;9908:133::-;9983:4;9990:37;9999:10;10011:7;10020:6;9990:8;:37::i;:::-;10035:4;10028:11;;9908:133;;;;:::o;22962:252::-;3652:19;3660:10;3652:7;:19::i;:::-;3644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;23108:10:::1;23096:9;:22;;;;23147:16;23129:15;:34;;;;23191:15;23174:14;:32;;;;22962:252:::0;;;:::o;9183:84::-;9236:7;9253:12;;9246:19;;9183:84;:::o;6834:66::-;;;;;;;;;;;;;:::o;17892:309::-;17990:4;18007:36;18017:6;18025:9;18036:6;18007:9;:36::i;:::-;18054:117;18063:6;18071:10;18083:87;18119:6;18083:87;;;;;;;;;;;;;;;;;:11;:19;18095:6;18083:19;;;;;;;;;;;;;;;:31;18103:10;18083:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;18054:8;:117::i;:::-;18189:4;18182:11;;17892:309;;;;;:::o;21832:473::-;21901:7;21954:1;21924:6;:19;21931:11;21924:19;;;;;;;;;;;;;;;:26;;;:31;21921:48;;21965:1;21958:8;;;;21921:48;21979:33;22015:50;22038:6;:19;22045:11;22038:19;;;;;;;;;;;;;;;:26;;;22015:22;:50::i;:::-;21979:86;;22076:32;22111:6;:19;22118:11;22111:19;;;;;;;;;;;;;;;:33;;;22076:68;;22187:24;22158:25;:53;22155:70;;22221:1;22214:8;;;;;;22155:70;22242:55;22272:24;22242:25;:29;;:55;;;;:::i;:::-;22235:62;;;;21832:473;;;;:::o;10193:144::-;3652:19;3660:10;3652:7;:19::i;:::-;3644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;10256:14:::1;;;;;;;;;;;10255:15;10247:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;10325:4;10308:14;;:21;;;;;;;;;;;;;;;;;;10193:144::o:0;3693:87::-;3748:4;3773:5;;;;;;;;;;;3762:16;;:7;:16;;;3755:23;;3693:87;;;:::o;9026:67::-;9067:5;5528:1;9075:16;;9026:67;:::o;12632:578::-;3652:19;3660:10;3652:7;:19::i;:::-;3644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12732:13:::1;12773:5;12765:4;12749:13;:11;:13::i;:::-;:20;;;;:::i;:::-;12748:30;;;;:::i;:::-;12732:46;;12789:19;12838:5;12828:6;12812:13;:11;:13::i;:::-;:22;;;;:::i;:::-;12811:32;;;;:::i;:::-;12789:54;;12854:17;12902:5;12891:7;12875:13;:11;:13::i;:::-;:23;;;;:::i;:::-;12874:33;;;;:::i;:::-;12854:53;;12933:5;12918:12;:20;;;;12966:11;12949:14;:28;;;;13006:9;12988:15;:27;;;;13026:13;13042:30;13067:4;13042:20;13060:1;13042:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;13026:46;;13100:5;13091;:14;;:38;;;;;13124:5;13109:11;:20;;13091:38;:60;;;;;13146:5;13133:9;:18;;13091:60;13083:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;12721:489;;;;12632:578:::0;;;:::o;6907:26::-;;;;:::o;5934:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;5985:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;9794:108::-;3652:19;3660:10;3652:7;:19::i;:::-;3644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9892:8:::1;9868:11;:21;9880:8;9868:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;9794:108:::0;;:::o;7468:45::-;;;;:::o;7520:33::-;;;;:::o;9273:103::-;9339:7;9356:9;:18;9366:7;9356:18;;;;;;;;;;;;;;;;9349:25;;9273:103;;;:::o;9099:78::-;9151:7;9169:5;;;;;;;;;;;9162:12;;9099:78;:::o;12382:242::-;3652:19;3660:10;3652:7;:19::i;:::-;3644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12491:4:::1;;;;;;;;;;;12471:25;;:8;:25;;;;:56;;;;;12520:6;;;;;;;;;;;12500:27;;:8;:27;;;;12471:56;:85;;;;;12551:4;12531:25;;:8;:25;;;;12471:85;12463:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;12608:8;12590:5;:15;12596:8;12590:15;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;12382:242:::0;;:::o;20648:140::-;3652:19;3660:10;3652:7;:19::i;:::-;3644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;20741:8:::1;20734:25;;;20760:10;20772:7;20734:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20648:140:::0;;:::o;10047:138::-;10106:7;10123:60;10161:21;10179:1;10161:9;:21::i;:::-;10123:33;10140:15;7669:42;10140:9;:15::i;:::-;10123:12;;:16;;:33;;;;:::i;:::-;:37;;:60;;;;:::i;:::-;10116:67;;10047:138;:::o;8949:71::-;8988:13;9011:7;;;;;;;;;;;;;;;;;9004:14;;8949:71;:::o;6940:29::-;;;;:::o;6108:19::-;;;;;;;;;;;;;:::o;9382:139::-;9460:4;9467:40;9477:10;9489:9;9500:6;9467:9;:40::i;:::-;9515:4;9508:11;;9382:139;;;;:::o;7560:68::-;7596:30;7615:10;7596:18;:30::i;:::-;7560:68::o;21039:190::-;21112:7;21132:19;21154:7;21132:29;;21187:6;:19;21194:11;21187:19;;;;;;;;;;;;;;;:33;;;21172:49;;;21039:190;;;:::o;7340:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9527:127::-;9608:7;9625:11;:18;9637:5;9625:18;;;;;;;;;;;;;;;:27;9644:7;9625:27;;;;;;;;;;;;;;;;9618:34;;9527:127;;;;:::o;11757:617::-;3652:19;3660:10;3652:7;:19::i;:::-;3644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11966:10:::1;11951:12;:25;;;;12002:10;11987:12;:25;;;;12033:5;12023:7;:15;;;;12062:8;12049:10;:21;;;;12098:12;12081:14;:29;;;;12132:6;12121:8;:17;;;;12159:5;12149:7;:15;;;;12189:6;12175:11;:20;;;;12226:19;12242:2;12226:11;;:15;;:19;;;;:::i;:::-;12214:8;;:31;;:65;;;;;12260:19;12276:2;12260:11;;:15;;:19;;;;:::i;:::-;12249:7;;:30;;12214:65;:103;;;;;12298:19;12314:2;12298:11;;:15;;:19;;;;:::i;:::-;12283:11;;:34;;12214:103;12206:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;11757:617:::0;;;;;;;;:::o;18552:224::-;3652:19;3660:10;3652:7;:19::i;:::-;3644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18667:6:::1;18640:16;:24;18657:6;18640:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;18687:6;18684:85;;;18695:19;18704:6;18712:1;18695:8;:19::i;:::-;18684:85;;;18731:35;18740:6;18748:17;18758:6;18748:9;:17::i;:::-;18731:8;:35::i;:::-;18684:85;18552:224:::0;;:::o;6976:31::-;;;;:::o;3786:111::-;3652:19;3660:10;3652:7;:19::i;:::-;3644:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3860:3:::1;3852:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3870:25;3891:3;3870:25;;;;;;:::i;:::-;;;;;;;;3786:111:::0;:::o;7423:38::-;;;;:::o;18209:335::-;18319:1;18302:19;;:5;:19;;;18294:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18400:1;18381:21;;:7;:21;;;18373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18482:6;18452:11;:18;18464:5;18452:18;;;;;;;;;;;;;;;:27;18471:7;18452:27;;;;;;;;;;;;;;;:36;;;;18520:7;18504:32;;18513:5;18504:32;;;18529:6;18504:32;;;;;;:::i;:::-;;;;;;;;18209:335;;;:::o;10792:957::-;10881:37;10892:6;10900:9;10911:6;10881:10;:37::i;:::-;10929:38;10949:6;10957:9;10929:19;:38::i;:::-;10978:41;10993:6;11001:9;11012:6;10978:14;:41::i;:::-;11031:35;11048:6;11056:9;11031:16;:35::i;:::-;11077:39;11090:6;11098:9;11109:6;11077:12;:39::i;:::-;11128:35;11137:6;11145:9;11156:6;11128:8;:35::i;:::-;11194:29;11216:6;11194:9;:17;11204:6;11194:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;11174:9;:17;11184:6;11174:17;;;;;;;;;;;;;;;:49;;;;11234:22;11259:32;11273:6;11281:9;11259:13;:32::i;:::-;:78;;11331:6;11259:78;;;11294:34;11302:6;11310:9;11321:6;11294:7;:34::i;:::-;11259:78;11234:103;;11371:40;11396:14;11371:9;:20;11381:9;11371:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;11348:9;:20;11358:9;11348:20;;;;;;;;;;;;;;;:63;;;;11444:9;11427:43;;11436:6;11427:43;;;11455:14;11427:43;;;;;;:::i;:::-;;;;;;;;11485:16;:24;11502:6;11485:24;;;;;;;;;;;;;;;;;;;;;;;;;11481:67;;11511:35;11520:6;11528:17;11538:6;11528:9;:17::i;:::-;11511:8;:35::i;:::-;11481:67;11562:16;:27;11579:9;11562:27;;;;;;;;;;;;;;;;;;;;;;;;;11558:76;;11591:41;11600:9;11611:20;11621:9;11611;:20::i;:::-;11591:8;:41::i;:::-;11558:76;11674:1;11647:6;:17;11654:9;11647:17;;;;;;;;;;;;;;;:24;;;:28;11644:64;;;11677:29;11696:9;11677:18;:29::i;:::-;11644:64;11718:23;11726:14;;11718:7;:23::i;:::-;10870:879;10792:957;;;:::o;2025:162::-;2111:7;2154:1;2149;:6;;2157:12;2141:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2183:1;2179;:5;2172:12;;2025:162;;;;;:::o;22313:170::-;22383:7;22410:65;22443:31;;22410:28;22420:17;;22410:5;:9;;:28;;;;:::i;:::-;:32;;:65;;;;:::i;:::-;22403:72;;22313:170;;;:::o;812:82::-;870:7;891:1;887;:5;;;;:::i;:::-;880:12;;812:82;;;;:::o;900:::-;958:7;979:1;975;:5;;;;:::i;:::-;968:12;;900:82;;;;:::o;988:::-;1046:7;1067:1;1063;:5;;;;:::i;:::-;1056:12;;988:82;;;;:::o;21237:587::-;21339:1;21309:6;:19;21316:11;21309:19;;;;;;;;;;;;;;;:26;;;:31;21306:46;21343:7;21306:46;21362:14;21379:30;21397:11;21379:17;:30::i;:::-;21362:47;;21432:1;21423:6;:10;21420:397;;;21468:28;21489:6;21468:16;;:20;;:28;;;;:::i;:::-;21449:16;:47;;;;21518:6;;;;;;;;;;;21511:23;;;21535:11;21548:6;21511:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21603:15;21570:17;:30;21588:11;21570:30;;;;;;;;;;;;;;;:48;;;;21669:45;21707:6;21669;:19;21676:11;21669:19;;;;;;;;;;;;;;;:33;;;:37;;:45;;;;:::i;:::-;21633:6;:19;21640:11;21633:19;;;;;;;;;;;;;;;:33;;:81;;;;21765:50;21788:6;:19;21795:11;21788:19;;;;;;;;;;;;;;;:26;;;21765:22;:50::i;:::-;21729:6;:19;21736:11;21729:19;;;;;;;;;;;;;;;:33;;:86;;;;21420:397;21295:529;21237:587;;:::o;18784:482::-;18871:1;18862:6;:10;:45;;;;;18906:1;18876:6;:19;18883:11;18876:19;;;;;;;;;;;;;;;:26;;;:31;18862:45;18859:177;;;18909:27;18924:11;18909:14;:27::i;:::-;18859:177;;;18966:1;18956:6;:11;:45;;;;;19000:1;18971:6;:19;18978:11;18971:19;;;;;;;;;;;;;;;:26;;;:30;18956:45;18953:83;;;19003:30;19021:11;19003:17;:30::i;:::-;18953:83;18859:177;19060:55;19108:6;19060:43;19076:6;:19;19083:11;19076:19;;;;;;;;;;;;;;;:26;;;19060:11;;:15;;:43;;;;:::i;:::-;:47;;:55;;;;:::i;:::-;19046:11;:69;;;;19155:6;19126;:19;19133:11;19126:19;;;;;;;;;;;;;;;:26;;:35;;;;19208:50;19231:6;:19;19238:11;19231:19;;;;;;;;;;;;;;;:26;;;19208:22;:50::i;:::-;19172:6;:19;19179:11;19172:19;;;;;;;;;;;;;;;:33;;:86;;;;18784:482;;:::o;10345:439::-;10467:1;10449:20;;:6;:20;;;10441:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10551:1;10530:23;;:9;:23;;;10522:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10629:1;10612:6;:19;10604:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10706:17;10716:6;10706:9;:17::i;:::-;10696:6;:27;;10688:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;10345:439;;;:::o;13218:191::-;13311:11;:19;13323:6;13311:19;;;;;;;;;;;;;;;;;;;;;;;;;13310:20;:47;;;;;13335:11;:22;13347:9;13335:22;;;;;;;;;;;;;;;;;;;;;;;;;13334:23;13310:47;13307:95;;;13367:14;;;;;;;;;;;13359:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;13307:95;13218:191;;:::o;13421:331::-;13525:11;:19;13537:6;13525:19;;;;;;;;;;;;;;;;;;;;;;;;;13524:20;:47;;;;;13549:11;:22;13561:9;13549:22;;;;;;;;;;;;;;;;;;;;;;;;;13548:23;13524:47;:77;;;;;13596:4;;;;;;;;;;;13575:26;;:9;:26;;;;13524:77;:107;;;;;7669:42;13605:26;;:9;:26;;;;13524:107;13521:224;;;13693:15;;13656:32;13681:6;13656:9;:20;13666:9;13656:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13655:53;;13647:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;13521:224;13421:331;;;:::o;13760:159::-;13857:4;;;;;;;;;;;13844:17;;:9;:17;;;:41;;;;;13866:11;:19;13878:6;13866:19;;;;;;;;;;;;;;;;;;;;;;;;;13865:20;13844:41;13841:71;;;13908:1;13887:9;;:23;;;;;;;:::i;:::-;;;;;;;;13841:71;13760:159;;:::o;13927:341::-;14038:4;;;;;;;;;;;14028:14;;:6;:14;;;14025:124;;14062:14;;14052:6;:24;;:47;;;;14080:11;:19;14092:6;14080:19;;;;;;;;;;;;;;;;;;;;;;;;;14052:47;:73;;;;14103:11;:22;14115:9;14103:22;;;;;;;;;;;;;;;;;;;;;;;;;14052:73;14044:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;14025:124;14177:12;;14167:6;:22;;:45;;;;14193:11;:19;14205:6;14193:19;;;;;;;;;;;;;;;;;;;;;;;;;14167:45;:71;;;;14216:11;:22;14228:9;14216:22;;;;;;;;;;;;;;;;;;;;;;;;;14167:71;14159:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;13927:341;;;:::o;16652:197::-;16744:41;16759:6;16767:9;16778:6;16744:14;:41::i;:::-;16741:101;;;16787:29;16802:13;;16787:14;:29::i;:::-;16838:1;16818:9;:22;;;;16741:101;16652:197;;;:::o;16857:160::-;16938:4;16963:11;:19;16975:6;16963:19;;;;;;;;;;;;;;;;;;;;;;;;;16962:20;:47;;;;;16987:11;:22;16999:9;16987:22;;;;;;;;;;;;;;;;;;;;;;;;;16986:23;16962:47;16955:54;;16857:160;;;;:::o;17338:546::-;17424:7;17480:1;17447:30;17459:6;17467:9;17447:11;:30::i;:::-;:34;17444:418;;;17493:17;17513:59;17541:30;17553:6;17561:9;17541:11;:30::i;:::-;17513:23;17524:11;;17513:6;:10;;:23;;;;:::i;:::-;:27;;:59;;;;:::i;:::-;17493:79;;17610:39;17639:9;17610;:24;17628:4;17610:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;17583:9;:24;17601:4;17583:24;;;;;;;;;;;;;;;:66;;;;17690:4;17665:42;;17674:6;17665:42;;;17697:9;17665:42;;;;;;:::i;:::-;;;;;;;;17739:1;17721:7;;:20;17718:104;;;17743:77;17761:4;7669:42;17783:36;17811:7;;17783:23;17794:11;;17783:6;:10;;:23;;;;:::i;:::-;:27;;:36;;;;:::i;:::-;17743:9;:77::i;:::-;17718:104;17839:21;17850:9;17839:6;:10;;:21;;;;:::i;:::-;17832:28;;;;;17444:418;17870:6;17863:13;;17338:546;;;;;;:::o;724:82::-;782:7;803:1;799;:5;;;;:::i;:::-;792:12;;724:82;;;;:::o;19964:676::-;20014:24;20041:12;:19;;;;20014:46;;20094:1;20074:16;:21;20071:37;;20099:7;;;20071:37;20118:15;20148;20166:9;20148:27;;20186:18;20219:414;20235:3;20225:7;:13;:46;;;;;20255:16;20242:10;:29;20225:46;20219:414;;;20307:16;20291:12;;:32;20288:55;;20340:1;20325:12;:16;;;;20288:55;20360:44;20377:12;20390;;20377:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20360:16;:44::i;:::-;20357:115;;;20424:46;20443:12;20456;;20443:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20424:18;:46::i;:::-;20357:115;20496:35;20508:22;20520:9;20508:7;:11;;:22;;;;:::i;:::-;20496:7;:11;;:35;;;;:::i;:::-;20486:45;;20556:9;20546:19;;20580:12;;:14;;;;;;;;;:::i;:::-;;;;;;20609:12;;;;;:::i;:::-;;;;20219:414;;;20003:637;;;;19964:676;;:::o;22491:167::-;22590:12;:19;;;;22556:18;:31;22575:11;22556:31;;;;;;;;;;;;;;;:53;;;;22620:12;22638:11;22620:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22491:167;:::o;22666:288::-;22782:12;22815:1;22795:12;:19;;;;:21;;;;:::i;:::-;22782:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22734:12;22747:18;:31;22766:11;22747:31;;;;;;;;;;;;;;;;22734:45;;;;;;;;:::i;:::-;;;;;;;;;;:83;;;;;;;;;;;;;;;;;;22886:18;:31;22905:11;22886:31;;;;;;;;;;;;;;;;22828:18;:55;22847:12;22880:1;22860:12;:19;;;;:21;;;;:::i;:::-;22847:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22828:55;;;;;;;;;;;;;;;:89;;;;22928:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;22666:288;:::o;16244:400::-;16342:4;16359:13;16385:15;;16375:6;:25;;16359:41;;16411:19;16461:13;;16433:24;16451:4;16433:9;:24::i;:::-;:41;;16411:63;;16493:8;;;;;;;;;;;16492:9;:24;;;;;16505:11;;;;;;;;;;;16492:24;:42;;;;;16520:14;;;;;;;;;;;16492:42;:54;;;;;16538:8;16492:54;:78;;;;;16551:11;:19;16563:6;16551:19;;;;;;;;;;;;;;;;;;;;;;;;;16550:20;16492:78;:99;;;;;16587:4;;;;;;;;;;;16574:17;;:9;:17;;;16492:99;:126;;;;;16616:1;16595:9;;:23;;16492:126;:144;;;;;16622:14;16492:144;16485:151;;;;16244:400;;;;;:::o;14276:1167::-;6801:4;6790:8;;:15;;;;;;;;;;;;;;;;;;14347:20:::1;14370:82;14450:1;14371:73;14433:10;;14371:57;14413:14;;14371:37;14395:12;;14371:19;14388:1;14371:12;;:16;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;:61;;:73;;;;:::i;:::-;14370:79;;:82;;;;:::i;:::-;14347:105;;14463:32;14498:42;14527:12;14498:24;14509:12;;14498:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;14463:77;;14551:14;14568:36;14579:24;14568:6;:10;;:36;;;;:::i;:::-;14551:53;;14615:22;14640:21;14615:46;;14672:24;14689:6;14672:16;:24::i;:::-;14707:20;14730:41;14756:14;14730:21;:25;;:41;;;;:::i;:::-;14707:64;;14782:19;14803:48;14820:30;14837:12;;14820;:16;;:30;;;;:::i;:::-;14803:12;:16;;:48;;;;:::i;:::-;14782:69;;14862:29;14894;14910:12;;14894:11;:15;;:29;;;;:::i;:::-;14862:61;;14969:1;14937:21;:34;14934:103;;;14973:61;14986:24;15012:21;14973:12;:61::i;:::-;14934:103;15047:23;15073:36;15096:12;;15073:18;15089:1;15073:11;:15;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;15047:62;;15141:1;15123:15;:19;15120:79;;;7864:42;15144:36;;:53;15181:15;15144:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;15120:79;15209:21;15233:34;15256:10;;15233:18;15249:1;15233:11;:15;;:18;;;;:::i;:::-;:22;;:34;;;;:::i;:::-;15209:58;;15297:1;15281:13;:17;15278:46;;;15300:22;15308:13;15300:7;:22::i;:::-;15278:46;15369:1;15337:21;:34;15334:102;;;7767:42;15373:38;;:61;15412:21;15373:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;15334:102;14336:1107;;;;;;;;;6821:5:::0;6810:8;;:16;;;;;;;;;;;;;;;;;;14276:1167;:::o;17025:305::-;17104:7;17127:5;:13;17133:6;17127:13;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;17144:5;:16;17150:9;17144:16;;;;;;;;;;;;;;;;;;;;;;;;;17127:33;17124:76;;;17169:29;17193:3;17169:11;;:15;;:29;;;;:::i;:::-;17162:36;;;;17124:76;17226:4;;;;;;;;;;;17213:17;;:9;:17;;;17210:38;;17239:7;;17232:14;;;;17210:38;17271:4;;;;;;;;;;;17261:14;;:6;:14;;;17258:36;;17284:8;;17277:15;;;;17258:36;17311:11;;17304:18;;17025:305;;;;;:::o;20800:231::-;20870:4;20939:15;20927:9;;20894:17;:30;20912:11;20894:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:60;:129;;;;;21008:15;;20975:30;20993:11;20975:17;:30::i;:::-;:48;20894:129;20887:136;;20800:231;;;:::o;15802:434::-;15868:21;15906:1;15892:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15868:40;;15937:4;15919;15924:1;15919:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15963:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15953:4;15958:1;15953:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15987:53;16004:4;16019:6;;;;;;;;;;;16028:11;15987:8;:53::i;:::-;16051:6;;;;;;;;;;;:57;;;16123:11;16149:1;16165:4;16192;16212:15;16051:177;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15857:379;15802:434;:::o;15451:343::-;15532:53;15549:4;15564:6;;;;;;;;;;;15573:11;15532:8;:53::i;:::-;15596:6;;;;;;;;;;;:22;;;15626:9;15659:4;15679:11;15705:1;15721;7960:42;15770:15;15596:190;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;15451:343;;:::o;19274:682::-;19330:21;19361:6;;;;;;;;;;;19354:24;;;19387:4;19354:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19330:63;;19404:21;19442:1;19428:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19404:40;;19465:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19455:4;19460:1;19455:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;19507:6;;;;;;;;;;;19489:4;19494:1;19489:7;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;19525:6;;;;;;;;;;;:57;;;19590:9;19615:1;19631:4;19658;19678:15;19525:169;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19705:14;19722:58;19766:13;19729:6;;;;;;;;;;;19722:24;;;19755:4;19722:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;:58;;;;:::i;:::-;19705:75;;19808:26;19827:6;19808:14;;:18;;:26;;;;:::i;:::-;19791:14;:43;;;;19865:83;19887:60;19935:11;;19887:43;19923:6;19887:31;;:35;;:43;;;;:::i;:::-;:47;;:60;;;;:::i;:::-;19865:17;;:21;;:83;;;;:::i;:::-;19845:17;:103;;;;19319:637;;;19274:682;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:619::-;3416:6;3424;3432;3481:2;3469:9;3460:7;3456:23;3452:32;3449:119;;;3487:79;;:::i;:::-;3449:119;3607:1;3632:53;3677:7;3668:6;3657:9;3653:22;3632:53;:::i;:::-;3622:63;;3578:117;3734:2;3760:53;3805:7;3796:6;3785:9;3781:22;3760:53;:::i;:::-;3750:63;;3705:118;3862:2;3888:53;3933:7;3924:6;3913:9;3909:22;3888:53;:::i;:::-;3878:63;;3833:118;3339:619;;;;;:::o;3964:118::-;4051:24;4069:5;4051:24;:::i;:::-;4046:3;4039:37;3964:118;;:::o;4088:222::-;4181:4;4219:2;4208:9;4204:18;4196:26;;4232:71;4300:1;4289:9;4285:17;4276:6;4232:71;:::i;:::-;4088:222;;;;:::o;4316:118::-;4403:24;4421:5;4403:24;:::i;:::-;4398:3;4391:37;4316:118;;:::o;4440:222::-;4533:4;4571:2;4560:9;4556:18;4548:26;;4584:71;4652:1;4641:9;4637:17;4628:6;4584:71;:::i;:::-;4440:222;;;;:::o;4668:619::-;4745:6;4753;4761;4810:2;4798:9;4789:7;4785:23;4781:32;4778:119;;;4816:79;;:::i;:::-;4778:119;4936:1;4961:53;5006:7;4997:6;4986:9;4982:22;4961:53;:::i;:::-;4951:63;;4907:117;5063:2;5089:53;5134:7;5125:6;5114:9;5110:22;5089:53;:::i;:::-;5079:63;;5034:118;5191:2;5217:53;5262:7;5253:6;5242:9;5238:22;5217:53;:::i;:::-;5207:63;;5162:118;4668:619;;;;;:::o;5293:329::-;5352:6;5401:2;5389:9;5380:7;5376:23;5372:32;5369:119;;;5407:79;;:::i;:::-;5369:119;5527:1;5552:53;5597:7;5588:6;5577:9;5573:22;5552:53;:::i;:::-;5542:63;;5498:117;5293:329;;;;:::o;5628:86::-;5663:7;5703:4;5696:5;5692:16;5681:27;;5628:86;;;:::o;5720:112::-;5803:22;5819:5;5803:22;:::i;:::-;5798:3;5791:35;5720:112;;:::o;5838:214::-;5927:4;5965:2;5954:9;5950:18;5942:26;;5978:67;6042:1;6031:9;6027:17;6018:6;5978:67;:::i;:::-;5838:214;;;;:::o;6058:116::-;6128:21;6143:5;6128:21;:::i;:::-;6121:5;6118:32;6108:60;;6164:1;6161;6154:12;6108:60;6058:116;:::o;6180:133::-;6223:5;6261:6;6248:20;6239:29;;6277:30;6301:5;6277:30;:::i;:::-;6180:133;;;;:::o;6319:468::-;6384:6;6392;6441:2;6429:9;6420:7;6416:23;6412:32;6409:119;;;6447:79;;:::i;:::-;6409:119;6567:1;6592:53;6637:7;6628:6;6617:9;6613:22;6592:53;:::i;:::-;6582:63;;6538:117;6694:2;6720:50;6762:7;6753:6;6742:9;6738:22;6720:50;:::i;:::-;6710:60;;6665:115;6319:468;;;;;:::o;6793:442::-;6942:4;6980:2;6969:9;6965:18;6957:26;;6993:71;7061:1;7050:9;7046:17;7037:6;6993:71;:::i;:::-;7074:72;7142:2;7131:9;7127:18;7118:6;7074:72;:::i;:::-;7156;7224:2;7213:9;7209:18;7200:6;7156:72;:::i;:::-;6793:442;;;;;;:::o;7241:474::-;7309:6;7317;7366:2;7354:9;7345:7;7341:23;7337:32;7334:119;;;7372:79;;:::i;:::-;7334:119;7492:1;7517:53;7562:7;7553:6;7542:9;7538:22;7517:53;:::i;:::-;7507:63;;7463:117;7619:2;7645:53;7690:7;7681:6;7670:9;7666:22;7645:53;:::i;:::-;7635:63;;7590:118;7241:474;;;;;:::o;7721:1349::-;7843:6;7851;7859;7867;7875;7883;7891;7899;7948:3;7936:9;7927:7;7923:23;7919:33;7916:120;;;7955:79;;:::i;:::-;7916:120;8075:1;8100:53;8145:7;8136:6;8125:9;8121:22;8100:53;:::i;:::-;8090:63;;8046:117;8202:2;8228:53;8273:7;8264:6;8253:9;8249:22;8228:53;:::i;:::-;8218:63;;8173:118;8330:2;8356:53;8401:7;8392:6;8381:9;8377:22;8356:53;:::i;:::-;8346:63;;8301:118;8458:2;8484:53;8529:7;8520:6;8509:9;8505:22;8484:53;:::i;:::-;8474:63;;8429:118;8586:3;8613:53;8658:7;8649:6;8638:9;8634:22;8613:53;:::i;:::-;8603:63;;8557:119;8715:3;8742:53;8787:7;8778:6;8767:9;8763:22;8742:53;:::i;:::-;8732:63;;8686:119;8844:3;8871:53;8916:7;8907:6;8896:9;8892:22;8871:53;:::i;:::-;8861:63;;8815:119;8973:3;9000:53;9045:7;9036:6;9025:9;9021:22;9000:53;:::i;:::-;8990:63;;8944:119;7721:1349;;;;;;;;;;;:::o;9076:104::-;9121:7;9150:24;9168:5;9150:24;:::i;:::-;9139:35;;9076:104;;;:::o;9186:138::-;9267:32;9293:5;9267:32;:::i;:::-;9260:5;9257:43;9247:71;;9314:1;9311;9304:12;9247:71;9186:138;:::o;9330:155::-;9384:5;9422:6;9409:20;9400:29;;9438:41;9473:5;9438:41;:::i;:::-;9330:155;;;;:::o;9491:345::-;9558:6;9607:2;9595:9;9586:7;9582:23;9578:32;9575:119;;;9613:79;;:::i;:::-;9575:119;9733:1;9758:61;9811:7;9802:6;9791:9;9787:22;9758:61;:::i;:::-;9748:71;;9704:125;9491:345;;;;:::o;9842:156::-;9982:8;9978:1;9970:6;9966:14;9959:32;9842:156;:::o;10004:365::-;10146:3;10167:66;10231:1;10226:3;10167:66;:::i;:::-;10160:73;;10242:93;10331:3;10242:93;:::i;:::-;10360:2;10355:3;10351:12;10344:19;;10004:365;;;:::o;10375:419::-;10541:4;10579:2;10568:9;10564:18;10556:26;;10628:9;10622:4;10618:20;10614:1;10603:9;10599:17;10592:47;10656:131;10782:4;10656:131;:::i;:::-;10648:139;;10375:419;;;:::o;10800:173::-;10940:25;10936:1;10928:6;10924:14;10917:49;10800:173;:::o;10979:366::-;11121:3;11142:67;11206:2;11201:3;11142:67;:::i;:::-;11135:74;;11218:93;11307:3;11218:93;:::i;:::-;11336:2;11331:3;11327:12;11320:19;;10979:366;;;:::o;11351:419::-;11517:4;11555:2;11544:9;11540:18;11532:26;;11604:9;11598:4;11594:20;11590:1;11579:9;11575:17;11568:47;11632:131;11758:4;11632:131;:::i;:::-;11624:139;;11351:419;;;:::o;11776:180::-;11824:77;11821:1;11814:88;11921:4;11918:1;11911:15;11945:4;11942:1;11935:15;11962:410;12002:7;12025:20;12043:1;12025:20;:::i;:::-;12020:25;;12059:20;12077:1;12059:20;:::i;:::-;12054:25;;12114:1;12111;12107:9;12136:30;12154:11;12136:30;:::i;:::-;12125:41;;12315:1;12306:7;12302:15;12299:1;12296:22;12276:1;12269:9;12249:83;12226:139;;12345:18;;:::i;:::-;12226:139;12010:362;11962:410;;;;:::o;12378:180::-;12426:77;12423:1;12416:88;12523:4;12520:1;12513:15;12547:4;12544:1;12537:15;12564:185;12604:1;12621:20;12639:1;12621:20;:::i;:::-;12616:25;;12655:20;12673:1;12655:20;:::i;:::-;12650:25;;12694:1;12684:35;;12699:18;;:::i;:::-;12684:35;12741:1;12738;12734:9;12729:14;;12564:185;;;;:::o;12755:233::-;12895:34;12891:1;12883:6;12879:14;12872:58;12964:16;12959:2;12951:6;12947:15;12940:41;12755:233;:::o;12994:366::-;13136:3;13157:67;13221:2;13216:3;13157:67;:::i;:::-;13150:74;;13233:93;13322:3;13233:93;:::i;:::-;13351:2;13346:3;13342:12;13335:19;;12994:366;;;:::o;13366:419::-;13532:4;13570:2;13559:9;13555:18;13547:26;;13619:9;13613:4;13609:20;13605:1;13594:9;13590:17;13583:47;13647:131;13773:4;13647:131;:::i;:::-;13639:139;;13366:419;;;:::o;13791:168::-;13931:20;13927:1;13919:6;13915:14;13908:44;13791:168;:::o;13965:366::-;14107:3;14128:67;14192:2;14187:3;14128:67;:::i;:::-;14121:74;;14204:93;14293:3;14204:93;:::i;:::-;14322:2;14317:3;14313:12;14306:19;;13965:366;;;:::o;14337:419::-;14503:4;14541:2;14530:9;14526:18;14518:26;;14590:9;14584:4;14580:20;14576:1;14565:9;14561:17;14554:47;14618:131;14744:4;14618:131;:::i;:::-;14610:139;;14337:419;;;:::o;14762:332::-;14883:4;14921:2;14910:9;14906:18;14898:26;;14934:71;15002:1;14991:9;14987:17;14978:6;14934:71;:::i;:::-;15015:72;15083:2;15072:9;15068:18;15059:6;15015:72;:::i;:::-;14762:332;;;;;:::o;15100:137::-;15154:5;15185:6;15179:13;15170:22;;15201:30;15225:5;15201:30;:::i;:::-;15100:137;;;;:::o;15243:345::-;15310:6;15359:2;15347:9;15338:7;15334:23;15330:32;15327:119;;;15365:79;;:::i;:::-;15327:119;15485:1;15510:61;15563:7;15554:6;15543:9;15539:22;15510:61;:::i;:::-;15500:71;;15456:125;15243:345;;;;:::o;15594:231::-;15734:34;15730:1;15722:6;15718:14;15711:58;15803:14;15798:2;15790:6;15786:15;15779:39;15594:231;:::o;15831:366::-;15973:3;15994:67;16058:2;16053:3;15994:67;:::i;:::-;15987:74;;16070:93;16159:3;16070:93;:::i;:::-;16188:2;16183:3;16179:12;16172:19;;15831:366;;;:::o;16203:419::-;16369:4;16407:2;16396:9;16392:18;16384:26;;16456:9;16450:4;16446:20;16442:1;16431:9;16427:17;16420:47;16484:131;16610:4;16484:131;:::i;:::-;16476:139;;16203:419;;;:::o;16628:60::-;16656:3;16677:5;16670:12;;16628:60;;;:::o;16694:142::-;16744:9;16777:53;16795:34;16804:24;16822:5;16804:24;:::i;:::-;16795:34;:::i;:::-;16777:53;:::i;:::-;16764:66;;16694:142;;;:::o;16842:126::-;16892:9;16925:37;16956:5;16925:37;:::i;:::-;16912:50;;16842:126;;;:::o;16974:134::-;17032:9;17065:37;17096:5;17065:37;:::i;:::-;17052:50;;16974:134;;;:::o;17114:147::-;17209:45;17248:5;17209:45;:::i;:::-;17204:3;17197:58;17114:147;;:::o;17267:238::-;17368:4;17406:2;17395:9;17391:18;17383:26;;17419:79;17495:1;17484:9;17480:17;17471:6;17419:79;:::i;:::-;17267:238;;;;:::o;17511:223::-;17651:34;17647:1;17639:6;17635:14;17628:58;17720:6;17715:2;17707:6;17703:15;17696:31;17511:223;:::o;17740:366::-;17882:3;17903:67;17967:2;17962:3;17903:67;:::i;:::-;17896:74;;17979:93;18068:3;17979:93;:::i;:::-;18097:2;18092:3;18088:12;18081:19;;17740:366;;;:::o;18112:419::-;18278:4;18316:2;18305:9;18301:18;18293:26;;18365:9;18359:4;18355:20;18351:1;18340:9;18336:17;18329:47;18393:131;18519:4;18393:131;:::i;:::-;18385:139;;18112:419;;;:::o;18537:221::-;18677:34;18673:1;18665:6;18661:14;18654:58;18746:4;18741:2;18733:6;18729:15;18722:29;18537:221;:::o;18764:366::-;18906:3;18927:67;18991:2;18986:3;18927:67;:::i;:::-;18920:74;;19003:93;19092:3;19003:93;:::i;:::-;19121:2;19116:3;19112:12;19105:19;;18764:366;;;:::o;19136:419::-;19302:4;19340:2;19329:9;19325:18;19317:26;;19389:9;19383:4;19379:20;19375:1;19364:9;19360:17;19353:47;19417:131;19543:4;19417:131;:::i;:::-;19409:139;;19136:419;;;:::o;19561:194::-;19601:4;19621:20;19639:1;19621:20;:::i;:::-;19616:25;;19655:20;19673:1;19655:20;:::i;:::-;19650:25;;19699:1;19696;19692:9;19684:17;;19723:1;19717:4;19714:11;19711:37;;;19728:18;;:::i;:::-;19711:37;19561:194;;;;:::o;19761:224::-;19901:34;19897:1;19889:6;19885:14;19878:58;19970:7;19965:2;19957:6;19953:15;19946:32;19761:224;:::o;19991:366::-;20133:3;20154:67;20218:2;20213:3;20154:67;:::i;:::-;20147:74;;20230:93;20319:3;20230:93;:::i;:::-;20348:2;20343:3;20339:12;20332:19;;19991:366;;;:::o;20363:419::-;20529:4;20567:2;20556:9;20552:18;20544:26;;20616:9;20610:4;20606:20;20602:1;20591:9;20587:17;20580:47;20644:131;20770:4;20644:131;:::i;:::-;20636:139;;20363:419;;;:::o;20788:222::-;20928:34;20924:1;20916:6;20912:14;20905:58;20997:5;20992:2;20984:6;20980:15;20973:30;20788:222;:::o;21016:366::-;21158:3;21179:67;21243:2;21238:3;21179:67;:::i;:::-;21172:74;;21255:93;21344:3;21255:93;:::i;:::-;21373:2;21368:3;21364:12;21357:19;;21016:366;;;:::o;21388:419::-;21554:4;21592:2;21581:9;21577:18;21569:26;;21641:9;21635:4;21631:20;21627:1;21616:9;21612:17;21605:47;21669:131;21795:4;21669:131;:::i;:::-;21661:139;;21388:419;;;:::o;21813:228::-;21953:34;21949:1;21941:6;21937:14;21930:58;22022:11;22017:2;22009:6;22005:15;21998:36;21813:228;:::o;22047:366::-;22189:3;22210:67;22274:2;22269:3;22210:67;:::i;:::-;22203:74;;22286:93;22375:3;22286:93;:::i;:::-;22404:2;22399:3;22395:12;22388:19;;22047:366;;;:::o;22419:419::-;22585:4;22623:2;22612:9;22608:18;22600:26;;22672:9;22666:4;22662:20;22658:1;22647:9;22643:17;22636:47;22700:131;22826:4;22700:131;:::i;:::-;22692:139;;22419:419;;;:::o;22844:236::-;22984:34;22980:1;22972:6;22968:14;22961:58;23053:19;23048:2;23040:6;23036:15;23029:44;22844:236;:::o;23086:366::-;23228:3;23249:67;23313:2;23308:3;23249:67;:::i;:::-;23242:74;;23325:93;23414:3;23325:93;:::i;:::-;23443:2;23438:3;23434:12;23427:19;;23086:366;;;:::o;23458:419::-;23624:4;23662:2;23651:9;23647:18;23639:26;;23711:9;23705:4;23701:20;23697:1;23686:9;23682:17;23675:47;23739:131;23865:4;23739:131;:::i;:::-;23731:139;;23458:419;;;:::o;23883:164::-;24023:16;24019:1;24011:6;24007:14;24000:40;23883:164;:::o;24053:366::-;24195:3;24216:67;24280:2;24275:3;24216:67;:::i;:::-;24209:74;;24292:93;24381:3;24292:93;:::i;:::-;24410:2;24405:3;24401:12;24394:19;;24053:366;;;:::o;24425:419::-;24591:4;24629:2;24618:9;24614:18;24606:26;;24678:9;24672:4;24668:20;24664:1;24653:9;24649:17;24642:47;24706:131;24832:4;24706:131;:::i;:::-;24698:139;;24425:419;;;:::o;24850:180::-;24990:32;24986:1;24978:6;24974:14;24967:56;24850:180;:::o;25036:366::-;25178:3;25199:67;25263:2;25258:3;25199:67;:::i;:::-;25192:74;;25275:93;25364:3;25275:93;:::i;:::-;25393:2;25388:3;25384:12;25377:19;;25036:366;;;:::o;25408:419::-;25574:4;25612:2;25601:9;25597:18;25589:26;;25661:9;25655:4;25651:20;25647:1;25636:9;25632:17;25625:47;25689:131;25815:4;25689:131;:::i;:::-;25681:139;;25408:419;;;:::o;25833:191::-;25873:3;25892:20;25910:1;25892:20;:::i;:::-;25887:25;;25926:20;25944:1;25926:20;:::i;:::-;25921:25;;25969:1;25966;25962:9;25955:16;;25990:3;25987:1;25984:10;25981:36;;;25997:18;;:::i;:::-;25981:36;25833:191;;;;:::o;26030:167::-;26170:19;26166:1;26158:6;26154:14;26147:43;26030:167;:::o;26203:366::-;26345:3;26366:67;26430:2;26425:3;26366:67;:::i;:::-;26359:74;;26442:93;26531:3;26442:93;:::i;:::-;26560:2;26555:3;26551:12;26544:19;;26203:366;;;:::o;26575:419::-;26741:4;26779:2;26768:9;26764:18;26756:26;;26828:9;26822:4;26818:20;26814:1;26803:9;26799:17;26792:47;26856:131;26982:4;26856:131;:::i;:::-;26848:139;;26575:419;;;:::o;27000:180::-;27048:77;27045:1;27038:88;27145:4;27142:1;27135:15;27169:4;27166:1;27159:15;27186:233;27225:3;27248:24;27266:5;27248:24;:::i;:::-;27239:33;;27294:66;27287:5;27284:77;27281:103;;27364:18;;:::i;:::-;27281:103;27411:1;27404:5;27400:13;27393:20;;27186:233;;;:::o;27425:180::-;27473:77;27470:1;27463:88;27570:4;27567:1;27560:15;27594:4;27591:1;27584:15;27611:180;27659:77;27656:1;27649:88;27756:4;27753:1;27746:15;27780:4;27777:1;27770:15;27797:143;27854:5;27885:6;27879:13;27870:22;;27901:33;27928:5;27901:33;:::i;:::-;27797:143;;;;:::o;27946:351::-;28016:6;28065:2;28053:9;28044:7;28040:23;28036:32;28033:119;;;28071:79;;:::i;:::-;28033:119;28191:1;28216:64;28272:7;28263:6;28252:9;28248:22;28216:64;:::i;:::-;28206:74;;28162:128;27946:351;;;;:::o;28303:85::-;28348:7;28377:5;28366:16;;28303:85;;;:::o;28394:158::-;28452:9;28485:61;28503:42;28512:32;28538:5;28512:32;:::i;:::-;28503:42;:::i;:::-;28485:61;:::i;:::-;28472:74;;28394:158;;;:::o;28558:147::-;28653:45;28692:5;28653:45;:::i;:::-;28648:3;28641:58;28558:147;;:::o;28711:114::-;28778:6;28812:5;28806:12;28796:22;;28711:114;;;:::o;28831:184::-;28930:11;28964:6;28959:3;28952:19;29004:4;28999:3;28995:14;28980:29;;28831:184;;;;:::o;29021:132::-;29088:4;29111:3;29103:11;;29141:4;29136:3;29132:14;29124:22;;29021:132;;;:::o;29159:108::-;29236:24;29254:5;29236:24;:::i;:::-;29231:3;29224:37;29159:108;;:::o;29273:179::-;29342:10;29363:46;29405:3;29397:6;29363:46;:::i;:::-;29441:4;29436:3;29432:14;29418:28;;29273:179;;;;:::o;29458:113::-;29528:4;29560;29555:3;29551:14;29543:22;;29458:113;;;:::o;29607:732::-;29726:3;29755:54;29803:5;29755:54;:::i;:::-;29825:86;29904:6;29899:3;29825:86;:::i;:::-;29818:93;;29935:56;29985:5;29935:56;:::i;:::-;30014:7;30045:1;30030:284;30055:6;30052:1;30049:13;30030:284;;;30131:6;30125:13;30158:63;30217:3;30202:13;30158:63;:::i;:::-;30151:70;;30244:60;30297:6;30244:60;:::i;:::-;30234:70;;30090:224;30077:1;30074;30070:9;30065:14;;30030:284;;;30034:14;30330:3;30323:10;;29731:608;;;29607:732;;;;:::o;30345:831::-;30608:4;30646:3;30635:9;30631:19;30623:27;;30660:71;30728:1;30717:9;30713:17;30704:6;30660:71;:::i;:::-;30741:80;30817:2;30806:9;30802:18;30793:6;30741:80;:::i;:::-;30868:9;30862:4;30858:20;30853:2;30842:9;30838:18;30831:48;30896:108;30999:4;30990:6;30896:108;:::i;:::-;30888:116;;31014:72;31082:2;31071:9;31067:18;31058:6;31014:72;:::i;:::-;31096:73;31164:3;31153:9;31149:19;31140:6;31096:73;:::i;:::-;30345:831;;;;;;;;:::o;31182:807::-;31431:4;31469:3;31458:9;31454:19;31446:27;;31483:71;31551:1;31540:9;31536:17;31527:6;31483:71;:::i;:::-;31564:72;31632:2;31621:9;31617:18;31608:6;31564:72;:::i;:::-;31646:80;31722:2;31711:9;31707:18;31698:6;31646:80;:::i;:::-;31736;31812:2;31801:9;31797:18;31788:6;31736:80;:::i;:::-;31826:73;31894:3;31883:9;31879:19;31870:6;31826:73;:::i;:::-;31909;31977:3;31966:9;31962:19;31953:6;31909:73;:::i;:::-;31182:807;;;;;;;;;:::o;31995:143::-;32052:5;32083:6;32077:13;32068:22;;32099:33;32126:5;32099:33;:::i;:::-;31995:143;;;;:::o;32144:663::-;32232:6;32240;32248;32297:2;32285:9;32276:7;32272:23;32268:32;32265:119;;;32303:79;;:::i;:::-;32265:119;32423:1;32448:64;32504:7;32495:6;32484:9;32480:22;32448:64;:::i;:::-;32438:74;;32394:128;32561:2;32587:64;32643:7;32634:6;32623:9;32619:22;32587:64;:::i;:::-;32577:74;;32532:129;32700:2;32726:64;32782:7;32773:6;32762:9;32758:22;32726:64;:::i;:::-;32716:74;;32671:129;32144:663;;;;;:::o;32813:351::-;32883:6;32932:2;32920:9;32911:7;32907:23;32903:32;32900:119;;;32938:79;;:::i;:::-;32900:119;33058:1;33083:64;33139:7;33130:6;33119:9;33115:22;33083:64;:::i;:::-;33073:74;;33029:128;32813:351;;;;:::o;33170:720::-;33405:4;33443:3;33432:9;33428:19;33420:27;;33457:79;33533:1;33522:9;33518:17;33509:6;33457:79;:::i;:::-;33583:9;33577:4;33573:20;33568:2;33557:9;33553:18;33546:48;33611:108;33714:4;33705:6;33611:108;:::i;:::-;33603:116;;33729:72;33797:2;33786:9;33782:18;33773:6;33729:72;:::i;:::-;33811;33879:2;33868:9;33864:18;33855:6;33811:72;:::i;:::-;33170:720;;;;;;;:::o

Swarm Source

ipfs://0ff6146ba66067762291944bb23bb012d51ec90d9b1da900578b7a3e30bd7427

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.