ETH Price: $3,162.00 (+1.35%)
Gas: 1 Gwei

Token

Stellar (STR)
 

Overview

Max Total Supply

500,000,000 STR

Holders

69

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1,719,024.789453621 STR

Value
$0.00
0xe27e25e1ec99f6e6d6a80a9a26ed313b8c302f57
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:
Stellar

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-06-03
*/

/**
 *Submitted for verification at Arbiscan.io on 2023-04-11
*/

/**
*/

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;



abstract contract Context {

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

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

interface IERC20 {

    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        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 {
            
            if (returndata.length > 0) {
                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;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

contract Stellar is Context, IERC20, Ownable {
    
    using SafeMath for uint256;
    using Address for address;
    
    string private _name = "Stellar";
    string private _symbol = "STR";
    uint8 private _decimals = 9;

    address payable public marketingWalletAddress = payable(0xF2236BBd938AF426AFfF073E8998cdaa838b3922);
    address payable public DevFee = payable(0xF2236BBd938AF426AFfF073E8998cdaa838b3922);
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => uint256) _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isWalletLimitExempt;
    mapping (address => bool) public isTxLimitExempt;
    mapping (address => bool) public isMarketPair;

    uint256 private _buyLiquidityFee = 1;
    uint256 private _buyMarketingFee = 2;
    uint256 private _buyDevFee = 2;
    uint256 private _sellLiquidityFee = 5;
    uint256 private _sellMarketingFee = 5;
    uint256 private _sellDevFee = 15;

    uint256 private _liquidityShare = 1;
    uint256 private _marketingShare = 2;
    uint256 private _devShare = 2;

    uint256 public _totalTaxIfBuying = 4;
    uint256 public _totalTaxIfSelling = 25;
    uint256 private _totalDistributionShares = 29;

    uint256 public _totalSupply = 500 * 10**6 * 10**9;
    uint256 private _maxTxAmount = 500 * 10**6 * 10**9;
    uint256 private _walletMax = 500 * 10**6 * 10**9;
    uint256 private minimumTokensBeforeSwap = 25000 * 10**9; 

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

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

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

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

        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        
        _totalTaxIfBuying = _buyLiquidityFee.add(_buyMarketingFee).add(_buyDevFee);
        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_devShare);

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

        isMarketPair[address(uniswapPair)] = true;

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

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

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

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

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

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

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

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

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

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "BEP20: approve from the zero address");
        require(spender != address(0), "BEP20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function addMarketPair(address account) public onlyOwner {
        isMarketPair[account] = true;
    }

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

    function setBuyTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevTax) external onlyOwner() {
        _buyLiquidityFee = newLiquidityTax;
        _buyMarketingFee = newMarketingTax;
        _buyDevFee = newDevTax;

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

    function setSellTaxes(uint256 newLiquidityTax, uint256 newMarketingTax, uint256 newDevTax) external onlyOwner() {
        _sellLiquidityFee = newLiquidityTax;
        _sellMarketingFee = newMarketingTax;
        _sellDevFee = newDevTax;

        _totalTaxIfSelling = _sellLiquidityFee.add(_sellMarketingFee).add(_sellDevFee);
    }
    
    function setDistributionSettings(uint256 newLiquidityShare, uint256 newMarketingShare, uint256 newdevShare) external onlyOwner() {
        _liquidityShare = newLiquidityShare;
        _marketingShare = newMarketingShare;
        _devShare = newdevShare;

        _totalDistributionShares = _liquidityShare.add(_marketingShare).add(_devShare);
    }

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

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setDevFeeAddress(address newAddress) external onlyOwner() {
        DevFee = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function changeRouterVersion(address newRouterAddress) public onlyOwner returns(address newPairAddress) {

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(newRouterAddress); 

        newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory()).getPair(address(this), _uniswapV2Router.WETH());

        if(newPairAddress == address(0)) //Create If Doesnt exist
        {
            newPairAddress = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());
        }

        uniswapPair = newPairAddress; //Set new pair address
        uniswapV2Router = _uniswapV2Router; //Set new router address

        isWalletLimitExempt[address(uniswapPair)] = true;
        isMarketPair[address(uniswapPair)] = true;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        uint256 totalBNBFee = _totalDistributionShares.sub(_liquidityShare.div(2));
        
        uint256 amountBNBLiquidity = amountReceived.mul(_liquidityShare).div(totalBNBFee).div(2);
        uint256 amountBNBDev = amountReceived.mul(_devShare).div(totalBNBFee);
        uint256 amountBNBMarketing = amountReceived.sub(amountBNBLiquidity).sub(amountBNBDev);

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

        if(amountBNBDev > 0)
            transferToAddressETH(DevFee, amountBNBDev);

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

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

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

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

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

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

        return amount.sub(feeAmount);
    }
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DevFee","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addMarketPair","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":[{"internalType":"address","name":"newRouterAddress","type":"address"}],"name":"changeRouterVersion","outputs":[{"internalType":"address","name":"newPairAddress","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"checkWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isTxLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isWalletLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setDevFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newdevShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLiquidityTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevTax","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"waiveOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600781526020017f5374656c6c617200000000000000000000000000000000000000000000000000815250600290816200004a919062000d7b565b506040518060400160405280600381526020017f53545200000000000000000000000000000000000000000000000000000000008152506003908162000091919062000d7b565b506009600460006101000a81548160ff021916908360ff16021790555073f2236bbd938af426afff073e8998cdaa838b3922600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073f2236bbd938af426afff073e8998cdaa838b3922600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506001600c556002600d556002600e556005600f556005601055600f60115560016012556002601355600260145560046015556019601655601d6017556706f05b59d3b200006018556706f05b59d3b200006019556706f05b59d3b20000601a556516bcc41e9000601b556001601d60156101000a81548160ff0219169083151502179055506000601d60166101000a81548160ff0219169083151502179055506001601d60176101000a81548160ff0219169083151502179055503480156200025557600080fd5b5060006200026862000a6d60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200036b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000391919062000ecc565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041f919062000ecc565b6040518363ffffffff1660e01b81526004016200043e92919062000f0f565b6020604051808303816000875af11580156200045e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000484919062000ecc565b601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601854600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600160086000620005c062000a7560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006a2600e546200068e600d54600c5462000a9e60201b6200222e1790919060201c565b62000a9e60201b6200222e1790919060201c565b601581905550620006e1601154620006cd601054600f5462000a9e60201b6200222e1790919060201c565b62000a9e60201b6200222e1790919060201c565b601681905550620007206014546200070c60135460125462000a9e60201b6200222e1790919060201c565b62000a9e60201b6200222e1790919060201c565b6017819055506001600960006200073c62000a7560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600960003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60006200087562000a7560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600a60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060185460066000620009af62000a6d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620009fd62000a6d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60185460405162000a5e919062000f4d565b60405180910390a35062001057565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600080828462000aaf919062000f99565b90508381101562000af7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aee9062001035565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000b8357607f821691505b60208210810362000b995762000b9862000b3b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bc4565b62000c0f868362000bc4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000c5c62000c5662000c508462000c27565b62000c31565b62000c27565b9050919050565b6000819050919050565b62000c788362000c3b565b62000c9062000c878262000c63565b84845462000bd1565b825550505050565b600090565b62000ca762000c98565b62000cb481848462000c6d565b505050565b5b8181101562000cdc5762000cd060008262000c9d565b60018101905062000cba565b5050565b601f82111562000d2b5762000cf58162000b9f565b62000d008462000bb4565b8101602085101562000d10578190505b62000d2862000d1f8562000bb4565b83018262000cb9565b50505b505050565b600082821c905092915050565b600062000d506000198460080262000d30565b1980831691505092915050565b600062000d6b838362000d3d565b9150826002028217905092915050565b62000d868262000b01565b67ffffffffffffffff81111562000da25762000da162000b0c565b5b62000dae825462000b6a565b62000dbb82828562000ce0565b600060209050601f83116001811462000df3576000841562000dde578287015190505b62000dea858262000d5d565b86555062000e5a565b601f19841662000e038662000b9f565b60005b8281101562000e2d5784890151825560018201915060208501945060208101905062000e06565b8683101562000e4d578489015162000e49601f89168262000d3d565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e948262000e67565b9050919050565b62000ea68162000e87565b811462000eb257600080fd5b50565b60008151905062000ec68162000e9b565b92915050565b60006020828403121562000ee55762000ee462000e62565b5b600062000ef58482850162000eb5565b91505092915050565b62000f098162000e87565b82525050565b600060408201905062000f26600083018562000efe565b62000f35602083018462000efe565b9392505050565b62000f478162000c27565b82525050565b600060208201905062000f64600083018462000f3c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000fa68262000c27565b915062000fb38362000c27565b925082820190508082111562000fce5762000fcd62000f6a565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200101d601b8362000fd4565b91506200102a8262000fe5565b602082019050919050565b6000602082019050818103600083015262001050816200100e565b9050919050565b6080516144a66200107a60003960008181610d970152610dc301526144a66000f3fe6080604052600436106102555760003560e01c80638b42507f11610139578063c867d60b116100b6578063e207a92b1161007a578063e207a92b14610921578063ef422a181461094a578063f0cd1dac14610973578063f2fde38b1461099e578063f84ba65d146109c7578063f872858a146109f05761025c565b8063c867d60b14610828578063d158272d14610865578063d687b4d114610890578063da00097d146108b9578063dd62ed3e146108e45761025c565b8063a5d69d1f116100fd578063a5d69d1f14610745578063a9059cbb1461076e578063c2d4640e146107ab578063c49b9a80146107d4578063c816841b146107fd5761025c565b80638b42507f1461065e5780638da5cb5b1461069b578063914eb66a146106c657806395d89b41146106dd578063a457c2d7146107085761025c565b806339509351116101d25780634cb80fd5116101965780634cb80fd5146105285780635342acb4146105515780635881f3ef1461058e5780635997ed4c146105cb57806370a08231146105f657806382eefb43146106335761025c565b8063395093511461042f5780633b97084a1461046c5780633eaaf86b146104955780633ecad271146104c05780634a74bb02146104fd5761025c565b80631870517a116102195780631870517a1461034857806323b872dd1461037157806327c8f835146103ae5780632b112e49146103d9578063313ce567146104045761025c565b806306fdde0314610261578063087332141461028c578063095ea7b3146102b55780631694505e146102f257806318160ddd1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a1b565b604051610283919061363c565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613699565b610aad565b005b3480156102c157600080fd5b506102dc60048036038101906102d7919061374a565b610b8d565b6040516102e991906137a5565b60405180910390f35b3480156102fe57600080fd5b50610307610bab565b604051610314919061381f565b60405180910390f35b34801561032957600080fd5b50610332610bd1565b60405161033f9190613849565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190613699565b610bdb565b005b34801561037d57600080fd5b5061039860048036038101906103939190613864565b610cbb565b6040516103a591906137a5565b60405180910390f35b3480156103ba57600080fd5b506103c3610d95565b6040516103d091906138c6565b60405180910390f35b3480156103e557600080fd5b506103ee610db9565b6040516103fb9190613849565b60405180910390f35b34801561041057600080fd5b50610419610dfd565b60405161042691906138fd565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061374a565b610e14565b60405161046391906137a5565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613918565b610ec7565b005b3480156104a157600080fd5b506104aa610f66565b6040516104b79190613849565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613945565b610f6c565b6040516104f491906137a5565b60405180910390f35b34801561050957600080fd5b50610512610f8c565b60405161051f91906137a5565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613945565b610f9f565b005b34801561055d57600080fd5b5061057860048036038101906105739190613945565b611078565b60405161058591906137a5565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613945565b611098565b6040516105c291906138c6565b60405180910390f35b3480156105d757600080fd5b506105e061159b565b6040516105ed9190613993565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613945565b6115c1565b60405161062a9190613849565b60405180910390f35b34801561063f57600080fd5b5061064861160a565b6040516106559190613849565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190613945565b611610565b60405161069291906137a5565b60405180910390f35b3480156106a757600080fd5b506106b0611630565b6040516106bd91906138c6565b60405180910390f35b3480156106d257600080fd5b506106db611659565b005b3480156106e957600080fd5b506106f26117ac565b6040516106ff919061363c565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a919061374a565b61183e565b60405161073c91906137a5565b60405180910390f35b34801561075157600080fd5b5061076c600480360381019061076791906139da565b61190b565b005b34801561077a57600080fd5b506107956004803603810190610790919061374a565b6119bd565b6040516107a291906137a5565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd9190613699565b6119dc565b005b3480156107e057600080fd5b506107fb60048036038101906107f691906139da565b611abc565b005b34801561080957600080fd5b50610812611ba5565b60405161081f91906138c6565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190613945565b611bcb565b60405161085c91906137a5565b60405180910390f35b34801561087157600080fd5b5061087a611beb565b6040516108879190613993565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190613945565b611c11565b005b3480156108c557600080fd5b506108ce611cea565b6040516108db91906137a5565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613a07565b611cfd565b6040516109189190613849565b60405180910390f35b34801561092d57600080fd5b5061094860048036038101906109439190613945565b611d84565b005b34801561095657600080fd5b50610971600480360381019061096c9190613a47565b611e74565b005b34801561097f57600080fd5b50610988611f64565b6040516109959190613849565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190613945565b611f6a565b005b3480156109d357600080fd5b506109ee60048036038101906109e99190613a47565b61212b565b005b3480156109fc57600080fd5b50610a0561221b565b604051610a1291906137a5565b60405180910390f35b606060028054610a2a90613ab6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690613ab6565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b610ab561228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990613b33565b60405180910390fd5b82600f819055508160108190555080601181905550610b82601154610b74601054600f5461222e90919063ffffffff16565b61222e90919063ffffffff16565b601681905550505050565b6000610ba1610b9a61228c565b8484612294565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610be361228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6790613b33565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610cb0600e54610ca2600d54600c5461222e90919063ffffffff16565b61222e90919063ffffffff16565b601581905550505050565b6000610cc884848461245d565b50610d8a84610cd561228c565b610d858560405180606001604052806028815260200161442460289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d3b61228c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a409092919063ffffffff16565b612294565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610df8610de77f00000000000000000000000000000000000000000000000000000000000000006115c1565b601854612aa490919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b6000610ebd610e2161228c565b84610eb88560076000610e3261228c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461222e90919063ffffffff16565b612294565b6001905092915050565b610ecf61228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5390613b33565b60405180910390fd5b80601b8190555050565b60185481565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b610fa761228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613b33565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60006110a261228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690613b33565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190613b68565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561120a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122e9190613b68565b6040518363ffffffff1660e01b815260040161124b929190613b95565b602060405180830381865afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c9190613b68565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361141f578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190613b68565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611398573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bc9190613b68565b6040518363ffffffff1660e01b81526004016113d9929190613b95565b6020604051808303816000875af11580156113f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141c9190613b68565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60165481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166161228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613b33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600380546117bb90613ab6565b80601f01602080910402602001604051908101604052809291908181526020018280546117e790613ab6565b80156118345780601f1061180957610100808354040283529160200191611834565b820191906000526020600020905b81548152906001019060200180831161181757829003601f168201915b5050505050905090565b600061190161184b61228c565b846118fc8560405180606001604052806025815260200161444c602591396007600061187561228c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a409092919063ffffffff16565b612294565b6001905092915050565b61191361228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790613b33565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006119d16119ca61228c565b848461245d565b506001905092915050565b6119e461228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890613b33565b60405180910390fd5b826012819055508160138190555080601481905550611ab1601454611aa360135460125461222e90919063ffffffff16565b61222e90919063ffffffff16565b601781905550505050565b611ac461228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890613b33565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611b9a91906137a5565b60405180910390a150565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c1961228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9d90613b33565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d8c61228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090613b33565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e7c61228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0090613b33565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611f7261228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690613b33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590613c30565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61213361228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b790613b33565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600080828461223d9190613c7f565b905083811015612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990613cff565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90613d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990613e23565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124509190613849565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c490613eb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253390613f47565b60405180910390fd5b601d60149054906101000a900460ff16156125635761255c848484612aee565b9050612a39565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126075750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561265257601954821115612651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264890613fd9565b60405180910390fd5b5b600061265d306115c1565b90506000601b5482101590508080156126835750601d60149054906101000a900460ff16155b80156126d95750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126f15750601d60159054906101000a900460ff165b1561271b57601d60169054906101000a900460ff161561271157601b5491505b61271a82612cc1565b5b6127a4846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a409092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061288a5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61289e57612899878787612eb2565b6128a0565b845b9050601d60179054906101000a900460ff1680156129085750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561293757601a5461292b8261291d896115c1565b61222e90919063ffffffff16565b111561293657600080fd5b5b61298981600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461222e90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a299190613849565b60405180910390a3600193505050505b9392505050565b6000838311158290612a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f919061363c565b60405180910390fd5b5060008385612a979190613ff9565b9050809150509392505050565b6000612ae683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a40565b905092915050565b6000612b79826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a409092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c0e82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461222e90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cae9190613849565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612d1a6002612d0c601754612cfe601254876130d990919063ffffffff16565b61315390919063ffffffff16565b61315390919063ffffffff16565b90506000612d318284612aa490919063ffffffff16565b9050612d3c8161319d565b60004790506000612d6d612d5c600260125461315390919063ffffffff16565b601754612aa490919063ffffffff16565b90506000612dab6002612d9d84612d8f601254886130d990919063ffffffff16565b61315390919063ffffffff16565b61315390919063ffffffff16565b90506000612dd683612dc8601454876130d990919063ffffffff16565b61315390919063ffffffff16565b90506000612dff82612df18588612aa490919063ffffffff16565b612aa490919063ffffffff16565b90506000811115612e3757612e36600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613419565b5b6000821115612e6d57612e6c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613419565b5b600083118015612e7d5750600087115b15612e8d57612e8c8784613464565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f3a57612f336064612f25601554866130d990919063ffffffff16565b61315390919063ffffffff16565b9050612fb8565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612fb757612fb46064612fa6601654866130d990919063ffffffff16565b61315390919063ffffffff16565b90505b5b60008111156130bc5761301381600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461222e90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130b39190613849565b60405180910390a35b6130cf8184612aa490919063ffffffff16565b9150509392505050565b60008083036130eb576000905061314d565b600082846130f9919061402d565b905082848261310891906140b6565b14613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90614159565b60405180910390fd5b809150505b92915050565b600061319583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613549565b905092915050565b6000600267ffffffffffffffff8111156131ba576131b9614179565b5b6040519080825280602002602001820160405280156131e85781602001602082028036833780820191505090505b5090503081600081518110613200576131ff6141a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cb9190613b68565b816001815181106132df576132de6141a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061334630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612294565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133aa9594939291906142d0565b600060405180830381600087803b1580156133c457600080fd5b505af11580156133d8573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161340d92919061432a565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561345f573d6000803e3d6000fd5b505050565b61349130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612294565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806134dd611630565b426040518863ffffffff1660e01b81526004016134ff9695949392919061435a565b60606040518083038185885af115801561351d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061354291906143d0565b5050505050565b60008083118290613590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613587919061363c565b60405180910390fd5b506000838561359f91906140b6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135e65780820151818401526020810190506135cb565b60008484015250505050565b6000601f19601f8301169050919050565b600061360e826135ac565b61361881856135b7565b93506136288185602086016135c8565b613631816135f2565b840191505092915050565b600060208201905081810360008301526136568184613603565b905092915050565b600080fd5b6000819050919050565b61367681613663565b811461368157600080fd5b50565b6000813590506136938161366d565b92915050565b6000806000606084860312156136b2576136b161365e565b5b60006136c086828701613684565b93505060206136d186828701613684565b92505060406136e286828701613684565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613717826136ec565b9050919050565b6137278161370c565b811461373257600080fd5b50565b6000813590506137448161371e565b92915050565b600080604083850312156137615761376061365e565b5b600061376f85828601613735565b925050602061378085828601613684565b9150509250929050565b60008115159050919050565b61379f8161378a565b82525050565b60006020820190506137ba6000830184613796565b92915050565b6000819050919050565b60006137e56137e06137db846136ec565b6137c0565b6136ec565b9050919050565b60006137f7826137ca565b9050919050565b6000613809826137ec565b9050919050565b613819816137fe565b82525050565b60006020820190506138346000830184613810565b92915050565b61384381613663565b82525050565b600060208201905061385e600083018461383a565b92915050565b60008060006060848603121561387d5761387c61365e565b5b600061388b86828701613735565b935050602061389c86828701613735565b92505060406138ad86828701613684565b9150509250925092565b6138c08161370c565b82525050565b60006020820190506138db60008301846138b7565b92915050565b600060ff82169050919050565b6138f7816138e1565b82525050565b600060208201905061391260008301846138ee565b92915050565b60006020828403121561392e5761392d61365e565b5b600061393c84828501613684565b91505092915050565b60006020828403121561395b5761395a61365e565b5b600061396984828501613735565b91505092915050565b600061397d826136ec565b9050919050565b61398d81613972565b82525050565b60006020820190506139a86000830184613984565b92915050565b6139b78161378a565b81146139c257600080fd5b50565b6000813590506139d4816139ae565b92915050565b6000602082840312156139f0576139ef61365e565b5b60006139fe848285016139c5565b91505092915050565b60008060408385031215613a1e57613a1d61365e565b5b6000613a2c85828601613735565b9250506020613a3d85828601613735565b9150509250929050565b60008060408385031215613a5e57613a5d61365e565b5b6000613a6c85828601613735565b9250506020613a7d858286016139c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ace57607f821691505b602082108103613ae157613ae0613a87565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b1d6020836135b7565b9150613b2882613ae7565b602082019050919050565b60006020820190508181036000830152613b4c81613b10565b9050919050565b600081519050613b628161371e565b92915050565b600060208284031215613b7e57613b7d61365e565b5b6000613b8c84828501613b53565b91505092915050565b6000604082019050613baa60008301856138b7565b613bb760208301846138b7565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c1a6026836135b7565b9150613c2582613bbe565b604082019050919050565b60006020820190508181036000830152613c4981613c0d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c8a82613663565b9150613c9583613663565b9250828201905080821115613cad57613cac613c50565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ce9601b836135b7565b9150613cf482613cb3565b602082019050919050565b60006020820190508181036000830152613d1881613cdc565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613d7b6024836135b7565b9150613d8682613d1f565b604082019050919050565b60006020820190508181036000830152613daa81613d6e565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0d6022836135b7565b9150613e1882613db1565b604082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e9f6025836135b7565b9150613eaa82613e43565b604082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f316023836135b7565b9150613f3c82613ed5565b604082019050919050565b60006020820190508181036000830152613f6081613f24565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613fc36028836135b7565b9150613fce82613f67565b604082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b600061400482613663565b915061400f83613663565b925082820390508181111561402757614026613c50565b5b92915050565b600061403882613663565b915061404383613663565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561407c5761407b613c50565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140c182613663565b91506140cc83613663565b9250826140dc576140db614087565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006141436021836135b7565b915061414e826140e7565b604082019050919050565b6000602082019050818103600083015261417281614136565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006141fc6141f76141f2846141d7565b6137c0565b613663565b9050919050565b61420c816141e1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142478161370c565b82525050565b6000614259838361423e565b60208301905092915050565b6000602082019050919050565b600061427d82614212565b614287818561421d565b93506142928361422e565b8060005b838110156142c35781516142aa888261424d565b97506142b583614265565b925050600181019050614296565b5085935050505092915050565b600060a0820190506142e5600083018861383a565b6142f26020830187614203565b81810360408301526143048186614272565b905061431360608301856138b7565b614320608083018461383a565b9695505050505050565b600060408201905061433f600083018561383a565b81810360208301526143518184614272565b90509392505050565b600060c08201905061436f60008301896138b7565b61437c602083018861383a565b6143896040830187614203565b6143966060830186614203565b6143a360808301856138b7565b6143b060a083018461383a565b979650505050505050565b6000815190506143ca8161366d565b92915050565b6000806000606084860312156143e9576143e861365e565b5b60006143f7868287016143bb565b9350506020614408868287016143bb565b9250506040614419868287016143bb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204988905d6121b7a94f5f96e9170d3e5debabd198167838b65f39461df0e7141b64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102555760003560e01c80638b42507f11610139578063c867d60b116100b6578063e207a92b1161007a578063e207a92b14610921578063ef422a181461094a578063f0cd1dac14610973578063f2fde38b1461099e578063f84ba65d146109c7578063f872858a146109f05761025c565b8063c867d60b14610828578063d158272d14610865578063d687b4d114610890578063da00097d146108b9578063dd62ed3e146108e45761025c565b8063a5d69d1f116100fd578063a5d69d1f14610745578063a9059cbb1461076e578063c2d4640e146107ab578063c49b9a80146107d4578063c816841b146107fd5761025c565b80638b42507f1461065e5780638da5cb5b1461069b578063914eb66a146106c657806395d89b41146106dd578063a457c2d7146107085761025c565b806339509351116101d25780634cb80fd5116101965780634cb80fd5146105285780635342acb4146105515780635881f3ef1461058e5780635997ed4c146105cb57806370a08231146105f657806382eefb43146106335761025c565b8063395093511461042f5780633b97084a1461046c5780633eaaf86b146104955780633ecad271146104c05780634a74bb02146104fd5761025c565b80631870517a116102195780631870517a1461034857806323b872dd1461037157806327c8f835146103ae5780632b112e49146103d9578063313ce567146104045761025c565b806306fdde0314610261578063087332141461028c578063095ea7b3146102b55780631694505e146102f257806318160ddd1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a1b565b604051610283919061363c565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613699565b610aad565b005b3480156102c157600080fd5b506102dc60048036038101906102d7919061374a565b610b8d565b6040516102e991906137a5565b60405180910390f35b3480156102fe57600080fd5b50610307610bab565b604051610314919061381f565b60405180910390f35b34801561032957600080fd5b50610332610bd1565b60405161033f9190613849565b60405180910390f35b34801561035457600080fd5b5061036f600480360381019061036a9190613699565b610bdb565b005b34801561037d57600080fd5b5061039860048036038101906103939190613864565b610cbb565b6040516103a591906137a5565b60405180910390f35b3480156103ba57600080fd5b506103c3610d95565b6040516103d091906138c6565b60405180910390f35b3480156103e557600080fd5b506103ee610db9565b6040516103fb9190613849565b60405180910390f35b34801561041057600080fd5b50610419610dfd565b60405161042691906138fd565b60405180910390f35b34801561043b57600080fd5b506104566004803603810190610451919061374a565b610e14565b60405161046391906137a5565b60405180910390f35b34801561047857600080fd5b50610493600480360381019061048e9190613918565b610ec7565b005b3480156104a157600080fd5b506104aa610f66565b6040516104b79190613849565b60405180910390f35b3480156104cc57600080fd5b506104e760048036038101906104e29190613945565b610f6c565b6040516104f491906137a5565b60405180910390f35b34801561050957600080fd5b50610512610f8c565b60405161051f91906137a5565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190613945565b610f9f565b005b34801561055d57600080fd5b5061057860048036038101906105739190613945565b611078565b60405161058591906137a5565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b09190613945565b611098565b6040516105c291906138c6565b60405180910390f35b3480156105d757600080fd5b506105e061159b565b6040516105ed9190613993565b60405180910390f35b34801561060257600080fd5b5061061d60048036038101906106189190613945565b6115c1565b60405161062a9190613849565b60405180910390f35b34801561063f57600080fd5b5061064861160a565b6040516106559190613849565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190613945565b611610565b60405161069291906137a5565b60405180910390f35b3480156106a757600080fd5b506106b0611630565b6040516106bd91906138c6565b60405180910390f35b3480156106d257600080fd5b506106db611659565b005b3480156106e957600080fd5b506106f26117ac565b6040516106ff919061363c565b60405180910390f35b34801561071457600080fd5b5061072f600480360381019061072a919061374a565b61183e565b60405161073c91906137a5565b60405180910390f35b34801561075157600080fd5b5061076c600480360381019061076791906139da565b61190b565b005b34801561077a57600080fd5b506107956004803603810190610790919061374a565b6119bd565b6040516107a291906137a5565b60405180910390f35b3480156107b757600080fd5b506107d260048036038101906107cd9190613699565b6119dc565b005b3480156107e057600080fd5b506107fb60048036038101906107f691906139da565b611abc565b005b34801561080957600080fd5b50610812611ba5565b60405161081f91906138c6565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190613945565b611bcb565b60405161085c91906137a5565b60405180910390f35b34801561087157600080fd5b5061087a611beb565b6040516108879190613993565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190613945565b611c11565b005b3480156108c557600080fd5b506108ce611cea565b6040516108db91906137a5565b60405180910390f35b3480156108f057600080fd5b5061090b60048036038101906109069190613a07565b611cfd565b6040516109189190613849565b60405180910390f35b34801561092d57600080fd5b5061094860048036038101906109439190613945565b611d84565b005b34801561095657600080fd5b50610971600480360381019061096c9190613a47565b611e74565b005b34801561097f57600080fd5b50610988611f64565b6040516109959190613849565b60405180910390f35b3480156109aa57600080fd5b506109c560048036038101906109c09190613945565b611f6a565b005b3480156109d357600080fd5b506109ee60048036038101906109e99190613a47565b61212b565b005b3480156109fc57600080fd5b50610a0561221b565b604051610a1291906137a5565b60405180910390f35b606060028054610a2a90613ab6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5690613ab6565b8015610aa35780601f10610a7857610100808354040283529160200191610aa3565b820191906000526020600020905b815481529060010190602001808311610a8657829003601f168201915b5050505050905090565b610ab561228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3990613b33565b60405180910390fd5b82600f819055508160108190555080601181905550610b82601154610b74601054600f5461222e90919063ffffffff16565b61222e90919063ffffffff16565b601681905550505050565b6000610ba1610b9a61228c565b8484612294565b6001905092915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000601854905090565b610be361228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6790613b33565b60405180910390fd5b82600c8190555081600d8190555080600e81905550610cb0600e54610ca2600d54600c5461222e90919063ffffffff16565b61222e90919063ffffffff16565b601581905550505050565b6000610cc884848461245d565b50610d8a84610cd561228c565b610d858560405180606001604052806028815260200161442460289139600760008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610d3b61228c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a409092919063ffffffff16565b612294565b600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000610df8610de77f000000000000000000000000000000000000000000000000000000000000dead6115c1565b601854612aa490919063ffffffff16565b905090565b6000600460009054906101000a900460ff16905090565b6000610ebd610e2161228c565b84610eb88560076000610e3261228c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461222e90919063ffffffff16565b612294565b6001905092915050565b610ecf61228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5390613b33565b60405180910390fd5b80601b8190555050565b60185481565b600b6020528060005260406000206000915054906101000a900460ff1681565b601d60159054906101000a900460ff1681565b610fa761228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611034576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102b90613b33565b60405180910390fd5b80600460016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60006110a261228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461112f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112690613b33565b60405180910390fd5b60008290508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561117f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a39190613b68565b73ffffffffffffffffffffffffffffffffffffffff1663e6a43905308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561120a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061122e9190613b68565b6040518363ffffffff1660e01b815260040161124b929190613b95565b602060405180830381865afa158015611268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128c9190613b68565b9150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361141f578073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561130d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113319190613b68565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611398573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bc9190613b68565b6040518363ffffffff1660e01b81526004016113d9929190613b95565b6020604051808303816000875af11580156113f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061141c9190613b68565b91505b81601d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160096000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600b6000601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050919050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60165481565b600a6020528060005260406000206000915054906101000a900460ff1681565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61166161228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e590613b33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6060600380546117bb90613ab6565b80601f01602080910402602001604051908101604052809291908181526020018280546117e790613ab6565b80156118345780601f1061180957610100808354040283529160200191611834565b820191906000526020600020905b81548152906001019060200180831161181757829003601f168201915b5050505050905090565b600061190161184b61228c565b846118fc8560405180606001604052806025815260200161444c602591396007600061187561228c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a409092919063ffffffff16565b612294565b6001905092915050565b61191361228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790613b33565b60405180910390fd5b80601d60166101000a81548160ff02191690831515021790555050565b60006119d16119ca61228c565b848461245d565b506001905092915050565b6119e461228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890613b33565b60405180910390fd5b826012819055508160138190555080601481905550611ab1601454611aa360135460125461222e90919063ffffffff16565b61222e90919063ffffffff16565b601781905550505050565b611ac461228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4890613b33565b60405180910390fd5b80601d60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15981604051611b9a91906137a5565b60405180910390a150565b601d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60096020528060005260406000206000915054906101000a900460ff1681565b600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611c1961228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ca6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9d90613b33565b60405180910390fd5b80600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d60169054906101000a900460ff1681565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611d8c61228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1090613b33565b60405180910390fd5b6001600b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611e7c61228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f09576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f0090613b33565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b611f7261228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff690613b33565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361206e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206590613c30565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61213361228c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b790613b33565b60405180910390fd5b80600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b601d60179054906101000a900460ff1681565b600080828461223d9190613c7f565b905083811015612282576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161227990613cff565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612303576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122fa90613d91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612372576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236990613e23565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124509190613849565b60405180910390a3505050565b60008073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036124cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c490613eb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253390613f47565b60405180910390fd5b601d60149054906101000a900460ff16156125635761255c848484612aee565b9050612a39565b600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156126075750600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561265257601954821115612651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161264890613fd9565b60405180910390fd5b5b600061265d306115c1565b90506000601b5482101590508080156126835750601d60149054906101000a900460ff16155b80156126d95750600b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156126f15750601d60159054906101000a900460ff165b1561271b57601d60169054906101000a900460ff161561271157601b5491505b61271a82612cc1565b5b6127a4846040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a409092919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600860008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061288a5750600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b61289e57612899878787612eb2565b6128a0565b845b9050601d60179054906101000a900460ff1680156129085750600960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561293757601a5461292b8261291d896115c1565b61222e90919063ffffffff16565b111561293657600080fd5b5b61298981600660008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461222e90919063ffffffff16565b600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612a299190613849565b60405180910390a3600193505050505b9392505050565b6000838311158290612a88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7f919061363c565b60405180910390fd5b5060008385612a979190613ff9565b9050809150509392505050565b6000612ae683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612a40565b905092915050565b6000612b79826040518060400160405280601481526020017f496e73756666696369656e742042616c616e6365000000000000000000000000815250600660008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a409092919063ffffffff16565b600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612c0e82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461222e90919063ffffffff16565b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612cae9190613849565b60405180910390a3600190509392505050565b6001601d60146101000a81548160ff0219169083151502179055506000612d1a6002612d0c601754612cfe601254876130d990919063ffffffff16565b61315390919063ffffffff16565b61315390919063ffffffff16565b90506000612d318284612aa490919063ffffffff16565b9050612d3c8161319d565b60004790506000612d6d612d5c600260125461315390919063ffffffff16565b601754612aa490919063ffffffff16565b90506000612dab6002612d9d84612d8f601254886130d990919063ffffffff16565b61315390919063ffffffff16565b61315390919063ffffffff16565b90506000612dd683612dc8601454876130d990919063ffffffff16565b61315390919063ffffffff16565b90506000612dff82612df18588612aa490919063ffffffff16565b612aa490919063ffffffff16565b90506000811115612e3757612e36600460019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682613419565b5b6000821115612e6d57612e6c600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683613419565b5b600083118015612e7d5750600087115b15612e8d57612e8c8784613464565b5b505050505050506000601d60146101000a81548160ff02191690831515021790555050565b60008060009050600b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612f3a57612f336064612f25601554866130d990919063ffffffff16565b61315390919063ffffffff16565b9050612fb8565b600b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612fb757612fb46064612fa6601654866130d990919063ffffffff16565b61315390919063ffffffff16565b90505b5b60008111156130bc5761301381600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461222e90919063ffffffff16565b600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516130b39190613849565b60405180910390a35b6130cf8184612aa490919063ffffffff16565b9150509392505050565b60008083036130eb576000905061314d565b600082846130f9919061402d565b905082848261310891906140b6565b14613148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161313f90614159565b60405180910390fd5b809150505b92915050565b600061319583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613549565b905092915050565b6000600267ffffffffffffffff8111156131ba576131b9614179565b5b6040519080825280602002602001820160405280156131e85781602001602082028036833780820191505090505b5090503081600081518110613200576131ff6141a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156132a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132cb9190613b68565b816001815181106132df576132de6141a8565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061334630601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612294565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016133aa9594939291906142d0565b600060405180830381600087803b1580156133c457600080fd5b505af11580156133d8573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a7828260405161340d92919061432a565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561345f573d6000803e3d6000fd5b505050565b61349130601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612294565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230856000806134dd611630565b426040518863ffffffff1660e01b81526004016134ff9695949392919061435a565b60606040518083038185885af115801561351d573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061354291906143d0565b5050505050565b60008083118290613590576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613587919061363c565b60405180910390fd5b506000838561359f91906140b6565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156135e65780820151818401526020810190506135cb565b60008484015250505050565b6000601f19601f8301169050919050565b600061360e826135ac565b61361881856135b7565b93506136288185602086016135c8565b613631816135f2565b840191505092915050565b600060208201905081810360008301526136568184613603565b905092915050565b600080fd5b6000819050919050565b61367681613663565b811461368157600080fd5b50565b6000813590506136938161366d565b92915050565b6000806000606084860312156136b2576136b161365e565b5b60006136c086828701613684565b93505060206136d186828701613684565b92505060406136e286828701613684565b9150509250925092565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613717826136ec565b9050919050565b6137278161370c565b811461373257600080fd5b50565b6000813590506137448161371e565b92915050565b600080604083850312156137615761376061365e565b5b600061376f85828601613735565b925050602061378085828601613684565b9150509250929050565b60008115159050919050565b61379f8161378a565b82525050565b60006020820190506137ba6000830184613796565b92915050565b6000819050919050565b60006137e56137e06137db846136ec565b6137c0565b6136ec565b9050919050565b60006137f7826137ca565b9050919050565b6000613809826137ec565b9050919050565b613819816137fe565b82525050565b60006020820190506138346000830184613810565b92915050565b61384381613663565b82525050565b600060208201905061385e600083018461383a565b92915050565b60008060006060848603121561387d5761387c61365e565b5b600061388b86828701613735565b935050602061389c86828701613735565b92505060406138ad86828701613684565b9150509250925092565b6138c08161370c565b82525050565b60006020820190506138db60008301846138b7565b92915050565b600060ff82169050919050565b6138f7816138e1565b82525050565b600060208201905061391260008301846138ee565b92915050565b60006020828403121561392e5761392d61365e565b5b600061393c84828501613684565b91505092915050565b60006020828403121561395b5761395a61365e565b5b600061396984828501613735565b91505092915050565b600061397d826136ec565b9050919050565b61398d81613972565b82525050565b60006020820190506139a86000830184613984565b92915050565b6139b78161378a565b81146139c257600080fd5b50565b6000813590506139d4816139ae565b92915050565b6000602082840312156139f0576139ef61365e565b5b60006139fe848285016139c5565b91505092915050565b60008060408385031215613a1e57613a1d61365e565b5b6000613a2c85828601613735565b9250506020613a3d85828601613735565b9150509250929050565b60008060408385031215613a5e57613a5d61365e565b5b6000613a6c85828601613735565b9250506020613a7d858286016139c5565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ace57607f821691505b602082108103613ae157613ae0613a87565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613b1d6020836135b7565b9150613b2882613ae7565b602082019050919050565b60006020820190508181036000830152613b4c81613b10565b9050919050565b600081519050613b628161371e565b92915050565b600060208284031215613b7e57613b7d61365e565b5b6000613b8c84828501613b53565b91505092915050565b6000604082019050613baa60008301856138b7565b613bb760208301846138b7565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613c1a6026836135b7565b9150613c2582613bbe565b604082019050919050565b60006020820190508181036000830152613c4981613c0d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c8a82613663565b9150613c9583613663565b9250828201905080821115613cad57613cac613c50565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ce9601b836135b7565b9150613cf482613cb3565b602082019050919050565b60006020820190508181036000830152613d1881613cdc565b9050919050565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613d7b6024836135b7565b9150613d8682613d1f565b604082019050919050565b60006020820190508181036000830152613daa81613d6e565b9050919050565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0d6022836135b7565b9150613e1882613db1565b604082019050919050565b60006020820190508181036000830152613e3c81613e00565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613e9f6025836135b7565b9150613eaa82613e43565b604082019050919050565b60006020820190508181036000830152613ece81613e92565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613f316023836135b7565b9150613f3c82613ed5565b604082019050919050565b60006020820190508181036000830152613f6081613f24565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000613fc36028836135b7565b9150613fce82613f67565b604082019050919050565b60006020820190508181036000830152613ff281613fb6565b9050919050565b600061400482613663565b915061400f83613663565b925082820390508181111561402757614026613c50565b5b92915050565b600061403882613663565b915061404383613663565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561407c5761407b613c50565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006140c182613663565b91506140cc83613663565b9250826140dc576140db614087565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006141436021836135b7565b915061414e826140e7565b604082019050919050565b6000602082019050818103600083015261417281614136565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b60006141fc6141f76141f2846141d7565b6137c0565b613663565b9050919050565b61420c816141e1565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6142478161370c565b82525050565b6000614259838361423e565b60208301905092915050565b6000602082019050919050565b600061427d82614212565b614287818561421d565b93506142928361422e565b8060005b838110156142c35781516142aa888261424d565b97506142b583614265565b925050600181019050614296565b5085935050505092915050565b600060a0820190506142e5600083018861383a565b6142f26020830187614203565b81810360408301526143048186614272565b905061431360608301856138b7565b614320608083018461383a565b9695505050505050565b600060408201905061433f600083018561383a565b81810360208301526143518184614272565b90509392505050565b600060c08201905061436f60008301896138b7565b61437c602083018861383a565b6143896040830187614203565b6143966060830186614203565b6143a360808301856138b7565b6143b060a083018461383a565b979650505050505050565b6000815190506143ca8161366d565b92915050565b6000806000606084860312156143e9576143e861365e565b5b60006143f7868287016143bb565b9350506020614408868287016143bb565b9250506040614419868287016143bb565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204988905d6121b7a94f5f96e9170d3e5debabd198167838b65f39461df0e7141b64736f6c63430008100033

Deployed Bytecode Sourcemap

14012:14047:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17618:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20029:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18784:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15644:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17895:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19692:329;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22815:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14449:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21457:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17804:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18281:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20740:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15411:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14841:45;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15759:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20872:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14670:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21731:807;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14359:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18003:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15312:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14786:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5551:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5776:145;;;;;;;;;;;;;:::i;:::-;;17709:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18507:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21320:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22640:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20378:354;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21141:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15692:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14727:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14253:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21019:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15806:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18130:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19298:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19549:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15269:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5929:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19410:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15858:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17618:83;17655:13;17688:5;17681:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17618:83;:::o;20029:337::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20172:15:::1;20152:17;:35;;;;20218:15;20198:17;:35;;;;20258:9;20244:11;:23;;;;20301:57;20346:11;;20301:40;20323:17;;20301;;:21;;:40;;;;:::i;:::-;:44;;:57;;;;:::i;:::-;20280:18;:78;;;;20029:337:::0;;;:::o;18784:161::-;18859:4;18876:39;18885:12;:10;:12::i;:::-;18899:7;18908:6;18876:8;:39::i;:::-;18933:4;18926:11;;18784:161;;;;:::o;15644:41::-;;;;;;;;;;;;;:::o;17895:100::-;17948:7;17975:12;;17968:19;;17895:100;:::o;19692:329::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19833:15:::1;19814:16;:34;;;;19878:15;19859:16;:34;;;;19917:9;19904:10;:22;;;;19959:54;20002:10;;19959:38;19980:16;;19959;;:20;;:38;;;;:::i;:::-;:42;;:54;;;;:::i;:::-;19939:17;:74;;;;19692:329:::0;;;:::o;22815:313::-;22913:4;22930:36;22940:6;22948:9;22959:6;22930:9;:36::i;:::-;;22977:121;22986:6;22994:12;:10;:12::i;:::-;23008:89;23046:6;23008:89;;;;;;;;;;;;;;;;;:11;:19;23020:6;23008:19;;;;;;;;;;;;;;;:33;23028:12;:10;:12::i;:::-;23008:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;22977:8;:121::i;:::-;23116:4;23109:11;;22815:313;;;;;:::o;14449:81::-;;;:::o;21457:128::-;21510:7;21537:40;21554:22;21564:11;21554:9;:22::i;:::-;21537:12;;:16;;:40;;;;:::i;:::-;21530:47;;21457:128;:::o;17804:83::-;17845:5;17870:9;;;;;;;;;;;17863:16;;17804:83;:::o;18281:218::-;18369:4;18386:83;18395:12;:10;:12::i;:::-;18409:7;18418:50;18457:10;18418:11;:25;18430:12;:10;:12::i;:::-;18418:25;;;;;;;;;;;;;;;:34;18444:7;18418:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;18386:8;:83::i;:::-;18487:4;18480:11;;18281:218;;;;:::o;20740:124::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20848:8:::1;20822:23;:34;;;;20740:124:::0;:::o;15411:49::-;;;;:::o;14841:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;15759:40::-;;;;;;;;;;;;;:::o;20872:139::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20992:10:::1;20959:22;;:44;;;;;;;;;;;;;;;;;;20872:139:::0;:::o;14670:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;21731:807::-;21811:22;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21848:35:::1;21905:16;21848:74;;21971:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21953:53;;;22015:4;22022:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21953:93;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21936:110;;22088:1;22062:28;;:14;:28;;::::0;22059:225:::1;;22176:16;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22158:74;;;22241:4;22248:16;:21;;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22158:114;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22141:131;;22059:225;22310:14;22296:11;;:28;;;;;;;;;;;;;;;;;;22376:16;22358:15;;:34;;;;;;;;;;;;;;;;;;22474:4;22430:19;:41;22458:11;;;;;;;;;;;22430:41;;;;;;;;;;;;;;;;:48;;;;;;;;;;;;;;;;;;22526:4;22489:12;:34;22510:11;;;;;;;;;;;22489:34;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;21835:703;21731:807:::0;;;:::o;14359:83::-;;;;;;;;;;;;;:::o;18003:119::-;18069:7;18096:9;:18;18106:7;18096:18;;;;;;;;;;;;;;;;18089:25;;18003:119;;;:::o;15312:38::-;;;;:::o;14786:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;5551:79::-;5589:7;5616:6;;;;;;;;;;;5609:13;;5551:79;:::o;5776:145::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;5880:1:::1;5843:40;;5864:6;::::0;::::1;;;;;;;;5843:40;;;;;;;;;;;;5911:1;5894:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;5776:145::o:0;17709:87::-;17748:13;17781:7;17774:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17709:87;:::o;18507:269::-;18600:4;18617:129;18626:12;:10;:12::i;:::-;18640:7;18649:96;18688:15;18649:96;;;;;;;;;;;;;;;;;:11;:25;18661:12;:10;:12::i;:::-;18649:25;;;;;;;;;;;;;;;:34;18675:7;18649:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;18617:8;:129::i;:::-;18764:4;18757:11;;18507:269;;;;:::o;21320:125::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21429:8:::1;21401:25;;:36;;;;;;;;;;;;;;;;;;21320:125:::0;:::o;22640:167::-;22718:4;22735:42;22745:12;:10;:12::i;:::-;22759:9;22770:6;22735:9;:42::i;:::-;;22795:4;22788:11;;22640:167;;;;:::o;20378:354::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20536:17:::1;20518:15;:35;;;;20582:17;20564:15;:35;;;;20622:11;20610:9;:23;;;;20673:51;20714:9;;20673:36;20693:15;;20673;;:19;;:36;;;;:::i;:::-;:40;;:51;;;;:::i;:::-;20646:24;:78;;;;20378:354:::0;;;:::o;21141:171::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21242:8:::1;21218:21;;:32;;;;;;;;;;;;;;;;;;21266:38;21295:8;21266:38;;;;;;:::i;:::-;;;;;;;;21141:171:::0;:::o;15692:26::-;;;;;;;;;;;;;:::o;14727:52::-;;;;;;;;;;;;;;;;;;;;;;:::o;14253:99::-;;;;;;;;;;;;;:::o;21019:114::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;21114:10:::1;21097:6;;:28;;;;;;;;;;;;;;;;;;21019:114:::0;:::o;15806:45::-;;;;;;;;;;;;;:::o;18130:143::-;18211:7;18238:11;:18;18250:5;18238:18;;;;;;;;;;;;;;;:27;18257:7;18238:27;;;;;;;;;;;;;;;;18231:34;;18130:143;;;;:::o;19298:104::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19390:4:::1;19366:12;:21;19379:7;19366:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;19298:104:::0;:::o;19549:135::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19668:8:::1;19639:17;:26;19657:7;19639:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;19549:135:::0;;:::o;15269:36::-;;;;:::o;5929:244::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;6038:1:::1;6018:22;;:8;:22;;::::0;6010:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;6128:8;6099:38;;6120:6;::::0;::::1;;;;;;;;6099:38;;;;;;;;;;;;6157:8;6148:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;5929:244:::0;:::o;19410:127::-;5695:12;:10;:12::i;:::-;5685:22;;:6;;;;;;;;;;:22;;;5677:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19523:6:::1;19497:15;:23;19513:6;19497:23;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;19410:127:::0;;:::o;15858:35::-;;;;;;;;;;;;;:::o;1255:181::-;1313:7;1333:9;1349:1;1345;:5;;;;:::i;:::-;1333:17;;1374:1;1369;:6;;1361:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1427:1;1420:8;;;1255:181;;;;:::o;187:115::-;240:15;283:10;268:26;;187:115;:::o;18953:337::-;19063:1;19046:19;;:5;:19;;;19038:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19144:1;19125:21;;:7;:21;;;19117:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19228:6;19198:11;:18;19210:5;19198:18;;;;;;;;;;;;;;;:27;19217:7;19198:27;;;;;;;;;;;;;;;:36;;;;19266:7;19250:32;;19259:5;19250:32;;;19275:6;19250:32;;;;;;:::i;:::-;;;;;;;;18953:337;;;:::o;23136:1707::-;23223:4;23268:1;23250:20;;:6;:20;;;23242:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;23352:1;23331:23;;:9;:23;;;23323:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23410:16;;;;;;;;;;;23407:1429;;;23460:41;23475:6;23483:9;23494:6;23460:14;:41::i;:::-;23453:48;;;;23407:1429;23557:15;:23;23573:6;23557:23;;;;;;;;;;;;;;;;;;;;;;;;;23556:24;:55;;;;;23585:15;:26;23601:9;23585:26;;;;;;;;;;;;;;;;;;;;;;;;;23584:27;23556:55;23553:170;;;23650:12;;23640:6;:22;;23632:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;23553:170;23751:28;23782:24;23800:4;23782:9;:24::i;:::-;23751:55;;23821:28;23876:23;;23852:20;:47;;23821:78;;23932:23;:44;;;;;23960:16;;;;;;;;;;;23959:17;23932:44;:69;;;;;23981:12;:20;23994:6;23981:20;;;;;;;;;;;;;;;;;;;;;;;;;23980:21;23932:69;:94;;;;;24005:21;;;;;;;;;;;23932:94;23928:305;;;24064:25;;;;;;;;;;;24061:97;;;24135:23;;24112:46;;24061:97;24177:36;24192:20;24177:14;:36::i;:::-;23928:305;24269:53;24291:6;24269:53;;;;;;;;;;;;;;;;;:9;:17;24279:6;24269:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24249:9;:17;24259:6;24249:17;;;;;;;;;;;;;;;:73;;;;24339:19;24362:17;:25;24380:6;24362:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;24391:17;:28;24409:9;24391:28;;;;;;;;;;;;;;;;;;;;;;;;;24362:57;24361:148;;24475:34;24483:6;24491:9;24502:6;24475:7;:34::i;:::-;24361:148;;;24466:6;24361:148;24339:170;;24529:16;;;;;;;;;;;:51;;;;;24550:19;:30;24570:9;24550:30;;;;;;;;;;;;;;;;;;;;;;;;;24549:31;24529:51;24526:133;;;24648:10;;24607:37;24632:11;24607:20;24617:9;24607;:20::i;:::-;:24;;:37;;;;:::i;:::-;:51;;24599:60;;;;;;24526:133;24699:37;24724:11;24699:9;:20;24709:9;24699:20;;;;;;;;;;;;;;;;:24;;:37;;;;:::i;:::-;24676:9;:20;24686:9;24676:20;;;;;;;;;;;;;;;:60;;;;24775:9;24758:40;;24767:6;24758:40;;;24786:11;24758:40;;;;;;:::i;:::-;;;;;;;;24820:4;24813:11;;;;;23136:1707;;;;;;:::o;1588:192::-;1674:7;1707:1;1702;:6;;1710:12;1694:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;1734:9;1750:1;1746;:5;;;;:::i;:::-;1734:17;;1771:1;1764:8;;;1588:192;;;;;:::o;1444:136::-;1502:7;1529:43;1533:1;1536;1529:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1522:50;;1444:136;;;;:::o;24851:330::-;24944:4;24981:53;25003:6;24981:53;;;;;;;;;;;;;;;;;:9;:17;24991:6;24981:17;;;;;;;;;;;;;;;;:21;;:53;;;;;:::i;:::-;24961:9;:17;24971:6;24961:17;;;;;;;;;;;;;;;:73;;;;25068:32;25093:6;25068:9;:20;25078:9;25068:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;25045:9;:20;25055:9;25045:20;;;;;;;;;;;;;;;:55;;;;25133:9;25116:35;;25125:6;25116:35;;;25144:6;25116:35;;;;;;:::i;:::-;;;;;;;;25169:4;25162:11;;24851:330;;;;;:::o;25189:1032::-;16335:4;16316:16;;:23;;;;;;;;;;;;;;;;;;25271:19:::1;25293:65;25356:1;25293:58;25326:24;;25293:28;25305:15;;25293:7;:11;;:28;;;;:::i;:::-;:32;;:58;;;;:::i;:::-;:62;;:65;;;;:::i;:::-;25271:87;;25369:21;25393:24;25405:11;25393:7;:11;;:24;;;;:::i;:::-;25369:48;;25430:31;25447:13;25430:16;:31::i;:::-;25472:22;25497:21;25472:46;;25531:19;25553:52;25582:22;25602:1;25582:15;;:19;;:22;;;;:::i;:::-;25553:24;;:28;;:52;;;;:::i;:::-;25531:74;;25626:26;25655:59;25712:1;25655:52;25695:11;25655:35;25674:15;;25655:14;:18;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:56;;:59;;;;:::i;:::-;25626:88;;25725:20;25748:46;25782:11;25748:29;25767:9;;25748:14;:18;;:29;;;;:::i;:::-;:33;;:46;;;;:::i;:::-;25725:69;;25805:26;25834:56;25877:12;25834:38;25853:18;25834:14;:18;;:38;;;;:::i;:::-;:42;;:56;;;;:::i;:::-;25805:85;;25927:1;25906:18;:22;25903:104;;;25943:64;25964:22;;;;;;;;;;;25988:18;25943:20;:64::i;:::-;25903:104;26038:1;26023:12;:16;26020:76;;;26054:42;26075:6;;;;;;;;;;;26083:12;26054:20;:42::i;:::-;26020:76;26133:1;26112:18;:22;:41;;;;;26152:1;26138:11;:15;26112:41;26109:104;;;26168:45;26181:11;26194:18;26168:12;:45::i;:::-;26109:104;25250:971;;;;;;;16381:5:::0;16362:16;;:24;;;;;;;;;;;;;;;;;;25189:1032;:::o;27428:622::-;27514:7;27544:17;27564:1;27544:21;;27589:12;:20;27602:6;27589:20;;;;;;;;;;;;;;;;;;;;;;;;;27586:223;;;27638:38;27672:3;27638:29;27649:17;;27638:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;27626:50;;27586:223;;;27706:12;:23;27719:9;27706:23;;;;;;;;;;;;;;;;;;;;;;;;;27703:106;;;27758:39;27793:3;27758:30;27769:18;;27758:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;27746:51;;27703:106;27586:223;27844:1;27832:9;:13;27829:173;;;27889:39;27918:9;27889;:24;27907:4;27889:24;;;;;;;;;;;;;;;;:28;;:39;;;;:::i;:::-;27862:9;:24;27880:4;27862:24;;;;;;;;;;;;;;;:66;;;;27973:4;27948:42;;27957:6;27948:42;;;27980:9;27948:42;;;;;;:::i;:::-;;;;;;;;27829:173;28021:21;28032:9;28021:6;:10;;:21;;;;:::i;:::-;28014:28;;;27428:622;;;;;:::o;1788:250::-;1846:7;1875:1;1870;:6;1866:47;;1900:1;1893:8;;;;1866:47;1925:9;1941:1;1937;:5;;;;:::i;:::-;1925:17;;1970:1;1965;1961;:5;;;;:::i;:::-;:10;1953:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;2029:1;2022:8;;;1788:250;;;;;:::o;2046:132::-;2104:7;2131:39;2135:1;2138;2131:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;2124:46;;2046:132;;;;:::o;26233:666::-;26359:21;26397:1;26383:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26359:40;;26428:4;26410;26415:1;26410:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;26454:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26444:4;26449:1;26444:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;26489:62;26506:4;26521:15;;;;;;;;;;;26539:11;26489:8;:62::i;:::-;26590:15;;;;;;;;;;;:66;;;26671:11;26697:1;26741:4;26768;26804:15;26590:240;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26856:35;26873:11;26886:4;26856:35;;;;;;;:::i;:::-;;;;;;;;26288:611;26233:666;:::o;21593:126::-;21685:9;:18;;:26;21704:6;21685:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21593:126;;:::o;26907:513::-;27055:62;27072:4;27087:15;;;;;;;;;;;27105:11;27055:8;:62::i;:::-;27160:15;;;;;;;;;;;:31;;;27199:9;27232:4;27252:11;27278:1;27321;27364:7;:5;:7::i;:::-;27386:15;27160:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;26907:513;;:::o;2186:278::-;2272:7;2304:1;2300;:5;2307:12;2292:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2331:9;2347:1;2343;:5;;;;:::i;:::-;2331:17;;2455:1;2448:8;;;2186:278;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:77;1713:7;1742:5;1731:16;;1676:77;;;:::o;1759:122::-;1832:24;1850:5;1832:24;:::i;:::-;1825:5;1822:35;1812:63;;1871:1;1868;1861:12;1812:63;1759:122;:::o;1887:139::-;1933:5;1971:6;1958:20;1949:29;;1987:33;2014:5;1987:33;:::i;:::-;1887:139;;;;:::o;2032:619::-;2109:6;2117;2125;2174:2;2162:9;2153:7;2149:23;2145:32;2142:119;;;2180:79;;:::i;:::-;2142:119;2300:1;2325:53;2370:7;2361:6;2350:9;2346:22;2325:53;:::i;:::-;2315:63;;2271:117;2427:2;2453:53;2498:7;2489:6;2478:9;2474:22;2453:53;:::i;:::-;2443:63;;2398:118;2555:2;2581:53;2626:7;2617:6;2606:9;2602:22;2581:53;:::i;:::-;2571:63;;2526:118;2032:619;;;;;:::o;2657:126::-;2694:7;2734:42;2727:5;2723:54;2712:65;;2657:126;;;:::o;2789:96::-;2826:7;2855:24;2873:5;2855:24;:::i;:::-;2844:35;;2789:96;;;:::o;2891:122::-;2964:24;2982:5;2964:24;:::i;:::-;2957:5;2954:35;2944:63;;3003:1;3000;2993:12;2944:63;2891:122;:::o;3019:139::-;3065:5;3103:6;3090:20;3081:29;;3119:33;3146:5;3119:33;:::i;:::-;3019:139;;;;:::o;3164:474::-;3232:6;3240;3289:2;3277:9;3268:7;3264:23;3260:32;3257:119;;;3295:79;;:::i;:::-;3257:119;3415:1;3440:53;3485:7;3476:6;3465:9;3461:22;3440:53;:::i;:::-;3430:63;;3386:117;3542:2;3568:53;3613:7;3604:6;3593:9;3589:22;3568:53;:::i;:::-;3558:63;;3513:118;3164:474;;;;;:::o;3644:90::-;3678:7;3721:5;3714:13;3707:21;3696:32;;3644:90;;;:::o;3740:109::-;3821:21;3836:5;3821:21;:::i;:::-;3816:3;3809:34;3740:109;;:::o;3855:210::-;3942:4;3980:2;3969:9;3965:18;3957:26;;3993:65;4055:1;4044:9;4040:17;4031:6;3993:65;:::i;:::-;3855:210;;;;:::o;4071:60::-;4099:3;4120:5;4113:12;;4071:60;;;:::o;4137:142::-;4187:9;4220:53;4238:34;4247:24;4265:5;4247:24;:::i;:::-;4238:34;:::i;:::-;4220:53;:::i;:::-;4207:66;;4137:142;;;:::o;4285:126::-;4335:9;4368:37;4399:5;4368:37;:::i;:::-;4355:50;;4285:126;;;:::o;4417:153::-;4494:9;4527:37;4558:5;4527:37;:::i;:::-;4514:50;;4417:153;;;:::o;4576:185::-;4690:64;4748:5;4690:64;:::i;:::-;4685:3;4678:77;4576:185;;:::o;4767:276::-;4887:4;4925:2;4914:9;4910:18;4902:26;;4938:98;5033:1;5022:9;5018:17;5009:6;4938:98;:::i;:::-;4767:276;;;;:::o;5049:118::-;5136:24;5154:5;5136:24;:::i;:::-;5131:3;5124:37;5049:118;;:::o;5173:222::-;5266:4;5304:2;5293:9;5289:18;5281:26;;5317:71;5385:1;5374:9;5370:17;5361:6;5317:71;:::i;:::-;5173:222;;;;:::o;5401:619::-;5478:6;5486;5494;5543:2;5531:9;5522:7;5518:23;5514:32;5511:119;;;5549:79;;:::i;:::-;5511:119;5669:1;5694:53;5739:7;5730:6;5719:9;5715:22;5694:53;:::i;:::-;5684:63;;5640:117;5796:2;5822:53;5867:7;5858:6;5847:9;5843:22;5822:53;:::i;:::-;5812:63;;5767:118;5924:2;5950:53;5995:7;5986:6;5975:9;5971:22;5950:53;:::i;:::-;5940:63;;5895:118;5401:619;;;;;:::o;6026:118::-;6113:24;6131:5;6113:24;:::i;:::-;6108:3;6101:37;6026:118;;:::o;6150:222::-;6243:4;6281:2;6270:9;6266:18;6258:26;;6294:71;6362:1;6351:9;6347:17;6338:6;6294:71;:::i;:::-;6150:222;;;;:::o;6378:86::-;6413:7;6453:4;6446:5;6442:16;6431:27;;6378:86;;;:::o;6470:112::-;6553:22;6569:5;6553:22;:::i;:::-;6548:3;6541:35;6470:112;;:::o;6588:214::-;6677:4;6715:2;6704:9;6700:18;6692:26;;6728:67;6792:1;6781:9;6777:17;6768:6;6728:67;:::i;:::-;6588:214;;;;:::o;6808:329::-;6867:6;6916:2;6904:9;6895:7;6891:23;6887:32;6884:119;;;6922:79;;:::i;:::-;6884:119;7042:1;7067:53;7112:7;7103:6;7092:9;7088:22;7067:53;:::i;:::-;7057:63;;7013:117;6808:329;;;;:::o;7143:::-;7202:6;7251:2;7239:9;7230:7;7226:23;7222:32;7219:119;;;7257:79;;:::i;:::-;7219:119;7377:1;7402:53;7447:7;7438:6;7427:9;7423:22;7402:53;:::i;:::-;7392:63;;7348:117;7143:329;;;;:::o;7478:104::-;7523:7;7552:24;7570:5;7552:24;:::i;:::-;7541:35;;7478:104;;;:::o;7588:142::-;7691:32;7717:5;7691:32;:::i;:::-;7686:3;7679:45;7588:142;;:::o;7736:254::-;7845:4;7883:2;7872:9;7868:18;7860:26;;7896:87;7980:1;7969:9;7965:17;7956:6;7896:87;:::i;:::-;7736:254;;;;:::o;7996:116::-;8066:21;8081:5;8066:21;:::i;:::-;8059:5;8056:32;8046:60;;8102:1;8099;8092:12;8046:60;7996:116;:::o;8118:133::-;8161:5;8199:6;8186:20;8177:29;;8215:30;8239:5;8215:30;:::i;:::-;8118:133;;;;:::o;8257:323::-;8313:6;8362:2;8350:9;8341:7;8337:23;8333:32;8330:119;;;8368:79;;:::i;:::-;8330:119;8488:1;8513:50;8555:7;8546:6;8535:9;8531:22;8513:50;:::i;:::-;8503:60;;8459:114;8257:323;;;;:::o;8586:474::-;8654:6;8662;8711:2;8699:9;8690:7;8686:23;8682:32;8679:119;;;8717:79;;:::i;:::-;8679:119;8837:1;8862:53;8907:7;8898:6;8887:9;8883:22;8862:53;:::i;:::-;8852:63;;8808:117;8964:2;8990:53;9035:7;9026:6;9015:9;9011:22;8990:53;:::i;:::-;8980:63;;8935:118;8586:474;;;;;:::o;9066:468::-;9131:6;9139;9188:2;9176:9;9167:7;9163:23;9159:32;9156:119;;;9194:79;;:::i;:::-;9156:119;9314:1;9339:53;9384:7;9375:6;9364:9;9360:22;9339:53;:::i;:::-;9329:63;;9285:117;9441:2;9467:50;9509:7;9500:6;9489:9;9485:22;9467:50;:::i;:::-;9457:60;;9412:115;9066:468;;;;;:::o;9540:180::-;9588:77;9585:1;9578:88;9685:4;9682:1;9675:15;9709:4;9706:1;9699:15;9726:320;9770:6;9807:1;9801:4;9797:12;9787:22;;9854:1;9848:4;9844:12;9875:18;9865:81;;9931:4;9923:6;9919:17;9909:27;;9865:81;9993:2;9985:6;9982:14;9962:18;9959:38;9956:84;;10012:18;;:::i;:::-;9956:84;9777:269;9726:320;;;:::o;10052:182::-;10192:34;10188:1;10180:6;10176:14;10169:58;10052:182;:::o;10240:366::-;10382:3;10403:67;10467:2;10462:3;10403:67;:::i;:::-;10396:74;;10479:93;10568:3;10479:93;:::i;:::-;10597:2;10592:3;10588:12;10581:19;;10240:366;;;:::o;10612:419::-;10778:4;10816:2;10805:9;10801:18;10793:26;;10865:9;10859:4;10855:20;10851:1;10840:9;10836:17;10829:47;10893:131;11019:4;10893:131;:::i;:::-;10885:139;;10612:419;;;:::o;11037:143::-;11094:5;11125:6;11119:13;11110:22;;11141:33;11168:5;11141:33;:::i;:::-;11037:143;;;;:::o;11186:351::-;11256:6;11305:2;11293:9;11284:7;11280:23;11276:32;11273:119;;;11311:79;;:::i;:::-;11273:119;11431:1;11456:64;11512:7;11503:6;11492:9;11488:22;11456:64;:::i;:::-;11446:74;;11402:128;11186:351;;;;:::o;11543:332::-;11664:4;11702:2;11691:9;11687:18;11679:26;;11715:71;11783:1;11772:9;11768:17;11759:6;11715:71;:::i;:::-;11796:72;11864:2;11853:9;11849:18;11840:6;11796:72;:::i;:::-;11543:332;;;;;:::o;11881:225::-;12021:34;12017:1;12009:6;12005:14;11998:58;12090:8;12085:2;12077:6;12073:15;12066:33;11881:225;:::o;12112:366::-;12254:3;12275:67;12339:2;12334:3;12275:67;:::i;:::-;12268:74;;12351:93;12440:3;12351:93;:::i;:::-;12469:2;12464:3;12460:12;12453:19;;12112:366;;;:::o;12484:419::-;12650:4;12688:2;12677:9;12673:18;12665:26;;12737:9;12731:4;12727:20;12723:1;12712:9;12708:17;12701:47;12765:131;12891:4;12765:131;:::i;:::-;12757:139;;12484:419;;;:::o;12909:180::-;12957:77;12954:1;12947:88;13054:4;13051:1;13044:15;13078:4;13075:1;13068:15;13095:191;13135:3;13154:20;13172:1;13154:20;:::i;:::-;13149:25;;13188:20;13206:1;13188:20;:::i;:::-;13183:25;;13231:1;13228;13224:9;13217:16;;13252:3;13249:1;13246:10;13243:36;;;13259:18;;:::i;:::-;13243:36;13095:191;;;;:::o;13292:177::-;13432:29;13428:1;13420:6;13416:14;13409:53;13292:177;:::o;13475:366::-;13617:3;13638:67;13702:2;13697:3;13638:67;:::i;:::-;13631:74;;13714:93;13803:3;13714:93;:::i;:::-;13832:2;13827:3;13823:12;13816:19;;13475:366;;;:::o;13847:419::-;14013:4;14051:2;14040:9;14036:18;14028:26;;14100:9;14094:4;14090:20;14086:1;14075:9;14071:17;14064:47;14128:131;14254:4;14128:131;:::i;:::-;14120:139;;13847:419;;;:::o;14272:223::-;14412:34;14408:1;14400:6;14396:14;14389:58;14481:6;14476:2;14468:6;14464:15;14457:31;14272:223;:::o;14501:366::-;14643:3;14664:67;14728:2;14723:3;14664:67;:::i;:::-;14657:74;;14740:93;14829:3;14740:93;:::i;:::-;14858:2;14853:3;14849:12;14842:19;;14501:366;;;:::o;14873:419::-;15039:4;15077:2;15066:9;15062:18;15054:26;;15126:9;15120:4;15116:20;15112:1;15101:9;15097:17;15090:47;15154:131;15280:4;15154:131;:::i;:::-;15146:139;;14873:419;;;:::o;15298:221::-;15438:34;15434:1;15426:6;15422:14;15415:58;15507:4;15502:2;15494:6;15490:15;15483:29;15298:221;:::o;15525:366::-;15667:3;15688:67;15752:2;15747:3;15688:67;:::i;:::-;15681:74;;15764:93;15853:3;15764:93;:::i;:::-;15882:2;15877:3;15873:12;15866:19;;15525:366;;;:::o;15897:419::-;16063:4;16101:2;16090:9;16086:18;16078:26;;16150:9;16144:4;16140:20;16136:1;16125:9;16121:17;16114:47;16178:131;16304:4;16178:131;:::i;:::-;16170:139;;15897:419;;;:::o;16322:224::-;16462:34;16458:1;16450:6;16446:14;16439:58;16531:7;16526:2;16518:6;16514:15;16507:32;16322:224;:::o;16552:366::-;16694:3;16715:67;16779:2;16774:3;16715:67;:::i;:::-;16708:74;;16791:93;16880:3;16791:93;:::i;:::-;16909:2;16904:3;16900:12;16893:19;;16552:366;;;:::o;16924:419::-;17090:4;17128:2;17117:9;17113:18;17105:26;;17177:9;17171:4;17167:20;17163:1;17152:9;17148:17;17141:47;17205:131;17331:4;17205:131;:::i;:::-;17197:139;;16924:419;;;:::o;17349:222::-;17489:34;17485:1;17477:6;17473:14;17466:58;17558:5;17553:2;17545:6;17541:15;17534:30;17349:222;:::o;17577:366::-;17719:3;17740:67;17804:2;17799:3;17740:67;:::i;:::-;17733:74;;17816:93;17905:3;17816:93;:::i;:::-;17934:2;17929:3;17925:12;17918:19;;17577:366;;;:::o;17949:419::-;18115:4;18153:2;18142:9;18138:18;18130:26;;18202:9;18196:4;18192:20;18188:1;18177:9;18173:17;18166:47;18230:131;18356:4;18230:131;:::i;:::-;18222:139;;17949:419;;;:::o;18374:227::-;18514:34;18510:1;18502:6;18498:14;18491:58;18583:10;18578:2;18570:6;18566:15;18559:35;18374:227;:::o;18607:366::-;18749:3;18770:67;18834:2;18829:3;18770:67;:::i;:::-;18763:74;;18846:93;18935:3;18846:93;:::i;:::-;18964:2;18959:3;18955:12;18948:19;;18607:366;;;:::o;18979:419::-;19145:4;19183:2;19172:9;19168:18;19160:26;;19232:9;19226:4;19222:20;19218:1;19207:9;19203:17;19196:47;19260:131;19386:4;19260:131;:::i;:::-;19252:139;;18979:419;;;:::o;19404:194::-;19444:4;19464:20;19482:1;19464:20;:::i;:::-;19459:25;;19498:20;19516:1;19498:20;:::i;:::-;19493:25;;19542:1;19539;19535:9;19527:17;;19566:1;19560:4;19557:11;19554:37;;;19571:18;;:::i;:::-;19554:37;19404:194;;;;:::o;19604:348::-;19644:7;19667:20;19685:1;19667:20;:::i;:::-;19662:25;;19701:20;19719:1;19701:20;:::i;:::-;19696:25;;19889:1;19821:66;19817:74;19814:1;19811:81;19806:1;19799:9;19792:17;19788:105;19785:131;;;19896:18;;:::i;:::-;19785:131;19944:1;19941;19937:9;19926:20;;19604:348;;;;:::o;19958:180::-;20006:77;20003:1;19996:88;20103:4;20100:1;20093:15;20127:4;20124:1;20117:15;20144:185;20184:1;20201:20;20219:1;20201:20;:::i;:::-;20196:25;;20235:20;20253:1;20235:20;:::i;:::-;20230:25;;20274:1;20264:35;;20279:18;;:::i;:::-;20264:35;20321:1;20318;20314:9;20309:14;;20144:185;;;;:::o;20335:220::-;20475:34;20471:1;20463:6;20459:14;20452:58;20544:3;20539:2;20531:6;20527:15;20520:28;20335:220;:::o;20561:366::-;20703:3;20724:67;20788:2;20783:3;20724:67;:::i;:::-;20717:74;;20800:93;20889:3;20800:93;:::i;:::-;20918:2;20913:3;20909:12;20902:19;;20561:366;;;:::o;20933:419::-;21099:4;21137:2;21126:9;21122:18;21114:26;;21186:9;21180:4;21176:20;21172:1;21161:9;21157:17;21150:47;21214:131;21340:4;21214:131;:::i;:::-;21206:139;;20933:419;;;:::o;21358:180::-;21406:77;21403:1;21396:88;21503:4;21500:1;21493:15;21527:4;21524:1;21517:15;21544:180;21592:77;21589:1;21582:88;21689:4;21686:1;21679:15;21713:4;21710:1;21703:15;21730:85;21775:7;21804:5;21793:16;;21730:85;;;:::o;21821:158::-;21879:9;21912:61;21930:42;21939:32;21965:5;21939:32;:::i;:::-;21930:42;:::i;:::-;21912:61;:::i;:::-;21899:74;;21821:158;;;:::o;21985:147::-;22080:45;22119:5;22080:45;:::i;:::-;22075:3;22068:58;21985:147;;:::o;22138:114::-;22205:6;22239:5;22233:12;22223:22;;22138:114;;;:::o;22258:184::-;22357:11;22391:6;22386:3;22379:19;22431:4;22426:3;22422:14;22407:29;;22258:184;;;;:::o;22448:132::-;22515:4;22538:3;22530:11;;22568:4;22563:3;22559:14;22551:22;;22448:132;;;:::o;22586:108::-;22663:24;22681:5;22663:24;:::i;:::-;22658:3;22651:37;22586:108;;:::o;22700:179::-;22769:10;22790:46;22832:3;22824:6;22790:46;:::i;:::-;22868:4;22863:3;22859:14;22845:28;;22700:179;;;;:::o;22885:113::-;22955:4;22987;22982:3;22978:14;22970:22;;22885:113;;;:::o;23034:732::-;23153:3;23182:54;23230:5;23182:54;:::i;:::-;23252:86;23331:6;23326:3;23252:86;:::i;:::-;23245:93;;23362:56;23412:5;23362:56;:::i;:::-;23441:7;23472:1;23457:284;23482:6;23479:1;23476:13;23457:284;;;23558:6;23552:13;23585:63;23644:3;23629:13;23585:63;:::i;:::-;23578:70;;23671:60;23724:6;23671:60;:::i;:::-;23661:70;;23517:224;23504:1;23501;23497:9;23492:14;;23457:284;;;23461:14;23757:3;23750:10;;23158:608;;;23034:732;;;;:::o;23772:831::-;24035:4;24073:3;24062:9;24058:19;24050:27;;24087:71;24155:1;24144:9;24140:17;24131:6;24087:71;:::i;:::-;24168:80;24244:2;24233:9;24229:18;24220:6;24168:80;:::i;:::-;24295:9;24289:4;24285:20;24280:2;24269:9;24265:18;24258:48;24323:108;24426:4;24417:6;24323:108;:::i;:::-;24315:116;;24441:72;24509:2;24498:9;24494:18;24485:6;24441:72;:::i;:::-;24523:73;24591:3;24580:9;24576:19;24567:6;24523:73;:::i;:::-;23772:831;;;;;;;;:::o;24609:483::-;24780:4;24818:2;24807:9;24803:18;24795:26;;24831:71;24899:1;24888:9;24884:17;24875:6;24831:71;:::i;:::-;24949:9;24943:4;24939:20;24934:2;24923:9;24919:18;24912:48;24977:108;25080:4;25071:6;24977:108;:::i;:::-;24969:116;;24609:483;;;;;:::o;25098:807::-;25347:4;25385:3;25374:9;25370:19;25362:27;;25399:71;25467:1;25456:9;25452:17;25443:6;25399:71;:::i;:::-;25480:72;25548:2;25537:9;25533:18;25524:6;25480:72;:::i;:::-;25562:80;25638:2;25627:9;25623:18;25614:6;25562:80;:::i;:::-;25652;25728:2;25717:9;25713:18;25704:6;25652:80;:::i;:::-;25742:73;25810:3;25799:9;25795:19;25786:6;25742:73;:::i;:::-;25825;25893:3;25882:9;25878:19;25869:6;25825:73;:::i;:::-;25098:807;;;;;;;;;:::o;25911:143::-;25968:5;25999:6;25993:13;25984:22;;26015:33;26042:5;26015:33;:::i;:::-;25911:143;;;;:::o;26060:663::-;26148:6;26156;26164;26213:2;26201:9;26192:7;26188:23;26184:32;26181:119;;;26219:79;;:::i;:::-;26181:119;26339:1;26364:64;26420:7;26411:6;26400:9;26396:22;26364:64;:::i;:::-;26354:74;;26310:128;26477:2;26503:64;26559:7;26550:6;26539:9;26535:22;26503:64;:::i;:::-;26493:74;;26448:129;26616:2;26642:64;26698:7;26689:6;26678:9;26674:22;26642:64;:::i;:::-;26632:74;;26587:129;26060:663;;;;;:::o

Swarm Source

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