ETH Price: $2,284.47 (-5.59%)
Gas: 1.04 Gwei

Token

Lunar Sphinx (LUNARSPHINX)
 

Overview

Max Total Supply

10,000,000,000 LUNARSPHINX

Holders

7

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
125,000,000 LUNARSPHINX

Value
$0.00
0x464796cd74609c484daf3287200f3e5fad82caff
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
LunarSphinx

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-12-28
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.19;

abstract contract Context {
    function _msgSender() internal view virtual returns (address payable) {
        return payable(msg.sender);
    }

    function _msgData() internal view virtual returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    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);
}

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

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

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

        return c;
    }

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

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

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

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * The initial owner is set to the address provided by the deployer. This can
 * later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }   
    
    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    
    function waiveOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    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 removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

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

contract LunarSphinx is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    
    string private _name = "Lunar Sphinx";
    string private _symbol = "LUNARSPHINX";
    uint8 private _decimals = 18;

    address payable public marketingWalletAddress = payable(0xdd9935e54332B4a33Ac72A68FD9Ab61e88e67E8F); // Marketing Address
    address payable public teamWalletAddress = payable(0x94eF52313bfeCD0136587EeB565decBe20742CDa); // Team Address
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyLiquidityFee = 0;
    uint256 public _buyMarketingFee = 0;
    uint256 public _buyTeamFee = 0;
    
    uint256 public _sellLiquidityFee = 100; // 1%  0,01 - 100% / 1 - 10000
    uint256 public _sellMarketingFee = 100;
    uint256 public _sellTeamFee = 100;

    uint256 public _liquidityShare = 8;
    uint256 public _marketingShare = 8;
    uint256 public _teamShare = 8;

    uint256 public _totalTaxIfBuying;
    uint256 public _totalTaxIfSelling;

    uint256 public _totalDistributionShares;

    uint256 private _totalSupply = 10 ** 10 * 10 **_decimals;
    uint256 public _maxTxAmount = 10 ** 10 * 10 **_decimals;
    uint256 public _walletMax = 10 ** 10 * 10 **_decimals;
    uint256 private minimumTokensBeforeSwap = 5 * 10 ** 6 * 10 **_decimals;  // 0.0005%

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapPair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = false;
    bool public checkWalletLimit = true;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        _allowances[address(this)][address(uniswapV2Router)] = _totalSupply;

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapPair)] = true;
        isWalletLimitExempt[address(this)] = true;
        
        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;

        isMarketPair[address(uniswapPair)] = true;

        _balances[_msgSender()] = _totalSupply;
        emit Transfer(address(0), _msgSender(), _totalSupply);
    }

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _totalSupply;
    }

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

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

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        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 setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        require(newLiquidityTax.add(newMarketingTax).add(newTeamTax) <= 1000, "Too much value!"); // max value 10%
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyTeamFee = newTeamTax;

        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyTeamFee);
    }

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newTeamTax) external onlyOwner() {
        require(newLiquidityTax.add(newMarketingTax).add(newTeamTax) <= 1000, "Too much value!");
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellTeamFee = newTeamTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellTeamFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newTeamShare) external onlyOwner() {
        require(newLiquidityShare.add(newMarketingShare).add(newTeamShare) <= 24, "Too much value!");
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _teamShare = newTeamShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_teamShare);
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        require(
            maxTxAmount >= _totalSupply.div(100),               // >= 1%
            "Max TX amount should be at least 0.05% of total supply"
        );
        _maxTxAmount = maxTxAmount;
    }

    function enableDisableWalletLimit(bool newValue) external onlyOwner {
       checkWalletLimit = newValue;
    }

    function setIsWalletLimitExempt(address holder, bool exempt) external onlyOwner {
        isWalletLimitExempt[holder] = exempt;
    }

    function setWalletLimit(uint256 newLimit) external onlyOwner {
        require(newLimit >= _totalSupply.div(100), "The value is too small");  // >= 1%
        _walletMax  = newLimit;
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner() {
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        require(newAddress != address(0), "It is zero address!");
        marketingWalletAddress = payable(newAddress);
    }

    function setTeamWalletAddress(address newAddress) external onlyOwner() {
        require(newAddress != address(0), "It is zero address!");
        teamWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        require(swapAndLiquifyEnabled != _enabled, "Value already set!");
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        require(swapAndLiquifyByLimitOnly != newValue, "Value already set!");
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }

    //to recieve ETH from uniswapV2Router when swaping
    receive() external payable {}

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

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

    function _transfer(address sender, address recipient, uint256 amount) private returns (bool) {

        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            return _basicTransfer(sender, recipient, amount); 
        }
        else
        {
            if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            
            if (overMinimumTokenBalance && !inSwapAndLiquify && !isMarketPair[sender] && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                    swapAndLiquify(contractTokenBalance);    
            }

            _balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");

            uint256 finalAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         amount : takeFee(sender, recipient, amount);

            if(checkWalletLimit && !isWalletLimitExempt[recipient])
                require(balanceOf(recipient).add(finalAmount) <= _walletMax);

            _balances[recipient] = _balances[recipient].add(finalAmount);

            emit Transfer(sender, recipient, finalAmount);
            return true;
        }
    }

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

    function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForLP = tAmount.mul(_liquidityShare).div(_totalDistributionShares).div(2);
        uint256 tokensForSwap = tAmount.sub(tokensForLP);

        swapTokensForEth(tokensForSwap);
        uint256 amountReceived = address(this).balance;

        uint256 totalETHFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountETHLiquidity = amountReceived.mul(_liquidityShare).div(totalETHFee).div(2);
        uint256 amountETHTeam = amountReceived.mul(_teamShare).div(totalETHFee);
        uint256 amountETHMarketing = amountReceived.sub(amountETHLiquidity).sub(amountETHTeam);

        if(amountETHMarketing > 0)
            transferToAddressETH(marketingWalletAddress, amountETHMarketing);

        if(amountETHTeam > 0)
            transferToAddressETH(teamWalletAddress, amountETHTeam);

        if(amountETHLiquidity > 0 && tokensForLP > 0)
            addLiquidity(tokensForLP, amountETHLiquidity);
    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function takeFee(address sender, address recipient, uint256 amount) internal returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(isMarketPair[sender]) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(10**4);
        }
        else if(isMarketPair[recipient]) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(10**4);
        }
        
        if(feeAmount > 0) {
            _balances[address(this)] = _balances[address(this)].add(feeAmount);
            emit Transfer(sender, address(this), feeAmount);
        }

        return amount.sub(feeAmount);
    }   

    function claim() external onlyOwner {
        IERC20 token = IERC20(address(this));
        token.transfer(msg.sender, token.balanceOf(address(this)));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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":"_buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_walletMax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"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":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newTeamShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsWalletLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newTeamTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setTeamWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"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","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600c81526020017f4c756e617220537068696e780000000000000000000000000000000000000000815250600190816200004a919062000dea565b506040518060400160405280600b81526020017f4c554e4152535048494e580000000000000000000000000000000000000000008152506002908162000091919062000dea565b506012600360006101000a81548160ff021916908360ff16021790555073dd9935e54332b4a33ac72a68fd9ab61e88e67e8f600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507394ef52313bfecd0136587eeb565decbe20742cda600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506000600b556000600c556000600d556064600e556064600f556064601055600860115560086012556008601355600360009054906101000a900460ff16600a620001d8919062001061565b6402540be400620001ea9190620010b2565b601755600360009054906101000a900460ff16600a6200020b919062001061565b6402540be4006200021d9190620010b2565b601855600360009054906101000a900460ff16600a6200023e919062001061565b6402540be400620002509190620010b2565b601955600360009054906101000a900460ff16600a62000271919062001061565b624c4b40620002819190620010b2565b601a556001601c60156101000a81548160ff0219169083151502179055506000601c60166101000a81548160ff0219169083151502179055506001601c60176101000a81548160ff021916908315150217905550348015620002e257600080fd5b506000620002f562000adc60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041e919062001167565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000486573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ac919062001167565b6040518363ffffffff1660e01b8152600401620004cb929190620011aa565b6020604051808303816000875af1158015620004eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000511919062001167565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601754600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506001600760006200064d62000ae460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000725600d5462000716600c54600b5462000b0d60201b90919060201c565b62000b0d60201b90919060201c565b6014819055506200075a6010546200074b600f54600e5462000b0d60201b90919060201c565b62000b0d60201b90919060201c565b6015819055506200078f6013546200078060125460115462000b0d60201b90919060201c565b62000b0d60201b90919060201c565b601681905550600160086000620007ab62000ae460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000620008e462000ae460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a6000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506017546005600062000a1e62000adc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555062000a6c62000adc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60175460405162000acd9190620011e8565b60405180910390a350620012c3565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000b1e919062001205565b90508381101562000b66576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b5d90620012a1565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bf257607f821691505b60208210810362000c085762000c0762000baa565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c33565b62000c7e868362000c33565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ccb62000cc562000cbf8462000c96565b62000ca0565b62000c96565b9050919050565b6000819050919050565b62000ce78362000caa565b62000cff62000cf68262000cd2565b84845462000c40565b825550505050565b600090565b62000d1662000d07565b62000d2381848462000cdc565b505050565b5b8181101562000d4b5762000d3f60008262000d0c565b60018101905062000d29565b5050565b601f82111562000d9a5762000d648162000c0e565b62000d6f8462000c23565b8101602085101562000d7f578190505b62000d9762000d8e8562000c23565b83018262000d28565b50505b505050565b600082821c905092915050565b600062000dbf6000198460080262000d9f565b1980831691505092915050565b600062000dda838362000dac565b9150826002028217905092915050565b62000df58262000b70565b67ffffffffffffffff81111562000e115762000e1062000b7b565b5b62000e1d825462000bd9565b62000e2a82828562000d4f565b600060209050601f83116001811462000e62576000841562000e4d578287015190505b62000e59858262000dcc565b86555062000ec9565b601f19841662000e728662000c0e565b60005b8281101562000e9c5784890151825560018201915060208501945060208101905062000e75565b8683101562000ebc578489015162000eb8601f89168262000dac565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000f5f5780860481111562000f375762000f3662000ed1565b5b600185161562000f475780820291505b808102905062000f578562000f00565b945062000f17565b94509492505050565b60008262000f7a57600190506200104d565b8162000f8a57600090506200104d565b816001811462000fa3576002811462000fae5762000fe4565b60019150506200104d565b60ff84111562000fc35762000fc262000ed1565b5b8360020a91508482111562000fdd5762000fdc62000ed1565b5b506200104d565b5060208310610133831016604e8410600b84101617156200101e5782820a90508381111562001018576200101762000ed1565b5b6200104d565b6200102d848484600162000f0d565b9250905081840481111562001047576200104662000ed1565b5b81810290505b9392505050565b600060ff82169050919050565b60006200106e8262000c96565b91506200107b8362001054565b9250620010aa7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000f68565b905092915050565b6000620010bf8262000c96565b9150620010cc8362000c96565b9250828202620010dc8162000c96565b91508282048414831517620010f657620010f562000ed1565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200112f8262001102565b9050919050565b620011418162001122565b81146200114d57600080fd5b50565b600081519050620011618162001136565b92915050565b60006020828403121562001180576200117f620010fd565b5b6000620011908482850162001150565b91505092915050565b620011a48162001122565b82525050565b6000604082019050620011c1600083018562001199565b620011d0602083018462001199565b9392505050565b620011e28162000c96565b82525050565b6000602082019050620011ff6000830184620011d7565b92915050565b6000620012128262000c96565b91506200121f8362000c96565b92508282019050808211156200123a576200123962000ed1565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001289601b8362001240565b9150620012968262001251565b602082019050919050565b60006020820190508181036000830152620012bc816200127a565b9050919050565b608051614e23620012e6600039600081816113e3015261140f0152614e236000f3fe6080604052600436106103855760003560e01c80638b42507f116101d1578063c816841b11610102578063dd62ed3e116100a0578063f1d5f5171161006f578063f1d5f51714610d27578063f2fde38b14610d50578063f84ba65d14610d79578063f872858a14610da25761038c565b8063dd62ed3e14610c6d578063ec28438a14610caa578063ef422a1814610cd3578063f0cd1dac14610cfc5761038c565b8063cab03471116100dc578063cab0347114610bc1578063d158272d14610bec578063da00097d14610c17578063dc44b6a014610c425761038c565b8063c816841b14610b2e578063c860795214610b59578063c867d60b14610b845761038c565b8063a5d69d1f1161016f578063c2d4640e11610149578063c2d4640e14610a86578063c469b6dd14610aaf578063c49b9a8014610ada578063c5d2418914610b035761038c565b8063a5d69d1f146109f5578063a83f53a714610a1e578063a9059cbb14610a495761038c565b806395d89b41116101ab57806395d89b4114610937578063a073d37f14610962578063a08e671f1461098d578063a457c2d7146109b85761038c565b80638b42507f146108b85780638da5cb5b146108f5578063914eb66a146109205761038c565b806339509351116102b657806357a5802f11610254578063807c2d9c11610223578063807c2d9c1461080e57806382eefb4314610839578063844d591c1461086457806388790a681461088d5761038c565b806357a5802f1461075057806361a23c691461077b57806370a08231146107a65780637d1db4a5146107e35761038c565b80634a74bb02116102905780634a74bb02146106a85780634cb80fd5146106d35780634e71d92d146106fc5780635342acb4146107135761038c565b806339509351146106055780633b97084a146106425780633ecad2711461066b5761038c565b80632198cf6c1161032357806327c8f835116102fd57806327c8f8351461055b5780632b112e49146105865780632c4b2334146105b1578063313ce567146105da5761038c565b80632198cf6c146104cc57806323b872dd146104f55780632563ae83146105325761038c565b80631245e3471161035f5780631245e347146104225780631694505e1461044d57806318160ddd146104785780631870517a146104a35761038c565b806306fdde031461039157806308733214146103bc578063095ea7b3146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcd565b6040516103b39190613d20565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613d7d565b610e5f565b005b3480156103f157600080fd5b5061040c60048036038101906104079190613e2e565b610fa8565b6040516104199190613e89565b60405180910390f35b34801561042e57600080fd5b50610437610fc6565b6040516104449190613ec5565b60405180910390f35b34801561045957600080fd5b50610462610fec565b60405161046f9190613f3f565b60405180910390f35b34801561048457600080fd5b5061048d611012565b60405161049a9190613f69565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613d7d565b61101c565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613fb0565b611165565b005b34801561050157600080fd5b5061051c60048036038101906105179190613ff0565b611255565b6040516105299190613e89565b60405180910390f35b34801561053e57600080fd5b5061055960048036038101906105549190614043565b61132f565b005b34801561056757600080fd5b506105706113e1565b60405161057d919061407f565b60405180910390f35b34801561059257600080fd5b5061059b611405565b6040516105a89190613f69565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d3919061409a565b611449565b005b3480156105e657600080fd5b506105ef611591565b6040516105fc91906140e3565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613e2e565b6115a8565b6040516106399190613e89565b60405180910390f35b34801561064e57600080fd5b50610669600480360381019061066491906140fe565b61165b565b005b34801561067757600080fd5b50610692600480360381019061068d919061409a565b6116fa565b60405161069f9190613e89565b60405180910390f35b3480156106b457600080fd5b506106bd61171a565b6040516106ca9190613e89565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f5919061409a565b61172d565b005b34801561070857600080fd5b50610711611875565b005b34801561071f57600080fd5b5061073a6004803603810190610735919061409a565b611a0a565b6040516107479190613e89565b60405180910390f35b34801561075c57600080fd5b50610765611a2a565b6040516107729190613f69565b60405180910390f35b34801561078757600080fd5b50610790611a30565b60405161079d9190613f69565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061409a565b611a36565b6040516107da9190613f69565b60405180910390f35b3480156107ef57600080fd5b506107f8611a7f565b6040516108059190613f69565b60405180910390f35b34801561081a57600080fd5b50610823611a85565b6040516108309190613f69565b60405180910390f35b34801561084557600080fd5b5061084e611a8b565b60405161085b9190613f69565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190613fb0565b611a91565b005b34801561089957600080fd5b506108a2611b81565b6040516108af9190613f69565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da919061409a565b611b87565b6040516108ec9190613e89565b60405180910390f35b34801561090157600080fd5b5061090a611ba7565b604051610917919061407f565b60405180910390f35b34801561092c57600080fd5b50610935611bd0565b005b34801561094357600080fd5b5061094c611d23565b6040516109599190613d20565b60405180910390f35b34801561096e57600080fd5b50610977611db5565b6040516109849190613f69565b60405180910390f35b34801561099957600080fd5b506109a2611dbf565b6040516109af9190613f69565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da9190613e2e565b611dc5565b6040516109ec9190613e89565b60405180910390f35b348015610a0157600080fd5b50610a1c6004803603810190610a179190614043565b611e92565b005b348015610a2a57600080fd5b50610a33611f99565b604051610a409190613f69565b60405180910390f35b348015610a5557600080fd5b50610a706004803603810190610a6b9190613e2e565b611f9f565b604051610a7d9190613e89565b60405180910390f35b348015610a9257600080fd5b50610aad6004803603810190610aa89190613d7d565b611fbe565b005b348015610abb57600080fd5b50610ac4612106565b604051610ad19190613f69565b60405180910390f35b348015610ae657600080fd5b50610b016004803603810190610afc9190614043565b61210c565b005b348015610b0f57600080fd5b50610b1861224a565b604051610b259190613f69565b60405180910390f35b348015610b3a57600080fd5b50610b43612250565b604051610b50919061407f565b60405180910390f35b348015610b6557600080fd5b50610b6e612276565b604051610b7b9190613f69565b60405180910390f35b348015610b9057600080fd5b50610bab6004803603810190610ba6919061409a565b61227c565b604051610bb89190613e89565b60405180910390f35b348015610bcd57600080fd5b50610bd661229c565b604051610be39190613f69565b60405180910390f35b348015610bf857600080fd5b50610c016122a2565b604051610c0e9190613ec5565b60405180910390f35b348015610c2357600080fd5b50610c2c6122c8565b604051610c399190613e89565b60405180910390f35b348015610c4e57600080fd5b50610c576122db565b604051610c649190613f69565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f919061412b565b6122e1565b604051610ca19190613f69565b60405180910390f35b348015610cb657600080fd5b50610cd16004803603810190610ccc91906140fe565b612368565b005b348015610cdf57600080fd5b50610cfa6004803603810190610cf59190613fb0565b61245f565b005b348015610d0857600080fd5b50610d1161254f565b604051610d1e9190613f69565b60405180910390f35b348015610d3357600080fd5b50610d4e6004803603810190610d4991906140fe565b612555565b005b348015610d5c57600080fd5b50610d776004803603810190610d72919061409a565b61264c565b005b348015610d8557600080fd5b50610da06004803603810190610d9b9190613fb0565b61280d565b005b348015610dae57600080fd5b50610db76128fd565b604051610dc49190613e89565b60405180910390f35b606060018054610ddc9061419a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e089061419a565b8015610e555780601f10610e2a57610100808354040283529160200191610e55565b820191906000526020600020905b815481529060010190602001808311610e3857829003601f168201915b5050505050905090565b610e67612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb90614217565b60405180910390fd5b6103e8610f1c82610f0e858761291890919063ffffffff16565b61291890919063ffffffff16565b1115610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490614283565b60405180910390fd5b82600e8190555081600f8190555080601081905550610f9d601054610f8f600f54600e5461291890919063ffffffff16565b61291890919063ffffffff16565b601581905550505050565b6000610fbc610fb5612910565b8484612976565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601754905090565b611024612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a890614217565b60405180910390fd5b6103e86110d9826110cb858761291890919063ffffffff16565b61291890919063ffffffff16565b111561111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190614283565b60405180910390fd5b82600b8190555081600c8190555080600d8190555061115a600d5461114c600c54600b5461291890919063ffffffff16565b61291890919063ffffffff16565b601481905550505050565b61116d612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190614217565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611262848484612b3f565b506113248461126f612910565b61131f85604051806060016040528060288152602001614da160289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112d5612910565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131229092919063ffffffff16565b612976565b600190509392505050565b611337612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90614217565b60405180910390fd5b80601c60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60006114446114337f0000000000000000000000000000000000000000000000000000000000000000611a36565b60175461318690919063ffffffff16565b905090565b611451612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590614217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361154d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611544906142ef565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b60006116516115b5612910565b8461164c85600660006115c6612910565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291890919063ffffffff16565b612976565b6001905092915050565b611663612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790614217565b60405180910390fd5b80601a8190555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601c60159054906101000a900460ff1681565b611735612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b990614217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611828906142ef565b60405180910390fd5b80600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61187d612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190614217565b60405180910390fd5b60003090508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611965919061407f565b602060405180830381865afa158015611982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a69190614324565b6040518363ffffffff1660e01b81526004016119c3929190614351565b6020604051808303816000875af11580156119e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a06919061438f565b5050565b60076020528060005260406000206000915054906101000a900460ff1681565b60115481565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60185481565b60195481565b60155481565b611a99612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90614217565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bd8612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90614217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060028054611d329061419a565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5e9061419a565b8015611dab5780601f10611d8057610100808354040283529160200191611dab565b820191906000526020600020905b815481529060010190602001808311611d8e57829003601f168201915b5050505050905090565b6000601a54905090565b60165481565b6000611e88611dd2612910565b84611e8385604051806060016040528060258152602001614dc96025913960066000611dfc612910565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131229092919063ffffffff16565b612976565b6001905092915050565b611e9a612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614217565b60405180910390fd5b801515601c60169054906101000a900460ff16151503611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614408565b60405180910390fd5b80601c60166101000a81548160ff02191690831515021790555050565b60135481565b6000611fb3611fac612910565b8484612b3f565b506001905092915050565b611fc6612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90614217565b60405180910390fd5b601861207a8261206c858761291890919063ffffffff16565b61291890919063ffffffff16565b11156120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614283565b60405180910390fd5b8260118190555081601281905550806013819055506120fb6013546120ed60125460115461291890919063ffffffff16565b61291890919063ffffffff16565b601681905550505050565b600d5481565b612114612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890614217565b60405180910390fd5b801515601c60159054906101000a900460ff161515036121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed90614408565b60405180910390fd5b80601c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161223f9190613e89565b60405180910390a150565b600c5481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60086020528060005260406000206000915054906101000a900460ff1681565b60105481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60169054906101000a900460ff1681565b600b5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612370612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f490614217565b60405180910390fd5b61241360646017546131d090919063ffffffff16565b811015612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c9061449a565b60405180910390fd5b8060188190555050565b612467612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614217565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b61255d612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190614217565b60405180910390fd5b61260060646017546131d090919063ffffffff16565b811015612642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263990614506565b60405180910390fd5b8060198190555050565b612654612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d890614217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274790614598565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612815612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289990614217565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c60179054906101000a900460ff1681565b600033905090565b600080828461292791906145e7565b90508381101561296c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296390614667565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dc906146f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b9061478b565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b329190613f69565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba69061481d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c15906148af565b60405180910390fd5b601c60149054906101000a900460ff1615612c4557612c3e84848461321a565b905061311b565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ce95750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d3457601854821115612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a90614941565b60405180910390fd5b5b6000612d3f30611a36565b90506000601a548210159050808015612d655750601c60149054906101000a900460ff16155b8015612dbb5750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dd35750601c60159054906101000a900460ff165b15612dfd57601c60169054906101000a900460ff1615612df357601a5491505b612dfc826133ed565b5b612e86846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131229092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f6c5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f8057612f7b8787876135de565b612f82565b845b9050601c60179054906101000a900460ff168015612fea5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130195760195461300d82612fff89611a36565b61291890919063ffffffff16565b111561301857600080fd5b5b61306b81600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291890919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161310b9190613f69565b60405180910390a3600193505050505b9392505050565b600083831115829061316a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131619190613d20565b60405180910390fd5b50600083856131799190614961565b9050809150509392505050565b60006131c883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613122565b905092915050565b600061321283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613807565b905092915050565b60006132a5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131229092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061333a82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291890919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133da9190613f69565b60405180910390a3600190509392505050565b6001601c60146101000a81548160ff0219169083151502179055506000613446600261343860165461342a6011548761386a90919063ffffffff16565b6131d090919063ffffffff16565b6131d090919063ffffffff16565b9050600061345d828461318690919063ffffffff16565b9050613468816138e4565b6000479050600061349961348860026011546131d090919063ffffffff16565b60165461318690919063ffffffff16565b905060006134d760026134c9846134bb6011548861386a90919063ffffffff16565b6131d090919063ffffffff16565b6131d090919063ffffffff16565b90506000613502836134f46013548761386a90919063ffffffff16565b6131d090919063ffffffff16565b9050600061352b8261351d858861318690919063ffffffff16565b61318690919063ffffffff16565b9050600081111561356357613562600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b60565b5b600082111561359957613598600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b60565b5b6000831180156135a95750600087115b156135b9576135b88784613bab565b5b505050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613667576136606127106136526014548661386a90919063ffffffff16565b6131d090919063ffffffff16565b90506136e6565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136e5576136e26127106136d46015548661386a90919063ffffffff16565b6131d090919063ffffffff16565b90505b5b60008111156137ea5761374181600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291890919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137e19190613f69565b60405180910390a35b6137fd818461318690919063ffffffff16565b9150509392505050565b6000808311829061384e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138459190613d20565b60405180910390fd5b506000838561385d91906149c4565b9050809150509392505050565b600080830361387c57600090506138de565b6000828461388a91906149f5565b905082848261389991906149c4565b146138d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d090614aa9565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff81111561390157613900614ac9565b5b60405190808252806020026020018201604052801561392f5781602001602082028036833780820191505090505b509050308160008151811061394757613946614af8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a129190614b3c565b81600181518110613a2657613a25614af8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a8d30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612976565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613af1959493929190614c62565b600060405180830381600087803b158015613b0b57600080fd5b505af1158015613b1f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613b54929190614cbc565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613ba6573d6000803e3d6000fd5b505050565b613bd830601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612976565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c24611ba7565b426040518863ffffffff1660e01b8152600401613c4696959493929190614cec565b60606040518083038185885af1158015613c64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c899190614d4d565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cca578082015181840152602081019050613caf565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cf282613c90565b613cfc8185613c9b565b9350613d0c818560208601613cac565b613d1581613cd6565b840191505092915050565b60006020820190508181036000830152613d3a8184613ce7565b905092915050565b600080fd5b6000819050919050565b613d5a81613d47565b8114613d6557600080fd5b50565b600081359050613d7781613d51565b92915050565b600080600060608486031215613d9657613d95613d42565b5b6000613da486828701613d68565b9350506020613db586828701613d68565b9250506040613dc686828701613d68565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613dfb82613dd0565b9050919050565b613e0b81613df0565b8114613e1657600080fd5b50565b600081359050613e2881613e02565b92915050565b60008060408385031215613e4557613e44613d42565b5b6000613e5385828601613e19565b9250506020613e6485828601613d68565b9150509250929050565b60008115159050919050565b613e8381613e6e565b82525050565b6000602082019050613e9e6000830184613e7a565b92915050565b6000613eaf82613dd0565b9050919050565b613ebf81613ea4565b82525050565b6000602082019050613eda6000830184613eb6565b92915050565b6000819050919050565b6000613f05613f00613efb84613dd0565b613ee0565b613dd0565b9050919050565b6000613f1782613eea565b9050919050565b6000613f2982613f0c565b9050919050565b613f3981613f1e565b82525050565b6000602082019050613f546000830184613f30565b92915050565b613f6381613d47565b82525050565b6000602082019050613f7e6000830184613f5a565b92915050565b613f8d81613e6e565b8114613f9857600080fd5b50565b600081359050613faa81613f84565b92915050565b60008060408385031215613fc757613fc6613d42565b5b6000613fd585828601613e19565b9250506020613fe685828601613f9b565b9150509250929050565b60008060006060848603121561400957614008613d42565b5b600061401786828701613e19565b935050602061402886828701613e19565b925050604061403986828701613d68565b9150509250925092565b60006020828403121561405957614058613d42565b5b600061406784828501613f9b565b91505092915050565b61407981613df0565b82525050565b60006020820190506140946000830184614070565b92915050565b6000602082840312156140b0576140af613d42565b5b60006140be84828501613e19565b91505092915050565b600060ff82169050919050565b6140dd816140c7565b82525050565b60006020820190506140f860008301846140d4565b92915050565b60006020828403121561411457614113613d42565b5b600061412284828501613d68565b91505092915050565b6000806040838503121561414257614141613d42565b5b600061415085828601613e19565b925050602061416185828601613e19565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141b257607f821691505b6020821081036141c5576141c461416b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614201602083613c9b565b915061420c826141cb565b602082019050919050565b60006020820190508181036000830152614230816141f4565b9050919050565b7f546f6f206d7563682076616c7565210000000000000000000000000000000000600082015250565b600061426d600f83613c9b565b915061427882614237565b602082019050919050565b6000602082019050818103600083015261429c81614260565b9050919050565b7f4974206973207a65726f20616464726573732100000000000000000000000000600082015250565b60006142d9601383613c9b565b91506142e4826142a3565b602082019050919050565b60006020820190508181036000830152614308816142cc565b9050919050565b60008151905061431e81613d51565b92915050565b60006020828403121561433a57614339613d42565b5b60006143488482850161430f565b91505092915050565b60006040820190506143666000830185614070565b6143736020830184613f5a565b9392505050565b60008151905061438981613f84565b92915050565b6000602082840312156143a5576143a4613d42565b5b60006143b38482850161437a565b91505092915050565b7f56616c756520616c726561647920736574210000000000000000000000000000600082015250565b60006143f2601283613c9b565b91506143fd826143bc565b602082019050919050565b60006020820190508181036000830152614421816143e5565b9050919050565b7f4d617820545820616d6f756e742073686f756c64206265206174206c6561737460008201527f20302e303525206f6620746f74616c20737570706c7900000000000000000000602082015250565b6000614484603683613c9b565b915061448f82614428565b604082019050919050565b600060208201905081810360008301526144b381614477565b9050919050565b7f5468652076616c756520697320746f6f20736d616c6c00000000000000000000600082015250565b60006144f0601683613c9b565b91506144fb826144ba565b602082019050919050565b6000602082019050818103600083015261451f816144e3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614582602683613c9b565b915061458d82614526565b604082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145f282613d47565b91506145fd83613d47565b9250828201905080821115614615576146146145b8565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614651601b83613c9b565b915061465c8261461b565b602082019050919050565b6000602082019050818103600083015261468081614644565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146e3602483613c9b565b91506146ee82614687565b604082019050919050565b60006020820190508181036000830152614712816146d6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614775602283613c9b565b915061478082614719565b604082019050919050565b600060208201905081810360008301526147a481614768565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614807602583613c9b565b9150614812826147ab565b604082019050919050565b60006020820190508181036000830152614836816147fa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614899602383613c9b565b91506148a48261483d565b604082019050919050565b600060208201905081810360008301526148c88161488c565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061492b602883613c9b565b9150614936826148cf565b604082019050919050565b6000602082019050818103600083015261495a8161491e565b9050919050565b600061496c82613d47565b915061497783613d47565b925082820390508181111561498f5761498e6145b8565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149cf82613d47565b91506149da83613d47565b9250826149ea576149e9614995565b5b828204905092915050565b6000614a0082613d47565b9150614a0b83613d47565b9250828202614a1981613d47565b91508282048414831517614a3057614a2f6145b8565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a93602183613c9b565b9150614a9e82614a37565b604082019050919050565b60006020820190508181036000830152614ac281614a86565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b3681613e02565b92915050565b600060208284031215614b5257614b51613d42565b5b6000614b6084828501614b27565b91505092915050565b6000819050919050565b6000614b8e614b89614b8484614b69565b613ee0565b613d47565b9050919050565b614b9e81614b73565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bd981613df0565b82525050565b6000614beb8383614bd0565b60208301905092915050565b6000602082019050919050565b6000614c0f82614ba4565b614c198185614baf565b9350614c2483614bc0565b8060005b83811015614c55578151614c3c8882614bdf565b9750614c4783614bf7565b925050600181019050614c28565b5085935050505092915050565b600060a082019050614c776000830188613f5a565b614c846020830187614b95565b8181036040830152614c968186614c04565b9050614ca56060830185614070565b614cb26080830184613f5a565b9695505050505050565b6000604082019050614cd16000830185613f5a565b8181036020830152614ce38184614c04565b90509392505050565b600060c082019050614d016000830189614070565b614d0e6020830188613f5a565b614d1b6040830187614b95565b614d286060830186614b95565b614d356080830185614070565b614d4260a0830184613f5a565b979650505050505050565b600080600060608486031215614d6657614d65613d42565b5b6000614d748682870161430f565b9350506020614d858682870161430f565b9250506040614d968682870161430f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203edd42e523d2d07b5a40fe2b5dadae7b32677cb3af84b5905b12d96ff01051e264736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103855760003560e01c80638b42507f116101d1578063c816841b11610102578063dd62ed3e116100a0578063f1d5f5171161006f578063f1d5f51714610d27578063f2fde38b14610d50578063f84ba65d14610d79578063f872858a14610da25761038c565b8063dd62ed3e14610c6d578063ec28438a14610caa578063ef422a1814610cd3578063f0cd1dac14610cfc5761038c565b8063cab03471116100dc578063cab0347114610bc1578063d158272d14610bec578063da00097d14610c17578063dc44b6a014610c425761038c565b8063c816841b14610b2e578063c860795214610b59578063c867d60b14610b845761038c565b8063a5d69d1f1161016f578063c2d4640e11610149578063c2d4640e14610a86578063c469b6dd14610aaf578063c49b9a8014610ada578063c5d2418914610b035761038c565b8063a5d69d1f146109f5578063a83f53a714610a1e578063a9059cbb14610a495761038c565b806395d89b41116101ab57806395d89b4114610937578063a073d37f14610962578063a08e671f1461098d578063a457c2d7146109b85761038c565b80638b42507f146108b85780638da5cb5b146108f5578063914eb66a146109205761038c565b806339509351116102b657806357a5802f11610254578063807c2d9c11610223578063807c2d9c1461080e57806382eefb4314610839578063844d591c1461086457806388790a681461088d5761038c565b806357a5802f1461075057806361a23c691461077b57806370a08231146107a65780637d1db4a5146107e35761038c565b80634a74bb02116102905780634a74bb02146106a85780634cb80fd5146106d35780634e71d92d146106fc5780635342acb4146107135761038c565b806339509351146106055780633b97084a146106425780633ecad2711461066b5761038c565b80632198cf6c1161032357806327c8f835116102fd57806327c8f8351461055b5780632b112e49146105865780632c4b2334146105b1578063313ce567146105da5761038c565b80632198cf6c146104cc57806323b872dd146104f55780632563ae83146105325761038c565b80631245e3471161035f5780631245e347146104225780631694505e1461044d57806318160ddd146104785780631870517a146104a35761038c565b806306fdde031461039157806308733214146103bc578063095ea7b3146103e55761038c565b3661038c57005b600080fd5b34801561039d57600080fd5b506103a6610dcd565b6040516103b39190613d20565b60405180910390f35b3480156103c857600080fd5b506103e360048036038101906103de9190613d7d565b610e5f565b005b3480156103f157600080fd5b5061040c60048036038101906104079190613e2e565b610fa8565b6040516104199190613e89565b60405180910390f35b34801561042e57600080fd5b50610437610fc6565b6040516104449190613ec5565b60405180910390f35b34801561045957600080fd5b50610462610fec565b60405161046f9190613f3f565b60405180910390f35b34801561048457600080fd5b5061048d611012565b60405161049a9190613f69565b60405180910390f35b3480156104af57600080fd5b506104ca60048036038101906104c59190613d7d565b61101c565b005b3480156104d857600080fd5b506104f360048036038101906104ee9190613fb0565b611165565b005b34801561050157600080fd5b5061051c60048036038101906105179190613ff0565b611255565b6040516105299190613e89565b60405180910390f35b34801561053e57600080fd5b5061055960048036038101906105549190614043565b61132f565b005b34801561056757600080fd5b506105706113e1565b60405161057d919061407f565b60405180910390f35b34801561059257600080fd5b5061059b611405565b6040516105a89190613f69565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d3919061409a565b611449565b005b3480156105e657600080fd5b506105ef611591565b6040516105fc91906140e3565b60405180910390f35b34801561061157600080fd5b5061062c60048036038101906106279190613e2e565b6115a8565b6040516106399190613e89565b60405180910390f35b34801561064e57600080fd5b50610669600480360381019061066491906140fe565b61165b565b005b34801561067757600080fd5b50610692600480360381019061068d919061409a565b6116fa565b60405161069f9190613e89565b60405180910390f35b3480156106b457600080fd5b506106bd61171a565b6040516106ca9190613e89565b60405180910390f35b3480156106df57600080fd5b506106fa60048036038101906106f5919061409a565b61172d565b005b34801561070857600080fd5b50610711611875565b005b34801561071f57600080fd5b5061073a6004803603810190610735919061409a565b611a0a565b6040516107479190613e89565b60405180910390f35b34801561075c57600080fd5b50610765611a2a565b6040516107729190613f69565b60405180910390f35b34801561078757600080fd5b50610790611a30565b60405161079d9190613f69565b60405180910390f35b3480156107b257600080fd5b506107cd60048036038101906107c8919061409a565b611a36565b6040516107da9190613f69565b60405180910390f35b3480156107ef57600080fd5b506107f8611a7f565b6040516108059190613f69565b60405180910390f35b34801561081a57600080fd5b50610823611a85565b6040516108309190613f69565b60405180910390f35b34801561084557600080fd5b5061084e611a8b565b60405161085b9190613f69565b60405180910390f35b34801561087057600080fd5b5061088b60048036038101906108869190613fb0565b611a91565b005b34801561089957600080fd5b506108a2611b81565b6040516108af9190613f69565b60405180910390f35b3480156108c457600080fd5b506108df60048036038101906108da919061409a565b611b87565b6040516108ec9190613e89565b60405180910390f35b34801561090157600080fd5b5061090a611ba7565b604051610917919061407f565b60405180910390f35b34801561092c57600080fd5b50610935611bd0565b005b34801561094357600080fd5b5061094c611d23565b6040516109599190613d20565b60405180910390f35b34801561096e57600080fd5b50610977611db5565b6040516109849190613f69565b60405180910390f35b34801561099957600080fd5b506109a2611dbf565b6040516109af9190613f69565b60405180910390f35b3480156109c457600080fd5b506109df60048036038101906109da9190613e2e565b611dc5565b6040516109ec9190613e89565b60405180910390f35b348015610a0157600080fd5b50610a1c6004803603810190610a179190614043565b611e92565b005b348015610a2a57600080fd5b50610a33611f99565b604051610a409190613f69565b60405180910390f35b348015610a5557600080fd5b50610a706004803603810190610a6b9190613e2e565b611f9f565b604051610a7d9190613e89565b60405180910390f35b348015610a9257600080fd5b50610aad6004803603810190610aa89190613d7d565b611fbe565b005b348015610abb57600080fd5b50610ac4612106565b604051610ad19190613f69565b60405180910390f35b348015610ae657600080fd5b50610b016004803603810190610afc9190614043565b61210c565b005b348015610b0f57600080fd5b50610b1861224a565b604051610b259190613f69565b60405180910390f35b348015610b3a57600080fd5b50610b43612250565b604051610b50919061407f565b60405180910390f35b348015610b6557600080fd5b50610b6e612276565b604051610b7b9190613f69565b60405180910390f35b348015610b9057600080fd5b50610bab6004803603810190610ba6919061409a565b61227c565b604051610bb89190613e89565b60405180910390f35b348015610bcd57600080fd5b50610bd661229c565b604051610be39190613f69565b60405180910390f35b348015610bf857600080fd5b50610c016122a2565b604051610c0e9190613ec5565b60405180910390f35b348015610c2357600080fd5b50610c2c6122c8565b604051610c399190613e89565b60405180910390f35b348015610c4e57600080fd5b50610c576122db565b604051610c649190613f69565b60405180910390f35b348015610c7957600080fd5b50610c946004803603810190610c8f919061412b565b6122e1565b604051610ca19190613f69565b60405180910390f35b348015610cb657600080fd5b50610cd16004803603810190610ccc91906140fe565b612368565b005b348015610cdf57600080fd5b50610cfa6004803603810190610cf59190613fb0565b61245f565b005b348015610d0857600080fd5b50610d1161254f565b604051610d1e9190613f69565b60405180910390f35b348015610d3357600080fd5b50610d4e6004803603810190610d4991906140fe565b612555565b005b348015610d5c57600080fd5b50610d776004803603810190610d72919061409a565b61264c565b005b348015610d8557600080fd5b50610da06004803603810190610d9b9190613fb0565b61280d565b005b348015610dae57600080fd5b50610db76128fd565b604051610dc49190613e89565b60405180910390f35b606060018054610ddc9061419a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e089061419a565b8015610e555780601f10610e2a57610100808354040283529160200191610e55565b820191906000526020600020905b815481529060010190602001808311610e3857829003601f168201915b5050505050905090565b610e67612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ef4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eeb90614217565b60405180910390fd5b6103e8610f1c82610f0e858761291890919063ffffffff16565b61291890919063ffffffff16565b1115610f5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5490614283565b60405180910390fd5b82600e8190555081600f8190555080601081905550610f9d601054610f8f600f54600e5461291890919063ffffffff16565b61291890919063ffffffff16565b601581905550505050565b6000610fbc610fb5612910565b8484612976565b6001905092915050565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601754905090565b611024612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110a890614217565b60405180910390fd5b6103e86110d9826110cb858761291890919063ffffffff16565b61291890919063ffffffff16565b111561111a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111190614283565b60405180910390fd5b82600b8190555081600c8190555080600d8190555061115a600d5461114c600c54600b5461291890919063ffffffff16565b61291890919063ffffffff16565b601481905550505050565b61116d612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f190614217565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611262848484612b3f565b506113248461126f612910565b61131f85604051806060016040528060288152602001614da160289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006112d5612910565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131229092919063ffffffff16565b612976565b600190509392505050565b611337612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90614217565b60405180910390fd5b80601c60176101000a81548160ff02191690831515021790555050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b60006114446114337f000000000000000000000000000000000000000000000000000000000000dead611a36565b60175461318690919063ffffffff16565b905090565b611451612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d590614217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361154d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611544906142ef565b60405180910390fd5b80600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600360009054906101000a900460ff16905090565b60006116516115b5612910565b8461164c85600660006115c6612910565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291890919063ffffffff16565b612976565b6001905092915050565b611663612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790614217565b60405180910390fd5b80601a8190555050565b600a6020528060005260406000206000915054906101000a900460ff1681565b601c60159054906101000a900460ff1681565b611735612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b990614217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611831576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611828906142ef565b60405180910390fd5b80600360016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61187d612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190190614217565b60405180910390fd5b60003090508073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611965919061407f565b602060405180830381865afa158015611982573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a69190614324565b6040518363ffffffff1660e01b81526004016119c3929190614351565b6020604051808303816000875af11580156119e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a06919061438f565b5050565b60076020528060005260406000206000915054906101000a900460ff1681565b60115481565b60125481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60185481565b60195481565b60155481565b611a99612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1d90614217565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b60096020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bd8612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5c90614217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b606060028054611d329061419a565b80601f0160208091040260200160405190810160405280929190818152602001828054611d5e9061419a565b8015611dab5780601f10611d8057610100808354040283529160200191611dab565b820191906000526020600020905b815481529060010190602001808311611d8e57829003601f168201915b5050505050905090565b6000601a54905090565b60165481565b6000611e88611dd2612910565b84611e8385604051806060016040528060258152602001614dc96025913960066000611dfc612910565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131229092919063ffffffff16565b612976565b6001905092915050565b611e9a612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90614217565b60405180910390fd5b801515601c60169054906101000a900460ff16151503611f7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7390614408565b60405180910390fd5b80601c60166101000a81548160ff02191690831515021790555050565b60135481565b6000611fb3611fac612910565b8484612b3f565b506001905092915050565b611fc6612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612053576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204a90614217565b60405180910390fd5b601861207a8261206c858761291890919063ffffffff16565b61291890919063ffffffff16565b11156120bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b290614283565b60405180910390fd5b8260118190555081601281905550806013819055506120fb6013546120ed60125460115461291890919063ffffffff16565b61291890919063ffffffff16565b601681905550505050565b600d5481565b612114612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890614217565b60405180910390fd5b801515601c60159054906101000a900460ff161515036121f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ed90614408565b60405180910390fd5b80601c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161223f9190613e89565b60405180910390a150565b600c5481565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f5481565b60086020528060005260406000206000915054906101000a900460ff1681565b60105481565b600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60169054906101000a900460ff1681565b600b5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b612370612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f490614217565b60405180910390fd5b61241360646017546131d090919063ffffffff16565b811015612455576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244c9061449a565b60405180910390fd5b8060188190555050565b612467612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124eb90614217565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60145481565b61255d612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e190614217565b60405180910390fd5b61260060646017546131d090919063ffffffff16565b811015612642576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161263990614506565b60405180910390fd5b8060198190555050565b612654612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d890614217565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612750576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274790614598565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b612815612910565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146128a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289990614217565b60405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601c60179054906101000a900460ff1681565b600033905090565b600080828461292791906145e7565b90508381101561296c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296390614667565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129dc906146f9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4b9061478b565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b329190613f69565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ba69061481d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c15906148af565b60405180910390fd5b601c60149054906101000a900460ff1615612c4557612c3e84848461321a565b905061311b565b600960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ce95750600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612d3457601854821115612d33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2a90614941565b60405180910390fd5b5b6000612d3f30611a36565b90506000601a548210159050808015612d655750601c60149054906101000a900460ff16155b8015612dbb5750600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dd35750601c60159054906101000a900460ff165b15612dfd57601c60169054906101000a900460ff1615612df357601a5491505b612dfc826133ed565b5b612e86846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131229092919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f6c5750600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612f8057612f7b8787876135de565b612f82565b845b9050601c60179054906101000a900460ff168015612fea5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156130195760195461300d82612fff89611a36565b61291890919063ffffffff16565b111561301857600080fd5b5b61306b81600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291890919063ffffffff16565b600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161310b9190613f69565b60405180910390a3600193505050505b9392505050565b600083831115829061316a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131619190613d20565b60405180910390fd5b50600083856131799190614961565b9050809150509392505050565b60006131c883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613122565b905092915050565b600061321283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613807565b905092915050565b60006132a5826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600560008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546131229092919063ffffffff16565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061333a82600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291890919063ffffffff16565b600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516133da9190613f69565b60405180910390a3600190509392505050565b6001601c60146101000a81548160ff0219169083151502179055506000613446600261343860165461342a6011548761386a90919063ffffffff16565b6131d090919063ffffffff16565b6131d090919063ffffffff16565b9050600061345d828461318690919063ffffffff16565b9050613468816138e4565b6000479050600061349961348860026011546131d090919063ffffffff16565b60165461318690919063ffffffff16565b905060006134d760026134c9846134bb6011548861386a90919063ffffffff16565b6131d090919063ffffffff16565b6131d090919063ffffffff16565b90506000613502836134f46013548761386a90919063ffffffff16565b6131d090919063ffffffff16565b9050600061352b8261351d858861318690919063ffffffff16565b61318690919063ffffffff16565b9050600081111561356357613562600360019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613b60565b5b600082111561359957613598600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613b60565b5b6000831180156135a95750600087115b156135b9576135b88784613bab565b5b505050505050506000601c60146101000a81548160ff02191690831515021790555050565b60008060009050600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613667576136606127106136526014548661386a90919063ffffffff16565b6131d090919063ffffffff16565b90506136e6565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156136e5576136e26127106136d46015548661386a90919063ffffffff16565b6131d090919063ffffffff16565b90505b5b60008111156137ea5761374181600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461291890919063ffffffff16565b600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516137e19190613f69565b60405180910390a35b6137fd818461318690919063ffffffff16565b9150509392505050565b6000808311829061384e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138459190613d20565b60405180910390fd5b506000838561385d91906149c4565b9050809150509392505050565b600080830361387c57600090506138de565b6000828461388a91906149f5565b905082848261389991906149c4565b146138d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138d090614aa9565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff81111561390157613900614ac9565b5b60405190808252806020026020018201604052801561392f5781602001602082028036833780820191505090505b509050308160008151811061394757613946614af8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a129190614b3c565b81600181518110613a2657613a25614af8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613a8d30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612976565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613af1959493929190614c62565b600060405180830381600087803b158015613b0b57600080fd5b505af1158015613b1f573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a78282604051613b54929190614cbc565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015613ba6573d6000803e3d6000fd5b505050565b613bd830601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612976565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613c24611ba7565b426040518863ffffffff1660e01b8152600401613c4696959493929190614cec565b60606040518083038185885af1158015613c64573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613c899190614d4d565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cca578082015181840152602081019050613caf565b60008484015250505050565b6000601f19601f8301169050919050565b6000613cf282613c90565b613cfc8185613c9b565b9350613d0c818560208601613cac565b613d1581613cd6565b840191505092915050565b60006020820190508181036000830152613d3a8184613ce7565b905092915050565b600080fd5b6000819050919050565b613d5a81613d47565b8114613d6557600080fd5b50565b600081359050613d7781613d51565b92915050565b600080600060608486031215613d9657613d95613d42565b5b6000613da486828701613d68565b9350506020613db586828701613d68565b9250506040613dc686828701613d68565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613dfb82613dd0565b9050919050565b613e0b81613df0565b8114613e1657600080fd5b50565b600081359050613e2881613e02565b92915050565b60008060408385031215613e4557613e44613d42565b5b6000613e5385828601613e19565b9250506020613e6485828601613d68565b9150509250929050565b60008115159050919050565b613e8381613e6e565b82525050565b6000602082019050613e9e6000830184613e7a565b92915050565b6000613eaf82613dd0565b9050919050565b613ebf81613ea4565b82525050565b6000602082019050613eda6000830184613eb6565b92915050565b6000819050919050565b6000613f05613f00613efb84613dd0565b613ee0565b613dd0565b9050919050565b6000613f1782613eea565b9050919050565b6000613f2982613f0c565b9050919050565b613f3981613f1e565b82525050565b6000602082019050613f546000830184613f30565b92915050565b613f6381613d47565b82525050565b6000602082019050613f7e6000830184613f5a565b92915050565b613f8d81613e6e565b8114613f9857600080fd5b50565b600081359050613faa81613f84565b92915050565b60008060408385031215613fc757613fc6613d42565b5b6000613fd585828601613e19565b9250506020613fe685828601613f9b565b9150509250929050565b60008060006060848603121561400957614008613d42565b5b600061401786828701613e19565b935050602061402886828701613e19565b925050604061403986828701613d68565b9150509250925092565b60006020828403121561405957614058613d42565b5b600061406784828501613f9b565b91505092915050565b61407981613df0565b82525050565b60006020820190506140946000830184614070565b92915050565b6000602082840312156140b0576140af613d42565b5b60006140be84828501613e19565b91505092915050565b600060ff82169050919050565b6140dd816140c7565b82525050565b60006020820190506140f860008301846140d4565b92915050565b60006020828403121561411457614113613d42565b5b600061412284828501613d68565b91505092915050565b6000806040838503121561414257614141613d42565b5b600061415085828601613e19565b925050602061416185828601613e19565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806141b257607f821691505b6020821081036141c5576141c461416b565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614201602083613c9b565b915061420c826141cb565b602082019050919050565b60006020820190508181036000830152614230816141f4565b9050919050565b7f546f6f206d7563682076616c7565210000000000000000000000000000000000600082015250565b600061426d600f83613c9b565b915061427882614237565b602082019050919050565b6000602082019050818103600083015261429c81614260565b9050919050565b7f4974206973207a65726f20616464726573732100000000000000000000000000600082015250565b60006142d9601383613c9b565b91506142e4826142a3565b602082019050919050565b60006020820190508181036000830152614308816142cc565b9050919050565b60008151905061431e81613d51565b92915050565b60006020828403121561433a57614339613d42565b5b60006143488482850161430f565b91505092915050565b60006040820190506143666000830185614070565b6143736020830184613f5a565b9392505050565b60008151905061438981613f84565b92915050565b6000602082840312156143a5576143a4613d42565b5b60006143b38482850161437a565b91505092915050565b7f56616c756520616c726561647920736574210000000000000000000000000000600082015250565b60006143f2601283613c9b565b91506143fd826143bc565b602082019050919050565b60006020820190508181036000830152614421816143e5565b9050919050565b7f4d617820545820616d6f756e742073686f756c64206265206174206c6561737460008201527f20302e303525206f6620746f74616c20737570706c7900000000000000000000602082015250565b6000614484603683613c9b565b915061448f82614428565b604082019050919050565b600060208201905081810360008301526144b381614477565b9050919050565b7f5468652076616c756520697320746f6f20736d616c6c00000000000000000000600082015250565b60006144f0601683613c9b565b91506144fb826144ba565b602082019050919050565b6000602082019050818103600083015261451f816144e3565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614582602683613c9b565b915061458d82614526565b604082019050919050565b600060208201905081810360008301526145b181614575565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006145f282613d47565b91506145fd83613d47565b9250828201905080821115614615576146146145b8565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614651601b83613c9b565b915061465c8261461b565b602082019050919050565b6000602082019050818103600083015261468081614644565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006146e3602483613c9b565b91506146ee82614687565b604082019050919050565b60006020820190508181036000830152614712816146d6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614775602283613c9b565b915061478082614719565b604082019050919050565b600060208201905081810360008301526147a481614768565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614807602583613c9b565b9150614812826147ab565b604082019050919050565b60006020820190508181036000830152614836816147fa565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614899602383613c9b565b91506148a48261483d565b604082019050919050565b600060208201905081810360008301526148c88161488c565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061492b602883613c9b565b9150614936826148cf565b604082019050919050565b6000602082019050818103600083015261495a8161491e565b9050919050565b600061496c82613d47565b915061497783613d47565b925082820390508181111561498f5761498e6145b8565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149cf82613d47565b91506149da83613d47565b9250826149ea576149e9614995565b5b828204905092915050565b6000614a0082613d47565b9150614a0b83613d47565b9250828202614a1981613d47565b91508282048414831517614a3057614a2f6145b8565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a93602183613c9b565b9150614a9e82614a37565b604082019050919050565b60006020820190508181036000830152614ac281614a86565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614b3681613e02565b92915050565b600060208284031215614b5257614b51613d42565b5b6000614b6084828501614b27565b91505092915050565b6000819050919050565b6000614b8e614b89614b8484614b69565b613ee0565b613d47565b9050919050565b614b9e81614b73565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614bd981613df0565b82525050565b6000614beb8383614bd0565b60208301905092915050565b6000602082019050919050565b6000614c0f82614ba4565b614c198185614baf565b9350614c2483614bc0565b8060005b83811015614c55578151614c3c8882614bdf565b9750614c4783614bf7565b925050600181019050614c28565b5085935050505092915050565b600060a082019050614c776000830188613f5a565b614c846020830187614b95565b8181036040830152614c968186614c04565b9050614ca56060830185614070565b614cb26080830184613f5a565b9695505050505050565b6000604082019050614cd16000830185613f5a565b8181036020830152614ce38184614c04565b90509392505050565b600060c082019050614d016000830189614070565b614d0e6020830188613f5a565b614d1b6040830187614b95565b614d286060830186614b95565b614d356080830185614070565b614d4260a0830184613f5a565b979650505050505050565b600080600060608486031215614d6657614d65613d42565b5b6000614d748682870161430f565b9350506020614d858682870161430f565b9250506040614d968682870161430f565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203edd42e523d2d07b5a40fe2b5dadae7b32677cb3af84b5905b12d96ff01051e264736f6c63430008130033

Deployed Bytecode Sourcemap

11967:15054:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15665:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18349:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16959:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12321:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13699:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15942:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17892:449;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19688:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21588:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19567:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12438:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21050:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20376:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15851:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16328:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20030:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12830:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13814:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20162:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26858:160;;;;;;;;;;;;;:::i;:::-;;12659:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13174:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13215;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16050:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13486:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13548:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13333:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17473:129;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13011:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12775:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3506:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3731:145;;;;;;;;;;;;;:::i;:::-;;15756:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16831:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13375:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16554:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20834:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13256:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21413:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18801:461;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12968:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20580:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12926:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13747:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13087:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12716:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13132:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12194:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13861:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12884:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16177:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19274:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17749:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13294:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19831:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3884:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17610:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13913:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15665:83;15702:13;15735:5;15728:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15665:83;:::o;18349:440::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18537:4:::1;18481:52;18522:10;18481:36;18501:15;18481;:19;;:36;;;;:::i;:::-;:40;;:52;;;;:::i;:::-;:60;;18473:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;18592:15;18572:17;:35;;;;18638:15;18618:17;:35;;;;18679:10;18664:12;:25;;;;18723:58;18768:12;;18723:40;18745:17;;18723;;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;18702:18;:79;;;;18349:440:::0;;;:::o;16959:161::-;17034:4;17051:39;17060:12;:10;:12::i;:::-;17074:7;17083:6;17051:8;:39::i;:::-;17108:4;17101:11;;16959:161;;;;:::o;12321:94::-;;;;;;;;;;;;;:::o;13699:41::-;;;;;;;;;;;;;:::o;15942:100::-;15995:7;16022:12;;16015:19;;15942:100;:::o;17892:449::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18079:4:::1;18023:52;18064:10;18023:36;18043:15;18023;:19;;:36;;;;:::i;:::-;:40;;:52;;;;:::i;:::-;:60;;18015:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;18150:15;18131:16;:34;;;;18195:15;18176:16;:34;;;;18235:10;18221:11;:24;;;;18278:55;18321:11;;18278:38;18299:16;;18278;;:20;;:38;;;;:::i;:::-;:42;;:55;;;;:::i;:::-;18258:17;:75;;;;17892:449:::0;;;:::o;19688:135::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19809:6:::1;19779:19;:27;19799:6;19779:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;19688:135:::0;;:::o;21588:313::-;21686:4;21703:36;21713:6;21721:9;21732:6;21703:9;:36::i;:::-;;21750:121;21759:6;21767:12;:10;:12::i;:::-;21781:89;21819:6;21781:89;;;;;;;;;;;;;;;;;:11;:19;21793:6;21781:19;;;;;;;;;;;;;;;:33;21801:12;:10;:12::i;:::-;21781:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;21750:8;:121::i;:::-;21889:4;21882:11;;21588:313;;;;;:::o;19567:113::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19664:8:::1;19645:16;;:27;;;;;;;;;;;;;;;;;;19567:113:::0;:::o;12438:81::-;;;:::o;21050:128::-;21103:7;21130:40;21147:22;21157:11;21147:9;:22::i;:::-;21130:12;;:16;;:40;;;;:::i;:::-;21123:47;;21050:128;:::o;20376:196::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20488:1:::1;20466:24;;:10;:24;;::::0;20458:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20553:10;20525:17;;:39;;;;;;;;;;;;;;;;;;20376:196:::0;:::o;15851:83::-;15892:5;15917:9;;;;;;;;;;;15910:16;;15851:83;:::o;16328:218::-;16416:4;16433:83;16442:12;:10;:12::i;:::-;16456:7;16465:50;16504:10;16465:11;:25;16477:12;:10;:12::i;:::-;16465:25;;;;;;;;;;;;;;;:34;16491:7;16465:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;16433:8;:83::i;:::-;16534:4;16527:11;;16328:218;;;;:::o;20030:124::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20138:8:::1;20112:23;:34;;;;20030:124:::0;:::o;12830:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;13814:40::-;;;;;;;;;;;;;:::o;20162:206::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20279:1:::1;20257:24;;:10;:24;;::::0;20249:56:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20349:10;20316:22;;:44;;;;;;;;;;;;;;;;;;20162:206:::0;:::o;26858:160::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26905:12:::1;26935:4;26905:36;;26952:5;:14;;;26967:10;26979:5;:15;;;27003:4;26979:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26952:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26894:124;26858:160::o:0;12659:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;13174:34::-;;;;:::o;13215:::-;;;;:::o;16050:119::-;16116:7;16143:9;:18;16153:7;16143:18;;;;;;;;;;;;;;;;16136:25;;16050:119;;;:::o;13486:55::-;;;;:::o;13548:53::-;;;;:::o;13333:33::-;;;;:::o;17473:129::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17586:8:::1;17562:12;:21;17575:7;17562:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;17473:129:::0;;:::o;13011:38::-;;;;:::o;12775:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;3506:79::-;3544:7;3571:6;;;;;;;;;;;3564:13;;3506:79;:::o;3731:145::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3835:1:::1;3798:40;;3819:6;::::0;::::1;;;;;;;;3798:40;;;;;;;;;;;;3866:1;3849:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3731:145::o:0;15756:87::-;15795:13;15828:7;15821:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15756:87;:::o;16831:120::-;16893:7;16920:23;;16913:30;;16831:120;:::o;13375:39::-;;;;:::o;16554:269::-;16647:4;16664:129;16673:12;:10;:12::i;:::-;16687:7;16696:96;16735:15;16696:96;;;;;;;;;;;;;;;;;:11;:25;16708:12;:10;:12::i;:::-;16696:25;;;;;;;;;;;;;;;:34;16722:7;16696:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;16664:8;:129::i;:::-;16811:4;16804:11;;16554:269;;;;:::o;20834:204::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20952:8:::1;20923:37;;:25;;;;;;;;;;;:37;;::::0;20915:68:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;21022:8;20994:25;;:36;;;;;;;;;;;;;;;;;;20834:204:::0;:::o;13256:29::-;;;;:::o;21413:167::-;21491:4;21508:42;21518:12;:10;:12::i;:::-;21532:9;21543:6;21508:9;:42::i;:::-;;21568:4;21561:11;;21413:167;;;;:::o;18801:461::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19012:2:::1;18950:58;18995:12;18950:40;18972:17;18950;:21;;:40;;;;:::i;:::-;:44;;:58;;;;:::i;:::-;:64;;18942:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;19063:17;19045:15;:35;;;;19109:17;19091:15;:35;;;;19150:12;19137:10;:25;;;;19202:52;19243:10;;19202:36;19222:15;;19202;;:19;;:36;;;;:::i;:::-;:40;;:52;;;;:::i;:::-;19175:24;:79;;;;18801:461:::0;;;:::o;12968:30::-;;;;:::o;20580:246::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20690:8:::1;20665:33;;:21;;;;;;;;;;;:33;;::::0;20657:64:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20756:8;20732:21;;:32;;;;;;;;;;;;;;;;;;20780:38;20809:8;20780:38;;;;;;:::i;:::-;;;;;;;;20580:246:::0;:::o;12926:35::-;;;;:::o;13747:26::-;;;;;;;;;;;;;:::o;13087:38::-;;;;:::o;12716:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;13132:33::-;;;;:::o;12194:99::-;;;;;;;;;;;;;:::o;13861:45::-;;;;;;;;;;;;;:::o;12884:35::-;;;;:::o;16177:143::-;16258:7;16285:11;:18;16297:5;16285:18;;;;;;;;;;;;;;;:27;16304:7;16285:27;;;;;;;;;;;;;;;;16278:34;;16177:143;;;;:::o;19274:285::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19388:21:::1;19405:3;19388:12;;:16;;:21;;;;:::i;:::-;19373:11;:36;;19351:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;19540:11;19525:12;:26;;;;19274:285:::0;:::o;17749:135::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17868:8:::1;17839:17;:26;17857:7;17839:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;17749:135:::0;;:::o;13294:32::-;;;;:::o;19831:191::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19923:21:::1;19940:3;19923:12;;:16;;:21;;;;:::i;:::-;19911:8;:33;;19903:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20006:8;19992:10;:22;;;;19831:191:::0;:::o;3884:244::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3993:1:::1;3973:22;;:8;:22;;::::0;3965:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;4083:8;4054:38;;4075:6;::::0;::::1;;;;;;;;4054:38;;;;;;;;;;;;4112:8;4103:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;3884:244:::0;:::o;17610:127::-;3650:12;:10;:12::i;:::-;3640:22;;:6;;;;;;;;;;:22;;;3632:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17723:6:::1;17697:15;:23;17713:6;17697:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;17610:127:::0;;:::o;13913:35::-;;;;;;;;;;;;;:::o;94:115::-;147:15;190:10;175:26;;94:115;:::o;1158:181::-;1216:7;1236:9;1252:1;1248;:5;;;;:::i;:::-;1236:17;;1277:1;1272;:6;;1264:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1330:1;1323:8;;;1158:181;;;;:::o;17128:337::-;17238:1;17221:19;;:5;:19;;;17213:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17319:1;17300:21;;:7;:21;;;17292:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17403:6;17373:11;:18;17385:5;17373:18;;;;;;;;;;;;;;;:27;17392:7;17373:27;;;;;;;;;;;;;;;:36;;;;17441:7;17425:32;;17434:5;17425:32;;;17450:6;17425:32;;;;;;:::i;:::-;;;;;;;;17128:337;;;:::o;21909:1711::-;21996:4;22041:1;22023:20;;:6;:20;;;22015:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;22125:1;22104:23;;:9;:23;;;22096:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;22183:16;;;;;;;;;;;22180:1433;;;22233:41;22248:6;22256:9;22267:6;22233:14;:41::i;:::-;22226:48;;;;22180:1433;22330:15;:23;22346:6;22330:23;;;;;;;;;;;;;;;;;;;;;;;;;22329:24;:55;;;;;22358:15;:26;22374:9;22358:26;;;;;;;;;;;;;;;;;;;;;;;;;22357:27;22329:55;22326:170;;;22423:12;;22413:6;:22;;22405:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;22326:170;22524:28;22555:24;22573:4;22555:9;:24::i;:::-;22524:55;;22594:28;22649:23;;22625:20;:47;;22594:78;;22705:23;:44;;;;;22733:16;;;;;;;;;;;22732:17;22705:44;:69;;;;;22754:12;:20;22767:6;22754:20;;;;;;;;;;;;;;;;;;;;;;;;;22753:21;22705:69;:94;;;;;22778:21;;;;;;;;;;;22705:94;22701:309;;;22837:25;;;;;;;;;;;22834:97;;;22908:23;;22885:46;;22834:97;22954:36;22969:20;22954:14;:36::i;:::-;22701:309;23046:53;23068:6;23046:53;;;;;;;;;;;;;;;;;:9;:17;23056:6;23046:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23026:9;:17;23036:6;23026:17;;;;;;;;;;;;;;;:73;;;;23116:19;23139:17;:25;23157:6;23139:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;23168:17;:28;23186:9;23168:28;;;;;;;;;;;;;;;;;;;;;;;;;23139:57;23138:148;;23252:34;23260:6;23268:9;23279:6;23252:7;:34::i;:::-;23138:148;;;23243:6;23138:148;23116:170;;23306:16;;;;;;;;;;;:51;;;;;23327:19;:30;23347:9;23327:30;;;;;;;;;;;;;;;;;;;;;;;;;23326:31;23306:51;23303:133;;;23425:10;;23384:37;23409:11;23384:20;23394:9;23384;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;23376:60;;;;;;23303:133;23476:37;23501:11;23476:9;:20;23486:9;23476:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;23453:9;:20;23463:9;23453:20;;;;;;;;;;;;;;;:60;;;;23552:9;23535:40;;23544:6;23535:40;;;23563:11;23535:40;;;;;;:::i;:::-;;;;;;;;23597:4;23590:11;;;;;21909:1711;;;;;;:::o;1491:192::-;1577:7;1610:1;1605;:6;;1613:12;1597:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1637:9;1653:1;1649;:5;;;;:::i;:::-;1637:17;;1674:1;1667:8;;;1491:192;;;;;:::o;1347:136::-;1405:7;1432:43;1436:1;1439;1432:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1425:50;;1347:136;;;;:::o;1949:132::-;2007:7;2034:39;2038:1;2041;2034:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2027:46;;1949:132;;;;:::o;23628:330::-;23721:4;23758:53;23780:6;23758:53;;;;;;;;;;;;;;;;;:9;:17;23768:6;23758:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;23738:9;:17;23748:6;23738:17;;;;;;;;;;;;;;;:73;;;;23845:32;23870:6;23845:9;:20;23855:9;23845:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;23822:9;:20;23832:9;23822:20;;;;;;;;;;;;;;;:55;;;;23910:9;23893:35;;23902:6;23893:35;;;23921:6;23893:35;;;;;;:::i;:::-;;;;;;;;23946:4;23939:11;;23628:330;;;;;:::o;23966:1048::-;14390:4;14371:16;;:23;;;;;;;;;;;;;;;;;;24048:19:::1;24070:65;24133:1;24070:58;24103:24;;24070:28;24082:15;;24070:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;24048:87;;24146:21;24170:24;24182:11;24170:7;:11;;:24;;;;:::i;:::-;24146:48;;24207:31;24224:13;24207:16;:31::i;:::-;24249:22;24274:21;24249:46;;24308:19;24330:52;24359:22;24379:1;24359:15;;:19;;:22;;;;:::i;:::-;24330:24;;:28;;:52;;;;:::i;:::-;24308:74;;24403:26;24432:59;24489:1;24432:52;24472:11;24432:35;24451:15;;24432:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;24403:88;;24502:21;24526:47;24561:11;24526:30;24545:10;;24526:14;:18;;:30;;;;:::i;:::-;:34;;:47;;;;:::i;:::-;24502:71;;24584:26;24613:57;24656:13;24613:38;24632:18;24613:14;:18;;:38;;;;:::i;:::-;:42;;:57;;;;:::i;:::-;24584:86;;24707:1;24686:18;:22;24683:104;;;24723:64;24744:22;;;;;;;;;;;24768:18;24723:20;:64::i;:::-;24683:104;24819:1;24803:13;:17;24800:89;;;24835:54;24856:17;;;;;;;;;;;24875:13;24835:20;:54::i;:::-;24800:89;24926:1;24905:18;:22;:41;;;;;24945:1;24931:11;:15;24905:41;24902:104;;;24961:45;24974:11;24987:18;24961:12;:45::i;:::-;24902:104;24027:987;;;;;;;14436:5:::0;14417:16;;:24;;;;;;;;;;;;;;;;;;23966:1048;:::o;26221:626::-;26307:7;26337:17;26357:1;26337:21;;26382:12;:20;26395:6;26382:20;;;;;;;;;;;;;;;;;;;;;;;;;26379:227;;;26431:40;26465:5;26431:29;26442:17;;26431:6;:10;;:29;;;;:::i;:::-;:33;;:40;;;;:::i;:::-;26419:52;;26379:227;;;26501:12;:23;26514:9;26501:23;;;;;;;;;;;;;;;;;;;;;;;;;26498:108;;;26553:41;26588:5;26553:30;26564:18;;26553:6;:10;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;26541:53;;26498:108;26379:227;26641:1;26629:9;:13;26626:173;;;26686:39;26715:9;26686;:24;26704:4;26686:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;26659:9;:24;26677:4;26659:24;;;;;;;;;;;;;;;:66;;;;26770:4;26745:42;;26754:6;26745:42;;;26777:9;26745:42;;;;;;:::i;:::-;;;;;;;;26626:173;26818:21;26829:9;26818:6;:10;;:21;;;;:::i;:::-;26811:28;;;26221:626;;;;;:::o;2089:278::-;2175:7;2207:1;2203;:5;2210:12;2195:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2234:9;2250:1;2246;:5;;;;:::i;:::-;2234:17;;2358:1;2351:8;;;2089:278;;;;;:::o;1691:250::-;1749:7;1778:1;1773;:6;1769:47;;1803:1;1796:8;;;;1769:47;1828:9;1844:1;1840;:5;;;;:::i;:::-;1828:17;;1873:1;1868;1864;:5;;;;:::i;:::-;:10;1856:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;1932:1;1925:8;;;1691:250;;;;;:::o;25026:666::-;25152:21;25190:1;25176:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25152:40;;25221:4;25203;25208:1;25203:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;25247:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25237:4;25242:1;25237:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;25282:62;25299:4;25314:15;;;;;;;;;;;25332:11;25282:8;:62::i;:::-;25383:15;;;;;;;;;;;:66;;;25464:11;25490:1;25534:4;25561;25597:15;25383:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25649:35;25666:11;25679:4;25649:35;;;;;;;:::i;:::-;;;;;;;;25081:611;25026:666;:::o;21186:126::-;21278:9;:18;;:26;21297:6;21278:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21186:126;;:::o;25700:513::-;25848:62;25865:4;25880:15;;;;;;;;;;;25898:11;25848:8;:62::i;:::-;25953:15;;;;;;;;;;;:31;;;25992:9;26025:4;26045:11;26071:1;26114;26157:7;:5;:7::i;:::-;26179:15;25953:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;25700:513;;:::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:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:104::-;4116:7;4145:24;4163:5;4145:24;:::i;:::-;4134:35;;4071:104;;;:::o;4181:142::-;4284:32;4310:5;4284:32;:::i;:::-;4279:3;4272:45;4181:142;;:::o;4329:254::-;4438:4;4476:2;4465:9;4461:18;4453:26;;4489:87;4573:1;4562:9;4558:17;4549:6;4489:87;:::i;:::-;4329:254;;;;:::o;4589:60::-;4617:3;4638:5;4631:12;;4589:60;;;:::o;4655:142::-;4705:9;4738:53;4756:34;4765:24;4783:5;4765:24;:::i;:::-;4756:34;:::i;:::-;4738:53;:::i;:::-;4725:66;;4655:142;;;:::o;4803:126::-;4853:9;4886:37;4917:5;4886:37;:::i;:::-;4873:50;;4803:126;;;:::o;4935:153::-;5012:9;5045:37;5076:5;5045:37;:::i;:::-;5032:50;;4935:153;;;:::o;5094:185::-;5208:64;5266:5;5208:64;:::i;:::-;5203:3;5196:77;5094:185;;:::o;5285:276::-;5405:4;5443:2;5432:9;5428:18;5420:26;;5456:98;5551:1;5540:9;5536:17;5527:6;5456:98;:::i;:::-;5285:276;;;;:::o;5567:118::-;5654:24;5672:5;5654:24;:::i;:::-;5649:3;5642:37;5567:118;;:::o;5691:222::-;5784:4;5822:2;5811:9;5807:18;5799:26;;5835:71;5903:1;5892:9;5888:17;5879:6;5835:71;:::i;:::-;5691:222;;;;:::o;5919:116::-;5989:21;6004:5;5989:21;:::i;:::-;5982:5;5979:32;5969:60;;6025:1;6022;6015:12;5969:60;5919:116;:::o;6041:133::-;6084:5;6122:6;6109:20;6100:29;;6138:30;6162:5;6138:30;:::i;:::-;6041:133;;;;:::o;6180:468::-;6245:6;6253;6302:2;6290:9;6281:7;6277:23;6273:32;6270:119;;;6308:79;;:::i;:::-;6270:119;6428:1;6453:53;6498:7;6489:6;6478:9;6474:22;6453:53;:::i;:::-;6443:63;;6399:117;6555:2;6581:50;6623:7;6614:6;6603:9;6599:22;6581:50;:::i;:::-;6571:60;;6526:115;6180:468;;;;;:::o;6654:619::-;6731:6;6739;6747;6796:2;6784:9;6775:7;6771:23;6767:32;6764:119;;;6802:79;;:::i;:::-;6764:119;6922:1;6947:53;6992:7;6983:6;6972:9;6968:22;6947:53;:::i;:::-;6937:63;;6893:117;7049:2;7075:53;7120:7;7111:6;7100:9;7096:22;7075:53;:::i;:::-;7065:63;;7020:118;7177:2;7203:53;7248:7;7239:6;7228:9;7224:22;7203:53;:::i;:::-;7193:63;;7148:118;6654:619;;;;;:::o;7279:323::-;7335:6;7384:2;7372:9;7363:7;7359:23;7355:32;7352:119;;;7390:79;;:::i;:::-;7352:119;7510:1;7535:50;7577:7;7568:6;7557:9;7553:22;7535:50;:::i;:::-;7525:60;;7481:114;7279:323;;;;:::o;7608:118::-;7695:24;7713:5;7695:24;:::i;:::-;7690:3;7683:37;7608:118;;:::o;7732:222::-;7825:4;7863:2;7852:9;7848:18;7840:26;;7876:71;7944:1;7933:9;7929:17;7920:6;7876:71;:::i;:::-;7732:222;;;;:::o;7960:329::-;8019:6;8068:2;8056:9;8047:7;8043:23;8039:32;8036:119;;;8074:79;;:::i;:::-;8036:119;8194:1;8219:53;8264:7;8255:6;8244:9;8240:22;8219:53;:::i;:::-;8209:63;;8165:117;7960:329;;;;:::o;8295:86::-;8330:7;8370:4;8363:5;8359:16;8348:27;;8295:86;;;:::o;8387:112::-;8470:22;8486:5;8470:22;:::i;:::-;8465:3;8458:35;8387:112;;:::o;8505:214::-;8594:4;8632:2;8621:9;8617:18;8609:26;;8645:67;8709:1;8698:9;8694:17;8685:6;8645:67;:::i;:::-;8505:214;;;;:::o;8725:329::-;8784:6;8833:2;8821:9;8812:7;8808:23;8804:32;8801:119;;;8839:79;;:::i;:::-;8801:119;8959:1;8984:53;9029:7;9020:6;9009:9;9005:22;8984:53;:::i;:::-;8974:63;;8930:117;8725:329;;;;:::o;9060:474::-;9128:6;9136;9185:2;9173:9;9164:7;9160:23;9156:32;9153:119;;;9191:79;;:::i;:::-;9153:119;9311:1;9336:53;9381:7;9372:6;9361:9;9357:22;9336:53;:::i;:::-;9326:63;;9282:117;9438:2;9464:53;9509:7;9500:6;9489:9;9485:22;9464:53;:::i;:::-;9454:63;;9409:118;9060:474;;;;;:::o;9540:180::-;9588:77;9585:1;9578:88;9685:4;9682:1;9675:15;9709:4;9706:1;9699:15;9726:320;9770:6;9807:1;9801:4;9797:12;9787:22;;9854:1;9848:4;9844:12;9875:18;9865:81;;9931:4;9923:6;9919:17;9909:27;;9865:81;9993:2;9985:6;9982:14;9962:18;9959:38;9956:84;;10012:18;;:::i;:::-;9956:84;9777:269;9726:320;;;:::o;10052:182::-;10192:34;10188:1;10180:6;10176:14;10169:58;10052:182;:::o;10240:366::-;10382:3;10403:67;10467:2;10462:3;10403:67;:::i;:::-;10396:74;;10479:93;10568:3;10479:93;:::i;:::-;10597:2;10592:3;10588:12;10581:19;;10240:366;;;:::o;10612:419::-;10778:4;10816:2;10805:9;10801:18;10793:26;;10865:9;10859:4;10855:20;10851:1;10840:9;10836:17;10829:47;10893:131;11019:4;10893:131;:::i;:::-;10885:139;;10612:419;;;:::o;11037:165::-;11177:17;11173:1;11165:6;11161:14;11154:41;11037:165;:::o;11208:366::-;11350:3;11371:67;11435:2;11430:3;11371:67;:::i;:::-;11364:74;;11447:93;11536:3;11447:93;:::i;:::-;11565:2;11560:3;11556:12;11549:19;;11208:366;;;:::o;11580:419::-;11746:4;11784:2;11773:9;11769:18;11761:26;;11833:9;11827:4;11823:20;11819:1;11808:9;11804:17;11797:47;11861:131;11987:4;11861:131;:::i;:::-;11853:139;;11580:419;;;:::o;12005:169::-;12145:21;12141:1;12133:6;12129:14;12122:45;12005:169;:::o;12180:366::-;12322:3;12343:67;12407:2;12402:3;12343:67;:::i;:::-;12336:74;;12419:93;12508:3;12419:93;:::i;:::-;12537:2;12532:3;12528:12;12521:19;;12180:366;;;:::o;12552:419::-;12718:4;12756:2;12745:9;12741:18;12733:26;;12805:9;12799:4;12795:20;12791:1;12780:9;12776:17;12769:47;12833:131;12959:4;12833:131;:::i;:::-;12825:139;;12552:419;;;:::o;12977:143::-;13034:5;13065:6;13059:13;13050:22;;13081:33;13108:5;13081:33;:::i;:::-;12977:143;;;;:::o;13126:351::-;13196:6;13245:2;13233:9;13224:7;13220:23;13216:32;13213:119;;;13251:79;;:::i;:::-;13213:119;13371:1;13396:64;13452:7;13443:6;13432:9;13428:22;13396:64;:::i;:::-;13386:74;;13342:128;13126:351;;;;:::o;13483:332::-;13604:4;13642:2;13631:9;13627:18;13619:26;;13655:71;13723:1;13712:9;13708:17;13699:6;13655:71;:::i;:::-;13736:72;13804:2;13793:9;13789:18;13780:6;13736:72;:::i;:::-;13483:332;;;;;:::o;13821:137::-;13875:5;13906:6;13900:13;13891:22;;13922:30;13946:5;13922:30;:::i;:::-;13821:137;;;;:::o;13964:345::-;14031:6;14080:2;14068:9;14059:7;14055:23;14051:32;14048:119;;;14086:79;;:::i;:::-;14048:119;14206:1;14231:61;14284:7;14275:6;14264:9;14260:22;14231:61;:::i;:::-;14221:71;;14177:125;13964:345;;;;:::o;14315:168::-;14455:20;14451:1;14443:6;14439:14;14432:44;14315:168;:::o;14489:366::-;14631:3;14652:67;14716:2;14711:3;14652:67;:::i;:::-;14645:74;;14728:93;14817:3;14728:93;:::i;:::-;14846:2;14841:3;14837:12;14830:19;;14489:366;;;:::o;14861:419::-;15027:4;15065:2;15054:9;15050:18;15042:26;;15114:9;15108:4;15104:20;15100:1;15089:9;15085:17;15078:47;15142:131;15268:4;15142:131;:::i;:::-;15134:139;;14861:419;;;:::o;15286:241::-;15426:34;15422:1;15414:6;15410:14;15403:58;15495:24;15490:2;15482:6;15478:15;15471:49;15286:241;:::o;15533:366::-;15675:3;15696:67;15760:2;15755:3;15696:67;:::i;:::-;15689:74;;15772:93;15861:3;15772:93;:::i;:::-;15890:2;15885:3;15881:12;15874:19;;15533:366;;;:::o;15905:419::-;16071:4;16109:2;16098:9;16094:18;16086:26;;16158:9;16152:4;16148:20;16144:1;16133:9;16129:17;16122:47;16186:131;16312:4;16186:131;:::i;:::-;16178:139;;15905:419;;;:::o;16330:172::-;16470:24;16466:1;16458:6;16454:14;16447:48;16330:172;:::o;16508:366::-;16650:3;16671:67;16735:2;16730:3;16671:67;:::i;:::-;16664:74;;16747:93;16836:3;16747:93;:::i;:::-;16865:2;16860:3;16856:12;16849:19;;16508:366;;;:::o;16880:419::-;17046:4;17084:2;17073:9;17069:18;17061:26;;17133:9;17127:4;17123:20;17119:1;17108:9;17104:17;17097:47;17161:131;17287:4;17161:131;:::i;:::-;17153:139;;16880:419;;;:::o;17305:225::-;17445:34;17441:1;17433:6;17429:14;17422:58;17514:8;17509:2;17501:6;17497:15;17490:33;17305:225;:::o;17536:366::-;17678:3;17699:67;17763:2;17758:3;17699:67;:::i;:::-;17692:74;;17775:93;17864:3;17775:93;:::i;:::-;17893:2;17888:3;17884:12;17877:19;;17536:366;;;:::o;17908:419::-;18074:4;18112:2;18101:9;18097:18;18089:26;;18161:9;18155:4;18151:20;18147:1;18136:9;18132:17;18125:47;18189:131;18315:4;18189:131;:::i;:::-;18181:139;;17908:419;;;:::o;18333:180::-;18381:77;18378:1;18371:88;18478:4;18475:1;18468:15;18502:4;18499:1;18492:15;18519:191;18559:3;18578:20;18596:1;18578:20;:::i;:::-;18573:25;;18612:20;18630:1;18612:20;:::i;:::-;18607:25;;18655:1;18652;18648:9;18641:16;;18676:3;18673:1;18670:10;18667:36;;;18683:18;;:::i;:::-;18667:36;18519:191;;;;:::o;18716:177::-;18856:29;18852:1;18844:6;18840:14;18833:53;18716:177;:::o;18899:366::-;19041:3;19062:67;19126:2;19121:3;19062:67;:::i;:::-;19055:74;;19138:93;19227:3;19138:93;:::i;:::-;19256:2;19251:3;19247:12;19240:19;;18899:366;;;:::o;19271:419::-;19437:4;19475:2;19464:9;19460:18;19452:26;;19524:9;19518:4;19514:20;19510:1;19499:9;19495:17;19488:47;19552:131;19678:4;19552:131;:::i;:::-;19544:139;;19271:419;;;:::o;19696:223::-;19836:34;19832:1;19824:6;19820:14;19813:58;19905:6;19900:2;19892:6;19888:15;19881:31;19696:223;:::o;19925:366::-;20067:3;20088:67;20152:2;20147:3;20088:67;:::i;:::-;20081:74;;20164:93;20253:3;20164:93;:::i;:::-;20282:2;20277:3;20273:12;20266:19;;19925:366;;;:::o;20297:419::-;20463:4;20501:2;20490:9;20486:18;20478:26;;20550:9;20544:4;20540:20;20536:1;20525:9;20521:17;20514:47;20578:131;20704:4;20578:131;:::i;:::-;20570:139;;20297:419;;;:::o;20722:221::-;20862:34;20858:1;20850:6;20846:14;20839:58;20931:4;20926:2;20918:6;20914:15;20907:29;20722:221;:::o;20949:366::-;21091:3;21112:67;21176:2;21171:3;21112:67;:::i;:::-;21105:74;;21188:93;21277:3;21188:93;:::i;:::-;21306:2;21301:3;21297:12;21290:19;;20949:366;;;:::o;21321:419::-;21487:4;21525:2;21514:9;21510:18;21502:26;;21574:9;21568:4;21564:20;21560:1;21549:9;21545:17;21538:47;21602:131;21728:4;21602:131;:::i;:::-;21594:139;;21321:419;;;:::o;21746:224::-;21886:34;21882:1;21874:6;21870:14;21863:58;21955:7;21950:2;21942:6;21938:15;21931:32;21746:224;:::o;21976:366::-;22118:3;22139:67;22203:2;22198:3;22139:67;:::i;:::-;22132:74;;22215:93;22304:3;22215:93;:::i;:::-;22333:2;22328:3;22324:12;22317:19;;21976:366;;;:::o;22348:419::-;22514:4;22552:2;22541:9;22537:18;22529:26;;22601:9;22595:4;22591:20;22587:1;22576:9;22572:17;22565:47;22629:131;22755:4;22629:131;:::i;:::-;22621:139;;22348:419;;;:::o;22773:222::-;22913:34;22909:1;22901:6;22897:14;22890:58;22982:5;22977:2;22969:6;22965:15;22958:30;22773:222;:::o;23001:366::-;23143:3;23164:67;23228:2;23223:3;23164:67;:::i;:::-;23157:74;;23240:93;23329:3;23240:93;:::i;:::-;23358:2;23353:3;23349:12;23342:19;;23001:366;;;:::o;23373:419::-;23539:4;23577:2;23566:9;23562:18;23554:26;;23626:9;23620:4;23616:20;23612:1;23601:9;23597:17;23590:47;23654:131;23780:4;23654:131;:::i;:::-;23646:139;;23373:419;;;:::o;23798:227::-;23938:34;23934:1;23926:6;23922:14;23915:58;24007:10;24002:2;23994:6;23990:15;23983:35;23798:227;:::o;24031:366::-;24173:3;24194:67;24258:2;24253:3;24194:67;:::i;:::-;24187:74;;24270:93;24359:3;24270:93;:::i;:::-;24388:2;24383:3;24379:12;24372:19;;24031:366;;;:::o;24403:419::-;24569:4;24607:2;24596:9;24592:18;24584:26;;24656:9;24650:4;24646:20;24642:1;24631:9;24627:17;24620:47;24684:131;24810:4;24684:131;:::i;:::-;24676:139;;24403:419;;;:::o;24828:194::-;24868:4;24888:20;24906:1;24888:20;:::i;:::-;24883:25;;24922:20;24940:1;24922:20;:::i;:::-;24917:25;;24966:1;24963;24959:9;24951:17;;24990:1;24984:4;24981:11;24978:37;;;24995:18;;:::i;:::-;24978:37;24828:194;;;;:::o;25028:180::-;25076:77;25073:1;25066:88;25173:4;25170:1;25163:15;25197:4;25194:1;25187:15;25214:185;25254:1;25271:20;25289:1;25271:20;:::i;:::-;25266:25;;25305:20;25323:1;25305:20;:::i;:::-;25300:25;;25344:1;25334:35;;25349:18;;:::i;:::-;25334:35;25391:1;25388;25384:9;25379:14;;25214:185;;;;:::o;25405:410::-;25445:7;25468:20;25486:1;25468:20;:::i;:::-;25463:25;;25502:20;25520:1;25502:20;:::i;:::-;25497:25;;25557:1;25554;25550:9;25579:30;25597:11;25579:30;:::i;:::-;25568:41;;25758:1;25749:7;25745:15;25742:1;25739:22;25719:1;25712:9;25692:83;25669:139;;25788:18;;:::i;:::-;25669:139;25453:362;25405:410;;;;:::o;25821:220::-;25961:34;25957:1;25949:6;25945:14;25938:58;26030:3;26025:2;26017:6;26013:15;26006:28;25821:220;:::o;26047:366::-;26189:3;26210:67;26274:2;26269:3;26210:67;:::i;:::-;26203:74;;26286:93;26375:3;26286:93;:::i;:::-;26404:2;26399:3;26395:12;26388:19;;26047:366;;;:::o;26419:419::-;26585:4;26623:2;26612:9;26608:18;26600:26;;26672:9;26666:4;26662:20;26658:1;26647:9;26643:17;26636:47;26700:131;26826:4;26700:131;:::i;:::-;26692:139;;26419:419;;;:::o;26844:180::-;26892:77;26889:1;26882:88;26989:4;26986:1;26979:15;27013:4;27010:1;27003:15;27030:180;27078:77;27075:1;27068:88;27175:4;27172:1;27165:15;27199:4;27196:1;27189:15;27216:143;27273:5;27304:6;27298:13;27289:22;;27320:33;27347:5;27320:33;:::i;:::-;27216:143;;;;:::o;27365:351::-;27435:6;27484:2;27472:9;27463:7;27459:23;27455:32;27452:119;;;27490:79;;:::i;:::-;27452:119;27610:1;27635:64;27691:7;27682:6;27671:9;27667:22;27635:64;:::i;:::-;27625:74;;27581:128;27365:351;;;;:::o;27722:85::-;27767:7;27796:5;27785:16;;27722:85;;;:::o;27813:158::-;27871:9;27904:61;27922:42;27931:32;27957:5;27931:32;:::i;:::-;27922:42;:::i;:::-;27904:61;:::i;:::-;27891:74;;27813:158;;;:::o;27977:147::-;28072:45;28111:5;28072:45;:::i;:::-;28067:3;28060:58;27977:147;;:::o;28130:114::-;28197:6;28231:5;28225:12;28215:22;;28130:114;;;:::o;28250:184::-;28349:11;28383:6;28378:3;28371:19;28423:4;28418:3;28414:14;28399:29;;28250:184;;;;:::o;28440:132::-;28507:4;28530:3;28522:11;;28560:4;28555:3;28551:14;28543:22;;28440:132;;;:::o;28578:108::-;28655:24;28673:5;28655:24;:::i;:::-;28650:3;28643:37;28578:108;;:::o;28692:179::-;28761:10;28782:46;28824:3;28816:6;28782:46;:::i;:::-;28860:4;28855:3;28851:14;28837:28;;28692:179;;;;:::o;28877:113::-;28947:4;28979;28974:3;28970:14;28962:22;;28877:113;;;:::o;29026:732::-;29145:3;29174:54;29222:5;29174:54;:::i;:::-;29244:86;29323:6;29318:3;29244:86;:::i;:::-;29237:93;;29354:56;29404:5;29354:56;:::i;:::-;29433:7;29464:1;29449:284;29474:6;29471:1;29468:13;29449:284;;;29550:6;29544:13;29577:63;29636:3;29621:13;29577:63;:::i;:::-;29570:70;;29663:60;29716:6;29663:60;:::i;:::-;29653:70;;29509:224;29496:1;29493;29489:9;29484:14;;29449:284;;;29453:14;29749:3;29742:10;;29150:608;;;29026:732;;;;:::o;29764:831::-;30027:4;30065:3;30054:9;30050:19;30042:27;;30079:71;30147:1;30136:9;30132:17;30123:6;30079:71;:::i;:::-;30160:80;30236:2;30225:9;30221:18;30212:6;30160:80;:::i;:::-;30287:9;30281:4;30277:20;30272:2;30261:9;30257:18;30250:48;30315:108;30418:4;30409:6;30315:108;:::i;:::-;30307:116;;30433:72;30501:2;30490:9;30486:18;30477:6;30433:72;:::i;:::-;30515:73;30583:3;30572:9;30568:19;30559:6;30515:73;:::i;:::-;29764:831;;;;;;;;:::o;30601:483::-;30772:4;30810:2;30799:9;30795:18;30787:26;;30823:71;30891:1;30880:9;30876:17;30867:6;30823:71;:::i;:::-;30941:9;30935:4;30931:20;30926:2;30915:9;30911:18;30904:48;30969:108;31072:4;31063:6;30969:108;:::i;:::-;30961:116;;30601:483;;;;;:::o;31090:807::-;31339:4;31377:3;31366:9;31362:19;31354:27;;31391:71;31459:1;31448:9;31444:17;31435:6;31391:71;:::i;:::-;31472:72;31540:2;31529:9;31525:18;31516:6;31472:72;:::i;:::-;31554:80;31630:2;31619:9;31615:18;31606:6;31554:80;:::i;:::-;31644;31720:2;31709:9;31705:18;31696:6;31644:80;:::i;:::-;31734:73;31802:3;31791:9;31787:19;31778:6;31734:73;:::i;:::-;31817;31885:3;31874:9;31870:19;31861:6;31817:73;:::i;:::-;31090:807;;;;;;;;;:::o;31903:663::-;31991:6;31999;32007;32056:2;32044:9;32035:7;32031:23;32027:32;32024:119;;;32062:79;;:::i;:::-;32024:119;32182:1;32207:64;32263:7;32254:6;32243:9;32239:22;32207:64;:::i;:::-;32197:74;;32153:128;32320:2;32346:64;32402:7;32393:6;32382:9;32378:22;32346:64;:::i;:::-;32336:74;;32291:129;32459:2;32485:64;32541:7;32532:6;32521:9;32517:22;32485:64;:::i;:::-;32475:74;;32430:129;31903:663;;;;;:::o

Swarm Source

ipfs://3edd42e523d2d07b5a40fe2b5dadae7b32677cb3af84b5905b12d96ff01051e2
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.