ETH Price: $3,509.29 (+3.09%)
Gas: 3 Gwei

Contract

0x8c6EFDA38e400e159Cad7D82fBa021c361713Ddf
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve170730522023-04-18 10:42:59458 days ago1681814579IN
0x8c6EFDA3...361713Ddf
0 ETH0.0015952733.84264778
Approve170730442023-04-18 10:41:23458 days ago1681814483IN
0x8c6EFDA3...361713Ddf
0 ETH0.0015974834.10660314
_claim Dividend170730242023-04-18 10:37:23458 days ago1681814243IN
0x8c6EFDA3...361713Ddf
0 ETH0.0012335939.71897325
Approve170558312023-04-16 0:08:23461 days ago1681603703IN
0x8c6EFDA3...361713Ddf
0 ETH0.0011265523.868646
Approve170010232023-04-08 3:25:59468 days ago1680924359IN
0x8c6EFDA3...361713Ddf
0 ETH0.0010752422.81054661
Approve170010182023-04-08 3:24:59468 days ago1680924299IN
0x8c6EFDA3...361713Ddf
0 ETH0.0009225919.57229288
Approve170010132023-04-08 3:23:59468 days ago1680924239IN
0x8c6EFDA3...361713Ddf
0 ETH0.00100221.25685974
Approve170010022023-04-08 3:21:35468 days ago1680924095IN
0x8c6EFDA3...361713Ddf
0 ETH0.0009691920.56079435
Approve169844842023-04-05 18:58:47471 days ago1680721127IN
0x8c6EFDA3...361713Ddf
0 ETH0.0014384930.51662197
Approve169679572023-04-03 10:39:11473 days ago1680518351IN
0x8c6EFDA3...361713Ddf
0 ETH0.0008513918.06183295
Approve169409032023-03-30 15:18:47477 days ago1680189527IN
0x8c6EFDA3...361713Ddf
0 ETH0.0016357534.70145346
Approve168964752023-03-24 9:29:23483 days ago1679650163IN
0x8c6EFDA3...361713Ddf
0 ETH0.0008812318.67112793
Approve168810222023-03-22 5:21:11485 days ago1679462471IN
0x8c6EFDA3...361713Ddf
0 ETH0.0005785112.27270323
Approve168776572023-03-21 18:01:47486 days ago1679421707IN
0x8c6EFDA3...361713Ddf
0 ETH0.001642235.07033829
Approve168736402023-03-21 4:28:11486 days ago1679372891IN
0x8c6EFDA3...361713Ddf
0 ETH0.0006434813.65110932
Approve168729332023-03-21 2:05:11486 days ago1679364311IN
0x8c6EFDA3...361713Ddf
0 ETH0.0006746814.31290281
Approve168684162023-03-20 10:53:35487 days ago1679309615IN
0x8c6EFDA3...361713Ddf
0 ETH0.0006606414.01522768
Approve168629502023-03-19 16:28:59488 days ago1679243339IN
0x8c6EFDA3...361713Ddf
0 ETH0.0008960319.00872978
Approve168616172023-03-19 11:57:47488 days ago1679227067IN
0x8c6EFDA3...361713Ddf
0 ETH0.0005868412.44951483
Approve168610252023-03-19 9:58:23488 days ago1679219903IN
0x8c6EFDA3...361713Ddf
0 ETH0.0006657314.12318785
Approve168602712023-03-19 7:25:47488 days ago1679210747IN
0x8c6EFDA3...361713Ddf
0 ETH0.0006231113.21897777
Approve168602302023-03-19 7:17:35488 days ago1679210255IN
0x8c6EFDA3...361713Ddf
0 ETH0.000612212.98747807
Approve168602232023-03-19 7:15:59488 days ago1679210159IN
0x8c6EFDA3...361713Ddf
0 ETH0.0006212413.17933375
Approve168576732023-03-18 22:40:23489 days ago1679179223IN
0x8c6EFDA3...361713Ddf
0 ETH0.0006000812.73039441
Approve168547432023-03-18 12:48:59489 days ago1679143739IN
0x8c6EFDA3...361713Ddf
0 ETH0.0008670918.39485745
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To
169844882023-04-05 18:59:35471 days ago1680721175
0x8c6EFDA3...361713Ddf
0.00006615 ETH
169844882023-04-05 18:59:35471 days ago1680721175
0x8c6EFDA3...361713Ddf
0.00850266 ETH
169844882023-04-05 18:59:35471 days ago1680721175
0x8c6EFDA3...361713Ddf
0.00850266 ETH
169844882023-04-05 18:59:35471 days ago1680721175
0x8c6EFDA3...361713Ddf
0.00002363 ETH
169844882023-04-05 18:59:35471 days ago1680721175
0x8c6EFDA3...361713Ddf
0.00212566 ETH
169844882023-04-05 18:59:35471 days ago1680721175
0x8c6EFDA3...361713Ddf
0.0191735 ETH
168485082023-03-17 15:46:47490 days ago1679068007
0x8c6EFDA3...361713Ddf
0.00016959 ETH
168485082023-03-17 15:46:47490 days ago1679068007
0x8c6EFDA3...361713Ddf
0.01805601 ETH
168485082023-03-17 15:46:47490 days ago1679068007
0x8c6EFDA3...361713Ddf
0.01805601 ETH
168485082023-03-17 15:46:47490 days ago1679068007
0x8c6EFDA3...361713Ddf
0.00007931 ETH
168485082023-03-17 15:46:47490 days ago1679068007
0x8c6EFDA3...361713Ddf
0.004514 ETH
168485082023-03-17 15:46:47490 days ago1679068007
0x8c6EFDA3...361713Ddf
0.04071631 ETH
168302022023-03-15 2:00:35492 days ago1678845635
0x8c6EFDA3...361713Ddf
0.00026709 ETH
168302022023-03-15 2:00:35492 days ago1678845635
0x8c6EFDA3...361713Ddf
0.02569642 ETH
168302022023-03-15 2:00:35492 days ago1678845635
0x8c6EFDA3...361713Ddf
0.02569642 ETH
168302022023-03-15 2:00:35492 days ago1678845635
0x8c6EFDA3...361713Ddf
0.00013861 ETH
168302022023-03-15 2:00:35492 days ago1678845635
0x8c6EFDA3...361713Ddf
0.0064241 ETH
168302022023-03-15 2:00:35492 days ago1678845635
0x8c6EFDA3...361713Ddf
0.05794544 ETH
168272452023-03-14 16:00:59493 days ago1678809659
0x8c6EFDA3...361713Ddf
0.00012435 ETH
168272452023-03-14 16:00:59493 days ago1678809659
0x8c6EFDA3...361713Ddf
0.01408945 ETH
168272452023-03-14 16:00:59493 days ago1678809659
0x8c6EFDA3...361713Ddf
0.01408945 ETH
168272452023-03-14 16:00:59493 days ago1678809659
0x8c6EFDA3...361713Ddf
0.0000539 ETH
168272452023-03-14 16:00:59493 days ago1678809659
0x8c6EFDA3...361713Ddf
0.00352236 ETH
168272452023-03-14 16:00:59493 days ago1678809659
0x8c6EFDA3...361713Ddf
0.03177171 ETH
168244942023-03-14 6:46:23493 days ago1678776383
0x8c6EFDA3...361713Ddf
0.0002426 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SHABENA

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-13
*/

/**
 * Shabena is the long lost sister of Shiba, orphaned just a few days after her birth... 
  Telegram: https://t.me/shabenaportal
  Buy - Hold - Earn 2% $SHIB Rewards
*/

