ETH Price: $3,894.52 (+0.26%)

Token

ERC-20: Bingo Ai ($BingoAi)
 

Overview

Max Total Supply

100,000,000 $BingoAi

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 3 Decimals)

Balance
318,233.327 $BingoAi

Value
$0.00
0x772f9781c61301d0a931652d654ae6260c188f76
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:
BingoAI

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-02-20
*/

pragma solidity 0.6.12;
// SPDX-License-Identifier: Unlicensed

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

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

    function _msgData() internal view virtual returns (bytes memory) {
        this;
        return msg.data;
    }
}

library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{ value: amount }("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
      return functionCall(target, data, "Address: low-level call failed");
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

contract Ownable is Context {
    address private _owner;
    address private _previousOwner;
    uint256 private _lockTime;

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

    constructor () internal {
        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 renounceOwnership() 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;
    }
}

// pragma solidity >=0.5.0;

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


// pragma solidity >=0.5.0;

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

// pragma solidity >=0.6.2;

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



// pragma solidity >=0.6.2;

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 BingoAI is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => bool) public _isBlacklisted;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private isWalletLimitExempt;
    mapping (address => bool) private isTxLimitExempt;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 100000000 * 10**3;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private _name = "Bingo Ai";
    string private _symbol = "$BingoAi";
    uint8 private _decimals = 3;
    
    uint256 public _liquidityFee = 5;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _marketingFee = 2;
    address public marketingWallet = 0x35230475776E1D1bdDA73F1a31BDB48873FfE5D5;
    uint256 private _previousmarketingFee = _marketingFee;

    uint256 public _walletMax =     3000000 * 10**3;
    uint256 public _maxTxAmount =   3000000 * 10**3;  

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    bool public checkWalletLimit = false;


    uint256 private numTokensSellToAddToLiquidity = 1 * 10**3;
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        //@ES: PancakeSwap V2 Router BSC mainnet address: 0x10ED43C718714eb63d5aA57B78B54704E256024E
        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        // Polygon Mainnet Sushiswap Router address = (0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506);
        //Icecreamswap router coredao blockchain = (0xBb5e1777A331ED93E07cF043363e48d320eb96c4)
        // @ES: PancakeSwap V2 Router BSC testnet address: 0xD99D1c33F9fC3444f8101754aBC46c52416550D1
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
         // Create a uniswap pair for this new token
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // set the rest of the contract variables
        uniswapV2Router = _uniswapV2Router;
        
        //exclude owner and this contract from fee
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;

        isWalletLimitExempt[owner()] = true;
        isWalletLimitExempt[address(uniswapV2Pair)] = true;
        isWalletLimitExempt[address(this)] = true;

        isTxLimitExempt[owner()] = true;
        isTxLimitExempt[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }
       
    uint256 public _selltoaddtoliquidity = 0;
    uint256 private _previousselltoaddtoliquidity = _selltoaddtoliquidity;


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

    function balanceOf(address account) public view override returns (uint256) {
        if (_isExcluded[account]) return _tOwned[account];
        return tokenFrom(_rOwned[account]);
    }

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

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

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!");
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    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 totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }


    function setIsTxLimitExempt(address holder, bool exempt) external onlyOwner {
        isTxLimitExempt[holder] = exempt;
    }
    
      
    //adding multiple addresses to the blacklist - Used to manually block known bots and scammers
    function addToBlackList(address[] calldata addresses) external onlyOwner {
      for (uint256 i; i < addresses.length; ++i) {
        _isBlacklisted[addresses[i]] = true;
      }
    }

      function removeFromBlackList(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }

    function deliver(uint256 tAmount) public {
        address sender = _msgSender();
        require(!_isExcluded[sender], "Excluded addresses cannot call this function");
        (uint256 rAmount,,,,,) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function tokenFrom(uint256 rAmount) public view returns(uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        uint256 currentRate =  _getRate();
        return rAmount.div(currentRate);
    }


    function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);        
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }
    

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

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount);
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate());
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity);
    }

    function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) {
        uint256 tFee = calculateselltoaddtoliquidity(tAmount);
        uint256 tLiquidity = calculateLiquidityFee(tAmount);
        uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity);
        return (tTransferAmount, tFee, tLiquidity);
    }

    function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate);
        uint256 rFee = tFee.mul(currentRate);
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity);
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns(uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns(uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;      
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }
    
    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate =  _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }
    
    function calculateselltoaddtoliquidity(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_selltoaddtoliquidity).div(
            10**2
        );
    }

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(
            10**2
        );
    }
    
    function removeAllFee() private {
        if(_selltoaddtoliquidity == 0 && _liquidityFee == 0 && _marketingFee==0) return;
        
        _previousselltoaddtoliquidity = _selltoaddtoliquidity;
        _previousLiquidityFee = _liquidityFee;
        _previousmarketingFee = _marketingFee;
        
        _selltoaddtoliquidity = 0;
        _liquidityFee = 0;
        _marketingFee = 0;
    }
    
    function restoreAllFee() private {
       _selltoaddtoliquidity = _previousselltoaddtoliquidity;
       _liquidityFee = _previousLiquidityFee;
       _marketingFee = _previousmarketingFee;
    }
    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

    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 setWalletLimit(uint256 newLimit) external onlyOwner {
        _walletMax  = newLimit;
    }

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        if(!isTxLimitExempt[from] && !isTxLimitExempt[to]) {
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }   

        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            from != uniswapV2Pair
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;
        }
          if(checkWalletLimit && !isWalletLimitExempt[to])
                require(balanceOf(to).add(amount) <= _walletMax);

        _tokenTransfer(from,to,amount);
    }


    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),
            block.timestamp
        );
    }

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

    //this method is responsible for taking all fee, if takeFee is true
    function _tokenTransfer(address sender, address recipient, uint256 amount) private {
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
            removeAllFee();
        }
        
        //Calculate burn amount and marketing amount
        uint256 marketingAmt = amount.mul(_marketingFee).div(100);

        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, (amount.sub(marketingAmt)));
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, (amount.sub(marketingAmt)));
        } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferStandard(sender, recipient, (amount.sub(marketingAmt)));
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, (amount.sub(marketingAmt)));
        } else {
            _transferStandard(sender, recipient, (amount.sub(marketingAmt)));
        }
        
        //Temporarily remove fees to transfer to burn address and marketing wallet
        _selltoaddtoliquidity = 0;
        _liquidityFee = 0;


        _transferStandard(sender, marketingWallet, marketingAmt);

        //Restore Reward and liquidity fees
        _selltoaddtoliquidity = _previousselltoaddtoliquidity;
        _liquidityFee = _previousLiquidityFee;


        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
            restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        require(!_isBlacklisted[sender] && !_isBlacklisted[recipient], "To/from address is blacklisted!");
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
         if(!isTxLimitExempt[sender] && !isTxLimitExempt[recipient]) {
                require(tAmount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
            }  
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);           
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount);
        _tOwned[sender] = _tOwned[sender].sub(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
        _takeLiquidity(tLiquidity);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }
    
    function includeInFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = false;
    }
    
    function setmarketingWallet(address newWallet) external onlyOwner() {
        marketingWallet = newWallet;
    }
    
    function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() {
        _liquidityFee = liquidityFee;
    }
    
    function setmarketingFeePercent(uint256 marketingFee) external onlyOwner() {
        _marketingFee = marketingFee;
    }
        
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":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":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","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":"_selltoaddtoliquidity","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":"addresses","type":"address[]"}],"name":"addToBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"enableDisableWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"address","name":"account","type":"address"}],"name":"removeFromBlackList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","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":"setWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setmarketingFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setmarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFrom","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405264174876e800600c55600c54600019816200001b57fe5b0660001903600d556040518060400160405280600881526020017f42696e676f204169000000000000000000000000000000000000000000000000815250600f90805190602001906200007092919062000860565b506040518060400160405280600881526020017f2442696e676f416900000000000000000000000000000000000000000000000081525060109080519060200190620000be92919062000860565b506003601160006101000a81548160ff021916908360ff160217905550600560125560125460135560026014557335230475776e1d1bdda73f1a31bdb48873ffe5d5601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060145460165563b2d05e0060175563b2d05e006018556000601a60146101000a81548160ff0219169083151502179055506103e8601b556000601c55601c54601d553480156200018f57600080fd5b506000620001a26200082f60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600d5460036000620002576200082f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002f557600080fd5b505afa1580156200030a573d6000803e3d6000fd5b505050506040513d60208110156200032157600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200039557600080fd5b505afa158015620003aa573d6000803e3d6000fd5b505050506040513d6020811015620003c157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200043c57600080fd5b505af115801562000451573d6000803e3d6000fd5b505050506040513d60208110156200046857600080fd5b8101908080519060200190929190505050601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160076000620005106200083760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000620005cf6200083760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160086000601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000620007086200083760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620007c16200082f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040518082815260200191505060405180910390a35062000906565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620008a357805160ff1916838001178555620008d4565b82800160010185558215620008d4579182015b82811115620008d3578251825591602001919060010190620008b6565b5b509050620008e39190620008e7565b5090565b5b8082111562000902576000816000905550600101620008e8565b5090565b6149ee80620009166000396000f3fe60806040526004361061023f5760003560e01c80636bc87c3a1161012e578063a9059cbb116100ab578063f1d5f5171161006f578063f1d5f51714610d07578063f2fde38b14610d42578063f84ba65d14610d93578063f872858a14610df0578063ff89757014610e1d57610246565b8063a9059cbb14610b5a578063ab7922cc14610bcb578063dd62ed3e14610bf6578063ea2f0b3714610c7b578063ec28438a14610ccc57610246565b8063807c2d9c116100f2578063807c2d9c146109b25780638da5cb5b146109dd5780638ee88c5314610a1e57806395d89b4114610a59578063a457c2d714610ae957610246565b80636bc87c3a1461089f57806370a08231146108ca578063715018a61461092f57806375f0a874146109465780637d1db4a51461098757610246565b806322976e0d116101bc5780633bd5d173116101805780633bd5d1731461071a578063437823ec1461075557806349bd5a5e146107a65780634a49ac4c146107e75780635342acb41461083857610246565b806322976e0d1461058257806323b872dd146105ad5780632563ae831461063e578063313ce5671461067b57806339509351146106a957610246565b80631694505e116102035780631694505e1461040157806318160ddd146104425780631cdd3be31461046d5780632198cf6c146104d4578063224611731461053157610246565b806306fdde031461024b578063095ea7b3146102db5780630cd7c4781461034c5780630f5af0361461038757806313114a9d146103d657610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610ea3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a0578082015181840152602081019050610285565b50505050905090810190601f1680156102cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e757600080fd5b50610334600480360360408110156102fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f45565b60405180821515815260200191505060405180910390f35b34801561035857600080fd5b506103856004803603602081101561036f57600080fd5b8101908080359060200190929190505050610f63565b005b34801561039357600080fd5b506103c0600480360360208110156103aa57600080fd5b8101908080359060200190929190505050611035565b6040518082815260200191505060405180910390f35b3480156103e257600080fd5b506103eb6110b9565b6040518082815260200191505060405180910390f35b34801561040d57600080fd5b506104166110c3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044e57600080fd5b506104576110e9565b6040518082815260200191505060405180910390f35b34801561047957600080fd5b506104bc6004803603602081101561049057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f3565b60405180821515815260200191505060405180910390f35b3480156104e057600080fd5b5061052f600480360360408110156104f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611113565b005b34801561053d57600080fd5b506105806004803603602081101561055457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611236565b005b34801561058e57600080fd5b50610597611342565b6040518082815260200191505060405180910390f35b3480156105b957600080fd5b50610626600480360360608110156105d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611348565b60405180821515815260200191505060405180910390f35b34801561064a57600080fd5b506106796004803603602081101561066157600080fd5b81019080803515159060200190929190505050611537565b005b34801561068757600080fd5b5061069061161c565b604051808260ff16815260200191505060405180910390f35b3480156106b557600080fd5b50610702600480360360408110156106cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611633565b60405180821515815260200191505060405180910390f35b34801561072657600080fd5b506107536004803603602081101561073d57600080fd5b81019080803590602001909291905050506116e6565b005b34801561076157600080fd5b506107a46004803603602081101561077857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611877565b005b3480156107b257600080fd5b506107bb61199a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107f357600080fd5b506108366004803603602081101561080a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119c0565b005b34801561084457600080fd5b506108876004803603602081101561085b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae3565b60405180821515815260200191505060405180910390f35b3480156108ab57600080fd5b506108b4611b39565b6040518082815260200191505060405180910390f35b3480156108d657600080fd5b50610919600480360360208110156108ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b3f565b6040518082815260200191505060405180910390f35b34801561093b57600080fd5b50610944611c2a565b005b34801561095257600080fd5b5061095b611db0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561099357600080fd5b5061099c611dd6565b6040518082815260200191505060405180910390f35b3480156109be57600080fd5b506109c7611ddc565b6040518082815260200191505060405180910390f35b3480156109e957600080fd5b506109f2611de2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a2a57600080fd5b50610a5760048036036020811015610a4157600080fd5b8101908080359060200190929190505050611e0b565b005b348015610a6557600080fd5b50610a6e611edd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aae578082015181840152602081019050610a93565b50505050905090810190601f168015610adb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610af557600080fd5b50610b4260048036036040811015610b0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f7f565b60405180821515815260200191505060405180910390f35b348015610b6657600080fd5b50610bb360048036036040811015610b7d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204c565b60405180821515815260200191505060405180910390f35b348015610bd757600080fd5b50610be061206a565b6040518082815260200191505060405180910390f35b348015610c0257600080fd5b50610c6560048036036040811015610c1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612070565b6040518082815260200191505060405180910390f35b348015610c8757600080fd5b50610cca60048036036020811015610c9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120f7565b005b348015610cd857600080fd5b50610d0560048036036020811015610cef57600080fd5b810190808035906020019092919050505061221a565b005b348015610d1357600080fd5b50610d4060048036036020811015610d2a57600080fd5b81019080803590602001909291905050506122ec565b005b348015610d4e57600080fd5b50610d9160048036036020811015610d6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123be565b005b348015610d9f57600080fd5b50610dee60048036036040811015610db657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506125c9565b005b348015610dfc57600080fd5b50610e056126ec565b60405180821515815260200191505060405180910390f35b348015610e2957600080fd5b50610ea160048036036020811015610e4057600080fd5b8101908080359060200190640100000000811115610e5d57600080fd5b820183602082011115610e6f57600080fd5b80359060200191846020830284011164010000000083111715610e9157600080fd5b90919293919293905050506126ff565b005b6060600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f3b5780601f10610f1057610100808354040283529160200191610f3b565b820191906000526020600020905b815481529060010190602001808311610f1e57829003601f168201915b5050505050905090565b6000610f59610f52612865565b848461286d565b6001905092915050565b610f6b612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060148190555050565b6000600d54821115611092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614813602a913960400191505060405180910390fd5b600061109c612a64565b90506110b18184612a8f90919063ffffffff16565b915050919050565b6000600e54905090565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b60056020528060005260406000206000915054906101000a900460ff1681565b61111b612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61123e612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113ee5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f546f2f66726f6d206164647265737320697320626c61636b6c6973746564210081525060200191505060405180910390fd5b61146b848484612ad9565b61152c84611477612865565b611527856040518060600160405280602881526020016148ce60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114dd612865565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de19092919063ffffffff16565b61286d565b600190509392505050565b61153f612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601a60146101000a81548160ff02191690831515021790555050565b6000601160009054906101000a900460ff16905090565b60006116dc611640612865565b846116d78560066000611651612865565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b61286d565b6001905092915050565b60006116f0612865565b9050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614968602c913960400191505060405180910390fd5b60006117a083612f29565b505050505090506117f981600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061185181600d54612f8590919063ffffffff16565b600d8190555061186c83600e54612ea190919063ffffffff16565b600e81905550505050565b61187f612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c8612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bda57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c25565b611c22600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611035565b90505b919050565b611c32612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60175481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e13612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060128190555050565b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f755780601f10611f4a57610100808354040283529160200191611f75565b820191906000526020600020905b815481529060010190602001808311611f5857829003601f168201915b5050505050905090565b6000612042611f8c612865565b8461203d856040518060600160405280602581526020016149946025913960066000611fb6612865565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de19092919063ffffffff16565b61286d565b6001905092915050565b6000612060612059612865565b8484612ad9565b6001905092915050565b601c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120ff612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612222612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060188190555050565b6122f4612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060178190555050565b6123c6612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561250c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061483d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125d1612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60149054906101000a900460ff1681565b612707612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82829050811015612860576001600560008585858181106127e757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060010190506127ca565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806149446024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806148636022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000806000612a71612fcf565b91509150612a888183612a8f90919063ffffffff16565b9250505090565b6000612ad183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613260565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061491f6025913960400191505060405180910390fd5b60008111612bb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148f66029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c5c5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cbd57601854811115612cbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806148856028913960400191505060405180910390fd5b5b6000612cc830611b3f565b90506000601b548210159050808015612d2f5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612d3a57601b5491505b601a60149054906101000a900460ff168015612da05750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dcf57601754612dc384612db587611b3f565b612ea190919063ffffffff16565b1115612dce57600080fd5b5b612dda858585613326565b5050505050565b6000838311158290612e8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e53578082015181840152602081019050612e38565b50505050905090810190601f168015612e805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015612f1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612f408a61384e565b9250925092506000806000612f5e8d8686612f59612a64565b6138a8565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612fc783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612de1565b905092915050565b6000806000600d5490506000600c54905060005b600b80549050811015613223578260036000600b848154811061300257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806130e957508160046000600b848154811061308157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561310057600d54600c549450945050505061325c565b61318960036000600b848154811061311457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f8590919063ffffffff16565b925061321460046000600b848154811061319f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f8590919063ffffffff16565b91508080600101915050612fe3565b5061323b600c54600d54612a8f90919063ffffffff16565b82101561325357600d54600c5493509350505061325c565b81819350935050505b9091565b6000808311829061330c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132d15780820151818401526020810190506132b6565b50505050905090810190601f1680156132fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161331857fe5b049050809150509392505050565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133c75750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133d5576133d4613931565b5b60006133ff60646133f16014548561399390919063ffffffff16565b612a8f90919063ffffffff16565b9050600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134a45750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134cb576134c684846134c18486612f8590919063ffffffff16565b613a19565b61374a565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561356e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561359557613590848461358b8486612f8590919063ffffffff16565b613c79565b613749565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136395750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136605761365b84846136568486612f8590919063ffffffff16565b613ed9565b613748565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137025750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561372957613724848461371f8486612f8590919063ffffffff16565b6142bf565b613747565b61374684846137418486612f8590919063ffffffff16565b613ed9565b5b5b5b5b6000601c81905550600060128190555061378784601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ed9565b601d54601c81905550601354601281905550600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061383a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613848576138476145b4565b5b50505050565b60008060008061385d856145d1565b9050600061386a86614602565b9050600061389382613885858a612f8590919063ffffffff16565b612f8590919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806138c1858961399390919063ffffffff16565b905060006138d8868961399390919063ffffffff16565b905060006138ef878961399390919063ffffffff16565b905060006139188261390a8587612f8590919063ffffffff16565b612f8590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000601c5414801561394557506000601254145b801561395357506000601454145b1561395d57613991565b601c54601d819055506012546013819055506014546016819055506000601c81905550600060128190555060006014819055505b565b6000808314156139a65760009050613a13565b60008284029050828482816139b757fe5b0414613a0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148ad6021913960400191505060405180910390fd5b809150505b92915050565b600080600080600080613a2b87612f29565b955095509550955095509550613a8987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bb385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bff81614633565b613c0984836147d8565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613c8b87612f29565b955095509550955095509550613ce986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d7e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e1385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5f81614633565b613e6984836147d8565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613eeb87612f29565b955095509550955095509550600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613f9b5750600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61400d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f546f2f66726f6d206164647265737320697320626c61636b6c6973746564210081525060200191505060405180910390fd5b61405f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140f485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061414081614633565b61414a84836147d8565b600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156141ee5750600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561424f5760185487111561424e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806148856028913960400191505060405180910390fd5b5b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806142d187612f29565b95509550955095509550955061432f87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143c486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445983600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ee85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453a81614633565b61454484836147d8565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601d54601c81905550601354601281905550601654601481905550565b60006145fb60646145ed601c548561399390919063ffffffff16565b612a8f90919063ffffffff16565b9050919050565b600061462c606461461e6012548561399390919063ffffffff16565b612a8f90919063ffffffff16565b9050919050565b600061463d612a64565b90506000614654828461399390919063ffffffff16565b90506146a881600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147d35761478f83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6147ed82600d54612f8590919063ffffffff16565b600d8190555061480881600e54612ea190919063ffffffff16565b600e81905550505056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ed2fb60fc573fae0de0f270a10d88be884658f5a5f450ca84ad1f1359caf67d864736f6c634300060c0033

