ETH Price: $3,402.64 (-1.22%)
Gas: 5 Gwei

Token

Akira Inu (AKINU)
 

Overview

Max Total Supply

100,000,000,000 AKINU

Holders

301

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
53,535,617.606296456 AKINU

Value
$0.00
0xd0563f930bfb434a1bbddf84ae39986efd8f3d86
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
AKINU

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-31
*/

/**
          _____                    _____                    _____                    _____                    _____          
         /\    \                  /\    \                  /\    \                  /\    \                  /\    \         
        /::\    \                /::\____\                /::\    \                /::\____\                /::\____\        
       /::::\    \              /:::/    /                \:::\    \              /::::|   |               /:::/    /        
      /::::::\    \            /:::/    /                  \:::\    \            /:::::|   |              /:::/    /         
     /:::/\:::\    \          /:::/    /                    \:::\    \          /::::::|   |             /:::/    /          
    /:::/__\:::\    \        /:::/____/                      \:::\    \        /:::/|::|   |            /:::/    /           
   /::::\   \:::\    \      /::::\    \                      /::::\    \      /:::/ |::|   |           /:::/    /            
  /::::::\   \:::\    \    /::::::\____\________    ____    /::::::\    \    /:::/  |::|   | _____    /:::/    /      _____  
 /:::/\:::\   \:::\    \  /:::/\:::::::::::\    \  /\   \  /:::/\:::\    \  /:::/   |::|   |/\    \  /:::/____/      /\    \ 
/:::/  \:::\   \:::\____\/:::/  |:::::::::::\____\/::\   \/:::/  \:::\____\/:: /    |::|   /::\____\|:::|    /      /::\____\
\::/    \:::\  /:::/    /\::/   |::|~~~|~~~~~     \:::\  /:::/    \::/    /\::/    /|::|  /:::/    /|:::|____\     /:::/    /
 \/____/ \:::\/:::/    /  \/____|::|   |           \:::\/:::/    / \/____/  \/____/ |::| /:::/    /  \:::\    \   /:::/    / 
          \::::::/    /         |::|   |            \::::::/    /                   |::|/:::/    /    \:::\    \ /:::/    /  
           \::::/    /          |::|   |             \::::/____/                    |::::::/    /      \:::\    /:::/    /   
           /:::/    /           |::|   |              \:::\    \                    |:::::/    /        \:::\__/:::/    /    
          /:::/    /            |::|   |               \:::\    \                   |::::/    /          \::::::::/    /     
         /:::/    /             |::|   |                \:::\    \                  /:::/    /            \::::::/    /      
        /:::/    /              \::|   |                 \:::\____\                /:::/    /              \::::/    /       
        \::/    /                \:|   |                  \::/    /                \::/    /                \::/____/        
         \/____/                  \|___|                   \/____/                  \/____/                  ~~              
                                                                                                                                                                                                                                                            
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity ^0.8.11;

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

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

interface IERC20 {

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


}

library SafeMath {

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

        return c;
    }

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

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

        return c;
    }

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

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

        return c;
    }


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

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

        return c;
    }

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

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

library Address {

    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != accountHash && codehash != 0x0);
    }

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

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


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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {

            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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

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

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

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

    function getTime() public view returns (uint256) {
        return block.timestamp;
    }

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

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

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

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

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

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

contract AKINU is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    address payable public marketingAddress; // Staking address
    address payable public devAddress;
    address public PCS;
    address deadAddress = 0x000000000000000000000000000000000000dEaD;
    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;
    mapping (address => bool) private _antibot;
    address[] private _excluded;

    uint256 private constant MAX = ~uint256(0);
    uint256 private  _tTotal = 100000000000  * 10**9;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    string private  _name = "Akira Inu";
    string private  _symbol = "AKINU";
    uint8 private  _decimals = 9;

    uint256 public _burnFee = 0;
    uint256 private _previousburnFee = _burnFee;
    uint256 public _speedbrakeFee = 16;
    uint256 private _previousspeedbrakeFee = _speedbrakeFee;
    uint256 public _taxFee = 2;
    uint256 private _previousTaxFee = _taxFee;
    uint256 public _liquidityFee = 12;
    uint256 private _previousLiquidityFee = _liquidityFee;
    uint256 public marketingDivisor = 12;

    uint256 public _maxTxAmount = 100000000000 * 10**9;
    uint256 private minimumTokensBeforeSwap = 1000000 * 10**9;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = false;
    
    event RewardLiquidityProviders(uint256 tokenAmount);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );

    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    bool speedbrake_bool = false;

    constructor () {
        marketingAddress = payable(0xC0e0873993030f6085AFA47E05F7e467B576D43b);
        devAddress = payable(0x935550246147Fa84bD1Ba1d2f2aE9e31c3ae8747);

        _rOwned[devAddress] = _rTotal;

        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[devAddress] = true;
        _isExcludedFromFee[marketingAddress] = true;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());
         uniswapV2Router = _uniswapV2Router;

        emit Transfer(address(0), devAddress, _tTotal);
    }

    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 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 total_speedbrake_sell_fee()public view returns (uint256){
            uint256 total_sell_tax = _taxFee.add(_burnFee).add(_liquidityFee).add(_speedbrakeFee);
            return uint256(total_sell_tax);
        }

    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");
        require(_antibot[from] != true);
        if(from != owner() && to != owner()) {
            require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
        }

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;

        if (!inSwapAndLiquify && swapAndLiquifyEnabled && to == uniswapV2Pair) {
            if (overMinimumTokenBalance) {
                contractTokenBalance = minimumTokensBeforeSwap;
                swapTokens(contractTokenBalance);
            }
	        
        }

        bool takeFee = true;

        //if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFee[from] || _isExcludedFromFee[to]){
            takeFee = false;
        }
    
        _tokenTransfer(from,to,amount,takeFee);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {

        swapTokensForEth(contractTokenBalance);
        uint256 transferredBalance = address(this).balance;
        //Send to Marketing address
        transferToAddressETH(marketingAddress, transferredBalance.mul(58).div(100)); // 12% total, 7% = 58% of 12%
        transferToAddressETH(devAddress, transferredBalance.mul(42).div(100));
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        emit SwapTokensForETH(tokenAmount, path);
    }

    function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private {
        if(!takeFee)
            removeAllFee();
            
        if(recipient == PCS && !_isExcludedFromFee[sender]){speedbrake_bool=true;} // If selling to pcs turn speedbrake on
        
        if (_isExcluded[sender] && !_isExcluded[recipient]) {
            _transferFromExcluded(sender, recipient, amount);
        } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
            _transferToExcluded(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if(!takeFee)
            restoreAllFee();
        speedbrake_bool = false; // Always make sure speedbrake is turned off when done
    }

    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,tAmount);
        _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,tAmount);
        _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,tAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    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,tAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    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, uint256 _amount) private {
        uint256 currentRate =  _getRate();
        
        uint256 tliqfee = _amount.mul(_liquidityFee).div(10**2);
        uint256 rLiquidity = tliqfee.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if(_isExcluded[address(this)])
           {_tOwned[address(this)] = _tOwned[address(this)].add(tliqfee);}
            
        uint256 tburn = tLiquidity - tliqfee;
        uint256 rburn = tburn.mul(currentRate);
        _rOwned[address(deadAddress)] = _rOwned[address(deadAddress)].add(rburn);
        if(_isExcluded[address(deadAddress)])
           {_tOwned[address(deadAddress)] = _tOwned[address(deadAddress)].add(tburn);}
    }

    function calculateTaxFee(uint256 _amount) private view returns (uint256) {
        return _amount.mul(_taxFee).div(10**2);
    }
    
    function calculateLiquidityFee(uint256 _amount) private view returns (uint256 _totalamount) {
        uint256 liqfee = _amount.mul(_liquidityFee).div(10**2);
        uint256 cbfee = _amount.mul(_burnFee).div(10**2);
        uint256 sbamt;
        if(speedbrake_bool == true){sbamt = (_amount.mul(_speedbrakeFee)).div(10**2);}
        else{sbamt = 0;}
        return _totalamount.add(liqfee).add(sbamt).add(cbfee);
    }

    function removeAllFee() private {
        if(_taxFee == 0 && _liquidityFee == 0) return;
        _previousTaxFee = _taxFee;
        _previousspeedbrakeFee = _speedbrakeFee;
        _previousLiquidityFee = _liquidityFee;
        _previousburnFee = _burnFee;
        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
        _speedbrakeFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _speedbrakeFee = _previousspeedbrakeFee;
        _liquidityFee = _previousLiquidityFee;
        _burnFee = _previousburnFee;
    }

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

    // Management Functions ***Owner Only*** //

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

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

    //True blocks the bots address
    function set_antibot(address account, bool active) public onlyOwner() {
        _isExcludedFromFee[account] = active;
    }

    function setFees(uint256 burnfee, uint256 taxfee, uint256 liquidityFee, uint256 _marketingDivisor, uint256 _speedbrake) external onlyOwner() {
        _burnFee = burnfee;
        _taxFee = taxfee;
        _liquidityFee = liquidityFee;
        marketingDivisor = _marketingDivisor;
        _speedbrakeFee = _speedbrake;
    }
    
    function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
        _maxTxAmount = maxTxAmount;
    }

    function setNumTokensSellToAddToLiquidity(uint256 _minimumTokensBeforeSwap) external onlyOwner() {
        minimumTokensBeforeSwap = _minimumTokensBeforeSwap;
    }

    function setMarketingAddress(address _marketingAddress, address _devAddress, address _PCS, IUniswapV2Router02 _uniswapV2Router) external onlyOwner() {
        marketingAddress = payable(_marketingAddress); //Where bnb will be sent.
        devAddress = payable(_devAddress);
        PCS = _PCS; //So you can change what address speedbrake watches. Use exchange with greatest lp.
        uniswapV2Router = _uniswapV2Router; //For the router itself
    }

    function setUniswapAddress_forspeedbrake(address _PCS) external onlyOwner() {
        PCS = _PCS; //So you can change what address speedbrake watches. Use exchange with greatest lp.
    }

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

    function prepareForPreSale() external onlyOwner() {
        setSwapAndLiquifyEnabled(false);
        _taxFee = 0;
        _liquidityFee = 0;
        _burnFee = 0;
        _speedbrakeFee = 0;
        _maxTxAmount = 10000000000 * 10**9;
    }

    function afterPreSale(address _PCS) external onlyOwner() {
        setSwapAndLiquifyEnabled(true);
        _taxFee = 2;
        _liquidityFee = 12;
        _burnFee = 0;
        _speedbrakeFee = 16;
        _maxTxAmount = 500000000 * 10**9;
        PCS = _PCS;
    }
    
    function emergency_token(uint256 total) public onlyOwner() {
        bool takeFEE = false;
        _tokenTransfer(address(this),devAddress,total,takeFEE);
    }

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

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"RewardLiquidityProviders","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PCS","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFee","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":"_speedbrakeFee","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":"_PCS","type":"address"}],"name":"afterPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"devAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"total","type":"uint256"}],"name":"emergency_token","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":"getTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUnlockTime","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":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareForPreSale","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"burnfee","type":"uint256"},{"internalType":"uint256","name":"taxfee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingDivisor","type":"uint256"},{"internalType":"uint256","name":"_speedbrake","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingAddress","type":"address"},{"internalType":"address","name":"_devAddress","type":"address"},{"internalType":"address","name":"_PCS","type":"address"},{"internalType":"contract IUniswapV2Router02","name":"_uniswapV2Router","type":"address"}],"name":"setMarketingAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minimumTokensBeforeSwap","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":"_PCS","type":"address"}],"name":"setUniswapAddress_forspeedbrake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"active","type":"bool"}],"name":"set_antibot","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"total_speedbrake_sell_fee","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"}]

6080604052600680546001600160a01b03191661dead17905568056bc75e2d63100000600e8190556200003590600019620004c3565b6200004390600019620004e6565b600f5560408051808201909152600980825268416b69726120496e7560b81b602090920191825262000078916011916200041d565b5060408051808201909152600580825264414b494e5560d81b6020909201918252620000a7916012916200041d565b506013805460ff19166009179055600060148190556015556010601681905560175560026018819055601955600c601a819055601b819055601c5568056bc75e2d63100000601d5566038d7ea4c68000601e556020805461ffff60a81b191690553480156200011557600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506003805473c0e0873993030f6085afa47e05f7e467b576d43b6001600160a01b0319918216179091556004805473935550246147fa84bd1ba1d2f2ae9e31c3ae8747921682179055600f54600091825260076020527f48ca251c70b32340613f6dd97e1203017c00f45e22f8cd730da836b329fdaa0255600190600a90620001e76000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055308152600a845282812080548616600190811790915560048054841683528483208054881683179055600354909316825290839020805490951617909355805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d93849363c45a015593808301939192908290030181865afa158015620002a0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002c691906200050c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000314573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200033a91906200050c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000388573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ae91906200050c565b602080546001600160a01b03199081166001600160a01b03938416178255601f8054909116848416179055600454600e546040519081529216916000917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3506200057b565b8280546200042b906200053e565b90600052602060002090601f0160209004810192826200044f57600085556200049a565b82601f106200046a57805160ff19168380011785556200049a565b828001600101855582156200049a579182015b828111156200049a5782518255916020019190600101906200047d565b50620004a8929150620004ac565b5090565b5b80821115620004a85760008155600101620004ad565b600082620004e157634e487b7160e01b600052601260045260246000fd5b500690565b6000828210156200050757634e487b7160e01b600052601160045260246000fd5b500390565b6000602082840312156200051f57600080fd5b81516001600160a01b03811681146200053757600080fd5b9392505050565b600181811c908216806200055357607f821691505b602082108114156200057557634e487b7160e01b600052602260045260246000fd5b50919050565b612cc1806200058b6000396000f3fe6080604052600436106102b25760003560e01c80636cc66ffe11610175578063bf1ee017116100dc578063dd62ed3e11610095578063ec28438a1161006f578063ec28438a14610847578063f0f165af14610867578063f2fde38b14610887578063fe22c82d146108a757600080fd5b8063dd62ed3e146107c1578063e8b92b0514610807578063ea2f0b371461082757600080fd5b8063bf1ee01714610715578063c0b0fda214610735578063c49b9a801461074b578063ca42c8eb1461076b578063d6b513cf1461078b578063dd467064146107a157600080fd5b80638da5cb5b1161012e5780638da5cb5b1461066d57806395d89b411461068b578063a457c2d7146106a0578063a5ece941146106c0578063a69df4b5146106e0578063a9059cbb146106f557600080fd5b80636cc66ffe146105d757806370a08231146105ed578063715018a61461060d5780637d1db4a5146106225780637f7a122514610638578063813eb3281461065857600080fd5b80633b124fe7116102195780635134f6ab116101d25780635134f6ab1461052b57806352390c02146105405780635342acb414610560578063557ed1ba14610599578063602bc62b146105ac5780636bc87c3a146105c157600080fd5b80633b124fe7146104745780633bd5d1731461048a578063437823ec146104aa5780634549b039146104ca57806349bd5a5e146104ea5780634a74bb021461050a57600080fd5b806323b872dd1161026b57806323b872dd146103b25780632d838119146103d2578063313ce567146103f25780633685d4191461041457806339509351146104345780633ad10ef61461045457600080fd5b806304a66b48146102be57806306fdde03146102e0578063095ea7b31461030b5780630a61415e1461033b5780631694505e1461035b57806318160ddd1461039357600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d93660046127bb565b6108c7565b005b3480156102ec57600080fd5b506102f5610911565b60405161030291906127f6565b60405180910390f35b34801561031757600080fd5b5061032b610326366004612863565b6109a3565b6040519015158152602001610302565b34801561034757600080fd5b506102de6103563660046128a4565b6109ba565b34801561036757600080fd5b50601f5461037b906001600160a01b031681565b6040516001600160a01b039091168152602001610302565b34801561039f57600080fd5b50600e545b604051908152602001610302565b3480156103be57600080fd5b5061032b6103cd3660046128d9565b610a0f565b3480156103de57600080fd5b506103a46103ed36600461291a565b610a78565b3480156103fe57600080fd5b5060135460405160ff9091168152602001610302565b34801561042057600080fd5b506102de61042f366004612933565b610afc565b34801561044057600080fd5b5061032b61044f366004612863565b610cb3565b34801561046057600080fd5b5060045461037b906001600160a01b031681565b34801561048057600080fd5b506103a460185481565b34801561049657600080fd5b506102de6104a536600461291a565b610ce9565b3480156104b657600080fd5b506102de6104c5366004612933565b610dd3565b3480156104d657600080fd5b506103a46104e5366004612950565b610e21565b3480156104f657600080fd5b5060205461037b906001600160a01b031681565b34801561051657600080fd5b5060205461032b90600160a81b900460ff1681565b34801561053757600080fd5b506102de610eae565b34801561054c57600080fd5b506102de61055b366004612933565b610f04565b34801561056c57600080fd5b5061032b61057b366004612933565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156105a557600080fd5b50426103a4565b3480156105b857600080fd5b506002546103a4565b3480156105cd57600080fd5b506103a4601a5481565b3480156105e357600080fd5b506103a460165481565b3480156105f957600080fd5b506103a4610608366004612933565b611057565b34801561061957600080fd5b506102de6110b6565b34801561062e57600080fd5b506103a4601d5481565b34801561064457600080fd5b506102de610653366004612973565b611118565b34801561066457600080fd5b506103a4611192565b34801561067957600080fd5b506000546001600160a01b031661037b565b34801561069757600080fd5b506102f56111be565b3480156106ac57600080fd5b5061032b6106bb366004612863565b6111cd565b3480156106cc57600080fd5b5060035461037b906001600160a01b031681565b3480156106ec57600080fd5b506102de61121c565b34801561070157600080fd5b5061032b610710366004612863565b611325565b34801561072157600080fd5b5060055461037b906001600160a01b031681565b34801561074157600080fd5b506103a460145481565b34801561075757600080fd5b506102de6107663660046129cf565b611332565b34801561077757600080fd5b506102de61078636600461291a565b6113ac565b34801561079757600080fd5b506103a4601c5481565b3480156107ad57600080fd5b506102de6107bc36600461291a565b6113f2565b3480156107cd57600080fd5b506103a46107dc3660046129ea565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561081357600080fd5b506102de610822366004612933565b611477565b34801561083357600080fd5b506102de610842366004612933565b6114ed565b34801561085357600080fd5b506102de61086236600461291a565b611538565b34801561087357600080fd5b506102de61088236600461291a565b611567565b34801561089357600080fd5b506102de6108a2366004612933565b611596565b3480156108b357600080fd5b506102de6108c2366004612933565b61166e565b6000546001600160a01b031633146108fa5760405162461bcd60e51b81526004016108f190612a23565b60405180910390fd5b601494909455601892909255601a55601c55601655565b60606011805461092090612a58565b80601f016020809104026020016040519081016040528092919081815260200182805461094c90612a58565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b5050505050905090565b60006109b03384846116ba565b5060015b92915050565b6000546001600160a01b031633146109e45760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610a1c8484846117de565b610a6e8433610a6985604051806060016040528060288152602001612c1f602891396001600160a01b038a1660009081526009602090815260408083203384529091529020549190611a8e565b6116ba565b5060019392505050565b6000600f54821115610adf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108f1565b6000610ae9611ac8565b9050610af58382611aeb565b9392505050565b6000546001600160a01b03163314610b265760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b0381166000908152600b602052604090205460ff16610b8e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108f1565b60005b600d54811015610caf57816001600160a01b0316600d8281548110610bb857610bb8612a93565b6000918252602090912001546001600160a01b03161415610c9d57600d8054610be390600190612abf565b81548110610bf357610bf3612a93565b600091825260209091200154600d80546001600160a01b039092169183908110610c1f57610c1f612a93565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600d805480610c7757610c77612ad6565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ca781612aec565b915050610b91565b5050565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916109b0918590610a699086611b2d565b336000818152600b602052604090205460ff1615610d5e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108f1565b6000610d6983611b8c565b505050506001600160a01b038416600090815260076020526040902054919250610d9591905082611bdb565b6001600160a01b038316600090815260076020526040902055600f54610dbb9082611bdb565b600f55601054610dcb9084611b2d565b601055505050565b6000546001600160a01b03163314610dfd5760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000600e54831115610e755760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108f1565b81610e94576000610e8584611b8c565b509395506109b4945050505050565b6000610e9f84611b8c565b509295506109b4945050505050565b6000546001600160a01b03163314610ed85760405162461bcd60e51b81526004016108f190612a23565b610ee26000611332565b60006018819055601a8190556014819055601655678ac7230489e80000601d55565b6000546001600160a01b03163314610f2e5760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b0381166000908152600b602052604090205460ff1615610f975760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108f1565b6001600160a01b03811660009081526007602052604090205415610ff1576001600160a01b038116600090815260076020526040902054610fd790610a78565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600b602052604081205460ff161561109457506001600160a01b031660009081526008602052604090205490565b6001600160a01b0382166000908152600760205260409020546109b490610a78565b6000546001600160a01b031633146110e05760405162461bcd60e51b81526004016108f190612a23565b600080546040516001600160a01b0390911690600080516020612c47833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111425760405162461bcd60e51b81526004016108f190612a23565b600380546001600160a01b039586166001600160a01b03199182161790915560048054948616948216949094179093556005805492851692841692909217909155601f8054919093169116179055565b6000806109b46016546111b8601a546111b8601454601854611b2d90919063ffffffff16565b90611b2d565b60606012805461092090612a58565b60006109b03384610a6985604051806060016040528060258152602001612c67602591393360009081526009602090815260408083206001600160a01b038d1684529091529020549190611a8e565b6001546001600160a01b031633146112825760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108f1565b60025442116112d35760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108f1565b600154600080546040516001600160a01b039384169390911691600080516020612c4783398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60006109b03384846117de565b6000546001600160a01b0316331461135c5760405162461bcd60e51b81526004016108f190612a23565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a150565b6000546001600160a01b031633146113d65760405162461bcd60e51b81526004016108f190612a23565b600454600090610caf9030906001600160a01b03168484611c1d565b6000546001600160a01b0316331461141c5760405162461bcd60e51b81526004016108f190612a23565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561144b8142612b07565b600255600080546040516001600160a01b0390911690600080516020612c47833981519152908390a350565b6000546001600160a01b031633146114a15760405162461bcd60e51b81526004016108f190612a23565b6114ab6001611332565b6002601855600c601a55600060145560106016556706f05b59d3b20000601d55600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115175760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b031633146115625760405162461bcd60e51b81526004016108f190612a23565b601d55565b6000546001600160a01b031633146115915760405162461bcd60e51b81526004016108f190612a23565b601e55565b6000546001600160a01b031633146115c05760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b0381166116255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f1565b600080546040516001600160a01b0380851693921691600080516020612c4783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116985760405162461bcd60e51b81526004016108f190612a23565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661171c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108f1565b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108f1565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118425760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108f1565b6001600160a01b0382166118a45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108f1565b600081116119065760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108f1565b6001600160a01b0383166000908152600c602052604090205460ff1615156001141561193157600080fd5b6000546001600160a01b0384811691161480159061195d57506000546001600160a01b03838116911614155b156119c557601d548111156119c55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108f1565b60006119d030611057565b601e5460205491925082101590600160a01b900460ff161580156119fd5750602054600160a81b900460ff165b8015611a1657506020546001600160a01b038581169116145b15611a2f578015611a2f57601e549150611a2f82611db0565b6001600160a01b0385166000908152600a602052604090205460019060ff1680611a7157506001600160a01b0385166000908152600a602052604090205460ff165b15611a7a575060005b611a8686868684611c1d565b505050505050565b60008184841115611ab25760405162461bcd60e51b81526004016108f191906127f6565b506000611abf8486612abf565b95945050505050565b6000806000611ad5611e2a565b9092509050611ae48282611aeb565b9250505090565b6000610af583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fac565b600080611b3a8385612b07565b905083811015610af55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108f1565b6000806000806000806000806000611ba38a611fda565b9250925092506000806000611bc18d8686611bbc611ac8565b61201c565b919f909e50909c50959a5093985091965092945050505050565b6000610af583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a8e565b80611c2a57611c2a61206c565b6005546001600160a01b038481169116148015611c6057506001600160a01b0384166000908152600a602052604090205460ff16155b15611c79576020805460ff60b01b1916600160b01b1790555b6001600160a01b0384166000908152600b602052604090205460ff168015611cba57506001600160a01b0383166000908152600b602052604090205460ff16155b15611ccf57611cca8484846120af565b611d7b565b6001600160a01b0384166000908152600b602052604090205460ff16158015611d1057506001600160a01b0383166000908152600b602052604090205460ff165b15611d2057611cca8484846121d6565b6001600160a01b0384166000908152600b602052604090205460ff168015611d6057506001600160a01b0383166000908152600b602052604090205460ff165b15611d7057611cca84848461227f565b611d7b8484846122f2565b80611d9d57611d9d601954601855601754601655601b54601a55601554601455565b50506020805460ff60b01b191690555050565b6020805460ff60a01b1916600160a01b179055611dcc81612336565b6003544790611df9906001600160a01b0316611df46064611dee85603a6124c9565b90611aeb565b612548565b600454611e19906001600160a01b0316611df46064611dee85602a6124c9565b50506020805460ff60a01b19169055565b600f54600e546000918291825b600d54811015611f7c578260076000600d8481548110611e5957611e59612a93565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611ec457508160086000600d8481548110611e9d57611e9d612a93565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611eda57600f54600e54945094505050509091565b611f2060076000600d8481548110611ef457611ef4612a93565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bdb565b9250611f6860086000600d8481548110611f3c57611f3c612a93565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bdb565b915080611f7481612aec565b915050611e37565b50600e54600f54611f8c91611aeb565b821015611fa357600f54600e549350935050509091565b90939092509050565b60008183611fcd5760405162461bcd60e51b81526004016108f191906127f6565b506000611abf8486612b1f565b600080600080611fe985612583565b90506000611ff68661259f565b9050600061200e826120088986611bdb565b90611bdb565b979296509094509092505050565b600080808061202b88866124c9565b9050600061203988876124c9565b9050600061204788886124c9565b90506000612059826120088686611bdb565b939b939a50919850919650505050505050565b60185415801561207c5750601a54155b1561208357565b6018805460195560168054601755601a8054601b55601480546015556000938490559083905582905555565b6000806000806000806120c187611b8c565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506120f39088611bdb565b6001600160a01b038a166000908152600860209081526040808320939093556007905220546121229087611bdb565b6001600160a01b03808b1660009081526007602052604080822093909355908a16815220546121519086611b2d565b6001600160a01b038916600090815260076020526040902055612174818861262f565b61217e8483612797565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516121c391815260200190565b60405180910390a3505050505050505050565b6000806000806000806121e887611b8c565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061221a9087611bdb565b6001600160a01b03808b16600090815260076020908152604080832094909455918b168152600890915220546122509084611b2d565b6001600160a01b0389166000908152600860209081526040808320939093556007905220546121519086611b2d565b60008060008060008061229187611b8c565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506122c39088611bdb565b6001600160a01b038a1660009081526008602090815260408083209390935560079052205461221a9087611bdb565b60008060008060008061230487611b8c565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506121229087611bdb565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236b5761236b612a93565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e89190612b41565b816001815181106123fb576123fb612a93565b6001600160a01b039283166020918202929092010152601f5461242191309116846116ba565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061245a908590600090869030904290600401612ba2565b600060405180830381600087803b15801561247457600080fd5b505af1158015612488573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516124bd929190612bde565b60405180910390a15050565b6000826124d8575060006109b4565b60006124e48385612bff565b9050826124f18583612b1f565b14610af55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108f1565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561257e573d6000803e3d6000fd5b505050565b60006109b46064611dee601854856124c990919063ffffffff16565b6000806125bc6064611dee601a54866124c990919063ffffffff16565b905060006125da6064611dee601454876124c990919063ffffffff16565b90506000602060169054906101000a900460ff16151560011515141561261b576126146064611dee601654886124c990919063ffffffff16565b905061261f565b5060005b611abf826111b883818888611b2d565b6000612639611ac8565b905060006126576064611dee601a54866124c990919063ffffffff16565b9050600061266582846124c9565b306000908152600760205260409020549091506126829082611b2d565b30600090815260076020908152604080832093909355600b9052205460ff16156126d157306000908152600860205260409020546126c09083611b2d565b306000908152600860205260409020555b60006126dd8387612abf565b905060006126eb82866124c9565b6006546001600160a01b03166000908152600760205260409020549091506127139082611b2d565b600680546001600160a01b0390811660009081526007602090815260408083209590955592549091168152600b909152205460ff161561278e576006546001600160a01b03166000908152600860205260409020546127729083611b2d565b6006546001600160a01b03166000908152600860205260409020555b50505050505050565b600f546127a49083611bdb565b600f556010546127b49082611b2d565b6010555050565b600080600080600060a086880312156127d357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561282357858101830151858201604001528201612807565b81811115612835576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461286057600080fd5b50565b6000806040838503121561287657600080fd5b82356128818161284b565b946020939093013593505050565b8035801515811461289f57600080fd5b919050565b600080604083850312156128b757600080fd5b82356128c28161284b565b91506128d06020840161288f565b90509250929050565b6000806000606084860312156128ee57600080fd5b83356128f98161284b565b925060208401356129098161284b565b929592945050506040919091013590565b60006020828403121561292c57600080fd5b5035919050565b60006020828403121561294557600080fd5b8135610af58161284b565b6000806040838503121561296357600080fd5b823591506128d06020840161288f565b6000806000806080858703121561298957600080fd5b84356129948161284b565b935060208501356129a48161284b565b925060408501356129b48161284b565b915060608501356129c48161284b565b939692955090935050565b6000602082840312156129e157600080fd5b610af58261288f565b600080604083850312156129fd57600080fd5b8235612a088161284b565b91506020830135612a188161284b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612a6c57607f821691505b60208210811415612a8d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612ad157612ad1612aa9565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612b0057612b00612aa9565b5060010190565b60008219821115612b1a57612b1a612aa9565b500190565b600082612b3c57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612b5357600080fd5b8151610af58161284b565b600081518084526020808501945080840160005b83811015612b975781516001600160a01b031687529582019590820190600101612b72565b509495945050505050565b85815284602082015260a060408201526000612bc160a0830186612b5e565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612bf76040830184612b5e565b949350505050565b6000816000190483118215151615612c1957612c19612aa9565b50029056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1b72198ce4a574bd2a74fc3506337a1e56bcb802d667e9a1f507576a333484664736f6c634300080b0033

Deployed Bytecode

0x6080604052600436106102b25760003560e01c80636cc66ffe11610175578063bf1ee017116100dc578063dd62ed3e11610095578063ec28438a1161006f578063ec28438a14610847578063f0f165af14610867578063f2fde38b14610887578063fe22c82d146108a757600080fd5b8063dd62ed3e146107c1578063e8b92b0514610807578063ea2f0b371461082757600080fd5b8063bf1ee01714610715578063c0b0fda214610735578063c49b9a801461074b578063ca42c8eb1461076b578063d6b513cf1461078b578063dd467064146107a157600080fd5b80638da5cb5b1161012e5780638da5cb5b1461066d57806395d89b411461068b578063a457c2d7146106a0578063a5ece941146106c0578063a69df4b5146106e0578063a9059cbb146106f557600080fd5b80636cc66ffe146105d757806370a08231146105ed578063715018a61461060d5780637d1db4a5146106225780637f7a122514610638578063813eb3281461065857600080fd5b80633b124fe7116102195780635134f6ab116101d25780635134f6ab1461052b57806352390c02146105405780635342acb414610560578063557ed1ba14610599578063602bc62b146105ac5780636bc87c3a146105c157600080fd5b80633b124fe7146104745780633bd5d1731461048a578063437823ec146104aa5780634549b039146104ca57806349bd5a5e146104ea5780634a74bb021461050a57600080fd5b806323b872dd1161026b57806323b872dd146103b25780632d838119146103d2578063313ce567146103f25780633685d4191461041457806339509351146104345780633ad10ef61461045457600080fd5b806304a66b48146102be57806306fdde03146102e0578063095ea7b31461030b5780630a61415e1461033b5780631694505e1461035b57806318160ddd1461039357600080fd5b366102b957005b600080fd5b3480156102ca57600080fd5b506102de6102d93660046127bb565b6108c7565b005b3480156102ec57600080fd5b506102f5610911565b60405161030291906127f6565b60405180910390f35b34801561031757600080fd5b5061032b610326366004612863565b6109a3565b6040519015158152602001610302565b34801561034757600080fd5b506102de6103563660046128a4565b6109ba565b34801561036757600080fd5b50601f5461037b906001600160a01b031681565b6040516001600160a01b039091168152602001610302565b34801561039f57600080fd5b50600e545b604051908152602001610302565b3480156103be57600080fd5b5061032b6103cd3660046128d9565b610a0f565b3480156103de57600080fd5b506103a46103ed36600461291a565b610a78565b3480156103fe57600080fd5b5060135460405160ff9091168152602001610302565b34801561042057600080fd5b506102de61042f366004612933565b610afc565b34801561044057600080fd5b5061032b61044f366004612863565b610cb3565b34801561046057600080fd5b5060045461037b906001600160a01b031681565b34801561048057600080fd5b506103a460185481565b34801561049657600080fd5b506102de6104a536600461291a565b610ce9565b3480156104b657600080fd5b506102de6104c5366004612933565b610dd3565b3480156104d657600080fd5b506103a46104e5366004612950565b610e21565b3480156104f657600080fd5b5060205461037b906001600160a01b031681565b34801561051657600080fd5b5060205461032b90600160a81b900460ff1681565b34801561053757600080fd5b506102de610eae565b34801561054c57600080fd5b506102de61055b366004612933565b610f04565b34801561056c57600080fd5b5061032b61057b366004612933565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156105a557600080fd5b50426103a4565b3480156105b857600080fd5b506002546103a4565b3480156105cd57600080fd5b506103a4601a5481565b3480156105e357600080fd5b506103a460165481565b3480156105f957600080fd5b506103a4610608366004612933565b611057565b34801561061957600080fd5b506102de6110b6565b34801561062e57600080fd5b506103a4601d5481565b34801561064457600080fd5b506102de610653366004612973565b611118565b34801561066457600080fd5b506103a4611192565b34801561067957600080fd5b506000546001600160a01b031661037b565b34801561069757600080fd5b506102f56111be565b3480156106ac57600080fd5b5061032b6106bb366004612863565b6111cd565b3480156106cc57600080fd5b5060035461037b906001600160a01b031681565b3480156106ec57600080fd5b506102de61121c565b34801561070157600080fd5b5061032b610710366004612863565b611325565b34801561072157600080fd5b5060055461037b906001600160a01b031681565b34801561074157600080fd5b506103a460145481565b34801561075757600080fd5b506102de6107663660046129cf565b611332565b34801561077757600080fd5b506102de61078636600461291a565b6113ac565b34801561079757600080fd5b506103a4601c5481565b3480156107ad57600080fd5b506102de6107bc36600461291a565b6113f2565b3480156107cd57600080fd5b506103a46107dc3660046129ea565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205490565b34801561081357600080fd5b506102de610822366004612933565b611477565b34801561083357600080fd5b506102de610842366004612933565b6114ed565b34801561085357600080fd5b506102de61086236600461291a565b611538565b34801561087357600080fd5b506102de61088236600461291a565b611567565b34801561089357600080fd5b506102de6108a2366004612933565b611596565b3480156108b357600080fd5b506102de6108c2366004612933565b61166e565b6000546001600160a01b031633146108fa5760405162461bcd60e51b81526004016108f190612a23565b60405180910390fd5b601494909455601892909255601a55601c55601655565b60606011805461092090612a58565b80601f016020809104026020016040519081016040528092919081815260200182805461094c90612a58565b80156109995780601f1061096e57610100808354040283529160200191610999565b820191906000526020600020905b81548152906001019060200180831161097c57829003601f168201915b5050505050905090565b60006109b03384846116ba565b5060015b92915050565b6000546001600160a01b031633146109e45760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000610a1c8484846117de565b610a6e8433610a6985604051806060016040528060288152602001612c1f602891396001600160a01b038a1660009081526009602090815260408083203384529091529020549190611a8e565b6116ba565b5060019392505050565b6000600f54821115610adf5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108f1565b6000610ae9611ac8565b9050610af58382611aeb565b9392505050565b6000546001600160a01b03163314610b265760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b0381166000908152600b602052604090205460ff16610b8e5760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108f1565b60005b600d54811015610caf57816001600160a01b0316600d8281548110610bb857610bb8612a93565b6000918252602090912001546001600160a01b03161415610c9d57600d8054610be390600190612abf565b81548110610bf357610bf3612a93565b600091825260209091200154600d80546001600160a01b039092169183908110610c1f57610c1f612a93565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600882526040808220829055600b90925220805460ff19169055600d805480610c7757610c77612ad6565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610ca781612aec565b915050610b91565b5050565b3360008181526009602090815260408083206001600160a01b038716845290915281205490916109b0918590610a699086611b2d565b336000818152600b602052604090205460ff1615610d5e5760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b60648201526084016108f1565b6000610d6983611b8c565b505050506001600160a01b038416600090815260076020526040902054919250610d9591905082611bdb565b6001600160a01b038316600090815260076020526040902055600f54610dbb9082611bdb565b600f55601054610dcb9084611b2d565b601055505050565b6000546001600160a01b03163314610dfd5760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b03166000908152600a60205260409020805460ff19166001179055565b6000600e54831115610e755760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108f1565b81610e94576000610e8584611b8c565b509395506109b4945050505050565b6000610e9f84611b8c565b509295506109b4945050505050565b6000546001600160a01b03163314610ed85760405162461bcd60e51b81526004016108f190612a23565b610ee26000611332565b60006018819055601a8190556014819055601655678ac7230489e80000601d55565b6000546001600160a01b03163314610f2e5760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b0381166000908152600b602052604090205460ff1615610f975760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c75646564000000000060448201526064016108f1565b6001600160a01b03811660009081526007602052604090205415610ff1576001600160a01b038116600090815260076020526040902054610fd790610a78565b6001600160a01b0382166000908152600860205260409020555b6001600160a01b03166000818152600b60205260408120805460ff19166001908117909155600d805491820181559091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319169091179055565b6001600160a01b0381166000908152600b602052604081205460ff161561109457506001600160a01b031660009081526008602052604090205490565b6001600160a01b0382166000908152600760205260409020546109b490610a78565b6000546001600160a01b031633146110e05760405162461bcd60e51b81526004016108f190612a23565b600080546040516001600160a01b0390911690600080516020612c47833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b031633146111425760405162461bcd60e51b81526004016108f190612a23565b600380546001600160a01b039586166001600160a01b03199182161790915560048054948616948216949094179093556005805492851692841692909217909155601f8054919093169116179055565b6000806109b46016546111b8601a546111b8601454601854611b2d90919063ffffffff16565b90611b2d565b60606012805461092090612a58565b60006109b03384610a6985604051806060016040528060258152602001612c67602591393360009081526009602090815260408083206001600160a01b038d1684529091529020549190611a8e565b6001546001600160a01b031633146112825760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b60648201526084016108f1565b60025442116112d35760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c203720646179730060448201526064016108f1565b600154600080546040516001600160a01b039384169390911691600080516020612c4783398151915291a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b60006109b03384846117de565b6000546001600160a01b0316331461135c5760405162461bcd60e51b81526004016108f190612a23565b6020805460ff60a81b1916600160a81b8315159081029190911782556040519081527f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159910160405180910390a150565b6000546001600160a01b031633146113d65760405162461bcd60e51b81526004016108f190612a23565b600454600090610caf9030906001600160a01b03168484611c1d565b6000546001600160a01b0316331461141c5760405162461bcd60e51b81526004016108f190612a23565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561144b8142612b07565b600255600080546040516001600160a01b0390911690600080516020612c47833981519152908390a350565b6000546001600160a01b031633146114a15760405162461bcd60e51b81526004016108f190612a23565b6114ab6001611332565b6002601855600c601a55600060145560106016556706f05b59d3b20000601d55600580546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146115175760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b03166000908152600a60205260409020805460ff19169055565b6000546001600160a01b031633146115625760405162461bcd60e51b81526004016108f190612a23565b601d55565b6000546001600160a01b031633146115915760405162461bcd60e51b81526004016108f190612a23565b601e55565b6000546001600160a01b031633146115c05760405162461bcd60e51b81526004016108f190612a23565b6001600160a01b0381166116255760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108f1565b600080546040516001600160a01b0380851693921691600080516020612c4783398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146116985760405162461bcd60e51b81526004016108f190612a23565b600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03831661171c5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108f1565b6001600160a01b03821661177d5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108f1565b6001600160a01b0383811660008181526009602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166118425760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108f1565b6001600160a01b0382166118a45760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108f1565b600081116119065760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108f1565b6001600160a01b0383166000908152600c602052604090205460ff1615156001141561193157600080fd5b6000546001600160a01b0384811691161480159061195d57506000546001600160a01b03838116911614155b156119c557601d548111156119c55760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b60648201526084016108f1565b60006119d030611057565b601e5460205491925082101590600160a01b900460ff161580156119fd5750602054600160a81b900460ff165b8015611a1657506020546001600160a01b038581169116145b15611a2f578015611a2f57601e549150611a2f82611db0565b6001600160a01b0385166000908152600a602052604090205460019060ff1680611a7157506001600160a01b0385166000908152600a602052604090205460ff165b15611a7a575060005b611a8686868684611c1d565b505050505050565b60008184841115611ab25760405162461bcd60e51b81526004016108f191906127f6565b506000611abf8486612abf565b95945050505050565b6000806000611ad5611e2a565b9092509050611ae48282611aeb565b9250505090565b6000610af583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fac565b600080611b3a8385612b07565b905083811015610af55760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108f1565b6000806000806000806000806000611ba38a611fda565b9250925092506000806000611bc18d8686611bbc611ac8565b61201c565b919f909e50909c50959a5093985091965092945050505050565b6000610af583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611a8e565b80611c2a57611c2a61206c565b6005546001600160a01b038481169116148015611c6057506001600160a01b0384166000908152600a602052604090205460ff16155b15611c79576020805460ff60b01b1916600160b01b1790555b6001600160a01b0384166000908152600b602052604090205460ff168015611cba57506001600160a01b0383166000908152600b602052604090205460ff16155b15611ccf57611cca8484846120af565b611d7b565b6001600160a01b0384166000908152600b602052604090205460ff16158015611d1057506001600160a01b0383166000908152600b602052604090205460ff165b15611d2057611cca8484846121d6565b6001600160a01b0384166000908152600b602052604090205460ff168015611d6057506001600160a01b0383166000908152600b602052604090205460ff165b15611d7057611cca84848461227f565b611d7b8484846122f2565b80611d9d57611d9d601954601855601754601655601b54601a55601554601455565b50506020805460ff60b01b191690555050565b6020805460ff60a01b1916600160a01b179055611dcc81612336565b6003544790611df9906001600160a01b0316611df46064611dee85603a6124c9565b90611aeb565b612548565b600454611e19906001600160a01b0316611df46064611dee85602a6124c9565b50506020805460ff60a01b19169055565b600f54600e546000918291825b600d54811015611f7c578260076000600d8481548110611e5957611e59612a93565b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611ec457508160086000600d8481548110611e9d57611e9d612a93565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611eda57600f54600e54945094505050509091565b611f2060076000600d8481548110611ef457611ef4612a93565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611bdb565b9250611f6860086000600d8481548110611f3c57611f3c612a93565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611bdb565b915080611f7481612aec565b915050611e37565b50600e54600f54611f8c91611aeb565b821015611fa357600f54600e549350935050509091565b90939092509050565b60008183611fcd5760405162461bcd60e51b81526004016108f191906127f6565b506000611abf8486612b1f565b600080600080611fe985612583565b90506000611ff68661259f565b9050600061200e826120088986611bdb565b90611bdb565b979296509094509092505050565b600080808061202b88866124c9565b9050600061203988876124c9565b9050600061204788886124c9565b90506000612059826120088686611bdb565b939b939a50919850919650505050505050565b60185415801561207c5750601a54155b1561208357565b6018805460195560168054601755601a8054601b55601480546015556000938490559083905582905555565b6000806000806000806120c187611b8c565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506120f39088611bdb565b6001600160a01b038a166000908152600860209081526040808320939093556007905220546121229087611bdb565b6001600160a01b03808b1660009081526007602052604080822093909355908a16815220546121519086611b2d565b6001600160a01b038916600090815260076020526040902055612174818861262f565b61217e8483612797565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516121c391815260200190565b60405180910390a3505050505050505050565b6000806000806000806121e887611b8c565b6001600160a01b038f16600090815260076020526040902054959b5093995091975095509350915061221a9087611bdb565b6001600160a01b03808b16600090815260076020908152604080832094909455918b168152600890915220546122509084611b2d565b6001600160a01b0389166000908152600860209081526040808320939093556007905220546121519086611b2d565b60008060008060008061229187611b8c565b6001600160a01b038f16600090815260086020526040902054959b509399509197509550935091506122c39088611bdb565b6001600160a01b038a1660009081526008602090815260408083209390935560079052205461221a9087611bdb565b60008060008060008061230487611b8c565b6001600160a01b038f16600090815260076020526040902054959b509399509197509550935091506121229087611bdb565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061236b5761236b612a93565b6001600160a01b03928316602091820292909201810191909152601f54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156123c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123e89190612b41565b816001815181106123fb576123fb612a93565b6001600160a01b039283166020918202929092010152601f5461242191309116846116ba565b601f5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061245a908590600090869030904290600401612ba2565b600060405180830381600087803b15801561247457600080fd5b505af1158015612488573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516124bd929190612bde565b60405180910390a15050565b6000826124d8575060006109b4565b60006124e48385612bff565b9050826124f18583612b1f565b14610af55760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108f1565b6040516001600160a01b0383169082156108fc029083906000818181858888f1935050505015801561257e573d6000803e3d6000fd5b505050565b60006109b46064611dee601854856124c990919063ffffffff16565b6000806125bc6064611dee601a54866124c990919063ffffffff16565b905060006125da6064611dee601454876124c990919063ffffffff16565b90506000602060169054906101000a900460ff16151560011515141561261b576126146064611dee601654886124c990919063ffffffff16565b905061261f565b5060005b611abf826111b883818888611b2d565b6000612639611ac8565b905060006126576064611dee601a54866124c990919063ffffffff16565b9050600061266582846124c9565b306000908152600760205260409020549091506126829082611b2d565b30600090815260076020908152604080832093909355600b9052205460ff16156126d157306000908152600860205260409020546126c09083611b2d565b306000908152600860205260409020555b60006126dd8387612abf565b905060006126eb82866124c9565b6006546001600160a01b03166000908152600760205260409020549091506127139082611b2d565b600680546001600160a01b0390811660009081526007602090815260408083209590955592549091168152600b909152205460ff161561278e576006546001600160a01b03166000908152600860205260409020546127729083611b2d565b6006546001600160a01b03166000908152600860205260409020555b50505050505050565b600f546127a49083611bdb565b600f556010546127b49082611b2d565b6010555050565b600080600080600060a086880312156127d357600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561282357858101830151858201604001528201612807565b81811115612835576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461286057600080fd5b50565b6000806040838503121561287657600080fd5b82356128818161284b565b946020939093013593505050565b8035801515811461289f57600080fd5b919050565b600080604083850312156128b757600080fd5b82356128c28161284b565b91506128d06020840161288f565b90509250929050565b6000806000606084860312156128ee57600080fd5b83356128f98161284b565b925060208401356129098161284b565b929592945050506040919091013590565b60006020828403121561292c57600080fd5b5035919050565b60006020828403121561294557600080fd5b8135610af58161284b565b6000806040838503121561296357600080fd5b823591506128d06020840161288f565b6000806000806080858703121561298957600080fd5b84356129948161284b565b935060208501356129a48161284b565b925060408501356129b48161284b565b915060608501356129c48161284b565b939692955090935050565b6000602082840312156129e157600080fd5b610af58261288f565b600080604083850312156129fd57600080fd5b8235612a088161284b565b91506020830135612a188161284b565b809150509250929050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612a6c57607f821691505b60208210811415612a8d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015612ad157612ad1612aa9565b500390565b634e487b7160e01b600052603160045260246000fd5b6000600019821415612b0057612b00612aa9565b5060010190565b60008219821115612b1a57612b1a612aa9565b500190565b600082612b3c57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215612b5357600080fd5b8151610af58161284b565b600081518084526020808501945080840160005b83811015612b975781516001600160a01b031687529582019590820190600101612b72565b509495945050505050565b85815284602082015260a060408201526000612bc160a0830186612b5e565b6001600160a01b0394909416606083015250608001529392505050565b828152604060208201526000612bf76040830184612b5e565b949350505050565b6000816000190483118215151615612c1957612c19612aa9565b50029056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e1b72198ce4a574bd2a74fc3506337a1e56bcb802d667e9a1f507576a333484664736f6c634300080b0033

Deployed Bytecode Sourcemap

17959:20143:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35690:330;;;;;;;;;;-1:-1:-1;35690:330:0;;;;;:::i;:::-;;:::i;:::-;;21037:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21949:161;;;;;;;;;;-1:-1:-1;21949:161:0;;;;;:::i;:::-;;:::i;:::-;;;1696:14:1;;1689:22;1671:41;;1659:2;1644:18;21949:161:0;1531:187:1;35557:125:0;;;;;;;;;;-1:-1:-1;35557:125:0;;;;;:::i;:::-;;:::i;19503:41::-;;;;;;;;;;-1:-1:-1;19503:41:0;;;;-1:-1:-1;;;;;19503:41:0;;;;;;-1:-1:-1;;;;;2399:32:1;;;2381:51;;2369:2;2354:18;19503:41:0;2208:230:1;21314:95:0;;;;;;;;;;-1:-1:-1;21394:7:0;;21314:95;;;2589:25:1;;;2577:2;2562:18;21314:95:0;2443:177:1;22118:313:0;;;;;;;;;;-1:-1:-1;22118:313:0;;;;;:::i;:::-;;:::i;23771:253::-;;;;;;;;;;-1:-1:-1;23771:253:0;;;;;:::i;:::-;;:::i;21223:83::-;;;;;;;;;;-1:-1:-1;21289:9:0;;21223:83;;21289:9;;;;3413:36:1;;3401:2;3386:18;21223:83:0;3271:184:1;24375:479:0;;;;;;;;;;-1:-1:-1;24375:479:0;;;;;:::i;:::-;;:::i;22439:218::-;;;;;;;;;;-1:-1:-1;22439:218:0;;;;;:::i;:::-;;:::i;18141:33::-;;;;;;;;;;-1:-1:-1;18141:33:0;;;;-1:-1:-1;;;;;18141:33:0;;;19154:26;;;;;;;;;;;;;;;;22942:377;;;;;;;;;;-1:-1:-1;22942:377:0;;;;;:::i;:::-;;:::i;35280:113::-;;;;;;;;;;-1:-1:-1;35280:113:0;;;;;:::i;:::-;;:::i;23327:436::-;;;;;;;;;;-1:-1:-1;23327:436:0;;;;;:::i;:::-;;:::i;19551:28::-;;;;;;;;;;-1:-1:-1;19551:28:0;;;;-1:-1:-1;;;;;19551:28:0;;;19616:41;;;;;;;;;;-1:-1:-1;19616:41:0;;;;-1:-1:-1;;;19616:41:0;;;;;;37168:247;;;;;;;;;;;;;:::i;24032:335::-;;;;;;;;;;-1:-1:-1;24032:335:0;;;;;:::i;:::-;;:::i;35098:123::-;;;;;;;;;;-1:-1:-1;35098:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;35186:27:0;35162:4;35186:27;;;:18;:27;;;;;;;;;35098:123;9449:90;;;;;;;;;;-1:-1:-1;9516:15:0;9449:90;;9351;;;;;;;;;;-1:-1:-1;9424:9:0;;9351:90;;19235:33;;;;;;;;;;;;;;;;19051:34;;;;;;;;;;;;;;;;21417:198;;;;;;;;;;-1:-1:-1;21417:198:0;;;;;:::i;:::-;;:::i;8943:148::-;;;;;;;;;;;;;:::i;19380:50::-;;;;;;;;;;;;;;;;36325:457;;;;;;;;;;-1:-1:-1;36325:457:0;;;;;:::i;:::-;;:::i;24862:222::-;;;;;;;;;;;;;:::i;8729:79::-;;;;;;;;;;-1:-1:-1;8767:7:0;8794:6;-1:-1:-1;;;;;8794:6:0;8729:79;;21128:87;;;;;;;;;;;;;:::i;22665:269::-;;;;;;;;;;-1:-1:-1;22665:269:0;;;;;:::i;:::-;;:::i;18076:39::-;;;;;;;;;;-1:-1:-1;18076:39:0;;;;-1:-1:-1;;;;;18076:39:0;;;9781:343;;;;;;;;;;;;;:::i;21623:167::-;;;;;;;;;;-1:-1:-1;21623:167:0;;;;;:::i;:::-;;:::i;18181:18::-;;;;;;;;;;-1:-1:-1;18181:18:0;;;;-1:-1:-1;;;;;18181:18:0;;;18967:27;;;;;;;;;;;;;;;;36987:173;;;;;;;;;;-1:-1:-1;36987:173:0;;;;;:::i;:::-;;:::i;37709:163::-;;;;;;;;;;-1:-1:-1;37709:163:0;;;;;:::i;:::-;;:::i;19335:36::-;;;;;;;;;;;;;;;;9547:226;;;;;;;;;;-1:-1:-1;9547:226:0;;;;;:::i;:::-;;:::i;21798:143::-;;;;;;;;;;-1:-1:-1;21798:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21906:18:0;;;21879:7;21906:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21798:143;37423:274;;;;;;;;;;-1:-1:-1;37423:274:0;;;;;:::i;:::-;;:::i;35401:112::-;;;;;;;;;;-1:-1:-1;35401:112:0;;;;;:::i;:::-;;:::i;36032:111::-;;;;;;;;;;-1:-1:-1;36032:111:0;;;;;:::i;:::-;;:::i;36151:166::-;;;;;;;;;;-1:-1:-1;36151:166:0;;;;;:::i;:::-;;:::i;9099:244::-;;;;;;;;;;-1:-1:-1;9099:244:0;;;;;:::i;:::-;;:::i;36790:189::-;;;;;;;;;;-1:-1:-1;36790:189:0;;;;;:::i;:::-;;:::i;35690:330::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;;;;;;;;;35842:8:::1;:18:::0;;;;35871:7:::1;:16:::0;;;;35898:13:::1;:28:::0;35937:16:::1;:36:::0;35984:14:::1;:28:::0;35690:330::o;21037:83::-;21074:13;21107:5;21100:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21037:83;:::o;21949:161::-;22024:4;22041:39;3131:10;22064:7;22073:6;22041:8;:39::i;:::-;-1:-1:-1;22098:4:0;21949:161;;;;;:::o;35557:125::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35638:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:36;;-1:-1:-1;;35638:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35557:125::o;22118:313::-;22216:4;22233:36;22243:6;22251:9;22262:6;22233:9;:36::i;:::-;22280:121;22289:6;3131:10;22311:89;22349:6;22311:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22311:19:0;;;;;;:11;:19;;;;;;;;3131:10;22311:33;;;;;;;;;;:37;:89::i;:::-;22280:8;:121::i;:::-;-1:-1:-1;22419:4:0;22118:313;;;;;:::o;23771:253::-;23837:7;23876;;23865;:18;;23857:73;;;;-1:-1:-1;;;23857:73:0;;6626:2:1;23857:73:0;;;6608:21:1;6665:2;6645:18;;;6638:30;6704:34;6684:18;;;6677:62;-1:-1:-1;;;6755:18:1;;;6748:40;6805:19;;23857:73:0;6424:406:1;23857:73:0;23941:19;23964:10;:8;:10::i;:::-;23941:33;-1:-1:-1;23992:24:0;:7;23941:33;23992:11;:24::i;:::-;23985:31;23771:253;-1:-1:-1;;;23771:253:0:o;24375:479::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24457:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24449:60;;;::::0;-1:-1:-1;;;24449:60:0;;7037:2:1;24449:60:0::1;::::0;::::1;7019:21:1::0;7076:2;7056:18;;;7049:30;7115:29;7095:18;;;7088:57;7162:18;;24449:60:0::1;6835:351:1::0;24449:60:0::1;24525:9;24520:327;24544:9;:16:::0;24540:20;::::1;24520:327;;;24602:7;-1:-1:-1::0;;;;;24586:23:0::1;:9;24596:1;24586:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24586:12:0::1;:23;24582:254;;;24645:9;24655:16:::0;;:20:::1;::::0;24674:1:::1;::::0;24655:20:::1;:::i;:::-;24645:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24630:9:::1;:12:::0;;-1:-1:-1;;;;;24645:31:0;;::::1;::::0;24640:1;;24630:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24630:46:0::1;-1:-1:-1::0;;;;;24630:46:0;;::::1;;::::0;;24695:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24734:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24734:28:0::1;::::0;;24781:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24781:15:0;;;;;-1:-1:-1;;;;;;24781:15:0::1;::::0;;;;;24520:327:::1;24375:479:::0;:::o;24582:254::-:1;24562:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24520:327;;;;24375:479:::0;:::o;22439:218::-;3131:10;22527:4;22576:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22576:34:0;;;;;;;;;;22527:4;;22544:83;;22567:7;;22576:50;;22615:10;22576:38;:50::i;22942:377::-;3131:10;22994:14;23043:19;;;:11;:19;;;;;;;;23042:20;23034:77;;;;-1:-1:-1;;;23034:77:0;;8059:2:1;23034:77:0;;;8041:21:1;8098:2;8078:18;;;8071:30;8137:34;8117:18;;;8110:62;-1:-1:-1;;;8188:18:1;;;8181:42;8240:19;;23034:77:0;7857:408:1;23034:77:0;23123:15;23147:19;23158:7;23147:10;:19::i;:::-;-1:-1:-1;;;;;;;;;23195:15:0;;;;;;:7;:15;;;;;;23122:44;;-1:-1:-1;23195:28:0;;:15;-1:-1:-1;23122:44:0;23195:19;:28::i;:::-;-1:-1:-1;;;;;23177:15:0;;;;;;:7;:15;;;;;:46;23244:7;;:20;;23256:7;23244:11;:20::i;:::-;23234:7;:30;23288:10;;:23;;23303:7;23288:14;:23::i;:::-;23275:10;:36;-1:-1:-1;;;22942:377:0:o;35280:113::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35351:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;35351:34:0::1;35381:4;35351:34;::::0;;35280:113::o;23327:436::-;23417:7;23456;;23445;:18;;23437:62;;;;-1:-1:-1;;;23437:62:0;;8472:2:1;23437:62:0;;;8454:21:1;8511:2;8491:18;;;8484:30;8550:33;8530:18;;;8523:61;8601:18;;23437:62:0;8270:355:1;23437:62:0;23515:17;23510:246;;23550:15;23574:19;23585:7;23574:10;:19::i;:::-;-1:-1:-1;23549:44:0;;-1:-1:-1;23608:14:0;;-1:-1:-1;;;;;23608:14:0;23510:246;23657:23;23688:19;23699:7;23688:10;:19::i;:::-;-1:-1:-1;23655:52:0;;-1:-1:-1;23722:22:0;;-1:-1:-1;;;;;23722:22:0;37168:247;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;37229:31:::1;37254:5;37229:24;:31::i;:::-;37281:1;37271:7;:11:::0;;;37293:13:::1;:17:::0;;;37321:8:::1;:12:::0;;;37344:14:::1;:18:::0;37388:19:::1;37373:12;:34:::0;37168:247::o;24032:335::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24117:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24116:21;24108:61;;;::::0;-1:-1:-1;;;24108:61:0;;7037:2:1;24108:61:0::1;::::0;::::1;7019:21:1::0;7076:2;7056:18;;;7049:30;7115:29;7095:18;;;7088:57;7162:18;;24108:61:0::1;6835:351:1::0;24108:61:0::1;-1:-1:-1::0;;;;;24183:16:0;::::1;24202:1;24183:16:::0;;;:7:::1;:16;::::0;;;;;:20;24180:108:::1;;-1:-1:-1::0;;;;;24259:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24239:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24220:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24180:108:::1;-1:-1:-1::0;;;;;24298:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24298:27:0::1;24321:4;24298:27:::0;;::::1;::::0;;;24336:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24336:23:0::1;::::0;;::::1;::::0;;24032:335::o;21417:198::-;-1:-1:-1;;;;;21507:20:0;;21483:7;21507:20;;;:11;:20;;;;;;;;21503:49;;;-1:-1:-1;;;;;;21536:16:0;;;;;:7;:16;;;;;;;21417:198::o;21503:49::-;-1:-1:-1;;;;;21590:16:0;;;;;;:7;:16;;;;;;21570:37;;:19;:37::i;8943:148::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;9050:1:::1;9034:6:::0;;9013:40:::1;::::0;-1:-1:-1;;;;;9034:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9013:40:0;9050:1;;9013:40:::1;9081:1;9064:19:::0;;-1:-1:-1;;;;;;9064:19:0::1;::::0;;8943:148::o;36325:457::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;36485:16:::1;:45:::0;;-1:-1:-1;;;;;36485:45:0;;::::1;-1:-1:-1::0;;;;;;36485:45:0;;::::1;;::::0;;;36567:10:::1;:33:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;36611:3:::1;:10:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;36716:15:::1;:34:::0;;;;;::::1;::::0;::::1;;::::0;;36325:457::o;24862:222::-;24919:7;24942:22;24967:60;25012:14;;24967:40;24993:13;;24967:21;24979:8;;24967:7;;:11;;:21;;;;:::i;:::-;:25;;:40::i;21128:87::-;21167:13;21200:7;21193:14;;;;;:::i;22665:269::-;22758:4;22775:129;3131:10;22798:7;22807:96;22846:15;22807:96;;;;;;;;;;;;;;;;;3131:10;22807:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22807:34:0;;;;;;;;;;;;:38;:96::i;9781:343::-;9833:14;;-1:-1:-1;;;;;9833:14:0;9851:10;9833:28;9825:76;;;;-1:-1:-1;;;9825:76:0;;8832:2:1;9825:76:0;;;8814:21:1;8871:2;8851:18;;;8844:30;8910:34;8890:18;;;8883:62;-1:-1:-1;;;8961:18:1;;;8954:33;9004:19;;9825:76:0;8630:399:1;9825:76:0;9938:9;;9920:15;:27;9912:72;;;;-1:-1:-1;;;9912:72:0;;9236:2:1;9912:72:0;;;9218:21:1;9275:2;9255:18;;;9248:30;9314:33;9294:18;;;9287:61;9365:18;;9912:72:0;9034:355:1;9912:72:0;10029:14;;;10021:6;;10000:44;;-1:-1:-1;;;;;10029:14:0;;;;10021:6;;;;-1:-1:-1;;;;;;;;;;;10000:44:0;;10064:14;;;;10055:23;;-1:-1:-1;;;;;;10055:23:0;;;-1:-1:-1;;;;;10064:14:0;;10055:23;;;;10089:27;;;9781:343::o;21623:167::-;21701:4;21718:42;3131:10;21742:9;21753:6;21718:9;:42::i;36987:173::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;37066:21:::1;:32:::0;;-1:-1:-1;;;;37066:32:0::1;-1:-1:-1::0;;;37066:32:0;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;37114:38:::1;::::0;1671:41:1;;;37114:38:0::1;::::0;1644:18:1;37114:38:0::1;;;;;;;36987:173:::0;:::o;37709:163::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;37839:10:::1;::::0;37779:12:::1;::::0;37810:54:::1;::::0;37833:4:::1;::::0;-1:-1:-1;;;;;37839:10:0::1;37850:5:::0;37779:12;37810:14:::1;:54::i;9547:226::-:0;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;9628:6:::1;::::0;;;9611:23;;-1:-1:-1;;;;;;9611:23:0;;::::1;-1:-1:-1::0;;;;;9628:6:0;::::1;9611:23;::::0;;;9645:19:::1;::::0;;9687:22:::1;9705:4:::0;9687:15:::1;:22;:::i;:::-;9675:9;:34:::0;9762:1:::1;9746:6:::0;;9725:40:::1;::::0;-1:-1:-1;;;;;9746:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;9725:40:0;9762:1;;9725:40:::1;9547:226:::0;:::o;37423:274::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;37491:30:::1;37516:4;37491:24;:30::i;:::-;37542:1;37532:7;:11:::0;37570:2:::1;37554:13;:18:::0;-1:-1:-1;37583:8:0::1;:12:::0;37623:2:::1;37606:14;:19:::0;37651:17:::1;37636:12;:32:::0;37679:3:::1;:10:::0;;-1:-1:-1;;;;;;37679:10:0::1;-1:-1:-1::0;;;;;37679:10:0;;;::::1;::::0;;;::::1;::::0;;37423:274::o;35401:112::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35470:27:0::1;35500:5;35470:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;35470:35:0::1;::::0;;35401:112::o;36032:111::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;36109:12:::1;:26:::0;36032:111::o;36151:166::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;36259:23:::1;:50:::0;36151:166::o;9099:244::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;9188:22:0;::::1;9180:73;;;::::0;-1:-1:-1;;;9180:73:0;;9729:2:1;9180:73:0::1;::::0;::::1;9711:21:1::0;9768:2;9748:18;;;9741:30;9807:34;9787:18;;;9780:62;-1:-1:-1;;;9858:18:1;;;9851:36;9904:19;;9180:73:0::1;9527:402:1::0;9180:73:0::1;9290:6;::::0;;9269:38:::1;::::0;-1:-1:-1;;;;;9269:38:0;;::::1;::::0;9290:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;9269:38:0;::::1;9318:6;:17:::0;;-1:-1:-1;;;;;;9318:17:0::1;-1:-1:-1::0;;;;;9318:17:0;;;::::1;::::0;;;::::1;::::0;;9099:244::o;36790:189::-;8856:6;;-1:-1:-1;;;;;8856:6:0;3131:10;8856:22;8848:67;;;;-1:-1:-1;;;8848:67:0;;;;;;;:::i;:::-;36877:3:::1;:10:::0;;-1:-1:-1;;;;;;36877:10:0::1;-1:-1:-1::0;;;;;36877:10:0;;;::::1;::::0;;;::::1;::::0;;36790:189::o;25092:337::-;-1:-1:-1;;;;;25185:19:0;;25177:68;;;;-1:-1:-1;;;25177:68:0;;10136:2:1;25177:68:0;;;10118:21:1;10175:2;10155:18;;;10148:30;10214:34;10194:18;;;10187:62;-1:-1:-1;;;10265:18:1;;;10258:34;10309:19;;25177:68:0;9934:400:1;25177:68:0;-1:-1:-1;;;;;25264:21:0;;25256:68;;;;-1:-1:-1;;;25256:68:0;;10541:2:1;25256:68:0;;;10523:21:1;10580:2;10560:18;;;10553:30;10619:34;10599:18;;;10592:62;-1:-1:-1;;;10670:18:1;;;10663:32;10712:19;;25256:68:0;10339:398:1;25256:68:0;-1:-1:-1;;;;;25337:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;25389:32;;2589:25:1;;;25389:32:0;;2562:18:1;25389:32:0;;;;;;;25092:337;;;:::o;25437:1248::-;-1:-1:-1;;;;;25559:18:0;;25551:68;;;;-1:-1:-1;;;25551:68:0;;10944:2:1;25551:68:0;;;10926:21:1;10983:2;10963:18;;;10956:30;11022:34;11002:18;;;10995:62;-1:-1:-1;;;11073:18:1;;;11066:35;11118:19;;25551:68:0;10742:401:1;25551:68:0;-1:-1:-1;;;;;25638:16:0;;25630:64;;;;-1:-1:-1;;;25630:64:0;;11350:2:1;25630:64:0;;;11332:21:1;11389:2;11369:18;;;11362:30;11428:34;11408:18;;;11401:62;-1:-1:-1;;;11479:18:1;;;11472:33;11522:19;;25630:64:0;11148:399:1;25630:64:0;25722:1;25713:6;:10;25705:64;;;;-1:-1:-1;;;25705:64:0;;11754:2:1;25705:64:0;;;11736:21:1;11793:2;11773:18;;;11766:30;11832:34;11812:18;;;11805:62;-1:-1:-1;;;11883:18:1;;;11876:39;11932:19;;25705:64:0;11552:405:1;25705:64:0;-1:-1:-1;;;;;25788:14:0;;;;;;:8;:14;;;;;;;;:22;;:14;:22;;25780:31;;;;;;8767:7;8794:6;-1:-1:-1;;;;;25825:15:0;;;8794:6;;25825:15;;;;:32;;-1:-1:-1;8767:7:0;8794:6;-1:-1:-1;;;;;25844:13:0;;;8794:6;;25844:13;;25825:32;25822:139;;;25892:12;;25882:6;:22;;25874:75;;;;-1:-1:-1;;;25874:75:0;;12164:2:1;25874:75:0;;;12146:21:1;12203:2;12183:18;;;12176:30;12242:34;12222:18;;;12215:62;-1:-1:-1;;;12293:18:1;;;12286:38;12341:19;;25874:75:0;11962:404:1;25874:75:0;25973:28;26004:24;26022:4;26004:9;:24::i;:::-;26094:23;;26135:16;;25973:55;;-1:-1:-1;26070:47:0;;;;-1:-1:-1;;;26135:16:0;;;;26134:17;:42;;;;-1:-1:-1;26155:21:0;;-1:-1:-1;;;26155:21:0;;;;26134:42;:65;;;;-1:-1:-1;26186:13:0;;-1:-1:-1;;;;;26180:19:0;;;26186:13;;26180:19;26134:65;26130:269;;;26220:23;26216:161;;;26287:23;;26264:46;;26329:32;26340:20;26329:10;:32::i;:::-;-1:-1:-1;;;;;26530:24:0;;26411:12;26530:24;;;:18;:24;;;;;;26426:4;;26530:24;;;:50;;-1:-1:-1;;;;;;26558:22:0;;;;;;:18;:22;;;;;;;;26530:50;26527:96;;;-1:-1:-1;26606:5:0;26527:96;26639:38;26654:4;26659:2;26662:6;26669:7;26639:14;:38::i;:::-;25540:1145;;;25437:1248;;;:::o;4440:192::-;4526:7;4562:12;4554:6;;;;4546:29;;;;-1:-1:-1;;;4546:29:0;;;;;;;;:::i;:::-;-1:-1:-1;4586:9:0;4598:5;4602:1;4598;:5;:::i;:::-;4586:17;4440:192;-1:-1:-1;;;;;4440:192:0:o;32410:163::-;32451:7;32472:15;32489;32508:19;:17;:19::i;:::-;32471:56;;-1:-1:-1;32471:56:0;-1:-1:-1;32545:20:0;32471:56;;32545:11;:20::i;:::-;32538:27;;;;32410:163;:::o;4900:132::-;4958:7;4985:39;4989:1;4992;4985:39;;;;;;;;;;;;;;;;;:3;:39::i;4107:181::-;4165:7;;4197:5;4201:1;4197;:5;:::i;:::-;4185:17;;4226:1;4221;:6;;4213:46;;;;-1:-1:-1;;;4213:46:0;;12573:2:1;4213:46:0;;;12555:21:1;12612:2;12592:18;;;12585:30;12651:29;12631:18;;;12624:57;12698:18;;4213:46:0;12371:351:1;31208:419:0;31267:7;31276;31285;31294;31303;31312;31333:23;31358:12;31372:18;31394:20;31406:7;31394:11;:20::i;:::-;31332:82;;;;;;31426:15;31443:23;31468:12;31484:50;31496:7;31505:4;31511:10;31523;:8;:10::i;:::-;31484:11;:50::i;:::-;31425:109;;;;-1:-1:-1;31425:109:0;;-1:-1:-1;31585:15:0;;-1:-1:-1;31602:4:0;;-1:-1:-1;31608:10:0;;-1:-1:-1;31208:419:0;;-1:-1:-1;;;;;31208:419:0:o;4296:136::-;4354:7;4381:43;4385:1;4388;4381:43;;;;;;;;;;;;;;;;;:3;:43::i;27784:923::-;27895:7;27891:40;;27917:14;:12;:14::i;:::-;27972:3;;-1:-1:-1;;;;;27959:16:0;;;27972:3;;27959:16;:47;;;;-1:-1:-1;;;;;;27980:26:0;;;;;;:18;:26;;;;;;;;27979:27;27959:47;27956:74;;;28008:15;:20;;-1:-1:-1;;;;28008:20:0;-1:-1:-1;;;28008:20:0;;;27956:74;-1:-1:-1;;;;;28094:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;28118:22:0;;;;;;:11;:22;;;;;;;;28117:23;28094:46;28090:467;;;28157:48;28179:6;28187:9;28198:6;28157:21;:48::i;:::-;28090:467;;;-1:-1:-1;;;;;28228:19:0;;;;;;:11;:19;;;;;;;;28227:20;:46;;;;-1:-1:-1;;;;;;28251:22:0;;;;;;:11;:22;;;;;;;;28227:46;28223:334;;;28290:46;28310:6;28318:9;28329:6;28290:19;:46::i;28223:334::-;-1:-1:-1;;;;;28358:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;28381:22:0;;;;;;:11;:22;;;;;;;;28358:45;28354:203;;;28420:48;28442:6;28450:9;28461:6;28420:21;:48::i;28354:203::-;28501:44;28519:6;28527:9;28538:6;28501:17;:44::i;:::-;28573:7;28569:41;;28595:15;34931;;34921:7;:25;34974:22;;34957:14;:39;35023:21;;35007:13;:37;35066:16;;35055:8;:27;34877:213;28595:15;-1:-1:-1;;28621:15:0;:23;;-1:-1:-1;;;;28621:23:0;;;-1:-1:-1;;27784:923:0:o;26693:423::-;20130:16;:23;;-1:-1:-1;;;;20130:23:0;-1:-1:-1;;;20130:23:0;;;26776:38:::1;26793:20:::0;26776:16:::1;:38::i;:::-;26944:16;::::0;26854:21:::1;::::0;26923:75:::1;::::0;-1:-1:-1;;;;;26944:16:0::1;26962:35;26993:3;26962:26;26854:21:::0;26985:2:::1;26962:22;:26::i;:::-;:30:::0;::::1;:35::i;:::-;26923:20;:75::i;:::-;27060:10;::::0;27039:69:::1;::::0;-1:-1:-1;;;;;27060:10:0::1;27072:35;27103:3;27072:26;:18:::0;27095:2:::1;27072:22;:26::i;27039:69::-;-1:-1:-1::0;;20176:16:0;:24;;-1:-1:-1;;;;20176:24:0;;;26693:423::o;32581:555::-;32678:7;;32714;;32631;;;;;32732:289;32756:9;:16;32752:20;;32732:289;;;32822:7;32798;:21;32806:9;32816:1;32806:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32806:12:0;32798:21;;;;;;;;;;;;;:31;;:66;;;32857:7;32833;:21;32841:9;32851:1;32841:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32841:12:0;32833:21;;;;;;;;;;;;;:31;32798:66;32794:97;;;32874:7;;32883;;32866:25;;;;;;;32581:555;;:::o;32794:97::-;32916:34;32928:7;:21;32936:9;32946:1;32936:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32936:12:0;32928:21;;;;;;;;;;;;;32916:7;;:11;:34::i;:::-;32906:44;;32975:34;32987:7;:21;32995:9;33005:1;32995:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;32995:12:0;32987:21;;;;;;;;;;;;;32975:7;;:11;:34::i;:::-;32965:44;-1:-1:-1;32774:3:0;;;;:::i;:::-;;;;32732:289;;;-1:-1:-1;33057:7:0;;33045;;:20;;:11;:20::i;:::-;33035:7;:30;33031:61;;;33075:7;;33084;;33067:25;;;;;;32581:555;;:::o;33031:61::-;33111:7;;33120;;-1:-1:-1;32581:555:0;-1:-1:-1;32581:555:0:o;5040:278::-;5126:7;5161:12;5154:5;5146:28;;;;-1:-1:-1;;;5146:28:0;;;;;;;;:::i;:::-;-1:-1:-1;5185:9:0;5197:5;5201:1;5197;:5;:::i;31635:330::-;31695:7;31704;31713;31733:12;31748:24;31764:7;31748:15;:24::i;:::-;31733:39;;31783:18;31804:30;31826:7;31804:21;:30::i;:::-;31783:51;-1:-1:-1;31845:23:0;31871:33;31783:51;31871:17;:7;31883:4;31871:11;:17::i;:::-;:21;;:33::i;:::-;31845:59;31940:4;;-1:-1:-1;31946:10:0;;-1:-1:-1;31635:330:0;;-1:-1:-1;;;31635:330:0:o;31973:429::-;32088:7;;;;32144:24;:7;32156:11;32144;:24::i;:::-;32126:42;-1:-1:-1;32179:12:0;32194:21;:4;32203:11;32194:8;:21::i;:::-;32179:36;-1:-1:-1;32226:18:0;32247:27;:10;32262:11;32247:14;:27::i;:::-;32226:48;-1:-1:-1;32285:23:0;32311:33;32226:48;32311:17;:7;32323:4;32311:11;:17::i;:33::-;32363:7;;;;-1:-1:-1;32389:4:0;;-1:-1:-1;31973:429:0;;-1:-1:-1;;;;;;;31973:429:0:o;34499:370::-;34545:7;;:12;:34;;;;-1:-1:-1;34561:13:0;;:18;34545:34;34542:46;;;34499:370::o;34542:46::-;34616:7;;;34598:15;:25;34659:14;;;34634:22;:39;34708:13;;;34684:21;:37;34751:8;;;34732:16;:27;-1:-1:-1;34770:11:0;;;;34792:17;;;;34820:12;;;34843:18;34499:370::o;29824:571::-;29927:15;29944:23;29969:12;29983:23;30008:12;30022:18;30044:19;30055:7;30044:10;:19::i;:::-;-1:-1:-1;;;;;30092:15:0;;;;;;:7;:15;;;;;;29926:137;;-1:-1:-1;29926:137:0;;-1:-1:-1;29926:137:0;;-1:-1:-1;29926:137:0;-1:-1:-1;29926:137:0;-1:-1:-1;29926:137:0;-1:-1:-1;30092:28:0;;30112:7;30092:19;:28::i;:::-;-1:-1:-1;;;;;30074:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30149:7;:15;;;;:28;;30169:7;30149:19;:28::i;:::-;-1:-1:-1;;;;;30131:15:0;;;;;;;:7;:15;;;;;;:46;;;;30209:18;;;;;;;:39;;30232:15;30209:22;:39::i;:::-;-1:-1:-1;;;;;30188:18:0;;;;;;:7;:18;;;;;:60;30259:34;30274:10;30285:7;30259:14;:34::i;:::-;30304:23;30316:4;30322;30304:11;:23::i;:::-;30360:9;-1:-1:-1;;;;;30343:44:0;30352:6;-1:-1:-1;;;;;30343:44:0;;30371:15;30343:44;;;;2589:25:1;;2577:2;2562:18;;2443:177;30343:44:0;;;;;;;;29915:480;;;;;;29824:571;;;:::o;29233:583::-;29334:15;29351:23;29376:12;29390:23;29415:12;29429:18;29451:19;29462:7;29451:10;:19::i;:::-;-1:-1:-1;;;;;29499:15:0;;;;;;:7;:15;;;;;;29333:137;;-1:-1:-1;29333:137:0;;-1:-1:-1;29333:137:0;;-1:-1:-1;29333:137:0;-1:-1:-1;29333:137:0;-1:-1:-1;29333:137:0;-1:-1:-1;29499:28:0;;29333:137;29499:19;:28::i;:::-;-1:-1:-1;;;;;29481:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;29559:18;;;;;:7;:18;;;;;:39;;29582:15;29559:22;:39::i;:::-;-1:-1:-1;;;;;29538:18:0;;;;;;:7;:18;;;;;;;;:60;;;;29630:7;:18;;;;:39;;29653:15;29630:22;:39::i;30403:642::-;30506:15;30523:23;30548:12;30562:23;30587:12;30601:18;30623:19;30634:7;30623:10;:19::i;:::-;-1:-1:-1;;;;;30671:15:0;;;;;;:7;:15;;;;;;30505:137;;-1:-1:-1;30505:137:0;;-1:-1:-1;30505:137:0;;-1:-1:-1;30505:137:0;-1:-1:-1;30505:137:0;-1:-1:-1;30505:137:0;-1:-1:-1;30671:28:0;;30691:7;30671:19;:28::i;:::-;-1:-1:-1;;;;;30653:15:0;;;;;;:7;:15;;;;;;;;:46;;;;30728:7;:15;;;;:28;;30748:7;30728:19;:28::i;28715:510::-;28814:15;28831:23;28856:12;28870:23;28895:12;28909:18;28931:19;28942:7;28931:10;:19::i;:::-;-1:-1:-1;;;;;28979:15:0;;;;;;:7;:15;;;;;;28813:137;;-1:-1:-1;28813:137:0;;-1:-1:-1;28813:137:0;;-1:-1:-1;28813:137:0;-1:-1:-1;28813:137:0;-1:-1:-1;28813:137:0;-1:-1:-1;28979:28:0;;28813:137;28979:19;:28::i;27124:652::-;27274:16;;;27288:1;27274:16;;;;;;;;27250:21;;27274:16;;;;;;;;;;-1:-1:-1;27274:16:0;27250:40;;27319:4;27301;27306:1;27301:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27301:23:0;;;:7;;;;;;;;;;:23;;;;27345:15;;:22;;;-1:-1:-1;;;27345:22:0;;;;:15;;;;;:20;;:22;;;;;27301:7;;27345:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27335:4;27340:1;27335:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;27335:32:0;;;:7;;;;;;;;;:32;27410:15;;27378:62;;27395:4;;27410:15;27428:11;27378:8;:62::i;:::-;27477:15;;:240;;-1:-1:-1;;;27477:240:0;;-1:-1:-1;;;;;27477:15:0;;;;:66;;:240;;27558:11;;27477:15;;27628:4;;27655;;27691:15;;27477:240;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27733:35;27750:11;27763:4;27733:35;;;;;;;:::i;:::-;;;;;;;;27179:597;27124:652;:::o;4640:250::-;4698:7;4722:6;4718:47;;-1:-1:-1;4752:1:0;4745:8;;4718:47;4777:9;4789:5;4793:1;4789;:5;:::i;:::-;4777:17;-1:-1:-1;4822:1:0;4813:5;4817:1;4777:17;4813:5;:::i;:::-;:10;4805:56;;;;-1:-1:-1;;;4805:56:0;;15102:2:1;4805:56:0;;;15084:21:1;15141:2;15121:18;;;15114:30;15180:34;15160:18;;;15153:62;-1:-1:-1;;;15231:18:1;;;15224:31;15272:19;;4805:56:0;14900:397:1;37880:126:0;37972:26;;-1:-1:-1;;;;;37972:18:0;;;:26;;;;;37991:6;;37972:26;;;;37991:6;37972:18;:26;;;;;;;;;;;;;;;;;;;;;37880:126;;:::o;33923:130::-;33987:7;34014:31;34039:5;34014:20;34026:7;;34014;:11;;:20;;;;:::i;34065:426::-;34135:20;34168:14;34185:37;34216:5;34185:26;34197:13;;34185:7;:11;;:26;;;;:::i;:37::-;34168:54;;34233:13;34249:32;34275:5;34249:21;34261:8;;34249:7;:11;;:21;;;;:::i;:32::-;34233:48;;34292:13;34319:15;;;;;;;;;;;:23;;34338:4;34319:23;;;34316:104;;;34352:40;34386:5;34353:27;34365:14;;34353:7;:11;;:27;;;;:::i;34352:40::-;34344:48;;34316:104;;;-1:-1:-1;34417:1:0;34316:104;34437:46;34477:5;34437:35;34466:5;34437:35;:12;34454:6;34437:16;:24::i;33144:771::-;33224:19;33247:10;:8;:10::i;:::-;33224:33;;33278:15;33296:37;33327:5;33296:26;33308:13;;33296:7;:11;;:26;;;;:::i;:37::-;33278:55;-1:-1:-1;33344:18:0;33365:24;33278:55;33377:11;33365;:24::i;:::-;33441:4;33425:22;;;;:7;:22;;;;;;33344:45;;-1:-1:-1;33425:38:0;;33344:45;33425:26;:38::i;:::-;33416:4;33400:22;;;;:7;:22;;;;;;;;:63;;;;33477:11;:26;;;;;;33474:106;;;33559:4;33543:22;;;;:7;:22;;;;;;:35;;33570:7;33543:26;:35::i;:::-;33534:4;33518:22;;;;:7;:22;;;;;:60;33474:106;33604:13;33620:20;33633:7;33620:10;:20;:::i;:::-;33604:36;-1:-1:-1;33651:13:0;33667:22;33604:36;33677:11;33667:9;:22::i;:::-;33748:11;;-1:-1:-1;;;;;33748:11:0;33732:29;;;;:7;:29;;;;;;33651:38;;-1:-1:-1;33732:40:0;;33651:38;33732:33;:40::i;:::-;33716:11;;;-1:-1:-1;;;;;33716:11:0;;;33700:29;;;;:7;:29;;;;;;;;:72;;;;33806:11;;;;;33786:33;;:11;:33;;;;;;;33783:125;;;33882:11;;-1:-1:-1;;;;;33882:11:0;33866:29;;;;:7;:29;;;;;;:40;;33900:5;33866:33;:40::i;:::-;33850:11;;-1:-1:-1;;;;;33850:11:0;33834:29;;;;:7;:29;;;;;:72;33783:125;33213:702;;;;;33144:771;;:::o;31053:147::-;31131:7;;:17;;31143:4;31131:11;:17::i;:::-;31121:7;:27;31172:10;;:20;;31187:4;31172:14;:20::i;:::-;31159:10;:33;-1:-1:-1;;31053:147:0:o;14:454:1:-;109:6;117;125;133;141;194:3;182:9;173:7;169:23;165:33;162:53;;;211:1;208;201:12;162:53;-1:-1:-1;;234:23:1;;;304:2;289:18;;276:32;;-1:-1:-1;355:2:1;340:18;;327:32;;406:2;391:18;;378:32;;-1:-1:-1;457:3:1;442:19;429:33;;-1:-1:-1;14:454:1;-1:-1:-1;14:454:1:o;473:597::-;585:4;614:2;643;632:9;625:21;675:6;669:13;718:6;713:2;702:9;698:18;691:34;743:1;753:140;767:6;764:1;761:13;753:140;;;862:14;;;858:23;;852:30;828:17;;;847:2;824:26;817:66;782:10;;753:140;;;911:6;908:1;905:13;902:91;;;981:1;976:2;967:6;956:9;952:22;948:31;941:42;902:91;-1:-1:-1;1054:2:1;1033:15;-1:-1:-1;;1029:29:1;1014:45;;;;1061:2;1010:54;;473:597;-1:-1:-1;;;473:597:1:o;1075:131::-;-1:-1:-1;;;;;1150:31:1;;1140:42;;1130:70;;1196:1;1193;1186:12;1130:70;1075:131;:::o;1211:315::-;1279:6;1287;1340:2;1328:9;1319:7;1315:23;1311:32;1308:52;;;1356:1;1353;1346:12;1308:52;1395:9;1382:23;1414:31;1439:5;1414:31;:::i;:::-;1464:5;1516:2;1501:18;;;;1488:32;;-1:-1:-1;;;1211:315:1:o;1723:160::-;1788:20;;1844:13;;1837:21;1827:32;;1817:60;;1873:1;1870;1863:12;1817:60;1723:160;;;:::o;1888:315::-;1953:6;1961;2014:2;2002:9;1993:7;1989:23;1985:32;1982:52;;;2030:1;2027;2020:12;1982:52;2069:9;2056:23;2088:31;2113:5;2088:31;:::i;:::-;2138:5;-1:-1:-1;2162:35:1;2193:2;2178:18;;2162:35;:::i;:::-;2152:45;;1888:315;;;;;:::o;2625:456::-;2702:6;2710;2718;2771:2;2759:9;2750:7;2746:23;2742:32;2739:52;;;2787:1;2784;2777:12;2739:52;2826:9;2813:23;2845:31;2870:5;2845:31;:::i;:::-;2895:5;-1:-1:-1;2952:2:1;2937:18;;2924:32;2965:33;2924:32;2965:33;:::i;:::-;2625:456;;3017:7;;-1:-1:-1;;;3071:2:1;3056:18;;;;3043:32;;2625:456::o;3086:180::-;3145:6;3198:2;3186:9;3177:7;3173:23;3169:32;3166:52;;;3214:1;3211;3204:12;3166:52;-1:-1:-1;3237:23:1;;3086:180;-1:-1:-1;3086:180:1:o;3460:247::-;3519:6;3572:2;3560:9;3551:7;3547:23;3543:32;3540:52;;;3588:1;3585;3578:12;3540:52;3627:9;3614:23;3646:31;3671:5;3646:31;:::i;3936:248::-;4001:6;4009;4062:2;4050:9;4041:7;4037:23;4033:32;4030:52;;;4078:1;4075;4068:12;4030:52;4114:9;4101:23;4091:33;;4143:35;4174:2;4163:9;4159:18;4143:35;:::i;4397:698::-;4510:6;4518;4526;4534;4587:3;4575:9;4566:7;4562:23;4558:33;4555:53;;;4604:1;4601;4594:12;4555:53;4643:9;4630:23;4662:31;4687:5;4662:31;:::i;:::-;4712:5;-1:-1:-1;4769:2:1;4754:18;;4741:32;4782:33;4741:32;4782:33;:::i;:::-;4834:7;-1:-1:-1;4893:2:1;4878:18;;4865:32;4906:33;4865:32;4906:33;:::i;:::-;4958:7;-1:-1:-1;5017:2:1;5002:18;;4989:32;5030:33;4989:32;5030:33;:::i;:::-;4397:698;;;;-1:-1:-1;4397:698:1;;-1:-1:-1;;4397:698:1:o;5100:180::-;5156:6;5209:2;5197:9;5188:7;5184:23;5180:32;5177:52;;;5225:1;5222;5215:12;5177:52;5248:26;5264:9;5248:26;:::i;5285:388::-;5353:6;5361;5414:2;5402:9;5393:7;5389:23;5385:32;5382:52;;;5430:1;5427;5420:12;5382:52;5469:9;5456:23;5488:31;5513:5;5488:31;:::i;:::-;5538:5;-1:-1:-1;5595:2:1;5580:18;;5567:32;5608:33;5567:32;5608:33;:::i;:::-;5660:7;5650:17;;;5285:388;;;;;:::o;5678:356::-;5880:2;5862:21;;;5899:18;;;5892:30;5958:34;5953:2;5938:18;;5931:62;6025:2;6010:18;;5678:356::o;6039:380::-;6118:1;6114:12;;;;6161;;;6182:61;;6236:4;6228:6;6224:17;6214:27;;6182:61;6289:2;6281:6;6278:14;6258:18;6255:38;6252:161;;;6335:10;6330:3;6326:20;6323:1;6316:31;6370:4;6367:1;6360:15;6398:4;6395:1;6388:15;6252:161;;6039:380;;;:::o;7191:127::-;7252:10;7247:3;7243:20;7240:1;7233:31;7283:4;7280:1;7273:15;7307:4;7304:1;7297:15;7323:127;7384:10;7379:3;7375:20;7372:1;7365:31;7415:4;7412:1;7405:15;7439:4;7436:1;7429:15;7455:125;7495:4;7523:1;7520;7517:8;7514:34;;;7528:18;;:::i;:::-;-1:-1:-1;7565:9:1;;7455:125::o;7585:127::-;7646:10;7641:3;7637:20;7634:1;7627:31;7677:4;7674:1;7667:15;7701:4;7698:1;7691:15;7717:135;7756:3;-1:-1:-1;;7777:17:1;;7774:43;;;7797:18;;:::i;:::-;-1:-1:-1;7844:1:1;7833:13;;7717:135::o;9394:128::-;9434:3;9465:1;9461:6;9458:1;9455:13;9452:39;;;9471:18;;:::i;:::-;-1:-1:-1;9507:9:1;;9394:128::o;12727:217::-;12767:1;12793;12783:132;;12837:10;12832:3;12828:20;12825:1;12818:31;12872:4;12869:1;12862:15;12900:4;12897:1;12890:15;12783:132;-1:-1:-1;12929:9:1;;12727:217::o;13081:251::-;13151:6;13204:2;13192:9;13183:7;13179:23;13175:32;13172:52;;;13220:1;13217;13210:12;13172:52;13252:9;13246:16;13271:31;13296:5;13271:31;:::i;13337:461::-;13390:3;13428:5;13422:12;13455:6;13450:3;13443:19;13481:4;13510:2;13505:3;13501:12;13494:19;;13547:2;13540:5;13536:14;13568:1;13578:195;13592:6;13589:1;13586:13;13578:195;;;13657:13;;-1:-1:-1;;;;;13653:39:1;13641:52;;13713:12;;;;13748:15;;;;13689:1;13607:9;13578:195;;;-1:-1:-1;13789:3:1;;13337:461;-1:-1:-1;;;;;13337:461:1:o;13803:582::-;14102:6;14091:9;14084:25;14145:6;14140:2;14129:9;14125:18;14118:34;14188:3;14183:2;14172:9;14168:18;14161:31;14065:4;14209:57;14261:3;14250:9;14246:19;14238:6;14209:57;:::i;:::-;-1:-1:-1;;;;;14302:32:1;;;;14297:2;14282:18;;14275:60;-1:-1:-1;14366:3:1;14351:19;14344:35;14201:65;13803:582;-1:-1:-1;;;13803:582:1:o;14390:332::-;14597:6;14586:9;14579:25;14640:2;14635;14624:9;14620:18;14613:30;14560:4;14660:56;14712:2;14701:9;14697:18;14689:6;14660:56;:::i;:::-;14652:64;14390:332;-1:-1:-1;;;;14390:332:1:o;14727:168::-;14767:7;14833:1;14829;14825:6;14821:14;14818:1;14815:21;14810:1;14803:9;14796:17;14792:45;14789:71;;;14840:18;;:::i;:::-;-1:-1:-1;14880:9:1;;14727:168::o

Swarm Source

ipfs://e1b72198ce4a574bd2a74fc3506337a1e56bcb802d667e9a1f507576a3334846
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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