BNB Price: $695.44 (-2.04%)
Gas: 1 GWei
 

Overview

Max Total Supply

21,000,000,000,000ACADEMIC

Holders

9

Market

Price

$0.00 @ 0.000000 BNB

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
BSC: Validator Set
Balance
1,000,000 ACADEMIC

Value
$0.00
0x0000000000000000000000000000000000001000
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information

Contract Source Code Verified (Exact Match)

Contract Name:
Academic_Contract

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2022-02-02
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.6.12;

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

 
library SafeMath {

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

        return c;
    }

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


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

        return c;
    }


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

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

        return c;
    }


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


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

        return c;
    }

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

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

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

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


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");
        (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;
    uint256 private _lockTime;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor () internal {
        address msgSender = _msgSender();
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(_owner == _msgSender(), "Ownable: caller is not the owner");
        _;
    }


    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }


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

    function geUnlockTime() public view returns (uint256) {
        return _lockTime;
    }


    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = now + time;
        emit OwnershipTransferred(_owner, address(0));
    }
    

    function unlock() public virtual {
        require(_previousOwner == msg.sender, "You don't have permission to unlock");
        require(now < _lockTime , "Contract is locked until 7 days");
        emit OwnershipTransferred(_owner, _previousOwner);
        _owner = _previousOwner;
    }
}


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 Mint(address indexed sender, uint amount0, uint amount1);
    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 mint(address to) external returns (uint liquidity);
    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 Academic_Contract is Context, IERC20, Ownable 
{
    using SafeMath for uint256;
    using Address for address;
    event Log(string, uint256);
    mapping (address => uint256) private _rOwned;
    mapping (address => uint256) private _tOwned;
    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFee;

    mapping (address => bool) private _isExcluded;
    address[] private _excluded;
   
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 21 * 10**12 * 10**18;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;
    string private _name = "Academic Token";
    string private _symbol = "ACADEMIC";
    uint8 private _decimals = 18;
    
    uint256 public _taxFee = 3;
    uint256 private _previousTaxFee = _taxFee;
    
    uint256 public _liquidityFee = 3;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 public _burnFee = 1;
    uint256 private _previousBurnFee = _burnFee;

    uint256 public _donateFee = 2;
    uint256 private _previousCharityFee = _donateFee;
    
    address public donateWallet =  0x71C7656EC7ab88b098defB751B7401B5f6d8976F;  
    address public charityWallet =  0x0C8e9FfCe4B4aeC8fB81173d05995a4693fe7DfC;
    
    

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    uint256 public _maxTxAmount = 21 * 10**29;
    uint256 private numTokensSellToAddToLiquidity = 500000000 * 10**18;
    
    
    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor () public {
        _rOwned[_msgSender()] = _rTotal;
        //IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0xD99D1c33F9fC3444f8101754aBC46c52416550D1); //Testnet
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x10ED43C718714eb63d5aA57B78B54704E256024E);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        
        emit Transfer(address(0), _msgSender(), _tTotal);
    }


    function removeAllFee() private {
        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
        _donateFee = 0;
    }
    
    function restoreAllFee() private {
        _taxFee = 3;
        _liquidityFee = 3;
        _burnFee = 1;
        _donateFee = 2;
    }


    function enableAllFees() external onlyOwner() 
    {
        _taxFee = 3;
        _previousTaxFee = _taxFee;
        _liquidityFee = 3;
        _previousLiquidityFee = _liquidityFee;
        _burnFee = 1;
        _previousBurnFee = _burnFee;
        _donateFee = 2;
        _previousCharityFee = _donateFee;
        inSwapAndLiquify = true;
        emit SwapAndLiquifyEnabledUpdated(true);
    }


    function disableAllFees() external onlyOwner() 
    {
        _taxFee = 0;
        _previousTaxFee = _taxFee;
        _liquidityFee = 0;
        _previousLiquidityFee = _liquidityFee;
        _burnFee = 0;
        _previousBurnFee = _burnFee;
        _donateFee = 0;
        _previousCharityFee = _donateFee;
        inSwapAndLiquify = false;
        emit SwapAndLiquifyEnabledUpdated(false);
    }


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

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

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

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

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

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

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

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

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

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

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

    function isExcludedFromReward(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

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

    function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount,,,,,) = _getValues(tAmount);
            return rAmount;
        } else {
            (,uint256 rTransferAmount,,,,) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

    function excludeFromReward(address account) public onlyOwner() 
    {
        require(!_isExcluded[account], "Account is already excluded");
        if(_rOwned[account] > 0) {
            _tOwned[account] = tokenFromReflection(_rOwned[account]);
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }
    

    function includeInReward(address account) external onlyOwner() {
        require(_isExcluded[account], "Account is already excluded");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tOwned[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

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

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


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

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

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

    function calculateLiquidityFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_liquidityFee).div(10**2);
    }
    


    
    function isExcludedFromFee(address account) public view returns(bool) {
        return _isExcludedFromFee[account];
    }

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

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

    function _transfer(address from, address to, uint256 amount) private 
    {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 contractTokenBalance = balanceOf(address(this));        
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;
        if (overMinTokenBalance &&  !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled)
        {
            contractTokenBalance = numTokensSellToAddToLiquidity;
            swapAndLiquify(contractTokenBalance);
        }
        _tokenTransfer(from, to, amount);
    }
    
    

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap 
    {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);
        uint256 initialBalance = address(this).balance;
        swapTokensForEth(half); 
        uint256 newBalance = address(this).balance.sub(initialBalance);
        addLiquidity(otherHalf, newBalance);
        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private 
    {
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.addLiquidityETH{value: ethAmount}(address(this), tokenAmount, 0, 0, owner(), block.timestamp);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount) private 
    {
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {
            removeAllFee();
        }
        else
        {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }
        
        uint256 burnAmt = amount.mul(_burnFee).div(100);
        uint256 amtWalletS = amount.mul(_donateFee).div(100);

        if (_isExcluded[sender] && !_isExcluded[recipient]) 
        {
            _transferFromExcluded(sender, recipient, (amount.sub(burnAmt).sub(amtWalletS)));
        } 
        else if (!_isExcluded[sender] && _isExcluded[recipient]) 
        {
            _transferToExcluded(sender, recipient, (amount.sub(burnAmt).sub(amtWalletS)));
        } 
        else if (!_isExcluded[sender] && !_isExcluded[recipient]) 
        {
            _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(amtWalletS)));
        } 
        else if (_isExcluded[sender] && _isExcluded[recipient]) 
        {
            _transferBothExcluded(sender, recipient, (amount.sub(burnAmt).sub(amtWalletS)));
        } else 
        {
            _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(amtWalletS)));
        }
        
        _taxFee = 0;
        _liquidityFee = 0;
        _donateFee = 0;
        
        if(burnAmt>0)
        {
           _transferStandard(sender, address(0), burnAmt);    
        }
        
        if(amtWalletS>0)
        {
           _transferStandard(sender, donateWallet, amtWalletS.div(2));
           _transferStandard(sender, charityWallet, amtWalletS.div(2));
        }
        
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
        _donateFee = _previousCharityFee;
        
        if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient])
        {
            restoreAllFee();
        }
    }

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

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

    function excludeFromFee(address account) public onlyOwner 
    {
        _isExcludedFromFee[account] = true;
    }
    
    
    function includeInFee(address account) public onlyOwner 
    {
        _isExcludedFromFee[account] = false;
    }
    

    function setCharityWallet(address newWallet) external onlyOwner() 
    {
        donateWallet = newWallet;
    }  
   
   
    function setcharityWallet(address newWallet) external onlyOwner() 
    {
        charityWallet = newWallet;
    }  
    
    
   
    function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner() {
        require(maxTxPercent > 10, "Cannot set transaction amount less than 10 percent!");
        _maxTxAmount = _tTotal.mul(maxTxPercent).div(10**2);
    }


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


function burn(uint256 amount) public virtual onlyOwner 
{
        _burn(msg.sender, amount);
}


function  setNumTokensSellToAddToLiquidity(uint256 amount) public onlyOwner 
{
        numTokensSellToAddToLiquidity = amount;
        emit Log("NumTokensSellToAddToLiquidity changed", amount);
}

     
    
function _burn(address account, uint256 amount) internal virtual 
{
    require(account != address(0), "ERC20: burn from the burn address");
    uint256 accountBalance = balanceOf(account);
    require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
    uint256 rAmount =  _getRate();
    _rOwned[account] -= rAmount;
    _tOwned[address(0)] += amount;
    _rOwned[address(0)] += rAmount;
    _tTotal -= amount;
     emit Transfer(account, address(0), amount);
}