Deployed Bytecode

0x60806040526004361061023f5760003560e01c80636bc87c3a1161012e578063a9059cbb116100ab578063f1d5f5171161006f578063f1d5f51714610d07578063f2fde38b14610d42578063f84ba65d14610d93578063f872858a14610df0578063ff89757014610e1d57610246565b8063a9059cbb14610b5a578063ab7922cc14610bcb578063dd62ed3e14610bf6578063ea2f0b3714610c7b578063ec28438a14610ccc57610246565b8063807c2d9c116100f2578063807c2d9c146109b25780638da5cb5b146109dd5780638ee88c5314610a1e57806395d89b4114610a59578063a457c2d714610ae957610246565b80636bc87c3a1461089f57806370a08231146108ca578063715018a61461092f57806375f0a874146109465780637d1db4a51461098757610246565b806322976e0d116101bc5780633bd5d173116101805780633bd5d1731461071a578063437823ec1461075557806349bd5a5e146107a65780634a49ac4c146107e75780635342acb41461083857610246565b806322976e0d1461058257806323b872dd146105ad5780632563ae831461063e578063313ce5671461067b57806339509351146106a957610246565b80631694505e116102035780631694505e1461040157806318160ddd146104425780631cdd3be31461046d5780632198cf6c146104d4578063224611731461053157610246565b806306fdde031461024b578063095ea7b3146102db5780630cd7c4781461034c5780630f5af0361461038757806313114a9d146103d657610246565b3661024657005b600080fd5b34801561025757600080fd5b50610260610ea3565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a0578082015181840152602081019050610285565b50505050905090810190601f1680156102cd5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b3480156102e757600080fd5b50610334600480360360408110156102fe57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050610f45565b60405180821515815260200191505060405180910390f35b34801561035857600080fd5b506103856004803603602081101561036f57600080fd5b8101908080359060200190929190505050610f63565b005b34801561039357600080fd5b506103c0600480360360208110156103aa57600080fd5b8101908080359060200190929190505050611035565b6040518082815260200191505060405180910390f35b3480156103e257600080fd5b506103eb6110b9565b6040518082815260200191505060405180910390f35b34801561040d57600080fd5b506104166110c3565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561044e57600080fd5b506104576110e9565b6040518082815260200191505060405180910390f35b34801561047957600080fd5b506104bc6004803603602081101561049057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506110f3565b60405180821515815260200191505060405180910390f35b3480156104e057600080fd5b5061052f600480360360408110156104f757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803515159060200190929190505050611113565b005b34801561053d57600080fd5b506105806004803603602081101561055457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611236565b005b34801561058e57600080fd5b50610597611342565b6040518082815260200191505060405180910390f35b3480156105b957600080fd5b50610626600480360360608110156105d057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611348565b60405180821515815260200191505060405180910390f35b34801561064a57600080fd5b506106796004803603602081101561066157600080fd5b81019080803515159060200190929190505050611537565b005b34801561068757600080fd5b5061069061161c565b604051808260ff16815260200191505060405180910390f35b3480156106b557600080fd5b50610702600480360360408110156106cc57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611633565b60405180821515815260200191505060405180910390f35b34801561072657600080fd5b506107536004803603602081101561073d57600080fd5b81019080803590602001909291905050506116e6565b005b34801561076157600080fd5b506107a46004803603602081101561077857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611877565b005b3480156107b257600080fd5b506107bb61199a565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107f357600080fd5b506108366004803603602081101561080a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506119c0565b005b34801561084457600080fd5b506108876004803603602081101561085b57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611ae3565b60405180821515815260200191505060405180910390f35b3480156108ab57600080fd5b506108b4611b39565b6040518082815260200191505060405180910390f35b3480156108d657600080fd5b50610919600480360360208110156108ed57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b3f565b6040518082815260200191505060405180910390f35b34801561093b57600080fd5b50610944611c2a565b005b34801561095257600080fd5b5061095b611db0565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561099357600080fd5b5061099c611dd6565b6040518082815260200191505060405180910390f35b3480156109be57600080fd5b506109c7611ddc565b6040518082815260200191505060405180910390f35b3480156109e957600080fd5b506109f2611de2565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a2a57600080fd5b50610a5760048036036020811015610a4157600080fd5b8101908080359060200190929190505050611e0b565b005b348015610a6557600080fd5b50610a6e611edd565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610aae578082015181840152602081019050610a93565b50505050905090810190601f168015610adb5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610af557600080fd5b50610b4260048036036040811015610b0c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050611f7f565b60405180821515815260200191505060405180910390f35b348015610b6657600080fd5b50610bb360048036036040811015610b7d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061204c565b60405180821515815260200191505060405180910390f35b348015610bd757600080fd5b50610be061206a565b6040518082815260200191505060405180910390f35b348015610c0257600080fd5b50610c6560048036036040811015610c1957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612070565b6040518082815260200191505060405180910390f35b348015610c8757600080fd5b50610cca60048036036020811015610c9e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506120f7565b005b348015610cd857600080fd5b50610d0560048036036020811015610cef57600080fd5b810190808035906020019092919050505061221a565b005b348015610d1357600080fd5b50610d4060048036036020811015610d2a57600080fd5b81019080803590602001909291905050506122ec565b005b348015610d4e57600080fd5b50610d9160048036036020811015610d6557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506123be565b005b348015610d9f57600080fd5b50610dee60048036036040811015610db657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035151590602001909291905050506125c9565b005b348015610dfc57600080fd5b50610e056126ec565b60405180821515815260200191505060405180910390f35b348015610e2957600080fd5b50610ea160048036036020811015610e4057600080fd5b8101908080359060200190640100000000811115610e5d57600080fd5b820183602082011115610e6f57600080fd5b80359060200191846020830284011164010000000083111715610e9157600080fd5b90919293919293905050506126ff565b005b6060600f8054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610f3b5780601f10610f1057610100808354040283529160200191610f3b565b820191906000526020600020905b815481529060010190602001808311610f1e57829003601f168201915b5050505050905090565b6000610f59610f52612865565b848461286d565b6001905092915050565b610f6b612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060148190555050565b6000600d54821115611092576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180614813602a913960400191505060405180910390fd5b600061109c612a64565b90506110b18184612a8f90919063ffffffff16565b915050919050565b6000600e54905090565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600c54905090565b60056020528060005260406000206000915054906101000a900460ff1681565b61111b612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61123e612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b6000600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156113ee5750600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b611460576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f546f2f66726f6d206164647265737320697320626c61636b6c6973746564210081525060200191505060405180910390fd5b61146b848484612ad9565b61152c84611477612865565b611527856040518060600160405280602881526020016148ce60289139600660008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006114dd612865565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de19092919063ffffffff16565b61286d565b600190509392505050565b61153f612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601a60146101000a81548160ff02191690831515021790555050565b6000601160009054906101000a900460ff16905090565b60006116dc611640612865565b846116d78560066000611651612865565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b61286d565b6001905092915050565b60006116f0612865565b9050600a60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611795576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180614968602c913960400191505060405180910390fd5b60006117a083612f29565b505050505090506117f981600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061185181600d54612f8590919063ffffffff16565b600d8190555061186c83600e54612ea190919063ffffffff16565b600e81905550505050565b61187f612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461193f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6119c8612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a88576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60125481565b6000600a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bda57600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c25565b611c22600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611035565b90505b919050565b611c32612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cf2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60185481565b60175481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611e13612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ed3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060128190555050565b606060108054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611f755780601f10611f4a57610100808354040283529160200191611f75565b820191906000526020600020905b815481529060010190602001808311611f5857829003601f168201915b5050505050905090565b6000612042611f8c612865565b8461203d856040518060600160405280602581526020016149946025913960066000611fb6612865565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612de19092919063ffffffff16565b61286d565b6001905092915050565b6000612060612059612865565b8484612ad9565b6001905092915050565b601c5481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6120ff612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b612222612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060188190555050565b6122f4612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060178190555050565b6123c6612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561250c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061483d6026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6125d1612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612691576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601a60149054906101000a900460ff1681565b612707612865565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60005b82829050811015612860576001600560008585858181106127e757fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060010190506127ca565b505050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806149446024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612979576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806148636022913960400191505060405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b6000806000612a71612fcf565b91509150612a888183612a8f90919063ffffffff16565b9250505090565b6000612ad183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613260565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612b5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602581526020018061491f6025913960400191505060405180910390fd5b60008111612bb8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806148f66029913960400191505060405180910390fd5b600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c5c5750600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612cbd57601854811115612cbc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806148856028913960400191505060405180910390fd5b5b6000612cc830611b3f565b90506000601b548210159050808015612d2f5750601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b15612d3a57601b5491505b601a60149054906101000a900460ff168015612da05750600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612dcf57601754612dc384612db587611b3f565b612ea190919063ffffffff16565b1115612dce57600080fd5b5b612dda858585613326565b5050505050565b6000838311158290612e8e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612e53578082015181840152602081019050612e38565b50505050905090810190601f168015612e805780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b600080828401905083811015612f1f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6000806000806000806000806000612f408a61384e565b9250925092506000806000612f5e8d8686612f59612a64565b6138a8565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612fc783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612de1565b905092915050565b6000806000600d5490506000600c54905060005b600b80549050811015613223578260036000600b848154811061300257fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806130e957508160046000600b848154811061308157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561310057600d54600c549450945050505061325c565b61318960036000600b848154811061311457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612f8590919063ffffffff16565b925061321460046000600b848154811061319f57fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612f8590919063ffffffff16565b91508080600101915050612fe3565b5061323b600c54600d54612a8f90919063ffffffff16565b82101561325357600d54600c5493509350505061325c565b81819350935050505b9091565b6000808311829061330c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b838110156132d15780820151818401526020810190506132b6565b50505050905090810190601f1680156132fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b50600083858161331857fe5b049050809150509392505050565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806133c75750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156133d5576133d4613931565b5b60006133ff60646133f16014548561399390919063ffffffff16565b612a8f90919063ffffffff16565b9050600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156134a45750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134cb576134c684846134c18486612f8590919063ffffffff16565b613a19565b61374a565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561356e5750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561359557613590848461358b8486612f8590919063ffffffff16565b613c79565b613749565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156136395750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156136605761365b84846136568486612f8590919063ffffffff16565b613ed9565b613748565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156137025750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561372957613724848461371f8486612f8590919063ffffffff16565b6142bf565b613747565b61374684846137418486612f8590919063ffffffff16565b613ed9565b5b5b5b5b6000601c81905550600060128190555061378784601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613ed9565b601d54601c81905550601354601281905550600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061383a5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613848576138476145b4565b5b50505050565b60008060008061385d856145d1565b9050600061386a86614602565b9050600061389382613885858a612f8590919063ffffffff16565b612f8590919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806138c1858961399390919063ffffffff16565b905060006138d8868961399390919063ffffffff16565b905060006138ef878961399390919063ffffffff16565b905060006139188261390a8587612f8590919063ffffffff16565b612f8590919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000601c5414801561394557506000601254145b801561395357506000601454145b1561395d57613991565b601c54601d819055506012546013819055506014546016819055506000601c81905550600060128190555060006014819055505b565b6000808314156139a65760009050613a13565b60008284029050828482816139b757fe5b0414613a0e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806148ad6021913960400191505060405180910390fd5b809150505b92915050565b600080600080600080613a2b87612f29565b955095509550955095509550613a8987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b1e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bb385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bff81614633565b613c0984836147d8565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613c8b87612f29565b955095509550955095509550613ce986600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d7e83600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e1385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e5f81614633565b613e6984836147d8565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080613eeb87612f29565b955095509550955095509550600560008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613f9b5750600560008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b61400d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f546f2f66726f6d206164647265737320697320626c61636b6c6973746564210081525060200191505060405180910390fd5b61405f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140f485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061414081614633565b61414a84836147d8565b600960008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156141ee5750600960008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561424f5760185487111561424e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806148856028913960400191505060405180910390fd5b5b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b6000806000806000806142d187612f29565b95509550955095509550955061432f87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143c486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612f8590919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061445983600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506144ee85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061453a81614633565b61454484836147d8565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601d54601c81905550601354601281905550601654601481905550565b60006145fb60646145ed601c548561399390919063ffffffff16565b612a8f90919063ffffffff16565b9050919050565b600061462c606461461e6012548561399390919063ffffffff16565b612a8f90919063ffffffff16565b9050919050565b600061463d612a64565b90506000614654828461399390919063ffffffff16565b90506146a881600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156147d35761478f83600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ea190919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6147ed82600d54612f8590919063ffffffff16565b600d8190555061480881600e54612ea190919063ffffffff16565b600e81905550505056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ed2fb60fc573fae0de0f270a10d88be884658f5a5f450ca84ad1f1359caf67d864736f6c634300060c0033