/**

*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;


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 SHABENA is IERC20, Ownable {
    using SafeMath for uint256;
    string private constant _name = 'SHABENA';
    string private constant _symbol = 'SHAB';
    uint8 private constant _decimals = 9;
    uint256 private _totalSupply = 1000000000 * (10 ** _decimals);
    uint256 private _maxTxAmount = ( _totalSupply * 100 ) / 10000;
    uint256 private _maxSellAmount = ( _totalSupply * 100 ) / 10000;
    uint256 private _maxWalletToken = ( _totalSupply * 100 ) / 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 = 200;
    uint256 private marketingFee = 200;
    uint256 private rewardsFee = 200;
    uint256 private developmentFee = 0;
    uint256 private burnFee = 0;
    uint256 private totalFee = 600;
    uint256 private sellFee = 600;
    uint256 private transferFee = 0;
    uint256 private denominator = 10000;
    bool private swapEnabled = true;
    uint256 private swapTimes;
    bool private swapping; 
    uint256 private swapThreshold = ( _totalSupply * 900 ) / 100000;
    uint256 private _minTokenAmount = ( _totalSupply * 10 ) / 100000;
    modifier lockTheSwap {swapping = true; _; swapping = false;}
    address public reward = 0x95aD61b0a150d79219dCF64E1E6Cc01f0B64C4cE;
    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 = 60 minutes;
    uint256 public minDistribution = 1 * (10 ** 16);
    uint256 public distributorGas = 1;
    function _claimDividend() external {distributeDividend(msg.sender);}

    address internal constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address internal constant development_receiver = 0x9376bedB571A2E6461Baa457526A5176c7eC2919; 
    address internal constant marketing_receiver = 0x9376bedB571A2E6461Baa457526A5176c7eC2919;
    address internal constant liquidity_receiver = 0x79E1382115D453430a7338009D7f7CE1b712cC88;

    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)] = false;        
        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 startTrading() external onlyOwner {tradingAllowed = true;}
    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 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(5) && sellFee <= denominator.div(5) && transferFee <= denominator.div(5), "totalFee and sellFee cannot be more than 20%");
    }

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

60806040526009600a620000149190620009c8565b633b9aca0062000025919062000a19565b60015561271060646001546200003c919062000a19565b62000048919062000a93565b60025561271060646001546200005f919062000a19565b6200006b919062000a93565b600355612710606460015462000082919062000a19565b6200008e919062000a93565b6004556000600b60146101000a81548160ff02191690831515021790555060c8600c5560c8600d5560c8600e556000600f55600060105561025860115561025860125560006013556127106014556001601560006101000a81548160ff021916908315150217905550620186a06103846001546200010d919062000a19565b62000119919062000a93565b601855620186a0600a60015462000131919062000a19565b6200013d919062000a93565b6019557395ad61b0a150d79219dcf64e1e6cc01f0b64c4ce601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506ec097ce7bc90715b34b9f1000000000601f55610e10602555662386f26fc100006026556001602755348015620001cb57600080fd5b5033806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000737a250d5630b4cf539739df2c5dacb4c659f2488d905060008173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000275573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029b919062000b35565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000303573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000329919062000b35565b6040518363ffffffff1660e01b81526004016200034892919062000b78565b6020604051808303816000875af115801562000368573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200038e919062000b35565b905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760007379e1382115d453430a7338009d7f7ce1b712cc8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000739376bedb571a2e6461baa457526a5176c7ec291973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060016008600061dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860008073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600154600560003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503373ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6001546040516200081e919062000bb6565b60405180910390a3505062000bd3565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b6001851115620008bc578086048111156200089457620008936200082e565b5b6001851615620008a45780820291505b8081029050620008b4856200085d565b945062000874565b94509492505050565b600082620008d75760019050620009aa565b81620008e75760009050620009aa565b81600181146200090057600281146200090b5762000941565b6001915050620009aa565b60ff84111562000920576200091f6200082e565b5b8360020a9150848211156200093a57620009396200082e565b5b50620009aa565b5060208310610133831016604e8410600b84101617156200097b5782820a9050838111156200097557620009746200082e565b5b620009aa565b6200098a84848460016200086a565b92509050818404811115620009a457620009a36200082e565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620009d582620009b1565b9150620009e283620009bb565b925062000a117fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484620008c5565b905092915050565b600062000a2682620009b1565b915062000a3383620009b1565b925082820262000a4381620009b1565b9150828204841483151762000a5d5762000a5c6200082e565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000aa082620009b1565b915062000aad83620009b1565b92508262000ac05762000abf62000a64565b5b828204905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000afd8262000ad0565b9050919050565b62000b0f8162000af0565b811462000b1b57600080fd5b50565b60008151905062000b2f8162000b04565b92915050565b60006020828403121562000b4e5762000b4d62000acb565b5b600062000b5e8482850162000b1e565b91505092915050565b62000b728162000af0565b82525050565b600060408201905062000b8f600083018562000b67565b62000b9e602083018462000b67565b9392505050565b62000bb081620009b1565b82525050565b600060208201905062000bcd600083018462000ba5565b92915050565b614d0e8062000be36000396000f3fe6080604052600436106102085760003560e01c806370a0823111610118578063c942435d116100a0578063e2d6f94c1161006f578063e2d6f94c146107b4578063ef43b02b146107dd578063efca2eed14610806578063f2fde38b14610831578063ffd49c841461085a5761020f565b8063c942435d146106e4578063ca89b899146106fb578063ce7c2ac214610738578063dd62ed3e146107775761020f565b80639358928b116100e75780639358928b146105fb57806395d89b4114610626578063997664d714610651578063a8aa1b311461067c578063a9059cbb146106a75761020f565b806370a0823114610541578063893d20e81461057e5780638c41180e146105a95780638cd4426d146105d25761020f565b80632f54bf6e1161019b5780633f4218e01161016a5780633f4218e0146104485780634355855a1461048557806348ff2b8b146104c25780634fab0ae8146104eb57806360e71962146105165761020f565b80632f54bf6e1461038c578063313ce567146103c957806334c5d2ce146103f45780633a98ef391461041d5761020f565b8063228cb733116101d7578063228cb733146102d057806323b872dd146102fb57806328fd319814610338578063293230b8146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630ca61cb11461027c57806318160ddd146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610885565b6040516102369190613ba7565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190613c62565b6108c2565b6040516102739190613cbd565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613cd8565b6108d9565b005b3480156102b157600080fd5b506102ba61093b565b6040516102c79190613d3a565b60405180910390f35b3480156102dc57600080fd5b506102e5610945565b6040516102f29190613d64565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190613d7f565b61096b565b60405161032f9190613cbd565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190613dd2565b610a36565b60405161036c9190613d3a565b60405180910390f35b34801561038157600080fd5b5061038a610b4f565b005b34801561039857600080fd5b506103b360048036038101906103ae9190613dd2565b610bb4565b6040516103c09190613cbd565b60405180910390f35b3480156103d557600080fd5b506103de610c0d565b6040516103eb9190613e1b565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190613cd8565b610c16565b005b34801561042957600080fd5b50610432610d76565b60405161043f9190613d3a565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190613dd2565b610d7c565b60405161047c9190613cbd565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190613dd2565b610d9c565b6040516104b99190613cbd565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190613e62565b610dbc565b005b3480156104f757600080fd5b50610500610e5f565b60405161050d9190613d3a565b60405180910390f35b34801561052257600080fd5b5061052b610e65565b6040516105389190613d3a565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190613dd2565b610e6b565b6040516105759190613d3a565b60405180910390f35b34801561058a57600080fd5b50610593610eb4565b6040516105a09190613d64565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190613e62565b610edd565b005b3480156105de57600080fd5b506105f960048036038101906105f49190613c62565b6110a3565b005b34801561060757600080fd5b5061061061116e565b60405161061d9190613d3a565b60405180910390f35b34801561063257600080fd5b5061063b6111af565b6040516106489190613ba7565b60405180910390f35b34801561065d57600080fd5b506106666111ec565b6040516106739190613d3a565b60405180910390f35b34801561068857600080fd5b506106916111f2565b60405161069e9190613d64565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613c62565b611218565b6040516106db9190613cbd565b60405180910390f35b3480156106f057600080fd5b506106f961122f565b005b34801561070757600080fd5b50610722600480360381019061071d9190613dd2565b61123a565b60405161072f9190613d3a565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190613dd2565b61128b565b60405161076e93929190613ea2565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613ed9565b6112b5565b6040516107ab9190613d3a565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190613f19565b61133c565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613e62565b611466565b005b34801561081257600080fd5b5061081b611532565b6040516108289190613d3a565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061400d565b611538565b005b34801561086657600080fd5b5061086f6115fa565b60405161087c9190613d3a565b60405180910390f35b60606040518060400160405280600781526020017f53484142454e4100000000000000000000000000000000000000000000000000815250905090565b60006108cf338484611600565b6001905092915050565b6108e233610bb4565b610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890614086565b60405180910390fd5b826025819055508160268190555080602781905550505050565b6000600154905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109788484846117c9565b610a2b8433610a2685604051806060016040528060288152602001614cb160289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aea9092919063ffffffff16565b611600565b600190509392505050565b600080602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610a8a5760009050610b4a565b6000610ad7602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b90506000602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050808211610b3257600092505050610b4a565b610b458183611b7190919063ffffffff16565b925050505b919050565b610b5833610bb4565b610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90614086565b60405180910390fd5b6001600b60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b610c1f33610bb4565b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590614086565b60405180910390fd5b600061271084610c6c61093b565b610c7691906140d5565b610c809190614146565b9050600061271084610c9061093b565b610c9a91906140d5565b610ca49190614146565b9050600061271084610cb461093b565b610cbe91906140d5565b610cc89190614146565b90508260028190555081600381905550806004819055506000610d106103e8610d026005610cf461093b565b611b8790919063ffffffff16565b611b9d90919063ffffffff16565b9050808410158015610d225750808310155b8015610d2e5750808210155b610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d64906141e9565b60405180910390fd5b50505050505050565b601b5481565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b610dc533610bb4565b610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90614086565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60265481565b60275481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ee633610bb4565b610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c90614086565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610fd15750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561100957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614255565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6110ac33610bb4565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290614086565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611126929190614275565b6020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116991906142b3565b505050565b60006111aa61117d6000610e6b565b61119c61118b61dead610e6b565b600154611b7190919063ffffffff16565b611b7190919063ffffffff16565b905090565b60606040518060400160405280600481526020017f5348414200000000000000000000000000000000000000000000000000000000815250905090565b601c5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006112253384846117c9565b6001905092915050565b61123833611bb3565b565b600080829050602360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154915050919050565b60236020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61134533610bb4565b611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90614086565b60405180910390fd5b87600c8190555086600d819055508560108190555084600e8190555083600f819055508260118190555081601281905550806013819055506113d26005601454611b9d90919063ffffffff16565b601154111580156113fa57506113f46005601454611b9d90919063ffffffff16565b60125411155b801561141d57506114176005601454611b9d90919063ffffffff16565b60135411155b61145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390614352565b60405180910390fd5b5050505050505050565b61146f33610bb4565b6114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590614086565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561151b57611516826000611e46565b61152e565b61152d8261152884610e6b565b611e46565b5b5050565b601d5481565b61154133610bb4565b611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614086565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516115ef91906143d1565b60405180910390a150565b60255481565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361166f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116669061445e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d5906144f0565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117bc9190613d3a565b60405180910390a3505050565b6117d4838383612058565b6117de83836121c9565b6117e98383836122c6565b6117f3838361249f565b6117fe83838361256a565b61180983838361279f565b61185b81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b7190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006118aa84846127c8565b6118b457816118c0565b6118bf848484612876565b5b905061191481600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119b49190613d3a565b60405180910390a3600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a2057611a1f84611a1a86610e6b565b611e46565b5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a8457611a8383611a7e85610e6b565b611e46565b5b6000602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115611ad957611ad883611bb3565b5b611ae4602754612a34565b50505050565b6000838311158290611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b299190613ba7565b60405180910390fd5b5082840390509392505050565b6000611b6a601f54611b5c601e5485611b8790919063ffffffff16565b611b9d90919063ffffffff16565b9050919050565b60008183611b7f9190614510565b905092915050565b60008183611b9591906140d5565b905092915050565b60008183611bab9190614146565b905092915050565b6000602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315611e43576000611c0982610a36565b90506000811115611e4157611c2981601d54612a1e90919063ffffffff16565b601d81905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c8c929190614275565b6020604051808303816000875af1158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906142b3565b5042602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d6981602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154612a1e90919063ffffffff16565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611dfa602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600081118015611e9857506000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b15611eab57611ea682612b6f565b611f0d565b600081148015611efd57506000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b15611f0c57611f0b82612c1e565b5b5b611f7681611f68602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154601b54611b7190919063ffffffff16565b612a1e90919063ffffffff16565b601b8190555080602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061200e602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906145b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90614648565b60405180910390fd5b60008111612179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612170906146da565b60405180910390fd5b61218283610e6b565b8111156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb9061476c565b60405180910390fd5b505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561226d5750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122c257600b60149054906101000a900460ff166122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b8906147d8565b60405180910390fd5b5b5050565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561236a5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123c45750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fe575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561249a5760045461245882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b1115612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614844565b60405180910390fd5b5b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156125465750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125665760016016600082825461255e9190614864565b925050819055505b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126ad57600354811115806126195750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061266d5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a3906148e4565b60405180910390fd5b5b600254811115806127075750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061275b5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906148e4565b60405180910390fd5b505050565b6127aa838383612e25565b156127c3576127ba601854612f5e565b60006016819055505b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286e5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b60008061288385856131fd565b1115612a135760006128bb61289886866131fd565b6128ad60145486611b9d90919063ffffffff16565b611b8790919063ffffffff16565b905061290f81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129af9190613d3a565b60405180910390a3600060105411156129f8576129f73061dead6129f26010546129e460145489611b9d90919063ffffffff16565b611b8790919063ffffffff16565b6117c9565b5b612a0b8184611b7190919063ffffffff16565b915050612a17565b8190505b9392505050565b60008183612a2c9190614864565b905092915050565b6000602080549050905060008103612a4c5750612b6c565b6000805a905060005b8483108015612a6357508381105b15612b67578360245410612a7a5760006024819055505b612ac3602060245481548110612a9357612a92614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661338c565b15612b1257612b11602060245481548110612ae157612ae0614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bb3565b5b612b37612b285a84611b7190919063ffffffff16565b84612a1e90919063ffffffff16565b92505a915060246000815480929190612b4f90614933565b91905055508080612b5f90614933565b915050612a55565b505050505b50565b602080549050602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60206001602080549050612c329190614510565b81548110612c4357612c42614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166020602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110612cc157612cc0614904565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546021600060206001602080549050612d619190614510565b81548110612d7257612d71614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506020805480612ded57612dec61497b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60008060195483101590506000601854612e3e30610e6b565b10159050601760009054906101000a900460ff16158015612e6b5750601560009054906101000a900460ff165b8015612e835750600b60149054906101000a900460ff165b8015612e8c5750815b8015612ee25750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f3b5750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612f4a5750600260165410155b8015612f535750805b925050509392505050565b6001601760006101000a81548160ff0219169083151502179055506000612fe06002612fd2600e54612fc4600f54612fb6600d54612fa86001600c54612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b611b8790919063ffffffff16565b9050600061300b82612ffd600c5486611b8790919063ffffffff16565b611b9d90919063ffffffff16565b905060006130228285611b7190919063ffffffff16565b90506000479050613032826133f9565b60006130478247611b7190919063ffffffff16565b90506000613072613063600c5488611b7190919063ffffffff16565b83611b9d90919063ffffffff16565b9050600061308b600c5483611b8790919063ffffffff16565b905060008111156130a1576130a0868261363c565b5b60006130cb600d546130bd600286611b8790919063ffffffff16565b611b8790919063ffffffff16565b9050600081111561313257739376bedb571a2e6461baa457526a5176c7ec291973ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613130573d6000803e3d6000fd5b505b600061315c600e5461314e600287611b8790919063ffffffff16565b611b8790919063ffffffff16565b90506000811115613171576131708161372e565b5b60004711156131d657739376bedb571a2e6461baa457526a5176c7ec291973ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156131d4573d6000803e3d6000fd5b505b5050505050505050506000601760006101000a81548160ff02191690831515021790555050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132a05750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c2576132bb6064601454611b7190919063ffffffff16565b9050613386565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613321576012549050613386565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613380576011549050613386565b60135490505b92915050565b600042602554602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133dc9190614864565b1080156133f257506026546133f083610a36565b115b9050919050565b6000600267ffffffffffffffff811115613416576134156149aa565b5b6040519080825280602002602001820160405280156134445781602001602082028036833780820191505090505b509050308160008151811061345c5761345b614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613503573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352791906149ee565b8160018151811061353b5761353a614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135a230600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611600565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613606959493929190614b14565b600060405180830381600087803b15801561362057600080fd5b505af1158015613634573d6000803e3d6000fd5b505050505050565b61366930600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611600565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807379e1382115d453430a7338009d7f7ce1b712cc88426040518863ffffffff1660e01b81526004016136e496959493929190614b6e565b60606040518083038185885af1158015613702573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137279190614be4565b5050505050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161378b9190613d64565b602060405180830381865afa1580156137a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cc9190614c37565b90506000600267ffffffffffffffff8111156137eb576137ea6149aa565b5b6040519080825280602002602001820160405280156138195781602001602082028036833780820191505090505b509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ad91906149ee565b816000815181106138c1576138c0614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061393257613931614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008430426040518663ffffffff1660e01b81526004016139cf9493929190614c64565b6000604051808303818588803b1580156139e857600080fd5b505af11580156139fc573d6000803e3d6000fd5b50505050506000613ab183601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a629190613d64565b602060405180830381865afa158015613a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa39190614c37565b611b7190919063ffffffff16565b9050613ac881601c54612a1e90919063ffffffff16565b601c81905550613b0b613afa601b54613aec84601f54611b8790919063ffffffff16565b611b9d90919063ffffffff16565b601e54612a1e90919063ffffffff16565b601e8190555050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b51578082015181840152602081019050613b36565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b7982613b17565b613b838185613b22565b9350613b93818560208601613b33565b613b9c81613b5d565b840191505092915050565b60006020820190508181036000830152613bc18184613b6e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bf982613bce565b9050919050565b613c0981613bee565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b6000819050919050565b613c3f81613c2c565b8114613c4a57600080fd5b50565b600081359050613c5c81613c36565b92915050565b60008060408385031215613c7957613c78613bc9565b5b6000613c8785828601613c17565b9250506020613c9885828601613c4d565b9150509250929050565b60008115159050919050565b613cb781613ca2565b82525050565b6000602082019050613cd26000830184613cae565b92915050565b600080600060608486031215613cf157613cf0613bc9565b5b6000613cff86828701613c4d565b9350506020613d1086828701613c4d565b9250506040613d2186828701613c4d565b9150509250925092565b613d3481613c2c565b82525050565b6000602082019050613d4f6000830184613d2b565b92915050565b613d5e81613bee565b82525050565b6000602082019050613d796000830184613d55565b92915050565b600080600060608486031215613d9857613d97613bc9565b5b6000613da686828701613c17565b9350506020613db786828701613c17565b9250506040613dc886828701613c4d565b9150509250925092565b600060208284031215613de857613de7613bc9565b5b6000613df684828501613c17565b91505092915050565b600060ff82169050919050565b613e1581613dff565b82525050565b6000602082019050613e306000830184613e0c565b92915050565b613e3f81613ca2565b8114613e4a57600080fd5b50565b600081359050613e5c81613e36565b92915050565b60008060408385031215613e7957613e78613bc9565b5b6000613e8785828601613c17565b9250506020613e9885828601613e4d565b9150509250929050565b6000606082019050613eb76000830186613d2b565b613ec46020830185613d2b565b613ed16040830184613d2b565b949350505050565b60008060408385031215613ef057613eef613bc9565b5b6000613efe85828601613c17565b9250506020613f0f85828601613c17565b9150509250929050565b600080600080600080600080610100898b031215613f3a57613f39613bc9565b5b6000613f488b828c01613c4d565b9850506020613f598b828c01613c4d565b9750506040613f6a8b828c01613c4d565b9650506060613f7b8b828c01613c4d565b9550506080613f8c8b828c01613c4d565b94505060a0613f9d8b828c01613c4d565b93505060c0613fae8b828c01613c4d565b92505060e0613fbf8b828c01613c4d565b9150509295985092959890939650565b6000613fda82613bce565b9050919050565b613fea81613fcf565b8114613ff557600080fd5b50565b60008135905061400781613fe1565b92915050565b60006020828403121561402357614022613bc9565b5b600061403184828501613ff8565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614070600683613b22565b915061407b8261403a565b602082019050919050565b6000602082019050818103600083015261409f81614063565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140e082613c2c565b91506140eb83613c2c565b92508282026140f981613c2c565b915082820484148315176141105761410f6140a6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061415182613c2c565b915061415c83613c2c565b92508261416c5761416b614117565b5b828204905092915050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560008201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b60006141d3602e83613b22565b91506141de82614177565b604082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f496e656c696769626c6520416464726573730000000000000000000000000000600082015250565b600061423f601283613b22565b915061424a82614209565b602082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b600060408201905061428a6000830185613d55565b6142976020830184613d2b565b9392505050565b6000815190506142ad81613e36565b92915050565b6000602082840312156142c9576142c8613bc9565b5b60006142d78482850161429e565b91505092915050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b600061433c602c83613b22565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b6000819050919050565b600061439761439261438d84613bce565b614372565b613bce565b9050919050565b60006143a98261437c565b9050919050565b60006143bb8261439e565b9050919050565b6143cb816143b0565b82525050565b60006020820190506143e660008301846143c2565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614448602483613b22565b9150614453826143ec565b604082019050919050565b600060208201905081810360008301526144778161443b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144da602283613b22565b91506144e58261447e565b604082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b600061451b82613c2c565b915061452683613c2c565b925082820390508181111561453e5761453d6140a6565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145a0602583613b22565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614632602383613b22565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146c4602983613b22565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614756603183613b22565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b60006147c2600e83613b22565b91506147cd8261478c565b602082019050919050565b600060208201905081810360008301526147f1816147b5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b600061482e601e83613b22565b9150614839826147f8565b602082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b600061486f82613c2c565b915061487a83613c2c565b9250828201905080821115614892576148916140a6565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006148ce601183613b22565b91506148d982614898565b602082019050919050565b600060208201905081810360008301526148fd816148c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061493e82613c2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149705761496f6140a6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506149e881613c00565b92915050565b600060208284031215614a0457614a03613bc9565b5b6000614a12848285016149d9565b91505092915050565b6000819050919050565b6000614a40614a3b614a3684614a1b565b614372565b613c2c565b9050919050565b614a5081614a25565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a8b81613bee565b82525050565b6000614a9d8383614a82565b60208301905092915050565b6000602082019050919050565b6000614ac182614a56565b614acb8185614a61565b9350614ad683614a72565b8060005b83811015614b07578151614aee8882614a91565b9750614af983614aa9565b925050600181019050614ada565b5085935050505092915050565b600060a082019050614b296000830188613d2b565b614b366020830187614a47565b8181036040830152614b488186614ab6565b9050614b576060830185613d55565b614b646080830184613d2b565b9695505050505050565b600060c082019050614b836000830189613d55565b614b906020830188613d2b565b614b9d6040830187614a47565b614baa6060830186614a47565b614bb76080830185613d55565b614bc460a0830184613d2b565b979650505050505050565b600081519050614bde81613c36565b92915050565b600080600060608486031215614bfd57614bfc613bc9565b5b6000614c0b86828701614bcf565b9350506020614c1c86828701614bcf565b9250506040614c2d86828701614bcf565b9150509250925092565b600060208284031215614c4d57614c4c613bc9565b5b6000614c5b84828501614bcf565b91505092915050565b6000608082019050614c796000830187614a47565b8181036020830152614c8b8186614ab6565b9050614c9a6040830185613d55565b614ca76060830184613d2b565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220abc967a85bf5bb220a7ba5cf91aae33873ad01c64ea639f106481d253331dfa564736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102085760003560e01c806370a0823111610118578063c942435d116100a0578063e2d6f94c1161006f578063e2d6f94c146107b4578063ef43b02b146107dd578063efca2eed14610806578063f2fde38b14610831578063ffd49c841461085a5761020f565b8063c942435d146106e4578063ca89b899146106fb578063ce7c2ac214610738578063dd62ed3e146107775761020f565b80639358928b116100e75780639358928b146105fb57806395d89b4114610626578063997664d714610651578063a8aa1b311461067c578063a9059cbb146106a75761020f565b806370a0823114610541578063893d20e81461057e5780638c41180e146105a95780638cd4426d146105d25761020f565b80632f54bf6e1161019b5780633f4218e01161016a5780633f4218e0146104485780634355855a1461048557806348ff2b8b146104c25780634fab0ae8146104eb57806360e71962146105165761020f565b80632f54bf6e1461038c578063313ce567146103c957806334c5d2ce146103f45780633a98ef391461041d5761020f565b8063228cb733116101d7578063228cb733146102d057806323b872dd146102fb57806328fd319814610338578063293230b8146103755761020f565b806306fdde0314610214578063095ea7b31461023f5780630ca61cb11461027c57806318160ddd146102a55761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610885565b6040516102369190613ba7565b60405180910390f35b34801561024b57600080fd5b5061026660048036038101906102619190613c62565b6108c2565b6040516102739190613cbd565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613cd8565b6108d9565b005b3480156102b157600080fd5b506102ba61093b565b6040516102c79190613d3a565b60405180910390f35b3480156102dc57600080fd5b506102e5610945565b6040516102f29190613d64565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d9190613d7f565b61096b565b60405161032f9190613cbd565b60405180910390f35b34801561034457600080fd5b5061035f600480360381019061035a9190613dd2565b610a36565b60405161036c9190613d3a565b60405180910390f35b34801561038157600080fd5b5061038a610b4f565b005b34801561039857600080fd5b506103b360048036038101906103ae9190613dd2565b610bb4565b6040516103c09190613cbd565b60405180910390f35b3480156103d557600080fd5b506103de610c0d565b6040516103eb9190613e1b565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190613cd8565b610c16565b005b34801561042957600080fd5b50610432610d76565b60405161043f9190613d3a565b60405180910390f35b34801561045457600080fd5b5061046f600480360381019061046a9190613dd2565b610d7c565b60405161047c9190613cbd565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190613dd2565b610d9c565b6040516104b99190613cbd565b60405180910390f35b3480156104ce57600080fd5b506104e960048036038101906104e49190613e62565b610dbc565b005b3480156104f757600080fd5b50610500610e5f565b60405161050d9190613d3a565b60405180910390f35b34801561052257600080fd5b5061052b610e65565b6040516105389190613d3a565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190613dd2565b610e6b565b6040516105759190613d3a565b60405180910390f35b34801561058a57600080fd5b50610593610eb4565b6040516105a09190613d64565b60405180910390f35b3480156105b557600080fd5b506105d060048036038101906105cb9190613e62565b610edd565b005b3480156105de57600080fd5b506105f960048036038101906105f49190613c62565b6110a3565b005b34801561060757600080fd5b5061061061116e565b60405161061d9190613d3a565b60405180910390f35b34801561063257600080fd5b5061063b6111af565b6040516106489190613ba7565b60405180910390f35b34801561065d57600080fd5b506106666111ec565b6040516106739190613d3a565b60405180910390f35b34801561068857600080fd5b506106916111f2565b60405161069e9190613d64565b60405180910390f35b3480156106b357600080fd5b506106ce60048036038101906106c99190613c62565b611218565b6040516106db9190613cbd565b60405180910390f35b3480156106f057600080fd5b506106f961122f565b005b34801561070757600080fd5b50610722600480360381019061071d9190613dd2565b61123a565b60405161072f9190613d3a565b60405180910390f35b34801561074457600080fd5b5061075f600480360381019061075a9190613dd2565b61128b565b60405161076e93929190613ea2565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613ed9565b6112b5565b6040516107ab9190613d3a565b60405180910390f35b3480156107c057600080fd5b506107db60048036038101906107d69190613f19565b61133c565b005b3480156107e957600080fd5b5061080460048036038101906107ff9190613e62565b611466565b005b34801561081257600080fd5b5061081b611532565b6040516108289190613d3a565b60405180910390f35b34801561083d57600080fd5b506108586004803603810190610853919061400d565b611538565b005b34801561086657600080fd5b5061086f6115fa565b60405161087c9190613d3a565b60405180910390f35b60606040518060400160405280600781526020017f53484142454e4100000000000000000000000000000000000000000000000000815250905090565b60006108cf338484611600565b6001905092915050565b6108e233610bb4565b610921576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161091890614086565b60405180910390fd5b826025819055508160268190555080602781905550505050565b6000600154905090565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006109788484846117c9565b610a2b8433610a2685604051806060016040528060288152602001614cb160289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611aea9092919063ffffffff16565b611600565b600190509392505050565b600080602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000015403610a8a5760009050610b4a565b6000610ad7602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b90506000602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101549050808211610b3257600092505050610b4a565b610b458183611b7190919063ffffffff16565b925050505b919050565b610b5833610bb4565b610b97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8e90614086565b60405180910390fd5b6001600b60146101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050919050565b60006009905090565b610c1f33610bb4565b610c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5590614086565b60405180910390fd5b600061271084610c6c61093b565b610c7691906140d5565b610c809190614146565b9050600061271084610c9061093b565b610c9a91906140d5565b610ca49190614146565b9050600061271084610cb461093b565b610cbe91906140d5565b610cc89190614146565b90508260028190555081600381905550806004819055506000610d106103e8610d026005610cf461093b565b611b8790919063ffffffff16565b611b9d90919063ffffffff16565b9050808410158015610d225750808310155b8015610d2e5750808210155b610d6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d64906141e9565b60405180910390fd5b50505050505050565b601b5481565b60076020528060005260406000206000915054906101000a900460ff1681565b60086020528060005260406000206000915054906101000a900460ff1681565b610dc533610bb4565b610e04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfb90614086565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60265481565b60275481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610ee633610bb4565b610f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1c90614086565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015610fd15750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561100957503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b611048576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103f90614255565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6110ac33610bb4565b6110eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e290614086565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611126929190614275565b6020604051808303816000875af1158015611145573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116991906142b3565b505050565b60006111aa61117d6000610e6b565b61119c61118b61dead610e6b565b600154611b7190919063ffffffff16565b611b7190919063ffffffff16565b905090565b60606040518060400160405280600481526020017f5348414200000000000000000000000000000000000000000000000000000000815250905090565b601c5481565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006112253384846117c9565b6001905092915050565b61123833611bb3565b565b600080829050602360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154915050919050565b60236020528060005260406000206000915090508060000154908060010154908060020154905083565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61134533610bb4565b611384576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137b90614086565b60405180910390fd5b87600c8190555086600d819055508560108190555084600e8190555083600f819055508260118190555081601281905550806013819055506113d26005601454611b9d90919063ffffffff16565b601154111580156113fa57506113f46005601454611b9d90919063ffffffff16565b60125411155b801561141d57506114176005601454611b9d90919063ffffffff16565b60135411155b61145c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145390614352565b60405180910390fd5b5050505050505050565b61146f33610bb4565b6114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a590614086565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550801561151b57611516826000611e46565b61152e565b61152d8261152884610e6b565b611e46565b5b5050565b601d5481565b61154133610bb4565b611580576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157790614086565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163816040516115ef91906143d1565b60405180910390a150565b60255481565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361166f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116669061445e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d5906144f0565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117bc9190613d3a565b60405180910390a3505050565b6117d4838383612058565b6117de83836121c9565b6117e98383836122c6565b6117f3838361249f565b6117fe83838361256a565b61180983838361279f565b61185b81600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611b7190919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060006118aa84846127c8565b6118b457816118c0565b6118bf848484612876565b5b905061191481600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119b49190613d3a565b60405180910390a3600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a2057611a1f84611a1a86610e6b565b611e46565b5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611a8457611a8383611a7e85610e6b565b611e46565b5b6000602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001541115611ad957611ad883611bb3565b5b611ae4602754612a34565b50505050565b6000838311158290611b32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b299190613ba7565b60405180910390fd5b5082840390509392505050565b6000611b6a601f54611b5c601e5485611b8790919063ffffffff16565b611b9d90919063ffffffff16565b9050919050565b60008183611b7f9190614510565b905092915050565b60008183611b9591906140d5565b905092915050565b60008183611bab9190614146565b905092915050565b6000602360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001540315611e43576000611c0982610a36565b90506000811115611e4157611c2981601d54612a1e90919063ffffffff16565b601d81905550601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611c8c929190614275565b6020604051808303816000875af1158015611cab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ccf91906142b3565b5042602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611d6981602360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020154612a1e90919063ffffffff16565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060020181905550611dfa602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505b505b50565b600081118015611e9857506000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154145b15611eab57611ea682612b6f565b611f0d565b600081148015611efd57506000602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154115b15611f0c57611f0b82612c1e565b5b5b611f7681611f68602360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154601b54611b7190919063ffffffff16565b612a1e90919063ffffffff16565b601b8190555080602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018190555061200e602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000154611b3f565b602360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101819055505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036120c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120be906145b6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90614648565b60405180910390fd5b60008111612179576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612170906146da565b60405180910390fd5b61218283610e6b565b8111156121c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121bb9061476c565b60405180910390fd5b505050565b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561226d5750600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122c257600b60149054906101000a900460ff166122c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b8906147d8565b60405180910390fd5b5b5050565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561236a5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156123c45750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156123fe575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561249a5760045461245882600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b1115612499576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249090614844565b60405180910390fd5b5b505050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480156125465750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156125665760016016600082825461255e9190614864565b925050819055505b5050565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146126ad57600354811115806126195750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061266d5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6126ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a3906148e4565b60405180910390fd5b5b600254811115806127075750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8061275b5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906148e4565b60405180910390fd5b505050565b6127aa838383612e25565b156127c3576127ba601854612f5e565b60006016819055505b505050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561286e5750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b905092915050565b60008061288385856131fd565b1115612a135760006128bb61289886866131fd565b6128ad60145486611b9d90919063ffffffff16565b611b8790919063ffffffff16565b905061290f81600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a1e90919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516129af9190613d3a565b60405180910390a3600060105411156129f8576129f73061dead6129f26010546129e460145489611b9d90919063ffffffff16565b611b8790919063ffffffff16565b6117c9565b5b612a0b8184611b7190919063ffffffff16565b915050612a17565b8190505b9392505050565b60008183612a2c9190614864565b905092915050565b6000602080549050905060008103612a4c5750612b6c565b6000805a905060005b8483108015612a6357508381105b15612b67578360245410612a7a5760006024819055505b612ac3602060245481548110612a9357612a92614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661338c565b15612b1257612b11602060245481548110612ae157612ae0614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611bb3565b5b612b37612b285a84611b7190919063ffffffff16565b84612a1e90919063ffffffff16565b92505a915060246000815480929190612b4f90614933565b91905055508080612b5f90614933565b915050612a55565b505050505b50565b602080549050602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506020819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60206001602080549050612c329190614510565b81548110612c4357612c42614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166020602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205481548110612cc157612cc0614904565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546021600060206001602080549050612d619190614510565b81548110612d7257612d71614904565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506020805480612ded57612dec61497b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905550565b60008060195483101590506000601854612e3e30610e6b565b10159050601760009054906101000a900460ff16158015612e6b5750601560009054906101000a900460ff165b8015612e835750600b60149054906101000a900460ff165b8015612e8c5750815b8015612ee25750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612f3b5750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8015612f4a5750600260165410155b8015612f535750805b925050509392505050565b6001601760006101000a81548160ff0219169083151502179055506000612fe06002612fd2600e54612fc4600f54612fb6600d54612fa86001600c54612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b612a1e90919063ffffffff16565b611b8790919063ffffffff16565b9050600061300b82612ffd600c5486611b8790919063ffffffff16565b611b9d90919063ffffffff16565b905060006130228285611b7190919063ffffffff16565b90506000479050613032826133f9565b60006130478247611b7190919063ffffffff16565b90506000613072613063600c5488611b7190919063ffffffff16565b83611b9d90919063ffffffff16565b9050600061308b600c5483611b8790919063ffffffff16565b905060008111156130a1576130a0868261363c565b5b60006130cb600d546130bd600286611b8790919063ffffffff16565b611b8790919063ffffffff16565b9050600081111561313257739376bedb571a2e6461baa457526a5176c7ec291973ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613130573d6000803e3d6000fd5b505b600061315c600e5461314e600287611b8790919063ffffffff16565b611b8790919063ffffffff16565b90506000811115613171576131708161372e565b5b60004711156131d657739376bedb571a2e6461baa457526a5176c7ec291973ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156131d4573d6000803e3d6000fd5b505b5050505050505050506000601760006101000a81548160ff02191690831515021790555050565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132a05750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156132c2576132bb6064601454611b7190919063ffffffff16565b9050613386565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613321576012549050613386565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613380576011549050613386565b60135490505b92915050565b600042602554602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133dc9190614864565b1080156133f257506026546133f083610a36565b115b9050919050565b6000600267ffffffffffffffff811115613416576134156149aa565b5b6040519080825280602002602001820160405280156134445781602001602082028036833780820191505090505b509050308160008151811061345c5761345b614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613503573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061352791906149ee565b8160018151811061353b5761353a614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506135a230600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611600565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613606959493929190614b14565b600060405180830381600087803b15801561362057600080fd5b505af1158015613634573d6000803e3d6000fd5b505050505050565b61366930600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684611600565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000807379e1382115d453430a7338009d7f7ce1b712cc88426040518863ffffffff1660e01b81526004016136e496959493929190614b6e565b60606040518083038185885af1158015613702573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906137279190614be4565b5050505050565b6000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161378b9190613d64565b602060405180830381865afa1580156137a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137cc9190614c37565b90506000600267ffffffffffffffff8111156137eb576137ea6149aa565b5b6040519080825280602002602001820160405280156138195781602001602082028036833780820191505090505b509050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613889573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138ad91906149ee565b816000815181106138c1576138c0614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168160018151811061393257613931614904565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008430426040518663ffffffff1660e01b81526004016139cf9493929190614c64565b6000604051808303818588803b1580156139e857600080fd5b505af11580156139fc573d6000803e3d6000fd5b50505050506000613ab183601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401613a629190613d64565b602060405180830381865afa158015613a7f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aa39190614c37565b611b7190919063ffffffff16565b9050613ac881601c54612a1e90919063ffffffff16565b601c81905550613b0b613afa601b54613aec84601f54611b8790919063ffffffff16565b611b9d90919063ffffffff16565b601e54612a1e90919063ffffffff16565b601e8190555050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613b51578082015181840152602081019050613b36565b60008484015250505050565b6000601f19601f8301169050919050565b6000613b7982613b17565b613b838185613b22565b9350613b93818560208601613b33565b613b9c81613b5d565b840191505092915050565b60006020820190508181036000830152613bc18184613b6e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613bf982613bce565b9050919050565b613c0981613bee565b8114613c1457600080fd5b50565b600081359050613c2681613c00565b92915050565b6000819050919050565b613c3f81613c2c565b8114613c4a57600080fd5b50565b600081359050613c5c81613c36565b92915050565b60008060408385031215613c7957613c78613bc9565b5b6000613c8785828601613c17565b9250506020613c9885828601613c4d565b9150509250929050565b60008115159050919050565b613cb781613ca2565b82525050565b6000602082019050613cd26000830184613cae565b92915050565b600080600060608486031215613cf157613cf0613bc9565b5b6000613cff86828701613c4d565b9350506020613d1086828701613c4d565b9250506040613d2186828701613c4d565b9150509250925092565b613d3481613c2c565b82525050565b6000602082019050613d4f6000830184613d2b565b92915050565b613d5e81613bee565b82525050565b6000602082019050613d796000830184613d55565b92915050565b600080600060608486031215613d9857613d97613bc9565b5b6000613da686828701613c17565b9350506020613db786828701613c17565b9250506040613dc886828701613c4d565b9150509250925092565b600060208284031215613de857613de7613bc9565b5b6000613df684828501613c17565b91505092915050565b600060ff82169050919050565b613e1581613dff565b82525050565b6000602082019050613e306000830184613e0c565b92915050565b613e3f81613ca2565b8114613e4a57600080fd5b50565b600081359050613e5c81613e36565b92915050565b60008060408385031215613e7957613e78613bc9565b5b6000613e8785828601613c17565b9250506020613e9885828601613e4d565b9150509250929050565b6000606082019050613eb76000830186613d2b565b613ec46020830185613d2b565b613ed16040830184613d2b565b949350505050565b60008060408385031215613ef057613eef613bc9565b5b6000613efe85828601613c17565b9250506020613f0f85828601613c17565b9150509250929050565b600080600080600080600080610100898b031215613f3a57613f39613bc9565b5b6000613f488b828c01613c4d565b9850506020613f598b828c01613c4d565b9750506040613f6a8b828c01613c4d565b9650506060613f7b8b828c01613c4d565b9550506080613f8c8b828c01613c4d565b94505060a0613f9d8b828c01613c4d565b93505060c0613fae8b828c01613c4d565b92505060e0613fbf8b828c01613c4d565b9150509295985092959890939650565b6000613fda82613bce565b9050919050565b613fea81613fcf565b8114613ff557600080fd5b50565b60008135905061400781613fe1565b92915050565b60006020828403121561402357614022613bc9565b5b600061403184828501613ff8565b91505092915050565b7f214f574e45520000000000000000000000000000000000000000000000000000600082015250565b6000614070600683613b22565b915061407b8261403a565b602082019050919050565b6000602082019050818103600083015261409f81614063565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006140e082613c2c565b91506140eb83613c2c565b92508282026140f981613c2c565b915082820484148315176141105761410f6140a6565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061415182613c2c565b915061415c83613c2c565b92508261416c5761416b614117565b5b828204905092915050565b7f4d61782054587320616e64204d61782057616c6c65742063616e6e6f7420626560008201527f206c657373207468616e202e3525000000000000000000000000000000000000602082015250565b60006141d3602e83613b22565b91506141de82614177565b604082019050919050565b60006020820190508181036000830152614202816141c6565b9050919050565b7f496e656c696769626c6520416464726573730000000000000000000000000000600082015250565b600061423f601283613b22565b915061424a82614209565b602082019050919050565b6000602082019050818103600083015261426e81614232565b9050919050565b600060408201905061428a6000830185613d55565b6142976020830184613d2b565b9392505050565b6000815190506142ad81613e36565b92915050565b6000602082840312156142c9576142c8613bc9565b5b60006142d78482850161429e565b91505092915050565b7f746f74616c46656520616e642073656c6c4665652063616e6e6f74206265206d60008201527f6f7265207468616e203230250000000000000000000000000000000000000000602082015250565b600061433c602c83613b22565b9150614347826142e0565b604082019050919050565b6000602082019050818103600083015261436b8161432f565b9050919050565b6000819050919050565b600061439761439261438d84613bce565b614372565b613bce565b9050919050565b60006143a98261437c565b9050919050565b60006143bb8261439e565b9050919050565b6143cb816143b0565b82525050565b60006020820190506143e660008301846143c2565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614448602483613b22565b9150614453826143ec565b604082019050919050565b600060208201905081810360008301526144778161443b565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006144da602283613b22565b91506144e58261447e565b604082019050919050565b60006020820190508181036000830152614509816144cd565b9050919050565b600061451b82613c2c565b915061452683613c2c565b925082820390508181111561453e5761453d6140a6565b5b92915050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006145a0602583613b22565b91506145ab82614544565b604082019050919050565b600060208201905081810360008301526145cf81614593565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614632602383613b22565b915061463d826145d6565b604082019050919050565b6000602082019050818103600083015261466181614625565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006146c4602983613b22565b91506146cf82614668565b604082019050919050565b600060208201905081810360008301526146f3816146b7565b9050919050565b7f596f752061726520747279696e6720746f207472616e73666572206d6f72652060008201527f7468616e20796f75722062616c616e6365000000000000000000000000000000602082015250565b6000614756603183613b22565b9150614761826146fa565b604082019050919050565b6000602082019050818103600083015261478581614749565b9050919050565b7f74726164696e67416c6c6f776564000000000000000000000000000000000000600082015250565b60006147c2600e83613b22565b91506147cd8261478c565b602082019050919050565b600060208201905081810360008301526147f1816147b5565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420616d6f756e742e0000600082015250565b600061482e601e83613b22565b9150614839826147f8565b602082019050919050565b6000602082019050818103600083015261485d81614821565b9050919050565b600061486f82613c2c565b915061487a83613c2c565b9250828201905080821115614892576148916140a6565b5b92915050565b7f5458204c696d6974204578636565646564000000000000000000000000000000600082015250565b60006148ce601183613b22565b91506148d982614898565b602082019050919050565b600060208201905081810360008301526148fd816148c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600061493e82613c2c565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036149705761496f6140a6565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506149e881613c00565b92915050565b600060208284031215614a0457614a03613bc9565b5b6000614a12848285016149d9565b91505092915050565b6000819050919050565b6000614a40614a3b614a3684614a1b565b614372565b613c2c565b9050919050565b614a5081614a25565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614a8b81613bee565b82525050565b6000614a9d8383614a82565b60208301905092915050565b6000602082019050919050565b6000614ac182614a56565b614acb8185614a61565b9350614ad683614a72565b8060005b83811015614b07578151614aee8882614a91565b9750614af983614aa9565b925050600181019050614ada565b5085935050505092915050565b600060a082019050614b296000830188613d2b565b614b366020830187614a47565b8181036040830152614b488186614ab6565b9050614b576060830185613d55565b614b646080830184613d2b565b9695505050505050565b600060c082019050614b836000830189613d55565b614b906020830188613d2b565b614b9d6040830187614a47565b614baa6060830186614a47565b614bb76080830185613d55565b614bc460a0830184613d2b565b979650505050505050565b600081519050614bde81613c36565b92915050565b600080600060608486031215614bfd57614bfc613bc9565b5b6000614c0b86828701614bcf565b9350506020614c1c86828701614bcf565b9250506040614c2d86828701614bcf565b9150509250925092565b600060208284031215614c4d57614c4c613bc9565b5b6000614c5b84828501614bcf565b91505092915050565b6000608082019050614c796000830187614a47565b8181036020830152614c8b8186614ab6565b9050614c9a6040830185613d55565b614ca76060830184613d2b565b9594505050505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220abc967a85bf5bb220a7ba5cf91aae33873ad01c64ea639f106481d253331dfa564736f6c63430008110033

Deployed Bytecode Sourcemap

4870:17806:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8417:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9522:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22421:252;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8797:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6379:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17351:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21291:473;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8640:67;;;;;;;;;;;;;:::i;:::-;;3250:87;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8567:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12091:578;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6452:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5482:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5533:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9408:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7012:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7066:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8887:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8713:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11841:242;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20107:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9661:138;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8490:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6485:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5656:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8996:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7106:68;;;;;;;;;;;;;:::i;:::-;;20498:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6885:40;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;9141:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11219:614;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18011:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6521:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3343:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6968:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8417:67;8454:13;8477:5;;;;;;;;;;;;;;;;;8470:12;;8417:67;:::o;9522:133::-;9597:4;9604:37;9613:10;9625:7;9634:6;9604:8;:37::i;:::-;9649:4;9642:11;;9522:133;;;;:::o;22421:252::-;3209:19;3217:10;3209:7;:19::i;:::-;3201:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;22567:10:::1;22555:9;:22;;;;22606:16;22588:15;:34;;;;22650:15;22633:14;:32;;;;22421:252:::0;;;:::o;8797:84::-;8850:7;8867:12;;8860:19;;8797:84;:::o;6379:66::-;;;;;;;;;;;;;:::o;17351:309::-;17449:4;17466:36;17476:6;17484:9;17495:6;17466:9;:36::i;:::-;17513:117;17522:6;17530:10;17542:87;17578:6;17542:87;;;;;;;;;;;;;;;;;:11;:19;17554:6;17542:19;;;;;;;;;;;;;;;:31;17562:10;17542:31;;;;;;;;;;;;;;;;:35;;:87;;;;;:::i;:::-;17513:8;:117::i;:::-;17648:4;17641:11;;17351:309;;;;;:::o;21291:473::-;21360:7;21413:1;21383:6;:19;21390:11;21383:19;;;;;;;;;;;;;;;:26;;;:31;21380:48;;21424:1;21417:8;;;;21380:48;21438:33;21474:50;21497:6;:19;21504:11;21497:19;;;;;;;;;;;;;;;:26;;;21474:22;:50::i;:::-;21438:86;;21535:32;21570:6;:19;21577:11;21570:19;;;;;;;;;;;;;;;:33;;;21535:68;;21646:24;21617:25;:53;21614:70;;21680:1;21673:8;;;;;;21614:70;21701:55;21731:24;21701:25;:29;;:55;;;;:::i;:::-;21694:62;;;;21291:473;;;;:::o;8640:67::-;3209:19;3217:10;3209:7;:19::i;:::-;3201:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8701:4:::1;8684:14;;:21;;;;;;;;;;;;;;;;;;8640:67::o:0;3250:87::-;3305:4;3330:5;;;;;;;;;;;3319:16;;:7;:16;;;3312:23;;3250:87;;;:::o;8567:67::-;8608:5;5076:1;8616:16;;8567:67;:::o;12091:578::-;3209:19;3217:10;3209:7;:19::i;:::-;3201:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;12191:13:::1;12232:5;12224:4;12208:13;:11;:13::i;:::-;:20;;;;:::i;:::-;12207:30;;;;:::i;:::-;12191:46;;12248:19;12297:5;12287:6;12271:13;:11;:13::i;:::-;:22;;;;:::i;:::-;12270:32;;;;:::i;:::-;12248:54;;12313:17;12361:5;12350:7;12334:13;:11;:13::i;:::-;:23;;;;:::i;:::-;12333:33;;;;:::i;:::-;12313:53;;12392:5;12377:12;:20;;;;12425:11;12408:14;:28;;;;12465:9;12447:15;:27;;;;12485:13;12501:30;12526:4;12501:20;12519:1;12501:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:30;;;;:::i;:::-;12485:46;;12559:5;12550;:14;;:38;;;;;12583:5;12568:11;:20;;12550:38;:60;;;;;12605:5;12592:9;:18;;12550:60;12542:119;;;;;;;;;;;;:::i;:::-;;;;;;;;;12180:489;;;;12091:578:::0;;;:::o;6452:26::-;;;;:::o;5482:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;5533:49::-;;;;;;;;;;;;;;;;;;;;;;:::o;9408:108::-;3209:19;3217:10;3209:7;:19::i;:::-;3201:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;9506:8:::1;9482:11;:21;9494:8;9482:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;9408:108:::0;;:::o;7012:47::-;;;;:::o;7066:33::-;;;;:::o;8887:103::-;8953:7;8970:9;:18;8980:7;8970:18;;;;;;;;;;;;;;;;8963:25;;8887:103;;;:::o;8713:78::-;8765:7;8783:5;;;;;;;;;;;8776:12;;8713:78;:::o;11841:242::-;3209:19;3217:10;3209:7;:19::i;:::-;3201:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11950:4:::1;;;;;;;;;;;11930:25;;:8;:25;;;;:56;;;;;11979:6;;;;;;;;;;;11959:27;;:8;:27;;;;11930:56;:85;;;;;12010:4;11990:25;;:8;:25;;;;11930:85;11922:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;12067:8;12049:5;:15;12055:8;12049:15;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;11841:242:::0;;:::o;20107:140::-;3209:19;3217:10;3209:7;:19::i;:::-;3201:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;20200:8:::1;20193:25;;;20219:10;20231:7;20193:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20107:140:::0;;:::o;9661:138::-;9720:7;9737:60;9775:21;9793:1;9775:9;:21::i;:::-;9737:33;9754:15;7215:42;9754:9;:15::i;:::-;9737:12;;:16;;:33;;;;:::i;:::-;:37;;:60;;;;:::i;:::-;9730:67;;9661:138;:::o;8490:71::-;8529:13;8552:7;;;;;;;;;;;;;;;;;8545:14;;8490:71;:::o;6485:29::-;;;;:::o;5656:19::-;;;;;;;;;;;;;:::o;8996:139::-;9074:4;9081:40;9091:10;9103:9;9114:6;9081:9;:40::i;:::-;9129:4;9122:11;;8996:139;;;;:::o;7106:68::-;7142:30;7161:10;7142:18;:30::i;:::-;7106:68::o;20498:190::-;20571:7;20591:19;20613:7;20591:29;;20646:6;:19;20653:11;20646:19;;;;;;;;;;;;;;;:33;;;20631:49;;;20498:190;;;:::o;6885:40::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;9141:127::-;9222:7;9239:11;:18;9251:5;9239:18;;;;;;;;;;;;;;;:27;9258:7;9239:27;;;;;;;;;;;;;;;;9232:34;;9141:127;;;;:::o;11219:614::-;3209:19;3217:10;3209:7;:19::i;:::-;3201:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;11428:10:::1;11413:12;:25;;;;11464:10;11449:12;:25;;;;11495:5;11485:7;:15;;;;11524:8;11511:10;:21;;;;11560:12;11543:14;:29;;;;11594:6;11583:8;:17;;;;11621:5;11611:7;:15;;;;11651:6;11637:11;:20;;;;11688:18;11704:1;11688:11;;:15;;:18;;;;:::i;:::-;11676:8;;:30;;:63;;;;;11721:18;11737:1;11721:11;;:15;;:18;;;;:::i;:::-;11710:7;;:29;;11676:63;:100;;;;;11758:18;11774:1;11758:11;;:15;;:18;;;;:::i;:::-;11743:11;;:33;;11676:100;11668:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;11219:614:::0;;;;;;;;:::o;18011:224::-;3209:19;3217:10;3209:7;:19::i;:::-;3201:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;18126:6:::1;18099:16;:24;18116:6;18099:24;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;18146:6;18143:85;;;18154:19;18163:6;18171:1;18154:8;:19::i;:::-;18143:85;;;18190:35;18199:6;18207:17;18217:6;18207:9;:17::i;:::-;18190:8;:35::i;:::-;18143:85;18011:224:::0;;:::o;6521:31::-;;;;:::o;3343:111::-;3209:19;3217:10;3209:7;:19::i;:::-;3201:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;3417:3:::1;3409:5;::::0;:11:::1;;;;;;;;;;;;;;;;;;3427:25;3448:3;3427:25;;;;;;:::i;:::-;;;;;;;;3343:111:::0;:::o;6968:37::-;;;;:::o;17668:335::-;17778:1;17761:19;;:5;:19;;;17753:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17859:1;17840:21;;:7;:21;;;17832:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17941:6;17911:11;:18;17923:5;17911:18;;;;;;;;;;;;;;;:27;17930:7;17911:27;;;;;;;;;;;;;;;:36;;;;17979:7;17963:32;;17972:5;17963:32;;;17988:6;17963:32;;;;;;:::i;:::-;;;;;;;;17668:335;;;:::o;10254:957::-;10343:37;10354:6;10362:9;10373:6;10343:10;:37::i;:::-;10391:38;10411:6;10419:9;10391:19;:38::i;:::-;10440:41;10455:6;10463:9;10474:6;10440:14;:41::i;:::-;10493:35;10510:6;10518:9;10493:16;:35::i;:::-;10539:39;10552:6;10560:9;10571:6;10539:12;:39::i;:::-;10590:35;10599:6;10607:9;10618:6;10590:8;:35::i;:::-;10656:29;10678:6;10656:9;:17;10666:6;10656:17;;;;;;;;;;;;;;;;:21;;:29;;;;:::i;:::-;10636:9;:17;10646:6;10636:17;;;;;;;;;;;;;;;:49;;;;10696:22;10721:32;10735:6;10743:9;10721:13;:32::i;:::-;:78;;10793:6;10721:78;;;10756:34;10764:6;10772:9;10783:6;10756:7;:34::i;:::-;10721:78;10696:103;;10833:40;10858:14;10833:9;:20;10843:9;10833:20;;;;;;;;;;;;;;;;:24;;:40;;;;:::i;:::-;10810:9;:20;10820:9;10810:20;;;;;;;;;;;;;;;:63;;;;10906:9;10889:43;;10898:6;10889:43;;;10917:14;10889:43;;;;;;:::i;:::-;;;;;;;;10947:16;:24;10964:6;10947:24;;;;;;;;;;;;;;;;;;;;;;;;;10943:67;;10973:35;10982:6;10990:17;11000:6;10990:9;:17::i;:::-;10973:8;:35::i;:::-;10943:67;11024:16;:27;11041:9;11024:27;;;;;;;;;;;;;;;;;;;;;;;;;11020:76;;11053:41;11062:9;11073:20;11083:9;11073;:20::i;:::-;11053:8;:41::i;:::-;11020:76;11136:1;11109:6;:17;11116:9;11109:17;;;;;;;;;;;;;;;:24;;;:28;11106:64;;;11139:29;11158:9;11139:18;:29::i;:::-;11106:64;11180:23;11188:14;;11180:7;:23::i;:::-;10332:879;10254:957;;;:::o;1582:162::-;1668:7;1711:1;1706;:6;;1714:12;1698:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1740:1;1736;:5;1729:12;;1582:162;;;;;:::o;21772:170::-;21842:7;21869:65;21902:31;;21869:28;21879:17;;21869:5;:9;;:28;;;;:::i;:::-;:32;;:65;;;;:::i;:::-;21862:72;;21772:170;;;:::o;369:82::-;427:7;448:1;444;:5;;;;:::i;:::-;437:12;;369:82;;;;:::o;457:::-;515:7;536:1;532;:5;;;;:::i;:::-;525:12;;457:82;;;;:::o;545:::-;603:7;624:1;620;:5;;;;:::i;:::-;613:12;;545:82;;;;:::o;20696:587::-;20798:1;20768:6;:19;20775:11;20768:19;;;;;;;;;;;;;;;:26;;;:31;20765:46;20802:7;20765:46;20821:14;20838:30;20856:11;20838:17;:30::i;:::-;20821:47;;20891:1;20882:6;:10;20879:397;;;20927:28;20948:6;20927:16;;:20;;:28;;;;:::i;:::-;20908:16;:47;;;;20977:6;;;;;;;;;;;20970:23;;;20994:11;21007:6;20970:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21062:15;21029:17;:30;21047:11;21029:30;;;;;;;;;;;;;;;:48;;;;21128:45;21166:6;21128;:19;21135:11;21128:19;;;;;;;;;;;;;;;:33;;;:37;;:45;;;;:::i;:::-;21092:6;:19;21099:11;21092:19;;;;;;;;;;;;;;;:33;;:81;;;;21224:50;21247:6;:19;21254:11;21247:19;;;;;;;;;;;;;;;:26;;;21224:22;:50::i;:::-;21188:6;:19;21195:11;21188:19;;;;;;;;;;;;;;;:33;;:86;;;;20879:397;20754:529;20696:587;;:::o;18243:482::-;18330:1;18321:6;:10;:45;;;;;18365:1;18335:6;:19;18342:11;18335:19;;;;;;;;;;;;;;;:26;;;:31;18321:45;18318:177;;;18368:27;18383:11;18368:14;:27::i;:::-;18318:177;;;18425:1;18415:6;:11;:45;;;;;18459:1;18430:6;:19;18437:11;18430:19;;;;;;;;;;;;;;;:26;;;:30;18415:45;18412:83;;;18462:30;18480:11;18462:17;:30::i;:::-;18412:83;18318:177;18519:55;18567:6;18519:43;18535:6;:19;18542:11;18535:19;;;;;;;;;;;;;;;:26;;;18519:11;;:15;;:43;;;;:::i;:::-;:47;;:55;;;;:::i;:::-;18505:11;:69;;;;18614:6;18585;:19;18592:11;18585:19;;;;;;;;;;;;;;;:26;;:35;;;;18667:50;18690:6;:19;18697:11;18690:19;;;;;;;;;;;;;;;:26;;;18667:22;:50::i;:::-;18631:6;:19;18638:11;18631:19;;;;;;;;;;;;;;;:33;;:86;;;;18243:482;;:::o;9807:439::-;9929:1;9911:20;;:6;:20;;;9903:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;10013:1;9992:23;;:9;:23;;;9984:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;10091:1;10074:6;:19;10066:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;10168:17;10178:6;10168:9;:17::i;:::-;10158:6;:27;;10150:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;9807:439;;;:::o;12677:191::-;12770:11;:19;12782:6;12770:19;;;;;;;;;;;;;;;;;;;;;;;;;12769:20;:47;;;;;12794:11;:22;12806:9;12794:22;;;;;;;;;;;;;;;;;;;;;;;;;12793:23;12769:47;12766:95;;;12826:14;;;;;;;;;;;12818:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;12766:95;12677:191;;:::o;12880:331::-;12984:11;:19;12996:6;12984:19;;;;;;;;;;;;;;;;;;;;;;;;;12983:20;:47;;;;;13008:11;:22;13020:9;13008:22;;;;;;;;;;;;;;;;;;;;;;;;;13007:23;12983:47;:77;;;;;13055:4;;;;;;;;;;;13034:26;;:9;:26;;;;12983:77;:107;;;;;7215:42;13064:26;;:9;:26;;;;12983:107;12980:224;;;13152:15;;13115:32;13140:6;13115:9;:20;13125:9;13115:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13114:53;;13106:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;12980:224;12880:331;;;:::o;13219:159::-;13316:4;;;;;;;;;;;13303:17;;:9;:17;;;:41;;;;;13325:11;:19;13337:6;13325:19;;;;;;;;;;;;;;;;;;;;;;;;;13324:20;13303:41;13300:71;;;13367:1;13346:9;;:23;;;;;;;:::i;:::-;;;;;;;;13300:71;13219:159;;:::o;13386:341::-;13497:4;;;;;;;;;;;13487:14;;:6;:14;;;13484:124;;13521:14;;13511:6;:24;;:47;;;;13539:11;:19;13551:6;13539:19;;;;;;;;;;;;;;;;;;;;;;;;;13511:47;:73;;;;13562:11;:22;13574:9;13562:22;;;;;;;;;;;;;;;;;;;;;;;;;13511:73;13503:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;13484:124;13636:12;;13626:6;:22;;:45;;;;13652:11;:19;13664:6;13652:19;;;;;;;;;;;;;;;;;;;;;;;;;13626:45;:71;;;;13675:11;:22;13687:9;13675:22;;;;;;;;;;;;;;;;;;;;;;;;;13626:71;13618:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;13386:341;;;:::o;16111:197::-;16203:41;16218:6;16226:9;16237:6;16203:14;:41::i;:::-;16200:101;;;16246:29;16261:13;;16246:14;:29::i;:::-;16297:1;16277:9;:22;;;;16200:101;16111:197;;;:::o;16316:160::-;16397:4;16422:11;:19;16434:6;16422:19;;;;;;;;;;;;;;;;;;;;;;;;;16421:20;:47;;;;;16446:11;:22;16458:9;16446:22;;;;;;;;;;;;;;;;;;;;;;;;;16445:23;16421:47;16414:54;;16316:160;;;;:::o;16797:546::-;16883:7;16939:1;16906:30;16918:6;16926:9;16906:11;:30::i;:::-;:34;16903:418;;;16952:17;16972:59;17000:30;17012:6;17020:9;17000:11;:30::i;:::-;16972:23;16983:11;;16972:6;:10;;:23;;;;:::i;:::-;:27;;:59;;;;:::i;:::-;16952:79;;17069:39;17098:9;17069;:24;17087:4;17069:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;17042:9;:24;17060:4;17042:24;;;;;;;;;;;;;;;:66;;;;17149:4;17124:42;;17133:6;17124:42;;;17156:9;17124:42;;;;;;:::i;:::-;;;;;;;;17198:1;17180:7;;:20;17177:104;;;17202:77;17220:4;7215:42;17242:36;17270:7;;17242:23;17253:11;;17242:6;:10;;:23;;;;:::i;:::-;:27;;:36;;;;:::i;:::-;17202:9;:77::i;:::-;17177:104;17298:21;17309:9;17298:6;:10;;:21;;;;:::i;:::-;17291:28;;;;;16903:418;17329:6;17322:13;;16797:546;;;;;;:::o;281:82::-;339:7;360:1;356;:5;;;;:::i;:::-;349:12;;281:82;;;;:::o;19423:676::-;19473:24;19500:12;:19;;;;19473:46;;19553:1;19533:16;:21;19530:37;;19558:7;;;19530:37;19577:15;19607;19625:9;19607:27;;19645:18;19678:414;19694:3;19684:7;:13;:46;;;;;19714:16;19701:10;:29;19684:46;19678:414;;;19766:16;19750:12;;:32;19747:55;;19799:1;19784:12;:16;;;;19747:55;19819:44;19836:12;19849;;19836:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19819:16;:44::i;:::-;19816:115;;;19883:46;19902:12;19915;;19902:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19883:18;:46::i;:::-;19816:115;19955:35;19967:22;19979:9;19967:7;:11;;:22;;;;:::i;:::-;19955:7;:11;;:35;;;;:::i;:::-;19945:45;;20015:9;20005:19;;20039:12;;:14;;;;;;;;;:::i;:::-;;;;;;20068:12;;;;;:::i;:::-;;;;19678:414;;;19462:637;;;;19423:676;;:::o;21950:167::-;22049:12;:19;;;;22015:18;:31;22034:11;22015:31;;;;;;;;;;;;;;;:53;;;;22079:12;22097:11;22079:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21950:167;:::o;22125:288::-;22241:12;22274:1;22254:12;:19;;;;:21;;;;:::i;:::-;22241:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22193:12;22206:18;:31;22225:11;22206:31;;;;;;;;;;;;;;;;22193:45;;;;;;;;:::i;:::-;;;;;;;;;;:83;;;;;;;;;;;;;;;;;;22345:18;:31;22364:11;22345:31;;;;;;;;;;;;;;;;22287:18;:55;22306:12;22339:1;22319:12;:19;;;;:21;;;;:::i;:::-;22306:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22287:55;;;;;;;;;;;;;;;:89;;;;22387:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;22125:288;:::o;15703:400::-;15801:4;15818:13;15844:15;;15834:6;:25;;15818:41;;15870:19;15920:13;;15892:24;15910:4;15892:9;:24::i;:::-;:41;;15870:63;;15952:8;;;;;;;;;;;15951:9;:24;;;;;15964:11;;;;;;;;;;;15951:24;:42;;;;;15979:14;;;;;;;;;;;15951:42;:54;;;;;15997:8;15951:54;:78;;;;;16010:11;:19;16022:6;16010:19;;;;;;;;;;;;;;;;;;;;;;;;;16009:20;15951:78;:99;;;;;16046:4;;;;;;;;;;;16033:17;;:9;:17;;;15951:99;:126;;;;;16075:1;16054:9;;:23;;15951:126;:144;;;;;16081:14;15951:144;15944:151;;;;15703:400;;;;;:::o;13735:1167::-;6346:4;6335:8;;:15;;;;;;;;;;;;;;;;;;13806:20:::1;13829:82;13909:1;13830:73;13892:10;;13830:57;13872:14;;13830:37;13854:12;;13830:19;13847:1;13830:12;;:16;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;:41;;:57;;;;:::i;:::-;:61;;:73;;;;:::i;:::-;13829:79;;:82;;;;:::i;:::-;13806:105;;13922:32;13957:42;13986:12;13957:24;13968:12;;13957:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;13922:77;;14010:14;14027:36;14038:24;14027:6;:10;;:36;;;;:::i;:::-;14010:53;;14074:22;14099:21;14074:46;;14131:24;14148:6;14131:16;:24::i;:::-;14166:20;14189:41;14215:14;14189:21;:25;;:41;;;;:::i;:::-;14166:64;;14241:19;14262:48;14279:30;14296:12;;14279;:16;;:30;;;;:::i;:::-;14262:12;:16;;:48;;;;:::i;:::-;14241:69;;14321:29;14353;14369:12;;14353:11;:15;;:29;;;;:::i;:::-;14321:61;;14428:1;14396:21;:34;14393:103;;;14432:61;14445:24;14471:21;14432:12;:61::i;:::-;14393:103;14506:23;14532:36;14555:12;;14532:18;14548:1;14532:11;:15;;:18;;;;:::i;:::-;:22;;:36;;;;:::i;:::-;14506:62;;14600:1;14582:15;:19;14579:79;;;7410:42;14603:36;;:53;14640:15;14603:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14579:79;14668:21;14692:34;14715:10;;14692:18;14708:1;14692:11;:15;;:18;;;;:::i;:::-;:22;;:34;;;;:::i;:::-;14668:58;;14756:1;14740:13;:17;14737:46;;;14759:22;14767:13;14759:7;:22::i;:::-;14737:46;14828:1;14796:21;:34;14793:102;;;7313:42;14832:38;;:61;14871:21;14832:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;14793:102;13795:1107;;;;;;;;;6366:5:::0;6355:8;;:16;;;;;;;;;;;;;;;;;;13735:1167;:::o;16484:305::-;16563:7;16586:5;:13;16592:6;16586:13;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;16603:5;:16;16609:9;16603:16;;;;;;;;;;;;;;;;;;;;;;;;;16586:33;16583:76;;;16628:29;16652:3;16628:11;;:15;;:29;;;;:::i;:::-;16621:36;;;;16583:76;16685:4;;;;;;;;;;;16672:17;;:9;:17;;;16669:38;;16698:7;;16691:14;;;;16669:38;16730:4;;;;;;;;;;;16720:14;;:6;:14;;;16717:36;;16743:8;;16736:15;;;;16717:36;16770:11;;16763:18;;16484:305;;;;;:::o;20259:231::-;20329:4;20398:15;20386:9;;20353:17;:30;20371:11;20353:30;;;;;;;;;;;;;;;;:42;;;;:::i;:::-;:60;:129;;;;;20467:15;;20434:30;20452:11;20434:17;:30::i;:::-;:48;20353:129;20346:136;;20259:231;;;:::o;15261:434::-;15327:21;15365:1;15351:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15327:40;;15396:4;15378;15383:1;15378:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15422:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15412:4;15417:1;15412:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;15446:53;15463:4;15478:6;;;;;;;;;;;15487:11;15446:8;:53::i;:::-;15510:6;;;;;;;;;;;:57;;;15582:11;15608:1;15624:4;15651;15671:15;15510:177;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15316:379;15261:434;:::o;14910:343::-;14991:53;15008:4;15023:6;;;;;;;;;;;15032:11;14991:8;:53::i;:::-;15055:6;;;;;;;;;;;:22;;;15085:9;15118:4;15138:11;15164:1;15180;7506:42;15229:15;15055:190;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;14910:343;;:::o;18733:682::-;18789:21;18820:6;;;;;;;;;;;18813:24;;;18846:4;18813:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18789:63;;18863:21;18901:1;18887:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18863:40;;18924:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18914:4;18919:1;18914:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;18966:6;;;;;;;;;;;18948:4;18953:1;18948:7;;;;;;;;:::i;:::-;;;;;;;:25;;;;;;;;;;;18984:6;;;;;;;;;;;:57;;;19049:9;19074:1;19090:4;19117;19137:15;18984:169;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19164:14;19181:58;19225:13;19188:6;;;;;;;;;;;19181:24;;;19214:4;19181:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;:58;;;;:::i;:::-;19164:75;;19267:26;19286:6;19267:14;;:18;;:26;;;;:::i;:::-;19250:14;:43;;;;19324:83;19346:60;19394:11;;19346:43;19382:6;19346:31;;:35;;:43;;;;:::i;:::-;:47;;:60;;;;:::i;:::-;19324:17;;:21;;:83;;;;:::i;:::-;19304:17;:103;;;;18778:637;;;18733: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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:619::-;3523:6;3531;3539;3588:2;3576:9;3567:7;3563:23;3559:32;3556:119;;;3594:79;;:::i;:::-;3556:119;3714:1;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3685:117;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3969:2;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3940:118;3446:619;;;;;:::o;4071:118::-;4158:24;4176:5;4158:24;:::i;:::-;4153:3;4146:37;4071:118;;:::o;4195:222::-;4288:4;4326:2;4315:9;4311:18;4303:26;;4339:71;4407:1;4396:9;4392:17;4383:6;4339:71;:::i;:::-;4195:222;;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:619::-;4852:6;4860;4868;4917:2;4905:9;4896:7;4892:23;4888:32;4885:119;;;4923:79;;:::i;:::-;4885:119;5043:1;5068:53;5113:7;5104:6;5093:9;5089:22;5068:53;:::i;:::-;5058:63;;5014:117;5170:2;5196:53;5241:7;5232:6;5221:9;5217:22;5196:53;:::i;:::-;5186:63;;5141:118;5298:2;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5269:118;4775:619;;;;;:::o;5400:329::-;5459:6;5508:2;5496:9;5487:7;5483:23;5479:32;5476:119;;;5514:79;;:::i;:::-;5476:119;5634:1;5659:53;5704:7;5695:6;5684:9;5680:22;5659:53;:::i;:::-;5649:63;;5605:117;5400:329;;;;:::o;5735:86::-;5770:7;5810:4;5803:5;5799:16;5788:27;;5735:86;;;:::o;5827:112::-;5910:22;5926:5;5910:22;:::i;:::-;5905:3;5898:35;5827:112;;:::o;5945:214::-;6034:4;6072:2;6061:9;6057:18;6049:26;;6085:67;6149:1;6138:9;6134:17;6125:6;6085:67;:::i;:::-;5945:214;;;;:::o;6165:116::-;6235:21;6250:5;6235:21;:::i;:::-;6228:5;6225:32;6215:60;;6271:1;6268;6261:12;6215:60;6165:116;:::o;6287:133::-;6330:5;6368:6;6355:20;6346:29;;6384:30;6408:5;6384:30;:::i;:::-;6287:133;;;;:::o;6426:468::-;6491:6;6499;6548:2;6536:9;6527:7;6523:23;6519:32;6516:119;;;6554:79;;:::i;:::-;6516:119;6674:1;6699:53;6744:7;6735:6;6724:9;6720:22;6699:53;:::i;:::-;6689:63;;6645:117;6801:2;6827:50;6869:7;6860:6;6849:9;6845:22;6827:50;:::i;:::-;6817:60;;6772:115;6426:468;;;;;:::o;6900:442::-;7049:4;7087:2;7076:9;7072:18;7064:26;;7100:71;7168:1;7157:9;7153:17;7144:6;7100:71;:::i;:::-;7181:72;7249:2;7238:9;7234:18;7225:6;7181:72;:::i;:::-;7263;7331:2;7320:9;7316:18;7307:6;7263:72;:::i;:::-;6900:442;;;;;;:::o;7348:474::-;7416:6;7424;7473:2;7461:9;7452:7;7448:23;7444:32;7441:119;;;7479:79;;:::i;:::-;7441:119;7599:1;7624:53;7669:7;7660:6;7649:9;7645:22;7624:53;:::i;:::-;7614:63;;7570:117;7726:2;7752:53;7797:7;7788:6;7777:9;7773:22;7752:53;:::i;:::-;7742:63;;7697:118;7348:474;;;;;:::o;7828:1349::-;7950:6;7958;7966;7974;7982;7990;7998;8006;8055:3;8043:9;8034:7;8030:23;8026:33;8023:120;;;8062:79;;:::i;:::-;8023:120;8182:1;8207:53;8252:7;8243:6;8232:9;8228:22;8207:53;:::i;:::-;8197:63;;8153:117;8309:2;8335:53;8380:7;8371:6;8360:9;8356:22;8335:53;:::i;:::-;8325:63;;8280:118;8437:2;8463:53;8508:7;8499:6;8488:9;8484:22;8463:53;:::i;:::-;8453:63;;8408:118;8565:2;8591:53;8636:7;8627:6;8616:9;8612:22;8591:53;:::i;:::-;8581:63;;8536:118;8693:3;8720:53;8765:7;8756:6;8745:9;8741:22;8720:53;:::i;:::-;8710:63;;8664:119;8822:3;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8793:119;8951:3;8978:53;9023:7;9014:6;9003:9;8999:22;8978:53;:::i;:::-;8968:63;;8922:119;9080:3;9107:53;9152:7;9143:6;9132:9;9128:22;9107:53;:::i;:::-;9097:63;;9051:119;7828:1349;;;;;;;;;;;:::o;9183:104::-;9228:7;9257:24;9275:5;9257:24;:::i;:::-;9246:35;;9183:104;;;:::o;9293:138::-;9374:32;9400:5;9374:32;:::i;:::-;9367:5;9364:43;9354:71;;9421:1;9418;9411:12;9354:71;9293:138;:::o;9437:155::-;9491:5;9529:6;9516:20;9507:29;;9545:41;9580:5;9545:41;:::i;:::-;9437:155;;;;:::o;9598:345::-;9665:6;9714:2;9702:9;9693:7;9689:23;9685:32;9682:119;;;9720:79;;:::i;:::-;9682:119;9840:1;9865:61;9918:7;9909:6;9898:9;9894:22;9865:61;:::i;:::-;9855:71;;9811:125;9598:345;;;;:::o;9949:156::-;10089:8;10085:1;10077:6;10073:14;10066:32;9949:156;:::o;10111:365::-;10253:3;10274:66;10338:1;10333:3;10274:66;:::i;:::-;10267:73;;10349:93;10438:3;10349:93;:::i;:::-;10467:2;10462:3;10458:12;10451:19;;10111:365;;;:::o;10482:419::-;10648:4;10686:2;10675:9;10671:18;10663:26;;10735:9;10729:4;10725:20;10721:1;10710:9;10706:17;10699:47;10763:131;10889:4;10763:131;:::i;:::-;10755:139;;10482:419;;;:::o;10907:180::-;10955:77;10952:1;10945:88;11052:4;11049:1;11042:15;11076:4;11073:1;11066:15;11093:410;11133:7;11156:20;11174:1;11156:20;:::i;:::-;11151:25;;11190:20;11208:1;11190:20;:::i;:::-;11185:25;;11245:1;11242;11238:9;11267:30;11285:11;11267:30;:::i;:::-;11256:41;;11446:1;11437:7;11433:15;11430:1;11427:22;11407:1;11400:9;11380:83;11357:139;;11476:18;;:::i;:::-;11357:139;11141:362;11093:410;;;;:::o;11509:180::-;11557:77;11554:1;11547:88;11654:4;11651:1;11644:15;11678:4;11675:1;11668:15;11695:185;11735:1;11752:20;11770:1;11752:20;:::i;:::-;11747:25;;11786:20;11804:1;11786:20;:::i;:::-;11781:25;;11825:1;11815:35;;11830:18;;:::i;:::-;11815:35;11872:1;11869;11865:9;11860:14;;11695:185;;;;:::o;11886:233::-;12026:34;12022:1;12014:6;12010:14;12003:58;12095:16;12090:2;12082:6;12078:15;12071:41;11886:233;:::o;12125:366::-;12267:3;12288:67;12352:2;12347:3;12288:67;:::i;:::-;12281:74;;12364:93;12453:3;12364:93;:::i;:::-;12482:2;12477:3;12473:12;12466:19;;12125:366;;;:::o;12497:419::-;12663:4;12701:2;12690:9;12686:18;12678:26;;12750:9;12744:4;12740:20;12736:1;12725:9;12721:17;12714:47;12778:131;12904:4;12778:131;:::i;:::-;12770:139;;12497:419;;;:::o;12922:168::-;13062:20;13058:1;13050:6;13046:14;13039:44;12922:168;:::o;13096:366::-;13238:3;13259:67;13323:2;13318:3;13259:67;:::i;:::-;13252:74;;13335:93;13424:3;13335:93;:::i;:::-;13453:2;13448:3;13444:12;13437:19;;13096:366;;;:::o;13468:419::-;13634:4;13672:2;13661:9;13657:18;13649:26;;13721:9;13715:4;13711:20;13707:1;13696:9;13692:17;13685:47;13749:131;13875:4;13749:131;:::i;:::-;13741:139;;13468:419;;;:::o;13893:332::-;14014:4;14052:2;14041:9;14037:18;14029:26;;14065:71;14133:1;14122:9;14118:17;14109:6;14065:71;:::i;:::-;14146:72;14214:2;14203:9;14199:18;14190:6;14146:72;:::i;:::-;13893:332;;;;;:::o;14231:137::-;14285:5;14316:6;14310:13;14301:22;;14332:30;14356:5;14332:30;:::i;:::-;14231:137;;;;:::o;14374:345::-;14441:6;14490:2;14478:9;14469:7;14465:23;14461:32;14458:119;;;14496:79;;:::i;:::-;14458:119;14616:1;14641:61;14694:7;14685:6;14674:9;14670:22;14641:61;:::i;:::-;14631:71;;14587:125;14374:345;;;;:::o;14725:231::-;14865:34;14861:1;14853:6;14849:14;14842:58;14934:14;14929:2;14921:6;14917:15;14910:39;14725:231;:::o;14962:366::-;15104:3;15125:67;15189:2;15184:3;15125:67;:::i;:::-;15118:74;;15201:93;15290:3;15201:93;:::i;:::-;15319:2;15314:3;15310:12;15303:19;;14962:366;;;:::o;15334:419::-;15500:4;15538:2;15527:9;15523:18;15515:26;;15587:9;15581:4;15577:20;15573:1;15562:9;15558:17;15551:47;15615:131;15741:4;15615:131;:::i;:::-;15607:139;;15334:419;;;:::o;15759:60::-;15787:3;15808:5;15801:12;;15759:60;;;:::o;15825:142::-;15875:9;15908:53;15926:34;15935:24;15953:5;15935:24;:::i;:::-;15926:34;:::i;:::-;15908:53;:::i;:::-;15895:66;;15825:142;;;:::o;15973:126::-;16023:9;16056:37;16087:5;16056:37;:::i;:::-;16043:50;;15973:126;;;:::o;16105:134::-;16163:9;16196:37;16227:5;16196:37;:::i;:::-;16183:50;;16105:134;;;:::o;16245:147::-;16340:45;16379:5;16340:45;:::i;:::-;16335:3;16328:58;16245:147;;:::o;16398:238::-;16499:4;16537:2;16526:9;16522:18;16514:26;;16550:79;16626:1;16615:9;16611:17;16602:6;16550:79;:::i;:::-;16398:238;;;;:::o;16642:223::-;16782:34;16778:1;16770:6;16766:14;16759:58;16851:6;16846:2;16838:6;16834:15;16827:31;16642:223;:::o;16871:366::-;17013:3;17034:67;17098:2;17093:3;17034:67;:::i;:::-;17027:74;;17110:93;17199:3;17110:93;:::i;:::-;17228:2;17223:3;17219:12;17212:19;;16871:366;;;:::o;17243:419::-;17409:4;17447:2;17436:9;17432:18;17424:26;;17496:9;17490:4;17486:20;17482:1;17471:9;17467:17;17460:47;17524:131;17650:4;17524:131;:::i;:::-;17516:139;;17243:419;;;:::o;17668:221::-;17808:34;17804:1;17796:6;17792:14;17785:58;17877:4;17872:2;17864:6;17860:15;17853:29;17668:221;:::o;17895:366::-;18037:3;18058:67;18122:2;18117:3;18058:67;:::i;:::-;18051:74;;18134:93;18223:3;18134:93;:::i;:::-;18252:2;18247:3;18243:12;18236:19;;17895:366;;;:::o;18267:419::-;18433:4;18471:2;18460:9;18456:18;18448:26;;18520:9;18514:4;18510:20;18506:1;18495:9;18491:17;18484:47;18548:131;18674:4;18548:131;:::i;:::-;18540:139;;18267:419;;;:::o;18692:194::-;18732:4;18752:20;18770:1;18752:20;:::i;:::-;18747:25;;18786:20;18804:1;18786:20;:::i;:::-;18781:25;;18830:1;18827;18823:9;18815:17;;18854:1;18848:4;18845:11;18842:37;;;18859:18;;:::i;:::-;18842:37;18692:194;;;;:::o;18892:224::-;19032:34;19028:1;19020:6;19016:14;19009:58;19101:7;19096:2;19088:6;19084:15;19077:32;18892:224;:::o;19122:366::-;19264:3;19285:67;19349:2;19344:3;19285:67;:::i;:::-;19278:74;;19361:93;19450:3;19361:93;:::i;:::-;19479:2;19474:3;19470:12;19463:19;;19122:366;;;:::o;19494:419::-;19660:4;19698:2;19687:9;19683:18;19675:26;;19747:9;19741:4;19737:20;19733:1;19722:9;19718:17;19711:47;19775:131;19901:4;19775:131;:::i;:::-;19767:139;;19494:419;;;:::o;19919:222::-;20059:34;20055:1;20047:6;20043:14;20036:58;20128:5;20123:2;20115:6;20111:15;20104:30;19919:222;:::o;20147:366::-;20289:3;20310:67;20374:2;20369:3;20310:67;:::i;:::-;20303:74;;20386:93;20475:3;20386:93;:::i;:::-;20504:2;20499:3;20495:12;20488:19;;20147:366;;;:::o;20519:419::-;20685:4;20723:2;20712:9;20708:18;20700:26;;20772:9;20766:4;20762:20;20758:1;20747:9;20743:17;20736:47;20800:131;20926:4;20800:131;:::i;:::-;20792:139;;20519:419;;;:::o;20944:228::-;21084:34;21080:1;21072:6;21068:14;21061:58;21153:11;21148:2;21140:6;21136:15;21129:36;20944:228;:::o;21178:366::-;21320:3;21341:67;21405:2;21400:3;21341:67;:::i;:::-;21334:74;;21417:93;21506:3;21417:93;:::i;:::-;21535:2;21530:3;21526:12;21519:19;;21178:366;;;:::o;21550:419::-;21716:4;21754:2;21743:9;21739:18;21731:26;;21803:9;21797:4;21793:20;21789:1;21778:9;21774:17;21767:47;21831:131;21957:4;21831:131;:::i;:::-;21823:139;;21550:419;;;:::o;21975:236::-;22115:34;22111:1;22103:6;22099:14;22092:58;22184:19;22179:2;22171:6;22167:15;22160:44;21975:236;:::o;22217:366::-;22359:3;22380:67;22444:2;22439:3;22380:67;:::i;:::-;22373:74;;22456:93;22545:3;22456:93;:::i;:::-;22574:2;22569:3;22565:12;22558:19;;22217:366;;;:::o;22589:419::-;22755:4;22793:2;22782:9;22778:18;22770:26;;22842:9;22836:4;22832:20;22828:1;22817:9;22813:17;22806:47;22870:131;22996:4;22870:131;:::i;:::-;22862:139;;22589:419;;;:::o;23014:164::-;23154:16;23150:1;23142:6;23138:14;23131:40;23014:164;:::o;23184:366::-;23326:3;23347:67;23411:2;23406:3;23347:67;:::i;:::-;23340:74;;23423:93;23512:3;23423:93;:::i;:::-;23541:2;23536:3;23532:12;23525:19;;23184:366;;;:::o;23556:419::-;23722:4;23760:2;23749:9;23745:18;23737:26;;23809:9;23803:4;23799:20;23795:1;23784:9;23780:17;23773:47;23837:131;23963:4;23837:131;:::i;:::-;23829:139;;23556:419;;;:::o;23981:180::-;24121:32;24117:1;24109:6;24105:14;24098:56;23981:180;:::o;24167:366::-;24309:3;24330:67;24394:2;24389:3;24330:67;:::i;:::-;24323:74;;24406:93;24495:3;24406:93;:::i;:::-;24524:2;24519:3;24515:12;24508:19;;24167:366;;;:::o;24539:419::-;24705:4;24743:2;24732:9;24728:18;24720:26;;24792:9;24786:4;24782:20;24778:1;24767:9;24763:17;24756:47;24820:131;24946:4;24820:131;:::i;:::-;24812:139;;24539:419;;;:::o;24964:191::-;25004:3;25023:20;25041:1;25023:20;:::i;:::-;25018:25;;25057:20;25075:1;25057:20;:::i;:::-;25052:25;;25100:1;25097;25093:9;25086:16;;25121:3;25118:1;25115:10;25112:36;;;25128:18;;:::i;:::-;25112:36;24964:191;;;;:::o;25161:167::-;25301:19;25297:1;25289:6;25285:14;25278:43;25161:167;:::o;25334:366::-;25476:3;25497:67;25561:2;25556:3;25497:67;:::i;:::-;25490:74;;25573:93;25662:3;25573:93;:::i;:::-;25691:2;25686:3;25682:12;25675:19;;25334:366;;;:::o;25706:419::-;25872:4;25910:2;25899:9;25895:18;25887:26;;25959:9;25953:4;25949:20;25945:1;25934:9;25930:17;25923:47;25987:131;26113:4;25987:131;:::i;:::-;25979:139;;25706:419;;;:::o;26131:180::-;26179:77;26176:1;26169:88;26276:4;26273:1;26266:15;26300:4;26297:1;26290:15;26317:233;26356:3;26379:24;26397:5;26379:24;:::i;:::-;26370:33;;26425:66;26418:5;26415:77;26412:103;;26495:18;;:::i;:::-;26412:103;26542:1;26535:5;26531:13;26524:20;;26317:233;;;:::o;26556:180::-;26604:77;26601:1;26594:88;26701:4;26698:1;26691:15;26725:4;26722:1;26715:15;26742:180;26790:77;26787:1;26780:88;26887:4;26884:1;26877:15;26911:4;26908:1;26901:15;26928:143;26985:5;27016:6;27010:13;27001:22;;27032:33;27059:5;27032:33;:::i;:::-;26928:143;;;;:::o;27077:351::-;27147:6;27196:2;27184:9;27175:7;27171:23;27167:32;27164:119;;;27202:79;;:::i;:::-;27164:119;27322:1;27347:64;27403:7;27394:6;27383:9;27379:22;27347:64;:::i;:::-;27337:74;;27293:128;27077:351;;;;:::o;27434:85::-;27479:7;27508:5;27497:16;;27434:85;;;:::o;27525:158::-;27583:9;27616:61;27634:42;27643:32;27669:5;27643:32;:::i;:::-;27634:42;:::i;:::-;27616:61;:::i;:::-;27603:74;;27525:158;;;:::o;27689:147::-;27784:45;27823:5;27784:45;:::i;:::-;27779:3;27772:58;27689:147;;:::o;27842:114::-;27909:6;27943:5;27937:12;27927:22;;27842:114;;;:::o;27962:184::-;28061:11;28095:6;28090:3;28083:19;28135:4;28130:3;28126:14;28111:29;;27962:184;;;;:::o;28152:132::-;28219:4;28242:3;28234:11;;28272:4;28267:3;28263:14;28255:22;;28152:132;;;:::o;28290:108::-;28367:24;28385:5;28367:24;:::i;:::-;28362:3;28355:37;28290:108;;:::o;28404:179::-;28473:10;28494:46;28536:3;28528:6;28494:46;:::i;:::-;28572:4;28567:3;28563:14;28549:28;;28404:179;;;;:::o;28589:113::-;28659:4;28691;28686:3;28682:14;28674:22;;28589:113;;;:::o;28738:732::-;28857:3;28886:54;28934:5;28886:54;:::i;:::-;28956:86;29035:6;29030:3;28956:86;:::i;:::-;28949:93;;29066:56;29116:5;29066:56;:::i;:::-;29145:7;29176:1;29161:284;29186:6;29183:1;29180:13;29161:284;;;29262:6;29256:13;29289:63;29348:3;29333:13;29289:63;:::i;:::-;29282:70;;29375:60;29428:6;29375:60;:::i;:::-;29365:70;;29221:224;29208:1;29205;29201:9;29196:14;;29161:284;;;29165:14;29461:3;29454:10;;28862:608;;;28738:732;;;;:::o;29476:831::-;29739:4;29777:3;29766:9;29762:19;29754:27;;29791:71;29859:1;29848:9;29844:17;29835:6;29791:71;:::i;:::-;29872:80;29948:2;29937:9;29933:18;29924:6;29872:80;:::i;:::-;29999:9;29993:4;29989:20;29984:2;29973:9;29969:18;29962:48;30027:108;30130:4;30121:6;30027:108;:::i;:::-;30019:116;;30145:72;30213:2;30202:9;30198:18;30189:6;30145:72;:::i;:::-;30227:73;30295:3;30284:9;30280:19;30271:6;30227:73;:::i;:::-;29476:831;;;;;;;;:::o;30313:807::-;30562:4;30600:3;30589:9;30585:19;30577:27;;30614:71;30682:1;30671:9;30667:17;30658:6;30614:71;:::i;:::-;30695:72;30763:2;30752:9;30748:18;30739:6;30695:72;:::i;:::-;30777:80;30853:2;30842:9;30838:18;30829:6;30777:80;:::i;:::-;30867;30943:2;30932:9;30928:18;30919:6;30867:80;:::i;:::-;30957:73;31025:3;31014:9;31010:19;31001:6;30957:73;:::i;:::-;31040;31108:3;31097:9;31093:19;31084:6;31040:73;:::i;:::-;30313:807;;;;;;;;;:::o;31126:143::-;31183:5;31214:6;31208:13;31199:22;;31230:33;31257:5;31230:33;:::i;:::-;31126:143;;;;:::o;31275:663::-;31363:6;31371;31379;31428:2;31416:9;31407:7;31403:23;31399:32;31396:119;;;31434:79;;:::i;:::-;31396:119;31554:1;31579:64;31635:7;31626:6;31615:9;31611:22;31579:64;:::i;:::-;31569:74;;31525:128;31692:2;31718:64;31774:7;31765:6;31754:9;31750:22;31718:64;:::i;:::-;31708:74;;31663:129;31831:2;31857:64;31913:7;31904:6;31893:9;31889:22;31857:64;:::i;:::-;31847:74;;31802:129;31275:663;;;;;:::o;31944:351::-;32014:6;32063:2;32051:9;32042:7;32038:23;32034:32;32031:119;;;32069:79;;:::i;:::-;32031:119;32189:1;32214:64;32270:7;32261:6;32250:9;32246:22;32214:64;:::i;:::-;32204:74;;32160:128;31944:351;;;;:::o;32301:720::-;32536:4;32574:3;32563:9;32559:19;32551:27;;32588:79;32664:1;32653:9;32649:17;32640:6;32588:79;:::i;:::-;32714:9;32708:4;32704:20;32699:2;32688:9;32684:18;32677:48;32742:108;32845:4;32836:6;32742:108;:::i;:::-;32734:116;;32860:72;32928:2;32917:9;32913:18;32904:6;32860:72;:::i;:::-;32942;33010:2;32999:9;32995:18;32986:6;32942:72;:::i;:::-;32301:720;;;;;;;:::o

Swarm Source

ipfs://abc967a85bf5bb220a7ba5cf91aae33873ad01c64ea639f106481d253331dfa5

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.