function _beforeTokenTransfer(address from, address to, uint256 amount) 
internal virtual { } 
   
    
    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"","type":"string"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"Log","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_donateFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"charityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"donateWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","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":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setCharityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setNumTokensSellToAddToLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setcharityWallet","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6d01090ea8dd15c7978437400000006009556c864d8447b28d67cee63fffffff19600a55610100604052600e60c08190526d20b1b0b232b6b4b1902a37b5b2b760911b60e09081526200005691600c919062000423565b506040805180820190915260088082526741434144454d494360c01b60209092019182526200008891600d9162000423565b50600e805460ff191660129081179091556003600f8190556010819055601181905590556001601381905560145560026015819055601655601780546001600160a01b03199081167371c7656ec7ab88b098defb751b7401b5f6d8976f179091556018805460ff60a81b199216730c8e9ffce4b4aec8fb81173d05995a4693fe7dfc179190911690556c1a8177494efa5bf39f200000006019556b019d971e4fe8401e74000000601a553480156200013f57600080fd5b5060006200014c62000410565b600080546001600160a01b031916331781556040519192506001600160a01b038316917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a5460036000620001a662000410565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060007310ed43c718714eb63d5aa57b78b54704e256024e9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200021d57600080fd5b505afa15801562000232573d6000803e3d6000fd5b505050506040513d60208110156200024957600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b1580156200029a57600080fd5b505afa158015620002af573d6000803e3d6000fd5b505050506040513d6020811015620002c657600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200031957600080fd5b505af11580156200032e573d6000803e3d6000fd5b505050506040513d60208110156200034557600080fd5b50516001600160601b0319606091821b811660a0529082901b166080526001600660006200037262000414565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620003bc62000410565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a350620004bf565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200046657805160ff191683800117855562000496565b8280016001018555821562000496579182015b828111156200049657825182559160200191906001019062000479565b50620004a4929150620004a8565b5090565b5b80821115620004a45760008155600101620004a9565b60805160601c60a05160601c61318162000507600039806111015280611dad525080610a8f528061282452806128dc528061290352806129f15280612a1852506131816000f3fe6080604052600436106102765760003560e01c80636bc87c3a1161014f578063a9059cbb116100c1578063dd4670641161007a578063dd467064146108ba578063dd62ed3e146108e4578063ea2f0b371461091f578063f0f165af14610952578063f2fde38b1461097c578063ffc78635146109af5761027d565b8063a9059cbb146107ec578063b6c5232414610825578063c0b0fda21461083a578063c49b9a801461084f578063cbb2cc3d1461087b578063d543dbeb146108905761027d565b80637d1db4a5116101135780637d1db4a51461072c57806388f82020146107415780638da5cb5b1461077457806395d89b4114610789578063a457c2d71461079e578063a69df4b5146107d75761027d565b80636bc87c3a146106a557806370a08231146106ba578063715018a6146106ed578063741af87f146107025780637b208769146107175761027d565b806339509351116101e8578063437823ec116101ac578063437823ec146105b05780634549b039146105e357806349bd5a5e146106155780634a74bb021461062a57806352390c021461063f5780635342acb4146106725761027d565b806339509351146104db5780633b124fe7146105145780633bd5d17314610529578063428c80e41461055357806342966c68146105865761027d565b806318160ddd1161023a57806318160ddd146103c657806323b872dd146103db5780632d8381191461041e57806330563bd714610448578063313ce5671461047d5780633685d419146104a85761027d565b806306fdde031461028257806307c2e2941461030c578063095ea7b31461033d57806313114a9d1461038a5780631694505e146103b15761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102976109c4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d15781810151838201526020016102b9565b50505050905090810190601f1680156102fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031857600080fd5b50610321610a5a565b604080516001600160a01b039092168252519081900360200190f35b34801561034957600080fd5b506103766004803603604081101561036057600080fd5b506001600160a01b038135169060200135610a69565b604080519115158252519081900360200190f35b34801561039657600080fd5b5061039f610a87565b60408051918252519081900360200190f35b3480156103bd57600080fd5b50610321610a8d565b3480156103d257600080fd5b5061039f610ab1565b3480156103e757600080fd5b50610376600480360360608110156103fe57600080fd5b506001600160a01b03813581169160208101359091169060400135610ab7565b34801561042a57600080fd5b5061039f6004803603602081101561044157600080fd5b5035610b3e565b34801561045457600080fd5b5061047b6004803603602081101561046b57600080fd5b50356001600160a01b0316610ba0565b005b34801561048957600080fd5b50610492610c1a565b6040805160ff9092168252519081900360200190f35b3480156104b457600080fd5b5061047b600480360360208110156104cb57600080fd5b50356001600160a01b0316610c23565b3480156104e757600080fd5b50610376600480360360408110156104fe57600080fd5b506001600160a01b038135169060200135610de4565b34801561052057600080fd5b5061039f610e32565b34801561053557600080fd5b5061047b6004803603602081101561054c57600080fd5b5035610e38565b34801561055f57600080fd5b5061047b6004803603602081101561057657600080fd5b50356001600160a01b0316610f12565b34801561059257600080fd5b5061047b600480360360208110156105a957600080fd5b5035610f8c565b3480156105bc57600080fd5b5061047b600480360360208110156105d357600080fd5b50356001600160a01b0316610ff1565b3480156105ef57600080fd5b5061039f6004803603604081101561060657600080fd5b5080359060200135151561106d565b34801561062157600080fd5b506103216110ff565b34801561063657600080fd5b50610376611123565b34801561064b57600080fd5b5061047b6004803603602081101561066257600080fd5b50356001600160a01b0316611133565b34801561067e57600080fd5b506103766004803603602081101561069557600080fd5b50356001600160a01b03166112b9565b3480156106b157600080fd5b5061039f6112d7565b3480156106c657600080fd5b5061039f600480360360208110156106dd57600080fd5b50356001600160a01b03166112dd565b3480156106f957600080fd5b5061047b61133f565b34801561070e57600080fd5b5061047b6113cf565b34801561072357600080fd5b50610321611492565b34801561073857600080fd5b5061039f6114a1565b34801561074d57600080fd5b506103766004803603602081101561076457600080fd5b50356001600160a01b03166114a7565b34801561078057600080fd5b506103216114c5565b34801561079557600080fd5b506102976114d4565b3480156107aa57600080fd5b50610376600480360360408110156107c157600080fd5b506001600160a01b038135169060200135611535565b3480156107e357600080fd5b5061047b61159d565b3480156107f857600080fd5b506103766004803603604081101561080f57600080fd5b506001600160a01b03813516906020013561168b565b34801561083157600080fd5b5061039f61169f565b34801561084657600080fd5b5061039f6116a5565b34801561085b57600080fd5b5061047b6004803603602081101561087257600080fd5b503515156116ab565b34801561088757600080fd5b5061039f611756565b34801561089c57600080fd5b5061047b600480360360208110156108b357600080fd5b503561175c565b3480156108c657600080fd5b5061047b600480360360208110156108dd57600080fd5b5035611819565b3480156108f057600080fd5b5061039f6004803603604081101561090757600080fd5b506001600160a01b03813581169160200135166118b7565b34801561092b57600080fd5b5061047b6004803603602081101561094257600080fd5b50356001600160a01b03166118e2565b34801561095e57600080fd5b5061047b6004803603602081101561097557600080fd5b503561195b565b34801561098857600080fd5b5061047b6004803603602081101561099f57600080fd5b50356001600160a01b0316611a10565b3480156109bb57600080fd5b5061047b611af6565b600c8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a505780601f10610a2557610100808354040283529160200191610a50565b820191906000526020600020905b815481529060010190602001808311610a3357829003601f168201915b5050505050905090565b6017546001600160a01b031681565b6000610a7d610a76611bbf565b8484611bc3565b5060015b92915050565b600b5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b60095490565b6000610ac4848484611caf565b610b3484610ad0611bbf565b610b2f85604051806060016040528060288152602001612fdd602891396001600160a01b038a16600090815260056020526040812090610b0e611bbf565b6001600160a01b031681526020810191909152604001600020549190611e1c565b611bc3565b5060019392505050565b6000600a54821115610b815760405162461bcd60e51b815260040180806020018281038252602a815260200180612eef602a913960400191505060405180910390fd5b6000610b8b611eb3565b9050610b978382611ed6565b9150505b919050565b610ba8611bbf565b6000546001600160a01b03908116911614610bf8576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b601780546001600160a01b0319166001600160a01b0392909216919091179055565b600e5460ff1690565b610c2b611bbf565b6000546001600160a01b03908116911614610c7b576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610ce8576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610de057816001600160a01b031660088281548110610d0c57fe5b6000918252602090912001546001600160a01b03161415610dd857600880546000198101908110610d3957fe5b600091825260209091200154600880546001600160a01b039092169183908110610d5f57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610db157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610de0565b600101610ceb565b5050565b6000610a7d610df1611bbf565b84610b2f8560056000610e02611bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611f1f565b600f5481565b6000610e42611bbf565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e9d5760405162461bcd60e51b815260040180806020018281038252602c8152602001806130d8602c913960400191505060405180910390fd5b6000610ea883611f79565b505050506001600160a01b038416600090815260036020526040902054919250610ed491905082611fc8565b6001600160a01b038316600090815260036020526040902055600a54610efa9082611fc8565b600a55600b54610f0a9084611f1f565b600b55505050565b610f1a611bbf565b6000546001600160a01b03908116911614610f6a576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b610f94611bbf565b6000546001600160a01b03908116911614610fe4576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b610fee338261200a565b50565b610ff9611bbf565b6000546001600160a01b03908116911614611049576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006009548311156110c6576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110e55760006110d684611f79565b50939550610a81945050505050565b60006110f084611f79565b50929550610a81945050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601854600160a81b900460ff1681565b61113b611bbf565b6000546001600160a01b0390811691161461118b576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156111f9576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611253576001600160a01b03811660009081526003602052604090205461123990610b3e565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b60115481565b6001600160a01b03811660009081526007602052604081205460ff161561131d57506001600160a01b038116600090815260046020526040902054610b9b565b6001600160a01b038216600090815260036020526040902054610a8190610b3e565b611347611bbf565b6000546001600160a01b03908116911614611397576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020613025833981519152908390a3600080546001600160a01b0319169055565b6113d7611bbf565b6000546001600160a01b03908116911614611427576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6000600f81905560108190556011819055601281905560138190556014819055601581905560168190556018805460ff60a01b1916905560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a1565b6018546001600160a01b031681565b60195481565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600d8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a505780601f10610a2557610100808354040283529160200191610a50565b6000610a7d611542611bbf565b84610b2f85604051806060016040528060258152602001613127602591396005600061156c611bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611e1c565b6001546001600160a01b031633146115e65760405162461bcd60e51b81526004018080602001828103825260238152602001806131046023913960400191505060405180910390fd5b600254421061163c576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061302583398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a7d611698611bbf565b8484611caf565b60025490565b60135481565b6116b3611bbf565b6000546001600160a01b03908116911614611703576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b60188054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b60155481565b611764611bbf565b6000546001600160a01b039081169116146117b4576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b600a81116117f35760405162461bcd60e51b8152600401808060200182810382526033815260200180612f896033913960400191505060405180910390fd5b611813606461180d8360095461215d90919063ffffffff16565b90611ed6565b60195550565b611821611bbf565b6000546001600160a01b03908116911614611871576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020613025833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6118ea611bbf565b6000546001600160a01b0390811691161461193a576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b611963611bbf565b6000546001600160a01b039081169116146119b3576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b80601a819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b581604051808060200183815260200182810382526025815260200180612ea8602591396040019250505060405180910390a150565b611a18611bbf565b6000546001600160a01b03908116911614611a68576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b038116611aad5760405162461bcd60e51b8152600401808060200182810382526026815260200180612f196026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061302583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611afe611bbf565b6000546001600160a01b03908116911614611b4e576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6003600f81905560108190556011819055601255600160138190556014819055600260158190556016556018805460ff60a01b1916600160a01b17905560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a1565b3390565b6001600160a01b038316611c085760405162461bcd60e51b81526004018080602001828103825260248152602001806130b46024913960400191505060405180910390fd5b6001600160a01b038216611c4d5760405162461bcd60e51b8152600401808060200182810382526022815260200180612f3f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611cf45760405162461bcd60e51b815260040180806020018281038252602581526020018061308f6025913960400191505060405180910390fd5b6001600160a01b038216611d395760405162461bcd60e51b8152600401808060200182810382526023815260200180612e856023913960400191505060405180910390fd5b60008111611d785760405162461bcd60e51b81526004018080602001828103825260298152602001806130666029913960400191505060405180910390fd5b6000611d83306112dd565b601a5490915081108015908190611da45750601854600160a01b900460ff16155b8015611de257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8015611df75750601854600160a81b900460ff165b15611e0a57601a549150611e0a826121b6565b611e1585858561225c565b5050505050565b60008184841115611eab5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e70578181015183820152602001611e58565b50505050905090810190601f168015611e9d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611ec0612580565b9092509050611ecf8282611ed6565b9250505090565b6000611f1883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126e3565b9392505050565b600082820183811015611f18576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000806000806000806000611f908a612748565b9250925092506000806000611fae8d8686611fa9611eb3565b612784565b919f909e50909c50959a5093985091965092945050505050565b6000611f1883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e1c565b6001600160a01b03821661204f5760405162461bcd60e51b81526004018080602001828103825260218152602001806130456021913960400191505060405180910390fd5b600061205a836112dd565b90508181101561209b5760405162461bcd60e51b8152600401808060200182810382526022815260200180612ecd6022913960400191505060405180910390fd5b60006120a5611eb3565b6001600160a01b0385166000818152600360209081526040808320805486900390558280527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec8054890190557f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff8054860190556009805489900390558051888152905194955091937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350505050565b60008261216c57506000610a81565b8282028284828161217957fe5b0414611f185760405162461bcd60e51b8152600401808060200182810382526021815260200180612fbc6021913960400191505060405180910390fd5b6018805460ff60a01b1916600160a01b17905560006121d6826002611ed6565b905060006121e48383611fc8565b9050476121f0836127d4565b60006121fc4783611fc8565b905061220883826129eb565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506018805460ff60a01b19169055505050565b6001600160a01b03831660009081526006602052604090205460ff168061229b57506001600160a01b03821660009081526006602052604090205460ff165b156122ad576122a8612aef565b6122ee565b6019548111156122ee5760405162461bcd60e51b8152600401808060200182810382526028815260200180612f616028913960400191505060405180910390fd5b600061230a606461180d6013548561215d90919063ffffffff16565b90506000612328606461180d6015548661215d90919063ffffffff16565b6001600160a01b03861660009081526007602052604090205490915060ff16801561236c57506001600160a01b03841660009081526007602052604090205460ff16155b156123945761238f858561238a846123848888611fc8565b90611fc8565b612b05565b6124c1565b6001600160a01b03851660009081526007602052604090205460ff161580156123d557506001600160a01b03841660009081526007602052604090205460ff165b156123f25761238f85856123ed846123848888611fc8565b612c29565b6001600160a01b03851660009081526007602052604090205460ff1615801561243457506001600160a01b03841660009081526007602052604090205460ff16155b156124515761238f858561244c846123848888611fc8565b612cd2565b6001600160a01b03851660009081526007602052604090205460ff16801561249157506001600160a01b03841660009081526007602052604090205460ff165b156124ae5761238f85856124a9846123848888611fc8565b612d16565b6124c1858561244c846123848888611fc8565b6000600f819055601181905560155581156124e2576124e285600084612cd2565b8015612522576017546125059086906001600160a01b031661244c846002611ed6565b6018546125229086906001600160a01b031661244c846002611ed6565b601054600f556012546011556016546015556001600160a01b03851660009081526006602052604090205460ff168061257357506001600160a01b03841660009081526006602052604090205460ff165b15611e1557611e15612d89565b600a546009546000918291825b6008548110156126b1578260036000600884815481106125a957fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061260e57508160046000600884815481106125e757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561262557600a54600954945094505050506126df565b612665600360006008848154811061263957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611fc8565b92506126a7600460006008848154811061267b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611fc8565b915060010161258d565b50600954600a546126c191611ed6565b8210156126d957600a546009549350935050506126df565b90925090505b9091565b600081836127325760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e70578181015183820152602001611e58565b50600083858161273e57fe5b0495945050505050565b60008060008061275785612d9f565b9050600061276486612dbb565b90506000612776826123848986611fc8565b979296509094509092505050565b6000808080612793888661215d565b905060006127a1888761215d565b905060006127af888861215d565b905060006127c1826123848686611fc8565b939b939a50919850919650505050505050565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061280257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561287b57600080fd5b505afa15801561288f573d6000803e3d6000fd5b505050506040513d60208110156128a557600080fd5b50518151829060019081106128b657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612901307f000000000000000000000000000000000000000000000000000000000000000084611bc3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156129a657818101518382015260200161298e565b505050509050019650505050505050600060405180830381600087803b1580156129cf57600080fd5b505af11580156129e3573d6000803e3d6000fd5b505050505050565b612a16307f000000000000000000000000000000000000000000000000000000000000000084611bc3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f305d719823085600080612a536114c5565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b158015612abe57600080fd5b505af1158015612ad2573d6000803e3d6000fd5b50505050506040513d6060811015612ae957600080fd5b50505050565b6000600f81905560118190556013819055601555565b600080600080600080612b1787611f79565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b499088611fc8565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612b789087611fc8565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612ba79086611f1f565b6001600160a01b038916600090815260036020526040902055612bc981612dd7565b612bd38483612e60565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080612c3b87611f79565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612c6d9087611fc8565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612ca39084611f1f565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612ba79086611f1f565b600080600080600080612ce487611f79565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612b789087611fc8565b600080600080600080612d2887611f79565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612d5a9088611fc8565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612c6d9087611fc8565b6003600f81905560115560016013556002601555565b6000610a81606461180d600f548561215d90919063ffffffff16565b6000610a81606461180d6011548561215d90919063ffffffff16565b6000612de1611eb3565b90506000612def838361215d565b30600090815260036020526040902054909150612e0c9082611f1f565b3060009081526003602090815260408083209390935560079052205460ff1615612e5b5730600090815260046020526040902054612e4a9084611f1f565b306000908152600460205260409020555b505050565b600a54612e6d9083611fc8565b600a55600b54612e7d9082611f1f565b600b55505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734e756d546f6b656e7353656c6c546f416464546f4c6971756964697479206368616e67656445524332303a206275726e20616d6f756e7420657863656564732062616c616e6365416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c657373207468616e2031302070657263656e7421536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a206275726e2066726f6d20746865206275726e20616464726573735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203dc8be825529005d8ded9ba8e4ccee9f7abe03ce081da6ce886a5d5124463bcb64736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106102765760003560e01c80636bc87c3a1161014f578063a9059cbb116100c1578063dd4670641161007a578063dd467064146108ba578063dd62ed3e146108e4578063ea2f0b371461091f578063f0f165af14610952578063f2fde38b1461097c578063ffc78635146109af5761027d565b8063a9059cbb146107ec578063b6c5232414610825578063c0b0fda21461083a578063c49b9a801461084f578063cbb2cc3d1461087b578063d543dbeb146108905761027d565b80637d1db4a5116101135780637d1db4a51461072c57806388f82020146107415780638da5cb5b1461077457806395d89b4114610789578063a457c2d71461079e578063a69df4b5146107d75761027d565b80636bc87c3a146106a557806370a08231146106ba578063715018a6146106ed578063741af87f146107025780637b208769146107175761027d565b806339509351116101e8578063437823ec116101ac578063437823ec146105b05780634549b039146105e357806349bd5a5e146106155780634a74bb021461062a57806352390c021461063f5780635342acb4146106725761027d565b806339509351146104db5780633b124fe7146105145780633bd5d17314610529578063428c80e41461055357806342966c68146105865761027d565b806318160ddd1161023a57806318160ddd146103c657806323b872dd146103db5780632d8381191461041e57806330563bd714610448578063313ce5671461047d5780633685d419146104a85761027d565b806306fdde031461028257806307c2e2941461030c578063095ea7b31461033d57806313114a9d1461038a5780631694505e146103b15761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b506102976109c4565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102d15781810151838201526020016102b9565b50505050905090810190601f1680156102fe5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561031857600080fd5b50610321610a5a565b604080516001600160a01b039092168252519081900360200190f35b34801561034957600080fd5b506103766004803603604081101561036057600080fd5b506001600160a01b038135169060200135610a69565b604080519115158252519081900360200190f35b34801561039657600080fd5b5061039f610a87565b60408051918252519081900360200190f35b3480156103bd57600080fd5b50610321610a8d565b3480156103d257600080fd5b5061039f610ab1565b3480156103e757600080fd5b50610376600480360360608110156103fe57600080fd5b506001600160a01b03813581169160208101359091169060400135610ab7565b34801561042a57600080fd5b5061039f6004803603602081101561044157600080fd5b5035610b3e565b34801561045457600080fd5b5061047b6004803603602081101561046b57600080fd5b50356001600160a01b0316610ba0565b005b34801561048957600080fd5b50610492610c1a565b6040805160ff9092168252519081900360200190f35b3480156104b457600080fd5b5061047b600480360360208110156104cb57600080fd5b50356001600160a01b0316610c23565b3480156104e757600080fd5b50610376600480360360408110156104fe57600080fd5b506001600160a01b038135169060200135610de4565b34801561052057600080fd5b5061039f610e32565b34801561053557600080fd5b5061047b6004803603602081101561054c57600080fd5b5035610e38565b34801561055f57600080fd5b5061047b6004803603602081101561057657600080fd5b50356001600160a01b0316610f12565b34801561059257600080fd5b5061047b600480360360208110156105a957600080fd5b5035610f8c565b3480156105bc57600080fd5b5061047b600480360360208110156105d357600080fd5b50356001600160a01b0316610ff1565b3480156105ef57600080fd5b5061039f6004803603604081101561060657600080fd5b5080359060200135151561106d565b34801561062157600080fd5b506103216110ff565b34801561063657600080fd5b50610376611123565b34801561064b57600080fd5b5061047b6004803603602081101561066257600080fd5b50356001600160a01b0316611133565b34801561067e57600080fd5b506103766004803603602081101561069557600080fd5b50356001600160a01b03166112b9565b3480156106b157600080fd5b5061039f6112d7565b3480156106c657600080fd5b5061039f600480360360208110156106dd57600080fd5b50356001600160a01b03166112dd565b3480156106f957600080fd5b5061047b61133f565b34801561070e57600080fd5b5061047b6113cf565b34801561072357600080fd5b50610321611492565b34801561073857600080fd5b5061039f6114a1565b34801561074d57600080fd5b506103766004803603602081101561076457600080fd5b50356001600160a01b03166114a7565b34801561078057600080fd5b506103216114c5565b34801561079557600080fd5b506102976114d4565b3480156107aa57600080fd5b50610376600480360360408110156107c157600080fd5b506001600160a01b038135169060200135611535565b3480156107e357600080fd5b5061047b61159d565b3480156107f857600080fd5b506103766004803603604081101561080f57600080fd5b506001600160a01b03813516906020013561168b565b34801561083157600080fd5b5061039f61169f565b34801561084657600080fd5b5061039f6116a5565b34801561085b57600080fd5b5061047b6004803603602081101561087257600080fd5b503515156116ab565b34801561088757600080fd5b5061039f611756565b34801561089c57600080fd5b5061047b600480360360208110156108b357600080fd5b503561175c565b3480156108c657600080fd5b5061047b600480360360208110156108dd57600080fd5b5035611819565b3480156108f057600080fd5b5061039f6004803603604081101561090757600080fd5b506001600160a01b03813581169160200135166118b7565b34801561092b57600080fd5b5061047b6004803603602081101561094257600080fd5b50356001600160a01b03166118e2565b34801561095e57600080fd5b5061047b6004803603602081101561097557600080fd5b503561195b565b34801561098857600080fd5b5061047b6004803603602081101561099f57600080fd5b50356001600160a01b0316611a10565b3480156109bb57600080fd5b5061047b611af6565b600c8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a505780601f10610a2557610100808354040283529160200191610a50565b820191906000526020600020905b815481529060010190602001808311610a3357829003601f168201915b5050505050905090565b6017546001600160a01b031681565b6000610a7d610a76611bbf565b8484611bc3565b5060015b92915050565b600b5490565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e81565b60095490565b6000610ac4848484611caf565b610b3484610ad0611bbf565b610b2f85604051806060016040528060288152602001612fdd602891396001600160a01b038a16600090815260056020526040812090610b0e611bbf565b6001600160a01b031681526020810191909152604001600020549190611e1c565b611bc3565b5060019392505050565b6000600a54821115610b815760405162461bcd60e51b815260040180806020018281038252602a815260200180612eef602a913960400191505060405180910390fd5b6000610b8b611eb3565b9050610b978382611ed6565b9150505b919050565b610ba8611bbf565b6000546001600160a01b03908116911614610bf8576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b601780546001600160a01b0319166001600160a01b0392909216919091179055565b600e5460ff1690565b610c2b611bbf565b6000546001600160a01b03908116911614610c7b576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16610ce8576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610de057816001600160a01b031660088281548110610d0c57fe5b6000918252602090912001546001600160a01b03161415610dd857600880546000198101908110610d3957fe5b600091825260209091200154600880546001600160a01b039092169183908110610d5f57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610db157fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610de0565b600101610ceb565b5050565b6000610a7d610df1611bbf565b84610b2f8560056000610e02611bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918c168152925290205490611f1f565b600f5481565b6000610e42611bbf565b6001600160a01b03811660009081526007602052604090205490915060ff1615610e9d5760405162461bcd60e51b815260040180806020018281038252602c8152602001806130d8602c913960400191505060405180910390fd5b6000610ea883611f79565b505050506001600160a01b038416600090815260036020526040902054919250610ed491905082611fc8565b6001600160a01b038316600090815260036020526040902055600a54610efa9082611fc8565b600a55600b54610f0a9084611f1f565b600b55505050565b610f1a611bbf565b6000546001600160a01b03908116911614610f6a576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b601880546001600160a01b0319166001600160a01b0392909216919091179055565b610f94611bbf565b6000546001600160a01b03908116911614610fe4576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b610fee338261200a565b50565b610ff9611bbf565b6000546001600160a01b03908116911614611049576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b60006009548311156110c6576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b816110e55760006110d684611f79565b50939550610a81945050505050565b60006110f084611f79565b50929550610a81945050505050565b7f000000000000000000000000b2659c0086aa34a5ebb53632222fac5ef0bfe15181565b601854600160a81b900460ff1681565b61113b611bbf565b6000546001600160a01b0390811691161461118b576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16156111f9576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205415611253576001600160a01b03811660009081526003602052604090205461123990610b3e565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b6001600160a01b031660009081526006602052604090205460ff1690565b60115481565b6001600160a01b03811660009081526007602052604081205460ff161561131d57506001600160a01b038116600090815260046020526040902054610b9b565b6001600160a01b038216600090815260036020526040902054610a8190610b3e565b611347611bbf565b6000546001600160a01b03908116911614611397576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020613025833981519152908390a3600080546001600160a01b0319169055565b6113d7611bbf565b6000546001600160a01b03908116911614611427576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6000600f81905560108190556011819055601281905560138190556014819055601581905560168190556018805460ff60a01b1916905560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a1565b6018546001600160a01b031681565b60195481565b6001600160a01b031660009081526007602052604090205460ff1690565b6000546001600160a01b031690565b600d8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610a505780601f10610a2557610100808354040283529160200191610a50565b6000610a7d611542611bbf565b84610b2f85604051806060016040528060258152602001613127602591396005600061156c611bbf565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190611e1c565b6001546001600160a01b031633146115e65760405162461bcd60e51b81526004018080602001828103825260238152602001806131046023913960400191505060405180910390fd5b600254421061163c576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b03938416939091169160008051602061302583398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610a7d611698611bbf565b8484611caf565b60025490565b60135481565b6116b3611bbf565b6000546001600160a01b03908116911614611703576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b60188054821515600160a81b810260ff60a81b199092169190911790915560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a150565b60155481565b611764611bbf565b6000546001600160a01b039081169116146117b4576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b600a81116117f35760405162461bcd60e51b8152600401808060200182810382526033815260200180612f896033913960400191505060405180910390fd5b611813606461180d8360095461215d90919063ffffffff16565b90611ed6565b60195550565b611821611bbf565b6000546001600160a01b03908116911614611871576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020613025833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6118ea611bbf565b6000546001600160a01b0390811691161461193a576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b03166000908152600660205260409020805460ff19169055565b611963611bbf565b6000546001600160a01b039081169116146119b3576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b80601a819055507fdd970dd9b5bfe707922155b058a407655cb18288b807e2216442bca8ad83d6b581604051808060200183815260200182810382526025815260200180612ea8602591396040019250505060405180910390a150565b611a18611bbf565b6000546001600160a01b03908116911614611a68576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6001600160a01b038116611aad5760405162461bcd60e51b8152600401808060200182810382526026815260200180612f196026913960400191505060405180910390fd5b600080546040516001600160a01b038085169392169160008051602061302583398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b611afe611bbf565b6000546001600160a01b03908116911614611b4e576040805162461bcd60e51b81526020600482018190526024820152600080516020613005833981519152604482015290519081900360640190fd5b6003600f81905560108190556011819055601255600160138190556014819055600260158190556016556018805460ff60a01b1916600160a01b17905560408051918252517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599181900360200190a1565b3390565b6001600160a01b038316611c085760405162461bcd60e51b81526004018080602001828103825260248152602001806130b46024913960400191505060405180910390fd5b6001600160a01b038216611c4d5760405162461bcd60e51b8152600401808060200182810382526022815260200180612f3f6022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316611cf45760405162461bcd60e51b815260040180806020018281038252602581526020018061308f6025913960400191505060405180910390fd5b6001600160a01b038216611d395760405162461bcd60e51b8152600401808060200182810382526023815260200180612e856023913960400191505060405180910390fd5b60008111611d785760405162461bcd60e51b81526004018080602001828103825260298152602001806130666029913960400191505060405180910390fd5b6000611d83306112dd565b601a5490915081108015908190611da45750601854600160a01b900460ff16155b8015611de257507f000000000000000000000000b2659c0086aa34a5ebb53632222fac5ef0bfe1516001600160a01b0316856001600160a01b031614155b8015611df75750601854600160a81b900460ff165b15611e0a57601a549150611e0a826121b6565b611e1585858561225c565b5050505050565b60008184841115611eab5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e70578181015183820152602001611e58565b50505050905090810190601f168015611e9d5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6000806000611ec0612580565b9092509050611ecf8282611ed6565b9250505090565b6000611f1883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506126e3565b9392505050565b600082820183811015611f18576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b6000806000806000806000806000611f908a612748565b9250925092506000806000611fae8d8686611fa9611eb3565b612784565b919f909e50909c50959a5093985091965092945050505050565b6000611f1883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611e1c565b6001600160a01b03821661204f5760405162461bcd60e51b81526004018080602001828103825260218152602001806130456021913960400191505060405180910390fd5b600061205a836112dd565b90508181101561209b5760405162461bcd60e51b8152600401808060200182810382526022815260200180612ecd6022913960400191505060405180910390fd5b60006120a5611eb3565b6001600160a01b0385166000818152600360209081526040808320805486900390558280527f17ef568e3e12ab5b9c7254a8d58478811de00f9e6eb34345acd53bf8fd09d3ec8054890190557f3617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff8054860190556009805489900390558051888152905194955091937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a350505050565b60008261216c57506000610a81565b8282028284828161217957fe5b0414611f185760405162461bcd60e51b8152600401808060200182810382526021815260200180612fbc6021913960400191505060405180910390fd5b6018805460ff60a01b1916600160a01b17905560006121d6826002611ed6565b905060006121e48383611fc8565b9050476121f0836127d4565b60006121fc4783611fc8565b905061220883826129eb565b604080518581526020810183905280820185905290517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a150506018805460ff60a01b19169055505050565b6001600160a01b03831660009081526006602052604090205460ff168061229b57506001600160a01b03821660009081526006602052604090205460ff165b156122ad576122a8612aef565b6122ee565b6019548111156122ee5760405162461bcd60e51b8152600401808060200182810382526028815260200180612f616028913960400191505060405180910390fd5b600061230a606461180d6013548561215d90919063ffffffff16565b90506000612328606461180d6015548661215d90919063ffffffff16565b6001600160a01b03861660009081526007602052604090205490915060ff16801561236c57506001600160a01b03841660009081526007602052604090205460ff16155b156123945761238f858561238a846123848888611fc8565b90611fc8565b612b05565b6124c1565b6001600160a01b03851660009081526007602052604090205460ff161580156123d557506001600160a01b03841660009081526007602052604090205460ff165b156123f25761238f85856123ed846123848888611fc8565b612c29565b6001600160a01b03851660009081526007602052604090205460ff1615801561243457506001600160a01b03841660009081526007602052604090205460ff16155b156124515761238f858561244c846123848888611fc8565b612cd2565b6001600160a01b03851660009081526007602052604090205460ff16801561249157506001600160a01b03841660009081526007602052604090205460ff165b156124ae5761238f85856124a9846123848888611fc8565b612d16565b6124c1858561244c846123848888611fc8565b6000600f819055601181905560155581156124e2576124e285600084612cd2565b8015612522576017546125059086906001600160a01b031661244c846002611ed6565b6018546125229086906001600160a01b031661244c846002611ed6565b601054600f556012546011556016546015556001600160a01b03851660009081526006602052604090205460ff168061257357506001600160a01b03841660009081526006602052604090205460ff165b15611e1557611e15612d89565b600a546009546000918291825b6008548110156126b1578260036000600884815481106125a957fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118061260e57508160046000600884815481106125e757fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561262557600a54600954945094505050506126df565b612665600360006008848154811061263957fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611fc8565b92506126a7600460006008848154811061267b57fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611fc8565b915060010161258d565b50600954600a546126c191611ed6565b8210156126d957600a546009549350935050506126df565b90925090505b9091565b600081836127325760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315611e70578181015183820152602001611e58565b50600083858161273e57fe5b0495945050505050565b60008060008061275785612d9f565b9050600061276486612dbb565b90506000612776826123848986611fc8565b979296509094509092505050565b6000808080612793888661215d565b905060006127a1888761215d565b905060006127af888861215d565b905060006127c1826123848686611fc8565b939b939a50919850919650505050505050565b6040805160028082526060808301845292602083019080368337019050509050308160008151811061280257fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561287b57600080fd5b505afa15801561288f573d6000803e3d6000fd5b505050506040513d60208110156128a557600080fd5b50518151829060019081106128b657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612901307f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e84611bc3565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b838110156129a657818101518382015260200161298e565b505050509050019650505050505050600060405180830381600087803b1580156129cf57600080fd5b505af11580156129e3573d6000803e3d6000fd5b505050505050565b612a16307f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e84611bc3565b7f00000000000000000000000010ed43c718714eb63d5aa57b78b54704e256024e6001600160a01b031663f305d719823085600080612a536114c5565b426040518863ffffffff1660e01b815260040180876001600160a01b03168152602001868152602001858152602001848152602001836001600160a01b0316815260200182815260200196505050505050506060604051808303818588803b158015612abe57600080fd5b505af1158015612ad2573d6000803e3d6000fd5b50505050506040513d6060811015612ae957600080fd5b50505050565b6000600f81905560118190556013819055601555565b600080600080600080612b1787611f79565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612b499088611fc8565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612b789087611fc8565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612ba79086611f1f565b6001600160a01b038916600090815260036020526040902055612bc981612dd7565b612bd38483612e60565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080612c3b87611f79565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612c6d9087611fc8565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612ca39084611f1f565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612ba79086611f1f565b600080600080600080612ce487611f79565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612b789087611fc8565b600080600080600080612d2887611f79565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612d5a9088611fc8565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612c6d9087611fc8565b6003600f81905560115560016013556002601555565b6000610a81606461180d600f548561215d90919063ffffffff16565b6000610a81606461180d6011548561215d90919063ffffffff16565b6000612de1611eb3565b90506000612def838361215d565b30600090815260036020526040902054909150612e0c9082611f1f565b3060009081526003602090815260408083209390935560079052205460ff1615612e5b5730600090815260046020526040902054612e4a9084611f1f565b306000908152600460205260409020555b505050565b600a54612e6d9083611fc8565b600a55600b54612e7d9082611f1f565b600b55505056fe45524332303a207472616e7366657220746f20746865207a65726f20616464726573734e756d546f6b656e7353656c6c546f416464546f4c6971756964697479206368616e67656445524332303a206275726e20616d6f756e7420657863656564732062616c616e6365416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c657373207468616e2031302070657263656e7421536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a206275726e2066726f6d20746865206275726e20616464726573735472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212203dc8be825529005d8ded9ba8e4ccee9f7abe03ce081da6ce886a5d5124463bcb64736f6c634300060c0033