Deployed Bytecode Sourcemap

14247:18224:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17653:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18555:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32217:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20705:243;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19656:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15576:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17930:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14468:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25895:135;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31957:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15281:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18724:421;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;25774:113;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17839:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19153:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20320:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31712:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15625:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;20197:115;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25188:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15180:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18033:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5880:148;;;;;;;;;;;;;:::i;:::-;;15320:75;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;15518:47;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;15464;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5666:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;32083:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17744:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19379:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;18229:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17526:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;18404:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;31835:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32355:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25664:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;6036:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19753:127;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15663:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;19999:188;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17653:83;17690:13;17723:5;17716:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17653:83;:::o;18555:161::-;18630:4;18647:39;18656:12;:10;:12::i;:::-;18670:7;18679:6;18647:8;:39::i;:::-;18704:4;18697:11;;18555:161;;;;:::o;32217:122::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32319:12:::1;32303:13;:28;;;;32217:122:::0;:::o;20705:243::-;20761:7;20800;;20789;:18;;20781:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20865:19;20888:10;:8;:10::i;:::-;20865:33;;20916:24;20928:11;20916:7;:11;;:24;;;;:::i;:::-;20909:31;;;20705:243;;;:::o;19656:87::-;19698:7;19725:10;;19718:17;;19656:87;:::o;15576:42::-;;;;;;;;;;;;;:::o;17930:95::-;17983:7;18010;;18003:14;;17930:95;:::o;14468:47::-;;;;;;;;;;;;;;;;;;;;;;:::o;25895:135::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26016:6:::1;25986:19;:27;26006:6;25986:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;25895:135:::0;;:::o;31957:114::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32054:9:::1;32036:15;;:27;;;;;;;;;;;;;;;;;;31957:114:::0;:::o;15281:32::-;;;;:::o;18724:421::-;18822:4;18848:14;:22;18863:6;18848:22;;;;;;;;;;;;;;;;;;;;;;;;;18847:23;:53;;;;;18875:14;:25;18890:9;18875:25;;;;;;;;;;;;;;;;;;;;;;;;;18874:26;18847:53;18839:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18947:36;18957:6;18965:9;18976:6;18947:9;:36::i;:::-;18994:121;19003:6;19011:12;:10;:12::i;:::-;19025:89;19063:6;19025:89;;;;;;;;;;;;;;;;;:11;:19;19037:6;19025:19;;;;;;;;;;;;;;;:33;19045:12;:10;:12::i;:::-;19025:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;18994:8;:121::i;:::-;19133:4;19126:11;;18724:421;;;;;:::o;25774:113::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25871:8:::1;25852:16;;:27;;;;;;;;;;;;;;;;;;25774:113:::0;:::o;17839:83::-;17880:5;17905:9;;;;;;;;;;;17898:16;;17839:83;:::o;19153:218::-;19241:4;19258:83;19267:12;:10;:12::i;:::-;19281:7;19290:50;19329:10;19290:11;:25;19302:12;:10;:12::i;:::-;19290:25;;;;;;;;;;;;;;;:34;19316:7;19290:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;19258:8;:83::i;:::-;19359:4;19352:11;;19153:218;;;;:::o;20320:377::-;20372:14;20389:12;:10;:12::i;:::-;20372:29;;20421:11;:19;20433:6;20421:19;;;;;;;;;;;;;;;;;;;;;;;;;20420:20;20412:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20501:15;20525:19;20536:7;20525:10;:19::i;:::-;20500:44;;;;;;;20573:28;20593:7;20573;:15;20581:6;20573:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;20555:7;:15;20563:6;20555:15;;;;;;;;;;;;;;;:46;;;;20622:20;20634:7;20622;;:11;;:20;;;;:::i;:::-;20612:7;:30;;;;20666:23;20681:7;20666:10;;:14;;:23;;;;:::i;:::-;20653:10;:36;;;;20320:377;;;:::o;31712:111::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31811:4:::1;31781:18;:27;31800:7;31781:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;31712:111:::0;:::o;15625:29::-;;;;;;;;;;;;;:::o;20197:115::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20299:5:::1;20273:14;:23;20288:7;20273:23;;;;;;;;;;;;;;;;:31;;;;;;;;;;;;;;;;;;20197:115:::0;:::o;25188:123::-;25252:4;25276:18;:27;25295:7;25276:27;;;;;;;;;;;;;;;;;;;;;;;;;25269:34;;25188:123;;;:::o;15180:32::-;;;;:::o;18033:188::-;18099:7;18123:11;:20;18135:7;18123:20;;;;;;;;;;;;;;;;;;;;;;;;;18119:49;;;18152:7;:16;18160:7;18152:16;;;;;;;;;;;;;;;;18145:23;;;;18119:49;18186:27;18196:7;:16;18204:7;18196:16;;;;;;;;;;;;;;;;18186:9;:27::i;:::-;18179:34;;18033:188;;;;:::o;5880:148::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5987:1:::1;5950:40;;5971:6;::::0;::::1;;;;;;;;5950:40;;;;;;;;;;;;6018:1;6001:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5880:148::o:0;15320:75::-;;;;;;;;;;;;;:::o;15518:47::-;;;;:::o;15464:::-;;;;:::o;5666:79::-;5704:7;5731:6;;;;;;;;;;;5724:13;;5666:79;:::o;32083:122::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32185:12:::1;32169:13;:28;;;;32083:122:::0;:::o;17744:87::-;17783:13;17816:7;17809:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17744:87;:::o;19379:269::-;19472:4;19489:129;19498:12;:10;:12::i;:::-;19512:7;19521:96;19560:15;19521:96;;;;;;;;;;;;;;;;;:11;:25;19533:12;:10;:12::i;:::-;19521:25;;;;;;;;;;;;;;;:34;19547:7;19521:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;19489:8;:129::i;:::-;19636:4;19629:11;;19379:269;;;;:::o;18229:167::-;18307:4;18324:42;18334:12;:10;:12::i;:::-;18348:9;18359:6;18324:9;:42::i;:::-;18384:4;18377:11;;18229:167;;;;:::o;17526:40::-;;;;:::o;18404:143::-;18485:7;18512:11;:18;18524:5;18512:18;;;;;;;;;;;;;;;:27;18531:7;18512:27;;;;;;;;;;;;;;;;18505:34;;18404:143;;;;:::o;31835:110::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31932:5:::1;31902:18;:27;31921:7;31902:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31835:110:::0;:::o;32355:111::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32447:11:::1;32432:12;:26;;;;32355:111:::0;:::o;25664:102::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25750:8:::1;25736:10;:22;;;;25664:102:::0;:::o;6036:244::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6145:1:::1;6125:22;;:8;:22;;;;6117:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6235:8;6206:38;;6227:6;::::0;::::1;;;;;;;;6206:38;;;;;;;;;;;;6264:8;6255:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;6036:244:::0;:::o;19753:127::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19866:6:::1;19840:15;:23;19856:6;19840:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19753:127:::0;;:::o;15663:36::-;;;;;;;;;;;;;:::o;19999:188::-;5803:12;:10;:12::i;:::-;5793:22;;:6;;;;;;;;;;:22;;;5785:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20086:9:::1;20081:99;20101:9;;:16;;20097:1;:20;20081:99;;;20166:4;20135:14;:28;20150:9;;20160:1;20150:12;;;;;;;;;;;;;;;20135:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;20119:3;;;;;20081:99;;;;19999:188:::0;;:::o;2352:106::-;2405:15;2440:10;2433:17;;2352:106;:::o;25319:337::-;25429:1;25412:19;;:5;:19;;;;25404:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25510:1;25491:21;;:7;:21;;;;25483:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25594:6;25564:11;:18;25576:5;25564:18;;;;;;;;;;;;;;;:27;25583:7;25564:27;;;;;;;;;;;;;;;:36;;;;25632:7;25616:32;;25625:5;25616:32;;;25641:6;25616:32;;;;;;;;;;;;;;;;;;25319:337;;;:::o;23085:163::-;23126:7;23147:15;23164;23183:19;:17;:19::i;:::-;23146:56;;;;23220:20;23232:7;23220;:11;;:20;;;;:::i;:::-;23213:27;;;;23085:163;:::o;1582:132::-;1640:7;1667:39;1671:1;1674;1667:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1660:46;;1582:132;;;;:::o;26038:954::-;26176:1;26160:18;;:4;:18;;;;26152:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26248:1;26239:6;:10;26231:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26312:15;:21;26328:4;26312:21;;;;;;;;;;;;;;;;;;;;;;;;;26311:22;:46;;;;;26338:15;:19;26354:2;26338:19;;;;;;;;;;;;;;;;;;;;;;;;;26337:20;26311:46;26308:161;;;26396:12;;26386:6;:22;;26378:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26308:161;26484:28;26515:24;26533:4;26515:9;:24::i;:::-;26484:55;;26558:24;26609:29;;26585:20;:53;;26558:80;;26667:19;:57;;;;;26711:13;;;;;;;;;;;26703:21;;:4;:21;;;;26667:57;26649:166;;;26774:29;;26751:52;;26649:166;26830:16;;;;;;;;;;;:44;;;;;26851:19;:23;26871:2;26851:23;;;;;;;;;;;;;;;;;;;;;;;;;26850:24;26830:44;26827:114;;;26930:10;;26901:25;26919:6;26901:13;26911:2;26901:9;:13::i;:::-;:17;;:25;;;;:::i;:::-;:39;;26893:48;;;;;;26827:114;26954:30;26969:4;26974:2;26977:6;26954:14;:30::i;:::-;26038:954;;;;;:::o;1122:192::-;1208:7;1241:1;1236;:6;;1244:12;1228:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1268:9;1284:1;1280;:5;1268:17;;1305:1;1298:8;;;1122:192;;;;;:::o;789:181::-;847:7;867:9;883:1;879;:5;867:17;;908:1;903;:6;;895:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;961:1;954:8;;;789:181;;;;:::o;21869:419::-;21928:7;21937;21946;21955;21964;21973;21994:23;22019:12;22033:18;22055:20;22067:7;22055:11;:20::i;:::-;21993:82;;;;;;22087:15;22104:23;22129:12;22145:50;22157:7;22166:4;22172:10;22184;:8;:10::i;:::-;22145:11;:50::i;:::-;22086:109;;;;;;22214:7;22223:15;22240:4;22246:15;22263:4;22269:10;22206:74;;;;;;;;;;;;;;;;;;21869:419;;;;;;;:::o;978:136::-;1036:7;1063:43;1067:1;1070;1063:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1056:50;;978:136;;;;:::o;23256:561::-;23306:7;23315;23335:15;23353:7;;23335:25;;23371:15;23389:7;;23371:25;;23418:9;23413:289;23437:9;:16;;;;23433:1;:20;23413:289;;;23503:7;23479;:21;23487:9;23497:1;23487:12;;;;;;;;;;;;;;;;;;;;;;;;;23479:21;;;;;;;;;;;;;;;;:31;:66;;;;23538:7;23514;:21;23522:9;23532:1;23522:12;;;;;;;;;;;;;;;;;;;;;;;;;23514:21;;;;;;;;;;;;;;;;:31;23479:66;23475:97;;;23555:7;;23564;;23547:25;;;;;;;;;23475:97;23597:34;23609:7;:21;23617:9;23627:1;23617:12;;;;;;;;;;;;;;;;;;;;;;;;;23609:21;;;;;;;;;;;;;;;;23597:7;:11;;:34;;;;:::i;:::-;23587:44;;23656:34;23668:7;:21;23676:9;23686:1;23676:12;;;;;;;;;;;;;;;;;;;;;;;;;23668:21;;;;;;;;;;;;;;;;23656:7;:11;;:34;;;;:::i;:::-;23646:44;;23455:3;;;;;;;23413:289;;;;23726:20;23738:7;;23726;;:11;;:20;;;;:::i;:::-;23716:7;:30;23712:61;;;23756:7;;23765;;23748:25;;;;;;;;23712:61;23792:7;23801;23784:25;;;;;;23256:561;;;:::o;1722:278::-;1808:7;1840:1;1836;:5;1843:12;1828:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1867:9;1883:1;1879;:5;;;;;;1867:17;;1991:1;1984:8;;;1722:278;;;;;:::o;28193:1541::-;28290:18;:26;28309:6;28290:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;28320:18;:29;28339:9;28320:29;;;;;;;;;;;;;;;;;;;;;;;;;28290:59;28287:104;;;28365:14;:12;:14::i;:::-;28287:104;28465:20;28488:34;28518:3;28488:25;28499:13;;28488:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;28465:57;;28539:11;:19;28551:6;28539:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;28563:11;:22;28575:9;28563:22;;;;;;;;;;;;;;;;;;;;;;;;;28562:23;28539:46;28535:697;;;28602:68;28624:6;28632:9;28644:24;28655:12;28644:6;:10;;:24;;;;:::i;:::-;28602:21;:68::i;:::-;28535:697;;;28693:11;:19;28705:6;28693:19;;;;;;;;;;;;;;;;;;;;;;;;;28692:20;:46;;;;;28716:11;:22;28728:9;28716:22;;;;;;;;;;;;;;;;;;;;;;;;;28692:46;28688:544;;;28755:66;28775:6;28783:9;28795:24;28806:12;28795:6;:10;;:24;;;;:::i;:::-;28755:19;:66::i;:::-;28688:544;;;28844:11;:19;28856:6;28844:19;;;;;;;;;;;;;;;;;;;;;;;;;28843:20;:47;;;;;28868:11;:22;28880:9;28868:22;;;;;;;;;;;;;;;;;;;;;;;;;28867:23;28843:47;28839:393;;;28907:64;28925:6;28933:9;28945:24;28956:12;28945:6;:10;;:24;;;;:::i;:::-;28907:17;:64::i;:::-;28839:393;;;28993:11;:19;29005:6;28993:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;29016:11;:22;29028:9;29016:22;;;;;;;;;;;;;;;;;;;;;;;;;28993:45;28989:243;;;29055:68;29077:6;29085:9;29097:24;29108:12;29097:6;:10;;:24;;;;:::i;:::-;29055:21;:68::i;:::-;28989:243;;;29156:64;29174:6;29182:9;29194:24;29205:12;29194:6;:10;;:24;;;;:::i;:::-;29156:17;:64::i;:::-;28989:243;28839:393;28688:544;28535:697;29360:1;29336:21;:25;;;;29388:1;29372:13;:17;;;;29404:56;29422:6;29430:15;;;;;;;;;;;29447:12;29404:17;:56::i;:::-;29542:29;;29518:21;:53;;;;29598:21;;29582:13;:37;;;;29637:18;:26;29656:6;29637:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;29667:18;:29;29686:9;29667:29;;;;;;;;;;;;;;;;;;;;;;;;;29637:59;29634:92;;;29711:15;:13;:15::i;:::-;29634:92;28193:1541;;;;:::o;22296:344::-;22356:7;22365;22374;22394:12;22409:38;22439:7;22409:29;:38::i;:::-;22394:53;;22458:18;22479:30;22501:7;22479:21;:30::i;:::-;22458:51;;22520:23;22546:33;22568:10;22546:17;22558:4;22546:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;22520:59;;22598:15;22615:4;22621:10;22590:42;;;;;;;;;22296:344;;;;;:::o;22648:429::-;22763:7;22772;22781;22801:15;22819:24;22831:11;22819:7;:11;;:24;;;;:::i;:::-;22801:42;;22854:12;22869:21;22878:11;22869:4;:8;;:21;;;;:::i;:::-;22854:36;;22901:18;22922:27;22937:11;22922:10;:14;;:27;;;;:::i;:::-;22901:48;;22960:23;22986:33;23008:10;22986:17;22998:4;22986:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;22960:59;;23038:7;23047:15;23064:4;23030:39;;;;;;;;;;22648:429;;;;;;;;:::o;24564:402::-;24635:1;24610:21;;:26;:48;;;;;24657:1;24640:13;;:18;24610:48;:68;;;;;24677:1;24662:13;;:16;24610:68;24607:80;;;24680:7;;24607:80;24739:21;;24707:29;:53;;;;24795:13;;24771:21;:37;;;;24843:13;;24819:21;:37;;;;24901:1;24877:21;:25;;;;24929:1;24913:13;:17;;;;24957:1;24941:13;:17;;;;24564:402;:::o;1322:252::-;1380:7;1411:1;1406;:6;1402:47;;;1436:1;1429:8;;;;1402:47;1461:9;1477:1;1473;:5;1461:17;;1506:1;1501;1497;:5;;;;;;:10;1489:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1565:1;1558:8;;;1322:252;;;;;:::o;31138:566::-;31241:15;31258:23;31283:12;31297:23;31322:12;31336:18;31358:19;31369:7;31358:10;:19::i;:::-;31240:137;;;;;;;;;;;;31406:28;31426:7;31406;:15;31414:6;31406:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31388:7;:15;31396:6;31388:15;;;;;;;;;;;;;;;:46;;;;31463:28;31483:7;31463;:15;31471:6;31463:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;31445:7;:15;31453:6;31445:15;;;;;;;;;;;;;;;:46;;;;31523:39;31546:15;31523:7;:18;31531:9;31523:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;31502:7;:18;31510:9;31502:18;;;;;;;;;;;;;;;:60;;;;31576:26;31591:10;31576:14;:26::i;:::-;31613:23;31625:4;31631;31613:11;:23::i;:::-;31669:9;31652:44;;31661:6;31652:44;;;31680:15;31652:44;;;;;;;;;;;;;;;;;;31138:566;;;;;;;;;:::o;30544:586::-;30645:15;30662:23;30687:12;30701:23;30726:12;30740:18;30762:19;30773:7;30762:10;:19::i;:::-;30644:137;;;;;;;;;;;;30810:28;30830:7;30810;:15;30818:6;30810:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30792:7;:15;30800:6;30792:15;;;;;;;;;;;;;;;:46;;;;30870:39;30893:15;30870:7;:18;30878:9;30870:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30849:7;:18;30857:9;30849:18;;;;;;;;;;;;;;;:60;;;;30941:39;30964:15;30941:7;:18;30949:9;30941:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30920:7;:18;30928:9;30920:18;;;;;;;;;;;;;;;:60;;;;31002:26;31017:10;31002:14;:26::i;:::-;31039:23;31051:4;31057;31039:11;:23::i;:::-;31095:9;31078:44;;31087:6;31078:44;;;31106:15;31078:44;;;;;;;;;;;;;;;;;;30544:586;;;;;;;;;:::o;29742:794::-;29841:15;29858:23;29883:12;29897:23;29922:12;29936:18;29958:19;29969:7;29958:10;:19::i;:::-;29840:137;;;;;;;;;;;;29997:14;:22;30012:6;29997:22;;;;;;;;;;;;;;;;;;;;;;;;;29996:23;:53;;;;;30024:14;:25;30039:9;30024:25;;;;;;;;;;;;;;;;;;;;;;;;;30023:26;29996:53;29988:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30114:28;30134:7;30114;:15;30122:6;30114:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30096:7;:15;30104:6;30096:15;;;;;;;;;;;;;;;:46;;;;30174:39;30197:15;30174:7;:18;30182:9;30174:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;30153:7;:18;30161:9;30153:18;;;;;;;;;;;;;;;:60;;;;30224:26;30239:10;30224:14;:26::i;:::-;30261:23;30273:4;30279;30261:11;:23::i;:::-;30300:15;:23;30316:6;30300:23;;;;;;;;;;;;;;;;;;;;;;;;;30299:24;:55;;;;;30328:15;:26;30344:9;30328:26;;;;;;;;;;;;;;;;;;;;;;;;;30327:27;30299:55;30296:171;;;30394:12;;30383:7;:23;;30375:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30296:171;30501:9;30484:44;;30493:6;30484:44;;;30512:15;30484:44;;;;;;;;;;;;;;;;;;29742:794;;;;;;;;;:::o;20958:642::-;21061:15;21078:23;21103:12;21117:23;21142:12;21156:18;21178:19;21189:7;21178:10;:19::i;:::-;21060:137;;;;;;;;;;;;21226:28;21246:7;21226;:15;21234:6;21226:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21208:7;:15;21216:6;21208:15;;;;;;;;;;;;;;;:46;;;;21283:28;21303:7;21283;:15;21291:6;21283:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;21265:7;:15;21273:6;21265:15;;;;;;;;;;;;;;;:46;;;;21343:39;21366:15;21343:7;:18;21351:9;21343:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;21322:7;:18;21330:9;21322:18;;;;;;;;;;;;;;;:60;;;;21414:39;21437:15;21414:7;:18;21422:9;21414:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;21393:7;:18;21401:9;21393:18;;;;;;;;;;;;;;;:60;;;;21472:26;21487:10;21472:14;:26::i;:::-;21509:23;21521:4;21527;21509:11;:23::i;:::-;21565:9;21548:44;;21557:6;21548:44;;;21576:15;21548:44;;;;;;;;;;;;;;;;;;20958:642;;;;;;;;;:::o;24978:198::-;25045:29;;25021:21;:53;;;;25100:21;;25084:13;:37;;;;25147:21;;25131:13;:37;;;;24978:198::o;24196:182::-;24274:7;24301:69;24354:5;24301:34;24313:21;;24301:7;:11;;:34;;;;:::i;:::-;:38;;:69;;;;:::i;:::-;24294:76;;24196:182;;;:::o;24386:166::-;24456:7;24483:61;24528:5;24483:26;24495:13;;24483:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;24476:68;;24386:166;;;:::o;23829:355::-;23892:19;23915:10;:8;:10::i;:::-;23892:33;;23936:18;23957:27;23972:11;23957:10;:14;;:27;;;;:::i;:::-;23936:48;;24020:38;24047:10;24020:7;:22;24036:4;24020:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;23995:7;:22;24011:4;23995:22;;;;;;;;;;;;;;;:63;;;;24072:11;:26;24092:4;24072:26;;;;;;;;;;;;;;;;;;;;;;;;;24069:107;;;24138:38;24165:10;24138:7;:22;24154:4;24138:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;24113:7;:22;24129:4;24113:22;;;;;;;;;;;;;;;:63;;;;24069:107;23829:355;;;:::o;21714:147::-;21792:17;21804:4;21792:7;;:11;;:17;;;;:::i;:::-;21782:7;:27;;;;21833:20;21848:4;21833:10;;:14;;:20;;;;:::i;:::-;21820:10;:33;;;;21714:147;;:::o

Swarm Source

ipfs://ed2fb60fc573fae0de0f270a10d88be884658f5a5f450ca84ad1f1359caf67d8
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.