Deployed Bytecode Sourcemap

14671:19447:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18540:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15856:73;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;15856:73:0;;;;;;;;;;;;;;19452:161;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19452:161:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20573:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;16033:51;;;;;;;;;;;;;:::i;18817:95::-;;;;;;;;;;;;;:::i;19621:313::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19621:313:0;;;;;;;;;;;;;;;;;:::i;21497:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21497:253:0;;:::i;32491:115::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32491:115:0;-1:-1:-1;;;;;32491:115:0;;:::i;:::-;;18726:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22117:479;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22117:479:0;-1:-1:-1;;;;;22117:479:0;;:::i;19942:218::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19942:218:0;;;;;;;;:::i;15485:26::-;;;;;;;;;;;;;:::i;20668:377::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20668:377:0;;:::i;32624:116::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32624:116:0;-1:-1:-1;;;;;32624:116:0;;:::i;33188:97::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33188:97:0;;:::i;32226:117::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32226:117:0;-1:-1:-1;;;;;32226:117:0;;:::i;21053:436::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21053:436:0;;;;;;;;;:::i;16091:38::-;;;;;;;;;;;;;:::i;16170:41::-;;;;;;;;;;;;;:::i;21764:339::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;21764:339:0;-1:-1:-1;;;;;21764:339:0;;:::i;26085:123::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26085:123:0;-1:-1:-1;;;;;26085:123:0;;:::i;15572:32::-;;;;;;;;;;;;;:::i;18920:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18920:198:0;-1:-1:-1;;;;;18920:198:0;;:::i;5663:148::-;;;;;;;;;;;;;:::i;18120:410::-;;;;;;;;;;;;;:::i;15938:74::-;;;;;;;;;;;;;:::i;16224:41::-;;;;;;;;;;;;;:::i;20445:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20445:120:0;-1:-1:-1;;;;;20445:120:0;;:::i;5447:79::-;;;;;;;;;;;;;:::i;18631:87::-;;;;;;;;;;;;;:::i;20168:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20168:269:0;;;;;;;;:::i;6400:293::-;;;;;;;;;;;;;:::i;19126:167::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19126:167:0;;;;;;;;:::i;6073:89::-;;;;;;;;;;;;;:::i;15673:27::-;;;;;;;;;;;;;:::i;33005:171::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33005:171:0;;;;:::i;15759:29::-;;;;;;;;;;;;;:::i;32765:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32765:230:0;;:::i;6172:214::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6172:214:0;;:::i;19301:143::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19301:143:0;;;;;;;;;;:::i;32361:116::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32361:116:0;-1:-1:-1;;;;;32361:116:0;;:::i;33291:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;33291:199:0;;:::i;5821:244::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5821:244:0;-1:-1:-1;;;;;5821:244:0;;:::i;17703:407::-;;;;;;;;;;;;;:::i;18540:83::-;18610:5;18603:12;;;;;;;;-1:-1:-1;;18603:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18577:13;;18603:12;;18610:5;;18603:12;;18610:5;18603:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18540:83;:::o;15856:73::-;;;-1:-1:-1;;;;;15856:73:0;;:::o;19452:161::-;19527:4;19544:39;19553:12;:10;:12::i;:::-;19567:7;19576:6;19544:8;:39::i;:::-;-1:-1:-1;19601:4:0;19452:161;;;;;:::o;20573:87::-;20642:10;;20573:87;:::o;16033:51::-;;;:::o;18817:95::-;18897:7;;18817:95;:::o;19621:313::-;19719:4;19736:36;19746:6;19754:9;19765:6;19736:9;:36::i;:::-;19783:121;19792:6;19800:12;:10;:12::i;:::-;19814:89;19852:6;19814:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19814:19:0;;;;;;:11;:19;;;;;;19834:12;:10;:12::i;:::-;-1:-1:-1;;;;;19814:33:0;;;;;;;;;;;;-1:-1:-1;19814:33:0;;;:89;:37;:89::i;:::-;19783:8;:121::i;:::-;-1:-1:-1;19922:4:0;19621:313;;;;;:::o;21497:253::-;21563:7;21602;;21591;:18;;21583:73;;;;-1:-1:-1;;;21583:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21667:19;21690:10;:8;:10::i;:::-;21667:33;-1:-1:-1;21718:24:0;:7;21667:33;21718:11;:24::i;:::-;21711:31;;;21497:253;;;;:::o;32491:115::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;32574:12:::1;:24:::0;;-1:-1:-1;;;;;;32574:24:0::1;-1:-1:-1::0;;;;;32574:24:0;;;::::1;::::0;;;::::1;::::0;;32491:115::o;18726:83::-;18792:9;;;;18726:83;:::o;22117:479::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;22199:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;22191:60;;;::::0;;-1:-1:-1;;;22191:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;22267:9;22262:327;22286:9;:16:::0;22282:20;::::1;22262:327;;;22344:7;-1:-1:-1::0;;;;;22328:23:0::1;:9;22338:1;22328:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;22328:12:0::1;:23;22324:254;;;22387:9;22397:16:::0;;-1:-1:-1;;22397:20:0;;;22387:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22372:9:::1;:12:::0;;-1:-1:-1;;;;;22387:31:0;;::::1;::::0;22382:1;;22372:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;22372:46:0::1;-1:-1:-1::0;;;;;22372:46:0;;::::1;;::::0;;22437:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;22476:11:::1;:20:::0;;;;:28;;-1:-1:-1;;22476:28:0::1;::::0;;22523:9:::1;:15:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;22523:15:0;;;;;-1:-1:-1;;;;;;22523:15:0::1;::::0;;;;;22557:5:::1;;22324:254;22304:3;;22262:327;;;;22117:479:::0;:::o;19942:218::-;20030:4;20047:83;20056:12;:10;:12::i;:::-;20070:7;20079:50;20118:10;20079:11;:25;20091:12;:10;:12::i;:::-;-1:-1:-1;;;;;20079:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;20079:25:0;;;:34;;;;;;;;;;;:38;:50::i;15485:26::-;;;;:::o;20668:377::-;20720:14;20737:12;:10;:12::i;:::-;-1:-1:-1;;;;;20769:19:0;;;;;;:11;:19;;;;;;20720:29;;-1:-1:-1;20769:19:0;;20768:20;20760:77;;;;-1:-1:-1;;;20760:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20849:15;20873:19;20884:7;20873:10;:19::i;:::-;-1:-1:-1;;;;;;;;;20921:15:0;;;;;;:7;:15;;;;;;20848:44;;-1:-1:-1;20921:28:0;;:15;-1:-1:-1;20848:44:0;20921:19;:28::i;:::-;-1:-1:-1;;;;;20903:15:0;;;;;;:7;:15;;;;;:46;20970:7;;:20;;20982:7;20970:11;:20::i;:::-;20960:7;:30;21014:10;;:23;;21029:7;21014:14;:23::i;:::-;21001:10;:36;-1:-1:-1;;;20668:377:0:o;32624:116::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;32707:13:::1;:25:::0;;-1:-1:-1;;;;;;32707:25:0::1;-1:-1:-1::0;;;;;32707:25:0;;;::::1;::::0;;;::::1;::::0;;32624:116::o;33188:97::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;33256:25:::1;33262:10;33274:6;33256:5;:25::i;:::-;33188:97:::0;:::o;32226:117::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32301:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;32301:34:0::1;32331:4;32301:34;::::0;;32226:117::o;21053:436::-;21143:7;21182;;21171;:18;;21163:62;;;;;-1:-1:-1;;;21163:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;21241:17;21236:246;;21276:15;21300:19;21311:7;21300:10;:19::i;:::-;-1:-1:-1;21275:44:0;;-1:-1:-1;21334:14:0;;-1:-1:-1;;;;;21334:14:0;21236:246;21383:23;21414:19;21425:7;21414:10;:19::i;:::-;-1:-1:-1;21381:52:0;;-1:-1:-1;21448:22:0;;-1:-1:-1;;;;;21448:22:0;16091:38;;;:::o;16170:41::-;;;-1:-1:-1;;;16170:41:0;;;;;:::o;21764:339::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21853:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;21852:21;21844:61;;;::::0;;-1:-1:-1;;;21844:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;21919:16:0;::::1;21938:1;21919:16:::0;;;:7:::1;:16;::::0;;;;;:20;21916:108:::1;;-1:-1:-1::0;;;;;21995:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;21975:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;21956:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;21916:108:::1;-1:-1:-1::0;;;;;22034:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;22034:27:0::1;22057:4;22034:27:::0;;::::1;::::0;;;22072:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;22072:23:0::1;::::0;;::::1;::::0;;21764:339::o;26085:123::-;-1:-1:-1;;;;;26173:27:0;26149:4;26173:27;;;:18;:27;;;;;;;;;26085:123::o;15572:32::-;;;;:::o;18920:198::-;-1:-1:-1;;;;;19010:20:0;;18986:7;19010:20;;;:11;:20;;;;;;;;19006:49;;;-1:-1:-1;;;;;;19039:16:0;;;;;;:7;:16;;;;;;19032:23;;19006:49;-1:-1:-1;;;;;19093:16:0;;;;;;:7;:16;;;;;;19073:37;;:19;:37::i;5663:148::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;5770:1:::1;5754:6:::0;;5733:40:::1;::::0;-1:-1:-1;;;;;5754:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;5733:40:0;5770:1;;5733:40:::1;5801:1;5784:19:::0;;-1:-1:-1;;;;;;5784:19:0::1;::::0;;5663:148::o;18120:410::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;18194:1:::1;18184:7;:11:::0;;;18206:15:::1;:25:::0;;;18242:13:::1;:17:::0;;;18270:21:::1;:37:::0;;;18318:8:::1;:12:::0;;;18341:16:::1;:27:::0;;;18379:10:::1;:14:::0;;;18404:19:::1;:32:::0;;;18447:16:::1;:24:::0;;-1:-1:-1;;;;18447:24:0::1;::::0;;18487:35:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;18120:410::o:0;15938:74::-;;;-1:-1:-1;;;;;15938:74:0;;:::o;16224:41::-;;;;:::o;20445:120::-;-1:-1:-1;;;;;20537:20:0;20513:4;20537:20;;;:11;:20;;;;;;;;;20445:120::o;5447:79::-;5485:7;5512:6;-1:-1:-1;;;;;5512:6:0;5447:79;:::o;18631:87::-;18703:7;18696:14;;;;;;;;-1:-1:-1;;18696:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18670:13;;18696:14;;18703:7;;18696:14;;18703:7;18696:14;;;;;;;;;;;;;;;;;;;;;;;;20168:269;20261:4;20278:129;20287:12;:10;:12::i;:::-;20301:7;20310:96;20349:15;20310:96;;;;;;;;;;;;;;;;;:11;:25;20322:12;:10;:12::i;:::-;-1:-1:-1;;;;;20310:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;20310:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;6400:293::-;6452:14;;-1:-1:-1;;;;;6452:14:0;6470:10;6452:28;6444:76;;;;-1:-1:-1;;;6444:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6545:9;;6539:3;:15;6531:60;;;;;-1:-1:-1;;;6531:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;6636:14;;;6628:6;;6607:44;;-1:-1:-1;;;;;6636:14:0;;;;6628:6;;;;-1:-1:-1;;;;;;;;;;;6607:44:0;;6671:14;;;6662:23;;-1:-1:-1;;;;;;6662:23:0;-1:-1:-1;;;;;6671:14:0;;;6662:23;;;;;;6400:293::o;19126:167::-;19204:4;19221:42;19231:12;:10;:12::i;:::-;19245:9;19256:6;19221:9;:42::i;6073:89::-;6145:9;;6073:89;:::o;15673:27::-;;;;:::o;33005:171::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;33082:21:::1;:32:::0;;;::::1;;-1:-1:-1::0;;;33082:32:0;::::1;-1:-1:-1::0;;;;33082:32:0;;::::1;::::0;;;::::1;::::0;;;33130:38:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;33005:171:::0;:::o;15759:29::-;;;;:::o;32765:230::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;32867:2:::1;32852:12;:17;32844:81;;;;-1:-1:-1::0;;;32844:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32951:36;32981:5;32951:25;32963:12;32951:7;;:11;;:25;;;;:::i;:::-;:29:::0;::::1;:36::i;:::-;32936:12;:51:::0;-1:-1:-1;32765:230:0:o;6172:214::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;6253:6:::1;::::0;;;6236:23;;-1:-1:-1;;;;;;6236:23:0;;::::1;-1:-1:-1::0;;;;;6253:6:0;::::1;6236:23;::::0;;;6270:19:::1;::::0;;6312:3:::1;:10:::0;::::1;6300:9;:22:::0;6338:40:::1;::::0;6253:6;;-1:-1:-1;;;;;;;;;;;6338:40:0;6253:6;;6338:40:::1;6172:214:::0;:::o;19301:143::-;-1:-1:-1;;;;;19409:18:0;;;19382:7;19409:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;19301:143::o;32361:116::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32434:27:0::1;32464:5;32434:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;32434:35:0::1;::::0;;32361:116::o;33291:199::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;33412:6:::1;33380:29;:38;;;;33434:52;33479:6;33434:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33291:199:::0;:::o;5821:244::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;5910:22:0;::::1;5902:73;;;;-1:-1:-1::0;;;5902:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6012:6;::::0;;5991:38:::1;::::0;-1:-1:-1;;;;;5991:38:0;;::::1;::::0;6012:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;5991:38:0;::::1;6040:6;:17:::0;;-1:-1:-1;;;;;;6040:17:0::1;-1:-1:-1::0;;;;;6040:17:0;;;::::1;::::0;;;::::1;::::0;;5821:244::o;17703:407::-;5584:12;:10;:12::i;:::-;5574:6;;-1:-1:-1;;;;;5574:6:0;;;:22;;;5566:67;;;;;-1:-1:-1;;;5566:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;5566:67:0;;;;;;;;;;;;;;;17776:1:::1;17766:7;:11:::0;;;17788:15:::1;:25:::0;;;17824:13:::1;:17:::0;;;17852:21:::1;:37:::0;17911:1:::1;17900:8;:12:::0;;;17923:16:::1;:27:::0;;;17974:1:::1;17961:10;:14:::0;;;17986:19:::1;:32:::0;18029:16:::1;:23:::0;;-1:-1:-1;;;;18029:23:0::1;-1:-1:-1::0;;;18029:23:0::1;::::0;;18068:34:::1;::::0;;;;;;::::1;::::0;;;;::::1;::::0;;::::1;17703:407::o:0;2347:106::-;2435:10;2347:106;:::o;26216:337::-;-1:-1:-1;;;;;26309:19:0;;26301:68;;;;-1:-1:-1;;;26301:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26388:21:0;;26380:68;;;;-1:-1:-1;;;26380:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26461:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;26513:32;;;;;;;;;;;;;;;;;26216:337;;;:::o;26561:766::-;-1:-1:-1;;;;;26655:18:0;;26647:68;;;;-1:-1:-1;;;26647:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26734:16:0;;26726:64;;;;-1:-1:-1;;;26726:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26818:1;26809:6;:10;26801:64;;;;-1:-1:-1;;;26801:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26876:28;26907:24;26925:4;26907:9;:24::i;:::-;27001:29;;26876:55;;-1:-1:-1;26977:53:0;;;;;;;27045:41;;-1:-1:-1;27070:16:0;;-1:-1:-1;;;27070:16:0;;;;27069:17;27045:41;:66;;;;;27098:13;-1:-1:-1;;;;;27090:21:0;:4;-1:-1:-1;;;;;27090:21:0;;;27045:66;:91;;;;-1:-1:-1;27115:21:0;;-1:-1:-1;;;27115:21:0;;;;27045:91;27041:236;;;27185:29;;27162:52;;27229:36;27244:20;27229:14;:36::i;:::-;27287:32;27302:4;27308:2;27312:6;27287:14;:32::i;:::-;26561:766;;;;;:::o;1113:192::-;1199:7;1235:12;1227:6;;;;1219:29;;;;-1:-1:-1;;;1219:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1271:5:0;;;1113:192::o;24672:163::-;24713:7;24734:15;24751;24770:19;:17;:19::i;:::-;24733:56;;-1:-1:-1;24733:56:0;-1:-1:-1;24807:20:0;24733:56;;24807:11;:20::i;:::-;24800:27;;;;24672:163;:::o;1575:132::-;1633:7;1660:39;1664:1;1667;1660:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1653:46;1575:132;-1:-1:-1;;;1575:132:0:o;778:181::-;836:7;868:5;;;892:6;;;;884:46;;;;;-1:-1:-1;;;884:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;23450:431;23515:7;23524;23533;23542;23551;23560;23587:23;23612:12;23626:18;23648:20;23660:7;23648:11;:20::i;:::-;23586:82;;;;;;23680:15;23697:23;23722:12;23738:50;23750:7;23759:4;23765:10;23777;:8;:10::i;:::-;23738:11;:50::i;:::-;23679:109;;;;-1:-1:-1;23679:109:0;;-1:-1:-1;23839:15:0;;-1:-1:-1;23856:4:0;;-1:-1:-1;23862:10:0;;-1:-1:-1;23450:431:0;;-1:-1:-1;;;;;23450:431:0:o;967:136::-;1025:7;1052:43;1056:1;1059;1052:43;;;;;;;;;;;;;;;;;:3;:43::i;33507:490::-;-1:-1:-1;;;;;33589:21:0;;33581:67;;;;-1:-1:-1;;;33581:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33655:22;33680:18;33690:7;33680:9;:18::i;:::-;33655:43;;33731:6;33713:14;:24;;33705:71;;;;-1:-1:-1;;;33705:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33783:15;33802:10;:8;:10::i;:::-;-1:-1:-1;;;;;33819:16:0;;;;;;:7;:16;;;;;;;;:27;;;;;;;33853:19;;;;:29;;;;;;33889:19;:30;;;;;;33926:7;:17;;;;;;;33956:37;;;;;;;33819:27;;-1:-1:-1;33819:16:0;;33956:37;;;;;;;;;;33507:490;;;;:::o;1315:250::-;1373:7;1397:6;1393:47;;-1:-1:-1;1427:1:0;1420:8;;1393:47;1464:5;;;1468:1;1464;:5;:1;1488:5;;;;;:10;1480:56;;;;-1:-1:-1;;;1480:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27347:471;16651:16;:23;;-1:-1:-1;;;;16651:23:0;-1:-1:-1;;;16651:23:0;;;;27453:27:::1;:20:::0;27478:1:::1;27453:24;:27::i;:::-;27438:42:::0;-1:-1:-1;27491:17:0::1;27511:30;:20:::0;27438:42;27511:24:::1;:30::i;:::-;27491:50:::0;-1:-1:-1;27577:21:0::1;27609:22;27626:4:::0;27609:16:::1;:22::i;:::-;27643:18;27664:41;:21;27690:14:::0;27664:25:::1;:41::i;:::-;27643:62;;27716:35;27729:9;27740:10;27716:12;:35::i;:::-;27767:43;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;::::1;::::0;;;;;;;::::1;-1:-1:-1::0;;16697:16:0;:24;;-1:-1:-1;;;;16697:24:0;;;-1:-1:-1;;;27347:471:0:o;28517:2001::-;-1:-1:-1;;;;;28620:26:0;;;;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;28650:29:0;;;;;;:18;:29;;;;;;;;28620:59;28617:240;;;28705:14;:12;:14::i;:::-;28617:240;;;28788:12;;28778:6;:22;;28770:75;;;;-1:-1:-1;;;28770:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28877:15;28895:29;28920:3;28895:20;28906:8;;28895:6;:10;;:20;;;;:::i;:29::-;28877:47;;28935:18;28956:31;28983:3;28956:22;28967:10;;28956:6;:10;;:22;;;;:::i;:31::-;-1:-1:-1;;;;;29004:19:0;;;;;;:11;:19;;;;;;28935:52;;-1:-1:-1;29004:19:0;;:46;;;;-1:-1:-1;;;;;;29028:22:0;;;;;;:11;:22;;;;;;;;29027:23;29004:46;29000:832;;;29077:79;29099:6;29107:9;29119:35;29143:10;29119:19;:6;29130:7;29119:10;:19::i;:::-;:23;;:35::i;:::-;29077:21;:79::i;:::-;29000:832;;;-1:-1:-1;;;;;29189:19:0;;;;;;:11;:19;;;;;;;;29188:20;:46;;;;-1:-1:-1;;;;;;29212:22:0;;;;;;:11;:22;;;;;;;;29188:46;29184:648;;;29261:77;29281:6;29289:9;29301:35;29325:10;29301:19;:6;29312:7;29301:10;:19::i;:35::-;29261:19;:77::i;29184:648::-;-1:-1:-1;;;;;29371:19:0;;;;;;:11;:19;;;;;;;;29370:20;:47;;;;-1:-1:-1;;;;;;29395:22:0;;;;;;:11;:22;;;;;;;;29394:23;29370:47;29366:466;;;29444:75;29462:6;29470:9;29482:35;29506:10;29482:19;:6;29493:7;29482:10;:19::i;:35::-;29444:17;:75::i;29366:466::-;-1:-1:-1;;;;;29551:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;29574:22:0;;;;;;:11;:22;;;;;;;;29551:45;29547:285;;;29623:79;29645:6;29653:9;29665:35;29689:10;29665:19;:6;29676:7;29665:10;:19::i;:35::-;29623:21;:79::i;29547:285::-;29745:75;29763:6;29771:9;29783:35;29807:10;29783:19;:6;29794:7;29783:10;:19::i;29745:75::-;29862:1;29852:7;:11;;;29874:13;:17;;;29902:10;:14;29940:9;;29937:99;;29974:46;29992:6;30008:1;30012:7;29974:17;:46::i;:::-;30059:12;;30056:183;;30122:12;;30096:58;;30114:6;;-1:-1:-1;;;;;30122:12:0;30136:17;:10;30151:1;30136:14;:17::i;30096:58::-;30194:13;;30168:59;;30186:6;;-1:-1:-1;;;;;30194:13:0;30209:17;:10;30224:1;30209:14;:17::i;30168:59::-;30269:15;;30259:7;:25;30311:21;;30295:13;:37;30356:19;;30343:10;:32;-1:-1:-1;;;;;30399:26:0;;-1:-1:-1;30399:26:0;;;:18;:26;;;;;;;;;:59;;-1:-1:-1;;;;;;30429:29:0;;;;;;:18;:29;;;;;;;;30399:59;30396:115;;;30484:15;:13;:15::i;24843:561::-;24940:7;;24976;;24893;;;;;25000:289;25024:9;:16;25020:20;;25000:289;;;25090:7;25066;:21;25074:9;25084:1;25074:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25074:12:0;25066:21;;;;;;;;;;;;;:31;;:66;;;25125:7;25101;:21;25109:9;25119:1;25109:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25109:12:0;25101:21;;;;;;;;;;;;;:31;25066:66;25062:97;;;25142:7;;25151;;25134:25;;;;;;;;;25062:97;25184:34;25196:7;:21;25204:9;25214:1;25204:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25204:12:0;25196:21;;;;;;;;;;;;;25184:7;;:11;:34::i;:::-;25174:44;;25243:34;25255:7;:21;25263:9;25273:1;25263:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25263:12:0;25255:21;;;;;;;;;;;;;25243:7;;:11;:34::i;:::-;25233:44;-1:-1:-1;25042:3:0;;25000:289;;;-1:-1:-1;25325:7:0;;25313;;:20;;:11;:20::i;:::-;25303:7;:30;25299:61;;;25343:7;;25352;;25335:25;;;;;;;;25299:61;25379:7;;-1:-1:-1;25388:7:0;-1:-1:-1;24843:561:0;;;:::o;1717:278::-;1803:7;1838:12;1831:5;1823:28;;;;-1:-1:-1;;;1823:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1862:9;1878:1;1874;:5;;;;;;;1717:278;-1:-1:-1;;;;;1717:278:0:o;23895:330::-;23955:7;23964;23973;23993:12;24008:24;24024:7;24008:15;:24::i;:::-;23993:39;;24043:18;24064:30;24086:7;24064:21;:30::i;:::-;24043:51;-1:-1:-1;24105:23:0;24131:33;24043:51;24131:17;:7;24143:4;24131:11;:17::i;:33::-;24105:59;24200:4;;-1:-1:-1;24206:10:0;;-1:-1:-1;23895:330:0;;-1:-1:-1;;;23895:330:0:o;24235:429::-;24350:7;;;;24406:24;:7;24418:11;24406;:24::i;:::-;24388:42;-1:-1:-1;24441:12:0;24456:21;:4;24465:11;24456:8;:21::i;:::-;24441:36;-1:-1:-1;24488:18:0;24509:27;:10;24524:11;24509:14;:27::i;:::-;24488:48;-1:-1:-1;24547:23:0;24573:33;24488:48;24573:17;:7;24585:4;24573:11;:17::i;:33::-;24625:7;;;;-1:-1:-1;24651:4:0;;-1:-1:-1;24235:429:0;;-1:-1:-1;;;;;;;24235:429:0:o;27826:398::-;27922:16;;;27936:1;27922:16;;;27898:21;27922:16;;;;;27898:21;27922:16;;;;;;;;;;-1:-1:-1;27922:16:0;27898:40;;27967:4;27949;27954:1;27949:7;;;;;;;;;;;;;:23;-1:-1:-1;;;;;27949:23:0;;;-1:-1:-1;;;;;27949:23:0;;;;;27993:15;-1:-1:-1;;;;;27993:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27993:22:0;27983:7;;:4;;27988:1;;27983:7;;;;;;;;;;;:32;-1:-1:-1;;;;;27983:32:0;;;-1:-1:-1;;;;;27983:32:0;;;;;28026:62;28043:4;28058:15;28076:11;28026:8;:62::i;:::-;28099:15;-1:-1:-1;;;;;28099:66:0;;28166:11;28178:1;28180:4;28193;28200:15;28099:117;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28099:117:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27826:398;;:::o;28232:277::-;28319:62;28336:4;28351:15;28369:11;28319:8;:62::i;:::-;28392:15;-1:-1:-1;;;;;28392:31:0;;28431:9;28450:4;28457:11;28470:1;28473;28476:7;:5;:7::i;:::-;28485:15;28392:109;;;;;;;;;;;;;-1:-1:-1;;;;;28392:109:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;28392:109:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;28232:277:0:o;17404:138::-;17457:1;17447:7;:11;;;17469:13;:17;;;17497:8;:12;;;17520:10;:14;17404:138::o;31646:566::-;31749:15;31766:23;31791:12;31805:23;31830:12;31844:18;31866:19;31877:7;31866:10;:19::i;:::-;-1:-1:-1;;;;;31914:15:0;;;;;;:7;:15;;;;;;31748:137;;-1:-1:-1;31748:137:0;;-1:-1:-1;31748:137:0;;-1:-1:-1;31748:137:0;-1:-1:-1;31748:137:0;-1:-1:-1;31748:137:0;-1:-1:-1;31914:28:0;;31934:7;31914:19;:28::i;:::-;-1:-1:-1;;;;;31896:15:0;;;;;;:7;:15;;;;;;;;:46;;;;31971:7;:15;;;;:28;;31991:7;31971:19;:28::i;:::-;-1:-1:-1;;;;;31953:15:0;;;;;;;:7;:15;;;;;;:46;;;;32031:18;;;;;;;:39;;32054:15;32031:22;:39::i;:::-;-1:-1:-1;;;;;32010:18:0;;;;;;:7;:18;;;;;:60;32084:26;32099:10;32084:14;:26::i;:::-;32121:23;32133:4;32139;32121:11;:23::i;:::-;32177:9;-1:-1:-1;;;;;32160:44:0;32169:6;-1:-1:-1;;;;;32160:44:0;;32188:15;32160:44;;;;;;;;;;;;;;;;;;31646:566;;;;;;;;;:::o;31036:592::-;31143:15;31160:23;31185:12;31199:23;31224:12;31238:18;31260:19;31271:7;31260:10;:19::i;:::-;-1:-1:-1;;;;;31308:15:0;;;;;;:7;:15;;;;;;31142:137;;-1:-1:-1;31142:137:0;;-1:-1:-1;31142:137:0;;-1:-1:-1;31142:137:0;-1:-1:-1;31142:137:0;-1:-1:-1;31142:137:0;-1:-1:-1;31308:28:0;;31142:137;31308:19;:28::i;:::-;-1:-1:-1;;;;;31290:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;31368:18;;;;;:7;:18;;;;;:39;;31391:15;31368:22;:39::i;:::-;-1:-1:-1;;;;;31347:18:0;;;;;;:7;:18;;;;;;;;:60;;;;31439:7;:18;;;;:39;;31462:15;31439:22;:39::i;30526:502::-;30625:15;30642:23;30667:12;30681:23;30706:12;30720:18;30742:19;30753:7;30742:10;:19::i;:::-;-1:-1:-1;;;;;30790:15:0;;;;;;:7;:15;;;;;;30624:137;;-1:-1:-1;30624:137:0;;-1:-1:-1;30624:137:0;;-1:-1:-1;30624:137:0;-1:-1:-1;30624:137:0;-1:-1:-1;30624:137:0;-1:-1:-1;30790:28:0;;30624:137;30790:19;:28::i;22604:642::-;22707:15;22724:23;22749:12;22763:23;22788:12;22802:18;22824:19;22835:7;22824:10;:19::i;:::-;-1:-1:-1;;;;;22872:15:0;;;;;;:7;:15;;;;;;22706:137;;-1:-1:-1;22706:137:0;;-1:-1:-1;22706:137:0;;-1:-1:-1;22706:137:0;-1:-1:-1;22706:137:0;-1:-1:-1;22706:137:0;-1:-1:-1;22872:28:0;;22892:7;22872:19;:28::i;:::-;-1:-1:-1;;;;;22854:15:0;;;;;;:7;:15;;;;;;;;:46;;;;22929:7;:15;;;;:28;;22949:7;22929:19;:28::i;17554:139::-;17608:1;17598:7;:11;;;17620:13;:17;17659:1;17648:8;:12;17684:1;17671:10;:14;17554:139::o;25783:130::-;25847:7;25874:31;25899:5;25874:20;25886:7;;25874;:11;;:20;;;;:::i;25921:142::-;25991:7;26018:37;26049:5;26018:26;26030:13;;26018:7;:11;;:26;;;;:::i;25416:355::-;25479:19;25502:10;:8;:10::i;:::-;25479:33;-1:-1:-1;25523:18:0;25544:27;:10;25479:33;25544:14;:27::i;:::-;25623:4;25607:22;;;;:7;:22;;;;;;25523:48;;-1:-1:-1;25607:38:0;;25523:48;25607:26;:38::i;:::-;25598:4;25582:22;;;;:7;:22;;;;;;;;:63;;;;25659:11;:26;;;;;;25656:107;;;25741:4;25725:22;;;;:7;:22;;;;;;:38;;25752:10;25725:26;:38::i;:::-;25716:4;25700:22;;;;:7;:22;;;;;:63;25656:107;25416:355;;;:::o;23295:147::-;23373:7;;:17;;23385:4;23373:11;:17::i;:::-;23363:7;:27;23414:10;;:20;;23429:4;23414:14;:20::i;:::-;23401:10;:33;-1:-1:-1;;23295:147:0:o

Swarm Source

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